Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace App\Forms;
- use App\Model\CouponsRepository;
- use App\Model\OrderItemsRepository;
- use App\Model\Entity\Coupon;
- use \Nette\Utils\DateTime;
- use Nette\Application\UI;
- class CouponForm extends BaseFormControl
- {
- /**
- * @var \App\Model\CouponsRepository
- * @inject
- */
- public $couponsRepository;
- /** @var \App\Model\Entity\Coupon */
- private $coupon = null;
- public function __construct(\App\Model\Entity\Coupon $coupon = NULL)
- {
- $this->coupon = $coupon;
- }
- public function render()
- {
- $template = $this->template;
- $template->coupon = $this->coupon;
- parent::render();
- }
- /**
- * @return UI\Form
- */
- protected function createComponentCoupon($name)
- {
- $form = parent::createComponentForm();
- $form->addDateInput('validityTo', 'order.coupon.validityTo')
- ->setDefaultValue($this->coupon ? $this->coupon->validityTo : new \DateTime)
- ->setOption('maxYear', date('Y') + 1)
- ->setRequired();
- $form->addSelect('type', 'order.coupon.type.name', CouponsRepository::$type)
- ->setPrompt('order.coupon.type.prompt')
- ->setDefaultValue($this->coupon ? $this->coupon->type : Coupon::TYPE_PERCENTAGE)
- ->setRequired();
- $form->addSelect('materialDiscount', 'order.coupon.materialDiscount.name', OrderItemsRepository::$type)
- ->setPrompt('order.coupon.materialDiscount.prompt')
- ->setDefaultValue($this->coupon ? $this->coupon->materialDiscount : null);
- $form->addCheckbox('unlimitedCount', 'order.coupon.unlimitedCount')
- ->setDefaultValue($this->coupon ? $this->coupon->unlimitedCount : null);
- $form->addText('discount', 'order.coupon.discount')
- ->setDefaultValue($this->coupon ? $this->coupon->discount : null)
- ->setRequired('order.coupon.requiredDiscount');
- $form->addText('code', 'order.coupon.code')
- ->setDefaultValue($this->coupon ? $this->coupon->code : null);
- if ($this->coupon) {
- $form['code']->setRequired('order.coupon.codeRequired');
- }
- $form->addCheckbox('freeDelivery', 'order.coupon.freeDelivery')
- ->setDefaultValue(new DateTime() <= DateTime::from('31.12.2020') ? true : false);
- $form->addSubmit('save', 'forms.button.save');
- $form->onError[] = [$this, 'couponFormError'];
- $form->onValidate[] = [$this, 'couponFormValidate'];
- $form->onSuccess[] = [$this, 'couponFormSucceeded'];
- return $form;
- }
- /**
- * @param UI\Form $form
- * @return void
- */
- public function couponFormError(UI\Form $form)
- {
- $this->getPresenter()->postGet('this');
- $this->redrawControl('coupon');
- }
- /**
- * @param UI\Form $form
- * @return void
- */
- public function couponFormValidate(UI\Form $form, $values)
- {
- $coupon = $this->couponsRepository->getBy(['code' => $values->code]);
- if (($this->coupon && $coupon && $this->coupon->id != $coupon->id) || !$this->coupon && $coupon) {
- $form['code']->addError('order.coupon.duplicateCode');
- if ($this->isAjax()) {
- $this->redrawControl('coupon');
- }
- }
- }
- /**
- * @param UI\Form $form
- * @return void
- */
- public function couponFormSucceeded(UI\Form $form, $values)
- {
- if (!$this->coupon) {
- $this->couponsRepository->createCoupon(
- $values->validityTo,
- $values->discount,
- $values->type,
- $values->code,
- $values->unlimitedCount,
- $values->freeDelivery,
- $values->materialDiscount
- );
- } else {
- $this->couponsRepository->editCoupon($this->coupon, $values);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement