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.ActividadEconomica;
import ec.gov.sri.wsconsultacontribuyente.AgenteRetencion;
import ec.gov.sri.wsconsultacontribuyente.ContribuyenteCompleto;
import ec.gov.sri.wsconsultacontribuyente.EstructuraOrganizacional;
import ec.gov.sri.wsconsultacontribuyente.ListaBlanca;
import ec.gov.sri.wsconsultacontribuyente.RepresentanteLegal;
import ec.gov.sri.wsconsultacontribuyente.TipoContribuyente;
import ec.gov.sri.wsconsultacontribuyente.UbicacionGeografica;

/**
 * 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<Tgeneprovince> provinciaColl = portalService.obtenerProvincias(this.registroDataManager.getDireccionPersona().getCountryCode());
				registroDataManager.setProvinciasColl(provinciaColl);
				cambiaProvincia();
				//cambiaCanton();
			}else{
				registroDataManager.setProvinciasColl(new ArrayList<Tgeneprovince>());
				registroDataManager.setCantonColl(new ArrayList<Tgenecanton>());
				registroDataManager.setCiudadColl(new ArrayList<Tgenecity>());
				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<Tgenecanton>());
//			}
//			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<Tgeneparroquia>());
//				registroDataManager.setCiudadColl(new HashSet<Tgenecity>());
//			}
		}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<Tgenecanton> cantonColl = portalService.obtenerCantones(registroDataManager.getDireccionPersona().getCountryCode(), registroDataManager.getDireccionPersona().getProvinceCode());
				registroDataManager.setCantonColl(cantonColl);
				cambiaCanton();
			}else{
				registroDataManager.setCantonColl(new ArrayList<Tgenecanton>());
				registroDataManager.setParroquiaColl(new ArrayList<Tgeneparroquia>());
				registroDataManager.setCiudadColl(new ArrayList<Tgenecity>());
				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<Tgeneparroquia>());
//				registroDataManager.setCiudadColl(new HashSet<Tgenecity>());
//			}
		}catch(Throwable e){
			FacesUtil.getInstancia().messageError(ExceptionUtils.getRootCauseMessage(e));
		}
	}
	
	/**
	 * Cambia cant&oacute;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<Tgeneparroquia> parroquiaColl = portalService.obtenerParroquias(registroDataManager.getDireccionPersona().getCountryCode(), registroDataManager.getDireccionPersona().getProvinceCode(), registroDataManager.getDireccionPersona().getCantonCode());
				Collection<Tgenecity> 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<Tgeneparroquia>());
				registroDataManager.setCiudadColl(new ArrayList<Tgenecity>());
			}
			
		}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&oacute;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);
		}
                //registroDataManager.setCedulaSnap(new Cedula());

		switch (registroDataManager.getPersona().getIdentification().length()) {
		case 10:{
				Cedula cedula = ClienteCedula.obtenerCedula(registroDataManager.getPersona().getIdentification());
				completaDatosPersonaNatural(registroDataManager.getPersona());
				completaDatosSnap(cedula);
                                
                                /**VALIDACION MOMENTANEA*/
                                cedula = cedula == null ? new Cedula() : cedula;
				registroDataManager.setCedulaSnap(cedula);
				registroDataManager.setRucSnap(null);
			}
			break;
		case 13:{
				ContribuyenteCompleto contribuyente = ClienteRUC.obtenerRUC(registroDataManager.getPersona().getIdentification());
                                if(contribuyente == null){
                                    contribuyente = new ContribuyenteCompleto();
                                    contribuyente.setActividadEconomica(new ActividadEconomica());
                                    contribuyente.setAgenteRetencion(new AgenteRetencion());
                                    contribuyente.setEstructuraOrganizacional(new EstructuraOrganizacional());
                                    contribuyente.setRepresentanteLegal(new RepresentanteLegal());
                                    contribuyente.setListaBlanca(new ListaBlanca());
                                    contribuyente.setTipoContribuyente(new TipoContribuyente());
                                    contribuyente.setUbicacionGeografica(new UbicacionGeografica());
                                    //contribuyente.setCodEstado("ACT");
                                    
                                }
                                //contribuyente = contribuyente == null ? new ContribuyenteCompleto() : contribuyente;
                                /**
                                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&iacute;a 
	 * @param personaDetalle
	 */
	private void completaDatosCompania(Tcustpersondetail personaDetalle) {
		if(personaDetalle.getId()!=null && personaDetalle.getId().getPersoncode()>0 && personaDetalle.getId().getPersoncode()!= null){
			registroDataManager.setCompania(portalService.obtenerCompaniaPorId(personaDetalle.getId().getPersoncode().intValue()));
			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 && personaDetalle.getId().getPersoncode() != null){
			registroDataManager.setAdicionalPersona(portalService.obtenerPersonaNaturalPorId(personaDetalle.getId().getPersoncode().intValue()));
		}
	}
	
	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&oacute;n y tel&eacute;fono y dem&aacute;s requeridas para su funcionamiento
	 * @param personaDetalle
	 */
	private void completaDatosGenerales(Tcustpersondetail personaDetalle){
		if(personaDetalle != null){
			Tcustpersonaddress direccionPrincipal = portalService.obtenerDireccionPrincipal((int)personaDetalle.getId().getPersoncode().intValue());
			if(direccionPrincipal == null){
				registroDataManager.setDireccionPersona(new Tcustpersonaddress());
				registroDataManager.getDireccionPersona().setAddresstypecatalog(TIPO_DIRECCION);
			} else{
				registroDataManager.setDireccionPersona(direccionPrincipal);
			}
			Tcustpersonaddress mail = portalService.obtenerCorreo((int)personaDetalle.getId().getPersoncode().intValue());
			if(mail == null){
				this.registroDataManager.getCorreoPersona().setAddresstypecatalogcode(TIPO_DIRECCION);
				this.registroDataManager.getCorreoPersona().setAddresstypecatalog("3");
			} else{
				registroDataManager.setCorreoPersona(mail);
			}
			Tcustpersonphone telefonoFijo = portalService.obtenerTelefonoFijo(personaDetalle.getId().getPersoncode().intValue());
			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(personaDetalle.getId().getPersoncode().intValue());
			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;
	}

	
}
