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á 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á 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.