From 40bf1f9cb2685c739e7aa7a56d941f09ca512882 Mon Sep 17 00:00:00 2001
From: Hong-Dell\Hong <chlin1022@i-mps.com>
Date: 星期三, 20 三月 2024 09:06:46 +0800
Subject: [PATCH] ver 2,0,1,78 版修正
---
CB_IMGPSScanImp.pas | 992 +++++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 800 insertions(+), 192 deletions(-)
diff --git a/CB_IMGPSScanImp.pas b/CB_IMGPSScanImp.pas
index ca8c548..6a587cb 100644
--- a/CB_IMGPSScanImp.pas
+++ b/CB_IMGPSScanImp.pas
@@ -1,5 +1,5 @@
unit CB_IMGPSScanImp;
-
+//PRO
{$WARN SYMBOL_PLATFORM OFF}
interface
@@ -9,12 +9,22 @@
EnDiGrph, { for TDibGraphic }
EnMisc, { for MinFloat }
EnTifGr, { for TTifGraphic }
+ {$IFDEF Production}
+ CB_IMGPSScan_TLB,
+ {$ENDIF}
+ {$IFDEF Test}
+ CB_IMGPSScan_test_TLB,
+ {$ENDIF}
+
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- ActiveX, AxCtrls, CB_IMGPSScan_TLB, StdVcl, VCLUnZip, VCLZip, Encryp,
+ ActiveX, AxCtrls, StdVcl, VCLUnZip, VCLZip, Encryp,
ExtCtrls, ComCtrls, Menus, StdCtrls, Gauges, EnImgScr, PJMenuSpeedButtons,
Buttons, ImgList, SBSimpleSSL, SBHTTPSClient, SBWinCertStorage, SBX509,
SBCustomCertStorage, SBUtils,mpsBarco,BarcodesFinder,HTTPApp,ErrList,
- Xmltool,inifiles,printers,IdHashMessageDigest, idHash, LogFile;
+ Xmltool,inifiles,printers,IdHashMessageDigest, idHash, LogFile,ShellApi,
+ SBSocket,IIS_Ftp, SBSimpleFTPS;
+Type
+ TTransMode =(tsHttp,tsFtp,tsNone);
var
Ch_WriteNote : Boolean;
@@ -111,7 +121,6 @@
Splitter1: TSplitter;
Panel3: TPanel;
Label7: TLabel;
- TreeView1: TTreeView;
Panel6: TPanel;
CB1: TCheckBox;
ScanDuplexCB: TCheckBox;
@@ -180,7 +189,6 @@
PM402: TMenuItem;
PM403: TMenuItem;
PM404: TMenuItem;
- HTTPSClient: TElHTTPSClient;
ElWinCertStorage: TElWinCertStorage;
ElMemoryCertStorage: TElMemoryCertStorage;
Panel5: TPanel;
@@ -188,8 +196,6 @@
Panel11: TPanel;
SampleScanBtn: TBitBtn;
WNoteBtn: TBitBtn;
- Panel13: TPanel;
- CaseHelpBtn: TBitBtn;
PopupMenu1: TPopupMenu;
PM101: TMenuItem;
N12: TMenuItem;
@@ -247,7 +253,6 @@
Edit1: TEdit;
PM110: TMenuItem;
Image1: TImage;
- PrtLb: TLabel;
UseOldCaseLb: TLabel;
PM111: TMenuItem;
SmoothCB: TCheckBox;
@@ -258,6 +263,21 @@
Label3: TLabel;
LogFile1: TLogFile;
ScanGrayCB: TCheckBox;
+ AttFileGB: TGroupBox;
+ AttListBox: TListBox;
+ Panel20: TPanel;
+ AddAttFileLB: TLabel;
+ DelAttFileLB: TLabel;
+ Splitter2: TSplitter;
+ Panel17: TPanel;
+ TreeView1: TTreeView;
+ Panel13: TPanel;
+ PrtLb: TLabel;
+ CaseHelpBtn: TBitBtn;
+ HTTPSClient: TElHTTPSClient;
+ Button5: TButton;
+ FTPSClient1: TElSimpleFTPSClient;
+ Button6: TButton;
procedure ActiveFormCreate(Sender: TObject);
procedure Panel9Resize(Sender: TObject);
procedure ISB1Click(Sender: TObject);
@@ -376,6 +396,16 @@
procedure TreeView1MouseEnter(Sender: TObject);
procedure ScrollBox1MouseEnter(Sender: TObject);
procedure ScanGrayCBClick(Sender: TObject);
+ procedure AddAttFileLBClick(Sender: TObject);
+ procedure DelAttFileLBClick(Sender: TObject);
+ procedure AttListBoxDblClick(Sender: TObject);
+ procedure AttListBoxClick(Sender: TObject);
+ procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
+ Shift: TShiftState; X, Y: Integer);
+ procedure HTTPSClientRedirection(Sender: TObject; const OldURL: string;
+ var NewURL: string; var AllowRedirection: Boolean);
+ procedure Button5Click(Sender: TObject);
+ procedure Button6Click(Sender: TObject);
private
{ Private declarations }
HotKeyId1,HotKeyId2,HotKeyId3,HotKeyId4 :Integer;
@@ -415,9 +445,19 @@
FWH_category:string; //Y/N Y是歸類時有區分入庫非入庫文件 N 是不區分
////////傳入參數///////
+ TransMode : TTransMode; //用何種方式上傳檔案
//********Http參數********
HttpErrStr : String; //錯誤訊息
//********Http參數********
+
+ //********Ftp參數*********
+ FFtpIP : String;
+ FFtpID : String;
+ FFtpPwd : String;
+ FFtpPath : String;
+ FFtpPort : Integer;
+ FFtpProtocol : TFtpProtocol;
+ //********Ftp參數*********
//********ini參數********
DeviceDelete : Boolean; //空白頁刪除啟動
@@ -473,6 +513,7 @@
CaseDocNoList : TStringlist; //案件裡的DocNo清單(不重複)
CaseDocNo_CopiesList : TStringlist; //案件裡的DocNo份數清單
ContextList : TStringlist; //案件裡的檔案清單
+ AttContextList : TStringlist; //案件裡的附加檔案清單
OMRFileList : TStringList; //要OMR檢核的文件(只檢查每種Form的第一頁)
Cust_DocNoList : TStringlist; //自行定義文件名稱
IN_WH_DocNoList : TStringlist; //入庫的文件清單
@@ -524,6 +565,7 @@
DocNoLength : Integer; //Docno長度
PEFileName : String; //掃描時的檔名
+ DownFileErrStr : String; //下載影像時發生的錯誤
ISB : TImageScrollBox;
ScanInfo : TScanInfo;
@@ -572,7 +614,7 @@
FJpgCompression:integer;// 20171211 jpg to tif 的壓縮率
Draging : Boolean;
-
+ MDown : Boolean; //20181210 用來判斷滑鼠右鍵要Popupmenu是否有MouseDonw發生
FEvents: ICB_IMGPSScanXEvents;
@@ -587,6 +629,11 @@
Function GetFindResult(Col:String):String;
//*********SQL相關************
+ //*********FTP相關************
+ Function GetFtpinfo(CaseID,Action:String):Boolean;
+ Procedure SetFtpInfo; //餵入FTP資訊
+ Function FtpCaseComplete(SendData:String):Boolean;
+ //*********FTP相關************
//*******轉換區*********
Function FindDivFormCode(FormCode:String):Boolean; //找有沒有分案的條碼
@@ -650,6 +697,7 @@
Procedure initkscan; //檢查掃描器的功能
procedure LoadImgFile; //載入案件
procedure LoadImgFile1; //載入案件
+ procedure LoadAttFile(CaseID:String); //載入附加檔案
Procedure DistinctFormCode(CaseID:String); //案件裡的FormCode取出第一頁
Function OMRCheckCase(CaseID:String):Boolean; //OMR檢核
Procedure OMRErr2ini(CaseID,Reason,FileName,Site,RelaFileName,RelaSite,Anchor,Anchor1:String;Del,Ingnore,Display:Boolean); //OMR檢核失敗寫入ini
@@ -702,6 +750,7 @@
Function Node3FormID(Node3:TTreeNode):String; //MyTreeNode3取FormCode出來
Function GetNode2Name(Node2:TTreeNode):String; //取MyTreeNode2的識別字出來(記之前點選用)
//Function Down_Replace_Img(SPAth,DPath,CaseID:String):Boolean;
+ Function DownLoadImage(Path,CaseID:String):Boolean;
Function Down_Img(Path,CaseID:String):Boolean;
Function GetNoNameCase(Path:string):String; //取未配號XXXX
Procedure CaseResort(Path:String); //案件的檔案重新排序(次文件依Docno挑)
@@ -712,6 +761,9 @@
Procedure SetCaseList(Mode:Char;Index:Integer;text:String); //'A:加入,I:插入,D:刪除,E:修改'
Procedure SetDocNoList(Mode:Char;Index:Integer;CaseNo,DocDir,Copies:String); //'A:加入,I:插入,D:刪除,E:修改'
Procedure SetContextList(Mode:Char;Index:Integer;CaseNo,DocDir,FileName:String); //'A:加入,I:插入,D:刪除,E:修改'
+ Procedure SetAttContextList(Mode:Char;Index:Integer;CaseNo,FileName:String); //'A:加入,I:插入,D:刪除,E:修改'
+
+
Function checkCaseOMRDone:Boolean; //檢查案件是否完成OMR檢核
Function CheckCaseID_OK:Boolean; //檢查是否有未配號的案件
Procedure CreateEmptyCase(Path,CaseID:String); //產生空白案號(重掃件用)
@@ -723,7 +775,6 @@
Procedure PageReplaceFormID(Path,NowFormID,NewFormID:String); //選取頁更換FormID
Function ModeNeedCheck(OMRMode,ScanMode:String):Boolean; //掃瞄模式是否要做檢核
procedure WMMOUSEWHEEL(var message: TWMMouseWheel); message WM_MOUSEWHEEL;
- Function GetInputMask:String; //取得輸入的保單號碼
Function GetCasePage(Path,CaseID:String):Integer;
Function GetFormIDPage(FileList:TStringlist;FormID:String):Integer;
Procedure SetFile2Case(CaseID,FileName:String);
@@ -1679,6 +1730,7 @@
DocNo_List.Free; //DocNo清單
Context_DocnoList.Free; //案件裡的檔案Docno清單
ContextList.Free; //案件裡的檔案清單
+ AttContextList.Free; //案件裡的附加檔案清單
NowShowFileList.Free; //目前顯示的影像清單
NowSelectFileList.Free; //目前被點選的影像清單
Cust_DocNoList.Free; //自行定義文件名稱
@@ -2106,7 +2158,7 @@
if FileExists(ImageSavePath + NowCaseno+'\'+DocDir+'\Context.dat') then
begin
ST1.LoadFromFile(ImageSavePath + NowCaseno+'\'+DocDir+'\Context.dat');
- if ISExistImg(ImageSavePath + NowCaseno+'\'+DocDir+'\'+ST1.Strings[0]) then
+ if (ST1.Count > 0) and ISExistImg(ImageSavePath + NowCaseno+'\'+DocDir+'\'+ST1.Strings[0]) then //20181210 多增加判斷ST1>0 否則會有機會出現List out of bound Hong
begin
DocDir := DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',DocNo);
end;
@@ -2190,11 +2242,11 @@
GoAtt := True;
end;
- if InputQuery('輸入其他文件名稱','文件名稱',CustomDocName) then
+ if InputQuery(_Msg('輸入其他文件名稱'),_Msg('文件名稱'),CustomDocName) then
begin
if FindCustomDocName(DisplayPath,CustomDocName) then
begin
- Showmessage(Format('文件名稱:"%s"己存在',[CustomDocName]));
+ Showmessage(Format(_Msg('文件名稱:"%s"己存在'),[CustomDocName]));
Exit;
end;
CustomDocNo := GetNewCustomDocNo(DisplayPath,CustomDocName);
@@ -2274,7 +2326,7 @@
iISBName,OldName : String;
iISB : TImageScrollBox;
begin
- if MessageDlg('是否確定刪除??',mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
+ if MessageDlg(_Msg('是否確定刪除??'),mtconfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
for i := 0 to ComponentCount -1 do
begin
@@ -2300,7 +2352,7 @@
//ShowMessage('iISB.FileName='+iISB.FileName);
ReSortFileName(ExtractFilePath(iISB.FileName));
DrawDocItem2(MytreeNode1,NowCaseno);
- MyTreeNode1.Text := Format('%s-%d'+_Msg('頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+ MyTreeNode1.Text := Format(_Msg('%s-%d頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
NewTreeNodeRefresh;
ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
TreeView1click(self);
@@ -2310,7 +2362,7 @@
var
mp:string;
begin
- mp := InputBox('移動頁數','請輸入移入頁碼','');
+ mp := InputBox(_Msg('移動頁數'),_Msg('請輸入移入頁碼'),'');
if (mp <> '') then
begin
MoveImage(DisplayPath+NowDocDir+'\',strtoint(mp));
@@ -2629,7 +2681,8 @@
begin
Result:=False;
ST:=TStringList.Create;
- ST.loadFromfile(DocNopath+'\Context.dat');
+ if FileExists(DocNopath+'\Context.dat') then /////20190319 Hong 當有空的Docno目錄時會掛掉,增加這行
+ ST.loadFromfile(DocNopath+'\Context.dat');
for I := 0 to ST.Count - 1 do
begin
if ISExistImg(DocNopath+ST.Strings[i]) then
@@ -2772,8 +2825,9 @@
//ShowMessage(IntToStr(FileRec.Size)+','+IntToStr(FFileSizeLimit * 1024));
If FileRec.Size > FFileSizeLimit * 1024 Then // 檢查檔案大小
Begin
- ShowMessage(Format('目前檔案大小為 %.3f MB', [FileRec.Size / (1024*1024)]) +
- ',已超過單一檔案匯入限制'+Format('%.1f',[FFileSizeLimit/1024])+'MB');
+ ShowMessage(Format(_Msg('目前檔案大小為 %.3f MB,已超過單一檔案匯入限制%1.f MB'),[FileRec.Size / (1024*1024),FFileSizeLimit/1024]));
+ {ShowMessage(Format('目前檔案大小為 %.3f MB', [FileRec.Size / (1024*1024)]) +
+ ',已超過單一檔案匯入限制'+Format('%.1f',[FFileSizeLimit/1024])+'MB');}
FindClose(FileRec);
DataLoading(false, false);
Exit;
@@ -2788,7 +2842,8 @@
P := ISB.ImageCountFromFile(OpenDialog1.FileName);
For i := 1 To P Do
Begin
- ShowText := _Msg('檔案加入中,請稍候(' + inttostr(i) + '/' + inttostr(P) + ')');
+ ShowText := Format(_Msg('檔案加入中,請稍候(%d/%d)'),[i,p]);
+ //ShowText := _Msg('檔案加入中,請稍候')+'(' + inttostr(i) + '/' + inttostr(P) + ')';
DataLoading(True, True);
ISB.LoadFromFile(FName, i);
DeskewImg(ISB.Graphic);
@@ -2810,7 +2865,7 @@
MpsGetBarcode(ISB_BW.Graphic, MpsBarcodeinf); //判斷A3 有用FormID 所以要先辨條碼
For n := 1 To MpsBarcodeinf.Count Do
Begin
- If MpsBarcodeinf.r180[n] <> 0 Then // 依條碼角度轉影像
+ If (MpsBarcodeinf.r180[n] <> 0) and (Length(MpsBarcodeinf.Text[n])=FormIDLength) Then // 依條碼角度轉影像
Begin
Rotate(ISB.Graphic, MpsBarcodeinf.r180[n]);
//MpsGetBarcode(iGraphic_First, MpsBarcodeinf);
@@ -2837,7 +2892,7 @@
iRect.Bottom := ISB.Graphic.Height;
CropImg(iGraphic_sec, iRect);
End;
-
+ ISB.Graphic.Clear; //20220711 Hong 覺得ISB後面沒有到了,先清掉減少記憶體使用
iGraphic := iGraphic_First;
While Not iGraphic.IsEmpty Do
@@ -2855,7 +2910,7 @@
//ShowMessage(IntToStr(MpsBarcodeinf.Count));
For n := 1 To MpsBarcodeinf.Count Do
Begin
- If MpsBarcodeinf.r180[n] <> 0 Then // 依條碼角度轉影像
+ If (MpsBarcodeinf.r180[n] <> 0) and (Length(MpsBarcodeinf.Text[n])=FormIDLength) Then // 依條碼角度轉影像
Begin
Rotate(iGraphic, MpsBarcodeinf.r180[n]);
MpsGetBarcode(ISB_BW.Graphic, MpsBarcodeinf);
@@ -2892,7 +2947,7 @@
DocNo := FormCode2DocNo(FormID);
DocDir := FindLastestDocDir(CaseID, DocNo);
- if (FMode='ESCAN') and (FModeName='補件掃描') then
+ if (FMode='ESCAN') and (FModeName=_Msg('補件掃描')) then
begin
DocDir := FindLastestDocDirForPage(CaseID, DocNo,FormID);
//ShowMessage('DocDir='+DocDir);
@@ -2933,7 +2988,7 @@
For n := 1 To MpsBarcodeinf.Count Do
Begin
- If MpsBarcodeinf.r180[n] <> 0 Then // 依條碼角度轉影像
+ If (MpsBarcodeinf.r180[n] <> 0) and (Length(MpsBarcodeinf.Text[n])=FormIDLength) Then // 依條碼角度轉影像
Begin
Rotate(iGraphic, MpsBarcodeinf.r180[n]);
MpsGetBarcode(ISB_BW.Graphic, MpsBarcodeinf);
@@ -2941,11 +2996,31 @@
End;
End;
//ShowMessage(IntToStr(iGraphic.Palette.palNumEntries));
- if (iGraphic.Palette.palNumEntries = 0) or (iGraphic.Palette.palNumEntries = 256) then //20171130 彩色 會為0 黑白 為2 灰階256
+ if iGraphic.ImageFormat = ifBlackWhite then //20200806 出現無法匯入,是因color256無法壓JPEG,待報會後再開啟
+ begin
+ iGraphic.Compression:=tcGroup4;
+ end
+ else if iGraphic.ImageFormat= ifColor256 then
+ begin
+ ConverttoGray(iGraphic);
+ iGraphic.Compression:=tcJPEG;
+ iGraphic.JpegQuality:=cooom;
+ end
+ else if (iGraphic.ImageFormat = ifTrueColor) or (iGraphic.ImageFormat = ifGray256) then
begin
iGraphic.Compression:=tcJPEG;
iGraphic.JpegQuality:=cooom;
+ end
+ else
+ begin
+ iGraphic.Compression:=tcLZW;
end;
+
+ {if (iGraphic.Palette.palNumEntries = 0) or (iGraphic.Palette.palNumEntries = 256) then //20171130 彩色 會為0 黑白 為2 灰階256 //20200806拿掉
+ begin
+ iGraphic.Compression:=tcJPEG;
+ iGraphic.JpegQuality:=cooom;
+ end;}
If LowerCase(ExtractFileExt(SavePath + SaveFilename)) = '.tif' Then
Begin
@@ -3096,6 +3171,8 @@
finally
ISB.Free;
+iGraphic_First.Free;
+iGraphic_sec.Free;
end;
@@ -3241,12 +3318,12 @@
if Trim(DocListForm.Edit1.Text)='' then
begin
- Showmessage('未輸入文件名稱');
+ Showmessage(_Msg('未輸入文件名稱'));
Exit;
end;
if FindCustomDocName(DisplayPath,NewFormID) then
begin
- Showmessage(Format('文件名稱:"%s"己存在',[NewFormID]));
+ Showmessage(Format(_Msg('文件名稱:"%s"己存在'),[NewFormID]));
Exit;
end;
if NowFormCode <> AttName then
@@ -3337,7 +3414,7 @@
SavePath : String;
ST1:TStringList;
begin
- if InputQuery('輸入其他文件名稱','文件名稱',CustomDocName) then
+ if InputQuery(_Msg('輸入其他文件名稱'),_Msg('文件名稱'),CustomDocName) then
begin
if CustomDocName <> '' then
begin
@@ -3366,26 +3443,26 @@
begin
oldCopies := GetDocDirCopies(NowCaseno,NowDocDir);
try
- NewCopies := Strtoint(inputBox('修改份數','請輸入修改後的份數',inttostr(oldCopies)));
+ NewCopies := Strtoint(inputBox(_Msg('修改份數'),_Msg('請輸入修改後的份數'),inttostr(oldCopies)));
except
- Showmessage('輸入錯誤');
+ Showmessage(_Msg('輸入錯誤'));
Exit;
end;
if (NewCopies <= 0) and (NewCopies >= 10000) then
begin
- Showmessage('輸入範圍錯誤');
+ Showmessage(_Msg('輸入範圍錯誤'));
Exit;
end;
if (oldCopies <> NewCopies) and (NewCopies > 0) and (NewCopies < 10000) then
begin
- if DocNoNeedDiv(NowDocNo) and (NewCopies = 1) and (MessageDlg('修改至1份後此文件將無法再進行份數修改,是否確定??',mtConfirmation,[mbyes,mbcancel],0)= mrcancel) then
+ if DocNoNeedDiv(NowDocNo) and (NewCopies = 1) and (MessageDlg(_Msg('修改至1份後此文件將無法再進行份數修改,是否確定??'),mtConfirmation,[mbyes,mbcancel],0)= mrcancel) then
Exit;
SetDocDirCopies(NowCaseno,NowDocDir,NewCopies);
SetRecordEditedDocDir('A',NowCaseNo,NowDocDir);
DrawDocItem2(MytreeNode1,NowCaseno);
- Showmessage('修改完成');
+ Showmessage(_Msg('修改完成'));
end;
end;
@@ -3541,7 +3618,7 @@
if DisplayISB.FileName = '' then Exit;
if (ContextList.Count = 1) and ((FMode = 'NSCAN') or (FMode = 'ASCAN') or (FMode = 'DSCAN') or (FMode = 'ISCAN') or (FMode = 'SSCAN') or (FMode = 'MSCAN') or (FMode = 'RI_SCAN')) then
begin
- if Messagedlg(_Msg('刪除後(%s)案件無影像,將刪除此案件,是否確定刪除?'),mtconfirmation,[mbyes,mbcancel],0) = mrCancel then Exit;
+ if Messagedlg(Format(_Msg('刪除後(%s)案件無影像,將刪除此案件,是否確定刪除?'),[NowCaseno]),mtconfirmation,[mbyes,mbcancel],0) = mrCancel then Exit;
_DelTree(DisplayPath);
SetCaseList('D',NewTreeNode.IndexOf(MyTreeNode1),'');
LoadImgFile;
@@ -3612,7 +3689,7 @@
PM104.Visible := True; //檔案加入影像
end;
- if FModeName='異動件' then
+ if FModeName=_Msg('異動件') then
begin
PM101.Visible := True;
end;
@@ -3637,7 +3714,7 @@
if FMode='ESCAN' then
PM101.Visible:=false;
- if FModeName='異動件' then
+ if FModeName=_Msg('異動件') then
begin
PM101.Visible := True;
end;
@@ -3677,7 +3754,7 @@
PM101.Visible:=false;
end;
- if FModeName='異動件' then
+ if FModeName=_Msg('異動件') then
begin
PM101.Visible := True;
end;
@@ -3716,7 +3793,7 @@
PM101.Visible:=false;
end;
- if FModeName='異動件' then
+ if FModeName=_Msg('異動件') then
begin
PM101.Visible := True;
end;
@@ -3818,7 +3895,7 @@
PM605.Visible := True; //刪除
end;
- if FModeName<>'異動件' then
+ if FModeName<>_Msg('異動件') then
begin
if (FImgDelete='Y') then
begin
@@ -3891,7 +3968,7 @@
if SampleFormIDList.IndexOf(SampleFormID)<>-1 then
begin
// Show a custom dialog
- buttonSelected := messagedlg(SampleFormID+'已有範本,是否取代?',mtCustom,
+ buttonSelected := messagedlg(SampleFormID+_Msg('已有範本,是否取代?'),mtCustom,
[mbYes,mbCancel], 0);
if buttonSelected = mrCancel then
begin
@@ -4082,6 +4159,36 @@
end;
end;
+procedure TCB_IMGPSScanX.AddAttFileLBClick(Sender: TObject);
+var
+ i : Integer;
+ Addfile : String;
+begin
+ OpenDialog1.Filter := 'PDF files|*.pdf';
+ OpenDialog1.Options := [ofAllowMultiSelect];
+ if OpenDialog1.Execute then
+ begin
+ ShowText :=_Msg('檔案加入中,請稍候');
+ DataLoading(True,True);
+ for i := 0 to OpenDialog1.Files.Count - 1 do
+ begin
+ AddFile := HTTPEncode(UTF8Encode(ExtractFileName(OpenDialog1.Files.Strings[i])));
+ if FileExists(ImageSavePath+NowCaseno+'\'+AddFile) then
+ begin
+ if Messagedlg(Format(_Msg('%s己存在,是否覆蓋??'),[Addfile]),mtconfirmation,[mbyes,mbcancel],0) = mrcancel Then
+ Continue;
+ SetAttContextList('D',-1,NowCaseno,AddFile);
+ end;
+ // AttFileGB.Visible := True; //附加電子檔窗 //20120207楊玉說不在這加電子檔先拿掉
+ // Splitter2.Visible := True;
+ CopyFile(Pchar(OpenDialog1.Files.Strings[i]),Pchar(ImageSavePath+NowCaseno+'\'+AddFile),False);
+ SetAttContextList('A',-1,NowCaseno,AddFile);
+ LoadAttFile(NowCaseno);
+ end;
+ end;
+ DataLoading(False,False);
+end;
+
procedure TCB_IMGPSScanX.AddCredit1RGClick(Sender: TObject);
begin
if DisplayPath <> '' then
@@ -4101,7 +4208,7 @@
begin
IF not InitialOk Then
begin
- Showmessage(_msg('資訊尚未下載完成,請稍候或重新進入'));
+ Showmessage(_Msg('資訊尚未下載完成,請稍候或重新進入'));
Exit;
end;
if MyTreeNode1 = nil then
@@ -4135,6 +4242,26 @@
ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
SetDocDirtoSelected(MyTreeNode1,FirstDocDir);
TreeView1Click(self);
+end;
+
+procedure TCB_IMGPSScanX.AttListBoxClick(Sender: TObject);
+begin
+ DelAttFileLB.Enabled := False;
+ if AttListBox.ItemIndex >= 0 then
+ DelAttFileLB.Enabled := True;
+end;
+
+procedure TCB_IMGPSScanX.AttListBoxDblClick(Sender: TObject);
+var
+ AttFile : String;
+begin
+ if AttListBox.ItemIndex < 0 then Exit;
+
+ AttFile := HTTPEncode(UTF8Encode(AttListBox.Items.Strings[AttListBox.ItemIndex]));
+ if FileExists(DisplayPath+AttFile) then
+ ShellExecute(Application.Handle,'open',PChar(DisplayPath+AttFile),nil,nil,SW_SHOW)
+ else
+ Showmessage(Format(_Msg('找不到檔案:%s'),[AttFile]));
end;
procedure TCB_IMGPSScanX.BtnMouseEnter(Sender: TObject);
@@ -4235,6 +4362,26 @@
// SampleFormIDList.Add('31A00101011706A');
// SampleFormIDList.Add('31A00101021706A');
// SampleFormIDList.Add('31A00101031706A');
+end;
+
+procedure TCB_IMGPSScanX.Button5Click(Sender: TObject);
+begin
+ GetftpInfo(NowCaseno,'upload');
+ SetFtpInfo;
+ IIS_Ftp.FtpsConnect;
+
+ IIS_Ftp.FtpsToMain(FFtpPath,NowCaseno+'.pdf','d:\1.pdf',display1);
+end;
+
+procedure TCB_IMGPSScanX.Button6Click(Sender: TObject);
+begin
+ GetftpInfo(NowCaseno,'download');
+ SetFtpInfo;
+ IIS_Ftp.FtpsConnect;
+ IIS_Ftp.FtpsCWD(IIS_Ftp.FtpPath);
+ IIS_Ftp.FtpsReceive(NowCaseNo+'.zip','d:\'+NowCaseNo+'.zip');
+
+
end;
procedure TCB_IMGPSScanX.StatrTwainScan;
@@ -4730,7 +4877,7 @@
DocNo := FormCode2DocNo(FormID);
ScanDocDir := FindLastestDocDir(ScanCaseno,DocNo);
- if (FMode='ESCAN') and (FModeName='補件掃描') then //20180207 加入的特殊邏輯
+ if (FMode='ESCAN') and (FModeName=_Msg('補件掃描')) then //20180207 加入的特殊邏輯
begin
ScanDocDir := FindLastestDocDirForPage(ScanCaseno, DocNo,FormID);
end;
@@ -4858,7 +5005,7 @@
DeleteFile(LngPath+'mps.dat');
end;
////壓zip//////
- Showmessage('匯出完成,匯出檔案:'+LngPath+'mps.zip');
+ Showmessage(_Msg('匯出完成,匯出檔案:')+LngPath+'mps.zip');
end;
procedure TCB_IMGPSScanX.ImportBtClick(Sender: TObject);
@@ -4885,16 +5032,16 @@
str2dir(ZipPath);
if not ExecuteUnZip_Pwd(OpenDialog1.FileName,ZipPath,False,'9338430') then
- Showmessage('無法解壓縮');
+ Showmessage(_Msg('無法解壓縮'));
if not FileExists(ZipPath+'mps.dat') then
begin
- Showmessage('格式不符,無法匯入');
+ Showmessage(_Msg('格式不符,無法匯入'));
Exit;
end;
S.LoadFromFile(ZipPath+'mps.dat');
if (En_DecryptionStr_Base64('D',S.Strings[0],'9338430')<> ServerDate) then
begin
- Showmessage('檔案過期,無法匯入');
+ Showmessage(_Msg('檔案過期,無法匯入'));
Exit;
end;
@@ -4934,7 +5081,7 @@
S.Free;
_DelTree(ZipPath);
end;
- Showmessage('匯入完成');
+ Showmessage(_Msg('匯入完成'));
end;
procedure TCB_IMGPSScanX.HotKeyDown (var Msg : TMessage);
@@ -5326,6 +5473,12 @@
Validate := True;
end;
+procedure TCB_IMGPSScanX.HTTPSClientRedirection(Sender: TObject;
+ const OldURL: string; var NewURL: string; var AllowRedirection: Boolean);
+begin
+ AllowRedirection := True;
+end;
+
procedure TCB_IMGPSScanX.EnableImage(v:integer;Sender : TObject);
var bmp : Tbitmap;
begin
@@ -5516,6 +5669,7 @@
Result := False; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
EnCodeDateTime := En_DecryptionStr_Base64('E',ServerDate+GetBalance2Time(Balance),Mpskey);
+
ColumeStr := 'WORK_NO,DOC_NO,DOC_U_DESC,DOC_TYPE,DOC_VERSION,FORM_PAGES,START_DATE,STOP_DATE,IS_DOC_DIV,IS_IN_WH';
//If not ProcessServlet(HTTPSClient,FURL+'servlet/CWC02 ','checktime='+EnCodeDateTime+'&mode=1&col='+Doc_Inf_Colume+'&workno='+FWork_No,FReWrite.Text,Memo1) Then
@@ -5915,7 +6069,7 @@
begin
if FileName2FormCode(FileList.Strings[i]) = FormID then
begin
- if (FMode = 'ESCAN') and (FModeName<>'異動件') then
+ if (FMode = 'ESCAN') and (FModeName<>_Msg('異動件')) then
begin
if ISExistImg(ImageSavePath+CaseID+'\'+DocDir+'\'+FileList.Strings[i]) then
begin
@@ -6312,10 +6466,11 @@
In_Doc1,In_Doc2 : String;
AttachYN : String; //是否有附件 Y:有 N:沒有
- ST1,ST2:TStringList;
+ ST1,ST2,ST3:TStringList;
str1,str2:String;
must_formidStr :string;
last_add_formidstr :string;
+ ScanListStr:String;
casepath:String;
filesizeInt:integer;
case_page:string;
@@ -6330,6 +6485,7 @@
ContextList.LoadFromFile(Path+'Context.dat');
Context_DocnoList.LoadFromFile(Path+'Context_DocNo.dat');
end;
+
if FileExists(Path+'CustomDocNo.dat') then
Cust_DocNoList.LoadFromFile(Path+'CustomDocNo.dat');
@@ -6352,20 +6508,12 @@
//CaseResort(Path); //檔名照設定排序
CreateFormID_FormName(Path,CaseID); //產生FormID_FormName.dat
CreateDocNo_DocName(Path,CaseID); //產生DocNo_Name.dat
-//ShowMessage('EEEEEEEEEE');
Doc_Data := CreateDocNo_Info(CaseID); //產生保管袋文件 Docno,份數,頁數;Docno,份數,頁數 的回傳字串
-//ShowMessage('1111111111');
Doc_Data1 := CreateCustDocNo_Info(CaseID); //產生自定文件 Docname,份數,頁數;Docno,份數,頁數 的回傳字串
-//ShowMessage('2222222222');
In_Doc1 := CreateDocnoFrom_Info(CaseID); //產生被引進的保管袋文件資訊 Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
-//ShowMessage('333333333333333333');
In_Doc2 := CreateCustDocNoFrom_Info(CaseID); //產生被引進的自定文件資訊 Docno[tab]份數[tab]案件編號#13#10Docno[tab]份數[tab]案件編號
-//ShowMessage('4444444444444');
AttachYN := CreateAttach_Info(CaseID); //是否還有附件 Y:有 N:沒有
- //self.ReadCaseIndex()
-//ShowMessage('555555555555');
ReadCaseIndex(Path);
-//ShowMessage('DDDDDDDDDD');
//LoanDoc := 'Y';
//產生遮罩影像
// if FWork_No = 'CW' then
@@ -6381,6 +6529,7 @@
//ShowMessage(ST1.Text);
//ShowMessage(LastInitFormidList.Text);
ST2:=TStringList.Create;
+ ST3:=TStringlist.Create;
for I := 0 to ST1.Count - 1 do
begin
@@ -6394,6 +6543,8 @@
must_formidStr:=Copy(must_formidStr,1,Length(must_formidStr)-3) ;
//ShowMessage('must_formidStr='+must_formidStr);
//ShowMessage('AST2='+ST2.Text);
+
+
for I := 0 to LastInitFormidList.Count - 1 do
begin
if ST2.IndexOf(LastInitFormidList.Strings[i]) <> -1 then
@@ -6407,8 +6558,19 @@
last_add_formidstr:=last_add_formidstr+ST2.Strings[i]+'@#,';
end;
last_add_formidstr:=Copy(last_add_formidstr,1,Length(last_add_formidstr)-3) ;
+
+ ST3.LoadFromFile(path+'scanlist.dat');
+ for I := 0 to ST3.Count - 1 do
+ begin
+ if ScanListStr = '' then
+ ScanListStr := FileName2FormCode(ST3.Strings[i])
+ else
+ ScanListStr := Format('%s,%s',[ScanListStr,FileName2FormCode(ST3.Strings[i])]);
+ end;
+
ST1.Free;
ST2.Free;
+ ST3.Free;
//ShowMessage('last_add_formidstr='+last_add_formidstr);
///////必要formid 20170315 end //////////////////////////
@@ -6438,7 +6600,6 @@
if HaveMask then
ZipMaskFile(Path,MaskPath,Path,'MaskImg.zip'); //有遮罩設定的才產生
/////壓檔////
-
///檢查上傳的zip大小////
FName :=Path+ 'Img.zip';
@@ -6450,7 +6611,8 @@
//exit; //目前上傳檔案大小為xxMB,已超過50MB,無法上傳 %.3f ,[FileRec.Size / 1048576]
If FileRec.Size > StrtoInt(FMaxUploadSize) * 1048576 Then // 檢查檔案大小
Begin
- ShowMessage(Format('%s目前上傳檔案大小為%.3fMB,已超過'+FMaxUploadSize+'MB,無法上傳',[caseid,FileRec.Size / 1048576]) );
+ ShowMessage(Format(_Msg('%s目前上傳檔案大小為%.3fMB,已超過%sMB,無法上傳'),[caseid,FileRec.Size / 1048576,FMaxUploadSize]));
+ //ShowMessage(Format('%s目前上傳檔案大小為%.3fMB,已超過'+FMaxUploadSize+'MB,無法上傳',[caseid,FileRec.Size / 1048576]) );
FindClose(FileRec);
Result := False;
Exit;
@@ -6458,42 +6620,88 @@
FindClose(FileRec);
///檢查上傳的zip大小////
//ShowMessage('last_add_formidstr='+last_add_formidstr);
- ////上傳/////
+ if not GetftpInfo(CaseID,'upload') then //取案件上傳方式
+ begin
+ //Showmessage(_Msg()Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+'.');
+ DownFileErrStr := _Msg('取案件上傳資訊失敗!!')+HttpErrStr;
+ Result := False;
+ Exit;
+ end;
SendData:='data='+HTTPEncode(UTF8Encode(FData))
- +'&verify='+FVerify
- +'&form_id='+UpformID
- +'&loan_doc='+Case_loandoc
- +'&case_no='+TransName
- +'&doc_data='+HTTPEncode(UTF8Encode(Doc_Data))
- +'&doc_data1='+HTTPEncode(UTF8Encode(Doc_Data1))
- +'&attach='+AttachYN
- +'&case_page='+case_page
- +'&file_size='+IntToStr(filesizeInt)
- +'&must_formid='+must_formidStr //擁有的 formid
- +'&last_add_formid='+last_add_formidstr //當次新加的 formid
- +'&in_doc1='+HTTPEncode(UTF8Encode(In_Doc1))
- +'&in_doc2='+HTTPEncode(UTF8Encode(In_Doc2));
-//ShowMessage('SendData='+SendData);
-//ShowMessage(FData+#10#13+Doc_Data);
- if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/caseupload',SendData,'file',Path+'Img.zip',FReWrite,Memo1,False) then
- begin
- Showmessage(Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+'.');
- Result := False;
- Exit;
+ +'&verify='+FVerify
+ +'&form_id='+UpformID
+ +'&loan_doc='+Case_loandoc
+ +'&case_no='+TransName
+ +'&doc_data='+HTTPEncode(UTF8Encode(Doc_Data))
+ +'&doc_data1='+HTTPEncode(UTF8Encode(Doc_Data1))
+ +'&attach='+AttachYN
+ +'&case_page='+case_page
+ +'&file_size='+IntToStr(filesizeInt)
+ +'&must_formid='+must_formidStr //擁有的 formid
+ +'&last_add_formid='+last_add_formidstr //當次新加的 formid
+ +'&form_code='+ScanListStr //scanlist.dat 表單代號
+ +'&ftp_image_path='+FFtpPath //加傳FTP目錄 HTTP上傳時會是空白
+ +'&in_doc1='+HTTPEncode(UTF8Encode(In_Doc1))
+ +'&in_doc2='+HTTPEncode(UTF8Encode(In_Doc2));
+
+ case TransMode of
+ tsHttp :
+ begin
+ ////上傳/////
+ ShowText := CaseID+_Msg('資料上傳中(Http),請稍候');
+ DataLoading(True,True);
+ if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/caseupload',SendData,'file',Path+'Img.zip',FReWrite,Memo1,False) then
+ begin
+ Showmessage(Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason+'.');
+ Result := False;
+ Exit;
+ end;
+ if memo1.Lines.Strings[0] = '1' then
+ begin
+ Showmessage(Format(_Msg('')+_Msg(''),[CaseID])+memo1.Lines.Strings[1]+'。');
+ Result := False;
+ Exit;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/IMGPS00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ Showmessage(Format(_Msg('')+_Msg('')+_Msg('閒置過久或被登出,請重新登入'),[CaseID]));
+ Result := False;
+ Exit;
+ end;
+ ////上傳////
+ end;
+ tsFtp :
+ begin
+ ShowText := CaseID+_Msg('資料上傳中(Ftp),請稍候');
+ DataLoading(True,True);
+ SetFtpInfo;
+ try
+ if not IIS_Ftp.FtpsConnect then
+ begin
+ Showmessage(Format('無法連上Ftp主機,錯誤原因:%s',[FtpErrReason]));
+ Result := False;
+ Exit;
+ end;
+ if not IIS_Ftp.FtpsToMain(FFtpPath,CaseID+'.zip',Path+'Img.zip',display1) then
+ begin
+ Showmessage(Format(_msg('上傳案件(%s)時,發生錯誤,錯誤原因:%s'),[CaseID,FtpErrStr]));
+ Result := False;
+ Exit;
+ end;
+
+ if not FtpCaseComplete(SendData) then //Ftp上傳後通知完成
+ begin
+ Showmessage(Format(_Msg('通知案件(%s)Ftp上傳完成時,發生錯誤!!'),[CaseID])+HttpErrStr);
+ Result := False;
+ Exit;
+ end;
+ finally
+ IIS_Ftp.FtpsClose;
+ end;
+ end;
+
end;
- if memo1.Lines.Strings[0] = '1' then
- begin
- Showmessage(Format(_Msg('')+_Msg(''),[CaseID])+memo1.Lines.Strings[1]+'。');
- Result := False;
- Exit;
- end
- Else if Pos('<script type="text/javascript" src="scripts/IMGPS00/login.js"></script>',Memo1.Lines.Text) > 0 then
- begin
- Showmessage(Format(_Msg('')+_Msg('')+_Msg('閒置過久或被登出,請重新登入'),[CaseID]));
- Result := False;
- Exit;
- end;
- ////上傳////
+
if FMode = 'ESCAN' then //上傳舊件引入檔案 //20140616 原本先搬舊件再搬新件,改為先搬新件再搬舊件
begin
@@ -6503,9 +6711,6 @@
Exit;
end;
end;
-
-
-
// 呼叫Server完成 /////
{If not CaseComplete(Path,CaseID,MainCase) Then
begin
@@ -6722,6 +6927,52 @@
if DirectoryExists(SPath+'AttFile\') then
AttFile_Arrange(SPath+'AttFile\',DPath+'AttFile\');
end;}
+
+Function TCB_IMGPSScanX.DownLoadImage(Path,CaseID:String):Boolean;
+begin
+ Result := True;
+ if not GetftpInfo(CaseID,'download') then //取案件下載方式
+ begin
+ DownFileErrStr := _Msg('取案件下載資訊失敗,')+HttpErrStr;
+ Result := False;
+ Exit;
+ end;
+ case TransMode of
+ tsHttp:
+ begin
+ ShowText := _Msg('案件下載中(Http),請稍候');
+ DataLoading(True,True);
+ If not Down_Img(ImageSavePath+FCaseID+'\Download\',FCaseID) then
+ begin
+ Showmessage(FCaseID+_msg('載入異動影像時,網路發生錯誤')+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+ end;
+ tsFtp:
+ begin
+ ShowText := _Msg('案件下載中(Ftp),請稍候');
+ DataLoading(True,True);
+ SetFtpInfo;
+
+ if not IIS_Ftp.FtpsConnect then
+ begin
+ DownFileErrStr := Format(_Msg('無法連上Ftp主機,錯誤原因:%s')+#13+'%s',[FtpErrReason,FTPSClient1.LastReceivedReply]);
+ Result := False;
+ Exit;
+ end;
+ if not IIS_Ftp.FtpsDownloadFile(IIS_Ftp.FtpPath,CaseID+'.zip',Path+CaseID+'.zip',display1) then
+ begin
+ DownFileErrStr := Format(_Msg('錯誤原因:%s'),[FtpErrStr]);
+ Result := False;
+ Exit;
+ end;
+ ExecuteUnZip(Path+CaseID+'.zip',Path,False);
+ DeleteFile(Path+CaseID+'.zip');
+ end;
+ end;
+end;
+
Function TCB_IMGPSScanX.Down_Img(Path,CaseID:String):Boolean;
var
@@ -7309,6 +7560,49 @@
end;
end;
+Procedure TCB_IMGPSScanX.SetAttContextList(Mode:Char;Index:Integer;CaseNo,FileName:String); //'A:加入,I:插入,D:刪除,E:修改'
+var
+ i : Integer;
+begin
+ AttContextList.Clear;
+ if FileExists(ImageSavePath+CaseNo+'\AttContext.dat') then
+ AttContextList.LoadFromFile(ImageSavePath+CaseNo+'\AttContext.dat');
+ case Mode of
+ 'A':begin
+ AttContextList.Add(FileName);
+ end;
+ 'I':begin
+ AttContextList.Insert(Index,FileName);
+ end;
+ 'E':begin
+ AttContextList.Strings[Index] := FileName;
+ end;
+ 'D':begin
+ if Index <> -1 then
+ begin
+ AttContextList.Delete(Index);
+ end
+ Else if (text <> '') then
+ begin
+ for i := 0 to AttContextList.Count - 1 do
+ begin
+ if FileName = AttContextList.Strings[i] then
+ begin
+ AttContextList.Delete(i);
+ Break;
+ end;
+ end;
+ end;
+ if AttContextList.Count = 0 then
+ DeleteFile(ImageSavePath+CaseNo+'\AttContext.dat');
+ end;
+ end;
+ if AttContextList.Count > 0 then
+ begin
+ AttContextList.SaveToFile(ImageSavePath+CaseNo+'\AttContext.dat');
+ end;
+end;
+
Function TCB_IMGPSScanX.checkCaseOMRDone:Boolean; //檢查案件是否完成OMR檢核
var
i : Integer;
@@ -7438,7 +7732,36 @@
try
NewDocNo := FormCode2DocNo(NewFormID);
NewDocDir := FindLastestDocDir(CaseID,NewDocNo);
- if NewDocDir = '' then
+
+ /////20190319 Hong 原本的程式判斷怪怪的先Mark在下方,改用這段
+ if DocNoNeedDiv(NewDocNo) then //要分份數
+ begin
+ if ((FormCode2Page(NewFormID) = '01') and (GetDocDir_Page(CaseID,NewDocDir)>0)) or (NewDocDir = '') then
+ begin
+ NewDocDir := DocNo2DocNoDir(ImageSavePath + CaseID+'\',NewDocNo);
+ end
+ else
+ begin //20171016 真對補件影響 所加的判斷
+ ST1.Clear;
+ if FileExists(ImageSavePath + CaseID+'\'+NewDocDir+'\Context.dat') then
+ begin
+ ST1.LoadFromFile(ImageSavePath + CaseID+'\'+NewDocDir+'\Context.dat');
+ if (ST1.Count > 0) and ISExistImg(ImageSavePath + CaseID+'\'+NewDocDir+'\'+ST1.Strings[0]) then //20181210 多增加判斷ST1>0 否則會有機會出現List out of bound Hong
+ begin
+ NewDocDir := DocNo2DocNoDir(ImageSavePath + CaseID+'\',NewDocNo);
+ end;
+ end;
+ end;
+ end
+ Else //不分份數
+ begin
+ if NewDocNo <> '' then
+ NewDocDir := NewDocNo
+ else //Attach 附件
+ NewDocDir := DocNo2DocNoDir(ImageSavePath + CaseID+'\',NewDocNo);
+ end;
+
+ {if NewDocDir = '' then
begin
if DocNoNeedDiv(NewDocNo) then
begin
@@ -7465,7 +7788,7 @@
NewDocDir := DocNo2DocNoDir(ImageSavePath + NowCaseno+'\',NewDocNo);
end;
end;
- end;
+ end; }
if Not DirectoryExists(ImageSavePath+CaseID+'\'+NewDocDir) then
begin
MkDir(ImageSavePath+CaseID+'\'+NewDocDir);
@@ -7585,26 +7908,6 @@
Result := True;
end;
-Function TCB_IMGPSScanX.GetInputMask:String; //取得輸入的保單號碼
-var
- InputMaskForm: TInputMaskForm;
-begin
- Result := '';
- ShowText := _msg('輸入保單號碼中');
- DataLoading(True,True);
- InputMaskForm := TInputMaskForm.Create(self);
- try
- InputMaskForm.MaskEdit1.ClearSelection;
- if InputMaskForm.ShowModal = mrOk then
- begin
- Result := Trim(InputMaskForm.MaskEdit1.Text)+Trim(InputMaskForm.MaskEdit2.Text)+Trim(InputMaskForm.MaskEdit3.Text);
- end;
- finally
- InputMaskForm.Free;
- DataLoading(False,False);
- end;
-end;
-
Function TCB_IMGPSScanX.GetCasePage(Path,CaseID:String):Integer;
var
DocDirList,FileList,ST1 :TStringlist;
@@ -7654,7 +7957,9 @@
FileList.Delete(FileList.IndexOf(ST1.Strings[n]));
end;
end;
- end;
+ end
+ Else
+ if not DocNoAppear(iDocNo) then Continue; //20180925 Hong覺得應該要加這段
end;
@@ -7851,7 +8156,7 @@
begin
Result := ''; //沒找到
iCaseID := '';
- for i := 1 to MpsBarcodeinf.Count-1 do
+ for i := 1 to MpsBarcodeinf.Count do //20180920 拿掉-1
begin
if (Length(MpsBarcodeinf.text[i]) = CaseIDLength) then
begin
@@ -8098,6 +8403,18 @@
end;
if FileExists(SoPath+'Context.dat') then
ZipFileList.Add(SoPath+'Context.dat');
+
+ AttContextList.Clear;
+ if FileExists(SoPath+'ATTContext.dat') then
+ AttContextList.LoadFromFile(SoPath+'ATTContext.dat');
+ for n := 0 to AttContextList.Count - 1 do
+ begin
+ ZipFileList.Add(SoPath+AttContextList.Strings[n]);
+ end;
+ if FileExists(SoPath+'ATTContext.dat') then
+ ZipFileList.Add(SoPath+'ATTContext.dat');
+
+
if FileExists(SoPath+'Context_DocNo.dat') then
ZipFileList.Add(SoPath+'Context_DocNo.dat');
if FileExists(SoPath+'scanlist.dat') then
@@ -8304,7 +8621,7 @@
begin
if Mode = 'ID' then
begin
- Result := '自行輸入';
+ Result := _Msg('自行輸入');
for i := 0 to ID_S.Count - 1 do
begin
if Str = ID_S.Strings[i] then
@@ -8496,7 +8813,6 @@
if Col =RCol then
Result := RValue;
end;
-
end;
Procedure TCB_IMGPSScanX.DataLoading(Loading:Boolean;UseTimer:Boolean); //資料載入中要停止點選的動作
@@ -8713,7 +9029,6 @@
ST1.Add(FileList.Strings[n]);
end;
end;
-
for n := 0 to ST1.Count - 1 do
begin
if (FileList.IndexOf(ST1.Strings[n])<>-1) and (not DocNoIs_In_WH(iDocNo)) then
@@ -8721,7 +9036,11 @@
FileList.Delete(FileList.IndexOf(ST1.Strings[n]));
end;
end;
- end;
+ end
+ Else
+ if not DocNoAppear(iDocNo) then Continue; //20180925 Hong覺得應該加這段
+
+
LogFile1.LogToFile(logTimeString+'WH_category='+FWH_category+',Is_In_Wh='+FIs_In_Wh+',FileList.Text='+FileList.CommaText);
if FileList.Count=0 then Continue;
@@ -8745,7 +9064,7 @@
//DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('頁'),[CaseDocNoList.Strings[i],DocNo2DocName(Caseno,iDocNo),DocNoPage]));
//DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[CaseDocNoList.Strings[i],DocNo2DocName(Caseno,iDocNo),DocNoCopies]));
//ShowMessage('iDocNo='+iDocNo);
- DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),CaseDocNoList.Strings[i],DocNoCopies]));
+ DocNode := TreeView1.Items.AddChild(CaseNode,Format(_Msg('%s{%s}-%d份'),[DocNo2DocName(Caseno,iDocNo),CaseDocNoList.Strings[i],DocNoCopies]));
if GetUseCase('F',ImageSavePath+Caseno+'\',CaseDocNoList.Strings[i]) <> '' Then
begin
@@ -8775,7 +9094,7 @@
FormPage := GetFormIDPage(FileList,FormID);
FormName := FormCode2FormName(Caseno,FormID);
//FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
- FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
FormNode.ImageIndex := 4;
FormNode.SelectedIndex := 4;
DocNode.AlphaSort(True);
@@ -8789,7 +9108,8 @@
FormPage := GetFormIDPage(FileList,FormID);
FormName := FormCode2FormName(Caseno,FormID);
//FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
- FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
FormNode.ImageIndex := 4;
FormNode.SelectedIndex := 4;
DocNode.AlphaSort(True);
@@ -8815,8 +9135,8 @@
FormPage := GetFormIDPage(FileList,FormID);
FormName := FormCode2FormName(Caseno,FormID);
//FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
- FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
-
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
FormNode.ImageIndex := 4;
FormNode.SelectedIndex := 4;
DocNode.AlphaSort(True);
@@ -8850,7 +9170,7 @@
DocNoPage := FileList.Count;
iDocNo := DocNoDir2DocNo(AttName);
//DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[AttName,DocNo2DocName(Caseno,iDocNo),1]));
- DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),AttName,1]));
+ DocNode := TreeView1.Items.AddChild(CaseNode,Format(_Msg('%s{%s}-%d份'),[DocNo2DocName(Caseno,iDocNo),AttName,1]));
DocNode.ImageIndex := 2;
DocNode.SelectedIndex := 2;
for n := 0 to FileList.Count - 1 do
@@ -8861,8 +9181,8 @@
FormPage := GetFormIDPage(FileList,FormID);
FormName := FormCode2FormName(Caseno,FormID);
//FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
- FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
-
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
FormNode.ImageIndex := 4;
FormNode.SelectedIndex := 4;
end;
@@ -8884,7 +9204,9 @@
DocNoPage := FileList.Count;
iDocNo := DocNoDir2DocNo(AttName);
//DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[AttName,DocNo2DocName(Caseno,iDocNo),1]));
- DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),'Attach',1]));
+ //DocNode := TreeView1.Items.AddChild(CaseNode,Format('%s{%s}-%d'+_msg('份'),[DocNo2DocName(Caseno,iDocNo),'Attach',1]));
+ DocNode := TreeView1.Items.AddChild(CaseNode,Format(_Msg('%s{%s}-%d份'),[DocNo2DocName(Caseno,iDocNo),'Attach',1]));
+
DocNode.ImageIndex := 2;
DocNode.SelectedIndex := 2;
for n := 0 to FileList.Count - 1 do
@@ -8895,7 +9217,8 @@
FormPage := GetFormIDPage(FileList,FormID);
FormName := FormCode2FormName(Caseno,FormID);
//FormNode := TreeView1.Items.AddChild(DocNode,FormID+'{'+FormName+'}-'+inttostr(FormPage)+_msg('頁'));
- FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ //FormNode := TreeView1.Items.AddChild(DocNode,FormName+'{'+FormID+'}-'+inttostr(FormPage)+_msg('頁'));
+ FormNode := TreeView1.Items.AddChild(DocNode,Format(_Msg('%s{%s}-%d頁'),[FormName,FormID,FormPage]));
FormNode.ImageIndex := 4;
FormNode.SelectedIndex := 4;
@@ -8986,7 +9309,7 @@
PrtDialog : TPrintDialog;
S : String;
begin
- ShowText := '列印中,請稍候';
+ ShowText := _Msg('列印中,請稍候');
DataLoading(True,True);
Case2upload(NowCaseNo); //產生原影像結構
@@ -9070,6 +9393,7 @@
OldCaseInfoForm.IN_WH_DocNoList := TStringlist.Create;
OldCaseInfoForm.OldCopiesList := TStringlist.Create;
try
+ InitialLanguage(OldCaseInfoForm); //載入多國語言
OldCaseInfoForm.Notebook1.ActivePage := 'CaseInfo';
OldCaseInfoForm.ImageSavePath := ImageSavePath;
OldCaseInfoForm.CaseID := NowCaseNo;
@@ -9096,7 +9420,7 @@
Year := Caseinfolist.Strings[1];
BS_No := Caseinfolist.Strings[2];
IS_Old := Caseinfolist.Strings[3];
- With OldCaseInfoForm.ListView1.Items.Add do
+ With OldCaseInfoForm.OldCaseLV.Items.Add do
begin
Caption := CaseID;
SubItems.Add(Year);
@@ -9180,7 +9504,8 @@
iDocNoList.SaveToFile(NewPath+'CaseDocNo.dat');
iDocNo_CopiesList.SaveToFile(NewPath+'CaseDocNo_Copies.dat');
DrawDocItem2(MyTreeNode1,NowCaseNo);
- MyTreeNode1.Text := Format('%s-%d'+_Msg('頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+ //MyTreeNode1.Text := Format('%s-%d'+_Msg('頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
+ MyTreeNode1.Text := Format(_Msg('%s-%d頁'),[NowCaseno,GetCasePage(ImageSavePath,NowCaseNo)]);
NewTreeNodeRefresh;
ClearErrini(NowCaseno,MyTreeNode1); //清掉檢核記錄
end;
@@ -9255,6 +9580,9 @@
begin
ClearView(1);
PageLV.Clear;
+ AttListBox.Items.Clear;
+ AddAttFileLB.Enabled := False;
+ DelAttFileLB.Enabled := False;
DisplayPath := '';
ClearCaseIndex;
CaseHelpBtn.Visible := False;
@@ -9437,6 +9765,27 @@
end;
end;
+procedure TCB_IMGPSScanX.LoadAttFile(CaseID:String); //載入附加檔案
+var
+ AttContextList : TStringlist;
+ i : Integer;
+begin
+ AttListBox.Clear;
+ AttContextList := TStringlist.Create;
+ try
+ if FileExists(ImageSavePath+CaseID+'\AttContext.dat') then
+ begin
+ AttContextList.LoadFromFile(ImageSavePath+CaseID+'\AttContext.dat');
+ end;
+ for i := 0 to AttContextList.Count - 1 do
+ begin
+ AttListBox.Items.Add(UTF8Decode(HTTPDEcode(AttContextList.Strings[i])));
+ end;
+ finally
+ AttContextList.Free;
+ end;
+end;
+
function TCB_IMGPSScanX.logTimeString: String;
begin
Result:=FormatDateTime('yyyymmdd hh:mm:ss',now) +' caseNo='+NowCaseno+' ';
@@ -9563,9 +9912,9 @@
if FileExists(LngPath+'MPSLIC_SCAN.lic') then
DeleteFile(LngPath+'MPSLIC_SCAN.lic');
if LegalDate = '' then
- StatusBar1.Panels[4].Text := '註冊號:'+MacID+' 剩餘註冊數:'+inttostr(Totalcount-Nowcount);
+ StatusBar1.Panels[4].Text := Format(_Msg('註冊號:%s 剩餘註冊數:%s'),[MacID,inttostr(Totalcount-Nowcount)]);
if LegalDate <> '' then
- StatusBar1.Panels[4].Text := '*註冊號:'+MacID+'('+inttostr(Lic_Idx)+')'+' 剩餘註冊數:'+inttostr(Totalcount-Nowcount);
+ StatusBar1.Panels[4].Text := '*'+Format(_Msg('註冊號:%s 剩餘註冊數:%s'),[MacID+'('+inttostr(Lic_Idx)+')',inttostr(Totalcount-Nowcount)]);
end;
procedure TCB_IMGPSScanX.SmoothCBClick(Sender: TObject);
@@ -9609,9 +9958,9 @@
Anchor := FormID2Anchor(FormID);
//ParserPoint(CropMpsV.FindPoint(Anchor));
FindPoint(ImageScrollBox1.Graphic,UpLPoint,UpRPoint,DownLPoint,Anchor);
- if FileExists(CheckXmlPath+FormID+'.xml') then //沒有Xml就不用遮罩
+ if FileExists(CheckXmlPath+FWork_no+'\'+FormID+'.xml') then //沒有Xml就不用遮罩
begin
- XT.LoadFromFile(CheckXmlPath+FormID+'.xml');
+ XT.LoadFromFile(CheckXmlPath+FWork_no+'\'+FormID+'.xml');
if XT.SubNodes['/form/settype10/'].First then
Repeat
ColEName := XT.SubNodes['/form/settype10/'].NodeName;
@@ -9687,7 +10036,7 @@
if FIs_In_Wh <> 'Y' then //不是入庫文件
DocNo := 'YYYYY'+Add_Zoo(Ct,3);
- if (FMode='ESCAN') and (FWH_category='N') then //20170914 補件下改成非入庫的自定文件
+ if (FMode='ESCAN') and (FWH_category='N') then //20170914 補件下改成非入庫的自定文件
begin
DocNo := 'YYYYY'+Add_Zoo(Ct,3);
end;
@@ -9807,6 +10156,41 @@
end;
end;
+procedure TCB_IMGPSScanX.DelAttFileLBClick(Sender: TObject);
+var
+ AttFile : String;
+ SelectCount : Integer;
+ i : Integer;
+begin
+ SelectCount := 0;
+ for i := 0 to AttListBox.Items.Count - 1 do
+ begin
+ if AttListBox.Selected[i] then
+ inc(SelectCount);
+ end;
+ if SelectCount = 0 then
+ begin
+ Showmessage(_Msg('請選擇要刪除的電子檔'));
+ Exit;
+ end;
+
+ if SelectCount > 0 then
+ begin
+ if Messagedlg(Format(_Msg('是否刪除這%d筆??'),[SelectCount]),MtConfirmation,[mbyes,mbcancel],0) = mrcancel then Exit;
+ for i := 0 to AttListBox.Items.Count - 1 do
+ begin
+ if AttListBox.Selected[i] then
+ begin
+ AttFile := HTTPEncode(UTF8Encode(AttListBox.Items.Strings[i]));
+ DeleteFile(ImageSavePath+NowCaseNo+'\'+AttFile);
+ SetAttContextList('D',-1,NowCaseno,AttFile);
+ end;
+ end;
+ end;
+ LoadAttFile(NowCaseNo);
+ Showmessage(_msg('刪除完成'));
+end;
+
Procedure TCB_IMGPSScanX.DeleteCustomDocDir(Path,DocNo:String); //刪除自定文件DocNo
var
ini : Tinifile;
@@ -9853,7 +10237,7 @@
Printer object. Otherwise, if UsePrintJob is True, the Title
property of the TDibGraphicPrinter object is used to specify the
job name. }
- Printer.Title := '影像列印';
+ Printer.Title := _Msg('影像列印');
end;
IF (Page mod 2) = 1 Then
@@ -9878,7 +10262,7 @@
procedure PrintWithAutoPrintJob;
begin
GraphicPrinter.UsePrintJob := True;
- GraphicPrinter.Title := '影像列印';
+ GraphicPrinter.Title := _Msg('影像列印');
GraphicPrinter.Print(ImageScrollBox1.Graphic);
end;
@@ -10522,19 +10906,19 @@
//Showmessage(FUrl+'service/slic/SLIC02/useOther?'+senddata);
if not upFile(HTTPSClient,FUrl,'service/imgpsc/IMGPSC02/useOther',SendData,'file',OldCasePath+'UseCase.ini',FReWrite,Memo1,False) then
begin
- Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'+_Msg('錯誤代碼:')),[OldCaseID])+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
+ Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤代碼:')+Inttostr(HttpError.HttpErrorCode)+' '+HttpError.HttpReason);
Result := False;
Exit;
end;
if memo1.Lines.Strings[0] = '1' then
begin
- Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!')+_Msg('錯誤原因:'),[OldCaseID])+memo1.Lines.Strings[1]);
+ Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤原因:')+memo1.Lines.Strings[1]);
Result := False;
Exit;
end
Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
begin
- Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!')+_Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入'),[OldCaseID]));
+ Showmessage(Format(_Msg('傳送舊件編號(%s)檔案時,網路發生錯誤!!'),[OldCaseID])+_Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入'));
Result := False;
Exit;
end;
@@ -10561,6 +10945,136 @@
Exit;
end;
IF memo1.Lines.Strings[0] = '1' Then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end;
+end;
+
+Function TCB_IMGPSScanX.GetFtpinfo(CaseID,Action:String):Boolean;
+var
+ SendData : String;
+
+ Procedure DecodeFtpInfo(EncryStr:String);
+ var
+ FtpStr : String;
+ ftpinfoList : TStringlist;
+ begin
+ if EncryStr = '' then Exit;
+ ftpinfoList := TStringlist.Create;
+ try
+ FtpStr := En_DecryptionStr_Base64('D',EncryStr,MpsKey);
+ SplitString('!@!',FtpStr,ftpinfoList);
+ if ftpinfoList[0] = 'ftps' then
+ FFtpProtocol := fpftps
+ else if ftpinfoList[0] = 'ftp' then
+ FFtpProtocol := fpftp;
+ FFtpIP := ftpinfoList[1];
+ FFtpPort := strtoint(ftpinfoList[2]);
+ FFtpID := ftpinfoList[3];
+ FFtpPwd := ftpinfoList[4];
+
+ finally
+ ftpinfoList.Free;
+ end;
+ end;
+begin
+ Result := True;
+ SendData:='product='+FWork_no+'&case_no='+CaseID+'&department='+FUserUnit+'&action='+Action;
+ If not ProcessServlet_FormData(HTTPSClient,FURL+'service/imgpsc/IMGPSC02/ftps',SendData,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ IF (memo1.Lines.Strings[0] = '1') Then
+ begin
+ if memo1.Lines.Strings[1]='nodata' then //nodata 為正常可繼續的判斷
+ begin
+ TransMode := tsNone;
+ Result := True;
+ Exit;
+ end
+ else
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
+ Result := False;
+ Exit;
+ end;
+ end
+ Else if Pos('<script type="text/javascript" src="scripts/CW00/login.js"></script>',Memo1.Lines.Text) > 0 then
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+_Msg('閒置過久或被登出,請重新登入');
+ Result := False;
+ Exit;
+ end
+ else if (memo1.Lines.Strings[0] <> '0') then//不認識的字串
+ begin
+ HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[0];
+ Result := False;
+ Exit;
+ end;
+ TransMode := tsHttp;
+ FFtpPath := '';
+ if memo1.Lines.Strings[0] = '0' then
+ begin
+ if memo1.Lines.Strings[2] = 'Y' then
+ TransMode := tsFtp;
+ if memo1.Lines.Count > 3 then
+ begin
+ FFtpPath := memo1.Lines.Strings[3];
+ DecodeFtpInfo(memo1.Lines.Strings[4]);
+ end;
+ end;
+end;
+
+Procedure TCB_IMGPSScanX.SetFtpInfo; //餵入FTP資訊
+begin
+ IIS_Ftp.Display1 := Display1;
+ IIS_Ftp.FTPSClient1 := FTPSClient1;
+ IIS_Ftp.ElMemoryCertStorage := ElMemoryCertStorage;
+ IIS_Ftp.Display1 := Display1;
+ IIS_Ftp.Ftpip := FFtpIP;
+ IIS_Ftp.Ftpuserid := FFtpID;
+ IIS_Ftp.FtpPwd := FFtpPwd;
+ IIS_Ftp.FtpPath := FFtpPath;
+ IIS_Ftp.FtpPort := FFtpPort;
+ IIS_Ftp.FtpSSL := True;
+ IIS_Ftp.FtpPassive := True;
+ if FFtpProtocol = fpftp then
+ IIS_Ftp.FtpSSL := False;
+ IIS_Ftp.FtpEncryptDataChannel := true;
+ FTPSClient1.OnControlReceiveAsString := IIS_Ftp.EventHandlers.ControlReceiveAsString;
+ FTPSClient1.OnControlSendAsString := IIS_Ftp.EventHandlers.ControlSendAsString;
+ FTPSClient1.OnSSLError := IIS_Ftp.EventHandlers.SSLError;
+ FTPSClient1.OnCertificateValidate := IIS_Ftp.EventHandlers.CertificateValidate;
+ FTPSClient1.OnTextDataLine := IIS_Ftp.EventHandlers.TextDataLine;
+
+ {Showmessage(Format('Ftpip:%s'+#13
+ +'Ftpid:%s'+#13
+ +'Ftppwd:%s'+#13
+ +'Ftppath:%s'+#13
+ +'Ftpport:%s'+#13
+ ,[FFtpIP,FFtpid,FFtpPwd,Ftppath,inttostr(Ftpport)]));}
+end;
+
+Function TCB_IMGPSScanX.FtpCaseComplete(SendData:String):Boolean;
+begin
+ Result := True;
+ If not ProcessServlet_FormData(HTTPSClient,FURL+'service/imgpsc/IMGPSC02/caseupload',SendData,FReWrite,Memo1,False) Then
+ begin
+ HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
+ Result := False;
+ Exit;
+ end;
+ IF (memo1.Lines.Strings[0] = '1') or (memo1.Lines.Strings[0] <> '0') Then
begin
HttpErrStr := _Msg('錯誤原因:')+memo1.Lines.Strings[1];
Result := False;
@@ -10603,10 +11117,17 @@
Function TCB_IMGPSScanX.DocNoAppear(DocNo:String):Boolean; //DocNo是否可出現
begin
Result := True;
- if (((FIs_In_Wh = 'Y') and (not DocNoIs_In_WH(DocNo)) or (DocNo ='S_Attach')) or //入庫掃描不看非入庫文件
+
+ {if (((FIs_In_Wh = 'Y') and (not DocNoIs_In_WH(DocNo)) or (DocNo ='S_Attach')) or //入庫掃描不看非入庫文件
((FIs_In_Wh = 'N') and (DocNoIs_In_WH(DocNo)) or (DocNo ='Attach') )) {and //非入庫掃描不看入庫文件
+ (Copy(DocNo,1,5)<>'ZZZZZ')} {then
+ {Result := False;}
+ //20181031 應該要換成下面的判斷比較對,FIs_In_Wh傳空的話才會出全部
+ if (((FIs_In_Wh = 'Y') and ((not DocNoIs_In_WH(DocNo)) or (DocNo ='S_Attach'))) or //入庫掃描不看非入庫文件
+ ((FIs_In_Wh = 'N') and ((DocNoIs_In_WH(DocNo)) or (DocNo ='Attach') ))) {and //非入庫掃描不看入庫文件
(Copy(DocNo,1,5)<>'ZZZZZ')} then
Result := False;
+
end;
@@ -11023,16 +11544,18 @@
var
i,n:Integer;
OldPath,NewPath,DocDir : String;
- OldFile,NewFile : String;
+ OldFile,NewFile,AttFile : String;
DocNoList,FileList:TStringlist;
iFileList,iFile_DocNoList :TStringlist;
iDocDirList : TStringlist;
+ iAttFileList : TStringlist;
begin
DocNoList := TStringlist.Create;
FileList := TStringlist.Create;
iFileList := TStringlist.Create;
iFile_DocNoList := TStringlist.Create;
iDocDirList := TStringlist.Create;
+ iAttFileList := TStringlist.Create;
try
OldPath := ImageSavePath+CaseID+'\';
NewPath := ImageSavePath+CaseID+'\Upload\';
@@ -11117,6 +11640,18 @@
end;
end;
end;
+ OldPath := ImageSavePath+CaseID+'\';
+ if FileExists(OldPath+'AttContext.dat') then
+ begin
+ iAttFileList.LoadFromFile(OldPath+'AttContext.dat');
+ for n := 0 to iAttFileList.Count - 1 do
+ begin
+ AttFile := iAttFileList.Strings[n];
+ CopyFile(PWideChar(OldPath+AttFile),PWideChar(NewPath+AttFile),False);
+ end;
+ iAttFileList.SaveToFile(NewPath+'AttContext.dat');
+ end;
+
iFileList.SaveToFile(NewPath+'Context.dat');
iFile_DocNoList.SaveToFile(NewPath+'Context_DocNo.dat');
@@ -11124,6 +11659,7 @@
finally
iFileList.Free;
+ iAttFileList.Free;
iFile_DocNoList.Free;
DocNoList.Free;
FileList.Free;
@@ -11134,9 +11670,10 @@
var
i,n : Integer;
DocDir:String;
- OldFile,NewFile:String;
+ OldFile,NewFile,AttFile:String;
DocNoList,FileList : TStringlist;
iFileList,iFile_DocDirList :TStringlist;
+ iAttFileList :TStringlist;
AA,AA2,AA3,AA4:Boolean;
begin
@@ -11161,6 +11698,7 @@
FileList := TStringlist.Create;
iFileList := TStringlist.Create;
iFile_DocDirList := TStringlist.Create;
+ iAttFileList := TStringlist.Create;
try
//if Not FileExists(SoDir+'Context.dat') then Exit;
//iFileList.LoadFromFile(SoDir+'Context.dat');
@@ -11274,6 +11812,17 @@
CaseDocNo_CopiesList.SaveToFile(DeDir+'CaseDocNo_Copies.dat');
end;
end;}
+ if FileExists(SoDir+'AttContext.dat') then
+ begin
+ iAttFileList.LoadFromFile(SoDir+'AttContext.dat');
+ for i := 0 to iAttFileList.Count - 1 do
+ begin
+ AttFile := iAttFileList.Strings[i];
+ CopyFile(PWideChar(SoDir+AttFile),PWideChar(DeDir+AttFile),False);
+ end;
+ iAttFileList.SaveToFile(DeDir+'AttContext.dat');
+ end;
+
if FMode='ESCAN' then
begin
@@ -11911,7 +12460,7 @@
LogFile1.LogToFile(logTimeString+'最大頁數B段 '+CaseID+' '+'OMRFileList.Text='+OMRFileList.Text);
For i := 0 to OMRFileList.Count - 1 do
begin
- if FModeName='異動件' then Continue;
+ if FModeName=_Msg('異動件') then Continue;
if FWH_category='N' then
begin
@@ -11959,11 +12508,11 @@
//Display1.Lines.Add('OMRFile='+OMRFile+',OMRFormCode='+OMRFormCode+',OMRFormName='+OMRFormName);
LogFile1.LogToFile(logTimeString+'OMRFile='+OMRFile+',OMRFormCode='+OMRFormCode+',OMRFormName='+OMRFormName);
//ShowMessage('KKKKK');
- if not FileExists(CheckXmlPath+OMRFormCode+'.xml') then //沒有Xml就不用檢核
+ if not FileExists(CheckXmlPath+FWork_no+'\'+OMRFormCode+'.xml') then //沒有Xml就不用檢核
Continue;
//ShowMessage('11638 OMRFileList.Strings['+IntToStr(i)+']'+OMRFileList.Strings[i]);
- XT := TXmltool.Create(CheckXmlPath+OMRFormCode+'.xml');
+ XT := TXmltool.Create(CheckXmlPath+FWork_no+'\'+OMRFormCode+'.xml');
RelaXT := TXmltool.Create;
//ShowMessage('ModeNeedCheck='+BoolToStr(ModeNeedCheck(OMRErrInfo[4].Mode,FMode),true));
try
@@ -12052,7 +12601,7 @@
RelaFile := FormCode2FileName(RelaFormCode,ContextList);
RelaFormName := FormCode2FormName(CaseID,RelaFormCode);
Anchor1 := FormID2Anchor(RelaFormCode);
- RelaXT.LoadFromFile(CheckXmlPath+RelaFormCode+'.xml');
+ RelaXT.LoadFromFile(CheckXmlPath+FWork_no+'\'+RelaFormCode+'.xml');
Display1.Lines.Add(RelaFile+','+RelaFormName);
//ShowMessage(RelaFile);
//ShowMessage(ImageSavePath+CaseID+'\upload\'+RelaFile);
@@ -12156,7 +12705,7 @@
RelaFile := FormCode2FileName(RelaFormCode,ContextList);
RelaFormName := FormCode2FormName(CaseID,RelaFormCode);
Anchor1 := FormID2Anchor(RelaFormCode);
- RelaXT.LoadFromFile(CheckXmlPath+RelaFormCode+'.xml');
+ RelaXT.LoadFromFile(CheckXmlPath+FWork_no+'\'+RelaFormCode+'.xml');
if RelaFile<>'' then
begin
@@ -12507,7 +13056,7 @@
begin
Result := True; // http://192.168.0.101:8080/fbnp/servlet/CWC01?act=getservertime
//dnFile(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite.Text,Memo1,False,DownImgStatus)
- If not dnFile_Get(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite,Memo1,False,'') Then
+ If not dnFile_Get(HTTPSClient,FUrl+'Language.Lng','','',LngPath+'Language.Lng',FReWrite,Memo1,False,DownImgStatus) Then
begin
HttpErrStr := _Msg('錯誤代碼:')+inttostr(HttpError.HttpErrorCode)+','+HttpError.HttpReason;
Result := False;
@@ -12537,7 +13086,7 @@
List_FormCode,Err_FormCode: String;
iFormID : String;
begin
- ShowText := '影像顯示中,請稍候';
+ ShowText := _Msg('影像顯示中,請稍候');
DataLoading(True,True);
IF FormCode = 'ShowAll' then //顯示所有的影像 (因為附件會傳空字串,所以用ShowAll)
@@ -12654,7 +13203,7 @@
iGroupNo,page,Ct,int1 : Integer;
ST1:TStringList;
begin
- ShowText := '影像顯示中,請稍候';
+ ShowText := _Msg('影像顯示中,請稍候');
DataLoading(True,True);
ST1:=TStringList.Create;
//Display1.Lines.Clear;
@@ -12722,7 +13271,7 @@
ISB.AntiAliased := False;
ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[n],1);
- DpiResize(ISB.Graphic,36);
+ DpiResize(ISB.Graphic,36,False);
ISB.Redraw(true);
end;
@@ -12782,7 +13331,7 @@
if ISB.ZoomPercent > 100 then
ISB.AntiAliased := False;
ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[i],1);
- DpiResize(ISB.Graphic,36);
+ DpiResize(ISB.Graphic,36,False);
ISB.Redraw(true);
end;
FitPreViewISB;
@@ -12821,7 +13370,7 @@
if ISB.ZoomPercent > 100 then
ISB.AntiAliased := False;
ISB.LoadFromFile(Path+iDocNo+'\'+ContextList.Strings[i],1);
- DpiResize(ISB.Graphic,36);
+ DpiResize(ISB.Graphic,36,False);
ISB.Redraw(true);
//NowShowFileList.Add(ContextList.Strings[i]);
@@ -13979,7 +14528,7 @@
end;
if FileExists(CheckXmlPath+'OMRSet.zip') then //有更新
begin
- ExecuteUnZip(CheckXmlPath+'OMRSet.zip',CheckXmlPath,False);
+ ExecuteUnZip(CheckXmlPath+'OMRSet.zip',CheckXmlPath,True);
S.Clear;
S.Add(ServerDate+GetBalance2Time(Balance));
S.SaveToFile(CheckXmlPath+'LastDateTime.dat');
@@ -14037,7 +14586,7 @@
end;
if FileExists(SitePath+'KeyinSet.zip') then //有更新
begin
- ExecuteUnZip(SitePath+'KeyinSet.zip',SitePath,False);
+ ExecuteUnZip(SitePath+'KeyinSet.zip',SitePath,True);
S.Clear;
S.Add(ServerDate+GetBalance2Time(Balance));
S.SaveToFile(SitePath+'LastDateTime.dat');
@@ -14086,7 +14635,7 @@
end;
end;
//ShowMessage(SendData);
-//ShowMessage(Memo1.Lines.Text);
+
IF memo1.Lines.Strings[0] <> '0' Then
begin
HttpErrStr := _Msg('')+memo1.Lines.Strings[1]+'。';
@@ -14392,6 +14941,9 @@
Panel6.Visible := True;
Panel21.Visible := True;
Panel23.Visible := True;
+
+ AttFileGB.Visible := True;
+ Splitter2.Visible := True;
ScanDuplexCB.Visible := True; //雙面掃描
end
Else if FMode = 'FSCAN' then
@@ -14406,11 +14958,18 @@
Panel6.Visible := True;
Panel21.Visible := True;
Panel23.Visible := True;
+ AttFileGB.Visible := True;
+ Splitter2.Visible := True;
end;
DisplayMode(1,1,1,Panel9);
Application.ProcessMessages;
StatusBar1.Panels[0].Text := 'Ver'+GetCurrentVersionNo;
- StatusBar1.Panels[1].Text := _Msg('登入人員:')+FUserName;
+ StatusBar1.Panels[1].Text := 'Login User:'+FUserName;
+ {$IFDEF Test}
+ StatusBar1.Panels[0].Text := StatusBar1.Panels[0].Text+'(test)';
+ {$ENDIF}
+ StatusBar1.Panels[0].Text := StatusBar1.Panels[0].Text;
+
if FPrintyn = 'Y' then
PrtLB.Visible := True;
@@ -14418,11 +14977,24 @@
InitScrollRec;
If FUrl = '' then
begin
- Showmessage(_Msg('URL不能為空白,請洽詢程式人員'));
+ Showmessage(_Msg('URL cannot be empty,please contact system administrator'));
Exit;
end;
if FUrl[length(FUrl)]<>'/' then
FUrl := FUrl + '/';
+ //20221028 把語言檔改放至 Local目錄裡,才不會有些文字來不及使用
+ LngPath := GetLocalAppDir(Handle)+'MPS\CB_IMGPS\';
+ Str2Dir(LngPath);
+ ////下載語言檔///// 20170218 先拿調以便測試
+ If not DownLanguage Then
+ begin
+ Showmessage('Language File error!!'+HttpErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+
+ InitialLanguage(Self); //載入多國語言
+
if FWork_no='' then
begin
@@ -14457,6 +15029,7 @@
CaseList := TStringList.Create; //記錄掃瞄案件的順序
Context_DocnoList := TStringlist.Create; //案件裡的檔案Docno清單
ContextList := TStringlist.Create; //案件裡的檔案清單
+ AttContextList := TStringlist.Create; //案件裡的附加檔案清單
NoSaveBarCodeList := TStringlist.Create; //不儲存的條碼清單
FormID_List := TStringlist.Create; //FormID清單
DocNo_List := TStringlist.Create; //DocNo清單
@@ -14569,10 +15142,12 @@
if ImagePath[Length(ImagePath)] <> '\' then
ImagePath := ImagePath + '\';
//ShowMessage('ImagePath='+ImagePath);
- CheckXmlPath := ImagePath+'OMRSITE\'+FWork_No;
+ //CheckXmlPath := ImagePath+'OMRSITE\'+FWork_No;
+ CheckXmlPath := ImagePath+'OMRSITE\'; // 20200612 發現影像平台是取回所有業務的設定,所以不能有業務別目錄
//ShowMessage('CheckXmlPath='+CheckXmlPath);
- SitePath := ImagePath+'Site\'+FWork_No+'\';
- LngPath := ImagePath;
+ //SitePath := ImagePath+'Site\'+FWork_No+'\';
+ SitePath := ImagePath+'Site\'; // 20200612 發現影像平台是取回所有業務的設定,所以不能有業務別目錄
+ //LngPath := ImagePath; //改放至上面取Local目錄
SamplePath := ImagePath+'Sample\'+FWork_No+'\';
ImagePath := ImagePath + 'Scantemp\';
//ShowMessage('AA ImagePath='+ImagePath);
@@ -14611,15 +15186,8 @@
ShowText := _Msg('資料載入中,請稍候');
DataLoading(True,True);
- ////下載語言檔///// 20170218 先拿調以便測試
- If not DownLanguage Then
- begin
- Showmessage('Language File error!!'+HttpErrStr);
- DataLoading(False,False);
- Exit;
- end;
- InitialLanguage(Self); //載入多國語言
+ StatusBar1.Panels[1].Text := _Msg('登入人員:')+FUserName;
//FCaseID:='20150302180133';//測試用
////下載語言檔/////
//ShowMessage('OOOO');
@@ -14637,12 +15205,19 @@
begin
ShowText := _Msg('案件下載中,請稍候');
DataLoading(True,True);
- If not Down_Img(ImageSavePath+FCaseID+'\Download\',FCaseID) then
+ If not DownLoadImage(ImageSavePath+FCaseID+'\Download\',FCaseID) Then
+ begin
+ Showmessage(FCaseID+_msg('載入異動影像時,網路發生錯誤')+DownFileErrStr);
+ DataLoading(False,False);
+ Exit;
+ end;
+
+ {If not Down_Img(ImageSavePath+FCaseID+'\Download\',FCaseID) then
begin
Showmessage(FCaseID+_msg('載入異動影像時,網路發生錯誤')+HttpErrStr);
DataLoading(False,False);
Exit;
- end;
+ end;}
//Showmessage(ImageSavePath+FCaseID+'\Download\'+#10#13+ImageSavePath+FCaseID+'\');
Download2Case(ImageSavePath+FCaseID+'\Download\',ImageSavePath+FCaseID+'\');
//Showmessage('aaa');
@@ -14828,7 +15403,6 @@
CreateIn_WH(CaseID); //產生入庫文件文字檔 In_Wh.dat
Case2upload(CaseID); //產生原影像結構
TransPath := ImageSavePath+CaseID+'\Upload\';
-
{if FMode = 'ESCAN' then //20140320 yuu說拿掉此檢查
begin
S := TStringlist.Create;
@@ -14849,6 +15423,9 @@
begin
/////訊問是否可上傳/////
CaseTrans := CaseAsk(CaseID);
+ //Showmessage('記得改回來');
+ //CaseTrans := 0;
+
/////訊問是否可上傳////
end
Else ///不是新件、重掃件、異動件的不查
@@ -14923,7 +15500,7 @@
begin
uploadMsg:=NowCaseNo+_Msg('影像上傳完成。此案已進入下一流程');
end;
- if (FMode='ESCAN') and (FModeName='補件掃描') and (SuccessCount = 1) then
+ if (FMode='ESCAN') and (FModeName=_Msg('補件掃描')) and (SuccessCount = 1) then
begin
uploadMsg:=NowCaseNo+_Msg('影像已補件完成');
end;
@@ -14976,6 +15553,9 @@
ClearCaseIndex;
PageLv.Items.Clear; //頁數清單
//Panel18.Enabled:= False;
+ AttListBox.Items.Clear;
+ AddAttFileLB.Enabled := False;
+ DelAttFileLB.Enabled := False;
UseOldCaseLb.Visible := False;
PM107.Visible := False; //備註功能
CaseHelpBtn.Visible := False; //檢核失敗原因鈕
@@ -15051,9 +15631,9 @@
DisplayPath := ImageSavePath+NowCaseNo+'\';
if GetUseCase('F',DisplayPath,NowDocDir) <> '' then
- StatusBar1.Panels[2].Text := Format('從%s引用',[GetUseCase('F',DisplayPath,NowDocDir)]);
+ StatusBar1.Panels[2].Text := Format(_Msg('從%s引用'),[GetUseCase('F',DisplayPath,NowDocDir)]);
if GetUseCase('T',DisplayPath,NowDocDir) <> '' then
- StatusBar1.Panels[2].Text := Format('被%s引用',[GetUseCase('T',DisplayPath,NowDocDir)]);
+ StatusBar1.Panels[2].Text := Format(_Msg('被%s引用'),[GetUseCase('T',DisplayPath,NowDocDir)]);
if FLoanDoc_Enable = 'Y' then
begin
AddCredit1RG.Enabled := True;
@@ -15127,9 +15707,9 @@
DisplayPath := ImageSavePath+NowCaseNo+'\';
if GetUseCase('F',DisplayPath,NowDocDir) <> '' then
- StatusBar1.Panels[2].Text := Format('從%s引用',[GetUseCase('F',DisplayPath,NowDocDir)]);
+ StatusBar1.Panels[2].Text := Format(_Msg('從%s引用'),[GetUseCase('F',DisplayPath,NowDocDir)]);
if GetUseCase('T',DisplayPath,NowDocDir) <> '' then
- StatusBar1.Panels[2].Text := Format('被%s引用',[GetUseCase('T',DisplayPath,NowDocDir)]);
+ StatusBar1.Panels[2].Text := Format(_Msg('被%s引用'),[GetUseCase('T',DisplayPath,NowDocDir)]);
if FLoanDoc_Enable = 'Y' then
begin
@@ -15156,7 +15736,12 @@
if FileExists(DisplayPath+'CustomDocNo.dat') then
Cust_DocNoList.LoadFromFile(DisplayPath+'CustomDocNo.dat');
end;
- MyTreeNode1.Expand(True);
+ MyTreeNode1.Expand(True);
+ AddAttFileLB.Enabled := True;
+ if FileExists(DisplayPath+'ATTContext.dat') then
+ begin
+ LoadAttFile(NowCaseno);
+ end;
end
Else //點在NewTreenode or MyTreenode1 上
begin
@@ -15400,6 +15985,17 @@
end;
+procedure TCB_IMGPSScanX.TreeView1MouseDown(Sender: TObject;
+ Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
+begin
+ IF Button = TMouseButton(MbRight) Then
+ begin
+ MDown := True;
+ If TreeView1.GetNodeAt(X,Y) = nil then Exit;
+ TreeView1.Selected := TreeView1.GetNodeAt(X,Y);
+ end;
+end;
+
procedure TCB_IMGPSScanX.TreeView1MouseEnter(Sender: TObject);
begin
TreeView1.SetFocus;
@@ -15419,9 +16015,13 @@
IF Button = TMouseButton(MbRight) Then
begin
If TreeView1.GetNodeAt(X,Y) = nil then Exit;
- TreeView1.Selected := TreeView1.GetNodeAt(X,Y);
- TreeView1Click(self);
- TreeView1.PopupMenu.Popup(Mouse.CursorPos.X ,Mouse.CursorPos.Y);
+ if MDown then
+ begin
+ TreeView1Click(self);
+ TreeView1.PopupMenu.Popup(Mouse.CursorPos.X ,Mouse.CursorPos.Y);
+ end;
+ Application.ProcessMessages; //需加這行,不然有些全域變數會沒變到
+ MDown:= False;
end;
end;
@@ -15820,14 +16420,22 @@
OLEMISC_SIMPLEFRAME or OLEMISC_ACTSLIKELABEL,
tmApartment);
- SetLicenseKey('5B4451E676A1D2976FBB0F3BB18341336AF114C80B5ABAE7F6926B1CAF671F44' +
+ {SetLicenseKey('5B4451E676A1D2976FBB0F3BB18341336AF114C80B5ABAE7F6926B1CAF671F44' +
'BD2F098CCEDA922F6389BFAE398DA6AEE67F97EEA0C17234C20D75C12173DBDA' +
'594924D56DD8E342F454389C836AD880BB4352CA3BE62C4933B1BA3828E7462C' +
'60514F2ECDAD322E6128D841F12D24DA00B623106D3F08EBCAA917D8A97CAA34' +
'3D65F2DA567316457395BF9123EE53DF235D181F191A5712DBB27735284AA92D' +
'5DFA0C8308308505F384707E900C6063F53F1BFF4C6972607955D1AE517B19D0' +
'82CDD16301885403AD229D57BAEF98C056F31430861E5F68F339D658D72E1F92' +
- '63899412EC2D07891FE3AFD35F3E4A4390B2F0A8A1BF1B7D6160E5F1CC009B17');
+ '63899412EC2D07891FE3AFD35F3E4A4390B2F0A8A1BF1B7D6160E5F1CC009B17'); }
+ SetLicenseKey('4B2CF65E8C2A86CE8A0DD0F6A7DB03BC0B0126168B48AE4C27EBD78CAE75CF0F' +
+ 'A612190861E0D99F6FAE3ED97AC1941B5E97843CFFCF705A3787989072D4EB2C' +
+ 'AE6CAB3F5B69B86616ACC8A37AD6A2AB21C7BDD5C9AE1EDF9E4193D353805C9A' +
+ '403631CE8A3D0803FEBB1BE4C209CE7A63B1298EF080EB34B8628CED567D2B68' +
+ 'E777FAC58E2E32B7411FC217A04336231D1E861A93474759DAA6EDF53F6EB632' +
+ 'A3055229A52F3053FB844754741409022DDE3DFB19473510F2BE63328E74BE20' +
+ 'A6A29AA24878F91ADA9DF8CE1F320AF4DAF58EBF95D9BE761D70EEA274E19475' +
+ '1C15948B184264C5C49E60493F3BCD2FFAE2CA8B021D00B96F45550C5F050D8A');
SetLicenseKey('A6A94A8D91B08A9D58F300C0573EA9EF1B9DB0BF69B90E13B958DB4CB6B44F5A' +
--
Gitblit v1.8.0