555 lines
12 KiB
JavaScript
555 lines
12 KiB
JavaScript
/**
|
|
* Product: Posterita Web-Based POS and Adempiere Plugin
|
|
* Copyright (C) 2007 Posterita Ltd
|
|
* This file is part of POSterita
|
|
*
|
|
* POSterita is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License along
|
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*/
|
|
|
|
/**
|
|
@author praveen
|
|
*/
|
|
|
|
|
|
//registering shortcut keys
|
|
//keyMap['ALT-1'] = "showCash()";
|
|
//keyMap['ALT-2'] = "showCard()";
|
|
//keyMap['ALT-3'] = "showCheque()";
|
|
//keyMap['ALT-4'] = "showMixed()";
|
|
//keyMap['ALT-S'] = "createOrder()";
|
|
//if($F(trxType))
|
|
var func = function(){
|
|
|
|
init();
|
|
|
|
var type = document.forms[0].trxType.value;
|
|
|
|
if(type=='Mixed')
|
|
showMixed();
|
|
else if(type=='Card')
|
|
showCard();
|
|
else if(type=='Cheque')
|
|
showCheque();
|
|
else
|
|
showCash();
|
|
};
|
|
|
|
if(window.onload)
|
|
{
|
|
var f = window.onload;
|
|
window.onload = function()
|
|
{
|
|
f();
|
|
func();
|
|
};
|
|
}
|
|
else
|
|
{
|
|
window.onload = func;
|
|
}
|
|
|
|
|
|
function show(elementId){
|
|
document.getElementById(elementId).style.display="inline";
|
|
}
|
|
|
|
function hide(elementId){
|
|
document.getElementById(elementId).style.display="none";
|
|
}
|
|
|
|
function showMixed()
|
|
{
|
|
show("cashLabel");show("cashTxt");
|
|
show("cardLabel");show("cardTxt");
|
|
show("cardNoLabel");show("cardNoTxt");
|
|
show("chequeLabel");show("chequeTxt");
|
|
show("chequeNoLabel");show("chequeNoTxt");
|
|
|
|
setTrxType("Mixed");
|
|
document.getElementsByName('paymentByCard')[0].focus();
|
|
|
|
|
|
var cashInput = document.getElementsByName('paymentByCash')[0];
|
|
var cardInput = document.getElementsByName('paymentByCard')[0];
|
|
var chequeInput = document.getElementsByName('paymentByChq')[0];
|
|
|
|
cashInput.initialAmount = cashInput.value;
|
|
cardInput.previousAmount = 0;
|
|
chequeInput.previousAmount = 0;
|
|
|
|
|
|
cardInput.onkeyup = function()
|
|
{
|
|
try
|
|
{
|
|
var newValue = new Number(cashInput.initialAmount - cardInput.value - chequeInput.value).toFixed(2);
|
|
|
|
if(newValue >= 0)
|
|
{
|
|
cashInput.value = newValue;
|
|
cardInput.previousAmount = newValue;
|
|
|
|
}
|
|
else
|
|
{
|
|
var max = cashInput.initialAmount - chequeInput.value;
|
|
alert('Card Amount should not exceed ' + max);
|
|
|
|
cardInput.value = 0.0;
|
|
|
|
newValue = new Number(cashInput.initialAmount - cardInput.value - chequeInput.value).toFixed(2);
|
|
cashInput.value = newValue;
|
|
}
|
|
}
|
|
catch(e)
|
|
{
|
|
toConsole(e);
|
|
}
|
|
|
|
}
|
|
|
|
chequeInput.onkeyup = function()
|
|
{
|
|
try
|
|
{
|
|
var newValue = new Number(cashInput.initialAmount - cardInput.value - chequeInput.value).toFixed(2);
|
|
|
|
if(newValue >= 0)
|
|
{
|
|
cashInput.value = newValue;
|
|
chequeInput.previousAmount = newValue;
|
|
|
|
}
|
|
else
|
|
{
|
|
var max = cashInput.initialAmount - cardInput.value;
|
|
alert('Cheque Amount should not exceed ' + max);
|
|
|
|
chequeInput.value = 0.0;
|
|
|
|
newValue = new Number(cashInput.initialAmount - cardInput.value - chequeInput.value).toFixed(2);
|
|
cashInput.value = newValue;
|
|
}
|
|
}
|
|
catch(e)
|
|
{
|
|
toConsole(e);
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function showCheque()
|
|
{
|
|
show("chequeNoLabel");show("chequeNoTxt");
|
|
|
|
hide("cashLabel");hide("cashTxt");
|
|
hide("cardLabel");hide("cardTxt");
|
|
hide("cardNoLabel");hide("cardNoTxt");
|
|
hide("chequeLabel");hide("chequeTxt");
|
|
|
|
setTrxType("Cheque");
|
|
|
|
var chequeTf = document.getElementsByName('chequeNo')[0];
|
|
|
|
chequeTf.focus();
|
|
|
|
return false;
|
|
}
|
|
|
|
function showCard()
|
|
{
|
|
show("cardNoLabel");show("cardNoTxt");
|
|
|
|
hide("cashLabel");hide("cashTxt");
|
|
hide("cardLabel");hide("cardTxt");
|
|
hide("chequeLabel");hide("chequeTxt");
|
|
hide("chequeNoLabel");hide("chequeNoTxt");
|
|
|
|
setTrxType("Card");
|
|
|
|
var cardTf = document.getElementsByName('creditCardNumber')[0];
|
|
|
|
cardTf.focus();
|
|
|
|
return false;
|
|
}
|
|
|
|
function showCash()
|
|
{
|
|
hide('cashLabel');hide('cashTxt');
|
|
hide('cardLabel');hide('cardTxt');
|
|
hide('cardNoLabel');hide('cardNoTxt');
|
|
hide('chequeLabel');hide('chequeTxt');
|
|
hide('chequeNoLabel');hide('chequeNoTxt');
|
|
|
|
setTrxType("Cash");
|
|
|
|
return false;
|
|
}
|
|
|
|
function setTrxType(type)
|
|
{
|
|
document.forms[0].trxType.value = type;
|
|
}
|
|
|
|
|
|
|
|
//adding behaviour to discount&actual price textfields
|
|
var price = document.getElementsByName('price');
|
|
var discount = document.getElementsByName('discountPercent');
|
|
var actualPrice = document.getElementsByName('actualPrice');
|
|
|
|
/*
|
|
var totalDiscount = $('totalDiscount');
|
|
var totalPrice = $('totalPrice');
|
|
|
|
totalPrice.initialAmount = 0;
|
|
for(var i=0;i<actualPrice.length;i++)
|
|
{
|
|
totalPrice.initialAmount += parseFloat(actualPrice[i].value);
|
|
}
|
|
|
|
totalPrice.onkeyup = function()
|
|
{
|
|
var newDiscount = 100-((this.value*100)/totalPrice.initialAmount);
|
|
newDiscount = new Number(newDiscount).toFixed(2); //rounding calculate discount
|
|
totalDiscount.value = newDiscount;
|
|
|
|
if(newDiscount > discountAllowed)
|
|
{
|
|
var errormsg = 'You are authorised to give ' + discountAllowed + '% discount only!';
|
|
|
|
this.className = 'text medium error';
|
|
this.title = errormsg;
|
|
|
|
totalDiscount.className = 'text medium error';
|
|
totalDiscount.title = errormsg;
|
|
|
|
//alert(errormsg);
|
|
}
|
|
else
|
|
{
|
|
var className = 'text medium';
|
|
|
|
|
|
this.className = className;
|
|
this.title = '';
|
|
|
|
totalDiscount.className = className;
|
|
totalDiscount.title = '';
|
|
}
|
|
};
|
|
|
|
totalDiscount.onkeyup = function()
|
|
{
|
|
var newprice = ((100-this.value)*totalPrice.initialAmount)/100;
|
|
newprice = new Number(newprice).toFixed(2); //rounding calculate price
|
|
totalPrice.value = newprice;
|
|
|
|
if(this.value > discountAllowed)
|
|
{
|
|
var errormsg = 'You are authorised to give ' + discountAllowed + '% discount only!';
|
|
|
|
this.className = 'text medium error';
|
|
this.title = errormsg;
|
|
|
|
totalPrice.className = 'text medium error';
|
|
totalPrice.title = errormsg;
|
|
|
|
//alert(errormsg);
|
|
}
|
|
else
|
|
{
|
|
var className = 'text medium';
|
|
|
|
this.className = className;
|
|
this.title = '';
|
|
|
|
totalPrice.className = className;
|
|
totalPrice.title = '';
|
|
}
|
|
};
|
|
*/
|
|
|
|
for(var i=0;i<price.length;i++)
|
|
{
|
|
var element = null;
|
|
|
|
element = discount[i];
|
|
element.position = i; //adding attribute position
|
|
element.onkeyup = function(e)
|
|
{
|
|
var index = this.position;
|
|
|
|
var calculatedPrice = ((100-this.value)*price[index].value)/100;
|
|
calculatedPrice = new Number(calculatedPrice).toFixed(2); //rounding calaculate value
|
|
|
|
actualPrice[index].value = calculatedPrice;
|
|
updateTotal();
|
|
|
|
if(this.value > discountAllowed)
|
|
{
|
|
var errormsg = 'You are authorised to give ' + discountAllowed + '% discount only!';
|
|
|
|
this.className = 'text medium error';
|
|
this.title = errormsg;
|
|
|
|
actualPrice[index].className = 'text medium error';
|
|
actualPrice[index].title = errormsg;
|
|
|
|
//alert(errormsg);
|
|
}
|
|
else if(this.value < 0)
|
|
{
|
|
var errormsg = 'Discount cannot be negative!';
|
|
|
|
this.className = 'text medium error';
|
|
this.title = errormsg;
|
|
|
|
actualPrice[index].className = 'text medium error';
|
|
actualPrice[index].title = errormsg;
|
|
|
|
//alert(errormsg);
|
|
}
|
|
else
|
|
{
|
|
var className = 'text medium';
|
|
|
|
this.className = className;
|
|
this.title = '';
|
|
|
|
actualPrice[index].className = className;
|
|
actualPrice[index].title = '';
|
|
}
|
|
|
|
}
|
|
|
|
element = actualPrice[i];
|
|
element.position = i; //adding attribute position
|
|
|
|
element.onkeypress = setNumericInputMask;
|
|
element.onkeyup = function(e)
|
|
{
|
|
var index = this.position;
|
|
|
|
var calculateDiscount = 100-((this.value*100)/price[index].value);
|
|
calculateDiscount = new Number(calculateDiscount).toFixed(2); //rounding calculate discount
|
|
|
|
discount[index].value = calculateDiscount;
|
|
updateTotal();
|
|
|
|
if(calculateDiscount > discountAllowed)
|
|
{
|
|
var errormsg = 'You are authorised to give ' + discountAllowed + '% discount only!';
|
|
|
|
this.className = 'text medium error';
|
|
this.title = errormsg;
|
|
|
|
discount[index].className = 'text medium error';
|
|
discount[index].title = errormsg;
|
|
|
|
//alert(errormsg);
|
|
}
|
|
else if(calculateDiscount < 0)
|
|
{
|
|
var errormsg = 'Discount cannot be negative!';
|
|
|
|
this.className = 'text medium error';
|
|
this.title = errormsg;
|
|
|
|
discount[index].className = 'text medium error';
|
|
discount[index].title = errormsg;
|
|
|
|
//alert(errormsg);
|
|
}
|
|
else
|
|
{
|
|
var className = 'text medium';
|
|
|
|
|
|
this.className = className;
|
|
this.title = '';
|
|
|
|
discount[index].className = className;
|
|
discount[index].title = '';
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
function updateTotal()
|
|
{
|
|
init();
|
|
|
|
var cardInput = document.getElementsByName('paymentByCard')[0].value="";
|
|
var chequeInput = document.getElementsByName('paymentByChq')[0].value="";
|
|
}
|
|
|
|
function init()
|
|
{
|
|
var total = 0;
|
|
|
|
for(var i=0;i<actualPrice.length;i++)
|
|
{
|
|
total = total + parseFloat(actualPrice[i].value);
|
|
}
|
|
|
|
total = new Number(total).toFixed(2);
|
|
|
|
//totalPrice.value = total;
|
|
//totalDiscount.value = 0;
|
|
|
|
$('actualPriceTotal').innerHTML = total;
|
|
document.getElementsByName('totalActualPrice')[0].value = total;
|
|
|
|
var el = document.getElementsByName('paymentByCash')[0];
|
|
if(el)
|
|
{
|
|
el.value = total;
|
|
el.initialAmount = total;
|
|
}
|
|
|
|
discountTotal = $('discountTotal');
|
|
grandTotal = $('grandTotal');
|
|
priceTotal = total;
|
|
|
|
discount.value = 0;
|
|
discountTotal.onkeyup = function(){
|
|
grandTotal.value = ((100-this.value)*priceTotal)/100;
|
|
grandTotal.value = new Number(grandTotal.value).toFixed(2);
|
|
$('actualPriceTotal').innerHTML = grandTotal.value;
|
|
el.value = grandTotal.value;
|
|
|
|
for(var i=0;i<actualPrice.length;i++)
|
|
{
|
|
actualPrice[i].value = ((100-this.value)*price[i].value)/100;
|
|
actualPrice[i].value = new Number(actualPrice[i].value).toFixed(2);
|
|
discount[i].value = this.value;
|
|
}
|
|
|
|
validateForm();
|
|
};
|
|
|
|
grandTotal.value = priceTotal;
|
|
grandTotal.onkeyup = function(){
|
|
discountTotal.value = 100-((this.value*100)/priceTotal);
|
|
discountTotal.value = new Number(discountTotal.value).toFixed(2);
|
|
$('actualPriceTotal').innerHTML = this.value;
|
|
el.value = this.value;
|
|
|
|
for(var i=0;i<actualPrice.length;i++)
|
|
{
|
|
discount[i].value = discountTotal.value;
|
|
actualPrice[i].value = ((100-discount[i].value)*price[i].value)/100;
|
|
actualPrice[i].value = new Number(actualPrice[i].value).toFixed(2);
|
|
}
|
|
|
|
validateForm();
|
|
};
|
|
|
|
validateForm();
|
|
}
|
|
|
|
function validateDiscount(e)
|
|
{
|
|
var evtobj = e || window.event;
|
|
var unicode=evtobj.charCode? evtobj.charCode : evtobj.keyCode;
|
|
var key = String.fromCharCode(unicode);
|
|
|
|
var regex = /\d\x00\x08\x0D/;
|
|
|
|
//return regex.test(key);
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* call on page load
|
|
*/
|
|
function validateForm()
|
|
{
|
|
var errormsg = 'You are authorised to give ' + discountAllowed + '% discount only!';
|
|
var errormsg2 = 'Discount cannot be negative!';
|
|
|
|
for(var i=0;i<actualPrice.length;i++)
|
|
{
|
|
if(discount[i].value > discountAllowed)
|
|
{
|
|
actualPrice[i].className = 'error medium';
|
|
actualPrice[i].title = errormsg;
|
|
|
|
discount[i].className = 'error medium';
|
|
discount[i].title = errormsg;
|
|
}
|
|
else if(discount[i].value < 0)
|
|
{
|
|
actualPrice[i].className = 'error medium';
|
|
actualPrice[i].title = errormsg2;
|
|
|
|
discount[i].className = 'error medium';
|
|
discount[i].title = errormsg2;
|
|
}
|
|
else
|
|
{
|
|
actualPrice[i].className = 'text medium';
|
|
actualPrice[i].title = "";
|
|
|
|
discount[i].className = 'text medium';
|
|
discount[i].title = "";
|
|
}
|
|
}
|
|
|
|
if(discountTotal.value > discountAllowed)
|
|
{
|
|
grandTotal.className = 'error medium';
|
|
grandTotal.title = errormsg;
|
|
|
|
discountTotal.className = 'error medium';
|
|
discountTotal.title = errormsg;
|
|
}
|
|
else if(discountTotal.value < 0)
|
|
{
|
|
grandTotal.className = 'error medium';
|
|
grandTotal.title = errormsg2;
|
|
|
|
discountTotal.className = 'error medium';
|
|
discountTotal.title = errormsg2;
|
|
}
|
|
else
|
|
{
|
|
grandTotal.className = 'text medium';
|
|
grandTotal.title = "";
|
|
|
|
discountTotal.className = 'text medium';
|
|
discountTotal.title = "";
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
var discountTotal = null;
|
|
var grandTotal = null;
|
|
var priceTotal = null;
|
|
|
|
var discountAllowed = <bean:write name="<%= Constants.DISCOUNT_ALLOWED %>"/>;
|
|
var errorCount = 0;
|
|
|
|
|
|
|
|
|
|
|