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();
            }
        }
        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();
            }
        }
Esempio n. 3
0
        public override void Process()
        {
            var repository = _farmacia.Recepciones as RecepcionRespository;
            var pedidos    = (_lastPedido == null)
                ? repository.GetAllByYearAsDTO(_anioInicio)
                : repository.GetAllByDateAsDTO(_lastPedido.fechaPedido ?? DateTime.MinValue);

            if (!pedidos.Any())
            {
                if (_anioInicio < DateTime.Now.Year)
                {
                    _anioInicio++;
                    _lastPedido = null;
                }

                return;
            }

            var pedidosAgrupados = pedidos.GroupBy(k => new { k.Fecha.Year, k.Empresa, k.Pedido })
                                   .ToDictionary(
                k => new RecepcionCompositeKey {
                Anio = k.Key.Year, Empresa = k.Key.Empresa, Pedido = k.Key.Pedido
            },
                v => v.ToList());

            var batchLineasPedidos = new List <LineaPedido>();
            var batchPedidos       = new List <SF.Pedido>();

            foreach (var pedido in pedidosAgrupados)
            {
                var fecha           = pedido.Value.First().Fecha; // a la vuelta preguntamos por > fecha
                var proveedorPedido = pedido.Value.First().Proveedor.HasValue ?
                                      _farmacia.Proveedores.GetOneOrDefaultById(pedido.Value.First().Proveedor.Value) : null;

                var numeroPedido       = pedido.Key.Pedido;
                var numeroPedidoSerial = numeroPedido.ToString().PadLeft(6, '0');
                var empresa            = pedido.Key.Empresa;
                var empresaSerial      = empresa == _empresaUno ? "00001" : "00002";
                var anio     = pedido.Key.Anio;
                var identity = long.Parse($"{anio}{numeroPedidoSerial}{empresaSerial}");

                var totales   = repository.GetTotalesByPedidoAsDTO(anio, numeroPedido, empresa);
                var recepcion = new FAR.Recepcion
                {
                    Id         = identity,
                    Pedido     = numeroPedido,
                    Fecha      = fecha,
                    Lineas     = totales.Lineas,
                    ImportePVP = totales.PVP,
                    ImportePUC = totales.PUC,
                    Proveedor  = proveedorPedido
                };

                var detalle = new List <RecepcionDetalle>();
                foreach (var item in pedido.Value)
                {
                    var farmaco = (_farmacia.Farmacos as FarmacoRespository).GetOneOrDefaultById(item.Farmaco);
                    if (farmaco != null)
                    {
                        var recepcionDetalle = new RecepcionDetalle()
                        {
                            Linea       = item.Linea,
                            RecepcionId = identity,
                            Cantidad    = item.Recibido,
                            Recepcion   = recepcion
                        };

                        var pvp = item.ImportePvp;
                        var puc = item.ImportePuc != 0 ? item.ImportePuc : farmaco.PUC;

                        var proveedor = _farmacia.Proveedores.GetOneOrDefaultByCodigoNacional(farmaco.Codigo)
                                        ?? (item.Proveedor.HasValue ? _farmacia.Proveedores.GetOneOrDefaultById(item.Proveedor.Value)
                                : null);

                        var categoria = _categoriaRepository.GetOneOrDefaultById(farmaco.Codigo);

                        FAR.Familia familia      = null;
                        FAR.Familia superFamilia = null;
                        if (string.IsNullOrWhiteSpace(farmaco.SubFamilia))
                        {
                            familia = new FAR.Familia {
                                Nombre = string.Empty
                            };
                            superFamilia = _familiaRepository.GetOneOrDefaultById(farmaco.Familia)
                                           ?? new FAR.Familia {
                                Nombre = string.Empty
                            };
                        }
                        else
                        {
                            familia = _familiaRepository.GetSubFamiliaOneOrDefault(farmaco.Familia, farmaco.SubFamilia)
                                      ?? new FAR.Familia {
                                Nombre = string.Empty
                            };
                            superFamilia = _familiaRepository.GetOneOrDefaultById(farmaco.Familia)
                                           ?? new FAR.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>"
                        };

                        recepcionDetalle.Farmaco = new Farmaco
                        {
                            Id           = farmaco.Id,
                            Codigo       = item.Farmaco,
                            PrecioCoste  = puc,
                            Proveedor    = proveedor,
                            Categoria    = categoria,
                            Familia      = familia,
                            SuperFamilia = superFamilia,
                            Laboratorio  = laboratorio,
                            Denominacion = farmaco.Denominacion,
                            Precio       = pvp
                        };

                        detalle.Add(recepcionDetalle);
                        batchLineasPedidos.Add(GenerarLineaDePedido(recepcionDetalle));
                    }
                }

                if (detalle.Any())
                {
                    var pedidoCabecera = GenerarPedido(recepcion);
                    batchPedidos.Add(pedidoCabecera);

                    _lastPedido = pedidoCabecera;
                }
            }

            if (batchLineasPedidos.Any())
            {
                _sisfarma.Pedidos.Sincronizar(batchLineasPedidos);
            }
            if (batchPedidos.Any())
            {
                _sisfarma.Pedidos.Sincronizar(batchPedidos);
            }
        }
Esempio n. 4
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
            });
        }