{
===============================================================================
  Copyright (©) 2006. Rodax Software.
===============================================================================
  Los contenidos de este fichero son propiedad de Rodax Software titular del
  copyright. Este fichero sólo podrá ser copiado, distribuido y utilizado,
  en su totalidad o en parte, con el permiso escrito de Rodax Software, o de
  acuerdo con los términos y condiciones establecidas en el acuerdo/contrato
  bajo el que se suministra.
  -----------------------------------------------------------------------------
  Web:  www.rodax-software.com
===============================================================================
  Fecha primera versión: 22-05-2006
  Versión actual: 1.0.0
  Fecha versión actual: 22-05-2006
===============================================================================
  Modificaciones:

    Fecha         Comentarios
    ---------------------------------------------------------------------------
===============================================================================
}

unit uEditorReferencias;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  uIEditorReferencias, uBizReferencias, uReferenciasController, DB, uDADataTable,
  ActnList, Grids, DBGrids, StdCtrls, ComCtrls, cxStyles, cxCustomData,
  cxGraphics, cxFilter, cxData, cxDataStorage, cxEdit, cxDBData, cxGridLevel,
  cxGridCustomTableView, cxGridTableView, cxGridDBTableView, cxClasses,
  cxControls, cxGridCustomView, cxGrid, cxTextEdit, uDAInterfaces;

type
  TfEditorReferencias = class(TForm, IEditorReferencias)
    ActionList1: TActionList;
    dsReferencias: TDADataSource;
    actAceptar: TAction;
    actCancelar: TAction;
    bAceptar: TButton;
    bCancelar: TButton;
    actCerrar: TAction;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    Label1: TLabel;
    ListaReferencias: TcxGrid;
    ListaReferenciasView: TcxGridDBTableView;
    ListaReferenciasViewCODIGO: TcxGridDBColumn;
    ListaReferenciasViewDESCRIPCION: TcxGridDBColumn;
    ListaReferenciasViewVALOR: TcxGridDBColumn;
    ListaReferenciasLevel: TcxGridLevel;
    procedure FormShow(Sender: TObject);

    procedure actAceptarExecute(Sender: TObject);
    procedure actCancelarExecute(Sender: TObject);
    procedure actCerrarExecute(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure ListaReferenciasViewVALORPropertiesValidate(Sender: TObject;
      var DisplayValue: Variant; var ErrorText: TCaption; var Error: Boolean);

  protected
    FReferencias: IBizReferencia;
    FController: IReferenciasController;
    function GetReferencias: IBizReferencia;
    procedure SetReferencias(const Value: IBizReferencia);
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    property Referencias: IBizReferencia read GetReferencias write SetReferencias;
  end;


implementation
{$R *.dfm}

{ TfEditorReferencias }

uses
  uDialogUtils, Dialogs, uDataTableUtils;

function TfEditorReferencias.GetReferencias: IBizReferencia;
begin
  Result := FReferencias;
end;

procedure TfEditorReferencias.ListaReferenciasViewVALORPropertiesValidate(
  Sender: TObject; var DisplayValue: Variant; var ErrorText: TCaption;
  var Error: Boolean);
begin
//  Showmessage('Validar'); No es necesario porque si no pone número lo pone el servidor 
end;

procedure TfEditorReferencias.SetReferencias(const Value: IBizReferencia);
begin
  FReferencias := Value;
  dsReferencias.DataTable := FReferencias.DataTable;
  dsReferencias.DataTable.Open;
end;

constructor TfEditorReferencias.Create(AOwner: TComponent);
begin
  inherited;
  FController := TReferenciasController.Create;
end;

destructor TfEditorReferencias.Destroy;
begin
  FReferencias := NIL;
  FController := NIL;
  inherited;
end;

procedure TfEditorReferencias.actAceptarExecute(Sender: TObject);
begin
  try
    if (Referencias.DataTable.State in dsEditModes) then
       Referencias.DataTable.Post;
    Referencias.DataTable.ApplyUpdates;
  except
    on E : Exception do begin
      Referencias.DataTable.CancelUpdates;
      ShowErrorMessage('Error al guardar cambios', 'Se ha producido un error grave', E);
      Exit;
    end;
  end;
  actCerrar.Execute;
end;

procedure TfEditorReferencias.actCancelarExecute(Sender: TObject);
begin
  Referencias.DataTable.CancelUpdates;
  actCerrar.Execute;
end;

procedure TfEditorReferencias.actCerrarExecute(Sender: TObject);
begin
  Close;
end;

procedure TfEditorReferencias.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  Respuesta: Integer;
begin
  Respuesta := IDNO;

  if (DataTableModified(dsReferencias.DataTable)) then
     Respuesta := ShowConfirmMessage('Atención', 'Se han producido cambios',
      '¿Desea guardar los cambios que se han producido antes de cerrar?',
      [TDlgButton_SI, TDlgButton_NO, TDlgButton_CANCELAR]);

  case Respuesta of
    IDYES   : actAceptar.Execute;
    IDNO    : actCancelar.Execute;
    else CanClose := False;
  end;
end;

procedure TfEditorReferencias.FormShow(Sender: TObject);
begin
  if not FReferencias.DataTable.Active then
     FReferencias.DataTable.Active := true;

  ListaReferencias.SetFocus;
  ListaReferenciasView.DataController.GotoFirst;
end;

end.
