Varela_PuntosVenta/Source/Servidor/Services/EDI_Inventary/uDataModuleEDI_Inventary.pas

319 lines
9.5 KiB
ObjectPascal
Raw Normal View History

unit uDataModuleEDI_Inventary;
interface
uses
SysUtils, Classes, JvComponentBase, JvLogFile, uDAClasses,
uDABusinessProcessor, uDAScriptingProvider, uDADataTable, uDACDSDataTable,
uDataModuleServer, uBizEDIInventary, EDI_Reader, EDI_Inventary_Impl,
EDI_INVRPT, uDAInterfaces;
type
TdmEDIInventary = class(TDataModule)
schEDIInventary: TDASchema;
private
function InsertarCabecera(const ACabData : TEDIFileData; var NumRegNuevos : integer) : Boolean;
function InsertarLineas(const ALinData : TEDIFileData; var NumRegNuevos : integer) : Boolean;
function InsertarCantidades(const ACantData : TEDIFileData; var NumRegNuevos : integer) : Boolean;
procedure InsertarLog(OK : Boolean; Error_msg : String = '');
function GenerarInventarioEDI: Boolean;
function MarcarRegistrosUltimoInventarioEDI: Boolean;
public
function CargarFicheros(const FicheroCAB: String; const FicheroLIN: String;
const FicheroCANT: String; var NumRegNuevos: Integer ): Boolean;
end;
var
dmEDIInventary: TdmEDIInventary;
implementation
uses
Controls, Forms, uDataTableUtils, DB,
Dialogs, Variants, schEDIInventaryClient_Intf, EDI_Utils, EDI_Log_Impl,
VARELA_Intf;
{$R *.dfm}
{ TdmEDIInventary }
function TdmEDIInventary.CargarFicheros(const FicheroCAB, FicheroLIN,
FicheroCANT: String; var NumRegNuevos: Integer ): Boolean;
var
Cab_Reader : TCABINV_Reader;
Lin_Reader : TLININV_Reader;
Cant_Reader : TCANTINV_Reader;
NumRegNuevosCab : Integer;
NumRegNuevosLin : Integer;
NumRegNuevosCant : Integer;
begin
Result := True;
Cab_Reader := TCABINV_Reader.Create;
try
Cab_Reader.Filename := FicheroCAB;
Cab_Reader.ReadFile;
Result := InsertarCabecera (Cab_Reader.FileData, NumRegNuevosCab);
finally
FreeAndNIL(Cab_Reader);
end;
if Result then
begin
Lin_Reader := TLININV_Reader.Create;
try
Lin_Reader.Filename := FicheroLIN;
Lin_Reader.ReadFile;
Result := InsertarLineas (Lin_Reader.FileData, NumRegNuevosLin);
finally
FreeAndNIL(Lin_Reader);
end;
if Result then
begin
Cant_Reader := TCANTINV_Reader.Create;
try
Cant_Reader.Filename := FicheroCANT;
Cant_Reader.ReadFile;
Result := InsertarCantidades(Cant_Reader.FileData, NumRegNuevosCant);
finally
Cant_Reader.Free;
end;
end;
end;
if Result then
begin
NumRegNuevos := NumRegNuevosCant;
Result := GenerarInventarioEDI;
if Result then
Result := MarcarRegistrosUltimoInventarioEDI;
end;
end;
function TdmEDIInventary.GenerarInventarioEDI: Boolean;
var
ACommand: IDASQLCommand;
AConnection : IDAConnection;
begin
Result := False;
AConnection := dmServer.ConnectionManager.NewConnection(dmServer.ConnectionName);
ACommand := schEDIInventary.NewCommand(AConnection, 'RDX_P_CARGAR_INVENTARIOEDI');
AConnection.BeginTransaction;
try
ACommand.Execute;
AConnection.CommitTransaction;
Result := True;
except
on E : Exception do
begin
AConnection.RollbackTransaction;
if Pos('PRIMARY KEY', E.Message) = 0 then
InsertarLog(False, e.Message + ' (GenerarInventarioEDI)');
end
end;
end;
function TdmEDIInventary.InsertarCabecera(const ACabData: TEDIFileData;
var NumRegNuevos : integer) : Boolean;
var
i : integer;
Registro : PCABINV;
ACommand: IDASQLCommand;
AConnection : IDAConnection;
begin
Result := False;
NumRegNuevos := 0;
AConnection := dmServer.ConnectionManager.NewConnection(dmServer.ConnectionName);
for i := 0 to ACabData.Count - 1 do
begin
Registro := ACabData[i];
if not Registro.REGISTRO_OK then
Continue;
ACommand := schEDIInventary.NewCommand(AConnection, 'Insert_RDX_CABINV');
with ACommand do
begin
ParamByName('NUMDOC').AsString := Trim(Registro.NUMDOC);
ParamByName('TIPODOC').AsString := Trim(Registro.TIPODOC);
ParamByName('TIPOLIQ').AsString := Trim(Registro.TIPOLIQ);
ParamByName('FECHA').AsDateTime := EDIDateToDateF(Trim(Registro.FECHA));
ParamByName('FECHALIQ').AsDateTime := EDIDateToDateF(Trim(Registro.FECHALIQ));
ParamByName('EMISOR').AsString := Trim(Registro.EMISOR);
ParamByName('RECEPTOR').AsString := Trim(Registro.RECEPTOR);
ParamByName('DPTO').AsString := Trim(Registro.DPTO);
ParamByName('CENTRO').AsString := Trim(Registro.CENTRO);
end;
AConnection.BeginTransaction;
try
ACommand.Execute;
AConnection.CommitTransaction;
NumRegNuevos := NumRegNuevos + 1;
Result := True;
except
on E : Exception do
begin
AConnection.RollbackTransaction;
if Pos('PRIMARY KEY', E.Message) = 0 then
InsertarLog(False, e.Message + ' (InsertarCabecera INV)');
end
end;
end; //for
end;
function TdmEDIInventary.InsertarCantidades(const ACantData: TEDIFileData;
var NumRegNuevos : integer) : Boolean;
var
i : integer;
Registro : PCANTINV;
ACommand: IDASQLCommand;
AConnection : IDAConnection;
begin
Result := False;
NumRegNuevos := 0;
AConnection := dmServer.ConnectionManager.NewConnection(dmServer.ConnectionName);
for i := 0 to ACantData.Count - 1 do
begin
Registro := ACantData[i];
if not Registro.REGISTRO_OK then
Continue;
ACommand := schEDIInventary.NewCommand(AConnection, 'Insert_RDX_CANTINV');
with ACommand do
begin
ParamByName('NUMDOC').AsString := Trim(Registro.NUMDOC);
ParamByName('NUMLIN').AsInteger := StrToInt(Trim(Registro.NUMLIN));
ParamByName('NUMCANT').AsInteger := StrToInt(Trim(Registro.NUMCANT));
ParamByName('TIPOCANT').AsString := Trim(Registro.TIPOCANT);
ParamByName('CANTIDAD').AsFloat := StrToFloat(Trim(Registro.CANTIDAD));
ParamByName('CENTRO').AsString := Trim(Registro.CENTRO);
ParamByName('TMOV').AsString := Trim(Registro.TMOV);
ParamByName('FACT').AsString := Trim(Registro.FACT);
ParamByName('DEPTO').AsString := Trim(Registro.DEPTO);
ParamByName('IDVEN').AsString := Trim(Registro.IDVEN);
end;
AConnection.BeginTransaction;
try
ACommand.Execute;
AConnection.CommitTransaction;
NumRegNuevos := NumRegNuevos + 1;
Result := True;
except
on E : Exception do
begin
AConnection.RollbackTransaction;
if Pos('PRIMARY KEY', E.Message) = 0 then
InsertarLog(False, e.Message + ' (InsertarCantidades INV)');
end
end;
end; //for
end;
function TdmEDIInventary.InsertarLineas(const ALinData: TEDIFileData;
var NumRegNuevos : integer) : Boolean;
var
i : integer;
Registro : PLININV;
ACommand: IDASQLCommand;
AConnection : IDAConnection;
begin
Result := False;
NumRegNuevos := 0;
AConnection := dmServer.ConnectionManager.NewConnection(dmServer.ConnectionName);
for i := 0 to ALinData.Count - 1 do
begin
Registro := ALinData[i];
if not Registro.REGISTRO_OK then
Continue;
ACommand := schEDIInventary.NewCommand(AConnection, 'Insert_RDX_LININV');
with ACommand do
begin
ParamByName('NUMDOC').AsString := Trim(Registro.NUMDOC);
ParamByName('NUMLIN').AsInteger := StrToInt(Trim(Registro.NUMLIN));
ParamByName('CODART').AsString := Trim(Registro.CODART);
ParamByName('FAMILIA').AsString := Trim(Registro.FAMILIA);
ParamByName('BARRA').AsString := Trim(Registro.BARRA);
ParamByName('TALLA').AsString := Trim(Registro.TALLA);
ParamByName('MARCA').AsString := Trim(Registro.MARCA);
ParamByName('TAMANO').AsString := Trim(Registro.TAMANO);
ParamByName('SERIE').AsString := Trim(Registro.SERIE);
ParamByName('COLOR').AsString := Trim(Registro.COLOR);
ParamByName('MODELO').AsString := Trim(Registro.MODELO);
ParamByName('DIBUJO').AsString := Trim(Registro.DIBUJO);
ParamByName('DESCRIP').AsString := Trim(Registro.DESCRIP);
end;
AConnection.BeginTransaction;
try
ACommand.Execute;
AConnection.CommitTransaction;
NumRegNuevos := NumRegNuevos + 1;
Result := True;
except
on E : Exception do
begin
AConnection.RollbackTransaction;
if Pos('PRIMARY KEY', E.Message) = 0 then
InsertarLog(False, e.Message + ' (InsertarLineas INV)');
end
end;
end; //for
Result := True;
end;
procedure TdmEDIInventary.InsertarLog(OK: Boolean; Error_msg: String);
var
LogService : IEDI_Log;
begin
LogService := EDI_Log_Impl.TEDI_Log.Create(Self);
try
LogService.InsertarLog(Now, 'INVRPT', OK, Error_msg);
finally
LogService := nil;
end;
end;
function TdmEDIInventary.MarcarRegistrosUltimoInventarioEDI: Boolean;
var
ACommand: IDASQLCommand;
AConnection : IDAConnection;
begin
Result := False;
AConnection := dmServer.ConnectionManager.NewConnection(dmServer.ConnectionName);
ACommand := schEDIInventary.NewCommand(AConnection, 'RDX_P_SET_ULTIMOINVENTARIO');
AConnection.BeginTransaction;
try
ACommand.Execute;
AConnection.CommitTransaction;
Result := True;
except
on E : Exception do
begin
AConnection.RollbackTransaction;
if Pos('PRIMARY KEY', E.Message) = 0 then
InsertarLog(False, e.Message + ' (MarcarRegistrosUltimoInventarioEDI)');
end
end;
end;
initialization
dmEDIInventary := TdmEDIInventary.Create(nil);
finalization
FreeAndNil(dmEDIInventary);
end.