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);
}
}
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));
}
}
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));
}
}
}
Aggregations