| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203 | unit tpPartTender;interfaceuses  Classes, tpPeg, mPegFilter, tpPeg_GclDm, tpGatherGcl, tpPegGclGatherDm;type  // According to the OD Peg  TtpPartTender = class  private    FInPegs: TList;    FTotalPrice: Double;    FRelaPegs: TList;    FRelaTotalPrice: Double;    FBeginPeg: string;    FBeginPegNum: Double;    FEndPeg: string;    FEndPegNum: Double;    FInPegData: TtpPeg_GclData;    FInGclGatherData: TtpPegGclGatherData;    FRelaPegData: TtpPeg_GclData;    procedure ResetPegInfo(APegFilter: TPegFilter); overload;    function GetPegsTotalPrice(APegs: TList): Double;    procedure Calculate;    procedure GatherInGclBills;    procedure ExecuteFilter(APegs: TtpPegList);    function GetInPeg(AIndex: Integer): TtpPegNode;    function GetInPegCount: Integer;    function GetRelaPeg(AIndex: Integer): TtpPegNode;    function GetRelaPegCount: Integer;  public    constructor Create;    destructor Destroy; override;    procedure Clear;    procedure FilterPegs(APegFilter: TPegFilter; APegs: TtpPegList); overload;    procedure FilterPegs(ABeginPegNum, AEndPegNum: Double; APegs: TtpPegList); overload;    property BeginPeg: string read FBeginPeg;    property BeginPegNum: Double read FBeginPegNum;    property EndPeg: string read FEndPeg;    property EndPegNum: Double read FEndPegNum;    property InPegCount: Integer read GetInPegCount;    property InPeg[AIndex: Integer]: TtpPegNode read GetInPeg;    property TotalPrice: Double read FTotalPrice;    property RelaPegCount: Integer read GetRelaPegCount;    property RelaPeg[AIndex: Integer]: TtpPegNode read GetRelaPeg;    property RelaTotalPrice: Double read FRelaTotalPrice;    property InPegData: TtpPeg_GclData read FInPegData;    property InGclGatherData: TtpPegGclGatherData read FInGclGatherData;    property RelaPegData: TtpPeg_GclData read FRelaPegData;  end;implementationuses  ZhAPI, tpGatherTree, UtilMethods;{ TtpPartTender }procedure TtpPartTender.Calculate;begin  FTotalPrice := GetPegsTotalPrice(FInPegs);  FRelaTotalPrice := GetPegsTotalPrice(FRelaPegs);end;procedure TtpPartTender.Clear;begin  FInPegs.Clear;  FRelaPegs.Clear;end;constructor TtpPartTender.Create;begin  FInPegs := TList.Create;  FRelaPegs := TList.Create;  FInPegData := TtpPeg_GclData.Create(nil);  FInGclGatherData :=TtpPegGclGatherData.Create(nil);  FRelaPegData := TtpPeg_GclData.Create(nil);end;destructor TtpPartTender.Destroy;begin  Clear;  FRelaPegData.Free;  FInGclGatherData.Free;  FInPegData.Free;  FRelaPegs.Free;  FInPegs.Free;  inherited;end;procedure TtpPartTender.FilterPegs(APegFilter: TPegFilter; APegs: TtpPegList);begin  ResetPegInfo(APegFilter);  ExecuteFilter(APegs);end;procedure TtpPartTender.ExecuteFilter(APegs: TtpPegList);var  iPeg: Integer;  vPegNode: TtpPegNode;begin  for iPeg := 0 to APegs.Count - 1 do  begin    vPegNode := APegs.Peg[iPeg];    if vPegNode.IsPegIn(FBeginPegNum, FEndPegNum) then      FInPegs.Add(vPegNode)    else if vPegNode.IsPegRela(FBeginPegNum, FEndPegNum) then      FRelaPegs.Add(vPegNode);  end;  Calculate;  FInPegData.LoadData(FInPegs);  FRelaPegData.LoadData(FRelaPegs);  GatherInGclBills;end;procedure TtpPartTender.FilterPegs(ABeginPegNum, AEndPegNum: Double;  APegs: TtpPegList);begin  Clear;  FBeginPegNum := ABeginPegNum;  FBeginPeg := Num2Peg(FBeginPegNum);  FEndPegNum := AEndPegNum;  FEndPeg := Num2Peg(FEndPegNum);  ExecuteFilter(APegs);end;procedure TtpPartTender.GatherInGclBills;var  vGcls: TtpGatherGclList;  iPeg, iGcl: Integer;  vPeg: TtpPegNode;begin  vGcls := TtpGatherGclList.Create;  try    for iPeg := 0 to FInPegs.Count - 1 do    begin      vPeg := TtpPegNode(FInPegs.Items[iPeg]);      for iGcl := 0 to vPeg.RelaGclNodes.Count - 1 do        vGcls.GatherNode(TtpGatherTreeNode(vPeg.RelaGclNodes.Items[iGcl]), vPeg.RelaNode);    end;    FInGclGatherData.LoadGclGatherData(vGcls);  finally    vGcls.Free;  end;end;function TtpPartTender.GetInPeg(AIndex: Integer): TtpPegNode;begin  Result := TtpPegNode(FInPegs.Items[AIndex]);end;function TtpPartTender.GetInPegCount: Integer;begin  Result := FInPegs.Count;end;function TtpPartTender.GetPegsTotalPrice(APegs: TList): Double;var  iPeg: Integer;  vPeg: TtpPegNode;begin  Result := 0;  for iPeg := 0 to APegs.Count - 1 do  begin    vPeg := TtpPegNode(APegs.Items[iPeg]);    Result := Result + vPeg.RelaNode.TotalPrice;  end;end;function TtpPartTender.GetRelaPeg(AIndex: Integer): TtpPegNode;begin  Result := TtpPegNode(FRelaPegs.Items[AIndex]);end;function TtpPartTender.GetRelaPegCount: Integer;begin  Result := FRelaPegs.Count;end;procedure TtpPartTender.ResetPegInfo(APegFilter: TPegFilter);begin  Clear;  FBeginPeg := APegFilter.BeginPeg;  FBeginPegNum := APegFilter.BeginPegNum;  FEndPeg := APegFilter.EndPeg;  FEndPegNum := APegFilter.EndPegNum;end;end.
 |