예제 #1
0
        public virtual void Vende(Budget proforma, SerieInfo serie, ClienteInfo cliente, ProductInfo producto, BatchInfo partida)
        {
            if (cliente == null)
            {
                throw new iQException(Library.Invoice.Resources.Messages.NO_CLIENTE_SELECTED);
            }

            if (cliente.Productos == null)
            {
                cliente.LoadChilds(typeof(ProductoCliente), true);
            }

            ProductoClienteInfo productoCliente = cliente.Productos.GetByProducto(producto.Oid);

            if (partida == null)
            {
                CopyFrom(proforma, producto);
            }
            else
            {
                CopyFrom(partida);
            }

            SetTipoFacturacion(productoCliente, producto);
            SetImpuestos(serie, cliente, producto);
            Precio = producto.GetPrecioVenta(productoCliente, partida, ETipoFacturacion);
        }
 /// <summary>
 /// Actualiza el precio en base a si se factura por kilo o bulto
 /// </summary>
 public virtual void UpdatePrecio(ProductInfo p,
                                  BatchInfo pexp,
                                  ProductoClienteInfo pci)
 {
     if (FacturacionBulto)
     {
         if (pci != null && pci.FacturacionBulto)
         {
             Precio = pci.Precio;
         }
         else if (pci == null)
         {
             Precio = p.PrecioVenta * pexp.KilosPorBulto;
         }
         else if (!pci.FacturacionBulto)
         {
             Precio = p.PrecioVenta;
         }
     }
     else
     {
         if (pci != null && pci.FacturacionBulto)
         {
             Precio = pci.Precio / pexp.KilosPorBulto;
         }
         else
         {
             Precio = p.PrecioVenta;
         }
     }
 }
예제 #3
0
        internal static Decimal GetDescuentoCliente(ProductoClienteInfo productoCliente, Decimal pDescuento)
        {
            Decimal p_descuento = pDescuento;

            if (productoCliente != null)
            {
                p_descuento = (productoCliente.ETipoDescuento == ETipoDescuento.Porcentaje) ? productoCliente.PDescuento : pDescuento;
            }

            return(Decimal.Round(p_descuento, 2));
        }
예제 #4
0
        public Decimal GetDescuento(ProductInfo producto, BatchInfo partida)
        {
            if (Productos == null)
            {
                LoadChilds(typeof(ProductoCliente), false);
            }

            long oid_producto = (producto != null) ? producto.Oid : partida.Oid;
            ProductoClienteInfo producto_cliente = Productos.GetByProducto(oid_producto);

            return(ProductoClienteInfo.GetDescuentoCliente(producto_cliente, PDescuento));
        }
예제 #5
0
        internal void CopyValues(ProductoClienteInfo source)
        {
            if (source == null)
            {
                return;
            }

            _record.CopyValues(source.Base.Record);

            _producto     = source.Producto;
            _oid_familia  = source.OidFamilia;
            _oid_impuesto = source.OidImpuesto;
            _p_impuesto   = source.PImpuesto;
        }
예제 #6
0
 public virtual void SetTipoFacturacion(ProductoClienteInfo pci, ProductInfo product)
 {
     if (pci != null)
     {
         FacturacionBulto = pci.FacturacionBulto;
     }
     else if (product != null)
     {
         FacturacionBulto = !(product.ETipoFacturacion == ETipoFacturacion.Peso);
     }
     else
     {
         FacturacionBulto = false;
     }
 }
예제 #7
0
        public Decimal GetPrecio(ProductInfo producto, BatchInfo partida, ETipoFacturacion tipo)
        {
            if (Productos == null)
            {
                LoadChilds(typeof(ProductoCliente), false);
            }

            long oid_producto = (producto != null) ? producto.Oid : partida.OidProducto;

            producto = (producto != null) ? producto : ProductInfo.Get(oid_producto, false, true);
            ProductoClienteInfo producto_cliente = Productos.GetByProducto(oid_producto);

            Decimal precio = producto.GetPrecioVenta(producto_cliente, partida, tipo);

            return(precio);
        }
예제 #8
0
        public virtual void SetTipoFacturacion(ClienteInfo client, ProductInfo product)
        {
            if (client == null)
            {
                throw new iQException(Library.Invoice.Resources.Messages.NO_CLIENTE_SELECTED);
            }

            if (client.Productos == null)
            {
                client.LoadChilds(typeof(ProductoCliente), true);
            }

            ProductoClienteInfo pci = client.Productos.GetItemByProperty("OidProducto", product.Oid);

            SetTipoFacturacion(pci, product);
        }
예제 #9
0
        internal static Decimal GetPrecioCliente(ProductoClienteInfo productoCliente, BatchInfo partida, ProductInfo producto, ETipoFacturacion tipo)
        {
            Decimal          precio          = 0;
            ETipoFacturacion tipoFacturacion = tipo;

            if (productoCliente != null)
            {
                precio          = (productoCliente.ETipoDescuento == Common.ETipoDescuento.Precio) ? productoCliente.Precio : producto.PrecioVenta;
                tipoFacturacion = productoCliente.ETipoFacturacion;
            }
            else
            {
                precio          = producto.PrecioVenta;
                tipoFacturacion = producto.ETipoFacturacion;
            }

            Decimal kilosBulto = (partida != null) ? partida.KilosPorBulto : producto.KilosBulto;

            kilosBulto = (kilosBulto == 0) ? 1 : kilosBulto;

            switch (tipo)
            {
            case ETipoFacturacion.Peso:

                if (tipoFacturacion != ETipoFacturacion.Peso)
                {
                    precio = precio * kilosBulto;
                }

                break;

            default:

                if (tipoFacturacion == ETipoFacturacion.Peso)
                {
                    precio = precio / kilosBulto;
                }

                break;
            }

            return(Decimal.Round(precio, ModulePrincipal.GetNDecimalesPreciosSetting()));
        }