Varela_PuntosVenta/Source/ApplicationBase/uAdminPV_App.pas

336 lines
9.0 KiB
ObjectPascal
Raw Blame History

unit uAdminPV_App;
interface
uses
SysUtils, Classes, Forms, uBizUsuarios, uControllerBase,
uUsuariosController, uHostManager;
type
TDoLoadModulesEvent = procedure;
TDoMainFormEvent = procedure;
IAppSplashForm = interface
['{9905DF57-4476-42E6-A7CD-B1479A84E220}']
procedure Show;
procedure Hide;
procedure Update;
function GetMensaje: String;
procedure SetMensaje(const AMensaje : String);
property Mensaje : String read GetMensaje write SetMensaje;
end;
IAppAdminPV = interface
['{FB6A0F3C-C1D1-462D-AFD4-2A368F85E920}']
function GetMainForm: TCustomForm;
function GetUsuariosController: IUsuariosController;
function GetAppEXEName: String;
function GetAppName: String;
function GetAppVersion: String;
function GetAppFullName: String;
function GetUsuarioActivo: IBizUsuario;
function GetModuleManager : THostManager;
function GetTerminated: Boolean;
function GetLoadModulesEvent : TDoLoadModulesEvent;
procedure SetLoadModulesEvent (ALoadModulesEvent : TDoLoadModulesEvent);
function GetDoMainFormEvent : TDoMainFormEvent;
procedure SetDoMainFormEvent (AMainFormEvent : TDoMainFormEvent);
function GetAppSplashForm : IAppSplashForm;
procedure SetAppSplashForm (AAppSplashForm : IAppSplashForm);
procedure ShowSplashForm;
procedure HideSplashForm;
procedure Run;
procedure Terminate;
property AppVersion : String read GetAppVersion;
property AppEXEName : String read GetAppEXEName;
property AppName : String read GetAppName;
property AppFullName : String read GetAppFullName;
property MainForm : TCustomForm read GetMainForm;
property UsuarioActivo : IBizUsuario read GetUsuarioActivo;
property UsuariosController : IUsuariosController read GetUsuariosController;
property AppSplashForm : IAppSplashForm read GetAppSplashForm write SetAppSplashForm;
property ModuleManager : THostManager read GetModuleManager;
property DoMainFormEvent : TDoMainFormEvent read GetDoMainFormEvent write SetDoMainFormEvent;
property DoLoadModulesEvent : TDoLoadModulesEvent read GetLoadModulesEvent write SetLoadModulesEvent;
property Terminated : Boolean read GetTerminated;
procedure ShowCapado;
end;
TAppAdminPV = class(TInterfacedObject, IAppAdminPV)
private
FUsuariosController: IUsuariosController;
FAppSplashForm : IAppSplashForm;
FHostManager : THostManager;
FTerminated : Boolean;
FDoMainFormEvent: TDoMainFormEvent;
FDoLoadModulesEvent: TDoMainFormEvent;
function GetMainForm: TCustomForm;
function GetUsuariosController: IUsuariosController;
function GetAppName: String;
function GetAppEXEName: String;
function GetAppVersion: String;
function GetAppFullName: String;
function GetUsuarioActivo: IBizUsuario;
function GetModuleManager : THostManager;
function GetTerminated: Boolean;
function GetLoadModulesEvent : TDoLoadModulesEvent;
procedure SetLoadModulesEvent (ALoadModulesEvent : TDoLoadModulesEvent);
function GetDoMainFormEvent : TDoMainFormEvent;
procedure SetDoMainFormEvent (AMainFormEvent : TDoMainFormEvent);
function GetAppSplashForm : IAppSplashForm;
procedure SetAppSplashForm (AAppSplashForm : IAppSplashForm);
procedure AfterLoadModule(Sender: TObject; AModuleInfo: TModuleInfo);
procedure RegisterModule(AModuleInfo : TModuleInfo);
protected
procedure DoMainForm;
procedure CargarModulos;
procedure ShowSplashForm;
procedure HideSplashForm;
procedure UpdateSplashForm;
public
constructor Create; virtual;
destructor Destroy; override;
procedure Run;
procedure Terminate;
property AppVersion : String read GetAppVersion;
property AppEXEName : String read GetAppEXEName;
property AppName : String read GetAppName;
property AppFullName : String read GetAppFullName;
property MainForm : TCustomForm read GetMainForm;
property AppSplashForm : IAppSplashForm read GetAppSplashForm write SetAppSplashForm;
property UsuarioActivo : IBizUsuario read GetUsuarioActivo;
property UsuariosController : IUsuariosController read GetUsuariosController;
property ModuleManager : THostManager read GetModuleManager;
property DoMainFormEvent : TDoMainFormEvent read GetDoMainFormEvent write SetDoMainFormEvent;
property DoLoadModulesEvent : TDoLoadModulesEvent read GetLoadModulesEvent write SetLoadModulesEvent;
property Terminated : Boolean read GetTerminated;
procedure ShowCapado;
end;
var
AppAdminPV : IAppAdminPV = nil;
implementation
uses
Dialogs, uDialogUtils, cxControls, uUsuariosViewRegister,
uAppInfoUtils;
procedure TAppAdminPV.CargarModulos;
begin
if not Assigned(FDoLoadModulesEvent) then
raise Exception.Create('Evento para la carga de los m<>dulos de la aplicaci<63>n no asignado (CargarModulos)');
FDoLoadModulesEvent();
end;
constructor TAppAdminPV.Create;
begin
FTerminated := False;
FDoMainFormEvent := NIL;
FDoLoadModulesEvent := NIL;
FAppSplashForm := NIL;
FUsuariosController := NIL; // Se crea la primera vez que se usa
FHostManager := THostManager.Create(NIL);
with FHostManager do
begin
OnAfterLoad := AfterLoadModule;
// Ruta por defecto de los m<>dulos
BPLPath := ExtractFilePath(Application.ExeName) + PathDelim;
end;
end;
destructor TAppAdminPV.Destroy;
begin
FAppSplashForm := NIL;
FHostManager.UnloadModules;
FreeAndNIL(FHostManager);
FUsuariosController := NIL;
inherited;
end;
procedure TAppAdminPV.DoMainForm;
begin
if not Assigned(FDoMainFormEvent) then
raise Exception.Create('Evento para la creaci<63>n del formulario principal no asignado (DoMainForm)');
FDoMainFormEvent();
end;
function TAppAdminPV.GetMainForm: TCustomForm;
begin
Result := Application.MainForm;
end;
function TAppAdminPV.GetDoMainFormEvent: TDoMainFormEvent;
begin
Result := FDoMainFormEvent;
end;
function TAppAdminPV.GetAppEXEName: String;
begin
Result := ExtractFileName(Application.ExeName);
end;
function TAppAdminPV.GetAppFullName: String;
begin
Result := uAppInfoUtils.GetAppFullName;
end;
function TAppAdminPV.GetAppName: String;
begin
Result := uAppInfoUtils.GetAppName;
end;
function TAppAdminPV.GetAppSplashForm: IAppSplashForm;
begin
Result := FAppSplashForm;
end;
function TAppAdminPV.GetAppVersion: String;
begin
Result := uAppInfoUtils.GetAppVersion;
end;
function TAppAdminPV.GetLoadModulesEvent: TDoLoadModulesEvent;
begin
Result := FDoLoadModulesEvent;
end;
function TAppAdminPV.GetModuleManager: THostManager;
begin
Result := FHostManager;
end;
function TAppAdminPV.GetTerminated: Boolean;
begin
Result := FTerminated;
end;
function TAppAdminPV.GetUsuarioActivo: IBizUsuario;
begin
Result := UsuariosController.CurrentUser;
end;
function TAppAdminPV.GetUsuariosController: IUsuariosController;
begin
if not Assigned(FUsuariosController) then
FUsuariosController := TUsuariosController.Create;
Result := FUsuariosController;
end;
procedure TAppAdminPV.HideSplashForm;
begin
if not Assigned(FAppSplashForm) then
raise Exception.Create('AppSplashForm no asignado (HideSplashForm)');
FAppSplashForm.Hide;
end;
procedure TAppAdminPV.AfterLoadModule(Sender: TObject;
AModuleInfo: TModuleInfo);
begin
RegisterModule(AModuleInfo);
end;
procedure TAppAdminPV.RegisterModule(AModuleInfo: TModuleInfo);
begin
AppSplashForm.Mensaje := 'Cargando ''' + AModuleInfo.Module.ModuleName + '''...';
end;
procedure TAppAdminPV.Run;
begin
if UsuariosController.StartLogin then
begin
ShowHourglassCursor;
try
CargarModulos;
DoMainForm;
finally
HideHourglassCursor;
HideSplashForm;
end;
Application.Run;
end;
Terminate;
end;
procedure TAppAdminPV.SetDoMainFormEvent(
AMainFormEvent: TDoMainFormEvent);
begin
FDoMainFormEvent := AMainFormEvent;
end;
procedure TAppAdminPV.SetAppSplashForm(AAppSplashForm: IAppSplashForm);
begin
FAppSplashForm := AAppSplashForm;
end;
procedure TAppAdminPV.SetLoadModulesEvent(
ALoadModulesEvent: TDoLoadModulesEvent);
begin
FDoLoadModulesEvent := ALoadModulesEvent;
end;
procedure TAppAdminPV.ShowCapado;
begin
ShowInfoMessage('Sin Acceso', 'Funcionalidad en desarrollo, disculpen las molestias');
end;
procedure TAppAdminPV.ShowSplashForm;
begin
if not Assigned(FAppSplashForm) then
raise Exception.Create('AppSplashForm no asignado (ShowSplashForm)');
FAppSplashForm.Show;
FAppSplashForm.Update;
end;
procedure TAppAdminPV.Terminate;
begin
ModuleManager.UnloadModules;
FTerminated := True;
end;
procedure TAppAdminPV.UpdateSplashForm;
begin
FAppSplashForm.Update;
end;
initialization
// Pongo esto aqu<71> por ahora
uUsuariosViewRegister.RegisterViews;
finalization
// Pongo esto aqu<71> por ahora
AppAdminPV := NIL;
uUsuariosViewRegister.UnregisterViews;
end.