src/Entity/Consultant.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use Doctrine\ORM\Mapping as ORM;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface;
  6. /**
  7.  * Consultant
  8.  */
  9. #[ORM\Table(name'consultant')]
  10. #[ORM\Entity(repositoryClass'App\Repository\ConsultantRepository')]
  11. class Consultant implements PasswordAuthenticatedUserInterface
  12. {
  13.     #[ORM\OneToMany(targetEntity'App\Entity\CompanyConsultantLink'mappedBy'consultant'cascade: ['remove'])]
  14.     private $companies;
  15.     #[ORM\JoinTable(name'consultant_agent_link')]
  16.     #[ORM\ManyToMany(targetEntity'Agent'inversedBy'consultants')]
  17.     private $agents;
  18.     /**
  19.      * @var int
  20.      */
  21.     #[ORM\Column(name'id'type'integer')]
  22.     #[ORM\Id]
  23.     #[ORM\GeneratedValue(strategy'AUTO')]
  24.     #[ORM\OneToMany(targetEntity'App\Entity\CompanyConsultantLink'mappedBy'consultants')]
  25.     private $id;
  26.     #[ORM\OneToMany(targetEntity'Contact'mappedBy'consultantObject')]
  27.     public $contacts;
  28.     /**
  29.      * @var string
  30.      */
  31.     #[ORM\Column(name'username'type'string'length255)]
  32.     private $username;
  33.     /**
  34.      * @var string
  35.      */
  36.     #[ORM\Column(name'email'type'string'length255nullabletrue)]
  37.     public $email;
  38.     /**
  39.      * @var string
  40.      */
  41.     #[ORM\Column(name'password'type'string'length255)]
  42.     private $password;
  43.     /**
  44.      * @var boolean
  45.      */
  46.     #[ORM\Column(name'isAdmin'type'boolean')]
  47.     private $isAdmin;
  48.     /**
  49.      * @var boolean
  50.      */
  51.     #[ORM\Column(name'is_acceptant'type'boolean')]
  52.     private $isAcceptant;
  53.     /**
  54.      * @var string
  55.      */
  56.     #[ORM\Column(name'producent_id'type'string'length10nullabletrue)]
  57.     private $producentId;
  58.     /**
  59.      * @var array
  60.      */
  61.     #[ORM\Column(name'rights'type'array'nullabletrue)]
  62.     protected $rights;
  63.     /**
  64.      * @var array
  65.      */
  66.     #[ORM\Column(name'agents_ff'type'array'nullabletrue)]
  67.     protected $agentsFF;
  68.     /**
  69.      * @var \DateTime
  70.      */
  71.     #[ORM\Column(name'changelog_seen'type'datetime'nullabletrue)]
  72.     public $changelog_seen;
  73.     function __construct()
  74.     {
  75.         $this->agents = new ArrayCollection();
  76.         $this->companies = new ArrayCollection();
  77.     }
  78.     /**
  79.      * Get id
  80.      *
  81.      * @return int
  82.      */
  83.     public function getId()
  84.     {
  85.         return $this->id;
  86.     }
  87.     /**
  88.      * Set username
  89.      *
  90.      * @param string $username
  91.      *
  92.      * @return Consultant
  93.      */
  94.     public function setUsername($username)
  95.     {
  96.         $this->username $username;
  97.         return $this;
  98.     }
  99.     /**
  100.      * Get username
  101.      *
  102.      * @return string
  103.      */
  104.     public function getUsername()
  105.     {
  106.         return $this->username;
  107.     }
  108.     /**
  109.      * Set password
  110.      *
  111.      * @param string $password
  112.      *
  113.      * @return Consultant
  114.      */
  115.     public function setPassword($password)
  116.     {
  117.         $this->password $password;
  118.         return $this;
  119.     }
  120.     
  121.     
  122.     
  123.     /**
  124.      * Get password
  125.      *
  126.      * @return string
  127.      */
  128.     public function getPassword() : string|null
  129.     {
  130.         return $this->password;
  131.     }
  132.     /**
  133.      * @return array
  134.      */
  135.     public function getAgentsFF()
  136.     {
  137.         return $this->agentsFF;
  138.     }
  139.     /**
  140.      * @param array $agentsFF
  141.      */
  142.     public function setAgentsFF(array $agentsFF): void
  143.     {
  144.         $this->agentsFF $agentsFF;
  145.     }
  146.     private function getSalt() {
  147.         return $this->username;
  148.     }
  149.     /**
  150.      * @return Agent[]
  151.      */
  152.     public function getAgents()
  153.     {
  154.         return $this->agents;
  155.     }
  156.     /**
  157.      * @param mixed $agents
  158.      */
  159.     public function setAgents(ArrayCollection $agents)
  160.     {
  161.         $this->agents $agents;
  162.     }
  163.     public function isAdmin() {
  164.         return $this->isAdmin;
  165.     }
  166.     public function setIsAdmin($bool) {
  167.         $this->isAdmin $bool;
  168.     }
  169.     /**
  170.      * @return array
  171.      */
  172.     public function getRights() {
  173.         return $this->rights;
  174.     }
  175.     /**
  176.      * @param array $rights
  177.      */
  178.     public function setRights(array $rights) {
  179.         $this->rights $rights;
  180.     }
  181.     /**
  182.      * @param $right
  183.      * @return bool
  184.      */
  185.     public function can($right) {
  186.         if (!empty($this->getRights())) {
  187.             return in_array($right$this->getRights());
  188.         } else {
  189.             return $this->isAdmin();
  190.         }
  191.     }
  192.     /**
  193.      * @return CompanyConsultantLink[]
  194.      */
  195.     public function getCompanies()
  196.     {
  197.         return $this->companies;
  198.     }
  199.     /**
  200.      * @param mixed $companies
  201.      */
  202.     public function setCompanies($companies$isAdmin): void
  203.     {
  204.         foreach ($companies as $company) {
  205.             $link = new CompanyConsultantLink($company$this$isAdmin);
  206.         }
  207.         $this->companies $companies;
  208.     }
  209.     /**
  210.      * Returns the companies where this consultant is admin
  211.      */
  212.     public function getCompaniesAdmin() {
  213.         $result = [];
  214.         $companies $this->getCompanies();
  215.         foreach ($companies as $company) {
  216.             if ($company->getIsAdmin()) {
  217.                 $result[] = $company->getCompany();
  218.             }
  219.         }
  220.         return $result;
  221.     }
  222.     /**
  223.      * Checks whether the consultant has any rights
  224.      * @return bool
  225.      */
  226.     public function isCompanyAdmin() {
  227.         return $this->isAdmin() || !empty($this->getCompaniesAdmin());
  228.     }
  229.     /**
  230.      * @param Company $company Company of which you want the link of
  231.      * @return CompanyConsultantLink|null Link, null if is no member
  232.      */
  233.     public function getCompanyLink(Company $company) {
  234.         foreach ($this->getCompanies() as $companyConsultantLink) {
  235.             if ($companyConsultantLink->getCompany()->getId() === $company->getId()) {
  236.                 return $companyConsultantLink;
  237.             }
  238.         }
  239.         return null;
  240.     }
  241.     /**
  242.      * @param Company $company
  243.      * @return bool True iff consultant is admin of supplied company
  244.      */
  245.     public function isAdminOfCompany(Company $company) {
  246.         $companyConsultantLink $this->getCompanyLink($company);
  247.         if ($companyConsultantLink === null) {
  248.             return false;
  249.         } else {
  250.             return $companyConsultantLink->getIsAdmin();
  251.         }
  252.     }
  253.     /**
  254.      * @param Company $company
  255.      * @return bool True iff consultant is member of supplied company
  256.      */
  257.     public function isMemberOfCompany(Company $company) {
  258.         return $this->getCompanyLink($company) !== null;
  259.     }
  260.     /**
  261.      * Checks whether the consultant is an Anva consultant
  262.      * @return bool
  263.      */
  264.     public function inAnva() {
  265.         if ($this->isAdmin) {
  266.             return true;
  267.         }
  268.         foreach ($this->getCompanies() as $companyLink) {
  269.             if ($companyLink->getCompany()->isInAnva()) {
  270.                 return true;
  271.             }
  272.         }
  273.         return false;
  274.     }
  275.     public function canAbonnement($agentId) {
  276.         if ($agentId == 'Amstelgeld & AssurantiĆ«n' || $agentId == 'Internetverzekeren.nl') {
  277.             return true;
  278.         }
  279.         if ($this->isAdmin) {
  280.             return true;
  281.         }
  282.         foreach ($this->getCompanies() as $company) {
  283.             if ($company->getCompany()->getName() === 'Amstelgeld') {
  284.                 return true;
  285.             }
  286.         }
  287.         return false;
  288.     }
  289.     /**
  290.      * @return string|null
  291.      */
  292.     public function getProducentId()
  293.     {
  294.         return $this->producentId ?? 22222;
  295.     }
  296.     /**
  297.      * @param string $producentId
  298.      */
  299.     public function setProducentId(string $producentId): void
  300.     {
  301.         $this->producentId $producentId;
  302.     }
  303.     /**
  304.      * @return bool
  305.      */
  306.     public function isAcceptant(): bool
  307.     {
  308.         return $this->isAcceptant || $this->isAdmin;
  309.     }
  310.     /**
  311.      * @param bool $isAcceptant
  312.      */
  313.     public function setIsAcceptant(bool $isAcceptant): void
  314.     {
  315.         $this->isAcceptant $isAcceptant;
  316.     }
  317.     public function inAssu() {
  318.         if ($this->isAdmin) {
  319.             return true;
  320.         }
  321.         foreach ($this->getCompanies() as $companyLink) {
  322.             if ($companyLink->getCompany()->getName() == 'Amstelgeld') {
  323.                 return true;
  324.             }
  325.         }
  326.         return false;
  327.     }
  328.     public function hasEmail() {
  329.         return isset($this->email);
  330.     }
  331.     public function inFF() {
  332.         if ($this->isAdmin) {
  333.             return true;
  334.         }
  335.         foreach ($this->getCompanies() as $companyLink) {
  336.             if ($companyLink->getCompany()->getName() == 'Optima') {
  337.                 return true;
  338.             }
  339.         }
  340.         return false;
  341.     }
  342.     public function hasAccessFF($kantoorId) {
  343.         if ($this->isAdmin()) {
  344.             return true;
  345.         }
  346.         return in_array($kantoorId$this->getAgentsFF());
  347.     }
  348. }