/**
  * @return null
  */
 protected function buildForm()
 {
     if (null === ($data = DpdClassic::getConfigValue('default_status'))) {
         $data = DpdClassic::NO_CHANGE;
     }
     $this->formBuilder->add('default_status', 'choice', ['label' => $this->translator->trans('Change order status to', [], DpdClassic::DOMAIN_NAME), 'choices' => [DpdClassic::NO_CHANGE => $this->translator->trans("Do not change", [], DpdClassic::DOMAIN_NAME), DpdClassic::PROCESS => $this->translator->trans("Set orders status as processing", [], DpdClassic::DOMAIN_NAME), DpdClassic::SEND => $this->translator->trans("Set orders status as sent", [], DpdClassic::DOMAIN_NAME)], 'required' => true, 'expanded' => true, 'multiple' => false, 'data' => $data]);
 }
예제 #2
0
 public function update_status(OrderEvent $event)
 {
     if ($event->getOrder()->getDeliveryModuleId() === DpdClassic::getModuleId()) {
         if ($event->getOrder()->getStatusId() === DpdClassic::STATUS_SENT) {
             $contact_email = ConfigQuery::read('store_email');
             if ($contact_email) {
                 $message = MessageQuery::create()->filterByName('order_confirmation_dpdclassic')->findOne();
                 if (false === $message) {
                     throw new \Exception("Failed to load message 'order_confirmation_dpdclassic'.");
                 }
                 $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());
                 $this->parser->assign('package', $order->getDeliveryRef());
                 $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);
             }
         }
     }
 }
 public function buildArray()
 {
     $order = OrderQuery::create()->findOneByRef($this->getRef());
     if (null !== $order && $order->getDeliveryModuleId() === DpdClassic::getModuleId()) {
         return [$order->getRef() => $order->getDeliveryRef()];
     }
     return [];
 }
예제 #4
0
 protected function buildForm()
 {
     $entries = OrderQuery::create()->filterByDeliveryModuleId(DpdClassic::getModuleId())->find();
     $this->formBuilder->add('new_status_id', 'choice', array('label' => Translator::getInstance()->trans('Change order status to', [], DpdClassic::DOMAIN_NAME), 'choices' => array("nochange" => Translator::getInstance()->trans("Do not change", [], DpdClassic::DOMAIN_NAME), "processing" => Translator::getInstance()->trans("Set orders status as processing", [], DpdClassic::DOMAIN_NAME), "sent" => Translator::getInstance()->trans("Set orders status as sent", [], DpdClassic::DOMAIN_NAME)), 'required' => true, 'expanded' => true, 'multiple' => false, 'data' => 'nochange'));
     foreach ($entries as $order) {
         $orderRef = str_replace(".", "-", $order->getRef());
         $this->formBuilder->add($orderRef, 'checkbox', array('label' => $orderRef, 'label_attr' => array('for' => $orderRef)))->add($orderRef . "-assur", 'checkbox')->add($orderRef . "-pkgNumber", 'number')->add($orderRef . "-pkgWeight", 'number');
     }
 }
 public function parseResults(LoopResult $loopResult)
 {
     $moduleId = DpdClassic::getModuleId();
     $loopResult = parent::parseResults($loopResult);
     for ($loopResult->rewind(); $loopResult->valid(); $loopResult->next()) {
         $loopResult->current()->set("MODULE_ID", $moduleId);
     }
     return $loopResult;
 }
 public function buildArray()
 {
     $path = ExportExaprintController::getJSONpath();
     if (is_readable($path) && ($order = OrderQuery::create()->findOneByRef($this->getRef())) !== null && $order->getDeliveryModuleId() === DpdClassic::getModuleId()) {
         $json = json_decode(file_get_contents($path), true);
         return array($this->getRef() => $json['expcode']);
     } else {
         return array();
     }
 }
예제 #7
0
 public function buildArray()
 {
     $area = $this->getArea();
     $prices = DpdClassic::getPrices();
     if (!isset($prices[$area]) || !isset($prices[$area]["slices"])) {
         return array();
     }
     $areaPrices = $prices[$area]["slices"];
     ksort($areaPrices);
     return $areaPrices;
 }
 public function changeFreeShippingAction()
 {
     if (null !== ($response = $this->checkAuth([AdminResources::MODULE], ["dpdclassic"], AccessManager::UPDATE))) {
         return $response;
     }
     $form = new FreeShippingForm($this->getRequest());
     $response = null;
     try {
         $vform = $this->validateForm($form);
         $data = $vform->get('freeshipping')->getData();
         DpdClassic::setConfigValue('freeshipping', $data ? 'true' : 'false');
         $response = Response::create('');
     } catch (\Exception $e) {
         $response = JsonResponse::create(array("error" => $e->getMessage()), 500);
     }
     return $response;
 }
 /**
  * This function supposes that delivery ref is always in the 17th column
  */
 public function importFileAction()
 {
     $i = 0;
     $con = Propel::getWriteConnection(OrderTableMap::DATABASE_NAME);
     $con->beginTransaction();
     $form = $this->createForm('dpdclassic.import');
     try {
         $vForm = $this->validateForm($form);
         // Get file
         $importedFile = $vForm->getData()['import_file'];
         // Check extension
         if (!in_array(strtolower($importedFile->getClientOriginalExtension()), ['csv', 'txt'])) {
             throw new FormValidationException(Translator::getInstance()->trans('Bad file format. Plain text or CSV expected.', [], DpdClassic::DOMAIN_NAME));
         }
         $csvData = file_get_contents($importedFile);
         $lines = explode(PHP_EOL, $csvData);
         // For each line, parse columns
         foreach ($lines as $line) {
             $parsedLine = str_getcsv($line, "\t");
             // Check if there are enough columns to include order ref
             if (count($parsedLine) > DpdClassic::ORDER_REF_COLUMN) {
                 // Get delivery and order ref
                 $deliveryRef = $parsedLine[DpdClassic::DELIVERY_REF_COLUMN];
                 $orderRef = $parsedLine[DpdClassic::ORDER_REF_COLUMN];
                 // Save delivery ref if there is one
                 if (!empty($deliveryRef)) {
                     $this->importDeliveryRef($deliveryRef, $orderRef, $i);
                 }
             }
         }
         $con->commit();
         // Get number of affected rows to display
         $this->getSession()->getFlashBag()->add('update-orders-result', Translator::getInstance()->trans('Operation successful. %i orders affected.', ['%i' => $i], DpdClassic::DOMAIN_NAME));
         // Redirect
         return $this->generateRedirect(URL::getInstance()->absoluteUrl($form->getSuccessUrl(), ['current_tab' => 'import_exaprint']));
     } catch (FormValidationException $e) {
         $con->rollback();
         $this->setupFormErrorContext(null, $e->getMessage(), $form);
         return $this->render('module-configure', ['module_code' => DpdClassic::getModuleCode(), 'current_tab' => 'import_exaprint']);
     }
 }
 public function configureAction()
 {
     if (null !== ($response = $this->checkAuth([AdminResources::MODULE], ['DpdClassic'], [AccessManager::CREATE, AccessManager::UPDATE]))) {
         return $response;
     }
     $baseForm = $this->createForm("config_form");
     $errorMessage = null;
     try {
         $form = $this->validateForm($baseForm);
         $data = $form->getData();
         // Save data
         DpdClassic::setConfigValue('default_status', $data["default_status"]);
     } catch (FormValidationException $ex) {
         $errorMessage = $this->createStandardFormValidationErrorMessage($ex);
     } catch (\Exception $ex) {
         $errorMessage = $this->getTranslator()->trans('Sorry, an error occurred: %err', ['%err' => $ex->getMessage()], DpdClassic::DOMAIN_NAME);
     }
     if ($errorMessage !== null) {
         $this->setupFormErrorContext(Translator::getInstance()->trans("Error while updating status", [], DpdClassic::DOMAIN_NAME), $errorMessage, $baseForm);
     }
     return $this->generateRedirectFromRoute("admin.module.configure", [], ['module_code' => "DpdClassic", 'current_tab' => "config", '_controller' => 'Thelia\\Controller\\Admin\\ModuleController::configureAction']);
 }
 public function updateSenderAction()
 {
     if (null !== ($response = $this->checkAuth(array(AdminResources::MODULE), array('DpdClassic'), AccessManager::UPDATE))) {
         return $response;
     }
     $form = new ExportExaprintForm($this->getRequest());
     $error_message = null;
     try {
         $vform = $this->validateForm($form);
         $file_path = self::getJSONpath();
         if (file_exists($file_path) ? is_writable($file_path) : is_writable(__DIR__ . "/../Config/")) {
             $file = fopen(self::getJSONpath(), 'w');
             fwrite($file, json_encode(array("name" => $vform->get('name')->getData(), "addr" => $vform->get('addr')->getData(), "addr2" => $vform->get('addr2')->getData(), "zipcode" => $vform->get('zipcode')->getData(), "city" => $vform->get('city')->getData(), "tel" => $vform->get('tel')->getData(), "mobile" => $vform->get('mobile')->getData(), "mail" => $vform->get('mail')->getData(), "expcode" => $vform->get('expcode')->getData())));
             fclose($file);
             return $this->generateRedirectFromRoute("admin.module.configure", [], ['module_code' => "DpdClassic", 'current_tab' => "configure_export_exaprint", '_controller' => 'Thelia\\Controller\\Admin\\ModuleController::configureAction']);
         } else {
             throw new \Exception(Translator::getInstance()->trans("Can't write DpdClassic/Config/sender.json. Please change the rights on the file and/or the directory.", [], DpdClassic::DOMAIN_NAME));
         }
     } catch (\Exception $e) {
         $error_message = $e->getMessage();
     }
     $this->setupFormErrorContext(Translator::getInstance()->trans("Error while updating the file with sender information", [], DpdClassic::DOMAIN_NAME), $error_message, $form);
     return $this->render('module-configure', ['module_code' => DpdClassic::getModuleCode(), 'current_tab' => "configure_export_exaprint"]);
 }
예제 #12
0
 /**
  * @return null
  */
 protected function buildForm()
 {
     $freeShipping = DpdClassic::getConfigValue('freeshipping');
     $this->formBuilder->add("freeshipping", "checkbox", ['data' => boolval($freeShipping), 'label' => Translator::getInstance()->trans("Activate free shipping: ", [], DpdClassic::DOMAIN_NAME)]);
 }
예제 #13
0
 public function buildModelCriteria()
 {
     return OrderQuery::create()->filterByDeliveryModuleId(DpdClassic::getModuleId())->filterByStatusId([DpdClassic::STATUS_PAID, DpdClassic::STATUS_PROCESSING])->orderByCreatedAt(Criteria::DESC);
 }
예제 #14
0
 public function exportFileAction()
 {
     if (null !== ($response = $this->checkAuth(array(AdminResources::MODULE), array('DpdClassic'), AccessManager::UPDATE))) {
         return $response;
     }
     if (is_readable(ExportExaprintController::getJSONpath())) {
         $admici = json_decode(file_get_contents(ExportExaprintController::getJSONpath()), true);
         $keys = array("name", "addr", "zipcode", "city", "tel", "mobile", "mail", "expcode");
         $valid = true;
         foreach ($keys as $key) {
             $valid &= isset($admici[$key]) && ($key === "assur" ? true : !empty($admici[$key]));
         }
         if (!$valid) {
             return Response::create(Translator::getInstance()->trans("The file DpdClassic/Config/sender.json is not valid. Please correct it.", [], DpdClassic::DOMAIN_NAME), 500);
         }
     } else {
         return Response::create(Translator::getInstance()->trans("Can't read DpdClassic/Config/sender.json. Did you save the export information ?", [], DpdClassic::DOMAIN_NAME), 500);
     }
     $exp_name = $admici['name'];
     $exp_address1 = $admici['addr'];
     $exp_address2 = isset($admici['addr2']) ? $admici['addr2'] : "";
     $exp_zipcode = $admici['zipcode'];
     $exp_city = $admici['city'];
     $exp_phone = $admici['tel'];
     $exp_cellphone = $admici['mobile'];
     $exp_email = $admici['mail'];
     $exp_code = $admici['expcode'];
     $res = self::harmonise('$' . "VERSION=110", 'alphanumeric', 12) . "\r\n";
     $orders = OrderQuery::create()->filterByDeliveryModuleId(DpdClassic::getModuleId())->find();
     // FORM VALIDATION
     $form = new ExportForm($this->getRequest());
     $status_id = null;
     try {
         $vform = $this->validateForm($form);
         $status_id = $vform->get("new_status_id")->getData();
         if (!preg_match("#^nochange|processing|sent\$#", $status_id)) {
             throw new \Exception("Invalid status ID. Expecting nochange or processing or sent");
         }
     } catch (\Exception $e) {
         Tlog::getInstance()->error("Form dpdclassic.export sent with bad infos. ");
         return Response::create(Translator::getInstance()->trans("Got invalid data : %err", ['%err' => $e->getMessage()], DpdClassic::DOMAIN_NAME), 500);
     }
     // For each selected order
     /** @var Order $order */
     foreach ($orders as $order) {
         $orderRef = str_replace(".", "-", $order->getRef());
         if ($vform->get($orderRef)->getData()) {
             // Get if the package is assured, how many packages there are & their weight
             $assur_package = $vform->get($orderRef . "-assur")->getData();
             $pkgNumber = $vform->get($orderRef . '-pkgNumber')->getData();
             $pkgWeight = $vform->get($orderRef . '-pkgWeight')->getData();
             // Check if status has to be changed
             if ($status_id == "processing") {
                 $event = new OrderEvent($order);
                 $status = OrderStatusQuery::create()->findOneByCode(OrderStatus::CODE_PROCESSING);
                 $event->setStatus($status->getId());
                 $this->getDispatcher()->dispatch(TheliaEvents::ORDER_UPDATE_STATUS, $event);
             } elseif ($status_id == "sent") {
                 $event = new OrderEvent($order);
                 $status = OrderStatusQuery::create()->findOneByCode(OrderStatus::CODE_SENT);
                 $event->setStatus($status->getId());
                 $this->getDispatcher()->dispatch(TheliaEvents::ORDER_UPDATE_STATUS, $event);
             }
             //Get customer's delivery address
             $address = OrderAddressQuery::create()->findPK($order->getDeliveryOrderAddressId());
             //Get Customer object
             $customer = CustomerQuery::create()->findPK($order->getCustomerId());
             // Get cellphone
             if (null == ($cellphone = $address->getCellphone())) {
                 $address->getPhone();
             }
             //Weight & price calc
             $price = 0;
             $price = $order->getTotalAmount($price, false);
             // tax = 0 && include postage = false
             $pkgWeight = floor($pkgWeight * 100);
             $assur_price = $assur_package == 'true' ? $price : 0;
             $date_format = date("d/m/y", $order->getUpdatedAt()->getTimestamp());
             $res .= self::harmonise($order->getRef(), 'alphanumeric', 35);
             // Order ref
             $res .= self::harmonise("", 'alphanumeric', 2);
             $res .= self::harmonise($pkgWeight, 'numeric', 8);
             // Package weight
             $res .= self::harmonise("", 'alphanumeric', 15);
             $res .= self::harmonise($address->getLastname(), 'alphanumeric', 35);
             // Delivered customer
             $res .= self::harmonise($address->getFirstname(), 'alphanumeric', 35);
             $res .= self::harmonise($address->getAddress2(), 'alphanumeric', 35);
             // Delivered address info
             $res .= self::harmonise($address->getAddress3(), 'alphanumeric', 35);
             $res .= self::harmonise("", 'alphanumeric', 35);
             $res .= self::harmonise("", 'alphanumeric', 35);
             $res .= self::harmonise($address->getZipcode(), 'alphanumeric', 10);
             // Delivered address
             $res .= self::harmonise($address->getCity(), 'alphanumeric', 35);
             $res .= self::harmonise("", 'alphanumeric', 10);
             $res .= self::harmonise($address->getAddress1(), 'alphanumeric', 35);
             $res .= self::harmonise("", 'alphanumeric', 10);
             $res .= self::harmonise("F", 'alphanumeric', 3);
             // Default delivered country code
             $res .= self::harmonise($address->getPhone(), 'alphanumeric', 30);
             // Delivered phone
             $res .= self::harmonise("", 'alphanumeric', 15);
             $res .= self::harmonise($exp_name, 'alphanumeric', 35);
             // Expeditor name
             $res .= self::harmonise($exp_address2, 'alphanumeric', 35);
             // Expeditor address
             $res .= self::harmonise("", 'alphanumeric', 140);
             $res .= self::harmonise($exp_zipcode, 'alphanumeric', 10);
             $res .= self::harmonise($exp_city, 'alphanumeric', 35);
             $res .= self::harmonise("", 'alphanumeric', 10);
             $res .= self::harmonise($exp_address1, 'alphanumeric', 35);
             $res .= self::harmonise("", 'alphanumeric', 10);
             $res .= self::harmonise("F", 'alphanumeric', 3);
             // Default expeditor country code
             $res .= self::harmonise($exp_phone, 'alphanumeric', 30);
             // Expeditor phone
             $res .= self::harmonise("", 'alphanumeric', 35);
             // Order comment 1
             $res .= self::harmonise("", 'alphanumeric', 35);
             // Order comment 2
             $res .= self::harmonise("", 'alphanumeric', 35);
             // Order comment 3
             $res .= self::harmonise("", 'alphanumeric', 35);
             // Order comment 4
             $res .= self::harmonise($date_format . ' ', 'alphanumeric', 10);
             // Date
             $res .= self::harmonise($exp_code, 'numeric', 8);
             // Expeditor DPD code
             $res .= self::harmonise("", 'alphanumeric', 35);
             // Bar code
             $res .= self::harmonise($customer->getRef(), 'alphanumeric', 35);
             // Customer ref
             $res .= self::harmonise("", 'alphanumeric', 29);
             $res .= self::harmonise($assur_price, 'float', 9);
             // Insured value
             $res .= self::harmonise("", 'alphanumeric', 8);
             $res .= self::harmonise($customer->getId(), 'alphanumeric', 35);
             // Customer ID
             $res .= self::harmonise("", 'alphanumeric', 46);
             $res .= self::harmonise($exp_email, 'alphanumeric', 80);
             // Expeditor email
             $res .= self::harmonise($exp_cellphone, 'alphanumeric', 35);
             // Expeditor cellphone
             $res .= self::harmonise($customer->getEmail(), 'alphanumeric', 80);
             // Customer email
             $res .= self::harmonise($cellphone, 'alphanumeric', 35);
             // Customer phone
             $res .= self::harmonise("", 'alphanumeric', 96);
             $res .= "\r\n";
         }
     }
     $response = new Response(utf8_decode(mb_strtoupper($res)), 200, array('Content-Type' => 'application/csv-tab-delimited-table;charset=iso-8859-1', 'Content-disposition' => 'filename=export.dat'));
     return $response;
 }