| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 | unit tpMainData;interfaceuses  Classes, tpBaseGatherData, tpSelectTenderDm, sdIDTree, tpSelectTenderNode,  tpPartTender, tpPartTenderSet;type  TtpMainData = class  private    FHistoryTenders: TList;    FTenders: TList;    // Memory DataSet -- For Display    // Display FTenders    FSelectTenderData: TtpSelectTenderData;    FBaseGatherData: TtpBaseGatherData;    FPartTrial: TtpPartTender;    FPartTenderSet: TtpPartTenderSet;    procedure ClearAllHistoryData;  public    constructor Create;    destructor Destroy; override;    procedure GatherProjects(AProjects: TList);    procedure TrialPeg;    procedure PricePart;    procedure PegPart;    property Tenders: TList read FTenders;                              property SelectTenderData: TtpSelectTenderData read FSelectTenderData;    property BaseGatherData: TtpBaseGatherData read FBaseGatherData;    property PartTrial: TtpPartTender read FPartTrial;    property PartTenderSet: TtpPartTenderSet read FPartTenderSet;  end;implementationuses  ZhAPI, Globals, mPegFilter, tpTrialPegInputFrm, UtilMethods,  Math;{ TtpMainData }procedure TtpMainData.ClearAllHistoryData;begin  FTenders.Clear;  FPartTrial.Clear;end;constructor TtpMainData.Create;begin  FHistoryTenders := TList.Create;  FTenders := TList.Create;  FSelectTenderData := TtpSelectTenderData.Create(nil);  FBaseGatherData := TtpBaseGatherData.Create;  FPartTrial := TtpPartTender.Create;  FPartTenderSet := TtpPartTenderSet.Create;end;destructor TtpMainData.Destroy;begin  FPartTenderSet.Free;  FPartTrial.Free;  FBaseGatherData.Free;  FSelectTenderData.Free;  ClearObjects(FTenders);  FTenders.Free;  FHistoryTenders.Free;  inherited;end;procedure TtpMainData.GatherProjects(AProjects: TList);  function SortTenders(AItem1, AItem2: Pointer): Integer;  begin    Result := TtpSelectTenderNode(AItem1).SerialNo - TtpSelectTenderNode(AItem2).SerialNo;  end;  procedure FilterTenders;  var    i: Integer;    stnNode: TsdIDTreeNode;    vTender: TtpSelectTenderNode;  begin    for i := 0 to AProjects.Count - 1 do    begin      stnNode := ProjectManager.ProjectsTree.FindNode(Integer(AProjects.Items[i]));      if Assigned(stnNode) and (stnNode.Rec.ValueByName('Type').AsInteger = 1) then      begin        vTender := TtpSelectTenderNode.Create(stnNode);        FTenders.Add(vTender);        FTenders.Sort(@SortTenders);      end;    end;  end;  function CheckSameTenders: Boolean;  var    i: Integer;    vOrg, vNew: TtpSelectTenderNode;  begin    if FHistoryTenders.Count = FTenders.Count then    begin      Result := True;      for i := 0 to FHistoryTenders.Count - 1 do      begin        vOrg := TtpSelectTenderNode(FHistoryTenders.Items[i]);        vNew := TtpSelectTenderNode(FTenders.Items[i]);        if vOrg.ID <> vNew.ID then        begin          Result := False;          Break;        end;      end;    end    else      Result := False;  end;begin  ClearAllHistoryData;  FilterTenders;  if not CheckSameTenders then  begin    FBaseGatherData.GatherTenders(FTenders);    FSelectTenderData.AssignSelectTenders(FTenders);    ClearObjects(FHistoryTenders);    FHistoryTenders.Assign(FTenders);  end;end;procedure TtpMainData.PegPart;begin  if FBaseGatherData.Pegs.Count > 0 then    FPartTenderSet.PegPart(FBaseGatherData.Pegs)  else    WarningMessage('无桩号数据,无法划分');end;procedure TtpMainData.PricePart;begin  if FBaseGatherData.Pegs.TotalPrice > 0 then    FPartTenderSet.PricePart(FBaseGatherData.Pegs)  else    WarningMessage('当前可划分的桩号节点金额为0,无法通过金额模式进行划分。');end;procedure TtpMainData.TrialPeg;var  sPeg: string;begin  if InputTrialPeg(sPeg) then  begin    PegFilter.Filter(sPeg);    FPartTrial.FilterPegs(PegFilter, BaseGatherData.Pegs);  end;end;end.
 |