/*
* Copyright 2021 E.J.I.E., S.A.
*
* Licencia con arreglo a la EUPL, Versión 1.1 exclusivamente (la «Licencia»);
* Solo podrá usarse esta obra si se respeta la Licencia.
* Puede obtenerse una copia de la Licencia en
*
* http://ec.europa.eu/idabc/eupl.html
*
* Salvo cuando lo exija la legislación aplicable o se acuerde por escrito,
* el programa distribuido con arreglo a la Licencia se distribuye «TAL CUAL»,
* SIN GARANT�?AS NI CONDICIONES DE NINGÚN TIPO, ni expresas ni implícitas.
* Véase la Licencia en el idioma concreto que rige los permisos y limitaciones
* que establece la Licencia.
*/
package com.ejie.ad74a.model;

import com.ejie.ad74a.constantes.Constantes;
import com.ejie.ad74a.model.comun.Municipio;
import com.ejie.ad74a.model.comun.Provincia;
import com.ejie.x38.serialization.JsonDateDeserializer;
import com.ejie.x38.serialization.JsonDateSerializer;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.bind.annotation.XmlElement;

import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.context.i18n.LocaleContextHolder;

/**
 * Ayuntamientos generated by UDA, 22-may-2023 16:38:14.
 * 
 * @author UDA
 */

public class Ayuntamientos implements java.io.Serializable {

	private static final long serialVersionUID = 1L;

	private Long idAyuntamiento31;
	private String cif31;
	private String descEs31;
	private String descEu31;
	private String numCuenta31;
	private Long periodicidad31;
	private String contacto31;

	private String telefono31;
	private Integer formaPago31;
	private Date fAutorizacion31;
	private Integer diaFacturacion31;

	private Mancomunidades mancomunidades;
	private Provincia provincia;
	private Municipio municipio;
	private String cp31;
	private String direccion31;
	private String dir331;
	private String email31;

	private Date fBaja31;
	private String usuAlta31;
	private String usuModif31;
	private Date fAlta31;
	private Date fModif31;
	private List<PisosTutelados> pisosTuteladoses = new ArrayList<PisosTutelados>();
	private List<UnidadesBase> unidadesBase = new ArrayList<UnidadesBase>();

	// Campos para filtro
	private String baja;

	/**
	 * Method 'Ayuntamientos'.
	 */
	public Ayuntamientos() {
	}

	/**
	 * Method 'Ayuntamientos'.
	 * 
	 * @param idAyuntamiento31 Long
	 */
	public Ayuntamientos(Long idAyuntamiento31) {
		this.idAyuntamiento31 = idAyuntamiento31;
	}

	/**
	 * Method 'Ayuntamientos'.
	 * 
	 * @param idAyuntamiento31 Long
	 * @param cif31            String
	 * @param descEs31         String
	 * @param descEu31         String
	 * @param numCuenta31      String
	 * @param periodicidad31   Long
	 * @param contacto31       String
	 * @param telefono31       String
	 * @param formaPago31      Integer
	 * @param fAutorizacion31  Date
	 * @param diaFacturacion31 Integer
	 * @param mancomunidades   mancomunidades
	 * @param provincia        Provincia
	 * @param municipio        Municipio
	 * @param cp31             String
	 * @param direccion31      String
	 * @param dir331           String
	 * @param email31          String
	 * @param fBaja31          Date
	 * @param usuAlta31        String
	 * @param usuModif31       String
	 * @param fAlta31          Date
	 * @param fModif31         Date
	 */
	public Ayuntamientos(Long idAyuntamiento31, String cif31, String descEs31, String descEu31, String numCuenta31,
			Long periodicidad31, String contacto31, String telefono31, Integer formaPago31, Date fAutorizacion31,
			Integer diaFacturacion31, Mancomunidades mancomunidades, Provincia provincia, Municipio municipio,
			String cp31, String direccion31, String dir331, String email31, Date fBaja31, String usuAlta31,
			String usuModif31, Date fAlta31, Date fModif31) {
		this.idAyuntamiento31 = idAyuntamiento31;
		this.cif31 = cif31;
		this.descEs31 = descEs31;
		this.descEu31 = descEu31;
		this.numCuenta31 = numCuenta31;
		this.periodicidad31 = periodicidad31;
		this.contacto31 = contacto31;
		this.telefono31 = telefono31;
		this.formaPago31 = formaPago31;
		this.fAutorizacion31 = fAutorizacion31;
		this.diaFacturacion31 = diaFacturacion31;
		this.mancomunidades = mancomunidades;
		this.provincia = provincia;
		this.municipio = municipio;
		this.cp31 = cp31;
		this.direccion31 = direccion31;
		this.dir331 = dir331;
		this.email31 = email31;
		this.fBaja31 = fBaja31;
		this.usuAlta31 = usuAlta31;
		this.usuModif31 = usuModif31;
		this.fAlta31 = fAlta31;
		this.fModif31 = fModif31;
	}

	/**
	 * Method 'Ayuntamientos'.
	 * 
	 * @param idAyuntamiento31 Long
	 * @param cif31            String
	 * @param descEs31         String
	 * @param descEu31         String
	 * @param numCuenta31      String
	 * @param periodicidad31   Long
	 * @param contacto31       String
	 * @param telefono31       String
	 * @param formaPago31      Integer
	 * @param fAutorizacion31  Date
	 * @param diaFacturacion31 Integer
	 * @param mancomunidades   Mancomunidades
	 * @param provincia        Provincia
	 * @param municipio        Municipio
	 * @param cp31             String
	 * @param direccion31      String
	 * @param dir331           String
	 * @param email31          String
	 * @param fBaja31          Date
	 * @param baja31           String
	 * @param usuAlta31        String
	 * @param usuModif31       String
	 * @param fAlta31          Date
	 * @param fModif31         Date
	 * @param pisosTuteladoses List<PisosTutelados>
	 */
	public Ayuntamientos(Long idAyuntamiento31, String cif31, String descEs31, String descEu31, String numCuenta31,
			Long periodicidad31, String contacto31, String telefono31, Integer formaPago31, Date fAutorizacion31,
			Integer diaFacturacion31, Mancomunidades mancomunidades, Provincia provincia, Municipio municipio,
			String cp31, String direccion31, String dir331, String email31, Date fBaja31, String usuAlta31,
			String usuModif31, Date fAlta31, Date fModif31, List<PisosTutelados> pisosTuteladoses) {
		this.idAyuntamiento31 = idAyuntamiento31;
		this.cif31 = cif31;
		this.descEs31 = descEs31;
		this.descEu31 = descEu31;
		this.numCuenta31 = numCuenta31;
		this.periodicidad31 = periodicidad31;
		this.contacto31 = contacto31;
		this.telefono31 = telefono31;
		this.formaPago31 = formaPago31;
		this.fAutorizacion31 = fAutorizacion31;
		this.diaFacturacion31 = diaFacturacion31;
		this.mancomunidades = mancomunidades;
		this.provincia = provincia;
		this.municipio = municipio;
		this.cp31 = cp31;
		this.direccion31 = direccion31;
		this.dir331 = dir331;
		this.fBaja31 = fBaja31;
		this.usuAlta31 = usuAlta31;
		this.usuModif31 = usuModif31;
		this.fAlta31 = fAlta31;
		this.fModif31 = fModif31;
		this.pisosTuteladoses = pisosTuteladoses;

	}

	/**
	 * Method 'Ayuntamientos'.
	 * 
	 * @param idAyuntamiento31 Long
	 * @param descEs31         String
	 * @param descEu31         String
	 */
	public Ayuntamientos(Long idAyuntamiento31, String descEs31, String descEu31) {
		this.idAyuntamiento31 = idAyuntamiento31;
		this.descEs31 = descEs31;
		this.descEu31 = descEu31;
	}

	/**
	 * Method 'getIdAyuntamiento31'.
	 *
	 * @return Long
	 */

	public Long getIdAyuntamiento31() {
		return this.idAyuntamiento31;
	}

	/**
	 * Method 'setIdAyuntamiento31'.
	 *
	 * @param idAyuntamiento31 Long
	 * @return
	 */

	public void setIdAyuntamiento31(Long idAyuntamiento31) {
		this.idAyuntamiento31 = idAyuntamiento31;
	}

	/**
	 * Method 'getCif31'.
	 *
	 * @return String
	 */

	public String getCif31() {
		return this.cif31;
	}

	/**
	 * Method 'setCif31'.
	 *
	 * @param cif31 String
	 * @return
	 */

	public void setCif31(String cif31) {
		this.cif31 = cif31;
	}

	/**
	 * Method 'getNumCuenta31'.
	 *
	 * @return String
	 */

	public String getNumCuenta31() {
		return this.numCuenta31;
	}

	/**
	 * Method 'setNumCuenta31'.
	 *
	 * @param numCuenta31 String
	 * @return
	 */

	public void setNumCuenta31(String numCuenta31) {
		this.numCuenta31 = numCuenta31;
	}

	/**
	 * Method 'getPeriodicidad31'.
	 *
	 * @return Long
	 */

	public Long getPeriodicidad31() {
		return this.periodicidad31;
	}

	/**
	 * Method 'setPeriodicidad31'.
	 *
	 * @param periodicidad31 Long
	 * @return
	 */

	public void setPeriodicidad31(Long periodicidad31) {
		this.periodicidad31 = periodicidad31;
	}

	/**
	 * Method 'getContacto31'.
	 *
	 * @return String
	 */

	public String getContacto31() {
		return this.contacto31;
	}

	/**
	 * Method 'setContacto31'.
	 *
	 * @param contacto31 String
	 * @return
	 */

	public void setContacto31(String contacto31) {
		this.contacto31 = contacto31;
	}

	/**
	 * Method 'getfBaja31'.
	 *
	 * @return java.util.Date
	 */

	@JsonSerialize(using = JsonDateSerializer.class)
	public Date getfBaja31() {
		return this.fBaja31;
	}

	/**
	 * Method 'setfBaja31'.
	 *
	 * @param fBaja31 java.util.Date
	 * @return
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setfBaja31(Date fBaja31) {
		this.fBaja31 = fBaja31;
	}

	/**
	 * Method 'getUsuAlta31'.
	 *
	 * @return String
	 */

	public String getUsuAlta31() {
		return this.usuAlta31;
	}

	/**
	 * Method 'setUsuAlta31'.
	 *
	 * @param usuAlta31 String
	 * @return
	 */

	public void setUsuAlta31(String usuAlta31) {
		this.usuAlta31 = usuAlta31;
	}

	/**
	 * Method 'getUsuModif31'.
	 *
	 * @return String
	 */

	public String getUsuModif31() {
		return this.usuModif31;
	}

	/**
	 * Method 'setUsuModif31'.
	 *
	 * @param usuModif31 String
	 * @return
	 */

	public void setUsuModif31(String usuModif31) {
		this.usuModif31 = usuModif31;
	}

	/**
	 * Method 'getfAlta31'.
	 *
	 * @return java.util.Date
	 */

	@JsonSerialize(using = JsonDateSerializer.class)
	public Date getfAlta31() {
		return this.fAlta31;
	}

	/**
	 * Method 'setfAlta31'.
	 *
	 * @param fAlta31 java.util.Date
	 * @return
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setfAlta31(Date fAlta31) {
		this.fAlta31 = fAlta31;
	}

	/**
	 * Method 'getfModif31'.
	 *
	 * @return java.util.Date
	 */

	@JsonSerialize(using = JsonDateSerializer.class)
	public Date getfModif31() {
		return this.fModif31;
	}

	/**
	 * Method 'setfModif31'.
	 *
	 * @param fModif31 java.util.Date
	 * @return
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setfModif31(Date fModif31) {
		this.fModif31 = fModif31;
	}

	/**
	 * Method 'getPisosTuteladoses'.
	 *
	 * @return List
	 */
	@JsonIgnore
	public List<PisosTutelados> getPisosTuteladoses() {
		return this.pisosTuteladoses;
	}

	/**
	 * Method 'setPisosTuteladoses'.
	 *
	 * @param pisosTuteladoses List
	 * @return
	 */
	public void setPisosTuteladoses(List<PisosTutelados> pisosTuteladoses) {
		this.pisosTuteladoses = pisosTuteladoses;
	}

	/**
	 * Intended only for logging and debugging.
	 * 
	 * Here, the contents of every main field are placed into the result.
	 * 
	 * @return String
	 */
	@Override
	public String toString() {
		StringBuilder result = new StringBuilder();
		result.append(this.getClass().getName()).append(" Object { ");
		result.append(" [ idAyuntamiento31: ").append(this.idAyuntamiento31).append(" ]");
		result.append(", [ cif31: ").append(this.cif31).append(" ]");
		result.append(", [ descEs31: ").append(this.descEs31).append(" ]");
		result.append(", [ descEu31: ").append(this.descEu31).append(" ]");
		result.append(", [ numCuenta31: ").append(this.numCuenta31).append(" ]");
		result.append(", [ periodicidad31: ").append(this.periodicidad31).append(" ]");
		result.append(", [ contacto31: ").append(this.contacto31).append(" ]");
		result.append(", [ telefono31: ").append(this.telefono31).append(" ]");
		result.append(", [ formaPago31: ").append(this.formaPago31).append(" ]");
		result.append(", [ fAutorizacion31: ").append(this.fAutorizacion31).append(" ]");
		result.append(", [ diaFacturacion31: ").append(this.diaFacturacion31).append(" ]");
		result.append(", [ mancomunidades: ").append(this.mancomunidades).append(" ]");
		result.append(", [ provincia: ").append(this.provincia).append(" ]");
		result.append(", [ municipio: ").append(this.municipio).append(" ]");
		result.append(", [ cp31: ").append(this.cp31).append(" ]");
		result.append(", [ direccion31: ").append(this.direccion31).append(" ]");
		result.append(", [ dir331: ").append(this.dir331).append(" ]");
		result.append(", [ email31: ").append(this.email31).append(" ]");
		result.append(", [ fBaja31: ").append(this.fBaja31).append(" ]");
		result.append(", [ usuAlta31: ").append(this.usuAlta31).append(" ]");
		result.append(", [ usuModif31: ").append(this.usuModif31).append(" ]");
		result.append(", [ fAlta31: ").append(this.fAlta31).append(" ]");
		result.append(", [ fModif31: ").append(this.fModif31).append(" ]");
		result.append("}");
		return result.toString();
	}

	/**
	 * Method 'getTelefono31'.
	 *
	 * @return String
	 */
	public String getTelefono31() {
		return telefono31;
	}

	/**
	 * Method 'setTelefono31'.
	 *
	 * @param telefono31 String
	 * @return
	 */
	public void setTelefono31(String telefono31) {
		this.telefono31 = telefono31;
	}

	/**
	 * Method 'getFormaPago31'.
	 *
	 * @return Integer
	 */
	public Integer getFormaPago31() {
		return formaPago31;
	}

	/**
	 * Method 'setFormaPago31'.
	 *
	 * @param formaPago31 Integer
	 * @return
	 */
	public void setFormaPago31(Integer formaPago31) {
		this.formaPago31 = formaPago31;
	}

	/**
	 * Method 'getfAutorizacion31'.
	 *
	 * @return java.util.Date
	 */
	@JsonSerialize(using = JsonDateSerializer.class)
	public Date getfAutorizacion31() {
		return fAutorizacion31;
	}

	/**
	 * Method 'setfAutorizacion31'.
	 *
	 * @param fAutorizacion31 java.util.Date
	 * @return
	 */
	@JsonDeserialize(using = JsonDateDeserializer.class)
	public void setfAutorizacion31(Date fAutorizacion31) {
		this.fAutorizacion31 = fAutorizacion31;
	}

	/**
	 * Method 'getDiaFacturacion31'.
	 *
	 * @return Integer
	 */
	public Integer getDiaFacturacion31() {
		return diaFacturacion31;
	}

	/**
	 * Method 'setDiaFacturacion31'.
	 *
	 * @param diaFacturacion31 Integer
	 * @return
	 */
	public void setDiaFacturacion31(Integer diaFacturacion31) {
		this.diaFacturacion31 = diaFacturacion31;
	}

	/**
	 * Method 'getCp31'.
	 *
	 * @return String
	 */
	public String getCp31() {
		return cp31;
	}

	/**
	 * Method 'setCp31'.
	 *
	 * @param cp31 String
	 * @return
	 */
	public void setCp31(String cp31) {
		this.cp31 = cp31;
	}

	/**
	 * Method 'getDireccion31'.
	 *
	 * @return String
	 */
	public String getDireccion31() {
		return direccion31;
	}

	/**
	 * Method 'setDireccion31'.
	 *
	 * @param direccion31 String
	 * @return
	 */
	public void setDireccion31(String direccion31) {
		this.direccion31 = direccion31;
	}

	/**
	 * Method 'getDescEs31'.
	 *
	 * @return String
	 */
	public String getDescEs31() {
		return descEs31;
	}

	/**
	 * Method 'setDescEs31'.
	 *
	 * @param descEs31 String
	 * @return
	 */
	public void setDescEs31(String descEs31) {
		this.descEs31 = descEs31;
	}

	/**
	 * Method 'getDescEu31'.
	 *
	 * @return String
	 */
	public String getDescEu31() {
		return descEu31;
	}

	/**
	 * Method 'setDescEu31'.
	 *
	 * @param descEu31 String
	 * @return
	 */
	public void setDescEu31(String descEu31) {
		this.descEu31 = descEu31;
	}

	/**
	 * Method 'getDir331'.
	 *
	 * @return String
	 */
	public String getDir331() {
		return dir331;
	}

	/**
	 * Method 'setDir331'.
	 *
	 * @param dir331 String
	 * @return
	 */
	public void setDir331(String dir331) {
		this.dir331 = dir331;
	}

	/**
	 * Method 'getEmail31'.
	 *
	 * @return String
	 */
	public String getEmail31() {
		return email31;
	}

	/**
	 * Method 'setEmail31'.
	 *
	 * @param email31 String
	 * @return
	 */
	public void setEmail31(String email31) {
		this.email31 = email31;
	}

	/**
	 * Method 'getDesc'.
	 *
	 * @return String
	 */
	@XmlElement(name = "desc", nillable = true)
	public String getDesc() {
		if (LocaleContextHolder.getLocale().getLanguage().equalsIgnoreCase(Constantes.LOCALE_ES.getLanguage())) {
			return this.getDescEs31();
		} else if (LocaleContextHolder.getLocale().getLanguage().equalsIgnoreCase(Constantes.LOCALE_EU.getLanguage())) {
			return this.getDescEu31();
		}
		return "";
	}

	/**
	 * Method 'getBaja'.
	 *
	 * @return String
	 */
	public String getBaja() {
		return baja;
	}

	/**
	 * Method 'setBaja'.
	 *
	 * @param baja String
	 * @return
	 */
	public void setBaja(String baja) {
		this.baja = baja;
	}

	/**
	 * Method 'getProvincia'.
	 *
	 * @return Provincia
	 */
	public Provincia getProvincia() {
		return provincia;
	}

	/**
	 * Method 'setProvincia'.
	 *
	 * @param provincia Provincia
	 * @return
	 */
	public void setProvincia(Provincia provincia) {
		this.provincia = provincia;
	}

	/**
	 * Method 'getMunicipio'.
	 *
	 * @return Municipio
	 */
	public Municipio getMunicipio() {
		return municipio;
	}

	/**
	 * Method 'setMunicipio'.
	 *
	 * @param municipio Municipio
	 * @return
	 */
	public void setMunicipio(Municipio municipio) {
		this.municipio = municipio;
	}

	/**
	 * Method 'getMancomunidades'.
	 *
	 * @return Mancomunidades
	 */
	public Mancomunidades getMancomunidades() {
		return mancomunidades;
	}

	/**
	 * Method 'setMancomunidades'.
	 *
	 * @param mancomunidades Mancomunidades
	 * @return
	 */
	public void setMancomunidades(Mancomunidades mancomunidades) {
		this.mancomunidades = mancomunidades;
	}

	/**
	 * Method 'obtenerJSON'.
	 *
	 * @return String
	 */
	@JsonIgnore
	public String obtenerJSON() {

		ObjectMapper mapper = new ObjectMapper();

		// Object to JSON in String
		try {
			return mapper.writeValueAsString(this);
		} catch (IOException e) {
			return "";
		}
	}

	public List<UnidadesBase> getUnidadesBase() {
		return unidadesBase;
	}

	public void setUnidadesBase(List<UnidadesBase> unidadesBase) {
		this.unidadesBase = unidadesBase;
	}

	public String getListaUnidadesBase() {
		if (null != this.unidadesBase) {
			String listaCompleta = "";
			for (int i = 0; i < this.unidadesBase.size(); i++) {
				listaCompleta += this.unidadesBase.get(i).getDesc();
				if (i != this.unidadesBase.size() - 1) {
					listaCompleta += ", ";
				}
			}
			return listaCompleta;
		}
		return "";
	}

	public String getDescAyuntamiento() {
		if (LocaleContextHolder.getLocale().getLanguage().equalsIgnoreCase(Constantes.LOCALE_ES.getLanguage())) {
			return this.descEs31;
		} else if (LocaleContextHolder.getLocale().getLanguage().equalsIgnoreCase(Constantes.LOCALE_EU.getLanguage())) {
			return this.descEu31;
		}
		return "";
	}
}
