PhaseCompareDm.pas 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  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. {$R *.dfm}
  96. { TPhaseCompareData }
  97. procedure TPhaseCompareData.AddStageColumn(AStageIndex: Integer);
  98. var
  99. vColumn: TsdViewColumn;
  100. begin
  101. vColumn := sdvPhaseCompare.Columns.Add;
  102. vColumn.FieldName := Format('Quantity%d', [AStageIndex]);
  103. vColumn.KeyFields := 'ID';
  104. vColumn.LookupKeyFields := 'BillsID';
  105. vColumn.LookupResultField := Format('Quantity%d', [AStageIndex]);
  106. vColumn.LookupDataSet := TProjectData(FProjectData).PhaseData.StageCompareData.sddStageCompare;
  107. vColumn := sdvPhaseCompare.Columns.Add;
  108. vColumn.FieldName := Format('TotalPrice%d', [AStageIndex]);
  109. vColumn.KeyFields := 'ID';
  110. vColumn.LookupKeyFields := 'BillsID';
  111. vColumn.LookupResultField := Format('TotalPrice%d', [AStageIndex]);
  112. vColumn.LookupDataSet := TProjectData(FProjectData).PhaseData.StageCompareData.sddStageCompare;
  113. end;
  114. procedure TPhaseCompareData.ClearStageColumn;
  115. var
  116. iStage: Integer;
  117. vCol: TsdViewColumn;
  118. begin
  119. for iStage := 0 to FStageCount - 1 do
  120. begin
  121. vCol := sdvPhaseCompare.Columns.FindColumn('Quantity' + IntToStr(iStage));
  122. if Assigned(vCol) then
  123. sdvPhaseCompare.Columns.Delete(vCol.Index);
  124. vCol := sdvPhaseCompare.Columns.FindColumn('TotalPrice' + IntToStr(iStage));
  125. if Assigned(vCol) then
  126. sdvPhaseCompare.Columns.Delete(vCol.Index);
  127. end;
  128. end;
  129. procedure TPhaseCompareData.Close;
  130. begin
  131. sdvPhaseCompare.Close;
  132. end;
  133. constructor TPhaseCompareData.Create(AProjectData: TObject);
  134. begin
  135. inherited Create(nil);
  136. FProjectData := AProjectData;
  137. FStageCount := 0;
  138. end;
  139. procedure TPhaseCompareData.CreateCompareTree;
  140. begin
  141. FCompareTree := TsdIDTree.Create;
  142. FCompareTree.KeyFieldName := 'ID';
  143. FCompareTree.ParentFieldName := 'ParentID';
  144. FCompareTree.NextSiblingFieldName := 'NextSiblingID';
  145. FCompareTree.AutoExpand := True;
  146. FCompareTree.DataView := sdvPhaseCompare;
  147. end;
  148. destructor TPhaseCompareData.Destroy;
  149. begin
  150. FCompareTree.Free;
  151. inherited;
  152. end;
  153. procedure TPhaseCompareData.ExpandCurPhase;
  154. var
  155. iIndex: Integer;
  156. stnNode: TsdIDTreeNode;
  157. begin
  158. for iIndex := 0 to CompareTree.Count - 1 do
  159. begin
  160. stnNode := CompareTree.Items[iIndex];
  161. with TProjectData(FProjectData).PhaseData.StageCompareData do
  162. if (stnNode.ParentID <> -1) then
  163. stnNode.Expanded := HasPhaseData(stnNode.ID);
  164. end;
  165. end;
  166. procedure TPhaseCompareData.ExpandNodeTo(ALevel: Integer);
  167. begin
  168. CompareTree.ExpandLevel := ALevel;
  169. end;
  170. procedure TPhaseCompareData.ExpandXmjNode;
  171. var
  172. iIndex: Integer;
  173. stnNode: TsdIDTreeNode;
  174. begin
  175. for iIndex := 0 to CompareTree.Count - 1 do
  176. begin
  177. stnNode := CompareTree.Items[iIndex];
  178. if (stnNode.ParentID <> -1) then
  179. stnNode.Parent.Expanded := stnNode.Rec.ValueByName('B_Code').AsString = '';
  180. end;
  181. end;
  182. procedure TPhaseCompareData.InitCompareColumns;
  183. var
  184. iStage: Integer;
  185. begin
  186. ClearStageColumn;
  187. if TProjectData(FProjectData).PhaseData.Active then
  188. for iStage := 0 to TProjectData(FProjectData).PhaseData.AuditCount do
  189. AddStageColumn(iStage);
  190. FStageCount := TProjectData(FProjectData).PhaseData.StageCount;
  191. end;
  192. procedure TPhaseCompareData.Open;
  193. begin
  194. sdvPhaseCompare.DataSet := TProjectData(FProjectData).BillsData.sddBills;
  195. InitCompareColumns;
  196. sdvPhaseCompare.Open;
  197. CreateCompareTree;
  198. end;
  199. procedure TPhaseCompareData.ReConnectTree;
  200. begin
  201. FCompareTree.DataView := nil;
  202. FCompareTree.DataView := sdvPhaseCompare;
  203. FCompareTree.Link(TProjectData(FProjectData).BillsCompileData.BillsCompileTree, True);
  204. end;
  205. procedure TPhaseCompareData.sdvPhaseCompareGetText(var Text: String;
  206. ARecord: TsdDataRecord; AValue: TsdValue; AColumn: TsdViewColumn;
  207. DisplayText: Boolean);
  208. begin
  209. if (Pos('TotalPrice', AColumn.FieldName) > 0) or
  210. (Pos('Quantity', AColumn.FieldName) > 0) then
  211. begin
  212. if Assigned(AValue) and (AValue.AsFloat = 0) then
  213. Text := '';
  214. end;
  215. end;
  216. end.