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; 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, srvReferencias_Impl; 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.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; var ATipo : String; begin ATipo := REF_CLIENTE; with TsrvReferencias.Create(NIL) do try Result := DarNuevaReferencia(ATipo, ID_EMPRESA, ID_TIENDA) finally Free; end; 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; var ATipo : String; begin ATipo := REF_CLIENTE; with TsrvReferencias.Create(NIL) do try Result := IncrementarValorReferencia(ATipo, Self.REFERENCIA, ID_EMPRESA, ID_TIENDA) finally Free; end; end; procedure TBizClienteServer.Insert_Datos_Contacto(aChange: TDADeltaChange); var ASchema : TDASchema; ACurrentConn : IDAConnection; ACommand : IDASQLCommand; idCliente: integer; idTienda: integer; idEmpresa: integer; Nombre: string; 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('VENCIMIENTO_FACTURAS').Value := aChange.NewValueByName[fld_ClientesVENCIMIENTO_FACTURAS]; 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]; 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 with TsrvContabilidad.Create(NIL) do try IdCliente := aChange.NewValueByName[fld_ClientesID]; IdTienda := aChange.NewValueByName[fld_ClientesID_TIENDA]; IdEmpresa := aChange.NewValueByName[fld_ClientesID_EMPRESA]; Nombre := aChange.NewValueByName[fld_ClientesNOMBRE]; if not TieneCuentaAsociada(idCliente, idEmpresa) then AnadirSubCuentaCliente(idCliente, idTienda, idEmpresa, Nombre); finally Free; end; end; finally ACommand := NIL; end; end; procedure TBizClienteServer.Update_Datos_Contacto(aChange: TDADeltaChange); var ASchema : TDASchema; ACurrentConn : IDAConnection; ACommand : IDASQLCommand; idCliente: integer; idTienda: integer; idEmpresa: integer; NombreComercial: string; 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('VENCIMIENTO_FACTURAS').Value := aChange.NewValueByName[fld_ClientesVENCIMIENTO_FACTURAS]; 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]; 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 with TsrvContabilidad.Create(NIL) do try IdCliente := aChange.NewValueByName[fld_ClientesID]; IdTienda := aChange.NewValueByName[fld_ClientesID_TIENDA]; IdEmpresa := aChange.NewValueByName[fld_ClientesID_EMPRESA]; Nombre := aChange.NewValueByName[fld_ClientesNOMBRE]; if not TieneCuentaAsociada(idCliente, idEmpresa) then AnadirSubCuentaCliente(idCliente, idTienda, idEmpresa, Nombre); finally Free; end; end; finally ACommand := NIL; end; end; initialization RegisterBusinessProcessorRules(BIZ_SERVER_CLIENTE, TBizClienteServer); end.