//carrier wizard free shipping fix & added currency sign on new range

This commit is contained in:
Vincent Augagneur
2013-08-02 10:22:06 +02:00
parent fc63b8ad7f
commit 9e720da3d6
4 changed files with 48 additions and 47 deletions
@@ -38,11 +38,12 @@
<tr class="fees {if $i is odd}alt_row{/if}" data-zoneid="{$zone.id_zone}">
<td>{$zone.name}</td>
<td class="zone">
<input class="input_zone" name="zone_{$zone.id_zone}" value="1" type="checkbox" {if isset($fields_value[$input.name][$zone.id_zone]) && $fields_value[$input.name][$zone.id_zone]} checked="checked"{/if}/>
<input class="input_zone" name="zone_{$zone.id_zone}" value="1" type="checkbox" {if isset($fields_value['zones'][$zone.id_zone]) && $fields_value['zones'][$zone.id_zone]} checked="checked"{/if}/>
</td>
{foreach from=$ranges key=r item=range}
<td class="center">
<input name="fees[{$zone.id_zone|intval}][{$range.id_range|intval}]" {if ((isset($form_id) && !$form_id) || isset($change_ranges) || (isset($fields_value[$input.name][$zone.id_zone]) && !$fields_value[$input.name][$zone.id_zone]))} disabled="disabled"{/if} type="text" value="{if isset($price_by_range[$range.id_range][$zone.id_zone]) && $fields_value[$input.name][$zone.id_zone]} {$price_by_range[$range.id_range][$zone.id_zone]|string_format:'%.6f'} {/if}" />&nbsp; {$currency_sign}
<input name="fees[{$zone.id_zone|intval}][{$range.id_range|intval}]" type="text"
{if !isset($fields_value['zones'][$zone.id_zone]) || (isset($fields_value['zones'][$zone.id_zone]) && !$fields_value['zones'][$zone.id_zone])} disabled="disabled"{/if} {if isset($price_by_range[$range.id_range][$zone.id_zone]) && $price_by_range[$range.id_range][$zone.id_zone] && isset($fields_value['zones'][$zone.id_zone]) && $fields_value['zones'][$zone.id_zone]} value="{$price_by_range[$range.id_range][$zone.id_zone]|string_format:'%.6f'}" {else} value="" {/if} /> &nbsp; {$currency_sign}
</td>
{/foreach}
</tr>
@@ -37,6 +37,7 @@
var enableAllSteps = {if $enableAllSteps|intval == 1}true{else}false{/if};
var need_to_validate = '{l s='Please validate the last range before create a new one.' js=1}';
var delete_range_confirm = '{l s='Are you sure to delete this range ?' js=1}';
var currency_sign = '{$currency_sign}';
</script>
<div id="carrier_wizard" class="swMain">
<ul class="nbr_steps_{$wizard_steps.steps|count}">
@@ -101,8 +101,9 @@ class AdminCarrierWizardControllerCore extends AdminController
$this->errors[] = Tools::displayError('You do not have permission to use this wizard.');
return ;
}
$currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT'));
$this->tpl_view_vars = array(
'currency_sign' => $currency->sign,
'enableAllSteps' => Validate::isLoadedObject($carrier),
'wizard_steps' => $this->wizard_steps,
'validate_url' => $this->context->link->getAdminLink('AdminCarrierWizard'),
@@ -117,6 +118,7 @@ class AdminCarrierWizardControllerCore extends AdminController
'labels' => array('next' => $this->l('Next'), 'previous' => $this->l('Previous'), 'finish' => $this->l('Finish'))
);
if (Shop::isFeatureActive())
array_splice($this->tpl_view_vars['wizard_contents']['contents'], 1, 0, array(0 => $this->renderStepTwo($carrier)));
@@ -417,35 +419,35 @@ class AdminCarrierWizardControllerCore extends AdminController
foreach ($carrier_zones as $carrier_zone)
$carrier_zones_ids[] = $carrier_zone['id_zone'];
$range_table = $carrier->getRangeTable();
$shipping_method = $carrier->getShippingMethod();
$zones = Zone::getZones(false);
foreach ($zones as $zone)
$fields_value['zones'][$zone['id_zone']] = Tools::getValue('zone_'.$zone['id_zone'], (in_array($zone['id_zone'], $carrier_zones_ids)));
if ($shipping_method == Carrier::SHIPPING_METHOD_FREE)
{
$range_table = array();
$range_obj = $carrier->getRangeObject($carrier->shipping_method);
$price_by_range = array();
}
else
{
$range_table = $carrier->getRangeTable();
$range_obj = $carrier->getRangeObject();
$price_by_range = Carrier::getDeliveryPriceByRanges($range_table, (int)$carrier->id);
}
$zones = Zone::getZones(false);
foreach ($zones as $zone)
$fields_value['zones'][$zone['id_zone']] = Tools::getValue('zone_'.$zone['id_zone'], (in_array($zone['id_zone'], $carrier_zones_ids)));
foreach ($price_by_range as $price)
$tpl_vars['price_by_range'][$price['id_'.$range_table]][$price['id_zone']] = $price['price'];
$tmp_range = $range_obj->getRanges((int)$carrier->id);
$tpl_vars['ranges'] = array();
foreach ($tmp_range as $id => $range)
{
$tpl_vars['ranges'][$range['id_'.$range_table]] = $range;
$tpl_vars['ranges'][$range['id_'.$range_table]]['id_range'] = $range['id_'.$range_table];
}
if ($shipping_method != Carrier::SHIPPING_METHOD_FREE)
foreach ($tmp_range as $id => $range)
{
$tpl_vars['ranges'][$range['id_'.$range_table]] = $range;
$tpl_vars['ranges'][$range['id_'.$range_table]]['id_range'] = $range['id_'.$range_table];
}
// init blank range
if (!count($tpl_vars['ranges']))
@@ -534,7 +536,6 @@ class AdminCarrierWizardControllerCore extends AdminController
$tpl_vars = array();
$fields_value = $this->getStepThreeFieldsValues($carrier);
$this->getTplRangesVarsAndValues($carrier, $tpl_vars, $fields_value);
$template = $this->createTemplate('controllers/carrier_wizard/helpers/form/form_ranges.tpl');
$template->assign($tpl_vars);
$template->assign('change_ranges', 1);
@@ -676,19 +677,30 @@ class AdminCarrierWizardControllerCore extends AdminController
{
$current_carrier = new Carrier((int)$id_carrier);
// if update we duplicate current Carrier
$carrier = $current_carrier->duplicateObject();
if (Validate::isLoadedObject($carrier))
$new_carrier = $current_carrier->duplicateObject();
if (Validate::isLoadedObject($new_carrier))
{
// Set flag deteled to true for historization
$current_carrier->deleted = true;
$current_carrier->update();
// Fill the new carrier object
$this->copyFromPost($carrier, $this->table);
$carrier->position = $current_carrier->position;
$carrier->update();
$this->copyLogo($current_carrier->id, $carrier->id);
$this->copyFromPost($new_carrier, $this->table);
$new_carrier->position = $current_carrier->position;
$new_carrier->update();
$this->updateAssoShop($new_carrier->id);
$new_carrier->copyCarrierData((int)$current_carrier->id);
$this->changeGroups($new_carrier->id);
// Call of hooks
Hook::exec('actionCarrierUpdate', array(
'id_carrier' => (int)$current_carrier->id,
'carrier' => $new_carrier
));
$this->postImage($new_carrier->id);
$this->changeZones($new_carrier->id);
$new_carrier->setTaxRulesGroup((int)Tools::getValue('id_tax_rules_group'));
$carrier = $new_carrier;
}
}
else
@@ -724,7 +736,7 @@ class AdminCarrierWizardControllerCore extends AdminController
}
if (!$carrier->is_free)
if (!$this->processRanges((int)$carrier->id))
if (!Tools::getValue('id_carrier') && !$this->processRanges((int)$carrier->id))
{
$return['has_error'] = true;
$return['errors'][] = $this->l('An error occurred while saving carrier ranges.');
@@ -762,21 +774,6 @@ class AdminCarrierWizardControllerCore extends AdminController
die(Tools::jsonEncode($return));
}
protected function copyLogo($old_id, $new_id)
{
$old_logo = _PS_SHIP_IMG_DIR_.'/'.(int)$old_id.'.jpg';
if (file_exists($old_logo))
copy($old_logo, _PS_SHIP_IMG_DIR_.'/'.(int)$new_id.'.jpg');
$old_tmp_logo = _PS_TMP_IMG_DIR_.'/carrier_mini_'.(int)$old_id.'.jpg';
if (file_exists($old_tmp_logo))
{
if (!isset($_FILES['logo']))
copy($old_tmp_logo, _PS_TMP_IMG_DIR_.'/carrier_mini_'.$new_id.'.jpg');
unlink($old_tmp_logo);
}
}
protected function changeGroups($id_carrier, $delete = true)
{
$carrier = new Carrier((int)$id_carrier);
+8 -6
View File
@@ -27,7 +27,8 @@
$(document).ready(function() {
bind_inputs();
initCarrierWizard();
is_freeClick($('input[name="is_free"]:checked'));
if (parseInt($('input[name="is_free"]:checked').val()))
is_freeClick($('input[name="is_free"]:checked'));
displayRangeType();
});
@@ -262,6 +263,7 @@ function bind_inputs()
if ($('tr.fees_all td:eq('+index+')').hasClass('validated'))
$(this).children('input:text').removeAttr('disabled');
});
console.log($(this).next());
}
else
$(this).closest('tr').children('td').children('input:text').attr('disabled', 'disabled');
@@ -285,7 +287,7 @@ function bind_inputs()
$(document.body).off('change', 'tr.fees_all td input').on('change', 'tr.fees_all td input', function() {
   index = $(this).parent('td').index();
val = $(this).val();
val = 'tototo';$(this).val();
$(this).val('');
$('tr.fees').each( function () {
$(this).find('td:eq('+index+') input:text:enabled').val(val);
@@ -330,7 +332,7 @@ function is_freeClick(elt)
function hideFees()
{
$('tr.fees td').each( function () {
$('tr.range_inf td, tr.range_sup td, tr.fees_all td, tr.fees td').each( function () {
if ($(this).index() >= 2)
{
$(this).find('input:text, button').val('').attr('disabled', 'disabled').css('background-color', '#999999').css('border-color', '#999999');
@@ -341,12 +343,12 @@ function hideFees()
function showFees()
{
$('tr.fees td').each( function () {
$('tr.range_inf td, tr.range_sup td, tr.fees_all td, tr.fees td').each( function () {
if ($(this).index() >= 2)
{
//enable only if zone is active
tr = $(this).parent('tr');
if ($(tr).index() > 2 && $(tr).find('td:eq(1) input').attr('checked') && $('tr.fees_all td:eq('+$(this).index()+')').hasClass('validated'))
if ($(tr).index() > 2 && $(tr).find('td:eq(1) input').attr('checked') && $('tr.fees_all td:eq('+$(this).index()+')').hasClass('validated') || $(tr).hasClass('range_sup') || $(tr).hasClass('range_inf'))
$(this).find('input:text').val('').removeAttr('disabled');
$(this).find('input:text, button').css('background-color', '').css('border-color', '');
@@ -455,7 +457,7 @@ function add_new_range()
$('tr.fees_all td:last').after('<td class="center border_top border_bottom"><input style="display:none" type="text" /> <button class="button">'+labelValidate+'</button</td>');
$('tr.fees').each( function () {
$(this).children('td:last').after('<td class="center"><input disabled="disabled" name="fees['+$(this).data('zoneid')+'][]" type="text" /></td>');
$(this).children('td:last').after('<td class="center"><input disabled="disabled" name="fees['+$(this).data('zoneid')+'][]" type="text" /> &nbsp; '+currency_sign+'</td>');
});
$('tr.delete_range td:last').after('<td class="center"><button class="button">'+labelDelete+'</button</td>');