src/Entity/PcPostulacion.php line 16

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\PcPostulacionRepository;
  4. use Doctrine\DBAL\Types\Types;
  5. use Doctrine\ORM\Mapping as ORM;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. use Doctrine\Common\Collections\Collection;
  8. use DateTime;
  9. use DateTimeInterface;
  10. use Symfony\Component\Validator\Constraints as Assert;
  11. #[ORM\Entity(repositoryClassPcPostulacionRepository::class)]
  12. class PcPostulacion
  13. {
  14.     #[ORM\Id]
  15.     #[ORM\GeneratedValue]
  16.     #[ORM\Column]
  17.     private ?int $id null;
  18.     #[Assert\Type(type"integer"message"El monto requerido debe ser un número entero")]
  19.     #[Assert\GreaterThanOrEqual(value0message"El monto requerido no puede ser negativo")]
  20.     #[ORM\Column(type"integer"nullabletrue)]
  21.     private ?int $monto_requerido 0;
  22.     #[ORM\Column]
  23.     private array $formulario_postulacion = [];
  24.     #[ORM\Column]
  25.     private array $documentos_postulacion = [];
  26.     #[Assert\Length(max255maxMessage"El certificado de postulación no puede superar los 255 caracteres")]
  27.     #[ORM\Column(type'string'length255nullable:true)]
  28.     private $certificado_postulacion;
  29.     #[ORM\Column(type'boolean'nullable:true)]
  30.     private $resultado_admisibilidad;
  31.     #[Assert\Length(max255maxMessage"El estado de admisibilidad no puede superar los 255 caracteres")]
  32.     #[ORM\Column(type'string'length255nullable:true)]
  33.     private $estado_admisibilidad;
  34.     #[ORM\Column]
  35.     private array $formulario_admisibilidad = [];
  36.     #[ORM\Column(type'decimal'precision:10scale:3nullable:true)]
  37.     private $nota_final_evaluacion null;
  38.     #[ORM\Column]
  39.     private array $formulario_evaluacion = [];
  40.     #[Assert\Length(max255maxMessage"El estado de evaluación no puede superar los 255 caracteres")]
  41.     #[ORM\Column(type'string'length255nullable:true)]
  42.     private $estado_evaluacion;
  43.     #[ORM\Column]
  44.     private array $formulario_seleccion = [];
  45.     #[Assert\Length(max255maxMessage"El estado de selección no puede superar los 255 caracteres")]
  46.     #[ORM\Column(type'string'length255nullable:true)]
  47.     private $estado_seleccion;
  48.     #[ORM\Column(type'boolean'nullable:true)]
  49.     private $resultado_seleccion;
  50.     #[Assert\Type(type"integer"message"El monto requerido debe ser un número entero")]
  51.     #[Assert\GreaterThanOrEqual(value0message"El monto requerido no puede ser negativo")]
  52.     #[ORM\Column(type"integer"nullabletrue)]
  53.     private ?int $monto_adjudicado null;
  54.     #[ORM\Column]
  55.     private array $documentos = [];
  56.     #[ORM\ManyToOne(targetEntity"App\Entity\PcConvocatorias"inversedBy'postulacion')]
  57.     #[ORM\JoinColumn(nullablefalse)]
  58.     private $convocatoria;
  59.     #[ORM\ManyToOne(targetEntity"App\Entity\PcPuntoCultura"inversedBy'postulacion')]
  60.     #[ORM\JoinColumn(nullablefalse)]
  61.     private $puntoCultura;
  62.     #[Assert\Length(max255maxMessage"El estado no puede superar los 255 caracteres")]
  63.     #[ORM\Column(type'string'length255nullabletrue)]
  64.     private $estado;
  65.     #[ORM\ManyToOne(targetEntity"App\Entity\User"inversedBy'postulacion_admisibilidad')]
  66.     private ?User $usuario_admisibilidad;
  67.     #[ORM\ManyToOne(targetEntity"App\Entity\User"inversedBy'postulacion_evaluacion')]
  68.     private ?User $usuario_evaluacion;
  69.     #[ORM\ManyToOne(targetEntity"App\Entity\User"inversedBy'postulacion_seleccion')]
  70.     private ?User $usuario_seleccion;
  71.     #[ORM\Column(type'datetime',nullable:true)]
  72.     private $createdAt;
  73.     #[ORM\Column(type'datetime',nullable:true)]
  74.     private $updatedAt;
  75.     #[ORM\Column(type'datetime',nullable:true)]
  76.     private $postulatedAt;
  77.     #[ORM\Column(type'datetime',nullable:true)]
  78.     private $admisibilidad_at;
  79.     #[ORM\Column(type'datetime',nullable:true)]
  80.     private $evaluacion_at;
  81.     #[ORM\Column(type'datetime',nullable:true)]
  82.     private $seleccion_at;
  83.     public function getId(): ?int
  84.     {
  85.         return $this->id;
  86.     }
  87.     public function getMontoRequerido(): ?int
  88.     {
  89.         return $this->monto_requerido;
  90.     }
  91.     public function setMontoRequerido(?int $monto_requerido): self
  92.     {
  93.         $this->monto_requerido $monto_requerido;
  94.         return $this;
  95.     }
  96.     public function getFormularioPostulacion(): array
  97.     {
  98.         return $this->formulario_postulacion;
  99.     }
  100.     public function setFormularioPostulacion(array $formulario_postulacion): self
  101.     {
  102.         $this->formulario_postulacion $formulario_postulacion;
  103.         return $this;
  104.     }
  105.     public function getDocumentosPostulacion(): array
  106.     {
  107.         return $this->documentos_postulacion;
  108.     }
  109.     public function setDocumentosPostulacion(array $documentos_postulacion): self
  110.     {
  111.         $this->documentos_postulacion $documentos_postulacion;
  112.         return $this;
  113.     }
  114.     public function getCertificadoPostulacion(): ?string
  115.     {
  116.         return $this->certificado_postulacion;
  117.     }
  118.     public function setCertificadoPostulacion(?string $certificado_postulacion): self
  119.     {
  120.         $this->certificado_postulacion $certificado_postulacion;
  121.         return $this;
  122.     }
  123.     public function getResultadoAdmisibilidad(): ?bool
  124.     {
  125.         return $this->resultado_admisibilidad;
  126.     }
  127.     public function setResultadoAdmisibilidad(?bool $resultado_admisibilidad): self
  128.     {
  129.         $this->resultado_admisibilidad $resultado_admisibilidad;
  130.         return $this;
  131.     }
  132.     public function getEstadoAdmisibilidad(): ?string
  133.     {
  134.         return $this->estado_admisibilidad;
  135.     }
  136.     public function setEstadoAdmisibilidad(?string $estado_admisibilidad): self
  137.     {
  138.         $this->estado_admisibilidad $estado_admisibilidad;
  139.         return $this;
  140.     }
  141.     public function getFormularioAdmisibilidad(): array
  142.     {
  143.         return $this->formulario_admisibilidad;
  144.     }
  145.     public function setFormularioAdmisibilidad(array $formulario_admisibilidad): self
  146.     {
  147.         $this->formulario_admisibilidad $formulario_admisibilidad;
  148.         return $this;
  149.     }
  150.     public function getNotaFinalEvaluacion(): ?float
  151.     {
  152.         return $this->nota_final_evaluacion !== null ? (float) $this->nota_final_evaluacion null;
  153.     }
  154.     public function setNotaFinalEvaluacion(?float $nota_final_evaluacion): self
  155.     {
  156.         $this->nota_final_evaluacion $nota_final_evaluacion;
  157.         return $this;
  158.     }
  159.     public function getFormularioEvaluacion(): array
  160.     {
  161.         return $this->formulario_evaluacion;
  162.     }
  163.     public function setFormularioEvaluacion(array $formulario_evaluacion): self
  164.     {
  165.         $this->formulario_evaluacion $formulario_evaluacion;
  166.         return $this;
  167.     }
  168.     public function getEstadoEvaluacion(): ?string
  169.     {
  170.         return $this->estado_evaluacion;
  171.     }
  172.     public function setEstadoEvaluacion(?string $estado_evaluacion): self
  173.     {
  174.         $this->estado_evaluacion $estado_evaluacion;
  175.         return $this;
  176.     }
  177.     public function getFormularioSeleccion(): array
  178.     {
  179.         return $this->formulario_seleccion;
  180.     }
  181.     public function setFormularioSeleccion(array $formulario_seleccion): self
  182.     {
  183.         $this->formulario_seleccion $formulario_seleccion;
  184.         return $this;
  185.     }
  186.     public function getEstadoSeleccion(): ?string
  187.     {
  188.         return $this->estado_seleccion;
  189.     }
  190.     public function setEstadoSeleccion(?string $estado_seleccion): self
  191.     {
  192.         $this->estado_seleccion $estado_seleccion;
  193.         return $this;
  194.     }
  195.     public function getResultadoSeleccion(): ?bool
  196.     {
  197.         return $this->resultado_seleccion;
  198.     }
  199.     public function setResultadoSeleccion(?bool $resultado_seleccion): self
  200.     {
  201.         $this->resultado_seleccion $resultado_seleccion;
  202.         return $this;
  203.     }
  204.     public function getMontoAdjudicado(): ?int
  205.     {
  206.         return $this->monto_adjudicado;
  207.     }
  208.     public function setMontoAdjudicado(?int $monto_adjudicado): self
  209.     {
  210.         $this->monto_adjudicado $monto_adjudicado;
  211.         return $this;
  212.     }
  213.     public function getDocumentos(): array
  214.     {
  215.         return $this->documentos;
  216.     }
  217.     public function setDocumentos(array $documentos): self
  218.     {
  219.         $this->documentos $documentos;
  220.         return $this;
  221.     }
  222.     public function getConvocatoria()
  223.     {
  224.         return $this->convocatoria;
  225.     }
  226.     public function setConvocatoria($convocatoria): self
  227.     {
  228.         $this->convocatoria $convocatoria;
  229.         return $this;
  230.     }
  231.     public function getPuntoCultura()
  232.     {
  233.         return $this->puntoCultura;
  234.     }
  235.     public function setPuntoCultura($puntoCultura): self
  236.     {
  237.         $this->puntoCultura $puntoCultura;
  238.         return $this;
  239.     }
  240.     public function getEstado(): ?string
  241.     {
  242.         return $this->estado;
  243.     }
  244.     public function setEstado(?string $estado): self
  245.     {
  246.         $this->estado $estado;
  247.         return $this;
  248.     }
  249.     public function __toString(){
  250.         return $this->getNombre();
  251.     }
  252.     /**
  253.      * @return DateTimeInterface|null
  254.      * @throws Exception
  255.      */
  256.     public function getCreatedAt(): ?DateTimeInterface
  257.     {
  258.         return $this->createdAt ?? new DateTime();
  259.     }
  260.     /**
  261.      * @param DateTimeInterface $createdAt
  262.      * @return $this
  263.      */
  264.     public function setCreatedAt(DateTimeInterface $createdAt): self
  265.     {
  266.         $this->createdAt $createdAt;
  267.         return $this;
  268.     }
  269.     /**
  270.      * @return DateTimeInterface|null
  271.      */
  272.     public function getUpdatedAt(): ?DateTimeInterface
  273.     {
  274.         return $this->updatedAt ?? new DateTime();
  275.     }
  276.     /**
  277.      * @param DateTimeInterface $updatedAt
  278.      * @return $this
  279.      */
  280.     public function setUpdatedAt(DateTimeInterface $updatedAt): self
  281.     {
  282.         $this->updatedAt $updatedAt;
  283.         return $this;
  284.     }
  285.     /**
  286.      * @ORM\PrePersist()
  287.      * @ORM\PreUpdate()
  288.      */
  289.     public function updateTimestamps(): void
  290.     {
  291.         $now = new DateTime();
  292.         $this->setUpdatedAt($now);
  293.         if ($this->getId() === null) {
  294.             $this->setCreatedAt($now);
  295.         }
  296.     }
  297.     public function getPostulatedAt(): ?\DateTimeInterface
  298.     {
  299.         return $this->postulatedAt;
  300.     }
  301.     public function setPostulatedAt(?\DateTimeInterface $postulatedAt): self
  302.     {
  303.         $this->postulatedAt $postulatedAt;
  304.         return $this;
  305.     }
  306.     public function getAdmisibilidadAt(): ?\DateTimeInterface
  307.     {
  308.         return $this->admisibilidad_at;
  309.     }
  310.     public function setAdmisibilidadAt(?\DateTimeInterface $admisibilidad_at): self
  311.     {
  312.         $this->admisibilidad_at $admisibilidad_at;
  313.         return $this;
  314.     }
  315.     public function getEvaluacionAt(): ?\DateTimeInterface
  316.     {
  317.         return $this->evaluacion_at;
  318.     }
  319.     public function setEvaluacionAt(?\DateTimeInterface $evaluacion_at): self
  320.     {
  321.         $this->evaluacion_at $evaluacion_at;
  322.         return $this;
  323.     }
  324.     public function getSeleccionAt(): ?\DateTimeInterface
  325.     {
  326.         return $this->seleccion_at;
  327.     }
  328.     public function setSeleccionAt(?\DateTimeInterface $seleccion_at): self
  329.     {
  330.         $this->seleccion_at $seleccion_at;
  331.         return $this;
  332.     }
  333.     public function getUsuarioAdmisibilidad(): ?User
  334.     {
  335.         return $this->usuario_admisibilidad;
  336.     }
  337.     public function setUsuarioAdmisibilidad(?User $usuarioAdmisibilidad): self
  338.     {
  339.         $this->usuario_admisibilidad $usuarioAdmisibilidad;
  340.         return $this;
  341.     }
  342.     public function getUsuarioEvaluacion(): ?User
  343.     {
  344.         return $this->usuario_evaluacion;
  345.     }
  346.     public function setUsuarioEvaluacion(?User $usuarioEvaluacion): self
  347.     {
  348.         $this->usuario_evaluacion $usuarioEvaluacion;
  349.         return $this;
  350.     }
  351.     public function getUsuarioSeleccion(): ?User
  352.     {
  353.         return $this->usuario_seleccion;
  354.     }
  355.     public function setUsuarioSeleccion(?User $usuarioSeleccion): self
  356.     {
  357.         $this->usuario_seleccion $usuarioSeleccion;
  358.         return $this;
  359.     }
  360.     public function isEditableAdmisibilidad(): ?bool {
  361.         return ($this->estado == 'send'
  362.             && $this->estado_admisibilidad !== 'send'
  363.             && $this->getConvocatoria()->getEstado() == '2');
  364.     }
  365.     public function isEditableEvaluacion(): ?bool {
  366.         return ($this->estado == 'send'
  367.             && $this->estado_admisibilidad == 'send'
  368.             && $this->resultado_admisibilidad
  369.             && $this->estado_evaluacion !== 'send'
  370.             && $this->getConvocatoria()->getEstado() == '2');
  371.     }
  372.     public function isEditableSeleccion(): ?bool {
  373.         $convocatoriaEntidad $this->getConvocatoria();
  374.         return ($this->estado == 'send'
  375.             && $this->estado_admisibilidad == 'send'
  376.             && $this->resultado_admisibilidad
  377.             && $this->getNotaFinalEvaluacion() >=  $convocatoriaEntidad->getPuntajeEvalCorte()
  378.             && $this->estado_evaluacion == 'send'
  379.             && $this->estado_seleccion !== 'send'
  380.             && $convocatoriaEntidad->getEstado() == '2');
  381.     }
  382.     public function getEtapaPostulacion(){
  383.         $convocatoriaEntidad $this->getConvocatoria();
  384.         if($convocatoriaEntidad->getEstado() == '1'){
  385.             return 'En postulación';
  386.         } else if($convocatoriaEntidad->getEstado() == '2'){
  387.             if($this->isEditableAdmisibilidad()){
  388.                 return 'Admisibilidad';
  389.             } else if ($this->isEditableEvaluacion()) {
  390.                 return 'Evaluación';
  391.             } else if ($this->isEditableSeleccion()) {
  392.                 return 'Selección';
  393.             } else {
  394.                 return 'Cerrado';
  395.             }
  396.         } else {
  397.             return 'Cerrado';
  398.         }
  399.     }
  400.     public function getResultadoPostulacion(){
  401.         $convocatoriaEntidad $this->getConvocatoria();
  402.         $estadoConvocatoria $convocatoriaEntidad->getEstado();
  403.         $estadoPostulacion $this->getEstado();
  404.         $estadoAdmisibilidad $this->getEstadoAdmisibilidad();
  405.         $estadoEvaluacion $this->getEstadoEvaluacion();
  406.         $estadoSeleccion $this->getEstadoSeleccion();
  407.         $esAdmisible $this->getResultadoAdmisibilidad();
  408.         $esSeleccion $this->getResultadoSeleccion();
  409.         $esEvaluacion  $this->getNotaFinalEvaluacion() >= $convocatoriaEntidad->getPuntajeEvalCorte();
  410.         $estado 'Guardado';
  411.         // En postulacion
  412.         if($estadoPostulacion == 'send'){
  413.             $estado 'Enviado';
  414.         }
  415.         // Evaluacion
  416.         if(!empty($estadoAdmisibilidad)){
  417.             if($estadoAdmisibilidad == 'send') {
  418.                 if($esAdmisible){
  419.                     $estado 'Admisible';
  420.                 }else{
  421.                     $estado 'No admisible';
  422.                 }
  423.             } else {
  424.                 $estado 'en proceso de admisibilidad';
  425.             }
  426.         }
  427.         if(!empty($estadoEvaluacion)){
  428.             if($estadoEvaluacion == 'send') {
  429.                 if($esEvaluacion){
  430.                     $estado 'Evaluación aprobada';
  431.                 } else {
  432.                     $estado 'Evaluación no aprobada';
  433.                 }
  434.             } else {
  435.                 $estado 'en proceso de evaluación';
  436.             }
  437.         }
  438.         if(!empty($estadoSeleccion)){
  439.             if($estadoSeleccion == 'send') {
  440.                 if($esSeleccion){
  441.                     $estado 'Seleccionada';
  442.                 }else{
  443.                     $estado 'No seleccionada';
  444.                 }
  445.             } else {
  446.                 $estado 'en proceso de selección';
  447.             }
  448.         }
  449.         return $estado;
  450.     }
  451. }