From 341a128602506bc98430bdfa20ecceceb5aad4cf Mon Sep 17 00:00:00 2001 From: Andi Nitsche Date: Wed, 1 Mar 2017 18:05:02 +0100 Subject: [PATCH] fixed age change; fixed shopping cart reset after purchase --- module/ErsBase/Module.php | 13 +++++ .../src/ErsBase/Service/AgegroupService.php | 28 ++++++++- .../src/ErsBase/Service/DeadlineService.php | 40 ++++++++++++- .../src/ErsBase/Service/OrderService.php | 58 +++++++++++++++++-- .../src/PreReg/Controller/OrderController.php | 6 +- .../Controller/ParticipantController.php | 4 ++ module/PreReg/view/pre-reg/info/terms.phtml | 2 + 7 files changed, 142 insertions(+), 9 deletions(-) diff --git a/module/ErsBase/Module.php b/module/ErsBase/Module.php index 32af9e87..bebe55dc 100644 --- a/module/ErsBase/Module.php +++ b/module/ErsBase/Module.php @@ -97,8 +97,15 @@ public function getServiceConfig() { $service->setServiceLocator($sm); return $service; }, + 'ErsBase\Service\AgegroupService' => function($sm) { + $agegroupService = new Service\AgegroupService(); + $agegroupService->setServiceLocator($sm); + + return $agegroupService; + }, 'ErsBase\Service\AgegroupService:price' => function($sm) { $agegroupService = new Service\AgegroupService(); + $agegroupService->setServiceLocator($sm); $em = $sm->get('Doctrine\ORM\EntityManager'); $agegroups = $em->getRepository('ErsBase\Entity\Agegroup') ->findBy(array('price_change' => '1')); @@ -115,6 +122,12 @@ public function getServiceConfig() { return $agegroupService; }, + 'ErsBase\Service\DeadlineService' => function($sm) { + $deadlineService = new Service\DeadlineService(); + $deadlineService->setServiceLocator($sm); + + return $deadlineService; + }, 'ErsBase\Service\DeadlineService:price' => function($sm) { $deadlineService = new Service\DeadlineService(); $em = $sm->get('Doctrine\ORM\EntityManager'); diff --git a/module/ErsBase/src/ErsBase/Service/AgegroupService.php b/module/ErsBase/src/ErsBase/Service/AgegroupService.php index 3edd9624..924ed542 100644 --- a/module/ErsBase/src/ErsBase/Service/AgegroupService.php +++ b/module/ErsBase/src/ErsBase/Service/AgegroupService.php @@ -13,6 +13,7 @@ class AgegroupService { protected $agegroups; + protected $mode = ''; protected $sm; public function __construct() { @@ -26,11 +27,36 @@ public function getServiceLocator() { return $this->sm; } + public function setMode($mode) { + $this->mode = $mode; + } + public function getMode() { + return $this->mode; + } + public function setAgegroups($agegroups) { $this->agegroups = $agegroups; } public function getAgegroups() { + if(count($this->agegroups) <= 0) { + $em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager'); + $criteria = array(); + switch($this->getMode()) { + case 'price': + $criteria['price_change'] = 1; + break; + case 'ticket': + $criteria['ticket_change'] = 1; + break; + default: + throw new \Exception('Please set a mode for Agegroup Service: price or ticket'); + break; + } + $agegroups = $em->getRepository('ErsBase\Entity\Agegroup') + ->findBy($criteria); + $this->setAgegroups($agegroups); + } return $this->agegroups; } @@ -51,7 +77,7 @@ public function getAgegroupByDate(\DateTime $date = null) { if($date == null) { return $ret; } - foreach($this->agegroups as $agegroup) { + foreach($this->getAgegroups() as $agegroup) { if($date->getTimestamp() < $agegroup->getAgegroup()->getTimestamp()) { continue; } diff --git a/module/ErsBase/src/ErsBase/Service/DeadlineService.php b/module/ErsBase/src/ErsBase/Service/DeadlineService.php index 5786a07f..c075e919 100644 --- a/module/ErsBase/src/ErsBase/Service/DeadlineService.php +++ b/module/ErsBase/src/ErsBase/Service/DeadlineService.php @@ -14,12 +14,28 @@ class DeadlineService { protected $deadlines = array(); + protected $mode; + protected $sm; protected $compareDate; public function __construct() { $this->compareDate = new \DateTime; } + public function setServiceLocator($sm) { + $this->sm = $sm; + } + public function getServiceLocator() { + return $this->sm; + } + + public function setMode($mode) { + $this->mode = $mode; + } + public function getMode() { + return $this->mode; + } + public function setCompareDate(\DateTime $compareDate) { $this->compareDate = $compareDate; } @@ -32,10 +48,32 @@ public function setDeadlines($deadlines) { $this->deadlines = $deadlines; } + public function getDeadlines() { + if(count($this->deadlines) <= 0) { + $em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager'); + $criteria = array(); + switch($this->getMode()) { + case 'price': + $criteria['price_change'] = 1; + break; + case 'ticket': + $criteria['ticket_change'] = 1; + break; + default: + throw new \Exception('Please set a mode for Deadline Service: price or ticket'); + break; + } + $deadlines = $em->getRepository('ErsBase\Entity\Deadline') + ->findBy($criteria); + $this->setDeadlines($deadlines); + } + return $this->deadlines; + } + public function getDeadline() { $ret = null; $now = $this->getCompareDate(); - foreach($this->deadlines as $deadline) { + foreach($this->getDeadlines() as $deadline) { if($now->getTimestamp() > $deadline->getDeadline()->getTimestamp()) { continue; } diff --git a/module/ErsBase/src/ErsBase/Service/OrderService.php b/module/ErsBase/src/ErsBase/Service/OrderService.php index c1ef2078..8a1b4c0a 100644 --- a/module/ErsBase/src/ErsBase/Service/OrderService.php +++ b/module/ErsBase/src/ErsBase/Service/OrderService.php @@ -108,6 +108,53 @@ private function createNewOrder() { return $newOrder; } + public function updateShoppingCart() { + $em = $this->getServiceLocator() + ->get('Doctrine\ORM\EntityManager'); + + $debug = true; + $order = $this->getOrder(); + $currency = $order->getCurrency(); + foreach($order->getPackages() as $package) { + foreach($package->getItems() as $item) { + if($item->hasParentItems()) { + continue; + } + $product = $item->getProduct(); + $participant = $item->getPackage()->getParticipant(); + + $agegroupService = $this->getServiceLocator() + ->get('ErsBase\Service\AgegroupService'); + $agegroupService->setMode('price'); + $agegroup = $agegroupService->getAgegroupByUser($participant); + if($debug) { + if($agegroup != null) { + error_log('found agegroup: '.$agegroup->getName()); + } + } + + $deadlineService = $this->getServiceLocator() + ->get('ErsBase\Service\DeadlineService'); + $deadlineService->setMode('price'); + $deadline = $deadlineService->getDeadline($order->getCreated()); + if($debug) { + if($deadline != null) { + error_log('found deadline: '.$deadline->getName()); + } + } + + $price = $product->getProductPrice($agegroup, $deadline, $currency); + if($debug) { + error_log('price: '.$price->getCharge()); + } + $item->setPrice($price->getCharge()); + $em->persist($item); + } + } + $em->persist($order); + $em->flush(); + } + public function changeCurrency($paramCurrency) { $em = $this->getServiceLocator() ->get('Doctrine\ORM\EntityManager'); @@ -138,11 +185,13 @@ public function changeCurrency($paramCurrency) { $agegroupService = $this->getServiceLocator() ->get('ErsBase\Service\AgegroupService'); + $agegroupService->setMode('price'); $agegroup = $agegroupService->getAgegroupByUser($participant); #$agegroup = $participant->getAgegroup(); $deadlineService = $this->getServiceLocator() - ->get('ErsBase\Service\DeadlineService:price'); + ->get('ErsBase\Service\DeadlineService'); + $deadlineService->setMode('price'); $deadline = $deadlineService->getDeadline($order->getCreated()); $price = $product->getProductPrice($agegroup, $deadline, $currency); @@ -150,9 +199,9 @@ public function changeCurrency($paramCurrency) { error_log('price: '.$price->getCharge()); } $item->setPrice($price->getCharge()); - $em->flush($item); + #$em->persist($item); } - $em->flush($package); + #$em->persist($package); } $order->setCurrency($currency); if($debug) { @@ -161,7 +210,8 @@ public function changeCurrency($paramCurrency) { if($order->getPaymentType()) { $order->setPaymentType(null); } - $em->flush($order); + $em->persist($order); + $em->flush(); } return $this; diff --git a/module/PreReg/src/PreReg/Controller/OrderController.php b/module/PreReg/src/PreReg/Controller/OrderController.php index 908a43d3..15460d43 100644 --- a/module/PreReg/src/PreReg/Controller/OrderController.php +++ b/module/PreReg/src/PreReg/Controller/OrderController.php @@ -310,7 +310,7 @@ public function paymentAction() { ->findOneBy(array('id' => $data['paymenttype_id'])); if($paymenttype->getCurrency()->getShort() != $order->getCurrency()->getShort()) { - throw new \Exception('Unable to set this payment type for this order. Please chooser another payment type.'); + throw new \Exception('Unable to set this payment type for this order. Please choose another payment type.'); } $order->setPaymentType($paymenttype); @@ -466,9 +466,9 @@ public function checkoutAction() { $em->flush(); - #$container = new Container('ers'); + $container = new Container('ers'); $container->checkout = array(); - $container->order_id = $order->getId(); + unset($container->order_id); $container->init = 0; $emailService = $this->getServiceLocator() diff --git a/module/PreReg/src/PreReg/Controller/ParticipantController.php b/module/PreReg/src/PreReg/Controller/ParticipantController.php index e9d86967..d557b9e5 100644 --- a/module/PreReg/src/PreReg/Controller/ParticipantController.php +++ b/module/PreReg/src/PreReg/Controller/ParticipantController.php @@ -189,6 +189,10 @@ public function editAction() $em->persist($participant); $em->flush(); + $orderService = $this->getServiceLocator() + ->get('ErsBase\Service\OrderService'); + $orderService->updateShoppingCart(); + $breadcrumb = $breadcrumbService->get('participant'); return $this->redirect()->toRoute($breadcrumb->route, $breadcrumb->params, $breadcrumb->options); } else { diff --git a/module/PreReg/view/pre-reg/info/terms.phtml b/module/PreReg/view/pre-reg/info/terms.phtml index 26eba87b..bb382554 100644 --- a/module/PreReg/view/pre-reg/info/terms.phtml +++ b/module/PreReg/view/pre-reg/info/terms.phtml @@ -5,6 +5,8 @@ $this->headTitle($this->translate('Terms & Conditions'));

translate('Terms and Conditions'); ?>

+

ERS Terms: Terms-and-Conditions-ERS-EN-v5.pdf
+ ORGA Terms: Terms-and-Conditions-ORGA-EN-v4.pdf

Terms and Conditions ERS EN v5
Terms and Conditions ORGA EN v4*/ ?>

translate('Disclaimer'); ?>