use of org.compiere.model.MInvoice in project lar_361 by comitsrl.
the class MLARPaymentHeader method recalcPaymentWithholding.
// setPayAmtDirectly
/**
* Realiza el cálculo de la retención sobre la cabecera de pago dada.
* Esto lo lleva a cabo creando por cada confiuración aplicable
* un certificado de retención y un pago de tipo "retención".
*
* @param genera Si es true geera el pago retención y el correspondiente certificado.
* @return verdadero si se generó la retención correctamente
*/
public boolean recalcPaymentWithholding(boolean genera) {
this.load(get_TrxName());
final MDocType dt = new MDocType(getCtx(), getC_DocType_ID(), get_TrxName());
String genwh = dt.get_ValueAsString("GenerateWithholding");
if (genwh == null || genwh.equals("N"))
return true;
// Se Borran los certificados y Pagos Retención del Header
BorrarCertificadosdeRetenciondelHeader();
BorrarPagosRetenciondelHeader();
updateHeaderWithholding(getLAR_PaymentHeader_ID(), get_TrxName());
this.load(get_TrxName());
// Recupera la configuración y calcula
final MBPartner bp = new MBPartner(getCtx(), getC_BPartner_ID(), get_TrxName());
final WithholdingConfig[] configs = WithholdingConfig.getConfig(bp, dt.isSOTrx(), get_TrxName(), null, getDateTrx());
// Si se recuperó correctamente la configuración
if (configs != null)
// Se recorren las configuraciones recuperadas
for (final WithholdingConfig wc : configs) {
log.config("Withholding conf >> " + wc);
BigDecimal impRetencion = Env.ZERO;
// Se recupera el tipo de documento para el Pago Retención
// a partir del tipo de retencion
final int c_DocType_ID = wc.getC_DocType_ID();
int cargoRetencion;
if (c_DocType_ID > 0) {
final MDocType docRet = new MDocType(getCtx(), c_DocType_ID, get_TrxName());
// Se recupera y valida el ID del cargo para retención desde el documento
cargoRetencion = docRet.get_ValueAsInt("LAR_Withholding_Charge_ID");
if (cargoRetencion < 0) {
JDialog dialog = new JDialog();
dialog.setIconImage(Adempiere.getImage16());
ADialog.warn(1, dialog, "Error al crear la retenci\u00f3n (No existe cargo retenci\u00f3n configurado en el documento)");
return false;
}
} else {
JDialog dialog = new JDialog();
dialog.setIconImage(Adempiere.getImage16());
ADialog.warn(1, dialog, "Error al crear la retenci\u00f3n (No existe tipo de documento configurado para el Pago Retenci\u00f3n)");
return false;
}
if (wc.isCalcFromPayment()) {
// Se calcula el importe a retener según el tipo de retención
final MPaymentAllocate[] facturas = getInvoices(get_TrxName());
BigDecimal totalOP = getPayHeaderTotalAmt();
BigDecimal impSujetoaRet = Env.ZERO;
BigDecimal aliquot = wc.getAliquot();
BigDecimal impFijo = Env.ZERO;
// En las retenciones de ganancias estos valores se pisan con los recuperados
// desde la tabla de conceptos LAR_Concepto_Ret_Ganancias
BigDecimal impNoSujeto = wc.getamountRefunded();
BigDecimal impRetMin = wc.getPaymentThresholdMin();
BigDecimal impExencion = Env.ZERO;
BigDecimal porcExencion = Env.ZERO;
// Es retención de Ganancias
if (wc.usaTipoGananciasBP()) {
final String tipoGanancias = (String) bp.get_Value("LAR_TipoGanancias");
// Se toma el importe del pago sin IVA
if (facturas.length <= 0)
impSujetoaRet = totalOP.divide(coef_IVA, 2, RoundingMode.HALF_EVEN);
else {
// Se calcula el importe sujeto a retención
BigDecimal sumaImpago = Env.ZERO;
for (final MPaymentAllocate mp : facturas) {
MInvoice factura = mp.getInvoice();
BigDecimal neto = factura.getTotalLines();
BigDecimal impago = mp.getAmount();
/*
* Se suma el importe "impago" de las facturas, si el importe
* impago supera al neto de la factura, solo se suma el neto ya
* que no podemos tomar como importe Sujeto a Retención los
* impuestos (IVA, percepciones, imp. internos, ect).
*/
impSujetoaRet = impSujetoaRet.add(neto.compareTo(impago) >= 0 ? impago : neto);
sumaImpago = sumaImpago.add(impago);
// Si el importe sujeto tomado de las facturas supera al total de la OP
// se toma como importe sujeto a retención el total de la OP-
}
if (totalOP.compareTo(impSujetoaRet) <= 0)
impSujetoaRet = totalOP;
else {
/*
* Se suma al importe sujeto a retención la diferencia
* exedente de la orden de pago (sin tomar en cuenta
* los impuestos de las facturas.
*/
if (totalOP.compareTo(sumaImpago) > 0)
impSujetoaRet = impSujetoaRet.add(totalOP.subtract(sumaImpago));
}
}
// Recuperar el importe pagado a ese proveedor dentro del mes corriente
BigDecimal impPagado = calculaImportePagado(bp);
// Si hay error al recuperar el importe pagado
if (impPagado.compareTo(Env.ZERO) < 0)
continue;
// Configuración del SdN
X_LAR_Concepto_Ret_Ganancias cg = null;
final int concepto_id = bp.get_ValueAsInt("LAR_Concepto_Ret_Ganancias_ID");
// Si no tiene concepto configurado o es "Sin Especificar"
if (concepto_id == 0 || concepto_id == sinEspecificar_ID)
continue;
else {
try {
// Recuperar toda la información asociada al concepto
String sqlcg = "SELECT * " + " FROM LAR_Concepto_Ret_Ganancias " + " WHERE LAR_Concepto_Ret_Ganancias_ID = ?";
PreparedStatement pstmtcg = DB.prepareStatement(sqlcg, get_TrxName());
pstmtcg.setInt(1, concepto_id);
ResultSet rscg = pstmtcg.executeQuery();
if (rscg.next()) {
cg = new X_LAR_Concepto_Ret_Ganancias(Env.getCtx(), rscg, get_TrxName());
} else {
log.warning("No existe configuraci\u00f3n para el concepto LAR_Concepto_Ret_Ganancias_ID = " + concepto_id);
rscg.close();
pstmtcg.close();
continue;
}
rscg.close();
pstmtcg.close();
} catch (SQLException e) {
log.log(Level.SEVERE, "", e);
return false;
}
}
// Recuperar toda la información asociada al concepto
BigDecimal impPiso = Env.ZERO;
// Es cálculo por escala
if (cg.isCalculo_Por_Escala() && tipoGanancias.equals("I")) {
X_LAR_Escala_Ret_Ganancias eg = null;
final List<X_LAR_Escala_Ret_Ganancias> escala = new ArrayList<X_LAR_Escala_Ret_Ganancias>();
// Recuperar la información de la escala
try {
// Recuperar la información de la escala
String sqleg = "SELECT * " + " FROM LAR_Escala_Ret_Ganancias ";
PreparedStatement pstmteg = DB.prepareStatement(sqleg, get_TrxName());
ResultSet rseg = pstmteg.executeQuery();
while (rseg.next()) {
eg = new X_LAR_Escala_Ret_Ganancias(Env.getCtx(), rseg, get_TrxName());
if (!escala.add(eg)) {
log.severe("Error al agregar configuración de escala a la lista");
continue;
}
}
rseg.close();
pstmteg.close();
} catch (SQLException e) {
log.log(Level.SEVERE, "", e);
return false;
}
// Recorrer la escala para encontrar el rango del pago
for (final X_LAR_Escala_Ret_Ganancias esc : escala) {
if (impSujetoaRet.compareTo(esc.getImporte_Desde()) >= 0 && impSujetoaRet.compareTo(esc.getImporte_Hasta()) <= 0) {
// obtener importe fijo, importe no sujeto y alicuota
aliquot = esc.getAlicuota();
// Se corrige la alícuota e impuesto en la config
// para que el certificado de retención quede correcto
wc.setAliquot(aliquot);
wc.setC_Tax_ID(0);
impFijo = esc.getImporte_Fijo();
impPiso = esc.getImporte_No_Sujeto();
impNoSujeto = tipoGanancias.equals("I") ? cg.getImporte_No_Sujeto_Inscripto() : cg.getImporte_No_Sujeto_No_Insc();
break;
}
}
} else // Es cálculo por escala
// Es cáclulo directo
{
// Obtener importe importe no sujeto y alicuota según si el SdN es
// Inscripto o No en el Impuesto a las Ganancias
aliquot = tipoGanancias.equals("I") ? cg.getAlicuota_Inscripto() : cg.getAlicuota_No_Inscripto();
// Se corrige la alícuota e impuesto en la config
// para que el certificado de retención quede correcto
wc.setAliquot(aliquot);
wc.setC_Tax_ID(0);
impNoSujeto = tipoGanancias.equals("I") ? cg.getImporte_No_Sujeto_Inscripto() : cg.getImporte_No_Sujeto_No_Insc();
}
// Se realiza el calculo del importe sujeto a retención en base
// al acumulado en el mes corriente y el importe no sujeto
BigDecimal acumulado = impSujetoaRet.add(impPagado);
// Si se no alcanza el Monto No Sujeto a Retención en el mes corriente, no se genera retención
if ((acumulado).compareTo(impNoSujeto) < 0)
return true;
else {
/*
* Si se supera el importe No Sujeto a Retención con el importe de
* la OP actual se deja como importe Sujeto a Retención la
* diferencia, caso contrario se calcula la retención con el
* importe Sujeto a retención completo.
*/
if (((acumulado.subtract(impNoSujeto)).compareTo(impSujetoaRet)) < 0)
impSujetoaRet = acumulado.subtract(impNoSujeto);
}
// Si es por escala al importe sujeto se le debe restar el "piso" (Sobre Excedente)
if (cg.isCalculo_Por_Escala())
impSujetoaRet = impSujetoaRet.subtract(impPiso);
impRetencion = impSujetoaRet.multiply(aliquot).divide(Env.ONEHUNDRED).setScale(2, BigDecimal.ROUND_HALF_EVEN);
impRetencion = impRetencion.add(impFijo);
// Exención de Ganancias
if (bp.get_ValueAsBoolean("LAR_Exento_Ret_Ganancias")) {
Date fechaVenc = (Date) bp.get_Value("LAR_Vencimiento_Cert_Ganancias");
if (!fechaVenc.before(getDateTrx())) {
impExencion = (BigDecimal) bp.get_Value("LAR_Importe_Exencion_Ganancias");
porcExencion = (BigDecimal) bp.get_Value("LAR_Exencion_Ganancias");
} else {
// Advertir al ususario que el certificado de Exención esta vencido
JDialog dialog = new JDialog();
dialog.setIconImage(Adempiere.getImage16());
ADialog.warn(1, dialog, "Certificado de Exenci\u00f3n de Ganancias Vencido");
}
}
// Exenciones % e importe fijo
BigDecimal impExentoDesc = impRetencion.multiply(porcExencion).divide(Env.ONEHUNDRED).setScale(2, BigDecimal.ROUND_HALF_EVEN);
impRetencion = impRetencion.subtract(impExentoDesc).subtract(impExencion);
} else // Es retención de Ganancias
{
// La organización está configurada como Responsable Inscripto
if (// no recupera correctamente el loc_taxpayertype_id desde orgInfo && orgI.get_ValueAsInt("LCO_TaxPayerType_ID") == responsableInscripto)
wc.isUseOrgTaxPayerType()) {
// Recupera la categoría de IVA del SdN
final int bpTaxPaxerTypeID = bp.get_ValueAsInt("LCO_TaxPayerType_ID");
// no se genera retención de IVA.
if (bpTaxPaxerTypeID != responsableInscripto && facturas.length <= 0)
continue;
else {
// Se recorren las facturas de la OP
for (final MPaymentAllocate mp : facturas) {
MInvoice factura = mp.getInvoice();
MDocType doc = new MDocType(Env.getCtx(), factura.getC_DocType_ID(), this.get_TrxName());
MInvoiceTax[] impFactura = factura.getTaxes(false);
// Se recorren los impuestos de la factura
for (final MInvoiceTax impuesto : impFactura) {
MTax tax = new MTax(Env.getCtx(), impuesto.getC_Tax_ID(), this.get_TrxName());
// Se recupera la letra del tipo de documento
// si es letra M se retiene el 100% y supera el mínimo
String letra = recuperaLetra(doc.get_ValueAsInt("LAR_DocumentLetter_ID"));
// Si el cálculo esta configurado como Documento se asume que es retención por tipo de doc M
if (wc.getBaseType().equals("D")) {
if (letra.equals("M") && (factura.getGrandTotal().compareTo(wc.getPaymentThresholdMin()) > 0)) {
aliquot = wc.getAliquot();
if (tax.getName().contains("IVA"))
impSujetoaRet = impSujetoaRet.add(impuesto.getTaxAmt());
} else
continue;
} else if (tax.getName().contains("IVA")) {
impSujetoaRet = impSujetoaRet.add(impuesto.getTaxAmt());
// Si es alicuota reducida
if (tax.getRate().compareTo(alicuotaIVAGral) < 0)
aliquot = alicuotaRetReducida;
else
// Si no es reducida, se utiliza la
// alicuota de la configuración
aliquot = wc.getAliquot();
}
// Se calcula y acumula la retención
impRetencion = impRetencion.add(impSujetoaRet.multiply(aliquot).divide(Env.ONEHUNDRED).setScale(2, BigDecimal.ROUND_HALF_EVEN));
}
// Se recorren los impuestos de la factura
}
// Se recorren las facturas de la OP
}
// Exención de IVA
if (bp.get_ValueAsBoolean("LAR_Exento_Retenciones_IVA")) {
Date fechaVenc = (Date) bp.get_Value("LAR_Vencimiento_Cert_IVA");
if (!fechaVenc.before(getDateTrx())) {
impExencion = (BigDecimal) bp.get_Value("LAR_Importe_Exencion_IVA");
porcExencion = (BigDecimal) bp.get_Value("LAR_Exencion_IVA");
} else {
// Advertir al ususario que el certificado de Exención esta vencido
JDialog dialog = new JDialog();
dialog.setIconImage(Adempiere.getImage16());
ADialog.warn(1, dialog, "Certificado de Exenci\u00f3n de IVA Vencido");
}
}
// Exenciones % e importe fijo
BigDecimal impExentoDesc = impRetencion.multiply(porcExencion).divide(Env.ONEHUNDRED).setScale(2, BigDecimal.ROUND_HALF_EVEN);
impRetencion = impRetencion.subtract(impExentoDesc).subtract(impExencion);
// el importe a pagar
if (totalOP.compareTo(impRetencion) < 0)
impRetencion = totalOP;
}
// Es retención de IVA
}
// Considerar las Exenciones
final X_LCO_WithholdingType wt = new X_LCO_WithholdingType(Env.getCtx(), wc.getWithholdingType_ID(), get_TrxName());
// Exención de IIBB
if (wc.isUseBPISIC() && bp.get_ValueAsBoolean("LAR_Exento_Ret_IIBB")) {
Date fechaVenc = (Date) bp.get_Value("LAR_Vencimiento_Cert_IIBB");
Date fechaInicio = (Date) bp.get_Value("LAR_Inicio_Cert_IIBB");
if (!fechaInicio.after(getDateTrx()) && !fechaVenc.before(getDateTrx())) {
impExencion = (BigDecimal) bp.get_Value("LAR_Importe_Exencion_IIBB");
porcExencion = (BigDecimal) bp.get_Value("LAR_Exencion_IIBB");
} else {
// Advertir al ususario que el certificado de Exención esta vencido
JDialog dialog = new JDialog();
dialog.setIconImage(Adempiere.getImage16());
ADialog.warn(1, dialog, "Certificado de Exenci\u00f3n de IIBB Vencido");
}
// Exenciones % e importe fijo
BigDecimal impExentoDesc = impRetencion.multiply(porcExencion).divide(Env.ONEHUNDRED).setScale(2, BigDecimal.ROUND_HALF_EVEN);
impRetencion = impRetencion.subtract(impExentoDesc).subtract(impExencion);
}
// Exención de SUSS
if (wt.getName().contains("SUSS") && bp.get_ValueAsBoolean("LAR_Exento_Retenciones_SUSS")) {
Date fechaVenc = (Date) bp.get_Value("LAR_Vencimiento_Cert_SUSS");
Date fechaInicio = (Date) bp.get_Value("LAR_Inicio_Cert_SUSS");
if (!fechaInicio.after(getDateTrx()) && !fechaVenc.before(getDateTrx())) {
impExencion = (BigDecimal) bp.get_Value("LAR_Importe_Exencion_SUSS");
porcExencion = (BigDecimal) bp.get_Value("LAR_Exencion_SUSS");
} else {
// Advertir al ususario que el certificado de Exención esta vencido
JDialog dialog = new JDialog();
dialog.setIconImage(Adempiere.getImage16());
ADialog.warn(1, dialog, "Certificado de Exenci\u00f3n de SUSS Vencido");
}
// Exenciones % e importe fijo
BigDecimal impExentoDesc = impRetencion.multiply(porcExencion).divide(Env.ONEHUNDRED).setScale(2, BigDecimal.ROUND_HALF_EVEN);
impRetencion = impRetencion.subtract(impExentoDesc).subtract(impExencion);
}
// Si el importe de la retención no supera el mínimo o es cero
if (impRetencion.compareTo(impRetMin) < 0 || impRetencion.compareTo(Env.ZERO) <= 0)
continue;
// Validar que si existen facturas, quede importe disponible a pagar
if (facturas.length > 0) {
BigDecimal sumaRemanente = Env.ZERO;
for (final MPaymentAllocate mp : facturas) sumaRemanente = sumaRemanente.add(mp.getAmount());
if (sumaRemanente.compareTo(impRetencion) < 0) {
JDialog dialog = new JDialog();
dialog.setIconImage(Adempiere.getImage16());
ADialog.warn(1, dialog, "No existe suficiente importe pendiente de pago (Revisar las facturas cargadas en la Orden de Pago).");
return false;
}
}
// @fchiappano verifico que existan pagos en los que se pueda
// descontar el importe de la retención.
MPayment pago = null;
boolean compensar = false;
for (MPayment payment : getPayments(get_TrxName())) {
if (!payment.getTenderType().equals("Z") && !payment.get_ValueAsBoolean("EsRetencionIIBB") && payment.getPayAmt().compareTo(impRetencion) >= 0) {
pago = payment;
compensar = true;
// lo utilice prefrentemente por encima de los demás TT que pueden compensar.
if (payment.getTenderType().equals("X"))
break;
}
}
// Existe un pago que permite compensar el importe de la retención
if (compensar && genera) {
// Se crea el Pago Retención compensando el importe
final MPayment pagoRetencion = creaPagoRetencion(impRetencion, cargoRetencion, c_DocType_ID, pago, compensar);
if (pagoRetencion == null) {
JDialog dialog = new JDialog();
dialog.setIconImage(Adempiere.getImage16());
ADialog.warn(1, dialog, "Error al generar el Pago Retenci\u00f3n");
return false;
}
log.config("Pago Retenci\u00f3n: " + pagoRetencion.getC_Payment_ID());
// Se crea el Certificado de Retención
final MLARPaymentWithholding certificado = creaCertificadodeRetencion(impRetencion, impSujetoaRet, wc, pagoRetencion.getC_Payment_ID());
if (certificado == null) {
JDialog dialog = new JDialog();
dialog.setIconImage(Adempiere.getImage16());
ADialog.warn(1, dialog, "Error al generar el Certificado de Retenci\u00f3n");
return false;
}
log.config("Certificado Retenci\u00f3n: " + certificado.getLAR_PaymentWithholding_ID());
} else if (genera) {
// Se crea el Pago Retención sin compensar el importe
final MPayment pagoRetencion = creaPagoRetencion(impRetencion, cargoRetencion, c_DocType_ID, pago, false);
if (pagoRetencion == null) {
JDialog dialog = new JDialog();
dialog.setIconImage(Adempiere.getImage16());
ADialog.warn(1, dialog, "Error al generar el Pago Retenci\u00f3n");
return false;
}
log.config("Pago Retenci\u00f3n: " + pagoRetencion.getC_Payment_ID());
// Se crea el Certificado de Retención
final MLARPaymentWithholding certificado = creaCertificadodeRetencion(impRetencion, impSujetoaRet, wc, pagoRetencion.getC_Payment_ID());
if (certificado == null) {
JDialog dialog = new JDialog();
dialog.setIconImage(Adempiere.getImage16());
ADialog.warn(1, dialog, "Error al generar el Certificado de Retenci\u00f3n");
return false;
}
log.config("Certificado Retenci\u00f3n: " + certificado.getLAR_PaymentWithholding_ID());
} else
this.setWithholdingAmt(impRetencion);
this.saveEx();
}
}
else // Se recorren las configuraciones recuperadas
{
JDialog dialog = new JDialog();
dialog.setIconImage(Adempiere.getImage16());
ADialog.warn(1, dialog, "Error al recuperar configuración desde el SdN");
return false;
}
// pero en la pestaña se visualizan los eliminados y es necesario refrescar manualmente para ver los nuevos.
return true;
}
use of org.compiere.model.MInvoice in project lar_361 by comitsrl.
the class FiscalDocumentPrint method doPrintDocument.
// // TODO - Review the parameters
// public boolean printDocument(final PO document, final Document documentPrintable, final MDocType docType, final MInvoice originalInvoice) {
// // Se valida que el tipo de documento exista
// if(docType == null) {
// throw new IllegalArgumentException("Error: No document type");
// }
//
// // Se obtiene el tipo de documento a emitir por la impresora.
// String fiscalDocument = (String) docType.get_Value("fiscaldocument");
// setPrinterDocType(fiscalDocument);
//
// // Se asigna el documento OXP.
// setOxpDocument(document);
//
// // Se obtiene el controlador fiscal para chequear el status
// //MFiscalPrinter cFiscal = MFiscalPrinter.getOfDocType(docType.get_ID());
//
// // Ejecutar la acción
// boolean ok = execute(Actions.ACTION_PRINT_DOCUMENT,
// new Object[] { document, documentPrintable, originalInvoice });
//
// // Se actualizan los datos del documento oxp.
// //updateOxpDocument((MInvoice)document, !ok);
//
// // reset documento oxp y tipo de doc de la impresora
// //setOxpDocument(null);
// setPrinterDocType(null);
// return ok;
// }
/**
* Realiza la impresión de la factura con los parámetros correspondientes.
*
* @param args
* @throws Exception
*/
// TODO - Review the parameters: object array with differents t
private void doPrintDocument(final Object[] args) throws Exception {
// Argumentos
// MInvoice document = (MInvoice) args[0];
Document documentPrintable = null;
MInvoice originalInvoice = null;
// Factura imprimible por la impresora creada a partir del documento oxp
if (args.length > 1) {
documentPrintable = (Document) args[1];
}
// necesario para notas de crédito
if (args.length > 2) {
originalInvoice = (MInvoice) args[2];
}
// Se manda a imprimir el documento según el tipo de documento
// de las impresoras fiscales asignado al tipo de documento de oxp
fireActionStarted(FiscalDocumentListener.AC_PRINT_DOCUMENT);
// Emisión de una factura.
if (getPrinterDocType().equals(LAR_MDocType.FISCALDOCUMENT_Invoice)) {
printInvoice(documentPrintable);
// Emisión de una nota de crédito.
} else if (getPrinterDocType().equals(LAR_MDocType.FISCALDOCUMENT_CreditNote)) {
printCreditNote(documentPrintable, originalInvoice);
// Emisión de una nota de débito.
} else if (getPrinterDocType().equals(LAR_MDocType.FISCALDOCUMENT_DebitNote)) {
printDebitNote(documentPrintable);
}
// Se dispara el evento de impresión finalizada.
fireDocumentPrintEndedOk();
// Se actualiza la secuencia del tipo de documento emitido.
// updateDocTypeSequence(document);
}
use of org.compiere.model.MInvoice in project lar_361 by comitsrl.
the class FiscalDocumentPrint method printDebitNote.
/**
* Impresión de una nota de débito.
*
* @param document
* nota de débito imprimible por el controlador fiscal creada a
* partir del documento oxp configurado. Dentro de este método se
* realiza un casting del documento parámetro hacia
* {@link DebitNote}, por lo tanto debe ser una instancia de esa
* clase, sino se producirá un error.
*/
private void printDebitNote(final Document document) throws Exception {
MInvoice mInvoice = (MInvoice) getOxpDocument();
// Se valida el documento OXP.
validateOxpDocument(mInvoice);
// Se crea la nota de débito imprimible
DebitNote debitNote = document != null ? (DebitNote) document : createDebitNote(mInvoice);
// Se manda a imprimir la nota de débito a la impresora fiscal.
getFiscalPrinter().printDocument(debitNote);
// Se actualizan los datos de la nota de debito de oxp.
saveDocumentData(mInvoice, debitNote);
}
use of org.compiere.model.MInvoice in project lar_361 by comitsrl.
the class FiscalDocumentPrint method createInvoice.
/**
* Crea una factura imprimible por el controlador fiscal a partir de la
* factura oxp parámetro
*
* @param mInvoice
* factura
* @return la factura imprimible creada
*/
public Invoice createInvoice(final MInvoice mInvoice) {
Invoice invoice = new Invoice();
// Se asigna el cliente.
invoice.setCustomer(getCustomer(mInvoice.getC_BPartner_ID()));
// Se asigna la letra de la factura.
invoice.setLetter(LAR_Utils.getLetter(mInvoice));
// Se asigna el número de remito en caso de existir.
// @emmie
loadShipmentOrderNumbers(mInvoice, invoice);
// Se agregan las líneas de la factura al documento.
loadDocumentLines(mInvoice, invoice);
// Agrega los pagos correspondientes de la factura partir de las imputaciones
loadInvoicePayments(invoice, mInvoice);
// loadDocumentDiscounts(invoice, mInvoice.getDiscounts());
return invoice;
}
use of org.compiere.model.MInvoice in project lar_361 by comitsrl.
the class FiscalDocumentPrint method printCreditNote.
/**
* Impresión de una nota de crédito.
*
* @param document
* nota de crédito imprimible por el controlador fiscal creada a
* partir del documento oxp configurado. Dentro de este método se
* realiza un casting del documento parámetro hacia
* {@link CreditNote}, por lo tanto debe ser una instancia de esa
* clase, sino se producirá un error.
* @param originalInvoice
* factura original del documento oxp configurado, si es null y
* el documento parámetro también, se verifica si el documento
* oxp configurado contiene una factura original, en ese caso la
* obtiene de la BD.
*/
private void printCreditNote(final Document document, final MInvoice originalInvoice) throws FiscalPrinterStatusError, FiscalPrinterIOException, Exception {
MInvoice mInvoice = (MInvoice) getOxpDocument();
// Se valida el documento OXP.
validateOxpDocument(mInvoice);
CreditNote creditNote = document != null ? (CreditNote) document : createCreditNote(mInvoice, originalInvoice);
// Se manda a imprimir la nota de crédito a la impresora fiscal.
getFiscalPrinter().printDocument(creditNote);
// Se actualizan los datos de la nota de crédito de oxp.
saveDocumentData(mInvoice, creditNote);
}
Aggregations