unit uPluginEmpresas;

interface

uses
  uModuleController, uInterfaces, uHostManager, Menus, Classes, ActnList,
  ImgList, Controls, PngImageList, uBizEmpresas,
  uEmpresasController;

type
  IEmpresasPlugin = interface(IInterface)
    ['{4E732376-FFD0-4E72-846A-224A6E27FA85}']
    function Empresas : TStringList;
    function Controller : IEmpresasController;
  end;
  
  TPluginEmpresas = class(TModuleController, IEmpresasPlugin)
    ExtraImages: TPngImageList;
    LargeImages: TPngImageList;
    MainMenu: TMainMenu;
    ModuleActionList: TActionList;
    SmallImages: TPngImageList;
    Empresas1: TMenuItem;
    Preferencias1: TMenuItem;
    N1: TMenuItem;
    Gestindeempresas1: TMenuItem;
    Datosde1: TMenuItem;
    actDatosDe: TAction;
    actPreferencias: TAction;
    actGestionEmpresas: TAction;
    N2: TMenuItem;
    actSucursales: TAction;
    Sucursales1: TMenuItem;
    N3: TMenuItem;
    actNuevaEmpresa: TAction;
    procedure actDatosDeUpdate(Sender: TObject);
    procedure actDatosDeExecute(Sender: TObject);
    procedure actNuevaEmpresaExecute(Sender: TObject);
  protected
    function Empresas : TStringList;
    function Controller : IEmpresasController;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  end;
  
implementation

{$R *.dfm}

uses
  Forms, Dialogs, uGUIBase, uCustomEditor, SysUtils,
  uDataModuleUsuarios, uEmpresasViewRegister;

function GetModule : TModuleController;
begin
  Result := TPluginEmpresas.Create(NIL);
end;

exports
  GetModule name GET_MODULE_FUNC;

{
******************************* TModuleEmpresas *******************************
}
procedure TPluginEmpresas.actDatosDeExecute(Sender: TObject);
var
  AController : IEmpresasController;
begin
  AController := TEmpresasController.Create;
  AController.Ver(dmUsuarios.EmpresaActual);
end;

procedure TPluginEmpresas.actDatosDeUpdate(Sender: TObject);
begin
  with (Sender as TAction) do
  begin
      if Assigned(dmUsuarios.EmpresaActual) then
      begin
        Enabled := True;
        Caption := 'Datos de ' + dmUsuarios.EmpresaActual.NOMBRE
      end
      else begin
        Enabled := False;      
        Caption := 'Datos de la empresa';
      end;
  end;
end;

procedure TPluginEmpresas.actNuevaEmpresaExecute(Sender: TObject);
var
  AEmpresasController : IEmpresasController;
  AEmpresa : IBizEmpresa;
begin
  AEmpresasController := TEmpresasController.Create;
  AEmpresa := AEmpresasController.Nuevo;
  try
    AEmpresasController.Ver(AEmpresa);
  finally
    AEmpresa := NIL;
  end;
end;

function TPluginEmpresas.Controller: IEmpresasController;
begin
  Result := TEmpresasController.Create;
end;

function TPluginEmpresas.Empresas: TStringList;
var
  AEmpresasController : IEmpresasController;
  AEmpresas : IBizEmpresa;
begin
  AEmpresasController := TEmpresasController.Create;
  AEmpresas := AEmpresasController.BuscarTodos;
  try
    Result := AEmpresasController.ToStringList(AEmpresas);
  finally
    AEmpresasController := NIL;
  end;
end;

constructor TPluginEmpresas.Create(AOwner: TComponent);
begin
  inherited;
  uEmpresasViewRegister.RegisterViews;
end;

destructor TPluginEmpresas.Destroy;
begin
  uEmpresasViewRegister.UnregisterViews;
  inherited;
end;


initialization
  uHostManager.RegisterModuleClass(TPluginEmpresas);

finalization
  uHostManager.UnRegisterModuleClass(TPluginEmpresas);

end.
