BillsMeasureFme.pas 21 KB

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