예제 #1
0
        /// <summary>
        /// retorna a lista com todos os usuários e seu último lançamento
        /// </summary>
        /// <returns></returns>
        public virtual List <UsuarioAlertaLancamentoViewModel> GetUltimosLancamentos()
        {
            CalendarioServices calendarioSvc = new CalendarioServices();
            var rep     = new UsuarioRepository(_db);
            var results = rep.GetUltimosLancamentos();

            results.ForEach(x => x.DiasUteisSemLancar = x.UltimoLancamento != null ? calendarioSvc.DiasUteisEntreDatas(x.UltimoLancamento.Value, DateTime.Now) : 0);
            return(results);
        }
예제 #2
0
        /// <summary>
        /// retorna o usuário e seu último lançamento
        /// </summary>
        /// <returns></returns>
        public virtual UsuarioAlertaLancamentoViewModel GetUltimosLancamentosById(int id)
        {
            CalendarioServices calendarioSvc = new CalendarioServices();
            var rep     = new UsuarioRepository(_db);
            var results = rep.GetUltimosLancamentosById(id);

            results.DiasUteisSemLancar = results.UltimoLancamento != null?calendarioSvc.DiasUteisEntreDatas(results.UltimoLancamento.Value, DateTime.Now) : 0;

            return(results);
        }
예제 #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));
        }
예제 #4
0
        /// <summary>
        /// importa uma planilha do excel com atividades para um usuário
        /// </summary>
        /// <param name="idUsuario">int - id do usuário</param>
        /// <param name="pkg">ExcelPackage - package da Epplus criado com os dados da planilha como stream</param>
        /// <returns>ImportacaoPlanilhaAtividadesUsuarioViewModel - viewmodel com as atividades para serem editadas e postadas</returns>
        public virtual ImportacaoPlanilhaAtividadesUsuarioViewModel TransformarPlanilhaUsuario(int idUsuario, ExcelPackage pkg)
        {
            TFWHierarchicalList projetos = new TFWHierarchicalList();

            foreach (var pn in _db.ProjectNodes.AsNoTracking().ToList())
            {
                projetos.Add(pn.Id, pn.Pai == null? new Nullable <int>() : pn.Pai.Id, pn.Nome);
            }

            ImportacaoPlanilhaAtividadesUsuarioViewModel result = new ImportacaoPlanilhaAtividadesUsuarioViewModel();
            CalendarioServices cal = new CalendarioServices();

            result.IdUsuario = idUsuario;

            const int LINHA_INICIAL        = 15;
            const int LINHA_FINAL          = 79;
            const int COLUNA_PROJETO       = 1;
            const int COLUNA_DATA          = 2;
            const int COLUNA_ENTM          = 3;
            const int COLUNA_SAIM          = 4;
            const int COLUNA_ENTT          = 5;
            const int COLUNA_SAIT          = 6;
            const int COLUNA_HORAS         = 9;
            const int COLUNA_TIPOATIVIDADE = 10;
            const int COLUNA_DESCRICAO     = 11;


            var currentSheet = pkg.Workbook.Worksheets;
            var workSheet    = currentSheet.First();
            var noOfCol      = workSheet.Dimension.End.Column;
            var noOfRow      = workSheet.Dimension.End.Row;

            for (int rowIterator = LINHA_INICIAL; rowIterator <= noOfRow || rowIterator <= LINHA_FINAL; rowIterator++)
            {
                ItemImportacaoPlanilha item = new ItemImportacaoPlanilha();
                item.IdUsuario = idUsuario;
                TimeSpan qtdHoras = ExcelToTimeSpan(workSheet.Cells[rowIterator, COLUNA_HORAS].Value);

                if ((workSheet.Cells[rowIterator, COLUNA_PROJETO].Value != null) &&
                    (qtdHoras > TimeSpan.MinValue))
                {
                    DateTime?data = ExcelToNullableDateTime(workSheet.Cells[rowIterator, COLUNA_DATA].Value);

                    //a data tem que ser não nula e dia util
                    if ((data != null) && (cal.IsDiaUtil(data.Value)))
                    {
                        item.Data      = data.Value;
                        item.Descricao = workSheet.Cells[rowIterator, COLUNA_DESCRICAO].Value != null ? workSheet.Cells[rowIterator, COLUNA_DESCRICAO].Value.ToString() : "";

                        item.EntradaManha = ExcelToNullableTimeSpan(workSheet.Cells[rowIterator, COLUNA_ENTM].Value);
                        item.SaidaManha   = ExcelToNullableTimeSpan(workSheet.Cells[rowIterator, COLUNA_SAIM].Value);
                        item.EntradaTarde = ExcelToNullableTimeSpan(workSheet.Cells[rowIterator, COLUNA_ENTT].Value);
                        item.SaidaTarde   = ExcelToNullableTimeSpan(workSheet.Cells[rowIterator, COLUNA_SAIT].Value);

                        if (workSheet.Cells[rowIterator, COLUNA_PROJETO].Value != null)
                        {
                            string nome = workSheet.Cells[rowIterator, COLUNA_PROJETO].Value.ToString();

                            //procura por path completo
                            var proj = projetos.Where(n => n.ValorPath == nome).FirstOrDefault();
                            if (proj != null)
                            {
                                item.IdProjeto = proj.Id;
                            }
                            else
                            {
                                //procura só por nome
                                proj = projetos.Where(n => n.Valor == nome).FirstOrDefault();
                                if (proj != null)
                                {
                                    item.IdProjeto = proj.Id;
                                }
                            }
                        }

                        if (workSheet.Cells[rowIterator, COLUNA_TIPOATIVIDADE].Value != null)
                        {
                            string nome = workSheet.Cells[rowIterator, COLUNA_TIPOATIVIDADE].Value.ToString();
                            var    atv  = _db.TiposAtividade.Where(n => n.Nome == nome).FirstOrDefault();
                            if (atv != null)
                            {
                                item.IdTipoAtividade = atv.Id;
                            }
                        }

                        result.Itens.Add(item);
                    }
                }
            }


            return(result);
        }
예제 #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);
        }
예제 #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));
        }
        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));
        }