init
This commit is contained in:
641
modules/EcmServices/EcmServices2.js
Normal file
641
modules/EcmServices/EcmServices2.js
Normal file
@@ -0,0 +1,641 @@
|
||||
window.onbeforeunload = function() {
|
||||
removeDocumentReservations(document.getElementById("temp_id").value);
|
||||
alert("Wprowadzone zmiany nie zostały zapisane");
|
||||
}
|
||||
|
||||
function BlockProducts(){
|
||||
var tab = document.getElementById("tbody");
|
||||
var tr = tab.getElementsByTagName("tr");
|
||||
var qty;
|
||||
var total;
|
||||
|
||||
for(var i=0; i < tr.length; i++){
|
||||
var inp=tr[i].getElementsByTagName("input");
|
||||
var img=tr[i].getElementsByTagName("img");
|
||||
var tx=tr[i].getElementsByTagName("textarea");
|
||||
//console.log(inp);
|
||||
if (inp[2].value!='') {
|
||||
inp[1].setAttribute('readonly', 'readonly');
|
||||
inp[1].setAttribute('onkeydown', '');
|
||||
img[2].setAttribute('style', 'display:none');
|
||||
//img[1].setAttribute('style', 'display:none');
|
||||
}
|
||||
//if(inp[8].value==1)deleteEmptyComponents(inp[11].value);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function removeDocumentReservations(temp_id, operation) {
|
||||
url = 'index.php?module=EcmStockOperations&action=deleteDocumentReservations&temp_doc_id='+temp_id+'&to_pdf=1';
|
||||
var req = mint.Request();
|
||||
|
||||
req.OnSuccess = function() {
|
||||
if (operation) {
|
||||
if (operation=='cancel')
|
||||
window.location="index.php?module=EcmStockDocOuts&action=index";
|
||||
|
||||
if (operation=='list')
|
||||
window.location="index.php?module=EcmStockDocOuts&action=index";
|
||||
}
|
||||
}
|
||||
|
||||
req.Send(url);
|
||||
}
|
||||
|
||||
function getProductQuantity2(input,product_id, stock_id,old_qty, row){
|
||||
url="index.php?module=EcmStockStates&action=getProductQuantity&stock_id="+stock_id+"&product_id="+product_id+"&to_pdf=1";
|
||||
var req=mint.Request();
|
||||
req.OnLoading=function()
|
||||
{
|
||||
input.innerHTML="loading";
|
||||
}
|
||||
req.OnSuccess = function()
|
||||
{
|
||||
if (row) {
|
||||
if (parseFloat(this.responseText) != old_qty) {
|
||||
row.className="orangeRow";
|
||||
setTimeout(function() {
|
||||
row.className="selectedRow";
|
||||
}, 1500);
|
||||
}
|
||||
}
|
||||
input.value=this.responseText;
|
||||
}
|
||||
|
||||
req.Send(url);
|
||||
}
|
||||
|
||||
function getProductQuantity(rowIndex, operation) {
|
||||
//console.log('getProductQuantity');
|
||||
|
||||
var stock_id = document.getElementById("stock_id").value;
|
||||
var product_id = N.row(rowIndex).getData().id;
|
||||
|
||||
url='index.php?module=EcmStockStates&action=getProductQuantity&stock_id=' + stock_id + '&product_id=' + product_id + '&to_pdf=1';
|
||||
|
||||
console.log(url);
|
||||
|
||||
var req = mint.Request();
|
||||
|
||||
req.OnSuccess = function()
|
||||
{
|
||||
//console.log("getProductQuantity:OnSuccess");
|
||||
//return;
|
||||
|
||||
var data = N.row(rowIndex).getData();
|
||||
|
||||
data.stock = this.responseText;
|
||||
|
||||
N.row(rowIndex).setData(data);
|
||||
|
||||
if (!data.reserved)
|
||||
data.reserved = 0;
|
||||
|
||||
if (operation == "saveReservation") {
|
||||
N.row(rowIndex).className='';
|
||||
|
||||
//if qty = 0 do clear reserved field
|
||||
if (data.rq == 0) {
|
||||
N.row(rowIndex).setData();
|
||||
removeReservation(rowIndex);
|
||||
|
||||
setTimeout(
|
||||
function() {
|
||||
getProductQuantity(rowIndex);
|
||||
},
|
||||
1000
|
||||
);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//stock > qty - all OK, can reserve
|
||||
if (data.stock >= data.reserved) {
|
||||
saveReservation(rowIndex, false);
|
||||
return;
|
||||
}
|
||||
|
||||
if ((data.stock < data.reserved) && (parseFloat(data.stock) + parseFloat(data.reserved) > 0)) {
|
||||
saveReservation(rowIndex, true, parseFloat(data.stock)+parseFloat(data.reserved)); //orange row true;
|
||||
return;
|
||||
}
|
||||
|
||||
//stock <= qty + res, sand reserve, do nothing
|
||||
if (data.stock < data.reserved) {
|
||||
N.row(rowIndex).className = 'redRow';
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
req.Send(url);
|
||||
}
|
||||
|
||||
function saveReservation2(rowIndex, orangeRow, qty){
|
||||
//block change RW stock
|
||||
//document.getElementById("stock_id").disabled=true;
|
||||
//document.getElementById("pw_stock_id").disabled=true;
|
||||
|
||||
var data = N.row(rowIndex).getData();
|
||||
var product_id = data.id;
|
||||
var temp_item_id = data.temp_item_id;
|
||||
var quantity;
|
||||
if (qty)
|
||||
quantity = qty;
|
||||
else
|
||||
quantity = data.quantity;
|
||||
console.log(data.name+" qty: "+quantity);
|
||||
var date = document.getElementById("temp_date").value;
|
||||
var stock_id = document.getElementById("stock_id").value;
|
||||
var temp_doc_id = document.getElementById("temp_id").value;
|
||||
var url='index.php?module=EcmStockOperations&action=saveReservation&stock_id='+stock_id+'&product_id='+product_id+'&temp_doc_id='+temp_doc_id+'&temp_item_id='+temp_item_id+'&date='+date+'&quantity='+quantity+'&to_pdf=1';
|
||||
var req=mint.Request();
|
||||
req.OnSuccess = function(){
|
||||
var data = N.row(rowIndex).getData();
|
||||
data.reserved = quantity;
|
||||
N.row(rowIndex).setData(data);
|
||||
//N.row(rowIndex).cell(3).getElementById("reservation_info").innerHtml="("+data.reserved+")";
|
||||
N.row(rowIndex).cells.item(3).getElementsByTagName('p')[0].innerHTML = NumberToUserFormatNumber(data.reserved);
|
||||
//cell(3).getElementById("reservation_info").innerHtml
|
||||
if (orangeRow==true) N.row(rowIndex).className = 'orangeRow';
|
||||
else N.row(rowIndex).className = 'greenRow';
|
||||
getProductQuantity(rowIndex, '');
|
||||
}
|
||||
req.Send(url);
|
||||
}
|
||||
|
||||
function saveReservation(rowIndex, orangeRow, qty){
|
||||
//block change RW stock. Why ?
|
||||
//document.getElementById("stock_id").disabled = true;
|
||||
//document.getElementById("pw_stock_id").disabled = true;
|
||||
|
||||
var data = N.row(rowIndex).getData();
|
||||
|
||||
var product_id = data.id;
|
||||
var temp_item_id = data.temp_item_id;
|
||||
var quantity;
|
||||
|
||||
if (qty)
|
||||
quantity = qty;
|
||||
else
|
||||
quantity = data.rq;
|
||||
|
||||
var date = document.getElementById("temp_date").value;
|
||||
|
||||
var stock_id = document.getElementById("stock_id").value;
|
||||
|
||||
var temp_doc_id = document.getElementById("temp_id").value;
|
||||
|
||||
var url='index.php?module=EcmStockOperations&action=saveReservation&stock_id='+stock_id+'&product_id='+product_id+'&temp_doc_id='+temp_doc_id+'&temp_item_id='+temp_item_id+'&date='+date+'&quantity='+quantity+'&to_pdf=1';
|
||||
|
||||
//console.log(url);
|
||||
|
||||
var req=mint.Request();
|
||||
|
||||
req.OnSuccess = function(){
|
||||
//console.log("saveReservation:OnSuccess");
|
||||
|
||||
var data = N.row(rowIndex).getData();
|
||||
|
||||
data.reserved = quantity;
|
||||
|
||||
N.row(rowIndex).setData(data);
|
||||
|
||||
//N.row(rowIndex).cell(3).getElementById("reservation_info").innerHtml="("+data.reserved+")";
|
||||
|
||||
N.row(rowIndex).cells.item(3).getElementsByTagName('p')[0].innerHTML = NumberToUserFormatNumber(data.reserved);
|
||||
|
||||
//cell(3).getElementById("reservation_info").innerHtml
|
||||
|
||||
if (orangeRow == true)
|
||||
N.row(rowIndex).className = 'orangeRow';
|
||||
else
|
||||
N.row(rowIndex).className = 'greenRow';
|
||||
|
||||
getProductQuantity(rowIndex, '');
|
||||
}
|
||||
|
||||
req.Send(url);
|
||||
}
|
||||
|
||||
function removeReservation(index) {
|
||||
//Console.log('removeReservation');
|
||||
|
||||
var data = N.row(index).getData();
|
||||
var temp_item_id = data.temp_item_id;
|
||||
|
||||
url='index.php?module=EcmStockOperations&action=deleteReservation&temp_item_id='+temp_item_id+'&to_pdf=1';
|
||||
|
||||
//console.log('removeReservation: ' + url);
|
||||
|
||||
var req=mint.Request();
|
||||
|
||||
req.OnSuccess = function() {
|
||||
//console.log('removeReservation OnSuccess');
|
||||
}
|
||||
|
||||
req.Send(url);
|
||||
}
|
||||
|
||||
function SetTabIndexs() {
|
||||
var main = document.getElementById("main");
|
||||
var td = main.getElementsByTagName("td");
|
||||
var selectedTable = null;
|
||||
//var selectingColor = "red";
|
||||
//var selectingCellTable = "green";
|
||||
var TableIndex = 0;
|
||||
for(var i=0; i<td.length; i++) {
|
||||
if(td[i].className == "tabEditViewDF") {
|
||||
var TI = 0;
|
||||
if(td[i].parentNode.cells.item(1) == td[i]) TI = 101+TableIndex; else TI = 102+TableIndex;
|
||||
|
||||
var nodes = td[i].getElementsByTagName("input");
|
||||
for(var j=0; j<nodes.length; j++) nodes[j].tabIndex = TI;
|
||||
var nodes = td[i].getElementsByTagName("select");
|
||||
for(var j=0; j<nodes.length; j++) nodes[j].tabIndex = TI;
|
||||
var nodes = td[i].getElementsByTagName("textarea");
|
||||
for(var j=0; j<nodes.length; j++) nodes[j].tabIndex = TI;
|
||||
|
||||
if(td[i].parentNode.parentNode.parentNode !== selectedTable) {
|
||||
//if(selectingColor == "red") selectingColor = "blue"; else selectingColor = "red";
|
||||
selectedTable = td[i].parentNode.parentNode.parentNode;
|
||||
TableIndex++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function doRequest(where, post, doFunction, error) {
|
||||
this.Display = function(result) {
|
||||
doFunction(result.responseText);
|
||||
}
|
||||
|
||||
this.Fail = function(result){
|
||||
if(error)
|
||||
alert(error);
|
||||
}
|
||||
|
||||
YAHOO.util.Connect.asyncRequest(
|
||||
"POST",
|
||||
where,
|
||||
{
|
||||
success:this.Display,
|
||||
failure:this.Fail
|
||||
},
|
||||
post
|
||||
);
|
||||
}
|
||||
|
||||
function changeValidateRequired(formname,name,required) {
|
||||
for(var i=0; i<validate[formname].length; i++)
|
||||
if(validate[formname][i][0] == name) {
|
||||
validate[formname][i][2] = required;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
function set_focus() {
|
||||
document.getElementById("name").focus();
|
||||
}
|
||||
|
||||
function my_popup(module, field_array, met, call_back_function, form_name) {
|
||||
if(!call_back_function) call_back_function = "set_return";
|
||||
if(!form_name) form_name = "EditView";
|
||||
return open_popup(module, 900, 700, met, true, false, {
|
||||
"call_back_function":call_back_function,
|
||||
"form_name":form_name,
|
||||
"field_to_name_array":field_array
|
||||
});
|
||||
}
|
||||
|
||||
function addEvent(object,eventName,do_function) {
|
||||
if(typeof(object) == "string") object = document.getElementById(object);
|
||||
if(!object) {
|
||||
alert("No object in function addEvent!");
|
||||
return;
|
||||
}
|
||||
if(object.addEventListener) {
|
||||
object.addEventListener(eventName, do_function, false);
|
||||
} else {
|
||||
object.attachEvent("on"+eventName, do_function);
|
||||
}
|
||||
}
|
||||
|
||||
function findPos(obj) {
|
||||
var nleft = 0;
|
||||
var ntop = 0;
|
||||
if (obj.offsetParent) {
|
||||
nleft = obj.offsetLeft
|
||||
ntop = obj.offsetTop
|
||||
while (obj = obj.offsetParent) {
|
||||
nleft += obj.offsetLeft
|
||||
ntop += obj.offsetTop
|
||||
}
|
||||
}
|
||||
return [nleft,ntop];
|
||||
}
|
||||
|
||||
function cursorEOT(isField) {
|
||||
isRange = isField.createTextRange();
|
||||
isRange.move("textedit");
|
||||
isRange.select();
|
||||
testOverflow = isField.scrollTop;
|
||||
if (testOverflow != 0){
|
||||
return true
|
||||
}
|
||||
else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
function adjustRows(isField) {
|
||||
while (cursorEOT(isField)){
|
||||
isField.rows++
|
||||
}
|
||||
}
|
||||
|
||||
function insertText(isField,isText) {
|
||||
isField.value = testText;
|
||||
isField.focus();
|
||||
}
|
||||
|
||||
function changer() {
|
||||
this.list = new Object();
|
||||
this.add = function(object,type,do_function,start_value) {
|
||||
if(typeof(object) == "string") object = document.getElementById(object);
|
||||
if(!object) return;
|
||||
this.list[object.id] = new Object();
|
||||
this.list[object.id].object = object;
|
||||
this.list[object.id].type = type;
|
||||
this.list[object.id].do_function = do_function;
|
||||
this.list[object.id].start_value = start_value;
|
||||
this.list[object.id].value = "";
|
||||
}
|
||||
this.getValue = function(element) {
|
||||
var value = null;
|
||||
if(element.object) {
|
||||
if(element.type == "innerHTML") value = element.object.innerHTML;
|
||||
if(element.type == "value") value = element.object.value;
|
||||
if(element.type == "checked") value = element.object.checked;
|
||||
}
|
||||
return value;
|
||||
}
|
||||
this.interval = 1000;
|
||||
this.timer = null;
|
||||
this.startTimer = function() {
|
||||
var cc = this;
|
||||
this.timer = setInterval(
|
||||
function(){
|
||||
var list = cc.list;
|
||||
for(x in list) {
|
||||
if(list[x].start_value) {
|
||||
list[x].value = cc.getValue(list[x]);
|
||||
list[x].start_value = false;
|
||||
}
|
||||
else {
|
||||
var value = cc.getValue(list[x]);
|
||||
if(list[x].value !== value)
|
||||
if(list[x].do_function)
|
||||
list[x].do_function(list[x].object);
|
||||
list[x].value = value;
|
||||
}
|
||||
}
|
||||
},
|
||||
this.interval
|
||||
);
|
||||
}
|
||||
this.stopTimer = function () {
|
||||
clearInterval(this.timer);
|
||||
this.timer = null;
|
||||
}
|
||||
}
|
||||
|
||||
var ERROR = false;
|
||||
|
||||
var ItemListSave = function(json) {
|
||||
return "";
|
||||
}
|
||||
var ServiceListSave = function(json) {
|
||||
return "";
|
||||
}
|
||||
var IncomeListSave = function(json) {
|
||||
return "";
|
||||
}
|
||||
|
||||
function ShowLoadingView() {
|
||||
var slv = document.getElementById("ShowLoadingView");
|
||||
if(!slv) {
|
||||
slv = document.createElement("div");
|
||||
slv.id = "ShowLoadingView";
|
||||
slv.className = "transparent_class_loading";
|
||||
slv.style.width = "100%";
|
||||
slv.style.height = "500%";
|
||||
|
||||
var sli = document.createElement("img");
|
||||
sli.className = "transparent_class_loading_image";
|
||||
sli.src = "themes/default/images/loading.gif";
|
||||
slv.appendChild(sli);
|
||||
|
||||
document.body.appendChild(slv);
|
||||
}
|
||||
slv.style.display = "";
|
||||
}
|
||||
|
||||
function HideLoadingView() {
|
||||
var slv = document.getElementById("ShowLoadingView");
|
||||
if(slv) slv.style.display = "none";
|
||||
}
|
||||
|
||||
function saveItems(){
|
||||
document.getElementById("position_list").value = ItemsList(true);
|
||||
}
|
||||
|
||||
function saveServices(){
|
||||
document.getElementById("services_list").value = ServicesList(true);
|
||||
}
|
||||
|
||||
function checkStockQuantity(){
|
||||
var tab=document.getElementById("tbody");
|
||||
var tr=tab.getElementsByTagName("tr");
|
||||
var qtyinstock;
|
||||
var qty;
|
||||
var total;
|
||||
for(var i=0;i<tr.length;i++){
|
||||
|
||||
qtyinstock=tr[i].getElementsByTagName("input")[18].value;
|
||||
qty=tr[i].getElementsByTagName("input")[17].value;
|
||||
total=parseFloat(qtyinstock)-parseFloat(qty);
|
||||
if(tr[i].getElementsByTagName("input")[17].checked==true && tr[i].getElementsByTagName("input")[2].value && parseInt(qtyinstock)-parseInt(qty)<0){
|
||||
alert("Brakuje produktów na magazynie aby zrobic rezerwacje");
|
||||
tr[i].getElementsByTagName("input")[17].value=parseInt(qtyinstock);
|
||||
if(tr[i].getElementsByTagName("input")[9].value<tr[i].getElementsByTagName("input")[18].value){
|
||||
tr[i].getElementsByTagName("input")[18].value=parseInt(tr[i].getElementsByTagName("input")[9].value);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function SaveForm() {
|
||||
ShowLoadingView();
|
||||
|
||||
setTimeout(function() {
|
||||
if(OPT["checkbox_demo"] == 1 && document.forms.EditView.record.value == "") {
|
||||
alert(MOD.LBL_DEMO_VERSION_INFORMATION);
|
||||
return;
|
||||
}
|
||||
|
||||
ERROR = false;
|
||||
|
||||
//document.getElementById("position_list").value = ItemListSave(true);
|
||||
if(ERROR) {
|
||||
alert(MOD["LBL_SAVE_FORM_ERROR"]);
|
||||
HideLoadingView();
|
||||
return false;
|
||||
}
|
||||
|
||||
document.forms.EditView.action.value = "Save";
|
||||
|
||||
if(check_form("EditView")) {
|
||||
//var result = confirm(MOD.LBL_CONFIRM_QUESTION);
|
||||
//if(result) document.forms.EditView.status.value = (OPT["auto_commiting"]?"s30":"s20");
|
||||
|
||||
doRequest(
|
||||
"index.php",
|
||||
getFormPost("Save"),
|
||||
function(result){
|
||||
console.log(result);
|
||||
HideLoadingView();
|
||||
return;
|
||||
|
||||
document.forms.EditView.record.value = result.substring(result.length - 36);
|
||||
|
||||
if(OPT["setEmailTab"])
|
||||
setEMAIL(true);
|
||||
else
|
||||
window.location = "index.php?module="+document.forms.EditView.module.value+"&action=DetailView&record="+document.forms.EditView.record.value;
|
||||
},
|
||||
MOD["LBL_NOT_SAVED"]
|
||||
);
|
||||
} else {
|
||||
alert(MOD["LBL_NOT_SAVED"]);
|
||||
HideLoadingView();
|
||||
return false;
|
||||
}
|
||||
|
||||
},
|
||||
200);
|
||||
}
|
||||
|
||||
function ItemListClear() {
|
||||
while(N.rowCount()>0) N.row(0).deleteRow();
|
||||
}
|
||||
|
||||
function getFormPost(action) {
|
||||
if(!action)
|
||||
action = "previewPDF";
|
||||
|
||||
var pd =
|
||||
"to_pdf=1" +
|
||||
"&module=EcmServices&action=" +
|
||||
action +
|
||||
"&record=" +
|
||||
document.forms.EditView.record.value;
|
||||
|
||||
pd += "&cache=fromJava" + ItemListSave(true) + ServiceListSave(true) + IncomeListSave(true);
|
||||
|
||||
var pd2 = new Object();
|
||||
|
||||
pd2["module"] = "EcmServices";
|
||||
pd2["action"] = action;
|
||||
pd2["record"] = document.forms.EditView.record.value;
|
||||
pd2["to_pdf"] = "1";
|
||||
pd2["cache"] = "fromJava";
|
||||
|
||||
document.forms.EditView.position_list.value = "";
|
||||
document.forms["EditView"].action.value = action;
|
||||
|
||||
var tmp;
|
||||
|
||||
for(var i=0; i < document.forms["EditView"].elements.length; i++) {
|
||||
tmp = document.forms["EditView"].elements[i];
|
||||
if(tmp.name != "") {
|
||||
if(tmp.type == "checkbox")
|
||||
pd2[document.forms["EditView"].elements[i].name] =(document.forms["EditView"].elements[i].checked ? "1" : "0");
|
||||
else
|
||||
pd2[document.forms["EditView"].elements[i].name] = document.forms["EditView"].elements[i].value;
|
||||
}
|
||||
}
|
||||
|
||||
pd += "&otherFormData=" + JSON.stringifyNoSecurity(pd2);
|
||||
|
||||
return pd;
|
||||
}
|
||||
|
||||
function sendFormPostToPdf(type, panel) {
|
||||
var tab = '_';
|
||||
|
||||
if(type != null) {
|
||||
tab += type.toUpperCase();
|
||||
}
|
||||
|
||||
ERROR = false;
|
||||
|
||||
document.getElementById("position_list").value = ItemListSave(true);
|
||||
document.getElementById("services_list").value = ServiceListSave(true);
|
||||
document.getElementById("income_list").value = IncomeListSave(true);
|
||||
|
||||
if(ERROR) {
|
||||
alert("There are some errors on list");
|
||||
return false;
|
||||
}
|
||||
|
||||
doRequest(
|
||||
"index.php",
|
||||
getFormPost("previewPDF"),
|
||||
function(result) {
|
||||
//console.log(result);
|
||||
//return;
|
||||
|
||||
if(SHOW_PDF_IN_DIV==1){
|
||||
HideLoadingView();
|
||||
|
||||
EcmPreviewPDF(
|
||||
"index.php?module=EcmServices&action=previewPDF&to_pdf=1&from=EcmServices&type=" + type,
|
||||
{
|
||||
zoom:75
|
||||
}
|
||||
);
|
||||
}
|
||||
else{
|
||||
|
||||
SetTab((panel ? "panel_" : "" )+ "PREVIEW" + tab);
|
||||
|
||||
document.getElementById("previewPDF" + tab).innerHTML = '<iframe style="border: none; width: 100%; height: 1200px;" frameborder="no" src="index.php?module=EcmServices&action=previewPDF&to_pdf=1&from=EcmServices&type=' + type + '#zoom=75">Yours browser not accept iframes!</iframe>';
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function canConfirm() {
|
||||
if(document.forms.EditView.status.value == "accepted" && !OPT.user.confirm_quotes) {
|
||||
alert("This option is disabled for You.");
|
||||
document.forms.EditView.status.value = ((OPT.old_status)?OPT.old_status:"");
|
||||
}
|
||||
OPT.old_status = document.forms.EditView.status.value;
|
||||
}
|
||||
|
||||
function CheckDiscount(noAlert) {
|
||||
var discount = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
var AjaxSearch1Items;
|
||||
var AjaxSearch2Items;
|
||||
var AjaxSearch3Items;
|
||||
|
||||
var parentFL;
|
||||
var productFL;
|
||||
var contactFL;
|
||||
Reference in New Issue
Block a user