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('¿Desea borrar este usuario?', 'Atenció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ña no se confirmó correctamente' + #10#13 + 'Asegúrese de que la contraseña y su confirmació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.