public ActionResult LancamentoAgrupado(string sAgrupadorID)
        {
            ExpIncAgrupadorModel model = new ExpIncAgrupadorModel();

            if (!string.IsNullOrEmpty(sAgrupadorID) && expenseIncomeBusiness.Get.Any(e => e.sAgrupadorOcorrencia == sAgrupadorID))
            {
                List <ExpenseIncome> lstExpInc = expenseIncomeBusiness.Get.Where(e => e.sAgrupadorOcorrencia == sAgrupadorID).OrderBy(e => e.iNumeroOcorrencia).ToList();

                model.sAgrupadorID    = lstExpInc[0].sAgrupadorOcorrencia;
                model.sDescricao      = lstExpInc[0].sDescricao;
                model.sCategoryID     = lstExpInc[0].sCategoryID;
                model.sNotificationID = lstExpInc[0].sNotificationID;
                string sTemp = lstExpInc[0].sAccountID;
                model.sAccountDesc   = accountBusiness.Get.FirstOrDefault(a => a.sID == sTemp).sNome;
                model.dData          = lstExpInc[0].dData;
                model.dDataBase      = lstExpInc[0].dDataBase;
                model.bDataDiferente = model.dData != model.dDataBase ? true : false;
                model.listaItens     = new List <ExpIncAgrupadorItemModel>();
                foreach (ExpenseIncome expInc in lstExpInc)
                {
                    ExpIncAgrupadorItemModel item = new ExpIncAgrupadorItemModel();
                    item.sID      = expInc.sID;
                    item.dValor   = expInc.dValor;
                    item.bPago    = expInc.bPagoCartaoCredito;
                    item.iParcela = expInc.iNumeroOcorrencia;
                    model.listaItens.Add(item);
                }
                model.listaCategorias = getComboCategorias(new List <CategoryType>()
                {
                    CategoryType.Despesa, CategoryType.Receita
                });
                model.listaNotifications = getComboNotificacoes();
                return(View(model));
            }
            else
            {
                return(RedirectToAction("Lancamento", "ExpenseIncome"));
            }
        }
        public ActionResult LancamentoAgrupado(ExpIncAgrupadorModel model)
        {
            if (ModelState.IsValid)
            {
                using (var scope = new TransactionScope())
                {
                    try
                    {
                        foreach (ExpIncAgrupadorItemModel expIncAgrup in model.listaItens)
                        {
                            if (!string.IsNullOrEmpty(expIncAgrup.sID) && expenseIncomeBusiness.Get.Any(e => e.sID == expIncAgrup.sID))
                            {
                                // Alterar
                                ExpenseIncome expInc = expenseIncomeBusiness.Get.FirstOrDefault(e => e.sID == expIncAgrup.sID);
                                expInc.dData     = model.dData;
                                expInc.dDataBase = model.bDataDiferente ? model.dDataBase : expInc.dData;
                                if (expIncAgrup.dValor <= 0)
                                {
                                    throw new InvalidOperationException("Valor deve ser maior que 0 (zero)!");
                                }
                                expInc.dValor          = expIncAgrup.dValor;
                                expInc.sCategoryID     = model.sCategoryID;
                                expInc.CategoryType    = categoryBusiness.Get.FirstOrDefault(c => c.sID == model.sCategoryID).CategoryType;
                                expInc.sDescricao      = model.sDescricao;
                                expInc.sNotificationID = model.sNotificationID;

                                expenseIncomeBusiness.Update(expInc);
                            }
                            else
                            {
                                scope.Dispose();
                                return(Json(new
                                {
                                    Sucesso = false,
                                    Mensagem = "Erro na identificação do lançamento!",
                                    Titulo = "Erro",
                                    Url = "/Home/PaginaInicial"
                                }));
                            }
                        }
                        scope.Complete();
                        return(Json(new
                        {
                            Sucesso = true,
                            Mensagem = "Lançamentos Alterados com Sucesso!",
                            Titulo = "Sucesso",
                            Url = "/Home/PaginaInicial"
                        }));
                    }
                    catch (DbEntityValidationException dbEx)
                    {
                        scope.Dispose();
                        string sErro = string.Empty;
                        foreach (var validationErrors in dbEx.EntityValidationErrors)
                        {
                            foreach (var validationError in validationErrors.ValidationErrors)
                            {
                                sErro += string.Format(" Property: {0} Error: {1} |", validationError.PropertyName, validationError.ErrorMessage);
                            }
                        }
                        return(Json(new
                        {
                            Sucesso = false,
                            Mensagem = sErro,
                            Titulo = "Erro"
                        }));
                    }
                    catch (Exception ex)
                    {
                        scope.Dispose();
                        string sErro = ex.Message;
                        if (ex.InnerException != null)
                        {
                            sErro += " - " + ex.InnerException.Message;
                        }
                        return(Json(new
                        {
                            Sucesso = false,
                            Mensagem = sErro,
                            Titulo = "Erro"
                        }));
                    }
                }
            }
            else
            {
                model.listaCategorias = getComboCategorias(new List <CategoryType>()
                {
                    CategoryType.Despesa, CategoryType.Receita
                });
                model.listaNotifications = getComboNotificacoes();
                return(View(model));
            }
        }