/// <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); }
/// <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); }
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)); }
/// <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); }
/// <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); }
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)); }