Tecsitel_FactuGES2/Source/Cliente/uPantallaPrincipal.pas

636 lines
19 KiB
ObjectPascal
Raw Normal View History

unit uPantallaPrincipal;
interface
uses
Windows, Forms, SysUtils, Messages, JvMenus, Menus, Graphics, AppEvnts,
JvAppStorage, JvAppRegistryStorage, JvFormPlacement, JvComponentBase,
JvNavigationPane, ImgList, Controls, PngImageList, Classes, ActnList, XPMan,
TBXStatusBars, JvXPCore, JvXPContainer, pngimage, ExtCtrls, StdCtrls,
JvPageList, JvExControls, JvExExtCtrls, JvSplitter, JvSyncSplitter,
TBXDkPanels, uCustomEditor, uHostManager, uGUIBase,
Dialogs;
type
IMainForm = interface(IHostForm)
['{7F6F5574-5E5C-486C-AA24-D3AEAA52D243}']
procedure ReleaseEmbedded;
end;
TfPantallaPrincipal = class(TForm, IHostForm, IMainForm)
GeneralActionList: TActionList;
ModulesSmallImageList: TPngImageList;
XPManifest1: TXPManifest;
actSalir: TAction;
ModulesActionList: TActionList;
ModulesLargeImageList: TPngImageList;
pnlContenido: TTBXAlignmentPanel;
JvNavigationPane: TJvNavigationPane;
pnlMain: TTBXAlignmentPanel;
JvSyncSplitter1: TJvSyncSplitter;
HostManager: THostManager;
actLogin: TAction;
StyleManagerButtons: TJvNavPaneStyleManager;
JvFormStorage: TJvFormStorage;
JvAppRegistryStorage: TJvAppRegistryStorage;
actAdministracion: TAction;
ApplicationEvents: TApplicationEvents;
actCambiarPass: TAction;
actConexion: TAction;
actAcerca: TAction;
pnlBorde: TJvXPContainer;
HostMenu: TJvMainMenu;
JvXPMenuItemPainter1: TJvXPMenuItemPainter;
Archivo2_OLD: TMenuItem;
Ayuda2_OLD: TMenuItem;
Cambiarmicontrasea2_OLD: TMenuItem;
N3_OLD: TMenuItem;
Configurarconexin2_OLD: TMenuItem;
Paneldeadministracin2_OLD: TMenuItem;
N4_OLD: TMenuItem;
Salir2_OLD: TMenuItem;
Acercade2_OLD: TMenuItem;
lblBienvenido: TLabel;
Label22: TLabel;
TBXStatusBar1: TTBXStatusBar;
StatusPanelImageList: TPngImageList;
Empresa1_OLD: TMenuItem;
Listadeempresas1_OLD: TMenuItem;
N1_OLD: TMenuItem;
Opciones1_OLD: TMenuItem;
Edicin1_OLD: TMenuItem;
N1: TMenuItem;
Compras1: TMenuItem;
Ventas1: TMenuItem;
actMenuCompras: TAction;
actLogisticaMenu: TAction;
actVentasMenu: TAction;
Logstica1: TMenuItem;
pagInicio: TJvNavPanelPage;
Panel1: TPanel;
Label1: TLabel;
Image1: TImage;
actActualizaciones: TAction;
Configuraractualizaciones1: TMenuItem;
actVerPanel: TAction;
actVerBarraEstado: TAction;
Paneldeexploracin1: TMenuItem;
Paneldeexploracin2: TMenuItem;
Informacindeempresa1: TMenuItem;
Administracin1: TMenuItem;
N2: TMenuItem;
Usuarios1: TMenuItem;
Perfiles1: TMenuItem;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure HostManagerAfterLoad(Sender: TObject; AModuleInfo: TModuleInfo);
procedure Salir1Click(Sender: TObject);
procedure actSalirExecute(Sender: TObject);
procedure actLoginExecute(Sender: TObject);
procedure actCambiarPassExecute(Sender: TObject);
procedure actAcercaExecute(Sender: TObject);
procedure actConexionExecute(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure JvNavigationPaneChange(Sender: TObject);
procedure ApplicationEventsException(Sender: TObject; E: Exception);
procedure actMenuComprasExecute(Sender: TObject);
procedure actMenuComprasUpdate(Sender: TObject);
procedure actLogisticaMenuExecute(Sender: TObject);
procedure actVentasMenuExecute(Sender: TObject);
procedure actActualizacionesExecute(Sender: TObject);
procedure actVerPanelUpdate(Sender: TObject);
procedure actVerPanelExecute(Sender: TObject);
procedure actVerBarraEstadoUpdate(Sender: TObject);
procedure actVerBarraEstadoExecute(Sender: TObject);
procedure Acercade1Click(Sender: TObject);
procedure Informacindeempresa1Click(Sender: TObject);
procedure Usuarios1Click(Sender: TObject);
procedure Perfiles1Click(Sender: TObject);
private
FContenido : TCustomEditor;
procedure ShowEmbedded(AEditor : ICustomEditor);
procedure ReleaseEmbedded;
procedure AplicarPerfil;
procedure RefrescarUI;
procedure InicializarUI;
procedure CargarModulos;
procedure OnThemeChange(Sender: TObject);
procedure RegisterModule(AModuleInfo : TModuleInfo);
procedure ExecuteActionMenu(Sender : TObject);
procedure WMSysCommand(var Msg: TMessage); message WM_SYSCOMMAND;
protected
function GetWorkPanel : TWinControl;
procedure CreateParams(var Params: TCreateParams); override;
public
function IsShortcut(var Message: TWMKey): Boolean; override;
procedure OnWorkPanelChanged(AEditor : ICustomEditor);
constructor Create(AOwner: TComponent); override;
property WorkPanel : TWinControl read GetWorkPanel;
end;
var
fPantallaPrincipal: TfPantallaPrincipal;
implementation
uses
uSplash, uAcercaDe, UxTheme, Themes, uMenuUtils, uBizEmpresas,
uFactuGES_App, uDataModuleBase, uDataModuleConexion,
uModuleController, uMainMenuController, uNavPaneController,
uDialogUtils, cxControls;
{$R *.dfm}
{
***************************** TfPantallaPrincipal ******************************
}
procedure TfPantallaPrincipal.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
CanClose := True;
if Assigned(FContenido) then
CanClose := FContenido.CloseQuery;
end;
procedure TfPantallaPrincipal.FormCreate(Sender: TObject);
begin
ApplicationEvents.Activate;
Caption := AppFactuGES.AppName + ' ' + AppFactuGES.AppVersion;
SplashScreen := TSplashScreen.Create(Application) ;
SplashScreen.Show;
JvNavigationPane.StyleManager := dmBase.StyleManager;
dmBase.OnThemeChange := Self.OnThemeChange;
Self.OnThemeChange(Self); // Forzar el refresco de los colores del tema activo
with HostManager do
begin
BPLPath := ExtractFilePath(Application.ExeName) + '\';
MainMenu := Self.Menu;
MainForm := Self;
OnAfterLoad := HostManagerAfterLoad;
end;
actLogin.Execute;
end;
procedure TfPantallaPrincipal.FormDestroy(Sender: TObject);
begin
// ReleaseEmbedded;
HostManager.UnloadModules;
ApplicationEvents.CancelDispatch;
end;
procedure TfPantallaPrincipal.HostManagerAfterLoad(Sender: TObject;
AModuleInfo: TModuleInfo);
begin
RegisterModule(AModuleInfo);
end;
procedure TfPantallaPrincipal.RefrescarUI;
var
ATitulo : String;
begin
ATitulo := AppFactuGES.AppName + ' ' + AppFactuGES.AppVersion;
if Assigned(AppFactuGES.EmpresaActiva) then
ATitulo := AppFactuGES.EmpresaActiva.NOMBRE + ' - ' + ATitulo;
Caption := ATitulo;
if dmConexion.HayConexion then
TBXStatusBar1.Panels[0].Caption := 'Conectado a: ' + dmConexion.TargetURL
else
TBXStatusBar1.Panels[0].Caption := 'Desconectado';
if Assigned(AppFactuGES.UsuarioActivo) then
TBXStatusBar1.Panels[1].Caption := AppFactuGES.UsuarioActivo.UserName
else
TBXStatusBar1.Panels[1].Caption := '';
end;
procedure TfPantallaPrincipal.RegisterModule(AModuleInfo : TModuleInfo);
var
AModule: TModuleController;
begin
AModule := AModuleInfo.Module;
SplashScreen.Texto := 'Cargando ''' + AModule.ModuleName + '''...';
end;
procedure TfPantallaPrincipal.ReleaseEmbedded;
begin
if Assigned(FContenido) then
FContenido.Release;
FContenido := Nil;
Application.ProcessMessages;
end;
procedure TfPantallaPrincipal.Salir1Click(Sender: TObject);
begin
Close;
end;
procedure TfPantallaPrincipal.actSalirExecute(Sender: TObject);
begin
Close;
end;
procedure TfPantallaPrincipal.actVentasMenuExecute(Sender: TObject);
begin
//
end;
procedure TfPantallaPrincipal.actVerBarraEstadoExecute(Sender: TObject);
begin
TBXStatusBar1.Visible := not TBXStatusBar1.Visible;
end;
procedure TfPantallaPrincipal.actVerBarraEstadoUpdate(Sender: TObject);
begin
(Sender as TAction).Checked := TBXStatusBar1.Visible;
end;
procedure TfPantallaPrincipal.actVerPanelExecute(Sender: TObject);
begin
JvNavigationPane.Visible := not JvNavigationPane.Visible;
if (JvNavigationPane.Visible) and (JvNavigationPane.Width = 0) then
JvNavigationPane.Width := 210;
end;
procedure TfPantallaPrincipal.actVerPanelUpdate(Sender: TObject);
begin
(Sender as TAction).Checked := JvNavigationPane.Visible and (JvNavigationPane.Width > 0);
end;
procedure TfPantallaPrincipal.OnThemeChange(Sender: TObject);
begin
LockWindowUpdate(Handle);
try
Color := dmBase.StyleManager.Colors.DividerColorTo;
//pnlBorde.Color := dmBase.StyleManager.Colors.FrameColor;
pnlBorde.BoundColor := dmBase.StyleManager.Colors.FrameColor;
with StyleManagerButtons do
begin
Colors.ButtonColorFrom := clWindow;
Colors.ButtonColorTo := clWindow;
Colors.ButtonSeparatorColor := clWindow;
Colors.SplitterColorFrom := clWindow;
Colors.SplitterColorTo := clWindow;
Colors.DividerColorFrom := clWindow;
Colors.DividerColorTo := clWindow;
Colors.HeaderColorFrom := clWindow;
Colors.HeaderColorTo := clWindow;
Colors.FrameColor := clWindow;
Colors.ToolPanelHeaderColorFrom := clWindow;
Colors.ToolPanelHeaderColorTo := clWindow;
Colors.ButtonHotColorFrom := dmBase.StyleManager.Colors.ButtonHotColorFrom;
Colors.ButtonHotColorTo := dmBase.StyleManager.Colors.ButtonHotColorTo;
Colors.ButtonSelectedColorFrom := dmBase.StyleManager.Colors.ButtonSelectedColorFrom;
Colors.ButtonSelectedColorTo := dmBase.StyleManager.Colors.ButtonSelectedColorTo;
end;
lblBienvenido.Font.Color := JvNavigationPane.Colors.ButtonColorTo;
{ JvGradient1.StartColor := JvNavigationPane.Colors.ButtonColorFrom;
JvGradient1.EndColor := JvNavigationPane.Colors.ButtonColorTo;}
finally
LockWindowUpdate(0);
Refresh;
end;
end;
function TfPantallaPrincipal.GetWorkPanel: TWinControl;
begin
Result := pnlMain;
end;
procedure TfPantallaPrincipal.Informacindeempresa1Click(Sender: TObject);
begin
//
AppFactuGES.EmpresasController.Ver(AppFactuGES.EmpresaActiva);
end;
procedure TfPantallaPrincipal.InicializarUI;
var
AListaEmpresas : IBizEmpresa;
i : Integer;
begin
for i := 0 to HostManager.ModulesCount - 1 do
MainMenuController.RegisterModule(HostManager.Modules[i]);
MainMenuController.SortMenuByTag;
MainMenuController.InitMainMenu;
for i := 0 to HostManager.ModulesCount - 1 do
NavPaneController.RegisterModule(HostManager.Modules[i]);
NavPaneController.InitNavPane;
AListaEmpresas := AppFactuGES.EmpresasController.BuscarTodos;
if Assigned(AListaEmpresas) then
begin
AListaEmpresas.Active := True;
if AListaEmpresas.RecordCount = 1 then
begin
// Oculto la p<>gina de inicio para que no parezca
// que se pueden manejar varias empresas.
JvNavigationPane.ActivePageIndex := 1;
pagInicio.PageList := NIL;
pagInicio.Visible := False;
end;
end;
RefrescarUI;
end;
procedure TfPantallaPrincipal.actLoginExecute(Sender: TObject);
begin
HostManager.UnloadModules;
if AppFactuGES.UsuariosController.StartLogin then
begin
ShowHourglassCursor;
SplashScreen.Update;
Application.ProcessMessages;
CargarModulos;
try
InicializarUI;
Application.ProcessMessages;
Visible := True;
AplicarPerfil;
finally
SplashScreen.Update;
SplashScreen.Hide;
FreeAndNIL(SplashScreen);
HideHourglassCursor;
end;
end
else
Application.Terminate;
end;
procedure TfPantallaPrincipal.actMenuComprasExecute(Sender: TObject);
begin
//
end;
procedure TfPantallaPrincipal.actMenuComprasUpdate(Sender: TObject);
begin
(Sender as TAction).Enabled := Assigned(AppFactuGES.EmpresaActiva);
end;
procedure TfPantallaPrincipal.actLogisticaMenuExecute(Sender: TObject);
begin
//
end;
procedure TfPantallaPrincipal.ExecuteActionMenu(Sender: TObject);
var
i : integer;
begin
for i := 0 to JvNavigationPane.PageCount - 1 do
begin
if JvNavigationPane.NavPages[i].Caption = (Sender as TAction).Caption then
begin
JvNavigationPane.ActivePageIndex := i;
Break;
end;
end;
end;
procedure TfPantallaPrincipal.AplicarPerfil;
begin
//
end;
procedure TfPantallaPrincipal.ApplicationEventsException(Sender: TObject;
E: Exception);
begin
{ if E is EROSessionNotFound then
begin
// OJOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
if not dmUsuarios.Login then
ShowMessage(E.Message);
end
else}
ShowMessage(E.Message);
//ShowErrorMessage('Se ha producido un error', '', E);
end;
procedure TfPantallaPrincipal.OnWorkPanelChanged(AEditor: ICustomEditor);
begin
//
end;
procedure TfPantallaPrincipal.Perfiles1Click(Sender: TObject);
begin
AppFactuGES.UsuariosController.ShowProfileManager;
end;
procedure TfPantallaPrincipal.ShowEmbedded(AEditor: ICustomEditor);
begin
if Assigned(FContenido) and not FContenido.CloseQuery then
begin
AEditor.Release;
AEditor := NIL;
Exit;
end;
ShowHourglassCursor;
LockWindowUpdate(Handle);
ReleaseEmbedded;
try
FContenido := TCustomEditor(AEditor.GetInstance);
with (FContenido) do
begin
Visible := False;
BorderIcons := [];
BorderStyle := bsNone;
Parent := WorkPanel;
FContenido.Show;
Align := alClient;
FContenido.SetFocus;
end;
finally
Application.ProcessMessages;
LockWindowUpdate(0);
HideHourglassCursor;
end;
OnWorkPanelChanged(FContenido);
end;
procedure TfPantallaPrincipal.Usuarios1Click(Sender: TObject);
begin
AppFactuGES.UsuariosController.ShowUserManager;
end;
procedure TfPantallaPrincipal.WMSysCommand(var Msg: TMessage);
begin
//No tocar, sirve para recuperar el foco el formulario principal cuando
// tenemos varios formularios hijos abiertos a la vez.
DefaultHandler(Msg);
end;
procedure TfPantallaPrincipal.CargarModulos;
begin
//HostManager.LoadModule('Empresas_plugin.bpl');
//HostManager.LoadModule('FormasPago_plugin.bpl');
//HostManager.LoadModule('TiposIVA_plugin.bpl');
// HostManager.LoadModule('Almacenes_plugin.bpl');
// HostManager.LoadModule('Familias_plugin.bpl');
// HostManager.LoadModule('Articulos_plugin.bpl');
// HostManager.LoadModule('Inventario_plugin.bpl');
//HostManager.LoadModule('Contactos_plugin.bpl');
// HostManager.LoadModule('RecibosCliente_plugin.bpl');
// HostManager.LoadModule('RemesasCliente_plugin.bpl');
// HostManager.LoadModule('FacturasCliente_plugin.bpl');
// HostManager.LoadModule('RecibosProveedor_plugin.bpl');
// HostManager.LoadModule('FacturasProveedor_plugin.bpl');
{
HostManager.LoadModule('Presupuestos_plugin.bpl');
HostManager.LoadModule('Montajes_plugin.bpl');
HostManager.LoadModule('PedidosProveedor_plugin.bpl');
HostManager.LoadModule('PedidosCliente_plugin.bpl');
HostManager.LoadModule('AlbaranesProveedor_plugin.bpl');
HostManager.LoadModule('AlbaranesCliente_plugin.bpl');
HostManager.LoadModule('BancaElectronica_plugin.bpl');
HostManager.LoadModule('Comisiones_plugin.bpl');
HostManager.LoadModule('TiendaWeb_plugin.bpl');
HostManager.LoadModule('HistoricoMovimientos_plugin.bpl');
HostManager.LoadModule('RemesasProveedor_plugin.bpl');
HostManager.LoadModule('Referencias_plugin.bpl');
HostManager.LoadModule('Informes_plugin.bpl');
HostManager.LoadModule('InfVentasArticulo_plugin.bpl');
HostManager.LoadModule('InfMargenArticulo_plugin.bpl');
HostManager.LoadModule('PedidosMontaje_plugin.bpl');
HostManager.LoadModule('CobrosMontaje_plugin.bpl');
HostManager.LoadModule('MontajesDetalle_plugin.bpl');
HostManager.LoadModule('MontajesCompleto_plugin.bpl');
}
end;
constructor TfPantallaPrincipal.Create(AOwner: TComponent);
begin
inherited;
FContenido := NIL;
with NavPaneController do
begin
SmallImages := ModulesSmallImageList;
LargeImages := ModulesLargeImageList;
NavigationPane := JvNavigationPane;
MainForm := Self;
end;
with MainMenuController do
begin
SmallImages := ModulesSmallImageList;
LargeImages := ModulesLargeImageList;
MainMenu := HostMenu;
MainForm := Self;
end;
end;
procedure TfPantallaPrincipal.CreateParams(var Params: TCreateParams);
begin
// <20><><EFBFBD>Fallo en Delphi 2007!!!
// Cambio los param<61>tros para obligar a que aparezca el icono en la barra de tareas.
inherited CreateParams(Params);
with Params do begin
ExStyle := ExStyle or WS_EX_APPWINDOW;
WndParent := GetDesktopwindow;
end;
end;
procedure TfPantallaPrincipal.actActualizacionesExecute(Sender: TObject);
begin
{ fActualizacion := TfActualizacion.Create(Self);
try
fActualizacion.ShowModal;
finally
FreeAndNil(fActualizacion);
end;}
end;
procedure TfPantallaPrincipal.actCambiarPassExecute(Sender: TObject);
begin
AppFactuGES.UsuariosController.ShowChangePassword;
RefrescarUI;
end;
procedure TfPantallaPrincipal.Acercade1Click(Sender: TObject);
begin
AppFactuGES.UsuariosController.StartLogin;
end;
procedure TfPantallaPrincipal.actAcercaExecute(Sender: TObject);
begin
with TfAcercaDe.Create(NIL) do
try
HostManager := Self.HostManager;
ShowModal;
finally
Free;
end;
end;
function TfPantallaPrincipal.IsShortcut(var Message: TWMKey): Boolean;
Var
ctrl: TWinControl;
comp: TComponent;
i: Integer;
Begin
ctrl := ActiveControl;
If ctrl <> Nil Then Begin
Repeat
ctrl := ctrl.Parent
Until (ctrl = nil) or (ctrl Is TCustomForm);
// Note: replace TCustomFrame with TForm, check if the found form is
// self, if not, execute the following block of code.
If ctrl <> nil Then Begin
For i:= 0 To ctrl.componentcount-1 Do Begin
comp:= ctrl.Components[i];
If comp Is TCustomActionList Then Begin
result := TCustomActionList(comp).IsShortcut( message );
If result Then
Exit;
End;
End;
End;
End;
//Result := inherited IsShortCut(Message);
end;
procedure TfPantallaPrincipal.JvNavigationPaneChange(Sender: TObject);
begin
{ Cuando se destruye el formulario este evento salta pero no
hay que cambiar de empresa }
if (csDestroying in ComponentState) then
Exit;
//Se libera el contenido que tenga ya que cambiamos de empresa;
ReleaseEmbedded;
AppFactuGES.CambarEmpresa(JvNavigationPane.ActivePage.Tag);
RefrescarUI;
end;
procedure TfPantallaPrincipal.actConexionExecute(Sender: TObject);
begin
dmConexion.ConfigurarConexion;
RefrescarUI;
end;
end.