DealBillsDm.pas 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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. begin
  83. sddDealBills.Save;
  84. end;
  85. procedure TDealBillsData.sddDealBillsBeforeAddRecord(
  86. ARecord: TsdDataRecord; var Allow: Boolean);
  87. begin
  88. ARecord.ValueByName('ID').AsInteger := GetNewID;
  89. end;
  90. procedure TDealBillsData.sdvDealBillsSetText(var Text: String;
  91. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  92. var Allow: Boolean);
  93. begin
  94. if SameText(AColumn.FieldName, 'Price') then
  95. Text := FloatToStr(PriceRoundTo(StrToFloatDef(Text, 0)))
  96. else if SameText(AColumn.FieldName, 'Quantity') then
  97. Text := FloatToStr(QuantityRoundTo(StrToFloatDef(Text, 0)))
  98. else if SameText(AColumn.FieldName, 'TotalPrice') then
  99. Text := FloatToStr(TotalPriceRoundTo(StrToFloatDef(Text, 0)));
  100. end;
  101. end.