Beispiel #1
0
        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
            });
        }
Beispiel #2
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));
            }
        }
Beispiel #3
0
        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);
            }
        }