Your IP : 3.145.115.25
/**
* Class BX.Sale.Admin.OrderBasket
*/
BX.Sale.Admin.ShipmentBasket = function (params)
{
this.products = params.products;
BX.Sale.Admin.OrderBasketEdit.apply(this, arguments);
if (Object.keys(this.products).length == 0)
{
var tbl = BX(this.tableId);
tbl.appendChild(this.createEmptyFooter());
}
};
BX.Sale.Admin.ShipmentBasket.prototype = Object.create(BX.Sale.Admin.OrderBasketEdit.prototype);
BX.Sale.Admin.ShipmentBasket.prototype.getProductBasketCode = function(product)
{
return product.BASKET_ID;
};
BX.Sale.Admin.ShipmentBasket.prototype.createEmptyFooter = function()
{
var message = BX.message('SALE_ORDER_SHIPMENT_VIEW_BASKET_NO_PRODUCTS');
var count = Object.keys(this.visibleColumns).length + 1;
var tBody = BX.create('tbody', {
props : {
id : this.idPrefix+'_empty_footer'
}
});
var tr = BX.create('tr');
var td = BX.create('td', {
text : message
});
td.style.textAlign = 'center';
td.style.fontSize = '1.4em';
td.colSpan = count;
tr.appendChild(td);
tBody.appendChild(tr);
return tBody;
};
BX.Sale.Admin.ShipmentBasket.prototype.createProductRow = function(basketCode, product)
{
var cellContent,
updaters = {},
_this = this,
tBody = BX.create(
'tbody',
{
props:
{
"id": this.createProductRowId(basketCode, product)
},
"style" :
{
'textAlign' : "left",
'borderBottom' : "1px solid #DDD"
}
}
),
tr = BX.create('tr',
{
style : {
'vertical-align': 'top'
}
}
);
if(product.IS_SET_ITEM != "Y")
{
tBody.setAttribute("data-basket-code", basketCode);
if(product.IS_SET_PARENT == 'Y' && product.OLD_PARENT_ID)
tBody.setAttribute("data-old-parent-id-parent", product.OLD_PARENT_ID);
}
else
{
BX.addClass(tBody, "bundle-child-"+product.OLD_PARENT_ID);
BX.addClass(tBody, "basket-bundle-child-hidden");
BX.addClass(tBody, "bundle-child");
}
tr.setAttribute('data-index', 1);
for(var fieldId in this.visibleColumns)
{
if (!this.visibleColumns.hasOwnProperty(fieldId))
continue;
cellContent = this.createProductCell(basketCode, product, fieldId, 1);
if(cellContent)
tr.appendChild(cellContent);
}
tBody.appendChild(tr);
return tBody;
};
BX.Sale.Admin.ShipmentBasket.prototype.createSkuPropsTable = BX.Sale.Admin.OrderBasket.prototype.createSkuPropsTable;
BX.Sale.Admin.ShipmentBasket.prototype.createProductCell = function(basketCode, product, fieldId, index)
{
var result = null,
cellNodes = [],
_this = this,
fieldValue = product[fieldId],
tdClass = "",
i = null,
storeId = 0,
span = null;
switch(fieldId)
{
case "NUMBER":
cellNodes.push(
BX.create(
'span',
{
props: {
id: this.idPrefix + "sale_order_product_" + basketCode + "_number"
},
text: this.index
}
)
);
break;
case "NAME":
var name;
if (product.IS_SET_PARENT == "Y" && product.SET_ITEMS)
{
var bundleShow = BX.create('a', {
props: {
href: "javascript:void(0);",
className: "dashed-link show-set-link"
},
html: BX.message("SALE_ORDER_BASKET_EXPAND")
});
BX.bind(bundleShow, "click", function (e)
{
var source = e.target || e.srcElement;
_this.onToggleBundleChildren(product.OLD_PARENT_ID, source);
});
cellNodes.push(
BX.create('div', {
children: [bundleShow]
})
);
}
if (product.EDIT_PAGE_URL)
name = BX.create('a', {props: {href: product.EDIT_PAGE_URL, target: "_blank"}, text: fieldValue});
else
name = BX.create('span', {text: fieldValue});
cellNodes.push(name);
break;
case "QUANTITY" :
if (!!product.MEASURE_TEXT)
cellNodes.push(document.createTextNode(" "+product.MEASURE_TEXT+" "));
cellNodes.push(BX.create('span',{
props:{},
text: product.QUANTITY
}));
cellNodes.push(BX.create('input', {
props : {
id: basketCode+'_quantity',
type : 'hidden',
value: product.QUANTITY
}
}));
break;
case "AVAILABLE":
cellNodes.push(BX.create('span', {text:fieldValue}));
break;
case "PRICE":
cellNodes.push(
BX.create('span', {
text: " "+BX.Sale.Admin.OrderEditPage.currencyLang+" "
})
);
var inputP = BX.create('input', {
props:{
type: "text",
name: this.getFieldName(basketCode, "PRICE"),
value: product.PRICE
}
});
inputP.style.width = "40px";
cellNodes.push(inputP);
break;
case "SUM":
cellNodes.push(
BX.create('strong', {
props:{
id: this.idPrefix+"sale_order_edit_product_"+basketCode+"_summ"
},
text: BX.Sale.Admin.OrderEditPage.currencyFormat(product.PRICE*product.QUANTITY)
})
);
break;
case "IMAGE":
cellNodes.push(this.createFieldImage(basketCode, product, fieldId));
tdClass = "adm-s-order-table-ddi-table-img";
break;
case "STORE":
if (!!product.BARCODE_INFO && Object.keys(product.BARCODE_INFO).length > 0)
{
for (storeId in product.BARCODE_INFO)
{
if (!product.BARCODE_INFO.hasOwnProperty(storeId))
continue;
for (i in product.STORES)
{
if (!product.STORES.hasOwnProperty(i))
continue;
if (storeId == product.STORES[i].STORE_ID)
{
cellNodes.push(BX.create('br'));
cellNodes.push(BX.create('span', {text : product.STORES[i].STORE_NAME}));
break;
}
}
}
}
else
{
cellNodes.push(BX.create('span'));
}
cellNodes.push(BX.create('span'));
break;
case "AMOUNT":
if (!!product.MEASURE_TEXT)
{
cellNodes.push(
BX.create('span',
{
text: product.AMOUNT + " " + product.MEASURE_TEXT + " "
}
)
);
}
else
{
cellNodes.push(BX.create('span', {'text' : product.AMOUNT}));
}
break;
case "CUR_AMOUNT":
if (!!product.BARCODE_INFO && Object.keys(product.BARCODE_INFO).length > 0)
{
for (storeId in product.BARCODE_INFO)
{
if (!product.BARCODE_INFO.hasOwnProperty(storeId))
continue;
var quantity = 0;
for (i in product.BARCODE_INFO[storeId])
{
if (product.BARCODE_INFO[storeId].hasOwnProperty(i))
quantity += parseFloat(product.BARCODE_INFO[storeId][i].QUANTITY);
}
var measureText = (!!product.MEASURE_TEXT) ? product.MEASURE_TEXT : '';
cellNodes.push(BX.create('br'));
cellNodes.push(
BX.create('span', {
text : quantity+' '+measureText
})
);
}
}
else
{
cellNodes.push(BX.create('span'));
}
break;
case "REMAINING_QUANTITY":
if (!!product.MEASURE_TEXT)
{
cellNodes.push(
BX.create('span',
{
text: " " + product.MEASURE_TEXT + " "
}
)
);
}
span = BX.create('span', {
props: {
id: basketCode + '_store_remaining_quantity_' + index,
className : basketCode + '_store_remaining_quantity'
},
'text': (product.STORES.length > 0 && product.STORES[0].hasOwnProperty('AMOUNT')) ? product.STORES[0].AMOUNT : '0'
});
cellNodes.push(span);
break;
case "BARCODE":
if (!!product.BARCODE_INFO && Object.keys(product.BARCODE_INFO).length > 0)
{
for (i in product.BARCODE_INFO)
{
if (!product.BARCODE_INFO.hasOwnProperty(i))
continue;
if (product.BARCODE_MULTI == 'Y')
{
span = BX.create('span', {
text : BX.message('SALE_ORDER_SHIPMENT_BASKET_BARCODE'),
style : {
'cursor': 'pointer',
'border-bottom' : '1px dashed'
}
});
var barcodeWrapper = BX.create('div');
var clearMsg = true;
for (var j in product.BARCODE_INFO[i])
{
if (!product.BARCODE_INFO[i].hasOwnProperty(j))
continue;
if (product.BARCODE_INFO[i][j].BARCODE == '')
continue;
clearMsg = false;
var div = BX.create('div',
{
props: {
className: 'barcode_record'
}
});
div.style.marginTop = '5px';
div.style.marginLeft = '16px';
div.appendChild(
BX.create('span', {
props: {
class: 'barcode'
},
text: BX.util.htmlspecialchars(product.BARCODE_INFO[i][j].BARCODE)
})
);
barcodeWrapper.appendChild(div);
}
if (clearMsg)
barcodeWrapper = BX.create('div', {text : BX.message('SALE_ORDER_SHIPMENT_BASKET_BARCODE_EMPTY')});
var showBarcodeDialog = function (barcodeWrapper, span)
{
BX.bind(span, 'click', BX.proxy(function ()
{
var barcodeDialog = new BX.CDialog({
'content': barcodeWrapper,
'title': BX.message('SALE_ORDER_SHIPMENT_BASKET_BARCODE'),
'width': 180,
'height': 220,
'resizable': false,
'buttons': [
new BX.CWindowButton({
'title': BX.message('SALE_ORDER_SHIPMENT_BASKET_BARCODE_CLOSE'),
'action': function ()
{
BX.WindowManager.Get().Close();
},
className: 'btnCloseBarcodeDialog'
})
]
});
barcodeDialog.Show();
}, this));
};
showBarcodeDialog(barcodeWrapper, span);
cellNodes.push(BX.create('br'));
cellNodes.push(span);
}
else
{
cellNodes.push(BX.create('span',
{
html : BX.util.htmlspecialchars(product.BARCODE_INFO[i][0].BARCODE) + "<br>"
}));
}
}
}
else
{
cellNodes.push(BX.create('span'));
}
break;
case "PROPS":
var node = this.createFieldSkuProps(basketCode, product, fieldId);
if(node)
cellNodes.push(node);
else
cellNodes.push(BX.create('span'));
break;
}
if(fieldId.indexOf("PROPERTY_") === 0)
{
var html;
if(product.PRODUCT_PROPS_VALUES && product.PRODUCT_PROPS_VALUES[fieldId+"_VALUE"])
html = product.PRODUCT_PROPS_VALUES[fieldId+"_VALUE"];
else
html = "";
cellNodes.push(BX.create('span', {html: html}));
}
if(cellNodes.length > 0)
{
result = BX.create('td');
BX.addClass(result, fieldId);
switch (fieldId)
{
case 'IMAGE' :
result.style.textAlign = 'center';
break;
case 'NUMBER' :
result.style.textAlign = 'center';
result.style.width = '30px';
break;
case 'NAME' :
result.style.textAlign = 'left';
break;
case 'QUANTITY' :
case 'REMAINING_QUANTITY' :
case 'CUR_AMOUNT' :
case 'AMOUNT' :
result.style.textAlign = 'right';
break;
case 'BARCODE' :
case 'STORE' :
result.style.paddingLeft = '20px';
}
if (tdClass)
BX.addClass(result, tdClass);
while(cellNodes.length > 0)
{
var el = cellNodes.pop();
if (!!el)
result.appendChild(el);
}
}
return result;
};
BX.Sale.Admin.ShipmentBasket.prototype.createFieldImage = function(basketCode, product, fieldId)
{
var pictureNode, resultNode;
if(product.PICTURE_URL)
{
pictureNode = BX.create('img',{
props:{src: product.PICTURE_URL}
});
}
else
{
pictureNode = BX.create('div',{
props:{
className: "no_foto"
},
text: BX.message("SALE_ORDER_BASKET_NO_PICTURE")
});
}
resultNode = BX.create('span',{
children: [pictureNode]
});
return resultNode;
};
/**
* Class BX.Sale.Admin.ShipmentBasketEdit
*/
BX.Sale.Admin.ShipmentBasketEdit = function(params)
{
this.link = params.link; // for connection between shipment basket and system basket
this.shipment = null;
this.products = params.products;
this.isShipped = !!params.isShipped;
this.useStoreControl = params.useStoreControl || false;
BX.Sale.Admin.OrderBasketEdit.apply(this, arguments);
this.index = 0;
this.basket = null;
this.productsOrder = params.productsOrder;
this.updateShipmentTimer = null;
this.removeEmptyFooter(this.idPrefix);
if (Object.keys(this.products).length == 0)
{
var tbl = BX(this.tableId);
tbl.appendChild(this.createEmptyFooter());
}
this.initGroupActions();
};
BX.Sale.Admin.ShipmentBasketEdit.prototype = Object.create(BX.Sale.Admin.OrderBasketEdit.prototype);
BX.Sale.Admin.ShipmentBasketEdit.prototype.createProductCell = function(basketCode, product, fieldId, index)
{
var result = null,
cellNodes = [],
_this = this,
fieldValue = product[fieldId],
tdClass = "",
stack = [],
i = null,
showStoreInfo = this.useStoreControl && !!product.STORES && product.STORES.length > 0;
switch(fieldId)
{
case "NUMBER":
if ((product.IS_SET_PARENT == 'Y' && product.SET_ITEMS > 0)
||
(product.IS_SET_PARENT && product.IS_SET_ITEM == 'N')
||
(!product.MODULE))
{
cellNodes.push(
BX.create(
'span',
{
props: {
id: this.idPrefix + "sale_order_product_" + basketCode + "_number"
},
text: this.index
}
)
);
}
else
{
cellNodes.push(BX.create('span'));
}
break;
case "NAME":
var name;
if (product.IS_SET_PARENT == "Y" && product.SET_ITEMS)
{
var bundleShow = BX.create('a', {
props: {
href: "javascript:void(0);",
className: "dashed-link show-set-link"
},
html: BX.message("SALE_ORDER_BASKET_EXPAND")
});
BX.bind(bundleShow, "click", function (e)
{
var source = e.target || e.srcElement;
_this.onToggleBundleChildren(product.OLD_PARENT_ID, source);
});
cellNodes.push(
BX.create('div', {
children: [bundleShow]
})
);
}
if (product.EDIT_PAGE_URL)
name = BX.create('a', {props: {href: product.EDIT_PAGE_URL, target: "_blank"}, text: fieldValue});
else
name = BX.create('span', {text: fieldValue});
cellNodes.push(name);
break;
case "QUANTITY":
if (!!product.MEASURE_TEXT)
cellNodes.push(document.createTextNode(" " + product.MEASURE_TEXT + " "));
cellNodes.push(BX.create('span', {
props: {},
text: product.QUANTITY
}));
cellNodes.push(BX.create('input', {
props: {
id: basketCode + '_quantity',
name: this.getFieldName(basketCode, 'QUANTITY'),
type: 'hidden',
value: product.QUANTITY
}
}));
break;
case "AVAILABLE":
cellNodes.push(BX.create('span', {text: fieldValue}));
break;
case "IMAGE":
cellNodes.push(this.createFieldImage(basketCode, product, fieldId));
tdClass = "adm-s-order-table-ddi-table-img";
break;
case "AMOUNT":
cellNodes = this.createFieldAmount(cellNodes, product);
break;
case "STORE":
if (product.IS_SET_PARENT != 'Y' && showStoreInfo)
{
stack = [this.createBlockStore(basketCode, product, index)];
if (!!product.BARCODE_INFO && Object.keys(product.BARCODE_INFO).length > 0)
stack = this.recoveryDeliveryStore(product, stack[0]);
if (this.isShipped)
{
for (i in stack)
{
if (!stack.hasOwnProperty(i))
continue;
var obStore = BX.findChild(stack[i], {tag: 'select'}, true);
obStore.parentNode.appendChild(
BX.create('input', {
props : {
type: 'hidden',
name : obStore.getAttribute('name'),
value : obStore.options[obStore.selectedIndex].value
}
})
);
}
}
if (product.STORES)
{
var spanAddStore = BX.create('span', {
props: {
className: 'adm-bus-shipment-basket-store-add'
},
text: BX.message('SALE_ORDER_SHIPMENT_BASKET_ADD_NEW_STORE')
});
var countStores = product.STORES.length;
if (countStores < 2 || stack.length == countStores)
BX.hide(spanAddStore);
BX.bind(spanAddStore, "click", BX.proxy(function ()
{
if (this.isShipped)
{
BX.Sale.Admin.OrderEditPage.showDialog(BX.message('SALE_ORDER_SHIPMENT_BASKET_ERROR_ALREADY_SHIPPED'));
return;
}
var tr = BX.findParent(spanAddStore, {tag: 'tr'}, true);
var storeBlock = BX.findChildByClassName(tr, 'STORE');
var children = BX.findChildren(storeBlock, {tag: 'div'});
var index = children.length + 1;
for (var i in children)
{
if (!children.hasOwnProperty(i))
continue;
var chIndex = children[i].getAttribute('data-index');
if (chIndex == index)
index++;
}
var newStore = this.createBlockStore(this.getProductBasketCode(product), product, index);
storeBlock.insertBefore(newStore, spanAddStore);
var curAmountBlock = BX.findChildByClassName(tr, 'CUR_AMOUNT');
var newCurAmount = this.createBlockCurAmount(this.getProductBasketCode(product), product, index);
curAmountBlock.appendChild(newCurAmount);
var remainingQuantity = BX.findChildByClassName(tr, 'REMAINING_QUANTITY');
var newRemainingQuantity = this.createBlockRemainingQuantity(this.getProductBasketCode(product), product, index);
remainingQuantity.appendChild(newRemainingQuantity);
var barcode = BX.findChildByClassName(tr, 'BARCODE');
var newBarcode = this.createBlockBarcode(this.getProductBasketCode(product), product, index);
barcode.appendChild(newBarcode);
if (product['STORES'].length < index + 1)
BX.hide(spanAddStore);
}, this));
stack.push(spanAddStore);
}
for (i in stack)
{
if (stack.hasOwnProperty(i))
cellNodes.unshift(stack[i]);
}
}
else
{
cellNodes.push(BX.create('span'));
}
break;
case "CUR_AMOUNT":
if (product.IS_SET_PARENT != 'Y' && showStoreInfo)
{
stack = [this.createBlockCurAmount(basketCode, product, index)];
if (!!product.BARCODE_INFO && Object.keys(product.BARCODE_INFO).length > 0)
stack = this.recoveryDeliveryCurAmount(product, stack[0]);
for (i in stack)
{
if (stack.hasOwnProperty(i))
cellNodes.unshift(stack[i]);
}
}
else
{
cellNodes.push(BX.create('span'));
}
break;
case "REMAINING_QUANTITY":
if (product.IS_SET_PARENT != 'Y' && product.MODULE && showStoreInfo)
{
stack = [this.createBlockRemainingQuantity(basketCode, product, index)];
if (!!product.BARCODE_INFO && Object.keys(product.BARCODE_INFO).length > 0)
stack = this.recoveryRemainingQuantity(product, stack[0]);
for (i in stack)
{
if (stack.hasOwnProperty(i))
cellNodes.unshift(stack[i]);
}
}
else
{
cellNodes.push(BX.create('span'));
}
break;
case "BARCODE":
if (product.IS_SET_PARENT != 'Y' && showStoreInfo)
{
stack = [this.createBlockBarcode(basketCode, product, index)];
if (!!product.BARCODE_INFO && Object.keys(product.BARCODE_INFO).length > 0)
stack = this.recoveryBarcode(product, stack[0]);
for (i in stack)
{
if (stack.hasOwnProperty(i))
cellNodes.unshift(stack[i]);
}
}
else
{
cellNodes.push(BX.create('span'));
}
break;
case "PROPS":
var node = this.createFieldSkuProps(basketCode, product, fieldId);
if(node)
cellNodes.push(node);
else
cellNodes.push(BX.create('span'));
break;
}
if(fieldId.indexOf("PROPERTY_") === 0)
{
if(product.PRODUCT_PROPS_VALUES && product.PRODUCT_PROPS_VALUES[fieldId+"_VALUE"])
cellNodes.push(BX.create('span', {html:product.PRODUCT_PROPS_VALUES[fieldId+"_VALUE"]}));
}
if(cellNodes.length > 0)
{
result = BX.create('td');
BX.addClass(result, fieldId);
switch (fieldId)
{
case "NUMBER" :
result.style.width = '45px';
result.style.textAlign = 'center';
break;
case 'NAME' :
case 'STORE' :
result.style.textAlign = 'left';
break;
case 'QUANTITY' :
case 'REMAINING_QUANTITY' :
case 'AMOUNT' :
case 'CUR_AMOUNT' :
result.style.textAlign = 'right';
break;
case 'IMAGE' :
case 'BARCODE' :
result.style.textAlign = 'center';
break;
}
if (tdClass)
BX.addClass(result, tdClass);
while(cellNodes.length > 0)
{
var el = cellNodes.pop();
if (!!el)
result.appendChild(el);
}
}
return result;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createFieldAmount = function(container, product)
{
var basketCode = this.getProductBasketCode(product);
if (!!product.MEASURE_TEXT)
{
container.push(
BX.create('span',
{
text: " " + product.MEASURE_TEXT + " "
}
)
);
}
var input = BX.create('input',
{
props: {
type: "text",
name: this.getFieldName(basketCode, "AMOUNT"),
value: product.AMOUNT,
id: basketCode + '_amount',
autocomplete : 'off'
},
attrs : {
readOnly : this.isShipped
},
style: {
'width': '25px'
}
});
BX.bind(input, 'keydown', function(e){
if(!e) e = window.event;
if(!e) return;
if(e.keyCode == 13) input.blur();
});
if (product.IS_SET_ITEM == 'Y')
input.readOnly = true;
BX.bind(input, 'change', BX.proxy(function ()
{
if (product.IS_SET_PARENT == 'Y')
{
var setItems = product.SET_ITEMS;
for (var i in setItems)
{
if (!setItems.hasOwnProperty(i))
continue;
var setItemBasketCode = this.getProductBasketCode(setItems[i]);
var obAmount = BX(setItemBasketCode+'_'+'amount');
obAmount.value = product.BASE_ELEMENTS_QUANTITY[setItems[i].OFFER_ID]*input.value;
}
}
var tr = BX.findParent(input, {tag: 'tr'}, true);
var curAmount = BX.findChildrenByClassName(tr, this.getProductBasketCode(product)+'_cur_amount', true);
if (!!product.STORES && product.STORES.length == 1)
curAmount[0].value = input.value;
this.updateShipment();
}, this));
container.push(input);
return container;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.recoveryDeliveryStore = function(product, element)
{
var stack = [element];
var index = 1;
for (var storeId in product.BARCODE_INFO)
{
if (!product.BARCODE_INFO.hasOwnProperty(storeId))
continue;
var stackElement = stack[stack.length-1];
var obStore = BX.findChild(stackElement, {tag: 'select'}, true);
if (obStore)
{
for (var k in obStore.options)
{
if (!obStore.options.hasOwnProperty(k))
continue;
var option = obStore.options[k];
if (option.value == storeId)
{
obStore.options[k].selected = true;
break;
}
}
if (Object.keys(product.BARCODE_INFO).length > index)
{
var el = this.createBlockStore(this.getProductBasketCode(product), product, ++index);
stack.push(el);
}
}
}
return stack;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.recoveryDeliveryCurAmount = function(product, element)
{
var stack = [element];
var index = 1;
var basketCode = this.getProductBasketCode(product);
for (var storeId in product.BARCODE_INFO)
{
if (!product.BARCODE_INFO.hasOwnProperty(storeId))
continue;
var stackElement = stack[stack.length-1];
var barcodeInfo = product['BARCODE_INFO'][storeId];
for (var i in barcodeInfo)
{
if (!barcodeInfo.hasOwnProperty(i))
continue;
var obAmount = BX.findChildByClassName(stackElement, basketCode + '_cur_amount', true);
if (product.BARCODE_MULTI == 'N')
{
obAmount.value = barcodeInfo[i].QUANTITY;
}
else
{
if (i == 0)
obAmount.value = 0;
obAmount.value = parseFloat(obAmount.value) + parseFloat(barcodeInfo[i].QUANTITY);
}
}
if (Object.keys(product.BARCODE_INFO).length > index)
{
var el = this.createBlockCurAmount(this.getProductBasketCode(product), product, ++index);
stack.push(el);
}
}
return stack;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.recoveryRemainingQuantity = function(product, element)
{
var stack = [element];
var index = 1;
var basketCode = this.getProductBasketCode(product);
for (var storeId in product.BARCODE_INFO)
{
if (!product.BARCODE_INFO.hasOwnProperty(storeId))
continue;
var stackElement = stack[stack.length-1];
var obRemainingQuantity = BX.findChildByClassName(stackElement, basketCode + '_store_remaining_quantity');
for (var i in product['STORES'])
{
if (!product['STORES'].hasOwnProperty(i))
continue;
if (product['STORES'][i].STORE_ID == storeId)
{
obRemainingQuantity.innerHTML = product['STORES'][i].AMOUNT;
break;
}
}
if (Object.keys(product.BARCODE_INFO).length > index)
stack.push(this.createBlockRemainingQuantity(this.getProductBasketCode(product), product, ++index));
}
return stack;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.recoveryBarcode = function(product, element)
{
var stack = [element];
var index = 1;
var basketCode = this.getProductBasketCode(product);
for (var storeId in product['BARCODE_INFO'])
{
if (!product['BARCODE_INFO'].hasOwnProperty(storeId))
continue;
var stackElement = stack[stack.length - 1];
var barcodeInfo = product['BARCODE_INFO'][storeId];
var hidBlock = BX.findChildByClassName(stackElement, 'hidden_barcode_block_'+index);
if (hidBlock)
BX.remove(hidBlock);
if (product.BARCODE_MULTI == 'Y')
{
hidBlock = BX.create('div', {
props: {
className: 'hidden_barcode_block_' + index
},
style: {
'display': 'none'
}
}
);
}
for (var i in barcodeInfo)
{
if (!barcodeInfo.hasOwnProperty(i))
continue;
if (product.BARCODE_MULTI == 'N')
{
var obBarcodeValue = BX.findChildByClassName(stackElement, basketCode + '_barcode_value');
obBarcodeValue.value = (!!barcodeInfo[i].BARCODE) ? barcodeInfo[i].BARCODE : '';
var obBarcodeId = BX.findChildByClassName(stackElement, basketCode + '_barcode_id');
obBarcodeId.value = (!!barcodeInfo[i].ID) ? barcodeInfo[i].ID : 0;
}
else
{
var barcodeFieldValue = BX.create('input',
{
props: {
type: "hidden",
name: this.getFieldName(basketCode, "BARCODE_INFO")+'[' + index + '][BARCODE][' + i + '][VALUE]',
className: basketCode + '_barcode_value',
value: (!!barcodeInfo[i].BARCODE) ? barcodeInfo[i].BARCODE : ''
}
}
);
var barcodeFieldId = BX.create('input',
{
props: {
type: "hidden",
name: this.getFieldName(basketCode, "BARCODE_INFO")+'[' + index + '][BARCODE][' + i + '][ID]',
className: basketCode + '_barcode_id',
value: (!!barcodeInfo[i].ID) ? barcodeInfo[i].ID : 0
}
}
);
hidBlock.appendChild(barcodeFieldId);
hidBlock.appendChild(barcodeFieldValue);
}
}
if (product.BARCODE_MULTI == 'Y')
stackElement.appendChild(hidBlock);
if (Object.keys(product.BARCODE_INFO).length > index)
stack.push(this.createBlockBarcode(this.getProductBasketCode(product), product, ++index));
}
return stack;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createEmptyFooter = function()
{
var message = BX.message('SALE_ORDER_SHIPMENT_BASKET_NO_PRODUCTS');
var count = Object.keys(this.visibleColumns).length + 2; // 2 - columns checkbox, menu
var tBody = BX.create('tbody', {
props : {
id : this.idPrefix+'_empty_footer'
},
children : [
BX.create('tr',
{
children : [
BX.create('td', {
text : message,
attrs : {
'colspan' : count
},
style : {
'text-align' : 'center',
'font-size' : '1.4em'
}
})
]
})
]
});
return tBody;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.moveToSystemBasket = function (basketCode)
{
if (this.isShipped)
{
BX.Sale.Admin.OrderEditPage.showDialog(BX.message('SALE_ORDER_SHIPMENT_BASKET_ERROR_ALREADY_SHIPPED'));
return;
}
var productRowParent = null;
this.link.products[basketCode] = this.products[basketCode];
delete this.products[basketCode];
var productRaw = BX(this.idPrefix+"sale-order-basket-product-"+basketCode);
if(productRaw)
{
productRowParent = productRaw.parentNode;
if (productRowParent)
productRowParent.removeChild(productRaw);
}
//set
var oldParentId = productRaw.getAttribute('data-old-parent-id-parent');
if(oldParentId)
{
var bundleChildren = BX.findChildrenByClassName(productRowParent, "bundle-child-"+oldParentId, false);
for(var i in bundleChildren)
{
if (!bundleChildren.hasOwnProperty(i))
continue;
bundleChildren[i].parentNode.removeChild(bundleChildren[i]);
}
}
this.removeEmptyFooter(this.idPrefix);
if (Object.keys(this.products).length == 0)
{
var tbl = BX(this.tableId);
tbl.appendChild(this.createEmptyFooter());
}
this.setRowNumbers();
this.updateCountBasketItems();
this.updateShipment();
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.updateShipment = function()
{
var _this = this;
if (this.updateShipmentTimer)
clearTimeout(this.updateShipmentTimer);
this.updateShipmentTimer = setTimeout(BX.proxy(function(){_this.shipment.updateDeliveryInfo();}, this), 2000);
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.removeEmptyFooter = function (prefix)
{
var empty_footer = BX(prefix+'_empty_footer');
if (empty_footer)
BX.remove(empty_footer);
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.productSet = function(product, isReplaceExisting)
{
var table = BX(this.tableId);
var basketCode = this.getProductBasketCode(product);
table.appendChild(this.productAdd(product));
if(product.IS_SET_ITEM != "Y")
this.setProductsCount(++this.productsCount);
//sets
if(product.SET_ITEMS && product.SET_ITEMS.length)
for(var i = product.SET_ITEMS.length-1; i>=0; i--)
this.productSet(product.SET_ITEMS[i], true);
this.setRowNumbers();
this.updateCountBasketItems();
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.productAdd = function(product)
{
var basketCode = this.getProductBasketCode(product);
var productRow = BX(this.createProductRowId(basketCode, product));
if (productRow)
BX.remove(productRow);
return this.createProductRow(basketCode, product);
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createDivWrapper = function(product, columnCode, index)
{
var className = this.getDivWrapperClassName(product, columnCode, index);
var divWrapper = BX.create('div',
{
props : {
'className' : className
},
style : {
'height': '29px'
}
});
divWrapper.setAttribute('data-index', index);
if (index > 1)
divWrapper.style.marginTop = '5px';
return divWrapper;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.getDivWrapperClassName = function(product, columnCode, index)
{
var basketCode = this.getProductBasketCode(product);
var className = columnCode+'-'+basketCode+'-'+index;
if (product.OLD_PARENT_ID)
className += '-'+product.OLD_PARENT_ID;
return className;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createBlockStore = function(basketCode, product, index)
{
if (!!product.STORES && product.STORES.length > 0)
{
var divWrapper = this.createDivWrapper(product, 'store', index);
BX.addClass(divWrapper, 'barcode_record');
var selectStore = BX.create('select', {
props: {
name: this.getFieldName(basketCode, "BARCODE_INFO")+'[' + index + '][STORE_ID]',
className: 'store_select, ' + basketCode + '_select_store_' + index
},
attrs : {
disabled : this.isShipped
},
style : {
'width' : '175px'
}
});
for (var i in product.STORES)
{
if (!product.STORES.hasOwnProperty(i))
continue;
var option = BX.create('option', {
'props': {
'value': product.STORES[i].STORE_ID
},
'text': product.STORES[i].STORE_NAME
});
selectStore.appendChild(option);
}
BX.bind(selectStore, 'change', BX.proxy(function ()
{
var storeId = selectStore.options[selectStore.selectedIndex].value;
var currStoreQuantity = BX(basketCode + '_store_remaining_quantity_' + index);
for (var i in product.STORES)
{
if (!product.STORES.hasOwnProperty(i))
continue;
if (product.STORES[i].STORE_ID == storeId)
currStoreQuantity.innerHTML = product.STORES[i].AMOUNT;
}
}, this));
divWrapper.appendChild(selectStore);
if (Object.keys(product.STORES).length > 1)
{
var delDiv = BX.create('div', {
props: {
className: 'btdel'
}
});
BX.bind(delDiv, 'click', BX.proxy(function ()
{
var block = BX.findParent(delDiv, {tag: 'div'});
var index = block.getAttribute('data-index');
var tr = BX.findParent(delDiv, {tag: 'tr'}, true);
var selectCount = BX.findChildrenByClassName(tr, 'barcode_record', true);
if (selectCount.length <= 1)
return;
if (product['STORES'].length < index + 1)
{
var tr_add_store = BX.findChildByClassName(tr, 'adm-bus-shipment-basket-store-add');
tr_add_store.style.display = 'inline';
}
var deletedEssences = ['store', 'remaining_quantity', 'cur_amount', 'barcode'];
for (var i in deletedEssences)
{
if (!deletedEssences.hasOwnProperty(i))
continue;
var essence = BX.findChildByClassName(tr, this.getDivWrapperClassName(product, deletedEssences[i], index), true);
if (essence)
BX.remove(essence);
}
var sum = 0;
var curAmount = BX.findChildrenByClassName(tr, this.getProductBasketCode(product) + '_cur_amount', true);
for (i in curAmount)
{
if (curAmount.hasOwnProperty(i))
sum += parseFloat(curAmount[i].value);
}
var input = BX(this.getProductBasketCode(product) + '_amount');
if (sum > parseFloat(input.value))
{
for (i in curAmount)
{
if (curAmount.hasOwnProperty(i))
BX.addClass(curAmount[i], 'adm-bus-shipment-basket-error');
}
}
else
{
for (i in curAmount)
{
if (curAmount.hasOwnProperty(i) && BX.hasClass(curAmount[i], 'adm-bus-shipment-basket-error'))
BX.removeClass(curAmount[i], 'adm-bus-shipment-basket-error');
}
}
}, this));
divWrapper.appendChild(delDiv);
}
return divWrapper;
}
else
{
return BX.create('span');
}
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createBlockRemainingQuantity = function(basketCode, product, index)
{
var divWrapper = this.createDivWrapper(product, 'remaining_quantity', index);
var measureText = null;
if (!!product.MEASURE_TEXT)
{
measureText = BX.create('span',
{
text: " " + product.MEASURE_TEXT + " "
}
);
}
var span = BX.create('span', {
props: {
id: basketCode + '_store_remaining_quantity_' + index,
className : basketCode + '_store_remaining_quantity'
},
'text': (!!product.STORES && product.STORES.length > 0 && product.STORES[0].hasOwnProperty('AMOUNT')) ? product.STORES[0].AMOUNT : '0'
});
divWrapper.appendChild(span);
if (measureText)
divWrapper.appendChild(measureText);
return divWrapper;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createBlockCurAmount = function(basketCode, product, index)
{
if (!product.MODULE)
return BX.create('span');
var divWrapper = this.createDivWrapper(product, 'cur_amount', index);
var measureText = null;
if (!!product.MEASURE_TEXT)
measureText = BX.create('span', {text: " "+product.MEASURE_TEXT+" "});
var obAmount = BX(basketCode+'_amount');
if (!!obAmount)
{
var parent = BX.findParent(obAmount, {tag: 'tr'}, true);
var children = BX.findChildrenByClassName(parent, basketCode + '_cur_amount', true);
var amount = parseFloat(obAmount.value);
var sum = 0;
for (var i in children)
{
if (children.hasOwnProperty(i))
sum += parseFloat(children[i].value);
}
var quantity = (sum >= amount) ? 0 : amount - sum;
}
else
{
quantity = product.AMOUNT;
}
var input = BX.create('input',
{
props: {
type: "text",
name: this.getFieldName(basketCode, "BARCODE_INFO")+'[' + index + '][QUANTITY]',
value: quantity,
className: basketCode + '_cur_amount',
id: basketCode + '_cur_amount_' + index,
autocomplete : 'off'
},
attrs : {
readOnly : this.isShipped
},
style : {
'width' : '25px'
}
});
BX.bind(input, 'keydown', function(e){
if(!e) e = window.event;
if(!e) return;
if(e.keyCode == 13) input.blur();
});
BX.bind(input, 'change', BX.proxy(function ()
{
var tr = BX.findParent(input, {tag: 'tr'}, true);
var children = BX.findChildrenByClassName(tr, basketCode + '_cur_amount', true);
var obAmount = BX(basketCode + '_amount');
if (!!product.STORES && product.STORES.length == 1 && product.IS_SET_ITEM != 'Y')
obAmount.value = children[0].value;
}, this));
divWrapper.appendChild(input);
if (measureText)
divWrapper.appendChild(measureText);
return divWrapper;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createBlockBarcode = function(basketCode, product, index)
{
if (!!product.IS_SET_PARENT && product.IS_SET_PARENT != 'Y' && !!product.MODULE)
{
var divWrapper = this.createDivWrapper(product, 'barcode', index);
if (product.BARCODE_MULTI == 'N')
{
var barcodeFieldValue = BX.create('input',
{
props: {
type: "text",
name: this.getFieldName(basketCode, "BARCODE_INFO")+'[' + index + '][BARCODE][1][VALUE]',
className: basketCode + '_barcode_value',
value: ''
},
attrs : {
readOnly : this.isShipped
}
});
BX.bind(barcodeFieldValue, 'keydown', function(e){
if(!e) e = window.event;
if(!e) return;
if(e.keyCode == 13) barcodeFieldValue.blur();
});
var barcodeFieldId = BX.create('input',
{
props: {
type: "hidden",
name: this.getFieldName(basketCode, "BARCODE_INFO")+'[' + index + '][BARCODE][1][ID]',
className: basketCode + '_barcode_id',
value: 0
},
attrs : {
readOnly : this.isShipped
}
});
BX.bind(barcodeFieldValue, 'change', BX.proxy(function()
{
var barcode = barcodeFieldValue.value;
if (barcode.length == 0)
{
barcodeFieldValue.style.borderColor = '';
return;
}
var tr = BX.findParent(barcodeFieldValue, {'tag' : 'tr'}, true);
var wrapperStore = BX.findChildByClassName(tr, this.getDivWrapperClassName(product, 'store', index), true);
var store = wrapperStore.firstChild;
var storeId = (product.BARCODE_MULTI == 'Y') ? store.value : 0;
var request = {
'action': 'checkProductBarcode',
'basketId': product.BASKET_ID,
'storeId': storeId,
'orderId': BX('order_id').value,
'barcode': barcodeFieldValue.value,
'callback': function (result)
{
barcodeFieldValue.style.borderColor = (result.ERROR && result.ERROR.length > 0) ? '#f00' : '#0f0';
}
};
BX.Sale.Admin.OrderAjaxer.sendRequest(request, true, false);
}, this));
divWrapper.appendChild(barcodeFieldValue);
divWrapper.appendChild(barcodeFieldId);
}
else
{
var barcodeButton = BX.create('input',
{
props: {
type: 'button',
value: BX.message('SALE_ORDER_SHIPMENT_BASKET_BARCODE')
}
}
);
divWrapper.appendChild(barcodeButton);
var barcodeDialogWrapper = BX.create('div', {
props: {
'id': 'block_barcode_' + basketCode + '_' + index
}
});
BX.bind(barcodeButton, 'click', BX.proxy(function ()
{
var childrenBarcodeWrapper = BX.findChildren(barcodeDialogWrapper, {tag: 'div'});
for (var i in childrenBarcodeWrapper)
BX.remove(childrenBarcodeWrapper[i]);
var obCountBarcodeFields = BX(basketCode + '_cur_amount_' + index);
var countBarcodeFields = obCountBarcodeFields.value;
var countInputs = 0;
var tr = BX.findParent(barcodeButton, {'tag' : 'tr'}, true);
var hidBarcodeBlock = BX.findChildByClassName(tr, 'hidden_barcode_block_'+index, true);
if (hidBarcodeBlock)
{
var inputId = BX.findChildrenByClassName(hidBarcodeBlock, basketCode+'_barcode_id');
countInputs = inputId.length;
}
if (countBarcodeFields > countInputs)
countInputs = countBarcodeFields;
var parent = BX.findParent(barcodeButton, {tag: 'td'});
parent = BX.findChildByClassName(parent, 'hidden_barcode_block_' + index);
var childrenId = BX.findChildrenByClassName(parent, basketCode + '_barcode_id');
var childrenValue = BX.findChildrenByClassName(parent, basketCode + '_barcode_value');
var iterator = 1;
if (countInputs == 0)
countInputs = 1;
while (iterator <= countInputs)
{
var div = BX.create('div', {
props: {
className: 'barcode_record'
}
});
div.style.marginTop = '5px';
div.style.marginLeft = '36px';
var barcodeFieldValue = BX.create('input',
{
props: {
type: "text",
name: this.getFieldName(basketCode, "BARCODE_INFO")+'[' + index + '][BARCODE][' + iterator + '][VALUE]',
className: basketCode + '_barcode_value',
value: (childrenValue && childrenValue[iterator - 1]) ? childrenValue[iterator - 1].value : ''
},
attrs : {
readOnly : this.isShipped
}
}
);
BX.bind(barcodeFieldValue, 'keydown', function(e){
if(!e) e = window.event;
if(!e) return;
if(e.keyCode == 13)
{
var sibling = this.parentElement.nextElementSibling;
if(sibling)
{
var el = BX.findChildByClassName(sibling, basketCode + '_barcode_value');
el.focus();
}
}
});
if (childrenValue && childrenValue[iterator - 1])
barcodeFieldValue.style.borderColor = childrenValue[iterator - 1].style.borderColor;
var checkBarcodeValue = function (barcodeFieldValue, _this)
{
BX.bind(barcodeFieldValue, 'change', function ()
{
var barcode = barcodeFieldValue.value;
if (barcode.length == 0)
{
barcodeFieldValue.style.borderColor = '';
return;
}
var barcodeValues = BX.findChildrenByClassName(barcodeDialogWrapper, basketCode+'_barcode_value', true);
var k = 0;
for (var i in barcodeValues)
{
if (barcodeValues.hasOwnProperty(i) && barcodeValues[i].value == barcode)
k++;
}
if (k >= 2)
{
barcodeFieldValue.style.borderColor = '#f00';
BX.Sale.Admin.OrderEditPage.showDialog(BX.message('SALE_ORDER_SHIPMENT_BASKET_BARCODE_ALREADY_USED'));
return;
}
var tr = BX.findParent(barcodeButton, {'tag': 'tr'}, true);
var wrapperStore = BX.findChildByClassName(tr, _this.getDivWrapperClassName(product, 'store', index), true);
var store = wrapperStore.firstChild;
var request = {
'action': 'checkProductBarcode',
'basketId': product.BASKET_ID,
'storeId': BX(store).value,
'orderId': BX('order_id').value,
'barcode': barcodeFieldValue.value,
'callback': function (result)
{
if (result.ERROR && result.ERROR.length > 0)
barcodeFieldValue.style.borderColor = '#f00';
else
barcodeFieldValue.style.borderColor = '#0f0';
}
};
BX.Sale.Admin.OrderAjaxer.sendRequest(request, true, false);
});
BX.bind(barcodeFieldValue, 'keydown', function(e){
if(!e) e = window.event;
if(!e) return;
if(e.keyCode == 13) barcodeFieldValue.blur();
});
};
checkBarcodeValue(barcodeFieldValue, this);
var barcodeFieldId = BX.create('input',
{
props: {
type: "hidden",
name: this.getFieldName(basketCode, "BARCODE_INFO")+'[' + index + '][BARCODE][' + iterator + '][ID]',
className: basketCode + '_barcode_id',
value: (childrenId && childrenId[iterator - 1]) ? childrenId[iterator - 1].value : 0
},
style : {
'width' : '135px'
}
}
);
var span = BX.create('span', {
props: {
class: 'barcode'
}
});
var btDel = BX.create('div', {
props: {
className: 'btdel'
}
});
var delBarcode = function (btDel, div)
{
BX.bind(btDel, 'click', function ()
{
var countBarcodeId = BX.findChildrenByClassName(barcodeDialogWrapper, basketCode+'_barcode_id', true);
if (parseInt(countBarcodeFields) < countBarcodeId.length)
{
BX.remove(div);
}
else
{
var input = BX.findChildren(div, {'tag': input}, true);
input[0].value = ''; // 0 - VALUE
input[1].value = ''; // 1 - ID (hidden)
}
});
};
delBarcode(btDel, div);
div.appendChild(span);
div.appendChild(barcodeFieldValue);
div.appendChild(barcodeFieldId);
div.appendChild(btDel);
barcodeDialogWrapper.appendChild(div);
iterator++;
}
var btnClose =
this.barcodeDialog = new BX.CDialog({
'content': barcodeDialogWrapper,
'title': BX.message('SALE_ORDER_SHIPMENT_BASKET_BARCODE_ENTER'),
'width': 280,
'height': 250,
'resizable': false,
'buttons': [
new BX.CWindowButton({
'title': BX.message('SALE_ORDER_SHIPMENT_BASKET_BARCODE_CLOSE'),
'action': BX.proxy(function ()
{
var blockBarcode = BX('block_barcode_' + basketCode + '_' + index);
var inputs = BX.findChildren(blockBarcode, {tag: 'input'}, true);
var hiddenContainer = BX.create('div', {
props: {
className: 'hidden_barcode_block_' + index
}
});
hiddenContainer.style.display = 'none';
for (var i in inputs)
{
if (inputs.hasOwnProperty(i))
{
var clone = inputs[i].cloneNode(false);
hiddenContainer.appendChild(clone);
}
}
var parentDiv = BX.findParent(barcodeButton, {tag : 'div'});
var hiddenBarcodeList = BX.findChildByClassName(parentDiv, 'hidden_barcode_block_' + index);
if (hiddenBarcodeList)
hiddenBarcodeList.remove();
parentDiv.appendChild(hiddenContainer);
BX.WindowManager.Get().Close();
}, this),
className: 'btnCloseBarcodeDialog'
})
]
});
this.barcodeDialog.Show();
}, this));
}
return divWrapper;
}
else
{
return BX.create('span');
}
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createProductMenuContent = function(basketCode)
{
return [
{
"ICON": "delete",
"TEXT": BX.message("SALE_ORDER_BASKET_PROD_MENU_DELETE"),
"ACTION": this.objName+'.moveToSystemBasket("'+basketCode+'")'
}
];
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createProductRow = function(basketCode, product)
{
var cellContent,
updaters = {},
_this = this,
tBody = BX.create(
'tbody',
{
props:
{
"id": this.createProductRowId(basketCode, product)
},
"style" :
{
"textAlign": "left",
"borderBottom": "1px solid #DDD"
}
}
),
menuCell = this.createMenuCell(basketCode, product),
tr = BX.create('tr',{
style : {
'vertical-align' : 'top'
}
});
if(product.IS_SET_ITEM != "Y")
{
var hiddenFields = this.createHiddenFields(basketCode, product);
tBody.setAttribute("data-basket-code", basketCode);
if(product.IS_SET_PARENT == 'Y' && product.OLD_PARENT_ID)
tBody.setAttribute("data-old-parent-id-parent", product.OLD_PARENT_ID);
}
else
{
BX.addClass(tBody, "bundle-child-"+product.OLD_PARENT_ID);
BX.addClass(tBody, "basket-bundle-child-hidden");
BX.addClass(tBody, "bundle-child");
}
tr.setAttribute('data-index', 1);
if(this.createProductBasement)
menuCell.rowSpan = 2;
tr.appendChild(menuCell);
tr.appendChild(this.createCheckboxField(product));
for(var fieldId in this.visibleColumns)
{
if (!this.visibleColumns.hasOwnProperty(fieldId))
continue;
cellContent = this.createProductCell(basketCode, product, fieldId, 1);
if(cellContent)
tr.appendChild(cellContent);
}
tBody.appendChild(tr);
return tBody;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createCheckbox = function(basketCode, product)
{
var checkbox = BX.create('input', {
props:{
type: 'checkbox',
className : 'checkboxForDelete'
},
style : {
'margin' : '0'
}
});
checkbox.readOnly = this.isShipped;
checkbox.setAttribute('data-basket-code', basketCode);
BX.bind(checkbox, "click", BX.proxy( function(){
var obCount = BX(this.idPrefix+'_selected_count');
if (!obCount)
return;
var count = parseInt(obCount.innerHTML);
var btDel = BX('action_delete_button');
if (!!checkbox.checked)
obCount.innerHTML = ++count;
else
obCount.innerHTML = --count;
if (count <= 0)
BX.addClass(btDel, 'adm-edit-disable');
else
BX.removeClass(btDel, 'adm-edit-disable');
},this));
return checkbox;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createCheckboxField = function(product)
{
var basketCode = this.getProductBasketCode(product);
var td = BX.create('td');
if (
(product.IS_SET_PARENT == 'Y' && product.SET_ITEMS > 0)
|| (product.IS_SET_PARENT && product.IS_SET_ITEM == 'N')
|| (!product.MODULE)
)
{
td.appendChild(this.createCheckbox(basketCode, product));
}
var hiddenRequiredFields = ['MODULE', 'PRODUCT_ID', 'OFFER_ID', 'ORDER_DELIVERY_BASKET_ID', 'BASKET_ID'];
for (var i in hiddenRequiredFields)
{
if (!hiddenRequiredFields.hasOwnProperty(i))
continue;
if (product[hiddenRequiredFields[i]])
{
td.appendChild(BX.create('input', {
props: {
type: 'hidden',
name: this.getFieldName(basketCode, hiddenRequiredFields[i]),
value: product[hiddenRequiredFields[i]]
}
}));
}
}
return td;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createMenuCell = function(basketCode, product)
{
var menuSpan,
menuContent = this.createProductMenuContent(basketCode);
if(menuContent.length <= 0)
return false;
if(product.IS_SET_ITEM != "Y")
{
menuSpan = BX.create('span', {
props:{
className: "adm-s-order-item-title-icon"
}
});
BX.bind(
menuSpan,
"click",
BX.proxy( function(e){
menuSpan.blur();
BX.adminList.ShowMenu(menuSpan, menuContent);
},
this
)
);
}
else
{
menuSpan = BX.create('span', {html: " "});
}
return BX.create(
'td',
{
props:{
className: 'tac',
id: this.idPrefix+"sale-order-basket-product-"+basketCode+"-menu"
},
children:[
menuSpan
]
}
);
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.updateCountBasketItems = function()
{
var productCount = BX(this.idPrefix+'_count');
var table = BX(this.tableId);
var counter = 0;
var basketCode = null;
if (productCount)
{
for(var i=0, l=table.tBodies.length; i<l; i++)
{
if(BX.hasClass(table.tBodies[i], "bundle-child"))
continue;
if (basketCode = table.tBodies[i].getAttribute("data-basket-code"))
counter++;
}
productCount.innerHTML = counter;
}
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.getProductBasketCode = function(product)
{
return product.BASKET_ID;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.groupMoveToSystemBasket = function (_this)
{
var allSelected = BX('action_target');
var i = null;
if (allSelected.checked)
{
if (confirm(BX.message("SALE_ORDER_SHIPMENT_BASKET_ALL_PRODUCTS_DEL")))
{
for (i in this.products)
{
if (this.products.hasOwnProperty(i) && !!this.products[i])
{
var basketCode = this.getProductBasketCode(this.products[i]);
this.moveToSystemBasket(basketCode);
var tBody = BX(this.createProductRowId(basketCode, this.products[i]));
BX.remove(tBody);
}
}
BX.addClass(_this, 'adm-edit-disable');
}
}
else
{
var tableId = BX(this.tableId);
var checkboxes = BX.findChildrenByClassName(tableId, "checkboxForDelete", true);
if (!BX.hasClass(_this, 'adm-edit-disable') && confirm(BX.message("SALE_ORDER_SHIPMENT_BASKET_SELECTED_PRODUCTS_DEL")))
{
var obCount = BX(this.idPrefix + '_selected_count');
for (i in checkboxes)
{
if (checkboxes.hasOwnProperty(i) && !!checkboxes[i].checked)
this.moveToSystemBasket(checkboxes[i].getAttribute("data-basket-code"));
}
BX.html(obCount, '0');
BX.addClass(_this, 'adm-edit-disable');
}
}
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.getFieldName = function(basketCode, type)
{
return "SHIPMENT[1][PRODUCT]["+basketCode+"]["+type+"]";
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.initGroupActions = function ()
{
var action = BX('action_target');
BX.bind(action, 'change', function() {
var btnGroupDel = BX('action_delete_button');
if (!this.checked)
BX.addClass(btnGroupDel, 'adm-edit-disable');
else
BX.removeClass(btnGroupDel, 'adm-edit-disable');
});
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.addRowEmptyBasket = function()
{
var tBody = BX.create('tbody', {
props : {
id : 'row_empty_basket'
}
});
var tdCount = 0;
BX.appendChild(tBody, BX.create('tr'));
for (var i in this.visibleColumns)
{
++tdCount;
BX.append(tr, BX.create('td'))
}
tr.colspan = tdCount;
return tr;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.createFieldImage = function(basketCode, product, fieldId)
{
var pictureNode, resultNode;
if(product.PICTURE_URL)
{
pictureNode = BX.create('img',{
props:{src: product.PICTURE_URL}
});
}
else
{
pictureNode = BX.create('div',{
props:{
className: "no_foto"
},
text: BX.message("SALE_ORDER_BASKET_NO_PICTURE")
});
}
resultNode = BX.create('span',{
children: [pictureNode]
});
return resultNode;
};
BX.Sale.Admin.ShipmentBasketEdit.prototype.checkProductByBarcode = function(_this)
{
if (this.isShipped)
{
BX.Sale.Admin.OrderEditPage.showDialog(BX.message('SALE_ORDER_SHIPMENT_BASKET_ERROR_ALREADY_SHIPPED'));
return;
}
var barcode = _this.previousElementSibling.value;
var request = {
'action': 'getProductIdByBarcode',
'barcode' : barcode,
'callback' : BX.proxy(function (result) {
if (result.ERROR && result.ERROR.length > 0)
{
BX.Sale.Admin.OrderEditPage.showDialog(result.ERROR);
}
else
{
var productId = parseInt(result.RESULT.PRODUCT_ID);
var inBasket = false;
for (var i in this.link.products)
{
if (!this.link.products.hasOwnProperty(i))
continue;
if (this.link.products[i].OFFER_ID == productId)
{
this.products[i] = this.link.products[i];
delete this.link.products[i];
this.productSet(this.products[i], false);
this.removeEmptyFooter(this.idPrefix);
this.updateCountBasketItems();
inBasket = true;
break;
}
}
if (!inBasket)
BX.Sale.Admin.OrderEditPage.showDialog(BX.message('SALE_ORDER_SHIPMENT_BASKET_ERROR_NOT_FOUND'));
}
_this.previousElementSibling.value = '';
}, this)
};
BX.Sale.Admin.OrderAjaxer.sendRequest(request);
};
/**
* Class BX.Sale.Admin.SystemShipmentBasketEdit
*/
BX.Sale.Admin.SystemShipmentBasketEdit = function(params)
{
this.products = params.products;
this.tableId = params.tableId;
this.objName = params.objName;
this.idPrefix = params.idPrefix;
this.productsOrder = params.productsOrder;
this.visibleColumns = params.visibleColumns;
};
BX.Sale.Admin.SystemShipmentBasketEdit.prototype = Object.create(BX.Sale.Admin.ShipmentBasketEdit.prototype);
BX.Sale.Admin.SystemShipmentBasketEdit.prototype.addProductSearch = function()
{
if (this.link.isShipped)
{
BX.Sale.Admin.OrderEditPage.showDialog(BX.message('SALE_ORDER_SHIPMENT_BASKET_ERROR_ALREADY_SHIPPED'));
return;
}
var thead = '<thead><tr><td><span class="adm-s-order-table-title-icon"></span></td><td></td>';
var i = null;
for (i in this.visibleColumns)
{
if (this.visibleColumns.hasOwnProperty(i))
thead += '<td>' + this.visibleColumns[i] + '</td>';
}
thead += '</thead></tr>';
if (BX(this.tableId))
BX.remove(BX(this.tableId));
this.addProductDialog = new BX.CDialog({
'content':'<table id="'+this.tableId+'" class="adm-s-order-table-ddi-table" width="100%">'+thead+'<tbody></tbody></table>',
'title': BX.message['PAYMENT_WINDOW_VOUCHER_TITLE'],
'width': 1100,
'height': 400,
'resizable': false,
'buttons': [
new BX.CWindowButton({
'title' : BX.message('SALE_ORDER_SHIPMENT_BASKET_ADD'),
'action' : BX.proxy(function()
{
this.groupAdd();
}, this),
'className' : 'adm-btn-save'
}),
new BX.CWindowButton({
'title' : BX.message('SALE_ORDER_SHIPMENT_BASKET_CLOSE'),
'action' : function ()
{
BX.WindowManager.Get().Close();
}
})
]
});
if(this.productsOrder && this.productsOrder.length)
for(i = 0, l = this.productsOrder.length-1; i <= l; i++)
if (!!this.products[this.productsOrder[i]])
this.productSet(this.products[this.productsOrder[i]], true);
if (Object.keys(this.products).length == 0)
{
var tbl = BX(this.tableId);
tbl.appendChild(this.createEmptyFooter());
}
this.addProductDialog.Show();
};
BX.Sale.Admin.SystemShipmentBasketEdit.prototype.createProductMenuContent = function(basketCode)
{
return [
{
"ICON": "view",
"TEXT": BX.message("SALE_ORDER_BASKET_PROD_MENU_ADD"),
"ACTION": this.objName+'.moveToBasket("'+basketCode+'")',
"DEFAULT":true
}
];
};
BX.Sale.Admin.SystemShipmentBasketEdit.prototype.createFieldAmount= function (container, product)
{
if (!!product.MEASURE_TEXT)
{
container.push(
BX.create('span',
{
text: " " + product.MEASURE_TEXT + " "
}
)
);
}
container.push(
BX.create('span',
{
text : product.AMOUNT
}
)
);
return container;
};
BX.Sale.Admin.SystemShipmentBasketEdit.prototype.moveToBasket = function (basketCode)
{
var productRowParent = null;
this.link.products[basketCode] = this.products[basketCode];
this.link.productSet(this.products[basketCode], false);
var productRaw = BX(this.createProductRowId(basketCode, this.products[basketCode]));
if(productRaw)
{
productRowParent = productRaw.parentNode;
if (productRowParent)
productRowParent.removeChild(productRaw);
}
// set
var oldParentId = productRaw.getAttribute('data-old-parent-id-parent');
if(oldParentId)
{
var bundleChildren = BX.findChildrenByClassName(productRowParent, "bundle-child-"+oldParentId, false);
for(var i in bundleChildren)
{
if (bundleChildren.hasOwnProperty(i))
bundleChildren[i].parentNode.removeChild(bundleChildren[i]);
}
}
delete this.products[basketCode];
if (Object.keys(this.products).length == 0)
{
var tbl = BX(this.tableId);
tbl.appendChild(this.createEmptyFooter());
}
this.removeEmptyFooter(this.link.idPrefix);
this.link.updateCountBasketItems();
this.link.updateShipment();
};
BX.Sale.Admin.SystemShipmentBasketEdit.prototype.groupAdd = function ()
{
var obTable = BX(this.tableId);
var checkboxes = BX.findChildrenByClassName(obTable, "checkboxForDelete", true);
for (var i in checkboxes)
{
if (checkboxes.hasOwnProperty(i) && !!checkboxes[i].checked)
this.moveToBasket(checkboxes[i].getAttribute("data-basket-code"));
}
};
BX.Sale.Admin.SystemShipmentBasketEdit.prototype.productAdd = function(product)
{
var productRaw = BX.Sale.Admin.ShipmentBasketEdit.prototype.productAdd.apply(this, [product]);
if (product.IS_SET_ITEM != 'Y')
{
BX.bind(productRaw, 'dblclick', BX.proxy(function ()
{
this.moveToBasket(this.getProductBasketCode(product));
}, this));
}
return productRaw;
};