DealBillsDm.pas 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  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. property ProjectData: TObject read FProjectData;
  28. end;
  29. implementation
  30. uses
  31. UtilMethods;
  32. {$R *.dfm}
  33. { TDealBillsData }
  34. procedure TDealBillsData.Clear;
  35. begin
  36. sddDealBills.DeleteAll;
  37. end;
  38. procedure TDealBillsData.Close;
  39. begin
  40. sddDealBills.Close;
  41. end;
  42. constructor TDealBillsData.Create(AProjectData: TObject);
  43. begin
  44. inherited Create(nil);
  45. FProjectData := AProjectData;
  46. end;
  47. function TDealBillsData.DealRecord(const AB_Code: string): TsdDataRecord;
  48. begin
  49. Result := sddDealBills.Locate('B_Code', AB_Code);
  50. end;
  51. destructor TDealBillsData.Destroy;
  52. begin
  53. inherited;
  54. end;
  55. procedure TDealBillsData.DisableEvent;
  56. begin
  57. sddDealBills.BeforeAddRecord := nil;
  58. end;
  59. procedure TDealBillsData.EnableEvent;
  60. begin
  61. sddDealBills.BeforeAddRecord := sddDealBillsBeforeAddRecord;
  62. end;
  63. function TDealBillsData.GetNewID: Integer;
  64. var
  65. idx: TsdIndex;
  66. begin
  67. Result := 1;
  68. if sddDealBills.RecordCount = 0 then Exit;
  69. idx := sddDealBills.FindIndex('idxID');
  70. Result := idx.Records[sddDealBills.RecordCount - 1].ValueByName('ID').AsInteger + 1;
  71. end;
  72. procedure TDealBillsData.Open(AConnection: TADOConnection);
  73. begin
  74. sdpDealBills.Connection := AConnection;
  75. sddDealBills.Open;
  76. if not Assigned(sddDealBills.IndexList.FindByName('idxID')) then
  77. sddDealBills.AddIndex('idxID', 'ID');
  78. sdvDealBills.Open;
  79. sdvDealBills.IndexName := 'idxID';
  80. end;
  81. procedure TDealBillsData.Save;
  82. procedure CheckIndexCode;
  83. var
  84. i: Integer;
  85. Rec: TsdDataRecord;
  86. sIndexCode: string;
  87. begin
  88. for i := 0 to sddDealBills.RecordCount - 1 do
  89. begin
  90. Rec := sddDealBills.Records[i];
  91. sIndexCode := B_CodeToIndexCode(Rec.ValueByName('B_Code').AsString);
  92. if sIndexCode <> Rec.ValueByName('IndexCode').AsString then
  93. Rec.ValueByName('IndexCode').AsString := sIndexCode;
  94. end;
  95. end;
  96. begin
  97. CheckIndexCode;
  98. sddDealBills.Save;
  99. end;
  100. procedure TDealBillsData.sddDealBillsBeforeAddRecord(
  101. ARecord: TsdDataRecord; var Allow: Boolean);
  102. begin
  103. ARecord.ValueByName('ID').AsInteger := GetNewID;
  104. end;
  105. procedure TDealBillsData.sdvDealBillsSetText(var Text: String;
  106. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  107. var Allow: Boolean);
  108. begin
  109. if SameText(AColumn.FieldName, 'Price') then
  110. Text := FloatToStr(PriceRoundTo(StrToFloatDef(Text, 0)))
  111. else if SameText(AColumn.FieldName, 'Quantity') then
  112. Text := FloatToStr(QuantityRoundTo(StrToFloatDef(Text, 0)))
  113. else if SameText(AColumn.FieldName, 'TotalPrice') then
  114. Text := FloatToStr(TotalPriceRoundTo(StrToFloatDef(Text, 0)));
  115. end;
  116. end.