{
===============================================================================
  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 uEditorCategorias;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uDataModuleContactos, DB, StdCtrls, DBCtrls, uDADataTable, ActnList,
  uEditorUtils, uCustomEditor, uGUIBase, uBizContacto, ExtCtrls, ComCtrls;

type
  IEditorCategorias = interface(ICustomEditor)
    ['{384D5B61-6D4D-488A-A624-C00E154FAA69}']
    function GetCategoria: IBizCategoria;
    procedure SetCategoria(const Value: IBizCategoria);
    property Categoria: IBizCategoria read GetCategoria write SetCategoria;
  end;

  TfEditorCategorias = class(TCustomEditor, IEditorCategorias)
    ActionList1: TActionList;
    DADataSource: TDADataSource;
    ListaCategorias: TDBLookupListBox;
    editCategoria: TEdit;
    bAnadir: TButton;
    actAnadir: TAction;
    actEliminar: TAction;
    bEliminar: TButton;
    actAceptar: TAction;
    actCancelar: TAction;
    bAceptar: TButton;
    bCancelar: TButton;
    actCerrar: TAction;
    eCategoria: TLabel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure actAnadirExecute(Sender: TObject);
    procedure actEliminarExecute(Sender: TObject);
    procedure actAceptarExecute(Sender: TObject);
    procedure actCancelarExecute(Sender: TObject);
    procedure actCerrarExecute(Sender: TObject);
    procedure actAnadirUpdate(Sender: TObject);
    procedure FormShow(Sender: TObject);
  private
    FCategoria: IBizCategoria;
  protected
    function GetCategoria: IBizCategoria; virtual;
    procedure SetCategoria(const Value: IBizCategoria); virtual;
  public
    property Categoria: IBizCategoria read GetCategoria write SetCategoria;
  end;

var
  fEditorCategorias: TfEditorCategorias;

implementation
{$R *.dfm}

uses LiteralesContactos;

function ShowEditorCategoria (ABizObject : TDADataTableRules) : TModalResult;
var
  AEditor: TfEditorCategorias;
begin
  AEditor := TfEditorCategorias.Create(Application);
  try
    Result := AEditor.ShowModal;
  finally
    AEditor.Release;
  end;
end;



{ TfEditorCategorias }

function TfEditorCategorias.GetCategoria: IBizCategoria;
begin
  Result := FCategoria;
end;

procedure TfEditorCategorias.SetCategoria(const Value: IBizCategoria);
begin
  if FCategoria <> Nil then
     FCategoria := Nil;
  
  FCategoria := Value;
  DADataSource.DataTable := (FCategoria as IBizCategoria).DataTable;
  DADataSource.DataTable.Open;
end;

procedure TfEditorCategorias.FormCreate(Sender: TObject);
begin
  Categoria := dmContactos.GetCategorias;
end;

procedure TfEditorCategorias.actAnadirExecute(Sender: TObject);
begin
  Categoria.Append;
  Categoria.DESCRIPCION := editCategoria.Text;
  Categoria.Post;
  editCategoria.Clear;
end;

procedure TfEditorCategorias.actEliminarExecute(Sender: TObject);
begin
  Categoria.Delete;
end;

procedure TfEditorCategorias.actAceptarExecute(Sender: TObject);
begin
  try
    Categoria.DataTable.ApplyUpdates;
  except
    on E : Exception do begin
      Categoria.DataTable.CancelUpdates;
      showMessage(msgErrorCategoriaSup);
      exit;
    end;
  end;
  actCerrar.Execute;
end;

procedure TfEditorCategorias.actCancelarExecute(Sender: TObject);
begin
  Categoria.DataTable.CancelUpdates;
  actCerrar.Execute;
end;

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

procedure TfEditorCategorias.actAnadirUpdate(Sender: TObject);
begin
  (Sender as TAction).Enabled := (Length(editCategoria.Text) > 0)
end;

procedure TfEditorCategorias.FormShow(Sender: TObject);
begin
  EditCategoria.SetFocus;  
end;

initialization
  RegisterEditor(IBizCategoria, ShowEditorCategoria, etItems);

end.
