PhaseCompareDm.pas 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. unit PhaseCompareDm;
  2. interface
  3. uses
  4. SysUtils, Classes, sdDB, sdIDTree, DB, DBClient, Provider, ADODB,
  5. sdProvider;
  6. {const
  7. PhaseSelect0 = 'Select R.BillsID, R.GatherQuantity As Quantity0, R.GatherTotalPrice As TotalPrice0' +
  8. ' From Refer As R';
  9. PhaseSelect1 = 'Select A1.BillsID, A1.GatherQuantity As Quantity1, A1.GatherTotalPrice As TotalPrice1,' +
  10. ' R.GatherQuantity As Quantity0, R.GatherTotalPrice As TotalPrice0' +
  11. ' From Audit1 As A1 Left Join Refer As R on A1.BillsID = R.BillsID';
  12. PhaseSelect2 = 'Select A2.BillsID, A2.GatherQuantity As Quantity2, A2.GatherTotalPrice As TotalPrice2,' +
  13. ' A1.GatherQuantity As Quantity1, A1.GatherTotalPrice As TotalPrice1' +
  14. ' R.GatherQuantity As Quantity0, R.GatherTotalPrice As TotalPrice0' +
  15. ' From' +
  16. ' (Audit2 As A2 Left Join Audit1 As A1 on A2.BillsID = A1.BillsID)'+
  17. ' Left Join Refer As R on A2.BillsID = R.BillsID';
  18. PhaseSelect3 = 'Select A3.BillsID, A3.GatherQuantity As Quantity3, A3.GatherTotalPrice As TotalPrice3,' +
  19. ' A2.GatherQuantity As Quantity2, A2.GatherTotalPrice As TotalPrice2' +
  20. ' A1.GatherQuantity As Quantity1, A1.GatherTotalPrice As TotalPrice1' +
  21. ' R.GatherQuantity As Quantity0, R.GatherTotalPrice As TotalPrice0' +
  22. ' From' +
  23. ' ((Audit3 As A3 Left Join Audit2 As A2 on A3.BillsID = A2.BillsID)'+
  24. ' Left Join Audit1 As A1 on A3.BillsID = A1.BillsID)'+
  25. ' Left Join Refer As R on A3.BillsID = R.BillsID';
  26. PhaseSelect4 = 'Select A4.BillsID, A4.GatherQuantity As Quantity4, A4.GatherTotalPrice As TotalPrice4,' +
  27. ' A3.GatherQuantity As Quantity3, A3.GatherTotalPrice As TotalPrice3' +
  28. ' A2.GatherQuantity As Quantity2, A2.GatherTotalPrice As TotalPrice2' +
  29. ' A1.GatherQuantity As Quantity1, A1.GatherTotalPrice As TotalPrice1' +
  30. ' R.GatherQuantity As Quantity0, R.GatherTotalPrice As TotalPrice0' +
  31. ' From' +
  32. ' (((Audit4 As A4 Left Join Audit3 As A3 on A4.BillsID = A3.BillsID)'+
  33. ' Left Join Audit2 As A2 on A4.BillsID = A2.BillsID)'+
  34. ' Left Join Audit1 As A1 on A4.BillsID = A1.BillsID)'+
  35. ' Left Join Refer As R on A4.BillsID = R.BillsID';
  36. PhaseSelect14 = 'Select A14.BillsID, A14.GatherQuantity As Quantity14, A14.GatherTotalPrice As TotalPrice14,' +
  37. ' A13.GatherQuantity As Quantity13, A13.GatherTotalPrice As TotalPrice13' +
  38. ' A12.GatherQuantity As Quantity12, A12.GatherTotalPrice As TotalPrice12' +
  39. ' A11.GatherQuantity As Quantity11, A11.GatherTotalPrice As TotalPrice11' +
  40. ' A10.GatherQuantity As Quantity10, A10.GatherTotalPrice As TotalPrice10' +
  41. ' A9.GatherQuantity As Quantity9, A9.GatherTotalPrice As TotalPrice9' +
  42. ' A8.GatherQuantity As Quantity8, A8.GatherTotalPrice As TotalPrice8' +
  43. ' A7.GatherQuantity As Quantity7, A7.GatherTotalPrice As TotalPrice7' +
  44. ' A6.GatherQuantity As Quantity6, A6.GatherTotalPrice As TotalPrice6' +
  45. ' A5.GatherQuantity As Quantity5, A5.GatherTotalPrice As TotalPrice5' +
  46. ' A4.GatherQuantity As Quantity4, A4.GatherTotalPrice As TotalPrice4' +
  47. ' A3.GatherQuantity As Quantity3, A3.GatherTotalPrice As TotalPrice3' +
  48. ' A2.GatherQuantity As Quantity2, A2.GatherTotalPrice As TotalPrice2' +
  49. ' A1.GatherQuantity As Quantity1, A1.GatherTotalPrice As TotalPrice1' +
  50. ' R.GatherQuantity As Quantity0, R.GatherTotalPrice As TotalPrice0' +
  51. ' From' +
  52. ' (((((((((((((Audit14 As A14 Left Join Audit13 As A13 on A14.BillsID = A13.BillsID)'+
  53. ' Left Join Audit12 As A12 on A14.BillsID = A12.BillsID)'+
  54. ' Left Join Audit11 As A11 on A14.BillsID = A11.BillsID)'+
  55. ' Left Join Audit20 As A10 on A14.BillsID = A10.BillsID)'+
  56. ' Left Join Audit9 As A9 on A14.BillsID = A9.BillsID)'+
  57. ' Left Join Audit8 As A8 on A14.BillsID = A8.BillsID)'+
  58. ' Left Join Audit7 As A7 on A14.BillsID = A7.BillsID)'+
  59. ' Left Join Audit6 As A6 on A14.BillsID = A6.BillsID)'+
  60. ' Left Join Audit5 As A5 on A14.BillsID = A5.BillsID)'+
  61. ' Left Join Audit4 As A4 on A14.BillsID = A4.BillsID)'+
  62. ' Left Join Audit3 As A3 on A14.BillsID = A3.BillsID)'+
  63. ' Left Join Audit2 As A2 on A4.BillsID = A2.BillsID)'+
  64. ' Left Join Audit1 As A1 on A4.BillsID = A1.BillsID)'+
  65. ' Left Join Refer As R on A4.BillsID = R.BillsID'; }
  66. type
  67. TPhaseCompareData = class(TDataModule)
  68. sdvPhaseCompare: TsdDataView;
  69. procedure sdvPhaseCompareGetText(var Text: String;
  70. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  71. DisplayText: Boolean);
  72. private
  73. FProjectData: TObject;
  74. FCompareTree: TsdIDTree;
  75. FStageCount: Integer;
  76. procedure AddStageColumn(AStageIndex: Integer);
  77. procedure ClearStageColumn;
  78. procedure InitCompareColumns;
  79. procedure CreateCompareTree;
  80. public
  81. constructor Create(AProjectData: TObject);
  82. destructor Destroy; override;
  83. procedure Open;
  84. procedure Close;
  85. procedure ReConnectTree;
  86. procedure ExpandNodeTo(ALevel: Integer);
  87. procedure ExpandXmjNode;
  88. procedure ExpandCurPhase;
  89. property ProjectData: TObject read FProjectData;
  90. property CompareTree: TsdIDTree read FCompareTree;
  91. end;
  92. implementation
  93. uses
  94. ProjectData, PhaseData, StageDm, StageCompareDm, UtilMethods,
  95. ProjectProperty;
  96. {$R *.dfm}
  97. { TPhaseCompareData }
  98. procedure TPhaseCompareData.AddStageColumn(AStageIndex: Integer);
  99. var
  100. vColumn: TsdViewColumn;
  101. begin
  102. vColumn := sdvPhaseCompare.Columns.Add;
  103. vColumn.FieldName := Format('Quantity%d', [AStageIndex]);
  104. vColumn.KeyFields := 'ID';
  105. vColumn.LookupKeyFields := 'BillsID';
  106. vColumn.LookupResultField := Format('Quantity%d', [AStageIndex]);
  107. vColumn.LookupDataSet := TProjectData(FProjectData).PhaseData.StageCompareData.sddStageCompare;
  108. vColumn.DisplayFormat := TProjectData(FProjectData).ProjProperties.QuantityFormat;
  109. vColumn := sdvPhaseCompare.Columns.Add;
  110. vColumn.FieldName := Format('TotalPrice%d', [AStageIndex]);
  111. vColumn.KeyFields := 'ID';
  112. vColumn.LookupKeyFields := 'BillsID';
  113. vColumn.LookupResultField := Format('TotalPrice%d', [AStageIndex]);
  114. vColumn.LookupDataSet := TProjectData(FProjectData).PhaseData.StageCompareData.sddStageCompare;
  115. vColumn.DisplayFormat := TProjectData(FProjectData).ProjProperties.TotalPriceFormat;
  116. end;
  117. procedure TPhaseCompareData.ClearStageColumn;
  118. var
  119. iStage: Integer;
  120. vCol: TsdViewColumn;
  121. begin
  122. for iStage := 0 to FStageCount - 1 do
  123. begin
  124. vCol := sdvPhaseCompare.Columns.FindColumn('Quantity' + IntToStr(iStage));
  125. if Assigned(vCol) then
  126. sdvPhaseCompare.Columns.Delete(vCol.Index);
  127. vCol := sdvPhaseCompare.Columns.FindColumn('TotalPrice' + IntToStr(iStage));
  128. if Assigned(vCol) then
  129. sdvPhaseCompare.Columns.Delete(vCol.Index);
  130. end;
  131. end;
  132. procedure TPhaseCompareData.Close;
  133. begin
  134. sdvPhaseCompare.Close;
  135. end;
  136. constructor TPhaseCompareData.Create(AProjectData: TObject);
  137. begin
  138. inherited Create(nil);
  139. FProjectData := AProjectData;
  140. FStageCount := 0;
  141. end;
  142. procedure TPhaseCompareData.CreateCompareTree;
  143. begin
  144. FCompareTree := TsdIDTree.Create;
  145. FCompareTree.KeyFieldName := 'ID';
  146. FCompareTree.ParentFieldName := 'ParentID';
  147. FCompareTree.NextSiblingFieldName := 'NextSiblingID';
  148. FCompareTree.AutoExpand := True;
  149. FCompareTree.DataView := sdvPhaseCompare;
  150. end;
  151. destructor TPhaseCompareData.Destroy;
  152. begin
  153. FCompareTree.Free;
  154. inherited;
  155. end;
  156. procedure TPhaseCompareData.ExpandCurPhase;
  157. var
  158. iIndex: Integer;
  159. stnNode: TsdIDTreeNode;
  160. begin
  161. for iIndex := 0 to CompareTree.Count - 1 do
  162. begin
  163. stnNode := CompareTree.Items[iIndex];
  164. with TProjectData(FProjectData).PhaseData.StageCompareData do
  165. if (stnNode.ParentID <> -1) then
  166. stnNode.Expanded := HasPhaseData(stnNode.ID);
  167. end;
  168. end;
  169. procedure TPhaseCompareData.ExpandNodeTo(ALevel: Integer);
  170. begin
  171. CompareTree.ExpandLevel := ALevel;
  172. end;
  173. procedure TPhaseCompareData.ExpandXmjNode;
  174. var
  175. iIndex: Integer;
  176. stnNode: TsdIDTreeNode;
  177. begin
  178. for iIndex := 0 to CompareTree.Count - 1 do
  179. begin
  180. stnNode := CompareTree.Items[iIndex];
  181. if (stnNode.ParentID <> -1) then
  182. stnNode.Parent.Expanded := stnNode.Rec.ValueByName('B_Code').AsString = '';
  183. end;
  184. end;
  185. procedure TPhaseCompareData.InitCompareColumns;
  186. var
  187. iStage: Integer;
  188. begin
  189. ClearStageColumn;
  190. if TProjectData(FProjectData).PhaseData.Active then
  191. for iStage := 0 to TProjectData(FProjectData).PhaseData.AuditCount do
  192. AddStageColumn(iStage);
  193. FStageCount := TProjectData(FProjectData).PhaseData.StageCount;
  194. end;
  195. procedure TPhaseCompareData.Open;
  196. begin
  197. sdvPhaseCompare.DataSet := TProjectData(FProjectData).BillsData.sddBills;
  198. InitCompareColumns;
  199. sdvPhaseCompare.Open;
  200. CreateCompareTree;
  201. end;
  202. procedure TPhaseCompareData.ReConnectTree;
  203. begin
  204. FCompareTree.DataView := nil;
  205. FCompareTree.DataView := sdvPhaseCompare;
  206. FCompareTree.Link(TProjectData(FProjectData).BillsCompileData.BillsCompileTree, True);
  207. end;
  208. procedure TPhaseCompareData.sdvPhaseCompareGetText(var Text: String;
  209. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  210. DisplayText: Boolean);
  211. begin
  212. if Assigned(AValue) and (AValue.DataType = ftFloat) and (AValue.AsFloat = 0) then
  213. Text := '';
  214. end;
  215. end.