/** * Crea un cheque de entrada a la cuenta de la boleta por cada cheque a depositar. * * @throws Exception cuando se produce un error en la creación o procesado de alguno de los nuevos * cheques. */ private void createDocumentForEachCheck() throws Exception { // Se recorren la líneas de la boleta y se crea un nuevo cheque por cada // cheque a depositar, en donde la cuenta bancaria y la EC del nuevo cheque // son la EC y la Cta Bcria de la Boleta. for (MBoletaDepositoLine line : getLines()) { MPayment check = line.getPayment(); MPayment newCheck = new MPayment(getCtx(), 0, get_TrxName()); String error = null; PO.copyValues(check, newCheck); // Se asigna la fecha del nuevo cheque newCheck.setDateTrx( check.getDateTrx()); // incidencia 4324 - Si se usa el tilde de "crear un payment por // cheque", la fecha de emisión y Vto se deberían mantener. newCheck.setDateAcct(getDocumentDate()); newCheck.setDueDate( check.getDueDate()); // incidencia 4324 - Si se usa el tilde de "crear un payment por // cheque", la fecha de emisión y Vto se deberían mantener. newCheck.setIsReconciled( false); // incidencia 4324 - el nuevo cheque no se encuentra inicialmente conciliado // Se asigna los datos de la boleta newCheck.setC_BPartner_ID(getC_BPartner_ID()); newCheck.setC_BankAccount_ID(getC_BankAccount_ID()); newCheck.setAD_Org_ID(getAD_Org_ID()); // Se agrega una descripcion newCheck.setDescription( Msg.getMsg(getCtx(), "IncomeBoletaCheck", new Object[] {getDocumentNo()})); // Se quita la referencia a la Boleta newCheck.setM_BoletaDeposito_ID(0); // Se Completa y se cierra el cheque if (!newCheck.processIt(ACTION_Complete)) { error = newCheck.getProcessMsg(); } else if (!newCheck.save()) { error = CLogger.retrieveErrorAsString(); } // Si ocurrió un error al procesar se termina la operación de completado. if (error != null) { throw new Exception( "@IncomeBoletaCheckProcessError@ (" + newCheck.getDocumentNo() + "): " + error); } // Se asigna a la línea de la boleta la referencia al cheque creado // por el depósito del cheque original. line.setC_Depo_Payment_ID(newCheck.getC_Payment_ID()); if (!line.save()) { error = CLogger.retrieveErrorAsString(); throw new Exception( "@BoletaLineSaveError@ (@Check@ " + check.getDocumentNo() + "): " + error); } } }
/*----------------------------------------- @Author: Jorge Vidal - Disytel @Fecha: 16/09/2006 @Comentario: Setea isReconciled = valor a : la boleta las lineas los pagos asociados a las lineas @Parametros: valor: Valor a setear como conciliado (true/false) -------------------------------------------*/ public boolean setConciliado(boolean valor) { // TODO Auto-generated method stub MBoletaDepositoLine lineas[] = getLines(); for (int i = 0; i < lineas.length; i++) { MBoletaDepositoLine line = lineas[i]; line.setIsReconciled(valor); line.save(); if (line.getC_Payment_ID() != 0) { MPayment payment = new MPayment(getCtx(), line.getC_Payment_ID(), get_TrxName()); payment.setIsReconciled(valor); payment.save(); } } setIsReconciled(valor); setProcessed(true); setDocAction(DOCACTION_None); save(); return true; }
/** * Crea un contra-movimiento por cada cheque a depositar para efectuar la salida del cheque de la * cuenta de cheques en cartera. * * @throws Exception cuando se produce algún error al crear o procesar el cheque original o el * contra-movimiento. */ private void createReversalChecks() throws Exception { MBoletaDepositoLine[] lines = getLines(true); // Por cada Cheque asociado a la boleta, se crea un contramovimiento // con el importe invertido para realizar la salida del cheque de la cuenta // de cheques en cartera. for (MBoletaDepositoLine line : lines) { MPayment check = line.getPayment(); MPayment reversalCheck = new MPayment(getCtx(), 0, get_TrxName()); String error = null; PO.copyValues(check, reversalCheck); // Se asigna la fecha del contra-movimiento reversalCheck.setDateTrx(getDocumentDate()); reversalCheck.setDateAcct(getDocumentDate()); reversalCheck.setDueDate(getDocumentDate()); reversalCheck.setIsReconciled(true); // incidencia 4324 - conciliado con check // Se asigna la EC de la boleta reversalCheck.setC_BPartner_ID(getC_BPartner_ID()); // Se invierte el signo del monto del cheque original reversalCheck.setPayAmt(check.getPayAmt().negate()); // Se asigna la organizacion del cheque origen reversalCheck.setAD_Org_ID(check.getAD_Org_ID()); // Se agrega una descripcion reversalCheck.addDescription( Msg.getMsg( getCtx(), "ReversalCheck", new Object[] {check.getDocumentNo(), getDocumentNo()})); // FB - Corrección a partir de problema detectado en Intersys // Setea el estado a Borrador ya que el copyValues copia el estado // del cheque original (Completado) y entonces al completar el // reversal el engine ignora esa acción (no se puede completar un // documento ya completado) y entonces ejecuta el DocAction guardado // en el registro. Normalmente esa acción es CL y por eso no se // rompía, pero en Intersys el pago tenía acción RC y quería // revertir el reverso, lógica errónea que además tiraba un // NullPointerException. reversalCheck.setDocStatus(DOCSTATUS_Drafted); reversalCheck.setDocAction(DOCACTION_Complete); // Se Completa y se cierra el cheque if (!reversalCheck.save()) { error = CLogger.retrieveErrorAsString(); } else if (!reversalCheck.processIt(ACTION_Complete)) { error = reversalCheck.getProcessMsg(); } else if (!reversalCheck.processIt(ACTION_Close)) { error = reversalCheck.getProcessMsg(); } else if (!reversalCheck.save()) { error = CLogger.retrieveErrorAsString(); } // Si ocurrió un error al procesar se termina la operación de completado. if (error != null) { throw new Exception( "@ReversalCheckProcessError@ (" + reversalCheck.getDocumentNo() + "): " + error); } // Al cheque original se le asigna la referencia a esta boleta de depósito // y se agrega una descripción. check.setM_BoletaDeposito_ID(getM_BoletaDeposito_ID()); check.addDescription(getDepositedDescription()); check.setIsReconciled(true); // incidencia 4324 - conciliado con reversalCheck // Se cierra también el cheque original para que no pueda ser depositado nuevamente. if (!check.processIt(ACTION_Close)) { error = check.getProcessMsg(); } else if (!check.save()) { error = CLogger.retrieveErrorAsString(); } // Si ocurrió un error al procesar se termina la operación de completado. if (error != null) { throw new Exception( "@OriginalCheckProcessError@ (" + check.getDocumentNo() + "): " + error); } // Se asigna a la línea de la boleta la referencia al cheque Contra-Movimiento line.setC_Reverse_Payment_ID(reversalCheck.getC_Payment_ID()); if (!line.save()) { error = CLogger.retrieveErrorAsString(); throw new Exception( "@BoletaLineSaveError@ (@Check@ " + check.getDocumentNo() + "): " + error); } } }