unit uEditorEmpresa;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorDBItem, ToolWin, ComCtrls, JvExControls, JvComponent,
  uBizEmpresas, JvNavigationPane, ActnList,
  uEditorBase, StdActns, TB2Dock, TB2Toolbar, TBX, ImgList, PngImageList,
  TB2Item, uEditorItem, DB, uDADataTable, uEditorDBBase, JvFormAutoSize,
  uDAScriptingProvider, uDACDSDataTable, StdCtrls, pngimage, ExtCtrls,
  TBXDkPanels, JvButton, AppEvnts, uCustomView, uViewBase, 
  JvAppStorage, JvAppRegistryStorage, JvFormPlacement, JvComponentBase,
  uViewEmpresa, uIEditorEmpresa, uEmpresasController, dxLayoutLookAndFeels,
  JvExComCtrls, JvStatusBar, uViewDetallesGenerico, uViewDatosBancarios,
  uDAInterfaces, uViewTiendas;

type
  TfEditorEmpresa = class(TfEditorDBItem, IEditorEmpresa)
    frViewEmpresa1: TfrViewEmpresa;
    dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList;
    dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel;
    pagDatosBancarios: TTabSheet;
    frViewDatosBancarios1: TfrViewDatosBancarios;
    pagTiendas: TTabSheet;
    frViewTiendas1: TfrViewTiendas;
    procedure FormShow(Sender: TObject);
    procedure actRefrescarUpdate(Sender: TObject);
    procedure dsDataTableDataChange(Sender: TObject; Field: TField);
  private
    FController : IEmpresasController;
    FEmpresa: IBizEmpresa;
    FViewEmpresa : IViewEmpresa;
  protected
    function GetEmpresa: IBizEmpresa; virtual;
    procedure SetEmpresa(const Value: IBizEmpresa); virtual;

    function GetViewEmpresa: IViewEmpresa;
    procedure SetViewEmpresa(const Value: IViewEmpresa);
    procedure GuardarInterno; override;
    procedure EliminarInterno; override;
    property ViewEmpresa: IViewEmpresa read GetViewEmpresa write
            SetViewEmpresa;
    function GetController : IEmpresasController; virtual;
    procedure SetController (const Value : IEmpresasController); virtual;

  public
    constructor Create(AOwner: TComponent); override;
    procedure PonerTitulos(const ATitulo: string = ''); override;
    property Controller : IEmpresasController read GetController
      write SetController;
    property Empresa: IBizEmpresa read GetEmpresa write SetEmpresa;
    destructor Destroy; override;
  end;
  
implementation
{$R *.dfm}
{$INCLUDE ..\..\..\FactuGES.inc}

uses
  uCustomEditor, uDataModuleEmpresas;

{
******************************* TfEditorEmpresa *******************************
}
function TfEditorEmpresa.GetEmpresa: IBizEmpresa;
begin
  Result := FEmpresa;
end;

function TfEditorEmpresa.GetController: IEmpresasController;
begin
  Result := FController;
end;

function TfEditorEmpresa.GetViewEmpresa: IViewEmpresa;
begin
  Result := FViewEmpresa;
end;

procedure TfEditorEmpresa.GuardarInterno;
begin
  inherited;
  FController.Guardar(FEmpresa);
  Modified := False;
end;

procedure TfEditorEmpresa.PonerTitulos(const ATitulo: string);
var
  FTitulo : String;
begin
  if (ATitulo = '') and Assigned(FEmpresa) then
  begin
    if Length(FEmpresa.Nombre) = 0 then
      FTitulo := 'Nueva empresa'
    else
      FTitulo := 'Empresa'  + ' - ' + FEmpresa.Nombre
  end;

  inherited PonerTitulos(FTitulo);
end;

procedure TfEditorEmpresa.SetEmpresa(const Value: IBizEmpresa);
begin
  FEmpresa := Value;
  dsDataTable.DataTable := FEmpresa.DataTable;

  if Assigned(FViewEmpresa) and Assigned(Empresa) then
  begin
    FViewEmpresa.Empresa := FEmpresa;
    frViewDatosBancarios1.dsDetalles.DataTable := FEmpresa.DatosBancarios.DataTable;
    frViewTiendas1.dsDetalles.DataTable := FEmpresa.Tiendas.DataTable
  end
  else begin
    FViewEmpresa.Empresa := NIL;
    frViewDatosBancarios1.dsDetalles.DataTable := NIL;
    frViewTiendas1.dsDetalles.DataTable := NIL;    
  end;
end;

procedure TfEditorEmpresa.SetController(const Value: IEmpresasController);
begin
  FController := Value;
  if Assigned(FController) then
     ViewEmpresa.Controller := FController;
end;

procedure TfEditorEmpresa.SetViewEmpresa(const Value: IViewEmpresa);
begin
  FViewEmpresa := Value;

  if Assigned(FViewEmpresa) and Assigned(Empresa) then
    FViewEmpresa.Empresa := Empresa;
end;

procedure TfEditorEmpresa.FormShow(Sender: TObject);
begin
  inherited;

  if not Assigned(FViewEmpresa) then
    raise Exception.Create('No hay ninguna vista asignada');

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

  Empresa.DataTable.Active := True;
  pgPaginas.ActivePage := pagGeneral;
//  frViewEmpresa1.cbFormaPago.Properties.OnEditValueChanged := frViewEmpresa1.FormaPagoEditValueChanged;
  FViewEmpresa.SetFocus;
end;

procedure TfEditorEmpresa.actRefrescarUpdate(Sender: TObject);
begin
  if Assigned(dsDataTable.DataTable) then
    (Sender as TAction).Enabled := (not dsDataTable.DataTable.Fetching) or
      (not dsDataTable.DataTable.Opening) or
      (not dsDataTable.DataTable.Closing) or
      (not FEmpresa.EsNuevo)
  else
    (Sender as TAction).Enabled := False;
end;

constructor TfEditorEmpresa.Create(AOwner: TComponent);
begin
  inherited;
  FViewEmpresa := frViewEmpresa1;

  {$IFDEF CONTABILIDAD}
    pagDatosBancarios.TabVisible := false;
  {$ELSE}
    pagDatosBancarios.TabVisible := true;  
  {$ENDIF}
end;

destructor TfEditorEmpresa.Destroy;
begin
  FViewEmpresa := NIL;
  FEmpresa := NIL;
  inherited;
end;

procedure TfEditorEmpresa.dsDataTableDataChange(Sender: TObject; Field: TField);
begin
  inherited;
  if Assigned(FEmpresa) and (not (FEmpresa.DataTable.Fetching) or
    not (FEmpresa.DataTable.Opening) or not (FEmpresa.DataTable.Closing)) then
    PonerTitulos;
end;

procedure TfEditorEmpresa.EliminarInterno;
begin
  inherited;
  FController.Eliminar(FEmpresa);
end;

end.

