SearchDm.pas 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. unit SearchDm;
  2. interface
  3. uses
  4. SysUtils, Classes, DB, DBClient, sdIDTree, sdDB, BillsTree;
  5. type
  6. TLocateType = (ltCompile, ltMeasure);
  7. TSearchData = class(TDataModule)
  8. cdsSearch: TClientDataSet;
  9. cdsSearchCode: TStringField;
  10. cdsSearchB_Code: TStringField;
  11. cdsSearchName: TWideStringField;
  12. cdsSearchUnits: TWideStringField;
  13. cdsSearchQuantity: TFloatField;
  14. cdsSearchAddGatherQuantity: TFloatField;
  15. cdsSearchID: TIntegerField;
  16. cdsSearchCurQcQuantity: TFloatField;
  17. cdsSearchPrice: TFloatField;
  18. cdsSearchCompleteRate: TFloatField;
  19. procedure cdsSearchQuantityGetText(Sender: TField; var Text: String;
  20. DisplayText: Boolean);
  21. private
  22. FProjectData: TObject;
  23. procedure AddSearchResult(ANode: TBillsIDTreeNode);
  24. public
  25. constructor Create(AProjectData: TObject);
  26. destructor Destroy; override;
  27. procedure SearchKeyword(const AKeyword: string);
  28. procedure SearchOverRange;
  29. procedure SearchBelowRange;
  30. procedure LocateCurrent(ALocateType: TLocateType);
  31. property ProjectData: TObject read FProjectData;
  32. end;
  33. implementation
  34. uses
  35. ProjectData, BillsMeasureDm, BillsCompileDm, Math, ZhAPI,
  36. UtilMethods, Forms, Controls;
  37. {$R *.dfm}
  38. { TSearchData }
  39. procedure TSearchData.AddSearchResult(ANode: TBillsIDTreeNode);
  40. begin
  41. if not Assigned(ANode) then Exit;
  42. cdsSearch.Append;
  43. with ANode do
  44. begin
  45. cdsSearchID.AsInteger := Rec.ValueByName('ID').AsInteger;
  46. cdsSearchCode.AsString := Rec.ValueByName('Code').AsString;
  47. cdsSearchB_Code.AsString := Rec.ValueByName('B_Code').AsString;
  48. cdsSearchName.AsString := Rec.ValueByName('Name').AsString;
  49. cdsSearchUnits.AsString := Rec.ValueByName('Units').AsString;
  50. cdsSearchPrice.AsFloat := Rec.ValueByName('Price').AsFloat;
  51. cdsSearchQuantity.AsString := Rec.ValueByName('Quantity').AsString;
  52. if Assigned(StageRec) then
  53. cdsSearchCurQcQuantity.AsFloat := StageRec.ValueByName('QcQuantity').AsFloat;
  54. cdsSearchAddGatherQuantity.AsString := Rec.ValueByName('AddGatherQuantity').AsString;
  55. if cdsSearchQuantity.AsFloat <> 0 then
  56. cdsSearchCompleteRate.AsFloat := advRoundTo(
  57. Rec.ValueByName('AddDealQuantity').AsFloat/cdsSearchQuantity.AsFloat*100);
  58. end;
  59. cdsSearch.Post;
  60. end;
  61. constructor TSearchData.Create(AProjectData: TObject);
  62. begin
  63. inherited Create(nil);
  64. FProjectData := AProjectData;
  65. end;
  66. destructor TSearchData.Destroy;
  67. begin
  68. inherited;
  69. end;
  70. procedure TSearchData.LocateCurrent(ALocateType: TLocateType);
  71. procedure LocateCompile;
  72. var
  73. stnNode: TsdIDTreeNode;
  74. begin
  75. with TProjectData(FProjectData).BillsCompileData do
  76. begin
  77. stnNode := BillsCompileTree.FindNode(cdsSearchID.AsInteger);
  78. sdvBillsCompile.LocateInControl(stnNode.Rec);
  79. end;
  80. end;
  81. procedure LocateMeasure;
  82. var
  83. stnNode: TsdIDTreeNode;
  84. begin
  85. with TProjectData(FProjectData).BillsMeasureData do
  86. begin
  87. stnNode := BillsMeasureTree.FindNode(cdsSearchID.AsInteger);
  88. sdvBillsMeasure.LocateInControl(stnNode.Rec);
  89. end;
  90. end;
  91. begin
  92. Screen.Cursor := crHourGlass;
  93. try
  94. if ALocateType = ltCompile then
  95. LocateCompile
  96. else if ALocateType = ltMeasure then
  97. LocateMeasure;
  98. finally
  99. Screen.Cursor := crDefault;
  100. end;
  101. end;
  102. procedure TSearchData.SearchKeyword(const AKeyword: string);
  103. var
  104. iNode: Integer;
  105. vNode: TBillsIDTreeNode;
  106. begin
  107. if AKeyword = '' then Exit;
  108. cdsSearch.DisableControls;
  109. try
  110. cdsSearch.EmptyDataSet;
  111. with TProjectData(FProjectData).BillsMeasureData do
  112. begin
  113. for iNode := 0 to BillsMeasureTree.Count - 1 do
  114. begin
  115. vNode := TBillsIDTreeNode(BillsMeasureTree.Items[iNode]);
  116. if (Pos(AKeyword, vNode.Rec.B_Code.AsString) > 0) or
  117. (Pos(AKeyword, vNode.Rec.Name.AsString) > 0) then
  118. AddSearchResult(vNode);
  119. end;
  120. end;
  121. finally
  122. cdsSearch.EnableControls;
  123. end;
  124. end;
  125. procedure TSearchData.SearchOverRange;
  126. var
  127. i: Integer;
  128. vNode: TBillsIDTreeNode;
  129. begin
  130. cdsSearch.DisableControls;
  131. try
  132. cdsSearch.EmptyDataSet;
  133. with TProjectData(FProjectData).BillsMeasureData do
  134. begin
  135. for i := 0 to BillsMeasureTree.Count - 1 do
  136. begin
  137. vNode := TBillsIDTreeNode(BillsMeasureTree.Items[i]);
  138. if not vNode.HasChildren then
  139. if vNode.Rec.Quantity.AsFloat < vNode.Rec.AddDealQuantity.AsFloat then
  140. AddSearchResult(vNode);
  141. end;
  142. end;
  143. finally
  144. cdsSearch.EnableControls;
  145. end;
  146. end;
  147. procedure TSearchData.cdsSearchQuantityGetText(Sender: TField;
  148. var Text: String; DisplayText: Boolean);
  149. begin
  150. if Sender.AsFloat = 0 then
  151. Text := ''
  152. else
  153. Text := Sender.AsString;
  154. end;
  155. procedure TSearchData.SearchBelowRange;
  156. var
  157. i: Integer;
  158. vNode: TBillsIDTreeNode;
  159. begin
  160. cdsSearch.DisableControls;
  161. try
  162. cdsSearch.EmptyDataSet;
  163. with TProjectData(FProjectData).BillsMeasureData do
  164. begin
  165. for i := 0 to BillsMeasureTree.Count - 1 do
  166. begin
  167. vNode := TBillsIDTreeNode(BillsMeasureTree.Items[i]);
  168. if not vNode.HasChildren then
  169. if vNode.Rec.Quantity.AsFloat > vNode.Rec.AddDealQuantity.AsFloat then
  170. AddSearchResult(vNode);
  171. end;
  172. end;
  173. finally
  174. cdsSearch.EnableControls;
  175. end;
  176. end;
  177. end.