12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306 |
- 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,
- 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;
- FProjectGLData: TProjectGLData;
- FDetailGLData: TDetailGLData;
- FPriceMarginBillsData: TPriceMarginBillsData;
- FOtherMeasureOnceData: TOtherMeasureOnceData;
- FOtherMeasurePhaseData: TOtherMeasurePhaseData;
- 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);
- {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 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 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);
- FProjectGLData := TProjectGLData.Create(Self);
- FDetailGLData := TDetailGLData.Create(Self);
- FPriceMarginBillsData := TPriceMarginBillsData.Create(Self);
- FOtherMeasureOnceData := TOtherMeasureOnceData.Create(Self);
- FOtherMeasurePhaseData := TOtherMeasurePhaseData.Create(Self);
- FAttachmentData := TUpFiles.Create;
- FPhaseIndex := 0;
- end;
- procedure TProjectData.CreateNewPhase;
- var
- sPhaseFileName: string;
- begin
- 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;
- FOtherMeasurePhaseData.Free;
- FOtherMeasureOnceData.Free;
- FPriceMarginBillsData.Free;
- FDetailGLData.Free;
- FProjectGLData.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);
- UpdateSysProgress(190, '正在读取数据');
- FOtherMeasureOnceData.Open(FConnection.Connection);
- FOtherMeasurePhaseData.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;
- 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];
- 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);
- if ProjProperties.PhaseCount > 0 then
- begin
- FPhaseIndex := ProjProperties.PhaseCount;
- FPhaseData.SimpleOpen(Format('%sPhase%d.dat', [TempPath, FPhaseIndex]));
- end;
- FStaffData.Open(FConnection.Connection);
- end;
- procedure TProjectData.SaveForReceive(const AFileName: string);
- begin
- FStaffData.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;
- UpdateSysProgress(10, '正在保存数据');
- if (FPhaseData.Active) and (FPhaseIndex = ProjProperties.PhaseCount) then
- FPhaseData.Save;
- UpdateSysProgress(40, '正在保存数据');
- 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;
- 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;
- end.
|