DealBillsDm.pas 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. unit DealBillsDm;
  2. interface
  3. uses
  4. SysUtils, Classes, sdDB, sdProvider, ADODB;
  5. type
  6. TDealBillsData = class(TDataModule)
  7. sdpDealBills: TsdADOProvider;
  8. sddDealBills: TsdDataSet;
  9. sdvDealBills: TsdDataView;
  10. procedure sddDealBillsBeforeAddRecord(ARecord: TsdDataRecord;
  11. var Allow: Boolean);
  12. procedure sdvDealBillsSetText(var Text: String; ARecord: TsdDataRecord;
  13. AValue: TsdValue; AColumn: TsdViewColumn; var Allow: Boolean);
  14. private
  15. FProjectData: TObject;
  16. function GetNewID: Integer;
  17. public
  18. constructor Create(AProjectData: TObject);
  19. destructor Destroy; override;
  20. procedure Open(AConnection: TADOConnection);
  21. procedure Close;
  22. procedure Save;
  23. procedure Clear;
  24. procedure DisableEvent;
  25. procedure EnableEvent;
  26. function DealRecord(const AB_Code: string): TsdDataRecord;
  27. function GetAllDealBillsJson: string;
  28. property ProjectData: TObject read FProjectData;
  29. end;
  30. implementation
  31. uses
  32. UtilMethods, superobject;
  33. {$R *.dfm}
  34. { TDealBillsData }
  35. procedure TDealBillsData.Clear;
  36. begin
  37. sddDealBills.DeleteAll;
  38. end;
  39. procedure TDealBillsData.Close;
  40. begin
  41. sddDealBills.Close;
  42. end;
  43. constructor TDealBillsData.Create(AProjectData: TObject);
  44. begin
  45. inherited Create(nil);
  46. FProjectData := AProjectData;
  47. end;
  48. function TDealBillsData.DealRecord(const AB_Code: string): TsdDataRecord;
  49. begin
  50. Result := sddDealBills.Locate('B_Code', AB_Code);
  51. end;
  52. destructor TDealBillsData.Destroy;
  53. begin
  54. inherited;
  55. end;
  56. procedure TDealBillsData.DisableEvent;
  57. begin
  58. sddDealBills.BeforeAddRecord := nil;
  59. end;
  60. procedure TDealBillsData.EnableEvent;
  61. begin
  62. sddDealBills.BeforeAddRecord := sddDealBillsBeforeAddRecord;
  63. end;
  64. function TDealBillsData.GetAllDealBillsJson: string;
  65. var
  66. vJa, vJbills: ISuperObject;
  67. i: Integer;
  68. Rec: TsdDataRecord;
  69. begin
  70. vJa := SA([]);
  71. try
  72. for i := 0 to sddDealBills.RecordCount - 1 do
  73. begin
  74. Rec := sddDealBills.Records[i];
  75. vJbills := SO;
  76. vJbills.S['lnum'] := Rec.ValueByName('B_Code').AsString;
  77. vJbills.S['lname'] := Rec.ValueByName('Name').AsString;
  78. vJbills.S['unit'] := Rec.ValueByName('Units').AsString;
  79. vJbills.D['unitprice'] := Rec.ValueByName('Price').AsFloat;
  80. vJbills.D['amount'] := Rec.ValueByName('Quantity').AsFloat;
  81. vJa.AsArray.Add(vJbills);
  82. end;
  83. finally
  84. Result := vJa.AsJSon;
  85. end;
  86. end;
  87. function TDealBillsData.GetNewID: Integer;
  88. var
  89. idx: TsdIndex;
  90. begin
  91. Result := 1;
  92. if sddDealBills.RecordCount = 0 then Exit;
  93. idx := sddDealBills.FindIndex('idxID');
  94. Result := idx.Records[sddDealBills.RecordCount - 1].ValueByName('ID').AsInteger + 1;
  95. end;
  96. procedure TDealBillsData.Open(AConnection: TADOConnection);
  97. begin
  98. sdpDealBills.Connection := AConnection;
  99. sddDealBills.Open;
  100. if not Assigned(sddDealBills.IndexList.FindByName('idxID')) then
  101. sddDealBills.AddIndex('idxID', 'ID');
  102. sdvDealBills.Open;
  103. sdvDealBills.IndexName := 'idxID';
  104. end;
  105. procedure TDealBillsData.Save;
  106. procedure CheckIndexCode;
  107. var
  108. i: Integer;
  109. Rec: TsdDataRecord;
  110. sIndexCode: string;
  111. begin
  112. for i := 0 to sddDealBills.RecordCount - 1 do
  113. begin
  114. Rec := sddDealBills.Records[i];
  115. sIndexCode := B_CodeToIndexCode(Rec.ValueByName('B_Code').AsString);
  116. if sIndexCode <> Rec.ValueByName('IndexCode').AsString then
  117. Rec.ValueByName('IndexCode').AsString := sIndexCode;
  118. end;
  119. end;
  120. begin
  121. CheckIndexCode;
  122. sddDealBills.Save;
  123. end;
  124. procedure TDealBillsData.sddDealBillsBeforeAddRecord(
  125. ARecord: TsdDataRecord; var Allow: Boolean);
  126. begin
  127. ARecord.ValueByName('ID').AsInteger := GetNewID;
  128. end;
  129. procedure TDealBillsData.sdvDealBillsSetText(var Text: String;
  130. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  131. var Allow: Boolean);
  132. begin
  133. if SameText(AColumn.FieldName, 'Price') then
  134. Text := FloatToStr(PriceRoundTo(StrToFloatDef(Text, 0)))
  135. else if SameText(AColumn.FieldName, 'Quantity') then
  136. Text := FloatToStr(QuantityRoundTo(StrToFloatDef(Text, 0)))
  137. else if SameText(AColumn.FieldName, 'TotalPrice') then
  138. Text := FloatToStr(TotalPriceRoundTo(StrToFloatDef(Text, 0)));
  139. end;
  140. end.