Varela_PuntosVenta/Source/Modulos/FicherosEDI/Cliente/uCargarFicheros.pas

259 lines
6.1 KiB
ObjectPascal

unit uCargarFicheros;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
uROClient, uROClientIntf, uRORemoteService, uROBinMessage,
uROServiceComponent, uROWinInetHttpChannel, Forms,
VARELA_Intf, uROTypes, uROEventRepository;
type
TCargarFicherosThread = class(TThread)
private
FROMessage: TROBinMessage;
fROChannel: TROWinInetHTTPChannel;
fRORemoteService: TRORemoteService;
FEventReceiver : TROEventReceiver;
fOnSuccess: TNotifyEvent;
fOnError: TNotifyEvent;
fLoadOK: Boolean;
fTimeStarted: TDateTime;
fErrorText: string;
fInfoStr: string;
FMaxConnectionErrors : Integer;
FChannelErrorscount: Integer;
procedure Run;
protected
FNombre : String;
procedure CargarFicheros; virtual; abstract;
procedure OnChannelFailure(Sender: TROTransportChannel;
anException: Exception; var Retry: Boolean);
procedure OnLoadSuccess; virtual;
procedure OnLoadError(const ErrorMsg: String); virtual;
public
property Nombre : string read FNombre;
property LoadOK: Boolean read floadOK;
property TimeStarted: TDateTime read fTimeStarted;
property ErrorText: string read fErrortext;
property InfoStr: string read fInfoStr;
destructor Destroy; override;
procedure Execute; override;
constructor Create;
end;
{ TCargarVentasThread }
TCargarVentasThread = class(TCargarFicherosThread)
private
fEDISalesService: IEDI_Sales;
FFicheroCAB : String;
FFicheroLUG : String;
FFicheroART : String;
protected
procedure CargarFicheros; override;
public
destructor Destroy; override;
constructor Create(const FicheroCAB: String; const FicheroLUG: String;
const FicheroART: String; aOnLoadSuccess, aOnLoadError: TNotifyEvent);
end;
{ TCargarInventarioThread }
TCargarInventarioThread = class(TCargarFicherosThread)
private
fEDIInventaryService: IEDI_Inventary;
FFicheroCAB : String;
FFicheroLIN : String;
FFicheroCANT : String;
protected
procedure CargarFicheros; override;
public
destructor Destroy; override;
constructor Create(const FicheroCAB: String; const FicheroLIN: String;
const FicheroCANT: String; aOnLoadSuccess, aOnLoadError: TNotifyEvent);
end;
implementation
uses
uDataModuleBase, cxControls;
{ TROThread }
destructor TCargarFicherosThread.Destroy;
begin
fROChannel.OnFailure := NIL;
FreeAndNil(fRORemoteService);
FreeAndNil(fROChannel);
FreeAndNil(fROMessage);
inherited;
end;
procedure TCargarFicherosThread.Run;
begin
ShowHourglassCursor;
try
CargarFicheros;
finally
HideHourglassCursor;
end;
end;
procedure TCargarFicherosThread.Execute;
begin
try
Run;
finally
Self.Destroy;
end;
end;
procedure TCargarFicherosThread.OnLoadError(const ErrorMsg: String);
begin
FErrorText := ErrorMsg;
if assigned(FOnError) then
FOnError(Self);
end;
procedure TCargarFicherosThread.OnLoadSuccess;
begin
fLoadOK := True;
if assigned(FOnSuccess) then
FOnSuccess(Self);
end;
procedure TCargarFicherosThread.OnChannelFailure(
Sender: TROTransportChannel; anException: Exception; var Retry: Boolean);
begin
if FChannelErrorsCount > FMaxConnectionErrors then
begin
FErrorText := anException.Message;
Self.Terminate;
end
else
begin
Inc(FChannelErrorsCount);
Sleep(1000);
Retry := true;
end;
end;
constructor TCargarFicherosThread.Create;
begin
inherited Create(True);
FMaxConnectionErrors := 5; //try 5 times on channel-error
fLoadOK := False;
fROMessage := TROBinMessage.Create(nil);
fROChannel := TROWinInetHTTPChannel.Create(NIL);
fROChannel.OnFailure := OnChannelFailure;
fROChannel.TargetURL := dmBase.Channel.TargetURL;
end;
{ TCargarVentasThread }
procedure TCargarVentasThread.CargarFicheros;
var
MsgError : String;
begin
try
if not fEDISalesService.CargarFicheroEDI(FFicheroCAB, FFicheroLUG,
FFicheroART, MsgError) then
OnLoadError(MsgError)
else
OnLoadSuccess;
except
on e: Exception do
OnLoadError(e.Message);
end;
end;
constructor TCargarVentasThread.Create(const FicheroCAB, FicheroLUG,
FicheroART: String; aOnLoadSuccess, aOnLoadError: TNotifyEvent);
begin
inherited Create;
FNombre := 'SLSRPT';
fRORemoteService := TRORemoteService.Create(nil);
fRORemoteService.Channel := fROChannel;
fRORemoteService.Message := fROMessage;
fRORemoteService.ServiceName := 'EDI_Sales';
fEDISalesService := fRORemoteService as IEDI_Sales;
FFicheroCAB := FicheroCAB;
FFicheroLUG := FicheroLUG;
FFicheroART := FicheroART;
if assigned(aOnLoadSuccess) then
fOnSuccess := aOnLoadSuccess;
if assigned(aOnLoadError) then
fOnError := aOnLoadError;
Resume;
end;
destructor TCargarVentasThread.Destroy;
begin
FEDISalesService := NIL;
inherited;
end;
{ TCargarInventarioThread }
procedure TCargarInventarioThread.CargarFicheros;
var
MsgError : String;
begin
inherited;
try
if not fEDIInventaryService.CargarFicheroEDI(FFicheroCAB, FFicheroLIN,
FFicheroCANT, MsgError) then
OnLoadError(MsgError)
else
OnLoadSuccess;
except
on e: Exception do
OnLoadError(e.Message);
end;
end;
constructor TCargarInventarioThread.Create(const FicheroCAB, FicheroLIN,
FicheroCANT: String; aOnLoadSuccess, aOnLoadError: TNotifyEvent);
begin
inherited Create;
FNombre := 'INVRPT';
fRORemoteService := TRORemoteService.Create(nil);
fRORemoteService.Channel := fROChannel;
fRORemoteService.Message := fROMessage;
fRORemoteService.ServiceName := 'EDI_Inventary';
fEDIInventaryService := fRORemoteService as IEDI_Inventary;
FFicheroCAB := FicheroCAB;
FFicheroLIN := FicheroLIN;
FFicheroCANT := FicheroCANT;
if assigned(aOnLoadSuccess) then
fOnSuccess := aOnLoadSuccess;
if assigned(aOnLoadError) then
fOnError := aOnLoadError;
Resume;
end;
destructor TCargarInventarioThread.Destroy;
begin
fEDIInventaryService := nil;
inherited;
end;
end.