Varela_PuntosVenta/Source/Modulos/FicherosEDI/Cliente/uCargarFicheros.pas
2008-04-15 09:28:58 +00:00

262 lines
6.2 KiB
ObjectPascal
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
uDMBase, cxControls;
const
TIME_OUT = 1000 * 60 * 45; // 45 MINUTOS
{ 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;
fROChannel.Timeout := TIME_OUT;
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.