/**
  * @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;
             }
         }
     }
 }