Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/cartforge.co/vendor/magento/module-shipping/view/adminhtml/web/order/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/cartforge.co/vendor/magento/module-shipping/view/adminhtml/web/order/packaging.js
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */

define(['prototype'], function () {

    window.Packaging = Class.create();
    Packaging.prototype = {
        /**
         * Initialize object
         */
        initialize: function (params) {
            this.packageIncrement = 0;
            this.packages = [];
            this.itemsAll = [];
            this.createLabelUrl = params.createLabelUrl ? params.createLabelUrl : null;
            this.itemsGridUrl = params.itemsGridUrl ? params.itemsGridUrl : null;
            this.errorQtyOverLimit = params.errorQtyOverLimit;
            this.titleDisabledSaveBtn = params.titleDisabledSaveBtn;
            this.window = $('packaging_window');
            this.messages = this.window.select('.message-warning')[0];
            this.packagesContent = $('packages_content');
            this.template = $('package_template');
            this.paramsCreateLabelRequest = {};
            this.validationErrorMsg = params.validationErrorMsg;

            this.defaultItemsQty            = params.shipmentItemsQty ? params.shipmentItemsQty : null;
            this.defaultItemsPrice          = params.shipmentItemsPrice ? params.shipmentItemsPrice : null;
            this.defaultItemsName           = params.shipmentItemsName ? params.shipmentItemsName : null;
            this.defaultItemsWeight         = params.shipmentItemsWeight ? params.shipmentItemsWeight : null;
            this.defaultItemsProductId      = params.shipmentItemsProductId ? params.shipmentItemsProductId : null;
            this.defaultItemsOrderItemId    = params.shipmentItemsOrderItemId ? params.shipmentItemsOrderItemId : null;

            this.shippingInformation = params.shippingInformation ? params.shippingInformation : null;
            this.thisPage           = params.thisPage ? params.thisPage : null;
            this.customizableContainers = params.customizable ? params.customizable : [];

            this.eps = 0.000001;
        },

        /**
         * Get Package Id
         */
        getPackageId: function (packageBlock) {
            return packageBlock.id.match(/\d{0,}$/)[0];
        },

        //******************** Setters **********************************//
        setLabelCreatedCallback: function (callback) {
            this.labelCreatedCallback = callback;
        },
        setCancelCallback: function (callback) {
            this.cancelCallback = callback;
        },
        setConfirmPackagingCallback: function (callback) {
            this.confirmPackagingCallback = callback;
        },
        setItemQtyCallback: function (callback) {
            this.itemQtyCallback = callback;
        },
        setCreateLabelUrl: function (url) {
            this.createLabelUrl = url;
        },
        setParamsCreateLabelRequest: function (params) {
            Object.extend(this.paramsCreateLabelRequest, params);
        },
        //******************** End Setters *******************************//

        showWindow: function () {
            if (this.packagesContent.childElements().length == 0) {
                this.newPackage();
            }
            const allowedPackageTypes = ["N","D"];

            if (!Object.values(this.customizableContainers).some(packageType => allowedPackageTypes.includes(packageType))) {
                $('packaging_window').select(
                    'th.col-length,th.col-width,th.col-height'
                ).forEach(element => {
                    element.classList.remove('_required')
                });
            }
            jQuery(this.window).modal('openModal');
        },

        cancelPackaging: function () {
            if (Object.isFunction(this.cancelCallback)) {
                this.cancelCallback();
            }
        },

        confirmPackaging: function (params) {
            if (Object.isFunction(this.confirmPackagingCallback)) {
                this.confirmPackagingCallback();
            }
        },

        checkAllItems: function (headCheckbox) {
            $(headCheckbox).up('table').select('tbody input[type="checkbox"]').each(function (checkbox) {
                checkbox.checked = headCheckbox.checked;
                this._observeQty.call(checkbox);
            }.bind(this));
        },

        cleanPackages: function () {
            this.packagesContent.update();
            this.packages = [];
            this.itemsAll = [];
            this.packageIncrement = 0;
            this._setAllItemsPackedState();
            this.messages.hide().update();
        },

        sendCreateLabelRequest: function () {
            var self = this;

            if (!this.validate()) {
                this.messages.show().update(this.validationErrorMsg);

                return;
            }
            this.messages.hide().update();

            if (this.createLabelUrl) {
                var weight, length, width, height = null;
                var packagesParams = [];

                this.packagesContent.childElements().each(function (pack) {
                    var packageId = this.getPackageId(pack);

                    weight = parseFloat(pack.select('input[name="container_weight"]')[0].value);
                    length = parseFloat(pack.select('input[name="container_length"]')[0].value);
                    width = parseFloat(pack.select('input[name="container_width"]')[0].value);
                    height = parseFloat(pack.select('input[name="container_height"]')[0].value);
                    packagesParams[packageId] = {
                        container:                  pack.select('select[name="package_container"]')[0].value,
                        customs_value:              parseFloat(pack.select('input[name="package_customs_value"]')[0].value, 10),
                        weight:                     isNaN(weight) ? '' : weight,
                        length:                     isNaN(length) ? '' : length,
                        width:                      isNaN(width) ? '' : width,
                        height:                     isNaN(height) ? '' : height,
                        weight_units:               pack.select('select[name="container_weight_units"]')[0].value,
                        dimension_units:            pack.select('select[name="container_dimension_units"]')[0].value
                    };

                    if (isNaN(packagesParams[packageId]['customs_value'])) {
                        packagesParams[packageId]['customs_value'] = 0;
                    }

                    if ('undefined' != typeof pack.select('select[name="package_size"]')[0]) {
                        if ('' != pack.select('select[name="package_size"]')[0].value) {
                            packagesParams[packageId]['size'] = pack.select('select[name="package_size"]')[0].value;
                        }
                    }

                    if ('undefined' != typeof pack.select('input[name="container_girth"]')[0]) {
                        if ('' != pack.select('input[name="container_girth"]')[0].value) {
                            packagesParams[packageId]['girth'] = pack.select('input[name="container_girth"]')[0].value;
                            packagesParams[packageId]['girth_dimension_units'] = pack.select('select[name="container_girth_dimension_units"]')[0].value;
                        }
                    }

                    if ('undefined' != typeof pack.select('select[name="content_type"]')[0] && 'undefined' != typeof pack.select('input[name="content_type_other"]')[0]) {
                        packagesParams[packageId]['content_type'] = pack.select('select[name="content_type"]')[0].value;
                        packagesParams[packageId]['content_type_other'] = pack.select('input[name="content_type_other"]')[0].value;
                    } else {
                        packagesParams[packageId]['content_type'] = '';
                        packagesParams[packageId]['content_type_other'] = '';
                    }
                    var deliveryConfirmation = pack.select('select[name="delivery_confirmation_types"]');

                    if (deliveryConfirmation.length) {
                        packagesParams[packageId]['delivery_confirmation'] =  deliveryConfirmation[0].value;
                    }
                }.bind(this));

                for (var packageId in this.packages) {
                    if (!isNaN(packageId)) {
                        this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[container]']              = packagesParams[packageId]['container'];
                        this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[weight]']                 = packagesParams[packageId]['weight'];
                        this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[customs_value]']          = packagesParams[packageId]['customs_value'];
                        this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[length]']                 = packagesParams[packageId]['length'];
                        this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[width]']                  = packagesParams[packageId]['width'];
                        this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[height]']                 = packagesParams[packageId]['height'];
                        this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[weight_units]']           = packagesParams[packageId]['weight_units'];
                        this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[dimension_units]']        = packagesParams[packageId]['dimension_units'];
                        this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[content_type]']           = packagesParams[packageId]['content_type'];
                        this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[content_type_other]']     = packagesParams[packageId]['content_type_other'];

                        if ('undefined' != typeof packagesParams[packageId]['size']) {
                            this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[size]'] = packagesParams[packageId]['size'];
                        }

                        if ('undefined' != typeof packagesParams[packageId]['girth']) {
                            this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[girth]'] = packagesParams[packageId]['girth'];
                            this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[girth_dimension_units]'] = packagesParams[packageId]['girth_dimension_units'];
                        }

                        if ('undefined' != typeof packagesParams[packageId]['delivery_confirmation']) {
                            this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[params]' + '[delivery_confirmation]']  = packagesParams[packageId]['delivery_confirmation'];
                        }

                        for (var packedItemId in this.packages[packageId]['items']) {
                            if (!isNaN(packedItemId)) {
                                this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[items]' + '[' + packedItemId + '][qty]']           = this.packages[packageId]['items'][packedItemId]['qty'];
                                this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[items]' + '[' + packedItemId + '][customs_value]'] = this.packages[packageId]['items'][packedItemId]['customs_value'];
                                this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[items]' + '[' + packedItemId + '][price]']         = self.defaultItemsPrice[packedItemId];
                                this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[items]' + '[' + packedItemId + '][name]']          = self.defaultItemsName[packedItemId];
                                this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[items]' + '[' + packedItemId + '][weight]']        = self.defaultItemsWeight[packedItemId];
                                this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[items]' + '[' + packedItemId + '][product_id]']    = self.defaultItemsProductId[packedItemId];
                                this.paramsCreateLabelRequest['packages[' + packageId + ']' + '[items]' + '[' + packedItemId + '][order_item_id]'] = self.defaultItemsOrderItemId[packedItemId];
                            }
                        }
                    }
                }

                new Ajax.Request(this.createLabelUrl, {
                    parameters: this.paramsCreateLabelRequest,
                    onSuccess: function (transport) {
                        var response = transport.responseText;

                        if (response.isJSON()) {
                            response = response.evalJSON();

                            if (response.error) {
                                this.messages.show().innerHTML = response.message;
                            } else if (response.ok && Object.isFunction(this.labelCreatedCallback)) {
                                this.labelCreatedCallback(response);
                            }
                        }
                    }.bind(this)
                });

                if (this.paramsCreateLabelRequest['code'] &&
                    this.paramsCreateLabelRequest['carrier_title'] &&
                    this.paramsCreateLabelRequest['method_title'] &&
                    this.paramsCreateLabelRequest['price']
                ) {
                    var a = this.paramsCreateLabelRequest['code'];
                    var b = this.paramsCreateLabelRequest['carrier_title'];
                    var c = this.paramsCreateLabelRequest['method_title'];
                    var d = this.paramsCreateLabelRequest['price'];

                    this.paramsCreateLabelRequest = {};
                    this.paramsCreateLabelRequest['code']           = a;
                    this.paramsCreateLabelRequest['carrier_title']  = b;
                    this.paramsCreateLabelRequest['method_title']   = c;
                    this.paramsCreateLabelRequest['price']          = d;
                } else {
                    this.paramsCreateLabelRequest = {};
                }
            }
        },

        validate: function () {
            var dimensionElements = $('packaging_window').select(
                'input[name=container_length],input[name=container_width],input[name=container_height],input[name=container_girth]:not("._disabled")'
            );
            var callback = null;

            if (dimensionElements.any(function (element) {
                return !!element.value;
            })) {
                callback = function (element) {
                    $(element).addClassName('required-entry');
                };
            } else {
                callback = function (element) {
                    $(element).removeClassName('required-entry');
                };
            }
            dimensionElements.each(callback);

            const allowedPackageTypes = ["N","D"];

            if (Object.values(this.customizableContainers).some(packageType => allowedPackageTypes.includes(packageType))) {
                dimensionElements.each(function(element) {
                    $(element).addClassName('required-entry');
                });
            }

            return result = $$('[id^="package_block_"]      input').collect(function (element) {
                return this.validateElement(element);
            }, this).all();
        },

        validateElement: function (elm) {
            var cn = $w(elm.className);

            return result = cn.all(function (value) {
                var v = Validation.get(value);

                if (Validation.isVisible(elm) && !v.test($F(elm), elm)) {
                    $(elm).addClassName('validation-failed');

                    return false;
                }
                $(elm).removeClassName('validation-failed');

                return true;

            });
        },

        validateCustomsValue: function () {
            var items = [];
            var isValid = true;
            var itemsPrepare = [];
            var itemsPacked = [];

            this.packagesContent.childElements().each(function (pack) {
                itemsPrepare = pack.select('[data-role="package-items"]')[0];

                if (itemsPrepare) {
                    items = items.concat(itemsPrepare.select('.grid tbody tr'));
                }
                itemsPacked = pack.select('.package_items')[0];

                if (itemsPacked) {
                    items = items.concat(itemsPacked.select('.grid tbody tr'));
                }
            });

            items.each(function (item) {
                var itemCustomsValue = item.select('[name="customs_value"]')[0];

                if (!this.validateElement(itemCustomsValue)) {
                    isValid = false;
                }
            }.bind(this));

            if (isValid) {
                this.messages.hide().update();
            } else {
                this.messages.show().update(this.validationErrorMsg);
            }

            return isValid;
        },

        newPackage: function () {
            var pack = this.template.cloneNode(true);

            pack.id = 'package_block_' + ++this.packageIncrement;
            pack.addClassName('package-block');
            pack.select('[data-role=package-number]')[0].update(this.packageIncrement);
            this.packagesContent.insert({
                top: pack
            });
            pack.select('[data-action=package-save-items]')[0].hide();
            pack.show();
        },

        deletePackage: function (obj) {
            var pack = $(obj).up('[id^="package_block"]');

            var packItems = pack.select('.package_items')[0];
            var packageId = this.getPackageId(pack);

            delete this.packages[packageId];
            pack.remove();
            this.messages.hide().update();
            this._setAllItemsPackedState();
        },

        deleteItem: function (obj) {
            var item = $(obj).up('tr');
            var itemId = item.select('[type="checkbox"]')[0].value;
            var pack = $(obj).up('[id^="package_block"]');
            var packItems = pack.select('.package_items')[0];
            var packageId = this.getPackageId(pack);

            delete this.packages[packageId]['items'][itemId];

            if (item.offsetParent.rows.length <= 2) { /* head + this last row */
                $(packItems).hide();
            }
            item.remove();
            this.messages.hide().update();
            this._recalcContainerWeightAndCustomsValue(packItems);
            this._setAllItemsPackedState();
        },

        recalcContainerWeightAndCustomsValue: function (obj) {
            var pack = $(obj).up('[id^="package_block"]');
            var packItems = pack.select('.package_items')[0];

            if (packItems) {
                if (!this.validateCustomsValue()) {
                    return;
                }
                this._recalcContainerWeightAndCustomsValue(packItems);
            }
        },

        getItemsForPack: function (obj) {
            if (this.itemsGridUrl) {
                var parameters = $H({
                    'shipment_id': this.shipmentId
                });
                var packageBlock = $(obj).up('[id^="package_block"]');
                var packagePrapare = packageBlock.select('[data-role=package-items]')[0];
                var packagePrapareGrid = packagePrapare.select('.grid_prepare')[0];

                new Ajax.Request(this.itemsGridUrl, {
                    parameters: parameters,
                    onSuccess: function (transport) {
                        var response = transport.responseText;

                        if (response) {
                            packagePrapareGrid.update(response);
                            this.processPackagePrepare(packagePrapareGrid);

                            if (packagePrapareGrid.select('.grid tbody tr').length) {
                                packageBlock.select('[data-action=package-add-items]')[0].hide();
                                packageBlock.select('[data-action=package-save-items]')[0].show();
                                packagePrapare.show();
                            } else {
                                packagePrapareGrid.update();
                            }
                        }
                    }.bind(this)
                });
            }
        },

        getPackedItemsQty: function () {
            var items = [];

            for (var packageId in this.packages) {
                if (!isNaN(packageId)) {
                    for (var packedItemId in this.packages[packageId]['items']) {
                        if (!isNaN(packedItemId)) {
                            if (items[packedItemId]) {
                                items[packedItemId] += this.packages[packageId]['items'][packedItemId]['qty'];
                            } else {
                                items[packedItemId] = this.packages[packageId]['items'][packedItemId]['qty'];
                            }
                        }
                    }
                }
            }

            return items;
        },

        _parseQty: function (obj) {
            var qty = $(obj).hasClassName('qty-decimal') ? parseFloat(obj.value) : parseInt(obj.value);

            if (isNaN(qty) || qty <= 0) {
                qty = 1;
            }

            return qty;
        },

        packItems: function (obj) {
            var anySelected = false;
            var packageBlock = $(obj).up('[id^="package_block"]');
            var packageId = this.getPackageId(packageBlock);
            var packagePrepare = packageBlock.select('[data-role=package-items]')[0];
            var packagePrepareGrid = packagePrepare.select('.grid_prepare')[0];

            // check for exceeds the total shipped quantity
            var checkExceedsQty = false;

            this.messages.hide().update();
            packagePrepareGrid.select('.grid tbody tr').each(function (item) {
                var checkbox = item.select('[type="checkbox"]')[0];
                var itemId = checkbox.value;
                var qtyValue  = this._parseQty(item.select('[name="qty"]')[0]);

                item.select('[name="qty"]')[0].value = qtyValue;

                if (checkbox.checked && this._checkExceedsQty(itemId, qtyValue)) {
                    this.messages.show().update(this.errorQtyOverLimit);
                    checkExceedsQty = true;
                }
            }.bind(this));

            if (checkExceedsQty) {
                return;
            }

            if (!this.validateCustomsValue()) {
                return;
            }

            // prepare items for packing
            packagePrepareGrid.select('.grid tbody tr').each(function (item) {
                var checkbox = item.select('[type="checkbox"]')[0];

                if (checkbox.checked) {
                    var qty  = item.select('[name="qty"]')[0];
                    var qtyValue  = this._parseQty(qty);

                    item.select('[name="qty"]')[0].value = qtyValue;
                    anySelected = true;
                    qty.disabled = 'disabled';
                    checkbox.disabled = 'disabled';
                    packagePrepareGrid.select('.grid th [type="checkbox"]')[0].up('th label').hide();
                    item.select('[data-action=package-delete-item]')[0].show();
                } else {
                    item.remove();
                }
            }.bind(this));

            // packing items
            if (anySelected) {
                var packItems = packageBlock.select('.package_items')[0];

                if (!packItems) {
                    packagePrepare.insert(new Element('div').addClassName('grid_prepare'));
                    packagePrepare.insert({
                        after: packagePrepareGrid
                    });
                    packItems = packagePrepareGrid.removeClassName('grid_prepare').addClassName('package_items');
                    packItems.select('.grid tbody tr').each(function (item) {
                        var itemId = item.select('[type="checkbox"]')[0].value;
                        var qtyValue  = parseFloat(item.select('[name="qty"]')[0].value);

                        qtyValue = qtyValue <= 0 ? 1 : qtyValue;

                        if ('undefined' == typeof this.packages[packageId]) {
                            this.packages[packageId] = {
                                'items': [], 'params': {}
                            };
                        }

                        if ('undefined' == typeof this.packages[packageId]['items'][itemId]) {
                            this.packages[packageId]['items'][itemId] = {};
                            this.packages[packageId]['items'][itemId]['qty'] = qtyValue;
                        } else {
                            this.packages[packageId]['items'][itemId]['qty'] += qtyValue;
                        }
                    }.bind(this));
                } else {
                    packagePrepareGrid.select('.grid tbody tr').each(function (item) {
                        var itemId = item.select('[type="checkbox"]')[0].value;
                        var qtyValue  = parseFloat(item.select('[name="qty"]')[0].value);

                        qtyValue = qtyValue <= 0 ? 1 : qtyValue;

                        if ('undefined' == typeof this.packages[packageId]['items'][itemId]) {
                            this.packages[packageId]['items'][itemId] = {};
                            this.packages[packageId]['items'][itemId]['qty'] = qtyValue;
                            packItems.select('.grid tbody')[0].insert(item);
                        } else {
                            this.packages[packageId]['items'][itemId]['qty'] += qtyValue;
                            var packItem = packItems.select('[type="checkbox"][value="' + itemId + '"]')[0].up('tr').select('[name="qty"]')[0];

                            packItem.value = this.packages[packageId]['items'][itemId]['qty'];
                        }
                    }.bind(this));
                    packagePrepareGrid.update();
                }
                $(packItems).show();
                this._recalcContainerWeightAndCustomsValue(packItems);
            } else {
                packagePrepareGrid.update();
            }

            // show/hide disable/enable
            packagePrepare.hide();
            packageBlock.select('[data-action=package-save-items]')[0].hide();
            packageBlock.select('[data-action=package-add-items]')[0].show();
            this._setAllItemsPackedState();
        },

        validateItemQty: function (itemId, qty) {
            return this.defaultItemsQty[itemId] < qty ? this.defaultItemsQty[itemId] : qty;
        },

        changeMeasures: function (obj) {
            var incr = 0;
            var incrSelected = 0;

            obj.childElements().each(function (option) {
                if (option.selected) {
                    incrSelected = incr;
                }
                incr++;
            });

            var packageBlock = $(obj).up('[id^="package_block"]');

            packageBlock.select('.measures').each(function (item) {
                if (item.name != obj.name) {
                    var incr = 0;

                    item.select('option').each(function (option) {
                        if (incr == incrSelected) {
                            item.value = option.value;
                            //option.selected = true
                        }
                        incr++;
                    });
                }
            });

        },

        checkSizeAndGirthParameter: function (obj, enabled) {
            if (enabled == 0) {
                return;
            }
            var currentNode = obj;

            while (currentNode.nodeName != 'TBODY') {
                currentNode = currentNode.parentNode;
            }

            if (!currentNode) {
                return;
            }

            var packageSize = currentNode.select('select[name=package_size]');
            var packageContainer = currentNode.select('select[name=package_container]');
            var packageGirth = currentNode.select('input[name=container_girth]');
            var packageGirthDimensionUnits = currentNode.select('select[name=container_girth_dimension_units]');

            if (packageSize.length <= 0) {
                return;
            }

            var girthEnabled = packageContainer[0].value == 'NONRECTANGULAR' || packageContainer[0].value == 'VARIABLE';

            if (!girthEnabled) {
                packageGirth[0].value = '';
                packageGirth[0].disable();
                packageGirth[0].addClassName('_disabled');
                packageGirthDimensionUnits[0].disable();
                packageGirthDimensionUnits[0].addClassName('_disabled');
            } else {
                packageGirth[0].enable();
                packageGirth[0].removeClassName('_disabled');
                packageGirthDimensionUnits[0].enable();
                packageGirthDimensionUnits[0].removeClassName('_disabled');
            }

            var sizeEnabled = packageContainer[0].value == 'NONRECTANGULAR' || packageContainer[0].value == 'RECTANGULAR' ||
                packageContainer[0].value == 'VARIABLE';

            if (!sizeEnabled) {
                option = document.createElement('OPTION');
                option.value = '';
                option.text = '';
                packageSize[0].options.add(option);
                packageSize[0].value = '';
                packageSize[0].disable();
                packageSize[0].addClassName('_disabled');
            } else {
                for (i = 0; i < packageSize[0].length; i++) {
                    if (packageSize[0].options[i].value == '') {
                        packageSize[0].removeChild(packageSize[0].options[i]);
                    }
                }
                packageSize[0].enable();
                packageSize[0].removeClassName('_disabled');
            }
        },

        changeContainerType: function (obj) {
            if (this.customizableContainers.length <= 0) {
                return;
            }

            var disable = true;

            for (var i in this.customizableContainers) {
                if (this.customizableContainers[i] == obj.value) {
                    disable = false;
                    break;
                }
            }

            var currentNode = obj;

            while (currentNode.nodeName != 'TBODY') {
                currentNode = currentNode.parentNode;
            }

            if (!currentNode) {
                return;
            }

            $(currentNode).select(
                'input[name=container_length],input[name=container_width],input[name=container_height],select[name=container_dimension_units]'
            ).each(function (inputElement) {
                if (disable) {
                    Form.Element.disable(inputElement);
                    inputElement.addClassName('_disabled');

                    if (inputElement.nodeName == 'INPUT') {
                        $(inputElement).value = '';
                    }
                } else {
                    Form.Element.enable(inputElement);
                    inputElement.removeClassName('_disabled');
                }
            });
        },

        changeContentTypes: function (obj) {
            var packageBlock = $(obj).up('[id^="package_block"]');
            var contentType = packageBlock.select('[name=content_type]')[0];
            var contentTypeOther = packageBlock.select('[name=content_type_other]')[0];

            if (contentType.value == 'OTHER') {
                Form.Element.enable(contentTypeOther);
                contentTypeOther.removeClassName('_disabled');
            } else {
                Form.Element.disable(contentTypeOther);
                contentTypeOther.addClassName('_disabled');
            }

        },

        //******************** Private functions **********************************//
        _getItemsCount: function (items) {
            var count = 0;

            items.each(function (itemCount) {
                if (!isNaN(itemCount)) {
                    count += parseFloat(itemCount);
                }
            });

            return count;
        },

        /**
         * Show/hide disable/enable buttons in case of all items packed state
         */
        _setAllItemsPackedState: function () {
            var addPackageBtn = $$('[data-action=add-packages]')[0];
            var savePackagesBtn = $$('[data-action=save-packages]')[0];

            if (this._getItemsCount(this.itemsAll) > 0 &&
                    this._checkExceedsQtyFinal(this._getItemsCount(this.getPackedItemsQty()), this._getItemsCount(this.itemsAll))
            ) {
                this.packagesContent.select('[data-action=package-add-items]').each(function (button) {
                    button.disabled = 'disabled';
                    button.addClassName('_disabled');
                });
                addPackageBtn.addClassName('_disabled');
                Form.Element.disable(addPackageBtn);
                savePackagesBtn.removeClassName('_disabled');
                Form.Element.enable(savePackagesBtn);
                savePackagesBtn.title = '';

                // package number recalculation
                var packagesRecalc = [];

                this.packagesContent.childElements().each(function (pack) {
                    if (!pack.select('.package_items .grid tbody tr').length) {
                        pack.remove();
                    }
                });
                var packagesCount = this.packagesContent.childElements().length;

                this.packageIncrement = packagesCount;
                this.packagesContent.childElements().each(function (pack) {
                    var packageId = this.getPackageId(pack);

                    pack.id = 'package_block_' + packagesCount;
                    pack.select('[data-role=package-number]')[0].update(packagesCount);
                    packagesRecalc[packagesCount] = this.packages[packageId];
                    --packagesCount;
                }.bind(this));
                this.packages = packagesRecalc;

            } else {
                this.packagesContent.select('[data-action=package-add-items]').each(function (button) {
                    button.removeClassName('_disabled');
                    Form.Element.enable(button);
                });
                addPackageBtn.removeClassName('_disabled');
                Form.Element.enable(addPackageBtn);
                savePackagesBtn.addClassName('_disabled');
                Form.Element.disable(savePackagesBtn);
                savePackagesBtn.title = this.titleDisabledSaveBtn;
            }
        },

        processPackagePrepare: function (packagePrepare) {
            var itemsAll = [],
                qty,
                itemId,
                qtyValue = 0,
                value = 1;

            packagePrepare.select('.grid tbody tr').each(function (item) {
                qty = item.select('[name="qty"]')[0],
                    itemId = item.select('[type="checkbox"]')[0].value,
                    qtyValue = parseFloat(qty.value);

                if (Object.isFunction(this.itemQtyCallback)) {
                    value = this.itemQtyCallback(itemId);

                    if (typeof value !== 'undefined') {
                        qtyValue = parseFloat(value);
                        qtyValue = this.validateItemQty(itemId, qtyValue);
                        qty.value = qtyValue;
                    }
                } else {
                    value = item.select('[name="qty"]')[0].value;
                    qtyValue = typeof value == 'string' && value.length == 0 ? 0 : parseFloat(value);

                    if (isNaN(qtyValue) || qtyValue < 0) {
                        qtyValue = 1;
                    }
                }

                if (qtyValue == 0) {
                    item.remove();

                    return;
                }
                var packedItems = this.getPackedItemsQty();

                itemsAll[itemId] = qtyValue;

                for (var packedItemId in packedItems) {
                    if (!isNaN(packedItemId)) {
                        var packedQty = packedItems[packedItemId];

                        if (itemId == packedItemId) {
                            if (qtyValue == packedQty || qtyValue <= packedQty) {
                                item.remove();
                            } else if (qtyValue > packedQty) {
                                /* fix float number precision */
                                qty.value = Number(Number(Math.round(qtyValue - packedQty + 'e+4') + 'e-4').toFixed(4));
                            }
                        }
                    }
                }
            }.bind(this));

            if (!this.itemsAll.length) {
                this.itemsAll = itemsAll;
            }

            packagePrepare.select('tbody input[type="checkbox"]').each(function (item) {
                $(item).observe('change', this._observeQty);
                this._observeQty.call(item);
            }.bind(this));
        },

        _observeQty: function () {
            /** this = input[type="checkbox"] */
            var tr  = jQuery(this).closest('tr')[0],
                qty = $(tr.cells[tr.cells.length - 1]).select('input[name="qty"]')[0];

            if (qty.disabled = !this.checked) {
                $(qty).addClassName('_disabled');
            } else {
                $(qty).removeClassName('_disabled');
            }
        },

        _checkExceedsQty: function (itemId, qty) {
            var packedItemQty = this.getPackedItemsQty()[itemId] ? this.getPackedItemsQty()[itemId] : 0;
            var allItemQty = this.itemsAll[itemId];

            return qty * (1 - this.eps) > allItemQty *  (1 + this.eps)  - packedItemQty * (1 - this.eps);
        },

        _checkExceedsQtyFinal: function (checkOne, defQty) {
            return checkOne * (1 + this.eps) >= defQty * (1 - this.eps);
        },

        _recalcContainerWeightAndCustomsValue: function (container) {
            var packageBlock = container.up('[id^="package_block"]');
            var packageId = this.getPackageId(packageBlock);
            var containerWeight = packageBlock.select('[name="container_weight"]')[0];
            var containerCustomsValue = packageBlock.select('[name="package_customs_value"]')[0];

            containerWeight.value = 0;
            containerCustomsValue.value = 0;
            container.select('.grid tbody tr').each(function (item) {
                var itemId = item.select('[type="checkbox"]')[0].value;
                var qtyValue  = parseFloat(item.select('[name="qty"]')[0].value);

                if (isNaN(qtyValue) || qtyValue <= 0) {
                    qtyValue = 1;
                    item.select('[name="qty"]')[0].value = qtyValue;
                }
                var itemWeight = parseFloat(this._getElementText(item.select('[data-role=item-weight]')[0]));

                containerWeight.value = parseFloat(containerWeight.value) + itemWeight * qtyValue;
                var itemCustomsValue = parseFloat(item.select('[name="customs_value"]')[0].value) || 0;

                containerCustomsValue.value = parseFloat(containerCustomsValue.value) + itemCustomsValue * qtyValue;
                this.packages[packageId]['items'][itemId]['customs_value'] = itemCustomsValue;
            }.bind(this));
            containerWeight.value = parseFloat(parseFloat(Math.round(containerWeight.value + 'e+4') + 'e-4').toFixed(4));
            containerCustomsValue.value = parseFloat(Math.round(containerCustomsValue.value + 'e+2') + 'e-2').toFixed(2);

            if (containerCustomsValue.value == 0) {
                containerCustomsValue.value = '';
            }
        },

        _getElementText: function (el) {
            if ('string' == typeof el.textContent) {
                return el.textContent;
            }

            if ('string' == typeof el.innerText) {
                return el.innerText;
            }

            return el.innerHTML.replace(/<[^>]*>/g, '');
        }
        //******************** End Private functions ******************************//
    };

});

Spamworldpro Mini