Example #1
0
  public String prepareIt() {
    String error = null;
    MBoletaDepositoLine[] lines = getLines();
    // Se valida el estado de los cheques en las líneas de esta boleta.
    for (MBoletaDepositoLine line : lines) {
      // Se valida que el Cheque asociado a la línea no hayan sido previamente
      // depositados por otra boleta de depósito.
      if (line.getPayment().getM_BoletaDeposito_ID() > 0) {
        error = "@PaymentAlreadyDepositedError@";
      }

      // El cheque debe estar en estado Completo
      if (!line.getPayment().getDocStatus().equals(MPayment.DOCSTATUS_Completed)) {
        error = "@CheckMustBeCompleted@";
      }

      // El cheque debe pertenecer a una cuenta de cheques en cartera
      if (!checkInCartera(line.getPayment())) {
        error = "@CheckMustBeInCartera@";
      }

      // Si hubo error se cancela el preparado.
      if (error != null) {
        m_processMsg = error + " (@Check@: " + line.getPayment().getDocumentNo() + ")";
        return STATUS_Invalid;
      }
    }

    // La próxima acción es completar.
    setDocAction(DOCACTION_Complete);
    return DocAction.STATUS_InProgress;
  }
Example #2
0
  /**
   * 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);
      }
    }
  }
Example #3
0
  /*-----------------------------------------
  @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;
  }
Example #4
0
  /**
   * 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);
      }
    }
  }
Example #5
0
  public boolean voidIt() {
    String error = null;
    MBoletaDepositoLine[] lines = getLines();

    for (MBoletaDepositoLine line : lines) {
      // Se anulan el cheque Contra-Movimiento generado a partir
      // del Cheque original asociado a la línea.
      MPayment reversalCheck = line.getReversalPayment();
      // Se cambia el estado para que el engine permita Anular (si está en Closed no
      // permite la anulación)
      reversalCheck.setDocStatus(MPayment.STATUS_Completed);
      // Se anula el cheque.
      if (!reversalCheck.processIt(MPayment.ACTION_Void)) {
        error = reversalCheck.getProcessMsg();
      } else if (!reversalCheck.save()) {
        error = CLogger.retrieveErrorAsString();
      }
      // Si ocurrió algún error se cancela la operación
      if (error != null) {
        m_processMsg = "@ReversalCheckVoidError@ (" + reversalCheck.getDocumentNo() + "): " + error;
        return false;
      }
      // Si al completar la boleta se generó un cheque entrante a la cuenta
      // destino a partir del cheque original, entonces se anula también
      // este cheque generado.
      if (isDocumentForEachCheck() && line.getC_Depo_Payment_ID() > 0) {
        MPayment depoCheck = line.getDepoPayment();
        // Se cambia el estado para que el engine permita Anular (si está en Closed no
        // permite la anulación)
        depoCheck.setDocStatus(MPayment.DOCSTATUS_Completed);
        if (!depoCheck.processIt(MPayment.ACTION_Void)) {
          error = depoCheck.getProcessMsg();
        } else if (!depoCheck.save()) {
          error = CLogger.retrieveErrorAsString();
        }
        // Si ocurrió algún error se cancela la operación
        if (error != null) {
          m_processMsg =
              "@IncomeBoletaCheckVoidError@ (" + depoCheck.getDocumentNo() + "): " + error;
          return false;
        }
      }

      // Se libera el cheque original para que pueda ser depositado
      // en otra boleta.
      MPayment originalCheck = line.getPayment();
      originalCheck.setM_BoletaDeposito_ID(0);
      originalCheck.setDocStatus(MPayment.DOCSTATUS_Completed);
      originalCheck.setDocAction(MPayment.DOCACTION_Close);
      clearDepositedDescription(originalCheck);
      if (!originalCheck.save()) {
        error = CLogger.retrieveErrorAsString();
        m_processMsg = "@OriginalCheckFreeError@ (" + originalCheck.getDocumentNo() + "): " + error;
        return false;
      }
    }

    // Si la acción al completar fue crear un documento por el total de la boleta
    // entonces se anula también este documento.
    if (isDocumentForBoleta() && getC_Boleta_Payment_ID() > 0) {
      MPayment boletaPayment = getBoletaPayment();
      if (!boletaPayment.processIt(MPayment.ACTION_Void)) {
        error = boletaPayment.getProcessMsg();
      } else if (!boletaPayment.save()) {
        error = CLogger.retrieveErrorAsString();
      }
      // Si ocurrió algún error se cancela la operación
      if (error != null) {
        m_processMsg =
            "@DocumentForBoletaVoidError@ (" + boletaPayment.getDocumentNo() + "): " + error;
        return false;
      }
    }

    setDocAction(ACTION_None);
    return true;
  }