diff --git a/Source/Modulos/Recibos de cliente/Model/uBizRecibosClienteServer.pas b/Source/Modulos/Recibos de cliente/Model/uBizRecibosClienteServer.pas new file mode 100644 index 00000000..d864cfd0 --- /dev/null +++ b/Source/Modulos/Recibos de cliente/Model/uBizRecibosClienteServer.pas @@ -0,0 +1,104 @@ +unit uBizRecibosClienteServer; + +interface + +uses + uDAInterfaces, uDADelta, uDABusinessProcessor, + schRecibosClienteServer_Intf; + +const + BIZ_SERVER_RECIBOS_CLIENTE = 'Server.RecibosCliente'; + +type + TBizRecibosClienteServer = class(TRecibosClienteBusinessProcessorRules) + 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, uReferenciasUtils, uBusinessUtils, uROClasses, uDataModuleServer, + schRecibosClienteClient_Intf, srvReferencias_Impl; + +const + REF_RECIBOS_CLIENTE = 'REF_RECIBOS_CLIENTE'; + +{ TBizRecibosClienteServer } + +procedure TBizRecibosClienteServer.AfterProcessChange(Sender: TDABusinessProcessor; aChange: TDADeltaChange; Processed: Boolean; + var CanRemoveFromDelta: Boolean); +begin + + // No hay que quitar los deltas para que los datos del contacto se + // mantengan por si alguna tabla detalle lo necesita + // (por ejemplo, DireccionesContacto) + CanRemoveFromDelta := False; + + // Actualizamos el contador de referencias. + case aChange.ChangeType of + ctInsert, ctUpdate: begin + if FReferenciaAutomatica then + begin + IncrementarReferencia; + FReferenciaAutomatica := False; + end; + end; + end; +end; + +procedure TBizRecibosClienteServer.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 TBizRecibosClienteServer.DarReferencia: String; +var + ATipo : String; +begin + ATipo := REF_RECIBOS_CLIENTE; + + with TsrvReferencias.Create(NIL) do + try + Result := DarNuevaReferencia(ATipo, ID_EMPRESA) + finally + Free; + end; +end; + +function TBizRecibosClienteServer.IncrementarReferencia: Boolean; +var + ATipo : String; +begin + ATipo := REF_RECIBOS_CLIENTE; + + with TsrvReferencias.Create(NIL) do + try + Result := IncrementarValorReferencia(ATipo, + Self.REFERENCIA, ID_EMPRESA) + finally + Free; + end; +end; + +initialization + RegisterBusinessProcessorRules(BIZ_SERVER_RECIBOS_CLIENTE, TBizRecibosClienteServer); + +end.