From 2165100ac7ecd154a7e62cd26d9fe3eb8a487722 Mon Sep 17 00:00:00 2001 From: TheCoreDev Date: Tue, 2 Feb 2021 11:01:58 +0100 Subject: [PATCH] Init des modules PaiementALivraison et LivraisonParSecteurs --- local/modules/Atos/Config/pathfile | 6 +- local/modules/Atos/bin/request | Bin local/modules/Atos/bin/response | Bin local/modules/DeliveryRound/Config/config.xml | 34 + local/modules/DeliveryRound/Config/insert.sql | 22 + local/modules/DeliveryRound/Config/module.xml | 26 + .../modules/DeliveryRound/Config/routing.xml | 23 + local/modules/DeliveryRound/Config/schema.xml | 16 + local/modules/DeliveryRound/Config/sqldb.map | 2 + local/modules/DeliveryRound/Config/thelia.sql | 24 + .../Controller/DeliveryRoundController.php | 181 +++ local/modules/DeliveryRound/DeliveryRound.php | 119 ++ .../EventListeners/SendEMail.php | 136 ++ .../Form/DeliveryRoundConfigForm.php | 36 + .../Form/DeliveryRoundDeleteForm.php | 32 + .../DeliveryRound/Form/DeliveryRoundForm.php | 77 + .../Form/DeliveryRoundUpdateForm.php | 46 + .../DeliveryRound/Hook/DeliveryRoundHook.php | 29 + .../I18n/backOffice/default/fr_FR.php | 13 + local/modules/DeliveryRound/I18n/en_US.php | 4 + local/modules/DeliveryRound/I18n/fr_FR.php | 12 + .../DeliveryRound/Loop/DeliveryRoundLoop.php | 118 ++ .../Model/Base/DeliveryRound.php | 1357 +++++++++++++++++ .../Model/Base/DeliveryRoundQuery.php | 513 +++++++ .../DeliveryRound/Model/DeliveryRound.php | 35 + .../Model/DeliveryRoundQuery.php | 21 + .../Model/Map/DeliveryRoundTableMap.php | 494 ++++++ local/modules/DeliveryRound/Readme.md | 64 + local/modules/DeliveryRound/composer.json | 11 + .../default/delivery-round-config.html | 234 +++ .../form/delivery-round-update-form.html | 66 + .../script/delivery-round-update-js.html | 21 + .../frontOffice/default/show-round-list.html | 9 + .../LivraisonParSecteurs/Config/thelia.sql | 99 ++ .../PaiementALivraison/Config/config.xml | 9 +- 35 files changed, 3884 insertions(+), 5 deletions(-) mode change 100644 => 100755 local/modules/Atos/bin/request mode change 100644 => 100755 local/modules/Atos/bin/response create mode 100644 local/modules/DeliveryRound/Config/config.xml create mode 100644 local/modules/DeliveryRound/Config/insert.sql create mode 100644 local/modules/DeliveryRound/Config/module.xml create mode 100644 local/modules/DeliveryRound/Config/routing.xml create mode 100644 local/modules/DeliveryRound/Config/schema.xml create mode 100644 local/modules/DeliveryRound/Config/sqldb.map create mode 100644 local/modules/DeliveryRound/Config/thelia.sql create mode 100644 local/modules/DeliveryRound/Controller/DeliveryRoundController.php create mode 100644 local/modules/DeliveryRound/DeliveryRound.php create mode 100644 local/modules/DeliveryRound/EventListeners/SendEMail.php create mode 100644 local/modules/DeliveryRound/Form/DeliveryRoundConfigForm.php create mode 100644 local/modules/DeliveryRound/Form/DeliveryRoundDeleteForm.php create mode 100644 local/modules/DeliveryRound/Form/DeliveryRoundForm.php create mode 100644 local/modules/DeliveryRound/Form/DeliveryRoundUpdateForm.php create mode 100644 local/modules/DeliveryRound/Hook/DeliveryRoundHook.php create mode 100644 local/modules/DeliveryRound/I18n/backOffice/default/fr_FR.php create mode 100644 local/modules/DeliveryRound/I18n/en_US.php create mode 100644 local/modules/DeliveryRound/I18n/fr_FR.php create mode 100644 local/modules/DeliveryRound/Loop/DeliveryRoundLoop.php create mode 100644 local/modules/DeliveryRound/Model/Base/DeliveryRound.php create mode 100644 local/modules/DeliveryRound/Model/Base/DeliveryRoundQuery.php create mode 100644 local/modules/DeliveryRound/Model/DeliveryRound.php create mode 100644 local/modules/DeliveryRound/Model/DeliveryRoundQuery.php create mode 100644 local/modules/DeliveryRound/Model/Map/DeliveryRoundTableMap.php create mode 100644 local/modules/DeliveryRound/Readme.md create mode 100644 local/modules/DeliveryRound/composer.json create mode 100644 local/modules/DeliveryRound/templates/backOffice/default/delivery-round-config.html create mode 100644 local/modules/DeliveryRound/templates/backOffice/default/form/delivery-round-update-form.html create mode 100644 local/modules/DeliveryRound/templates/backOffice/default/script/delivery-round-update-js.html create mode 100644 local/modules/DeliveryRound/templates/frontOffice/default/show-round-list.html create mode 100644 local/modules/LivraisonParSecteurs/Config/thelia.sql diff --git a/local/modules/Atos/Config/pathfile b/local/modules/Atos/Config/pathfile index f798bdc6..be7c2100 100644 --- a/local/modules/Atos/Config/pathfile +++ b/local/modules/Atos/Config/pathfile @@ -16,15 +16,15 @@ D_LOGO!/atos/logo/! # # certificat du commercant # -F_CERTIFICATE!/home/pala4545/public_html/web/local/modules/Atos/Config/certif! +F_CERTIFICATE!/Volumes/Dev/Sources/Clients/AuxBieauxLegumes/web/local/modules/Atos/Config/certif! # # fichier paramètre commercant # -F_PARAM!/home/pala4545/public_html/web/local/modules/Atos/Config/parmcom! +F_PARAM!/Volumes/Dev/Sources/Clients/AuxBieauxLegumes/web/local/modules/Atos/Config/parmcom! # # fichier des paramètres ATOS # -F_DEFAULT!/home/pala4545/public_html/web/local/modules/Atos/Config/parmcom.atos! +F_DEFAULT!/Volumes/Dev/Sources/Clients/AuxBieauxLegumes/web/local/modules/Atos/Config/parmcom.atos! # # -------------------------------------------------------------------------- # end of file diff --git a/local/modules/Atos/bin/request b/local/modules/Atos/bin/request old mode 100644 new mode 100755 diff --git a/local/modules/Atos/bin/response b/local/modules/Atos/bin/response old mode 100644 new mode 100755 diff --git a/local/modules/DeliveryRound/Config/config.xml b/local/modules/DeliveryRound/Config/config.xml new file mode 100644 index 00000000..08acad83 --- /dev/null +++ b/local/modules/DeliveryRound/Config/config.xml @@ -0,0 +1,34 @@ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + diff --git a/local/modules/DeliveryRound/Config/insert.sql b/local/modules/DeliveryRound/Config/insert.sql new file mode 100644 index 00000000..6687d93f --- /dev/null +++ b/local/modules/DeliveryRound/Config/insert.sql @@ -0,0 +1,22 @@ + +# This is a fix for InnoDB in MySQL >= 4.1.x +# It "suspends judgement" for fkey relationships until are tables are set. +SET FOREIGN_KEY_CHECKS = 0; + +-- --------------------------------------------------------------------- +-- delivery_round +-- --------------------------------------------------------------------- + +CREATE TABLE IF NOT EXISTS `delivery_round` +( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `zip_code` VARCHAR(20) NOT NULL, + `city` VARCHAR(255) NOT NULL, + `address` TEXT, + `day` TINYINT NOT NULL, + `delivery_period` TEXT, + PRIMARY KEY (`id`) +) ENGINE=InnoDB; + +# This restores the fkey checks, after having unset them earlier +SET FOREIGN_KEY_CHECKS = 1; diff --git a/local/modules/DeliveryRound/Config/module.xml b/local/modules/DeliveryRound/Config/module.xml new file mode 100644 index 00000000..0cfea810 --- /dev/null +++ b/local/modules/DeliveryRound/Config/module.xml @@ -0,0 +1,26 @@ + + + DeliveryRound\DeliveryRound + + Round management + + + Gestion des tournées + + + en_US + fr_FR + + 1.2.2 + + + Etienne Perriere + eperriere@openstudio.fr + + + delivery + 2.2.0 + beta + diff --git a/local/modules/DeliveryRound/Config/routing.xml b/local/modules/DeliveryRound/Config/routing.xml new file mode 100644 index 00000000..4f98be77 --- /dev/null +++ b/local/modules/DeliveryRound/Config/routing.xml @@ -0,0 +1,23 @@ + + + + + + DeliveryRound:DeliveryRound:configure + + + + DeliveryRound:DeliveryRound:addLocation + + + + DeliveryRound:DeliveryRound:delete + + + + DeliveryRound:DeliveryRound:update + + + diff --git a/local/modules/DeliveryRound/Config/schema.xml b/local/modules/DeliveryRound/Config/schema.xml new file mode 100644 index 00000000..5a5cf731 --- /dev/null +++ b/local/modules/DeliveryRound/Config/schema.xml @@ -0,0 +1,16 @@ + + + + + + + + + + +
+ + +
diff --git a/local/modules/DeliveryRound/Config/sqldb.map b/local/modules/DeliveryRound/Config/sqldb.map new file mode 100644 index 00000000..63a93baa --- /dev/null +++ b/local/modules/DeliveryRound/Config/sqldb.map @@ -0,0 +1,2 @@ +# Sqlfile -> Database map +thelia.sql=thelia diff --git a/local/modules/DeliveryRound/Config/thelia.sql b/local/modules/DeliveryRound/Config/thelia.sql new file mode 100644 index 00000000..32d042d6 --- /dev/null +++ b/local/modules/DeliveryRound/Config/thelia.sql @@ -0,0 +1,24 @@ + +# This is a fix for InnoDB in MySQL >= 4.1.x +# It "suspends judgement" for fkey relationships until are tables are set. +SET FOREIGN_KEY_CHECKS = 0; + +-- --------------------------------------------------------------------- +-- delivery_round +-- --------------------------------------------------------------------- + +DROP TABLE IF EXISTS `delivery_round`; + +CREATE TABLE `delivery_round` +( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `zip_code` VARCHAR(20) NOT NULL, + `city` VARCHAR(255) NOT NULL, + `address` TEXT, + `day` TINYINT NOT NULL, + `delivery_period` TEXT, + PRIMARY KEY (`id`) +) ENGINE=InnoDB; + +# This restores the fkey checks, after having unset them earlier +SET FOREIGN_KEY_CHECKS = 1; diff --git a/local/modules/DeliveryRound/Controller/DeliveryRoundController.php b/local/modules/DeliveryRound/Controller/DeliveryRoundController.php new file mode 100644 index 00000000..0f97cedc --- /dev/null +++ b/local/modules/DeliveryRound/Controller/DeliveryRoundController.php @@ -0,0 +1,181 @@ + + */ +class DeliveryRoundController extends BaseAdminController +{ + /** + * @return mixed|\Thelia\Core\HttpFoundation\Response + */ + public function configureAction() + { + if (null !== $response = $this->checkAuth([AdminResources::MODULE], ["DeliveryRound"], AccessManager::CREATE)) { + return $response; + } + + $form = $this->createForm('deliveryround_config_form'); + $error = null; + $ex = null; + + try { + $vForm = $this->validateForm($form); + + // Configure price + DeliveryRound::setConfigValue('price', $vForm->get('price')->getData()); + } catch (FormValidationException $ex) { + $error = $this->createStandardFormValidationErrorMessage($ex); + } catch (\Exception $ex) { + $error = $ex->getMessage(); + } + + if ($error !== null) { + $this->setupFormErrorContext( + $this->getTranslator()->trans("DeliveryRound configuration", [], DeliveryRound::DOMAIN_NAME), + $error, + $form, + $ex + ); + } + + return $this->render('module-configure', array('module_code' => 'DeliveryRound')); + } + + /** + * @return mixed|\Thelia\Core\HttpFoundation\Response + */ + public function addLocationAction() + { + if (null !== $response = $this->checkAuth([AdminResources::MODULE], ["DeliveryRound"], AccessManager::CREATE)) { + return $response; + } + + $form = $this->createForm('deliveryround_form'); + $error = null; + $ex = null; + + try { + $vForm = $this->validateForm($form); + + // Create new entry + (new DeliveryRoundModel()) + ->setZipCode($vForm->get('zipcode')->getData()) + ->setCity($vForm->get('city')->getData()) + ->setAddress($vForm->get('address')->getData()) + ->setDay($vForm->get('day')->getData()) + ->setDeliveryPeriod($vForm->get('delivery_period')->getData()) + ->save(); + } catch (FormValidationException $ex) { + $error = $this->createStandardFormValidationErrorMessage($ex); + } catch (\Exception $ex) { + $error = $ex->getMessage(); + } + + if ($error !== null) { + $this->setupFormErrorContext( + $this->getTranslator()->trans("DeliveryRound configuration", [], DeliveryRound::DOMAIN_NAME), + $error, + $form, + $ex + ); + } + + return $this->render('module-configure', array('module_code' => 'DeliveryRound')); + } + + /** + * @return mixed|\Thelia\Core\HttpFoundation\Response + */ + public function deleteAction() + { + if (null !== $response = $this->checkAuth([AdminResources::MODULE], ["DeliveryRound"], AccessManager::DELETE)) { + return $response; + } + + $form = $this->createForm('deliveryround_delete_form'); + $error = null; + $ex = null; + + try { + $vForm = $this->validateForm($form); + + // Remove entry + DeliveryRoundQuery::create()->filterById($vForm->get('id')->getData())->delete(); + } catch (FormValidationException $ex) { + $error = $this->createStandardFormValidationErrorMessage($ex); + } catch (\Exception $ex) { + $error = $ex->getMessage(); + } + + if ($error !== null) { + $this->setupFormErrorContext( + $this->getTranslator()->trans("DeliveryRound configuration", [], DeliveryRound::DOMAIN_NAME), + $error, + $form, + $ex + ); + } + + return $this->render('module-configure', array('module_code' => 'DeliveryRound')); + } + + /** + * @return mixed|\Thelia\Core\HttpFoundation\Response + */ + public function updateAction() + { + if (null !== $response = $this->checkAuth([AdminResources::MODULE], ["DeliveryRound"], AccessManager::UPDATE)) { + return $response; + } + + $con = Propel::getConnection(); + $con->beginTransaction(); + + $form = $this->createForm('deliveryround_update_form'); + $error = null; + $ex = null; + + try { + $vForm = $this->validateForm($form); + $data = $vForm->getData(); + + $model = DeliveryRoundQuery::create()->findOneById($data['id']); + + $model->fromArray($data, TableMap::TYPE_FIELDNAME); + $model->save(); + + $con->commit(); + } catch (FormValidationException $ex) { + $error = $this->createStandardFormValidationErrorMessage($ex); + $con->rollBack(); + } catch (\Exception $ex) { + $error = $ex->getMessage(); + $con->rollBack(); + } + + if ($error !== null) { + $this->setupFormErrorContext( + $this->getTranslator()->trans("DeliveryRound configuration", [], DeliveryRound::DOMAIN_NAME), + $error, + $form, + $ex + ); + } + + return $this->render('module-configure', array('module_code' => 'DeliveryRound')); + } +} diff --git a/local/modules/DeliveryRound/DeliveryRound.php b/local/modules/DeliveryRound/DeliveryRound.php new file mode 100644 index 00000000..8f49dd82 --- /dev/null +++ b/local/modules/DeliveryRound/DeliveryRound.php @@ -0,0 +1,119 @@ +getWrappedConnection()); + + $database->insertSql(null, array(__DIR__ . '/Config/insert.sql')); + + DeliveryRound::setConfigValue('price', 0); + } + + /** + * This method is called by the Delivery loop, to check if the current module has to be displayed to the customer. + * Override it to implements your delivery rules/ + * + * If you return true, the delivery method will de displayed to the customer + * If you return false, the delivery method will not be displayed + * + * @param Country $country the country to deliver to. + * + * @return boolean + */ + public function isValidDelivery(Country $country) + { + // Get current addressId + $currentAddressId = $this->getRequest()->request->get('address_id'); + + if (empty($currentAddressId)) { + if (null !== $customer = $this->getRequest()->getSession()->getCustomerUser()) { + $currentAddressId = AddressQuery::create() + ->filterByCustomer($customer) + ->filterByIsDefault(1) + ->select('ID') + ->findOne(); + } else { + return false; + } + } + + // Get delivered zipcodes + $deliveryRounds = DeliveryRoundQuery::create()->find(); + $deliveryRoundZipcode = []; + + /** @var \DeliveryRound\Model\DeliveryRound $deliveryRound */ + foreach ($deliveryRounds as $deliveryRound) { + $deliveryRoundZipcode[] = $deliveryRound->getZipCode(); + } + + // Check if the customer's current address is in delivered zipcodes + if (null !== AddressQuery::create()->filterByZipcode($deliveryRoundZipcode)->findOneById($currentAddressId)) { + return true; + } else { + return false; + } + } + + /** + * @param $request + * @return mixed + * @throws \Propel\Runtime\Exception\PropelException + */ + protected function getCurrentlySelectedAddress($request) + { + + + + return $currentAddressId; + } + + /** + * Calculate and return delivery price in the shop's default currency + * + * @param Country $country the country to deliver to. + * + * @return OrderPostage|float the delivery price + * @throws DeliveryException if the postage price cannot be calculated. + */ + public function getPostage(Country $country) + { + if (! $this->isValidDelivery($country)) { + throw new DeliveryException( + Translator::getInstance()->trans("This module cannot be used on the current cart.") + ); + } + + return $this->getConfigValue('price', 0); + } +} diff --git a/local/modules/DeliveryRound/EventListeners/SendEMail.php b/local/modules/DeliveryRound/EventListeners/SendEMail.php new file mode 100644 index 00000000..cc3da634 --- /dev/null +++ b/local/modules/DeliveryRound/EventListeners/SendEMail.php @@ -0,0 +1,136 @@ +. */ +/* */ +/*************************************************************************************/ + +namespace DeliveryRound\EventListeners; + +use DeliveryRound\DeliveryRound; +use Symfony\Component\EventDispatcher\EventSubscriberInterface; +use Thelia\Action\BaseAction; +use Thelia\Core\Event\Order\OrderEvent; +use Thelia\Core\Event\TheliaEvents; +use Thelia\Mailer\MailerFactory; +use Thelia\Core\Template\ParserInterface; +use Thelia\Model\ConfigQuery; +use Thelia\Model\MessageQuery; + +/** + * Class SendEMail + * @package DeliveryRound\EventListeners + * @author Etienne Perriere + */ +class SendEMail extends BaseAction implements EventSubscriberInterface +{ + /** + * @var MailerFactory + */ + protected $mailer; + /** + * @var ParserInterface + */ + protected $parser; + + public function __construct(ParserInterface $parser, MailerFactory $mailer) + { + $this->parser = $parser; + $this->mailer = $mailer; + } + + /** + * @return \Thelia\Mailer\MailerFactory + */ + public function getMailer() + { + return $this->mailer; + } + + /* + * @params OrderEvent $order + * Checks if order delivery module is DeliveryRound and if order new status is sent, send an email to the customer. + */ + public function update_status(OrderEvent $event) + { + if ($event->getOrder()->getDeliveryModuleId() === DeliveryRound::getModuleId()) { + if ($event->getOrder()->getStatusId() === DeliveryRound::STATUS_SENT) { + $contact_email = ConfigQuery::read('store_email'); + + if ($contact_email) { + $message = MessageQuery::create() + ->filterByName('order_confirmation_deliveryround') + ->findOne(); + + if (false === $message) { + throw new \Exception("Failed to load message 'order_confirmation_deliveryround'."); + } + + $order = $event->getOrder(); + $customer = $order->getCustomer(); + + $this->parser->assign('order_id', $order->getId()); + $this->parser->assign('order_ref', $order->getRef()); + $this->parser->assign('order_date', $order->getCreatedAt()); + $this->parser->assign('update_date', $order->getUpdatedAt()); + + $message + ->setLocale($order->getLang()->getLocale()); + + $instance = \Swift_Message::newInstance() + ->addTo($customer->getEmail(), $customer->getFirstname()." ".$customer->getLastname()) + ->addFrom($contact_email, ConfigQuery::read('store_name')) + ; + + // Build subject and body + $message->buildMessage($this->parser, $instance); + + $this->getMailer()->send($instance); + } + } + } + } + + /** + * Returns an array of event names this subscriber wants to listen to. + * + * The array keys are event names and the value can be: + * + * * The method name to call (priority defaults to 0) + * * An array composed of the method name to call and the priority + * * An array of arrays composed of the method names to call and respective + * priorities, or 0 if unset + * + * For instance: + * + * * array('eventName' => 'methodName') + * * array('eventName' => array('methodName', $priority)) + * * array('eventName' => array(array('methodName1', $priority), array('methodName2')) + * + * @return array The event names to listen to + * + * @api + */ + public static function getSubscribedEvents() + { + return array( + TheliaEvents::ORDER_UPDATE_STATUS => array("update_status", 128) + ); + } +} diff --git a/local/modules/DeliveryRound/Form/DeliveryRoundConfigForm.php b/local/modules/DeliveryRound/Form/DeliveryRoundConfigForm.php new file mode 100644 index 00000000..1a73d393 --- /dev/null +++ b/local/modules/DeliveryRound/Form/DeliveryRoundConfigForm.php @@ -0,0 +1,36 @@ + + */ +class DeliveryRoundConfigForm extends BaseForm +{ + protected function buildForm() + { + $this->formBuilder + ->add( + 'price', + 'number', + [ + 'constraints' => [new Constraints\NotBlank()], + 'required' => true, + 'label' => $this->translator->trans('Price', [], DeliveryRound::DOMAIN_NAME), + 'label_attr' => ['for' => 'price'], + 'data' => DeliveryRound::getConfigValue('price', 0) + ] + ); + } + + public function getName() + { + return 'deliveryround_config_form'; + } +} diff --git a/local/modules/DeliveryRound/Form/DeliveryRoundDeleteForm.php b/local/modules/DeliveryRound/Form/DeliveryRoundDeleteForm.php new file mode 100644 index 00000000..f9932144 --- /dev/null +++ b/local/modules/DeliveryRound/Form/DeliveryRoundDeleteForm.php @@ -0,0 +1,32 @@ + + */ +class DeliveryRoundDeleteForm extends BaseForm +{ + protected function buildForm() + { + $this->formBuilder + ->add( + 'id', + 'integer', + [ + 'constraints' => [new Constraints\NotBlank()], + 'required' => true, + ] + ); + } + + public function getName() + { + return 'deliveryround_delete_form'; + } +} diff --git a/local/modules/DeliveryRound/Form/DeliveryRoundForm.php b/local/modules/DeliveryRound/Form/DeliveryRoundForm.php new file mode 100644 index 00000000..1d19a8c3 --- /dev/null +++ b/local/modules/DeliveryRound/Form/DeliveryRoundForm.php @@ -0,0 +1,77 @@ + + */ +class DeliveryRoundForm extends BaseForm +{ + protected function buildForm() + { + $this->formBuilder + ->add( + 'zipcode', + 'text', + [ + 'constraints' => [new Constraints\NotBlank()], + 'required' => true, + 'label' => $this->translator->trans('ZipCode', [], DeliveryRound::DOMAIN_NAME), + 'label_attr' => ['for' => 'delivery-round-zipcode'], + ] + ) + ->add( + 'city', + 'text', + [ + 'constraints' => [new Constraints\NotBlank()], + 'required' => true, + 'label' => $this->translator->trans('City', [], DeliveryRound::DOMAIN_NAME), + 'label_attr' => ['for' => 'delivery-round-city'], + ] + ) + ->add( + 'address', + 'text', + [ + 'required' => false, + 'label' => $this->translator->trans('Address', [], DeliveryRound::DOMAIN_NAME), + 'label_attr' => ['for' => 'delivery-round-address'], + ] + ) + ->add( + 'day', + 'choice', + [ + 'choices' => DeliveryRoundTableMap::getValueSet(DeliveryRoundTableMap::DAY), + 'constraints' => [new Constraints\NotBlank()], + 'required' => true, + 'label' => $this->translator->trans('Day', [], DeliveryRound::DOMAIN_NAME), + 'label_attr' => ['for' => 'delivery-round-day'], + ] + ) + ->add( + 'delivery_period', + 'text', + [ + 'required' => false, + 'label' => $this->translator->trans('Delivery period', [], DeliveryRound::DOMAIN_NAME), + 'label_attr' => [ + 'for' => 'delivery-round-delivery_period' + ], + ] + ); + } + + public function getName() + { + return 'deliveryround_form'; + } +} diff --git a/local/modules/DeliveryRound/Form/DeliveryRoundUpdateForm.php b/local/modules/DeliveryRound/Form/DeliveryRoundUpdateForm.php new file mode 100644 index 00000000..c5528edf --- /dev/null +++ b/local/modules/DeliveryRound/Form/DeliveryRoundUpdateForm.php @@ -0,0 +1,46 @@ +formBuilder + ->add('id', 'integer', array( + "label" => $this->translator->trans("Id", [], DeliveryRound::DOMAIN_NAME), + "label_attr" => ["for" => "delivery-round-id"], + "required" => true, + "constraints" => [ + new NotBlank() + ], + "attr" => array() + )); + } + + /** + * @inheritDoc + */ + public function getName() + { + return "deliveryround_update_form"; + } +} diff --git a/local/modules/DeliveryRound/Hook/DeliveryRoundHook.php b/local/modules/DeliveryRound/Hook/DeliveryRoundHook.php new file mode 100644 index 00000000..1620a32c --- /dev/null +++ b/local/modules/DeliveryRound/Hook/DeliveryRoundHook.php @@ -0,0 +1,29 @@ + + */ +class DeliveryRoundHook extends BaseHook +{ + public function onModuleConfig(HookRenderEvent $event) + { + $event->add($this->render('delivery-round-config.html')); + } + + public function onModuleConfigJs(HookRenderEvent $event) + { + $event->add($this->render('script/delivery-round-update-js.html')); + } + + public function onOrderDeliveryExtra(HookRenderEvent $event) + { + $event->add($this->render('show-round-list.html')); + } +} \ No newline at end of file diff --git a/local/modules/DeliveryRound/I18n/backOffice/default/fr_FR.php b/local/modules/DeliveryRound/I18n/backOffice/default/fr_FR.php new file mode 100644 index 00000000..48009347 --- /dev/null +++ b/local/modules/DeliveryRound/I18n/backOffice/default/fr_FR.php @@ -0,0 +1,13 @@ + 'Adresse', + 'City' => 'Ville', + 'Day' => 'Jour', + 'Delivery period' => 'Heures de livraison', + 'Remove' => 'Supprimer', + 'Save' => 'Enregistrer', + 'ZipCode' => 'Code postal', + 'configure delivery round price' => 'Configurer le prix des tournées de livraison', + 'configure delivery rounds' => 'Configurer les tournées de livraison', +); diff --git a/local/modules/DeliveryRound/I18n/en_US.php b/local/modules/DeliveryRound/I18n/en_US.php new file mode 100644 index 00000000..0b4fa142 --- /dev/null +++ b/local/modules/DeliveryRound/I18n/en_US.php @@ -0,0 +1,4 @@ + 'The displayed english string', +); diff --git a/local/modules/DeliveryRound/I18n/fr_FR.php b/local/modules/DeliveryRound/I18n/fr_FR.php new file mode 100644 index 00000000..e561e4a1 --- /dev/null +++ b/local/modules/DeliveryRound/I18n/fr_FR.php @@ -0,0 +1,12 @@ + 'Adresse', + 'City' => 'Ville', + 'Day' => 'Jour', + 'Delivery period' => 'Heures de livraison', + 'DeliveryRound configuration' => 'Configuration de DeliveryRound', + 'Price' => 'Prix', + 'This module cannot be used on the current cart.' => 'Ce module ne peut être utilisé avec le panier actuel.', + 'ZipCode' => 'Code postal', +); diff --git a/local/modules/DeliveryRound/Loop/DeliveryRoundLoop.php b/local/modules/DeliveryRound/Loop/DeliveryRoundLoop.php new file mode 100644 index 00000000..0cc64bab --- /dev/null +++ b/local/modules/DeliveryRound/Loop/DeliveryRoundLoop.php @@ -0,0 +1,118 @@ + + */ +class DeliveryRoundLoop extends BaseLoop implements PropelSearchLoopInterface +{ + /** + * Definition of loop arguments + * + * @return \Thelia\Core\Template\Loop\Argument\ArgumentCollection + */ + protected function getArgDefinitions() + { + return new ArgumentCollection( + Argument::createIntListTypeArgument('id'), + Argument::createAnyListTypeArgument('zipcode'), + Argument::createAnyListTypeArgument('city'), + Argument::createEnumListTypeArgument('day', DeliveryRoundTableMap::getValueSet(DeliveryRoundTableMap::DAY)), + Argument::createEnumListTypeArgument('order', [ + 'day', + 'day-reverse', + 'city', + 'city-reverse', + 'zipcode', + 'zipcode-reverse' + ], 'day') + ); + } + + /** + * this method returns a Propel ModelCriteria + * + * @return \Propel\Runtime\ActiveQuery\ModelCriteria + */ + public function buildModelCriteria() + { + $search = DeliveryRoundQuery::create(); + + if ($this->getId() !== null) { + $search->filterById($this->getId(), Criteria::IN); + } + + if ($this->getZipcode() !== null) { + $search->filterByZipCode($this->getZipcode(), Criteria::IN); + } + if ($this->getCity() !== null) { + $search->filterByCity($this->getCity(), Criteria::IN); + } + + if ($this->getDay() !== null) { + $search->filterByDay($this->getDay(), Criteria::IN); + } + + foreach ($this->getOrder() as $order) { + switch ($order) { + case 'day': + $search->orderByDay(); + break; + case 'day-reverse': + $search->orderByDay(Criteria::DESC); + break; + case 'city': + $search->orderByCity(); + break; + case 'city-reverse': + $search->orderByCity(Criteria::DESC); + break; + case 'zipcode': + $search->orderByZipCode(); + break; + case 'zipcode-reverse': + $search->orderByZipCode(Criteria::DESC); + break; + } + } + + return $search; + } + + /** + * @param LoopResult $loopResult + * + * @return LoopResult + */ + public function parseResults(LoopResult $loopResult) + { + /** @var \DeliveryRound\Model\DeliveryRound $deliveryRound */ + foreach ($loopResult->getResultDataCollection() as $deliveryRound) { + $loopResultRow = new LoopResultRow($deliveryRound); + + $loopResultRow->set('ID', $deliveryRound->getId()); + $loopResultRow->set('ZIPCODE', $deliveryRound->getZipCode()); + $loopResultRow->set('CITY', $deliveryRound->getCity()); + $loopResultRow->set('ADDRESS', $deliveryRound->getAddress()); + $loopResultRow->set('DAY', $deliveryRound->getDay()); + $loopResultRow->set('DELIVERY_PERIOD', $deliveryRound->getDeliveryPeriod()); + + $loopResult->addRow($loopResultRow); + } + + return $loopResult; + } +} diff --git a/local/modules/DeliveryRound/Model/Base/DeliveryRound.php b/local/modules/DeliveryRound/Model/Base/DeliveryRound.php new file mode 100644 index 00000000..5243daf3 --- /dev/null +++ b/local/modules/DeliveryRound/Model/Base/DeliveryRound.php @@ -0,0 +1,1357 @@ +modifiedColumns; + } + + /** + * Has specified column been modified? + * + * @param string $col column fully qualified name (TableMap::TYPE_COLNAME), e.g. Book::AUTHOR_ID + * @return boolean True if $col has been modified. + */ + public function isColumnModified($col) + { + return $this->modifiedColumns && isset($this->modifiedColumns[$col]); + } + + /** + * Get the columns that have been modified in this object. + * @return array A unique list of the modified column names for this object. + */ + public function getModifiedColumns() + { + return $this->modifiedColumns ? array_keys($this->modifiedColumns) : []; + } + + /** + * Returns whether the object has ever been saved. This will + * be false, if the object was retrieved from storage or was created + * and then saved. + * + * @return boolean true, if the object has never been persisted. + */ + public function isNew() + { + return $this->new; + } + + /** + * Setter for the isNew attribute. This method will be called + * by Propel-generated children and objects. + * + * @param boolean $b the state of the object. + */ + public function setNew($b) + { + $this->new = (Boolean) $b; + } + + /** + * Whether this object has been deleted. + * @return boolean The deleted state of this object. + */ + public function isDeleted() + { + return $this->deleted; + } + + /** + * Specify whether this object has been deleted. + * @param boolean $b The deleted state of this object. + * @return void + */ + public function setDeleted($b) + { + $this->deleted = (Boolean) $b; + } + + /** + * Sets the modified state for the object to be false. + * @param string $col If supplied, only the specified column is reset. + * @return void + */ + public function resetModified($col = null) + { + if (null !== $col) { + if (isset($this->modifiedColumns[$col])) { + unset($this->modifiedColumns[$col]); + } + } else { + $this->modifiedColumns = array(); + } + } + + /** + * Compares this with another DeliveryRound instance. If + * obj is an instance of DeliveryRound, delegates to + * equals(DeliveryRound). Otherwise, returns false. + * + * @param mixed $obj The object to compare to. + * @return boolean Whether equal to the object specified. + */ + public function equals($obj) + { + $thisclazz = get_class($this); + if (!is_object($obj) || !($obj instanceof $thisclazz)) { + return false; + } + + if ($this === $obj) { + return true; + } + + if (null === $this->getPrimaryKey() + || null === $obj->getPrimaryKey()) { + return false; + } + + return $this->getPrimaryKey() === $obj->getPrimaryKey(); + } + + /** + * If the primary key is not null, return the hashcode of the + * primary key. Otherwise, return the hash code of the object. + * + * @return int Hashcode + */ + public function hashCode() + { + if (null !== $this->getPrimaryKey()) { + return crc32(serialize($this->getPrimaryKey())); + } + + return crc32(serialize(clone $this)); + } + + /** + * Get the associative array of the virtual columns in this object + * + * @return array + */ + public function getVirtualColumns() + { + return $this->virtualColumns; + } + + /** + * Checks the existence of a virtual column in this object + * + * @param string $name The virtual column name + * @return boolean + */ + public function hasVirtualColumn($name) + { + return array_key_exists($name, $this->virtualColumns); + } + + /** + * Get the value of a virtual column in this object + * + * @param string $name The virtual column name + * @return mixed + * + * @throws PropelException + */ + public function getVirtualColumn($name) + { + if (!$this->hasVirtualColumn($name)) { + throw new PropelException(sprintf('Cannot get value of inexistent virtual column %s.', $name)); + } + + return $this->virtualColumns[$name]; + } + + /** + * Set the value of a virtual column in this object + * + * @param string $name The virtual column name + * @param mixed $value The value to give to the virtual column + * + * @return DeliveryRound The current object, for fluid interface + */ + public function setVirtualColumn($name, $value) + { + $this->virtualColumns[$name] = $value; + + return $this; + } + + /** + * Logs a message using Propel::log(). + * + * @param string $msg + * @param int $priority One of the Propel::LOG_* logging levels + * @return boolean + */ + protected function log($msg, $priority = Propel::LOG_INFO) + { + return Propel::log(get_class($this) . ': ' . $msg, $priority); + } + + /** + * Populate the current object from a string, using a given parser format + * + * $book = new Book(); + * $book->importFrom('JSON', '{"Id":9012,"Title":"Don Juan","ISBN":"0140422161","Price":12.99,"PublisherId":1234,"AuthorId":5678}'); + * + * + * @param mixed $parser A AbstractParser instance, + * or a format name ('XML', 'YAML', 'JSON', 'CSV') + * @param string $data The source data to import from + * + * @return DeliveryRound The current object, for fluid interface + */ + public function importFrom($parser, $data) + { + if (!$parser instanceof AbstractParser) { + $parser = AbstractParser::getParser($parser); + } + + $this->fromArray($parser->toArray($data), TableMap::TYPE_PHPNAME); + + return $this; + } + + /** + * Export the current object properties to a string, using a given parser format + * + * $book = BookQuery::create()->findPk(9012); + * echo $book->exportTo('JSON'); + * => {"Id":9012,"Title":"Don Juan","ISBN":"0140422161","Price":12.99,"PublisherId":1234,"AuthorId":5678}'); + * + * + * @param mixed $parser A AbstractParser instance, or a format name ('XML', 'YAML', 'JSON', 'CSV') + * @param boolean $includeLazyLoadColumns (optional) Whether to include lazy load(ed) columns. Defaults to TRUE. + * @return string The exported data + */ + public function exportTo($parser, $includeLazyLoadColumns = true) + { + if (!$parser instanceof AbstractParser) { + $parser = AbstractParser::getParser($parser); + } + + return $parser->fromArray($this->toArray(TableMap::TYPE_PHPNAME, $includeLazyLoadColumns, array(), true)); + } + + /** + * Clean up internal collections prior to serializing + * Avoids recursive loops that turn into segmentation faults when serializing + */ + public function __sleep() + { + $this->clearAllReferences(); + + return array_keys(get_object_vars($this)); + } + + /** + * Get the [id] column value. + * + * @return int + */ + public function getId() + { + + return $this->id; + } + + /** + * Get the [zip_code] column value. + * + * @return string + */ + public function getZipCode() + { + + return $this->zip_code; + } + + /** + * Get the [city] column value. + * + * @return string + */ + public function getCity() + { + + return $this->city; + } + + /** + * Get the [address] column value. + * + * @return string + */ + public function getAddress() + { + + return $this->address; + } + + /** + * Get the [day] column value. + * + * @return int + */ + public function getDay() + { + if (null === $this->day) { + return null; + } + $valueSet = DeliveryRoundTableMap::getValueSet(DeliveryRoundTableMap::DAY); + if (!isset($valueSet[$this->day])) { + throw new PropelException('Unknown stored enum key: ' . $this->day); + } + + return $valueSet[$this->day]; + } + + /** + * Get the [delivery_period] column value. + * + * @return string + */ + public function getDeliveryPeriod() + { + + return $this->delivery_period; + } + + /** + * Set the value of [id] column. + * + * @param int $v new value + * @return \DeliveryRound\Model\DeliveryRound The current object (for fluent API support) + */ + public function setId($v) + { + if ($v !== null) { + $v = (int) $v; + } + + if ($this->id !== $v) { + $this->id = $v; + $this->modifiedColumns[DeliveryRoundTableMap::ID] = true; + } + + + return $this; + } // setId() + + /** + * Set the value of [zip_code] column. + * + * @param string $v new value + * @return \DeliveryRound\Model\DeliveryRound The current object (for fluent API support) + */ + public function setZipCode($v) + { + if ($v !== null) { + $v = (string) $v; + } + + if ($this->zip_code !== $v) { + $this->zip_code = $v; + $this->modifiedColumns[DeliveryRoundTableMap::ZIP_CODE] = true; + } + + + return $this; + } // setZipCode() + + /** + * Set the value of [city] column. + * + * @param string $v new value + * @return \DeliveryRound\Model\DeliveryRound The current object (for fluent API support) + */ + public function setCity($v) + { + if ($v !== null) { + $v = (string) $v; + } + + if ($this->city !== $v) { + $this->city = $v; + $this->modifiedColumns[DeliveryRoundTableMap::CITY] = true; + } + + + return $this; + } // setCity() + + /** + * Set the value of [address] column. + * + * @param string $v new value + * @return \DeliveryRound\Model\DeliveryRound The current object (for fluent API support) + */ + public function setAddress($v) + { + if ($v !== null) { + $v = (string) $v; + } + + if ($this->address !== $v) { + $this->address = $v; + $this->modifiedColumns[DeliveryRoundTableMap::ADDRESS] = true; + } + + + return $this; + } // setAddress() + + /** + * Set the value of [day] column. + * + * @param int $v new value + * @return \DeliveryRound\Model\DeliveryRound The current object (for fluent API support) + */ + public function setDay($v) + { + if ($v !== null) { + $valueSet = DeliveryRoundTableMap::getValueSet(DeliveryRoundTableMap::DAY); + if (!in_array($v, $valueSet)) { + throw new PropelException(sprintf('Value "%s" is not accepted in this enumerated column', $v)); + } + $v = array_search($v, $valueSet); + } + + if ($this->day !== $v) { + $this->day = $v; + $this->modifiedColumns[DeliveryRoundTableMap::DAY] = true; + } + + + return $this; + } // setDay() + + /** + * Set the value of [delivery_period] column. + * + * @param string $v new value + * @return \DeliveryRound\Model\DeliveryRound The current object (for fluent API support) + */ + public function setDeliveryPeriod($v) + { + if ($v !== null) { + $v = (string) $v; + } + + if ($this->delivery_period !== $v) { + $this->delivery_period = $v; + $this->modifiedColumns[DeliveryRoundTableMap::DELIVERY_PERIOD] = true; + } + + + return $this; + } // setDeliveryPeriod() + + /** + * Indicates whether the columns in this object are only set to default values. + * + * This method can be used in conjunction with isModified() to indicate whether an object is both + * modified _and_ has some values set which are non-default. + * + * @return boolean Whether the columns in this object are only been set with default values. + */ + public function hasOnlyDefaultValues() + { + // otherwise, everything was equal, so return TRUE + return true; + } // hasOnlyDefaultValues() + + /** + * Hydrates (populates) the object variables with values from the database resultset. + * + * An offset (0-based "start column") is specified so that objects can be hydrated + * with a subset of the columns in the resultset rows. This is needed, for example, + * for results of JOIN queries where the resultset row includes columns from two or + * more tables. + * + * @param array $row The row returned by DataFetcher->fetch(). + * @param int $startcol 0-based offset column which indicates which restultset column to start with. + * @param boolean $rehydrate Whether this object is being re-hydrated from the database. + * @param string $indexType The index type of $row. Mostly DataFetcher->getIndexType(). + One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME + * TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM. + * + * @return int next starting column + * @throws PropelException - Any caught Exception will be rewrapped as a PropelException. + */ + public function hydrate($row, $startcol = 0, $rehydrate = false, $indexType = TableMap::TYPE_NUM) + { + try { + + + $col = $row[TableMap::TYPE_NUM == $indexType ? 0 + $startcol : DeliveryRoundTableMap::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType)]; + $this->id = (null !== $col) ? (int) $col : null; + + $col = $row[TableMap::TYPE_NUM == $indexType ? 1 + $startcol : DeliveryRoundTableMap::translateFieldName('ZipCode', TableMap::TYPE_PHPNAME, $indexType)]; + $this->zip_code = (null !== $col) ? (string) $col : null; + + $col = $row[TableMap::TYPE_NUM == $indexType ? 2 + $startcol : DeliveryRoundTableMap::translateFieldName('City', TableMap::TYPE_PHPNAME, $indexType)]; + $this->city = (null !== $col) ? (string) $col : null; + + $col = $row[TableMap::TYPE_NUM == $indexType ? 3 + $startcol : DeliveryRoundTableMap::translateFieldName('Address', TableMap::TYPE_PHPNAME, $indexType)]; + $this->address = (null !== $col) ? (string) $col : null; + + $col = $row[TableMap::TYPE_NUM == $indexType ? 4 + $startcol : DeliveryRoundTableMap::translateFieldName('Day', TableMap::TYPE_PHPNAME, $indexType)]; + $this->day = (null !== $col) ? (int) $col : null; + + $col = $row[TableMap::TYPE_NUM == $indexType ? 5 + $startcol : DeliveryRoundTableMap::translateFieldName('DeliveryPeriod', TableMap::TYPE_PHPNAME, $indexType)]; + $this->delivery_period = (null !== $col) ? (string) $col : null; + $this->resetModified(); + + $this->setNew(false); + + if ($rehydrate) { + $this->ensureConsistency(); + } + + return $startcol + 6; // 6 = DeliveryRoundTableMap::NUM_HYDRATE_COLUMNS. + + } catch (Exception $e) { + throw new PropelException("Error populating \DeliveryRound\Model\DeliveryRound object", 0, $e); + } + } + + /** + * Checks and repairs the internal consistency of the object. + * + * This method is executed after an already-instantiated object is re-hydrated + * from the database. It exists to check any foreign keys to make sure that + * the objects related to the current object are correct based on foreign key. + * + * You can override this method in the stub class, but you should always invoke + * the base method from the overridden method (i.e. parent::ensureConsistency()), + * in case your model changes. + * + * @throws PropelException + */ + public function ensureConsistency() + { + } // ensureConsistency + + /** + * Reloads this object from datastore based on primary key and (optionally) resets all associated objects. + * + * This will only work if the object has been saved and has a valid primary key set. + * + * @param boolean $deep (optional) Whether to also de-associated any related objects. + * @param ConnectionInterface $con (optional) The ConnectionInterface connection to use. + * @return void + * @throws PropelException - if this object is deleted, unsaved or doesn't have pk match in db + */ + public function reload($deep = false, ConnectionInterface $con = null) + { + if ($this->isDeleted()) { + throw new PropelException("Cannot reload a deleted object."); + } + + if ($this->isNew()) { + throw new PropelException("Cannot reload an unsaved object."); + } + + if ($con === null) { + $con = Propel::getServiceContainer()->getReadConnection(DeliveryRoundTableMap::DATABASE_NAME); + } + + // We don't need to alter the object instance pool; we're just modifying this instance + // already in the pool. + + $dataFetcher = ChildDeliveryRoundQuery::create(null, $this->buildPkeyCriteria())->setFormatter(ModelCriteria::FORMAT_STATEMENT)->find($con); + $row = $dataFetcher->fetch(); + $dataFetcher->close(); + if (!$row) { + throw new PropelException('Cannot find matching row in the database to reload object values.'); + } + $this->hydrate($row, 0, true, $dataFetcher->getIndexType()); // rehydrate + + if ($deep) { // also de-associate any related objects? + + } // if (deep) + } + + /** + * Removes this object from datastore and sets delete attribute. + * + * @param ConnectionInterface $con + * @return void + * @throws PropelException + * @see DeliveryRound::setDeleted() + * @see DeliveryRound::isDeleted() + */ + public function delete(ConnectionInterface $con = null) + { + if ($this->isDeleted()) { + throw new PropelException("This object has already been deleted."); + } + + if ($con === null) { + $con = Propel::getServiceContainer()->getWriteConnection(DeliveryRoundTableMap::DATABASE_NAME); + } + + $con->beginTransaction(); + try { + $deleteQuery = ChildDeliveryRoundQuery::create() + ->filterByPrimaryKey($this->getPrimaryKey()); + $ret = $this->preDelete($con); + if ($ret) { + $deleteQuery->delete($con); + $this->postDelete($con); + $con->commit(); + $this->setDeleted(true); + } else { + $con->commit(); + } + } catch (Exception $e) { + $con->rollBack(); + throw $e; + } + } + + /** + * Persists this object to the database. + * + * If the object is new, it inserts it; otherwise an update is performed. + * All modified related objects will also be persisted in the doSave() + * method. This method wraps all precipitate database operations in a + * single transaction. + * + * @param ConnectionInterface $con + * @return int The number of rows affected by this insert/update and any referring fk objects' save() operations. + * @throws PropelException + * @see doSave() + */ + public function save(ConnectionInterface $con = null) + { + if ($this->isDeleted()) { + throw new PropelException("You cannot save an object that has been deleted."); + } + + if ($con === null) { + $con = Propel::getServiceContainer()->getWriteConnection(DeliveryRoundTableMap::DATABASE_NAME); + } + + $con->beginTransaction(); + $isInsert = $this->isNew(); + try { + $ret = $this->preSave($con); + if ($isInsert) { + $ret = $ret && $this->preInsert($con); + } else { + $ret = $ret && $this->preUpdate($con); + } + if ($ret) { + $affectedRows = $this->doSave($con); + if ($isInsert) { + $this->postInsert($con); + } else { + $this->postUpdate($con); + } + $this->postSave($con); + DeliveryRoundTableMap::addInstanceToPool($this); + } else { + $affectedRows = 0; + } + $con->commit(); + + return $affectedRows; + } catch (Exception $e) { + $con->rollBack(); + throw $e; + } + } + + /** + * Performs the work of inserting or updating the row in the database. + * + * If the object is new, it inserts it; otherwise an update is performed. + * All related objects are also updated in this method. + * + * @param ConnectionInterface $con + * @return int The number of rows affected by this insert/update and any referring fk objects' save() operations. + * @throws PropelException + * @see save() + */ + protected function doSave(ConnectionInterface $con) + { + $affectedRows = 0; // initialize var to track total num of affected rows + if (!$this->alreadyInSave) { + $this->alreadyInSave = true; + + if ($this->isNew() || $this->isModified()) { + // persist changes + if ($this->isNew()) { + $this->doInsert($con); + } else { + $this->doUpdate($con); + } + $affectedRows += 1; + $this->resetModified(); + } + + $this->alreadyInSave = false; + + } + + return $affectedRows; + } // doSave() + + /** + * Insert the row in the database. + * + * @param ConnectionInterface $con + * + * @throws PropelException + * @see doSave() + */ + protected function doInsert(ConnectionInterface $con) + { + $modifiedColumns = array(); + $index = 0; + + $this->modifiedColumns[DeliveryRoundTableMap::ID] = true; + if (null !== $this->id) { + throw new PropelException('Cannot insert a value for auto-increment primary key (' . DeliveryRoundTableMap::ID . ')'); + } + + // check the columns in natural order for more readable SQL queries + if ($this->isColumnModified(DeliveryRoundTableMap::ID)) { + $modifiedColumns[':p' . $index++] = 'ID'; + } + if ($this->isColumnModified(DeliveryRoundTableMap::ZIP_CODE)) { + $modifiedColumns[':p' . $index++] = 'ZIP_CODE'; + } + if ($this->isColumnModified(DeliveryRoundTableMap::CITY)) { + $modifiedColumns[':p' . $index++] = 'CITY'; + } + if ($this->isColumnModified(DeliveryRoundTableMap::ADDRESS)) { + $modifiedColumns[':p' . $index++] = 'ADDRESS'; + } + if ($this->isColumnModified(DeliveryRoundTableMap::DAY)) { + $modifiedColumns[':p' . $index++] = 'DAY'; + } + if ($this->isColumnModified(DeliveryRoundTableMap::DELIVERY_PERIOD)) { + $modifiedColumns[':p' . $index++] = 'DELIVERY_PERIOD'; + } + + $sql = sprintf( + 'INSERT INTO delivery_round (%s) VALUES (%s)', + implode(', ', $modifiedColumns), + implode(', ', array_keys($modifiedColumns)) + ); + + try { + $stmt = $con->prepare($sql); + foreach ($modifiedColumns as $identifier => $columnName) { + switch ($columnName) { + case 'ID': + $stmt->bindValue($identifier, $this->id, PDO::PARAM_INT); + break; + case 'ZIP_CODE': + $stmt->bindValue($identifier, $this->zip_code, PDO::PARAM_STR); + break; + case 'CITY': + $stmt->bindValue($identifier, $this->city, PDO::PARAM_STR); + break; + case 'ADDRESS': + $stmt->bindValue($identifier, $this->address, PDO::PARAM_STR); + break; + case 'DAY': + $stmt->bindValue($identifier, $this->day, PDO::PARAM_INT); + break; + case 'DELIVERY_PERIOD': + $stmt->bindValue($identifier, $this->delivery_period, PDO::PARAM_STR); + break; + } + } + $stmt->execute(); + } catch (Exception $e) { + Propel::log($e->getMessage(), Propel::LOG_ERR); + throw new PropelException(sprintf('Unable to execute INSERT statement [%s]', $sql), 0, $e); + } + + try { + $pk = $con->lastInsertId(); + } catch (Exception $e) { + throw new PropelException('Unable to get autoincrement id.', 0, $e); + } + $this->setId($pk); + + $this->setNew(false); + } + + /** + * Update the row in the database. + * + * @param ConnectionInterface $con + * + * @return Integer Number of updated rows + * @see doSave() + */ + protected function doUpdate(ConnectionInterface $con) + { + $selectCriteria = $this->buildPkeyCriteria(); + $valuesCriteria = $this->buildCriteria(); + + return $selectCriteria->doUpdate($valuesCriteria, $con); + } + + /** + * Retrieves a field from the object by name passed in as a string. + * + * @param string $name name + * @param string $type The type of fieldname the $name is of: + * one of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME + * TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM. + * Defaults to TableMap::TYPE_PHPNAME. + * @return mixed Value of field. + */ + public function getByName($name, $type = TableMap::TYPE_PHPNAME) + { + $pos = DeliveryRoundTableMap::translateFieldName($name, $type, TableMap::TYPE_NUM); + $field = $this->getByPosition($pos); + + return $field; + } + + /** + * Retrieves a field from the object by Position as specified in the xml schema. + * Zero-based. + * + * @param int $pos position in xml schema + * @return mixed Value of field at $pos + */ + public function getByPosition($pos) + { + switch ($pos) { + case 0: + return $this->getId(); + break; + case 1: + return $this->getZipCode(); + break; + case 2: + return $this->getCity(); + break; + case 3: + return $this->getAddress(); + break; + case 4: + return $this->getDay(); + break; + case 5: + return $this->getDeliveryPeriod(); + break; + default: + return null; + break; + } // switch() + } + + /** + * Exports the object as an array. + * + * You can specify the key type of the array by passing one of the class + * type constants. + * + * @param string $keyType (optional) One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME, + * TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM. + * Defaults to TableMap::TYPE_PHPNAME. + * @param boolean $includeLazyLoadColumns (optional) Whether to include lazy loaded columns. Defaults to TRUE. + * @param array $alreadyDumpedObjects List of objects to skip to avoid recursion + * + * @return array an associative array containing the field names (as keys) and field values + */ + public function toArray($keyType = TableMap::TYPE_PHPNAME, $includeLazyLoadColumns = true, $alreadyDumpedObjects = array()) + { + if (isset($alreadyDumpedObjects['DeliveryRound'][$this->getPrimaryKey()])) { + return '*RECURSION*'; + } + $alreadyDumpedObjects['DeliveryRound'][$this->getPrimaryKey()] = true; + $keys = DeliveryRoundTableMap::getFieldNames($keyType); + $result = array( + $keys[0] => $this->getId(), + $keys[1] => $this->getZipCode(), + $keys[2] => $this->getCity(), + $keys[3] => $this->getAddress(), + $keys[4] => $this->getDay(), + $keys[5] => $this->getDeliveryPeriod(), + ); + $virtualColumns = $this->virtualColumns; + foreach ($virtualColumns as $key => $virtualColumn) { + $result[$key] = $virtualColumn; + } + + + return $result; + } + + /** + * Sets a field from the object by name passed in as a string. + * + * @param string $name + * @param mixed $value field value + * @param string $type The type of fieldname the $name is of: + * one of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME + * TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM. + * Defaults to TableMap::TYPE_PHPNAME. + * @return void + */ + public function setByName($name, $value, $type = TableMap::TYPE_PHPNAME) + { + $pos = DeliveryRoundTableMap::translateFieldName($name, $type, TableMap::TYPE_NUM); + + return $this->setByPosition($pos, $value); + } + + /** + * Sets a field from the object by Position as specified in the xml schema. + * Zero-based. + * + * @param int $pos position in xml schema + * @param mixed $value field value + * @return void + */ + public function setByPosition($pos, $value) + { + switch ($pos) { + case 0: + $this->setId($value); + break; + case 1: + $this->setZipCode($value); + break; + case 2: + $this->setCity($value); + break; + case 3: + $this->setAddress($value); + break; + case 4: + $valueSet = DeliveryRoundTableMap::getValueSet(DeliveryRoundTableMap::DAY); + if (isset($valueSet[$value])) { + $value = $valueSet[$value]; + } + $this->setDay($value); + break; + case 5: + $this->setDeliveryPeriod($value); + break; + } // switch() + } + + /** + * Populates the object using an array. + * + * This is particularly useful when populating an object from one of the + * request arrays (e.g. $_POST). This method goes through the column + * names, checking to see whether a matching key exists in populated + * array. If so the setByName() method is called for that column. + * + * You can specify the key type of the array by additionally passing one + * of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME, + * TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM. + * The default key type is the column's TableMap::TYPE_PHPNAME. + * + * @param array $arr An array to populate the object from. + * @param string $keyType The type of keys the array uses. + * @return void + */ + public function fromArray($arr, $keyType = TableMap::TYPE_PHPNAME) + { + $keys = DeliveryRoundTableMap::getFieldNames($keyType); + + if (array_key_exists($keys[0], $arr)) $this->setId($arr[$keys[0]]); + if (array_key_exists($keys[1], $arr)) $this->setZipCode($arr[$keys[1]]); + if (array_key_exists($keys[2], $arr)) $this->setCity($arr[$keys[2]]); + if (array_key_exists($keys[3], $arr)) $this->setAddress($arr[$keys[3]]); + if (array_key_exists($keys[4], $arr)) $this->setDay($arr[$keys[4]]); + if (array_key_exists($keys[5], $arr)) $this->setDeliveryPeriod($arr[$keys[5]]); + } + + /** + * Build a Criteria object containing the values of all modified columns in this object. + * + * @return Criteria The Criteria object containing all modified values. + */ + public function buildCriteria() + { + $criteria = new Criteria(DeliveryRoundTableMap::DATABASE_NAME); + + if ($this->isColumnModified(DeliveryRoundTableMap::ID)) $criteria->add(DeliveryRoundTableMap::ID, $this->id); + if ($this->isColumnModified(DeliveryRoundTableMap::ZIP_CODE)) $criteria->add(DeliveryRoundTableMap::ZIP_CODE, $this->zip_code); + if ($this->isColumnModified(DeliveryRoundTableMap::CITY)) $criteria->add(DeliveryRoundTableMap::CITY, $this->city); + if ($this->isColumnModified(DeliveryRoundTableMap::ADDRESS)) $criteria->add(DeliveryRoundTableMap::ADDRESS, $this->address); + if ($this->isColumnModified(DeliveryRoundTableMap::DAY)) $criteria->add(DeliveryRoundTableMap::DAY, $this->day); + if ($this->isColumnModified(DeliveryRoundTableMap::DELIVERY_PERIOD)) $criteria->add(DeliveryRoundTableMap::DELIVERY_PERIOD, $this->delivery_period); + + return $criteria; + } + + /** + * Builds a Criteria object containing the primary key for this object. + * + * Unlike buildCriteria() this method includes the primary key values regardless + * of whether or not they have been modified. + * + * @return Criteria The Criteria object containing value(s) for primary key(s). + */ + public function buildPkeyCriteria() + { + $criteria = new Criteria(DeliveryRoundTableMap::DATABASE_NAME); + $criteria->add(DeliveryRoundTableMap::ID, $this->id); + + return $criteria; + } + + /** + * Returns the primary key for this object (row). + * @return int + */ + public function getPrimaryKey() + { + return $this->getId(); + } + + /** + * Generic method to set the primary key (id column). + * + * @param int $key Primary key. + * @return void + */ + public function setPrimaryKey($key) + { + $this->setId($key); + } + + /** + * Returns true if the primary key for this object is null. + * @return boolean + */ + public function isPrimaryKeyNull() + { + + return null === $this->getId(); + } + + /** + * Sets contents of passed object to values from current object. + * + * If desired, this method can also make copies of all associated (fkey referrers) + * objects. + * + * @param object $copyObj An object of \DeliveryRound\Model\DeliveryRound (or compatible) type. + * @param boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row. + * @param boolean $makeNew Whether to reset autoincrement PKs and make the object new. + * @throws PropelException + */ + public function copyInto($copyObj, $deepCopy = false, $makeNew = true) + { + $copyObj->setZipCode($this->getZipCode()); + $copyObj->setCity($this->getCity()); + $copyObj->setAddress($this->getAddress()); + $copyObj->setDay($this->getDay()); + $copyObj->setDeliveryPeriod($this->getDeliveryPeriod()); + if ($makeNew) { + $copyObj->setNew(true); + $copyObj->setId(NULL); // this is a auto-increment column, so set to default value + } + } + + /** + * Makes a copy of this object that will be inserted as a new row in table when saved. + * It creates a new object filling in the simple attributes, but skipping any primary + * keys that are defined for the table. + * + * If desired, this method can also make copies of all associated (fkey referrers) + * objects. + * + * @param boolean $deepCopy Whether to also copy all rows that refer (by fkey) to the current row. + * @return \DeliveryRound\Model\DeliveryRound Clone of current object. + * @throws PropelException + */ + public function copy($deepCopy = false) + { + // we use get_class(), because this might be a subclass + $clazz = get_class($this); + $copyObj = new $clazz(); + $this->copyInto($copyObj, $deepCopy); + + return $copyObj; + } + + /** + * Clears the current object and sets all attributes to their default values + */ + public function clear() + { + $this->id = null; + $this->zip_code = null; + $this->city = null; + $this->address = null; + $this->day = null; + $this->delivery_period = null; + $this->alreadyInSave = false; + $this->clearAllReferences(); + $this->resetModified(); + $this->setNew(true); + $this->setDeleted(false); + } + + /** + * Resets all references to other model objects or collections of model objects. + * + * This method is a user-space workaround for PHP's inability to garbage collect + * objects with circular references (even in PHP 5.3). This is currently necessary + * when using Propel in certain daemon or large-volume/high-memory operations. + * + * @param boolean $deep Whether to also clear the references on all referrer objects. + */ + public function clearAllReferences($deep = false) + { + if ($deep) { + } // if ($deep) + + } + + /** + * Return the string representation of this object + * + * @return string + */ + public function __toString() + { + return (string) $this->exportTo(DeliveryRoundTableMap::DEFAULT_STRING_FORMAT); + } + + /** + * Code to be run before persisting the object + * @param ConnectionInterface $con + * @return boolean + */ + public function preSave(ConnectionInterface $con = null) + { + return true; + } + + /** + * Code to be run after persisting the object + * @param ConnectionInterface $con + */ + public function postSave(ConnectionInterface $con = null) + { + + } + + /** + * Code to be run before inserting to database + * @param ConnectionInterface $con + * @return boolean + */ + public function preInsert(ConnectionInterface $con = null) + { + return true; + } + + /** + * Code to be run after inserting to database + * @param ConnectionInterface $con + */ + public function postInsert(ConnectionInterface $con = null) + { + + } + + /** + * Code to be run before updating the object in database + * @param ConnectionInterface $con + * @return boolean + */ + public function preUpdate(ConnectionInterface $con = null) + { + return true; + } + + /** + * Code to be run after updating the object in database + * @param ConnectionInterface $con + */ + public function postUpdate(ConnectionInterface $con = null) + { + + } + + /** + * Code to be run before deleting the object in database + * @param ConnectionInterface $con + * @return boolean + */ + public function preDelete(ConnectionInterface $con = null) + { + return true; + } + + /** + * Code to be run after deleting the object in database + * @param ConnectionInterface $con + */ + public function postDelete(ConnectionInterface $con = null) + { + + } + + + /** + * Derived method to catches calls to undefined methods. + * + * Provides magic import/export method support (fromXML()/toXML(), fromYAML()/toYAML(), etc.). + * Allows to define default __call() behavior if you overwrite __call() + * + * @param string $name + * @param mixed $params + * + * @return array|string + */ + public function __call($name, $params) + { + if (0 === strpos($name, 'get')) { + $virtualColumn = substr($name, 3); + if ($this->hasVirtualColumn($virtualColumn)) { + return $this->getVirtualColumn($virtualColumn); + } + + $virtualColumn = lcfirst($virtualColumn); + if ($this->hasVirtualColumn($virtualColumn)) { + return $this->getVirtualColumn($virtualColumn); + } + } + + if (0 === strpos($name, 'from')) { + $format = substr($name, 4); + + return $this->importFrom($format, reset($params)); + } + + if (0 === strpos($name, 'to')) { + $format = substr($name, 2); + $includeLazyLoadColumns = isset($params[0]) ? $params[0] : true; + + return $this->exportTo($format, $includeLazyLoadColumns); + } + + throw new BadMethodCallException(sprintf('Call to undefined method: %s.', $name)); + } + +} diff --git a/local/modules/DeliveryRound/Model/Base/DeliveryRoundQuery.php b/local/modules/DeliveryRound/Model/Base/DeliveryRoundQuery.php new file mode 100644 index 00000000..fd56b7cf --- /dev/null +++ b/local/modules/DeliveryRound/Model/Base/DeliveryRoundQuery.php @@ -0,0 +1,513 @@ +setModelAlias($modelAlias); + } + if ($criteria instanceof Criteria) { + $query->mergeWith($criteria); + } + + return $query; + } + + /** + * Find object by primary key. + * Propel uses the instance pool to skip the database if the object exists. + * Go fast if the query is untouched. + * + * + * $obj = $c->findPk(12, $con); + * + * + * @param mixed $key Primary key to use for the query + * @param ConnectionInterface $con an optional connection object + * + * @return ChildDeliveryRound|array|mixed the result, formatted by the current formatter + */ + public function findPk($key, $con = null) + { + if ($key === null) { + return null; + } + if ((null !== ($obj = DeliveryRoundTableMap::getInstanceFromPool((string) $key))) && !$this->formatter) { + // the object is already in the instance pool + return $obj; + } + if ($con === null) { + $con = Propel::getServiceContainer()->getReadConnection(DeliveryRoundTableMap::DATABASE_NAME); + } + $this->basePreSelect($con); + if ($this->formatter || $this->modelAlias || $this->with || $this->select + || $this->selectColumns || $this->asColumns || $this->selectModifiers + || $this->map || $this->having || $this->joins) { + return $this->findPkComplex($key, $con); + } else { + return $this->findPkSimple($key, $con); + } + } + + /** + * Find object by primary key using raw SQL to go fast. + * Bypass doSelect() and the object formatter by using generated code. + * + * @param mixed $key Primary key to use for the query + * @param ConnectionInterface $con A connection object + * + * @return ChildDeliveryRound A model object, or null if the key is not found + */ + protected function findPkSimple($key, $con) + { + $sql = 'SELECT ID, ZIP_CODE, CITY, ADDRESS, DAY, DELIVERY_PERIOD FROM delivery_round WHERE ID = :p0'; + try { + $stmt = $con->prepare($sql); + $stmt->bindValue(':p0', $key, PDO::PARAM_INT); + $stmt->execute(); + } catch (Exception $e) { + Propel::log($e->getMessage(), Propel::LOG_ERR); + throw new PropelException(sprintf('Unable to execute SELECT statement [%s]', $sql), 0, $e); + } + $obj = null; + if ($row = $stmt->fetch(\PDO::FETCH_NUM)) { + $obj = new ChildDeliveryRound(); + $obj->hydrate($row); + DeliveryRoundTableMap::addInstanceToPool($obj, (string) $key); + } + $stmt->closeCursor(); + + return $obj; + } + + /** + * Find object by primary key. + * + * @param mixed $key Primary key to use for the query + * @param ConnectionInterface $con A connection object + * + * @return ChildDeliveryRound|array|mixed the result, formatted by the current formatter + */ + protected function findPkComplex($key, $con) + { + // As the query uses a PK condition, no limit(1) is necessary. + $criteria = $this->isKeepQuery() ? clone $this : $this; + $dataFetcher = $criteria + ->filterByPrimaryKey($key) + ->doSelect($con); + + return $criteria->getFormatter()->init($criteria)->formatOne($dataFetcher); + } + + /** + * Find objects by primary key + * + * $objs = $c->findPks(array(12, 56, 832), $con); + * + * @param array $keys Primary keys to use for the query + * @param ConnectionInterface $con an optional connection object + * + * @return ObjectCollection|array|mixed the list of results, formatted by the current formatter + */ + public function findPks($keys, $con = null) + { + if (null === $con) { + $con = Propel::getServiceContainer()->getReadConnection($this->getDbName()); + } + $this->basePreSelect($con); + $criteria = $this->isKeepQuery() ? clone $this : $this; + $dataFetcher = $criteria + ->filterByPrimaryKeys($keys) + ->doSelect($con); + + return $criteria->getFormatter()->init($criteria)->format($dataFetcher); + } + + /** + * Filter the query by primary key + * + * @param mixed $key Primary key to use for the query + * + * @return ChildDeliveryRoundQuery The current query, for fluid interface + */ + public function filterByPrimaryKey($key) + { + + return $this->addUsingAlias(DeliveryRoundTableMap::ID, $key, Criteria::EQUAL); + } + + /** + * Filter the query by a list of primary keys + * + * @param array $keys The list of primary key to use for the query + * + * @return ChildDeliveryRoundQuery The current query, for fluid interface + */ + public function filterByPrimaryKeys($keys) + { + + return $this->addUsingAlias(DeliveryRoundTableMap::ID, $keys, Criteria::IN); + } + + /** + * Filter the query on the id column + * + * Example usage: + * + * $query->filterById(1234); // WHERE id = 1234 + * $query->filterById(array(12, 34)); // WHERE id IN (12, 34) + * $query->filterById(array('min' => 12)); // WHERE id > 12 + * + * + * @param mixed $id The value to use as filter. + * Use scalar values for equality. + * Use array values for in_array() equivalent. + * Use associative array('min' => $minValue, 'max' => $maxValue) for intervals. + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return ChildDeliveryRoundQuery The current query, for fluid interface + */ + public function filterById($id = null, $comparison = null) + { + if (is_array($id)) { + $useMinMax = false; + if (isset($id['min'])) { + $this->addUsingAlias(DeliveryRoundTableMap::ID, $id['min'], Criteria::GREATER_EQUAL); + $useMinMax = true; + } + if (isset($id['max'])) { + $this->addUsingAlias(DeliveryRoundTableMap::ID, $id['max'], Criteria::LESS_EQUAL); + $useMinMax = true; + } + if ($useMinMax) { + return $this; + } + if (null === $comparison) { + $comparison = Criteria::IN; + } + } + + return $this->addUsingAlias(DeliveryRoundTableMap::ID, $id, $comparison); + } + + /** + * Filter the query on the zip_code column + * + * Example usage: + * + * $query->filterByZipCode('fooValue'); // WHERE zip_code = 'fooValue' + * $query->filterByZipCode('%fooValue%'); // WHERE zip_code LIKE '%fooValue%' + * + * + * @param string $zipCode The value to use as filter. + * Accepts wildcards (* and % trigger a LIKE) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return ChildDeliveryRoundQuery The current query, for fluid interface + */ + public function filterByZipCode($zipCode = null, $comparison = null) + { + if (null === $comparison) { + if (is_array($zipCode)) { + $comparison = Criteria::IN; + } elseif (preg_match('/[\%\*]/', $zipCode)) { + $zipCode = str_replace('*', '%', $zipCode); + $comparison = Criteria::LIKE; + } + } + + return $this->addUsingAlias(DeliveryRoundTableMap::ZIP_CODE, $zipCode, $comparison); + } + + /** + * Filter the query on the city column + * + * Example usage: + * + * $query->filterByCity('fooValue'); // WHERE city = 'fooValue' + * $query->filterByCity('%fooValue%'); // WHERE city LIKE '%fooValue%' + * + * + * @param string $city The value to use as filter. + * Accepts wildcards (* and % trigger a LIKE) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return ChildDeliveryRoundQuery The current query, for fluid interface + */ + public function filterByCity($city = null, $comparison = null) + { + if (null === $comparison) { + if (is_array($city)) { + $comparison = Criteria::IN; + } elseif (preg_match('/[\%\*]/', $city)) { + $city = str_replace('*', '%', $city); + $comparison = Criteria::LIKE; + } + } + + return $this->addUsingAlias(DeliveryRoundTableMap::CITY, $city, $comparison); + } + + /** + * Filter the query on the address column + * + * Example usage: + * + * $query->filterByAddress('fooValue'); // WHERE address = 'fooValue' + * $query->filterByAddress('%fooValue%'); // WHERE address LIKE '%fooValue%' + * + * + * @param string $address The value to use as filter. + * Accepts wildcards (* and % trigger a LIKE) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return ChildDeliveryRoundQuery The current query, for fluid interface + */ + public function filterByAddress($address = null, $comparison = null) + { + if (null === $comparison) { + if (is_array($address)) { + $comparison = Criteria::IN; + } elseif (preg_match('/[\%\*]/', $address)) { + $address = str_replace('*', '%', $address); + $comparison = Criteria::LIKE; + } + } + + return $this->addUsingAlias(DeliveryRoundTableMap::ADDRESS, $address, $comparison); + } + + /** + * Filter the query on the day column + * + * @param mixed $day The value to use as filter + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return ChildDeliveryRoundQuery The current query, for fluid interface + */ + public function filterByDay($day = null, $comparison = null) + { + $valueSet = DeliveryRoundTableMap::getValueSet(DeliveryRoundTableMap::DAY); + if (is_scalar($day)) { + if (!in_array($day, $valueSet)) { + throw new PropelException(sprintf('Value "%s" is not accepted in this enumerated column', $day)); + } + $day = array_search($day, $valueSet); + } elseif (is_array($day)) { + $convertedValues = array(); + foreach ($day as $value) { + if (!in_array($value, $valueSet)) { + throw new PropelException(sprintf('Value "%s" is not accepted in this enumerated column', $value)); + } + $convertedValues []= array_search($value, $valueSet); + } + $day = $convertedValues; + if (null === $comparison) { + $comparison = Criteria::IN; + } + } + + return $this->addUsingAlias(DeliveryRoundTableMap::DAY, $day, $comparison); + } + + /** + * Filter the query on the delivery_period column + * + * Example usage: + * + * $query->filterByDeliveryPeriod('fooValue'); // WHERE delivery_period = 'fooValue' + * $query->filterByDeliveryPeriod('%fooValue%'); // WHERE delivery_period LIKE '%fooValue%' + * + * + * @param string $deliveryPeriod The value to use as filter. + * Accepts wildcards (* and % trigger a LIKE) + * @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL + * + * @return ChildDeliveryRoundQuery The current query, for fluid interface + */ + public function filterByDeliveryPeriod($deliveryPeriod = null, $comparison = null) + { + if (null === $comparison) { + if (is_array($deliveryPeriod)) { + $comparison = Criteria::IN; + } elseif (preg_match('/[\%\*]/', $deliveryPeriod)) { + $deliveryPeriod = str_replace('*', '%', $deliveryPeriod); + $comparison = Criteria::LIKE; + } + } + + return $this->addUsingAlias(DeliveryRoundTableMap::DELIVERY_PERIOD, $deliveryPeriod, $comparison); + } + + /** + * Exclude object from result + * + * @param ChildDeliveryRound $deliveryRound Object to remove from the list of results + * + * @return ChildDeliveryRoundQuery The current query, for fluid interface + */ + public function prune($deliveryRound = null) + { + if ($deliveryRound) { + $this->addUsingAlias(DeliveryRoundTableMap::ID, $deliveryRound->getId(), Criteria::NOT_EQUAL); + } + + return $this; + } + + /** + * Deletes all rows from the delivery_round table. + * + * @param ConnectionInterface $con the connection to use + * @return int The number of affected rows (if supported by underlying database driver). + */ + public function doDeleteAll(ConnectionInterface $con = null) + { + if (null === $con) { + $con = Propel::getServiceContainer()->getWriteConnection(DeliveryRoundTableMap::DATABASE_NAME); + } + $affectedRows = 0; // initialize var to track total num of affected rows + try { + // use transaction because $criteria could contain info + // for more than one table or we could emulating ON DELETE CASCADE, etc. + $con->beginTransaction(); + $affectedRows += parent::doDeleteAll($con); + // Because this db requires some delete cascade/set null emulation, we have to + // clear the cached instance *after* the emulation has happened (since + // instances get re-added by the select statement contained therein). + DeliveryRoundTableMap::clearInstancePool(); + DeliveryRoundTableMap::clearRelatedInstancePool(); + + $con->commit(); + } catch (PropelException $e) { + $con->rollBack(); + throw $e; + } + + return $affectedRows; + } + + /** + * Performs a DELETE on the database, given a ChildDeliveryRound or Criteria object OR a primary key value. + * + * @param mixed $values Criteria or ChildDeliveryRound object or primary key or array of primary keys + * which is used to create the DELETE statement + * @param ConnectionInterface $con the connection to use + * @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows + * if supported by native driver or if emulated using Propel. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public function delete(ConnectionInterface $con = null) + { + if (null === $con) { + $con = Propel::getServiceContainer()->getWriteConnection(DeliveryRoundTableMap::DATABASE_NAME); + } + + $criteria = $this; + + // Set the correct dbName + $criteria->setDbName(DeliveryRoundTableMap::DATABASE_NAME); + + $affectedRows = 0; // initialize var to track total num of affected rows + + try { + // use transaction because $criteria could contain info + // for more than one table or we could emulating ON DELETE CASCADE, etc. + $con->beginTransaction(); + + + DeliveryRoundTableMap::removeInstanceFromPool($criteria); + + $affectedRows += ModelCriteria::delete($con); + DeliveryRoundTableMap::clearRelatedInstancePool(); + $con->commit(); + + return $affectedRows; + } catch (PropelException $e) { + $con->rollBack(); + throw $e; + } + } + +} // DeliveryRoundQuery diff --git a/local/modules/DeliveryRound/Model/DeliveryRound.php b/local/modules/DeliveryRound/Model/DeliveryRound.php new file mode 100644 index 00000000..ca180044 --- /dev/null +++ b/local/modules/DeliveryRound/Model/DeliveryRound.php @@ -0,0 +1,35 @@ +day !== $v) { + $this->day = $v; + $this->modifiedColumns[DeliveryRoundTableMap::DAY] = true; + } + + return $this; + } // setDay() +} diff --git a/local/modules/DeliveryRound/Model/DeliveryRoundQuery.php b/local/modules/DeliveryRound/Model/DeliveryRoundQuery.php new file mode 100644 index 00000000..9cce14dd --- /dev/null +++ b/local/modules/DeliveryRound/Model/DeliveryRoundQuery.php @@ -0,0 +1,21 @@ + array('Id', 'ZipCode', 'City', 'Address', 'Day', 'DeliveryPeriod', ), + self::TYPE_STUDLYPHPNAME => array('id', 'zipCode', 'city', 'address', 'day', 'deliveryPeriod', ), + self::TYPE_COLNAME => array(DeliveryRoundTableMap::ID, DeliveryRoundTableMap::ZIP_CODE, DeliveryRoundTableMap::CITY, DeliveryRoundTableMap::ADDRESS, DeliveryRoundTableMap::DAY, DeliveryRoundTableMap::DELIVERY_PERIOD, ), + self::TYPE_RAW_COLNAME => array('ID', 'ZIP_CODE', 'CITY', 'ADDRESS', 'DAY', 'DELIVERY_PERIOD', ), + self::TYPE_FIELDNAME => array('id', 'zip_code', 'city', 'address', 'day', 'delivery_period', ), + self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, ) + ); + + /** + * holds an array of keys for quick access to the fieldnames array + * + * first dimension keys are the type constants + * e.g. self::$fieldKeys[self::TYPE_PHPNAME]['Id'] = 0 + */ + protected static $fieldKeys = array ( + self::TYPE_PHPNAME => array('Id' => 0, 'ZipCode' => 1, 'City' => 2, 'Address' => 3, 'Day' => 4, 'DeliveryPeriod' => 5, ), + self::TYPE_STUDLYPHPNAME => array('id' => 0, 'zipCode' => 1, 'city' => 2, 'address' => 3, 'day' => 4, 'deliveryPeriod' => 5, ), + self::TYPE_COLNAME => array(DeliveryRoundTableMap::ID => 0, DeliveryRoundTableMap::ZIP_CODE => 1, DeliveryRoundTableMap::CITY => 2, DeliveryRoundTableMap::ADDRESS => 3, DeliveryRoundTableMap::DAY => 4, DeliveryRoundTableMap::DELIVERY_PERIOD => 5, ), + self::TYPE_RAW_COLNAME => array('ID' => 0, 'ZIP_CODE' => 1, 'CITY' => 2, 'ADDRESS' => 3, 'DAY' => 4, 'DELIVERY_PERIOD' => 5, ), + self::TYPE_FIELDNAME => array('id' => 0, 'zip_code' => 1, 'city' => 2, 'address' => 3, 'day' => 4, 'delivery_period' => 5, ), + self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, ) + ); + + /** The enumerated values for this table */ + protected static $enumValueSets = array( + DeliveryRoundTableMap::DAY => array( + self::DAY_MONDAY, + self::DAY_TUESDAY, + self::DAY_WEDNESDAY, + self::DAY_THURSDAY, + self::DAY_FRIDAY, + self::DAY_SATURDAY, + self::DAY_SUNDAY, + ), + ); + + /** + * Gets the list of values for all ENUM columns + * @return array + */ + public static function getValueSets() + { + return static::$enumValueSets; + } + + /** + * Gets the list of values for an ENUM column + * @param string $colname + * @return array list of possible values for the column + */ + public static function getValueSet($colname) + { + $valueSets = self::getValueSets(); + + return $valueSets[$colname]; + } + + /** + * Initialize the table attributes and columns + * Relations are not initialized by this method since they are lazy loaded + * + * @return void + * @throws PropelException + */ + public function initialize() + { + // attributes + $this->setName('delivery_round'); + $this->setPhpName('DeliveryRound'); + $this->setClassName('\\DeliveryRound\\Model\\DeliveryRound'); + $this->setPackage('DeliveryRound.Model'); + $this->setUseIdGenerator(true); + // columns + $this->addPrimaryKey('ID', 'Id', 'INTEGER', true, null, null); + $this->addColumn('ZIP_CODE', 'ZipCode', 'VARCHAR', true, 20, null); + $this->addColumn('CITY', 'City', 'VARCHAR', true, 255, null); + $this->addColumn('ADDRESS', 'Address', 'LONGVARCHAR', false, null, null); + $this->addColumn('DAY', 'Day', 'ENUM', true, null, null); + $this->getColumn('DAY', false)->setValueSet(array ( + 0 => 'monday', + 1 => 'tuesday', + 2 => 'wednesday', + 3 => 'thursday', + 4 => 'friday', + 5 => 'saturday', + 6 => 'sunday', +)); + $this->addColumn('DELIVERY_PERIOD', 'DeliveryPeriod', 'LONGVARCHAR', false, null, null); + } // initialize() + + /** + * Build the RelationMap objects for this table relationships + */ + public function buildRelations() + { + } // buildRelations() + + /** + * Retrieves a string version of the primary key from the DB resultset row that can be used to uniquely identify a row in this table. + * + * For tables with a single-column primary key, that simple pkey value will be returned. For tables with + * a multi-column primary key, a serialize()d version of the primary key will be returned. + * + * @param array $row resultset row. + * @param int $offset The 0-based offset for reading from the resultset row. + * @param string $indexType One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME + * TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM + */ + public static function getPrimaryKeyHashFromRow($row, $offset = 0, $indexType = TableMap::TYPE_NUM) + { + // If the PK cannot be derived from the row, return NULL. + if ($row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType)] === null) { + return null; + } + + return (string) $row[TableMap::TYPE_NUM == $indexType ? 0 + $offset : static::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType)]; + } + + /** + * Retrieves the primary key from the DB resultset row + * For tables with a single-column primary key, that simple pkey value will be returned. For tables with + * a multi-column primary key, an array of the primary key columns will be returned. + * + * @param array $row resultset row. + * @param int $offset The 0-based offset for reading from the resultset row. + * @param string $indexType One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME + * TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM + * + * @return mixed The primary key of the row + */ + public static function getPrimaryKeyFromRow($row, $offset = 0, $indexType = TableMap::TYPE_NUM) + { + + return (int) $row[ + $indexType == TableMap::TYPE_NUM + ? 0 + $offset + : self::translateFieldName('Id', TableMap::TYPE_PHPNAME, $indexType) + ]; + } + + /** + * The class that the tableMap will make instances of. + * + * If $withPrefix is true, the returned path + * uses a dot-path notation which is translated into a path + * relative to a location on the PHP include_path. + * (e.g. path.to.MyClass -> 'path/to/MyClass.php') + * + * @param boolean $withPrefix Whether or not to return the path with the class name + * @return string path.to.ClassName + */ + public static function getOMClass($withPrefix = true) + { + return $withPrefix ? DeliveryRoundTableMap::CLASS_DEFAULT : DeliveryRoundTableMap::OM_CLASS; + } + + /** + * Populates an object of the default type or an object that inherit from the default. + * + * @param array $row row returned by DataFetcher->fetch(). + * @param int $offset The 0-based offset for reading from the resultset row. + * @param string $indexType The index type of $row. Mostly DataFetcher->getIndexType(). + One of the class type constants TableMap::TYPE_PHPNAME, TableMap::TYPE_STUDLYPHPNAME + * TableMap::TYPE_COLNAME, TableMap::TYPE_FIELDNAME, TableMap::TYPE_NUM. + * + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + * @return array (DeliveryRound object, last column rank) + */ + public static function populateObject($row, $offset = 0, $indexType = TableMap::TYPE_NUM) + { + $key = DeliveryRoundTableMap::getPrimaryKeyHashFromRow($row, $offset, $indexType); + if (null !== ($obj = DeliveryRoundTableMap::getInstanceFromPool($key))) { + // We no longer rehydrate the object, since this can cause data loss. + // See http://www.propelorm.org/ticket/509 + // $obj->hydrate($row, $offset, true); // rehydrate + $col = $offset + DeliveryRoundTableMap::NUM_HYDRATE_COLUMNS; + } else { + $cls = DeliveryRoundTableMap::OM_CLASS; + $obj = new $cls(); + $col = $obj->hydrate($row, $offset, false, $indexType); + DeliveryRoundTableMap::addInstanceToPool($obj, $key); + } + + return array($obj, $col); + } + + /** + * The returned array will contain objects of the default type or + * objects that inherit from the default. + * + * @param DataFetcherInterface $dataFetcher + * @return array + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function populateObjects(DataFetcherInterface $dataFetcher) + { + $results = array(); + + // set the class once to avoid overhead in the loop + $cls = static::getOMClass(false); + // populate the object(s) + while ($row = $dataFetcher->fetch()) { + $key = DeliveryRoundTableMap::getPrimaryKeyHashFromRow($row, 0, $dataFetcher->getIndexType()); + if (null !== ($obj = DeliveryRoundTableMap::getInstanceFromPool($key))) { + // We no longer rehydrate the object, since this can cause data loss. + // See http://www.propelorm.org/ticket/509 + // $obj->hydrate($row, 0, true); // rehydrate + $results[] = $obj; + } else { + $obj = new $cls(); + $obj->hydrate($row); + $results[] = $obj; + DeliveryRoundTableMap::addInstanceToPool($obj, $key); + } // if key exists + } + + return $results; + } + /** + * Add all the columns needed to create a new object. + * + * Note: any columns that were marked with lazyLoad="true" in the + * XML schema will not be added to the select list and only loaded + * on demand. + * + * @param Criteria $criteria object containing the columns to add. + * @param string $alias optional table alias + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function addSelectColumns(Criteria $criteria, $alias = null) + { + if (null === $alias) { + $criteria->addSelectColumn(DeliveryRoundTableMap::ID); + $criteria->addSelectColumn(DeliveryRoundTableMap::ZIP_CODE); + $criteria->addSelectColumn(DeliveryRoundTableMap::CITY); + $criteria->addSelectColumn(DeliveryRoundTableMap::ADDRESS); + $criteria->addSelectColumn(DeliveryRoundTableMap::DAY); + $criteria->addSelectColumn(DeliveryRoundTableMap::DELIVERY_PERIOD); + } else { + $criteria->addSelectColumn($alias . '.ID'); + $criteria->addSelectColumn($alias . '.ZIP_CODE'); + $criteria->addSelectColumn($alias . '.CITY'); + $criteria->addSelectColumn($alias . '.ADDRESS'); + $criteria->addSelectColumn($alias . '.DAY'); + $criteria->addSelectColumn($alias . '.DELIVERY_PERIOD'); + } + } + + /** + * Returns the TableMap related to this object. + * This method is not needed for general use but a specific application could have a need. + * @return TableMap + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function getTableMap() + { + return Propel::getServiceContainer()->getDatabaseMap(DeliveryRoundTableMap::DATABASE_NAME)->getTable(DeliveryRoundTableMap::TABLE_NAME); + } + + /** + * Add a TableMap instance to the database for this tableMap class. + */ + public static function buildTableMap() + { + $dbMap = Propel::getServiceContainer()->getDatabaseMap(DeliveryRoundTableMap::DATABASE_NAME); + if (!$dbMap->hasTable(DeliveryRoundTableMap::TABLE_NAME)) { + $dbMap->addTableObject(new DeliveryRoundTableMap()); + } + } + + /** + * Performs a DELETE on the database, given a DeliveryRound or Criteria object OR a primary key value. + * + * @param mixed $values Criteria or DeliveryRound object or primary key or array of primary keys + * which is used to create the DELETE statement + * @param ConnectionInterface $con the connection to use + * @return int The number of affected rows (if supported by underlying database driver). This includes CASCADE-related rows + * if supported by native driver or if emulated using Propel. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doDelete($values, ConnectionInterface $con = null) + { + if (null === $con) { + $con = Propel::getServiceContainer()->getWriteConnection(DeliveryRoundTableMap::DATABASE_NAME); + } + + if ($values instanceof Criteria) { + // rename for clarity + $criteria = $values; + } elseif ($values instanceof \DeliveryRound\Model\DeliveryRound) { // it's a model object + // create criteria based on pk values + $criteria = $values->buildPkeyCriteria(); + } else { // it's a primary key, or an array of pks + $criteria = new Criteria(DeliveryRoundTableMap::DATABASE_NAME); + $criteria->add(DeliveryRoundTableMap::ID, (array) $values, Criteria::IN); + } + + $query = DeliveryRoundQuery::create()->mergeWith($criteria); + + if ($values instanceof Criteria) { DeliveryRoundTableMap::clearInstancePool(); + } elseif (!is_object($values)) { // it's a primary key, or an array of pks + foreach ((array) $values as $singleval) { DeliveryRoundTableMap::removeInstanceFromPool($singleval); + } + } + + return $query->delete($con); + } + + /** + * Deletes all rows from the delivery_round table. + * + * @param ConnectionInterface $con the connection to use + * @return int The number of affected rows (if supported by underlying database driver). + */ + public static function doDeleteAll(ConnectionInterface $con = null) + { + return DeliveryRoundQuery::create()->doDeleteAll($con); + } + + /** + * Performs an INSERT on the database, given a DeliveryRound or Criteria object. + * + * @param mixed $criteria Criteria or DeliveryRound object containing data that is used to create the INSERT statement. + * @param ConnectionInterface $con the ConnectionInterface connection to use + * @return mixed The new primary key. + * @throws PropelException Any exceptions caught during processing will be + * rethrown wrapped into a PropelException. + */ + public static function doInsert($criteria, ConnectionInterface $con = null) + { + if (null === $con) { + $con = Propel::getServiceContainer()->getWriteConnection(DeliveryRoundTableMap::DATABASE_NAME); + } + + if ($criteria instanceof Criteria) { + $criteria = clone $criteria; // rename for clarity + } else { + $criteria = $criteria->buildCriteria(); // build Criteria from DeliveryRound object + } + + if ($criteria->containsKey(DeliveryRoundTableMap::ID) && $criteria->keyContainsValue(DeliveryRoundTableMap::ID) ) { + throw new PropelException('Cannot insert a value for auto-increment primary key ('.DeliveryRoundTableMap::ID.')'); + } + + + // Set the correct dbName + $query = DeliveryRoundQuery::create()->mergeWith($criteria); + + try { + // use transaction because $criteria could contain info + // for more than one table (I guess, conceivably) + $con->beginTransaction(); + $pk = $query->doInsert($con); + $con->commit(); + } catch (PropelException $e) { + $con->rollBack(); + throw $e; + } + + return $pk; + } + +} // DeliveryRoundTableMap +// This is the static code needed to register the TableMap for this table with the main Propel class. +// +DeliveryRoundTableMap::buildTableMap(); diff --git a/local/modules/DeliveryRound/Readme.md b/local/modules/DeliveryRound/Readme.md new file mode 100644 index 00000000..d2b6ba9a --- /dev/null +++ b/local/modules/DeliveryRound/Readme.md @@ -0,0 +1,64 @@ +# Delivery Round + +Handle rounds to inform customer you will be present into a given city to dispatch orders. + +## Installation + +### Manually + +* Copy the module into ```/local/modules/``` directory and be sure that the name of the module is DeliveryRound. +* Activate it in your thelia administration panel + +### Composer + +Add it in your main thelia composer.json file + +``` +composer require thelia/delivery-round-module:~1.0 +``` + +## Usage + +In the module configuration page, add information about the price of this delivery method and about where and when you'll be dispatching orders: +- zip code * +- city * +- address +- day * +- period + +You can use the *address* input to inform your customers where you will be dispatching their orders, or leave it blank if you deliver at home. + +To display a message about your round or the time you need to prepare an order for example, use the description in the module edition. + +This delivery method will be proposed to customer who have at least one address with the same zipcode as one of the ones you entered in the configuration. + +## Loop + +[deliveryround] + +### Input arguments + +|Argument |Description | +|--- |--- | +|**id** | ID of a specific delivery round entry | +|**zipcode** | Used to sort delivery round entries by zipcode | +|**day** | Used to sort delivery round entries by day. Values: *monday*, *tuesday*, *wednesday*, *thursday*, *friday*, *saturday*, *sunday*. | + +### Output arguments + +|Variable |Description | +|--- |--- | +|$ID | ID of the returned delivery round entry | +|$ZIPCODE | Zipcode | +|$CITY | City | +|$ADDRESS | Address from where you dispatch your orders | +|$DAY | Day of the week | +|$DELIVERY_PERIOD | Period during which one you'll be dispatching orders | + +### Exemple + +
    + {loop type='deliveryround' name='deliveryround-loop'} +
  • {$DAY|date_format:"%A"} : {$ZIPCODE} {$CITY}{if $ADDRESS}, {$ADDRESS}{/if}{if $DELIVERY_PERIOD}, {$DELIVERY_PERIOD}{/if}
  • + {/loop} +
diff --git a/local/modules/DeliveryRound/composer.json b/local/modules/DeliveryRound/composer.json new file mode 100644 index 00000000..c28e49cb --- /dev/null +++ b/local/modules/DeliveryRound/composer.json @@ -0,0 +1,11 @@ +{ + "name": "thelia/delivery-round-module", + "license": "LGPL-3.0+", + "type": "thelia-module", + "require": { + "thelia/installer": "~1.1" + }, + "extra": { + "installer-name": "DeliveryRound" + } +} \ No newline at end of file diff --git a/local/modules/DeliveryRound/templates/backOffice/default/delivery-round-config.html b/local/modules/DeliveryRound/templates/backOffice/default/delivery-round-config.html new file mode 100644 index 00000000..5c095599 --- /dev/null +++ b/local/modules/DeliveryRound/templates/backOffice/default/delivery-round-config.html @@ -0,0 +1,234 @@ +{assign "order" value=$smarty.get.order|default:'day'} +
+
+ {intl l="configure delivery round price" d='deliveryround.bo.default'} +
+ + {form name='deliveryround_config_form'} + + + {form_hidden_fields form=$form} + + {if $form_error} +
{$form_error_message}
+ {/if} + + {form_field form=$form field="price"} +
+ + + +
+ {/form_field} + +
+ +
+ + {/form} +
+ +
+
+ {intl l="configure delivery rounds" d='deliveryround.bo.default'} +
+ + {form name='deliveryround_form'} +
+ + {form_hidden_fields form=$form} + + {if $form_error} +
{$form_error_message}
+ {/if} + +
+ +
+ {form_field form=$form field="zipcode"} +
+ + + +
+ {/form_field} +
+ +
+ {form_field form=$form field="city"} +
+ + + +
+ {/form_field} +
+ +
+ {form_field form=$form field="address"} +
+ + + +
+ {/form_field} +
+ + +
+ {form_field form=$form field="day"} +
+ + + +
+ {/form_field} +
+ +
+ {form_field form=$form field="delivery_period"} +
+ + + +
+ {/form_field} +
+ +
+ + +
+ +
+
+ {/form} + +
+ +
+
+ + + + + + + + + + + + + {loop type='deliveryround' name='deliveryround-loop' order=$order} + + + + + + + + + {/loop} + +
+ {admin_sortable_header + current_order=$order + order='zipcode' + reverse_order='zipcode-reverse' + path={url path='/admin/module/DeliveryRound/config' target='delivery-round-table'} + label="{intl l='Zipcode' d='deliveryround.bo.default'}" + } + + {admin_sortable_header + current_order=$order + order='city' + reverse_order='city-reverse' + path={url path='/admin/module/DeliveryRound/config' target='delivery-round-table'} + label="{intl l='City' d='deliveryround.bo.default'}" + } + {intl l='Address' d='deliveryround.bo.default'} + {admin_sortable_header + current_order=$order + order='day' + reverse_order='day-reverse' + path={url path='/admin/module/DeliveryRound/config' target='delivery-round-table'} + label="{intl l='Day' d='deliveryround.bo.default'}" + } + {intl l='Delivery period' d='deliveryround.bo.default'}{intl l='Remove' d='deliveryround.bo.default'}
{$ZIPCODE}{$CITY}{$ADDRESS}{$DAY|date_format:"%A"}{$DELIVERY_PERIOD} + {loop name="auth-edit" type="auth" role="ADMIN" access="UPDATE" module="Dealer"} + + + + {/loop} + {form name='deliveryround_delete_form'} +
+ + {form_hidden_fields form=$form} + + {form_field form=$form field="id"} + + {/form_field} + + +
+ {/form} +
+
+
+
+ +{form name="deliveryround_update_form"} +{capture "deliveryround_update"} + {include file="form/delivery-round-update-form.html" form=$form} +{/capture} + + {include file="includes/generic-create-dialog.html" + dialog_id = "deliveryround-update" + dialog_title = {intl l="Update"} + dialog_body = {$smarty.capture.deliveryround_update nofilter} +dialog_ok_label = {intl l="Create"} +dialog_cancel_label = {intl l="Cancel"} + +form_action = {url path="/admin/module/DeliveryRound/update"} +form_enctype = {form_enctype form=$form} +} +{/form} \ No newline at end of file diff --git a/local/modules/DeliveryRound/templates/backOffice/default/form/delivery-round-update-form.html b/local/modules/DeliveryRound/templates/backOffice/default/form/delivery-round-update-form.html new file mode 100644 index 00000000..87c54c72 --- /dev/null +++ b/local/modules/DeliveryRound/templates/backOffice/default/form/delivery-round-update-form.html @@ -0,0 +1,66 @@ +{form_hidden_fields form=$form} + +{if $form_error} +
{$form_error_message}
+{/if} +{form_field form=$form field="id"} + +{/form_field} +{form_field form=$form field="zipcode"} +
+ + + +
+{/form_field} +{form_field form=$form field="city"} +
+ + + +
+{/form_field} +{form_field form=$form field="address"} +
+ + + +
+{/form_field} +{form_field form=$form field="day"} +
+ + + +
+{/form_field} +{form_field form=$form field="delivery_period"} +
+ + + +
+{/form_field} \ No newline at end of file diff --git a/local/modules/DeliveryRound/templates/backOffice/default/script/delivery-round-update-js.html b/local/modules/DeliveryRound/templates/backOffice/default/script/delivery-round-update-js.html new file mode 100644 index 00000000..fd4ef6f7 --- /dev/null +++ b/local/modules/DeliveryRound/templates/backOffice/default/script/delivery-round-update-js.html @@ -0,0 +1,21 @@ + \ No newline at end of file diff --git a/local/modules/DeliveryRound/templates/frontOffice/default/show-round-list.html b/local/modules/DeliveryRound/templates/frontOffice/default/show-round-list.html new file mode 100644 index 00000000..e66f858f --- /dev/null +++ b/local/modules/DeliveryRound/templates/frontOffice/default/show-round-list.html @@ -0,0 +1,9 @@ + + +
    + {loop type='deliveryround' name='deliveryround-loop'} +
  • {$DAY|date_format:"%A"} : {$ZIPCODE} {$CITY}{if $ADDRESS}, {$ADDRESS}{/if}{if $DELIVERY_PERIOD}, {$DELIVERY_PERIOD}{/if}
  • + {/loop} +
+ + \ No newline at end of file diff --git a/local/modules/LivraisonParSecteurs/Config/thelia.sql b/local/modules/LivraisonParSecteurs/Config/thelia.sql new file mode 100644 index 00000000..8d9099c7 --- /dev/null +++ b/local/modules/LivraisonParSecteurs/Config/thelia.sql @@ -0,0 +1,99 @@ +# This is a fix for InnoDB in MySQL >= 4.1.x +# It "suspends judgement" for fkey relationships until are tables are set. +SET FOREIGN_KEY_CHECKS = 0; + +-- --------------------------------------------------------------------- +-- secteur +-- --------------------------------------------------------------------- +DROP TABLE IF EXISTS `lps_secteur`; + +CREATE TABLE `lps_secteur` +( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `nom` VARCHAR(50) NOT NULL + PRIMARY KEY (`id`) +) ENGINE=InnoDB; + +-- --------------------------------------------------------------------- +-- secteur_commune +-- --------------------------------------------------------------------- +DROP TABLE IF EXISTS `lps_secteur_commune`; + +CREATE TABLE `lps_secteur_commune` +( + `id_secteur` INTEGER NOT NULL, + `zipcode` VARCHAR(10) NOT NULL + PRIMARY KEY (`id_secteur`,`zipcode`) + CONSTRAINT `fk_id_secteur` + FOREIGN KEY (`id_secteur`) + REFERENCES `lps_secteur` (`id`) + ON UPDATE RESTRICT + ON DELETE CASCADE, + CONSTRAINT `fk_zipcode` + FOREIGN KEY (`zipcode`) + REFERENCES `address` (`zipcode`) + ON UPDATE RESTRICT + ON DELETE CASCADE +) ENGINE=InnoDB; + +-- --------------------------------------------------------------------- +-- secteur_horaires +-- --------------------------------------------------------------------- +DROP TABLE IF EXISTS `lps_secteur_horaires`; + +CREATE TABLE `lps_secteur_horaires` +( + `id_secteur` INTEGER NOT NULL, + `jour` TINYINT NOT NULL, + `heure_debut` TIME NOT NULL, + `heure_fin` TIME NOT NULL + PRIMARY KEY (`id_secteur`,`jour`) +) ENGINE=InnoDB; + + + + +-- --------------------------------------------------------------------- +-- Insertion des données +-- --------------------------------------------------------------------- +INSERT INTO `secteur`(`id`,`nom`) VALUES + (1, 'Capso'), + (2, 'Pays de Lumbres'), + (3, 'Haut des Flanders'), + (4, 'Flandres intérieur') +); + + +INSERT INTO `secteur_commune`(`id_secteur`,`zipcode`) VALUES +(1,'62120'), +(1,'62129'), +(1,'62219'), +(1,'62500'), +(1,'62510'), +(1,'62570'), +(1,'62575'), +(1,'62910'), +(2,'62010'), +(2,'62024'), +(2,'62088'), +(2,'62229'), +(2,'62292'), +(2,'62309'), +(2,'62504'), +(2,'62534'), +(2,'62613'), +(2,'62656'), +(2,'62674'), +(2,'62702'), +(2,'62788'), +(2,'62794'), +(2,'62803'), +(2,'62882'), +(2,'62897'), +(2,'62898'), +(2,'62905') +); + + +# This restores the fkey checks, after having unset them earlier +SET FOREIGN_KEY_CHECKS = 1; diff --git a/local/modules/PaiementALivraison/Config/config.xml b/local/modules/PaiementALivraison/Config/config.xml index ff82cbf9..6130ed5a 100644 --- a/local/modules/PaiementALivraison/Config/config.xml +++ b/local/modules/PaiementALivraison/Config/config.xml @@ -4,7 +4,12 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://thelia.net/schema/dic/config http://thelia.net/schema/dic/config/thelia-1.0.xsd"> - - + + + + + + +