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 {$INCLUDE ..\..\..\FactuGES.inc} 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; if not AContabilidadService.TieneCuentaAsociada(AIDProveedor, dsData.FieldValues[0]) then begin //Por cada ino de las empresas que tiene asociadas el contacto se añade una subcuenta en su ejercicio activo while not dsData.EOF do begin AContabilidadService.AnadirSubCuentaProveedor(AIDProveedor, bEsAcreedor, dsData.FieldValues[0], ANombre); dsData.Next; end; 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; {$IFDEF CONTABILIDAD} //En caso de no ignorar contabilidad se deberá 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; {$ENDIF} 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; {$IFDEF CONTABILIDAD} //En caso de no ignorar contabilidad se deberá 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; {$ENDIF} finally ACommand := NIL; end; end; initialization RegisterBusinessProcessorRules(BIZ_SERVER_PROVEEDOR, TBizProveedorServer); end.