AlonsoYSal_FactuGES2/Source/Modulos/Contactos/Model/uBizProveedoresServer.pas
2019-11-18 10:36:42 +00:00

253 lines
9.8 KiB
ObjectPascal
Raw Blame History

unit uBizProveedoresServer;
interface
uses
schContactosServer_Intf, uDAInterfaces, uDADelta,
uDADataTable, uDABusinessProcessor, uBizContactosServer;
const
BIZ_SERVER_PROVEEDOR = 'Server.Proveedor';
type
TBizProveedorServer = class(TBizContactosServer)
private
FReferenciaAutomatica : Boolean;
function DarReferencia : String;
function IncrementarReferencia : Boolean;
procedure CrearCuentaContable(aChange: TDADeltaChange);
protected
procedure Insert_Datos_Contacto(aChange: TDADeltaChange); override;
procedure Update_Datos_Contacto(aChange: TDADeltaChange); override;
procedure Delete_Datos_Contacto(aChange: TDADeltaChange); override;
procedure BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); override;
procedure AfterProcessChange(Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; var CanRemoveFromDelta: Boolean); override;
end;
implementation
uses
uDataModuleServer, uDAClasses, srvContabilidad_Impl,
schContactosClient_Intf, uBusinessUtils, FactuGES_Intf,
uROServer, SysUtils;
const
REF_PROVEEDOR = 'REF_PROVEEDOR';
{ TBizProveedorServer }
procedure TBizProveedorServer.AfterProcessChange(Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; var CanRemoveFromDelta: Boolean);
begin
inherited;
// Actualizamos el contador de referencias.
case aChange.ChangeType of
ctInsert, ctUpdate: begin
if FReferenciaAutomatica then
begin
IncrementarReferencia;
FReferenciaAutomatica := False;
end;
end;
end;
end;
procedure TBizProveedorServer.CrearCuentaContable(aChange: TDADeltaChange);
var
AIDProveedor: Integer;
bEsAcreedor: Integer;
ANombre: string;
ASchema : TDASchema;
ACurrentConn : IDAConnection;
dsData: IDADataset;
Intf: IInterface;
AContabilidadService: IsrvContabilidad;
AClientID: TGUID;
begin
AIDProveedor := aChange.NewValueByName[fld_ProveedoresID];
bEsAcreedor := aChange.NewValueByName[fld_ProveedoresES_ACREEDOR];
ANombre := aChange.NewValueByName[fld_ProveedoresNOMBRE];
CreateGUID(AClientID);
GetClassFactory('srvContabilidad').CreateInstance(AClientID, Intf);
AContabilidadService := Intf as IsrvContabilidad;
ASchema := BusinessProcessor.Schema;
ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor);
try
dsData := ASchema.NewDataset(ACurrentConn, 'DarEmpresasContacto', ['ID_CONTACTO'], [AIDProveedor]);
dsData.Active := True;
//Por cada una de las empresas que tiene asociadas el contacto se a<>ade una subcuenta en su ejercicio activo, en el caso de no tener
while not dsData.EOF do
begin
if not AContabilidadService.TieneCuentaAsociada(AIDProveedor, dsData.FieldValues[0]) then
AContabilidadService.AnadirSubCuentaProveedor(AIDProveedor, bEsAcreedor, dsData.FieldValues[0], ANombre);
dsData.Next;
end;
finally
dsData := NIL;
ACurrentConn := NIL;
end;
end;
procedure TBizProveedorServer.BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta);
begin
FReferenciaAutomatica := False;
case Sender.CurrentChange.ChangeType of
ctInsert, ctUpdate: begin
//Si la referencia no ha sido asignada le asignamos una nosotros
if REFERENCIAIsNull or (Length(REFERENCIA) = 0) then
begin
FReferenciaAutomatica := True;
REFERENCIA := DarReferencia;
end;
end;
end;
end;
function TBizProveedorServer.DarReferencia: String;
begin
Result := _DarReferenciaInterna(REF_PROVEEDOR);
end;
procedure TBizProveedorServer.Delete_Datos_Contacto(aChange: TDADeltaChange);
var
ASchema : TDASchema;
ACurrentConn : IDAConnection;
ACommand : IDASQLCommand;
begin
inherited;
ASchema := BusinessProcessor.Schema;
ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor);
ACommand := ASchema.NewCommand(ACurrentConn, 'Delete_ProveedoresDatos');
try
with ACommand do
begin
ParamByName('OLD_ID_PROVEEDOR').Value := aChange.OldValueByName[fld_ProveedoresID];
Execute;
end;
finally
ACommand := NIL;
end;
end;
function TBizProveedorServer.IncrementarReferencia: Boolean;
begin
Result := _IncrementarReferenciaInterna(REF_PROVEEDOR);
end;
procedure TBizProveedorServer.Insert_Datos_Contacto(aChange: TDADeltaChange);
var
ACurrentConn : IDAConnection;
ACommand : IDASQLCommand;
ASchema : TDASchema;
begin
inherited;
ASchema := BusinessProcessor.Schema;
ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor);
ACommand := ASchema.NewCommand(ACurrentConn, 'Insert_ProveedoresDatos');
try
with ACommand do
begin
ParamByName('ID_PROVEEDOR').Value := aChange.NewValueByName[fld_ProveedoresID];
ParamByName('DESCUENTO').Value := aChange.NewValueByName[fld_ProveedoresDESCUENTO];
ParamByName('DESCRIPCION_PROVEEDOR').Value := aChange.NewValueByName[fld_ProveedoresDESCRIPCION_PROVEEDOR];
ParamByName('CODIGO_ASIGNADO').Value := aChange.NewValueByName[fld_ProveedoresCODIGO_ASIGNADO];
ParamByName('REGIMEN_IVA').Value := aChange.NewValueByName[fld_ProveedoresREGIMEN_IVA];
ParamByName('ID_TIPO_IVA').Value := aChange.NewValueByName[fld_ProveedoresID_TIPO_IVA];
ParamByName('ID_FORMA_PAGO').Value := aChange.NewValueByName[fld_ProveedoresID_FORMA_PAGO];
ParamByName('TIENDA_WEB').Value := aChange.NewValueByName[fld_ProveedoresTIENDA_WEB];
ParamByName('HOMOLOGADO').Value := aChange.NewValueByName[fld_ProveedoresHOMOLOGADO];
ParamByName('CERTIFICACION').Value := aChange.NewValueByName[fld_ProveedoresCERTIFICACION];
ParamByName('GRUPO_PROVEEDOR').Value := aChange.NewValueByName[fld_ProveedoresGRUPO_PROVEEDOR];
ParamByName('IGNORAR_CONTABILIDAD').Value := aChange.NewValueByName[fld_ProveedoresIGNORAR_CONTABILIDAD];
ParamByName('TIENE_SUBCUENTA').Value := aChange.NewValueByName[fld_ProveedoresTIENE_SUBCUENTA];
ParamByName('NOMBRE_COMERCIAL').Value := aChange.NewValueByName[fld_ProveedoresNOMBRE_COMERCIAL];
ParamByName('ES_ACREEDOR').Value := aChange.NewValueByName[fld_ProveedoresES_ACREEDOR];
ParamByName('VENCIMIENTO_FACTURAS_1').Value := aChange.NewValueByName[fld_ProveedoresVENCIMIENTO_FACTURAS_1];
ParamByName('VENCIMIENTO_FACTURAS_2').Value := aChange.NewValueByName[fld_ProveedoresVENCIMIENTO_FACTURAS_2];
ParamByName('VENCIMIENTO_FACTURAS_3').Value := aChange.NewValueByName[fld_ProveedoresVENCIMIENTO_FACTURAS_3];
Execute;
end;
//En caso de no ignorar contabilidad se deber<65> dar de alta una cuenta para el cliente si el usuario no la ha asignado
if (aChange.NewValueByName[fld_ProveedoresIGNORAR_CONTABILIDAD] = 0) and
(aChange.NewValueByName[fld_ProveedoresTIENE_SUBCUENTA] = 0) then
begin
CrearCuentaContable(aChange);
end;
finally
ACommand := NIL;
end;
end;
procedure TBizProveedorServer.Update_Datos_Contacto(aChange: TDADeltaChange);
var
ASchema : TDASchema;
ACurrentConn : IDAConnection;
ACommand : IDASQLCommand;
begin
inherited;
ASchema := BusinessProcessor.Schema;
ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor);
ACommand := ASchema.NewCommand(ACurrentConn, 'Update_ProveedoresDatos');
try
with ACommand do
begin
ParamByName('OLD_ID_PROVEEDOR').Value := aChange.OldValueByName[fld_ProveedoresID];
ParamByName('ID_PROVEEDOR').Value := aChange.NewValueByName[fld_ProveedoresID];
ParamByName('DESCUENTO').Value := aChange.NewValueByName[fld_ProveedoresDESCUENTO];
ParamByName('DESCRIPCION_PROVEEDOR').Value := aChange.NewValueByName[fld_ProveedoresDESCRIPCION_PROVEEDOR];
ParamByName('CODIGO_ASIGNADO').Value := aChange.NewValueByName[fld_ProveedoresCODIGO_ASIGNADO];
ParamByName('REGIMEN_IVA').Value := aChange.NewValueByName[fld_ProveedoresREGIMEN_IVA];
ParamByName('ID_TIPO_IVA').Value := aChange.NewValueByName[fld_ProveedoresID_TIPO_IVA];
ParamByName('ID_FORMA_PAGO').Value := aChange.NewValueByName[fld_ProveedoresID_FORMA_PAGO];
ParamByName('TIENDA_WEB').Value := aChange.NewValueByName[fld_ProveedoresTIENDA_WEB];
ParamByName('HOMOLOGADO').Value := aChange.NewValueByName[fld_ProveedoresHOMOLOGADO];
ParamByName('CERTIFICACION').Value := aChange.NewValueByName[fld_ProveedoresCERTIFICACION];
ParamByName('GRUPO_PROVEEDOR').Value := aChange.NewValueByName[fld_ProveedoresGRUPO_PROVEEDOR];
ParamByName('IGNORAR_CONTABILIDAD').Value := aChange.NewValueByName[fld_ProveedoresIGNORAR_CONTABILIDAD];
ParamByName('TIENE_SUBCUENTA').Value := aChange.NewValueByName[fld_ProveedoresTIENE_SUBCUENTA];
ParamByName('NOMBRE_COMERCIAL').Value := aChange.NewValueByName[fld_ProveedoresNOMBRE_COMERCIAL];
ParamByName('ES_ACREEDOR').Value := aChange.NewValueByName[fld_ProveedoresES_ACREEDOR];
ParamByName('VENCIMIENTO_FACTURAS_1').Value := aChange.NewValueByName[fld_ProveedoresVENCIMIENTO_FACTURAS_1];
ParamByName('VENCIMIENTO_FACTURAS_2').Value := aChange.NewValueByName[fld_ProveedoresVENCIMIENTO_FACTURAS_2];
ParamByName('VENCIMIENTO_FACTURAS_3').Value := aChange.NewValueByName[fld_ProveedoresVENCIMIENTO_FACTURAS_3];
Execute;
end;
//En caso de no ignorar contabilidad se deber<65> dar de alta una cuenta para el cliente si el usuario no la ha asignado
if (aChange.NewValueByName[fld_ClientesIGNORAR_CONTABILIDAD] = 0) and
(aChange.NewValueByName[fld_ClientesTIENE_SUBCUENTA] = 0) then
begin
CrearCuentaContable(aChange);
end;
finally
ACommand := NIL;
end;
end;
initialization
RegisterBusinessProcessorRules(BIZ_SERVER_PROVEEDOR, TBizProveedorServer);
end.