/** * @param BookingSchedule $value * @param ProviderAvailabilityConstraint $constraint * @throws Exception */ public function validate($value, Constraint $constraint) { foreach ($value->getPlace()->getBusinessHours() as $bh) { if ($bh->getId() == $value->getId()) { continue; } foreach (DayFlaggableHelper::getWeekdays() as $day) { $method = 'getDay' . $day; if ($value->{$method}() && $bh->{$method}()) { if ($value->getStartsAt() >= $bh->getStartsAt() && $bh->getEndsAt() >= $value->getStartsAt()) { $this->context->buildViolation($constraint->openAtMessage)->setParameter('%openAt%', $value->getStartsAt()->format('H:i:s'))->setParameter('%startsAt%', $bh->getStartsAt()->format('H:i:s'))->setParameter('%endsAt%', $bh->getEndsAt()->format('H:i:s'))->setParameter('%day%', $day)->atPath('startsAt')->addViolation(); break; } if ($value->getEndsAt() >= $bh->getStartsAt() && $bh->getEndsAt() >= $value->getEndsAt()) { $this->context->buildViolation($constraint->closeAtMessage)->setParameter('%closeAt%', $value->getEndsAt()->format('H:i:s'))->setParameter('%startsAt%', $bh->getStartsAt()->format('H:i:s'))->setParameter('%endsAt%', $bh->getEndsAt()->format('H:i:s'))->setParameter('%day%', $day)->atPath('endsAt')->addViolation(); break; } } } } // return; // //die(); // var_dump('business hours validator' . $value->getId()) . '-';return; // if (!$value instanceof Booking) { // throw new Exception('bad entity'); // } // $start = $value->getStartsAt(); // $end = $value->getEndsAt(); // if ($start >= $end) { // $this->context->addViolationAt('endsAt', $constraint->endsMessage); // } // if($value->getChangedHours() >= $value->getInitialHours() && $value->getChangedHoursReason()){ // $this->context->addViolationAt('changedHourseReason', $constraint->deniedChangedHoursReasonMessage); // } // // new booking rules // if (!$value->getId()){ // if($start < new \DateTime()) { // $this->context->addViolationAt('startsAt', $constraint->dateOldMessage); // } // $h = Constants::BOOKING_MIN_HOURS_IN_ADVANCE; // if($start < new \DateTime(sprintf('+%d hours', $h))){ // $this->context->addViolationAt('startsAt', $constraint->dateMinHoursInAdvance, ['%hours%' => $h]); // } // if ($book = $this->validateProvider($value)) { // $this->context->addViolation( // $constraint->busyMessage, // [ // '%provider%' => $value->getProvider(), // '%from%' => $book->getStartsAt()->format('d M Y H:i'), // '%to%' => $book->getEndsAt()->format('d M Y H:i') // ] // ); // } // } }
/** * @param BookingSchedule $value * @param ProviderAvailabilityConstraint $constraint * @throws Exception */ public function validate($value, Constraint $constraint) { foreach ($value->getPlace()->getBusinessHoursException() as $bhE) { if ($bhE->getId() == $value->getId()) { continue; } //foreach (DayFlaggableHelper::getWeekdays() as $day){ //$method = 'getDay' . $day; if ($value->getDay() == $bhE->getDay()) { if ($value->getStartsAt() >= $bhE->getStartsAt() && $bhE->getEndsAt() >= $value->getStartsAt()) { $this->context->buildViolation($constraint->openAtMessage)->setParameter('%openAt%', $value->getStartsAt()->format('H:i:s'))->setParameter('%startsAt%', $bhE->getStartsAt()->format('H:i:s'))->setParameter('%endsAt%', $bhE->getEndsAt()->format('H:i:s'))->setParameter('%day%', $value->getDay()->format('Y-m-d'))->atPath('startsAt')->addViolation(); break; } if ($value->getEndsAt() >= $bhE->getStartsAt() && $bhE->getEndsAt() >= $value->getEndsAt()) { $this->context->buildViolation($constraint->closeAtMessage)->setParameter('%closeAt%', $value->getEndsAt()->format('H:i:s'))->setParameter('%startsAt%', $bhE->getStartsAt()->format('H:i:s'))->setParameter('%endsAt%', $bhE->getEndsAt()->format('H:i:s'))->setParameter('%day%', $value->getDay()->format('Y-m-d'))->atPath('endsAt')->addViolation(); break; } } } }