Ajout des modules ColissimoWs et ColissimoLabel.php
Ne pas oublier de vérifier si les tables nécessaires sont bien créées en BDD.
This commit is contained in:
170
local/modules/ColissimoLabel/ColissimoLabel.php
Normal file
170
local/modules/ColissimoLabel/ColissimoLabel.php
Normal file
@@ -0,0 +1,170 @@
|
||||
<?php
|
||||
/*************************************************************************************/
|
||||
/* This file is part of the Thelia package. */
|
||||
/* */
|
||||
/* Copyright (c) OpenStudio */
|
||||
/* email : dev@thelia.net */
|
||||
/* web : http://www.thelia.net */
|
||||
/* */
|
||||
/* For the full copyright and license information, please view the LICENSE.txt */
|
||||
/* file that was distributed with this source code. */
|
||||
/*************************************************************************************/
|
||||
|
||||
namespace ColissimoLabel;
|
||||
|
||||
use ColissimoLabel\Request\Helper\OutputFormat;
|
||||
use Propel\Runtime\Connection\ConnectionInterface;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Thelia\Module\BaseModule;
|
||||
use Thelia\Install\Database;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class ColissimoLabel extends BaseModule
|
||||
{
|
||||
/** @var string */
|
||||
const DOMAIN_NAME = 'colissimolabel';
|
||||
|
||||
const LABEL_FOLDER = THELIA_LOCAL_DIR . 'colissimo-label';
|
||||
|
||||
const BORDEREAU_FOLDER = self::LABEL_FOLDER . DIRECTORY_SEPARATOR . 'bordereau';
|
||||
|
||||
const CONFIG_KEY_DEFAULT_LABEL_FORMAT = 'default-label-format';
|
||||
|
||||
const CONFIG_KEY_CONTRACT_NUMBER = 'contract-number';
|
||||
|
||||
const CONFIG_KEY_PASSWORD = 'password';
|
||||
|
||||
const CONFIG_KEY_AUTO_SENT_STATUS = 'auto-sent-status';
|
||||
|
||||
const CONFIG_DEFAULT_AUTO_SENT_STATUS = 1;
|
||||
|
||||
const CONFIG_KEY_SENT_STATUS_ID = 'sent-status-id';
|
||||
|
||||
const CONFIG_DEFAULT_SENT_STATUS_ID = 4;
|
||||
|
||||
const CONFIG_KEY_PRE_FILL_INPUT_WEIGHT = 'pre-fill-input-weight';
|
||||
|
||||
const CONFIG_DEFAULT_PRE_FILL_INPUT_WEIGHT = 1;
|
||||
|
||||
const CONFIG_KEY_LAST_BORDEREAU_DATE = 'last-bordereau-date';
|
||||
|
||||
const CONFIG_DEFAULT_KEY_LAST_BORDEREAU_DATE = 1970;
|
||||
|
||||
/**
|
||||
* @param ConnectionInterface $con
|
||||
*/
|
||||
public function postActivation(ConnectionInterface $con = null)
|
||||
{
|
||||
static::checkLabelFolder();
|
||||
|
||||
if (!$this->getConfigValue('is_initialized', false)) {
|
||||
$database = new Database($con);
|
||||
$database->insertSql(null, [__DIR__ . "/Config/thelia.sql"]);
|
||||
$this->setConfigValue('is_initialized', true);
|
||||
}
|
||||
|
||||
$this->checkConfigurationsValues();
|
||||
}
|
||||
|
||||
public function update($currentVersion, $newVersion, ConnectionInterface $con = null)
|
||||
{
|
||||
parent::update($currentVersion, $newVersion, $con);
|
||||
|
||||
$this->checkConfigurationsValues();
|
||||
}
|
||||
|
||||
protected function checkConfigurationsValues()
|
||||
{
|
||||
if (null === self::getConfigValue(self::CONFIG_KEY_DEFAULT_LABEL_FORMAT)) {
|
||||
self::setConfigValue(
|
||||
self::CONFIG_KEY_DEFAULT_LABEL_FORMAT,
|
||||
OutputFormat::OUTPUT_PRINTING_TYPE_DEFAULT
|
||||
);
|
||||
}
|
||||
|
||||
if (null === self::getConfigValue(self::CONFIG_KEY_CONTRACT_NUMBER)) {
|
||||
self::setConfigValue(
|
||||
self::CONFIG_KEY_CONTRACT_NUMBER,
|
||||
""
|
||||
);
|
||||
}
|
||||
|
||||
if (null === self::getConfigValue(self::CONFIG_KEY_PASSWORD)) {
|
||||
self::setConfigValue(
|
||||
self::CONFIG_KEY_PASSWORD,
|
||||
""
|
||||
);
|
||||
}
|
||||
|
||||
if (null === self::getConfigValue(self::CONFIG_KEY_AUTO_SENT_STATUS)) {
|
||||
self::setConfigValue(
|
||||
self::CONFIG_KEY_AUTO_SENT_STATUS,
|
||||
self::CONFIG_DEFAULT_AUTO_SENT_STATUS
|
||||
);
|
||||
}
|
||||
|
||||
if (null === self::getConfigValue(self::CONFIG_KEY_SENT_STATUS_ID)) {
|
||||
self::setConfigValue(
|
||||
self::CONFIG_KEY_SENT_STATUS_ID,
|
||||
self::CONFIG_DEFAULT_SENT_STATUS_ID
|
||||
);
|
||||
}
|
||||
|
||||
if (null === self::getConfigValue(self::CONFIG_KEY_AUTO_SENT_STATUS)) {
|
||||
self::setConfigValue(
|
||||
self::CONFIG_KEY_AUTO_SENT_STATUS,
|
||||
self::CONFIG_DEFAULT_AUTO_SENT_STATUS
|
||||
);
|
||||
}
|
||||
|
||||
if (null === self::getConfigValue(self::CONFIG_KEY_PRE_FILL_INPUT_WEIGHT)) {
|
||||
self::setConfigValue(
|
||||
self::CONFIG_KEY_PRE_FILL_INPUT_WEIGHT,
|
||||
self::CONFIG_DEFAULT_PRE_FILL_INPUT_WEIGHT
|
||||
);
|
||||
}
|
||||
|
||||
if (null === self::getConfigValue(self::CONFIG_KEY_LAST_BORDEREAU_DATE)) {
|
||||
self::setConfigValue(
|
||||
self::CONFIG_KEY_LAST_BORDEREAU_DATE,
|
||||
self::CONFIG_DEFAULT_KEY_LAST_BORDEREAU_DATE
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static function checkLabelFolder()
|
||||
{
|
||||
$fileSystem = new Filesystem();
|
||||
|
||||
if (!$fileSystem->exists(self::LABEL_FOLDER)) {
|
||||
$fileSystem->mkdir(self::LABEL_FOLDER);
|
||||
}
|
||||
if (!$fileSystem->exists(self::BORDEREAU_FOLDER)) {
|
||||
$fileSystem->mkdir(self::BORDEREAU_FOLDER);
|
||||
}
|
||||
}
|
||||
|
||||
public static function getLabelPath($number, $extension)
|
||||
{
|
||||
return self::LABEL_FOLDER . DIRECTORY_SEPARATOR . $number . '.' . $extension;
|
||||
}
|
||||
|
||||
public static function getLabelCN23Path($number, $extension)
|
||||
{
|
||||
return self::LABEL_FOLDER . DIRECTORY_SEPARATOR . $number . '.' . $extension;
|
||||
}
|
||||
|
||||
public static function getBordereauPath($date)
|
||||
{
|
||||
return self::BORDEREAU_FOLDER . DIRECTORY_SEPARATOR . $date . '.pdf';
|
||||
}
|
||||
|
||||
|
||||
public static function getExtensionFile()
|
||||
{
|
||||
return strtolower(substr(ColissimoLabel::getConfigValue(ColissimoLabel::CONFIG_KEY_DEFAULT_LABEL_FORMAT), 0, 3));
|
||||
}
|
||||
}
|
||||
49
local/modules/ColissimoLabel/Config/config.xml
Normal file
49
local/modules/ColissimoLabel/Config/config.xml
Normal file
@@ -0,0 +1,49 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<config xmlns="http://thelia.net/schema/dic/config"
|
||||
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">
|
||||
|
||||
<loops>
|
||||
<loop name="colissimo-label" class="ColissimoLabel\Loop\ColissimoLabel" />
|
||||
</loops>
|
||||
|
||||
<forms>
|
||||
<!--
|
||||
<form name="MyFormName" class="ColissimoLabel\Form\MySuperForm" />
|
||||
-->
|
||||
</forms>
|
||||
|
||||
<commands>
|
||||
<!--
|
||||
<command class="ColissimoLabel\Command\MySuperCommand" />
|
||||
-->
|
||||
</commands>
|
||||
|
||||
<!--
|
||||
<services>
|
||||
|
||||
</services>
|
||||
-->
|
||||
|
||||
<hooks>
|
||||
<hook id="colissimo.label.hook.back.order_edit" class="ColissimoLabel\Hook\Back\OrderEditHook">
|
||||
<tag name="hook.event_listener" event="order.edit-js" type="back" method="onOrderEditJs" />
|
||||
</hook>
|
||||
<hook id="colissimo.label.hook.hook.main.in.top.menu.items" class="ColissimoLabel\Hook\Back\MenuHook">
|
||||
<tag name="hook.event_listener" event="main.in-top-menu-items" type="back" />
|
||||
</hook>
|
||||
</hooks>
|
||||
|
||||
<!--
|
||||
<exports>
|
||||
|
||||
</exports>
|
||||
-->
|
||||
|
||||
<!--
|
||||
<imports>
|
||||
|
||||
</imports>
|
||||
-->
|
||||
</config>
|
||||
28
local/modules/ColissimoLabel/Config/module.xml
Normal file
28
local/modules/ColissimoLabel/Config/module.xml
Normal file
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module xmlns="http://thelia.net/schema/dic/module"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://thelia.net/schema/dic/module http://thelia.net/schema/dic/module/module-2_2.xsd">
|
||||
<fullnamespace>ColissimoLabel\ColissimoLabel</fullnamespace>
|
||||
<descriptive locale="en_US">
|
||||
<title>Generate the delivery labels for Colissimo</title>
|
||||
</descriptive>
|
||||
<descriptive locale="fr_FR">
|
||||
<title>Genérer les étiquettes de livraison pour Colissimo</title>
|
||||
</descriptive>
|
||||
<languages>
|
||||
<language>en_US</language>
|
||||
<language>fr_FR</language>
|
||||
</languages>
|
||||
<version>0.3.4</version>
|
||||
<authors>
|
||||
<author>
|
||||
<name>Gilles Bourgeat</name>
|
||||
<email>gbourgeat@openstudio.fr</email>
|
||||
</author>
|
||||
</authors>
|
||||
<type>classic</type>
|
||||
<thelia>2.2.0</thelia>
|
||||
<stability>beta</stability>
|
||||
<mandatory>0</mandatory>
|
||||
<hidden>0</hidden>
|
||||
</module>
|
||||
31
local/modules/ColissimoLabel/Config/routing.xml
Normal file
31
local/modules/ColissimoLabel/Config/routing.xml
Normal file
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
|
||||
<routes xmlns="http://symfony.com/schema/routing"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
|
||||
|
||||
<route id="colissimolabel.admin.generate.label" path="/admin/module/colissimolabel/order/{orderId}/generate-label" methods="get">
|
||||
<default key="_controller">ColissimoLabel\Controller\Admin\OrderController::generateLabelAction</default>
|
||||
<requirement key="id">[0-9]+</requirement>
|
||||
</route>
|
||||
|
||||
<route id="colissimolabel.admin.get.label" path="/admin/module/colissimolabel/label/{number}" methods="get">
|
||||
<default key="_controller">ColissimoLabel\Controller\Admin\OrderController::getLabelAction</default>
|
||||
<requirement key="number">[0-9A-Z]+</requirement>
|
||||
</route>
|
||||
|
||||
<route id="colissimolabel.admin.get.list-labels" path="/admin/module/colissimolabel/order/{orderId}/ajax-get-labels" methods="get">
|
||||
<default key="_controller">ColissimoLabel\Controller\Admin\OrderController::getOrderLabelsAction</default>
|
||||
<requirement key="id">[0-9]+</requirement>
|
||||
</route>
|
||||
|
||||
<route id="colissimolabel.admin.bordereau.list" path="/admin/module/colissimolabel/bordereau/list" methods="get">
|
||||
<default key="_controller">ColissimoLabel\Controller\Admin\BordereauController::listBordereauAction</default>
|
||||
</route>
|
||||
<route id="colissimolabel.admin.bordereau.generate" path="/admin/module/colissimolabel/bordereau/generate" methods="get">
|
||||
<default key="_controller">ColissimoLabel\Controller\Admin\BordereauController::generateBordereauAction</default>
|
||||
</route>
|
||||
<route id="colissimolabel.admin.bordereau.download" path="/admin/module/colissimolabel/bordereau/download" methods="get">
|
||||
<default key="_controller">ColissimoLabel\Controller\Admin\BordereauController::downloadBordereauAction</default>
|
||||
</route>
|
||||
</routes>
|
||||
21
local/modules/ColissimoLabel/Config/schema.xml
Normal file
21
local/modules/ColissimoLabel/Config/schema.xml
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<database defaultIdMethod="native" name="thelia"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:noNamespaceSchemaLocation="../../../../vendor/propel/propel/resources/xsd/database.xsd" >
|
||||
|
||||
<table name="colissimo_label" namespace="ColissimoLabel\Model">
|
||||
<column autoIncrement="true" name="id" primaryKey="true" required="true" type="INTEGER" />
|
||||
|
||||
<column name="order_id" type="INTEGER" required="true" />
|
||||
<column name="weight" type="DECIMAL" scale="2" size="6" defaultValue="0.00" />
|
||||
<column name="number" type="VARCHAR" size="255" />
|
||||
|
||||
<foreign-key foreignTable="order" onDelete="CASCADE" onUpdate="RESTRICT">
|
||||
<reference local="order_id" foreign="id" />
|
||||
</foreign-key>
|
||||
|
||||
<behavior name="timestampable" />
|
||||
</table>
|
||||
|
||||
<external-schema filename="local/config/schema.xml" referenceOnly="true" />
|
||||
</database>
|
||||
30
local/modules/ColissimoLabel/Config/thelia.sql
Normal file
30
local/modules/ColissimoLabel/Config/thelia.sql
Normal file
@@ -0,0 +1,30 @@
|
||||
|
||||
# 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;
|
||||
|
||||
-- ---------------------------------------------------------------------
|
||||
-- colissimo_label
|
||||
-- ---------------------------------------------------------------------
|
||||
|
||||
DROP TABLE IF EXISTS `colissimo_label`;
|
||||
|
||||
CREATE TABLE `colissimo_label`
|
||||
(
|
||||
`id` INTEGER NOT NULL AUTO_INCREMENT,
|
||||
`order_id` INTEGER NOT NULL,
|
||||
`weight` DECIMAL(6,2) DEFAULT 0.00,
|
||||
`number` VARCHAR(255),
|
||||
`created_at` DATETIME,
|
||||
`updated_at` DATETIME,
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `colissimo_label_FI_1` (`order_id`),
|
||||
CONSTRAINT `colissimo_label_FK_1`
|
||||
FOREIGN KEY (`order_id`)
|
||||
REFERENCES `order` (`id`)
|
||||
ON UPDATE RESTRICT
|
||||
ON DELETE CASCADE
|
||||
) ENGINE=InnoDB;
|
||||
|
||||
# This restores the fkey checks, after having unset them earlier
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Controller\Admin;
|
||||
|
||||
use ColissimoLabel\ColissimoLabel;
|
||||
use ColissimoLabel\Model\ColissimoLabel as ColissimoLabelModel;
|
||||
use ColissimoLabel\Model\ColissimoLabelQuery;
|
||||
use ColissimoLabel\Request\Helper\BordereauRequestAPIConfiguration;
|
||||
use ColissimoLabel\Service\SOAPService;
|
||||
use Propel\Runtime\ActiveQuery\Criteria;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Component\Finder\Finder;
|
||||
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||
use Thelia\Controller\Admin\AdminController;
|
||||
|
||||
class BordereauController extends AdminController
|
||||
{
|
||||
public function listBordereauAction()
|
||||
{
|
||||
ColissimoLabel::checkLabelFolder();
|
||||
$lastBordereauDate = ColissimoLabel::getConfigValue(ColissimoLabel::CONFIG_KEY_LAST_BORDEREAU_DATE);
|
||||
|
||||
$finder = new Finder();
|
||||
$finder->files()->in(ColissimoLabel::BORDEREAU_FOLDER);
|
||||
|
||||
|
||||
$bordereaux = [];
|
||||
foreach ($finder as $file) {
|
||||
$bordereaux[] = [
|
||||
"name" => $file->getRelativePathname(),
|
||||
"path" => $file->getRealPath()
|
||||
];
|
||||
}
|
||||
|
||||
$bordereaux = array_reverse($bordereaux);
|
||||
sort($bordereaux);
|
||||
return $this->render('colissimo-label/bordereau-list', compact("lastBordereauDate", "bordereaux"));
|
||||
}
|
||||
|
||||
public function generateBordereauAction()
|
||||
{
|
||||
ColissimoLabel::checkLabelFolder();
|
||||
|
||||
$lastBordereauDate = ColissimoLabel::getConfigValue(ColissimoLabel::CONFIG_KEY_LAST_BORDEREAU_DATE);
|
||||
|
||||
$labels = ColissimoLabelQuery::create()
|
||||
->filterByCreatedAt($lastBordereauDate, Criteria::GREATER_THAN)
|
||||
->find();
|
||||
|
||||
$parcelNumbers = [];
|
||||
|
||||
/** @var ColissimoLabelModel $label */
|
||||
foreach ($labels as $label) {
|
||||
$parcelNumbers[] = $label->getNumber();
|
||||
}
|
||||
|
||||
$service = new SOAPService();
|
||||
$APIConfiguration = new BordereauRequestAPIConfiguration();
|
||||
$APIConfiguration->setContractNumber(ColissimoLabel::getConfigValue(ColissimoLabel::CONFIG_KEY_CONTRACT_NUMBER));
|
||||
$APIConfiguration->setPassword(ColissimoLabel::getConfigValue(ColissimoLabel::CONFIG_KEY_PASSWORD));
|
||||
|
||||
$parseResponse = $service->callGenerateBordereauByParcelsNumbersAPI($APIConfiguration, $parcelNumbers);
|
||||
$resultAttachment = $parseResponse->attachments;
|
||||
if (!isset($resultAttachment[0])) {
|
||||
throw new \Exception("No label found");
|
||||
}
|
||||
$bordereauContent = $resultAttachment[0];
|
||||
$fileContent = $bordereauContent["data"];
|
||||
|
||||
if ("" == $fileContent) {
|
||||
throw new \Exception("File is empty");
|
||||
}
|
||||
|
||||
$filePath = ColissimoLabel::getBordereauPath("bordereau_".(new \DateTime())->format("Y-m-d_H-i-s"));
|
||||
|
||||
$fileSystem = new Filesystem();
|
||||
$fileSystem->dumpFile(
|
||||
$filePath,
|
||||
$fileContent
|
||||
);
|
||||
|
||||
ColissimoLabel::setConfigValue(ColissimoLabel::CONFIG_KEY_LAST_BORDEREAU_DATE, (new \DateTime())->format("Y-m-d H:i:s"));
|
||||
|
||||
return $this->listBordereauAction();
|
||||
}
|
||||
|
||||
public function downloadBordereauAction()
|
||||
{
|
||||
$filePath = $this->getRequest()->get('filePath');
|
||||
return new BinaryFileResponse($filePath);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,173 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Controller\Admin;
|
||||
|
||||
use ColissimoLabel\ColissimoLabel;
|
||||
use ColissimoLabel\Event\ColissimoLabelEvents;
|
||||
use ColissimoLabel\Event\LabelRequestEvent;
|
||||
use ColissimoLabel\Model\ColissimoLabel as ColissimoLabelModel;
|
||||
use ColissimoLabel\Service\SOAPService;
|
||||
use ColissimoLabel\Request\Helper\LabelRequestAPIConfiguration;
|
||||
use ColissimoLabel\Request\LabelRequest;
|
||||
use Propel\Runtime\ActiveQuery\Criteria;
|
||||
use SoColissimo\Model\OrderAddressSocolissimoQuery;
|
||||
use Symfony\Component\Filesystem\Filesystem;
|
||||
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
|
||||
use Thelia\Controller\Admin\AdminController;
|
||||
use Thelia\Core\Event\Order\OrderEvent;
|
||||
use Thelia\Core\Event\TheliaEvents;
|
||||
use Thelia\Core\HttpFoundation\JsonResponse;
|
||||
use Thelia\Core\HttpFoundation\Request;
|
||||
use Thelia\Core\HttpFoundation\Response;
|
||||
use Thelia\Core\Security\AccessManager;
|
||||
use Thelia\Core\Security\Resource\AdminResources;
|
||||
use Thelia\Model\OrderQuery;
|
||||
use Thelia\Model\OrderStatusQuery;
|
||||
use Thelia\Tools\URL;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class OrderController extends AdminController
|
||||
{
|
||||
public function generateLabelAction(Request $request, $orderId)
|
||||
{
|
||||
if (null !== $response = $this->checkAuth(AdminResources::ORDER, [], AccessManager::UPDATE)) {
|
||||
return new JsonResponse([
|
||||
'error' => $this->getTranslator()->trans("Sorry, you're not allowed to perform this action")
|
||||
], 403);
|
||||
}
|
||||
|
||||
ColissimoLabel::checkLabelFolder();
|
||||
|
||||
$order = OrderQuery::create()->filterById((int) $orderId, Criteria::EQUAL)->findOne();
|
||||
|
||||
$APIConfiguration = new LabelRequestAPIConfiguration();
|
||||
|
||||
$APIConfiguration->setContractNumber(ColissimoLabel::getConfigValue(ColissimoLabel::CONFIG_KEY_CONTRACT_NUMBER));
|
||||
$APIConfiguration->setPassword(ColissimoLabel::getConfigValue(ColissimoLabel::CONFIG_KEY_PASSWORD));
|
||||
|
||||
if ('SoColissimo' === $order->getModuleRelatedByDeliveryModuleId()->getCode()) {
|
||||
if (null !== $addressSocolissimo = OrderAddressSocolissimoQuery::create()
|
||||
->findOneById($order->getDeliveryOrderAddressId())) {
|
||||
if ($addressSocolissimo) {
|
||||
$colissimoRequest = new LabelRequest(
|
||||
$order,
|
||||
$addressSocolissimo->getCode() == '0' ? null : $addressSocolissimo->getCode(),
|
||||
$addressSocolissimo->getType()
|
||||
);
|
||||
|
||||
$colissimoRequest->getLetter()->getService()->setCommercialName(
|
||||
$colissimoRequest->getLetter()->getSender()->getAddress()->getCompanyName()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!isset($colissimoRequest)) {
|
||||
$colissimoRequest = new LabelRequest($order);
|
||||
}
|
||||
|
||||
if (null !== $weight = $request->get('weight')) {
|
||||
$colissimoRequest->getLetter()->getParcel()->setWeight($weight);
|
||||
}
|
||||
|
||||
$service = new SOAPService();
|
||||
|
||||
$this->getDispatcher()->dispatch(
|
||||
ColissimoLabelEvents::LABEL_REQUEST,
|
||||
new LabelRequestEvent($colissimoRequest)
|
||||
);
|
||||
|
||||
$response = $service->callAPI($APIConfiguration, $colissimoRequest);
|
||||
|
||||
if ($response->isValid()) {
|
||||
$fileSystem = new Filesystem();
|
||||
|
||||
$fileSystem->dumpFile(
|
||||
ColissimoLabel::getLabelPath($response->getParcelNumber(), ColissimoLabel::getExtensionFile()),
|
||||
$response->getFile()
|
||||
);
|
||||
|
||||
if ($response->hasFileCN23()) {
|
||||
$fileSystem->dumpFile(
|
||||
ColissimoLabel::getLabelCN23Path($response->getParcelNumber(), ColissimoLabel::getExtensionFile()),
|
||||
$response->getFileCN23()
|
||||
);
|
||||
}
|
||||
|
||||
$colissimoLabelModel = (new ColissimoLabelModel())
|
||||
->setOrderId($order->getId())
|
||||
->setWeight($colissimoRequest->getLetter()->getParcel()->getWeight())
|
||||
->setNumber($response->getParcelNumber());
|
||||
|
||||
$colissimoLabelModel->save();
|
||||
|
||||
$order->setDeliveryRef($response->getParcelNumber());
|
||||
|
||||
$order->save();
|
||||
|
||||
if ((int) ColissimoLabel::getConfigValue(ColissimoLabel::CONFIG_KEY_AUTO_SENT_STATUS)) {
|
||||
$sentStatusId = (int) ColissimoLabel::getConfigValue(ColissimoLabel::CONFIG_KEY_SENT_STATUS_ID);
|
||||
|
||||
if ((int) $order->getOrderStatus()->getId() !== (int) $sentStatusId) {
|
||||
$order->setOrderStatus(
|
||||
OrderStatusQuery::create()->findOneById((int) $sentStatusId)
|
||||
);
|
||||
$this->getDispatcher()->dispatch(
|
||||
TheliaEvents::ORDER_UPDATE_STATUS,
|
||||
(new OrderEvent($order))->setStatus((int) $sentStatusId)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return new JsonResponse([
|
||||
'id' => $colissimoLabelModel->getId(),
|
||||
'url' => URL::getInstance()->absoluteUrl('/admin/module/colissimolabel/label/' . $response->getParcelNumber()),
|
||||
'number' => $response->getParcelNumber(),
|
||||
'order' => [
|
||||
'id' => $order->getId(),
|
||||
'status' => [
|
||||
'id' => $order->getOrderStatus()->getId()
|
||||
]
|
||||
]
|
||||
]);
|
||||
} else {
|
||||
return new JsonResponse([
|
||||
'error' => $response->getError()
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
public function getOrderLabelsAction($orderId)
|
||||
{
|
||||
if (null !== $response = $this->checkAuth(AdminResources::ORDER, [], AccessManager::UPDATE)) {
|
||||
return new Response($this->getTranslator()->trans("Sorry, you're not allowed to perform this action"), 403);
|
||||
}
|
||||
|
||||
return $this->render('colissimo-label/label-list', ['order_id' => $orderId]);
|
||||
}
|
||||
|
||||
public function getLabelAction(Request $request, $number)
|
||||
{
|
||||
if (null !== $response = $this->checkAuth(AdminResources::ORDER, [], AccessManager::UPDATE)) {
|
||||
return $response;
|
||||
}
|
||||
|
||||
$response = new BinaryFileResponse(
|
||||
ColissimoLabel::getLabelPath($number, ColissimoLabel::getExtensionFile())
|
||||
);
|
||||
|
||||
$ext = strtolower(substr(ColissimoLabel::getConfigValue(ColissimoLabel::CONFIG_KEY_DEFAULT_LABEL_FORMAT), 3));
|
||||
|
||||
if ($request->get('download')) {
|
||||
$response->setContentDisposition(
|
||||
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
|
||||
$number . '.' . ColissimoLabel::getExtensionFile()
|
||||
);
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
}
|
||||
11
local/modules/ColissimoLabel/Event/ColissimoLabelEvents.php
Normal file
11
local/modules/ColissimoLabel/Event/ColissimoLabelEvents.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Event;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class ColissimoLabelEvents
|
||||
{
|
||||
const LABEL_REQUEST = 'ColissimoLabel.labelRequest';
|
||||
}
|
||||
24
local/modules/ColissimoLabel/Event/LabelRequestEvent.php
Normal file
24
local/modules/ColissimoLabel/Event/LabelRequestEvent.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Event;
|
||||
|
||||
use ColissimoLabel\Request\LabelRequest;
|
||||
use Symfony\Component\EventDispatcher\Event;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class LabelRequestEvent extends Event
|
||||
{
|
||||
protected $labelRequest;
|
||||
|
||||
public function __construct(LabelRequest $labelRequest)
|
||||
{
|
||||
$this->labelRequest = $labelRequest;
|
||||
}
|
||||
|
||||
public function getLabelRequest()
|
||||
{
|
||||
return $this->labelRequest;
|
||||
}
|
||||
}
|
||||
9
local/modules/ColissimoLabel/Exception/Exception.php
Normal file
9
local/modules/ColissimoLabel/Exception/Exception.php
Normal file
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace ColissimoLabel\Exception;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class Exception extends \Exception
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
namespace ColissimoLabel\Exception;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class InvalidArgumentException extends \InvalidArgumentException
|
||||
{
|
||||
}
|
||||
17
local/modules/ColissimoLabel/Hook/Back/MenuHook.php
Normal file
17
local/modules/ColissimoLabel/Hook/Back/MenuHook.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace ColissimoLabel\Hook\Back;
|
||||
|
||||
use Thelia\Core\Event\Hook\HookRenderEvent;
|
||||
use Thelia\Core\Hook\BaseHook;
|
||||
|
||||
class MenuHook extends BaseHook
|
||||
{
|
||||
public function onMainInTopMenuItems(HookRenderEvent $event)
|
||||
{
|
||||
$event->add(
|
||||
$this->render('colissimo-label/hook/main.in.top.menu.items.html', [])
|
||||
);
|
||||
}
|
||||
}
|
||||
26
local/modules/ColissimoLabel/Hook/Back/OrderEditHook.php
Normal file
26
local/modules/ColissimoLabel/Hook/Back/OrderEditHook.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Hook\Back;
|
||||
|
||||
use ColissimoLabel\ColissimoLabel;
|
||||
use Thelia\Core\Event\Hook\HookRenderEvent;
|
||||
use Thelia\Core\Hook\BaseHook;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class OrderEditHook extends BaseHook
|
||||
{
|
||||
public function onOrderEditJs(HookRenderEvent $event)
|
||||
{
|
||||
$event->add($this->render(
|
||||
'colissimo-label/hook/order-edit-js.html',
|
||||
array_merge(
|
||||
$event->getArguments(),
|
||||
[
|
||||
'preFillWeightInput' => ColissimoLabel::getConfigValue(ColissimoLabel::CONFIG_KEY_PRE_FILL_INPUT_WEIGHT)
|
||||
]
|
||||
)
|
||||
));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
);
|
||||
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'Cancel' => 'Annuler',
|
||||
'Date' => 'Date',
|
||||
'Download' => 'Télécharger',
|
||||
'Generate bordereau for label since : %date' => 'Générer un bordereau pour les étiquettes créée depuis : %date',
|
||||
'Generate new label' => 'Générer une étiquette',
|
||||
'Labels Colissimo' => 'Étiquette Colissimo',
|
||||
'No existing label for this order' => 'Aucune étiquette pour cette commande',
|
||||
'Number' => 'Numéro',
|
||||
'Please wait ...' => 'Veillez patienter ...',
|
||||
'Print' => 'Imprimer',
|
||||
'Shipping weight :' => 'Poids d\'expédition :',
|
||||
'Tracking URL' => 'URL de tracking',
|
||||
'View' => 'Voir',
|
||||
'Weight' => 'Poids',
|
||||
);
|
||||
4
local/modules/ColissimoLabel/I18n/en_US.php
Normal file
4
local/modules/ColissimoLabel/I18n/en_US.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
return array(
|
||||
// 'an english string' => 'The displayed english string',
|
||||
);
|
||||
4
local/modules/ColissimoLabel/I18n/fr_FR.php
Normal file
4
local/modules/ColissimoLabel/I18n/fr_FR.php
Normal file
@@ -0,0 +1,4 @@
|
||||
<?php
|
||||
return array(
|
||||
// 'an english string' => 'La traduction française de la chaine',
|
||||
);
|
||||
21
local/modules/ColissimoLabel/LICENSE
Normal file
21
local/modules/ColissimoLabel/LICENSE
Normal file
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
67
local/modules/ColissimoLabel/Loop/ColissimoLabel.php
Normal file
67
local/modules/ColissimoLabel/Loop/ColissimoLabel.php
Normal file
@@ -0,0 +1,67 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Loop;
|
||||
|
||||
use ColissimoLabel\Model\ColissimoLabelQuery;
|
||||
use Thelia\Core\Template\Element\BaseLoop;
|
||||
use Thelia\Core\Template\Element\LoopResult;
|
||||
use Thelia\Core\Template\Element\LoopResultRow;
|
||||
use Thelia\Core\Template\Element\PropelSearchLoopInterface;
|
||||
use Thelia\Core\Template\Loop\Argument\Argument;
|
||||
use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
|
||||
|
||||
/**
|
||||
* Class CreditNoteStatus
|
||||
* @package CreditNote\Loop
|
||||
* @author Gilles Bourgeat <gilles.bourgeat@gmail.com>
|
||||
*
|
||||
* @method int getOrderId()
|
||||
*/
|
||||
class ColissimoLabel extends BaseLoop implements PropelSearchLoopInterface
|
||||
{
|
||||
protected $timestampable = true;
|
||||
|
||||
protected function getArgDefinitions()
|
||||
{
|
||||
return new ArgumentCollection(
|
||||
Argument::createIntTypeArgument('order_id', null, true)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* this method returns a Propel ModelCriteria
|
||||
*
|
||||
* @return \Propel\Runtime\ActiveQuery\ModelCriteria
|
||||
*/
|
||||
public function buildModelCriteria()
|
||||
{
|
||||
$query = new ColissimoLabelQuery();
|
||||
|
||||
$query->filterByOrderId($this->getOrderId());
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param LoopResult $loopResult
|
||||
*
|
||||
* @return LoopResult
|
||||
*/
|
||||
public function parseResults(LoopResult $loopResult)
|
||||
{
|
||||
/** @var \ColissimoLabel\Model\ColissimoLabel $entry */
|
||||
foreach ($loopResult->getResultDataCollection() as $entry) {
|
||||
$row = new LoopResultRow($entry);
|
||||
$row
|
||||
->set('WEIGHT', $entry->getWeight())
|
||||
->set("ID", $entry->getId())
|
||||
->set("NUMBER", $entry->getNumber())
|
||||
->set("ORDER_ID", $entry->getOrderId())
|
||||
;
|
||||
$this->addOutputFields($row, $entry);
|
||||
$loopResult->addRow($row);
|
||||
}
|
||||
|
||||
return $loopResult;
|
||||
}
|
||||
}
|
||||
1498
local/modules/ColissimoLabel/Model/Base/ColissimoLabel.php
Normal file
1498
local/modules/ColissimoLabel/Model/Base/ColissimoLabel.php
Normal file
File diff suppressed because it is too large
Load Diff
712
local/modules/ColissimoLabel/Model/Base/ColissimoLabelQuery.php
Normal file
712
local/modules/ColissimoLabel/Model/Base/ColissimoLabelQuery.php
Normal file
@@ -0,0 +1,712 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Model\Base;
|
||||
|
||||
use \Exception;
|
||||
use \PDO;
|
||||
use ColissimoLabel\Model\ColissimoLabel as ChildColissimoLabel;
|
||||
use ColissimoLabel\Model\ColissimoLabelQuery as ChildColissimoLabelQuery;
|
||||
use ColissimoLabel\Model\Map\ColissimoLabelTableMap;
|
||||
use Propel\Runtime\Propel;
|
||||
use Propel\Runtime\ActiveQuery\Criteria;
|
||||
use Propel\Runtime\ActiveQuery\ModelCriteria;
|
||||
use Propel\Runtime\ActiveQuery\ModelJoin;
|
||||
use Propel\Runtime\Collection\Collection;
|
||||
use Propel\Runtime\Collection\ObjectCollection;
|
||||
use Propel\Runtime\Connection\ConnectionInterface;
|
||||
use Propel\Runtime\Exception\PropelException;
|
||||
use Thelia\Model\Order;
|
||||
|
||||
/**
|
||||
* Base class that represents a query for the 'colissimo_label' table.
|
||||
*
|
||||
*
|
||||
*
|
||||
* @method ChildColissimoLabelQuery orderById($order = Criteria::ASC) Order by the id column
|
||||
* @method ChildColissimoLabelQuery orderByOrderId($order = Criteria::ASC) Order by the order_id column
|
||||
* @method ChildColissimoLabelQuery orderByWeight($order = Criteria::ASC) Order by the weight column
|
||||
* @method ChildColissimoLabelQuery orderByNumber($order = Criteria::ASC) Order by the number column
|
||||
* @method ChildColissimoLabelQuery orderByCreatedAt($order = Criteria::ASC) Order by the created_at column
|
||||
* @method ChildColissimoLabelQuery orderByUpdatedAt($order = Criteria::ASC) Order by the updated_at column
|
||||
*
|
||||
* @method ChildColissimoLabelQuery groupById() Group by the id column
|
||||
* @method ChildColissimoLabelQuery groupByOrderId() Group by the order_id column
|
||||
* @method ChildColissimoLabelQuery groupByWeight() Group by the weight column
|
||||
* @method ChildColissimoLabelQuery groupByNumber() Group by the number column
|
||||
* @method ChildColissimoLabelQuery groupByCreatedAt() Group by the created_at column
|
||||
* @method ChildColissimoLabelQuery groupByUpdatedAt() Group by the updated_at column
|
||||
*
|
||||
* @method ChildColissimoLabelQuery leftJoin($relation) Adds a LEFT JOIN clause to the query
|
||||
* @method ChildColissimoLabelQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query
|
||||
* @method ChildColissimoLabelQuery innerJoin($relation) Adds a INNER JOIN clause to the query
|
||||
*
|
||||
* @method ChildColissimoLabelQuery leftJoinOrder($relationAlias = null) Adds a LEFT JOIN clause to the query using the Order relation
|
||||
* @method ChildColissimoLabelQuery rightJoinOrder($relationAlias = null) Adds a RIGHT JOIN clause to the query using the Order relation
|
||||
* @method ChildColissimoLabelQuery innerJoinOrder($relationAlias = null) Adds a INNER JOIN clause to the query using the Order relation
|
||||
*
|
||||
* @method ChildColissimoLabel findOne(ConnectionInterface $con = null) Return the first ChildColissimoLabel matching the query
|
||||
* @method ChildColissimoLabel findOneOrCreate(ConnectionInterface $con = null) Return the first ChildColissimoLabel matching the query, or a new ChildColissimoLabel object populated from the query conditions when no match is found
|
||||
*
|
||||
* @method ChildColissimoLabel findOneById(int $id) Return the first ChildColissimoLabel filtered by the id column
|
||||
* @method ChildColissimoLabel findOneByOrderId(int $order_id) Return the first ChildColissimoLabel filtered by the order_id column
|
||||
* @method ChildColissimoLabel findOneByWeight(string $weight) Return the first ChildColissimoLabel filtered by the weight column
|
||||
* @method ChildColissimoLabel findOneByNumber(string $number) Return the first ChildColissimoLabel filtered by the number column
|
||||
* @method ChildColissimoLabel findOneByCreatedAt(string $created_at) Return the first ChildColissimoLabel filtered by the created_at column
|
||||
* @method ChildColissimoLabel findOneByUpdatedAt(string $updated_at) Return the first ChildColissimoLabel filtered by the updated_at column
|
||||
*
|
||||
* @method array findById(int $id) Return ChildColissimoLabel objects filtered by the id column
|
||||
* @method array findByOrderId(int $order_id) Return ChildColissimoLabel objects filtered by the order_id column
|
||||
* @method array findByWeight(string $weight) Return ChildColissimoLabel objects filtered by the weight column
|
||||
* @method array findByNumber(string $number) Return ChildColissimoLabel objects filtered by the number column
|
||||
* @method array findByCreatedAt(string $created_at) Return ChildColissimoLabel objects filtered by the created_at column
|
||||
* @method array findByUpdatedAt(string $updated_at) Return ChildColissimoLabel objects filtered by the updated_at column
|
||||
*
|
||||
*/
|
||||
abstract class ColissimoLabelQuery extends ModelCriteria
|
||||
{
|
||||
|
||||
/**
|
||||
* Initializes internal state of \ColissimoLabel\Model\Base\ColissimoLabelQuery object.
|
||||
*
|
||||
* @param string $dbName The database name
|
||||
* @param string $modelName The phpName of a model, e.g. 'Book'
|
||||
* @param string $modelAlias The alias for the model in this query, e.g. 'b'
|
||||
*/
|
||||
public function __construct($dbName = 'thelia', $modelName = '\\ColissimoLabel\\Model\\ColissimoLabel', $modelAlias = null)
|
||||
{
|
||||
parent::__construct($dbName, $modelName, $modelAlias);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a new ChildColissimoLabelQuery object.
|
||||
*
|
||||
* @param string $modelAlias The alias of a model in the query
|
||||
* @param Criteria $criteria Optional Criteria to build the query from
|
||||
*
|
||||
* @return ChildColissimoLabelQuery
|
||||
*/
|
||||
public static function create($modelAlias = null, $criteria = null)
|
||||
{
|
||||
if ($criteria instanceof \ColissimoLabel\Model\ColissimoLabelQuery) {
|
||||
return $criteria;
|
||||
}
|
||||
$query = new \ColissimoLabel\Model\ColissimoLabelQuery();
|
||||
if (null !== $modelAlias) {
|
||||
$query->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.
|
||||
*
|
||||
* <code>
|
||||
* $obj = $c->findPk(12, $con);
|
||||
* </code>
|
||||
*
|
||||
* @param mixed $key Primary key to use for the query
|
||||
* @param ConnectionInterface $con an optional connection object
|
||||
*
|
||||
* @return ChildColissimoLabel|array|mixed the result, formatted by the current formatter
|
||||
*/
|
||||
public function findPk($key, $con = null)
|
||||
{
|
||||
if ($key === null) {
|
||||
return null;
|
||||
}
|
||||
if ((null !== ($obj = ColissimoLabelTableMap::getInstanceFromPool((string) $key))) && !$this->formatter) {
|
||||
// the object is already in the instance pool
|
||||
return $obj;
|
||||
}
|
||||
if ($con === null) {
|
||||
$con = Propel::getServiceContainer()->getReadConnection(ColissimoLabelTableMap::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 ChildColissimoLabel A model object, or null if the key is not found
|
||||
*/
|
||||
protected function findPkSimple($key, $con)
|
||||
{
|
||||
$sql = 'SELECT ID, ORDER_ID, WEIGHT, NUMBER, CREATED_AT, UPDATED_AT FROM colissimo_label 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 ChildColissimoLabel();
|
||||
$obj->hydrate($row);
|
||||
ColissimoLabelTableMap::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 ChildColissimoLabel|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
|
||||
* <code>
|
||||
* $objs = $c->findPks(array(12, 56, 832), $con);
|
||||
* </code>
|
||||
* @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 ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function filterByPrimaryKey($key)
|
||||
{
|
||||
|
||||
return $this->addUsingAlias(ColissimoLabelTableMap::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 ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function filterByPrimaryKeys($keys)
|
||||
{
|
||||
|
||||
return $this->addUsingAlias(ColissimoLabelTableMap::ID, $keys, Criteria::IN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter the query on the id column
|
||||
*
|
||||
* Example usage:
|
||||
* <code>
|
||||
* $query->filterById(1234); // WHERE id = 1234
|
||||
* $query->filterById(array(12, 34)); // WHERE id IN (12, 34)
|
||||
* $query->filterById(array('min' => 12)); // WHERE id > 12
|
||||
* </code>
|
||||
*
|
||||
* @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 ChildColissimoLabelQuery 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(ColissimoLabelTableMap::ID, $id['min'], Criteria::GREATER_EQUAL);
|
||||
$useMinMax = true;
|
||||
}
|
||||
if (isset($id['max'])) {
|
||||
$this->addUsingAlias(ColissimoLabelTableMap::ID, $id['max'], Criteria::LESS_EQUAL);
|
||||
$useMinMax = true;
|
||||
}
|
||||
if ($useMinMax) {
|
||||
return $this;
|
||||
}
|
||||
if (null === $comparison) {
|
||||
$comparison = Criteria::IN;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->addUsingAlias(ColissimoLabelTableMap::ID, $id, $comparison);
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter the query on the order_id column
|
||||
*
|
||||
* Example usage:
|
||||
* <code>
|
||||
* $query->filterByOrderId(1234); // WHERE order_id = 1234
|
||||
* $query->filterByOrderId(array(12, 34)); // WHERE order_id IN (12, 34)
|
||||
* $query->filterByOrderId(array('min' => 12)); // WHERE order_id > 12
|
||||
* </code>
|
||||
*
|
||||
* @see filterByOrder()
|
||||
*
|
||||
* @param mixed $orderId 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 ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function filterByOrderId($orderId = null, $comparison = null)
|
||||
{
|
||||
if (is_array($orderId)) {
|
||||
$useMinMax = false;
|
||||
if (isset($orderId['min'])) {
|
||||
$this->addUsingAlias(ColissimoLabelTableMap::ORDER_ID, $orderId['min'], Criteria::GREATER_EQUAL);
|
||||
$useMinMax = true;
|
||||
}
|
||||
if (isset($orderId['max'])) {
|
||||
$this->addUsingAlias(ColissimoLabelTableMap::ORDER_ID, $orderId['max'], Criteria::LESS_EQUAL);
|
||||
$useMinMax = true;
|
||||
}
|
||||
if ($useMinMax) {
|
||||
return $this;
|
||||
}
|
||||
if (null === $comparison) {
|
||||
$comparison = Criteria::IN;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->addUsingAlias(ColissimoLabelTableMap::ORDER_ID, $orderId, $comparison);
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter the query on the weight column
|
||||
*
|
||||
* Example usage:
|
||||
* <code>
|
||||
* $query->filterByWeight(1234); // WHERE weight = 1234
|
||||
* $query->filterByWeight(array(12, 34)); // WHERE weight IN (12, 34)
|
||||
* $query->filterByWeight(array('min' => 12)); // WHERE weight > 12
|
||||
* </code>
|
||||
*
|
||||
* @param mixed $weight 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 ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function filterByWeight($weight = null, $comparison = null)
|
||||
{
|
||||
if (is_array($weight)) {
|
||||
$useMinMax = false;
|
||||
if (isset($weight['min'])) {
|
||||
$this->addUsingAlias(ColissimoLabelTableMap::WEIGHT, $weight['min'], Criteria::GREATER_EQUAL);
|
||||
$useMinMax = true;
|
||||
}
|
||||
if (isset($weight['max'])) {
|
||||
$this->addUsingAlias(ColissimoLabelTableMap::WEIGHT, $weight['max'], Criteria::LESS_EQUAL);
|
||||
$useMinMax = true;
|
||||
}
|
||||
if ($useMinMax) {
|
||||
return $this;
|
||||
}
|
||||
if (null === $comparison) {
|
||||
$comparison = Criteria::IN;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->addUsingAlias(ColissimoLabelTableMap::WEIGHT, $weight, $comparison);
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter the query on the number column
|
||||
*
|
||||
* Example usage:
|
||||
* <code>
|
||||
* $query->filterByNumber('fooValue'); // WHERE number = 'fooValue'
|
||||
* $query->filterByNumber('%fooValue%'); // WHERE number LIKE '%fooValue%'
|
||||
* </code>
|
||||
*
|
||||
* @param string $number 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 ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function filterByNumber($number = null, $comparison = null)
|
||||
{
|
||||
if (null === $comparison) {
|
||||
if (is_array($number)) {
|
||||
$comparison = Criteria::IN;
|
||||
} elseif (preg_match('/[\%\*]/', $number)) {
|
||||
$number = str_replace('*', '%', $number);
|
||||
$comparison = Criteria::LIKE;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->addUsingAlias(ColissimoLabelTableMap::NUMBER, $number, $comparison);
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter the query on the created_at column
|
||||
*
|
||||
* Example usage:
|
||||
* <code>
|
||||
* $query->filterByCreatedAt('2011-03-14'); // WHERE created_at = '2011-03-14'
|
||||
* $query->filterByCreatedAt('now'); // WHERE created_at = '2011-03-14'
|
||||
* $query->filterByCreatedAt(array('max' => 'yesterday')); // WHERE created_at > '2011-03-13'
|
||||
* </code>
|
||||
*
|
||||
* @param mixed $createdAt The value to use as filter.
|
||||
* Values can be integers (unix timestamps), DateTime objects, or strings.
|
||||
* Empty strings are treated as NULL.
|
||||
* 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 ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function filterByCreatedAt($createdAt = null, $comparison = null)
|
||||
{
|
||||
if (is_array($createdAt)) {
|
||||
$useMinMax = false;
|
||||
if (isset($createdAt['min'])) {
|
||||
$this->addUsingAlias(ColissimoLabelTableMap::CREATED_AT, $createdAt['min'], Criteria::GREATER_EQUAL);
|
||||
$useMinMax = true;
|
||||
}
|
||||
if (isset($createdAt['max'])) {
|
||||
$this->addUsingAlias(ColissimoLabelTableMap::CREATED_AT, $createdAt['max'], Criteria::LESS_EQUAL);
|
||||
$useMinMax = true;
|
||||
}
|
||||
if ($useMinMax) {
|
||||
return $this;
|
||||
}
|
||||
if (null === $comparison) {
|
||||
$comparison = Criteria::IN;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->addUsingAlias(ColissimoLabelTableMap::CREATED_AT, $createdAt, $comparison);
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter the query on the updated_at column
|
||||
*
|
||||
* Example usage:
|
||||
* <code>
|
||||
* $query->filterByUpdatedAt('2011-03-14'); // WHERE updated_at = '2011-03-14'
|
||||
* $query->filterByUpdatedAt('now'); // WHERE updated_at = '2011-03-14'
|
||||
* $query->filterByUpdatedAt(array('max' => 'yesterday')); // WHERE updated_at > '2011-03-13'
|
||||
* </code>
|
||||
*
|
||||
* @param mixed $updatedAt The value to use as filter.
|
||||
* Values can be integers (unix timestamps), DateTime objects, or strings.
|
||||
* Empty strings are treated as NULL.
|
||||
* 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 ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function filterByUpdatedAt($updatedAt = null, $comparison = null)
|
||||
{
|
||||
if (is_array($updatedAt)) {
|
||||
$useMinMax = false;
|
||||
if (isset($updatedAt['min'])) {
|
||||
$this->addUsingAlias(ColissimoLabelTableMap::UPDATED_AT, $updatedAt['min'], Criteria::GREATER_EQUAL);
|
||||
$useMinMax = true;
|
||||
}
|
||||
if (isset($updatedAt['max'])) {
|
||||
$this->addUsingAlias(ColissimoLabelTableMap::UPDATED_AT, $updatedAt['max'], Criteria::LESS_EQUAL);
|
||||
$useMinMax = true;
|
||||
}
|
||||
if ($useMinMax) {
|
||||
return $this;
|
||||
}
|
||||
if (null === $comparison) {
|
||||
$comparison = Criteria::IN;
|
||||
}
|
||||
}
|
||||
|
||||
return $this->addUsingAlias(ColissimoLabelTableMap::UPDATED_AT, $updatedAt, $comparison);
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter the query by a related \Thelia\Model\Order object
|
||||
*
|
||||
* @param \Thelia\Model\Order|ObjectCollection $order The related object(s) to use as filter
|
||||
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
|
||||
*
|
||||
* @return ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function filterByOrder($order, $comparison = null)
|
||||
{
|
||||
if ($order instanceof \Thelia\Model\Order) {
|
||||
return $this
|
||||
->addUsingAlias(ColissimoLabelTableMap::ORDER_ID, $order->getId(), $comparison);
|
||||
} elseif ($order instanceof ObjectCollection) {
|
||||
if (null === $comparison) {
|
||||
$comparison = Criteria::IN;
|
||||
}
|
||||
|
||||
return $this
|
||||
->addUsingAlias(ColissimoLabelTableMap::ORDER_ID, $order->toKeyValue('PrimaryKey', 'Id'), $comparison);
|
||||
} else {
|
||||
throw new PropelException('filterByOrder() only accepts arguments of type \Thelia\Model\Order or Collection');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a JOIN clause to the query using the Order relation
|
||||
*
|
||||
* @param string $relationAlias optional alias for the relation
|
||||
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'
|
||||
*
|
||||
* @return ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function joinOrder($relationAlias = null, $joinType = Criteria::INNER_JOIN)
|
||||
{
|
||||
$tableMap = $this->getTableMap();
|
||||
$relationMap = $tableMap->getRelation('Order');
|
||||
|
||||
// create a ModelJoin object for this join
|
||||
$join = new ModelJoin();
|
||||
$join->setJoinType($joinType);
|
||||
$join->setRelationMap($relationMap, $this->useAliasInSQL ? $this->getModelAlias() : null, $relationAlias);
|
||||
if ($previousJoin = $this->getPreviousJoin()) {
|
||||
$join->setPreviousJoin($previousJoin);
|
||||
}
|
||||
|
||||
// add the ModelJoin to the current object
|
||||
if ($relationAlias) {
|
||||
$this->addAlias($relationAlias, $relationMap->getRightTable()->getName());
|
||||
$this->addJoinObject($join, $relationAlias);
|
||||
} else {
|
||||
$this->addJoinObject($join, 'Order');
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Use the Order relation Order object
|
||||
*
|
||||
* @see useQuery()
|
||||
*
|
||||
* @param string $relationAlias optional alias for the relation,
|
||||
* to be used as main alias in the secondary query
|
||||
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'
|
||||
*
|
||||
* @return \Thelia\Model\OrderQuery A secondary query class using the current class as primary query
|
||||
*/
|
||||
public function useOrderQuery($relationAlias = null, $joinType = Criteria::INNER_JOIN)
|
||||
{
|
||||
return $this
|
||||
->joinOrder($relationAlias, $joinType)
|
||||
->useQuery($relationAlias ? $relationAlias : 'Order', '\Thelia\Model\OrderQuery');
|
||||
}
|
||||
|
||||
/**
|
||||
* Exclude object from result
|
||||
*
|
||||
* @param ChildColissimoLabel $colissimoLabel Object to remove from the list of results
|
||||
*
|
||||
* @return ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function prune($colissimoLabel = null)
|
||||
{
|
||||
if ($colissimoLabel) {
|
||||
$this->addUsingAlias(ColissimoLabelTableMap::ID, $colissimoLabel->getId(), Criteria::NOT_EQUAL);
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all rows from the colissimo_label 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(ColissimoLabelTableMap::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).
|
||||
ColissimoLabelTableMap::clearInstancePool();
|
||||
ColissimoLabelTableMap::clearRelatedInstancePool();
|
||||
|
||||
$con->commit();
|
||||
} catch (PropelException $e) {
|
||||
$con->rollBack();
|
||||
throw $e;
|
||||
}
|
||||
|
||||
return $affectedRows;
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a DELETE on the database, given a ChildColissimoLabel or Criteria object OR a primary key value.
|
||||
*
|
||||
* @param mixed $values Criteria or ChildColissimoLabel 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(ColissimoLabelTableMap::DATABASE_NAME);
|
||||
}
|
||||
|
||||
$criteria = $this;
|
||||
|
||||
// Set the correct dbName
|
||||
$criteria->setDbName(ColissimoLabelTableMap::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();
|
||||
|
||||
|
||||
ColissimoLabelTableMap::removeInstanceFromPool($criteria);
|
||||
|
||||
$affectedRows += ModelCriteria::delete($con);
|
||||
ColissimoLabelTableMap::clearRelatedInstancePool();
|
||||
$con->commit();
|
||||
|
||||
return $affectedRows;
|
||||
} catch (PropelException $e) {
|
||||
$con->rollBack();
|
||||
throw $e;
|
||||
}
|
||||
}
|
||||
|
||||
// timestampable behavior
|
||||
|
||||
/**
|
||||
* Filter by the latest updated
|
||||
*
|
||||
* @param int $nbDays Maximum age of the latest update in days
|
||||
*
|
||||
* @return ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function recentlyUpdated($nbDays = 7)
|
||||
{
|
||||
return $this->addUsingAlias(ColissimoLabelTableMap::UPDATED_AT, time() - $nbDays * 24 * 60 * 60, Criteria::GREATER_EQUAL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter by the latest created
|
||||
*
|
||||
* @param int $nbDays Maximum age of in days
|
||||
*
|
||||
* @return ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function recentlyCreated($nbDays = 7)
|
||||
{
|
||||
return $this->addUsingAlias(ColissimoLabelTableMap::CREATED_AT, time() - $nbDays * 24 * 60 * 60, Criteria::GREATER_EQUAL);
|
||||
}
|
||||
|
||||
/**
|
||||
* Order by update date desc
|
||||
*
|
||||
* @return ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function lastUpdatedFirst()
|
||||
{
|
||||
return $this->addDescendingOrderByColumn(ColissimoLabelTableMap::UPDATED_AT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Order by update date asc
|
||||
*
|
||||
* @return ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function firstUpdatedFirst()
|
||||
{
|
||||
return $this->addAscendingOrderByColumn(ColissimoLabelTableMap::UPDATED_AT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Order by create date desc
|
||||
*
|
||||
* @return ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function lastCreatedFirst()
|
||||
{
|
||||
return $this->addDescendingOrderByColumn(ColissimoLabelTableMap::CREATED_AT);
|
||||
}
|
||||
|
||||
/**
|
||||
* Order by create date asc
|
||||
*
|
||||
* @return ChildColissimoLabelQuery The current query, for fluid interface
|
||||
*/
|
||||
public function firstCreatedFirst()
|
||||
{
|
||||
return $this->addAscendingOrderByColumn(ColissimoLabelTableMap::CREATED_AT);
|
||||
}
|
||||
|
||||
} // ColissimoLabelQuery
|
||||
10
local/modules/ColissimoLabel/Model/ColissimoLabel.php
Normal file
10
local/modules/ColissimoLabel/Model/ColissimoLabel.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Model;
|
||||
|
||||
use ColissimoLabel\Model\Base\ColissimoLabel as BaseColissimoLabel;
|
||||
|
||||
class ColissimoLabel extends BaseColissimoLabel
|
||||
{
|
||||
|
||||
}
|
||||
21
local/modules/ColissimoLabel/Model/ColissimoLabelQuery.php
Normal file
21
local/modules/ColissimoLabel/Model/ColissimoLabelQuery.php
Normal file
@@ -0,0 +1,21 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Model;
|
||||
|
||||
use ColissimoLabel\Model\Base\ColissimoLabelQuery as BaseColissimoLabelQuery;
|
||||
|
||||
|
||||
/**
|
||||
* Skeleton subclass for performing query and update operations on the 'colissimo_label' table.
|
||||
*
|
||||
*
|
||||
*
|
||||
* You should add additional methods to this class to meet the
|
||||
* application requirements. This class will only be generated as
|
||||
* long as it does not already exist in the output directory.
|
||||
*
|
||||
*/
|
||||
class ColissimoLabelQuery extends BaseColissimoLabelQuery
|
||||
{
|
||||
|
||||
} // ColissimoLabelQuery
|
||||
@@ -0,0 +1,456 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Model\Map;
|
||||
|
||||
use ColissimoLabel\Model\ColissimoLabel;
|
||||
use ColissimoLabel\Model\ColissimoLabelQuery;
|
||||
use Propel\Runtime\Propel;
|
||||
use Propel\Runtime\ActiveQuery\Criteria;
|
||||
use Propel\Runtime\ActiveQuery\InstancePoolTrait;
|
||||
use Propel\Runtime\Connection\ConnectionInterface;
|
||||
use Propel\Runtime\DataFetcher\DataFetcherInterface;
|
||||
use Propel\Runtime\Exception\PropelException;
|
||||
use Propel\Runtime\Map\RelationMap;
|
||||
use Propel\Runtime\Map\TableMap;
|
||||
use Propel\Runtime\Map\TableMapTrait;
|
||||
|
||||
|
||||
/**
|
||||
* This class defines the structure of the 'colissimo_label' table.
|
||||
*
|
||||
*
|
||||
*
|
||||
* This map class is used by Propel to do runtime db structure discovery.
|
||||
* For example, the createSelectSql() method checks the type of a given column used in an
|
||||
* ORDER BY clause to know whether it needs to apply SQL to make the ORDER BY case-insensitive
|
||||
* (i.e. if it's a text column type).
|
||||
*
|
||||
*/
|
||||
class ColissimoLabelTableMap extends TableMap
|
||||
{
|
||||
use InstancePoolTrait;
|
||||
use TableMapTrait;
|
||||
/**
|
||||
* The (dot-path) name of this class
|
||||
*/
|
||||
const CLASS_NAME = 'ColissimoLabel.Model.Map.ColissimoLabelTableMap';
|
||||
|
||||
/**
|
||||
* The default database name for this class
|
||||
*/
|
||||
const DATABASE_NAME = 'thelia';
|
||||
|
||||
/**
|
||||
* The table name for this class
|
||||
*/
|
||||
const TABLE_NAME = 'colissimo_label';
|
||||
|
||||
/**
|
||||
* The related Propel class for this table
|
||||
*/
|
||||
const OM_CLASS = '\\ColissimoLabel\\Model\\ColissimoLabel';
|
||||
|
||||
/**
|
||||
* A class that can be returned by this tableMap
|
||||
*/
|
||||
const CLASS_DEFAULT = 'ColissimoLabel.Model.ColissimoLabel';
|
||||
|
||||
/**
|
||||
* The total number of columns
|
||||
*/
|
||||
const NUM_COLUMNS = 6;
|
||||
|
||||
/**
|
||||
* The number of lazy-loaded columns
|
||||
*/
|
||||
const NUM_LAZY_LOAD_COLUMNS = 0;
|
||||
|
||||
/**
|
||||
* The number of columns to hydrate (NUM_COLUMNS - NUM_LAZY_LOAD_COLUMNS)
|
||||
*/
|
||||
const NUM_HYDRATE_COLUMNS = 6;
|
||||
|
||||
/**
|
||||
* the column name for the ID field
|
||||
*/
|
||||
const ID = 'colissimo_label.ID';
|
||||
|
||||
/**
|
||||
* the column name for the ORDER_ID field
|
||||
*/
|
||||
const ORDER_ID = 'colissimo_label.ORDER_ID';
|
||||
|
||||
/**
|
||||
* the column name for the WEIGHT field
|
||||
*/
|
||||
const WEIGHT = 'colissimo_label.WEIGHT';
|
||||
|
||||
/**
|
||||
* the column name for the NUMBER field
|
||||
*/
|
||||
const NUMBER = 'colissimo_label.NUMBER';
|
||||
|
||||
/**
|
||||
* the column name for the CREATED_AT field
|
||||
*/
|
||||
const CREATED_AT = 'colissimo_label.CREATED_AT';
|
||||
|
||||
/**
|
||||
* the column name for the UPDATED_AT field
|
||||
*/
|
||||
const UPDATED_AT = 'colissimo_label.UPDATED_AT';
|
||||
|
||||
/**
|
||||
* The default string format for model objects of the related table
|
||||
*/
|
||||
const DEFAULT_STRING_FORMAT = 'YAML';
|
||||
|
||||
/**
|
||||
* holds an array of fieldnames
|
||||
*
|
||||
* first dimension keys are the type constants
|
||||
* e.g. self::$fieldNames[self::TYPE_PHPNAME][0] = 'Id'
|
||||
*/
|
||||
protected static $fieldNames = array (
|
||||
self::TYPE_PHPNAME => array('Id', 'OrderId', 'Weight', 'Number', 'CreatedAt', 'UpdatedAt', ),
|
||||
self::TYPE_STUDLYPHPNAME => array('id', 'orderId', 'weight', 'number', 'createdAt', 'updatedAt', ),
|
||||
self::TYPE_COLNAME => array(ColissimoLabelTableMap::ID, ColissimoLabelTableMap::ORDER_ID, ColissimoLabelTableMap::WEIGHT, ColissimoLabelTableMap::NUMBER, ColissimoLabelTableMap::CREATED_AT, ColissimoLabelTableMap::UPDATED_AT, ),
|
||||
self::TYPE_RAW_COLNAME => array('ID', 'ORDER_ID', 'WEIGHT', 'NUMBER', 'CREATED_AT', 'UPDATED_AT', ),
|
||||
self::TYPE_FIELDNAME => array('id', 'order_id', 'weight', 'number', 'created_at', 'updated_at', ),
|
||||
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, 'OrderId' => 1, 'Weight' => 2, 'Number' => 3, 'CreatedAt' => 4, 'UpdatedAt' => 5, ),
|
||||
self::TYPE_STUDLYPHPNAME => array('id' => 0, 'orderId' => 1, 'weight' => 2, 'number' => 3, 'createdAt' => 4, 'updatedAt' => 5, ),
|
||||
self::TYPE_COLNAME => array(ColissimoLabelTableMap::ID => 0, ColissimoLabelTableMap::ORDER_ID => 1, ColissimoLabelTableMap::WEIGHT => 2, ColissimoLabelTableMap::NUMBER => 3, ColissimoLabelTableMap::CREATED_AT => 4, ColissimoLabelTableMap::UPDATED_AT => 5, ),
|
||||
self::TYPE_RAW_COLNAME => array('ID' => 0, 'ORDER_ID' => 1, 'WEIGHT' => 2, 'NUMBER' => 3, 'CREATED_AT' => 4, 'UPDATED_AT' => 5, ),
|
||||
self::TYPE_FIELDNAME => array('id' => 0, 'order_id' => 1, 'weight' => 2, 'number' => 3, 'created_at' => 4, 'updated_at' => 5, ),
|
||||
self::TYPE_NUM => array(0, 1, 2, 3, 4, 5, )
|
||||
);
|
||||
|
||||
/**
|
||||
* 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('colissimo_label');
|
||||
$this->setPhpName('ColissimoLabel');
|
||||
$this->setClassName('\\ColissimoLabel\\Model\\ColissimoLabel');
|
||||
$this->setPackage('ColissimoLabel.Model');
|
||||
$this->setUseIdGenerator(true);
|
||||
// columns
|
||||
$this->addPrimaryKey('ID', 'Id', 'INTEGER', true, null, null);
|
||||
$this->addForeignKey('ORDER_ID', 'OrderId', 'INTEGER', 'order', 'ID', true, null, null);
|
||||
$this->addColumn('WEIGHT', 'Weight', 'DECIMAL', false, 6, 0);
|
||||
$this->addColumn('NUMBER', 'Number', 'VARCHAR', false, 255, null);
|
||||
$this->addColumn('CREATED_AT', 'CreatedAt', 'TIMESTAMP', false, null, null);
|
||||
$this->addColumn('UPDATED_AT', 'UpdatedAt', 'TIMESTAMP', false, null, null);
|
||||
} // initialize()
|
||||
|
||||
/**
|
||||
* Build the RelationMap objects for this table relationships
|
||||
*/
|
||||
public function buildRelations()
|
||||
{
|
||||
$this->addRelation('Order', '\\Thelia\\Model\\Order', RelationMap::MANY_TO_ONE, array('order_id' => 'id', ), 'CASCADE', 'RESTRICT');
|
||||
} // buildRelations()
|
||||
|
||||
/**
|
||||
*
|
||||
* Gets the list of behaviors registered for this table
|
||||
*
|
||||
* @return array Associative array (name => parameters) of behaviors
|
||||
*/
|
||||
public function getBehaviors()
|
||||
{
|
||||
return array(
|
||||
'timestampable' => array('create_column' => 'created_at', 'update_column' => 'updated_at', ),
|
||||
);
|
||||
} // getBehaviors()
|
||||
|
||||
/**
|
||||
* 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 ? ColissimoLabelTableMap::CLASS_DEFAULT : ColissimoLabelTableMap::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 (ColissimoLabel object, last column rank)
|
||||
*/
|
||||
public static function populateObject($row, $offset = 0, $indexType = TableMap::TYPE_NUM)
|
||||
{
|
||||
$key = ColissimoLabelTableMap::getPrimaryKeyHashFromRow($row, $offset, $indexType);
|
||||
if (null !== ($obj = ColissimoLabelTableMap::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 + ColissimoLabelTableMap::NUM_HYDRATE_COLUMNS;
|
||||
} else {
|
||||
$cls = ColissimoLabelTableMap::OM_CLASS;
|
||||
$obj = new $cls();
|
||||
$col = $obj->hydrate($row, $offset, false, $indexType);
|
||||
ColissimoLabelTableMap::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 = ColissimoLabelTableMap::getPrimaryKeyHashFromRow($row, 0, $dataFetcher->getIndexType());
|
||||
if (null !== ($obj = ColissimoLabelTableMap::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;
|
||||
ColissimoLabelTableMap::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(ColissimoLabelTableMap::ID);
|
||||
$criteria->addSelectColumn(ColissimoLabelTableMap::ORDER_ID);
|
||||
$criteria->addSelectColumn(ColissimoLabelTableMap::WEIGHT);
|
||||
$criteria->addSelectColumn(ColissimoLabelTableMap::NUMBER);
|
||||
$criteria->addSelectColumn(ColissimoLabelTableMap::CREATED_AT);
|
||||
$criteria->addSelectColumn(ColissimoLabelTableMap::UPDATED_AT);
|
||||
} else {
|
||||
$criteria->addSelectColumn($alias . '.ID');
|
||||
$criteria->addSelectColumn($alias . '.ORDER_ID');
|
||||
$criteria->addSelectColumn($alias . '.WEIGHT');
|
||||
$criteria->addSelectColumn($alias . '.NUMBER');
|
||||
$criteria->addSelectColumn($alias . '.CREATED_AT');
|
||||
$criteria->addSelectColumn($alias . '.UPDATED_AT');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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(ColissimoLabelTableMap::DATABASE_NAME)->getTable(ColissimoLabelTableMap::TABLE_NAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a TableMap instance to the database for this tableMap class.
|
||||
*/
|
||||
public static function buildTableMap()
|
||||
{
|
||||
$dbMap = Propel::getServiceContainer()->getDatabaseMap(ColissimoLabelTableMap::DATABASE_NAME);
|
||||
if (!$dbMap->hasTable(ColissimoLabelTableMap::TABLE_NAME)) {
|
||||
$dbMap->addTableObject(new ColissimoLabelTableMap());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs a DELETE on the database, given a ColissimoLabel or Criteria object OR a primary key value.
|
||||
*
|
||||
* @param mixed $values Criteria or ColissimoLabel 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(ColissimoLabelTableMap::DATABASE_NAME);
|
||||
}
|
||||
|
||||
if ($values instanceof Criteria) {
|
||||
// rename for clarity
|
||||
$criteria = $values;
|
||||
} elseif ($values instanceof \ColissimoLabel\Model\ColissimoLabel) { // 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(ColissimoLabelTableMap::DATABASE_NAME);
|
||||
$criteria->add(ColissimoLabelTableMap::ID, (array) $values, Criteria::IN);
|
||||
}
|
||||
|
||||
$query = ColissimoLabelQuery::create()->mergeWith($criteria);
|
||||
|
||||
if ($values instanceof Criteria) { ColissimoLabelTableMap::clearInstancePool();
|
||||
} elseif (!is_object($values)) { // it's a primary key, or an array of pks
|
||||
foreach ((array) $values as $singleval) { ColissimoLabelTableMap::removeInstanceFromPool($singleval);
|
||||
}
|
||||
}
|
||||
|
||||
return $query->delete($con);
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all rows from the colissimo_label 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 ColissimoLabelQuery::create()->doDeleteAll($con);
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs an INSERT on the database, given a ColissimoLabel or Criteria object.
|
||||
*
|
||||
* @param mixed $criteria Criteria or ColissimoLabel 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(ColissimoLabelTableMap::DATABASE_NAME);
|
||||
}
|
||||
|
||||
if ($criteria instanceof Criteria) {
|
||||
$criteria = clone $criteria; // rename for clarity
|
||||
} else {
|
||||
$criteria = $criteria->buildCriteria(); // build Criteria from ColissimoLabel object
|
||||
}
|
||||
|
||||
if ($criteria->containsKey(ColissimoLabelTableMap::ID) && $criteria->keyContainsValue(ColissimoLabelTableMap::ID) ) {
|
||||
throw new PropelException('Cannot insert a value for auto-increment primary key ('.ColissimoLabelTableMap::ID.')');
|
||||
}
|
||||
|
||||
|
||||
// Set the correct dbName
|
||||
$query = ColissimoLabelQuery::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;
|
||||
}
|
||||
|
||||
} // ColissimoLabelTableMap
|
||||
// This is the static code needed to register the TableMap for this table with the main Propel class.
|
||||
//
|
||||
ColissimoLabelTableMap::buildTableMap();
|
||||
22
local/modules/ColissimoLabel/Readme.md
Normal file
22
local/modules/ColissimoLabel/Readme.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# Colissimo Label
|
||||
|
||||
## Installation
|
||||
|
||||
### Manually
|
||||
|
||||
* Copy the module into ```<thelia_root>/local/modules/``` directory and be sure that the name of the module is ColissimoLabel.
|
||||
* Activate it in your thelia administration panel
|
||||
|
||||
### Composer
|
||||
|
||||
Add it in your main thelia composer.json file
|
||||
|
||||
```
|
||||
composer require thelia/colissimo-label-module:~0.3.2
|
||||
```
|
||||
|
||||
### Configuration
|
||||
|
||||
For the moment, this module does not have interface.
|
||||
You can change the values `contract-number` `password` on your table `module_config`
|
||||
|
||||
118
local/modules/ColissimoLabel/Request/AbstractLabelRequest.php
Normal file
118
local/modules/ColissimoLabel/Request/AbstractLabelRequest.php
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request;
|
||||
|
||||
use ColissimoLabel\Request\Helper\Letter;
|
||||
use ColissimoLabel\Request\Helper\OutputFormat;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
abstract class AbstractLabelRequest extends AbstractRequest
|
||||
{
|
||||
/** @var OutputFormat|null */
|
||||
private $outputFormat;
|
||||
|
||||
/** @var Letter */
|
||||
private $letter;
|
||||
|
||||
/**
|
||||
* @return OutputFormat|null
|
||||
*/
|
||||
public function getOutputFormat()
|
||||
{
|
||||
return $this->outputFormat;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param OutputFormat $outputFormat
|
||||
* @return self
|
||||
*/
|
||||
protected function setOutputFormat(OutputFormat $outputFormat)
|
||||
{
|
||||
$this->outputFormat = $outputFormat;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Letter
|
||||
*/
|
||||
public function getLetter()
|
||||
{
|
||||
return $this->letter;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Letter $letter
|
||||
* @return self
|
||||
*/
|
||||
protected function setLetter(Letter $letter)
|
||||
{
|
||||
$this->letter = $letter;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritdoc
|
||||
*/
|
||||
public function generateArrayRequest()
|
||||
{
|
||||
return array_merge_recursive(parent::generateArrayRequest(), [
|
||||
'outputFormat' => [
|
||||
'x' => $this->getOutputFormat()->getX(),
|
||||
'y' => $this->getOutputFormat()->getY(),
|
||||
'outputPrintingType' => $this->getOutputFormat()->getOutputPrintingType()
|
||||
],
|
||||
'letter' => [
|
||||
'service' => [
|
||||
"productCode" => $this->getLetter()->getService()->getProductCode(),
|
||||
"depositDate" => $this->getLetter()->getService()->getDepositDate()->format('Y-m-d'),
|
||||
"orderNumber" => $this->getLetter()->getService()->getOrderNumber(),
|
||||
'commercialName' => $this->getLetter()->getService()->getCommercialName()
|
||||
],
|
||||
'parcel' => [
|
||||
'weight' => $this->getLetter()->getParcel()->getWeight(),
|
||||
'pickupLocationId' => $this->getLetter()->getParcel()->getPickupLocationId()
|
||||
],
|
||||
'sender' => [
|
||||
'senderParcelRef' => $this->getLetter()->getSender()->getSenderParcelRef(),
|
||||
'address' => [
|
||||
'companyName' => $this->getLetter()->getSender()->getAddress()->getCompanyName(),
|
||||
'lastName' => $this->getLetter()->getSender()->getAddress()->getLastName(),
|
||||
'firstName' => $this->getLetter()->getSender()->getAddress()->getFirstName(),
|
||||
'line0' => $this->getLetter()->getSender()->getAddress()->getLine0(),
|
||||
'line1' => $this->getLetter()->getSender()->getAddress()->getLine1(),
|
||||
'line2' => $this->getLetter()->getSender()->getAddress()->getLine2(),
|
||||
'line3' => $this->getLetter()->getSender()->getAddress()->getLine3(),
|
||||
'countryCode' => $this->getLetter()->getSender()->getAddress()->getCountryCode(),
|
||||
'city' => $this->getLetter()->getSender()->getAddress()->getCity(),
|
||||
'zipCode' => $this->getLetter()->getSender()->getAddress()->getZipCode(),
|
||||
'phoneNumber' => $this->getLetter()->getSender()->getAddress()->getPhoneNumber(),
|
||||
'mobileNumber' => $this->getLetter()->getSender()->getAddress()->getMobileNumber(),
|
||||
'email'=> $this->getLetter()->getSender()->getAddress()->getEmail(),
|
||||
'language' => $this->getLetter()->getSender()->getAddress()->getLanguage()
|
||||
]
|
||||
],
|
||||
'addressee' => [
|
||||
'addresseeParcelRef' => $this->getLetter()->getAddressee()->getAddresseeParcelRef(),
|
||||
'address' => [
|
||||
'companyName' => $this->getLetter()->getAddressee()->getAddress()->getCompanyName(),
|
||||
'lastName' => $this->getLetter()->getAddressee()->getAddress()->getLastName(),
|
||||
'firstName' => $this->getLetter()->getAddressee()->getAddress()->getFirstName(),
|
||||
'line0' => $this->getLetter()->getAddressee()->getAddress()->getLine0(),
|
||||
'line1' => $this->getLetter()->getAddressee()->getAddress()->getLine1(),
|
||||
'line2' => $this->getLetter()->getAddressee()->getAddress()->getLine2(),
|
||||
'line3' => $this->getLetter()->getAddressee()->getAddress()->getLine3(),
|
||||
'countryCode' => $this->getLetter()->getAddressee()->getAddress()->getCountryCode(),
|
||||
'city' => $this->getLetter()->getAddressee()->getAddress()->getCity(),
|
||||
'zipCode' => $this->getLetter()->getAddressee()->getAddress()->getZipCode(),
|
||||
'phoneNumber' => $this->getLetter()->getAddressee()->getAddress()->getPhoneNumber(),
|
||||
'mobileNumber' => $this->getLetter()->getAddressee()->getAddress()->getMobileNumber(),
|
||||
'email'=> $this->getLetter()->getAddressee()->getAddress()->getEmail(),
|
||||
'language' => $this->getLetter()->getAddressee()->getAddress()->getLanguage()
|
||||
]
|
||||
]
|
||||
]
|
||||
]);
|
||||
}
|
||||
}
|
||||
57
local/modules/ColissimoLabel/Request/AbstractRequest.php
Normal file
57
local/modules/ColissimoLabel/Request/AbstractRequest.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
abstract class AbstractRequest
|
||||
{
|
||||
protected $contractNumber = '';
|
||||
|
||||
protected $password = '';
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getContractNumber()
|
||||
{
|
||||
return $this->contractNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $contractNumber
|
||||
* @return self
|
||||
*/
|
||||
public function setContractNumber($contractNumber)
|
||||
{
|
||||
$this->contractNumber = $contractNumber;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPassword()
|
||||
{
|
||||
return $this->password;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $password
|
||||
* @return self
|
||||
*/
|
||||
public function setPassword($password)
|
||||
{
|
||||
$this->password = $password;
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function generateArrayRequest()
|
||||
{
|
||||
return [
|
||||
'contractNumber' => $this->getContractNumber(),
|
||||
'password' => $this->getPassword()
|
||||
];
|
||||
}
|
||||
}
|
||||
118
local/modules/ColissimoLabel/Request/Helper/APIConfiguration.php
Normal file
118
local/modules/ColissimoLabel/Request/Helper/APIConfiguration.php
Normal file
@@ -0,0 +1,118 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request\Helper;
|
||||
|
||||
use Thelia\Model\ConfigQuery;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
abstract class APIConfiguration
|
||||
{
|
||||
protected $contractNumber = '';
|
||||
|
||||
protected $password = '';
|
||||
|
||||
protected $version = '2.0';
|
||||
|
||||
protected $wsdl = '';
|
||||
|
||||
protected $method = '';
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->setContractNumber(ConfigQuery::read('colissimo.api.contract.number'));
|
||||
$this->setPassword(ConfigQuery::read('colissimo.api.password'));
|
||||
$this->setWsdl('https://ws.colissimo.fr/sls-ws/SlsServiceWS/2.0?wsdl');
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getContractNumber()
|
||||
{
|
||||
return $this->contractNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $contractNumber
|
||||
* @return self
|
||||
*/
|
||||
public function setContractNumber($contractNumber)
|
||||
{
|
||||
$this->contractNumber = $contractNumber;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPassword()
|
||||
{
|
||||
return $this->password;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $password
|
||||
* @return self
|
||||
*/
|
||||
public function setPassword($password)
|
||||
{
|
||||
$this->password = $password;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getVersion()
|
||||
{
|
||||
return $this->version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $version
|
||||
* @return self
|
||||
*/
|
||||
public function setVersion($version)
|
||||
{
|
||||
$this->version = $version;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getWsdl()
|
||||
{
|
||||
return $this->wsdl;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $wsdl
|
||||
* @return self
|
||||
*/
|
||||
public function setWsdl($wsdl)
|
||||
{
|
||||
$this->wsdl = $wsdl;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getMethod()
|
||||
{
|
||||
return $this->method;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $method
|
||||
* @return self
|
||||
*/
|
||||
public function setMethod($method)
|
||||
{
|
||||
$this->method = $method;
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
289
local/modules/ColissimoLabel/Request/Helper/Address.php
Normal file
289
local/modules/ColissimoLabel/Request/Helper/Address.php
Normal file
@@ -0,0 +1,289 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request\Helper;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class Address
|
||||
{
|
||||
protected $companyName ='';
|
||||
|
||||
protected $lastName = '';
|
||||
|
||||
protected $firstName = '';
|
||||
|
||||
protected $line0 = '';
|
||||
|
||||
protected $line1 = '';
|
||||
|
||||
protected $line2 = '';
|
||||
|
||||
protected $line3 = '';
|
||||
|
||||
protected $countryCode = '';
|
||||
|
||||
protected $city = '';
|
||||
|
||||
protected $zipCode = '';
|
||||
|
||||
protected $phoneNumber = '';
|
||||
|
||||
protected $mobileNumber = '';
|
||||
|
||||
protected $email = '';
|
||||
|
||||
protected $language = '';
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getLanguage()
|
||||
{
|
||||
return $this->language;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $language
|
||||
* @return Address
|
||||
*/
|
||||
public function setLanguage($language)
|
||||
{
|
||||
$this->language = $language;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPhoneNumber()
|
||||
{
|
||||
return $this->phoneNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $phoneNumber
|
||||
* @return Address
|
||||
*/
|
||||
public function setPhoneNumber($phoneNumber)
|
||||
{
|
||||
$this->phoneNumber = $phoneNumber;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getMobileNumber()
|
||||
{
|
||||
return $this->mobileNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $mobileNumber
|
||||
* @return Address
|
||||
*/
|
||||
public function setMobileNumber($mobileNumber)
|
||||
{
|
||||
$this->mobileNumber = $mobileNumber;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getEmail()
|
||||
{
|
||||
return $this->email;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $email
|
||||
* @return Address
|
||||
*/
|
||||
public function setEmail($email)
|
||||
{
|
||||
$this->email = $email;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getCompanyName()
|
||||
{
|
||||
return $this->companyName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $companyName
|
||||
* @return self
|
||||
*/
|
||||
public function setCompanyName($companyName)
|
||||
{
|
||||
$this->companyName = $companyName;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getLastName()
|
||||
{
|
||||
return $this->lastName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $lastName
|
||||
* @return self
|
||||
*/
|
||||
public function setLastName($lastName)
|
||||
{
|
||||
$this->lastName = $lastName;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getFirstName()
|
||||
{
|
||||
return $this->firstName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $firstName
|
||||
* @return self
|
||||
*/
|
||||
public function setFirstName($firstName)
|
||||
{
|
||||
$this->firstName = $firstName;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getLine0()
|
||||
{
|
||||
return $this->line0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $line0
|
||||
* @return self
|
||||
*/
|
||||
public function setLine0($line0)
|
||||
{
|
||||
$this->line0 = $line0;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getLine1()
|
||||
{
|
||||
return $this->line1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $line1
|
||||
* @return self
|
||||
*/
|
||||
public function setLine1($line1)
|
||||
{
|
||||
$this->line1 = $line1;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getLine2()
|
||||
{
|
||||
return $this->line2;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $line2
|
||||
* @return self
|
||||
*/
|
||||
public function setLine2($line2)
|
||||
{
|
||||
$this->line2 = $line2;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getLine3()
|
||||
{
|
||||
return $this->line3;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $line3
|
||||
* @return self
|
||||
*/
|
||||
public function setLine3($line3)
|
||||
{
|
||||
$this->line3 = $line3;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getCountryCode()
|
||||
{
|
||||
return $this->countryCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $countryCode
|
||||
* @return self
|
||||
*/
|
||||
public function setCountryCode($countryCode)
|
||||
{
|
||||
$this->countryCode = $countryCode;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getCity()
|
||||
{
|
||||
return $this->city;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $city
|
||||
* @return self
|
||||
*/
|
||||
public function setCity($city)
|
||||
{
|
||||
$this->city = $city;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getZipCode()
|
||||
{
|
||||
return $this->zipCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $zipCode
|
||||
* @return self
|
||||
*/
|
||||
public function setZipCode($zipCode)
|
||||
{
|
||||
$this->zipCode = $zipCode;
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
44
local/modules/ColissimoLabel/Request/Helper/Addressee.php
Normal file
44
local/modules/ColissimoLabel/Request/Helper/Addressee.php
Normal file
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request\Helper;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class Addressee
|
||||
{
|
||||
/** @var string */
|
||||
protected $addresseeParcelRef;
|
||||
|
||||
/** @var Address */
|
||||
protected $address;
|
||||
|
||||
public function __construct(Address $address)
|
||||
{
|
||||
$this->address = $address;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getAddresseeParcelRef()
|
||||
{
|
||||
return $this->addresseeParcelRef;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $addresseeParcelRef
|
||||
*/
|
||||
public function setAddresseeParcelRef($addresseeParcelRef)
|
||||
{
|
||||
$this->addresseeParcelRef = $addresseeParcelRef;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Address
|
||||
*/
|
||||
public function getAddress()
|
||||
{
|
||||
return $this->address;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request\Helper;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class BordereauRequestAPIConfiguration extends APIConfiguration
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->setMethod('generateBordereauByParcelsNumbers');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request\Helper;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class LabelRequestAPIConfiguration extends APIConfiguration
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
|
||||
$this->setMethod('generateLabel');
|
||||
}
|
||||
}
|
||||
65
local/modules/ColissimoLabel/Request/Helper/Letter.php
Normal file
65
local/modules/ColissimoLabel/Request/Helper/Letter.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request\Helper;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class Letter
|
||||
{
|
||||
/** @var Sender */
|
||||
protected $sender;
|
||||
|
||||
/** @var Addressee */
|
||||
protected $addressee;
|
||||
|
||||
/** @var Parcel */
|
||||
protected $parcel;
|
||||
|
||||
/** @var Service */
|
||||
protected $service;
|
||||
|
||||
public function __construct(
|
||||
Service $service,
|
||||
Sender $sender,
|
||||
Addressee $addressee,
|
||||
Parcel $parcel
|
||||
) {
|
||||
$this->sender = $sender;
|
||||
$this->addressee = $addressee;
|
||||
$this->parcel = $parcel;
|
||||
$this->service = $service;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Service
|
||||
*/
|
||||
public function getService()
|
||||
{
|
||||
return $this->service;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Sender
|
||||
*/
|
||||
public function getSender()
|
||||
{
|
||||
return $this->sender;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Addressee
|
||||
*/
|
||||
public function getAddressee()
|
||||
{
|
||||
return $this->addressee;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Parcel
|
||||
*/
|
||||
public function getParcel()
|
||||
{
|
||||
return $this->parcel;
|
||||
}
|
||||
}
|
||||
86
local/modules/ColissimoLabel/Request/Helper/OutputFormat.php
Normal file
86
local/modules/ColissimoLabel/Request/Helper/OutputFormat.php
Normal file
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request\Helper;
|
||||
|
||||
use ColissimoLabel\Exception\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class OutputFormat
|
||||
{
|
||||
const OUTPUT_PRINTING_TYPE = [
|
||||
0 => 'ZPL_10x15_203dpi',
|
||||
1 => 'ZPL_10x15_300dpi',
|
||||
2 => 'DPL_10x15_203dpi',
|
||||
3 => 'DPL_10x15_300dpi',
|
||||
4 => 'PDF_10x15_300dpi',
|
||||
5 => 'PDF_A4_300dpi'
|
||||
];
|
||||
|
||||
const OUTPUT_PRINTING_TYPE_DEFAULT = self::OUTPUT_PRINTING_TYPE[4];
|
||||
|
||||
protected $x = 0;
|
||||
|
||||
protected $y = 0;
|
||||
|
||||
protected $outputPrintingType = self::OUTPUT_PRINTING_TYPE_DEFAULT;
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getX()
|
||||
{
|
||||
return $this->x;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $x
|
||||
* @return self
|
||||
*/
|
||||
public function setX($x)
|
||||
{
|
||||
$this->x = (int) $x;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getY()
|
||||
{
|
||||
return $this->y;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $y
|
||||
* @return self
|
||||
*/
|
||||
public function setY($y)
|
||||
{
|
||||
$this->y = (int) $y;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string value of the list ColissimoAPI\Request\Helper\LabelOutputFormat::OUTPUT_PRINTING_TYPE
|
||||
*/
|
||||
public function getOutputPrintingType()
|
||||
{
|
||||
return $this->outputPrintingType;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $outputPrintingType value of the list ColissimoAPI\Request\Helper\LabelOutputFormat::OUTPUT_PRINTING_TYPE
|
||||
* @return self
|
||||
*/
|
||||
public function setOutputPrintingType($outputPrintingType)
|
||||
{
|
||||
if (\in_array($outputPrintingType, self::OUTPUT_PRINTING_TYPE)) {
|
||||
new InvalidArgumentException('Invalid value "' . $outputPrintingType . '" for argument $outputPrintingType');
|
||||
}
|
||||
|
||||
$this->outputPrintingType = $outputPrintingType;
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
74
local/modules/ColissimoLabel/Request/Helper/Parcel.php
Normal file
74
local/modules/ColissimoLabel/Request/Helper/Parcel.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request\Helper;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class Parcel
|
||||
{
|
||||
protected $weight = 0;
|
||||
|
||||
protected $instructions = '';
|
||||
|
||||
protected $pickupLocationId;
|
||||
|
||||
public function __construct($weight)
|
||||
{
|
||||
$this->weight = (float) $weight;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getWeight()
|
||||
{
|
||||
return $this->weight;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $weight
|
||||
* @return self
|
||||
*/
|
||||
public function setWeight($weight)
|
||||
{
|
||||
$this->weight = $weight;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getInstructions()
|
||||
{
|
||||
return $this->instructions;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $instructions
|
||||
* @return self
|
||||
*/
|
||||
public function setInstructions($instructions)
|
||||
{
|
||||
$this->instructions = $instructions;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getPickupLocationId()
|
||||
{
|
||||
return $this->pickupLocationId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $pickupLocationId
|
||||
* @return self
|
||||
*/
|
||||
public function setPickupLocationId($pickupLocationId)
|
||||
{
|
||||
$this->pickupLocationId = $pickupLocationId;
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
46
local/modules/ColissimoLabel/Request/Helper/Sender.php
Normal file
46
local/modules/ColissimoLabel/Request/Helper/Sender.php
Normal file
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request\Helper;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class Sender
|
||||
{
|
||||
/** @var string */
|
||||
protected $senderParcelRef;
|
||||
|
||||
/** @var Address */
|
||||
protected $address;
|
||||
|
||||
public function __construct(Address $address)
|
||||
{
|
||||
$this->address = $address;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getSenderParcelRef()
|
||||
{
|
||||
return $this->senderParcelRef;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $senderParcelRef
|
||||
* @return self
|
||||
*/
|
||||
public function setSenderParcelRef($senderParcelRef)
|
||||
{
|
||||
$this->senderParcelRef = $senderParcelRef;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Address
|
||||
*/
|
||||
public function getAddress()
|
||||
{
|
||||
return $this->address;
|
||||
}
|
||||
}
|
||||
136
local/modules/ColissimoLabel/Request/Helper/Service.php
Normal file
136
local/modules/ColissimoLabel/Request/Helper/Service.php
Normal file
@@ -0,0 +1,136 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request\Helper;
|
||||
|
||||
use ColissimoLabel\Exception\InvalidArgumentException;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class Service
|
||||
{
|
||||
const PRODUCT_CODE_LIST = [
|
||||
0 => 'DOM',
|
||||
1 => 'COLD',
|
||||
2 => 'DOS',
|
||||
3 => 'COL',
|
||||
4 => 'BPR',
|
||||
5 => 'A2P',
|
||||
6 => 'CORE',
|
||||
7 => 'COLR',
|
||||
8 => 'J+1 ',
|
||||
9 => 'CORI',
|
||||
10 => 'COM',
|
||||
11 => 'CDS',
|
||||
12 => 'ECO',
|
||||
13 => 'CORI',
|
||||
14 => 'COLI',
|
||||
15 => 'ACCI',
|
||||
16 => 'CMT',
|
||||
17 => 'PCS',
|
||||
18 => 'DOM',
|
||||
19 => 'DOS',
|
||||
20 => 'BDP'
|
||||
];
|
||||
|
||||
const PRODUCT_CODE_LIST_COMMERCIAL_NAME = [
|
||||
0 => 'France Colissimo Domicile - sans signature',
|
||||
1 => 'France Colissimo Domicile - sans signature',
|
||||
2 => 'France Colissimo Domicile - avec signature',
|
||||
3 => 'France Colissimo Domicile - avec signature',
|
||||
4 => 'France Colissimo - Point Retrait – en Bureau de Poste ** ',
|
||||
5 => 'France Colissimo - Point Retrait – en relais Pickup ou en consigne Pickup Station',
|
||||
6 => 'France Colissimo Retour France',
|
||||
7 => 'France Colissimo Flash - sans signature',
|
||||
8 => 'Colissimo Flash – avec signature',
|
||||
9 => 'Colissimo Retour International ',
|
||||
10 => 'Outre-Mer Colissimo Domicile - sans signature ',
|
||||
11 => 'Outre-Mer Colissimo Domicile - avec signature',
|
||||
12 => 'Outre-Mer Colissimo Eco OM',
|
||||
13 => 'Outre-Mer Colissimo Retour OM',
|
||||
14 => 'International Colissimo Expert International',
|
||||
15 => 'International Offre Economique Grand Export (offre en test pour la Chine pour un client Pilote)',
|
||||
16 => 'International (Europe) Colissimo - Point Retrait – en relais ****',
|
||||
17 => 'International (Europe) Colissimo - Point Retrait – Consigne Pickup Station – Sauf France et Belgique',
|
||||
18 => 'International (Europe) Colissimo Domicile - sans signature ****',
|
||||
19 => 'International (Europe) Colissimo Domicile - avec signature ****',
|
||||
20 => 'International (Europe) Colissimo Point Retrait – en bureau de poste ****'
|
||||
];
|
||||
|
||||
|
||||
protected $productCode = '';
|
||||
|
||||
/** @var \DateTime */
|
||||
protected $depositDate;
|
||||
|
||||
protected $orderNumber = '';
|
||||
|
||||
protected $commercialName = '';
|
||||
|
||||
public function __construct($productCode, \DateTime $depositDate, $orderNumber)
|
||||
{
|
||||
if (empty($orderNumber)) {
|
||||
throw new InvalidArgumentException('Invalid argument orderNumber');
|
||||
}
|
||||
|
||||
if (empty($productCode)) {
|
||||
throw new InvalidArgumentException('Invalid argument productCode');
|
||||
}
|
||||
|
||||
$this->orderNumber = $orderNumber;
|
||||
$this->depositDate = $depositDate;
|
||||
$this->productCode = $productCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getProductCode()
|
||||
{
|
||||
return $this->productCode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $productCode
|
||||
* @return $this
|
||||
*/
|
||||
public function setProductCode($productCode)
|
||||
{
|
||||
$this->productCode = $productCode;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \DateTime
|
||||
*/
|
||||
public function getDepositDate()
|
||||
{
|
||||
return $this->depositDate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getOrderNumber()
|
||||
{
|
||||
return $this->orderNumber;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getCommercialName()
|
||||
{
|
||||
return $this->commercialName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $commercialName
|
||||
* @return Service
|
||||
*/
|
||||
public function setCommercialName($commercialName)
|
||||
{
|
||||
$this->commercialName = $commercialName;
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
92
local/modules/ColissimoLabel/Request/LabelRequest.php
Normal file
92
local/modules/ColissimoLabel/Request/LabelRequest.php
Normal file
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request;
|
||||
|
||||
use ColissimoLabel\ColissimoLabel;
|
||||
use ColissimoLabel\Request\Helper\Addressee;
|
||||
use ColissimoLabel\Request\Helper\Letter;
|
||||
use ColissimoLabel\Request\Helper\OutputFormat;
|
||||
use ColissimoLabel\Request\Helper\Parcel;
|
||||
use ColissimoLabel\Request\Helper\Sender;
|
||||
use ColissimoLabel\Request\Helper\Service;
|
||||
use ColissimoLabel\Request\Traits\MethodCreateAddressFromOrderAddress;
|
||||
use ColissimoLabel\Request\Traits\MethodCreateAddressFromStore;
|
||||
use Thelia\Model\Order;
|
||||
use Thelia\Model\OrderAddress;
|
||||
use Thelia\Model\OrderAddressQuery;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class LabelRequest extends AbstractLabelRequest
|
||||
{
|
||||
use MethodCreateAddressFromStore;
|
||||
use MethodCreateAddressFromOrderAddress;
|
||||
|
||||
public function __construct(Order $order, $pickupCode = null, $pickupType = null)
|
||||
{
|
||||
$orderAddress = OrderAddressQuery::create()->findOneById($order->getDeliveryOrderAddressId());
|
||||
|
||||
$this->setLetter(new Letter(
|
||||
new Service(
|
||||
null !== $pickupType ? $pickupType : $this->getProductCode($order),
|
||||
(new \DateTime()),
|
||||
$order->getRef()
|
||||
),
|
||||
new Sender(
|
||||
$this->createAddressFromStore()
|
||||
),
|
||||
new Addressee(
|
||||
$this->createAddressFromOrderAddress(
|
||||
$orderAddress,
|
||||
$order->getCustomer()
|
||||
)
|
||||
),
|
||||
new Parcel(
|
||||
$order->getWeight()
|
||||
)
|
||||
));
|
||||
|
||||
if (null !== $pickupCode) {
|
||||
$this->getLetter()->getParcel()->setPickupLocationId($pickupCode);
|
||||
}
|
||||
|
||||
//$this->getLetter()->getAddressee()->setAddresseeParcelRef($order->getRef());
|
||||
$this->getLetter()->getSender()->setSenderParcelRef($order->getRef());
|
||||
|
||||
$this->setOutputFormat(new OutputFormat());
|
||||
|
||||
$this->getOutputFormat()->setOutputPrintingType(
|
||||
ColissimoLabel::getConfigValue(ColissimoLabel::CONFIG_KEY_DEFAULT_LABEL_FORMAT)
|
||||
);
|
||||
}
|
||||
|
||||
protected function getProductCode(Order $order)
|
||||
{
|
||||
/** @var OrderAddress $deliveryAddress */
|
||||
$deliveryAddress = $order->getOrderAddressRelatedByDeliveryOrderAddressId();
|
||||
|
||||
$code = $deliveryAddress->getCountry()->getIsocode();
|
||||
|
||||
// france case
|
||||
if ($code == '250') {
|
||||
return Service::PRODUCT_CODE_LIST[0];
|
||||
} elseif (in_array( // europe
|
||||
$code,
|
||||
[
|
||||
"040", "056", "100", "191", "196", "203", "208", "233", "246", "250", "276", "300", "348", "372", "380", "428", "440", "442", "470", "528", "616", "620", "642", "705", "724", "752", "826"
|
||||
]
|
||||
)) {
|
||||
return Service::PRODUCT_CODE_LIST[0];
|
||||
} elseif (in_array( // europe
|
||||
$code,
|
||||
[
|
||||
"312", "254", "666", "474", "638", "175"
|
||||
]
|
||||
)) { // outre mer
|
||||
return Service::PRODUCT_CODE_LIST[10];
|
||||
} else { // other
|
||||
return Service::PRODUCT_CODE_LIST[14];
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request\Traits;
|
||||
|
||||
use ColissimoLabel\Request\Helper\Address;
|
||||
use Thelia\Model\Customer;
|
||||
use Thelia\Model\LangQuery;
|
||||
use Thelia\Model\OrderAddress;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
trait MethodCreateAddressFromOrderAddress
|
||||
{
|
||||
public function createAddressFromOrderAddress(OrderAddress $orderAddress, Customer $customer)
|
||||
{
|
||||
return (new Address())
|
||||
->setCompanyName($orderAddress->getCompany())
|
||||
->setFirstName($orderAddress->getFirstname())
|
||||
->setLastName($orderAddress->getLastname())
|
||||
->setCity($orderAddress->getCity())
|
||||
->setZipCode($orderAddress->getZipcode())
|
||||
->setCountryCode($orderAddress->getCountry()->getIsoalpha2())
|
||||
->setLine2($orderAddress->getAddress1())
|
||||
->setLine3($orderAddress->getAddress2())
|
||||
->setPhoneNumber(trim(str_replace(' ', '', $orderAddress->getPhone())))
|
||||
->setMobileNumber(trim(str_replace(' ', '', $orderAddress->getCellphone())))
|
||||
->setEmail($customer->getEmail())
|
||||
->setLanguage(strtoupper(LangQuery::create()->filterByByDefault(true)->findOne()->getCode()))
|
||||
;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Request\Traits;
|
||||
|
||||
use ColissimoLabel\Request\Helper\Address;
|
||||
use Thelia\Model\ConfigQuery;
|
||||
use Thelia\Model\CountryQuery;
|
||||
use Thelia\Model\LangQuery;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
trait MethodCreateAddressFromStore
|
||||
{
|
||||
public function createAddressFromStore()
|
||||
{
|
||||
return (new Address())
|
||||
->setCompanyName(ConfigQuery::read('store_name'))
|
||||
->setCity(ConfigQuery::read('store_city'))
|
||||
->setZipCode(ConfigQuery::read('store_zipcode'))
|
||||
->setCountryCode(CountryQuery::create()->findOneById(ConfigQuery::read('store_country'))->getIsoalpha2())
|
||||
->setLine2(ConfigQuery::read('store_address1'))
|
||||
->setLine3(ConfigQuery::read('store_address2'))
|
||||
->setEmail(trim(ConfigQuery::read('store_email')))
|
||||
->setPhoneNumber(trim(str_replace(' ', '', ConfigQuery::read('store_phone'))))
|
||||
->setLanguage(strtoupper(LangQuery::create()->filterByByDefault(true)->findOne()->getCode()))
|
||||
;
|
||||
}
|
||||
}
|
||||
78
local/modules/ColissimoLabel/Response/BordereauResponse.php
Normal file
78
local/modules/ColissimoLabel/Response/BordereauResponse.php
Normal file
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Response;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class BordereauResponse
|
||||
{
|
||||
const UUID = '/--uuid:/'; //This is the separator of each part of the response
|
||||
const CONTENT = 'Content-';
|
||||
|
||||
public $soapResponse;
|
||||
public $attachments = [];
|
||||
public $uuid;
|
||||
|
||||
public function __construct($soapResponse)
|
||||
{
|
||||
$this->soapResponse = $soapResponse;
|
||||
|
||||
$this->parseResponse($soapResponse);
|
||||
}
|
||||
|
||||
protected function parseResponse($response)
|
||||
{
|
||||
$content = array ();
|
||||
$matches = array ();
|
||||
preg_match_all(self::UUID, $response, $matches, PREG_OFFSET_CAPTURE);
|
||||
|
||||
for($i = 0; $i < count ( $matches [0] ) -1; $i ++) {
|
||||
if ($i + 1 < count ( $matches [0] )) {
|
||||
$content [$i] = substr ( $response, $matches [0] [$i] [1], $matches [0] [$i + 1] [1] - $matches [0][$i] [1] );
|
||||
} else {
|
||||
$content [$i] = substr ( $response, $matches [0] [$i] [1], strlen ( $response ) );
|
||||
}
|
||||
}
|
||||
|
||||
foreach ( $content as $part ) {
|
||||
if ($this->uuid == null) {
|
||||
$uuidStart = 0;
|
||||
$uuidEnd = 0;
|
||||
$uuidStart = strpos($part, self::UUID, 0) + strlen(self::UUID);
|
||||
$uuidEnd = strpos($part, "\r\n", $uuidStart);
|
||||
$this->uuid = substr($part, $uuidStart, $uuidEnd - $uuidStart);
|
||||
}
|
||||
$header = $this->extractHeader($part);
|
||||
if(count($header) > 0) {
|
||||
if (strpos($header['Content-Type'], 'type="text/xml"') !== FALSE) {
|
||||
$this->soapResponse['header'] = $header;
|
||||
$this->soapResponse['data'] = trim(substr($part, $header['offsetEnd']));
|
||||
} else {
|
||||
$attachment['header'] = $header;
|
||||
$attachment['data'] = trim(substr($part, $header['offsetEnd']));
|
||||
array_push($this->attachments, $attachment);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Exclude the header from the Web Service response * @param string $part
|
||||
* @return array $header
|
||||
*/
|
||||
private function extractHeader($part)
|
||||
{
|
||||
$header = array();
|
||||
$headerLineStart = strpos($part, self::CONTENT, 0);
|
||||
$endLine = 0;
|
||||
while($headerLineStart !== FALSE) {
|
||||
$header['offsetStart'] = $headerLineStart;
|
||||
$endLine = strpos($part, "\r\n", $headerLineStart);
|
||||
$headerLine = explode(': ', substr($part, $headerLineStart, $endLine-$headerLineStart)); $header[$headerLine[0]] = $headerLine[1];
|
||||
$headerLineStart = strpos($part, self::CONTENT, $endLine);
|
||||
}
|
||||
$header['offsetEnd'] = $endLine;
|
||||
return $header;
|
||||
}
|
||||
}
|
||||
155
local/modules/ColissimoLabel/Response/LabelResponse.php
Normal file
155
local/modules/ColissimoLabel/Response/LabelResponse.php
Normal file
@@ -0,0 +1,155 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Response;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class LabelResponse
|
||||
{
|
||||
const UUID = '/--uuid:/'; //This is the separator of each part of the response
|
||||
const CONTENT = 'Content-';
|
||||
|
||||
protected $soapResponse;
|
||||
protected $cacheAttachments = [];
|
||||
protected $cacheSoapResponse = [];
|
||||
protected $uuid;
|
||||
|
||||
public function __construct($soapResponse)
|
||||
{
|
||||
$this->soapResponse = $soapResponse;
|
||||
|
||||
$this->parseResponse($soapResponse);
|
||||
}
|
||||
|
||||
public function getFile()
|
||||
{
|
||||
if ($this->isValid()) {
|
||||
return $this->cacheAttachments[0]["data"];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getParcelNumber()
|
||||
{
|
||||
if ($this->isValid()) {
|
||||
$pieces = explode("<parcelNumber>", $this->cacheSoapResponse["data"]);
|
||||
$pieces = explode("</parcelNumber>", $pieces[1]);
|
||||
|
||||
return $pieces[0];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function hasFileCN23()
|
||||
{
|
||||
if ($this->isValid()) {
|
||||
return isset($this->cacheAttachments[1]["data"]);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getFileCN23()
|
||||
{
|
||||
if ($this->isValid()) {
|
||||
if (\count($this->cacheAttachments) > 1) {
|
||||
$this->cacheAttachments[1]["data"];
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public function isValid()
|
||||
{
|
||||
if (!isset($this->cacheSoapResponse["data"])) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$soapResult = $this->cacheSoapResponse["data"];
|
||||
$errorCode = explode("<id>", $soapResult);
|
||||
$errorCode = explode("</id>", $errorCode[1]);
|
||||
//- Parse Web Service Response
|
||||
//+ Error handling and label saving
|
||||
if ($errorCode[0] == 0) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public function getError()
|
||||
{
|
||||
if (!isset($this->cacheSoapResponse["data"])) {
|
||||
return [$this->soapResponse];
|
||||
}
|
||||
|
||||
if ($this->isValid()) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$soapResult = $this->cacheSoapResponse["data"];
|
||||
$errorCode = explode("<id>", $soapResult);
|
||||
$errorCode = explode("</id>", $errorCode[1]);
|
||||
|
||||
$errorMessage = explode("<messageContent>", $this->cacheSoapResponse["data"]);
|
||||
$errorMessage = explode("</messageContent>", $errorMessage[1]);
|
||||
|
||||
return [$errorCode[0] => $errorMessage];
|
||||
}
|
||||
|
||||
protected function parseResponse($response)
|
||||
{
|
||||
$content = array ();
|
||||
$matches = array ();
|
||||
preg_match_all(self::UUID, $response, $matches, PREG_OFFSET_CAPTURE);
|
||||
|
||||
for ($i = 0; $i < count($matches[0]) -1; $i++) {
|
||||
if ($i + 1 < count($matches[0])) {
|
||||
$content[$i] = substr($response, $matches[0][$i][1], $matches[0][$i + 1][1] - $matches[0][$i][1]);
|
||||
} else {
|
||||
$content[$i] = substr($response, $matches[0][$i][1], strlen($response));
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($content as $part) {
|
||||
if ($this->uuid == null) {
|
||||
$uuidStart = strpos($part, self::UUID, 0)+strlen(self::UUID);
|
||||
$uuidEnd = strpos($part, "\r\n", $uuidStart);
|
||||
$this->uuid = substr($part, $uuidStart, $uuidEnd-$uuidStart);
|
||||
}
|
||||
$header = $this->extractHeader($part);
|
||||
if (count($header) > 0) {
|
||||
if (false !== strpos($header['Content-Type'], 'type="text/xml"')) {
|
||||
$this->cacheSoapResponse['header'] = $header;
|
||||
$this->cacheSoapResponse['data'] = trim(substr($part, $header['offsetEnd']));
|
||||
} else {
|
||||
$attachment['header'] = $header;
|
||||
$attachment['data'] = trim(substr($part, $header['offsetEnd']));
|
||||
array_push($this->cacheAttachments, $attachment);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
protected function extractHeader($part)
|
||||
{
|
||||
$header = array();
|
||||
$headerLineStart = strpos($part, self::CONTENT, 0);
|
||||
$endLine = 0;
|
||||
while (false !== $headerLineStart) {
|
||||
$header['offsetStart'] = $headerLineStart;
|
||||
$endLine = strpos($part, "\r\n", $headerLineStart);
|
||||
$headerLine = explode(': ', substr($part, $headerLineStart, $endLine-$headerLineStart));
|
||||
$header[$headerLine[0]] = $headerLine[1];
|
||||
$headerLineStart = strpos($part, self::CONTENT, $endLine);
|
||||
}
|
||||
$header['offsetEnd'] = $endLine;
|
||||
return $header;
|
||||
}
|
||||
}
|
||||
86
local/modules/ColissimoLabel/Service/SOAPService.php
Normal file
86
local/modules/ColissimoLabel/Service/SOAPService.php
Normal file
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
namespace ColissimoLabel\Service;
|
||||
|
||||
use ColissimoLabel\Request\AbstractRequest;
|
||||
use ColissimoLabel\Request\Helper\APIConfiguration;
|
||||
use ColissimoLabel\Response\BordereauResponse;
|
||||
use ColissimoLabel\Response\LabelResponse;
|
||||
|
||||
/**
|
||||
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
|
||||
*/
|
||||
class SOAPService
|
||||
{
|
||||
public function callGenerateBordereauByParcelsNumbersAPI(APIConfiguration $APIConfiguration, $parcelNumbers = [])
|
||||
{
|
||||
//+ Generate SOAPRequest
|
||||
$xml = new \SimpleXMLElement('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" />');
|
||||
$xml->addChild("soapenv:Header");
|
||||
$children = $xml->addChild("soapenv:Body");
|
||||
$children = $children->addChild("sls:generateBordereauByParcelsNumbers", null, 'http://sls.ws.coliposte.fr');
|
||||
$children->addChild("contractNumber", $APIConfiguration->getContractNumber(), "");
|
||||
$children->addChild("password", $APIConfiguration->getPassword(), "");
|
||||
$children = $children->addChild("generateBordereauParcelNumberList", null, "");
|
||||
|
||||
foreach ($parcelNumbers as $parcelNumber)
|
||||
{
|
||||
$children->addChild("parcelsNumbers", $parcelNumber, "");
|
||||
}
|
||||
|
||||
$soap = new \SoapClient($APIConfiguration->getWsdl());
|
||||
|
||||
return new BordereauResponse($soap->__doRequest(
|
||||
$xml->asXML(),
|
||||
$APIConfiguration->getWsdl(),
|
||||
$APIConfiguration->getMethod(),
|
||||
$APIConfiguration->getVersion(),
|
||||
0
|
||||
));
|
||||
}
|
||||
|
||||
public function callAPI(APIConfiguration $APIConfiguration, AbstractRequest $request)
|
||||
{
|
||||
$request->setContractNumber($APIConfiguration->getContractNumber());
|
||||
$request->setPassword($APIConfiguration->getPassword());
|
||||
|
||||
//+ Generate SOAPRequest
|
||||
$xml = new \SimpleXMLElement('<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" />');
|
||||
$xml->addChild("soapenv:Header");
|
||||
$children = $xml->addChild("soapenv:Body");
|
||||
$children = $children->addChild("sls:generateLabel", null, 'http://sls.ws.coliposte.fr');
|
||||
$children = $children->addChild("generateLabelRequest", null, "");
|
||||
|
||||
$this->arrayToXml($request->generateArrayRequest(), $children);
|
||||
|
||||
$soap = new \SoapClient($APIConfiguration->getWsdl());
|
||||
|
||||
return new LabelResponse($soap->__doRequest(
|
||||
$xml->asXML(),
|
||||
$APIConfiguration->getWsdl(),
|
||||
$APIConfiguration->getMethod(),
|
||||
$APIConfiguration->getVersion(),
|
||||
0
|
||||
));
|
||||
}
|
||||
|
||||
protected function arrayToXml(array $soapRequest, \SimpleXMLElement $soapRequestXml)
|
||||
{
|
||||
foreach ($soapRequest as $key => $value) {
|
||||
if ($value === null || empty($value)) {
|
||||
continue;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
if (!is_numeric($key)) {
|
||||
$subnode = $soapRequestXml->addChild($key);
|
||||
$this->arrayToXml($value, $subnode);
|
||||
} else {
|
||||
$subnode = $soapRequestXml->addChild("item" . $key);
|
||||
$this->arrayToXml($value, $subnode);
|
||||
}
|
||||
} else {
|
||||
$soapRequestXml->addChild($key, htmlspecialchars($value));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
11
local/modules/ColissimoLabel/composer.json
Normal file
11
local/modules/ColissimoLabel/composer.json
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"name": "thelia/colissimo-label-module",
|
||||
"license": "LGPL-3.0+",
|
||||
"type": "thelia-module",
|
||||
"require": {
|
||||
"thelia/installer": "~1.1"
|
||||
},
|
||||
"extra": {
|
||||
"installer-name": "ColissimoLabel"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
{extends file="admin-layout.tpl"}
|
||||
|
||||
{block name="check-resource"}admin.order{/block}
|
||||
{block name="check-access"}view{/block}
|
||||
{block name="page-title"}Bordereaux Colissimo{/block}
|
||||
|
||||
{block name="after-admin-css"}
|
||||
{/block}
|
||||
|
||||
{block name="main-content"}
|
||||
<div id="wrapper" class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 general-block-decorator">
|
||||
<div class="row">
|
||||
<a href="{url path="/admin/module/colissimolabel/bordereau/generate"}" class="btn btn-block btn-info">
|
||||
{intl l="Generate bordereau for label since : %date" date="{format_date date=$lastBordereauDate}" d="colissimolabel.bo.default"}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-12 general-block-decorator">
|
||||
<div class="row">
|
||||
<ul>
|
||||
{foreach from=$bordereaux item=bordereau}
|
||||
<li>
|
||||
<a href="{url path="/admin/module/colissimolabel/bordereau/download" filePath="{$bordereau['path']}"}">
|
||||
{$bordereau['name']}
|
||||
</a>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{/block}
|
||||
|
||||
{block name="javascript-last-call"}
|
||||
{/block}
|
||||
@@ -0,0 +1,6 @@
|
||||
<li class="" id="module_menu_colissimo_label">
|
||||
<a title="Modules" href="{url path="/admin/module/colissimolabel/bordereau/list"}">
|
||||
<span class="icon-orders"></span>
|
||||
<span class="item-text">Bordereaux Colissimo</span>
|
||||
</a>
|
||||
</li>
|
||||
@@ -0,0 +1,201 @@
|
||||
{loop type="order" name="the-order" id=$order_id customer="*" backend_context=true}
|
||||
{$enable = false}
|
||||
{loop type="module" name="module-order" active="yes" backend_context=true id=$DELIVERY_MODULE_ID}
|
||||
{if $CODE === "Colissimo" || $CODE === "SoColissimo"}
|
||||
{$enable = true}
|
||||
{/if}
|
||||
{/loop}
|
||||
|
||||
{if $enable}
|
||||
<div class="modal fade" id="modal-colissimo-label" tabindex="-1" role="dialog" aria-hidden="true">
|
||||
<div class="modal-dialog modal-lg" role="document">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Fermer">
|
||||
<span aria-hidden="true">×</span>
|
||||
</button>
|
||||
<h4 class="modal-title" id="exampleModalLabel">{intl l="Labels Colissimo" d="colissimolabel.bo.default"}</h4>
|
||||
</div>
|
||||
<form action="{url path="/admin/module/colissimolabel/order/{$order_id}/generate-label"}">
|
||||
<div class="modal-body">
|
||||
<div class="form-inline">
|
||||
<div class="form-group">
|
||||
<label for="colissimo-input-weight">{intl l="Shipping weight :" d="colissimolabel.bo.default"}</label>
|
||||
<div class="input-group">
|
||||
{$weightValue = {$WEIGHT|round:2}}
|
||||
{if !$preFillWeightInput || $weightValue == 0}
|
||||
{$weightValue = ''}
|
||||
{/if}
|
||||
<input id="colissimo-input-weight" type="number" required class="form-control" name="weight" min="0" step="0.01" value="{$weightValue}" style="width: 150px;"/>
|
||||
<div class="input-group-addon"> / kg</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-iframe hide">
|
||||
|
||||
</div>
|
||||
<div class="modal-loader hide text-center">
|
||||
{intl l="Please wait ..." d="colissimolabel.bo.default"}
|
||||
</div>
|
||||
<div class="modal-error hide">
|
||||
<div class="alert alert-danger">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">{intl l="Cancel" d="colissimolabel.bo.default"}</button>
|
||||
<button type="submit" name="target" value="print" class="btn btn-primary">{intl l="Print" d="colissimolabel.bo.default"}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/html" id="colissimo-label-tpl">
|
||||
<table class="table table-striped" id="colissimo-label-table" data-url="{url path="/admin/module/colissimolabel/order/{$order_id}/ajax-get-labels"}">
|
||||
<caption>
|
||||
{intl l="Labels Colissimo" d="colissimolabel.bo.default"}
|
||||
<button class="btn btn-primary pull-right" name="target" data-toggle="modal" data-target="#modal-colissimo-label">
|
||||
{intl l="Generate new label" d="colissimolabel.bo.default"}
|
||||
</button>
|
||||
</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>
|
||||
{intl l="Number" d="colissimolabel.bo.default"}
|
||||
</th>
|
||||
<th>
|
||||
{intl l="Weight" d="colissimolabel.bo.default"}
|
||||
</th>
|
||||
<th>
|
||||
{intl l="Date" d="colissimolabel.bo.default"}
|
||||
</th>
|
||||
<th>
|
||||
{intl l="Tracking URL" d="colissimolabel.bo.default"}
|
||||
</th>
|
||||
<th>
|
||||
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{include file="colissimo-label/label-list.html"}
|
||||
</tbody>
|
||||
</table>
|
||||
</script>
|
||||
<script>
|
||||
(function(){
|
||||
// ajout de bloque colissimo
|
||||
$('#bill').prepend($('#colissimo-label-tpl').html());
|
||||
|
||||
var $modal = $('#modal-colissimo-label'),
|
||||
$modalBody = $modal.find('.modal-body'),
|
||||
$modalFooter = $modal.find('.modal-footer'),
|
||||
$modalError = $modal.find('.modal-error'),
|
||||
$modalLoader = $modal.find('.modal-loader'),
|
||||
$modalErrorAlert = $modalError.find('.alert'),
|
||||
$modalInputWeight = $modal.find("input[name='weight']"),
|
||||
$table = $('#colissimo-label-table');
|
||||
|
||||
function print(url, number) {
|
||||
var iframeName = 'iframe-colissimo-label-' + number;
|
||||
|
||||
if (typeof window.frames[iframeName] !== 'undefined') {
|
||||
window.frames[iframeName].remove();
|
||||
}
|
||||
|
||||
var iframe = document.createElement('iframe');
|
||||
iframe.src = url;
|
||||
iframe.id = iframeName;
|
||||
iframe.name = iframeName;
|
||||
iframe.style.display = "none";
|
||||
$('body').append(iframe);
|
||||
window.frames[iframeName].onload = function() {
|
||||
window.frames[iframeName].focus();
|
||||
window.frames[iframeName].print();
|
||||
};
|
||||
}
|
||||
|
||||
function refreshTable() {
|
||||
var request = $.ajax({
|
||||
url: $table.data('url')
|
||||
});
|
||||
|
||||
request.done(function(html) {
|
||||
$table.find('tbody').html(html);
|
||||
});
|
||||
|
||||
request.fail(function(jqXHR, textStatus) {
|
||||
$table.find('tbody').html('<tr><td colspan="99">' + textStatus + '</td></tr>');
|
||||
});
|
||||
}
|
||||
|
||||
$modal.on('show.bs.modal', function (event) {
|
||||
$modalInputWeight.focus();
|
||||
$modalBody.removeClass('hide');
|
||||
$modalFooter.removeClass('hide');
|
||||
$modalLoader.addClass('hide');
|
||||
$modalError.addClass('hide');
|
||||
$modalErrorAlert.html('')
|
||||
});
|
||||
|
||||
$modal.on('shown.bs.modal', function (event) {
|
||||
$modalInputWeight.focus();
|
||||
|
||||
var elem = $modalInputWeight[0];
|
||||
|
||||
var val = elem.value; //store the value of the element
|
||||
elem.value = ''; //clear the value of the element
|
||||
elem.value = val;
|
||||
});
|
||||
|
||||
// modal action print
|
||||
$table.on('click', '.js-action-print', function(e){
|
||||
e.preventDefault();
|
||||
print($(this).attr('href'), this.dataset.number);
|
||||
});
|
||||
|
||||
$modal.find('form').on('submit', function(e){
|
||||
e.preventDefault();
|
||||
$modalBody.addClass('hide');
|
||||
$modalFooter.addClass('hide');
|
||||
$modalLoader.removeClass('hide');
|
||||
|
||||
var request = $.ajax({
|
||||
url: $(this).attr('action'),
|
||||
data: $(this).serialize(),
|
||||
type: 'GET',
|
||||
dataType: 'json'
|
||||
});
|
||||
|
||||
request.done(function(json) {
|
||||
$modalLoader.addClass('hide');
|
||||
if (json.error) {
|
||||
$modalError.removeClass('hide');
|
||||
$modalErrorAlert.html('');
|
||||
|
||||
for (var i in json.error) {
|
||||
$modalErrorAlert.html('Code : ' + i + ' : ' + ((Array.isArray(json.error[i])) ? json.error[i][0] : json.error[i]));
|
||||
}
|
||||
} else {
|
||||
$('input[name="delivery_ref"]').val(json.number);
|
||||
|
||||
print(json.url, json.number);
|
||||
refreshTable();
|
||||
$modal.modal('hide');
|
||||
|
||||
$('select[name="status_id"]').val(json.order.status.id).selectpicker('refresh');
|
||||
}
|
||||
});
|
||||
|
||||
request.fail(function(jqXHR, textStatus) {
|
||||
$modalLoader.addClass('hide');
|
||||
$modalError.removeClass('hide');
|
||||
$modalErrorAlert.html(textStatus);
|
||||
});
|
||||
});
|
||||
}());
|
||||
</script>
|
||||
{/if}
|
||||
{/loop}
|
||||
@@ -0,0 +1,30 @@
|
||||
{ifloop rel="colissimo-label"}
|
||||
{loop type="colissimo-label" name="colissimo-label" order_id=$order_id}
|
||||
<tr>
|
||||
<td>
|
||||
{$NUMBER}
|
||||
</td>
|
||||
<td>
|
||||
{$WEIGHT} / Kg
|
||||
</td>
|
||||
<td>
|
||||
{format_date date=$CREATE_DATE}
|
||||
</td>
|
||||
<td>
|
||||
<a href="https://www.laposte.fr/particulier/outils/suivre-vos-envois?code={$NUMBER}" target="_blank">https://www.laposte.fr/particulier/outils/suivre-vos-envois?code={$NUMBER}</a>
|
||||
</td>
|
||||
<td>
|
||||
<a class="btn btn-primary pull-right" href="{url path="/admin/module/colissimolabel/label/{$NUMBER}" download=1}">{intl l="Download" d="colissimolabel.bo.default"}</a>
|
||||
<a class="btn btn-info pull-right" target="_blank" href="{url path="/admin/module/colissimolabel/label/{$NUMBER}"}">{intl l="View" d="colissimolabel.bo.default"}</a>
|
||||
<a class="btn btn-success pull-right js-action-print" data-number="{$NUMBER}" href="{url path="/admin/module/colissimolabel/label/{$NUMBER}"}">{intl l="Print" d="colissimolabel.bo.default"}</a>
|
||||
</td>
|
||||
</tr>
|
||||
{/loop}
|
||||
{/ifloop}
|
||||
{elseloop rel="colissimo-label"}
|
||||
<tr>
|
||||
<td colspan="99">
|
||||
{intl l="No existing label for this order" d="colissimolabel.bo.default"}
|
||||
</td>
|
||||
</tr>
|
||||
{/elseloop}
|
||||
Reference in New Issue
Block a user