EstudianteDocumento.php 8.77 KB
<?php

namespace UBV\SurUbvBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Symfony\Component\HttpFoundation\File\UploadedFile;
use Symfony\Component\HttpFoundation\File\File;


use Symfony\Component\Validator\Constraints as Assert;

/**
 * UBV\SurUbvBundle\Entity\EstudianteDocumento
 *
 * @ORM\Entity(repositoryClass="UBV\SurUbvBundle\Entity\EstudianteDocumentoRepository")
 * @ORM\HasLifecycleCallbacks
 * @ORM\Table(name="estudiante_documento", indexes={@ORM\Index(name="fk_estudiante_documento_requisito_inscripcion1_idx", columns={"requisito_inscripcion_id"}), @ORM\Index(name="fk_estudiante_documento_persona1_idx", columns={"persona_id"})}, uniqueConstraints={@ORM\UniqueConstraint(name="id_estudiante_documento_unique_UNIQUE", columns={"id"})})
 */
class EstudianteDocumento
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="IDENTITY")
     * @ORM\SequenceGenerator(sequenceName="estudiante_documento_id_seq", allocationSize=1, initialValue=1)
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=200, nullable=true)
     */
    protected $ruta_documento;
    
    /**
     * @ORM\Column(type="boolean", nullable=false)
     */
    protected $estatus = false;
    
    /**
     * @Assert\NotNull(message= "Por favor cargue un Documento", groups={"Default"})
     * @Assert\NotBlank( message= "Por favor cargue un Documento", groups={"Default"})
     * @Assert\File(
     *     maxSize = "1024k",
     *     mimeTypes = {
     *      "image/png",
     *      "image/jpeg",
     *      "image/jpg",
     *      "application/pdf",
     *      "application/x-pdf"},
     *     mimeTypesMessage = "Por favor cargue un archivo valido (pdf,jpg,png)"
     * )
     */
    private $file;
    
    private $temp;

    /**
     * @ORM\OneToMany(targetEntity="ExpedienteDocumento", mappedBy="estudianteDocumento")
     * @ORM\JoinColumn(name="id", referencedColumnName="estudiante_documento_id", nullable=false)
     */
    protected $expedienteDocumentos;

    /**
     * @ORM\ManyToOne(targetEntity="RequisitoInscripcion", inversedBy="estudianteDocumentos")
     * @ORM\JoinColumn(name="requisito_inscripcion_id", referencedColumnName="id", nullable=false)
     * @Assert\Valid
     */
    protected $requisitoInscripcion;

    /**
     * @ORM\ManyToOne(targetEntity="Persona", inversedBy="estudianteDocumentos")
     * @ORM\JoinColumn(name="persona_id", referencedColumnName="id", nullable=false)
     */
    protected $persona;

    public function __construct()
    {
        $this->expedienteDocumentos = new ArrayCollection();
    }

    public function __sleep()
    {
        return array('id', 'ruta_documento', 'requisito_inscripcion_id', 'persona_id');
    }

    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set ruta_documento
     *
     * @param string $rutaDocumento
     * @return EstudianteDocumento
     */
    public function setRutaDocumento($rutaDocumento)
    {
        $this->ruta_documento = $rutaDocumento;

        return $this;
    }

    /**
     * Get ruta_documento
     *
     * @return string 
     */
    public function getRutaDocumento()
    {
        return $this->ruta_documento;
    }

    /**
     * Add expedienteDocumentos
     *
     * @param \UBV\SurUbvBundle\Entity\ExpedienteDocumento $expedienteDocumentos
     * @return EstudianteDocumento
     */
    public function addExpedienteDocumento(\UBV\SurUbvBundle\Entity\ExpedienteDocumento $expedienteDocumentos)
    {
        $this->expedienteDocumentos[] = $expedienteDocumentos;

        return $this;
    }

    /**
     * Remove expedienteDocumentos
     *
     * @param \UBV\SurUbvBundle\Entity\ExpedienteDocumento $expedienteDocumentos
     */
    public function removeExpedienteDocumento(\UBV\SurUbvBundle\Entity\ExpedienteDocumento $expedienteDocumentos)
    {
        $this->expedienteDocumentos->removeElement($expedienteDocumentos);
    }

    /**
     * Get expedienteDocumentos
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getExpedienteDocumentos()
    {
        return $this->expedienteDocumentos;
    }

    /**
     * Set requisitoInscripcion
     *
     * @param \UBV\SurUbvBundle\Entity\RequisitoInscripcion $requisitoInscripcion
     * @return EstudianteDocumento
     */
    public function setRequisitoInscripcion(\UBV\SurUbvBundle\Entity\RequisitoInscripcion $requisitoInscripcion)
    {
        $this->requisitoInscripcion = $requisitoInscripcion;

        return $this;
    }

    /**
     * Get requisitoInscripcion
     *
     * @return \UBV\SurUbvBundle\Entity\RequisitoInscripcion 
     */
    public function getRequisitoInscripcion()
    {
        return $this->requisitoInscripcion;
    }

    /**
     * Set persona
     *
     * @param \UBV\SurUbvBundle\Entity\Persona $persona
     * @return EstudianteDocumento
     */
    public function setPersona(\UBV\SurUbvBundle\Entity\Persona $persona)
    {
        $this->persona = $persona;

        return $this;
    }

    /**
     * Get persona
     *
     * @return \UBV\SurUbvBundle\Entity\Persona 
     */
    public function getPersona()
    {
        return $this->persona;
    }
    
    /**
     * Sets file.
     *
     * @param UploadedFile $file
     */
    public function setFile(UploadedFile $file = null) {
      $this->file = $file;
      
      // check if we have an old image path
      if (isset($this->ruta_documento)) {
        // store the old name to delete after the update
        $this->temp = $this->ruta_documento;
        $this->ruta_documento = null;
      } else {
        $this->ruta_documento = 'initial';
      }
    }

    /**
     * Get file.
     *
     * @return UploadedFile
     */
    public function getFile() {
      return $this->file;
    }

    public function getAbsolutePath() {
      return null === $this->ruta_documento ? null : $this->getUploadRootDir() . '/' . $this->ruta_documento;
    }

    public function getWebPath() {
      return null === $this->ruta_documento ? null : $this->getUploadDir() . '/' . $this->ruta_documento;
    }

    protected function getUploadRootDir() {
    // la ruta absoluta del directorio donde se deben
    // guardar los archivos cargados
      return __DIR__ . '/../../../../web/' . $this->getUploadDir();
    }

    protected function getUploadDir() {
      // se deshace del __DIR__ para no meter la pata
      // al mostrar el documento/imagen cargada en la vista.
      
      return 'uploads/Documentos/'.$persona = $this->getPersona()->getId().'/Estudiante';
    }

    /**
     * @ORM\PrePersist()
     * @ORM\PreUpdate()
     */
    public function preUpload() {
      if (null !== $this->getFile()) {
        
        // haz lo que quieras para generar un nombre único
        //$filename = sha1(uniqid(mt_rand(), true));
        
        if($this->getRequisitoInscripcion() === "Propuesta de Investigación"){
          $filename = $this->getFile()->getClientOriginalName();
        }else{
          $filename = $this->getRequisitoInscripcion();
        }
        
        //$filename = md5(uniqid());

        $existe = file_exists($this->getUploadDir() . "/" . $filename . "." . $this->getFile()->guessExtension());


        if ($existe == true) {
          //die("esxiste");
          $this->ruta_documento = $filename . '_' . sha1(uniqid(mt_rand(), true)) . '.' . $this->getFile()->guessExtension();
        } else {
          $this->ruta_documento = $filename . '.' . $this->getFile()->guessExtension();
        }
      }
    }

    /**
     * @ORM\PostPersist()
     * @ORM\PostUpdate()
     */
    public function upload() {
      // the file property can be empty if the field is not required
      if (null === $this->getFile()) {
        return;
      }

      // si hay un error al mover el archivo, move() automáticamente
      // envía una excepción. This will properly prevent
      // the entity from being persisted to the database on error
      $this->getFile()->move($this->getUploadRootDir(), $this->ruta_documento);

      // check if we have an old image
      if (isset($this->temp)) {
        // delete the old image
        unlink($this->getUploadRootDir() . '/' . $this->temp);
        // clear the temp image path
        $this->temp = null;
      }
      $this->file = null;
    }

    /**
     * @ORM\PostRemove()
     */
    public function removeUpload() {
      if ($file = $this->getAbsolutePath()) {
        unlink($file);
      }
    }


    /**
     * Set estatus
     *
     * @param boolean $estatus
     * @return EstudianteDocumento
     */
    public function setEstatus($estatus)
    {
        $this->estatus = $estatus;

        return $this;
    }

    /**
     * Get estatus
     *
     * @return boolean 
     */
    public function getEstatus()
    {
        return $this->estatus;
    }
}