fin desktop

This commit is contained in:
Romuald 2016-04-04 12:45:47 +02:00
parent 2542c54c59
commit d4aec6d1fb
38 changed files with 1672 additions and 736 deletions

View File

@ -0,0 +1,134 @@
<?php
if (!defined('_CAN_LOAD_FILES_'))
exit;
include_once(dirname(__FILE__) . '/classes/AdvRea.php');
class AdvReassurance extends Module
{
public function __construct()
{
$this->name = 'advreassurance';
$this->tab = 'front_office_features';
$this->version = '1.0';
$this->author = 'Antadis';
$this->need_instance = 0;
$this->bootstrap = true;
parent::__construct();
$this->displayName = $this->l('Reassurance avancé');
$this->description = $this->l('Gestion des blocks reassurance');
}
public function install()
{
$sql = array();
$sql[] =
'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'advreassurance` (
`id_reassurance` int(10) unsigned NOT NULL auto_increment,
`position` INT(11) UNSIGNED NOT NULL default 0,
`active` INT(11) UNSIGNED NOT NULL default 1,
PRIMARY KEY (`id_reassurance`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8';
$sql[] =
'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'advreassurance_lang` (
`id_reassurance` int(10) unsigned NOT NULL,
`id_lang` int(10) unsigned NOT NULL,
`title` varchar(255) NOT NULL,
`subtitle` varchar(255) NOT NULL,
`url` varchar(255),
PRIMARY KEY (`id_reassurance`,`id_lang`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8';
$sql[] =
'CREATE TABLE IF NOT EXISTS `' . _DB_PREFIX_ . 'advreassurance_shop` (
`id_reassurance` int(10) unsigned NOT NULL auto_increment,
`id_shop` int(10) unsigned NOT NULL,
PRIMARY KEY (`id_reassurance`, `id_shop`)
) ENGINE=' . _MYSQL_ENGINE_ . ' DEFAULT CHARSET=utf8';
foreach ($sql as $_sql) {
Db::getInstance()->Execute($_sql);
}
$tab = new Tab();
$tab->class_name = 'AdminAdvReassurance';
$tab->id_parent = Tab::getCurrentParentId();
$tab->module = $this->name;
$languages = Language::getLanguages();
foreach ($languages as $language) {
$tab->name[$language['id_lang']] = 'Reassurance';
}
$img_dir = _PS_IMG_DIR_ . 'reassurance';
$folder = is_dir($img_dir);
if (!$folder)
{
$folder = mkdir($img_dir, 0755, true);
}
return parent::install() && $tab->add() && $this->registerHook('displayReassurance') && $this->registerHook('actionRefreshReassurance') && $folder;
}
public function uninstall()
{
$sql = 'DROP TABLE IF EXISTS
`' . _DB_PREFIX_ . 'advreassurance_lang`,
`' . _DB_PREFIX_ . 'advreassurance_shop`,
`' . _DB_PREFIX_ . 'advreassurance`
';
Db::getInstance()->Execute($sql);
$idTab = Tab::getIdFromClassName('AdminAdvReassurance');
if ($idTab) {
$tab = new Tab($idTab);
$tab->delete();
}
return parent::uninstall();
}
public function assignBlocks()
{
$blocks = AdvRea::getBlocks();
if (!$blocks)
{
return false;
}
$this->smarty->assign('blocks', $blocks);
}
public function hookDisplayReassurance($params)
{
if (!$this->isCached('advreassurance.tpl', $this->getCacheId()))
{
$this->assignBlocks();
}
return $this->display(__FILE__, 'advreassurance.tpl', $this->getCacheId());
}
public function hookDisplayReassuranceBottom($params)
{
if (!$this->isCached('advreassurance-bottom.tpl', $this->getCacheId()))
{
$this->assignBlocks();
}
return $this->display(__FILE__, 'advreassurance-bottom.tpl', $this->getCacheId());
}
public function hookActionRefreshReassurance()
{
$this->_clearCache('advreassurance');
}
}

View File

@ -0,0 +1,133 @@
<?php
class AdvRea extends ObjectModel {
public $id_reassurance;
public $position;
public $active;
public $title;
public $subtitle;
public $url;
public static $definition = array(
'table' => 'advreassurance',
'primary' => 'id_reassurance',
'multilang' => TRUE,
'fields' => array(
'id_reassurance' => array('type' => self::TYPE_INT, 'validate' => 'isInt'),
'position' => array('type' => self::TYPE_INT, 'validate' => 'isInt'),
'active' => array('type' => self::TYPE_INT, 'validate' => 'isInt'),
// Lang fields
'title' => array('type' => self::TYPE_STRING, 'lang' => TRUE, 'validate' => 'isGenericName', 'size' => 255),
'subtitle' => array('type' => self::TYPE_STRING, 'lang' => TRUE, 'validate' => 'isGenericName', 'size' => 255),
'url' => array('type' => self::TYPE_STRING, 'lang' => TRUE, 'validate' => 'isUrl', 'size' => 255)
)
);
public function __construct($id = NULL, $id_lang = NULL, $id_shop = NULL) {
parent::__construct($id, $id_lang, $id_shop);
$this->image_dir = _PS_IMG_DIR_ . 'reassurance/';
}
public function add($null_values = false, $autodate = true)
{
$result = parent::add($null_values, $autodate);
Hook::exec('actionRefreshReassurance');
return $result;
}
public function update($null_values = FALSE) {
$result = parent::update($null_values);
Hook::exec('actionRefreshReassurance');
return $result;
}
public function delete($null_values = FALSE) {
$result = parent::delete($null_values);
Hook::exec('actionRefreshReassurance');
return $result;
}
public static function getBlocks()
{
$context = Context::getContext();
$reassurances = Db::getInstance()->executeS('
SELECT *
FROM `'._DB_PREFIX_.'advreassurance` adv
JOIN `'._DB_PREFIX_.'advreassurance_lang` advl ON adv.`id_reassurance` = advl.`id_reassurance` AND id_lang = '. (int)$context->language->id . '
WHERE adv.`active` = 1
ORDER BY `position` ASC
');
return $reassurances;
}
public function cleanPositions(){
return Db::getInstance()->execute('UPDATE `'._DB_PREFIX_.'advreassurance`
SET `position`= `position` - 1
WHERE `id_reassurance` = '.(int)$this->id_reassurance.'
AND `position` > '.(int)$this->position);
}
public function updatePosition($way, $position)
{
$sql = 'SELECT `position`, `id_reassurance`
FROM `'._DB_PREFIX_.'advreassurance`
ORDER BY `position` ASC';
if (!$res = Db::getInstance()->executeS($sql))
return false;
foreach ($res as $row)
if ((int)$row['id_reassurance'] == (int)$this->id_reassurance)
$moved_row = $row;
if (!isset($moved_row) || !isset($position))
return false;
// < and > statements rather than BETWEEN operator
// since BETWEEN is treated differently according to databases
$res = Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'advreassurance`
SET `position`= `position` '.($way ? '- 1' : '+ 1').'
AND `position`
'.($way
? '> '.(int)$moved_row['position'].' AND `position` <= '.(int)$position
: '< '.(int)$moved_row['position'].' AND `position` >= '.(int)$position)
)
&& Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'advreassurance`
SET `position` = '.(int)$position.'
WHERE `id_reassurance`='.(int)$moved_row['id_reassurance']
);
$this->refreshPositions();
Hook::exec('actionRefreshReassurance');
return $res;
}
public function refreshPositions(){
$sql = 'SELECT `id_reassurance`
FROM `'._DB_PREFIX_.'advreassurance`
ORDER BY `position` ASC';
if (!$blocks = Db::getInstance()->executeS($sql))
return false;
$pos=0;
foreach ($blocks as $block) {
Db::getInstance()->execute('
UPDATE `'._DB_PREFIX_.'advreassurance`
SET `position` = '.(int)$pos.'
WHERE `id_reassurance`='.(int)$block['id_reassurance']);
$pos++;
}
}
}

View File

@ -0,0 +1,243 @@
<?php
include_once dirname(__FILE__).'/../../classes/AdvRea.php';
class AdminAdvReassuranceController extends ModuleAdminController {
public function __construct() {
$this->table = 'advreassurance';
$this->className = 'AdvRea';
$this->identifier = 'id_reassurance';
$this->lang = TRUE;
$this->deleted = FALSE;
$this->bootstrap = TRUE;
$this->fieldImageSettings = array(
'name' => 'image',
'dir' => 'reassurance'
);
$this->position_identifier = 'id_reassurance';
$this->_defaultOrderBy = 'position';
parent::__construct();
$this->actions = array('edit', 'delete');
$this->fields_list = array(
'id_reassurance' => array(
'title' => 'ID',
'width' => 25
),
'image' => array(
'title' => $this->module->l('Image'),
'image' => $this->fieldImageSettings['dir'],
'width' => 75
),
'title' => array(
'title' => $this->module->l('Titre'),
),
'subtitle' => array(
'title' => $this->module->l('Sout-titre'),
),
'url' => array(
'title' => $this->module->l('Url'),
'width' => 45,
),
'position' => array(
'title' => $this->l('Position'),
'align' => 'center',
'position' => 'position',
'filter_key' => 'a!position'
)
);
if (Shop::isFeatureActive() && Shop::getContext() != Shop::CONTEXT_ALL){
$this->_join .= 'JOIN `'._DB_PREFIX_.'advreassurance_shop` as ashop ON a.`id_reassurance` = ashop.`id_reassurance` AND ashop.`id_shop` IN ('.implode(', ', Shop::getContextListShopID()).') ';
$this->_group .= 'GROUP BY ashop.`id_reassurance`';
}
}
public function initPageHeaderToolbar() {
parent::initPageHeaderToolbar();
if ($this->display != 'edit' && $this->display != 'add') {
$this->page_header_toolbar_btn['new_link'] = array(
'href' => self::$currentIndex.'&id_parent='.(int)Tools::getValue('id_reassurance').'&addadvreassurance&token='.$this->token,
'desc' => $this->l('Ajouter un nouveau block', NULL, NULL, FALSE),
'icon' => 'process-icon-new'
);
}
}
public function renderView() {
return $this->renderList();
}
public function renderForm() {
$this->fields_form = array(
'tinymce' => TRUE,
'legend' => array(
'title' => $this->className,
),
'submit' => array(
'name' => 'submitAdvReassurancer',
'title' => $this->l('Save'),
),
'input' => array(
array(
'type' => 'text',
'label' => $this->l('Titre'),
'name' => 'title',
'lang' => TRUE,
),
array(
'type' => 'text',
'label' => $this->l('Sous-titre'),
'name' => 'subtitle',
'lang' => TRUE,
),
array(
'type' => 'text',
'label' => $this->l('Lien'),
'name' => 'url',
'lang' => TRUE
),
array(
'type' => 'switch',
'label' => $this->l('Activé'),
'name' => 'active',
'required' => FALSE,
'is_bool' => TRUE,
'default' => 1,
'values' => array(
array(
'id' => 'active_on',
'value' => 1,
'label' => $this->l('Enabled')
),
array(
'id' => 'active_off',
'value' => 0,
'label' => $this->l('Disabled')
)
),
),
array(
'type' => 'shop',
'label' => $this->l('Shop'),
'form_group_class' => 'fieldhide input_association',
'name' => 'checkBoxShopAsso_advreassurance'
)
)
);
$obj = $this->loadObject(TRUE);
$image = FALSE;
$image_url = '';
$image_size = '';
if($obj)
{
$image = _PS_IMG_DIR_ . 'reassurance/' . $obj->id.'.jpg';
$image_url = ImageManager::thumbnail($image, $this->table.'_'.(int)$obj->id.'.'.$this->imageType, 350, $this->imageType, TRUE, TRUE);
$image_size = file_exists($image) ? filesize($image) / 1000 : FALSE;
}
$this->fields_form['input'][] = array(
'type' => 'file',
'label' => $this->l('Image'),
'name' => 'image',
'display_image' => TRUE,
'lang' => TRUE,
'image' => $image_url,
'size' => $image_size,
'delete_url' => self::$currentIndex.'&'.$this->identifier.'='.$this->object->id.'&token='.$this->token.'&deleteImage=1'
);
return parent::renderForm();
}
protected function copyFromPost(&$object, $table) {
parent::copyFromPost($object, $table);
if(Shop::isFeatureActive())
{
$object->id_shop_list = array();
foreach (Tools::getValue('checkBoxShopAsso_advreassurance') as $id_shop => $value)
$object->id_shop_list[] = $id_shop;
}
}
public function postProcess() {
if (Tools::getValue('deleteImage')) {
$this->processForceDeleteImage();
$this->refreshPreview();
}
return parent::postProcess();
}
public function processForceDeleteImage() {
$link = $this->loadObject(TRUE);
if (Validate::isLoadedObject($link))
{
$link->deleteImage(TRUE);
}
}
protected function postImage($id) {
$ret = parent::postImage($id);
$this->refreshPreview();
if (isset($_FILES) && count($_FILES) && $_FILES['image']['name'] != NULL && !empty($this->object->id) )
{
return TRUE;
}
return TRUE;
}
public function refreshPreview()
{
$current_preview = _PS_TMP_IMG_DIR_.'advreassurance_mini_'.$this->object->id_reassurance.'_'.$this->context->shop->id.'.jpg';
if (file_exists($current_preview)) {
unlink($current_preview);
}
}
public function ajaxProcessUpdatePositions()
{
$way = (int)(Tools::getValue('way'));
$id = (int)(Tools::getValue('id'));
$positions = Tools::getValue('slide');
$obj = 'advreassurance';
if (is_array($positions)){
foreach ($positions as $position => $value)
{
$pos = explode('_', $value);
if (isset($pos[2]) && (int)$pos[2] === $id)
{
$menu_obj = new AdvRea((int)$pos[2]);
if (Validate::isLoadedObject($menu_obj))
if (isset($position) && $menu_obj->updatePosition($way, $position))
{
echo 'ok position '.(int)$position.' for '.$obj.' '.(int)$pos[2]."\r\n";
}
else
echo '{"hasError" : true, "errors" : "Can not update '.$obj.' '.(int)$id.' to position '.(int)$position.' "}';
else
echo '{"hasError" : true, "errors" : "This '.$obj.' ('.(int)$id.') cannot be loaded"}';
break;
}
}
}
}
}

View File

@ -0,0 +1,35 @@
<?php
/*
* 2007-2014 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
* @author PrestaShop SA <contact@prestashop.com>
* @copyright 2007-2014 PrestaShop SA
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*/
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Location: ../");
exit;

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

View File

@ -0,0 +1,3 @@
<!-- Block Advmenu module -->
<!-- /Block Advmenu module -->

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -0,0 +1,52 @@
*CRITICAL* 2016/04/04 - 10:42:46: File name: ErpProductCombination.php - Line No: 293
Message: HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Mon, 04 Apr 2016 08:47:09 GMT
Content-Type: text/xml
Content-Length: 325
Connection: close
<?xml version='1.0'?>
<methodResponse>
<fault>
<value><struct>
<member>
<name>faultCode</name>
<value><string>warning -- Attention !
La quantité ne peut pas être négative.</string></value>
</member>
<member>
<name>faultString</name>
<value><string></string></value>
</member>
</struct></value>
</fault>
</methodResponse>
*CRITICAL* 2016/04/04 - 10:42:47: File name: ErpProductCombination.php - Line No: 293
Message: HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Mon, 04 Apr 2016 08:47:09 GMT
Content-Type: text/xml
Content-Length: 325
Connection: close
<?xml version='1.0'?>
<methodResponse>
<fault>
<value><struct>
<member>
<name>faultCode</name>
<value><string>warning -- Attention !
La quantité ne peut pas être négative.</string></value>
</member>
<member>
<name>faultString</name>
<value><string></string></value>
</member>
</struct></value>
</fault>
</methodResponse>

265
override/classes/Cart.php Normal file
View File

@ -0,0 +1,265 @@
<?php
class Cart extends CartCore
{
public function getProducts($refresh = false, $id_product = false, $id_country = null)
{
if (!$this->id) {
return array();
}
// Product cache must be strictly compared to NULL, or else an empty cart will add dozens of queries
if ($this->_products !== null && !$refresh) {
// Return product row with specified ID if it exists
if (is_int($id_product)) {
foreach ($this->_products as $product) {
if ($product['id_product'] == $id_product) {
return array($product);
}
}
return array();
}
return $this->_products;
}
// Build query
$sql = new DbQuery();
// Build SELECT
$sql->select('cp.`id_product_attribute`, cp.`id_product`, cp.`quantity` AS cart_quantity, cp.id_shop, pl.`name`, p.`is_virtual`,
pl.`description_short`, pl.`available_now`, pl.`available_later`, product_shop.`id_category_default`, p.`id_supplier`,
p.`id_manufacturer`, p.`nb_per_box`, product_shop.`on_sale`, product_shop.`ecotax`, product_shop.`additional_shipping_cost`,
product_shop.`available_for_order`, product_shop.`price`, product_shop.`active`, product_shop.`unity`, product_shop.`unit_price_ratio`,
stock.`quantity` AS quantity_available, p.`width`, p.`height`, p.`depth`, stock.`out_of_stock`, p.`weight`,
p.`date_add`, p.`date_upd`, IFNULL(stock.quantity, 0) as quantity, pl.`link_rewrite`, cl.`link_rewrite` AS category,
CONCAT(LPAD(cp.`id_product`, 10, 0), LPAD(IFNULL(cp.`id_product_attribute`, 0), 10, 0), IFNULL(cp.`id_address_delivery`, 0)) AS unique_id, cp.id_address_delivery,
product_shop.advanced_stock_management, ps.product_supplier_reference supplier_reference');
// Build FROM
$sql->from('cart_product', 'cp');
// Build JOIN
$sql->leftJoin('product', 'p', 'p.`id_product` = cp.`id_product`');
$sql->innerJoin('product_shop', 'product_shop', '(product_shop.`id_shop` = cp.`id_shop` AND product_shop.`id_product` = p.`id_product`)');
$sql->leftJoin('product_lang', 'pl', '
p.`id_product` = pl.`id_product`
AND pl.`id_lang` = '.(int)$this->id_lang.Shop::addSqlRestrictionOnLang('pl', 'cp.id_shop')
);
$sql->leftJoin('category_lang', 'cl', '
product_shop.`id_category_default` = cl.`id_category`
AND cl.`id_lang` = '.(int)$this->id_lang.Shop::addSqlRestrictionOnLang('cl', 'cp.id_shop')
);
$sql->leftJoin('product_supplier', 'ps', 'ps.`id_product` = cp.`id_product` AND ps.`id_product_attribute` = cp.`id_product_attribute` AND ps.`id_supplier` = p.`id_supplier`');
// @todo test if everything is ok, then refactorise call of this method
$sql->join(Product::sqlStock('cp', 'cp'));
// Build WHERE clauses
$sql->where('cp.`id_cart` = '.(int)$this->id);
if ($id_product) {
$sql->where('cp.`id_product` = '.(int)$id_product);
}
$sql->where('p.`id_product` IS NOT NULL');
// Build ORDER BY
$sql->orderBy('cp.`date_add`, cp.`id_product`, cp.`id_product_attribute` ASC');
if (Customization::isFeatureActive()) {
$sql->select('cu.`id_customization`, cu.`quantity` AS customization_quantity');
$sql->leftJoin('customization', 'cu',
'p.`id_product` = cu.`id_product` AND cp.`id_product_attribute` = cu.`id_product_attribute` AND cu.`id_cart` = '.(int)$this->id);
$sql->groupBy('cp.`id_product_attribute`, cp.`id_product`, cp.`id_shop`');
} else {
$sql->select('NULL AS customization_quantity, NULL AS id_customization');
}
if (Combination::isFeatureActive()) {
$sql->select('
product_attribute_shop.`price` AS price_attribute, product_attribute_shop.`ecotax` AS ecotax_attr,
IF (IFNULL(pa.`reference`, \'\') = \'\', p.`reference`, pa.`reference`) AS reference,
(p.`weight`+ pa.`weight`) weight_attribute,
IF (IFNULL(pa.`ean13`, \'\') = \'\', p.`ean13`, pa.`ean13`) AS ean13,
IF (IFNULL(pa.`upc`, \'\') = \'\', p.`upc`, pa.`upc`) AS upc,
IFNULL(product_attribute_shop.`minimal_quantity`, product_shop.`minimal_quantity`) as minimal_quantity,
IF(product_attribute_shop.wholesale_price > 0, product_attribute_shop.wholesale_price, product_shop.`wholesale_price`) wholesale_price
');
$sql->leftJoin('product_attribute', 'pa', 'pa.`id_product_attribute` = cp.`id_product_attribute`');
$sql->leftJoin('product_attribute_shop', 'product_attribute_shop', '(product_attribute_shop.`id_shop` = cp.`id_shop` AND product_attribute_shop.`id_product_attribute` = pa.`id_product_attribute`)');
} else {
$sql->select(
'p.`reference` AS reference, p.`ean13`,
p.`upc` AS upc, product_shop.`minimal_quantity` AS minimal_quantity, product_shop.`wholesale_price` wholesale_price'
);
}
$sql->select('image_shop.`id_image` id_image, il.`legend`');
$sql->leftJoin('image_shop', 'image_shop', 'image_shop.`id_product` = p.`id_product` AND image_shop.cover=1 AND image_shop.id_shop='.(int)$this->id_shop);
$sql->leftJoin('image_lang', 'il', 'il.`id_image` = image_shop.`id_image` AND il.`id_lang` = '.(int)$this->id_lang);
$result = Db::getInstance()->executeS($sql);
// Reset the cache before the following return, or else an empty cart will add dozens of queries
$products_ids = array();
$pa_ids = array();
if ($result) {
foreach ($result as $key => $row) {
$products_ids[] = $row['id_product'];
$pa_ids[] = $row['id_product_attribute'];
$specific_price = SpecificPrice::getSpecificPrice($row['id_product'], $this->id_shop, $this->id_currency, $id_country, $this->id_shop_group, $row['cart_quantity'], $row['id_product_attribute'], $this->id_customer, $this->id);
if ($specific_price) {
$reduction_type_row = array('reduction_type' => $specific_price['reduction_type']);
} else {
$reduction_type_row = array('reduction_type' => 0);
}
$result[$key] = array_merge($row, $reduction_type_row);
}
}
// Thus you can avoid one query per product, because there will be only one query for all the products of the cart
Product::cacheProductsFeatures($products_ids);
Cart::cacheSomeAttributesLists($pa_ids, $this->id_lang);
$this->_products = array();
if (empty($result)) {
return array();
}
$ecotax_rate = (float)Tax::getProductEcotaxRate($this->{Configuration::get('PS_TAX_ADDRESS_TYPE')});
$apply_eco_tax = Product::$_taxCalculationMethod == PS_TAX_INC && (int)Configuration::get('PS_TAX');
$cart_shop_context = Context::getContext()->cloneContext();
foreach ($result as &$row) {
if (isset($row['ecotax_attr']) && $row['ecotax_attr'] > 0) {
$row['ecotax'] = (float)$row['ecotax_attr'];
}
$row['stock_quantity'] = (int)$row['quantity'];
// for compatibility with 1.2 themes
$row['quantity'] = (int)$row['cart_quantity'];
if (isset($row['id_product_attribute']) && (int)$row['id_product_attribute'] && isset($row['weight_attribute'])) {
$row['weight'] = (float)$row['weight_attribute'];
}
if (Configuration::get('PS_TAX_ADDRESS_TYPE') == 'id_address_invoice') {
$address_id = (int)$this->id_address_invoice;
} else {
$address_id = (int)$row['id_address_delivery'];
}
if (!Address::addressExists($address_id)) {
$address_id = null;
}
if ($cart_shop_context->shop->id != $row['id_shop']) {
$cart_shop_context->shop = new Shop((int)$row['id_shop']);
}
$address = Address::initialize($address_id, true);
$id_tax_rules_group = Product::getIdTaxRulesGroupByIdProduct((int)$row['id_product'], $cart_shop_context);
$tax_calculator = TaxManagerFactory::getManager($address, $id_tax_rules_group)->getTaxCalculator();
$row['price_without_reduction'] = Product::getPriceStatic(
(int)$row['id_product'],
true,
isset($row['id_product_attribute']) ? (int)$row['id_product_attribute'] : null,
6,
null,
false,
false,
$row['cart_quantity'],
false,
(int)$this->id_customer ? (int)$this->id_customer : null,
(int)$this->id,
$address_id,
$specific_price_output,
true,
true,
$cart_shop_context
);
$row['price_with_reduction'] = Product::getPriceStatic(
(int)$row['id_product'],
true,
isset($row['id_product_attribute']) ? (int)$row['id_product_attribute'] : null,
6,
null,
false,
true,
$row['cart_quantity'],
false,
(int)$this->id_customer ? (int)$this->id_customer : null,
(int)$this->id,
$address_id,
$specific_price_output,
true,
true,
$cart_shop_context
);
$row['price'] = $row['price_with_reduction_without_tax'] = Product::getPriceStatic(
(int)$row['id_product'],
false,
isset($row['id_product_attribute']) ? (int)$row['id_product_attribute'] : null,
6,
null,
false,
true,
$row['cart_quantity'],
false,
(int)$this->id_customer ? (int)$this->id_customer : null,
(int)$this->id,
$address_id,
$specific_price_output,
true,
true,
$cart_shop_context
);
switch (Configuration::get('PS_ROUND_TYPE')) {
case Order::ROUND_TOTAL:
$row['total'] = $row['price_with_reduction_without_tax'] * (int)$row['cart_quantity'];
$row['total_wt'] = $row['price_with_reduction'] * (int)$row['cart_quantity'];
break;
case Order::ROUND_LINE:
$row['total'] = Tools::ps_round($row['price_with_reduction_without_tax'] * (int)$row['cart_quantity'], _PS_PRICE_COMPUTE_PRECISION_);
$row['total_wt'] = Tools::ps_round($row['price_with_reduction'] * (int)$row['cart_quantity'], _PS_PRICE_COMPUTE_PRECISION_);
break;
case Order::ROUND_ITEM:
default:
$row['total'] = Tools::ps_round($row['price_with_reduction_without_tax'], _PS_PRICE_COMPUTE_PRECISION_) * (int)$row['cart_quantity'];
$row['total_wt'] = Tools::ps_round($row['price_with_reduction'], _PS_PRICE_COMPUTE_PRECISION_) * (int)$row['cart_quantity'];
break;
}
$row['price_wt'] = $row['price_with_reduction'];
$row['description_short'] = Tools::nl2br($row['description_short']);
// check if a image associated with the attribute exists
if ($row['id_product_attribute']) {
$row2 = Image::getBestImageAttribute($row['id_shop'], $this->id_lang, $row['id_product'], $row['id_product_attribute']);
if ($row2) {
$row = array_merge($row, $row2);
}
}
$row['reduction_applies'] = ($specific_price_output && (float)$specific_price_output['reduction']);
$row['quantity_discount_applies'] = ($specific_price_output && $row['cart_quantity'] >= (int)$specific_price_output['from_quantity']);
$row['id_image'] = Product::defineProductImage($row, $this->id_lang);
$row['allow_oosp'] = Product::isAvailableWhenOutOfStock($row['out_of_stock']);
$row['features'] = Product::getFeaturesStatic((int)$row['id_product']);
if (array_key_exists($row['id_product_attribute'].'-'.$this->id_lang, self::$_attributesLists)) {
$row = array_merge($row, self::$_attributesLists[$row['id_product_attribute'].'-'.$this->id_lang]);
}
$row = Product::getTaxesInformations($row, $cart_shop_context);
$this->_products[] = $row;
}
return $this->_products;
}
}

View File

@ -310,4 +310,84 @@ class AuthController extends AuthControllerCore
$this->context->smarty->assign('account_error', $this->errors);
}
}
protected function processSubmitLogin()
{
Hook::exec('actionBeforeAuthentication');
$passwd = trim(Tools::getValue('passwd'));
$_POST['passwd'] = null;
$email = trim(Tools::getValue('email'));
if (empty($email)) {
$this->errors[] = Tools::displayError('An email address required.');
} elseif (!Validate::isEmail($email)) {
$this->errors[] = Tools::displayError('Invalid email address.');
} elseif (empty($passwd)) {
$this->errors[] = Tools::displayError('Password is required.');
} elseif (!Validate::isPasswd($passwd)) {
$this->errors[] = Tools::displayError('Invalid password.');
} else {
$customer = new Customer();
$authentication = $customer->getByEmail(trim($email), trim($passwd));
if (isset($authentication->active) && !$authentication->active) {
$this->errors[] = Tools::displayError('Your account isn\'t available at this time, please contact us');
} elseif (!$authentication || !$customer->id) {
$this->errors[] = Tools::displayError('Authentication failed.');
} else {
$this->context->cookie->id_compare = isset($this->context->cookie->id_compare) ? $this->context->cookie->id_compare: CompareProduct::getIdCompareByIdCustomer($customer->id);
$this->context->cookie->id_customer = (int)($customer->id);
$this->context->cookie->customer_lastname = $customer->lastname;
$this->context->cookie->customer_firstname = $customer->firstname;
$this->context->cookie->logged = 1;
$customer->logged = 1;
$this->context->cookie->is_guest = $customer->isGuest();
$this->context->cookie->passwd = $customer->passwd;
$this->context->cookie->email = $customer->email;
// Add customer to the context
$this->context->customer = $customer;
if (Configuration::get('PS_CART_FOLLOWING') && (empty($this->context->cookie->id_cart) || Cart::getNbProducts($this->context->cookie->id_cart) == 0) && $id_cart = (int)Cart::lastNoneOrderedCart($this->context->customer->id)) {
$this->context->cart = new Cart($id_cart);
} else {
$id_carrier = (int)$this->context->cart->id_carrier;
$this->context->cart->id_carrier = 0;
$this->context->cart->setDeliveryOption(null);
$this->context->cart->id_address_delivery = (int)Address::getFirstCustomerAddressId((int)($customer->id));
$this->context->cart->id_address_invoice = (int)Address::getFirstCustomerAddressId((int)($customer->id));
}
$this->context->cart->id_customer = (int)$customer->id;
$this->context->cart->secure_key = $customer->secure_key;
if ($this->ajax && isset($id_carrier) && $id_carrier && Configuration::get('PS_ORDER_PROCESS_TYPE')) {
$delivery_option = array($this->context->cart->id_address_delivery => $id_carrier.',');
$this->context->cart->setDeliveryOption($delivery_option);
}
$this->context->cart->save();
$this->context->cookie->id_cart = (int)$this->context->cart->id;
$this->context->cookie->write();
$this->context->cart->autosetProductAddress();
Hook::exec('actionAuthentication', array('customer' => $this->context->customer));
// Login information have changed, so we check if the cart rules still apply
CartRule::autoRemoveFromCart($this->context);
CartRule::autoAddToCart($this->context);
if (!$this->ajax) {
Tools::redirect($this->context->link->getCategoryLink(IndexController::CATEGORY));
}
}
}
if ($this->ajax) {
$return = array(
'hasError' => !empty($this->errors),
'errors' => $this->errors,
'token' => Tools::getToken(false)
);
$this->ajaxDie(Tools::jsonEncode($return));
} else {
$this->context->smarty->assign('authentification_error', $this->errors);
}
}
}

View File

@ -2,6 +2,13 @@
class CategoryController extends CategoryControllerCore
{
public function init()
{
$this->addJS(_THEME_JS_DIR_.'tools/flexslider.js');
parent::init();
}
public function initContent()
{
if($this->category->id == Category::CATEGORY_COLLECTION)

View File

@ -13,6 +13,12 @@ class OrderConfirmationController extends OrderConfirmationControllerCore
$summary = $cart->getSummaryDetails();
$productNumber = 0;
foreach($summary['products'] as $product)
{
$productNumber += $product['cart_quantity'];
}
$this->context->smarty->assign(
array(
'customer' => $customer,
@ -25,6 +31,8 @@ class OrderConfirmationController extends OrderConfirmationControllerCore
'gift_products' => $summary['gift_products'],
'noDeleteButton' => true,
'productNumber' => $productNumber,
'total_products' => $summary['total_products'],
'total_products_wt' => $summary['total_products_wt'],
'total_shipping_tax_exc' => $summary['total_shipping_tax_exc'],
'total_price' => $summary['total_price'],

View File

@ -18,6 +18,12 @@ class ParentOrderController extends ParentOrderControllerCore
protected function _assignSummaryInformations()
{
if(Tools::getIsset('emptyCart'))
{
$this->context->cart->delete();
Tools::redirect($this->context->link->getPageLink('order'));
}
$summary = $this->context->cart->getSummaryDetails();
$customizedDatas = Product::getAllCustomizedDatas($this->context->cart->id);
@ -69,12 +75,6 @@ class ParentOrderController extends ParentOrderControllerCore
$product['is_discounted'] = $product['price_without_specific_price'] != $product['price_wt'];
}
$summary['nbProducts'] = 0;
foreach ($summary['products'] as $product)
{
$summary['nbProducts'] += (int)$product['cart_quantity'];
}
// Get available cart rules and unset the cart rules already in the cart
$available_cart_rules = CartRule::getCustomerCartRules($this->context->language->id, (isset($this->context->customer->id) ? $this->context->customer->id : 0), true, true, true, $this->context->cart);
$cart_cart_rules = $this->context->cart->getCartRules();
@ -122,6 +122,7 @@ class ParentOrderController extends ParentOrderControllerCore
'HOOK_SHOPPING_CART_EXTRA' => Hook::exec('displayShoppingCart', $summary),
'DISPLAY_CART_SUMMARY_STOCK_INFO' => Hook::exec('displayCartSummaryStockInfo', $summary)
));
}
}

View File

@ -13,18 +13,17 @@
{foreach $option_list as $key => $option}
<div class="delivery-option clearfix delivery-{$key|replace:',':''} radio-box">
<div class="inner">
<div class="lg2 xs3 xxs2 radio-button valign-middle">
<div class="sm3 xs3 xxs2 radio-button valign-middle">
<input id="delivery_option_{$id_address|intval}_{$option@index}" class="custom-input inline delivery_option_radio" type="radio" name="delivery_option[{$id_address|intval}]" data-key="{$key}" data-id_address="{$id_address|intval}" value="{$key}"{if isset($delivery_option[$id_address]) && $delivery_option[$id_address] == $key} checked="checked"{/if} />
{foreach $option.carrier_list as $carrier}
{if $carrier.logo}
<img class="hidden-xs hidden-xxs" src="{$carrier.logo|escape:'htmlall':'UTF-8'}" alt="{$carrier.instance->name|escape:'htmlall':'UTF-8'}"/>
{/if}
{/foreach}
<input id="delivery_option_{$id_address|intval}_{$option@index}" class="custom-input inline delivery_option_radio" type="radio" name="delivery_option[{$id_address|intval}]" data-key="{$key}" data-id_address="{$id_address|intval}" value="{$key}"{if isset($delivery_option[$id_address]) && $delivery_option[$id_address] == $key} checked="checked"{/if} />
</div>
<div class="lg8 xs6 xxs5 desc">
<div class="sm7 xs6 xxs5 desc">
<span class="carrier-name">{$carrier.instance->name|escape:'htmlall':'UTF-8'}</span>
{if isset($carrier.instance->delay[$cookie->id_lang])}
{$carrier.instance->delay[$cookie->id_lang]|escape:'htmlall':'UTF-8'}
{/if}

View File

@ -205,8 +205,27 @@ body.content_only { margin: 0 }
#footer {
background: #1f1f1f;
color: #fff;
padding: 45px 15px;
}
#footer li {
padding-right: 5%;
}
#footer li .title {
border-right: 1px solid #fff;
display: block;
font-family: 'ITCAvantGarde';
font-size: 14px;
padding: 0 0 10px 0;
text-transform: uppercase;
}
#footer li:last-child .title { border: 0; }
#footer li .subtitle {
border-right: 1px solid #fff;
display: block;
}
#footer li:last-child .subtitle { border: 0; }
@media (max-width: 1199px) {
@ -248,8 +267,8 @@ body.content_only { margin: 0 }
color: #828282;
}
#order_step li.step_current { color: #fff; z-index: 5; }
#order_step li.step_done { background: #f25f0f; border-left: 1px solid #bb5100; color: #fff }
#order_step li.step_done a { color: #fff; font-weight: 600 }
#order_step li.step_done { color: #828282 }
#order_step li.step_done a { color: #828282; text-decoration: none; }
#order_step li a { color: #333; }
#shopping-cart-products {
@ -337,7 +356,9 @@ body.content_only { margin: 0 }
width: 55px;
}
#shopping-cart-products .product-stock {
font-size: 12px;
font-size: 13px;
line-height: 15px;
padding: 0 60px;
}
#shopping-cart-products .product-stock span:before {
background: #3fd9ac;
@ -382,87 +403,147 @@ body.content_only { margin: 0 }
}
#shopping-cart-calcul .discount_form {
background: #fff;
border: 1px solid #f0f0f0;
border: 3px solid #f0f0f0;
padding: 20px;
position: relative;
z-index: 1
}
#shopping-cart-calcul .discount_form .inner {
position: relative;
overflow: hidden;
}
#shopping-cart-calcul .discount_form label {
display: block;
margin-bottom: 25px;
position: relative;
}
#shopping-cart-calcul .discount_form label span {
background: #fff;
color: #363842;
display: block;
font-family: 'ITCAvantGarde';
font-size: 12px;
padding: 0 0 20px 0;
margin-bottom: 10px;
position: relative;
text-transform: uppercase;
z-index: 3;
}
#shopping-cart-calcul .discount_form label:before {
box-shadow: 0 0 20px 0px rgba(0, 0, 0, 0.3);
border-radius: 500px;
content: "";
display: block;
height: 40%;
left: 20%;
position: absolute;
top: 50%;
width: 60%;
z-index: 1;
}
#shopping-cart-calcul .discount_form .discount_name {
background: #f4f4f4;
border: 1px solid #e1e1e1;
border-radius: 2px;
color: #333;
float: left;
height: 40px;
padding: 0 65px 0 10px;
width: 70%;
}
#shopping-cart-calcul .discount_form .btn {
background: #202020;
background: -webkit-linear-gradient(top, #202020, #0a0a0a);
background: -o-linear-gradient(top, #202020, #0a0a0a);
background: -moz-linear-gradient(top, #202020, #0a0a0a);
background: linear-gradient(to top, #202020, #0a0a0a);
border-color: #363842;
border-radius: 2px;
color: #fff;
float: right;
font-family: 'ITCAvantGarde';
font-size: 14px;
height: 40px;
line-height: 40px;
padding: 0;
text-transform: uppercase;
text-align: center;
width: 28%;
}
#shopping-cart-calcul .featured-voucher {
background: #fff;
border: 3px solid #f0f0f0;
margin-bottom: 30px;
padding: 25px;
position: relative;
z-index: 1
}
#shopping-cart-calcul .discount_form .inner {
position: relative;
}
#shopping-cart-calcul .discount_form label {
#shopping-cart-calcul .featured-voucher .title {
background: #fff;
color: #363842;
display: inline-block;
font-family: 'Oswald';
font-size: 16px;
display: block;
font-family: 'ITCAvantGarde';
font-size: 12px;
padding: 10px 0;
margin-bottom: 10px;
}
#shopping-cart-calcul .discount_form .discount_name {
border: 1px solid #363842;
height: 40px;
padding: 0 65px 0 10px;
width: 100%;
}
#shopping-cart-calcul .discount_form .btn {
background: #363842;
border-color: #363842;
border-radius: 0 2px 2px 0;
font-family: 'OpenSans';
font-size: 16px;
height: 40px;
line-height: 40px;
padding: 0;
position: absolute;
right: 0;
position: relative;
text-transform: uppercase;
text-align: center;
top: 0;
width: 65px;
z-index: 3;
}
#shopping-cart-calcul .featured-voucher .voucher_name {
cursor: pointer;
padding-left: 15px;
text-decoration: underline;
}
#shopping-cart-calcul .line {
background: #f1f1f1;
border-top: 1px solid #e5e5e5;
color: #333;
clear: both;
font-family: 'OpenSans';
font-size: 0;
overflow: hidden;
padding: 10px 0;
padding: 5px 0;
}
#shopping-cart-calcul .inner .line:first-child { padding-top: 0 }
#shopping-cart-calcul .line.total_price { border-top: 3px solid #f4f4f4; margin-top: 10px; }
#shopping-cart-calcul .line .price_discount_delete {
text-decoration: none;
background: url('../img/delete-btn.png') no-repeat center center;
display: inline-block;
height: 21px;
margin-right: 10px;
width: 17px;
}
#shopping-cart-calcul .line .price_discount_delete i {
color: #999;
font-size: 16px;
}
#shopping-cart-calcul .line:first-child { border: 0 }
#shopping-cart-calcul .line > div {
font-size: 14px;
font-size: 13px;
float: none;
display: inline-block;
vertical-align: middle;
}
#shopping-cart-calcul .line > div:last-child {
font-family: 'Oswald';
font-size: 24px;
font-family: 'ITCAvantGarde';
font-size: 16px;
padding: 5px 15px;
text-align: right;
}
#shopping-cart-calcul .line.freeshipping > div:last-child { font-size: 16px; }
#shopping-cart-calcul .line #total_tax {
font-family: 'Oswald';
font-size: 24px;
#shopping-cart-calcul .line.total_price {
color: #bfa56d;
font-family: 'ITCAvantGarde';
padding: 15px 0;
}
#shopping-cart-calcul #total_price {
color: #f25f0f;
font-size: 48px;
line-height: 36px;
}
.cart_navigation {
#shopping-cart-calcul .line.total_price > div:first-child {
color: #bfa56d;
font-size: 14px;
text-transform: uppercase;
}
#shopping-cart-calcul .line.total_price > div:last-child {
color: #bfa56d;
font-size: 30px;
}
#shopping-cart .cart_navigation {
padding: 0 15px;
}
.cart_navigation > *:first-child {
float: right;
@ -470,6 +551,9 @@ body.content_only { margin: 0 }
.cart_navigation .btn2 {
float: left;
}
#shopping-cart .continue {
margin-top: 30px;
}
@ -542,6 +626,29 @@ body.content_only { margin: 0 }
#index h1 {
margin-top: 25px;
}
#auth .box > .inner {
background: #1f1f1f;
border: 0;
padding: 50px 100px;
text-align: center;
}
#auth .box .title {
background: none;
color: #fff;
display: block;
font-family: "DancingScript";
font-size: 26px;
padding: 0;
text-transform: none;
}
#auth .box .title:after {
background: #fff;
content: "";
display: block;
height: 1px;
margin: 20px auto;
width: 35px;
}
#auth form .lost_password {
color: #bfa56d;
display: block;
@ -574,65 +681,48 @@ body .addresses {
padding: 50px 15px;
}
.addresses .addressesAreEquals {
padding: 11px 0;
padding: 0 0 10px 0;
margin: 0
}
.addresses ul#address_delivery,
.addresses ul#address_invoice {
padding: 30px 0 0 0;
.addresses #address_delivery_form {
margin-bottom: 20px;
}
.addresses .flex-ctn {
display: flex;
flex-direction: row;
flex-wrap: wrap;
}
.addresses .box-content {
padding: 0 75px;
}
.addresses .address li {
color: #67686d;
height: 20px;
font-family: 'OpenSans';
font-size: 14px;
font-size: 13px;
}
.addresses .address_update { text-align: center }
.addresses ul#address_invoice .address_update a { display: none }
.addresses #address_invoice_form {
color: #67686d;
font-size: 14px;
font-style: italic;
height: 0;
overflow: hidden;
-webkit-transition: all 0.3s ease 0s;
-o-transition: all 0.3s ease 0s;
transition: all 0.3s ease 0s;
}
.addresses #address_invoice_form.open { height: 50px; overflow: visible; }
.addresses #address_invoice_form a { display: block; }
.addresses #address_delivery_form > label,
.addresses #address_invoice_form > label {
font-size: 20px;
font-weight: 900;
text-transform: uppercase;
}
.addresses .address_add {
display: block;
margin: 0 0 45px 0;
overflow: hidden;
text-align: center
}
.addresses #order-carrier-list h3 {
font-size: 20px;
font-weight: 900;
text-transform: uppercase;
.addresses .carriers-list {
margin-bottom: 30px;
}
.addresses .carriers-list .title {
background: #202020;
border-radius: 2px;
color: #fff;
font-family: 'ITCAvantGarde';
font-size: 14px;
padding: 20px 0;
text-transform: uppercase;
text-align: center;
}
.addresses #order-carrier-list .delivery-option {
cursor: pointer;
position: relative;
}
.addresses #order-carrier-list .delivery-option .inner {
background: #f1f1f1;
border-bottom: 1px solid #ececec;
font-size: 0;
min-height: 104px;
padding: 10px 15px;
border-bottom: 3px solid #f4f4f4;
font-size: 0;
padding: 18px 0 15px;
position: relative;
z-index: 2;
}
@ -643,21 +733,59 @@ body .addresses {
display: inline-block;
vertical-align: middle;
}
.addresses .radio-button {
min-height: 102px;
padding-left: 0;
.addresses #order-carrier-list .radio-button {
padding-left: 45px;
text-align: center;
}
.addresses .radio-button img {
width: 115px;
.addresses #order-carrier-list .radio-button .custom-radio {
left: 0;
margin-top: -13px;
position: absolute;
top: 50%;
}
.addresses .radio-button img + .custom-radio { display: inline-block; margin: 0 0 0 20px }
.addresses .radio-button .custom-radio { border-radius: 50%; display: block; margin: 39px 0 0 138px; }
.addresses #order-carrier-list .delivery-option .inner > .price {
color: #f25f0f;
font-family: 'Oswald';
.addresses #order-carrier-list .radio-button img {
}
.addresses #order-carrier-list .delivery-option .inner .desc {
font-size: 13px;
}
.addresses #order-carrier-list .delivery-option .inner .desc .carrier-name {
display: block;
font-family: 'ITCAvantGarde';
margin-bottom: 5px;
text-transform: uppercase;
}
.addresses #order-carrier-list .delivery-option .inner .price {
color: #bfa56d;
font-family: 'ITCAvantGarde';
font-size: 18px;
text-transform: uppercase;
}
.addresses .message {
font-size: 13px;
margin-bottom: 30px;
text-align: center;
}
.addresses .message h2 {
background: url('../img/shadow.png') no-repeat center bottom;
color: #000;
display: block;
font-family: "ITCAvantGarde";
font-size: 14px;
margin-bottom: 15px;
padding: 10px 0 30px 0;
text-transform: uppercase;
}
.addresses .message textarea {
background: #f4f4f4;
border: 1px solid #e1e1e1;
border-radius: 4px;
font-family: "OpenSans";
font-size: 13px;
padding: 15px;
width: 100%;
min-height: 150px;
}
@media (max-width: 991px) {
.addresses #address_invoice_form label { margin-top: 30px; }
@ -675,98 +803,88 @@ body .addresses {
#auth .box .inner { padding: 25px 15px; }
}
@media (max-width: 500px) {
.addresses #order-carrier-list .delivery-option .price { font-size: 14px }
}
.order-paiement {
padding: 30px 15px;
}
.order-paiement .paiement-module {
position: relative;
.order-paiement .paiement-list {
margin-bottom: 30px;
}
.order-paiement .paiement-module .inner {
background: #f1f1f1;
color: #333;
font-family: 'OpenSans';
overflow: hidden;
padding: 15px 10px;
position: relative;
z-index: 2;
.order-paiement .paiement-list .title {
background: #202020;
border-radius: 2px;
color: #fff;
font-family: 'ITCAvantGarde';
font-size: 14px;
padding: 20px 0;
text-transform: uppercase;
}
.order-paiement .paiement-module .inner > div {
font-size: 14px;
.order-paiement .paiement-module {
position: relative;
}
.order-paiement .resume .inner {
border: 1px solid #e3e3e4;
color: #67686d;
font-size: 14px;
padding: 0 10px;
.order-paiement .paiement-module .inner {
border-bottom: 3px solid #f4f4f4;
color: #333;
font-family: 'OpenSans';
overflow: hidden;
padding: 15px 10px;
position: relative;
z-index: 2;
}
.order-paiement .paiement-module .inner > div {
color: #000;
font-family: 'ITCAvantGarde';
font-size: 14px;
text-transform: uppercase;
}
.order-paiement .paiement-module .inner > div img {
display: block;
margin: 0 auto;
max-width: 100%
}
.order-paiement .resume .title {
}
.order-paiement .resume-cart h3 {
border-bottom: 2px solid #e3e3e4;
display: block;
font-family: "Oswald";
font-size: 16px;
padding: 20px 0;
text-align: center;
text-transform: uppercase;
}
.order-paiement .resume-cart .product { border-bottom: 1px solid #e3e3e4; padding: 20px 0 }
.order-paiement .resume-cart .product-name span:first-child {
font-family: 'OpenSans';
line-height: 20px;
}
.order-paiement .resume-cart .product-name span:last-child {
font-size: 20px;
line-height: 20px;
text-transform: uppercase;
}
.order-paiement .resume-cart .product-name span:last-child .barre { font-weight: 300; font-size: 14px; }
.order-paiement .resume-cart .resume-products .product-attributes .taille {
font-family: 'OpenSans';
font-size: 14px;
font-weight: 300;
text-align: left;
text-transform: none;
}
.order-paiement .resume-cart > .inner { padding: 15px; }
.order-paiement .resume-price {
background: #e3e3e4;
color: #67686d;
padding: 12px 10px;
padding: 0 15px;
margin: 0 -10px;
}
.order-paiement .resume-price > div {
padding: 6px 0;
}
.order-paiement .resume-products .product > div > span:last-child,
.order-paiement .resume-price > div > span:last-child {
font-family: 'Oswald';
font-family: 'ITCAvantGarde';
text-align: right;
}
.order-paiement .resume-price > div > span:first-child {
font-family: 'OpenSans';
font-size: 14px;
line-height: 20px;
}
.order-paiement .resume-price > div > span:last-child {
font-size: 20px;
font-size: 16px;
line-height: 20px;
text-transform: uppercase;
}
.order-paiement .resume-price > div.price { padding-top: 30px }
.order-paiement .resume-price > div.price > span:last-child { color: #f25f0f; font-size: 26px; }
.order-paiement .cgv {
background: #f1f1f1;
color: #333;
.order-paiement .resume-price > div > span:first-child {
font-family: 'OpenSans';
font-size: 13px;
line-height: 20px;
text-align: left;
}
.order-paiement .resume-price > div > span:last-child {
}
.order-paiement .resume-price > div.price > span:last-child { color: #bfa56d; font-size: 30px; }
.order-paiement .cgv .title {
background: #202020;
border-radius: 2px;
color: #fff;
font-family: 'ITCAvantGarde';
font-size: 14px;
margin: 20px 0 0 0;
overflow: hidden;
padding: 25px;
padding: 20px 0;
text-transform: uppercase;
}
.order-paiement .cgv p {
.order-paiement .cgv .box-content {
border: 3px solid #f4f4f4;
border-top: 0;
padding: 20px;
margin: 0;
}
.order-paiement .cart_navigation > div > span {
@ -778,13 +896,48 @@ body .addresses {
margin: -17px 0 5px 0;
}
.order-paiement .cgv label a {
color: #ee7c03;
display: inline-block;
font-family: 'OpenSans';
font-size: 14px;
line-height: 16px;
}
.order-paiement .cgv .box-content {
background: #fff;
background: -webkit-linear-gradient(top, #f4f4f4, #fff);
background: -o-linear-gradient(top, #f4f4f4, #fff);
background: -moz-linear-gradient(top, #f4f4f4, #fff);
background: linear-gradient(to top, #f4f4f4, #fff);
}
.order-paiement .cgv .box-content .custom-checkbox {
text-align: right;
}
.order-paiement .cgv .box-content .custom-checkbox:before {
margin-right: 0;
}
.order-paiement .cgv .box-content .custom-checkbox input {
left: auto;
right: 0;
}
.order-paiement .cgv label {
font-size: 13px;
}
.order-paiement .cgv label a {
color: #c69462;
display: block;
font-family: 'OpenSans';
margin: 5px 0;
}
.order-paiement .cgv .validate-payment {
margin-top: 30px;
}
.order-paiement .cgv .validate-payment button {
padding: 10px 10px;
margin-bottom: 10px;
width: 100%;
}
.order-paiement .cgv .validate-payment span {
display: block;
font-size: 13px;
}
#order-confirmation .prices { margin-top: 30px }
#order-confirmation .addresses-list { text-align: center; }
@media (max-width: 1199px) {
.order-paiement .submit { text-align: center }
}
@ -808,78 +961,11 @@ body .addresses {
/*************************************************************************************************************
******************************************* COMPTE *******************************************
**************************************************************************************************************/
.account .menu-account > div {
border: 1px solid #e3e3e4;
padding: 0 10px;
}
.account .menu-account .title {
border-bottom: 2px solid #e3e3e4;
color: #67686d;
display: block;
font-size: 16px;
font-family: 'Oswald';
padding: 20px 0;
text-align: center;
text-transform: uppercase;
}
.account .menu-account .title a {
text-decoration: none;
}
.account .menu-account ul {
padding: 10px 0;
}
.account .menu-account li a {
color: #67686d;
display: block;
font-size: 14px;
margin: 3px 0;
padding: 7px 0 7px 35px;
position: relative;
text-decoration: none;
}
.account .menu-account li a:hover, .account .menu-account li a.active { background: #eae9e9; color: #f25f0f; }
.account .menu-account li > a.active { font-weight: bold; }
.account .menu-account li > a:hover i, .account .menu-account li > a.active i { color: #f25f0f; left: 15px; opacity: 1 }
.account .menu-account li a i {
font-size: 14px;
left: 5px;
opacity: 0;
padding: 0;
position: absolute;
top: 50%;
}
.account .menu-account li.logout a { background: #ddd }
.account .user-infos > span {
display: block;
}
.account .user-infos > span > span {
font-weight: 700;
}
.account .addresses-preview .address .box-content {
height: 190px;
}
@media (max-width: 991px) {
.account .menu-account { padding-left: 15px }
}
@media (max-width: 480px) {
.account .addresses-preview .address .box-content { height: auto }
}
/* Historique de commande */
.account .table-div .table-head {
font-family: 'OpenSans';
overflow: hidden;
}
@media (max-width: 991px) {
.account .table-div .table-row > div, #history .account .table-div .table-row > div { display: block }
}
/* Details de la commande */
#order-detail .order-info {
margin-bottom: 30px;
}
@ -928,6 +1014,7 @@ body .addresses {
.account .addresses {
padding: 0;
text-align: center;
}
.account .addresses .address {
min-height: 250px;
@ -945,11 +1032,17 @@ body .addresses {
#order-detail #sendOrderMessage label {
color: #1e1e1e;
font-weight: 700;
}
#order-detail #sendOrderMessage .custom-select {
width: 60%;
}
#order-detail #sendOrderMessage textarea {
background: #f4f4f4;
border: 1px solid #e1e1e1;
border-radius: 2px;
color: #202020;
font-size: 13px;
}
@media (max-width: 1199px) {
.account .addresses { margin-bottom: 0 }
@ -966,125 +1059,7 @@ body .addresses {
#order-detail .order-info li .bold { display: block; margin-top: 10px }
}
/* Retours */
.block-order-detail > .box {
border: 1px solid #e3e3e4;
border-top: 0;
}
@media (max-width: 991px) {
.block-order-detail .text-center { text-align: left; }
}
/* Avoirs */
#order-slip .account .table-div .table-row .icon-pdf {
font-size: 26px;
height: 27px;
margin: -8px 0 -4px 0;
}
/* Adresses */
#addresses .address {
margin-bottom: 30px;
min-height: 300px;
}
#addresses .box-footer a:first-child i { padding: 0 5px; }
/* Ajout/Modif adresse */
form.std {
background: #f7f7f7;
border: 1px solid #e5e5e5;
clear: both;
overflow: hidden;
padding-bottom: 25px;
}
form.std h2 {
border-bottom: 1px solid #e5e5e5;
color: #000;
display: block;
font-size: 30px;
margin: 0;
padding: 15px 100px;
}
form.std .form_content {
padding: 20px 300px 20px 100px;
}
form.std .form_content p.text {
padding: 20px 0 21px 0;
}
form.std .lost_password {
color: #b4293c;
float: left;
font-family: 'OpenSans';
font-size: 14px;
}
@media (max-width: 1199px) {
form.std .form_content { padding: 20px 100px }
}
@media (max-width: 767px) {
form.std h2 { padding: 15px 50px }
form.std .form_content { padding: 20px 50px }
}
@media (max-width: 500px) {
form.std h2 { padding: 15px 20px }
form.std .form_content { padding: 20px }
.submit button, .submit a.btn { font-size: 16px; margin-left: 0; width: 100%; }
}
/* WIshlist */
.wishlistLinkTop {
margin-bottom: 30px;
text-align: center;
}
.wishlistLinkTop .social {
margin-bottom: 15px;
}
.wishlistLinkTop .social li {
display: inline-block;
vertical-align: middle;
}
.wishlistLinkTop .social li a {
color: #fff;
}
.wishlistLinkTop .social li a:hover { color: #151519; text-decoration: none }
.wishlistLinkTop .social li a i {
background: #ee7c03;
border-radius: 50%;
color: #fff;
display: block;
font-size: 20px;
height: 40px;
line-height: 40px;
margin: 30px 15px 0 15px;
padding: 0;
width: 40px;
}
.wishlistLinkTop .social li a:hover i { background: #ff9600; text-decoration: none }
.wishlistLinkTop .social li a span:before {
background: #ee7c03;
content: "";
height: 1px;
display: block;
margin: 7px auto 2px auto;
-webkit-transition: all 0.3s ease 0s;
-moz-transition: all 0.3s ease 0s;
transition: all 0.3s ease 0s;
width: 30px;
}
.wishlistLinkTop .social li a:hover span:before { background: #ff9600 }
.wishlistLinkTop .social li a span {
color: #ee7c03;
font-size: 14px;
}
.wishlistLinkTop .social li a:hover span { color: #ff9600 }
#module-blockwishlist-mywishlist .product-ctn .product-infos .product-details {
overflow: unset;
}
/*************************************************************************************************************
********************************** PAGES COMPLEMENTAIRES *************************************

View File

@ -185,12 +185,37 @@ a { color: #363842 }
-webkit-transition: all 0.3s ease 0s;
-moz-transition: all 0.3s ease 0s
}
.btn:before {
background: #f9e48f;
background: -webkit-linear-gradient(top, #f9e48f, #bfa56d);
background: -o-linear-gradient(top, #f9e48f, #bfa56d);
background: -moz-linear-gradient(top, #f9e48f, #bfa56d);
background: linear-gradient(to top, #f9e48f, #bfa56d);
bottom: 0;
border-radius: 2px;
content: "";
display: block;
left: 0;
opacity: 0;
position: absolute;
right: 0;
top: 0;
transition: all 0.3s ease 0s;
-webkit-transition: all 0.3s ease 0s;
-moz-transition: all 0.3s ease 0s
z-index: 2;
}
.btn span {
position: relative;
z-index: 3;
}
button.btn { padding-top: 7px; padding-bottom: 7px }
.btn:hover { color: #000; }
.btn.btn2 { background: #1c1d22; border-color: #1c1d22; }
.btn.btn2:hover { background: none; color: #1c1d22; }
.btn:hover:before { opacity: 1 }
.btn:hover span { color: #000; }
.btn.btn2 { background: #202020; border-color: #1c1d22; color: #fff }
.btn.btn2:hover { background: #444; color: #fff; }
.btn.btn2:hover:before { display: none; }
.btn.btn-full-width { width: 100%; }
/* Positionnement des icones */
@ -297,28 +322,31 @@ header.page-heading.order-process { padding: 15px 0 0 0; }
**************************************************************************************************************/
.block { margin-bottom: 30px }
.box {
color: #000;
font-size: 14px;
margin-bottom: 30px;
position: relative;
}
.box > .inner {
background: #1f1f1f;
padding: 50px 100px;
text-align: center;
background: #fff;
background: -webkit-linear-gradient(top, #f4f4f4, #fff);
background: -o-linear-gradient(top, #f4f4f4, #fff);
background: -moz-linear-gradient(top, #f4f4f4, #fff);
background: linear-gradient(to top, #f4f4f4, #fff);
border: 3px solid #f4f4f4;
height: 100%;
padding: 25px;
}
.box .title {
color: #fff;
background: url('../img/shadow.png') no-repeat center bottom;
color: #000;
display: block;
font-family: "DancingScript";
font-size: 26px;
}
.box .title:after {
background: #fff;
content: "";
display: block;
height: 1px;
margin: 20px auto;
width: 35px;
font-family: "ITCAvantGarde";
font-size: 14px;
margin-bottom: 15px;
padding: 10px 0 30px 0;
text-transform: uppercase;
text-align: center;
}
.box .box-footer {
margin-top: 15px;
@ -874,38 +902,38 @@ body .fancybox-overlay {
display: none;
}
.custom-select > span:before {
background-position: left -272px;
background-position: left -38px;
content: "";
height: 48px;
height: 38px;
left: 0;
position: absolute;
width: 5px;
z-index: 2;
}
.custom-select > span.open:before { background-position: left -145px }
.custom-select > span.open:before { background-position: left -147px }
.custom-select > span {
background-position: right -224px;
color: #363842;
background-position: right 0px;
color: #000;
cursor: pointer;
display: block;
font-size: 14px;
height: 48px;
line-height: 48px;
font-size: 13px;
height: 38px;
line-height: 38px;
overflow: hidden;
padding: 0 45px 0 15px;
padding: 0 45px 0 20px;
position: relative;
text-align: left;
text-overflow: ellipsis;
width: 100%;
white-space: nowrap;
z-index: 1;
}
.custom-select.disabled > span { cursor: not-allowed }
.custom-select > span.open { background-position: right -114px; color: #fff }
.custom-select > span.open { background-position: right -105px; color: #000 }
.custom-select > ul {
background: #fff;
border: 1px solid #dbdbdb;
display: none;
font-family: 'Oswald';
margin: -1px 0 0 0;
max-height: 300px;
overflow-y: auto;
@ -919,11 +947,13 @@ body .fancybox-overlay {
.custom-select > ul.open { display: block }
.custom-select > ul li {
color: #333;
font-size: 12px;
cursor: pointer;
padding: 8px 10px;
padding: 12px 10px;
text-align: left;
}
.custom-select > ul li:hover,
.custom-select > ul li.selected { background-color: #ddd }
.custom-select > ul li.selected { background-color: #f4f4f4 }
.custom-select > ul li input {
height: 30px;
width: 100%;
@ -972,7 +1002,7 @@ body .fancybox-overlay {
/* Inline */
.custom-checkbox.inline:before {
background-color: #fff;
background-position: 20px -351px;
background-position: 0px -200px;
border: 1px solid #dbdbdb;
content: "";
cursor: pointer;
@ -990,7 +1020,7 @@ body .fancybox-overlay {
.custom-checkbox.inline:after { display: none }
.custom-checkbox.checked:before,
.custom-checkbox.checked:after,
.custom-checkbox.inline.checked:before { background-position: -14px -351px; }
.custom-checkbox.inline.checked:before { background-position: -9px -255px }
/* CustomRadio */
.custom-radio {
@ -1009,8 +1039,8 @@ body .fancybox-overlay {
}
.custom-radio:before {
background-color: #f1f1f1;
background-position: 20px -351px;
border: 2px solid #cdced4;
background-position: -65px -255px;
border: 1px solid #cdced4;
border-radius: 50%;
content: "";
cursor: pointer;
@ -1026,7 +1056,7 @@ body .fancybox-overlay {
}
.custom-radio.inline label { margin-bottom: 0; max-width: 75%; padding-left: 10px; }
.custom-radio.checked:before,
.custom-radio.inline.checked:before { background-position: -70px -351px; border-color: #67686d }
.custom-radio.inline.checked:before { background-position: -65px -224px }
.radio-box {
cursor: pointer;
}

View File

@ -1,7 +1,11 @@
{if !isset($content_only) || !$content_only}
<footer id="footer">
</footer>
{if $page_name != 'category' && $page_name != 'index'}
<footer id="footer">
<div class="ctn">
{hook h='displayReassurance'}
</div>
</footer>
{/if}
{hook h='endBody'}
{/if}

View File

@ -19,9 +19,7 @@
<div class="ctn account">
<div class="row">
{include file="$tpl_dir./menu-account.tpl" active='history'}
<div class="md9">
<div class="md12">
<div class="box">
<div class="inner">
<h2 class="title">{l s='Your orders'}</h2>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@ -799,12 +799,12 @@ function updateCartSummary(json)
if (typeof(product_list[i].customizationQuantityTotal) !== 'undefined' && product_list[i].customizationQuantityTotal > 0)
{
$('#total_product_price_' + key_for_blockcart).html(formatCurrency(product_customization_total, currencyFormat, currencySign, currencyBlank));
$('#total_product_price_' + key_for_blockcart + ' .value').html(formatCurrency(product_customization_total, currencyFormat, currencySign, currencyBlank));
$('#cart_block_product_' + key_for_blockcart + ' .price').html(formatCurrency(product_customization_total, currencyFormat, currencySign, currencyBlank));
}
else
{
$('#total_product_price_' + key_for_blockcart).html(formatCurrency(product_total, currencyFormat, currencySign, currencyBlank));
$('#total_product_price_' + key_for_blockcart + ' .value').html(formatCurrency(product_total, currencyFormat, currencySign, currencyBlank));
$('#cart_block_product_' + key_for_blockcart + ' .price').html(formatCurrency(product_total, currencyFormat, currencySign, currencyBlank));
}
@ -819,21 +819,23 @@ function updateCartSummary(json)
if (typeof(product_list[i].customizationQuantityTotal) !== 'undefined' && product_list[i].customizationQuantityTotal > 0)
$('#cart_quantity_custom_' + key_for_blockcart).html(product_list[i].customizationQuantityTotal);
nbrProducts += parseInt(product_list[i].quantity);
if(product_list[i].price_with_reduction != product_list[i].price_without_reduction)
{
$('#product_price_' + key_for_blockcart + ' .old-price').show();
$('#product_price_' + key_for_blockcart + ' .price').html(formatCurrency(product_list[i].price_with_reduction, currencyFormat, currencySign, currencyBlank));
$('#product_price_' + key_for_blockcart + ' .price').html(formatCurrency(product_list[i].price_with_reduction_without_tax, currencyFormat, currencySign, currencyBlank));
$('#product_price_' + key_for_blockcart + ' .old-price span').html(formatCurrency(product_list[i].price_without_reduction, currencyFormat, currencySign, currencyBlank));
}
else
{
$('#product_price_' + key_for_blockcart + ' .price').html(formatCurrency(product_list[i].price_with_reduction, currencyFormat, currencySign, currencyBlank));
$('#product_price_' + key_for_blockcart + ' .price').html(formatCurrency(product_list[i].price_with_reduction_without_tax, currencyFormat, currencySign, currencyBlank));
$('#product_price_' + key_for_blockcart + ' .old-price').hide();
}
}
$('.nb-total-boxes').html(nbrProducts);
$('.nb-total-bottles').html(nbrProducts*12);
// Update discounts
var discount_count = 0;
for(var e in json.discounts)
@ -912,11 +914,13 @@ function updateCartSummary(json)
{
$('#total_product').html(formatCurrency(json.total_products, currencyFormat, currencySign, currencyBlank));
$('#total_price').html(formatCurrency(json.total_price_without_tax, currencyFormat, currencySign, currencyBlank));
$('.nb-total-price').html(formatCurrency(json.total_price_without_tax, currencyFormat, currencySign, currencyBlank));
}
else
{
$('#total_product').html(formatCurrency(json.total_products_wt, currencyFormat, currencySign, currencyBlank));
$('#total_price').html(formatCurrency(json.total_price, currencyFormat, currencySign, currencyBlank));
$('.nb-total-price').html(formatCurrency(json.total_price, currencyFormat, currencySign, currencyBlank));
}
$('.price.ajax_cart_total').html(formatCurrency(json.total_price, currencyFormat, currencySign, currencyBlank));

View File

@ -460,7 +460,6 @@ $_LANG['order-slip_d1a365ea7809ae5831c6d9f86886630c'] = 'Avoirs';
$_LANG['order-slip_d95cf4ab2cbf1dfb63f066b50558b07d'] = 'Mon compte';
$_LANG['order-slip_e28cc69f9aa3068eddb76dd508b11da2'] = 'n°%s';
$_LANG['order-steps_065ab3a28ca4f16f55f103adc7d0226f'] = 'Livraison';
$_LANG['order-steps_b6d4223e60986fa4c9af77ee5f7149c5'] = 'Identification';
$_LANG['order-steps_dae3b417a0fc4a49e851ce55d6d49551'] = 'Récapitulatif';
$_LANG['order-steps_f4d1ea475eaa85102e2b4e6d95da84bd'] = 'Paiement';
$_LANG['pagination_10ac3d04253ef7e1ddc73e6091c0cd55'] = 'Suivant';
@ -527,35 +526,42 @@ $_LANG['search_a09e4037d02313230a191007246e1694'] = '%d résultats ont été tro
$_LANG['shopping-cart-product-line_1d9baf077ee87921f57a8fe42d510b65'] = 'Soustraire';
$_LANG['shopping-cart-product-line_3601146c4e948c32b6424d2c0a7f0118'] = 'Prix';
$_LANG['shopping-cart-product-line_37a868bc6fa2df59fe98f6b8fbe2f270'] = 'd\'éco-participation';
$_LANG['shopping-cart-product-line_529ec26c6d82166df35771b810336f84'] = 'bouteilles';
$_LANG['shopping-cart-product-line_54d3b260d7e0e3377ff04b75bf564982'] = 'Dont';
$_LANG['shopping-cart-product-line_60ba37d72bc66daf8018cf689467238e'] = 'boites de';
$_LANG['shopping-cart-product-line_694e8d1f2ee056f98ee488bdc4982d73'] = 'Quantité';
$_LANG['shopping-cart-product-line_69d08bd5f8cf4e228930935c3f13e42f'] = 'En stock';
$_LANG['shopping-cart-product-line_6c957f72dc8cdacc75762f2cbdcdfaf2'] = 'Prix unitaire';
$_LANG['shopping-cart-product-line_9a9a97ca85af73f90515e72745f730f0'] = 'au lieu de';
$_LANG['shopping-cart-product-line_a59ba454f256953d318ac200a50d67d1'] = 'Offert !';
$_LANG['shopping-cart-product-line_b55197a49e8c4cd8c314bc2aa39d6feb'] = 'Hors stock';
$_LANG['shopping-cart-product-line_cd6aaf6d8287fd5a49122d36f0ff7024'] = 'Livraison différée';
$_LANG['shopping-cart-product-line_deb10517653c255364175796ace3553f'] = 'Produit';
$_LANG['shopping-cart-product-line_e716b72edf18038c04664e9b21569177'] = 'Vous devez avoir acheté au moins %d de ce produit.';
$_LANG['shopping-cart-product-line_ec211f7c20af43e742bf2570c3cb84f9'] = 'Ajouter';
$_LANG['shopping-cart-product-line_f2a6c498fb90ee345d997f888fce3b18'] = 'Supprimer';
$_LANG['shopping-cart_03ab340b3f99e03cff9e84314ead38c0'] = 'Quantité';
$_LANG['shopping-cart_042fc2839f45ea5207494ec3005f1aab'] = 'Vous avez un bon de réduction ?';
$_LANG['shopping-cart_0743a4c9b7922a0a2589d0d74c5ea231'] = 'Nombre total de boites';
$_LANG['shopping-cart_12a7a93d72ded50311b52c7d0a853e3c'] = 'Profitez de nos offres exclusives :';
$_LANG['shopping-cart_16f6c60cf0b840982bc1f595ac1641cb'] = 'Indiquez votre code';
$_LANG['shopping-cart_27ce7f8b5623b2e2df568d64cf051607'] = 'Stock';
$_LANG['shopping-cart_300225ee958b6350abc51805dab83c24'] = 'Continuer mes achats';
$_LANG['shopping-cart_30efeba472c0bc4d0747d0109948a714'] = 'Envoyer les produits disponibles en premier.';
$_LANG['shopping-cart_6c957f72dc8cdacc75762f2cbdcdfaf2'] = 'Prix unitaire';
$_LANG['shopping-cart_7494b947fb8d75b27f502865f1c0a45d'] = 'Valider';
$_LANG['shopping-cart_7e0bf6d67701868aac3116ade8fea957'] = 'Finaliser ma commande';
$_LANG['shopping-cart_8598ad4c32c2b992dda9fc8af53c0c03'] = 'Total produits TTC :';
$_LANG['shopping-cart_8075b1ab2d632743beeb6c5ce77a2c9c'] = 'Total produit HT';
$_LANG['shopping-cart_86024cad1e83101d97359d7351051156'] = 'produits';
$_LANG['shopping-cart_879f6b8877752685a966564d072f498f'] = 'Votre panier est vide';
$_LANG['shopping-cart_88b1b598df916ded43ff4abb0935ed7e'] = 'Détails du panier';
$_LANG['shopping-cart_96b0141273eabab320119c467cdcaf17'] = 'Total';
$_LANG['shopping-cart_a40cab5994f36d4c48103a22ca082e8f'] = 'Votre panier';
$_LANG['shopping-cart_deb10517653c255364175796ace3553f'] = 'Produit';
$_LANG['shopping-cart_e0aa021e21dddbd6d8cecec71e9cf564'] = 'ok';
$_LANG['shopping-cart_dfa7a51e61bf9fd7e5fe14e4861e759d'] = 'Nicotine';
$_LANG['shopping-cart_e93f43fa527c3534aeca987091d6c049'] = 'Total frais de port (TTC)';
$_LANG['shopping-cart_ebaee01719541f61281c16ba22ebbfde'] = 'Total TTC :';
$_LANG['shopping-cart_ecba3578d8cd65126d4a47c76b3c9c2d'] = 'Livraison gratuite !';
$_LANG['shopping-cart_f246a17c095de09e043cc1cb917481da'] = 'Total frais de port (HT)';
$_LANG['shopping-cart_f246a17c095de09e043cc1cb917481da'] = 'Total frais de port HT';
$_LANG['shopping-cart_f2a6c498fb90ee345d997f888fce3b18'] = 'Supprimer';
$_LANG['shopping-cart_f4e8b53a114e5a17d051ab84d326cae5'] = 'Total frais de port';
$_LANG['shopping-cart_f5bf48aa40cad7891eb709fcf1fde128'] = 'produit';

View File

@ -0,0 +1,12 @@
<!-- Block Advmenu module -->
{if $blocks}
<ul class="row">
{foreach from=$blocks item=block key=key}
<li class="md4">
<span class="title">{$block.title}</span>
<span class="subtitle">{$block.subtitle}</span>
</li>
{/foreach}
</ul>
{/if}
<!-- /Block Advmenu module -->

View File

@ -0,0 +1,5 @@
<?php
global $_MODULE;
$_MODULE = array();
$_MODULE['<{advreassurance}pierimport>advreassurance-bottom_34e80a799d144cfe4af46815e103f017'] = 'Avis client';

View File

@ -1,15 +1,14 @@
<div class="paiement-module radio-box">
<div class="shadow"></div>
<div class="inner valign-middle">
<div class="sm2">
<div class="sm1">
<div class="rounded-radio">
<input class="custom-input inline" type="radio" value="{$link->getModuleLink('bankwire', 'payment')|escape:'html':'UTF-8'}" name="paiement-method" />
</div>
</div>
<div class="sm4">
<img src="{$base_dir}img/payments/virement_bancaire.jpg" alt="" />
<div class="sm2">
<img src="{$base_dir}img/payments/logo-virement.png" alt="" />
</div>
<div class="sm6">
<div class="sm9">
{l s='Pay by bank wire' mod='bankwire'}
</div>
</div>

View File

@ -11,7 +11,9 @@
<span class="nb-total-price">{$total}</span>
</div>
<div class="md3">
<a class="btn pull-right" href="{$link->getPageLink("$order_process", true)|escape:'html'}" title="{l s='View my shopping cart' mod='blockcart'}" rel="nofollow">{l s='Checkout' mod='blockcart'}</a>
<a class="btn pull-right" href="{$link->getPageLink("$order_process", true)|escape:'html'}" title="{l s='View my shopping cart' mod='blockcart'}" rel="nofollow">
<span>{l s='Checkout' mod='blockcart'}</span>
</a>
</div>
</div>
</div>

View File

@ -1,15 +1,14 @@
<div class="paiement-module radio-box">
<div class="shadow"></div>
<div class="inner valign-middle">
<div class="sm2">
<div class="sm1">
<div class="rounded-radio">
<input class="custom-input inline" type="radio" value="{$link->getModuleLink('cheque', 'payment', [], true)|escape:'html':'UTF-8'}" name="paiement-method" />
</div>
</div>
<div class="sm4">
<img src="{$base_dir}img/payments/paiement_cheque.jpg" alt="" />
<div class="sm2">
<img src="{$base_dir}img/payments/logo-cheque.png" alt="" />
</div>
<div class="sm6">
<div class="sm9">
{l s='Pay by check' mod='cheque'}
</div>
</div>

View File

@ -13,104 +13,82 @@
<!-- Choix des adresses -->
<div class="addresses-list row">
<div class="offset-lg1 lg10 md12">
<div class="offset-lg2 lg8 md12">
<div class="row">
<!-- Adresse de livraison -->
<div class="xs12 sm6 box"{if $cart->isVirtualCart()} style="display:none;"{/if}>
<div class="inner">
<h2 class="title">{l s ='Votre adresse de livraison'}</h2>
<div class="box-content">
<div id="address_delivery_form">
<select name="id_address_delivery" id="id_address_delivery" class="custom-input address_select form-control">
{foreach from=$addresses key=k item=address}
<option value="{$address.id_address|intval}"{if $address.id_address == $cart->id_address_delivery} selected="selected"{/if}>
{$address.alias|escape:'html':'UTF-8'}
</option>
{/foreach}
</select>
</div>
<div class="flex-ctn">
<!-- Adresse de livraison -->
<div class="xs12 sm6 box"{if $cart->isVirtualCart()} style="display:none;"{/if}>
<div class="inner">
<h2 class="title">{l s ='Votre adresse de livraison'}</h2>
<div class="box-content">
<div id="address_delivery_form">
<select name="id_address_delivery" id="id_address_delivery" class="custom-input address_select form-control">
{foreach from=$addresses key=k item=address}
<option value="{$address.id_address|intval}"{if $address.id_address == $cart->id_address_delivery} selected="selected"{/if}>
{$address.alias|escape:'html':'UTF-8'}
</option>
{/foreach}
</select>
</div>
<!-- Détails -->
<ul class="address item" id="address_delivery">
</ul>
<!-- Détails -->
<ul class="address item" id="address_delivery">
</ul>
</div>
</div>
</div>
</div>
<!-- Adresse de facturation -->
<div class="xs12 sm6 box">
<div class="inner">
<h2 class="title">{l s ='Votre adresse de facturation'}</h2>
<div class="box-content">
<p class="addressesAreEquals clearfix"{if $cart->isVirtualCart()} style="display:none;"{/if}>
<input type="checkbox" name="same" id="addressesAreEquals" class="custom-input inline" value="1"{if $cart->id_address_invoice == $cart->id_address_delivery || $addresses|@count == 1} checked="checked"{/if} />
<label for="addressesAreEquals">{l s='Use the delivery address as the billing address.'}</label>
</p>
<div id="address_invoice_form">
{if $addresses|@count > 1}
<select name="id_address_invoice" id="id_address_invoice" class="custom-input address_select form-control">
{section loop=$addresses step=-1 name=address}
<option value="{$addresses[address].id_address|intval}"{if $addresses[address].id_address == $cart->id_address_invoice && $cart->id_address_delivery != $cart->id_address_invoice} selected="selected"{/if}>
{$addresses[address].alias|escape:'html':'UTF-8'}
</option>
{/section}
</select>
{else}
{l s='Vous n\'avez qu\'une adresse disponible dans votre compte.'}
<a href="{$link->getPageLink('address', true, NULL, "back={$back_order_page}?step=1&select_address=1{if $back}&mod={$back}{/if}")|escape:'html':'UTF-8'}" title="{l s='Add'}" class="add-address">
{l s='Ajouter une adresse'}
</a>
{/if}
<!-- Adresse de facturation -->
<div class="xs12 sm6 box">
<div class="inner">
<h2 class="title">{l s ='Votre adresse de facturation'}</h2>
<div class="box-content">
<!-- Détails -->
<ul class="address alternate_item{if $cart->isVirtualCart()} full_width{/if}" id="address_invoice">
</ul>
</div>
<!-- Détails -->
<ul class="address alternate_item{if $cart->isVirtualCart()} full_width{/if}" id="address_invoice">
</ul>
</div>
</div>
</div>
</div>
<!-- Transporteurs -->
<div class="carriers-list">
<div class="inner">
<h2 class="title">{l s ='Choisissez votre méthode de livraison'}</h2>
<div id="order_carrier_contaier">
{include file="$tpl_dir./ajax-order-carrier.tpl"}
</div>
</div>
</div>
<div class="message">
<h2>{l s='Leave a message'}</h2>
<div>
<p>{l s='If you would like to add a comment about your order, please write it in the field below.'}</p>
<textarea class="form-control" name="message" id="message">{strip}
{if isset($oldMessage)}{$oldMessage|escape:'html':'UTF-8'}{/if}
{/strip}</textarea>
</div>
</div>
<div class="hidden">
<input type="hidden" class="hidden" name="step" value="3" />
<input type="hidden" name="back" value="{$back}" />
</div>
<!-- Boutons de navigation -->
<p class="cart_navigation">
<button type="submit" name="processCarrier" class="btn pull-right">
<span>{l s='Save'}</span>
</button>
<a href="{$link->getPageLink($back_order_page, true, NULL, "{if $back}back={$back}{/if}")|escape:'html':'UTF-8'}" title="{l s='Previous'}" class="btn btn2">
<span>{l s='Continue Shopping'}</span>
</a>
</p>
</div>
</div>
<p class="address_add">
<a href="{$link->getPageLink('address', true, NULL, "back={$back_order_page}?step=1{if $back}&mod={$back}{/if}")|escape:'html':'UTF-8'}" title="{l s='Add'}" class="btn icon-left">
<i class="icon icon-plus"></i>
<span>{l s='Add a new address'}</span>
</a>
</p>
<!-- Transporteurs -->
<div class="box">
<div class="inner">
<h2 class="title">{l s ='Choisissez votre méthode de livraison'}</h2>
<div class="box-content">
<div id="order_carrier_contaier">
{include file="$tpl_dir./ajax-order-carrier.tpl"}
</div>
</div>
</div>
</div>
<div class="hidden">
<input type="hidden" class="hidden" name="step" value="3" />
<input type="hidden" name="back" value="{$back}" />
</div>
<!-- Boutons de navigation -->
<p class="cart_navigation">
<button type="submit" name="processCarrier" class="btn icon-right pull-right">
<i class="icon icon-arrow-right"></i>
<span>{l s='Save'}</span>
</button>
<a href="{$link->getPageLink($back_order_page, true, NULL, "{if $back}back={$back}{/if}")|escape:'html':'UTF-8'}" title="{l s='Previous'}" class="btn btn2 icon-left">
<i class="icon icon-arrow-left"></i>
<span>{l s='Continue Shopping'}</span>
</a>
</p>
</form>
</div>
</section>
@ -137,6 +115,5 @@
{addJsDef addressUrlAdd=$smarty.capture.addressUrlAdd}
{addJsDef formatedAddressFieldsValuesList=$formatedAddressFieldsValuesList}
{addJsDef opc=$opc|boolval}
{capture}<a class="link" href="{$smarty.capture.addressUrlAdd}" title="{l s='Update' js=1}">{l s='Update' js=1}</a>{/capture}
{addJsDefL name=liUpdate}{$smarty.capture.default|@addcslashes:'\''}{/addJsDefL}
{addJsDefL name=liUpdate}{/addJsDefL}
{/strip}

View File

@ -29,14 +29,12 @@
<p>{l s='Your order ID is:'} <span class="bold">{$id_order_formatted}</span> . {l s='Your order ID has been sent via email.'}</p>
<p class="cart_navigation exclusive">
<a class="btn" href="{$link->getPageLink('guest-tracking', true, NULL, "id_order={$reference_order|urlencode}&email={$email|urlencode}")|escape:'html':'UTF-8'}" title="{l s='Follow my order'}">
<i class="icon icon-arrow-left icon-left"></i>
<span>{l s='Follow my order'}</span>
</a>
</p>
{else}
<p class="cart_navigation exclusive">
<a class="btn icon-left" href="{$link->getPageLink('history', true)|escape:'html':'UTF-8'}" title="{l s='Go to your order history page'}">
<i class="icon icon-arrow-left"></i>
<a class="btn" href="{$link->getPageLink('history', true)|escape:'html':'UTF-8'}" title="{l s='Go to your order history page'}">
<span>{l s='View your order history'}</span>
</a>
</p>

View File

@ -53,9 +53,7 @@
<div class="ctn account">
<div class="row">
{include file="$tpl_dir./menu-account.tpl" active='history'}
<div class="md9">
<div class="md12">
{if isset($order)}
<div class="box">
@ -121,63 +119,65 @@
</div>
<!-- Adresses -->
<div class="addresses row clear">
<div class="md6">
<div class="box">
<div class="inner">
<h2 class="title">{l s='Shipping address'}</h2>
<div class="box-content">
<ul>
{foreach from=$dlv_adr_fields name=dlv_loop item=field_item}
{if $field_item eq "company" && isset($address_delivery->company)}
<li class="address_company">{$address_delivery->company|escape:'html':'UTF-8'}</li>
{elseif $field_item eq "address2" && $address_delivery->address2}
<li class="address_address2">{$address_delivery->address2|escape:'html':'UTF-8'}</li>
{elseif $field_item eq "phone_mobile" && $address_delivery->phone_mobile}
<li class="address_phone_mobile">{$address_delivery->phone_mobile|escape:'html':'UTF-8'}</li>
{else}
{assign var=address_words value=" "|explode:$field_item}
<li>
{foreach from=$address_words item=word_item name="word_loop"}{if !$smarty.foreach.word_loop.first} {/if}
<span class="address_{$word_item|replace:',':''}">
{$deliveryAddressFormatedValues[$word_item|replace:',':'']|escape:'html':'UTF-8'}
</span>
{/foreach}
</li>
{/if}
{/foreach}
</ul>
<div class="offset-md2 md8">
<div class="addresses row clear">
<div class="md6">
<div class="box">
<div class="inner">
<h2 class="title">{l s='Shipping address'}</h2>
<div class="box-content">
<ul>
{foreach from=$dlv_adr_fields name=dlv_loop item=field_item}
{if $field_item eq "company" && isset($address_delivery->company)}
<li class="address_company">{$address_delivery->company|escape:'html':'UTF-8'}</li>
{elseif $field_item eq "address2" && $address_delivery->address2}
<li class="address_address2">{$address_delivery->address2|escape:'html':'UTF-8'}</li>
{elseif $field_item eq "phone_mobile" && $address_delivery->phone_mobile}
<li class="address_phone_mobile">{$address_delivery->phone_mobile|escape:'html':'UTF-8'}</li>
{else}
{assign var=address_words value=" "|explode:$field_item}
<li>
{foreach from=$address_words item=word_item name="word_loop"}{if !$smarty.foreach.word_loop.first} {/if}
<span class="address_{$word_item|replace:',':''}">
{$deliveryAddressFormatedValues[$word_item|replace:',':'']|escape:'html':'UTF-8'}
</span>
{/foreach}
</li>
{/if}
{/foreach}
</ul>
</div>
</div>
</div>
</div>
</div>
<div class="md6">
<div class="box">
<div class="shadow"></div>
<div class="inner">
<h2 class="title">{l s='Invoice address'}</h2>
<div class="box-content">
<ul>
{foreach from=$inv_adr_fields name=inv_loop item=field_item}
{if $field_item eq "company" && isset($address_invoice->company)}
<li class="address_company">{$address_invoice->company|escape:'html':'UTF-8'}</li>
{elseif $field_item eq "address2" && $address_invoice->address2}
<li class="address_address2">{$address_invoice->address2|escape:'html':'UTF-8'}</li>
{elseif $field_item eq "phone_mobile" && $address_invoice->phone_mobile}
<li class="address_phone_mobile">{$address_invoice->phone_mobile|escape:'html':'UTF-8'}</li>
{else}
{assign var=address_words value=" "|explode:$field_item}
<li>
{foreach from=$address_words item=word_item name="word_loop"}{if !$smarty.foreach.word_loop.first} {/if}
<span class="address_{$word_item|replace:',':''}">
{$invoiceAddressFormatedValues[$word_item|replace:',':'']|escape:'html':'UTF-8'}
</span>
{/foreach}
</li>
{/if}
{/foreach}
</ul>
<div class="md6">
<div class="box">
<div class="shadow"></div>
<div class="inner">
<h2 class="title">{l s='Invoice address'}</h2>
<div class="box-content">
<ul>
{foreach from=$inv_adr_fields name=inv_loop item=field_item}
{if $field_item eq "company" && isset($address_invoice->company)}
<li class="address_company">{$address_invoice->company|escape:'html':'UTF-8'}</li>
{elseif $field_item eq "address2" && $address_invoice->address2}
<li class="address_address2">{$address_invoice->address2|escape:'html':'UTF-8'}</li>
{elseif $field_item eq "phone_mobile" && $address_invoice->phone_mobile}
<li class="address_phone_mobile">{$address_invoice->phone_mobile|escape:'html':'UTF-8'}</li>
{else}
{assign var=address_words value=" "|explode:$field_item}
<li>
{foreach from=$address_words item=word_item name="word_loop"}{if !$smarty.foreach.word_loop.first} {/if}
<span class="address_{$word_item|replace:',':''}">
{$invoiceAddressFormatedValues[$word_item|replace:',':'']|escape:'html':'UTF-8'}
</span>
{/foreach}
</li>
{/if}
{/foreach}
</ul>
</div>
</div>
</div>
</div>
@ -348,20 +348,20 @@
{/foreach}
<div class="table-row">
<div class="offset-md6 md4 sm4 xs7 xxs7">
<div class="offset-md5 md4 sm4 xs7 xxs7">
{l s='Items'}
</div>
<div class="md2 sm8 xs5 xxs5 text-right">
<div class="md3 sm8 xs5 xxs5 text-right">
{displayWtPriceWithCurrency price=$order->getTotalProductsWithTaxes() currency=$currency}
</div>
</div>
{if $order->total_discounts > 0}
<div class="table-row">
<div class="offset-md6 md4 sm4 xs7 xxs7">
<div class="offset-md5 md4 sm4 xs7 xxs7">
{l s='Total vouchers'}
</div>
<div class="md2 sm8 xs5 xxs5 text-right">
<div class="md3 sm8 xs5 xxs5 text-right">
- {displayWtPriceWithCurrency price=$order->total_discounts currency=$currency convert=1}
</div>
</div>
@ -369,29 +369,29 @@
{if $order->total_wrapping > 0}
<div class="table-row">
<div class="offset-md6 md4 sm4 xs7 xxs7">
<div class="offset-md5 md4 sm4 xs7 xxs7">
{l s='Total gift wrapping cost'}
</div>
<div class="md2 sm8 xs5 xxs5 text-right">
<div class="md3 sm8 xs5 xxs5 text-right">
{displayWtPriceWithCurrency price=$order->total_wrapping currency=$currency}
</div>
</div>
{/if}
<div class="table-row">
<div class="offset-md6 md4 sm4 xs7 xxs7">
<div class="offset-md5 md4 sm4 xs7 xxs7">
{l s='Shipping & handling'}
</div>
<div class="md2 sm8 xs5 xxs5 text-right">
<div class="md3 sm8 xs5 xxs5 text-right">
{displayWtPriceWithCurrency price=$order->total_shipping currency=$currency}
</div>
</div>
<div class="table-row">
<div class="offset-md6 md4 sm4 xs4 xxs4 total">
<div class="offset-md5 md4 sm4 xs4 xxs4 total">
{l s='Total'}
</div>
<div class="md2 sm8 xs8 xxs8 text-right price">
<div class="md3 sm8 xs8 xxs8 text-right price">
{displayWtPriceWithCurrency price=$order->total_paid currency=$currency}
</div>
</div>
@ -465,7 +465,7 @@
</div>
{/if}
<div class="box clear">
<div class="box offset-md2 md8 clear">
<div class="inner">
<form action="{$link->getPageLink('order-detail', true)|escape:'html':'UTF-8'}" method="post" class="" id="sendOrderMessage">
<h2 class="title">{l s='Add a message'}</h2>

View File

@ -16,69 +16,51 @@
<div class="order-paiement ctn">
<div class="row">
<div class="md8 sm12">
<div class="box">
<div class="inner">
<h2 class="title">{l s='Please choose your payment method'}</h2>
<div class="box-content">
<div class="paiement clearfix">
{if $HOOK_PAYMENT}
{$HOOK_PAYMENT}
{else}
<p class="alert alert-warning">{l s='No payment modules have been installed.'}</p>
{/if}
</div>
<div class="paiement-list">
<h2 class="title clearfix"><span class="offset-md3 md9">{l s='Please choose your payment method'}</span></h2>
<div class="box-content">
<div class="paiement clearfix">
{if $HOOK_PAYMENT}
{$HOOK_PAYMENT}
{else}
<p class="alert alert-warning">{l s='No payment modules have been installed.'}</p>
{/if}
</div>
</div>
</div>
<!-- CGV -->
<div class="box">
<div class="inner">
<h3 class="title">{l s='Terms of service'}</h3>
<div class="box-content cgv">
<p class="checkbox clearfix">
<div class="cgv">
<h3 class="title clearfix"><span class="offset-md3 md9">{l s='Terms of service'}</h3>
<div class="box-content ">
<div class="checkbox row">
<div class="md3">
<input type="checkbox" name="cgv" id="cgv" class="custom-input inline" value="1" />
</div>
<div class="md9">
<label for="cgv">
{l s='I agree to the terms of service and will adhere to them unconditionally.'}<br />
<a href="{$link_conditions|escape:'html':'UTF-8'}?content_only=1" class="iframe" rel="nofollow">({l s='Read the terms of service'})</a>
<a href="{$link_conditions|escape:'html':'UTF-8'}?content_only=1" class="iframe" rel="nofollow">{l s='Read the terms of service'}</a>
</label>
</p>
</div>
</div>
<div class="validate-payment row">
<div class="offset-md3 md6">
<button type="submit" name="processAddress" class="btn">
<span>{l s='Proceed to checkout'}</span>
</button>
<span>{l s='Order with obligation to pay.'}</span>
</div>
</div>
</div>
</div>
</div>
<div class="md4 resume hidden-sm hidden-xs block">
<div class="inner clearfix">
<div class="resume-cart">
<h3>{l s='Cart resume'}</h3>
<div class="resume-products">
{foreach from=$products item=product name=productLoop}
<div class="product clearfix">
<div class="product-name row">
<span class="md8 xs8 xxs8">
{$product.cart_quantity} x {$product.name}
{if isset($product.attributes_small)}
<span class="product-attributes clearfix">
<span class="taille">{$product.attributes_small}</span>
</span>
{/if}
</span>
<span class="md4 xs4 xxs4">
{displayPrice price=$product.price_wt}<br />
<span class="barre">
{if ($product.price_without_specific_price) && $product.price_without_specific_price > $product.price_wt}
{displayPrice price=$product.price_without_specific_price}
{/if}
</span>
</span>
</div>
</div>
{/foreach}
</div>
<div class="resume-price clearfix">
<div class="resume-cart box">
<div class="inner">
<h3 class="title">{l s='Cart resume'}</h3>
<div class="resume-price box-content clearfix">
{if count($discounts)}
{foreach from=$discounts item=discount name=discountLoop}
<div class="discount row">
@ -102,10 +84,6 @@
<span class="md6 xs6 xxs6">{l s='Total shipping'} :</span>
<span class="md6 xs6 xxs6">{displayPrice price=$shippingCost}</span>
</div>
<div class="taxes row">
<span class="md6 xs6 xxs6">{l s='Tax'} :</span>
<span class="md6 xs6 xxs6">{displayPrice price=$total_tax}</span>
</div>
<div class="price row">
<span class="md6 xs6 xxs6">{l s='Total price'} :</span>
<span class="md6 xs6 xxs6">{displayPrice price=$total_price}</span>
@ -115,21 +93,6 @@
</div>
</div>
</div>
<div class="cart_navigation clear">
<div>
<span>{l s='Order with obligation to pay.'}</span>
<button type="submit" name="processAddress" class="btn icon-right">
<i class="icon icon-arrow-right"></i>
<span>{l s='Proceed to checkout'}</span>
</button>
</div>
<a href="{$link->getPageLink('order', true, NULL, "step=0")|escape:'html':'UTF-8'}" title="{l s='Previous'}" class="btn btn2 icon-left">
<i class="icon icon-arrow-left"></i>
<span>{l s='Continue Shopping'}</span>
</a>
</div>
</div>
</div>
</section>
</main>
@ -144,7 +107,7 @@
$inputCgv = $('.cgv input');
$checkedCgv = $inputCgv.is(':checked') ? true : false;
$buttonSubmit = $('.cart_navigation button');
$buttonSubmit = $('.validate-payment button');
$inputCgv.on('change', function() {
$checkedCgv = $(this).is(':checked') ? true : false;
@ -171,7 +134,6 @@
else
{
$form = $input.parent().prev('div.hidden').children('form');
$form.submit();
}
});

View File

@ -8,7 +8,7 @@
{/if}
<!-- Steps -->
<ul class="step clearfix" id="order_step">
<li class="xs3 col-xxs-3 {if $current_step=='summary'}step_current {elseif $current_step=='login'}step_done_last step_done{else}{if $current_step=='payment' || $current_step=='shipping' || $current_step=='address' || $current_step=='login'}step_done{else}step_todo{/if}{/if} first">
<li class="{if $current_step=='summary'}step_current {elseif $current_step=='login'}step_done_last step_done{else}{if $current_step=='payment' || $current_step=='shipping' || $current_step=='address' || $current_step=='login'}step_done{else}step_todo{/if}{/if} first">
{if $current_step=='payment' || $current_step=='shipping' || $current_step=='address' || $current_step=='login'}
<a href="{$link->getPageLink('order', true)}">
<span>01.</span> <span class="hidden-xs hidden-xxs">{l s='My cart'}</span>
@ -17,7 +17,7 @@
<span>01.</span> <span class="hidden-xs hidden-xxs">{l s='My cart'}</span>
{/if}
</li>
<li class="xs3 col-xxs-3 {if $current_step=='address'}step_current{elseif $current_step=='shipping'}step_done step_done_last{else}{if $current_step=='payment' || $current_step=='shipping'}step_done{else}step_todo{/if}{/if} third">
<li class="{if $current_step=='address'}step_current{elseif $current_step=='shipping'}step_done step_done_last{else}{if $current_step=='payment' || $current_step=='shipping'}step_done{else}step_todo{/if}{/if} third">
{if $current_step=='payment'}
<a href="{$link->getPageLink('order', true, NULL, "{$smarty.capture.url_back}&step=1")|escape:'html':'UTF-8'}">
<span>02.</span> <span class="hidden-xs hidden-xxs">{l s='Delivery'}</span>
@ -26,7 +26,7 @@
<span>02.</span> <span class="hidden-xs hidden-xxs">{l s='Delivery'}</span>
{/if}
</li>
<li id="step_end" class="xs3 col-xxs-3 {if $current_step=='payment'}step_current{else}step_todo{/if} last">
<li id="step_end" class="{if $current_step=='payment'}step_current{else}step_todo{/if} last">
<span>03.</span> <span class="hidden-xs hidden-xxs">{l s='Confirmation'}</span>
</li>
</ul>

View File

@ -10,8 +10,11 @@
{if $smarty.foreach.products.first && $category->hasBanner}
<div class="img-cat lg4 md4 sm4 xs6 xxs12"><img src="{$base_dir}img/c/banners/{$category->id}.jpg" alt="" /></div>
{/if}
{if $product.unit_price_ratio > 0}
{math equation="price / ratio" price=$product.price_tax_exc ratio=round($product.unit_price_ratio) assign=unitPrice}
{/if}
{math equation="price / ratio" price=$product.price ratio=round($product.unit_price_ratio) assign=unitPrice}
<div class="product-ctn cols animated-full lg{if isset($nbProduct)}{12/$nbProduct}{else}3{/if} md4 sm4 xs6 col-xxs-12{if $key%2} alt{/if}" itemscope itemtype="http://schema.org/Product">
<div class="inner">
<div class="product-infos clearfix">
@ -34,8 +37,10 @@
{if isset($product.show_price) && $product.show_price && !isset($restricted_country_mode)}
<meta itemprop="price" content="{if !$priceDisplay}{convertPrice price=$product.price}{else}{convertPrice price=$product.price_tax_exc}{/if}" />
{/if}
<span class="unit-price">{convertPrice price=$unitPrice} <span class="packing">/{$product.unity}</span></span>
{if isset($unitPrice)}
<span class="unit-price">{convertPrice price=$unitPrice} <span class="packing">/{$product.unity}</span></span>
{/if}
{foreach from=$product.features item=feature}
{if $feature.id_feature == 8}

View File

@ -10,7 +10,7 @@
<a class="product-name" href="{$link->getProductLink($product.id_product, $product.link_rewrite, $product.category, null, null, $product.id_shop, $product.id_product_attribute)|escape:'html':'UTF-8'}">
{$product.name|escape:'html':'UTF-8'}
</a>
<span class="packing">{l s='Boxes of '}{l s='bottles'}
<span class="packing">{l s='Boxes of '} {$product.nb_per_box} {l s='bottles'}
</div>
<div class="product-combination md1 text-center">

View File

@ -11,25 +11,21 @@
<!-- Panier vide -->
{if isset($empty)}
<div class="ctn">
{if !isset($recap)}<div class="ctn">{/if}
<p class="alert alert-warning">{l s='Your shopping cart is empty.'}</p>
<p class="cart_navigation">
<a
href="{if (isset($smarty.server.HTTP_REFERER) && strstr($smarty.server.HTTP_REFERER, 'order.php')) || isset($smarty.server.HTTP_REFERER) && strstr($smarty.server.HTTP_REFERER, 'order-opc') || !isset($smarty.server.HTTP_REFERER)}{$link->getPageLink('index')}{else}{$smarty.server.HTTP_REFERER|escape:'html':'UTF-8'|secureReferrer}{/if}"
class="continue btn btn2 icon-right"
title="{l s='Continue shopping'}">
<i class="icon icon-arrow-right"></i>
<a href="{$link->getPageLink(index)}" class="continue btn btn2" title="{l s='Continue shopping'}">
<span>{l s='Continue shopping'}</span>
</a>
</p>
</div>
{if !isset($recap)}</div>{/if}
{/if}
{/if}
{if !isset($empty)}
<div id="shopping-cart-products" class="table-div cart order-detail-content">
<div class="table-head clearfix">
<div class="ctn">
{if !isset($recap)}<div class="ctn">{/if}
<div class="offset-md1 md2 hidden-sm hidden-xs hidden-xxs">{l s='Product'}</div>
<div class="md1 hidden-sm hidden-xs hidden-xxs text-center">{l s='Nicotine'}</div>
<div class="md2 hidden-sm hidden-xs hidden-xxs text-right">{l s='Unit price'}</div>
@ -37,29 +33,25 @@
<div class="md2 hidden-sm hidden-xs hidden-xxs text-center">{l s='Stock'}</div>
<div class="md2 hidden-sm hidden-xs hidden-xxs text-right head-total">{l s='Total'}</div>
<div class="sm12 xs12 hidden-lg hidden-md">{l s='Orders details'}</div>
</div>
{if !isset($recap)}</div>{/if}
</div>
<div class="products">
<div class="ctn">
{if !isset($recap)}<div class="ctn">{/if}
<p style="display:none" id="emptyCartWarning" class="alert alert-warning">{l s='Your shopping cart is empty.'}</p>
{assign var='total_discounts_num' value="{if $total_discounts != 0}1{else}0{/if}"}
{assign var='use_show_taxes' value="{if $use_taxes && $show_taxes}2{else}0{/if}"}
{assign var='total_wrapping_taxes_num' value="{if $total_wrapping != 0}1{else}0{/if}"}
{assign var='odd' value=0}
{assign var='have_non_virtual_products' value=false}
{assign var='hasGuarentee' value=false}
<!-- Ligne(s) de produit -->
{foreach $products as $product}
{if $product.is_virtual == 0}
{assign var='have_non_virtual_products' value=true}
{/if}
{if $product.id_category_default == 8}
{assign var='hasGuarentee' value=true}
{/if}
{assign var='productId' value=$product.id_product}
{assign var='productAttributeId' value=$product.id_product_attribute}
@ -84,17 +76,17 @@
{foreach $gift_products as $product}
{include file="$tpl_dir./shopping-cart-product-line.tpl" product=$product}
{/foreach}
</div>
{if !isset($recap)}</div>{/if}
</div>
</div>
<div class="ctn">
{if !isset($recap)}<div class="ctn">{/if}
<div id="shopping-cart-calcul" class="table-row row block">
{if $voucherAllowed}
<div class="lg5 md5">
<div class="lg5 md5">
{if $voucherAllowed}
{if $displayVouchers}
<div class="box">
<div class="lg12 md12 inner">
<div class="featured-voucher">
<div class="inner">
<p class="title" class="lg12 md12 title-offers">{l s='Take advantage of our exclusive offers:'}</p>
<div id="display_cart_vouchers">
{foreach $displayVouchers as $voucher}
@ -116,20 +108,24 @@
</div>
{/if}
<form action="{$link->getPageLink('order', true)}" method="post" id="voucher" class="form-inline">
<label>{l s='You have a voucher ?'}</label>
<label><span>{l s='You have a voucher ?'}</span></label>
<div class="inner">
<input type="text" class="discount_name form-control" id="discount_name" name="discount_name" value="{if isset($discount_name) && $discount_name}{$discount_name}{/if}" placeholder="{l s='Enter your code'}" />
<input type="hidden" name="submitDiscount" />
<button type="submit" name="submitAddDiscount" class="btn"><span>{l s='OK'}</span></button>
<button type="submit" name="submitAddDiscount" class="btn"><span>{l s='Valider'}</span></button>
</div>
</form>
</div>
{/if}
</div>
{/if}
{/if}
{if !isset($recap)}
<a href="{$link->getPageLink('index')}" class="continue btn btn2" title="{l s='Continue shopping'}">
<span>{l s='Continue shopping'}</span>
</a>
{/if}
</div>
<div class="offset-lg1 lg6 md6 prices">
<div class="offset-lg2 lg5 md6 prices">
<div class="inner">
{if sizeof($discounts)}
<div class="line code-promo">
@ -137,10 +133,9 @@
<div class="md6">
{$discount.name}
</div>
<div class="md6">
<div class="md6 delete">
{if strlen($discount.code)}
<a href="{if $opc}{$link->getPageLink('order-opc', true)}{else}{$link->getPageLink('order', true)}{/if}?deleteDiscount={$discount.id_discount}" class="price_discount_delete" title="{l s='Delete'}">
<i class="icon icon-trash"></i>
</a>
{/if}
<span>{if !$priceDisplay}{displayPrice price=$discount.value_real*-1}{else}{displayPrice price=$discount.value_tax_exc*-1}{/if}</span>
@ -151,12 +146,12 @@
<div class="line">
<div class="md6 sm6 xs6 xxs6">{l s='Total number of boxes'}</div>
<div class="nb-total-boxes md6 sm6 xs6 xxs6">{Context::getContext()->cart->nbProducts()}</div>
<div class="nb-total-boxes md6 sm6 xs6 xxs6"><span class="nb-total-boxes">{$productNumber}</span></div>
</div>
<div class="line">
<div class="md6 sm6 xs6 xxs6">{l s='Total price with taxes'}</div>
<div id="total_tax" class="md6 sm6 xs6 xxs6">{displayPrice price=$total_products_wt}</div>
<div class="md6 sm6 xs6 xxs6">{l s='Total products HT'}</div>
<div id="total_tax" class="md6 sm6 xs6 xxs6">{displayPrice price=$total_products}</div>
</div>
{if $total_shipping_tax_exc <= 0 && !isset($virtualCart)}
@ -185,36 +180,27 @@
{/if}
{/if}
{if $priceDisplay}
<div class="line">
<div class="label-total-price md6 sm6 xs6 xxs5">{l s='Total products HT'}</div>
<div id="total_price" class="md6 sm6 xs6 xxs7">{displayPrice price=$total_price_without_tax}</div>
</div>
{else}
<div class="line">
<div class="label-total-price md6 sm6 xs6 xxs5">{l s='Total products (tax incl.)'}</div>
<div id="total_price" class="md6 sm6 xs6 xxs7">{displayPrice price=$total_price}</div>
</div>
<div class="line total_price">
<div class="label-total-price md6 sm6 xs6 xxs5">{l s='Total products (tax incl.)'}</div>
<div id="total_price" class="md6 sm6 xs6 xxs7">{displayPrice price=$total_price}</div>
</div>
{if !isset($recap)}
<p class="cart_navigation clearfix">
{if !$opc}
<a href="{if $back}{$link->getPageLink('order', true, NULL, 'step=1&amp;back={$back}')|escape:'html':'UTF-8'}{else}{$link->getPageLink('order', true, NULL, 'step=1')|escape:'html':'UTF-8'}{/if}" class="btn standard-checkout" title="{l s='Proceed to checkout'}">
<span>{l s='Proceed to checkout'}</span>
</a>
{/if}
<a href="{$link->getPageLink('order', true, NULL, 'emptyCart=1')|escape:'html':'UTF-8'}" class="empty-cart btn btn2" title="{l s='Continue shopping'}">
<span>{l s='Empty my cart'}</span>
</a>
</p>
{/if}
</div>
</div>
</div>
{if !isset($recap)}
<p class="cart_navigation clearfix">
{if !$opc}
<a href="{if $back}{$link->getPageLink('order', true, NULL, 'step=1&amp;back={$back}')|escape:'html':'UTF-8'}{else}{$link->getPageLink('order', true, NULL, 'step=1')|escape:'html':'UTF-8'}{/if}" class="btn icon-right standard-checkout" title="{l s='Proceed to checkout'}">
<i class="icon icon-arrow-right"></i>
<span>{l s='Proceed to checkout'}</span>
</a>
{/if}
<a href="{$link->getPageLink('index')}" class="continue btn btn2 icon-left" title="{l s='Continue shopping'}">
<i class="icon icon-arrow-left"></i>
<span>{l s='Continue shopping'}</span>
</a>
</p>
{/if}
</div>
{if !isset($recap)}</div>{/if}
{if $show_option_allow_separate_package}
<p>