<?php
namespace App\Entity;
use App\Repository\EmployeRepository;
use Doctrine\ORM\Mapping as ORM;
/**
* Employe = fiche personnelle d'un salarié de l'entreprise.
* L'affectation (magasin, direction, poste...) est gérée par EmployeAffectation.
*
* @ORM\Entity(repositoryClass=EmployeRepository::class)
* @ORM\Table(name="hr_employe")
*/
class Employe
{
public const STATUT_ACTIF = 'actif';
public const STATUT_SUSPENDU = 'suspendu';
public const STATUT_PARTI = 'parti';
public const STATUT_RETRAITE = 'retraite';
public const STATUT_DECEDE = 'decede';
public const SEXE_M = 'M';
public const SEXE_F = 'F';
public const SITUATION_CELIBATAIRE = 'celibataire';
public const SITUATION_MARIE = 'marie';
public const SITUATION_DIVORCE = 'divorce';
public const SITUATION_VEUF = 'veuf';
/** @ORM\Id @ORM\GeneratedValue @ORM\Column(type="integer") */
private $id;
/** @ORM\Column(type="string", length=30, unique=true) */
private $matricule;
/** @ORM\Column(type="string", length=80) */
private $nom;
/** @ORM\Column(type="string", length=80) */
private $prenom;
/** @ORM\Column(type="string", length=80, nullable=true, name="nom_jeune_fille") */
private $nomJeuneFille;
/** @ORM\Column(type="string", length=1, nullable=true) */
private $sexe;
/** @ORM\Column(type="date", nullable=true, name="date_naissance") */
private $dateNaissance;
/** @ORM\Column(type="string", length=120, nullable=true, name="lieu_naissance") */
private $lieuNaissance;
/** @ORM\Column(type="string", length=80, nullable=true) */
private $nationalite = 'Togolaise';
/** @ORM\Column(type="string", length=30, nullable=true, name="situation_familiale") */
private $situationFamiliale;
/** @ORM\Column(type="integer", options={"default":0}, name="nb_enfants") */
private $nbEnfants = 0;
/** @ORM\Column(type="integer", options={"default":0}, name="nb_enfants_a_charge") */
private $nbEnfantsACharge = 0;
/** @ORM\Column(type="string", length=30, nullable=true, name="cni_numero") */
private $cniNumero;
/** @ORM\Column(type="date", nullable=true, name="cni_date_emission") */
private $cniDateEmission;
/** @ORM\Column(type="string", length=30, nullable=true, name="nif_numero") */
private $nifNumero;
/** @ORM\Column(type="string", length=30, nullable=true, name="cnss_numero") */
private $cnssNumero;
/** @ORM\Column(type="string", length=30, nullable=true, name="inam_numero") */
private $inamNumero;
/** @ORM\Column(type="string", length=120, nullable=true) */
private $email;
/** @ORM\Column(type="string", length=20, nullable=true) */
private $telephone;
/** @ORM\Column(type="string", length=20, nullable=true, name="telephone_urgence") */
private $telephoneUrgence;
/** @ORM\Column(type="string", length=120, nullable=true, name="contact_urgence") */
private $contactUrgence;
/** @ORM\Column(type="text", nullable=true) */
private $adresse;
/** @ORM\Column(type="string", length=80, nullable=true) */
private $ville;
/** @ORM\Column(type="string", length=80, nullable=true) */
private $pays = 'Togo';
/** @ORM\Column(type="string", length=200, nullable=true) */
private $photo;
/** @ORM\Column(type="date", nullable=true, name="date_embauche") */
private $dateEmbauche;
/** @ORM\Column(type="date", nullable=true, name="date_fin_contrat") */
private $dateFinContrat;
/** @ORM\Column(type="date", nullable=true, name="date_depart") */
private $dateDepart;
/** @ORM\Column(type="string", length=20, options={"default":"actif"}) */
private $statut = self::STATUT_ACTIF;
/** @ORM\Column(type="string", length=80, nullable=true, name="banque_nom") */
private $banqueNom;
/** @ORM\Column(type="string", length=50, nullable=true, name="banque_rib") */
private $banqueRib;
/** @ORM\Column(type="string", length=30, nullable=true, name="mode_paiement") */
private $modePaiement = 'virement';
/** @ORM\Column(type="decimal", precision=14, scale=2, nullable=true, name="salaire_base") */
private $salaireBase;
/**
* @ORM\ManyToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=true)
*/
private $user;
/**
* @ORM\ManyToOne(targetEntity="Employe")
* @ORM\JoinColumn(name="manager_id", referencedColumnName="id", nullable=true)
*/
private $manager;
/** @ORM\Column(type="text", nullable=true) */
private $notes;
/** @ORM\Column(type="datetime", name="date_creation") */
private $dateCreation;
/** @ORM\Column(type="datetime", nullable=true, name="date_suppression") */
private $dateSuppression;
/** @ORM\Column(type="text", nullable=true) */
private $journal;
/**
* Entité juridique d'appartenance (Phase GES, multi-société).
*
* @ORM\ManyToOne(targetEntity="Entite")
* @ORM\JoinColumn(name="entite_id", referencedColumnName="id", nullable=true)
*/
private $entite;
public function __construct() { $this->dateCreation = new \DateTime(); }
public function getId(): ?int { return $this->id; }
public function getMatricule(): ?string { return $this->matricule; }
public function setMatricule(string $m): self { $this->matricule = $m; return $this; }
public function getNom(): ?string { return $this->nom; }
public function setNom(string $n): self { $this->nom = $n; return $this; }
public function getPrenom(): ?string { return $this->prenom; }
public function setPrenom(string $p): self { $this->prenom = $p; return $this; }
public function getNomJeuneFille(): ?string { return $this->nomJeuneFille; }
public function setNomJeuneFille(?string $n): self { $this->nomJeuneFille = $n; return $this; }
public function getSexe(): ?string { return $this->sexe; }
public function setSexe(?string $s): self { $this->sexe = $s; return $this; }
public function getDateNaissance(): ?\DateTimeInterface { return $this->dateNaissance; }
public function setDateNaissance(?\DateTimeInterface $d): self { $this->dateNaissance = $d; return $this; }
public function getLieuNaissance(): ?string { return $this->lieuNaissance; }
public function setLieuNaissance(?string $l): self { $this->lieuNaissance = $l; return $this; }
public function getNationalite(): ?string { return $this->nationalite; }
public function setNationalite(?string $n): self { $this->nationalite = $n; return $this; }
public function getSituationFamiliale(): ?string { return $this->situationFamiliale; }
public function setSituationFamiliale(?string $s): self { $this->situationFamiliale = $s; return $this; }
public function getNbEnfants(): int { return (int)$this->nbEnfants; }
public function setNbEnfants(int $n): self { $this->nbEnfants = $n; return $this; }
public function getNbEnfantsACharge(): int { return (int)$this->nbEnfantsACharge; }
public function setNbEnfantsACharge(int $n): self { $this->nbEnfantsACharge = $n; return $this; }
public function getCniNumero(): ?string { return $this->cniNumero; }
public function setCniNumero(?string $c): self { $this->cniNumero = $c; return $this; }
public function getCniDateEmission(): ?\DateTimeInterface { return $this->cniDateEmission; }
public function setCniDateEmission(?\DateTimeInterface $d): self { $this->cniDateEmission = $d; return $this; }
public function getNifNumero(): ?string { return $this->nifNumero; }
public function setNifNumero(?string $n): self { $this->nifNumero = $n; return $this; }
public function getCnssNumero(): ?string { return $this->cnssNumero; }
public function setCnssNumero(?string $n): self { $this->cnssNumero = $n; return $this; }
public function getInamNumero(): ?string { return $this->inamNumero; }
public function setInamNumero(?string $n): self { $this->inamNumero = $n; return $this; }
public function getEmail(): ?string { return $this->email; }
public function setEmail(?string $e): self { $this->email = $e; return $this; }
public function getTelephone(): ?string { return $this->telephone; }
public function setTelephone(?string $t): self { $this->telephone = $t; return $this; }
public function getTelephoneUrgence(): ?string { return $this->telephoneUrgence; }
public function setTelephoneUrgence(?string $t): self { $this->telephoneUrgence = $t; return $this; }
public function getContactUrgence(): ?string { return $this->contactUrgence; }
public function setContactUrgence(?string $c): self { $this->contactUrgence = $c; return $this; }
public function getAdresse(): ?string { return $this->adresse; }
public function setAdresse(?string $a): self { $this->adresse = $a; return $this; }
public function getVille(): ?string { return $this->ville; }
public function setVille(?string $v): self { $this->ville = $v; return $this; }
public function getPays(): ?string { return $this->pays; }
public function setPays(?string $p): self { $this->pays = $p; return $this; }
public function getPhoto(): ?string { return $this->photo; }
public function setPhoto(?string $p): self { $this->photo = $p; return $this; }
public function getDateEmbauche(): ?\DateTimeInterface { return $this->dateEmbauche; }
public function setDateEmbauche(?\DateTimeInterface $d): self { $this->dateEmbauche = $d; return $this; }
public function getDateFinContrat(): ?\DateTimeInterface { return $this->dateFinContrat; }
public function setDateFinContrat(?\DateTimeInterface $d): self { $this->dateFinContrat = $d; return $this; }
public function getDateDepart(): ?\DateTimeInterface { return $this->dateDepart; }
public function setDateDepart(?\DateTimeInterface $d): self { $this->dateDepart = $d; return $this; }
public function getStatut(): string { return $this->statut; }
public function setStatut(string $s): self { $this->statut = $s; return $this; }
public function getBanqueNom(): ?string { return $this->banqueNom; }
public function setBanqueNom(?string $b): self { $this->banqueNom = $b; return $this; }
public function getBanqueRib(): ?string { return $this->banqueRib; }
public function setBanqueRib(?string $r): self { $this->banqueRib = $r; return $this; }
public function getModePaiement(): ?string { return $this->modePaiement; }
public function setModePaiement(?string $m): self { $this->modePaiement = $m; return $this; }
public function getSalaireBase() { return $this->salaireBase; }
public function setSalaireBase($s): self { $this->salaireBase = $s; return $this; }
public function getUser(): ?User { return $this->user; }
public function setUser(?User $u): self { $this->user = $u; return $this; }
public function getManager(): ?Employe { return $this->manager; }
public function setManager(?Employe $m): self { $this->manager = $m; return $this; }
public function getNotes(): ?string { return $this->notes; }
public function setNotes(?string $n): self { $this->notes = $n; return $this; }
public function getDateCreation(): ?\DateTimeInterface { return $this->dateCreation; }
public function setDateCreation(\DateTimeInterface $d): self { $this->dateCreation = $d; return $this; }
public function getDateSuppression(): ?\DateTimeInterface { return $this->dateSuppression; }
public function setDateSuppression(?\DateTimeInterface $d): self { $this->dateSuppression = $d; return $this; }
public function getJournal(): ?string { return $this->journal; }
public function setJournal(?string $j): self { $this->journal = $j; return $this; }
public function getEntite(): ?Entite { return $this->entite; }
public function setEntite(?Entite $e): self { $this->entite = $e; return $this; }
public function getNomComplet(): string
{
return trim(($this->prenom ?? '').' '.($this->nom ?? ''));
}
public function getAge(): ?int
{
if (!$this->dateNaissance) return null;
return (int)$this->dateNaissance->diff(new \DateTime())->y;
}
public function getAncienneteAnnees(): ?int
{
if (!$this->dateEmbauche) return null;
$end = $this->dateDepart ?: new \DateTime();
return (int)$this->dateEmbauche->diff($end)->y;
}
public function __toString(): string { return $this->getNomComplet() ?: 'Employe#'.$this->id; }
public function toArray(): array
{
return [
'id' => $this->id,
'matricule' => $this->matricule,
'nom' => $this->nom,
'prenom' => $this->prenom,
'sexe' => $this->sexe,
'date_naissance' => $this->dateNaissance?->format('Y-m-d'),
'lieu_naissance' => $this->lieuNaissance,
'nationalite' => $this->nationalite,
'situation_familiale' => $this->situationFamiliale,
'nb_enfants' => $this->nbEnfants,
'nb_enfants_a_charge' => $this->nbEnfantsACharge,
'cni_numero' => $this->cniNumero,
'nif_numero' => $this->nifNumero,
'cnss_numero'=> $this->cnssNumero,
'inam_numero'=> $this->inamNumero,
'email' => $this->email,
'telephone' => $this->telephone,
'adresse' => $this->adresse,
'ville' => $this->ville,
'pays' => $this->pays,
'date_embauche' => $this->dateEmbauche?->format('Y-m-d'),
'date_fin_contrat' => $this->dateFinContrat?->format('Y-m-d'),
'date_depart' => $this->dateDepart?->format('Y-m-d'),
'statut' => $this->statut,
'banque_nom'=> $this->banqueNom,
'banque_rib'=> $this->banqueRib,
'mode_paiement' => $this->modePaiement,
'salaire_base' => $this->salaireBase,
'user_id' => $this->user?->getId(),
'manager_id' => $this->manager?->getId(),
'entite_id' => $this->entite?->getId(),
];
}
}