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. 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: TBillsIDTreeNode;
  313. sType, sField: string;
  314. begin
  315. stnCurNode := TBillsIDTreeNode(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. if stnCurNode.Rec.CalcType.AsInteger = 1 then
  322. begin
  323. WarningMessage('该清单不可输入数量单价,如需使用数量×单价计算,请先清空所有直接输入的金额!');
  324. Exit;
  325. end;
  326. SelectAndUpdateBGL(sType, sField, stnCurNode);
  327. end;
  328. procedure TBillsMeasureFrame.zgBillsMeasureCustomPaste(Sender: TObject;
  329. ABounds: TRect; ASourSheet: TZjSheet);
  330. var
  331. iRow, iCol: Integer;
  332. begin
  333. for iRow := ABounds.Top to ABounds.Bottom - 1 do
  334. begin
  335. if not zgBillsMeasure.RowVisible[iRow] then Continue;
  336. for iCol := ABounds.Left to ABounds.Right - 1 do
  337. with TZJGrid(Sender).Cells[iCol, iRow] do
  338. if CanEdit then Text := ASourSheet.Values[iCol - ABounds.Left, iRow - ABounds.Top];
  339. end;
  340. end;
  341. procedure TBillsMeasureFrame.SetShowDesignQuantity(const Value: Boolean);
  342. begin
  343. FShowDesignQuantity := Value;
  344. stdBillsMeasure.Column('DealDgnQuantity1').Visible := FShowDesignQuantity;
  345. stdBillsMeasure.Column('DealDgnQuantity2').Visible := FShowDesignQuantity;
  346. stdBillsMeasure.Column('CDgnQuantity1').Visible := FShowDesignQuantity;
  347. stdBillsMeasure.Column('CDgnQuantity2').Visible := FShowDesignQuantity;
  348. stdBillsMeasure.Column('AddDgnPrice').Visible := FShowDesignQuantity;
  349. end;
  350. procedure TBillsMeasureFrame.SetAddFieldVisiblie(AValue: Boolean);
  351. begin
  352. FShowAddField := AValue;
  353. stdBillsMeasure.Column('AddDealQuantity').Visible := AValue;
  354. stdBillsMeasure.Column('AddDealTotalPrice').Visible := AValue;
  355. stdBillsMeasure.Column('AddQcQuantity').Visible := AValue;
  356. stdBillsMeasure.Column('AddQcTotalPrice').Visible := AValue;
  357. stdBillsMeasure.Column('AddPcQuantity').Visible := AValue;
  358. stdBillsMeasure.Column('AddPcTotalPrice').Visible := AValue;
  359. stdBillsMeasure.Column('AddGatherQuantity').Visible := AValue;
  360. stdBillsMeasure.Column('AddGatherTotalPrice').Visible := AValue;
  361. end;
  362. procedure TBillsMeasureFrame.zgBillsMeasureKeyDown(Sender: TObject;
  363. var Key: Word; Shift: TShiftState);
  364. begin
  365. // For Inner Test
  366. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  367. and (Key in [65, 97]) // 'a', 'A'
  368. and (zgBillsMeasure.CurCol = 4) then
  369. SetAddFieldVisiblie(not FShowAddField);
  370. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  371. and (Key in [80, 112]) // 'p', 'P' - Parent
  372. and (zgBillsMeasure.CurCol = 5) then
  373. begin
  374. FBillsMeasureData.ShowParentData := not FBillsMeasureData.ShowParentData;
  375. zgBillsMeasure.Invalidate;
  376. end;
  377. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  378. and (Key in [67, 99]) then // 'c', 'C'
  379. actnCalculateAll.Execute;
  380. end;
  381. procedure TBillsMeasureFrame.actnSetStageBookmarkExecute(Sender: TObject);
  382. var
  383. vNode: TBillsIDTreeNode;
  384. StageRec: TStageRecord;
  385. begin
  386. vNode := TBillsIDTreeNode(FBillsMeasureData.BillsMeasureTree.Selected);
  387. StageRec := vNode.StageRec;
  388. if not Assigned(StageRec) then
  389. begin
  390. StageRec := FBillsMeasureData.StageData.AddStageRecord(stdBillsMeasure.IDTree.Selected.ID);
  391. vNode.StageRec := StageRec;
  392. end;
  393. if StageRec.ValueByName('HasBookmark').AsBoolean then
  394. begin
  395. StageRec.ValueByName('HasBookmark').AsBoolean := False;
  396. StageRec.ValueByName('MarkMemo').AsString := '';
  397. end
  398. else
  399. StageRec.ValueByName('HasBookmark').AsBoolean := True;
  400. TProjectData(FBillsMeasureData.ProjectData).BillsBookmarkData.RefreshStageBookmark;
  401. if Assigned(FOnAfterSetBookmark) then
  402. FOnAfterSetBookmark(StageRec.ValueByName('HasBookmark').AsBoolean);
  403. zgBillsMeasure.InvalidateRow(zgBillsMeasure.CurRow);
  404. end;
  405. procedure TBillsMeasureFrame.zgBillsMeasureCurrentChanged(Sender: TObject;
  406. Col, Row: Integer);
  407. var
  408. stnNode: TsdIDTreeNode;
  409. bShowDealProperty: Boolean;
  410. begin
  411. stnNode := stdBillsMeasure.IDTree.Selected;
  412. bShowDealProperty := False;
  413. if Assigned(stnNode) then
  414. begin
  415. bShowDealProperty := stnNode.Rec.ValueByName('DealCode').AsString <> '';
  416. pnlNodeDetail.Visible := bShowDealProperty;
  417. LoadDealProperty(stnNode.Rec);
  418. end;
  419. end;
  420. procedure TBillsMeasureFrame.LoadDealProperty(ARec: TsdDataRecord);
  421. var
  422. fHasPay, fNotPay: Double;
  423. begin
  424. zgDealProperty.OnCellTextChanged := nil;
  425. zgDealProperty.Cells[0, 0].Text := '合同类别';
  426. zgDealProperty.Cells[0, 1].Text := ARec.ValueByName('DealType').AsString;
  427. zgDealProperty.Cells[0, 1].Align := gaCenterLeft;
  428. zgDealProperty.ColWidths[0] := 80;
  429. zgDealProperty.Cells[1, 0].Text := '累计应扣款';
  430. zgDealProperty.Cells[1, 1].Text := ARec.ValueByName('AddCutTotalPrice').AsString;
  431. zgDealProperty.Cells[1, 1].Align := gaCenterRight;
  432. zgDealProperty.ColWidths[1] := 80;
  433. zgDealProperty.Cells[2, 0].Text := '累计应支付';
  434. fHasPay := TotalPriceRoundTo(
  435. ARec.ValueByName('AddGatherTotalPrice').AsFloat - ARec.ValueByName('AddCutTotalPrice').AsFloat);
  436. zgDealProperty.Cells[2, 1].Text := FloatToStr(fHasPay);
  437. zgDealProperty.Cells[2, 1].Align := gaCenterRight;
  438. zgDealProperty.ColWidths[2] := 80;
  439. zgDealProperty.Cells[3, 0].Text := '累计已支付';
  440. zgDealProperty.Cells[3, 1].Text := ARec.ValueByName('AddPayTotalPrice').AsString;
  441. zgDealProperty.Cells[3, 1].Align := gaCenterRight;
  442. zgDealProperty.ColWidths[3] := 80;
  443. zgDealProperty.Cells[4, 0].Text := '待支付';
  444. fNotPay := TotalPriceRoundTo(fHasPay - ARec.ValueByName('AddPayTotalPrice').AsFloat);
  445. zgDealProperty.Cells[4, 1].Text := FloatToStr(fNotPay);
  446. zgDealProperty.Cells[4, 1].Align := gaCenterRight;
  447. zgDealProperty.ColWidths[4] := 80;
  448. zgDealProperty.OnCellTextChanged := zgDealPropertyCellTextChanged;
  449. end;
  450. procedure TBillsMeasureFrame.zgDealPropertyCellGetFont(Sender: TObject;
  451. ACoord: TPoint; AFont: TFont);
  452. begin
  453. if ((ACoord.X = 2) or (ACoord.X = 4)) and (ACoord.Y = 1) then
  454. AFont.Color := clGrayText;
  455. end;
  456. procedure TBillsMeasureFrame.zgDealPropertyCellTextChanged(Sender: TObject;
  457. Col, Row: Integer);
  458. procedure ModifyField(ARec: TsdDataRecord; const AField: string; ACell: TzjCell);
  459. var
  460. fValue, fHasPay, fNotPay: Double;
  461. begin
  462. if (ACell.Text = '') or TryStrToFloat(ACell.Text, fValue) then
  463. begin
  464. ARec.ValueByName(AField).AsString := ACell.Text;
  465. // 更新显示应支付&待支付数据
  466. fHasPay := TotalPriceRoundTo(
  467. ARec.ValueByName('AddGatherTotalPrice').AsFloat - ARec.ValueByName('AddCutTotalPrice').AsFloat);
  468. zgDealProperty.Cells[2, 1].Text := FloatToStr(fHasPay);
  469. fNotPay := TotalPriceRoundTo(fHasPay - ARec.ValueByName('AddPayTotalPrice').AsFloat);
  470. zgDealProperty.Cells[4, 1].Text := FloatToStr(fNotPay);
  471. end
  472. else
  473. begin
  474. ErrorMessage('只允许输入数字!!');
  475. ACell.Text := ARec.ValueByName(AField).AsString;
  476. end;
  477. end;
  478. var
  479. Rec: TsdDataRecord;
  480. begin
  481. Rec := stdBillsMeasure.IDTree.Selected.Rec;
  482. case Col of
  483. 0: Rec.ValueByName('DealType').AsString := zgDealProperty.Cells[Col, Row].Text;
  484. 1: ModifyField(Rec, 'AddCutTotalPrice', zgDealProperty.Cells[Col, Row]);
  485. 3: ModifyField(Rec, 'AddPayTotalPrice', zgDealProperty.Cells[Col, Row]);
  486. end;
  487. end;
  488. procedure TBillsMeasureFrame.zgDealPropertyCellCanEdit(Sender: TObject;
  489. const ACoord: TPoint; var Allow: Boolean);
  490. begin
  491. Allow := (ACoord.X = 0) or (ACoord.X = 1) or (ACoord.X = 3);
  492. end;
  493. procedure TBillsMeasureFrame.SetShowAlias(const Value: Boolean);
  494. begin
  495. FShowAlias := Value;
  496. stdBillsMeasure.Column('Alias').Visible := FShowAlias;
  497. end;
  498. procedure TBillsMeasureFrame.actnSetStageBookmarkUpdate(Sender: TObject);
  499. begin
  500. TAction(Sender).Enabled := TProjectData(FBillsMeasureData.ProjectData).ProjProperties.PhaseCount > 0;
  501. end;
  502. procedure TBillsMeasureFrame.ExpandNodeTo(ALevel: Integer);
  503. begin
  504. BeginExpandNode;
  505. try
  506. FBillsMeasureData.ExpandNodeTo(ALevel);
  507. finally
  508. EndExpandNode;
  509. end;
  510. end;
  511. procedure TBillsMeasureFrame.ExpandXmjNode;
  512. begin
  513. BeginExpandNode;
  514. try
  515. FBillsMeasureData.ExpandXmjNode;
  516. finally
  517. EndExpandNode;
  518. end;
  519. end;
  520. procedure TBillsMeasureFrame.BeginExpandNode;
  521. begin
  522. zgBillsMeasure.OnCellGetColor := nil;
  523. BeginUpdateWindow(zgBillsMeasure.Handle);
  524. stdBillsMeasure.DisableControl;
  525. end;
  526. procedure TBillsMeasureFrame.EndExpandNode;
  527. begin
  528. stdBillsMeasure.EnableControl;
  529. EndUpdateWindow(zgBillsMeasure.Handle);
  530. zgBillsMeasure.OnCellGetColor := zgBillsMeasureCellGetColor;
  531. zgBillsMeasure.Invalidate;
  532. end;
  533. procedure TBillsMeasureFrame.ExpandCurPhase;
  534. begin
  535. BeginExpandNode;
  536. try
  537. FBillsMeasureData.ExpandCurPhase;
  538. finally
  539. EndExpandNode;
  540. end;
  541. end;
  542. procedure TBillsMeasureFrame.RefreshPhase_Stage;
  543. begin
  544. with TProjectData(FBillsMeasureData.ProjectData) do
  545. begin
  546. ResetPhaseDataReadOnly(StageDataReadOnly);
  547. ResetBaseDataReadOnly(BaseDataReadOnly);
  548. ResetAllowInsert(AllowInsert);
  549. end;
  550. zgBillsMeasure.Invalidate;
  551. end;
  552. procedure TBillsMeasureFrame.ResetPhaseDataReadOnly(AReadOnly: Boolean);
  553. begin
  554. stdBillsMeasure.Column('CurDealQuantity').ReadOnly := AReadOnly;
  555. stdBillsMeasure.Column('CurDealTotalPrice').ReadOnly := AReadOnly;
  556. stdBillsMeasure.Column('CurQcQuantity').ReadOnly := AReadOnly;
  557. stdBillsMeasure.Column('CurPcQuantity').ReadOnly := AReadOnly;
  558. end;
  559. procedure TBillsMeasureFrame.ResetBaseDataReadOnly(AReadOnly: Boolean);
  560. begin
  561. stdBillsMeasure.Column('Code').ReadOnly := AReadOnly;
  562. stdBillsMeasure.Column('B_Code').ReadOnly := AReadOnly;
  563. stdBillsMeasure.Column('Name').ReadOnly := AReadOnly;
  564. stdBillsMeasure.Column('Units').ReadOnly := AReadOnly;
  565. stdBillsMeasure.Column('Price').ReadOnly := AReadOnly;
  566. stdBillsMeasure.Column('NewPrice').ReadOnly := AReadOnly;
  567. stdBillsMeasure.Column('DrawingCode').ReadOnly := AReadOnly;
  568. end;
  569. procedure TBillsMeasureFrame.ResetAllowInsert(AAllow: Boolean);
  570. begin
  571. if AAllow then
  572. stdBillsMeasure.Options := stdBillsMeasure.Options + [aoAllowInsert]
  573. else
  574. stdBillsMeasure.Options := stdBillsMeasure.Options - [aoAllowInsert];
  575. end;
  576. end.