123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358 |
- unit ProjectData;
- interface
- uses
- Connections, BillsDm, PhaseData, UpdateDataBase, ZhAPI, ProjectProperty,
- PhaseCompareDm, DealPaymentDm, SearchDm, DealBillsDm, MainDataListDm,
- BillsGatherDm, BGLDm, StaffDm, BillsCompileDm, BillsMeasureDm,
- BillsBookmarkDm, UpFileManageUnit, ProjectGLDm, PriceMarginBillsDm,
- DetailGLDm, OtherMeasureOnceDm, OtherMeasurePhaseDm, DealPayFinalDm,
- AttachmentInfoDm,
- Classes, SysUtils, ADODB, sdDB, Checker;
- type
- TProjectData = class
- private
- // 临时文件夹,解压项目后存放文件的文件夹
- FTempFolder: string;
- // 项目管理界面看到的项目名称
- FProjectName: string;
- FFileName: string;
- FProjectID: Integer;
- FConnection: TEncryptConnection;
- FUpdator: TUpdateProjectDB;
- FIsNewFile: Boolean;
- FDebugDir: string;
- FBillsData: TBillsData;
- FBillsCompileData: TBillsCompileData;
- FBillsMeasureData: TBillsMeasureData;
- FBillsBookmarkData: TBillsBookmarkData;
- FDealBillsData: TDealBillsData;
- FProjProperties: TProjProperties;
- FPhaseIndex: Integer;
- FPhaseData: TPhaseData;
- FPhaseCompareData: TPhaseCompareData;
- FBillsGatherData: TBillsGatherData;
- FDealPaymentData: TDealPaymentData;
- FBGLData: TBGLData;
- FStaffData: TStaffData;
- FSearchData: TSearchData;
- FMainListData: TMainListData;
- FDealPayFinalData: TDealPayFinalData;
- FProjectGLData: TProjectGLData;
- FDetailGLData: TDetailGLData;
- FPriceMarginBillsData: TPriceMarginBillsData;
- FOtherMeasureOnceData: TOtherMeasureOnceData;
- FOtherMeasurePhaseData: TOtherMeasurePhaseData;
- FAttachmentInfoData: TAttachmentInfoData;
- FCanUnlockInfo: Boolean;
- FWebID: Integer;
- FWebOwnerID: Integer;
- FWebAuthorID: Integer;
- FAuthorHasSubmited: Boolean;
- FProjectReadOnly: Boolean;
- FAttachmentData: TUpFiles;
- FCheckers: TCheckers;
- FIsGuest: Boolean;
- {For Open}
- procedure UpdateProjectDataBase;
- procedure CheckNewFile(AConnection: TADOConnection);
- procedure OpenLastPhaseData;
- procedure UpdateOldData;
- procedure SaveInfoToManager;
- procedure DropCacheTable(const AKey: string);
- // 备份0号台账的历史数据
- procedure CopyLedgerHistoryData(AAudit: Integer);
- // 备份各期的截止本期累计完成数据
- procedure CopyPhaseCompleteData;
- procedure SetPhaseIndexSimple(AIndex: Integer);
- // 锁定数据 -- Sql语句方式(使用时注意相应的DataMoudle应处于关闭状态)
- procedure LockBillsBaseData;
- procedure LockDealPaymentData;
- procedure LockProjectGLData;
- procedure LockDetailGLData;
- procedure UpdatePhaseData;
- procedure CloseAllData;
- procedure OpenAllData;
- procedure CheckCalcBeforeSave;
- procedure InnerSave;
- procedure LoadCheckersData;
- function GetMainFileName: string;
- procedure SetPhaseIndex(const Value: Integer);
- function GetTempPath: string;
- function GetProjectFileName: string;
- function GetAllowInsert: Boolean;
- function GetBaseDataReadOnly: Boolean;
- function GetADOConnection: TADOConnection;
- procedure SetCheckers(const Value: TCheckers);
- function GetStageDataReadOnly: Boolean;
- function GetPriceMarginReadOnly: Boolean;
- function GetStageIndex: Integer;
- procedure SetStageIndex(const Value: Integer);
- function GetCanInsertNormalBills: Boolean;
- function GetValidStageIsRefer: Boolean;
- function GetStartMeasure: Boolean;
- procedure SetIsGuest(const Value: Boolean);
- public
- constructor Create;
- destructor Destroy; override;
- procedure Open(AProjRec: TsdDataRecord);
- procedure Save;
- function SaveAs(const AFileName: string): Boolean;
- procedure SaveAndCheck;
- //----------------------- Begin ---后台打开 ------------------------
- {总说明:
- 为节省内存使用,对不同的后台打开分别写不同的方法
- 按需使用,稍有不同,则新增后台打开方法
- 变更(新增)方法须同步变更(新增)注释
- }
- {OpenForSubmit: ProjProperties, StaffData}
- procedure OpenForSubmit(const AFileName: string);
- procedure SaveAsForSubmit(const AFileName: string);
- {OpenForReply: ProjProperties, StaffData, PhaseData, DetailGLData}
- procedure OpenForReply(const AFileName: string);
- procedure SaveForReply(const AFileName: string);
- {OpenForReceive: ProjProperties, StaffData, PhaseData, StageData}
- procedure OpenForReceive(const AFileName: string);
- procedure SaveForReceive(const AFileName: string);
- {SimpleOpen: 仅打开数据库[项目+最后一期],不打开除属性以外的任何数据表(项目属性都是通过Sql语句修改)}
- procedure SimpleOpen(const AFileName: string);
- procedure SimpleSaveAs(const AFileName: string);
- {OpenForReport: BillsData, BillsCompileData, DealPaymentData, BGLData 报表仅读取数据不做任何修改}
- procedure OpenForReport(const AFileName: string);
- {OpenForReport2: OpenForReport的基础上打开最后一期数据}
- procedure OpenForReport2(const AFileName: string);
- {OpenForReport3: OpenForReport2的基础上打开最后一个审核人数据,打开BillsMeasureTree不打开BillsCompileTree,链接BillsMeasureTree跟StageData}
- procedure OpenForReport3(const AFileName: string);
- {OpenForReport4: BillsData, DealPaymentData, BGLData, 最后一期数据}
- procedure OpenForReport4(const AFileName: string);
- {OpenForGather: BillsData, BillsMeasureTree, DealPaymentData, BGLData, PhaseData(根据PhaseIndex指定打开)}
- procedure OpenForGather(const AFileName: string; APhaseIndex: Integer = -1);
- {OpenForSignOnline: BillsData, BillsMeasureTree, PhaseData(根据PhaseIndex指定打开)}
- procedure OpenForSignOnline(AProjRec: TsdDataRecord; APhaseIndex: Integer = -1);
- {OpenForSumUpBase: BillsData, BillsComplieTree}
- procedure OpenForSumUpBase(const AFileName: string);
- {OpenForSumUpGather: BillsData, BillsMeasureTree, PhaseData(根据PhaseIndex指定打开),直接调用OpenForSignOnline}
- procedure OpenForSumUpGather(const AFileName: string; APhaseIndex: Integer = -1);
- //----------------------- End ---后台打开 ------------------------
- procedure SaveDebugFile(const AFileName: string);
- procedure SaveTempDataBaseFile(const AFileName: string);
- procedure SaveLastestPhaseMainData;
- procedure SaveDealPayFinalData;
- procedure CopyPreData;
- procedure CreateNewPhase;
- {重设所有LookUpDataset连接}
- procedure ResetPhaseDataLink;
- {重设所有DataView小数位数显示}
- procedure ResetFloatDigitView;
- {锁定数据}
- // 上报
- procedure LockedDataForSubmit;
- // 终审批复
- procedure LockedDataForReply;
- {创建审核数据}
- procedure UpdateDataForReceive;
- // 上报文件:
- { 返回值:
- 1. True 文件检验结果正确,生成文件
- 2. False 文件检验结果错误,不生成文件}
- function SubmitProject(const AFileName: string = ''): Boolean;
- // 批复文件: 返回值含义同上报
- function ReplyProject(const AFileName: string = ''): Boolean;
- // json文件:清单
- procedure ExportJson_Bills(const AFileName: string);
- procedure ExportJson_Common(const AFileName: string);
- // 断开所有树的链接
- procedure DisConnectTree;
- // 重新连接所有的树
- procedure ReConnectTree;
- {For Reports: 复制当期的全部数据到项目数据中}
- procedure CopyPhaseData(ASaveBeforeCopy: Boolean = true);
- procedure ClearReportCacheData;
- procedure ClearReportPrepareData;
- procedure ExecuteSql(const ASql: string);
- procedure CalculateAll;
- procedure CalculatePriceMargin;
- function CheckDataBaseInfo(APhaseCount, AAuditStatus: Integer): Boolean;
- procedure ImportCloudTenderFile(const AFileName: string);
- procedure ImportDmfFile(const AFileName: string);
- procedure ImportSubTenderGather(const AFileName: string);
- function CheckPassword: Boolean;
- function CheckPhaseFileComplete: Boolean;
- function CheckLastPhaseFileExist: Boolean;
- procedure AppendProjectLog(const ALog: string);
- function CurUserIsOwner: Boolean;
- function CurUserIsAuthor: Boolean;
- function CurUserIsChecker: Boolean;
- function LastCheckerIsOwner: Boolean;
- function IsHistoryPhase: Boolean;
- property BillsData: TBillsData read FBillsData;
- property BillsCompileData: TBillsCompileData read FBillsCompileData;
- property BillsMeasureData: TBillsMeasureData read FBillsMeasureData;
- property BillsBookmarkData: TBillsBookmarkData read FBillsBookmarkData;
- property DealBillsData: TDealBillsData read FDealBillsData;
- property PhaseIndex: Integer read FPhaseIndex write SetPhaseIndex;
- property StageIndex: Integer read GetStageIndex write SetStageIndex;
- property PhaseData: TPhaseData read FPhaseData;
- property ProjProperties: TProjProperties read FProjProperties;
- property PhaseCompareData: TPhaseCompareData read FPhaseCompareData;
- property BillsGatherData: TBillsGatherData read FBillsGatherData;
- property DealPaymentData: TDealPaymentData read FDealPaymentData;
- property BGLData: TBGLData read FBGLData;
- property StaffData: TStaffData read FStaffData;
- property SearchData: TSearchData read FSearchData;
- property MainListData: TMainListData read FMainListData;
- property AttachmentData: TUpFiles read FAttachmentData; // 附件
- property AttachmentInfoData: TAttachmentInfoData read FAttachmentInfoData;
- property ProjectGLData: TProjectGLData read FProjectGLData;
- property DetailGLData: TDetailGLData read FDetailGLData;
- property PriceMarginBillsData: TPriceMarginBillsData read FPriceMarginBillsData;
- property OtherMeasureOnceData: TOtherMeasureOnceData read FOtherMeasureOnceData;
- property OtherMeasurePhaseData: TOtherMeasurePhaseData read FOtherMeasurePhaseData;
- // 台账、合同支付
- property AllowInsert: Boolean read GetAllowInsert;
- property BaseDataReadOnly: Boolean read GetBaseDataReadOnly;
- property StageDataReadOnly: Boolean read GetStageDataReadOnly;
- property PriceMarginReadOnly: Boolean read GetPriceMarginReadOnly;
- property ValidStageIsRefer: Boolean read GetValidStageIsRefer;
- property StartMeasure: Boolean read GetStartMeasure;
- property CanUnlockInfo: Boolean read FCanUnlockInfo write FCanUnlockInfo;
- property CanInsertNormalBills: Boolean read GetCanInsertNormalBills;
- property ProjectName: string read FProjectName;
- // 磁盘上存储该项目的文件名称
- property FileName: string read FFileName;
- property ProjectID: Integer read FProjectID;
- property MainFileName: string read GetMainFileName;
- property TempPath: string read GetTempPath;
- property ADOConnection: TADOConnection read GetADOConnection;
- property WebID: Integer read FWebID;
- property WebOwnerID: Integer read FWebOwnerID;
- property WebAuthorID: Integer read FWebAuthorID;
- property AuthorHasSubmited: Boolean read FAuthorHasSubmited write FAuthorHasSubmited;
- property ProjectReadOnly: Boolean read FProjectReadOnly;
- property Checkers: TCheckers read FCheckers write SetCheckers;
- property IsGuest: Boolean read FIsGuest write SetIsGuest;
- end;
- implementation
- uses
- UtilMethods, Globals, ProjectCommands, sdIDTree, StageDm,
- ZJJLDm, PHPWebDm, XMLDoc, XMLIntf, ConstUnit, PasswordInputFrm,
- mProgressProFrm, mDataRecord, ConditionalDefines, DbTreeImport,
- StrUtils, sdProvider, CalcDecimal, Math, CslJson, OrderCheckerFme,
- stgSubGatherFile, Forms, ProgressHintFrm, BillsTree, Controls;
- { TProjectData }
- procedure TProjectData.CheckNewFile(AConnection: TADOConnection);
- var
- FTableList: TStringList;
- begin
- FTableList := TStringList.Create;
- try
- AConnection.GetTableNames(FTableList);
- FIsNewFile := FTableList.Count = 0;
- finally
- FTableList.Free;
- end;
- end;
- procedure TProjectData.CopyLedgerHistoryData(AAudit: Integer);
- const
- sSql = 'Select ID as BillsID, Quantity, TotalPrice, QtyFlag, QtyFormula ' +
- 'Into LedgerHistory%d '+
- 'From Bills';
- begin
- ExecuteSql(Format(sSql, [AAudit]));
- end;
- constructor TProjectData.Create;
- begin
- FCheckers := TCheckers.Create;
- FTempFolder := GenerateTempFolder(GetTempFilePath);
- FConnection := TEncryptConnection.Create;
- FUpdator := TUpdateProjectDB.Create;
- FProjProperties := TProjProperties.Create(Self);
- FBillsData := TBillsData.Create(Self);
- FBillsCompileData := TBillsCompileData.Create(Self);
- FBillsMeasureData := TBillsMeasureData.Create(Self);
- FBillsBookmarkData := TBillsBookmarkData.Create(Self);
- FDealBillsData := TDealBillsData.Create(Self);
- FPhaseData := TPhaseData.Create(Self);
- FPhaseCompareData := TPhaseCompareData.Create(Self);
- FBillsGatherData := TBillsGatherData.Create(Self);
- FDealPaymentData := TDealPaymentData.Create(Self);
- FBGLData := TBGLData.Create(Self);
- FStaffData := TStaffData.Create(Self);
- FSearchData := TSearchData.Create(Self);
- FMainListData := TMainListData.Create(Self);
- FDealPayFinalData := TDealPayFinalData.Create(Self);
- FProjectGLData := TProjectGLData.Create(Self);
- FDetailGLData := TDetailGLData.Create(Self);
- FPriceMarginBillsData := TPriceMarginBillsData.Create(Self);
- FOtherMeasureOnceData := TOtherMeasureOnceData.Create(Self);
- FOtherMeasurePhaseData := TOtherMeasurePhaseData.Create(Self);
- FAttachmentData := TUpFiles.Create;
- FAttachmentInfoData := TAttachmentInfoData.Create(Self);
- FPhaseIndex := 0;
- end;
- procedure TProjectData.CreateNewPhase;
- var
- sPhaseFileName: string;
- begin
- FProjProperties.PriceDigitMin := FProjProperties.PriceDigit;
- FProjProperties.Save;
- FBillsData.LockedBaseData;
- FProjProperties.PhaseCount := FProjProperties.PhaseCount + 1;
- FProjProperties.AuditStatus := 0;
- FStaffData.UpdateDataForNewPhase;
- sPhaseFileName := Format('%s\Phase%d.dat', [TempPath, FProjProperties.PhaseCount]);
- CopyFileOrFolder(GetEmptyDataBaseFileName, sPhaseFileName);
- end;
- destructor TProjectData.Destroy;
- begin
- try
- FCheckers.Free;
- FAttachmentInfoData.Free;
- FOtherMeasurePhaseData.Free;
- FOtherMeasureOnceData.Free;
- FPriceMarginBillsData.Free;
- FDetailGLData.Free;
- FProjectGLData.Free;
- FDealPayFinalData.Free;
- FMainListData.Free;
- FSearchData.Free;
- FStaffData.Free;
- FBGLData.Free;
- FDealPaymentData.Free;
- FPhaseCompareData.Free;
- FPhaseData.Free;
- FProjProperties.Free;
- FDealBillsData.Free;
- FBillsBookmarkData.Free;
- FBillsMeasureData.Free;
- FBillsCompileData.Free;
- FBillsData.Free;
- FAttachmentData.Free;
- FUpdator.Free;
- FConnection.Free;
- finally
- DeleteFileOrFolder(FTempFolder);
- DeleteFileOrFolder(FDebugDir);
- end;
- inherited;
- end;
- function TProjectData.GetBaseDataReadOnly: Boolean;
- begin
- if FProjProperties.PhaseCount = 0 then
- Result := False
- else
- Result := not AllowInsert;
- end;
- function TProjectData.GetAllowInsert: Boolean;
- begin
- if FPhaseData.Active then
- Result := FPhaseData.AllowInsert
- else
- Result := True;
- end;
- function TProjectData.GetMainFileName: string;
- begin
- Result := TempPath + 'Main.dat';
- end;
- function TProjectData.GetProjectFileName: string;
- begin
- Result := GetMyProjectsFilePath + FProjectName;
- end;
- function TProjectData.GetTempPath: string;
- begin
- Result := FTempFolder + '\';
- end;
- procedure TProjectData.LockedDataForReply;
- begin
- LockBillsBaseData;
- LockDealPaymentData;
- LockProjectGLData;
- LockDetailGLData;
- FPhaseData.PhaseProperty.FinalAudit := True;
- // 有顺序限制,谨慎修改
- FProjProperties.AuditCompany := FStaffData.FinalStaffCompany;
- FProjProperties.AuditStatus := -1;
- FProjProperties.FinalAuditCount := FProjProperties.PhaseCount;
- FStaffData.LockedDataForReply;
- end;
- procedure TProjectData.LockedDataForSubmit;
- begin
- LockBillsBaseData;
- LockDealPaymentData;
- FProjProperties.AuditCompany := FStaffData.FinalStaffCompany;
- FStaffData.LockedDataForAudit;
- end;
- procedure TProjectData.Open(AProjRec: TsdDataRecord);
- begin
- {Open规则:在打开Phase或者设置PhaseIndex时,会设置多个LookUpDataset,
- 故要求须在BillsData、DealPayment打开之后}
- FProjectName := AProjRec.ValueByName('Name').AsString;
- FFileName := GetMyProjectsFilePath + AProjRec.ValueByName('FileName').AsString;
- FProjectID := AProjRec.ValueByName('ID').AsInteger;
- FWebID := AProjRec.ValueByName('WebID').AsInteger;
- FWebOwnerID := AProjRec.ValueByName('WebOwnerID').AsInteger;
- FWebAuthorID := AProjRec.ValueByName('WebAuthorID').AsInteger;
- FAttachmentData.ProjectData := Self;
- FAttachmentData.LoadDatas;
- UpdateSysProgress(5, '正在打开项目');
- UnZipFile(FileName, TempPath);
- UpdateSysProgress(10, '正在打开项目');
- FConnection.Open(MainFileName);
- CheckNewFile(FConnection.Connection);
- UpdateSysProgress(15, '正在升级文件');
- UpdateProjectDataBase;
- UpdateSysProgress(20, '正在读取数据');
- FProjProperties.Open(FConnection.Connection);
- if FIsNewFile then
- FProjProperties.UpdateFlag := 1;
- UpdateOldData;
- ResetFloatDigitView;
- FProjProperties.DecimalManager.ResetLinkViewColumns;
- UpdateSysProgress(25, '正在读取数据');
- FBillsData.Open(FConnection.Connection);
- if FIsNewFile then
- FBillsData.InitBills;
- FBillsCompileData.Open;
- FBillsMeasureData.Open;
- UpdateSysProgress(65, '正在读取数据');
- FBillsBookmarkData.Open;
- UpdateSysProgress(70, '正在读取数据');
- FDealBillsData.Open(FConnection.Connection);
- UpdateSysProgress(80, '正在读取数据');
- FDealPaymentData.Open(FConnection.Connection);
- if FIsNewFile then
- FDealPaymentData.Init;
- UpdateSysProgress(90, '正在读取数据');
- OpenLastPhaseData;
- UpdateSysProgress(140, '正在读取数据');
- // 价差数据应在当期数据打开后打开
- FProjectGLData.Open(FConnection.Connection);
- FDetailGLData.Open(FConnection.Connection);
- FBGLData.Open(FConnection.Connection);
- UpdateSysProgress(160, '正在读取数据');
- FStaffData.Open(FConnection.Connection);
- UpdateSysProgress(180, '正在读取数据');
- //FBillsGatherData.RefreshBills;
- FMainListData.Open(FConnection.Connection);
- FDealPayFinalData.Open(FConnection.Connection);
- UpdateSysProgress(190, '正在读取数据');
- FOtherMeasureOnceData.Open(FConnection.Connection);
- FOtherMeasurePhaseData.Open(FConnection.Connection);
- FAttachmentInfoData.Open(FConnection.Connection);
- UpdateSysProgress(200, '就绪');
- if _IsDebugView then
- begin
- FDebugDir := GetAppFilePath + 'Debug\' + FProjectName;
- CreateDirectoryInDeep(FDebugDir);
- end;
- end;
- procedure TProjectData.OpenLastPhaseData;
- begin
- if ProjProperties.PhaseCount = 0 then Exit;
- FPhaseIndex := ProjProperties.PhaseCount;
- FProjProperties.PhaseIndex := FPhaseIndex;
- FPhaseData.Open(Format('%sPhase%d.dat', [TempPath, FPhaseIndex]));
- ResetPhaseDataLink;
- end;
- procedure TProjectData.Save;
- begin
- try
- InnerSave;
- ZipFolder(FTempFolder, FileName);
- SaveInfoToManager;
- except
- ErrorMessage('保存数据出错。请重试,或联系纵横客服:企业QQ:800003850 客服热线:(0756)3850888');
- end;
- end;
- procedure TProjectData.SaveInfoToManager;
- var
- InfoRec, PhaseRec: TsdDataRecord;
- begin
- InfoRec := ProjectManager.sddProjectsInfo.FindKey('idxID', FProjectID);
- PhaseRec := MainListData.GetPhaseMainRecord(ProjProperties.PhaseCount);
- InfoRec.ValueByName('DealTotalPrice').AsFloat := FBillsData.Settlement[DealIndex];
- InfoRec.ValueByName('Deal_BGLTotalPrice').AsFloat := FBillsData.Settlement[DealIndex] + FBGLData.AllBGLTotalPrice;
- InfoRec.ValueByName('PhaseTotalPrice').AsFloat := PhaseRec.ValueByName('GatherTotalPrice').AsFloat;
- InfoRec.ValueByName('EndDealTotalPrice').AsFloat := PhaseRec.ValueByName('EndDealTotalPrice').AsFloat;
- InfoRec.ValueByName('EndChangeTotalPrice').AsFloat :=
- PhaseRec.ValueByName('EndQcTotalPrice').AsFloat + PhaseRec.ValueByName('EndPcTotalPrice').AsFloat;
- InfoRec.ValueByName('EndTotalPrice').AsFloat := PhaseRec.ValueByName('EndGatherTotalPrice').AsFloat;
- InfoRec.ValueByName('PreTotalPrice').AsFloat := PhaseRec.ValueByName('PreGatherTotalPrice').AsFloat;
- InfoRec.ValueByName('PhasePay').AsFloat := PhaseRec.ValueByName('PhasePay').AsFloat;
- InfoRec.ValueByName('PhaseCount').AsInteger := FProjProperties.PhaseCount;
- if (G_IsCloud and CurUserIsOwner and LastCheckerIsOwner) then // 云版的批复始终要显示"批复",不能从属性表读数字显示成3审(如果业主是3审的话)
- InfoRec.ValueByName('AuditStatus').AsInteger := -1
- else
- InfoRec.ValueByName('AuditStatus').AsInteger := FProjProperties.AuditStatus;
- InfoRec.ValueByName('CommonDigit').AsInteger := FProjProperties.DecimalManager.Common.TotalPrice.TrueDigit;
- InfoRec.ValueByName('DealPayDigit').AsInteger := FProjProperties.DecimalManager.DealPay.TotalPrice.TrueDigit;
- ProjectManager.CalculateParentInfo(InfoRec.ValueByName('ParentID').AsInteger);
- ProjectManager.Save;
- end;
- procedure TProjectData.SetPhaseIndex(const Value: Integer);
- function GetPhaseFileName: string;
- begin
- Result := Format('%s\Phase%d.dat', [TempPath, FPhaseIndex]);
- end;
- procedure ReCreatePhaseData(AOrgPhaseIndex: Integer);
- begin
- if (FPhaseData.Active) and (AOrgPhaseIndex = ProjProperties.PhaseCount) then
- FPhaseData.Save;
- FPhaseData.Free;
- FBillsMeasureData.FreeTreeNodeStageRec;
- FPhaseData := TPhaseData.Create(Self);
- end;
- var
- iOrgPhaseIndex: Integer;
- begin
- SaveLastestPhaseMainData;
- SaveDealPayFinalData;
- FProjectGLData.Save;
- FOtherMeasurePhaseData.Save;
- iOrgPhaseIndex := FPhaseIndex;
- FPhaseIndex := Value;
- ProjProperties.PhaseIndex := FPhaseIndex;
- ReCreatePhaseData(iOrgPhaseIndex);
- FPhaseData.Open(GetPhaseFileName);
- ResetPhaseDataLink;
- // 须保存项目工料数据,重新加载当期的项目工料数据
- FProjectGLData.LoadCurPhaseInfoPrice;
- FProjectGLData.LoadStagePM_CalcData;
- FProjectGLData.RefreshGatherData;
- // 须保存其他台账--分期计量数据
- FOtherMeasurePhaseData.LoadCurStageData;
- //BillsGatherData.RefreshBills;
- end;
- procedure TProjectData.SetPhaseIndexSimple(AIndex: Integer);
- begin
- FPhaseIndex := AIndex;
- if FPhaseData.Active then
- FPhaseData.SimpleSave;
- FPhaseData.Free;
- FPhaseData := TPhaseData.Create(Self);
- FPhaseData.SimpleOpen(Format('%s\Phase%d.dat', [TempPath, FPhaseIndex]));
- end;
- procedure TProjectData.UpdateProjectDataBase;
- const
- sHint = '标段文件(%s)高于当前软件支持:' + #13#10 +
- '专业版:请升级软件;' + #13#10 +
- '云版:请联系纵横客服,确认是否可升级软件。';
- begin
- if TEncryptConnection(FConnection).OverExe then
- WarningMessage(Format(sHint, [TEncryptConnection(FConnection).CurFileVersion]));
- FUpdator.Update(FConnection);
- end;
- procedure TProjectData.ResetPhaseDataLink;
- begin
- BillsMeasureData.ResetPhaseStageLink;
- BillsMeasureData.ResetTreeNodeStageRec;
- DealPaymentData.ResetPhaseLink;
- BillsBookmarkData.ResetPhaseStageLink;
- end;
- procedure TProjectData.SimpleOpen(const AFileName: string);
- begin
- FProjectID := -1;
- UnZipFile(AFileName, TempPath);
- FConnection.Open(MainFileName);
- UpdateProjectDataBase;
- FProjProperties.Open(FConnection.Connection);
- if ProjProperties.PhaseCount > 0 then
- begin
- FPhaseIndex := ProjProperties.PhaseCount;
- FPhaseData.SimpleOpen(Format('%sPhase%d.dat', [TempPath, FPhaseIndex]));
- end;
- end;
- procedure TProjectData.SimpleSaveAs(const AFileName: string);
- begin
- if FPhaseData.Active then
- FPhaseData.SimpleSave;
- FProjProperties.Save;
- FConnection.Save;
- ZipFolder(FTempFolder, AFileName);
- end;
- procedure TProjectData.UpdateDataForReceive;
- begin
- UpdatePhaseData;
- end;
- procedure TProjectData.UpdatePhaseData;
- function GetUpdateGLPriceSql(AAuditStatus, APhaseCount: Integer): string;
- const
- vFields: array [0..5] of String = ('PM_Quantity', 'PM_TotalPrice', 'PAL_UsedQuantity', 'PAL_UsedTotalPrice', 'PAL_DeltaPrice', 'PAL_Total');
- sUpdateSql = 'Update GLPrice Set %s Where PhaseID = %d';
- {sUpdateSql = 'Update GLPrice Set PM_Quantity%d = PM_Quantity%d, PM_TotalPrice%d = PM_TotalPrice%d,'+
- ' PAL_UsedQuantity%d = PAL_UsedQuantity%d, PAL_UsedTotalPrice%d = PAL_UsedTotalPrice%d,'+
- ' PAL_DeltaPrice%d = PAL_DeltaPrice%d, PAL_Total%d = PAL_Total%d'+
- ' Where PhaseID = %d';}
- var
- sField: string;
- i: Integer;
- begin
- sField := '';
- for i := Low(vFields) to High(vFields) do
- begin
- if i = High(vFields) then
- sField := sField + Format('%s%d = %s%d', [vFields[i], AAuditStatus, vFields[i], AAuditStatus-1])
- else
- sField := sField + Format('%s%d = %s%d, ', [vFields[i], AAuditStatus, vFields[i], AAuditStatus-1])
- end;
- Result := Format(sUpdateSql, [sField, APhaseCount]);
- end;
- procedure UpdateGLPriceData;
- var
- sSql: string;
- begin
- if (ProjProperties.PhaseCount < 1) or (ProjProperties.AuditStatus < 1) then Exit;
- sSql := GetUpdateGLPriceSql(ProjProperties.AuditStatus, ProjProperties.PhaseCount);
- ExecuteSql(sSql);
- end;
- procedure UpdateOMPhaseDetailData;
- const
- sUpdateSql = 'Insert Into OMPhaseDetail (ID, PhaseID, StageID,' +
- ' PreTotalPrice, CurTotalPrice, EndTotalPrice)' +
- ' Select ID, %d, %d, PreTotalPrice, CurTotalPrice, EndTotalPrice' +
- ' From OMPhaseDetail Where (PhaseID = %d) and (StageID = -1)';
- begin
- if (ProjProperties.PhaseCount > 0) and (ProjProperties.AuditStatus > 0) then
- ExecuteSql(Format(sUpdateSql, [FPhaseIndex, FProjProperties.AuditStatus, FPhaseIndex]));
- end;
- var
- iPhase: Integer;
- begin
- FProjProperties.AuditStatus := FProjProperties.AuditStatus + 1;
- for iPhase := FProjProperties.FinalAuditCount + 1 to FProjProperties.PhaseCount do
- begin
- SetPhaseIndexSimple(iPhase);
- PhaseData.CreateNewAuditData;
- StaffData.UpdateDataForNewAudit;
- UpdateGLPriceData;
- UpdateOMPhaseDetailData;
- end;
- end;
- function TProjectData.ReplyProject(const AFileName: string = ''): Boolean;
- var
- Replyor: TReplyProject;
- begin
- Replyor := TReplyProject.Create(FProjectName, FFileName, FProjectID);
- try
- if AFileName = '' then
- Result := Replyor.Execute
- else
- Result := Replyor.ExportTo(AFileName);
- finally
- Replyor.Free;
- end;
- end;
- function TProjectData.SubmitProject(const AFileName: string = ''): Boolean;
- var
- Submitor :TSubmitProject;
- begin
- Submitor := TSubmitProject.Create(FProjectName, FFileName, FProjectID);
- try
- if AFileName = '' then
- Result := Submitor.Execute
- else
- Result := Submitor.ExportTo(AFileName);
- finally
- Submitor.Free;
- end;
- end;
- procedure TProjectData.ExportJson_Bills(const AFileName: string);
- function GetProjectName: string;
- var
- vNode: tsdIDTreeNode;
- begin
- vNode := ProjectManager.ProjectsTree.FindNode(FProjectID).Parent;
- Result := vNode.Rec.ValueByName('Name').AsString;
- end;
- // lkJSON 暂时未找到添加数组结构的办法,官方也没有提供相关的Demo,自己合成。
- // lkJSON 合成的长文本自动带有大量“\”转义字符,这点有些烦人。
- // 其实这么折腾,还不如自己直接合成。那为什么还要用它?自己写是很容易,但是
- // 要自己读JSON,那写起来就很麻烦了。
- function BillsStr: string;
- var vRec: TsdDataRecord;
- i: Integer;
- sSplit: string;
- function v(AFieldName: string): string;
- begin
- Result := vRec.ValueByName(AFieldName).AsString;
- end;
- // 杰哥那头不识别中文,将中文转成URL编码形式
- function URLEncode(const S: string; const InQueryString: Boolean): string;
- var
- Idx: Integer;
- begin
- Result := '';
- for Idx := 1 to Length(S) do
- begin
- case S[Idx] of
- 'A'..'Z', 'a'..'z', '0'..'9', '-', '_', '.':
- Result := Result + S[Idx];
- ' ':
- if InQueryString then
- Result := Result + '+'
- else
- Result := Result + '%20';
- else
- Result := Result + '%' + SysUtils.IntToHex(Ord(S[Idx]), 2);
- end;
- end;
- end;
- begin
- for i := 0 to BillsMeasureData.BillsMeasureTree.Count - 1 do
- begin
- vRec := BillsMeasureData.BillsMeasureTree.Items[i].Rec;
- if (i mod 100) = 0 then
- ProgressProRun('生成汇总数据... ' + IntToStr(i), 0, pmtEdit, pptSet);
- if i = 0 then
- sSplit := ''
- else
- sSplit := ',';
- Result := Result + sSplit + Format('{"Code":"%s","B_Code":"%s","Name":"%s",' +
- '"Units":"%s","Price":"%s","Quantity":"%s","TotalPrice":"%s"}',
- [v('Code'), v('B_Code'), v('Name'), v('Units'), v('Price'),
- v('Quantity'), v('TotalPrice')]);
- end;
- end;
- var
- fPhasePay: Double;
- vSL: TStringList;
- begin
- vSL := TStringList.Create;
- try
- vSL.Text := Format('{"DealTotalPrice":"%s","Bills":[%s]}',
- [FloatToStr(FBillsData.Settlement[DealIndex]), AnsiToUtf8(BillsStr)]);
- vSL.SaveToFile(AFileName);
- finally
- vSL.Free;
- end;
- end;
- procedure TProjectData.DisConnectTree;
- begin
- BillsMeasureData.BillsMeasureTree.Active := False;
- BillsCompileData.BillsCompileTree.Active := False;
- end;
- procedure TProjectData.ReConnectTree;
- begin
- BillsCompileData.ReConnectTree;
- BillsMeasureData.ReConnectTree;
- end;
- procedure TProjectData.CopyPhaseCompleteData;
- const
- sInsertSql = 'Insert Into PhaseComplete (BillsID)' +
- ' Select ID' +
- ' From Bills where Bills.CreatePhaseID = %d';
- sUpdateSql = 'Update PhaseComplete Inner Join [Bills]' +
- ' On PhaseComplete.BillsID=Bills.ID' +
- ' Set PhaseComplete.Quantity%d=Bills.AddGatherQuantity,' +
- ' PhaseComplete.TotalPrice%d=Bills.AddGatherTotalPrice';
- var
- iPhase: Integer;
- sSql: string;
- begin
- for iPhase := FProjProperties.FinalAuditCount + 1 to FProjProperties.PhaseCount do
- begin
- SetPhaseIndexSimple(iPhase);
- // 插入本期新增的数据
- sSql := Format(sInsertSql, [iPhase]);
- ExecuteSql(sSql);
- // 更新所有截止本期完成计量数据
- sSql := Format(sInsertSql, [iPhase, iPhase]);
- ExecuteSql(sSql);
- end;
- end;
- procedure TProjectData.CopyPhaseData;
- procedure CopyStageData(const AFileName, ASourceTable, AResultTable: string);
- const
- sCopySql = 'Select BillsID, DealQuantity, DealTotalPrice, QcQuantity, QcTotalPrice, QcBGLCode, QcBGLNum,' +
- ' PcQuantity, PcTotalPrice, PcBGLCode, PcBGLNum, GatherQuantity, GatherTotalPrice,' +
- ' EndDealQuantity, EndDealTotalPrice, EndQcQuantity, EndQcTotalPrice,' +
- ' EndPcQuantity, EndPcTotalPrice, EndGatherQuantity, EndGatherTotalPrice,' +
- ' PreDealQuantity, PreDealTotalPrice, PreQcQuantity, PreQcTotalPrice,' +
- ' PrePcQuantity, PrePcTotalPrice, PreGatherQuantity, PreGatherTotalPrice' +
- ' Into %s' +
- ' From %s' +
- ' In ''%s''';
- var
- sSql: string;
- begin
- sSql := Format(sCopySql, [AResultTable, ASourceTable, AFileName]);
- ExecuteSql(sSql);
- end;
- procedure CopyEmptyStageData(const AFileName, ASourceTable, AResultTable: string);
- const
- sCopySql = 'Select BillsID, DealQuantity, DealTotalPrice, QcQuantity, QcTotalPrice, QcBGLCode, QcBGLNum,' +
- ' PcQuantity, PcTotalPrice, PcBGLCode, PcBGLNum, GatherQuantity, GatherTotalPrice,' +
- ' EndDealQuantity, EndDealTotalPrice, EndQcQuantity, EndQcTotalPrice,' +
- ' EndPcQuantity, EndPcTotalPrice, EndGatherQuantity, EndGatherTotalPrice,' +
- ' PreDealQuantity, PreDealTotalPrice, PreQcQuantity, PreQcTotalPrice,' +
- ' PrePcQuantity, PrePcTotalPrice, PreGatherQuantity, PreGatherTotalPrice' +
- ' Into %s' +
- ' From %s' +
- ' In ''%s''' +
- ' Where 1=2';
- var
- sSql: string;
- begin
- sSql := Format(sCopySql, [AResultTable, ASourceTable, AFileName]);
- ExecuteSql(sSql);
- end;
- procedure AddSettlementData;
- const
- sAddSql = 'Insert Into P_Stage (BillsID,' +
- ' DealTotalPrice, QcTotalPrice, PcTotalPrice, GatherTotalPrice,' +
- ' EndDealTotalPrice, EndQcTotalPrice, EndPcTotalPrice, EndGatherTotalPrice,' +
- ' PreDealTotalPrice, PreQcTotalPrice, PrePcTotalPrice, PreGatherTotalPrice)' +
- ' Values (-2,'+
- ' %f, %f, %f, %f,'+
- ' %f, %f, %f, %f,'+
- ' %f, %f, %f, %f)';
- var
- sSql: string;
- begin
- with PhaseData.StageData do
- sSql := Format(sAddSql,
- [StageSettlement[1,1], StageSettlement[1,2], StageSettlement[1,3], StageSettlement[1,4],
- StageSettlement[2,1], StageSettlement[2,2], StageSettlement[2,3], StageSettlement[2,4],
- StageSettlement[3,1], StageSettlement[3,2], StageSettlement[3,3], StageSettlement[3,4]]);
- ExecuteSql(sSql);
- end;
- procedure CopyZJJLBillsData;
- var
- sSql: string;
- begin
- sSql := 'Select PZ.ID, B.B_Code, B.Name, B.Units, B.Price, PS.GatherQuantity As Quantity, PS.GatherTotalPrice As TotalPrice' +
- ' Into P_ZJJLBills'+
- ' From Bills As B, P_Stage As PS, P_ZJJL As PZ' +
- ' Where (PZ.BillsID = B.LeafXmjParentID) And (B.ID = PS.BillsID) And (B.IsLeaf=True)';
- ExecuteSql(sSql);
- sSql := 'Select PZD.ID, PZD.BillsID, B.Quantity As Quantity, B.TotalPrice As TotalPrice,' +
- ' PS.DealQuantity As DealQuantity, PS.DealTotalPrice As DealTotalPrice,' +
- ' PS.QcQuantity As QcQuantity, PS.QcTotalPrice As QcTotalPrice,' +
- ' PS.GatherQuantity As GatherQuantity, PS.GatherTotalPrice As GatherTotalPrice,' +
- ' PS.PreDealQuantity As PreDealQuantity, PS.PreDealTotalPrice As PreDealTotalPrice,' +
- ' PS.PreQcQuantity As PreQcQuantity, PS.PreQcTotalPrice As PreQcTotalPrice,' +
- ' PS.PreGatherQuantity As PreGatherQuantity, PS.PreGatherTotalPrice As PreGatherTotalPrice,' +
- ' PS.EndDealQuantity As EndDealQuantity, PS.EndDealTotalPrice As EndDealTotalPrice,' +
- ' PS.EndQcQuantity As EndQcQuantity, PS.EndQcTotalPrice As EndQcTotalPrice,' +
- ' PS.EndGatherQuantity As EndGatherQuantity, PS.EndGatherTotalPrice As EndGatherTotalPrice' +
- ' Into P_ZJJL_DetailBills' +
- ' From Bills As B, P_Stage As PS, P_ZJJL_Detail As PZD' +
- ' Where (PZD.BillsID = PS.BillsID) And (B.ID = PZD.BillsID)';
- ExecuteSql(sSql);
- end;
- procedure CopyZJJLData(const AFileName: string);
- var
- sSql: string;
- begin
- sSql := 'Select ID, BillsID, GatherBillsID, Code, CertificateCode, BillsCode, FormulaMemo, RelaFile,' +
- ' BGLCode, PegName, FBFXName, BeginPeg, EndPeg, UnitName, DrawingCode' +
- ' Into P_ZJJL' +
- ' From ' + PhaseData.ZJJLData.sdpZJJL.TableName +
- ' In ' + Format('''%s''', [AFileName]);
- ExecuteSql(sSql);
- sSql := 'Select ID, BillsID' +
- ' Into P_ZJJL_Detail' +
- ' From ' + PhaseData.ZJJLData.sdpZJJLDetail.TableName +
- ' In ' + Format('''%s''', [AFileName]);
- ExecuteSql(sSql);
- CopyZJJLBillsData;
- end;
- procedure CopyPhasePayData(const AFileName: string);
- const
- sCopySql = 'Select ID, TotalPrice%d As CurTotalPrice, EndTotalPrice%d As EndTotalPrice,' +
- ' PreTotalPrice%d As PreTotalPrice,' +
- ' TotalPrice0, EndTotalPrice0, PreTotalPrice0,' +
- ' TotalPrice1, EndTotalPrice1, PreTotalPrice1,' +
- ' TotalPrice2, EndTotalPrice2, PreTotalPrice2,' +
- ' TotalPrice3, EndTotalPrice3, PreTotalPrice3,' +
- ' TotalPrice4, EndTotalPrice4, PreTotalPrice4,' +
- ' TotalPrice5, EndTotalPrice5, PreTotalPrice5,' +
- ' TotalPrice6, EndTotalPrice6, PreTotalPrice6,' +
- ' TotalPrice7, EndTotalPrice7, PreTotalPrice7,' +
- ' TotalPrice8, EndTotalPrice8, PreTotalPrice8,' +
- ' TotalPrice9, EndTotalPrice9, PreTotalPrice9,' +
- ' TotalPrice10, EndTotalPrice10, PreTotalPrice10,' +
- ' TotalPrice11, EndTotalPrice11, PreTotalPrice11,' +
- ' TotalPrice12, EndTotalPrice12, PreTotalPrice12,' +
- ' TotalPrice13, EndTotalPrice13, PreTotalPrice13,' +
- ' TotalPrice14, EndTotalPrice14, PreTotalPrice14,' +
- ' TotalPrice%d As TotalPrice_F, EndTotalPrice%d As EndTotalPrice_F, PreTotalPrice%d As PreTotalPrice_F' +
- ' Into P_PhasePay' +
- ' From PhasePay' +
- ' In ''%s''';
- var
- sSql: string;
- begin
- with PhaseData do
- sSql := Format(sCopySql, [StageIndex, StageIndex, StageIndex, StageCount - 1, StageCount - 1, StageCount - 1, AFileName]);
- ExecuteSql(sSql);
- end;
- procedure CopyReportData(const AFileName: string);
- const
- sCopySql = 'Select Flag, SubFlag, SerialNo, Select1, Result1, Result2' +
- ' Into P_ReportData' +
- ' From ReportData' +
- ' In ''%s''';
- begin
- ExecuteSql(Format(sCopySql, [AFileName]));
- end;
- procedure CopyCurPhaseData;
- var
- sTempFile: string;
- i: Integer;
- begin
- sTempFile := GetTempFileName;
- try
- FPhaseData.SaveDebugFile(sTempFile);
- // 复制当前阶段数据
- CopyStageData(sTempFile, PhaseData.StageData.sdpStage.TableName, 'P_Stage');
- // 复制原报、审核、批复数据
- // 其中审核、批复数据,如果存在则复制,如果不存在,则创建空表
- CopyStageData(sTempFile, 'Refer', 'P_Refer');
- for i := 1 to iMaxStageCount - 1 do
- if PhaseData.AuditCount >= i then
- CopyStageData(sTempFile, PhaseData.StageTableName[i],
- 'P_Audit' + IntToStr(i))
- else
- CopyEmptyStageData(sTempFile, PhaseData.StageTableName[PhaseData.AuditCount],
- 'P_Audit' + IntToStr(i));
- if PhaseData.StageCount > 1 then
- CopyStageData(sTempFile, PhaseData.StageTableName[PhaseData.AuditCount], 'P_Reply')
- else
- CopyEmptyStageData(sTempFile, PhaseData.StageTableName[PhaseData.AuditCount], 'P_Reply');
- AddSettlementData;
- CopyZJJLData(sTempFile);
- CopyPhasePayData(sTempFile);
- CopyReportData(sTempFile);
- finally
- DeleteFile(sTempFile);
- end;
- end;
- procedure CopyHistoryCompleteData;
- const
- sCopySql1 = 'Select BillsID, 0 As Quantity1, 0 As TotalPrice1,' +
- ' Quantity%d As Quantity2, TotalPrice%d As TotalPrice2' +
- ' Into P_Complete' +
- ' From PhaseComplete';
- sCopySqlN = 'Select BillsID, Quantity%d As Quantity1, TotalPrice%d As TotalPrice1,' +
- ' Quantity%d As Quantity2, TotalPrice%d As TotalPrice2' +
- ' Into P_Complete' +
- ' From PhaseComplete';
- sUnionCopySql1 = 'Select BillsID, 0 As Quantity1, 0 As TotalPrice1,' +
- ' GatherQuantity As Quantity2, GatherTotalPrice As TotalPrice2' +
- ' Into P_Complete' +
- ' From P_Stage';
- sUnionCopySqlN = 'Select PS.BillsID As BillsID,' +
- ' PC.Quantity%d As Quantity1,' +
- ' PC.TotalPrice%d As TotalPrice1,' +
- ' PC.Quantity%d + PS.GatherQuantity As Quantity2,' +
- ' PC.TotalPrice%d + PS.GatherTotalPrice As TotalPrice2' +
- ' Into P_Complete' +
- ' From PhaseComplete As PC, P_Stage As PS';
- var
- sSql: string;
- begin
- if (ProjProperties.FinalAuditCount >= PhaseIndex) then
- if PhaseIndex <= 1 then
- sSql := Format(sCopySql1, [FPhaseIndex, FPhaseIndex])
- else
- sSql := Format(sCopySqlN, [PhaseIndex - 1, PhaseIndex - 1, PhaseIndex, PhaseIndex])
- else
- if PhaseIndex <= 1 then
- sSql := sUnionCopySql1
- else
- sSql := Format(sUnionCopySqlN, [PhaseIndex - 1, PhaseIndex - 1, PhaseIndex - 1, PhaseIndex - 1]);
- ExecuteSql(sSql);
- end;
- procedure UpdateBillsByDealBills;
- const
- sClearSql = 'Update Bills Set GclDealQuantity = 0, GclDealTotalPrice = 0';
- sUpdateSql = 'Update Bills As B, DealBills As D' +
- ' Set B.GclDealQuantity = D.Quantity, B.GclDealTotalPrice = D.TotalPrice' +
- ' Where (B.B_Code = D.B_Code) and (B.Name = D.Name) and (B.Units = D.Units) and (B.Price = D.Price)';
- begin
- ExecuteSql(sClearSql);
- ExecuteSql(sUpdateSql);
- end;
- procedure FilterDealBillsByBills;
- const
- sFilterSql = 'Select D.*' +
- ' Into P_FilterDealBills' +
- ' From DealBills As D inner join' +
- ' (Select D.ID' +
- ' From DealBills As D Left join Bills As B' +
- ' On (D.B_Code = B.B_Code) and (D.Name = B.Name) and (D.Units = B.Units) and (D.Price = B.Price)' +
- ' where B.ID is Null) As R' +
- ' On (D.ID = R.ID)';
- begin
- ExecuteSql(sFilterSql);
- end;
- procedure CopyCacheReportsData;
- begin
- // DealBills的数量金额填至Bills中
- UpdateBillsByDealBills;
- // 过滤DealBills中在Bills中不存在的清单
- FilterDealBillsByBills;
- end;
- procedure SaveCurPhaseCheckers;
- const
- sCreateSql = 'Create Table P_Checkers (CheckerNo Integer NOT NULL, Name Text(50), Role Text(50), MemoStr Memo, CheckedDateTime Text(20), Flag Integer,'+
- ' CONSTRAINT PrimaryKey PRIMARY KEY (CheckerNo, Flag))';
- sInsertSql = 'Insert Into P_Checkers (CheckerNo, Name, Role, MemoStr, CheckedDateTime, Flag) Values (%d, ''%s'', ''%s'', ''%s'', ''%s'', %d)';
- var
- i: Integer;
- vChecker: TChecker;
- sSql: string;
- begin
- ExecuteSql(sCreateSql);
- // 全部审核人
- for i := 0 to Checkers.Count - 1 do
- begin
- vChecker := Checkers.Item[i];
- //TipMessage(vChecker.Memo + #13#10 + IntToStr(length(vChecker.Memo)));
- sSql := Format(sInsertSql, [vChecker.No, vChecker.Name, vChecker.Role, vChecker.Memo, vChecker.CheckedDateTime, 0]);
- ExecuteSql(sSql);
- end;
- // 审核通过的最后一人
- vChecker := Checkers.LastChecker;
- if Assigned(vChecker) then
- sSql := Format(sInsertSql, [vChecker.No, vChecker.Name, vChecker.Role, vChecker.Memo, vChecker.CheckedDateTime, 1])
- else
- sSql := Format(sInsertSql, [-1, '', '', '', '', 1]);
- ExecuteSql(sSql);
- end;
- procedure SaveCloudInfo;
- begin
- SaveCurPhaseCheckers;
- end;
- begin
- AppendProjectLog('Display Reports Prepare');
- if ASaveBeforeCopy then
- InnerSave;
- ClearReportCacheData;
- CopyCacheReportsData;
- if FPhaseIndex > 0 then
- CopyCurPhaseData;
- FDealPaymentData.UpdateLinkSerialNo;
- //CopyHistoryCompleteData;
- if _IsCloud then
- SaveCloudInfo;
- if _IsDebugView then
- begin
- sleep(2000);
- SaveDebugFile('Report.dat');
- end;
- MeasureLog.AppendLogTo('Display Reports Prepare --> Pass');
- end;
- procedure TProjectData.ExecuteSql(const ASql: string);
- var
- FQuery: TADOQuery;
- begin
- FQuery := TADOQuery.Create(nil);
- try
- FQuery.Connection := FConnection.Connection;
- FQuery.SQL.Clear;
- FQuery.SQL.Add(ASql);
- FQuery.ExecSQL;
- finally
- FQuery.Free;
- end;
- end;
- function TProjectData.GetADOConnection: TADOConnection;
- begin
- Result := FConnection.Connection;
- end;
- procedure TProjectData.ExportJson_Common(const AFileName: string);
- var
- Rec: TsdDataRecord;
- vSL: TStringList;
- sBQHTJL, sBQSLBGJL, sJZSQLJWC, sBQWCJL, sLJWCJL, sTotalPrice: string;
- begin
- vSL := TStringList.Create;
- try
- Rec := MainListData.GetPhaseMainRecord(ProjProperties.PhaseCount);
- sBQHTJL := FloatToStr(Rec.ValueByName('DealTotalPrice').AsFloat); // 本期合同计量
- sBQSLBGJL := FloatToStr(Rec.ValueByName('QcTotalPrice').AsFloat); // 本期数量变更计量
- sJZSQLJWC := FloatToStr(Rec.ValueByName('PreGatherTotalPrice').AsFloat); // 截止上期累计完成
- sBQWCJL := FloatToStr(Rec.ValueByName('GatherTotalPrice').AsFloat); // 本期完成计量
- sLJWCJL := FloatToStr(Rec.ValueByName('EndGatherTotalPrice').AsFloat); // 累计完成计量
- sTotalPrice := FloatToStr(BillsData.Settlement[0] + Rec.ValueByName('EndQcTotalPrice').AsFloat); // 0号台帐+截止本期累期变更计量
- vSL.Text := Format('{"BQHTJL":"%s","BQSLBGJL":"%s","JZSQLJWC":"%s","BQWCJL":"%s","LJWCJL":"%s","TotalPrice":"%s"}',
- [sBQHTJL, sBQSLBGJL, sJZSQLJWC, sBQWCJL, sLJWCJL, sTotalPrice]);
- vSL.SaveToFile(AFileName);
- finally
- vSL.Free;
- end;
- end;
- function TProjectData.CurUserIsAuthor: Boolean;
- begin
- Result := PHPWeb.UserID = WebAuthorID;
- end;
- function TProjectData.CurUserIsChecker: Boolean;
- begin
- Result := (PHPWeb.UserID <> WebOwnerID) and (PHPWeb.UserID <> WebAuthorID);
- end;
- function TProjectData.CurUserIsOwner: Boolean;
- begin
- Result := PHPWeb.UserID = WebOwnerID;
- end;
- procedure TProjectData.SaveLastestPhaseMainData;
- var
- Rec: TsdDataRecord;
- begin
- if (FPhaseIndex = ProjProperties.PhaseCount) and PhaseData.IsLastStage then
- begin
- Rec := MainListData.GetPhaseMainRecord(FPhaseIndex);
- Rec.ValueByName('DealTotalPrice').AsFloat := PhaseData.StageData.StageSettlement[1, 1];
- Rec.ValueByName('QcTotalPrice').AsFloat := PhaseData.StageData.StageSettlement[1, 2];
- Rec.ValueByName('PcTotalPrice').AsFloat := PhaseData.StageData.StageSettlement[1, 3];
- Rec.ValueByName('GatherTotalPrice').AsFloat := PhaseData.StageData.StageSettlement[1, 4];
- Rec.ValueByName('EndDealTotalPrice').AsFloat := PhaseData.StageData.StageSettlement[2, 1];
- Rec.ValueByName('EndQcTotalPrice').AsFloat := PhaseData.StageData.StageSettlement[2, 2];
- Rec.ValueByName('EndPcTotalPrice').AsFloat := PhaseData.StageData.StageSettlement[2, 3];
- Rec.ValueByName('EndGatherTotalPrice').AsFloat := PhaseData.StageData.StageSettlement[2, 4];
- Rec.ValueByName('PreDealTotalPrice').AsFloat := PhaseData.StageData.StageSettlement[3, 1];
- Rec.ValueByName('PreQcTotalPrice').AsFloat := PhaseData.StageData.StageSettlement[3, 2];
- Rec.ValueByName('PrePcTotalPrice').AsFloat := PhaseData.StageData.StageSettlement[3, 3];
- Rec.ValueByName('PreGatherTotalPrice').AsFloat := PhaseData.StageData.StageSettlement[3, 4];
- Rec.ValueByName('PhasePay').AsFloat := PhaseData.PhasePayData.LastestPhasePay[1];
- Rec.ValueByName('EndPhasePay').AsFloat := PhaseData.PhasePayData.LastestPhasePay[2];
- Rec.ValueByName('PrePhasePay').AsFloat := PhaseData.PhasePayData.LastestPhasePay[3];
- Rec.ValueByName('JCTZ').AsFloat := PhaseData.StageData.PriceMargin[1, 4];
- Rec.ValueByName('EndJCTZ').AsFloat := PhaseData.StageData.PriceMargin[2, 4];
- Rec.ValueByName('PreJCTZ').AsFloat := PhaseData.StageData.PriceMargin[3, 4];
- end;
- end;
- procedure TProjectData.CalculateAll;
- begin
- FBillsCompileData.CalculateAll; //台账
- FProjectGLData.CalculateAll; //工料价差
- FPhaseData.StageData.CalculateAll; //计量&清单价差
- FBillsMeasureData.CalculateAll; //累计
- FPhaseData.PhasePayData.CalculateAll; // 合同支付
- FOtherMeasurePhaseData.CalculateAll;
- end;
- procedure TProjectData.ImportCloudTenderFile(const AFileName: string);
- function GetTempFile(const TempDir: string): string;
- var
- FXmlDocument: IXMLDocument;
- XmlNode, InfoXmlNode: IXMLNode;
- ChildNodes: IXMLNodeList;
- begin
- FXmlDocument := TXMLDocument.Create(nil) as IXMLDocument;
- try
- FXmlDocument.LoadFromFile(TempDir + '\Info.xml');
- FXmlDocument.Options := [doNodeAutoCreate,doNodeAutoIndent,doAutoPrefix,doNamespaceDecl];
- XmlNode := FXmlDocument.DocumentElement;
- ChildNodes := XmlNode.ChildNodes;
- InfoXmlNode := ChildNodes.FindNode('ProjectInfo');
- Result := TempDir + '\' + InfoXmlNode.Attributes['FileName'];
- finally
- FXmlDocument := nil;
- end;
- end;
- procedure ClearAllData;
- var
- sSql: string;
- begin
- sSql := 'Delete * From Bills';
- ExecuteSql(sSql);
- sSql := 'Delete * From DealBills';
- ExecuteSql(sSql);
- sSql := 'Delete * From ProjProperties';
- ExecuteSql(sSql);
- sSql := 'Delete * From DealPayment';
- ExecuteSql(sSql);
- end;
- procedure CopyData(const AFileName: string);
- const
- sBillsSql = 'Insert Into Bills (ID, ParentID, NextSiblingID,' +
- ' Code, B_Code, Name, Units, Alias, Price, NewPrice,' +
- ' OrgQuantity, OrgTotalPrice, MisQuantity, MisTotalPrice, OthQuantity, OthTotalPrice,' +
- ' CalcType,' +
- ' DgnQuantity1, DgnQuantity2,'+
- ' Peg, DrawingCode, MemoStr, HasBookMark, MarkMemo, ApprovalCode)'+
- ' Select ID, ParentID, NextSiblingID,'+
- ' Code, B_Code, Name, Units, Alias, Price, NewPrice,' +
- ' OrgQuantity, OrgTotalPrice, MisQuantity, MisTotalPrice, OthQuantity, OthTotalPrice,' +
- ' CalcType,' +
- ' DgnQuantity1, DgnQuantity2,'+
- ' Peg, DrawingCode, MemoStr, HasBookMark, MarkMemo, ApprovalCode'+
- ' From Bills In ''%s''';
- sDealBillsSql = 'Insert Into DealBills Select ID, B_Code, Name, Units, Price, Quantity, TotalPrice'+
- ' From DealBills In ''%s''';
- sDealPaymentSql = 'Insert Into DealPayment (ID, Name, CalcType, IsMinus,'+
- ' Formula, StartedPrice, SFormula, RangePrice, RFormula)'+
- ' Select ID, Name, CalcType, IsMinus,'+
- ' Formula, StartedPrice, SFormula, RangePrice, RFormula'+
- ' From DealPayment In ''%s''';
- sPropertySql = 'Insert Into ProjProperties'+
- ' Select * From ProjProperties In ''%s'''+
- ' Where (Name <> ''PHASECOUNT'') and (Name <> ''UNLOCKINFOPASSWORD'') and (Name <> ''AUDITSTATUS'')'+
- ' and (Name <> ''FINALAUDITCOUNT'') and (Name <> ''AUDITCOMPANY'') and (Name <> ''UPDATEFLAG'')';
- var
- sSql: string;
- begin
- sSql := Format(sBillsSql, [AFileName]);
- ExecuteSql(sSql);
- sSql := Format(sDealBillsSql, [AFileName]);
- ExecuteSql(sSql);
- sSql := Format(sDealPaymentSql, [AFileName]);
- ExecuteSql(sSql);
- sSql := Format(sPropertySql, [AFileName]);
- ExecuteSql(sSql);
- end;
- function CreateTempSourceFile: string;
- var
- TempDir, TempDir2: string;
- begin
- TempDir := GenerateTempFolder(GetTempPath);
- UnZipFile(AFileName, TempDir);
- try
- TempDir2 := GenerateTempFolder(GetTempPath);
- try
- UnZipFile(GetTempFile(TempDir), TempDir2);
- Result := GetTempFileName;
- SimpleDecrypt(TempDir2 + '\Main.dat', Result);
- finally
- DeleteFileOrFolder(TempDir2);
- end;
- finally
- DeleteFileOrFolder(TempDir);
- end;
- end;
- procedure BeforeCopyData;
- begin
- DisConnectTree;
- CloseAllData;
- end;
- procedure EndCopyData;
- begin
- OpenAllData;
- FProjProperties.Reload;
- FProjProperties.UpdateFlag := 1;
- ReConnectTree;
- ResetFloatDigitView;
- BillsCompileData.CalculateAll;
- end;
- function CheckFile: Boolean;
- var
- TempDir: string;
- Proj: TProjectData;
- begin
- TempDir := GenerateTempFolder(GetTempPath);
- UnZipFile(AFileName, TempDir);
- try
- Proj := TProjectData.Create;
- Proj.SimpleOpen(GetTempFile(TempDir));
- Result := Proj.ProjProperties.UpdateFlag = 1;
- finally
- Proj.Free;
- DeleteFileOrFolder(TempDir);
- end;
- end;
- procedure UpdateSourceFile(const AFileName: string);
- var
- vCon: TADOConnection;
- vUpdate: TUpdateProjectDB;
- begin
- vCon := TADOConnection.Create(nil);
- vCon.LoginPrompt := False;
- try
- vCon.ConnectionString := Format(SAdoConnectStr, [AFileName]);
- vUpdate := TUpdateProjectDB.Create;
- vUpdate.ForceUpdate(vCon);
- finally
- vUpdate.Free;
- vCon.Free;
- end;
- end;
- var
- sTemMainFile: string;
- begin
- sTemMainFile := CreateTempSourceFile;
- UpdateSourceFile(sTemMainFile);
- BeforeCopyData;
- try
- ClearAllData;
- CopyData(sTemMainFile);
- finally
- EndCopyData;
- DeleteFileOrFolder(sTemMainFile);
- end;
- end;
- function TProjectData.CheckPassword: Boolean;
- var
- sPassword: string;
- begin
- if ProjProperties.UnlockInfoPassword = '' then
- Result := True
- else
- begin
- Result := InputPassword(sPassword);
- if Result then
- begin
- Result := sPassword = ProjProperties.UnlockInfoPassword;
- if not Result then ErrorMessage('您输入的密码不正确!');
- end;
- end;
- end;
- procedure TProjectData.SetCheckers(const Value: TCheckers);
- begin
- FCheckers := Value;
- end;
- procedure TProjectData.OpenForSubmit(const AFileName: string);
- begin
- FProjectID := -1;
- UnZipFile(AFileName, TempPath);
- FConnection.Open(MainFileName);
- UpdateProjectDataBase;
- FProjProperties.Open(FConnection.Connection);
- FStaffData.Open(FConnection.Connection);
- end;
- procedure TProjectData.SaveAsForSubmit(const AFileName: string);
- begin
- FStaffData.Save;
- FProjProperties.Save;
- FConnection.Save;
- ZipFolder(FTempFolder, AFileName);
- end;
- procedure TProjectData.LockBillsBaseData;
- const
- sLockInfoSql = 'Update Bills Set LockedInfo = True, LockedLevel = True';
- sLockNPSql = 'Update Bills Set LockedNewPrice = True Where NewPrice <> 0';
- begin
- ExecuteSql(sLockInfoSql);
- ExecuteSql(sLockNPSql);
- end;
- procedure TProjectData.LockDealPaymentData;
- const
- sLockDealSql = 'Update DealPayment Set Locked = True';
- sLockFormulaSql = 'Update DealPayment Set LockedFormula = True Where (Formula <> '''')';
- begin
- ExecuteSql(sLockDealSql);
- ExecuteSql(sLockFormulaSql);
- end;
- procedure TProjectData.OpenForReport(const AFileName: string);
- begin
- FProjectID := -1;
- UnZipFile(AFileName, TempPath);
- FConnection.Open(MainFileName);
- UpdateProjectDataBase;
- FProjProperties.Open(FConnection.Connection);
- UpdateOldData;
- FBillsData.Open(FConnection.Connection);
- FBillsCompileData.Open;
- FDealPaymentData.Open(FConnection.Connection);
- FBGLData.Open(FConnection.Connection);
- end;
- procedure TProjectData.OpenForReply(const AFileName: string);
- begin
- FProjectID := -1;
- UnZipFile(AFileName, TempPath);
- FConnection.Open(MainFileName);
- UpdateProjectDataBase;
- FProjProperties.Open(FConnection.Connection);
- if ProjProperties.PhaseCount > 0 then
- begin
- FPhaseIndex := ProjProperties.PhaseCount;
- FPhaseData.SimpleOpen(Format('%sPhase%d.dat', [TempPath, FPhaseIndex]));
- end;
- FStaffData.Open(FConnection.Connection);
- FDetailGLData.Open(FConnection.Connection);
- end;
- procedure TProjectData.SaveForReply(const AFileName: string);
- begin
- FDetailGLData.Save;
- FStaffData.Save;
- if FPhaseData.Active then
- FPhaseData.SimpleSave;
- FProjProperties.Save;
- FConnection.Save;
- ZipFolder(FTempFolder, AFileName);
- end;
- procedure TProjectData.OpenForReceive(const AFileName: string);
- begin
- FProjectID := -1;
- UnZipFile(AFileName, TempPath);
- FConnection.Open(MainFileName);
- UpdateProjectDataBase;
- FProjProperties.Open(FConnection.Connection);
- FBillsData.Open(FConnection.Connection);
- FBillsMeasureData.Open;
- if ProjProperties.PhaseCount > 0 then
- begin
- FPhaseIndex := ProjProperties.PhaseCount;
- FPhaseData.SimpleOpen(Format('%sPhase%d.dat', [TempPath, FPhaseIndex]));
- end;
- FStaffData.Open(FConnection.Connection);
- FBillsMeasureData.ResetTreeNodeStageRec;
- FBillsMeasureData.CalcMeasureFilter;
- end;
- procedure TProjectData.SaveForReceive(const AFileName: string);
- begin
- FStaffData.Save;
- FBillsData.Save;
- if FPhaseData.Active then
- FPhaseData.SimpleSave;
- FProjProperties.Save;
- FConnection.Save;
- ZipFolder(FTempFolder, AFileName);
- end;
- procedure TProjectData.CloseAllData;
- begin
- FBillsBookmarkData.Close;
- FBillsData.Close;
- FBillsCompileData.Close;
- FBillsMeasureData.Close;
- FDealBillsData.Close;
- FDealPaymentData.Close;
- FBGLData.Close;
- FStaffData.Close;
- FMainListData.Close;
- end;
- procedure TProjectData.OpenAllData;
- begin
- FProjProperties.Open(FConnection.Connection);
- FBillsData.Open(FConnection.Connection);
- FBillsCompileData.Open;
- FBillsMeasureData.Open;
- FDealBillsData.Open(FConnection.Connection);
- FDealPaymentData.Open(FConnection.Connection);
- FBGLData.Open(FConnection.Connection);
- FStaffData.Open(FConnection.Connection);
- FMainListData.Open(FConnection.Connection);
- FBillsBookmarkData.Open;
- end;
- procedure TProjectData.UpdateOldData;
- procedure UpdateBills_OrgData;
- const
- sUpdateSql = 'Update Bills Set OrgQuantity = Quantity, OrgTotalPrice = TotalPrice';
- begin
- ExecuteSql(sUpdateSql);
- end;
- begin
- if ProjProperties.UpdateFlag = 1 then Exit;
- ProjProperties.UpdateFlag := 1;
- UpdateBills_OrgData;
- end;
- procedure TProjectData.ResetFloatDigitView;
- procedure SetBillsCompileDigit;
- begin
- with FBillsCompileData.sdvBillsCompile do
- begin
- Columns.FindColumn('OrgQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('MisQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('OthQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('Quantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('DgnQuantity1').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('DgnQuantity2').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('OrgTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('MisTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('OthTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('TotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('Price').DisplayFormat := FProjProperties.PriceFormat;
- Columns.FindColumn('DgnPrice').DisplayFormat := FProjProperties.PriceFormat;
- Columns.FindColumn('OrgQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('MisQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('OthQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('Quantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('DgnQuantity1').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('DgnQuantity2').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('OrgTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('MisTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('OthTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('TotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('Price').EditFormat := FProjProperties.PriceFormat;
- Columns.FindColumn('DgnPrice').EditFormat := FProjProperties.PriceFormat;
- end;
- end;
- procedure SetBillsMeasureDigit;
- begin
- with FBillsMeasureData.sdvBillsMeasure do
- begin
- Columns.FindColumn('Quantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CurDealQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CurQcQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CurPcQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CurGatherQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('EndDealQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('EndQcQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('EndPcQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('EndGatherQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('AddDealQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('AddQcQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('AddPcQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('AddGatherQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('DealDgnQuantity1').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('DealDgnQuantity2').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CDgnQuantity1').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CDgnQuantity2').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('TotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('CurDealTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('CurQcTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('CurPcTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('CurGatherTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('EndDealTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('EndQcTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('EndPcTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('EndGatherTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('AddDealTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('AddQcTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('AddPcTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('AddGatherTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('Price').DisplayFormat := FProjProperties.PriceFormat;
- Columns.FindColumn('NewPrice').DisplayFormat := FProjProperties.PriceFormat;
- Columns.FindColumn('Quantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CurDealQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CurQcQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CurPcQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CurGatherQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('EndDealQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('EndQcQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('EndPcQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('EndGatherQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('AddDealQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('AddQcQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('AddPcQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('AddGatherQuantity').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('DealDgnQuantity1').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('DealDgnQuantity2').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CDgnQuantity1').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CDgnQuantity2').EditFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('TotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('CurDealTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('CurQcTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('CurPcTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('CurGatherTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('EndDealTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('EndQcTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('EndPcTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('EndGatherTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('AddDealTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('AddQcTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('AddPcTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('AddGatherTotalPrice').EditFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('Price').EditFormat := FProjProperties.PriceFormat;
- Columns.FindColumn('NewPrice').EditFormat := FProjProperties.PriceFormat;
- end;
- end;
- procedure SetBillsGatherDigit;
- begin
- with FBillsGatherData.sdvGclBills do
- begin
- Columns.FindColumn('Price').DisplayFormat := FProjProperties.PriceFormat;
- Columns.FindColumn('DealQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('DealTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('BGLQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('BGLTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('Quantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('TotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('CurDealQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CurDealTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('CurQcQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CurQcTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('CurGatherQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('CurGatherTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('PreDealQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('PreDealTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('PreQcQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('PreQcTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('PreGatherQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('PreGatherTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('AddDealQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('AddDealTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('AddQcQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('AddQcTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('AddGatherQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('AddGatherTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('EndDealQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('EndDealTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('EndQcQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('EndQcTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('EndGatherQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('EndGatherTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('Deal_BGLQuantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('Deal_BGLTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- end;
- with FBillsGatherData.sdvDetailGclBills do
- begin
- Columns.FindColumn('Quantity').DisplayFormat := FProjProperties.QuantityFormat;
- end;
- with FBillsGatherData.sdvDetailDealBills do
- begin
- Columns.FindColumn('Quantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('TotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- end;
- with FBillsGatherData.sdvDetailBGLBills do
- begin
- Columns.FindColumn('Quantity').DisplayFormat := FProjProperties.QuantityFormat;
- Columns.FindColumn('TotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- end;
- end;
- procedure SetDealPaymentDigit;
- begin
- with FDealPaymentData.sdvDealPayment do
- begin
- Columns.FindColumn('CurTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('TotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('StartedPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('RangePrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- end;
- end;
- procedure SetBGLDigit;
- begin
- FBGLData.cdsBGLViewTotalPrice.DisplayFormat := FProjProperties.TotalPriceFormat;
- FBGLData.cdsBGBillsViewPrice.DisplayFormat := FProjProperties.PriceFormat;
- FBGLData.cdsBGBillsViewQuantity.DisplayFormat := FProjProperties.QuantityFormat;
- FBGLData.cdsBGBillsViewTotalPrice.DisplayFormat := FProjProperties.TotalPriceFormat;
- FBGLData.cdsBGBillsViewUsedQuantity.DisplayFormat := FProjProperties.QuantityFormat;
- end;
- procedure SetOtherMeasureDigit;
- begin
- with FOtherMeasureOnceData.sdvOnce do
- begin
- Columns.FindColumn('TotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- end;
- with FOtherMeasurePhaseData.sdvPhase do
- begin
- Columns.FindColumn('TotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('PreTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('CurTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('EndTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- Columns.FindColumn('AddTotalPrice').DisplayFormat := FProjProperties.TotalPriceFormat;
- end;
- end;
- begin
- SetBillsCompileDigit;
- SetBillsMeasureDigit;
- //SetDealPaymentDigit;
- SetBillsGatherDigit;
- SetBGLDigit;
- SetOtherMeasureDigit;
- end;
- function TProjectData.GetStageDataReadOnly: Boolean;
- begin
- if FPhaseData.Active then
- Result := FPhaseData.StageDataReadOnly
- else
- Result := True;
- end;
- procedure TProjectData.OpenForReport2(const AFileName: string);
- begin
- FProjectID := -1;
- UnZipFile(AFileName, TempPath);
- FConnection.Open(MainFileName);
- UpdateProjectDataBase;
- FProjProperties.Open(FConnection.Connection);
- UpdateOldData;
- FBillsData.Open(FConnection.Connection);
- FBillsCompileData.Open;
- FDealPaymentData.Open(FConnection.Connection);
- FBGLData.Open(FConnection.Connection);
- if ProjProperties.PhaseCount > 0 then
- begin
- FPhaseIndex := ProjProperties.PhaseCount;
- FPhaseData.SimpleOpen(Format('%sPhase%d.dat', [TempPath, FPhaseIndex]));
- end;
- end;
- function TProjectData.CheckDataBaseInfo(APhaseCount, AAuditStatus: Integer): Boolean;
- begin
- Result := (FProjProperties.PhaseCount = APhaseCount)
- and (FProjProperties.AuditStatus = AAuditStatus);
- if Result and (APhaseCount > 0) and (AAuditStatus <> -1) then
- Result := PhaseData.AuditCount = AAuditStatus;
- end;
- procedure TProjectData.OpenForReport3(const AFileName: string);
- begin
- FProjectID := -1;
- UnZipFile(AFileName, TempPath);
- FConnection.Open(MainFileName);
- UpdateProjectDataBase;
- FProjProperties.Open(FConnection.Connection);
- UpdateOldData;
- FBillsData.Open(FConnection.Connection);
- FBillsMeasureData.Open;
- FDealPaymentData.Open(FConnection.Connection);
- FBGLData.Open(FConnection.Connection);
- if ProjProperties.PhaseCount > 0 then
- begin
- FPhaseIndex := ProjProperties.PhaseCount;
- FPhaseData.SimpleOpen2(Format('%sPhase%d.dat', [TempPath, FPhaseIndex]));
- end;
- FBillsMeasureData.ResetTreeNodeStageRec;
- end;
- function TProjectData.GetPriceMarginReadOnly: Boolean;
- begin
- if FPhaseData.Active then
- Result := not((FPhaseIndex = FProjProperties.PhaseCount) and (FPhaseData.StageCount = 1) and (FProjProperties.AuditStatus <> -1))
- else
- Result := True;
- end;
- procedure TProjectData.CalculatePriceMargin;
- begin
- // 计算工料价差数据
- FProjectGLData.CalculateAll;
- {if not FPhaseData.StageDataReadOnly then
- begin
- // 计算清单价差节点
- PhaseData.StageData.CalculatePriceMarginNode;
- // 计算合同支付
- PhaseData.PhasePayData.CalculateAll;
- end;}
- end;
- procedure TProjectData.LockProjectGLData;
- const
- sLockSql = 'Update ProjectGL As P, GLPrice As G' +
- ' Set P.LockedPhaseID = %d'+
- ' Where (P.ID = G.GLID) and (G.PM_Quantity_F <> 0) and (IsNull(P.LockedPhaseID) or (P.LockedPhaseID = 0))';
- var
- sSql: string;
- begin
- sSql := Format(sLockSql, [FProjProperties.PhaseCount]);
- ExecuteSql(sSql);
- end;
- procedure TProjectData.LockDetailGLData;
- const
- sLockSql = 'Update DetailGL As D Set D.LockedPhaseID = %d' +
- ' Where (D.LastBillsQuantity <> 0) and (IsNull(D.LockedPhaseID) or (D.LockedPhaseID = 0))';
- var
- sSql: string;
- begin
- sSql := Format(sLockSql, [FProjProperties.PhaseCount]);
- ExecuteSql(sSql);
- end;
- procedure TProjectData.CopyPreData;
- procedure CopyPreGLPrice;
- const
- sCopySql = 'Insert Into GLPrice (GLID, PhaseID,' +
- ' InfoPrice, InfoDate, DeltaPrice, ValidDeltaPrice,' +
- ' PreUsedQuantity, PreUsedTotalPrice,' +
- ' PM_PreQuantity, PM_PreTotalPrice,'+
- ' PrePAL_UsedQuantity, PrePAL_UsedTotalPrice,'+
- ' PrePAL_DeltaPrice, PrePAL_Total)'+
- ' Select GLID, %d,'+
- ' InfoPrice, InfoDate, DeltaPrice, ValidDeltaPrice,'+
- ' iif(IsNull(PreUsedQuantity), 0, PreUsedQuantity)+UsedQuantity, iif(IsNull(PreUsedTotalPrice), 0, PreUsedTotalPrice)+UsedTotalPrice,'+
- ' iif(IsNull(PM_PreQuantity), 0, PM_PreQuantity)+PM_Quantity_F, iif(IsNull(PM_PreTotalPrice), 0, PM_PreTotalPrice)+PM_TotalPrice_F,'+
- ' iif(IsNull(PrePAL_UsedQuantity), 0, PrePAL_UsedQuantity)+PAL_UsedQuantity_F, iif(IsNull(PrePAL_UsedTotalPrice), 0, PrePAL_UsedTotalPrice)+PAL_UsedTotalPrice_F,'+
- ' iif(IsNull(PrePAL_DeltaPrice), 0, PrePAL_DeltaPrice)+PAL_DeltaPrice_F, iif(IsNull(PrePAL_Total), 0, PrePAL_Total)+PAL_Total_F'+
- ' From GLPrice Where PhaseID = %d';
- begin
- if FProjProperties.PhaseCount > 1 then
- ExecuteSql(Format(sCopySql, [FProjProperties.PhaseCount, FProjProperties.PhaseCount - 1]));
- end;
- procedure CopyPreOMPhaseDetail;
- const
- sCopySql = 'Insert Into OMPhaseDetail (ID, PhaseID, StageID,' +
- ' PreTotalPrice, CurTotalPrice, EndTotalPrice)' +
- ' Select ID, %d, 0, PreTotalPrice + CurTotalPrice, 0, PreTotalPrice + CurTotalPrice' +
- ' From OMPhaseDetail Where (PhaseID = %d) and (StageID = -1)';
- begin
- if FProjProperties.PhaseCount > 1 then
- ExecuteSql(Format(sCopySql, [FProjProperties.PhaseCount, FProjProperties.PhaseCount - 1]));
- end;
- begin
- CopyPreGLPrice;
- CopyPreOMPhaseDetail;
- PhaseData.CopyPreData;
- ProjectGLData.LoadCurPhaseInfoPrice;
- ProjectGLData.LoadStagePM_CalcData;
- FProjectGLData.RefreshGatherData;
- FOtherMeasurePhaseData.LoadCurStageData;
- BillsMeasureData.ResetTreeNodeStageRec;
- end;
- function TProjectData.GetStageIndex: Integer;
- begin
- Result := FPhaseData.StageIndex;
- end;
- procedure TProjectData.SetStageIndex(const Value: Integer);
- begin
- FProjectGLData.Save;
- FOtherMeasurePhaseData.Save;
- FPhaseData.StageIndex := Value;
- FProjectGLData.LoadStagePM_CalcData;
- FOtherMeasurePhaseData.LoadCurStageData;
- end;
- procedure TProjectData.ClearReportCacheData;
- begin
- DropCacheTable('P_');
- end;
- function TProjectData.GetCanInsertNormalBills: Boolean;
- begin
- if FProjProperties.PhaseCount > 0 then
- Result := CanUnlockInfo
- else
- Result := True;
- end;
- procedure TProjectData.ClearReportPrepareData;
- begin
- DropCacheTable('rdp_');
- end;
- procedure TProjectData.DropCacheTable(const AKey: string);
- var
- FTableList: TStringList;
- iIndex: Integer;
- sDeleteTableSql: String;
- begin
- FTableList := TStringList.Create;
- try
- FConnection.Connection.GetTableNames(FTableList);
- iIndex := 0;
- while iIndex < FTableList.Count do
- begin
- if Pos(AKey, FTableList.Strings[iIndex]) = 1 then
- begin
- sDeleteTableSql := Format('Drop Table %s', [FTableList.Strings[iIndex]]);
- ExecuteSql(sDeleteTableSql);
- end;
- Inc(iIndex);
- end;
- finally
- FTableList.Free;
- end;
- end;
- procedure TProjectData.SaveDebugFile(const AFileName: string);
- var
- sFileName: string;
- begin
- sFileName := ExtractFileName(AFileName);
- if FDebugDir = '' then
- FConnection.SaveDebugFile('E:\' + sFileName)
- else
- FConnection.SaveDebugFile(FDebugDir + '\' + sFileName);
- end;
- procedure TProjectData.SaveTempDataBaseFile(const AFileName: string);
- begin
- FConnection.SaveDebugFile(AFileName);
- end;
- procedure TProjectData.ImportDmfFile(const AFileName: string);
- begin
- ImportDbTreeTo(AFileName, Self);
- end;
- function TProjectData.GetValidStageIsRefer: Boolean;
- begin
- if FPhaseData.Active then
- Result := (FPhaseIndex = FProjProperties.PhaseCount) and (FPhaseData.StageCount = 1) and (FProjProperties.AuditStatus <> -1)
- else
- Result := False;
- end;
- procedure TProjectData.OpenForGather(const AFileName: string;
- APhaseIndex: Integer = -1);
- begin
- FProjectID := -1;
- UnZipFile(AFileName, TempPath);
- FConnection.Open(MainFileName);
- UpdateProjectDataBase;
- FProjProperties.Open(FConnection.Connection);
- UpdateOldData;
- FBillsData.Open(FConnection.Connection);
- FBillsMeasureData.Open;
- FDealPaymentData.Open(FConnection.Connection);
- FBGLData.Open(FConnection.Connection);
- if ProjProperties.PhaseCount > 0 then
- begin
- if (APhaseIndex <= ProjProperties.PhaseCount) and (APhaseIndex > 0) then
- FPhaseIndex := APhaseIndex
- else
- FPhaseIndex := ProjProperties.PhaseCount;
- FPhaseData.SimpleOpen2(Format('%sPhase%d.dat', [TempPath, FPhaseIndex]));
- end;
- FBillsMeasureData.ResetTreeNodeStageRec;
- end;
- function TProjectData.IsHistoryPhase: Boolean;
- begin
- Result := PhaseIndex < ProjProperties.PhaseCount;
- end;
- procedure TProjectData.OpenForSignOnline(AProjRec: TsdDataRecord;
- APhaseIndex: Integer);
- begin
- FWebID := AProjRec.ValueByName('WebID').AsInteger;
- FWebOwnerID := AProjRec.ValueByName('WebOwnerID').AsInteger;
- FWebAuthorID := AProjRec.ValueByName('WebAuthorID').AsInteger;
-
- OpenForGather(GetMyProjectsFilePath + AProjRec.ValueByName('FileName').AsString, APhaseIndex);
- if _IsCloud then
- LoadCheckersData;
- CopyPhaseData(False);
- end;
- function TProjectData.GetStartMeasure: Boolean;
- begin
- Result := ProjProperties.PhaseCount > 0;
- end;
- function TProjectData.CheckPhaseFileComplete: Boolean;
- var
- i: Integer;
- begin
- Result := True;
- for i := 1 to FProjProperties.PhaseCount do
- begin
- if not FileExists(Format('%s\Phase%d.dat', [TempPath, i])) then
- begin
- Result := False;
- Break;
- end;
- end;
- end;
- procedure TProjectData.SaveAndCheck;
- function CheckFile(AFileName: string): Boolean;
- var
- Checker: TTenderZipCompleteChecker;
- begin
- Checker := TTenderZipCompleteChecker.Create;
- try
- Checker.CheckType := zctLastPhase;
- Result := Checker.CheckFileValid(AFileName);
- finally
- Checker.Free;
- end;
- end;
- begin
- AppendProjectLog('Save Project');
- Save;
- if not CheckFile(FFileName) then
- begin
- AppendProjectLog('Save Project --> Error');
- Save;
- if not CheckFile(FFileName) then
- begin
- AppendProjectLog('Save Project --> Error-2');
- ErrorMessage('保存数据出错。请重试,或联系纵横客服:企业QQ:800003850 客服热线:(0756)3850888');
- Abort;
- end
- else
- ProjectManager.AddSaveTenderBackup(FProjectID);
- end
- else
- ProjectManager.AddSaveTenderBackup(FProjectID);
- AppendProjectLog('Save Project --> End');
- end;
- function TProjectData.CheckLastPhaseFileExist: Boolean;
- begin
- if FProjProperties.PhaseCount > 0 then
- Result := FileExists(Format('%s\Phase%d.dat', [TempPath, FProjProperties.PhaseCount]))
- else
- Result := True;
- end;
- procedure TProjectData.InnerSave;
- begin
- try
- AppendProjectLog('Save Main Data');
- CheckCalcBeforeSave;
- UpdateSysProgress(5, '正在保存数据');
- SaveLastestPhaseMainData;
- SaveDealPayFinalData;
- UpdateSysProgress(10, '正在保存数据');
- if (FPhaseData.Active) and (FPhaseIndex = ProjProperties.PhaseCount) then
- FPhaseData.Save;
- UpdateSysProgress(40, '正在保存数据');
- FDealPayFinalData.Save;
- FMainListData.Save;
- FDealPaymentData.Save;
- UpdateSysProgress(50, '正在保存数据');
- FStaffData.Save;
- UpdateSysProgress(60, '正在保存数据');
- FBGLData.Save;
- UpdateSysProgress(70, '正在保存数据');
- FDealBillsData.Save;
- UpdateSysProgress(80, '正在保存数据');
- FProjectGLData.Save;
- FDetailGLData.Save;
- UpdateSysProgress(100, '正在保存数据');
- FBillsCompileData.ReLockBaseData;
- UpdateSysProgress(110, '正在保存数据');
- FBillsData.Save;
- UpdateSysProgress(165, '正在保存数据');
- FOtherMeasureOnceData.Save;
- FOtherMeasurePhaseData.Save;
- FAttachmentInfoData.Save;
- UpdateSysProgress(170, '正在保存数据');
- FProjProperties.AuditCompany := FStaffData.FinalStaffCompany;
- FProjProperties.Save;
- UpdateSysProgress(180, '正在保存数据');
- FConnection.Save;
- UpdateSysProgress(200, '就绪');
- AppendProjectLog('Save Main Data --> End');
- except
- ErrorMessage('保存数据出错。请重试,或联系纵横客服:企业QQ:800003850 客服热线:(0756)3850888');
- AppendProjectLog('Save Main Data --> Error');
- end;
- end;
- function TProjectData.SaveAs(const AFileName: string): Boolean;
- begin
- try
- InnerSave;
- ZipFolder(FTempFolder, AFileName);
- SaveInfoToManager;
- except
- Result := False;
- end;
- end;
- procedure TProjectData.AppendProjectLog(const ALog: string);
- begin
- if SupportManager.ConfigInfo.IsLog then
- MeasureLog.AppendLogTo(Format('%s: %s', [FProjectName, ALog]));
- end;
- procedure TProjectData.SetIsGuest(const Value: Boolean);
- begin
- FIsGuest := Value;
- end;
- procedure TProjectData.LoadCheckersData;
- var
- sURL: string;
- vA: TOVArr;
- i, iIndex: Integer;
- vStatus: TCheckStatus;
- begin
- Checkers.Clear;
- sURL := Format('%suser/get/all/%d/%d/measure', [PHPWeb.MeasureURL, WebID, PhaseIndex]);
- if PHPWeb.Search(sURL, [''], [''], vA) = 1 then
- begin
- for i := Low(vA) to High(vA) do
- begin
- vStatus := TCheckStatus(StrToInt(vA[i, 3])-1);
- iIndex := Checkers.Add(StrToInt(vA[i, 4]), vA[i, 0], vA[i, 2], vA[i, 6], vA[i, 8]);
- if vStatus in [csFinished, csNotPass] then
- Checkers.LastChecker := Checkers.Item[iIndex];
- end;
- end
- end;
- procedure TProjectData.OpenForSumUpBase(const AFileName: string);
- begin
- FProjectID := -1;
- UnZipFile(AFileName, TempPath);
- FConnection.Open(MainFileName);
- UpdateProjectDataBase;
- FProjProperties.Open(FConnection.Connection);
- UpdateOldData;
- FBillsData.Open(FConnection.Connection);
- FBillsCompileData.Open;
- end;
- procedure TProjectData.OpenForSumUpGather(const AFileName: string;
- APhaseIndex: Integer);
- begin
- OpenForGather(AFileName, APhaseIndex);
- end;
- procedure TProjectData.ImportSubTenderGather(const AFileName: string);
- var
- vImportor: TstgSubGatherFileImportor;
- begin
- if PhaseData.StageDataReadOnly then Exit;
- vImportor := TstgSubGatherFileImportor.Create;
- try
- vImportor.ImportGatherDataTo(PhaseData.StageData, AFileName);
- BillsMeasureData.ResetTreeNodeStageRec;
- finally
- CalculateAll;
- vImportor.Free;
- end;
- end;
- procedure TProjectData.CheckCalcBeforeSave;
- function NeedReCalc: Boolean;
- var
- vTopNode: TsdIDTreeNode;
- begin
- Result := False;
- vTopNode := BillsMeasureData.BillsMeasureTree.FirstNode;
- while not Result and Assigned(vTopNode) do
- begin
- if not BillsMeasureData.CheckNodeGatherCalc(TMeasureBillsIDTreeNode(vTopNode)) then
- Result := True;
- vTopNode := vTopNode.NextSibling;
- end;
- end;
- var
- i: Integer;
- fLeafSum, fTopParent: Double;
- begin
- if PhaseData.Active and (not StageDataReadOnly) and NeedReCalc then
- begin
- Screen.Cursor := crHourGlass;
- try
- ShowProgressHint('检查到有需要计算的清单,请稍候...');
- CalculateAll;
- CloseProgressHint;
- finally
- Screen.Cursor := crDefault;
- end;
- end;
- end;
- function TProjectData.LastCheckerIsOwner: Boolean;
- begin
- if (FCheckers.LastChecker = nil) then
- Result := false
- else
- Result := PHPWeb.UserID = FCheckers.LastChecker.ID;
- end;
- procedure TProjectData.OpenForReport4(const AFileName: string);
- begin
- FProjectID := -1;
- UnZipFile(AFileName, TempPath);
- FConnection.Open(MainFileName);
- UpdateProjectDataBase;
- FProjProperties.Open(FConnection.Connection);
- UpdateOldData;
- FBillsData.Open(FConnection.Connection);
- FDealBillsData.Open(FConnection.Connection);
- FDealPaymentData.Open(FConnection.Connection);
- FBGLData.Open(FConnection.Connection);
- if ProjProperties.PhaseCount > 0 then
- begin
- FPhaseIndex := ProjProperties.PhaseCount;
- FPhaseData.SimpleOpen2(Format('%sPhase%d.dat', [TempPath, FPhaseIndex]));
- end;
- end;
- procedure TProjectData.SaveDealPayFinalData;
- begin
- if (FProjProperties.PhaseCount > 0) and (FPhaseIndex = ProjProperties.PhaseCount) and PhaseData.IsLastStage then
- FDealPayFinalData.LoadLastestDealPayData;
- end;
- end.
|