diff --git a/pom.xml b/pom.xml index efd35ad71..8d364424e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,12 +4,12 @@ 4.0.0 br.com.rjconsultores ventaboletosadm - 1.81.0 + 1.82.0 war - 1.61.0 - 1.46.0 + 1.62.0 + 1.47.0 UTF-8 diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/IndexController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/IndexController.java index e94bde606..ac8fbab5f 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/IndexController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/IndexController.java @@ -12,6 +12,8 @@ import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.zkoss.util.resource.Labels; import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.Execution; +import org.zkoss.zk.ui.Executions; import org.zkoss.zk.ui.event.Event; import org.zkoss.zk.ui.event.EventListener; import org.zkoss.zk.ui.event.Events; @@ -97,8 +99,19 @@ public class IndexController extends MyGenericForwardComposer { if (usuario == null) { toolBarUser.setVisible(Boolean.FALSE); + + Execution exec = Executions.getCurrent(); + String param = exec.getParameter("param"); + + if(param != null) { + Map args = new HashMap(); + args.put("login", param); + + openWindow("/recuperarSenha.zul", "Recuperar Senha", args, MODAL, Boolean.FALSE); + } else { + openWindow("/login.zul", Labels.getLabel("winLogin.title"), arg, MODAL, Boolean.FALSE); + } - openWindow("/login.zul", Labels.getLabel("winLogin.title"), arg, MODAL, Boolean.FALSE); } else { win.setCtrlKeys("^q"); diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/LoginController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/LoginController.java new file mode 100644 index 000000000..b5ef5c9e6 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/LoginController.java @@ -0,0 +1,196 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package com.rjconsultores.ventaboletos.web.gui.controladores; + +import java.util.Date; +import java.util.List; + +import javax.mail.SendFailedException; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Controller; +import org.zkoss.util.resource.Labels; +import org.zkoss.zhtml.Messagebox; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.util.Clients; +import org.zkoss.zul.Button; +import org.zkoss.zul.Textbox; + +import com.rjconsultores.ventaboletos.entidad.Constante; +import com.rjconsultores.ventaboletos.entidad.RecuperarSenha; +import com.rjconsultores.ventaboletos.entidad.Usuario; +import com.rjconsultores.ventaboletos.service.ConstanteService; +import com.rjconsultores.ventaboletos.service.UsuarioService; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.utilerias.SendMail; +import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; + +@Controller("loginController") +@Scope("prototype") +public class LoginController extends MyGenericForwardComposer { + + private static final long serialVersionUID = 1L; + private static final String HOST_SMTP_RECUPERACAOSENHA = "HOST_SMTP_RECUPERACAOSENHA"; + private static final String PORTA_SMTP_RECUPERACAOSENHA = "PORTA_SMTP_RECUPERACAOSENHA"; + private static final String USUARIO_SMTP_RECUPERACAOSENHA = "USUARIO_SMTP_RECUPERACAOSENHA"; + private static final String SENHAUSUARIO_SMTP_RECUPERACAOSENHA = "SENHAUSUARIO_SMTP_RECUPERACAOSENHA"; + private static final String URL_ADM = "URL_ADM"; + private static Logger log = LogManager.getLogger(LoginController.class); + + @Autowired + private UsuarioService usuarioService; + + @Autowired + private ConstanteService constanteService; + + private Button btnRecuperarSenha; + + //login usuario, mantive o nome da tela para nao alterar o processo de login + private Textbox u; + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + } + + public Button getBtnRecuperarSenha() { + return btnRecuperarSenha; + } + + public void setBtnRecuperarSenha(Button btnRecuperarSenha) { + this.btnRecuperarSenha = btnRecuperarSenha; + } + + public void onClick$btnRecuperarSenha(Event ev) { + try { + String login = u.getValue(); + + if (StringUtils.isBlank(login)) { + Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.camposVazios"), + Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION); + return; + } + + List usuarioList = usuarioService.buscarPelaCveUsuario(login); + + //Nao encontrado nenhum usuario com o login + if(usuarioList.isEmpty()) { + Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.loginNaoEncontrado"), + Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION); + return; + } + + if(usuarioList.size() > 1) { + Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.multiplusUsuariosPorLogin"), + Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION); + return; + } + + Usuario usuario = usuarioList.get(0); + + if(StringUtils.isBlank(usuario.getDescCorreo())) { + Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.configuracaoConstante"), + Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION); + return; + } + + Constante hostSmtp = constanteService.buscarPorNomeConstante(HOST_SMTP_RECUPERACAOSENHA); + Constante portaSmtp = constanteService.buscarPorNomeConstante(PORTA_SMTP_RECUPERACAOSENHA); + Constante usuarioSmtp = constanteService.buscarPorNomeConstante(USUARIO_SMTP_RECUPERACAOSENHA); + Constante senhaUsuarioSMTP = constanteService.buscarPorNomeConstante(SENHAUSUARIO_SMTP_RECUPERACAOSENHA); + Constante urlADM = constanteService.buscarPorNomeConstante(URL_ADM); + + if(isNull(hostSmtp) || isNull(portaSmtp) || isNull(usuarioSmtp) || isNull(senhaUsuarioSMTP) || isNull(urlADM)) { + Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.emailNaoCadastrado"), + Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION); + return; + } + + String URL = montarURL(login, urlADM, usuario); + + + enviarEmail(usuario, usuarioSmtp.getValorconstante(), hostSmtp.getValorconstante(), senhaUsuarioSMTP.getValorconstante(), + portaSmtp.getValorconstante(), URL); + + Messagebox.show(Labels.getLabel("winCambiaContrasena.MSG.EmailRecuperacaoSenhaEnviado"), + Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION); + } catch (Exception ex) { + log.error(ex.getLocalizedMessage()); + Clients.alert(ex.getLocalizedMessage(), Labels.getLabel("winCambiaContrasena.title"), Messagebox.INFORMATION); + } + } + + private String montarURL(String login, Constante urlADM, Usuario usuario) { + String URL = urlADM.getValorconstante(); + + String dataAtual = DateUtil.getStringDate24Hour(new Date()); + + String paramEncode = login.concat(";").concat(dataAtual); + + paramEncode = new String(Base64.encodeBase64(paramEncode.getBytes())); + + URL = URL.concat("?param=").concat(paramEncode); + + salvarParametro(paramEncode, usuario); + + return URL; + } + + private void salvarParametro(String paramEncode, Usuario usuario) { + RecuperarSenha recSenhaExiste = usuarioService.buscarLinkRecuperacaoSenhaPeloParam(paramEncode); + + //Para evitar criar mais de um link no mesmo minuto + if(recSenhaExiste == null) { + RecuperarSenha recSenha = new RecuperarSenha(); + + recSenha.setParam(paramEncode); + recSenha.setActivo(Boolean.TRUE); + recSenha.setFecmodif(new Date()); + recSenha.setUsuarioId(usuario.getUsuarioId()); + + usuarioService.salvarLinkRecuperacaoSenha(recSenha); + } + } + + private boolean isNull(Constante valorConstante) { + return valorConstante == null || StringUtils.isBlank(valorConstante.getValorconstante()); + } + + private void enviarEmail(Usuario usuario, String usuarioSmtp, String smtpHost, String senhaSmtp, String portaSmtp, String urlADM) throws SendFailedException { + + SendMail mail = new SendMail(); + mail.setEmailTo(usuario.getDescCorreo()); + mail.setEmailFrom(usuarioSmtp); // "cassiohcsilvadev@gmail.com" + mail.setSmtpHost(smtpHost); //"smtp.gmail.com" + mail.setSmtpPassword(senhaSmtp); // "jtzpzyzcjviyheym" + mail.setSmtpPort(portaSmtp); //"587" + mail.setSmtpUser(usuarioSmtp); //"cassiohcsilvadev@gmail.com" + mail.setAuth(true); + + //URL: /ventaboletosadm/index.zul?param=USUARIO + + String textoEmail = "RECUPERAÇÃO DE SENHA ADM. \n "; + textoEmail = textoEmail.concat("Link para recuperacao de senha: " + urlADM + " \n"); + textoEmail = textoEmail.concat("O link tem validade de 5 minutos. "); + + mail.setSubject("RECUPERAÇÃO DE SENHA ADM."); + mail.setText(textoEmail); + mail.send(); + } + + public Textbox getU() { + return u; + } + + public void setU(Textbox u) { + this.u = u; + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/RecuperarSenhaController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/RecuperarSenhaController.java new file mode 100644 index 000000000..692c67f31 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/RecuperarSenhaController.java @@ -0,0 +1,167 @@ +package com.rjconsultores.ventaboletos.web.gui.controladores; + +import java.util.Date; +import java.util.List; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang.StringUtils; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Controller; +import org.zkoss.util.resource.Labels; +import org.zkoss.zhtml.Messagebox; +import org.zkoss.zk.ui.Component; +import org.zkoss.zk.ui.Executions; +import org.zkoss.zk.ui.event.Event; +import org.zkoss.zk.ui.util.Clients; +import org.zkoss.zul.Button; +import org.zkoss.zul.Textbox; + +import com.rjconsultores.ventaboletos.entidad.RecuperarSenha; +import com.rjconsultores.ventaboletos.entidad.Usuario; +import com.rjconsultores.ventaboletos.service.UsuarioService; +import com.rjconsultores.ventaboletos.utilerias.DateUtil; +import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; + +@Controller("recuperarSenhaController") +@Scope("prototype") +public class RecuperarSenhaController extends MyGenericForwardComposer { + + private static final long serialVersionUID = 1L; + private static Logger log = LogManager.getLogger(RecuperarSenhaController.class); + + @Autowired + private UsuarioService usuarioService; + + private Textbox txtUser; + private Textbox txtNewPassword; + private Textbox txtConfirmPassword; + private Button btnSalvar; + private Button btnFecharTela; + + private RecuperarSenha recSenha; + + @Override + public void doAfterCompose(Component comp) throws Exception { + super.doAfterCompose(comp); + + String param = (String) Executions.getCurrent().getArg().get("login"); + + if(param != null) { + recSenha = usuarioService.buscarLinkRecuperacaoSenhaPeloParam(param); + + //Se nao existe no banco nao ativa a troca de senha + if(recSenha == null) { + desativarCampos(); + } else { + btnFecharTela.setVisible(false); + String paramDecode = new String(Base64.decodeBase64(param.getBytes())); + + String[] parametros = paramDecode.split(";"); + + if(parametros.length != 2) { + desativarCampos(); + } else { + + if(isDataValida(parametros)) { + txtUser.setText(parametros[0]); + + } else { + desativarCampos(); + btnFecharTela.setLabel("Link expirado. Fechar tela."); + } + } + } + + } + } + + private void desativarCampos() { + txtUser.setDisabled(true); + txtNewPassword.setDisabled(true); + txtConfirmPassword.setDisabled(true); + + btnSalvar.setVisible(false); + btnFecharTela.setVisible(true); + } + + private boolean isDataValida(String[] parametros) { + Date dataParam =DateUtil.getDateString24Hour(parametros[1]); + + Date dataAtual = new Date(); + + Long minutos = DateUtil.getElapsedMinutos(dataParam, dataAtual); + + //A data e valida em ate 5 minutos + return minutos <= 5; + } + + private void fecharTela() { + closeWindow(); + openWindow("/login.zul", Labels.getLabel("indexController.app.nome"), arg, MODAL, Boolean.FALSE); + } + + public void onClick$btnFecharTela(Event ev) { + fecharTela(); + } + + public void onClick$btnSalvar(Event ev) throws InterruptedException { + try { + + if (StringUtils.isBlank(txtUser.getValue())) { + Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.camposVazios"), + Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION); + return; + } + + List usuarioList = usuarioService.buscarPelaCveUsuario(txtUser.getValue()); + + //Nao encontrado nenhum usuario + if(usuarioList.isEmpty()) { + Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.camposVazios"), + Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION); + return; + } + + if (!txtNewPassword.getValue().equals(txtConfirmPassword.getValue())) { + Messagebox.show(Labels.getLabel("winCambiaContrasena.erro.senhasDiferentes"), + Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION); + return; + } + + Usuario usuario = usuarioList.get(0); + + usuarioService.cambiarContrasena(usuario, txtNewPassword.getValue()); + + //Desativar link + usuarioService.desativarLinkRecuperacaoSenha(recSenha); + + Messagebox.show(Labels.getLabel("winCambiaContrasena.MSG.suscribirOK"), + Labels.getLabel("winCambiaContrasena.title"), Messagebox.OK, Messagebox.INFORMATION); + + fecharTela(); + + } catch (Exception ex) { + log.error(ex.getLocalizedMessage()); + Clients.alert(ex.getLocalizedMessage(), Labels.getLabel("winCambiaContrasena.title"), Messagebox.INFORMATION); + } + } + + public Button getBtnSalvar() { + return btnSalvar; + } + + public void setBtnSalvar(Button btnSalvar) { + this.btnSalvar = btnSalvar; + } + + public Button getBtnFecharTela() { + return btnFecharTela; + } + + public void setBtnFecharTela(Button btnFecharTela) { + this.btnFecharTela = btnFecharTela; + } +} diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/seguridad/EditarUsuarioController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/seguridad/EditarUsuarioController.java index 615fe5794..84495ca9c 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/seguridad/EditarUsuarioController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/seguridad/EditarUsuarioController.java @@ -27,6 +27,7 @@ import org.zkoss.zul.Button; import org.zkoss.zul.Checkbox; import org.zkoss.zul.Combobox; import org.zkoss.zul.Comboitem; +import org.zkoss.zul.Datebox; import org.zkoss.zul.Label; import org.zkoss.zul.ListModelList; import org.zkoss.zul.Radio; @@ -155,6 +156,10 @@ public class EditarUsuarioController extends MyGenericForwardComposer { private boolean indConstanteIndMultiPuntoVenta; private final String nombreIndConstanteIndMultiPuntoVenta ="IND_MULTI_PUNTOVENTA"; + private Checkbox chkIndRecuperarSenha; + private Textbox txtMatricula; + private Datebox dataNascimento; + private Textbox txtSobrenomePaterno; @Override public void doAfterCompose(Component comp) throws Exception { @@ -592,6 +597,13 @@ public class EditarUsuarioController extends MyGenericForwardComposer { usuario.setTipoVentaIntegracaoId(Long.valueOf(tipoVentaSeleccionado.getTipoventaId())); } + if(chkIndRecuperarSenha.isChecked()) { + if(dataNascimento.getValue() == null || StringUtils.isBlank(txtMatricula.getValue()) || StringUtils.isBlank(txtSobrenomePaterno.getValue())) { + MensagensUtils.showMessageExclamation("editarUsuarioController.MSG.necessarioPreencherDadosRecuperacao", TITULO_CONTROLER); + return; + } + } + usuario.setIndRetornaTodasLocalidades( chkRetornaTodasLocalidades.isChecked()); usuario.setIndTrocaSenha(chkTrocarSenha.isChecked()); @@ -976,4 +988,36 @@ public class EditarUsuarioController extends MyGenericForwardComposer { public void setChkTrocarSenha(Checkbox chkTrocarSenha) { this.chkTrocarSenha = chkTrocarSenha; } + + public Checkbox getChkIndRecuperarSenha() { + return chkIndRecuperarSenha; + } + + public void setChkIndRecuperarSenha(Checkbox chkIndRecuperarSenha) { + this.chkIndRecuperarSenha = chkIndRecuperarSenha; + } + + public Textbox getTxtMatricula() { + return txtMatricula; + } + + public void setTxtMatricula(Textbox txtMatricula) { + this.txtMatricula = txtMatricula; + } + + public Datebox getDataNascimento() { + return dataNascimento; + } + + public void setDataNascimento(Datebox dataNascimento) { + this.dataNascimento = dataNascimento; + } + + public Textbox getTxtSobrenomePaterno() { + return txtSobrenomePaterno; + } + + public void setTxtSobrenomePaterno(Textbox txtSobrenomePaterno) { + this.txtSobrenomePaterno = txtSobrenomePaterno; + } } diff --git a/src/java/spring-config.xml b/src/java/spring-config.xml index 4e9fc8245..e024d308e 100644 --- a/src/java/spring-config.xml +++ b/src/java/spring-config.xml @@ -459,7 +459,8 @@ com.rjconsultores.ventaboletos.entidad.HeaderTabelaEsquemaCorrida com.rjconsultores.ventaboletos.entidad.Disponibilidad com.rjconsultores.ventaboletos.entidad.EmpresaPMArtespConfig - com.rjconsultores.ventaboletos.entidad.EmpresaSicfeConfig + com.rjconsultores.ventaboletos.entidad.EmpresaSicfeConfig + com.rjconsultores.ventaboletos.entidad.RecuperarSenha diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index 3fa599802..c5bc3a659 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -9988,3 +9988,16 @@ winMovimentacionBilhetesPuntoVenta.numSerie.label = Série winMovimentacionBilhetesPuntoVenta.origem.label = Origen winMovimentacionBilhetesPuntoVenta.puntoventa.label = Ag. winMovimentacionBilhetesPuntoVenta.tipoMovimentacion.label = Naturaleza + +editarUsuarioController.tabel.restaurarSenha= Restablecimiento de contraseña +editarUsuarioController.tabel.numeroMatricula= Registro +editarUsuarioController.tabel.dataNascimento= Fecha de nacimiento +editarUsuarioController.tabel.sobrenomePaterno= Apellido paterno +editarUsuarioController.MSG.necessarioPreencherDadosRecuperacao=Se deben completar todos los datos para utilizar la recuperación de contraseña. +winCambiaContrasena.erro.loginNaoEncontrado= No se encontró ningún usuario con el inicio de sesión proporcionado. +winCambiaContrasena.erro.multiplusUsuariosPorLogin= Se encontró más de un usuario con el mismo inicio de sesión, comuníquese con el administrador del sistema. +winCambiaContrasena.erro.emailNaoCadastrado= Correo electrónico del usuario no registrado, contacte al administrador del sistema. +winCambiaContrasena.MSG.EmailRecuperacaoSenhaEnviado=Se envió un enlace de recuperación de contraseña al correo electrónico registrado en el inicio de sesión del usuario. +winCambiaContrasena.erro.configuracaoConstante= Es necesario configurar constantes de envío de correo electrónico para la recuperación de contraseña. Póngase en contacto con el administrador de su sistema. +winCambiaContrasena.erro.linkInvalido=Enlace no válido. +winCambiaContrasena.btnLinkInvalidoFecharTela= Enlace no válido. Cerrar pantalla. diff --git a/web/WEB-INF/i3-label_fr_FR.label b/web/WEB-INF/i3-label_fr_FR.label index 82457b6a7..47a397d61 100644 --- a/web/WEB-INF/i3-label_fr_FR.label +++ b/web/WEB-INF/i3-label_fr_FR.label @@ -9961,3 +9961,17 @@ winMovimentacionBilhetesPuntoVenta.numSerie.label = Série winMovimentacionBilhetesPuntoVenta.origem.label = Origine winMovimentacionBilhetesPuntoVenta.puntoventa.label = Ag. winMovimentacionBilhetesPuntoVenta.tipoMovimentacion.label = Nature + +editarUsuarioController.tabel.restaurarSenha= Réinitialisation du mot de passe +editarUsuarioController.tabel.numeroMatricula= Inscription +editarUsuarioController.tabel.dataNascimento= Date de naissance +editarUsuarioController.tabel.sobrenomePaterno= Nom paternel +editarUsuarioController.MSG.necessarioPreencherDadosRecuperacao=Toutes les données doivent être renseignées pour utiliser la récupération de mot de passe. +winCambiaContrasena.erro.loginNaoEncontrado= Aucun utilisateur avec le login donné n'a été trouvé. +winCambiaContrasena.erro.multiplusUsuariosPorLogin= Plusieurs utilisateurs ont été trouvés avec le même identifiant, contactez votre administrateur système. +winCambiaContrasena.erro.emailNaoCadastrado= E-mail de l'utilisateur non enregistré, contactez l'administrateur système. +winCambiaContrasena.MSG.EmailRecuperacaoSenhaEnviado=Un lien de récupération de mot de passe a été envoyé à l'e-mail enregistré dans la connexion de l'utilisateur. +winCambiaContrasena.erro.configuracaoConstante= Il est nécessaire de configurer les constantes d'envoi d'e-mails pour la récupération du mot de passe. Contactez votre administrateur système. +winCambiaContrasena.erro.linkInvalido=Lien invalide. +winCambiaContrasena.btnLinkInvalidoFecharTela= Lien invalide. Fermez l'écran. + diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index 2df16bbe4..357d94b99 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -9966,3 +9966,16 @@ winMovimentacionBilhetesPuntoVenta.numSerie.label = Série winMovimentacionBilhetesPuntoVenta.origem.label = Origem winMovimentacionBilhetesPuntoVenta.puntoventa.label = Ag. winMovimentacionBilhetesPuntoVenta.tipoMovimentacion.label = Natureza + +editarUsuarioController.tabel.restaurarSenha= Restauração de Senha +editarUsuarioController.tabel.numeroMatricula= Matrícula +editarUsuarioController.tabel.dataNascimento= Data Nascimento +editarUsuarioController.tabel.sobrenomePaterno= Sobrenome Paterno +editarUsuarioController.MSG.necessarioPreencherDadosRecuperacao=Necessário preencher todos os dados para utilização da recuperação de senha. +winCambiaContrasena.erro.loginNaoEncontrado= Não foi encontrado nenhum usuário com o login informado. +winCambiaContrasena.erro.multiplusUsuariosPorLogin= Foi encontrado mais de um usuário com o mesmo login, contacte o administrador do sistema. +winCambiaContrasena.erro.emailNaoCadastrado= E-mail do usuário não cadastrado, contacte o adaministrado do sistema. +winCambiaContrasena.MSG.EmailRecuperacaoSenhaEnviado=Foi enviado um link de recuperação de senha para o e-mail cadastrado no login do usuário. +winCambiaContrasena.erro.configuracaoConstante= Necessário configurar constantes de envio de e-mail para a recuperação de senha. Contacte o administrador do sistema. +winCambiaContrasena.erro.linkInvalido=Link inválido. +winCambiaContrasena.btnLinkInvalidoFecharTela= Link Inválido. Fechar tela. diff --git a/web/gui/seguridad/editarUsuario.zul b/web/gui/seguridad/editarUsuario.zul index 1c4ff6dd7..9484740e1 100644 --- a/web/gui/seguridad/editarUsuario.zul +++ b/web/gui/seguridad/editarUsuario.zul @@ -39,6 +39,7 @@ + @@ -259,6 +260,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/web/login.zul b/web/login.zul index de53aaac5..7cc0f8f51 100644 --- a/web/login.zul +++ b/web/login.zul @@ -8,9 +8,9 @@ xmlns:h="http://www.w3.org/1999/xhtml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:w="http://www.zkoss.org/2005/zk/client" - xsi:schemaLocation="http://www.zkoss.org/2005/zul http://www.zkoss.org/2005/zul/zul.xsd"> + xsi:schemaLocation="http://www.zkoss.org/2005/zul"> - @@ -32,13 +32,15 @@ + name="j_password" /> + +