Пример #1
0
        public void ControlExistenciaTest()
        {
            AddExistencias();
            var existenciaService = new ExistenciasService(_db);

            Assert.Equal(1, existenciaService.ExistenciaDeBarPorTurno(2).SingleOrDefault(e => e.ProductoId == 1).Consumo);
        }
        // GET: ControlesExistencias
        public IActionResult VentasEnTurno(int id)
        {
            var turno = _context.Set <Turno>().Include(t => t.Bar).SingleOrDefault(t => t.Id == id);
            var es    = new ExistenciasService(_context);
            var data  = es.ExistenciaVentaDeBarPorTurno(id);

            ViewBag.Bar   = turno.Bar.Nombre;
            ViewBag.Fecha = turno.FechaInicio;
            return(View(data));
        }
Пример #3
0
        private List <VentasDependientesPorBar> BuscarVentas(List <int> dependientesId, List <int> baresId, DateTime fechaInicio, DateTime fechaFinal)
        {
            var existenciaService = new ExistenciasService(_context);
            var turnosEnPeriodo   = _context.Turnos
                                    .Include(c => c.Bar)
                                    .Where(c => dependientesId.Any(d => d == c.DependienteId) &&
                                           baresId.Any(b => b == c.BarId) &&
                                           c.FechaInicio >= fechaInicio &&
                                           c.FechaFin <= fechaFinal)
                                    .ToList();

            if (turnosEnPeriodo == null)
            {
                turnosEnPeriodo = new List <Turno>();
            }
            var ventas = turnosEnPeriodo.Select(c => new
            {
                Fecha         = c.FechaInicio,
                TurnoId       = c.Id,
                BarId         = c.BarId,
                DependienteId = c.DependienteId,
                Ventas        = existenciaService.ExistenciaVentaDeBarPorTurno(c.Id).Sum(e => e.Consumo * (double)e.Precio),
            }).ToList();
            var bares                    = _context.Set <Bar>().Select(b => new { Id = b.Id, Nombre = b.Nombre }).ToList();
            var dependientes             = _context.Set <Dependiente>().Select(b => new { Id = b.Id, Nombre = b.NombreCompleto }).ToList();
            var ventasDependientesPorBar = ventas.GroupBy(v => v.DependienteId).Select(v => new VentasDependientesPorBar
            {
                DependienteId     = v.Key,
                DependienteNombre = dependientes.FirstOrDefault(d => d.Id == v.Key).Nombre,
                VentasPorBares    = v.GroupBy(b => b.BarId).Select(b => new VentasPorBar
                {
                    BarId     = b.Key,
                    BarNombre = bares.FirstOrDefault(s => s.Id == b.Key).Nombre,
                    PromedioVentasPorTurno = b.Sum(p => p.Ventas) / b.Count(),
                }).ToList(),
            }).ToList();

            return(ventasDependientesPorBar);
        }
        public IActionResult CostosVentasBares(ParametrosVM parametros)
        {
            var existenciaService = new ExistenciasService(_context);
            var colors            = GetColor();
            var turnosEnPeriodo   = _context.Set <Turno>().Where(t => t.FechaInicio >= parametros.FechaInicio && t.FechaInicio <= parametros.FechaFin).ToList();
            var index             = 0;
            var labels            = turnosEnPeriodo.OrderBy(t => t.FechaInicio).GroupBy(t => t.FechaInicio.Date).Select(t => t.Key.ToShortDateString()).ToList();
            var datosCosto        = new DatosGraficas()
            {
                Labels = labels,
            };
            var datosVentas = new DatosGraficas()
            {
                Labels = labels,
            };

            index = 0;
            foreach (var barId in parametros.Bares)
            {
                var bar    = _context.Set <Bar>().Find(barId);
                var ventas = new List <ResumenVentas>();
                foreach (var turno in turnosEnPeriodo.Where(t => t.BarId == barId))
                {
                    var resumen = existenciaService.ExistenciaVentaDeBarPorTurno(turno.Id).ToList();
                    ventas.Add(new ResumenVentas
                    {
                        TurnoId = turno.Id,
                        Fecha   = turno.FechaInicio.Date,
                        Ventas  = resumen.Sum(e => e.Consumo * (double)e.Precio),
                        Costos  = resumen.Sum(e => e.Consumo * (double)e.Costo),
                    });
                }
                ventas = ventas.GroupBy(v => v.Fecha).Select(v => new ResumenVentas
                {
                    Fecha  = v.Key,
                    Ventas = v.Sum(r => r.Ventas),
                    Costos = v.Sum(r => r.Costos)
                }).ToList();
                datosVentas.Datasets.Add(new Dataset
                {
                    Label           = bar.Nombre,
                    BackgroundColor = colors[index],
                    BorderColor     = colors[index],
                    Fill            = false,
                    Data            = labels.Select(c => ventas.Any(d => d.Fecha.ToShortDateString() == c) ? ventas.Where(d => d.Fecha.ToShortDateString() == c).Sum(s => s.Ventas) : 0).ToList()
                });
                datosCosto.Datasets.Add(new Dataset
                {
                    Label           = bar.Nombre,
                    BackgroundColor = colors[index],
                    BorderColor     = colors[index],
                    Fill            = false,
                    Data            = labels.Select(c => ventas.Any(d => d.Fecha.ToShortDateString() == c) ? ventas.Where(d => d.Fecha.ToShortDateString() == c).Sum(s => s.Costos) : 0).ToList()
                });
                index++;
            }
            ViewBag.Costos         = datosCosto;
            ViewBag.Ventas         = datosVentas;
            ViewBag.Bares          = new MultiSelectList(_context.Set <Bar>().ToList(), "Id", "Nombre", parametros.Bares);
            ViewBag.FormaDePeriodo = new SelectList(Enum.GetValues(typeof(FormaDePeriodo)), parametros.FormaDePeriodo);
            return(View(parametros));
        }
        public IActionResult MovimientosDeProducto(ParametrosVM parametros)
        {
            var existenciaService = new ExistenciasService(_context);
            var turnosEnPeriodo   = _context.Set <Turno>().Where(t => t.FechaInicio >= parametros.FechaInicio && t.FechaInicio <= parametros.FechaFin).ToList();
            var result            = new List <MovimientoDeProductoVM>();

            //controles de existencia
            result.AddRange(_context.Set <DetalleControlExistencia>()
                            .Include(c => c.Control.Turno.Bar)
                            .Where(c => c.ProductoId == parametros.ProductoId && turnosEnPeriodo.Any(t => t.Id == c.Control.TurnoId))
                            .Select(c => new MovimientoDeProductoVM
            {
                Bar              = c.Control.Turno.Bar.Nombre,
                Fecha            = c.Control.Fecha,
                Cantidad         = (decimal)c.Cantidad,
                TipoDeMovimiento = "Control de existencia"
            }));
            //controles de existencias de ventas
            result.AddRange(_context.Set <DetalleControlExistenciaVenta>()
                            .Include(c => c.Control.Turno.Bar)
                            .Where(c => c.ProductoId == parametros.ProductoId && turnosEnPeriodo.Any(t => t.Id == c.Control.TurnoId))
                            .Select(c => new MovimientoDeProductoVM
            {
                Bar              = c.Control.Turno.Bar.Nombre,
                Fecha            = c.Control.Fecha,
                Cantidad         = (decimal)c.Cantidad,
                TipoDeMovimiento = "Control de existencia para venta"
            }));
            //entradas de almacen
            result.AddRange(_context.Set <EntregaDeAlmacen>()
                            .Include(c => c.Turno.Bar)
                            .Where(c => c.ProductoId == parametros.ProductoId && turnosEnPeriodo.Any(t => t.Id == c.TurnoId))
                            .Select(c => new MovimientoDeProductoVM
            {
                Bar              = c.Turno.Bar.Nombre,
                Fecha            = c.Turno.FechaInicio,
                Cantidad         = (decimal)c.Cantidad,
                TipoDeMovimiento = "Entrada de almacen"
            }));
            //entradas de almacen de venta
            result.AddRange(_context.Set <EntregaDeAlmacenVenta>()
                            .Include(c => c.Turno.Bar)
                            .Where(c => c.ProductoId == parametros.ProductoId && turnosEnPeriodo.Any(t => t.Id == c.TurnoId))
                            .Select(c => new MovimientoDeProductoVM
            {
                Bar              = c.Turno.Bar.Nombre,
                Fecha            = c.Turno.FechaInicio,
                Cantidad         = (decimal)c.Cantidad,
                TipoDeMovimiento = "Entrada de almacen para venta"
            }));
            // traslados
            result.AddRange(_context.Set <Traslado>()
                            .Include(c => c.Turno.Bar)
                            .Where(c => c.ProductoId == parametros.ProductoId && turnosEnPeriodo.Any(t => t.Id == c.TurnoId))
                            .Select(c => new MovimientoDeProductoVM
            {
                Bar              = c.Turno.Bar.Nombre,
                Fecha            = c.Fecha,
                Cantidad         = (decimal)c.Cantidad,
                TipoDeMovimiento = "Traslado"
            }));
            // traslados de venta
            result.AddRange(_context.Set <TrasladoVenta>()
                            .Include(c => c.Turno.Bar)
                            .Where(c => c.ProductoId == parametros.ProductoId && turnosEnPeriodo.Any(t => t.Id == c.TurnoId))
                            .Select(c => new MovimientoDeProductoVM
            {
                Bar              = c.Turno.Bar.Nombre,
                Fecha            = c.Fecha,
                Cantidad         = (decimal)c.Cantidad,
                TipoDeMovimiento = "Traslado para venta"
            }));
            ViewBag.ProductoId = new SelectList(_context.Set <Producto>().ToList(), "Id", "Nombre", parametros.ProductoId);
            return(View(result));
        }
 public TurnosController(DependienteDbContext context)
 {
     _context           = context;
     _existenciaService = new ExistenciasService(context);
 }