|
@@ -4,10 +4,11 @@ interface
|
|
|
|
|
|
uses
|
|
|
ProjectData, ReportManager, ReportConnection, ReportPrepare,
|
|
|
- PrintComTypeDefUnit, ADODB, DB,
|
|
|
+ PrintComTypeDefUnit, ADODB, DB, SignReports,
|
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
|
Dialogs, sdIDTree, sdDB, ComCtrls, ExtCtrls, VirtualTrees, PrintCom,
|
|
|
- PrintComXML, MScrollBox, StdCtrls, Buttons, PNGButton;
|
|
|
+ PrintComXML, MScrollBox, StdCtrls, Buttons, PNGButton, ieview,
|
|
|
+ imageenview;
|
|
|
|
|
|
const
|
|
|
crNext = -25;
|
|
@@ -27,6 +28,7 @@ type
|
|
|
btnNext: TButton;
|
|
|
lblPages: TLabel;
|
|
|
pbGenerate: TPNGButton;
|
|
|
+ ImageEnView1: TImageEnView;
|
|
|
procedure FormShow(Sender: TObject);
|
|
|
procedure tvReportsClick(Sender: TObject);
|
|
|
procedure PreviewComXMLContentDisplay(var contentFontRec: TFontRec;
|
|
@@ -49,6 +51,10 @@ type
|
|
|
procedure btnNextClick(Sender: TObject);
|
|
|
procedure pbGenerateClick(Sender: TObject);
|
|
|
private
|
|
|
+ FWebProjectID: Integer;
|
|
|
+ FWebTenderID: Integer;
|
|
|
+ FSignPhase: Integer;
|
|
|
+
|
|
|
FProjectData: TProjectData;
|
|
|
// 数据库管理
|
|
|
FReportCon: TReportConnection;
|
|
@@ -58,10 +64,17 @@ type
|
|
|
FPreviewList: TList;
|
|
|
FCurPage: Integer;
|
|
|
|
|
|
+ FTempPath: string;
|
|
|
+
|
|
|
+ FPostedSignReports: TSignReports;
|
|
|
+
|
|
|
procedure OnViewMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
|
|
|
procedure OnViewMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
|
|
|
|
|
|
+ function SafeReportName(var AName: string): Boolean;
|
|
|
+
|
|
|
procedure ExportReports(const AFileName: string);
|
|
|
+ procedure ExportPdfReports(const AFileName: string);
|
|
|
|
|
|
procedure LoadReportTemplates;
|
|
|
|
|
@@ -94,7 +107,8 @@ implementation
|
|
|
|
|
|
uses
|
|
|
UtilMethods, TemplateManagerHelper, Globals, AuditSelectFrm,
|
|
|
- ScFileArchiver, ZhAPI;
|
|
|
+ ScFileArchiver, ZhAPI, PHPWebDm, imageenio, ReportPdfHelper,
|
|
|
+ mProgressFrm, RenameSignReportFrm;
|
|
|
|
|
|
{$R *.dfm}
|
|
|
|
|
@@ -116,11 +130,13 @@ end;
|
|
|
destructor TSignOnlineReportsForm.Destroy;
|
|
|
begin
|
|
|
ClearObjects(FPreviewList);
|
|
|
- FPreviewList.Free;
|
|
|
+ FPreviewList.Free;
|
|
|
FReportCon.Free;
|
|
|
FReportDataPrepare.Free;
|
|
|
if Assigned(FProjectData) then
|
|
|
FProjectData.Free;
|
|
|
+ if DirectoryExists(FTempPath) then
|
|
|
+ DeleteFileOrFolder(FTempPath);
|
|
|
inherited;
|
|
|
end;
|
|
|
|
|
@@ -140,6 +156,10 @@ procedure TSignOnlineReportsForm.Init(AProjNode: TsdIDTreeNode; ASignPhase: Inte
|
|
|
end;
|
|
|
|
|
|
begin
|
|
|
+ FWebProjectID := GetTopParent(AProjNode).Rec.ValueByName('WebID').AsInteger;
|
|
|
+ FWebTenderID := AProjNode.Rec.ValueByName('WebID').AsInteger;
|
|
|
+ FSignPhase := ASignPhase;
|
|
|
+
|
|
|
FProjectData := TProjectData.Create;
|
|
|
FProjectData.OpenForSignOnline(GetMyProjectsFilePath + AProjNode.Rec.ValueByName('FileName').AsString, ASignPhase);
|
|
|
FReportDataPrepare := TReportPrepare.Create(FProjectData);
|
|
@@ -149,6 +169,11 @@ begin
|
|
|
Caption := Format('生成签署报表 %s-第 %d 期', [getName(AProjNode), ASignPhase]);
|
|
|
|
|
|
LoadReportTemplates;
|
|
|
+
|
|
|
+ FTempPath := GetAppTempPath + IntToStr(AProjNode.ID) + '\';
|
|
|
+ CreateDirectoryInDeep(FTempPath);
|
|
|
+
|
|
|
+ FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + 'sign/list', IntToStr(FWebTenderID), IntToStr(FSignPhase));
|
|
|
end;
|
|
|
|
|
|
procedure TSignOnlineReportsForm.LoadReportTemplates;
|
|
@@ -183,11 +208,18 @@ begin
|
|
|
if Assigned(tvReports.Selected) then
|
|
|
begin
|
|
|
vTemplate := TTemplateNode(tvReports.Selected.Data);
|
|
|
+
|
|
|
+ pbGenerate.Visible := Assigned(vTemplate);
|
|
|
+ cbFillZero.Visible := Assigned(vTemplate);
|
|
|
+ pnlPageControl.Visible := Assigned(vTemplate);
|
|
|
+
|
|
|
+ FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + 'sign/list', IntToStr(FWebTenderID), IntToStr(FSignPhase));
|
|
|
+ lblAlreadyUpload.Visible := Assigned(vTemplate) and Assigned(FPostedSignReports.FindSignReport(FSignPhase, vTemplate.TemplateName));
|
|
|
+
|
|
|
+ ReportTemplateManager.Current := vTemplate;
|
|
|
if Assigned(vTemplate) then
|
|
|
- begin
|
|
|
- ReportTemplateManager.Current := vTemplate;
|
|
|
LoadTemplateAndDisplay(vTemplate);
|
|
|
- end;
|
|
|
+ tvReports.SetFocus;
|
|
|
end;
|
|
|
end;
|
|
|
|
|
@@ -505,14 +537,10 @@ procedure TSignOnlineReportsForm.InitPageSettings(APrintCom: TPrintComXML);
|
|
|
begin
|
|
|
// 设置页面大小
|
|
|
APrintCom.setPageSize(ReportConfig.PageSize);
|
|
|
- // 统一纸张大小
|
|
|
- APrintCom.PrintPageSizeIdx := DMPAPER_A4;
|
|
|
- {
|
|
|
if ReportConfig.PageSize = 'A3' then
|
|
|
APrintCom.PrintPageSizeIdx := DMPAPER_A3
|
|
|
else if ReportConfig.PageSize = 'A4' then
|
|
|
APrintCom.PrintPageSizeIdx := DMPAPER_A4;
|
|
|
- }
|
|
|
// 设置边距
|
|
|
APrintCom.setEdge(0, '', ReportConfig.LeftEdge/10);
|
|
|
APrintCom.setEdge(1, '', ReportConfig.RightEdge/10);
|
|
@@ -936,6 +964,8 @@ begin
|
|
|
|
|
|
LoadCursor(crPrevious, GetAppFilePath + 'PreviousPage.cur');
|
|
|
LoadCursor(crNext, GetAppFilePath + 'NextPage.cur');
|
|
|
+
|
|
|
+ FPostedSignReports := TSignReports.Create;
|
|
|
end;
|
|
|
|
|
|
procedure TSignOnlineReportsForm.msbReportsPreviewMouseWheelDown(
|
|
@@ -1012,17 +1042,51 @@ end;
|
|
|
procedure TSignOnlineReportsForm.SetCurPage(const Value: Integer);
|
|
|
begin
|
|
|
FCurPage := Value;
|
|
|
- PreviewPage(TImage(FPreviewList.Items[0]), FCurPage);
|
|
|
+ PreviewPage(TImage(FPreviewList.Items[0]), FCurPage);
|
|
|
lblPages.Caption := Format('%d/%d', [FCurPage, PreviewComXML.TotalPages]);
|
|
|
end;
|
|
|
|
|
|
procedure TSignOnlineReportsForm.pbGenerateClick(Sender: TObject);
|
|
|
var
|
|
|
- sFileName: string;
|
|
|
+ sReportName, sZipFile, sPdfFile, sErrorMessage: string;
|
|
|
+ vInFields, vInValues: array [0..4] of string;
|
|
|
+ vUpFileFields, vUpFileNames: array [0..1] of string;
|
|
|
begin
|
|
|
- if SaveFile(sFileName, '.zip') then
|
|
|
+ sReportName := ReportTemplateManager.Current.TemplateName;
|
|
|
+ if SafeReportName(sReportName) then
|
|
|
begin
|
|
|
- ExportReports(sFileName);
|
|
|
+ CreateProgress('上传中,请等待...');
|
|
|
+ vInFields[0] := 'project';
|
|
|
+ vInValues[0] := IntToStr(FWebProjectID);
|
|
|
+ vInFields[1] := 'tender';
|
|
|
+ vInValues[1] := IntToStr(FWebTenderID);
|
|
|
+ vInFields[2] := 'phaseno';
|
|
|
+ vInValues[2] := IntToStr(FSignPhase);
|
|
|
+ vInFields[3] := 'name';
|
|
|
+ vInValues[3] := sReportName;
|
|
|
+ vInFields[4] := 'ownuid';
|
|
|
+ vInValues[4] := IntToStr(PHPWeb.UserID);
|
|
|
+
|
|
|
+ vUpFileFields[0] := 'upfile';
|
|
|
+ vUpFileNames[0] := GetTempFileName(FTempPath, '.zip');
|
|
|
+ ExportReports(vUpFileNames[0]);
|
|
|
+ vUpFileFields[1] := 'upspdf';
|
|
|
+ vUpFileNames[1] := GetTempFileName(FTempPath, '.pdf');
|
|
|
+ PdfHelper.ExportAllPages(PreviewComXML, vUpFileNames[1]);
|
|
|
+
|
|
|
+ if PHPWeb.UploadFiles('sign/create', vInFields, vInValues, vUpFileFields, vUpFileNames, sErrorMessage) then
|
|
|
+ begin
|
|
|
+ FPostedSignReports.AddSignReport(FSignPhase, ReportTemplateManager.Current.TemplateName, 234);
|
|
|
+ lblAlreadyUpload.Visible := True;
|
|
|
+
|
|
|
+ CloseProgress;
|
|
|
+ TipMessage('上传完成。');
|
|
|
+ end
|
|
|
+ else
|
|
|
+ begin
|
|
|
+ CloseProgress;
|
|
|
+ WarningMessage(Format('%s, 上传数据失败,请重试。', [sErrorMessage]));
|
|
|
+ end;
|
|
|
end;
|
|
|
end;
|
|
|
|
|
@@ -1056,4 +1120,56 @@ begin
|
|
|
end;
|
|
|
end;
|
|
|
|
|
|
+procedure TSignOnlineReportsForm.ExportPdfReports(const AFileName: string);
|
|
|
+
|
|
|
+ procedure ExportReportPage(APage: Integer; const APageFileName: string);
|
|
|
+ var
|
|
|
+ imgEn: TImageEnView;
|
|
|
+ begin
|
|
|
+ imgEn := TImageEnView.Create(nil);
|
|
|
+ try
|
|
|
+ imgEn.Visible := False;
|
|
|
+ imgEn.Parent := Self;
|
|
|
+ imgEn.IO.CreatePDFFile(APageFileName);
|
|
|
+ imgEn.Bitmap.Height := PreviewComXML.PrintHeight;
|
|
|
+ imgEn.Bitmap.Width := PreviewComXML.PrintWidth;
|
|
|
+ PreviewComXML.PrintPreviewCanvas(APage, 0, imgEn.Bitmap.Canvas, False);
|
|
|
+ imgEn.IO.SaveToPDF;
|
|
|
+ finally
|
|
|
+ imgEn.Free;
|
|
|
+ end;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ ATempFolder: String;
|
|
|
+ i: Integer;
|
|
|
+begin
|
|
|
+ ATempFolder := GenerateTempFolder(GetTempFilePath);
|
|
|
+ for i := 1 to PreviewComXML.TotalPages do
|
|
|
+ begin
|
|
|
+ ExportReportPage(i, Format('%s\%d.pdf', [ATempFolder, i]));
|
|
|
+ end;
|
|
|
+ ZipFolder(ATempFolder, AFileName);
|
|
|
+end;
|
|
|
+
|
|
|
+function TSignOnlineReportsForm.SafeReportName(var AName: string): Boolean;
|
|
|
+var
|
|
|
+ sOrgName: string;
|
|
|
+ iCount: Integer;
|
|
|
+ bHasQuest: Boolean;
|
|
|
+begin
|
|
|
+ Result := False;
|
|
|
+ sOrgName := AName;
|
|
|
+ iCount := 0;
|
|
|
+ FPostedSignReports.LoadAllSignReports(PhPWeb.MeasureURL + 'sign/list', IntToStr(FWebTenderID), IntToStr(FSignPhase));
|
|
|
+ while Assigned(FPostedSignReports.FindSignReport(FSignPhase, AName)) do
|
|
|
+ begin
|
|
|
+ Inc(iCount);
|
|
|
+ AName := Format('%s(%d)', [sOrgName, iCount]);
|
|
|
+ end;
|
|
|
+ Result := SameText(sOrgName, AName);
|
|
|
+ if not Result then
|
|
|
+ Result := QuestRenameSignReport(AName, FSignPhase);
|
|
|
+end;
|
|
|
+
|
|
|
end.
|