Search in sources :

Example 1 with DiscountLine

use of ar.com.ergio.print.fiscal.document.DiscountLine in project lar_361 by comitsrl.

the class FiscalDocumentPrint method loadDocumentLines.

// loadDNFHLines
/**
 * Carga las líneas que se encuentran en el documento de ADempiere hacia
 * el documento de impresoras fiscales.
 * @param mInvoice Documento de ADempiere.
 * @param document Documento de impresoras fiscales.
 */
private void loadDocumentLines(final MInvoice mInvoice, final Document document) {
    // Se obtiene el indicador de si los precios contienen los impuestos incluido
    boolean taxIncluded = MPriceList.get(ctx, mInvoice.getM_PriceList_ID(), getTrxName()).isTaxIncluded();
    // Se obtiene el redondeo para precios de la moneda de la factura
    // int scale = MCurrency.get(oxpDocument.getCtx(), oxpDocument.getC_Currency_ID()).getCostingPrecision();
    MInvoiceLine[] lines = mInvoice.getLines();
    BigDecimal totalLineAmt = BigDecimal.ZERO;
    // String description = "";
    for (int i = 0; i < lines.length; i++) {
        MInvoiceLine mLine = lines[i];
        BigDecimal qtyEntered = mLine.getQtyEntered();
        // @emmie - avoid "special" invoice lines (as shipments comments lines)
        if (qtyEntered.compareTo(BigDecimal.ZERO) > 0) {
            DocumentLine docLine = new DocumentLine();
            docLine.setLineNumber(mLine.getLine());
            docLine.setDescription(manageLineDescription(docLine, mLine));
            // TODO - Review discounts at invoice behavior
            // Calcula el precio unitario de la línea.
            // Aquí tenemos dos casos de línea: Con Bonificaciones o Sin
            // Bonificaciones
            // 1. Sin Bonificaciones
            // El precio unitario es entonces simplemente el precio actual
            // de la
            // línea, es decir el PriceActual.
            // if (!mLine.hasBonus()) {
            BigDecimal unitPrice = mLine.getPriceActual();
            totalLineAmt = totalLineAmt.add(unitPrice);
            // } else {
            // 2. Con Bonificaciones
            // Aquí NO se puede utilizar el mLine.getPriceActual() ya que el
            // mismo tiene contemplado las bonificaciones mientras que en la
            // impresión del ticket, las bonificaciones se restan al final
            // del mismo. De esta forma, el precio unitario para el ticket
            // va a ser mayor que el PriceActual de la línea en caso de que
            // la misma contenga bonificaciones.
            // El cálculo a realizar es:
            // (PriceList * Qty - LineDiscountAmt) / Qty
            // 
            // unitPrice =
            // (mLine.getPriceList().multiply(mLine.getQtyEntered())
            // .subtract(mLine.getLineDiscountAmt())).divide(
            // mLine.getQtyEntered(), scale, RoundingMode.HALF_UP);
            // }
            // LAR - Process discount for invoice
            final I_C_OrderLine ol = mLine.getC_OrderLine();
            final BigDecimal discountRate = ol.getDiscount();
            if (discountRate.compareTo(BigDecimal.ZERO) > 0) {
                final BigDecimal originalAmt = BigDecimal.valueOf(100).multiply(unitPrice).divide(BigDecimal.valueOf(100).subtract(discountRate), 2, BigDecimal.ROUND_FLOOR);
                final DiscountLine discountLine = new DiscountLine("Dto aplicado", originalAmt.subtract(unitPrice).multiply(mLine.getQtyEntered()), true, false, discountRate);
                // Add discount to document line
                docLine.setDiscount(discountLine);
                // Set proper unitPrice
                unitPrice = originalAmt;
            }
            // LAR - Process discount for invoice
            docLine.setUnitPrice(unitPrice);
            docLine.setQuantity(mLine.getQtyEntered());
            docLine.setPriceIncludeIva(taxIncluded);
            // Se obtiene la tasa del IVA de la línea
            // Se asume que el impuesto es siempre IVA, a futuro se verá
            // que hacer si el producto tiene otro impuesto que no sea IVA.
            MTax mTax = MTax.get(Env.getCtx(), mLine.getC_Tax_ID());
            docLine.setIvaRate(mTax.getRate());
            // Se agrega la línea al documento.
            document.addLine(docLine);
        }
    }
    // TODO - Improve this behavior
    BigDecimal amt = mInvoice.get_Value("WithHoldingAmt") == null ? Env.ZERO : // LAR perception are negative
    ((BigDecimal) mInvoice.get_Value("WithHoldingAmt")).negate();
    if (amt.compareTo(BigDecimal.ZERO) > 0) {
        // TODO Corregir el calculo del porcentaje de percepción.
        // BigDecimal rate = amt.divide(totalLineAmt, 2, BigDecimal.ROUND_HALF_UP).multiply(BigDecimal.valueOf(100));
        // @mzuniga - Se agrega la provincia correspondiente a la Percepción en la descripción de la línea
        String sql = "SELECT l.RegionName FROM AD_OrgInfo oi JOIN C_Location l ON oi.C_Location_ID = l.C_Location_ID WHERE oi.AD_Org_ID=?";
        String prov = DB.getSQLValueString(mInvoice.get_TrxName(), sql, (Integer) mInvoice.get_Value("AD_Org_ID"));
        // String.format("Percepci\u00f3n", rate);
        String desc = "Perc. IIBB " + prov;
        // @mzuniga
        PerceptionLine perceptionLine = new PerceptionLine(desc, amt, null);
        document.setPerceptionLine(perceptionLine);
    }
}
Also used : PerceptionLine(ar.com.ergio.print.fiscal.document.PerceptionLine) MInvoiceLine(org.compiere.model.MInvoiceLine) DocumentLine(ar.com.ergio.print.fiscal.document.DocumentLine) MTax(org.compiere.model.MTax) I_C_OrderLine(org.compiere.model.I_C_OrderLine) DiscountLine(ar.com.ergio.print.fiscal.document.DiscountLine) BigDecimal(java.math.BigDecimal)

Example 2 with DiscountLine

use of ar.com.ergio.print.fiscal.document.DiscountLine in project lar_361 by comitsrl.

the class HasarFiscalPrinter method loadDocumentDiscounts.

/**
 * Ejecuta los comandos necesarios para cargar todos los descuentos del
 * documento sobre la impresora fiscal.
 */
private void loadDocumentDiscounts(Document document) throws FiscalPrinterStatusError, FiscalPrinterIOException {
    // Comando: @ReturnRecharge
    for (DiscountLine discount : document.getDocumentDiscounts()) {
        execute(cmdReturnRecharge(discount.getDescription(), discount.getAmount(), discount.getTaxRate(), false, // Impuestos internos
        BigDecimal.ZERO, !discount.isAmountIncludeIva(), // Display
        null, DISCOUNT_RECHARGE));
    }
    // Comando: @GeneralDiscount
    if (document.hasGeneralDiscount()) {
        DiscountLine generalDiscount = document.getGeneralDiscount();
        execute(cmdGeneralDiscount(generalDiscount.getDescription(), generalDiscount.getAmount(), false, !generalDiscount.isAmountIncludeIva(), null));
    }
}
Also used : DiscountLine(ar.com.ergio.print.fiscal.document.DiscountLine)

Example 3 with DiscountLine

use of ar.com.ergio.print.fiscal.document.DiscountLine in project lar_361 by comitsrl.

the class HasarFiscalPrinter method loadDocumentLineItems.

/**
 * Ejecuta los comandos necesarios para cargar las líneas de item
 * del documento en la impresora fiscal.
 */
private void loadDocumentLineItems(Document document) throws FiscalPrinterStatusError, FiscalPrinterIOException {
    // Comando: @PrintLineItem
    for (DocumentLine item : document.getLines()) {
        execute(cmdPrintLineItem(item.getDescription(), item.getQuantity(), item.getAbsUnitPrice(), item.getIvaRate(), item.isSubstract(), // Impuestos internos
        BigDecimal.ZERO, !item.isPriceIncludeIva(), null));
        // Comando: @LastItemDiscount
        if (item.hasDiscount()) {
            DiscountLine discount = item.getDiscount();
            execute(cmdLastItemDiscount(discount.getDescription(), discount.getAbsAmount(), discount.isDiscount(), !discount.isAmountIncludeIva(), null));
        }
    }
}
Also used : DocumentLine(ar.com.ergio.print.fiscal.document.DocumentLine) DiscountLine(ar.com.ergio.print.fiscal.document.DiscountLine)

Aggregations

DiscountLine (ar.com.ergio.print.fiscal.document.DiscountLine)3 DocumentLine (ar.com.ergio.print.fiscal.document.DocumentLine)2 PerceptionLine (ar.com.ergio.print.fiscal.document.PerceptionLine)1 BigDecimal (java.math.BigDecimal)1 I_C_OrderLine (org.compiere.model.I_C_OrderLine)1 MInvoiceLine (org.compiere.model.MInvoiceLine)1 MTax (org.compiere.model.MTax)1