public async Task <bool> RegistraVistoAprovacaoAsyncById(int idNotaCompra, int usuarioId) { Usuario usuario = _context.Usuario.Find(usuarioId); NotaCompra nf = await _context.NotasCompra.Include(n => n.HistAprovNotasCompra).SingleAsync(n => n.Id == idNotaCompra); ConfiguracaoFaixaVistosAprovacoes ConfFaixaVistAprov = await _context.ConfFaixaVistAprov.Where(conf => conf.FaixaMin <= nf.ValorTotal && nf.ValorTotal <= conf.FaixaMax).SingleAsync(); //Verifica se Usuario já nao aprovou/Vistoriou Nota bool usuarioJaRegistrou = (nf.HistAprovNotasCompra.Where(h => h.Id == idNotaCompra && h.Usuario == usuario).Count() != 0); //Verifica se Nota Precisa de Visto e Aprovacao dado pepel do usuario bool podeRegistrarNF = (usuario.Papel == Papel.Visto && nf.PrecisaVisto(ConfFaixaVistAprov.Vistos)) || (usuario.Papel == Papel.Aprovacao && nf.PrecisaAprovacao(ConfFaixaVistAprov.Vistos, ConfFaixaVistAprov.Aprovacoes)); //Registra VistoAprov if (!usuarioJaRegistrou && podeRegistrarNF) { HistoricoAprovacaoNotaCompra HistAprovNF = new HistoricoAprovacaoNotaCompra { Data = DateTime.Now, UsuarioId = usuario.Id, Operacao = usuario.Papel == Papel.Visto ? Operacao.Visto : Operacao.Aprovacao, NotaCompraId = nf.Id }; _context.Add(HistAprovNF); await _context.SaveChangesAsync(); // Aprova a Nota if (nf.PodeAprovar(ConfFaixaVistAprov.Vistos, ConfFaixaVistAprov.Aprovacoes)) { nf.Status = Status.Aprovada; _context.Update(nf); return(await _context.SaveChangesAsync() > 0); } return(true); } return(false); }
public int ActualizarNotaCompra(RegistrarActualizarNotaCompraRequestDTO request) { NotaCompra notaCompra = new NotaCompra(); notaCompra.GuiaRecepcionMateriaPrimaId = request.GuiaRecepcionMateriaPrimaId; notaCompra.NotaCompraId = request.NotaCompraId; notaCompra.EmpresaId = request.EmpresaId; notaCompra.Numero = request.Numero; notaCompra.UnidadMedidaIdPesado = request.UnidadMedidaIdPesado; notaCompra.CantidadPesado = request.CantidadPesado; notaCompra.KilosBrutosPesado = request.KilosBrutosPesado; notaCompra.TaraPesado = request.TaraPesado; notaCompra.KilosNetosPesado = request.KilosNetosPesado; notaCompra.DescuentoPorHumedad = request.DescuentoPorHumedad; notaCompra.KilosNetosDescontar = request.KilosNetosDescontar; notaCompra.KilosNetosPagar = request.KilosNetosPagar; notaCompra.QQ55 = request.QQ55; notaCompra.TipoId = request.TipoId; notaCompra.MonedaId = request.MonedaId; notaCompra.PrecioGuardado = request.PrecioGuardado; notaCompra.PrecioPagado = request.PrecioPagado; notaCompra.Importe = request.Importe; notaCompra.EstadoId = NotaCompraEstados.PorLiquidar; notaCompra.FechaUltimaActualizacion = DateTime.Now; notaCompra.UsuarioUltimaActualizacion = request.UsuarioNotaCompra; notaCompra.Observaciones = request.Observaciones; notaCompra.ValorId = request.ValorId; int affected = _INotaCompraRepository.Actualizar(notaCompra); return(affected); }
public async void TestGetNotasComprasAsyncByFilterDate() { // In-memory database only exists while the connection is open var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var options = new DbContextOptionsBuilder <NotaCompraContext>() .UseSqlite(connection) .Options; using (var context = new NotaCompraContext(options)) { // Create the schema in the database context.Database.EnsureCreated(); INotaCompraRepository nfCompraRepository = new NotaCompraRepository(context); // Testa Filtro por data inicial e final DateTime dtInicio = new DateTime(2019, 12, 01); DateTime dtFim = new DateTime(2019, 12, 31); Usuario userAuxiliar = context.Usuario.Find(4); NotaCompra[] nfComprasAuxiliar = await nfCompraRepository.GetNotasComprasAsyncByFilterDate(dtInicio, dtFim, userAuxiliar.Id); Assert.True(nfComprasAuxiliar.Count() == 4); // Notas Estao no Limite do Papel do Usuario Usuario userVendedor = context.Usuario.Find(3); NotaCompra[] nfComprasVendedor = await nfCompraRepository.GetNotasComprasAsyncByFilterDate(dtInicio, dtFim, userVendedor.Id); Assert.True(nfComprasVendedor.Count() == 2); // Estao no Status do Usuario await nfCompraRepository.RegistraVistoAprovacaoAsyncById(2, userAuxiliar.Id); Usuario userSubGerente = context.Usuario.Find(2); NotaCompra[] nfComprasSubGerente = await nfCompraRepository.GetNotasComprasAsyncByFilterDate(dtInicio, dtFim, userSubGerente.Id); Assert.True(nfComprasSubGerente.Count() == 1); // Usuario Não Registrou Visto ou Aprovacao para a Nota await nfCompraRepository.RegistraVistoAprovacaoAsyncById(4, userAuxiliar.Id); nfComprasAuxiliar = await nfCompraRepository.GetNotasComprasAsyncByFilterDate(dtInicio, dtFim, userAuxiliar.Id); NotaCompra nfFaixa4 = context.NotasCompra.AsNoTracking().Include(n => n.HistAprovNotasCompra).Single(n => n.Id == 4); Assert.True(nfFaixa4.Status == Status.Pendente); Assert.True(nfComprasAuxiliar.Count() == 2); } }
public NotaCompraViewModel ToViewModel(NotaCompra model, Usuario usuarioLogado) { return(new NotaCompraViewModel() { Id = model.Id, DataEmissao = model.DataEmissao.ToShortDateString(), ValorMercadoria = model.ValorMercadoria.ToString("n2"), ValorDesconto = model.ValorDesconto.ToString("n2"), ValorFrete = model.ValorFrete.ToString("n2"), ValorTotal = model.ValorTotal.ToString("n2"), Status = model.Status == (byte)TipoStatus.Pendente ? "Pendente" : "Aprovada", TipoOperacao = usuarioLogado.Login.Equals("user0") ? 0 : usuarioLogado.Papel }); }
public int Actualizar(NotaCompra notaCompra) { int result = 0; var parameters = new DynamicParameters(); parameters.Add("@NotaCompraId", notaCompra.NotaCompraId); parameters.Add("@GuiaRecepcionMateriaPrimaId", notaCompra.GuiaRecepcionMateriaPrimaId); parameters.Add("@EmpresaId", notaCompra.EmpresaId); parameters.Add("@Numero", notaCompra.Numero); parameters.Add("@UnidadMedidaIdPesado", notaCompra.UnidadMedidaIdPesado); parameters.Add("@CantidadPesado", notaCompra.CantidadPesado); parameters.Add("@KilosBrutosPesado", notaCompra.KilosBrutosPesado); parameters.Add("@TaraPesado", notaCompra.TaraPesado); parameters.Add("@KilosNetosPesado", notaCompra.KilosNetosPesado); parameters.Add("@DescuentoPorHumedad", notaCompra.DescuentoPorHumedad); parameters.Add("@KilosNetosDescontar", notaCompra.KilosNetosDescontar); parameters.Add("@KilosNetosPagar", notaCompra.KilosNetosPagar); parameters.Add("@QQ55", notaCompra.QQ55); parameters.Add("@ValorId", notaCompra.ValorId); parameters.Add("@TipoId", notaCompra.TipoId); parameters.Add("@MonedaId", notaCompra.MonedaId); parameters.Add("@PrecioPagado", notaCompra.PrecioPagado); parameters.Add("@PrecioGuardado", notaCompra.PrecioGuardado); parameters.Add("@Importe", notaCompra.Importe); parameters.Add("@EstadoId", notaCompra.EstadoId); parameters.Add("@FechaUltimaActualizacion", notaCompra.FechaUltimaActualizacion); parameters.Add("@UsuarioUltimaActualizacion", notaCompra.UsuarioUltimaActualizacion); parameters.Add("@Observaciones", notaCompra.Observaciones); using (IDbConnection db = new SqlConnection(_connectionString.Value.CoffeeConnectDB)) { result = db.Execute("uspNotaCompraActualizar", parameters, commandType: CommandType.StoredProcedure); } return(result); }
public async void TestRegistraVistoAprovacaoAsyncById() { // In-memory database only exists while the connection is open var connection = new SqliteConnection("DataSource=:memory:"); connection.Open(); var options = new DbContextOptionsBuilder <NotaCompraContext>() .UseSqlite(connection) .Options; using (var context = new NotaCompraContext(options)) { // Create the schema in the database context.Database.EnsureCreated(); INotaCompraRepository nfCompraRepository = new NotaCompraRepository(context); //Testa Visto e aprovacao Usuario userAuxiliar = context.Usuario.Find(4); Usuario userSubGerente = context.Usuario.Find(2); await nfCompraRepository.RegistraVistoAprovacaoAsyncById(1, userAuxiliar.Id); await nfCompraRepository.RegistraVistoAprovacaoAsyncById(2, userAuxiliar.Id); await nfCompraRepository.RegistraVistoAprovacaoAsyncById(2, userSubGerente.Id); NotaCompra nfFaixa1 = context.NotasCompra.AsNoTracking().Include(n => n.HistAprovNotasCompra).Single(n => n.Id == 1); NotaCompra nfFaixa2 = context.NotasCompra.AsNoTracking().Include(n => n.HistAprovNotasCompra).Single(n => n.Id == 2); int numVistosNfFaixa1 = nfFaixa1.HistAprovNotasCompra.Where(h => h.Operacao == Operacao.Visto).Count(); int numVistosNfFaixa2 = nfFaixa2.HistAprovNotasCompra.Where(h => h.Operacao == Operacao.Visto).Count(); int numAprovaNfFaixa2 = nfFaixa2.HistAprovNotasCompra.Where(h => h.Operacao == Operacao.Aprovacao).Count(); Assert.True(numVistosNfFaixa1 == 1); Assert.True(numVistosNfFaixa2 == 1); Assert.True(numAprovaNfFaixa2 == 1); //Testa Unico Visto ou aprovacao Para mesma nota await nfCompraRepository.RegistraVistoAprovacaoAsyncById(1, userAuxiliar.Id); await nfCompraRepository.RegistraVistoAprovacaoAsyncById(2, userAuxiliar.Id); await nfCompraRepository.RegistraVistoAprovacaoAsyncById(2, userSubGerente.Id); numVistosNfFaixa1 = nfFaixa1.HistAprovNotasCompra.Where(h => h.Operacao == Operacao.Visto).Count(); numVistosNfFaixa2 = nfFaixa2.HistAprovNotasCompra.Where(h => h.Operacao == Operacao.Visto).Count(); numAprovaNfFaixa2 = nfFaixa2.HistAprovNotasCompra.Where(h => h.Operacao == Operacao.Aprovacao).Count(); Assert.True(numVistosNfFaixa1 == 1); Assert.True(numVistosNfFaixa2 == 1); Assert.True(numAprovaNfFaixa2 == 1); //Testa nao Aprovar se quantidade de vistos nao for suficiente await nfCompraRepository.RegistraVistoAprovacaoAsyncById(3, userSubGerente.Id); NotaCompra nfFaixa3 = context.NotasCompra.Include(n => n.HistAprovNotasCompra).Single(n => n.Id == 3); int numAprovaNfFaixa3 = nfFaixa1.HistAprovNotasCompra.Where(h => h.Operacao == Operacao.Aprovacao).Count(); Assert.True(numAprovaNfFaixa3 == 0); //Testa Nota Status Aprovada quando atinge numero de vistos e aprovações suficientes Assert.True(nfFaixa1.Status == Status.Aprovada); Assert.True(nfFaixa2.Status == Status.Aprovada); Assert.True(nfFaixa3.Status == Status.Pendente); } }