PriceMarginBillsFme.pas 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. unit PriceMarginBillsFme;
  2. interface
  3. uses
  4. SelectDetailGLsFrm,
  5. PriceMarginBillsDm, ProjectGLDm, DetailGLDm, sdDB,
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, sdGridDBA, ZJGrid, ExtCtrls, StdCtrls, JimLabels, dxBar,
  8. JimPages, ComCtrls, ToolWin, ActnList, XPMenu;
  9. type
  10. TPriceMarginBillsFrame = class(TFrame)
  11. pnlGclBills: TPanel;
  12. pnlDetail: TPanel;
  13. sprDetail: TSplitter;
  14. zgGclBills: TZJGrid;
  15. saGclBills: TsdGridDBA;
  16. pnlRelaData: TPanel;
  17. sprRela: TSplitter;
  18. pnlDetailBills: TPanel;
  19. labTitle: TJimGradLabel;
  20. zgDetailGclBills: TZJGrid;
  21. saDetailGclBills: TsdGridDBA;
  22. pnlRelaTop: TPanel;
  23. tbRelaTop: TToolBar;
  24. tobtnDetailGL: TToolButton;
  25. tobtnParent: TToolButton;
  26. jpsRela: TJimPages;
  27. jpsRelaDetailGL: TJimPage;
  28. jpsRelaBillsParent: TJimPage;
  29. zgDetailGL: TZJGrid;
  30. saDetailGL: TsdGridDBA;
  31. dxpmDetailGL: TdxBarPopupMenu;
  32. pnlBills: TPanel;
  33. actnPriceMarginBills: TActionList;
  34. actnAddDetailGLs: TAction;
  35. dxpmDetailGclBills: TdxBarPopupMenu;
  36. actnCopyDetailGLs: TAction;
  37. xpm: TXPMenu;
  38. actnApplyToSameBills: TAction;
  39. procedure zgDetailGLMouseDown(Sender: TObject; Button: TMouseButton;
  40. Shift: TShiftState; X, Y: Integer);
  41. procedure dxpmDetailGLPopup(Sender: TObject);
  42. procedure actnAddDetailGLsExecute(Sender: TObject);
  43. procedure dxpmDetailGclBillsPopup(Sender: TObject);
  44. procedure actnApplyToSameBillsExecute(Sender: TObject);
  45. procedure zgDetailGclBillsMouseDown(Sender: TObject;
  46. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  47. procedure actnAddDetailGLsUpdate(Sender: TObject);
  48. private
  49. FPriceMarginBillsData: TPriceMarginBillsData;
  50. FProjectGLData: TProjectGLData;
  51. FDetailGLData: TDetailGLData;
  52. procedure AddDetailGLs;
  53. public
  54. constructor Create(APriceMarginBillsData: TPriceMarginBillsData);
  55. destructor Destroy; override;
  56. procedure ResetViewControl;
  57. end;
  58. implementation
  59. uses
  60. UtilMethods, MainFrm, BillsTree, ProjectData;
  61. {$R *.dfm}
  62. { TPriceMarginBillsFrame }
  63. constructor TPriceMarginBillsFrame.Create(
  64. APriceMarginBillsData: TPriceMarginBillsData);
  65. begin
  66. inherited Create(nil);
  67. FPriceMarginBillsData := APriceMarginBillsData;
  68. FProjectGLData := TProjectData(FPriceMarginBillsData.ProjectData).ProjectGLData;
  69. FDetailGLData := TProjectData(FPriceMarginBillsData.ProjectData).DetailGLData;
  70. saGclBills.DataView := APriceMarginBillsData.sdvGclBills;
  71. saDetailGclBills.DataView := APriceMarginBillsData.sdvDetailGclBills;
  72. saDetailGL.DataView := APriceMarginBillsData.sdvDetailGL;
  73. end;
  74. destructor TPriceMarginBillsFrame.Destroy;
  75. begin
  76. inherited;
  77. end;
  78. procedure TPriceMarginBillsFrame.zgDetailGLMouseDown(Sender: TObject;
  79. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  80. begin
  81. if Button = mbRight then
  82. dxpmDetailGL.PopupFromCursorPos;
  83. end;
  84. procedure TPriceMarginBillsFrame.dxpmDetailGLPopup(Sender: TObject);
  85. begin
  86. SetDxBtnAction(actnAddDetailGLs, MainForm.dxbtnAddDetailGLs);
  87. end;
  88. procedure TPriceMarginBillsFrame.actnAddDetailGLsExecute(Sender: TObject);
  89. var
  90. iID: Integer;
  91. vNode: TBillsIDTreeNode;
  92. begin
  93. iID := saDetailGclBills.DataView.Current.ValueByName('RelaBillsID').AsInteger;
  94. vNode := TBillsIDTreeNode(FPriceMarginBillsData.MainBillsTree.FindNode(iID));
  95. AddDetailGLs;
  96. { ErrorMessage('当前清单已进行材料调差,不可再添加调差工料。');}
  97. end;
  98. procedure TPriceMarginBillsFrame.AddDetailGLs;
  99. var
  100. DetailGLs: TList;
  101. begin
  102. DetailGLs := TList.Create;
  103. try
  104. if SelectDetailGLs(FProjectGLData, DetailGLs) then
  105. FPriceMarginBillsData.AddDetailGLs(DetailGLs);
  106. finally
  107. DetailGLs.Free;
  108. end;
  109. end;
  110. procedure TPriceMarginBillsFrame.dxpmDetailGclBillsPopup(Sender: TObject);
  111. begin
  112. SetDxBtnAction(actnApplyToSameBills, MainForm.dxbtnApplyToSameBills);
  113. SetDxBtnAction(actnCopyDetailGLs, MainForm.dxbtnCopyDetailGls);
  114. end;
  115. procedure TPriceMarginBillsFrame.actnApplyToSameBillsExecute(
  116. Sender: TObject);
  117. var
  118. CurRec, Rec: TsdDataRecord;
  119. vGLs: TList;
  120. iRec: Integer;
  121. begin
  122. if saDetailGclBills.DataView.RecordCount = 1 then Exit;
  123. vGLs := TList.Create;
  124. try
  125. CurRec := saDetailGclBills.DataView.Current;
  126. FDetailGLData.LoadDetailGLs(CurRec.ValueByName('RelaBillsID').AsInteger, vGLs);
  127. for iRec := 0 to saDetailGclBills.DataView.RecordCount - 1 do
  128. begin
  129. Rec := saDetailGclBills.DataView.Records[iRec];
  130. if Rec <> CurRec then
  131. begin
  132. FDetailGLData.ResetDetailGLs(Rec.ValueByName('RelaBillsID').AsInteger, vGLs);
  133. // 应重新计算清单
  134. with TProjectData(FPriceMarginBillsData.ProjectData) do
  135. PhaseData.StageData.CalculatePriceMargin(Rec.ValueByName('RelaBillsID').AsInteger);
  136. FPriceMarginBillsData.RefreshDetailBills(Rec.ValueByName('RelaBillsID').AsInteger);
  137. end;
  138. // 应重新计算使用到的工料
  139. FProjectGLData.CalculateGLs_PM(vGLs);
  140. end;
  141. finally
  142. vGLs.Free;
  143. end;
  144. end;
  145. procedure TPriceMarginBillsFrame.zgDetailGclBillsMouseDown(Sender: TObject;
  146. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  147. begin
  148. if Button = mbRight then
  149. dxpmDetailGclBills.PopupFromCursorPos;
  150. end;
  151. procedure TPriceMarginBillsFrame.actnAddDetailGLsUpdate(Sender: TObject);
  152. begin
  153. with TProjectData(FPriceMarginBillsData.ProjectData) do
  154. TAction(Sender).Enabled := (not PriceMarginReadOnly) and Assigned(saDetailGclBills.DataView.Current);
  155. end;
  156. procedure TPriceMarginBillsFrame.ResetViewControl;
  157. begin
  158. with TProjectData(FPriceMarginBillsData.ProjectData) do
  159. begin
  160. saDetailGL.Columns.ColumnByName('Quantity').ReadOnly := PriceMarginReadOnly;
  161. if PriceMarginReadOnly then
  162. saDetailGL.Options := saDetailGL.Options - [aoAllowDelete]
  163. else
  164. saDetailGL.Options := saDetailGL.Options + [aoAllowDelete];
  165. end;
  166. end;
  167. end.