edit.phtml 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. // @codingStandardsIgnoreFile
  7. /** @var $block \Magento\Tax\Block\Adminhtml\Rule\Edit\Form */
  8. ?>
  9. <script>
  10. require([
  11. 'jquery',
  12. 'Magento_Ui/js/modal/alert',
  13. "jquery/ui",
  14. 'mage/multiselect',
  15. "mage/mage",
  16. 'Magento_Ui/js/modal/modal'
  17. ], function($, alert){
  18. $.widget("adminhtml.dialogRates", $.mage.modal, {
  19. options: {
  20. itemRate: {},
  21. itemRateDefault: {}
  22. },
  23. _create: function() {
  24. this._super();
  25. this._getFormData(this.options.itemRateDefault);
  26. },
  27. openModal: function() {
  28. var zipIsRange = this.modal.find('#zip_is_range');
  29. this._applyItem(this.options.itemRateDefault);
  30. if (this.options.itemRate && !$.isEmptyObject(this.options.itemRate)) {
  31. this._applyItem(this.options.itemRate);
  32. }
  33. zipIsRange.attr('checked', zipIsRange.val() == 1);
  34. zipIsRange.trigger('change');
  35. updater.update();
  36. this._super();
  37. },
  38. closeModal: function() {
  39. this._super();
  40. },
  41. _applyItem: function(rate) {
  42. var dialogElement = this.modal;
  43. $.each(rate, function(key, value) {
  44. if (!value) {
  45. value = '';
  46. }
  47. dialogElement.find('[name="' + key + '"]').attr('value', value);
  48. });
  49. },
  50. updateItemRate: function() {
  51. this._getFormData(this.options.itemRate);
  52. },
  53. _getFormData: function(data) {
  54. $.each(this.modal.find(':input'), function() {
  55. if (this.name) {
  56. data[this.name] = this.value
  57. }
  58. });
  59. }
  60. });
  61. TaxRateEditableMultiselect = function (settings) {
  62. this.settings = settings || {};
  63. this.isEntityEditable = this.settings.is_entity_editable || false;
  64. this.edit = function() {
  65. var listItem = $(this).closest('.mselect-list-item');
  66. var that = listItem.children('.mselect-edit');
  67. var id = listItem.find('input[type="checkbox"]').attr('value'),
  68. item;
  69. $('body').trigger('processStart');
  70. $.ajax({
  71. type: "POST",
  72. data: {id:id},
  73. url: '<?= /* @escapeNotVerified */ $block->getTaxRateLoadUrl() ?>',
  74. success: function(result, status) {
  75. $('body').trigger('processStop');
  76. if (result.success) {
  77. item=result.result;
  78. item.itemElement = that.prev();
  79. $('#tax-rate-form')
  80. .dialogRates({itemRate: item})
  81. .dialogRates('openModal');
  82. } else {
  83. if (result.error_message)
  84. alert({
  85. content: result.error_message
  86. });
  87. else
  88. alert({
  89. content: '<?= /* @escapeNotVerified */ __('An error occurred') ?>'
  90. });
  91. }
  92. },
  93. error: function () {
  94. $('body').trigger('processStop');
  95. alert({
  96. content: '<?= /* @escapeNotVerified */ __('An error occurred') ?>'
  97. });
  98. },
  99. dataType: "json"
  100. });
  101. };
  102. TaxRateEditableMultiselect.prototype.init = function () {
  103. var options = {
  104. mselectContainer: '#tax_rate + section.mselect-list',
  105. toggleAddButton:false,
  106. addText: '<?= /* @escapeNotVerified */ __('Add New Tax Rate') ?>',
  107. parse: null,
  108. nextPageUrl: '<?php echo $block->escapeHtml($block->getTaxRatesPageUrl())?>',
  109. selectedValues: this.settings.selected_values,
  110. mselectInputSubmitCallback: function (value, options) {
  111. var select = $('#tax_rate');
  112. select.append('<option value="" selected="selected">' + value + '</option>');
  113. var mselectItemHtml = $(options.item.replace(/%value%|%label%/gi, value)
  114. .replace(/%mselectCheckedClass%|%mselectDisabledClass%|%iseditable%|%isremovable%/gi, '')
  115. .replace(/%checked%|%disabled%/gi, '')
  116. .replace(/%mselectListItemClass%/gi, options.mselectListItemClass))
  117. .find('[type=checkbox]')
  118. .attr('checked', true)
  119. .addClass(options.mselectCheckedClass)
  120. .end();
  121. var itemsWrapper = select.nextAll('section.block:first')
  122. .find('.' + options.mselectItemsWrapperClass + '');
  123. itemsWrapper.children('.' + options.mselectListItemClass + '').length
  124. ? itemsWrapper.children('.' + options.mselectListItemClass + ':last').after(mselectItemHtml)
  125. : itemsWrapper.prepend(mselectItemHtml);
  126. }
  127. };
  128. var taxRate = $('#tax_rate'),
  129. taxRateField = taxRate.parent(),
  130. taxRateForm = $('#tax-rate-form'),
  131. taxRateFormElement = $('#<?= /* @escapeNotVerified */ \Magento\Tax\Block\Adminhtml\Rate\Form::FORM_ELEMENT_ID ?>');
  132. if (!this.isEntityEditable) {
  133. // Override default layout of editable multiselect
  134. options['layout'] = '<section class="block %mselectListClass%">'
  135. + '<div class="block-content"><div class="%mselectItemsWrapperClass%">'
  136. + '%items%'
  137. + '</div></div>'
  138. + '<div class="%mselectInputContainerClass%">'
  139. + '<input type="text" class="%mselectInputClass%" title="%inputTitle%"/>'
  140. + '<span class="%mselectButtonCancelClass%" title="%cancelText%"></span>'
  141. + '<span class="%mselectButtonSaveClass%" title="Add"></span>'
  142. + '</div>'
  143. + '</section>';
  144. options['mselectInputSubmitCallback'] = null;
  145. }
  146. taxRate.multiselect2(options);
  147. taxRateField.find('.mselect-button-add').off('click');
  148. taxRateField.find('.mselect-list')
  149. .on('click.mselect-edit', '.mselect-edit', this.edit)
  150. .on("click.mselect-delete", ".mselect-delete", function () {
  151. if (!confirm('<?= /* @escapeNotVerified */ __('Do you really want to delete this tax rate?') ?>')) {
  152. return;
  153. }
  154. var that = $(this),
  155. select = that.closest('.mselect-list').prev(),
  156. rateValue = that.parent().find('input[type="checkbox"]').val();
  157. $('body').trigger('processStart');
  158. var ajaxOptions = {
  159. type: 'POST',
  160. data: {
  161. tax_calculation_rate_id: rateValue,
  162. form_key: $('input[name="form_key"]').val()
  163. },
  164. dataType: 'json',
  165. url: '<?= /* @escapeNotVerified */ $block->getTaxRateDeleteUrl() ?>',
  166. success: function(result, status) {
  167. $('body').trigger('processStop');
  168. if (result.success) {
  169. that.parent().remove();
  170. select.find('option').each(function() {
  171. if (this.value === rateValue) {
  172. $(this).remove();
  173. }
  174. });
  175. select.trigger('change.hiddenSelect');
  176. } else {
  177. if (result.error_message)
  178. alert({
  179. content: result.error_message
  180. });
  181. else
  182. alert({
  183. content: '<?= /* @escapeNotVerified */ __('An error occurred') ?>'
  184. });
  185. }
  186. },
  187. error: function () {
  188. $('body').trigger('processStop');
  189. alert({
  190. content: '<?= /* @escapeNotVerified */ __('An error occurred') ?>'
  191. });
  192. }
  193. };
  194. $.ajax(ajaxOptions);
  195. })
  196. .on('click.mselectAdd', '.mselect-button-add', function () {
  197. taxRateForm
  198. .dialogRates({itemRate: {}})
  199. .dialogRates('openModal');
  200. })
  201. .on('click.mselect-checked', '.mselect-list-item input', function (event) {
  202. var el = $(this),
  203. checkedClassName = 'mselect-checked';
  204. el[el.is(':checked') ? 'addClass' : 'removeClass'](checkedClassName);
  205. })
  206. .on('dblclick.mselect-list-item', '.mselect-list-item label span', this.edit);
  207. taxRateFormElement.mage('form').mage('validation');
  208. taxRateForm.dialogRates({
  209. title: '<?= /* @escapeNotVerified */ __('Tax Rate') ?>',
  210. type: 'slide',
  211. id: '<?= /* @escapeNotVerified */ $block->getJsId() ?>',
  212. modalClass: 'tax-rate-popup',
  213. closed: function () {
  214. taxRateFormElement.data('validation').clearError();
  215. },
  216. buttons: [{
  217. text: '<?= /* @escapeNotVerified */ __('Save') ?>',
  218. 'class': 'action-save action-primary',
  219. click: function() {
  220. this.updateItemRate();
  221. var itemRate = this.option('itemRate'),
  222. itemRateData = $.extend({}, itemRate);
  223. if (itemRateData.itemElement) {
  224. delete itemRateData.itemElement;
  225. }
  226. if (!taxRateFormElement.validation().valid()) {
  227. return;
  228. }
  229. $('.tax-rate-popup').trigger('processStart');
  230. $('.loading-mask').css('z-index','1004');
  231. var ajaxOptions = {
  232. type: 'POST',
  233. data: itemRateData,
  234. dataType: 'json',
  235. url: '<?= /* @escapeNotVerified */ $block->getTaxRateSaveUrl() ?>',
  236. success: function(result, status) {
  237. $('body').trigger('processStop');
  238. if (result.success) {
  239. itemRate.code = result.code;
  240. if (itemRate.tax_calculation_rate_id) {
  241. itemRate.itemElement.find('span').html(itemRate.code);
  242. } else {
  243. itemRate.tax_calculation_rate_id = result.tax_calculation_rate_id;
  244. taxRateField.find('.mselect-input').val(itemRate.code);
  245. taxRateField.find('.mselect-save').trigger('mousedown');
  246. taxRateField.find('option[value=""]:last')
  247. .val(itemRate.tax_calculation_rate_id);
  248. taxRateField.find('input[type="checkbox"][value="' + itemRate.code + '"]')
  249. .val(itemRate.tax_calculation_rate_id);
  250. taxRateField.find('select').trigger('change.hiddenSelect');
  251. }
  252. taxRateForm.dialogRates('closeModal');
  253. } else {
  254. if (result.error_message)
  255. alert({
  256. content: result.error_message
  257. });
  258. else
  259. alert({
  260. content: '<?= /* @escapeNotVerified */ __('An error occurred') ?>'
  261. });
  262. }
  263. },
  264. error: function () {
  265. $('body').trigger('processStop');
  266. alert({
  267. content: '<?= /* @escapeNotVerified */ __('An error occurred') ?>'
  268. });
  269. }
  270. };
  271. $.ajax(ajaxOptions);
  272. }
  273. }]
  274. });
  275. $('.grid-loading-mask').hide();
  276. }
  277. };
  278. window.TaxRateEditableMultiselect = TaxRateEditableMultiselect;
  279. });
  280. </script>