unit uEditorCambiarPassword;

interface

uses
  Forms, UCBase, ExtCtrls, Classes, ActnList, StdCtrls, Controls, Buttons,
  uBizUsuarios, uUsuariosController;

type
  TfEditorCambiarPassword = class(TForm)
    lbSenhaAtu:   TLabel;
    lbNovaSenha:  TLabel;
    lbConfirma:   TLabel;
    EditAtu:      TEdit;
    EditNova:     TEdit;
    EditConfirma: TEdit;
    ActionList1: TActionList;
    actAceptar: TAction;
    actCancelar: TAction;
    Bevel4: TBevel;
    bAceptar: TButton;
    bCancelar: TButton;
    Label1: TLabel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure actCancelarExecute(Sender: TObject);
    procedure actAceptarExecute(Sender: TObject);
  public
    Usuario : IBizUsuario;
    Controller : IUsuariosController;
    CambioObligatorio  : Boolean;
  end;

implementation

{$R *.dfm}

uses
  uDialogUtils;

procedure TfEditorCambiarPassword.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caHide;
end;

procedure TfEditorCambiarPassword.actAceptarExecute(Sender: TObject);
var
  AuxPass : String;
  AMensaje : String;
begin
  case Controller.Criptografia of
    ucStandard: AuxPass := EditAtu.Text;
         ucMD5: AuxPass := MD5Sum(EditAtu.Text);
  end;

  if Usuario.PASS <> AuxPass then
  begin
    ShowWarningMessage('Cambiar la contraseña', 'La contraseña actual no es correcta.' + #10#13 +
      'Asegúrese de que la contraseña actual está bien introduccida.');
    EditAtu.SetFocus;
    Exit;
  end;

  if (EditNova.Text <> EditConfirma.Text) then
  begin
    ShowWarningMessage('Cambiar la contraseña', 'La contraseña no se confirmó correctamente' + #10#13 +
      'Asegúrese de que la contraseña y su confirmación sean iguales.');
    EditNova.SetFocus;
    Exit;
  end
  else begin
    if not Controller.ValidarPassword(EditNova.Text, Usuario.LOGIN, Usuario.USERNAME, AMensaje) then
    begin
      ShowWarningMessage('Cambiar la contraseña', AMensaje);
      EditNova.SetFocus;
      Exit;
    end
    else begin
      if CambioObligatorio = True then
        CambioObligatorio := False;
      ModalResult := mrOK;
    end;
  end;
end;

procedure TfEditorCambiarPassword.actCancelarExecute(Sender: TObject);
begin
  Close;
end;

procedure TfEditorCambiarPassword.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if CambioObligatorio then
  begin
    CanClose := False;
    ShowWarningMessage('Cambiar la contraseña', 'El cambio de la contraseña es obligatorio');
  end;
end;

end.
