|
@@ -64,6 +64,7 @@ type
|
|
|
actnOpenBackupFolder: TAction;
|
|
|
sbChecker: TScrollBox;
|
|
|
actnSignOnline: TAction;
|
|
|
+ actnGuest: TAction;
|
|
|
procedure actnOpenExecute(Sender: TObject);
|
|
|
procedure actnDeleteExecute(Sender: TObject);
|
|
|
procedure zgProjectsMouseDown(Sender: TObject; Button: TMouseButton;
|
|
@@ -94,6 +95,8 @@ type
|
|
|
procedure pnlProgressClick(Sender: TObject);
|
|
|
procedure actnSignOnlineExecute(Sender: TObject);
|
|
|
procedure actnSignOnlineUpdate(Sender: TObject);
|
|
|
+ procedure actnGuestExecute(Sender: TObject);
|
|
|
+ procedure actnGuestUpdate(Sender: TObject);
|
|
|
private
|
|
|
FProjectManagerData: TProjectManagerData;
|
|
|
|
|
@@ -128,7 +131,8 @@ type
|
|
|
FPhaseNo: Integer;
|
|
|
|
|
|
FCurPos: Integer; // 用来控制审核人的添加位置
|
|
|
- FCheckerList: TObjectList;
|
|
|
+ FCheckers: TOVArr;
|
|
|
+ FCheckerFrames: TObjectList;
|
|
|
|
|
|
FSignOnlineSwitch: Integer;
|
|
|
|
|
@@ -172,6 +176,8 @@ type
|
|
|
function CurRec: TsdDataRecord;
|
|
|
function CurRecAttachmentPath: string;
|
|
|
function AttachmentFileCountsWithoutManageFile(ANode: TsdIDTreeNode): Integer;
|
|
|
+ function UserIsChecker(UserID: Integer): Boolean; // 判断指定ID的用户是否是参与人
|
|
|
+ function IsGuest: Boolean;
|
|
|
property ProjectCheckStatus: TCheckStatus read FWebCheckStatusProject;
|
|
|
end;
|
|
|
|
|
@@ -181,7 +187,8 @@ uses
|
|
|
MainFrm, UtilMethods, ProjectCommands, Globals, ConfigDoc, ConstUnit,
|
|
|
WebNewTenderFrm, PHPWebDm, Math, mProgressFrm, ProgressHintFrm,
|
|
|
ShellAPI, ProjectFme, SelectOnlineSignPhaseFrm, SignOnlineReportsFrm,
|
|
|
- ConditionalDefines;
|
|
|
+ ConditionalDefines, SetGuestFrm;
|
|
|
+
|
|
|
|
|
|
{$R *.dfm}
|
|
|
|
|
@@ -196,12 +203,13 @@ begin
|
|
|
SetDxBtnAction(actnOpenBackupFolder, MainForm.dxbtnOpenBackupFolder);
|
|
|
SetDxBtnAction(actnRename, MainForm.dxbtnRename);
|
|
|
SetDxBtnAction(actnSignOnline, MainForm.dxbtnSignOnline);
|
|
|
+ SetDxBtnAction(actnGuest, MainForm.dxbtnGuest);
|
|
|
end;
|
|
|
|
|
|
constructor TProjectManagerFrame.Create(AOwner: TComponent);
|
|
|
begin
|
|
|
inherited;
|
|
|
- FCheckerList := TObjectList.Create;
|
|
|
+ FCheckerFrames := TObjectList.Create;
|
|
|
FProjectManagerData := ProjectManager;
|
|
|
FProjectManagerData.Open;
|
|
|
stdProjects.IDTree := FProjectManagerData.ProjectsTree;
|
|
@@ -394,9 +402,10 @@ begin
|
|
|
|
|
|
if not MainForm.CurProjectFrame.CheckFileAndCloudChekerList then
|
|
|
begin
|
|
|
- sHint := '项目校验:“' + FWebBidName_OnLine + '”文件中的审批人和云端的审批人不一致,' +
|
|
|
- '禁止继续操作,项目即将关闭!请删除本地项目重新从云端获取,' +
|
|
|
- '重新获取后如果仍然存在同样的问题,请联系纵横服务人员以寻求帮助。';
|
|
|
+ sHint := '“'+ FWebBidName_OnLine +'”无法打开,本地与云端审批人不一致。' + #10#13 +
|
|
|
+ '1、如当前项目审批不通过并已重新开始计量:请回到原电脑操作;' + #10#13 +
|
|
|
+ '2、审批中/审批完成项目:请删除本地项目重新从云端获取。' + #10#13 +
|
|
|
+ '如仍然存在同样问题,请联系纵横服务人员。';
|
|
|
Application.MessageBox(PChar(sHint), '文件错误', MB_OK +MB_ICONWARNING);
|
|
|
MainForm.actnCloseProject.Execute;
|
|
|
Exit;
|
|
@@ -1036,75 +1045,74 @@ procedure TProjectManagerFrame.ShowProjectInfoTopAndCheckers;
|
|
|
var
|
|
|
vPSArr: TStrArr;
|
|
|
vCArr: TOVArr; // Checkers
|
|
|
- vChecker: TOrderCheckerFrame;
|
|
|
sPicPath, sURL: string;
|
|
|
|
|
|
- procedure AddChecker(AType: TCheckerFrameType; AArr: array of string);
|
|
|
- begin
|
|
|
- vChecker := TOrderCheckerFrame.Create(self);
|
|
|
- FCheckerList.Add(vChecker);
|
|
|
- vChecker.Owner := Self;
|
|
|
- sbChecker.VertScrollBar.Range := sbChecker.VertScrollBar.Range + vChecker.Height;
|
|
|
- sbChecker.Height := Min(sbChecker.Height + vChecker.Height, pnlWeb.Height - pnlProject.Height);
|
|
|
- vChecker.Parent := sbChecker;
|
|
|
- vChecker.Top := FCurPos;
|
|
|
- FCurPos := FCurPos + vChecker.Height;
|
|
|
- vChecker.Align := alTop;
|
|
|
-
|
|
|
- sPicPath := PHPWeb.UserPath + '1_' + AArr[0] + '.jpg';
|
|
|
- PHPWeb.DownFile(AArr[4], sPicPath);
|
|
|
- vChecker.Init(AType, StrToInt(AArr[0]), AArr[1], AArr[3],
|
|
|
- AArr[2], sPicPath, AArr[6], TCheckStatus(StrToInt(AArr[5])-1), AArr[8], StrToInt(AArr[7]));
|
|
|
- vChecker.Name := 'ProjectOrderFrame' + AArr[0];
|
|
|
- end;
|
|
|
-
|
|
|
- procedure RepairOrder;
|
|
|
- var k: Integer;
|
|
|
- begin
|
|
|
- for k := 0 to sbChecker.ControlCount - 1 do
|
|
|
- TOrderCheckerFrame(sbChecker.Controls[k]).Order := k + 1;
|
|
|
- end;
|
|
|
-
|
|
|
- procedure ShowProjectCheckers;
|
|
|
- var i, j, n: Integer;
|
|
|
+ procedure ShowProjectCheckers;
|
|
|
+ var i, j, k, n: Integer;
|
|
|
vOwner: array of string; // 业主信息
|
|
|
- begin
|
|
|
- FCheckerList.Clear;
|
|
|
- sbChecker.Height := 0;
|
|
|
- FCurPos := 0;
|
|
|
|
|
|
- n := Length(vCArr[Low(vCArr)]);
|
|
|
- SetLength(vOwner, n);
|
|
|
- sbChecker.VertScrollBar.Range := 0;
|
|
|
- for i := Low(vCArr) to High(vCArr) do
|
|
|
+ procedure AddCheckerFrame(AType: TCheckerFrameType; AArr: array of string);
|
|
|
+ var vChecker: TOrderCheckerFrame;
|
|
|
+ begin
|
|
|
+ vChecker := TOrderCheckerFrame.Create(self);
|
|
|
+ FCheckerFrames.Add(vChecker);
|
|
|
+ vChecker.Owner := Self;
|
|
|
+ sbChecker.VertScrollBar.Range := sbChecker.VertScrollBar.Range + vChecker.Height;
|
|
|
+ sbChecker.Height := Min(sbChecker.Height + vChecker.Height, pnlWeb.Height - pnlProject.Height);
|
|
|
+ vChecker.Parent := sbChecker;
|
|
|
+ vChecker.Top := FCurPos;
|
|
|
+ FCurPos := FCurPos + vChecker.Height;
|
|
|
+ vChecker.Align := alTop;
|
|
|
+
|
|
|
+ sPicPath := PHPWeb.UserPath + '1_' + AArr[0] + '.jpg';
|
|
|
+ PHPWeb.DownFile(AArr[4], sPicPath);
|
|
|
+ vChecker.Init(AType, StrToInt(AArr[0]), AArr[1], AArr[3],
|
|
|
+ AArr[2], sPicPath, AArr[6], TCheckStatus(StrToInt(AArr[5])-1), AArr[8], StrToInt(AArr[7]));
|
|
|
+ vChecker.Name := 'ProjectOrderFrame' + AArr[0];
|
|
|
+ end;
|
|
|
begin
|
|
|
- if StrToInt(vCArr[i, 0]) = PHPWeb.UserID then
|
|
|
- FWebCheckStatusMy := TCheckStatus(StrToInt(vCArr[i, 5])-1);
|
|
|
+ sbChecker.Height := 0;
|
|
|
+ FCurPos := 0;
|
|
|
|
|
|
- if StrToInt(vCArr[i, 0]) = FWebOwnerID then
|
|
|
+ n := Length(vCArr[Low(vCArr)]);
|
|
|
+ SetLength(vOwner, n);
|
|
|
+ sbChecker.VertScrollBar.Range := 0;
|
|
|
+ for i := Low(vCArr) to High(vCArr) do
|
|
|
begin
|
|
|
- for j := 0 to n - 1 do
|
|
|
- vOwner[j] := vCArr[i, j];
|
|
|
+ if StrToInt(vCArr[i, 0]) = PHPWeb.UserID then
|
|
|
+ FWebCheckStatusMy := TCheckStatus(StrToInt(vCArr[i, 5])-1);
|
|
|
+
|
|
|
+ if StrToInt(vCArr[i, 0]) = FWebOwnerID then
|
|
|
+ begin
|
|
|
+ for j := 0 to n - 1 do
|
|
|
+ vOwner[j] := vCArr[i, j];
|
|
|
+
|
|
|
+ Continue;
|
|
|
+ end;
|
|
|
|
|
|
- Continue;
|
|
|
+ AddCheckerFrame(cftChecker, vCArr[i]);
|
|
|
end;
|
|
|
+ if vOwner[0] <> '' then
|
|
|
+ AddCheckerFrame(cftOwner, vOwner);
|
|
|
|
|
|
- AddChecker(cftChecker, vCArr[i]);
|
|
|
- end;
|
|
|
- if vOwner[0] <> '' then
|
|
|
- AddChecker(cftOwner, vOwner);
|
|
|
- RepairOrder;
|
|
|
+ for k := 0 to sbChecker.ControlCount - 1 do
|
|
|
+ TOrderCheckerFrame(sbChecker.Controls[k]).Order := k + 1;
|
|
|
|
|
|
- OnLineChecker(vCArr, FOnLineCheckerBegin, FOnLineCheckerEnd, FOnLineCheckerEndIsOwner);
|
|
|
- end;
|
|
|
+ OnLineChecker(vCArr, FOnLineCheckerBegin, FOnLineCheckerEnd, FOnLineCheckerEndIsOwner);
|
|
|
+ end;
|
|
|
|
|
|
begin
|
|
|
+ FCheckerFrames.Clear;
|
|
|
GetLocalValues(CurRec);
|
|
|
if FWebID = 0 then Exit;
|
|
|
SetLength(vPSArr, 8);
|
|
|
sURL := Format('%smeasure/status/%d/get', [PHPWeb.MeasureURL, FWebID]);
|
|
|
+ SetLength(FCheckers, 0);
|
|
|
if PHPWeb.Search(sURL, [''], [''], 3, vPSArr, vCArr) = 1 then
|
|
|
begin
|
|
|
+ FCheckers := vCArr;
|
|
|
+
|
|
|
+
|
|
|
LockWindowUpdate(pnlWeb.Handle);
|
|
|
try
|
|
|
FPhaseNo := StrToInt(vPSArr[0]);
|
|
@@ -1140,34 +1148,33 @@ begin
|
|
|
end;
|
|
|
|
|
|
procedure TProjectManagerFrame.ShowProjectInfoTop(AType: Integer);
|
|
|
+ procedure ShowOwner;
|
|
|
+ begin
|
|
|
+ lblBidName.Caption := FWebBidName_Local;
|
|
|
+ lblBidName.Update;
|
|
|
+ lblProjName.Caption := FWebFolder_OnLine;
|
|
|
+ lblProjName.Update;
|
|
|
+ lblWebProjCtgyName.Caption := FWebSubFolder_OnLine;
|
|
|
+ lblWebProjCtgyName.Update;
|
|
|
+ lblOnwerName.Caption := FWebOwnerName;
|
|
|
+ lblOnwerName.Update;
|
|
|
+ lblOnwerCompany.Caption := Format('-%s)', [FWebOwnerCompany]);
|
|
|
+ lblOnwerCompany.Update;
|
|
|
+ lblOnwerCompany.Left := lblOnwerName.Left + lblOnwerName.Width;
|
|
|
+ end;
|
|
|
|
|
|
- procedure ShowOwner;
|
|
|
- begin
|
|
|
- lblBidName.Caption := FWebBidName_Local;
|
|
|
- lblBidName.Update;
|
|
|
- lblProjName.Caption := FWebFolder_OnLine;
|
|
|
- lblProjName.Update;
|
|
|
- lblWebProjCtgyName.Caption := FWebSubFolder_OnLine;
|
|
|
- lblWebProjCtgyName.Update;
|
|
|
- lblOnwerName.Caption := FWebOwnerName;
|
|
|
- lblOnwerName.Update;
|
|
|
- lblOnwerCompany.Caption := Format('-%s)', [FWebOwnerCompany]);
|
|
|
- lblOnwerCompany.Update;
|
|
|
- lblOnwerCompany.Left := lblOnwerName.Left + lblOnwerName.Width;
|
|
|
- end;
|
|
|
-
|
|
|
- procedure ShowStatus(ANo: Integer; AState: TCheckStatus);
|
|
|
- begin
|
|
|
- lblPeriod.Caption := Format('第%d期', [ANo]);
|
|
|
- lblPeriod.Update;
|
|
|
- lblPeriodState.Caption := CheckStatusNames[AState];
|
|
|
- lblPeriodState.Font.Color := CheckStatusColors[AState];
|
|
|
- lblPeriodState.Update;
|
|
|
- lblPeriodState.Left := lblPeriod.Left + lblPeriod.Width + 5;
|
|
|
- lblPeriodTotal.Caption := Format('(共%d期)', [ANo]);
|
|
|
- lblPeriodTotal.Update;
|
|
|
- lblPeriodTotal.Left := lblPeriodState.Left + lblPeriodState.Width + 3;
|
|
|
- end;
|
|
|
+ procedure ShowStatus(ANo: Integer; AState: TCheckStatus);
|
|
|
+ begin
|
|
|
+ lblPeriod.Caption := Format('第%d期', [ANo]);
|
|
|
+ lblPeriod.Update;
|
|
|
+ lblPeriodState.Caption := CheckStatusNames[AState];
|
|
|
+ lblPeriodState.Font.Color := CheckStatusColors[AState];
|
|
|
+ lblPeriodState.Update;
|
|
|
+ lblPeriodState.Left := lblPeriod.Left + lblPeriod.Width + 5;
|
|
|
+ lblPeriodTotal.Caption := Format('(共%d期)', [ANo]);
|
|
|
+ lblPeriodTotal.Update;
|
|
|
+ lblPeriodTotal.Left := lblPeriodState.Left + lblPeriodState.Width + 3;
|
|
|
+ end;
|
|
|
begin
|
|
|
GetLocalValues(CurRec);
|
|
|
case AType of
|
|
@@ -1296,7 +1303,7 @@ end;
|
|
|
|
|
|
destructor TProjectManagerFrame.Destroy;
|
|
|
begin
|
|
|
- FCheckerList.Free;
|
|
|
+ FCheckerFrames.Free;
|
|
|
inherited;
|
|
|
end;
|
|
|
|
|
@@ -1893,7 +1900,7 @@ procedure TProjectManagerFrame.actnSignOnlineUpdate(Sender: TObject);
|
|
|
end;
|
|
|
|
|
|
begin
|
|
|
- TAction(Sender).Visible := _IsCloud;
|
|
|
+ TAction(Sender).Visible := G_IsCloud and (not IsGuest);
|
|
|
TAction(Sender).Enabled := (FSignOnlineSwitch = 1) and
|
|
|
Assigned(stdProjects.IDTree.Selected) and
|
|
|
(stdProjects.IDTree.Selected.Rec.ValueByName('Type').AsInteger = 1) and
|
|
@@ -1914,4 +1921,55 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+procedure TProjectManagerFrame.actnGuestExecute(Sender: TObject);
|
|
|
+var
|
|
|
+ SetGuestForm: TSetGuestForm;
|
|
|
+begin
|
|
|
+ CreateProgress('云端取最新审核人列表');
|
|
|
+ try
|
|
|
+ ShowProjectInfoTopAndCheckers;
|
|
|
+ finally
|
|
|
+ CloseProgress;
|
|
|
+ end;
|
|
|
+ SetGuestForm := TSetGuestForm.Create(CurRec.ValueByName('WebID').AsInteger);
|
|
|
+ SetGuestForm.Owner := Self;
|
|
|
+ try
|
|
|
+ SetGuestForm.ShowModal;
|
|
|
+ finally
|
|
|
+ SetGuestForm.Free;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+procedure TProjectManagerFrame.actnGuestUpdate(Sender: TObject);
|
|
|
+begin
|
|
|
+ TAction(Sender).Visible := G_IsCloud and (not IsGuest);
|
|
|
+ TAction(Sender).Enabled := Assigned(stdProjects.IDTree.Selected) and
|
|
|
+ (stdProjects.IDTree.Selected.Rec.ValueByName('Type').AsInteger = 1);
|
|
|
+end;
|
|
|
+
|
|
|
+function TProjectManagerFrame.UserIsChecker(UserID: Integer): Boolean;
|
|
|
+var i: Integer;
|
|
|
+begin
|
|
|
+ Result := False;
|
|
|
+ if FWebAuthorID = UserID then
|
|
|
+ begin
|
|
|
+ Result := True;
|
|
|
+ Exit;
|
|
|
+ end;
|
|
|
+
|
|
|
+ for i := Low(FCheckers) to High(FCheckers) do
|
|
|
+ begin
|
|
|
+ if StrToInt(FCheckers[i, 0]) = UserID then
|
|
|
+ begin
|
|
|
+ Result := True;
|
|
|
+ Break;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+end;
|
|
|
+
|
|
|
+function TProjectManagerFrame.IsGuest: Boolean;
|
|
|
+begin
|
|
|
+ Result := not UserIsChecker(PHPWeb.UserID);
|
|
|
+end;
|
|
|
+
|
|
|
end.
|