Version Notes
If you have ideas for improvements or find bugs, please send them to Jean-Sébastien Hederer at contact@asperience.fr, with Asperience_Productextend as part of the subject line.
Download this release
Release Info
| Developer | Jean-Sébastien Hederer |
| Extension | Asperience_Productextend |
| Version | 0.1.5 |
| Comparing to | |
| See all releases | |
Code changes from version 0.1.4 to 0.1.5
- app/code/community/Asperience/Productextend/Block/Adminhtml/Catalog/Product/Edit/Tab/Price/Promotion.php +1 -1
- app/code/community/Asperience/Productextend/Block/Adminhtml/Promotion.php +1 -1
- app/code/community/Asperience/Productextend/Block/Adminhtml/Promotion/Grid.php +23 -5
- app/code/community/Asperience/Productextend/Model/Mysql4/Promotion.php +2 -1
- app/code/community/Asperience/Productextend/Model/Observer.php +167 -97
- app/code/community/Asperience/Productextend/Model/Promotion.php +9 -9
- app/code/community/Asperience/Productextend/etc/config.xml +5 -4
- app/code/community/Asperience/Productextend/etc/system.xml +10 -1
- app/code/community/Asperience/Productextend/sql/productextend_setup/mysql4-upgrade-0.1.1-0.1.5.php +16 -0
- app/design/adminhtml/default/default/layout/productextend.xml +0 -16
- app/design/adminhtml/default/default/template/productextend/catalog/product/edit/price/promotion.phtml +0 -42
- app/locale/fr_FR/Asperience_Productextend.csv +16 -3
- package.xml +16 -15
app/code/community/Asperience/Productextend/Block/Adminhtml/Catalog/Product/Edit/Tab/Price/Promotion.php
CHANGED
|
@@ -10,7 +10,7 @@ class Asperience_Productextend_Block_Adminhtml_Catalog_Product_Edit_Tab_Price_Pr
|
|
| 10 |
|
| 11 |
public function __construct()
|
| 12 |
{
|
| 13 |
-
$this->setTemplate('productextend/catalog/product/edit/price/promotion.phtml');
|
| 14 |
}
|
| 15 |
|
| 16 |
public function getProduct()
|
| 10 |
|
| 11 |
public function __construct()
|
| 12 |
{
|
| 13 |
+
$this->setTemplate('asperience/productextend/catalog/product/edit/price/promotion.phtml');
|
| 14 |
}
|
| 15 |
|
| 16 |
public function getProduct()
|
app/code/community/Asperience/Productextend/Block/Adminhtml/Promotion.php
CHANGED
|
@@ -12,7 +12,7 @@ class Asperience_Productextend_Block_Adminhtml_Promotion extends Mage_Adminhtml_
|
|
| 12 |
{
|
| 13 |
$this->_controller = 'adminhtml_promotion';
|
| 14 |
$this->_blockGroup = 'productextend';
|
| 15 |
-
$this->_headerText = Mage::helper('productextend')->__('
|
| 16 |
parent::__construct();
|
| 17 |
$this->_removeButton('add');
|
| 18 |
}
|
| 12 |
{
|
| 13 |
$this->_controller = 'adminhtml_promotion';
|
| 14 |
$this->_blockGroup = 'productextend';
|
| 15 |
+
$this->_headerText = Mage::helper('productextend')->__('Price changes history');
|
| 16 |
parent::__construct();
|
| 17 |
$this->_removeButton('add');
|
| 18 |
}
|
app/code/community/Asperience/Productextend/Block/Adminhtml/Promotion/Grid.php
CHANGED
|
@@ -12,7 +12,7 @@ class Asperience_Productextend_Block_Adminhtml_Promotion_Grid extends Mage_Admin
|
|
| 12 |
{
|
| 13 |
parent::__construct();
|
| 14 |
$this->setId('promotionGrid');
|
| 15 |
-
$this->setDefaultSort('
|
| 16 |
$this->setDefaultDir('DESC');
|
| 17 |
$this->setSaveParametersInSession(true);
|
| 18 |
}
|
|
@@ -70,7 +70,7 @@ class Asperience_Productextend_Block_Adminhtml_Promotion_Grid extends Mage_Admin
|
|
| 70 |
));
|
| 71 |
|
| 72 |
$this->addColumn('special_price', array(
|
| 73 |
-
'header' => Mage::helper('productextend')->__('Special
|
| 74 |
'type' => 'price',
|
| 75 |
'currency_code' => $store->getBaseCurrency()->getCode(),
|
| 76 |
'index' => 'special_price',
|
|
@@ -89,7 +89,13 @@ class Asperience_Productextend_Block_Adminhtml_Promotion_Grid extends Mage_Admin
|
|
| 89 |
'index' => 'special_to_date',
|
| 90 |
'type' => 'datetime',
|
| 91 |
));
|
| 92 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 93 |
$this->addColumn('site', array(
|
| 94 |
'header' => Mage::helper('productextend')->__('Website'),
|
| 95 |
'width' => '100px',
|
|
@@ -97,7 +103,19 @@ class Asperience_Productextend_Block_Adminhtml_Promotion_Grid extends Mage_Admin
|
|
| 97 |
'sortable' => false,
|
| 98 |
'index' => 'website_id',
|
| 99 |
'type' => 'options',
|
| 100 |
-
'options' => Mage::getModel('core/website')->getCollection()->toOptionHash(),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
));
|
| 102 |
|
| 103 |
$this->addColumn('created_time', array(
|
|
@@ -129,4 +147,4 @@ class Asperience_Productextend_Block_Adminhtml_Promotion_Grid extends Mage_Admin
|
|
| 129 |
return $this;
|
| 130 |
}
|
| 131 |
|
| 132 |
-
}
|
| 12 |
{
|
| 13 |
parent::__construct();
|
| 14 |
$this->setId('promotionGrid');
|
| 15 |
+
$this->setDefaultSort('created_time');
|
| 16 |
$this->setDefaultDir('DESC');
|
| 17 |
$this->setSaveParametersInSession(true);
|
| 18 |
}
|
| 70 |
));
|
| 71 |
|
| 72 |
$this->addColumn('special_price', array(
|
| 73 |
+
'header' => Mage::helper('productextend')->__('Special Price'),
|
| 74 |
'type' => 'price',
|
| 75 |
'currency_code' => $store->getBaseCurrency()->getCode(),
|
| 76 |
'index' => 'special_price',
|
| 89 |
'index' => 'special_to_date',
|
| 90 |
'type' => 'datetime',
|
| 91 |
));
|
| 92 |
+
|
| 93 |
+
$this->addColumn('tier_price', array(
|
| 94 |
+
'header' => Mage::helper('productextend')->__('Tier price changes'),
|
| 95 |
+
'align' => 'left',
|
| 96 |
+
'index' => 'tier_price',
|
| 97 |
+
));
|
| 98 |
+
|
| 99 |
$this->addColumn('site', array(
|
| 100 |
'header' => Mage::helper('productextend')->__('Website'),
|
| 101 |
'width' => '100px',
|
| 103 |
'sortable' => false,
|
| 104 |
'index' => 'website_id',
|
| 105 |
'type' => 'options',
|
| 106 |
+
// 'options' => Mage::getModel('core/website')->getCollection()->toOptionHash(),
|
| 107 |
+
'options' => Mage::getSingleton('adminhtml/system_store')->getWebsiteOptionHash(true),
|
| 108 |
+
));
|
| 109 |
+
|
| 110 |
+
$this->addColumn('store', array(
|
| 111 |
+
'header' => Mage::helper('productextend')->__('Store'),
|
| 112 |
+
'width' => '100px',
|
| 113 |
+
'align' =>'left',
|
| 114 |
+
'sortable' => false,
|
| 115 |
+
'index' => 'store_id',
|
| 116 |
+
'type' => 'options',
|
| 117 |
+
// 'options' => Mage::getModel('core/store')->getCollection()->toOptionHash(),
|
| 118 |
+
'options' => Mage::getSingleton('adminhtml/system_store')->getStoreOptionHash(true),
|
| 119 |
));
|
| 120 |
|
| 121 |
$this->addColumn('created_time', array(
|
| 147 |
return $this;
|
| 148 |
}
|
| 149 |
|
| 150 |
+
}
|
app/code/community/Asperience/Productextend/Model/Mysql4/Promotion.php
CHANGED
|
@@ -17,7 +17,8 @@ class Asperience_Productextend_Model_Mysql4_Promotion extends Mage_Core_Model_My
|
|
| 17 |
{
|
| 18 |
$select = $this->_getReadAdapter()->select()
|
| 19 |
->from(array('main_table'=>$this->getTable('promotion')))
|
| 20 |
-
->where('product_id=?', $productId)
|
|
|
|
| 21 |
return $this->_getReadAdapter()->fetchCol($select);
|
| 22 |
}
|
| 23 |
}
|
| 17 |
{
|
| 18 |
$select = $this->_getReadAdapter()->select()
|
| 19 |
->from(array('main_table'=>$this->getTable('promotion')))
|
| 20 |
+
->where('product_id=?', $productId)
|
| 21 |
+
->order('created_time DESC');
|
| 22 |
return $this->_getReadAdapter()->fetchCol($select);
|
| 23 |
}
|
| 24 |
}
|
app/code/community/Asperience/Productextend/Model/Observer.php
CHANGED
|
@@ -11,9 +11,11 @@ class Asperience_Productextend_Model_Observer
|
|
| 11 |
|
| 12 |
protected $_oldProduct = array();
|
| 13 |
protected $_changeStatus = False;
|
|
|
|
| 14 |
protected $_isNew = False;
|
| 15 |
protected $_isNewPrice = False;
|
| 16 |
protected $_isNewPriceSpecial = False;
|
|
|
|
| 17 |
|
| 18 |
public function formatPrice($price)
|
| 19 |
{
|
|
@@ -26,7 +28,6 @@ class Asperience_Productextend_Model_Observer
|
|
| 26 |
|
| 27 |
public function productPrepareForm($observer)
|
| 28 |
{
|
| 29 |
-
// Mage::log($observer->getEvent()->getForm());
|
| 30 |
$form = $observer->getEvent()->getForm();
|
| 31 |
if ($promotion = $form->getElement('promotion_list')) {
|
| 32 |
$promotion->setRenderer(
|
|
@@ -38,7 +39,7 @@ class Asperience_Productextend_Model_Observer
|
|
| 38 |
|
| 39 |
protected function _sendMail($product)
|
| 40 |
{
|
| 41 |
-
if($product) {
|
| 42 |
try {
|
| 43 |
$translate = Mage::getSingleton('core/translate');
|
| 44 |
$translate->setTranslateInline(false);
|
|
@@ -51,71 +52,91 @@ class Asperience_Productextend_Model_Observer
|
|
| 51 |
'user' => Mage::getSingleton('admin/session')->getUser()->getUsername(),
|
| 52 |
'date' => Mage::helper('core')->formatDate(null, 'full'),
|
| 53 |
'comment' => '',
|
| 54 |
-
'title' => $this->__('Product Modification :')
|
|
|
|
|
|
|
| 55 |
);
|
| 56 |
-
|
| 57 |
//S'il y a un nouveau produit
|
| 58 |
if($this->_isNew){
|
| 59 |
-
|
| 60 |
-
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
$
|
| 65 |
-
|
|
|
|
|
|
|
| 66 |
}
|
| 67 |
-
|
| 68 |
-
}
|
| 69 |
//Si le statut du produit change
|
| 70 |
-
if($this->_changeStatus){
|
| 71 |
$dataMail['comment'] .= $this->__('Product Status Change : ');
|
| 72 |
$dataMail['comment'] .= Mage::getSingleton('catalog/product_status')->getOptionText($this->_oldProduct['status']);
|
| 73 |
$dataMail['comment'] .= ' -> '.Mage::getSingleton('catalog/product_status')->getOptionText($product->getStatus()).'<br />';
|
| 74 |
}
|
| 75 |
-
|
| 76 |
-
|
|
|
|
| 77 |
$dataMail['comment'] .= $this->__('Price : ');
|
| 78 |
$dataMail['comment'] .= $this->formatPrice($this->_oldProduct['price']);
|
| 79 |
$dataMail['comment'] .= ' -> '.$this->formatPrice($product->getPrice()).'<br />';
|
| 80 |
}
|
|
|
|
| 81 |
//Si le prix spécial du produit existant a changé
|
| 82 |
-
if($this->_isNewPriceSpecial){
|
| 83 |
$dataMail['comment'] .= $this->__('Special Price : ');
|
| 84 |
$dataMail['comment'] .= $this->formatPrice($this->_oldProduct['special_price']);
|
| 85 |
-
$dataMail['comment'] .= ' -> '.$this->formatPrice($product->getSpecialPrice());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
}
|
| 87 |
-
|
| 88 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 89 |
}
|
| 90 |
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
|
|
|
|
|
|
|
|
|
| 117 |
|
| 118 |
}catch (Exception $e) {
|
|
|
|
| 119 |
Mage::getSingleton('core/session')->addError($this->__('An error arose during the sending of emails.'));
|
| 120 |
}
|
| 121 |
}
|
|
@@ -124,66 +145,115 @@ class Asperience_Productextend_Model_Observer
|
|
| 124 |
public function savePromoAfter($observer)
|
| 125 |
{
|
| 126 |
$product = $observer->getEvent()->getProduct();
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
//Si le produit est
|
| 132 |
-
if($
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
$this->_isNewPriceSpecial = True;
|
| 136 |
-
}
|
| 137 |
-
}else {
|
| 138 |
-
//Si le produit change de statut
|
| 139 |
-
if($this->_oldProduct['status'] != $product->getStatus()){
|
| 140 |
-
$this->_changeStatus = True;
|
| 141 |
-
}
|
| 142 |
-
//Si le prix du produit existant à changé
|
| 143 |
-
if($product->getPrice() != $this->_oldProduct['price']){
|
| 144 |
-
$this->_isNewPrice = True;
|
| 145 |
-
}
|
| 146 |
-
//Si le prix spécial du produit existant est nouveau ou changé
|
| 147 |
-
if($product->getSpecialPrice() && ($product->getSpecialPrice() != $this->_oldProduct['special_price'] ||
|
| 148 |
-
$product->getSpecialFromDate() != $this->_oldProduct['special_date'])){
|
| 149 |
-
$this->_isNewPriceSpecial = True;
|
| 150 |
-
}
|
| 151 |
}
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 159 |
}
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
|
| 164 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 165 |
}
|
| 166 |
}
|
| 167 |
|
| 168 |
public function beforeSave($observer)
|
| 169 |
{
|
| 170 |
$product = $observer->getEvent()->getProduct();
|
| 171 |
-
|
| 172 |
-
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
$product = Mage::getModel('catalog/product')
|
| 176 |
->load($productId);
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
|
| 180 |
-
|
| 181 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 182 |
);
|
| 183 |
-
|
| 184 |
-
|
| 185 |
-
|
| 186 |
}
|
| 187 |
}
|
| 188 |
-
|
| 189 |
-
}
|
| 11 |
|
| 12 |
protected $_oldProduct = array();
|
| 13 |
protected $_changeStatus = False;
|
| 14 |
+
protected $_isChange = False;
|
| 15 |
protected $_isNew = False;
|
| 16 |
protected $_isNewPrice = False;
|
| 17 |
protected $_isNewPriceSpecial = False;
|
| 18 |
+
protected $_isNewTierPrice = False;
|
| 19 |
|
| 20 |
public function formatPrice($price)
|
| 21 |
{
|
| 28 |
|
| 29 |
public function productPrepareForm($observer)
|
| 30 |
{
|
|
|
|
| 31 |
$form = $observer->getEvent()->getForm();
|
| 32 |
if ($promotion = $form->getElement('promotion_list')) {
|
| 33 |
$promotion->setRenderer(
|
| 39 |
|
| 40 |
protected function _sendMail($product)
|
| 41 |
{
|
| 42 |
+
if($product && ($product->getStatus() == 1 || Mage::getStoreConfig(Asperience_Productextend_Model_Promotion::XML_PATH_ALLOW_INACTIVE))) {
|
| 43 |
try {
|
| 44 |
$translate = Mage::getSingleton('core/translate');
|
| 45 |
$translate->setTranslateInline(false);
|
| 52 |
'user' => Mage::getSingleton('admin/session')->getUser()->getUsername(),
|
| 53 |
'date' => Mage::helper('core')->formatDate(null, 'full'),
|
| 54 |
'comment' => '',
|
| 55 |
+
'title' => $this->__('Product Modification :'),
|
| 56 |
+
'website' => $product->getWebsiteId(),
|
| 57 |
+
'store' => $product->getStoreId(),
|
| 58 |
);
|
|
|
|
| 59 |
//S'il y a un nouveau produit
|
| 60 |
if($this->_isNew){
|
| 61 |
+
if(Mage::getStoreConfig(Asperience_Productextend_Model_Promotion::XML_PATH_ALLOW_NEW)) {
|
| 62 |
+
$dataMail['title'] = $this->__('New product :');
|
| 63 |
+
if(!$product->isGrouped()){
|
| 64 |
+
$dataMail['comment'] .= $this->__('Price : ');
|
| 65 |
+
$dataMail['comment'] .= $this->formatPrice($product->getPrice());
|
| 66 |
+
if($this->_isNewPriceSpecial && Mage::getStoreConfig(Asperience_Productextend_Model_Promotion::XML_PATH_ALLOW_SPE_PRICE)){
|
| 67 |
+
$dataMail['comment'] .= '<br />'.$this->__('Special Price : ');
|
| 68 |
+
$dataMail['comment'] .= $this->formatPrice($product->getSpecialPrice());
|
| 69 |
+
}
|
| 70 |
}
|
| 71 |
+
}
|
| 72 |
+
}else {
|
| 73 |
//Si le statut du produit change
|
| 74 |
+
if($this->_changeStatus && Mage::getStoreConfig(Asperience_Productextend_Model_Promotion::XML_PATH_ALLOW_STATUS)){
|
| 75 |
$dataMail['comment'] .= $this->__('Product Status Change : ');
|
| 76 |
$dataMail['comment'] .= Mage::getSingleton('catalog/product_status')->getOptionText($this->_oldProduct['status']);
|
| 77 |
$dataMail['comment'] .= ' -> '.Mage::getSingleton('catalog/product_status')->getOptionText($product->getStatus()).'<br />';
|
| 78 |
}
|
| 79 |
+
|
| 80 |
+
//Si le prix du produit existant a changé
|
| 81 |
+
if($this->_isNewPrice && Mage::getStoreConfig(Asperience_Productextend_Model_Promotion::XML_PATH_ALLOW_PRICE)){
|
| 82 |
$dataMail['comment'] .= $this->__('Price : ');
|
| 83 |
$dataMail['comment'] .= $this->formatPrice($this->_oldProduct['price']);
|
| 84 |
$dataMail['comment'] .= ' -> '.$this->formatPrice($product->getPrice()).'<br />';
|
| 85 |
}
|
| 86 |
+
|
| 87 |
//Si le prix spécial du produit existant a changé
|
| 88 |
+
if($this->_isNewPriceSpecial && Mage::getStoreConfig(Asperience_Productextend_Model_Promotion::XML_PATH_ALLOW_SPE_PRICE)){
|
| 89 |
$dataMail['comment'] .= $this->__('Special Price : ');
|
| 90 |
$dataMail['comment'] .= $this->formatPrice($this->_oldProduct['special_price']);
|
| 91 |
+
$dataMail['comment'] .= ' -> '.$this->formatPrice($product->getSpecialPrice()).'<br/>';
|
| 92 |
+
$dataMail['comment'] .= $this->__('Special Price From Date : ');
|
| 93 |
+
$dataMail['comment'] .= Mage::helper('core')->formatDate($this->_oldProduct['special_from_date']);
|
| 94 |
+
$dataMail['comment'] .= ' -> '.Mage::helper('core')->formatDate($product->getSpecialFromDate()).'<br/>';
|
| 95 |
+
$dataMail['comment'] .= $this->__('Special Price To Date : ');
|
| 96 |
+
$dataMail['comment'] .= Mage::helper('core')->formatDate($this->_oldProduct['special_to_date']);
|
| 97 |
+
$dataMail['comment'] .= ' -> '.Mage::helper('core')->formatDate($product->getSpecialToDate()).'<br/>';
|
| 98 |
}
|
| 99 |
+
|
| 100 |
+
//Si le prix tiers du produit existant a changé
|
| 101 |
+
if($this->_isNewTierPrice && Mage::getStoreConfig(Asperience_Productextend_Model_Promotion::XML_PATH_ALLOW_TIER_PRICE)){
|
| 102 |
+
$dataMail['comment'] .= $this->__('Tier Price : ');
|
| 103 |
+
$dataMail['comment'] .= $this->formatPrice($this->_oldProduct['tier_price']);
|
| 104 |
+
$dataMail['comment'] .= ' -> '.$this->formatPrice($product->getData('tier_price'));
|
| 105 |
+
}
|
| 106 |
}
|
| 107 |
|
| 108 |
+
if($dataMail['comment'] != '') {
|
| 109 |
+
$postObject = new Varien_Object();
|
| 110 |
+
$postObject->setData($dataMail);
|
| 111 |
+
|
| 112 |
+
//Configuration des destinataires
|
| 113 |
+
$emails = explode(',', Mage::getStoreConfig(Asperience_Productextend_Model_Promotion::XML_PATH_EMAIL_RECIPIENT));
|
| 114 |
+
//Configuration du mail
|
| 115 |
+
$mailTemplate = Mage::getModel('core/email_template');
|
| 116 |
+
/* @var $mailTemplate Mage_Core_Model_Email_Template */
|
| 117 |
+
|
| 118 |
+
foreach ($emails as $email) {
|
| 119 |
+
$mailTemplate->setDesignConfig(array('area' => 'backend'))
|
| 120 |
+
->sendTransactional(
|
| 121 |
+
Mage::getStoreConfig(Asperience_Productextend_Model_Promotion::XML_PATH_EMAIL_TEMPLATE),
|
| 122 |
+
Mage::getStoreConfig(Asperience_Productextend_Model_Promotion::XML_PATH_EMAIL_SENDER),
|
| 123 |
+
$email,
|
| 124 |
+
null,
|
| 125 |
+
array('data' => $postObject)
|
| 126 |
+
);
|
| 127 |
+
|
| 128 |
+
if (!$mailTemplate->getSentSuccess()) {
|
| 129 |
+
throw new Exception();
|
| 130 |
+
break;
|
| 131 |
+
}
|
| 132 |
+
}
|
| 133 |
+
|
| 134 |
+
$translate->setTranslateInline(true);
|
| 135 |
+
|
| 136 |
+
}
|
| 137 |
|
| 138 |
}catch (Exception $e) {
|
| 139 |
+
Mage::log($e);
|
| 140 |
Mage::getSingleton('core/session')->addError($this->__('An error arose during the sending of emails.'));
|
| 141 |
}
|
| 142 |
}
|
| 145 |
public function savePromoAfter($observer)
|
| 146 |
{
|
| 147 |
$product = $observer->getEvent()->getProduct();
|
| 148 |
+
$tprice_change = "";
|
| 149 |
+
$this->_isChange = False;
|
| 150 |
+
//Si le produit est nouveau
|
| 151 |
+
if($this->_isNew){
|
| 152 |
+
//Si le nouveau produit est une promotion
|
| 153 |
+
if(!$product->isGrouped() && $product->getSpecialPrice()){
|
| 154 |
+
$this->_isNewPriceSpecial = True;
|
| 155 |
+
$this->_isChange = True;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 156 |
}
|
| 157 |
+
} else {
|
| 158 |
+
//Si le produit change de statut
|
| 159 |
+
if($product->getStatus() != $this->_oldProduct['status']){
|
| 160 |
+
$this->_changeStatus = True;
|
| 161 |
+
$this->_isChange = True;
|
| 162 |
+
}
|
| 163 |
+
//Si le prix du produit existant à changé
|
| 164 |
+
if($product->getPrice() != $this->_oldProduct['price']){
|
| 165 |
+
$this->_isNewPrice = True;
|
| 166 |
+
$this->_isChange = True;
|
| 167 |
+
}
|
| 168 |
+
//Si le prix spécial du produit existant est nouveau ou changé
|
| 169 |
+
if($product->getSpecialPrice() && ($product->getSpecialPrice() != $this->_oldProduct['special_price'] ||
|
| 170 |
+
$product->getSpecialFromDate() != $this->_oldProduct['special_from_date'] ||
|
| 171 |
+
$product->getSpecialToDate() != $this->_oldProduct['special_to_date'])){
|
| 172 |
+
$this->_isNewPriceSpecial = True;
|
| 173 |
+
$this->_isChange = True;
|
| 174 |
}
|
| 175 |
+
|
| 176 |
+
//Analyse Tier Price
|
| 177 |
+
$product_data = $product->getData('tier_price');
|
| 178 |
+
$tprice_change = '';
|
| 179 |
+
if($product_data || $this->_oldProduct['tier_price']){
|
| 180 |
+
foreach($product_data as $key => $tprice) {
|
| 181 |
+
if($tprice['delete'] == 1) {
|
| 182 |
+
$changes_txt = '';
|
| 183 |
+
foreach ($tprice as $key => $value) { if($key != 'delete') $changes_txt .= "$key => $value<br/>"; };
|
| 184 |
+
$tprice_change .= _('Delete level:<br/>').$changes_txt;
|
| 185 |
+
$this->_isNewTierPrice = True;
|
| 186 |
+
$this->_isChange = True;
|
| 187 |
+
} elseif(!array_key_exists($key , $this->_oldProduct['tier_price'])) {
|
| 188 |
+
$changes_txt = '';
|
| 189 |
+
foreach ($tprice as $key => $value) { if($key != 'delete') $changes_txt .= "$key => $value<br/>"; };
|
| 190 |
+
$tprice_change .= _('Add level:<br/>').$changes_txt;
|
| 191 |
+
$this->_isNewTierPrice = True;
|
| 192 |
+
$this->_isChange = True;
|
| 193 |
+
} else {
|
| 194 |
+
$change = False;
|
| 195 |
+
$changes_txt = '';
|
| 196 |
+
foreach($tprice as $index => $data) {
|
| 197 |
+
if($index != 'delete' && $this->_oldProduct['tier_price'][$key][$index] != $data) {
|
| 198 |
+
$change = True;
|
| 199 |
+
$changes_txt .= _('Key:').$key._(' Index:').$index.':'.$this->_oldProduct['tier_price'][$key][$index].'=>'.$data.'<br/>';
|
| 200 |
+
}
|
| 201 |
+
}
|
| 202 |
+
if($change) {
|
| 203 |
+
$this->_isNewTierPrice = True;
|
| 204 |
+
$this->_isChange = True;
|
| 205 |
+
$tprice_change = _('Change level:<br/>').$changes_txt;
|
| 206 |
+
}
|
| 207 |
+
}
|
| 208 |
+
}
|
| 209 |
+
}
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
//S'il y a un changement: envoi de mail
|
| 213 |
+
if($this->_isChange) {
|
| 214 |
+
$this->_sendMail($product);
|
| 215 |
+
}
|
| 216 |
+
|
| 217 |
+
//Changement: mise en base de données
|
| 218 |
+
if($this->_isChange && Mage::getStoreConfig(Asperience_Productextend_Model_Promotion::XML_PATH_ALLOW_SAVE)){
|
| 219 |
+
Mage::getModel('productextend/promotion')->savePromo($product,$this->_oldProduct,$tprice_change,$this);
|
| 220 |
}
|
| 221 |
}
|
| 222 |
|
| 223 |
public function beforeSave($observer)
|
| 224 |
{
|
| 225 |
$product = $observer->getEvent()->getProduct();
|
| 226 |
+
$productId = $product->getId();
|
| 227 |
+
if($productId){
|
| 228 |
+
//Le produit existe
|
| 229 |
+
$product = Mage::getModel('catalog/product')
|
|
|
|
| 230 |
->load($productId);
|
| 231 |
+
|
| 232 |
+
// Obtient une liste de colonnes
|
| 233 |
+
$tier_price = $product->getData('tier_price');
|
| 234 |
+
$website_id = array();
|
| 235 |
+
$cust_group = array();
|
| 236 |
+
$price_qty = array();
|
| 237 |
+
foreach ($tier_price as $key => $row) {
|
| 238 |
+
$website_id[$key] = $row['website_id'];
|
| 239 |
+
$cust_group[$key] = $row['cust_group'];
|
| 240 |
+
$price_qty[$key] = $row['price_qty'];
|
| 241 |
+
}
|
| 242 |
+
|
| 243 |
+
// Trie les données
|
| 244 |
+
array_multisort($website_id, SORT_ASC, $cust_group, SORT_ASC, $price_qty, SORT_ASC, $tier_price);
|
| 245 |
+
$this->_oldProduct = array(
|
| 246 |
+
'store_id' => $product->getStoreId(),
|
| 247 |
+
'price' => $product->getPrice(),
|
| 248 |
+
'special_price' => $product->getSpecialPrice(),
|
| 249 |
+
'special_from_date' => $product->getSpecialFromDate(),
|
| 250 |
+
'special_to_date' => $product->getSpecialToDate(),
|
| 251 |
+
'status' => $product->getStatus(),
|
| 252 |
+
'tier_price' => $tier_price
|
| 253 |
);
|
| 254 |
+
} else {
|
| 255 |
+
//Le produit est nouveau
|
| 256 |
+
$this->_isNew = True;
|
| 257 |
}
|
| 258 |
}
|
| 259 |
+
}
|
|
|
app/code/community/Asperience/Productextend/Model/Promotion.php
CHANGED
|
@@ -18,6 +18,7 @@ class Asperience_Productextend_Model_Promotion extends Mage_Core_Model_Abstract
|
|
| 18 |
const XML_PATH_ALLOW_NEW = 'catalog/productextend/allow_new';
|
| 19 |
const XML_PATH_ALLOW_PRICE = 'catalog/productextend/allow_price';
|
| 20 |
const XML_PATH_ALLOW_SPE_PRICE = 'catalog/productextend/allow_price_special';
|
|
|
|
| 21 |
const XML_PATH_ALLOW_SAVE = 'catalog/productextend/allow_save';
|
| 22 |
|
| 23 |
protected $_promoCollection = null;
|
|
@@ -28,18 +29,18 @@ class Asperience_Productextend_Model_Promotion extends Mage_Core_Model_Abstract
|
|
| 28 |
$this->_init('productextend/promotion');
|
| 29 |
}
|
| 30 |
|
| 31 |
-
public function savePromo($product){
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
->setTypeId($product->getTypeId())
|
| 35 |
-
|
| 36 |
->setSpecialFromDate($product->getSpecialFromDate())
|
| 37 |
->setSpecialToDate($product->getSpecialToDate())
|
|
|
|
|
|
|
|
|
|
| 38 |
->setUser(Mage::getSingleton('admin/session')->getUser()->getUsername())
|
| 39 |
->setCreatedTime(date("Y-m-d G:i:s", Mage::getModel('core/date')->timestamp(time())));
|
| 40 |
-
if($webId = $product->getWebsiteIds()){
|
| 41 |
-
$this->setWebsiteId($webId[0]);
|
| 42 |
-
}
|
| 43 |
$this->save();
|
| 44 |
}
|
| 45 |
|
|
@@ -50,7 +51,6 @@ class Asperience_Productextend_Model_Promotion extends Mage_Core_Model_Abstract
|
|
| 50 |
->loadAllPromoByProduct($productId);
|
| 51 |
}
|
| 52 |
return $this->_promoCollection;
|
| 53 |
-
|
| 54 |
}
|
| 55 |
|
| 56 |
}
|
| 18 |
const XML_PATH_ALLOW_NEW = 'catalog/productextend/allow_new';
|
| 19 |
const XML_PATH_ALLOW_PRICE = 'catalog/productextend/allow_price';
|
| 20 |
const XML_PATH_ALLOW_SPE_PRICE = 'catalog/productextend/allow_price_special';
|
| 21 |
+
const XML_PATH_ALLOW_TIER_PRICE = 'catalog/productextend/allow_price_tier';
|
| 22 |
const XML_PATH_ALLOW_SAVE = 'catalog/productextend/allow_save';
|
| 23 |
|
| 24 |
protected $_promoCollection = null;
|
| 29 |
$this->_init('productextend/promotion');
|
| 30 |
}
|
| 31 |
|
| 32 |
+
public function savePromo($product,$old_product,$tprice_change,$observer){
|
| 33 |
+
$this->setProductId($product->getId())
|
| 34 |
+
->setPrice($product->getPrice())
|
| 35 |
+
->setTypeId($product->getTypeId())
|
| 36 |
+
->setSpecialPrice($product->getSpecialPrice())
|
| 37 |
->setSpecialFromDate($product->getSpecialFromDate())
|
| 38 |
->setSpecialToDate($product->getSpecialToDate())
|
| 39 |
+
->setTierPrice($tprice_change)
|
| 40 |
+
->setWebsiteId(Mage::app()->getStore($product->getStoreId())->getWebsiteId())
|
| 41 |
+
->setStoreId($product->getStoreId())
|
| 42 |
->setUser(Mage::getSingleton('admin/session')->getUser()->getUsername())
|
| 43 |
->setCreatedTime(date("Y-m-d G:i:s", Mage::getModel('core/date')->timestamp(time())));
|
|
|
|
|
|
|
|
|
|
| 44 |
$this->save();
|
| 45 |
}
|
| 46 |
|
| 51 |
->loadAllPromoByProduct($productId);
|
| 52 |
}
|
| 53 |
return $this->_promoCollection;
|
|
|
|
| 54 |
}
|
| 55 |
|
| 56 |
}
|
app/code/community/Asperience/Productextend/etc/config.xml
CHANGED
|
@@ -10,7 +10,7 @@
|
|
| 10 |
<config>
|
| 11 |
<modules>
|
| 12 |
<Asperience_Productextend>
|
| 13 |
-
<version>0.1.
|
| 14 |
</Asperience_Productextend>
|
| 15 |
</modules>
|
| 16 |
|
|
@@ -33,7 +33,7 @@
|
|
| 33 |
<sort_order>32</sort_order>
|
| 34 |
<children>
|
| 35 |
<promos module="productextend">
|
| 36 |
-
<title>
|
| 37 |
<sort_order>11</sort_order>
|
| 38 |
<action>productextend/adminhtml_promotion</action>
|
| 39 |
</promos>
|
|
@@ -65,7 +65,7 @@
|
|
| 65 |
<layout>
|
| 66 |
<updates>
|
| 67 |
<productextend>
|
| 68 |
-
<file>productextend.xml</file>
|
| 69 |
</productextend>
|
| 70 |
</updates>
|
| 71 |
</layout>
|
|
@@ -186,8 +186,9 @@
|
|
| 186 |
<allow_new><![CDATA[1]]></allow_new>
|
| 187 |
<allow_price><![CDATA[1]]></allow_price>
|
| 188 |
<allow_price_special><![CDATA[1]]></allow_price_special>
|
|
|
|
| 189 |
<allow_save><![CDATA[1]]></allow_save>
|
| 190 |
-
<recipient_email><![CDATA[
|
| 191 |
<email_price_template>catalog_productextend_email_price_template</email_price_template>
|
| 192 |
<sender_email_identity>general</sender_email_identity>
|
| 193 |
</productextend>
|
| 10 |
<config>
|
| 11 |
<modules>
|
| 12 |
<Asperience_Productextend>
|
| 13 |
+
<version>0.1.5</version>
|
| 14 |
</Asperience_Productextend>
|
| 15 |
</modules>
|
| 16 |
|
| 33 |
<sort_order>32</sort_order>
|
| 34 |
<children>
|
| 35 |
<promos module="productextend">
|
| 36 |
+
<title>Price changes history</title>
|
| 37 |
<sort_order>11</sort_order>
|
| 38 |
<action>productextend/adminhtml_promotion</action>
|
| 39 |
</promos>
|
| 65 |
<layout>
|
| 66 |
<updates>
|
| 67 |
<productextend>
|
| 68 |
+
<file>asperience/productextend.xml</file>
|
| 69 |
</productextend>
|
| 70 |
</updates>
|
| 71 |
</layout>
|
| 186 |
<allow_new><![CDATA[1]]></allow_new>
|
| 187 |
<allow_price><![CDATA[1]]></allow_price>
|
| 188 |
<allow_price_special><![CDATA[1]]></allow_price_special>
|
| 189 |
+
<allow_tier_price><![CDATA[1]]></allow_tier_price>
|
| 190 |
<allow_save><![CDATA[1]]></allow_save>
|
| 191 |
+
<recipient_email><![CDATA[commercial@asperience.fr]]></recipient_email>
|
| 192 |
<email_price_template>catalog_productextend_email_price_template</email_price_template>
|
| 193 |
<sender_email_identity>general</sender_email_identity>
|
| 194 |
</productextend>
|
app/code/community/Asperience/Productextend/etc/system.xml
CHANGED
|
@@ -64,6 +64,15 @@
|
|
| 64 |
<show_in_website>1</show_in_website>
|
| 65 |
<show_in_store>1</show_in_store>
|
| 66 |
</allow_price_special>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
<allow_save translate="label">
|
| 68 |
<label>Save products in promotions history</label>
|
| 69 |
<frontend_type>select</frontend_type>
|
|
@@ -105,4 +114,4 @@
|
|
| 105 |
</groups>
|
| 106 |
</catalog>
|
| 107 |
</sections>
|
| 108 |
-
</config>
|
| 64 |
<show_in_website>1</show_in_website>
|
| 65 |
<show_in_store>1</show_in_store>
|
| 66 |
</allow_price_special>
|
| 67 |
+
<allow_tier_price translate="label">
|
| 68 |
+
<label>Allow alert when product tier price changes</label>
|
| 69 |
+
<frontend_type>select</frontend_type>
|
| 70 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 71 |
+
<sort_order>6</sort_order>
|
| 72 |
+
<show_in_default>1</show_in_default>
|
| 73 |
+
<show_in_website>1</show_in_website>
|
| 74 |
+
<show_in_store>1</show_in_store>
|
| 75 |
+
</allow_tier_price>
|
| 76 |
<allow_save translate="label">
|
| 77 |
<label>Save products in promotions history</label>
|
| 78 |
<frontend_type>select</frontend_type>
|
| 114 |
</groups>
|
| 115 |
</catalog>
|
| 116 |
</sections>
|
| 117 |
+
</config>
|
app/code/community/Asperience/Productextend/sql/productextend_setup/mysql4-upgrade-0.1.1-0.1.5.php
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* @category ASPerience
|
| 4 |
+
* @package Asperience_Productextend
|
| 5 |
+
* @author ASPerience - www.asperience.fr
|
| 6 |
+
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 7 |
+
*/
|
| 8 |
+
|
| 9 |
+
$installer = $this;
|
| 10 |
+
|
| 11 |
+
$installer->startSetup();
|
| 12 |
+
|
| 13 |
+
$installer->run("ALTER TABLE {$this->getTable('history_promotion')} ADD `tier_price` TEXT NOT NULL AFTER `special_to_date`");
|
| 14 |
+
$installer->run("ALTER TABLE {$this->getTable('history_promotion')} ADD `store_id` smallint(5) unsigned default '0' AFTER `website_id`");
|
| 15 |
+
|
| 16 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/layout/productextend.xml
DELETED
|
@@ -1,16 +0,0 @@
|
|
| 1 |
-
<?xml version="1.0"?>
|
| 2 |
-
<!--
|
| 3 |
-
/**
|
| 4 |
-
* @category ASPerience
|
| 5 |
-
* @package Asperience_Productextend
|
| 6 |
-
* @author ASPerience - www.asperience.fr
|
| 7 |
-
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 8 |
-
*/
|
| 9 |
-
-->
|
| 10 |
-
<layout version="0.1.0">
|
| 11 |
-
<productextend_adminhtml_promotion_index>
|
| 12 |
-
<reference name="content">
|
| 13 |
-
<block type="productextend/adminhtml_promotion" name="promotion" />
|
| 14 |
-
</reference>
|
| 15 |
-
</productextend_adminhtml_promotion_index>
|
| 16 |
-
</layout>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/design/adminhtml/default/default/template/productextend/catalog/product/edit/price/promotion.phtml
DELETED
|
@@ -1,42 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
/**
|
| 3 |
-
* @category ASPerience
|
| 4 |
-
* @package Asperience_Productextend
|
| 5 |
-
* @author ASPerience - www.asperience.fr
|
| 6 |
-
* @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
|
| 7 |
-
*/
|
| 8 |
-
?>
|
| 9 |
-
|
| 10 |
-
<tr>
|
| 11 |
-
<td class="label"><?php echo $this->getElement()->getLabel() ?></td>
|
| 12 |
-
|
| 13 |
-
<?php if($_promotions = $this->loadPromotions()): ?>
|
| 14 |
-
<td colspan="10" class="grid tier">
|
| 15 |
-
<table cellspacing="0" style="border:solid 1px #CBD3D4">
|
| 16 |
-
<tr class="headings">
|
| 17 |
-
<th><?php echo Mage::helper('productextend')->__('User') ?></th>
|
| 18 |
-
<th><?php echo Mage::helper('productextend')->__('Price') ?></th>
|
| 19 |
-
<th><?php echo Mage::helper('productextend')->__('Special price') ?></th>
|
| 20 |
-
<th><?php echo Mage::helper('productextend')->__('Special Price From Date') ?></th>
|
| 21 |
-
<th><?php echo Mage::helper('productextend')->__('Special Price To Date') ?></th>
|
| 22 |
-
<th><?php echo Mage::helper('productextend')->__('Website') ?></th>
|
| 23 |
-
<th class="last"><?php echo Mage::helper('productextend')->__('Created At') ?></th>
|
| 24 |
-
</tr>
|
| 25 |
-
<?php foreach($_promotions as $_promoId):
|
| 26 |
-
$_promo = $this->getPromotion($_promoId) ?>
|
| 27 |
-
<tr >
|
| 28 |
-
<td><?php echo $_promo->getUser() ?></td>
|
| 29 |
-
<td><?php echo Mage::helper('core')->currency($_promo->getPrice()) ?></td>
|
| 30 |
-
<td><?php echo Mage::helper('core')->currency($_promo->getSpecialPrice()) ?></td>
|
| 31 |
-
<td><?php echo Mage::helper('core')->formatDate($_promo->getSpecialFromDate()) ?></td>
|
| 32 |
-
<td><?php echo Mage::helper('core')->formatDate($_promo->getSpecialToDate()) ?></td>
|
| 33 |
-
<td><?php echo Mage::app()->getWebsite($_promo->getWebsiteId())->getName() ?></td>
|
| 34 |
-
<td><?php echo $_promo->getCreatedTime() ?></td>
|
| 35 |
-
</tr>
|
| 36 |
-
<?php endforeach; ?>
|
| 37 |
-
</table>
|
| 38 |
-
</td>
|
| 39 |
-
<?php else: ?>
|
| 40 |
-
<td colspan="10" class="grid tier"><?php echo Mage::helper('productextend')->__('This product is not listed in the promotions history.')?></td>
|
| 41 |
-
<?php endif; ?>
|
| 42 |
-
</tr>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app/locale/fr_FR/Asperience_Productextend.csv
CHANGED
|
@@ -1,15 +1,28 @@
|
|
| 1 |
-
"
|
| 2 |
"Product Alerts in internal","Alertes du produit en interne"
|
| 3 |
"Deleted product","Produit supprimé"
|
| 4 |
"An error arose during the sending of emails.","Une erreur est survenue lors de l'envoi d'emails."
|
|
|
|
|
|
|
| 5 |
"Allow alert when there is a new product","Autoriser l'alerte quand il y a un nouveau produit"
|
|
|
|
| 6 |
"Allow alert when product special price changes","Autoriser l'alerte quand le prix spécial du produit change"
|
| 7 |
-
"Allow alerts when the product is inactive","Autoriser les alertes quand le produit est désactivé"
|
| 8 |
"Allow alert when product status changes","Autoriser l'alerte quand le statut du produit change"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
"Save products in promotions history","Enregistrer les promotions dans l'historique"
|
| 10 |
"New product :","Nouveau produit :"
|
| 11 |
"Product Modification :","Modification du produit :"
|
| 12 |
"Product Status Change : ","Changement de Statut : "
|
| 13 |
"Price : ","Prix : "
|
| 14 |
-
"Special Price : ","Prix
|
|
|
|
|
|
|
| 15 |
"This product is not listed in the promotions history.","Ce produit n'est pas répertorié dans l'historique des promotions."
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"Price changes history","Historique des changements de prix"
|
| 2 |
"Product Alerts in internal","Alertes du produit en interne"
|
| 3 |
"Deleted product","Produit supprimé"
|
| 4 |
"An error arose during the sending of emails.","Une erreur est survenue lors de l'envoi d'emails."
|
| 5 |
+
"Allow alert when product status changes","Autoriser l'alerte quand le statut du produit change"
|
| 6 |
+
"Allow alerts when the product is inactive","Autoriser les alertes quand le produit est désactivé"
|
| 7 |
"Allow alert when there is a new product","Autoriser l'alerte quand il y a un nouveau produit"
|
| 8 |
+
"Allow alert when product price changes","Autoriser l'alerte quand le prix du produit change"
|
| 9 |
"Allow alert when product special price changes","Autoriser l'alerte quand le prix spécial du produit change"
|
|
|
|
| 10 |
"Allow alert when product status changes","Autoriser l'alerte quand le statut du produit change"
|
| 11 |
+
"Allow alert when product tier price changes","Autoriser l'alerte quand le prix tiers du produit change"
|
| 12 |
+
"Send Emails To","Envoyer les alertes à"
|
| 13 |
+
"Price alert Email Template","Modèle de mail d'alerte"
|
| 14 |
+
"Alert Email Sender","Emetteur des alertes"
|
| 15 |
"Save products in promotions history","Enregistrer les promotions dans l'historique"
|
| 16 |
"New product :","Nouveau produit :"
|
| 17 |
"Product Modification :","Modification du produit :"
|
| 18 |
"Product Status Change : ","Changement de Statut : "
|
| 19 |
"Price : ","Prix : "
|
| 20 |
+
"Special Price : ","Prix promo : "
|
| 21 |
+
"Special Price From Date : ","A partir de : "
|
| 22 |
+
"Special Price To Date : ","Jusqu'à : "
|
| 23 |
"This product is not listed in the promotions history.","Ce produit n'est pas répertorié dans l'historique des promotions."
|
| 24 |
+
"Price","Prix"
|
| 25 |
+
"Special Price","Prix promo"
|
| 26 |
+
"Special Price From Date","A partir de"
|
| 27 |
+
"Special Price To Date","Jusqu'à"
|
| 28 |
+
"Tier price changes","Modifications prix tiers"
|
package.xml
CHANGED
|
@@ -1,25 +1,26 @@
|
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>Asperience_Productextend</name>
|
| 4 |
-
<version>0.1.
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license uri="http://www.opensource.org/licenses/osl-3.0.php">Open Software License (OSL 3.0)</license>
|
| 7 |
<channel>community</channel>
|
| 8 |
<extends/>
|
| 9 |
<summary>Module allowing to send product alerts in internal and to historize promotions.</summary>
|
| 10 |
-
<description>This module allows to send alerts during modifications on products. Indeed, an email is sent
|
| 11 |
-
- A new product is created
|
| 12 |
-
- Product price is changed
|
| 13 |
-
- Product status is changed
|
| 14 |
-
- Product special price is changed
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
<
|
| 20 |
-
<
|
| 21 |
-
<
|
| 22 |
-
<
|
|
|
|
| 23 |
<compatible/>
|
| 24 |
-
<dependencies
|
| 25 |
</package>
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>Asperience_Productextend</name>
|
| 4 |
+
<version>0.1.5</version>
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license uri="http://www.opensource.org/licenses/osl-3.0.php">Open Software License (OSL 3.0)</license>
|
| 7 |
<channel>community</channel>
|
| 8 |
<extends/>
|
| 9 |
<summary>Module allowing to send product alerts in internal and to historize promotions.</summary>
|
| 10 |
+
<description>This module allows to send alerts during modifications on products. Indeed, an email is sent for internal users when:
|
| 11 |
+
- A new product is created
|
| 12 |
+
- Product price is changed
|
| 13 |
+
- Product status is changed
|
| 14 |
+
- Product special price is changed
|
| 15 |
+
- Product tier price is changed
|
| 16 |
+

|
| 17 |
+
This module is developed by ASPerience, french company. 
|
| 18 |
+
<a target="_blank" url="http://www.asperience.fr">http://www.asperience.fr</a></description>
|
| 19 |
+
<notes>If you have ideas for improvements or find bugs, please send them to Jean-Sébastien Hederer at contact@asperience.fr, with Asperience_Productextend as part of the subject line.</notes>
|
| 20 |
+
<authors><author><name>Jean-Sébastien Hederer</name><user>hedererjs</user><email>hedererjs@asperience.fr</email></author></authors>
|
| 21 |
+
<date>2012-07-15</date>
|
| 22 |
+
<time>19:58:45</time>
|
| 23 |
+
<contents><target name="magecommunity"><dir name="Asperience"><dir name="Productextend"><dir name="Block"><dir name="Adminhtml"><dir name="Catalog"><dir name="Product"><dir name="Edit"><dir name="Tab"><dir name="Price"><file name="Promotion.php" hash="8e09f30000d4d70ac05037eb97418fa3"/></dir></dir></dir></dir></dir><dir name="Promotion"><dir name="Grid"><dir name="Renderer"><file name="Products.php" hash="ae59c7cd384c82fda09baa2fb5174913"/></dir></dir><file name="Grid.php" hash="f6b43a7c2c28051752673b302cadeaad"/></dir><file name="Promotion.php" hash="cb8aaa7b745d6a95a416218123e5b603"/></dir></dir><dir name="Helper"><file name="Data.php" hash="7a4ab078a15b8576710888b8323e9c79"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Promotion"><file name="Collection.php" hash="b53b2dd050281bc911f6b6c2038e1219"/></dir><file name="Promotion.php" hash="3ec67dd19cdebf42a97fe857ac8a62d0"/></dir><file name="Observer.php" hash="109be67d5236d6dbb96389dd9e8a3765"/><file name="Promotion.php" hash="bd8eef8fc50b1f9715f135d4d999a2aa"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="PromotionController.php" hash="b371ace2eb96bb8a5135aea4032211b9"/></dir></dir><dir name="etc"><file name="config.xml" hash="e5bee60802bb43f60794c397204dceb6"/><file name="system.xml" hash="bf4ebc153a332f1d7d7f3cf5c08a2b6e"/></dir><dir name="sql"><dir name="productextend_setup"><file name="mysql4-install-0.1.0.php" hash="1f4685ed186c53e1530567ce1732bf5c"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="e72704ad932a3a63f134551fadb77d15"/><file name="mysql4-upgrade-0.1.1-0.1.5.php" hash="13e779030fabee51448ce6e58bf107eb"/></dir></dir></dir></dir></target><target name="magelocale"><dir><dir name="en_US"><file name="Asperience_Productextend.csv" hash="eebe23a253fa5aff679e36676561280b"/><dir name="template"><dir name="email"><file name="asperience_product_alert.html" hash="7703bd13f66d22b2a46f8308b02a791b"/></dir></dir></dir><dir name="fr_FR"><file name="Asperience_Productextend.csv" hash="f46d2cc7ec43945d442673b6c56e92f3"/><dir name="template"><dir name="email"><file name="asperience_product_alert.html" hash="af405ef11aab0cd5795d0736533007c1"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Asperience_Productextend.xml" hash="607c5850bc72f2c6fc7452a85657f95a"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="productextend.xml" hash=""/></dir></dir></dir></dir></target></contents>
|
| 24 |
<compatible/>
|
| 25 |
+
<dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
|
| 26 |
</package>
|
