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

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorBase, uEditorGrid, ToolWin, ComCtrls, JvExControls, JvComponent,
  JvNavigationPane, uViewObras, uBizObra, ActnList, DBActns, uViewGrid,
  Menus, uDataModuleBase, ImgList, PngImageList, TB2Dock, TB2Toolbar, TBX,
  TB2Item, StdActns, TB2ExtItems, TBXExtItems, TB2MRU, DB, uDADataTable,
  uCustomView, uViewBase, uViewBarraSeleccion, StdCtrls,
  dxLayoutLookAndFeels, JvAppStorage, JvAppRegistryStorage, JvFormPlacement,
  ExtCtrls, JvComponentBase, dxLayoutControl, cxControls,
  uViewProyectosObra, cxSplitter;

type
  IEditorObras = interface(IEditorGrid)
  ['{B011F957-6251-4425-A950-15DC49DEB563}']
    function GetObras: IBizObra;
    procedure SetObras(const Value: IBizObra);
    property Obras: IBizObra read GetObras write SetObras;
  end;

  TfEditorObras = class(TfEditorGrid, IEditorObras)
    N3: TMenuItem;
    PopupMenu1: TPopupMenu;
    frViewProyectosObra: TfrViewProyectosObra;
    paginas: TPageControl;
    pagProyectos: TTabSheet;
    frViewObras: TfrViewObras;
    Splitter1: TSplitter;
    procedure actEliminarExecute(Sender: TObject);
    procedure actModificarExecute(Sender: TObject);
    procedure actNuevoExecute(Sender: TObject);
    procedure FormShow(Sender: TObject);

    procedure frViewProyectosObraactAnadirExecute(Sender: TObject);
    procedure frViewProyectosObraactAnadirUpdate(Sender: TObject);
    procedure frViewProyectosObraactModificarExecute(Sender: TObject);
    procedure frViewProyectosObraactEliminarExecute(Sender: TObject);
    procedure frViewProyectosObracxGridViewDataControllerDataChanged(Sender: TObject);
    procedure frViewProyectosObraactEliminarTodoExecute(Sender: TObject);

  private
    FObras: IBizObra;
  protected
    function GetObras: IBizObra; virtual;
    procedure SetObras(const Value: IBizObra); virtual;
    procedure SetViewGrid(const Value: IViewGrid); override;
    procedure DblClickAction(Sender: TObject);
  public
    property Obras: IBizObra read GetObras write SetObras;
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;

implementation

uses
  uCustomEditor, uDataModuleObras, LiteralesObras;

{$R *.dfm}

{
****************************** TfEditorObras *******************************
}

procedure TfEditorObras.actEliminarExecute(Sender: TObject);
begin
  if (MessageDlg(msgLitBorrar, mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
  begin
     inherited;
     ViewGrid.RefreshGrid;
  end;
end;

procedure TfEditorObras.actModificarExecute(Sender: TObject);
begin
  inherited;
  Obras.Show;
  ViewGrid.RefreshGrid;
  ViewGrid.SyncFocusedRecordsFromDataSet;
end;

procedure TfEditorObras.actNuevoExecute(Sender: TObject);
begin
  inherited;
  Obras.Insert;
  Obras.Show;
  ViewGrid.RefreshGrid;
  ViewGrid.SyncFocusedRecordsFromDataSet;
end;

procedure TfEditorObras.FormShow(Sender: TObject);
begin
  inherited;
  if not Assigned(ViewGrid) then
    raise Exception.Create('No hay ninguna vista asignada');

  if not Assigned(Obras) then
    raise Exception.Create('No hay ningún obra asignado');

  if not Obras.DataTable.Active then
     Obras.DataTable.Active := True;
end;

function TfEditorObras.GetObras: IBizObra;
begin
  Result := FObras;
end;

procedure TfEditorObras.SetObras(const Value: IBizObra);
begin
  FObras := Value;
  dsDataTable.DataTable := FObras.DataTable;

  if Assigned(ViewGrid) then
  begin
     (ViewGrid as IViewObras).Obras := Obras;
     frViewProyectosObra.DADataSource.DataTable := FObras.Proyectos.DataTable;
  end
end;

destructor TfEditorObras.Destroy;
begin
  FObras := NIL;
  inherited;
end;

constructor TfEditorObras.Create(AOwner: TComponent);
begin
  inherited;
  ViewGrid := frViewObras;
end;

procedure TfEditorObras.SetViewGrid(const Value: IViewGrid);
begin
  inherited;
  if Assigned(ViewGrid) and Assigned(Obras) then
  begin
    (ViewGrid as IViewObras).Obras := Obras;
  end;
end;

procedure TfEditorObras.DblClickAction(Sender: TObject);
begin
  actModificar.Execute;
end;

procedure TfEditorObras.frViewProyectosObraactAnadirExecute(Sender: TObject);
begin
  inherited;
  FObras.Proyectos.Insert;
  FObras.Proyectos.Show;
  ViewGrid.RefreshGrid;
  ViewGrid.SyncFocusedRecordsFromDataSet;
end;

procedure TfEditorObras.frViewProyectosObraactModificarExecute(Sender: TObject);
begin
  ViewGrid.SyncFocusedRecordsFromGrid;
  FObras.Proyectos.Show;
  ViewGrid.RefreshGrid;
  ViewGrid.SyncFocusedRecordsFromDataSet;
end;

procedure TfEditorObras.frViewProyectosObraactEliminarExecute(Sender: TObject);
begin
  if (MessageDlg(msgLitBorrarProyecto, mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
  begin
     FObras.Proyectos.Delete;
     FObras.Proyectos.DataTable.ApplyUpdates;
  end;
end;

procedure TfEditorObras.frViewProyectosObraactAnadirUpdate(Sender: TObject);
begin
  inherited;
  if Assigned(dsDataTable.DataTable) then
     (Sender as TAction).Enabled := not dsDataTable.DataTable.IsEmpty
  else
     (Sender as TAction).Enabled := False;
end;

procedure TfEditorObras.frViewProyectosObracxGridViewDataControllerDataChanged(Sender: TObject);
begin
  inherited;
  if Assigned(FObras) and (not (FObras.DataTable.Fetching) or
    not (FObras.DataTable.Opening) or not (FObras.DataTable.Closing)) then
    frViewProyectosObra.JvNavPanelHeader.Caption := msgLitListaProyectos + Obras.NOMBRE;
end;

procedure TfEditorObras.frViewProyectosObraactEliminarTodoExecute(Sender: TObject);
begin
  inherited;
  if (MessageDlg(msgLitBorrarTProyecto, mtConfirmation, [mbYes, mbNo], 0) = mrYes) then
  begin
     Obras.Proyectos.DataTable.ClearRows;
     Obras.Proyectos.DataTable.ApplyUpdates;
  end;
end;

end.

