Esempio n. 1
0
        public async Task <ActionResult> Edit([Bind(Include = "Id, IdUsuario, HorasPrevistasString, Fechado")] FechamentoViewModel referencia)
        {
            if (referencia.HorasPrevistasDouble < 0)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher as horas previstas", TempData, ModelState);
            }

            if (ModelState.IsValid)
            {
                try
                {
                    var refe = db.Referencias.Find(referencia.Id);
                    if (refe != null)
                    {
                        refe.Previsto = referencia.HorasPrevistasTimeSpan;
                        refe.Fechado  = referencia.Fechado;
                        refe.SincronizaAtividades(new CalendarioServices());

                        await db.SaveChangesAsync();

                        MensagemParaUsuarioViewModel.MensagemSucesso("Alterações salvas.", TempData);

                        return(View(referencia));
                    }
                    else
                    {
                        MensagemParaUsuarioViewModel.MensagemErro("Não foi encontrada a referência deste mês para este funcionário", TempData, ModelState);
                    }
                }
                catch (DbEntityValidationException ex)
                {
                    string exceptionMessage = LogServices.ConcatenaErrosDbEntityValidation(ex);
                    MensagemParaUsuarioViewModel.MensagemErro(exceptionMessage, TempData, ModelState);
                }
                catch (Exception err)
                {
                    MensagemParaUsuarioViewModel.MensagemErro(err.Message, TempData, ModelState);
                }
            }



            return(View(referencia));
        }
Esempio n. 2
0
        public async Task <ActionResult> DeleteConfirmed(int id)
        {
            try
            {
                var deletando = await db.Atestados.FindAsync(id);

                if (deletando != null)
                {
                    List <Atividade> atts = new List <Atividade>();
                    atts.AddRange(deletando.Atividades);
                    foreach (Atividade att in atts)
                    {
                        deletando.Atividades.Remove(att);
                        db.Atividades.Remove(att);
                    }

                    deletando.Atividades.Clear();
                    db.Atestados.Remove(deletando);
                    await db.SaveChangesAsync();

                    MensagemParaUsuarioViewModel.MensagemSucesso("Registro Excluido.", TempData);
                }
                else
                {
                    MensagemParaUsuarioViewModel.MensagemErro("Registro não encontrado.", TempData);
                }
            }
            catch (DbEntityValidationException ex)
            {
                string exceptionMessage = LogServices.ConcatenaErrosDbEntityValidation(ex);
                MensagemParaUsuarioViewModel.MensagemErro(exceptionMessage, TempData, ModelState);
            }
            catch (Exception err)
            {
                MensagemParaUsuarioViewModel.MensagemErro(err.Message, TempData, ModelState);
            }

            return(RedirectToAction("Index"));
        }
Esempio n. 3
0
        public async Task <ActionResult> Adicionar(AtestadoAnexoViewModel avm)
        {
            if (avm.IdUsuario == 0)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher a data inicial", TempData, ModelState, "IdUsuario");
            }

            if (avm.Horas == null || avm.Horas == TimeSpan.Zero || avm.Horas.Value.TotalHours > 8)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Por favor preencha corretamente a quantidade de horas abonadas. Ela não pode ser maior que 8. ", TempData, ModelState, "Horas");
            }

            if (avm.DataInicial == DateTime.MinValue)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher a data inicial", TempData, ModelState, "DataInicial");
            }

            if (avm.DataFinal < avm.DataInicial)
            {
                MensagemParaUsuarioViewModel.MensagemErro("A data final deve ser maior ou igual a data inicial", TempData, ModelState, "DataFinal");
            }

            if (avm.DataFinal == null || avm.DataFinal.Value == DateTime.MinValue)
            {
                avm.DataFinal = avm.DataInicial;
            }

            if ((avm.DataFinal.Value - avm.DataInicial).TotalDays > 365)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Não é permitido um lançamento em lote maior que um ano", TempData, ModelState, "DataFinal");
            }


            if (ModelState.IsValid)
            {
                CalendarioServices   cal = new CalendarioServices();
                AtividadeApplication app = new AtividadeApplication(this.db);

                DateTime data       = avm.DataInicial.Date;
                int      IDADMIN    = TFW.TFWConvert.ToInteger(ApplicationResources.PROJECTNODE_ADMINISTRATIVO_ID);
                int      IDATESTADO = TFW.TFWConvert.ToInteger(ApplicationResources.TIPOATIVIDADE_ATESTADO_ID);

                var projeto = db.ProjectNodes.Include(X => X.Pai).Where(x => x.Id == IDADMIN).SingleOrDefault();
                var tipo    = db.TiposAtividade.Find(IDATESTADO);
                var usuario = await db.Usuarios.FindAsync(avm.IdUsuario);

                avm.NomeUsuario = usuario.FuncionarioNomeOuLogin;



                AtestadoAnexo atestado = new AtestadoAnexo();
                atestado.Atividades = new List <Atividade>();
                atestado.Observacao = avm.Observacao;
                byte[] fileData = null;
                using (var binaryReader = new BinaryReader(avm.ArquivoAnexo.InputStream))
                {
                    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
                }
                atestado.Arquivo             = fileData;
                atestado.NomeArquivoOriginal = avm.ArquivoAnexo.FileName;
                db.Atestados.Add(atestado);


                while (data <= avm.DataFinal)
                {
                    try
                    {
                        if (cal.IsDiaUtil(data))
                        {
                            Atividade atv = new Atividade
                            {
                                Observacao    = avm.Observacao,
                                Inicio        = data,
                                Fim           = data.Add(avm.Horas.Value),
                                ProjectNode   = projeto,
                                TipoAtividade = tipo,
                                Usuario       = usuario
                            };

                            await app.SalvarAsync(atv, true);

                            atestado.Atividades.Add(atv);
                        }
                    }
                    catch (DbEntityValidationException ex)
                    {
                        string exceptionMessage = LogServices.ConcatenaErrosDbEntityValidation(ex);
                        MensagemParaUsuarioViewModel.MensagemErro(exceptionMessage, TempData, ModelState);
                        return(View(avm));
                    }
                    catch (Exception err)
                    {
                        MensagemParaUsuarioViewModel.MensagemErro(err.Message, TempData, ModelState);
                        return(View(avm));
                    }
                    finally
                    {
                        data = data.AddDays(1);
                    }

                    await db.SaveChangesAsync();
                }

                MensagemParaUsuarioViewModel.MensagemSucesso("Atestado salvo e abonos lançados.", TempData);
                return(View(avm));
            }



            return(View(avm));
        }
Esempio n. 4
0
        public ActionResult Index(FechamentoIndexViewModel model)
        {
            FechamentoBuscaViewModel fBuscaVM = model.Busca ?? (Session["fBuscaVM"] as FechamentoBuscaViewModel) ?? new FechamentoBuscaViewModel();

            CarregaMesesAnos();

            if (model == null || model.Busca == null)
            {
                MensagemParaUsuarioViewModel.MensagemAlerta("Preencher os dados do formulário corretamente. ", TempData);
                model = new FechamentoIndexViewModel();
                model.Usuarios.AddRange(db.Usuarios.ToList());

                Session["fBuscaVM"] = new FechamentoBuscaViewModel();

                return(View(model));
            }

            try
            {
                model.Usuarios.Clear();
                model.Usuarios.AddRange(db.Usuarios.ToList());

                DateTime dataInicial = new DateTime(model.Busca.AnoInicial ?? DateTime.Today.Year, model.Busca.MesInicial ?? DateTime.Today.Month, 1);
                DateTime dataFinal   = (new DateTime(model.Busca.AnoFinal ?? DateTime.Today.Year, model.Busca.MesFinal ?? DateTime.Today.Month, 1)).AddMonths(1).AddSeconds(-1);

                var referencias = db.Referencias.Where(x => DbFunctions.CreateDateTime(x.Ano, x.Mes, 1, 0, 0, 0) >= dataInicial && DbFunctions.CreateDateTime(x.Ano, x.Mes, 1, 0, 0, 0) <= dataFinal);

                if (model.Busca.IdsUsuarios != null && model.Busca.IdsUsuarios.Length > 0)
                {
                    referencias = referencias.Where(x => model.Busca.IdsUsuarios.Contains(x.Usuario.Id));
                }

                model.Referencias.Clear();
                model.Referencias.AddRange(referencias
                                           .OrderBy(r => r.Ano)
                                           .ThenBy(r => r.Mes)
                                           .ToList());


                if (model.Acao == "Fechar")
                {
                    var lista = model
                                .Referencias
                                .Where(x => x.Fechado == false)
                                .OrderBy(r => r.Ano)
                                .ThenBy(r => r.Mes)
                                .ToList();

                    foreach (var r in lista)
                    {
                        r.SincronizaAtividades(new CalendarioServices());
                        r.Fechado = true;
                        db.SaveChanges();
                    }

                    if (lista.Count > 1)
                    {
                        MensagemParaUsuarioViewModel.MensagemSucesso(string.Format("{0} Referencias foram fechadas. ", lista.Count), TempData);
                    }
                    else if (lista.Count == 1)
                    {
                        MensagemParaUsuarioViewModel.MensagemSucesso("1 Referencia foi fechada. ", TempData);
                    }
                    else
                    {
                        MensagemParaUsuarioViewModel.MensagemAlerta("Não havia nada a ser fechado. ", TempData);
                    }
                }
                else if (model.Acao == "Recalcular")
                {
                    var lista = model
                                .Referencias
                                .OrderBy(r => r.Ano)
                                .ThenBy(r => r.Mes)
                                .ToList();

                    foreach (var r in lista)
                    {
                        //capturo o estado atual
                        //bool fechadoAtual = r.Fechado;
                        //forço reabertura e sincronizo
                        //r.Fechado = false;
                        r.SincronizaAtividades(new CalendarioServices());
                        //volto o estado anterior e salvo
                        //r.Fechado = fechadoAtual;
                        db.SaveChanges();
                    }

                    if (lista.Count > 1)
                    {
                        MensagemParaUsuarioViewModel.MensagemSucesso(string.Format("{0} Referencias foram recalculadas. ", lista.Count), TempData);
                    }
                    else if (lista.Count == 1)
                    {
                        MensagemParaUsuarioViewModel.MensagemSucesso("1 Referencia foi recalculada. ", TempData);
                    }
                    else
                    {
                        MensagemParaUsuarioViewModel.MensagemAlerta("Não havia nada a ser recalculado. ", TempData);
                    }
                }

                Session["fBuscaVM"] = model.Busca ?? new FechamentoBuscaViewModel();

                return(View(model));
            }
            catch (DbEntityValidationException ex)
            {
                string exceptionMessage = LogServices.ConcatenaErrosDbEntityValidation(ex);
                MensagemParaUsuarioViewModel.MensagemErro(exceptionMessage, TempData, ModelState);
            }
            catch (Exception err)
            {
                MensagemParaUsuarioViewModel.MensagemErro(err.Message, TempData, ModelState);
            }

            Session["fBuscaVM"] = model.Busca ?? new FechamentoBuscaViewModel();

            return(RedirectToAction("Index"));
        }
Esempio n. 5
0
        /// <summary>
        /// posta os dados retirados da planilha e trabalhados no ImportacaoPlanilhaAtividadesViewModel
        /// </summary>
        /// <param name="planilha">ImportacaoPlanilhaAtividadesViewModel - viewmodel com os dados estruturados e editados para inserção no banco de dados</param>
        /// <returns>int - quantidade de atividades importadas</returns>
        public virtual async Task <int> LancarAsync(ImportacaoPlanilhaAtividadesViewModel planilha)
        {
            int result = 0;

            CalendarioServices cal = new CalendarioServices();

            AtividadeApplication app = new AtividadeApplication(this._db);

            foreach (var i in planilha.Itens)
            {
                try
                {
                    if ((i.Data != null) && (i.Data != DateTime.MinValue) && (cal.IsDiaUtil(i.Data)))
                    {
                        var projeto = await this._db.ProjectNodes.FindAsync(i.IdProjeto);

                        var tipo = await this._db.TiposAtividade.FindAsync(i.IdTipoAtividade);


                        if (planilha is ImportacaoPlanilhaAtividadesUsuarioViewModel)
                        {
                            i.IdUsuario = (planilha as ImportacaoPlanilhaAtividadesUsuarioViewModel).IdUsuario;
                        }

                        Usuario usuario = await this._db.Usuarios.FindAsync(i.IdUsuario);

                        if (usuario == null)
                        {
                            throw new Exception("Usuário da planilha não preenchido");
                        }

                        if (i.EntradaManha != null && i.SaidaManha != null && i.EntradaTarde != null && i.SaidaTarde != null)
                        {
                            if (i.EntradaManha > i.SaidaManha)
                            {
                                throw new Exception("A entrada do primeiro horário não pode ser maior que a saída do primeiro horário");
                            }

                            if (i.EntradaTarde > i.SaidaTarde)
                            {
                                throw new Exception("A entrada do segundo horário não pode ser maior que a saída do segundo horário");
                            }

                            if (i.EntradaManha > i.SaidaTarde)
                            {
                                throw new Exception("A entrada do primeiro horário não pode ser maior que a saída do segundo horário");
                            }

                            if (i.SaidaManha > i.EntradaTarde)
                            {
                                throw new Exception("A saída do primeiro horário não pode ser maior que a entrada do segundo horário");
                            }
                        }

                        if ((i.EntradaManha != null) && (i.SaidaManha != null) && (i.SaidaManha > i.EntradaManha))
                        {
                            await app.SalvarAsync(new Atividade
                            {
                                Observacao    = i.Descricao,
                                Inicio        = i.Data.AddHours(i.EntradaManha.Value.Hours).AddMinutes(i.EntradaManha.Value.Minutes),
                                Fim           = i.Data.AddHours(i.SaidaManha.Value.Hours).AddMinutes(i.SaidaManha.Value.Minutes),
                                ProjectNode   = projeto,
                                TipoAtividade = tipo,
                                Usuario       = usuario
                            }, false);
                        }

                        if ((i.EntradaTarde != null) && (i.SaidaTarde != null) && (i.SaidaTarde > i.EntradaTarde))
                        {
                            await app.SalvarAsync(new Atividade
                            {
                                Observacao    = i.Descricao,
                                Inicio        = i.Data.AddHours(i.EntradaTarde.Value.Hours).AddMinutes(i.EntradaTarde.Value.Minutes),
                                Fim           = i.Data.AddHours(i.SaidaTarde.Value.Hours).AddMinutes(i.SaidaTarde.Value.Minutes),
                                ProjectNode   = projeto,
                                TipoAtividade = tipo,
                                Usuario       = usuario
                            }, false);
                        }
                    }
                }
                catch (DbEntityValidationException ex)
                {
                    string exceptionMessage = LogServices.ConcatenaErrosDbEntityValidation(ex);
                    throw new Exception("Problemas com a validação das entities: " + exceptionMessage, ex);
                }
                catch (Exception err)
                {
                    LogServices.LogarException(err);
                    throw new Exception("Erro: " + err.Message, err);
                }
                finally
                {
                    result++;
                }
            }

            return(result);
        }
Esempio n. 6
0
        public async Task <ActionResult> Salvar(AbonoViewModel avm)
        {
            if (avm.IdsUsuarios == null || avm.IdsUsuarios.Count() == 0)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher a data inicial", TempData, ModelState, "IdsUsuarios");
            }



            if (avm.DataInicial == DateTime.MinValue)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher a data inicial", TempData, ModelState, "DataInicial");
            }

            if (avm.DataFinal < avm.DataInicial)
            {
                MensagemParaUsuarioViewModel.MensagemErro("A data final deve ser maior ou igual a data inicial", TempData, ModelState, "DataFinal");
            }

            if (avm.DataFinal == null || avm.DataFinal.Value == DateTime.MinValue)
            {
                avm.DataFinal = avm.DataInicial;
            }

            if ((avm.DataFinal.Value - avm.DataInicial).TotalDays > 365)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Não é permitido um lançamento em lote maior que um ano", TempData, ModelState, "DataFinal");
            }



            if (ModelState.IsValid)
            {
                CalendarioServices   cal = new CalendarioServices();
                AtividadeApplication app = new AtividadeApplication(this.db);

                DateTime data    = avm.DataInicial.Date;
                int      IDADMIN = TFW.TFWConvert.ToInteger(ApplicationResources.PROJECTNODE_ADMINISTRATIVO_ID);

                while (data <= avm.DataFinal)
                {
                    try
                    {
                        if (cal.IsDiaUtil(data))
                        {
                            var projeto = db.ProjectNodes.Include(X => X.Pai).Where(x => x.Id == IDADMIN).SingleOrDefault();
                            var tipo    = db.TiposAtividade.Where(x => x.Id == avm.IdTipoAtividade).SingleOrDefault();


                            var usuarios = await db.Usuarios
                                           .Include(x => x.Funcionario)
                                           .Where(u => avm.IdsUsuarios.Contains(u.Id))
                                           .ToListAsync();

                            string nomesDosUsuarios = string.Join(", ", usuarios.Select(u => u.FuncionarioNomeOuLogin).ToList <string>().ToArray());

                            foreach (var u in usuarios)
                            {
                                if (tipo.Nome == ApplicationResources.TIPOATIVIDADE_FERIAS_NOME)
                                {
                                    await app.SalvarAsync(new Atividade
                                    {
                                        Observacao    = avm.Descricao,
                                        Inicio        = data.AddHours(8),
                                        Fim           = data.AddHours(12),
                                        ProjectNode   = projeto,
                                        TipoAtividade = tipo,
                                        Usuario       = u
                                    }, true);

                                    await app.SalvarAsync(new Atividade
                                    {
                                        Observacao    = avm.Descricao,
                                        Inicio        = data.AddHours(13),
                                        Fim           = data.AddHours(17),
                                        ProjectNode   = projeto,
                                        TipoAtividade = tipo,
                                        Usuario       = u
                                    }, true);
                                }
                                else
                                {
                                    await app.SalvarAsync(new Atividade
                                    {
                                        Observacao    = avm.Descricao,
                                        Inicio        = data,
                                        Fim           = data.Add(avm.Horas.Value),
                                        ProjectNode   = projeto,
                                        TipoAtividade = tipo,
                                        Usuario       = u
                                    }, true);
                                }
                            }

                            avm.NomeTipoAtividade = tipo.Nome;
                            avm.NomeUsuario       = nomesDosUsuarios;
                        }
                    }
                    catch (DbEntityValidationException ex)
                    {
                        string exceptionMessage = LogServices.ConcatenaErrosDbEntityValidation(ex);
                        MensagemParaUsuarioViewModel.MensagemErro(exceptionMessage, TempData, ModelState);
                        return(PartialView("~/views/shared/EditorTemplates/AbonoViewModel.cshtml", avm));
                    }
                    catch (Exception err)
                    {
                        MensagemParaUsuarioViewModel.MensagemErro(err.Message, TempData, ModelState);
                        return(PartialView("~/views/shared/EditorTemplates/AbonoViewModel.cshtml", avm));
                    }
                    finally
                    {
                        data = data.AddDays(1);
                    }
                }

                MensagemParaUsuarioViewModel.MensagemSucesso("Atividades salvas.", TempData);
                return(PartialView("~/views/shared/DisplayTemplates/AbonoViewModel.cshtml", avm));
            }



            return(PartialView("~/views/shared/EditorTemplates/AbonoViewModel.cshtml", avm));
        }
Esempio n. 7
0
        public async Task <ActionResult> Edit([Bind(Include = "Id, Observacao, Data, Inicio, Fim, IdProjectNode, IdTipoAtividade, IdUsuario")] AtividadeViewModel atividadeVm)
        {
            if (atividadeVm.Data == DateTime.MinValue)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher a data", TempData, ModelState);
            }

            if ((atividadeVm.Inicio == null) || (atividadeVm.Inicio <= TimeSpan.Zero) || (atividadeVm.Inicio > new TimeSpan(23, 59, 59)))
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher uma hora válida para o Início entre 00:00 e 23:59", TempData, ModelState);
            }


            if ((atividadeVm.Fim == null) || (atividadeVm.Fim <= TimeSpan.Zero) || (atividadeVm.Fim > new TimeSpan(23, 59, 59)))
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher uma hora válida para o Fim entre 00:00 e 23:59", TempData, ModelState);
            }


            if (atividadeVm.Inicio > atividadeVm.Fim)
            {
                MensagemParaUsuarioViewModel.MensagemErro("A hora de início não pode ser maior que a hora de término", TempData, ModelState);
            }



            if (ModelState.IsValid)
            {
                try
                {
                    var projeto = db.ProjectNodes.Find(atividadeVm.IdProjectNode);
                    var tipo    = db.TiposAtividade.Find(atividadeVm.IdTipoAtividade);
                    var usuario = db.Usuarios.Find(atividadeVm.IdUsuario);

                    Atividade domainAtv = db.Atividades.Find(atividadeVm.Id);
                    domainAtv.Observacao    = atividadeVm.Observacao;
                    domainAtv.Inicio        = atividadeVm.Data.AddHours(atividadeVm.Inicio.Hours).AddMinutes(atividadeVm.Inicio.Minutes);
                    domainAtv.Fim           = atividadeVm.Data.AddHours(atividadeVm.Fim.Hours).AddMinutes(atividadeVm.Fim.Minutes);
                    domainAtv.ProjectNode   = projeto;
                    domainAtv.TipoAtividade = tipo;
                    domainAtv.Usuario       = usuario;

                    AtividadeApplication app = new AtividadeApplication(this.db);
                    await app.SalvarAsync(domainAtv, true);

                    MensagemParaUsuarioViewModel.MensagemSucesso("Atividade salva.", TempData);
                    return(RedirectToAction("Edit", atividadeVm));
                }
                catch (DbEntityValidationException ex)
                {
                    string exceptionMessage = LogServices.ConcatenaErrosDbEntityValidation(ex);
                    MensagemParaUsuarioViewModel.MensagemErro(exceptionMessage, TempData, ModelState);
                }
                catch (Exception err)
                {
                    MensagemParaUsuarioViewModel.MensagemErro(err.Message, TempData, ModelState);
                }
            }

            CarregaTipos();
            CarregaProjetos();
            CarregaUsuarios();

            return(View(atividadeVm));
        }
        public async Task <ActionResult> Lancar(LancamentoEmLoteModel lctos)
        {
            if (lctos.IdsUsuarios == null || lctos.IdsUsuarios.Count() == 0)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Escolha pelo menos um usuário", TempData, ModelState, "IdsUsuarios");
            }

            if (lctos.DataInicial == DateTime.MinValue)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher a data inicial", TempData, ModelState, "DataInicial");
            }

            if (lctos.DataFinal == DateTime.MinValue)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher a data final", TempData, ModelState, "DataFinal");
            }

            if (lctos.DataFinal < lctos.DataInicial)
            {
                MensagemParaUsuarioViewModel.MensagemErro("A data final deve ser maior ou igual a data inicial", TempData, ModelState, "DataFinal");
            }


            if ((lctos.DataFinal - lctos.DataInicial).TotalDays > 365)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Não é permitido um lançamento em lote maior que um ano", TempData, ModelState, "DataFinal");
            }


            if ((lctos.EntradaManha == null) || (lctos.EntradaManha <= TimeSpan.Zero) || (lctos.EntradaManha > new TimeSpan(23, 59, 59)))
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher uma hora válida para a entrada da manhã entre 00:00 e 23:59", TempData, ModelState, "EntradaManha");
            }


            if ((lctos.SaidaManha == null) || (lctos.SaidaManha <= TimeSpan.Zero) || (lctos.SaidaManha > new TimeSpan(23, 59, 59)))
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher uma hora válida para a saída da manhã entre 00:00 e 23:59", TempData, ModelState, "SaidaManha");
            }



            if ((lctos.EntradaTarde == null) || (lctos.EntradaTarde <= TimeSpan.Zero) || (lctos.EntradaTarde > new TimeSpan(23, 59, 59)))
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher uma hora válida para a entrada da tarde entre 00:00 e 23:59", TempData, ModelState, "EntradaTarde");
            }


            if ((lctos.SaidaTarde == null) || (lctos.SaidaTarde <= TimeSpan.Zero) || (lctos.SaidaTarde > new TimeSpan(23, 59, 59)))
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher uma hora válida para a saída da tarde entre 00:00 e 23:59", TempData, ModelState, "SaidaTarde");
            }


            if (lctos.EntradaManha > lctos.SaidaManha)
            {
                MensagemParaUsuarioViewModel.MensagemErro("A hora de início não pode ser maior que a hora de término no primeiro horário", TempData, ModelState, "EntradaManha");
            }

            if (lctos.EntradaTarde > lctos.SaidaTarde)
            {
                MensagemParaUsuarioViewModel.MensagemErro("A hora de início não pode ser maior que a hora de término no segundo horário", TempData, ModelState, "EntradaTarde");
            }


            if (lctos.EntradaManha > lctos.SaidaTarde)
            {
                MensagemParaUsuarioViewModel.MensagemErro("A primeira hora de início não pode ser maior que última hora de término", TempData, ModelState, "EntradaManha");
            }

            if (lctos.SaidaManha > lctos.EntradaTarde)
            {
                MensagemParaUsuarioViewModel.MensagemErro("A saída do primeiro horário não pode ser maior que a entrada do segundo horário", TempData, ModelState, "SaidaManha");
            }

            if (ModelState.IsValid)
            {
                CalendarioServices   cal = new CalendarioServices();
                AtividadeApplication app = new AtividadeApplication(this.db);

                DateTime data = lctos.DataInicial;

                var projeto = await db.ProjectNodes.FindAsync(lctos.IdProjeto);

                var tipo = await db.TiposAtividade.FindAsync(lctos.IdTipoAtividade);

                var usuarios = await db.Usuarios.Where(u => lctos.IdsUsuarios.Contains(u.Id)).ToListAsync <Usuario>();

                while (data <= lctos.DataFinal)
                {
                    try
                    {
                        if (cal.IsDiaUtil(data))
                        {
                            foreach (Usuario usu in usuarios)
                            {
                                await app.SalvarAsync(new Atividade
                                {
                                    Observacao    = lctos.Descricao,
                                    Inicio        = data.AddHours(lctos.EntradaManha.Hours).AddMinutes(lctos.EntradaManha.Minutes),
                                    Fim           = data.AddHours(lctos.SaidaManha.Hours).AddMinutes(lctos.SaidaManha.Minutes),
                                    ProjectNode   = projeto,
                                    TipoAtividade = tipo,
                                    Usuario       = usu
                                }, true);

                                await app.SalvarAsync(new Atividade
                                {
                                    Observacao    = lctos.Descricao,
                                    Inicio        = data.AddHours(lctos.EntradaTarde.Hours).AddMinutes(lctos.EntradaTarde.Minutes),
                                    Fim           = data.AddHours(lctos.SaidaTarde.Hours).AddMinutes(lctos.SaidaTarde.Minutes),
                                    ProjectNode   = projeto,
                                    TipoAtividade = tipo,
                                    Usuario       = usu
                                }, true);
                            }
                        }
                    }
                    catch (DbEntityValidationException ex)
                    {
                        string exceptionMessage = LogServices.ConcatenaErrosDbEntityValidation(ex);
                        MensagemParaUsuarioViewModel.MensagemErro(exceptionMessage, TempData, ModelState);
                        return(RedirectToAction("Index"));
                    }
                    catch (Exception err)
                    {
                        MensagemParaUsuarioViewModel.MensagemErro(err.Message, TempData, ModelState);
                        return(RedirectToAction("Index"));
                    }
                    finally
                    {
                        data = data.AddDays(1);
                    }
                }

                MensagemParaUsuarioViewModel.MensagemSucesso("Atividades salvas.", TempData);
            }

            CarregaTipos();
            CarregaProjetos();
            CarregaUsuarios();


            return(View(lctos));
        }
Esempio n. 9
0
        public async Task <ActionResult> CreateAjax([Bind(Include = "Observacao,Data,Inicio,Fim, IdProjectNode, IdTipoAtividade")] AtividadeAjaxViewModel atividadeVm)
        {
            if (atividadeVm.Data == DateTime.MinValue)
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher a data", TempData, ModelState);
            }

            if ((atividadeVm.Inicio == null) || (atividadeVm.Inicio <= TimeSpan.Zero) || (atividadeVm.Inicio > new TimeSpan(23, 59, 59)))
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher uma hora válida para o Início entre 00:00 e 23:59", TempData, ModelState);
            }


            if ((atividadeVm.Fim == null) || (atividadeVm.Fim <= TimeSpan.Zero) || (atividadeVm.Fim > new TimeSpan(23, 59, 59)))
            {
                MensagemParaUsuarioViewModel.MensagemErro("Favor preencher uma hora válida para o Fim entre 00:00 e 23:59", TempData, ModelState);
            }


            if (atividadeVm.Inicio > atividadeVm.Fim)
            {
                MensagemParaUsuarioViewModel.MensagemErro("A hora de início não pode ser maior que a hora de término", TempData, ModelState);
            }



            if (ModelState.IsValid)
            {
                var usuario = db.Usuarios.Where <Usuario>(x => x.Login == User.Identity.Name).FirstOrDefault();

                if (usuario != null)
                {
                    try
                    {
                        var projeto = await db.ProjectNodes.FindAsync(atividadeVm.IdProjectNode);

                        var tipo = await db.TiposAtividade.FindAsync(atividadeVm.IdTipoAtividade);


                        Atividade domainAtv = new Atividade
                        {
                            Observacao    = atividadeVm.Observacao,
                            Inicio        = atividadeVm.Data.AddHours(atividadeVm.Inicio.Hours).AddMinutes(atividadeVm.Inicio.Minutes),
                            Fim           = atividadeVm.Data.AddHours(atividadeVm.Fim.Hours).AddMinutes(atividadeVm.Fim.Minutes),
                            ProjectNode   = projeto,
                            TipoAtividade = tipo,
                            Usuario       = usuario
                        };

                        Referencia refe = domainAtv.Usuario.GetReferencia(domainAtv.Inicio.Year, domainAtv.Inicio.Month);
                        if (!refe.Fechado)
                        {
                            AtividadeApplication app = new AtividadeApplication(this.db);
                            await app.SalvarAsync(domainAtv, false);

                            MensagemParaUsuarioViewModel.MensagemSucesso("Atividade salva.", TempData);
                            return(PartialView("~/views/shared/DisplayTemplates/AtividadeAjaxViewModel.cshtml", domainAtv));
                        }
                        else
                        {
                            MensagemParaUsuarioViewModel.MensagemAlerta("Você não pode criar uma atividade para um mês que já foi fechado.", TempData);
                        }
                    }
                    catch (DbEntityValidationException ex)
                    {
                        string exceptionMessage = LogServices.ConcatenaErrosDbEntityValidation(ex);
                        MensagemParaUsuarioViewModel.MensagemErro(exceptionMessage, TempData, ModelState);
                    }
                    catch (Exception err)
                    {
                        MensagemParaUsuarioViewModel.MensagemErro(err.Message, TempData, ModelState);
                    }
                }
                else
                {
                    ModelState.AddModelError("Usuario", "Usuário logado não encontrado!.");
                    MensagemParaUsuarioViewModel.MensagemErro("Usuário logado não encontrado!.", TempData);
                }
            }

            CarregaTipos();
            CarregaProjetos();

            return(PartialView("~/views/shared/EditorTemplates/AtividadeAjaxViewModel.cshtml", atividadeVm));
        }