function jsaAmortizarLetras($persona, $credito, $letra, $amortizable)
{
    $NLetra = $letra + 1;
    $xCred = new cCredito($credito);
    $xCred->init();
    if ($xCred->isAFinalDePlazo() == false) {
        $xPlan = new cPlanDePagos();
        $xPlan->initByCredito($credito);
        $msg = "";
        $DPlan = $xPlan->getLetrasInArray(OPERACION_CLAVE_PLAN_CAPITAL, $NLetra);
        $amortizable = setNoMenorQueCero($amortizable);
        for ($ixletra = $NLetra; $ixletra <= $xCred->getPagosAutorizados(); $ixletra++) {
            if (isset($DPlan[$ixletra])) {
                $monto = setNoMenorQueCero($DPlan[$ixletra]);
                if ($amortizable > 0) {
                    if ($amortizable >= $monto) {
                        //cancelar
                        $xPlan->setNeutralizarParcialidad($ixletra);
                    } else {
                        $xPlan->setActualizarParcialidad($ixletra, $monto - $amortizable, false, false);
                    }
                }
                $msg .= "WARN\t  {$ixletra} --- {$amortizable} {$monto};\r\n";
                $amortizable -= $monto;
            }
        }
        $msg .= $xPlan->getMessages();
        if (MODO_DEBUG == true) {
            setLog($msg);
        }
    }
}
 function setAbonoCapital($monto, $parcialidad = SYS_UNO, $cheque = DEFAULT_CHEQUE, $tipo_de_pago = DEFAULT_TIPO_PAGO, $recibo_fiscal = DEFAULT_RECIBO_FISCAL, $observaciones = "", $grupo = DEFAULT_GRUPO, $fecha = false, $recibo = false)
 {
     if ($monto != 0) {
         $this->mMessages .= "WARN\tRECIBO >>>> {$recibo}\r\n";
         $grupo = setNoMenorQueCero($grupo);
         if ($grupo == DEFAULT_GRUPO) {
             $grupo = $this->mGrupoAsociado;
         }
         if (setNoMenorQueCero($this->mNumeroSocio) <= DEFAULT_SOCIO) {
             $this->init();
         }
         if ($fecha == false) {
             $fecha = $this->mFechaOperacion;
         }
         $socio = $this->mNumeroSocio;
         $CRecibo = new cReciboDeOperacion(RECIBOS_TIPO_PAGO_CREDITO, true, $recibo);
         //Set a Mvto Contable
         $CRecibo->setGenerarPoliza();
         $CRecibo->setGenerarTesoreria();
         $CRecibo->setGenerarBancos();
         if (setNoMenorQueCero($recibo) <= 0) {
             if (setNoMenorQueCero($this->mReciboDeOperacion) > 0) {
                 $CRecibo->setNumeroDeRecibo($this->mReciboDeOperacion, true);
                 $recibo = $this->mReciboDeOperacion;
             }
         } else {
             $this->mReciboDeOperacion = $recibo;
         }
         //Agregar recibo si no hay
         if (setNoMenorQueCero($recibo) <= 0) {
             $recibo = $CRecibo->setNuevoRecibo($socio, $this->mNumeroCredito, $this->mFechaOperacion, $parcialidad, RECIBOS_TIPO_PAGO_CREDITO, $observaciones, $cheque, $tipo_de_pago, $recibo_fiscal, $grupo);
             //Checar si se agrego el recibo
             if (setNoMenorQueCero($recibo) > 0) {
                 $this->mMessages .= "OK\tSe Agrego Exitosamente el Recibo {$recibo} de la Cuenta " . $this->mNumeroCredito . " \r\n";
                 $this->mReciboDeOperacion = $recibo;
                 $this->mSucess = true;
             } else {
                 $this->mMessages .= "ERROR\tSe Fallo al Agregar el Recibo {$recibo} de la Cuenta " . $this->mNumeroCredito . " \r\n";
                 $this->mSucess = false;
             }
         }
         $this->mReciboDeOperacion = $recibo;
         if (setNoMenorQueCero($recibo) > 0) {
             //Agregar el Movimiento
             $CRecibo->setNuevoMvto($fecha, $monto, OPERACION_CLAVE_PAGO_CAPITAL, $parcialidad, $observaciones, 1, TM_ABONO, $socio, $this->mNumeroCredito);
             $this->mNuevoSaldo = $this->mSdoCapitalInsoluto - $monto;
             $this->mMessages .= $CRecibo->getMessages();
             $this->mSucess = true;
             //Actualizar la Cuenta
             $arrAct = array("saldo_actual" => $this->mNuevoSaldo);
             $this->mMessages .= "WARN\tSALDO\tSe Actualiza el Saldo de " . $this->mSdoCapitalInsoluto . " a " . $this->mNuevoSaldo . " \r\n";
             $this->setUpdate($arrAct);
         } else {
             $this->mMessages .= "ERROR\tNo Existe Recibo con el cual trabajar ({$recibo}) \r\n";
         }
         //afectar el capital
         if ($this->mSucess == true) {
             $numero_plan = $this->getNumeroDePlanDePagos();
             if (setNoMenorQueCero($numero_plan) > 0) {
                 $xPlan = new cPlanDePagos($numero_plan);
                 //no se necesita inicializar el plan de pagos
                 $xPlan->setActualizarParcialidad($parcialidad, "(afectacion_real - {$monto})");
             }
         }
         $this->mObjRec = $CRecibo;
         $this->mMessages .= $CRecibo->getMessages();
         //Agrega el Devengado de Interes
     }
     return $recibo;
 }
         if ($saldo_actual <= $saldo_inicial and $saldo_final > 0 and ($estatus != CREDITO_ESTADO_AUTORIZADO and $estatus != CREDITO_ESTADO_SOLICITADO) and $MontoCubierto > 0) {
             $LetraActualizada = $monto_capital_de_la_parcialidad <= $MontoCubierto ? 0 : $monto_capital_de_la_parcialidad - $MontoCubierto;
             $mod = 0;
             //274 - 275 = -1
             if ($MontoCubierto - $monto_capital_de_la_parcialidad < TOLERANCIA_SALDOS * -1) {
                 if ($LetraActualizada > TOLERANCIA_SALDOS) {
                     $mod = false;
                 }
             }
             $LetraActualizada = $LetraActualizada < 0 ? 0 : $LetraActualizada;
             $InteresActual = $mod;
             $AhorroActual = $mod;
             $ExtraActual = $mod;
             //obtener el monto del capital
             $xPlan->init();
             $xPlan->setActualizarParcialidad($letra, $LetraActualizada, $InteresActual, $AhorroActual, $tipo_monto_extra, $ExtraActual);
             $msgC .= "{$socio}\t{$solicitud}\tL-{$letra}\tLetra Neutralizada " . getFMoney($LetraActualizada) . ", Interes a " . getFMoney($InteresActual) . ", Ahorro a {$AhorroActual}, SI {$saldo_inicial}, SF " . getFMoney($saldo_final) . ", Amort " . getFMoney($MontoCubierto) . " \r\n";
             $MontoCubierto -= $monto_capital_de_la_parcialidad;
         }
     } else {
         //Actualizar pago de letra a saldo de capital si existe.
         if ($credito_abonado == true) {
             $xPlan->init();
             $saldo_letra = $xCred->getSaldoActual();
             $xPlan->setActualizarParcialidad($letra, $saldo_letra);
         }
     }
 }
 //2015-01-05 Agregar Bonificaciones
 if ($bonificaciones != 0) {
     $xPlan->addBonificacion($bonificaciones, $fecha_de_pago, $letra, $tipo_monto_extra);