unit uBizFacturasClienteServer; interface uses uDAInterfaces, uDADelta, uDABusinessProcessor, schFacturasClienteServer_Intf; const BIZ_SERVER_FACTURAS_CLIENTE = 'Server.FacturasCliente'; type TBizFacturasClienteServer = class(TFacturasClienteBusinessProcessorRules) private FReferenciaAutomatica : Boolean; function DarReferencia : String; function IncrementarReferencia : Boolean; protected procedure BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); override; procedure AfterProcessChange(Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; var CanRemoveFromDelta: Boolean); override; end; implementation uses Variants, uDAClasses, srvReferencias_Impl, uBusinessUtils, uROClasses, uDataModuleServer, schFacturasClienteClient_Intf; const REF_FACTURAS_CLIENTE = 'REF_FACTURAS_CLIENTE'; REF_ABONOS_CLIENTE = 'REF_ABONOS_CLIENTE'; CTE_TIPO_ABONO = 'A'; CTE_TIPO_FACTURA = 'F'; { TBizFacturasClienteServer } procedure TBizFacturasClienteServer.AfterProcessChange( Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; var CanRemoveFromDelta: Boolean); begin inherited; { Por defecto, mantenemos los deltas por si alguna tabla hija los necesita } CanRemoveFromDelta := False; case aChange.ChangeType of ctInsert, ctUpdate: begin if FReferenciaAutomatica then begin IncrementarReferencia; FReferenciaAutomatica := False; end; end; end; end; procedure TBizFacturasClienteServer.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 TBizFacturasClienteServer.DarReferencia: String; var ATipo : String; begin if TIPO = CTE_TIPO_FACTURA then ATipo := REF_FACTURAS_CLIENTE else ATipo := REF_ABONOS_CLIENTE; with TsrvReferencias.Create(NIL) do try Result := DarNuevaReferencia(ATipo, ID_EMPRESA) finally Free; end; end; function TBizFacturasClienteServer.IncrementarReferencia: Boolean; var ATipo : String; begin if TIPO = CTE_TIPO_FACTURA then ATipo := REF_FACTURAS_CLIENTE else ATipo := REF_ABONOS_CLIENTE; with TsrvReferencias.Create(NIL) do try Result := IncrementarValorReferencia(ATipo, Self.REFERENCIA, ID_EMPRESA) finally Free; end; end; initialization RegisterBusinessProcessorRules(BIZ_SERVER_FACTURAS_CLIENTE, TBizFacturasClienteServer); end.