unit uBizEjerciciosServer;

interface

uses
  uDAInterfaces, uDADelta, uDABusinessProcessor,
  schEjerciciosServer_Intf;

const
  BIZ_SERVER_EJERCICIOS = 'Server.Ejercicios';

type
  TBizEjerciciosServer = class(TEjerciciosBusinessProcessorRules)
  protected
    procedure BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta); override;
  end;

implementation

uses
  Variants, uDAClasses, uReferenciasUtils, uBusinessUtils, uROClasses,  uDataModuleServer,
  schEjerciciosClient_Intf;

{ TBizEjerciciosServer }

procedure TBizEjerciciosServer.BeforeProcessDelta(Sender: TDABusinessProcessor; const aDelta: IDADelta);
var
  ASchema : TDASchema;
  ACurrentConn : IDAConnection;
  Empresa : Variant;
  Id : Variant;

begin
  inherited;
  case Sender.CurrentChange.ChangeType of
    ctInsert, ctUpdate: begin
      //Si el ejercicio es activo debemos poner los demas ejercicios de la empresa a no activos
      if (Sender.CurrentChange.NewValueByName[fld_EjerciciosACTIVO] = 1) then
      begin
        ASchema := BusinessProcessor.Schema;
        ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor);

        try
          //Siempre va a estar rellena
          Empresa := Sender.CurrentChange.NewValueByName[fld_EjerciciosID_EMPRESA];
          ASchema.NewCommand(ACurrentConn, 'SetEjerciciosNoActivos', ['ID_EMPRESA'], [Empresa])
        except
          RaiseError('Error al desactivar los ejercicios de la empresa');
        end;
      end;
    end;
    ctDelete: begin
      //Si el ejercicio es activo debemos poner los demas ejercicios de la empresa a no activos, y poner el más
      //cercano como activo.
      if (Sender.CurrentChange.OldValueByName[fld_EjerciciosACTIVO] = 1) then
      begin
        ASchema := BusinessProcessor.Schema;
        ACurrentConn := GetBusinessProcessorConnection(BusinessProcessor);

        try
          //Siempre va a estar rellena
          Empresa := Sender.CurrentChange.OldValueByName[fld_EjerciciosID_EMPRESA];
          ASchema.NewCommand(ACurrentConn, 'SetEjerciciosNoActivos', ['ID_EMPRESA'], [Empresa]);
          Id := Sender.CurrentChange.OldValueByName[fld_EjerciciosID];
          ASchema.NewCommand(ACurrentConn, 'SetUltimoEjercicioActivo', ['ID'], [Id])

        except
          RaiseError('Error al desactivar los ejercicios de la empresa');
        end;
      end;
    end;
  end;
end;

initialization
  RegisterBusinessProcessorRules(BIZ_SERVER_EJERCICIOS, TBizEjerciciosServer);

end.
