Version Notes
- Automatic event based customer group auto switch
- Switch group based on lifetime statistic
- Switch group based on previous group switch date
- Manual group switch
- Sending email notifications on group change
- Downgrade to some group based on customer activity
- Progress bar based on lifetime statistic and current group purchases statistic
- Text alert in custmer account for customer groups
- Ability to see statistic of purchases in current group in customer account
- Individual email welcome messages for customers
- Ability to easily filter customers by group in native customer grid
- Multistore support
- 100% free extension
Download this release
Release Info
| Developer | Alex Boone |
| Extension | freento-groupautoswitch |
| Version | 1.0.1 |
| Comparing to | |
| See all releases | |
Version 1.0.1
- app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Form.php +19 -0
- app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Form/Autoswitch.php +61 -0
- app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Form/Conditions.php +35 -0
- app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Form/Downgrade.php +63 -0
- app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Form/GroupSettings.php +30 -0
- app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Form/Main.php +60 -0
- app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Tabs.php +51 -0
- app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Log.php +17 -0
- app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Log/Grid.php +56 -0
- app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/System/Config/Form/ForceFill.php +33 -0
- app/code/community/Freento/GroupAutoSwitch/Exception/General.php +6 -0
- app/code/community/Freento/GroupAutoSwitch/Helper/Data.php +12 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Cron.php +50 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Group.php +268 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Log.php +12 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Observer.php +34 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Resource/Group.php +9 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Resource/Group/Collection.php +28 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Resource/Log.php +17 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Resource/Log/Collection.php +9 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Rule/Condition/Combine.php +28 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Rule/Condition/Customer/Attribute/Group.php +46 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Rule/Condition/Customer/Statistic/Abstract.php +34 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Rule/Condition/Customer/Statistic/CurrentGroupSales.php +40 -0
- app/code/community/Freento/GroupAutoSwitch/Model/Rule/Condition/Customer/Statistic/LifetimeSales.php +36 -0
- app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron.php +42 -0
- app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron/expectations/downgradeCheck.php +6 -0
- app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron/expectations/forceFill.php +4 -0
- app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron/fixtures/downgradeCheck.php +92 -0
- app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron/fixtures/forceFill.php +79 -0
- app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron/providers/downgradeCheck.php +6 -0
- app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron/providers/forceFill.php +6 -0
- app/code/community/Freento/GroupAutoSwitch/Test/Model/Group.php +55 -0
- app/code/community/Freento/GroupAutoSwitch/Test/Model/Group/expectations/switchGroup.php +7 -0
- app/code/community/Freento/GroupAutoSwitch/Test/Model/Group/fixtures/switchGroup.php +70 -0
- app/code/community/Freento/GroupAutoSwitch/Test/Model/Group/providers/switchGroup.php +7 -0
- app/code/community/Freento/GroupAutoSwitch/controllers/Adminhtml/Customer/GroupController.php +140 -0
- app/code/community/Freento/GroupAutoSwitch/controllers/Adminhtml/LogController.php +27 -0
- app/code/community/Freento/GroupAutoSwitch/controllers/Adminhtml/System/ConfigController.php +35 -0
- app/code/community/Freento/GroupAutoSwitch/etc/adminhtml.xml +45 -0
- app/code/community/Freento/GroupAutoSwitch/etc/config.xml +152 -0
- app/code/community/Freento/GroupAutoSwitch/etc/system.xml +42 -0
- app/code/community/Freento/GroupAutoSwitch/sql/freento_groupautoswitch_setup/mysql4-install-1.0.0.php +60 -0
- app/design/adminhtml/default/default/layout/freento/groupautoswitch.xml +16 -0
- app/design/adminhtml/default/default/template/freento_groupautoswitch/system/config/forceFill.phtml +42 -0
- app/etc/modules/Freento_GroupAutoSwitch.xml +10 -0
- app/locale/en_US/template/email/freento/groupautoswitch/auto_switch.html +18 -0
- app/locale/en_US/template/email/freento/groupautoswitch/downgrade.html +18 -0
- app/locale/en_US/template/email/freento/groupautoswitch/downgrade_before.html +21 -0
- package.xml +46 -0
app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Form.php
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Block_Adminhtml_Customer_Group_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
|
| 4 |
+
{
|
| 5 |
+
protected function _prepareForm()
|
| 6 |
+
{
|
| 7 |
+
$form = new Varien_Data_Form(array(
|
| 8 |
+
'id' => 'edit_form',
|
| 9 |
+
'action' => $this->getUrl('*/*/save', array('id' => $this->getRequest()->getParam('id'))),
|
| 10 |
+
'method' => 'post',
|
| 11 |
+
'enctype' => 'multipart/form-data'
|
| 12 |
+
)
|
| 13 |
+
);
|
| 14 |
+
|
| 15 |
+
$form->setUseContainer(true);
|
| 16 |
+
$this->setForm($form);
|
| 17 |
+
return parent::_prepareForm();
|
| 18 |
+
}
|
| 19 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Form/Autoswitch.php
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Block_Adminhtml_Customer_Group_Edit_Form_Autoswitch extends Mage_Adminhtml_Block_Widget_Form
|
| 4 |
+
{
|
| 5 |
+
protected function _prepareForm()
|
| 6 |
+
{
|
| 7 |
+
$customerGroup = Mage::registry('current_group');
|
| 8 |
+
$model = Mage::helper('freento_groupautoswitch')->getAutoSwitchInfo($customerGroup);
|
| 9 |
+
$form = new Varien_Data_Form();
|
| 10 |
+
|
| 11 |
+
$fieldset = $form->addFieldset('base_fieldset', array('legend'=>Mage::helper('freento_groupautoswitch')->__('Autoswitch Configuration')));
|
| 12 |
+
|
| 13 |
+
$fieldset->addField('is_enabled', 'select', array(
|
| 14 |
+
'label' => Mage::helper('freento_groupautoswitch')->__('Enable'),
|
| 15 |
+
'title' => Mage::helper('freento_groupautoswitch')->__('Enable'),
|
| 16 |
+
'name' => 'is_enabled',
|
| 17 |
+
'options' => array(
|
| 18 |
+
'1' => Mage::helper('freento_groupautoswitch')->__('Yes'),
|
| 19 |
+
'0' => Mage::helper('freento_groupautoswitch')->__('No'),
|
| 20 |
+
),
|
| 21 |
+
));
|
| 22 |
+
|
| 23 |
+
if (! Mage::app()->isSingleStoreMode()) {
|
| 24 |
+
$field = $fieldset->addField('store_id', 'select', [
|
| 25 |
+
'name' => 'stores[]',
|
| 26 |
+
'label' => $this->__('Store View'),
|
| 27 |
+
'title' => $this->__('Store View'),
|
| 28 |
+
'required' => true,
|
| 29 |
+
'values' => Mage::getSingleton('adminhtml/system_store')->getStoreValuesForForm(false, true),
|
| 30 |
+
]);
|
| 31 |
+
$field->setRenderer($this->getLayout()->createBlock('adminhtml/store_switcher_form_renderer_fieldset_element'));
|
| 32 |
+
} else {
|
| 33 |
+
$fieldset->addField('store_id', 'hidden', [
|
| 34 |
+
'name' => 'stores[]',
|
| 35 |
+
'value' => Mage::app()->getStore(true)->getId()
|
| 36 |
+
]);
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
$fieldset->addField('priority', 'text', array(
|
| 40 |
+
'label' => Mage::helper('freento_groupautoswitch')->__('Rules Priority'),
|
| 41 |
+
'title' => Mage::helper('freento_groupautoswitch')->__('Rules Priority'),
|
| 42 |
+
'name' => 'priority',
|
| 43 |
+
));
|
| 44 |
+
|
| 45 |
+
$fieldset->addField('stop_further_rules', 'select', array(
|
| 46 |
+
'label' => Mage::helper('freento_groupautoswitch')->__('Stop Further Rules Processing'),
|
| 47 |
+
'title' => Mage::helper('freento_groupautoswitch')->__('Stop Further Rules Processing'),
|
| 48 |
+
'name' => 'stop_further_rules',
|
| 49 |
+
'options' => array(
|
| 50 |
+
'1' => Mage::helper('freento_groupautoswitch')->__('Yes'),
|
| 51 |
+
'0' => Mage::helper('freento_groupautoswitch')->__('No'),
|
| 52 |
+
),
|
| 53 |
+
));
|
| 54 |
+
|
| 55 |
+
$form->setValues($model);
|
| 56 |
+
|
| 57 |
+
$this->setForm($form);
|
| 58 |
+
|
| 59 |
+
return parent::_prepareForm();
|
| 60 |
+
}
|
| 61 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Form/Conditions.php
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Block_Adminhtml_Customer_Group_Edit_Form_Conditions extends Mage_Adminhtml_Block_Widget_Form
|
| 4 |
+
{
|
| 5 |
+
protected function _prepareForm()
|
| 6 |
+
{
|
| 7 |
+
$helper = Mage::helper('freento_groupautoswitch');
|
| 8 |
+
$customerGroup = Mage::registry('current_group');
|
| 9 |
+
$model = Mage::helper('freento_groupautoswitch')->getAutoSwitchInfo($customerGroup);
|
| 10 |
+
|
| 11 |
+
$form = new Varien_Data_Form();
|
| 12 |
+
|
| 13 |
+
$form->setHtmlIdPrefix('rule_');
|
| 14 |
+
|
| 15 |
+
$renderer = Mage::getBlockSingleton('adminhtml/widget_form_renderer_fieldset')
|
| 16 |
+
->setTemplate('promo/fieldset.phtml')
|
| 17 |
+
->setNewChildUrl($this->getUrl('*/*/newConditionHtml/form/rule_conditions_fieldset'));
|
| 18 |
+
|
| 19 |
+
$fieldset = $form->addFieldset('conditions_fieldset', array(
|
| 20 |
+
'legend' => $helper->__('Conditions'))
|
| 21 |
+
)->setRenderer($renderer);
|
| 22 |
+
|
| 23 |
+
$fieldset->addField('conditions', 'text', array(
|
| 24 |
+
'name' => 'conditions',
|
| 25 |
+
'label' => $helper->__('Conditions'),
|
| 26 |
+
'title' => $helper->__('Conditions'),
|
| 27 |
+
'required' => true,
|
| 28 |
+
))->setRule($model)->setRenderer(Mage::getBlockSingleton('rule/conditions'));
|
| 29 |
+
|
| 30 |
+
$form->setValues($model);
|
| 31 |
+
|
| 32 |
+
$this->setForm($form);
|
| 33 |
+
return parent::_prepareForm();
|
| 34 |
+
}
|
| 35 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Form/Downgrade.php
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Block_Adminhtml_Customer_Group_Edit_Form_Downgrade extends Mage_Adminhtml_Block_Widget_Form
|
| 4 |
+
{
|
| 5 |
+
protected function _prepareForm()
|
| 6 |
+
{
|
| 7 |
+
$customerGroup = Mage::registry('current_group');
|
| 8 |
+
$model = Mage::helper('freento_groupautoswitch')->getAutoSwitchInfo($customerGroup);
|
| 9 |
+
$form = new Varien_Data_Form();
|
| 10 |
+
|
| 11 |
+
$fieldset = $form->addFieldset('base_fieldset', array('legend'=>Mage::helper('freento_groupautoswitch')->__('Downgrade')));
|
| 12 |
+
|
| 13 |
+
$fieldset->addField('downgrade_after', 'text', array(
|
| 14 |
+
'label' => Mage::helper('freento_groupautoswitch')->__('Downgrade After (days without purchase)'),
|
| 15 |
+
'title' => Mage::helper('freento_groupautoswitch')->__('Downgrade After (days without purchase)'),
|
| 16 |
+
'name' => 'downgrade_after',
|
| 17 |
+
));
|
| 18 |
+
|
| 19 |
+
$fieldset->addField('downgrade_group', 'select', array(
|
| 20 |
+
'label' => Mage::helper('freento_groupautoswitch')->__('Downgrade to Group'),
|
| 21 |
+
'title' => Mage::helper('freento_groupautoswitch')->__('Downgrade to Group'),
|
| 22 |
+
'name' => 'downgrade_group',
|
| 23 |
+
'values' => $this->_getAllCustomerGroupOptions()
|
| 24 |
+
));
|
| 25 |
+
|
| 26 |
+
$fieldset->addField('downgrade_template', 'select', array(
|
| 27 |
+
'label' => Mage::helper('freento_groupautoswitch')->__('Downgrade Email Template'),
|
| 28 |
+
'title' => Mage::helper('freento_groupautoswitch')->__('Downgrade Email Template'),
|
| 29 |
+
'name' => 'downgrade_template',
|
| 30 |
+
'values' => Mage::getModel('adminhtml/system_config_source_email_template')->toOptionArray()
|
| 31 |
+
));
|
| 32 |
+
|
| 33 |
+
$fieldset->addField('notify_customer_before_downgrade', 'text', array(
|
| 34 |
+
'label' => Mage::helper('freento_groupautoswitch')->__('Notify Customer Before Downgrade (days)'),
|
| 35 |
+
'title' => Mage::helper('freento_groupautoswitch')->__('Notify Customer Before Downgrade (days)'),
|
| 36 |
+
'name' => 'notify_customer_before_downgrade',
|
| 37 |
+
));
|
| 38 |
+
|
| 39 |
+
$fieldset->addField('notify_customer_before_downgrade_template', 'select', array(
|
| 40 |
+
'label' => Mage::helper('freento_groupautoswitch')->__('Notify Customer Before Downgrade Template'),
|
| 41 |
+
'title' => Mage::helper('freento_groupautoswitch')->__('Notify Customer Before Downgrade Template'),
|
| 42 |
+
'name' => 'notify_customer_before_downgrade_template',
|
| 43 |
+
'values' => Mage::getModel('adminhtml/system_config_source_email_template')->toOptionArray()
|
| 44 |
+
));
|
| 45 |
+
|
| 46 |
+
$form->setValues($model);
|
| 47 |
+
$this->setForm($form);
|
| 48 |
+
return parent::_prepareForm();
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
protected function _getAllCustomerGroupOptions(){
|
| 52 |
+
$all = Mage::getModel('customer/group')->getCollection();
|
| 53 |
+
$options = array('-1' => 'No changes');
|
| 54 |
+
foreach($all as $group){
|
| 55 |
+
/* Skip Not logged in group */
|
| 56 |
+
if ($group->getId() == 0) {
|
| 57 |
+
continue;
|
| 58 |
+
}
|
| 59 |
+
$options[$group->getId()] = $group->getData('customer_group_code');
|
| 60 |
+
}
|
| 61 |
+
return $options;
|
| 62 |
+
}
|
| 63 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Form/GroupSettings.php
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Block_Adminhtml_Customer_Group_Edit_Form_GroupSettings extends Mage_Adminhtml_Block_Widget_Form
|
| 4 |
+
{
|
| 5 |
+
protected function _prepareForm()
|
| 6 |
+
{
|
| 7 |
+
$customerGroup = Mage::registry('current_group');
|
| 8 |
+
$model = Mage::helper('freento_groupautoswitch')->getAutoSwitchInfo($customerGroup);
|
| 9 |
+
$form = new Varien_Data_Form();
|
| 10 |
+
|
| 11 |
+
$fieldset = $form->addFieldset('base_fieldset', array('legend'=>Mage::helper('freento_groupautoswitch')->__('Group Settings')));
|
| 12 |
+
|
| 13 |
+
$fieldset->addField('notify_on_group_change_template', 'select', array(
|
| 14 |
+
'label' => Mage::helper('freento_groupautoswitch')->__('Notify Customer After Group Change Template'),
|
| 15 |
+
'title' => Mage::helper('freento_groupautoswitch')->__('Notify Customer After Group Change Template'),
|
| 16 |
+
'name' => 'notify_on_group_change_template',
|
| 17 |
+
'values' => Mage::getModel('adminhtml/system_config_source_email_template')->toOptionArray()
|
| 18 |
+
));
|
| 19 |
+
|
| 20 |
+
$fieldset->addField('text_for_customer', 'text', array(
|
| 21 |
+
'label' => Mage::helper('freento_groupautoswitch')->__('Text for Customer'),
|
| 22 |
+
'title' => Mage::helper('freento_groupautoswitch')->__('Text for Customer'),
|
| 23 |
+
'name' => 'text_for_customer',
|
| 24 |
+
));
|
| 25 |
+
|
| 26 |
+
$form->setValues($model);
|
| 27 |
+
$this->setForm($form);
|
| 28 |
+
return parent::_prepareForm();
|
| 29 |
+
}
|
| 30 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Form/Main.php
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Block_Adminhtml_Customer_Group_Edit_Form_Main extends Mage_Adminhtml_Block_Widget_Form
|
| 4 |
+
{
|
| 5 |
+
protected function _prepareForm()
|
| 6 |
+
{
|
| 7 |
+
parent::_prepareLayout();
|
| 8 |
+
$form = new Varien_Data_Form();
|
| 9 |
+
$customerGroup = Mage::registry('current_group');
|
| 10 |
+
|
| 11 |
+
$fieldset = $form->addFieldset('base_fieldset', array('legend'=>Mage::helper('customer')->__('Group Information')));
|
| 12 |
+
|
| 13 |
+
$validateClass = sprintf('required-entry validate-length maximum-length-%d',
|
| 14 |
+
Mage_Customer_Model_Group::GROUP_CODE_MAX_LENGTH);
|
| 15 |
+
$name = $fieldset->addField('customer_group_code', 'text',
|
| 16 |
+
array(
|
| 17 |
+
'name' => 'code',
|
| 18 |
+
'label' => Mage::helper('customer')->__('Group Name'),
|
| 19 |
+
'title' => Mage::helper('customer')->__('Group Name'),
|
| 20 |
+
'note' => Mage::helper('customer')->__('Maximum length must be less then %s symbols', Mage_Customer_Model_Group::GROUP_CODE_MAX_LENGTH),
|
| 21 |
+
'class' => $validateClass,
|
| 22 |
+
'required' => true,
|
| 23 |
+
)
|
| 24 |
+
);
|
| 25 |
+
|
| 26 |
+
if ($customerGroup->getId()==0 && $customerGroup->getCustomerGroupCode() ) {
|
| 27 |
+
$name->setDisabled(true);
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
$fieldset->addField('tax_class_id', 'select',
|
| 31 |
+
array(
|
| 32 |
+
'name' => 'tax_class',
|
| 33 |
+
'label' => Mage::helper('customer')->__('Tax Class'),
|
| 34 |
+
'title' => Mage::helper('customer')->__('Tax Class'),
|
| 35 |
+
'class' => 'required-entry',
|
| 36 |
+
'required' => true,
|
| 37 |
+
'values' => Mage::getSingleton('tax/class_source_customer')->toOptionArray()
|
| 38 |
+
)
|
| 39 |
+
);
|
| 40 |
+
|
| 41 |
+
if (!is_null($customerGroup->getId())) {
|
| 42 |
+
// If edit add id
|
| 43 |
+
$form->addField('id', 'hidden',
|
| 44 |
+
array(
|
| 45 |
+
'name' => 'id',
|
| 46 |
+
'value' => $customerGroup->getId(),
|
| 47 |
+
)
|
| 48 |
+
);
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
if( Mage::getSingleton('adminhtml/session')->getCustomerGroupData() ) {
|
| 52 |
+
$form->addValues(Mage::getSingleton('adminhtml/session')->getCustomerGroupData());
|
| 53 |
+
Mage::getSingleton('adminhtml/session')->setCustomerGroupData(null);
|
| 54 |
+
} else {
|
| 55 |
+
$form->addValues($customerGroup->getData());
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
$this->setForm($form);
|
| 59 |
+
}
|
| 60 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Customer/Group/Edit/Tabs.php
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_Groupautoswitch_Block_Adminhtml_Customer_Group_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
|
| 4 |
+
{
|
| 5 |
+
public function __construct()
|
| 6 |
+
{
|
| 7 |
+
parent::__construct();
|
| 8 |
+
$this->setId('id');
|
| 9 |
+
$this->setDestElementId('edit_form');
|
| 10 |
+
$this->setTitle(Mage::helper('freento_groupautoswitch')->__('Customer Group'));
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
protected function _beforeToHtml()
|
| 14 |
+
{
|
| 15 |
+
$helper = Mage::helper('freento_groupautoswitch');
|
| 16 |
+
|
| 17 |
+
$this->addTab('main_section', array(
|
| 18 |
+
'label' => $helper->__('Main'),
|
| 19 |
+
'title' => $helper->__('Main'),
|
| 20 |
+
'content' => $this->getLayout()->createBlock('freento_groupautoswitch/adminhtml_customer_group_edit_form_main')->toHtml(),
|
| 21 |
+
'active' => true
|
| 22 |
+
));
|
| 23 |
+
|
| 24 |
+
$this->addTab('autoswitch_section', array(
|
| 25 |
+
'label' => $helper->__('Autoswitch Configuration'),
|
| 26 |
+
'title' => $helper->__('Autoswitch Configuration'),
|
| 27 |
+
'content' => $this->getLayout()->createBlock('freento_groupautoswitch/adminhtml_customer_group_edit_form_autoswitch')->toHtml(),
|
| 28 |
+
));
|
| 29 |
+
|
| 30 |
+
$this->addTab('conditions_section', array(
|
| 31 |
+
'label' => $helper->__('Conditions'),
|
| 32 |
+
'title' => $helper->__('Conditions'),
|
| 33 |
+
'content' => $this->getLayout()->createBlock('freento_groupautoswitch/adminhtml_customer_group_edit_form_conditions')->toHtml(),
|
| 34 |
+
));
|
| 35 |
+
|
| 36 |
+
$this->addTab('group_settings', array(
|
| 37 |
+
'label' => $helper->__('Group Settings'),
|
| 38 |
+
'title' => $helper->__('Group Settings'),
|
| 39 |
+
'content' => $this->getLayout()->createBlock('freento_groupautoswitch/adminhtml_customer_group_edit_form_groupSettings')->toHtml(),
|
| 40 |
+
));
|
| 41 |
+
|
| 42 |
+
$this->addTab('downgrade', array(
|
| 43 |
+
'label' => $helper->__('Downgrade'),
|
| 44 |
+
'title' => $helper->__('Downgrade'),
|
| 45 |
+
'content' => $this->getLayout()->createBlock('freento_groupautoswitch/adminhtml_customer_group_edit_form_downgrade')->toHtml(),
|
| 46 |
+
));
|
| 47 |
+
|
| 48 |
+
return parent::_beforeToHtml();
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Log.php
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Block_Adminhtml_Log extends Mage_Core_Block_Template
|
| 4 |
+
{
|
| 5 |
+
|
| 6 |
+
public function __construct()
|
| 7 |
+
{
|
| 8 |
+
$this->_blockGroup = 'freento_groupautoswitch';
|
| 9 |
+
$this->_controller = 'adminhtml_log';
|
| 10 |
+
$this->_headerText = Mage::helper('freento_groupautoswitch')->__('Group auto swicth log');
|
| 11 |
+
|
| 12 |
+
parent::__construct();
|
| 13 |
+
|
| 14 |
+
$this->_removeButton('add');
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/Log/Grid.php
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Block_Adminhtml_Log_Grid extends Mage_Adminhtml_Block_Widget_Grid
|
| 4 |
+
{
|
| 5 |
+
|
| 6 |
+
public function __construct()
|
| 7 |
+
{
|
| 8 |
+
parent::__construct();
|
| 9 |
+
$this->setId('freentoGroupAutoSwitchLogGrid');
|
| 10 |
+
$this->setDefaultSort('id');
|
| 11 |
+
$this->setDefaultDir('DESC');
|
| 12 |
+
$this->setSaveParametersInSession(true);
|
| 13 |
+
$this->setUseAjax(true);
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
protected function _prepareCollection()
|
| 17 |
+
{
|
| 18 |
+
$this->setCollection(Mage::getModel('freento_groupautoswitch/log')->getCollection());
|
| 19 |
+
|
| 20 |
+
return parent::_prepareCollection();
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
protected function _prepareColumns()
|
| 24 |
+
{
|
| 25 |
+
$this->addColumn('id', array(
|
| 26 |
+
'header' => $this->__('ID'),
|
| 27 |
+
'type' => 'number',
|
| 28 |
+
'index' => 'id',
|
| 29 |
+
'align' => 'right',
|
| 30 |
+
'width' => '50px',
|
| 31 |
+
));
|
| 32 |
+
|
| 33 |
+
$this->addColumn('details', array(
|
| 34 |
+
'header' => $this->__('Details'),
|
| 35 |
+
'type' => 'text',
|
| 36 |
+
'index' => 'details',
|
| 37 |
+
));
|
| 38 |
+
|
| 39 |
+
$this->addColumn('created_at', array(
|
| 40 |
+
'header' => $this->__('Created At'),
|
| 41 |
+
'align' => 'right',
|
| 42 |
+
'width' => '150px',
|
| 43 |
+
'type' => 'datetime',
|
| 44 |
+
'index' => 'created_at',
|
| 45 |
+
'filter_index' => 'created_at',
|
| 46 |
+
));
|
| 47 |
+
|
| 48 |
+
return $this;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
public function getGridUrl()
|
| 52 |
+
{
|
| 53 |
+
return $this->getUrl('*/*/grid', array('_current'=>true));
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Block/Adminhtml/System/Config/Form/ForceFill.php
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Block_Adminhtml_System_Config_Form_ForceFill extends Mage_Adminhtml_Block_System_Config_Form_Field
|
| 4 |
+
{
|
| 5 |
+
|
| 6 |
+
protected function _prepareLayout()
|
| 7 |
+
{
|
| 8 |
+
parent::_prepareLayout();
|
| 9 |
+
if (!$this->getTemplate()) {
|
| 10 |
+
$this->setTemplate('freento_groupautoswitch/system/config/forceFill.phtml');
|
| 11 |
+
}
|
| 12 |
+
return $this;
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
public function render(Varien_Data_Form_Element_Abstract $element)
|
| 16 |
+
{
|
| 17 |
+
$element->unsScope()->unsCanUseWebsiteValue()->unsCanUseDefaultValue();
|
| 18 |
+
return parent::render($element);
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
|
| 22 |
+
{
|
| 23 |
+
$originalData = $element->getOriginalData();
|
| 24 |
+
$this->addData(array(
|
| 25 |
+
'button_label' => Mage::helper('freento_groupautoswitch')->__($originalData['button_label']),
|
| 26 |
+
'html_id' => $element->getHtmlId(),
|
| 27 |
+
'ajax_url' => Mage::getSingleton('adminhtml/url')->getUrl('freento_groupautoswitch/adminhtml_system_config/forceFill')
|
| 28 |
+
));
|
| 29 |
+
|
| 30 |
+
return $this->_toHtml();
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Exception/General.php
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Exception_General extends Mage_Core_Exception
|
| 4 |
+
{
|
| 5 |
+
|
| 6 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Helper/Data.php
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_Groupautoswitch_Helper_Data extends Mage_Core_Helper_Data
|
| 4 |
+
{
|
| 5 |
+
public function getAutoSwitchInfo($customerGroup)
|
| 6 |
+
{
|
| 7 |
+
if (!$customerGroup->getAutoSwitchInfo()) {
|
| 8 |
+
$customerGroup->setAutoSwitchInfo(Mage::getModel('freento_groupautoswitch/group')->load($customerGroup->getId(), 'group_id'));
|
| 9 |
+
}
|
| 10 |
+
return $customerGroup->getAutoSwitchInfo();
|
| 11 |
+
}
|
| 12 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Cron.php
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_Groupautoswitch_Model_Cron
|
| 4 |
+
{
|
| 5 |
+
|
| 6 |
+
const FORCE_FILL_LAST_ID_PATH = 'freento_groupautoswitch/force_fill/last_id';
|
| 7 |
+
const FORCE_FILL_VALIDATE_CUSTOMERS_QTY = 100;
|
| 8 |
+
|
| 9 |
+
public function downgradeCheck()
|
| 10 |
+
{
|
| 11 |
+
$collection = Mage::getModel('freento_groupautoswitch/group')->getCollection()->addFieldToFilter('is_enabled', 1);
|
| 12 |
+
foreach ($collection as $item) {
|
| 13 |
+
$item->downgradeCheck();
|
| 14 |
+
}
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
public function downgradeBeforeEmail()
|
| 18 |
+
{
|
| 19 |
+
$collection = Mage::getModel('freento_groupautoswitch/group')->getCollection()->addFieldToFilter('is_enabled', 1);
|
| 20 |
+
foreach ($collection as $item) {
|
| 21 |
+
$item->downgradeBeforeEmail();
|
| 22 |
+
}
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
public function forceFill() {
|
| 26 |
+
$config = Mage::getModel('core/config_data')->load(self::FORCE_FILL_LAST_ID_PATH, 'path');
|
| 27 |
+
|
| 28 |
+
if((int)$config->getValue() < 0) {
|
| 29 |
+
return;
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
$customersCollection = Mage::getModel('customer/customer')->getCollection()
|
| 33 |
+
->setPageSize(self::FORCE_FILL_VALIDATE_CUSTOMERS_QTY)
|
| 34 |
+
->setCurPage(1)
|
| 35 |
+
->addFieldToFilter('entity_id', array('gt' => $config->getValue()));
|
| 36 |
+
|
| 37 |
+
if($customersCollection->getSize() == 0) {
|
| 38 |
+
$config->setValue('-1')->save();
|
| 39 |
+
return;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
foreach($customersCollection as $customer) {
|
| 43 |
+
$observerObject = new Varien_Object(array('customer' => $customer));
|
| 44 |
+
Mage::getModel('freento_groupautoswitch/group')->getCollection()->validateAndSwitch($observerObject);
|
| 45 |
+
$config->setValue($customer->getId())->save();
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Group.php
ADDED
|
@@ -0,0 +1,268 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_Groupautoswitch_Model_Group extends Mage_Rule_Model_Rule
|
| 4 |
+
{
|
| 5 |
+
const GROUP_AUTO_SWITCH_EMAIL_TEMPLATE = 'freento_groupautoswitch_group_auto_switch';
|
| 6 |
+
const GROUP_DOWNGRADE_BEFORE_EMAIL_TEMPLATE = 'freento_groupautoswitch_group_downgrade_before';
|
| 7 |
+
const GROUP_DOWNGRADE_EMAIL_TEMPLATE = 'freento_groupautoswitch_group_downgrade';
|
| 8 |
+
|
| 9 |
+
protected function _construct()
|
| 10 |
+
{
|
| 11 |
+
parent::_construct();
|
| 12 |
+
$this->_init('freento_groupautoswitch/group');
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
public function getConditionsInstance()
|
| 16 |
+
{
|
| 17 |
+
return Mage::getModel('freento_groupautoswitch/rule_condition_combine');
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
public function downgradeBeforeEmail()
|
| 21 |
+
{
|
| 22 |
+
if ($this->getData('downgrade_after')) {
|
| 23 |
+
$customerIdsWithOrders = $this->_getCustomerIdsWithOrders($this->getData('downgrade_after') - $this->getData('notify_customer_before_downgrade'));
|
| 24 |
+
if ($this->getData('downgrade_group') > 0) {
|
| 25 |
+
$downgradeCustomerIds = $this->_getCustomerIdsWithoutOrders($customerIdsWithOrders, $this->getData('downgrade_after') - $this->getData('notify_customer_before_downgrade'));
|
| 26 |
+
if (count($downgradeCustomerIds)) {
|
| 27 |
+
$this->downgradeByCustomerIds($downgradeCustomerIds, $this->getData('downgrade_group'));
|
| 28 |
+
$this->_sendDowngradeEmail($downgradeCustomerIds);
|
| 29 |
+
}
|
| 30 |
+
}
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
public function downgradeCheck()
|
| 36 |
+
{
|
| 37 |
+
if ($this->getData('downgrade_after')) {
|
| 38 |
+
$customerIdsWithOrders = $this->_getCustomerIdsWithOrders($this->getData('downgrade_after'));
|
| 39 |
+
if ($this->getData('downgrade_group') > 0) {
|
| 40 |
+
$downgradeCustomerIds = $this->_getCustomerIdsWithoutOrders($customerIdsWithOrders, $this->getData('downgrade_after'));
|
| 41 |
+
if (count($downgradeCustomerIds)) {
|
| 42 |
+
$this->_sendDowngradeBeforeEmail($downgradeCustomerIds);
|
| 43 |
+
}
|
| 44 |
+
}
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
/**
|
| 49 |
+
* Downgrade customers to some group
|
| 50 |
+
* @param array $downgradeCustomerIds
|
| 51 |
+
* @param int $downgradeGroupId
|
| 52 |
+
*/
|
| 53 |
+
public function downgradeByCustomerIds($downgradeCustomerIds, $downgradeGroupId)
|
| 54 |
+
{
|
| 55 |
+
$query = 'UPDATE ' . Mage::getSingleton('core/resource')->getTableName('customer/entity') . ' as customer' .
|
| 56 |
+
' inner join ' . Mage::getSingleton('core/resource')->getTableName('customer/entity') . '_datetime' . ' as customer_datetime' .
|
| 57 |
+
' ON customer.entity_id = customer_datetime.entity_id' .
|
| 58 |
+
' set group_id = ' . $downgradeGroupId .
|
| 59 |
+
', customer_datetime.value = "' . Mage::getModel('core/date')->gmtDate() . '"' .
|
| 60 |
+
' where customer.entity_id in (' . implode(',', $downgradeCustomerIds) . ')';
|
| 61 |
+
|
| 62 |
+
$groupModel = Mage::getModel('customer/group');
|
| 63 |
+
$previousGroup = $groupModel->load($this->getData('group_id'))->getCustomerGroupCode();
|
| 64 |
+
$newGroup = $groupModel->load($downgradeGroupId)->getCustomerGroupCode();
|
| 65 |
+
$messages = array();
|
| 66 |
+
foreach ($downgradeCustomerIds as $id) {
|
| 67 |
+
$messages[] = Mage::helper('freento_groupautoswitch')->__('Downgrade. Customer ID: %s, previous group: %s, new group: %s', $id, $previousGroup, $newGroup);
|
| 68 |
+
}
|
| 69 |
+
$this->_log($messages);
|
| 70 |
+
Mage::getSingleton('core/resource')->getConnection('core_write')->query($query);
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
/**
|
| 74 |
+
* Returns customers with orders based on customers without orders ($customerWithOrdersIds) and
|
| 75 |
+
* changed group earlier than N days ($lastDays)
|
| 76 |
+
* @param array $customerWithOrdersIds
|
| 77 |
+
* @param int $lastDays
|
| 78 |
+
*/
|
| 79 |
+
protected function _getCustomerIdsWithoutOrders($customerWithOrdersIds, $lastDays)
|
| 80 |
+
{
|
| 81 |
+
$downgradeDatetime = $this->_getDateBeforeNow($lastDays);
|
| 82 |
+
$customerGroupLastChangeDateAttribute = Mage::getModel('eav/entity_attribute')->loadByCode('customer', 'group_last_change_date');
|
| 83 |
+
/* Get customers for downgrade (without sales from current group) ased on customers without orders */
|
| 84 |
+
$query = 'SELECT customer.entity_id as customer_id from ' . Mage::getSingleton('core/resource')->getTableName('customer/entity') . ' as customer' .
|
| 85 |
+
' INNER JOIN ' . Mage::getSingleton('core/resource')->getTableName('customer/entity') . '_datetime' . ' as customer_datetime' .
|
| 86 |
+
' ON customer.entity_id = customer_datetime.entity_id' .
|
| 87 |
+
' where';
|
| 88 |
+
if (count($customerWithOrdersIds)) {
|
| 89 |
+
$query .= ' customer.entity_id not in (' . implode(',', $customerWithOrdersIds) . ') AND';
|
| 90 |
+
}
|
| 91 |
+
$query .= ' customer_datetime.value <= "' . $downgradeDatetime . '" AND';
|
| 92 |
+
$query .= ' customer_datetime.attribute_id = ' . $customerGroupLastChangeDateAttribute->getId() . ' AND';
|
| 93 |
+
$query .= ' group_id = ' . $this->getData('group_id');
|
| 94 |
+
|
| 95 |
+
return Mage::getSingleton('core/resource')->getConnection('core_write')->fetchCol($query);
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
/**
|
| 99 |
+
* Returns customers from current group that have orders for the last days ($lastDays)
|
| 100 |
+
* @param int $lastDays
|
| 101 |
+
*/
|
| 102 |
+
protected function _getCustomerIdsWithOrders($lastDays)
|
| 103 |
+
{
|
| 104 |
+
$downgradeDatetime = $this->_getDateBeforeNow($lastDays);
|
| 105 |
+
$orderCollection = Mage::getModel('sales/order')
|
| 106 |
+
->getCollection()
|
| 107 |
+
->addAttributeToFilter('customer_group_id', array('eq' => $this->getData('group_id')));
|
| 108 |
+
$orderCollection
|
| 109 |
+
->getSelect()
|
| 110 |
+
->where('created_at > ?', $downgradeDatetime)
|
| 111 |
+
->having('count(entity_id) > 0')
|
| 112 |
+
->group('customer_id');
|
| 113 |
+
$customerIds = array();
|
| 114 |
+
foreach ($orderCollection as $order) {
|
| 115 |
+
if ($order->getCustomerId()) {
|
| 116 |
+
$customerIds[] = $order->getCustomerId();
|
| 117 |
+
}
|
| 118 |
+
}
|
| 119 |
+
return $customerIds;
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
protected function _getDateBeforeNow($days)
|
| 123 |
+
{
|
| 124 |
+
return date(Varien_Date::DATETIME_PHP_FORMAT, strtotime('-' . $days . ' days', strtotime(Mage::getModel('core/date')->gmtDate())));
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
public function switchGroup($customer)
|
| 128 |
+
{
|
| 129 |
+
if (!$this->getData('is_enabled')) {
|
| 130 |
+
throw new Freento_GroupAutoSwitch_Exception_General('Auto Switch is disabled');
|
| 131 |
+
}
|
| 132 |
+
$groupModel = Mage::getModel('customer/group');
|
| 133 |
+
$previousGroup = $groupModel->load($customer->getGroupId())->getCustomerGroupCode();
|
| 134 |
+
$newGroup = $groupModel->load($this->getGroupId())->getCustomerGroupCode();
|
| 135 |
+
$customer->setGroupId($this->getGroupId())->save();
|
| 136 |
+
$this->_sendSwitchGroupEmail($customer, $newGroup);
|
| 137 |
+
$message = Mage::helper('freento_groupautoswitch')->__('Switch Group. Customer ID: %s, email: %s, previous group: %s, new group: %s', $customer->getId(), $customer->getEmail(), $previousGroup, $newGroup);
|
| 138 |
+
$this->_log(array($message));
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
protected function _sendSwitchGroupEmail($customer, $newGroup)
|
| 142 |
+
{
|
| 143 |
+
$result = false;
|
| 144 |
+
if ($customer->getId()) {
|
| 145 |
+
$templateId = $this->getData('notify_on_group_change_template');
|
| 146 |
+
if(!$templateId) {
|
| 147 |
+
$templateId = self::GROUP_AUTO_SWITCH_EMAIL_TEMPLATE;
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
$customerName = $customer->getName();
|
| 151 |
+
$emailTemplate = Mage::getModel('core/email_template')->loadDefault($templateId);
|
| 152 |
+
$emailTemplateVariables = array(
|
| 153 |
+
'customer_name' => $customerName,
|
| 154 |
+
'old_group' => Mage::getModel('customer/group')->load($customer->getGroupId())->getCustomerGroupCode(),
|
| 155 |
+
'new_group' => $newGroup,
|
| 156 |
+
'store_name' => Mage::getStoreConfig('general/store_information/name'),
|
| 157 |
+
);
|
| 158 |
+
|
| 159 |
+
$emailTemplate->setSenderName(Mage::getStoreConfig('trans_email/ident_general/name'));
|
| 160 |
+
$emailTemplate->setSenderEmail(Mage::getStoreConfig('trans_email/ident_general/email'));
|
| 161 |
+
|
| 162 |
+
$result = $emailTemplate->send($customer->getEmail(), $customerName, $emailTemplateVariables);
|
| 163 |
+
}
|
| 164 |
+
return $result;
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
public function _sendDowngradeEmail(array $customerIds)
|
| 168 |
+
{
|
| 169 |
+
if(!is_array($customerIds)) {
|
| 170 |
+
return false;
|
| 171 |
+
}
|
| 172 |
+
|
| 173 |
+
$customerCollection = Mage::getResourceModel('customer/customer_collection')
|
| 174 |
+
->addNameToSelect();
|
| 175 |
+
$customerCollection->addFieldToFilter('entity_id', array('in' => $customerIds));
|
| 176 |
+
|
| 177 |
+
if($templateId = $this->getData('downgrade_template')) {
|
| 178 |
+
$emailTemplate = Mage::getModel('core/email_template')->load($templateId);
|
| 179 |
+
} else {
|
| 180 |
+
$emailTemplate = Mage::getModel('core/email_template')->loadDefault(self::GROUP_DOWNGRADE_EMAIL_TEMPLATE);
|
| 181 |
+
}
|
| 182 |
+
$groupModel = Mage::getModel('customer/group');
|
| 183 |
+
|
| 184 |
+
foreach ($customerCollection as $customer) {
|
| 185 |
+
$customerName = $customer->getName();
|
| 186 |
+
$newGroup = $groupModel->load($customer->getGroupId())->getCustomerGroupCode();
|
| 187 |
+
|
| 188 |
+
$emailTemplateVariables = array(
|
| 189 |
+
'customer_name' => $customerName,
|
| 190 |
+
'store_name' => Mage::getStoreConfig('general/store_information/name'),
|
| 191 |
+
'new_group' => $newGroup,
|
| 192 |
+
);
|
| 193 |
+
|
| 194 |
+
$emailTemplate->setSenderName(Mage::getStoreConfig('trans_email/ident_general/name'));
|
| 195 |
+
$emailTemplate->setSenderEmail(Mage::getStoreConfig('trans_email/ident_general/email'));
|
| 196 |
+
|
| 197 |
+
$emailTemplate->send($customer->getEmail(), $customerName, $emailTemplateVariables);
|
| 198 |
+
}
|
| 199 |
+
return true;
|
| 200 |
+
}
|
| 201 |
+
|
| 202 |
+
protected function _sendDowngradeBeforeEmail(array $customerIds)
|
| 203 |
+
{
|
| 204 |
+
if(!is_array($customerIds)) {
|
| 205 |
+
return false;
|
| 206 |
+
}
|
| 207 |
+
|
| 208 |
+
$customerCollection = Mage::getResourceModel('customer/customer_collection')
|
| 209 |
+
->addNameToSelect();
|
| 210 |
+
$customerCollection->addFieldToFilter('entity_id', array('in' => $customerIds));
|
| 211 |
+
|
| 212 |
+
if($templateId = $this->getData('notify_customer_before_downgrade_template')) {
|
| 213 |
+
$emailTemplate = Mage::getModel('core/email_template')->load($templateId);
|
| 214 |
+
} else {
|
| 215 |
+
$emailTemplate = Mage::getModel('core/email_template')->loadDefault(self::GROUP_DOWNGRADE_BEFORE_EMAIL_TEMPLATE);
|
| 216 |
+
}
|
| 217 |
+
|
| 218 |
+
foreach ($customerCollection as $customer) {
|
| 219 |
+
$customerName = $customer->getName();
|
| 220 |
+
|
| 221 |
+
$emailTemplateVariables = array(
|
| 222 |
+
'customer_name' => $customerName,
|
| 223 |
+
'store_name' => Mage::getStoreConfig('general/store_information/name'),
|
| 224 |
+
'days_to_downgrade' => $this->getData('downgrade_after'),
|
| 225 |
+
);
|
| 226 |
+
|
| 227 |
+
$emailTemplate->setSenderName(Mage::getStoreConfig('trans_email/ident_general/name'));
|
| 228 |
+
$emailTemplate->setSenderEmail(Mage::getStoreConfig('trans_email/ident_general/email'));
|
| 229 |
+
|
| 230 |
+
$emailTemplate->send($customer->getEmail(), $customerName, $emailTemplateVariables);
|
| 231 |
+
}
|
| 232 |
+
return true;
|
| 233 |
+
}
|
| 234 |
+
|
| 235 |
+
public function validate(Varien_Object $object)
|
| 236 |
+
{
|
| 237 |
+
$group = Mage::getModel('customer/group')->load($this->getGroupId());
|
| 238 |
+
$result = parent::validate($object);
|
| 239 |
+
$message = Mage::helper('freento_groupautoswitch')->__(
|
| 240 |
+
'Validation. Customer: id %s, email %s, group: %s switch. Validation result: %s',
|
| 241 |
+
$object->getCustomer()->getId() ? $object->getCustomer()->getId() : 0,
|
| 242 |
+
$object->getCustomer()->getEmail(),
|
| 243 |
+
$group->getCustomerGroupCode(),
|
| 244 |
+
$result ? 'true' : 'false'
|
| 245 |
+
);
|
| 246 |
+
$this->_log(array($message));
|
| 247 |
+
return $result;
|
| 248 |
+
}
|
| 249 |
+
|
| 250 |
+
protected function _log(array $messages)
|
| 251 |
+
{
|
| 252 |
+
$writeConnection = Mage::getSingleton('core/resource')->getConnection('core_write');
|
| 253 |
+
$table = Mage::getSingleton('core/resource')->getTableName('freento_groupautoswitch/log');
|
| 254 |
+
$query = 'INSERT INTO `' . $table . '` (`details`, `created_at`) VALUES ' ;
|
| 255 |
+
|
| 256 |
+
$now = Mage::getSingleton('core/date')->gmtDate();
|
| 257 |
+
$rows = array();
|
| 258 |
+
foreach($messages as $message) {
|
| 259 |
+
$rows[] = "('$message', '$now')";
|
| 260 |
+
}
|
| 261 |
+
|
| 262 |
+
if(!empty($rows)) {
|
| 263 |
+
$query .= implode(', ', $rows);
|
| 264 |
+
$writeConnection->query($query);
|
| 265 |
+
}
|
| 266 |
+
}
|
| 267 |
+
|
| 268 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Log.php
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_Groupautoswitch_Model_Log extends Mage_Core_Model_Abstract
|
| 4 |
+
{
|
| 5 |
+
|
| 6 |
+
public function _construct()
|
| 7 |
+
{
|
| 8 |
+
parent::_construct();
|
| 9 |
+
$this->_init('freento_groupautoswitch/log');
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Observer.php
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_Groupautoswitch_Model_Observer
|
| 4 |
+
{
|
| 5 |
+
public function fillLastGroupChangeDate($observer)
|
| 6 |
+
{
|
| 7 |
+
$customer = $observer->getCustomer();
|
| 8 |
+
if ($customer->getData('group_id') != $customer->getOrigData('group_id')) {
|
| 9 |
+
$customer->setData('group_last_change_date', Mage::getModel('core/date')->gmtDate());
|
| 10 |
+
}
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
public function checkGroupAutoSwitch($observer)
|
| 14 |
+
{
|
| 15 |
+
try {
|
| 16 |
+
$order = $observer->getOrder();
|
| 17 |
+
/* If order invoiced sum changed, then run validation */
|
| 18 |
+
if ($order->getData('base_total_invoiced') != $order->getOrigData('base_total_invoiced')) {
|
| 19 |
+
$customer = Mage::getModel('customer/customer')->load($order->getCustomerId());
|
| 20 |
+
|
| 21 |
+
if(!$customer->getEmail()) {
|
| 22 |
+
$customer->setEmail($order->getCustomerEmail());
|
| 23 |
+
}
|
| 24 |
+
$observerObject = new Varien_Object(array('customer' => $customer));
|
| 25 |
+
|
| 26 |
+
Mage::getModel('freento_groupautoswitch/group')
|
| 27 |
+
->getCollection()
|
| 28 |
+
->validateAndSwitch($observerObject);
|
| 29 |
+
}
|
| 30 |
+
} catch (Exception $ex) { /* TODO: Add new Exception type for extension and catch it */
|
| 31 |
+
|
| 32 |
+
}
|
| 33 |
+
}
|
| 34 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Resource/Group.php
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_Groupautoswitch_Model_Resource_Group extends Mage_Core_Model_Resource_Db_Abstract
|
| 4 |
+
{
|
| 5 |
+
protected function _construct()
|
| 6 |
+
{
|
| 7 |
+
$this->_init('freento_groupautoswitch/group', 'id');
|
| 8 |
+
}
|
| 9 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Resource/Group/Collection.php
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_Groupautoswitch_Model_Resource_Group_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
|
| 4 |
+
{
|
| 5 |
+
public function _construct()
|
| 6 |
+
{
|
| 7 |
+
$this->_init('freento_groupautoswitch/group');
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
public function validateAndSwitch($observerObject)
|
| 11 |
+
{
|
| 12 |
+
$customer = $observerObject->getCustomer();
|
| 13 |
+
$this
|
| 14 |
+
->addFieldToFilter('is_enabled', 1)
|
| 15 |
+
->setOrder('priority', 'desc');
|
| 16 |
+
foreach ($this as $autoswitchGroup) {
|
| 17 |
+
if ($customer->getGroupId() != $autoswitchGroup->getGroupId()) {
|
| 18 |
+
if ($autoswitchGroup->validate($observerObject)) {
|
| 19 |
+
$autoswitchGroup->switchGroup($customer);
|
| 20 |
+
if ($autoswitchGroup->getData('stop_further_rules')) {
|
| 21 |
+
break;
|
| 22 |
+
}
|
| 23 |
+
}
|
| 24 |
+
}
|
| 25 |
+
}
|
| 26 |
+
return $this;
|
| 27 |
+
}
|
| 28 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Resource/Log.php
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_Groupautoswitch_Model_Resource_Log extends Mage_Core_Model_Resource_Db_Abstract
|
| 4 |
+
{
|
| 5 |
+
protected function _construct()
|
| 6 |
+
{
|
| 7 |
+
$this->_init('freento_groupautoswitch/log', 'id');
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
protected function _beforeSave(Mage_Core_Model_Abstract $object)
|
| 11 |
+
{
|
| 12 |
+
if (!$object->hasCreatedAt()) {
|
| 13 |
+
$object->setCreatedAt(Mage::getSingleton('core/date')->gmtDate());
|
| 14 |
+
}
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Resource/Log/Collection.php
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_Groupautoswitch_Model_Resource_Log_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
|
| 4 |
+
{
|
| 5 |
+
public function _construct()
|
| 6 |
+
{
|
| 7 |
+
$this->_init('freento_groupautoswitch/Log');
|
| 8 |
+
}
|
| 9 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Rule/Condition/Combine.php
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Model_Rule_Condition_Combine extends Mage_Rule_Model_Condition_Combine
|
| 4 |
+
{
|
| 5 |
+
public function __construct()
|
| 6 |
+
{
|
| 7 |
+
parent::__construct();
|
| 8 |
+
$this->setType('freento_groupautoswitch/rule_condition_combine');
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
public function getNewChildSelectOptions()
|
| 12 |
+
{
|
| 13 |
+
$customerStatistic = array();
|
| 14 |
+
$customerStatistic[] = array('value' => 'freento_groupautoswitch/rule_condition_customer_statistic_lifetimeSales', 'label' => Mage::helper('freento_groupautoswitch')->__('Customer Lifetime Sales'));
|
| 15 |
+
$customerStatistic[] = array('value' => 'freento_groupautoswitch/rule_condition_customer_statistic_currentGroupSales', 'label' => Mage::helper('freento_groupautoswitch')->__('Customer Current Group Sales'));
|
| 16 |
+
|
| 17 |
+
$customerAttributes = array();
|
| 18 |
+
$customerAttributes[] = array('value' => 'freento_groupautoswitch/rule_condition_customer_attribute_group', 'label' => Mage::helper('freento_groupautoswitch')->__('Group'));
|
| 19 |
+
|
| 20 |
+
$conditions = parent::getNewChildSelectOptions();
|
| 21 |
+
$conditions = array_merge_recursive($conditions, array(
|
| 22 |
+
array('value' => 'freento_groupautoswitch/rule_condition_combine', 'label' => Mage::helper('catalogrule')->__('Conditions Combination')),
|
| 23 |
+
array('label' => Mage::helper('freento_groupautoswitch')->__('Customer Statistic'), 'value' => $customerStatistic),
|
| 24 |
+
array('label' => Mage::helper('freento_groupautoswitch')->__('Customer Attributes'), 'value' => $customerAttributes),
|
| 25 |
+
));
|
| 26 |
+
return $conditions;
|
| 27 |
+
}
|
| 28 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Rule/Condition/Customer/Attribute/Group.php
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Model_Rule_Condition_Customer_Attribute_Group extends Mage_Rule_Model_Condition_Abstract
|
| 4 |
+
{
|
| 5 |
+
public function __construct()
|
| 6 |
+
{
|
| 7 |
+
parent::__construct();
|
| 8 |
+
$this->setType('freento_groupautoswitch/rule_condition_customer_attribute_group')
|
| 9 |
+
->setValue(null);
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
public function loadOperatorOptions()
|
| 13 |
+
{
|
| 14 |
+
$this->setOperatorOption(array(
|
| 15 |
+
'()' => Mage::helper('rule')->__('is one of'),
|
| 16 |
+
'!()' => Mage::helper('rule')->__('is not one of'),
|
| 17 |
+
));
|
| 18 |
+
return $this;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
public function loadAttributeOptions()
|
| 22 |
+
{
|
| 23 |
+
$hlp = Mage::helper('freento_groupautoswitch');
|
| 24 |
+
$this->setAttributeOption(array(
|
| 25 |
+
'group' => $hlp->__('Customer Group'),
|
| 26 |
+
));
|
| 27 |
+
return $this;
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
public function validate(Varien_Object $observerObject)
|
| 31 |
+
{
|
| 32 |
+
$customer = $observerObject->getCustomer();
|
| 33 |
+
|
| 34 |
+
return $this->validateAttribute($customer->getGroupId());
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
public function getValueElementType()
|
| 38 |
+
{
|
| 39 |
+
return 'multiselect';
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
public function getValueSelectOptions()
|
| 43 |
+
{
|
| 44 |
+
return Mage::getResourceModel('customer/group_collection')->toOptionArray();
|
| 45 |
+
}
|
| 46 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Rule/Condition/Customer/Statistic/Abstract.php
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Model_Rule_Condition_Customer_Statistic_Abstract extends Mage_Rule_Model_Condition_Abstract
|
| 4 |
+
{
|
| 5 |
+
public function getInputType()
|
| 6 |
+
{
|
| 7 |
+
return 'string';
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
public function loadOperatorOptions()
|
| 11 |
+
{
|
| 12 |
+
$this->setOperatorOption(array(
|
| 13 |
+
'==' => Mage::helper('rule')->__('is'),
|
| 14 |
+
'!=' => Mage::helper('rule')->__('is not'),
|
| 15 |
+
'>=' => Mage::helper('rule')->__('equals or greater than'),
|
| 16 |
+
'<=' => Mage::helper('rule')->__('equals or less than'),
|
| 17 |
+
'>' => Mage::helper('rule')->__('greater than'),
|
| 18 |
+
'<' => Mage::helper('rule')->__('less than'),
|
| 19 |
+
));
|
| 20 |
+
return $this;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
public function getValueElementType()
|
| 24 |
+
{
|
| 25 |
+
return 'text';
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
public function getAttributeElement()
|
| 29 |
+
{
|
| 30 |
+
$element = parent::getAttributeElement();
|
| 31 |
+
$element->setShowAsText(true);
|
| 32 |
+
return $element;
|
| 33 |
+
}
|
| 34 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Rule/Condition/Customer/Statistic/CurrentGroupSales.php
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Model_Rule_Condition_Customer_Statistic_CurrentGroupSales extends Freento_GroupAutoSwitch_Model_Rule_Condition_Customer_Statistic_Abstract
|
| 4 |
+
{
|
| 5 |
+
public function __construct()
|
| 6 |
+
{
|
| 7 |
+
parent::__construct();
|
| 8 |
+
$this->setType('freento_groupautoswitch/rule_condition_customer_statistic_currentGroupSales')
|
| 9 |
+
->setValue(null);
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
public function loadAttributeOptions()
|
| 13 |
+
{
|
| 14 |
+
$hlp = Mage::helper('freento_groupautoswitch');
|
| 15 |
+
$this->setAttributeOption(array(
|
| 16 |
+
'currentGroupSales' => $hlp->__('Customer Current Group Sales'),
|
| 17 |
+
));
|
| 18 |
+
return $this;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
public function validate(Varien_Object $observerObject)
|
| 22 |
+
{
|
| 23 |
+
$customer = $observerObject->getCustomer();
|
| 24 |
+
|
| 25 |
+
$orderCollection = Mage::getModel('sales/order')->getCollection();
|
| 26 |
+
$select = $orderCollection->getSelect();
|
| 27 |
+
$select
|
| 28 |
+
->where('customer_id = ?', $customer->getId())
|
| 29 |
+
->columns(array('sum_invoiced' => 'sum(base_total_invoiced)'))
|
| 30 |
+
->columns(array('sum_refunded' => 'sum(base_total_refunded)'))
|
| 31 |
+
->group('customer_id');
|
| 32 |
+
if ($customer->getData('group_last_change_date')) {
|
| 33 |
+
$groupLastChangePlusMinute = date(Varien_Date::DATETIME_PHP_FORMAT, strtotime('+1 minutes', strtotime($customer->getData('group_last_change_date'))));
|
| 34 |
+
$select->where('created_at >= ?', $groupLastChangePlusMinute);
|
| 35 |
+
}
|
| 36 |
+
$statistic = $orderCollection->getFirstItem();
|
| 37 |
+
|
| 38 |
+
return $this->validateAttribute($statistic->getSumInvoiced() - $statistic->getSumRefunded());
|
| 39 |
+
}
|
| 40 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Model/Rule/Condition/Customer/Statistic/LifetimeSales.php
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Model_Rule_Condition_Customer_Statistic_LifetimeSales extends Freento_GroupAutoSwitch_Model_Rule_Condition_Customer_Statistic_Abstract
|
| 4 |
+
{
|
| 5 |
+
public function __construct()
|
| 6 |
+
{
|
| 7 |
+
parent::__construct();
|
| 8 |
+
$this->setType('freento_groupautoswitch/rule_condition_customer_statistic_lifetimeSales')
|
| 9 |
+
->setValue(null);
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
public function loadAttributeOptions()
|
| 13 |
+
{
|
| 14 |
+
$hlp = Mage::helper('freento_groupautoswitch');
|
| 15 |
+
$this->setAttributeOption(array(
|
| 16 |
+
'lifetimeSales' => $hlp->__('Customer Lifetime Sales'),
|
| 17 |
+
));
|
| 18 |
+
return $this;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
public function validate(Varien_Object $observerObject)
|
| 22 |
+
{
|
| 23 |
+
$customer = $observerObject->getCustomer();
|
| 24 |
+
|
| 25 |
+
$orderCollection = Mage::getModel('sales/order')->getCollection();
|
| 26 |
+
$orderCollection
|
| 27 |
+
->getSelect()
|
| 28 |
+
->where('customer_id = ?', $customer->getId())
|
| 29 |
+
->columns(array('sum_invoiced' => 'sum(base_total_invoiced)'))
|
| 30 |
+
->columns(array('sum_refunded' => 'sum(base_total_refunded)'))
|
| 31 |
+
->group('customer_id');
|
| 32 |
+
$statistic = $orderCollection->getFirstItem();
|
| 33 |
+
|
| 34 |
+
return $this->validateAttribute($statistic->getSumInvoiced() - $statistic->getSumRefunded());
|
| 35 |
+
}
|
| 36 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron.php
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Test_Model_Cron extends EcomDev_PHPUnit_Test_Case
|
| 4 |
+
{
|
| 5 |
+
/**
|
| 6 |
+
* Check cron forceFill() method
|
| 7 |
+
*
|
| 8 |
+
* @test
|
| 9 |
+
* @loadFixture
|
| 10 |
+
* @loadExpectation
|
| 11 |
+
* @dataProvider dataProvider
|
| 12 |
+
*/
|
| 13 |
+
public function forceFill($testId, $customerId)
|
| 14 |
+
{
|
| 15 |
+
/* @var $autoSwitchCron Freento_Groupautoswitch_Model_Cron */
|
| 16 |
+
$autoSwitchCron = Mage::getModel('freento_groupautoswitch/cron');
|
| 17 |
+
$autoSwitchCron->forceFill();
|
| 18 |
+
|
| 19 |
+
$customer = Mage::getModel('customer/customer')->load($customerId);
|
| 20 |
+
$this->assertEquals( $this->_getExpectations()->getData($testId . '/new_group_id'), $customer->getGroupId() );
|
| 21 |
+
$this->assertEquals( $this->_getExpectations()->getData($testId . '/last_id'), $customer->getId() );
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
/**
|
| 25 |
+
* Check cron downgradeCheck() method
|
| 26 |
+
*
|
| 27 |
+
* @test
|
| 28 |
+
* @loadFixture
|
| 29 |
+
* @loadExpectation
|
| 30 |
+
* @dataProvider dataProvider
|
| 31 |
+
*/
|
| 32 |
+
public function downgradeCheck($testId, $customerId)
|
| 33 |
+
{
|
| 34 |
+
|
| 35 |
+
/* @var $autoSwitchCron Freento_Groupautoswitch_Model_Cron */
|
| 36 |
+
$autoSwitchCron = Mage::getModel('freento_groupautoswitch/cron');
|
| 37 |
+
$autoSwitchCron->downgradeCheck();
|
| 38 |
+
|
| 39 |
+
$customer = Mage::getModel('customer/customer')->load($customerId);
|
| 40 |
+
$this->assertEquals( $this->_getExpectations()->getData($testId . '/new_group_id'), $customer->getGroupId() );
|
| 41 |
+
}
|
| 42 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron/expectations/downgradeCheck.php
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
return
|
| 4 |
+
array(
|
| 5 |
+
'test1' => array('new_group_id' => 1),
|
| 6 |
+
);
|
app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron/expectations/forceFill.php
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
return
|
| 4 |
+
array('test1' => array('new_group_id' => 10, 'last_id' => 1));
|
app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron/fixtures/downgradeCheck.php
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
return
|
| 4 |
+
array(
|
| 5 |
+
'customer_entity' => array(
|
| 6 |
+
array(
|
| 7 |
+
'entity_id' => '1',
|
| 8 |
+
'entity_type_id' => '1',
|
| 9 |
+
'attribute_set_id' => '0',
|
| 10 |
+
'website_id' => '1',
|
| 11 |
+
'email' => 'test@test.com',
|
| 12 |
+
'group_id' => '10',
|
| 13 |
+
'increment_id' => NULL,
|
| 14 |
+
'store_id' => '1',
|
| 15 |
+
'created_at' => '2015-04-02 20:54:56',
|
| 16 |
+
'updated_at' => '2015-04-02 20:54:56',
|
| 17 |
+
'is_active' => '1',
|
| 18 |
+
'disable_auto_group_change' => '0'
|
| 19 |
+
)
|
| 20 |
+
),
|
| 21 |
+
'customer_group' => array(
|
| 22 |
+
array(
|
| 23 |
+
'customer_group_id' => '1',
|
| 24 |
+
'customer_group_code' => 'General',
|
| 25 |
+
'tax_class_id' => '3'
|
| 26 |
+
),
|
| 27 |
+
array(
|
| 28 |
+
'customer_group_id' => '10',
|
| 29 |
+
'customer_group_code' => 'Level 1',
|
| 30 |
+
'tax_class_id' => '3'
|
| 31 |
+
),
|
| 32 |
+
),
|
| 33 |
+
'freento_groupautoswitch_group' => array(
|
| 34 |
+
array(
|
| 35 |
+
'id' => '1',
|
| 36 |
+
'is_enabled' => '1',
|
| 37 |
+
'group_id' => '10',
|
| 38 |
+
'priority' => '0',
|
| 39 |
+
'conditions_serialized' => 'a:6:{s:4:"type";s:41:"rc_groupautoswitch/rule_condition_combine";s:9:"attribute";N;s:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";}',
|
| 40 |
+
'stop_further_rules' => '0',
|
| 41 |
+
'downgrade_template' => '',
|
| 42 |
+
'notify_on_group_change_template' => '',
|
| 43 |
+
'text_for_customer' => '',
|
| 44 |
+
'downgrade_after' => '10',
|
| 45 |
+
'downgrade_group' => '1',
|
| 46 |
+
'notify_customer_before_downgrade' => '1',
|
| 47 |
+
'notify_customer_before_downgrade_template' => ''
|
| 48 |
+
),
|
| 49 |
+
),
|
| 50 |
+
'eav_attribute' => array(
|
| 51 |
+
array(
|
| 52 |
+
'attribute_id' => '961',
|
| 53 |
+
'entity_type_id' => '1',
|
| 54 |
+
'attribute_code' => 'group_last_change_date',
|
| 55 |
+
'attribute_model' => NULL,
|
| 56 |
+
'backend_model' => 'eav/entity_attribute_backend_datetime',
|
| 57 |
+
'backend_type' => 'datetime',
|
| 58 |
+
'backend_table' => NULL,
|
| 59 |
+
'frontend_model' => 'eav/entity_attribute_frontend_datetime',
|
| 60 |
+
'frontend_input' => 'date',
|
| 61 |
+
'frontend_label' => 'Customer Group Last Change Date',
|
| 62 |
+
'frontend_class' => NULL,
|
| 63 |
+
'source_model' => NULL,
|
| 64 |
+
'is_required' => '0',
|
| 65 |
+
'is_user_defined' => '0',
|
| 66 |
+
'default_value' => NULL,
|
| 67 |
+
'is_unique' => '0',
|
| 68 |
+
'note' => NULL
|
| 69 |
+
)
|
| 70 |
+
),
|
| 71 |
+
'customer_eav_attribute' => array(
|
| 72 |
+
array(
|
| 73 |
+
'attribute_id' => '961',
|
| 74 |
+
'is_visible' => '1',
|
| 75 |
+
'input_filter' => NULL,
|
| 76 |
+
'multiline_count' => '1',
|
| 77 |
+
'validate_rules' => NULL,
|
| 78 |
+
'is_system' => '0',
|
| 79 |
+
'sort_order' => '0',
|
| 80 |
+
'data_model' => NULL
|
| 81 |
+
)
|
| 82 |
+
),
|
| 83 |
+
'customer_entity_datetime' => array(
|
| 84 |
+
array(
|
| 85 |
+
'value_id' => '1',
|
| 86 |
+
'entity_type_id' => '1',
|
| 87 |
+
'attribute_id' => '961',
|
| 88 |
+
'entity_id' => '1',
|
| 89 |
+
'value' => '2015-04-04 07:25:10'
|
| 90 |
+
)
|
| 91 |
+
)
|
| 92 |
+
);
|
app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron/fixtures/forceFill.php
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
return
|
| 4 |
+
array('tables' => array(
|
| 5 |
+
'customer_entity' => array(
|
| 6 |
+
array(
|
| 7 |
+
'entity_id' => '1',
|
| 8 |
+
'entity_type_id' => '1',
|
| 9 |
+
'attribute_set_id' => '0',
|
| 10 |
+
'website_id' => '1',
|
| 11 |
+
'email' => 'test@test.com',
|
| 12 |
+
'group_id' => '1',
|
| 13 |
+
'increment_id' => NULL,
|
| 14 |
+
'store_id' => '1',
|
| 15 |
+
'created_at' => '2015-04-02 20:54:56',
|
| 16 |
+
'updated_at' => '2015-04-02 20:54:56',
|
| 17 |
+
'is_active' => '1',
|
| 18 |
+
'disable_auto_group_change' => '0'
|
| 19 |
+
)
|
| 20 |
+
),
|
| 21 |
+
'customer_group' => array(
|
| 22 |
+
array(
|
| 23 |
+
'customer_group_id' => '1',
|
| 24 |
+
'customer_group_code' => 'General',
|
| 25 |
+
'tax_class_id' => '3'
|
| 26 |
+
),
|
| 27 |
+
array(
|
| 28 |
+
'customer_group_id' => '10',
|
| 29 |
+
'customer_group_code' => 'Level 1',
|
| 30 |
+
'tax_class_id' => '3'
|
| 31 |
+
),
|
| 32 |
+
array(
|
| 33 |
+
'customer_group_id' => '11',
|
| 34 |
+
'customer_group_code' => 'Level 10',
|
| 35 |
+
'tax_class_id' => '3'
|
| 36 |
+
)
|
| 37 |
+
),
|
| 38 |
+
'freento_groupautoswitch_group' => array(
|
| 39 |
+
array(
|
| 40 |
+
'id' => '1',
|
| 41 |
+
'is_enabled' => 1,
|
| 42 |
+
'group_id' => '10',
|
| 43 |
+
'priority' => '0',
|
| 44 |
+
'conditions_serialized' => 'a:6:{s:4:"type";s:46:"freento_groupautoswitch/rule_condition_combine";s:9:"attribute";N;s:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";}',
|
| 45 |
+
'stop_further_rules' => '0',
|
| 46 |
+
'downgrade_template' => '',
|
| 47 |
+
'notify_on_group_change_template' => '',
|
| 48 |
+
'text_for_customer' => '',
|
| 49 |
+
'downgrade_after' => '0',
|
| 50 |
+
'downgrade_group' => '-1',
|
| 51 |
+
'notify_customer_before_downgrade' => '0',
|
| 52 |
+
'notify_customer_before_downgrade_template' => ''
|
| 53 |
+
),
|
| 54 |
+
array(
|
| 55 |
+
'id' => '2',
|
| 56 |
+
'is_enabled' => 0,
|
| 57 |
+
'group_id' => '11',
|
| 58 |
+
'priority' => '0',
|
| 59 |
+
'conditions_serialized' => 'a:7:{s:4:"type";s:46:"freento_groupautoswitch/rule_condition_combine";s:9:"attribute";N;s:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";s:10:"conditions";a:2:{i:0;a:5:{s:4:"type";s:63:"freento_groupautoswitch/rule_condition_customer_attribute_group";s:9:"attribute";s:5:"group";s:8:"operator";s:2:"==";s:5:"value";a:2:{i:0;s:1:"1";i:1;s:1:"2";}s:18:"is_value_processed";b:0;}i:1;a:5:{s:4:"type";s:71:"freento_groupautoswitch/rule_condition_customer_statistic_lifetimeSales";s:9:"attribute";s:13:"lifetimeSales";s:8:"operator";s:2:">=";s:5:"value";s:2:"50";s:18:"is_value_processed";b:0;}}}',
|
| 60 |
+
'stop_further_rules' => '0',
|
| 61 |
+
'downgrade_template' => '',
|
| 62 |
+
'notify_on_group_change_template' => '',
|
| 63 |
+
'text_for_customer' => '',
|
| 64 |
+
'downgrade_after' => '0',
|
| 65 |
+
'downgrade_group' => '-1',
|
| 66 |
+
'notify_customer_before_downgrade' => '0',
|
| 67 |
+
'notify_customer_before_downgrade_template' => ''
|
| 68 |
+
),
|
| 69 |
+
),
|
| 70 |
+
'core_config_data' => array(
|
| 71 |
+
array(
|
| 72 |
+
'config_id' => '8',
|
| 73 |
+
'scope' => 'default',
|
| 74 |
+
'scope_id' => '0',
|
| 75 |
+
'path' => 'freento_groupautoswitch/force_fill/last_id',
|
| 76 |
+
'value' => '0'
|
| 77 |
+
)
|
| 78 |
+
)
|
| 79 |
+
));
|
app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron/providers/downgradeCheck.php
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
return
|
| 4 |
+
array(
|
| 5 |
+
array('test1', 1),
|
| 6 |
+
);
|
app/code/community/Freento/GroupAutoSwitch/Test/Model/Cron/providers/forceFill.php
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
return
|
| 4 |
+
array(
|
| 5 |
+
array('test1', 1),
|
| 6 |
+
);
|
app/code/community/Freento/GroupAutoSwitch/Test/Model/Group.php
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Test_Model_Group extends EcomDev_PHPUnit_Test_Case
|
| 4 |
+
{
|
| 5 |
+
/**
|
| 6 |
+
* Switch group for existing customer
|
| 7 |
+
*
|
| 8 |
+
* @test
|
| 9 |
+
* @loadFixture
|
| 10 |
+
* @loadExpectation
|
| 11 |
+
* @dataProvider dataProvider
|
| 12 |
+
*/
|
| 13 |
+
public function switchGroup($testId, $customerId, $newGroupId)
|
| 14 |
+
{
|
| 15 |
+
|
| 16 |
+
if($this->_getExpectations()->getData($testId . '/email_sent')) {
|
| 17 |
+
$this->_checkEmailSent('once');
|
| 18 |
+
$this->_checkEmailTemplate($testId);
|
| 19 |
+
} else {
|
| 20 |
+
$this->_checkEmailSent('never');
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
try {
|
| 24 |
+
$customer = Mage::getModel('customer/customer')->load($customerId);
|
| 25 |
+
$autoSwitchGroup = Mage::getModel('freento_groupautoswitch/group')->load($newGroupId, 'group_id');
|
| 26 |
+
|
| 27 |
+
$autoSwitchGroup->switchGroup($customer);
|
| 28 |
+
|
| 29 |
+
$customer = Mage::getModel('customer/customer')->load($customerId);
|
| 30 |
+
} catch (Freento_GroupAutoSwitch_Exception_General $ex) {
|
| 31 |
+
$this->assertEquals( $this->_getExpectations()->getData($testId . '/exception_message'), $ex->getMessage() );
|
| 32 |
+
}
|
| 33 |
+
$this->assertEquals( $this->_getExpectations()->getData($testId . '/new_group_id'), $customer->getGroupId() );
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
protected function _checkEmailSent($repeat)
|
| 37 |
+
{
|
| 38 |
+
$emailMock = $this->getModelMock('core/email_template', array('send'));
|
| 39 |
+
$emailMock->expects($this->{$repeat}())
|
| 40 |
+
->method('send')
|
| 41 |
+
->will($this->returnCallback(function(){return true;}));
|
| 42 |
+
$this->replaceByMock('model', 'core/email_template', $emailMock);
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
protected function _checkEmailTemplate($testId)
|
| 47 |
+
{
|
| 48 |
+
$emailMock = $this->getModelMock('core/email_template', array('loadDefault'));
|
| 49 |
+
$emailMock->expects($this->once())
|
| 50 |
+
->method('loadDefault')
|
| 51 |
+
->will($this->returnCallback(array(Mage::getModel('core/email_template'), 'loadDefault')))
|
| 52 |
+
->with($this->equalTo($this->_getExpectations()->getData($testId . '/email_template')));
|
| 53 |
+
$this->replaceByMock('model', 'core/email_template', $emailMock);
|
| 54 |
+
}
|
| 55 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/Test/Model/Group/expectations/switchGroup.php
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
return
|
| 4 |
+
array(
|
| 5 |
+
'test1' => array('new_group_id' => 10, 'email_sent' => true, 'email_template' => 'freento_groupautoswitch_group_auto_switch'),
|
| 6 |
+
'test2' => array('new_group_id' => 1, 'exception_message' => 'Auto Switch is disabled', 'email_sent' => false),
|
| 7 |
+
);
|
app/code/community/Freento/GroupAutoSwitch/Test/Model/Group/fixtures/switchGroup.php
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
return
|
| 4 |
+
array('tables' => array(
|
| 5 |
+
'customer_entity' => array(
|
| 6 |
+
array(
|
| 7 |
+
'entity_id' => '1',
|
| 8 |
+
'entity_type_id' => '1',
|
| 9 |
+
'attribute_set_id' => '0',
|
| 10 |
+
'website_id' => '1',
|
| 11 |
+
'email' => 'test@test.com',
|
| 12 |
+
'group_id' => '1',
|
| 13 |
+
'increment_id' => NULL,
|
| 14 |
+
'store_id' => '1',
|
| 15 |
+
'created_at' => '2015-04-02 20:54:56',
|
| 16 |
+
'updated_at' => '2015-04-02 20:54:56',
|
| 17 |
+
'is_active' => '1',
|
| 18 |
+
'disable_auto_group_change' => '0'
|
| 19 |
+
)
|
| 20 |
+
),
|
| 21 |
+
'customer_group' => array(
|
| 22 |
+
array(
|
| 23 |
+
'customer_group_id' => '1',
|
| 24 |
+
'customer_group_code' => 'General',
|
| 25 |
+
'tax_class_id' => '3'
|
| 26 |
+
),
|
| 27 |
+
array(
|
| 28 |
+
'customer_group_id' => '10',
|
| 29 |
+
'customer_group_code' => 'Level 1',
|
| 30 |
+
'tax_class_id' => '3'
|
| 31 |
+
),
|
| 32 |
+
array(
|
| 33 |
+
'customer_group_id' => '11',
|
| 34 |
+
'customer_group_code' => 'Level 10',
|
| 35 |
+
'tax_class_id' => '3'
|
| 36 |
+
)
|
| 37 |
+
),
|
| 38 |
+
'freento_groupautoswitch_group' => array(
|
| 39 |
+
array(
|
| 40 |
+
'id' => '1',
|
| 41 |
+
'is_enabled' => 1,
|
| 42 |
+
'group_id' => '10',
|
| 43 |
+
'priority' => '0',
|
| 44 |
+
'conditions_serialized' => 'a:7:{s:4:"type";s:41:"freento_groupautoswitch/rule_condition_combine";s:9:"attribute";N;s:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";s:10:"conditions";a:2:{i:0;a:5:{s:4:"type";s:58:"freento_groupautoswitch/rule_condition_customer_attribute_group";s:9:"attribute";s:5:"group";s:8:"operator";s:2:"==";s:5:"value";a:2:{i:0;s:1:"1";i:1;s:1:"2";}s:18:"is_value_processed";b:0;}i:1;a:5:{s:4:"type";s:66:"freento_groupautoswitch/rule_condition_customer_statistic_lifetimeSales";s:9:"attribute";s:13:"lifetimeSales";s:8:"operator";s:2:">=";s:5:"value";s:2:"50";s:18:"is_value_processed";b:0;}}}',
|
| 45 |
+
'stop_further_rules' => '0',
|
| 46 |
+
'downgrade_template' => '',
|
| 47 |
+
'notify_on_group_change_template' => '',
|
| 48 |
+
'text_for_customer' => '',
|
| 49 |
+
'downgrade_after' => '0',
|
| 50 |
+
'downgrade_group' => '-1',
|
| 51 |
+
'notify_customer_before_downgrade' => '0',
|
| 52 |
+
'notify_customer_before_downgrade_template' => ''
|
| 53 |
+
),
|
| 54 |
+
array(
|
| 55 |
+
'id' => '2',
|
| 56 |
+
'is_enabled' => 0,
|
| 57 |
+
'group_id' => '11',
|
| 58 |
+
'priority' => '0',
|
| 59 |
+
'conditions_serialized' => 'a:7:{s:4:"type";s:41:"freento_groupautoswitch/rule_condition_combine";s:9:"attribute";N;s:8:"operator";N;s:5:"value";s:1:"1";s:18:"is_value_processed";N;s:10:"aggregator";s:3:"all";s:10:"conditions";a:2:{i:0;a:5:{s:4:"type";s:58:"freento_groupautoswitch/rule_condition_customer_attribute_group";s:9:"attribute";s:5:"group";s:8:"operator";s:2:"==";s:5:"value";a:2:{i:0;s:1:"1";i:1;s:1:"2";}s:18:"is_value_processed";b:0;}i:1;a:5:{s:4:"type";s:66:"freento_groupautoswitch/rule_condition_customer_statistic_lifetimeSales";s:9:"attribute";s:13:"lifetimeSales";s:8:"operator";s:2:">=";s:5:"value";s:2:"50";s:18:"is_value_processed";b:0;}}}',
|
| 60 |
+
'stop_further_rules' => '0',
|
| 61 |
+
'downgrade_template' => '',
|
| 62 |
+
'notify_on_group_change_template' => '',
|
| 63 |
+
'text_for_customer' => '',
|
| 64 |
+
'downgrade_after' => '0',
|
| 65 |
+
'downgrade_group' => '-1',
|
| 66 |
+
'notify_customer_before_downgrade' => '0',
|
| 67 |
+
'notify_customer_before_downgrade_template' => ''
|
| 68 |
+
),
|
| 69 |
+
)
|
| 70 |
+
));
|
app/code/community/Freento/GroupAutoSwitch/Test/Model/Group/providers/switchGroup.php
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
return
|
| 4 |
+
array(
|
| 5 |
+
array('test1', '1', '10'),
|
| 6 |
+
array('test2', '1', '11'),
|
| 7 |
+
);
|
app/code/community/Freento/GroupAutoSwitch/controllers/Adminhtml/Customer/GroupController.php
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Adminhtml_Customer_GroupController extends Mage_Adminhtml_Controller_Action
|
| 4 |
+
{
|
| 5 |
+
protected function _initGroup()
|
| 6 |
+
{
|
| 7 |
+
$this->_title($this->__('Customers'))->_title($this->__('Customer Groups'));
|
| 8 |
+
|
| 9 |
+
Mage::register('current_group', Mage::getModel('customer/group'));
|
| 10 |
+
$groupId = $this->getRequest()->getParam('id');
|
| 11 |
+
if (!is_null($groupId)) {
|
| 12 |
+
Mage::registry('current_group')->load($groupId);
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Edit or create customer group.
|
| 19 |
+
*/
|
| 20 |
+
public function newAction()
|
| 21 |
+
{
|
| 22 |
+
$this->_initGroup();
|
| 23 |
+
$this->loadLayout();
|
| 24 |
+
$this->_setActiveMenu('customer/group');
|
| 25 |
+
$this->_addBreadcrumb(Mage::helper('customer')->__('Customers'), Mage::helper('customer')->__('Customers'));
|
| 26 |
+
$this->_addBreadcrumb(Mage::helper('customer')->__('Customer Groups'), Mage::helper('customer')->__('Customer Groups'), $this->getUrl('*/customer_group'));
|
| 27 |
+
|
| 28 |
+
$currentGroup = Mage::registry('current_group');
|
| 29 |
+
$currentGroupAutoswitch = Mage::helper('freento_groupautoswitch')->getAutoSwitchInfo($currentGroup);
|
| 30 |
+
|
| 31 |
+
$currentGroupAutoswitch->getConditions()->setJsFormObject('rule_conditions_fieldset');
|
| 32 |
+
|
| 33 |
+
if (!is_null($currentGroup->getId())) {
|
| 34 |
+
$this->_addBreadcrumb(Mage::helper('customer')->__('Edit Group'), Mage::helper('customer')->__('Edit Customer Groups'));
|
| 35 |
+
} else {
|
| 36 |
+
$this->_addBreadcrumb(Mage::helper('customer')->__('New Group'), Mage::helper('customer')->__('New Customer Groups'));
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
$this->_title($currentGroup->getId() ? $currentGroup->getCode() : $this->__('New Group'));
|
| 40 |
+
|
| 41 |
+
/*Load needed js to head of layout*/
|
| 42 |
+
$this->getLayout()->getBlock('head')
|
| 43 |
+
->setCanLoadExtJs(true)
|
| 44 |
+
->setCanLoadRulesJs(true);
|
| 45 |
+
|
| 46 |
+
$this->getLayout()->getBlock('content')
|
| 47 |
+
->append($this->getLayout()->createBlock('adminhtml/customer_group_edit', 'group')
|
| 48 |
+
->setEditMode((bool)Mage::registry('current_group')->getId()));
|
| 49 |
+
|
| 50 |
+
$this->renderLayout();
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
/**
|
| 54 |
+
* Edit customer group action. Forward to new action.
|
| 55 |
+
*/
|
| 56 |
+
public function editAction()
|
| 57 |
+
{
|
| 58 |
+
$this->_forward('new');
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
public function newConditionHtmlAction()
|
| 62 |
+
{
|
| 63 |
+
$id = $this->getRequest()->getParam('id');
|
| 64 |
+
$typeArr = explode('|', str_replace('-', '/', $this->getRequest()->getParam('type')));
|
| 65 |
+
$type = $typeArr[0];
|
| 66 |
+
|
| 67 |
+
$model = Mage::getModel($type)
|
| 68 |
+
->setId($id)
|
| 69 |
+
->setType($type)
|
| 70 |
+
->setRule(Mage::getModel('freento_groupautoswitch/group'))
|
| 71 |
+
->setPrefix('conditions');
|
| 72 |
+
if (!empty($typeArr[1])) {
|
| 73 |
+
$model->setAttribute($typeArr[1]);
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
if ($model instanceof Mage_Rule_Model_Condition_Abstract) {
|
| 77 |
+
$model->setJsFormObject($this->getRequest()->getParam('form'));
|
| 78 |
+
$html = $model->asHtmlRecursive();
|
| 79 |
+
} else {
|
| 80 |
+
$html = '';
|
| 81 |
+
}
|
| 82 |
+
$this->getResponse()->setBody($html);
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
/**
|
| 86 |
+
* Create or save customer group.
|
| 87 |
+
*/
|
| 88 |
+
public function saveAction()
|
| 89 |
+
{
|
| 90 |
+
$customerGroup = Mage::getModel('customer/group');
|
| 91 |
+
$id = $this->getRequest()->getParam('id');
|
| 92 |
+
if (!is_null($id)) {
|
| 93 |
+
$customerGroup->load((int)$id);
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
$taxClass = (int)$this->getRequest()->getParam('tax_class');
|
| 97 |
+
|
| 98 |
+
if ($taxClass) {
|
| 99 |
+
try {
|
| 100 |
+
$customerGroupCode = (string)$this->getRequest()->getParam('code');
|
| 101 |
+
|
| 102 |
+
if (!empty($customerGroupCode)) {
|
| 103 |
+
$customerGroup->setCode($customerGroupCode);
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
$customerGroup->setTaxClassId($taxClass)->save();
|
| 107 |
+
|
| 108 |
+
$currentGroupAutoswitch = Mage::helper('freento_groupautoswitch')->getAutoSwitchInfo($customerGroup);
|
| 109 |
+
$data = $this->getRequest()->getPost();
|
| 110 |
+
if (isset($data['id'])) {
|
| 111 |
+
$data['group_id'] = $data['id'];
|
| 112 |
+
unset($data['id']);
|
| 113 |
+
}
|
| 114 |
+
$data['conditions'] = $data['rule']['conditions'];
|
| 115 |
+
unset($data['rule']);
|
| 116 |
+
|
| 117 |
+
$currentGroupAutoswitch
|
| 118 |
+
->loadPost($data)
|
| 119 |
+
->save();
|
| 120 |
+
|
| 121 |
+
Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('customer')->__('The customer group has been saved.'));
|
| 122 |
+
$this->getResponse()->setRedirect($this->getUrl('*/customer_group'));
|
| 123 |
+
return;
|
| 124 |
+
} catch (Exception $e) {
|
| 125 |
+
Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
|
| 126 |
+
Mage::getSingleton('adminhtml/session')->setCustomerGroupData($customerGroup->getData());
|
| 127 |
+
$this->getResponse()->setRedirect($this->getUrl('*/customer_group/edit', array('id' => $id)));
|
| 128 |
+
return;
|
| 129 |
+
}
|
| 130 |
+
} else {
|
| 131 |
+
$this->_forward('new');
|
| 132 |
+
}
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
protected function _isAllowed()
|
| 136 |
+
{
|
| 137 |
+
return Mage::getSingleton('admin/session')->isAllowed('customer/group');
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/controllers/Adminhtml/LogController.php
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Adminhtml_LogController extends Mage_Adminhtml_Controller_Action
|
| 4 |
+
{
|
| 5 |
+
|
| 6 |
+
public function indexAction()
|
| 7 |
+
{
|
| 8 |
+
$this
|
| 9 |
+
->loadLayout()
|
| 10 |
+
->_setActiveMenu('customer')
|
| 11 |
+
->renderLayout();
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
public function gridAction()
|
| 16 |
+
{
|
| 17 |
+
$this->loadLayout();
|
| 18 |
+
$this->getResponse()->setBody(
|
| 19 |
+
$this->getLayout()->createBlock('freento_groupautoswitch/adminhtml_log_grid')->toHtml()
|
| 20 |
+
);
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
protected function _isAllowed()
|
| 24 |
+
{
|
| 25 |
+
return Mage::getSingleton('admin/session')->isAllowed('customer/freento_groupautoswitch_log');
|
| 26 |
+
}
|
| 27 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/controllers/Adminhtml/System/ConfigController.php
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Freento_GroupAutoSwitch_Adminhtml_System_ConfigController extends Mage_Adminhtml_Controller_Action
|
| 4 |
+
{
|
| 5 |
+
|
| 6 |
+
public function forceFillAction()
|
| 7 |
+
{
|
| 8 |
+
$config = Mage::getModel('core/config_data')->load(Freento_GroupAutoSwitch_Model_Cron::FORCE_FILL_LAST_ID_PATH, 'path');
|
| 9 |
+
|
| 10 |
+
if(!$config->getConfigId()) {
|
| 11 |
+
$config->setPath(Freento_GroupAutoSwitch_Model_Cron::FORCE_FILL_LAST_ID_PATH)->setValue('-1')->save();
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
if($config->getValue() >= 0) {
|
| 15 |
+
$result = array(
|
| 16 |
+
'error' => 1,
|
| 17 |
+
'message' => Mage::helper('freento_groupautoswitch')->__('Customer validation already running')
|
| 18 |
+
);
|
| 19 |
+
} else {
|
| 20 |
+
$config->setValue(0)->save();
|
| 21 |
+
$result = array(
|
| 22 |
+
'error' => 0,
|
| 23 |
+
'message' => Mage::helper('freento_groupautoswitch')->__('Customer validation started, it will be finished soon')
|
| 24 |
+
);
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
echo json_encode($result);
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
protected function _isAllowed()
|
| 31 |
+
{
|
| 32 |
+
return Mage::getSingleton('admin/session')->isAllowed('system/config/freento_groupautoswitch');
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
}
|
app/code/community/Freento/GroupAutoSwitch/etc/adminhtml.xml
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<menu>
|
| 4 |
+
<customer>
|
| 5 |
+
<children>
|
| 6 |
+
<freento_groupautoswitch_log>
|
| 7 |
+
<title>Group auto swicth log</title>
|
| 8 |
+
<action>freento_groupautoswitch/adminhtml_log</action>
|
| 9 |
+
<sort_order>200</sort_order>
|
| 10 |
+
</freento_groupautoswitch_log>
|
| 11 |
+
</children>
|
| 12 |
+
</customer>
|
| 13 |
+
</menu>
|
| 14 |
+
<acl>
|
| 15 |
+
<resources>
|
| 16 |
+
<all>
|
| 17 |
+
<title>Allow Everything</title>
|
| 18 |
+
</all>
|
| 19 |
+
<admin>
|
| 20 |
+
<children>
|
| 21 |
+
<customer>
|
| 22 |
+
<children>
|
| 23 |
+
<freento_groupautoswitch_log>
|
| 24 |
+
<title>Group auto swicth log</title>
|
| 25 |
+
<action>freento_groupautoswitch/adminhtml_log</action>
|
| 26 |
+
<sort_order>200</sort_order>
|
| 27 |
+
</freento_groupautoswitch_log>
|
| 28 |
+
</children>
|
| 29 |
+
</customer>
|
| 30 |
+
<system>
|
| 31 |
+
<children>
|
| 32 |
+
<config>
|
| 33 |
+
<children>
|
| 34 |
+
<freento_groupautoswitch>
|
| 35 |
+
<title>Group auto swicth log</title>
|
| 36 |
+
</freento_groupautoswitch>
|
| 37 |
+
</children>
|
| 38 |
+
</config>
|
| 39 |
+
</children>
|
| 40 |
+
</system>
|
| 41 |
+
</children>
|
| 42 |
+
</admin>
|
| 43 |
+
</resources>
|
| 44 |
+
</acl>
|
| 45 |
+
</config>
|
app/code/community/Freento/GroupAutoSwitch/etc/config.xml
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<Freento_GroupAutoSwitch>
|
| 5 |
+
<version>1.0.1</version>
|
| 6 |
+
</Freento_GroupAutoSwitch>
|
| 7 |
+
</modules>
|
| 8 |
+
<global>
|
| 9 |
+
<models>
|
| 10 |
+
<freento_groupautoswitch>
|
| 11 |
+
<class>Freento_GroupAutoSwitch_Model</class>
|
| 12 |
+
<resourceModel>freento_groupautoswitch_resource</resourceModel>
|
| 13 |
+
</freento_groupautoswitch>
|
| 14 |
+
<freento_groupautoswitch_resource>
|
| 15 |
+
<class>Freento_GroupAutoSwitch_Model_Resource</class>
|
| 16 |
+
<entities>
|
| 17 |
+
<group>
|
| 18 |
+
<table>freento_groupautoswitch_group</table>
|
| 19 |
+
</group>
|
| 20 |
+
<log>
|
| 21 |
+
<table>freento_groupautoswitch_log</table>
|
| 22 |
+
</log>
|
| 23 |
+
</entities>
|
| 24 |
+
</freento_groupautoswitch_resource>
|
| 25 |
+
</models>
|
| 26 |
+
<blocks>
|
| 27 |
+
<freento_groupautoswitch>
|
| 28 |
+
<class>Freento_GroupAutoSwitch_Block</class>
|
| 29 |
+
</freento_groupautoswitch>
|
| 30 |
+
<adminhtml>
|
| 31 |
+
<rewrite>
|
| 32 |
+
<customer_group_edit_form>Freento_GroupAutoSwitch_Block_Adminhtml_Customer_Group_Edit_Form</customer_group_edit_form>
|
| 33 |
+
</rewrite>
|
| 34 |
+
</adminhtml>
|
| 35 |
+
</blocks>
|
| 36 |
+
<helpers>
|
| 37 |
+
<freento_groupautoswitch>
|
| 38 |
+
<class>Freento_GroupAutoSwitch_Helper</class>
|
| 39 |
+
</freento_groupautoswitch>
|
| 40 |
+
</helpers>
|
| 41 |
+
<resources>
|
| 42 |
+
<freento_groupautoswitch_setup>
|
| 43 |
+
<setup>
|
| 44 |
+
<module>Freento_GroupAutoSwitch</module>
|
| 45 |
+
</setup>
|
| 46 |
+
<connection>
|
| 47 |
+
<use>core_setup</use>
|
| 48 |
+
</connection>
|
| 49 |
+
</freento_groupautoswitch_setup>
|
| 50 |
+
<freento_groupautoswitch_write>
|
| 51 |
+
<connection>
|
| 52 |
+
<use>core_write</use>
|
| 53 |
+
</connection>
|
| 54 |
+
</freento_groupautoswitch_write>
|
| 55 |
+
<freento_groupautoswitch_read>
|
| 56 |
+
<connection>
|
| 57 |
+
<use>core_read</use>
|
| 58 |
+
</connection>
|
| 59 |
+
</freento_groupautoswitch_read>
|
| 60 |
+
</resources>
|
| 61 |
+
<events>
|
| 62 |
+
<customer_save_before>
|
| 63 |
+
<observers>
|
| 64 |
+
<freento_groupautoswitch_customer_save_after>
|
| 65 |
+
<type>singleton</type>
|
| 66 |
+
<class>freento_groupautoswitch/observer</class>
|
| 67 |
+
<method>fillLastGroupChangeDate</method>
|
| 68 |
+
</freento_groupautoswitch_customer_save_after>
|
| 69 |
+
</observers>
|
| 70 |
+
</customer_save_before>
|
| 71 |
+
<sales_order_save_after>
|
| 72 |
+
<observers>
|
| 73 |
+
<freento_groupautoswitch_check_autoswitch>
|
| 74 |
+
<type>singleton</type>
|
| 75 |
+
<class>freento_groupautoswitch/observer</class>
|
| 76 |
+
<method>checkGroupAutoSwitch</method>
|
| 77 |
+
</freento_groupautoswitch_check_autoswitch>
|
| 78 |
+
</observers>
|
| 79 |
+
</sales_order_save_after>
|
| 80 |
+
</events>
|
| 81 |
+
<template>
|
| 82 |
+
<email>
|
| 83 |
+
<freento_groupautoswitch_group_auto_switch translate="label" module="freento_groupautoswitch">
|
| 84 |
+
<label>Group Auto Switch Email Template</label>
|
| 85 |
+
<file>freento/groupautoswitch/auto_switch.html</file>
|
| 86 |
+
<type>html</type>
|
| 87 |
+
</freento_groupautoswitch_group_auto_switch>
|
| 88 |
+
<freento_groupautoswitch_group_downgrade_before translate="label" module="freento_groupautoswitch">
|
| 89 |
+
<label>Group Downgrade Before Email Template</label>
|
| 90 |
+
<file>freento/groupautoswitch/downgrade_before.html</file>
|
| 91 |
+
<type>html</type>
|
| 92 |
+
</freento_groupautoswitch_group_downgrade_before>
|
| 93 |
+
<freento_groupautoswitch_group_downgrade translate="label" module="freento_groupautoswitch">
|
| 94 |
+
<label>Group Downgrade Email Template</label>
|
| 95 |
+
<file>freento/groupautoswitch/downgrade.html</file>
|
| 96 |
+
<type>html</type>
|
| 97 |
+
</freento_groupautoswitch_group_downgrade>
|
| 98 |
+
</email>
|
| 99 |
+
</template>
|
| 100 |
+
</global>
|
| 101 |
+
<adminhtml>
|
| 102 |
+
<layout>
|
| 103 |
+
<updates>
|
| 104 |
+
<freento_groupautoswitch>
|
| 105 |
+
<file>freento/groupautoswitch.xml</file>
|
| 106 |
+
</freento_groupautoswitch>
|
| 107 |
+
</updates>
|
| 108 |
+
</layout>
|
| 109 |
+
</adminhtml>
|
| 110 |
+
<admin>
|
| 111 |
+
<routers>
|
| 112 |
+
<adminhtml>
|
| 113 |
+
<use>admin</use>
|
| 114 |
+
<args>
|
| 115 |
+
<modules>
|
| 116 |
+
<freento_groupautoswitch_admin before="Mage_Adminhtml">Freento_GroupAutoSwitch_Adminhtml</freento_groupautoswitch_admin>
|
| 117 |
+
</modules>
|
| 118 |
+
</args>
|
| 119 |
+
</adminhtml>
|
| 120 |
+
<freento_groupautoswitch>
|
| 121 |
+
<use>admin</use>
|
| 122 |
+
<args>
|
| 123 |
+
<module>Freento_GroupAutoSwitch</module>
|
| 124 |
+
<frontName>freento_groupautoswitch</frontName>
|
| 125 |
+
</args>
|
| 126 |
+
</freento_groupautoswitch>
|
| 127 |
+
</routers>
|
| 128 |
+
</admin>
|
| 129 |
+
<crontab>
|
| 130 |
+
<jobs>
|
| 131 |
+
<!--freento_groupautoswitch_downgrade_check>
|
| 132 |
+
<schedule><cron_expr>15 * * * *</cron_expr></schedule>
|
| 133 |
+
<run><model>freento_groupautoswitch/cron::downgradeCheck</model></run>
|
| 134 |
+
</freento_groupautoswitch_downgrade_check-->
|
| 135 |
+
<!--freento_groupautoswitch_downgrade_before_email>
|
| 136 |
+
<schedule><cron_expr>25 2 * * *</cron_expr></schedule>
|
| 137 |
+
<run><model>freento_groupautoswitch/cron::downgradeBeforeEmail</model></run>
|
| 138 |
+
</freento_groupautoswitch_downgrade_before_email-->
|
| 139 |
+
<!--freento_groupautoswitch_force_fill>
|
| 140 |
+
<schedule><cron_expr>5 * * * *</cron_expr></schedule>
|
| 141 |
+
<run><model>freento_groupautoswitch/cron::forceFill</model></run>
|
| 142 |
+
</freento_groupautoswitch_force_fill-->
|
| 143 |
+
</jobs>
|
| 144 |
+
</crontab>
|
| 145 |
+
<phpunit>
|
| 146 |
+
<suite>
|
| 147 |
+
<modules>
|
| 148 |
+
<Freento_GroupAutoSwitch />
|
| 149 |
+
</modules>
|
| 150 |
+
</suite>
|
| 151 |
+
</phpunit>
|
| 152 |
+
</config>
|
app/code/community/Freento/GroupAutoSwitch/etc/system.xml
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<tabs>
|
| 4 |
+
<freento translate="label">
|
| 5 |
+
<label>Freento</label>
|
| 6 |
+
<sort_order>1000</sort_order>
|
| 7 |
+
</freento>
|
| 8 |
+
</tabs>
|
| 9 |
+
<sections>
|
| 10 |
+
<freento_groupautoswitch translate="label">
|
| 11 |
+
<tab>freento</tab>
|
| 12 |
+
<label>Customer Group Auto Switch</label>
|
| 13 |
+
<sort_order>100</sort_order>
|
| 14 |
+
<show_in_default>1</show_in_default>
|
| 15 |
+
<show_in_website>1</show_in_website>
|
| 16 |
+
<show_in_store>1</show_in_store>
|
| 17 |
+
<groups translate="label">
|
| 18 |
+
<general>
|
| 19 |
+
<label>Configuration</label>
|
| 20 |
+
<expanded>1</expanded>
|
| 21 |
+
<frontend_type>text</frontend_type>
|
| 22 |
+
<show_in_default>1</show_in_default>
|
| 23 |
+
<show_in_website>1</show_in_website>
|
| 24 |
+
<show_in_store>1</show_in_store>
|
| 25 |
+
<sort_order>10</sort_order>
|
| 26 |
+
<fields>
|
| 27 |
+
<forceFill translate="label">
|
| 28 |
+
<label></label>
|
| 29 |
+
<button_label>Force fill</button_label>
|
| 30 |
+
<frontend_type>button</frontend_type>
|
| 31 |
+
<frontend_model>freento_groupautoswitch/adminhtml_system_config_form_forceFill</frontend_model>
|
| 32 |
+
<sort_order>10</sort_order>
|
| 33 |
+
<show_in_default>1</show_in_default>
|
| 34 |
+
<show_in_website>0</show_in_website>
|
| 35 |
+
<show_in_store>0</show_in_store>
|
| 36 |
+
</forceFill>
|
| 37 |
+
</fields>
|
| 38 |
+
</general>
|
| 39 |
+
</groups>
|
| 40 |
+
</freento_groupautoswitch>
|
| 41 |
+
</sections>
|
| 42 |
+
</config>
|
app/code/community/Freento/GroupAutoSwitch/sql/freento_groupautoswitch_setup/mysql4-install-1.0.0.php
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
$this->startSetup();
|
| 4 |
+
|
| 5 |
+
$this->run("
|
| 6 |
+
|
| 7 |
+
CREATE TABLE IF NOT EXISTS {$this->getTable('freento_groupautoswitch/group')} (
|
| 8 |
+
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
| 9 |
+
`is_enabled` tinyint(4) NOT NULL,
|
| 10 |
+
`group_id` int(10) unsigned NOT NULL,
|
| 11 |
+
`priority` int(10) unsigned NOT NULL,
|
| 12 |
+
`conditions_serialized` text NOT NULL,
|
| 13 |
+
`stop_further_rules` tinyint(4) NOT NULL,
|
| 14 |
+
`downgrade_template` varchar(255) NOT NULL,
|
| 15 |
+
`notify_on_group_change_template` varchar(255) NOT NULL,
|
| 16 |
+
`text_for_customer` text NOT NULL,
|
| 17 |
+
`downgrade_after` int(11) NOT NULL,
|
| 18 |
+
`downgrade_group` int(11) NOT NULL,
|
| 19 |
+
`notify_customer_before_downgrade` int(11) NOT NULL,
|
| 20 |
+
`notify_customer_before_downgrade_template` varchar(255) NOT NULL,
|
| 21 |
+
PRIMARY KEY (`id`)
|
| 22 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
| 23 |
+
|
| 24 |
+
CREATE TABLE IF NOT EXISTS {$this->getTable('freento_groupautoswitch/log')} (
|
| 25 |
+
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
|
| 26 |
+
`details` text,
|
| 27 |
+
`created_at` datetime DEFAULT NULL,
|
| 28 |
+
PRIMARY KEY (`id`)
|
| 29 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
| 30 |
+
|
| 31 |
+
");
|
| 32 |
+
|
| 33 |
+
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
|
| 34 |
+
|
| 35 |
+
$entityTypeId = $setup->getEntityTypeId('customer');
|
| 36 |
+
$attributeSetId = $setup->getDefaultAttributeSetId($entityTypeId);
|
| 37 |
+
$attributeGroupId = $setup->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
|
| 38 |
+
|
| 39 |
+
$setup->addAttribute('customer', 'group_last_change_date', array(
|
| 40 |
+
'type' => 'datetime',
|
| 41 |
+
'input' => 'date',
|
| 42 |
+
'validate_rules' => 'a:1:{s:16:"input_validation";s:4:"date";}',
|
| 43 |
+
'visible' => true,
|
| 44 |
+
'required' => false,
|
| 45 |
+
'label' => 'Customer Group Last Change Date',
|
| 46 |
+
));
|
| 47 |
+
|
| 48 |
+
$setup->addAttributeToGroup(
|
| 49 |
+
$entityTypeId,
|
| 50 |
+
$attributeSetId,
|
| 51 |
+
$attributeGroupId,
|
| 52 |
+
'group_last_change_date',
|
| 53 |
+
'1000'
|
| 54 |
+
);
|
| 55 |
+
|
| 56 |
+
$oAttribute = Mage::getSingleton('eav/config')->getAttribute('customer', 'group_last_change_date');
|
| 57 |
+
$oAttribute->setData('used_in_forms', array('adminhtml_customer'));
|
| 58 |
+
$oAttribute->save();
|
| 59 |
+
|
| 60 |
+
$this->endSetup();
|
app/design/adminhtml/default/default/layout/freento/groupautoswitch.xml
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<layout>
|
| 3 |
+
<adminhtml_customer_group_new>
|
| 4 |
+
<reference name="left">
|
| 5 |
+
<block type="freento_groupautoswitch/adminhtml_customer_group_edit_tabs" name="freento_groupautoswitch.customergroup.tabs" />
|
| 6 |
+
</reference>
|
| 7 |
+
<reference name="content">
|
| 8 |
+
|
| 9 |
+
</reference>
|
| 10 |
+
</adminhtml_customer_group_new>
|
| 11 |
+
<freento_groupautoswitch_adminhtml_log_index>
|
| 12 |
+
<reference name="content">
|
| 13 |
+
<block type="freento_groupautoswitch/adminhtml_log_grid" name="freento_groupautoswitch.log_grid" />
|
| 14 |
+
</reference>
|
| 15 |
+
</freento_groupautoswitch_adminhtml_log_index>
|
| 16 |
+
</layout>
|
app/design/adminhtml/default/default/template/freento_groupautoswitch/system/config/forceFill.phtml
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script>
|
| 2 |
+
//<![CDATA[
|
| 3 |
+
|
| 4 |
+
function forceFill() {
|
| 5 |
+
var elem = $('<?php echo $this->getHtmlId() ?>');
|
| 6 |
+
|
| 7 |
+
if(confirm('<?php echo $this->__('Are you sure? Customer groups may change significantly, we recommend to do backup before this action') ?>')) {
|
| 8 |
+
new Ajax.Request('<?php echo $this->getAjaxUrl() ?>', {
|
| 9 |
+
onSuccess: function(response) {
|
| 10 |
+
|
| 11 |
+
var result = 'none';
|
| 12 |
+
try {
|
| 13 |
+
result = response.responseText.evalJSON();
|
| 14 |
+
} catch (e) {
|
| 15 |
+
elem.removeClassName('success').addClassName('fail')
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
if(result.error) {
|
| 19 |
+
$$('#forceFill-results > li')[0].writeAttribute('class', 'error-msg');
|
| 20 |
+
$$('#forceFill-results li.message')[0].update(result.message);
|
| 21 |
+
} else {
|
| 22 |
+
$$('#forceFill-results > li')[0].writeAttribute('class', 'success-msg');
|
| 23 |
+
$$('#forceFill-results li.message')[0].update(result.message);
|
| 24 |
+
}
|
| 25 |
+
$$('#forceFill-results > li')[0].show();
|
| 26 |
+
}
|
| 27 |
+
});
|
| 28 |
+
}
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
//]]>
|
| 32 |
+
</script>
|
| 33 |
+
<ul class="messages" id="forceFill-results">
|
| 34 |
+
<li style="display: none">
|
| 35 |
+
<ul>
|
| 36 |
+
<li class="message"></li>
|
| 37 |
+
</ul>
|
| 38 |
+
</li>
|
| 39 |
+
</ul>
|
| 40 |
+
<button onclick="javascript:forceFill(); return false;" class="scalable" type="button" id="<?php echo $this->getHtmlId() ?>">
|
| 41 |
+
<span><?php echo $this->escapeHtml($this->getButtonLabel()) ?></span>
|
| 42 |
+
</button>
|
app/etc/modules/Freento_GroupAutoSwitch.xml
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
|
| 3 |
+
<config>
|
| 4 |
+
<modules>
|
| 5 |
+
<Freento_GroupAutoSwitch>
|
| 6 |
+
<active>true</active>
|
| 7 |
+
<codePool>community</codePool>
|
| 8 |
+
</Freento_GroupAutoSwitch>
|
| 9 |
+
</modules>
|
| 10 |
+
</config>
|
app/locale/en_US/template/email/freento/groupautoswitch/auto_switch.html
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!--@subject Your level have been changed @-->
|
| 2 |
+
|
| 3 |
+
<!--@vars
|
| 4 |
+
{"store url=\"\"":"Store Url",
|
| 5 |
+
"var logo_url":"Email Logo Image Url",
|
| 6 |
+
"htmlescape var=$customer.name":"Customer Name",
|
| 7 |
+
"store url=\"customer/account/\"":"Customer Account Url",
|
| 8 |
+
"var customer.email":"Customer Email",
|
| 9 |
+
"htmlescape var=$customer.password":"Customer Password"}
|
| 10 |
+
@-->
|
| 11 |
+
|
| 12 |
+
{{template config_path="design/email/header"}}
|
| 13 |
+
{{inlinecss file="email-inline.css"}}
|
| 14 |
+
|
| 15 |
+
<p>Dear {{var customer_name}},</p>
|
| 16 |
+
<p>Your level have been changed to {{var new_group}}. You can see your current level details on the account dashboard.</p>
|
| 17 |
+
|
| 18 |
+
{{template config_path="design/email/footer"}}
|
app/locale/en_US/template/email/freento/groupautoswitch/downgrade.html
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!--@subject Your level have been changed @-->
|
| 2 |
+
|
| 3 |
+
<!--@vars
|
| 4 |
+
{"store url=\"\"":"Store Url",
|
| 5 |
+
"var logo_url":"Email Logo Image Url",
|
| 6 |
+
"htmlescape var=$customer.name":"Customer Name",
|
| 7 |
+
"store url=\"customer/account/\"":"Customer Account Url",
|
| 8 |
+
"var customer.email":"Customer Email",
|
| 9 |
+
"htmlescape var=$customer.password":"Customer Password"}
|
| 10 |
+
@-->
|
| 11 |
+
|
| 12 |
+
{{template config_path="design/email/header"}}
|
| 13 |
+
{{inlinecss file="email-inline.css"}}
|
| 14 |
+
|
| 15 |
+
<p>Dear {{var customer_name}},</p>
|
| 16 |
+
<p>Your level have been changed to {{var new_group}}. You can see your current level details on the account dashboard.</p>
|
| 17 |
+
|
| 18 |
+
{{template config_path="design/email/footer"}}
|
app/locale/en_US/template/email/freento/groupautoswitch/downgrade_before.html
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!--@subject Caution! Prevent Your Level Lowering @-->
|
| 2 |
+
|
| 3 |
+
<!--@vars
|
| 4 |
+
{"store url=\"\"":"Store Url",
|
| 5 |
+
"var logo_url":"Email Logo Image Url",
|
| 6 |
+
"htmlescape var=$customer.name":"Customer Name",
|
| 7 |
+
"store url=\"customer/account/\"":"Customer Account Url",
|
| 8 |
+
"var customer.email":"Customer Email",
|
| 9 |
+
"htmlescape var=$customer.password":"Customer Password"}
|
| 10 |
+
@-->
|
| 11 |
+
|
| 12 |
+
{{template config_path="design/email/header"}}
|
| 13 |
+
{{inlinecss file="email-inline.css"}}
|
| 14 |
+
|
| 15 |
+
<p>Dear {{var customer_name}},</p>
|
| 16 |
+
<p>
|
| 17 |
+
To save your current level, you should make a purchase in {{var store_name}} store.
|
| 18 |
+
Please note that if you will not make a purchase in {{var days_to_downgrade}} days, you will be automatically moved to a lower level.
|
| 19 |
+
</p>
|
| 20 |
+
|
| 21 |
+
{{template config_path="design/email/footer"}}
|
package.xml
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>Freento_GroupAutoSwitch</name>
|
| 4 |
+
<version>1.0.0</version>
|
| 5 |
+
<stability>stable</stability>
|
| 6 |
+
<license>Open Software License (OSL 3.0)</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>Free Magento extension for automatic customer group switching</summary>
|
| 10 |
+
<description><ul>
|
| 11 |
+
<li>Automatic event based customer group auto switch</li>
|
| 12 |
+
<li>Switch group based on lifetime statistic</li>
|
| 13 |
+
<li>Switch group based on previous group switch date</li>
|
| 14 |
+
<li>Manual group switch</li>
|
| 15 |
+
<li>Sending email notifications on group change</li>
|
| 16 |
+
<li>Downgrade to some group based on customer activity</li>
|
| 17 |
+
<li>Progress bar based on lifetime statistic and current group purchases statistic</li>
|
| 18 |
+
<li>Text alert in custmer account for customer groups</li>
|
| 19 |
+
<li>Ability to see statistic of purchases in current group in customer account</li>
|
| 20 |
+
<li>Individual email welcome messages for customers</li>
|
| 21 |
+
<li>Ability to easily filter customers by group in native customer grid</li>
|
| 22 |
+
<li>Multistore support</li>
|
| 23 |
+
<li>100% free extension</li>
|
| 24 |
+
</ul></description>
|
| 25 |
+
<notes><ul>
|
| 26 |
+
<li>Automatic event based customer group auto switch</li>
|
| 27 |
+
<li>Switch group based on lifetime statistic</li>
|
| 28 |
+
<li>Switch group based on previous group switch date</li>
|
| 29 |
+
<li>Manual group switch</li>
|
| 30 |
+
<li>Sending email notifications on group change</li>
|
| 31 |
+
<li>Downgrade to some group based on customer activity</li>
|
| 32 |
+
<li>Progress bar based on lifetime statistic and current group purchases statistic</li>
|
| 33 |
+
<li>Text alert in custmer account for customer groups</li>
|
| 34 |
+
<li>Ability to see statistic of purchases in current group in customer account</li>
|
| 35 |
+
<li>Individual email welcome messages for customers</li>
|
| 36 |
+
<li>Ability to easily filter customers by group in native customer grid</li>
|
| 37 |
+
<li>Multistore support</li>
|
| 38 |
+
<li>100% free extension</li>
|
| 39 |
+
</ul></notes>
|
| 40 |
+
<authors><author><name>Alexey Bordachyov</name><user>alex</user><email>alex@freento.com</email></author></authors>
|
| 41 |
+
<date>2016-04-06</date>
|
| 42 |
+
<time>09:19:48</time>
|
| 43 |
+
<contents><target name="magecommunity"><dir name="Freento"><dir name="GroupAutoSwitch"><dir name="Block"><dir name="Adminhtml"><dir name="Customer"><dir name="Group"><dir name="Edit"><dir name="Form"><file name="Autoswitch.php" hash="08da64c21efc3ad6c012848c262b14e7"/><file name="Conditions.php" hash="bc9042435fa87e0a965dffeedc915232"/><file name="Downgrade.php" hash="e112afe52d92e89e835366ff06847830"/><file name="GroupSettings.php" hash="e42f9786569539bb56a69e37a6413fb0"/><file name="Main.php" hash="6e6cd1374d22e524bb310626e70a4a81"/></dir><file name="Form.php" hash="50de39e003457a99842cfd4b130bd834"/><file name="Tabs.php" hash="b976216fb8d6cd8a52521632cd0baee9"/></dir></dir></dir><dir name="Log"><file name="Grid.php" hash="e52501ba190cca79e762eda44c4a1e70"/></dir><file name="Log.php" hash="f096d995e5da87dfbc2dbf2d129bebc1"/><dir name="System"><dir name="Config"><dir name="Form"><file name="ForceFill.php" hash="147c3c65474f306944b668d0c82dc2dd"/></dir></dir></dir></dir></dir><dir name="Exception"><file name="General.php" hash="617043870401288f49ef6a896d034bf2"/></dir><dir name="Helper"><file name="Data.php" hash="d9176fa3eb7afbdeca4bd8d2bb4864a0"/></dir><dir name="Model"><file name="Cron.php" hash="14927760f0132581ed675cfc9259a78f"/><file name="Group.php" hash="4976dedd88f61b3f1fe9c750dbf6cadd"/><file name="Log.php" hash="2d5ce86ca7ae3e90574976b8d3cd081d"/><file name="Observer.php" hash="bff3e531e8726a5326f900213b6b1001"/><dir name="Resource"><dir name="Group"><file name="Collection.php" hash="5646f620c1775f3f006bb77a3c90d821"/></dir><file name="Group.php" hash="ffe248d7aa2b9f667b93505635429660"/><dir name="Log"><file name="Collection.php" hash="ca29a102398066b9de8a6b01fc7aef84"/></dir><file name="Log.php" hash="be66832bfcd29c21c22cbf1e70d2b804"/></dir><dir name="Rule"><dir name="Condition"><file name="Combine.php" hash="aee27cdc2d1677a7100d2f09ef5990b0"/><dir name="Customer"><dir name="Attribute"><file name="Group.php" hash="7b0f6a175ec309ebda496a26fb9337f4"/></dir><dir name="Statistic"><file name="Abstract.php" hash="78cdf63201a12128fce241f7ac9f0f93"/><file name="CurrentGroupSales.php" hash="8c74a85435f17f88abe78e82eafed5ea"/><file name="LifetimeSales.php" hash="94472df9560f747e198a0da60395c040"/></dir></dir></dir></dir></dir><dir name="Test"><dir name="Model"><dir name="Cron"><dir name="expectations"><file name="downgradeCheck.php" hash="e92b0eb7d8d54f731412facd922dde46"/><file name="forceFill.php" hash="351301b821b5d62ba46803dec633ec62"/></dir><dir name="fixtures"><file name="downgradeCheck.php" hash="23fddefcb714ba283c98064484536c66"/><file name="forceFill.php" hash="c7de55cb855ae518c24dfccad6fe1dbd"/></dir><dir name="providers"><file name="downgradeCheck.php" hash="14d3c11893e08c90596769b37ac55a9e"/><file name="forceFill.php" hash="e0efca150b0cb1b020cde5b3e38053f9"/></dir></dir><file name="Cron.php" hash="7b38690fa5cb4442465e14d2b093b112"/><dir name="Group"><dir name="expectations"><file name="switchGroup.php" hash="ed4a7487674df2f93e8a93c4b6eace85"/></dir><dir name="fixtures"><file name="switchGroup.php" hash="15cc865c7c1e44235ea8ea43e24195a7"/></dir><dir name="providers"><file name="switchGroup.php" hash="e9144a7a95ebaef4d851f14201a2a126"/></dir></dir><file name="Group.php" hash="10d19866cb4fdb0f8756f09b4ccf615a"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Customer"><file name="GroupController.php" hash="6a89673d0d7b8e13ed702df2bccc4b72"/></dir><file name="LogController.php" hash="be1bfb0c98fb9064cdfc067fae70f674"/><dir name="System"><file name="ConfigController.php" hash="8bcce53cd5f8202020cd2488835fb21c"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="f4ec111db6cbed826987e369b4c3a779"/><file name="config.xml" hash="4e3cacac8ce40e4d7e7a9b984cadaf13"/><file name="system.xml" hash="a512e179e14703bd8d49298568b1e8b9"/></dir><dir name="sql"><dir name="freento_groupautoswitch_setup"><file name="mysql4-install-1.0.0.php" hash="b32c4d6cc1f27ca5d626b8d377baa761"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><dir name="freento"><file name="groupautoswitch.xml" hash="98670633c5f24bc037591ad238451fef"/></dir></dir><dir name="template"><dir name="freento_groupautoswitch"><dir name="system"><dir name="config"><file name="forceFill.phtml" hash="af149d17a7bf808a63b8822b3bd0adcf"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Freento_GroupAutoSwitch.xml" hash="7542ef677d1ccc3444931ce45738a342"/></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><dir name="freento"><dir name="groupautoswitch"><file name="auto_switch.html" hash="b3ddd85ee862798513ea6e3d987f47ae"/><file name="downgrade.html" hash="b3ddd85ee862798513ea6e3d987f47ae"/><file name="downgrade_before.html" hash="a6a90d4e653afbe3a507025ead4dafc0"/></dir></dir></dir></dir></dir></target></contents>
|
| 44 |
+
<compatible/>
|
| 45 |
+
<dependencies><required><php><min>5.4.0</min><max>7.0.0</max></php></required></dependencies>
|
| 46 |
+
</package>
|
