package com.arrebol.taxiservicios.model.core;

import com.arrebol.taxiservicios.model.catalog.Location;
import com.arrebol.taxiservicios.model.catalog.RegimenFiscal;
import com.arrebol.taxiservicios.model.enums.BasicType;
import com.arrebol.taxiservicios.model.enums.GenericEnumType;
import com.arrebol.taxiservicios.model.enums.MediosDifusion;
import com.arrebol.taxiservicios.model.enums.PaymentType;
import com.arrebol.taxiservicios.model.enums.PersonType;
import java.io.Serializable;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;

/**
 *
 * @author Picasso
 */
public class Person implements Serializable {

   private static final long serialVersionUID = -3142909516651108510L;

   private String id;
   private String firstName;
   private String secondName;
   private String lastName;
   private String middleName;
   private String mail;
   private Date birthdate;
   private String curp;
   private String rfc;
   private String avatar;
   private PersonType personType;
   private Float payment;
   private PaymentType paymentType;
   private String license;
   private Date expirationLicenseDate;
   private String ife;
   private Float retainer;
   private Date admissionDate;
   private Boolean active;
   private GenericEnumType blackList;
   private String blackListDescription;
   private Boolean root;
   private Float adeudo;
   private User createdBy;
   private Date createdOn;
   private User lastUpdatedBy;
   private Date lastUpdatedOn;
   private BasicType juridico;
   private RegimenFiscal regimenFiscal;
   private GenericEnumType usuarioApp;
   private String password;
   private MediosDifusion comoNosConocio;
   private String numeroContacto;
   private String comentario;

   private String nameEndorsement;
   private String parentescoEndorsement;
   private String phoneEndorsement;
   private Location location;
   private double salary;
   private double imss;
   private double saving;
   private double savingWeek;
   private Set users = new HashSet(0);
   private Set addresses = new HashSet(0);
   private Set contactNumbers = new HashSet(0);
   private Set customerTaxis = new HashSet(0);
   private Set driverTaxis = new HashSet(0);
   private Set references = new HashSet(0);
   private Set documents = new HashSet(0);
   private Set personHasServices = new HashSet(0);
   private Set sales = new HashSet(0);
   private Set invoices = new HashSet(0);
   private Set expenses = new HashSet(0);
   private Set sanctions = new HashSet(0);
   private Set toCollects = new HashSet(0);
   private Set closingDayDetails = new HashSet(0);
   private Set FeeByDrivers = new HashSet(0);
   private Set releaseResources = new HashSet(0);

   public Person() {
   }

   public Person(String id, String firstName) {
      this.id = id;
      this.firstName = firstName;
   }

   /**
    *
    * @param personType
    */
   public Person(PersonType personType) {
      this.personType = personType;
   }

   /**
    *
    * @param id
    * @param firstName
    * @param secondName
    * @param lastName
    * @param middleName
    */
   public Person(String id, String firstName, String secondName, String lastName, String middleName) {
      this.id = id;
      this.firstName = firstName;
      this.secondName = secondName;
      this.lastName = lastName;
      this.middleName = middleName;
   }

   /**
    * Dashboard
    *
    * @param expirationLicenseDate
    * @param firstName
    * @param secondName
    * @param lastName
    * @param middleName
    */
   public Person(Date expirationLicenseDate, String firstName, String secondName, String lastName, String middleName) {
      this.expirationLicenseDate = expirationLicenseDate;
      this.firstName = firstName;
      this.secondName = secondName;
      this.lastName = lastName;
      this.middleName = middleName;
   }

   /**
    * Dashboard anniversary.
    *
    * @param firstName
    * @param secondName
    * @param lastName
    * @param middleName
    * @param admissionDate
    */
   public Person(String firstName, String secondName, String lastName, String middleName, Date admissionDate) {
      this.firstName = firstName;
      this.secondName = secondName;
      this.lastName = lastName;
      this.middleName = middleName;
      this.admissionDate = admissionDate;
   }

   /**
    * Get All birthday person.
    *
    * @param firstName
    * @param secondName
    * @param lastName
    * @param middleName
    * @param birthdate
    * @param admissionDate
    * @param personType
    */
   public Person(String firstName, String secondName, String lastName,
           String middleName, Date birthdate, Date admissionDate, PersonType personType) {
      this.firstName = firstName;
      this.secondName = secondName;
      this.lastName = lastName;
      this.middleName = middleName;
      this.birthdate = birthdate;
      this.admissionDate = admissionDate;
      this.personType = personType;
   }

   /**
    *
    * @param id
    * @param firstName
    * @param secondName
    * @param lastName
    * @param middleName
    * @param root
    */
   public Person(String id, String firstName, String secondName, String lastName, String middleName, Boolean root) {
      this.id = id;
      this.firstName = firstName;
      this.secondName = secondName;
      this.lastName = lastName;
      this.middleName = middleName;
      this.root = root;
   }

   /**
    *
    * @param id
    * @param firstName
    * @param secondName
    * @param lastName
    * @param middleName
    * @param addresses
    * @param contactNumbers
    */
   public Person(String id, String firstName, String secondName, String lastName,
           String middleName, Set addresses, Set contactNumbers) {
      this.id = id;
      this.firstName = firstName;
      this.secondName = secondName;
      this.lastName = lastName;
      this.middleName = middleName;
      this.addresses = addresses;
      this.contactNumbers = contactNumbers;
   }

   /**
    * Wrapper for dashboard birthdate.
    *
    * @param firstName Complete name
    * @param birthdate
    * @param personType
    */
   public Person(String firstName, Date birthdate, PersonType personType) {
      this.firstName = firstName;
      this.birthdate = birthdate;
      this.personType = personType;
   }

   /**
    * Wrapper for dashboard anniversary and six months.
    *
    * @param firstName Complete name
    * @param personType
    * @param admissionDate
    *
    */
   public Person(String firstName, PersonType personType, Date admissionDate) {
      this.firstName = firstName;
      this.personType = personType;
      this.admissionDate = admissionDate;
   }

   public Float getAdeudo() {
      return adeudo;
   }

   public void setAdeudo(Float adeudo) {
      this.adeudo = adeudo;
   }

   public Location getLocation() {
      return location;
   }

   public void setLocation(Location location) {
      this.location = location;
   }

   /**
    *
    * @param id
    */
   public Person(String id) {
      this.id = id;
   }

   public String getId() {
      return id;
   }

   public void setId(String id) {
      this.id = id;
   }

   public String getFirstName() {
      return firstName;
   }

   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }

   public String getSecondName() {
      return secondName;
   }

   public void setSecondName(String secondName) {
      this.secondName = secondName;
   }

   public String getLastName() {
      return lastName;
   }

   public void setLastName(String lastName) {
      this.lastName = lastName;
   }

   public String getMiddleName() {
      return middleName;
   }

   public void setMiddleName(String middleName) {
      this.middleName = middleName;
   }

   public String getMail() {
      return mail;
   }

   public void setMail(String mail) {
      this.mail = mail;
   }

   public Date getBirthdate() {
      return birthdate;
   }

   public void setBirthdate(Date birthdate) {
      this.birthdate = birthdate;
   }

   public String getCurp() {
      return curp;
   }

   public void setCurp(String curp) {
      this.curp = curp;
   }

   public String getRfc() {
      return rfc;
   }

   public void setRfc(String rfc) {
      this.rfc = rfc;
   }

   public String getAvatar() {
      return avatar;
   }

   public void setAvatar(String avatar) {
      this.avatar = avatar;
   }

   public PersonType getPersonType() {
      return personType;
   }

   public void setPersonType(PersonType personType) {
      this.personType = personType;
   }

   public Float getPayment() {
      return payment;
   }

   public void setPayment(Float payment) {
      this.payment = payment;
   }

   public PaymentType getPaymentType() {
      return paymentType;
   }

   public void setPaymentType(PaymentType paymentType) {
      this.paymentType = paymentType;
   }

   public String getLicense() {
      return license;
   }

   public void setLicense(String license) {
      this.license = license;
   }

   public Date getExpirationLicenseDate() {
      return expirationLicenseDate;
   }

   public void setExpirationLicenseDate(Date expirationLicenseDate) {
      this.expirationLicenseDate = expirationLicenseDate;
   }

   public String getIfe() {
      return ife;
   }

   public void setIfe(String ife) {
      this.ife = ife;
   }

   public Float getRetainer() {
      return retainer;
   }

   public void setRetainer(Float retainer) {
      this.retainer = retainer;
   }

   public Date getAdmissionDate() {
      return admissionDate;
   }

   public void setAdmissionDate(Date admissionDate) {
      this.admissionDate = admissionDate;
   }

   public Boolean getActive() {
      return active;
   }

   public void setActive(Boolean active) {
      this.active = active;
   }

   public GenericEnumType getBlackList() {
      return blackList;
   }

   public void setBlackList(GenericEnumType blackList) {
      this.blackList = blackList;
   }

   public String getBlackListDescription() {
      return blackListDescription;
   }

   public void setBlackListDescription(String blackListDescription) {
      this.blackListDescription = blackListDescription;
   }

   public Boolean getRoot() {
      return root;
   }

   public User getCreatedBy() {
      return createdBy;
   }

   public void setCreatedBy(User createdBy) {
      this.createdBy = createdBy;
   }

   public Date getCreatedOn() {
      return createdOn;
   }

   public void setCreatedOn(Date createdOn) {
      this.createdOn = createdOn;
   }

   public User getLastUpdatedBy() {
      return lastUpdatedBy;
   }

   public void setLastUpdatedBy(User lastUpdatedBy) {
      this.lastUpdatedBy = lastUpdatedBy;
   }

   public Date getLastUpdatedOn() {
      return lastUpdatedOn;
   }

   public void setLastUpdatedOn(Date lastUpdatedOn) {
      this.lastUpdatedOn = lastUpdatedOn;
   }

   public void setRoot(Boolean root) {
      this.root = root;
   }

   public Set getUsers() {
      return users;
   }

   public void setUsers(Set users) {
      this.users = users;
   }

   public Set getAddresses() {
      return addresses;
   }

   public void setAddresses(Set addresses) {
      this.addresses = addresses;
   }

   public Set getContactNumbers() {
      return contactNumbers;
   }

   public void setContactNumbers(Set contactNumbers) {
      this.contactNumbers = contactNumbers;
   }

   public Set getCustomerTaxis() {
      return customerTaxis;
   }

   public void setCustomerTaxis(Set customerTaxis) {
      this.customerTaxis = customerTaxis;
   }

   public Set getDriverTaxis() {
      return driverTaxis;
   }

   public void setDriverTaxis(Set driverTaxis) {
      this.driverTaxis = driverTaxis;
   }

   public Set getReferences() {
      return references;
   }

   public void setReferences(Set references) {
      this.references = references;
   }

   public Set getDocuments() {
      return documents;
   }

   public void setDocuments(Set documents) {
      this.documents = documents;
   }

   public Set getPersonHasServices() {
      return personHasServices;
   }

   public void setPersonHasServices(Set personHasServices) {
      this.personHasServices = personHasServices;
   }

   public Set getSales() {
      return sales;
   }

   public void setSales(Set sales) {
      this.sales = sales;
   }

   public Set getInvoices() {
      return invoices;
   }

   public void setInvoices(Set invoices) {
      this.invoices = invoices;
   }

   public void setExpenses(Set expenses) {
      this.expenses = expenses;
   }

   public Set getExpenses() {
      return expenses;
   }

   public Set getSanctions() {
      return sanctions;
   }

   public void setSanctions(Set sanctions) {
      this.sanctions = sanctions;
   }

   public Set getToCollects() {
      return toCollects;
   }

   public void setToCollects(Set toCollects) {
      this.toCollects = toCollects;
   }

   public Set getClosingDayDetails() {
      return closingDayDetails;
   }

   public void setClosingDayDetails(Set closingDayDetails) {
      this.closingDayDetails = closingDayDetails;
   }

   public void setFeeByDrivers(Set FeeByDrivers) {
      this.FeeByDrivers = FeeByDrivers;
   }

   public Set getFeeByDrivers() {
      return FeeByDrivers;
   }

   public Set getReleaseResources() {
      return releaseResources;
   }

   public void setReleaseResources(Set releaseResources) {
      this.releaseResources = releaseResources;
   }

   public String getNameEndorsement() {
      return nameEndorsement;
   }

   public void setNameEndorsement(String nameEndorsement) {
      this.nameEndorsement = nameEndorsement;
   }

   public String getParentescoEndorsement() {
      return parentescoEndorsement;
   }

   public void setParentescoEndorsement(String parentescoEndorsement) {
      this.parentescoEndorsement = parentescoEndorsement;
   }

   public String getPhoneEndorsement() {
      return phoneEndorsement;
   }

   public void setPhoneEndorsement(String phoneEndorsement) {
      this.phoneEndorsement = phoneEndorsement;
   }

   public double getSalary() {
      return salary;
   }

   public void setSalary(double salary) {
      this.salary = salary;
   }

   public double getImss() {
      return imss;
   }

   public void setImss(double imss) {
      this.imss = imss;
   }

   public double getSaving() {
      return saving;
   }

   public void setSaving(double saving) {
      this.saving = saving;
   }

   public RegimenFiscal getRegimenFiscal() {
      return regimenFiscal;
   }

   public void setRegimenFiscal(RegimenFiscal regimenFiscal) {
      this.regimenFiscal = regimenFiscal;
   }

   public GenericEnumType getUsuarioApp() {
      return usuarioApp;
   }

   public void setUsuarioApp(GenericEnumType usuarioApp) {
      this.usuarioApp = usuarioApp;
   }

   public String getPassword() {
      return password;
   }

   public void setPassword(String password) {
      this.password = password;
   }

   @Override
   public String toString() {
      return "Person{" + "firstName=" + firstName + ", secondName=" + secondName + ", lastName=" + lastName + ", middleName=" + middleName + ", avatar=" + avatar + '}';
   }

   public double getSavingWeek() {
      return savingWeek;
   }

   public void setSavingWeek(double savingWeek) {
      this.savingWeek = savingWeek;
   }

   public BasicType getJuridico() {
      return juridico;
   }

   public void setJuridico(BasicType juridico) {
      this.juridico = juridico;
   }

   public MediosDifusion getComoNosConocio() {
      return comoNosConocio;
   }

   public void setComoNosConocio(MediosDifusion comoNosConocio) {
      this.comoNosConocio = comoNosConocio;
   }

   public String getNumeroContacto() {
      return numeroContacto;
   }

   public void setNumeroContacto(String numeroContacto) {
      this.numeroContacto = numeroContacto;
   }

   public String getComentario() {
      return comentario;
   }

   public void setComentario(String comentario) {
      this.comentario = comentario;
   }

}
