示例#1
0
 public cReportFormulaInt add()
 {
     try
     {
         cReportFormulaInt c = new cReportFormulaInt();
         this.BaseAdd(getDummyKey(), c);
         return(c);
     }
     catch
     {
         return(null);
     }
 }
        private object pResultFunctionInt(cReportFormulaInt fint)
        {
            switch (fint.getFormulaType())
            {
                case csRptFormulaType.CSRPTFAVERAGE:
                    return resultAverage(fint);

                case csRptFormulaType.CSRPTFSUM:
                    return resultSum(fint);

                case csRptFormulaType.CSRPTFGETSTRING:
                    return resultGetString(fint);

                case csRptFormulaType.CSRPTFSUMTIME:
                    return resultSumTime(fint);

                case csRptFormulaType.CSRPTMAX:
                    return resultMax(fint);

                case csRptFormulaType.CSRPTMIN:
                    return resultMin(fint);

                case csRptFormulaType.CSRPTCOUNT:
                    return resultCount(fint);

                case csRptFormulaType.CSRPTFNUMBERTOSTRING:
                    return resultNumberToString(fint);

                case csRptFormulaType.CSRPTISEQUAL:
                    return resultIsEqual(fint);

                case csRptFormulaType.CSRPTISNOTEQUAL:
                    return resultIsNotEqual(fint);

                case csRptFormulaType.CSRPTISGREATERTHAN:
                    return resultIsGreaterThan(fint);

                case csRptFormulaType.CSRPTISLESSTHAN:
                    return resultIsLessThan(fint);

                case csRptFormulaType.CSRPTFPAGENUMBER:
                    return resultPageNumber();

                case csRptFormulaType.CSRPTFTOTALPAGES:
                    return resultTotalPages();

                case csRptFormulaType.CSRPTFVAL:
                    return resultValue(fint);

                case csRptFormulaType.CSRPTLENGTH:
                    return resultLength(fint);

                case csRptFormulaType.CSRPTTEXTREPLACE:
                    return resultTextReplace(fint);

                case csRptFormulaType.CSRPTFCALCULO:
                    return resultCalculo(fint);

                case csRptFormulaType.CSRPTDECLAREVAR:
                    // nothing to do
                    break;

                case csRptFormulaType.CSRPTGETVAR:
                    return resultGetVar(fint);

                case csRptFormulaType.CSRPTGETPARAM:
                    return resultGetParam(fint);

                case csRptFormulaType.CSRPTSETVAR:
                    // nothing to do
                    break;

                case csRptFormulaType.CSRPTADDTOVAR:
                    // nothing to do
                    break;

                case csRptFormulaType.CSRPTGETDATAFROMRSAD:
                    return resultGetDataFromRsAd(fint);

                case csRptFormulaType.CSRPTGETDATAFROMRS:
                    return resultGetDataFromRs(fint);

                case csRptFormulaType.CSRPTGROUPTOTAL:
                    return resultGroupTotal(fint);

                case csRptFormulaType.CSRPTGROUPMAX:
                    return resultGroupMax(fint);

                case csRptFormulaType.CSRPTGROUPMIN:
                    return resultGroupMin(fint);

                case csRptFormulaType.CSRPTGROUPAVERAGE:
                    return resultGroupAverage(fint);

                case csRptFormulaType.CSRPTGROUPPERCENT:
                    return resultGroupPercent(fint);

                case csRptFormulaType.CSRPTGROUPCOUNT:
                    return resultGroupCount(fint);

                case csRptFormulaType.CSRPTGROUPLINENUMBER:
                    return resultGroupLineNumber(fint);

                case csRptFormulaType.CSRPTISINRS:
                    return resultIsInRs(fint);
            }
            return null;
        }
 private object pAddFormulaInt(String functionName, String code)
 {
     // the firs thing we need to do is add this internal formula 
     // to the internal formula collection of this formula
     //
     m_fint = m_formula.getFormulasInt().add();
     return pEvalSyntax(functionName, code, true, null);
 }
        private void pSetParams(cReportFormulaInt fint, String parameters)
        {
            String[] vParams = null;
            int i = 0;

            parameters = parameters.Trim();
            if (parameters.Length > 2)
            {
                parameters = parameters.Substring(1, parameters.Length - 2);
                parameters = parameters.Trim();
                vParams = parameters.Split('|');

                for (i = 0; i < vParams.Length; i++)
                {
                    fint.getParameters().item(i).setValue(vParams[i].Trim());
                }
            }
        }
        private void evalGroupLineNumber(cReportFormulaInt fint)
        {
            if (fint.getVariables().item(C_GROUPLINENUMBER) == null)
            {
                fint.getVariables().add(null, C_GROUPLINENUMBER);
            }

            cReportVariable w_item = fint.getVariables().item(C_GROUPLINENUMBER);
            // the LineNumber function is for numbers
            w_item.setValue(
                m_report.getGroupLineNumber(
                    int.Parse(fint.getParameters().item(cReportGlobals.C_KEYINDEXGROUP).getValue())));
        }
        private void evalIsLessThan(cReportFormulaInt fint)
        {
            if (fint.getVariables().item(C_ISLESSTHAN) == null)
            {
                fint.getVariables().add(null, C_ISLESSTHAN);
            }

            cReportVariable w_item = fint.getVariables().item(C_ISLESSTHAN);
            // the IsLessThan function is for numbers
            //
            object value = m_report.getValue(fint.getParameters().item(0).getValue(), true);
            object constValue = fint.getParameters().item(1).getValue();

            if (value.GetType() == typeof(String))
            {
                String strValue = value.ToString();
                String strConstValue = constValue.ToString();

                if (String.Compare(strValue.ToString(),
                                    strConstValue.ToString(),
                                    StringComparison.CurrentCulture) < 0)
                {
                    w_item.setValue(true);
                }
                else
                {
                    w_item.setValue(false);
                }
            }
            else
            {
                if ((double)value < (double)constValue)
                {
                    w_item.setValue(true);
                }
                else
                {
                    w_item.setValue(false);
                }
            }
        }
        private void evalNumberToString(cReportFormulaInt fint)
        {
            if (fint.getVariables().item(C_NUMBERTOSTRING) == null)
            {
                fint.getVariables().add(null, C_NUMBERTOSTRING);
            }

            cReportVariable w_item = fint.getVariables().item(C_NUMBERTOSTRING);
            // the NumberToString funciton is for numbres
            //
            double iNumber = 0;
            int iLenguage = 0;

            iNumber = pGetNumber(m_report.getValue(fint.getParameters().item(0).getValue(), true));
            iLenguage = cUtil.valAsInt(fint.getParameters().item(1).getValue());

            cNumberToString ntos = new cNumberToString();

            switch (iLenguage)
            {
                case C_SPANISH:
                    w_item.setValue(ntos.spanishNumberToString(iNumber));
                    break;
                case C_ENGLISH:
                    w_item.setValue(ntos.englishNumberToString(iNumber));
                    break;
                case C_FRENCH:
                    w_item.setValue(ntos.frenchNumberToString(iNumber));
                    break;
            }
        }
        private void evalMin(cReportFormulaInt fint)
        {
            object value = null;

            if (fint.getVariables().item(C_MIN) == null)
            {
                fint.getVariables().add(null, C_MIN);
            }

            cReportVariable w_item = fint.getVariables().item(C_MIN);
            // The Min function is for numbers and strings
            //
            value = m_report.getValue(fint.getParameters().item(0).getValue());

            if (value.GetType() == typeof(String))
            {
                if (String.Compare(w_item.getValue().ToString(),
                                    value.ToString(),
                                    StringComparison.CurrentCulture) > 0)
                {
                    w_item.setValue(value);
                }
            }
            else
            {
                if ((double)w_item.getValue() > (double)value)
                {
                    w_item.setValue(value);
                }
            }
        }
 private object resultGroupCount(cReportFormulaInt fint)
 {
     if (fint.getVariables().count() > 0)
     {
         return fint.getVariables().item(C_GROUPCOUNT).getValue();
     }
     else
     {
         return 0;
     }
 }
 private object resultGroupAverage(cReportFormulaInt fint)
 {
     if (fint.getVariables().count() > 0)
     {
         return fint.getVariables().item(C_GROUPAVERAGE).getValue();
     }
     else
     {
         return 0;
     }
 }
 private object resultValue(cReportFormulaInt fint)
 {
     return m_report.getValue(fint.getParameters().item(0).getValue(), true);
 }
        private String resultTextReplace(cReportFormulaInt fint)
        {
            int i = 0;
            cReportControl ctrl = null;
            String text = "";
            List<String> collCtrlsToReplace = null;

            ctrl = pGetControl(m_ctrlName);
            if (ctrl == null)
            {
                return "";
            }

            text = ctrl.getLabel().getText();

            try
            {
                collCtrlsToReplace = m_collTextReplace[m_ctrlName];
            }
            catch
            {
                int lenText = 0;
                int pos = 0;
                int endpos = 0;

                collCtrlsToReplace = new List<String>();

                lenText = text.Length;
                while (i < lenText)
                {
                    pos = text.IndexOf(C_MACRO_CTRL, i + 1);
                    if (pos > 0)
                    {
                        endpos = text.IndexOf(C_MACRO_CTRL, pos + 1);

                        if (endpos > 0)
                        {
                            collCtrlsToReplace.Add(text.Substring(pos + 2, endpos - pos - 2));
                        }
                        i = endpos + 1;
                    }
                    else
                    {
                        i = lenText + 1;
                    }
                }

                m_collTextReplace.Add(m_ctrlName, collCtrlsToReplace);
            }

            cReportControl ctrlValue = null;
            for (i = 0; i < collCtrlsToReplace.Count; i++)
            {
                ctrlValue = pGetControl(collCtrlsToReplace[i]);
                if (ctrlValue != null)
                {
                    text = text.Replace(C_MACRO_CTRL + collCtrlsToReplace[i] + C_MACRO_CTRL,
                                        m_report.getValue(ctrlValue.getName(), false).ToString());
                }
            }
            return text;
        }
 private int resultLength(cReportFormulaInt fint)
 {
     return m_report.getValueString(fint.getParameters().item(0).getValue()).Length;
 }
        private double resultCalculo(cReportFormulaInt fint)
        {
            String control = "";
            double value1 = 0;
            double value2 = 0;
            int oper = 0;

            control = fint.getParameters().item(1).getValue();

            value1 = Convert.ToDouble(m_report.getValue(fint.getParameters().item(0).getValue(), true));

            if (control != "\"\"")
            {
                value2 = Convert.ToDouble(m_report.getValue(control, true));
            }
            else
            {
                value2 = double.Parse(fint.getParameters().item(2).getValue());
            }

            oper = int.Parse(fint.getParameters().item(3).getValue());

            switch (oper)
            {
                // addition
                case 1:
                    return value1 + value2;
                    
                // substraction
                case 2:
                    return value1 - value2;
                    
                // multiplication
                case 3:
                    return value1 * value2;
                    
                // division
                case 4:
                    return cUtil.divideByZero(value1, value2);
                    
                // power
                case 5:
                    return Math.Pow(value1, ((int)value2));
                    
                default:
                    return 0;                    
            }
        }
 private double resultAverage(cReportFormulaInt fint)
 {
     if (fint.getVariables().count() == 0) 
     { 
         return 0; 
     }
     double sum = (double)fint.getVariables().item(C_AVERAGESUM).getValue();
     double count = (double)fint.getVariables().item(C_AVERAGECOUNT).getValue();
     return sum / count;
 }
        private void evalSumTime(cReportFormulaInt fint)
        {
            if (fint.getVariables().item(C_SUMTIME) == null)
            {
                fint.getVariables().add(null, C_SUMTIME).setValue(new cStructTime());
            }

            cReportVariable w_item = fint.getVariables().item(C_SUMTIME);
            // the SumTime if for dates
            //
            pSumTimes((cStructTime)w_item.getValue(),
                        DateTime.Parse(m_report.getValue(fint.getParameters().item(0).getValue(), true).ToString()));
        }
 private object resultGroupLineNumber(cReportFormulaInt fint)
 {
     if (fint.getVariables().count() > 0)
     {
         return fint.getVariables().item(C_GROUPLINENUMBER).getValue();
     }
     else
     {
         return 0;
     }
 }
        private void evalCount(cReportFormulaInt fint)
        {
            if (fint.getVariables().item(C_COUNT) == null)
            {
                fint.getVariables().add(null, C_COUNT);
            }

            cReportVariable w_item = fint.getVariables().item(C_COUNT);
            // the Count functio is for numbers
            //
            w_item.setValue((double)w_item.getValue() + 1);
        }
 private object resultIsInRs(cReportFormulaInt fint)
 {
     if (fint.getVariables().count() > 0)
     {
         return fint.getVariables().item(C_ISINRS).getValue();
     }
     else
     {
         return 0;
     }
 }
        private void evalIsNotEqual(cReportFormulaInt fint)
        {
            if (fint.getVariables().item(C_ISNOTEQUAL) == null)
            {
                fint.getVariables().add(null, C_ISNOTEQUAL);
            }

            cReportVariable w_item = fint.getVariables().item(C_ISNOTEQUAL);
            // the IsNotEqual function is for numbers
            //
            String strValue = "";
            String strConstValue = "";

            strValue = (String)m_report.getValue(fint.getParameters().item(0).getValue(), true);
            strConstValue = fint.getParameters().item(1).getValue();

            w_item.setValue(strValue != strConstValue);
        }
        private void evalAverage(cReportFormulaInt fint)
        {
            if (fint.getVariables().item(C_AVERAGESUM) == null)
            {
                fint.getVariables().add(null, C_AVERAGESUM);
                fint.getVariables().add(null, C_AVERAGECOUNT);
            }

            cReportVariable w_item = fint.getVariables().item(C_AVERAGESUM);
            // the average function is for numbers
            //
            w_item.setValue((double)w_item.getValue()
                + pGetNumber(m_report.getValue(fint.getParameters().item(0).getValue(), true)));

            w_item = fint.getVariables().item(C_AVERAGECOUNT);
            // the average function is for numbers
            //
            w_item.setValue((double)w_item.getValue() + 1);
        }
        private void evalGroupCount(cReportFormulaInt fint)
        {
            if (fint.getVariables().item(C_GROUPCOUNT) == null)
            {
                fint.getVariables().add(null, C_GROUPCOUNT);
            }

            cReportVariable w_item = fint.getVariables().item(C_GROUPCOUNT);
            // the Count function is for numbers

            // if param1 doesn't contain an index column is because we haven't
            // process the formulas yet. It happens because compilereport
            // is called before the InitColIndex in cReport's Launch function
            // and the order can not be changed because the function GetData 
            // is executed after the CompileReport function, and we don't want
            // to change this order because we are afraid of the collateral damage
            // it could produce :(
            //
            // In the future we can analize it and modify the order and if this
            // doesn't produce any error we will remove this if :)
            //
            if (fint.getParameters().item(cReportGlobals.C_KEYINDEXCOL) == null)
            {
                w_item.setValue(0);
            }
            else
            {
                w_item.setValue(
                    m_report.getGroupCount(
                        int.Parse(fint.getParameters().item(cReportGlobals.C_KEYINDEXCOL).getValue()),
                        int.Parse(fint.getParameters().item(cReportGlobals.C_KEYINDEXGROUP).getValue())));
            }
        }
        private void evalSum(cReportFormulaInt fint)
        {
            if (fint.getVariables().item(C_SUM) == null)
            {
                fint.getVariables().add(null, C_SUM).setValue(0);
            }

            cReportVariable w_item = fint.getVariables().item(C_SUM);
            // the sum function is for numbers
            //
            w_item.setValue(Convert.ToDouble(w_item.getValue())
                + pGetNumber(m_report.getValue(fint.getParameters().item(0).getValue(), true)));
        }
        private void evalIsInRs(cReportFormulaInt fint)
        {
            if (fint.getVariables().item(C_ISINRS) == null)
            {
                fint.getVariables().add(null, C_ISINRS);
            }

            cReportVariable w_item = fint.getVariables().item(C_ISINRS);
            // TODO: finish coding evalIsInRs
            //
            w_item.setValue(true);
        }
        private void evalDeclareVar(cReportFormulaInt fint)
        {
            String varName = "";

            varName = fint.getParameters().item(0).getValue();

            if (m_variables.item(varName) == null)
            {
                m_variables.add(null, varName);
            }
        }
        private void pEvalFunctionGroup(cReportFormulaInt fint)
        {
            double value = 0;
            double total = 0;

            if (fint.getVariables().count() > 0)
            {
                if (fint.getParameters().item(cReportGlobals.C_KEYINDEXCOL2) == null)
                {
                    value = 0;
                }
                else
                {
                    int columnIndex = int.Parse(fint.getParameters().item(cReportGlobals.C_KEYINDEXCOL2).getValue());
                    value = cUtil.val(m_report.getValueFromRs(columnIndex).ToString());
                }

                cReportVariable var = fint.getVariables().item(C_GROUPPERCENTT);
                total = cUtil.val(var.getValue().ToString());
                value = cUtil.divideByZero(value, total);
                var.setValue(value);

            }

        }
        private void evalSetVar(cReportFormulaInt fint)
        {
            String varName = "";

            varName = fint.getParameters().item(0).getValue();

            if (m_variables.item(varName) == null)
            {
                throw new ReportArgumentMissingException(
                    C_MODULE,
                    cReportError.errGetDescript(
                                    csRptErrors.CSRPTERRMISSINGPARAM,
                                    varName,
                                    "_setVar"));
            }

            cReportVariable w_item = m_variables.item(varName);
            w_item.setValue(fint.getParameters().item(1).getValue());
        }
        private void pEvalFunctionInt(cReportFormulaInt fint)
        {
            switch (fint.getFormulaType())
            {
                case csRptFormulaType.CSRPTFAVERAGE:
                    evalAverage(fint);
                    break;

                case csRptFormulaType.CSRPTFSUM:
                    evalSum(fint);
                    break;

                case csRptFormulaType.CSRPTFSUMTIME:
                    evalSumTime(fint);
                    break;

                case csRptFormulaType.CSRPTMAX:
                    evalMax(fint);
                    break;

                case csRptFormulaType.CSRPTMIN:
                    evalMin(fint);
                    break;

                case csRptFormulaType.CSRPTCOUNT:
                    evalCount(fint);
                    break;

                case csRptFormulaType.CSRPTFNUMBERTOSTRING:
                    evalNumberToString(fint);
                    break;

                case csRptFormulaType.CSRPTISEQUAL:
                    evalIsEqual(fint);
                    break;

                case csRptFormulaType.CSRPTISNOTEQUAL:
                    evalIsNotEqual(fint);
                    break;

                case csRptFormulaType.CSRPTISGREATERTHAN:
                    evalIsGreaterThan(fint);
                    break;

                case csRptFormulaType.CSRPTISLESSTHAN:
                    evalIsLessThan(fint);
                    break;

                case csRptFormulaType.CSRPTFCALCULO:
                    // nothing to do
                    break;

                case csRptFormulaType.CSRPTDECLAREVAR:
                    evalDeclareVar(fint);
                    break;

                case csRptFormulaType.CSRPTGETVAR:
                    // nothing to do
                    break;

                case csRptFormulaType.CSRPTGETPARAM:
                    // nothing to do
                    break;

                case csRptFormulaType.CSRPTSETVAR:
                    evalSetVar(fint);
                    break;

                case csRptFormulaType.CSRPTADDTOVAR:
                    evalAddToVar(fint);
                    break;

                case csRptFormulaType.CSRPTGETDATAFROMRSAD:
                    evalGetDataFromRsAd(fint);
                    break;

                case csRptFormulaType.CSRPTGETDATAFROMRS:
                    evalGetDataFromRs(fint);
                    break;

                case csRptFormulaType.CSRPTISINRS:
                    evalIsInRs(fint);
                    break;
            }
        }
        private void evalGetDataFromRs(cReportFormulaInt fint)
        {

        }
示例#30
0
 private void pSetColIndexInGroupFormulaAux(
     DataTable rs, 
     cReportFormulaInt fint, 
     String colName, 
     String keyParam)
 {
     for (int i = 0; i < rs.Columns.Count; i++)
     {
         if (colName.ToLower() == rs.Columns[i].ColumnName.ToLower())
         {
             if (fint.getParameters().item(keyParam) == null)
             {
                 fint.getParameters().add2("", keyParam);
             }
             fint.getParameters().item(keyParam).setValue(i.ToString());
             break;
         }
     }
 }
        private void evalAddToVar(cReportFormulaInt fint)
        {
            String varName = "";

            varName = fint.getParameters().item(0).getValue();

            if (m_variables.item(varName) == null)
            {
                throw new ReportArgumentMissingException(
                    C_MODULE,
                    cReportError.errGetDescript(
                                    csRptErrors.CSRPTERRMISSINGPARAM,
                                    varName,
                                    "_evalAddToVar"));
            }

            cReportVariable w_item = m_variables.item(varName);
            // the EvalAddToVar function is for numbers
            //
            w_item.setValue((double)w_item.getValue() 
                                + pGetNumber(fint.getParameters().item(1).getValue()));
        }