123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- unit DealBillsDm;
- interface
- uses
- SysUtils, Classes, sdDB, sdProvider, ADODB;
- type
- TDealBillsData = class(TDataModule)
- sdpDealBills: TsdADOProvider;
- sddDealBills: TsdDataSet;
- sdvDealBills: TsdDataView;
- procedure sddDealBillsBeforeAddRecord(ARecord: TsdDataRecord;
- var Allow: Boolean);
- procedure sdvDealBillsSetText(var Text: String; ARecord: TsdDataRecord;
- AValue: TsdValue; AColumn: TsdViewColumn; var Allow: Boolean);
- private
- FProjectData: TObject;
- function GetNewID: Integer;
- public
- constructor Create(AProjectData: TObject);
- destructor Destroy; override;
- procedure Open(AConnection: TADOConnection);
- procedure Close;
- procedure Save;
- procedure Clear;
- procedure DisableEvent;
- procedure EnableEvent;
- function DealRecord(const AB_Code: string): TsdDataRecord;
- function GetAllDealBillsJson: string;
- property ProjectData: TObject read FProjectData;
- end;
- implementation
- uses
- UtilMethods, superobject;
- {$R *.dfm}
- { TDealBillsData }
- procedure TDealBillsData.Clear;
- begin
- sddDealBills.DeleteAll;
- end;
- procedure TDealBillsData.Close;
- begin
- sddDealBills.Close;
- end;
- constructor TDealBillsData.Create(AProjectData: TObject);
- begin
- inherited Create(nil);
- FProjectData := AProjectData;
- end;
- function TDealBillsData.DealRecord(const AB_Code: string): TsdDataRecord;
- begin
- Result := sddDealBills.Locate('B_Code', AB_Code);
- end;
- destructor TDealBillsData.Destroy;
- begin
- inherited;
- end;
- procedure TDealBillsData.DisableEvent;
- begin
- sddDealBills.BeforeAddRecord := nil;
- end;
- procedure TDealBillsData.EnableEvent;
- begin
- sddDealBills.BeforeAddRecord := sddDealBillsBeforeAddRecord;
- end;
- function TDealBillsData.GetAllDealBillsJson: string;
- var
- vJa, vJbills: ISuperObject;
- i: Integer;
- Rec: TsdDataRecord;
- begin
- vJa := SA([]);
- try
- for i := 0 to sddDealBills.RecordCount - 1 do
- begin
- Rec := sddDealBills.Records[i];
- vJbills := SO;
- vJbills.S['lnum'] := Rec.ValueByName('B_Code').AsString;
- vJbills.S['lname'] := Rec.ValueByName('Name').AsString;
- vJbills.S['unit'] := Rec.ValueByName('Units').AsString;
- vJbills.D['unitprice'] := Rec.ValueByName('Price').AsFloat;
- vJbills.D['amount'] := Rec.ValueByName('Quantity').AsFloat;
- vJa.AsArray.Add(vJbills);
- end;
- finally
- Result := vJa.AsJSon;
- end;
- end;
- function TDealBillsData.GetNewID: Integer;
- var
- idx: TsdIndex;
- begin
- Result := 1;
- if sddDealBills.RecordCount = 0 then Exit;
- idx := sddDealBills.FindIndex('idxID');
- Result := idx.Records[sddDealBills.RecordCount - 1].ValueByName('ID').AsInteger + 1;
- end;
- procedure TDealBillsData.Open(AConnection: TADOConnection);
- begin
- sdpDealBills.Connection := AConnection;
- sddDealBills.Open;
- if not Assigned(sddDealBills.IndexList.FindByName('idxID')) then
- sddDealBills.AddIndex('idxID', 'ID');
- sdvDealBills.Open;
- sdvDealBills.IndexName := 'idxID';
- end;
- procedure TDealBillsData.Save;
- procedure CheckIndexCode;
- var
- i: Integer;
- Rec: TsdDataRecord;
- sIndexCode: string;
- begin
- for i := 0 to sddDealBills.RecordCount - 1 do
- begin
- Rec := sddDealBills.Records[i];
- sIndexCode := B_CodeToIndexCode(Rec.ValueByName('B_Code').AsString);
- if sIndexCode <> Rec.ValueByName('IndexCode').AsString then
- Rec.ValueByName('IndexCode').AsString := sIndexCode;
- end;
- end;
- begin
- CheckIndexCode;
- sddDealBills.Save;
- end;
- procedure TDealBillsData.sddDealBillsBeforeAddRecord(
- ARecord: TsdDataRecord; var Allow: Boolean);
- begin
- ARecord.ValueByName('ID').AsInteger := GetNewID;
- end;
- procedure TDealBillsData.sdvDealBillsSetText(var Text: String;
- ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
- var Allow: Boolean);
- begin
- if SameText(AColumn.FieldName, 'Price') then
- Text := FloatToStr(PriceRoundTo(StrToFloatDef(Text, 0)))
- else if SameText(AColumn.FieldName, 'Quantity') then
- Text := FloatToStr(QuantityRoundTo(StrToFloatDef(Text, 0)))
- else if SameText(AColumn.FieldName, 'TotalPrice') then
- Text := FloatToStr(TotalPriceRoundTo(StrToFloatDef(Text, 0)));
- end;
- end.
|