Search in sources :

Example 51 with MInvoice

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;
}
Also used : MDocType(org.compiere.model.MDocType) SQLException(java.sql.SQLException) MInvoice(org.compiere.model.MInvoice) PreparedStatement(java.sql.PreparedStatement) MBPartner(org.compiere.model.MBPartner) MPaymentAllocate(org.compiere.model.MPaymentAllocate) BigDecimal(java.math.BigDecimal) Date(java.util.Date) MPayment(org.compiere.model.MPayment) ResultSet(java.sql.ResultSet) X_LCO_WithholdingType(org.globalqss.model.X_LCO_WithholdingType) ArrayList(java.util.ArrayList) List(java.util.List) MTax(org.compiere.model.MTax) MInvoiceTax(org.compiere.model.MInvoiceTax) JDialog(javax.swing.JDialog)

Example 52 with MInvoice

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);
}
Also used : MInvoice(org.compiere.model.MInvoice) Document(ar.com.ergio.print.fiscal.document.Document) NonFiscalDocument(ar.com.ergio.print.fiscal.document.NonFiscalDocument)

Example 53 with MInvoice

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);
}
Also used : DebitNote(ar.com.ergio.print.fiscal.document.DebitNote) MInvoice(org.compiere.model.MInvoice)

Example 54 with MInvoice

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;
}
Also used : Invoice(ar.com.ergio.print.fiscal.document.Invoice) MInvoice(org.compiere.model.MInvoice)

Example 55 with MInvoice

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);
}
Also used : CreditNote(ar.com.ergio.print.fiscal.document.CreditNote) MInvoice(org.compiere.model.MInvoice)

Aggregations

MInvoice (org.compiere.model.MInvoice)98 BigDecimal (java.math.BigDecimal)29 MInvoiceLine (org.compiere.model.MInvoiceLine)27 MPayment (org.compiere.model.MPayment)16 MBPartner (org.compiere.model.MBPartner)15 MOrder (org.compiere.model.MOrder)15 MInOut (org.compiere.model.MInOut)14 ResultSet (java.sql.ResultSet)13 PreparedStatement (java.sql.PreparedStatement)12 Timestamp (java.sql.Timestamp)11 MDocType (org.compiere.model.MDocType)9 MInOutLine (org.compiere.model.MInOutLine)8 MOrderLine (org.compiere.model.MOrderLine)7 SQLException (java.sql.SQLException)6 ArrayList (java.util.ArrayList)6 AdempiereException (org.adempiere.exceptions.AdempiereException)5 MClient (org.compiere.model.MClient)5 MLocation (org.compiere.model.MLocation)5 KeyNamePair (org.compiere.util.KeyNamePair)5 ValueNamePair (org.compiere.util.ValueNamePair)5