public function buildForm(FormBuilderInterface $builder, array $options) { if (empty($this->announcement)) { throw new \LogicException('Advertisement has to be provided'); } $announcementId = $this->announcement->getId(); $builder->add('announcement', 'entity', array('query_builder' => function (EntityRepository $repository) use($announcementId) { return $repository->createQueryBuilder('an')->where('an.id = ?1')->setParameter(1, $announcementId); }, 'class' => 'Hyper\\AdsBundle\\Entity\\Advertisement', 'data' => $this->announcement, 'read_only' => true, 'label' => 'announcement', 'translation_domain' => 'HyperAdsBundle')); $builder->add('zone', 'entity', array('query_builder' => function (EntityRepository $repository) { return $repository->createQueryBuilder('z')->where('z.enabled = ?1')->setParameter(1, true); }, 'class' => 'Hyper\\AdsBundle\\Entity\\Zone', 'mapped' => false, 'label' => 'zone', 'translation_domain' => 'HyperAdsBundle')); $builder->add('payment_to', 'date', array('label' => 'pay.to', 'data' => $this->announcement->getExpireDate(), 'translation_domain' => 'HyperAdsBundle')); }
public function getPossibleDayPricesForAnnouncement(Advertisement $announcement) { $zonePrices = $this->getActiveZonesPrices(); $expireDate = $announcement->getExpireDate(); $toExpirationInterval = $expireDate->diff(new \DateTime()); $possiblePrices = array(); $percentageDiscount = $this->getPercentageDiscountForUser($announcement->getAdvertiser()); foreach ($zonePrices as $zoneId => $defaultPrice) { $calculatedPrice = ($defaultPrice - $defaultPrice * $percentageDiscount) * $toExpirationInterval->days; $possiblePrices[$zoneId] = $this->getRoundedPrice($calculatedPrice); } return $possiblePrices; }