BillsCompileFme.pas 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735
  1. unit BillsCompileFme;
  2. interface
  3. uses
  4. BillsCompileDm, UtilMethods, BillsClipboard, sdIDTree, BatchReplaceBillsFrm,
  5. CheckAndClearFrm, DealBillsFrm, BillsPasteSelectFrm,
  6. sdDB, BillsTree, sdIDTreeCells,
  7. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  8. Dialogs, ActnList, sdGridDBA, sdGridTreeDBA, dxBar, ZJGrid, StdCtrls,
  9. ExtCtrls;
  10. type
  11. TBillsCompileFrame = class(TFrame)
  12. pnlExprs: TPanel;
  13. laEdtExprs: TLabeledEdit;
  14. pnlBills: TPanel;
  15. zgBillsCompile: TZJGrid;
  16. dxpmBillsCompile: TdxBarPopupMenu;
  17. stdBillsCompile: TsdGridTreeDBA;
  18. alBillsCompile: TActionList;
  19. actnCalculateLedger: TAction;
  20. actnCopyBillsBlock: TAction;
  21. actnExportGridToExcel: TAction;
  22. actnBatchAddChild: TAction;
  23. actnBatchAddNext: TAction;
  24. actnReorderChildrenCode: TAction;
  25. actnBatchReplaceBillsInfo: TAction;
  26. actnCheckAndClear: TAction;
  27. actnModifiedDealBills: TAction;
  28. actnSetBillsBookmark: TAction;
  29. actnImportGclBillsToXmj: TAction;
  30. actnImportPlaneFxBillsToXmj: TAction;
  31. procedure zgBillsCompileCopy(Sender: TObject; const ABounds: TRect;
  32. var Allow: Boolean);
  33. procedure zgBillsCompilePaste(Sender: TObject; const ABounds: TRect;
  34. var Allow: Boolean);
  35. procedure actnCopyBillsBlockExecute(Sender: TObject);
  36. procedure actnCalculateLedgerExecute(Sender: TObject);
  37. procedure dxpmBillsCompilePopup(Sender: TObject);
  38. procedure zgBillsCompileMouseDown(Sender: TObject;
  39. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  40. procedure zgBillsCompileCellGetColor(Sender: TObject; ACoord: TPoint;
  41. var AColor: TColor);
  42. procedure zgBillsCompileCellGetFont(Sender: TObject; ACoord: TPoint;
  43. AFont: TFont);
  44. procedure laEdtExprsExit(Sender: TObject);
  45. procedure laEdtExprsKeyDown(Sender: TObject; var Key: Word;
  46. Shift: TShiftState);
  47. procedure actnBatchAddChildExecute(Sender: TObject);
  48. procedure actnBatchAddNextExecute(Sender: TObject);
  49. procedure actnBatchAddChildUpdate(Sender: TObject);
  50. procedure actnBatchAddNextUpdate(Sender: TObject);
  51. procedure actnReorderChildrenCodeExecute(Sender: TObject);
  52. procedure actnReorderChildrenCodeUpdate(Sender: TObject);
  53. procedure actnExportGridToExcelExecute(Sender: TObject);
  54. procedure actnBatchReplaceBillsInfoExecute(Sender: TObject);
  55. procedure actnBatchReplaceBillsInfoUpdate(Sender: TObject);
  56. procedure zgBillsCompileCustomPaste(Sender: TObject; ABounds: TRect;
  57. ASourSheet: TZjSheet);
  58. procedure zgBillsCompileKeyDown(Sender: TObject; var Key: Word;
  59. Shift: TShiftState);
  60. procedure actnCheckAndClearExecute(Sender: TObject);
  61. procedure actnModifiedDealBillsExecute(Sender: TObject);
  62. procedure actnModifiedDealBillsUpdate(Sender: TObject);
  63. procedure actnSetBillsBookmarkExecute(Sender: TObject);
  64. procedure actnImportGclBillsToXmjUpdate(Sender: TObject);
  65. procedure actnImportGclBillsToXmjExecute(Sender: TObject);
  66. procedure actnImportPlaneFxBillsToXmjExecute(Sender: TObject);
  67. procedure zgBillsCompileCellTextChanged(Sender: TObject; Col,
  68. Row: Integer);
  69. private
  70. FBillsCompileData: TBillsCompileData;
  71. FShowIDField: Boolean;
  72. FShowDesginQuantity: Boolean;
  73. FOnAfterSetBookmark: TBookmarkRefreshEvent;
  74. FShowAlias: Boolean;
  75. FShowApprovalCode: Boolean;
  76. procedure CopyBillsBlock(ANode: TsdIDTreeNode; ABounds: TRect);
  77. procedure PasteBillsBlock(ANode: TsdIDTreeNode; ABounds: TRect);
  78. procedure SetShowIDField(AValue: Boolean);
  79. procedure ExpandMouseDown(AGridCell: TzjCell);
  80. procedure BeginExpandNode;
  81. procedure EndExpandNode;
  82. procedure ResetBaseDataReadOnly(AReadOnly: Boolean);
  83. procedure ResetAllowInsert(AAllow: Boolean);
  84. procedure RefreshTreeRow(ARowIndex: Integer);
  85. function CheckExprsColumn: Boolean;
  86. function CheckMemoStrColumn: Boolean;
  87. procedure SetShowDesignQuantity(const Value: Boolean);
  88. procedure SetShowAlias(const Value: Boolean);
  89. procedure SetShowApprovalCode(const Value: Boolean);
  90. public
  91. constructor Create(AParent: TFrame; ABillsCompileData: TBillsCompileData);
  92. destructor Destroy; override;
  93. procedure ExpandNodeTo(ALevel: Integer);
  94. procedure ExpandXmjNode;
  95. procedure ExpandPegXmjNode;
  96. procedure RefreshPhase_Stage;
  97. property ShowDesignQuantity: Boolean read FShowDesginQuantity write SetShowDesignQuantity;
  98. Property ShowAlias: Boolean read FShowAlias write SetShowAlias;
  99. property ShowApprovalCode: Boolean read FShowApprovalCode write SetShowApprovalCode;
  100. property OnAfterSetBookmark: TBookmarkRefreshEvent read FOnAfterSetBookmark write FOnAfterSetBookmark;
  101. property BillsCompileData: TBillsCompileData read FBillsCompileData;
  102. end;
  103. implementation
  104. uses
  105. MainFrm, BatchInsertBillsFrm, ExportExcel, ProjectData, mEncryptEditions,
  106. ExcelImport, DetailExcelImport, mDataRecord, ExcelImport_GclBills;
  107. {$R *.dfm}
  108. { TBillsCompileFrame }
  109. procedure TBillsCompileFrame.CopyBillsBlock(ANode: TsdIDTreeNode;
  110. ABounds: TRect);
  111. var
  112. Clipboard: TBillsClipboard;
  113. begin
  114. Clipboard := TBillsClipboard.Create(FBillsCompileData.BillsData);
  115. try
  116. Clipboard.Copy(ANode, ABounds.Bottom - ABounds.Top);
  117. finally
  118. Clipboard.Free;
  119. end;
  120. end;
  121. procedure TBillsCompileFrame.PasteBillsBlock(ANode: TsdIDTreeNode;
  122. ABounds: TRect);
  123. function CanHasChild: Boolean;
  124. begin
  125. Result := True;
  126. if not ANode.HasChildren then
  127. Result := ANode.Rec.ValueByName('Quantity').AsFloat = 0;
  128. end;
  129. var
  130. Clipboard: TBillsClipboard;
  131. iPos: Integer;
  132. begin
  133. if SelectBillsPasteType(iPos, CanHasChild) then
  134. begin
  135. if iPos = -1 then Exit;
  136. Clipboard := TBillsClipboard.Create(FBillsCompileData.BillsData);
  137. try
  138. Clipboard.Paste(ANode, iPos);
  139. finally
  140. FBillsCompileData.CalculateAll;
  141. Clipboard.Free;
  142. end;
  143. end;
  144. end;
  145. procedure TBillsCompileFrame.zgBillsCompileCopy(Sender: TObject;
  146. const ABounds: TRect; var Allow: Boolean);
  147. var
  148. stnNode: TsdIDTreeNode;
  149. begin
  150. Allow := TZJGrid(Sender).Tag = 0;
  151. if not Allow then
  152. begin
  153. stnNode := stdBillsCompile.IDTree.Items[ABounds.Top - zgBillsCompile.FixedRowCount];
  154. CopyBillsBlock(stnNode, ABounds);
  155. TZJGrid(Sender).Tag := 0;
  156. end;
  157. end;
  158. procedure TBillsCompileFrame.zgBillsCompilePaste(Sender: TObject;
  159. const ABounds: TRect; var Allow: Boolean);
  160. begin
  161. if HasBillsBlockFormat then
  162. begin
  163. Allow := False;
  164. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  165. PasteBillsBlock(stdBillsCompile.IDTree.Selected, ABounds)
  166. else
  167. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  168. end;
  169. end;
  170. procedure TBillsCompileFrame.actnCopyBillsBlockExecute(Sender: TObject);
  171. begin
  172. if CheckCompileEdition then
  173. begin
  174. zgBillsCompile.Tag := 1;
  175. zgBillsCompile.CopyToClipboard(zgBillsCompile.Selection.Bounds);
  176. zgBillsCompile.Selection.SelectRow(zgBillsCompile.Selection.Top, zgBillsCompile.Selection.Bottom - 1);
  177. end;
  178. end;
  179. procedure TBillsCompileFrame.actnCalculateLedgerExecute(Sender: TObject);
  180. begin
  181. FBillsCompileData.CalculateAll;
  182. end;
  183. procedure TBillsCompileFrame.dxpmBillsCompilePopup(Sender: TObject);
  184. begin
  185. SetDxBtnAction(actnCalculateLedger, MainForm.dxbtnCalculateLedger);
  186. SetDxBtnAction(actnCopyBillsBlock, MainForm.dxbtnCopyBillsBlock);
  187. SetDxBtnAction(actnBatchAddChild, MainForm.dxbtnBatchAddChild);
  188. SetDxBtnAction(actnBatchAddNext, MainForm.dxbtnBatchAddNext);
  189. SetDxBtnAction(actnReorderChildrenCode, MainForm.dxbtnReorderChildrenCode);
  190. SetDxBtnAction(actnExportGridToExcel, MainForm.dxbtnExportGridToExcel);
  191. SetDxBtnAction(actnBatchReplaceBillsInfo, MainForm.dxbtnBatchReplaceBillsInfo);
  192. SetDxBtnAction(actnCheckAndClear, MainForm.dxbtnCheckAndClear);
  193. SetDxBtnAction(actnModifiedDealBills, MainForm.dxbtnModifyDealBills);
  194. SetDxBtnAction(actnSetBillsBookmark, MainForm.dxbtnSetBookmark);
  195. SetDxBtnAction(actnImportGclBillsToXmj, MainForm.dxbtnImportGclBillsToXmj);
  196. SetDxBtnAction(actnImportPlaneFxBillsToXmj, MainForm.dxbtnImportPlaneFxBillsToXmj);
  197. end;
  198. constructor TBillsCompileFrame.Create(AParent: TFrame;
  199. ABillsCompileData: TBillsCompileData);
  200. begin
  201. inherited Create(AParent);
  202. FBillsCompileData := ABillsCompileData;
  203. stdBillsCompile.IDTree := FBillsCompileData.BillsCompileTree;
  204. with TProjectData(FBillsCompileData.ProjectData) do
  205. begin
  206. stdBillsCompile.Column('LockedInfo').ReadOnly := ProjProperties.PhaseCount > 0;
  207. end;
  208. zgBillsCompile.OnExpandMouseDown := ExpandMouseDown;
  209. FBillsCompileData.RefreshRow := RefreshTreeRow;
  210. end;
  211. destructor TBillsCompileFrame.Destroy;
  212. begin
  213. inherited;
  214. end;
  215. procedure TBillsCompileFrame.zgBillsCompileMouseDown(Sender: TObject;
  216. Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
  217. begin
  218. if Button = mbRight then
  219. dxpmBillsCompile.PopupFromCursorPos
  220. else
  221. begin
  222. if CheckExprsColumn or CheckMemoStrColumn then
  223. laEdtExprs.Text := zgBillsCompile.CurCell.EditText
  224. else
  225. laEdtExprs.Text := '';
  226. if CheckExprsColumn then
  227. begin
  228. with stdBillsCompile.DataView do
  229. if Assigned(Current) then
  230. laEdtExprs.ReadOnly := Current.ValueByName('LockedInfo').AsBoolean;
  231. end
  232. else if CheckMemoStrColumn then
  233. begin
  234. laEdtExprs.ReadOnly := False;
  235. end;
  236. end;
  237. end;
  238. procedure TBillsCompileFrame.zgBillsCompileCellGetColor(Sender: TObject;
  239. ACoord: TPoint; var AColor: TColor);
  240. var
  241. stnNode: TBillsIDTreeNode;
  242. iCreatePhaseID: Integer;
  243. begin
  244. if ACoord.Y > stdBillsCompile.IDTree.Count + 2 then Exit;
  245. stnNode := TBillsIDTreeNode(stdBillsCompile.IDTree.Items[ACoord.Y - 3]);
  246. if not Assigned(stnNode) then Exit;
  247. iCreatePhaseID := stnNode.Rec.CreatePhaseID.AsInteger;
  248. if stnNode.ParentID = 1 then
  249. AColor := $00FBCAC4
  250. else if (stnNode.Rec.B_Code.AsString = '') and (stnNode.Level > 0) then
  251. AColor := $00F9E8DF;
  252. // 书签
  253. if stnNode.Rec.HasBookMark.AsBoolean then
  254. AColor := $00CFE2F9;
  255. // 根据节点创建期数底色不同
  256. if iCreatePhaseID > 0 then
  257. begin
  258. // 当前期不存在节点,底色为灰色提示用户
  259. if iCreatePhaseID > TProjectData(FBillsCompileData.ProjectData).PhaseIndex then
  260. AColor := $00D5D5D5
  261. // 当前期新增节点,底色为黄色提示用户
  262. else if iCreatePhaseID = TProjectData(FBillsCompileData.ProjectData).PhaseIndex then
  263. AColor := $00A7FDFD;
  264. end;
  265. end;
  266. procedure TBillsCompileFrame.zgBillsCompileCellGetFont(Sender: TObject;
  267. ACoord: TPoint; AFont: TFont);
  268. begin
  269. if ACoord.X = stdBillsCompile.VisibleCol('IsMeasureAdd') then
  270. AFont.Color := clInactiveCaptionText;
  271. end;
  272. procedure TBillsCompileFrame.laEdtExprsExit(Sender: TObject);
  273. begin
  274. if not TLabeledEdit(Sender).ReadOnly then
  275. if CheckExprsColumn or CheckMemoStrColumn then
  276. zgBillsCompile.CurCell.Text := laEdtExprs.Text;
  277. end;
  278. function TBillsCompileFrame.CheckExprsColumn: Boolean;
  279. var
  280. iCol: Integer;
  281. begin
  282. iCol := zgBillsCompile.CurCol-zgBillsCompile.FixedColCount;
  283. Result := (iCol = stdBillsCompile.VisibleCol('OrgQuantity'))
  284. or (iCol = stdBillsCompile.VisibleCol('MisQuantity'))
  285. or (iCol = stdBillsCompile.VisibleCol('OthQuantity'));
  286. end;
  287. procedure TBillsCompileFrame.laEdtExprsKeyDown(Sender: TObject;
  288. var Key: Word; Shift: TShiftState);
  289. begin
  290. if Key = VK_Return then
  291. begin
  292. zgBillsCompile.SetFocus;
  293. if not TLabeledEdit(Sender).ReadOnly then
  294. if CheckExprsColumn or CheckMemoStrColumn then
  295. zgBillsCompile.CurCell.Text := laEdtExprs.Text;
  296. end;
  297. end;
  298. procedure TBillsCompileFrame.actnBatchAddChildExecute(Sender: TObject);
  299. begin
  300. if CheckCompileEdition then
  301. begin
  302. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  303. AddLeafBills(FBillsCompileData, itChild)
  304. else
  305. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  306. end;
  307. end;
  308. procedure TBillsCompileFrame.actnBatchAddNextExecute(Sender: TObject);
  309. begin
  310. if CheckCompileEdition then
  311. begin
  312. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  313. AddLeafBills(FBillsCompileData, itNextSibling)
  314. else
  315. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  316. end;
  317. end;
  318. procedure TBillsCompileFrame.actnBatchAddChildUpdate(Sender: TObject);
  319. begin
  320. with stdBillsCompile.IDTree do
  321. TAction(Sender).Enabled := not Selected.HasChildren
  322. and (Selected.Rec.ValueByName('Code').AsString <> '');
  323. end;
  324. procedure TBillsCompileFrame.actnBatchAddNextUpdate(Sender: TObject);
  325. function CheckLastXmj(ANode: TsdIDTreeNode): Boolean;
  326. var
  327. stnChild: TsdIDTreeNode;
  328. begin
  329. Result := ANode.Rec.ValueByName('Code').AsString <> '';
  330. if not ANode.HasChildren then Exit;
  331. stnChild := ANode.FirstChild;
  332. while Result and Assigned(stnChild) do
  333. begin
  334. Result := Result and (stnChild.Rec.ValueByName('B_Code').AsString <> '');
  335. stnChild := stnChild.NextSibling;
  336. end;
  337. end;
  338. begin
  339. with stdBillsCompile.IDTree do
  340. TAction(Sender).Enabled := Assigned(Selected) and CheckLastXmj(Selected);
  341. end;
  342. procedure TBillsCompileFrame.actnReorderChildrenCodeExecute(
  343. Sender: TObject);
  344. begin
  345. if CheckCompileEdition then
  346. if QuestMessage('是否将此节点的所有子项重新自动编号?') then
  347. FBillsCompileData.ReorderChildrenCode(stdBillsCompile.IDTree.Selected);
  348. end;
  349. procedure TBillsCompileFrame.actnReorderChildrenCodeUpdate(
  350. Sender: TObject);
  351. function WithoutGclChild(ANode: TsdIDTreeNode): Boolean;
  352. var
  353. stnChild: TsdIDTreeNode;
  354. begin
  355. Result := ANode.Rec.ValueByName('Code').AsString <> '';
  356. if not ANode.HasChildren then Exit;
  357. stnChild := ANode.FirstChild;
  358. while Result and Assigned(stnChild) do
  359. begin
  360. Result := Result and (stnChild.Rec.ValueByName('B_Code').AsString = '');
  361. stnChild := stnChild.NextSibling;
  362. end;
  363. end;
  364. begin
  365. with TProjectData(FBillsCompileData.ProjectData) do
  366. TAction(Sender).Enabled := ProjProperties.PhaseCount = 0;
  367. with stdBillsCompile.IDTree do
  368. TAction(Sender).Enabled := TAction(Sender).Enabled
  369. and Assigned(Selected) and WithoutGclChild(Selected);
  370. end;
  371. procedure TBillsCompileFrame.actnExportGridToExcelExecute(Sender: TObject);
  372. var
  373. sFileName: string;
  374. ExcelExportor: TExcelExportor;
  375. begin
  376. if SaveExcelFile(sFileName) then
  377. begin
  378. ExcelExportor := TExcelExportor.Create;
  379. try
  380. ExcelExportor.ExportToFile(zgBillsCompile, sFileName);
  381. finally
  382. ExcelExportor.Free;
  383. end;
  384. end;
  385. end;
  386. procedure TBillsCompileFrame.actnBatchReplaceBillsInfoExecute(
  387. Sender: TObject);
  388. begin
  389. if CheckCompileEdition then
  390. BatchReplaceBillsInfo(stdBillsCompile.DataView.Current, FBillsCompileData.BillsData);
  391. end;
  392. procedure TBillsCompileFrame.actnBatchReplaceBillsInfoUpdate(
  393. Sender: TObject);
  394. begin
  395. with TProjectData(FBillsCompileData.ProjectData) do
  396. TAction(Sender).Enabled := ProjProperties.PhaseCount = 0;
  397. TAction(Sender).Enabled := TAction(Sender).Enabled
  398. and Assigned(stdBillsCompile.IDTree.Selected)
  399. and (stdBillsCompile.IDTree.Selected.Rec.ValueByName('B_Code').AsString <> '');
  400. end;
  401. procedure TBillsCompileFrame.zgBillsCompileCustomPaste(Sender: TObject;
  402. ABounds: TRect; ASourSheet: TZjSheet);
  403. var
  404. iRow, iCol: Integer;
  405. begin
  406. for iRow := ABounds.Top to ABounds.Bottom - 1 do
  407. begin
  408. if not zgBillsCompile.RowVisible[iRow] then Continue;
  409. for iCol := ABounds.Left to ABounds.Right - 1 do
  410. with TZJGrid(Sender).Cells[iCol, iRow] do
  411. if CanEdit then Text := ASourSheet.Values[iCol - ABounds.Left, iRow - ABounds.Top];
  412. end;
  413. end;
  414. procedure TBillsCompileFrame.SetShowDesignQuantity(const Value: Boolean);
  415. begin
  416. FShowDesginQuantity := Value;
  417. stdBillsCompile.Column('DgnQuantity1').Visible := FShowDesginQuantity;
  418. stdBillsCompile.Column('DgnQuantity2').Visible := FShowDesginQuantity;
  419. stdBillsCompile.Column('DgnPrice').Visible := FShowDesginQuantity;
  420. end;
  421. procedure TBillsCompileFrame.zgBillsCompileKeyDown(Sender: TObject;
  422. var Key: Word; Shift: TShiftState);
  423. begin
  424. // For Inner Test
  425. if (ssCtrl in Shift) and (ssShift in Shift) and (ssAlt in Shift)
  426. and (Key in [73, 105]) // 'i', 'i'
  427. and (zgBillsCompile.CurCol = 1) then
  428. SetShowIDField(not FShowIDField);
  429. end;
  430. procedure TBillsCompileFrame.SetShowIDField(AValue: Boolean);
  431. begin
  432. FShowIDField := AValue;
  433. stdBillsCompile.Column('ID').Visible := AValue;
  434. stdBillsCompile.Column('ParentID').Visible := AValue;
  435. stdBillsCompile.Column('NextSiblingID').Visible := AValue;
  436. end;
  437. procedure TBillsCompileFrame.actnCheckAndClearExecute(Sender: TObject);
  438. begin
  439. ShowCheckAndClearForm(FBillsCompileData);
  440. end;
  441. procedure TBillsCompileFrame.actnModifiedDealBillsExecute(Sender: TObject);
  442. var
  443. DealBillsForm: TDealBillsForm;
  444. begin
  445. with TProjectData(FBillsCompileData.ProjectData) do
  446. DealBillsForm := TDealBillsForm.Create(DealBillsData);
  447. try
  448. DealBillsForm.ShowModal;
  449. finally
  450. DealBillsForm.Free;
  451. end;
  452. end;
  453. procedure TBillsCompileFrame.actnModifiedDealBillsUpdate(Sender: TObject);
  454. begin
  455. TAction(Sender).Enabled := TProjectData(FBillsCompileData.ProjectData).CanUnlockInfo;
  456. end;
  457. procedure TBillsCompileFrame.actnSetBillsBookmarkExecute(Sender: TObject);
  458. var
  459. Rec: TBillsRecord;
  460. begin
  461. Rec := TBillsRecord(stdBillsCompile.IDTree.Selected.Rec);
  462. if Rec.HasBookMark.AsBoolean then
  463. begin
  464. Rec.HasBookMark.AsBoolean := False;
  465. Rec.MarkMemo.AsString := '';
  466. end
  467. else
  468. Rec.HasBookMark.AsBoolean := True;
  469. TProjectData(FBillsCompileData.ProjectData).BillsBookmarkData.RefreshBillsBookmark;
  470. if Assigned(FOnAfterSetBookmark) then
  471. FOnAfterSetBookmark(Rec.HasBookMark.AsBoolean);
  472. zgBillsCompile.InvalidateRow(zgBillsCompile.CurRow);
  473. end;
  474. procedure TBillsCompileFrame.SetShowAlias(const Value: Boolean);
  475. begin
  476. FShowAlias := Value;
  477. stdBillsCompile.Column('Alias').Visible := FShowAlias;
  478. end;
  479. procedure TBillsCompileFrame.actnImportGclBillsToXmjUpdate(
  480. Sender: TObject);
  481. begin
  482. with stdBillsCompile.IDTree do
  483. TAction(Sender).Enabled := not Selected.HasChildren and (Selected.Rec.ValueByName('Code').AsString <> '');
  484. end;
  485. procedure TBillsCompileFrame.actnImportGclBillsToXmjExecute(
  486. Sender: TObject);
  487. var
  488. sFileName: string;
  489. Importor: TDEI_GclBills;
  490. begin
  491. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  492. begin
  493. if SelectExcelFile(sFileName) then
  494. begin
  495. Importor := TDEI_GclBills.Create(TProjectData(FBillsCompileData.ProjectData));
  496. try
  497. Importor.ImportToXmj(sFileName, stdBillsCompile.IDTree.Selected.ID);
  498. finally
  499. Importor.Free;
  500. end;
  501. end;
  502. end
  503. else
  504. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  505. end;
  506. procedure TBillsCompileFrame.ExpandNodeTo(ALevel: Integer);
  507. begin
  508. BeginExpandNode;
  509. try
  510. FBillsCompileData.ExpandNodeTo(ALevel);
  511. finally
  512. EndExpandNode;
  513. end;
  514. end;
  515. procedure TBillsCompileFrame.ExpandXmjNode;
  516. begin
  517. BeginExpandNode;
  518. try
  519. FBillsCompileData.ExpandXmjNode;
  520. finally
  521. EndExpandNode;
  522. end;
  523. end;
  524. procedure TBillsCompileFrame.BeginExpandNode;
  525. begin
  526. zgBillsCompile.BeginUpdate;
  527. zgBillsCompile.OnCellGetColor := nil;
  528. BeginUpdateWindow(zgBillsCompile.Handle);
  529. stdBillsCompile.DisableControl;
  530. end;
  531. procedure TBillsCompileFrame.EndExpandNode;
  532. begin
  533. stdBillsCompile.EnableControl;
  534. EndUpdateWindow(zgBillsCompile.Handle);
  535. zgBillsCompile.OnCellGetColor := zgBillsCompileCellGetColor;
  536. zgBillsCompile.EndUpdate;
  537. end;
  538. procedure TBillsCompileFrame.RefreshPhase_Stage;
  539. begin
  540. with TProjectData(FBillsCompileData.ProjectData) do
  541. begin
  542. ResetBaseDataReadOnly(BaseDataReadOnly);
  543. ResetAllowInsert(AllowInsert);
  544. end;
  545. end;
  546. procedure TBillsCompileFrame.ResetAllowInsert(AAllow: Boolean);
  547. begin
  548. if AAllow then
  549. stdBillsCompile.Options := stdBillsCompile.Options + [aoAllowInsert]
  550. else
  551. stdBillsCompile.Options := stdBillsCompile.Options - [aoAllowInsert];
  552. end;
  553. procedure TBillsCompileFrame.ResetBaseDataReadOnly(AReadOnly: Boolean);
  554. begin
  555. stdBillsCompile.Column('Code').ReadOnly := AReadOnly;
  556. stdBillsCompile.Column('B_Code').ReadOnly := AReadOnly;
  557. stdBillsCompile.Column('Name').ReadOnly := AReadOnly;
  558. stdBillsCompile.Column('Units').ReadOnly := AReadOnly;
  559. stdBillsCompile.Column('Price').ReadOnly := AReadOnly;
  560. stdBillsCompile.Column('DrawingCode').ReadOnly := AReadOnly;
  561. end;
  562. procedure TBillsCompileFrame.actnImportPlaneFxBillsToXmjExecute(
  563. Sender: TObject);
  564. var
  565. sFileName: string;
  566. Importor: TPlaneFxBillsExcelImport;
  567. begin
  568. if TProjectData(FBillsCompileData.ProjectData).CanInsertNormalBills then
  569. begin
  570. if SelectExcelFile(sFileName) then
  571. begin
  572. Importor := TPlaneFxBillsExcelImport.Create(TProjectData(FBillsCompileData.ProjectData));
  573. try
  574. Importor.ParentID := stdBillsCompile.IDTree.Selected.ID;
  575. Importor.ImportFile(sFileName);
  576. finally
  577. Importor.Free;
  578. end;
  579. end;
  580. end
  581. else
  582. TipMessage('当前标段未解锁,如需使用此功能,请先解锁标段');
  583. end;
  584. procedure TBillsCompileFrame.ExpandPegXmjNode;
  585. begin
  586. BeginExpandNode;
  587. try
  588. FBillsCompileData.ExpandPegXmjNode;
  589. finally
  590. EndExpandNode;
  591. end;
  592. end;
  593. procedure TBillsCompileFrame.ExpandMouseDown(AGridCell: TzjCell);
  594. procedure CommonExpand(vNode: TsdIDTreeNode);
  595. begin
  596. AGridCell.Grid.BeginUpdate;
  597. vNode.Expanded := not vNode.Expanded;
  598. AGridCell.Grid.EndUpdate;
  599. AGridCell.Grid.InvalidateView(AGridCell.ViewRect);
  600. end;
  601. procedure QuikExpand(vNode: TsdIDTreeNode);
  602. begin
  603. Screen.Cursor := crHourGlass;
  604. BeginExpandNode;
  605. try
  606. vNode.Expanded := not vNode.Expanded;
  607. finally
  608. EndExpandNode;
  609. Screen.Cursor := crDefault;
  610. end;
  611. end;
  612. var
  613. stnNode: TsdIDTreeNode;
  614. begin
  615. stnNode := TsdIDTreeCell(AGridCell).TreeNode;
  616. if stnNode.PosterityCount > 10000 then
  617. QuikExpand(stnNode)
  618. else
  619. CommonExpand(stnNode);
  620. end;
  621. procedure TBillsCompileFrame.zgBillsCompileCellTextChanged(Sender: TObject;
  622. Col, Row: Integer);
  623. begin
  624. if CheckExprsColumn or CheckMemoStrColumn then
  625. laEdtExprs.Text := zgBillsCompile.CurCell.EditText
  626. else
  627. laEdtExprs.Text := '';
  628. if CheckExprsColumn then
  629. begin
  630. with stdBillsCompile.DataView do
  631. if Assigned(Current) then
  632. laEdtExprs.ReadOnly := Current.ValueByName('LockedInfo').AsBoolean;
  633. end
  634. else if CheckMemoStrColumn then
  635. begin
  636. laEdtExprs.ReadOnly := False;
  637. end;
  638. end;
  639. function TBillsCompileFrame.CheckMemoStrColumn: Boolean;
  640. var
  641. iCol: Integer;
  642. begin
  643. iCol := zgBillsCompile.CurCol - zgBillsCompile.FixedColCount;
  644. Result := (iCol = stdBillsCompile.VisibleCol('MemoStr'));
  645. end;
  646. procedure TBillsCompileFrame.SetShowApprovalCode(const Value: Boolean);
  647. begin
  648. FShowApprovalCode := Value;
  649. stdBillsCompile.Column('ApprovalCode').Visible := FShowApprovalCode;
  650. end;
  651. procedure TBillsCompileFrame.RefreshTreeRow(ARowIndex: Integer);
  652. begin
  653. zgBillsCompile.InvalidateRow(ARowIndex + zgBillsCompile.FixedRowCount);
  654. end;
  655. end.