public ActionResult Create(int idFuncionario, int ano, int mes)
 {
     try
     {
         using (var db = new Context())
         {
             CultureInfo culture = new CultureInfo("pt-BR");
             DateTimeFormatInfo dtfi = culture.DateTimeFormat;
             var _feriadoBLL = new BLL.FeriadoBLL(db, _idUsuario);
             var _bll = new BLL.FuncionarioBLL(db, _idUsuario);
             var _movimentoBLL = new BLL.MovimentoProfissionalBLL(db, _idUsuario);
             var empresa = db.Entidades.FirstOrDefault();
             var data = new DateTime(ano, mes, 1).AddMonths(1).AddDays(-1);
             var feriados = _feriadoBLL.Find(u => u.nrMes == mes);
             var _funcionario = _bll.FindSingle(e => e.idFuncionario == idFuncionario);
             var _movimentos = _movimentoBLL.Find(e => e.idFuncionario == idFuncionario && e.situacao == MovimentoProfissional.SITUACAO_PENDENTE && e.tipo == MovimentoProfissional.TIPO_COMISSAO);
             var _result = new FolhaVM
             {
                 Funcionario = Models.Funcionario.Consultar.GetModel(_funcionario),
                 Pontos = FolhaVM.Ponto.GetPontos(ano, mes, idFuncionario, feriados.ToList(), empresa),
                 Proximos = FolhaVM.Comissao.GetComicoes(_movimentos.Where(u => u.dtVencimento > data).ToList()),
                 Comissoes = FolhaVM.Comissao.GetComicoes(_movimentos.Where(u => u.dtVencimento <= data).ToList()),
                 nrAno = ano,
                 nrMes = mes,
                 dsMes = culture.TextInfo.ToTitleCase(dtfi.GetMonthName(mes))
             };
             return View(_result);
         }
     }
     catch (Exception ex)
     {
         RP.Util.Entity.ErroLog.Add(ex, Session.SessionID, _idUsuario);
         return RedirectToAction("Index");
     }
 }
        public ActionResult Create(FolhaVM model)
        {

            if (ModelState.IsValid)
            {
                try
                {
                    LogBLL.Insert(new LogDado("Create", "FolhaPagamento", _idUsuario));
                    using (var db = new Context())
                    {
                        using (var trans = new RP.DataAccess.RPTransactionScope(db))
                        {
                            var _bll = new CartaoPontoBLL(db, _idUsuario);
                            var _movimentoBLL = new MovimentoProfissionalBLL(db, _idUsuario);
                            var _folhaBLL = new FolhaPagamentoBLL(db, _idUsuario);
                            foreach (var item in model.Pontos)
                            {
                                var cartao = new CartaoPonto
                                {
                                    dsObservacao = item.dsObservacao,
                                    entradaExtra = string.IsNullOrEmpty(item.entradaExtra) ? null : (TimeSpan?)TimeSpan.Parse(item.entradaExtra + ":00"),
                                    entradaManha = string.IsNullOrEmpty(item.entradaManha) ? null : (TimeSpan?)TimeSpan.Parse(item.entradaManha + ":00"),
                                    entraTarde = string.IsNullOrEmpty(item.entraTarde) ? null : (TimeSpan?)TimeSpan.Parse(item.entraTarde + ":00"),
                                    saidaExtra = string.IsNullOrEmpty(item.saidaExtra) ? null : (TimeSpan?)TimeSpan.Parse(item.saidaExtra + ":00"),
                                    saidaManha = string.IsNullOrEmpty(item.saidaManha) ? null : (TimeSpan?)TimeSpan.Parse(item.saidaManha + ":00"),
                                    saidaTarde = string.IsNullOrEmpty(item.saidaTarde) ? null : (TimeSpan?)TimeSpan.Parse(item.saidaTarde + ":00"),
                                    flSituacao = item.flSituacao,
                                    idFuncionario = model.Funcionario.idFuncionario ?? 0,
                                    dtPonto = new DateTime(model.nrAno, item.nrMes, item.nrDia),
                                };
                                _bll.Insert(cartao);
                            }
                            if (model.Comissoes != null)
                            {
                                foreach (var item in model.Comissoes)
                                {
                                    _movimentoBLL.AtualizaMovimento(item.idMovimento, MovimentoProfissional.SITUACAO_AGUARDANDO_PAGAMENTO);
                                }
                            }
                            var folha = new FolhaPagamento 
                            {
                                idFuncionario = model.Funcionario.idFuncionario ?? 0,
                                nrAno = model.nrAno,
                                nrMes = model.nrMes,
                                situacao = FolhaPagamento.AGUARDANDO_PAGAMENTO                                 
                            };
                            _folhaBLL.Insert(folha);

                            _bll.SaveChanges();
                            trans.Complete();

                            this.AddFlashMessage("Folha de pagamento gerada com sucesso!", FlashMessage.SUCCESS);
                            return RedirectToAction("Index");
                        }
                    }
                }
                catch (Exception ex)
                {
                    Util.Entity.ErroLog.Add(ex, Session.SessionID, _idUsuario);
                    return RedirectToAction("Index", "Erro", new { area = string.Empty });
                }
            }
            return View(model);
        }