src/Entity/Barema.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use Doctrine\Common\Collections\ArrayCollection;
  4. use Doctrine\Common\Collections\Collection;
  5. use Doctrine\ORM\Mapping as ORM;
  6. use Gedmo\Timestampable\Traits\TimestampableEntity;
  7. use Symfony\Component\Validator\Constraints as Assert;
  8. /**
  9.  * @ORM\Entity(repositoryClass="App\Repository\BaremaRepository")
  10.  */
  11. class Barema
  12. {
  13.     use TimestampableEntity;
  14.     /**
  15.      * @ORM\Id()
  16.      * @ORM\GeneratedValue()
  17.      * @ORM\Column(type="integer")
  18.      */
  19.     private ?int $id=null;
  20.     /**
  21.      * @ORM\Column(type="string", length=255)
  22.      * @Assert\Length(max=255)
  23.      */
  24.     private string $name;
  25.     /**
  26.      * @ORM\Column(type="text", nullable=true)
  27.      */
  28.     private ?string $observacoes=null;
  29.     /**
  30.      * @ORM\Column(type="boolean")
  31.      */
  32.     private bool $isAtivo true;
  33.     /**
  34.      * @ORM\OneToMany(targetEntity="App\Entity\Edital", mappedBy="barema")
  35.      */
  36.     private Collection $editais;
  37.     /**
  38.      * @ORM\Column(type="json")
  39.      */
  40.     private array $formacaoAcademica = [['descricao' => '''unidade' => 'Título''pontos' => 10'maximo' => 40]];
  41.     /**
  42.      * @ORM\Column(type="integer")
  43.      * @Assert\PositiveOrZero()
  44.      */
  45.     private int $notaFormacaoAcademica 30;
  46.     /**
  47.      * @ORM\Column(type="integer")
  48.      * @Assert\PositiveOrZero()
  49.      */
  50.     private int $notaFormacaoAcademicaDoutorado 20;
  51.     /**
  52.      * @ORM\Column(type="json")
  53.      */
  54.     private array $atuacaoProfissional = [['descricao' => '''unidade' => 'Ano''pontos' => 10'maximo' => 40]];
  55.     /**
  56.      * @ORM\Column(type="integer")
  57.      * @Assert\PositiveOrZero()
  58.      */
  59.     private int $notaAtuacaoProfissional 30;
  60.     /**
  61.      * @ORM\Column(type="integer")
  62.      * @Assert\PositiveOrZero()
  63.      */
  64.     private int $notaAtuacaoProfissionalDoutorado 20;
  65.     /**
  66.      * @ORM\Column(type="json")
  67.      */
  68.     private array $producaoAcademica = [['descricao' => '''unidade' => 'Artigo''pontos' => 10'maximo' => 40]];
  69.     /**
  70.      * @ORM\Column(type="integer")
  71.      * @Assert\PositiveOrZero()
  72.      */
  73.     private int $notaProducaoAcademica 40;
  74.     /**
  75.      * @ORM\Column(type="integer")
  76.      * @Assert\PositiveOrZero()
  77.      */
  78.     private int $notaProducaoAcademicaDoutorado 60;
  79.     public function __construct()
  80.     {
  81.         $this->editais = new ArrayCollection();
  82.     }
  83.     public function __toString(): string
  84.     {
  85.         return $this->name . ($this->isAtivo '' ' (desativado)');
  86.     }
  87.     /**
  88.      * Processa as definições das avaliações e atribui índices baseados em MD5 para cada uma.
  89.      * Esses índices são usados para mapear as respostas na inscrição.
  90.      */
  91.     public function normalizarAvaliacoes()
  92.     {
  93.         $this->setFormacaoAcademica($this->normalizar($this->getFormacaoAcademica(), 'formacao'));
  94.         $this->setAtuacaoProfissional($this->normalizar($this->getAtuacaoProfissional(), 'atuacao'));
  95.         $this->setProducaoAcademica($this->normalizar($this->getProducaoAcademica(), 'producao'));
  96.     }
  97.     /**
  98.      * Ordena a lista de itens, considerando o marcador de posição, que é excluído no final.
  99.      * Indexa por uma chave MD5 baseada na Descrição.
  100.      * @param array $lista
  101.      * @param string $salt
  102.      * @return array
  103.      */
  104.     protected function normalizar(array $listastring $salt): array {
  105.         $normal = [];
  106.         uksort($lista, function($a$b) use ($lista) {
  107.             $_a array_key_exists('ordem'$lista[$a]) ? $lista[$a]['ordem'] : $a;
  108.             $_b array_key_exists('ordem'$lista[$b]) ? $lista[$b]['ordem'] : $b;
  109.             if ($_a $_b) return -1;
  110.             elseif ($_a $_b) return 1;
  111.             else return 0;
  112.         });
  113.         foreach ($lista as $avaliacao) {
  114.             $md5 md5($salt.$avaliacao['descricao']);
  115.             $avaliacao['chave'] = $md5;
  116.             $normal[] = $avaliacao;
  117.         }
  118.         return $normal;
  119.     }
  120.     public function notaMaximaMestrado(): int
  121.     {
  122.         return $this->notaAtuacaoProfissional $this->notaFormacaoAcademica $this->notaProducaoAcademica;
  123.     }
  124.     public function notaMaximaDoutorado(): int
  125.     {
  126.         return $this->notaAtuacaoProfissionalDoutorado $this->notaFormacaoAcademicaDoutorado $this->notaProducaoAcademicaDoutorado;
  127.     }
  128.     public function getId(): ?int
  129.     {
  130.         return $this->id;
  131.     }
  132.     public function getName(): string
  133.     {
  134.         return $this->name;
  135.     }
  136.     public function setName(string $name): self
  137.     {
  138.         $this->name $name;
  139.         return $this;
  140.     }
  141.     public function getObservacoes(): ?string
  142.     {
  143.         return $this->observacoes;
  144.     }
  145.     public function setObservacoes(?string $observacoes): self
  146.     {
  147.         $this->observacoes $observacoes;
  148.         return $this;
  149.     }
  150.     public function getIsAtivo(): bool
  151.     {
  152.         return $this->isAtivo;
  153.     }
  154.     public function setIsAtivo(bool $isAtivo): self
  155.     {
  156.         $this->isAtivo $isAtivo;
  157.         return $this;
  158.     }
  159.     /**
  160.      * @return Collection|Edital[]
  161.      */
  162.     public function getEditais(): Collection
  163.     {
  164.         return $this->editais;
  165.     }
  166.     public function addEdital(Edital $edital): self
  167.     {
  168.         if (!$this->editais->contains($edital)) {
  169.             $this->editais[] = $edital;
  170.             $edital->setBarema($this);
  171.         }
  172.         return $this;
  173.     }
  174.     public function removeEdital(Edital $edital): self
  175.     {
  176.         if ($this->editais->contains($edital)) {
  177.             $this->editais->removeElement($edital);
  178.             // set the owning side to null (unless already changed)
  179.             if ($edital->getBarema() === $this) {
  180.                 $edital->setBarema(null);
  181.             }
  182.         }
  183.         return $this;
  184.     }
  185.     public function getFormacaoAcademica(): array
  186.     {
  187.         return $this->formacaoAcademica;
  188.     }
  189.     public function setFormacaoAcademica(array $formacaoAcademica): self
  190.     {
  191.         $this->formacaoAcademica $formacaoAcademica;
  192.         return $this;
  193.     }
  194.     public function getNotaFormacaoAcademica(): int
  195.     {
  196.         return $this->notaFormacaoAcademica;
  197.     }
  198.     public function setNotaFormacaoAcademica(int $notaFormacaoAcademica): self
  199.     {
  200.         $this->notaFormacaoAcademica $notaFormacaoAcademica;
  201.         return $this;
  202.     }
  203.     public function getNotaFormacaoAcademicaDoutorado(): int
  204.     {
  205.         return $this->notaFormacaoAcademicaDoutorado;
  206.     }
  207.     public function setNotaFormacaoAcademicaDoutorado(int $notaFormacaoAcademicaDoutorado): self
  208.     {
  209.         $this->notaFormacaoAcademicaDoutorado $notaFormacaoAcademicaDoutorado;
  210.         return $this;
  211.     }
  212.     public function getAtuacaoProfissional(): array
  213.     {
  214.         return $this->atuacaoProfissional;
  215.     }
  216.     public function setAtuacaoProfissional(array $atuacaoProfissional): self
  217.     {
  218.         $this->atuacaoProfissional $atuacaoProfissional;
  219.         return $this;
  220.     }
  221.     public function getNotaAtuacaoProfissional(): int
  222.     {
  223.         return $this->notaAtuacaoProfissional;
  224.     }
  225.     public function setNotaAtuacaoProfissional(int $notaAtuacaoProfissional): self
  226.     {
  227.         $this->notaAtuacaoProfissional $notaAtuacaoProfissional;
  228.         return $this;
  229.     }
  230.     public function getNotaAtuacaoProfissionalDoutorado(): int
  231.     {
  232.         return $this->notaAtuacaoProfissionalDoutorado;
  233.     }
  234.     public function setNotaAtuacaoProfissionalDoutorado(int $notaAtuacaoProfissionalDoutorado): self
  235.     {
  236.         $this->notaAtuacaoProfissionalDoutorado $notaAtuacaoProfissionalDoutorado;
  237.         return $this;
  238.     }
  239.     public function getProducaoAcademica(): array
  240.     {
  241.         return $this->producaoAcademica;
  242.     }
  243.     public function setProducaoAcademica(array $producaoAcademica): self
  244.     {
  245.         $this->producaoAcademica $producaoAcademica;
  246.         return $this;
  247.     }
  248.     public function getNotaProducaoAcademica(): int
  249.     {
  250.         return $this->notaProducaoAcademica;
  251.     }
  252.     public function setNotaProducaoAcademica(int $notaProducaoAcademica): self
  253.     {
  254.         $this->notaProducaoAcademica $notaProducaoAcademica;
  255.         return $this;
  256.     }
  257.     public function getNotaProducaoAcademicaDoutorado(): int
  258.     {
  259.         return $this->notaProducaoAcademicaDoutorado;
  260.     }
  261.     public function setNotaProducaoAcademicaDoutorado(int $notaProducaoAcademicaDoutorado): self
  262.     {
  263.         $this->notaProducaoAcademicaDoutorado $notaProducaoAcademicaDoutorado;
  264.         return $this;
  265.     }
  266. }