expertcad/SRC/SCSNormBase/U_CurrencyPreparer.pas
2025-05-12 10:07:51 +03:00

457 lines
16 KiB
ObjectPascal
Raw Blame History

unit U_CurrencyPreparer;
interface
uses
Windows, U_LNG, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, RzPanel, RzButton, StdCtrls, RzLstBox, RzCmboBx,
Buttons,
U_BaseCommon, U_BaseConstants, U_Common, U_SCSComponent, U_SCSLists, siComp, siLngLnk,
RzTabs, DB;
type
TF_CurrencyPreparer = class(TForm)
RzGroupBox2: TRzGroupBox;
RzBitBtn1: TRzBitBtn;
RzBitBtn2: TRzBitBtn;
lng_Forms: TsiLangLinked;
RzPageControl1: TRzPageControl;
TabSheet1: TRzTabSheet;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
cbMainCurrency: TRzComboBox;
cbSecondCurrency: TRzComboBox;
RzGroupBox3: TRzGroupBox;
btAddToDel: TSpeedButton;
btRemoveFromDel: TSpeedButton;
lbToDelete: TRzListBox;
cbCountryCurrency: TRzComboBox;
btPrepareCurrency: TRzBitBtn;
TabSheet2: TRzTabSheet;
cbNBType: TRzComboBox;
Label4: TLabel;
btSetNBType: TRzBitBtn;
btClearBackupBaseDate: TRzBitBtn;
procedure cbMainCurrencyChange(Sender: TObject);
procedure cbSecondCurrencyChange(Sender: TObject);
procedure btAddToDelClick(Sender: TObject);
procedure btRemoveFromDelClick(Sender: TObject);
procedure cbCountryCurrencyChange(Sender: TObject);
procedure btPrepareCurrencyClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btSetNBTypeClick(Sender: TObject);
procedure btClearBackupBaseDateClick(Sender: TObject);
private
GForm: TForm;
FFirstMCurrency: TCurrency;
FFirstSCurrency: TCurrency;
FCountryCurrency: TCurrency;
FCurrMCurrency: TCurrency;
FCurrSCurrency: TCurrency;
FCurrCountryCurrency: TCurrency;
procedure DeleteCurrenciesFromListBox(AIDList: TIntList);
procedure OnChangeCurrencyCombo(ASenderCombo, AOtherCombo: TRzComboBox; var ASenderCurrency, AOtherCurrency: TCurrency);
procedure SetControls;
public
Constructor Create(AOwner: TComponent; AForm: TForm);
Destructor Destroy; override;
//Tolik -- 16/03/2018 --
//function Execute: Boolean;
function Execute(aShowNBTab: Boolean = True): Boolean;
//
end;
//var
// F_CurrencyPreparer: TF_CurrencyPreparer;
implementation
Uses Unit_DM_SCS, U_Main;
{$R *.dfm}
{ TForm1 }
constructor TF_CurrencyPreparer.Create(AOwner: TComponent; AForm: TForm);
begin
GForm := AForm;
inherited Create(AOwner);
end;
destructor TF_CurrencyPreparer.Destroy;
begin
inherited;
end;
// Tolik -- 16/03/2018 --
//function TF_CurrencyPreparer.Execute: Boolean;
function TF_CurrencyPreparer.Execute(aShowNBTab: Boolean = True): Boolean;
//
var
//CatalogIDs: TIntList;
//CurrencyToDel: TCurrency;
//i: integer;
//ptrOldMainCurrency: PObjectCurrencyRel;
//ptrNewMainCurrency: PObjectCurrencyRel;
//ptrNewSecondCurrency: PObjectCurrencyRel;
NBType: Integer;
begin
Result := false;
if aShowNbTab then
RzPageControl1.Pages[1].TabVisible := True
else
RzPageControl1.Pages[1].TabVisible := False;
cbMainCurrency.OnChange := nil;
cbSecondCurrency.OnChange := nil;
FFirstMCurrency := TF_Main(GForm).DM.GetCurrencyByType(ctMain);
FFirstSCurrency := TF_Main(GForm).DM.GetCurrencyByType(ctSecond);
FCountryCurrency := TF_Main(GForm).DM.GetCountryCurrency;
FCurrMCurrency := FFirstMCurrency;
FCurrSCurrency := FFirstSCurrency;
FCurrCountryCurrency := FCountryCurrency;
FillComboBoxRz(cbMainCurrency, GForm, false, tnCurrency, fnID, fnName, '', FCurrMCurrency.ID);
FillComboBoxRz(cbSecondCurrency, GForm, false, tnCurrency, fnID, fnName, '', FCurrSCurrency.ID);
FillComboBoxRz(cbCountryCurrency, GForm, false, tnCurrency, fnID, fnName, '', FCountryCurrency.ID);
lbToDelete.Items.Clear;
cbMainCurrency.OnChange := cbMainCurrencyChange;
cbSecondCurrency.OnChange := cbSecondCurrencyChange;
NBType := TF_Main(GForm).DM.GetNBType;
if NBType = 0 then
NBType := nbtNone;
SelectItemByIDinComboRz(cbNBType, NBType);
SetControls;
if ShowModal = mrOk then
begin
//with TF_Main(GForm).DM do
// begin
// CatalogIDs := GetCatalogIDsByLevel(dirCurrencyLevel, Query_Select);
// BeginProgress('', 2 + CatalogIDs.Count + lbToDelete.Items.Count);
// try
// //*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// ChengeCurrencyRatiosWithPrices(FFirstMCurrency, FCurrMCurrency, FCurrSCurrency, Query_Select, Query_Operat);
// StepProgress;
//
// //*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// if FCurrCountryCurrency.ID <> FCountryCurrency.ID then
// begin
// SetSQLToFIBQuery(Query_Operat, GetSQLByParams(qtUpdate, tnCurrency, '', nil, fnIsCountry), false);
// Query_Operat.Params[0].AsInteger := biFalse;
// Query_Operat.ExecQuery;
// UpdateIntTableFieldByID(tnCurrency, fnIsCountry, FCurrCountryCurrency.ID, biTrue, qmPhisical);
// end;
// StepProgress;
//
// //*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
// //ptrNewMainCurrency := GetDefObjectCurrencyByMainFld(ctMain);
// //ptrNewSecondCurrency := GetDefObjectCurrencyByMainFld(ctSecond);
// for i := 0 to CatalogIDs.Count - 1 do
// begin
// //ptrNewMainCurrency := GetObjectCurrencyByMainFld(CatalogIDs[i], ctMain);
// //ptrNewSecondCurrency := GetObjectCurrencyByMainFld(CatalogIDs[i], ctSecond);
// //GetZeroMem(ptrOldMainCurrency, SizeOf(TObjectCurrencyRel));
// //ptrOldMainCurrency^ := ptrNewMainCurrency^;
//
// ptrOldMainCurrency := GetObjectCurrencyByMainFld(CatalogIDs[i], ctMain);
// ptrNewMainCurrency := GetObjectCurrencyByIDCurrency(CatalogIDs[i], FCurrMCurrency.ID);
// ptrNewSecondCurrency := GetObjectCurrencyByIDCurrency(CatalogIDs[i], FCurrSCurrency.ID);
//
// if (ptrOldMainCurrency <> nil) and (ptrNewMainCurrency <> nil) and (ptrNewSecondCurrency <> nil) then
// ChangeObjectCurrencyRatiosWithPrices(CatalogIDs[i], ptrOldMainCurrency, ptrNewMainCurrency, ptrNewSecondCurrency,
// Query_Select, Query_Operat);
// StepProgress;
//
// if ptrNewMainCurrency <> nil then
// FreeMem(ptrNewMainCurrency);
// if ptrNewSecondCurrency <> nil then
// FreeMem(ptrNewSecondCurrency);
// if ptrOldMainCurrency <> nil then
// FreeMem(ptrOldMainCurrency);
// end;
// FreeAndNil(CatalogIDs);
//
// //*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// for i := 0 to lbToDelete.Items.Count - 1 do
// begin
// CurrencyToDel := GetCurrencyByID(Integer(lbToDelete.Items.Objects[i]));
// if (CurrencyToDel.Main <> ctMain) and (CurrencyToDel.Main <> ctSecond) and (CurrencyToDel.IsCountry <> biTrue) then
// DeleteRecordFromTableByID(tnCurrency, Integer(lbToDelete.Items.Objects[i]), qmPhisical);
// StepProgress;
// end;
// finally
// EndProgress;
// end;
// TF_Main(GForm).RefreshNode(true);
// end;
end;
ClearComboBoxRz(cbMainCurrency);
ClearComboBoxRz(cbSecondCurrency);
end;
procedure TF_CurrencyPreparer.OnChangeCurrencyCombo(ASenderCombo, AOtherCombo: TRzComboBox; var ASenderCurrency, AOtherCurrency: TCurrency);
var
NewCurrency: TCurrency;
SavedOnChangeOtherCombo: TNotifyEvent;
CurrencyIDs: TIntList;
i: Integer;
IDToDel: Integer;
begin
NewCurrency.ID := GetIDFromComboBoxRz(ASenderCombo);
NewCurrency := TF_Main(GForm).DM.GetCurrencyByID(NewCurrency.ID);
//*** <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> COMBO, <20><> <20> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
// <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20> ASenderCombo <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if NewCurrency.ID = AOtherCurrency.ID then
begin
SavedOnChangeOtherCombo := AOtherCombo.OnChange;
AOtherCombo.OnChange := nil;
try
SelectItemByIDinComboRz(AOtherCombo, ASenderCurrency.ID);
AOtherCurrency := ASenderCurrency;
finally
AOtherCombo.OnChange := SavedOnChangeOtherCombo;
end;
end;
ASenderCurrency := NewCurrency;
//*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CurrencyIDs := TIntList.Create;
CurrencyIDs.Add(ASenderCurrency.ID);
CurrencyIDs.Add(AOtherCurrency.ID);
DeleteCurrenciesFromListBox(CurrencyIDs);
FreeAndNil(CurrencyIDs);
//i := 0;
//while i <= lbToDelete.Items.Count - 1 do
//begin
// IDToDel := Integer(lbToDelete.Items.Objects[i]);
// if (IDToDel = ASenderCurrency.ID) or (IDToDel = AOtherCurrency.ID) then
// lbToDelete.Items.Delete(i)
// else
// Inc(i);
//end;
SetControls;
end;
procedure TF_CurrencyPreparer.cbCountryCurrencyChange(Sender: TObject);
var
IDCurrency: Integer;
CurrencyIDList: TIntList;
begin
IDCurrency := GetIDFromComboBoxRz(cbCountryCurrency);
if IDCurrency <> 0 then
begin
FCurrCountryCurrency.ID := IDCurrency;
FCurrCountryCurrency := TF_Main(GForm).DM.GetCurrencyByID(FCurrCountryCurrency.ID);
CurrencyIDList := TIntList.Create;
DeleteCurrenciesFromListBox(CurrencyIDList);
FreeAndNil(CurrencyIDList);
SetControls;
end;
end;
procedure TF_CurrencyPreparer.DeleteCurrenciesFromListBox(AIDList: TIntList);
var
i: Integer;
IDToDel: Integer;
begin
i := 0;
while i <= lbToDelete.Items.Count - 1 do
begin
IDToDel := Integer(lbToDelete.Items.Objects[i]);
//if (IDToDel = ASenderCurrency.ID) or (IDToDel = AOtherCurrency.ID) then
if AIDList.IndexOf(IDToDel) <> -1 then
lbToDelete.Items.Delete(i)
else
Inc(i);
end;
end;
procedure TF_CurrencyPreparer.SetControls;
begin
btRemoveFromDel.Enabled := (lbToDelete.ItemIndex <> -1);
end;
procedure TF_CurrencyPreparer.cbMainCurrencyChange(Sender: TObject);
begin
OnChangeCurrencyCombo(cbMainCurrency, cbSecondCurrency, FCurrMCurrency, FCurrSCurrency);
end;
procedure TF_CurrencyPreparer.cbSecondCurrencyChange(Sender: TObject);
begin
OnChangeCurrencyCombo(cbSecondCurrency, cbMainCurrency, FCurrSCurrency, FCurrMCurrency);
end;
procedure TF_CurrencyPreparer.btAddToDelClick(Sender: TObject);
var
IDToDel: integer;
CurrencyToDel: TCurrency;
strMsg: string;
begin
IDToDel := F_NormBase.DM.GetCurrencyIDFromGuide(0, fmMake);
if IDToDel <> 0 then
begin
CurrencyToDel := TF_Main(GForm).DM.GetCurrencyByID(IDToDel);
strMsg := '';
if CurrencyToDel.ID = FCurrMCurrency.ID then
strMsg := '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '+CurrencyToDel.Name+' <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
else
if CurrencyToDel.ID = FCurrSCurrency.ID then
strMsg := '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '+CurrencyToDel.Name+' <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>'
else
if CurrencyToDel.ID = FCurrCountryCurrency.ID then
strMsg := '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> '+CurrencyToDel.Name+' <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>';
if strMsg <> '' then
MessageModal(strMsg, ApplicationName, MB_ICONINFORMATION or MB_OK)
else
begin
lbToDelete.Items.AddObject(CurrencyToDel.Name, TObject(CurrencyToDel.ID));
lbToDelete.ItemIndex := lbToDelete.Items.Count-1;
SetControls;
end;
end;
end;
procedure TF_CurrencyPreparer.btRemoveFromDelClick(Sender: TObject);
begin
if lbToDelete.ItemIndex <> -1 then
begin
lbToDelete.Items.Delete(lbToDelete.ItemIndex);
SetControls;
end;
end;
procedure TF_CurrencyPreparer.btPrepareCurrencyClick(Sender: TObject);
var
CatalogIDs: TIntList;
CurrencyToDel: TCurrency;
i: integer;
ptrOldMainCurrency: PObjectCurrencyRel;
ptrNewMainCurrency: PObjectCurrencyRel;
ptrNewSecondCurrency: PObjectCurrencyRel;
begin
with TF_Main(GForm).DM do
begin
CatalogIDs := GetCatalogIDsByLevel(dirCurrencyLevel, Query_Select);
BeginProgress('', 2 + CatalogIDs.Count + lbToDelete.Items.Count);
try
//*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ChengeCurrencyRatiosWithPrices(FFirstMCurrency, FCurrMCurrency, FCurrSCurrency, Query_Select, Query_Operat);
StepProgress;
//*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if FCurrCountryCurrency.ID <> FCountryCurrency.ID then
begin
SetSQLToFIBQuery(Query_Operat, GetSQLByParams(qtUpdate, tnCurrency, '', nil, fnIsCountry), false);
Query_Operat.Params[0].AsInteger := biFalse;
Query_Operat.ExecQuery;
UpdateIntTableFieldByID(tnCurrency, fnIsCountry, FCurrCountryCurrency.ID, biTrue, qmPhisical);
end;
StepProgress;
//*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
//ptrNewMainCurrency := GetDefObjectCurrencyByMainFld(ctMain);
//ptrNewSecondCurrency := GetDefObjectCurrencyByMainFld(ctSecond);
for i := 0 to CatalogIDs.Count - 1 do
begin
//ptrNewMainCurrency := GetObjectCurrencyByMainFld(CatalogIDs[i], ctMain);
//ptrNewSecondCurrency := GetObjectCurrencyByMainFld(CatalogIDs[i], ctSecond);
//GetZeroMem(ptrOldMainCurrency, SizeOf(TObjectCurrencyRel));
//ptrOldMainCurrency^ := ptrNewMainCurrency^;
ptrOldMainCurrency := GetObjectCurrencyByMainFld(CatalogIDs[i], ctMain);
ptrNewMainCurrency := GetObjectCurrencyByIDCurrency(CatalogIDs[i], FCurrMCurrency.ID);
ptrNewSecondCurrency := GetObjectCurrencyByIDCurrency(CatalogIDs[i], FCurrSCurrency.ID);
if (ptrOldMainCurrency <> nil) and (ptrNewMainCurrency <> nil) and (ptrNewSecondCurrency <> nil) then
ChangeObjectCurrencyRatiosWithPrices(CatalogIDs[i], ptrOldMainCurrency, ptrNewMainCurrency, ptrNewSecondCurrency,
Query_Select, Query_Operat);
StepProgress;
if ptrNewMainCurrency <> nil then
FreeMem(ptrNewMainCurrency);
if ptrNewSecondCurrency <> nil then
FreeMem(ptrNewSecondCurrency);
if ptrOldMainCurrency <> nil then
FreeMem(ptrOldMainCurrency);
end;
FreeAndNil(CatalogIDs);
//*** <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
for i := 0 to lbToDelete.Items.Count - 1 do
begin
CurrencyToDel := GetCurrencyByID(Integer(lbToDelete.Items.Objects[i]));
if (CurrencyToDel.Main <> ctMain) and (CurrencyToDel.Main <> ctSecond) and (CurrencyToDel.IsCountry <> biTrue) then
DeleteRecordFromTableByID(tnCurrency, Integer(lbToDelete.Items.Objects[i]), qmPhisical);
StepProgress;
end;
finally
EndProgress;
end;
TF_Main(GForm).RefreshNode(true);
end;
end;
procedure TF_CurrencyPreparer.FormCreate(Sender: TObject);
begin
cbNBType.Items.Clear;
AddIDToComboRz(nbtNone, '', cbNBType);
AddIDToComboRz(nbtGeneral, '<27><><EFBFBD><EFBFBD><EFBFBD>', cbNBType);
AddIDToComboRz(nbtTrial, '<27><><EFBFBD><EFBFBD><EFBFBD>', cbNBType);
AddIDToComboRz(nbtSCSUA, '<27><><EFBFBD> UA', cbNBType);
AddIDToComboRz(nbtSCSRU, '<27><><EFBFBD> RU', cbNBType);
AddIDToComboRz(nbtTelecomUA, '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> UA', cbNBType);
AddIDToComboRz(nbtTelecomRU, '<27><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> RU', cbNBType);
AddIDToComboRz(nbTube, '<27><><EFBFBD><EFBFBD><EFBFBD>', cbNBType);
AddIDToComboRz(nbCableProjectPE, 'CableProject', cbNBType);
AddIDToComboRz(nbGraphStroyCalc, '<27><><EFBFBD><EFBFBD>. <20><>', cbNBType);
AddIDToComboRz(nbtTelcoCAD, 'TELCOCAD', cbNBType);
cbNBType.ItemIndex := nbtGeneral;
end;
procedure TF_CurrencyPreparer.btSetNBTypeClick(Sender: TObject);
var
NBType: Integer;
begin
//NBType := GetIDFromComboBoxRz(cbNBType) * nbTypeKoeff;
//if Not CheckFieldInTable(tnGradeGrid, fnDescription, TF_Main(GForm).DM.Query_Select) then
//begin
// AddFieldToTable(tnGradeGrid, fnDescription, ftString, NBType, TF_Main(GForm).DM.Query_Operat);
//end;
//SetFieldInfo(tnGradeGrid, fnDescription, 'RDB$FIELD_LENGTH', NBType, TF_Main(GForm).DM.Query_Select, TF_Main(GForm).DM.Query_Operat);
//SetFieldInfo(tnGradeGrid, fnDescription, 'RDB$CHARACTER_LENGTH', NBType, TF_Main(GForm).DM.Query_Select, TF_Main(GForm).DM.Query_Operat);
NBType := GetIDFromComboBoxRz(cbNBType);
SetNBType(NBType, TF_Main(GForm).DM.Query_Select, TF_Main(GForm).DM.Query_Operat);
end;
procedure TF_CurrencyPreparer.btClearBackupBaseDateClick(Sender: TObject);
begin
UpdateTableFieldAllRec(F_NormBase.DM.Query_Operat, tnSettings, fnBackUpDate, null);
UpdateTableFieldAllRec(F_ProjMan.DM.Query_Operat, tnSettings, fnBackUpDate, null);
MessageInfo('OK');
end;
end.