BillsMeasureFme.pas 21 KB

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