BUG 5140 "Formula is not working in master dynaforms" SOLVED
- Not taken into account the attribute "Decimal Separator" for the execution of a formula in master DynaForms - When entering data in a Currency/Percentage field is added spaces at the beginning (when the field is in a formula) - Problem solved, has joined the attribute "Decimal Separator" to evaluate the formula - It has rewritten the algorithm for the formula evaluation * Available from version 2.0.44
This commit is contained in:
@@ -2219,30 +2219,7 @@ function G()
|
|||||||
|
|
||||||
//Gets number without mask
|
//Gets number without mask
|
||||||
this.getValue = function (elem) {
|
this.getValue = function (elem) {
|
||||||
var arrayNum = elem.value().split("");
|
return getNumericValue(elem.value(), ((typeof elem.comma_separator != "undefined")? elem.comma_separator : ""));
|
||||||
var num = "";
|
|
||||||
|
|
||||||
for (var i = 0; i <= arrayNum.length - 1; i++) {
|
|
||||||
switch (arrayNum[i]) {
|
|
||||||
case "0":
|
|
||||||
case "1":
|
|
||||||
case "2":
|
|
||||||
case "3":
|
|
||||||
case "4":
|
|
||||||
case "5":
|
|
||||||
case "6":
|
|
||||||
case "7":
|
|
||||||
case "8":
|
|
||||||
case "9":
|
|
||||||
num = num + arrayNum[i];
|
|
||||||
break;
|
|
||||||
case elem.comma_separator:
|
|
||||||
num = num + ".";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return num;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//DEPRECATED
|
//DEPRECATED
|
||||||
@@ -3085,13 +3062,13 @@ var validateForm = function(sRequiredFields) {
|
|||||||
var id = elem.id + "_";
|
var id = elem.id + "_";
|
||||||
|
|
||||||
if (!document.getElementById(id)) {
|
if (!document.getElementById(id)) {
|
||||||
var input2 = document.createElement("input");
|
var inputAux = document.createElement("input");
|
||||||
input2.type = "hidden";
|
inputAux.type = "hidden";
|
||||||
input2.id = id;
|
inputAux.id = id;
|
||||||
input2.name = elem.name;
|
inputAux.name = elem.name;
|
||||||
input2.value = elem.value;
|
inputAux.value = elem.value;
|
||||||
|
|
||||||
frm.appendChild(input2);
|
frm.appendChild(inputAux);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3303,37 +3280,31 @@ function sumaformu(ee,fma,mask){
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(i_elements=0;i_elements < objectsWithFormula.length; i_elements++){
|
for(i_elements=0;i_elements < objectsWithFormula.length; i_elements++){
|
||||||
|
|
||||||
|
|
||||||
for(i_elements2=0;i_elements2 < objectsWithFormula[i_elements].theElements.length;i_elements2++){
|
for(i_elements2=0;i_elements2 < objectsWithFormula[i_elements].theElements.length;i_elements2++){
|
||||||
if(objectsWithFormula[i_elements].theElements[i_elements2]==myId)
|
if(objectsWithFormula[i_elements].theElements[i_elements2]==myId)
|
||||||
{
|
{
|
||||||
|
var formula = objectsWithFormula[i_elements].fma;
|
||||||
|
var ans = objectsWithFormula[i_elements].ee;
|
||||||
|
var theelemts = objectsWithFormula[i_elements].theElements;
|
||||||
|
|
||||||
//calValue(afma,nfma,ee,mask);
|
//Evaluate the formula and replace the value in field
|
||||||
|
for (var i = 0; i <= theelemts.length - 1; i++) {
|
||||||
|
var elem = getField(theelemts[i]);
|
||||||
|
var elemAttribute = elementAttributesNS(elem, "pm");
|
||||||
|
var elemValue = getNumericValue(elem.value, ((typeof elemAttribute.decimal_separator != "undefined")? elemAttribute.decimal_separator : ""));
|
||||||
|
|
||||||
formula = objectsWithFormula[i_elements].fma;
|
formula = formula.replace(theelemts[i], ((elemValue == "")? 0 : parseFloat(elemValue)));
|
||||||
ans = objectsWithFormula[i_elements].ee;
|
|
||||||
theelemts=objectsWithFormula[i_elements].theElements;
|
|
||||||
|
|
||||||
nfk = '';
|
|
||||||
//to replace the field for the value and to evaluate the formula
|
|
||||||
var symbol = mask.replace(/[0-9.#,-_\s]/g,'');
|
|
||||||
for (var i=0; i < theelemts.length; i++){
|
|
||||||
if(!isnumberk(theelemts[i])){//alert(getField(theelemts[i]).name);
|
|
||||||
val = (getField(theelemts[i]).value == '')? 0 : getField(theelemts[i]).value.replace(/[$a-zA-Z\s]/g,'');
|
|
||||||
formula=formula.replace(theelemts[i],val);
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (isnumberk(getField(theelemts['0']).value))
|
|
||||||
getField(theelemts['0']).value = symbol+ ' '+getField(theelemts['0']).value;
|
|
||||||
|
|
||||||
var rstop=eval(formula);
|
var result = eval(formula);
|
||||||
if(mask!=''){
|
|
||||||
putmask(rstop,mask,ans);
|
|
||||||
}else{
|
|
||||||
ans.value=rstop;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (mask != "") {
|
||||||
|
var elemAttribute = elementAttributesNS(ans, "pm");
|
||||||
|
|
||||||
|
putFieldNumericValue(ans, result, mask, ((typeof elemAttribute.decimal_separator != "undefined")? elemAttribute.decimal_separator : ""));
|
||||||
|
} else {
|
||||||
|
ans.value = result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3341,99 +3312,6 @@ function sumaformu(ee,fma,mask){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function calValue(afma,nfma,ans,mask){
|
|
||||||
theelemts=nfma.split(" ");
|
|
||||||
//to replace the field for the value and to evaluate the formula
|
|
||||||
for (var i=0; i < theelemts.length; i++){
|
|
||||||
if(!isnumberk(theelemts[i])){//alert(getField(theelemts[i]).name);
|
|
||||||
if(getField(theelemts[i]).value){
|
|
||||||
nfk=afma.replace(theelemts[i],getField(theelemts[i]).value);
|
|
||||||
afma=nfk;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//ans.value=eval(nfk);
|
|
||||||
var rstop=eval(nfk);
|
|
||||||
if(mask!=''){
|
|
||||||
putmask(rstop,mask,ans);
|
|
||||||
}else{
|
|
||||||
//alert('without mask');
|
|
||||||
ans.value=rstop;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function isnumberk(texto){
|
|
||||||
var numberk="0123456789.";
|
|
||||||
var letters="abcdefghijklmnopqrstuvwxyz";
|
|
||||||
var i=0;
|
|
||||||
var sw=1;
|
|
||||||
|
|
||||||
//for(var i=0; i<texto.length; i++){
|
|
||||||
while(i++ < texto.length && sw==1){
|
|
||||||
if (numberk.indexOf(texto.charAt(i),0)==-1){
|
|
||||||
sw=0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sw;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function putmask(numb,mask,ans){
|
|
||||||
var nnum='';
|
|
||||||
var i=0;
|
|
||||||
var j=0;
|
|
||||||
|
|
||||||
maskDecimal=mask.split(";");
|
|
||||||
if(maskDecimal.length > 1) {
|
|
||||||
maskDecimal=maskDecimal[1].split(".");
|
|
||||||
} else {
|
|
||||||
maskDecimal=mask.split(".");
|
|
||||||
}
|
|
||||||
numDecimal=maskDecimal[1].length;
|
|
||||||
|
|
||||||
ans.value=numb.toFixed(numDecimal);
|
|
||||||
var symbol = mask.replace(/[0-9.#,-_\s]/g,'');
|
|
||||||
if (isnumberk(ans.value)) ans.value = symbol+' '+ans.value;
|
|
||||||
return;
|
|
||||||
var nnum='',i=0,j=0;
|
|
||||||
//we get the number of digits
|
|
||||||
cnumb=numb.toString();
|
|
||||||
cd = parseInt(Math.log(numb)/Math.LN10+1);
|
|
||||||
//now we're runing the mask and cd
|
|
||||||
fnb=cnumb.split(".");
|
|
||||||
maskp=mask.split(";");
|
|
||||||
mask = (maskp.length > 1)? maskp[1]:mask;
|
|
||||||
while(i < numb.toString().length && j < mask.length){
|
|
||||||
//alert(cnumb.charAt(i)+' ** '+mask.charAt(i));
|
|
||||||
switch(mask.charAt(j)){
|
|
||||||
case '#':
|
|
||||||
if(cnumb.charAt(i)!='.') {
|
|
||||||
nnum+=cnumb.charAt(i).toString();
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case '.':
|
|
||||||
nnum+=mask.charAt(j).toString();
|
|
||||||
i=cd+1;
|
|
||||||
cd=i +4;
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
//alert(mask.charAt(i));
|
|
||||||
nnum+=mask.charAt(j).toString();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
j++;
|
|
||||||
}
|
|
||||||
|
|
||||||
ans.value=nnum;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function showRowsById(aFields){
|
function showRowsById(aFields){
|
||||||
|
|
||||||
for(i=0; i<aFields.length; i++){
|
for(i=0; i<aFields.length; i++){
|
||||||
@@ -3481,5 +3359,125 @@ function dateSetMask(mask) {
|
|||||||
return mask;
|
return mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* end file */
|
function putFieldNumericValue(elem, num, mask, decimalSeparator)
|
||||||
|
{
|
||||||
|
var strNum = num.toString();
|
||||||
|
var arrayAux = [];
|
||||||
|
|
||||||
|
var maskNumber = "";
|
||||||
|
var maskDecimal = "";
|
||||||
|
|
||||||
|
if (decimalSeparator != "" && mask.indexOf(decimalSeparator) != -1) {
|
||||||
|
arrayAux = mask.split(decimalSeparator);
|
||||||
|
|
||||||
|
maskNumber = arrayAux[0];
|
||||||
|
maskDecimal = arrayAux[1];
|
||||||
|
} else {
|
||||||
|
maskNumber = mask;
|
||||||
|
maskDecimal = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
var n = "";
|
||||||
|
var d = "";
|
||||||
|
|
||||||
|
if (strNum.indexOf(".") != -1) {
|
||||||
|
arrayAux = strNum.split(".");
|
||||||
|
|
||||||
|
n = arrayAux[0];
|
||||||
|
d = arrayAux[1];
|
||||||
|
} else {
|
||||||
|
n = strNum;
|
||||||
|
d = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
var i = 0;
|
||||||
|
var cont = 0;
|
||||||
|
var pos = maskNumber.indexOf("#");
|
||||||
|
|
||||||
|
if (pos != -1) {
|
||||||
|
var mask1 = maskNumber.substring(0, pos);
|
||||||
|
|
||||||
|
var strAux = maskNumber.split("").reverse().join("");
|
||||||
|
cont = 0;
|
||||||
|
pos = 0;
|
||||||
|
|
||||||
|
for (i = 0; i <= strAux.length - 1; i++) {
|
||||||
|
if (strAux.charAt(i) == "#") {
|
||||||
|
cont = cont + 1;
|
||||||
|
|
||||||
|
if (cont == n.length) {
|
||||||
|
pos = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var mask2 = strAux.substring(0, pos + 1);
|
||||||
|
mask2 = mask2.split("").reverse().join("");
|
||||||
|
|
||||||
|
maskNumber = mask1 + mask2;
|
||||||
|
}
|
||||||
|
|
||||||
|
var newNumber = putStringMask(n.split("").reverse().join(""), maskNumber.split("").reverse().join(""));
|
||||||
|
var newDecimal = putStringMask(d, maskDecimal);
|
||||||
|
|
||||||
|
newNumber = newNumber.split("").reverse().join("");
|
||||||
|
|
||||||
|
elem.value = newNumber + decimalSeparator + newDecimal;
|
||||||
|
}
|
||||||
|
|
||||||
|
function putStringMask(str, mask)
|
||||||
|
{
|
||||||
|
var newStr = "";
|
||||||
|
var i1 = 0;
|
||||||
|
var i2 = 0;
|
||||||
|
|
||||||
|
for (i1 = 0; i1 <= mask.length - 1; i1++) {
|
||||||
|
switch (mask.charAt(i1)) {
|
||||||
|
case "#":
|
||||||
|
if (i2 <= str.length - 1) {
|
||||||
|
newStr = newStr + str.charAt(i2);
|
||||||
|
|
||||||
|
i2 = i2 + 1;
|
||||||
|
} else {
|
||||||
|
newStr = newStr + "0";
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
newStr = newStr + mask.charAt(i1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return newStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getNumericValue(val, decimalSeparator)
|
||||||
|
{
|
||||||
|
var arrayNum = val.split("");
|
||||||
|
var num = "";
|
||||||
|
|
||||||
|
for (var i = 0; i <= arrayNum.length - 1; i++) {
|
||||||
|
switch (arrayNum[i]) {
|
||||||
|
case "0":
|
||||||
|
case "1":
|
||||||
|
case "2":
|
||||||
|
case "3":
|
||||||
|
case "4":
|
||||||
|
case "5":
|
||||||
|
case "6":
|
||||||
|
case "7":
|
||||||
|
case "8":
|
||||||
|
case "9":
|
||||||
|
num = num + arrayNum[i];
|
||||||
|
break;
|
||||||
|
case decimalSeparator:
|
||||||
|
num = num + ".";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1013,7 +1013,7 @@ class XmlForm_Field_Text extends XmlForm_Field_SimpleText
|
|||||||
$html .= 'onkeypress="'.$this->htmlentities($onkeypress, ENT_COMPAT, 'utf-8').'" ';
|
$html .= 'onkeypress="'.$this->htmlentities($onkeypress, ENT_COMPAT, 'utf-8').'" ';
|
||||||
$html .= $this->NSDefaultValue().' ';
|
$html .= $this->NSDefaultValue().' ';
|
||||||
$html .= $this->NSRequiredValue().' ';
|
$html .= $this->NSRequiredValue().' ';
|
||||||
$html .= 'pm:decimal_separator="' + $this->comma_separator + '" ';
|
$html .= 'pm:decimal_separator="' . $this->comma_separator . '" ';
|
||||||
$html .= '/>';
|
$html .= '/>';
|
||||||
}else{ //VIEW MODE
|
}else{ //VIEW MODE
|
||||||
$html .= $this->htmlentities($value, ENT_QUOTES, 'utf-8');
|
$html .= $this->htmlentities($value, ENT_QUOTES, 'utf-8');
|
||||||
@@ -1713,7 +1713,7 @@ class XmlForm_Field_Currency extends XmlForm_Field_SimpleText {
|
|||||||
$html .= $this->NSDefaultValue().' ';
|
$html .= $this->NSDefaultValue().' ';
|
||||||
$html .= $this->NSRequiredValue().' ';
|
$html .= $this->NSRequiredValue().' ';
|
||||||
$html .= $this->NSGridType().' ';
|
$html .= $this->NSGridType().' ';
|
||||||
$html .= 'pm:decimal_separator="'.$this->comma_separator.'" ';
|
$html .= 'pm:decimal_separator="' . $this->comma_separator . '" ';
|
||||||
$html .= '/>';
|
$html .= '/>';
|
||||||
}else{ //VIEW MODE
|
}else{ //VIEW MODE
|
||||||
$html .= $this->htmlentities($value, ENT_COMPAT, 'utf-8');
|
$html .= $this->htmlentities($value, ENT_COMPAT, 'utf-8');
|
||||||
@@ -1829,7 +1829,7 @@ class XmlForm_Field_Percentage extends XmlForm_Field_SimpleText {
|
|||||||
$html .= 'onkeypress="'.$this->htmlentities($onkeypress, ENT_COMPAT, 'utf-8').'" ';
|
$html .= 'onkeypress="'.$this->htmlentities($onkeypress, ENT_COMPAT, 'utf-8').'" ';
|
||||||
$html .= $this->NSDefaultValue().' ';
|
$html .= $this->NSDefaultValue().' ';
|
||||||
$html .= $this->NSRequiredValue().' ';
|
$html .= $this->NSRequiredValue().' ';
|
||||||
$html .= 'pm:decimal_separator="' + $this->comma_separator + '" ';
|
$html .= 'pm:decimal_separator="' . $this->comma_separator . '" ';
|
||||||
$html .= '/>';
|
$html .= '/>';
|
||||||
}else{ //VIEW MODE
|
}else{ //VIEW MODE
|
||||||
$html .= $this->htmlentities($value, ENT_COMPAT, 'utf-8');
|
$html .= $this->htmlentities($value, ENT_COMPAT, 'utf-8');
|
||||||
|
|||||||
@@ -192,7 +192,10 @@ class Main extends Controller
|
|||||||
|
|
||||||
$availableLangArray = $this->getLanguagesList();
|
$availableLangArray = $this->getLanguagesList();
|
||||||
|
|
||||||
G::LoadClass ('serverConfiguration');
|
G::LoadClass("serverConfiguration");
|
||||||
|
|
||||||
|
$sflag = 0;
|
||||||
|
|
||||||
if (($nextBeatDate = $this->memcache->get('nextBeatDate')) === false) {
|
if (($nextBeatDate = $this->memcache->get('nextBeatDate')) === false) {
|
||||||
//get the serverconf singleton, and check if we can send the heartbeat
|
//get the serverconf singleton, and check if we can send the heartbeat
|
||||||
$oServerConf = & serverConf::getSingleton ();
|
$oServerConf = & serverConf::getSingleton ();
|
||||||
|
|||||||
Reference in New Issue
Block a user