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