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:
2020-05-07 11:45:31 +02:00
parent 28b21af6c8
commit 649c92e52f
114 changed files with 21550 additions and 8312 deletions

1
.gitignore vendored
View File

@@ -4,3 +4,4 @@
/.idea/
/web/revslider/application/config/config.php
/templates/email/default.zip
/core/vendor/wsdltophp.zip

View File

@@ -62,7 +62,9 @@
"ramsey/array_column": "~1.1",
"propel/propel": "dev-thelia-2.3",
"commerceguys/addressing": "0.8.*",
"symfony/cache": "~3.1.0"
"symfony/cache": "~3.1.0",
"thelia/colissimows-module": "^1.1",
"thelia/colissimo-label-module": "~0.3.2"
},
"require-dev": {
"fzaninotto/faker": "1.5.*",

540
composer.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -2,6 +2,6 @@
// autoload.php @generated by Composer
require_once __DIR__ . '/composer' . '/autoload_real.php';
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInit60933c160e6e784f12d951b85ffd7bf5::getLoader();

View File

@@ -53,8 +53,9 @@ class ClassLoader
private $useIncludePath = false;
private $classMap = array();
private $classMapAuthoritative = false;
private $missingClasses = array();
private $apcuPrefix;
public function getPrefixes()
{
@@ -271,6 +272,26 @@ class ClassLoader
return $this->classMapAuthoritative;
}
/**
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
}
/**
* The APCu prefix in use, or null if APCu caching is not enabled.
*
* @return string|null
*/
public function getApcuPrefix()
{
return $this->apcuPrefix;
}
/**
* Registers this instance as an autoloader.
*
@@ -313,29 +334,34 @@ class ClassLoader
*/
public function findFile($class)
{
// work around for PHP 5.3.0 - 5.3.2 https://bugs.php.net/50731
if ('\\' == $class[0]) {
$class = substr($class, 1);
}
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
if ($this->classMapAuthoritative) {
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
if (null !== $this->apcuPrefix) {
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
if ($hit) {
return $file;
}
}
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
if ($file === null && defined('HHVM_VERSION')) {
if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
if ($file === null) {
if (null !== $this->apcuPrefix) {
apcu_add($this->apcuPrefix.$class, $file);
}
if (false === $file) {
// Remember that this class does not exist.
return $this->classMap[$class] = false;
$this->missingClasses[$class] = true;
}
return $file;
@@ -348,10 +374,14 @@ class ClassLoader
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
if (0 === strpos($class, $prefix)) {
foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath . '\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
@@ -399,6 +429,8 @@ class ClassLoader
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
return false;
}
}

View File

@@ -1,5 +1,5 @@
Copyright (c) 2016 Nils Adermann, Jordi Boggiano
Copyright (c) Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

File diff suppressed because it is too large Load Diff

View File

@@ -10,8 +10,8 @@ return array(
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
'e40631d46120a9c38ea139981f8dab26' => $vendorDir . '/ircmaxell/password-compat/lib/password.php',
'edc6464955a37aa4d5fbf39d40fb6ee7' => $vendorDir . '/symfony/polyfill-php55/bootstrap.php',
'6a47392539ca2329373e0d33e1dba053' => $vendorDir . '/symfony/polyfill-intl-icu/bootstrap.php',
'5255c38a0faeba867671b61dfda6d864' => $vendorDir . '/paragonie/random_compat/lib/random.php',
'6a47392539ca2329373e0d33e1dba053' => $vendorDir . '/symfony/polyfill-intl-icu/bootstrap.php',
'bd9634f2d41831496de0d3dfe4c94881' => $vendorDir . '/symfony/polyfill-php56/bootstrap.php',
'023d27dca8066ef29e6739335ea73bad' => $vendorDir . '/symfony/polyfill-php70/bootstrap.php',
'ce89ac35a6c330c55f4710717db9ff78' => $vendorDir . '/kriswallsmith/assetic/src/functions.php',

View File

@@ -6,6 +6,9 @@ $vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname(dirname($vendorDir));
return array(
'libphonenumber\\' => array($vendorDir . '/giggsey/libphonenumber-for-php/src'),
'WsdlToPhp\\PackageBase\\Tests\\' => array($vendorDir . '/wsdltophp/packagebase/tests'),
'WsdlToPhp\\PackageBase\\' => array($vendorDir . '/wsdltophp/packagebase/src'),
'Thelia\\Tests\\' => array($baseDir . '/tests/phpunit/Thelia/Tests'),
'Thelia\\Math\\' => array($vendorDir . '/thelia/math-tools/src'),
'Thelia\\CurrencyConverter\\' => array($vendorDir . '/thelia/currency-converter/src'),
@@ -43,10 +46,13 @@ return array(
'Symfony\\Component\\Cache\\' => array($vendorDir . '/symfony/cache'),
'Symfony\\Component\\BrowserKit\\' => array($vendorDir . '/symfony/browser-kit'),
'Symfony\\Cmf\\Component\\Routing\\' => array($vendorDir . '/symfony-cmf/routing'),
'SoapClient\\' => array($vendorDir . '/wsdltophp/package-colissimo-postage/SoapClient'),
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
'Giggsey\\Locale\\' => array($vendorDir . '/giggsey/locale/src'),
'Faker\\' => array($vendorDir . '/fzaninotto/faker/src/Faker'),
'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'),
'Doctrine\\Common\\Cache\\' => array($vendorDir . '/doctrine/cache/lib/Doctrine/Common/Cache'),
'CommerceGuys\\Enum\\' => array($vendorDir . '/commerceguys/enum/src'),
'CommerceGuys\\Addressing\\' => array($vendorDir . '/commerceguys/addressing/src'),
'ColissimoPostage\\' => array($vendorDir . '/wsdltophp/package-colissimo-postage/src'),
);

View File

@@ -13,6 +13,9 @@ class ComposerAutoloaderInit60933c160e6e784f12d951b85ffd7bf5
}
}
/**
* @return \Composer\Autoload\ClassLoader
*/
public static function getLoader()
{
if (null !== self::$loader) {
@@ -23,6 +26,12 @@ class ComposerAutoloaderInit60933c160e6e784f12d951b85ffd7bf5
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
spl_autoload_unregister(array('ComposerAutoloaderInit60933c160e6e784f12d951b85ffd7bf5', 'loadClassLoader'));
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
if ($useStaticLoader) {
require_once __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInit60933c160e6e784f12d951b85ffd7bf5::getInitializer($loader));
} else {
$map = require __DIR__ . '/autoload_namespaces.php';
foreach ($map as $namespace => $path) {
$loader->set($namespace, $path);
@@ -37,10 +46,15 @@ class ComposerAutoloaderInit60933c160e6e784f12d951b85ffd7bf5
if ($classMap) {
$loader->addClassMap($classMap);
}
}
$loader->register(true);
if ($useStaticLoader) {
$includeFiles = Composer\Autoload\ComposerStaticInit60933c160e6e784f12d951b85ffd7bf5::$files;
} else {
$includeFiles = require __DIR__ . '/autoload_files.php';
}
foreach ($includeFiles as $fileIdentifier => $file) {
composerRequire60933c160e6e784f12d951b85ffd7bf5($fileIdentifier, $file);
}

File diff suppressed because it is too large Load Diff

View 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));
}
}

View 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>

View 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>

View 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>

View 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>

View 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;

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -0,0 +1,11 @@
<?php
namespace ColissimoLabel\Event;
/**
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
*/
class ColissimoLabelEvents
{
const LABEL_REQUEST = 'ColissimoLabel.labelRequest';
}

View 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;
}
}

View File

@@ -0,0 +1,9 @@
<?php
namespace ColissimoLabel\Exception;
/**
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
*/
class Exception extends \Exception
{
}

View File

@@ -0,0 +1,9 @@
<?php
namespace ColissimoLabel\Exception;
/**
* @author Gilles Bourgeat >gilles.bourgeat@gmail.com>
*/
class InvalidArgumentException extends \InvalidArgumentException
{
}

View 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', [])
);
}
}

View 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)
]
)
));
}
}

View File

@@ -0,0 +1,4 @@
<?php
return array(
);

View File

@@ -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',
);

View File

@@ -0,0 +1,4 @@
<?php
return array(
// 'an english string' => 'The displayed english string',
);

View File

@@ -0,0 +1,4 @@
<?php
return array(
// 'an english string' => 'La traduction française de la chaine',
);

View 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.

View 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;
}
}

File diff suppressed because it is too large Load Diff

View 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

View File

@@ -0,0 +1,10 @@
<?php
namespace ColissimoLabel\Model;
use ColissimoLabel\Model\Base\ColissimoLabel as BaseColissimoLabel;
class ColissimoLabel extends BaseColissimoLabel
{
}

View 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

View File

@@ -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();

View 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`

View 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()
]
]
]
]);
}
}

View 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()
];
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View File

@@ -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');
}
}

View File

@@ -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');
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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];
}
}
}

View File

@@ -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()))
;
}
}

View File

@@ -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()))
;
}
}

View 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;
}
}

View 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;
}
}

View 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));
}
}
}
}

View 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"
}
}

View File

@@ -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}

View File

@@ -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>

View File

@@ -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">&times;</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}

View File

@@ -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}

26
local/modules/ColissimoWs/.gitignore vendored Normal file
View File

@@ -0,0 +1,26 @@
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

View File

@@ -0,0 +1,337 @@
<?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 ColissimoWs;
use ColissimoWs\Model\ColissimowsFreeshippingQuery;
use ColissimoWs\Model\ColissimowsPriceSlices;
use PDO;
use ColissimoWs\Model\ColissimowsLabelQuery;
use ColissimoWs\Model\ColissimowsPriceSlicesQuery;
use Propel\Runtime\ActiveQuery\Criteria;
use Propel\Runtime\Connection\ConnectionInterface;
use Propel\Runtime\Propel;
use SoColissimo\Model\SocolissimoDeliveryModeQuery;
use Thelia\Model\ConfigQuery;
use Thelia\Model\Country;
use Thelia\Model\Message;
use Thelia\Model\MessageQuery;
use Thelia\Model\ModuleQuery;
use Thelia\Model\Order;
use Thelia\Module\AbstractDeliveryModule;
use Thelia\Module\BaseModule;
use Thelia\Module\DeliveryModuleInterface;
use Thelia\Module\Exception\DeliveryException;
class ColissimoWs extends AbstractDeliveryModule
{
/** @var string */
const DOMAIN_NAME = 'colissimows';
// The shipping confirmation message identifier
const CONFIRMATION_MESSAGE_NAME = 'order_confirmation_colissimows';
// Events
const GENERATE_LABEL_EVENT = 'colissimows.generate_label_event';
const CLEAR_LABEL_EVENT = 'colissimows.clear_label_event';
// Configuration parameters
const COLISSIMO_USERNAME = 'colissimo_username';
const COLISSIMO_PASSWORD = 'colissimo_password';
const AFFRANCHISSEMENT_ENDPOINT_URL = 'affranchissement_endpoint_url';
const FORMAT_ETIQUETTE = 'format_etiquette';
const ACTIVATE_DETAILED_DEBUG = 'activate_detailed_debug';
const FROM_NAME = 'company_name';
const FROM_ADDRESS_1 = 'from_address_1';
const FROM_ADDRESS_2 = 'from_address_2';
const FROM_CITY = 'from_city';
const FROM_ZIPCODE = 'from_zipcode';
const FROM_COUNTRY = 'from_country';
const FROM_CONTACT_EMAIL = 'from_contact_email';
const FROM_PHONE = 'from_phone';
/**
* @param ConnectionInterface|null $con
* @throws \Propel\Runtime\Exception\PropelException
*/
public function postActivation(ConnectionInterface $con = null)
{
// Create table if required.
try {
ColissimowsLabelQuery::create()->findOne();
} catch (\Exception $ex) {
$database = new \Thelia\Install\Database($con->getWrappedConnection());
$database->insertSql(null, [__DIR__ . "/Config/thelia.sql"]);
self::setConfigValue(self::AFFRANCHISSEMENT_ENDPOINT_URL, 'https://ws.colissimo.fr/sls-ws/SlsServiceWS?wsdl');
self::setConfigValue(ColissimoWs::FROM_NAME, ConfigQuery::getStoreName());
self::setConfigValue(ColissimoWs::FROM_ADDRESS_1, ConfigQuery::read('store_address1'));
self::setConfigValue(ColissimoWs::FROM_ADDRESS_2, ConfigQuery::read('store_address2'));
self::setConfigValue(ColissimoWs::FROM_CITY, ConfigQuery::read('store_city'));
self::setConfigValue(ColissimoWs::FROM_ZIPCODE, ConfigQuery::read('store_zipcode'));
self::setConfigValue(ColissimoWs::FROM_CONTACT_EMAIL, ConfigQuery::read('store_email'));
self::setConfigValue(ColissimoWs::FROM_COUNTRY, Country::getShopLocation()->getIsoalpha2());
self::setConfigValue(ColissimoWs::FROM_PHONE, ConfigQuery::read('store_phone'));
}
if (null === MessageQuery::create()->findOneByName(self::CONFIRMATION_MESSAGE_NAME)) {
$message = new Message();
$message
->setName(self::CONFIRMATION_MESSAGE_NAME)
->setHtmlLayoutFileName('order_shipped.html')
->setTextLayoutFileName('order_shipped.txt')
->setLocale('en_US')
->setTitle('Order send confirmation')
->setSubject('Order send confirmation')
->setLocale('fr_FR')
->setTitle('Confirmation d\'envoi de commande')
->setSubject('Confirmation d\'envoi de commande')
->save()
;
}
}
public static function getLabelFileType()
{
return strtolower(substr(ColissimoWs::getConfigValue(ColissimoWs::FORMAT_ETIQUETTE, 'PDF'), 0, 3));
}
/**
* Returns ids of area containing this country and covers by this module
* @param Country $country
* @return array Area ids
*/
private function getAllAreasForCountry(Country $country)
{
$areaArray = [];
$sql = "SELECT ca.area_id as area_id FROM country_area ca
INNER JOIN area_delivery_module adm ON (ca.area_id = adm.area_id AND adm.delivery_module_id = :p0)
WHERE ca.country_id = :p1";
$con = Propel::getConnection();
$stmt = $con->prepare($sql);
$stmt->bindValue(':p0', $this->getModuleModel()->getId(), PDO::PARAM_INT);
$stmt->bindValue(':p1', $country->getId(), PDO::PARAM_INT);
$stmt->execute();
while ($row = $stmt->fetch(\PDO::FETCH_ASSOC)) {
$areaArray[] = $row['area_id'];
}
return $areaArray;
}
/**
* @param $areaId
* @param $weight
* @param $cartAmount
* @param $deliverModeCode
*
* @return mixed
* @throws DeliveryException
*/
public static function getPostageAmount($areaId, $weight, $cartAmount = 0)
{
//@TODO : Handle Freeshipping (button activation sets a variable in module config ?)
//$freeshipping = getFreeshippingActive();
$freeshipping = false;
//@TODO : Handle FreeshippingFrom
//$freeshippingFrom = getFreeshippingFrom();
$freeshippingFrom = null;
//@TODO : Handle FreeShippingByArea (needs a dedicated function and probably a dedicated table too)
$postage = 0;
if (!$freeshipping) {
$areaPrices = ColissimowsPriceSlicesQuery::create()
->filterByAreaId($areaId)
->filterByMaxWeight($weight, Criteria::GREATER_EQUAL)
->_or()
->filterByMaxWeight(null)
->filterByMaxPrice($cartAmount, Criteria::GREATER_EQUAL)
->_or()
->filterByMaxPrice(null)
->orderByMaxWeight()
->orderByMaxPrice()
;
/** @var ColissimowsPriceSlices $firstPrice */
$firstPrice = $areaPrices->find()
->getFirst();
if (null === $firstPrice) {
throw new DeliveryException("Colissimo delivery unavailable for your cart weight or delivery country");
}
//If a min price for freeshipping is defined and the cart amount reaches this value, return 0 (aka free shipping)
if (null !== $freeshippingFrom && $freeshippingFrom <= $cartAmount) {
$postage = 0;
return $postage;
}
$postage = $firstPrice->getShipping();
}
return $postage;
}
private function getMinPostage($areaIdArray, $cartWeight, $cartAmount)
{
$minPostage = null;
foreach ($areaIdArray as $areaId) {
try {
$postage = self::getPostageAmount($areaId, $cartWeight, $cartAmount);
if ($minPostage === null || $postage < $minPostage) {
$minPostage = $postage;
if ($minPostage == 0) {
break;
}
}
} catch (\Exception $ex) {
}
}
return $minPostage;
}
/**
* Calculate and return delivery price
*
* @param Country $country
* @return mixed
* @throws DeliveryException
*/
public function getPostage(Country $country)
{
$request = $this->getRequest();
$postage = 0;
$freeshippingIsActive = ColissimowsFreeshippingQuery::create()->findOneById(1)->getActive();
if (false === $freeshippingIsActive){
$cartWeight = $request->getSession()->getSessionCart($this->getDispatcher())->getWeight();
$cartAmount = $request->getSession()->getSessionCart($this->getDispatcher())->getTaxedAmount($country);
$areaIdArray = $this->getAllAreasForCountry($country);
if (empty($areaIdArray)) {
throw new DeliveryException("Your delivery country is not covered by Colissimo.");
}
if (null === $postage = $this->getMinPostage($areaIdArray, $cartWeight, $cartAmount)) {
throw new DeliveryException("Colissimo delivery unavailable for your cart weight or delivery country");
}
}
return $postage;
}
/**
* This method is called by the Delivery loop, to check if the current module has to be displayed to the customer.
* Override it to implements your delivery rules/
*
* If you return true, the delivery method will de displayed to the customer
* If you return false, the delivery method will not be displayed
*
* @param Country $country the country to deliver to.
*
* @return boolean
*/
public function isValidDelivery(Country $country)
{
$areaId = $country->getAreaId();
$prices = ColissimowsPriceSlicesQuery::create()
->filterByAreaId($areaId)
->findOne();
/* check if Colissimo delivers the asked area*/
if (null !== $prices) {
return true;
}
return false;
}
public static function canOrderBeNotSigned(Order $order)
{
$areas = $order->getOrderAddressRelatedByDeliveryOrderAddressId()->getCountry()->getAreas();
$areas_id = [];
foreach ($areas as $area){
$areas_id[] = $area->getId();
}
if (in_array(4, $areas_id) || in_array(5, $areas_id)) // If order's country isn't in Europe or in DOM-TOM so order has to be signed
return false;
else
return true;
}
/**
* @param Order $order
* @return string
* Get the area code for order (used to generate colissimoWs label with or without signature)
* Codes :
* - FR : France
* - DT : Dom-Tom
* - EU : Europe
* - WO : World
* @throws \Propel\Runtime\Exception\PropelException
*/
public static function getOrderShippingArea(Order $order){
$areas = $order->getOrderAddressRelatedByDeliveryOrderAddressId()->getCountry()->getAreas();
$areas_id = [];
foreach ($areas as $area){
$areas_id[] = $area->getId();
}
if (in_array(1, $areas_id)){
return 'FR';
}
if (in_array(2, $areas_id) || in_array(3, $areas_id)){
return 'EU';
}
if (in_array(4, $areas_id) || in_array(5, $areas_id)){
return 'WO';
}
if (in_array(6, $areas_id)){
return 'DT';
}
return null;
}
public static function getModCode()
{
return ModuleQuery::create()->findOneByCode("ColissimoWs")->getId();
}
}

View File

@@ -0,0 +1,40 @@
<?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="colissimows.orders-not-sent" class="ColissimoWs\Loop\OrdersNotYetSentLoop" />
<loop name="colissimows.label-info" class="ColissimoWs\Loop\ColissimoWsLabelInfo" />
<loop name="colissimows.price-slices" class="ColissimoWs\Loop\PriceSlicesLoop" />
<loop name="colissimows.freeshipping" class="ColissimoWs\Loop\ColissimoWsFreeShippingLoop" />
</loops>
<forms>
<form name="colissimows_configuration_form" class="ColissimoWs\Form\ConfigurationForm" />
<form name="colissimows_export_form" class="ColissimoWs\Form\LabelGenerationForm" />
<form name="colissimows.freeshipping.form" class="ColissimoWs\Form\FreeShippingForm" />
</forms>
<services>
<service id="colissimows.label_generator" class="ColissimoWs\EventListeners\ShippingLabelGenerator">
<argument type="service" id="request_stack" />
<tag name="kernel.event_subscriber"/>
</service>
<service id="colissimows.notification_mail" class="ColissimoWs\EventListeners\ShippingNotificationSender">
<argument type="service" id="thelia.parser" />
<argument type="service" id="mailer"/>
<tag name="kernel.event_subscriber"/>
</service>
</services>
<hooks>
<hook id="colissimows.hooks" class="ColissimoWs\Hook\HookManager">
<tag name="hook.event_listener" event="module.configuration" type="back" method="onModuleConfigure" />
<tag name="hook.event_listener" event="main.top-menu-tools" type="back" method="onMainTopMenuTools" />
<tag name="hook.event_listener" event="module.config-js" type="back" method="onModuleConfigJs" />
</hook>
</hooks>
</config>

View File

@@ -0,0 +1,32 @@
<?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>ColissimoWs\ColissimoWs</fullnamespace>
<descriptive locale="en_US">
<title>Home delivery with Colissimo</title>
<subtitle>Use Colissimo web services to get labels and tracking numbers</subtitle>
</descriptive>
<descriptive locale="fr_FR">
<title>Livraison à domicile avec Colissimo</title>
<subtitle>Utilisez les web services Colissimo pour obtenir les étiquettes d'affranchissement et les numéros de suivi.</subtitle>
</descriptive>
<languages>
<language>en_US</language>
<language>fr_FR</language>
</languages>
<version>1.1.6</version>
<authors>
<author>
<name>Franck Allimant</name>
<company>CQFDev</company>
<email>thelia@cqfdev.fr</email>
<website>www.cqfdev.fr</website>
</author>
</authors>
<type>delivery</type>
<thelia>2.3.4</thelia>
<stability>other</stability>
<mandatory>0</mandatory>
<hidden>0</hidden>
</module>

View File

@@ -0,0 +1,50 @@
<?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="colissimows.config" path="/admin/module/colissimows/configure">
<default key="_controller">ColissimoWs\Controller\ConfigurationController::configure</default>
</route>
<route id="colissimows.export" path="/admin/module/colissimows/export">
<default key="_controller">ColissimoWs\Controller\LabelController::export</default>
</route>
<route id="colissimows.label" path="/admin/module/colissimows/label/{orderId}">
<default key="_controller">ColissimoWs\Controller\LabelController::getLabel</default>
<requirement key="orderId">\d+</requirement>
</route>
<route id="colissimows.customs-invoice" path="/admin/module/colissimows/customs-invoice/{orderId}">
<default key="_controller">ColissimoWs\Controller\LabelController::getCustomsInvoice</default>
<requirement key="orderId">\d+</requirement>
</route>
<route id="colissimows.clear_label" path="/admin/module/colissimows/label/clear/{orderId}">
<default key="_controller">ColissimoWs\Controller\LabelController::clearLabel</default>
<requirement key="orderId">\d+</requirement>
</route>
<route id="colissimows.get_zip" path="/admin/module/colissimows/labels-zip/{base64EncodedZipFilename}">
<default key="_controller">ColissimoWs\Controller\LabelController::getLabelZip</default>
<requirement key="base64ZipFilePath">[A-Za-z0-9]+</requirement>
</route>
<!-- Price Slices -->
<route id="colissimows.toggle.freeshipping" path="/admin/module/colissimows/freeshipping" methods="post">
<default key="_controller">ColissimoWs\Controller\FreeShippingController::toggleFreeShippingActivation</default>
</route>
<route id="colissimows.add.price-slice" path="/admin/module/colissimows/price-slice/save" methods="post">
<default key="_controller">ColissimoWs\Controller\PriceSliceController::savePriceSliceAction</default>
</route>
<route id="colissimows.update.price-slice" path="/admin/module/colissimows/price-slice/delete" methods="post">
<default key="_controller">ColissimoWs\Controller\PriceSliceController::deletePriceSliceAction</default>
</route>
</routes>

View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<database defaultIdMethod="native" name="thelia"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../../../core/vendor/propel/propel/resources/xsd/database.xsd" >
<table name="colissimows_label" namespace="ColissimoWs\Model">
<column autoIncrement="true" name="id" primaryKey="true" required="true" type="INTEGER" />
<column name="order_id" type="INTEGER" required="true"/>
<column name="order_ref" type="VARCHAR" size="255" required="true"/>
<column name="error" type="BOOLEAN" required="true" default="0" />
<column name="error_message" type="VARCHAR" size="255" default="" />
<column name="tracking_number" type="VARCHAR" size="64" default="" />
<column name="label_data" type="CLOB" />
<column name="label_type" type="VARCHAR" size="4" />
<column name="weight" type="float" required="true" />
<column name="signed" type="BOOLEAN" default="0"/>
<column name="with_customs_invoice" type="BOOLEAN" required="true" default="0" />
<foreign-key foreignTable="order" name="fk_colissimows_label_order" onDelete="CASCADE" onUpdate="RESTRICT">
<reference foreign="id" local="order_id" />
</foreign-key>
<behavior name="timestampable" />
</table>
<table name="colissimows_price_slices" namespace="ColissimoWs\Model">
<column autoIncrement="true" name="id" primaryKey="true" required="true" type="INTEGER" />
<column name="area_id" type="INTEGER" required="true"/>
<column name="max_weight" type="FLOAT"/>
<column name="max_price" type="FLOAT"/>
<column name="shipping" type="FLOAT" required="true"/>
<column name="franco_min_price" type="FLOAT" />
<foreign-key foreignTable="area" name="fk_colissimows_price_slices_area_id" onDelete="RESTRICT" onUpdate="RESTRICT">
<reference foreign="id" local="area_id" />
</foreign-key>
</table>
<table name="colissimows_freeshipping" namespace="ColissimoWs\Model">
<column name="id" primaryKey="true" required="true" type="INTEGER" />
<column name="active" type="BOOLEAN" default="0"/>
</table>
<external-schema filename="local/config/schema.xml" referenceOnly="true" />
</database>

View File

@@ -0,0 +1,2 @@
# Sqlfile -> Database map
thelia.sql=thelia

View File

@@ -0,0 +1,73 @@
# 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;
-- ---------------------------------------------------------------------
-- colissimows_label
-- ---------------------------------------------------------------------
DROP TABLE IF EXISTS `colissimows_label`;
CREATE TABLE `colissimows_label`
(
`id` INTEGER NOT NULL AUTO_INCREMENT,
`order_id` INTEGER NOT NULL,
`order_ref` VARCHAR(255) NOT NULL,
`error` TINYINT(1) DEFAULT 0 NOT NULL,
`error_message` VARCHAR(255) DEFAULT '',
`tracking_number` VARCHAR(64) DEFAULT '',
`label_data` LONGTEXT,
`label_type` VARCHAR(4),
`weight` FLOAT NOT NULL,
`signed` TINYINT(1) DEFAULT 0,
`with_customs_invoice` TINYINT(1) DEFAULT 0 NOT NULL,
`created_at` DATETIME,
`updated_at` DATETIME,
PRIMARY KEY (`id`),
INDEX `fi_colissimows_label_order` (`order_id`),
CONSTRAINT `fk_colissimows_label_order`
FOREIGN KEY (`order_id`)
REFERENCES `order` (`id`)
ON UPDATE RESTRICT
ON DELETE CASCADE
) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- colissimows_price_slices
-- ---------------------------------------------------------------------
DROP TABLE IF EXISTS `colissimows_price_slices`;
CREATE TABLE `colissimows_price_slices`
(
`id` INTEGER NOT NULL AUTO_INCREMENT,
`area_id` INTEGER NOT NULL,
`max_weight` FLOAT,
`max_price` FLOAT,
`shipping` FLOAT NOT NULL,
`franco_min_price` FLOAT,
PRIMARY KEY (`id`),
INDEX `fi_colissimows_price_slices_area_id` (`area_id`),
CONSTRAINT `fk_colissimows_price_slices_area_id`
FOREIGN KEY (`area_id`)
REFERENCES `area` (`id`)
ON UPDATE RESTRICT
ON DELETE RESTRICT
) ENGINE=InnoDB;
-- ---------------------------------------------------------------------
-- colissimows_freeshipping
-- ---------------------------------------------------------------------
DROP TABLE IF EXISTS `colissimows_freeshipping`;
CREATE TABLE `colissimows_freeshipping`
(
`id` INTEGER NOT NULL,
`active` TINYINT(1) DEFAULT 0,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
# This restores the fkey checks, after having unset them earlier
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -0,0 +1,80 @@
<?php
/*************************************************************************************/
/* Copyright (c) Franck Allimant, CQFDev */
/* email : thelia@cqfdev.fr */
/* web : http://www.cqfdev.fr */
/* */
/* For the full copyright and license information, please view the LICENSE */
/* file that was distributed with this source code. */
/*************************************************************************************/
/**
* Created by Franck Allimant, CQFDev <franck@cqfdev.fr>
* Date: 17/08/2019 12:26
*/
namespace ColissimoWs\Controller;
use ColissimoWs\ColissimoWs;
use Thelia\Controller\Admin\BaseAdminController;
use Thelia\Core\Security\AccessManager;
use Thelia\Core\Security\Resource\AdminResources;
use Thelia\Form\Exception\FormValidationException;
use Thelia\Tools\URL;
class ConfigurationController extends BaseAdminController
{
public function configure()
{
if (null !== $response = $this->checkAuth(AdminResources::MODULE, ColissimoWs::DOMAIN_NAME, AccessManager::UPDATE)) {
return $response;
}
$configurationForm = $this->createForm('colissimows_configuration_form');
$message = false;
$url = '/admin/module/ColissimoWs';
try {
$form = $this->validateForm($configurationForm);
// Get the form field values
$data = $form->getData();
foreach ($data as $name => $value) {
if (is_array($value)) {
$value = implode(';', $value);
}
ColissimoWs::setConfigValue($name, $value);
}
// Log configuration modification
$this->adminLogAppend(
"colissimoWs.configuration.message",
AccessManager::UPDATE,
"ColissimoWs configuration updated"
);
// Redirect to the success URL,
if (!$this->getRequest()->get('save_mode') == 'stay') {
$url = '/admin/modules';
}
} catch (FormValidationException $ex) {
$message = $this->createStandardFormValidationErrorMessage($ex);
} catch (\Exception $ex) {
$message = $ex->getMessage();
}
if ($message !== false) {
$this->setupFormErrorContext(
$this->getTranslator()->trans("ColissimoWs configuration", [], ColissimoWs::DOMAIN_NAME),
$message,
$configurationForm,
$ex
);
}
return $this->generateRedirect(URL::getInstance()->absoluteUrl($url, [ 'tab' => 'config', 'success' => $message === false ]));
}
}

View File

@@ -0,0 +1,65 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace ColissimoWs\Controller;
use ColissimoWs\Form\FreeShippingForm;
use ColissimoWs\Model\ColissimowsFreeshipping;
use ColissimoWs\Model\ColissimowsFreeshippingQuery;
use Symfony\Component\HttpFoundation\JsonResponse;
use Thelia\Controller\Admin\BaseAdminController;
use Thelia\Core\Security\Resource\AdminResources;
use Thelia\Core\Security\AccessManager;
class FreeShippingController extends BaseAdminController
{
public function toggleFreeShippingActivation()
{
if (null !== $response = $this
->checkAuth(array(AdminResources::MODULE), array('ColissimoWs'), AccessManager::UPDATE)) {
return $response;
}
$form = new FreeShippingForm($this->getRequest());
$response=null;
try {
$vform = $this->validateForm($form);
$freeshipping = $vform->get('freeshipping')->getData();
if (null === $isFreeShippingActive = ColissimowsFreeshippingQuery::create()->findOneById(1)){
$isFreeShippingActive = new ColissimowsFreeshipping();
}
$isFreeShippingActive->setActive($freeshipping);
$isFreeShippingActive->save();
$response = JsonResponse::create(array("success"=>"Freeshipping activated"), 200);
} catch (\Exception $e) {
$response = JsonResponse::create(array("error"=>$e->getMessage()), 500);
}
return $response;
}
}

View File

@@ -0,0 +1,370 @@
<?php
/*************************************************************************************/
/* Copyright (c) Franck Allimant, CQFDev */
/* email : thelia@cqfdev.fr */
/* web : http://www.cqfdev.fr */
/* */
/* For the full copyright and license information, please view the LICENSE */
/* file that was distributed with this source code. */
/*************************************************************************************/
/**
* Created by Franck Allimant, CQFDev <franck@cqfdev.fr>
* Date: 04/09/2019 21:51
*/
namespace ColissimoWs\Controller;
use ColissimoLabel\Model\ColissimoLabelQuery;
use ColissimoWs\ColissimoWs;
use ColissimoWs\Event\LabelEvent;
use ColissimoWs\Model\ColissimowsLabel;
use ColissimoWs\Model\ColissimowsLabelQuery;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Thelia\Controller\Admin\BaseAdminController;
use Thelia\Core\Event\Order\OrderEvent;
use Thelia\Core\Event\PdfEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\HttpFoundation\Response;
use Thelia\Core\Security\AccessManager;
use Thelia\Core\Security\Resource\AdminResources;
use Thelia\Exception\TheliaProcessException;
use Thelia\Log\Tlog;
use Thelia\Model\ConfigQuery;
use Thelia\Model\ModuleQuery;
use Thelia\Model\OrderQuery;
use Thelia\Model\OrderStatusQuery;
use Thelia\Tools\URL;
class LabelController extends BaseAdminController
{
/** @TODO : Compatibility with colissimo_label module */
const LABEL_DIRECTORY = THELIA_LOCAL_DIR . 'colissimo-label';
/**
* @return mixed|\Symfony\Component\HttpFoundation\Response|StreamedResponse
*/
public function export()
{
static $codesPaysEurope = [
'DE',
'AT',
'BE',
'BG',
'CY',
'HR',
'DK',
'ES',
'EE',
'FI',
'FR',
'GR',
'HU',
'IE',
'IT',
'LV',
'LT',
'MT',
'LU',
'NL',
'PL',
'PT',
'CZ',
'RO',
'GB',
'SK',
'SI',
'SE '
];
if (null !== $response = $this->checkAuth(array(AdminResources::MODULE), array('ColissimoWs'), AccessManager::UPDATE)) {
return $response;
}
$exportForm = $this->createForm('colissimows_export_form');
$files = $params = [];
if (!@mkdir(self::LABEL_DIRECTORY) && !is_dir(self::LABEL_DIRECTORY)) {
throw new TheliaProcessException("Failed to create directory " . self::LABEL_DIRECTORY);
}
try {
$form = $this->validateForm($exportForm);
$data = $form->getData();
// Check status_id
$newStatus = OrderStatusQuery::create()->findOneByCode($data['new_status']);
ColissimoWs::setConfigValue("new_status", $data['new_status']);
$weight_array = $data['weight'];
$signed_array = $data['signed'];
foreach($data['order_id'] as $orderId) {
if (null !== $order = OrderQuery::create()->findPk($orderId)) {
if (! isset($weight_array[$orderId]) || 0 === (float)$weight_array[$orderId]) {
$weight = $order->getWeight();
} else {
$weight = (float) $weight_array[$orderId];
}
if ($weight === null) {
throw new \Exception($this->getTranslator()->trans("Please enter a weight for every selected order"));
}
if (array_key_exists ($orderId , $signed_array)){
$signed = $signed_array[$orderId];
} else {
$signed = false;
}
$event = (new LabelEvent($orderId))
->setWeight($weight)
->setSigned($signed);
$this->getDispatcher()->dispatch(ColissimoWs::GENERATE_LABEL_EVENT, $event);
if ($event->hasLabel() && $event->getColissimoWsLabel()->getError() === false) {
$fileType = ColissimoWs::getLabelFileType();
$labelFileName = self::LABEL_DIRECTORY . DS . $order->getRef() . '.' . $fileType;
file_put_contents($labelFileName, $event->getColissimoWsLabel()->getLabelData());
$files[] = $labelFileName;
$destinationEurope =
in_array(
strtoupper($order->getOrderAddressRelatedByDeliveryOrderAddressId()->getCountry()->getIsoalpha2()),
$codesPaysEurope
)
;
/** Comment this to disable "no customs invoice template" error */
// Generate customs invoice for non-FR foreign shipping
if (!$destinationEurope) {
$files[] = $this->createCustomsInvoice($orderId, $order->getRef());
// We have a customs invoice !
$event
->getColissimoWsLabel()
->setWithCustomsInvoice(true)
->setSigned(true)
->save();
}
if (null !== $newStatus) {
$event = new OrderEvent($order);
$event->setStatus($newStatus->getId());
$this->dispatch(TheliaEvents::ORDER_UPDATE_STATUS, $event);
}
// Ajouter la facture au zip
$labelFileName = self::LABEL_DIRECTORY . DS . $order->getRef() . '-invoice.pdf';
$response = $this->generateOrderPdf($orderId, ConfigQuery::read('pdf_invoice_file', 'invoice'));
if (file_put_contents($labelFileName, $response->getContent())) {
$files[] = $labelFileName;
}
}
}
}
if (count($files) > 0) {
$zip = new \ZipArchive();
$zipFilename = sys_get_temp_dir() .DS. uniqid('colissimo-labels-', false);
if (true !== $zip->open($zipFilename, \ZipArchive::CREATE)) {
throw new TheliaProcessException("Cannot open zip file $zipFilename\n");
}
foreach ($files as $file) {
$zip->addFile($file, basename($file));
}
$zip->close();
// Perform cleanup
/*
foreach ($files as $file) {
@unlink($file);
}
*/
$params = [ 'zip' => base64_encode($zipFilename) ];
}
} catch (\Exception $ex) {
$this->setupFormErrorContext("Generation étiquettes Colissimo", $ex->getMessage(), $exportForm, $ex);
}
return $this->generateRedirect(URL::getInstance()->absoluteUrl("admin/module/ColissimoWs", $params));
}
/**
* @param $orderId
* @return \Symfony\Component\HttpFoundation\Response
* @throws \Propel\Runtime\Exception\PropelException
*/
public function getLabelZip($base64EncodedZipFilename)
{
$zipFilename = base64_decode($base64EncodedZipFilename);
if (file_exists($zipFilename)) {
return new StreamedResponse(
function () use ($zipFilename) {
readfile($zipFilename);
@unlink($zipFilename);
},
200,
[
'Content-Type' => 'application/zip',
"Content-disposition" => "attachement; filename=colissimo-labels.zip",
"Content-Length" => filesize($zipFilename)
]
);
}
return new \Symfony\Component\HttpFoundation\Response("File no longer exists");
}
/**
* @param $orderId
* @return \Symfony\Component\HttpFoundation\Response
* @throws \Propel\Runtime\Exception\PropelException
*/
public function getLabel($orderId)
{
if (null !== $labelInfo = ColissimowsLabelQuery::create()->findOneByOrderId($orderId)) {
return $this->generateResponseForLabel($labelInfo);
}
return $this->generateRedirect(URL::getInstance()->absoluteUrl("admin/module/ColissimoWs"));
}
/**
* @param $orderId
* @return \Symfony\Component\HttpFoundation\Response
* @throws \Exception
*/
public function getCustomsInvoice($orderId)
{
if (null !== $order = OrderQuery::create()->findPk($orderId)) {
$fileName = $this->createCustomsInvoice($orderId, $order->getRef());
return Response::create(
file_get_contents($fileName),
200,
[
"Content-Type" => "application/pdf",
"Content-disposition" => "Attachement;filename=" . basename($fileName)
]
);
}
return $this->generateRedirect(URL::getInstance()->absoluteUrl("admin/module/ColissimoWs"));
}
/**
* @param $orderId
* @return \Symfony\Component\HttpFoundation\Response
* @throws \Propel\Runtime\Exception\PropelException
*/
public function clearLabel($orderId)
{
/** @var ColissimowsLabel $order */
$order = ColissimowsLabelQuery::create()->filterByOrderId($orderId)->findOne();
$orderRef = $order->getOrderRef();
$fileType = $order->getLabelType();
$order->delete();
$file = self::LABEL_DIRECTORY . DS . $orderRef;
$invoice = $file . '-invoice.pdf';
$file .= ".$fileType";
@unlink($file);
@unlink($invoice);
///** Compatibility with module SoColissimoLabel /!\ Do not use strict comparison */
//if (ModuleQuery::create()->findOneByCode('ColissimoLabel')->getActivate() == true)
//{
// ColissimoLabelQuery::create()->findOneByOrderId($orderId)->delete();
//}
return $this->generateRedirect(URL::getInstance()->absoluteUrl("admin/module/ColissimoWs") . '#order-' . $orderId);
}
/**
* @param $orderId
* @param $orderRef
* @return string
* @throws \Exception
*/
public function createCustomsInvoice($orderId, $orderRef)
{
$html = $this->renderRaw(
"customs-invoice",
array(
'order_id' => $orderId
),
$this->getTemplateHelper()->getActivePdfTemplate()
);
try {
$pdfEvent = new PdfEvent($html);
$this->dispatch(TheliaEvents::GENERATE_PDF, $pdfEvent);
$pdfFileName = self::LABEL_DIRECTORY . DS . $orderRef . '-customs-invoice.pdf';
file_put_contents($pdfFileName, $pdfEvent->getPdf());
return $pdfFileName;
} catch (\Exception $e) {
Tlog::getInstance()->error(
sprintf(
'error during generating invoice pdf for order id : %d with message "%s"',
$orderId,
$e->getMessage()
)
);
throw $e;
}
}
/**
* @param ColissimowsLabel $labelInfo
* @return \Symfony\Component\HttpFoundation\Response
* @throws \Propel\Runtime\Exception\PropelException
*/
protected function generateResponseForLabel($labelInfo)
{
$fileType = $labelInfo->getLabelType();
if ($fileType === 'pdf') {
return new BinaryFileResponse(
self::LABEL_DIRECTORY . DS . $labelInfo->getOrderRef() . ".$fileType",
200,
[
"Content-Type" => "application/pdf",
"Content-disposition" => "Attachement;filename=" . $labelInfo->getOrder()->getRef() . ".pdf"
]
);
}
return new BinaryFileResponse(
self::LABEL_DIRECTORY . DS . $labelInfo->getOrderRef() . ".$fileType",
200,
[
"Content-Type" => "application/octet-stream",
"Content-disposition" => "Attachement;filename=" . $labelInfo->getOrder()->getRef() . ".$fileType"
]
);
}
}

View File

@@ -0,0 +1,184 @@
<?php
namespace ColissimoWs\Controller;
use ColissimoWs\ColissimoWs;
use ColissimoWs\Model\ColissimowsPriceSlices;
use ColissimoWs\Model\ColissimowsPriceSlicesQuery;
use Propel\Runtime\Map\TableMap;
use Thelia\Controller\Admin\BaseAdminController;
use Thelia\Core\Security\AccessManager;
class PriceSliceController extends BaseAdminController
{
protected function getFloatVal($val, $default = -1)
{
if (preg_match("#^([0-9\.,]+)$#", $val, $match)) {
$val = $match[0];
if (strstr($val, ",")) {
$val = str_replace(".", "", $val);
$val = str_replace(",", ".", $val);
}
$val = (float)$val;
return $val;
}
return $default;
}
public function savePriceSliceAction()
{
$response = $this->checkAuth([], ['colissimows'], AccessManager::UPDATE);
if (null !== $response) {
return $response;
}
$this->checkXmlHttpRequest();
$responseData = [
"success" => false,
"message" => '',
"slice" => null
];
$messages = [];
$response = null;
try {
$requestData = $this->getRequest()->request;
if (0 !== $id = (int)$requestData->get('id', 0)) {
$slice = ColissimowsPriceSlicesQuery::create()->findPk($id);
} else {
$slice = new ColissimowsPriceSlices();
}
if (0 !== $areaId = (int)$requestData->get('area', 0)) {
$slice->setAreaId($areaId);
} else {
$messages[] = $this->getTranslator()->trans(
'The area is not valid',
[],
ColissimoWs::DOMAIN_NAME
);
}
$requestPriceMax = $requestData->get('maxPrice', null);
$requestmaxWeight = $requestData->get('maxWeight', null);
if (empty($requestPriceMax) && empty($requestmaxWeight)) {
$messages[] = $this->getTranslator()->trans(
'You must specify at least a price max or a weight max value.',
[],
ColissimoWs::DOMAIN_NAME
);
} else {
if (!empty($requestPriceMax)) {
$maxPrice = $this->getFloatVal($requestPriceMax);
if (0 < $maxPrice) {
$slice->setMaxPrice($maxPrice);
} else {
$messages[] = $this->getTranslator()->trans(
'The price max value is not valid',
[],
ColissimoWs::DOMAIN_NAME
);
}
} else {
$slice->setMaxPrice(null);
}
if (!empty($requestmaxWeight)) {
$maxWeight = $this->getFloatVal($requestmaxWeight);
if (0 < $maxWeight) {
$slice->setMaxWeight($maxWeight);
} else {
$messages[] = $this->getTranslator()->trans(
'The weight max value is not valid',
[],
ColissimoWs::DOMAIN_NAME
);
}
} else {
$slice->setMaxWeight(null);
}
}
$price = $this->getFloatVal($requestData->get('shipping', 0));
if (0 <= $price) {
$slice->setShipping($price);
} else {
$messages[] = $this->getTranslator()->trans(
'The price value is not valid',
[],
ColissimoWs::DOMAIN_NAME
);
}
if (0 === count($messages)) {
$slice->save();
$messages[] = $this->getTranslator()->trans(
'Your slice has been saved',
[],
ColissimoWs::DOMAIN_NAME
);
$responseData['success'] = true;
$responseData['slice'] = $slice->toArray(TableMap::TYPE_STUDLYPHPNAME);
}
} catch (\Exception $e) {
$message[] = $e->getMessage();
}
$responseData['message'] = $messages;
return $this->jsonResponse(json_encode($responseData));
}
public function deletePriceSliceAction()
{
$response = $this->checkAuth([], ['colissimows'], AccessManager::DELETE);
if (null !== $response) {
return $response;
}
$this->checkXmlHttpRequest();
$responseData = [
"success" => false,
"message" => '',
"slice" => null
];
$response = null;
try {
$requestData = $this->getRequest()->request;
if (0 !== $id = (int)$requestData->get('id', 0)) {
$priceSlice = ColissimowsPriceSlicesQuery::create()->findPk($id);
$priceSlice->delete();
$responseData['success'] = true;
} else {
$responseData['message'] = $this->getTranslator()->trans(
'The slice has not been deleted',
[],
ColissimoWs::DOMAIN_NAME
);
}
} catch (\Exception $e) {
$responseData['message'] = $e->getMessage();
}
return $this->jsonResponse(json_encode($responseData));
}
}

View File

@@ -0,0 +1,109 @@
<?php
/*************************************************************************************/
/* Copyright (c) Franck Allimant, CQFDev */
/* email : thelia@cqfdev.fr */
/* web : http://www.cqfdev.fr */
/* */
/* For the full copyright and license information, please view the LICENSE */
/* file that was distributed with this source code. */
/*************************************************************************************/
/**
* Created by Franck Allimant, CQFDev <franck@cqfdev.fr>
* Date: 04/09/2019 15:23
*/
namespace ColissimoWs\Event;
use ColissimoWs\Model\ColissimowsLabel;
use Thelia\Core\Event\ActionEvent;
class LabelEvent extends ActionEvent
{
/** @var int */
protected $orderId;
/** @var ColissimowsLabel */
protected $colissimoWsLabel = null;
/** @var float|null */
protected $weight = null;
/** @var bool|null */
protected $signed = null;
/**
* LabelEvent constructor.
* @param int $orderId
*/
public function __construct($orderId)
{
$this->orderId = $orderId;
}
/**
* @return int
*/
public function getOrderId()
{
return $this->orderId;
}
/**
* @return ColissimowsLabel
*/
public function getColissimoWsLabel()
{
return $this->colissimoWsLabel;
}
/**
* @param ColissimowsLabel $colissimoWsLabel
* @return $this
*/
public function setColissimoWsLabel($colissimoWsLabel)
{
$this->colissimoWsLabel = $colissimoWsLabel;
return $this;
}
public function hasLabel()
{
return null !== $this->colissimoWsLabel;
}
/**
* @return float|null
*/
public function getWeight()
{
return $this->weight;
}
/**
* @param float|null $weight
* @return $this
*/
public function setWeight($weight)
{
$this->weight = $weight;
return $this;
}
/**
* @return bool|null
*/
public function getSigned()
{
return $this->signed;
}
/**
* @param bool|null $signed
* @return $this
*/
public function setSigned($signed)
{
$this->signed = $signed;
return $this;
}
}

View File

@@ -0,0 +1,463 @@
<?php
/*************************************************************************************/
/* Copyright (c) Franck Allimant, CQFDev */
/* email : thelia@cqfdev.fr */
/* web : http://www.cqfdev.fr */
/* */
/* For the full copyright and license information, please view the LICENSE */
/* file that was distributed with this source code. */
/*************************************************************************************/
/**
* Created by Franck Allimant, CQFDev <franck@cqfdev.fr>
* Date: 04/09/2019 14:34
*/
namespace ColissimoWs\EventListeners;
use ColissimoLabel\ColissimoLabel;
use ColissimoLabel\Model\ColissimoLabelQuery;
use ColissimoPostage\ServiceType\Generate;
use ColissimoPostage\StructType\Address;
use ColissimoPostage\StructType\Addressee;
use ColissimoPostage\StructType\Article;
use ColissimoPostage\StructType\Category;
use ColissimoPostage\StructType\Contents;
use ColissimoPostage\StructType\CustomsDeclarations;
use ColissimoPostage\StructType\GenerateLabel;
use ColissimoPostage\StructType\GenerateLabelRequest;
use ColissimoPostage\StructType\Letter;
use ColissimoPostage\StructType\OutputFormat;
use ColissimoPostage\StructType\Parcel;
use ColissimoPostage\StructType\Sender;
use ColissimoPostage\StructType\Service;
use ColissimoWs\ColissimoWs;
use ColissimoWs\Event\LabelEvent;
use ColissimoWs\Model\ColissimowsLabel;
use ColissimoWs\Model\ColissimowsLabelQuery;
use ColissimoWs\Soap\GenerateWithAttachments;
use ColissimoWs\Soap\SoapClientWithAttachements;
use libphonenumber\NumberParseException;
use libphonenumber\PhoneNumberUtil;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\RequestStack;
use Thelia\Action\BaseAction;
use Thelia\Log\Tlog;
use Thelia\Model\ConfigQuery;
use Thelia\Model\Country;
use Thelia\Model\ModuleQuery;
use Thelia\Model\OrderProduct;
use Thelia\Model\OrderQuery;
use Thelia\Tools\MoneyFormat;
use WsdlToPhp\PackageBase\AbstractSoapClientBase;
class ShippingLabelGenerator extends BaseAction implements EventSubscriberInterface
{
/** @var array */
protected $options;
/** @var Generate */
protected $generate;
/** @var RequestStack */
protected $requestStack;
/** @var bool */
protected $verbose;
/**
* ShippingLabelGenerator constructor.
*/
public function __construct(RequestStack $requestStack)
{
$this->options = [
AbstractSoapClientBase::WSDL_URL => ColissimoWs::getConfigValue(ColissimoWs::AFFRANCHISSEMENT_ENDPOINT_URL),
AbstractSoapClientBase::WSDL_CLASSMAP => \ColissimoPostage\ClassMap::get(),
];
// Générer les services
$this->generate = new GenerateWithAttachments($this->options);
$this->requestStack = $requestStack;
$this->verbose = 0 !== (int) ColissimoWs::getConfigValue(ColissimoWs::ACTIVATE_DETAILED_DEBUG, 0);
}
/**
* @inheritDoc
*/
public static function getSubscribedEvents()
{
return [
ColissimoWs::GENERATE_LABEL_EVENT => [ 'generateShippingLabel', 128 ],
ColissimoWs::CLEAR_LABEL_EVENT => [ 'clearShippingLabel', 128 ],
];
}
/**
* Clear a label
*
* @param LabelEvent $event
* @throws \Propel\Runtime\Exception\PropelException
*/
public function clearShippingLabel(LabelEvent $event)
{
ColissimowsLabelQuery::create()
->filterByOrderId($event->getOrderId())
->delete();
}
/**
* Create a new label from the order
*
* @param LabelEvent $event
* @throws \Propel\Runtime\Exception\PropelException
*/
public function generateShippingLabel(LabelEvent $event)
{
$erreur = false;
$trackingNumber = $labelContent = $message = '';
$request = $this->requestStack->getCurrentRequest();
$customsDeclaration = null;
if (null !== $order = OrderQuery::create()->findPk($event->getOrderId())) {
$totalWeight = 0;
$signed = $event->getSigned();
$shopCountryCode = strtoupper(Country::getShopLocation()->getIsoalpha2());
$articles = [];
/** @var OrderProduct $orderProduct */
foreach ($order->getOrderProducts() as $orderProduct) {
$totalWeight += $orderProduct->getQuantity() * $orderProduct->getWeight();
$articles[] = new Article(
$orderProduct->getTitle(),
$orderProduct->getQuantity(),
$orderProduct->getWeight(),
MoneyFormat::getInstance($request)->formatStandardMoney($orderProduct->getPrice()),
'3303001000',
$shopCountryCode,
$order->getCurrency()->getCode(),
null,
null
);
}
$customer = $order->getCustomer();
$defaultAddress = $customer->getDefaultAddress();
$deliveryAddress = $order->getOrderAddressRelatedByDeliveryOrderAddressId();
$mobilePhone = $this->formatterTelephone($defaultAddress->getCellphone(), $defaultAddress->getCountry()->getIsoalpha2());
$landPhone = $this->formatterTelephone($defaultAddress->getPhone(), $defaultAddress->getCountry()->getIsoalpha2());
$storePhone = $this->formatterTelephone(
ColissimoWs::getConfigValue(ColissimoWs::FROM_PHONE, ConfigQuery::read('store_phone')),
ColissimoWs::getConfigValue(ColissimoWs::FROM_COUNTRY, Country::getShopLocation()->getIsoalpha2())
);
switch(ColissimoWs::getOrderShippingArea($order)){
case 'FR':
if($signed) {
$colissimoProductCode = "DOS";
} else {
$colissimoProductCode = "DOM";
}
break;
case 'EU':
if($signed) {
$colissimoProductCode = "DOS";
} else {
$colissimoProductCode = "COLI";
}
$customsDeclaration = new CustomsDeclarations(
true,
new Contents(
$articles,
new Category(3)
)
);
break;
case 'WO':
$colissimoProductCode = "COLI";
$customsDeclaration = new CustomsDeclarations(
true,
new Contents(
$articles,
new Category(3)
)
);
break;
case 'DT':
if($signed) {
$colissimoProductCode = "CDS";
} else {
$colissimoProductCode = "COM";
}
$customsDeclaration = new CustomsDeclarations(
true,
new Contents(
$articles,
new Category(3)
)
);
break;
default:
throw new \InvalidArgumentException("Failed to find order area " . $event->getOrderId());
break;
}
// Use provided weight if any.
if (!empty($event->getWeight())) {
// The specified weight cannot be less than the total articles weight
if ($event->getWeight() > $totalWeight) {
$totalWeight = $event->getWeight();
}
}
// Envoyer la requête
$success = $this->generate->generateLabel(
new GenerateLabel(
new GenerateLabelRequest(
ColissimoWs::getConfigValue(ColissimoWs::COLISSIMO_USERNAME),
ColissimoWs::getConfigValue(ColissimoWs::COLISSIMO_PASSWORD),
new OutputFormat(0, 0, ColissimoWs::getConfigValue(ColissimoWs::FORMAT_ETIQUETTE, 'PDF_10x15_300dpi'), true, ''),
new Letter(
new Service(
$colissimoProductCode,
date('Y-m-d', strtotime('tomorrow')),
false,
null,
null,
null,
null,
null,
round(100 * MoneyFormat::getInstance($request)->formatStandardMoney($order->getTotalAmount())),
$order->getRef(),
ConfigQuery::getStoreName(),
3 // Ne pas retourner
),
new Parcel(
null,
null,
null,
null,
$totalWeight,
false,
null,
null,
null,
false,
null,
null
),
$customsDeclaration,
new Sender(
$order->getRef(),
new Address(
ColissimoWs::getConfigValue(ColissimoWs::FROM_NAME, ConfigQuery::getStoreName()),
null,
null,
null,
null,
ColissimoWs::getConfigValue(ColissimoWs::FROM_ADDRESS_1, ConfigQuery::read('store_address1')),
ColissimoWs::getConfigValue(ColissimoWs::FROM_ADDRESS_2, ConfigQuery::read('store_address2')),
'FR',
ColissimoWs::getConfigValue(ColissimoWs::FROM_CITY, ConfigQuery::read('store_city')),
ColissimoWs::getConfigValue(ColissimoWs::FROM_ZIPCODE, ConfigQuery::read('store_zipcode')),
$storePhone,
null,
null,
null,
ColissimoWs::getConfigValue(ColissimoWs::FROM_CONTACT_EMAIL, ConfigQuery::read('store_email')),
null,
strtoupper(ColissimoWs::getConfigValue(ColissimoWs::FROM_COUNTRY, Country::getShopLocation()->getIsoalpha2()))
)
),
new Addressee(
$customer->getRef(),
false,
null,
null,
new Address(
'',
$this->cleanUpAddresse($deliveryAddress->getFirstname()),
$this->cleanUpAddresse($deliveryAddress->getLastname()),
null,
null,
$this->cleanUpAddresse($deliveryAddress->getAddress1()),
$this->cleanUpAddresse($deliveryAddress->getAddress2()),
strtoupper($deliveryAddress->getCountry()->getIsoalpha2()),
$this->corrigerLocalite($deliveryAddress->getCity()),
preg_replace("/[\s]/", "", $deliveryAddress->getZipcode()),
$landPhone,
$mobilePhone,
null,
null,
$customer->getEmail(),
null,
strtoupper($customer->getCustomerLang()->getCode()))
)
)
)
)
);
Tlog::getInstance()->debug("Colissimo shipping label request: " . $this->generate->getLastRequest());
/*
echo "<pre>";
echo 'XML Request: ' . htmlspecialchars($this->generate->getLastRequest()) . "\r\n";
echo 'Headers Request: ' . htmlspecialchars($this->generate->getLastRequestHeaders()) . "\r\n";
echo 'XML Response: ' . htmlspecialchars($this->generate->getLastResponse()) . "\r\n";
echo 'Headers Response: ' . htmlspecialchars($this->generate->getLastResponseHeaders()) . "\r\n";
echo "</pre>";
*/
if ($this->generate->getLastResponse(true) instanceof \DOMDocument) {
$response = $this->generate->getLastResponse();
Tlog::getInstance()->debug("Colissimo shipping label response: " . $response);
echo $response;
$domDocument = $this->generate->getLastResponse(true);
$type = $domDocument->getElementsByTagName('type')->item(0)->nodeValue;
if ($type !== 'ERROR') {
$pdfUrlElement = $domDocument->getElementsByTagName('pdfUrl');
$includeElement = $domDocument->getElementsByTagName('Include');
if ($pdfUrlElement->length > 0) {
$urlPdf = $pdfUrlElement->item(0)->nodeValue;
if (!empty($urlPdf)) {
$labelContent = file_get_contents($urlPdf);
}
} elseif ($includeElement->length > 0) {
$href = str_replace('cid:', '', $includeElement->item(0)->attributes['href']->value);
$rawResponse = $this->generate->getRawResponse();
preg_match("/.*Content-ID: <$href>(.*)--uuid.*$/s", $rawResponse, $matches);
if (isset($matches[1])) {
$labelContent = trim($matches[1]);
}
}
$trackingNumber = $domDocument->getElementsByTagName('parcelNumber')->item(0)->nodeValue;
// Update tracking number.
$order
->setDeliveryRef($trackingNumber)
->save();
$message = "L'étiquette a été générée correctement.";
} else {
$erreur = true;
$message = $domDocument->getElementsByTagName('messageContent')->item(0)->nodeValue;
}
} else {
$erreur = true;
$message = $this->generate->getLastErrorForMethod('ColissimoPostage\ServiceType\Generate::generateLabel')->getMessage();
}
if (null === $label = ColissimowsLabelQuery::create()->findOneByOrderId($order->getId())) {
$label = (new ColissimowsLabel())
->setOrderId($order->getId())
->setOrderRef($order->getRef())
;
}
$label
->setError($erreur)
->setErrorMessage($message)
->setTrackingNumber($trackingNumber)
->setLabelData($labelContent)
->setLabelType(ColissimoWs::getLabelFileType())
->setWeight($totalWeight)
->setSigned($signed)
;
$label ->save();
///** Compatibility with module SoColissimoLabel /!\ Do not use strict comparison */
//if (ModuleQuery::create()->findOneByCode('ColissimoLabel')->getActivate() == true)
//{
// if (null === $labelCompat = ColissimoLabelQuery::create()->findOneByOrderId($order->getId())) {
// /** @var $labelCompat */
// $labelCompat = (new \ColissimoLabel\Model\ColissimoLabel())
// ->setOrderId($order->getId())
// ;
// }
//
// $labelCompat
// ->setWeight($totalWeight)
// ->setSigned($signed)
// ->setNumber($trackingNumber)
// ;
//
// $labelCompat->save();
//}
$event->setColissimoWsLabel($label);
} else {
throw new \InvalidArgumentException("Failed to find order ID " . $event->getOrderId());
}
}
protected function formatterTelephone($numero, $codePays)
{
$phoneUtil = PhoneNumberUtil::getInstance();
try {
$normalizedNumber = $phoneUtil->parse($numero, strtoupper($codePays));
return $phoneUtil->format($normalizedNumber, \libphonenumber\PhoneNumberFormat::E164);
} catch (NumberParseException $e) {
return '';
}
}
protected function corrigerLocalite($localite)
{
$localite = strtoupper($localite);
$localite = str_replace(['SAINTE', 'SAINT', '/'], array('STE', 'ST', ''), $localite);
return $localite;
}
protected function cleanUpAddresse($str)
{
return preg_replace("/[^A-Za-z0-9]/", ' ', $this->removeAccents($str));
}
protected function cleanupUserEnteredString($str)
{
$str = preg_replace("/&#[0-9]+;/", '', $str);
$str = preg_replace("/[^A-Za-z0-9]/", ' ', $this->removeAccents($str));
return $str;
}
protected function removeAccents($str)
{
return \Transliterator::create('NFD; [:Nonspacing Mark:] Remove; NFC')->transliterate($str);
}
}

View File

@@ -0,0 +1,78 @@
<?php
/*************************************************************************************/
/* Copyright (c) Franck Allimant, CQFDev */
/* email : thelia@cqfdev.fr */
/* web : http://www.cqfdev.fr */
/* */
/* For the full copyright and license information, please view the LICENSE */
/* file that was distributed with this source code. */
/*************************************************************************************/
/**
* Created by Franck Allimant, CQFDev <franck@cqfdev.fr>
* Date: 04/09/2019 14:34
*/
namespace ColissimoWs\EventListeners;
use ColissimoWs\ColissimoWs;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Action\BaseAction;
use Thelia\Core\Event\Order\OrderEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\Template\ParserInterface;
use Thelia\Mailer\MailerFactory;
use Thelia\Model\ConfigQuery;
class ShippingNotificationSender extends BaseAction implements EventSubscriberInterface
{
/** @var MailerFactory */
protected $mailer;
/** @var ParserInterface */
protected $parser;
public function __construct(ParserInterface $parser, MailerFactory $mailer)
{
$this->parser = $parser;
$this->mailer = $mailer;
}
/**
*
* @inheritdoc
*/
public static function getSubscribedEvents()
{
return [
TheliaEvents::ORDER_UPDATE_STATUS => ["sendShippingNotification", 128]
];
}
/**
* @param OrderEvent $event
* @throws \Propel\Runtime\Exception\PropelException
*/
public function sendShippingNotification(OrderEvent $event)
{
if ($event->getOrder()->isSent()) {
$contact_email = ConfigQuery::getStoreEmail();
if ($contact_email) {
$order = $event->getOrder();
$customer = $order->getCustomer();
$this->mailer->sendEmailToCustomer(
ColissimoWs::CONFIRMATION_MESSAGE_NAME,
$order->getCustomer(),
[
'order_id' => $order->getId(),
'order_ref' => $order->getRef(),
'customer_id' => $customer->getId(),
'order_date' => $order->getCreatedAt(),
'update_date' => $order->getUpdatedAt(),
'package' => $order->getDeliveryRef()
]
);
}
}
}
}

View File

@@ -0,0 +1,182 @@
<?php
/*************************************************************************************/
/* Copyright (c) Franck Allimant, CQFDev */
/* email : thelia@cqfdev.fr */
/* web : http://www.cqfdev.fr */
/* */
/* For the full copyright and license information, please view the LICENSE */
/* file that was distributed with this source code. */
/*************************************************************************************/
/**
* Created by Franck Allimant, CQFDev <franck@cqfdev.fr>
* Date: 17/08/2019 12:26
*/
namespace ColissimoWs\Form;
use ColissimoWs\ColissimoWs;
use SimpleDhl\SimpleDhl;
use Symfony\Component\Validator\Constraints\NotBlank;
use Thelia\Form\BaseForm;
class ConfigurationForm extends BaseForm
{
protected function buildForm()
{
$this->formBuilder
->add(
ColissimoWs::COLISSIMO_USERNAME,
'text',
[
'constraints' => [
new NotBlank(),
],
'label' => $this->translator->trans('Colissimo username', [], ColissimoWs::DOMAIN_NAME),
'label_attr' => [
'help' => $this->translator->trans(
'Nom d\'utilisateur Colissimo. C\'est l\'identifiants qui vous permet daccéder à votre espace client à l\'adresse https://www.colissimo.fr/entreprise',
[],
ColissimoWs::DOMAIN_NAME
)
]
]
)
->add(
ColissimoWs::COLISSIMO_PASSWORD,
'text',
[
'constraints' => [
new NotBlank(),
],
'label' => $this->translator->trans('Colissimo password', [], ColissimoWs::DOMAIN_NAME),
'label_attr' => [
'help' => $this->translator->trans(
'Le mot de passe qui vous permet daccéder à votre espace client à l\'adresse https://www.colissimo.fr/entreprise',
[],
ColissimoWs::DOMAIN_NAME
)
]
]
)->add(
ColissimoWs::AFFRANCHISSEMENT_ENDPOINT_URL,
'url',
[
'constraints' => [
new NotBlank(),
],
'label' => $this->translator->trans('Endpoint du web service d\'affranchissement', [], ColissimoWs::DOMAIN_NAME),
'label_attr' => [
'help' => $this->translator->trans(
'Indiquez le endpoint de base à utiliser, par exemple https://domain.tld/transactionaldata/api/v1',
[],
ColissimoWs::DOMAIN_NAME
)
]
]
)->add(
ColissimoWs::FORMAT_ETIQUETTE,
'choice',
[
'constraints' => [
new NotBlank(),
],
'choices' => [
'PDF_A4_300dpi' => 'Bureautique PDF, A4, résolution 300dpi',
'PDF_10x15_300dpi' => 'Bureautique PDF, 10cm par 15cm, résolution 300dpi',
'ZPL_10x15_203dpi' => 'Thermique en ZPL, de dimension 10cm par 15cm, et de résolution 203dpi',
'ZPL_10x15_300dpi' => 'Thermique ZPL, 10cm par 15cm, résolution 300dpi',
'DPL_10x15_203dpi' => 'Thermique DPL, 10cm par 15cm, résolution 203dpi',
'DPL_10x15_300dpi' => 'Thermique DPL, 10cm par 15cm, résolution 300dpi',
],
'label' => $this->translator->trans('Format des étiquettes', [], ColissimoWs::DOMAIN_NAME),
'label_attr' => [
'help' => $this->translator->trans(
'Indiquez le format des étiquettes à générer, en fonction de l\'imprimante dont vous disposez.',
[],
ColissimoWs::DOMAIN_NAME
)
]
]
)->add(
ColissimoWs::ACTIVATE_DETAILED_DEBUG,
'checkbox',
[
'required' => false,
'label' => $this->translator->trans('Activer les logs détaillés', [], ColissimoWs::DOMAIN_NAME),
'label_attr' => [
'help' => $this->translator->trans(
'Si cette case est cochée, le texte complet des requêtes et des réponses figurera dans le log Thelia',
[],
ColissimoWs::DOMAIN_NAME
)
]
]
)
->add(
ColissimoWs::FROM_NAME,
'text',
[
'constraints' => [
new NotBlank(),
],
'label' => $this->translator->trans('Nom de société', [], ColissimoWs::DOMAIN_NAME),
]
)
->add(
ColissimoWs::FROM_ADDRESS_1,
'text',
[
'constraints' => [ new NotBlank() ],
'label' => $this->translator->trans('Adresse', [], ColissimoWs::DOMAIN_NAME)
]
)
->add(
ColissimoWs::FROM_ADDRESS_2,
'text',
[
'constraints' => [ ],
'required' => false,
'label' => $this->translator->trans('Adresse (suite)', [], ColissimoWs::DOMAIN_NAME)
]
)
->add(
ColissimoWs::FROM_CITY,
'text',
[
'constraints' => [ new NotBlank() ],
'label' => $this->translator->trans('Ville', [], ColissimoWs::DOMAIN_NAME)
]
)
->add(
ColissimoWs::FROM_ZIPCODE,
'text',
[
'constraints' => [ new NotBlank() ],
'label' => $this->translator->trans('Code postal', [], ColissimoWs::DOMAIN_NAME)
]
)
->add(
ColissimoWs::FROM_COUNTRY,
'text',
[
'constraints' => [ new NotBlank() ],
'label' => $this->translator->trans('Pays', [], ColissimoWs::DOMAIN_NAME)
]
)->add(
ColissimoWs::FROM_CONTACT_EMAIL,
'email',
[
'constraints' => [ new NotBlank() ],
'label' => $this->translator->trans('Adresse e-mail de contact pour les expéditions', [], ColissimoWs::DOMAIN_NAME)
]
)->add(
ColissimoWs::FROM_PHONE,
'text',
[
'constraints' => [ new NotBlank() ],
'label' => $this->translator->trans('Téléphone', [], ColissimoWs::DOMAIN_NAME)
]
)
;
}
}

View File

@@ -0,0 +1,69 @@
<?php
/*************************************************************************************/
/* */
/* Thelia */
/* */
/* Copyright (c) OpenStudio */
/* email : info@thelia.net */
/* web : http://www.thelia.net */
/* */
/* This program is free software; you can redistribute it and/or modify */
/* it under the terms of the GNU General Public License as published by */
/* the Free Software Foundation; either version 3 of the License */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU General Public License for more details. */
/* */
/* You should have received a copy of the GNU General Public License */
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
/* */
/*************************************************************************************/
namespace ColissimoWs\Form;
use Thelia\Core\Translation\Translator;
use Thelia\Form\BaseForm;
class FreeShippingForm extends BaseForm
{
/**
*
* in this function you add all the fields you need for your Form.
* Form this you have to call add method on $this->formBuilder attribute :
*
* $this->formBuilder->add("name", "text")
* ->add("email", "email", array(
* "attr" => array(
* "class" => "field"
* ),
* "label" => "email",
* "constraints" => array(
* new \Symfony\Component\Validator\Constraints\NotBlank()
* )
* )
* )
* ->add('age', 'integer');
*
* @return null
*/
protected function buildForm()
{
$this->formBuilder
->add("delivery_mode", "integer")
->add("freeshipping", "checkbox", array(
'label'=>Translator::getInstance()->trans("Activate free shipping: ")
))
;
}
/**
* @return string the name of you form. This name must be unique
*/
public function getName()
{
return "colissimowsfreeshipping";
}
}

View File

@@ -0,0 +1,71 @@
<?php
/*************************************************************************************/
/* Copyright (c) Franck Allimant, CQFDev */
/* email : thelia@cqfdev.fr */
/* web : http://www.cqfdev.fr */
/* */
/* For the full copyright and license information, please view the LICENSE */
/* file that was distributed with this source code. */
/*************************************************************************************/
/**
* Created by Franck Allimant, CQFDev <franck@cqfdev.fr>
* Date: 17/08/2019 12:26
*/
namespace ColissimoWs\Form;
use ColissimoWs\ColissimoWs;
use Thelia\Core\Translation\Translator;
use Thelia\Form\BaseForm;
class LabelGenerationForm extends BaseForm
{
protected function buildForm()
{
$this->formBuilder
->add(
'new_status',
'choice', [
'label' => Translator::getInstance()->trans('Order status after export'),
'choices' => [
"nochange" => Translator::getInstance()->trans("Do not change", [], ColissimoWs::DOMAIN_NAME),
"processing" => Translator::getInstance()->trans("Set orders status as processing", [], ColissimoWs::DOMAIN_NAME),
"sent" => Translator::getInstance()->trans("Set orders status as sent", [], ColissimoWs::DOMAIN_NAME)
],
'required' => 'true',
'expanded' => true,
'multiple' => false,
'data' => ColissimoWs::getConfigValue("new_status", 'nochange')
]
)
->add(
'order_id',
'collection',
[
'type' => 'integer',
'allow_add' => true,
'allow_delete' => true,
]
)
->add(
"weight",
'collection',
[
'type' => 'number',
'allow_add' => true,
'allow_delete' => true,
]
)
->add(
"signed",
"collection",
[
'type' => 'checkbox',
'label' => 'Signature',
'allow_add' => true,
'allow_delete' => true,
]);
;
}
}

View File

@@ -0,0 +1,65 @@
<?php
/*************************************************************************************/
/* Copyright (c) Franck Allimant, CQFDev */
/* email : thelia@cqfdev.fr */
/* web : http://www.cqfdev.fr */
/* */
/* For the full copyright and license information, please view the LICENSE */
/* file that was distributed with this source code. */
/*************************************************************************************/
/**
* Created by Franck Allimant, CQFDev <franck@cqfdev.fr>
* Date: 17/08/2019 14:34
*/
namespace ColissimoWs\Hook;
use ColissimoWs\ColissimoWs;
use ColissimoWs\Model\ColissimowsLabelQuery;
use Thelia\Core\Event\Hook\HookRenderBlockEvent;
use Thelia\Core\Event\Hook\HookRenderEvent;
use Thelia\Core\Hook\BaseHook;
use Thelia\Model\ModuleConfig;
use Thelia\Model\ModuleConfigQuery;
use Thelia\Tools\URL;
class HookManager extends BaseHook
{
public function onModuleConfigure(HookRenderEvent $event)
{
$vars = [ ];
if (null !== $params = ModuleConfigQuery::create()->findByModuleId(ColissimoWs::getModuleId())) {
/** @var ModuleConfig $param */
foreach ($params as $param) {
$vars[ $param->getName() ] = $param->getValue();
}
}
$event->add(
$this->render(
'colissimows/module_configuration.html',
$vars
)
);
}
public function onMainTopMenuTools(HookRenderBlockEvent $event)
{
$event->add(
[
'id' => 'tools_menu_colissimows',
'class' => '',
'url' => URL::getInstance()->absoluteUrl('/admin/module/ColissimoWs'),
'title' => $this->translator->trans("Colissimo labels (%num)", [ '%num' => ColissimowsLabelQuery::create()->count() ], ColissimoWs::DOMAIN_NAME)
]
);
}
public function onModuleConfigJs(HookRenderEvent $event)
{
$event->add($this->render('colissimows/module-config-js.html'));
}
}

View File

@@ -0,0 +1,52 @@
<?php
return array(
'Actions' => 'Actions',
'Activate total free shipping ' => 'Activer la livraison gratuite totale',
'Add this price slice' => 'Ajouter cette tranche de prix',
'Area : ' => 'Zone :',
'Change to "Processing"' => 'Statut "Traitement"',
'Change to "Sent". If you choose this option, the delivery notification email is sent to the customer, and the processed order are removed from this page.' => 'Statut "Envoyé". Si vous choisissez cette option, la notification d\'expédition est envoyée au client, et la commande n\'apparaît plus dans cette page',
'Clear label' => 'Supprimer l\'étiquette et le numéro de suivi de cette commande',
'Colissimo Web service configuration' => 'Configuration Colissimo Affranchissement',
'Configuration' => 'Configuration',
'Configuration du service' => 'Configuration du service',
'Coordonnées de d\'expéditeur' => 'Coordonnées de d\'expéditeur',
'Customs invoice' => 'Facture douanes',
'Delete this price slice' => 'Supprimer cette tranche de prix',
'Destination' => 'Destination',
'Do not change' => 'Inchangé',
'Do you want to clear label and tracking number for this order ?' => 'Voulez-vous supprimer l\'étiquette et le numéro de suivi de cette commande ?',
'Download and print Colissimo labels for not sent orders' => 'Télécharger et imprimer les étiquettes d\'affranchissement pour les commandes qui n\'ont pas encore été envoyées',
'Download customs invoice (PDF)' => 'Télécharger la facture de douanes (PDF)',
'Download label (%fmt)' => 'Télécharger l\'étiquette (%fmt)',
'If a cart matches multiple slices, it will take the last slice following that order.' => 'Si un panier correspond à plusieurs tranches, la dernière tranche sera prise en compte selon cet ordre.',
'If you don\'t specify a cart price in a slice, it will have priority over the other slices with the same weight.' => 'Si vous ne renseignez pas de prix de panier max dans une tranche, elle aura la priorité sur les autres tranches ayant le même poids.',
'If you don\'t specify a cart weight in a slice, it will have priority over the slices with weight.' => 'Si vous ne renseignez pas de poids max dans une tranche, elle aura la priorité sur les tranches ayant un poids.',
'If you specify both, the cart will require to have a lower weight AND a lower price in order to match the slice.' => 'Si vous renseignez les deux, le panier devra avoir à la fois un poids inférieur ET un prix inférieur pour correspondre à cette tranche.',
'Label' => 'Etiquette',
'Label cannot be created. Error is: ' => 'La création de l\'étiquette a échoué. L\'erreur est:',
'Message' => 'Message',
'Non disponible' => 'Non disponible',
'Order date' => 'Date de commande',
'Order status change after processing' => 'Statut des commandes après traitement',
'Price slices (Dom)' => 'Tranches de prix (Domicile)',
'Price slices for domicile delivery' => 'Tranches de prix pour la livraison à domicile',
'Process selected orders' => 'Traiter les commandes sélectionnées',
'REF' => 'Ref.',
'Save this price slice' => 'Sauvegarder cette tranche de prix',
'Sel.' => 'Sel.',
'Shipping Price ($)' => 'Frais de livraison',
'Shipping labels' => 'Étiquettes d\'affranchissement',
'Signature' => 'Signature',
'The slices are ordered by maximum cart weight then by maximum cart price.' => 'Les tranches sont triés pour poids de panier max puis par prix de panier max.',
'There are currently no orders to ship with Colissimo' => 'Il n\'y a aucune commande à livrer avec Colissimo pour le moment.',
'Tracking' => 'No. de suivi',
'Untaxed Price up to ... ($)' => 'Prix (HT) jusqu\'à :',
'Weight' => 'Poids (kg)',
'Weight up to ... kg' => 'Poids (kg) jusqu\'à :',
'You can create price slices by specifying a maximum cart weight and/or a maximum cart price.' => 'Vous pouvez créer des tranches de prix pour les frais de port en spécifiant un poids de panier maximum et/ou un prix de panier maximum.',
'You should first attribute shipping zones to the modules: ' => 'Vous devez tout d\'abord ajouter des zones de livraisons au module',
'kg' => 'kg',
'manage shipping zones' => 'Gérer les zones de livraison',
);

View File

@@ -0,0 +1,15 @@
<?php
return array(
'<a href="https://www.colissimo.fr/portail_colissimo/suivreResultat.do?parcelnumber=%package">Click here</a> to track your shipment. You can also enter the tracking number on <a href="https://www.laposte.fr/outils/suivre-vos-envois">https://www.laposte.fr/outils/suivre-vos-envois</a>' => '<a href="https://www.colissimo.fr/portail_colissimo/suivreResultat.do?parcelnumber=%package">Cliquez ici</a> pour suivre l\'acheminement. Vous pouvez aussi entrer le numéro de suivi sur <a href="https://www.laposte.fr/outils/suivre-vos-envois">https://www.laposte.fr/outils/suivre-vos-envois</a>',
'Dear Mr. ' => 'Cher Mr',
'Dear Ms. ' => 'Cher Mme',
'Please display this message in HTML' => 'Afficher ce message en HTML',
'Thank you for your shopping with us and hope to see you soon on <a href="#">www.yourshop.com</a>' => 'Nous vous remercions pour votre achat et espérons vous revoir très vite sur <a href="#">www.votreboutique.com</a>',
'We are pleased to inform you that your order number' => 'Nous sommes heureux de vous informer que votre commande N°',
'Your on-line store Manager' => 'Nom de personne chargé de la communication',
'Your order confirmation Nº %ref' => 'Votre commande N° %ref',
'Your shop' => 'Votre boutique',
'has been shipped on' => 'a été envoyé le',
'with the tracking number' => 'avec le numéro de suivi',
);

View File

@@ -0,0 +1,4 @@
<?php
return array(
// 'an english string' => 'The displayed english string',
);

View File

@@ -0,0 +1,37 @@
<?php
return array(
'Activate free shipping: ' => 'Activer les frais de ports gratuits',
'Activer les logs détaillés' => 'Activer les logs détaillés',
'Adresse' => 'Adresse',
'Adresse (suite)' => 'Adresse (suite)',
'Adresse e-mail de contact pour les expéditions' => 'Adresse e-mail de contact pour les expéditions',
'Code postal' => 'Code postal',
'Colissimo labels (%num)' => 'Etiquettes colissimo (%num)',
'Colissimo password' => 'Mot de passe Colissimo',
'Colissimo username' => 'Nom d\'utilisateur Colissimo',
'ColissimoWs configuration' => 'Configuration Colissimo Affranchissement',
'Do not change' => 'Inchangé',
'Endpoint du web service d\'affranchissement' => 'Endpoint du web service d\'affranchissement',
'Format des étiquettes' => 'Format des étiquettes',
'Indiquez le endpoint de base à utiliser, par exemple https://domain.tld/transactionaldata/api/v1' => 'Indiquez le endpoint de base à utiliser, par exemple https://domain.tld/transactionaldata/api/v1',
'Indiquez le format des étiquettes à générer, en fonction de l\'imprimante dont vous disposez.' => 'Indiquez le format des étiquettes à générer, en fonction de l\'imprimante dont vous disposez.',
'Le mot de passe qui vous permet daccéder à votre espace client à l\'adresse https://www.colissimo.fr/entreprise' => 'Le mot de passe qui vous permet daccéder à votre espace client à l\'adresse https://www.colissimo.fr/entreprise',
'Nom d\'utilisateur Colissimo. C\'est l\'identifiants qui vous permet daccéder à votre espace client à l\'adresse https://www.colissimo.fr/entreprise' => 'Nom d\'utilisateur Colissimo. C\'est l\'identifiants qui vous permet daccéder à votre espace client à l\'adresse https://www.colissimo.fr/entreprise',
'Nom de société' => 'Nom de société',
'Order status after export' => 'Statut de commande après le traitement',
'Pays' => 'Pays',
'Please enter a weight for every selected order' => 'Merci d\'indiquer un poids pour chacune des commandes sélectionnées',
'Set orders status as processing' => 'Placer la commande en "Traitement"',
'Set orders status as sent' => 'Placer la commande "Envoyée"',
'Si cette case est cochée, le texte complet des requêtes et des réponses figurera dans le log Thelia' => 'Si cette case est cochée, le texte complet des requêtes et des réponses figurera dans le log Thelia',
'The area is not valid' => 'La zone n\'est pas valide',
'The price max value is not valid' => 'La valeur du prix max. n\'est pas valide',
'The price value is not valid' => 'La valeur du prix n\'est pas valide',
'The slice has not been deleted' => 'La tranche de prix n\'a pas été supprimée',
'The weight max value is not valid' => 'La valeur du poids max. n\'est pas valide',
'Téléphone' => 'Téléphone',
'Ville' => 'Ville',
'You must specify at least a price max or a weight max value.' => 'Vous devez spécifier au moins un prix max. ou un poids max.',
'Your slice has been saved' => 'La tranche de prix a été sauvegardée',
);

View File

@@ -0,0 +1,17 @@
<?php
return array(
'Country' => 'Pays',
'Engraving ' => 'Gravure',
'Font ' => 'Police de caractère',
'Free samples ' => 'Échantillons gratuits ',
'Full Description of Goods' => 'Description complète des biens',
'Position ' => 'Position',
'Quantity' => 'Quantité',
'Style ' => 'Style',
'Subtotal value' => 'Sous-total',
'Unit net weight' => 'Poids net unitaire',
'Unit value' => 'Valeur unitaire',
'Your gift ' => 'Votre cadeau',
'Your text ' => 'Votre texte',
);

View File

@@ -0,0 +1,49 @@
<?php
namespace ColissimoWs\Loop;
use ColissimoWs\Model\ColissimowsFreeshipping;
use ColissimoWs\Model\ColissimowsFreeshippingQuery;
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 ColissimoWsFreeShippingLoop extends BaseLoop implements PropelSearchLoopInterface
{
/**
* @return ArgumentCollection
*/
protected function getArgDefinitions()
{
return new ArgumentCollection(
Argument::createIntTypeArgument('id')
);
}
public function buildModelCriteria()
{
if (null === $isFreeShippingActive = ColissimowsFreeshippingQuery::create()->findOneById(1)){
$isFreeShippingActive = new ColissimowsFreeshipping();
$isFreeShippingActive->setId(1);
$isFreeShippingActive->setActive(0);
$isFreeShippingActive->save();
}
return ColissimowsFreeshippingQuery::create()->filterById(1);
}
public function parseResults(LoopResult $loopResult)
{
/** @var \ColissimoWs\Model\ColissimowsFreeshipping $freeshipping */
foreach ($loopResult->getResultDataCollection() as $freeshipping) {
$loopResultRow = new LoopResultRow($freeshipping);
$loopResultRow->set("FREESHIPPING_ACTIVE", $freeshipping->getActive());
$loopResult->addRow($loopResultRow);
}
return $loopResult;
}
}

View File

@@ -0,0 +1,102 @@
<?php
/*************************************************************************************/
/* Copyright (c) Franck Allimant, CQFDev */
/* email : thelia@cqfdev.fr */
/* web : http://www.cqfdev.fr */
/* */
/* For the full copyright and license information, please view the LICENSE */
/* file that was distributed with this source code. */
/*************************************************************************************/
/**
* Created by Franck Allimant, CQFDev <franck@cqfdev.fr>
* Date: 04/09/2019 17:56
*/
namespace ColissimoWs\Loop;
use ColissimoWs\ColissimoWs;
use ColissimoWs\Model\ColissimowsLabel;
use ColissimoWs\Model\ColissimowsLabelQuery;
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;
use Thelia\Model\OrderQuery;
use Thelia\Tools\URL;
/**
* @package SimpleDhl\Loop
* @method int getOrderId()
*/
class ColissimoWsLabelInfo extends BaseLoop implements PropelSearchLoopInterface
{
/**
* @return ArgumentCollection
*/
protected function getArgDefinitions()
{
return new ArgumentCollection(
Argument::createIntTypeArgument('order_id', null, true)
);
}
public function buildModelCriteria()
{
return ColissimowsLabelQuery::create()
->filterByOrderId($this->getOrderId());
}
/**
* @param LoopResult $loopResult
* @return LoopResult
* @throws \Propel\Runtime\Exception\PropelException
*/
public function parseResults(LoopResult $loopResult)
{
if ($loopResult->getResultDataCollectionCount() === 0) {
if (null !== $order = OrderQuery::create()->findPk($this->getOrderId())) {
$loopResultRow = new LoopResultRow();
$loopResultRow
->set("ORDER_ID", $this->getOrderId())
->set("HAS_ERROR", false)
->set("ERROR_MESSAGE", null)
->set("WEIGHT", $order->getWeight())
->set("SIGNED", true)
->set("TRACKING_NUMBER", null)
->set("HAS_LABEL", false)
->set("LABEL_URL", URL::getInstance()->absoluteUrl("/admin/module/colissimows/label/" . $this->getOrderId()))
->set("CLEAR_LABEL_URL", URL::getInstance()->absoluteUrl("/admin/module/colissimows/label/clear/" . $this->getOrderId()))
->set("CAN_BE_NOT_SIGNED", ColissimoWs::canOrderBeNotSigned($order));
$loopResult->addRow($loopResultRow);
}
} else {
/** @var ColissimowsLabel $result */
foreach ($loopResult->getResultDataCollection() as $result) {
$loopResultRow = new LoopResultRow();
$loopResultRow
->set("ORDER_ID", $result->getOrderId())
->set("HAS_ERROR", $result->getError())
->set("ERROR_MESSAGE", $result->getErrorMessage())
->set("WEIGHT", empty($result->getWeight()) ? $result->getOrder()->getWeight() : $result->getWeight())
->set("SIGNED", $result->getSigned())
->set("TRACKING_NUMBER", $result->getTrackingNumber())
->set("HAS_LABEL", ! empty($result->getLabelData()))
->set("LABEL_TYPE", $result->getLabelType())
->set("HAS_CUSTOMS_INVOICE", $result->getWithCustomsInvoice())
->set("LABEL_URL", URL::getInstance()->absoluteUrl("/admin/module/colissimows/label/" . $result->getOrderId()))
->set("CUSTOMS_INVOICE_URL", URL::getInstance()->absoluteUrl("/admin/module/colissimows/customs-invoice/" . $result->getOrderId()))
->set("CLEAR_LABEL_URL", URL::getInstance()->absoluteUrl("/admin/module/colissimows/label/clear/" . $result->getOrderId()))
->set("CAN_BE_NOT_SIGNED", ColissimoWs::canOrderBeNotSigned($result->getOrder()));
$loopResult->addRow($loopResultRow);
}
}
return $loopResult;
}
}

View File

@@ -0,0 +1,61 @@
<?php
/*************************************************************************************/
/* Copyright (c) Franck Allimant, CQFDev */
/* email : thelia@cqfdev.fr */
/* web : http://www.cqfdev.fr */
/* */
/* For the full copyright and license information, please view the LICENSE */
/* file that was distributed with this source code. */
/*************************************************************************************/
/**
* Created by Franck Allimant, CQFDev <franck@cqfdev.fr>
* Date: 04/09/2019 17:53
*/
namespace ColissimoWs\Loop;
use ColissimoWs\ColissimoWs;
use Propel\Runtime\ActiveQuery\Criteria;
use Thelia\Core\Template\Loop\Argument\Argument;
use Thelia\Core\Template\Loop\Argument\ArgumentCollection;
use Thelia\Core\Template\Loop\Order;
use Thelia\Model\OrderQuery;
use Thelia\Model\OrderStatus;
use Thelia\Model\OrderStatusQuery;
class OrdersNotYetSentLoop extends Order
{
public function getArgDefinitions()
{
return new ArgumentCollection(Argument::createBooleanTypeArgument('with_prev_next_info', false));
}
/**
* this method returns a Propel ModelCriteria
*
* @return \Propel\Runtime\ActiveQuery\ModelCriteria
*/
public function buildModelCriteria()
{
$status = OrderStatusQuery::create()
->filterByCode(
array(
OrderStatus::CODE_PAID,
OrderStatus::CODE_PROCESSING,
),
Criteria::IN
)
->find()
->toArray("code");
$query = OrderQuery::create()
->filterByDeliveryModuleId(ColissimoWs::getModCode())
->filterByStatusId(
array(
$status[OrderStatus::CODE_PAID]['Id'],
$status[OrderStatus::CODE_PROCESSING]['Id']),
Criteria::IN
);
return $query;
}
}

View File

@@ -0,0 +1,57 @@
<?php
namespace ColissimoWs\Loop;
use ColissimoWs\Model\ColissimowsPriceSlicesQuery;
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;
use function mysql_xdevapi\getSession;
class PriceSlicesLoop extends BaseLoop implements PropelSearchLoopInterface
{
/**
* @return ArgumentCollection
*/
protected function getArgDefinitions()
{
return new ArgumentCollection(
Argument::createIntTypeArgument('area_id', null, true)
);
}
public function buildModelCriteria()
{
$areaId = $this->getAreaId();
$areaPrices = ColissimowsPriceSlicesQuery::create()
->filterByAreaId($areaId)
->orderByMaxWeight()
->orderByMaxPrice()
;
return $areaPrices;
}
public function parseResults(LoopResult $loopResult)
{
/** @var \ColissimoWs\Model\ColissimoWsPriceSlices $priceSlice */
foreach ($loopResult->getResultDataCollection() as $priceSlice) {
$loopResultRow = new LoopResultRow($priceSlice);
$loopResultRow
->set("SLICE_ID", $priceSlice->getId())
->set("MAX_WEIGHT", $priceSlice->getMaxWeight())
->set("MAX_PRICE", $priceSlice->getMaxPrice())
->set("SHIPPING", $priceSlice->getShipping())
->set("FRANCO", $priceSlice->getFrancoMinPrice())
;
$loopResult->addRow($loopResultRow);
}
return $loopResult;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,375 @@
<?php
namespace ColissimoWs\Model\Base;
use \Exception;
use \PDO;
use ColissimoWs\Model\ColissimowsFreeshipping as ChildColissimowsFreeshipping;
use ColissimoWs\Model\ColissimowsFreeshippingQuery as ChildColissimowsFreeshippingQuery;
use ColissimoWs\Model\Map\ColissimowsFreeshippingTableMap;
use Propel\Runtime\Propel;
use Propel\Runtime\ActiveQuery\Criteria;
use Propel\Runtime\ActiveQuery\ModelCriteria;
use Propel\Runtime\Connection\ConnectionInterface;
use Propel\Runtime\Exception\PropelException;
/**
* Base class that represents a query for the 'colissimows_freeshipping' table.
*
*
*
* @method ChildColissimowsFreeshippingQuery orderById($order = Criteria::ASC) Order by the id column
* @method ChildColissimowsFreeshippingQuery orderByActive($order = Criteria::ASC) Order by the active column
*
* @method ChildColissimowsFreeshippingQuery groupById() Group by the id column
* @method ChildColissimowsFreeshippingQuery groupByActive() Group by the active column
*
* @method ChildColissimowsFreeshippingQuery leftJoin($relation) Adds a LEFT JOIN clause to the query
* @method ChildColissimowsFreeshippingQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query
* @method ChildColissimowsFreeshippingQuery innerJoin($relation) Adds a INNER JOIN clause to the query
*
* @method ChildColissimowsFreeshipping findOne(ConnectionInterface $con = null) Return the first ChildColissimowsFreeshipping matching the query
* @method ChildColissimowsFreeshipping findOneOrCreate(ConnectionInterface $con = null) Return the first ChildColissimowsFreeshipping matching the query, or a new ChildColissimowsFreeshipping object populated from the query conditions when no match is found
*
* @method ChildColissimowsFreeshipping findOneById(int $id) Return the first ChildColissimowsFreeshipping filtered by the id column
* @method ChildColissimowsFreeshipping findOneByActive(boolean $active) Return the first ChildColissimowsFreeshipping filtered by the active column
*
* @method array findById(int $id) Return ChildColissimowsFreeshipping objects filtered by the id column
* @method array findByActive(boolean $active) Return ChildColissimowsFreeshipping objects filtered by the active column
*
*/
abstract class ColissimowsFreeshippingQuery extends ModelCriteria
{
/**
* Initializes internal state of \ColissimoWs\Model\Base\ColissimowsFreeshippingQuery 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 = '\\ColissimoWs\\Model\\ColissimowsFreeshipping', $modelAlias = null)
{
parent::__construct($dbName, $modelName, $modelAlias);
}
/**
* Returns a new ChildColissimowsFreeshippingQuery object.
*
* @param string $modelAlias The alias of a model in the query
* @param Criteria $criteria Optional Criteria to build the query from
*
* @return ChildColissimowsFreeshippingQuery
*/
public static function create($modelAlias = null, $criteria = null)
{
if ($criteria instanceof \ColissimoWs\Model\ColissimowsFreeshippingQuery) {
return $criteria;
}
$query = new \ColissimoWs\Model\ColissimowsFreeshippingQuery();
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 ChildColissimowsFreeshipping|array|mixed the result, formatted by the current formatter
*/
public function findPk($key, $con = null)
{
if ($key === null) {
return null;
}
if ((null !== ($obj = ColissimowsFreeshippingTableMap::getInstanceFromPool((string) $key))) && !$this->formatter) {
// the object is already in the instance pool
return $obj;
}
if ($con === null) {
$con = Propel::getServiceContainer()->getReadConnection(ColissimowsFreeshippingTableMap::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 ChildColissimowsFreeshipping A model object, or null if the key is not found
*/
protected function findPkSimple($key, $con)
{
$sql = 'SELECT ID, ACTIVE FROM colissimows_freeshipping 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 ChildColissimowsFreeshipping();
$obj->hydrate($row);
ColissimowsFreeshippingTableMap::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 ChildColissimowsFreeshipping|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 ChildColissimowsFreeshippingQuery The current query, for fluid interface
*/
public function filterByPrimaryKey($key)
{
return $this->addUsingAlias(ColissimowsFreeshippingTableMap::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 ChildColissimowsFreeshippingQuery The current query, for fluid interface
*/
public function filterByPrimaryKeys($keys)
{
return $this->addUsingAlias(ColissimowsFreeshippingTableMap::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 ChildColissimowsFreeshippingQuery 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(ColissimowsFreeshippingTableMap::ID, $id['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($id['max'])) {
$this->addUsingAlias(ColissimowsFreeshippingTableMap::ID, $id['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ColissimowsFreeshippingTableMap::ID, $id, $comparison);
}
/**
* Filter the query on the active column
*
* Example usage:
* <code>
* $query->filterByActive(true); // WHERE active = true
* $query->filterByActive('yes'); // WHERE active = true
* </code>
*
* @param boolean|string $active The value to use as filter.
* Non-boolean arguments are converted using the following rules:
* * 1, '1', 'true', 'on', and 'yes' are converted to boolean true
* * 0, '0', 'false', 'off', and 'no' are converted to boolean false
* Check on string values is case insensitive (so 'FaLsE' is seen as 'false').
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return ChildColissimowsFreeshippingQuery The current query, for fluid interface
*/
public function filterByActive($active = null, $comparison = null)
{
if (is_string($active)) {
$active = in_array(strtolower($active), array('false', 'off', '-', 'no', 'n', '0', '')) ? false : true;
}
return $this->addUsingAlias(ColissimowsFreeshippingTableMap::ACTIVE, $active, $comparison);
}
/**
* Exclude object from result
*
* @param ChildColissimowsFreeshipping $colissimowsFreeshipping Object to remove from the list of results
*
* @return ChildColissimowsFreeshippingQuery The current query, for fluid interface
*/
public function prune($colissimowsFreeshipping = null)
{
if ($colissimowsFreeshipping) {
$this->addUsingAlias(ColissimowsFreeshippingTableMap::ID, $colissimowsFreeshipping->getId(), Criteria::NOT_EQUAL);
}
return $this;
}
/**
* Deletes all rows from the colissimows_freeshipping 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(ColissimowsFreeshippingTableMap::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).
ColissimowsFreeshippingTableMap::clearInstancePool();
ColissimowsFreeshippingTableMap::clearRelatedInstancePool();
$con->commit();
} catch (PropelException $e) {
$con->rollBack();
throw $e;
}
return $affectedRows;
}
/**
* Performs a DELETE on the database, given a ChildColissimowsFreeshipping or Criteria object OR a primary key value.
*
* @param mixed $values Criteria or ChildColissimowsFreeshipping 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(ColissimowsFreeshippingTableMap::DATABASE_NAME);
}
$criteria = $this;
// Set the correct dbName
$criteria->setDbName(ColissimowsFreeshippingTableMap::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();
ColissimowsFreeshippingTableMap::removeInstanceFromPool($criteria);
$affectedRows += ModelCriteria::delete($con);
ColissimowsFreeshippingTableMap::clearRelatedInstancePool();
$con->commit();
return $affectedRows;
} catch (PropelException $e) {
$con->rollBack();
throw $e;
}
}
} // ColissimowsFreeshippingQuery

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,937 @@
<?php
namespace ColissimoWs\Model\Base;
use \Exception;
use \PDO;
use ColissimoWs\Model\ColissimowsLabel as ChildColissimowsLabel;
use ColissimoWs\Model\ColissimowsLabelQuery as ChildColissimowsLabelQuery;
use ColissimoWs\Model\Map\ColissimowsLabelTableMap;
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 'colissimows_label' table.
*
*
*
* @method ChildColissimowsLabelQuery orderById($order = Criteria::ASC) Order by the id column
* @method ChildColissimowsLabelQuery orderByOrderId($order = Criteria::ASC) Order by the order_id column
* @method ChildColissimowsLabelQuery orderByOrderRef($order = Criteria::ASC) Order by the order_ref column
* @method ChildColissimowsLabelQuery orderByError($order = Criteria::ASC) Order by the error column
* @method ChildColissimowsLabelQuery orderByErrorMessage($order = Criteria::ASC) Order by the error_message column
* @method ChildColissimowsLabelQuery orderByTrackingNumber($order = Criteria::ASC) Order by the tracking_number column
* @method ChildColissimowsLabelQuery orderByLabelData($order = Criteria::ASC) Order by the label_data column
* @method ChildColissimowsLabelQuery orderByLabelType($order = Criteria::ASC) Order by the label_type column
* @method ChildColissimowsLabelQuery orderByWeight($order = Criteria::ASC) Order by the weight column
* @method ChildColissimowsLabelQuery orderBySigned($order = Criteria::ASC) Order by the signed column
* @method ChildColissimowsLabelQuery orderByWithCustomsInvoice($order = Criteria::ASC) Order by the with_customs_invoice column
* @method ChildColissimowsLabelQuery orderByCreatedAt($order = Criteria::ASC) Order by the created_at column
* @method ChildColissimowsLabelQuery orderByUpdatedAt($order = Criteria::ASC) Order by the updated_at column
*
* @method ChildColissimowsLabelQuery groupById() Group by the id column
* @method ChildColissimowsLabelQuery groupByOrderId() Group by the order_id column
* @method ChildColissimowsLabelQuery groupByOrderRef() Group by the order_ref column
* @method ChildColissimowsLabelQuery groupByError() Group by the error column
* @method ChildColissimowsLabelQuery groupByErrorMessage() Group by the error_message column
* @method ChildColissimowsLabelQuery groupByTrackingNumber() Group by the tracking_number column
* @method ChildColissimowsLabelQuery groupByLabelData() Group by the label_data column
* @method ChildColissimowsLabelQuery groupByLabelType() Group by the label_type column
* @method ChildColissimowsLabelQuery groupByWeight() Group by the weight column
* @method ChildColissimowsLabelQuery groupBySigned() Group by the signed column
* @method ChildColissimowsLabelQuery groupByWithCustomsInvoice() Group by the with_customs_invoice column
* @method ChildColissimowsLabelQuery groupByCreatedAt() Group by the created_at column
* @method ChildColissimowsLabelQuery groupByUpdatedAt() Group by the updated_at column
*
* @method ChildColissimowsLabelQuery leftJoin($relation) Adds a LEFT JOIN clause to the query
* @method ChildColissimowsLabelQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query
* @method ChildColissimowsLabelQuery innerJoin($relation) Adds a INNER JOIN clause to the query
*
* @method ChildColissimowsLabelQuery leftJoinOrder($relationAlias = null) Adds a LEFT JOIN clause to the query using the Order relation
* @method ChildColissimowsLabelQuery rightJoinOrder($relationAlias = null) Adds a RIGHT JOIN clause to the query using the Order relation
* @method ChildColissimowsLabelQuery innerJoinOrder($relationAlias = null) Adds a INNER JOIN clause to the query using the Order relation
*
* @method ChildColissimowsLabel findOne(ConnectionInterface $con = null) Return the first ChildColissimowsLabel matching the query
* @method ChildColissimowsLabel findOneOrCreate(ConnectionInterface $con = null) Return the first ChildColissimowsLabel matching the query, or a new ChildColissimowsLabel object populated from the query conditions when no match is found
*
* @method ChildColissimowsLabel findOneById(int $id) Return the first ChildColissimowsLabel filtered by the id column
* @method ChildColissimowsLabel findOneByOrderId(int $order_id) Return the first ChildColissimowsLabel filtered by the order_id column
* @method ChildColissimowsLabel findOneByOrderRef(string $order_ref) Return the first ChildColissimowsLabel filtered by the order_ref column
* @method ChildColissimowsLabel findOneByError(boolean $error) Return the first ChildColissimowsLabel filtered by the error column
* @method ChildColissimowsLabel findOneByErrorMessage(string $error_message) Return the first ChildColissimowsLabel filtered by the error_message column
* @method ChildColissimowsLabel findOneByTrackingNumber(string $tracking_number) Return the first ChildColissimowsLabel filtered by the tracking_number column
* @method ChildColissimowsLabel findOneByLabelData(string $label_data) Return the first ChildColissimowsLabel filtered by the label_data column
* @method ChildColissimowsLabel findOneByLabelType(string $label_type) Return the first ChildColissimowsLabel filtered by the label_type column
* @method ChildColissimowsLabel findOneByWeight(double $weight) Return the first ChildColissimowsLabel filtered by the weight column
* @method ChildColissimowsLabel findOneBySigned(boolean $signed) Return the first ChildColissimowsLabel filtered by the signed column
* @method ChildColissimowsLabel findOneByWithCustomsInvoice(boolean $with_customs_invoice) Return the first ChildColissimowsLabel filtered by the with_customs_invoice column
* @method ChildColissimowsLabel findOneByCreatedAt(string $created_at) Return the first ChildColissimowsLabel filtered by the created_at column
* @method ChildColissimowsLabel findOneByUpdatedAt(string $updated_at) Return the first ChildColissimowsLabel filtered by the updated_at column
*
* @method array findById(int $id) Return ChildColissimowsLabel objects filtered by the id column
* @method array findByOrderId(int $order_id) Return ChildColissimowsLabel objects filtered by the order_id column
* @method array findByOrderRef(string $order_ref) Return ChildColissimowsLabel objects filtered by the order_ref column
* @method array findByError(boolean $error) Return ChildColissimowsLabel objects filtered by the error column
* @method array findByErrorMessage(string $error_message) Return ChildColissimowsLabel objects filtered by the error_message column
* @method array findByTrackingNumber(string $tracking_number) Return ChildColissimowsLabel objects filtered by the tracking_number column
* @method array findByLabelData(string $label_data) Return ChildColissimowsLabel objects filtered by the label_data column
* @method array findByLabelType(string $label_type) Return ChildColissimowsLabel objects filtered by the label_type column
* @method array findByWeight(double $weight) Return ChildColissimowsLabel objects filtered by the weight column
* @method array findBySigned(boolean $signed) Return ChildColissimowsLabel objects filtered by the signed column
* @method array findByWithCustomsInvoice(boolean $with_customs_invoice) Return ChildColissimowsLabel objects filtered by the with_customs_invoice column
* @method array findByCreatedAt(string $created_at) Return ChildColissimowsLabel objects filtered by the created_at column
* @method array findByUpdatedAt(string $updated_at) Return ChildColissimowsLabel objects filtered by the updated_at column
*
*/
abstract class ColissimowsLabelQuery extends ModelCriteria
{
/**
* Initializes internal state of \ColissimoWs\Model\Base\ColissimowsLabelQuery 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 = '\\ColissimoWs\\Model\\ColissimowsLabel', $modelAlias = null)
{
parent::__construct($dbName, $modelName, $modelAlias);
}
/**
* Returns a new ChildColissimowsLabelQuery object.
*
* @param string $modelAlias The alias of a model in the query
* @param Criteria $criteria Optional Criteria to build the query from
*
* @return ChildColissimowsLabelQuery
*/
public static function create($modelAlias = null, $criteria = null)
{
if ($criteria instanceof \ColissimoWs\Model\ColissimowsLabelQuery) {
return $criteria;
}
$query = new \ColissimoWs\Model\ColissimowsLabelQuery();
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 ChildColissimowsLabel|array|mixed the result, formatted by the current formatter
*/
public function findPk($key, $con = null)
{
if ($key === null) {
return null;
}
if ((null !== ($obj = ColissimowsLabelTableMap::getInstanceFromPool((string) $key))) && !$this->formatter) {
// the object is already in the instance pool
return $obj;
}
if ($con === null) {
$con = Propel::getServiceContainer()->getReadConnection(ColissimowsLabelTableMap::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 ChildColissimowsLabel A model object, or null if the key is not found
*/
protected function findPkSimple($key, $con)
{
$sql = 'SELECT ID, ORDER_ID, ORDER_REF, ERROR, ERROR_MESSAGE, TRACKING_NUMBER, LABEL_DATA, LABEL_TYPE, WEIGHT, SIGNED, WITH_CUSTOMS_INVOICE, CREATED_AT, UPDATED_AT FROM colissimows_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 ChildColissimowsLabel();
$obj->hydrate($row);
ColissimowsLabelTableMap::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 ChildColissimowsLabel|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 ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function filterByPrimaryKey($key)
{
return $this->addUsingAlias(ColissimowsLabelTableMap::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 ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function filterByPrimaryKeys($keys)
{
return $this->addUsingAlias(ColissimowsLabelTableMap::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 ChildColissimowsLabelQuery 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(ColissimowsLabelTableMap::ID, $id['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($id['max'])) {
$this->addUsingAlias(ColissimowsLabelTableMap::ID, $id['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ColissimowsLabelTableMap::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 ChildColissimowsLabelQuery 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(ColissimowsLabelTableMap::ORDER_ID, $orderId['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($orderId['max'])) {
$this->addUsingAlias(ColissimowsLabelTableMap::ORDER_ID, $orderId['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ColissimowsLabelTableMap::ORDER_ID, $orderId, $comparison);
}
/**
* Filter the query on the order_ref column
*
* Example usage:
* <code>
* $query->filterByOrderRef('fooValue'); // WHERE order_ref = 'fooValue'
* $query->filterByOrderRef('%fooValue%'); // WHERE order_ref LIKE '%fooValue%'
* </code>
*
* @param string $orderRef 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 ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function filterByOrderRef($orderRef = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($orderRef)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $orderRef)) {
$orderRef = str_replace('*', '%', $orderRef);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ColissimowsLabelTableMap::ORDER_REF, $orderRef, $comparison);
}
/**
* Filter the query on the error column
*
* Example usage:
* <code>
* $query->filterByError(true); // WHERE error = true
* $query->filterByError('yes'); // WHERE error = true
* </code>
*
* @param boolean|string $error The value to use as filter.
* Non-boolean arguments are converted using the following rules:
* * 1, '1', 'true', 'on', and 'yes' are converted to boolean true
* * 0, '0', 'false', 'off', and 'no' are converted to boolean false
* Check on string values is case insensitive (so 'FaLsE' is seen as 'false').
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function filterByError($error = null, $comparison = null)
{
if (is_string($error)) {
$error = in_array(strtolower($error), array('false', 'off', '-', 'no', 'n', '0', '')) ? false : true;
}
return $this->addUsingAlias(ColissimowsLabelTableMap::ERROR, $error, $comparison);
}
/**
* Filter the query on the error_message column
*
* Example usage:
* <code>
* $query->filterByErrorMessage('fooValue'); // WHERE error_message = 'fooValue'
* $query->filterByErrorMessage('%fooValue%'); // WHERE error_message LIKE '%fooValue%'
* </code>
*
* @param string $errorMessage 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 ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function filterByErrorMessage($errorMessage = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($errorMessage)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $errorMessage)) {
$errorMessage = str_replace('*', '%', $errorMessage);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ColissimowsLabelTableMap::ERROR_MESSAGE, $errorMessage, $comparison);
}
/**
* Filter the query on the tracking_number column
*
* Example usage:
* <code>
* $query->filterByTrackingNumber('fooValue'); // WHERE tracking_number = 'fooValue'
* $query->filterByTrackingNumber('%fooValue%'); // WHERE tracking_number LIKE '%fooValue%'
* </code>
*
* @param string $trackingNumber 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 ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function filterByTrackingNumber($trackingNumber = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($trackingNumber)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $trackingNumber)) {
$trackingNumber = str_replace('*', '%', $trackingNumber);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ColissimowsLabelTableMap::TRACKING_NUMBER, $trackingNumber, $comparison);
}
/**
* Filter the query on the label_data column
*
* Example usage:
* <code>
* $query->filterByLabelData('fooValue'); // WHERE label_data = 'fooValue'
* $query->filterByLabelData('%fooValue%'); // WHERE label_data LIKE '%fooValue%'
* </code>
*
* @param string $labelData 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 ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function filterByLabelData($labelData = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($labelData)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $labelData)) {
$labelData = str_replace('*', '%', $labelData);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ColissimowsLabelTableMap::LABEL_DATA, $labelData, $comparison);
}
/**
* Filter the query on the label_type column
*
* Example usage:
* <code>
* $query->filterByLabelType('fooValue'); // WHERE label_type = 'fooValue'
* $query->filterByLabelType('%fooValue%'); // WHERE label_type LIKE '%fooValue%'
* </code>
*
* @param string $labelType 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 ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function filterByLabelType($labelType = null, $comparison = null)
{
if (null === $comparison) {
if (is_array($labelType)) {
$comparison = Criteria::IN;
} elseif (preg_match('/[\%\*]/', $labelType)) {
$labelType = str_replace('*', '%', $labelType);
$comparison = Criteria::LIKE;
}
}
return $this->addUsingAlias(ColissimowsLabelTableMap::LABEL_TYPE, $labelType, $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 ChildColissimowsLabelQuery 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(ColissimowsLabelTableMap::WEIGHT, $weight['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($weight['max'])) {
$this->addUsingAlias(ColissimowsLabelTableMap::WEIGHT, $weight['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ColissimowsLabelTableMap::WEIGHT, $weight, $comparison);
}
/**
* Filter the query on the signed column
*
* Example usage:
* <code>
* $query->filterBySigned(true); // WHERE signed = true
* $query->filterBySigned('yes'); // WHERE signed = true
* </code>
*
* @param boolean|string $signed The value to use as filter.
* Non-boolean arguments are converted using the following rules:
* * 1, '1', 'true', 'on', and 'yes' are converted to boolean true
* * 0, '0', 'false', 'off', and 'no' are converted to boolean false
* Check on string values is case insensitive (so 'FaLsE' is seen as 'false').
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function filterBySigned($signed = null, $comparison = null)
{
if (is_string($signed)) {
$signed = in_array(strtolower($signed), array('false', 'off', '-', 'no', 'n', '0', '')) ? false : true;
}
return $this->addUsingAlias(ColissimowsLabelTableMap::SIGNED, $signed, $comparison);
}
/**
* Filter the query on the with_customs_invoice column
*
* Example usage:
* <code>
* $query->filterByWithCustomsInvoice(true); // WHERE with_customs_invoice = true
* $query->filterByWithCustomsInvoice('yes'); // WHERE with_customs_invoice = true
* </code>
*
* @param boolean|string $withCustomsInvoice The value to use as filter.
* Non-boolean arguments are converted using the following rules:
* * 1, '1', 'true', 'on', and 'yes' are converted to boolean true
* * 0, '0', 'false', 'off', and 'no' are converted to boolean false
* Check on string values is case insensitive (so 'FaLsE' is seen as 'false').
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function filterByWithCustomsInvoice($withCustomsInvoice = null, $comparison = null)
{
if (is_string($withCustomsInvoice)) {
$with_customs_invoice = in_array(strtolower($withCustomsInvoice), array('false', 'off', '-', 'no', 'n', '0', '')) ? false : true;
}
return $this->addUsingAlias(ColissimowsLabelTableMap::WITH_CUSTOMS_INVOICE, $withCustomsInvoice, $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 ChildColissimowsLabelQuery 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(ColissimowsLabelTableMap::CREATED_AT, $createdAt['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($createdAt['max'])) {
$this->addUsingAlias(ColissimowsLabelTableMap::CREATED_AT, $createdAt['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ColissimowsLabelTableMap::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 ChildColissimowsLabelQuery 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(ColissimowsLabelTableMap::UPDATED_AT, $updatedAt['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($updatedAt['max'])) {
$this->addUsingAlias(ColissimowsLabelTableMap::UPDATED_AT, $updatedAt['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ColissimowsLabelTableMap::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 ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function filterByOrder($order, $comparison = null)
{
if ($order instanceof \Thelia\Model\Order) {
return $this
->addUsingAlias(ColissimowsLabelTableMap::ORDER_ID, $order->getId(), $comparison);
} elseif ($order instanceof ObjectCollection) {
if (null === $comparison) {
$comparison = Criteria::IN;
}
return $this
->addUsingAlias(ColissimowsLabelTableMap::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 ChildColissimowsLabelQuery 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 ChildColissimowsLabel $colissimowsLabel Object to remove from the list of results
*
* @return ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function prune($colissimowsLabel = null)
{
if ($colissimowsLabel) {
$this->addUsingAlias(ColissimowsLabelTableMap::ID, $colissimowsLabel->getId(), Criteria::NOT_EQUAL);
}
return $this;
}
/**
* Deletes all rows from the colissimows_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(ColissimowsLabelTableMap::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).
ColissimowsLabelTableMap::clearInstancePool();
ColissimowsLabelTableMap::clearRelatedInstancePool();
$con->commit();
} catch (PropelException $e) {
$con->rollBack();
throw $e;
}
return $affectedRows;
}
/**
* Performs a DELETE on the database, given a ChildColissimowsLabel or Criteria object OR a primary key value.
*
* @param mixed $values Criteria or ChildColissimowsLabel 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(ColissimowsLabelTableMap::DATABASE_NAME);
}
$criteria = $this;
// Set the correct dbName
$criteria->setDbName(ColissimowsLabelTableMap::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();
ColissimowsLabelTableMap::removeInstanceFromPool($criteria);
$affectedRows += ModelCriteria::delete($con);
ColissimowsLabelTableMap::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 ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function recentlyUpdated($nbDays = 7)
{
return $this->addUsingAlias(ColissimowsLabelTableMap::UPDATED_AT, time() - $nbDays * 24 * 60 * 60, Criteria::GREATER_EQUAL);
}
/**
* Filter by the latest created
*
* @param int $nbDays Maximum age of in days
*
* @return ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function recentlyCreated($nbDays = 7)
{
return $this->addUsingAlias(ColissimowsLabelTableMap::CREATED_AT, time() - $nbDays * 24 * 60 * 60, Criteria::GREATER_EQUAL);
}
/**
* Order by update date desc
*
* @return ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function lastUpdatedFirst()
{
return $this->addDescendingOrderByColumn(ColissimowsLabelTableMap::UPDATED_AT);
}
/**
* Order by update date asc
*
* @return ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function firstUpdatedFirst()
{
return $this->addAscendingOrderByColumn(ColissimowsLabelTableMap::UPDATED_AT);
}
/**
* Order by create date desc
*
* @return ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function lastCreatedFirst()
{
return $this->addDescendingOrderByColumn(ColissimowsLabelTableMap::CREATED_AT);
}
/**
* Order by create date asc
*
* @return ChildColissimowsLabelQuery The current query, for fluid interface
*/
public function firstCreatedFirst()
{
return $this->addAscendingOrderByColumn(ColissimowsLabelTableMap::CREATED_AT);
}
} // ColissimowsLabelQuery

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,654 @@
<?php
namespace ColissimoWs\Model\Base;
use \Exception;
use \PDO;
use ColissimoWs\Model\ColissimowsPriceSlices as ChildColissimowsPriceSlices;
use ColissimoWs\Model\ColissimowsPriceSlicesQuery as ChildColissimowsPriceSlicesQuery;
use ColissimoWs\Model\Map\ColissimowsPriceSlicesTableMap;
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\Area;
/**
* Base class that represents a query for the 'colissimows_price_slices' table.
*
*
*
* @method ChildColissimowsPriceSlicesQuery orderById($order = Criteria::ASC) Order by the id column
* @method ChildColissimowsPriceSlicesQuery orderByAreaId($order = Criteria::ASC) Order by the area_id column
* @method ChildColissimowsPriceSlicesQuery orderByMaxWeight($order = Criteria::ASC) Order by the max_weight column
* @method ChildColissimowsPriceSlicesQuery orderByMaxPrice($order = Criteria::ASC) Order by the max_price column
* @method ChildColissimowsPriceSlicesQuery orderByShipping($order = Criteria::ASC) Order by the shipping column
* @method ChildColissimowsPriceSlicesQuery orderByFrancoMinPrice($order = Criteria::ASC) Order by the franco_min_price column
*
* @method ChildColissimowsPriceSlicesQuery groupById() Group by the id column
* @method ChildColissimowsPriceSlicesQuery groupByAreaId() Group by the area_id column
* @method ChildColissimowsPriceSlicesQuery groupByMaxWeight() Group by the max_weight column
* @method ChildColissimowsPriceSlicesQuery groupByMaxPrice() Group by the max_price column
* @method ChildColissimowsPriceSlicesQuery groupByShipping() Group by the shipping column
* @method ChildColissimowsPriceSlicesQuery groupByFrancoMinPrice() Group by the franco_min_price column
*
* @method ChildColissimowsPriceSlicesQuery leftJoin($relation) Adds a LEFT JOIN clause to the query
* @method ChildColissimowsPriceSlicesQuery rightJoin($relation) Adds a RIGHT JOIN clause to the query
* @method ChildColissimowsPriceSlicesQuery innerJoin($relation) Adds a INNER JOIN clause to the query
*
* @method ChildColissimowsPriceSlicesQuery leftJoinArea($relationAlias = null) Adds a LEFT JOIN clause to the query using the Area relation
* @method ChildColissimowsPriceSlicesQuery rightJoinArea($relationAlias = null) Adds a RIGHT JOIN clause to the query using the Area relation
* @method ChildColissimowsPriceSlicesQuery innerJoinArea($relationAlias = null) Adds a INNER JOIN clause to the query using the Area relation
*
* @method ChildColissimowsPriceSlices findOne(ConnectionInterface $con = null) Return the first ChildColissimowsPriceSlices matching the query
* @method ChildColissimowsPriceSlices findOneOrCreate(ConnectionInterface $con = null) Return the first ChildColissimowsPriceSlices matching the query, or a new ChildColissimowsPriceSlices object populated from the query conditions when no match is found
*
* @method ChildColissimowsPriceSlices findOneById(int $id) Return the first ChildColissimowsPriceSlices filtered by the id column
* @method ChildColissimowsPriceSlices findOneByAreaId(int $area_id) Return the first ChildColissimowsPriceSlices filtered by the area_id column
* @method ChildColissimowsPriceSlices findOneByMaxWeight(double $max_weight) Return the first ChildColissimowsPriceSlices filtered by the max_weight column
* @method ChildColissimowsPriceSlices findOneByMaxPrice(double $max_price) Return the first ChildColissimowsPriceSlices filtered by the max_price column
* @method ChildColissimowsPriceSlices findOneByShipping(double $shipping) Return the first ChildColissimowsPriceSlices filtered by the shipping column
* @method ChildColissimowsPriceSlices findOneByFrancoMinPrice(double $franco_min_price) Return the first ChildColissimowsPriceSlices filtered by the franco_min_price column
*
* @method array findById(int $id) Return ChildColissimowsPriceSlices objects filtered by the id column
* @method array findByAreaId(int $area_id) Return ChildColissimowsPriceSlices objects filtered by the area_id column
* @method array findByMaxWeight(double $max_weight) Return ChildColissimowsPriceSlices objects filtered by the max_weight column
* @method array findByMaxPrice(double $max_price) Return ChildColissimowsPriceSlices objects filtered by the max_price column
* @method array findByShipping(double $shipping) Return ChildColissimowsPriceSlices objects filtered by the shipping column
* @method array findByFrancoMinPrice(double $franco_min_price) Return ChildColissimowsPriceSlices objects filtered by the franco_min_price column
*
*/
abstract class ColissimowsPriceSlicesQuery extends ModelCriteria
{
/**
* Initializes internal state of \ColissimoWs\Model\Base\ColissimowsPriceSlicesQuery 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 = '\\ColissimoWs\\Model\\ColissimowsPriceSlices', $modelAlias = null)
{
parent::__construct($dbName, $modelName, $modelAlias);
}
/**
* Returns a new ChildColissimowsPriceSlicesQuery object.
*
* @param string $modelAlias The alias of a model in the query
* @param Criteria $criteria Optional Criteria to build the query from
*
* @return ChildColissimowsPriceSlicesQuery
*/
public static function create($modelAlias = null, $criteria = null)
{
if ($criteria instanceof \ColissimoWs\Model\ColissimowsPriceSlicesQuery) {
return $criteria;
}
$query = new \ColissimoWs\Model\ColissimowsPriceSlicesQuery();
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 ChildColissimowsPriceSlices|array|mixed the result, formatted by the current formatter
*/
public function findPk($key, $con = null)
{
if ($key === null) {
return null;
}
if ((null !== ($obj = ColissimowsPriceSlicesTableMap::getInstanceFromPool((string) $key))) && !$this->formatter) {
// the object is already in the instance pool
return $obj;
}
if ($con === null) {
$con = Propel::getServiceContainer()->getReadConnection(ColissimowsPriceSlicesTableMap::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 ChildColissimowsPriceSlices A model object, or null if the key is not found
*/
protected function findPkSimple($key, $con)
{
$sql = 'SELECT ID, AREA_ID, MAX_WEIGHT, MAX_PRICE, SHIPPING, FRANCO_MIN_PRICE FROM colissimows_price_slices 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 ChildColissimowsPriceSlices();
$obj->hydrate($row);
ColissimowsPriceSlicesTableMap::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 ChildColissimowsPriceSlices|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 ChildColissimowsPriceSlicesQuery The current query, for fluid interface
*/
public function filterByPrimaryKey($key)
{
return $this->addUsingAlias(ColissimowsPriceSlicesTableMap::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 ChildColissimowsPriceSlicesQuery The current query, for fluid interface
*/
public function filterByPrimaryKeys($keys)
{
return $this->addUsingAlias(ColissimowsPriceSlicesTableMap::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 ChildColissimowsPriceSlicesQuery 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(ColissimowsPriceSlicesTableMap::ID, $id['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($id['max'])) {
$this->addUsingAlias(ColissimowsPriceSlicesTableMap::ID, $id['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ColissimowsPriceSlicesTableMap::ID, $id, $comparison);
}
/**
* Filter the query on the area_id column
*
* Example usage:
* <code>
* $query->filterByAreaId(1234); // WHERE area_id = 1234
* $query->filterByAreaId(array(12, 34)); // WHERE area_id IN (12, 34)
* $query->filterByAreaId(array('min' => 12)); // WHERE area_id > 12
* </code>
*
* @see filterByArea()
*
* @param mixed $areaId 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 ChildColissimowsPriceSlicesQuery The current query, for fluid interface
*/
public function filterByAreaId($areaId = null, $comparison = null)
{
if (is_array($areaId)) {
$useMinMax = false;
if (isset($areaId['min'])) {
$this->addUsingAlias(ColissimowsPriceSlicesTableMap::AREA_ID, $areaId['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($areaId['max'])) {
$this->addUsingAlias(ColissimowsPriceSlicesTableMap::AREA_ID, $areaId['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ColissimowsPriceSlicesTableMap::AREA_ID, $areaId, $comparison);
}
/**
* Filter the query on the max_weight column
*
* Example usage:
* <code>
* $query->filterByMaxWeight(1234); // WHERE max_weight = 1234
* $query->filterByMaxWeight(array(12, 34)); // WHERE max_weight IN (12, 34)
* $query->filterByMaxWeight(array('min' => 12)); // WHERE max_weight > 12
* </code>
*
* @param mixed $maxWeight 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 ChildColissimowsPriceSlicesQuery The current query, for fluid interface
*/
public function filterByMaxWeight($maxWeight = null, $comparison = null)
{
if (is_array($maxWeight)) {
$useMinMax = false;
if (isset($maxWeight['min'])) {
$this->addUsingAlias(ColissimowsPriceSlicesTableMap::MAX_WEIGHT, $maxWeight['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($maxWeight['max'])) {
$this->addUsingAlias(ColissimowsPriceSlicesTableMap::MAX_WEIGHT, $maxWeight['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ColissimowsPriceSlicesTableMap::MAX_WEIGHT, $maxWeight, $comparison);
}
/**
* Filter the query on the max_price column
*
* Example usage:
* <code>
* $query->filterByMaxPrice(1234); // WHERE max_price = 1234
* $query->filterByMaxPrice(array(12, 34)); // WHERE max_price IN (12, 34)
* $query->filterByMaxPrice(array('min' => 12)); // WHERE max_price > 12
* </code>
*
* @param mixed $maxPrice 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 ChildColissimowsPriceSlicesQuery The current query, for fluid interface
*/
public function filterByMaxPrice($maxPrice = null, $comparison = null)
{
if (is_array($maxPrice)) {
$useMinMax = false;
if (isset($maxPrice['min'])) {
$this->addUsingAlias(ColissimowsPriceSlicesTableMap::MAX_PRICE, $maxPrice['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($maxPrice['max'])) {
$this->addUsingAlias(ColissimowsPriceSlicesTableMap::MAX_PRICE, $maxPrice['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ColissimowsPriceSlicesTableMap::MAX_PRICE, $maxPrice, $comparison);
}
/**
* Filter the query on the shipping column
*
* Example usage:
* <code>
* $query->filterByShipping(1234); // WHERE shipping = 1234
* $query->filterByShipping(array(12, 34)); // WHERE shipping IN (12, 34)
* $query->filterByShipping(array('min' => 12)); // WHERE shipping > 12
* </code>
*
* @param mixed $shipping 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 ChildColissimowsPriceSlicesQuery The current query, for fluid interface
*/
public function filterByShipping($shipping = null, $comparison = null)
{
if (is_array($shipping)) {
$useMinMax = false;
if (isset($shipping['min'])) {
$this->addUsingAlias(ColissimowsPriceSlicesTableMap::SHIPPING, $shipping['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($shipping['max'])) {
$this->addUsingAlias(ColissimowsPriceSlicesTableMap::SHIPPING, $shipping['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ColissimowsPriceSlicesTableMap::SHIPPING, $shipping, $comparison);
}
/**
* Filter the query on the franco_min_price column
*
* Example usage:
* <code>
* $query->filterByFrancoMinPrice(1234); // WHERE franco_min_price = 1234
* $query->filterByFrancoMinPrice(array(12, 34)); // WHERE franco_min_price IN (12, 34)
* $query->filterByFrancoMinPrice(array('min' => 12)); // WHERE franco_min_price > 12
* </code>
*
* @param mixed $francoMinPrice 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 ChildColissimowsPriceSlicesQuery The current query, for fluid interface
*/
public function filterByFrancoMinPrice($francoMinPrice = null, $comparison = null)
{
if (is_array($francoMinPrice)) {
$useMinMax = false;
if (isset($francoMinPrice['min'])) {
$this->addUsingAlias(ColissimowsPriceSlicesTableMap::FRANCO_MIN_PRICE, $francoMinPrice['min'], Criteria::GREATER_EQUAL);
$useMinMax = true;
}
if (isset($francoMinPrice['max'])) {
$this->addUsingAlias(ColissimowsPriceSlicesTableMap::FRANCO_MIN_PRICE, $francoMinPrice['max'], Criteria::LESS_EQUAL);
$useMinMax = true;
}
if ($useMinMax) {
return $this;
}
if (null === $comparison) {
$comparison = Criteria::IN;
}
}
return $this->addUsingAlias(ColissimowsPriceSlicesTableMap::FRANCO_MIN_PRICE, $francoMinPrice, $comparison);
}
/**
* Filter the query by a related \Thelia\Model\Area object
*
* @param \Thelia\Model\Area|ObjectCollection $area The related object(s) to use as filter
* @param string $comparison Operator to use for the column comparison, defaults to Criteria::EQUAL
*
* @return ChildColissimowsPriceSlicesQuery The current query, for fluid interface
*/
public function filterByArea($area, $comparison = null)
{
if ($area instanceof \Thelia\Model\Area) {
return $this
->addUsingAlias(ColissimowsPriceSlicesTableMap::AREA_ID, $area->getId(), $comparison);
} elseif ($area instanceof ObjectCollection) {
if (null === $comparison) {
$comparison = Criteria::IN;
}
return $this
->addUsingAlias(ColissimowsPriceSlicesTableMap::AREA_ID, $area->toKeyValue('PrimaryKey', 'Id'), $comparison);
} else {
throw new PropelException('filterByArea() only accepts arguments of type \Thelia\Model\Area or Collection');
}
}
/**
* Adds a JOIN clause to the query using the Area relation
*
* @param string $relationAlias optional alias for the relation
* @param string $joinType Accepted values are null, 'left join', 'right join', 'inner join'
*
* @return ChildColissimowsPriceSlicesQuery The current query, for fluid interface
*/
public function joinArea($relationAlias = null, $joinType = Criteria::INNER_JOIN)
{
$tableMap = $this->getTableMap();
$relationMap = $tableMap->getRelation('Area');
// 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, 'Area');
}
return $this;
}
/**
* Use the Area relation Area 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\AreaQuery A secondary query class using the current class as primary query
*/
public function useAreaQuery($relationAlias = null, $joinType = Criteria::INNER_JOIN)
{
return $this
->joinArea($relationAlias, $joinType)
->useQuery($relationAlias ? $relationAlias : 'Area', '\Thelia\Model\AreaQuery');
}
/**
* Exclude object from result
*
* @param ChildColissimowsPriceSlices $colissimowsPriceSlices Object to remove from the list of results
*
* @return ChildColissimowsPriceSlicesQuery The current query, for fluid interface
*/
public function prune($colissimowsPriceSlices = null)
{
if ($colissimowsPriceSlices) {
$this->addUsingAlias(ColissimowsPriceSlicesTableMap::ID, $colissimowsPriceSlices->getId(), Criteria::NOT_EQUAL);
}
return $this;
}
/**
* Deletes all rows from the colissimows_price_slices 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(ColissimowsPriceSlicesTableMap::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).
ColissimowsPriceSlicesTableMap::clearInstancePool();
ColissimowsPriceSlicesTableMap::clearRelatedInstancePool();
$con->commit();
} catch (PropelException $e) {
$con->rollBack();
throw $e;
}
return $affectedRows;
}
/**
* Performs a DELETE on the database, given a ChildColissimowsPriceSlices or Criteria object OR a primary key value.
*
* @param mixed $values Criteria or ChildColissimowsPriceSlices 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(ColissimowsPriceSlicesTableMap::DATABASE_NAME);
}
$criteria = $this;
// Set the correct dbName
$criteria->setDbName(ColissimowsPriceSlicesTableMap::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();
ColissimowsPriceSlicesTableMap::removeInstanceFromPool($criteria);
$affectedRows += ModelCriteria::delete($con);
ColissimowsPriceSlicesTableMap::clearRelatedInstancePool();
$con->commit();
return $affectedRows;
} catch (PropelException $e) {
$con->rollBack();
throw $e;
}
}
} // ColissimowsPriceSlicesQuery

View File

@@ -0,0 +1,20 @@
<?php
namespace ColissimoWs\Model;
use ColissimoWs\Model\Base\ColissimowsFreeshipping as BaseColissimowsFreeshipping;
/**
* Skeleton subclass for representing a row from the 'colissimows_freeshipping' 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 ColissimowsFreeshipping extends BaseColissimowsFreeshipping
{
}

View File

@@ -0,0 +1,20 @@
<?php
namespace ColissimoWs\Model;
use ColissimoWs\Model\Base\ColissimowsFreeshippingQuery as BaseColissimowsFreeshippingQuery;
/**
* Skeleton subclass for performing query and update operations on the 'colissimows_freeshipping' 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 ColissimowsFreeshippingQuery extends BaseColissimowsFreeshippingQuery
{
}

View File

@@ -0,0 +1,20 @@
<?php
namespace ColissimoWs\Model;
use ColissimoWs\Model\Base\ColissimowsLabel as BaseColissimowsLabel;
/**
* Skeleton subclass for representing a row from the 'colissimows_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 ColissimowsLabel extends BaseColissimowsLabel
{
}

View File

@@ -0,0 +1,20 @@
<?php
namespace ColissimoWs\Model;
use ColissimoWs\Model\Base\ColissimowsLabelQuery as BaseColissimowsLabelQuery;
/**
* Skeleton subclass for performing query and update operations on the 'colissimows_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 ColissimowsLabelQuery extends BaseColissimowsLabelQuery
{
}

View File

@@ -0,0 +1,20 @@
<?php
namespace ColissimoWs\Model;
use ColissimoWs\Model\Base\ColissimowsPriceSlices as BaseColissimowsPriceSlices;
/**
* Skeleton subclass for representing a row from the 'colissimows_price_slices' 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 ColissimowsPriceSlices extends BaseColissimowsPriceSlices
{
}

View File

@@ -0,0 +1,20 @@
<?php
namespace ColissimoWs\Model;
use ColissimoWs\Model\Base\ColissimowsPriceSlicesQuery as BaseColissimowsPriceSlicesQuery;
/**
* Skeleton subclass for performing query and update operations on the 'colissimows_price_slices' 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 ColissimowsPriceSlicesQuery extends BaseColissimowsPriceSlicesQuery
{
}

Some files were not shown because too many files have changed in this diff Show More