Varela_PuntosVenta/Source/ApplicationBase/Usuarios/Views/uEditorUsuario.pas
2008-05-07 16:47:05 +00:00

302 lines
7.9 KiB
ObjectPascal
Raw Blame History

unit uEditorUsuario;
interface
uses
Windows, Menus, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uEditorDBItem, JvAppStorage, JvAppRegistryStorage, DB, uDAInterfaces,
uDADataTable, JvComponentBase, JvFormPlacement, ImgList, PngImageList,
StdActns, ActnList, ComCtrls, JvExComCtrls, JvStatusBar, TBX, TB2Item,
TB2Dock, TB2Toolbar, pngimage, ExtCtrls, JvExControls, JvNavigationPane,
uIEditorUsuario, uUsuariosController, uCustomView, uViewBase, uViewUsuario,
uBizUsuarios, dxLayoutLookAndFeels;
type
TfEditorUsuario = class(TfEditorDBItem, IEditorUsuario)
dxLayoutLookAndFeelList1: TdxLayoutLookAndFeelList;
dxLayoutOfficeLookAndFeel1: TdxLayoutOfficeLookAndFeel;
actCambiarPassword: TAction;
TBXSubmenuItem2: TTBXSubmenuItem;
TBXItem7: TTBXItem;
TBXItem33: TTBXItem;
frViewUsuario1: TfrViewUsuario;
procedure actEliminarUpdate(Sender: TObject);
procedure actCambiarPasswordExecute(Sender: TObject);
procedure actCambiarPasswordUpdate(Sender: TObject);
procedure actGuardarCerrarExecute(Sender: TObject);
procedure actGuardarExecute(Sender: TObject);
procedure dsDataTableDataChange(Sender: TObject; Field: TField);
procedure actRefrescarExecute(Sender: TObject);
procedure FormShow(Sender: TObject);
private
FController : IUsuariosController;
FUsuario : IBizUsuario;
FViewUsuario : IViewUsuario;
protected
function GetController : IUsuariosController;
procedure SetController (const Value : IUsuariosController);
function GetUsuario: IBizUsuario;
procedure SetUsuario(const Value: IBizUsuario);
procedure GuardarInterno;
procedure EliminarInterno;
procedure RefrescarInterno;
procedure ActualizarEstadoEditor;
procedure PonerTitulos(const ATitulo: string = '');
function GetViewUsuario: IViewUsuario;
procedure SetViewUsuario(const Value: IViewUsuario);
property ViewUsuario: IViewUsuario read GetViewUsuario write SetViewUsuario;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
property Controller : IUsuariosController read GetController write SetController;
property Usuario: IBizUsuario read GetUsuario write SetUsuario;
end;
implementation
{$R *.dfm}
uses
uDialogUtils, cxControls;
{ TfEditorUsuario }
var
FIDNuevoGuardado : Integer = -1;
procedure TfEditorUsuario.actCambiarPasswordExecute(Sender: TObject);
begin
inherited;
FController.CambiarPassword(FUsuario.ID);
end;
procedure TfEditorUsuario.actCambiarPasswordUpdate(Sender: TObject);
begin
inherited;
(Sender as TAction).Enabled := not FUsuario.EsNuevo;
end;
procedure TfEditorUsuario.actEliminarUpdate(Sender: TObject);
begin
inherited;
if (Sender as TAction).Enabled then
(Sender as TAction).Enabled := (FUsuario.PRIVILEGED = 0);
end;
procedure TfEditorUsuario.actGuardarCerrarExecute(Sender: TObject);
begin
ShowHourglassCursor;
try
if actGuardar.Execute then
actCerrar.Execute;
finally
HideHourglassCursor;
end;
end;
procedure TfEditorUsuario.actGuardarExecute(Sender: TObject);
begin
if actModificar.Enabled then
begin
GuardarInterno;
ActualizarEstadoEditor;
end;
end;
procedure TfEditorUsuario.actRefrescarExecute(Sender: TObject);
begin
if actRefrescar.Enabled then
begin
RefrescarInterno;
ActualizarEstadoEditor;
end;
end;
procedure TfEditorUsuario.ActualizarEstadoEditor;
begin
PonerTitulos;
if HayDatos then
begin
if (Self.Modified) and (dsDataTable.DataTable.State <> dsInsert) then
StatusBar.Panels[0].Text := ' Se han producido cambios'
else
StatusBar.Panels[0].Text := '';
end;
end;
constructor TfEditorUsuario.Create(AOwner: TComponent);
begin
inherited;
//pgPaginas.ActivePageIndex := 0;
FViewUsuario := frViewUsuario1;
end;
destructor TfEditorUsuario.Destroy;
begin
// Utilizar mejor OnClose;
inherited;
end;
procedure TfEditorUsuario.dsDataTableDataChange(Sender: TObject; Field: TField);
begin
inherited;
ActualizarEstadoEditor;
end;
procedure TfEditorUsuario.EliminarInterno;
begin
if (Application.MessageBox('<27>Desea borrar este usuario?', 'Atenci<63>n', MB_YESNO) = IDYES) then
begin
inherited;
if not FController.EliminarUsuario(FUsuario.ID) then
actRefrescar.Execute;
end;
end;
procedure TfEditorUsuario.FormShow(Sender: TObject);
begin
inherited;
ActualizarEstadoEditor;
if Assigned(Parent) then
begin
StatusBar.Visible := False;
actCerrar.ShortCut := 0
end
else begin
StatusBar.Visible := True;
actCerrar.ShortCut := ShortCut(VK_ESCAPE, []);
end;
end;
function TfEditorUsuario.GetController: IUsuariosController;
begin
Result := FController;
end;
function TfEditorUsuario.GetUsuario: IBizUsuario;
begin
Result := FUsuario;
end;
function TfEditorUsuario.GetViewUsuario: IViewUsuario;
begin
Result := FViewUsuario;
end;
procedure TfEditorUsuario.GuardarInterno;
var
AMensaje : String;
AContinuar : Boolean;
begin
inherited;
if FUsuario.EsNuevo then
begin
if (frViewUsuario1.ePassword.Text <> frViewUsuario1.eConfirmarPassword.Text) then
raise Exception.Create('La contrase<73>a no se confirm<72> correctamente' + #10#13 +
'Aseg<65>rese de que la contrase<73>a y su confirmaci<63>n sean iguales.')
else
if not FController.ValidarPassword(frViewUsuario1.ePassword.Text,
frViewUsuario1.eUsuario.Text, frViewUsuario1.eNombre.Text, AMensaje) then
raise Exception.Create(AMensaje)
else begin
FUsuario.Edit;
FUsuario.PASS := frViewUsuario1.ePassword.Text;
FUsuario.Edit;
AContinuar := True;
end;
end
else
AContinuar := True;
if AContinuar then
begin
if FController.GuardarUsuario(FUsuario) then
begin
FIDNuevoGuardado := FUsuario.ID;
FUsuario.DataTable.CancelUpdates;
Modified := False;
actRefrescar.Execute;
end;
end
end;
procedure TfEditorUsuario.PonerTitulos(const ATitulo: string);
var
FTitulo : String;
begin
if Assigned(Usuario) then
begin
if Usuario.EsNuevo then
FTitulo := 'Nuevo usuario'
else
FTitulo := 'Usuario';
if Length(Usuario.USERNAME) > 0 then
FTitulo := FTitulo + ' - ' + Usuario.USERNAME;
end;
if ReadOnly then
begin
JvNavPanelHeader.Caption := FTitulo + ' (NO MODIFICABLE)';
Caption := FTitulo + ' (NO MODIFICABLE)';
end
else
begin
JvNavPanelHeader.Caption := FTitulo;
Caption := FTitulo;
end;
end;
procedure TfEditorUsuario.RefrescarInterno;
begin
inherited;
if (FIDNuevoGuardado > 0) and (FUsuario.ID <> FIDNuevoGuardado) then
begin
if (dsDataTable.DataTable.IsEmpty) or (not ModifiedQuery) then
Exit; // No continuar con el refresco
dsDataTable.DataTable.DisableControls; //<- No descomentar
ShowHourglassCursor;
try
dsDataTable.DataTable.First;
if dsDataTable.DataTable.Locate('ID', FIDNuevoGuardado, []) then
FIDNuevoGuardado := -1;
finally
dsDataTable.DataTable.EnableControls; //<- No descomentar
HideHourglassCursor;
end;
end;
end;
procedure TfEditorUsuario.SetController(const Value: IUsuariosController);
begin
FController := Value;
if Assigned(FViewUsuario) and Assigned(FController) then
FViewUsuario.Controller := FController;
end;
procedure TfEditorUsuario.SetUsuario(const Value: IBizUsuario);
begin
FUsuario := Value;
dsDataTable.DataTable := FUsuario.DataTable;
if Assigned(FViewUsuario) and Assigned(Usuario) then
FViewUsuario.Usuario := Usuario;
end;
procedure TfEditorUsuario.SetViewUsuario(const Value: IViewUsuario);
begin
FViewUsuario := Value;
if Assigned(FViewUsuario) and Assigned(Usuario) then
FViewUsuario.Usuario := Usuario;
end;
end.