Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Validación compleja de un formulario (validar un rango de fecha)

18 de mayo de 2018

Hola comunidad, buenas noches.

Estoy trabajando en un proyecto que administra propiedades (casas, departamentos, oficinas, etc). Tengo una entidad denominada "Alquileres" donde quedan registrados los alquileres que tuvo, tiene y que tendrá (en el caso de haberse registrado un alquiler a futuro) una propiedad. Es evidente que una de las restricciones fundamentales para la entidad "Alquileres" es que el rango de fecha (inicio de alquiler y fin de alquiler) no se superpongan, obviamente no puedo alquilar un inmueble a 2 personas distintas en una misma fecha.

Estoy trabado en este tema y no sé como implementarlo. Creo que debería hacerlo con @UniqueEntity... pero no tengo idea de como plantearlo.

Mi entidad tiene le siguiente código:

/**
 * Rent
 *
 * @ORM\Table(name="Rent")
 * @ORM\Entity(repositoryClass="MGI\EstateBundle\Entity\RentRepository")
 * @ORM\HasLifecycleCallbacks()
 * @Gedmo\SoftDeleteable(fieldName="deleted_at", timeAware=false)
 * UniqueEntity("name")
 * 
 * @author GonzaLo (04/03/2018)
 */
class Rent extends EntityPattern {
 
    ...
 
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="start_at", type="datetime", nullable=false)
     * @Assert\DateTime()
     * @Assert\NotNull()
     */
    private $start_at;
 
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="end_at", type="datetime", nullable=false)
     * @Assert\DateTime()
     */
    private $end_at;
 
    /**
     * @var decimal
     *
     * @ORM\Column(name="price", type="decimal", scale=2, nullable=false)
     * @Assert\NotNull()
     * @Assert\Range(min=0,max=999999.99)
     */
    private $price;
 
    /**
     *
     * @ORM\ManyToOne(targetEntity="MGI\EstateBundle\Entity\RentType")
     * @ORM\JoinColumn(name="rent_type_id", referencedColumnName="id")
     * @Assert\Type("MGI\EstateBundle\Entity\RentType")
     * 
     * Assert\NotNull()
     */
    private $rent_type;
 
    /**
     * 
     * @ORM\ManyToOne(targetEntity="MGI\EstateBundle\Entity\Property", inversedBy="rent")
     * @ORM\JoinColumn(name="property_id", referencedColumnName="id")
     * @Assert\NotNull()
     * @Assert\Type("MGI\EstateBundle\Entity\Property")
     */
    private $property;
 
    /**
     * 
     * @ORM\ManyToOne(targetEntity="MSG\PersonBundle\Entity\Person")
     * @ORM\JoinColumn(name="renter_id", referencedColumnName="id")
     * @Assert\Type("MSG\PersonBundle\Entity\Person")
     */
    private $renter;
 
    ...

Nota: Solo copié la parte que creo que es relevante de mi entidad.