|
@@ -63,6 +63,7 @@ type
|
|
|
FAttachmentData: TUpFiles;
|
|
|
FCheckers: TCheckers;
|
|
|
FIsGuest: Boolean;
|
|
|
+ FWebChangeSwitch: Integer;
|
|
|
|
|
|
{For Open}
|
|
|
procedure UpdateProjectDataBase;
|
|
@@ -97,6 +98,8 @@ type
|
|
|
|
|
|
procedure LoadCheckersData;
|
|
|
|
|
|
+ procedure LoadWebSwitchChange;
|
|
|
+
|
|
|
function GetMainFileName: string;
|
|
|
procedure SetPhaseIndex(const Value: Integer);
|
|
|
function GetTempPath: string;
|
|
@@ -155,6 +158,7 @@ type
|
|
|
procedure OpenForSumUpBase(const AFileName: string);
|
|
|
{OpenForSumUpGather: BillsData, BillsMeasureTree, PhaseData(根据PhaseIndex指定打开),直接调用OpenForSignOnline}
|
|
|
procedure OpenForSumUpGather(const AFileName: string; APhaseIndex: Integer = -1);
|
|
|
+ procedure OpenForImportMtf(const AFileName: string; APhaseIndex: Integer = -1; AStageIndex: Integer = -1);
|
|
|
//----------------------- End ---后台打开 ------------------------
|
|
|
|
|
|
procedure SaveDebugFile(const AFileName: string);
|
|
@@ -211,6 +215,7 @@ type
|
|
|
procedure ImportSubTenderGather(const AFileName: string);
|
|
|
procedure ImportSubTenderGatherGcl(const AFileName: string);
|
|
|
procedure ImportSubTenderGatherGclExcel(const AFileName: string);
|
|
|
+ procedure ImportPhaseData(const AFileName: string);
|
|
|
|
|
|
function CheckPassword: Boolean;
|
|
|
|
|
@@ -278,6 +283,8 @@ type
|
|
|
property ProjectReadOnly: Boolean read FProjectReadOnly;
|
|
|
property Checkers: TCheckers read FCheckers write SetCheckers;
|
|
|
property IsGuest: Boolean read GetIsGuest;
|
|
|
+
|
|
|
+ property WebChangeSwitch: Integer read FWebChangeSwitch;
|
|
|
end;
|
|
|
|
|
|
implementation
|
|
@@ -288,7 +295,7 @@ uses
|
|
|
mProgressProFrm, mDataRecord, ConditionalDefines, DbTreeImport,
|
|
|
StrUtils, sdProvider, CalcDecimal, Math, CslJson, OrderCheckerFme,
|
|
|
stgSubGatherFile, Forms, ProgressHintFrm, BillsTree, Controls,
|
|
|
- stgGclSubGatherFile;
|
|
|
+ stgGclSubGatherFile, rmfImportFrm;
|
|
|
|
|
|
{ TProjectData }
|
|
|
|
|
@@ -343,6 +350,7 @@ begin
|
|
|
FAttachmentData := TUpFiles.Create;
|
|
|
FAttachmentInfoData := TAttachmentInfoData.Create(Self);
|
|
|
FPhaseIndex := 0;
|
|
|
+ FWebChangeSwitch := -1;
|
|
|
end;
|
|
|
|
|
|
procedure TProjectData.CreateNewPhase;
|
|
@@ -519,6 +527,8 @@ begin
|
|
|
FDebugDir := GetAppFilePath + 'Debug\' + FProjectName;
|
|
|
CreateDirectoryInDeep(FDebugDir);
|
|
|
end;
|
|
|
+ if _IsCloud then
|
|
|
+ LoadWebSwitchChange;
|
|
|
end;
|
|
|
|
|
|
procedure TProjectData.OpenLastPhaseData;
|
|
@@ -2414,4 +2424,130 @@ begin
|
|
|
Result := not (UserIsAuthor(PHPWeb.UserID) or UserIsChecker(PHPWeb.UserID));
|
|
|
end;
|
|
|
|
|
|
+procedure TProjectData.ImportPhaseData(const AFileName: string);
|
|
|
+var
|
|
|
+ vMtfFile: TmtfFileView;
|
|
|
+ vProjectData: TProjectData;
|
|
|
+ vFails: TStringList;
|
|
|
+ iPhase, iStage: Integer;
|
|
|
+
|
|
|
+ procedure ClearOldData(AStageData: TStageData);
|
|
|
+ var
|
|
|
+ i: Integer;
|
|
|
+ vRec: TStageRecord;
|
|
|
+ begin
|
|
|
+ for i := 0 to AStageData.sddStage.RecordCount - 1 do
|
|
|
+ begin
|
|
|
+ vRec := TStageRecord(AStageData.sddStage.Records[i]);
|
|
|
+ vRec.DealQuantity.AsFloat := 0;
|
|
|
+ vRec.DealTotalPrice.AsFloat := 0;
|
|
|
+ vRec.DealFlag.AsInteger := 0;
|
|
|
+ vRec.DealFormula.AsString := '';
|
|
|
+ vRec.EndDealQuantity.AsFloat := vRec.PreDealQuantity.AsFloat;
|
|
|
+ vRec.EndDealTotalPrice.AsFloat := vRec.PreDealTotalPrice.AsFloat;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+ procedure ImportData(AProjectData: TProjectData);
|
|
|
+ var
|
|
|
+ vStageData: TStageData;
|
|
|
+ vBillsData: TBillsData;
|
|
|
+ i: Integer;
|
|
|
+ vRec, vOrgBillsRec, vBillsRec, vStageRec: TsdDataRecord;
|
|
|
+ begin
|
|
|
+ vStageData := AProjectData.PhaseData.StageData;
|
|
|
+ vBillsData := AProjectData.BillsData;
|
|
|
+ for i := 0 to vStageData.sddStage.RecordCount - 1 do
|
|
|
+ begin
|
|
|
+ vRec := vStageData.sddStage.Records[i];
|
|
|
+ vOrgBillsRec := vBillsData.sddBills.FindKey('idxID', vRec.ValueByName('BillsID').AsInteger);
|
|
|
+ if not vOrgBillsRec.ValueByName('IsLeaf').AsBoolean then Continue;
|
|
|
+
|
|
|
+ vBillsRec := BillsData.sddBills.Locate('ID', vRec.ValueByName('BillsID').AsInteger);
|
|
|
+ if Assigned(vBillsRec) and Assigned(vOrgBillsRec) and
|
|
|
+ (vBillsRec.ValueByName('Name').AsString = vOrgBillsRec.ValueByName('Name').AsString) then
|
|
|
+ begin
|
|
|
+ vStageRec := PhaseData.StageData.StageRecordWithAdd(vRec.ValueByName('BillsID').AsInteger);
|
|
|
+ vStageRec.ValueByName('DealQuantity').AsFloat := vRec.ValueByName('DealQuantity').AsFloat;
|
|
|
+ end
|
|
|
+ else
|
|
|
+ vFails.Add(Format('ID: %s', [vRec.ValueByName('BillsID').AsString]));
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+begin
|
|
|
+ if not GetMtfImportInfo(iPhase, iStage) then
|
|
|
+ Exit;
|
|
|
+
|
|
|
+ Screen.Cursor := crHourGlass;
|
|
|
+ try
|
|
|
+ vFails := TStringList.Create;
|
|
|
+ vMtfFile := TmtfFileView.Create(AFileName);
|
|
|
+ vProjectData := TProjectData.Create;
|
|
|
+ vProjectData.OpenForImportMtf(vMtfFile.FileName, iPhase, iStage);
|
|
|
+
|
|
|
+ PhaseData.StageData.sddStage.BeginUpdate;
|
|
|
+ PhaseData.StageData.BeforeBatchOperation;
|
|
|
+ try
|
|
|
+ ClearOldData(PhaseData.StageData);
|
|
|
+ ImportData(vProjectData);
|
|
|
+ BillsMeasureData.ResetTreeNodeStageRec;
|
|
|
+ if vFails.Count > 0 then
|
|
|
+ WarningMessage('未能导入的清单:' + #13#10 + vFails.Text);
|
|
|
+ finally
|
|
|
+ PhaseData.StageData.AfterBatchOperation;
|
|
|
+ PhaseData.StageData.sddStage.EndUpdate;
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ Screen.Cursor := crDefault;
|
|
|
+ vProjectData.Free;
|
|
|
+ vMtfFile.Free;
|
|
|
+ vFails.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TProjectData.OpenForImportMtf(const AFileName: string;
|
|
|
+ APhaseIndex: Integer; AStageIndex: Integer);
|
|
|
+begin
|
|
|
+ FProjectID := -1;
|
|
|
+ UnZipFile(AFileName, TempPath);
|
|
|
+ FConnection.Open(MainFileName);
|
|
|
+ UpdateProjectDataBase;
|
|
|
+ FProjProperties.Open(FConnection.Connection);
|
|
|
+ UpdateOldData;
|
|
|
+ FBillsData.Open(FConnection.Connection);
|
|
|
+ if ProjProperties.PhaseCount > 0 then
|
|
|
+ begin
|
|
|
+ if APhaseIndex = -1 then
|
|
|
+ FPhaseIndex := ProjProperties.PhaseCount
|
|
|
+ else if (APhaseIndex <= ProjProperties.PhaseCount) and (APhaseIndex > 0) then
|
|
|
+ FPhaseIndex := APhaseIndex
|
|
|
+ else
|
|
|
+ raise Exception.Create('输入的期数不存在');
|
|
|
+ ProjProperties.PhaseIndex := FPhaseIndex;
|
|
|
+ FPhaseData.SimpleOpen3(Format('%sPhase%d.dat', [TempPath, FPhaseIndex]), AStageIndex);
|
|
|
+ end;
|
|
|
+ FBillsMeasureData.ResetTreeNodeStageRec;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TProjectData.LoadWebSwitchChange;
|
|
|
+var
|
|
|
+ sgs: TStrings;
|
|
|
+ iResult: Integer;
|
|
|
+ sResult: string;
|
|
|
+begin
|
|
|
+ sgs := TStringList.Create;
|
|
|
+ try
|
|
|
+ sgs.Add(Format('id=%d', [FWebID]));
|
|
|
+ iResult := PHPWeb.UrlGet(PhPWeb.MeasureURL + 'change/switch', sgs, sResult);
|
|
|
+ case iResult of
|
|
|
+ 1: FWebChangeSwitch := StrToIntDef(sResult, 0);
|
|
|
+ 0: WarningMessage('网络错误:' + sResult);
|
|
|
+ -1: WarningMessage('网络错误:无法连接到云端');
|
|
|
+ end;
|
|
|
+ finally
|
|
|
+ sgs.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
end.
|