1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311 |
- 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);
- 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(FBillsMeasureData.BillsMeasureTree.FirstNode);
- 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;
- 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.
|