123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902 |
- /**
- * 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();
- }
- 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);
- 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 ******************************//
- };
- });
|