unit uBizClientesServer; interface uses schContactosServer_Intf, uDAInterfaces, uDADelta, uDADataTable, uDABusinessProcessor, uBizContactosServer; const BIZ_SERVER_CLIENTE = 'Server.Cliente'; type TBizClienteServer = 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_CLIENTE = 'REF_CLIENTE'; { TBizClienteServer } procedure TBizClienteServer.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 TBizClienteServer.CrearCuentaContable(aChange: TDADeltaChange); var AContabilidadService : IsrvContabilidad; Intf : IInterface; AClientID : TGUID; ASchema : TDASchema; ACurrentConn : IDAConnection; dsData: IDADataset; ANombre: string; AIDCliente: Integer; AIDTienda: Integer; begin AIDCliente := aChange.NewValueByName[fld_ClientesID]; AIDTienda := aChange.NewValueByName[fld_ClientesID_TIENDA]; ANombre := aChange.NewValueByName[fld_ClientesNOMBRE]; 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'], [AIDCliente]); dsData.Active := True; if not AContabilidadService.TieneCuentaAsociada(AIDCliente, dsData.FieldValues[0]) then begin //Por cada una de las empresas que tiene asociadas el contacto se añade una subcuenta en su ejercicio activo while not dsData.EOF do begin AContabilidadService.AnadirSubCuentaCliente(AIDCliente, AIDTienda, dsData.FieldValues[0], ANombre); dsData.Next; end; end; finally dsData := NIL; ACurrentConn := NIL; end; end; procedure TBizClienteServer.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 TBizClienteServer.DarReferencia: String; begin Result := _DarReferenciaInterna(REF_CLIENTE); end; procedure TBizClienteServer.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_ClientesDatos'); try with ACommand do begin ParamByName('OLD_ID_CLIENTE').Value := aChange.OldValueByName[fld_ClientesID]; Execute; end; finally ACommand := NIL; end; end; function TBizClienteServer.IncrementarReferencia: Boolean; begin Result := _IncrementarReferenciaInterna(REF_CLIENTE); end; procedure TBizClienteServer.Insert_Datos_Contacto(aChange: TDADeltaChange); var ASchema : TDASchema; ACurrentConn : IDAConnection; ACommand : IDASQLCommand; begin inherited; ASchema := BusinessProcessor.Schema; ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor); ACommand := ASchema.NewCommand(ACurrentConn, 'Insert_ClientesDatos'); try with ACommand do begin ParamByName('ID_CLIENTE').Value := aChange.NewValueByName[fld_ClientesID]; ParamByName('ID_AGENTE').Value := aChange.NewValueByName[fld_ClientesID_AGENTE]; ParamByName('GRUPO_CLIENTE').Value := aChange.NewValueByName[fld_ClientesGRUPO_CLIENTE]; ParamByName('NOMBRE_COMERCIAL').Value := aChange.NewValueByName[fld_ClientesNOMBRE_COMERCIAL]; ParamByName('BLOQUEADO').Value := aChange.NewValueByName[fld_ClientesBLOQUEADO]; ParamByName('MOTIVO_BLOQUEO').Value := aChange.NewValueByName[fld_ClientesMOTIVO_BLOQUEO]; ParamByName('RECARGO_EQUIVALENCIA').Value := aChange.NewValueByName[fld_ClientesRECARGO_EQUIVALENCIA]; ParamByName('REGIMEN_IVA').Value := aChange.NewValueByName[fld_ClientesREGIMEN_IVA]; ParamByName('ID_TIPO_IVA').Value := aChange.NewValueByName[fld_ClientesID_TIPO_IVA]; ParamByName('ID_FORMA_PAGO').Value := aChange.NewValueByName[fld_ClientesID_FORMA_PAGO]; ParamByName('TIENDA_WEB').Value := aChange.NewValueByName[fld_ClientesTIENDA_WEB]; ParamByName('CODIGO_ASIGNADO').Value := aChange.NewValueByName[fld_ClientesCODIGO_ASIGNADO]; ParamByName('IGNORAR_CONTABILIDAD').Value := aChange.NewValueByName[fld_ClientesIGNORAR_CONTABILIDAD]; ParamByName('TIENE_SUBCUENTA').Value := aChange.NewValueByName[fld_ClientesTIENE_SUBCUENTA]; ParamByName('PROCEDENCIA_CLIENTE').Value := aChange.NewValueByName[fld_ClientesPROCEDENCIA_CLIENTE]; 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]; ParamByName('DESCUENTO').Value := aChange.NewValueByName[fld_ClientesDESCUENTO]; ParamByName('DESCUENTO_LINEA').Value := aChange.NewValueByName[fld_ClientesDESCUENTO_LINEA]; ParamByName('PRECIO_PUNTO').Value := aChange.NewValueByName[fld_ClientesPRECIO_PUNTO]; ParamByName('DESCUENTO_CAPITULO').Value := aChange.NewValueByName[fld_ClientesDESCUENTO_CAPITULO]; ParamByName('DIST_EMAIL').Value := aChange.NewValueByName[fld_ClientesDIST_EMAIL]; ParamByName('DIST_PASSWORD').Value := aChange.NewValueByName[fld_ClientesDIST_PASSWORD]; ParamByName('DIST_VALIDEZ').Value := aChange.NewValueByName[fld_ClientesDIST_VALIDEZ]; ParamByName('DIST_FORMA_PAGO').Value := aChange.NewValueByName[fld_ClientesDIST_FORMA_PAGO]; ParamByName('DIST_NOTAS').Value := aChange.NewValueByName[fld_ClientesDIST_NOTAS]; ParamByName('DIST_LOPD').Value := aChange.NewValueByName[fld_ClientesDIST_LOPD]; ParamByName('DIST_CONDICIONES').Value := aChange.NewValueByName[fld_ClientesDIST_CONDICIONES]; 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; procedure TBizClienteServer.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_ClientesDatos'); try with ACommand do begin ParamByName('OLD_ID_CLIENTE').Value := aChange.OldValueByName[fld_ClientesID]; ParamByName('ID_CLIENTE').Value := aChange.NewValueByName[fld_ClientesID]; ParamByName('ID_AGENTE').Value := aChange.NewValueByName[fld_ClientesID_AGENTE]; ParamByName('GRUPO_CLIENTE').Value := aChange.NewValueByName[fld_ClientesGRUPO_CLIENTE]; ParamByName('NOMBRE_COMERCIAL').Value := aChange.NewValueByName[fld_ClientesNOMBRE_COMERCIAL]; ParamByName('BLOQUEADO').Value := aChange.NewValueByName[fld_ClientesBLOQUEADO]; ParamByName('MOTIVO_BLOQUEO').Value := aChange.NewValueByName[fld_ClientesMOTIVO_BLOQUEO]; ParamByName('RECARGO_EQUIVALENCIA').Value := aChange.NewValueByName[fld_ClientesRECARGO_EQUIVALENCIA]; ParamByName('REGIMEN_IVA').Value := aChange.NewValueByName[fld_ClientesREGIMEN_IVA]; ParamByName('ID_TIPO_IVA').Value := aChange.NewValueByName[fld_ClientesID_TIPO_IVA]; ParamByName('ID_FORMA_PAGO').Value := aChange.NewValueByName[fld_ClientesID_FORMA_PAGO]; ParamByName('TIENDA_WEB').Value := aChange.NewValueByName[fld_ClientesTIENDA_WEB]; ParamByName('CODIGO_ASIGNADO').Value := aChange.NewValueByName[fld_ClientesCODIGO_ASIGNADO]; ParamByName('IGNORAR_CONTABILIDAD').Value := aChange.NewValueByName[fld_ClientesIGNORAR_CONTABILIDAD]; ParamByName('TIENE_SUBCUENTA').Value := aChange.NewValueByName[fld_ClientesTIENE_SUBCUENTA]; ParamByName('PROCEDENCIA_CLIENTE').Value := aChange.NewValueByName[fld_ClientesPROCEDENCIA_CLIENTE]; 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]; ParamByName('DESCUENTO').Value := aChange.NewValueByName[fld_ClientesDESCUENTO]; ParamByName('DESCUENTO_LINEA').Value := aChange.NewValueByName[fld_ClientesDESCUENTO_LINEA]; ParamByName('PRECIO_PUNTO').Value := aChange.NewValueByName[fld_ClientesPRECIO_PUNTO]; ParamByName('DESCUENTO_CAPITULO').Value := aChange.NewValueByName[fld_ClientesDESCUENTO_CAPITULO]; ParamByName('DIST_EMAIL').Value := aChange.NewValueByName[fld_ClientesDIST_EMAIL]; ParamByName('DIST_PASSWORD').Value := aChange.NewValueByName[fld_ClientesDIST_PASSWORD]; ParamByName('DIST_VALIDEZ').Value := aChange.NewValueByName[fld_ClientesDIST_VALIDEZ]; ParamByName('DIST_FORMA_PAGO').Value := aChange.NewValueByName[fld_ClientesDIST_FORMA_PAGO]; ParamByName('DIST_NOTAS').Value := aChange.NewValueByName[fld_ClientesDIST_NOTAS]; ParamByName('DIST_LOPD').Value := aChange.NewValueByName[fld_ClientesDIST_LOPD]; ParamByName('DIST_CONDICIONES').Value := aChange.NewValueByName[fld_ClientesDIST_CONDICIONES]; 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_CLIENTE, TBizClienteServer); end.