Skip to content

Commit d1869c5

Browse files
committed
Fix sales rule edit page
1 parent 67a226b commit d1869c5

File tree

3 files changed

+63
-73
lines changed

3 files changed

+63
-73
lines changed

app/code/core/Mage/Adminhtml/Block/Promo/Quote/Edit/Tab/Main.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,6 @@ protected function _prepareForm()
169169
'name' => 'use_auto_generation',
170170
'label' => Mage::helper('salesrule')->__('Use Auto Generation'),
171171
'note' => Mage::helper('salesrule')->__('If you select and save the rule you will be able to generate multiple coupon codes.'),
172-
'onclick' => 'handleCouponsTabContentActivity()',
173172
'checked' => (int) $model->getUseAutoGeneration() > 0 ? 'checked' : '',
174173
]);
175174

app/code/core/Mage/Adminhtml/controllers/Promo/QuoteController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ public function saveAction()
161161
if (isset($data['rule']['actions'])) {
162162
$data['actions'] = $data['rule']['actions'];
163163
}
164+
unset($data['times_used']);
164165
unset($data['rule']);
165166
$model->loadPost($data);
166167

@@ -417,7 +418,7 @@ public function generateAction()
417418
Mage::logException($e);
418419
}
419420
}
420-
$this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result));
421+
$this->getResponse()->setBodyJson($result);
421422
}
422423

423424
/**

app/design/adminhtml/default/default/template/promo/salesrulejs.phtml

Lines changed: 61 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -9,100 +9,90 @@
99
* @license https://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
1010
*/
1111
?>
12-
<script type="text/javascript">
13-
//<![CDATA[
14-
var couponTypeSpecific = '<?= Mage_SalesRule_Model_Rule::COUPON_TYPE_SPECIFIC ?>';
15-
var tmpButtonsActionsStorage = [];
12+
<script>
13+
const couponTypeSpecific = '<?= Mage_SalesRule_Model_Rule::COUPON_TYPE_SPECIFIC ?>';
1614

1715
function disableEnableCouponsTabContent(disable) {
18-
var containerId = 'promo_catalog_edit_tabs_coupons_section_content';
19-
if($(containerId)){
20-
var dataFields = $(containerId).select('input', 'select', 'textarea', 'button');
21-
for(var i = 0; i < dataFields.length; i++) {
22-
disable ? dataFields[i].disable().addClassName('disabled')
23-
: dataFields[i].enable().removeClassName('disabled');
24-
}
16+
const containerEl = document.getElementById('promo_catalog_edit_tabs_coupons_section_content');
17+
if (!containerEl) {
18+
return;
19+
}
20+
for (const el of containerEl.querySelectorAll('input, select, textarea, button')) {
21+
setElementDisable(el, disable);
2522
}
26-
disable ? $('rule_coupon_code').enable() : $('rule_coupon_code').disable();
2723
}
2824

2925
function handleCouponsTabContentActivity() {
30-
disableEnableCouponsTabContent(!$('rule_use_auto_generation').checked);
31-
}
32-
33-
function handleCouponTypeChange() {
34-
$('rule_coupon_type').observe('change', function() {
35-
var disable = $('rule_coupon_type').value != couponTypeSpecific;
36-
if (!disable) {
37-
disable = !$('rule_use_auto_generation').checked;
26+
const couponType = document.getElementById('rule_coupon_type').value;
27+
if (couponType == couponTypeSpecific) {
28+
if (document.getElementById('rule_use_auto_generation').checked) {
29+
disableEnableCouponsTabContent(false);
30+
setElementDisable(document.getElementById('rule_coupon_code'), true);
31+
} else {
32+
disableEnableCouponsTabContent(true);
33+
setElementDisable(document.getElementById('rule_coupon_code'), false);
3834
}
39-
disableEnableCouponsTabContent(disable);
40-
});
35+
} else {
36+
disableEnableCouponsTabContent(true);
37+
}
4138
}
4239

43-
function refreshCouponCodesGrid(grid, gridMassAction, transport) {
40+
function refreshCouponCodesGrid(grid, gridMassAction) {
4441
grid.reload();
4542
gridMassAction.unselectAll();
4643
}
4744

48-
function generateCouponCodes(idPrefix, generateUrl, grid) {
49-
$(idPrefix + 'information_fieldset').removeClassName('ignore-validate');
50-
var validationResult = $(idPrefix + 'information_fieldset').select('input',
51-
'select', 'textarea').collect( function(elm) {
52-
return Validation.validate(elm, {
53-
useTitle :false,
54-
onElementValidate : function() {
55-
}
45+
async function generateCouponCodes(idPrefix, generateUrl, grid) {
46+
const fieldsetEl = document.getElementById(idPrefix + 'information_fieldset');
47+
const elements = fieldsetEl.querySelectorAll('input, select, textarea');
48+
let validationResult = true;
49+
50+
fieldsetEl.classList.remove('ignore-validate');
51+
for (const el of elements) {
52+
validationResult &&= Validation.validate(el, {
53+
useTitle: false,
54+
onElementValidate: function() {},
5655
});
57-
}).all();
58-
$(idPrefix + 'information_fieldset').addClassName('ignore-validate');
56+
}
57+
fieldsetEl.classList.add('ignore-validate');
5958

6059
if (!validationResult) {
6160
return;
6261
}
63-
var elements = $(idPrefix + 'information_fieldset').select('input', 'select', 'textarea');
6462

65-
elements = elements.concat(
66-
$$('#rule_uses_per_coupon'),
67-
$$('#rule_uses_per_customer'),
68-
$$('#rule_to_date')
69-
);
63+
const formData = new FormData();
64+
for (const el of elements) {
65+
formData.append(el.name, el.value);
66+
}
67+
for (const extra of ['rule_uses_per_coupon', 'rule_uses_per_customer', 'rule_to_date']) {
68+
const el = document.getElementById(extra);
69+
formData.append(el.name, el.value);
70+
}
71+
72+
clearMessagesDiv();
7073

71-
var params = Form.serializeElements(elements, true);
72-
params.form_key = FORM_KEY;
73-
$('messages').update();
74-
var couponCodesGrid = eval(grid);
75-
new Ajax.Request(generateUrl, {
76-
parameters :params,
77-
method :'post',
78-
onComplete : function (transport, param){
79-
var response = transport.responseJSON || transport.responseText.evalJSON(true) || {};
74+
try {
75+
const result = await mahoFetch(generateUrl, {
76+
method: 'POST',
77+
body: formData,
78+
});
8079

81-
if (couponCodesGrid) {
82-
couponCodesGrid.reload();
83-
}
84-
if (response && response.messages) {
85-
$('messages').update(response.messages);
86-
}
87-
if (response && response.error) {
88-
alert(response.error.stripTags().toString());
89-
}
80+
if (window[grid]) {
81+
window[grid].reload();
9082
}
91-
});
92-
}
93-
94-
Ajax.Responders.register({
95-
onComplete: function() {
96-
if ($('promo_catalog_edit_tabs_coupons_section_content')
97-
&& $('promo_catalog_edit_tabs_coupons_section_content').visible()
98-
&& Ajax.activeRequestCount == 0
99-
) {
100-
handleCouponsTabContentActivity();
83+
if (result?.messages) {
84+
setMessagesDivHtml(result.messages);
10185
}
86+
} catch (error) {
87+
setMessagesDiv(error.message, 'error');
10288
}
103-
});
10489

105-
document.observe("dom:loaded", handleCouponsTabContentActivity);
106-
document.observe("dom:loaded", handleCouponTypeChange);
107-
//]]>
90+
handleCouponsTabContentActivity();
91+
}
92+
93+
document.addEventListener('DOMContentLoaded', () => {
94+
handleCouponsTabContentActivity();
95+
document.getElementById('rule_coupon_type')?.addEventListener('change', handleCouponsTabContentActivity);
96+
document.getElementById('rule_use_auto_generation')?.addEventListener('change', handleCouponsTabContentActivity);
97+
});
10898
</script>

0 commit comments

Comments
 (0)