BillsMeasureFme.pas 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641
  1. unit BillsMeasureFme;
  2. interface
  3. uses
  4. BillsMeasureDm, UtilMethods, BillsClipboard,
  5. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  6. Dialogs, ZJGrid, ComCtrls, ToolWin, StdCtrls, ExtCtrls, sdGridDBA,
  7. sdGridTreeDBA, sdDB, ActnList, dxBar, sdIDTree, JimLabels;
  8. type
  9. TBillsMeasureFrame = class(TFrame)
  10. pnlExprs: TPanel;
  11. laEdtExprs: TLabeledEdit;
  12. pnlBills: TPanel;
  13. zgBillsMeasure: TZJGrid;
  14. stdBillsMeasure: TsdGridTreeDBA;
  15. dxpmBills: TdxBarPopupMenu;
  16. alBills: TActionList;
  17. actnCalculateAll: TAction;
  18. actnExportGridToExcel: TAction;
  19. actnSetStageBookmark: TAction;
  20. pnlNodeDetail: TPanel;
  21. pnlDealProperty: TPanel;
  22. labDealPropertyTitle: TJimGradLabel;
  23. zgDealProperty: TZJGrid;
  24. procedure dxpmBillsPopup(Sender: TObject);
  25. procedure zgBillsMeasureMouseDown(Sender: TObject; Button: TMouseButton;
  26. Shift: TShiftState; X, Y: Integer);
  27. procedure laEdtExprsKeyDown(Sender: TObject; var Key: Word;
  28. Shift: TShiftState);
  29. procedure laEdtExprsExit(Sender: TObject);
  30. procedure actnCalculateAllExecute(Sender: TObject);
  31. procedure zgBillsMeasureCellGetColor(Sender: TObject; ACoord: TPoint;
  32. var AColor: TColor);
  33. procedure actnExportGridToExcelExecute(Sender: TObject);
  34. procedure zgBillsMeasureCellButtonClick(Sender: TObject; Col,
  35. Row: Integer);
  36. procedure zgBillsMeasureCustomPaste(Sender: TObject; ABounds: TRect;
  37. ASourSheet: TZjSheet);
  38. procedure zgBillsMeasureKeyDown(Sender: TObject; var Key: Word;
  39. Shift: TShiftState);
  40. procedure actnSetStageBookmarkExecute(Sender: TObject);
  41. procedure zgBillsMeasureCurrentChanged(Sender: TObject; Col,
  42. Row: Integer);
  43. procedure zgDealPropertyCellGetFont(Sender: TObject; ACoord: TPoint;
  44. AFont: TFont);
  45. procedure zgDealPropertyCellTextChanged(Sender: TObject; Col,
  46. Row: Integer);
  47. procedure zgDealPropertyCellCanEdit(Sender: TObject;
  48. const ACoord: TPoint; var Allow: Boolean);
  49. procedure actnSetStageBookmarkUpdate(Sender: TObject);
  50. private
  51. FBillsMeasureData: TBillsMeasureData;
  52. FShowPriceChange: Boolean;
  53. FShowBGLCode: Boolean;
  54. FShowDesignQuantity: Boolean;
  55. FShowAddField: Boolean; // For Inner Test
  56. FShowPMField: Boolean; // For Inner Test
  57. FOnAfterSetBookmark: TBookmarkRefreshEvent;
  58. FShowAlias: Boolean;
  59. function CheckExprsColumn(ACol: Integer): Boolean;
  60. procedure SetColumnVisible(const AColumn: string; AVisible: Boolean);
  61. procedure SetAddFieldVisible(AValue: Boolean);
  62. procedure SetPMFieldVisible(AValue: Boolean);
  63. procedure LoadDealProperty(ARec: TsdDataRecord);
  64. procedure BeginExpandNode;
  65. procedure EndExpandNode;
  66. procedure ResetPhaseDataReadOnly(AReadOnly: Boolean);
  67. procedure ResetBaseDataReadOnly(AReadOnly: Boolean);
  68. procedure ResetAllowInsert(AAllow: Boolean);
  69. procedure SetShowPriceChange(const Value: Boolean);
  70. procedure SetShowBGLCode(const Value: Boolean);
  71. procedure SetShowDesignQuantity(const Value: Boolean);
  72. procedure SetShowAlias(const Value: Boolean);
  73. public
  74. constructor Create(AProjectFrame: TFrame; ABillsMeasureData: TBillsMeasureData);
  75. destructor Destroy; override;
  76. procedure ExpandNodeTo(ALevel: Integer);
  77. procedure ExpandXmjNode;
  78. procedure ExpandCurPhase;
  79. procedure RefreshPhase_Stage;
  80. property ShowPriceChange: Boolean read FShowPriceChange write SetShowPriceChange;
  81. property ShowBGLCode: Boolean read FShowBGLCode write SetShowBGLCode;
  82. property ShowDesignQuantity: Boolean read FShowDesignQuantity write SetShowDesignQuantity;
  83. property ShowAlias: Boolean read FShowAlias write SetShowAlias;
  84. property OnAfterSetBookmark: TBookmarkRefreshEvent read FOnAfterSetBookmark write FOnAfterSetBookmark;
  85. property BillsMeasureData: TBillsMeasureData read FBillsMeasureData;
  86. end;
  87. implementation
  88. {$R *.dfm}
  89. uses
  90. MainFrm, ProjectFme, ProjectData, ExportExcel, BGLDm, BGLSelectFrm,
  91. Types, ZhAPI, BillsTree, mDataRecord;
  92. { TBillsFrame }
  93. constructor TBillsMeasureFrame.Create(AProjectFrame: TFrame;
  94. ABillsMeasureData: TBillsMeasureData);
  95. begin
  96. inherited Create(AProjectFrame);
  97. FBillsMeasureData := ABillsMeasureData;
  98. stdBillsMeasure.IDTree := FBillsMeasureData.BillsMeasureTree;
  99. end;
  100. destructor TBillsMeasureFrame.Destroy;
  101. begin
  102. inherited;
  103. end;
  104. procedure TBillsMeasureFrame.dxpmBillsPopup(Sender: TObject);
  105. begin
  106. SetDxBtnAction(actnCalculateAll, MainForm.dxbtnCalculateAll);
  107. SetDxBtnAction(actnExportGridToExcel, MainForm.dxbtnExportGridToExcel);
  108. SetDxBtnAction(actnSetStageBookmark, MainForm.dxbtnSetBookmark);
  109. end;
  110. procedure TBillsMeasureFrame.zgBillsMeasureMouseDown(Sender: TObject;
  111. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  112. begin
  113. if Button = mbRight then
  114. dxpmBills.PopupFromCursorPos
  115. else
  116. begin
  117. if zgBillsMeasure.CurCell.Col >= stdBillsMeasure.VisibleCol('Quantity') then
  118. laEdtExprs.Text := zgBillsMeasure.CurCell.EditText
  119. else
  120. laEdtExprs.Text := '';
  121. laEdtExprs.ReadOnly := stdBillsMeasure.Columns.Items[zgBillsMeasure.CurCol].ReadOnly;
  122. end;
  123. end;
  124. procedure TBillsMeasureFrame.SetShowPriceChange(const Value: Boolean);
  125. begin
  126. FShowPriceChange := Value;
  127. stdBillsMeasure.Column('NewPrice').Visible := FShowPriceChange;
  128. stdBillsMeasure.Column('CurPcQuantity').Visible := FShowPriceChange;
  129. stdBillsMeasure.Column('CurPcTotalPrice').Visible := FShowPriceChange;
  130. stdBillsMeasure.Column('CurPcBGLCode').Visible := FShowBGLCode and FShowPriceChange;
  131. stdBillsMeasure.Column('EndPcQuantity').Visible := FShowPriceChange;
  132. stdBillsMeasure.Column('EndPcTotalPrice').Visible := FShowPriceChange;
  133. stdBillsMeasure.Column('AddPcQuantity').Visible := FShowPriceChange;
  134. stdBillsMeasure.Column('AddPcTotalPrice').Visible := FShowPriceChange;
  135. end;
  136. procedure TBillsMeasureFrame.laEdtExprsKeyDown(Sender: TObject; var Key: Word;
  137. Shift: TShiftState);
  138. begin
  139. if Key = VK_Return then
  140. begin
  141. zgBillsMeasure.SetFocus;
  142. if not TLabeledEdit(Sender).ReadOnly then
  143. if CheckExprsColumn(zgBillsMeasure.CurCol) then
  144. zgBillsMeasure.CurCell.Text := laEdtExprs.Text;
  145. end;
  146. end;
  147. procedure TBillsMeasureFrame.laEdtExprsExit(Sender: TObject);
  148. begin
  149. if not TLabeledEdit(Sender).ReadOnly then
  150. if CheckExprsColumn(zgBillsMeasure.CurCol) then
  151. zgBillsMeasure.CurCell.Text := laEdtExprs.Text;
  152. end;
  153. procedure TBillsMeasureFrame.actnCalculateAllExecute(Sender: TObject);
  154. begin
  155. TProjectData(FBillsMeasureData.ProjectData).CalculateAll;
  156. end;
  157. procedure TBillsMeasureFrame.zgBillsMeasureCellGetColor(Sender: TObject; ACoord: TPoint;
  158. var AColor: TColor);
  159. var
  160. stnNode: TsdIDTreeNode;
  161. iCreatePhaseID: Integer;
  162. StageRec: TsdDataRecord;
  163. fQtyDiffer: Double;
  164. begin
  165. AColor := clWindow;
  166. if ACoord.Y > stdBillsMeasure.IDTree.Count + 1 then Exit;
  167. stnNode := stdBillsMeasure.IDTree.Items[ACoord.Y - 2];
  168. if not Assigned(stnNode) then Exit;
  169. iCreatePhaseID := stnNode.Rec.ValueByName('CreatePhaseID').AsInteger;
  170. // 根据层次底色不同
  171. if stnNode.ParentID = 1 then
  172. AColor := $00FBCAC4
  173. else if (stnNode.Rec.ValueByName('B_Code').AsString = '') and (stnNode.Level > 0) then
  174. AColor := $00F9E8DF;
  175. // 书签
  176. if TProjectData(FBillsMeasureData.ProjectData).ProjProperties.PhaseCount > 0 then
  177. begin
  178. StageRec := TBillsIDTreeNode(stnNode).StageRec;
  179. if Assigned(StageRec) and StageRec.ValueByName('HasBookmark').AsBoolean then
  180. AColor := $00CFE2F9;
  181. end;
  182. // 根据节点创建期数底色不同
  183. if iCreatePhaseID > 0 then
  184. begin
  185. // 当前期不存在节点,底色为灰色提示用户
  186. if iCreatePhaseID > TProjectData(FBillsMeasureData.ProjectData).PhaseIndex then
  187. AColor := $00D5D5D5
  188. // 当前期新增节点,底色为黄色提示用户
  189. else if iCreatePhaseID = TProjectData(FBillsMeasureData.ProjectData).PhaseIndex then
  190. AColor := $00A7FDFD;
  191. end;
  192. // 叶子节点,累计合同计量超过0号台账,整行数据的底色变为暗红提示用户
  193. if not stnNode.HasChildren then
  194. begin
  195. with stnNode.Rec do
  196. fQtyDiffer := QuantityRoundTo(
  197. ValueByName('AddDealQuantity').AsFloat - ValueByName('Quantity').AsFloat);
  198. if fQtyDiffer > 0 then
  199. AColor := $00646AFE;
  200. end;
  201. end;
  202. procedure TBillsMeasureFrame.SetColumnVisible(const AColumn: string;
  203. AVisible: Boolean);
  204. begin
  205. if AVisible then
  206. stdBillsMeasure.Column(AColumn).Width := 60
  207. else
  208. stdBillsMeasure.Column(AColumn).Width := 0;
  209. end;
  210. procedure TBillsMeasureFrame.SetShowBGLCode(const Value: Boolean);
  211. begin
  212. FShowBGLCode := Value;
  213. if FShowBGLCode then
  214. stdBillsMeasure.Column('CurQcQuantity').Title.CaptionAcrossCols := '3'
  215. else
  216. stdBillsMeasure.Column('CurQcQuantity').Title.CaptionAcrossCols := '2';
  217. stdBillsMeasure.Column('CurQcBGLCode').Visible := FShowBGLCode;
  218. if FShowBGLCode then
  219. stdBillsMeasure.Column('CurPcQuantity').Title.CaptionAcrossCols := '3'
  220. else
  221. stdBillsMeasure.Column('CurPcQuantity').Title.CaptionAcrossCols := '2';
  222. stdBillsMeasure.Column('CurPcBGLCode').Visible := FShowBGLCode and FShowPriceChange;
  223. end;
  224. procedure TBillsMeasureFrame.actnExportGridToExcelExecute(Sender: TObject);
  225. var
  226. sFileName: string;
  227. ExcelExportor: TExcelExportor;
  228. begin
  229. if SaveFile(sFileName, '.xls') then
  230. begin
  231. ExcelExportor := TExcelExportor.Create;
  232. try
  233. ExcelExportor.ExportToFile(zgBillsMeasure, sFileName);
  234. finally
  235. ExcelExportor.Free;
  236. end;
  237. end;
  238. end;
  239. function TBillsMeasureFrame.CheckExprsColumn(ACol: Integer): Boolean;
  240. begin
  241. Result := (ACol = stdBillsMeasure.VisibleCol('CurDealQuantity')) or
  242. (ACol = stdBillsMeasure.VisibleCol('CurDealTotalPrice')) or
  243. (ACol = stdBillsMeasure.VisibleCol('CurQcQuantity')) or
  244. (ACol = stdBillsMeasure.VisibleCol('CurQcTotalPrice')) or
  245. (ACol = stdBillsMeasure.VisibleCol('CurPcQuantity')) or
  246. (ACol = stdBillsMeasure.VisibleCol('CurPcTotalPrice'));
  247. end;
  248. procedure TBillsMeasureFrame.zgBillsMeasureCellButtonClick(Sender: TObject;
  249. Col, Row: Integer);
  250. procedure SelectAndUpdateBGL(const AType, AField: string; ANode: TsdIDTreeNode);
  251. var
  252. vOrgBGL, vNewBGL: TBGLSelectInfo;
  253. StageRec: TStageRecord;
  254. begin
  255. if not Assigned(ANode) then Exit;
  256. StageRec := TBillsIDTreeNode(ANode).StageRec;
  257. try
  258. if Assigned(StageRec) then
  259. begin
  260. vOrgBGL := TBGLSelectInfo.Create(ANode.Rec,
  261. StageRec.ValueByName(AType + AField).AsFloat, True);
  262. vOrgBGL.MergedCode := StageRec.ValueByName(AType + 'BGLCode').AsString;
  263. vOrgBGL.MergedNum := StageRec.ValueByName(AType + 'BGLNum').AsString;
  264. end
  265. else
  266. vOrgBGL := TBGLSelectInfo.Create(ANode.Rec, 0, True);
  267. vNewBGL := TBGLSelectInfo.Create(ANode.Rec, 0, False);
  268. if SelectBGLAndBGNum(vOrgBGL, vNewBGL, FBillsMeasureData.ProjectData) then
  269. begin
  270. if not Assigned(StageRec) then
  271. begin
  272. StageRec := FBillsMeasureData.StageData.AddStageRecord(ANode.ID);
  273. TBillsIDTreeNode(ANode).StageRec := StageRec;
  274. end;
  275. StageRec.ValueByName(AType + AField).AsFloat := vNewBGL.TotalNum;
  276. StageRec.ValueByName(AType + 'BGLCode').AsString := vNewBGL.MergedCode;
  277. StageRec.ValueByName(AType + 'BGLNum').AsString := vNewBGL.MergedNum;
  278. FBillsMeasureData.StageData.UpdateBGLInfo(StageRec, AType);
  279. FBillsMeasureData.UpdateBGLInfo(ANode.ID, StageRec, AType);
  280. TProjectData(FBillsMeasureData.ProjectData).BGLData.ApplyBGL(vOrgBGL, vNewBGL);
  281. // 重新计算合同支付所有数据
  282. TProjectData(FBillsMeasureData.ProjectData).PhaseData.PhasePayData.CalculateAll;
  283. end;
  284. finally
  285. vOrgBGL.Free;
  286. vNewBGL.Free;
  287. end;
  288. end;
  289. procedure GetTypeAndField(var AType, AField: string);
  290. begin
  291. if (Col = stdBillsMeasure.VisibleCol('CurQcQuantity') + 1) then
  292. begin
  293. AType := 'Qc';
  294. AField := 'Quantity';
  295. end
  296. else if (Col = stdBillsMeasure.VisibleCol('CurPcQuantity') + 1) then
  297. begin
  298. AType := 'Pc';
  299. AField := 'Quantity';
  300. end;
  301. end;
  302. var
  303. stnCurNode: TsdIDTreeNode;
  304. sType, sField: string;
  305. begin
  306. stnCurNode := stdBillsMeasure.IDTree.Selected;
  307. if stnCurNode.HasChildren then Exit;
  308. with TProjectData(FBillsMeasureData.ProjectData) do
  309. if PhaseData.StageDataReadOnly then Exit;
  310. GetTypeAndField(sType, sField);
  311. if (sType = '') or (sField = '') then Exit;
  312. SelectAndUpdateBGL(sType, sField, stnCurNode);
  313. end;
  314. procedure TBillsMeasureFrame.zgBillsMeasureCustomPaste(Sender: TObject;
  315. ABounds: TRect; ASourSheet: TZjSheet);
  316. var
  317. iRow, iCol: Integer;
  318. begin
  319. for iRow := ABounds.Top to ABounds.Bottom - 1 do
  320. begin
  321. if not zgBillsMeasure.RowVisible[iRow] then Continue;
  322. for iCol := ABounds.Left to ABounds.Right - 1 do
  323. with TZJGrid(Sender).Cells[iCol, iRow] do
  324. if CanEdit then Text := ASourSheet.Values[iCol - ABounds.Left, iRow - ABounds.Top];
  325. end;
  326. end;
  327. procedure TBillsMeasureFrame.SetShowDesignQuantity(const Value: Boolean);
  328. begin
  329. FShowDesignQuantity := Value;
  330. stdBillsMeasure.Column('DealDgnQuantity1').Visible := FShowDesignQuantity;
  331. stdBillsMeasure.Column('DealDgnQuantity2').Visible := FShowDesignQuantity;
  332. stdBillsMeasure.Column('CDgnQuantity1').Visible := FShowDesignQuantity;
  333. stdBillsMeasure.Column('CDgnQuantity2').Visible := FShowDesignQuantity;
  334. stdBillsMeasure.Column('AddDgnPrice').Visible := FShowDesignQuantity;
  335. end;
  336. procedure TBillsMeasureFrame.SetAddFieldVisible(AValue: Boolean);
  337. begin
  338. FShowAddField := AValue;
  339. stdBillsMeasure.Column('AddDealQuantity').Visible := AValue;
  340. stdBillsMeasure.Column('AddDealTotalPrice').Visible := AValue;
  341. stdBillsMeasure.Column('AddQcQuantity').Visible := AValue;
  342. stdBillsMeasure.Column('AddQcTotalPrice').Visible := AValue;
  343. stdBillsMeasure.Column('AddPcQuantity').Visible := AValue;
  344. stdBillsMeasure.Column('AddPcTotalPrice').Visible := AValue;
  345. stdBillsMeasure.Column('AddGatherQuantity').Visible := AValue;
  346. stdBillsMeasure.Column('AddGatherTotalPrice').Visible := AValue;
  347. end;
  348. procedure TBillsMeasureFrame.zgBillsMeasureKeyDown(Sender: TObject;
  349. var Key: Word; Shift: TShiftState);
  350. begin
  351. // For Inner Test
  352. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  353. and (Key in [65, 97]) // 'a', 'A'
  354. and (zgBillsMeasure.CurCol = 4) then
  355. SetAddFieldVisible(not FShowAddField);
  356. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  357. and (Key in [80, 112]) // 'p', 'P' - Parent
  358. and (zgBillsMeasure.CurCol = 5) then
  359. begin
  360. FBillsMeasureData.ShowParentData := not FBillsMeasureData.ShowParentData;
  361. zgBillsMeasure.Invalidate;
  362. end;
  363. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  364. and (Key in [77, 109]) // 'm', 'M' - PriceMargin
  365. and (zgBillsMeasure.CurCol = 5) then
  366. begin
  367. SetPMFieldVisible(not FShowPMField);
  368. end;
  369. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  370. and (Key in [67, 99]) then // 'c', 'C'
  371. actnCalculateAll.Execute;
  372. end;
  373. procedure TBillsMeasureFrame.actnSetStageBookmarkExecute(Sender: TObject);
  374. var
  375. vNode: TBillsIDTreeNode;
  376. StageRec: TStageRecord;
  377. begin
  378. vNode := TBillsIDTreeNode(FBillsMeasureData.BillsMeasureTree.Selected);
  379. StageRec := vNode.StageRec;
  380. if not Assigned(StageRec) then
  381. begin
  382. StageRec := FBillsMeasureData.StageData.AddStageRecord(stdBillsMeasure.IDTree.Selected.ID);
  383. vNode.StageRec := StageRec;
  384. end;
  385. if StageRec.ValueByName('HasBookmark').AsBoolean then
  386. begin
  387. StageRec.ValueByName('HasBookmark').AsBoolean := False;
  388. StageRec.ValueByName('MarkMemo').AsString := '';
  389. end
  390. else
  391. StageRec.ValueByName('HasBookmark').AsBoolean := True;
  392. TProjectData(FBillsMeasureData.ProjectData).BillsBookmarkData.RefreshStageBookmark;
  393. if Assigned(FOnAfterSetBookmark) then
  394. FOnAfterSetBookmark(StageRec.ValueByName('HasBookmark').AsBoolean);
  395. zgBillsMeasure.InvalidateRow(zgBillsMeasure.CurRow);
  396. end;
  397. procedure TBillsMeasureFrame.zgBillsMeasureCurrentChanged(Sender: TObject;
  398. Col, Row: Integer);
  399. var
  400. stnNode: TsdIDTreeNode;
  401. bShowDealProperty: Boolean;
  402. begin
  403. stnNode := stdBillsMeasure.IDTree.Selected;
  404. bShowDealProperty := False;
  405. if Assigned(stnNode) then
  406. begin
  407. bShowDealProperty := stnNode.Rec.ValueByName('DealCode').AsString <> '';
  408. pnlNodeDetail.Visible := bShowDealProperty;
  409. LoadDealProperty(stnNode.Rec);
  410. end;
  411. end;
  412. procedure TBillsMeasureFrame.LoadDealProperty(ARec: TsdDataRecord);
  413. var
  414. fHasPay, fNotPay: Double;
  415. begin
  416. zgDealProperty.OnCellTextChanged := nil;
  417. zgDealProperty.Cells[0, 0].Text := '合同类别';
  418. zgDealProperty.Cells[0, 1].Text := ARec.ValueByName('DealType').AsString;
  419. zgDealProperty.Cells[0, 1].Align := gaCenterLeft;
  420. zgDealProperty.ColWidths[0] := 80;
  421. zgDealProperty.Cells[1, 0].Text := '累计应扣款';
  422. zgDealProperty.Cells[1, 1].Text := ARec.ValueByName('AddCutTotalPrice').AsString;
  423. zgDealProperty.Cells[1, 1].Align := gaCenterRight;
  424. zgDealProperty.ColWidths[1] := 80;
  425. zgDealProperty.Cells[2, 0].Text := '累计应支付';
  426. fHasPay := TotalPriceRoundTo(
  427. ARec.ValueByName('AddGatherTotalPrice').AsFloat - ARec.ValueByName('AddCutTotalPrice').AsFloat);
  428. zgDealProperty.Cells[2, 1].Text := FloatToStr(fHasPay);
  429. zgDealProperty.Cells[2, 1].Align := gaCenterRight;
  430. zgDealProperty.ColWidths[2] := 80;
  431. zgDealProperty.Cells[3, 0].Text := '累计已支付';
  432. zgDealProperty.Cells[3, 1].Text := ARec.ValueByName('AddPayTotalPrice').AsString;
  433. zgDealProperty.Cells[3, 1].Align := gaCenterRight;
  434. zgDealProperty.ColWidths[3] := 80;
  435. zgDealProperty.Cells[4, 0].Text := '待支付';
  436. fNotPay := TotalPriceRoundTo(fHasPay - ARec.ValueByName('AddPayTotalPrice').AsFloat);
  437. zgDealProperty.Cells[4, 1].Text := FloatToStr(fNotPay);
  438. zgDealProperty.Cells[4, 1].Align := gaCenterRight;
  439. zgDealProperty.ColWidths[4] := 80;
  440. zgDealProperty.OnCellTextChanged := zgDealPropertyCellTextChanged;
  441. end;
  442. procedure TBillsMeasureFrame.zgDealPropertyCellGetFont(Sender: TObject;
  443. ACoord: TPoint; AFont: TFont);
  444. begin
  445. if ((ACoord.X = 2) or (ACoord.X = 4)) and (ACoord.Y = 1) then
  446. AFont.Color := clGrayText;
  447. end;
  448. procedure TBillsMeasureFrame.zgDealPropertyCellTextChanged(Sender: TObject;
  449. Col, Row: Integer);
  450. procedure ModifyField(ARec: TsdDataRecord; const AField: string; ACell: TzjCell);
  451. var
  452. fValue, fHasPay, fNotPay: Double;
  453. begin
  454. if (ACell.Text = '') or TryStrToFloat(ACell.Text, fValue) then
  455. begin
  456. ARec.ValueByName(AField).AsString := ACell.Text;
  457. // 更新显示应支付&待支付数据
  458. fHasPay := TotalPriceRoundTo(
  459. ARec.ValueByName('AddGatherTotalPrice').AsFloat - ARec.ValueByName('AddCutTotalPrice').AsFloat);
  460. zgDealProperty.Cells[2, 1].Text := FloatToStr(fHasPay);
  461. fNotPay := TotalPriceRoundTo(fHasPay - ARec.ValueByName('AddPayTotalPrice').AsFloat);
  462. zgDealProperty.Cells[4, 1].Text := FloatToStr(fNotPay);
  463. end
  464. else
  465. begin
  466. ErrorMessage('只允许输入数字!!');
  467. ACell.Text := ARec.ValueByName(AField).AsString;
  468. end;
  469. end;
  470. var
  471. Rec: TsdDataRecord;
  472. begin
  473. Rec := stdBillsMeasure.IDTree.Selected.Rec;
  474. case Col of
  475. 0: Rec.ValueByName('DealType').AsString := zgDealProperty.Cells[Col, Row].Text;
  476. 1: ModifyField(Rec, 'AddCutTotalPrice', zgDealProperty.Cells[Col, Row]);
  477. 3: ModifyField(Rec, 'AddPayTotalPrice', zgDealProperty.Cells[Col, Row]);
  478. end;
  479. end;
  480. procedure TBillsMeasureFrame.zgDealPropertyCellCanEdit(Sender: TObject;
  481. const ACoord: TPoint; var Allow: Boolean);
  482. begin
  483. Allow := (ACoord.X = 0) or (ACoord.X = 1) or (ACoord.X = 3);
  484. end;
  485. procedure TBillsMeasureFrame.SetShowAlias(const Value: Boolean);
  486. begin
  487. FShowAlias := Value;
  488. stdBillsMeasure.Column('Alias').Visible := FShowAlias;
  489. end;
  490. procedure TBillsMeasureFrame.actnSetStageBookmarkUpdate(Sender: TObject);
  491. begin
  492. TAction(Sender).Enabled := TProjectData(FBillsMeasureData.ProjectData).ProjProperties.PhaseCount > 0;
  493. end;
  494. procedure TBillsMeasureFrame.ExpandNodeTo(ALevel: Integer);
  495. begin
  496. BeginExpandNode;
  497. try
  498. FBillsMeasureData.ExpandNodeTo(ALevel);
  499. finally
  500. EndExpandNode;
  501. end;
  502. end;
  503. procedure TBillsMeasureFrame.ExpandXmjNode;
  504. begin
  505. BeginExpandNode;
  506. try
  507. FBillsMeasureData.ExpandXmjNode;
  508. finally
  509. EndExpandNode;
  510. end;
  511. end;
  512. procedure TBillsMeasureFrame.BeginExpandNode;
  513. begin
  514. zgBillsMeasure.OnCellGetColor := nil;
  515. BeginUpdateWindow(zgBillsMeasure.Handle);
  516. stdBillsMeasure.DisableControl;
  517. end;
  518. procedure TBillsMeasureFrame.EndExpandNode;
  519. begin
  520. stdBillsMeasure.EnableControl;
  521. EndUpdateWindow(zgBillsMeasure.Handle);
  522. zgBillsMeasure.OnCellGetColor := zgBillsMeasureCellGetColor;
  523. zgBillsMeasure.Invalidate;
  524. end;
  525. procedure TBillsMeasureFrame.ExpandCurPhase;
  526. begin
  527. BeginExpandNode;
  528. try
  529. FBillsMeasureData.ExpandCurPhase;
  530. finally
  531. EndExpandNode;
  532. end;
  533. end;
  534. procedure TBillsMeasureFrame.RefreshPhase_Stage;
  535. begin
  536. with TProjectData(FBillsMeasureData.ProjectData) do
  537. begin
  538. ResetPhaseDataReadOnly(StageDataReadOnly);
  539. ResetBaseDataReadOnly(BaseDataReadOnly);
  540. ResetAllowInsert(AllowInsert);
  541. end;
  542. zgBillsMeasure.Invalidate;
  543. end;
  544. procedure TBillsMeasureFrame.ResetPhaseDataReadOnly(AReadOnly: Boolean);
  545. begin
  546. stdBillsMeasure.Column('CurDealQuantity').ReadOnly := AReadOnly;
  547. stdBillsMeasure.Column('CurQcQuantity').ReadOnly := AReadOnly;
  548. stdBillsMeasure.Column('CurPcQuantity').ReadOnly := AReadOnly;
  549. end;
  550. procedure TBillsMeasureFrame.ResetBaseDataReadOnly(AReadOnly: Boolean);
  551. begin
  552. stdBillsMeasure.Column('Code').ReadOnly := AReadOnly;
  553. stdBillsMeasure.Column('B_Code').ReadOnly := AReadOnly;
  554. stdBillsMeasure.Column('Name').ReadOnly := AReadOnly;
  555. stdBillsMeasure.Column('Units').ReadOnly := AReadOnly;
  556. stdBillsMeasure.Column('Price').ReadOnly := AReadOnly;
  557. stdBillsMeasure.Column('NewPrice').ReadOnly := AReadOnly;
  558. stdBillsMeasure.Column('DrawingCode').ReadOnly := AReadOnly;
  559. end;
  560. procedure TBillsMeasureFrame.ResetAllowInsert(AAllow: Boolean);
  561. begin
  562. if AAllow then
  563. stdBillsMeasure.Options := stdBillsMeasure.Options + [aoAllowInsert]
  564. else
  565. stdBillsMeasure.Options := stdBillsMeasure.Options - [aoAllowInsert];
  566. end;
  567. procedure TBillsMeasureFrame.SetPMFieldVisible(AValue: Boolean);
  568. begin
  569. FShowAddField := AValue;
  570. stdBillsMeasure.Column('PM_PreTotalPrice').Visible := AValue;
  571. stdBillsMeasure.Column('PM_TotalPrice').Visible := AValue;
  572. stdBillsMeasure.Column('PM_AddTotalPrice').Visible := AValue;
  573. end;
  574. end.