rmWuJiuZqzfGatherDm.pas 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. unit rmWuJiuZqzfGatherDm;
  2. interface
  3. uses
  4. SysUtils, Classes, DB, DBClient, ProjectData, sdIDTree, sdDB;
  5. type
  6. TrmWuJiuZqzfGatherData = class(TDataModule)
  7. cdsZqzf: TClientDataSet;
  8. cdsZqzfPhaseIndex: TIntegerField;
  9. cdsZqzfQyht: TFloatField;
  10. cdsZqzfFhqd: TFloatField;
  11. cdsZqzfBg: TFloatField;
  12. cdsZqzfSp: TFloatField;
  13. cdsZqzfWy: TFloatField;
  14. cdsZqzfCljg: TFloatField;
  15. cdsZqzfBgh: TFloatField;
  16. cdsZqzfEndGather: TFloatField;
  17. cdsZqzfPreGather: TFloatField;
  18. cdsZqzfCurGather: TFloatField;
  19. cdsZqzfAddKhBlj: TFloatField;
  20. cdsZqzfCurKhBlj: TFloatField;
  21. cdsZqzfAddKhNmggz: TFloatField;
  22. cdsZqzfCurKhNmggz: TFloatField;
  23. cdsZqzfDyyfk: TFloatField;
  24. cdsZqzfAddKhDyyfk: TFloatField;
  25. cdsZqzfCurKhDyyfk: TFloatField;
  26. cdsZqzfAddKAddedTax: TFloatField;
  27. cdsZqzfCurKAddedTax: TFloatField;
  28. cdsZqzfAddSjzf: TFloatField;
  29. cdsZqzfCurSjzf: TFloatField;
  30. cdsZqzfMemo: TWideStringField;
  31. cdsZqzftzpf: TFloatField;
  32. cdsZqzfjj: TFloatField;
  33. cdsZqzffk: TFloatField;
  34. cdsZqzfspje: TFloatField;
  35. cdsZqzfCurYlnmggzbzj: TFloatField;
  36. cdsZqzfAddYlnmggzbzj: TFloatField;
  37. cdsZqzfCurZlbzj: TFloatField;
  38. cdsZqzfAddZlbzj: TFloatField;
  39. cdsZqzfCurYlgcdjjk: TFloatField;
  40. cdsZqzfAddYlgcdjjk: TFloatField;
  41. private
  42. FQyht: Double;
  43. FFhqd: Double;
  44. FBg: Double;
  45. FSp: Double;
  46. FWy: Double;
  47. FCljg: Double;
  48. FTzpf: Double;
  49. procedure GatherMainData(AProjectData: TProjectData);
  50. procedure LoadPhaseData(APhaseIndex: Integer; AProjectData: TProjectData = nil);
  51. public
  52. function AssignData(AProjectData: TProjectData): TDataSet;
  53. end;
  54. implementation
  55. uses BillsDm, BGLDm, DealPaymentDm, PhaseData, PhasePayDm, ConstUnit;
  56. {$R *.dfm}
  57. { TrmWuJiuZqzfGatherData }
  58. function TrmWuJiuZqzfGatherData.AssignData(
  59. AProjectData: TProjectData): TDataSet;
  60. var
  61. iPhase: Integer;
  62. begin
  63. cdsZqzf.Active := True;
  64. cdsZqzf.EmptyDataSet;
  65. GatherMainData(AProjectData);
  66. for iPhase := 1 to AProjectData.ProjProperties.PhaseCount do
  67. LoadPhaseData(iPhase, AProjectData);
  68. Result := cdsZqzf;
  69. end;
  70. procedure TrmWuJiuZqzfGatherData.GatherMainData(AProjectData: TProjectData);
  71. function FindChild(const AName: String; AParent: TsdIDTreeNode = nil): TsdIDTreeNode;
  72. var
  73. vNode: TsdIDTreeNode;
  74. begin
  75. Result := nil;
  76. if Assigned(AParent) then
  77. vNode := AParent.FirstChild
  78. else
  79. vNode := AProjectData.BillsCompileData.BillsCompileTree.FirstNode;
  80. while Assigned(vNode) do
  81. begin
  82. if Pos(AName, vNode.Rec.ValueByName('Name').AsString) > 0 then
  83. begin
  84. Result := vNode;
  85. Break;
  86. end
  87. else
  88. vNode := vNode.NextSibling;
  89. end;
  90. end;
  91. function FindNode(const AName: String; AParent: TsdIDTreeNode = nil): TsdIDTreeNode;
  92. var
  93. vNode: TsdIDTreeNode;
  94. i, iCount: Integer;
  95. begin
  96. Result := nil;
  97. i := 0;
  98. if Assigned(AParent) then
  99. begin
  100. vNode := AParent.FirstChild;
  101. iCount := AParent.PosterityCount;
  102. end
  103. else
  104. begin
  105. vNode := AProjectData.BillsCompileData.BillsCompileTree.FirstNode;
  106. iCount := AProjectData.BillsCompileData.BillsCompileTree.Count;
  107. end;
  108. while Assigned(vNode) and (i < iCount) do
  109. begin
  110. if Pos(AName, vNode.Rec.ValueByName('Name').AsString) > 0 then
  111. begin
  112. Result := vNode;
  113. Break;
  114. end
  115. else
  116. vNode := vNode.NextNode;
  117. Inc(i);
  118. end;
  119. end;
  120. var
  121. vQtFyNode, vChild: TsdIDTreeNode;
  122. begin
  123. // 签约合同金额
  124. FQyht := AProjectData.ProjProperties.ContractPrice;
  125. // 复核清单金额
  126. vQtFyNode := FindChild('建安工程其他费用', AProjectData.BillsCompileData.BillsCompileTree.FindNode(1));
  127. with AProjectData.BillsData do
  128. FFhqd := FirstPart[0] + SecondPart[0] + ThirdPart[0] + ReservedFee[0];
  129. if Assigned(vQtFyNode) then
  130. FFhqd := FFhqd - vQtFyNode.Rec.ValueByName('TotalPrice').AsFloat;
  131. // 变更金额
  132. FBg := AProjectData.BGLData.TotalPrice;
  133. // 索赔金额
  134. vChild := FindNode('索赔', vQtFyNode);
  135. if Assigned(vChild) then
  136. FSp := vChild.Rec.ValueByName('TotalPrice').AsFloat
  137. else
  138. FSp := 0;
  139. // 违约罚金
  140. vChild := FindNode('违约罚金', vQtFyNode);
  141. if Assigned(vChild) then
  142. FWy := vChild.Rec.ValueByName('TotalPrice').AsFloat
  143. else
  144. FWy := 0;
  145. // 材料价格调整金额
  146. vChild := FindNode('价差调整', vQtFyNode);
  147. if Assigned(vChild) then
  148. FCljg := vChild.Rec.ValueByName('TotalPrice').AsFloat
  149. else
  150. FCljg := 0;
  151. FTzpf := AProjectData.BillsData.FirstPart[0] +
  152. AProjectData.BillsData.SecondPart[0] +
  153. AProjectData.BillsData.ThirdPart[0] +
  154. AProjectData.BillsData.ReservedFee[0];
  155. end;
  156. procedure TrmWuJiuZqzfGatherData.LoadPhaseData(APhaseIndex: Integer;
  157. AProjectData: TProjectData);
  158. function GetDealPayID(const AName: string; AMinus: Boolean = false): Integer;
  159. var
  160. iRec: Integer;
  161. Rec: TsdDataRecord;
  162. begin
  163. Result := -1;
  164. with AProjectData.DealPaymentData do
  165. for iRec := 0 to sddDealPayment.RecordCount - 1 do
  166. begin
  167. Rec := sddDealPayment.Records[iRec];
  168. if (Pos(AName, Rec.ValueByName('Name').AsString) > 0) and (Rec.ValueByName('IsMinus').AsBoolean = AMinus) then
  169. begin
  170. Result := Rec.ValueByName('ID').AsInteger;
  171. Break;
  172. end;
  173. end;
  174. end;
  175. procedure GetDealPayRecords(AList: TList; AName: string; AMinus: Boolean = false; ACalcType: Integer = 0);
  176. var
  177. iRec: Integer;
  178. Rec: TsdDataRecord;
  179. begin
  180. AList.Clear;
  181. with AProjectData.DealPaymentData do
  182. for iRec := 0 to sddDealPayment.RecordCount - 1 do
  183. begin
  184. Rec := sddDealPayment.Records[iRec];
  185. if (Pos(AName, Rec.ValueByName('Name').AsString) > 0) and (Rec.ValueByName('IsMinus').AsBoolean = AMinus)
  186. and (Rec.ValueByName('CalcType').AsInteger = ACalcType) then
  187. begin
  188. AList.Add(Rec);
  189. end;
  190. end;
  191. end;
  192. procedure GetDealPayRecords2(AList: TList; AName: string);
  193. var
  194. iRec: Integer;
  195. Rec: TsdDataRecord;
  196. begin
  197. AList.Clear;
  198. with AProjectData.DealPaymentData do
  199. for iRec := 0 to sddDealPayment.RecordCount - 1 do
  200. begin
  201. Rec := sddDealPayment.Records[iRec];
  202. if (Pos(AName, Rec.ValueByName('Name').AsString) > 0) then
  203. begin
  204. AList.Add(Rec);
  205. end;
  206. end;
  207. end;
  208. var
  209. PhaseData: TPhaseData;
  210. sTPField: string;
  211. iDealPayId: Integer;
  212. Rec, MainRec: TsdDataRecord;
  213. vRecList: TList;
  214. iRec: Integer;
  215. begin
  216. PhaseData := TPhaseData.Create(AProjectData);
  217. vRecList := TList.Create;
  218. try
  219. PhaseData.SimpleOpen(Format('%s\Phase%d.dat', [AProjectData.TempPath, APhaseIndex]));
  220. cdsZqzf.Append;
  221. cdsZqzfPhaseIndex.AsInteger := APhaseIndex;
  222. cdsZqzfQyht.AsFloat := FQyht;
  223. cdsZqzfFhqd.AsFloat := FFhqd;
  224. cdsZqzfBg.AsFloat := AProjectData.BGLData.EndTotalPrice[APhaseIndex];
  225. cdsZqzfSp.AsFloat := FSp;
  226. cdsZqzfWy.AsFloat := FWy;
  227. cdsZqzfCljg.AsFloat := FCljg;//PhaseData.StageData.PriceMargin[2, 4];
  228. cdsZqzfBgh.AsFloat := cdsZqzfFhqd.AsFloat + cdsZqzfBg.AsFloat + cdsZqzfSp.AsFloat + cdsZqzfWy.AsFloat + cdsZqzfCljg.AsFloat;
  229. cdsZqzftzpf.AsFloat := FTzpf;
  230. sTPField := 'TotalPrice' + IntToStr(TPhaseData(PhaseData).PhaseProperty.AuditCount);
  231. with PhaseData.PhasePayData do
  232. begin
  233. iDealPayId := GetDealPayID('本期完成计量');
  234. Rec := sddPhasePay.Locate('ID', iDealPayId);
  235. cdsZqzfEndGather.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  236. cdsZqzfPreGather.AsFloat := Rec.ValueByName('Pre' + sTPField).AsFloat;
  237. cdsZqzfCurGather.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  238. GetDealPayRecords(vRecList, '保留金', true);
  239. for iRec := 0 to vRecList.Count - 1 do
  240. begin
  241. iDealPayId := TsdDataRecord(vRecList.Items[iRec]).ValueByName('ID').AsInteger;
  242. Rec := sddPhasePay.Locate('ID', iDealPayId);
  243. if Assigned(Rec) then
  244. begin
  245. cdsZqzfAddKhBlj.AsFloat := cdsZqzfAddKhBlj.AsFloat + Rec.ValueByName('End' + sTPField).AsFloat;
  246. cdsZqzfCurKhBlj.AsFloat := cdsZqzfCurKhBlj.AsFloat + Rec.ValueByName(sTPField).AsFloat;
  247. end;
  248. end;
  249. GetDealPayRecords(vRecList, '农民工工资', true);
  250. for iRec := 0 to vRecList.Count - 1 do
  251. begin
  252. iDealPayId := TsdDataRecord(vRecList.Items[iRec]).ValueByName('ID').AsInteger;
  253. Rec := sddPhasePay.Locate('ID', iDealPayId);
  254. if Assigned(Rec) then
  255. begin
  256. cdsZqzfAddKhNmggz.AsFloat := cdsZqzfAddKhNmggz.AsFloat + Rec.ValueByName('End' + sTPField).AsFloat;
  257. cdsZqzfCurKhNmggz.AsFloat := cdsZqzfCurKhNmggz.AsFloat + Rec.ValueByName(sTPField).AsFloat;
  258. end;
  259. end;
  260. GetDealPayRecords(vRecList, '动员预付款', false);
  261. for iRec := 0 to vRecList.Count - 1 do
  262. begin
  263. iDealPayId := TsdDataRecord(vRecList.Items[iRec]).ValueByName('ID').AsInteger;
  264. Rec := sddPhasePay.Locate('ID', iDealPayId);
  265. if Assigned(Rec) then
  266. begin
  267. cdsZqzfDyyfk.AsFloat := cdsZqzfDyyfk.AsFloat + Rec.ValueByName(sTPField).AsFloat;
  268. end;
  269. end;
  270. GetDealPayRecords(vRecList, '动员预付款', true);
  271. for iRec := 0 to vRecList.Count - 1 do
  272. begin
  273. iDealPayId := TsdDataRecord(vRecList.Items[iRec]).ValueByName('ID').AsInteger;
  274. Rec := sddPhasePay.Locate('ID', iDealPayId);
  275. if Assigned(Rec) then
  276. begin
  277. cdsZqzfAddKhDyyfk.AsFloat := cdsZqzfAddKhDyyfk.AsFloat + Rec.ValueByName('End' + sTPField).AsFloat;
  278. cdsZqzfCurKhDyyfk.AsFloat := cdsZqzfCurKhDyyfk.AsFloat + Rec.ValueByName(sTPField).AsFloat;
  279. end;
  280. end;
  281. GetDealPayRecords(vRecList, '增值税', true);
  282. for iRec := 0 to vRecList.Count - 1 do
  283. begin
  284. iDealPayId := TsdDataRecord(vRecList.Items[iRec]).ValueByName('ID').AsInteger;
  285. Rec := sddPhasePay.Locate('ID', iDealPayId);
  286. if Assigned(Rec) then
  287. begin
  288. cdsZqzfAddKAddedTax.AsFloat := cdsZqzfAddKAddedTax.AsFloat + Rec.ValueByName('End' + sTPField).AsFloat;
  289. cdsZqzfCurKAddedTax.AsFloat := cdsZqzfCurKAddedTax.AsFloat + Rec.ValueByName(sTPField).AsFloat;
  290. end;
  291. end;
  292. iDealPayId := GetDealPayID('本期应付');
  293. Rec := sddPhasePay.Locate('ID', iDealPayId);
  294. if Assigned(Rec) then
  295. begin
  296. cdsZqzfAddSjzf.AsFloat := Rec.ValueByName('End' + sTPField).AsFloat;
  297. cdsZqzfCurSjzf.AsFloat := Rec.ValueByName(sTPField).AsFloat;
  298. end;
  299. GetDealPayRecords2(vRecList, '奖金');
  300. for iRec := 0 to vRecList.Count - 1 do
  301. begin
  302. iDealPayId := TsdDataRecord(vRecList.Items[iRec]).ValueByName('ID').AsInteger;
  303. Rec := sddPhasePay.Locate('ID', iDealPayId);
  304. if Assigned(Rec) then
  305. begin
  306. cdsZqzfjj.AsFloat := cdsZqzfjj.AsFloat + Rec.ValueByName(sTPField).AsFloat;
  307. end;
  308. end;
  309. GetDealPayRecords2(vRecList, '罚款');
  310. for iRec := 0 to vRecList.Count - 1 do
  311. begin
  312. iDealPayId := TsdDataRecord(vRecList.Items[iRec]).ValueByName('ID').AsInteger;
  313. Rec := sddPhasePay.Locate('ID', iDealPayId);
  314. if Assigned(Rec) then
  315. begin
  316. cdsZqzffk.AsFloat := cdsZqzffk.AsFloat + Rec.ValueByName(sTPField).AsFloat;
  317. end;
  318. end;
  319. GetDealPayRecords2(vRecList, '索赔金额');
  320. for iRec := 0 to vRecList.Count - 1 do
  321. begin
  322. iDealPayId := TsdDataRecord(vRecList.Items[iRec]).ValueByName('ID').AsInteger;
  323. Rec := sddPhasePay.Locate('ID', iDealPayId);
  324. if Assigned(Rec) then
  325. begin
  326. cdsZqzfspje.AsFloat := cdsZqzfspje.AsFloat + Rec.ValueByName(sTPField).AsFloat;
  327. end;
  328. end;
  329. GetDealPayRecords2(vRecList, '预留农民工工资保证金');
  330. for iRec := 0 to vRecList.Count - 1 do
  331. begin
  332. MainRec := TsdDataRecord(vRecList.Items[iRec]);
  333. iDealPayId := MainRec.ValueByName('ID').AsInteger;
  334. Rec := sddPhasePay.Locate('ID', iDealPayId);
  335. if Assigned(Rec) then
  336. begin
  337. cdsZqzfAddYlnmggzbzj.AsFloat := cdsZqzfAddYlnmggzbzj.AsFloat + Rec.ValueByName('End' + sTPField).AsFloat;
  338. //cdsZqzfAddYlnmggzbzj.AsFloat := cdsZqzfAddYlnmggzbzj.AsFloat + MainRec.ValueByName(sTPField).AsFloat;
  339. cdsZqzfCurYlnmggzbzj.AsFloat := cdsZqzfCurYlnmggzbzj.AsFloat + Rec.ValueByName(sTPField).AsFloat;
  340. end;
  341. end;
  342. GetDealPayRecords2(vRecList, '质量保证金');
  343. for iRec := 0 to vRecList.Count - 1 do
  344. begin
  345. MainRec := TsdDataRecord(vRecList.Items[iRec]);
  346. iDealPayId := MainRec.ValueByName('ID').AsInteger;
  347. Rec := sddPhasePay.Locate('ID', iDealPayId);
  348. if Assigned(Rec) then
  349. begin
  350. cdsZqzfAddZlbzj.AsFloat := cdsZqzfAddZlbzj.AsFloat + Rec.ValueByName('End' + sTPField).AsFloat;
  351. //cdsZqzfAddZlbzj.AsFloat := cdsZqzfAddZlbzj.AsFloat + MainRec.ValueByName(sTPField).AsFloat;
  352. cdsZqzfCurZlbzj.AsFloat := cdsZqzfCurZlbzj.AsFloat + Rec.ValueByName(sTPField).AsFloat;
  353. end;
  354. end;
  355. GetDealPayRecords2(vRecList, '预留工程待结价款');
  356. for iRec := 0 to vRecList.Count - 1 do
  357. begin
  358. MainRec := TsdDataRecord(vRecList.Items[iRec]);
  359. iDealPayId := MainRec.ValueByName('ID').AsInteger;
  360. Rec := sddPhasePay.Locate('ID', iDealPayId);
  361. if Assigned(Rec) then
  362. begin
  363. cdsZqzfAddYlgcdjjk.AsFloat := cdsZqzfAddYlgcdjjk.AsFloat + Rec.ValueByName('End' + sTPField).AsFloat;
  364. //cdsZqzfAddYlgcdjjk.AsFloat := cdsZqzfAddYlgcdjjk.AsFloat + MainRec.ValueByName(sTPField).AsFloat;
  365. cdsZqzfCurYlgcdjjk.AsFloat := cdsZqzfCurYlgcdjjk.AsFloat + Rec.ValueByName(sTPField).AsFloat;
  366. end;
  367. end;
  368. end;
  369. cdsZqzf.Post;
  370. finally
  371. vRecList.Free;
  372. PhaseData.Free;
  373. end;
  374. end;
  375. end.