$interes_normal = $BaseDinamicaCalculo * ($tasa_interes * $factor_interes) * $PERIOCIDAD_DE_PAGO / EACP_DIAS_INTERES; //$parcialidad_presumida; if (isset($DatosDePagos[$LAnterior])) { $abonos = $DatosDePagos[$LAnterior][SYS_CAPITAL]; $BaseDinamicaCalculo -= $abonos; if (MODO_DEBUG == true) { $msgC .= "WARN\tPagos FLAT Ajuste de base a {$BaseDinamicaCalculo} por Abono de {$abonos}\r\n"; } $saldo_inicial = $saldo_final; $saldo_final = $saldo_inicial - $abonos; } } $parcialidad_interes = PLAN_DE_PAGOS_SIN_REDONDEO == true ? $interes_normal : round($interes_normal, 2); $parcialidad_iva = PLAN_DE_PAGOS_SIN_REDONDEO == true ? $interes_normal * $tasa_iva : round($interes_normal * $tasa_iva, 2); $sumar_dias += $dias_normales; if ($xCred->getPagosSinCapital($FormaDePago) == true) { $parcialidad_presumida = $parcialidad_iva + $interes_normal; if ($letra == $PAGOS_AUTORIZADOS) { $parcialidad_presumida = $monto_autorizado + ($parcialidad_iva + $interes_normal); } } else { if ($FormaDePago == CREDITO_TIPO_PAGO_CAPITAL_FIJO) { $parcialidad_presumida = $monto_autorizado / $PAGOS_AUTORIZADOS + ($parcialidad_iva + $interes_normal); } if ($FormaDePago == CREDITO_TIPO_PAGO_FLAT_PARCIAL) { //TODO: Activar pagos FLAT $parcialidad_capital = $monto_autorizado / $PAGOS_AUTORIZADOS; $parcialidad_interes = $OPCION_ANUAL_FLAT == true ? $saldo_historico * $PERIOCIDAD_DE_PAGO * ($tasa_interes * $factor_interes) / EACP_DIAS_INTERES : $parcialidad_capital * ($tasa_interes * $factor_interes); $parcialidad_iva = PLAN_DE_PAGOS_SIN_REDONDEO == true ? $parcialidad_interes * $tasa_iva : round($parcialidad_interes * $tasa_iva, 2); $parcialidad_presumida = $parcialidad_capital + $parcialidad_interes + $parcialidad_iva; $msgAlertas .= "WARN\tPagos FLAT\r\n";
*/ $rsm = $ql->getDataRecord($SQLBody); foreach ($rsm as $rwm) { $pendiente = 0; $title = $rwm["descripcion_operacion"]; $monto = $xT->cFloat($rwm["total_operacion"], 2); $MTipo = $rwm["tipo_operacion"]; $cls = ""; $xLog->add("WARN\tIX\tEl Movimiento es {$MTipo}\r\n", $xLog->DEVELOPER); //Omite los Intereses Pactados y tod lo concerniente al credito segun la base if (in_array($MTipo, $arrINTS)) { $xLog->add("WARN\t{$MTipo}\tINTERES\tEl Monto por {$monto} Del Movimiento {$MTipo} se lleva a CERO\r\n", $xLog->DEVELOPER); $monto = 0; } if ($MTipo == OPERACION_CLAVE_PLAN_INTERES) { if ($xCred->getPagosSinCapital() == true and $xF->getInt($fecha_operacion) < $xF->getInt($fecha_de_pago)) { $interes_calculado = $interes_normal_devengado - $interes_normal_pagado + $interes_normal_calculado; if ($monto > $interes_calculado) { $xLog->add("WARN\t{$MTipo}\tINT.DEV\tInteres de la Letra Ajustado de {$monto} a {$interes_calculado} por ser menos\r\n", $xLog->COMMON); $monto = $interes_calculado > 0 ? $interes_calculado : 0; $cls = " class='warn' "; } } else { if ($pago_total == false) { $xLog->add("WARN\tSin cambios en Intereses {$MTipo}\r\n", $xLog->DEVELOPER); } else { $interes_normal = setNoMenorQueCero($interes_normal - $monto); } } } if (in_array($MTipo, $aActosDeIva)) {
function setReestructurarSDPM($SoloConSaldos = false, $credito = false, $forzarTodos = false, $fechaCorte = false, $fechaInicial = false, $EliminarTodo = true) { //FIXME: probar con saldo anterior $fechaCorte = $fechaCorte == false ? fechasys() : $fechaCorte; $msg = ""; $wCredito1 = $credito != false ? " `creditos_mvtos_asdpm`.`documento` = {$credito}" : " `documento` > 0 "; $wCredito2 = $credito != false ? " numero_de_credito = {$credito} " : " numero_de_credito > 0"; $ByRTM = $credito != false ? " " : " SQL_CACHE "; $wFecha1 = " AND (fecha >='{$fechaInicial}' AND fecha <='{$fechaCorte}' ) "; $wFecha2 = " AND (`fecha_actual` >= '{$fechaInicial}' AND `fecha_actual`<='{$fechaCorte}' ) "; $ql = new MQL(); $arrEstatusD = array(OPERACION_CLAVE_MINISTRACION, 111, 114, 115); $arrEstatus = array(OPERACION_CLAVE_MINISTRACION => CREDITO_ESTADO_VIGENTE, 111 => CREDITO_ESTADO_VENCIDO, 114 => CREDITO_ESTADO_VIGENTE, 115 => CREDITO_ESTADO_MOROSO); //Eliminar el SDPM if ($EliminarTodo == true) { $DAction = $ql->setRawQuery("DELETE FROM creditos_sdpm_historico WHERE {$wCredito2} {$wFecha2} "); if (MODO_DEBUG == true) { $msg .= "WARN\tEliminando SDPM\r\n"; } } if ($credito != false) { $ql->setRawQuery("DELETE FROM operaciones_mvtos WHERE docto_afectado={$credito} AND tipo_operacion = 420"); if (MODO_DEBUG == true) { $msg .= "WARN\tEliminando Operaciones 420 del credito {$credito}\r\n"; } } $msg .= "Socio\tCredito\tFecha\tMonto\tSaldo\tDias\tOperacion\tEstatus\tInteres\tMoratorios\r\n"; //Generar saldos de credito por mes $sql = "SELECT {$ByRTM}\n\t\t`creditos_mvtos_asdpm`.`socio`,\n\t\t`creditos_mvtos_asdpm`.`documento`,\n\t\t`creditos_mvtos_asdpm`.`recibo`,\n\t\t`creditos_mvtos_asdpm`.`fecha`,\n\t\t`creditos_mvtos_asdpm`.`operacion`,\n\t\t`creditos_mvtos_asdpm`.`monto`,\n\t\t`creditos_mvtos_asdpm`.`afectacion`\n\t\tFROM `creditos_mvtos_asdpm`\tWHERE {$wCredito1} {$wFecha1} "; //setLog($sql); $rsM = $ql->getDataRecord($sql); $saldo = 0; $creditoA = 0; $xT = new cTipos(); $xF = new cFecha(); $FECHA_DE_ULTIMO_PAGO = "1998-01-01"; $CREDITO_SALDO_ANTERIOR = 0; $MvtoAnterior = OPERACION_CLAVE_MINISTRACION; $ESTADO_ACTUAL = CREDITO_ESTADO_VIGENTE; $DIVISOR_DE_INTERESES = EACP_DIAS_INTERES; $DCred = array(); $IsCredNew = true; $xCred = null; foreach ($rsM as $rw) { $socio = $xT->cInt($rw["socio"]); $credito = $xT->cInt($rw["documento"]); $fecha = $rw["fecha"]; $nota = ""; // $IsCredNew = true; if ($creditoA != $credito) { $saldo = 0; $FECHA_DE_ULTIMO_PAGO = $fecha; $ESTADO_ACTUAL = CREDITO_ESTADO_VIGENTE; $xCred = new cCredito($credito, $socio); $xCred->init(); $DCred = $xCred->getDatosDeCredito(); $CREDITO_SALDO_ANTERIOR = 0; //si es Ministracion if ($MvtoAnterior == OPERACION_CLAVE_MINISTRACION) { $FECHA_DE_ULTIMO_PAGO = $xCred->getFechaDeMinistracion(); } $msg .= "------------------------\tNUEVO_CREDITO : {$credito}------------------------------\r\n"; if ($EliminarTodo == false) { my_query("DELETE FROM creditos_sdpm_historico WHERE numero_de_credito = {$credito} {$wFecha2}"); } } else { $IsCredNew = false; } $OProd = $xCred->getOProductoDeCredito(); $recibo = $rw["recibo"]; $operacion = $rw["operacion"]; $afectacion = $rw["afectacion"]; $monto = $xT->cFloat($rw["monto"], 2); $periocidad = $xCred->getPeriocidadDePago(); $FechaVencimiento = $xCred->getFechaDeVencimiento(); //(!isset( $DCred["fecha_vencimiento_dinamico"])) ? $xCred->getFechaDeVencimiento() : $DCred["fecha_vencimiento_dinamico"]; $DiaInteresMax = $xF->setSumarDias(INTERES_DIAS_MAXIMO_A_DEVENGAR, $FechaVencimiento); $dias_transcurridos = $xF->setRestarFechas($fecha, $FECHA_DE_ULTIMO_PAGO); $saldo_calculado = $dias_transcurridos * $saldo; //No poner la afectacion $saldo += $xT->cFloat($monto * $afectacion, 2); // si es normal, calcular normal, si es mora: Calcular mora y normal, si es vencido: calcular normal y mora $interes = 0; $moratorio = 0; $TASA_NORMAL = $xCred->getTasaDeInteres(); $TASA_MORA = $xCred->getTasaDeMora(); $TIPO_DE_PAGO = $xCred->getTipoDePago(); $PAGOS_SIN_CAPITAL = $xCred->getPagosSinCapital(); $MONTO_ORIGINAL_DE_CREDITO = $xCred->getMontoAutorizado(); $saldoBase = $xT->cFloat($saldo, 2); if ($operacion == OPERACION_CLAVE_PAGO_CAPITAL and $saldo == 0) { $saldoBase = $CREDITO_SALDO_ANTERIOR; } if ($MvtoAnterior == OPERACION_CLAVE_MINISTRACION) { $saldoBase = $CREDITO_SALDO_ANTERIOR; $saldo_calculado = $dias_transcurridos * $CREDITO_SALDO_ANTERIOR; } $SALDO_ACTUAL = $xCred->getSaldoActual(); $BASE_NORMAL = $saldo_calculado; $BASE_MORA = $saldo_calculado; eval($OProd->getPreModInteres()); //considerar si es un maximo de x dias devengar en vencidos switch ($ESTADO_ACTUAL) { case CREDITO_ESTADO_VIGENTE: $interes = $BASE_NORMAL * $TASA_NORMAL / $DIVISOR_DE_INTERESES; break; case CREDITO_ESTADO_VENCIDO: //validar si tiene un maximo de dias transcurridos de devengado if ($xF->getInt($fecha) <= $xF->getInt($DiaInteresMax)) { $interes = $BASE_NORMAL * $TASA_NORMAL / $DIVISOR_DE_INTERESES; $moratorio = $BASE_MORA * $TASA_MORA / $DIVISOR_DE_INTERESES; } else { $interes = 0; $moratorio = 0; $nota = "Despues del {$DiaInteresMax} no se acumula Interes, Vencimiento : {$FechaVencimiento}"; } break; case CREDITO_ESTADO_MOROSO: $interes = $BASE_NORMAL * $TASA_NORMAL / $DIVISOR_DE_INTERESES; $moratorio = $BASE_MORA * $TASA_MORA / $DIVISOR_DE_INTERESES; break; } //END_SWITCH $interes = $xT->cFloat($interes, 2); if ($periocidad == CREDITO_TIPO_PERIOCIDAD_FINAL_DE_PLAZO) { $moratorio = $xT->cFloat($moratorio, 2); //0; //2012-04-10 } else { //$moratorio = 0; } eval($OProd->getPosModInteres()); $msg .= "{$socio}\t{$credito}\t{$fecha}\t{$monto}\t{$saldo}\t{$dias_transcurridos}\t{$operacion}\t{$ESTADO_ACTUAL}\t{$interes}\t{$moratorio}\t{$nota}\r\n"; if ($xF->getInt($fecha) <= $xF->getInt(SYS_FECHA_DE_MIGRACION)) { $interes = 0; $moratorio = 0; if (MODO_DEBUG == true) { $msg .= "WARN\tOMITIR Interes {$interes} y MORA por {$moratorio} por estar antes de la migracion {$fecha}\r\n"; } } if ($xF->getInt($fecha) <= $xF->getInt($fechaCorte)) { $msgSDPM = $xCred->addSDPM($interes, $moratorio, $FECHA_DE_ULTIMO_PAGO, $saldo, $ESTADO_ACTUAL, $fecha, $operacion, $saldo_calculado); //if(MODO_DEBUG == true){ $msg .= $msgSDPM; } } if ($saldo <= TOLERANCIA_SALDOS) { $msg .= "------------------------------------------------------\r\n"; } $creditoA = $credito; $FECHA_DE_ULTIMO_PAGO = $fecha; $CREDITO_SALDO_ANTERIOR = $saldo; $MvtoAnterior = $operacion; /* * si existe la operacion de cambio de estatus, validar en el array, y actualizar el valor * Este estatus se aplicara en el siguiente */ if (in_array($operacion, $arrEstatusD)) { $ESTADO_ACTUAL = $arrEstatus[$operacion]; } } return $msg; }
/** * Si cambio la Fecha de Abono de capital * se Actualiza la fecha de Ultima Operacion */ if ($baseM120 > 0) { $arrUCredito["fecha_ultimo_mvto"] = $fecha_operacion; //TODO : // corregir //calcular cambios de capital //500 + ((4500 - 5000) [-500] *-1)[1000] / 5000 = 25% //1 - (500 / 4500 [0.1111]) $proporcion_de_cambios = 1 - $baseM120 / $xCred->getSaldoActual(); //($baseM120 + ((($xCred->getSaldoActual() - $xCred->getMontoAutorizado()) ) * - 1) ) / $xCred->getMontoAutorizado(); //calcular Interes diario $interes_diario = $xCred->getInteresDiariogenerado() - $xCred->getInteresDiariogenerado() * $proporcion_de_cambios; $arrUCredito["interes_diario"] = $interes_diario; $msg .= "WARN\tCambios de interes por capital queda en {$interes_diario} y proporcion de {$proporcion_de_cambios}\r\n"; if ($xCred->getPagosSinCapital() == true) { $sqlTM = "UPDATE operaciones_mvtos SET afectacion_real=(afectacion_real*{$proporcion_de_cambios}), \n\t\t\t\t\tafectacion_cobranza =(afectacion_cobranza*{$proporcion_de_cambios}), \n\t\t\t\t\tafectacion_estadistica=(afectacion_estadistica*{$proporcion_de_cambios}) WHERE socio_afectado={$socio} AND docto_afectado={$solicitud} AND (tipo_operacion=" . OPERACION_CLAVE_PLAN_INTERES . " OR tipo_operacion=" . OPERACION_CLAVE_PLAN_IVA . ") "; my_query($sqlTM); $msg .= "WARN\tAjustando Intereses de plan de pagos solo interes\r\n"; } //nuevo saldo $nuevo_saldo = $xCred->getSaldoActual() - $baseM120; $nuevo_saldo = $nuevo_saldo < 0 ? 0 : $nuevo_saldo; $arrUCredito["saldo_actual"] = $nuevo_saldo; } if (setNoMenorQueCero($baseM120) <= 0) { $actualizar_parcialidad = false; } //Saldo ints devengados aldo_actual=(saldo_actual - ($baseM120)), //monto_parcialidad $arrUCredito["saldo_actual"] if ($xCred->getPagosAutorizados() <= $nueva_parcialidad) {