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
            });
        }
        public IEnumerable <PedidoDetalle> GetAllDetalleByPedido(long numero, string empresa, int anio)
        {
            var detalle = new List <PedidoDetalle>();
            var conn    = FarmaciaContext.GetConnection();

            try
            {
                var sqlExtra = string.Empty;
                var sql      = $@"
                    select * from appul.ad_linped where pedido='{numero}' AND emp_codigo ='{empresa}' and ejercicio = {anio}";
                var sql1     = $@"
                    select ar.codigo, NVL(stk.stock, 0) as stock, lp.* from appul.ad_linped lp
                        inner join appul.ab_articulos ar on ar.codigo = lp.art_codigo AND ar.emp_codigo = lp.emp_codigo
                        left join (select art_codigo, max(actuales) as stock from appul.ac_existencias group by art_codigo) stk on STK.ART_CODIGO = ar.codigo
                        where lp.pedido='{numero}' AND lp.emp_codigo ='{empresa}' AND lp.ejercicio = {anio} and (stock is null or stock = 0)";

                conn.Open();
                var cmd = conn.CreateCommand();
                cmd.CommandText = sql1;
                var reader = cmd.ExecuteReader();

                while (reader.Read())
                {
                    var rArtCodigo  = Convert.ToString(reader["ART_CODIGO"]);
                    var rLinea      = Convert.ToInt32(reader["LINEA"]);
                    var rCantPedida = !Convert.IsDBNull(reader["CANT_PEDIDA"]) ? Convert.ToInt64(reader["CANT_PEDIDA"]) : 0L;
                    var rPedido     = Convert.ToInt64(reader["PEDIDO"]);
                    var rEmpCodigo  = Convert.ToString(reader["EMP_CODIGO"]);

                    var rPvpIvaEuros = !Convert.IsDBNull(reader["PVP_IVA_EUROS"]) ? (decimal?)Convert.ToDecimal(reader["PVP_IVA_EUROS"]) : null;
                    var rPcIvaEuros  = !Convert.IsDBNull(reader["PC_IVA_EUROS"]) ? (decimal?)Convert.ToDecimal(reader["PC_IVA_EUROS"]) : null;

                    var     farmaco       = _farmacoRepository.GetOneOrDefaultById(rArtCodigo);
                    Farmaco farmacoPedido = null;
                    if (farmaco != null)
                    {
                        //sql = $@"select max(actuales) as stock from appul.ac_existencias where art_codigo = '{rArtCodigo}' group by art_codigo";
                        //cmd.CommandText = sql;
                        //var readerStock = cmd.ExecuteReader();
                        var stock = Convert.ToInt64(reader["stock"]);
                        farmaco.Stock = stock;

                        var proveedor = _proveedorRepository.GetOneOrDefaultByCodigoNacional(rArtCodigo);
                        var categoria = _categoriaRepository.GetOneOrDefaultById(rArtCodigo);

                        Familia familia      = null;
                        Familia superFamilia = null;
                        if (string.IsNullOrWhiteSpace(farmaco.SubFamilia))
                        {
                            familia = new Familia {
                                Nombre = string.Empty
                            };
                            superFamilia = _familiaRepository.GetOneOrDefaultById(farmaco.Familia)
                                           ?? new Familia {
                                Nombre = string.Empty
                            };
                        }
                        else
                        {
                            familia = _familiaRepository.GetSubFamiliaOneOrDefault(farmaco.Familia, farmaco.SubFamilia)
                                      ?? new Familia {
                                Nombre = string.Empty
                            };
                            superFamilia = _familiaRepository.GetOneOrDefaultById(farmaco.Familia)
                                           ?? new Familia {
                                Nombre = string.Empty
                            };
                        }

                        var laboratorio = !farmaco.Laboratorio.HasValue ? new Laboratorio {
                            Codigo = string.Empty, Nombre = "<Sin Laboratorio>"
                        }
                            : _laboratorioRepository.GetOneOrDefaultByCodigo(farmaco.Laboratorio.Value, farmaco.Clase, farmaco.ClaseBot)
                        ?? new Laboratorio {
                            Codigo = string.Empty, Nombre = "<Sin Laboratorio>"
                        };

                        farmacoPedido = new Farmaco
                        {
                            Id           = farmaco.Id,
                            Codigo       = farmaco.Codigo,
                            PrecioCoste  = farmaco.PUC,
                            Proveedor    = proveedor,
                            Categoria    = categoria,
                            Familia      = familia,
                            Laboratorio  = laboratorio,
                            Denominacion = farmaco.Denominacion,
                            Precio       = farmaco.PrecioMedio,
                            Stock        = farmaco.Stock
                        };
                    }

                    var item = new PedidoDetalle
                    {
                        Linea          = rLinea,
                        CantidadPedida = rCantPedida,
                        FarmacoCodigo  = rArtCodigo,
                        EmpresaCodigo  = rEmpCodigo,
                        PedidoCodigo   = rPedido,
                        Farmaco        = farmacoPedido
                    };

                    detalle.Add(item);
                }

                reader.Close();
                reader.Dispose();

                return(detalle);
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }
Exemplo n.º 3
0
        public List <VentaDetalle> GetDetalleDeVentaByVentaId(long venta, string empresa)
        {
            var conn = FarmaciaContext.GetConnection();

            try
            {
                conn.Open();
                var sql = $@"SELECT
                                VTA_OPERACION, LINEA_VENTA,
                                ENT_CODIGO, ENTTP_TIPO,
                                PVP_ORIGINAL_E, PVP_APORTACION_E, IMP_DTO_E,
                                ART_CODIGO, DESCRIPCION, UNIDADES
                                FROM appul.ah_venta_lineas
                                WHERE emp_codigo = '{empresa}' AND situacion = 'N' AND vta_operacion='{venta}'";

                var cmd = conn.CreateCommand();
                cmd.CommandText = sql;
                var reader = cmd.ExecuteReader();

                var detalle = new List <VentaDetalle>();
                while (reader.Read())
                {
                    var vtaOperacion   = Convert.ToInt64(reader["VTA_OPERACION"]);
                    var lineaVenta     = Convert.ToInt32(reader["LINEA_VENTA"]);
                    var entCodigo      = !Convert.IsDBNull(reader["ENT_CODIGO"]) ? (int?)Convert.ToInt32(reader["ENT_CODIGO"]) : null;
                    var enttpTipo      = !Convert.IsDBNull(reader["ENTTP_TIPO"]) ? (int?)Convert.ToInt32(reader["ENTTP_TIPO"]) : null;;
                    var pvpOriginalE   = !Convert.IsDBNull(reader["PVP_ORIGINAL_E"]) ? Convert.ToDecimal(reader["PVP_ORIGINAL_E"]) : 0;
                    var pvpAportacionE = !Convert.IsDBNull(reader["PVP_APORTACION_E"]) ? Convert.ToDecimal(reader["PVP_APORTACION_E"]) : 0;
                    var impDtoE        = !Convert.IsDBNull(reader["IMP_DTO_E"]) ? Convert.ToDecimal(reader["IMP_DTO_E"]) : 0;
                    var artCodigo      = Convert.ToString(reader["ART_CODIGO"]);
                    var unidades       = Convert.ToInt32(reader["UNIDADES"]);

                    var descripcion = reader["DESCRIPCION"];

                    var ventaDetalle = new VentaDetalle
                    {
                        VentaId = vtaOperacion,
                        Linea   = lineaVenta,
                        Receta  = !entCodigo.HasValue ? string.Empty
                            : !enttpTipo.HasValue ? entCodigo.Value.ToString()
                            : $"{entCodigo.Value} {enttpTipo.Value}",
                        PVP       = pvpOriginalE,
                        Precio    = pvpAportacionE,
                        Descuento = impDtoE,
                        Cantidad  = unidades
                                    //Importe = item.Importe * _factorCentecimal,
                    };

                    var farmaco = _farmacoRepository.GetOneOrDefaultById(artCodigo);
                    if (farmaco != null)
                    {
                        var proveedor = _proveedorRepository.GetOneOrDefaultByCodigoNacional(artCodigo);
                        var categoria = _categoriaRepository.GetOneOrDefaultById(artCodigo);

                        Familia familia      = null;
                        Familia superFamilia = null;
                        if (string.IsNullOrWhiteSpace(farmaco.SubFamilia))
                        {
                            familia = new Familia {
                                Nombre = string.Empty
                            };
                            superFamilia = _familiaRepository.GetOneOrDefaultById(farmaco.Familia)
                                           ?? new Familia {
                                Nombre = string.Empty
                            };
                        }
                        else
                        {
                            familia = _familiaRepository.GetSubFamiliaOneOrDefault(farmaco.Familia, farmaco.SubFamilia)
                                      ?? new Familia {
                                Nombre = string.Empty
                            };
                            superFamilia = _familiaRepository.GetOneOrDefaultById(farmaco.Familia)
                                           ?? new Familia {
                                Nombre = string.Empty
                            };
                        }

                        var laboratorio = !farmaco.Laboratorio.HasValue ? new Laboratorio {
                            Codigo = string.Empty, Nombre = "<Sin Laboratorio>"
                        }
                            : _laboratorioRepository.GetOneOrDefaultByCodigo(farmaco.Laboratorio.Value, farmaco.Clase, farmaco.ClaseBot)
                        ?? new Laboratorio {
                            Codigo = string.Empty, Nombre = "<Sin Laboratorio>"
                        };

                        ventaDetalle.Farmaco = new Farmaco
                        {
                            Codigo       = artCodigo,
                            PrecioCoste  = farmaco.PUC,
                            CodigoBarras = farmaco.CodigoBarras,
                            Proveedor    = proveedor,
                            Categoria    = categoria,
                            Familia      = familia,
                            SuperFamilia = superFamilia,
                            Laboratorio  = laboratorio,
                            Denominacion = farmaco.Denominacion,
                            Ubicacion    = farmaco.Ubicacion
                        };
                    }
                    detalle.Add(ventaDetalle);
                }

                reader.Close();
                reader.Dispose();

                return(detalle);
            }
            catch (Exception ex)
            {
                throw;
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }
        }
        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.º 5
0
        public List <VentaDetalle> GetDetalleDeVentaByVentaId(int year, long venta)
        {
            try
            {
                var ventaInteger = (int)venta;

                try
                {
                    using (var db = FarmaciaContext.VentasByYear(year))
                    {
                        var sql    = @"SELECT ID_Farmaco as Farmaco, Organismo, Cantidad, PVP, DescLin as Descuento, Importe FROM lineas_venta WHERE ID_venta= @venta";
                        var lineas = db.Database.SqlQuery <DTO.LineaVenta>(sql,
                                                                           new OleDbParameter("venta", ventaInteger))
                                     .ToList();

                        //if (!lineas.Any())
                        //    Logging.WriteToFileThreadSafe(DateTime.Now.ToString("o") + $"Detalle venta {year} {venta} NO tiene detalle.", FILE_LOG);
                        //else
                        //{
                        //    Logging.WriteToFileThreadSafe(DateTime.Now.ToString("o") + $"Detalle venta {year} {venta} SI tiene detalle. | Total = {lineas.Count}", FILE_LOG);
                        //}

                        var linea   = 0;
                        var detalle = new List <VentaDetalle>();
                        foreach (var item in lineas)
                        {
                            var ventaDetalle = new VentaDetalle
                            {
                                Linea     = ++linea,
                                Importe   = item.Importe * _factorCentecimal,
                                PVP       = item.PVP * _factorCentecimal,
                                Descuento = item.Descuento * _factorCentecimal,
                                Receta    = item.Organismo,
                                Cantidad  = item.Cantidad
                            };

                            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 codigoBarra = _barraRepository.GetOneByFarmacoId(farmaco.Id);
                                var proveedor   = _proveedorRepository.GetOneOrDefaultByCodigoNacional(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)
                                                  ?? new Laboratorio {
                                    Codigo = farmaco.Laboratorio
                                };

                                var iva = default(decimal);
                                switch (farmaco.IVA)
                                {
                                case 1: iva = 4; break;

                                case 2: iva = 10; break;

                                case 3: iva = 21; break;

                                default: iva = 0; break;
                                }

                                ventaDetalle.Farmaco = new Farmaco
                                {
                                    Id                = farmaco.Id,
                                    Codigo            = item.Farmaco.ToString(),
                                    PrecioCoste       = pcoste,
                                    CodigoBarras      = codigoBarra,
                                    Proveedor         = proveedor,
                                    Categoria         = categoria,
                                    Subcategoria      = subcategoria,
                                    Familia           = familia,
                                    Laboratorio       = laboratorio,
                                    Denominacion      = farmaco.Denominacion,
                                    FechaUltimaCompra = farmaco.FechaUltimaEntrada.HasValue && farmaco.FechaUltimaEntrada.Value > 0 ? (DateTime?)$"{farmaco.FechaUltimaEntrada.Value}".ToDateTimeOrDefault("yyyyMMdd") : null,
                                    FechaUltimaVenta  = farmaco.FechaUltimaSalida.HasValue && farmaco.FechaUltimaSalida.Value > 0 ? (DateTime?)$"{farmaco.FechaUltimaSalida.Value}".ToDateTimeOrDefault("yyyyMMdd") : null,
                                    Ubicacion         = farmaco.Ubicacion ?? string.Empty,
                                    Web               = farmaco.BolsaPlastico,
                                    Precio            = farmaco.PVP * _factorCentecimal,
                                    Iva               = iva,
                                    Stock             = farmaco.ExistenciasAux ?? 0,
                                    StockMinimo       = farmaco.Stock ?? 0,
                                    Baja              = farmaco.FechaBaja > 0,
                                    FechaCaducidad    = farmaco.FechaCaducidad.HasValue && farmaco.FechaCaducidad.Value > 0 ? (DateTime?)$"{farmaco.FechaCaducidad.Value}".ToDateTimeOrDefault("yyyyMM") : null
                                };
                            }
                            else
                            {
                                ventaDetalle.Farmaco = new Farmaco {
                                    Id = item.Farmaco, Codigo = item.Farmaco.ToString()
                                }
                            };

                            detalle.Add(ventaDetalle);
                        }

                        //Logging.WriteToFileThreadSafe(DateTime.Now.ToString("o") + $"Detalle generado venta {year} {venta} | total = {detalle.Count}", FILE_LOG);

                        return(detalle);
                    }
                }
                catch (FarmaciaContextException)
                {
                    return(new List <VentaDetalle>());
                }
            }
            catch (Exception ex) when(ex.Message.Contains(FarmaciaContext.MessageUnderlyngProviderFailed))
            {
                return(GetDetalleDeVentaByVentaId(year, venta));
            }
        }
Exemplo n.º 6
0
        private Encargo GenerarEncargo(DTO.Encargo encargo)
        {
            var cliente = new Cliente {
                Id = encargo.Cliente
            };
            var vendedor = new Vendedor {
                Nombre = encargo.Vendedor.Trim()
            };

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

            if (farmaco != null)
            {
                var proveedor = _proveedorRepository.GetOneOrDefaultByCodigoNacional(encargo.Farmaco);
                var categoria = _categoriaRepository.GetOneOrDefaultById(encargo.Farmaco);

                Familia familia      = null;
                Familia superFamilia = null;
                if (string.IsNullOrWhiteSpace(farmaco.SubFamilia))
                {
                    familia = new Familia {
                        Nombre = string.Empty
                    };
                    superFamilia = _familiaRepository.GetOneOrDefaultById(farmaco.Familia)
                                   ?? new Familia {
                        Nombre = string.Empty
                    };
                }
                else
                {
                    familia = _familiaRepository.GetSubFamiliaOneOrDefault(farmaco.Familia, farmaco.SubFamilia)
                              ?? new Familia {
                        Nombre = string.Empty
                    };
                    superFamilia = _familiaRepository.GetOneOrDefaultById(farmaco.Familia)
                                   ?? new Familia {
                        Nombre = string.Empty
                    };
                }

                var laboratorio = !farmaco.Laboratorio.HasValue ? new Laboratorio {
                    Codigo = string.Empty, Nombre = "<Sin Laboratorio>"
                }
                    : _laboratorioRepository.GetOneOrDefaultByCodigo(farmaco.Laboratorio.Value, farmaco.Clase, farmaco.ClaseBot)
                ?? new Laboratorio {
                    Codigo = string.Empty, Nombre = "<Sin Laboratorio>"
                };

                farmacoEncargado = new Farmaco
                {
                    Id           = farmaco.Id,
                    Codigo       = encargo.Farmaco.ToString(),
                    PrecioCoste  = farmaco.PUC,
                    Proveedor    = proveedor,
                    Categoria    = categoria,
                    Familia      = familia,
                    SuperFamilia = superFamilia,
                    Laboratorio  = laboratorio,
                    Denominacion = farmaco.Denominacion,
                    Precio       = farmaco.PrecioMedio,
                };
            }

            return(new Encargo
            {
                Id = encargo.Id,
                Fecha = encargo.FechaHora,
                FechaEntrega = encargo.FechaHoraEntrega,
                Farmaco = farmacoEncargado,
                Cantidad = encargo.Cantidad,
                Cliente = cliente,
                Vendedor = vendedor,
                Observaciones = encargo.Observaciones,
                Empresa = encargo.Empresa,
                Almacen = encargo.Almacen,
                Linea = encargo.Linea
            });
        }
Exemplo n.º 7
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);
        }