unit uEditorSituacionMontaje;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,
  uIEditorSituacionMontaje, uMontajesController, uBizMontajes,
  JvExControls, JvComponent, JvgWizardHeader, cxControls, cxContainer, cxEdit,
  cxTextEdit, cxMaskEdit, cxDropDownEdit, cxCalendar, cxDBEdit, ActnList;

type
  TfEditorSituacionMontaje = class(TForm, IEditorSituacionMontaje)
    pnlSeleccion: TPanel;
    bAceptar: TButton;
    bCancelar: TButton;
    JvgWizardHeader1: TJvgWizardHeader;
    rbPendiente: TRadioButton;
    rbEjecucion: TRadioButton;
    rbTerminado: TRadioButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    edtFechaInicio: TcxDateEdit;
    edtFechaFinalizacion: TcxDateEdit;
    ActionList1: TActionList;
    actPendiente: TAction;
    actEjecucion: TAction;
    actTerminado: TAction;
    actAceptar: TAction;
    Label4: TLabel;
    edtFechaMontajeIni: TEdit;
    Label5: TLabel;
    edtFechaMontajeFin: TEdit;
    actPagado: TAction;
    rbPagado: TRadioButton;
    Label6: TLabel;
    procedure actPendienteExecute(Sender: TObject);
    procedure actEjecucionExecute(Sender: TObject);
    procedure actTerminadoExecute(Sender: TObject);
    procedure actPagadoExecute(Sender: TObject);
    procedure actAceptarExecute(Sender: TObject);

  private
    FController: IMontajesController;
    FMontaje: IBizMontaje;
    function GetController : IMontajesController;
    procedure SetController (const Value : IMontajesController);

    function GetMontaje: IBizMontaje;
    procedure SetMontaje(const Value: IBizMontaje);
    procedure RefrescarEstado;
  public
    property Montaje: IBizMontaje read GetMontaje write SetMontaje;
    property Controller : IMontajesController read GetController write SetController;
  end;

implementation

{$R *.dfm}

uses
  uDateUtils, DateUtils;

{ TfEditorSituacionPedido }

procedure TfEditorSituacionMontaje.actEjecucionExecute(Sender: TObject);
begin
  RefrescarEstado;
end;

procedure TfEditorSituacionMontaje.actAceptarExecute(Sender: TObject);
var
  AControllerMontajes: IMontajesController;
  AMontaje: IBizMontaje;
begin
  if rbPendiente.Checked then
    if (FMontaje.SITUACION <> SITUACION_MONTAJE_PENDIENTE) then
       FController.CambiarSituacion(FMontaje, SITUACION_MONTAJE_PENDIENTE);

  if rbEjecucion.Checked then
    if (FMontaje.SITUACION <> SITUACION_MONTAJE_EJECUCION) then
      FController.CambiarSituacion(FMontaje, SITUACION_MONTAJE_EJECUCION, edtFechaInicio.Date);

  if rbTerminado.Checked then
     if (FMontaje.SITUACION <> SITUACION_MONTAJE_TERMINADO) then
        FController.CambiarSituacion(FMontaje, SITUACION_MONTAJE_TERMINADO, edtFechaFinalizacion.Date);

  if rbPagado.Checked then
     if (FMontaje.SITUACION <> SITUACION_MONTAJE_PAGADO) then
        FController.CambiarSituacion(FMontaje, SITUACION_MONTAJE_PAGADO);

  ModalResult := mrOk;
  Close;
end;

procedure TfEditorSituacionMontaje.actPagadoExecute(Sender: TObject);
begin
  RefrescarEstado;
end;

procedure TfEditorSituacionMontaje.actPendienteExecute(Sender: TObject);
begin
  RefrescarEstado;
end;

procedure TfEditorSituacionMontaje.actTerminadoExecute(Sender: TObject);
begin
  RefrescarEstado;
end;

function TfEditorSituacionMontaje.GetController: IMontajesController;
begin
  Result := FController;
end;

function TfEditorSituacionMontaje.GetMontaje: IBizMontaje;
begin
  Result := FMontaje;
end;

procedure TfEditorSituacionMontaje.SetController(const Value: IMontajesController);
begin
  FController := Value;
end;

procedure TfEditorSituacionMontaje.SetMontaje(const Value: IBizMontaje);
begin
  FMontaje := Value;
  if not FMontaje.DataTable.Active then
     FMontaje.DataTable.Open;

  edtFechaMontajeIni.Text := DateToStr(FMontaje.FECHA_INICIO);
  edtFechaMontajeFin.Text := DateToStr(FMontaje.FECHA_FIN);
  
  rbPendiente.Checked := (FMontaje.Situacion = SITUACION_MONTAJE_PENDIENTE);
  rbEjecucion.Checked := (FMontaje.Situacion = SITUACION_MONTAJE_EJECUCION);
  rbTerminado.Checked := (FMontaje.Situacion = SITUACION_MONTAJE_TERMINADO);
  rbPagado.Checked := (FMontaje.Situacion = SITUACION_MONTAJE_PAGADO);

  if not EsFechaVacia(FMontaje.FECHA_INICIO) then
  begin
    edtFechaMontajeIni.Text := DateToStr(FMontaje.FECHA_INICIO);
    edtFechaInicio.Date := FMontaje.FECHA_INICIO;
  end
  else begin
    edtFechaMontajeIni.Clear;
    edtFechaInicio.Clear;
  end;

  if not EsFechaVacia(FMontaje.FECHA_FIN) then
  begin
    edtFechaMontajeFin.Text := DateToStr(FMontaje.FECHA_FIN);
    edtFechaFinalizacion.Date := FMontaje.FECHA_FIN;
  end
  else begin
    edtFechaMontajeFin.Clear;
    edtFechaFinalizacion.Clear;
  end;
end;

procedure TfEditorSituacionMontaje.RefrescarEstado;
begin
  edtFechaInicio.Enabled := rbEjecucion.Checked;
  if (edtFechaInicio.Enabled) then
  begin
    if (edtFechaInicio.Date < FMontaje.FECHA_INICIO) then
      edtFechaInicio.Date := DateOf(Now);
  end;

  edtFechaFinalizacion.Enabled := rbTerminado.Checked;
  if (edtFechaFinalizacion.Enabled) then
  begin
    if (edtFechaFinalizacion.Date < FMontaje.FECHA_FIN) then
      edtFechaFinalizacion.Date := DateOf(Now);
  end;
end;

end.
