BillsMeasureFme.pas 22 KB

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