Varela_PuntosVenta/Source/Servidor/Services/EDI_Sales/uDataModuleEDI_Sales.pas

484 lines
17 KiB
ObjectPascal
Raw Normal View History

unit uDataModuleEDI_Sales;
interface
uses
SysUtils, Classes, uDAScriptingProvider, uDADataTable, uDACDSDataTable,
uBizEDISales, uDAEngine, uDAADODriver, uDABINAdapter,
uDABusinessProcessor, uDAClasses, EDI_Reader, JvComponentBase;
type
TdmEDISales = class(TDataModule)
schEDISales: TDASchema;
private
function InsertarCabecera(const ACabData : TEDIFileData; var NumRegNuevos : integer) : Boolean;
function InsertarLugares(const ALugData : TEDIFileData; var NumRegNuevos : integer) : Boolean;
function InsertarArticulos(const AArtData : TEDIFileData; var NumRegNuevos : integer) : Boolean;
function GenerarVentasEDI: Boolean;
procedure InsertarLog(OK : Boolean; Error_msg : String = '');
public
function CargarFicheros(const FicheroCAB: String; const FicheroLUG: String;
const FicheroART: String; var NumRegNuevos: Integer ): Boolean;
end;
var
dmEDISales: TdmEDISales;
implementation
uses
EDI_Sales_Impl, Controls, Forms, uDataTableUtils, EDI_SLSRPT, uDAInterfaces,
Dialogs, schEDISalesClient_Intf, uDataModuleServer, Variants, EDI_Utils,
VARELA_Intf, EDI_Log_Impl, DB;
{$R *.dfm}
{ TdmEDISales }
function TdmEDISales.CargarFicheros(const FicheroCAB: String; const FicheroLUG: String;
const FicheroART: String; var NumRegNuevos: Integer ): Boolean;
var
Cab_Reader : TCABVEN_Reader;
Lug_Reader : TLUGVEN_Reader;
Art_Reader : TARTVEN_Reader;
NumRegNuevosCab : Integer;
NumRegNuevosLug : Integer;
NumRegNuevosArt : Integer;
begin
Result := True;
Cab_Reader := TCABVEN_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
Lug_Reader := TLUGVEN_Reader.Create;
try
Lug_Reader.Filename := FicheroLUG;
Lug_Reader.ReadFile;
Result := InsertarLugares (Lug_Reader.FileData, NumRegNuevosLug);
finally
FreeAndNIL(Lug_Reader);
end;
if Result then
begin
Art_Reader := TARTVEN_Reader.Create;
try
Art_Reader.Filename := FicheroART;
Art_Reader.ReadFile;
Result := InsertarArticulos(Art_Reader.FileData, NumRegNuevosArt);
finally
FreeAndNil(Art_Reader);
end;
end;
end;
if Result then
begin
NumRegNuevos := NumRegNuevosArt;
Result := GenerarVentasEDI;
end;
end;
function TdmEDISales.GenerarVentasEDI: Boolean;
var
ACommand: IDASQLCommand;
AConnection : IDAConnection;
begin
Result := False;
AConnection := dmServer.ConnectionManager.NewConnection(dmServer.ConnectionName);
ACommand := schEDISales.NewCommand(AConnection, 'RDX_P_CARGAR_VENTASEDI');
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 + ' (GenerarVentasEDI)');
end
end;
end;
function TdmEDISales.InsertarArticulos(const AArtData: TEDIFileData;
var NumRegNuevos : integer): Boolean;
var
i : integer;
Registro : PARTVEN;
AuxStr : String;
AuxInt : Integer;
AuxNum : Double;
ACommand: IDASQLCommand;
AConnection : IDAConnection;
begin
Result := False;
NumRegNuevos := 0;
AConnection := dmServer.ConnectionManager.NewConnection(dmServer.ConnectionName);
for i := 0 to AArtData.Count - 1 do
begin
Registro := AArtData[i];
if not Registro.REGISTRO_OK then
Continue;
ACommand := schEDISales.NewCommand(AConnection, 'Insert_RDX_ARTVEN');
with ACommand do
begin
ParamByName('CLAVE1').AsFloat := StrToFloat(Trim(Registro.CLAVE1));
ParamByName('CLAVE2').AsFloat := StrToInt(Trim(Registro.CLAVE2));
ParamByName('CLAVE3').AsFloat := StrToInt(Trim(Registro.CLAVE3));
ParamByName('EANART').AsString := Trim(Registro.EANART);
ParamByName('CODCOM').AsString := Trim(Registro.CODCOM);
ParamByName('NUMVAR').AsString := Trim(Registro.NUMVAR);
ParamByName('CODPRO').AsString := Trim(Registro.CODPRO);
ParamByName('DESARTCO').AsString := Trim(Registro.DESARTCO);
ParamByName('DESART').AsString := Trim(Registro.DESART);
ParamByName('NUMCON').AsString := Trim(Registro.NUMCON);
ParamByName('NUMLIS').AsString := Trim(Registro.NUMLIS);
ParamByName('CONESP1').AsString := Trim(Registro.CONESP1);
ParamByName('CONESP2').AsString := Trim(Registro.CONESP2);
ParamByName('CONESP3').AsString := Trim(Registro.CONESP3);
ParamByName('VALVEN').AsVariant := Null;
AuxStr := Trim(Registro.VALVEN);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('VALVEN').AsFloat := AuxNum/1000; //N(15,3)
ParamByName('PRENETCT').AsVariant := Null;
AuxStr := Trim(Registro.PRENETCT);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('PRENETCT').AsFloat := AuxNum/1000; //N(15,3)
ParamByName('PREBRUCT').AsVariant := Null;
AuxStr := Trim(Registro.PREBRUCT);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('PREBRUCT').AsFloat := AuxNum/1000; //N(15,3)
ParamByName('PREINFET').AsVariant := Null;
AuxStr := Trim(Registro.PREINFET);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('PREINFET').AsFloat := AuxNum/1000; //N(15,3)
ParamByName('PREINFFT').AsVariant := Null;
AuxStr := Trim(Registro.PREINFFT);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('PREINFFT').AsFloat := AuxNum/1000; //N(15,3)
ParamByName('PRECALCT').AsVariant := Null;
AuxStr := Trim(Registro.PRECALCT);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('PRECALCT').AsFloat := AuxNum/1000; //N(15,3)
ParamByName('PRENETCA').AsVariant := Null;
AuxStr := Trim(Registro.PRENETCA);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('PRENETCA').AsFloat := AuxNum/1000; //N(15,3)
ParamByName('PREBRUCA').AsVariant := Null;
AuxStr := Trim(Registro.PREBRUCA);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('PREBRUCA').AsFloat := AuxNum/1000; //N(15,3)
ParamByName('PREINFEA').AsVariant := Null;
AuxStr := Trim(Registro.PREINFEA);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('PREINFEA').AsFloat := AuxNum/1000; //N(15,3)
ParamByName('PREINFFA').AsVariant := Null;
AuxStr := Trim(Registro.PREINFFA);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('PREINFFA').AsFloat := AuxNum/1000; //N(15,3)
ParamByName('PRECALCA').AsVariant := Null;
AuxStr := Trim(Registro.PRECALCA);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('PRECALCA').AsFloat := AuxNum/1000; //N(15,3)
ParamByName('BAPRUN1').AsVariant := Null;
AuxStr := Trim(Registro.BAPRUN1);
if TryStrToInt (AuxStr, AuxInt) then
ParamByName('BAPRUN1').AsInteger := AuxInt;
ParamByName('UNIMED1').AsString := Trim(Registro.UNIMED1);
ParamByName('BAPRUN2').AsVariant := Null;
AuxStr := Trim(Registro.BAPRUN2);
if TryStrToInt (AuxStr, AuxInt) then
ParamByName('BAPRUN2').AsInteger := AuxInt;
ParamByName('UNIMED2').AsString := Trim(Registro.UNIMED2);
ParamByName('BAPRUN3').AsVariant := Null;
AuxStr := Trim(Registro.BAPRUN3);
if TryStrToInt (AuxStr, AuxInt) then
ParamByName('BAPRUN3').AsInteger := AuxInt;
ParamByName('UNIMED3').AsString := Trim(Registro.UNIMED3);
ParamByName('BAPRUN4').AsVariant := Null;
AuxStr := Trim(Registro.BAPRUN4);
if TryStrToInt (AuxStr, AuxInt) then
ParamByName('BAPRUN4').AsInteger := AuxInt;
ParamByName('UNIMED4').AsString := Trim(Registro.UNIMED4);
ParamByName('BAPRUN5').AsVariant := Null;
AuxStr := Trim(Registro.BAPRUN5);
if TryStrToInt (AuxStr, AuxInt) then
ParamByName('BAPRUN5').AsInteger := AuxInt;
ParamByName('UNIMED5').AsString := Trim(Registro.UNIMED5);
ParamByName('CANVEN').AsVariant := Null;
AuxStr := Trim(Registro.CANVEN);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('CANVEN').AsFloat := AuxNum/1000; // N(15,3)
ParamByName('EXIPRO').AsVariant := Null;
AuxStr := Trim(Registro.EXIPRO);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('EXIPRO').AsFloat := AuxNum/1000; // N(15,3)
ParamByName('DESEXI').AsVariant := Null;
AuxStr := Trim(Registro.DESEXI);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('DESEXI').AsFloat := AuxNum/1000; // N(15,3)
ParamByName('ESPMEDCV').AsString := Trim(Registro.ESPMEDCV);
ParamByName('ESPMEDEP').AsString := Trim(Registro.ESPMEDEP);
ParamByName('ESPMEDDE').AsString := Trim(Registro.ESPMEDDE);
ParamByName('CANDEV').AsVariant := Null;
AuxStr := Trim(Registro.CANDEV);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('CANDEV').AsFloat := AuxNum/1000; // N(15,3)
ParamByName('EANVEN').AsString := Trim(Registro.EANVEN);
ParamByName('NOMVEN').AsString := Trim(Registro.NOMVEN);
ParamByName('NUMTALON').AsString := Trim(Registro.NUMTALON);
ParamByName('CANVENNET').AsVariant := Null;
AuxStr := Trim(Registro.CANVENNET);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('CANVENNET').AsFloat := AuxNum/1000; // N(15,3)
ParamByName('UMEDVENNET').AsString := Trim(Registro.UMEDVENNET);
ParamByName('CANESP').AsVariant := Null;
AuxStr := Trim(Registro.CANESP);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('CANESP').AsFloat := AuxNum/1000; // N(15,3)
ParamByName('UMEDESP').AsString := Trim(Registro.UMEDESP);
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 + ' (InsertarArticulos SLS)');
end
end;
end; //for
end;
function TdmEDISales.InsertarCabecera(const ACabData: TEDIFileData;
var NumRegNuevos : integer): Boolean;
var
i : integer;
Registro : PCABVEN;
AuxStr : String;
AuxNum : Double;
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 := schEDISales.NewCommand(AConnection, 'Insert_RDX_CABVEN');
with ACommand do
begin
ParamByName('CLAVE1').AsFloat := StrToFloat(Trim(Registro.CLAVE1));
ParamByName('NUMINF').AsString := Trim(Registro.NUMINF);
ParamByName('FUNCION').AsString := Trim(Registro.FUNCION);
ParamByName('FECINI').AsDateTime := EDIDateToDateF(Trim(Registro.FECINI));
ParamByName('FECFIN').AsDateTime := EDIDateToDateF(Trim(Registro.FECFIN));
ParamByName('FECINF').AsDateTime := EDIDateToDateF(Trim(Registro.FECINF));
ParamByName('PERVENINI').AsVariant := Null;
ParamByName('PERVENFIN').AsVariant := Null;
if Length(Trim(Registro.PERVEN)) = 16 then
begin
ParamByName('PERVENINI').AsDateTime := EDIDateToDateF(Copy(Trim(Registro.PERVEN), 0, 8));
ParamByName('PERVENFIN').AsDateTime := EDIDateToDateF(Copy(Trim(Registro.PERVEN), 9, 8));
end;
ParamByName('EANOFI').AsString := Trim(Registro.EANOFI);
ParamByName('EANEMI').AsString := Trim(Registro.EANEMI);
ParamByName('EANREC').AsString := Trim(Registro.EANREC);
ParamByName('EANVEN').AsString := Trim(Registro.EANVEN);
ParamByName('EANALM').AsString := Trim(Registro.EANALM);
ParamByName('EANREP').AsString := Trim(Registro.EANREP);
ParamByName('EANPRO').AsString := Trim(Registro.EANPRO);
ParamByName('EANADMSA').AsString := Trim(Registro.EANADMSA);
ParamByName('EANREPSR').AsString := Trim(Registro.EANREPSR);
ParamByName('ADMVENSA').AsString := Trim(Registro.ADMVENSA);
ParamByName('REPDEPSR').AsString := Trim(Registro.REPDEPSR);
ParamByName('EMAILSA').AsString := Trim(Registro.EMAILSA);
ParamByName('NUMFAXSA').AsString := Trim(Registro.NUMFAXSA);
ParamByName('NUMTELSA').AsString := Trim(Registro.NUMTELSA);
ParamByName('NUMTLXSA').AsString := Trim(Registro.NUMTLXSA);
ParamByName('X400SA').AsString := Trim(Registro.X400SA);
ParamByName('EMAILSR').AsString := Trim(Registro.EMAILSR);
ParamByName('NUMFAXSR').AsString := Trim(Registro.NUMFAXSR);
ParamByName('NUMTELSR').AsString := Trim(Registro.NUMTELSR);
ParamByName('NUMTLXSR').AsString := Trim(Registro.NUMTLXSR);
ParamByName('X400SR').AsString := Trim(Registro.X400SR);
ParamByName('NUMPRE').AsString := Trim(Registro.NUMPRE);
ParamByName('NUMINFSC').AsString := Trim(Registro.NUMINFSC);
ParamByName('NUMCON').AsString := Trim(Registro.NUMCON);
ParamByName('FECPRE').AsDateTime := EDIDateToDateF(Trim(Registro.FECPRE));
ParamByName('FECINFSC').AsDateTime := EDIDateToDateF(Trim(Registro.FECINFSC));
ParamByName('FECCON').AsDateTime := EDIDateToDateF(Trim(Registro.FECCON));
ParamByName('DIVPED').AsString := Trim(Registro.DIVPED);
ParamByName('DIVPRE').AsString := Trim(Registro.DIVPRE);
ParamByName('DIVPAG').AsString := Trim(Registro.DIVPAG);
ParamByName('DIVPEDF').AsString := Trim(Registro.DIVPEDF);
ParamByName('DIVPREF').AsString := Trim(Registro.DIVPREF);
ParamByName('DIVPAGF').AsString := Trim(Registro.DIVPAGF);
ParamByName('TASCAM').AsVariant := Null;
AuxStr := Trim(Registro.TASCAM);
if TryStrToFloat (AuxStr, AuxNum) then
ParamByName('TASCAM').AsFloat := AuxNum/1000; // N(15,3)
ParamByName('FECTAS').AsDateTime := EDIDateToDateF(Trim(Registro.FECTAS));
end; // with
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 SLS)');
end
end;
end; //for
end;
procedure TdmEDISales.InsertarLog(OK: Boolean; Error_msg: String);
var
LogService : IEDI_Log;
begin
LogService := EDI_Log_Impl.TEDI_Log.Create(Self);
try
LogService.InsertarLog(Now, 'SLSRPT', OK, Error_msg);
finally
LogService := nil;
end;
end;
function TdmEDISales.InsertarLugares(const ALugData: TEDIFileData;
var NumRegNuevos : integer): Boolean;
var
i : integer;
Registro : PLUGVEN;
ACommand: IDASQLCommand;
AConnection : IDAConnection;
begin
Result := False;
NumRegNuevos := 0;
AConnection := dmServer.ConnectionManager.NewConnection(dmServer.ConnectionName);
for i := 0 to ALugData.Count - 1 do
begin
Registro := ALugData[i];
if not Registro.REGISTRO_OK then
Continue;
ACommand := schEDISales.NewCommand(AConnection, 'Insert_RDX_LUGVEN');
with ACommand do
begin
ParamByName('CLAVE1').AsFloat := StrToFloat(Trim(Registro.CLAVE1));
ParamByName('CLAVE2').AsInteger := StrToInt(Trim(Registro.CLAVE2));
ParamByName('EANLUG').AsString := Trim(Registro.EANLUG);
ParamByName('LUGVEN').AsString := Trim(Registro.LUGVEN);
ParamByName('FECINI').AsDateTime := EDIDateToDateF(Trim(Registro.FECINI));
ParamByName('FECFIN').AsDateTime := EDIDateToDateF(Trim(Registro.FECFIN));
ParamByName('PERVENINI').AsVariant := Null;
ParamByName('PERVENFIN').AsVariant := Null;
if Length(Trim(Registro.PERVEN)) >= 8 then
begin
ParamByName('PERVENINI').AsDateTime := EDIDateToDateF(Copy(Trim(Registro.PERVEN), 0, 8));
if Length(Trim(Registro.PERVEN)) = 16 then
ParamByName('PERVENFIN').AsDateTime := EDIDateToDateF(Copy(Trim(Registro.PERVEN), 9, 8))
end
end; // with
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 + '(InsertarLugares SLS)');
end
end;
end; //for
end;
initialization
dmEDISales := TdmEDISales.Create(nil);
finalization
FreeAndNil(dmEDISales);
end.