BillsMeasureFme.pas 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632
  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: TsdIDTreeNode;
  163. iCreatePhaseID: Integer;
  164. StageRec: TsdDataRecord;
  165. fQtyDiffer: Double;
  166. begin
  167. AColor := clWindow;
  168. if ACoord.Y > stdBillsMeasure.IDTree.Count + 1 then Exit;
  169. stnNode := stdBillsMeasure.IDTree.Items[ACoord.Y - 2];
  170. if not Assigned(stnNode) then Exit;
  171. iCreatePhaseID := stnNode.Rec.ValueByName('CreatePhaseID').AsInteger;
  172. // 根据层次底色不同
  173. if stnNode.ParentID = 1 then
  174. AColor := $00FBCAC4
  175. else if (stnNode.Rec.ValueByName('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. fQtyDiffer := QuantityRoundTo(
  199. ValueByName('AddDealQuantity').AsFloat - ValueByName('Quantity').AsFloat);
  200. if fQtyDiffer > 0 then
  201. AColor := $00646AFE;
  202. end;
  203. end;
  204. procedure TBillsMeasureFrame.SetColumnVisible(const AColumn: string;
  205. AVisible: Boolean);
  206. begin
  207. if AVisible then
  208. stdBillsMeasure.Column(AColumn).Width := 60
  209. else
  210. stdBillsMeasure.Column(AColumn).Width := 0;
  211. end;
  212. procedure TBillsMeasureFrame.SetShowBGLCode(const Value: Boolean);
  213. begin
  214. FShowBGLCode := Value;
  215. if FShowBGLCode then
  216. stdBillsMeasure.Column('CurQcQuantity').Title.CaptionAcrossCols := '3'
  217. else
  218. stdBillsMeasure.Column('CurQcQuantity').Title.CaptionAcrossCols := '2';
  219. stdBillsMeasure.Column('CurQcBGLCode').Visible := FShowBGLCode;
  220. if FShowBGLCode then
  221. stdBillsMeasure.Column('CurPcQuantity').Title.CaptionAcrossCols := '3'
  222. else
  223. stdBillsMeasure.Column('CurPcQuantity').Title.CaptionAcrossCols := '2';
  224. stdBillsMeasure.Column('CurPcBGLCode').Visible := FShowBGLCode and FShowPriceChange;
  225. end;
  226. procedure TBillsMeasureFrame.actnExportGridToExcelExecute(Sender: TObject);
  227. var
  228. sFileName: string;
  229. ExcelExportor: TExcelExportor;
  230. begin
  231. if SaveFile(sFileName, '.xls') then
  232. begin
  233. ExcelExportor := TExcelExportor.Create;
  234. try
  235. ExcelExportor.ExportToFile(zgBillsMeasure, sFileName);
  236. finally
  237. ExcelExportor.Free;
  238. end;
  239. end;
  240. end;
  241. function TBillsMeasureFrame.CheckExprsColumn: Boolean;
  242. var
  243. iCol: Integer;
  244. begin
  245. iCol := zgBillsMeasure.CurCol - zgBillsMeasure.FixedColCount;
  246. Result := (iCol = stdBillsMeasure.VisibleCol('CurDealQuantity'))
  247. or (iCol = stdBillsMeasure.VisibleCol('CurDealTotalPrice'))
  248. or (iCol = stdBillsMeasure.VisibleCol('CurQcQuantity'))
  249. or (iCol = stdBillsMeasure.VisibleCol('CurQcTotalPrice'))
  250. or (iCol = stdBillsMeasure.VisibleCol('CurPcQuantity'))
  251. or (iCol = stdBillsMeasure.VisibleCol('CurPcTotalPrice'));
  252. end;
  253. procedure TBillsMeasureFrame.zgBillsMeasureCellButtonClick(Sender: TObject;
  254. Col, Row: Integer);
  255. procedure SelectAndUpdateBGL(const AType, AField: string; ANode: TsdIDTreeNode);
  256. var
  257. vOrgBGL, vNewBGL: TBGLSelectInfo;
  258. StageRec: TStageRecord;
  259. begin
  260. if not Assigned(ANode) then Exit;
  261. StageRec := TBillsIDTreeNode(ANode).StageRec;
  262. try
  263. if Assigned(StageRec) then
  264. begin
  265. vOrgBGL := TBGLSelectInfo.Create(ANode.Rec,
  266. StageRec.ValueByName(AType + AField).AsFloat, True);
  267. vOrgBGL.MergedCode := StageRec.ValueByName(AType + 'BGLCode').AsString;
  268. vOrgBGL.MergedNum := StageRec.ValueByName(AType + 'BGLNum').AsString;
  269. end
  270. else
  271. vOrgBGL := TBGLSelectInfo.Create(ANode.Rec, 0, True);
  272. vNewBGL := TBGLSelectInfo.Create(ANode.Rec, 0, False);
  273. if SelectBGLAndBGNum(vOrgBGL, vNewBGL, FBillsMeasureData.ProjectData) then
  274. begin
  275. if not Assigned(StageRec) then
  276. begin
  277. StageRec := FBillsMeasureData.StageData.AddStageRecord(ANode.ID);
  278. TBillsIDTreeNode(ANode).StageRec := StageRec;
  279. end;
  280. StageRec.ValueByName(AType + AField).AsFloat := vNewBGL.TotalNum;
  281. StageRec.ValueByName(AType + 'BGLCode').AsString := vNewBGL.MergedCode;
  282. StageRec.ValueByName(AType + 'BGLNum').AsString := vNewBGL.MergedNum;
  283. FBillsMeasureData.StageData.UpdateBGLInfo(StageRec, AType);
  284. FBillsMeasureData.UpdateBGLInfo(ANode.ID, StageRec, AType);
  285. TProjectData(FBillsMeasureData.ProjectData).BGLData.ApplyBGL(vOrgBGL, vNewBGL);
  286. // 重新计算合同支付所有数据
  287. TProjectData(FBillsMeasureData.ProjectData).PhaseData.PhasePayData.CalculateAll;
  288. end;
  289. finally
  290. vOrgBGL.Free;
  291. vNewBGL.Free;
  292. end;
  293. end;
  294. procedure GetTypeAndField(var AType, AField: string);
  295. begin
  296. if (Col = stdBillsMeasure.VisibleCol('CurQcQuantity') + 1) then
  297. begin
  298. AType := 'Qc';
  299. AField := 'Quantity';
  300. end
  301. else if (Col = stdBillsMeasure.VisibleCol('CurPcQuantity') + 1) then
  302. begin
  303. AType := 'Pc';
  304. AField := 'Quantity';
  305. end;
  306. end;
  307. var
  308. stnCurNode: TsdIDTreeNode;
  309. sType, sField: string;
  310. begin
  311. stnCurNode := stdBillsMeasure.IDTree.Selected;
  312. if stnCurNode.HasChildren then Exit;
  313. with TProjectData(FBillsMeasureData.ProjectData) do
  314. if PhaseData.StageDataReadOnly then Exit;
  315. GetTypeAndField(sType, sField);
  316. if (sType = '') or (sField = '') then Exit;
  317. SelectAndUpdateBGL(sType, sField, stnCurNode);
  318. end;
  319. procedure TBillsMeasureFrame.zgBillsMeasureCustomPaste(Sender: TObject;
  320. ABounds: TRect; ASourSheet: TZjSheet);
  321. var
  322. iRow, iCol: Integer;
  323. begin
  324. for iRow := ABounds.Top to ABounds.Bottom - 1 do
  325. begin
  326. if not zgBillsMeasure.RowVisible[iRow] then Continue;
  327. for iCol := ABounds.Left to ABounds.Right - 1 do
  328. with TZJGrid(Sender).Cells[iCol, iRow] do
  329. if CanEdit then Text := ASourSheet.Values[iCol - ABounds.Left, iRow - ABounds.Top];
  330. end;
  331. end;
  332. procedure TBillsMeasureFrame.SetShowDesignQuantity(const Value: Boolean);
  333. begin
  334. FShowDesignQuantity := Value;
  335. stdBillsMeasure.Column('DealDgnQuantity1').Visible := FShowDesignQuantity;
  336. stdBillsMeasure.Column('DealDgnQuantity2').Visible := FShowDesignQuantity;
  337. stdBillsMeasure.Column('CDgnQuantity1').Visible := FShowDesignQuantity;
  338. stdBillsMeasure.Column('CDgnQuantity2').Visible := FShowDesignQuantity;
  339. stdBillsMeasure.Column('AddDgnPrice').Visible := FShowDesignQuantity;
  340. end;
  341. procedure TBillsMeasureFrame.SetAddFieldVisiblie(AValue: Boolean);
  342. begin
  343. FShowAddField := AValue;
  344. stdBillsMeasure.Column('AddDealQuantity').Visible := AValue;
  345. stdBillsMeasure.Column('AddDealTotalPrice').Visible := AValue;
  346. stdBillsMeasure.Column('AddQcQuantity').Visible := AValue;
  347. stdBillsMeasure.Column('AddQcTotalPrice').Visible := AValue;
  348. stdBillsMeasure.Column('AddPcQuantity').Visible := AValue;
  349. stdBillsMeasure.Column('AddPcTotalPrice').Visible := AValue;
  350. stdBillsMeasure.Column('AddGatherQuantity').Visible := AValue;
  351. stdBillsMeasure.Column('AddGatherTotalPrice').Visible := AValue;
  352. end;
  353. procedure TBillsMeasureFrame.zgBillsMeasureKeyDown(Sender: TObject;
  354. var Key: Word; Shift: TShiftState);
  355. begin
  356. // For Inner Test
  357. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  358. and (Key in [65, 97]) // 'a', 'A'
  359. and (zgBillsMeasure.CurCol = 4) then
  360. SetAddFieldVisiblie(not FShowAddField);
  361. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  362. and (Key in [80, 112]) // 'p', 'P' - Parent
  363. and (zgBillsMeasure.CurCol = 5) then
  364. begin
  365. FBillsMeasureData.ShowParentData := not FBillsMeasureData.ShowParentData;
  366. zgBillsMeasure.Invalidate;
  367. end;
  368. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  369. and (Key in [67, 99]) then // 'c', 'C'
  370. actnCalculateAll.Execute;
  371. end;
  372. procedure TBillsMeasureFrame.actnSetStageBookmarkExecute(Sender: TObject);
  373. var
  374. vNode: TBillsIDTreeNode;
  375. StageRec: TStageRecord;
  376. begin
  377. vNode := TBillsIDTreeNode(FBillsMeasureData.BillsMeasureTree.Selected);
  378. StageRec := vNode.StageRec;
  379. if not Assigned(StageRec) then
  380. begin
  381. StageRec := FBillsMeasureData.StageData.AddStageRecord(stdBillsMeasure.IDTree.Selected.ID);
  382. vNode.StageRec := StageRec;
  383. end;
  384. if StageRec.ValueByName('HasBookmark').AsBoolean then
  385. begin
  386. StageRec.ValueByName('HasBookmark').AsBoolean := False;
  387. StageRec.ValueByName('MarkMemo').AsString := '';
  388. end
  389. else
  390. StageRec.ValueByName('HasBookmark').AsBoolean := True;
  391. TProjectData(FBillsMeasureData.ProjectData).BillsBookmarkData.RefreshStageBookmark;
  392. if Assigned(FOnAfterSetBookmark) then
  393. FOnAfterSetBookmark(StageRec.ValueByName('HasBookmark').AsBoolean);
  394. zgBillsMeasure.InvalidateRow(zgBillsMeasure.CurRow);
  395. end;
  396. procedure TBillsMeasureFrame.zgBillsMeasureCurrentChanged(Sender: TObject;
  397. Col, Row: Integer);
  398. var
  399. stnNode: TsdIDTreeNode;
  400. bShowDealProperty: Boolean;
  401. begin
  402. stnNode := stdBillsMeasure.IDTree.Selected;
  403. bShowDealProperty := False;
  404. if Assigned(stnNode) then
  405. begin
  406. bShowDealProperty := stnNode.Rec.ValueByName('DealCode').AsString <> '';
  407. pnlNodeDetail.Visible := bShowDealProperty;
  408. LoadDealProperty(stnNode.Rec);
  409. end;
  410. end;
  411. procedure TBillsMeasureFrame.LoadDealProperty(ARec: TsdDataRecord);
  412. var
  413. fHasPay, fNotPay: Double;
  414. begin
  415. zgDealProperty.OnCellTextChanged := nil;
  416. zgDealProperty.Cells[0, 0].Text := '合同类别';
  417. zgDealProperty.Cells[0, 1].Text := ARec.ValueByName('DealType').AsString;
  418. zgDealProperty.Cells[0, 1].Align := gaCenterLeft;
  419. zgDealProperty.ColWidths[0] := 80;
  420. zgDealProperty.Cells[1, 0].Text := '累计应扣款';
  421. zgDealProperty.Cells[1, 1].Text := ARec.ValueByName('AddCutTotalPrice').AsString;
  422. zgDealProperty.Cells[1, 1].Align := gaCenterRight;
  423. zgDealProperty.ColWidths[1] := 80;
  424. zgDealProperty.Cells[2, 0].Text := '累计应支付';
  425. fHasPay := TotalPriceRoundTo(
  426. ARec.ValueByName('AddGatherTotalPrice').AsFloat - ARec.ValueByName('AddCutTotalPrice').AsFloat);
  427. zgDealProperty.Cells[2, 1].Text := FloatToStr(fHasPay);
  428. zgDealProperty.Cells[2, 1].Align := gaCenterRight;
  429. zgDealProperty.ColWidths[2] := 80;
  430. zgDealProperty.Cells[3, 0].Text := '累计已支付';
  431. zgDealProperty.Cells[3, 1].Text := ARec.ValueByName('AddPayTotalPrice').AsString;
  432. zgDealProperty.Cells[3, 1].Align := gaCenterRight;
  433. zgDealProperty.ColWidths[3] := 80;
  434. zgDealProperty.Cells[4, 0].Text := '待支付';
  435. fNotPay := TotalPriceRoundTo(fHasPay - ARec.ValueByName('AddPayTotalPrice').AsFloat);
  436. zgDealProperty.Cells[4, 1].Text := FloatToStr(fNotPay);
  437. zgDealProperty.Cells[4, 1].Align := gaCenterRight;
  438. zgDealProperty.ColWidths[4] := 80;
  439. zgDealProperty.OnCellTextChanged := zgDealPropertyCellTextChanged;
  440. end;
  441. procedure TBillsMeasureFrame.zgDealPropertyCellGetFont(Sender: TObject;
  442. ACoord: TPoint; AFont: TFont);
  443. begin
  444. if ((ACoord.X = 2) or (ACoord.X = 4)) and (ACoord.Y = 1) then
  445. AFont.Color := clGrayText;
  446. end;
  447. procedure TBillsMeasureFrame.zgDealPropertyCellTextChanged(Sender: TObject;
  448. Col, Row: Integer);
  449. procedure ModifyField(ARec: TsdDataRecord; const AField: string; ACell: TzjCell);
  450. var
  451. fValue, fHasPay, fNotPay: Double;
  452. begin
  453. if (ACell.Text = '') or TryStrToFloat(ACell.Text, fValue) then
  454. begin
  455. ARec.ValueByName(AField).AsString := ACell.Text;
  456. // 更新显示应支付&待支付数据
  457. fHasPay := TotalPriceRoundTo(
  458. ARec.ValueByName('AddGatherTotalPrice').AsFloat - ARec.ValueByName('AddCutTotalPrice').AsFloat);
  459. zgDealProperty.Cells[2, 1].Text := FloatToStr(fHasPay);
  460. fNotPay := TotalPriceRoundTo(fHasPay - ARec.ValueByName('AddPayTotalPrice').AsFloat);
  461. zgDealProperty.Cells[4, 1].Text := FloatToStr(fNotPay);
  462. end
  463. else
  464. begin
  465. ErrorMessage('只允许输入数字!!');
  466. ACell.Text := ARec.ValueByName(AField).AsString;
  467. end;
  468. end;
  469. var
  470. Rec: TsdDataRecord;
  471. begin
  472. Rec := stdBillsMeasure.IDTree.Selected.Rec;
  473. case Col of
  474. 0: Rec.ValueByName('DealType').AsString := zgDealProperty.Cells[Col, Row].Text;
  475. 1: ModifyField(Rec, 'AddCutTotalPrice', zgDealProperty.Cells[Col, Row]);
  476. 3: ModifyField(Rec, 'AddPayTotalPrice', zgDealProperty.Cells[Col, Row]);
  477. end;
  478. end;
  479. procedure TBillsMeasureFrame.zgDealPropertyCellCanEdit(Sender: TObject;
  480. const ACoord: TPoint; var Allow: Boolean);
  481. begin
  482. Allow := (ACoord.X = 0) or (ACoord.X = 1) or (ACoord.X = 3);
  483. end;
  484. procedure TBillsMeasureFrame.SetShowAlias(const Value: Boolean);
  485. begin
  486. FShowAlias := Value;
  487. stdBillsMeasure.Column('Alias').Visible := FShowAlias;
  488. end;
  489. procedure TBillsMeasureFrame.actnSetStageBookmarkUpdate(Sender: TObject);
  490. begin
  491. TAction(Sender).Enabled := TProjectData(FBillsMeasureData.ProjectData).ProjProperties.PhaseCount > 0;
  492. end;
  493. procedure TBillsMeasureFrame.ExpandNodeTo(ALevel: Integer);
  494. begin
  495. BeginExpandNode;
  496. try
  497. FBillsMeasureData.ExpandNodeTo(ALevel);
  498. finally
  499. EndExpandNode;
  500. end;
  501. end;
  502. procedure TBillsMeasureFrame.ExpandXmjNode;
  503. begin
  504. BeginExpandNode;
  505. try
  506. FBillsMeasureData.ExpandXmjNode;
  507. finally
  508. EndExpandNode;
  509. end;
  510. end;
  511. procedure TBillsMeasureFrame.BeginExpandNode;
  512. begin
  513. zgBillsMeasure.OnCellGetColor := nil;
  514. BeginUpdateWindow(zgBillsMeasure.Handle);
  515. stdBillsMeasure.DisableControl;
  516. end;
  517. procedure TBillsMeasureFrame.EndExpandNode;
  518. begin
  519. stdBillsMeasure.EnableControl;
  520. EndUpdateWindow(zgBillsMeasure.Handle);
  521. zgBillsMeasure.OnCellGetColor := zgBillsMeasureCellGetColor;
  522. zgBillsMeasure.Invalidate;
  523. end;
  524. procedure TBillsMeasureFrame.ExpandCurPhase;
  525. begin
  526. BeginExpandNode;
  527. try
  528. FBillsMeasureData.ExpandCurPhase;
  529. finally
  530. EndExpandNode;
  531. end;
  532. end;
  533. procedure TBillsMeasureFrame.RefreshPhase_Stage;
  534. begin
  535. with TProjectData(FBillsMeasureData.ProjectData) do
  536. begin
  537. ResetPhaseDataReadOnly(StageDataReadOnly);
  538. ResetBaseDataReadOnly(BaseDataReadOnly);
  539. ResetAllowInsert(AllowInsert);
  540. end;
  541. zgBillsMeasure.Invalidate;
  542. end;
  543. procedure TBillsMeasureFrame.ResetPhaseDataReadOnly(AReadOnly: Boolean);
  544. begin
  545. stdBillsMeasure.Column('CurDealQuantity').ReadOnly := AReadOnly;
  546. stdBillsMeasure.Column('CurDealTotalPrice').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. end.