public Farmaco GenerarFarmaco(DTO.Farmaco farmaco) { var familia = _familiaRepository.GetOneOrDefaultById(farmaco.Familia); 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 codigoBarra = _barraRepository.GetOneByFarmacoId(farmaco.Id); var proveedor = _proveedorRepository.GetOneOrDefaultByCodigoNacional(farmaco.Id); var laboratorio = _laboratorioRepository.GetOneOrDefaultByCodigo(farmaco.Laboratorio); var pcoste = farmaco.PrecioUnicoEntrada.HasValue && farmaco.PrecioUnicoEntrada != 0 ? (decimal)farmaco.PrecioUnicoEntrada.Value * _factorCentecimal : ((decimal?)farmaco.PrecioMedio ?? 0m) * _factorCentecimal; 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; } return(new Farmaco { Id = farmaco.Id, Codigo = farmaco.Id.ToString(), Denominacion = farmaco.Denominacion, Familia = familia, Categoria = categoria, Subcategoria = subcategoria, CodigoBarras = codigoBarra, Proveedor = proveedor, 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, PrecioCoste = pcoste, Iva = iva, Stock = farmaco.ExistenciasAux ?? 0, StockMinimo = farmaco.Stock ?? 0, Laboratorio = laboratorio, Baja = farmaco.FechaBaja > 0, FechaCaducidad = farmaco.FechaCaducidad.HasValue && farmaco.FechaCaducidad.Value > 0 ? (DateTime?)$"{farmaco.FechaCaducidad.Value}".ToDateTimeOrDefault("yyyyMM") : null }); }
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)); } }
public override void Process() { var repository = _farmacia.Recepciones as RecepcionRespository; var recepciones = (_lastPedido == null) ? repository.GetAllByYearAsDTO(_anioInicio) : repository.GetAllByDateAsDTO(_lastPedido.fechaPedido ?? DateTime.MinValue); if (!recepciones.Any()) { _anioInicio++; _lastPedido = null; return; } var groups = recepciones.GroupBy(k => new { k.Fecha.Value.Year, k.Albaran.Value }) .ToDictionary( k => new RecepcionCompositeKey { Anio = k.Key.Year, Albaran = k.Key.Value }, v => v.ToList()); var batchLineasPedidos = new List <LineaPedido>(); var batchPedidos = new List <SF.Pedido>(); foreach (var group in groups) { Task.Delay(5).Wait(); _cancellationToken.ThrowIfCancellationRequested(); _anioInicio = group.Key.Anio; var linea = 0; var fecha = group.Value.First().Fecha; // a la vuelta preguntamos por > fecha var proveedorPedido = group.Value.First().Proveedor.HasValue ? _farmacia.Proveedores.GetOneOrDefaultById(group.Value.First().Proveedor.Value) : null; var albaran = group.Key.Albaran > 0 ? group.Key.Albaran : 0; var identity = int.Parse($"{group.Key.Anio}{albaran}"); var recepcion = new FAR.Recepcion { Id = identity, Fecha = fecha.Value, ImportePVP = group.Value.Sum(x => x.PVP * x.Recibido * _factorCentecimal), ImportePUC = group.Value.Sum(x => x.PCTotal * _factorCentecimal), Proveedor = proveedorPedido }; var detalle = new List <RecepcionDetalle>(); foreach (var item in group.Value) { var farmaco = (_farmacia.Farmacos as FarmacoRespository).GetOneOrDefaultById(item.Farmaco); if (farmaco != null) { var recepcionDetalle = new RecepcionDetalle() { Linea = ++linea, RecepcionId = identity, Cantidad = item.Recibido - item.Devuelto, CantidadBonificada = item.Bonificado, Recepcion = recepcion }; 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 = _farmacia.Proveedores.GetOneOrDefaultByCodigoNacional(farmaco.Id) ?? _farmacia.Proveedores.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 = _farmacia.Familias.GetOneOrDefaultById(farmaco.Familia); var laboratorio = _laboratorioRepository.GetOneOrDefaultByCodigo(farmaco.Laboratorio); var codigoBarra = _barraRepository.GetOneByFarmacoId(farmaco.Id); 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; } recepcionDetalle.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 = item.PVP * _factorCentecimal, Stock = farmaco.ExistenciasAux ?? 0, CodigoBarras = codigoBarra, 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, Iva = iva, StockMinimo = farmaco.Stock ?? 0, Baja = farmaco.FechaBaja > 0, FechaCaducidad = farmaco.FechaCaducidad.HasValue && farmaco.FechaCaducidad.Value > 0 ? (DateTime?)$"{farmaco.FechaCaducidad.Value}".ToDateTimeOrDefault("yyyyMM") : null }; detalle.Add(recepcionDetalle); batchLineasPedidos.Add(GenerarLineaDePedido(recepcionDetalle)); } } if (detalle.Any()) { recepcion.Lineas = detalle.Count(); var pedido = GenerarPedido(recepcion); batchPedidos.Add(pedido); _lastPedido = pedido; } else { recepcion.Lineas = 0; var pedido = GenerarPedido(recepcion); _lastPedido = pedido; } } if (batchLineasPedidos.Any()) { _sisfarma.Pedidos.Sincronizar(batchLineasPedidos); } if (batchPedidos.Any()) { _sisfarma.Pedidos.Sincronizar(batchPedidos); } }