Version Notes
Version destinée à Magento 1.6.X et supérieures. Testée sur Magento 1.7.0.
------------
Intégration de l'API Google Maps v3.
Ajout d'un exemple de configuration de tarifs spécifiques pour la Corse.
Correction d'un bug qui passait les commandes en invité au lieu de créer le compte pour un nouveau client.
Divers correctifs mineurs.
Download this release
Release Info
Developer | Benjamin GOSSELET |
Extension | Chronopost |
Version | 0.4.0 |
Comparing to | |
See all releases |
Code changes from version 0.1.8 to 0.4.0
- app/code/community/Chronopost/Chronorelais/Block/Adminhtml/System/Config/Form/Field/Config.php +43 -43
- app/code/community/Chronopost/Chronorelais/Block/Checkout/Multishipping/Shipping/Method/Chronorelais.php +1 -2
- app/code/community/Chronopost/Chronorelais/Block/Checkout/Onepage/Shipping/Method/Chronorelais.php +54 -54
- app/code/community/Chronopost/Chronorelais/Block/Detail.php +28 -28
- app/code/community/Chronopost/Chronorelais/Block/Export/Orders.php +21 -21
- app/code/community/Chronopost/Chronorelais/Block/Export/Orders/Grid.php +17 -1
- app/code/community/Chronopost/Chronorelais/Block/Filter.php +52 -52
- app/code/community/Chronopost/Chronorelais/Block/Import/Form.php +11 -11
- app/code/community/Chronopost/Chronorelais/Block/Sales/Impression.php +15 -15
- app/code/community/Chronopost/Chronorelais/Block/Sales/Order/Shipment/View.php +98 -98
- app/code/community/Chronopost/Chronorelais/Block/Sales/Shipment/Copy of Grid.php +0 -139
- app/code/community/Chronopost/Chronorelais/Block/Sales/Shipment/Grid-bkp-03-02-11.php +0 -143
- app/code/community/Chronopost/Chronorelais/Block/Sales/Shipment/Grid.php +55 -37
- app/code/community/Chronopost/Chronorelais/Controller/Abstract.php +125 -125
- app/code/community/Chronopost/Chronorelais/Helper/Data.php +177 -177
- app/code/community/Chronopost/Chronorelais/Model/Carrier/AbstractChronorelais.php +31 -31
- app/code/community/Chronopost/Chronorelais/Model/Carrier/AbstractChronorelaisShipping.php +488 -488
- app/code/community/Chronopost/Chronorelais/Model/Carrier/Chronoexpress.php +5 -5
- app/code/community/Chronopost/Chronorelais/Model/Carrier/Chronopost.php +5 -5
- app/code/community/Chronopost/Chronorelais/Model/Carrier/Chronorelais.php +5 -5
- app/code/community/Chronopost/Chronorelais/Model/Config/Source/Civility.php +12 -12
- app/code/community/Chronopost/Chronorelais/Model/Config/Source/EndOfLineCharacter.php +12 -12
- app/code/community/Chronopost/Chronorelais/Model/Config/Source/FieldDelimiter.php +12 -12
- app/code/community/Chronopost/Chronorelais/Model/Config/Source/FieldSeparator.php +11 -11
- app/code/community/Chronopost/Chronorelais/Model/Config/Source/FileCharset.php +12 -12
- app/code/community/Chronopost/Chronorelais/Model/Config/Source/FileExtension.php +12 -12
- app/code/community/Chronopost/Chronorelais/Model/Config/Source/PrintMode.php +12 -12
- app/code/community/Chronopost/Chronorelais/Model/Sales/Quote/Address/Total/Shipping.php +207 -207
- app/code/community/Chronopost/Chronorelais/controllers/AjaxController.php +409 -409
- app/code/community/Chronopost/Chronorelais/controllers/Checkout/MultishippingController.php +3 -37
- app/code/community/Chronopost/Chronorelais/controllers/Checkout/OnepageController.php +115 -123
- app/code/community/Chronopost/Chronorelais/controllers/ImportController.php +1 -1
- app/code/community/Chronopost/Chronorelais/controllers/RelaisController.php +31 -31
- app/code/community/Chronopost/Chronorelais/controllers/Sales/ImpressionController.php +530 -519
- app/code/community/Chronopost/Chronorelais/controllers/Sales/Order/ShipmentController.php +9 -3
- app/code/community/Chronopost/Chronorelais/etc/config.xml +17 -3
- app/code/community/Chronopost/Chronorelais/etc/system.xml +3 -2
- app/code/community/Chronopost/Chronorelais/includes/ChronorelaisShippingHelper.php +1266 -1266
- app/code/community/Chronopost/Chronorelais/sql/chronorelais_setup/mysql4-install-0.1.0.php +14 -14
- app/code/community/Chronopost/Chronorelais/sql/chronorelais_setup/mysql4-upgrade-0.1.0-0.1.1.php +8 -8
- app/code/community/Chronopost/Chronorelais/sql/chronorelais_setup/mysql4-upgrade-0.1.1-0.1.2.php +8 -8
- app/code/community/Chronopost/Chronorelais/sql/chronorelais_setup/mysql4-upgrade-0.1.2-0.1.3.php +8 -8
- app/code/community/Chronopost/Chronorelais/sql/chronorelais_setup/mysql4-upgrade-0.1.3-0.1.4.php +13 -13
- app/design/adminhtml/default/default/template/chronorelais/import/form.phtml +65 -65
- app/design/frontend/default/default/template/chronorelais/checkout/multishipping/shipping.phtml +1 -1
- app/design/frontend/default/default/template/chronorelais/checkout/multishipping/shipping_method/chronorelais.phtml +1 -4
- app/design/frontend/default/default/template/chronorelais/checkout/onepage/shipping_method.phtml +1 -1
- app/design/frontend/default/default/template/chronorelais/checkout/onepage/shipping_method/available.phtml +30 -0
- app/design/frontend/default/default/template/chronorelais/sales/order/history.phtml +2 -1
- app/design/frontend/default/default/template/chronorelais/sales/order/recent.phtml +2 -1
- app/locale/fr_FR/Chronopost_Chronorelais.csv +2 -2
- js/chronopost/chronorelais/ocseditor.css +465 -465
- js/chronopost/chronorelais/ocseditor.js +676 -676
- package.xml +13 -12
- skin/frontend/default/default/chronorelais/Logo-Chronopost.jpg +0 -0
- skin/frontend/default/default/chronorelais/chronorelaismap.js +331 -333
app/code/community/Chronopost/Chronorelais/Block/Adminhtml/System/Config/Form/Field/Config.php
CHANGED
@@ -1,43 +1,43 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Chronopost_Chronorelais_Block_Adminhtml_System_Config_Form_Field_Config extends Mage_Adminhtml_Block_System_Config_Form_Field
|
4 |
-
{
|
5 |
-
private static $JS_INCLUDED = false;
|
6 |
-
|
7 |
-
private function label($input) {
|
8 |
-
return str_replace(array("\r\n","\r","\n","'"),array("\\n","\\n","\\n","\\'"),$this->__($input));
|
9 |
-
}
|
10 |
-
|
11 |
-
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
12 |
-
{
|
13 |
-
$output = '';
|
14 |
-
if (!self::$JS_INCLUDED) {
|
15 |
-
$include_path = Mage::getBaseUrl('js').'chronopost/chronorelais';
|
16 |
-
$output = "<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js\"></script>\n"
|
17 |
-
."<script type=\"text/javascript\" src=\"".$include_path."/ocseditor.js?t=".time()."\"></script>\n"
|
18 |
-
."<script type=\"text/javascript\">\n"
|
19 |
-
."//<![CDATA[\n"
|
20 |
-
."jQuery.noConflict();\n"
|
21 |
-
."var ocseditor = new OCSEditor({\n"
|
22 |
-
."ajax_url: '".$this->getUrl('chronorelais/ajax')."?isAjax=true',\n"
|
23 |
-
."form_key: FORM_KEY,\n"
|
24 |
-
."menu_item_dissociate_label: '".$this->label('Dissociate')."',\n"
|
25 |
-
."menu_item_remove_label: '".$this->label('Remove')."',\n"
|
26 |
-
."menu_item_edit_label: '".$this->label('Edit')."',\n"
|
27 |
-
."prompt_new_value_label: '".$this->label('Enter the new value:')."',\n"
|
28 |
-
."default_row_label: '".$this->label('[No label]')."',\n"
|
29 |
-
."loading_label: '".$this->label('Loading...')."'\n"
|
30 |
-
."});\n"
|
31 |
-
."//]]>\n"
|
32 |
-
."</script>\n"
|
33 |
-
."<link type=\"text/css\" href=\"".$include_path."/ocseditor.css?t=".time()."\" rel=\"stylesheet\" media=\"all\"/>\n"
|
34 |
-
;
|
35 |
-
self::$JS_INCLUDED = true;
|
36 |
-
}
|
37 |
-
|
38 |
-
return $output
|
39 |
-
.'<div style="margin-bottom:1px;"><button type="button" class="scalable" onclick="ocseditor.open(this);"><span>'.$this->__("Open editor").'</span></button></div>'
|
40 |
-
.$element->getElementHtml().'<br/>'
|
41 |
-
;
|
42 |
-
}
|
43 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Chronopost_Chronorelais_Block_Adminhtml_System_Config_Form_Field_Config extends Mage_Adminhtml_Block_System_Config_Form_Field
|
4 |
+
{
|
5 |
+
private static $JS_INCLUDED = false;
|
6 |
+
|
7 |
+
private function label($input) {
|
8 |
+
return str_replace(array("\r\n","\r","\n","'"),array("\\n","\\n","\\n","\\'"),$this->__($input));
|
9 |
+
}
|
10 |
+
|
11 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
12 |
+
{
|
13 |
+
$output = '';
|
14 |
+
if (!self::$JS_INCLUDED) {
|
15 |
+
$include_path = Mage::getBaseUrl('js').'chronopost/chronorelais';
|
16 |
+
$output = "<script type=\"text/javascript\" src=\"http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js\"></script>\n"
|
17 |
+
."<script type=\"text/javascript\" src=\"".$include_path."/ocseditor.js?t=".time()."\"></script>\n"
|
18 |
+
."<script type=\"text/javascript\">\n"
|
19 |
+
."//<![CDATA[\n"
|
20 |
+
."jQuery.noConflict();\n"
|
21 |
+
."var ocseditor = new OCSEditor({\n"
|
22 |
+
."ajax_url: '".$this->getUrl('chronorelais/ajax')."?isAjax=true',\n"
|
23 |
+
."form_key: FORM_KEY,\n"
|
24 |
+
."menu_item_dissociate_label: '".$this->label('Dissociate')."',\n"
|
25 |
+
."menu_item_remove_label: '".$this->label('Remove')."',\n"
|
26 |
+
."menu_item_edit_label: '".$this->label('Edit')."',\n"
|
27 |
+
."prompt_new_value_label: '".$this->label('Enter the new value:')."',\n"
|
28 |
+
."default_row_label: '".$this->label('[No label]')."',\n"
|
29 |
+
."loading_label: '".$this->label('Loading...')."'\n"
|
30 |
+
."});\n"
|
31 |
+
."//]]>\n"
|
32 |
+
."</script>\n"
|
33 |
+
."<link type=\"text/css\" href=\"".$include_path."/ocseditor.css?t=".time()."\" rel=\"stylesheet\" media=\"all\"/>\n"
|
34 |
+
;
|
35 |
+
self::$JS_INCLUDED = true;
|
36 |
+
}
|
37 |
+
|
38 |
+
return $output
|
39 |
+
.'<div style="margin-bottom:1px;"><button type="button" class="scalable" onclick="ocseditor.open(this);"><span>'.$this->__("Open editor").'</span></button></div>'
|
40 |
+
.$element->getElementHtml().'<br/>'
|
41 |
+
;
|
42 |
+
}
|
43 |
+
}
|
app/code/community/Chronopost/Chronorelais/Block/Checkout/Multishipping/Shipping/Method/Chronorelais.php
CHANGED
@@ -39,8 +39,7 @@ class Chronopost_Chronorelais_Block_Checkout_Multishipping_Shipping_Method_Chron
|
|
39 |
public function getChronorelais()
|
40 |
{
|
41 |
if (empty($this->_chronorelais)) {
|
42 |
-
$
|
43 |
-
$postcode = $address->getPostcode();
|
44 |
|
45 |
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl",array('trace'=> 0,'connection_timeout'=>10));
|
46 |
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0,$postcode,0));
|
39 |
public function getChronorelais()
|
40 |
{
|
41 |
if (empty($this->_chronorelais)) {
|
42 |
+
$postcode = Mage::getSingleton('core/session')->getMultiPostcode();
|
|
|
43 |
|
44 |
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl",array('trace'=> 0,'connection_timeout'=>10));
|
45 |
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0,$postcode,0));
|
app/code/community/Chronopost/Chronorelais/Block/Checkout/Onepage/Shipping/Method/Chronorelais.php
CHANGED
@@ -1,54 +1,54 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Magento
|
4 |
-
*
|
5 |
-
* NOTICE OF LICENSE
|
6 |
-
*
|
7 |
-
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
-
* that is bundled with this package in the file LICENSE.txt.
|
9 |
-
* It is also available through the world-wide-web at this URL:
|
10 |
-
* http://opensource.org/licenses/osl-3.0.php
|
11 |
-
* If you did not receive a copy of the license and are unable to
|
12 |
-
* obtain it through the world-wide-web, please send an email
|
13 |
-
* to license@magentocommerce.com so we can send you a copy immediately.
|
14 |
-
*
|
15 |
-
* DISCLAIMER
|
16 |
-
*
|
17 |
-
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
-
* versions in the future. If you wish to customize Magento for your
|
19 |
-
* needs please refer to http://www.magentocommerce.com for more information.
|
20 |
-
*
|
21 |
-
* @category Mage
|
22 |
-
* @package Mage_Checkout
|
23 |
-
* @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
|
24 |
-
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
25 |
-
*/
|
26 |
-
|
27 |
-
/**
|
28 |
-
* One page checkout status
|
29 |
-
*
|
30 |
-
* @category Mage
|
31 |
-
* @category Mage
|
32 |
-
* @package Mage_Checkout
|
33 |
-
* @author Magento Core Team <core@magentocommerce.com>
|
34 |
-
*/
|
35 |
-
class Chronopost_Chronorelais_Block_Checkout_Onepage_Shipping_Method_Chronorelais extends Mage_Checkout_Block_Onepage_Abstract
|
36 |
-
{
|
37 |
-
protected $_chronorelais;
|
38 |
-
|
39 |
-
public function getChronorelais()
|
40 |
-
{
|
41 |
-
if (empty($this->_chronorelais)) {
|
42 |
-
$quote = Mage::getSingleton('checkout/cart')->init()->getQuote();
|
43 |
-
$address = $quote->getShippingAddress();
|
44 |
-
$postcode = $address->getPostcode();
|
45 |
-
|
46 |
-
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl",array('trace'=> 0,'connection_timeout'=>10));
|
47 |
-
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0,$postcode,0));
|
48 |
-
$this->_chronorelais = $webservbt;
|
49 |
-
}
|
50 |
-
|
51 |
-
return $this->_chronorelais;
|
52 |
-
}
|
53 |
-
|
54 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
20 |
+
*
|
21 |
+
* @category Mage
|
22 |
+
* @package Mage_Checkout
|
23 |
+
* @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
|
24 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
25 |
+
*/
|
26 |
+
|
27 |
+
/**
|
28 |
+
* One page checkout status
|
29 |
+
*
|
30 |
+
* @category Mage
|
31 |
+
* @category Mage
|
32 |
+
* @package Mage_Checkout
|
33 |
+
* @author Magento Core Team <core@magentocommerce.com>
|
34 |
+
*/
|
35 |
+
class Chronopost_Chronorelais_Block_Checkout_Onepage_Shipping_Method_Chronorelais extends Mage_Checkout_Block_Onepage_Abstract
|
36 |
+
{
|
37 |
+
protected $_chronorelais;
|
38 |
+
|
39 |
+
public function getChronorelais()
|
40 |
+
{
|
41 |
+
if (empty($this->_chronorelais)) {
|
42 |
+
$quote = Mage::getSingleton('checkout/cart')->init()->getQuote();
|
43 |
+
$address = $quote->getShippingAddress();
|
44 |
+
$postcode = $address->getPostcode();
|
45 |
+
|
46 |
+
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl",array('trace'=> 0,'connection_timeout'=>10));
|
47 |
+
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0,$postcode,0));
|
48 |
+
$this->_chronorelais = $webservbt;
|
49 |
+
}
|
50 |
+
|
51 |
+
return $this->_chronorelais;
|
52 |
+
}
|
53 |
+
|
54 |
+
}
|
app/code/community/Chronopost/Chronorelais/Block/Detail.php
CHANGED
@@ -1,29 +1,29 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Block_Detail extends Mage_Core_Block_Template
|
3 |
-
{
|
4 |
-
|
5 |
-
public function _prepareLayout()
|
6 |
-
{
|
7 |
-
return parent::_prepareLayout();
|
8 |
-
}
|
9 |
-
|
10 |
-
public function getRelaisPoint(){
|
11 |
-
|
12 |
-
|
13 |
-
$btcode = $this->getRequest()->getParam ( 'btcode' );
|
14 |
-
|
15 |
-
if($btcode){
|
16 |
-
$result = Mage::getModel('shipping/rate_result');
|
17 |
-
ini_set("soap.wsdl_cache_enabled", "0");
|
18 |
-
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl");
|
19 |
-
$webservbt = $client->__call("rechercheBtParIdChronopostA2Pas",array($btcode));
|
20 |
-
|
21 |
-
return $webservbt[0];
|
22 |
-
}
|
23 |
-
else{
|
24 |
-
return false;
|
25 |
-
}
|
26 |
-
}
|
27 |
-
|
28 |
-
}
|
29 |
?>
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Block_Detail extends Mage_Core_Block_Template
|
3 |
+
{
|
4 |
+
|
5 |
+
public function _prepareLayout()
|
6 |
+
{
|
7 |
+
return parent::_prepareLayout();
|
8 |
+
}
|
9 |
+
|
10 |
+
public function getRelaisPoint(){
|
11 |
+
|
12 |
+
|
13 |
+
$btcode = $this->getRequest()->getParam ( 'btcode' );
|
14 |
+
|
15 |
+
if($btcode){
|
16 |
+
$result = Mage::getModel('shipping/rate_result');
|
17 |
+
ini_set("soap.wsdl_cache_enabled", "0");
|
18 |
+
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl");
|
19 |
+
$webservbt = $client->__call("rechercheBtParIdChronopostA2Pas",array($btcode));
|
20 |
+
|
21 |
+
return $webservbt[0];
|
22 |
+
}
|
23 |
+
else{
|
24 |
+
return false;
|
25 |
+
}
|
26 |
+
}
|
27 |
+
|
28 |
+
}
|
29 |
?>
|
app/code/community/Chronopost/Chronorelais/Block/Export/Orders.php
CHANGED
@@ -1,21 +1,21 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Chronopost Chronorelais module
|
4 |
-
*
|
5 |
-
* @category Chronopost
|
6 |
-
* @package Chronopost_Chronorelais
|
7 |
-
* @license http://www.opensource.org/licenses/gpl-3.0.html GNU General Public License version 3
|
8 |
-
*/
|
9 |
-
class Chronopost_Chronorelais_Block_Export_Orders extends Mage_Adminhtml_Block_Widget_Grid_Container
|
10 |
-
{
|
11 |
-
|
12 |
-
public function __construct()
|
13 |
-
{
|
14 |
-
$this->_blockGroup = 'chronorelais';
|
15 |
-
$this->_controller = 'export_orders';
|
16 |
-
$this->_headerText = Mage::helper('chronorelais')->__('Exporter vers ChronoShip Office ou ChronoShip Station');
|
17 |
-
parent::__construct();
|
18 |
-
$this->_removeButton('add');
|
19 |
-
}
|
20 |
-
|
21 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Chronopost Chronorelais module
|
4 |
+
*
|
5 |
+
* @category Chronopost
|
6 |
+
* @package Chronopost_Chronorelais
|
7 |
+
* @license http://www.opensource.org/licenses/gpl-3.0.html GNU General Public License version 3
|
8 |
+
*/
|
9 |
+
class Chronopost_Chronorelais_Block_Export_Orders extends Mage_Adminhtml_Block_Widget_Grid_Container
|
10 |
+
{
|
11 |
+
|
12 |
+
public function __construct()
|
13 |
+
{
|
14 |
+
$this->_blockGroup = 'chronorelais';
|
15 |
+
$this->_controller = 'export_orders';
|
16 |
+
$this->_headerText = Mage::helper('chronorelais')->__('Exporter vers ChronoShip Office ou ChronoShip Station');
|
17 |
+
parent::__construct();
|
18 |
+
$this->_removeButton('add');
|
19 |
+
}
|
20 |
+
|
21 |
+
}
|
app/code/community/Chronopost/Chronorelais/Block/Export/Orders/Grid.php
CHANGED
@@ -34,7 +34,7 @@ class Chronopost_Chronorelais_Block_Export_Orders_Grid extends Mage_Adminhtml_Bl
|
|
34 |
$collection->join('order_payment', 'main_table.entity_id = order_payment.parent_id', 'method');
|
35 |
$collection->getSelect()->joinLeft(array('oes' => Mage::getSingleton('core/resource')->getTableName('sales_chronopost_order_export_status')), 'main_table.entity_id = oes.order_id', array("if(isNull(oes.livraison_le_samedi), CASE LOWER(SUBSTRING_INDEX(order.shipping_method,'_','1')) WHEN 'chronopost' THEN '$_chronopost_deliver_saturday' WHEN 'chronorelais' THEN '$_chronorelais_deliver_saturday' WHEN 'chronoexpress' THEN '--' ELSE 'No' END, oes.livraison_le_samedi) as livraison_le_samedi"));
|
36 |
$collection->getSelect()->where('order.shipping_method LIKE "chronorelais%" OR order.shipping_method LIKE "chronopost%" OR order.shipping_method LIKE "chronoexpress%"');
|
37 |
-
|
38 |
$this->setCollection($collection);
|
39 |
return parent::_prepareCollection();
|
40 |
}
|
@@ -250,5 +250,21 @@ class Chronopost_Chronorelais_Block_Export_Orders_Grid extends Mage_Adminhtml_Bl
|
|
250 |
{
|
251 |
return $this->getUrl('*/*/*', array('_current'=>true));
|
252 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
|
254 |
}
|
34 |
$collection->join('order_payment', 'main_table.entity_id = order_payment.parent_id', 'method');
|
35 |
$collection->getSelect()->joinLeft(array('oes' => Mage::getSingleton('core/resource')->getTableName('sales_chronopost_order_export_status')), 'main_table.entity_id = oes.order_id', array("if(isNull(oes.livraison_le_samedi), CASE LOWER(SUBSTRING_INDEX(order.shipping_method,'_','1')) WHEN 'chronopost' THEN '$_chronopost_deliver_saturday' WHEN 'chronorelais' THEN '$_chronorelais_deliver_saturday' WHEN 'chronoexpress' THEN '--' ELSE 'No' END, oes.livraison_le_samedi) as livraison_le_samedi"));
|
36 |
$collection->getSelect()->where('order.shipping_method LIKE "chronorelais%" OR order.shipping_method LIKE "chronopost%" OR order.shipping_method LIKE "chronoexpress%"');
|
37 |
+
|
38 |
$this->setCollection($collection);
|
39 |
return parent::_prepareCollection();
|
40 |
}
|
250 |
{
|
251 |
return $this->getUrl('*/*/*', array('_current'=>true));
|
252 |
}
|
253 |
+
|
254 |
+
public function getAdditionalJavaScript()
|
255 |
+
{
|
256 |
+
echo "
|
257 |
+
var element = document.getElementById('chronorelais_export_order_grid_massaction-select');
|
258 |
+
element.selectedIndex = 1;
|
259 |
+
if ('fireEvent' in element)
|
260 |
+
element.fireEvent('onchange');
|
261 |
+
else
|
262 |
+
{
|
263 |
+
var evt = document.createEvent('HTMLEvents');
|
264 |
+
evt.initEvent('change', false, true);
|
265 |
+
element.dispatchEvent(evt);
|
266 |
+
}
|
267 |
+
";
|
268 |
+
}
|
269 |
|
270 |
}
|
app/code/community/Chronopost/Chronorelais/Block/Filter.php
CHANGED
@@ -1,53 +1,53 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Block_Filter extends Mage_Core_Block_Template
|
3 |
-
{
|
4 |
-
|
5 |
-
public function _prepareLayout()
|
6 |
-
{
|
7 |
-
return parent::_prepareLayout();
|
8 |
-
}
|
9 |
-
|
10 |
-
|
11 |
-
public function getRelaisPoints(){
|
12 |
-
|
13 |
-
$zipcode = $this->getRequest()->getParam ( 'zipcode' );
|
14 |
-
|
15 |
-
if( $zipcode && $zipcode!="" ){
|
16 |
-
$result = Mage::getModel('shipping/rate_result');
|
17 |
-
|
18 |
-
try {
|
19 |
-
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl",array('trace'=> 0,'connection_timeout'=>10));
|
20 |
-
|
21 |
-
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0,$zipcode,0));
|
22 |
-
|
23 |
-
} catch(SoapFault $fault){
|
24 |
-
|
25 |
-
return false;
|
26 |
-
}
|
27 |
-
|
28 |
-
|
29 |
-
return $webservbt;
|
30 |
-
}
|
31 |
-
else{
|
32 |
-
return false;
|
33 |
-
}
|
34 |
-
}
|
35 |
-
|
36 |
-
public function getmethodeCode(){
|
37 |
-
|
38 |
-
$zipcode = $this->getRequest()->getParam ( 'methodecode' );
|
39 |
-
|
40 |
-
if($zipcode){
|
41 |
-
$result = Mage::getModel('shipping/rate_result');
|
42 |
-
ini_set("soap.wsdl_cache_enabled", "0");
|
43 |
-
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl");
|
44 |
-
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0,$zipcode,0));
|
45 |
-
return $webservbt;
|
46 |
-
}
|
47 |
-
else{
|
48 |
-
return false;
|
49 |
-
}
|
50 |
-
}
|
51 |
-
|
52 |
-
}
|
53 |
?>
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Block_Filter extends Mage_Core_Block_Template
|
3 |
+
{
|
4 |
+
|
5 |
+
public function _prepareLayout()
|
6 |
+
{
|
7 |
+
return parent::_prepareLayout();
|
8 |
+
}
|
9 |
+
|
10 |
+
|
11 |
+
public function getRelaisPoints(){
|
12 |
+
|
13 |
+
$zipcode = $this->getRequest()->getParam ( 'zipcode' );
|
14 |
+
|
15 |
+
if( $zipcode && $zipcode!="" ){
|
16 |
+
$result = Mage::getModel('shipping/rate_result');
|
17 |
+
|
18 |
+
try {
|
19 |
+
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl",array('trace'=> 0,'connection_timeout'=>10));
|
20 |
+
|
21 |
+
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0,$zipcode,0));
|
22 |
+
|
23 |
+
} catch(SoapFault $fault){
|
24 |
+
|
25 |
+
return false;
|
26 |
+
}
|
27 |
+
|
28 |
+
|
29 |
+
return $webservbt;
|
30 |
+
}
|
31 |
+
else{
|
32 |
+
return false;
|
33 |
+
}
|
34 |
+
}
|
35 |
+
|
36 |
+
public function getmethodeCode(){
|
37 |
+
|
38 |
+
$zipcode = $this->getRequest()->getParam ( 'methodecode' );
|
39 |
+
|
40 |
+
if($zipcode){
|
41 |
+
$result = Mage::getModel('shipping/rate_result');
|
42 |
+
ini_set("soap.wsdl_cache_enabled", "0");
|
43 |
+
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl");
|
44 |
+
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0,$zipcode,0));
|
45 |
+
return $webservbt;
|
46 |
+
}
|
47 |
+
else{
|
48 |
+
return false;
|
49 |
+
}
|
50 |
+
}
|
51 |
+
|
52 |
+
}
|
53 |
?>
|
app/code/community/Chronopost/Chronorelais/Block/Import/Form.php
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Block_Import_Form extends Mage_Adminhtml_Block_Widget
|
3 |
-
{
|
4 |
-
|
5 |
-
public function __construct()
|
6 |
-
{
|
7 |
-
parent::__construct();
|
8 |
-
$this->setTemplate('chronorelais/import/form.phtml');
|
9 |
-
}
|
10 |
-
|
11 |
-
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Block_Import_Form extends Mage_Adminhtml_Block_Widget
|
3 |
+
{
|
4 |
+
|
5 |
+
public function __construct()
|
6 |
+
{
|
7 |
+
parent::__construct();
|
8 |
+
$this->setTemplate('chronorelais/import/form.phtml');
|
9 |
+
}
|
10 |
+
|
11 |
+
}
|
app/code/community/Chronopost/Chronorelais/Block/Sales/Impression.php
CHANGED
@@ -1,16 +1,16 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
class Chronopost_Chronorelais_Block_Sales_Impression extends Mage_Adminhtml_Block_Widget_Grid_Container
|
4 |
-
{
|
5 |
-
|
6 |
-
|
7 |
-
public function __construct()
|
8 |
-
{
|
9 |
-
$this->_blockGroup = 'chronorelais';
|
10 |
-
$this->_controller = 'sales_shipment';
|
11 |
-
$this->_headerText = Mage::helper('chronorelais')->__('Impressions des étiquettes Chronopost');
|
12 |
-
parent::__construct();
|
13 |
-
$this->_removeButton('add');
|
14 |
-
}
|
15 |
-
|
16 |
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class Chronopost_Chronorelais_Block_Sales_Impression extends Mage_Adminhtml_Block_Widget_Grid_Container
|
4 |
+
{
|
5 |
+
|
6 |
+
|
7 |
+
public function __construct()
|
8 |
+
{
|
9 |
+
$this->_blockGroup = 'chronorelais';
|
10 |
+
$this->_controller = 'sales_shipment';
|
11 |
+
$this->_headerText = Mage::helper('chronorelais')->__('Impressions des étiquettes Chronopost');
|
12 |
+
parent::__construct();
|
13 |
+
$this->_removeButton('add');
|
14 |
+
}
|
15 |
+
|
16 |
}
|
app/code/community/Chronopost/Chronorelais/Block/Sales/Order/Shipment/View.php
CHANGED
@@ -1,99 +1,99 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Block_Sales_Order_Shipment_View extends Mage_Adminhtml_Block_Widget_Form_Container
|
3 |
-
{
|
4 |
-
|
5 |
-
public function __construct()
|
6 |
-
{
|
7 |
-
$this->_objectId = 'shipment_id';
|
8 |
-
$this->_controller = 'sales_order_shipment';
|
9 |
-
$this->_mode = 'view';
|
10 |
-
|
11 |
-
parent::__construct();
|
12 |
-
|
13 |
-
$this->_removeButton('reset');
|
14 |
-
$this->_removeButton('delete');
|
15 |
-
$this->_updateButton('save', 'label', Mage::helper('sales')->__('Send Tracking Information'));
|
16 |
-
$this->_updateButton('save', 'onclick', "setLocation('".$this->getEmailUrl()."')");
|
17 |
-
|
18 |
-
//Ajout de l'impression de l'étiquette
|
19 |
-
$_order = $this->getShipment()->getOrder();
|
20 |
-
$_shippingMethod = explode("_",$_order->getShippingMethod());
|
21 |
-
if (($_shippingMethod[0] == 'chronorelais' || $_shippingMethod[0] == 'chronopost' || $_shippingMethod[0] == 'chronoexpress')) {
|
22 |
-
$this->_addButton('etiquette', array(
|
23 |
-
'label' => Mage::helper('chronorelais')->__('Etiquette Chronopost'),
|
24 |
-
'class' => 'save',
|
25 |
-
'onclick' => 'setLocation(\'' . $this->getPrintMondialRelayUrl() . '\')'
|
26 |
-
)
|
27 |
-
);
|
28 |
-
}
|
29 |
-
|
30 |
-
if ($this->getShipment()->getId()) {
|
31 |
-
$this->_addButton('print', array(
|
32 |
-
'label' => Mage::helper('sales')->__('Print'),
|
33 |
-
'class' => 'save',
|
34 |
-
'onclick' => 'setLocation(\''.$this->getPrintUrl().'\')'
|
35 |
-
)
|
36 |
-
);
|
37 |
-
}
|
38 |
-
}
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Retrieve shipment model instance
|
42 |
-
*
|
43 |
-
* @return Mage_Sales_Model_Order_Shipment
|
44 |
-
*/
|
45 |
-
public function getShipment()
|
46 |
-
{
|
47 |
-
return Mage::registry('current_shipment');
|
48 |
-
}
|
49 |
-
|
50 |
-
public function getHeaderText()
|
51 |
-
{
|
52 |
-
if ($this->getShipment()->getEmailSent()) {
|
53 |
-
$emailSent = Mage::helper('sales')->__('Shipment email sent');
|
54 |
-
}
|
55 |
-
else {
|
56 |
-
$emailSent = Mage::helper('sales')->__('Shipment email not sent');
|
57 |
-
}
|
58 |
-
|
59 |
-
$header = Mage::helper('sales')->__('Shipment #%s (%s)', $this->getShipment()->getIncrementId(), $emailSent);
|
60 |
-
return $header;
|
61 |
-
}
|
62 |
-
|
63 |
-
public function getBackUrl()
|
64 |
-
{
|
65 |
-
return $this->getUrl(
|
66 |
-
'*/sales_order/view',
|
67 |
-
array(
|
68 |
-
'order_id' => $this->getShipment()->getOrderId(),
|
69 |
-
'active_tab'=> 'order_shipments'
|
70 |
-
));
|
71 |
-
}
|
72 |
-
|
73 |
-
public function getEmailUrl()
|
74 |
-
{
|
75 |
-
return $this->getUrl('*/sales_order_shipment/email', array('shipment_id' => $this->getShipment()->getId()));
|
76 |
-
}
|
77 |
-
|
78 |
-
public function getPrintUrl()
|
79 |
-
{
|
80 |
-
return $this->getUrl('*/*/print', array(
|
81 |
-
'invoice_id' => $this->getShipment()->getId()
|
82 |
-
));
|
83 |
-
}
|
84 |
-
|
85 |
-
public function getPrintMondialRelayUrl()
|
86 |
-
{
|
87 |
-
return $this->getUrl('chronorelais/sales_impression/print', array(
|
88 |
-
'shipment_id' => $this->getShipment()->getId()
|
89 |
-
));
|
90 |
-
}
|
91 |
-
|
92 |
-
public function updateBackButtonUrl($flag)
|
93 |
-
{
|
94 |
-
if ($flag) {
|
95 |
-
return $this->_updateButton('back', 'onclick', 'setLocation(\'' . $this->getUrl('*/sales_shipment/') . '\')');
|
96 |
-
}
|
97 |
-
return $this;
|
98 |
-
}
|
99 |
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Block_Sales_Order_Shipment_View extends Mage_Adminhtml_Block_Widget_Form_Container
|
3 |
+
{
|
4 |
+
|
5 |
+
public function __construct()
|
6 |
+
{
|
7 |
+
$this->_objectId = 'shipment_id';
|
8 |
+
$this->_controller = 'sales_order_shipment';
|
9 |
+
$this->_mode = 'view';
|
10 |
+
|
11 |
+
parent::__construct();
|
12 |
+
|
13 |
+
$this->_removeButton('reset');
|
14 |
+
$this->_removeButton('delete');
|
15 |
+
$this->_updateButton('save', 'label', Mage::helper('sales')->__('Send Tracking Information'));
|
16 |
+
$this->_updateButton('save', 'onclick', "setLocation('".$this->getEmailUrl()."')");
|
17 |
+
|
18 |
+
//Ajout de l'impression de l'étiquette
|
19 |
+
$_order = $this->getShipment()->getOrder();
|
20 |
+
$_shippingMethod = explode("_",$_order->getShippingMethod());
|
21 |
+
if (($_shippingMethod[0] == 'chronorelais' || $_shippingMethod[0] == 'chronopost' || $_shippingMethod[0] == 'chronoexpress')) {
|
22 |
+
$this->_addButton('etiquette', array(
|
23 |
+
'label' => Mage::helper('chronorelais')->__('Etiquette Chronopost'),
|
24 |
+
'class' => 'save',
|
25 |
+
'onclick' => 'setLocation(\'' . $this->getPrintMondialRelayUrl() . '\')'
|
26 |
+
)
|
27 |
+
);
|
28 |
+
}
|
29 |
+
|
30 |
+
if ($this->getShipment()->getId()) {
|
31 |
+
$this->_addButton('print', array(
|
32 |
+
'label' => Mage::helper('sales')->__('Print'),
|
33 |
+
'class' => 'save',
|
34 |
+
'onclick' => 'setLocation(\''.$this->getPrintUrl().'\')'
|
35 |
+
)
|
36 |
+
);
|
37 |
+
}
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Retrieve shipment model instance
|
42 |
+
*
|
43 |
+
* @return Mage_Sales_Model_Order_Shipment
|
44 |
+
*/
|
45 |
+
public function getShipment()
|
46 |
+
{
|
47 |
+
return Mage::registry('current_shipment');
|
48 |
+
}
|
49 |
+
|
50 |
+
public function getHeaderText()
|
51 |
+
{
|
52 |
+
if ($this->getShipment()->getEmailSent()) {
|
53 |
+
$emailSent = Mage::helper('sales')->__('Shipment email sent');
|
54 |
+
}
|
55 |
+
else {
|
56 |
+
$emailSent = Mage::helper('sales')->__('Shipment email not sent');
|
57 |
+
}
|
58 |
+
|
59 |
+
$header = Mage::helper('sales')->__('Shipment #%s (%s)', $this->getShipment()->getIncrementId(), $emailSent);
|
60 |
+
return $header;
|
61 |
+
}
|
62 |
+
|
63 |
+
public function getBackUrl()
|
64 |
+
{
|
65 |
+
return $this->getUrl(
|
66 |
+
'*/sales_order/view',
|
67 |
+
array(
|
68 |
+
'order_id' => $this->getShipment()->getOrderId(),
|
69 |
+
'active_tab'=> 'order_shipments'
|
70 |
+
));
|
71 |
+
}
|
72 |
+
|
73 |
+
public function getEmailUrl()
|
74 |
+
{
|
75 |
+
return $this->getUrl('*/sales_order_shipment/email', array('shipment_id' => $this->getShipment()->getId()));
|
76 |
+
}
|
77 |
+
|
78 |
+
public function getPrintUrl()
|
79 |
+
{
|
80 |
+
return $this->getUrl('*/*/print', array(
|
81 |
+
'invoice_id' => $this->getShipment()->getId()
|
82 |
+
));
|
83 |
+
}
|
84 |
+
|
85 |
+
public function getPrintMondialRelayUrl()
|
86 |
+
{
|
87 |
+
return $this->getUrl('chronorelais/sales_impression/print', array(
|
88 |
+
'shipment_id' => $this->getShipment()->getId()
|
89 |
+
));
|
90 |
+
}
|
91 |
+
|
92 |
+
public function updateBackButtonUrl($flag)
|
93 |
+
{
|
94 |
+
if ($flag) {
|
95 |
+
return $this->_updateButton('back', 'onclick', 'setLocation(\'' . $this->getUrl('*/sales_shipment/') . '\')');
|
96 |
+
}
|
97 |
+
return $this;
|
98 |
+
}
|
99 |
}
|
app/code/community/Chronopost/Chronorelais/Block/Sales/Shipment/Copy of Grid.php
DELETED
@@ -1,139 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Block_Sales_Shipment_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
3 |
-
{
|
4 |
-
|
5 |
-
public function __construct()
|
6 |
-
{
|
7 |
-
parent::__construct();
|
8 |
-
$this->setId('sales_shipment_grid');
|
9 |
-
$this->setDefaultSort('order_created_at');
|
10 |
-
$this->setDefaultDir('DESC');
|
11 |
-
}
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Retrieve collection class
|
15 |
-
*
|
16 |
-
* @return string
|
17 |
-
*/
|
18 |
-
protected function _getCollectionClass()
|
19 |
-
{
|
20 |
-
return 'sales/order_shipment_grid_collection';
|
21 |
-
}
|
22 |
-
|
23 |
-
protected function _prepareCollection()
|
24 |
-
{
|
25 |
-
$collection = Mage::getResourceModel($this->_getCollectionClass());
|
26 |
-
$collection->getSelect()->columns(array('shipment_created_at' => 'main_table.created_at'));
|
27 |
-
$collection->getSelect()->columns(array('shipment_increment_id' => 'main_table.increment_id'));
|
28 |
-
|
29 |
-
$collection->getSelect()->joinLeft(array('ot' => $collection->getTable('sales/order')), 'main_table.order_id = ot.entity_id');
|
30 |
-
$collection->getSelect()->joinLeft(array('ost' => $collection->getTable('sales/shipment_track')), 'ot.entity_id = ost.order_id');
|
31 |
-
|
32 |
-
$collection->getSelect()->where('ot.shipping_method LIKE "chronorelais%" OR ot.shipping_method LIKE "chronopost%"');
|
33 |
-
$this->setCollection($collection);
|
34 |
-
return parent::_prepareCollection();
|
35 |
-
}
|
36 |
-
|
37 |
-
protected function _prepareColumns()
|
38 |
-
{
|
39 |
-
$this->addColumn('increment_id', array(
|
40 |
-
'header' => Mage::helper('sales')->__('Shipment #'),
|
41 |
-
'index' => 'shipment_increment_id',
|
42 |
-
'type' => 'text',
|
43 |
-
));
|
44 |
-
|
45 |
-
$this->addColumn('shipment_created_at', array(
|
46 |
-
'header' => Mage::helper('sales')->__('Date Shipped'),
|
47 |
-
'index' => 'shipment_created_at',
|
48 |
-
'type' => 'datetime',
|
49 |
-
));
|
50 |
-
|
51 |
-
$this->addColumn('order_increment_id', array(
|
52 |
-
'header' => Mage::helper('sales')->__('Order #'),
|
53 |
-
'index' => 'order_increment_id',
|
54 |
-
'type' => 'number',
|
55 |
-
));
|
56 |
-
|
57 |
-
$this->addColumn('order_created_at', array(
|
58 |
-
'header' => Mage::helper('sales')->__('Order Date'),
|
59 |
-
'index' => 'order_created_at',
|
60 |
-
'type' => 'datetime',
|
61 |
-
));
|
62 |
-
|
63 |
-
$this->addColumn('shipping_name', array(
|
64 |
-
'header' => Mage::helper('sales')->__('Ship to Name'),
|
65 |
-
'index' => 'shipping_name',
|
66 |
-
));
|
67 |
-
|
68 |
-
$this->addColumn('total_qty', array(
|
69 |
-
'header' => Mage::helper('sales')->__('Total Qty'),
|
70 |
-
'index' => 'total_qty',
|
71 |
-
'type' => 'number',
|
72 |
-
));
|
73 |
-
|
74 |
-
$this->addColumn('number', array(
|
75 |
-
'header' => Mage::helper('sales')->__('Tracking'),
|
76 |
-
'index' => 'number',
|
77 |
-
));
|
78 |
-
|
79 |
-
$this->addColumn('title', array(
|
80 |
-
'header' => Mage::helper('sales')->__('Mode de transport'),
|
81 |
-
'index' => 'title',
|
82 |
-
'type' => 'text',
|
83 |
-
));
|
84 |
-
|
85 |
-
$this->addColumn('download', array(
|
86 |
-
'header' => Mage::helper('chronorelais')->__('Etiquettes'),
|
87 |
-
'type' => 'action',
|
88 |
-
'getter' => 'getParentId',
|
89 |
-
'actions' => array(
|
90 |
-
array(
|
91 |
-
'caption' => Mage::helper('chronorelais')->__('Imprimer'),
|
92 |
-
'url' => array(
|
93 |
-
'base'=>'chronorelais/sales_impression/print'
|
94 |
-
),
|
95 |
-
'field' => 'shipment_id'
|
96 |
-
)
|
97 |
-
),
|
98 |
-
'filter' => false,
|
99 |
-
'sortable' => false,
|
100 |
-
'index' => 'stores'
|
101 |
-
));
|
102 |
-
|
103 |
-
return parent::_prepareColumns();
|
104 |
-
}
|
105 |
-
|
106 |
-
public function getRowUrl($row)
|
107 |
-
{
|
108 |
-
if (!Mage::getSingleton('admin/session')->isAllowed('sales/order/shipment')) {
|
109 |
-
return false;
|
110 |
-
}
|
111 |
-
|
112 |
-
return $this->getUrl('adminhtml/sales_shipment/view',
|
113 |
-
array(
|
114 |
-
'shipment_id'=> $row->getParentId(),
|
115 |
-
)
|
116 |
-
);
|
117 |
-
}
|
118 |
-
|
119 |
-
protected function _prepareMassaction()
|
120 |
-
{
|
121 |
-
$this->setMassactionIdField('entity_id');
|
122 |
-
$this->getMassactionBlock()->setFormFieldName('shipment_ids');
|
123 |
-
$this->getMassactionBlock()->setUseSelectAll(false);
|
124 |
-
|
125 |
-
// Impression des étiquettes
|
126 |
-
/*$this->getMassactionBlock()->addItem('pdfshipments_order', array(
|
127 |
-
'label'=> Mage::helper('sales')->__('Imprimer les étiquettes'),
|
128 |
-
'url' => $this->getUrl('chronorelais/sales_impression/printMass'),
|
129 |
-
));*/
|
130 |
-
|
131 |
-
return $this;
|
132 |
-
}
|
133 |
-
|
134 |
-
public function getGridUrl()
|
135 |
-
{
|
136 |
-
return $this->getUrl('*/*/*', array('_current' => true));
|
137 |
-
}
|
138 |
-
|
139 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Chronopost/Chronorelais/Block/Sales/Shipment/Grid-bkp-03-02-11.php
DELETED
@@ -1,143 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Block_Sales_Shipment_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
3 |
-
{
|
4 |
-
|
5 |
-
public function __construct()
|
6 |
-
{
|
7 |
-
parent::__construct();
|
8 |
-
$this->setId('sales_shipment_grid');
|
9 |
-
$this->setDefaultSort('shipment_created_at');
|
10 |
-
$this->setDefaultDir('DESC');
|
11 |
-
}
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Retrieve collection class
|
15 |
-
*
|
16 |
-
* @return string
|
17 |
-
*/
|
18 |
-
protected function _getCollectionClass()
|
19 |
-
{
|
20 |
-
return 'sales/order_collection';
|
21 |
-
}
|
22 |
-
|
23 |
-
protected function _prepareCollection()
|
24 |
-
{
|
25 |
-
$collection = Mage::getResourceModel($this->_getCollectionClass());
|
26 |
-
$collection->getSelect()->columns(array('shipment_created_at' => 'osg.created_at'));
|
27 |
-
$collection->getSelect()->columns(array('shipment_increment_id' => 'osg.increment_id'));
|
28 |
-
$collection->getSelect()->columns(array('shipping_method' => 'main_table.shipping_method'));
|
29 |
-
|
30 |
-
$collection->getSelect()->joinLeft(array('ost' => $collection->getTable('sales/shipment_track')), 'main_table.entity_id = ost.order_id', array('if(isNull(ost.number) , "--" , ost.number) as number', 'if(isNull(ost.title) , "--" , ost.title) as title'));
|
31 |
-
$collection->getSelect()->joinRight(array('osg' => $collection->getTable('sales/shipment_grid')), 'osg.order_id = main_table.entity_id');
|
32 |
-
$collection->getSelect()->where('shipping_method LIKE "chronorelais%" OR shipping_method LIKE "chronopost%"');
|
33 |
-
$collection->getSelect()->group('osg.entity_id');
|
34 |
-
|
35 |
-
|
36 |
-
$this->setCollection($collection);
|
37 |
-
|
38 |
-
return parent::_prepareCollection();
|
39 |
-
}
|
40 |
-
|
41 |
-
protected function _prepareColumns()
|
42 |
-
{
|
43 |
-
$this->addColumn('increment_id', array(
|
44 |
-
'header' => Mage::helper('sales')->__('Shipment #'),
|
45 |
-
'index' => 'shipment_increment_id',
|
46 |
-
'type' => 'text',
|
47 |
-
));
|
48 |
-
|
49 |
-
$this->addColumn('shipment_created_at', array(
|
50 |
-
'header' => Mage::helper('sales')->__('Date Shipped'),
|
51 |
-
'index' => 'shipment_created_at',
|
52 |
-
'type' => 'datetime',
|
53 |
-
));
|
54 |
-
|
55 |
-
$this->addColumn('order_increment_id', array(
|
56 |
-
'header' => Mage::helper('sales')->__('Order #'),
|
57 |
-
'index' => 'order_increment_id',
|
58 |
-
'type' => 'number',
|
59 |
-
));
|
60 |
-
|
61 |
-
$this->addColumn('order_created_at', array(
|
62 |
-
'header' => Mage::helper('sales')->__('Order Date'),
|
63 |
-
'index' => 'order_created_at',
|
64 |
-
'type' => 'datetime',
|
65 |
-
));
|
66 |
-
|
67 |
-
$this->addColumn('shipping_name', array(
|
68 |
-
'header' => Mage::helper('sales')->__('Ship to Name'),
|
69 |
-
'index' => 'shipping_name',
|
70 |
-
));
|
71 |
-
|
72 |
-
$this->addColumn('total_qty', array(
|
73 |
-
'header' => Mage::helper('sales')->__('Total Qty'),
|
74 |
-
'index' => 'total_qty',
|
75 |
-
'type' => 'number',
|
76 |
-
));
|
77 |
-
|
78 |
-
$this->addColumn('number', array(
|
79 |
-
'header' => Mage::helper('sales')->__('Tracking'),
|
80 |
-
'index' => 'number',
|
81 |
-
));
|
82 |
-
|
83 |
-
$this->addColumn('title', array(
|
84 |
-
'header' => Mage::helper('sales')->__('Mode de transport'),
|
85 |
-
'index' => 'title',
|
86 |
-
'type' => 'text',
|
87 |
-
));
|
88 |
-
|
89 |
-
$this->addColumn('download', array(
|
90 |
-
'header' => Mage::helper('chronorelais')->__('Etiquettes'),
|
91 |
-
'type' => 'action',
|
92 |
-
'getter' => 'getId',
|
93 |
-
'actions' => array(
|
94 |
-
array(
|
95 |
-
'caption' => Mage::helper('chronorelais')->__('Imprimer'),
|
96 |
-
'url' => array(
|
97 |
-
'base'=>'chronorelais/sales_impression/print'
|
98 |
-
),
|
99 |
-
'field' => 'shipment_id'
|
100 |
-
)
|
101 |
-
),
|
102 |
-
'filter' => false,
|
103 |
-
'sortable' => false,
|
104 |
-
'index' => 'stores'
|
105 |
-
));
|
106 |
-
|
107 |
-
return parent::_prepareColumns();
|
108 |
-
}
|
109 |
-
|
110 |
-
public function getRowUrl($row)
|
111 |
-
{
|
112 |
-
if (!Mage::getSingleton('admin/session')->isAllowed('sales/order/shipment')) {
|
113 |
-
return false;
|
114 |
-
}
|
115 |
-
|
116 |
-
return $this->getUrl('adminhtml/sales_shipment/view',
|
117 |
-
array(
|
118 |
-
'shipment_id'=> $row->getId(),
|
119 |
-
)
|
120 |
-
);
|
121 |
-
}
|
122 |
-
|
123 |
-
protected function _prepareMassaction()
|
124 |
-
{
|
125 |
-
$this->setMassactionIdField('entity_id');
|
126 |
-
$this->getMassactionBlock()->setFormFieldName('shipment_ids');
|
127 |
-
$this->getMassactionBlock()->setUseSelectAll(false);
|
128 |
-
|
129 |
-
// Impression des étiquettes
|
130 |
-
/*$this->getMassactionBlock()->addItem('pdfshipments_order', array(
|
131 |
-
'label'=> Mage::helper('sales')->__('Imprimer les étiquettes'),
|
132 |
-
'url' => $this->getUrl('chronorelais/sales_impression/printMass'),
|
133 |
-
));*/
|
134 |
-
|
135 |
-
return $this;
|
136 |
-
}
|
137 |
-
|
138 |
-
public function getGridUrl()
|
139 |
-
{
|
140 |
-
return $this->getUrl('*/*/*', array('_current' => true));
|
141 |
-
}
|
142 |
-
|
143 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/code/community/Chronopost/Chronorelais/Block/Sales/Shipment/Grid.php
CHANGED
@@ -22,26 +22,26 @@ class Chronopost_Chronorelais_Block_Sales_Shipment_Grid extends Mage_Adminhtml_B
|
|
22 |
|
23 |
protected function _prepareCollection()
|
24 |
{
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
}
|
46 |
|
47 |
protected function _prepareColumns()
|
@@ -90,9 +90,9 @@ class Chronopost_Chronorelais_Block_Sales_Shipment_Grid extends Mage_Adminhtml_B
|
|
90 |
'filter' => false,
|
91 |
));
|
92 |
|
93 |
-
$this->addColumn('
|
94 |
'header' => Mage::helper('sales')->__('Tracking'),
|
95 |
-
'index' => '
|
96 |
'filter' => false,
|
97 |
));
|
98 |
|
@@ -115,21 +115,21 @@ class Chronopost_Chronorelais_Block_Sales_Shipment_Grid extends Mage_Adminhtml_B
|
|
115 |
|
116 |
$this->addColumn('download', array(
|
117 |
'header' => Mage::helper('chronorelais')->__('Etiquettes'),
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
));
|
134 |
|
135 |
return parent::_prepareColumns();
|
@@ -181,5 +181,23 @@ class Chronopost_Chronorelais_Block_Sales_Shipment_Grid extends Mage_Adminhtml_B
|
|
181 |
{
|
182 |
return $this->getUrl('*/*/*', array('_current' => true));
|
183 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
184 |
|
185 |
}
|
22 |
|
23 |
protected function _prepareCollection()
|
24 |
{
|
25 |
+
$_chronopost_deliver_saturday = Mage::helper('chronorelais')->getConfigData('carriers/chronopost/deliver_on_saturday');
|
26 |
+
$_chronorelais_deliver_saturday = Mage::helper('chronorelais')->getConfigData('carriers/chronorelais/deliver_on_saturday');
|
27 |
+
if($_chronopost_deliver_saturday==1) { $_chronopost_deliver_saturday = 'Yes'; } else { $_chronopost_deliver_saturday = 'No';}
|
28 |
+
if($_chronorelais_deliver_saturday==1) { $_chronorelais_deliver_saturday = 'Yes'; } else { $_chronorelais_deliver_saturday = 'No'; }
|
29 |
+
|
30 |
+
$collection = Mage::getResourceModel($this->_getCollectionClass());
|
31 |
+
$collection->getSelect()->joinLeft(array('og' => $collection->getTable('sales/order')), 'main_table.entity_id = og.entity_id', array('CASE LOWER(SUBSTRING_INDEX(og.shipping_method,"_","1")) WHEN "chronoexpress" THEN "Chrono Express" WHEN "chronorelais" THEN "Chrono Relais" ELSE CONCAT(UCASE(SUBSTRING(SUBSTRING_INDEX(og.shipping_method,"_","1"),1,1)),LOWER(SUBSTRING(SUBSTRING_INDEX(og.shipping_method,"_","1"), 2))) END as shipping_method', 'og.total_qty_ordered'));
|
32 |
+
$collection->getSelect()->joinLeft(array('osg' => $collection->getTable('sales/shipment_grid')), 'main_table.entity_id = osg.order_id', array('if(isNull(osg.increment_id) , "--" , GROUP_CONCAT(DISTINCT osg.increment_id SEPARATOR \', \')) as shipment_increment_id', 'GROUP_CONCAT(DISTINCT osg.created_at SEPARATOR \', \') as shipment_created_at'));
|
33 |
+
$collection->getSelect()->joinLeft(array('ost' => $collection->getTable('sales/shipment_track')), 'main_table.entity_id = ost.order_id', array('if(isNull(ost.track_number) , "--" , GROUP_CONCAT(DISTINCT ost.track_number SEPARATOR \', \')) as track_number', 'if(isNull(ost.title) , "--" , GROUP_CONCAT(DISTINCT ost.title SEPARATOR \', \')) as title'));
|
34 |
+
$collection->getSelect()->joinLeft(array('oes' => Mage::getSingleton('core/resource')->getTableName('sales_chronopost_order_export_status')), 'main_table.entity_id = oes.order_id', array("if(isNull(oes.livraison_le_samedi), CASE LOWER(SUBSTRING_INDEX(og.shipping_method,'_','1')) WHEN 'chronopost' THEN '$_chronopost_deliver_saturday' WHEN 'chronorelais' THEN '$_chronorelais_deliver_saturday' WHEN 'chronoexpress' THEN '--' ELSE 'No' END, oes.livraison_le_samedi) as livraison_le_samedi"));
|
35 |
+
$collection->getSelect()->where('og.shipping_method LIKE "chronorelais%" OR og.shipping_method LIKE "chronopost%" OR og.shipping_method LIKE "chronoexpress%"');
|
36 |
+
$collection->getSelect()->group('main_table.entity_id');
|
37 |
+
$sql = $collection->getSelectSql(true);
|
38 |
+
$collection->getSelect()->reset()->from(
|
39 |
+
array('e' =>new Zend_Db_Expr("({$sql})")),
|
40 |
+
array('e' => "*")
|
41 |
+
);
|
42 |
+
|
43 |
+
$this->setCollection($collection);
|
44 |
+
return parent::_prepareCollection();
|
45 |
}
|
46 |
|
47 |
protected function _prepareColumns()
|
90 |
'filter' => false,
|
91 |
));
|
92 |
|
93 |
+
$this->addColumn('track_number', array(
|
94 |
'header' => Mage::helper('sales')->__('Tracking'),
|
95 |
+
'index' => 'track_number',
|
96 |
'filter' => false,
|
97 |
));
|
98 |
|
115 |
|
116 |
$this->addColumn('download', array(
|
117 |
'header' => Mage::helper('chronorelais')->__('Etiquettes'),
|
118 |
+
'type' => 'action',
|
119 |
+
'getter' => 'getId',
|
120 |
+
'actions' => array(
|
121 |
+
array(
|
122 |
+
'caption' => Mage::helper('chronorelais')->__('Imprimer'),
|
123 |
+
'url' => array(
|
124 |
+
'base'=>'chronorelais/sales_impression/print'
|
125 |
+
),
|
126 |
+
'target' => '_blank',
|
127 |
+
'field' => 'order_id'
|
128 |
+
)
|
129 |
+
),
|
130 |
+
'filter' => false,
|
131 |
+
'sortable' => false,
|
132 |
+
'index' => 'stores'
|
133 |
));
|
134 |
|
135 |
return parent::_prepareColumns();
|
181 |
{
|
182 |
return $this->getUrl('*/*/*', array('_current' => true));
|
183 |
}
|
184 |
+
|
185 |
+
public function getAdditionalJavaScript()
|
186 |
+
{
|
187 |
+
echo "$$('#sales_order_grid_table tr td:nth-child(3)').each(function(item) {
|
188 |
+
var chaine = item.innerHTML.replace(/^\s+/g,'').replace(/\s+$/g,'');
|
189 |
+
if (chaine.split(', ').length > 1) {
|
190 |
+
var content = '';
|
191 |
+
var numbers = chaine.split(', ');
|
192 |
+
var lien = $(item).next('.last').down('a');
|
193 |
+
for (var i=0; i<numbers.length; i++) {
|
194 |
+
content += '<a href=\"' + lien.href.replace(/\/order_id\/\d+\//, '/shipment_increment_id/' + numbers[i] + '/') + '\" target=\"_blank\">Expédition ' + numbers[i] + '</a><br />';
|
195 |
+
}
|
196 |
+
content += '';
|
197 |
+
lien.up().innerHTML = content;
|
198 |
+
//lien.writeAttribute('onclick', \"$(this).up().down('div').show(); return false;\");
|
199 |
+
}
|
200 |
+
});";
|
201 |
+
}
|
202 |
|
203 |
}
|
app/code/community/Chronopost/Chronorelais/Controller/Abstract.php
CHANGED
@@ -1,126 +1,126 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Magento Chronopost Chronorelais Module
|
5 |
-
*
|
6 |
-
* NOTICE OF LICENSE
|
7 |
-
*
|
8 |
-
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
-
* that is bundled with this package in the file LICENSE.txt.
|
10 |
-
* It is also available through the world-wide-web at this URL:
|
11 |
-
* http://opensource.org/licenses/osl-3.0.php
|
12 |
-
* If you did not receive a copy of the license and are unable to
|
13 |
-
* obtain it through the world-wide-web, please send an email
|
14 |
-
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
-
*
|
16 |
-
* @category Chronopost
|
17 |
-
* @package Chronopost_Chronorelais
|
18 |
-
* @copyright Copyright (c) 2008-10 Owebia (http://www.owebia.com/)
|
19 |
-
* @author Antoine Lemoine
|
20 |
-
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
-
*/
|
22 |
-
|
23 |
-
class Chronopost_Chronorelais_Controller_Abstract extends Mage_Adminhtml_Controller_Action
|
24 |
-
{
|
25 |
-
public function __() {
|
26 |
-
$args = func_get_args();
|
27 |
-
$message = array_shift($args);
|
28 |
-
if ($message instanceof OS_Message) {
|
29 |
-
$args = $message->args;
|
30 |
-
$message = $message->message;
|
31 |
-
}
|
32 |
-
|
33 |
-
$output = Mage::helper('shipping')->__($message);
|
34 |
-
if (count($args)==0) return $output;
|
35 |
-
|
36 |
-
if (!isset($this->_translate_inline)) $this->_translate_inline = Mage::getSingleton('core/translate')->getTranslateInline();
|
37 |
-
if ($this->_translate_inline) {
|
38 |
-
$parts = explode('}}{{',$output);
|
39 |
-
$parts[0] = vsprintf($parts[0],$args);
|
40 |
-
return implode('}}{{',$parts);
|
41 |
-
}
|
42 |
-
else return vsprintf($output,$args);
|
43 |
-
}
|
44 |
-
|
45 |
-
protected function getIncludingPath($path) {
|
46 |
-
if (file_exists(dirname(__FILE__).'/Chronopost_Chronorelais_includes_'.$path)) {
|
47 |
-
return 'Chronopost_Chronorelais_includes_'.$path;
|
48 |
-
} else {
|
49 |
-
return Mage::getBaseDir('code').'/community/Chronopost/Chronorelais/includes/'.$path;
|
50 |
-
}
|
51 |
-
}
|
52 |
-
|
53 |
-
protected function getMimeType($extension) {
|
54 |
-
$mime_type_array = array(
|
55 |
-
'.gz' => 'application/x-gzip',
|
56 |
-
'.tgz' => 'application/x-gzip',
|
57 |
-
'.zip' => 'application/zip',
|
58 |
-
'.pdf' => 'application/pdf',
|
59 |
-
'.png' => 'image/png',
|
60 |
-
'.gif' => 'image/gif',
|
61 |
-
'.jpg' => 'image/jpeg',
|
62 |
-
'.jpeg' => 'image/jpeg',
|
63 |
-
'.txt' => 'text/plain',
|
64 |
-
'.htm' => 'text/html',
|
65 |
-
'.html' => 'text/html',
|
66 |
-
'.mpg' => 'video/mpeg',
|
67 |
-
'.avi' => 'video/x-msvideo',
|
68 |
-
);
|
69 |
-
return isset($mime_type_array[$extension]) ? $mime_type_array[$extension] : 'application/octet-stream';
|
70 |
-
}
|
71 |
-
|
72 |
-
protected function forceDownload($filename, $content) {
|
73 |
-
if (headers_sent()) {
|
74 |
-
trigger_error('forceDownload($filename) - Headers have already been sent',E_USER_ERROR);
|
75 |
-
return false;
|
76 |
-
}
|
77 |
-
|
78 |
-
$extension = strrchr($filename,'.');
|
79 |
-
$mime_type = $this->getMimeType($extension);
|
80 |
-
|
81 |
-
header('Content-disposition: attachment; filename="'.$filename.'"');
|
82 |
-
header('Content-Type: application/force-download');
|
83 |
-
header('Content-Transfer-Encoding: '.$mime_type."\n"); // Surtout ne pas enlever le \n
|
84 |
-
//header('Content-Length: '.filesize($filename));
|
85 |
-
header('Pragma: no-cache');
|
86 |
-
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
|
87 |
-
header('Expires: 0');
|
88 |
-
echo $content;
|
89 |
-
return true;
|
90 |
-
}
|
91 |
-
|
92 |
-
protected function jsEscape($input) {
|
93 |
-
return str_replace(array("\r\n","\r","\n","'"),array("\\n","\\n","\\n","\\'"),$input);
|
94 |
-
}
|
95 |
-
|
96 |
-
protected function cleanKey($key) {
|
97 |
-
return preg_replace('/[^a-z0-9-_]/i','_-_',$key);
|
98 |
-
}
|
99 |
-
|
100 |
-
protected function page($id, $title, $content) {
|
101 |
-
return "<div id=\"ocseditor-".$id."-page\" class=\"ocseditor-page\">"
|
102 |
-
.$this->pageHeader($title,$this->button('Close',"ocseditor.closePage(this);",'cancel'))
|
103 |
-
."<div class=\"page-content\">".$content."</div>"
|
104 |
-
."</div>"
|
105 |
-
;
|
106 |
-
}
|
107 |
-
|
108 |
-
protected function pageHeader($title, $buttons) {
|
109 |
-
return "<div class=\"content-header\">"
|
110 |
-
."<table cellspacing=\"0\"><tr>"
|
111 |
-
."<td><h3>".$this->__($title)."</h3></td>"
|
112 |
-
."<td class=\"form-buttons\">"
|
113 |
-
.$buttons
|
114 |
-
."</td>"
|
115 |
-
."</tr></table>"
|
116 |
-
."</div>"
|
117 |
-
;
|
118 |
-
}
|
119 |
-
|
120 |
-
protected function button($label, $onclick, $class_name='') {
|
121 |
-
$class_name = 'scalable'.($class_name!='' ? ' '.$class_name : '');
|
122 |
-
return "<button type=\"button\" class=\"".$class_name."\" onclick=\"".$onclick."\"><span>".$this->__($label)."</span></button>";
|
123 |
-
}
|
124 |
-
}
|
125 |
-
|
126 |
?>
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Magento Chronopost Chronorelais Module
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Chronopost
|
17 |
+
* @package Chronopost_Chronorelais
|
18 |
+
* @copyright Copyright (c) 2008-10 Owebia (http://www.owebia.com/)
|
19 |
+
* @author Antoine Lemoine
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
class Chronopost_Chronorelais_Controller_Abstract extends Mage_Adminhtml_Controller_Action
|
24 |
+
{
|
25 |
+
public function __() {
|
26 |
+
$args = func_get_args();
|
27 |
+
$message = array_shift($args);
|
28 |
+
if ($message instanceof OS_Message) {
|
29 |
+
$args = $message->args;
|
30 |
+
$message = $message->message;
|
31 |
+
}
|
32 |
+
|
33 |
+
$output = Mage::helper('shipping')->__($message);
|
34 |
+
if (count($args)==0) return $output;
|
35 |
+
|
36 |
+
if (!isset($this->_translate_inline)) $this->_translate_inline = Mage::getSingleton('core/translate')->getTranslateInline();
|
37 |
+
if ($this->_translate_inline) {
|
38 |
+
$parts = explode('}}{{',$output);
|
39 |
+
$parts[0] = vsprintf($parts[0],$args);
|
40 |
+
return implode('}}{{',$parts);
|
41 |
+
}
|
42 |
+
else return vsprintf($output,$args);
|
43 |
+
}
|
44 |
+
|
45 |
+
protected function getIncludingPath($path) {
|
46 |
+
if (file_exists(dirname(__FILE__).'/Chronopost_Chronorelais_includes_'.$path)) {
|
47 |
+
return 'Chronopost_Chronorelais_includes_'.$path;
|
48 |
+
} else {
|
49 |
+
return Mage::getBaseDir('code').'/community/Chronopost/Chronorelais/includes/'.$path;
|
50 |
+
}
|
51 |
+
}
|
52 |
+
|
53 |
+
protected function getMimeType($extension) {
|
54 |
+
$mime_type_array = array(
|
55 |
+
'.gz' => 'application/x-gzip',
|
56 |
+
'.tgz' => 'application/x-gzip',
|
57 |
+
'.zip' => 'application/zip',
|
58 |
+
'.pdf' => 'application/pdf',
|
59 |
+
'.png' => 'image/png',
|
60 |
+
'.gif' => 'image/gif',
|
61 |
+
'.jpg' => 'image/jpeg',
|
62 |
+
'.jpeg' => 'image/jpeg',
|
63 |
+
'.txt' => 'text/plain',
|
64 |
+
'.htm' => 'text/html',
|
65 |
+
'.html' => 'text/html',
|
66 |
+
'.mpg' => 'video/mpeg',
|
67 |
+
'.avi' => 'video/x-msvideo',
|
68 |
+
);
|
69 |
+
return isset($mime_type_array[$extension]) ? $mime_type_array[$extension] : 'application/octet-stream';
|
70 |
+
}
|
71 |
+
|
72 |
+
protected function forceDownload($filename, $content) {
|
73 |
+
if (headers_sent()) {
|
74 |
+
trigger_error('forceDownload($filename) - Headers have already been sent',E_USER_ERROR);
|
75 |
+
return false;
|
76 |
+
}
|
77 |
+
|
78 |
+
$extension = strrchr($filename,'.');
|
79 |
+
$mime_type = $this->getMimeType($extension);
|
80 |
+
|
81 |
+
header('Content-disposition: attachment; filename="'.$filename.'"');
|
82 |
+
header('Content-Type: application/force-download');
|
83 |
+
header('Content-Transfer-Encoding: '.$mime_type."\n"); // Surtout ne pas enlever le \n
|
84 |
+
//header('Content-Length: '.filesize($filename));
|
85 |
+
header('Pragma: no-cache');
|
86 |
+
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
|
87 |
+
header('Expires: 0');
|
88 |
+
echo $content;
|
89 |
+
return true;
|
90 |
+
}
|
91 |
+
|
92 |
+
protected function jsEscape($input) {
|
93 |
+
return str_replace(array("\r\n","\r","\n","'"),array("\\n","\\n","\\n","\\'"),$input);
|
94 |
+
}
|
95 |
+
|
96 |
+
protected function cleanKey($key) {
|
97 |
+
return preg_replace('/[^a-z0-9-_]/i','_-_',$key);
|
98 |
+
}
|
99 |
+
|
100 |
+
protected function page($id, $title, $content) {
|
101 |
+
return "<div id=\"ocseditor-".$id."-page\" class=\"ocseditor-page\">"
|
102 |
+
.$this->pageHeader($title,$this->button('Close',"ocseditor.closePage(this);",'cancel'))
|
103 |
+
."<div class=\"page-content\">".$content."</div>"
|
104 |
+
."</div>"
|
105 |
+
;
|
106 |
+
}
|
107 |
+
|
108 |
+
protected function pageHeader($title, $buttons) {
|
109 |
+
return "<div class=\"content-header\">"
|
110 |
+
."<table cellspacing=\"0\"><tr>"
|
111 |
+
."<td><h3>".$this->__($title)."</h3></td>"
|
112 |
+
."<td class=\"form-buttons\">"
|
113 |
+
.$buttons
|
114 |
+
."</td>"
|
115 |
+
."</tr></table>"
|
116 |
+
."</div>"
|
117 |
+
;
|
118 |
+
}
|
119 |
+
|
120 |
+
protected function button($label, $onclick, $class_name='') {
|
121 |
+
$class_name = 'scalable'.($class_name!='' ? ' '.$class_name : '');
|
122 |
+
return "<button type=\"button\" class=\"".$class_name."\" onclick=\"".$onclick."\"><span>".$this->__($label)."</span></button>";
|
123 |
+
}
|
124 |
+
}
|
125 |
+
|
126 |
?>
|
app/code/community/Chronopost/Chronorelais/Helper/Data.php
CHANGED
@@ -1,177 +1,177 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Helper_Data extends Mage_Core_Helper_Abstract
|
3 |
-
{
|
4 |
-
//Choronorelais settings for productCode
|
5 |
-
const CHRONO_POST = '01'; // for France
|
6 |
-
const CHRONO_EXPRESS = '17'; // for Interantional
|
7 |
-
const CHRONORELAIS = '86'; // for Chronorelais
|
8 |
-
const CHRONOPOST_13H = '13H'; // for France
|
9 |
-
const CHRONOEXPRESS_EI = 'EI'; // for Interantional
|
10 |
-
const CHRONORELAIS_PR = 'PR'; // for Chronorelais
|
11 |
-
const CHRONOPOST_DEFAULT_COUNTRY = 'FR';
|
12 |
-
const CHRONOPOST_TRACKING_URL = 'http://wsshipping.chronopost.fr/shipping/services/getReservedSkybill?reservationNumber={trackingNumber}';
|
13 |
-
// if you are in a period outside thursday 18:00 to friday 15:00, there is no shipping on saturday
|
14 |
-
var $SaturdayShippingDays = array(
|
15 |
-
'startday' => 'thursday',
|
16 |
-
'endday' => 'friday',
|
17 |
-
'starttime' => '18:00:00',
|
18 |
-
'endtime' => '15:00:00'
|
19 |
-
);
|
20 |
-
|
21 |
-
public function getConfigData($path) {
|
22 |
-
return Mage::getStoreConfig($path, Mage::app()->getStore());
|
23 |
-
}
|
24 |
-
public function getSaturdayShippingDays() {
|
25 |
-
return $this->SaturdayShippingDays;
|
26 |
-
}
|
27 |
-
public function getCurrentTimeByZone($timezone="Europe/Paris", $format="l H:i") {
|
28 |
-
$d = new DateTime("now", new DateTimeZone($timezone));
|
29 |
-
return $d->format($format);
|
30 |
-
}
|
31 |
-
public function isSendingDay() {
|
32 |
-
$shipping_days = $this->getSaturdayShippingDays();
|
33 |
-
$current_day = strtolower($this->getCurrentTimeByZone("Europe/Paris", "l"));
|
34 |
-
$current_date = $this->getCurrentTimeByZone("Europe/Paris", "Y-m-d H:i:s");
|
35 |
-
$current_datetime = explode(' ',$current_date);
|
36 |
-
|
37 |
-
//get timestamps
|
38 |
-
$start_timestamp = strtotime($current_datetime[0]." ".$shipping_days['starttime']);
|
39 |
-
$end_timestamp = strtotime($current_datetime[0]." ".$shipping_days['endtime']);
|
40 |
-
$current_timestamp = strtotime($current_date);
|
41 |
-
|
42 |
-
$sending_day = false;
|
43 |
-
if($shipping_days['startday']==$current_day && $current_timestamp>=$start_timestamp) {
|
44 |
-
$sending_day = true;
|
45 |
-
} elseif($shipping_days['endday']==$current_day && $current_timestamp<=$end_timestamp) {
|
46 |
-
$sending_day = true;
|
47 |
-
}
|
48 |
-
return $sending_day;
|
49 |
-
}
|
50 |
-
|
51 |
-
/**
|
52 |
-
* General Shipping configuration
|
53 |
-
*/
|
54 |
-
public function getConfigurationAccountNumber() {
|
55 |
-
return $this->getConfigData('chronorelais/shipping/account_number');
|
56 |
-
}
|
57 |
-
public function getConfigurationSubAccountNumber() {
|
58 |
-
return $this->getConfigData('chronorelais/shipping/sub_account_number');
|
59 |
-
}
|
60 |
-
public function getConfigurationAccountPass() {
|
61 |
-
return $this->getConfigData('chronorelais/shipping/account_pass');
|
62 |
-
}
|
63 |
-
public function getConfigurationTrackingViewUrl() {
|
64 |
-
return $this->getConfigData('chronorelais/shipping/tracking_view_url');
|
65 |
-
}
|
66 |
-
public function getConfigurationGoogleMapAPIKey() {
|
67 |
-
return $this->getConfigData('chronorelais/shipping/google_map_api');
|
68 |
-
}
|
69 |
-
public function getChronoProductCode($country, $code='') {
|
70 |
-
$productcode = '';
|
71 |
-
$code = strtolower($code);
|
72 |
-
if($code=='chronorelais') {
|
73 |
-
$productcode = self::CHRONORELAIS;
|
74 |
-
} elseif($code=='chronopost') {
|
75 |
-
$productcode = self::CHRONO_POST;
|
76 |
-
} else {
|
77 |
-
$productcode = self::CHRONO_EXPRESS;
|
78 |
-
}
|
79 |
-
return $productcode;
|
80 |
-
}
|
81 |
-
public function getChronoProductCodeString($code='') {
|
82 |
-
$productcode = '';
|
83 |
-
$code = strtolower($code);
|
84 |
-
if($code=='chronorelais') {
|
85 |
-
$productcode = self::CHRONORELAIS_PR;
|
86 |
-
} elseif($code=='chronopost') {
|
87 |
-
$productcode = self::CHRONOPOST_13H;
|
88 |
-
} else {
|
89 |
-
$productcode = self::CHRONOEXPRESS_EI;
|
90 |
-
}
|
91 |
-
return $productcode;
|
92 |
-
}
|
93 |
-
public function getConfigurationTrackingUrl() {
|
94 |
-
return self::CHRONOPOST_TRACKING_URL;
|
95 |
-
}
|
96 |
-
|
97 |
-
/**
|
98 |
-
* Export configuration
|
99 |
-
*/
|
100 |
-
public function getConfigurationFileExtension($export_type='css') {
|
101 |
-
return $this->getConfigData('chronorelais/export_'.$export_type.'/file_extension');
|
102 |
-
}
|
103 |
-
public function getConfigurationFileCharset($export_type='css') {
|
104 |
-
return $this->getConfigData('chronorelais/export_'.$export_type.'/file_charset');
|
105 |
-
}
|
106 |
-
public function getConfigurationEndOfLineCharacter($export_type='css') {
|
107 |
-
return $this->getConfigData('chronorelais/export_'.$export_type.'/endofline_character');
|
108 |
-
}
|
109 |
-
public function getConfigurationFieldDelimiter($export_type='css') {
|
110 |
-
return $this->getConfigData('chronorelais/export_'.$export_type.'/field_delimiter');
|
111 |
-
}
|
112 |
-
public function getConfigurationFieldSeparator($export_type='css') {
|
113 |
-
return $this->getConfigData('chronorelais/export_'.$export_type.'/field_separator');
|
114 |
-
}
|
115 |
-
|
116 |
-
/**
|
117 |
-
* Import configuration
|
118 |
-
*/
|
119 |
-
public function getConfigurationSendEmail() {
|
120 |
-
return $this->getConfigData('chronorelais/import/send_email');
|
121 |
-
}
|
122 |
-
public function getConfigurationIncludeComment() {
|
123 |
-
return $this->getConfigData('chronorelais/import/include_comment');
|
124 |
-
}
|
125 |
-
public function getConfigurationDefaultTrackingTitle() {
|
126 |
-
return $this->getConfigData('chronorelais/import/default_tracking_title');
|
127 |
-
}
|
128 |
-
public function getConfigurationShippingComment() {
|
129 |
-
return $this->getConfigData('chronorelais/import/shipping_comment');
|
130 |
-
}
|
131 |
-
|
132 |
-
/**
|
133 |
-
* Shipper Information
|
134 |
-
*/
|
135 |
-
public function getConfigurationShipperInfo($field) {
|
136 |
-
$fieldValue = '';
|
137 |
-
if($field) {
|
138 |
-
if($this->getConfigData('chronorelais/shipperinformation/'.$field)) {
|
139 |
-
$fieldValue = $this->getConfigData('chronorelais/shipperinformation/'.$field);
|
140 |
-
}
|
141 |
-
}
|
142 |
-
return $fieldValue;
|
143 |
-
}
|
144 |
-
|
145 |
-
/**
|
146 |
-
* Chronopost Customer Information
|
147 |
-
*/
|
148 |
-
public function getConfigurationCustomerInfo($field) {
|
149 |
-
$fieldValue = '';
|
150 |
-
if($field) {
|
151 |
-
if($this->getConfigData('chronorelais/customerinformation/'.$field)) {
|
152 |
-
$fieldValue = $this->getConfigData('chronorelais/customerinformation/'.$field);
|
153 |
-
}
|
154 |
-
}
|
155 |
-
return $fieldValue;
|
156 |
-
}
|
157 |
-
|
158 |
-
/**
|
159 |
-
* Import configuration
|
160 |
-
*/
|
161 |
-
public function getConfigurationSkybillParam() {
|
162 |
-
return $this->getConfigData('chronorelais/skybillparam/mode');
|
163 |
-
}
|
164 |
-
|
165 |
-
/* Get Livraison le Samedi status by orderid */
|
166 |
-
public function getLivraisonSamediStatus($order_id)
|
167 |
-
{
|
168 |
-
$_connection = Mage::getSingleton('core/resource')->getConnection('core_write');
|
169 |
-
$_table = Mage::getSingleton('core/resource')->getTableName('sales_chronopost_order_export_status');
|
170 |
-
$select = $_connection->select()
|
171 |
-
->from($_table, 'livraison_le_samedi')
|
172 |
-
->where('order_id=?', $order_id);
|
173 |
-
$status = $_connection->fetchOne($select);
|
174 |
-
return $status;
|
175 |
-
}
|
176 |
-
|
177 |
-
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Helper_Data extends Mage_Core_Helper_Abstract
|
3 |
+
{
|
4 |
+
//Choronorelais settings for productCode
|
5 |
+
const CHRONO_POST = '01'; // for France
|
6 |
+
const CHRONO_EXPRESS = '17'; // for Interantional
|
7 |
+
const CHRONORELAIS = '86'; // for Chronorelais
|
8 |
+
const CHRONOPOST_13H = '13H'; // for France
|
9 |
+
const CHRONOEXPRESS_EI = 'EI'; // for Interantional
|
10 |
+
const CHRONORELAIS_PR = 'PR'; // for Chronorelais
|
11 |
+
const CHRONOPOST_DEFAULT_COUNTRY = 'FR';
|
12 |
+
const CHRONOPOST_TRACKING_URL = 'http://wsshipping.chronopost.fr/shipping/services/getReservedSkybill?reservationNumber={trackingNumber}';
|
13 |
+
// if you are in a period outside thursday 18:00 to friday 15:00, there is no shipping on saturday
|
14 |
+
var $SaturdayShippingDays = array(
|
15 |
+
'startday' => 'thursday',
|
16 |
+
'endday' => 'friday',
|
17 |
+
'starttime' => '18:00:00',
|
18 |
+
'endtime' => '15:00:00'
|
19 |
+
);
|
20 |
+
|
21 |
+
public function getConfigData($path) {
|
22 |
+
return Mage::getStoreConfig($path, Mage::app()->getStore());
|
23 |
+
}
|
24 |
+
public function getSaturdayShippingDays() {
|
25 |
+
return $this->SaturdayShippingDays;
|
26 |
+
}
|
27 |
+
public function getCurrentTimeByZone($timezone="Europe/Paris", $format="l H:i") {
|
28 |
+
$d = new DateTime("now", new DateTimeZone($timezone));
|
29 |
+
return $d->format($format);
|
30 |
+
}
|
31 |
+
public function isSendingDay() {
|
32 |
+
$shipping_days = $this->getSaturdayShippingDays();
|
33 |
+
$current_day = strtolower($this->getCurrentTimeByZone("Europe/Paris", "l"));
|
34 |
+
$current_date = $this->getCurrentTimeByZone("Europe/Paris", "Y-m-d H:i:s");
|
35 |
+
$current_datetime = explode(' ',$current_date);
|
36 |
+
|
37 |
+
//get timestamps
|
38 |
+
$start_timestamp = strtotime($current_datetime[0]." ".$shipping_days['starttime']);
|
39 |
+
$end_timestamp = strtotime($current_datetime[0]." ".$shipping_days['endtime']);
|
40 |
+
$current_timestamp = strtotime($current_date);
|
41 |
+
|
42 |
+
$sending_day = false;
|
43 |
+
if($shipping_days['startday']==$current_day && $current_timestamp>=$start_timestamp) {
|
44 |
+
$sending_day = true;
|
45 |
+
} elseif($shipping_days['endday']==$current_day && $current_timestamp<=$end_timestamp) {
|
46 |
+
$sending_day = true;
|
47 |
+
}
|
48 |
+
return $sending_day;
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* General Shipping configuration
|
53 |
+
*/
|
54 |
+
public function getConfigurationAccountNumber() {
|
55 |
+
return $this->getConfigData('chronorelais/shipping/account_number');
|
56 |
+
}
|
57 |
+
public function getConfigurationSubAccountNumber() {
|
58 |
+
return $this->getConfigData('chronorelais/shipping/sub_account_number');
|
59 |
+
}
|
60 |
+
public function getConfigurationAccountPass() {
|
61 |
+
return $this->getConfigData('chronorelais/shipping/account_pass');
|
62 |
+
}
|
63 |
+
public function getConfigurationTrackingViewUrl() {
|
64 |
+
return $this->getConfigData('chronorelais/shipping/tracking_view_url');
|
65 |
+
}
|
66 |
+
public function getConfigurationGoogleMapAPIKey() {
|
67 |
+
return $this->getConfigData('chronorelais/shipping/google_map_api');
|
68 |
+
}
|
69 |
+
public function getChronoProductCode($country, $code='') {
|
70 |
+
$productcode = '';
|
71 |
+
$code = strtolower($code);
|
72 |
+
if($code=='chronorelais') {
|
73 |
+
$productcode = self::CHRONORELAIS;
|
74 |
+
} elseif($code=='chronopost') {
|
75 |
+
$productcode = self::CHRONO_POST;
|
76 |
+
} else {
|
77 |
+
$productcode = self::CHRONO_EXPRESS;
|
78 |
+
}
|
79 |
+
return $productcode;
|
80 |
+
}
|
81 |
+
public function getChronoProductCodeString($code='') {
|
82 |
+
$productcode = '';
|
83 |
+
$code = strtolower($code);
|
84 |
+
if($code=='chronorelais') {
|
85 |
+
$productcode = self::CHRONORELAIS_PR;
|
86 |
+
} elseif($code=='chronopost') {
|
87 |
+
$productcode = self::CHRONOPOST_13H;
|
88 |
+
} else {
|
89 |
+
$productcode = self::CHRONOEXPRESS_EI;
|
90 |
+
}
|
91 |
+
return $productcode;
|
92 |
+
}
|
93 |
+
public function getConfigurationTrackingUrl() {
|
94 |
+
return self::CHRONOPOST_TRACKING_URL;
|
95 |
+
}
|
96 |
+
|
97 |
+
/**
|
98 |
+
* Export configuration
|
99 |
+
*/
|
100 |
+
public function getConfigurationFileExtension($export_type='css') {
|
101 |
+
return $this->getConfigData('chronorelais/export_'.$export_type.'/file_extension');
|
102 |
+
}
|
103 |
+
public function getConfigurationFileCharset($export_type='css') {
|
104 |
+
return $this->getConfigData('chronorelais/export_'.$export_type.'/file_charset');
|
105 |
+
}
|
106 |
+
public function getConfigurationEndOfLineCharacter($export_type='css') {
|
107 |
+
return $this->getConfigData('chronorelais/export_'.$export_type.'/endofline_character');
|
108 |
+
}
|
109 |
+
public function getConfigurationFieldDelimiter($export_type='css') {
|
110 |
+
return $this->getConfigData('chronorelais/export_'.$export_type.'/field_delimiter');
|
111 |
+
}
|
112 |
+
public function getConfigurationFieldSeparator($export_type='css') {
|
113 |
+
return $this->getConfigData('chronorelais/export_'.$export_type.'/field_separator');
|
114 |
+
}
|
115 |
+
|
116 |
+
/**
|
117 |
+
* Import configuration
|
118 |
+
*/
|
119 |
+
public function getConfigurationSendEmail() {
|
120 |
+
return $this->getConfigData('chronorelais/import/send_email');
|
121 |
+
}
|
122 |
+
public function getConfigurationIncludeComment() {
|
123 |
+
return $this->getConfigData('chronorelais/import/include_comment');
|
124 |
+
}
|
125 |
+
public function getConfigurationDefaultTrackingTitle() {
|
126 |
+
return $this->getConfigData('chronorelais/import/default_tracking_title');
|
127 |
+
}
|
128 |
+
public function getConfigurationShippingComment() {
|
129 |
+
return $this->getConfigData('chronorelais/import/shipping_comment');
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Shipper Information
|
134 |
+
*/
|
135 |
+
public function getConfigurationShipperInfo($field) {
|
136 |
+
$fieldValue = '';
|
137 |
+
if($field) {
|
138 |
+
if($this->getConfigData('chronorelais/shipperinformation/'.$field)) {
|
139 |
+
$fieldValue = $this->getConfigData('chronorelais/shipperinformation/'.$field);
|
140 |
+
}
|
141 |
+
}
|
142 |
+
return $fieldValue;
|
143 |
+
}
|
144 |
+
|
145 |
+
/**
|
146 |
+
* Chronopost Customer Information
|
147 |
+
*/
|
148 |
+
public function getConfigurationCustomerInfo($field) {
|
149 |
+
$fieldValue = '';
|
150 |
+
if($field) {
|
151 |
+
if($this->getConfigData('chronorelais/customerinformation/'.$field)) {
|
152 |
+
$fieldValue = $this->getConfigData('chronorelais/customerinformation/'.$field);
|
153 |
+
}
|
154 |
+
}
|
155 |
+
return $fieldValue;
|
156 |
+
}
|
157 |
+
|
158 |
+
/**
|
159 |
+
* Import configuration
|
160 |
+
*/
|
161 |
+
public function getConfigurationSkybillParam() {
|
162 |
+
return $this->getConfigData('chronorelais/skybillparam/mode');
|
163 |
+
}
|
164 |
+
|
165 |
+
/* Get Livraison le Samedi status by orderid */
|
166 |
+
public function getLivraisonSamediStatus($order_id)
|
167 |
+
{
|
168 |
+
$_connection = Mage::getSingleton('core/resource')->getConnection('core_write');
|
169 |
+
$_table = Mage::getSingleton('core/resource')->getTableName('sales_chronopost_order_export_status');
|
170 |
+
$select = $_connection->select()
|
171 |
+
->from($_table, 'livraison_le_samedi')
|
172 |
+
->where('order_id=?', $order_id);
|
173 |
+
$status = $_connection->fetchOne($select);
|
174 |
+
return $status;
|
175 |
+
}
|
176 |
+
|
177 |
+
}
|
app/code/community/Chronopost/Chronorelais/Model/Carrier/AbstractChronorelais.php
CHANGED
@@ -1,32 +1,32 @@
|
|
1 |
-
<?php
|
2 |
-
abstract class Chronopost_Chronorelais_Model_Carrier_AbstractChronorelais extends Varien_Object
|
3 |
-
{
|
4 |
-
protected $_code;
|
5 |
-
protected $_rates = null;
|
6 |
-
protected $_numBoxes = 1;
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Whether this carrier has fixed rates calculation
|
10 |
-
*
|
11 |
-
* @var bool
|
12 |
-
*/
|
13 |
-
protected $_isFixed = false;
|
14 |
-
|
15 |
-
const HANDLING_TYPE_PERCENT = 'P';
|
16 |
-
const HANDLING_TYPE_FIXED = 'F';
|
17 |
-
|
18 |
-
const HANDLING_ACTION_PERPACKAGE = 'P';
|
19 |
-
const HANDLING_ACTION_PERORDER = 'O';
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Fields that should be replaced in debug with '***'
|
23 |
-
*
|
24 |
-
* @var array
|
25 |
-
*/
|
26 |
-
protected $_debugReplacePrivateDataKeys = array();
|
27 |
-
|
28 |
-
public function __construct()
|
29 |
-
{
|
30 |
-
}
|
31 |
-
}
|
32 |
?>
|
1 |
+
<?php
|
2 |
+
abstract class Chronopost_Chronorelais_Model_Carrier_AbstractChronorelais extends Varien_Object
|
3 |
+
{
|
4 |
+
protected $_code;
|
5 |
+
protected $_rates = null;
|
6 |
+
protected $_numBoxes = 1;
|
7 |
+
|
8 |
+
/**
|
9 |
+
* Whether this carrier has fixed rates calculation
|
10 |
+
*
|
11 |
+
* @var bool
|
12 |
+
*/
|
13 |
+
protected $_isFixed = false;
|
14 |
+
|
15 |
+
const HANDLING_TYPE_PERCENT = 'P';
|
16 |
+
const HANDLING_TYPE_FIXED = 'F';
|
17 |
+
|
18 |
+
const HANDLING_ACTION_PERPACKAGE = 'P';
|
19 |
+
const HANDLING_ACTION_PERORDER = 'O';
|
20 |
+
|
21 |
+
/**
|
22 |
+
* Fields that should be replaced in debug with '***'
|
23 |
+
*
|
24 |
+
* @var array
|
25 |
+
*/
|
26 |
+
protected $_debugReplacePrivateDataKeys = array();
|
27 |
+
|
28 |
+
public function __construct()
|
29 |
+
{
|
30 |
+
}
|
31 |
+
}
|
32 |
?>
|
app/code/community/Chronopost/Chronorelais/Model/Carrier/AbstractChronorelaisShipping.php
CHANGED
@@ -1,489 +1,489 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Magento Chronopost Chronorelais Module
|
5 |
-
*
|
6 |
-
* NOTICE OF LICENSE
|
7 |
-
*
|
8 |
-
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
-
* that is bundled with this package in the file LICENSE.txt.
|
10 |
-
* It is also available through the world-wide-web at this URL:
|
11 |
-
* http://opensource.org/licenses/osl-3.0.php
|
12 |
-
* If you did not receive a copy of the license and are unable to
|
13 |
-
* obtain it through the world-wide-web, please send an email
|
14 |
-
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
-
*
|
16 |
-
* @category Chronopost
|
17 |
-
* @package Chronopost_Chronorelais
|
18 |
-
* @copyright Copyright (c) 2008-10 Owebia (http://www.owebia.com/)
|
19 |
-
* @author Antoine Lemoine
|
20 |
-
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
-
*/
|
22 |
-
|
23 |
-
// Pour g�rer les cas o� il y a eu compilation
|
24 |
-
if (file_exists(dirname(__FILE__).'/Chronopost_Chronorelais_includes_ChronorelaisShippingHelper.php')) include_once 'Chronopost_Chronorelais_includes_ChronorelaisShippingHelper.php';
|
25 |
-
else include_once Mage::getBaseDir('code').'/community/Chronopost/Chronorelais/includes/ChronorelaisShippingHelper.php';
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
class OCS_Magento_Product implements OCS_Product {
|
30 |
-
private $parent_cart_item;
|
31 |
-
private $cart_item;
|
32 |
-
private $cart_product;
|
33 |
-
private $loaded_product;
|
34 |
-
private $quantity;
|
35 |
-
|
36 |
-
public function OCS_Magento_Product($cart_item, $parent_cart_item) {
|
37 |
-
$this->cart_item = $cart_item;
|
38 |
-
$this->cart_product = $cart_item->getProduct();
|
39 |
-
$this->parent_cart_item = $parent_cart_item;
|
40 |
-
$this->quantity = isset($parent_cart_item) ? $parent_cart_item->getQty() : $cart_item->getQty();
|
41 |
-
}
|
42 |
-
|
43 |
-
public function getOption($option_name, $get_by_id=false) {
|
44 |
-
$value = null;
|
45 |
-
$product = $this->cart_product;
|
46 |
-
foreach ($product->getOptions() as $option) {
|
47 |
-
if ($option->getTitle()==$option_name) {
|
48 |
-
$custom_option = $product->getCustomOption('option_'.$option->getId());
|
49 |
-
if ($custom_option) {
|
50 |
-
$value = $custom_option->getValue();
|
51 |
-
if ($option->getType()=='drop_down' && !$get_by_id) {
|
52 |
-
$option_value = $option->getValueById($value);
|
53 |
-
if ($option_value) $value = $option_value->getTitle();
|
54 |
-
}
|
55 |
-
}
|
56 |
-
break;
|
57 |
-
}
|
58 |
-
}
|
59 |
-
return $value;
|
60 |
-
}
|
61 |
-
|
62 |
-
public function getAttribute($attribute_name, $get_by_id=false) {
|
63 |
-
$value = null;
|
64 |
-
$product = $this->_getLoadedProduct();
|
65 |
-
$attribute = $product->getResource()->getAttribute($attribute_name);
|
66 |
-
if ($attribute) {
|
67 |
-
$input_type = $attribute->getFrontend()->getInputType();
|
68 |
-
switch ($input_type) {
|
69 |
-
case 'select' :
|
70 |
-
$value = $get_by_id ? $product->getData($attribute_name) : $product->getAttributeText($attribute_name);
|
71 |
-
break;
|
72 |
-
default :
|
73 |
-
$value = $product->getData($attribute_name);
|
74 |
-
break;
|
75 |
-
}
|
76 |
-
}
|
77 |
-
return $value;
|
78 |
-
}
|
79 |
-
|
80 |
-
private function _getLoadedProduct() {
|
81 |
-
if (!isset($this->loaded_product)) $this->loaded_product = Mage::getModel('catalog/product')->load($this->cart_product->getId());
|
82 |
-
return $this->loaded_product;
|
83 |
-
}
|
84 |
-
|
85 |
-
public function getQuantity() {
|
86 |
-
return $this->quantity;
|
87 |
-
}
|
88 |
-
|
89 |
-
public function getName() {
|
90 |
-
return $this->cart_product->getName();
|
91 |
-
}
|
92 |
-
|
93 |
-
public function getSku() {
|
94 |
-
return $this->cart_product->getSku();
|
95 |
-
}
|
96 |
-
|
97 |
-
public function getStockData($key) {
|
98 |
-
$stock = $this->cart_product->getStockItem();
|
99 |
-
switch ($key) {
|
100 |
-
case 'is_in_stock':
|
101 |
-
return (bool)$stock->getIsInStock();
|
102 |
-
case 'quantity':
|
103 |
-
$quantity = $stock->getQty();
|
104 |
-
return $stock->getIsQtyDecimal() ? (float)$quantity : (int)$quantity;
|
105 |
-
}
|
106 |
-
return null;
|
107 |
-
}
|
108 |
-
}
|
109 |
-
|
110 |
-
abstract class Chronopost_Chronorelais_Model_Carrier_AbstractChronorelaisShipping
|
111 |
-
extends Mage_Shipping_Model_Carrier_Abstract
|
112 |
-
{
|
113 |
-
protected $_translate_inline;
|
114 |
-
protected $_result;
|
115 |
-
protected $_config;
|
116 |
-
protected $_countries;
|
117 |
-
protected $_helper;
|
118 |
-
protected $_messages;
|
119 |
-
|
120 |
-
/**
|
121 |
-
* Collect rates for this shipping method based on information in $request
|
122 |
-
*
|
123 |
-
* @param Mage_Shipping_Model_Rate_Request $data
|
124 |
-
* @return Mage_Shipping_Model_Rate_Result
|
125 |
-
*/
|
126 |
-
public function collectRates(Mage_Shipping_Model_Rate_Request $request) {
|
127 |
-
// skip if not enabled
|
128 |
-
if (!$this->__getConfigData('active')) return false;
|
129 |
-
|
130 |
-
/*foreach ($request->_data as $key => $data) {
|
131 |
-
echo $key.' => '.$data.'<br/>';
|
132 |
-
}*/
|
133 |
-
|
134 |
-
$process = array(
|
135 |
-
'request' => $request,
|
136 |
-
'result' => Mage::getModel('shipping/rate_result'),
|
137 |
-
'cart.items' => array(),
|
138 |
-
'products' => array(),
|
139 |
-
'data' => array(
|
140 |
-
'module.version' => null,
|
141 |
-
'carrier.code' => $this->_code,
|
142 |
-
'cart.price_excluding_tax' => $request->_data['package_value_with_discount'],
|
143 |
-
'cart.price_including_tax' => null,
|
144 |
-
'cart.weight' => $request->_data['package_weight'],
|
145 |
-
'cart.weight.unit' => null,
|
146 |
-
'cart.quantity' => $request->_data['package_qty'],
|
147 |
-
'destination.country.code' => $request->_data['dest_country_id'],
|
148 |
-
'destination.country.name' => null,
|
149 |
-
'destination.region.code' => $request->_data['dest_region_code'],
|
150 |
-
'destination.postcode' => $request->_data['dest_postcode'],
|
151 |
-
'origin.country.code' => $request->_data['country_id'],
|
152 |
-
'origin.country.name' => null,
|
153 |
-
'origin.region.code' => $request->_data['region_id'],
|
154 |
-
'origin.postcode' => $request->_data['postcode'],
|
155 |
-
'customer.group.id' => null,
|
156 |
-
'customer.group.code' => null,
|
157 |
-
'free_shipping' => $request->getFreeShipping(),
|
158 |
-
'store.id' => $request->_data['store_id'],
|
159 |
-
'store.code' => null,
|
160 |
-
'store.name' => null,
|
161 |
-
'store.address' => null,
|
162 |
-
'store.phone' => null,
|
163 |
-
'date.timestamp' => null,
|
164 |
-
'date.year' => null,
|
165 |
-
'date.month' => null,
|
166 |
-
'date.day' => null,
|
167 |
-
'date.hour' => null,
|
168 |
-
'date.minute' => null,
|
169 |
-
'date.second' => null,
|
170 |
-
),
|
171 |
-
'stop_to_first_match' => null,
|
172 |
-
'config' => null,
|
173 |
-
);
|
174 |
-
|
175 |
-
$items = $request->getAllItems();
|
176 |
-
for ($i=0, $n=count($items); $i<$n; $i++) {
|
177 |
-
$item = $items[$i];
|
178 |
-
if ($item->getProduct() instanceof Mage_Catalog_Model_Product) $process['cart.items'][$item->getId()] = $item;
|
179 |
-
}
|
180 |
-
|
181 |
-
$process_result = $this->_process($process);
|
182 |
-
|
183 |
-
return $process['result'];
|
184 |
-
}
|
185 |
-
|
186 |
-
|
187 |
-
public function getAllowedMethods() {
|
188 |
-
$process = array();
|
189 |
-
$config = $this->_getConfig();
|
190 |
-
$allowed_methods = array();
|
191 |
-
if (count($config)>0) {
|
192 |
-
foreach ($config as $row) $allowed_methods[$row['*code']] = isset($row['label']) ? $row['label']['value'] : 'No label';
|
193 |
-
}
|
194 |
-
return $allowed_methods;
|
195 |
-
}
|
196 |
-
|
197 |
-
public function isTrackingAvailable() {
|
198 |
-
return true;
|
199 |
-
}
|
200 |
-
|
201 |
-
public function getTrackingInfo($tracking_number) {
|
202 |
-
$tracking_url = Mage::helper('chronorelais')->getConfigurationTrackingViewUrl();
|
203 |
-
$parts = explode(':',$tracking_number);
|
204 |
-
if (count($parts)>=2) {
|
205 |
-
$tracking_number = $parts[1];
|
206 |
-
|
207 |
-
$process = array();
|
208 |
-
$config = $this->_getConfig();
|
209 |
-
|
210 |
-
if (isset($config[$parts[0]]['tracking_url'])) {
|
211 |
-
$row = $config[$parts[0]];
|
212 |
-
$tmp_tracking_url = $this->_helper->getRowProperty($row,'tracking_url');
|
213 |
-
if (isset($tmp_tracking_url)) $tracking_url = $tmp_tracking_url;
|
214 |
-
}
|
215 |
-
}
|
216 |
-
|
217 |
-
$tracking_status = Mage::getModel('shipping/tracking_result_status')
|
218 |
-
->setCarrier($this->_code)
|
219 |
-
->setCarrierTitle($this->__getConfigData('title'))
|
220 |
-
->setTracking($tracking_number)
|
221 |
-
->addData(
|
222 |
-
array(
|
223 |
-
'status'=>'<a target="_blank" href="'.str_replace('{tracking_number}',$tracking_number,$tracking_url).'">'.__('track the package').'</a>'
|
224 |
-
)
|
225 |
-
)
|
226 |
-
;
|
227 |
-
$tracking_result = Mage::getModel('shipping/tracking_result')
|
228 |
-
->append($tracking_status)
|
229 |
-
;
|
230 |
-
|
231 |
-
if ($trackings = $tracking_result->getAllTrackings()) return $trackings[0];
|
232 |
-
return false;
|
233 |
-
}
|
234 |
-
|
235 |
-
|
236 |
-
/***************************************************************************************************************************/
|
237 |
-
|
238 |
-
protected function _process(&$process) {
|
239 |
-
$store = Mage::app()->getStore($process['data']['store.id']);
|
240 |
-
$mage_config = Mage::getConfig();
|
241 |
-
$timestamp = time();
|
242 |
-
$customer_group_id = Mage::getSingleton('customer/session')->getCustomerGroupId();
|
243 |
-
// Pour les commandes depuis Adminhtml
|
244 |
-
if ($customer_group_id==0) {
|
245 |
-
$customer_group_id2 = Mage::getSingleton('adminhtml/session_quote')->getQuote()->getCustomerGroupId();
|
246 |
-
if (isset($customer_group_id2)) $customer_group_id = $customer_group_id2;
|
247 |
-
}
|
248 |
-
|
249 |
-
$customer_group_code = Mage::getSingleton('customer/group')->load($customer_group_id)->getData('customer_group_code');
|
250 |
-
$process['data'] = array_merge($process['data'],array(
|
251 |
-
'customer.group.id' => $customer_group_id,
|
252 |
-
'customer.group.code' => $customer_group_code,
|
253 |
-
'destination.country.name' => $this->__getCountryName($process['data']['destination.country.code']),
|
254 |
-
'origin.country.name' => $this->__getCountryName($process['data']['origin.country.code']),
|
255 |
-
'cart.weight.unit' => Mage::getStoreConfig('chronorelais/shipping/weight_unit'),
|
256 |
-
'store.code' => $store->getCode(),
|
257 |
-
'store.name' => $store->getConfig('general/store_information/name'),
|
258 |
-
'store.address' => $store->getConfig('general/store_information/address'),
|
259 |
-
'store.phone' => $store->getConfig('general/store_information/phone'),
|
260 |
-
'date.timestamp' => $timestamp,
|
261 |
-
'date.year' => (int)date('Y',$timestamp),
|
262 |
-
'date.month' => (int)date('m',$timestamp),
|
263 |
-
'date.day' => (int)date('d',$timestamp),
|
264 |
-
'date.hour' => (int)date('H',$timestamp),
|
265 |
-
'date.minute' => (int)date('i',$timestamp),
|
266 |
-
'date.second' => (int)date('s',$timestamp),
|
267 |
-
'module.version' => (string)$mage_config->getNode('modules/Chronopost_Chronorelais/version'),
|
268 |
-
));
|
269 |
-
|
270 |
-
foreach ($process['cart.items'] as $id => $item) {
|
271 |
-
if ($item->getProduct()->getTypeId()!='configurable') {
|
272 |
-
$parent_item_id = $item->getParentItemId();
|
273 |
-
$process['products'][] = new OCS_Magento_Product($item, isset($process['cart.items'][$parent_item_id]) ? $process['cart.items'][$parent_item_id] : null);
|
274 |
-
}
|
275 |
-
}
|
276 |
-
|
277 |
-
if (!$process['data']['free_shipping']) {
|
278 |
-
foreach ($process['cart.items'] as $item) {
|
279 |
-
if ($item->getProduct() instanceof Mage_Catalog_Model_Product) {
|
280 |
-
if ($item->getFreeShipping()) $process['data']['free_shipping'] = true;
|
281 |
-
else {
|
282 |
-
$process['data']['free_shipping'] = false;
|
283 |
-
break;
|
284 |
-
}
|
285 |
-
}
|
286 |
-
}
|
287 |
-
}
|
288 |
-
|
289 |
-
$process['data']['cart.price_including_tax'] = $this->__getCartTaxAmount($process)+$process['data']['cart.price_excluding_tax'];
|
290 |
-
$process['stop_to_first_match'] = $this->__getConfigData('stop_to_first_match');
|
291 |
-
$process['config'] = $this->_getConfig();
|
292 |
-
$compression = $this->__getConfigData('auto_compression');
|
293 |
-
if ($compression=='compress') {
|
294 |
-
Mage::getConfig()->saveConfig('carriers/'.$this->_code.'/config',$this->_helper->formatConfig(true));
|
295 |
-
} else if ($compression=='uncompress') {
|
296 |
-
Mage::getConfig()->saveConfig('carriers/'.$this->_code.'/config',$this->_helper->formatConfig(false));
|
297 |
-
}
|
298 |
-
|
299 |
-
$this->_helper->debug = (int)(isset($_GET['debug']) ? $_GET['debug'] : $this->__getConfigData('debug'));
|
300 |
-
$http_request = Mage::app()->getFrontController()->getRequest();
|
301 |
-
$this->_helper->debug = $this->_helper->debug && $http_request->getRouteName()=='checkout' && $http_request->getControllerName()=='cart';
|
302 |
-
if ($this->_helper->debug) $this->_helper->setDebugHeader($process);
|
303 |
-
|
304 |
-
$value_found = false;
|
305 |
-
$process_continue = true;
|
306 |
-
|
307 |
-
//Set error messages if not any matching
|
308 |
-
/*$errorMsg = '';
|
309 |
-
$defaultErrorMsg = Mage::helper('shipping')->__('The shipping module is not available.');
|
310 |
-
$configErrorMsg = $this->__getConfigData('specificerrmsg');
|
311 |
-
$configErrorMsg = ($configErrorMsg ? $configErrorMsg : $defaultErrorMsg);*/
|
312 |
-
$freeShippingEnable = $this->__getConfigData('free_shipping_enable');
|
313 |
-
$freeShippingSubtotal = $this->__getConfigData('free_shipping_subtotal');
|
314 |
-
$applicationFee = $this->__getConfigData('application_fee');
|
315 |
-
$handlingFee = $this->__getConfigData('handling_fee');
|
316 |
-
|
317 |
-
/* Check weight limit with cart weight*/
|
318 |
-
$weight_limit = $this->__getConfigData('weight_limit');
|
319 |
-
if($process['data']['cart.weight']>$weight_limit) {
|
320 |
-
$value_found = false;
|
321 |
-
$process_continue = false;
|
322 |
-
}
|
323 |
-
|
324 |
-
if($process_continue) {
|
325 |
-
foreach ($process['config'] as $row) {
|
326 |
-
$result = $this->_helper->processRow($process,$row);
|
327 |
-
$this->_addMessages($this->_helper->getMessages());
|
328 |
-
if ($result->success) {
|
329 |
-
$value_found = true;
|
330 |
-
$fees = $result->result;
|
331 |
-
if($applicationFee) { $fees += $applicationFee; }
|
332 |
-
if($handlingFee) { $fees += $handlingFee; }
|
333 |
-
if($freeShippingEnable && ($freeShippingSubtotal<=$process['data']['cart.price_excluding_tax'])) {
|
334 |
-
$fees = 0;
|
335 |
-
}
|
336 |
-
$this->__appendMethod($process,$row,$fees);
|
337 |
-
if ($process['stop_to_first_match']) break;
|
338 |
-
}
|
339 |
-
}
|
340 |
-
}
|
341 |
-
|
342 |
-
$this->_helper->printDebug();
|
343 |
-
|
344 |
-
//$this->_appendErrors($process,$this->_messages);
|
345 |
-
//if (!$value_found) $this->__appendError($process,$this->__($configErrorMsg));
|
346 |
-
}
|
347 |
-
|
348 |
-
protected function _getConfig() {
|
349 |
-
if (!isset($this->_config)) {
|
350 |
-
$this->_helper = new ChronorelaisShippingHelper($this->__getConfigData('config'));
|
351 |
-
$this->_config = $this->_helper->getConfig();
|
352 |
-
$this->_addMessages($this->_helper->getMessages());
|
353 |
-
}
|
354 |
-
return $this->_config;
|
355 |
-
}
|
356 |
-
|
357 |
-
protected function _getMethodText($process, $row, $property) {
|
358 |
-
if (!isset($row[$property])) return '';
|
359 |
-
|
360 |
-
$output = '';
|
361 |
-
/*$i = 0;
|
362 |
-
foreach ($process['request']->_data as $key => $data) {
|
363 |
-
if ($i>12) $output .= $key.' => '.$data.'<br/>';
|
364 |
-
$i++;
|
365 |
-
}*/
|
366 |
-
|
367 |
-
return $output . ' '.$this->_helper->evalInput($process,$row,$property,str_replace(
|
368 |
-
array('{cart.weight}','{cart.price_including_tax}','{cart.price_excluding_tax}'),
|
369 |
-
array(
|
370 |
-
$process['data']['cart.weight'].$process['data']['cart.weight.unit'],
|
371 |
-
$this->__formatPrice($process['data']['cart.price_including_tax']),
|
372 |
-
$this->__formatPrice($process['data']['cart.price_excluding_tax'])
|
373 |
-
),
|
374 |
-
$this->_helper->getRowProperty($row,$property)
|
375 |
-
));
|
376 |
-
}
|
377 |
-
|
378 |
-
protected function _addMessages($messages) {
|
379 |
-
if (!is_array($messages)) $messages = array($messages);
|
380 |
-
if (!is_array($this->_messages)) $this->_messages = $messages;
|
381 |
-
else $this->_messages = array_merge($this->_messages,$messages);
|
382 |
-
}
|
383 |
-
|
384 |
-
protected function _appendErrors(&$process, $messages) {
|
385 |
-
if (is_array($messages)) {
|
386 |
-
foreach ($messages as $message) {
|
387 |
-
$this->__appendError($process,$this->__($message));
|
388 |
-
}
|
389 |
-
}
|
390 |
-
}
|
391 |
-
|
392 |
-
/***************************************************************************************************************************/
|
393 |
-
|
394 |
-
protected function __getConfigData($key) {
|
395 |
-
return $this->getConfigData($key);
|
396 |
-
}
|
397 |
-
|
398 |
-
protected function __appendMethod(&$process, $row, $fees) {
|
399 |
-
$method = Mage::getModel('shipping/rate_result_method')
|
400 |
-
->setCarrier($this->_code)
|
401 |
-
->setCarrierTitle($this->__getConfigData('title'))
|
402 |
-
->setMethod($row['*code'])
|
403 |
-
->setMethodTitle($this->_getMethodText($process,$row,'label'))
|
404 |
-
->setMethodDescription($this->_getMethodText($process,$row,'description'))
|
405 |
-
->setMethodLogo($this->__getConfigData('logo_url'))
|
406 |
-
->setPrice($fees)
|
407 |
-
->setCost($fees)
|
408 |
-
;
|
409 |
-
$process['result']->append($method);
|
410 |
-
}
|
411 |
-
|
412 |
-
protected function __appendError(&$process, $message) {
|
413 |
-
if (isset($process['result'])) {
|
414 |
-
$error = Mage::getModel('shipping/rate_result_error')
|
415 |
-
->setCarrier($this->_code)
|
416 |
-
->setCarrierTitle($this->__getConfigData('title'))
|
417 |
-
->setErrorMessage($message)
|
418 |
-
;
|
419 |
-
$process['result']->append($error);
|
420 |
-
}
|
421 |
-
}
|
422 |
-
|
423 |
-
protected function __formatPrice($price) {
|
424 |
-
if (!isset($this->_core_helper)) $this->_core_helper = Mage::helper('core');
|
425 |
-
return $this->_core_helper->currency($price);
|
426 |
-
}
|
427 |
-
|
428 |
-
protected function __($message) {
|
429 |
-
$args = func_get_args();
|
430 |
-
$message = array_shift($args);
|
431 |
-
if ($message instanceof OCS_Message) {
|
432 |
-
$args = $message->args;
|
433 |
-
$message = $message->message;
|
434 |
-
}
|
435 |
-
|
436 |
-
$output = Mage::helper('shipping')->__($message);
|
437 |
-
if (count($args)==0) return $output;
|
438 |
-
|
439 |
-
if (!isset($this->_translate_inline)) $this->_translate_inline = Mage::getSingleton('core/translate')->getTranslateInline();
|
440 |
-
if ($this->_translate_inline) {
|
441 |
-
$parts = explode('}}{{',$output);
|
442 |
-
$parts[0] = vsprintf($parts[0],$args);
|
443 |
-
return implode('}}{{',$parts);
|
444 |
-
}
|
445 |
-
else return vsprintf($output,$args);
|
446 |
-
}
|
447 |
-
|
448 |
-
protected function __getCountryName($country_code) {
|
449 |
-
return Mage::getModel('directory/country')->load($country_code)->getName();
|
450 |
-
//return Mage::app()->getLocale()->getCountryTranslation($country_code);
|
451 |
-
/*if (!isset($this->_countries)) {
|
452 |
-
// deprecated
|
453 |
-
//$this->_countries = Mage::getModel('core/locale')->getLocale()->getCountryTranslationList();
|
454 |
-
$this->_countries = Mage::getModel('core/locale')->getLocale()->getTranslationList('territory',null,2);
|
455 |
-
}
|
456 |
-
return isset($this->_countries[$country_code]) ? $this->_countries[$country_code] : $country_code;*/
|
457 |
-
}
|
458 |
-
|
459 |
-
/*
|
460 |
-
protected function __getCartTaxAmount($process) {
|
461 |
-
$tax_amount = 0;
|
462 |
-
|
463 |
-
foreach ($process['cart.items'] as $item) {
|
464 |
-
$tax_class_id = $item->getProduct()->getTaxClassId();
|
465 |
-
$request = Mage::getSingleton('tax/calculation')->getRateRequest();
|
466 |
-
$request->setProductClassId($tax_class_id);
|
467 |
-
$vat_rate = Mage::getSingleton('tax/calculation')->getRate($request);
|
468 |
-
$vat_rate = isset($rates[$tax_class_id]) ? $rates[$tax_class_id] : 0;
|
469 |
-
|
470 |
-
if ($vat_rate > 0) $vat_to_add = $item->getData('row_total_with_discount')*$vat_rate/100;
|
471 |
-
else $vat_to_add = $item->getData('tax_amount');
|
472 |
-
//echo $item->getProduct()->getName().', '.$item->getData('row_total_with_discount').', '.$vat_rate.', '.$vat_to_add.'<br />';
|
473 |
-
$tax_amount += $vat_to_add;
|
474 |
-
}
|
475 |
-
//echo 'tax:'.$tax_amount.'<br />';
|
476 |
-
return $tax_amount;
|
477 |
-
}
|
478 |
-
*/
|
479 |
-
|
480 |
-
protected function __getCartTaxAmount($process) {
|
481 |
-
$tax_amount = 0;
|
482 |
-
foreach ($process['cart.items'] as $item) {
|
483 |
-
$tax_amount += $item->getData('tax_amount');
|
484 |
-
}
|
485 |
-
return $tax_amount;
|
486 |
-
}
|
487 |
-
}
|
488 |
-
|
489 |
?>
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Magento Chronopost Chronorelais Module
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Chronopost
|
17 |
+
* @package Chronopost_Chronorelais
|
18 |
+
* @copyright Copyright (c) 2008-10 Owebia (http://www.owebia.com/)
|
19 |
+
* @author Antoine Lemoine
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
// Pour g�rer les cas o� il y a eu compilation
|
24 |
+
if (file_exists(dirname(__FILE__).'/Chronopost_Chronorelais_includes_ChronorelaisShippingHelper.php')) include_once 'Chronopost_Chronorelais_includes_ChronorelaisShippingHelper.php';
|
25 |
+
else include_once Mage::getBaseDir('code').'/community/Chronopost/Chronorelais/includes/ChronorelaisShippingHelper.php';
|
26 |
+
|
27 |
+
|
28 |
+
|
29 |
+
class OCS_Magento_Product implements OCS_Product {
|
30 |
+
private $parent_cart_item;
|
31 |
+
private $cart_item;
|
32 |
+
private $cart_product;
|
33 |
+
private $loaded_product;
|
34 |
+
private $quantity;
|
35 |
+
|
36 |
+
public function OCS_Magento_Product($cart_item, $parent_cart_item) {
|
37 |
+
$this->cart_item = $cart_item;
|
38 |
+
$this->cart_product = $cart_item->getProduct();
|
39 |
+
$this->parent_cart_item = $parent_cart_item;
|
40 |
+
$this->quantity = isset($parent_cart_item) ? $parent_cart_item->getQty() : $cart_item->getQty();
|
41 |
+
}
|
42 |
+
|
43 |
+
public function getOption($option_name, $get_by_id=false) {
|
44 |
+
$value = null;
|
45 |
+
$product = $this->cart_product;
|
46 |
+
foreach ($product->getOptions() as $option) {
|
47 |
+
if ($option->getTitle()==$option_name) {
|
48 |
+
$custom_option = $product->getCustomOption('option_'.$option->getId());
|
49 |
+
if ($custom_option) {
|
50 |
+
$value = $custom_option->getValue();
|
51 |
+
if ($option->getType()=='drop_down' && !$get_by_id) {
|
52 |
+
$option_value = $option->getValueById($value);
|
53 |
+
if ($option_value) $value = $option_value->getTitle();
|
54 |
+
}
|
55 |
+
}
|
56 |
+
break;
|
57 |
+
}
|
58 |
+
}
|
59 |
+
return $value;
|
60 |
+
}
|
61 |
+
|
62 |
+
public function getAttribute($attribute_name, $get_by_id=false) {
|
63 |
+
$value = null;
|
64 |
+
$product = $this->_getLoadedProduct();
|
65 |
+
$attribute = $product->getResource()->getAttribute($attribute_name);
|
66 |
+
if ($attribute) {
|
67 |
+
$input_type = $attribute->getFrontend()->getInputType();
|
68 |
+
switch ($input_type) {
|
69 |
+
case 'select' :
|
70 |
+
$value = $get_by_id ? $product->getData($attribute_name) : $product->getAttributeText($attribute_name);
|
71 |
+
break;
|
72 |
+
default :
|
73 |
+
$value = $product->getData($attribute_name);
|
74 |
+
break;
|
75 |
+
}
|
76 |
+
}
|
77 |
+
return $value;
|
78 |
+
}
|
79 |
+
|
80 |
+
private function _getLoadedProduct() {
|
81 |
+
if (!isset($this->loaded_product)) $this->loaded_product = Mage::getModel('catalog/product')->load($this->cart_product->getId());
|
82 |
+
return $this->loaded_product;
|
83 |
+
}
|
84 |
+
|
85 |
+
public function getQuantity() {
|
86 |
+
return $this->quantity;
|
87 |
+
}
|
88 |
+
|
89 |
+
public function getName() {
|
90 |
+
return $this->cart_product->getName();
|
91 |
+
}
|
92 |
+
|
93 |
+
public function getSku() {
|
94 |
+
return $this->cart_product->getSku();
|
95 |
+
}
|
96 |
+
|
97 |
+
public function getStockData($key) {
|
98 |
+
$stock = $this->cart_product->getStockItem();
|
99 |
+
switch ($key) {
|
100 |
+
case 'is_in_stock':
|
101 |
+
return (bool)$stock->getIsInStock();
|
102 |
+
case 'quantity':
|
103 |
+
$quantity = $stock->getQty();
|
104 |
+
return $stock->getIsQtyDecimal() ? (float)$quantity : (int)$quantity;
|
105 |
+
}
|
106 |
+
return null;
|
107 |
+
}
|
108 |
+
}
|
109 |
+
|
110 |
+
abstract class Chronopost_Chronorelais_Model_Carrier_AbstractChronorelaisShipping
|
111 |
+
extends Mage_Shipping_Model_Carrier_Abstract
|
112 |
+
{
|
113 |
+
protected $_translate_inline;
|
114 |
+
protected $_result;
|
115 |
+
protected $_config;
|
116 |
+
protected $_countries;
|
117 |
+
protected $_helper;
|
118 |
+
protected $_messages;
|
119 |
+
|
120 |
+
/**
|
121 |
+
* Collect rates for this shipping method based on information in $request
|
122 |
+
*
|
123 |
+
* @param Mage_Shipping_Model_Rate_Request $data
|
124 |
+
* @return Mage_Shipping_Model_Rate_Result
|
125 |
+
*/
|
126 |
+
public function collectRates(Mage_Shipping_Model_Rate_Request $request) {
|
127 |
+
// skip if not enabled
|
128 |
+
if (!$this->__getConfigData('active')) return false;
|
129 |
+
|
130 |
+
/*foreach ($request->_data as $key => $data) {
|
131 |
+
echo $key.' => '.$data.'<br/>';
|
132 |
+
}*/
|
133 |
+
|
134 |
+
$process = array(
|
135 |
+
'request' => $request,
|
136 |
+
'result' => Mage::getModel('shipping/rate_result'),
|
137 |
+
'cart.items' => array(),
|
138 |
+
'products' => array(),
|
139 |
+
'data' => array(
|
140 |
+
'module.version' => null,
|
141 |
+
'carrier.code' => $this->_code,
|
142 |
+
'cart.price_excluding_tax' => $request->_data['package_value_with_discount'],
|
143 |
+
'cart.price_including_tax' => null,
|
144 |
+
'cart.weight' => $request->_data['package_weight'],
|
145 |
+
'cart.weight.unit' => null,
|
146 |
+
'cart.quantity' => $request->_data['package_qty'],
|
147 |
+
'destination.country.code' => $request->_data['dest_country_id'],
|
148 |
+
'destination.country.name' => null,
|
149 |
+
'destination.region.code' => $request->_data['dest_region_code'],
|
150 |
+
'destination.postcode' => $request->_data['dest_postcode'],
|
151 |
+
'origin.country.code' => $request->_data['country_id'],
|
152 |
+
'origin.country.name' => null,
|
153 |
+
'origin.region.code' => $request->_data['region_id'],
|
154 |
+
'origin.postcode' => $request->_data['postcode'],
|
155 |
+
'customer.group.id' => null,
|
156 |
+
'customer.group.code' => null,
|
157 |
+
'free_shipping' => $request->getFreeShipping(),
|
158 |
+
'store.id' => $request->_data['store_id'],
|
159 |
+
'store.code' => null,
|
160 |
+
'store.name' => null,
|
161 |
+
'store.address' => null,
|
162 |
+
'store.phone' => null,
|
163 |
+
'date.timestamp' => null,
|
164 |
+
'date.year' => null,
|
165 |
+
'date.month' => null,
|
166 |
+
'date.day' => null,
|
167 |
+
'date.hour' => null,
|
168 |
+
'date.minute' => null,
|
169 |
+
'date.second' => null,
|
170 |
+
),
|
171 |
+
'stop_to_first_match' => null,
|
172 |
+
'config' => null,
|
173 |
+
);
|
174 |
+
|
175 |
+
$items = $request->getAllItems();
|
176 |
+
for ($i=0, $n=count($items); $i<$n; $i++) {
|
177 |
+
$item = $items[$i];
|
178 |
+
if ($item->getProduct() instanceof Mage_Catalog_Model_Product) $process['cart.items'][$item->getId()] = $item;
|
179 |
+
}
|
180 |
+
|
181 |
+
$process_result = $this->_process($process);
|
182 |
+
|
183 |
+
return $process['result'];
|
184 |
+
}
|
185 |
+
|
186 |
+
|
187 |
+
public function getAllowedMethods() {
|
188 |
+
$process = array();
|
189 |
+
$config = $this->_getConfig();
|
190 |
+
$allowed_methods = array();
|
191 |
+
if (count($config)>0) {
|
192 |
+
foreach ($config as $row) $allowed_methods[$row['*code']] = isset($row['label']) ? $row['label']['value'] : 'No label';
|
193 |
+
}
|
194 |
+
return $allowed_methods;
|
195 |
+
}
|
196 |
+
|
197 |
+
public function isTrackingAvailable() {
|
198 |
+
return true;
|
199 |
+
}
|
200 |
+
|
201 |
+
public function getTrackingInfo($tracking_number) {
|
202 |
+
$tracking_url = Mage::helper('chronorelais')->getConfigurationTrackingViewUrl();
|
203 |
+
$parts = explode(':',$tracking_number);
|
204 |
+
if (count($parts)>=2) {
|
205 |
+
$tracking_number = $parts[1];
|
206 |
+
|
207 |
+
$process = array();
|
208 |
+
$config = $this->_getConfig();
|
209 |
+
|
210 |
+
if (isset($config[$parts[0]]['tracking_url'])) {
|
211 |
+
$row = $config[$parts[0]];
|
212 |
+
$tmp_tracking_url = $this->_helper->getRowProperty($row,'tracking_url');
|
213 |
+
if (isset($tmp_tracking_url)) $tracking_url = $tmp_tracking_url;
|
214 |
+
}
|
215 |
+
}
|
216 |
+
|
217 |
+
$tracking_status = Mage::getModel('shipping/tracking_result_status')
|
218 |
+
->setCarrier($this->_code)
|
219 |
+
->setCarrierTitle($this->__getConfigData('title'))
|
220 |
+
->setTracking($tracking_number)
|
221 |
+
->addData(
|
222 |
+
array(
|
223 |
+
'status'=>'<a target="_blank" href="'.str_replace('{tracking_number}',$tracking_number,$tracking_url).'">'.__('track the package').'</a>'
|
224 |
+
)
|
225 |
+
)
|
226 |
+
;
|
227 |
+
$tracking_result = Mage::getModel('shipping/tracking_result')
|
228 |
+
->append($tracking_status)
|
229 |
+
;
|
230 |
+
|
231 |
+
if ($trackings = $tracking_result->getAllTrackings()) return $trackings[0];
|
232 |
+
return false;
|
233 |
+
}
|
234 |
+
|
235 |
+
|
236 |
+
/***************************************************************************************************************************/
|
237 |
+
|
238 |
+
protected function _process(&$process) {
|
239 |
+
$store = Mage::app()->getStore($process['data']['store.id']);
|
240 |
+
$mage_config = Mage::getConfig();
|
241 |
+
$timestamp = time();
|
242 |
+
$customer_group_id = Mage::getSingleton('customer/session')->getCustomerGroupId();
|
243 |
+
// Pour les commandes depuis Adminhtml
|
244 |
+
if ($customer_group_id==0) {
|
245 |
+
$customer_group_id2 = Mage::getSingleton('adminhtml/session_quote')->getQuote()->getCustomerGroupId();
|
246 |
+
if (isset($customer_group_id2)) $customer_group_id = $customer_group_id2;
|
247 |
+
}
|
248 |
+
|
249 |
+
$customer_group_code = Mage::getSingleton('customer/group')->load($customer_group_id)->getData('customer_group_code');
|
250 |
+
$process['data'] = array_merge($process['data'],array(
|
251 |
+
'customer.group.id' => $customer_group_id,
|
252 |
+
'customer.group.code' => $customer_group_code,
|
253 |
+
'destination.country.name' => $this->__getCountryName($process['data']['destination.country.code']),
|
254 |
+
'origin.country.name' => $this->__getCountryName($process['data']['origin.country.code']),
|
255 |
+
'cart.weight.unit' => Mage::getStoreConfig('chronorelais/shipping/weight_unit'),
|
256 |
+
'store.code' => $store->getCode(),
|
257 |
+
'store.name' => $store->getConfig('general/store_information/name'),
|
258 |
+
'store.address' => $store->getConfig('general/store_information/address'),
|
259 |
+
'store.phone' => $store->getConfig('general/store_information/phone'),
|
260 |
+
'date.timestamp' => $timestamp,
|
261 |
+
'date.year' => (int)date('Y',$timestamp),
|
262 |
+
'date.month' => (int)date('m',$timestamp),
|
263 |
+
'date.day' => (int)date('d',$timestamp),
|
264 |
+
'date.hour' => (int)date('H',$timestamp),
|
265 |
+
'date.minute' => (int)date('i',$timestamp),
|
266 |
+
'date.second' => (int)date('s',$timestamp),
|
267 |
+
'module.version' => (string)$mage_config->getNode('modules/Chronopost_Chronorelais/version'),
|
268 |
+
));
|
269 |
+
|
270 |
+
foreach ($process['cart.items'] as $id => $item) {
|
271 |
+
if ($item->getProduct()->getTypeId()!='configurable') {
|
272 |
+
$parent_item_id = $item->getParentItemId();
|
273 |
+
$process['products'][] = new OCS_Magento_Product($item, isset($process['cart.items'][$parent_item_id]) ? $process['cart.items'][$parent_item_id] : null);
|
274 |
+
}
|
275 |
+
}
|
276 |
+
|
277 |
+
if (!$process['data']['free_shipping']) {
|
278 |
+
foreach ($process['cart.items'] as $item) {
|
279 |
+
if ($item->getProduct() instanceof Mage_Catalog_Model_Product) {
|
280 |
+
if ($item->getFreeShipping()) $process['data']['free_shipping'] = true;
|
281 |
+
else {
|
282 |
+
$process['data']['free_shipping'] = false;
|
283 |
+
break;
|
284 |
+
}
|
285 |
+
}
|
286 |
+
}
|
287 |
+
}
|
288 |
+
|
289 |
+
$process['data']['cart.price_including_tax'] = $this->__getCartTaxAmount($process)+$process['data']['cart.price_excluding_tax'];
|
290 |
+
$process['stop_to_first_match'] = $this->__getConfigData('stop_to_first_match');
|
291 |
+
$process['config'] = $this->_getConfig();
|
292 |
+
$compression = $this->__getConfigData('auto_compression');
|
293 |
+
if ($compression=='compress') {
|
294 |
+
Mage::getConfig()->saveConfig('carriers/'.$this->_code.'/config',$this->_helper->formatConfig(true));
|
295 |
+
} else if ($compression=='uncompress') {
|
296 |
+
Mage::getConfig()->saveConfig('carriers/'.$this->_code.'/config',$this->_helper->formatConfig(false));
|
297 |
+
}
|
298 |
+
|
299 |
+
$this->_helper->debug = (int)(isset($_GET['debug']) ? $_GET['debug'] : $this->__getConfigData('debug'));
|
300 |
+
$http_request = Mage::app()->getFrontController()->getRequest();
|
301 |
+
$this->_helper->debug = $this->_helper->debug && $http_request->getRouteName()=='checkout' && $http_request->getControllerName()=='cart';
|
302 |
+
if ($this->_helper->debug) $this->_helper->setDebugHeader($process);
|
303 |
+
|
304 |
+
$value_found = false;
|
305 |
+
$process_continue = true;
|
306 |
+
|
307 |
+
//Set error messages if not any matching
|
308 |
+
/*$errorMsg = '';
|
309 |
+
$defaultErrorMsg = Mage::helper('shipping')->__('The shipping module is not available.');
|
310 |
+
$configErrorMsg = $this->__getConfigData('specificerrmsg');
|
311 |
+
$configErrorMsg = ($configErrorMsg ? $configErrorMsg : $defaultErrorMsg);*/
|
312 |
+
$freeShippingEnable = $this->__getConfigData('free_shipping_enable');
|
313 |
+
$freeShippingSubtotal = $this->__getConfigData('free_shipping_subtotal');
|
314 |
+
$applicationFee = $this->__getConfigData('application_fee');
|
315 |
+
$handlingFee = $this->__getConfigData('handling_fee');
|
316 |
+
|
317 |
+
/* Check weight limit with cart weight*/
|
318 |
+
$weight_limit = $this->__getConfigData('weight_limit');
|
319 |
+
if($process['data']['cart.weight']>$weight_limit) {
|
320 |
+
$value_found = false;
|
321 |
+
$process_continue = false;
|
322 |
+
}
|
323 |
+
|
324 |
+
if($process_continue) {
|
325 |
+
foreach ($process['config'] as $row) {
|
326 |
+
$result = $this->_helper->processRow($process,$row);
|
327 |
+
$this->_addMessages($this->_helper->getMessages());
|
328 |
+
if ($result->success) {
|
329 |
+
$value_found = true;
|
330 |
+
$fees = $result->result;
|
331 |
+
if($applicationFee) { $fees += $applicationFee; }
|
332 |
+
if($handlingFee) { $fees += $handlingFee; }
|
333 |
+
if($freeShippingEnable && ($freeShippingSubtotal<=$process['data']['cart.price_excluding_tax'])) {
|
334 |
+
$fees = 0;
|
335 |
+
}
|
336 |
+
$this->__appendMethod($process,$row,$fees);
|
337 |
+
if ($process['stop_to_first_match']) break;
|
338 |
+
}
|
339 |
+
}
|
340 |
+
}
|
341 |
+
|
342 |
+
$this->_helper->printDebug();
|
343 |
+
|
344 |
+
//$this->_appendErrors($process,$this->_messages);
|
345 |
+
//if (!$value_found) $this->__appendError($process,$this->__($configErrorMsg));
|
346 |
+
}
|
347 |
+
|
348 |
+
protected function _getConfig() {
|
349 |
+
if (!isset($this->_config)) {
|
350 |
+
$this->_helper = new ChronorelaisShippingHelper($this->__getConfigData('config'));
|
351 |
+
$this->_config = $this->_helper->getConfig();
|
352 |
+
$this->_addMessages($this->_helper->getMessages());
|
353 |
+
}
|
354 |
+
return $this->_config;
|
355 |
+
}
|
356 |
+
|
357 |
+
protected function _getMethodText($process, $row, $property) {
|
358 |
+
if (!isset($row[$property])) return '';
|
359 |
+
|
360 |
+
$output = '';
|
361 |
+
/*$i = 0;
|
362 |
+
foreach ($process['request']->_data as $key => $data) {
|
363 |
+
if ($i>12) $output .= $key.' => '.$data.'<br/>';
|
364 |
+
$i++;
|
365 |
+
}*/
|
366 |
+
|
367 |
+
return $output . ' '.$this->_helper->evalInput($process,$row,$property,str_replace(
|
368 |
+
array('{cart.weight}','{cart.price_including_tax}','{cart.price_excluding_tax}'),
|
369 |
+
array(
|
370 |
+
$process['data']['cart.weight'].$process['data']['cart.weight.unit'],
|
371 |
+
$this->__formatPrice($process['data']['cart.price_including_tax']),
|
372 |
+
$this->__formatPrice($process['data']['cart.price_excluding_tax'])
|
373 |
+
),
|
374 |
+
$this->_helper->getRowProperty($row,$property)
|
375 |
+
));
|
376 |
+
}
|
377 |
+
|
378 |
+
protected function _addMessages($messages) {
|
379 |
+
if (!is_array($messages)) $messages = array($messages);
|
380 |
+
if (!is_array($this->_messages)) $this->_messages = $messages;
|
381 |
+
else $this->_messages = array_merge($this->_messages,$messages);
|
382 |
+
}
|
383 |
+
|
384 |
+
protected function _appendErrors(&$process, $messages) {
|
385 |
+
if (is_array($messages)) {
|
386 |
+
foreach ($messages as $message) {
|
387 |
+
$this->__appendError($process,$this->__($message));
|
388 |
+
}
|
389 |
+
}
|
390 |
+
}
|
391 |
+
|
392 |
+
/***************************************************************************************************************************/
|
393 |
+
|
394 |
+
protected function __getConfigData($key) {
|
395 |
+
return $this->getConfigData($key);
|
396 |
+
}
|
397 |
+
|
398 |
+
protected function __appendMethod(&$process, $row, $fees) {
|
399 |
+
$method = Mage::getModel('shipping/rate_result_method')
|
400 |
+
->setCarrier($this->_code)
|
401 |
+
->setCarrierTitle($this->__getConfigData('title'))
|
402 |
+
->setMethod($row['*code'])
|
403 |
+
->setMethodTitle($this->_getMethodText($process,$row,'label'))
|
404 |
+
->setMethodDescription($this->_getMethodText($process,$row,'description'))
|
405 |
+
->setMethodLogo($this->__getConfigData('logo_url'))
|
406 |
+
->setPrice($fees)
|
407 |
+
->setCost($fees)
|
408 |
+
;
|
409 |
+
$process['result']->append($method);
|
410 |
+
}
|
411 |
+
|
412 |
+
protected function __appendError(&$process, $message) {
|
413 |
+
if (isset($process['result'])) {
|
414 |
+
$error = Mage::getModel('shipping/rate_result_error')
|
415 |
+
->setCarrier($this->_code)
|
416 |
+
->setCarrierTitle($this->__getConfigData('title'))
|
417 |
+
->setErrorMessage($message)
|
418 |
+
;
|
419 |
+
$process['result']->append($error);
|
420 |
+
}
|
421 |
+
}
|
422 |
+
|
423 |
+
protected function __formatPrice($price) {
|
424 |
+
if (!isset($this->_core_helper)) $this->_core_helper = Mage::helper('core');
|
425 |
+
return $this->_core_helper->currency($price);
|
426 |
+
}
|
427 |
+
|
428 |
+
protected function __($message) {
|
429 |
+
$args = func_get_args();
|
430 |
+
$message = array_shift($args);
|
431 |
+
if ($message instanceof OCS_Message) {
|
432 |
+
$args = $message->args;
|
433 |
+
$message = $message->message;
|
434 |
+
}
|
435 |
+
|
436 |
+
$output = Mage::helper('shipping')->__($message);
|
437 |
+
if (count($args)==0) return $output;
|
438 |
+
|
439 |
+
if (!isset($this->_translate_inline)) $this->_translate_inline = Mage::getSingleton('core/translate')->getTranslateInline();
|
440 |
+
if ($this->_translate_inline) {
|
441 |
+
$parts = explode('}}{{',$output);
|
442 |
+
$parts[0] = vsprintf($parts[0],$args);
|
443 |
+
return implode('}}{{',$parts);
|
444 |
+
}
|
445 |
+
else return vsprintf($output,$args);
|
446 |
+
}
|
447 |
+
|
448 |
+
protected function __getCountryName($country_code) {
|
449 |
+
return Mage::getModel('directory/country')->load($country_code)->getName();
|
450 |
+
//return Mage::app()->getLocale()->getCountryTranslation($country_code);
|
451 |
+
/*if (!isset($this->_countries)) {
|
452 |
+
// deprecated
|
453 |
+
//$this->_countries = Mage::getModel('core/locale')->getLocale()->getCountryTranslationList();
|
454 |
+
$this->_countries = Mage::getModel('core/locale')->getLocale()->getTranslationList('territory',null,2);
|
455 |
+
}
|
456 |
+
return isset($this->_countries[$country_code]) ? $this->_countries[$country_code] : $country_code;*/
|
457 |
+
}
|
458 |
+
|
459 |
+
/*
|
460 |
+
protected function __getCartTaxAmount($process) {
|
461 |
+
$tax_amount = 0;
|
462 |
+
|
463 |
+
foreach ($process['cart.items'] as $item) {
|
464 |
+
$tax_class_id = $item->getProduct()->getTaxClassId();
|
465 |
+
$request = Mage::getSingleton('tax/calculation')->getRateRequest();
|
466 |
+
$request->setProductClassId($tax_class_id);
|
467 |
+
$vat_rate = Mage::getSingleton('tax/calculation')->getRate($request);
|
468 |
+
$vat_rate = isset($rates[$tax_class_id]) ? $rates[$tax_class_id] : 0;
|
469 |
+
|
470 |
+
if ($vat_rate > 0) $vat_to_add = $item->getData('row_total_with_discount')*$vat_rate/100;
|
471 |
+
else $vat_to_add = $item->getData('tax_amount');
|
472 |
+
//echo $item->getProduct()->getName().', '.$item->getData('row_total_with_discount').', '.$vat_rate.', '.$vat_to_add.'<br />';
|
473 |
+
$tax_amount += $vat_to_add;
|
474 |
+
}
|
475 |
+
//echo 'tax:'.$tax_amount.'<br />';
|
476 |
+
return $tax_amount;
|
477 |
+
}
|
478 |
+
*/
|
479 |
+
|
480 |
+
protected function __getCartTaxAmount($process) {
|
481 |
+
$tax_amount = 0;
|
482 |
+
foreach ($process['cart.items'] as $item) {
|
483 |
+
$tax_amount += $item->getData('tax_amount');
|
484 |
+
}
|
485 |
+
return $tax_amount;
|
486 |
+
}
|
487 |
+
}
|
488 |
+
|
489 |
?>
|
app/code/community/Chronopost/Chronorelais/Model/Carrier/Chronoexpress.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Model_Carrier_Chronoexpress extends Chronopost_Chronorelais_Model_Carrier_AbstractChronorelaisShipping
|
3 |
-
{
|
4 |
-
protected $_code = 'chronoexpress';
|
5 |
-
|
6 |
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Model_Carrier_Chronoexpress extends Chronopost_Chronorelais_Model_Carrier_AbstractChronorelaisShipping
|
3 |
+
{
|
4 |
+
protected $_code = 'chronoexpress';
|
5 |
+
|
6 |
}
|
app/code/community/Chronopost/Chronorelais/Model/Carrier/Chronopost.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Model_Carrier_Chronopost extends Chronopost_Chronorelais_Model_Carrier_AbstractChronorelaisShipping
|
3 |
-
{
|
4 |
-
protected $_code = 'chronopost';
|
5 |
-
|
6 |
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Model_Carrier_Chronopost extends Chronopost_Chronorelais_Model_Carrier_AbstractChronorelaisShipping
|
3 |
+
{
|
4 |
+
protected $_code = 'chronopost';
|
5 |
+
|
6 |
}
|
app/code/community/Chronopost/Chronorelais/Model/Carrier/Chronorelais.php
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Model_Carrier_Chronorelais extends Chronopost_Chronorelais_Model_Carrier_AbstractChronorelaisShipping
|
3 |
-
{
|
4 |
-
protected $_code = 'chronorelais';
|
5 |
-
|
6 |
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Model_Carrier_Chronorelais extends Chronopost_Chronorelais_Model_Carrier_AbstractChronorelaisShipping
|
3 |
+
{
|
4 |
+
protected $_code = 'chronorelais';
|
5 |
+
|
6 |
}
|
app/code/community/Chronopost/Chronorelais/Model/Config/Source/Civility.php
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Model_Config_Source_Civility
|
3 |
-
{
|
4 |
-
public function toOptionArray()
|
5 |
-
{
|
6 |
-
return array(
|
7 |
-
array('value'=>'E', 'label'=>Mage::helper('chronorelais')->__('Madame')),
|
8 |
-
array('value'=>'L', 'label'=>Mage::helper('chronorelais')->__('Mademoiselle')),
|
9 |
-
array('value'=>'M', 'label'=>Mage::helper('chronorelais')->__('Monsieur'))
|
10 |
-
);
|
11 |
-
}
|
12 |
-
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Model_Config_Source_Civility
|
3 |
+
{
|
4 |
+
public function toOptionArray()
|
5 |
+
{
|
6 |
+
return array(
|
7 |
+
array('value'=>'E', 'label'=>Mage::helper('chronorelais')->__('Madame')),
|
8 |
+
array('value'=>'L', 'label'=>Mage::helper('chronorelais')->__('Mademoiselle')),
|
9 |
+
array('value'=>'M', 'label'=>Mage::helper('chronorelais')->__('Monsieur'))
|
10 |
+
);
|
11 |
+
}
|
12 |
+
}
|
app/code/community/Chronopost/Chronorelais/Model/Config/Source/EndOfLineCharacter.php
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Model_Config_Source_EndOfLineCharacter
|
3 |
-
{
|
4 |
-
public function toOptionArray()
|
5 |
-
{
|
6 |
-
return array(
|
7 |
-
array('value'=>'lf', 'label'=>Mage::helper('chronorelais')->__('LF')),
|
8 |
-
array('value'=>'cr', 'label'=>Mage::helper('chronorelais')->__('CR')),
|
9 |
-
array('value'=>'crlf', 'label'=>Mage::helper('chronorelais')->__('CR+LF'))
|
10 |
-
);
|
11 |
-
}
|
12 |
-
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Model_Config_Source_EndOfLineCharacter
|
3 |
+
{
|
4 |
+
public function toOptionArray()
|
5 |
+
{
|
6 |
+
return array(
|
7 |
+
array('value'=>'lf', 'label'=>Mage::helper('chronorelais')->__('LF')),
|
8 |
+
array('value'=>'cr', 'label'=>Mage::helper('chronorelais')->__('CR')),
|
9 |
+
array('value'=>'crlf', 'label'=>Mage::helper('chronorelais')->__('CR+LF'))
|
10 |
+
);
|
11 |
+
}
|
12 |
+
}
|
app/code/community/Chronopost/Chronorelais/Model/Config/Source/FieldDelimiter.php
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Model_Config_Source_FieldDelimiter
|
3 |
-
{
|
4 |
-
public function toOptionArray()
|
5 |
-
{
|
6 |
-
return array(
|
7 |
-
array('value'=>'none', 'label'=>Mage::helper('chronorelais')->__('None')),
|
8 |
-
array('value'=>'simple_quote', 'label'=>Mage::helper('chronorelais')->__('Simple Quote')),
|
9 |
-
array('value'=>'double_quotes', 'label'=>Mage::helper('chronorelais')->__('Double Quotes'))
|
10 |
-
);
|
11 |
-
}
|
12 |
-
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Model_Config_Source_FieldDelimiter
|
3 |
+
{
|
4 |
+
public function toOptionArray()
|
5 |
+
{
|
6 |
+
return array(
|
7 |
+
array('value'=>'none', 'label'=>Mage::helper('chronorelais')->__('None')),
|
8 |
+
array('value'=>'simple_quote', 'label'=>Mage::helper('chronorelais')->__('Simple Quote')),
|
9 |
+
array('value'=>'double_quotes', 'label'=>Mage::helper('chronorelais')->__('Double Quotes'))
|
10 |
+
);
|
11 |
+
}
|
12 |
+
}
|
app/code/community/Chronopost/Chronorelais/Model/Config/Source/FieldSeparator.php
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Model_Config_Source_FieldSeparator
|
3 |
-
{
|
4 |
-
public function toOptionArray()
|
5 |
-
{
|
6 |
-
return array(
|
7 |
-
array('value'=>';', 'label'=>Mage::helper('chronorelais')->__('Semicolon')),
|
8 |
-
array('value'=>',', 'label'=>Mage::helper('chronorelais')->__('Comma'))
|
9 |
-
);
|
10 |
-
}
|
11 |
-
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Model_Config_Source_FieldSeparator
|
3 |
+
{
|
4 |
+
public function toOptionArray()
|
5 |
+
{
|
6 |
+
return array(
|
7 |
+
array('value'=>';', 'label'=>Mage::helper('chronorelais')->__('Semicolon')),
|
8 |
+
array('value'=>',', 'label'=>Mage::helper('chronorelais')->__('Comma'))
|
9 |
+
);
|
10 |
+
}
|
11 |
+
}
|
app/code/community/Chronopost/Chronorelais/Model/Config/Source/FileCharset.php
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Model_Config_Source_FileCharset
|
3 |
-
{
|
4 |
-
public function toOptionArray()
|
5 |
-
{
|
6 |
-
return array(
|
7 |
-
array('value'=>'ISO-8859-1', 'label'=>Mage::helper('chronorelais')->__('ISO-8859-1')),
|
8 |
-
array('value'=>'UTF-8', 'label'=>Mage::helper('chronorelais')->__('UTF-8')),
|
9 |
-
array('value'=>'ASCII-7', 'label'=>Mage::helper('chronorelais')->__('ASCII-7 Bits'))
|
10 |
-
);
|
11 |
-
}
|
12 |
-
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Model_Config_Source_FileCharset
|
3 |
+
{
|
4 |
+
public function toOptionArray()
|
5 |
+
{
|
6 |
+
return array(
|
7 |
+
array('value'=>'ISO-8859-1', 'label'=>Mage::helper('chronorelais')->__('ISO-8859-1')),
|
8 |
+
array('value'=>'UTF-8', 'label'=>Mage::helper('chronorelais')->__('UTF-8')),
|
9 |
+
array('value'=>'ASCII-7', 'label'=>Mage::helper('chronorelais')->__('ASCII-7 Bits'))
|
10 |
+
);
|
11 |
+
}
|
12 |
+
}
|
app/code/community/Chronopost/Chronorelais/Model/Config/Source/FileExtension.php
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Model_Config_Source_FileExtension
|
3 |
-
{
|
4 |
-
public function toOptionArray()
|
5 |
-
{
|
6 |
-
return array(
|
7 |
-
array('value'=>'.txt', 'label'=>Mage::helper('chronorelais')->__('.txt')),
|
8 |
-
array('value'=>'.csv', 'label'=>Mage::helper('chronorelais')->__('.csv')),
|
9 |
-
array('value'=>'.chr', 'label'=>Mage::helper('chronorelais')->__('.chr'))
|
10 |
-
);
|
11 |
-
}
|
12 |
-
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Model_Config_Source_FileExtension
|
3 |
+
{
|
4 |
+
public function toOptionArray()
|
5 |
+
{
|
6 |
+
return array(
|
7 |
+
array('value'=>'.txt', 'label'=>Mage::helper('chronorelais')->__('.txt')),
|
8 |
+
array('value'=>'.csv', 'label'=>Mage::helper('chronorelais')->__('.csv')),
|
9 |
+
array('value'=>'.chr', 'label'=>Mage::helper('chronorelais')->__('.chr'))
|
10 |
+
);
|
11 |
+
}
|
12 |
+
}
|
app/code/community/Chronopost/Chronorelais/Model/Config/Source/PrintMode.php
CHANGED
@@ -1,12 +1,12 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_Model_Config_Source_PrintMode
|
3 |
-
{
|
4 |
-
public function toOptionArray()
|
5 |
-
{
|
6 |
-
return array(
|
7 |
-
array('value'=>'PDF', 'label'=>Mage::helper('chronorelais')->__('Print PDF Laser with proof')),
|
8 |
-
array('value'=>'SPD', 'label'=>Mage::helper('chronorelais')->__('Print PDF laser without proof')),
|
9 |
-
array('value'=>'THE', 'label'=>Mage::helper('chronorelais')->__('Print PDF thermal'))
|
10 |
-
);
|
11 |
-
}
|
12 |
-
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_Model_Config_Source_PrintMode
|
3 |
+
{
|
4 |
+
public function toOptionArray()
|
5 |
+
{
|
6 |
+
return array(
|
7 |
+
array('value'=>'PDF', 'label'=>Mage::helper('chronorelais')->__('Print PDF Laser with proof')),
|
8 |
+
array('value'=>'SPD', 'label'=>Mage::helper('chronorelais')->__('Print PDF laser without proof')),
|
9 |
+
array('value'=>'THE', 'label'=>Mage::helper('chronorelais')->__('Print PDF thermal'))
|
10 |
+
);
|
11 |
+
}
|
12 |
+
}
|
app/code/community/Chronopost/Chronorelais/Model/Sales/Quote/Address/Total/Shipping.php
CHANGED
@@ -1,207 +1,207 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Magento
|
4 |
-
*
|
5 |
-
* NOTICE OF LICENSE
|
6 |
-
*
|
7 |
-
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
-
* that is bundled with this package in the file LICENSE.txt.
|
9 |
-
* It is also available through the world-wide-web at this URL:
|
10 |
-
* http://opensource.org/licenses/osl-3.0.php
|
11 |
-
* If you did not receive a copy of the license and are unable to
|
12 |
-
* obtain it through the world-wide-web, please send an email
|
13 |
-
* to license@magentocommerce.com so we can send you a copy immediately.
|
14 |
-
*
|
15 |
-
* DISCLAIMER
|
16 |
-
*
|
17 |
-
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
-
* versions in the future. If you wish to customize Magento for your
|
19 |
-
* needs please refer to http://www.magentocommerce.com for more information.
|
20 |
-
*
|
21 |
-
* @category Mage
|
22 |
-
* @package Mage_Sales
|
23 |
-
* @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
|
24 |
-
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
25 |
-
*/
|
26 |
-
|
27 |
-
|
28 |
-
class Chronopost_Chronorelais_Model_Sales_Quote_Address_Total_Shipping extends Mage_Sales_Model_Quote_Address_Total_Abstract
|
29 |
-
{
|
30 |
-
public function __construct()
|
31 |
-
{
|
32 |
-
$this->setCode('shipping');
|
33 |
-
}
|
34 |
-
|
35 |
-
/**
|
36 |
-
* Collect totals information about shipping
|
37 |
-
*
|
38 |
-
* @param Mage_Sales_Model_Quote_Address $address
|
39 |
-
* @return Mage_Sales_Model_Quote_Address_Total_Shipping
|
40 |
-
*/
|
41 |
-
public function collect(Mage_Sales_Model_Quote_Address $address)
|
42 |
-
{
|
43 |
-
parent::collect($address);
|
44 |
-
|
45 |
-
$oldWeight = $address->getWeight();
|
46 |
-
$address->setWeight(0);
|
47 |
-
$address->setFreeMethodWeight(0);
|
48 |
-
$this->_setAmount(0)
|
49 |
-
->_setBaseAmount(0);
|
50 |
-
|
51 |
-
$items = $this->_getAddressItems($address);
|
52 |
-
if (!count($items)) {
|
53 |
-
return $this;
|
54 |
-
}
|
55 |
-
|
56 |
-
$method = $address->getShippingMethod();
|
57 |
-
$freeAddress= $address->getFreeShipping();
|
58 |
-
|
59 |
-
$addressWeight = $address->getWeight();
|
60 |
-
$freeMethodWeight = $address->getFreeMethodWeight();
|
61 |
-
|
62 |
-
$addressQty = 0;
|
63 |
-
|
64 |
-
foreach ($items as $item) {
|
65 |
-
/**
|
66 |
-
* Skip if this item is virtual
|
67 |
-
*/
|
68 |
-
if ($item->getProduct()->isVirtual()) {
|
69 |
-
continue;
|
70 |
-
}
|
71 |
-
|
72 |
-
/**
|
73 |
-
* Children weight we calculate for parent
|
74 |
-
*/
|
75 |
-
if ($item->getParentItem()) {
|
76 |
-
continue;
|
77 |
-
}
|
78 |
-
|
79 |
-
if ($item->getHasChildren() && $item->isShipSeparately()) {
|
80 |
-
foreach ($item->getChildren() as $child) {
|
81 |
-
if ($child->getProduct()->isVirtual()) {
|
82 |
-
continue;
|
83 |
-
}
|
84 |
-
$addressQty += $child->getTotalQty();
|
85 |
-
|
86 |
-
if (!$item->getProduct()->getWeightType()) {
|
87 |
-
$itemWeight = $child->getWeight();
|
88 |
-
$itemQty = $child->getTotalQty();
|
89 |
-
$rowWeight = $itemWeight*$itemQty;
|
90 |
-
$addressWeight += $rowWeight;
|
91 |
-
if ($freeAddress || $child->getFreeShipping()===true) {
|
92 |
-
$rowWeight = 0;
|
93 |
-
} elseif (is_numeric($child->getFreeShipping())) {
|
94 |
-
$freeQty = $child->getFreeShipping();
|
95 |
-
if ($itemQty>$freeQty) {
|
96 |
-
$rowWeight = $itemWeight*($itemQty-$freeQty);
|
97 |
-
}
|
98 |
-
else {
|
99 |
-
$rowWeight = 0;
|
100 |
-
}
|
101 |
-
}
|
102 |
-
$freeMethodWeight += $rowWeight;
|
103 |
-
$item->setRowWeight($rowWeight);
|
104 |
-
}
|
105 |
-
}
|
106 |
-
if ($item->getProduct()->getWeightType()) {
|
107 |
-
$itemWeight = $item->getWeight();
|
108 |
-
$rowWeight = $itemWeight*$item->getQty();
|
109 |
-
$addressWeight+= $rowWeight;
|
110 |
-
if ($freeAddress || $item->getFreeShipping()===true) {
|
111 |
-
$rowWeight = 0;
|
112 |
-
} elseif (is_numeric($item->getFreeShipping())) {
|
113 |
-
$freeQty = $item->getFreeShipping();
|
114 |
-
if ($item->getQty()>$freeQty) {
|
115 |
-
$rowWeight = $itemWeight*($item->getQty()-$freeQty);
|
116 |
-
}
|
117 |
-
else {
|
118 |
-
$rowWeight = 0;
|
119 |
-
}
|
120 |
-
}
|
121 |
-
$freeMethodWeight+= $rowWeight;
|
122 |
-
$item->setRowWeight($rowWeight);
|
123 |
-
}
|
124 |
-
}
|
125 |
-
else {
|
126 |
-
if (!$item->getProduct()->isVirtual()) {
|
127 |
-
$addressQty += $item->getQty();
|
128 |
-
}
|
129 |
-
$itemWeight = $item->getWeight();
|
130 |
-
$rowWeight = $itemWeight*$item->getQty();
|
131 |
-
$addressWeight+= $rowWeight;
|
132 |
-
if ($freeAddress || $item->getFreeShipping()===true) {
|
133 |
-
$rowWeight = 0;
|
134 |
-
} elseif (is_numeric($item->getFreeShipping())) {
|
135 |
-
$freeQty = $item->getFreeShipping();
|
136 |
-
if ($item->getQty()>$freeQty) {
|
137 |
-
$rowWeight = $itemWeight*($item->getQty()-$freeQty);
|
138 |
-
}
|
139 |
-
else {
|
140 |
-
$rowWeight = 0;
|
141 |
-
}
|
142 |
-
}
|
143 |
-
$freeMethodWeight+= $rowWeight;
|
144 |
-
$item->setRowWeight($rowWeight);
|
145 |
-
}
|
146 |
-
}
|
147 |
-
|
148 |
-
if (isset($addressQty)) {
|
149 |
-
$address->setItemQty($addressQty);
|
150 |
-
}
|
151 |
-
|
152 |
-
$address->setWeight($addressWeight);
|
153 |
-
$address->setFreeMethodWeight($freeMethodWeight);
|
154 |
-
|
155 |
-
$address->collectShippingRates();
|
156 |
-
|
157 |
-
$this->_setAmount(0)
|
158 |
-
->_setBaseAmount(0);
|
159 |
-
|
160 |
-
$method = $address->getShippingMethod();
|
161 |
-
|
162 |
-
if ($method) {
|
163 |
-
foreach ($address->getAllShippingRates() as $rate) {
|
164 |
-
if ($rate->getCode()==$method) {
|
165 |
-
$amountPrice = $address->getQuote()->getStore()->convertPrice($rate->getPrice(), false);
|
166 |
-
$this->_setAmount($amountPrice);
|
167 |
-
$this->_setBaseAmount($rate->getPrice());
|
168 |
-
if(!$address->getShippingDescription()) {
|
169 |
-
$address->setShippingDescription($rate->getCarrierTitle().' - '.$rate->getMethodTitle());
|
170 |
-
}
|
171 |
-
break;
|
172 |
-
}
|
173 |
-
}
|
174 |
-
}
|
175 |
-
|
176 |
-
return $this;
|
177 |
-
}
|
178 |
-
|
179 |
-
/**
|
180 |
-
* Add shipping totals information to address object
|
181 |
-
*
|
182 |
-
* @param Mage_Sales_Model_Quote_Address $address
|
183 |
-
* @return Mage_Sales_Model_Quote_Address_Total_Shipping
|
184 |
-
*/
|
185 |
-
public function fetch(Mage_Sales_Model_Quote_Address $address)
|
186 |
-
{
|
187 |
-
$amount = $address->getShippingAmount();
|
188 |
-
if ($amount!=0 || $address->getShippingDescription()) {
|
189 |
-
$address->addTotal(array(
|
190 |
-
'code'=>$this->getCode(),
|
191 |
-
'title'=>Mage::helper('sales')->__('Shipping & Handling').' ('.$address->getShippingDescription().')',
|
192 |
-
'value'=>$address->getShippingAmount()
|
193 |
-
));
|
194 |
-
}
|
195 |
-
return $this;
|
196 |
-
}
|
197 |
-
|
198 |
-
/**
|
199 |
-
* Get Shipping label
|
200 |
-
*
|
201 |
-
* @return string
|
202 |
-
*/
|
203 |
-
public function getLabel()
|
204 |
-
{
|
205 |
-
return Mage::helper('sales')->__('Shipping');
|
206 |
-
}
|
207 |
-
}
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Magento
|
4 |
+
*
|
5 |
+
* NOTICE OF LICENSE
|
6 |
+
*
|
7 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
8 |
+
* that is bundled with this package in the file LICENSE.txt.
|
9 |
+
* It is also available through the world-wide-web at this URL:
|
10 |
+
* http://opensource.org/licenses/osl-3.0.php
|
11 |
+
* If you did not receive a copy of the license and are unable to
|
12 |
+
* obtain it through the world-wide-web, please send an email
|
13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
14 |
+
*
|
15 |
+
* DISCLAIMER
|
16 |
+
*
|
17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
18 |
+
* versions in the future. If you wish to customize Magento for your
|
19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
20 |
+
*
|
21 |
+
* @category Mage
|
22 |
+
* @package Mage_Sales
|
23 |
+
* @copyright Copyright (c) 2010 Magento Inc. (http://www.magentocommerce.com)
|
24 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
25 |
+
*/
|
26 |
+
|
27 |
+
|
28 |
+
class Chronopost_Chronorelais_Model_Sales_Quote_Address_Total_Shipping extends Mage_Sales_Model_Quote_Address_Total_Abstract
|
29 |
+
{
|
30 |
+
public function __construct()
|
31 |
+
{
|
32 |
+
$this->setCode('shipping');
|
33 |
+
}
|
34 |
+
|
35 |
+
/**
|
36 |
+
* Collect totals information about shipping
|
37 |
+
*
|
38 |
+
* @param Mage_Sales_Model_Quote_Address $address
|
39 |
+
* @return Mage_Sales_Model_Quote_Address_Total_Shipping
|
40 |
+
*/
|
41 |
+
public function collect(Mage_Sales_Model_Quote_Address $address)
|
42 |
+
{
|
43 |
+
parent::collect($address);
|
44 |
+
|
45 |
+
$oldWeight = $address->getWeight();
|
46 |
+
$address->setWeight(0);
|
47 |
+
$address->setFreeMethodWeight(0);
|
48 |
+
$this->_setAmount(0)
|
49 |
+
->_setBaseAmount(0);
|
50 |
+
|
51 |
+
$items = $this->_getAddressItems($address);
|
52 |
+
if (!count($items)) {
|
53 |
+
return $this;
|
54 |
+
}
|
55 |
+
|
56 |
+
$method = $address->getShippingMethod();
|
57 |
+
$freeAddress= $address->getFreeShipping();
|
58 |
+
|
59 |
+
$addressWeight = $address->getWeight();
|
60 |
+
$freeMethodWeight = $address->getFreeMethodWeight();
|
61 |
+
|
62 |
+
$addressQty = 0;
|
63 |
+
|
64 |
+
foreach ($items as $item) {
|
65 |
+
/**
|
66 |
+
* Skip if this item is virtual
|
67 |
+
*/
|
68 |
+
if ($item->getProduct()->isVirtual()) {
|
69 |
+
continue;
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* Children weight we calculate for parent
|
74 |
+
*/
|
75 |
+
if ($item->getParentItem()) {
|
76 |
+
continue;
|
77 |
+
}
|
78 |
+
|
79 |
+
if ($item->getHasChildren() && $item->isShipSeparately()) {
|
80 |
+
foreach ($item->getChildren() as $child) {
|
81 |
+
if ($child->getProduct()->isVirtual()) {
|
82 |
+
continue;
|
83 |
+
}
|
84 |
+
$addressQty += $child->getTotalQty();
|
85 |
+
|
86 |
+
if (!$item->getProduct()->getWeightType()) {
|
87 |
+
$itemWeight = $child->getWeight();
|
88 |
+
$itemQty = $child->getTotalQty();
|
89 |
+
$rowWeight = $itemWeight*$itemQty;
|
90 |
+
$addressWeight += $rowWeight;
|
91 |
+
if ($freeAddress || $child->getFreeShipping()===true) {
|
92 |
+
$rowWeight = 0;
|
93 |
+
} elseif (is_numeric($child->getFreeShipping())) {
|
94 |
+
$freeQty = $child->getFreeShipping();
|
95 |
+
if ($itemQty>$freeQty) {
|
96 |
+
$rowWeight = $itemWeight*($itemQty-$freeQty);
|
97 |
+
}
|
98 |
+
else {
|
99 |
+
$rowWeight = 0;
|
100 |
+
}
|
101 |
+
}
|
102 |
+
$freeMethodWeight += $rowWeight;
|
103 |
+
$item->setRowWeight($rowWeight);
|
104 |
+
}
|
105 |
+
}
|
106 |
+
if ($item->getProduct()->getWeightType()) {
|
107 |
+
$itemWeight = $item->getWeight();
|
108 |
+
$rowWeight = $itemWeight*$item->getQty();
|
109 |
+
$addressWeight+= $rowWeight;
|
110 |
+
if ($freeAddress || $item->getFreeShipping()===true) {
|
111 |
+
$rowWeight = 0;
|
112 |
+
} elseif (is_numeric($item->getFreeShipping())) {
|
113 |
+
$freeQty = $item->getFreeShipping();
|
114 |
+
if ($item->getQty()>$freeQty) {
|
115 |
+
$rowWeight = $itemWeight*($item->getQty()-$freeQty);
|
116 |
+
}
|
117 |
+
else {
|
118 |
+
$rowWeight = 0;
|
119 |
+
}
|
120 |
+
}
|
121 |
+
$freeMethodWeight+= $rowWeight;
|
122 |
+
$item->setRowWeight($rowWeight);
|
123 |
+
}
|
124 |
+
}
|
125 |
+
else {
|
126 |
+
if (!$item->getProduct()->isVirtual()) {
|
127 |
+
$addressQty += $item->getQty();
|
128 |
+
}
|
129 |
+
$itemWeight = $item->getWeight();
|
130 |
+
$rowWeight = $itemWeight*$item->getQty();
|
131 |
+
$addressWeight+= $rowWeight;
|
132 |
+
if ($freeAddress || $item->getFreeShipping()===true) {
|
133 |
+
$rowWeight = 0;
|
134 |
+
} elseif (is_numeric($item->getFreeShipping())) {
|
135 |
+
$freeQty = $item->getFreeShipping();
|
136 |
+
if ($item->getQty()>$freeQty) {
|
137 |
+
$rowWeight = $itemWeight*($item->getQty()-$freeQty);
|
138 |
+
}
|
139 |
+
else {
|
140 |
+
$rowWeight = 0;
|
141 |
+
}
|
142 |
+
}
|
143 |
+
$freeMethodWeight+= $rowWeight;
|
144 |
+
$item->setRowWeight($rowWeight);
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
if (isset($addressQty)) {
|
149 |
+
$address->setItemQty($addressQty);
|
150 |
+
}
|
151 |
+
|
152 |
+
$address->setWeight($addressWeight);
|
153 |
+
$address->setFreeMethodWeight($freeMethodWeight);
|
154 |
+
|
155 |
+
$address->collectShippingRates();
|
156 |
+
|
157 |
+
$this->_setAmount(0)
|
158 |
+
->_setBaseAmount(0);
|
159 |
+
|
160 |
+
$method = $address->getShippingMethod();
|
161 |
+
|
162 |
+
if ($method) {
|
163 |
+
foreach ($address->getAllShippingRates() as $rate) {
|
164 |
+
if ($rate->getCode()==$method) {
|
165 |
+
$amountPrice = $address->getQuote()->getStore()->convertPrice($rate->getPrice(), false);
|
166 |
+
$this->_setAmount($amountPrice);
|
167 |
+
$this->_setBaseAmount($rate->getPrice());
|
168 |
+
if(!$address->getShippingDescription()) {
|
169 |
+
$address->setShippingDescription($rate->getCarrierTitle().' - '.$rate->getMethodTitle());
|
170 |
+
}
|
171 |
+
break;
|
172 |
+
}
|
173 |
+
}
|
174 |
+
}
|
175 |
+
|
176 |
+
return $this;
|
177 |
+
}
|
178 |
+
|
179 |
+
/**
|
180 |
+
* Add shipping totals information to address object
|
181 |
+
*
|
182 |
+
* @param Mage_Sales_Model_Quote_Address $address
|
183 |
+
* @return Mage_Sales_Model_Quote_Address_Total_Shipping
|
184 |
+
*/
|
185 |
+
public function fetch(Mage_Sales_Model_Quote_Address $address)
|
186 |
+
{
|
187 |
+
$amount = $address->getShippingAmount();
|
188 |
+
if ($amount!=0 || $address->getShippingDescription()) {
|
189 |
+
$address->addTotal(array(
|
190 |
+
'code'=>$this->getCode(),
|
191 |
+
'title'=>Mage::helper('sales')->__('Shipping & Handling').' ('.$address->getShippingDescription().')',
|
192 |
+
'value'=>$address->getShippingAmount()
|
193 |
+
));
|
194 |
+
}
|
195 |
+
return $this;
|
196 |
+
}
|
197 |
+
|
198 |
+
/**
|
199 |
+
* Get Shipping label
|
200 |
+
*
|
201 |
+
* @return string
|
202 |
+
*/
|
203 |
+
public function getLabel()
|
204 |
+
{
|
205 |
+
return Mage::helper('sales')->__('Shipping');
|
206 |
+
}
|
207 |
+
}
|
app/code/community/Chronopost/Chronorelais/controllers/AjaxController.php
CHANGED
@@ -1,409 +1,409 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Magento Chronopost Chronorelais Module
|
5 |
-
*
|
6 |
-
* NOTICE OF LICENSE
|
7 |
-
*
|
8 |
-
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
-
* that is bundled with this package in the file LICENSE.txt.
|
10 |
-
* It is also available through the world-wide-web at this URL:
|
11 |
-
* http://opensource.org/licenses/osl-3.0.php
|
12 |
-
* If you did not receive a copy of the license and are unable to
|
13 |
-
* obtain it through the world-wide-web, please send an email
|
14 |
-
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
-
*
|
16 |
-
* @category Chronopost
|
17 |
-
* @package Chronopost_Chronorelais
|
18 |
-
* @copyright Copyright (c) 2008-10 Owebia (http://www.owebia.com/)
|
19 |
-
* @author Antoine Lemoine
|
20 |
-
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
-
*/
|
22 |
-
|
23 |
-
class Chronopost_Chronorelais_AjaxController extends Chronopost_Chronorelais_Controller_Abstract
|
24 |
-
{
|
25 |
-
private function getPropertyHelper($row_id, $property_key, $property) {
|
26 |
-
$cleaned_property = $this->cleanKey($property_key);
|
27 |
-
$prefix = "r-".$row_id."-p-".$cleaned_property;
|
28 |
-
$value = isset($property['original_value']) ? $property['original_value'] : (isset($property['value']) ? $property['value'] : '');
|
29 |
-
|
30 |
-
switch ($property_key) {
|
31 |
-
case 'enabled':
|
32 |
-
$enabled = $value!==false;
|
33 |
-
return "<p><select id=\"".$prefix."\" class=\"field\">"
|
34 |
-
."<option value=\"0\"".($enabled ? '' : ' selected="selected"').">".$this->__('Disabled')."</option>"
|
35 |
-
."<option value=\"1\"".($enabled ? ' selected="selected"' : '').">".$this->__('Enabled')."</option>"
|
36 |
-
."</select><p>";
|
37 |
-
break;
|
38 |
-
case 'label':
|
39 |
-
case 'description':
|
40 |
-
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>"
|
41 |
-
."<fieldset class=\"buttons-set\"><legend>".$this->__('Insert')."</legend>"
|
42 |
-
."<p>"
|
43 |
-
.$this->button('Destination country',"ocseditor.insertAtCaret(this,'{destination.country.name}');")
|
44 |
-
.$this->button('Cart weight',"ocseditor.insertAtCaret(this,'{cart.weight}');")
|
45 |
-
.$this->button('Cart quantity',"ocseditor.insertAtCaret(this,'{cart.quantity}');")
|
46 |
-
.$this->button('Price including tax',"ocseditor.insertAtCaret(this,'{cart.price_including_tax}');")
|
47 |
-
.$this->button('Price excluding tax',"ocseditor.insertAtCaret(this,'{cart.price_excluding_tax}');")
|
48 |
-
."</p>"
|
49 |
-
."</fieldset>";
|
50 |
-
break;
|
51 |
-
case 'fees':
|
52 |
-
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>"
|
53 |
-
."<fieldset class=\"buttons-set\"><legend>".$this->__('Insert')."</legend>"
|
54 |
-
."<p><span class=\"buttons-set-label\">".$this->__('Cart')."</span>"
|
55 |
-
.$this->button('Weight',"ocseditor.insertAtCaret(this,'{cart.weight}');")
|
56 |
-
.$this->button('Products quantity',"ocseditor.insertAtCaret(this,'{cart.quantity}');")
|
57 |
-
.$this->button('Price including tax',"ocseditor.insertAtCaret(this,'{cart.price_including_tax}');")
|
58 |
-
.$this->button('Price excluding tax',"ocseditor.insertAtCaret(this,'{cart.price_excluding_tax}');")
|
59 |
-
."</p>"
|
60 |
-
."<p><span class=\"buttons-set-label\">".$this->__('Selection')."</span>"
|
61 |
-
.$this->button('Weight',"ocseditor.insertAtCaret(this,'{selection.weight}');")
|
62 |
-
.$this->button('Products quantity',"ocseditor.insertAtCaret(this,'{selection.quantity}');")
|
63 |
-
."</p>"
|
64 |
-
."<p><span class=\"buttons-set-label\">".$this->__('Product')."</span>"
|
65 |
-
.$this->button('Weight',"ocseditor.insertAtCaret(this,'{product.weight}');")
|
66 |
-
.$this->button('Quantity',"ocseditor.insertAtCaret(this,'{product.quantity}');")
|
67 |
-
."</p>"
|
68 |
-
."</fieldset>";
|
69 |
-
break;
|
70 |
-
case 'conditions':
|
71 |
-
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>"
|
72 |
-
."<fieldset class=\"buttons-set\"><legend>".$this->__('Insert')."</legend>"
|
73 |
-
."<p><span class=\"buttons-set-label\">".$this->__('Cart')."</span>"
|
74 |
-
.$this->button('Weight',"ocseditor.insertAtCaret(this,'{cart.weight}');")
|
75 |
-
.$this->button('Products quantity',"ocseditor.insertAtCaret(this,'{cart.quantity}');")
|
76 |
-
.$this->button('Price including tax',"ocseditor.insertAtCaret(this,'{cart.price_including_tax}');")
|
77 |
-
.$this->button('Price excluding tax',"ocseditor.insertAtCaret(this,'{cart.price_excluding_tax}');")
|
78 |
-
."</p>"
|
79 |
-
."</fieldset>";
|
80 |
-
break;
|
81 |
-
case 'customer_groups':
|
82 |
-
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>"
|
83 |
-
."<fieldset class=\"buttons-set\"><legend>".$this->__('Insert')."</legend>"
|
84 |
-
."<p>"
|
85 |
-
.$this->button('Not logged in',"ocseditor.insertAtCaret(this,'NOT LOGGED IN');")
|
86 |
-
."</p>"
|
87 |
-
."</fieldset>";
|
88 |
-
break;
|
89 |
-
case 'tracking_url':
|
90 |
-
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>"
|
91 |
-
."<fieldset class=\"buttons-set\"><legend>".$this->__('Insert')."</legend>"
|
92 |
-
."<p>"
|
93 |
-
.$this->button('Tracking number',"ocseditor.insertAtCaret(this,'{tracking_number}');")
|
94 |
-
."</p>"
|
95 |
-
."</fieldset>";
|
96 |
-
break;
|
97 |
-
case 'destination':
|
98 |
-
case 'origin':
|
99 |
-
$parsed_value = $this->parseAddressFilter($value);
|
100 |
-
$excluding = $parsed_value['excluding'];
|
101 |
-
return "<div class=\"address-filters-property\"><p>"
|
102 |
-
."<input type=\"radio\" class=\"excluding\" id=\"".$prefix."-exluding-0\" name=\"".$prefix."-exluding\""
|
103 |
-
." value=\"0\"".(!$excluding ? " checked=\"checked\"" : '')." onclick=\"ocseditor.updateCountries(this);\"/>"
|
104 |
-
."<label for=\"".$prefix."-exluding-0\"> ".$this->__('Limit to')."</label> "
|
105 |
-
."<input type=\"radio\" class=\"excluding\" id=\"".$prefix."-exluding-1\" name=\"".$prefix."-exluding\""
|
106 |
-
." value=\"1\"".($excluding ? " checked=\"checked\"" : '')." onclick=\"ocseditor.updateCountries(this);\"/>"
|
107 |
-
."<label for=\"".$prefix."-exluding-1\"> ".$this->__('Exclude')."</label></p>"
|
108 |
-
."<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>"
|
109 |
-
."<fieldset class=\"buttons-set\"><legend>".$this->__('Display')."</legend>"
|
110 |
-
."<p>"
|
111 |
-
.$this->button('Display original input',"ocseditor.displayCountry('original-value',this,false);")
|
112 |
-
.$this->button('Display corrected names',"ocseditor.displayCountry('full-value',this,false);")
|
113 |
-
.$this->button('Display codes',"ocseditor.displayCountry('compact-value',this,true);")
|
114 |
-
."</p>"
|
115 |
-
."</fieldset>"
|
116 |
-
."<fieldset class=\"buttons-set\"><legend>".$this->__('Preview')."</legend>"
|
117 |
-
."<div class=\"address-filter-list\">".$this->getAddressFilters($parsed_value)."</div>"
|
118 |
-
."</fieldset>"
|
119 |
-
."</div>"
|
120 |
-
;
|
121 |
-
break;
|
122 |
-
case '*comment' :
|
123 |
-
$lines = explode("\n",trim($value));
|
124 |
-
for ($i=0; $i<count($lines); $i++) {
|
125 |
-
$lines[$i] = preg_replace('/^# ?/','',$lines[$i]);
|
126 |
-
}
|
127 |
-
$value = implode("\n",$lines);
|
128 |
-
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>";
|
129 |
-
default :
|
130 |
-
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>";
|
131 |
-
}
|
132 |
-
}
|
133 |
-
|
134 |
-
private function getAddressFilters($data) {
|
135 |
-
$address_filters = array();
|
136 |
-
foreach ($data['countries'] as $country) {
|
137 |
-
$address_filters[] = new AddressFilter($country);
|
138 |
-
}
|
139 |
-
return implode('',$address_filters);
|
140 |
-
}
|
141 |
-
|
142 |
-
private function parseAddressFilter($address_filter) {
|
143 |
-
$output = array(
|
144 |
-
'excluding' => false,
|
145 |
-
'countries' => array(),
|
146 |
-
'original' => $address_filter,
|
147 |
-
);
|
148 |
-
|
149 |
-
$address_filter = str_replace(array("\r\n","\r","\n"),array(',',',',','),$address_filter);
|
150 |
-
|
151 |
-
if (preg_match('# *\* *- *\((.*)\) *#s',$address_filter,$result)) {
|
152 |
-
$address_filter = $result[1];
|
153 |
-
$output['excluding'] = true;
|
154 |
-
}
|
155 |
-
|
156 |
-
$tmp_address_filter_array = explode(',',trim($address_filter));
|
157 |
-
|
158 |
-
$concat = false;
|
159 |
-
$concatened = '';
|
160 |
-
$address_filter_array = array();
|
161 |
-
$i = 0;
|
162 |
-
|
163 |
-
foreach ($tmp_address_filter_array as $address_filter) {
|
164 |
-
if ($concat) $concatened .= ','.$address_filter;
|
165 |
-
else {
|
166 |
-
if ($i<count($tmp_address_filter_array)-1 && preg_match('#\(#',$address_filter)) {
|
167 |
-
$concat = true;
|
168 |
-
$concatened .= $address_filter;
|
169 |
-
} else $address_filter_array[] = $address_filter;
|
170 |
-
}
|
171 |
-
if (preg_match('#\)#',$address_filter)) {
|
172 |
-
$address_filter_array[] = $concatened;
|
173 |
-
$concatened = '';
|
174 |
-
$concat = false;
|
175 |
-
}
|
176 |
-
$i++;
|
177 |
-
}
|
178 |
-
|
179 |
-
foreach ($address_filter_array as $address_filter) {
|
180 |
-
$address_filter = trim($address_filter);
|
181 |
-
if (trim($address_filter)!='') {
|
182 |
-
if (preg_match('# *([^,(]+) *(-)? *(?:\( *(-)? *(.*)\))? *#s',$address_filter,$result)) {
|
183 |
-
$country_code = $result[1];
|
184 |
-
|
185 |
-
$region_codes = explode(',',$result[4]);
|
186 |
-
$in_array = false;
|
187 |
-
for ($i=count($region_codes); --$i>=0;) {
|
188 |
-
$code = trim($region_codes[$i]);
|
189 |
-
$region_codes[$i] = $code;
|
190 |
-
}
|
191 |
-
/*$in_array = in_array($address['region_code'],$region_codes,true) || in_array($address['postcode'],$region_codes,true);*/
|
192 |
-
$excluding_region = $result[2]=='-' || $result[3]=='-';
|
193 |
-
$output['countries'][] = array(
|
194 |
-
'excluding' => $excluding_region,
|
195 |
-
'country_code' => $country_code,
|
196 |
-
'region_codes' => implode(',',$region_codes),
|
197 |
-
'original' => $address_filter,
|
198 |
-
);
|
199 |
-
} else {
|
200 |
-
$output['countries'][] = array(
|
201 |
-
'excluding' => null,
|
202 |
-
'country_code' => $address_filter,
|
203 |
-
'region_codes' => null,
|
204 |
-
'original' => $address_filter,
|
205 |
-
);
|
206 |
-
}
|
207 |
-
}
|
208 |
-
}
|
209 |
-
return $output;
|
210 |
-
}
|
211 |
-
|
212 |
-
private function getRowUI($row, $selected) {
|
213 |
-
$row['_ID_']['value'] = isset($row['_ID_']['value']) ? $row['_ID_']['value'] : uniqid('c');
|
214 |
-
$row_id = $row['_ID_']['value'];
|
215 |
-
|
216 |
-
if (isset($row['lines'])) {
|
217 |
-
$output = "<div id=\"r-".$row_id."-container\" class=\"row-container has-error ignored-lines".($selected ? ' selected' : '')."\">"
|
218 |
-
."<div class=\"row-header\" onclick=\"ocseditor.selectRow('".$row_id."');\">"
|
219 |
-
."<div class=\"row-actions\">"
|
220 |
-
.$this->button('Apply changes',"ocseditor.applyChanges();")
|
221 |
-
.$this->button('Delete',"ocseditor.removeRow(this);",'delete')
|
222 |
-
."</div>"
|
223 |
-
."<div class=\"row-title\">".$this->__('Ignored lines')."</div></div>"
|
224 |
-
."<div class=\"properties-container\"><textarea class=\"field\">".$row['lines']."</textarea></div></div>";
|
225 |
-
return $output;
|
226 |
-
}
|
227 |
-
|
228 |
-
if (!isset($row['label'])) {
|
229 |
-
$row['label']['value'] = $this->__('New shipping method');
|
230 |
-
}
|
231 |
-
|
232 |
-
$properties = array(
|
233 |
-
'enabled' => 'Enabled',
|
234 |
-
'code' => 'Code',
|
235 |
-
'label' => 'Label',
|
236 |
-
'description' => 'Description',
|
237 |
-
'destination' => 'Destination',
|
238 |
-
'origin' => 'Origin',
|
239 |
-
'conditions' => 'Conditions',
|
240 |
-
'fees' => 'Fees',
|
241 |
-
'customer_groups' => 'Customer groups',
|
242 |
-
'tracking_url' => 'Tracking url',
|
243 |
-
'*comment' => 'Comment',
|
244 |
-
);
|
245 |
-
|
246 |
-
$label = $row['label']['value'];
|
247 |
-
$output = "<div id=\"r-".$row_id."-container\" class=\"row-container".($selected ? ' selected' : '')."\">"
|
248 |
-
."<div class=\"row-header\" onclick=\"ocseditor.selectRow('".$row_id."');\">"
|
249 |
-
."<div class=\"row-actions\">".$this->button('Delete',"ocseditor.removeRow(this);",'delete')."</div><div class=\"row-title\">".$label."</div></div>"
|
250 |
-
."<div class=\"properties-container\">";
|
251 |
-
$list = "<ul class=\"properties-list\">";
|
252 |
-
$j = 0;
|
253 |
-
foreach ($properties as $property_key => $label) {
|
254 |
-
$cleaned_property = $this->cleanKey($property_key);
|
255 |
-
$value = isset($row[$property_key]) ? trim($row[$property_key]['value']) : '';
|
256 |
-
$list .= "<li id=\"r-".$row_id."-p-".$cleaned_property."-item\" class=\"property-item".($j==0 ? ' selected' : '')
|
257 |
-
.(empty($value) ? ' empty' : '')
|
258 |
-
."\" onclick=\"ocseditor.selectProperty('".$row_id."','".$cleaned_property."');\">".$this->__($label)."</li>";
|
259 |
-
$output .= "<div id=\"r-".$row_id."-p-".$cleaned_property."-container\" class=\"property-container"
|
260 |
-
.($j==0 ? ' selected' : '')."\" property-name=\"".$property_key."\">"
|
261 |
-
."<div class=\"buttons-set\" style=\"text-align:right;\">".$this->button('Help',"ocseditor.help('property.".$property_key."');",'help')."</div>"
|
262 |
-
.$this->getPropertyHelper($row_id,$property_key,$row[$property_key])."</div>";
|
263 |
-
$j++;
|
264 |
-
}
|
265 |
-
foreach ($row as $property_key => $property) {
|
266 |
-
if (!isset($properties[$property_key]) && substr($property_key,0,1)!='*') {
|
267 |
-
$label = $property_key;
|
268 |
-
$cleaned_property = $this->cleanKey($property_key);
|
269 |
-
$value = isset($row[$property_key]) ? trim($row[$property_key]['value']) : '';
|
270 |
-
$list .= "<li id=\"r-".$row_id."-p-".$cleaned_property."-item\" class=\"property-item".($j==0 ? ' selected' : '')
|
271 |
-
.(empty($value) ? ' empty' : '').($cleaned_property=='_ID_' ? ' hide' : '')
|
272 |
-
."\" onclick=\"ocseditor.selectProperty('".$row_id."','".$cleaned_property."');\">".$this->__($label)."</li>";
|
273 |
-
$output .= "<div id=\"r-".$row_id."-p-".$cleaned_property."-container\" class=\"property-container"
|
274 |
-
.($j==0 ? ' selected' : '')."\" property-name=\"".$property_key."\">"
|
275 |
-
."<div class=\"buttons-set\" style=\"text-align:right;\">".$this->button('Help',"ocseditor.help('property.".$property_key."');",'help')."</div>"
|
276 |
-
.$this->getPropertyHelper($row_id,$property_key,$property)."</div>";
|
277 |
-
$j++;
|
278 |
-
}
|
279 |
-
}
|
280 |
-
$output .= $list."</div></div>";
|
281 |
-
return $output;
|
282 |
-
}
|
283 |
-
|
284 |
-
private function getConfigErrors($config) {
|
285 |
-
$script = "ocseditor.resetErrors();";
|
286 |
-
foreach ($config as $row_code => $row) {
|
287 |
-
if (isset($row['*messages'])) {
|
288 |
-
$error = '';
|
289 |
-
foreach ($row['*messages'] as $message) {
|
290 |
-
$error .= "<p>".$this->__($message)."</p>";
|
291 |
-
}
|
292 |
-
if ($error!='') $script .= "ocseditor.setError('".$row['_ID_']['value']."','','".$this->jsEscape($error)."');";
|
293 |
-
}
|
294 |
-
foreach ($row as $property_key => $property) {
|
295 |
-
if (isset($property['messages'])) {
|
296 |
-
$error = '';
|
297 |
-
foreach ($property['messages'] as $message) {
|
298 |
-
$error .= "<p>".$this->__($message)."</p>";
|
299 |
-
}
|
300 |
-
if ($error!='') {
|
301 |
-
$script .= "ocseditor.setError('".$row['_ID_']['value']."','".$property_key."','"
|
302 |
-
.$this->jsEscape($error
|
303 |
-
.($property['value']!=$property['original_value'] ?
|
304 |
-
"<p>"
|
305 |
-
.$this->button('Correct',"ocseditor.correct('".$row['_ID_']['value']."','".$property_key."','".$this->jsEscape($property['value'])."');")
|
306 |
-
."</p>" : '')
|
307 |
-
)."');";
|
308 |
-
}
|
309 |
-
}
|
310 |
-
}
|
311 |
-
}
|
312 |
-
//$script .= "alert('".str_replace(array("\r\n","\n","\'","'"),array(" "," ","\\\'","\'"),$script)."');";
|
313 |
-
return $script;
|
314 |
-
}
|
315 |
-
|
316 |
-
private function loadConfig($input) {
|
317 |
-
include_once $this->getIncludingPath('ChronorelaisShippingHelper.php');
|
318 |
-
|
319 |
-
$helper = new ChronorelaisShippingHelper($input);
|
320 |
-
$helper->checkConfig();
|
321 |
-
$config = $helper->getConfig();
|
322 |
-
//print_r($config);
|
323 |
-
|
324 |
-
$output = "<div class=\"buttons-set\">"
|
325 |
-
.$this->button('Add a shipping method',"ocseditor.addRow();",'add')
|
326 |
-
."</div><div class=\"config-container\">";
|
327 |
-
$i = 0;
|
328 |
-
foreach ($config as &$row) {
|
329 |
-
$output .= $this->getRowUI($row,$i==0);
|
330 |
-
$i++;
|
331 |
-
}
|
332 |
-
$output .= "</div><script type=\"text/javascript\">".$this->getConfigErrors($config)."</script>";
|
333 |
-
return $output;
|
334 |
-
}
|
335 |
-
|
336 |
-
public function indexAction() {
|
337 |
-
header('Content-Type: text/html; charset=UTF-8');
|
338 |
-
|
339 |
-
include_once $this->getIncludingPath('countries.inc.php');
|
340 |
-
|
341 |
-
switch ($_POST['what']) {
|
342 |
-
case 'open':
|
343 |
-
$output = ""
|
344 |
-
// Donate page
|
345 |
-
//.$this->page('donate',"Support the development of Chronorelais Shipping extension",$this->__('{ocseditor.donate-page.content}'))
|
346 |
-
// Help page
|
347 |
-
.$this->page('help',"Chronorelais Shipping extension help",'')
|
348 |
-
// Main page
|
349 |
-
.$this->pageHeader("Chronorelais Shipping configuration editor",
|
350 |
-
$this->button('Save',"ocseditor.save();",'save')
|
351 |
-
.$this->button('Export',"ocseditor.saveToFile();",'')
|
352 |
-
.$this->button('Load',"ocseditor.showConfigLoader();",'')
|
353 |
-
.$this->button('Close',"ocseditor.close();",'cancel')
|
354 |
-
)
|
355 |
-
."<div id=\"ocs-editor-config-loader\">"
|
356 |
-
."<textarea></textarea>"
|
357 |
-
."<div class=\"buttons-set\">"
|
358 |
-
.$this->button('Load',"ocseditor.loadConfig();",'')
|
359 |
-
.$this->button('Cancel',"ocseditor.hideConfigLoader();",'cancel')
|
360 |
-
."</div>"
|
361 |
-
."</div>"
|
362 |
-
."<div id=\"ocs-editor-config-container\">".$this->loadConfig($_POST['input'])."</div>"
|
363 |
-
/*."<div class=\"donate-container\">"
|
364 |
-
."<table cellspacing=\"0\"><tr>"
|
365 |
-
."<td>".$this->__('You appreciate this extension and would like to help?')."</td>"
|
366 |
-
."<td class=\"form-buttons\">"
|
367 |
-
.$this->button('Donate',"ocseditor.openPage('donate');",'donate')
|
368 |
-
."</td>"
|
369 |
-
."</tr></table>"
|
370 |
-
."</div>"*/
|
371 |
-
;
|
372 |
-
echo $output;
|
373 |
-
exit;
|
374 |
-
case 'help':
|
375 |
-
echo $this->__('{ocseditor.help.'.$_POST['input'].'}');
|
376 |
-
exit;
|
377 |
-
case 'add-row':
|
378 |
-
echo $this->getRowUI(array(),true);
|
379 |
-
exit;
|
380 |
-
case 'load-config':
|
381 |
-
echo $this->loadConfig($_POST['config']);
|
382 |
-
exit;
|
383 |
-
case 'check-config':
|
384 |
-
include_once $this->getIncludingPath('ChronorelaisShippingHelper.php');
|
385 |
-
|
386 |
-
$helper = new ChronorelaisShippingHelper(urldecode($_POST['config']));
|
387 |
-
$helper->checkConfig();
|
388 |
-
print_r($helper->getConfig(),$out);
|
389 |
-
//$script = "alert('".$this->jsEscape(urldecode($_POST['config']))."');";
|
390 |
-
$script = $this->getConfigErrors($helper->getConfig());
|
391 |
-
//$script = "alert('".$this->jsEscape($this->getConfigErrors($helper->getConfig()))."');";
|
392 |
-
break;
|
393 |
-
case 'save-to-file':
|
394 |
-
include_once $this->getIncludingPath('ChronorelaisShippingHelper.php');
|
395 |
-
|
396 |
-
$helper = new ChronorelaisShippingHelper(urldecode($_POST['config']));
|
397 |
-
$formatted_config = $helper->formatConfig(false);
|
398 |
-
$this->forceDownload('chronorelais-shipping-config.txt',$formatted_config);
|
399 |
-
exit;
|
400 |
-
case 'get-address-filters':
|
401 |
-
$result = $this->parseAddressFilter($_POST['input']);
|
402 |
-
echo $this->getAddressFilters($result);
|
403 |
-
exit;
|
404 |
-
}
|
405 |
-
|
406 |
-
echo "<script type=\"text/javascript\">".$script."</script>";
|
407 |
-
exit;
|
408 |
-
}
|
409 |
-
}
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Magento Chronopost Chronorelais Module
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Chronopost
|
17 |
+
* @package Chronopost_Chronorelais
|
18 |
+
* @copyright Copyright (c) 2008-10 Owebia (http://www.owebia.com/)
|
19 |
+
* @author Antoine Lemoine
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
class Chronopost_Chronorelais_AjaxController extends Chronopost_Chronorelais_Controller_Abstract
|
24 |
+
{
|
25 |
+
private function getPropertyHelper($row_id, $property_key, $property) {
|
26 |
+
$cleaned_property = $this->cleanKey($property_key);
|
27 |
+
$prefix = "r-".$row_id."-p-".$cleaned_property;
|
28 |
+
$value = isset($property['original_value']) ? $property['original_value'] : (isset($property['value']) ? $property['value'] : '');
|
29 |
+
|
30 |
+
switch ($property_key) {
|
31 |
+
case 'enabled':
|
32 |
+
$enabled = $value!==false;
|
33 |
+
return "<p><select id=\"".$prefix."\" class=\"field\">"
|
34 |
+
."<option value=\"0\"".($enabled ? '' : ' selected="selected"').">".$this->__('Disabled')."</option>"
|
35 |
+
."<option value=\"1\"".($enabled ? ' selected="selected"' : '').">".$this->__('Enabled')."</option>"
|
36 |
+
."</select><p>";
|
37 |
+
break;
|
38 |
+
case 'label':
|
39 |
+
case 'description':
|
40 |
+
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>"
|
41 |
+
."<fieldset class=\"buttons-set\"><legend>".$this->__('Insert')."</legend>"
|
42 |
+
."<p>"
|
43 |
+
.$this->button('Destination country',"ocseditor.insertAtCaret(this,'{destination.country.name}');")
|
44 |
+
.$this->button('Cart weight',"ocseditor.insertAtCaret(this,'{cart.weight}');")
|
45 |
+
.$this->button('Cart quantity',"ocseditor.insertAtCaret(this,'{cart.quantity}');")
|
46 |
+
.$this->button('Price including tax',"ocseditor.insertAtCaret(this,'{cart.price_including_tax}');")
|
47 |
+
.$this->button('Price excluding tax',"ocseditor.insertAtCaret(this,'{cart.price_excluding_tax}');")
|
48 |
+
."</p>"
|
49 |
+
."</fieldset>";
|
50 |
+
break;
|
51 |
+
case 'fees':
|
52 |
+
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>"
|
53 |
+
."<fieldset class=\"buttons-set\"><legend>".$this->__('Insert')."</legend>"
|
54 |
+
."<p><span class=\"buttons-set-label\">".$this->__('Cart')."</span>"
|
55 |
+
.$this->button('Weight',"ocseditor.insertAtCaret(this,'{cart.weight}');")
|
56 |
+
.$this->button('Products quantity',"ocseditor.insertAtCaret(this,'{cart.quantity}');")
|
57 |
+
.$this->button('Price including tax',"ocseditor.insertAtCaret(this,'{cart.price_including_tax}');")
|
58 |
+
.$this->button('Price excluding tax',"ocseditor.insertAtCaret(this,'{cart.price_excluding_tax}');")
|
59 |
+
."</p>"
|
60 |
+
."<p><span class=\"buttons-set-label\">".$this->__('Selection')."</span>"
|
61 |
+
.$this->button('Weight',"ocseditor.insertAtCaret(this,'{selection.weight}');")
|
62 |
+
.$this->button('Products quantity',"ocseditor.insertAtCaret(this,'{selection.quantity}');")
|
63 |
+
."</p>"
|
64 |
+
."<p><span class=\"buttons-set-label\">".$this->__('Product')."</span>"
|
65 |
+
.$this->button('Weight',"ocseditor.insertAtCaret(this,'{product.weight}');")
|
66 |
+
.$this->button('Quantity',"ocseditor.insertAtCaret(this,'{product.quantity}');")
|
67 |
+
."</p>"
|
68 |
+
."</fieldset>";
|
69 |
+
break;
|
70 |
+
case 'conditions':
|
71 |
+
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>"
|
72 |
+
."<fieldset class=\"buttons-set\"><legend>".$this->__('Insert')."</legend>"
|
73 |
+
."<p><span class=\"buttons-set-label\">".$this->__('Cart')."</span>"
|
74 |
+
.$this->button('Weight',"ocseditor.insertAtCaret(this,'{cart.weight}');")
|
75 |
+
.$this->button('Products quantity',"ocseditor.insertAtCaret(this,'{cart.quantity}');")
|
76 |
+
.$this->button('Price including tax',"ocseditor.insertAtCaret(this,'{cart.price_including_tax}');")
|
77 |
+
.$this->button('Price excluding tax',"ocseditor.insertAtCaret(this,'{cart.price_excluding_tax}');")
|
78 |
+
."</p>"
|
79 |
+
."</fieldset>";
|
80 |
+
break;
|
81 |
+
case 'customer_groups':
|
82 |
+
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>"
|
83 |
+
."<fieldset class=\"buttons-set\"><legend>".$this->__('Insert')."</legend>"
|
84 |
+
."<p>"
|
85 |
+
.$this->button('Not logged in',"ocseditor.insertAtCaret(this,'NOT LOGGED IN');")
|
86 |
+
."</p>"
|
87 |
+
."</fieldset>";
|
88 |
+
break;
|
89 |
+
case 'tracking_url':
|
90 |
+
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>"
|
91 |
+
."<fieldset class=\"buttons-set\"><legend>".$this->__('Insert')."</legend>"
|
92 |
+
."<p>"
|
93 |
+
.$this->button('Tracking number',"ocseditor.insertAtCaret(this,'{tracking_number}');")
|
94 |
+
."</p>"
|
95 |
+
."</fieldset>";
|
96 |
+
break;
|
97 |
+
case 'destination':
|
98 |
+
case 'origin':
|
99 |
+
$parsed_value = $this->parseAddressFilter($value);
|
100 |
+
$excluding = $parsed_value['excluding'];
|
101 |
+
return "<div class=\"address-filters-property\"><p>"
|
102 |
+
."<input type=\"radio\" class=\"excluding\" id=\"".$prefix."-exluding-0\" name=\"".$prefix."-exluding\""
|
103 |
+
." value=\"0\"".(!$excluding ? " checked=\"checked\"" : '')." onclick=\"ocseditor.updateCountries(this);\"/>"
|
104 |
+
."<label for=\"".$prefix."-exluding-0\"> ".$this->__('Limit to')."</label> "
|
105 |
+
."<input type=\"radio\" class=\"excluding\" id=\"".$prefix."-exluding-1\" name=\"".$prefix."-exluding\""
|
106 |
+
." value=\"1\"".($excluding ? " checked=\"checked\"" : '')." onclick=\"ocseditor.updateCountries(this);\"/>"
|
107 |
+
."<label for=\"".$prefix."-exluding-1\"> ".$this->__('Exclude')."</label></p>"
|
108 |
+
."<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>"
|
109 |
+
."<fieldset class=\"buttons-set\"><legend>".$this->__('Display')."</legend>"
|
110 |
+
."<p>"
|
111 |
+
.$this->button('Display original input',"ocseditor.displayCountry('original-value',this,false);")
|
112 |
+
.$this->button('Display corrected names',"ocseditor.displayCountry('full-value',this,false);")
|
113 |
+
.$this->button('Display codes',"ocseditor.displayCountry('compact-value',this,true);")
|
114 |
+
."</p>"
|
115 |
+
."</fieldset>"
|
116 |
+
."<fieldset class=\"buttons-set\"><legend>".$this->__('Preview')."</legend>"
|
117 |
+
."<div class=\"address-filter-list\">".$this->getAddressFilters($parsed_value)."</div>"
|
118 |
+
."</fieldset>"
|
119 |
+
."</div>"
|
120 |
+
;
|
121 |
+
break;
|
122 |
+
case '*comment' :
|
123 |
+
$lines = explode("\n",trim($value));
|
124 |
+
for ($i=0; $i<count($lines); $i++) {
|
125 |
+
$lines[$i] = preg_replace('/^# ?/','',$lines[$i]);
|
126 |
+
}
|
127 |
+
$value = implode("\n",$lines);
|
128 |
+
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>";
|
129 |
+
default :
|
130 |
+
return "<textarea id=\"".$prefix."\" class=\"field\">".$value."</textarea>";
|
131 |
+
}
|
132 |
+
}
|
133 |
+
|
134 |
+
private function getAddressFilters($data) {
|
135 |
+
$address_filters = array();
|
136 |
+
foreach ($data['countries'] as $country) {
|
137 |
+
$address_filters[] = new AddressFilter($country);
|
138 |
+
}
|
139 |
+
return implode('',$address_filters);
|
140 |
+
}
|
141 |
+
|
142 |
+
private function parseAddressFilter($address_filter) {
|
143 |
+
$output = array(
|
144 |
+
'excluding' => false,
|
145 |
+
'countries' => array(),
|
146 |
+
'original' => $address_filter,
|
147 |
+
);
|
148 |
+
|
149 |
+
$address_filter = str_replace(array("\r\n","\r","\n"),array(',',',',','),$address_filter);
|
150 |
+
|
151 |
+
if (preg_match('# *\* *- *\((.*)\) *#s',$address_filter,$result)) {
|
152 |
+
$address_filter = $result[1];
|
153 |
+
$output['excluding'] = true;
|
154 |
+
}
|
155 |
+
|
156 |
+
$tmp_address_filter_array = explode(',',trim($address_filter));
|
157 |
+
|
158 |
+
$concat = false;
|
159 |
+
$concatened = '';
|
160 |
+
$address_filter_array = array();
|
161 |
+
$i = 0;
|
162 |
+
|
163 |
+
foreach ($tmp_address_filter_array as $address_filter) {
|
164 |
+
if ($concat) $concatened .= ','.$address_filter;
|
165 |
+
else {
|
166 |
+
if ($i<count($tmp_address_filter_array)-1 && preg_match('#\(#',$address_filter)) {
|
167 |
+
$concat = true;
|
168 |
+
$concatened .= $address_filter;
|
169 |
+
} else $address_filter_array[] = $address_filter;
|
170 |
+
}
|
171 |
+
if (preg_match('#\)#',$address_filter)) {
|
172 |
+
$address_filter_array[] = $concatened;
|
173 |
+
$concatened = '';
|
174 |
+
$concat = false;
|
175 |
+
}
|
176 |
+
$i++;
|
177 |
+
}
|
178 |
+
|
179 |
+
foreach ($address_filter_array as $address_filter) {
|
180 |
+
$address_filter = trim($address_filter);
|
181 |
+
if (trim($address_filter)!='') {
|
182 |
+
if (preg_match('# *([^,(]+) *(-)? *(?:\( *(-)? *(.*)\))? *#s',$address_filter,$result)) {
|
183 |
+
$country_code = $result[1];
|
184 |
+
|
185 |
+
$region_codes = explode(',',$result[4]);
|
186 |
+
$in_array = false;
|
187 |
+
for ($i=count($region_codes); --$i>=0;) {
|
188 |
+
$code = trim($region_codes[$i]);
|
189 |
+
$region_codes[$i] = $code;
|
190 |
+
}
|
191 |
+
/*$in_array = in_array($address['region_code'],$region_codes,true) || in_array($address['postcode'],$region_codes,true);*/
|
192 |
+
$excluding_region = $result[2]=='-' || $result[3]=='-';
|
193 |
+
$output['countries'][] = array(
|
194 |
+
'excluding' => $excluding_region,
|
195 |
+
'country_code' => $country_code,
|
196 |
+
'region_codes' => implode(',',$region_codes),
|
197 |
+
'original' => $address_filter,
|
198 |
+
);
|
199 |
+
} else {
|
200 |
+
$output['countries'][] = array(
|
201 |
+
'excluding' => null,
|
202 |
+
'country_code' => $address_filter,
|
203 |
+
'region_codes' => null,
|
204 |
+
'original' => $address_filter,
|
205 |
+
);
|
206 |
+
}
|
207 |
+
}
|
208 |
+
}
|
209 |
+
return $output;
|
210 |
+
}
|
211 |
+
|
212 |
+
private function getRowUI($row, $selected) {
|
213 |
+
$row['_ID_']['value'] = isset($row['_ID_']['value']) ? $row['_ID_']['value'] : uniqid('c');
|
214 |
+
$row_id = $row['_ID_']['value'];
|
215 |
+
|
216 |
+
if (isset($row['lines'])) {
|
217 |
+
$output = "<div id=\"r-".$row_id."-container\" class=\"row-container has-error ignored-lines".($selected ? ' selected' : '')."\">"
|
218 |
+
."<div class=\"row-header\" onclick=\"ocseditor.selectRow('".$row_id."');\">"
|
219 |
+
."<div class=\"row-actions\">"
|
220 |
+
.$this->button('Apply changes',"ocseditor.applyChanges();")
|
221 |
+
.$this->button('Delete',"ocseditor.removeRow(this);",'delete')
|
222 |
+
."</div>"
|
223 |
+
."<div class=\"row-title\">".$this->__('Ignored lines')."</div></div>"
|
224 |
+
."<div class=\"properties-container\"><textarea class=\"field\">".$row['lines']."</textarea></div></div>";
|
225 |
+
return $output;
|
226 |
+
}
|
227 |
+
|
228 |
+
if (!isset($row['label'])) {
|
229 |
+
$row['label']['value'] = $this->__('New shipping method');
|
230 |
+
}
|
231 |
+
|
232 |
+
$properties = array(
|
233 |
+
'enabled' => 'Enabled',
|
234 |
+
'code' => 'Code',
|
235 |
+
'label' => 'Label',
|
236 |
+
'description' => 'Description',
|
237 |
+
'destination' => 'Destination',
|
238 |
+
'origin' => 'Origin',
|
239 |
+
'conditions' => 'Conditions',
|
240 |
+
'fees' => 'Fees',
|
241 |
+
'customer_groups' => 'Customer groups',
|
242 |
+
'tracking_url' => 'Tracking url',
|
243 |
+
'*comment' => 'Comment',
|
244 |
+
);
|
245 |
+
|
246 |
+
$label = $row['label']['value'];
|
247 |
+
$output = "<div id=\"r-".$row_id."-container\" class=\"row-container".($selected ? ' selected' : '')."\">"
|
248 |
+
."<div class=\"row-header\" onclick=\"ocseditor.selectRow('".$row_id."');\">"
|
249 |
+
."<div class=\"row-actions\">".$this->button('Delete',"ocseditor.removeRow(this);",'delete')."</div><div class=\"row-title\">".$label."</div></div>"
|
250 |
+
."<div class=\"properties-container\">";
|
251 |
+
$list = "<ul class=\"properties-list\">";
|
252 |
+
$j = 0;
|
253 |
+
foreach ($properties as $property_key => $label) {
|
254 |
+
$cleaned_property = $this->cleanKey($property_key);
|
255 |
+
$value = isset($row[$property_key]) ? trim($row[$property_key]['value']) : '';
|
256 |
+
$list .= "<li id=\"r-".$row_id."-p-".$cleaned_property."-item\" class=\"property-item".($j==0 ? ' selected' : '')
|
257 |
+
.(empty($value) ? ' empty' : '')
|
258 |
+
."\" onclick=\"ocseditor.selectProperty('".$row_id."','".$cleaned_property."');\">".$this->__($label)."</li>";
|
259 |
+
$output .= "<div id=\"r-".$row_id."-p-".$cleaned_property."-container\" class=\"property-container"
|
260 |
+
.($j==0 ? ' selected' : '')."\" property-name=\"".$property_key."\">"
|
261 |
+
."<div class=\"buttons-set\" style=\"text-align:right;\">".$this->button('Help',"ocseditor.help('property.".$property_key."');",'help')."</div>"
|
262 |
+
.$this->getPropertyHelper($row_id,$property_key,$row[$property_key])."</div>";
|
263 |
+
$j++;
|
264 |
+
}
|
265 |
+
foreach ($row as $property_key => $property) {
|
266 |
+
if (!isset($properties[$property_key]) && substr($property_key,0,1)!='*') {
|
267 |
+
$label = $property_key;
|
268 |
+
$cleaned_property = $this->cleanKey($property_key);
|
269 |
+
$value = isset($row[$property_key]) ? trim($row[$property_key]['value']) : '';
|
270 |
+
$list .= "<li id=\"r-".$row_id."-p-".$cleaned_property."-item\" class=\"property-item".($j==0 ? ' selected' : '')
|
271 |
+
.(empty($value) ? ' empty' : '').($cleaned_property=='_ID_' ? ' hide' : '')
|
272 |
+
."\" onclick=\"ocseditor.selectProperty('".$row_id."','".$cleaned_property."');\">".$this->__($label)."</li>";
|
273 |
+
$output .= "<div id=\"r-".$row_id."-p-".$cleaned_property."-container\" class=\"property-container"
|
274 |
+
.($j==0 ? ' selected' : '')."\" property-name=\"".$property_key."\">"
|
275 |
+
."<div class=\"buttons-set\" style=\"text-align:right;\">".$this->button('Help',"ocseditor.help('property.".$property_key."');",'help')."</div>"
|
276 |
+
.$this->getPropertyHelper($row_id,$property_key,$property)."</div>";
|
277 |
+
$j++;
|
278 |
+
}
|
279 |
+
}
|
280 |
+
$output .= $list."</div></div>";
|
281 |
+
return $output;
|
282 |
+
}
|
283 |
+
|
284 |
+
private function getConfigErrors($config) {
|
285 |
+
$script = "ocseditor.resetErrors();";
|
286 |
+
foreach ($config as $row_code => $row) {
|
287 |
+
if (isset($row['*messages'])) {
|
288 |
+
$error = '';
|
289 |
+
foreach ($row['*messages'] as $message) {
|
290 |
+
$error .= "<p>".$this->__($message)."</p>";
|
291 |
+
}
|
292 |
+
if ($error!='') $script .= "ocseditor.setError('".$row['_ID_']['value']."','','".$this->jsEscape($error)."');";
|
293 |
+
}
|
294 |
+
foreach ($row as $property_key => $property) {
|
295 |
+
if (isset($property['messages'])) {
|
296 |
+
$error = '';
|
297 |
+
foreach ($property['messages'] as $message) {
|
298 |
+
$error .= "<p>".$this->__($message)."</p>";
|
299 |
+
}
|
300 |
+
if ($error!='') {
|
301 |
+
$script .= "ocseditor.setError('".$row['_ID_']['value']."','".$property_key."','"
|
302 |
+
.$this->jsEscape($error
|
303 |
+
.($property['value']!=$property['original_value'] ?
|
304 |
+
"<p>"
|
305 |
+
.$this->button('Correct',"ocseditor.correct('".$row['_ID_']['value']."','".$property_key."','".$this->jsEscape($property['value'])."');")
|
306 |
+
."</p>" : '')
|
307 |
+
)."');";
|
308 |
+
}
|
309 |
+
}
|
310 |
+
}
|
311 |
+
}
|
312 |
+
//$script .= "alert('".str_replace(array("\r\n","\n","\'","'"),array(" "," ","\\\'","\'"),$script)."');";
|
313 |
+
return $script;
|
314 |
+
}
|
315 |
+
|
316 |
+
private function loadConfig($input) {
|
317 |
+
include_once $this->getIncludingPath('ChronorelaisShippingHelper.php');
|
318 |
+
|
319 |
+
$helper = new ChronorelaisShippingHelper($input);
|
320 |
+
$helper->checkConfig();
|
321 |
+
$config = $helper->getConfig();
|
322 |
+
//print_r($config);
|
323 |
+
|
324 |
+
$output = "<div class=\"buttons-set\">"
|
325 |
+
.$this->button('Add a shipping method',"ocseditor.addRow();",'add')
|
326 |
+
."</div><div class=\"config-container\">";
|
327 |
+
$i = 0;
|
328 |
+
foreach ($config as &$row) {
|
329 |
+
$output .= $this->getRowUI($row,$i==0);
|
330 |
+
$i++;
|
331 |
+
}
|
332 |
+
$output .= "</div><script type=\"text/javascript\">".$this->getConfigErrors($config)."</script>";
|
333 |
+
return $output;
|
334 |
+
}
|
335 |
+
|
336 |
+
public function indexAction() {
|
337 |
+
header('Content-Type: text/html; charset=UTF-8');
|
338 |
+
|
339 |
+
include_once $this->getIncludingPath('countries.inc.php');
|
340 |
+
|
341 |
+
switch ($_POST['what']) {
|
342 |
+
case 'open':
|
343 |
+
$output = ""
|
344 |
+
// Donate page
|
345 |
+
//.$this->page('donate',"Support the development of Chronorelais Shipping extension",$this->__('{ocseditor.donate-page.content}'))
|
346 |
+
// Help page
|
347 |
+
.$this->page('help',"Chronorelais Shipping extension help",'')
|
348 |
+
// Main page
|
349 |
+
.$this->pageHeader("Chronorelais Shipping configuration editor",
|
350 |
+
$this->button('Save',"ocseditor.save();",'save')
|
351 |
+
.$this->button('Export',"ocseditor.saveToFile();",'')
|
352 |
+
.$this->button('Load',"ocseditor.showConfigLoader();",'')
|
353 |
+
.$this->button('Close',"ocseditor.close();",'cancel')
|
354 |
+
)
|
355 |
+
."<div id=\"ocs-editor-config-loader\">"
|
356 |
+
."<textarea></textarea>"
|
357 |
+
."<div class=\"buttons-set\">"
|
358 |
+
.$this->button('Load',"ocseditor.loadConfig();",'')
|
359 |
+
.$this->button('Cancel',"ocseditor.hideConfigLoader();",'cancel')
|
360 |
+
."</div>"
|
361 |
+
."</div>"
|
362 |
+
."<div id=\"ocs-editor-config-container\">".$this->loadConfig($_POST['input'])."</div>"
|
363 |
+
/*."<div class=\"donate-container\">"
|
364 |
+
."<table cellspacing=\"0\"><tr>"
|
365 |
+
."<td>".$this->__('You appreciate this extension and would like to help?')."</td>"
|
366 |
+
."<td class=\"form-buttons\">"
|
367 |
+
.$this->button('Donate',"ocseditor.openPage('donate');",'donate')
|
368 |
+
."</td>"
|
369 |
+
."</tr></table>"
|
370 |
+
."</div>"*/
|
371 |
+
;
|
372 |
+
echo $output;
|
373 |
+
exit;
|
374 |
+
case 'help':
|
375 |
+
echo $this->__('{ocseditor.help.'.$_POST['input'].'}');
|
376 |
+
exit;
|
377 |
+
case 'add-row':
|
378 |
+
echo $this->getRowUI(array(),true);
|
379 |
+
exit;
|
380 |
+
case 'load-config':
|
381 |
+
echo $this->loadConfig($_POST['config']);
|
382 |
+
exit;
|
383 |
+
case 'check-config':
|
384 |
+
include_once $this->getIncludingPath('ChronorelaisShippingHelper.php');
|
385 |
+
|
386 |
+
$helper = new ChronorelaisShippingHelper(urldecode($_POST['config']));
|
387 |
+
$helper->checkConfig();
|
388 |
+
print_r($helper->getConfig(),$out);
|
389 |
+
//$script = "alert('".$this->jsEscape(urldecode($_POST['config']))."');";
|
390 |
+
$script = $this->getConfigErrors($helper->getConfig());
|
391 |
+
//$script = "alert('".$this->jsEscape($this->getConfigErrors($helper->getConfig()))."');";
|
392 |
+
break;
|
393 |
+
case 'save-to-file':
|
394 |
+
include_once $this->getIncludingPath('ChronorelaisShippingHelper.php');
|
395 |
+
|
396 |
+
$helper = new ChronorelaisShippingHelper(urldecode($_POST['config']));
|
397 |
+
$formatted_config = $helper->formatConfig(false);
|
398 |
+
$this->forceDownload('chronorelais-shipping-config.txt',$formatted_config);
|
399 |
+
exit;
|
400 |
+
case 'get-address-filters':
|
401 |
+
$result = $this->parseAddressFilter($_POST['input']);
|
402 |
+
echo $this->getAddressFilters($result);
|
403 |
+
exit;
|
404 |
+
}
|
405 |
+
|
406 |
+
echo "<script type=\"text/javascript\">".$script."</script>";
|
407 |
+
exit;
|
408 |
+
}
|
409 |
+
}
|
app/code/community/Chronopost/Chronorelais/controllers/Checkout/MultishippingController.php
CHANGED
@@ -78,15 +78,15 @@ class Chronopost_Chronorelais_Checkout_MultishippingController extends Mage_Chec
|
|
78 |
$addresses = $this->_getCheckout()->getQuote()->getAllShippingAddresses();
|
79 |
foreach ($addresses as $address) {
|
80 |
if ($address->getId() == $this->getRequest()->get('index')) {
|
81 |
-
|
82 |
->save()
|
83 |
-
->setCollectShippingRates(true)
|
84 |
|
85 |
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl",array('trace'=> 0,'connection_timeout'=>10));
|
86 |
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0,$postcode,0));
|
87 |
|
88 |
if ($webservbt) {
|
89 |
-
Mage::getSingleton('core/session')->
|
90 |
$this->loadLayout('checkout_multishipping_shippingchronorelais');
|
91 |
$result['update_section'] = array(
|
92 |
'name' => 'checkout-shipping-method-chronorelais-load_'.$this->getRequest()->get('index'),
|
@@ -111,38 +111,4 @@ class Chronopost_Chronorelais_Checkout_MultishippingController extends Mage_Chec
|
|
111 |
}
|
112 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
113 |
}
|
114 |
-
|
115 |
-
/**
|
116 |
-
* Change shipping postal code
|
117 |
-
* /
|
118 |
-
public function changeMultiPostalCodeAction()
|
119 |
-
{
|
120 |
-
$result = array();
|
121 |
-
$webservbt = array();
|
122 |
-
$postcode = $this->getRequest()->get('zip');
|
123 |
-
if($postcode) {
|
124 |
-
$quote = $this->_getCheckout()->getQuote();
|
125 |
-
$address = $quote->getShippingAddress();
|
126 |
-
//$address = $quote->getAddressById($this->getRequest()->get('index'));
|
127 |
-
$address->setPostcode($postcode)/*
|
128 |
-
->save()
|
129 |
-
->setCollectShippingRates(true)* /;
|
130 |
-
|
131 |
-
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl",array('trace'=> 0,'connection_timeout'=>10));
|
132 |
-
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0,$postcode,0));
|
133 |
-
}
|
134 |
-
if ($webservbt) {
|
135 |
-
$this->loadLayout('checkout_multishipping_shippingchronorelais');
|
136 |
-
$result['update_section'] = array(
|
137 |
-
'name' => 'checkout-shipping-method-chronorelais-load_'.$this->getRequest()->get('index'),
|
138 |
-
'html' => str_replace("%%id%%", $this->getRequest()->get('index'), $this->_getChronoRelaisHtml())
|
139 |
-
);
|
140 |
-
$result['relaypoints'] = $webservbt;
|
141 |
-
} else {
|
142 |
-
$result['error'] = true;
|
143 |
-
$result['message'] = $this->__('No point relay is associated with this postcode');
|
144 |
-
}
|
145 |
-
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
146 |
-
}
|
147 |
-
*/
|
148 |
}
|
78 |
$addresses = $this->_getCheckout()->getQuote()->getAllShippingAddresses();
|
79 |
foreach ($addresses as $address) {
|
80 |
if ($address->getId() == $this->getRequest()->get('index')) {
|
81 |
+
/*$address->setPostcode($postcode)
|
82 |
->save()
|
83 |
+
->setCollectShippingRates(true);*/
|
84 |
|
85 |
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl",array('trace'=> 0,'connection_timeout'=>10));
|
86 |
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0,$postcode,0));
|
87 |
|
88 |
if ($webservbt) {
|
89 |
+
Mage::getSingleton('core/session')->setMultiPostcode($postcode);
|
90 |
$this->loadLayout('checkout_multishipping_shippingchronorelais');
|
91 |
$result['update_section'] = array(
|
92 |
'name' => 'checkout-shipping-method-chronorelais-load_'.$this->getRequest()->get('index'),
|
111 |
}
|
112 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
113 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
114 |
}
|
app/code/community/Chronopost/Chronorelais/controllers/Checkout/OnepageController.php
CHANGED
@@ -1,51 +1,50 @@
|
|
1 |
<?php
|
2 |
|
3 |
require_once 'Mage/Checkout/controllers/OnepageController.php';
|
4 |
-
|
5 |
-
{
|
|
|
6 |
protected $_sectionUpdateFunctions = array(
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
);
|
12 |
|
13 |
/**
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
protected function _getChronoRelaisHtml()
|
19 |
-
{
|
20 |
return $this->getLayout()->getBlock('root')->toHtml();
|
21 |
}
|
22 |
|
23 |
/**
|
24 |
-
|
25 |
-
|
26 |
-
public function indexAction()
|
27 |
-
{
|
28 |
if (!extension_loaded('soap')) {
|
29 |
-
if(Mage::helper('chronorelais')->getConfigData('carriers/chronopost/active') || Mage::helper('chronorelais')->getConfigData('carriers/chronorelais/active') || Mage::helper('chronorelais')->getConfigData('carriers/chronoexpress/active')) {
|
30 |
Mage::getSingleton('checkout/session')->addError($this->__('The SOAP extension is not installed in the server. Please contact the site administrator. Sorry for inconvenience.'));
|
31 |
$this->_redirect('checkout/cart');
|
32 |
return;
|
33 |
-
}
|
34 |
}
|
35 |
parent::indexAction();
|
36 |
}
|
37 |
|
38 |
/**
|
39 |
-
|
40 |
-
|
41 |
-
public function saveBillingAction()
|
42 |
-
{
|
43 |
if ($this->_expireAjax()) {
|
44 |
return;
|
45 |
}
|
46 |
if ($this->getRequest()->isPost()) {
|
47 |
-
$postData = $this->getRequest()->getPost('billing', array());
|
48 |
-
$data = $this->_filterPostData($postData);
|
|
|
49 |
$customerAddressId = $this->getRequest()->getPost('billing_address_id', false);
|
50 |
|
51 |
if (isset($data['email'])) {
|
@@ -58,31 +57,32 @@ class Chronopost_Chronorelais_Checkout_OnepageController extends Mage_Checkout_O
|
|
58 |
if ($this->getOnepage()->getQuote()->isVirtual()) {
|
59 |
$result['goto_section'] = 'payment';
|
60 |
$result['update_section'] = array(
|
61 |
-
|
62 |
-
|
63 |
);
|
64 |
} elseif (isset($data['use_for_shipping']) && $data['use_for_shipping'] == 1) {
|
65 |
$result['goto_section'] = 'shipping_method';
|
66 |
$result['update_section'] = array(
|
67 |
-
|
68 |
-
|
69 |
);
|
70 |
|
71 |
$result['allow_sections'] = array('shipping');
|
72 |
$result['duplicateBillingInfo'] = 'true';
|
73 |
-
|
74 |
//WEC chronorelais
|
75 |
-
if(
|
76 |
-
unset(
|
77 |
}
|
78 |
-
|
79 |
-
if(!array_key_exists("company"
|
80 |
-
|
|
|
|
|
81 |
$_SESSION["customer_shipping_address_reference"]["data"] = $data;
|
82 |
$_SESSION["customer_shipping_address_reference"]["customerAddressId"] = $customerAddressId;
|
83 |
-
$_SESSION["customer_shipping_address_reference"]["available"] = false;
|
84 |
//ENDWEC
|
85 |
-
|
86 |
} else {
|
87 |
$result['goto_section'] = 'shipping';
|
88 |
}
|
@@ -92,198 +92,190 @@ class Chronopost_Chronorelais_Checkout_OnepageController extends Mage_Checkout_O
|
|
92 |
}
|
93 |
|
94 |
/**
|
95 |
-
|
96 |
-
|
97 |
-
public function saveShippingAction()
|
98 |
-
{
|
99 |
if ($this->_expireAjax()) {
|
100 |
return;
|
101 |
}
|
102 |
if ($this->getRequest()->isPost()) {
|
103 |
$data = $this->getRequest()->getPost('shipping', array());
|
104 |
$customerAddressId = $this->getRequest()->getPost('shipping_address_id', false);
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
$result = $this->getOnepage()->saveShipping($data, $customerAddressId);
|
109 |
|
110 |
if (!isset($result['error'])) {
|
111 |
$result['goto_section'] = 'shipping_method';
|
112 |
$result['update_section'] = array(
|
113 |
-
|
114 |
-
|
115 |
);
|
116 |
}
|
117 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
118 |
}
|
119 |
-
|
120 |
//WEC chronorelais
|
121 |
-
if(
|
122 |
-
unset(
|
|
|
|
|
|
|
123 |
}
|
124 |
-
if(!array_key_exists("company",$data)){ $data["company"]=""; }
|
125 |
$_SESSION["customer_shipping_address_reference"]["data"] = $data;
|
126 |
$_SESSION["customer_shipping_address_reference"]["customerAddressId"] = $customerAddressId;
|
127 |
-
$_SESSION["customer_shipping_address_reference"]["available"] = false;
|
128 |
|
129 |
//ENDWEC
|
130 |
}
|
131 |
|
132 |
/**
|
133 |
-
|
134 |
-
|
135 |
-
public function saveShippingMethodAction()
|
136 |
-
{
|
137 |
if ($this->_expireAjax()) {
|
138 |
return;
|
139 |
}
|
140 |
-
|
141 |
if ($this->getRequest()->isPost()) {
|
142 |
-
|
143 |
//WEC chronorelais
|
144 |
-
if(
|
145 |
$data = $_SESSION["customer_shipping_address_reference"]["data"];
|
146 |
$customerAddressId = $_SESSION["customer_shipping_address_reference"]["customerAddressId"];
|
147 |
$_SESSION["customer_shipping_address_reference"]["available"] = false;
|
148 |
-
|
149 |
$result = $this->getOnepage()->saveShipping($data, $customerAddressId);
|
150 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
151 |
}
|
152 |
-
|
153 |
$method = $this->getRequest()->getParam('shipping_method');
|
154 |
-
$quote = Mage::getSingleton('checkout/cart')->init()->getQuote();
|
155 |
$address = $quote->getShippingAddress();
|
156 |
-
|
157 |
-
|
158 |
-
if( substr($this->getRequest()->getParam('shipping_method'),0,12) == "chronorelais" ){
|
159 |
-
|
160 |
$relaisId = $this->getRequest()->getParam('shipping_method_chronorelais');
|
161 |
-
if($relaisId!=""){
|
162 |
-
|
163 |
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl");
|
164 |
-
$webservbt = $client->__call("rechercheBtParIdChronopostA2Pas",array($relaisId));
|
165 |
-
$relais = $webservbt[0]
|
166 |
-
|
167 |
-
if($relais) {
|
168 |
$address->setCity($relais->localite)
|
169 |
-
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
$_SESSION["customer_shipping_address_reference"]["available"] = true;
|
177 |
-
}
|
178 |
}
|
179 |
}
|
180 |
-
|
181 |
$methodTitle = "";
|
182 |
-
if(isset($relais->localite)) {
|
183 |
-
$methodTitle = ' - '
|
184 |
}
|
185 |
if ($method) {
|
186 |
foreach ($address->getAllShippingRates() as $rate) {
|
187 |
-
if ($rate->getCode()
|
188 |
-
$address->setShippingDescription($rate->getCarrierTitle().' - '
|
189 |
break;
|
190 |
}
|
191 |
}
|
192 |
}
|
193 |
-
|
194 |
//ENDWEC chronorelais
|
195 |
-
|
196 |
-
$data = $this->getRequest()->getPost('shipping_method', '');
|
197 |
|
|
|
198 |
$result = $this->getOnepage()->saveShippingMethod($data);
|
199 |
-
|
200 |
/*
|
201 |
-
|
202 |
-
|
203 |
-
if(!$result) {
|
204 |
-
Mage::dispatchEvent('checkout_controller_onepage_save_shipping_method', array('request'
|
205 |
-
|
|
|
|
|
206 |
|
207 |
$result['goto_section'] = 'payment';
|
208 |
$result['update_section'] = array(
|
209 |
-
|
210 |
-
|
211 |
);
|
212 |
}
|
|
|
213 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
214 |
}
|
215 |
}
|
216 |
-
|
217 |
/**
|
218 |
-
|
219 |
-
|
220 |
-
public function getRelaisAction()
|
221 |
-
{
|
222 |
if ($this->_expireAjax()) {
|
223 |
return;
|
224 |
}
|
225 |
$result = array();
|
226 |
-
$quote = Mage::getSingleton('checkout/cart')->init()->getQuote();
|
227 |
$address = $quote->getShippingAddress();
|
228 |
$postcode = $address->getPostcode();
|
229 |
|
230 |
if (extension_loaded('soap')) {
|
231 |
-
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl",array('trace'=> 0,'connection_timeout'=>10));
|
232 |
-
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0
|
233 |
-
|
234 |
if ($webservbt) {
|
235 |
$this->loadLayout('checkout_onepage_shippingchronorelais');
|
236 |
$result['goto_section'] = 'shipping-method';
|
237 |
$result['update_section'] = array(
|
238 |
-
|
239 |
-
|
240 |
);
|
241 |
$result['relaypoints'] = $webservbt;
|
242 |
} else {
|
243 |
-
$result['error']
|
244 |
$result['message'] = $this->__('No point relay is associated with this postcode');
|
245 |
}
|
246 |
} else {
|
247 |
-
$result['error']
|
248 |
$result['message'] = $this->__('Sorry for inconvenience, The SOAP extension is not installed in the server. Please contact the site administrator.');
|
249 |
}
|
250 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
251 |
}
|
252 |
|
253 |
/**
|
254 |
-
|
255 |
-
|
256 |
-
public function changePostalCodeAction()
|
257 |
-
{
|
258 |
if ($this->_expireAjax()) {
|
259 |
return;
|
260 |
}
|
261 |
$result = array();
|
262 |
-
$webservbt = array();
|
263 |
$postcode = $this->getRequest()->getPost('mappostalcode');
|
264 |
-
if($postcode) {
|
265 |
-
$quote = Mage::getSingleton('checkout/cart')->init()->getQuote();
|
266 |
$address = $quote->getShippingAddress();
|
267 |
$address->setPostcode($postcode)
|
268 |
-
|
269 |
-
|
270 |
-
|
271 |
-
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl",array('trace'=> 0,'connection_timeout'=>10));
|
272 |
-
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate",array(0
|
273 |
}
|
274 |
if ($webservbt) {
|
275 |
$this->loadLayout('checkout_onepage_shippingchronorelais');
|
276 |
$result['goto_section'] = 'shipping-method';
|
277 |
$result['update_section'] = array(
|
278 |
-
|
279 |
-
|
280 |
);
|
281 |
$result['relaypoints'] = $webservbt;
|
282 |
} else {
|
283 |
-
$result['error']
|
284 |
$result['message'] = $this->__('No point relay is associated with this postcode');
|
285 |
}
|
286 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
287 |
}
|
288 |
-
|
289 |
}
|
1 |
<?php
|
2 |
|
3 |
require_once 'Mage/Checkout/controllers/OnepageController.php';
|
4 |
+
|
5 |
+
class Chronopost_Chronorelais_Checkout_OnepageController extends Mage_Checkout_OnepageController {
|
6 |
+
|
7 |
protected $_sectionUpdateFunctions = array(
|
8 |
+
'payment-method' => '_getPaymentMethodsHtml',
|
9 |
+
'shipping-method' => '_getShippingMethodsHtml',
|
10 |
+
'review' => '_getReviewHtml',
|
11 |
+
'shipping-method-chronorelais' => '_getReviewHtml',
|
12 |
);
|
13 |
|
14 |
/**
|
15 |
+
* Get payment method step html
|
16 |
+
*
|
17 |
+
* @return string
|
18 |
+
*/
|
19 |
+
protected function _getChronoRelaisHtml() {
|
|
|
20 |
return $this->getLayout()->getBlock('root')->toHtml();
|
21 |
}
|
22 |
|
23 |
/**
|
24 |
+
* Checkout page
|
25 |
+
*/
|
26 |
+
public function indexAction() {
|
|
|
27 |
if (!extension_loaded('soap')) {
|
28 |
+
if (Mage::helper('chronorelais')->getConfigData('carriers/chronopost/active') || Mage::helper('chronorelais')->getConfigData('carriers/chronorelais/active') || Mage::helper('chronorelais')->getConfigData('carriers/chronoexpress/active')) {
|
29 |
Mage::getSingleton('checkout/session')->addError($this->__('The SOAP extension is not installed in the server. Please contact the site administrator. Sorry for inconvenience.'));
|
30 |
$this->_redirect('checkout/cart');
|
31 |
return;
|
32 |
+
}
|
33 |
}
|
34 |
parent::indexAction();
|
35 |
}
|
36 |
|
37 |
/**
|
38 |
+
* save checkout billing address
|
39 |
+
*/
|
40 |
+
public function saveBillingAction() {
|
|
|
41 |
if ($this->_expireAjax()) {
|
42 |
return;
|
43 |
}
|
44 |
if ($this->getRequest()->isPost()) {
|
45 |
+
// $postData = $this->getRequest()->getPost('billing', array());
|
46 |
+
// $data = $this->_filterPostData($postData);
|
47 |
+
$data = $this->getRequest()->getPost('billing', array());
|
48 |
$customerAddressId = $this->getRequest()->getPost('billing_address_id', false);
|
49 |
|
50 |
if (isset($data['email'])) {
|
57 |
if ($this->getOnepage()->getQuote()->isVirtual()) {
|
58 |
$result['goto_section'] = 'payment';
|
59 |
$result['update_section'] = array(
|
60 |
+
'name' => 'payment-method',
|
61 |
+
'html' => $this->_getPaymentMethodsHtml()
|
62 |
);
|
63 |
} elseif (isset($data['use_for_shipping']) && $data['use_for_shipping'] == 1) {
|
64 |
$result['goto_section'] = 'shipping_method';
|
65 |
$result['update_section'] = array(
|
66 |
+
'name' => 'shipping-method',
|
67 |
+
'html' => $this->_getShippingMethodsHtml()
|
68 |
);
|
69 |
|
70 |
$result['allow_sections'] = array('shipping');
|
71 |
$result['duplicateBillingInfo'] = 'true';
|
72 |
+
|
73 |
//WEC chronorelais
|
74 |
+
if (isset($_SESSION["customer_shipping_address_reference"])) {
|
75 |
+
unset($_SESSION["customer_shipping_address_reference"]);
|
76 |
}
|
77 |
+
|
78 |
+
if (!array_key_exists("company", $data)) {
|
79 |
+
$data["company"] = "";
|
80 |
+
}
|
81 |
+
|
82 |
$_SESSION["customer_shipping_address_reference"]["data"] = $data;
|
83 |
$_SESSION["customer_shipping_address_reference"]["customerAddressId"] = $customerAddressId;
|
84 |
+
$_SESSION["customer_shipping_address_reference"]["available"] = false;
|
85 |
//ENDWEC
|
|
|
86 |
} else {
|
87 |
$result['goto_section'] = 'shipping';
|
88 |
}
|
92 |
}
|
93 |
|
94 |
/**
|
95 |
+
* Shipping address save action
|
96 |
+
*/
|
97 |
+
public function saveShippingAction() {
|
|
|
98 |
if ($this->_expireAjax()) {
|
99 |
return;
|
100 |
}
|
101 |
if ($this->getRequest()->isPost()) {
|
102 |
$data = $this->getRequest()->getPost('shipping', array());
|
103 |
$customerAddressId = $this->getRequest()->getPost('shipping_address_id', false);
|
|
|
|
|
|
|
104 |
$result = $this->getOnepage()->saveShipping($data, $customerAddressId);
|
105 |
|
106 |
if (!isset($result['error'])) {
|
107 |
$result['goto_section'] = 'shipping_method';
|
108 |
$result['update_section'] = array(
|
109 |
+
'name' => 'shipping-method',
|
110 |
+
'html' => $this->_getShippingMethodsHtml()
|
111 |
);
|
112 |
}
|
113 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
114 |
}
|
115 |
+
|
116 |
//WEC chronorelais
|
117 |
+
if (isset($_SESSION["customer_shipping_address_reference"])) {
|
118 |
+
unset($_SESSION["customer_shipping_address_reference"]);
|
119 |
+
}
|
120 |
+
if (!array_key_exists("company", $data)) {
|
121 |
+
$data["company"] = "";
|
122 |
}
|
|
|
123 |
$_SESSION["customer_shipping_address_reference"]["data"] = $data;
|
124 |
$_SESSION["customer_shipping_address_reference"]["customerAddressId"] = $customerAddressId;
|
125 |
+
$_SESSION["customer_shipping_address_reference"]["available"] = false;
|
126 |
|
127 |
//ENDWEC
|
128 |
}
|
129 |
|
130 |
/**
|
131 |
+
* Shipping method save action
|
132 |
+
*/
|
133 |
+
public function saveShippingMethodAction() {
|
|
|
134 |
if ($this->_expireAjax()) {
|
135 |
return;
|
136 |
}
|
|
|
137 |
if ($this->getRequest()->isPost()) {
|
138 |
+
|
139 |
//WEC chronorelais
|
140 |
+
if ($_SESSION["customer_shipping_address_reference"]["available"]) {
|
141 |
$data = $_SESSION["customer_shipping_address_reference"]["data"];
|
142 |
$customerAddressId = $_SESSION["customer_shipping_address_reference"]["customerAddressId"];
|
143 |
$_SESSION["customer_shipping_address_reference"]["available"] = false;
|
144 |
+
|
145 |
$result = $this->getOnepage()->saveShipping($data, $customerAddressId);
|
146 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
147 |
}
|
148 |
+
|
149 |
$method = $this->getRequest()->getParam('shipping_method');
|
150 |
+
$quote = $this->getOnepage()->getQuote(); //Mage::getSingleton('checkout/cart')->init()->getQuote();
|
151 |
$address = $quote->getShippingAddress();
|
152 |
+
|
153 |
+
if (substr($this->getRequest()->getParam('shipping_method'), 0, 12) == "chronorelais") {
|
|
|
|
|
154 |
$relaisId = $this->getRequest()->getParam('shipping_method_chronorelais');
|
155 |
+
if ($relaisId != "") {
|
156 |
+
|
157 |
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl");
|
158 |
+
$webservbt = $client->__call("rechercheBtParIdChronopostA2Pas", array($relaisId));
|
159 |
+
$relais = $webservbt[0];
|
160 |
+
|
161 |
+
if ($relais) {
|
162 |
$address->setCity($relais->localite)
|
163 |
+
->setPostcode($relais->codePostal)
|
164 |
+
->setStreet(trim($relais->adresse1 . " " . $relais->adresse2 . " " . $relais->adresse3))
|
165 |
+
->setCompany($relais->nomEnseigne)
|
166 |
+
->setWRelayPointCode($relais->identifiantChronopostPointA2PAS)
|
167 |
+
->save()
|
168 |
+
->setCollectShippingRates(true);
|
169 |
+
|
170 |
$_SESSION["customer_shipping_address_reference"]["available"] = true;
|
171 |
+
}
|
172 |
}
|
173 |
}
|
174 |
+
|
175 |
$methodTitle = "";
|
176 |
+
if (isset($relais->localite)) {
|
177 |
+
$methodTitle = ' - ' . $relais->nomEnseigne . ' - ' . trim($relais->adresse1 . " " . $relais->adresse2 . " " . $relais->adresse3) . ' - ' . $relais->codePostal . ' - ' . $relais->localite;
|
178 |
}
|
179 |
if ($method) {
|
180 |
foreach ($address->getAllShippingRates() as $rate) {
|
181 |
+
if ($rate->getCode() == $method) {
|
182 |
+
$address->setShippingDescription($rate->getCarrierTitle() . ' - ' . $rate->getMethodTitle() . $methodTitle);
|
183 |
break;
|
184 |
}
|
185 |
}
|
186 |
}
|
|
|
187 |
//ENDWEC chronorelais
|
|
|
|
|
188 |
|
189 |
+
$data = $this->getRequest()->getPost('shipping_method', '');
|
190 |
$result = $this->getOnepage()->saveShippingMethod($data);
|
|
|
191 |
/*
|
192 |
+
$result will have erro data if shipping method is empty
|
193 |
+
*/
|
194 |
+
if (!$result) {
|
195 |
+
Mage::dispatchEvent('checkout_controller_onepage_save_shipping_method', array('request' => $this->getRequest(),
|
196 |
+
'quote' => $this->getOnepage()->getQuote()));
|
197 |
+
$this->getOnepage()->getQuote()->collectTotals();
|
198 |
+
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
199 |
|
200 |
$result['goto_section'] = 'payment';
|
201 |
$result['update_section'] = array(
|
202 |
+
'name' => 'payment-method',
|
203 |
+
'html' => $this->_getPaymentMethodsHtml()
|
204 |
);
|
205 |
}
|
206 |
+
$this->getOnepage()->getQuote()->collectTotals()->save();
|
207 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
208 |
}
|
209 |
}
|
210 |
+
|
211 |
/**
|
212 |
+
* Get relais
|
213 |
+
*/
|
214 |
+
public function getRelaisAction() {
|
|
|
215 |
if ($this->_expireAjax()) {
|
216 |
return;
|
217 |
}
|
218 |
$result = array();
|
219 |
+
$quote = $this->getOnepage()->getQuote(); //Mage::getSingleton('checkout/cart')->init()->getQuote();
|
220 |
$address = $quote->getShippingAddress();
|
221 |
$postcode = $address->getPostcode();
|
222 |
|
223 |
if (extension_loaded('soap')) {
|
224 |
+
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl", array('trace' => 0, 'connection_timeout' => 10));
|
225 |
+
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate", array(0, $postcode, 0));
|
226 |
+
|
227 |
if ($webservbt) {
|
228 |
$this->loadLayout('checkout_onepage_shippingchronorelais');
|
229 |
$result['goto_section'] = 'shipping-method';
|
230 |
$result['update_section'] = array(
|
231 |
+
'name' => 'shipping-method-chronorelais',
|
232 |
+
'html' => $this->_getChronoRelaisHtml()
|
233 |
);
|
234 |
$result['relaypoints'] = $webservbt;
|
235 |
} else {
|
236 |
+
$result['error'] = true;
|
237 |
$result['message'] = $this->__('No point relay is associated with this postcode');
|
238 |
}
|
239 |
} else {
|
240 |
+
$result['error'] = true;
|
241 |
$result['message'] = $this->__('Sorry for inconvenience, The SOAP extension is not installed in the server. Please contact the site administrator.');
|
242 |
}
|
243 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
244 |
}
|
245 |
|
246 |
/**
|
247 |
+
* Change shipping postal code
|
248 |
+
*/
|
249 |
+
public function changePostalCodeAction() {
|
|
|
250 |
if ($this->_expireAjax()) {
|
251 |
return;
|
252 |
}
|
253 |
$result = array();
|
254 |
+
$webservbt = array();
|
255 |
$postcode = $this->getRequest()->getPost('mappostalcode');
|
256 |
+
if ($postcode) {
|
257 |
+
$quote = $this->getOnepage()->getQuote(); //Mage::getSingleton('checkout/cart')->init()->getQuote();
|
258 |
$address = $quote->getShippingAddress();
|
259 |
$address->setPostcode($postcode)
|
260 |
+
->save()
|
261 |
+
->setCollectShippingRates(true);
|
262 |
+
|
263 |
+
$client = new SoapClient("http://wsshipping.chronopost.fr/soap.point.relais/services/ServiceRechercheBt?wsdl", array('trace' => 0, 'connection_timeout' => 10));
|
264 |
+
$webservbt = $client->__call("rechercheBtParCodeproduitEtCodepostalEtDate", array(0, $postcode, 0));
|
265 |
}
|
266 |
if ($webservbt) {
|
267 |
$this->loadLayout('checkout_onepage_shippingchronorelais');
|
268 |
$result['goto_section'] = 'shipping-method';
|
269 |
$result['update_section'] = array(
|
270 |
+
'name' => 'shipping-method-chronorelais',
|
271 |
+
'html' => $this->_getChronoRelaisHtml()
|
272 |
);
|
273 |
$result['relaypoints'] = $webservbt;
|
274 |
} else {
|
275 |
+
$result['error'] = true;
|
276 |
$result['message'] = $this->__('No point relay is associated with this postcode');
|
277 |
}
|
278 |
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
|
279 |
}
|
280 |
+
|
281 |
}
|
app/code/community/Chronopost/Chronorelais/controllers/ImportController.php
CHANGED
@@ -202,7 +202,7 @@ class Chronopost_Chronorelais_ImportController extends Mage_Adminhtml_Controller
|
|
202 |
}
|
203 |
|
204 |
$track = Mage::getModel('sales/order_shipment_track')
|
205 |
-
->setNumber($trackingNumber)
|
206 |
->setCarrierCode($carrier_code)
|
207 |
->setTitle($trackingTitle)
|
208 |
->setPopup($popup);
|
202 |
}
|
203 |
|
204 |
$track = Mage::getModel('sales/order_shipment_track')
|
205 |
+
->setNumber($trackingNumber) //setTrackingNumber ?
|
206 |
->setCarrierCode($carrier_code)
|
207 |
->setTitle($trackingTitle)
|
208 |
->setPopup($popup);
|
app/code/community/Chronopost/Chronorelais/controllers/RelaisController.php
CHANGED
@@ -1,32 +1,32 @@
|
|
1 |
-
<?php
|
2 |
-
class Chronopost_Chronorelais_RelaisController extends Mage_Core_Controller_Front_Action {
|
3 |
-
|
4 |
-
public function filterAction() {
|
5 |
-
$this->loadLayout();
|
6 |
-
$this->renderLayout();
|
7 |
-
}
|
8 |
-
|
9 |
-
public function detailAction() {
|
10 |
-
$this->loadLayout();
|
11 |
-
$this->renderLayout();
|
12 |
-
}
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Go to the tacking page
|
16 |
-
* external function for mail link "Track Your Order" in shipment mail
|
17 |
-
*/
|
18 |
-
public function trackingAction()
|
19 |
-
{
|
20 |
-
if($this->getRequest()->isGet()) {
|
21 |
-
if($hash = $this->getRequest()->getParam('hash')) {
|
22 |
-
$req_values = Mage::helper('shipping')->decodeTrackingHash($hash);
|
23 |
-
if($req_values) {
|
24 |
-
$order = Mage::getModel('sales/order')->load($req_values['id']);
|
25 |
-
$popup_url = Mage::helper('shipping')->getTrackingPopupUrlBySalesModel($order);
|
26 |
-
header('location: '.$popup_url); exit();
|
27 |
-
}
|
28 |
-
}
|
29 |
-
}
|
30 |
-
}
|
31 |
-
|
32 |
}
|
1 |
+
<?php
|
2 |
+
class Chronopost_Chronorelais_RelaisController extends Mage_Core_Controller_Front_Action {
|
3 |
+
|
4 |
+
public function filterAction() {
|
5 |
+
$this->loadLayout();
|
6 |
+
$this->renderLayout();
|
7 |
+
}
|
8 |
+
|
9 |
+
public function detailAction() {
|
10 |
+
$this->loadLayout();
|
11 |
+
$this->renderLayout();
|
12 |
+
}
|
13 |
+
|
14 |
+
/**
|
15 |
+
* Go to the tacking page
|
16 |
+
* external function for mail link "Track Your Order" in shipment mail
|
17 |
+
*/
|
18 |
+
public function trackingAction()
|
19 |
+
{
|
20 |
+
if($this->getRequest()->isGet()) {
|
21 |
+
if($hash = $this->getRequest()->getParam('hash')) {
|
22 |
+
$req_values = Mage::helper('shipping')->decodeTrackingHash($hash);
|
23 |
+
if($req_values) {
|
24 |
+
$order = Mage::getModel('sales/order')->load($req_values['id']);
|
25 |
+
$popup_url = Mage::helper('shipping')->getTrackingPopupUrlBySalesModel($order);
|
26 |
+
header('location: '.$popup_url); exit();
|
27 |
+
}
|
28 |
+
}
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
}
|
app/code/community/Chronopost/Chronorelais/controllers/Sales/ImpressionController.php
CHANGED
@@ -1,556 +1,567 @@
|
|
1 |
<?php
|
|
|
2 |
require_once 'Mage/Adminhtml/controllers/Sales/Order/ShipmentController.php';
|
3 |
-
class Chronopost_Chronorelais_Sales_ImpressionController extends Mage_Adminhtml_Sales_Order_ShipmentController
|
4 |
-
{
|
5 |
-
protected $_trackingNumbers = '';
|
6 |
-
|
7 |
-
/**
|
8 |
-
* Additional initialization
|
9 |
-
*
|
10 |
-
*/
|
11 |
-
protected function _construct()
|
12 |
-
{
|
13 |
-
$this->setUsedModuleName('Chronopost_Chronorelais');
|
14 |
-
}
|
15 |
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
26 |
->_setActiveMenu('sales/chronorelais')
|
27 |
->_addContent($this->getLayout()->createBlock('chronorelais/sales_impression'))
|
28 |
->renderLayout();
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
$transactionSave = Mage::getModel('core/resource_transaction')
|
39 |
->addObject($shipment)
|
40 |
->addObject($shipment->getOrder())
|
41 |
->save();
|
42 |
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
protected function _processDownload($resource, $resourceType)
|
47 |
-
{
|
48 |
-
$helper = Mage::helper('downloadable/download');
|
49 |
-
/* @var $helper Mage_Downloadable_Helper_Download */
|
50 |
|
51 |
-
|
|
|
|
|
52 |
|
53 |
-
|
54 |
-
$contentType = $helper->getContentType();
|
55 |
|
56 |
-
|
|
|
|
|
|
|
57 |
->setHttpResponseCode(200)
|
58 |
->setHeader('Pragma', 'public', true)
|
59 |
->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true)
|
60 |
->setHeader('Content-type', $contentType, true);
|
61 |
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
|
72 |
-
|
73 |
->clearBody();
|
74 |
-
|
75 |
->sendHeaders();
|
76 |
|
77 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
78 |
}
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
}
|
92 |
-
|
93 |
-
|
|
|
|
|
94 |
}
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
$header = array(
|
136 |
-
'idEmit' => 'CHRFR',
|
137 |
-
'accountNumber' => $_helper->getConfigurationAccountNumber(),
|
138 |
-
'subAccount' => $_helper->getConfigurationSubAccountNumber()
|
139 |
-
);
|
140 |
-
|
141 |
-
//shipper parameters
|
142 |
-
$shipperMobilePhone = $this->checkMobileNumber($_helper->getConfigurationShipperInfo('mobilephone'));
|
143 |
-
$shipper = array(
|
144 |
-
'shipperAdress1' => $_helper->getConfigurationShipperInfo('address1'),
|
145 |
-
'shipperAdress2' => $_helper->getConfigurationShipperInfo('address2'),
|
146 |
-
'shipperCity' => $_helper->getConfigurationShipperInfo('city'),
|
147 |
-
'shipperCivility' => $_helper->getConfigurationShipperInfo('civility'),
|
148 |
-
'shipperContactName'=> $_helper->getConfigurationShipperInfo('contactname'),
|
149 |
-
'shipperCountry' => $_helper->getConfigurationShipperInfo('country'),
|
150 |
-
'shipperEmail' => $_helper->getConfigurationShipperInfo('email'),
|
151 |
-
'shipperMobilePhone'=> $shipperMobilePhone,
|
152 |
-
'shipperName' => $_helper->getConfigurationShipperInfo('name'),
|
153 |
-
'shipperName2' => $_helper->getConfigurationShipperInfo('name2'),
|
154 |
-
'shipperPhone' => $_helper->getConfigurationShipperInfo('phone'),
|
155 |
-
'shipperPreAlert' => '',
|
156 |
-
'shipperZipCode' => $_helper->getConfigurationShipperInfo('zipcode')
|
157 |
-
);
|
158 |
-
|
159 |
-
//customer parameters
|
160 |
-
$customerMobilePhone = $this->checkMobileNumber($_helper->getConfigurationCustomerInfo('mobilephone'));
|
161 |
-
$customer = array(
|
162 |
-
'customerAdress1' => $_helper->getConfigurationCustomerInfo('address1'),
|
163 |
-
'customerAdress2' => $_helper->getConfigurationCustomerInfo('address2'),
|
164 |
-
'customerCity' => $_helper->getConfigurationCustomerInfo('city'),
|
165 |
-
'customerCivility' => $_helper->getConfigurationCustomerInfo('civility'),
|
166 |
-
'customerContactName'=> $_helper->getConfigurationCustomerInfo('contactname'),
|
167 |
-
'customerCountry' => $_helper->getConfigurationCustomerInfo('country'),
|
168 |
-
'customerEmail' => $_helper->getConfigurationCustomerInfo('email'),
|
169 |
-
'customerMobilePhone'=> $customerMobilePhone,
|
170 |
-
'customerName' => $_helper->getConfigurationCustomerInfo('name'),
|
171 |
-
'customerName2' => $_helper->getConfigurationCustomerInfo('name2'),
|
172 |
-
'customerPhone' => $_helper->getConfigurationCustomerInfo('phone'),
|
173 |
-
'customerPreAlert' => '',
|
174 |
-
'customerZipCode' => $_helper->getConfigurationCustomerInfo('zipcode')
|
175 |
-
);
|
176 |
-
|
177 |
-
//recipient parameters
|
178 |
-
$recipient_address = $_shippingAddress->getStreet();
|
179 |
-
if (!isset($recipient_address[1])) {
|
180 |
-
$recipient_address[1] = '';
|
181 |
-
}
|
182 |
-
$customer_email = ($_shippingAddress->getEmail()) ? $_shippingAddress->getEmail() : ($_billingAddress->getEmail() ? $_billingAddress->getEmail() : $_order->getCustomerEmail());
|
183 |
-
$recipientMobilePhone = $this->checkMobileNumber($_shippingAddress->getTelephone());
|
184 |
-
$recipientName = $this->getFilledValue($_shippingAddress->getCompany()); //RelayPoint Name if chronorelais or Companyname if chronopost and
|
185 |
-
$recipientName2 = $this->getFilledValue($_shippingAddress->getFirstname() . ' ' . $_shippingAddress->getLastname());
|
186 |
-
//remove any alphabets in phone number
|
187 |
-
$recipientPhone = trim(ereg_replace("[^0-9.-]", " ", $_shippingAddress->getTelephone()));
|
188 |
-
|
189 |
-
$recipient = array(
|
190 |
-
'recipientAdress1' => $this->getFilledValue($recipient_address[0]),
|
191 |
-
'recipientAdress2' => $this->getFilledValue($recipient_address[1]),
|
192 |
-
'recipientCity' => $this->getFilledValue($_shippingAddress->getCity()),
|
193 |
-
'recipientContactName' => $recipientName2,
|
194 |
-
'recipientCountry' => $this->getFilledValue($_shippingAddress->getCountryId()),
|
195 |
-
'recipientEmail' => $customer_email,
|
196 |
-
'recipientMobilePhone' => $recipientMobilePhone,
|
197 |
-
'recipientName' => $recipientName,
|
198 |
-
'recipientName2' => $recipientName2,
|
199 |
-
'recipientPhone' => $recipientPhone,
|
200 |
-
'recipientPreAlert' => '',
|
201 |
-
'recipientZipCode' => $this->getFilledValue($_shippingAddress->getPostcode()),
|
202 |
-
);
|
203 |
-
|
204 |
-
//ref parameters
|
205 |
-
$recipientRef = $this->getFilledValue($_shippingAddress->getWRelayPointCode());
|
206 |
-
if(!$recipientRef) {
|
207 |
-
$recipientRef = $_order->getCustomerId();
|
208 |
-
}
|
209 |
-
$shipperRef = $_order->getRealOrderId();
|
210 |
-
|
211 |
-
$ref = array(
|
212 |
-
'recipientRef' => $recipientRef,
|
213 |
-
'shipperRef' => $shipperRef
|
214 |
-
);
|
215 |
-
|
216 |
-
//skybill parameters
|
217 |
-
/* Livraison Samedi (Delivery Saturday) field*/
|
218 |
-
$SaturdayShipping = 0; //default value for the saturday shipping
|
219 |
-
$send_day = strtolower(date('l'));
|
220 |
-
if($_shippingMethod[0] == "chronopost" || $_shippingMethod[0] == "chronorelais") {
|
221 |
-
if(!$_deliver_on_saturday = Mage::helper('chronorelais')->getLivraisonSamediStatus($_order->getEntityId())) {
|
222 |
-
$_deliver_on_saturday = Mage::helper('chronorelais')->getConfigData('carriers/'.$_shippingMethod[0].'/deliver_on_saturday');
|
223 |
-
} else {
|
224 |
-
if($_deliver_on_saturday=='Yes') {
|
225 |
-
$_deliver_on_saturday = 1;
|
226 |
-
} else {
|
227 |
-
$_deliver_on_saturday = 0;
|
228 |
-
}
|
229 |
-
}
|
230 |
-
$is_sending_day = Mage::helper('chronorelais')->isSendingDay();
|
231 |
-
if($_deliver_on_saturday && $is_sending_day) {
|
232 |
-
$SaturdayShipping = 6;
|
233 |
-
} elseif(!$_deliver_on_saturday && $is_sending_day) {
|
234 |
-
$SaturdayShipping = 1;
|
235 |
-
}
|
236 |
-
}
|
237 |
-
|
238 |
-
$skybill = array(
|
239 |
-
'codCurrency' => 'EUR',
|
240 |
-
'codValue' => '',
|
241 |
-
'content1' => '',
|
242 |
-
'content2' => '',
|
243 |
-
'content3' => '',
|
244 |
-
'content4' => '',
|
245 |
-
'content5' => '',
|
246 |
-
'customsCurrency' => 'EUR',
|
247 |
-
'customsValue' => '',
|
248 |
-
'evtCode' => 'DC',
|
249 |
-
'insuredCurrency' => 'EUR',
|
250 |
-
'insuredValue' => '',
|
251 |
-
'objectType' => 'MAR',
|
252 |
-
'productCode' => $_helper->getChronoProductCode($_shippingAddress->getCountryId(),$_shippingMethod[0]),
|
253 |
-
'service' => $SaturdayShipping,
|
254 |
-
'shipDate' => date('c'),
|
255 |
-
'shipHour' => date('H'),
|
256 |
-
'weight' => $_order->getWeight(),
|
257 |
-
'weightUnit' => 'KGM'
|
258 |
-
);
|
259 |
-
|
260 |
-
$skybillParams = array(
|
261 |
-
'mode' => $_helper->getConfigurationSkybillParam()
|
262 |
-
);
|
263 |
-
|
264 |
-
$expeditionArray = array(
|
265 |
-
'esdParams' => $esdParams,
|
266 |
-
'header' => $header,
|
267 |
-
'shipper' => $shipper,
|
268 |
-
'customer' => $customer,
|
269 |
-
'recipient' => $recipient,
|
270 |
-
'ref' => $ref,
|
271 |
-
'skybill' => $skybill,
|
272 |
-
'skybillParams' => $skybillParams,
|
273 |
-
'password' => $_helper->getConfigurationAccountPass(),
|
274 |
-
'option' => '0'
|
275 |
-
);
|
276 |
-
//printArray($expeditionArray); exit;
|
277 |
-
return $expeditionArray;
|
278 |
-
}
|
279 |
-
}
|
280 |
-
|
281 |
-
protected function getEtiquetteUrl($shipmentId)
|
282 |
-
{
|
283 |
-
//On récupère les infos d'expédition
|
284 |
-
$reservationNumber = '';
|
285 |
-
$_helper = Mage::helper('chronorelais');
|
286 |
-
|
287 |
-
$shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
|
288 |
-
if($_shipTracks = $shipment->getAllTracks()) {
|
289 |
-
foreach($_shipTracks as $_shipTrack) {
|
290 |
-
if($_shipTrack->getNumber() && $_shipTrack->getChronoReservationNumber()) {
|
291 |
-
$reservationNumber = $_shipTrack->getChronoReservationNumber();
|
292 |
-
break;
|
293 |
-
}
|
294 |
-
}
|
295 |
-
if($reservationNumber) {
|
296 |
-
return $reservationNumber;
|
297 |
-
}
|
298 |
-
}
|
299 |
-
|
300 |
-
$_order = $shipment->getOrder();
|
301 |
-
$_shippingMethod = explode("_",$_order->getShippingMethod());
|
302 |
-
|
303 |
-
$expeditionArray = $this->getExpeditionParams($_order, $_shippingMethod);
|
304 |
-
$tracking_number = '';
|
305 |
-
if($expeditionArray) {
|
306 |
-
$client = new SoapClient("http://wsshipping.chronopost.fr/shipping/services/services/ServiceEProcurement?wsdl", array('trace' => true));
|
307 |
-
try
|
308 |
-
{
|
309 |
-
$webservbt = $client->__call("reservationExpeditionV2",$expeditionArray);
|
310 |
-
if(!$webservbt->errorCode && $webservbt->reservationNumber) {
|
311 |
-
$tracking_number = $webservbt->skybillNumber;
|
312 |
-
// Add tracking number for the shipment if not already exists.
|
313 |
-
if(!$this->_trackingNumbers && $webservbt->skybillNumber) {
|
314 |
-
$track = Mage::getModel('sales/order_shipment_track')
|
315 |
-
->setNumber($webservbt->skybillNumber)
|
316 |
-
->setCarrier(ucwords($_shippingMethod[0]))
|
317 |
-
->setCarrierCode($_shippingMethod[0])
|
318 |
-
->setTitle(ucwords($_shippingMethod[0]))
|
319 |
-
->setChronoReservationNumber($webservbt->reservationNumber)
|
320 |
-
->setPopup(1);
|
321 |
-
$shipment->addTrack($track);
|
322 |
-
|
323 |
-
$tracking_url = str_replace('{tracking_number}', $tracking_number, Mage::helper('chronorelais')->getConfigurationTrackingViewUrl());
|
324 |
-
$tracking_title = $this->__('Track Your Order');
|
325 |
-
$tracking_order = '<p><a title="'.$tracking_title.'" href="'.$tracking_url.'"><b>'.$tracking_title.'</b></a></p>';
|
326 |
-
|
327 |
-
//$shipment->register();
|
328 |
-
$comment = '';
|
329 |
-
$shipment->setEmailSent(true);
|
330 |
-
$this->_saveShipment($shipment);
|
331 |
-
$shipment->sendEmail(1, $tracking_order.$comment);
|
332 |
-
}
|
333 |
-
return $webservbt->reservationNumber;
|
334 |
-
} else {
|
335 |
-
$this->_getSession()->addError($_helper->__($webservbt->errorMessage));
|
336 |
-
}
|
337 |
-
}
|
338 |
-
catch(SoapFault $fault)
|
339 |
-
{
|
340 |
-
$this->_getSession()->addError($_helper->__($fault->faultstring));
|
341 |
-
}
|
342 |
-
}
|
343 |
}
|
344 |
-
|
345 |
-
|
346 |
-
|
|
|
347 |
->addAttributeToFilter('order_id', $orderId)
|
348 |
->getAllIds();
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
-
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
368 |
-
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
-
|
379 |
-
|
380 |
-
|
381 |
-
|
382 |
-
|
383 |
-
|
384 |
-
|
385 |
-
|
386 |
-
|
387 |
-
|
388 |
-
|
389 |
-
|
390 |
-
|
391 |
-
|
392 |
-
|
393 |
-
|
394 |
-
|
395 |
-
|
396 |
-
|
397 |
-
|
398 |
-
|
399 |
-
|
400 |
-
|
401 |
-
|
402 |
-
|
403 |
-
|
404 |
-
|
405 |
-
|
406 |
-
|
407 |
-
|
408 |
-
|
409 |
-
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
419 |
-
|
420 |
-
|
421 |
-
$this->_getSession()->addError($_helper->__($fault->faultstring));
|
422 |
-
return;
|
423 |
-
}
|
424 |
-
}
|
425 |
-
|
426 |
-
$tracking_url = str_replace('{tracking_number}', $tracking_number, Mage::helper('chronorelais')->getConfigurationTrackingViewUrl());
|
427 |
-
$tracking_title = $this->__('Track Your Order');
|
428 |
-
$tracking_order = '<p><a title="'.$tracking_title.'" href="'.$tracking_url.'"><b>'.$tracking_title.'</b></a></p>';
|
429 |
-
|
430 |
-
$comment = '';
|
431 |
-
$shipment->setEmailSent(true);
|
432 |
-
$this->_saveShipment($shipment);
|
433 |
-
$shipment->sendEmail(1, $tracking_order.$comment);
|
434 |
-
$this->_getSession()->addSuccess($this->__('Shipment was successfully created.'));
|
435 |
-
return $reservationNumber;
|
436 |
-
|
437 |
-
}else {
|
438 |
-
$this->_forward('noRoute');
|
439 |
-
return;
|
440 |
}
|
|
|
|
|
|
|
|
|
441 |
}
|
442 |
-
|
443 |
-
|
444 |
-
|
445 |
-
|
446 |
-
|
447 |
-
|
448 |
-
|
449 |
-
|
450 |
-
|
451 |
-
|
452 |
-
|
453 |
-
|
454 |
-
$
|
455 |
-
|
456 |
-
|
457 |
-
|
458 |
-
|
459 |
-
|
460 |
-
|
461 |
-
|
462 |
-
|
463 |
-
$this->_getSession()->addError(Mage::helper('chronorelais')->__('Désolé, une erreure est survenu lors de la récupération de l\'étiquetes. Merci de contacter Chronopost ou de réessayer plus tard'));
|
464 |
-
}
|
465 |
-
return $this->_redirectReferer();
|
466 |
-
|
467 |
}
|
|
|
468 |
|
469 |
-
|
470 |
-
|
471 |
-
|
472 |
-
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
if($trackingNumber) {
|
481 |
-
try {
|
482 |
-
$tracking_url = str_replace('{trackingNumber}', $trackingNumber, Mage::helper('chronorelais')->getConfigurationTrackingUrl());
|
483 |
-
$this->_processDownload($tracking_url, 'url');
|
484 |
-
exit(0);
|
485 |
-
} catch (Mage_Core_Exception $e) {
|
486 |
-
$this->_getSession()->addError(Mage::helper('chronorelais')->__('Désolé, une erreure est survenu lors de la récupération de l\'étiquetes. Merci de contacter Chronopost ou de réessayer plus tard'));
|
487 |
-
}
|
488 |
-
}
|
489 |
-
return $this->_redirectReferer();
|
490 |
}
|
|
|
|
|
491 |
|
492 |
-
|
493 |
-
|
494 |
-
|
495 |
-
|
496 |
-
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
|
516 |
-
|
517 |
-
|
518 |
-
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
$_connection->delete($_table, $condition);
|
523 |
-
|
524 |
-
$dataLine = array(
|
525 |
-
'order_id' => $orderId,
|
526 |
-
'livraison_le_samedi' => $livraison_le_samedi
|
527 |
-
);
|
528 |
-
try {
|
529 |
-
$_connection->insert($_table, $dataLine);
|
530 |
-
}
|
531 |
-
catch (Exception $e) {
|
532 |
-
$exceptions[] = Mage::helper('chronorelais')->__('Order assigning error: ' . $e->getMessage());
|
533 |
-
}
|
534 |
-
}
|
535 |
-
if($exceptions) {
|
536 |
-
$this->_getSession()->addError($exceptions);
|
537 |
-
} else {
|
538 |
-
$this->_getSession()->addSuccess($this->__('Livraison le Samedi statut a été ajouté'));
|
539 |
-
}
|
540 |
-
$this->_redirect('*/*/index');
|
541 |
-
}
|
542 |
-
|
543 |
-
/* Remove accents characters */
|
544 |
-
public function removeaccents($string){
|
545 |
-
$stringToReturn = str_replace(
|
546 |
-
array('à','á','â','ã','ä', 'ç', 'è','é','ê','ë', 'ì','í','î','ï', 'ñ', 'ò','ó','ô','õ','ö', 'ù','ú','û','ü', 'ý','ÿ', 'À','Á','Â','Ã','Ä', 'Ç', 'È','É','Ê','Ë', 'Ì','Í','Î','Ï', 'Ñ', 'Ò','Ó','Ô','Õ','Ö', 'Ù','Ú','Û','Ü', 'Ý','/','\xa8'),
|
547 |
-
array('a','a','a','a','a', 'c', 'e','e','e','e', 'i','i','i','i', 'n', 'o','o','o','o','o', 'u','u','u','u', 'y','y', 'A','A','A','A','A', 'C', 'E','E','E','E', 'I','I','I','I', 'N', 'O','O','O','O','O', 'U','U','U','U', 'Y',' ','e'), $string);
|
548 |
-
// Remove all remaining other unknown characters
|
549 |
-
$stringToReturn = preg_replace('/[^a-zA-Z0-9\-]/', ' ', $stringToReturn);
|
550 |
-
$stringToReturn = preg_replace('/^[\-]+/', '', $stringToReturn);
|
551 |
-
$stringToReturn = preg_replace('/[\-]+$/', '', $stringToReturn);
|
552 |
-
$stringToReturn = preg_replace('/[\-]{2,}/', ' ', $stringToReturn);
|
553 |
-
return $stringToReturn;
|
554 |
-
}
|
555 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
556 |
}
|
1 |
<?php
|
2 |
+
|
3 |
require_once 'Mage/Adminhtml/controllers/Sales/Order/ShipmentController.php';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
5 |
+
class Chronopost_Chronorelais_Sales_ImpressionController extends Mage_Adminhtml_Sales_Order_ShipmentController {
|
6 |
+
|
7 |
+
protected $_trackingNumbers = '';
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Additional initialization
|
11 |
+
*
|
12 |
+
*/
|
13 |
+
protected function _construct() {
|
14 |
+
$this->setUsedModuleName('Chronopost_Chronorelais');
|
15 |
+
}
|
16 |
+
|
17 |
+
/**
|
18 |
+
* Shipping grid
|
19 |
+
*/
|
20 |
+
public function indexAction() {
|
21 |
+
if (!extension_loaded('soap')) {
|
22 |
+
$this->_getSession()->addError($this->__('The SOAP extension is not installed in the server. Please contact the site administrator. Sorry for inconvenience.'));
|
23 |
+
return $this->_redirectReferer();
|
24 |
+
}
|
25 |
+
$this->loadLayout()
|
26 |
->_setActiveMenu('sales/chronorelais')
|
27 |
->_addContent($this->getLayout()->createBlock('chronorelais/sales_impression'))
|
28 |
->renderLayout();
|
29 |
+
}
|
30 |
+
|
31 |
+
/**
|
32 |
+
* Save shipment and order in one transaction
|
33 |
+
* @param Mage_Sales_Model_Order_Shipment $shipment
|
34 |
+
*/
|
35 |
+
protected function _saveShipment($shipment) {
|
36 |
+
$shipment->getOrder()->setIsInProcess(true);
|
37 |
+
$transactionSave = Mage::getModel('core/resource_transaction')
|
|
|
38 |
->addObject($shipment)
|
39 |
->addObject($shipment->getOrder())
|
40 |
->save();
|
41 |
|
42 |
+
return $this;
|
43 |
+
}
|
|
|
|
|
|
|
|
|
|
|
44 |
|
45 |
+
protected function _processDownload($resource, $resourceType) {
|
46 |
+
$helper = Mage::helper('downloadable/download');
|
47 |
+
/* @var $helper Mage_Downloadable_Helper_Download */
|
48 |
|
49 |
+
$helper->setResource($resource, $resourceType);
|
|
|
50 |
|
51 |
+
$fileName = $helper->getFilename();
|
52 |
+
$contentType = $helper->getContentType();
|
53 |
+
|
54 |
+
$this->getResponse()
|
55 |
->setHttpResponseCode(200)
|
56 |
->setHeader('Pragma', 'public', true)
|
57 |
->setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true)
|
58 |
->setHeader('Content-type', $contentType, true);
|
59 |
|
60 |
+
if ($fileSize = $helper->getFilesize()) {
|
61 |
+
$this->getResponse()
|
62 |
+
->setHeader('Content-Length', $fileSize);
|
63 |
+
}
|
64 |
|
65 |
+
if ($contentDisposition = $helper->getContentDisposition()) {
|
66 |
+
$this->getResponse()
|
67 |
+
->setHeader('Content-Disposition', $contentDisposition . '; filename=' . $fileName);
|
68 |
+
}
|
69 |
|
70 |
+
$this->getResponse()
|
71 |
->clearBody();
|
72 |
+
$this->getResponse()
|
73 |
->sendHeaders();
|
74 |
|
75 |
+
$helper->output();
|
76 |
+
}
|
77 |
+
|
78 |
+
protected function getTrackingNumber($shipmentId) {
|
79 |
+
$shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
|
80 |
+
|
81 |
+
//On récupère le numéro de tracking
|
82 |
+
$tracks = $shipment->getTracksCollection();
|
83 |
+
foreach ($tracks as $track) {
|
84 |
+
if ($track->getParentId() == $shipmentId) {
|
85 |
+
$this->_trackingNumbers .= $track->getnumber();
|
86 |
+
}
|
87 |
}
|
88 |
+
|
89 |
+
return $this->_trackingNumbers;
|
90 |
+
}
|
91 |
+
|
92 |
+
protected function getFilledValue($value) {
|
93 |
+
if ($value) {
|
94 |
+
return $this->removeaccents(trim($value));
|
95 |
+
} else {
|
96 |
+
return '';
|
97 |
+
}
|
98 |
+
}
|
99 |
+
|
100 |
+
protected function checkMobileNumber($value) {
|
101 |
+
if ($reqvalue = trim($value)) {
|
102 |
+
$_number = substr($reqvalue, 0, 2);
|
103 |
+
$fixed_array = array('01', '02', '03', '04', '05', '06', '06');
|
104 |
+
if (in_array($_number, $fixed_array)) {
|
105 |
+
return $reqvalue;
|
106 |
+
} else {
|
107 |
+
return '';
|
108 |
+
}
|
109 |
+
}
|
110 |
+
}
|
111 |
+
|
112 |
+
protected function getExpeditionParams($shipment, $_shippingMethod) {
|
113 |
+
$_order = $shipment->getOrder();
|
114 |
+
$_shippingAddress = $shipment->getShippingAddress();
|
115 |
+
$_billingAddress = $shipment->getBillingAddress();
|
116 |
+
$_helper = Mage::helper('chronorelais');
|
117 |
+
|
118 |
+
if ($_shippingMethod[0] == 'chronorelais' || $_shippingMethod[0] == 'chronopost' || $_shippingMethod[0] == 'chronoexpress') {
|
119 |
+
$esdParams = $header = $shipper = $customer = $recipient = $ref = $skybill = $skybillParams = $password = array();
|
120 |
+
|
121 |
+
//esdParams parameters
|
122 |
+
$esdParams = array(
|
123 |
+
'height' => '',
|
124 |
+
'width' => '',
|
125 |
+
'length' => ''
|
126 |
+
);
|
127 |
+
|
128 |
+
//header parameters
|
129 |
+
$header = array(
|
130 |
+
'idEmit' => 'CHRFR',
|
131 |
+
'accountNumber' => $_helper->getConfigurationAccountNumber(),
|
132 |
+
'subAccount' => $_helper->getConfigurationSubAccountNumber()
|
133 |
+
);
|
134 |
+
|
135 |
+
//shipper parameters
|
136 |
+
$shipperMobilePhone = $this->checkMobileNumber($_helper->getConfigurationShipperInfo('mobilephone'));
|
137 |
+
$shipper = array(
|
138 |
+
'shipperAdress1' => $_helper->getConfigurationShipperInfo('address1'),
|
139 |
+
'shipperAdress2' => $_helper->getConfigurationShipperInfo('address2'),
|
140 |
+
'shipperCity' => $_helper->getConfigurationShipperInfo('city'),
|
141 |
+
'shipperCivility' => $_helper->getConfigurationShipperInfo('civility'),
|
142 |
+
'shipperContactName' => $_helper->getConfigurationShipperInfo('contactname'),
|
143 |
+
'shipperCountry' => $_helper->getConfigurationShipperInfo('country'),
|
144 |
+
'shipperEmail' => $_helper->getConfigurationShipperInfo('email'),
|
145 |
+
'shipperMobilePhone' => $shipperMobilePhone,
|
146 |
+
'shipperName' => $_helper->getConfigurationShipperInfo('name'),
|
147 |
+
'shipperName2' => $_helper->getConfigurationShipperInfo('name2'),
|
148 |
+
'shipperPhone' => $_helper->getConfigurationShipperInfo('phone'),
|
149 |
+
'shipperPreAlert' => '',
|
150 |
+
'shipperZipCode' => $_helper->getConfigurationShipperInfo('zipcode')
|
151 |
+
);
|
152 |
+
|
153 |
+
//customer parameters
|
154 |
+
$customerMobilePhone = $this->checkMobileNumber($_helper->getConfigurationCustomerInfo('mobilephone'));
|
155 |
+
$customer = array(
|
156 |
+
'customerAdress1' => $_helper->getConfigurationCustomerInfo('address1'),
|
157 |
+
'customerAdress2' => $_helper->getConfigurationCustomerInfo('address2'),
|
158 |
+
'customerCity' => $_helper->getConfigurationCustomerInfo('city'),
|
159 |
+
'customerCivility' => $_helper->getConfigurationCustomerInfo('civility'),
|
160 |
+
'customerContactName' => $_helper->getConfigurationCustomerInfo('contactname'),
|
161 |
+
'customerCountry' => $_helper->getConfigurationCustomerInfo('country'),
|
162 |
+
'customerEmail' => $_helper->getConfigurationCustomerInfo('email'),
|
163 |
+
'customerMobilePhone' => $customerMobilePhone,
|
164 |
+
'customerName' => $_helper->getConfigurationCustomerInfo('name'),
|
165 |
+
'customerName2' => $_helper->getConfigurationCustomerInfo('name2'),
|
166 |
+
'customerPhone' => $_helper->getConfigurationCustomerInfo('phone'),
|
167 |
+
'customerPreAlert' => '',
|
168 |
+
'customerZipCode' => $_helper->getConfigurationCustomerInfo('zipcode')
|
169 |
+
);
|
170 |
+
|
171 |
+
//recipient parameters
|
172 |
+
$recipient_address = $_shippingAddress->getStreet();
|
173 |
+
if (!isset($recipient_address[1])) {
|
174 |
+
$recipient_address[1] = '';
|
175 |
+
}
|
176 |
+
$customer_email = ($_shippingAddress->getEmail()) ? $_shippingAddress->getEmail() : ($_billingAddress->getEmail() ? $_billingAddress->getEmail() : $_order->getCustomerEmail());
|
177 |
+
$recipientMobilePhone = $this->checkMobileNumber($_shippingAddress->getTelephone());
|
178 |
+
$recipientName = $this->getFilledValue($_shippingAddress->getCompany()); //RelayPoint Name if chronorelais or Companyname if chronopost and
|
179 |
+
$recipientName2 = $this->getFilledValue($_shippingAddress->getFirstname() . ' ' . $_shippingAddress->getLastname());
|
180 |
+
//remove any alphabets in phone number
|
181 |
+
$recipientPhone = trim(ereg_replace("[^0-9.-]", " ", $_shippingAddress->getTelephone()));
|
182 |
+
|
183 |
+
$recipient = array(
|
184 |
+
'recipientAdress1' => substr($this->getFilledValue($recipient_address[0]), 0, 38),
|
185 |
+
'recipientAdress2' => substr($this->getFilledValue($recipient_address[1]), 0, 38),
|
186 |
+
'recipientCity' => $this->getFilledValue($_shippingAddress->getCity()),
|
187 |
+
'recipientContactName' => $recipientName2,
|
188 |
+
'recipientCountry' => $this->getFilledValue($_shippingAddress->getCountryId()),
|
189 |
+
'recipientEmail' => $customer_email,
|
190 |
+
'recipientMobilePhone' => $recipientMobilePhone,
|
191 |
+
'recipientName' => $recipientName,
|
192 |
+
'recipientName2' => $recipientName2,
|
193 |
+
'recipientPhone' => $recipientPhone,
|
194 |
+
'recipientPreAlert' => '',
|
195 |
+
'recipientZipCode' => $this->getFilledValue($_shippingAddress->getPostcode()),
|
196 |
+
);
|
197 |
+
|
198 |
+
//ref parameters
|
199 |
+
$recipientRef = $this->getFilledValue($_shippingAddress->getWRelayPointCode());
|
200 |
+
if (!$recipientRef) {
|
201 |
+
$recipientRef = $_order->getCustomerId();
|
202 |
+
}
|
203 |
+
$shipperRef = $_order->getRealOrderId();
|
204 |
+
|
205 |
+
$ref = array(
|
206 |
+
'recipientRef' => $recipientRef,
|
207 |
+
'shipperRef' => $shipperRef
|
208 |
+
);
|
209 |
+
|
210 |
+
//skybill parameters
|
211 |
+
/* Livraison Samedi (Delivery Saturday) field */
|
212 |
+
$SaturdayShipping = 0; //default value for the saturday shipping
|
213 |
+
$send_day = strtolower(date('l'));
|
214 |
+
if ($_shippingMethod[0] == "chronopost" || $_shippingMethod[0] == "chronorelais") {
|
215 |
+
if (!$_deliver_on_saturday = Mage::helper('chronorelais')->getLivraisonSamediStatus($_order->getEntityId())) {
|
216 |
+
$_deliver_on_saturday = Mage::helper('chronorelais')->getConfigData('carriers/' . $_shippingMethod[0] . '/deliver_on_saturday');
|
217 |
+
} else {
|
218 |
+
if ($_deliver_on_saturday == 'Yes') {
|
219 |
+
$_deliver_on_saturday = 1;
|
220 |
+
} else {
|
221 |
+
$_deliver_on_saturday = 0;
|
222 |
+
}
|
223 |
+
}
|
224 |
+
$is_sending_day = Mage::helper('chronorelais')->isSendingDay();
|
225 |
+
if ($_deliver_on_saturday && $is_sending_day) {
|
226 |
+
$SaturdayShipping = 6;
|
227 |
+
} elseif (!$_deliver_on_saturday && $is_sending_day) {
|
228 |
+
$SaturdayShipping = 1;
|
229 |
+
}
|
230 |
+
}
|
231 |
+
|
232 |
+
$weight = 0;
|
233 |
+
foreach ($shipment->getItemsCollection() as $item) {
|
234 |
+
$weight += $item->weight * $item->qty;
|
235 |
+
}
|
236 |
+
|
237 |
+
$skybill = array(
|
238 |
+
'codCurrency' => 'EUR',
|
239 |
+
'codValue' => '',
|
240 |
+
'content1' => '',
|
241 |
+
'content2' => '',
|
242 |
+
'content3' => '',
|
243 |
+
'content4' => '',
|
244 |
+
'content5' => '',
|
245 |
+
'customsCurrency' => 'EUR',
|
246 |
+
'customsValue' => '',
|
247 |
+
'evtCode' => 'DC',
|
248 |
+
'insuredCurrency' => 'EUR',
|
249 |
+
'insuredValue' => '',
|
250 |
+
'objectType' => 'MAR',
|
251 |
+
'productCode' => $_helper->getChronoProductCode($_shippingAddress->getCountryId(), $_shippingMethod[0]),
|
252 |
+
'service' => $SaturdayShipping,
|
253 |
+
'shipDate' => date('c'),
|
254 |
+
'shipHour' => date('H'),
|
255 |
+
'weight' => $weight,
|
256 |
+
'weightUnit' => 'KGM'
|
257 |
+
);
|
258 |
+
|
259 |
+
$skybillParams = array(
|
260 |
+
'mode' => $_helper->getConfigurationSkybillParam()
|
261 |
+
);
|
262 |
+
|
263 |
+
$expeditionArray = array(
|
264 |
+
'esdParams' => $esdParams,
|
265 |
+
'header' => $header,
|
266 |
+
'shipper' => $shipper,
|
267 |
+
'customer' => $customer,
|
268 |
+
'recipient' => $recipient,
|
269 |
+
'ref' => $ref,
|
270 |
+
'skybill' => $skybill,
|
271 |
+
'skybillParams' => $skybillParams,
|
272 |
+
'password' => $_helper->getConfigurationAccountPass(),
|
273 |
+
'option' => '0'
|
274 |
+
);
|
275 |
+
//printArray($expeditionArray); exit;
|
276 |
+
return $expeditionArray;
|
277 |
+
}
|
278 |
+
}
|
279 |
+
|
280 |
+
protected function getEtiquetteUrl($shipmentId) {
|
281 |
+
//On récupère les infos d'expédition
|
282 |
+
$reservationNumber = '';
|
283 |
+
$_helper = Mage::helper('chronorelais');
|
284 |
+
|
285 |
+
$shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
|
286 |
+
if ($_shipTracks = $shipment->getAllTracks()) {
|
287 |
+
foreach ($_shipTracks as $_shipTrack) {
|
288 |
+
if ($_shipTrack->getNumber() && $_shipTrack->getChronoReservationNumber()) {
|
289 |
+
$reservationNumber = $_shipTrack->getChronoReservationNumber();
|
290 |
+
break;
|
291 |
}
|
292 |
+
}
|
293 |
+
if ($reservationNumber) {
|
294 |
+
return $reservationNumber;
|
295 |
+
}
|
296 |
}
|
297 |
+
|
298 |
+
$_order = $shipment->getOrder();
|
299 |
+
$_shippingMethod = explode("_", $_order->getShippingMethod());
|
300 |
+
|
301 |
+
$expeditionArray = $this->getExpeditionParams($shipment, $_shippingMethod);
|
302 |
+
$tracking_number = '';
|
303 |
+
if ($expeditionArray) {
|
304 |
+
$client = new SoapClient("http://wsshipping.chronopost.fr/shipping/services/services/ServiceEProcurement?wsdl", array('trace' => true));
|
305 |
+
try {
|
306 |
+
$webservbt = $client->__call("reservationExpeditionV2", $expeditionArray);
|
307 |
+
if (!$webservbt->errorCode && $webservbt->reservationNumber) {
|
308 |
+
$tracking_number = $webservbt->skybillNumber;
|
309 |
+
// Add tracking number for the shipment if not already exists.
|
310 |
+
if (!$this->_trackingNumbers && $webservbt->skybillNumber) {
|
311 |
+
$track = Mage::getModel('sales/order_shipment_track')
|
312 |
+
->setNumber($webservbt->skybillNumber)
|
313 |
+
->setCarrier(ucwords($_shippingMethod[0]))
|
314 |
+
->setCarrierCode($_shippingMethod[0])
|
315 |
+
->setTitle(ucwords($_shippingMethod[0]))
|
316 |
+
->setChronoReservationNumber($webservbt->reservationNumber)
|
317 |
+
->setPopup(1);
|
318 |
+
$shipment->addTrack($track);
|
319 |
+
|
320 |
+
$tracking_url = str_replace('{tracking_number}', $tracking_number, Mage::helper('chronorelais')->getConfigurationTrackingViewUrl());
|
321 |
+
$tracking_title = $this->__('Track Your Order');
|
322 |
+
$tracking_order = '<p><a title="' . $tracking_title . '" href="' . $tracking_url . '"><b>' . $tracking_title . '</b></a></p>';
|
323 |
+
|
324 |
+
//$shipment->register();
|
325 |
+
$comment = '';
|
326 |
+
$shipment->setEmailSent(true);
|
327 |
+
$this->_saveShipment($shipment);
|
328 |
+
$shipment->sendEmail(1, $tracking_order . $comment);
|
329 |
+
}
|
330 |
+
return $webservbt->reservationNumber;
|
331 |
+
} else {
|
332 |
+
$this->_getSession()->addError($_helper->__($webservbt->errorMessage));
|
333 |
+
}
|
334 |
+
} catch (SoapFault $fault) {
|
335 |
+
$this->_getSession()->addError($_helper->__($fault->faultstring));
|
336 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
337 |
}
|
338 |
+
}
|
339 |
+
|
340 |
+
public function getShipmentByOrderId($orderId) {
|
341 |
+
$_shipment = Mage::getResourceModel('sales/order_shipment_grid_collection')
|
342 |
->addAttributeToFilter('order_id', $orderId)
|
343 |
->getAllIds();
|
344 |
+
return $_shipment;
|
345 |
+
}
|
346 |
+
|
347 |
+
public function getShipmentByIncrementId($incrementId) {
|
348 |
+
$_shipment = Mage::getResourceModel('sales/order_shipment_grid_collection')
|
349 |
+
->addAttributeToFilter('increment_id', $incrementId)
|
350 |
+
->getAllIds();
|
351 |
+
return $_shipment;
|
352 |
+
}
|
353 |
+
|
354 |
+
public function initShipment($orderId) {
|
355 |
+
$order = Mage::getModel('sales/order')->load($orderId);
|
356 |
+
|
357 |
+
/**
|
358 |
+
* Check order existing
|
359 |
+
*/
|
360 |
+
if (!$order->getId()) {
|
361 |
+
$this->_getSession()->addError($this->__('The order no longer exists.'));
|
362 |
+
return false;
|
363 |
+
}
|
364 |
+
/**
|
365 |
+
* Check shipment is available to create separate from invoice
|
366 |
+
*/
|
367 |
+
if ($order->getForcedDoShipmentWithInvoice()) {
|
368 |
+
$this->_getSession()->addError($this->__('Cannot do shipment for the order separately from invoice.'));
|
369 |
+
return false;
|
370 |
+
}
|
371 |
+
/**
|
372 |
+
* Check shipment create availability
|
373 |
+
*/
|
374 |
+
/* if (!$order->canShip()) {
|
375 |
+
$this->_getSession()->addError($this->__('Cannot do shipment for the order.'));
|
376 |
+
return false;
|
377 |
+
} */
|
378 |
+
$savedQtys = $this->_getItemQtys();
|
379 |
+
$shipment = Mage::getModel('sales/service_order', $order)->prepareShipment($savedQtys);
|
380 |
+
|
381 |
+
Mage::register('current_shipment', $shipment);
|
382 |
+
return $shipment;
|
383 |
+
}
|
384 |
+
|
385 |
+
public function createNewShipment($orderId) {
|
386 |
+
$_helper = Mage::helper('chronorelais');
|
387 |
+
$reservationNumber = '';
|
388 |
+
try {
|
389 |
+
if ($shipment = $this->initShipment($orderId)) {
|
390 |
+
$shipment->register();
|
391 |
+
|
392 |
+
$_order = $shipment->getOrder();
|
393 |
+
$_shippingMethod = explode("_", $_order->getShippingMethod());
|
394 |
+
|
395 |
+
$expeditionArray = $this->getExpeditionParams($shipment, $_shippingMethod);
|
396 |
+
$tracking_number = '';
|
397 |
+
if ($expeditionArray) {
|
398 |
+
|
399 |
+
$client = new SoapClient("http://wsshipping.chronopost.fr/shipping/services/services/ServiceEProcurement?wsdl", array('trace' => true));
|
400 |
+
try {
|
401 |
+
$expedition = $client->__call("reservationExpeditionV2", $expeditionArray);
|
402 |
+
if (!$expedition->errorCode && $expedition->skybillNumber) {
|
403 |
+
$tracking_number = $expedition->skybillNumber;
|
404 |
+
$track = Mage::getModel('sales/order_shipment_track')
|
405 |
+
->setNumber($expedition->skybillNumber)
|
406 |
+
->setCarrier(ucwords($_shippingMethod[0]))
|
407 |
+
->setCarrierCode($_shippingMethod[0])
|
408 |
+
->setTitle(ucwords($_shippingMethod[0]))
|
409 |
+
->setChronoReservationNumber($expedition->reservationNumber)
|
410 |
+
->setPopup(1);
|
411 |
+
$shipment->addTrack($track);
|
412 |
+
$reservationNumber = $expedition->reservationNumber;
|
413 |
+
} else {
|
414 |
+
$this->_getSession()->addError($_helper->__($expedition->errorMessage));
|
415 |
+
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
416 |
}
|
417 |
+
} catch (SoapFault $fault) {
|
418 |
+
$this->_getSession()->addError($_helper->__($fault->faultstring));
|
419 |
+
return;
|
420 |
+
}
|
421 |
}
|
422 |
+
|
423 |
+
$tracking_url = str_replace('{tracking_number}', $tracking_number, Mage::helper('chronorelais')->getConfigurationTrackingViewUrl());
|
424 |
+
$tracking_title = $this->__('Track Your Order');
|
425 |
+
$tracking_order = '<p><a title="' . $tracking_title . '" href="' . $tracking_url . '"><b>' . $tracking_title . '</b></a></p>';
|
426 |
+
|
427 |
+
$comment = '';
|
428 |
+
$shipment->setEmailSent(true);
|
429 |
+
$this->_saveShipment($shipment);
|
430 |
+
$shipment->sendEmail(1, $tracking_order . $comment);
|
431 |
+
$this->_getSession()->addSuccess($this->__('Shipment was successfully created.'));
|
432 |
+
return $reservationNumber;
|
433 |
+
} else {
|
434 |
+
$this->_forward('noRoute');
|
435 |
+
return;
|
436 |
+
}
|
437 |
+
} catch (Mage_Core_Exception $e) {
|
438 |
+
$this->_getSession()->addError($e->getMessage());
|
439 |
+
return;
|
440 |
+
} catch (Exception $e) {
|
441 |
+
$this->_getSession()->addError($this->__('Can not save shipment: ' . $e->getMessage()));
|
442 |
+
return;
|
|
|
|
|
|
|
|
|
443 |
}
|
444 |
+
}
|
445 |
|
446 |
+
public function printMassAction() {
|
447 |
+
$shipmentsIds = $this->getRequest()->getPost('shipment_ids');
|
448 |
+
try {
|
449 |
+
$trackingNumber = $this->getEtiquetteUrl($shipmentsIds);
|
450 |
+
if ($trackingNumber) {
|
451 |
+
$tracking_url = str_replace('{trackingNumber}', $trackingNumber, Mage::helper('chronorelais')->getConfigurationTrackingUrl());
|
452 |
+
$this->_processDownload($tracking_url, 'url');
|
453 |
+
exit(0);
|
454 |
+
}
|
455 |
+
} catch (Mage_Core_Exception $e) {
|
456 |
+
$this->_getSession()->addError(Mage::helper('chronorelais')->__('Désolé, une erreure est survenu lors de la récupération de l\'étiquetes. Merci de contacter Chronopost ou de réessayer plus tard'));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
457 |
}
|
458 |
+
return $this->_redirectReferer();
|
459 |
+
}
|
460 |
|
461 |
+
public function printAction() {
|
462 |
+
// Appel via order_id
|
463 |
+
$orderId = $this->getRequest()->getParam('order_id');
|
464 |
+
if ($orderId) {
|
465 |
+
if ($_shipments = $this->getShipmentByOrderId($orderId)) {
|
466 |
+
if (count($_shipments) == 1) {
|
467 |
+
$shipmentId = $_shipments[0];
|
468 |
+
$trackingNumber = $this->getEtiquetteUrl($shipmentId);
|
469 |
+
} else {
|
470 |
+
$track = "Cette commande contient plusieurs expéditions, cliquez sur chaque lien pour obtenir les étiquettes :<br>";
|
471 |
+
foreach ($_shipments as $_shipment) {
|
472 |
+
$url = str_replace('{trackingNumber}', $this->getEtiquetteUrl($_shipment), Mage::helper('chronorelais')->getConfigurationTrackingUrl());
|
473 |
+
$track .= '<a target="_blank" href="'.$url.'">'.$url.'</a><br />';
|
474 |
+
}
|
475 |
+
echo $track;
|
476 |
+
return;
|
477 |
+
}
|
478 |
+
} else {
|
479 |
+
$trackingNumber = $this->createNewShipment($orderId);
|
480 |
+
}
|
481 |
+
} else {
|
482 |
+
$shipmentId = $this->getRequest()->getParam('shipment_id');
|
483 |
+
if ($shipmentId) {
|
484 |
+
$trackingNumber = $this->getEtiquetteUrl($shipmentId);
|
485 |
+
} else {
|
486 |
+
$shipmentIncrementId = $this->getRequest()->getParam('shipment_increment_id');
|
487 |
+
$shipmentId = $this->getShipmentByIncrementId($shipmentIncrementId);
|
488 |
+
$trackingNumber = $this->getEtiquetteUrl($shipmentId[0]);
|
489 |
+
}
|
490 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
491 |
|
492 |
+
|
493 |
+
if ($trackingNumber) {
|
494 |
+
try {
|
495 |
+
$tracking_url = str_replace('{trackingNumber}', $trackingNumber, Mage::helper('chronorelais')->getConfigurationTrackingUrl());
|
496 |
+
$this->_processDownload($tracking_url, 'url');
|
497 |
+
exit(0);
|
498 |
+
} catch (Mage_Core_Exception $e) {
|
499 |
+
$this->_getSession()->addError(Mage::helper('chronorelais')->__('Désolé, une erreure est survenu lors de la récupération de l\'étiquetes. Merci de contacter Chronopost ou de réessayer plus tard'));
|
500 |
+
}
|
501 |
+
}
|
502 |
+
return $this->_redirectReferer();
|
503 |
+
}
|
504 |
+
|
505 |
+
public function massLivraisonSamediStatusAction() {
|
506 |
+
if ($this->getRequest()->getPost('status')) {
|
507 |
+
$this->saveLivraisonSamediStatusAction();
|
508 |
+
}
|
509 |
+
}
|
510 |
+
|
511 |
+
/* Save the Livraison le Samedi status to orders */
|
512 |
+
|
513 |
+
public function saveLivraisonSamediStatusAction() {
|
514 |
+
/* get the orders */
|
515 |
+
$orderIds = $this->getRequest()->getPost('order_ids');
|
516 |
+
$status = $this->getRequest()->getPost('status');
|
517 |
+
$_connection = Mage::getSingleton('core/resource')->getConnection('core_write');
|
518 |
+
$_table = Mage::getSingleton('core/resource')->getTableName('sales_chronopost_order_export_status');
|
519 |
+
$exceptions = array();
|
520 |
+
|
521 |
+
foreach ($orderIds as $orderId) {
|
522 |
+
$order_details = Mage::getModel('sales/order')->load($orderId);
|
523 |
+
$shipping_method = '';
|
524 |
+
$livraison_le_samedi = $status;
|
525 |
+
if ($shipping_method = $order_details->getShippingMethod()) {
|
526 |
+
$shipping_method = explode('_', $shipping_method);
|
527 |
+
if ($shipping_method[0] == 'chronoexpress') {
|
528 |
+
$livraison_le_samedi = '--';
|
529 |
+
}
|
530 |
+
}
|
531 |
+
$condition = array(
|
532 |
+
$_connection->quoteInto('order_id = ?', $orderId),
|
533 |
+
);
|
534 |
+
$_connection->delete($_table, $condition);
|
535 |
+
|
536 |
+
$dataLine = array(
|
537 |
+
'order_id' => $orderId,
|
538 |
+
'livraison_le_samedi' => $livraison_le_samedi
|
539 |
+
);
|
540 |
+
try {
|
541 |
+
$_connection->insert($_table, $dataLine);
|
542 |
+
} catch (Exception $e) {
|
543 |
+
$exceptions[] = Mage::helper('chronorelais')->__('Order assigning error: ' . $e->getMessage());
|
544 |
+
}
|
545 |
+
}
|
546 |
+
if ($exceptions) {
|
547 |
+
$this->_getSession()->addError($exceptions);
|
548 |
+
} else {
|
549 |
+
$this->_getSession()->addSuccess($this->__('Livraison le Samedi statut a été ajouté'));
|
550 |
+
}
|
551 |
+
$this->_redirect('*/*/index');
|
552 |
+
}
|
553 |
+
|
554 |
+
/* Remove accents characters */
|
555 |
+
|
556 |
+
public function removeaccents($string) {
|
557 |
+
$stringToReturn = str_replace(
|
558 |
+
array('à', 'á', 'â', 'ã', 'ä', 'ç', 'è', 'é', 'ê', 'ë', 'ì', 'í', 'î', 'ï', 'ñ', 'ò', 'ó', 'ô', 'õ', 'ö', 'ù', 'ú', 'û', 'ü', 'ý', 'ÿ', 'À', 'Á', 'Â', 'Ã', 'Ä', 'Ç', 'È', 'É', 'Ê', 'Ë', 'Ì', 'Í', 'Î', 'Ï', 'Ñ', 'Ò', 'Ó', 'Ô', 'Õ', 'Ö', 'Ù', 'Ú', 'Û', 'Ü', 'Ý', '/', '\xa8'), array('a', 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'i', 'i', 'n', 'o', 'o', 'o', 'o', 'o', 'u', 'u', 'u', 'u', 'y', 'y', 'A', 'A', 'A', 'A', 'A', 'C', 'E', 'E', 'E', 'E', 'I', 'I', 'I', 'I', 'N', 'O', 'O', 'O', 'O', 'O', 'U', 'U', 'U', 'U', 'Y', ' ', 'e'), $string);
|
559 |
+
// Remove all remaining other unknown characters
|
560 |
+
$stringToReturn = preg_replace('/[^a-zA-Z0-9\-]/', ' ', $stringToReturn);
|
561 |
+
$stringToReturn = preg_replace('/^[\-]+/', '', $stringToReturn);
|
562 |
+
$stringToReturn = preg_replace('/[\-]+$/', '', $stringToReturn);
|
563 |
+
$stringToReturn = preg_replace('/[\-]{2,}/', ' ', $stringToReturn);
|
564 |
+
return $stringToReturn;
|
565 |
+
}
|
566 |
+
|
567 |
}
|
app/code/community/Chronopost/Chronorelais/controllers/Sales/Order/ShipmentController.php
CHANGED
@@ -43,8 +43,8 @@ class Chronopost_Chronorelais_Sales_Order_ShipmentController extends Mage_Adminh
|
|
43 |
$_order = $shipment->getOrder();
|
44 |
$_shippingMethod = explode("_",$_order->getShippingMethod());
|
45 |
|
46 |
-
$_shippingAddress = $
|
47 |
-
$_billingAddress = $
|
48 |
$_helper = Mage::helper('chronorelais');
|
49 |
|
50 |
if ($_shippingMethod[0] == 'chronorelais' || $_shippingMethod[0] == 'chronopost' || $_shippingMethod[0] == 'chronoexpress') {
|
@@ -161,6 +161,12 @@ class Chronopost_Chronorelais_Sales_Order_ShipmentController extends Mage_Adminh
|
|
161 |
$SaturdayShipping = 6;
|
162 |
}
|
163 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
164 |
$skybill = array(
|
165 |
'codCurrency' => 'EUR',
|
166 |
'codValue' => '',
|
@@ -179,7 +185,7 @@ class Chronopost_Chronorelais_Sales_Order_ShipmentController extends Mage_Adminh
|
|
179 |
'service' => $SaturdayShipping,
|
180 |
'shipDate' => date('c'),
|
181 |
'shipHour' => date('H'),
|
182 |
-
'weight' => $
|
183 |
'weightUnit' => 'KGM'
|
184 |
);
|
185 |
|
43 |
$_order = $shipment->getOrder();
|
44 |
$_shippingMethod = explode("_",$_order->getShippingMethod());
|
45 |
|
46 |
+
$_shippingAddress = $shipment->getShippingAddress();
|
47 |
+
$_billingAddress = $shipment->getBillingAddress();
|
48 |
$_helper = Mage::helper('chronorelais');
|
49 |
|
50 |
if ($_shippingMethod[0] == 'chronorelais' || $_shippingMethod[0] == 'chronopost' || $_shippingMethod[0] == 'chronoexpress') {
|
161 |
$SaturdayShipping = 6;
|
162 |
}
|
163 |
}
|
164 |
+
|
165 |
+
$weight = 0;
|
166 |
+
foreach ($shipment->getItemsCollection() as $item) {
|
167 |
+
$weight += $item->weight * $item->qty;
|
168 |
+
}
|
169 |
+
|
170 |
$skybill = array(
|
171 |
'codCurrency' => 'EUR',
|
172 |
'codValue' => '',
|
185 |
'service' => $SaturdayShipping,
|
186 |
'shipDate' => date('c'),
|
187 |
'shipHour' => date('H'),
|
188 |
+
'weight' => $weight,
|
189 |
'weightUnit' => 'KGM'
|
190 |
);
|
191 |
|
app/code/community/Chronopost/Chronorelais/etc/config.xml
CHANGED
@@ -2,7 +2,7 @@
|
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Chronopost_Chronorelais>
|
5 |
-
<version>0.
|
6 |
<depends>
|
7 |
<Mage_Shipping />
|
8 |
<Mage_Sales />
|
@@ -238,7 +238,7 @@
|
|
238 |
<chronorelais>
|
239 |
<shipping>
|
240 |
<google_map_api>ABQIAAAAZvdukOwsytNocL5anZKqZxS51Nc8ngbKeRYi0kVLSLeRaqOKHRSLs6O150txpwWCDcct2mH4X-G6OA</google_map_api>
|
241 |
-
<tracking_view_url><![CDATA[http://
|
242 |
</shipping>
|
243 |
<export_css>
|
244 |
<file_extension>.chr</file_extension>
|
@@ -279,6 +279,18 @@
|
|
279 |
destination: "FR,MC",
|
280 |
fees: "{table {cart.weight} in 2.00:17.56, 3.00:18.40, 4.00:19.24, 5.00:20.08, 6.00:20.92, 7.00:21.76, 8.00:22.60, 9.00:23.44, 10.00:24.28, 15.00:28.48, 20.00:32.68, 25.00:36.88, 30.00:41.08}",
|
281 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
282 |
</config>
|
283 |
<weight_limit>30</weight_limit>
|
284 |
<quickcost_url>http://wsshipping.chronopost.fr/wsQuickcost/services/ServiceQuickCost?wsdl</quickcost_url>
|
@@ -307,7 +319,7 @@
|
|
307 |
</config>
|
308 |
<weight_limit>30</weight_limit>
|
309 |
<quickcost_url>http://wsshipping.chronopost.fr/wsQuickcost/services/ServiceQuickCost?wsdl</quickcost_url>
|
310 |
-
<logo_url>
|
311 |
<debug>0</debug>
|
312 |
<stop_to_first_match>0</stop_to_first_match>
|
313 |
<!--<specificerrmsg>This shipping method is currently unavailable.</specificerrmsg>-->
|
@@ -330,6 +342,8 @@
|
|
330 |
destination: "FR",
|
331 |
fees: "{table {cart.weight} in 2.00:17.56, 3.00:18.40, 4.00:19.24, 5.00:20.08, 6.00:20.92, 7.00:21.76, 8.00:22.60, 9.00:23.44, 10.00:24.28, 15.00:28.48, 20.00:32.68, 25.00:36.88, 30.00:41.08}",
|
332 |
}
|
|
|
|
|
333 |
</config>
|
334 |
<weight_limit>20</weight_limit>
|
335 |
<quickcost_url>http://wsshipping.chronopost.fr/wsQuickcost/services/ServiceQuickCost?wsdl</quickcost_url>
|
2 |
<config>
|
3 |
<modules>
|
4 |
<Chronopost_Chronorelais>
|
5 |
+
<version>0.3.0</version>
|
6 |
<depends>
|
7 |
<Mage_Shipping />
|
8 |
<Mage_Sales />
|
238 |
<chronorelais>
|
239 |
<shipping>
|
240 |
<google_map_api>ABQIAAAAZvdukOwsytNocL5anZKqZxS51Nc8ngbKeRYi0kVLSLeRaqOKHRSLs6O150txpwWCDcct2mH4X-G6OA</google_map_api>
|
241 |
+
<tracking_view_url><![CDATA[http://www.chronopost.fr/expedier/inputLTNumbersNoJahia.do?lang=fr_FR&listeNumeros={tracking_number}]]></tracking_view_url>
|
242 |
</shipping>
|
243 |
<export_css>
|
244 |
<file_extension>.chr</file_extension>
|
279 |
destination: "FR,MC",
|
280 |
fees: "{table {cart.weight} in 2.00:17.56, 3.00:18.40, 4.00:19.24, 5.00:20.08, 6.00:20.92, 7.00:21.76, 8.00:22.60, 9.00:23.44, 10.00:24.28, 15.00:28.48, 20.00:32.68, 25.00:36.88, 30.00:41.08}",
|
281 |
}
|
282 |
+
|
283 |
+
# Chronopost Corse
|
284 |
+
{
|
285 |
+
label: "Chronopost livraison express à domicile en Corse",
|
286 |
+
code: "chronopost_corse",
|
287 |
+
description: "Colis livré le lendemain avant 13h, à l’adresse de votre choix.
|
288 |
+
Délai à compter de la prise en charge du colis par Chronopost, pour une livraison en France métropolitaine.
|
289 |
+
En cas d’absence, le colis est mis en instance dans le bureau de Poste le plus proche.",
|
290 |
+
tracking_url: "http://www.fr.chronopost.com/fr/tracking/result?listeNumeros={tracking_number}",
|
291 |
+
destination: "FR(20*)",
|
292 |
+
fees: "{table {cart.weight} in 2.00:19.56, 3.00:20.40, 4.00:21.24, 5.00:22.08, 6.00:22.92, 7.00:23.76, 8.00:24.60, 9.00:25.44, 10.00:26.28, 15.00:30.48, 20.00:34.68, 25.00:38.88, 30.00:43.08}",
|
293 |
+
}
|
294 |
</config>
|
295 |
<weight_limit>30</weight_limit>
|
296 |
<quickcost_url>http://wsshipping.chronopost.fr/wsQuickcost/services/ServiceQuickCost?wsdl</quickcost_url>
|
319 |
</config>
|
320 |
<weight_limit>30</weight_limit>
|
321 |
<quickcost_url>http://wsshipping.chronopost.fr/wsQuickcost/services/ServiceQuickCost?wsdl</quickcost_url>
|
322 |
+
<logo_url>Logo-Chronopost.jpg</logo_url>
|
323 |
<debug>0</debug>
|
324 |
<stop_to_first_match>0</stop_to_first_match>
|
325 |
<!--<specificerrmsg>This shipping method is currently unavailable.</specificerrmsg>-->
|
342 |
destination: "FR",
|
343 |
fees: "{table {cart.weight} in 2.00:17.56, 3.00:18.40, 4.00:19.24, 5.00:20.08, 6.00:20.92, 7.00:21.76, 8.00:22.60, 9.00:23.44, 10.00:24.28, 15.00:28.48, 20.00:32.68, 25.00:36.88, 30.00:41.08}",
|
344 |
}
|
345 |
+
|
346 |
+
# Voir exemple sur mode "Chronopost" pour un tarif spécifique pour la Corse
|
347 |
</config>
|
348 |
<weight_limit>20</weight_limit>
|
349 |
<quickcost_url>http://wsshipping.chronopost.fr/wsQuickcost/services/ServiceQuickCost?wsdl</quickcost_url>
|
app/code/community/Chronopost/Chronorelais/etc/system.xml
CHANGED
@@ -513,7 +513,7 @@
|
|
513 |
<show_in_store>1</show_in_store>
|
514 |
</account_number>
|
515 |
<sub_account_number translate="label">
|
516 |
-
<label>
|
517 |
<comment>must be 3 digits or empty</comment>
|
518 |
<frontend_type>text</frontend_type>
|
519 |
<sort_order>8</sort_order>
|
@@ -530,7 +530,8 @@
|
|
530 |
<show_in_store>1</show_in_store>
|
531 |
</account_pass>
|
532 |
<google_map_api translate="label">
|
533 |
-
<label>Google Map API Key</label>
|
|
|
534 |
<frontend_type>text</frontend_type>
|
535 |
<sort_order>10</sort_order>
|
536 |
<show_in_default>1</show_in_default>
|
513 |
<show_in_store>1</show_in_store>
|
514 |
</account_number>
|
515 |
<sub_account_number translate="label">
|
516 |
+
<label>N° de sous-compte</label>
|
517 |
<comment>must be 3 digits or empty</comment>
|
518 |
<frontend_type>text</frontend_type>
|
519 |
<sort_order>8</sort_order>
|
530 |
<show_in_store>1</show_in_store>
|
531 |
</account_pass>
|
532 |
<google_map_api translate="label">
|
533 |
+
<label>Google Map v3 API Key</label>
|
534 |
+
<comment>The Google Maps JavaScript API Version 2 has been officially deprecated. Please use v3 API now. Get your key at https://code.google.com/apis/console/.</comment>
|
535 |
<frontend_type>text</frontend_type>
|
536 |
<sort_order>10</sort_order>
|
537 |
<show_in_default>1</show_in_default>
|
app/code/community/Chronopost/Chronorelais/includes/ChronorelaisShippingHelper.php
CHANGED
@@ -1,1266 +1,1266 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/**
|
4 |
-
* Magento Chronopost Chronorelais Module
|
5 |
-
*
|
6 |
-
* NOTICE OF LICENSE
|
7 |
-
*
|
8 |
-
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
-
* that is bundled with this package in the file LICENSE.txt.
|
10 |
-
* It is also available through the world-wide-web at this URL:
|
11 |
-
* http://opensource.org/licenses/osl-3.0.php
|
12 |
-
* If you did not receive a copy of the license and are unable to
|
13 |
-
* obtain it through the world-wide-web, please send an email
|
14 |
-
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
-
*
|
16 |
-
* @category Chronopost
|
17 |
-
* @package Chronopost_Chronorelais
|
18 |
-
* @copyright Copyright (c) 2008-10 Owebia (http://www.owebia.com/)
|
19 |
-
* @author Antoine Lemoine
|
20 |
-
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
-
*/
|
22 |
-
|
23 |
-
class ChronorelaisShippingHelper
|
24 |
-
{
|
25 |
-
public static $DEBUG_INDEX_COUNTER = 0;
|
26 |
-
public static $FLOAT_REGEX = '[-]?\d+(?:[.]\d+)?';
|
27 |
-
public static $POSITIVE_FLOAT_REGEX = '\d+(?:[.]\d+)?';
|
28 |
-
//public static $COUPLE_REGEX = '(?:[0-9.]+|\*)(?:\[|\])?\:[0-9.]+(?:\:[0-9.]+%?)*';
|
29 |
-
public static $COUPLE_REGEX = '(?:[0-9.]+|\*) *(?:\[|\])? *\: *[0-9.]+';
|
30 |
-
public static $UNCOMPRESSED_STRINGS = array(
|
31 |
-
' product.attribute.',
|
32 |
-
' product.option.',
|
33 |
-
' product.stock.',
|
34 |
-
'{product.attribute.',
|
35 |
-
'{product.option.',
|
36 |
-
'{product.stock.',
|
37 |
-
'{product.weight}',
|
38 |
-
'{product.quantity}',
|
39 |
-
'{cart.weight}',
|
40 |
-
'{cart.quantity}',
|
41 |
-
'{cart.price_including_tax}',
|
42 |
-
'{cart.price_excluding_tax}',
|
43 |
-
'{cart.',
|
44 |
-
'{customvar.',
|
45 |
-
'{selection.weight}',
|
46 |
-
'{selection.quantity}',
|
47 |
-
'{selection.',
|
48 |
-
'{destination.country.',
|
49 |
-
'{foreach ',
|
50 |
-
'{/foreach}',
|
51 |
-
);
|
52 |
-
public static $COMPRESSED_STRINGS = array(
|
53 |
-
' p.a.',
|
54 |
-
' p.o.',
|
55 |
-
' p.s.',
|
56 |
-
'{p.a.',
|
57 |
-
'{p.o.',
|
58 |
-
'{p.s.',
|
59 |
-
'{p.w}',
|
60 |
-
'{p.qty}',
|
61 |
-
'{c.w}',
|
62 |
-
'{c.qty}',
|
63 |
-
'{c.pit}',
|
64 |
-
'{c.pet}',
|
65 |
-
'{c.',
|
66 |
-
'{v.',
|
67 |
-
'{s.w}',
|
68 |
-
'{s.qty}',
|
69 |
-
'{s.',
|
70 |
-
'{dest.ctry.',
|
71 |
-
'{each ',
|
72 |
-
'{/each}',
|
73 |
-
);
|
74 |
-
|
75 |
-
protected $_input;
|
76 |
-
protected $_config;
|
77 |
-
protected $_messages;
|
78 |
-
protected $_formula_cache;
|
79 |
-
protected $_expression_cache;
|
80 |
-
public $debug = 0;
|
81 |
-
public $debug_output = '';
|
82 |
-
public $debug_header = null;
|
83 |
-
|
84 |
-
public function ChronorelaisShippingHelper($input) {
|
85 |
-
$this->_formula_cache = array();
|
86 |
-
$this->_messages = array();
|
87 |
-
$this->_input = $input;
|
88 |
-
$this->_config = array();
|
89 |
-
$this->_parseInput();
|
90 |
-
}
|
91 |
-
|
92 |
-
private function debug($text, $level=10) {
|
93 |
-
if ($this->debug>=$level) $this->debug_output .= "<p>".$text."</p>";
|
94 |
-
}
|
95 |
-
|
96 |
-
public function printDebug() {
|
97 |
-
if ($this->debug>0) {
|
98 |
-
$index = self::$DEBUG_INDEX_COUNTER++;
|
99 |
-
echo "<style rel=\"stylesheet\" type=\"text/css\">"
|
100 |
-
.".osh-formula{color:#f90;} .osh-key{color:#0099f7;}"
|
101 |
-
.".osh-error{color:#f00;} .osh-warning{color:#ff0;} .osh-info{color:#7bf700;}"
|
102 |
-
.".osh-debug{background:#000;color:#bbb;position:absolute;top:0;left:0;width:100%;z-index:100;-moz-opacity:0.9;opacity:0.9;text-align:left;white-space:pre-wrap;}"
|
103 |
-
.".osh-debug-content{padding:10px;}"
|
104 |
-
.".osh-replacement{color:#ff3000;}"
|
105 |
-
."</style>"
|
106 |
-
."<div id=\"osh-debug-".$index."\" class=\"osh-debug\"><pre class=\"osh-debug-content\"><span style=\"float:right;cursor:pointer;\" onclick=\"document.getElementById('osh-debug-".$index."').style.display = 'none';\">[<span style=\"padding:0 5px;color:#f00;\">X</span>]</span>"
|
107 |
-
."<p>".$this->debug_header."</p>".$this->debug_output."</pre></div>";
|
108 |
-
}
|
109 |
-
}
|
110 |
-
|
111 |
-
public function setDebugHeader($process) {
|
112 |
-
$header = 'DEBUG app/code/community/Chronopost/Chronorelais/Model/Carrier/ChronorelaisShippingHelper.php<br/>';
|
113 |
-
foreach ($process['data'] as $key => $data) {
|
114 |
-
$header .= ' <span class="osh-key">'.$key.'</span> = <span class="osh-formula">'.$this->_toString($data).'</span><br/>';
|
115 |
-
}
|
116 |
-
$this->debug_header = $header;
|
117 |
-
}
|
118 |
-
|
119 |
-
public function getConfig() {
|
120 |
-
return $this->_config;
|
121 |
-
}
|
122 |
-
|
123 |
-
public function getMessages() {
|
124 |
-
$messages = $this->_messages;
|
125 |
-
$this->_messages = array();
|
126 |
-
return $messages;
|
127 |
-
}
|
128 |
-
|
129 |
-
public function formatConfig($compress) {
|
130 |
-
$output = '';
|
131 |
-
foreach ($this->_config as $code => $row) {
|
132 |
-
if (!isset($row['lines'])) {
|
133 |
-
if (isset($row['*comment']['value'])) {
|
134 |
-
$output .= trim($row['*comment']['value'])."\n";
|
135 |
-
}
|
136 |
-
$output .= '{'.($compress ? '' : "\n");
|
137 |
-
foreach ($row as $key => $property) {
|
138 |
-
if (substr($key,0,1)!='*') {
|
139 |
-
$value = $property['value'];
|
140 |
-
if (isset($property['comment'])) $output .= ($compress ? '' : "\t").'/* '.$property['comment'].' */'.($compress ? '' : "\n");
|
141 |
-
$output .= ($compress ? '' : "\t").$key.':'.($compress ? '' : ' ');
|
142 |
-
if (is_bool($value)) $output .= $value ? 'true' : 'false';
|
143 |
-
else if (is_int($value)) $output .= $value;
|
144 |
-
else if ((string)((float)$value)==$value) $output .= $value;
|
145 |
-
else $output .= '"'.str_replace('"','\\"',$value).'"';
|
146 |
-
$output .= ','.($compress ? '' : "\n");
|
147 |
-
}
|
148 |
-
}
|
149 |
-
if ($compress) $output = preg_replace('/,$/','',$output);
|
150 |
-
$output .= "}\n".($compress ? '' : "\n");
|
151 |
-
} else {
|
152 |
-
$output .= $row['lines']."\n";
|
153 |
-
}
|
154 |
-
}
|
155 |
-
return $compress ? $this->compress($output) : $this->uncompress($output);
|
156 |
-
}
|
157 |
-
|
158 |
-
public function checkConfig() {
|
159 |
-
$process = array(
|
160 |
-
'result' => null,
|
161 |
-
'data' => array(
|
162 |
-
'cart.price_excluding_tax' => 0,
|
163 |
-
'cart.price_including_tax' => 0,
|
164 |
-
'destination.country.code' => '',
|
165 |
-
'destination.country.name' => '',
|
166 |
-
'destination.region.code' => '',
|
167 |
-
'destination.postcode' => '',
|
168 |
-
'origin.country.code' => '',
|
169 |
-
'origin.country.name' => '',
|
170 |
-
'origin.region.code' => '',
|
171 |
-
'origin.postcode' => '',
|
172 |
-
'free_shipping' => false,
|
173 |
-
'customer.group.id' => '',
|
174 |
-
'customer.group.code' => '',
|
175 |
-
'cart.weight' => 0,
|
176 |
-
'cart.weight.unit' => 'kg',
|
177 |
-
'cart.quantity' => 0,
|
178 |
-
),
|
179 |
-
'cart.items' => array(),
|
180 |
-
'products' => array(),
|
181 |
-
'config' => $this->_config,
|
182 |
-
);
|
183 |
-
foreach ($this->_config as $code => &$row) {
|
184 |
-
$this->processRow($process,$row,$check_all_conditions=true);
|
185 |
-
foreach ($row as $property_key => $property_value) {
|
186 |
-
if (substr($property_key,0,1)!='*') $this->getRowProperty($row,$property_key);
|
187 |
-
}
|
188 |
-
}
|
189 |
-
}
|
190 |
-
|
191 |
-
public function processRow($process, &$row, $is_checking=false) {
|
192 |
-
if (!isset($row['*code'])) return;
|
193 |
-
|
194 |
-
self::debug('process row <span class="osh-key">'.$row['*code'].'</span>',1);
|
195 |
-
if (!isset($row['label']['value'])) $row['label']['value'] = '***';
|
196 |
-
|
197 |
-
$enabled = $this->getRowProperty($row,'enabled');
|
198 |
-
if (isset($enabled)) {
|
199 |
-
if (!$is_checking && !$enabled) {
|
200 |
-
$this->addMessage('info',$row,'enabled','Configuration disabled');
|
201 |
-
return new OCS_Result(false);
|
202 |
-
}
|
203 |
-
}
|
204 |
-
|
205 |
-
$conditions = $this->getRowProperty($row,'conditions');
|
206 |
-
if (isset($conditions)) {
|
207 |
-
$result = $this->_processFormula($process,$row,'conditions',$conditions,$is_checking);
|
208 |
-
if (!$is_checking) {
|
209 |
-
if (!$result->success) return $result;
|
210 |
-
if (!$result->result) {
|
211 |
-
$this->addMessage('info',$row,'conditions',"The cart doesn't match conditions");
|
212 |
-
return new OCS_Result(false);
|
213 |
-
}
|
214 |
-
}
|
215 |
-
}
|
216 |
-
|
217 |
-
$destination = $this->getRowProperty($row,'destination');
|
218 |
-
if (isset($destination)) {
|
219 |
-
$destination_match = $this->_addressMatch($destination,array(
|
220 |
-
'country_code' => $process['data']['destination.country.code'],
|
221 |
-
'region_code' => $process['data']['destination.region.code'],
|
222 |
-
'postcode' => $process['data']['destination.postcode']
|
223 |
-
));
|
224 |
-
if (!$is_checking && !$destination_match) {
|
225 |
-
$this->addMessage('info',$row,'destination',"The shipping method doesn't cover the zone");
|
226 |
-
return new OCS_Result(false);
|
227 |
-
}
|
228 |
-
}
|
229 |
-
|
230 |
-
$origin = $this->getRowProperty($row,'origin');
|
231 |
-
if (isset($origin)) {
|
232 |
-
$origin_match = $this->_addressMatch($origin,array(
|
233 |
-
'country_code' => $process['data']['origin.country.code'],
|
234 |
-
'region_code' => $process['data']['origin.region.code'],
|
235 |
-
'postcode' => $process['data']['origin.postcode']
|
236 |
-
));
|
237 |
-
if (!$is_checking && !$origin_match) {
|
238 |
-
$this->addMessage('info',$row,'origin',"The shipping method doesn't match to shipping origin");
|
239 |
-
return new OCS_Result(false);
|
240 |
-
}
|
241 |
-
}
|
242 |
-
|
243 |
-
$customer_groups = $this->getRowProperty($row,'customer_groups');
|
244 |
-
if (isset($customer_groups)) {
|
245 |
-
$groups = explode(',',$customer_groups);
|
246 |
-
$group_match = false;
|
247 |
-
//self::debug('code:'.$process['data']['customer.group.code'].', id:'.$process['data']['customer.group.id']);
|
248 |
-
foreach ($groups as $group) {
|
249 |
-
$group = trim($group);
|
250 |
-
if ($group==$process['data']['customer.group.code'] || is_int($group) && $group==$process['data']['customer.group.id'] || $group=='*') {
|
251 |
-
$group_match = true;
|
252 |
-
break;
|
253 |
-
}
|
254 |
-
}
|
255 |
-
if (!$is_checking && !$group_match) {
|
256 |
-
$this->addMessage('info',$row,'customer_groups',"The shipping method doesn't match to customer group (%s)",$process['data']['customer.group.code']);
|
257 |
-
return new OCS_Result(false);
|
258 |
-
}
|
259 |
-
}
|
260 |
-
|
261 |
-
//Chronopost quickcost method for dynamic price if it is set enabled
|
262 |
-
$quickcost = Mage::getStoreConfig('carriers/'.$process['data']['carrier.code'].'/quickcost');
|
263 |
-
if($quickcost) {
|
264 |
-
if($quickCostValues = $this->getQuickCostValue($process['data'])) {
|
265 |
-
if($quickCostValues->errorCode==0) {
|
266 |
-
return new OCS_Result(true,(float)$quickCostValues->amountTTC);
|
267 |
-
} else {
|
268 |
-
$this->addMessage('error',$row,'chronopost',$quickCostValues->errorMessage);
|
269 |
-
return new OCS_Result(false);
|
270 |
-
}
|
271 |
-
} else {
|
272 |
-
return new OCS_Result(false);
|
273 |
-
}
|
274 |
-
}
|
275 |
-
|
276 |
-
$fees = $this->getRowProperty($row,'fees');
|
277 |
-
if (isset($fees)) {
|
278 |
-
$result = $this->_processFormula($process,$row,'fees',$fees,$is_checking);
|
279 |
-
if (!$result->success) return $result;
|
280 |
-
self::debug(' => <span class="osh-info">result = <span class="osh-formula">'.$this->_toString($result->result).'</span>',1);
|
281 |
-
return new OCS_Result(true,(float)$result->result);
|
282 |
-
}
|
283 |
-
|
284 |
-
return new OCS_Result(false);
|
285 |
-
}
|
286 |
-
|
287 |
-
public function getQuickCostValue($processData) {
|
288 |
-
$quickCost = array();
|
289 |
-
$_helper = Mage::helper('chronorelais');
|
290 |
-
$account_number = $_helper->getConfigurationAccountNumber();
|
291 |
-
$password = $_helper->getConfigurationAccountPass();
|
292 |
-
$productCode = $_helper->getChronoProductCode($processData['destination.country.code'], $processData['carrier.code']);
|
293 |
-
$origin_postcode = $_helper->getConfigurationShipperInfo('zipcode');
|
294 |
-
|
295 |
-
//to get arrival code
|
296 |
-
$arrCode = $processData['destination.postcode'];
|
297 |
-
if($processData['carrier.code']=='chronoexpress') {
|
298 |
-
$arrCode = $processData['destination.country.code'];
|
299 |
-
}
|
300 |
-
|
301 |
-
$quickCost = array(
|
302 |
-
'contratNumber' => $account_number,
|
303 |
-
'depCode' => $origin_postcode,
|
304 |
-
'arrCode' => $arrCode,
|
305 |
-
'weight' => $processData['cart.weight'],
|
306 |
-
'productCode' => $productCode,
|
307 |
-
'type' => 'M',
|
308 |
-
'password' => $password
|
309 |
-
);
|
310 |
-
|
311 |
-
try {
|
312 |
-
$quickcost_url = Mage::helper('chronorelais')->getConfigData('carriers/'.$
|
313 |
-
if(!$quickcost_url) { $quickcost_url = "http://wsshipping.chronopost.fr/wsQuickcost/services/ServiceQuickCost?wsdl"; }
|
314 |
-
$client = new SoapClient($quickcost_url);
|
315 |
-
$webservbt = $client->__call("quickCost",$quickCost);
|
316 |
-
return $webservbt;
|
317 |
-
} catch(SoapFault $fault) {
|
318 |
-
$this->addMessage('info',$row,'chronopost',$fault->faultstring);
|
319 |
-
return false;
|
320 |
-
}
|
321 |
-
}
|
322 |
-
|
323 |
-
public function getRowProperty(&$row, $key, $original_row=null, $original_key=null) {
|
324 |
-
$property = null;
|
325 |
-
$output = null;
|
326 |
-
if (isset($original_row) && isset($original_key) && $original_row['*code']==$row['*code'] && $original_key==$key) {
|
327 |
-
$this->addMessage('error',$row,$key,'Infinite loop %s',"<span class=\"code\">{".$row['*code'].'.'.$key."}</span>");
|
328 |
-
return array('error' => 'Infinite loop');
|
329 |
-
}
|
330 |
-
if (isset($row[$key]['value'])) {
|
331 |
-
$property = $row[$key]['value'];
|
332 |
-
$output = $property;
|
333 |
-
self::debug(' get <span class="osh-key">'.$row['*code'].'</span>.<span class="osh-key">'.$key.'</span> = <span class="osh-formula">'.$this->_toString($property).'</span>',5);
|
334 |
-
preg_match_all('/{([a-z0-9_]+)\.([a-z0-9_]+)}/i',$output,$result_set,PREG_SET_ORDER);
|
335 |
-
foreach ($result_set as $result) {
|
336 |
-
list($original,$ref_code,$ref_key) = $result;
|
337 |
-
if (!in_array($ref_code,array('module','date','store','cart','product','selection','customvar'))) {
|
338 |
-
if ($ref_code==$row['code']['value'] && $ref_key==$key) {
|
339 |
-
$this->addMessage('error',$row,$key,'Infinite loop %s',"<span class=\"code\">".$original."</span>");
|
340 |
-
return null;
|
341 |
-
}
|
342 |
-
if (isset($this->_config[$ref_code][$ref_key]['value'])) {
|
343 |
-
$replacement = $this->getRowProperty($this->_config[$ref_code],$ref_key,
|
344 |
-
isset($original_row) ? $original_row : $row,isset($original_key) ? $original_key : $key);
|
345 |
-
if (is_array($replacement) && isset($replacement['error'])) {
|
346 |
-
return isset($original_row) ? $replacement : 'false';
|
347 |
-
}
|
348 |
-
} else {
|
349 |
-
$this->addMessage('error',$row,$key,'Non-existent property %s',"<span class=\"code\">".$original."</span>");
|
350 |
-
$replacement = 'null';
|
351 |
-
}
|
352 |
-
$output = $this->replace($original,$replacement,$output);
|
353 |
-
}
|
354 |
-
}
|
355 |
-
} else {
|
356 |
-
self::debug(' get <span class="osh-key">'.$row['*code'].'</span>.<span class="osh-key">'.$key.'</span> = <span class="osh-formula">null</span>',5);
|
357 |
-
}
|
358 |
-
return $output;
|
359 |
-
}
|
360 |
-
|
361 |
-
protected function _toString($value) {
|
362 |
-
if (!isset($value)) return 'null';
|
363 |
-
else if (is_bool($value)) return $value ? 'true' : 'false';
|
364 |
-
else return $value;
|
365 |
-
}
|
366 |
-
|
367 |
-
protected function replace($from, $to, $input) {
|
368 |
-
if ($from===$to) return $input;
|
369 |
-
if (strpos($input,$from)===false) return $input;
|
370 |
-
$to = $this->_toString($to);
|
371 |
-
self::debug(' replace <span class="osh-replacement">'.$this->_toString($from).'</span> by <span class="osh-replacement">'.$to.'</span> => <span class="osh-formula">'.str_replace($from,'<span class="osh-replacement">'.$to.'</span>',$input).'</span>',5);
|
372 |
-
return str_replace($from,$to,$input);
|
373 |
-
}
|
374 |
-
|
375 |
-
protected function _min() {
|
376 |
-
$args = func_get_args();
|
377 |
-
$min = null;
|
378 |
-
foreach ($args as $arg) {
|
379 |
-
if (isset($arg) && (!isset($min) || $min>$arg)) $min = $arg;
|
380 |
-
}
|
381 |
-
return $min;
|
382 |
-
}
|
383 |
-
|
384 |
-
protected function _max() {
|
385 |
-
$args = func_get_args();
|
386 |
-
$max = null;
|
387 |
-
foreach ($args as $arg) {
|
388 |
-
if (isset($arg) && (!isset($max) || $max<$arg)) $max = $arg;
|
389 |
-
}
|
390 |
-
return $max;
|
391 |
-
}
|
392 |
-
|
393 |
-
protected function _processFormula($process, &$row, $property_key, $formula_string, $is_checking, $use_cache=true)
|
394 |
-
{
|
395 |
-
$result = $this->_prepareFormula($process,$row,$property_key,$formula_string,$is_checking,$use_cache);
|
396 |
-
if (!$result->success) return $result;
|
397 |
-
|
398 |
-
$eval_result = $this->_evalFormula($result->result);
|
399 |
-
if (!isset($eval_result)) {
|
400 |
-
$this->addMessage('error',$row,$property_key,'Invalid formula');
|
401 |
-
$result = new OCS_Result(false);
|
402 |
-
if ($use_cache) $this->setCache($formula_string,$result);
|
403 |
-
return $result;
|
404 |
-
}
|
405 |
-
self::debug(' formula evaluation = <span class="osh-formula">'.$this->_toString($eval_result).'</span>',10);
|
406 |
-
$result = new OCS_Result(true,$eval_result);
|
407 |
-
if ($use_cache) $this->setCache($formula_string,$result);
|
408 |
-
return $result;
|
409 |
-
}
|
410 |
-
|
411 |
-
public function evalInput($process, $row, $property_key, $input) {
|
412 |
-
$result = $this->_prepareFormula($process,$row,$property_key,$input,$is_checking=false,$use_cache=true);
|
413 |
-
return $result->success ? $result->result : $input;
|
414 |
-
}
|
415 |
-
|
416 |
-
protected function setCache($expression, $value) {
|
417 |
-
if ($value instanceof OCS_Result) {
|
418 |
-
$this->_formula_cache[$expression] = $value;
|
419 |
-
self::debug(' cache <span class="osh-replacement">'.$expression.'</span> = <span class="osh-formula">'.$this->_toString($this->_formula_cache[$expression]).'</span>',10);
|
420 |
-
} else {
|
421 |
-
$value = $this->_toString($value);
|
422 |
-
$this->_expression_cache[$expression] = $value;
|
423 |
-
self::debug(' cache <span class="osh-replacement">'.$expression.'</span> = <span class="osh-formula">'.$value.'</span>',10);
|
424 |
-
}
|
425 |
-
}
|
426 |
-
|
427 |
-
protected function _prepareFormula($process, $row, $property_key, $formula_string, $is_checking, $use_cache=true)
|
428 |
-
{
|
429 |
-
if ($use_cache && isset($this->_formula_cache[$formula_string])) {
|
430 |
-
$result = $this->_formula_cache[$formula_string];
|
431 |
-
self::debug(' get cached formula <span class="osh-replacement">'.$formula_string.'</span> = <span class="osh-formula">'.$this->_toString($result->result).'</span>',10);
|
432 |
-
return $result;
|
433 |
-
}
|
434 |
-
|
435 |
-
$formula = $formula_string;
|
436 |
-
//self::debug(' formula = <span class="osh-formula">'.$formula.'</span>',10);
|
437 |
-
|
438 |
-
while (preg_match("#{foreach product\.((?:attribute|option)\.(?:[a-z0-9_]+))}(.*){/foreach}#i",$formula,$result)) {
|
439 |
-
$original = $result[0];
|
440 |
-
if ($use_cache && isset($this->_expression_cache[$original])) {
|
441 |
-
$replacement = $this->_expression_cache[$original];
|
442 |
-
self::debug(' get cached expression <span class="osh-replacement">'.$original.'</span> = <span class="osh-formula">'.$replacement.'</span>',10);
|
443 |
-
}
|
444 |
-
else {
|
445 |
-
$replacement = 0;
|
446 |
-
list($filter_property_type,$filter_property_name) = explode('.',$result[1]);
|
447 |
-
$selections = array();
|
448 |
-
self::debug(' :: foreach <span class="osh-key">'.$filter_property_type.'</span>.<span class="osh-key">'.$filter_property_name.'</span>',10);
|
449 |
-
foreach ($process['products'] as $product) {
|
450 |
-
$tmp_value = $this->_getProductProperty($product,$filter_property_type,$filter_property_name,$get_by_id=false);
|
451 |
-
self::debug(' products[<span class="osh-formula">'.$product->getName().'</span>].<span class="osh-key">'.$filter_property_type.'</span>.<span class="osh-key">'.$filter_property_name.'</span> = <span class="osh-formula">'.$this->_toString($tmp_value).'</span>',10);
|
452 |
-
$key = 'val_'.$tmp_value;
|
453 |
-
$sel = isset($selections[$key]) ? $selections[$key] : null;
|
454 |
-
$selections[$key]['products'][] = $product;
|
455 |
-
$selections[$key]['weight'] = (isset($sel['weight']) ? $sel['weight'] : 0)+$product->getAttribute('weight')*$product->getQuantity();
|
456 |
-
$selections[$key]['quantity'] = (isset($sel['quantity']) ? $sel['quantity'] : 0)+$product->getQuantity();
|
457 |
-
}
|
458 |
-
self::debug(' :: start foreach',10);
|
459 |
-
foreach ($selections as $selection) {
|
460 |
-
$process2 = $process;
|
461 |
-
$process2['products'] = $selection['products'];
|
462 |
-
$process2['data']['selection.quantity'] = $selection['quantity'];
|
463 |
-
$process2['data']['selection.weight'] = $selection['weight'];
|
464 |
-
$process_result = $this->_processFormula($process2,$row,$property_key,$result[2],$is_checking,$tmp_use_cache=false);
|
465 |
-
$replacement += $process_result->result;
|
466 |
-
}
|
467 |
-
self::debug(' :: end foreach <span class="osh-key">'.$filter_property_type.'</span>.<span class="osh-key">'.$filter_property_name.'</span>',10);
|
468 |
-
if ($use_cache) $this->setCache($original,$replacement);
|
469 |
-
}
|
470 |
-
$formula = $this->replace($original,$replacement,$formula);
|
471 |
-
}
|
472 |
-
|
473 |
-
$formula = str_replace(array("\n","\t"),array('',''),$formula);
|
474 |
-
|
475 |
-
while (preg_match("#{customvar\.([a-z0-9_]+)}#i",$formula,$result)) {
|
476 |
-
$original = $result[0];
|
477 |
-
$replacement = Mage::getModel('core/variable')->loadByCode($result[1])->getValue('plain');
|
478 |
-
$formula = $this->replace($original,$replacement,$formula);
|
479 |
-
}
|
480 |
-
|
481 |
-
$first_product = isset($process['products'][0]) ? $process['products'][0] : null;
|
482 |
-
if (!isset($process['data']['selection.weight'])) $process['data']['selection.weight'] = $process['data']['cart.weight'];
|
483 |
-
if (!isset($process['data']['selection.quantity'])) $process['data']['selection.quantity'] = $process['data']['cart.quantity'];
|
484 |
-
$process['data']['product.weight'] = isset($first_product) ? $first_product->getAttribute('weight') : 0;
|
485 |
-
$process['data']['product.quantity'] = isset($first_product) ? $first_product->getQuantity() : 0;
|
486 |
-
|
487 |
-
foreach ($process['data'] as $original => $replacement) {
|
488 |
-
$formula = $this->replace('{'.$original.'}',$replacement,$formula);
|
489 |
-
}
|
490 |
-
|
491 |
-
if (isset($first_product)) {
|
492 |
-
while (preg_match("#{product\.(attribute|option|stock)\.([a-z0-9_]+)}#i",$formula,$result)) {
|
493 |
-
$original = $result[0];
|
494 |
-
switch ($result[1]) {
|
495 |
-
case 'attribute': $replacement = $first_product->getAttribute($result[2]); break;
|
496 |
-
case 'option': $replacement = $first_product->getOption($result[2]); break;
|
497 |
-
case 'stock': $replacement = $first_product->getStockData($result[2]); break;
|
498 |
-
}
|
499 |
-
$formula = $this->replace($original,$replacement,$formula);
|
500 |
-
}
|
501 |
-
}
|
502 |
-
|
503 |
-
//while (preg_match("/{(count|all|any) (attribute|option) '([^'\)]+)' ?(==|<=|>=|<|>|!=) ?(".self::$FLOAT_REGEX."|true|false|'[^'\)]*')}/",$formula,$result)
|
504 |
-
// || preg_match("/{(sum|count distinct) (attribute|option) '([^'\)]+)'}/",$formula,$result))
|
505 |
-
while (preg_match("/{(count) products(?: where ([^}]+))?}/i",$formula,$result)
|
506 |
-
|| preg_match("/{(sum|count distinct) product\.(attribute|option)\.([a-z0-9_]+)(?: where ([^}]+))?}/i",$formula,$result)) {
|
507 |
-
$original = $result[0];
|
508 |
-
if ($use_cache && isset($this->_expression_cache[$original])) {
|
509 |
-
$replacement = $this->_expression_cache[$original];
|
510 |
-
self::debug(' get cached expression <span class="osh-replacement">'.$original.'</span> = <span class="osh-formula">'.$replacement.'</span>',10);
|
511 |
-
}
|
512 |
-
else {
|
513 |
-
$replacement = $this->_processProductProperty($process['products'],$result);
|
514 |
-
if ($use_cache) $this->setCache($result[0],$replacement);
|
515 |
-
}
|
516 |
-
$formula = $this->replace($original,$replacement,$formula);
|
517 |
-
}
|
518 |
-
|
519 |
-
//while (preg_match("/{table '([^']+)' ([^}]+)}/",$formula,$result))
|
520 |
-
while (preg_match("/{table ([^}]+) in ([0-9\.:,\*\[\] ]+)}/i",$formula,$result)) {
|
521 |
-
$original = $result[0];
|
522 |
-
if ($use_cache && isset($this->_expression_cache[$original])) {
|
523 |
-
$replacement = $this->_expression_cache[$original];
|
524 |
-
self::debug(' get cached expression <span class="osh-replacement">'.$original.'</span> = <span class="osh-formula">'.$replacement.'</span>',10);
|
525 |
-
} else {
|
526 |
-
$reference_value = $this->_evalFormula($result[1]);
|
527 |
-
if (isset($reference_value)) {
|
528 |
-
$fees_table_string = $result[2];
|
529 |
-
|
530 |
-
if (!preg_match('#^'.self::$COUPLE_REGEX.'(?:, *'.self::$COUPLE_REGEX.')*$#',$fees_table_string)) {
|
531 |
-
$this->addMessage('error',$row,$property_key,'Error in table %s','<span class="osh-formula">'.htmlentities($result[0]).'</span>');
|
532 |
-
$result = new OCS_Result(false);
|
533 |
-
if ($use_cache) $this->setCache($formula_string,$result);
|
534 |
-
return $result;
|
535 |
-
}
|
536 |
-
$fees_table = explode(',',$fees_table_string);
|
537 |
-
|
538 |
-
$replacement = null;
|
539 |
-
foreach ($fees_table as $item) {
|
540 |
-
$fee_data = explode(':',$item);
|
541 |
-
|
542 |
-
$fee = trim($fee_data[1]);
|
543 |
-
$max_value = trim($fee_data[0]);
|
544 |
-
|
545 |
-
$last_char = $max_value{strlen($max_value)-1};
|
546 |
-
if ($last_char=='[') $including_max_value = false;
|
547 |
-
else if ($last_char==']') $including_max_value = true;
|
548 |
-
else $including_max_value = true;
|
549 |
-
|
550 |
-
$max_value = str_replace(array('[',']'),'',$max_value);
|
551 |
-
|
552 |
-
if ($max_value=='*' || $including_max_value && $reference_value<=$max_value || !$including_max_value && $reference_value<$max_value) {
|
553 |
-
$replacement = $fee;//$this->_calculateFee($process,$fee,$var);
|
554 |
-
break;
|
555 |
-
}
|
556 |
-
}
|
557 |
-
}
|
558 |
-
$replacement = $this->_toString($replacement);
|
559 |
-
if ($use_cache) $this->setCache($original,$replacement);
|
560 |
-
}
|
561 |
-
$formula = $this->replace($original,$replacement,$formula);
|
562 |
-
}
|
563 |
-
$result = new OCS_Result(true,$formula);
|
564 |
-
return $result;
|
565 |
-
}
|
566 |
-
|
567 |
-
protected function _evalFormula($formula) {
|
568 |
-
if (is_bool($formula)) return $formula;
|
569 |
-
if (!preg_match('/^(?:floor|ceil|round|max|min|rand|pow|pi|sqrt|log|exp|abs|int|float|true|false|null|and|or|in|substr|strtolower'
|
570 |
-
.'|in_array\(\'(?:[^\']*)\', *array\( *(?:\'(?:[^\']+)\') *(?: *, *\'(?:[^\']+)\')* *\) *\)'
|
571 |
-
.'|\'[^\']*\'|[0-9,\'\.\-\(\)\*\/\?\:\+\<\>\=\&\|%! ])*$/',$formula)) {
|
572 |
-
$errors = array(
|
573 |
-
PREG_NO_ERROR => 'PREG_NO_ERROR',
|
574 |
-
PREG_INTERNAL_ERROR => 'PREG_INTERNAL_ERROR',
|
575 |
-
PREG_BACKTRACK_LIMIT_ERROR => 'PREG_BACKTRACK_LIMIT_ERROR',
|
576 |
-
PREG_RECURSION_LIMIT_ERROR => 'PREG_RECURSION_LIMIT_ERROR',
|
577 |
-
PREG_BAD_UTF8_ERROR => 'PREG_BAD_UTF8_ERROR',
|
578 |
-
PREG_BAD_UTF8_OFFSET_ERROR => 'PREG_BAD_UTF8_OFFSET_ERROR',
|
579 |
-
);
|
580 |
-
$error = preg_last_error();
|
581 |
-
if (isset($errors[$error])) $error = $errors[$error];
|
582 |
-
self::debug(' doesn\'t match ('.$error.')',10);
|
583 |
-
return null;
|
584 |
-
}
|
585 |
-
$formula = str_replace(
|
586 |
-
array('min','max'),
|
587 |
-
array('$this->_min','$this->_max'),
|
588 |
-
$formula
|
589 |
-
);
|
590 |
-
$eval_result = null;
|
591 |
-
@eval('$eval_result = ('.$formula.');');
|
592 |
-
return $eval_result;
|
593 |
-
}
|
594 |
-
|
595 |
-
protected function _getOptionsAndData($string) {
|
596 |
-
if (preg_match('/^(\\s*\(\\s*([^\] ]*)\\s*\)\\s*)/',$string,$result)) {
|
597 |
-
$options = $result[2];
|
598 |
-
$data = str_replace($result[1],'',$string);
|
599 |
-
} else {
|
600 |
-
$options = '';
|
601 |
-
$data = $string;
|
602 |
-
}
|
603 |
-
return array(
|
604 |
-
'options' => $options,
|
605 |
-
'data' => $data,
|
606 |
-
);
|
607 |
-
}
|
608 |
-
|
609 |
-
public function compress($input) {
|
610 |
-
if (preg_match_all("/{table (.*) in (".self::$COUPLE_REGEX."(?:, *".self::$COUPLE_REGEX.")*)}/imsU",$input,$result,PREG_SET_ORDER)) {
|
611 |
-
foreach ($result as $result_i) {
|
612 |
-
$fees_table = explode(',',$result_i[2]);
|
613 |
-
$value = null;
|
614 |
-
foreach ($fees_table as $index => $item) {
|
615 |
-
list($max_value,$fee) = explode(':',$item);
|
616 |
-
$last_char = $max_value{strlen($max_value)-1};
|
617 |
-
if (in_array($last_char,array('[',']'))) {
|
618 |
-
$including_char = $last_char;
|
619 |
-
$max_value = str_replace(array('[',']'),'',$max_value);
|
620 |
-
} else $including_char = '';
|
621 |
-
$fees_table[$index] = ((float)$max_value).$including_char.':'.((float)$fee);
|
622 |
-
}
|
623 |
-
$input = str_replace($result_i[2],implode(',',$fees_table),$input);
|
624 |
-
$input = str_replace($result_i[1],trim($result_i[1]),$input);
|
625 |
-
}
|
626 |
-
}
|
627 |
-
if (preg_match_all("#{foreach ([^}]*)}(.*){/foreach}#imsU",$input,$result,PREG_SET_ORDER)) {
|
628 |
-
foreach ($result as $result_i) {
|
629 |
-
$input = str_replace($result_i[1],trim($result_i[1]),$input);
|
630 |
-
$input = str_replace($result_i[2],trim($result_i[2]),$input);
|
631 |
-
}
|
632 |
-
}
|
633 |
-
return '$$'.str_replace(
|
634 |
-
self::$UNCOMPRESSED_STRINGS,
|
635 |
-
self::$COMPRESSED_STRINGS,
|
636 |
-
$input
|
637 |
-
);
|
638 |
-
}
|
639 |
-
|
640 |
-
public function uncompress($input) {
|
641 |
-
if (preg_match_all("/{table (.*) in (".self::$COUPLE_REGEX."(?:, *".self::$COUPLE_REGEX.")*)}/iU",$input,$result,PREG_SET_ORDER)) {
|
642 |
-
foreach ($result as $result_i) {
|
643 |
-
$fees_table = explode(',',$result_i[2]);
|
644 |
-
$value = null;
|
645 |
-
foreach ($fees_table as $index => $item) {
|
646 |
-
list($max_value,$fee) = explode(':',$item);
|
647 |
-
$last_char = $max_value{strlen($max_value)-1};
|
648 |
-
if (in_array($last_char,array('[',']'))) {
|
649 |
-
$including_char = $last_char;
|
650 |
-
$max_value = str_replace(array('[',']'),'',$max_value);
|
651 |
-
} else $including_char = '';
|
652 |
-
$max_value = (float)$max_value;
|
653 |
-
$fee = (float)$fee;
|
654 |
-
$new_max_value = number_format($max_value,2,'.','');
|
655 |
-
$new_fee = number_format($fee,2,'.','');
|
656 |
-
$fees_table[$index] = (((float)$new_max_value)==$max_value ? $new_max_value : $max_value).$including_char.':'
|
657 |
-
.(((float)$new_fee)==$fee ? $new_fee : $fee);
|
658 |
-
}
|
659 |
-
$input = str_replace($result_i[2],implode(', ',$fees_table),$input);
|
660 |
-
$input = str_replace($result_i[1],trim($result_i[1]),$input);
|
661 |
-
}
|
662 |
-
}
|
663 |
-
if (preg_match_all("#{foreach ([^}]*)}(.*){/foreach}#iU",$input,$result,PREG_SET_ORDER)) {
|
664 |
-
foreach ($result as $result_i) {
|
665 |
-
$input = str_replace($result_i[1],trim($result_i[1]),$input);
|
666 |
-
$input = str_replace($result_i[2],trim($result_i[2]),$input);
|
667 |
-
}
|
668 |
-
}
|
669 |
-
return str_replace(
|
670 |
-
self::$COMPRESSED_STRINGS,
|
671 |
-
self::$UNCOMPRESSED_STRINGS,
|
672 |
-
$input
|
673 |
-
);
|
674 |
-
}
|
675 |
-
|
676 |
-
public function parseProperty($input) {
|
677 |
-
$value = $input==='false' || $input==='true' ? $input=='true' : str_replace('\"','"',preg_replace('/^(?:"|\')(.*)(?:"|\')$/s','$1',$input));
|
678 |
-
return $value==='' ? null : $value;
|
679 |
-
}
|
680 |
-
|
681 |
-
public function cleanProperty(&$row, $key) {
|
682 |
-
$input = $row[$key]['value'];
|
683 |
-
if (is_string($input)) {
|
684 |
-
$input = str_replace(array("\n"),array(''),$input);
|
685 |
-
while (preg_match('/({TABLE |{SUM |{COUNT | DISTINCT | IN )/',$input,$resi)) {
|
686 |
-
$input = str_replace($resi[0],strtolower($resi[0]),$input);
|
687 |
-
}
|
688 |
-
|
689 |
-
while (preg_match('/{{customVar code=([a-zA-Z0-9_-]+)}}/',$input,$resi)) {
|
690 |
-
$input = str_replace($resi[0],'{customvar.'.$resi[1].'}',$input);
|
691 |
-
}
|
692 |
-
|
693 |
-
$regex = "{(weight|products_quantity|price_including_tax|price_excluding_tax|country)}";
|
694 |
-
if (preg_match('/'.$regex.'/',$input,$resi)) {
|
695 |
-
$this->addMessage('warning',$row,$key,'Usage of deprecated syntax %s','<span class="osh-formula">'.$resi[0].'</span>');
|
696 |
-
while (preg_match('/'.$regex.'/',$input,$resi)) {
|
697 |
-
switch ($resi[1]) {
|
698 |
-
case 'price_including_tax':
|
699 |
-
case 'price_excluding_tax':
|
700 |
-
case 'weight':
|
701 |
-
$input = str_replace($resi[0],"{cart.".$resi[1]."}",$input);
|
702 |
-
break;
|
703 |
-
case 'products_quantity': $input = str_replace($resi[0],"{cart.quantity}",$input); break;
|
704 |
-
case 'country': $input = str_replace($resi[0],"{destination.country.name}",$input); break;
|
705 |
-
}
|
706 |
-
}
|
707 |
-
}
|
708 |
-
|
709 |
-
$regex1 = "{copy '([a-zA-Z0-9_]+)'\.'([a-zA-Z0-9_]+)'}";
|
710 |
-
if (preg_match('/'.$regex1.'/',$input,$resi)) {
|
711 |
-
$this->addMessage('warning',$row,$key,'Usage of deprecated syntax %s','<span class="osh-formula">'.$resi[0].'</span>');
|
712 |
-
while (preg_match('/'.$regex1.'/',$input,$resi)) $input = str_replace($resi[0],'{'.$resi[1].'.'.$resi[2].'}',$input);
|
713 |
-
}
|
714 |
-
|
715 |
-
$regex1 = "{(count|all|any) (attribute|option) '([^'\)]+)' ?((?:==|<=|>=|<|>|!=) ?(?:".self::$FLOAT_REGEX."|true|false|'[^'\)]*'))}";
|
716 |
-
$regex2 = "{(sum) (attribute|option) '([^'\)]+)'}";
|
717 |
-
if (preg_match('/'.$regex1.'/',$input,$resi) || preg_match('/'.$regex2.'/',$input,$resi)) {
|
718 |
-
$this->addMessage('warning',$row,$key,'Usage of deprecated syntax %s','<span class="osh-formula">'.$resi[0].'</span>');
|
719 |
-
while (preg_match('/'.$regex1.'/',$input,$resi) || preg_match('/'.$regex2.'/',$input,$resi)) {
|
720 |
-
switch ($resi[1]) {
|
721 |
-
case 'count': $input = str_replace($resi[0],"{count products where product.".$resi[2]."s.".$resi[3].$resi[4]."}",$input); break;
|
722 |
-
case 'all': $input = str_replace($resi[0],"{count products where product.".$resi[2]."s.".$resi[3].$resi[4]."}=={products_quantity}",$input); break;
|
723 |
-
case 'any': $input = str_replace($resi[0],"{count products where product.".$resi[2]."s.".$resi[3].$resi[4]."}>0",$input); break;
|
724 |
-
case 'sum': $input = str_replace($resi[0],"{sum product.".$resi[2].".".$resi[3]."}",$input); break;
|
725 |
-
}
|
726 |
-
}
|
727 |
-
}
|
728 |
-
|
729 |
-
$regex = "((?:{| )product.(?:attribute|option))s.";
|
730 |
-
if (preg_match('/'.$regex.'/',$input,$resi)) {
|
731 |
-
$this->addMessage('warning',$row,$key,'Usage of deprecated syntax %s','<span class="osh-formula">'.$resi[0].'</span>');
|
732 |
-
while (preg_match('/'.$regex.'/',$input,$resi)) {
|
733 |
-
$input = str_replace($resi[0],$resi[1].'.',$input);
|
734 |
-
}
|
735 |
-
}
|
736 |
-
|
737 |
-
$regex = "{table '([^']+)' (".self::$COUPLE_REGEX."(?:, *".self::$COUPLE_REGEX.")*)}";
|
738 |
-
if (preg_match('/'.$regex.'/',$input,$resi)) {
|
739 |
-
$this->addMessage('warning',$row,$key,'Usage of deprecated syntax %s','<span class="osh-formula">'.$resi[0].'</span>');
|
740 |
-
while (preg_match('/'.$regex.'/',$input,$resi)) {
|
741 |
-
switch ($resi[1]) {
|
742 |
-
case 'products_quantity':
|
743 |
-
$input = str_replace($resi[0],"{table {cart.weight} in ".$resi[2]."}*{cart.quantity}",$input);
|
744 |
-
break;
|
745 |
-
default:
|
746 |
-
$input = str_replace($resi[0],"{table {cart.".$resi[1]."} in ".$resi[2]."}",$input);
|
747 |
-
break;
|
748 |
-
}
|
749 |
-
}
|
750 |
-
}
|
751 |
-
}
|
752 |
-
$row[$key]['value'] = $input;
|
753 |
-
}
|
754 |
-
|
755 |
-
protected function _parseInput() {
|
756 |
-
$config_string = str_replace(
|
757 |
-
array('>','<','“','”',utf8_encode(chr(147)),utf8_encode(chr(148)),'«','»',"\r\n","\t"),
|
758 |
-
array('>','<','"','"','"','"','"','"',"\n",' '),
|
759 |
-
$this->_input
|
760 |
-
);
|
761 |
-
|
762 |
-
if (substr($config_string,0,2)=='$$') $config_string = $this->uncompress(substr($config_string,2,strlen($config_string)));
|
763 |
-
|
764 |
-
//echo ini_get('pcre.backtrack_limit');
|
765 |
-
//exit;
|
766 |
-
|
767 |
-
$row_regex = ' *([a-z0-9_]+)\\s*:\\s*("(?:(?:[^"]|\\\\")*[^\\\\])?"|'.self::$FLOAT_REGEX.'|false|true)\\s*(,)? *(?:\\n)?';
|
768 |
-
if (!preg_match_all('/((?:#+[^{\\n]*\\s+)*)\\s*(#)?{\\s*('.$row_regex.')+\\s*}/i',$config_string,$result,PREG_SET_ORDER)) {
|
769 |
-
$errors = array(
|
770 |
-
PREG_NO_ERROR => 'PREG_NO_ERROR',
|
771 |
-
PREG_INTERNAL_ERROR => 'PREG_INTERNAL_ERROR',
|
772 |
-
PREG_BACKTRACK_LIMIT_ERROR => 'PREG_BACKTRACK_LIMIT_ERROR',
|
773 |
-
PREG_RECURSION_LIMIT_ERROR => 'PREG_RECURSION_LIMIT_ERROR',
|
774 |
-
PREG_BAD_UTF8_ERROR => 'PREG_BAD_UTF8_ERROR',
|
775 |
-
PREG_BAD_UTF8_OFFSET_ERROR => 'PREG_BAD_UTF8_OFFSET_ERROR',
|
776 |
-
);
|
777 |
-
$error = preg_last_error();
|
778 |
-
if (isset($errors[$error])) $error = $errors[$error];
|
779 |
-
self::debug(' preg_match_all error ('.$error.')',10);
|
780 |
-
}
|
781 |
-
|
782 |
-
$this->_config = array();
|
783 |
-
$available_keys = array(
|
784 |
-
'code','label','enabled','description','fees','conditions','destination','origin','customer_groups','tracking_url',
|
785 |
-
'fees_table','fees_formula','fixed_fees','reference_value',
|
786 |
-
'prices_range','weights_range','product_properties',
|
787 |
-
'free_shipping__fees_table','free_shipping__fees_formula','free_shipping__fixed_fees','free_shipping__label',
|
788 |
-
);
|
789 |
-
|
790 |
-
foreach ($result as $block) {
|
791 |
-
$deprecated_properties = array();
|
792 |
-
$unknown_properties = array();
|
793 |
-
$missing_semicolon = array();
|
794 |
-
$obsolete_disabling_method = array();
|
795 |
-
|
796 |
-
//$before = strstr($config_string,$block[0],true); // Seulement compatible avec PHP 5.3.0
|
797 |
-
list($before) = explode($block[0],$config_string,2);
|
798 |
-
if ($before!==false && trim($before)!='') {
|
799 |
-
$config_string = substr($config_string,strlen($before));
|
800 |
-
$this->_addIgnoredLines(trim($before));
|
801 |
-
$this->addMessage('info',$row=null,null,'Ignored lines %s','<div class="code">'.trim($before).'</div>');
|
802 |
-
}
|
803 |
-
|
804 |
-
$config_string = str_replace($block[0], '', $config_string);
|
805 |
-
preg_match_all('/'.$row_regex.'/i',$block[0],$result2,PREG_SET_ORDER);
|
806 |
-
$block_string = $block[0];
|
807 |
-
|
808 |
-
$row = array();
|
809 |
-
$i = 1;
|
810 |
-
foreach ($result2 as $data) {
|
811 |
-
$key = $data[1];
|
812 |
-
if (in_array($key,$available_keys) || substr($key,0,1)=='_') {
|
813 |
-
$property = $this->parseProperty($data[2]);
|
814 |
-
if (isset($property)) {
|
815 |
-
$row[$key] = array('value' => $property, 'original_value' => $property);
|
816 |
-
$this->cleanProperty($row,$key);
|
817 |
-
}
|
818 |
-
if ($i>2) {
|
819 |
-
$block_string = str_replace($data[0],$i==3 ? "...\n" : '',$block_string);
|
820 |
-
}
|
821 |
-
if ($i!=count($result2) && !isset($data[3]) || isset($data[3]) && $data[3]!=',') {
|
822 |
-
if (preg_match('/^("|\')(.{40})(.*)("|\')$/s',$data[2],$resultx))
|
823 |
-
$missing_semicolon[] = trim(str_replace($data[2],$resultx[1].$resultx[2].' ...'.$resultx[4],$data[0]));
|
824 |
-
else $missing_semicolon[] = trim($data[0]);
|
825 |
-
}
|
826 |
-
} else {
|
827 |
-
if (!in_array($key,$unknown_properties)) $unknown_properties[] = $key;
|
828 |
-
}
|
829 |
-
$i++;
|
830 |
-
}
|
831 |
-
if ($block[1]!='') $row['*comment']['value'] = $block[1];
|
832 |
-
if ($block[2]=='#' && !isset($row['enabled'])) {
|
833 |
-
$row['enabled'] = array('value' => false);
|
834 |
-
$obsolete_disabling_method[] = $block_string;
|
835 |
-
}
|
836 |
-
|
837 |
-
$formula_fields_to_check = array();
|
838 |
-
if (isset($row['conditions'])) $formula_fields_to_check[] = 'conditions';
|
839 |
-
if (isset($row['fees'])) $formula_fields_to_check[] = 'fees';
|
840 |
-
|
841 |
-
if (count($formula_fields_to_check)>0) {
|
842 |
-
foreach ($formula_fields_to_check as $property) {
|
843 |
-
$property_value = $row[$property]['value'];
|
844 |
-
if (preg_match('/{ +/',$property_value)) {
|
845 |
-
$this->addMessage('warning',$row,$property,'There are unwanted spaces after char `%s`','{');
|
846 |
-
$property_value = preg_replace('/{ +/','{',$property_value);
|
847 |
-
}
|
848 |
-
if (preg_match('/ +}/',$property_value)) {
|
849 |
-
$this->addMessage('warning',$row,$property,'There are unwanted spaces before char `%s`','}');
|
850 |
-
$property_value = preg_replace('/ +}/','}',$property_value);
|
851 |
-
}
|
852 |
-
if (preg_match('/ +/',$property_value)) {
|
853 |
-
$this->addMessage('warning',$row,$property,'There are unwanted multiples spaces `%s`',preg_replace('/( +)/','<span class="osh-formula">*$1*</span>',$property_value));
|
854 |
-
$property_value = preg_replace('/ +/',' ',$property_value);
|
855 |
-
}
|
856 |
-
$row[$property]['value'] = trim($property_value);
|
857 |
-
}
|
858 |
-
}
|
859 |
-
|
860 |
-
$float_value_regex = '\\s*('.self::$POSITIVE_FLOAT_REGEX.'|\*)\\s*';
|
861 |
-
$conditions = array();
|
862 |
-
if (isset($row['prices_range'])) {
|
863 |
-
if (!in_array('prices_range',$deprecated_properties)) $deprecated_properties[] = 'prices_range';
|
864 |
-
|
865 |
-
$result = $this->_getOptionsAndData($row['prices_range']['value']);
|
866 |
-
$options = $result['options'];
|
867 |
-
$prices_range = $result['data'];
|
868 |
-
|
869 |
-
if (($options=='' || in_array($options,array('incl.tax','ttc')))
|
870 |
-
&& preg_match('/^\\s*(\[|\])?'.$float_value_regex.'=>'.$float_value_regex.'(\[|\])?\\s*$/',$prices_range,$result)) {
|
871 |
-
$min_price_included = $result[1]=='[';
|
872 |
-
$min_price = $result[2]=='*' ? -1 : (float)$result[2];
|
873 |
-
$max_price = $result[3]=='*' ? -1 : (float)$result[3];
|
874 |
-
$max_price_included = !isset($result[4]) || $result[4]==']' || $result[4]=='';
|
875 |
-
|
876 |
-
$tax_included = $options!='' && in_array($options,array('incl.tax','ttc')) || isset($row['reference_value']) && $row['reference_value']['value']=='price_including_tax';
|
877 |
-
$price = $tax_included ? '{cart.price_including_tax}' : '{cart.price_excluding_tax}';
|
878 |
-
|
879 |
-
if ($min_price!=-1) $conditions[] = $price.'>'.($min_price_included ? '=' : '').$min_price;
|
880 |
-
if ($max_price!=-1) $conditions[] = $price.'<'.($max_price_included ? '=' : '').$max_price;
|
881 |
-
}
|
882 |
-
else $this->addMessage('error',$row,null,'Unrecognized value of deprecated property %s %s','<span class="osh-key">prices_range</span>','<span class="osh-formula">'.$row['prices_range']['value'].'</span>');
|
883 |
-
unset($row['prices_range']);
|
884 |
-
}
|
885 |
-
if (isset($row['weights_range'])) {
|
886 |
-
if (!in_array('weights_range',$deprecated_properties)) $deprecated_properties[] = 'weights_range';
|
887 |
-
if (preg_match('/^\\s*(\[|\])?'.$float_value_regex.'=>'.$float_value_regex.'(\[|\])?\\s*$/',$row['weights_range']['value'],$result)) {
|
888 |
-
$min_weight_included = $result[1]=='[';
|
889 |
-
$min_weight = $result[2]=='*' ? -1 : (float)$result[2];
|
890 |
-
$max_weight = $result[3]=='*' ? -1 : (float)$result[3];
|
891 |
-
$max_weight_included = !isset($result[4]) || $result[4]==']' || $result[4]=='';
|
892 |
-
|
893 |
-
if ($min_weight!=-1) $conditions[] = '{cart.weight}>'.($min_weight_included ? '=' : '').$min_weight;
|
894 |
-
if ($max_weight!=-1) $conditions[] = '{cart.weight}<'.($max_weight_included ? '=' : '').$max_weight;
|
895 |
-
}
|
896 |
-
else $this->addMessage('error',$row,null,'Unrecognized value of deprecated property %s %s','<span class="osh-key">weights_range</span>','<span class="osh-formula">'.$row['weights_range']['value'].'</span>');
|
897 |
-
unset($row['weights_range']);
|
898 |
-
}
|
899 |
-
if (isset($row['product_properties'])) {
|
900 |
-
if (!in_array('product_properties',$deprecated_properties)) $deprecated_properties[] = 'product_properties';
|
901 |
-
$product_property_regex = "\\s*(and|or)? *\((?:(all|any|sum) )?(attribute|option) '([^'\)]+)' ?(==|=|<=|>=|<|>|!=) ?(".self::$FLOAT_REGEX."|true|false|'[^'\)]*')\)\\s*";
|
902 |
-
if (preg_match('/^('.$product_property_regex.')+$/',$row['product_properties']['value'],$result)) {
|
903 |
-
preg_match_all('/'.$product_property_regex.'/',$row['product_properties']['value'],$results,PREG_SET_ORDER);
|
904 |
-
$product_properties_condition = '';
|
905 |
-
foreach ($results as $result) {
|
906 |
-
$and_or = $result[1];
|
907 |
-
if ($and_or=='') $and_or = 'and';
|
908 |
-
$any_all_sum = $result[2];
|
909 |
-
if ($any_all_sum=='') $any_all_sum = 'any';
|
910 |
-
$property_type = $result[3];
|
911 |
-
$property_name = $result[4];
|
912 |
-
$cmp_symbol = $result[5];
|
913 |
-
if ($cmp_symbol=='=') $cmp_symbol = '==';
|
914 |
-
$cmp_value = $result[6];
|
915 |
-
|
916 |
-
$product_properties_condition .= $product_properties_condition=='' ? '' : ' '.$and_or.' ';
|
917 |
-
switch ($any_all_sum) {
|
918 |
-
case 'sum':
|
919 |
-
$product_properties_condition .= "{sum product.".$property_type.".".$property_name."}".$cmp_symbol.$cmp_value;
|
920 |
-
break;
|
921 |
-
case 'all':
|
922 |
-
$product_properties_condition .= "{count products where product.".$property_type.".".$property_name.$cmp_symbol.$cmp_value."}=={products_quantity}";
|
923 |
-
break;
|
924 |
-
case 'any':
|
925 |
-
$product_properties_condition .= "{count products where product.".$property_type.".".$property_name.$cmp_symbol.$cmp_value."}>0";
|
926 |
-
break;
|
927 |
-
}
|
928 |
-
}
|
929 |
-
if ($product_properties_condition!='') $conditions[] = $product_properties_condition;
|
930 |
-
}
|
931 |
-
else $this->addMessage('error',$row,null,'Unrecognized value of deprecated property %s %s','<span class="osh-key">product_properties</span>','<span class="osh-formula">'.$row['product_properties']['value'].'</span>');
|
932 |
-
unset($row['product_properties']);
|
933 |
-
}
|
934 |
-
if (count($conditions)>0) $row['conditions'] = array('value' => count($conditions)==1 ? $conditions[0] : '('.implode(') && (',$conditions).')');
|
935 |
-
|
936 |
-
$fees = array();
|
937 |
-
if (isset($row['fees_table'])) {
|
938 |
-
if (!in_array('fees_table',$deprecated_properties)) $deprecated_properties[] = 'fees_table';
|
939 |
-
$options_and_data = $this->_getOptionsAndData($row['fees_table']['value']);
|
940 |
-
$options = $options_and_data['options'];
|
941 |
-
$fees_table_string = $options_and_data['data'];
|
942 |
-
|
943 |
-
$var = null;
|
944 |
-
if ($options=='') $var = (isset($row['reference_value']) ? $row['reference_value']['value'] : 'weight');
|
945 |
-
else if (in_array($options,array('incl.tax','ttc'))) $var = 'price_including_tax';
|
946 |
-
else if (in_array($options,array('excl.tax','ht'))) $var = 'price_excluding_tax';
|
947 |
-
|
948 |
-
if (isset($var)) {
|
949 |
-
if ($var=='price') $var = 'price_excluding_tax';
|
950 |
-
if ($var=='products_quantity') $var = 'quantity';
|
951 |
-
if (preg_match('/^[[:space:]]*\*[[:space:]]*:[[:space:]]*('.$float_value_regex.')[[:space:]]*$/s',$fees_table_string,$result)) $fees[] = $result[1];
|
952 |
-
else $fees[] = "{table {cart.".$var."} in ".str_replace(' ','',$fees_table_string)."}".($var=='quantity' ? '*{cart.quantity}' : '');
|
953 |
-
}
|
954 |
-
else $this->addMessage('error',$row,null,'Unrecognized value of deprecated property %s %s','<span class="osh-key">fees_table</span>','<span class="osh-formula">'.$row['fees_table']['value'].'</span>');
|
955 |
-
unset($row['fees_table']);
|
956 |
-
}
|
957 |
-
if (isset($row['fees_formula'])) {
|
958 |
-
if (!in_array('fees_formula',$deprecated_properties)) $deprecated_properties[] = 'fees_formula';
|
959 |
-
$fees[] = str_replace(' ','',$row['fees_formula']['value']);
|
960 |
-
unset($row['fees_formula']);
|
961 |
-
}
|
962 |
-
if (isset($row['fixed_fees'])) {
|
963 |
-
if (!in_array('fixed_fees',$deprecated_properties)) $deprecated_properties[] = 'fixed_fees';
|
964 |
-
if ($row['fixed_fees']['value']!=0 || count($fees)==0) $fees[] = str_replace(' ','',$row['fixed_fees']['value']);
|
965 |
-
unset($row['fixed_fees']);
|
966 |
-
}
|
967 |
-
if (!isset($row['fees']) && count($fees)>0) $row['fees'] = array('value' => implode('+',$fees));
|
968 |
-
|
969 |
-
$fs_fees = array();
|
970 |
-
if (isset($row['free_shipping__fees_table'])) {
|
971 |
-
if (!in_array('free_shipping__fees_table',$deprecated_properties)) $deprecated_properties[] = 'free_shipping__fees_table';
|
972 |
-
$options_and_data = $this->_getOptionsAndData($row['free_shipping__fees_table']['value']);
|
973 |
-
$options = $options_and_data['options'];
|
974 |
-
$fees_table_string = $options_and_data['data'];
|
975 |
-
|
976 |
-
$var = null;
|
977 |
-
if ($options=='') $var = isset($row['reference_value']) ? $row['reference_value']['value'] : 'weight';
|
978 |
-
else if (in_array($options,array('incl.tax','ttc'))) $var = 'price_including_tax';
|
979 |
-
else if (in_array($options,array('excl.tax','ht'))) $var = 'price_excluding_tax';
|
980 |
-
if ($var=='price') $var = 'price_excluding_tax';
|
981 |
-
|
982 |
-
if (isset($var)) {
|
983 |
-
if ($var=='price') $var = 'price_excluding_tax';
|
984 |
-
if ($var=='products_quantity') $var = 'quantity';
|
985 |
-
if (preg_match('/^[[:space:]]*\*[[:space:]]*:[[:space:]]*('.$float_value_regex.')[[:space:]]*$/s',$fees_table_string,$result)) $fs_fees[] = $result[1];
|
986 |
-
else $fs_fees[] = "{table {cart.".$var."} in ".str_replace(' ','',$fees_table_string)."}".($var=='quantity' ? '*{cart.quantity}' : '');
|
987 |
-
}
|
988 |
-
else $this->addMessage('error',$row,null,'Unrecognized value of deprecated property %s %s','<span class="osh-key">free_shipping__fees_table</span>','<span class="osh-formula">'.$row['free_shipping__fees_table']['value'].'</span>');
|
989 |
-
unset($row['free_shipping__fees_table']);
|
990 |
-
}
|
991 |
-
if (isset($row['free_shipping__fees_formula'])) {
|
992 |
-
if (!in_array('free_shipping__fees_formula',$deprecated_properties)) $deprecated_properties[] = 'free_shipping__fees_formula';
|
993 |
-
$fs_fees[] = str_replace(' ','',$row['free_shipping__fees_formula']['value']);
|
994 |
-
unset($row['free_shipping__fees_formula']);
|
995 |
-
}
|
996 |
-
if (isset($row['free_shipping__fixed_fees'])) {
|
997 |
-
if (!in_array('free_shipping__fixed_fees',$deprecated_properties)) $deprecated_properties[] = 'free_shipping__fixed_fees';
|
998 |
-
if ($row['free_shipping__fixed_fees']['value']!=0 || count($fees)==0) $fs_fees[] = str_replace(' ','',$row['free_shipping__fixed_fees']['value']);
|
999 |
-
unset($row['free_shipping__fixed_fees']);
|
1000 |
-
}
|
1001 |
-
|
1002 |
-
if (isset($row['reference_value'])) {
|
1003 |
-
if (!in_array('reference_value',$deprecated_properties)) $deprecated_properties[] = 'reference_value';
|
1004 |
-
unset($row['reference_value']);
|
1005 |
-
}
|
1006 |
-
|
1007 |
-
if (count($fs_fees)>0) {
|
1008 |
-
$row2 = $row;
|
1009 |
-
if (isset($row['code'])) $row2['code']['value'] = $row['code']['value'].'__free_shipping';
|
1010 |
-
$row2['fees']['value'] = implode('+',$fs_fees);
|
1011 |
-
$row2['conditions']['value'] = isset($row2['conditions']) ? '('.$row2['conditions']+') and {free_shipping}' : '{free_shipping}';
|
1012 |
-
$row['conditions']['value'] = isset($row['conditions']) ? '('.$row['conditions']+') and !{free_shipping}' : '!{free_shipping}';
|
1013 |
-
if (isset($row['free_shipping__label'])) {
|
1014 |
-
if (!in_array('free_shipping__label',$deprecated_properties)) $deprecated_properties[] = 'free_shipping__label';
|
1015 |
-
$row2['label']['value'] = $row['free_shipping__label']['value'];
|
1016 |
-
unset($row['free_shipping__label']);
|
1017 |
-
unset($row2['free_shipping__label']);
|
1018 |
-
}
|
1019 |
-
$this->_addRow($row2);
|
1020 |
-
}
|
1021 |
-
if (count($unknown_properties)>0) $this->addMessage('error',$row,null,'Usage of unknown properties %s',': <span class="osh-key">'.implode('</span>, <span class="osh-key">',$unknown_properties).'</span>');
|
1022 |
-
if (count($deprecated_properties)>0) $this->addMessage('warning',$row,null,'Usage of deprecated properties %s',': <span class="osh-key">'.implode('</span>, <span class="osh-key">',$deprecated_properties).'</span>');
|
1023 |
-
if (count($obsolete_disabling_method)>0) $this->addMessage('warning',$row,null,'Usage of obsolete method to disabling a shipping method (`#` before `{`)%s','<div class="code">'.implode('<br />',$obsolete_disabling_method).'</div>');
|
1024 |
-
if (count($missing_semicolon)>0) $this->addMessage('warning',$row,null,'A semicolon is missing at the end of following lines %s','<div class="code">'.implode('<br />',$missing_semicolon).'</div>');
|
1025 |
-
$this->_addRow($row);
|
1026 |
-
}
|
1027 |
-
if (trim($config_string)!='') {
|
1028 |
-
$this->_addIgnoredLines(trim($config_string));
|
1029 |
-
$this->addMessage('info',$row=null,null,'Ignored lines %s','<div class="code">'.trim($config_string).'</div>');
|
1030 |
-
}
|
1031 |
-
}
|
1032 |
-
|
1033 |
-
public function addMessage($type, &$row, $property) {
|
1034 |
-
$args = func_get_args();
|
1035 |
-
array_shift($args);
|
1036 |
-
array_shift($args);
|
1037 |
-
array_shift($args);
|
1038 |
-
$message = new OCS_Message($type,$args);
|
1039 |
-
if (isset($row)) {
|
1040 |
-
if (isset($property)) {
|
1041 |
-
$row[$property]['messages'][] = $message;
|
1042 |
-
} else {
|
1043 |
-
$row['*messages'][] = $message;
|
1044 |
-
}
|
1045 |
-
}
|
1046 |
-
$this->_messages[] = $message;
|
1047 |
-
self::debug(' => <span class="osh-'.$message->type.'">'.$message->toString().'</span>',1);
|
1048 |
-
}
|
1049 |
-
|
1050 |
-
protected function _addRow(&$row) {
|
1051 |
-
if (isset($row['code'])) {
|
1052 |
-
$key = $row['code']['value'];
|
1053 |
-
if (isset($this->_config[$key])) $this->addMessage('error',$row,'code','The property `code` must be unique, `%s` has been found twice',$key);
|
1054 |
-
while (isset($this->_config[$key])) $key .= rand(0,9);
|
1055 |
-
//$row['code'] = $key;
|
1056 |
-
} else {
|
1057 |
-
$i = 1;
|
1058 |
-
do {
|
1059 |
-
$key = 'code_auto'.sprintf('%03d',$i);
|
1060 |
-
$i++;
|
1061 |
-
} while (isset($this->_config[$key]));
|
1062 |
-
}
|
1063 |
-
$row['*code'] = $key;
|
1064 |
-
$this->_config[$key] = $row;
|
1065 |
-
}
|
1066 |
-
|
1067 |
-
protected function _addIgnoredLines($lines) {
|
1068 |
-
$this->_config[] = array('lines' => $lines);
|
1069 |
-
}
|
1070 |
-
|
1071 |
-
protected function _addressMatch($address_filter, $address) {
|
1072 |
-
$excluding = false;
|
1073 |
-
if (preg_match('# *\* *- *\((.*)\) *#s',$address_filter,$result)) {
|
1074 |
-
$address_filter = $result[1];
|
1075 |
-
$excluding = true;
|
1076 |
-
}
|
1077 |
-
|
1078 |
-
$tmp_address_filter_array = explode(',',trim($address_filter));
|
1079 |
-
|
1080 |
-
$concat = false;
|
1081 |
-
$concatened = '';
|
1082 |
-
$address_filter_array = array();
|
1083 |
-
$i = 0;
|
1084 |
-
|
1085 |
-
foreach ($tmp_address_filter_array as $address_filter) {
|
1086 |
-
if ($concat) $concatened .= ','.$address_filter;
|
1087 |
-
else {
|
1088 |
-
if ($i<count($tmp_address_filter_array)-1 && preg_match('#\(#',$address_filter)) {
|
1089 |
-
$concat = true;
|
1090 |
-
$concatened .= $address_filter;
|
1091 |
-
} else $address_filter_array[] = $address_filter;
|
1092 |
-
}
|
1093 |
-
if (preg_match('#\)#',$address_filter)) {
|
1094 |
-
$address_filter_array[] = $concatened;
|
1095 |
-
$concatened = '';
|
1096 |
-
$concat = false;
|
1097 |
-
}
|
1098 |
-
$i++;
|
1099 |
-
}
|
1100 |
-
|
1101 |
-
foreach ($address_filter_array as $address_filter) {
|
1102 |
-
if (preg_match('# *([A-Z]{2}) *(-)? *(?:\( *(-)? *(.*)\))? *#s',$address_filter,$result)) {
|
1103 |
-
$country_code = $result[1];
|
1104 |
-
if ($address['country_code']==$country_code) {
|
1105 |
-
self::debug(' country code <span class="osh-replacement">'.$address['country_code'].'</span> matches',5);
|
1106 |
-
if (!isset($result[4]) || $result[4]=='') return !$excluding;
|
1107 |
-
else {
|
1108 |
-
$region_codes = explode(',',$result[4]);
|
1109 |
-
$in_array = false;
|
1110 |
-
for ($i=count($region_codes); --$i>=0;) {
|
1111 |
-
$code = trim($region_codes[$i]);
|
1112 |
-
$region_codes[$i] = $code;
|
1113 |
-
if ($address['region_code']===$code) {
|
1114 |
-
self::debug(' region code <span class="osh-replacement">'.$address['region_code'].'</span> matches',5);
|
1115 |
-
$in_array = true;
|
1116 |
-
} else if ($address['postcode']===$code) {
|
1117 |
-
self::debug(' postcode <span class="osh-replacement">'.$address['postcode'].'</span> matches',5);
|
1118 |
-
$in_array = true;
|
1119 |
-
} else if (strpos($code,'*')!==false && preg_match('/^'.str_replace('*','(?:.*)',$code).'$/',$address['postcode'])) {
|
1120 |
-
self::debug(' postcode <span class="osh-replacement">'.$address['postcode'].'</span> matches <span class="osh-formula">'.$code.'</span>',5);
|
1121 |
-
$in_array = true;
|
1122 |
-
}
|
1123 |
-
if ($in_array) break;
|
1124 |
-
}
|
1125 |
-
if (!$in_array) {
|
1126 |
-
self::debug(' region code <span class="osh-replacement">'.$address['region_code'].'</span> and postcode <span class="osh-replacement">'.$address['postcode'].'</span> don\'t match',5);
|
1127 |
-
}
|
1128 |
-
// Vérification stricte
|
1129 |
-
/*$in_array = in_array($address['region_code'],$region_codes,true) || in_array($address['postcode'],$region_codes,true);*/
|
1130 |
-
$excluding_region = $result[2]=='-' || $result[3]=='-';
|
1131 |
-
if ($excluding_region && !$in_array || !$excluding_region && $in_array) return !$excluding;
|
1132 |
-
}
|
1133 |
-
}
|
1134 |
-
}
|
1135 |
-
}
|
1136 |
-
return $excluding;
|
1137 |
-
}
|
1138 |
-
|
1139 |
-
protected function _getProductProperty($product, $property_type, $property_name, $get_by_id=false) {
|
1140 |
-
switch ($property_type) {
|
1141 |
-
case 'attribute':
|
1142 |
-
case 'attributes': return $product->getAttribute($property_name,$get_by_id);
|
1143 |
-
case 'option':
|
1144 |
-
case 'options': return $product->getOption($property_name,$get_by_id);
|
1145 |
-
case 'stock': return $product->getStockData($property_name);
|
1146 |
-
}
|
1147 |
-
return null;
|
1148 |
-
}
|
1149 |
-
|
1150 |
-
protected function _processProductProperty($products, $regex_result) {
|
1151 |
-
// COUNT, SUM or COUNT DISTINCT
|
1152 |
-
$operation = strtolower($regex_result[1]);
|
1153 |
-
switch ($operation) {
|
1154 |
-
case 'sum':
|
1155 |
-
case 'count distinct':
|
1156 |
-
$property_type = $regex_result[2];
|
1157 |
-
$property_name = $regex_result[3];
|
1158 |
-
$conditions = isset($regex_result[4]) ? $regex_result[4] : null;
|
1159 |
-
break;
|
1160 |
-
case 'count':
|
1161 |
-
$conditions = isset($regex_result[2]) ? $regex_result[2] : null;
|
1162 |
-
break;
|
1163 |
-
}
|
1164 |
-
|
1165 |
-
self::debug(' :: start <span class="osh-replacement">'.$regex_result[0].'</span>',10);
|
1166 |
-
|
1167 |
-
$return_value = 0;
|
1168 |
-
|
1169 |
-
preg_match_all('/product\.(attribute(?:s)?|option(?:s)?|stock)\.([a-z0-9_]+)(?:\.(id))?/i',$conditions,$properties_regex_result,PREG_SET_ORDER);
|
1170 |
-
$properties = array();
|
1171 |
-
foreach ($properties_regex_result as $property_regex_result) {
|
1172 |
-
$key = $property_regex_result[0];
|
1173 |
-
if (!isset($properties[$key])) $properties[$key] = $property_regex_result;
|
1174 |
-
}
|
1175 |
-
|
1176 |
-
foreach ($products as $product) {
|
1177 |
-
if (isset($conditions) && $conditions!='') {
|
1178 |
-
$formula = $conditions;
|
1179 |
-
foreach ($properties as $property) {
|
1180 |
-
$value = $this->_getProductProperty(
|
1181 |
-
$product,
|
1182 |
-
$tmp_property_type = $property[1],
|
1183 |
-
$tmp_property_name = $property[2],
|
1184 |
-
$get_by_id = isset($property[3]) && $property[3]=='id'
|
1185 |
-
);
|
1186 |
-
//$formula = $this->replace($property[0],$value,$formula);
|
1187 |
-
$from = $property[0];
|
1188 |
-
$to = is_string($value) || empty($value) ? "'".$value."'" : $value;
|
1189 |
-
$formula = str_replace($from,$to,$formula);
|
1190 |
-
self::debug(' replace <span class="osh-replacement">'.$from.'</span> by <span class="osh-replacement">'.$to.'</span> => <span class="osh-formula">'.str_replace($from,'<span class="osh-replacement">'.$to.'</span>',$formula).'</span>',5);
|
1191 |
-
}
|
1192 |
-
$eval_result = $this->_evalFormula($formula);
|
1193 |
-
if (!isset($eval_result)) return 'null';
|
1194 |
-
}
|
1195 |
-
else $eval_result = true;
|
1196 |
-
|
1197 |
-
if ($eval_result==true) {
|
1198 |
-
switch ($operation) {
|
1199 |
-
case 'sum':
|
1200 |
-
$value = $this->_getProductProperty($product,$property_type,$property_name);
|
1201 |
-
//self::debug($product->getSku().'.'.$property_type.'.'.$property_name.' = "'.$value.'" x '.$product->getQuantity(),10);
|
1202 |
-
$return_value += $value*$product->getQuantity();
|
1203 |
-
break;
|
1204 |
-
case 'count distinct':
|
1205 |
-
if (!isset($distinct_values)) $distinct_values = array();
|
1206 |
-
$value = $this->_getProductProperty($product,$property_type,$property_name);
|
1207 |
-
if (!in_array($value,$distinct_values)) {
|
1208 |
-
$distinct_values[] = $value;
|
1209 |
-
$return_value++;
|
1210 |
-
}
|
1211 |
-
break;
|
1212 |
-
case 'count':
|
1213 |
-
$return_value += $product->getQuantity();
|
1214 |
-
break;
|
1215 |
-
}
|
1216 |
-
}
|
1217 |
-
}
|
1218 |
-
|
1219 |
-
self::debug(' :: end <span class="osh-replacement">'.$regex_result[0].'</span>',10);
|
1220 |
-
|
1221 |
-
return $return_value;
|
1222 |
-
}
|
1223 |
-
|
1224 |
-
}
|
1225 |
-
|
1226 |
-
interface OCS_Product {
|
1227 |
-
public function getOption($option);
|
1228 |
-
public function getAttribute($attribute);
|
1229 |
-
public function getName();
|
1230 |
-
public function getSku();
|
1231 |
-
public function getQuantity();
|
1232 |
-
public function getStockData($key);
|
1233 |
-
}
|
1234 |
-
|
1235 |
-
class OCS_Message {
|
1236 |
-
public $type;
|
1237 |
-
public $message;
|
1238 |
-
public $args;
|
1239 |
-
|
1240 |
-
public function OCS_Message($type, $args) {
|
1241 |
-
$this->type = $type;
|
1242 |
-
$this->message = array_shift($args);
|
1243 |
-
$this->args = $args;
|
1244 |
-
}
|
1245 |
-
|
1246 |
-
public function toString() {
|
1247 |
-
return vsprintf($this->message,$this->args);
|
1248 |
-
}
|
1249 |
-
}
|
1250 |
-
|
1251 |
-
class OCS_Result {
|
1252 |
-
public $success;
|
1253 |
-
public $result;
|
1254 |
-
|
1255 |
-
public function OCS_Result($success, $result=null) {
|
1256 |
-
$this->success = $success;
|
1257 |
-
$this->result = $result;
|
1258 |
-
}
|
1259 |
-
|
1260 |
-
public function __toString() {
|
1261 |
-
return is_bool($this->result) ? ($this->result ? 'true' : 'false') : (string)$this->result;
|
1262 |
-
}
|
1263 |
-
}
|
1264 |
-
|
1265 |
-
|
1266 |
-
?>
|
1 |
+
<?php
|
2 |
+
|
3 |
+
/**
|
4 |
+
* Magento Chronopost Chronorelais Module
|
5 |
+
*
|
6 |
+
* NOTICE OF LICENSE
|
7 |
+
*
|
8 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
9 |
+
* that is bundled with this package in the file LICENSE.txt.
|
10 |
+
* It is also available through the world-wide-web at this URL:
|
11 |
+
* http://opensource.org/licenses/osl-3.0.php
|
12 |
+
* If you did not receive a copy of the license and are unable to
|
13 |
+
* obtain it through the world-wide-web, please send an email
|
14 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
15 |
+
*
|
16 |
+
* @category Chronopost
|
17 |
+
* @package Chronopost_Chronorelais
|
18 |
+
* @copyright Copyright (c) 2008-10 Owebia (http://www.owebia.com/)
|
19 |
+
* @author Antoine Lemoine
|
20 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
21 |
+
*/
|
22 |
+
|
23 |
+
class ChronorelaisShippingHelper
|
24 |
+
{
|
25 |
+
public static $DEBUG_INDEX_COUNTER = 0;
|
26 |
+
public static $FLOAT_REGEX = '[-]?\d+(?:[.]\d+)?';
|
27 |
+
public static $POSITIVE_FLOAT_REGEX = '\d+(?:[.]\d+)?';
|
28 |
+
//public static $COUPLE_REGEX = '(?:[0-9.]+|\*)(?:\[|\])?\:[0-9.]+(?:\:[0-9.]+%?)*';
|
29 |
+
public static $COUPLE_REGEX = '(?:[0-9.]+|\*) *(?:\[|\])? *\: *[0-9.]+';
|
30 |
+
public static $UNCOMPRESSED_STRINGS = array(
|
31 |
+
' product.attribute.',
|
32 |
+
' product.option.',
|
33 |
+
' product.stock.',
|
34 |
+
'{product.attribute.',
|
35 |
+
'{product.option.',
|
36 |
+
'{product.stock.',
|
37 |
+
'{product.weight}',
|
38 |
+
'{product.quantity}',
|
39 |
+
'{cart.weight}',
|
40 |
+
'{cart.quantity}',
|
41 |
+
'{cart.price_including_tax}',
|
42 |
+
'{cart.price_excluding_tax}',
|
43 |
+
'{cart.',
|
44 |
+
'{customvar.',
|
45 |
+
'{selection.weight}',
|
46 |
+
'{selection.quantity}',
|
47 |
+
'{selection.',
|
48 |
+
'{destination.country.',
|
49 |
+
'{foreach ',
|
50 |
+
'{/foreach}',
|
51 |
+
);
|
52 |
+
public static $COMPRESSED_STRINGS = array(
|
53 |
+
' p.a.',
|
54 |
+
' p.o.',
|
55 |
+
' p.s.',
|
56 |
+
'{p.a.',
|
57 |
+
'{p.o.',
|
58 |
+
'{p.s.',
|
59 |
+
'{p.w}',
|
60 |
+
'{p.qty}',
|
61 |
+
'{c.w}',
|
62 |
+
'{c.qty}',
|
63 |
+
'{c.pit}',
|
64 |
+
'{c.pet}',
|
65 |
+
'{c.',
|
66 |
+
'{v.',
|
67 |
+
'{s.w}',
|
68 |
+
'{s.qty}',
|
69 |
+
'{s.',
|
70 |
+
'{dest.ctry.',
|
71 |
+
'{each ',
|
72 |
+
'{/each}',
|
73 |
+
);
|
74 |
+
|
75 |
+
protected $_input;
|
76 |
+
protected $_config;
|
77 |
+
protected $_messages;
|
78 |
+
protected $_formula_cache;
|
79 |
+
protected $_expression_cache;
|
80 |
+
public $debug = 0;
|
81 |
+
public $debug_output = '';
|
82 |
+
public $debug_header = null;
|
83 |
+
|
84 |
+
public function ChronorelaisShippingHelper($input) {
|
85 |
+
$this->_formula_cache = array();
|
86 |
+
$this->_messages = array();
|
87 |
+
$this->_input = $input;
|
88 |
+
$this->_config = array();
|
89 |
+
$this->_parseInput();
|
90 |
+
}
|
91 |
+
|
92 |
+
private function debug($text, $level=10) {
|
93 |
+
if ($this->debug>=$level) $this->debug_output .= "<p>".$text."</p>";
|
94 |
+
}
|
95 |
+
|
96 |
+
public function printDebug() {
|
97 |
+
if ($this->debug>0) {
|
98 |
+
$index = self::$DEBUG_INDEX_COUNTER++;
|
99 |
+
echo "<style rel=\"stylesheet\" type=\"text/css\">"
|
100 |
+
.".osh-formula{color:#f90;} .osh-key{color:#0099f7;}"
|
101 |
+
.".osh-error{color:#f00;} .osh-warning{color:#ff0;} .osh-info{color:#7bf700;}"
|
102 |
+
.".osh-debug{background:#000;color:#bbb;position:absolute;top:0;left:0;width:100%;z-index:100;-moz-opacity:0.9;opacity:0.9;text-align:left;white-space:pre-wrap;}"
|
103 |
+
.".osh-debug-content{padding:10px;}"
|
104 |
+
.".osh-replacement{color:#ff3000;}"
|
105 |
+
."</style>"
|
106 |
+
."<div id=\"osh-debug-".$index."\" class=\"osh-debug\"><pre class=\"osh-debug-content\"><span style=\"float:right;cursor:pointer;\" onclick=\"document.getElementById('osh-debug-".$index."').style.display = 'none';\">[<span style=\"padding:0 5px;color:#f00;\">X</span>]</span>"
|
107 |
+
."<p>".$this->debug_header."</p>".$this->debug_output."</pre></div>";
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
+
public function setDebugHeader($process) {
|
112 |
+
$header = 'DEBUG app/code/community/Chronopost/Chronorelais/Model/Carrier/ChronorelaisShippingHelper.php<br/>';
|
113 |
+
foreach ($process['data'] as $key => $data) {
|
114 |
+
$header .= ' <span class="osh-key">'.$key.'</span> = <span class="osh-formula">'.$this->_toString($data).'</span><br/>';
|
115 |
+
}
|
116 |
+
$this->debug_header = $header;
|
117 |
+
}
|
118 |
+
|
119 |
+
public function getConfig() {
|
120 |
+
return $this->_config;
|
121 |
+
}
|
122 |
+
|
123 |
+
public function getMessages() {
|
124 |
+
$messages = $this->_messages;
|
125 |
+
$this->_messages = array();
|
126 |
+
return $messages;
|
127 |
+
}
|
128 |
+
|
129 |
+
public function formatConfig($compress) {
|
130 |
+
$output = '';
|
131 |
+
foreach ($this->_config as $code => $row) {
|
132 |
+
if (!isset($row['lines'])) {
|
133 |
+
if (isset($row['*comment']['value'])) {
|
134 |
+
$output .= trim($row['*comment']['value'])."\n";
|
135 |
+
}
|
136 |
+
$output .= '{'.($compress ? '' : "\n");
|
137 |
+
foreach ($row as $key => $property) {
|
138 |
+
if (substr($key,0,1)!='*') {
|
139 |
+
$value = $property['value'];
|
140 |
+
if (isset($property['comment'])) $output .= ($compress ? '' : "\t").'/* '.$property['comment'].' */'.($compress ? '' : "\n");
|
141 |
+
$output .= ($compress ? '' : "\t").$key.':'.($compress ? '' : ' ');
|
142 |
+
if (is_bool($value)) $output .= $value ? 'true' : 'false';
|
143 |
+
else if (is_int($value)) $output .= $value;
|
144 |
+
else if ((string)((float)$value)==$value) $output .= $value;
|
145 |
+
else $output .= '"'.str_replace('"','\\"',$value).'"';
|
146 |
+
$output .= ','.($compress ? '' : "\n");
|
147 |
+
}
|
148 |
+
}
|
149 |
+
if ($compress) $output = preg_replace('/,$/','',$output);
|
150 |
+
$output .= "}\n".($compress ? '' : "\n");
|
151 |
+
} else {
|
152 |
+
$output .= $row['lines']."\n";
|
153 |
+
}
|
154 |
+
}
|
155 |
+
return $compress ? $this->compress($output) : $this->uncompress($output);
|
156 |
+
}
|
157 |
+
|
158 |
+
public function checkConfig() {
|
159 |
+
$process = array(
|
160 |
+
'result' => null,
|
161 |
+
'data' => array(
|
162 |
+
'cart.price_excluding_tax' => 0,
|
163 |
+
'cart.price_including_tax' => 0,
|
164 |
+
'destination.country.code' => '',
|
165 |
+
'destination.country.name' => '',
|
166 |
+
'destination.region.code' => '',
|
167 |
+
'destination.postcode' => '',
|
168 |
+
'origin.country.code' => '',
|
169 |
+
'origin.country.name' => '',
|
170 |
+
'origin.region.code' => '',
|
171 |
+
'origin.postcode' => '',
|
172 |
+
'free_shipping' => false,
|
173 |
+
'customer.group.id' => '',
|
174 |
+
'customer.group.code' => '',
|
175 |
+
'cart.weight' => 0,
|
176 |
+
'cart.weight.unit' => 'kg',
|
177 |
+
'cart.quantity' => 0,
|
178 |
+
),
|
179 |
+
'cart.items' => array(),
|
180 |
+
'products' => array(),
|
181 |
+
'config' => $this->_config,
|
182 |
+
);
|
183 |
+
foreach ($this->_config as $code => &$row) {
|
184 |
+
$this->processRow($process,$row,$check_all_conditions=true);
|
185 |
+
foreach ($row as $property_key => $property_value) {
|
186 |
+
if (substr($property_key,0,1)!='*') $this->getRowProperty($row,$property_key);
|
187 |
+
}
|
188 |
+
}
|
189 |
+
}
|
190 |
+
|
191 |
+
public function processRow($process, &$row, $is_checking=false) {
|
192 |
+
if (!isset($row['*code'])) return;
|
193 |
+
|
194 |
+
self::debug('process row <span class="osh-key">'.$row['*code'].'</span>',1);
|
195 |
+
if (!isset($row['label']['value'])) $row['label']['value'] = '***';
|
196 |
+
|
197 |
+
$enabled = $this->getRowProperty($row,'enabled');
|
198 |
+
if (isset($enabled)) {
|
199 |
+
if (!$is_checking && !$enabled) {
|
200 |
+
$this->addMessage('info',$row,'enabled','Configuration disabled');
|
201 |
+
return new OCS_Result(false);
|
202 |
+
}
|
203 |
+
}
|
204 |
+
|
205 |
+
$conditions = $this->getRowProperty($row,'conditions');
|
206 |
+
if (isset($conditions)) {
|
207 |
+
$result = $this->_processFormula($process,$row,'conditions',$conditions,$is_checking);
|
208 |
+
if (!$is_checking) {
|
209 |
+
if (!$result->success) return $result;
|
210 |
+
if (!$result->result) {
|
211 |
+
$this->addMessage('info',$row,'conditions',"The cart doesn't match conditions");
|
212 |
+
return new OCS_Result(false);
|
213 |
+
}
|
214 |
+
}
|
215 |
+
}
|
216 |
+
|
217 |
+
$destination = $this->getRowProperty($row,'destination');
|
218 |
+
if (isset($destination)) {
|
219 |
+
$destination_match = $this->_addressMatch($destination,array(
|
220 |
+
'country_code' => $process['data']['destination.country.code'],
|
221 |
+
'region_code' => $process['data']['destination.region.code'],
|
222 |
+
'postcode' => $process['data']['destination.postcode']
|
223 |
+
));
|
224 |
+
if (!$is_checking && !$destination_match) {
|
225 |
+
$this->addMessage('info',$row,'destination',"The shipping method doesn't cover the zone");
|
226 |
+
return new OCS_Result(false);
|
227 |
+
}
|
228 |
+
}
|
229 |
+
|
230 |
+
$origin = $this->getRowProperty($row,'origin');
|
231 |
+
if (isset($origin)) {
|
232 |
+
$origin_match = $this->_addressMatch($origin,array(
|
233 |
+
'country_code' => $process['data']['origin.country.code'],
|
234 |
+
'region_code' => $process['data']['origin.region.code'],
|
235 |
+
'postcode' => $process['data']['origin.postcode']
|
236 |
+
));
|
237 |
+
if (!$is_checking && !$origin_match) {
|
238 |
+
$this->addMessage('info',$row,'origin',"The shipping method doesn't match to shipping origin");
|
239 |
+
return new OCS_Result(false);
|
240 |
+
}
|
241 |
+
}
|
242 |
+
|
243 |
+
$customer_groups = $this->getRowProperty($row,'customer_groups');
|
244 |
+
if (isset($customer_groups)) {
|
245 |
+
$groups = explode(',',$customer_groups);
|
246 |
+
$group_match = false;
|
247 |
+
//self::debug('code:'.$process['data']['customer.group.code'].', id:'.$process['data']['customer.group.id']);
|
248 |
+
foreach ($groups as $group) {
|
249 |
+
$group = trim($group);
|
250 |
+
if ($group==$process['data']['customer.group.code'] || is_int($group) && $group==$process['data']['customer.group.id'] || $group=='*') {
|
251 |
+
$group_match = true;
|
252 |
+
break;
|
253 |
+
}
|
254 |
+
}
|
255 |
+
if (!$is_checking && !$group_match) {
|
256 |
+
$this->addMessage('info',$row,'customer_groups',"The shipping method doesn't match to customer group (%s)",$process['data']['customer.group.code']);
|
257 |
+
return new OCS_Result(false);
|
258 |
+
}
|
259 |
+
}
|
260 |
+
|
261 |
+
//Chronopost quickcost method for dynamic price if it is set enabled
|
262 |
+
$quickcost = Mage::getStoreConfig('carriers/'.$process['data']['carrier.code'].'/quickcost');
|
263 |
+
if($quickcost) {
|
264 |
+
if($quickCostValues = $this->getQuickCostValue($process['data'])) {
|
265 |
+
if($quickCostValues->errorCode==0) {
|
266 |
+
return new OCS_Result(true,(float)$quickCostValues->amountTTC);
|
267 |
+
} else {
|
268 |
+
$this->addMessage('error',$row,'chronopost',$quickCostValues->errorMessage);
|
269 |
+
return new OCS_Result(false);
|
270 |
+
}
|
271 |
+
} else {
|
272 |
+
return new OCS_Result(false);
|
273 |
+
}
|
274 |
+
}
|
275 |
+
|
276 |
+
$fees = $this->getRowProperty($row,'fees');
|
277 |
+
if (isset($fees)) {
|
278 |
+
$result = $this->_processFormula($process,$row,'fees',$fees,$is_checking);
|
279 |
+
if (!$result->success) return $result;
|
280 |
+
self::debug(' => <span class="osh-info">result = <span class="osh-formula">'.$this->_toString($result->result).'</span>',1);
|
281 |
+
return new OCS_Result(true,(float)$result->result);
|
282 |
+
}
|
283 |
+
|
284 |
+
return new OCS_Result(false);
|
285 |
+
}
|
286 |
+
|
287 |
+
public function getQuickCostValue($processData) {
|
288 |
+
$quickCost = array();
|
289 |
+
$_helper = Mage::helper('chronorelais');
|
290 |
+
$account_number = $_helper->getConfigurationAccountNumber();
|
291 |
+
$password = $_helper->getConfigurationAccountPass();
|
292 |
+
$productCode = $_helper->getChronoProductCode($processData['destination.country.code'], $processData['carrier.code']);
|
293 |
+
$origin_postcode = $_helper->getConfigurationShipperInfo('zipcode');
|
294 |
+
|
295 |
+
//to get arrival code
|
296 |
+
$arrCode = $processData['destination.postcode'];
|
297 |
+
if($processData['carrier.code']=='chronoexpress') {
|
298 |
+
$arrCode = $processData['destination.country.code'];
|
299 |
+
}
|
300 |
+
|
301 |
+
$quickCost = array(
|
302 |
+
'contratNumber' => $account_number,
|
303 |
+
'depCode' => $origin_postcode,
|
304 |
+
'arrCode' => $arrCode,
|
305 |
+
'weight' => $processData['cart.weight'],
|
306 |
+
'productCode' => $productCode,
|
307 |
+
'type' => 'M',
|
308 |
+
'password' => $password
|
309 |
+
);
|
310 |
+
|
311 |
+
try {
|
312 |
+
$quickcost_url = Mage::helper('chronorelais')->getConfigData('carriers/'.$processData['carrier.code'].'/quickcost_url');
|
313 |
+
if(!$quickcost_url) { $quickcost_url = "http://wsshipping.chronopost.fr/wsQuickcost/services/ServiceQuickCost?wsdl"; }
|
314 |
+
$client = new SoapClient($quickcost_url);
|
315 |
+
$webservbt = $client->__call("quickCost",$quickCost);
|
316 |
+
return $webservbt;
|
317 |
+
} catch(SoapFault $fault) {
|
318 |
+
$this->addMessage('info',$row,'chronopost',$fault->faultstring);
|
319 |
+
return false;
|
320 |
+
}
|
321 |
+
}
|
322 |
+
|
323 |
+
public function getRowProperty(&$row, $key, $original_row=null, $original_key=null) {
|
324 |
+
$property = null;
|
325 |
+
$output = null;
|
326 |
+
if (isset($original_row) && isset($original_key) && $original_row['*code']==$row['*code'] && $original_key==$key) {
|
327 |
+
$this->addMessage('error',$row,$key,'Infinite loop %s',"<span class=\"code\">{".$row['*code'].'.'.$key."}</span>");
|
328 |
+
return array('error' => 'Infinite loop');
|
329 |
+
}
|
330 |
+
if (isset($row[$key]['value'])) {
|
331 |
+
$property = $row[$key]['value'];
|
332 |
+
$output = $property;
|
333 |
+
self::debug(' get <span class="osh-key">'.$row['*code'].'</span>.<span class="osh-key">'.$key.'</span> = <span class="osh-formula">'.$this->_toString($property).'</span>',5);
|
334 |
+
preg_match_all('/{([a-z0-9_]+)\.([a-z0-9_]+)}/i',$output,$result_set,PREG_SET_ORDER);
|
335 |
+
foreach ($result_set as $result) {
|
336 |
+
list($original,$ref_code,$ref_key) = $result;
|
337 |
+
if (!in_array($ref_code,array('module','date','store','cart','product','selection','customvar'))) {
|
338 |
+
if ($ref_code==$row['code']['value'] && $ref_key==$key) {
|
339 |
+
$this->addMessage('error',$row,$key,'Infinite loop %s',"<span class=\"code\">".$original."</span>");
|
340 |
+
return null;
|
341 |
+
}
|
342 |
+
if (isset($this->_config[$ref_code][$ref_key]['value'])) {
|
343 |
+
$replacement = $this->getRowProperty($this->_config[$ref_code],$ref_key,
|
344 |
+
isset($original_row) ? $original_row : $row,isset($original_key) ? $original_key : $key);
|
345 |
+
if (is_array($replacement) && isset($replacement['error'])) {
|
346 |
+
return isset($original_row) ? $replacement : 'false';
|
347 |
+
}
|
348 |
+
} else {
|
349 |
+
$this->addMessage('error',$row,$key,'Non-existent property %s',"<span class=\"code\">".$original."</span>");
|
350 |
+
$replacement = 'null';
|
351 |
+
}
|
352 |
+
$output = $this->replace($original,$replacement,$output);
|
353 |
+
}
|
354 |
+
}
|
355 |
+
} else {
|
356 |
+
self::debug(' get <span class="osh-key">'.$row['*code'].'</span>.<span class="osh-key">'.$key.'</span> = <span class="osh-formula">null</span>',5);
|
357 |
+
}
|
358 |
+
return $output;
|
359 |
+
}
|
360 |
+
|
361 |
+
protected function _toString($value) {
|
362 |
+
if (!isset($value)) return 'null';
|
363 |
+
else if (is_bool($value)) return $value ? 'true' : 'false';
|
364 |
+
else return $value;
|
365 |
+
}
|
366 |
+
|
367 |
+
protected function replace($from, $to, $input) {
|
368 |
+
if ($from===$to) return $input;
|
369 |
+
if (strpos($input,$from)===false) return $input;
|
370 |
+
$to = $this->_toString($to);
|
371 |
+
self::debug(' replace <span class="osh-replacement">'.$this->_toString($from).'</span> by <span class="osh-replacement">'.$to.'</span> => <span class="osh-formula">'.str_replace($from,'<span class="osh-replacement">'.$to.'</span>',$input).'</span>',5);
|
372 |
+
return str_replace($from,$to,$input);
|
373 |
+
}
|
374 |
+
|
375 |
+
protected function _min() {
|
376 |
+
$args = func_get_args();
|
377 |
+
$min = null;
|
378 |
+
foreach ($args as $arg) {
|
379 |
+
if (isset($arg) && (!isset($min) || $min>$arg)) $min = $arg;
|
380 |
+
}
|
381 |
+
return $min;
|
382 |
+
}
|
383 |
+
|
384 |
+
protected function _max() {
|
385 |
+
$args = func_get_args();
|
386 |
+
$max = null;
|
387 |
+
foreach ($args as $arg) {
|
388 |
+
if (isset($arg) && (!isset($max) || $max<$arg)) $max = $arg;
|
389 |
+
}
|
390 |
+
return $max;
|
391 |
+
}
|
392 |
+
|
393 |
+
protected function _processFormula($process, &$row, $property_key, $formula_string, $is_checking, $use_cache=true)
|
394 |
+
{
|
395 |
+
$result = $this->_prepareFormula($process,$row,$property_key,$formula_string,$is_checking,$use_cache);
|
396 |
+
if (!$result->success) return $result;
|
397 |
+
|
398 |
+
$eval_result = $this->_evalFormula($result->result);
|
399 |
+
if (!isset($eval_result)) {
|
400 |
+
$this->addMessage('error',$row,$property_key,'Invalid formula');
|
401 |
+
$result = new OCS_Result(false);
|
402 |
+
if ($use_cache) $this->setCache($formula_string,$result);
|
403 |
+
return $result;
|
404 |
+
}
|
405 |
+
self::debug(' formula evaluation = <span class="osh-formula">'.$this->_toString($eval_result).'</span>',10);
|
406 |
+
$result = new OCS_Result(true,$eval_result);
|
407 |
+
if ($use_cache) $this->setCache($formula_string,$result);
|
408 |
+
return $result;
|
409 |
+
}
|
410 |
+
|
411 |
+
public function evalInput($process, $row, $property_key, $input) {
|
412 |
+
$result = $this->_prepareFormula($process,$row,$property_key,$input,$is_checking=false,$use_cache=true);
|
413 |
+
return $result->success ? $result->result : $input;
|
414 |
+
}
|
415 |
+
|
416 |
+
protected function setCache($expression, $value) {
|
417 |
+
if ($value instanceof OCS_Result) {
|
418 |
+
$this->_formula_cache[$expression] = $value;
|
419 |
+
self::debug(' cache <span class="osh-replacement">'.$expression.'</span> = <span class="osh-formula">'.$this->_toString($this->_formula_cache[$expression]).'</span>',10);
|
420 |
+
} else {
|
421 |
+
$value = $this->_toString($value);
|
422 |
+
$this->_expression_cache[$expression] = $value;
|
423 |
+
self::debug(' cache <span class="osh-replacement">'.$expression.'</span> = <span class="osh-formula">'.$value.'</span>',10);
|
424 |
+
}
|
425 |
+
}
|
426 |
+
|
427 |
+
protected function _prepareFormula($process, $row, $property_key, $formula_string, $is_checking, $use_cache=true)
|
428 |
+
{
|
429 |
+
if ($use_cache && isset($this->_formula_cache[$formula_string])) {
|
430 |
+
$result = $this->_formula_cache[$formula_string];
|
431 |
+
self::debug(' get cached formula <span class="osh-replacement">'.$formula_string.'</span> = <span class="osh-formula">'.$this->_toString($result->result).'</span>',10);
|
432 |
+
return $result;
|
433 |
+
}
|
434 |
+
|
435 |
+
$formula = $formula_string;
|
436 |
+
//self::debug(' formula = <span class="osh-formula">'.$formula.'</span>',10);
|
437 |
+
|
438 |
+
while (preg_match("#{foreach product\.((?:attribute|option)\.(?:[a-z0-9_]+))}(.*){/foreach}#i",$formula,$result)) {
|
439 |
+
$original = $result[0];
|
440 |
+
if ($use_cache && isset($this->_expression_cache[$original])) {
|
441 |
+
$replacement = $this->_expression_cache[$original];
|
442 |
+
self::debug(' get cached expression <span class="osh-replacement">'.$original.'</span> = <span class="osh-formula">'.$replacement.'</span>',10);
|
443 |
+
}
|
444 |
+
else {
|
445 |
+
$replacement = 0;
|
446 |
+
list($filter_property_type,$filter_property_name) = explode('.',$result[1]);
|
447 |
+
$selections = array();
|
448 |
+
self::debug(' :: foreach <span class="osh-key">'.$filter_property_type.'</span>.<span class="osh-key">'.$filter_property_name.'</span>',10);
|
449 |
+
foreach ($process['products'] as $product) {
|
450 |
+
$tmp_value = $this->_getProductProperty($product,$filter_property_type,$filter_property_name,$get_by_id=false);
|
451 |
+
self::debug(' products[<span class="osh-formula">'.$product->getName().'</span>].<span class="osh-key">'.$filter_property_type.'</span>.<span class="osh-key">'.$filter_property_name.'</span> = <span class="osh-formula">'.$this->_toString($tmp_value).'</span>',10);
|
452 |
+
$key = 'val_'.$tmp_value;
|
453 |
+
$sel = isset($selections[$key]) ? $selections[$key] : null;
|
454 |
+
$selections[$key]['products'][] = $product;
|
455 |
+
$selections[$key]['weight'] = (isset($sel['weight']) ? $sel['weight'] : 0)+$product->getAttribute('weight')*$product->getQuantity();
|
456 |
+
$selections[$key]['quantity'] = (isset($sel['quantity']) ? $sel['quantity'] : 0)+$product->getQuantity();
|
457 |
+
}
|
458 |
+
self::debug(' :: start foreach',10);
|
459 |
+
foreach ($selections as $selection) {
|
460 |
+
$process2 = $process;
|
461 |
+
$process2['products'] = $selection['products'];
|
462 |
+
$process2['data']['selection.quantity'] = $selection['quantity'];
|
463 |
+
$process2['data']['selection.weight'] = $selection['weight'];
|
464 |
+
$process_result = $this->_processFormula($process2,$row,$property_key,$result[2],$is_checking,$tmp_use_cache=false);
|
465 |
+
$replacement += $process_result->result;
|
466 |
+
}
|
467 |
+
self::debug(' :: end foreach <span class="osh-key">'.$filter_property_type.'</span>.<span class="osh-key">'.$filter_property_name.'</span>',10);
|
468 |
+
if ($use_cache) $this->setCache($original,$replacement);
|
469 |
+
}
|
470 |
+
$formula = $this->replace($original,$replacement,$formula);
|
471 |
+
}
|
472 |
+
|
473 |
+
$formula = str_replace(array("\n","\t"),array('',''),$formula);
|
474 |
+
|
475 |
+
while (preg_match("#{customvar\.([a-z0-9_]+)}#i",$formula,$result)) {
|
476 |
+
$original = $result[0];
|
477 |
+
$replacement = Mage::getModel('core/variable')->loadByCode($result[1])->getValue('plain');
|
478 |
+
$formula = $this->replace($original,$replacement,$formula);
|
479 |
+
}
|
480 |
+
|
481 |
+
$first_product = isset($process['products'][0]) ? $process['products'][0] : null;
|
482 |
+
if (!isset($process['data']['selection.weight'])) $process['data']['selection.weight'] = $process['data']['cart.weight'];
|
483 |
+
if (!isset($process['data']['selection.quantity'])) $process['data']['selection.quantity'] = $process['data']['cart.quantity'];
|
484 |
+
$process['data']['product.weight'] = isset($first_product) ? $first_product->getAttribute('weight') : 0;
|
485 |
+
$process['data']['product.quantity'] = isset($first_product) ? $first_product->getQuantity() : 0;
|
486 |
+
|
487 |
+
foreach ($process['data'] as $original => $replacement) {
|
488 |
+
$formula = $this->replace('{'.$original.'}',$replacement,$formula);
|
489 |
+
}
|
490 |
+
|
491 |
+
if (isset($first_product)) {
|
492 |
+
while (preg_match("#{product\.(attribute|option|stock)\.([a-z0-9_]+)}#i",$formula,$result)) {
|
493 |
+
$original = $result[0];
|
494 |
+
switch ($result[1]) {
|
495 |
+
case 'attribute': $replacement = $first_product->getAttribute($result[2]); break;
|
496 |
+
case 'option': $replacement = $first_product->getOption($result[2]); break;
|
497 |
+
case 'stock': $replacement = $first_product->getStockData($result[2]); break;
|
498 |
+
}
|
499 |
+
$formula = $this->replace($original,$replacement,$formula);
|
500 |
+
}
|
501 |
+
}
|
502 |
+
|
503 |
+
//while (preg_match("/{(count|all|any) (attribute|option) '([^'\)]+)' ?(==|<=|>=|<|>|!=) ?(".self::$FLOAT_REGEX."|true|false|'[^'\)]*')}/",$formula,$result)
|
504 |
+
// || preg_match("/{(sum|count distinct) (attribute|option) '([^'\)]+)'}/",$formula,$result))
|
505 |
+
while (preg_match("/{(count) products(?: where ([^}]+))?}/i",$formula,$result)
|
506 |
+
|| preg_match("/{(sum|count distinct) product\.(attribute|option)\.([a-z0-9_]+)(?: where ([^}]+))?}/i",$formula,$result)) {
|
507 |
+
$original = $result[0];
|
508 |
+
if ($use_cache && isset($this->_expression_cache[$original])) {
|
509 |
+
$replacement = $this->_expression_cache[$original];
|
510 |
+
self::debug(' get cached expression <span class="osh-replacement">'.$original.'</span> = <span class="osh-formula">'.$replacement.'</span>',10);
|
511 |
+
}
|
512 |
+
else {
|
513 |
+
$replacement = $this->_processProductProperty($process['products'],$result);
|
514 |
+
if ($use_cache) $this->setCache($result[0],$replacement);
|
515 |
+
}
|
516 |
+
$formula = $this->replace($original,$replacement,$formula);
|
517 |
+
}
|
518 |
+
|
519 |
+
//while (preg_match("/{table '([^']+)' ([^}]+)}/",$formula,$result))
|
520 |
+
while (preg_match("/{table ([^}]+) in ([0-9\.:,\*\[\] ]+)}/i",$formula,$result)) {
|
521 |
+
$original = $result[0];
|
522 |
+
if ($use_cache && isset($this->_expression_cache[$original])) {
|
523 |
+
$replacement = $this->_expression_cache[$original];
|
524 |
+
self::debug(' get cached expression <span class="osh-replacement">'.$original.'</span> = <span class="osh-formula">'.$replacement.'</span>',10);
|
525 |
+
} else {
|
526 |
+
$reference_value = $this->_evalFormula($result[1]);
|
527 |
+
if (isset($reference_value)) {
|
528 |
+
$fees_table_string = $result[2];
|
529 |
+
|
530 |
+
if (!preg_match('#^'.self::$COUPLE_REGEX.'(?:, *'.self::$COUPLE_REGEX.')*$#',$fees_table_string)) {
|
531 |
+
$this->addMessage('error',$row,$property_key,'Error in table %s','<span class="osh-formula">'.htmlentities($result[0]).'</span>');
|
532 |
+
$result = new OCS_Result(false);
|
533 |
+
if ($use_cache) $this->setCache($formula_string,$result);
|
534 |
+
return $result;
|
535 |
+
}
|
536 |
+
$fees_table = explode(',',$fees_table_string);
|
537 |
+
|
538 |
+
$replacement = null;
|
539 |
+
foreach ($fees_table as $item) {
|
540 |
+
$fee_data = explode(':',$item);
|
541 |
+
|
542 |
+
$fee = trim($fee_data[1]);
|
543 |
+
$max_value = trim($fee_data[0]);
|
544 |
+
|
545 |
+
$last_char = $max_value{strlen($max_value)-1};
|
546 |
+
if ($last_char=='[') $including_max_value = false;
|
547 |
+
else if ($last_char==']') $including_max_value = true;
|
548 |
+
else $including_max_value = true;
|
549 |
+
|
550 |
+
$max_value = str_replace(array('[',']'),'',$max_value);
|
551 |
+
|
552 |
+
if ($max_value=='*' || $including_max_value && $reference_value<=$max_value || !$including_max_value && $reference_value<$max_value) {
|
553 |
+
$replacement = $fee;//$this->_calculateFee($process,$fee,$var);
|
554 |
+
break;
|
555 |
+
}
|
556 |
+
}
|
557 |
+
}
|
558 |
+
$replacement = $this->_toString($replacement);
|
559 |
+
if ($use_cache) $this->setCache($original,$replacement);
|
560 |
+
}
|
561 |
+
$formula = $this->replace($original,$replacement,$formula);
|
562 |
+
}
|
563 |
+
$result = new OCS_Result(true,$formula);
|
564 |
+
return $result;
|
565 |
+
}
|
566 |
+
|
567 |
+
protected function _evalFormula($formula) {
|
568 |
+
if (is_bool($formula)) return $formula;
|
569 |
+
if (!preg_match('/^(?:floor|ceil|round|max|min|rand|pow|pi|sqrt|log|exp|abs|int|float|true|false|null|and|or|in|substr|strtolower'
|
570 |
+
.'|in_array\(\'(?:[^\']*)\', *array\( *(?:\'(?:[^\']+)\') *(?: *, *\'(?:[^\']+)\')* *\) *\)'
|
571 |
+
.'|\'[^\']*\'|[0-9,\'\.\-\(\)\*\/\?\:\+\<\>\=\&\|%! ])*$/',$formula)) {
|
572 |
+
$errors = array(
|
573 |
+
PREG_NO_ERROR => 'PREG_NO_ERROR',
|
574 |
+
PREG_INTERNAL_ERROR => 'PREG_INTERNAL_ERROR',
|
575 |
+
PREG_BACKTRACK_LIMIT_ERROR => 'PREG_BACKTRACK_LIMIT_ERROR',
|
576 |
+
PREG_RECURSION_LIMIT_ERROR => 'PREG_RECURSION_LIMIT_ERROR',
|
577 |
+
PREG_BAD_UTF8_ERROR => 'PREG_BAD_UTF8_ERROR',
|
578 |
+
PREG_BAD_UTF8_OFFSET_ERROR => 'PREG_BAD_UTF8_OFFSET_ERROR',
|
579 |
+
);
|
580 |
+
$error = preg_last_error();
|
581 |
+
if (isset($errors[$error])) $error = $errors[$error];
|
582 |
+
self::debug(' doesn\'t match ('.$error.')',10);
|
583 |
+
return null;
|
584 |
+
}
|
585 |
+
$formula = str_replace(
|
586 |
+
array('min','max'),
|
587 |
+
array('$this->_min','$this->_max'),
|
588 |
+
$formula
|
589 |
+
);
|
590 |
+
$eval_result = null;
|
591 |
+
@eval('$eval_result = ('.$formula.');');
|
592 |
+
return $eval_result;
|
593 |
+
}
|
594 |
+
|
595 |
+
protected function _getOptionsAndData($string) {
|
596 |
+
if (preg_match('/^(\\s*\(\\s*([^\] ]*)\\s*\)\\s*)/',$string,$result)) {
|
597 |
+
$options = $result[2];
|
598 |
+
$data = str_replace($result[1],'',$string);
|
599 |
+
} else {
|
600 |
+
$options = '';
|
601 |
+
$data = $string;
|
602 |
+
}
|
603 |
+
return array(
|
604 |
+
'options' => $options,
|
605 |
+
'data' => $data,
|
606 |
+
);
|
607 |
+
}
|
608 |
+
|
609 |
+
public function compress($input) {
|
610 |
+
if (preg_match_all("/{table (.*) in (".self::$COUPLE_REGEX."(?:, *".self::$COUPLE_REGEX.")*)}/imsU",$input,$result,PREG_SET_ORDER)) {
|
611 |
+
foreach ($result as $result_i) {
|
612 |
+
$fees_table = explode(',',$result_i[2]);
|
613 |
+
$value = null;
|
614 |
+
foreach ($fees_table as $index => $item) {
|
615 |
+
list($max_value,$fee) = explode(':',$item);
|
616 |
+
$last_char = $max_value{strlen($max_value)-1};
|
617 |
+
if (in_array($last_char,array('[',']'))) {
|
618 |
+
$including_char = $last_char;
|
619 |
+
$max_value = str_replace(array('[',']'),'',$max_value);
|
620 |
+
} else $including_char = '';
|
621 |
+
$fees_table[$index] = ((float)$max_value).$including_char.':'.((float)$fee);
|
622 |
+
}
|
623 |
+
$input = str_replace($result_i[2],implode(',',$fees_table),$input);
|
624 |
+
$input = str_replace($result_i[1],trim($result_i[1]),$input);
|
625 |
+
}
|
626 |
+
}
|
627 |
+
if (preg_match_all("#{foreach ([^}]*)}(.*){/foreach}#imsU",$input,$result,PREG_SET_ORDER)) {
|
628 |
+
foreach ($result as $result_i) {
|
629 |
+
$input = str_replace($result_i[1],trim($result_i[1]),$input);
|
630 |
+
$input = str_replace($result_i[2],trim($result_i[2]),$input);
|
631 |
+
}
|
632 |
+
}
|
633 |
+
return '$$'.str_replace(
|
634 |
+
self::$UNCOMPRESSED_STRINGS,
|
635 |
+
self::$COMPRESSED_STRINGS,
|
636 |
+
$input
|
637 |
+
);
|
638 |
+
}
|
639 |
+
|
640 |
+
public function uncompress($input) {
|
641 |
+
if (preg_match_all("/{table (.*) in (".self::$COUPLE_REGEX."(?:, *".self::$COUPLE_REGEX.")*)}/iU",$input,$result,PREG_SET_ORDER)) {
|
642 |
+
foreach ($result as $result_i) {
|
643 |
+
$fees_table = explode(',',$result_i[2]);
|
644 |
+
$value = null;
|
645 |
+
foreach ($fees_table as $index => $item) {
|
646 |
+
list($max_value,$fee) = explode(':',$item);
|
647 |
+
$last_char = $max_value{strlen($max_value)-1};
|
648 |
+
if (in_array($last_char,array('[',']'))) {
|
649 |
+
$including_char = $last_char;
|
650 |
+
$max_value = str_replace(array('[',']'),'',$max_value);
|
651 |
+
} else $including_char = '';
|
652 |
+
$max_value = (float)$max_value;
|
653 |
+
$fee = (float)$fee;
|
654 |
+
$new_max_value = number_format($max_value,2,'.','');
|
655 |
+
$new_fee = number_format($fee,2,'.','');
|
656 |
+
$fees_table[$index] = (((float)$new_max_value)==$max_value ? $new_max_value : $max_value).$including_char.':'
|
657 |
+
.(((float)$new_fee)==$fee ? $new_fee : $fee);
|
658 |
+
}
|
659 |
+
$input = str_replace($result_i[2],implode(', ',$fees_table),$input);
|
660 |
+
$input = str_replace($result_i[1],trim($result_i[1]),$input);
|
661 |
+
}
|
662 |
+
}
|
663 |
+
if (preg_match_all("#{foreach ([^}]*)}(.*){/foreach}#iU",$input,$result,PREG_SET_ORDER)) {
|
664 |
+
foreach ($result as $result_i) {
|
665 |
+
$input = str_replace($result_i[1],trim($result_i[1]),$input);
|
666 |
+
$input = str_replace($result_i[2],trim($result_i[2]),$input);
|
667 |
+
}
|
668 |
+
}
|
669 |
+
return str_replace(
|
670 |
+
self::$COMPRESSED_STRINGS,
|
671 |
+
self::$UNCOMPRESSED_STRINGS,
|
672 |
+
$input
|
673 |
+
);
|
674 |
+
}
|
675 |
+
|
676 |
+
public function parseProperty($input) {
|
677 |
+
$value = $input==='false' || $input==='true' ? $input=='true' : str_replace('\"','"',preg_replace('/^(?:"|\')(.*)(?:"|\')$/s','$1',$input));
|
678 |
+
return $value==='' ? null : $value;
|
679 |
+
}
|
680 |
+
|
681 |
+
public function cleanProperty(&$row, $key) {
|
682 |
+
$input = $row[$key]['value'];
|
683 |
+
if (is_string($input)) {
|
684 |
+
$input = str_replace(array("\n"),array(''),$input);
|
685 |
+
while (preg_match('/({TABLE |{SUM |{COUNT | DISTINCT | IN )/',$input,$resi)) {
|
686 |
+
$input = str_replace($resi[0],strtolower($resi[0]),$input);
|
687 |
+
}
|
688 |
+
|
689 |
+
while (preg_match('/{{customVar code=([a-zA-Z0-9_-]+)}}/',$input,$resi)) {
|
690 |
+
$input = str_replace($resi[0],'{customvar.'.$resi[1].'}',$input);
|
691 |
+
}
|
692 |
+
|
693 |
+
$regex = "{(weight|products_quantity|price_including_tax|price_excluding_tax|country)}";
|
694 |
+
if (preg_match('/'.$regex.'/',$input,$resi)) {
|
695 |
+
$this->addMessage('warning',$row,$key,'Usage of deprecated syntax %s','<span class="osh-formula">'.$resi[0].'</span>');
|
696 |
+
while (preg_match('/'.$regex.'/',$input,$resi)) {
|
697 |
+
switch ($resi[1]) {
|
698 |
+
case 'price_including_tax':
|
699 |
+
case 'price_excluding_tax':
|
700 |
+
case 'weight':
|
701 |
+
$input = str_replace($resi[0],"{cart.".$resi[1]."}",$input);
|
702 |
+
break;
|
703 |
+
case 'products_quantity': $input = str_replace($resi[0],"{cart.quantity}",$input); break;
|
704 |
+
case 'country': $input = str_replace($resi[0],"{destination.country.name}",$input); break;
|
705 |
+
}
|
706 |
+
}
|
707 |
+
}
|
708 |
+
|
709 |
+
$regex1 = "{copy '([a-zA-Z0-9_]+)'\.'([a-zA-Z0-9_]+)'}";
|
710 |
+
if (preg_match('/'.$regex1.'/',$input,$resi)) {
|
711 |
+
$this->addMessage('warning',$row,$key,'Usage of deprecated syntax %s','<span class="osh-formula">'.$resi[0].'</span>');
|
712 |
+
while (preg_match('/'.$regex1.'/',$input,$resi)) $input = str_replace($resi[0],'{'.$resi[1].'.'.$resi[2].'}',$input);
|
713 |
+
}
|
714 |
+
|
715 |
+
$regex1 = "{(count|all|any) (attribute|option) '([^'\)]+)' ?((?:==|<=|>=|<|>|!=) ?(?:".self::$FLOAT_REGEX."|true|false|'[^'\)]*'))}";
|
716 |
+
$regex2 = "{(sum) (attribute|option) '([^'\)]+)'}";
|
717 |
+
if (preg_match('/'.$regex1.'/',$input,$resi) || preg_match('/'.$regex2.'/',$input,$resi)) {
|
718 |
+
$this->addMessage('warning',$row,$key,'Usage of deprecated syntax %s','<span class="osh-formula">'.$resi[0].'</span>');
|
719 |
+
while (preg_match('/'.$regex1.'/',$input,$resi) || preg_match('/'.$regex2.'/',$input,$resi)) {
|
720 |
+
switch ($resi[1]) {
|
721 |
+
case 'count': $input = str_replace($resi[0],"{count products where product.".$resi[2]."s.".$resi[3].$resi[4]."}",$input); break;
|
722 |
+
case 'all': $input = str_replace($resi[0],"{count products where product.".$resi[2]."s.".$resi[3].$resi[4]."}=={products_quantity}",$input); break;
|
723 |
+
case 'any': $input = str_replace($resi[0],"{count products where product.".$resi[2]."s.".$resi[3].$resi[4]."}>0",$input); break;
|
724 |
+
case 'sum': $input = str_replace($resi[0],"{sum product.".$resi[2].".".$resi[3]."}",$input); break;
|
725 |
+
}
|
726 |
+
}
|
727 |
+
}
|
728 |
+
|
729 |
+
$regex = "((?:{| )product.(?:attribute|option))s.";
|
730 |
+
if (preg_match('/'.$regex.'/',$input,$resi)) {
|
731 |
+
$this->addMessage('warning',$row,$key,'Usage of deprecated syntax %s','<span class="osh-formula">'.$resi[0].'</span>');
|
732 |
+
while (preg_match('/'.$regex.'/',$input,$resi)) {
|
733 |
+
$input = str_replace($resi[0],$resi[1].'.',$input);
|
734 |
+
}
|
735 |
+
}
|
736 |
+
|
737 |
+
$regex = "{table '([^']+)' (".self::$COUPLE_REGEX."(?:, *".self::$COUPLE_REGEX.")*)}";
|
738 |
+
if (preg_match('/'.$regex.'/',$input,$resi)) {
|
739 |
+
$this->addMessage('warning',$row,$key,'Usage of deprecated syntax %s','<span class="osh-formula">'.$resi[0].'</span>');
|
740 |
+
while (preg_match('/'.$regex.'/',$input,$resi)) {
|
741 |
+
switch ($resi[1]) {
|
742 |
+
case 'products_quantity':
|
743 |
+
$input = str_replace($resi[0],"{table {cart.weight} in ".$resi[2]."}*{cart.quantity}",$input);
|
744 |
+
break;
|
745 |
+
default:
|
746 |
+
$input = str_replace($resi[0],"{table {cart.".$resi[1]."} in ".$resi[2]."}",$input);
|
747 |
+
break;
|
748 |
+
}
|
749 |
+
}
|
750 |
+
}
|
751 |
+
}
|
752 |
+
$row[$key]['value'] = $input;
|
753 |
+
}
|
754 |
+
|
755 |
+
protected function _parseInput() {
|
756 |
+
$config_string = str_replace(
|
757 |
+
array('>','<','“','”',utf8_encode(chr(147)),utf8_encode(chr(148)),'«','»',"\r\n","\t"),
|
758 |
+
array('>','<','"','"','"','"','"','"',"\n",' '),
|
759 |
+
$this->_input
|
760 |
+
);
|
761 |
+
|
762 |
+
if (substr($config_string,0,2)=='$$') $config_string = $this->uncompress(substr($config_string,2,strlen($config_string)));
|
763 |
+
|
764 |
+
//echo ini_get('pcre.backtrack_limit');
|
765 |
+
//exit;
|
766 |
+
|
767 |
+
$row_regex = ' *([a-z0-9_]+)\\s*:\\s*("(?:(?:[^"]|\\\\")*[^\\\\])?"|'.self::$FLOAT_REGEX.'|false|true)\\s*(,)? *(?:\\n)?';
|
768 |
+
if (!preg_match_all('/((?:#+[^{\\n]*\\s+)*)\\s*(#)?{\\s*('.$row_regex.')+\\s*}/i',$config_string,$result,PREG_SET_ORDER)) {
|
769 |
+
$errors = array(
|
770 |
+
PREG_NO_ERROR => 'PREG_NO_ERROR',
|
771 |
+
PREG_INTERNAL_ERROR => 'PREG_INTERNAL_ERROR',
|
772 |
+
PREG_BACKTRACK_LIMIT_ERROR => 'PREG_BACKTRACK_LIMIT_ERROR',
|
773 |
+
PREG_RECURSION_LIMIT_ERROR => 'PREG_RECURSION_LIMIT_ERROR',
|
774 |
+
PREG_BAD_UTF8_ERROR => 'PREG_BAD_UTF8_ERROR',
|
775 |
+
PREG_BAD_UTF8_OFFSET_ERROR => 'PREG_BAD_UTF8_OFFSET_ERROR',
|
776 |
+
);
|
777 |
+
$error = preg_last_error();
|
778 |
+
if (isset($errors[$error])) $error = $errors[$error];
|
779 |
+
self::debug(' preg_match_all error ('.$error.')',10);
|
780 |
+
}
|
781 |
+
|
782 |
+
$this->_config = array();
|
783 |
+
$available_keys = array(
|
784 |
+
'code','label','enabled','description','fees','conditions','destination','origin','customer_groups','tracking_url',
|
785 |
+
'fees_table','fees_formula','fixed_fees','reference_value',
|
786 |
+
'prices_range','weights_range','product_properties',
|
787 |
+
'free_shipping__fees_table','free_shipping__fees_formula','free_shipping__fixed_fees','free_shipping__label',
|
788 |
+
);
|
789 |
+
|
790 |
+
foreach ($result as $block) {
|
791 |
+
$deprecated_properties = array();
|
792 |
+
$unknown_properties = array();
|
793 |
+
$missing_semicolon = array();
|
794 |
+
$obsolete_disabling_method = array();
|
795 |
+
|
796 |
+
//$before = strstr($config_string,$block[0],true); // Seulement compatible avec PHP 5.3.0
|
797 |
+
list($before) = explode($block[0],$config_string,2);
|
798 |
+
if ($before!==false && trim($before)!='') {
|
799 |
+
$config_string = substr($config_string,strlen($before));
|
800 |
+
$this->_addIgnoredLines(trim($before));
|
801 |
+
$this->addMessage('info',$row=null,null,'Ignored lines %s','<div class="code">'.trim($before).'</div>');
|
802 |
+
}
|
803 |
+
|
804 |
+
$config_string = str_replace($block[0], '', $config_string);
|
805 |
+
preg_match_all('/'.$row_regex.'/i',$block[0],$result2,PREG_SET_ORDER);
|
806 |
+
$block_string = $block[0];
|
807 |
+
|
808 |
+
$row = array();
|
809 |
+
$i = 1;
|
810 |
+
foreach ($result2 as $data) {
|
811 |
+
$key = $data[1];
|
812 |
+
if (in_array($key,$available_keys) || substr($key,0,1)=='_') {
|
813 |
+
$property = $this->parseProperty($data[2]);
|
814 |
+
if (isset($property)) {
|
815 |
+
$row[$key] = array('value' => $property, 'original_value' => $property);
|
816 |
+
$this->cleanProperty($row,$key);
|
817 |
+
}
|
818 |
+
if ($i>2) {
|
819 |
+
$block_string = str_replace($data[0],$i==3 ? "...\n" : '',$block_string);
|
820 |
+
}
|
821 |
+
if ($i!=count($result2) && !isset($data[3]) || isset($data[3]) && $data[3]!=',') {
|
822 |
+
if (preg_match('/^("|\')(.{40})(.*)("|\')$/s',$data[2],$resultx))
|
823 |
+
$missing_semicolon[] = trim(str_replace($data[2],$resultx[1].$resultx[2].' ...'.$resultx[4],$data[0]));
|
824 |
+
else $missing_semicolon[] = trim($data[0]);
|
825 |
+
}
|
826 |
+
} else {
|
827 |
+
if (!in_array($key,$unknown_properties)) $unknown_properties[] = $key;
|
828 |
+
}
|
829 |
+
$i++;
|
830 |
+
}
|
831 |
+
if ($block[1]!='') $row['*comment']['value'] = $block[1];
|
832 |
+
if ($block[2]=='#' && !isset($row['enabled'])) {
|
833 |
+
$row['enabled'] = array('value' => false);
|
834 |
+
$obsolete_disabling_method[] = $block_string;
|
835 |
+
}
|
836 |
+
|
837 |
+
$formula_fields_to_check = array();
|
838 |
+
if (isset($row['conditions'])) $formula_fields_to_check[] = 'conditions';
|
839 |
+
if (isset($row['fees'])) $formula_fields_to_check[] = 'fees';
|
840 |
+
|
841 |
+
if (count($formula_fields_to_check)>0) {
|
842 |
+
foreach ($formula_fields_to_check as $property) {
|
843 |
+
$property_value = $row[$property]['value'];
|
844 |
+
if (preg_match('/{ +/',$property_value)) {
|
845 |
+
$this->addMessage('warning',$row,$property,'There are unwanted spaces after char `%s`','{');
|
846 |
+
$property_value = preg_replace('/{ +/','{',$property_value);
|
847 |
+
}
|
848 |
+
if (preg_match('/ +}/',$property_value)) {
|
849 |
+
$this->addMessage('warning',$row,$property,'There are unwanted spaces before char `%s`','}');
|
850 |
+
$property_value = preg_replace('/ +}/','}',$property_value);
|
851 |
+
}
|
852 |
+
if (preg_match('/ +/',$property_value)) {
|
853 |
+
$this->addMessage('warning',$row,$property,'There are unwanted multiples spaces `%s`',preg_replace('/( +)/','<span class="osh-formula">*$1*</span>',$property_value));
|
854 |
+
$property_value = preg_replace('/ +/',' ',$property_value);
|
855 |
+
}
|
856 |
+
$row[$property]['value'] = trim($property_value);
|
857 |
+
}
|
858 |
+
}
|
859 |
+
|
860 |
+
$float_value_regex = '\\s*('.self::$POSITIVE_FLOAT_REGEX.'|\*)\\s*';
|
861 |
+
$conditions = array();
|
862 |
+
if (isset($row['prices_range'])) {
|
863 |
+
if (!in_array('prices_range',$deprecated_properties)) $deprecated_properties[] = 'prices_range';
|
864 |
+
|
865 |
+
$result = $this->_getOptionsAndData($row['prices_range']['value']);
|
866 |
+
$options = $result['options'];
|
867 |
+
$prices_range = $result['data'];
|
868 |
+
|
869 |
+
if (($options=='' || in_array($options,array('incl.tax','ttc')))
|
870 |
+
&& preg_match('/^\\s*(\[|\])?'.$float_value_regex.'=>'.$float_value_regex.'(\[|\])?\\s*$/',$prices_range,$result)) {
|
871 |
+
$min_price_included = $result[1]=='[';
|
872 |
+
$min_price = $result[2]=='*' ? -1 : (float)$result[2];
|
873 |
+
$max_price = $result[3]=='*' ? -1 : (float)$result[3];
|
874 |
+
$max_price_included = !isset($result[4]) || $result[4]==']' || $result[4]=='';
|
875 |
+
|
876 |
+
$tax_included = $options!='' && in_array($options,array('incl.tax','ttc')) || isset($row['reference_value']) && $row['reference_value']['value']=='price_including_tax';
|
877 |
+
$price = $tax_included ? '{cart.price_including_tax}' : '{cart.price_excluding_tax}';
|
878 |
+
|
879 |
+
if ($min_price!=-1) $conditions[] = $price.'>'.($min_price_included ? '=' : '').$min_price;
|
880 |
+
if ($max_price!=-1) $conditions[] = $price.'<'.($max_price_included ? '=' : '').$max_price;
|
881 |
+
}
|
882 |
+
else $this->addMessage('error',$row,null,'Unrecognized value of deprecated property %s %s','<span class="osh-key">prices_range</span>','<span class="osh-formula">'.$row['prices_range']['value'].'</span>');
|
883 |
+
unset($row['prices_range']);
|
884 |
+
}
|
885 |
+
if (isset($row['weights_range'])) {
|
886 |
+
if (!in_array('weights_range',$deprecated_properties)) $deprecated_properties[] = 'weights_range';
|
887 |
+
if (preg_match('/^\\s*(\[|\])?'.$float_value_regex.'=>'.$float_value_regex.'(\[|\])?\\s*$/',$row['weights_range']['value'],$result)) {
|
888 |
+
$min_weight_included = $result[1]=='[';
|
889 |
+
$min_weight = $result[2]=='*' ? -1 : (float)$result[2];
|
890 |
+
$max_weight = $result[3]=='*' ? -1 : (float)$result[3];
|
891 |
+
$max_weight_included = !isset($result[4]) || $result[4]==']' || $result[4]=='';
|
892 |
+
|
893 |
+
if ($min_weight!=-1) $conditions[] = '{cart.weight}>'.($min_weight_included ? '=' : '').$min_weight;
|
894 |
+
if ($max_weight!=-1) $conditions[] = '{cart.weight}<'.($max_weight_included ? '=' : '').$max_weight;
|
895 |
+
}
|
896 |
+
else $this->addMessage('error',$row,null,'Unrecognized value of deprecated property %s %s','<span class="osh-key">weights_range</span>','<span class="osh-formula">'.$row['weights_range']['value'].'</span>');
|
897 |
+
unset($row['weights_range']);
|
898 |
+
}
|
899 |
+
if (isset($row['product_properties'])) {
|
900 |
+
if (!in_array('product_properties',$deprecated_properties)) $deprecated_properties[] = 'product_properties';
|
901 |
+
$product_property_regex = "\\s*(and|or)? *\((?:(all|any|sum) )?(attribute|option) '([^'\)]+)' ?(==|=|<=|>=|<|>|!=) ?(".self::$FLOAT_REGEX."|true|false|'[^'\)]*')\)\\s*";
|
902 |
+
if (preg_match('/^('.$product_property_regex.')+$/',$row['product_properties']['value'],$result)) {
|
903 |
+
preg_match_all('/'.$product_property_regex.'/',$row['product_properties']['value'],$results,PREG_SET_ORDER);
|
904 |
+
$product_properties_condition = '';
|
905 |
+
foreach ($results as $result) {
|
906 |
+
$and_or = $result[1];
|
907 |
+
if ($and_or=='') $and_or = 'and';
|
908 |
+
$any_all_sum = $result[2];
|
909 |
+
if ($any_all_sum=='') $any_all_sum = 'any';
|
910 |
+
$property_type = $result[3];
|
911 |
+
$property_name = $result[4];
|
912 |
+
$cmp_symbol = $result[5];
|
913 |
+
if ($cmp_symbol=='=') $cmp_symbol = '==';
|
914 |
+
$cmp_value = $result[6];
|
915 |
+
|
916 |
+
$product_properties_condition .= $product_properties_condition=='' ? '' : ' '.$and_or.' ';
|
917 |
+
switch ($any_all_sum) {
|
918 |
+
case 'sum':
|
919 |
+
$product_properties_condition .= "{sum product.".$property_type.".".$property_name."}".$cmp_symbol.$cmp_value;
|
920 |
+
break;
|
921 |
+
case 'all':
|
922 |
+
$product_properties_condition .= "{count products where product.".$property_type.".".$property_name.$cmp_symbol.$cmp_value."}=={products_quantity}";
|
923 |
+
break;
|
924 |
+
case 'any':
|
925 |
+
$product_properties_condition .= "{count products where product.".$property_type.".".$property_name.$cmp_symbol.$cmp_value."}>0";
|
926 |
+
break;
|
927 |
+
}
|
928 |
+
}
|
929 |
+
if ($product_properties_condition!='') $conditions[] = $product_properties_condition;
|
930 |
+
}
|
931 |
+
else $this->addMessage('error',$row,null,'Unrecognized value of deprecated property %s %s','<span class="osh-key">product_properties</span>','<span class="osh-formula">'.$row['product_properties']['value'].'</span>');
|
932 |
+
unset($row['product_properties']);
|
933 |
+
}
|
934 |
+
if (count($conditions)>0) $row['conditions'] = array('value' => count($conditions)==1 ? $conditions[0] : '('.implode(') && (',$conditions).')');
|
935 |
+
|
936 |
+
$fees = array();
|
937 |
+
if (isset($row['fees_table'])) {
|
938 |
+
if (!in_array('fees_table',$deprecated_properties)) $deprecated_properties[] = 'fees_table';
|
939 |
+
$options_and_data = $this->_getOptionsAndData($row['fees_table']['value']);
|
940 |
+
$options = $options_and_data['options'];
|
941 |
+
$fees_table_string = $options_and_data['data'];
|
942 |
+
|
943 |
+
$var = null;
|
944 |
+
if ($options=='') $var = (isset($row['reference_value']) ? $row['reference_value']['value'] : 'weight');
|
945 |
+
else if (in_array($options,array('incl.tax','ttc'))) $var = 'price_including_tax';
|
946 |
+
else if (in_array($options,array('excl.tax','ht'))) $var = 'price_excluding_tax';
|
947 |
+
|
948 |
+
if (isset($var)) {
|
949 |
+
if ($var=='price') $var = 'price_excluding_tax';
|
950 |
+
if ($var=='products_quantity') $var = 'quantity';
|
951 |
+
if (preg_match('/^[[:space:]]*\*[[:space:]]*:[[:space:]]*('.$float_value_regex.')[[:space:]]*$/s',$fees_table_string,$result)) $fees[] = $result[1];
|
952 |
+
else $fees[] = "{table {cart.".$var."} in ".str_replace(' ','',$fees_table_string)."}".($var=='quantity' ? '*{cart.quantity}' : '');
|
953 |
+
}
|
954 |
+
else $this->addMessage('error',$row,null,'Unrecognized value of deprecated property %s %s','<span class="osh-key">fees_table</span>','<span class="osh-formula">'.$row['fees_table']['value'].'</span>');
|
955 |
+
unset($row['fees_table']);
|
956 |
+
}
|
957 |
+
if (isset($row['fees_formula'])) {
|
958 |
+
if (!in_array('fees_formula',$deprecated_properties)) $deprecated_properties[] = 'fees_formula';
|
959 |
+
$fees[] = str_replace(' ','',$row['fees_formula']['value']);
|
960 |
+
unset($row['fees_formula']);
|
961 |
+
}
|
962 |
+
if (isset($row['fixed_fees'])) {
|
963 |
+
if (!in_array('fixed_fees',$deprecated_properties)) $deprecated_properties[] = 'fixed_fees';
|
964 |
+
if ($row['fixed_fees']['value']!=0 || count($fees)==0) $fees[] = str_replace(' ','',$row['fixed_fees']['value']);
|
965 |
+
unset($row['fixed_fees']);
|
966 |
+
}
|
967 |
+
if (!isset($row['fees']) && count($fees)>0) $row['fees'] = array('value' => implode('+',$fees));
|
968 |
+
|
969 |
+
$fs_fees = array();
|
970 |
+
if (isset($row['free_shipping__fees_table'])) {
|
971 |
+
if (!in_array('free_shipping__fees_table',$deprecated_properties)) $deprecated_properties[] = 'free_shipping__fees_table';
|
972 |
+
$options_and_data = $this->_getOptionsAndData($row['free_shipping__fees_table']['value']);
|
973 |
+
$options = $options_and_data['options'];
|
974 |
+
$fees_table_string = $options_and_data['data'];
|
975 |
+
|
976 |
+
$var = null;
|
977 |
+
if ($options=='') $var = isset($row['reference_value']) ? $row['reference_value']['value'] : 'weight';
|
978 |
+
else if (in_array($options,array('incl.tax','ttc'))) $var = 'price_including_tax';
|
979 |
+
else if (in_array($options,array('excl.tax','ht'))) $var = 'price_excluding_tax';
|
980 |
+
if ($var=='price') $var = 'price_excluding_tax';
|
981 |
+
|
982 |
+
if (isset($var)) {
|
983 |
+
if ($var=='price') $var = 'price_excluding_tax';
|
984 |
+
if ($var=='products_quantity') $var = 'quantity';
|
985 |
+
if (preg_match('/^[[:space:]]*\*[[:space:]]*:[[:space:]]*('.$float_value_regex.')[[:space:]]*$/s',$fees_table_string,$result)) $fs_fees[] = $result[1];
|
986 |
+
else $fs_fees[] = "{table {cart.".$var."} in ".str_replace(' ','',$fees_table_string)."}".($var=='quantity' ? '*{cart.quantity}' : '');
|
987 |
+
}
|
988 |
+
else $this->addMessage('error',$row,null,'Unrecognized value of deprecated property %s %s','<span class="osh-key">free_shipping__fees_table</span>','<span class="osh-formula">'.$row['free_shipping__fees_table']['value'].'</span>');
|
989 |
+
unset($row['free_shipping__fees_table']);
|
990 |
+
}
|
991 |
+
if (isset($row['free_shipping__fees_formula'])) {
|
992 |
+
if (!in_array('free_shipping__fees_formula',$deprecated_properties)) $deprecated_properties[] = 'free_shipping__fees_formula';
|
993 |
+
$fs_fees[] = str_replace(' ','',$row['free_shipping__fees_formula']['value']);
|
994 |
+
unset($row['free_shipping__fees_formula']);
|
995 |
+
}
|
996 |
+
if (isset($row['free_shipping__fixed_fees'])) {
|
997 |
+
if (!in_array('free_shipping__fixed_fees',$deprecated_properties)) $deprecated_properties[] = 'free_shipping__fixed_fees';
|
998 |
+
if ($row['free_shipping__fixed_fees']['value']!=0 || count($fees)==0) $fs_fees[] = str_replace(' ','',$row['free_shipping__fixed_fees']['value']);
|
999 |
+
unset($row['free_shipping__fixed_fees']);
|
1000 |
+
}
|
1001 |
+
|
1002 |
+
if (isset($row['reference_value'])) {
|
1003 |
+
if (!in_array('reference_value',$deprecated_properties)) $deprecated_properties[] = 'reference_value';
|
1004 |
+
unset($row['reference_value']);
|
1005 |
+
}
|
1006 |
+
|
1007 |
+
if (count($fs_fees)>0) {
|
1008 |
+
$row2 = $row;
|
1009 |
+
if (isset($row['code'])) $row2['code']['value'] = $row['code']['value'].'__free_shipping';
|
1010 |
+
$row2['fees']['value'] = implode('+',$fs_fees);
|
1011 |
+
$row2['conditions']['value'] = isset($row2['conditions']) ? '('.$row2['conditions']+') and {free_shipping}' : '{free_shipping}';
|
1012 |
+
$row['conditions']['value'] = isset($row['conditions']) ? '('.$row['conditions']+') and !{free_shipping}' : '!{free_shipping}';
|
1013 |
+
if (isset($row['free_shipping__label'])) {
|
1014 |
+
if (!in_array('free_shipping__label',$deprecated_properties)) $deprecated_properties[] = 'free_shipping__label';
|
1015 |
+
$row2['label']['value'] = $row['free_shipping__label']['value'];
|
1016 |
+
unset($row['free_shipping__label']);
|
1017 |
+
unset($row2['free_shipping__label']);
|
1018 |
+
}
|
1019 |
+
$this->_addRow($row2);
|
1020 |
+
}
|
1021 |
+
if (count($unknown_properties)>0) $this->addMessage('error',$row,null,'Usage of unknown properties %s',': <span class="osh-key">'.implode('</span>, <span class="osh-key">',$unknown_properties).'</span>');
|
1022 |
+
if (count($deprecated_properties)>0) $this->addMessage('warning',$row,null,'Usage of deprecated properties %s',': <span class="osh-key">'.implode('</span>, <span class="osh-key">',$deprecated_properties).'</span>');
|
1023 |
+
if (count($obsolete_disabling_method)>0) $this->addMessage('warning',$row,null,'Usage of obsolete method to disabling a shipping method (`#` before `{`)%s','<div class="code">'.implode('<br />',$obsolete_disabling_method).'</div>');
|
1024 |
+
if (count($missing_semicolon)>0) $this->addMessage('warning',$row,null,'A semicolon is missing at the end of following lines %s','<div class="code">'.implode('<br />',$missing_semicolon).'</div>');
|
1025 |
+
$this->_addRow($row);
|
1026 |
+
}
|
1027 |
+
if (trim($config_string)!='') {
|
1028 |
+
$this->_addIgnoredLines(trim($config_string));
|
1029 |
+
$this->addMessage('info',$row=null,null,'Ignored lines %s','<div class="code">'.trim($config_string).'</div>');
|
1030 |
+
}
|
1031 |
+
}
|
1032 |
+
|
1033 |
+
public function addMessage($type, &$row, $property) {
|
1034 |
+
$args = func_get_args();
|
1035 |
+
array_shift($args);
|
1036 |
+
array_shift($args);
|
1037 |
+
array_shift($args);
|
1038 |
+
$message = new OCS_Message($type,$args);
|
1039 |
+
if (isset($row)) {
|
1040 |
+
if (isset($property)) {
|
1041 |
+
$row[$property]['messages'][] = $message;
|
1042 |
+
} else {
|
1043 |
+
$row['*messages'][] = $message;
|
1044 |
+
}
|
1045 |
+
}
|
1046 |
+
$this->_messages[] = $message;
|
1047 |
+
self::debug(' => <span class="osh-'.$message->type.'">'.$message->toString().'</span>',1);
|
1048 |
+
}
|
1049 |
+
|
1050 |
+
protected function _addRow(&$row) {
|
1051 |
+
if (isset($row['code'])) {
|
1052 |
+
$key = $row['code']['value'];
|
1053 |
+
if (isset($this->_config[$key])) $this->addMessage('error',$row,'code','The property `code` must be unique, `%s` has been found twice',$key);
|
1054 |
+
while (isset($this->_config[$key])) $key .= rand(0,9);
|
1055 |
+
//$row['code'] = $key;
|
1056 |
+
} else {
|
1057 |
+
$i = 1;
|
1058 |
+
do {
|
1059 |
+
$key = 'code_auto'.sprintf('%03d',$i);
|
1060 |
+
$i++;
|
1061 |
+
} while (isset($this->_config[$key]));
|
1062 |
+
}
|
1063 |
+
$row['*code'] = $key;
|
1064 |
+
$this->_config[$key] = $row;
|
1065 |
+
}
|
1066 |
+
|
1067 |
+
protected function _addIgnoredLines($lines) {
|
1068 |
+
$this->_config[] = array('lines' => $lines);
|
1069 |
+
}
|
1070 |
+
|
1071 |
+
protected function _addressMatch($address_filter, $address) {
|
1072 |
+
$excluding = false;
|
1073 |
+
if (preg_match('# *\* *- *\((.*)\) *#s',$address_filter,$result)) {
|
1074 |
+
$address_filter = $result[1];
|
1075 |
+
$excluding = true;
|
1076 |
+
}
|
1077 |
+
|
1078 |
+
$tmp_address_filter_array = explode(',',trim($address_filter));
|
1079 |
+
|
1080 |
+
$concat = false;
|
1081 |
+
$concatened = '';
|
1082 |
+
$address_filter_array = array();
|
1083 |
+
$i = 0;
|
1084 |
+
|
1085 |
+
foreach ($tmp_address_filter_array as $address_filter) {
|
1086 |
+
if ($concat) $concatened .= ','.$address_filter;
|
1087 |
+
else {
|
1088 |
+
if ($i<count($tmp_address_filter_array)-1 && preg_match('#\(#',$address_filter)) {
|
1089 |
+
$concat = true;
|
1090 |
+
$concatened .= $address_filter;
|
1091 |
+
} else $address_filter_array[] = $address_filter;
|
1092 |
+
}
|
1093 |
+
if (preg_match('#\)#',$address_filter)) {
|
1094 |
+
$address_filter_array[] = $concatened;
|
1095 |
+
$concatened = '';
|
1096 |
+
$concat = false;
|
1097 |
+
}
|
1098 |
+
$i++;
|
1099 |
+
}
|
1100 |
+
|
1101 |
+
foreach ($address_filter_array as $address_filter) {
|
1102 |
+
if (preg_match('# *([A-Z]{2}) *(-)? *(?:\( *(-)? *(.*)\))? *#s',$address_filter,$result)) {
|
1103 |
+
$country_code = $result[1];
|
1104 |
+
if ($address['country_code']==$country_code) {
|
1105 |
+
self::debug(' country code <span class="osh-replacement">'.$address['country_code'].'</span> matches',5);
|
1106 |
+
if (!isset($result[4]) || $result[4]=='') return !$excluding;
|
1107 |
+
else {
|
1108 |
+
$region_codes = explode(',',$result[4]);
|
1109 |
+
$in_array = false;
|
1110 |
+
for ($i=count($region_codes); --$i>=0;) {
|
1111 |
+
$code = trim($region_codes[$i]);
|
1112 |
+
$region_codes[$i] = $code;
|
1113 |
+
if ($address['region_code']===$code) {
|
1114 |
+
self::debug(' region code <span class="osh-replacement">'.$address['region_code'].'</span> matches',5);
|
1115 |
+
$in_array = true;
|
1116 |
+
} else if ($address['postcode']===$code) {
|
1117 |
+
self::debug(' postcode <span class="osh-replacement">'.$address['postcode'].'</span> matches',5);
|
1118 |
+
$in_array = true;
|
1119 |
+
} else if (strpos($code,'*')!==false && preg_match('/^'.str_replace('*','(?:.*)',$code).'$/',$address['postcode'])) {
|
1120 |
+
self::debug(' postcode <span class="osh-replacement">'.$address['postcode'].'</span> matches <span class="osh-formula">'.$code.'</span>',5);
|
1121 |
+
$in_array = true;
|
1122 |
+
}
|
1123 |
+
if ($in_array) break;
|
1124 |
+
}
|
1125 |
+
if (!$in_array) {
|
1126 |
+
self::debug(' region code <span class="osh-replacement">'.$address['region_code'].'</span> and postcode <span class="osh-replacement">'.$address['postcode'].'</span> don\'t match',5);
|
1127 |
+
}
|
1128 |
+
// Vérification stricte
|
1129 |
+
/*$in_array = in_array($address['region_code'],$region_codes,true) || in_array($address['postcode'],$region_codes,true);*/
|
1130 |
+
$excluding_region = $result[2]=='-' || $result[3]=='-';
|
1131 |
+
if ($excluding_region && !$in_array || !$excluding_region && $in_array) return !$excluding;
|
1132 |
+
}
|
1133 |
+
}
|
1134 |
+
}
|
1135 |
+
}
|
1136 |
+
return $excluding;
|
1137 |
+
}
|
1138 |
+
|
1139 |
+
protected function _getProductProperty($product, $property_type, $property_name, $get_by_id=false) {
|
1140 |
+
switch ($property_type) {
|
1141 |
+
case 'attribute':
|
1142 |
+
case 'attributes': return $product->getAttribute($property_name,$get_by_id);
|
1143 |
+
case 'option':
|
1144 |
+
case 'options': return $product->getOption($property_name,$get_by_id);
|
1145 |
+
case 'stock': return $product->getStockData($property_name);
|
1146 |
+
}
|
1147 |
+
return null;
|
1148 |
+
}
|
1149 |
+
|
1150 |
+
protected function _processProductProperty($products, $regex_result) {
|
1151 |
+
// COUNT, SUM or COUNT DISTINCT
|
1152 |
+
$operation = strtolower($regex_result[1]);
|
1153 |
+
switch ($operation) {
|
1154 |
+
case 'sum':
|
1155 |
+
case 'count distinct':
|
1156 |
+
$property_type = $regex_result[2];
|
1157 |
+
$property_name = $regex_result[3];
|
1158 |
+
$conditions = isset($regex_result[4]) ? $regex_result[4] : null;
|
1159 |
+
break;
|
1160 |
+
case 'count':
|
1161 |
+
$conditions = isset($regex_result[2]) ? $regex_result[2] : null;
|
1162 |
+
break;
|
1163 |
+
}
|
1164 |
+
|
1165 |
+
self::debug(' :: start <span class="osh-replacement">'.$regex_result[0].'</span>',10);
|
1166 |
+
|
1167 |
+
$return_value = 0;
|
1168 |
+
|
1169 |
+
preg_match_all('/product\.(attribute(?:s)?|option(?:s)?|stock)\.([a-z0-9_]+)(?:\.(id))?/i',$conditions,$properties_regex_result,PREG_SET_ORDER);
|
1170 |
+
$properties = array();
|
1171 |
+
foreach ($properties_regex_result as $property_regex_result) {
|
1172 |
+
$key = $property_regex_result[0];
|
1173 |
+
if (!isset($properties[$key])) $properties[$key] = $property_regex_result;
|
1174 |
+
}
|
1175 |
+
|
1176 |
+
foreach ($products as $product) {
|
1177 |
+
if (isset($conditions) && $conditions!='') {
|
1178 |
+
$formula = $conditions;
|
1179 |
+
foreach ($properties as $property) {
|
1180 |
+
$value = $this->_getProductProperty(
|
1181 |
+
$product,
|
1182 |
+
$tmp_property_type = $property[1],
|
1183 |
+
$tmp_property_name = $property[2],
|
1184 |
+
$get_by_id = isset($property[3]) && $property[3]=='id'
|
1185 |
+
);
|
1186 |
+
//$formula = $this->replace($property[0],$value,$formula);
|
1187 |
+
$from = $property[0];
|
1188 |
+
$to = is_string($value) || empty($value) ? "'".$value."'" : $value;
|
1189 |
+
$formula = str_replace($from,$to,$formula);
|
1190 |
+
self::debug(' replace <span class="osh-replacement">'.$from.'</span> by <span class="osh-replacement">'.$to.'</span> => <span class="osh-formula">'.str_replace($from,'<span class="osh-replacement">'.$to.'</span>',$formula).'</span>',5);
|
1191 |
+
}
|
1192 |
+
$eval_result = $this->_evalFormula($formula);
|
1193 |
+
if (!isset($eval_result)) return 'null';
|
1194 |
+
}
|
1195 |
+
else $eval_result = true;
|
1196 |
+
|
1197 |
+
if ($eval_result==true) {
|
1198 |
+
switch ($operation) {
|
1199 |
+
case 'sum':
|
1200 |
+
$value = $this->_getProductProperty($product,$property_type,$property_name);
|
1201 |
+
//self::debug($product->getSku().'.'.$property_type.'.'.$property_name.' = "'.$value.'" x '.$product->getQuantity(),10);
|
1202 |
+
$return_value += $value*$product->getQuantity();
|
1203 |
+
break;
|
1204 |
+
case 'count distinct':
|
1205 |
+
if (!isset($distinct_values)) $distinct_values = array();
|
1206 |
+
$value = $this->_getProductProperty($product,$property_type,$property_name);
|
1207 |
+
if (!in_array($value,$distinct_values)) {
|
1208 |
+
$distinct_values[] = $value;
|
1209 |
+
$return_value++;
|
1210 |
+
}
|
1211 |
+
break;
|
1212 |
+
case 'count':
|
1213 |
+
$return_value += $product->getQuantity();
|
1214 |
+
break;
|
1215 |
+
}
|
1216 |
+
}
|
1217 |
+
}
|
1218 |
+
|
1219 |
+
self::debug(' :: end <span class="osh-replacement">'.$regex_result[0].'</span>',10);
|
1220 |
+
|
1221 |
+
return $return_value;
|
1222 |
+
}
|
1223 |
+
|
1224 |
+
}
|
1225 |
+
|
1226 |
+
interface OCS_Product {
|
1227 |
+
public function getOption($option);
|
1228 |
+
public function getAttribute($attribute);
|
1229 |
+
public function getName();
|
1230 |
+
public function getSku();
|
1231 |
+
public function getQuantity();
|
1232 |
+
public function getStockData($key);
|
1233 |
+
}
|
1234 |
+
|
1235 |
+
class OCS_Message {
|
1236 |
+
public $type;
|
1237 |
+
public $message;
|
1238 |
+
public $args;
|
1239 |
+
|
1240 |
+
public function OCS_Message($type, $args) {
|
1241 |
+
$this->type = $type;
|
1242 |
+
$this->message = array_shift($args);
|
1243 |
+
$this->args = $args;
|
1244 |
+
}
|
1245 |
+
|
1246 |
+
public function toString() {
|
1247 |
+
return vsprintf($this->message,$this->args);
|
1248 |
+
}
|
1249 |
+
}
|
1250 |
+
|
1251 |
+
class OCS_Result {
|
1252 |
+
public $success;
|
1253 |
+
public $result;
|
1254 |
+
|
1255 |
+
public function OCS_Result($success, $result=null) {
|
1256 |
+
$this->success = $success;
|
1257 |
+
$this->result = $result;
|
1258 |
+
}
|
1259 |
+
|
1260 |
+
public function __toString() {
|
1261 |
+
return is_bool($this->result) ? ($this->result ? 'true' : 'false') : (string)$this->result;
|
1262 |
+
}
|
1263 |
+
}
|
1264 |
+
|
1265 |
+
|
1266 |
+
?>
|
app/code/community/Chronopost/Chronorelais/sql/chronorelais_setup/mysql4-install-0.1.0.php
CHANGED
@@ -1,15 +1,15 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
$installer = $this;
|
4 |
-
|
5 |
-
$installer->startSetup();
|
6 |
-
|
7 |
-
$installer->addAttribute('order', 'w_relay_point_code', array(
|
8 |
-
'type' => 'varchar',
|
9 |
-
'input' => 'text',
|
10 |
-
'default' => 0,
|
11 |
-
'label' => 'Relay point',
|
12 |
-
'required' => 0
|
13 |
-
));
|
14 |
-
|
15 |
$installer->endSetup();
|
1 |
+
<?php
|
2 |
+
|
3 |
+
$installer = $this;
|
4 |
+
|
5 |
+
$installer->startSetup();
|
6 |
+
|
7 |
+
$installer->addAttribute('order', 'w_relay_point_code', array(
|
8 |
+
'type' => 'varchar',
|
9 |
+
'input' => 'text',
|
10 |
+
'default' => 0,
|
11 |
+
'label' => 'Relay point',
|
12 |
+
'required' => 0
|
13 |
+
));
|
14 |
+
|
15 |
$installer->endSetup();
|
app/code/community/Chronopost/Chronorelais/sql/chronorelais_setup/mysql4-upgrade-0.1.0-0.1.1.php
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
-
<?php
|
2 |
-
$installer = $this;
|
3 |
-
$installer->startSetup();
|
4 |
-
|
5 |
-
$this->run("
|
6 |
-
ALTER TABLE {$this->getTable('sales_flat_quote_address')} ADD `w_relay_point_code` varchar(255);
|
7 |
-
");
|
8 |
-
$this->endSetup();
|
1 |
+
<?php
|
2 |
+
$installer = $this;
|
3 |
+
$installer->startSetup();
|
4 |
+
|
5 |
+
$this->run("
|
6 |
+
ALTER TABLE {$this->getTable('sales_flat_quote_address')} ADD `w_relay_point_code` varchar(255);
|
7 |
+
");
|
8 |
+
$this->endSetup();
|
app/code/community/Chronopost/Chronorelais/sql/chronorelais_setup/mysql4-upgrade-0.1.1-0.1.2.php
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
-
<?php
|
2 |
-
$installer = $this;
|
3 |
-
$installer->startSetup();
|
4 |
-
|
5 |
-
$this->run("
|
6 |
-
ALTER TABLE {$this->getTable('sales_flat_order_address')} ADD `w_relay_point_code` varchar(255);
|
7 |
-
");
|
8 |
-
$this->endSetup();
|
1 |
+
<?php
|
2 |
+
$installer = $this;
|
3 |
+
$installer->startSetup();
|
4 |
+
|
5 |
+
$this->run("
|
6 |
+
ALTER TABLE {$this->getTable('sales_flat_order_address')} ADD `w_relay_point_code` varchar(255);
|
7 |
+
");
|
8 |
+
$this->endSetup();
|
app/code/community/Chronopost/Chronorelais/sql/chronorelais_setup/mysql4-upgrade-0.1.2-0.1.3.php
CHANGED
@@ -1,8 +1,8 @@
|
|
1 |
-
<?php
|
2 |
-
$installer = $this;
|
3 |
-
$installer->startSetup();
|
4 |
-
|
5 |
-
$this->run("
|
6 |
-
ALTER TABLE {$this->getTable('sales_flat_shipment_track')} ADD `chrono_reservation_number` varchar(255);
|
7 |
-
");
|
8 |
-
$this->endSetup();
|
1 |
+
<?php
|
2 |
+
$installer = $this;
|
3 |
+
$installer->startSetup();
|
4 |
+
|
5 |
+
$this->run("
|
6 |
+
ALTER TABLE {$this->getTable('sales_flat_shipment_track')} ADD `chrono_reservation_number` varchar(255);
|
7 |
+
");
|
8 |
+
$this->endSetup();
|
app/code/community/Chronopost/Chronorelais/sql/chronorelais_setup/mysql4-upgrade-0.1.3-0.1.4.php
CHANGED
@@ -1,14 +1,14 @@
|
|
1 |
-
<?php
|
2 |
-
$installer = $this;
|
3 |
-
$installer->startSetup();
|
4 |
-
|
5 |
-
$installer->run("
|
6 |
-
-- DROP TABLE IF EXISTS {$this->getTable('sales_chronopost_order_export_status')};
|
7 |
-
CREATE TABLE {$this->getTable('sales_chronopost_order_export_status')} (
|
8 |
-
`order_id` int(10) unsigned NOT NULL,
|
9 |
-
`livraison_le_samedi` varchar(10) NOT NULL DEFAULT 'Yes',
|
10 |
-
UNIQUE KEY `order_id` (`order_id`)
|
11 |
-
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
12 |
-
");
|
13 |
-
|
14 |
$installer->endSetup();
|
1 |
+
<?php
|
2 |
+
$installer = $this;
|
3 |
+
$installer->startSetup();
|
4 |
+
|
5 |
+
$installer->run("
|
6 |
+
-- DROP TABLE IF EXISTS {$this->getTable('sales_chronopost_order_export_status')};
|
7 |
+
CREATE TABLE {$this->getTable('sales_chronopost_order_export_status')} (
|
8 |
+
`order_id` int(10) unsigned NOT NULL,
|
9 |
+
`livraison_le_samedi` varchar(10) NOT NULL DEFAULT 'Yes',
|
10 |
+
UNIQUE KEY `order_id` (`order_id`)
|
11 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
12 |
+
");
|
13 |
+
|
14 |
$installer->endSetup();
|
app/design/adminhtml/default/default/template/chronorelais/import/form.phtml
CHANGED
@@ -1,65 +1,65 @@
|
|
1 |
-
<div class="content-header">
|
2 |
-
<table cellspacing="0">
|
3 |
-
<tr>
|
4 |
-
<td><h3 class="icon-head head-tax-rate-importExport"><?php echo Mage::helper('chronorelais')->__('Importer une liste de numéros de colis') ?></h3></td>
|
5 |
-
</tr>
|
6 |
-
</table>
|
7 |
-
</div>
|
8 |
-
<div class="entry-edit">
|
9 |
-
<div class="box-left">
|
10 |
-
<form id="import_form" action="<?php echo $this->getUrl('*/*/import') ?>" method="post" enctype="multipart/form-data">
|
11 |
-
<?php echo $this->getBlockHtml('formkey')?>
|
12 |
-
<div class="entry-edit-head">
|
13 |
-
<h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('chronorelais')->__('Importer une liste de numéros de colis') ?></h4>
|
14 |
-
</div>
|
15 |
-
|
16 |
-
<fieldset>
|
17 |
-
<table class="form-list" cellspacing="0">
|
18 |
-
<colgroup class="label"/>
|
19 |
-
<colgroup class="value"/>
|
20 |
-
<tbody>
|
21 |
-
<tr>
|
22 |
-
<td class="label">
|
23 |
-
<label><?php echo Mage::helper('chronorelais')->__('Tracking Title') ?></label>
|
24 |
-
</td>
|
25 |
-
<td class="value">
|
26 |
-
<input type="text" name="import_chronorelais_tracking_title" class="input-file" value="<?php echo Mage::helper('chronorelais')->getConfigurationDefaultTrackingTitle() ?>"/>
|
27 |
-
</td>
|
28 |
-
</tr>
|
29 |
-
<tr>
|
30 |
-
<td class="label">
|
31 |
-
<label><?php echo Mage::helper('chronorelais')->__('Import File') ?></label>
|
32 |
-
</td>
|
33 |
-
<td class="value">
|
34 |
-
<input type="file" name="import_chronorelais_file" class="input-file required-entry"/>
|
35 |
-
<p class="nm">
|
36 |
-
<small><?php echo Mage::helper('chronorelais')->__('Line format:'). ' "'.Mage::helper('chronorelais')->__('order id').'","'.Mage::helper('chronorelais')->__('tracking number').'"'; ?></small>
|
37 |
-
</p>
|
38 |
-
</td>
|
39 |
-
</tr>
|
40 |
-
<tr>
|
41 |
-
<td> </td>
|
42 |
-
<td class="value">
|
43 |
-
<?php $button_label = Mage::helper('chronorelais')->__('Import'); ?>
|
44 |
-
<?php echo $this->getButtonHtml($button_label, "this.form.submit();displayLoadingMask();") ?>
|
45 |
-
</td>
|
46 |
-
</tr>
|
47 |
-
</tbody>
|
48 |
-
</table>
|
49 |
-
</fieldset>
|
50 |
-
|
51 |
-
</form>
|
52 |
-
<script type="text/javascript">
|
53 |
-
var importForm = new varienForm('import_form');
|
54 |
-
|
55 |
-
function displayLoadingMask()
|
56 |
-
{
|
57 |
-
var loaderArea = $$('#html-body .wrapper')[0]; // Blocks all page
|
58 |
-
Position.clone($(loaderArea), $('loading-mask'), {offsetLeft:-2});
|
59 |
-
toggleSelectsUnderBlock($('loading-mask'), false);
|
60 |
-
Element.show('loading-mask');
|
61 |
-
}
|
62 |
-
</script>
|
63 |
-
</div>
|
64 |
-
<div class="clear"></div>
|
65 |
-
</div>
|
1 |
+
<div class="content-header">
|
2 |
+
<table cellspacing="0">
|
3 |
+
<tr>
|
4 |
+
<td><h3 class="icon-head head-tax-rate-importExport"><?php echo Mage::helper('chronorelais')->__('Importer une liste de numéros de colis') ?></h3></td>
|
5 |
+
</tr>
|
6 |
+
</table>
|
7 |
+
</div>
|
8 |
+
<div class="entry-edit">
|
9 |
+
<div class="box-left">
|
10 |
+
<form id="import_form" action="<?php echo $this->getUrl('*/*/import') ?>" method="post" enctype="multipart/form-data">
|
11 |
+
<?php echo $this->getBlockHtml('formkey')?>
|
12 |
+
<div class="entry-edit-head">
|
13 |
+
<h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('chronorelais')->__('Importer une liste de numéros de colis') ?></h4>
|
14 |
+
</div>
|
15 |
+
|
16 |
+
<fieldset>
|
17 |
+
<table class="form-list" cellspacing="0">
|
18 |
+
<colgroup class="label"/>
|
19 |
+
<colgroup class="value"/>
|
20 |
+
<tbody>
|
21 |
+
<tr>
|
22 |
+
<td class="label">
|
23 |
+
<label><?php echo Mage::helper('chronorelais')->__('Tracking Title') ?></label>
|
24 |
+
</td>
|
25 |
+
<td class="value">
|
26 |
+
<input type="text" name="import_chronorelais_tracking_title" class="input-file" value="<?php echo Mage::helper('chronorelais')->getConfigurationDefaultTrackingTitle() ?>"/>
|
27 |
+
</td>
|
28 |
+
</tr>
|
29 |
+
<tr>
|
30 |
+
<td class="label">
|
31 |
+
<label><?php echo Mage::helper('chronorelais')->__('Import File') ?></label>
|
32 |
+
</td>
|
33 |
+
<td class="value">
|
34 |
+
<input type="file" name="import_chronorelais_file" class="input-file required-entry"/>
|
35 |
+
<p class="nm">
|
36 |
+
<small><?php echo Mage::helper('chronorelais')->__('Line format:'). ' "'.Mage::helper('chronorelais')->__('order id').'","'.Mage::helper('chronorelais')->__('tracking number').'"'; ?></small>
|
37 |
+
</p>
|
38 |
+
</td>
|
39 |
+
</tr>
|
40 |
+
<tr>
|
41 |
+
<td> </td>
|
42 |
+
<td class="value">
|
43 |
+
<?php $button_label = Mage::helper('chronorelais')->__('Import'); ?>
|
44 |
+
<?php echo $this->getButtonHtml($button_label, "this.form.submit();displayLoadingMask();") ?>
|
45 |
+
</td>
|
46 |
+
</tr>
|
47 |
+
</tbody>
|
48 |
+
</table>
|
49 |
+
</fieldset>
|
50 |
+
|
51 |
+
</form>
|
52 |
+
<script type="text/javascript">
|
53 |
+
var importForm = new varienForm('import_form');
|
54 |
+
|
55 |
+
function displayLoadingMask()
|
56 |
+
{
|
57 |
+
var loaderArea = $$('#html-body .wrapper')[0]; // Blocks all page
|
58 |
+
Position.clone($(loaderArea), $('loading-mask'), {offsetLeft:-2});
|
59 |
+
toggleSelectsUnderBlock($('loading-mask'), false);
|
60 |
+
Element.show('loading-mask');
|
61 |
+
}
|
62 |
+
</script>
|
63 |
+
</div>
|
64 |
+
<div class="clear"></div>
|
65 |
+
</div>
|
app/design/frontend/default/default/template/chronorelais/checkout/multishipping/shipping.phtml
CHANGED
@@ -131,7 +131,7 @@
|
|
131 |
<span style="display: none;" class="please-wait" id="loading-process"><img class="v-middle" title="<?php echo $this->__('Loading...')?>" alt="<?php echo $this->__('Loading...')?>" src="<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif')?>"> <?php echo $this->__('Loading...')?></span>
|
132 |
<div id="checkout-shipping-method-chronorelais-load_<?php echo $_address->getId() ?>" class="chronorelais-list" style="clear: both;">
|
133 |
<?php if($this->getAddressShippingMethod($_address)=="chronorelais_chronorelais"): ?>
|
134 |
-
<?php Mage::getSingleton('core/session')->
|
135 |
<?php echo $this->getChildHtml('relaislist') ?>
|
136 |
<?php endif; ?>
|
137 |
</div>
|
131 |
<span style="display: none;" class="please-wait" id="loading-process"><img class="v-middle" title="<?php echo $this->__('Loading...')?>" alt="<?php echo $this->__('Loading...')?>" src="<?php echo $this->getSkinUrl('images/opc-ajax-loader.gif')?>"> <?php echo $this->__('Loading...')?></span>
|
132 |
<div id="checkout-shipping-method-chronorelais-load_<?php echo $_address->getId() ?>" class="chronorelais-list" style="clear: both;">
|
133 |
<?php if($this->getAddressShippingMethod($_address)=="chronorelais_chronorelais"): ?>
|
134 |
+
<?php Mage::getSingleton('core/session')->setMultiPostcode($_address->getPostcode()); ?>
|
135 |
<?php echo $this->getChildHtml('relaislist') ?>
|
136 |
<?php endif; ?>
|
137 |
</div>
|
app/design/frontend/default/default/template/chronorelais/checkout/multishipping/shipping_method/chronorelais.phtml
CHANGED
@@ -1,9 +1,6 @@
|
|
1 |
<?php if(count($this->getChronorelais())>0): ?>
|
2 |
<?php
|
3 |
-
|
4 |
-
//$address = $quote->getShippingAddress();
|
5 |
-
$address = Mage::getSingleton('core/session')->getMultiAddress();
|
6 |
-
$postcode = $address->getPostcode();
|
7 |
?>
|
8 |
<div class="chronorelaismap">
|
9 |
<div class="mappostalcode">
|
1 |
<?php if(count($this->getChronorelais())>0): ?>
|
2 |
<?php
|
3 |
+
$postcode = Mage::getSingleton('core/session')->getMultiPostcode();
|
|
|
|
|
|
|
4 |
?>
|
5 |
<div class="chronorelaismap">
|
6 |
<div class="mappostalcode">
|
app/design/frontend/default/default/template/chronorelais/checkout/onepage/shipping_method.phtml
CHANGED
@@ -26,7 +26,7 @@
|
|
26 |
?>
|
27 |
<?php $isSoColissimoSimplicite = Mage::getConfig()->getModuleConfig('LaPoste_SoColissimoSimplicite')->is('active'); ?>
|
28 |
|
29 |
-
<script src="http://maps.
|
30 |
<script type="text/javascript" src="<?php echo $this->getSkinUrl('chronorelais/chronorelaismap.js') ?>"></script>
|
31 |
<script type="text/javascript">
|
32 |
//<![CDATA[
|
26 |
?>
|
27 |
<?php $isSoColissimoSimplicite = Mage::getConfig()->getModuleConfig('LaPoste_SoColissimoSimplicite')->is('active'); ?>
|
28 |
|
29 |
+
<script src="http://maps.googleapis.com/maps/api/js?sensor=false<?php if (Mage::helper('chronorelais')->getConfigurationGoogleMapAPIKey()): ?>&key=<?php echo Mage::helper('chronorelais')->getConfigurationGoogleMapAPIKey() ?><?php endif; ?>" type="text/javascript"></script>
|
30 |
<script type="text/javascript" src="<?php echo $this->getSkinUrl('chronorelais/chronorelaismap.js') ?>"></script>
|
31 |
<script type="text/javascript">
|
32 |
//<![CDATA[
|
app/design/frontend/default/default/template/chronorelais/checkout/onepage/shipping_method/available.phtml
CHANGED
@@ -28,11 +28,13 @@
|
|
28 |
<p><?php echo $this->__('Sorry, no quotes are available for this order at this time.') ?></p>
|
29 |
<?php else: ?>
|
30 |
<dl class="sp-methods">
|
|
|
31 |
<?php $_sole = count($_shippingRateGroups) == 1; foreach ($_shippingRateGroups as $code => $_rates): ?>
|
32 |
<dt><?php echo $this->getCarrierName($code) ?></dt>
|
33 |
<dd>
|
34 |
<ul>
|
35 |
<?php $_sole = $_sole && count($_rates) == 1; foreach ($_rates as $_rate): ?>
|
|
|
36 |
<li>
|
37 |
<?php if ($_rate->getErrorMessage()): ?>
|
38 |
<ul class="messages"><li class="error-msg"><ul><li><?php echo $_rate->getErrorMessage() ?></li></ul></li></ul>
|
@@ -91,4 +93,32 @@
|
|
91 |
</dd>
|
92 |
<?php endforeach; ?>
|
93 |
</dl>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
<?php endif; ?>
|
28 |
<p><?php echo $this->__('Sorry, no quotes are available for this order at this time.') ?></p>
|
29 |
<?php else: ?>
|
30 |
<dl class="sp-methods">
|
31 |
+
<?php $shippingCodePrice = array(); ?>
|
32 |
<?php $_sole = count($_shippingRateGroups) == 1; foreach ($_shippingRateGroups as $code => $_rates): ?>
|
33 |
<dt><?php echo $this->getCarrierName($code) ?></dt>
|
34 |
<dd>
|
35 |
<ul>
|
36 |
<?php $_sole = $_sole && count($_rates) == 1; foreach ($_rates as $_rate): ?>
|
37 |
+
<?php $shippingCodePrice[] = "'".$_rate->getCode()."':".(float)$_rate->getPrice(); ?>
|
38 |
<li>
|
39 |
<?php if ($_rate->getErrorMessage()): ?>
|
40 |
<ul class="messages"><li class="error-msg"><ul><li><?php echo $_rate->getErrorMessage() ?></li></ul></li></ul>
|
93 |
</dd>
|
94 |
<?php endforeach; ?>
|
95 |
</dl>
|
96 |
+
<script type="text/javascript">
|
97 |
+
//<![CDATA[
|
98 |
+
<?php if (!empty($shippingCodePrice)): ?>
|
99 |
+
var shippingCodePrice = {<?php echo implode(',',$shippingCodePrice); ?>};
|
100 |
+
<?php endif; ?>
|
101 |
+
|
102 |
+
$$('input[type="radio"][name="shipping_method"]').each(function(el){
|
103 |
+
Event.observe(el, 'click', function(){
|
104 |
+
if (el.checked == true) {
|
105 |
+
var getShippingCode = el.getValue();
|
106 |
+
<?php if (!empty($shippingCodePrice)): ?>
|
107 |
+
var newPrice = shippingCodePrice[getShippingCode];
|
108 |
+
if (!lastPrice) {
|
109 |
+
lastPrice = newPrice;
|
110 |
+
quoteBaseGrandTotal += newPrice;
|
111 |
+
}
|
112 |
+
if (newPrice != lastPrice) {
|
113 |
+
quoteBaseGrandTotal += (newPrice-lastPrice);
|
114 |
+
lastPrice = newPrice;
|
115 |
+
}
|
116 |
+
<?php endif; ?>
|
117 |
+
checkQuoteBaseGrandTotal = quoteBaseGrandTotal;
|
118 |
+
return false;
|
119 |
+
}
|
120 |
+
});
|
121 |
+
});
|
122 |
+
//]]>
|
123 |
+
</script>
|
124 |
<?php endif; ?>
|
app/design/frontend/default/default/template/chronorelais/sales/order/history.phtml
CHANGED
@@ -64,7 +64,8 @@
|
|
64 |
<span class="separator">|</span> <a href="<?php echo $this->getReorderUrl($_order) ?>" class="link-reorder"><?php echo $this->__('Reorder') ?></a>
|
65 |
<?php endif ?>
|
66 |
</span>
|
67 |
-
|
|
|
68 |
<a href="#" onclick="popWin('<?php echo $this->helper('shipping')->getTrackingPopupUrlBySalesModel($_order) ?>','trackorder','top=50,left=50,width=800,height=600,resizable=yes,scrollbars=yes'); return false;" title="<?php echo $this->__('Track Your Order') ?>"><?php echo $this->__('Track Your Order') ?></a>
|
69 |
<?php endif; ?>
|
70 |
</td>
|
64 |
<span class="separator">|</span> <a href="<?php echo $this->getReorderUrl($_order) ?>" class="link-reorder"><?php echo $this->__('Reorder') ?></a>
|
65 |
<?php endif ?>
|
66 |
</span>
|
67 |
+
<br />
|
68 |
+
<?php if ($_order->getTracksCollection()->count()) : ?>
|
69 |
<a href="#" onclick="popWin('<?php echo $this->helper('shipping')->getTrackingPopupUrlBySalesModel($_order) ?>','trackorder','top=50,left=50,width=800,height=600,resizable=yes,scrollbars=yes'); return false;" title="<?php echo $this->__('Track Your Order') ?>"><?php echo $this->__('Track Your Order') ?></a>
|
70 |
<?php endif; ?>
|
71 |
</td>
|
app/design/frontend/default/default/template/chronorelais/sales/order/recent.phtml
CHANGED
@@ -63,7 +63,8 @@
|
|
63 |
<span class="separator">|</span> <a href="<?php echo $this->getReorderUrl($_order) ?>" class="link-reorder"><?php echo $this->__('Reorder') ?></a>
|
64 |
<?php endif ?>
|
65 |
</span>
|
66 |
-
|
|
|
67 |
<a href="#" onclick="popWin('<?php echo $this->helper('shipping')->getTrackingPopupUrlBySalesModel($_order) ?>','trackorder','top=50,left=50,width=800,height=600,resizable=yes,scrollbars=yes'); return false;" title="<?php echo $this->__('Track Your Order') ?>"><?php echo $this->__('Track Your Order') ?></a>
|
68 |
<?php endif; ?>
|
69 |
</td>
|
63 |
<span class="separator">|</span> <a href="<?php echo $this->getReorderUrl($_order) ?>" class="link-reorder"><?php echo $this->__('Reorder') ?></a>
|
64 |
<?php endif ?>
|
65 |
</span>
|
66 |
+
<br />
|
67 |
+
<?php if ($_order->getTracksCollection()->count()) : ?>
|
68 |
<a href="#" onclick="popWin('<?php echo $this->helper('shipping')->getTrackingPopupUrlBySalesModel($_order) ?>','trackorder','top=50,left=50,width=800,height=600,resizable=yes,scrollbars=yes'); return false;" title="<?php echo $this->__('Track Your Order') ?>"><?php echo $this->__('Track Your Order') ?></a>
|
69 |
<?php endif; ?>
|
70 |
</td>
|
app/locale/fr_FR/Chronopost_Chronorelais.csv
CHANGED
@@ -31,19 +31,19 @@
|
|
31 |
"Minimum Amount for Free Shipping","Montant minimum pour livraison gratuite"
|
32 |
"Semicolon","Point virgule"
|
33 |
"Comma","Virgule"
|
34 |
-
|
35 |
"Configuration","Configuration"
|
36 |
"{configuration_syntax_help}","<a href='http://www.magentocommerce.com/boards/viewthread/37860/' target='_blank'>Aide</a>"
|
37 |
"{debug_help}","0 = aucun, 1 = minimum, 10 = complet"
|
38 |
"{logo_ulr_help}","Upload the logo image to the given skin folder. skin/frontend/[your package name]/[your skin name]/chronorelais/"
|
39 |
"No : cost is obtained from your rate grid ; Yes : cost is fetched from URL below";"Non : le prix est calculé grâce à votre grille tarifaire ; Oui : le prix est calculé via le webservice ci-dessous"
|
40 |
-
|
41 |
"Tracking URL","URL de suivi"
|
42 |
"Debug","Debug"
|
43 |
"Stop to first match","Arrêt à la première correspondance trouvée"
|
44 |
"Chronorelais Shipping module","Module Chronorelais Shipping"
|
45 |
"Weight unit","Unité de poids"
|
46 |
"Auto Price","Prix automatique"
|
|
|
|
|
47 |
|
48 |
# OCSEditor
|
49 |
# Wecom_Chronorelais_Block_Adminhtml_System_Config_Form_Field_Config
|
31 |
"Minimum Amount for Free Shipping","Montant minimum pour livraison gratuite"
|
32 |
"Semicolon","Point virgule"
|
33 |
"Comma","Virgule"
|
|
|
34 |
"Configuration","Configuration"
|
35 |
"{configuration_syntax_help}","<a href='http://www.magentocommerce.com/boards/viewthread/37860/' target='_blank'>Aide</a>"
|
36 |
"{debug_help}","0 = aucun, 1 = minimum, 10 = complet"
|
37 |
"{logo_ulr_help}","Upload the logo image to the given skin folder. skin/frontend/[your package name]/[your skin name]/chronorelais/"
|
38 |
"No : cost is obtained from your rate grid ; Yes : cost is fetched from URL below";"Non : le prix est calculé grâce à votre grille tarifaire ; Oui : le prix est calculé via le webservice ci-dessous"
|
|
|
39 |
"Tracking URL","URL de suivi"
|
40 |
"Debug","Debug"
|
41 |
"Stop to first match","Arrêt à la première correspondance trouvée"
|
42 |
"Chronorelais Shipping module","Module Chronorelais Shipping"
|
43 |
"Weight unit","Unité de poids"
|
44 |
"Auto Price","Prix automatique"
|
45 |
+
# Version 0.3.0
|
46 |
+
"The Google Maps JavaScript API Version 2 has been officially deprecated. Please use v3 API now. Get your key at https://code.google.com/apis/console/.","L'API Google Maps JavaScript Version 2 a été officiellement dépréciée. Vous devez utiliser l'API v3 désormais. Obtenez votre clef d'API sur https://code.google.com/apis/console/."
|
47 |
|
48 |
# OCSEditor
|
49 |
# Wecom_Chronorelais_Block_Adminhtml_System_Config_Form_Field_Config
|
js/chronopost/chronorelais/ocseditor.css
CHANGED
@@ -1,465 +1,465 @@
|
|
1 |
-
#ocs-editor #ocs-editor-config-loader {
|
2 |
-
padding: 5px;
|
3 |
-
border: solid 1px #6f8992;
|
4 |
-
background: #e7efef;
|
5 |
-
display: none;
|
6 |
-
}
|
7 |
-
|
8 |
-
#ocs-editor #ocs-editor-config-loader textarea {
|
9 |
-
height: 100px;
|
10 |
-
}
|
11 |
-
|
12 |
-
#ocs-editor #os-config-helper {
|
13 |
-
}
|
14 |
-
#ocs-editor .buttons-set-label {
|
15 |
-
padding: 2px 10px 2px 0;
|
16 |
-
display: inline-block;
|
17 |
-
font-weight: bold;
|
18 |
-
}
|
19 |
-
#ocs-editor div.buttons-set {
|
20 |
-
padding: 0;
|
21 |
-
margin: 2px 0;
|
22 |
-
}
|
23 |
-
#ocs-editor fieldset {
|
24 |
-
display: block;
|
25 |
-
border: solid 1px #6f8992;
|
26 |
-
margin: 2px 0;
|
27 |
-
padding: 0 8px 2px 8px;
|
28 |
-
}
|
29 |
-
#ocs-editor fieldset.buttons-set {
|
30 |
-
margin: 2px 0;
|
31 |
-
}
|
32 |
-
#ocs-editor legend {
|
33 |
-
display: inline;
|
34 |
-
font-weight: bold;
|
35 |
-
margin-left: 15px;
|
36 |
-
padding: 0 5px;
|
37 |
-
}
|
38 |
-
|
39 |
-
#ocs-editor .config-container {
|
40 |
-
border-top: solid 1px #6f8992;
|
41 |
-
}
|
42 |
-
|
43 |
-
#ocs-editor .properties-container {
|
44 |
-
position: relative;
|
45 |
-
display: none;
|
46 |
-
}
|
47 |
-
|
48 |
-
#ocs-editor .row-container.selected .properties-container {
|
49 |
-
display: block;
|
50 |
-
background: #d1dedf;
|
51 |
-
}
|
52 |
-
|
53 |
-
#ocs-editor .row-container.has-error .properties-container {
|
54 |
-
background: #f3c6c6;
|
55 |
-
}
|
56 |
-
|
57 |
-
#ocs-editor .properties-list {
|
58 |
-
position: relative;
|
59 |
-
height: 350px;
|
60 |
-
list-style: none;
|
61 |
-
width: 20%;
|
62 |
-
z-index: 2;
|
63 |
-
padding: 5px 0;
|
64 |
-
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
|
65 |
-
-khtml-box-sizing: border-box;
|
66 |
-
-moz-box-sizing: border-box; /* Firefox, other Gecko */
|
67 |
-
box-sizing: border-box; /* Opera/IE 8+ */
|
68 |
-
}
|
69 |
-
|
70 |
-
#ocs-editor .properties-list li {
|
71 |
-
margin-left: 10px;
|
72 |
-
padding: 5px 0;
|
73 |
-
cursor: pointer;
|
74 |
-
font-weight: bold;
|
75 |
-
}
|
76 |
-
|
77 |
-
#ocs-editor .properties-list li.selected {
|
78 |
-
font-weight: bold;
|
79 |
-
border-left: solid 1px #6f8992;
|
80 |
-
border-top: solid 1px #6f8992;
|
81 |
-
border-bottom: solid 1px #6f8992;
|
82 |
-
background: #e7efef;
|
83 |
-
padding: 7px 10px;
|
84 |
-
position: relative;
|
85 |
-
left: 1px;
|
86 |
-
}
|
87 |
-
|
88 |
-
#ocs-editor .row-container.has-error .properties-list li.selected {
|
89 |
-
border-color: #af2c2c;
|
90 |
-
background: #f7e8e8;
|
91 |
-
}
|
92 |
-
|
93 |
-
#ocs-editor .properties-list li.has-error {
|
94 |
-
font-weight: bold;
|
95 |
-
color: #d40707;
|
96 |
-
}
|
97 |
-
|
98 |
-
#ocs-editor .properties-list li.empty {
|
99 |
-
font-weight: normal;
|
100 |
-
-webkit-opacity: 0.8;
|
101 |
-
-khtml-opacity: 0.8;
|
102 |
-
-moz-opacity: 0.8;
|
103 |
-
opacity: 0.8;
|
104 |
-
}
|
105 |
-
|
106 |
-
#ocs-editor .properties-list li.hide {
|
107 |
-
display: none;
|
108 |
-
}
|
109 |
-
|
110 |
-
#ocs-editor .property-container {
|
111 |
-
position: absolute;
|
112 |
-
top: 0;
|
113 |
-
right: 0;
|
114 |
-
height: 350px;
|
115 |
-
overflow: auto;
|
116 |
-
width: 80%;
|
117 |
-
padding: 8px;
|
118 |
-
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
|
119 |
-
-khtml-box-sizing: border-box;
|
120 |
-
-moz-box-sizing: border-box; /* Firefox, other Gecko */
|
121 |
-
box-sizing: border-box; /* Opera/IE 8+ */
|
122 |
-
display: none;
|
123 |
-
border-left: solid 1px #6f8992;
|
124 |
-
background: #e7efef;
|
125 |
-
z-index: 1;
|
126 |
-
}
|
127 |
-
|
128 |
-
#ocs-editor .property-container.selected {
|
129 |
-
display: block;
|
130 |
-
}
|
131 |
-
|
132 |
-
#ocs-editor .row-container.has-error .property-container {
|
133 |
-
border-color: #af2c2c;
|
134 |
-
background: #f7e8e8;
|
135 |
-
}
|
136 |
-
|
137 |
-
#ocs-editor .row-header {
|
138 |
-
padding: 3px;
|
139 |
-
background: #d1dedf;
|
140 |
-
color: #6f8992;
|
141 |
-
}
|
142 |
-
|
143 |
-
#ocs-editor .row-header .error {
|
144 |
-
padding: 0 10px;
|
145 |
-
}
|
146 |
-
|
147 |
-
#ocs-editor .row-container.selected .row-header .error {
|
148 |
-
color: #fff !important;
|
149 |
-
}
|
150 |
-
|
151 |
-
#ocs-editor .row-title {
|
152 |
-
padding: 2px 9px;
|
153 |
-
cursor: pointer;
|
154 |
-
font-weight: bold;
|
155 |
-
font-size: 1.3em;
|
156 |
-
}
|
157 |
-
|
158 |
-
#ocs-editor .row-actions {
|
159 |
-
float: right;
|
160 |
-
opacity: 0.7;
|
161 |
-
-moz-opacity: 0.7;
|
162 |
-
-webkit-opacity: 0.7;
|
163 |
-
-khtml-opacity: 0.7;
|
164 |
-
}
|
165 |
-
#ocs-editor .row-actions button {
|
166 |
-
margin-left: 5px;
|
167 |
-
}
|
168 |
-
|
169 |
-
#ocs-editor .row-container {
|
170 |
-
border: solid 1px #6f8992;
|
171 |
-
border-top: 0;
|
172 |
-
}
|
173 |
-
|
174 |
-
#ocs-editor .row-container.selected .row-header {
|
175 |
-
background: #6f8992;
|
176 |
-
color: #fff;
|
177 |
-
}
|
178 |
-
|
179 |
-
#ocs-editor .row-container.selected .row-actions {
|
180 |
-
opacity: 1;
|
181 |
-
-moz-opacity: 1;
|
182 |
-
-webkit-opacity: 1;
|
183 |
-
-khtml-opacity: 1;
|
184 |
-
}
|
185 |
-
|
186 |
-
#ocs-editor .row-container.has-error {
|
187 |
-
border: solid 1px #af2c2c;
|
188 |
-
}
|
189 |
-
|
190 |
-
#ocs-editor .row-container.has-error .row-header {
|
191 |
-
background: #f3c6c6;
|
192 |
-
color: #af2c2c;
|
193 |
-
}
|
194 |
-
|
195 |
-
#ocs-editor .row-container.selected.has-error .row-header {
|
196 |
-
background: #af2c2c;
|
197 |
-
color: #fff;
|
198 |
-
}
|
199 |
-
|
200 |
-
#ocs-editor textarea {
|
201 |
-
border: 0;
|
202 |
-
background: #fff;
|
203 |
-
display: block;
|
204 |
-
overflow: visible;
|
205 |
-
width: 100%;
|
206 |
-
height: auto;
|
207 |
-
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
|
208 |
-
-moz-box-sizing: border-box; /* Firefox, other Gecko */
|
209 |
-
-khtml-box-sizing: border-box;
|
210 |
-
box-sizing: border-box; /* Opera/IE 8+ */
|
211 |
-
padding: 2px 0 2px 5px;
|
212 |
-
}
|
213 |
-
|
214 |
-
#ocs-editor .row-container textarea {
|
215 |
-
height: 100px;
|
216 |
-
}
|
217 |
-
|
218 |
-
#ocs-editor .field-container{
|
219 |
-
background: #666;
|
220 |
-
padding: 2px;
|
221 |
-
}
|
222 |
-
|
223 |
-
#ocs-editor .address-filter-list {
|
224 |
-
font-size: 0.9em;
|
225 |
-
padding: 2px 0 5px 0;
|
226 |
-
line-height: normal;
|
227 |
-
}
|
228 |
-
|
229 |
-
#ocs-editor .address-filter {
|
230 |
-
display: inline-block;
|
231 |
-
padding: 2px 7px;
|
232 |
-
margin: 1px;
|
233 |
-
cursor: pointer;
|
234 |
-
-webkit-border-radius: 5px;
|
235 |
-
-khtml-border-radius: 5px;
|
236 |
-
-moz-border-radius: 5px;
|
237 |
-
border-radius: 5px;
|
238 |
-
}
|
239 |
-
|
240 |
-
#ocs-editor .address-filter-group-label {
|
241 |
-
padding: 2px 7px;
|
242 |
-
margin: 1px;
|
243 |
-
cursor: pointer;
|
244 |
-
border: solid 1px #6f8992;
|
245 |
-
background: #6f8992;
|
246 |
-
display: inline-block;
|
247 |
-
}
|
248 |
-
|
249 |
-
#ocs-editor .address-filter-group {
|
250 |
-
padding: 2px;
|
251 |
-
color: #fff;
|
252 |
-
border: 0;
|
253 |
-
background: #6f8992;
|
254 |
-
display: block;
|
255 |
-
}
|
256 |
-
|
257 |
-
#ocs-editor .address-filter.known {
|
258 |
-
color: #000;
|
259 |
-
border: solid 1px #000;
|
260 |
-
background: #7f0;
|
261 |
-
}
|
262 |
-
|
263 |
-
#ocs-editor .address-filter.soft-cleaned {
|
264 |
-
/*color: #000;
|
265 |
-
border: solid 1px #000;
|
266 |
-
background: #f90;*/
|
267 |
-
}
|
268 |
-
|
269 |
-
#ocs-editor .address-filter.hard-cleaned {
|
270 |
-
color: #000;
|
271 |
-
border: solid 1px #000;
|
272 |
-
background: #f90;
|
273 |
-
}
|
274 |
-
|
275 |
-
#ocs-editor .address-filter.replaced {
|
276 |
-
color: #000;
|
277 |
-
border: solid 1px #000;
|
278 |
-
background: #f90;
|
279 |
-
}
|
280 |
-
|
281 |
-
#ocs-editor .address-filter.warning {
|
282 |
-
color: #000;
|
283 |
-
border: solid 1px #000;
|
284 |
-
background: #f90;
|
285 |
-
}
|
286 |
-
|
287 |
-
#ocs-editor .address-filter.unknown {
|
288 |
-
color: #000;
|
289 |
-
border: solid 1px #000;
|
290 |
-
background: #f00;
|
291 |
-
font-weight: bold;
|
292 |
-
}
|
293 |
-
#ocs-editor .address-filter.error {
|
294 |
-
color: #f00;
|
295 |
-
border: solid 1px #f00;
|
296 |
-
background: #dcc;
|
297 |
-
font-weight: bold;
|
298 |
-
}
|
299 |
-
|
300 |
-
#ocs-editor .bad {
|
301 |
-
text-decoration: line-through;
|
302 |
-
}
|
303 |
-
|
304 |
-
#ocs-editor .donate-container {
|
305 |
-
position: absolute;
|
306 |
-
bottom: 0;
|
307 |
-
border-top: solid 4px #dfdfdf;
|
308 |
-
padding: 0.25em 0 0 0;
|
309 |
-
width: 100%;
|
310 |
-
color: #eb5e00;
|
311 |
-
font-size: 1.25em;
|
312 |
-
font-weight: bold;
|
313 |
-
background: #fff;
|
314 |
-
}
|
315 |
-
#ocs-editor .donate-container table {
|
316 |
-
width: 100%;
|
317 |
-
}
|
318 |
-
|
319 |
-
#ocs-editor .donate-container .form-buttons {
|
320 |
-
text-align: right;
|
321 |
-
margin-bottom: 0;
|
322 |
-
white-space: nowrap;
|
323 |
-
}
|
324 |
-
|
325 |
-
#ocs-editor .ocseditor-page {
|
326 |
-
position: absolute;
|
327 |
-
top: 0;
|
328 |
-
left: 0;
|
329 |
-
width: 100%;
|
330 |
-
height: 100%;
|
331 |
-
z-index: 300;
|
332 |
-
display: none;
|
333 |
-
background: #fff;
|
334 |
-
}
|
335 |
-
|
336 |
-
#ocs-editor .owebia-address {
|
337 |
-
padding-left: 50px;
|
338 |
-
font-family: monospace;
|
339 |
-
}
|
340 |
-
|
341 |
-
#ocs-contextual-menu {
|
342 |
-
-webkit-box-shadow: 2px 2px 5px #000;
|
343 |
-
-khtml-box-shadow: 2px 2px 5px #000;
|
344 |
-
-moz-box-shadow: 2px 2px 5px #000;
|
345 |
-
box-shadow: 2px 2px 5px #000;
|
346 |
-
background: #d1dedf;
|
347 |
-
list-style: none;
|
348 |
-
margin: 0;
|
349 |
-
display: none;
|
350 |
-
border: solid 1px #6f8992;
|
351 |
-
padding-bottom: 1px;
|
352 |
-
}
|
353 |
-
#ocs-contextual-menu li {
|
354 |
-
font-size: 0.9em;
|
355 |
-
}
|
356 |
-
|
357 |
-
#ocs-contextual-menu a {
|
358 |
-
padding: 3px 7px;
|
359 |
-
display: block;
|
360 |
-
color: #000;
|
361 |
-
text-decoration: none;
|
362 |
-
}
|
363 |
-
|
364 |
-
#ocs-contextual-menu a:hover {
|
365 |
-
background: #6f8992;
|
366 |
-
color: #fff;
|
367 |
-
}
|
368 |
-
|
369 |
-
#ocs-contextual-menu span {
|
370 |
-
padding: 2px 7px;
|
371 |
-
display: block;
|
372 |
-
color: #000;
|
373 |
-
border-bottom: solid 1px #6f8992;
|
374 |
-
font-weight: bold;
|
375 |
-
margin-bottom: 1px;
|
376 |
-
}
|
377 |
-
|
378 |
-
#ocs-editor .ocseditor-page .code {
|
379 |
-
font-family: monospace;
|
380 |
-
word-wrap: break-word;
|
381 |
-
}
|
382 |
-
#ocs-editor .ocseditor-page div.code {
|
383 |
-
background-color: #efe8de;
|
384 |
-
border: solid 1px #5c5248;
|
385 |
-
border-left: solid 3px #5c5248;
|
386 |
-
padding: 10px 5px;
|
387 |
-
overflow: auto;
|
388 |
-
}
|
389 |
-
#ocs-editor .ocseditor-page span.code {
|
390 |
-
padding: 0 3px;
|
391 |
-
color: #522;
|
392 |
-
font-weight: bold;
|
393 |
-
}
|
394 |
-
#ocs-editor .ocseditor-page .code .comment {
|
395 |
-
color: #666;
|
396 |
-
}
|
397 |
-
#ocs-editor .ocseditor-page .code .string {
|
398 |
-
color: #009f00;
|
399 |
-
}
|
400 |
-
#ocs-editor .ocseditor-page p {
|
401 |
-
margin: 7px 0;
|
402 |
-
}
|
403 |
-
|
404 |
-
#ocs-editor .ocseditor-page ul {
|
405 |
-
margin: 0 0 15px 20px;
|
406 |
-
list-style: disc;
|
407 |
-
}
|
408 |
-
|
409 |
-
#ocs-editor .ocseditor-page h4 {
|
410 |
-
padding: 0 0 2px 0;
|
411 |
-
margin: 0;
|
412 |
-
border-bottom: solid 1px #dfdfdf;
|
413 |
-
}
|
414 |
-
#ocs-editor .tips {
|
415 |
-
background: #ffdb6f;
|
416 |
-
padding: 3px 10px;
|
417 |
-
margin: 10px 0;
|
418 |
-
}
|
419 |
-
#ocs-editor .tips p {
|
420 |
-
margin: 4px 0;
|
421 |
-
}
|
422 |
-
#ocs-editor .help-header, #ocs-editor .help-footer {
|
423 |
-
background: #d1dedf;
|
424 |
-
padding: 3px 10px;
|
425 |
-
margin: 0 0 10px 0;
|
426 |
-
}
|
427 |
-
#ocs-editor .help-footer {
|
428 |
-
margin: 10px 0 0 0;
|
429 |
-
}
|
430 |
-
#ocs-editor .help-header p, #ocs-editor .help-footer p {
|
431 |
-
margin: 4px 0;
|
432 |
-
}
|
433 |
-
#ocs-editor .help-header a, #ocs-editor .help-footer a {
|
434 |
-
color: #444;
|
435 |
-
}
|
436 |
-
#ocs-editor .ocseditor-page .new {
|
437 |
-
color: #0221a9;
|
438 |
-
}
|
439 |
-
#ocs-editor .table-of-contents {
|
440 |
-
margin: 15px 0;
|
441 |
-
padding: 15px;
|
442 |
-
background-color: #d1dedf;
|
443 |
-
}
|
444 |
-
#ocs-editor .table-of-contents ul {
|
445 |
-
padding: 0;
|
446 |
-
margin: 0;
|
447 |
-
list-style: none;
|
448 |
-
}
|
449 |
-
#ocs-editor .table-of-contents ul ul {
|
450 |
-
margin: 3px 0 5px 15px;
|
451 |
-
}
|
452 |
-
#ocs-editor .table-of-contents li {
|
453 |
-
padding: 2px 0;
|
454 |
-
margin: 0;
|
455 |
-
}
|
456 |
-
#ocs-editor .table-of-contents a {
|
457 |
-
color: #444;
|
458 |
-
}
|
459 |
-
#ocs-editor .table-of-contents li.new a {
|
460 |
-
color: #0221a9;
|
461 |
-
font-weight: bold;
|
462 |
-
}
|
463 |
-
#ocs-editor .table-of-contents a.deprecated {
|
464 |
-
color: #8f6e47;
|
465 |
-
}
|
1 |
+
#ocs-editor #ocs-editor-config-loader {
|
2 |
+
padding: 5px;
|
3 |
+
border: solid 1px #6f8992;
|
4 |
+
background: #e7efef;
|
5 |
+
display: none;
|
6 |
+
}
|
7 |
+
|
8 |
+
#ocs-editor #ocs-editor-config-loader textarea {
|
9 |
+
height: 100px;
|
10 |
+
}
|
11 |
+
|
12 |
+
#ocs-editor #os-config-helper {
|
13 |
+
}
|
14 |
+
#ocs-editor .buttons-set-label {
|
15 |
+
padding: 2px 10px 2px 0;
|
16 |
+
display: inline-block;
|
17 |
+
font-weight: bold;
|
18 |
+
}
|
19 |
+
#ocs-editor div.buttons-set {
|
20 |
+
padding: 0;
|
21 |
+
margin: 2px 0;
|
22 |
+
}
|
23 |
+
#ocs-editor fieldset {
|
24 |
+
display: block;
|
25 |
+
border: solid 1px #6f8992;
|
26 |
+
margin: 2px 0;
|
27 |
+
padding: 0 8px 2px 8px;
|
28 |
+
}
|
29 |
+
#ocs-editor fieldset.buttons-set {
|
30 |
+
margin: 2px 0;
|
31 |
+
}
|
32 |
+
#ocs-editor legend {
|
33 |
+
display: inline;
|
34 |
+
font-weight: bold;
|
35 |
+
margin-left: 15px;
|
36 |
+
padding: 0 5px;
|
37 |
+
}
|
38 |
+
|
39 |
+
#ocs-editor .config-container {
|
40 |
+
border-top: solid 1px #6f8992;
|
41 |
+
}
|
42 |
+
|
43 |
+
#ocs-editor .properties-container {
|
44 |
+
position: relative;
|
45 |
+
display: none;
|
46 |
+
}
|
47 |
+
|
48 |
+
#ocs-editor .row-container.selected .properties-container {
|
49 |
+
display: block;
|
50 |
+
background: #d1dedf;
|
51 |
+
}
|
52 |
+
|
53 |
+
#ocs-editor .row-container.has-error .properties-container {
|
54 |
+
background: #f3c6c6;
|
55 |
+
}
|
56 |
+
|
57 |
+
#ocs-editor .properties-list {
|
58 |
+
position: relative;
|
59 |
+
height: 350px;
|
60 |
+
list-style: none;
|
61 |
+
width: 20%;
|
62 |
+
z-index: 2;
|
63 |
+
padding: 5px 0;
|
64 |
+
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
|
65 |
+
-khtml-box-sizing: border-box;
|
66 |
+
-moz-box-sizing: border-box; /* Firefox, other Gecko */
|
67 |
+
box-sizing: border-box; /* Opera/IE 8+ */
|
68 |
+
}
|
69 |
+
|
70 |
+
#ocs-editor .properties-list li {
|
71 |
+
margin-left: 10px;
|
72 |
+
padding: 5px 0;
|
73 |
+
cursor: pointer;
|
74 |
+
font-weight: bold;
|
75 |
+
}
|
76 |
+
|
77 |
+
#ocs-editor .properties-list li.selected {
|
78 |
+
font-weight: bold;
|
79 |
+
border-left: solid 1px #6f8992;
|
80 |
+
border-top: solid 1px #6f8992;
|
81 |
+
border-bottom: solid 1px #6f8992;
|
82 |
+
background: #e7efef;
|
83 |
+
padding: 7px 10px;
|
84 |
+
position: relative;
|
85 |
+
left: 1px;
|
86 |
+
}
|
87 |
+
|
88 |
+
#ocs-editor .row-container.has-error .properties-list li.selected {
|
89 |
+
border-color: #af2c2c;
|
90 |
+
background: #f7e8e8;
|
91 |
+
}
|
92 |
+
|
93 |
+
#ocs-editor .properties-list li.has-error {
|
94 |
+
font-weight: bold;
|
95 |
+
color: #d40707;
|
96 |
+
}
|
97 |
+
|
98 |
+
#ocs-editor .properties-list li.empty {
|
99 |
+
font-weight: normal;
|
100 |
+
-webkit-opacity: 0.8;
|
101 |
+
-khtml-opacity: 0.8;
|
102 |
+
-moz-opacity: 0.8;
|
103 |
+
opacity: 0.8;
|
104 |
+
}
|
105 |
+
|
106 |
+
#ocs-editor .properties-list li.hide {
|
107 |
+
display: none;
|
108 |
+
}
|
109 |
+
|
110 |
+
#ocs-editor .property-container {
|
111 |
+
position: absolute;
|
112 |
+
top: 0;
|
113 |
+
right: 0;
|
114 |
+
height: 350px;
|
115 |
+
overflow: auto;
|
116 |
+
width: 80%;
|
117 |
+
padding: 8px;
|
118 |
+
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
|
119 |
+
-khtml-box-sizing: border-box;
|
120 |
+
-moz-box-sizing: border-box; /* Firefox, other Gecko */
|
121 |
+
box-sizing: border-box; /* Opera/IE 8+ */
|
122 |
+
display: none;
|
123 |
+
border-left: solid 1px #6f8992;
|
124 |
+
background: #e7efef;
|
125 |
+
z-index: 1;
|
126 |
+
}
|
127 |
+
|
128 |
+
#ocs-editor .property-container.selected {
|
129 |
+
display: block;
|
130 |
+
}
|
131 |
+
|
132 |
+
#ocs-editor .row-container.has-error .property-container {
|
133 |
+
border-color: #af2c2c;
|
134 |
+
background: #f7e8e8;
|
135 |
+
}
|
136 |
+
|
137 |
+
#ocs-editor .row-header {
|
138 |
+
padding: 3px;
|
139 |
+
background: #d1dedf;
|
140 |
+
color: #6f8992;
|
141 |
+
}
|
142 |
+
|
143 |
+
#ocs-editor .row-header .error {
|
144 |
+
padding: 0 10px;
|
145 |
+
}
|
146 |
+
|
147 |
+
#ocs-editor .row-container.selected .row-header .error {
|
148 |
+
color: #fff !important;
|
149 |
+
}
|
150 |
+
|
151 |
+
#ocs-editor .row-title {
|
152 |
+
padding: 2px 9px;
|
153 |
+
cursor: pointer;
|
154 |
+
font-weight: bold;
|
155 |
+
font-size: 1.3em;
|
156 |
+
}
|
157 |
+
|
158 |
+
#ocs-editor .row-actions {
|
159 |
+
float: right;
|
160 |
+
opacity: 0.7;
|
161 |
+
-moz-opacity: 0.7;
|
162 |
+
-webkit-opacity: 0.7;
|
163 |
+
-khtml-opacity: 0.7;
|
164 |
+
}
|
165 |
+
#ocs-editor .row-actions button {
|
166 |
+
margin-left: 5px;
|
167 |
+
}
|
168 |
+
|
169 |
+
#ocs-editor .row-container {
|
170 |
+
border: solid 1px #6f8992;
|
171 |
+
border-top: 0;
|
172 |
+
}
|
173 |
+
|
174 |
+
#ocs-editor .row-container.selected .row-header {
|
175 |
+
background: #6f8992;
|
176 |
+
color: #fff;
|
177 |
+
}
|
178 |
+
|
179 |
+
#ocs-editor .row-container.selected .row-actions {
|
180 |
+
opacity: 1;
|
181 |
+
-moz-opacity: 1;
|
182 |
+
-webkit-opacity: 1;
|
183 |
+
-khtml-opacity: 1;
|
184 |
+
}
|
185 |
+
|
186 |
+
#ocs-editor .row-container.has-error {
|
187 |
+
border: solid 1px #af2c2c;
|
188 |
+
}
|
189 |
+
|
190 |
+
#ocs-editor .row-container.has-error .row-header {
|
191 |
+
background: #f3c6c6;
|
192 |
+
color: #af2c2c;
|
193 |
+
}
|
194 |
+
|
195 |
+
#ocs-editor .row-container.selected.has-error .row-header {
|
196 |
+
background: #af2c2c;
|
197 |
+
color: #fff;
|
198 |
+
}
|
199 |
+
|
200 |
+
#ocs-editor textarea {
|
201 |
+
border: 0;
|
202 |
+
background: #fff;
|
203 |
+
display: block;
|
204 |
+
overflow: visible;
|
205 |
+
width: 100%;
|
206 |
+
height: auto;
|
207 |
+
-webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
|
208 |
+
-moz-box-sizing: border-box; /* Firefox, other Gecko */
|
209 |
+
-khtml-box-sizing: border-box;
|
210 |
+
box-sizing: border-box; /* Opera/IE 8+ */
|
211 |
+
padding: 2px 0 2px 5px;
|
212 |
+
}
|
213 |
+
|
214 |
+
#ocs-editor .row-container textarea {
|
215 |
+
height: 100px;
|
216 |
+
}
|
217 |
+
|
218 |
+
#ocs-editor .field-container{
|
219 |
+
background: #666;
|
220 |
+
padding: 2px;
|
221 |
+
}
|
222 |
+
|
223 |
+
#ocs-editor .address-filter-list {
|
224 |
+
font-size: 0.9em;
|
225 |
+
padding: 2px 0 5px 0;
|
226 |
+
line-height: normal;
|
227 |
+
}
|
228 |
+
|
229 |
+
#ocs-editor .address-filter {
|
230 |
+
display: inline-block;
|
231 |
+
padding: 2px 7px;
|
232 |
+
margin: 1px;
|
233 |
+
cursor: pointer;
|
234 |
+
-webkit-border-radius: 5px;
|
235 |
+
-khtml-border-radius: 5px;
|
236 |
+
-moz-border-radius: 5px;
|
237 |
+
border-radius: 5px;
|
238 |
+
}
|
239 |
+
|
240 |
+
#ocs-editor .address-filter-group-label {
|
241 |
+
padding: 2px 7px;
|
242 |
+
margin: 1px;
|
243 |
+
cursor: pointer;
|
244 |
+
border: solid 1px #6f8992;
|
245 |
+
background: #6f8992;
|
246 |
+
display: inline-block;
|
247 |
+
}
|
248 |
+
|
249 |
+
#ocs-editor .address-filter-group {
|
250 |
+
padding: 2px;
|
251 |
+
color: #fff;
|
252 |
+
border: 0;
|
253 |
+
background: #6f8992;
|
254 |
+
display: block;
|
255 |
+
}
|
256 |
+
|
257 |
+
#ocs-editor .address-filter.known {
|
258 |
+
color: #000;
|
259 |
+
border: solid 1px #000;
|
260 |
+
background: #7f0;
|
261 |
+
}
|
262 |
+
|
263 |
+
#ocs-editor .address-filter.soft-cleaned {
|
264 |
+
/*color: #000;
|
265 |
+
border: solid 1px #000;
|
266 |
+
background: #f90;*/
|
267 |
+
}
|
268 |
+
|
269 |
+
#ocs-editor .address-filter.hard-cleaned {
|
270 |
+
color: #000;
|
271 |
+
border: solid 1px #000;
|
272 |
+
background: #f90;
|
273 |
+
}
|
274 |
+
|
275 |
+
#ocs-editor .address-filter.replaced {
|
276 |
+
color: #000;
|
277 |
+
border: solid 1px #000;
|
278 |
+
background: #f90;
|
279 |
+
}
|
280 |
+
|
281 |
+
#ocs-editor .address-filter.warning {
|
282 |
+
color: #000;
|
283 |
+
border: solid 1px #000;
|
284 |
+
background: #f90;
|
285 |
+
}
|
286 |
+
|
287 |
+
#ocs-editor .address-filter.unknown {
|
288 |
+
color: #000;
|
289 |
+
border: solid 1px #000;
|
290 |
+
background: #f00;
|
291 |
+
font-weight: bold;
|
292 |
+
}
|
293 |
+
#ocs-editor .address-filter.error {
|
294 |
+
color: #f00;
|
295 |
+
border: solid 1px #f00;
|
296 |
+
background: #dcc;
|
297 |
+
font-weight: bold;
|
298 |
+
}
|
299 |
+
|
300 |
+
#ocs-editor .bad {
|
301 |
+
text-decoration: line-through;
|
302 |
+
}
|
303 |
+
|
304 |
+
#ocs-editor .donate-container {
|
305 |
+
position: absolute;
|
306 |
+
bottom: 0;
|
307 |
+
border-top: solid 4px #dfdfdf;
|
308 |
+
padding: 0.25em 0 0 0;
|
309 |
+
width: 100%;
|
310 |
+
color: #eb5e00;
|
311 |
+
font-size: 1.25em;
|
312 |
+
font-weight: bold;
|
313 |
+
background: #fff;
|
314 |
+
}
|
315 |
+
#ocs-editor .donate-container table {
|
316 |
+
width: 100%;
|
317 |
+
}
|
318 |
+
|
319 |
+
#ocs-editor .donate-container .form-buttons {
|
320 |
+
text-align: right;
|
321 |
+
margin-bottom: 0;
|
322 |
+
white-space: nowrap;
|
323 |
+
}
|
324 |
+
|
325 |
+
#ocs-editor .ocseditor-page {
|
326 |
+
position: absolute;
|
327 |
+
top: 0;
|
328 |
+
left: 0;
|
329 |
+
width: 100%;
|
330 |
+
height: 100%;
|
331 |
+
z-index: 300;
|
332 |
+
display: none;
|
333 |
+
background: #fff;
|
334 |
+
}
|
335 |
+
|
336 |
+
#ocs-editor .owebia-address {
|
337 |
+
padding-left: 50px;
|
338 |
+
font-family: monospace;
|
339 |
+
}
|
340 |
+
|
341 |
+
#ocs-contextual-menu {
|
342 |
+
-webkit-box-shadow: 2px 2px 5px #000;
|
343 |
+
-khtml-box-shadow: 2px 2px 5px #000;
|
344 |
+
-moz-box-shadow: 2px 2px 5px #000;
|
345 |
+
box-shadow: 2px 2px 5px #000;
|
346 |
+
background: #d1dedf;
|
347 |
+
list-style: none;
|
348 |
+
margin: 0;
|
349 |
+
display: none;
|
350 |
+
border: solid 1px #6f8992;
|
351 |
+
padding-bottom: 1px;
|
352 |
+
}
|
353 |
+
#ocs-contextual-menu li {
|
354 |
+
font-size: 0.9em;
|
355 |
+
}
|
356 |
+
|
357 |
+
#ocs-contextual-menu a {
|
358 |
+
padding: 3px 7px;
|
359 |
+
display: block;
|
360 |
+
color: #000;
|
361 |
+
text-decoration: none;
|
362 |
+
}
|
363 |
+
|
364 |
+
#ocs-contextual-menu a:hover {
|
365 |
+
background: #6f8992;
|
366 |
+
color: #fff;
|
367 |
+
}
|
368 |
+
|
369 |
+
#ocs-contextual-menu span {
|
370 |
+
padding: 2px 7px;
|
371 |
+
display: block;
|
372 |
+
color: #000;
|
373 |
+
border-bottom: solid 1px #6f8992;
|
374 |
+
font-weight: bold;
|
375 |
+
margin-bottom: 1px;
|
376 |
+
}
|
377 |
+
|
378 |
+
#ocs-editor .ocseditor-page .code {
|
379 |
+
font-family: monospace;
|
380 |
+
word-wrap: break-word;
|
381 |
+
}
|
382 |
+
#ocs-editor .ocseditor-page div.code {
|
383 |
+
background-color: #efe8de;
|
384 |
+
border: solid 1px #5c5248;
|
385 |
+
border-left: solid 3px #5c5248;
|
386 |
+
padding: 10px 5px;
|
387 |
+
overflow: auto;
|
388 |
+
}
|
389 |
+
#ocs-editor .ocseditor-page span.code {
|
390 |
+
padding: 0 3px;
|
391 |
+
color: #522;
|
392 |
+
font-weight: bold;
|
393 |
+
}
|
394 |
+
#ocs-editor .ocseditor-page .code .comment {
|
395 |
+
color: #666;
|
396 |
+
}
|
397 |
+
#ocs-editor .ocseditor-page .code .string {
|
398 |
+
color: #009f00;
|
399 |
+
}
|
400 |
+
#ocs-editor .ocseditor-page p {
|
401 |
+
margin: 7px 0;
|
402 |
+
}
|
403 |
+
|
404 |
+
#ocs-editor .ocseditor-page ul {
|
405 |
+
margin: 0 0 15px 20px;
|
406 |
+
list-style: disc;
|
407 |
+
}
|
408 |
+
|
409 |
+
#ocs-editor .ocseditor-page h4 {
|
410 |
+
padding: 0 0 2px 0;
|
411 |
+
margin: 0;
|
412 |
+
border-bottom: solid 1px #dfdfdf;
|
413 |
+
}
|
414 |
+
#ocs-editor .tips {
|
415 |
+
background: #ffdb6f;
|
416 |
+
padding: 3px 10px;
|
417 |
+
margin: 10px 0;
|
418 |
+
}
|
419 |
+
#ocs-editor .tips p {
|
420 |
+
margin: 4px 0;
|
421 |
+
}
|
422 |
+
#ocs-editor .help-header, #ocs-editor .help-footer {
|
423 |
+
background: #d1dedf;
|
424 |
+
padding: 3px 10px;
|
425 |
+
margin: 0 0 10px 0;
|
426 |
+
}
|
427 |
+
#ocs-editor .help-footer {
|
428 |
+
margin: 10px 0 0 0;
|
429 |
+
}
|
430 |
+
#ocs-editor .help-header p, #ocs-editor .help-footer p {
|
431 |
+
margin: 4px 0;
|
432 |
+
}
|
433 |
+
#ocs-editor .help-header a, #ocs-editor .help-footer a {
|
434 |
+
color: #444;
|
435 |
+
}
|
436 |
+
#ocs-editor .ocseditor-page .new {
|
437 |
+
color: #0221a9;
|
438 |
+
}
|
439 |
+
#ocs-editor .table-of-contents {
|
440 |
+
margin: 15px 0;
|
441 |
+
padding: 15px;
|
442 |
+
background-color: #d1dedf;
|
443 |
+
}
|
444 |
+
#ocs-editor .table-of-contents ul {
|
445 |
+
padding: 0;
|
446 |
+
margin: 0;
|
447 |
+
list-style: none;
|
448 |
+
}
|
449 |
+
#ocs-editor .table-of-contents ul ul {
|
450 |
+
margin: 3px 0 5px 15px;
|
451 |
+
}
|
452 |
+
#ocs-editor .table-of-contents li {
|
453 |
+
padding: 2px 0;
|
454 |
+
margin: 0;
|
455 |
+
}
|
456 |
+
#ocs-editor .table-of-contents a {
|
457 |
+
color: #444;
|
458 |
+
}
|
459 |
+
#ocs-editor .table-of-contents li.new a {
|
460 |
+
color: #0221a9;
|
461 |
+
font-weight: bold;
|
462 |
+
}
|
463 |
+
#ocs-editor .table-of-contents a.deprecated {
|
464 |
+
color: #8f6e47;
|
465 |
+
}
|
js/chronopost/chronorelais/ocseditor.js
CHANGED
@@ -1,676 +1,676 @@
|
|
1 |
-
/**
|
2 |
-
* Magento Chronopost Chronorelais Module
|
3 |
-
*
|
4 |
-
* NOTICE OF LICENSE
|
5 |
-
*
|
6 |
-
* This source file is subject to the Open Software License (OSL 3.0)
|
7 |
-
* that is bundled with this package in the file LICENSE.txt.
|
8 |
-
* It is also available through the world-wide-web at this URL:
|
9 |
-
* http://opensource.org/licenses/osl-3.0.php
|
10 |
-
* If you did not receive a copy of the license and are unable to
|
11 |
-
* obtain it through the world-wide-web, please send an email
|
12 |
-
* to license@magentocommerce.com so we can send you a copy immediately.
|
13 |
-
*
|
14 |
-
* @category Chronopost
|
15 |
-
* @package Chronopost_Chronorelais
|
16 |
-
* @copyright Copyright (c) 2008-10 Owebia (http://www.owebia.com/)
|
17 |
-
* @author Antoine Lemoine
|
18 |
-
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
19 |
-
*/
|
20 |
-
|
21 |
-
/**
|
22 |
-
* @constructor
|
23 |
-
*/
|
24 |
-
OCSEditor = function (options) {
|
25 |
-
this.options = options;
|
26 |
-
|
27 |
-
this.jwindow = jQuery(window);
|
28 |
-
this.jeditor = null;
|
29 |
-
this.jeditor_content = null;
|
30 |
-
this.jtextarea = null;
|
31 |
-
this.jcontextualmenu = null;
|
32 |
-
this.mouse_event_owner = null;
|
33 |
-
this.dialog_v_padding = 10;
|
34 |
-
this.dialog_h_padding = 15;
|
35 |
-
}
|
36 |
-
|
37 |
-
OCSEditor.prototype = {
|
38 |
-
/**
|
39 |
-
* @private
|
40 |
-
*/
|
41 |
-
_init: function () {
|
42 |
-
var jeditor = this._dialog('ocs-editor',"<div style=\"width:100%;height:100%;position:relative;\" id=\"ocs-editor-content\"></div>");
|
43 |
-
this.jeditor = jeditor;
|
44 |
-
var jdialogbox = jeditor.find('.dialog-box');
|
45 |
-
this.jeditor_content = jeditor.find('#ocs-editor-content');
|
46 |
-
this.jeditor_content.css({width: jdialogbox.innerWidth()-this.dialog_h_padding*2, height: jdialogbox.innerHeight()-this.dialog_v_padding*2, border: '0'});
|
47 |
-
|
48 |
-
var self = this;
|
49 |
-
jQuery('#ocs-editor .address-filter-list > .address-filter').live('click',function (event) {
|
50 |
-
var caller = jQuery(this);
|
51 |
-
self._contextualMenu('address-filter',caller);
|
52 |
-
jQuery('#ocs-contextual-menu').css({position: 'absolute', 'z-index': 100, left: event.pageX-7, top: event.pageY}).show();
|
53 |
-
event.preventDefault();
|
54 |
-
event.stopPropagation();
|
55 |
-
});
|
56 |
-
jQuery('#ocs-editor .property-container .field').live('blur',function (event) {
|
57 |
-
self._updateProperty(this);
|
58 |
-
event.preventDefault();
|
59 |
-
event.stopPropagation();
|
60 |
-
});
|
61 |
-
/*jQuery('#ocs-editor .property-container textarea').live('change',function (event) {
|
62 |
-
self._updateProperty(this);
|
63 |
-
event.preventDefault();
|
64 |
-
event.stopPropagation();
|
65 |
-
});*/
|
66 |
-
},
|
67 |
-
|
68 |
-
/**
|
69 |
-
* @private
|
70 |
-
*/
|
71 |
-
_dialog: function (id, content) {
|
72 |
-
var w = this.jwindow.width();
|
73 |
-
var h = this.jwindow.height();
|
74 |
-
var margin = 50;
|
75 |
-
var v_padding = this.dialog_v_padding;
|
76 |
-
var h_padding = this.dialog_h_padding;
|
77 |
-
var width = w-2*margin;
|
78 |
-
var height = h-2*margin;
|
79 |
-
var dialog_w = Math.max(width+2*h_padding,350);
|
80 |
-
var dialog_h = Math.max(height+2*v_padding,250);
|
81 |
-
var top = (h-dialog_h)/2;
|
82 |
-
var left = (w-dialog_w)/2;
|
83 |
-
var margin_top = (dialog_h-height)/2-v_padding;
|
84 |
-
var margin_left = (dialog_w-width)/2-h_padding;
|
85 |
-
var jdialog = jQuery("<div style=\"position:fixed;top:0;left:0;width:100%;height:100%;z-index:100;\" id=\""+id+"\">"
|
86 |
-
+"<div class=\"dialog-bg\" style=\"position:fixed;top:0;left:0;z-index:100;width:100%;height:100%;background:#000;\"></div>"
|
87 |
-
+"<div class=\"dialog-box\" style=\"position:fixed;background:#fff;-moz-box-shadow: #000 0 0 10px;top:"+top+"px;left:"+left+"px;width:"+dialog_w+"px;"
|
88 |
-
+"height:"+dialog_h+"px;z-index:200;\"><div style=\"padding:"+v_padding+"px "+h_padding+"px;margin:"+margin_top+"px 0 0 "+margin_left+"px;\">"
|
89 |
-
+content+'</div></div></div>');
|
90 |
-
jdialog.find('.dialog-bg').click(function(event){
|
91 |
-
jdialog.fadeOut(function(){jdialog.hide();});
|
92 |
-
})
|
93 |
-
.css({
|
94 |
-
opacity: '0.7'
|
95 |
-
})
|
96 |
-
;
|
97 |
-
jQuery('body').append(jdialog);
|
98 |
-
return jdialog;
|
99 |
-
},
|
100 |
-
|
101 |
-
/**
|
102 |
-
* @private
|
103 |
-
*/
|
104 |
-
_contextualMenu: function (which, caller) {
|
105 |
-
var self = this;
|
106 |
-
this.mouse_event_owner = caller;
|
107 |
-
|
108 |
-
if (this.jcontextualmenu==null) {
|
109 |
-
var jcontextualmenu = jQuery('<ul id="ocs-contextual-menu" style="display:none;"></ul>');
|
110 |
-
jcontextualmenu.click(function (event) {
|
111 |
-
jcontextualmenu.hide();
|
112 |
-
event.preventDefault();
|
113 |
-
event.stopPropagation();
|
114 |
-
});
|
115 |
-
jQuery('body').append(jcontextualmenu);
|
116 |
-
jQuery(document).mouseup(function (event) {
|
117 |
-
if (self.mouse_event_owner!=null && self.mouse_event_owner.hasClass('files-container')) {
|
118 |
-
self.mouse_event_owner.trigger(event);
|
119 |
-
}
|
120 |
-
jcontextualmenu.hide();
|
121 |
-
});
|
122 |
-
this.jcontextualmenu = jcontextualmenu;
|
123 |
-
}
|
124 |
-
|
125 |
-
switch (which) {
|
126 |
-
case 'address-filter':
|
127 |
-
this.jcontextualmenu.html(
|
128 |
-
"<li><span>"+caller.attr('full-value')+"</span></li>"
|
129 |
-
+(caller.hasClass('address-filter-group') ?
|
130 |
-
"<li><a id=\"ungroup-link\" href=\"#\">"+this.options.menu_item_dissociate_label+"</a></li>"
|
131 |
-
:
|
132 |
-
''
|
133 |
-
)
|
134 |
-
+"<li><a id=\"edit-link\" href=\"#\">"+this.options.menu_item_edit_label+"</a></li>"
|
135 |
-
+"<li><a id=\"remove-link\" href=\"#\" onclick=\"\">"+this.options.menu_item_remove_label+"</a></li>"
|
136 |
-
);
|
137 |
-
var parent = caller.parents('.property-container');
|
138 |
-
jQuery('#remove-link').click(function (event) {
|
139 |
-
caller.fadeOut(null,function(){
|
140 |
-
caller.remove();
|
141 |
-
self.updateCountries(parent);
|
142 |
-
});
|
143 |
-
event.preventDefault();
|
144 |
-
});
|
145 |
-
jQuery('#edit-link').click(function (event) {
|
146 |
-
var new_value = prompt(this.options.prompt_new_value_label,caller.attr('original-value'));
|
147 |
-
self._ajax({
|
148 |
-
data: {
|
149 |
-
what: 'get-address-filters',
|
150 |
-
input: new_value
|
151 |
-
},
|
152 |
-
success: function (msg) {
|
153 |
-
caller.replaceWith(msg);
|
154 |
-
self.updateCountries(parent);
|
155 |
-
}
|
156 |
-
});
|
157 |
-
event.preventDefault();
|
158 |
-
});
|
159 |
-
jQuery('#ungroup-link').click(function (event) {
|
160 |
-
self._dissociateAddressFiltersGroup(caller,100);
|
161 |
-
event.preventDefault();
|
162 |
-
});
|
163 |
-
break;
|
164 |
-
}
|
165 |
-
},
|
166 |
-
|
167 |
-
/**
|
168 |
-
* @private
|
169 |
-
*/
|
170 |
-
_ajax: function (args) {
|
171 |
-
args.data.form_key = this.options.form_key;
|
172 |
-
jQuery.ajax({
|
173 |
-
type: 'POST',
|
174 |
-
url: this.options.ajax_url,
|
175 |
-
data: args.data,
|
176 |
-
success: args.success
|
177 |
-
});
|
178 |
-
},
|
179 |
-
|
180 |
-
/**
|
181 |
-
* @private
|
182 |
-
*/
|
183 |
-
_download: function (data) {
|
184 |
-
data.form_key = this.options.form_key;
|
185 |
-
data = jQuery.param(data);
|
186 |
-
var inputs = '';
|
187 |
-
jQuery.each(data.split('&'),function(){
|
188 |
-
var tmp = this.split('=');
|
189 |
-
inputs += '<input type="hidden" name="'+tmp[0]+'" value="'+tmp[1]+'"/>';
|
190 |
-
});
|
191 |
-
jQuery('<form action="'+this.options.ajax_url+'" method="post">'+inputs+'</form>').appendTo('body').submit().remove();
|
192 |
-
},
|
193 |
-
|
194 |
-
/**
|
195 |
-
* @private
|
196 |
-
*/
|
197 |
-
_checkCountries: function (parent) {
|
198 |
-
var output = '';
|
199 |
-
parent.find('.address-filter').each(function () {
|
200 |
-
var country_code = jQuery(this).attr('country-code');
|
201 |
-
output += country_code+',';
|
202 |
-
if (country_code!='') {
|
203 |
-
var tmp = parent.find('.country-'+country_code);
|
204 |
-
if (tmp.size()>1) {
|
205 |
-
tmp.addClass('warning');
|
206 |
-
} else {
|
207 |
-
tmp.removeClass('warning');
|
208 |
-
}
|
209 |
-
}
|
210 |
-
});
|
211 |
-
},
|
212 |
-
|
213 |
-
/**
|
214 |
-
* @private
|
215 |
-
*/
|
216 |
-
_getConfig: function () {
|
217 |
-
var self = this;
|
218 |
-
var config = '';
|
219 |
-
this.jeditor_content.find('.row-container').each(function(){
|
220 |
-
var jrowcontainer = jQuery(this);
|
221 |
-
if (jrowcontainer.hasClass('ignored-lines')) {
|
222 |
-
config += jrowcontainer.find('.field').val()+"\n";
|
223 |
-
} else {
|
224 |
-
var comment = jrowcontainer.find('.property-container[property-name="*comment"] .field').val();
|
225 |
-
if (comment!='') {
|
226 |
-
var lines = comment.replace(/(?:\r\n|\n|\r)/,"\n").split("\n");
|
227 |
-
for (var i=0; i<lines.length; i++) {
|
228 |
-
if (lines[i].substr(0,1)!='#') lines[i] = '# '+lines[i];
|
229 |
-
else lines[i] = '#'+lines[i];
|
230 |
-
}
|
231 |
-
config += lines.join("\n")+"\n";
|
232 |
-
}
|
233 |
-
config += "{\n";
|
234 |
-
jrowcontainer.find('.property-container').each(function(){
|
235 |
-
var jpropertycontainer = jQuery(this);
|
236 |
-
var property = jpropertycontainer.attr('property-name');
|
237 |
-
if (property!='*comment') {
|
238 |
-
var value = null;
|
239 |
-
if (property=='destination' || property=='origin') {
|
240 |
-
value = self._getAddressFilter('compact-value',this,true,true);
|
241 |
-
}
|
242 |
-
else value = jpropertycontainer.find('.field').val();
|
243 |
-
var property = jpropertycontainer.attr('property-name');
|
244 |
-
|
245 |
-
switch (property) {
|
246 |
-
case 'enabled':
|
247 |
-
if (value!='1') config += "\t"+property+': false,'+"\n";
|
248 |
-
break;
|
249 |
-
default:
|
250 |
-
if (value!='') config += "\t"+property+': "'+value+'",'+"\n";
|
251 |
-
break;
|
252 |
-
}
|
253 |
-
|
254 |
-
}
|
255 |
-
});
|
256 |
-
config += "}\n";
|
257 |
-
}
|
258 |
-
});
|
259 |
-
return config;
|
260 |
-
},
|
261 |
-
|
262 |
-
/**
|
263 |
-
* @private
|
264 |
-
*/
|
265 |
-
_dissociateAddressFiltersGroup: function (caller, delay) {
|
266 |
-
var self = this;
|
267 |
-
var childs = caller.children('.address-filter');
|
268 |
-
if (delay>0) {
|
269 |
-
childs.each(function (i) {
|
270 |
-
var child = jQuery(this);
|
271 |
-
child.delay(i*delay).fadeOut(null,function(){
|
272 |
-
child.insertBefore(caller);
|
273 |
-
child.fadeIn();
|
274 |
-
if (i==childs.size()-1) {
|
275 |
-
caller.fadeOut(null,function(){
|
276 |
-
caller.remove();
|
277 |
-
self.updateCountries(parent);
|
278 |
-
});
|
279 |
-
}
|
280 |
-
});
|
281 |
-
});
|
282 |
-
} else {
|
283 |
-
childs.insertBefore(caller);
|
284 |
-
caller.remove();
|
285 |
-
self.updateCountries(parent);
|
286 |
-
}
|
287 |
-
},
|
288 |
-
|
289 |
-
/**
|
290 |
-
* @private
|
291 |
-
*/
|
292 |
-
_updateAddressFilters: function (object) {
|
293 |
-
if (!(object instanceof jQuery)) object = jQuery(object);
|
294 |
-
if (!object.hasClass('property-container')) object = object.parents('.property-container');
|
295 |
-
|
296 |
-
var self = this;
|
297 |
-
this._ajax({
|
298 |
-
data: {
|
299 |
-
what: 'get-address-filters',
|
300 |
-
input: object.find('textarea').val()
|
301 |
-
},
|
302 |
-
success: function (msg) {
|
303 |
-
object.find('.address-filter-list').html(msg);
|
304 |
-
//self._checkCountries(object);
|
305 |
-
}
|
306 |
-
});
|
307 |
-
},
|
308 |
-
|
309 |
-
/**
|
310 |
-
* @private
|
311 |
-
*/
|
312 |
-
_updateProperty: function (object) {
|
313 |
-
if (!(object instanceof jQuery)) object = jQuery(object);
|
314 |
-
|
315 |
-
var property_container = object.parents('.property-container');
|
316 |
-
var property_name = property_container.attr('property-name');
|
317 |
-
switch (property_name) {
|
318 |
-
case 'destination':
|
319 |
-
case 'origin':
|
320 |
-
this._updateAddressFilters(object);
|
321 |
-
break;
|
322 |
-
case 'label':
|
323 |
-
this._updateRowTitle(object,property_container);
|
324 |
-
break;
|
325 |
-
}
|
326 |
-
this._ajax({
|
327 |
-
data: {
|
328 |
-
what: 'check-config',
|
329 |
-
config: encodeURIComponent(this._getConfig()),
|
330 |
-
},
|
331 |
-
success: function (msg) {
|
332 |
-
jQuery('body').append(msg);
|
333 |
-
}
|
334 |
-
});
|
335 |
-
var id = object.attr('id')+'-item';
|
336 |
-
if (object.val().trim()=='') jQuery('#'+id).addClass('empty');
|
337 |
-
else jQuery('#'+id).removeClass('empty');
|
338 |
-
},
|
339 |
-
|
340 |
-
/**
|
341 |
-
* @private
|
342 |
-
*/
|
343 |
-
_updateRowTitle: function (jtextarea) {
|
344 |
-
var title = jtextarea.val().trim();
|
345 |
-
if (title=='') title = this.options.default_row_label;
|
346 |
-
jtextarea.parents('.row-container').find('.row-title').html(title);
|
347 |
-
},
|
348 |
-
|
349 |
-
/**
|
350 |
-
* @private
|
351 |
-
*/
|
352 |
-
_updateRowsUI: function () {
|
353 |
-
var jrows = this.jeditor.find('.row-container');
|
354 |
-
if (jrows.filter('.selected').size()==0) {
|
355 |
-
jrows.eq(0).addClass('selected');
|
356 |
-
}
|
357 |
-
if (jrows.size()<=1) {
|
358 |
-
jrows.find('.row-actions .delete').hide();
|
359 |
-
} else {
|
360 |
-
jrows.find('.row-actions .delete').show();
|
361 |
-
}
|
362 |
-
},
|
363 |
-
|
364 |
-
/**
|
365 |
-
* @private
|
366 |
-
*/
|
367 |
-
/*_linearizeAddressFilters: function (object) {
|
368 |
-
if (!(object instanceof jQuery)) object = jQuery(object);
|
369 |
-
if (!object.hasClass('property-container')) object = object.parents('.property-container');
|
370 |
-
|
371 |
-
var self = this;
|
372 |
-
object.find('.address-filter-list .address-filter-group').each(function () {
|
373 |
-
self._dissociateAddressFiltersGroup(jQuery(this),0);
|
374 |
-
});
|
375 |
-
},*/
|
376 |
-
|
377 |
-
/**
|
378 |
-
* @public
|
379 |
-
*/
|
380 |
-
insertAtCaret: function (object, text_to_insert) {
|
381 |
-
if (!(object instanceof jQuery)) {
|
382 |
-
object = jQuery(object);
|
383 |
-
if (object[0].nodeName!='textarea') object = object.parents('.property-container');
|
384 |
-
}
|
385 |
-
if (object.hasClass('property-container')) object = object.find('textarea');
|
386 |
-
|
387 |
-
object.each(function (i) {
|
388 |
-
if (document.selection) {
|
389 |
-
this.focus();
|
390 |
-
var sel = document.selection.createRange();
|
391 |
-
sel.text = text_to_insert;
|
392 |
-
this.focus();
|
393 |
-
} else if (this.selectionStart || this.selectionStart=='0') {
|
394 |
-
var start_index = this.selectionStart;
|
395 |
-
var end_index = this.selectionEnd;
|
396 |
-
var scroll_top = this.scrollTop;
|
397 |
-
this.value = this.value.substring(0,start_index)+text_to_insert+this.value.substring(end_index,this.value.length);
|
398 |
-
this.focus();
|
399 |
-
this.selectionStart = start_index + text_to_insert.length;
|
400 |
-
this.selectionEnd = start_index + text_to_insert.length;
|
401 |
-
this.scrollTop = scroll_top;
|
402 |
-
} else {
|
403 |
-
this.value += text_to_insert;
|
404 |
-
this.focus();
|
405 |
-
}
|
406 |
-
});
|
407 |
-
},
|
408 |
-
|
409 |
-
/**
|
410 |
-
* @public
|
411 |
-
*/
|
412 |
-
updateCountries: function (object) {
|
413 |
-
if (!(object instanceof jQuery)) object = jQuery(object);
|
414 |
-
if (!object.hasClass('property-container')) object = object.parents('.property-container');
|
415 |
-
|
416 |
-
var list = object.find('.address-filter-list');
|
417 |
-
var displayed_field = list.attr('displayed-field');
|
418 |
-
if (displayed_field==null) displayed_field = 'original-value';
|
419 |
-
var compact = list.attr('compact');
|
420 |
-
if (compact==null) compact = false;
|
421 |
-
else compact = compact=='1';
|
422 |
-
this.displayCountry(displayed_field,object,compact);
|
423 |
-
this._checkCountries(object);
|
424 |
-
},
|
425 |
-
|
426 |
-
/**
|
427 |
-
* @private
|
428 |
-
*/
|
429 |
-
_getAddressFilter: function (field, object, compact, linearize_groups) {
|
430 |
-
if (!(object instanceof jQuery)) object = jQuery(object);
|
431 |
-
if (!object.hasClass('property-container')) object = object.parents('.property-container');
|
432 |
-
|
433 |
-
var values = [];
|
434 |
-
object.find('.address-filter-list').attr('displayed-field',field).attr('compact',compact?'1':'0');
|
435 |
-
|
436 |
-
if (linearize_groups) {
|
437 |
-
object.find('.address-filter-list .address-filter').each(function () {
|
438 |
-
var jfilter = jQuery(this);
|
439 |
-
if (!jfilter.hasClass('address-filter-group')) values.push(jfilter.attr(field));
|
440 |
-
});
|
441 |
-
} else {
|
442 |
-
object.find('.address-filter-list > .address-filter').each(function () {
|
443 |
-
values.push(jQuery(this).attr(field));
|
444 |
-
});
|
445 |
-
}
|
446 |
-
var excluding = object.find('.excluding:checked').val()=='1';
|
447 |
-
return (excluding ? '* - (' : '')+values.join(','+(compact ? '' : ' '))+(excluding ? ')' : '');
|
448 |
-
},
|
449 |
-
|
450 |
-
/**
|
451 |
-
* @public
|
452 |
-
*/
|
453 |
-
displayCountry: function (field, object, compact) {
|
454 |
-
if (!(object instanceof jQuery)) object = jQuery(object);
|
455 |
-
if (!object.hasClass('property-container')) object = object.parents('.property-container');
|
456 |
-
|
457 |
-
object.find('.field').val(this._getAddressFilter(field,object,compact,false));
|
458 |
-
this._checkCountries(object);
|
459 |
-
},
|
460 |
-
|
461 |
-
/**
|
462 |
-
* @public
|
463 |
-
*/
|
464 |
-
selectProperty: function (code, property) {
|
465 |
-
jQuery('#r-'+code+'-container .property-item, #r-'+code+'-container .property-container').removeClass('selected');
|
466 |
-
jQuery('#r-'+code+'-p-'+property+'-item, #r-'+code+'-p-'+property+'-container').addClass('selected');
|
467 |
-
},
|
468 |
-
|
469 |
-
/**
|
470 |
-
* @public
|
471 |
-
*/
|
472 |
-
selectRow: function (code) {
|
473 |
-
jQuery('#ocs-editor .row-container').removeClass('selected');
|
474 |
-
jQuery('#r-'+code+'-container').addClass('selected');
|
475 |
-
},
|
476 |
-
|
477 |
-
/**
|
478 |
-
* @public
|
479 |
-
*/
|
480 |
-
resetErrors: function (code, property, error) {
|
481 |
-
this.jeditor.find('.has-error').not('.ignored-lines').removeClass('has-error');
|
482 |
-
this.jeditor.find('div.error').remove();
|
483 |
-
},
|
484 |
-
|
485 |
-
/**
|
486 |
-
* @public
|
487 |
-
*/
|
488 |
-
setError: function (code, property, error) {
|
489 |
-
if (property=='') {
|
490 |
-
jQuery('#r-'+code+'-container .row-header').append("<div class=\"error\">"+error+"</div>");
|
491 |
-
} else {
|
492 |
-
jQuery('#r-'+code+'-container').addClass('has-error');
|
493 |
-
jQuery('#r-'+code+'-p-'+property+'-item').addClass('has-error');
|
494 |
-
jQuery('#r-'+code+'-p-'+property+'-container').prepend("<div class=\"error\">"+error+"</div>");
|
495 |
-
}
|
496 |
-
},
|
497 |
-
|
498 |
-
/**
|
499 |
-
* @public
|
500 |
-
*/
|
501 |
-
correct: function (code, property, value) {
|
502 |
-
var jfield = jQuery('#r-'+code+'-p-'+property);
|
503 |
-
jfield.val(value);
|
504 |
-
this._updateProperty(jfield);
|
505 |
-
},
|
506 |
-
|
507 |
-
/**
|
508 |
-
* @public
|
509 |
-
*/
|
510 |
-
removeRow: function (object) {
|
511 |
-
var self = this;
|
512 |
-
var jrow = jQuery(object).parents('.row-container');
|
513 |
-
jrow.fadeOut(null,function(){
|
514 |
-
jrow.remove();
|
515 |
-
self._updateRowsUI();
|
516 |
-
});
|
517 |
-
},
|
518 |
-
|
519 |
-
/**
|
520 |
-
* @public
|
521 |
-
*/
|
522 |
-
addRow: function () {
|
523 |
-
var self = this;
|
524 |
-
this._ajax({
|
525 |
-
data: {
|
526 |
-
what: 'add-row'
|
527 |
-
},
|
528 |
-
success: function (msg) {
|
529 |
-
var jcontainer = self.jeditor.find('.config-container');
|
530 |
-
jcontainer.find('.row-container.selected').removeClass('selected');
|
531 |
-
jcontainer.append(msg);
|
532 |
-
self._updateRowsUI();
|
533 |
-
}
|
534 |
-
});
|
535 |
-
},
|
536 |
-
|
537 |
-
/**
|
538 |
-
* @public
|
539 |
-
*/
|
540 |
-
saveToFile: function () {
|
541 |
-
this._download({
|
542 |
-
what: 'save-to-file',
|
543 |
-
config: this._getConfig(),
|
544 |
-
});
|
545 |
-
},
|
546 |
-
|
547 |
-
/**
|
548 |
-
* @public
|
549 |
-
*/
|
550 |
-
save: function () {
|
551 |
-
this.jtextarea.val(this._getConfig());
|
552 |
-
this.close();
|
553 |
-
},
|
554 |
-
|
555 |
-
/**
|
556 |
-
* @public
|
557 |
-
*/
|
558 |
-
applyChanges: function () {
|
559 |
-
this.loadConfig(this._getConfig());
|
560 |
-
},
|
561 |
-
|
562 |
-
/**
|
563 |
-
* @public
|
564 |
-
*/
|
565 |
-
loadConfig: function (config) {
|
566 |
-
if (typeof config=='undefined') {
|
567 |
-
config = jQuery('#ocs-editor-config-loader textarea').val()
|
568 |
-
}
|
569 |
-
var self = this;
|
570 |
-
this._ajax({
|
571 |
-
data: {
|
572 |
-
what: 'load-config',
|
573 |
-
config: config
|
574 |
-
},
|
575 |
-
success: function (msg) {
|
576 |
-
jQuery('#ocs-editor-config-container').html(msg);
|
577 |
-
self.jeditor.find('.address-filter-list').each(function(){
|
578 |
-
self._checkCountries(jQuery(this));
|
579 |
-
});
|
580 |
-
self._updateRowsUI();
|
581 |
-
jQuery('#ocs-editor-config-loader').slideUp().find('textarea').val('');
|
582 |
-
}
|
583 |
-
});
|
584 |
-
},
|
585 |
-
|
586 |
-
/**
|
587 |
-
* @public
|
588 |
-
*/
|
589 |
-
showConfigLoader: function () {
|
590 |
-
jQuery('#ocs-editor-config-loader').slideDown();
|
591 |
-
},
|
592 |
-
|
593 |
-
/**
|
594 |
-
* @public
|
595 |
-
*/
|
596 |
-
hideConfigLoader: function () {
|
597 |
-
jQuery('#ocs-editor-config-loader').slideUp().find('textarea').val('');
|
598 |
-
},
|
599 |
-
|
600 |
-
/**
|
601 |
-
* @public
|
602 |
-
*/
|
603 |
-
open: function (object) {
|
604 |
-
if (this.jeditor==null) this._init();
|
605 |
-
|
606 |
-
var jcell = jQuery(object).parents('td.value');
|
607 |
-
this.jtextarea = jcell.find('textarea');
|
608 |
-
|
609 |
-
this.jeditor_content.html('<div class=\"loading rule-param-wait\">'+this.options.loading_label+'</div>');
|
610 |
-
this.jeditor.fadeIn();
|
611 |
-
|
612 |
-
var self = this;
|
613 |
-
this._ajax({
|
614 |
-
data: {
|
615 |
-
what: 'open',
|
616 |
-
input: this.jtextarea.val()
|
617 |
-
},
|
618 |
-
success: function (msg) {
|
619 |
-
self.jeditor_content.html(msg);
|
620 |
-
var jconfig_container = self.jeditor.find('#ocs-editor-config-container');
|
621 |
-
var height = self.jeditor_content.height() - jconfig_container.position().top - self.jeditor.find('.donate-container').height() - 15;
|
622 |
-
jconfig_container.css({
|
623 |
-
overflow: 'auto',
|
624 |
-
height: height
|
625 |
-
});
|
626 |
-
self._updateRowsUI();
|
627 |
-
}
|
628 |
-
});
|
629 |
-
},
|
630 |
-
|
631 |
-
/**
|
632 |
-
* @public
|
633 |
-
*/
|
634 |
-
close: function () {
|
635 |
-
this.jeditor.fadeOut();
|
636 |
-
},
|
637 |
-
|
638 |
-
/**
|
639 |
-
* @public
|
640 |
-
*/
|
641 |
-
openPage: function (page) {
|
642 |
-
jQuery('#ocseditor-'+page+'-page').fadeIn();
|
643 |
-
},
|
644 |
-
|
645 |
-
/**
|
646 |
-
* @public
|
647 |
-
*/
|
648 |
-
closePage: function (object) {
|
649 |
-
jQuery(object).parents('.ocseditor-page').fadeOut();
|
650 |
-
},
|
651 |
-
|
652 |
-
/**
|
653 |
-
* @public
|
654 |
-
*/
|
655 |
-
help: function (help_section) {
|
656 |
-
this._ajax({
|
657 |
-
data: {
|
658 |
-
what: 'help',
|
659 |
-
input: help_section
|
660 |
-
},
|
661 |
-
success: function (msg) {
|
662 |
-
var jhelp_page = jQuery('#ocseditor-help-page');
|
663 |
-
var jpage_content = jhelp_page.find('.page-content');
|
664 |
-
var height = jhelp_page.height() - jpage_content.position().top - 15;
|
665 |
-
jpage_content.css({
|
666 |
-
overflow: 'auto',
|
667 |
-
height: height
|
668 |
-
});
|
669 |
-
jpage_content.html(msg);
|
670 |
-
}
|
671 |
-
});
|
672 |
-
jQuery('#ocseditor-help-page .page-content').html('<div class=\"loading rule-param-wait\">'+this.options.loading_label+'</div>');
|
673 |
-
this.openPage('help');
|
674 |
-
}
|
675 |
-
}
|
676 |
-
|
1 |
+
/**
|
2 |
+
* Magento Chronopost Chronorelais Module
|
3 |
+
*
|
4 |
+
* NOTICE OF LICENSE
|
5 |
+
*
|
6 |
+
* This source file is subject to the Open Software License (OSL 3.0)
|
7 |
+
* that is bundled with this package in the file LICENSE.txt.
|
8 |
+
* It is also available through the world-wide-web at this URL:
|
9 |
+
* http://opensource.org/licenses/osl-3.0.php
|
10 |
+
* If you did not receive a copy of the license and are unable to
|
11 |
+
* obtain it through the world-wide-web, please send an email
|
12 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
13 |
+
*
|
14 |
+
* @category Chronopost
|
15 |
+
* @package Chronopost_Chronorelais
|
16 |
+
* @copyright Copyright (c) 2008-10 Owebia (http://www.owebia.com/)
|
17 |
+
* @author Antoine Lemoine
|
18 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
19 |
+
*/
|
20 |
+
|
21 |
+
/**
|
22 |
+
* @constructor
|
23 |
+
*/
|
24 |
+
OCSEditor = function (options) {
|
25 |
+
this.options = options;
|
26 |
+
|
27 |
+
this.jwindow = jQuery(window);
|
28 |
+
this.jeditor = null;
|
29 |
+
this.jeditor_content = null;
|
30 |
+
this.jtextarea = null;
|
31 |
+
this.jcontextualmenu = null;
|
32 |
+
this.mouse_event_owner = null;
|
33 |
+
this.dialog_v_padding = 10;
|
34 |
+
this.dialog_h_padding = 15;
|
35 |
+
}
|
36 |
+
|
37 |
+
OCSEditor.prototype = {
|
38 |
+
/**
|
39 |
+
* @private
|
40 |
+
*/
|
41 |
+
_init: function () {
|
42 |
+
var jeditor = this._dialog('ocs-editor',"<div style=\"width:100%;height:100%;position:relative;\" id=\"ocs-editor-content\"></div>");
|
43 |
+
this.jeditor = jeditor;
|
44 |
+
var jdialogbox = jeditor.find('.dialog-box');
|
45 |
+
this.jeditor_content = jeditor.find('#ocs-editor-content');
|
46 |
+
this.jeditor_content.css({width: jdialogbox.innerWidth()-this.dialog_h_padding*2, height: jdialogbox.innerHeight()-this.dialog_v_padding*2, border: '0'});
|
47 |
+
|
48 |
+
var self = this;
|
49 |
+
jQuery('#ocs-editor .address-filter-list > .address-filter').live('click',function (event) {
|
50 |
+
var caller = jQuery(this);
|
51 |
+
self._contextualMenu('address-filter',caller);
|
52 |
+
jQuery('#ocs-contextual-menu').css({position: 'absolute', 'z-index': 100, left: event.pageX-7, top: event.pageY}).show();
|
53 |
+
event.preventDefault();
|
54 |
+
event.stopPropagation();
|
55 |
+
});
|
56 |
+
jQuery('#ocs-editor .property-container .field').live('blur',function (event) {
|
57 |
+
self._updateProperty(this);
|
58 |
+
event.preventDefault();
|
59 |
+
event.stopPropagation();
|
60 |
+
});
|
61 |
+
/*jQuery('#ocs-editor .property-container textarea').live('change',function (event) {
|
62 |
+
self._updateProperty(this);
|
63 |
+
event.preventDefault();
|
64 |
+
event.stopPropagation();
|
65 |
+
});*/
|
66 |
+
},
|
67 |
+
|
68 |
+
/**
|
69 |
+
* @private
|
70 |
+
*/
|
71 |
+
_dialog: function (id, content) {
|
72 |
+
var w = this.jwindow.width();
|
73 |
+
var h = this.jwindow.height();
|
74 |
+
var margin = 50;
|
75 |
+
var v_padding = this.dialog_v_padding;
|
76 |
+
var h_padding = this.dialog_h_padding;
|
77 |
+
var width = w-2*margin;
|
78 |
+
var height = h-2*margin;
|
79 |
+
var dialog_w = Math.max(width+2*h_padding,350);
|
80 |
+
var dialog_h = Math.max(height+2*v_padding,250);
|
81 |
+
var top = (h-dialog_h)/2;
|
82 |
+
var left = (w-dialog_w)/2;
|
83 |
+
var margin_top = (dialog_h-height)/2-v_padding;
|
84 |
+
var margin_left = (dialog_w-width)/2-h_padding;
|
85 |
+
var jdialog = jQuery("<div style=\"position:fixed;top:0;left:0;width:100%;height:100%;z-index:100;\" id=\""+id+"\">"
|
86 |
+
+"<div class=\"dialog-bg\" style=\"position:fixed;top:0;left:0;z-index:100;width:100%;height:100%;background:#000;\"></div>"
|
87 |
+
+"<div class=\"dialog-box\" style=\"position:fixed;background:#fff;-moz-box-shadow: #000 0 0 10px;top:"+top+"px;left:"+left+"px;width:"+dialog_w+"px;"
|
88 |
+
+"height:"+dialog_h+"px;z-index:200;\"><div style=\"padding:"+v_padding+"px "+h_padding+"px;margin:"+margin_top+"px 0 0 "+margin_left+"px;\">"
|
89 |
+
+content+'</div></div></div>');
|
90 |
+
jdialog.find('.dialog-bg').click(function(event){
|
91 |
+
jdialog.fadeOut(function(){jdialog.hide();});
|
92 |
+
})
|
93 |
+
.css({
|
94 |
+
opacity: '0.7'
|
95 |
+
})
|
96 |
+
;
|
97 |
+
jQuery('body').append(jdialog);
|
98 |
+
return jdialog;
|
99 |
+
},
|
100 |
+
|
101 |
+
/**
|
102 |
+
* @private
|
103 |
+
*/
|
104 |
+
_contextualMenu: function (which, caller) {
|
105 |
+
var self = this;
|
106 |
+
this.mouse_event_owner = caller;
|
107 |
+
|
108 |
+
if (this.jcontextualmenu==null) {
|
109 |
+
var jcontextualmenu = jQuery('<ul id="ocs-contextual-menu" style="display:none;"></ul>');
|
110 |
+
jcontextualmenu.click(function (event) {
|
111 |
+
jcontextualmenu.hide();
|
112 |
+
event.preventDefault();
|
113 |
+
event.stopPropagation();
|
114 |
+
});
|
115 |
+
jQuery('body').append(jcontextualmenu);
|
116 |
+
jQuery(document).mouseup(function (event) {
|
117 |
+
if (self.mouse_event_owner!=null && self.mouse_event_owner.hasClass('files-container')) {
|
118 |
+
self.mouse_event_owner.trigger(event);
|
119 |
+
}
|
120 |
+
jcontextualmenu.hide();
|
121 |
+
});
|
122 |
+
this.jcontextualmenu = jcontextualmenu;
|
123 |
+
}
|
124 |
+
|
125 |
+
switch (which) {
|
126 |
+
case 'address-filter':
|
127 |
+
this.jcontextualmenu.html(
|
128 |
+
"<li><span>"+caller.attr('full-value')+"</span></li>"
|
129 |
+
+(caller.hasClass('address-filter-group') ?
|
130 |
+
"<li><a id=\"ungroup-link\" href=\"#\">"+this.options.menu_item_dissociate_label+"</a></li>"
|
131 |
+
:
|
132 |
+
''
|
133 |
+
)
|
134 |
+
+"<li><a id=\"edit-link\" href=\"#\">"+this.options.menu_item_edit_label+"</a></li>"
|
135 |
+
+"<li><a id=\"remove-link\" href=\"#\" onclick=\"\">"+this.options.menu_item_remove_label+"</a></li>"
|
136 |
+
);
|
137 |
+
var parent = caller.parents('.property-container');
|
138 |
+
jQuery('#remove-link').click(function (event) {
|
139 |
+
caller.fadeOut(null,function(){
|
140 |
+
caller.remove();
|
141 |
+
self.updateCountries(parent);
|
142 |
+
});
|
143 |
+
event.preventDefault();
|
144 |
+
});
|
145 |
+
jQuery('#edit-link').click(function (event) {
|
146 |
+
var new_value = prompt(this.options.prompt_new_value_label,caller.attr('original-value'));
|
147 |
+
self._ajax({
|
148 |
+
data: {
|
149 |
+
what: 'get-address-filters',
|
150 |
+
input: new_value
|
151 |
+
},
|
152 |
+
success: function (msg) {
|
153 |
+
caller.replaceWith(msg);
|
154 |
+
self.updateCountries(parent);
|
155 |
+
}
|
156 |
+
});
|
157 |
+
event.preventDefault();
|
158 |
+
});
|
159 |
+
jQuery('#ungroup-link').click(function (event) {
|
160 |
+
self._dissociateAddressFiltersGroup(caller,100);
|
161 |
+
event.preventDefault();
|
162 |
+
});
|
163 |
+
break;
|
164 |
+
}
|
165 |
+
},
|
166 |
+
|
167 |
+
/**
|
168 |
+
* @private
|
169 |
+
*/
|
170 |
+
_ajax: function (args) {
|
171 |
+
args.data.form_key = this.options.form_key;
|
172 |
+
jQuery.ajax({
|
173 |
+
type: 'POST',
|
174 |
+
url: this.options.ajax_url,
|
175 |
+
data: args.data,
|
176 |
+
success: args.success
|
177 |
+
});
|
178 |
+
},
|
179 |
+
|
180 |
+
/**
|
181 |
+
* @private
|
182 |
+
*/
|
183 |
+
_download: function (data) {
|
184 |
+
data.form_key = this.options.form_key;
|
185 |
+
data = jQuery.param(data);
|
186 |
+
var inputs = '';
|
187 |
+
jQuery.each(data.split('&'),function(){
|
188 |
+
var tmp = this.split('=');
|
189 |
+
inputs += '<input type="hidden" name="'+tmp[0]+'" value="'+tmp[1]+'"/>';
|
190 |
+
});
|
191 |
+
jQuery('<form action="'+this.options.ajax_url+'" method="post">'+inputs+'</form>').appendTo('body').submit().remove();
|
192 |
+
},
|
193 |
+
|
194 |
+
/**
|
195 |
+
* @private
|
196 |
+
*/
|
197 |
+
_checkCountries: function (parent) {
|
198 |
+
var output = '';
|
199 |
+
parent.find('.address-filter').each(function () {
|
200 |
+
var country_code = jQuery(this).attr('country-code');
|
201 |
+
output += country_code+',';
|
202 |
+
if (country_code!='') {
|
203 |
+
var tmp = parent.find('.country-'+country_code);
|
204 |
+
if (tmp.size()>1) {
|
205 |
+
tmp.addClass('warning');
|
206 |
+
} else {
|
207 |
+
tmp.removeClass('warning');
|
208 |
+
}
|
209 |
+
}
|
210 |
+
});
|
211 |
+
},
|
212 |
+
|
213 |
+
/**
|
214 |
+
* @private
|
215 |
+
*/
|
216 |
+
_getConfig: function () {
|
217 |
+
var self = this;
|
218 |
+
var config = '';
|
219 |
+
this.jeditor_content.find('.row-container').each(function(){
|
220 |
+
var jrowcontainer = jQuery(this);
|
221 |
+
if (jrowcontainer.hasClass('ignored-lines')) {
|
222 |
+
config += jrowcontainer.find('.field').val()+"\n";
|
223 |
+
} else {
|
224 |
+
var comment = jrowcontainer.find('.property-container[property-name="*comment"] .field').val();
|
225 |
+
if (comment!='') {
|
226 |
+
var lines = comment.replace(/(?:\r\n|\n|\r)/,"\n").split("\n");
|
227 |
+
for (var i=0; i<lines.length; i++) {
|
228 |
+
if (lines[i].substr(0,1)!='#') lines[i] = '# '+lines[i];
|
229 |
+
else lines[i] = '#'+lines[i];
|
230 |
+
}
|
231 |
+
config += lines.join("\n")+"\n";
|
232 |
+
}
|
233 |
+
config += "{\n";
|
234 |
+
jrowcontainer.find('.property-container').each(function(){
|
235 |
+
var jpropertycontainer = jQuery(this);
|
236 |
+
var property = jpropertycontainer.attr('property-name');
|
237 |
+
if (property!='*comment') {
|
238 |
+
var value = null;
|
239 |
+
if (property=='destination' || property=='origin') {
|
240 |
+
value = self._getAddressFilter('compact-value',this,true,true);
|
241 |
+
}
|
242 |
+
else value = jpropertycontainer.find('.field').val();
|
243 |
+
var property = jpropertycontainer.attr('property-name');
|
244 |
+
|
245 |
+
switch (property) {
|
246 |
+
case 'enabled':
|
247 |
+
if (value!='1') config += "\t"+property+': false,'+"\n";
|
248 |
+
break;
|
249 |
+
default:
|
250 |
+
if (value!='') config += "\t"+property+': "'+value+'",'+"\n";
|
251 |
+
break;
|
252 |
+
}
|
253 |
+
|
254 |
+
}
|
255 |
+
});
|
256 |
+
config += "}\n";
|
257 |
+
}
|
258 |
+
});
|
259 |
+
return config;
|
260 |
+
},
|
261 |
+
|
262 |
+
/**
|
263 |
+
* @private
|
264 |
+
*/
|
265 |
+
_dissociateAddressFiltersGroup: function (caller, delay) {
|
266 |
+
var self = this;
|
267 |
+
var childs = caller.children('.address-filter');
|
268 |
+
if (delay>0) {
|
269 |
+
childs.each(function (i) {
|
270 |
+
var child = jQuery(this);
|
271 |
+
child.delay(i*delay).fadeOut(null,function(){
|
272 |
+
child.insertBefore(caller);
|
273 |
+
child.fadeIn();
|
274 |
+
if (i==childs.size()-1) {
|
275 |
+
caller.fadeOut(null,function(){
|
276 |
+
caller.remove();
|
277 |
+
self.updateCountries(parent);
|
278 |
+
});
|
279 |
+
}
|
280 |
+
});
|
281 |
+
});
|
282 |
+
} else {
|
283 |
+
childs.insertBefore(caller);
|
284 |
+
caller.remove();
|
285 |
+
self.updateCountries(parent);
|
286 |
+
}
|
287 |
+
},
|
288 |
+
|
289 |
+
/**
|
290 |
+
* @private
|
291 |
+
*/
|
292 |
+
_updateAddressFilters: function (object) {
|
293 |
+
if (!(object instanceof jQuery)) object = jQuery(object);
|
294 |
+
if (!object.hasClass('property-container')) object = object.parents('.property-container');
|
295 |
+
|
296 |
+
var self = this;
|
297 |
+
this._ajax({
|
298 |
+
data: {
|
299 |
+
what: 'get-address-filters',
|
300 |
+
input: object.find('textarea').val()
|
301 |
+
},
|
302 |
+
success: function (msg) {
|
303 |
+
object.find('.address-filter-list').html(msg);
|
304 |
+
//self._checkCountries(object);
|
305 |
+
}
|
306 |
+
});
|
307 |
+
},
|
308 |
+
|
309 |
+
/**
|
310 |
+
* @private
|
311 |
+
*/
|
312 |
+
_updateProperty: function (object) {
|
313 |
+
if (!(object instanceof jQuery)) object = jQuery(object);
|
314 |
+
|
315 |
+
var property_container = object.parents('.property-container');
|
316 |
+
var property_name = property_container.attr('property-name');
|
317 |
+
switch (property_name) {
|
318 |
+
case 'destination':
|
319 |
+
case 'origin':
|
320 |
+
this._updateAddressFilters(object);
|
321 |
+
break;
|
322 |
+
case 'label':
|
323 |
+
this._updateRowTitle(object,property_container);
|
324 |
+
break;
|
325 |
+
}
|
326 |
+
this._ajax({
|
327 |
+
data: {
|
328 |
+
what: 'check-config',
|
329 |
+
config: encodeURIComponent(this._getConfig()),
|
330 |
+
},
|
331 |
+
success: function (msg) {
|
332 |
+
jQuery('body').append(msg);
|
333 |
+
}
|
334 |
+
});
|
335 |
+
var id = object.attr('id')+'-item';
|
336 |
+
if (object.val().trim()=='') jQuery('#'+id).addClass('empty');
|
337 |
+
else jQuery('#'+id).removeClass('empty');
|
338 |
+
},
|
339 |
+
|
340 |
+
/**
|
341 |
+
* @private
|
342 |
+
*/
|
343 |
+
_updateRowTitle: function (jtextarea) {
|
344 |
+
var title = jtextarea.val().trim();
|
345 |
+
if (title=='') title = this.options.default_row_label;
|
346 |
+
jtextarea.parents('.row-container').find('.row-title').html(title);
|
347 |
+
},
|
348 |
+
|
349 |
+
/**
|
350 |
+
* @private
|
351 |
+
*/
|
352 |
+
_updateRowsUI: function () {
|
353 |
+
var jrows = this.jeditor.find('.row-container');
|
354 |
+
if (jrows.filter('.selected').size()==0) {
|
355 |
+
jrows.eq(0).addClass('selected');
|
356 |
+
}
|
357 |
+
if (jrows.size()<=1) {
|
358 |
+
jrows.find('.row-actions .delete').hide();
|
359 |
+
} else {
|
360 |
+
jrows.find('.row-actions .delete').show();
|
361 |
+
}
|
362 |
+
},
|
363 |
+
|
364 |
+
/**
|
365 |
+
* @private
|
366 |
+
*/
|
367 |
+
/*_linearizeAddressFilters: function (object) {
|
368 |
+
if (!(object instanceof jQuery)) object = jQuery(object);
|
369 |
+
if (!object.hasClass('property-container')) object = object.parents('.property-container');
|
370 |
+
|
371 |
+
var self = this;
|
372 |
+
object.find('.address-filter-list .address-filter-group').each(function () {
|
373 |
+
self._dissociateAddressFiltersGroup(jQuery(this),0);
|
374 |
+
});
|
375 |
+
},*/
|
376 |
+
|
377 |
+
/**
|
378 |
+
* @public
|
379 |
+
*/
|
380 |
+
insertAtCaret: function (object, text_to_insert) {
|
381 |
+
if (!(object instanceof jQuery)) {
|
382 |
+
object = jQuery(object);
|
383 |
+
if (object[0].nodeName!='textarea') object = object.parents('.property-container');
|
384 |
+
}
|
385 |
+
if (object.hasClass('property-container')) object = object.find('textarea');
|
386 |
+
|
387 |
+
object.each(function (i) {
|
388 |
+
if (document.selection) {
|
389 |
+
this.focus();
|
390 |
+
var sel = document.selection.createRange();
|
391 |
+
sel.text = text_to_insert;
|
392 |
+
this.focus();
|
393 |
+
} else if (this.selectionStart || this.selectionStart=='0') {
|
394 |
+
var start_index = this.selectionStart;
|
395 |
+
var end_index = this.selectionEnd;
|
396 |
+
var scroll_top = this.scrollTop;
|
397 |
+
this.value = this.value.substring(0,start_index)+text_to_insert+this.value.substring(end_index,this.value.length);
|
398 |
+
this.focus();
|
399 |
+
this.selectionStart = start_index + text_to_insert.length;
|
400 |
+
this.selectionEnd = start_index + text_to_insert.length;
|
401 |
+
this.scrollTop = scroll_top;
|
402 |
+
} else {
|
403 |
+
this.value += text_to_insert;
|
404 |
+
this.focus();
|
405 |
+
}
|
406 |
+
});
|
407 |
+
},
|
408 |
+
|
409 |
+
/**
|
410 |
+
* @public
|
411 |
+
*/
|
412 |
+
updateCountries: function (object) {
|
413 |
+
if (!(object instanceof jQuery)) object = jQuery(object);
|
414 |
+
if (!object.hasClass('property-container')) object = object.parents('.property-container');
|
415 |
+
|
416 |
+
var list = object.find('.address-filter-list');
|
417 |
+
var displayed_field = list.attr('displayed-field');
|
418 |
+
if (displayed_field==null) displayed_field = 'original-value';
|
419 |
+
var compact = list.attr('compact');
|
420 |
+
if (compact==null) compact = false;
|
421 |
+
else compact = compact=='1';
|
422 |
+
this.displayCountry(displayed_field,object,compact);
|
423 |
+
this._checkCountries(object);
|
424 |
+
},
|
425 |
+
|
426 |
+
/**
|
427 |
+
* @private
|
428 |
+
*/
|
429 |
+
_getAddressFilter: function (field, object, compact, linearize_groups) {
|
430 |
+
if (!(object instanceof jQuery)) object = jQuery(object);
|
431 |
+
if (!object.hasClass('property-container')) object = object.parents('.property-container');
|
432 |
+
|
433 |
+
var values = [];
|
434 |
+
object.find('.address-filter-list').attr('displayed-field',field).attr('compact',compact?'1':'0');
|
435 |
+
|
436 |
+
if (linearize_groups) {
|
437 |
+
object.find('.address-filter-list .address-filter').each(function () {
|
438 |
+
var jfilter = jQuery(this);
|
439 |
+
if (!jfilter.hasClass('address-filter-group')) values.push(jfilter.attr(field));
|
440 |
+
});
|
441 |
+
} else {
|
442 |
+
object.find('.address-filter-list > .address-filter').each(function () {
|
443 |
+
values.push(jQuery(this).attr(field));
|
444 |
+
});
|
445 |
+
}
|
446 |
+
var excluding = object.find('.excluding:checked').val()=='1';
|
447 |
+
return (excluding ? '* - (' : '')+values.join(','+(compact ? '' : ' '))+(excluding ? ')' : '');
|
448 |
+
},
|
449 |
+
|
450 |
+
/**
|
451 |
+
* @public
|
452 |
+
*/
|
453 |
+
displayCountry: function (field, object, compact) {
|
454 |
+
if (!(object instanceof jQuery)) object = jQuery(object);
|
455 |
+
if (!object.hasClass('property-container')) object = object.parents('.property-container');
|
456 |
+
|
457 |
+
object.find('.field').val(this._getAddressFilter(field,object,compact,false));
|
458 |
+
this._checkCountries(object);
|
459 |
+
},
|
460 |
+
|
461 |
+
/**
|
462 |
+
* @public
|
463 |
+
*/
|
464 |
+
selectProperty: function (code, property) {
|
465 |
+
jQuery('#r-'+code+'-container .property-item, #r-'+code+'-container .property-container').removeClass('selected');
|
466 |
+
jQuery('#r-'+code+'-p-'+property+'-item, #r-'+code+'-p-'+property+'-container').addClass('selected');
|
467 |
+
},
|
468 |
+
|
469 |
+
/**
|
470 |
+
* @public
|
471 |
+
*/
|
472 |
+
selectRow: function (code) {
|
473 |
+
jQuery('#ocs-editor .row-container').removeClass('selected');
|
474 |
+
jQuery('#r-'+code+'-container').addClass('selected');
|
475 |
+
},
|
476 |
+
|
477 |
+
/**
|
478 |
+
* @public
|
479 |
+
*/
|
480 |
+
resetErrors: function (code, property, error) {
|
481 |
+
this.jeditor.find('.has-error').not('.ignored-lines').removeClass('has-error');
|
482 |
+
this.jeditor.find('div.error').remove();
|
483 |
+
},
|
484 |
+
|
485 |
+
/**
|
486 |
+
* @public
|
487 |
+
*/
|
488 |
+
setError: function (code, property, error) {
|
489 |
+
if (property=='') {
|
490 |
+
jQuery('#r-'+code+'-container .row-header').append("<div class=\"error\">"+error+"</div>");
|
491 |
+
} else {
|
492 |
+
jQuery('#r-'+code+'-container').addClass('has-error');
|
493 |
+
jQuery('#r-'+code+'-p-'+property+'-item').addClass('has-error');
|
494 |
+
jQuery('#r-'+code+'-p-'+property+'-container').prepend("<div class=\"error\">"+error+"</div>");
|
495 |
+
}
|
496 |
+
},
|
497 |
+
|
498 |
+
/**
|
499 |
+
* @public
|
500 |
+
*/
|
501 |
+
correct: function (code, property, value) {
|
502 |
+
var jfield = jQuery('#r-'+code+'-p-'+property);
|
503 |
+
jfield.val(value);
|
504 |
+
this._updateProperty(jfield);
|
505 |
+
},
|
506 |
+
|
507 |
+
/**
|
508 |
+
* @public
|
509 |
+
*/
|
510 |
+
removeRow: function (object) {
|
511 |
+
var self = this;
|
512 |
+
var jrow = jQuery(object).parents('.row-container');
|
513 |
+
jrow.fadeOut(null,function(){
|
514 |
+
jrow.remove();
|
515 |
+
self._updateRowsUI();
|
516 |
+
});
|
517 |
+
},
|
518 |
+
|
519 |
+
/**
|
520 |
+
* @public
|
521 |
+
*/
|
522 |
+
addRow: function () {
|
523 |
+
var self = this;
|
524 |
+
this._ajax({
|
525 |
+
data: {
|
526 |
+
what: 'add-row'
|
527 |
+
},
|
528 |
+
success: function (msg) {
|
529 |
+
var jcontainer = self.jeditor.find('.config-container');
|
530 |
+
jcontainer.find('.row-container.selected').removeClass('selected');
|
531 |
+
jcontainer.append(msg);
|
532 |
+
self._updateRowsUI();
|
533 |
+
}
|
534 |
+
});
|
535 |
+
},
|
536 |
+
|
537 |
+
/**
|
538 |
+
* @public
|
539 |
+
*/
|
540 |
+
saveToFile: function () {
|
541 |
+
this._download({
|
542 |
+
what: 'save-to-file',
|
543 |
+
config: this._getConfig(),
|
544 |
+
});
|
545 |
+
},
|
546 |
+
|
547 |
+
/**
|
548 |
+
* @public
|
549 |
+
*/
|
550 |
+
save: function () {
|
551 |
+
this.jtextarea.val(this._getConfig());
|
552 |
+
this.close();
|
553 |
+
},
|
554 |
+
|
555 |
+
/**
|
556 |
+
* @public
|
557 |
+
*/
|
558 |
+
applyChanges: function () {
|
559 |
+
this.loadConfig(this._getConfig());
|
560 |
+
},
|
561 |
+
|
562 |
+
/**
|
563 |
+
* @public
|
564 |
+
*/
|
565 |
+
loadConfig: function (config) {
|
566 |
+
if (typeof config=='undefined') {
|
567 |
+
config = jQuery('#ocs-editor-config-loader textarea').val()
|
568 |
+
}
|
569 |
+
var self = this;
|
570 |
+
this._ajax({
|
571 |
+
data: {
|
572 |
+
what: 'load-config',
|
573 |
+
config: config
|
574 |
+
},
|
575 |
+
success: function (msg) {
|
576 |
+
jQuery('#ocs-editor-config-container').html(msg);
|
577 |
+
self.jeditor.find('.address-filter-list').each(function(){
|
578 |
+
self._checkCountries(jQuery(this));
|
579 |
+
});
|
580 |
+
self._updateRowsUI();
|
581 |
+
jQuery('#ocs-editor-config-loader').slideUp().find('textarea').val('');
|
582 |
+
}
|
583 |
+
});
|
584 |
+
},
|
585 |
+
|
586 |
+
/**
|
587 |
+
* @public
|
588 |
+
*/
|
589 |
+
showConfigLoader: function () {
|
590 |
+
jQuery('#ocs-editor-config-loader').slideDown();
|
591 |
+
},
|
592 |
+
|
593 |
+
/**
|
594 |
+
* @public
|
595 |
+
*/
|
596 |
+
hideConfigLoader: function () {
|
597 |
+
jQuery('#ocs-editor-config-loader').slideUp().find('textarea').val('');
|
598 |
+
},
|
599 |
+
|
600 |
+
/**
|
601 |
+
* @public
|
602 |
+
*/
|
603 |
+
open: function (object) {
|
604 |
+
if (this.jeditor==null) this._init();
|
605 |
+
|
606 |
+
var jcell = jQuery(object).parents('td.value');
|
607 |
+
this.jtextarea = jcell.find('textarea');
|
608 |
+
|
609 |
+
this.jeditor_content.html('<div class=\"loading rule-param-wait\">'+this.options.loading_label+'</div>');
|
610 |
+
this.jeditor.fadeIn();
|
611 |
+
|
612 |
+
var self = this;
|
613 |
+
this._ajax({
|
614 |
+
data: {
|
615 |
+
what: 'open',
|
616 |
+
input: this.jtextarea.val()
|
617 |
+
},
|
618 |
+
success: function (msg) {
|
619 |
+
self.jeditor_content.html(msg);
|
620 |
+
var jconfig_container = self.jeditor.find('#ocs-editor-config-container');
|
621 |
+
var height = self.jeditor_content.height() - jconfig_container.position().top - self.jeditor.find('.donate-container').height() - 15;
|
622 |
+
jconfig_container.css({
|
623 |
+
overflow: 'auto',
|
624 |
+
height: height
|
625 |
+
});
|
626 |
+
self._updateRowsUI();
|
627 |
+
}
|
628 |
+
});
|
629 |
+
},
|
630 |
+
|
631 |
+
/**
|
632 |
+
* @public
|
633 |
+
*/
|
634 |
+
close: function () {
|
635 |
+
this.jeditor.fadeOut();
|
636 |
+
},
|
637 |
+
|
638 |
+
/**
|
639 |
+
* @public
|
640 |
+
*/
|
641 |
+
openPage: function (page) {
|
642 |
+
jQuery('#ocseditor-'+page+'-page').fadeIn();
|
643 |
+
},
|
644 |
+
|
645 |
+
/**
|
646 |
+
* @public
|
647 |
+
*/
|
648 |
+
closePage: function (object) {
|
649 |
+
jQuery(object).parents('.ocseditor-page').fadeOut();
|
650 |
+
},
|
651 |
+
|
652 |
+
/**
|
653 |
+
* @public
|
654 |
+
*/
|
655 |
+
help: function (help_section) {
|
656 |
+
this._ajax({
|
657 |
+
data: {
|
658 |
+
what: 'help',
|
659 |
+
input: help_section
|
660 |
+
},
|
661 |
+
success: function (msg) {
|
662 |
+
var jhelp_page = jQuery('#ocseditor-help-page');
|
663 |
+
var jpage_content = jhelp_page.find('.page-content');
|
664 |
+
var height = jhelp_page.height() - jpage_content.position().top - 15;
|
665 |
+
jpage_content.css({
|
666 |
+
overflow: 'auto',
|
667 |
+
height: height
|
668 |
+
});
|
669 |
+
jpage_content.html(msg);
|
670 |
+
}
|
671 |
+
});
|
672 |
+
jQuery('#ocseditor-help-page .page-content').html('<div class=\"loading rule-param-wait\">'+this.options.loading_label+'</div>');
|
673 |
+
this.openPage('help');
|
674 |
+
}
|
675 |
+
}
|
676 |
+
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Chronopost</name>
|
4 |
-
<version>0.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
|
7 |
<channel>community</channel>
|
@@ -19,25 +19,26 @@ Afin de vous accompagner dans le développement des sites e-marchands sur la
|
|
19 |
Le calcul du coût du transport (via logiciel QuickCost)
|
20 |
Le suivi intégré
|
21 |
Le choix entre 3 solutions possibles d'étiquetage des envois selon les besoins de l'e-commerçant
|
22 |
-
Testé et validé sur Magento 1.
|
23 |

|
24 |
-
--> Un manuel d'installation est à votre disposition
|
25 |

|
26 |
-
ATTENTION : Pour toute mise en production du module Chronopost, un contrat avec Chronopost est nécessaire. Si vous n'avez pas de contrat merci de prendre contact à l'adresse suivante : mychrono@chronopost.fr
|
27 |

|
28 |
Réalisation Adexos
|
29 |

|
30 |
Ce module est dévellopé à partir de l'extension Owebia Shipping 2</description>
|
31 |
-
<notes>Version destinée à Magento 1.
|
32 |
------------
|
33 |
-
|
34 |
-
|
35 |
-
Correction
|
36 |
-
|
|
|
37 |
<authors><author><name>Benjamin GOSSELET</name><user>Chronopost</user><email>bgosselet@adexos.fr</email></author></authors>
|
38 |
-
<date>2012-
|
39 |
-
<time>
|
40 |
-
<contents><target name="magedesign"><dir
|
41 |
<compatible/>
|
42 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
43 |
</package>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>Chronopost</name>
|
4 |
+
<version>0.4.0</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
|
7 |
<channel>community</channel>
|
19 |
Le calcul du coût du transport (via logiciel QuickCost)
|
20 |
Le suivi intégré
|
21 |
Le choix entre 3 solutions possibles d'étiquetage des envois selon les besoins de l'e-commerçant
|
22 |
+
Testé et validé sur Magento 1.7.0
|
23 |

|
24 |
+
--> Un manuel d'installation est à votre disposition sur Magento Connect afin de vous guider dans l'installation du module. (A lire impérativement)
|
25 |

|
26 |
+
ATTENTION : Pour toute mise en production du module Chronopost, un contrat avec Chronopost est nécessaire. Si vous n'avez pas de contrat merci de prendre contact à l'adresse suivante : mychrono@chronopost.fr ou au 0825 885 866.
|
27 |

|
28 |
Réalisation Adexos
|
29 |

|
30 |
Ce module est dévellopé à partir de l'extension Owebia Shipping 2</description>
|
31 |
+
<notes>Version destinée à Magento 1.6.X et supérieures. Testée sur Magento 1.7.0.
|
32 |
------------
|
33 |
+
Intégration de l'API Google Maps v3.
|
34 |
+
Ajout d'un exemple de configuration de tarifs spécifiques pour la Corse.
|
35 |
+
Correction d'un bug qui passait les commandes en invité au lieu de créer le compte pour un nouveau client.
|
36 |
+
Divers correctifs mineurs.
|
37 |
+
</notes>
|
38 |
<authors><author><name>Benjamin GOSSELET</name><user>Chronopost</user><email>bgosselet@adexos.fr</email></author></authors>
|
39 |
+
<date>2012-09-21</date>
|
40 |
+
<time>20:01:28</time>
|
41 |
+
<contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="chronorelais"><dir name="import"><file name="form.phtml" hash="356aadf2bb0182b23f7af38888a0cd38"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="chronorelais.xml" hash="a298640a9d7a9d5c9ad90b81801d0584"/></dir><dir name="template"><dir name="chronorelais"><dir name="checkout"><dir name="multishipping"><file name="shipping.phtml" hash="89ac65c42722975ec8b872a1e69b5ae9"/><dir name="shipping_method"><file name="chronorelais.phtml" hash="f184ce28e619c185434810545bc82d9f"/></dir></dir><dir name="onepage"><dir name="shipping_method"><file name="available.phtml" hash="294928839d355bec304699573299a4ee"/><file name="chronorelais.phtml" hash="4d9d318e0add0ff4a70155541180654a"/></dir><file name="shipping_method.phtml" hash="a2b0c989c7191d47eda86ddf94beaca8"/></dir></dir><dir name="sales"><dir name="order"><file name="history.phtml" hash="67bfaad7cff5ab92b5bd1c00581c6a8f"/><file name="recent.phtml" hash="7288560d442eadf3d8c19a40f80a9765"/></dir></dir></dir></dir></dir></dir></dir></target><target name="magecommunity"><dir name="Chronopost"><dir name="Chronorelais"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Form"><dir name="Field"><file name="Config.php" hash="b38741ddd97fcae5dd276239fb3c6b70"/></dir></dir></dir></dir></dir><dir name="Checkout"><dir name="Multishipping"><dir name="Shipping"><dir name="Method"><file name="Chronorelais.php" hash="a095d54809c9ad04453758635879127e"/></dir></dir></dir><dir name="Onepage"><dir name="Shipping"><dir name="Method"><file name="Chronorelais.php" hash="c4d908310310e4cd90833378df260599"/></dir></dir></dir></dir><file name="Detail.php" hash="005fa3b6e5918c6c9779402fab5713f2"/><dir name="Export"><dir name="Orders"><file name="Grid.php" hash="485a293e051663aac0f67959644e6824"/></dir><file name="Orders.php" hash="9ada10bd85cb58122e722b3e82c71e37"/></dir><file name="Filter.php" hash="28f80e3ab34f6ff03b61f070ccbac697"/><dir name="Import"><file name="Form.php" hash="56c6e3787c05e58d57b48ec4b1421468"/></dir><dir name="Sales"><file name="Impression.php" hash="619599b136b9cc49f01dba5b08ee8428"/><dir name="Order"><dir name="Shipment"><file name="View.php" hash="f5407d7d14aa59acb844479da5046900"/></dir></dir><dir name="Shipment"><file name="Grid.php" hash="06928b811ee8d71e5e1fdcc0814ff9e0"/></dir></dir></dir><dir name="Controller"><file name="Abstract.php" hash="94680cd88c6af59764dedb613b08d5f6"/></dir><dir name="Helper"><file name="Data.php" hash="70531f8f903a63986c063f65553d643d"/></dir><dir name="Model"><dir name="Carrier"><file name="AbstractChronorelais.php" hash="f4957f6d660c4adb0328f9f2d73da1e2"/><file name="AbstractChronorelaisShipping.php" hash="1adab13f3659559803b338ad86205d43"/><file name="Chronoexpress.php" hash="bc867a6b98966ada549a0b81ec334b64"/><file name="Chronopost.php" hash="c4d4525447d2801d28d921eaedc35a9a"/><file name="Chronorelais.php" hash="5cfcb83c23d05585fdc50f8b2747fc40"/></dir><dir name="Config"><dir name="Source"><file name="Civility.php" hash="fe6ec6eebe6faffdd0bb65479d91cd5d"/><file name="EndOfLineCharacter.php" hash="3fe6b6069a9efdc29ad0d3f7d1cf4794"/><file name="FieldDelimiter.php" hash="3e023d40aeca50932e62ff97eed6317e"/><file name="FieldSeparator.php" hash="ce30c5974a893bd5467334d574dd578a"/><file name="FileCharset.php" hash="6cc4ebab95735bd121af16e0eedd90d6"/><file name="FileExtension.php" hash="597c3e78e7584bf7c4b7b2ebad6d2a65"/><file name="PrintMode.php" hash="67e8a6e98e12c7e72624ba5322076c00"/></dir></dir><dir name="Sales"><dir name="Quote"><dir name="Address"><dir name="Total"><file name="Shipping.php" hash="2e69db363011f84ef2cdb5d0e9d4c4df"/></dir></dir></dir></dir></dir><dir name="controllers"><file name="AjaxController.php" hash="1905b32a1366d3c27277836364737e98"/><dir name="Checkout"><file name="MultishippingController.php" hash="c44aa875ba9683e1d6311390c4e77080"/><file name="OnepageController.php" hash="7d21a70c64f27ee9a34e2db9265708fb"/></dir><file name="ExportController.php" hash="9a24df876d6d7c48df53d99ff5498d6b"/><file name="ImportController.php" hash="7cce42f41a838e1cb3e220742020eeff"/><file name="RelaisController.php" hash="5d48155ddb7cc2d4effbbfdeb4f3946d"/><dir name="Sales"><file name="ImpressionController.php" hash="7b040384c03fec329f66ec0afb2d4d44"/><dir name="Order"><file name="ShipmentController.php" hash="992c53ee433323ef9fb1c0f101c54ea3"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="28417b8fdd11f66ff100ded62a43a312"/><file name="system.xml" hash="d819211d2c30e6ed340b8f2c5aa77cf8"/></dir><dir name="includes"><file name="ChronorelaisShippingHelper.php" hash="d3ee70e7f3ed2fb822f2e46abed56596"/><file name="countries.inc.php" hash="d21cd393c7c0ebc83beccc99950d6ab1"/></dir><dir name="sql"><dir name="chronorelais_setup"><file name="mysql4-install-0.1.0.php" hash="c307802a7bd10c1ecce06799b04569c2"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="ea3358055a851a96b673c721202045be"/><file name="mysql4-upgrade-0.1.1-0.1.2.php" hash="961f41dc1012d0917504f9bb5f5d106c"/><file name="mysql4-upgrade-0.1.2-0.1.3.php" hash="b85470889421f652c3d01b96072f579c"/><file name="mysql4-upgrade-0.1.3-0.1.4.php" hash="def69d0ae26b0d130d2ce6e0838e5d7f"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Chronopost_Chronorelais.csv" hash="76475aa4fa500c135a666e47bab62ddf"/></dir><dir name="fr_FR"><file name="Chronopost_Chronorelais.csv" hash="774b0e1f1c3157a6eeb37ef2e8f21e16"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="default"><dir name="default"><dir name="chronorelais"><file name="Logo-Chronopost.jpg" hash="cc1226ebcd7236ce021076657ac22265"/><file name="Picto_Chrono_Relais.png" hash="1ea0f0c410d237adf23d5905cd8431f5"/><file name="Thumbs.db" hash="2e16ed23c37d1aa29a6caf73f513a648"/><file name="ac.png" hash="0c04f70da35d43a2636cfbd6ad2b10d5"/><file name="chronopost.png" hash="93e5b22e2f280923df8d503f5c8e5b92"/><file name="chronorelais.css" hash="a1fef1934a1114be6c8f4eebde2b5263"/><file name="chronorelais.png" hash="87c42de75ddafe495dfc0248c2a688b4"/><file name="chronorelaismap.js" hash="92ed8469ba7bd08fec0683b841bdc860"/><file name="home.png" hash="7904b495e94047eb3406e260bc660cce"/><file name="ico_ac_shaded.gif" hash="e55d9b2071fb976cf5331b6273a40731"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="WSChronopost_Chronorelais.xml" hash="a432624b16f2f25dff3c66937e1d8f5d"/></dir></target><target name="mage"><dir name="js"><dir name="chronopost"><dir name="chronorelais"><file name="ocseditor.css" hash="1bfc847153768d6729cdad7cb1abe443"/><file name="ocseditor.js" hash="8b7f29ddf7faff2fd3a63af18ba666aa"/></dir></dir></dir></target></contents>
|
42 |
<compatible/>
|
43 |
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
44 |
</package>
|
skin/frontend/default/default/chronorelais/Logo-Chronopost.jpg
ADDED
Binary file
|
skin/frontend/default/default/chronorelais/chronorelaismap.js
CHANGED
@@ -5,146 +5,137 @@ var addressrelais = [];
|
|
5 |
var relaylatan = [];
|
6 |
var next_pt = 0;
|
7 |
var hidehomeicon = false;
|
|
|
8 |
|
9 |
function loadMyPoint(i) {
|
10 |
-
|
11 |
}
|
12 |
|
13 |
-
var bounds = new
|
14 |
function loadRelayMap(address, relaisArray, nextpt, mapid) {
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
alert('Could not find "'+search+ '" ' + reason);
|
112 |
-
}
|
113 |
-
}
|
114 |
-
);
|
115 |
-
}
|
116 |
-
showAddress(address, relaisArray);
|
117 |
-
|
118 |
-
} else {
|
119 |
-
alert("Sorry, the Google Maps API is not compatible with this browser");
|
120 |
-
}
|
121 |
} // end of loadRelayMap function
|
122 |
|
123 |
function addEvent( obj, type, fn ) {
|
124 |
if ( obj.attachEvent ) {
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
}
|
129 |
else{
|
130 |
-
|
131 |
}
|
132 |
}
|
133 |
|
134 |
function getMarkerInfoContent(relaisArray){
|
135 |
var icoPath = Picto_Chrono_Relais;
|
136 |
var content="<div class=\"sw-map-adresse-wrp\" style=\"background-image: url("+ icoPath +"); background-repeat: no-repeat;padding-left:50px;\">"
|
137 |
-
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
return content;
|
143 |
}
|
144 |
function getActionsForm(label)
|
145 |
{
|
146 |
var html = '<div class="sw-map-tools"><a href="javascript:printPage('+label+')">Imprimer</a>'
|
147 |
-
|
148 |
return html;
|
149 |
}
|
150 |
|
@@ -201,11 +192,11 @@ function parseHorairesOuverture(value , day, highlight)
|
|
201 |
}
|
202 |
else
|
203 |
{
|
204 |
-
|
205 |
-
|
206 |
/*
|
207 |
}
|
208 |
-
|
209 |
|
210 |
// so, re-format time
|
211 |
if (horaires[i] == "00:00-00:00")
|
@@ -232,41 +223,41 @@ function printPage(i)
|
|
232 |
var latlngpoint = relaylatan[i-1];
|
233 |
if(latlngpoint) {
|
234 |
fen.location.href = baseURL
|
235 |
-
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
}
|
246 |
}
|
247 |
|
248 |
function btQueryString(anArray, needEscape)
|
249 |
{
|
250 |
var rs = "" ;
|
251 |
-
|
|
|
|
|
252 |
{
|
253 |
-
if (needEscape == true)
|
254 |
-
{
|
255 |
if(anArray[key]) {
|
256 |
if (rs != "")
|
257 |
rs += "&"
|
258 |
rs += key +"=" + escape(anArray[key]) ;
|
259 |
}
|
260 |
-
|
261 |
-
|
262 |
-
|
263 |
if(anArray[key]) {
|
264 |
if (rs != "")
|
265 |
rs += "_-_"
|
266 |
rs += key +"=" + anArray[key] ;
|
267 |
}
|
268 |
-
|
269 |
-
|
270 |
return rs ;
|
271 |
}
|
272 |
|
@@ -308,125 +299,138 @@ function getShipAddress() {
|
|
308 |
// shipping method
|
309 |
var ShippingMethod = Class.create();
|
310 |
ShippingMethod.prototype = {
|
311 |
-
|
312 |
-
|
313 |
-
|
314 |
-
|
315 |
-
|
316 |
-
|
317 |
-
|
318 |
-
|
319 |
-
|
320 |
-
|
321 |
-
|
322 |
-
validate: function() {
|
323 |
-
var methods = document.getElementsByName('shipping_method');
|
324 |
-
if (methods.length==0) {
|
325 |
-
alert(Translator.translate('Your order cannot be completed at this time as there is no shipping methods available for it. Please make neccessary changes in your shipping address.'));
|
326 |
-
return false;
|
327 |
-
}
|
328 |
|
329 |
-
|
330 |
-
|
331 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
332 |
|
333 |
-
|
334 |
-
|
335 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
336 |
}
|
|
|
|
|
|
|
337 |
}
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
|
342 |
-
|
343 |
-
|
344 |
-
|
345 |
-
|
|
|
|
|
346 |
hidehomeicon = false;
|
347 |
-
|
348 |
-
|
349 |
-
|
350 |
-
|
351 |
-
|
352 |
-
|
353 |
-
|
354 |
-
|
355 |
-
|
356 |
-
|
357 |
-
|
358 |
-
|
359 |
|
360 |
-
|
361 |
-
|
362 |
-
|
363 |
if(!$('mappostalcode').value) { return false; }
|
364 |
-
|
365 |
$('mappostalcodebtn').hide();
|
366 |
$('postalcode-please-wait').show();
|
367 |
$('postalcode-please-wait').style.opacity = '0.5';
|
368 |
hidehomeicon = true;
|
369 |
-
|
370 |
-
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
|
375 |
-
|
376 |
-
|
377 |
-
}
|
378 |
-
);
|
379 |
}
|
380 |
-
|
|
|
|
|
381 |
|
382 |
-
|
383 |
if($('checkout-shipping-method-chronorelais-load')) {
|
384 |
$('checkout-shipping-method-chronorelais-load').innerHTML = "";
|
385 |
}
|
386 |
-
|
387 |
-
|
388 |
-
save: function(){
|
389 |
-
|
390 |
-
if (checkout.loadWaiting!=false) return;
|
391 |
-
if (this.validate()) {
|
392 |
-
checkout.setLoadWaiting('shipping-method');
|
393 |
-
var request = new Ajax.Request(
|
394 |
-
this.saveUrl,
|
395 |
-
{
|
396 |
-
method:'post',
|
397 |
-
onComplete: this.onComplete,
|
398 |
-
onSuccess: this.onSave,
|
399 |
-
onFailure: checkout.ajaxFailure.bind(checkout),
|
400 |
-
parameters: Form.serialize(this.form)
|
401 |
-
}
|
402 |
-
);
|
403 |
-
}
|
404 |
-
},
|
405 |
|
406 |
-
|
407 |
-
checkout.setLoadWaiting(false);
|
408 |
-
},
|
409 |
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
|
415 |
-
|
416 |
-
|
417 |
-
|
418 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
419 |
|
420 |
-
|
421 |
-
|
422 |
if($('mappostalcodebtn')) { $('mappostalcodebtn').show(); }
|
423 |
if($('postalcode-please-wait')) { $('postalcode-please-wait').hide(); }
|
424 |
-
|
425 |
-
|
426 |
|
427 |
if (response.update_section) {
|
428 |
-
|
429 |
-
|
430 |
|
431 |
if(response.relaypoints) {
|
432 |
if(response.relaypoints.length>0) {
|
@@ -436,7 +440,7 @@ ShippingMethod.prototype = {
|
|
436 |
relaylatan = [];
|
437 |
homeaddress = "";
|
438 |
next_pt = 0;
|
439 |
-
bounds = new
|
440 |
for(var s=0; s<response.relaypoints.length; s++) {
|
441 |
next_pt = s+1;
|
442 |
relayaddress = response.relaypoints[s].adresse1;
|
@@ -448,122 +452,116 @@ ShippingMethod.prototype = {
|
|
448 |
}
|
449 |
}
|
450 |
}
|
451 |
-
|
452 |
-
|
453 |
-
payment.initWhatIsCvvListeners();
|
454 |
|
455 |
-
|
456 |
-
checkout.gotoSection(response.goto_section);
|
457 |
-
checkout.reloadProgressBlock();
|
458 |
-
return;
|
459 |
-
}
|
460 |
|
461 |
-
|
462 |
-
|
463 |
-
|
|
|
|
|
464 |
|
465 |
-
|
|
|
466 |
}
|
|
|
|
|
|
|
467 |
}
|
468 |
|
469 |
// shipping method
|
470 |
var multiindex = "";
|
471 |
var MultiShippingMethod = Class.create();
|
472 |
MultiShippingMethod.prototype = {
|
473 |
-
|
474 |
-
|
475 |
-
|
476 |
-
|
477 |
-
|
478 |
-
|
479 |
-
|
480 |
-
|
481 |
-
|
482 |
-
|
483 |
-
|
484 |
-
|
485 |
-
|
486 |
-
|
487 |
-
|
488 |
-
|
489 |
-
|
490 |
-
|
491 |
-
//parameters: Form.serialize(this.form)
|
492 |
-
}
|
493 |
-
);
|
494 |
|
495 |
-
|
496 |
|
497 |
-
|
498 |
-
|
499 |
-
|
500 |
-
|
501 |
-
|
502 |
-
|
503 |
-
|
504 |
-
|
505 |
-
|
506 |
-
|
507 |
-
|
508 |
-
|
509 |
-
|
510 |
-
|
511 |
-
|
512 |
-
|
513 |
-
|
514 |
-
|
515 |
-
}
|
516 |
-
);
|
517 |
-
},
|
518 |
|
519 |
-
|
520 |
-
|
521 |
-
|
522 |
-
|
523 |
-
|
524 |
|
525 |
-
|
526 |
-
|
527 |
|
528 |
-
|
529 |
-
|
530 |
-
|
531 |
-
|
532 |
-
|
533 |
-
|
534 |
-
|
535 |
-
|
536 |
|
537 |
-
|
538 |
-
|
539 |
-
|
540 |
-
|
541 |
-
|
542 |
-
|
543 |
|
544 |
-
|
545 |
-
|
546 |
-
|
547 |
|
548 |
-
|
549 |
-
|
550 |
-
|
551 |
-
|
552 |
-
|
553 |
-
|
554 |
-
|
555 |
-
|
556 |
-
|
557 |
-
|
558 |
-
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
|
563 |
-
|
564 |
-
}
|
565 |
-
}
|
566 |
}
|
567 |
}
|
|
|
568 |
}
|
|
|
569 |
}
|
5 |
var relaylatan = [];
|
6 |
var next_pt = 0;
|
7 |
var hidehomeicon = false;
|
8 |
+
var currentInfoWindow;
|
9 |
|
10 |
function loadMyPoint(i) {
|
11 |
+
google.maps.event.trigger(gmarkers[i], "click");
|
12 |
}
|
13 |
|
14 |
+
var bounds = new google.maps.LatLngBounds();
|
15 |
function loadRelayMap(address, relaisArray, nextpt, mapid) {
|
16 |
+
var geo = new google.maps.Geocoder();
|
17 |
+
|
18 |
+
var myOptions = {
|
19 |
+
zoom: 5,
|
20 |
+
center: new google.maps.LatLng(47.37285025362682, 2.4172996312499784),
|
21 |
+
mapTypeId: google.maps.MapTypeId.ROADMAP
|
22 |
+
}
|
23 |
+
map = new google.maps.Map(document.getElementById(mapid), myOptions);
|
24 |
+
|
25 |
+
var blueIcon = new google.maps.MarkerImage(Picto_Chrono_Relais);
|
26 |
+
|
27 |
+
var homeIcon = new google.maps.MarkerImage(Home_Chrono_Icon);
|
28 |
+
|
29 |
+
if(!homeaddress && !hidehomeicon) {
|
30 |
+
var ship_address = getShipAddress(); //get shipping address to set home address
|
31 |
+
homeaddress = relaisArray.codePostal + " " + relaisArray.localite;
|
32 |
+
if(ship_address) { homeaddress = ship_address+" "+homeaddress; }
|
33 |
+
|
34 |
+
geo.geocode({'address': homeaddress}, function(results, status) {
|
35 |
+
if (status == google.maps.GeocoderStatus.OK) {
|
36 |
+
var point = results[0].geometry.location;
|
37 |
+
var marker = new google.maps.Marker({
|
38 |
+
position: point,
|
39 |
+
map: map,
|
40 |
+
title: 'home',
|
41 |
+
icon: homeIcon
|
42 |
+
});
|
43 |
+
map.setCenter(point, 11);
|
44 |
+
}
|
45 |
+
});
|
46 |
+
}
|
47 |
+
|
48 |
+
function createTabbedMarker(point, relaisArray) {
|
49 |
+
addressrelais.push(relaisArray);
|
50 |
+
var label = nextpt;
|
51 |
+
var relaypoint_id = relaisArray.identifiantChronopostPointA2PAS;
|
52 |
+
var marker = new google.maps.Marker({map: map, position: point, title:relaisArray.nomEnseigne, icon:blueIcon});
|
53 |
+
|
54 |
+
var infowindow = new google.maps.InfoWindow({
|
55 |
+
content: '<div style="width: 400px;"><div style="width: 190px; float: left;"><h2>Infos</h2>'+getMarkerInfoContent(relaisArray) + getActionsForm(addressrelais.length)+'</div><div style="margin-left: 10px; padding-left: 10px; border-left: 1px solid #000; float: left;"><h2>Horaires</h2><div style="width: 189px">'+getHorairesTab(relaisArray, true)+'</div></div></div>'
|
56 |
+
});
|
57 |
+
|
58 |
+
google.maps.event.addListener(marker, 'click', function() {
|
59 |
+
if(document.getElementById('s_method_chronorelais_'+relaisArray.identifiantChronopostPointA2PAS))
|
60 |
+
document.getElementById('s_method_chronorelais_'+relaisArray.identifiantChronopostPointA2PAS).checked = true;
|
61 |
+
|
62 |
+
if (currentInfoWindow) {
|
63 |
+
currentInfoWindow.close();
|
64 |
+
}
|
65 |
+
infowindow.open(map,marker);
|
66 |
+
currentInfoWindow = infowindow;
|
67 |
+
});
|
68 |
+
|
69 |
+
gmarkers[relaypoint_id] = marker;
|
70 |
+
return marker;
|
71 |
+
}
|
72 |
+
|
73 |
+
function showAddress(address, relaisArray) {
|
74 |
+
var search = address;
|
75 |
+
// ====== Perform the Geocoding ======
|
76 |
+
geo.geocode({'address': search}, function(results, status)
|
77 |
+
{
|
78 |
+
// If that was successful
|
79 |
+
if (status == google.maps.GeocoderStatus.OK) {
|
80 |
+
// Loop through the results, placing markers
|
81 |
+
//for (var i=0; i<result.Placemark.length; i++) {
|
82 |
+
for (var i=0; i<1; i++) {
|
83 |
+
var p = results[i].geometry.location;
|
84 |
+
relaylatan.push(p);
|
85 |
+
var marker = createTabbedMarker(p, relaisArray);
|
86 |
+
// ==== Each time a point is found, extent the bounds ato include it =====
|
87 |
+
bounds.extend(p);
|
88 |
+
}
|
89 |
+
// centre the map on the first result
|
90 |
+
//!homeaddress && hidehomeicon &&
|
91 |
+
if(nextpt==5) {
|
92 |
+
var p = results[0].geometry.location;
|
93 |
+
// ===== determine the zoom level from the bounds =====
|
94 |
+
map.fitBounds(bounds);
|
95 |
+
// ===== determine the centre from the bounds ======
|
96 |
+
map.setCenter(bounds.getCenter());
|
97 |
+
}
|
98 |
+
}
|
99 |
+
// ====== Decode the error status ======
|
100 |
+
else {
|
101 |
+
var reason = "Code " + status;
|
102 |
+
/*
|
103 |
+
if (reasons[status]) {
|
104 |
+
reason = reasons[status]
|
105 |
+
}
|
106 |
+
*/
|
107 |
+
alert('Could not find "' + search + '" ' + reason);
|
108 |
+
}
|
109 |
+
});
|
110 |
+
}
|
111 |
+
showAddress(address, relaisArray);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
112 |
} // end of loadRelayMap function
|
113 |
|
114 |
function addEvent( obj, type, fn ) {
|
115 |
if ( obj.attachEvent ) {
|
116 |
+
obj["e"+type+fn] = fn;
|
117 |
+
obj[type+fn] = function() { obj["e"+type+fn]( window.event ) };
|
118 |
+
obj.attachEvent( "on"+type, obj[type+fn] );
|
119 |
}
|
120 |
else{
|
121 |
+
obj.addEventListener( type, fn, false );
|
122 |
}
|
123 |
}
|
124 |
|
125 |
function getMarkerInfoContent(relaisArray){
|
126 |
var icoPath = Picto_Chrono_Relais;
|
127 |
var content="<div class=\"sw-map-adresse-wrp\" style=\"background-image: url("+ icoPath +"); background-repeat: no-repeat;padding-left:50px;\">"
|
128 |
+
+ "<h2>"+relaisArray.nomEnseigne+"</h2>"
|
129 |
+
+ "<div class=\"sw-map-adresse\">"
|
130 |
+
+ parseAdresse(relaisArray)
|
131 |
+
+ relaisArray.codePostal + " " + relaisArray.localite
|
132 |
+
+ "</div></div>";
|
133 |
return content;
|
134 |
}
|
135 |
function getActionsForm(label)
|
136 |
{
|
137 |
var html = '<div class="sw-map-tools"><a href="javascript:printPage('+label+')">Imprimer</a>'
|
138 |
+
+ '</div>';
|
139 |
return html;
|
140 |
}
|
141 |
|
192 |
}
|
193 |
else
|
194 |
{
|
195 |
+
*/
|
196 |
+
attributedCell = "" ;
|
197 |
/*
|
198 |
}
|
199 |
+
*/
|
200 |
|
201 |
// so, re-format time
|
202 |
if (horaires[i] == "00:00-00:00")
|
223 |
var latlngpoint = relaylatan[i-1];
|
224 |
if(latlngpoint) {
|
225 |
fen.location.href = baseURL
|
226 |
+
+ "print-result.html?request=print&"
|
227 |
+
+ btQueryString(addressrelais[i-1], true).replace(/00%3A00-00%3A00/gi, 'Ferm%E9')
|
228 |
+
+ "&rtype=chronorelais"
|
229 |
+
+ "&icnname=ac"
|
230 |
+
+ "&lat=" + latlngpoint.lat()
|
231 |
+
+ "&lng=" + latlngpoint.lng()
|
232 |
+
+ "&sw-form-type-point=opt_chrlas"
|
233 |
+
+ "&is_print_direction=" + false
|
234 |
+
+ "&from_addr="
|
235 |
+
+ "&to_addr=";
|
236 |
}
|
237 |
}
|
238 |
|
239 |
function btQueryString(anArray, needEscape)
|
240 |
{
|
241 |
var rs = "" ;
|
242 |
+
for (key in anArray)
|
243 |
+
{
|
244 |
+
if (needEscape == true)
|
245 |
{
|
|
|
|
|
246 |
if(anArray[key]) {
|
247 |
if (rs != "")
|
248 |
rs += "&"
|
249 |
rs += key +"=" + escape(anArray[key]) ;
|
250 |
}
|
251 |
+
}
|
252 |
+
else
|
253 |
+
{
|
254 |
if(anArray[key]) {
|
255 |
if (rs != "")
|
256 |
rs += "_-_"
|
257 |
rs += key +"=" + anArray[key] ;
|
258 |
}
|
259 |
+
}
|
260 |
+
}
|
261 |
return rs ;
|
262 |
}
|
263 |
|
299 |
// shipping method
|
300 |
var ShippingMethod = Class.create();
|
301 |
ShippingMethod.prototype = {
|
302 |
+
initialize: function(form, saveUrl){
|
303 |
+
this.form = form;
|
304 |
+
if ($(this.form)) {
|
305 |
+
$(this.form).observe('submit', function(event){this.save();Event.stop(event);}.bind(this));
|
306 |
+
}
|
307 |
+
this.saveUrl = saveUrl;
|
308 |
+
this.validator = new Validation(this.form);
|
309 |
+
this.onSave = this.nextStep.bindAsEventListener(this);
|
310 |
+
this.onComplete = this.resetLoadWaiting.bindAsEventListener(this);
|
311 |
+
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
312 |
|
313 |
+
validate: function() {
|
314 |
+
var methods = document.getElementsByName('shipping_method');
|
315 |
+
if (methods.length==0) {
|
316 |
+
alert(Translator.translate('Your order cannot be completed at this time as there is no shipping methods available for it. Please make neccessary changes in your shipping address.'));
|
317 |
+
return false;
|
318 |
+
}
|
319 |
+
|
320 |
+
if(!this.validator.validate()) {
|
321 |
+
return false;
|
322 |
+
}
|
323 |
|
324 |
+
for (var i=0; i<methods.length; i++) {
|
325 |
+
if (methods[i].checked) {
|
326 |
+
if (methods[i].value == 'chronorelais_chronorelais') {
|
327 |
+
var submethods = document.getElementsByName('shipping_method_chronorelais');
|
328 |
+
if (submethods.length==0) {
|
329 |
+
alert(Translator.translate('Your order cannot be completed at this time as there is no shipping methods available for it. Please make neccessary changes in your shipping address.'));
|
330 |
+
return false;
|
331 |
+
}
|
332 |
+
for (var j=0; j<submethods.length; j++) {
|
333 |
+
if (submethods[j].checked) {
|
334 |
+
return true;
|
335 |
}
|
336 |
+
}
|
337 |
+
} else {
|
338 |
+
return true;
|
339 |
}
|
340 |
+
}
|
341 |
+
}
|
342 |
+
alert(Translator.translate('Please specify shipping method.'));
|
343 |
+
return false;
|
344 |
+
},
|
345 |
+
|
346 |
+
getrelais: function(url){
|
347 |
+
if (checkout.loadWaiting!=false) return;
|
348 |
+
//if (this.validate()) {
|
349 |
+
checkout.setLoadWaiting('shipping-method');
|
350 |
hidehomeicon = false;
|
351 |
+
var request = new Ajax.Request(
|
352 |
+
url,
|
353 |
+
{
|
354 |
+
method:'post',
|
355 |
+
onComplete: this.onComplete,
|
356 |
+
onSuccess: this.onSave,
|
357 |
+
onFailure: checkout.ajaxFailure.bind(checkout),
|
358 |
+
parameters: Form.serialize(this.form)
|
359 |
+
}
|
360 |
+
);
|
361 |
+
//}
|
362 |
+
},
|
363 |
|
364 |
+
changePostalCode: function(url){
|
365 |
+
if (checkout.loadWaiting!=false) return;
|
366 |
+
//if (this.validate()) {
|
367 |
if(!$('mappostalcode').value) { return false; }
|
368 |
+
checkout.setLoadWaiting('shipping-method');
|
369 |
$('mappostalcodebtn').hide();
|
370 |
$('postalcode-please-wait').show();
|
371 |
$('postalcode-please-wait').style.opacity = '0.5';
|
372 |
hidehomeicon = true;
|
373 |
+
var request = new Ajax.Request(
|
374 |
+
url,
|
375 |
+
{
|
376 |
+
method:'post',
|
377 |
+
onComplete: this.onComplete,
|
378 |
+
onSuccess: this.onSave,
|
379 |
+
onFailure: checkout.ajaxFailure.bind(checkout),
|
380 |
+
parameters: Form.serialize(this.form)
|
|
|
|
|
381 |
}
|
382 |
+
);
|
383 |
+
//}
|
384 |
+
},
|
385 |
|
386 |
+
hiderelais: function(url){
|
387 |
if($('checkout-shipping-method-chronorelais-load')) {
|
388 |
$('checkout-shipping-method-chronorelais-load').innerHTML = "";
|
389 |
}
|
390 |
+
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
|
392 |
+
save: function(){
|
|
|
|
|
393 |
|
394 |
+
if (checkout.loadWaiting!=false) return;
|
395 |
+
if (this.validate()) {
|
396 |
+
checkout.setLoadWaiting('shipping-method');
|
397 |
+
var request = new Ajax.Request(
|
398 |
+
this.saveUrl,
|
399 |
+
{
|
400 |
+
method:'post',
|
401 |
+
onComplete: this.onComplete,
|
402 |
+
onSuccess: this.onSave,
|
403 |
+
onFailure: checkout.ajaxFailure.bind(checkout),
|
404 |
+
parameters: Form.serialize(this.form)
|
405 |
+
}
|
406 |
+
);
|
407 |
+
}
|
408 |
+
},
|
409 |
+
|
410 |
+
resetLoadWaiting: function(transport){
|
411 |
+
checkout.setLoadWaiting(false);
|
412 |
+
},
|
413 |
+
|
414 |
+
nextStep: function(transport){
|
415 |
+
if (transport && transport.responseText){
|
416 |
+
try{
|
417 |
+
response = eval('(' + transport.responseText + ')');
|
418 |
+
}
|
419 |
+
catch (e) {
|
420 |
+
response = {};
|
421 |
+
}
|
422 |
+
}
|
423 |
|
424 |
+
if (response.error) {
|
425 |
+
alert(response.message);
|
426 |
if($('mappostalcodebtn')) { $('mappostalcodebtn').show(); }
|
427 |
if($('postalcode-please-wait')) { $('postalcode-please-wait').hide(); }
|
428 |
+
return false;
|
429 |
+
}
|
430 |
|
431 |
if (response.update_section) {
|
432 |
+
$('checkout-'+response.update_section.name+'-load').update(response.update_section.html);
|
433 |
+
response.update_section.html.evalScripts();
|
434 |
|
435 |
if(response.relaypoints) {
|
436 |
if(response.relaypoints.length>0) {
|
440 |
relaylatan = [];
|
441 |
homeaddress = "";
|
442 |
next_pt = 0;
|
443 |
+
bounds = new google.maps.LatLngBounds();
|
444 |
for(var s=0; s<response.relaypoints.length; s++) {
|
445 |
next_pt = s+1;
|
446 |
relayaddress = response.relaypoints[s].adresse1;
|
452 |
}
|
453 |
}
|
454 |
}
|
455 |
+
}
|
|
|
|
|
456 |
|
457 |
+
payment.initWhatIsCvvListeners();
|
|
|
|
|
|
|
|
|
458 |
|
459 |
+
if (response.goto_section) {
|
460 |
+
checkout.gotoSection(response.goto_section);
|
461 |
+
checkout.reloadProgressBlock();
|
462 |
+
return;
|
463 |
+
}
|
464 |
|
465 |
+
if (response.payment_methods_html) {
|
466 |
+
$('checkout-payment-method-load').update(response.payment_methods_html);
|
467 |
}
|
468 |
+
|
469 |
+
checkout.setShippingMethod();
|
470 |
+
}
|
471 |
}
|
472 |
|
473 |
// shipping method
|
474 |
var multiindex = "";
|
475 |
var MultiShippingMethod = Class.create();
|
476 |
MultiShippingMethod.prototype = {
|
477 |
+
initialize: function(){
|
478 |
+
this.loadWaiting = false;
|
479 |
+
this.onComplete = this.complete.bindAsEventListener(this);
|
480 |
+
},
|
481 |
+
|
482 |
+
getrelais: function(url, index, home){
|
483 |
+
if (this.loadWaiting!=false) return;
|
484 |
+
this.loadWaiting = true;
|
485 |
+
homeaddress = home;
|
486 |
+
hidehomeicon = false;
|
487 |
+
multiindex = "_" + index;
|
488 |
+
var request = new Ajax.Request(
|
489 |
+
url,
|
490 |
+
{
|
491 |
+
method:'post',
|
492 |
+
onComplete: this.onComplete
|
493 |
+
}
|
494 |
+
);
|
|
|
|
|
|
|
495 |
|
496 |
+
},
|
497 |
|
498 |
+
changePostalCode: function(url, index){
|
499 |
+
if (this.loadWaiting!=false) return;
|
500 |
+
this.loadWaiting = true;
|
501 |
+
multiindex = "_" + index;
|
502 |
+
if(!$('mappostalcode' + multiindex).value) { return false; }
|
503 |
+
homeaddress = $('mappostalcode' + multiindex).value;
|
504 |
+
$('mappostalcodebtn' + multiindex).hide();
|
505 |
+
$('postalcode-please-wait' + multiindex).show();
|
506 |
+
$('postalcode-please-wait' + multiindex).style.opacity = '0.5';
|
507 |
+
hidehomeicon = true;
|
508 |
+
var request = new Ajax.Request(
|
509 |
+
url + '&zip=' + $('mappostalcode' + multiindex).value,
|
510 |
+
{
|
511 |
+
method:'post',
|
512 |
+
onComplete: this.onComplete
|
513 |
+
}
|
514 |
+
);
|
515 |
+
},
|
|
|
|
|
|
|
516 |
|
517 |
+
hiderelais: function(url, index){
|
518 |
+
if($('checkout-shipping-method-chronorelais-load_' + index)) {
|
519 |
+
$('checkout-shipping-method-chronorelais-load_' + index).innerHTML = "";
|
520 |
+
}
|
521 |
+
},
|
522 |
|
523 |
+
complete: function(transport){
|
524 |
+
this.loadWaiting = false;
|
525 |
|
526 |
+
if (transport && transport.responseText){
|
527 |
+
try{
|
528 |
+
response = eval('(' + transport.responseText + ')');
|
529 |
+
}
|
530 |
+
catch (e) {
|
531 |
+
response = {};
|
532 |
+
}
|
533 |
+
}
|
534 |
|
535 |
+
if (response.error) {
|
536 |
+
alert(response.message);
|
537 |
+
if($('mappostalcodebtn' + multiindex)) { $('mappostalcodebtn' + multiindex).show(); }
|
538 |
+
if($('postalcode-please-wait' + multiindex)) { $('postalcode-please-wait' + multiindex).hide(); }
|
539 |
+
return false;
|
540 |
+
}
|
541 |
|
542 |
+
if (response.update_section) {
|
543 |
+
$(response.update_section.name).update(response.update_section.html);
|
544 |
+
response.update_section.html.evalScripts();
|
545 |
|
546 |
+
if(response.relaypoints) {
|
547 |
+
if(response.relaypoints.length>0) {
|
548 |
+
var relayaddress = "";
|
549 |
+
gmarkers = [];
|
550 |
+
addressrelais = [];
|
551 |
+
relaylatan = [];
|
552 |
+
next_pt = 0;
|
553 |
+
bounds = new google.maps.LatLngBounds();
|
554 |
+
for(var s=0; s<response.relaypoints.length; s++) {
|
555 |
+
next_pt = s+1;
|
556 |
+
relayaddress = response.relaypoints[s].adresse1;
|
557 |
+
if(response.relaypoints[s].codePostal)
|
558 |
+
relayaddress += " "+response.relaypoints[s].codePostal;
|
559 |
+
if(response.relaypoints[s].localite)
|
560 |
+
relayaddress += " "+response.relaypoints[s].localite;
|
561 |
+
loadRelayMap(relayaddress, response.relaypoints[s], next_pt, 'chronomap' + multiindex);
|
|
|
|
|
562 |
}
|
563 |
}
|
564 |
+
}
|
565 |
}
|
566 |
+
}
|
567 |
}
|