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