public function update_status(OrderEvent $event)
 {
     if ($event->getOrder()->getDeliveryModuleId() === DpdPickup::getModuleId()) {
         if ($event->getOrder()->getStatusId() === DpdPickup::STATUS_SENT) {
             $contact_email = ConfigQuery::read('store_email');
             if ($contact_email) {
                 $message = MessageQuery::create()->filterByName('order_confirmation_icirelais')->findOne();
                 if (false === $message) {
                     throw new \Exception("Failed to load message 'order_confirmation_icirelais'.");
                 }
                 $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 parseResults(LoopResult $loopResult)
 {
     $icirelaiskey = DpdPickup::getModuleId();
     $loopResult = parent::parseResults($loopResult);
     for ($loopResult->rewind(); $loopResult->valid(); $loopResult->next()) {
         $loopResult->current()->set("ICI_RELAIS_MODULE", $icirelaiskey);
     }
     return $loopResult;
 }
 public function buildArray()
 {
     $path = ExportExaprint::getJSONpath();
     if (is_readable($path) && ($order = OrderQuery::create()->findOneByRef($this->getRef())) !== null && $order->getDeliveryModuleId() === DpdPickup::getModuleId()) {
         $json = json_decode(file_get_contents($path), true);
         return array($this->getRef() => $json['expcode']);
     } else {
         return array();
     }
 }
 protected function check_module($id)
 {
     return $id == DpdPickup::getModuleId();
 }
Exemple #5
0
 public function exportfile()
 {
     if (null !== ($response = $this->checkAuth(array(AdminResources::MODULE), array('DpdPickup'), AccessManager::UPDATE))) {
         return $response;
     }
     if (is_readable(ExportExaprint::getJSONpath())) {
         $admici = json_decode(file_get_contents(ExportExaprint::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 DpdPickup/Config/exportdat.json is not valid. Please correct it.", [], DpdPickup::DOMAIN), 500);
         }
     } else {
         return Response::create(Translator::getInstance()->trans("Can't read DpdPickup/Config/exportdat.json. Did you save the export information ?", [], DpdPickup::DOMAIN), 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(DpdPickup::getModuleId())->find();
     // FORM VALIDATION
     $form = new ExportExaprintSelection($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 dpdpickup.selection sent with bad infos. ");
         return Response::create(Translator::getInstance()->trans("Got invalid data : %err", ['%err' => $e->getMessage()], DpdPickup::DOMAIN), 500);
     }
     // For each selected order
     /** @var Order $order */
     foreach ($orders as $order) {
         $orderRef = str_replace(".", "-", $order->getRef());
         $collectionKey = array_search($orderRef, $vform->getData()['order_ref']);
         if (false !== $collectionKey && array_key_exists($collectionKey, $vform->getData()['order_ref_check']) && $vform->getData()['order_ref_check'][$collectionKey]) {
             // Get if the package is assured, how many packages there are & their weight
             $assur_package = array_key_exists($collectionKey, $vform->getData()['assur']) ? $vform->getData()['assur'][$collectionKey] : false;
             $pkgNumber = array_key_exists($collectionKey, $vform->getData()['pkgNumber']) ? $vform->getData()['pkgNumber'][$collectionKey] : null;
             $pkgWeight = array_key_exists($collectionKey, $vform->getData()['pkgWeight']) ? $vform->getData()['pkgWeight'][$collectionKey] : null;
             // 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 invoice address
             $address = OrderAddressQuery::create()->findPK($order->getInvoiceOrderAddressId());
             //Get Customer object
             $customer = CustomerQuery::create()->findPK($order->getCustomerId());
             //Get OrderAddressDpdPickup object
             $icirelais_code = OrderAddressIcirelaisQuery::create()->findPK($order->getDeliveryOrderAddressId());
             if ($icirelais_code !== null) {
                 // Get Customer's cellphone
                 if (null == ($cellphone = $address->getCellphone())) {
                     $address->getPhone();
                 }
                 //Weight & price calc
                 $price = 0;
                 $price = $order->getTotalAmount($price, false);
                 // tax = 0 && include postage = flase
                 $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);
                 // Charged customer
                 $res .= self::harmonise($address->getFirstname(), 'alphanumeric', 35);
                 $res .= self::harmonise($address->getAddress2(), 'alphanumeric', 35);
                 // Invoice 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);
                 // Invoice 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 invoice country code
                 $res .= self::harmonise($address->getPhone(), 'alphanumeric', 30);
                 // Invoice 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);
                 // Invoice cellphone
                 $res .= self::harmonise("", 'alphanumeric', 96);
                 $res .= self::harmonise($icirelais_code->getCode(), 'alphanumeric', 8);
                 // DPD relay ID
                 $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;
 }
 public function buildModelCriteria()
 {
     return OrderQuery::create()->filterByDeliveryModuleId(DpdPickup::getModuleId())->filterByStatusId([DpdPickup::STATUS_PAID, DpdPickup::STATUS_PROCESSING])->orderByCreatedAt(Criteria::DESC);
 }