Exemple #1
0
        public void UpdateRowAmountPercent(CalculationModel model, CalculationItemModel calRow, decimal value, bool skipBaseGroupRows = false)
        {
            //decimal iBaseAmount = model.MasterAmount;
            decimal iBaseAmount = model.CalculationViewItems.Where(item => item.Group == calRow.Group && item.IsSummary).LastOrDefault().Total;

            //x*100 + 0.01*100 = 9900
            //x is value
            //100 is fix number (from 100 percent)
            //0.01 is x as percentage (eg 1/100)
            //9900 is base amount

            //101x = 9900
            //x = 9900 / 101 = 98.0198
            if (value > 0)
            {
                //must set value first
                calRow.AmountPercent = value;

                //get summary from all item by particular group
                decimal iSummaryAllItems = model.CalculationViewItems.FindAll(item => item.Group == calRow.Group && !item.IsSummary).Sum(item => item.AmountPercent);

                //calculation
                decimal iCalculation = (iBaseAmount * 100) / (100 + iSummaryAllItems) * (value / 100);
                calRow.AmountFix = iCalculation;
                calRow.Total     = iCalculation;
            }
        }
Exemple #2
0
        public void UpdateRowAmountFix(CalculationModel model, CalculationItemModel calRow, decimal value, bool skipBaseGroupRows = false)
        {
            //decimal iBaseAmount = model.MasterAmount;
            decimal iBaseAmount = model.CalculationViewItems.Where(item => item.Group == calRow.Group && item.IsSummary).LastOrDefault().Total;

            //if (!skipBaseGroupRows)
            //{
            //    //get summary from group's total row
            //    iBaseAmount = GetCalculationBaseSummaryGroups(model, calRow);
            //}

            //calculate
            //must set value first
            calRow.AmountFix = value;
            if (iBaseAmount > 0)
            {
                //get summary from all item by particular group
                decimal iSummaryAllItems = model.CalculationViewItems.FindAll(item => item.Group == calRow.Group && !item.IsSummary).Sum(item => item.AmountFix);

                //(x / (99 - x) * 100) = y
                //x is value
                //99 is base amount
                //y is resut (amount percent0
                calRow.AmountPercent = (value / (iBaseAmount - iSummaryAllItems)) * 100;
                //calRow.AmountPercent = (value / (iBaseAmount - value)) * 100;
            }
            calRow.Total = calRow.AmountFix;
        }
Exemple #3
0
        void UpdateRowAmountPercentSpecial(CalculationModel model, CalculationItemModel calRow, decimal value)
        {
            //decimal iBaseAmount = model.MasterAmount;
            decimal iBaseAmount = model.CalculationViewItems.Where(item => item.Group == calRow.Group && item.IsSummary).LastOrDefault().Total;

            calRow.AmountPercent = value;
            calRow.AmountFix     = (value / 100) * iBaseAmount;
            calRow.Total         = calRow.AmountFix;
        }
Exemple #4
0
        public void UpdateMarginRowAmountVariable(CalculationModel model, int rowID, decimal value)
        {
            //get margin item by tag
            CalculationItemModel oModel = model.CalculationMarginViewItems[rowID];

            if (oModel != null)
            {
                oModel.VariableTotal = value;
            }
        }
        public void UpdateCalculationRowCurrency(CalculationModel model, int rowID, string currency)
        {
            //only BEK and GA can change currency
            CalculationItemModel oCalRow = model.CalculationViewItems[rowID];

            if (oCalRow != null)
            {
                //CHF or custom one
                oCalRow.Currency.Currency = currency;
            }
        }
        public string GetCalculationRowUnitValue(CalculationModel model, int rowID)
        {
            CalculationItemModel oCalRow = model.CalculationViewItems[rowID];

            if (oCalRow != null && oCalRow.Convert != null)
            {
                return(oCalRow.Convert.Unit);
            }

            return("");
        }
        public string GetCalculationRowCurrencyValue(CalculationModel model, int rowID)
        {
            CalculationItemModel oCalRow = model.CalculationViewItems[rowID];

            if (oCalRow != null)
            {
                return(oCalRow.Currency.Currency);
            }

            return("");
        }
Exemple #8
0
        public void UpdateMarginRowEditedField(CalculationModel model, int rowID, string field)
        {
            //P percent, F fix, V variable total, T total

            //get margin item by tag
            CalculationItemModel oModel = model.CalculationMarginViewItems[rowID];

            if (oModel != null)
            {
                oModel.EditedField = field;
            }
        }
Exemple #9
0
        decimal GetCalculationBaseSummaryGroups(CalculationModel model, CalculationItemModel calRow)
        {
            decimal iSumCalRow = 0;

            var oCalculationRows = model.CalculationViewItems.FindAll(item => item.IsSummary && item.Group == calRow.Group);

            if (oCalculationRows != null)
            {
                iSumCalRow = (from row in oCalculationRows select row.Total).Sum();
            }

            return(iSumCalRow);
        }
        void SetPredefineProfitAmount()
        {
            //set predefined profit amount for each scale
            int iScaleCount = _Model.CalculationNotes.Count(item => item.ID > 0);

            if (iScaleCount > 1)
            {
                if (_Model.GeneralSetting.PriceScale.MinProfit > 0 && _Model.GeneralSetting.PriceScale.MaxProfit > 0)
                {
                    //everage amount excluded first item
                    decimal iEverageAmount = (_Model.GeneralSetting.PriceScale.MaxProfit -
                                              _Model.GeneralSetting.PriceScale.MinProfit) / (iScaleCount - 1);

                    //scale item start from ID 1
                    for (int i = 0; i < iScaleCount; i++)
                    {
                        decimal iProfitAmount = 0;
                        if (i == 0)
                        {
                            // set first predefined
                            iProfitAmount = _Model.GeneralSetting.PriceScale.MaxProfit;
                        }
                        else if (i == (iScaleCount - 1))
                        {
                            // set last predefined
                            iProfitAmount = _Model.GeneralSetting.PriceScale.MinProfit;
                        }
                        else
                        {
                            // set rest predefined
                            //iProfitAmount = iEverageAmount * ((_Model.CalculationNotes.Count - 1) - i);
                            iProfitAmount = _Model.GeneralSetting.PriceScale.MaxProfit - (iEverageAmount * i);
                        }

                        //update amount to calculation model
                        //if percent or fix predefined
                        CalculationItemModel oCalRow = _Model.CalculationNotes[i + 1].CalculationItems[0];
                        if (_Model.GeneralSetting.PriceScale.MarkUp == "P")
                        {
                            oCalRow.EditedField = "P";
                            _Calculation.UpdateRowAmountPercent(_Model, oCalRow, iProfitAmount, skipBaseGroupRows: true);
                        }
                        else
                        {
                            oCalRow.EditedField = "F";
                            _Calculation.UpdateRowAmountFix(_Model, oCalRow, iProfitAmount, skipBaseGroupRows: true);
                        }
                    }
                }
            }
        }
        void UpdateRowAmountPercentSpecial(CalculationModel model, CalculationItemModel calRow, decimal value)
        {
            //decimal iBaseAmount = model.MasterAmount;
            decimal iBaseAmount = model.CalculationViewItems[0].AmountFix;

            if (model.CalculationViewItems[0].Currency.Currency != "CHF")
            {
                iBaseAmount = model.CalculationViewItems[0].Total;
            }

            if (calRow.BaseCalculationGroupRows != null)
            {
                iBaseAmount = GetCalculationBaseSummaryGroups(model, calRow.BaseCalculationGroupRows);
            }

            //formular for SKT, PV, RBT(maximum input is 99.99 %
            // if edit one cell only (SKT or PV or RBT)
            // [90 % +10 % from input = 100 %]    [10 % from input]
            // 108.131 from (VK(bar))
            // (((100 / 90) * 108.131) *          (10 / 100))        = 12.0145555556

            //if edit multiple cell (SKT, PV)
            // get multiple summary percent first
            // if SKT = 4, PV = 6 so sum is 10
            // so if SKT = 1
            // [90 % +10 % from input = 100 %]    [10 % from input]
            // 108.131 from (VK(bar))
            // (((100 / 90) * 108.131) *          (10 / 100))        = 12.0145555556
            // SKT = 12.0145555556 * (4/10) = 4.80582222224 (40%)
            // PV = 12.0145555556 * (6/10) = 7.20873333336 (60%)

            decimal iDiffer = 100 - value;

            calRow.AmountPercent = value;
            calRow.AmountFix     = (((100 / iDiffer) * iBaseAmount) * (value / 100));

            if (calRow.Tag == "SKT" || calRow.Tag == "PV")
            {
                decimal iSummaryPercent  = value;
                var     oCalculationRows = model.CalculationViewItems.FindAll(item => !item.IsSummary && item.Group == calRow.Group);
                iSummaryPercent = oCalculationRows.Sum(item => item.AmountPercent);

                if (iSummaryPercent > 0 && iSummaryPercent < 100)
                {
                    iDiffer          = 100 - iSummaryPercent;
                    calRow.AmountFix = (((100 / iDiffer) * iBaseAmount) * (iSummaryPercent / 100)) * (value / iSummaryPercent);
                }
            }

            calRow.Total = calRow.AmountFix;
        }
Exemple #12
0
        public decimal GetMarginSummarize(CalculationModel model)
        {
            decimal iSummary = 0;

            CalculationItemModel oVK       = model.CalculationMarginViewItems.Find(item => item.Tag == "VK");
            CalculationItemModel oVKbrutto = model.CalculationMarginViewItems.Find(item => item.Tag == "VK(brutto)");

            if (oVK != null && (oVKbrutto != null && oVKbrutto.VariableTotal > 0))
            {
                iSummary = (oVK.VariableTotal / oVKbrutto.VariableTotal) * 100;
            }

            return(iSummary);
        }
        public void UpdateCalculationRowUnit(CalculationModel model, int rowID, string unit)
        {
            CalculationItemModel oCalRow = model.CalculationViewItems[rowID];

            if (oCalRow != null && oCalRow.Convert != null)
            {
                //// if not edit cell, set F (fix) as default when click convert button
                //if (String.IsNullOrWhiteSpace(oCalRow.Convert.ConvertAmountField))
                //{
                //    oCalRow.Convert.ConvertAmountField = "F";
                //}

                oCalRow.Convert.Unit = unit;
            }
        }
Exemple #14
0
        public void UpdateCalculationRowAmount(CalculationModel model, int rowID, decimal value, bool isPercent, bool specialCalculation, bool isCellEdit)
        {
            CalculationItemModel oCalRow = model.CalculationViewItems[rowID];

            //if edited value on grid's cell
            if (isCellEdit)
            {
                //set edited column
                if (oCalRow != null)
                {
                    oCalRow.EditedField = isPercent ? "P" : "F";
                }
            }

            UpdateCalculationRowAmount(model, oCalRow, value, isPercent, specialCalculation);
        }
Exemple #15
0
        void UpdateRowAmountFixSpecial(CalculationModel model, CalculationItemModel calRow, decimal value)
        {
            //decimal iBaseAmount = model.MasterAmount;
            decimal iBaseAmount = model.CalculationViewItems.Where(item => item.Group == calRow.Group && item.IsSummary).LastOrDefault().Total;

            calRow.AmountFix = value;
            if (iBaseAmount > 0)
            {
                //if special
                //(x / (99) * 100) = y
                //x is value
                //99 is base amount
                //y is resut (amount percent0
                calRow.AmountPercent = (value / (iBaseAmount)) * 100;
            }
            calRow.Total = calRow.AmountFix;
        }
        public string GetCalculationRowCurrencyFieldEditable(CalculationModel model, int rowID)
        {
            //set editable currency field
            CalculationItemModel oCalRow = model.CalculationViewItems[rowID];

            //if (oCalRow != null && oCalRow.Currency != null)
            //{
            //    //return editable currency field
            //    return oCalRow.Currency.CurrencyBaseAmountField;
            //}

            if (oCalRow != null && oCalRow.EditedField != null)
            {
                //return editable currency field
                return(oCalRow.EditedField == "F" ? "F" : "");
            }

            return("");
        }
        void UpdateCalculationRowAmount(CalculationModel model, CalculationItemModel calRow, decimal value, bool isPercent, bool specialCalculation)
        {
            if (calRow != null)
            {
                //if not master amount row
                //master row's group is 0
                if (calRow.Group != 0)
                {
                    if (isPercent)
                    {
                        if (specialCalculation)
                        {
                            UpdateRowAmountPercentSpecial(model, calRow, value);
                        }
                        else
                        {
                            UpdateRowAmountPercent(model, calRow, value);
                        }
                    }
                    else
                    {
                        UpdateRowAmountFix(model, calRow, value);
                    }
                }
                else
                {
                    //set row's total amount
                    //master row
                    calRow.Total = value;

                    //if currency needed
                    //if master amount
                    if (calRow.Currency != null && calRow.Currency.Currency != "CHF" && calRow.EditedField == "F")
                    {
                        if (model.GeneralSetting.Currency.Rate > 0)
                        {
                            calRow.Total = (value * model.GeneralSetting.Currency.Rate);
                        }
                    }
                }
            }
        }
Exemple #18
0
        void UpdateGroupAmount(CalculationModel model, int group, int groupID)
        {
            CalculationItemModel oGroup = model.CalculationMarginViewItems.Find(item => item.Group == group && item.ItemOrder == groupID && item.IsSummary);

            if (oGroup != null)
            {
                oGroup.VariableTotal = 0;
                oGroup.AmountFix     = 0;

                //set Verwaltungs- und Vertriebskosten
                if (oGroup.Tag == "VVK")
                {
                    oGroup.Total = 0;
                }

                //update items in group list first
                foreach (int i in oGroup.SummaryGroups)
                {
                    //get items per group
                    var oModels = model.CalculationMarginViewItems.FindAll(item => item.Group == i && !item.IsSummary);

                    //update group's amout fix
                    oGroup.AmountFix += (from item in oModels select item.AmountFix).Sum();

                    //update group's variable total
                    oGroup.VariableTotal += (from item in oModels select item.VariableTotal).Sum();

                    if (oGroup.Tag == "VVK")
                    {
                        oGroup.Total += (from item in oModels select item.Total).Sum();
                    }
                }

                //set Deckungsbeitrag
                if (oGroup.Tag == "VK")
                {
                    oGroup.VariableTotal = oGroup.AmountFix;
                }
            }
        }
Exemple #19
0
 void UpdateCalculationRowAmount(CalculationModel model, CalculationItemModel calRow, decimal value, bool isPercent, bool specialCalculation)
 {
     if (calRow != null)
     {
         //if not master amount row
         //master row's is VK(brutto)
         if (calRow.Tag != "VK(brutto)")
         {
             if (isPercent)
             {
                 if (specialCalculation)
                 {
                     UpdateRowAmountPercentSpecial(model, calRow, value);
                 }
                 else
                 {
                     UpdateRowAmountPercent(model, calRow, value);
                 }
             }
             else
             {
                 if (specialCalculation)
                 {
                     UpdateRowAmountFixSpecial(model, calRow, value);
                 }
                 else
                 {
                     UpdateRowAmountFix(model, calRow, value);
                 }
             }
         }
         else
         {
             //set row's total amount
             //master row
             calRow.Total = value;
         }
     }
 }
        public void UpdateRowAmountFix(CalculationModel model, CalculationItemModel calRow, decimal value, bool skipBaseGroupRows = false)
        {
            //decimal iBaseAmount = model.MasterAmount;
            decimal iBaseAmount = model.CalculationViewItems[0].AmountFix;

            if (model.CalculationViewItems[0].Currency.Currency != "CHF")
            {
                iBaseAmount = model.CalculationViewItems[0].Total;
            }

            if (!skipBaseGroupRows)
            {
                //get summary from above rows in gridview
                if (calRow.BaseCalculationGroupRows != null)
                {
                    iBaseAmount = GetCalculationBaseSummaryGroups(model, calRow.BaseCalculationGroupRows);
                }
            }

            //calculate
            calRow.AmountFix = value;
            if (iBaseAmount > 0)
            {
                calRow.AmountPercent = (value / iBaseAmount) * 100;
            }
            calRow.Total = calRow.AmountFix;


            //if currency needed
            //calRow.Currency.CurrencyBaseAmountField == "F"
            if (calRow.EditedField == "F")
            {
                //calRow.Currency.OriginalAmount = calRow.AmountPercent;
                if (model.GeneralSetting.Currency.Rate > 0)
                {
                    if (calRow.Currency.Currency != "CHF")
                    {
                        //calRow.AmountPercent = calRow.AmountPercent * model.GeneralSetting.Currency.Rate;
                        calRow.AmountPercent = calRow.AmountPercent * model.GeneralSetting.Currency.Rate;
                        calRow.Total         = iBaseAmount * (calRow.AmountPercent / 100);
                    }
                }
            }


            //if convert needed
            //if edit F convert P
            if (calRow.Convert != null)
            {
                if (calRow.EditedField == "F")
                {
                    if (calRow.Convert.Unit == "VE" && model.GeneralSetting.Convert.UnitNumber > 0)
                    {
                        calRow.AmountPercent = calRow.AmountPercent / model.GeneralSetting.Convert.UnitNumber;
                        calRow.Total         = (calRow.AmountPercent / 100) * iBaseAmount;
                    }

                    //if (calRow.Convert.Unit == "EE")
                    //{
                    //    calRow.Convert.OriginalAmount = calRow.AmountPercent;
                    //}
                    //else if (calRow.Convert.Unit == "VE" && model.GeneralSetting.Convert.UnitNumber > 0)
                    //{
                    //    calRow.AmountPercent = calRow.AmountPercent / model.GeneralSetting.Convert.UnitNumber;
                    //    calRow.Total = (calRow.AmountPercent / 100) * iBaseAmount;
                    //}
                }
            }
        }
        public void UpdateRowAmountPercent(CalculationModel model, CalculationItemModel calRow, decimal value, bool skipBaseGroupRows = false)
        {
            //decimal iBaseAmount = model.MasterAmount;
            decimal iBaseAmount = model.CalculationViewItems[0].AmountFix;

            if (model.CalculationViewItems[0].Currency.Currency != "CHF")
            {
                iBaseAmount = model.CalculationViewItems[0].Total;
            }

            if (!skipBaseGroupRows)
            {
                //get summary from above rows in gridview
                if (calRow.BaseCalculationGroupRows != null)
                {
                    iBaseAmount = GetCalculationBaseSummaryGroups(model, calRow.BaseCalculationGroupRows);
                }
            }

            //original row's fix-amount
            decimal iOriginalFixAmount = calRow.AmountFix;

            calRow.AmountPercent = value;
            calRow.AmountFix     = iBaseAmount * (calRow.AmountPercent / 100);
            calRow.Total         = calRow.AmountFix;

            ////if currency needed
            ////calRow.Currency.CurrencyBaseAmountField == "F"
            //if (calRow.Currency != null && calRow.EditedField == "F")
            //{
            //    //calRow.Currency.OriginalAmount = calRow.AmountPercent;
            //    if (model.GeneralSetting.Currency.Rate > 0)
            //    {
            //        if (calRow.Currency.Currency != "CHF")
            //        {
            //            //calRow.AmountPercent = calRow.AmountPercent * model.GeneralSetting.Currency.Rate;
            //            calRow.AmountPercent = ((iOriginalFixAmount / iBaseAmount) * 100) * model.GeneralSetting.Currency.Rate;
            //            calRow.AmountFix = iOriginalFixAmount;
            //            calRow.Total = iBaseAmount * (calRow.AmountPercent / 100);
            //        }
            //        else
            //        {
            //            calRow.AmountPercent = (iOriginalFixAmount / iBaseAmount) * 100;
            //            calRow.AmountFix = iOriginalFixAmount;
            //            calRow.Total = calRow.AmountFix;
            //        }
            //    }
            //}


            //if convert needed
            //!String.IsNullOrWhiteSpace(calRow.Convert.ConvertAmountField)
            //if edit P convert F
            if (calRow.Convert != null)
            {
                if (calRow.EditedField == "P")
                {
                    if (calRow.Convert.Unit == "VE" && model.GeneralSetting.Convert.UnitNumber > 0)
                    {
                        calRow.AmountFix = calRow.AmountFix / model.GeneralSetting.Convert.UnitNumber;
                        calRow.Total     = calRow.AmountFix;
                    }
                }

                //if (calRow.EditedField == "F")
                //{
                //    if (calRow.Convert.Unit == "VE" && model.GeneralSetting.Convert.UnitNumber > 0)
                //    {
                //        calRow.AmountFix = calRow.AmountFix / model.GeneralSetting.Convert.UnitNumber;
                //        calRow.Total = calRow.AmountFix;
                //    }
                //}
                //else if (String.IsNullOrWhiteSpace(calRow.EditedField) || calRow.EditedField == "P")
                //{
                //    //if currency with unit
                //    if (calRow.Currency != null && calRow.EditedField == "F")
                //    {
                //        if (calRow.Convert.Unit == "VE" && model.GeneralSetting.Convert.UnitNumber > 0)
                //        {
                //            calRow.Convert.OriginalAmount = calRow.AmountPercent;

                //            calRow.AmountPercent = calRow.AmountPercent / model.GeneralSetting.Convert.UnitNumber;
                //            calRow.Total = iBaseAmount * (calRow.AmountPercent / 100);
                //        }
                //    }
                //    else
                //    {
                //        calRow.Convert.OriginalAmount = calRow.Convert.OriginalAmount > 0 ? calRow.Convert.OriginalAmount : value;

                //        //only unit
                //        //calling from summary-all functionals
                //        if (calRow.Convert.Unit == "EE")
                //        {
                //            //calRow.Convert.OriginalAmount = calRow.AmountPercent;
                //            calRow.AmountPercent = calRow.Convert.OriginalAmount;
                //            calRow.AmountFix = iBaseAmount * (calRow.AmountPercent / 100);
                //            calRow.Total = calRow.AmountFix;
                //        }
                //        else if (calRow.Convert.Unit == "VE" && model.GeneralSetting.Convert.UnitNumber > 0)
                //        {
                //            calRow.AmountPercent = calRow.Convert.OriginalAmount;
                //            calRow.AmountFix = iBaseAmount * (calRow.AmountPercent / 100);

                //            calRow.AmountPercent = calRow.AmountPercent / model.GeneralSetting.Convert.UnitNumber;
                //            calRow.Total = (iBaseAmount * (calRow.AmountPercent / 100));
                //        }
                //    }
                //}
            }
        }
        void UpdateGroupAmount(CalculationModel model, int group, int groupID, bool updateGroupOnly)
        {
            CalculationItemModel oGroup = model.CalculationViewItems.Find(item => item.Group == group && item.ItemOrder == groupID && item.IsSummary);

            if (oGroup != null)
            {
                oGroup.Total = 0;

                //update items in group list first
                foreach (int i in oGroup.SummaryGroups)
                {
                    //get items per group
                    var oModels = model.CalculationViewItems.FindAll(item => item.Group == i && !item.IsSummary);

                    if (!updateGroupOnly)
                    {
                        foreach (CalculationItemModel item in oModels)
                        {
                            bool isSpecial = false;
                            if (item.Group == 0)
                            {
                                //if (item.Currency.Currency != "CHF")
                                //{
                                //    //if use custom currency
                                //    UpdateCalculationRowAmount(model, item.Order, item.Total, false, isSpecial, false);
                                //}
                                //else
                                //{
                                //    UpdateCalculationRowAmount(model, item.Order, item.AmountFix, false, isSpecial, false);
                                //}

                                UpdateCalculationRowAmount(model, item.ItemOrder, item.AmountFix, false, isSpecial, false);
                            }
                            else
                            {
                                //if special row
                                if (item.Tag == "SKT" || item.Tag == "PV" || item.Tag == "RBT")
                                {
                                    isSpecial = true;
                                }

                                if (item.EditedField == "P" || String.IsNullOrWhiteSpace(item.EditedField))
                                {
                                    UpdateCalculationRowAmount(model, item.ItemOrder, item.AmountPercent, true, isSpecial, false);
                                }
                                else
                                {
                                    ////if currency
                                    //if (model.GeneralSetting.Currency.Mode == "E" && item.Currency != null)
                                    //{
                                    //    //allow change currency if edited amount fix only
                                    //    //able to change currency amount percent only
                                    //    UpdateCalculationRowAmount(model, item.ItemOrder, item.AmountPercent, true, isSpecial, false);
                                    //}
                                    //else
                                    //{
                                    //    UpdateCalculationRowAmount(model, item.ItemOrder, item.AmountFix, false, isSpecial, false);
                                    //}


                                    UpdateCalculationRowAmount(model, item.ItemOrder, item.AmountFix, false, isSpecial, false);
                                }

                                ////if use scale
                                //if (model.ScaleCalculationItems.Count > 1 && item.Tag == "GA")
                                //{
                                //    if (model.GeneralSetting.PriceScale.MarkUp == "F")
                                //    {
                                //        UpdateCalculationRowAmount(model, item.Order, item.AmountFix, false, isSpecial, false);
                                //    }
                                //    else
                                //    {
                                //        UpdateCalculationRowAmount(model, item.Order, item.AmountPercent, true, isSpecial, false);
                                //    }
                                //}
                                //else
                                //{
                                //    //if not use scale
                                //    UpdateCalculationRowAmount(model, item.Order, item.AmountPercent, true, isSpecial, false);
                                //}
                            }

                            //if special field
                            if (isSpecial)
                            {
                                //if convert needed for group
                                if (item.Convert != null && item.Convert.Unit == "VE")
                                {
                                    if (model.GeneralSetting.Convert.UnitNumber > 0)
                                    {
                                        item.Total = item.Total / model.GeneralSetting.Convert.UnitNumber;
                                    }
                                }
                            }
                        }
                    }

                    //update group's total only
                    oGroup.Total += (from item in oModels select item.Total).Sum();
                }

                //if convert needed for group
                if (oGroup.Convert != null && oGroup.Convert.Unit == "VE")
                {
                    if (//_Model.GeneralSetting.Convert.VEUnitNumber > 0 &&
                        //_Model.GeneralSetting.Convert.EEUnitNumber > 0 &&
                        model.GeneralSetting.Convert.UnitNumber > 0)
                    {
                        oGroup.Total = oGroup.Total / model.GeneralSetting.Convert.UnitNumber;
                    }
                }
            }
        }
Exemple #23
0
        void UpdateGroupAmount(CalculationModel model, CalculationItemModel groupRow, bool updateGroupOnly)
        {
            //CalculationItemModel oGroup = model.CalculationViewItems.Find(item => item.Group == group && item.Order == groupID && item.IsSummary);

            if (groupRow != null && groupRow.CostCalculatonGroup != null)
            {
                //get calculation items from group below (as see in gridview)
                //get items per group

                decimal iItemSummary = 0;
                if (groupRow.CostCalculatonGroup.BaseCalculationGroupRows.Count > 0)
                {
                    var oModels = model.CalculationViewItems.FindAll(
                        item => !item.IsSummary &&
                        groupRow.CostCalculatonGroup.BaseCalculationGroupRows.Contains(item.Group));

                    foreach (CalculationItemModel item in oModels)
                    {
                        bool isSpecial = false;
                        if (item.Group == 0)
                        {
                            UpdateCalculationRowAmount(model, item.ItemOrder, item.AmountFix, false, isSpecial, false);
                        }
                        else
                        {
                            //if special row
                            if (item.Tag == "SKT" || item.Tag == "PV" || item.Tag == "RBT")
                            {
                                isSpecial = true;
                            }

                            if (item.EditedField == "P" || String.IsNullOrWhiteSpace(item.EditedField))
                            {
                                UpdateCalculationRowAmount(model, item.ItemOrder, item.AmountPercent, true, isSpecial, false);
                            }
                            else
                            {
                                UpdateCalculationRowAmount(model, item.ItemOrder, item.AmountFix, false, isSpecial, false);
                            }
                        }
                    }

                    //update group's total
                    iItemSummary = (from row in oModels select row.Total).Sum();
                }

                decimal iItemGroupSummary = 0;
                if (groupRow.CostCalculatonGroup.SummaryGroups.Count > 0)
                {
                    iItemGroupSummary = (from row in model.CalculationViewItems
                                         where
                                         row.IsSummary &&
                                         groupRow.CostCalculatonGroup.SummaryGroups.Contains(row.Group)
                                         select row.Total).Sum();

                    //update group's total only
                    groupRow.Total = iItemGroupSummary - iItemSummary;
                }
                else
                {
                    //if no summary group like VVK
                    //update group's total only
                    groupRow.Total = iItemSummary;
                }
            }
        }
Exemple #24
0
        public void UpdateBaseAmountAll(CalculationModel model)
        {
            if (model.CalculationMarginViewItems == null)
            {
                return;
            }

            //if margin not enabled
            if (!model.GeneralSetting.Options.Contains("M"))
            {
                return;
            }

            //get margin item by tag
            var oModels = model.CalculationMarginViewItems.FindAll(item => !item.IsSummary);

            foreach (CalculationItemModel oMargin in oModels)
            {
                CalculationItemModel oBasic = model.CalculationViewItems.Where(o => o.Tag == oMargin.Tag).FirstOrDefault();

                if (oBasic != null)
                {
                    oMargin.Total = oBasic.Total;
                }
                else
                {
                    //if BEN tag
                    oMargin.Total = model.CalculationViewItems.Where(o => o.Tag.StartsWith("BEN")).Sum(o => o.Total);
                }

                //set variable total
                if (oMargin.Tag == "BEK" || oMargin.Tag == "VK(bar)" || oMargin.Tag == "VK(brutto)")
                {
                    //if base amount row
                    oMargin.VariableTotal = oMargin.Total;
                }
                else
                {
                    if (oMargin.EditedField == "P")
                    {
                        //calculate amount fix
                        oMargin.AmountFix = oMargin.Total * (oMargin.AmountPercent / 100);

                        //calculate variable total
                        oMargin.VariableTotal = oMargin.Total - oMargin.AmountFix;
                    }
                    else if (oMargin.EditedField == "F")
                    {
                        //calculate amount fix
                        oMargin.AmountPercent = (oMargin.AmountFix / oMargin.Total) * 100;

                        //calculate variable total
                        oMargin.VariableTotal = oMargin.Total - oMargin.AmountFix;
                    }
                    else if (oMargin.EditedField == "V")
                    {
                        //calculate amount fix
                        oMargin.AmountFix = oMargin.Total - oMargin.VariableTotal;

                        //calculate amount percent
                        oMargin.AmountPercent = (oMargin.AmountFix / oMargin.Total) * 100;
                    }
                    else
                    {
                        //calculate amount fix
                        oMargin.AmountFix = oMargin.Total * (oMargin.AmountPercent / 100);

                        //calculate variable total
                        oMargin.VariableTotal = oMargin.Total - oMargin.AmountFix;
                    }
                }
            }

            //update group amount
            var oGroups = model.CalculationMarginViewItems.FindAll(item => item.IsSummary);

            foreach (CalculationItemModel item in oGroups)
            {
                UpdateGroupAmount(model, item.Group, item.ItemOrder);
            }
        }