private static void UpdateTCCommitFunds(this List <CommitFundRowViewModel> viewmodel, ClientFieldData[] formData, string table)
        {
            var originalOutputs = viewmodel.ToDictionary(x => x.Id, x => x.ActiveOutputs);

            viewmodel.Clear();

            var itemsTable = formData.Where(x => x.Name.Contains(table));
            var itemsList  = itemsTable.Where(x => x.Id != null && x.Id != "new-").GroupBy(x => x.Id);

            ClientFieldData field;

            foreach (var item in itemsList)
            {
                var model = new CommitFundRowViewModel();

                if (!item.Key.Contains("new-"))
                {
                    model.Id = int.Parse(item.Key);
                }

                field = item.FirstOrDefault(x => x.Name == table + "-ApprovalNumber_text");
                model.ApprovalNumber = field.ConvertToString();

                field = item.FirstOrDefault(x => x.Name == table + "hiddenOperationNumber");
                model.OperatinNumber = field.ConvertToString();

                field = item.FirstOrDefault(x => x.Name == table + "ApprovalCurrency");
                model.ApprovalCurrency = field.ConvertToString();

                field = item.FirstOrDefault(x => x.Name == table + "-hiddenTotalFunds");
                model.TotalFundsCurrentlyAvailable = field.ConvertToDecimal(
                    mode: ConvertModeEnum.ThrowExceptionInFail);

                field = item.FirstOrDefault(x => x.Name == table + "-originalFunds");
                model.OriginalProcurementEstimate = field.ConvertToDecimal(
                    mode: ConvertModeEnum.ThrowExceptionInFail);

                field = item.FirstOrDefault(x => x.Name == table + "-activeOutputs");
                var outputIds = field.ConvertToIntList();
                if (originalOutputs.ContainsKey(model.Id))
                {
                    model.ActiveOutputs = originalOutputs[model.Id];
                    model.ActiveOutputs.ForEach(x => x.Select = outputIds.Contains(int.Parse(x.Value)));
                }
                else
                {
                    outputIds.ForEach(x => model.ActiveOutputs.Add(new ListItemViewModel()
                    {
                        Value  = x.ToString(),
                        Select = true
                    }));
                }

                viewmodel.Add(model);
            }
        }
        private static void UpdateCommitFunds(this List <CommitFundRowViewModel> viewmodel, ClientFieldData[] formData, string table)
        {
            viewmodel.Clear();

            var itemsTable = formData.Where(x => x.Name.Contains(table));
            var itemsList  = itemsTable.Where(x => x.Id != null && x.Id != "new-").GroupBy(x => x.Id);

            ClientFieldData field;

            foreach (var item in itemsList)
            {
                var model = new CommitFundRowViewModel();

                if (!item.Key.Contains("new-"))
                {
                    model.Id = int.Parse(item.Key);
                }

                field = item.FirstOrDefault(x => x.Name == table + "-ApprovalNumber_text");
                model.ApprovalNumber = field.ConvertToString();

                field = item.FirstOrDefault(x => x.Name == table + "hiddenOperationNumber");
                model.OperatinNumber = field.ConvertToString();

                field = item.FirstOrDefault(x => x.Name == table + "ApprovalCurrency");
                model.ApprovalCurrency = field.ConvertToString();

                field = item.FirstOrDefault(x => x.Name == table + "-hiddenTotalFunds");
                model.TotalFundsCurrentlyAvailable = field.ConvertToDecimal(
                    mode: ConvertModeEnum.ThrowExceptionInFail);

                field = item.FirstOrDefault(x => x.Name == table + "-originalFunds");
                model.OriginalProcurementEstimate = field.ConvertToDecimal(
                    mode: ConvertModeEnum.ThrowExceptionInFail);

                viewmodel.Add(model);
            }
        }
        private static void UpdateNegCommitFunds(this List <CommitFundRowViewModel> viewmodel, ClientFieldData[] formData, string table)
        {
            viewmodel.Clear();

            var itemsTable = formData.Where(x => x.Name.Contains(table));
            var itemsList  = itemsTable.Where(x => x.Id != null && x.Id != "new-").GroupBy(x => x.Id);

            ClientFieldData field;

            foreach (var item in itemsList)
            {
                var model = new CommitFundRowViewModel();

                if (!item.Key.Contains("new-"))
                {
                    model.Id = int.Parse(item.Key);
                }

                field = item.FirstOrDefault(x => x.Name == table + "-ApprovalNumber");
                if (field == null)
                {
                    field = item.FirstOrDefault(x => x.Name == table + "-ProductActivityNumber");
                }

                model.ApprovalNumber = field.ConvertToString();

                field = item.FirstOrDefault(x => x.Name == table + "-IsIdentificationHidden");
                model.IsIdentification = field.ConvertToBool();

                field = item.FirstOrDefault(x => x.Name == table + "-fundsAvailableAtStartHidden");
                model.OriginalProcurementEstimate = field.ConvertToNullableDecimal();

                if (table == "NegCommitFundsNormal")
                {
                    field = item.FirstOrDefault(x => x.Name == table + "-HiddenOperationNumber");
                    model.OperatinNumber = field.ConvertToString();

                    field = item.FirstOrDefault(x => x.Name == table + "-ApprovalCurrency");
                    model.ApprovalCurrency = field.ConvertToString();

                    field           = item.FirstOrDefault(x => x.Name == table + "-LMSNumber");
                    model.LMSNumber = field.ConvertToString();

                    field             = item.FirstOrDefault(x => x.Name == table + "-CMOCurrency");
                    model.CMOCurrency = field.ConvertToString();

                    field = item.FirstOrDefault(x => x.Name == table + "-CMOCurrentAmountApproval");
                    model.CMOCurrentAmountApproval = field.ConvertToNullableDecimal();

                    field = item.FirstOrDefault(x => x.Name == table + "-CMOCurrentAmount");
                    model.CMOCurrentAmount = field.ConvertToNullableDecimal();
                }
                else
                {
                    field          = item.FirstOrDefault(x => x.Name == table + "-PONumber");
                    model.PONumber = field.ConvertToString();

                    field = item.FirstOrDefault(x => x.Name == table + "-POAmount");
                    model.FinalProcurementAmount = field.ConvertToNullableDecimal();
                }

                viewmodel.Add(model);
            }
        }
        private static void UpdateNegTCCommitFunds(this List <CommitFundRowViewModel> viewmodel, ClientFieldData[] formData, string table)
        {
            var originalOutputs = viewmodel.ToDictionary(x => x.Id, x => Tuple.Create(x.IsIdentification, x.ActiveOutputs));

            viewmodel.Clear();

            var itemsTable = formData.Where(x => x.Name.Contains(table));
            var itemsList  = itemsTable.Where(x => x.Id != null && x.Id != "new-").GroupBy(x => x.Id);

            ClientFieldData field;

            foreach (var item in itemsList)
            {
                var model = new CommitFundRowViewModel();

                if (!item.Key.Contains("new-"))
                {
                    model.Id = int.Parse(item.Key);
                }

                field = item.FirstOrDefault(x => x.Name == table + "-ApprovalNumber");
                if (field == null)
                {
                    field = item.FirstOrDefault(x => x.Name == table + "-ProductActivityNumber");
                }

                model.ApprovalNumber = field.ConvertToString();

                field = item.FirstOrDefault(x => x.Name == table + "-IsIdentificationHidden");
                model.IsIdentification = field.ConvertToBool();

                field = item.FirstOrDefault(x => x.Name == table + "-fundsAvailableAtStartHidden");
                model.OriginalProcurementEstimate = field.ConvertToNullableDecimal();

                field = item.FirstOrDefault(x => x.Name == table + "-HiddenOperationNumber");
                model.OperatinNumber = field.ConvertToString();

                field = item.FirstOrDefault(x => x.Name == table + "-ApprovalCurrency");
                model.ApprovalCurrency = field.ConvertToString();

                field           = item.FirstOrDefault(x => x.Name == table + "-LMSNumber");
                model.LMSNumber = field.ConvertToString();

                field             = item.FirstOrDefault(x => x.Name == table + "-CMOCurrency");
                model.CMOCurrency = field.ConvertToString();

                field = item.FirstOrDefault(x => x.Name == table + "-CMOCurrentAmountApproval");
                model.CMOCurrentAmountApproval = field.ConvertToNullableDecimal();

                field = item.FirstOrDefault(x => x.Name == table + "-CMOCurrentAmount");
                model.CMOCurrentAmount = field.ConvertToNullableDecimal();

                field = item.FirstOrDefault(x => x.Name == table + "-activeOutputs");
                var outputIds = field.ConvertToIntList();
                if (originalOutputs.ContainsKey(model.Id))
                {
                    model.IsIdentification = originalOutputs[model.Id].Item1;
                    model.ActiveOutputs    = originalOutputs[model.Id].Item2;
                    if (!model.IsIdentification)
                    {
                        model.ActiveOutputs.ForEach(x => x.Select = outputIds.Contains(int.Parse(x.Value)));
                    }
                }
                else
                {
                    outputIds.ForEach(x => model.ActiveOutputs.Add(new ListItemViewModel()
                    {
                        Value  = x.ToString(),
                        Select = true
                    }));
                }

                viewmodel.Add(model);
            }
        }