Search in sources :

Example 1 with DocumentLine

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

the class FiscalDocumentPrint method loadDNFHLines.

/**
 * Carga las lineas del remito en el documento no-fiscal
 * homologado a imprimir
 *
 * @param shipment remito del cual se obtienen la lineas
 * @param document documento no-fiscal a imprimir
 */
private void loadDNFHLines(final MInOut shipment, final Document document) {
    for (MInOutLine line : shipment.getLines()) {
        final DocumentLine docLine = new DocumentLine();
        docLine.setLineNumber(line.getLine());
        docLine.setQuantity(line.getQtyEntered());
        final MProduct product = MProduct.get(ctx, line.getM_Product_ID());
        // Usar los campos Identificador para definir el contenido de la linea
        if (fiscalPrinter.isOnPrintUseProductReference()) {
            docLine.setDescription(genDescriptionFromIdentifiers(product));
        } else // Usar alguna de las combinaciones CLAVE NOMBRE - NOMBRE CLAVE - NOMBRE - CLAVE
        {
            String description = " ";
            String name = " ";
            String value = " ";
            // recuperar clave y nombre del articulo
            if (product.getValue() != null && product.getValue().trim().isEmpty())
                value = product.getValue().trim();
            if (product.getName() != null && !product.getName().trim().isEmpty())
                name = product.getName().trim();
            // armar la descripción según la selección
            if (MFiscalPrinter.ONPRINTPRODUCTFORMAT_Name.equals(fiscalPrinter.getOnPrintProductFormat()))
                description = name;
            if (MFiscalPrinter.ONPRINTPRODUCTFORMAT_Value.equals(fiscalPrinter.getOnPrintProductFormat()))
                description = value;
            if (MFiscalPrinter.ONPRINTPRODUCTFORMAT_NameValue.equals(fiscalPrinter.getOnPrintProductFormat()))
                description = name + " " + value;
            if (MFiscalPrinter.ONPRINTPRODUCTFORMAT_ValueName.equals(fiscalPrinter.getOnPrintProductFormat()))
                description = value + " " + name;
            docLine.setDescription(description);
            // Se agrega la línea al documento.
            document.addLine(docLine);
        }
    }
}
Also used : MProduct(org.compiere.model.MProduct) MInOutLine(org.compiere.model.MInOutLine) DocumentLine(ar.com.ergio.print.fiscal.document.DocumentLine)

Example 2 with DocumentLine

use of ar.com.ergio.print.fiscal.document.DocumentLine 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 3 with DocumentLine

use of ar.com.ergio.print.fiscal.document.DocumentLine 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

DocumentLine (ar.com.ergio.print.fiscal.document.DocumentLine)3 DiscountLine (ar.com.ergio.print.fiscal.document.DiscountLine)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 MInOutLine (org.compiere.model.MInOutLine)1 MInvoiceLine (org.compiere.model.MInvoiceLine)1 MProduct (org.compiere.model.MProduct)1 MTax (org.compiere.model.MTax)1