PriceMarginBillsFme.pas 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  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, iLeafXmj: 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. with TProjectData(FPriceMarginBillsData.ProjectData) do
  134. begin
  135. // 应重新计算清单
  136. PhaseData.StageData.CalculatePriceMargin(Rec.ValueByName('RelaBillsID').AsInteger);
  137. // 应重新计算分部分项
  138. iLeafXmj := BillsCompileData.GetLeafXmjParentID(Rec.ValueByName('RelaBillsID').AsInteger);
  139. LeafXmjGlData.CalculateLeafXmj(iLeafXmj);
  140. end;
  141. FPriceMarginBillsData.RefreshDetailBills(Rec.ValueByName('RelaBillsID').AsInteger);
  142. end;
  143. // 应重新计算使用到的工料
  144. FProjectGLData.CalculateGLs_PM(vGLs);
  145. end;
  146. finally
  147. vGLs.Free;
  148. end;
  149. end;
  150. procedure TPriceMarginBillsFrame.zgDetailGclBillsMouseDown(Sender: TObject;
  151. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  152. begin
  153. if Button = mbRight then
  154. dxpmDetailGclBills.PopupFromCursorPos;
  155. end;
  156. procedure TPriceMarginBillsFrame.actnAddDetailGLsUpdate(Sender: TObject);
  157. begin
  158. with TProjectData(FPriceMarginBillsData.ProjectData) do
  159. TAction(Sender).Enabled := (not PriceMarginReadOnly) and Assigned(saDetailGclBills.DataView.Current);
  160. end;
  161. procedure TPriceMarginBillsFrame.ResetViewControl;
  162. begin
  163. with TProjectData(FPriceMarginBillsData.ProjectData) do
  164. begin
  165. saDetailGL.Columns.ColumnByName('Quantity').ReadOnly := PriceMarginReadOnly;
  166. if PriceMarginReadOnly then
  167. saDetailGL.Options := saDetailGL.Options - [aoAllowDelete]
  168. else
  169. saDetailGL.Options := saDetailGL.Options + [aoAllowDelete];
  170. end;
  171. end;
  172. end.