Exemplo n.º 1
0
        private Encargo GenerarEncargo(DTO.Encargo encargo)
        {
            var cliente  = _clientesRepository.GetOneOrDefaultById(encargo.Cliente ?? 0);
            var vendedor = _vendedoresRepository.GetOneOrDefaultById(encargo.Vendedor ?? 0);

            var farmacoEncargado = default(Farmaco);
            var farmaco          = _farmacoRepository.GetOneOrDefaultById(encargo.Farmaco ?? 0);

            if (farmaco != null)
            {
                var pcoste = farmaco.PrecioUnicoEntrada.HasValue && farmaco.PrecioUnicoEntrada != 0
                    ? (decimal)farmaco.PrecioUnicoEntrada.Value * _factorCentecimal
                    : ((decimal?)farmaco.PrecioMedio ?? 0m) * _factorCentecimal;

                //var proveedor = _proveedorRepository.GetOneOrDefaultByCodigoNacional(farmaco.Id);
                var proveedor = _proveedorRepository.GetOneOrDefaultById(encargo.Proveedor);

                var categoria = farmaco.CategoriaId.HasValue
                    ? _categoriaRepository.GetOneOrDefaultById(farmaco.CategoriaId.Value)
                    : null;

                var subcategoria = farmaco.CategoriaId.HasValue && farmaco.SubcategoriaId.HasValue
                    ? _categoriaRepository.GetSubcategoriaOneOrDefaultByKey(
                    farmaco.CategoriaId.Value,
                    farmaco.SubcategoriaId.Value)
                    : null;

                var familia     = _familiaRepository.GetOneOrDefaultById(farmaco.Familia);
                var laboratorio = _laboratorioRepository.GetOneOrDefaultByCodigo(farmaco.Laboratorio);

                farmacoEncargado = new Farmaco
                {
                    Id           = farmaco.Id,
                    Codigo       = encargo.Farmaco.ToString(),
                    PrecioCoste  = pcoste,
                    Proveedor    = proveedor,
                    Categoria    = categoria,
                    Subcategoria = subcategoria,
                    Familia      = familia,
                    Laboratorio  = laboratorio,
                    Denominacion = farmaco.Denominacion,
                    Precio       = farmaco.PVP * _factorCentecimal,
                    Stock        = farmaco.ExistenciasAux ?? 0
                };
            }

            return(new Encargo
            {
                Id = encargo.Id,
                Fecha = encargo.FechaHora ?? DateTime.MinValue,
                FechaEntrega = encargo.FechaHoraEntrega,
                Farmaco = farmacoEncargado,
                Cantidad = encargo.Cantidad,
                Cliente = cliente,
                Vendedor = vendedor,
                Observaciones = encargo.Observaciones
            });
        }
        private IEnumerable <Pedido> GenerarPedidos(IEnumerable <IGrouping <PedidoCompositeKey, DTO.Pedido> > groups)
        {
            var pedidos = new List <Pedido>();

            foreach (var group in groups)
            {
                var linea   = 0;
                var fecha   = group.FirstOrDefault()?.Fecha;
                var detalle = new List <PedidoDetalle>();
                foreach (var item in group)
                {
                    var pedidoDetalle = new PedidoDetalle()
                    {
                        Linea          = ++linea,
                        CantidadPedida = item.CantInicial,
                        PedidoId       = item.Id
                    };

                    var farmaco = _farmacoRepository.GetOneOrDefaultById(item.Farmaco);
                    if (farmaco != null)
                    {
                        var pcoste = farmaco.PrecioUnicoEntrada.HasValue && farmaco.PrecioUnicoEntrada != 0
                            ? (decimal)farmaco.PrecioUnicoEntrada.Value * _factorCentecimal
                            : ((decimal?)farmaco.PrecioMedio ?? 0m) * _factorCentecimal;

                        //var proveedor = _proveedorRepository.GetOneOrDefaultByCodigoNacional(farmaco.Id);
                        var proveedor = _proveedorRepository.GetOneOrDefaultById(item.Proveedor);

                        var categoria = farmaco.CategoriaId.HasValue
                            ? _categoriaRepository.GetOneOrDefaultById(farmaco.CategoriaId.Value)
                            : null;

                        var subcategoria = farmaco.CategoriaId.HasValue && farmaco.SubcategoriaId.HasValue
                            ? _categoriaRepository.GetSubcategoriaOneOrDefaultByKey(
                            farmaco.CategoriaId.Value,
                            farmaco.SubcategoriaId.Value)
                            : null;

                        var familia     = _familiaRepository.GetOneOrDefaultById(farmaco.Familia);
                        var laboratorio = _laboratorioRepository.GetOneOrDefaultByCodigo(farmaco.Laboratorio);

                        pedidoDetalle.Farmaco = new Farmaco
                        {
                            Id           = farmaco.Id,
                            Codigo       = item.Farmaco.ToString(),
                            PrecioCoste  = pcoste,
                            Proveedor    = proveedor,
                            Categoria    = categoria,
                            Subcategoria = subcategoria,
                            Familia      = familia,
                            Laboratorio  = laboratorio,
                            Denominacion = farmaco.Denominacion,
                            Precio       = farmaco.PVP * _factorCentecimal,
                            Stock        = farmaco.ExistenciasAux ?? 0
                        };

                        detalle.Add(pedidoDetalle);

                        pedidos.Add(new Pedido {
                            Id = group.Key.Id, Fecha = fecha
                        }.AddRangeDetalle(detalle));
                    }
                }
            }
            return(pedidos);
        }
Exemplo n.º 3
0
        private IEnumerable <DE.Recepcion> GenerarRecepciones(Dictionary <RecepcionCompositeKey, List <DTO.Recepcion> > groups)
        {
            var recepciones = new List <DE.Recepcion>();

            foreach (var group in groups)
            {
                var linea           = 0;
                var fecha           = group.Value.Last().Fecha; // a la vuelta preguntamos por > fecha
                var proveedorPedido = group.Value.First().Proveedor.HasValue ? _proveedorRepository.GetOneOrDefaultById(group.Value.First().Proveedor.Value) : null;
                var detalle         = new List <RecepcionDetalle>();
                foreach (var item in group.Value)
                {
                    var recepcionDetalle = new RecepcionDetalle()
                    {
                        Linea              = ++linea,
                        RecepcionId        = int.Parse($"{group.Key.Anio}{group.Key.Albaran}"),
                        Cantidad           = item.Recibido - item.Devuelto,
                        CantidadBonificada = item.Bonificado
                    };

                    var farmaco = _farmacoRepository.GetOneOrDefaultById(item.Farmaco);
                    if (farmaco != null)
                    {
                        var pcoste = 0m;
                        if (item.PVAlbaran > 0)
                        {
                            pcoste = item.PVAlbaran * _factorCentecimal;
                        }
                        else if (item.PC > 0)
                        {
                            pcoste = item.PC * _factorCentecimal;
                        }
                        else
                        {
                            pcoste = farmaco.PrecioUnicoEntrada.HasValue && farmaco.PrecioUnicoEntrada != 0
                                ? (decimal)farmaco.PrecioUnicoEntrada.Value * _factorCentecimal
                                : ((decimal?)farmaco.PrecioMedio ?? 0m) * _factorCentecimal;
                        }

                        var proveedor = _proveedorRepository.GetOneOrDefaultByCodigoNacional(farmaco.Id)
                                        ?? _proveedorRepository.GetOneOrDefaultById(farmaco.Id);

                        var categoria = farmaco.CategoriaId.HasValue
                            ? _categoriaRepository.GetOneOrDefaultById(farmaco.CategoriaId.Value)
                            : null;

                        var subcategoria = farmaco.CategoriaId.HasValue && farmaco.SubcategoriaId.HasValue
                            ? _categoriaRepository.GetSubcategoriaOneOrDefaultByKey(
                            farmaco.CategoriaId.Value,
                            farmaco.SubcategoriaId.Value)
                            : null;

                        var familia     = _familiaRepository.GetOneOrDefaultById(farmaco.Familia);
                        var laboratorio = _laboratorioRepository.GetOneOrDefaultByCodigo(farmaco.Laboratorio);

                        recepcionDetalle.Farmaco = new DE.Farmaco
                        {
                            Id           = farmaco.Id,
                            Codigo       = item.Farmaco.ToString(),
                            PrecioCoste  = pcoste,
                            Proveedor    = proveedor,
                            Categoria    = categoria,
                            Subcategoria = subcategoria,
                            Familia      = familia,
                            Laboratorio  = laboratorio,
                            Denominacion = farmaco.Denominacion,
                            Precio       = item.PVP * _factorCentecimal,
                            Stock        = farmaco.ExistenciasAux ?? 0
                        };
                    }
                    detalle.Add(recepcionDetalle);
                }

                recepciones.Add(new DE.Recepcion
                {
                    Id         = int.Parse($"{group.Key.Anio}{group.Key.Albaran}"),
                    Fecha      = fecha.Value,
                    Lineas     = detalle.Count,
                    ImportePVP = group.Value.Sum(x => x.PVP * x.Recibido * _factorCentecimal),
                    ImportePUC = group.Value.Sum(x => x.PCTotal * _factorCentecimal),
                    Proveedor  = proveedorPedido
                }.AddRangeDetalle(detalle));
            }
            return(recepciones);
        }