package com.fp.armas.portal.controller.registro; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.Serializable; import java.util.ArrayList; import java.util.Calendar; import java.util.Collection; import javax.faces.bean.ManagedBean; import javax.faces.bean.ManagedProperty; import javax.faces.bean.ViewScoped; import javax.faces.context.FacesContext; import javax.inject.Inject; import org.apache.commons.io.FilenameUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.exception.ExceptionUtils; import org.primefaces.event.FileUploadEvent; import org.primefaces.model.DefaultStreamedContent; import com.fp.armas.portal.controller.base.BaseController; import com.fp.armas.portal.datamanager.base.BaseDataManager; import com.fp.armas.portal.datamanager.registro.RegistroDataManager; import com.fp.armas.portal.facade.PortalService; import com.fp.armas.portal.faces.FacesUtil; import com.fp.armas.portal.model.Tcustcompany; import com.fp.armas.portal.model.Tcustpeople; import com.fp.armas.portal.model.Tcustpersonaddress; import com.fp.armas.portal.model.Tcustpersondetail; import com.fp.armas.portal.model.Tcustpersonphone; import com.fp.armas.portal.model.Tgenecanton; import com.fp.armas.portal.model.Tgenecity; import com.fp.armas.portal.model.Tgenefilesdetail; import com.fp.armas.portal.model.Tgeneparroquia; import com.fp.armas.portal.model.TgeneparroquiaPK; import com.fp.armas.portal.model.Tgeneprovince; import com.fp.armas.portal.util.PortalMessages; import com.fp.armas.portal.webservices.snap.cedula.ClienteCedula; import com.fp.armas.portal.webservices.snap.ruc.ClienteRUC; import ec.gob.registrocivil.consultacedula.Cedula; import ec.gov.sri.wsconsultacontribuyente.ContribuyenteCompleto; /** * Bean que maneja el registro del usuario en el portal y por el cual se va a enviar dichos datos a MAIA * @author dcruz * */ @ManagedBean @ViewScoped public class RegistroController extends BaseController implements Serializable { private static final long serialVersionUID = 1L; private static final String TIPO_TELEFONO=PortalMessages.getInstancia().getString("catalogo.codigo.tipo.telefono"); private static final String TIPO_DIRECCION=PortalMessages.getInstancia().getString("catalogo.codigo.tipo.direccion"); private static final String TIPO_IDENTIFICACION=PortalMessages.getInstancia().getString("catalogo.codigo.tipo.identificacion"); private static final String ESTADO_CIVIL=PortalMessages.getInstancia().getString("catalogo.codigo.tipo.estado.civil"); private static final String PROFESION=PortalMessages.getInstancia().getString("catalogo.codigo.tipo.profesion"); private Boolean isEnableSave=Boolean.TRUE; @ManagedProperty(value="#{registroDataManager}") private RegistroDataManager registroDataManager; @Inject private PortalService portalService; @Override public BaseDataManager getDataManager() { return registroDataManager; } @Override public void inicializar(){ try{ this.registroDataManager.setDireccionPersona(new Tcustpersonaddress()); this.registroDataManager.getDireccionPersona().setTgeneparroquia(new Tgeneparroquia()); this.registroDataManager.getDireccionPersona().getTgeneparroquia().setId(new TgeneparroquiaPK()); this.registroDataManager.setPersona(new Tcustpersondetail()); this.registroDataManager.getPersona().setIdentificationcatalogcode(TIPO_IDENTIFICACION); this.registroDataManager.setTipoDocumentoColl(portalService.obtenerCatalogo(TIPO_IDENTIFICACION)); this.registroDataManager.getDireccionPersona().setCountryCode("EC"); this.registroDataManager.getDireccionPersona().setProvinceCode(null); this.registroDataManager.getDireccionPersona().setCantonCode(null); this.registroDataManager.getDireccionPersona().setCityCode(null); this.registroDataManager.setPaisesColl(portalService.obtenerPais()); this.registroDataManager.setEstadoCivilColl(portalService.obtenerCatalogo(ESTADO_CIVIL)); this.registroDataManager.setActividadEconomicaColl(portalService.obtenerActividadEconomica()); this.registroDataManager.setProfesionColl(portalService.obtenerCatalogo(PROFESION)); this.registroDataManager.setDireccionPersona(new Tcustpersonaddress()); this.registroDataManager.getDireccionPersona().setAddresstypecatalogcode(TIPO_DIRECCION); this.registroDataManager.setCorreoPersona(new Tcustpersonaddress()); this.registroDataManager.getCorreoPersona().setAddresstypecatalogcode(TIPO_DIRECCION); this.registroDataManager.getCorreoPersona().setAddresstypecatalog("3"); this.registroDataManager.setTelefonoPersona(new Tcustpersonphone()); this.registroDataManager.getTelefonoPersona().setAddressnumber(1L); this.registroDataManager.getTelefonoPersona().setPhonetypecatalogcode(TIPO_TELEFONO); this.registroDataManager.getTelefonoPersona().setPhonetypecatalog("1");//1 Fijo, 2 Celular this.registroDataManager.setTelefonoCelular(new Tcustpersonphone()); this.registroDataManager.getTelefonoCelular().setAddressnumber(2L); this.registroDataManager.getTelefonoCelular().setPhonetypecatalogcode(TIPO_TELEFONO); this.registroDataManager.getTelefonoCelular().setPhonetypecatalog("2");//1 Fijo, 2 Celular this.registroDataManager.setAdicionalPersona(new Tcustpeople()); this.registroDataManager.getDireccionPersona().setCountryCode("EC"); this.registroDataManager.setCompania(new Tcustcompany()); this.registroDataManager.setFoto(new Tgenefilesdetail()); this.cambiaPais(); }catch(Throwable e){ FacesUtil.getInstancia().messageError(ExceptionUtils.getRootCauseMessage(e)); } } /* * Eventos ajax */ /** * Cambia pais y actualiza provincias */ public void cambiaPais() { try{ if(this.registroDataManager.getDireccionPersona().getCountryCode()!=null){ Collection provinciaColl = portalService.obtenerProvincias(this.registroDataManager.getDireccionPersona().getCountryCode()); registroDataManager.setProvinciasColl(provinciaColl); cambiaProvincia(); //cambiaCanton(); }else{ registroDataManager.setProvinciasColl(new ArrayList()); registroDataManager.setCantonColl(new ArrayList()); registroDataManager.setCiudadColl(new ArrayList()); this.registroDataManager.getDireccionPersona().setProvinceCode(null); this.registroDataManager.getDireccionPersona().setCantonCode(null); this.registroDataManager.getDireccionPersona().setCityCode(null); } // if(provinciaColl != null && !provinciaColl.isEmpty()){ // registroDataManager.getDireccionPersona().setProvinceCode(provinciaColl.iterator().next().getId().getProvincecode()); // registroDataManager.setCantonColl(portalService.obtenerCantones(this.registroDataManager.getDireccionPersona().getCountryCode(), provinciaColl.iterator().next().getId().getProvincecode())); // }else{ // registroDataManager.setCantonColl(new HashSet()); // } // if(registroDataManager.getCantonColl() != null && !registroDataManager.getCantonColl().isEmpty()){ // registroDataManager.getDireccionPersona().setCantonCode(registroDataManager.getCantonColl().iterator().next().getId().getCantoncode()); // registroDataManager.setCiudadColl(portalService.obtenerCiudades(this.registroDataManager.getDireccionPersona().getCountryCode(), provinciaColl.iterator().next().getId().getProvincecode(), registroDataManager.getCantonColl().iterator().next().getId().getCantoncode())); // registroDataManager.setParroquiaColl(portalService.obtenerParroquias(this.registroDataManager.getDireccionPersona().getCountryCode(), provinciaColl.iterator().next().getId().getProvincecode(), registroDataManager.getCantonColl().iterator().next().getId().getCantoncode())); // }else{ // registroDataManager.setParroquiaColl(new HashSet()); // registroDataManager.setCiudadColl(new HashSet()); // } }catch(Throwable e){ FacesUtil.getInstancia().messageError(ExceptionUtils.getRootCauseMessage(e)); } } /** * Cambia provincia y actualiza sus subniveles */ public void cambiaProvincia() { try{ // if(registroDataManager.getDireccionPersona().getProvinceCode() == null){ // registroDataManager.getDireccionPersona().setProvinceCode(registroDataManager.getProvinciasColl() != null && !registroDataManager.getProvinciasColl().isEmpty() ? // registroDataManager.getProvinciasColl().iterator().next().getId().getProvincecode():null); // } if( registroDataManager.getDireccionPersona().getProvinceCode()!=null && registroDataManager.getDireccionPersona().getCountryCode()!=null){ Collection cantonColl = portalService.obtenerCantones(registroDataManager.getDireccionPersona().getCountryCode(), registroDataManager.getDireccionPersona().getProvinceCode()); registroDataManager.setCantonColl(cantonColl); cambiaCanton(); }else{ registroDataManager.setCantonColl(new ArrayList()); registroDataManager.setParroquiaColl(new ArrayList()); registroDataManager.setCiudadColl(new ArrayList()); this.registroDataManager.getDireccionPersona().setCantonCode(null); this.registroDataManager.getDireccionPersona().setCityCode(null); } // if(cantonColl != null && !cantonColl.isEmpty()){ // registroDataManager.setCiudadColl(portalService.obtenerCiudades(registroDataManager.getDireccionPersona().getCountryCode(), registroDataManager.getProvinciasColl().iterator().next().getId().getProvincecode(), registroDataManager.getCantonColl().iterator().next().getId().getCantoncode())); // registroDataManager.setParroquiaColl(portalService.obtenerParroquias(registroDataManager.getDireccionPersona().getCountryCode(), registroDataManager.getProvinciasColl().iterator().next().getId().getProvincecode(), registroDataManager.getCantonColl().iterator().next().getId().getCantoncode())); // }else{ // registroDataManager.setParroquiaColl(new HashSet()); // registroDataManager.setCiudadColl(new HashSet()); // } }catch(Throwable e){ FacesUtil.getInstancia().messageError(ExceptionUtils.getRootCauseMessage(e)); } } /** * Cambia cantón y actualiza subniveles */ public void cambiaCanton() { try{ // if(registroDataManager.getDireccionPersona().getCantonCode() == null){ // registroDataManager.getDireccionPersona().setCantonCode(registroDataManager.getCantonColl() != null && !registroDataManager.getCantonColl().isEmpty() ? // registroDataManager.getCantonColl().iterator().next().getId().getCantoncode():null); // } if(registroDataManager.getDireccionPersona().getCountryCode()!=null && registroDataManager.getDireccionPersona().getProvinceCode()!=null && registroDataManager.getDireccionPersona().getCantonCode()!=null){ Collection parroquiaColl = portalService.obtenerParroquias(registroDataManager.getDireccionPersona().getCountryCode(), registroDataManager.getDireccionPersona().getProvinceCode(), registroDataManager.getDireccionPersona().getCantonCode()); Collection cityColl = portalService.obtenerCiudades (registroDataManager.getDireccionPersona().getCountryCode(), registroDataManager.getDireccionPersona().getProvinceCode(), registroDataManager.getDireccionPersona().getCantonCode()); registroDataManager.setParroquiaColl(parroquiaColl); registroDataManager.setCiudadColl(cityColl); }else{ this.registroDataManager.getDireccionPersona().setCityCode(null); registroDataManager.setParroquiaColl(new ArrayList()); registroDataManager.setCiudadColl(new ArrayList()); } }catch(Throwable e){ FacesUtil.getInstancia().messageError(ExceptionUtils.getRootCauseMessage(e)); } } /** * Se verifica que debe */ public void changeTipoIdentificacion() { try{ switch (registroDataManager.getPersona().getIdentificationcatalog()) { case "CED": registroDataManager.setTamDocIndentificacion(10); registroDataManager.setTipoMascaraIdentificacion(PortalMessages.getInstancia().getString("tipo.mascara.pint")); break; case "RUC": registroDataManager.setTamDocIndentificacion(13); registroDataManager.setTipoMascaraIdentificacion(PortalMessages.getInstancia().getString("tipo.mascara.pint")); break; case "PAS": registroDataManager.setTamDocIndentificacion(15); registroDataManager.setTipoMascaraIdentificacion(PortalMessages.getInstancia().getString("tipo.mascara.alphanum")); break; default: break; } }catch(Throwable e){ FacesUtil.getInstancia().messageError(ExceptionUtils.getRootCauseMessage(e)); } } /** * Se verifica que si existe el usuario actualice toda la información */ public void changeIdentificacion() { String id = registroDataManager.getPersona().getIdentification(); String tipoId = registroDataManager.getPersona().getIdentificationcatalog(); Tcustpersondetail personaDetalle = portalService.obtenerDetallePersonaPorIdentificacion(registroDataManager.getPersona().getIdentification()); if(personaDetalle != null){ // FacesUtil.getInstancia().messageWarn(PortalWebResources.getString("error.msg.persona.registrada")); registroDataManager.setExisteCedula(true); }else{ registroDataManager.setExisteCedula(false); this.inicializar(); registroDataManager.getPersona().setIdentification(id); registroDataManager.getPersona().setIdentificationcatalog(tipoId); } this.completaDatosPersona(personaDetalle); cambiaPais(); } /** * Completa los datos de la persona si esta existe * @param identificacion * @param tipoIdentificacion */ private void completaDatosPersona(Tcustpersondetail personaDetalle){ if(personaDetalle != null){ registroDataManager.setPersona(personaDetalle); } switch (registroDataManager.getPersona().getIdentification().length()) { case 10:{ Cedula cedula = ClienteCedula.obtenerCedula(registroDataManager.getPersona().getIdentification()); completaDatosPersonaNatural(registroDataManager.getPersona()); completaDatosSnap(cedula); registroDataManager.setCedulaSnap(cedula); registroDataManager.setRucSnap(null); } break; case 13:{ ContribuyenteCompleto contribuyente = ClienteRUC.obtenerRUC(registroDataManager.getPersona().getIdentification()); if(!contribuyente.getCodEstado().equals("ACT")){ FacesUtil.getInstancia().messageError("El RUC INGRESADO NO ESTA ACTIVO"); FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(Boolean.TRUE); // FacesUtil.getInstancia().eliminaBeanSesion("registroDataManager"); isEnableSave=Boolean.FALSE; return; } completaDatosCompania(registroDataManager.getPersona()); completaDatosSnap(contribuyente); registroDataManager.setRucSnap(contribuyente); registroDataManager.setCedulaSnap(null); } break; default: break; } completaDatosGenerales(personaDetalle); } /** * Completa los datos de la companía * @param personaDetalle */ private void completaDatosCompania(Tcustpersondetail personaDetalle) { if(personaDetalle.getId()!=null && personaDetalle.getId().getPersoncode()>0){ registroDataManager.setCompania(portalService.obtenerCompaniaPorId((int)personaDetalle.getId().getPersoncode())); if(registroDataManager.getCompania()!=null && registroDataManager.getCompania().getId()!=null && registroDataManager.getCompania().getId().getPersoncode()>0 && registroDataManager.getCompania().getLogo()!=null){ Tgenefilesdetail tgenefilesdetail= portalService.obtenerImagen(registroDataManager.getCompania().getLogo()); if(tgenefilesdetail!=null && tgenefilesdetail.getImage()!=null){ byte[] byt=tgenefilesdetail.getImage(); InputStream is = new ByteArrayInputStream(byt); //registroDataManager.getFoto().setImage(IOUtils.toByteArray(event.getFile().getInputstream())); registroDataManager.setContenidoFoto(new DefaultStreamedContent(is)); } } } } /** * Completa los datos si es persona natural * @param personaDetalle */ private void completaDatosPersonaNatural(Tcustpersondetail personaDetalle){ if(personaDetalle.getId() != null && personaDetalle.getId().getPersoncode() != 0){ registroDataManager.setAdicionalPersona(portalService.obtenerPersonaNaturalPorId((int)personaDetalle.getId().getPersoncode())); } } private void completaDatosSnap(Object datosSnap){ if(datosSnap instanceof Cedula){ Cedula cedula = (Cedula) datosSnap; if(registroDataManager.getAdicionalPersona() == null){ registroDataManager.setAdicionalPersona(new Tcustpeople()); } if(cedula != null){ registroDataManager.getAdicionalPersona().setFirstname(cedula.getNombre()); // registroDataManager.getAdicionalPersona().setLastname(cedula.getNombrePadre()); // registroDataManager.getAdicionalPersona().setSurename(cedula.getNombreMadre()); } } else if(datosSnap instanceof ContribuyenteCompleto){ ContribuyenteCompleto contribuyente = (ContribuyenteCompleto) datosSnap; if(registroDataManager.getCompania() == null){ registroDataManager.setCompania(new Tcustcompany()); } if(contribuyente != null){ registroDataManager.getPersona().setName(contribuyente.getRazonSocial()); registroDataManager.getPersona().setLegalrepresent(contribuyente.getRepresentanteLegal().getNombre()); registroDataManager.getPersona().setLegalrepresentidentification(contribuyente.getRepresentanteLegal().getIdentificacion()); registroDataManager.getPersona().setEconimicact(contribuyente.getActividadEconomica().getActividadGeneral()); } } } /** * Completa los datos generales como dirección y teléfono y demás requeridas para su funcionamiento * @param personaDetalle */ private void completaDatosGenerales(Tcustpersondetail personaDetalle){ if(personaDetalle != null){ Tcustpersonaddress direccionPrincipal = portalService.obtenerDireccionPrincipal((int)personaDetalle.getId().getPersoncode()); if(direccionPrincipal == null){ registroDataManager.setDireccionPersona(new Tcustpersonaddress()); registroDataManager.getDireccionPersona().setAddresstypecatalog(TIPO_DIRECCION); } else{ registroDataManager.setDireccionPersona(direccionPrincipal); } Tcustpersonaddress mail = portalService.obtenerCorreo((int)personaDetalle.getId().getPersoncode());; if(mail == null){ this.registroDataManager.getCorreoPersona().setAddresstypecatalogcode(TIPO_DIRECCION); this.registroDataManager.getCorreoPersona().setAddresstypecatalog("3"); } else{ registroDataManager.setCorreoPersona(mail); } Tcustpersonphone telefonoFijo = portalService.obtenerTelefonoFijo((int)personaDetalle.getId().getPersoncode()); if(telefonoFijo == null){ this.registroDataManager.setTelefonoPersona(new Tcustpersonphone()); this.registroDataManager.getTelefonoPersona().setAddressnumber(1L); this.registroDataManager.getTelefonoPersona().setPhonetypecatalogcode(TIPO_TELEFONO); this.registroDataManager.getTelefonoPersona().setPhonetypecatalog("1");//1 Fijo, 2 Celular } else{ registroDataManager.setTelefonoPersona(telefonoFijo); } Tcustpersonphone telefonoCelular = portalService.obtenerTelefonoCelular((int)personaDetalle.getId().getPersoncode()); if(telefonoCelular == null){ this.registroDataManager.setTelefonoCelular(new Tcustpersonphone()); this.registroDataManager.getTelefonoCelular().setAddressnumber(2L); this.registroDataManager.getTelefonoCelular().setPhonetypecatalogcode(TIPO_TELEFONO); this.registroDataManager.getTelefonoCelular().setPhonetypecatalog("2");//1 Fijo, 2 Celular } else{ registroDataManager.setTelefonoCelular(telefonoCelular); } } } /** * Listener que espera un archivo cargado * @param event */ public void uploadFoto(FileUploadEvent event) { try { if(registroDataManager.getPersona().getIdentificationcatalog().equals(PortalMessages.getInstancia().getString("catalogo.codigo.detalle.id.ruc"))){ registroDataManager.getFoto().setCapturedate(Calendar.getInstance().getTime()); registroDataManager.getFoto().setContenttype(event.getFile().getContentType()); registroDataManager.getFoto().setExtension(FilenameUtils.getExtension(event.getFile().getFileName())); registroDataManager.getFoto().setImage(IOUtils.toByteArray(event.getFile().getInputstream())); registroDataManager.getFoto().setImagesize(event.getFile().getSize()); registroDataManager.getFoto().setName(FilenameUtils.getBaseName(event.getFile().getFileName())); registroDataManager.setContenidoFoto(new DefaultStreamedContent(event.getFile().getInputstream())); } } catch (Throwable e) { FacesUtil.getInstancia().messageError(ExceptionUtils.getRootCauseMessage(e)); } } /** * Almacena el usuario en las tablas de maia */ public String guardarUsuario() { try{ switch (this.registroDataManager.getPersona().getIdentificationcatalog()) { case "CED": case "PAS": this.registroDataManager.getDireccionPersona().setAddresstypecatalog("2"); break; case "RUC": this.registroDataManager.getDireccionPersona().setAddresstypecatalog("1"); break; default: break; } if(this.registroDataManager.getAdicionalPersona().getMaritalstatuscatalog() != null){ this.registroDataManager.getAdicionalPersona().setMaritalstatuscatalogcode(ESTADO_CIVIL); } if(this.registroDataManager.getAdicionalPersona().getProfessioncatalog() != null){ this.registroDataManager.getAdicionalPersona().setProfessioncatalogcode(PROFESION); } portalService.guardarUsuarioMaia( registroDataManager.getPersona(), registroDataManager.getDireccionPersona(), registroDataManager.getCorreoPersona(), registroDataManager.getTelefonoPersona(), registroDataManager.getTelefonoCelular(), registroDataManager.getAdicionalPersona(), registroDataManager.getCompania(), registroDataManager.getFoto()); FacesUtil.getInstancia().messageInfo("El usuario fue guardado exitosamente"); FacesContext.getCurrentInstance().getExternalContext().getFlash().setKeepMessages(Boolean.TRUE); FacesUtil.getInstancia().eliminaBeanSesion("registroDataManager"); return "/pages/notificacion/home?faces-redirect=true"; }catch (Throwable e){ FacesUtil.getInstancia().messageError("ERROR NO CONTROLADO CONTACTE AL PROVEEDOR"); ExceptionUtils.getRootCauseMessage(e); return null; } } public String cancelarOperacion() { FacesUtil.getInstancia().eliminaBeanSesion("registroDataManager"); return "/pages/registro/home?faces-redirect=true"; } public RegistroDataManager getRegistroDataManager() { return registroDataManager; } public void setRegistroDataManager(RegistroDataManager registroDataManager) { this.registroDataManager = registroDataManager; } public Boolean getIsEnableSave() { return isEnableSave; } public void setIsEnableSave(Boolean isEnableSave) { this.isEnableSave = isEnableSave; } }