$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Dias del Mes==" . $xF->getDiasDelMes() . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, En Fecha Corta==" . $xF->getFechaCorta() . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Fecha Larga==" . $xF->getFechaLarga() . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, En Fecha Mediana==" . $xF->getFechaMediana() . "</p>");
//$xHFrm->addHElem(  );
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Fecha Operativa Maxima==" . $xF->getFechaMaximaOperativa() . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, El Mes Anterior==" . $xF->getFechaMesAnterior() . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, dos meses atras==" . $xF->getFechaMesAnterior(false, 2) . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}  - 30 Dias==" . $xF->setRestarDias(30) . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}  + 30 Dias==" . $xF->setSumarDias(30) . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}  + 2 meses==" . $xF->setSumarMeses(2) . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}  - 2 meses==" . $xF->setRestarMeses(2) . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Nombre del Dia==" . $xF->getDayName() . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Dia Inicial del mes==" . $xF->getDiaInicial() . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Obtener Dia Habil==" . $xF->getDiaHabil() . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Dias desde el 31Dic2013==" . $xF->setRestarFechas($xF->get(), "2013-12-31") . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Buscar Sabado(D6) para el dia de hoy==" . $xF->getDiaAbonoSemanal(6) . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Buscar NOMBRE Sabado(D6) para el dia de hoy==" . $xF->getDayName($xF->getDiaAbonoSemanal(6)) . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Fecha de Pago Decenal 1==" . $xF->getDiaAbonoDecenal(10, 20, 30, "2014-03-02") . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Fecha de Pago Decenal 1==" . $xF->getDiaAbonoDecenal(10, 20, 30, "2014-03-11") . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Fecha de Pago Decenal 1==" . $xF->getDiaAbonoDecenal(10, 20, 30, "2014-03-18") . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Fecha de Pago Decenal 1==" . $xF->getDiaAbonoDecenal(10, 20, 30, "2014-03-20") . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Fecha de Pago Decenal 1==" . $xF->getDiaAbonoDecenal(10, 20, 30, "2014-03-24") . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Fecha de Pago Decenal 1==" . $xF->getDiaAbonoDecenal(10, 20, 30, "2014-03-29") . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Fecha de Pago Decenal 1==" . $xF->getDiaAbonoDecenal(10, 20, 30, "2014-03-31") . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Obtener dias Loborales en el mes==" . $xF->getDiasHabilesEnRango("2014-03-31", "2014-03-01") . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Obtener entero del mes==" . $xF->getInt(fechasys()) . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, DIAS CORRIENTES DE MES" . $xF->getDiasCorrientesDeMes() . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, sumar  7 dias time stamp 84600==" . $xF->getFechaByInt($xF->getInt(fechasys()) + (7 + 1) * 84600) . "</p>");
$xHFrm->addHElem("<p class='aviso'>" . $xF->getMessages(OUT_HTML) . "</p>");
//$xHFrm->addHTML("<p>Esto es un parrafo de prueba</p>");
         if (setNoMenorQueCero($xCred->getNumeroDePlanDePagos()) > 0) {
             $xPlan = $xCred->getOPlanDePagos();
             // new cPlanDePagos($xCred->getNumeroDePlanDePagos());
             $data = isset($DCal[$idcredito]) ? $DCal[$idcredito] : false;
             $xPlan->initParcsPendientes(0, $FechaFinal, $data);
             $NumeroPagosVencidos = $xPlan->getPagosAtrasados();
             $SaldoVencido = $xPlan->getMontoAtrasado();
             //Objeto Pago Actual
             $idpago_actual = $xPlan->getPeriodoProximoSegunFecha();
             $idpago_actual = $idpago_actual == false ? $xCred->getPeriodoActual() + 1 : $idpago_actual;
             if ($idpago_actual == false) {
                 $PagoActual = "V";
             } else {
                 $xLetra = $xPlan->getOLetra($idpago_actual);
                 //calcular periodos vencidos
                 $idletra_dias_vencidos = setNoMenorQueCero($xF->setRestarFechas($FechaFinal, $xLetra->getFechaDePago()));
                 $idletra_periodos = floor($idletra_dias_vencidos / $xCred->getPeriocidadDePago());
                 $xLog->add("WARN\t{$idpersona}-{$idcredito}\t{$sucres}\tFecha Proxima de Pago: " . $xLetra->getFechaDePago() . " Dias Vencidos {$idletra_dias_vencidos}, Pagos vencidos {$idletra_periodos}\r\n", $xLog->DEVELOPER);
                 if ($idletra_periodos > 0) {
                     $PagoActual = sprintf("%02d", $idletra_periodos);
                 } else {
                     $PagoActual = "V";
                 }
             }
             $FechaDePrimerIncumplimiento = $xCR->getDate($xPlan->getFechaPrimerAtraso());
         } else {
             $PagoActual = "V";
             //TODO: 2014-12-10
         }
     }
 }
 function calcular($fecha_inicial = false, $PrimerPago = false, $SegundoPago = false, $TercerPago = false)
 {
     $xCred = new cCredito($this->mClaveDeCredito);
     $xCred->init();
     $xF = new cFecha();
     $msg = "";
     $FORMA_DE_PAGO = $xCred->getFormaDePago();
     $PAGOS_AUTORIZADOS = $xCred->getPagosAutorizados();
     $PERIOCIDAD_DE_PAGO = $xCred->getPeriocidadDePago();
     $MONTO_AUTORIZADO = $xCred->getMontoAutorizado();
     $SALDO_ACTUAL = $xCred->getSaldoActual();
     $INTERES_PAGADO = $xCred->getInteresNormalPagado();
     $MORA_PAGADO = $xCred->getInteresMoratorioPagado();
     $xCred->initPagosEfectuados();
     $CAPITAL_PAGADO = setNoMenorQueCero($MONTO_AUTORIZADO - $SALDO_ACTUAL);
     $SALDO_DE_PLAN = $xCred->getMontoAutorizado();
     $TASA_NORMAL = $xCred->getTasaDeInteres();
     $TASA_MORA = $xCred->getTasaDeMora();
     $TASA_IVA = $xCred->getTasaIVA();
     $DIVISOR_DE_INTS = EACP_DIAS_INTERES;
     $FECHA_DE_PAGO = $xCred->getFechaPrimeraParc();
     $FECHA_INICIAL = $xCred->getFechaDeMinistracion();
     $opciondia_1 = $PrimerPago;
     $opciondia_2 = $SegundoPago;
     $opciondia_3 = $TercerPago;
     //sanitiza la fecha de pago
     if ($FECHA_DE_PAGO == false) {
         $FECHA_DE_PAGO = $xF->setSumarDias($PERIOCIDAD_DE_PAGO, $FECHA_INICIAL);
     }
     if (($PERIOCIDAD_DE_PAGO > CREDITO_TIPO_PERIOCIDAD_CATORCENAL or $PERIOCIDAD_DE_PAGO == CREDITO_TIPO_PERIOCIDAD_CATORCENAL) and ($opciondia_1 == false or $opciondia_2 == false or $opciondia_3 == false)) {
         if ($PERIOCIDAD_DE_PAGO == CREDITO_TIPO_PERIOCIDAD_QUINCENAL) {
             $opciondia_1 = $opciondia_1 == false ? PQ_DIA_PRIMERA_QUINCENA : $opciondia_1;
             $opciondia_2 = $opciondia_2 == false ? PQ_DIA_SEGUNDA_QUINCENA : $opciondia_2;
         } elseif ($PERIOCIDAD_DE_PAGO == CREDITO_TIPO_PERIOCIDAD_DECENAL) {
             $opciondia_1 = $opciondia_1 == false ? 10 : $opciondia_1;
             $opciondia_2 = $opciondia_2 == false ? 20 : $opciondia_2;
             $opciondia_3 = $opciondia_3 == false ? 30 : $opciondia_3;
         } else {
             $opciondia_1 = $opciondia_1 == false ? PM_DIA_DE_PAGO : $opciondia_1;
         }
     }
     //pagos decenales entre el mes
     $arrPagos = array();
     //obtener los dias de pago en el mes por tipo de pago
     $dia_de_pago = $xCred->getFechaDeMinistracion();
     for ($i = 1; $i <= $PAGOS_AUTORIZADOS; $i++) {
         $letra = $i;
         switch ($PERIOCIDAD_DE_PAGO) {
             case CREDITO_TIPO_PERIOCIDAD_DIARIO:
                 $dia_de_pago = $xF->getDiaHabil($xF->setSumarDias(1, $dia_de_pago));
                 $arrPagos[$letra][SYS_FECHA] = $dia_de_pago;
                 $msg .= "OK\t{$letra}\tDIARIO\tFecha de pago a {$dia_de_pago}\r\n";
                 break;
             case CREDITO_TIPO_PERIOCIDAD_SEMANAL:
                 break;
             case CREDITO_TIPO_PERIOCIDAD_DECENAL:
                 break;
             case CREDITO_TIPO_PERIOCIDAD_CATORCENAL:
                 //dias naturales, cada dos semanas?
                 break;
             case CREDITO_TIPO_PERIOCIDAD_QUINCENAL:
                 $dia_de_pago = $xF->setSumarDias(CREDITO_TIPO_PERIOCIDAD_QUINCENAL, $dia_de_pago);
                 $dia_de_pago = $xF->getDiaAbonoQuincenal($opciondia_1, $opciondia_2, $dia_de_pago);
                 $arrPagos[$letra][SYS_FECHA] = $dia_de_pago;
                 $msg .= "OK\t{$letra}\tQUINCENAL\tFecha de pago a {$dia_de_pago}, opcion {$opciondia_1}, {$opciondia_2}\r\n";
                 break;
             case CREDITO_TIPO_PERIOCIDAD_MENSUAL:
                 $dia_de_pago = date("Y-m-", $xF->getInt($dia_de_pago)) . $opciondia_1;
                 $dia_de_pago = $xF->setSumarMeses(1, $dia_de_pago);
                 $dia_de_pago = $xF->getDiaHabil($dia_de_pago);
                 $arrPagos[$letra][SYS_FECHA] = $dia_de_pago;
                 $msg .= "OK\t{$letra}\tMENSUAL\tFecha de pago a {$dia_de_pago}, opcion {$opciondia_1}\r\n";
                 break;
             case CREDITO_TIPO_PERIOCIDAD_BIMESTRAL:
                 break;
             case CREDITO_TIPO_PERIOCIDAD_TRIMESTRAL:
                 break;
         }
     }
     //$FORMULA_INT			= new cFormula("interes_normal");
     //dias de pago
     //si es empresa, tomar la fecha de la empresa semanal, quincenal, mensual, decenal
     //Iniciar los Pagos Actuales
     //$this->initParcsPendientes();
     $DatosDePagados = $xCred->getListadoDePagos();
     /* interes capital impuestos */
     switch ($FORMA_DE_PAGO) {
         case CREDITO_TIPO_PAGO_PERIODICO:
             //parcialidad interes + capital
             break;
         case CREDITO_TIPO_PAGO_FLAT_PARCIAL:
             for ($i = 1; $i <= $PAGOS_AUTORIZADOS; $i++) {
                 $letra = $i;
                 $letraAnterior = setNoMenorQueCero($letra - 1);
                 $PagoAnterior = isset($DatosDePagados[$letra]) ? $DatosDePagados[$letra] : array();
                 $capital_pagado = isset($DPago[SYS_CAPITAL]) ? $DPago[SYS_CAPITAL] : 0;
                 $SALDO_DE_PLAN = $SALDO_DE_PLAN - $capital_pagado;
                 $interes_normal = $MONTO_AUTORIZADO * $PERIOCIDAD_DE_PAGO * $TASA_NORMAL / $DIVISOR_DE_INTS;
                 $capital = $MONTO_AUTORIZADO / $PAGOS_AUTORIZADOS;
                 $capital = setNoMenorQueCero($capital - $capital_pagado);
                 $interes_pagado = isset($DPago[SYS_INTERES_NORMAL]) ? $DPago[SYS_INTERES_NORMAL] : 0;
                 $interes_normal = setNoMenorQueCero($interes_normal - $interes_pagado);
                 $arrPagos[$letra][SYS_INTERES_NORMAL] = $interes_normal;
                 if ($letra == $PAGOS_AUTORIZADOS) {
                     if ($SALDO_DE_PLAN > 0) {
                         $arrPagos[$letra][SYS_CAPITAL] = $SALDO_DE_PLAN;
                         $msg .= "WARN\t{$letra}\tCapital a ultimo pago {$SALDO_DE_PLAN} \r\n";
                     }
                 }
                 //determinar proxima fecha de pago
                 $msg .= "OK\t{$letra}\tInteres Normal en {$interes_normal}, Pagado {$interes_pagado} \r\n";
             }
             break;
         case CREDITO_TIPO_PAGO_INTERES_PERIODICO:
             for ($i = 1; $i <= $PAGOS_AUTORIZADOS; $i++) {
                 $letra = $i;
                 $letraAnterior = setNoMenorQueCero($letra - 1);
                 $DAnterior = isset($DatosDePagados[$letraAnterior]) ? $DatosDePagados[$letraAnterior] : array();
                 $capital_pagado = isset($DAnterior[SYS_CAPITAL]) ? $DAnterior[SYS_CAPITAL] : 0;
                 $SALDO_DE_PLAN = $SALDO_DE_PLAN - $capital_pagado;
                 $DPago = isset($DatosDePagados[$letra]) ? $DatosDePagados[$letra] : array();
                 $interes_pagado = isset($DPago[SYS_INTERES_NORMAL]) ? $DPago[SYS_INTERES_NORMAL] : 0;
                 //datos del pago anterior
                 $DLetraAnterior = isset($arrPagos[$letraAnterior]) ? $arrPagos[$letraAnterior] : array();
                 $DLetra = isset($arrPagos[$letra]) ? $arrPagos[$letra] : array();
                 $FechaAnterior = isset($DLetraAnterior[SYS_FECHA]) ? $DLetraAnterior[SYS_FECHA] : $xCred->getFechaDeMinistracion();
                 $FechaActual = isset($DLetra[SYS_FECHA]) ? $DLetra[SYS_FECHA] : false;
                 $DIAS_TRANSCURRIDOS = $xF->setRestarFechas($FechaActual, $FechaAnterior);
                 //INTERES NORMAL
                 $interes_normal = $SALDO_DE_PLAN * $DIAS_TRANSCURRIDOS * $TASA_NORMAL / $DIVISOR_DE_INTS;
                 $interes_normal = setNoMenorQueCero($interes_normal - $interes_pagado);
                 $arrPagos[$letra][SYS_INTERES_NORMAL] = $interes_normal;
                 if ($capital_pagado > 0) {
                     $msg .= "WARN\t{$letra}\tCapital en pago {$letraAnterior} de {$capital_pagado} \r\n";
                 }
                 if ($letra == $PAGOS_AUTORIZADOS) {
                     if ($SALDO_DE_PLAN > 0) {
                         $arrPagos[$letra][SYS_CAPITAL] = $SALDO_DE_PLAN;
                         $msg .= "WARN\t{$letra}\tCapital a ultimo pago {$SALDO_DE_PLAN} \r\n";
                     }
                 }
                 $msg .= "OK\t{$letra}\tInteres Normal en {$interes_normal}, Pagado {$interes_pagado}, Dias {$DIAS_TRANSCURRIDOS},Fecha : Actual {$FechaActual} Anterior {$FechaAnterior}\r\n";
             }
             break;
         case CREDITO_TIPO_PAGO_INTERES_COMERCIAL:
             for ($i = 1; $i <= $PAGOS_AUTORIZADOS; $i++) {
                 $letra = $i;
                 $letraAnterior = setNoMenorQueCero($letra - 1);
                 $DAnterior = isset($DatosDePagados[$letraAnterior]) ? $DatosDePagados[$letraAnterior] : array();
                 $capital_pagado = isset($DAnterior[SYS_CAPITAL]) ? $DAnterior[SYS_CAPITAL] : 0;
                 $SALDO_DE_PLAN = $SALDO_DE_PLAN - $capital_pagado;
                 $DPago = isset($DatosDePagados[$letra]) ? $DatosDePagados[$letra] : array();
                 $interes_pagado = isset($DPago[SYS_INTERES_NORMAL]) ? $DPago[SYS_INTERES_NORMAL] : 0;
                 //INTERES NORMAL
                 $interes_normal = $SALDO_DE_PLAN * $PERIOCIDAD_DE_PAGO * $TASA_NORMAL / $DIVISOR_DE_INTS;
                 $interes_normal = setNoMenorQueCero($interes_normal - $interes_pagado);
                 $arrPagos[$letra][SYS_INTERES_NORMAL] = $interes_normal;
                 if ($capital_pagado > 0) {
                     $msg .= "WARN\t{$letra}\tCapital en pago {$letraAnterior} de {$capital_pagado} \r\n";
                 }
                 if ($letra == $PAGOS_AUTORIZADOS) {
                     if ($SALDO_DE_PLAN > 0) {
                         $arrPagos[$letra][SYS_CAPITAL] = $SALDO_DE_PLAN;
                         $msg .= "WARN\t{$letra}\tCapital a ultimo pago {$SALDO_DE_PLAN} \r\n";
                     }
                 }
                 $msg .= "OK\t{$letra}\tInteres Normal en {$interes_normal}, Pagado {$interes_pagado} \r\n";
             }
             break;
     }
     $NumeroPlan = $this->mNumeroDePlan;
     //$this->setEliminar();
     //eliminar plan de pagos
     foreach ($arrPagos as $periodo) {
     }
     $this->mMessages .= $msg;
     return $msg;
 }
$xSoc = new cSocio($persona);
$arrDatos = array("periocidad_de_pago" => $periocidad, "tipo_de_producto" => $tipoconvenio, "numero_de_pagos" => $numeropagos, "contrato_corriente_relacionado" => $contrato_corriente, "fecha_de_ministracion" => $ministrado, "fecha_de_vencimiento" => $vencido, "monto_solicitado" => $monto_solicitado);
$sucess = true;
if ($xSoc->isOperable() == true) {
    $sucess = $xSoc->setPrevalidarCredito($arrDatos);
    if ($xSoc->getUUID() != $_SESSION[SYS_UUID]) {
        $msg .= "ERROR\tEl credito Validado no es el mismo que intenta guardar(" . $xSoc->getUUID() . "|" . $_SESSION[SYS_UUID] . ")\r\n";
        $sucess = false;
    }
} else {
    $sucess = false;
}
if ($sucess == true) {
    $grupo_asociado = $xSoc->getClaveDeGrupo();
    if ($periocidad == CREDITO_TIPO_PERIOCIDAD_FINAL_DE_PLAZO) {
        $dias_solicitados = $xFecha->setRestarFechas($fecha_vencimiento, $fecha_ministracion);
    } elseif ($periocidad == CREDITO_TIPO_PERIOCIDAD_DIARIO) {
        $dias_solicitados = $xFecha->setRestarFechas($fecha_vencimiento, $fecha_ministracion);
        $numeropagos = $dias_solicitados - $xFecha->getDiasHabilesEnRango($fecha_vencimiento, $fecha_ministracion);
    } else {
        $dias_solicitados = $numeropagos * $periocidad;
        $fecha_vencimiento = $xFecha->setSumarDias($dias_solicitados, $fecha_ministracion);
    }
    $xConv = new cProductoDeCredito($tipoconvenio);
    $xConv->init();
    if (USE_OFICIAL_BY_PRODUCTO == true) {
        $oficial_de_seguimiento = $xConv->getOficialDeSeguimiento();
    }
    if ($esrenovado == true) {
        $TipoDeAutorizacion = CREDITO_AUTORIZACION_RENOVADO;
        $msg .= "WARN\tCredito marcado como Renovado \r\n";
 function setRegenerarSDPM($PFechaInicial, $PFechaFinal, $GenerarInteres = true, $incluirSinSaldo = false, $NumeroCuenta = false)
 {
     //		$PFechaFinal		= "";
     $mBase = 3100;
     $xT = new cTipos();
     $ql = new MQL();
     $BySaldo = $incluirSinSaldo == false ? " AND captacion_cuentas.saldo_cuenta >=" . TOLERANCIA_SALDOS : "";
     $ByCuentaSDPM = $NumeroCuenta == false ? "" : " AND `captacion_sdpm_historico`.`cuenta` = {$NumeroCuenta} ";
     $ByCuentaMvto = $NumeroCuenta == false ? "" : " AND `operaciones_mvtos`.`docto_afectado` = {$NumeroCuenta} ";
     $ByCuentaCta = $NumeroCuenta == false ? "" : " AND captacion_cuentas.numero_cuenta = {$NumeroCuenta} ";
     $msg = "";
     $msg .= "==========================================================================================\r\n";
     $msg .= "==================\tGenerando SDPM desde el {$PFechaInicial} al {$PFechaFinal}\r\n";
     $msg .= "==========================================================================================\r\n";
     $msg .= "Socio\tCuenta\tOPER\tEjercicio\tPeriodo\tFecha\tDias\tMonto\tSaldo\tSDPM\r\n";
     $sqlM = "SELECT \n\t\t\t\t\t\t\t\t\t`operaciones_mvtos`.`fecha_operacion`  AS 'fecha_operacion',\n\t\t\t\t\t\t\t\t\t`operaciones_mvtos`.`recibo_afectado` AS 'recibo_afectado',\n\t\t\t\t\t\t\t\t\t`operaciones_mvtos`.`docto_afectado` AS 'docto_afectado',\n\t\t\t\t\t\t\t\t\t`operaciones_mvtos`.`afectacion_real` AS 'afectacion_real',\n\t\t\t\t\t\t\t\t\t`operaciones_mvtos`.`valor_afectacion`,\n\t\t\t\t\t\t\t\t\t`eacp_config_bases_de_integracion_miembros`.`afectacion` AS 'afectacion'\n\t\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t\t`operaciones_mvtos` `operaciones_mvtos` \n\t\t\t\t\t\t\t\t\t\tINNER JOIN `eacp_config_bases_de_integracion_miembros` \n\t\t\t\t\t\t\t\t\t\t\t`eacp_config_bases_de_integracion_miembros` \n\t\t\t\t\t\t\t\t\t\tON `operaciones_mvtos`.`tipo_operacion` = \n\t\t\t\t\t\t\t\t\t\t`eacp_config_bases_de_integracion_miembros`.`miembro` \n\t\t\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t\t(`eacp_config_bases_de_integracion_miembros`.`codigo_de_base` ={$mBase})\n\t\t\t\t\t\t\t\t\t{$ByCuentaMvto}\n\t\t\t\t\t\t\t\tORDER BY\n\t\t\t\t\t\t\t\t\t`eacp_config_bases_de_integracion_miembros`.`codigo_de_base`,\n\t\t\t\t\t\t\t\t\t`operaciones_mvtos`.`fecha_operacion` ASC";
     $rsM = getRecordset($sqlM);
     $arrOps = array();
     //Array de montos de operacion
     $arrRecs = array();
     //Array de Recibos de Operacion
     while ($rwM = mysql_fetch_array($rsM)) {
         //clave cuenta fecha
         $cuenta = $rwM["docto_afectado"];
         $fecha = $rwM["fecha_operacion"];
         if (isset($arrOps[$cuenta . "-" . $fecha])) {
             $arrOps[$cuenta . "-" . $fecha] += $rwM["afectacion_real"] * $rwM["afectacion"];
         } else {
             $arrOps[$cuenta . "-" . $fecha] = $rwM["afectacion_real"] * $rwM["afectacion"];
         }
         $arrRecs[$cuenta . "-" . $fecha] = $rwM["recibo_afectado"];
         //$msg					.= "WARN\t$cuenta\tAgregar " . ($rwM["afectacion_real"] * $rwM["afectacion"] ) . "\r\n";
     }
     //Eliminar periodos anteriores
     $sqlDF = "DELETE FROM captacion_sdpm_historico WHERE (fecha>='{$PFechaInicial}' AND fecha<='{$PFechaFinal}') {$ByCuentaSDPM} ";
     my_query($sqlDF);
     //FECHAS
     $xF = new cFecha(0);
     //
     $xTbl = new cSAFETabla(TCAPTACION_CUENTAS);
     $sqlCX = $xTbl->getQueryInicial() . " WHERE captacion_cuentas.tipo_cuenta = " . CAPTACION_TIPO_VISTA . " {$BySaldo} {$ByCuentaCta} ";
     $rs1 = getRecordset($sqlCX);
     while ($rw1 = mysql_fetch_array($rs1)) {
         $socio = $rw1["numero_socio"];
         $cuenta = $rw1["numero_cuenta"];
         $xCta = new cCuentaALaVista($cuenta, $socio);
         $xCta->init($rw1);
         $DCta = $xCta->getDatosInArray();
         $FApertura = $DCta["fecha_apertura"];
         $dias = $xF->setRestarFechas($PFechaFinal, $FApertura);
         $dias += 1;
         $sucursal = $DCta["sucursal"];
         $FechaAnterior = $FApertura;
         $saldoAnterior = 0;
         $xF2 = new cFecha(1);
         for ($i = 0; $i <= $dias; $i++) {
             $OpFecha = $xF->setSumarDias($i, $FApertura);
             $xF->set($OpFecha);
             $OpFechaFin = $xF->getDiaFinal();
             $OpMonto = isset($arrOps[$cuenta . "-" . $OpFecha]) ? $arrOps[$cuenta . "-" . $OpFecha] : 0;
             $idrecibo = isset($arrRecs[$cuenta . "-" . $OpFecha]) ? $arrRecs[$cuenta . "-" . $OpFecha] : DEFAULT_RECIBO;
             //si la operacion es mayor a cero o es FIN DE MES
             if ($OpMonto != 0 or $OpFecha == $OpFechaFin) {
                 $diasTrans = $xF2->setRestarFechas($OpFecha, $FechaAnterior);
                 $xF2->set($OpFecha);
                 $ejercicio = $xF2->anno();
                 $periodo = $xF2->mes();
                 $sdpd = $saldoAnterior * $diasTrans;
                 $nuevatasa = $xCta->getTasaAplicable(0, 0, $saldoAnterior);
                 //corregir fecha
                 $sqlUSPM = "INSERT INTO captacion_sdpm_historico\n\t\t\t\t\t\t\t\t\t\t(ejercicio, periodo, cuenta, fecha, dias, tasa, monto, recibo, numero_de_socio, sucursal)\n\t    \t\t\t\t\t\t\t\tVALUES( {$ejercicio}, {$periodo}, {$cuenta}, '{$OpFecha}', {$diasTrans}, {$nuevatasa}, {$sdpd}, {$idrecibo}, {$socio}, '{$sucursal}') ";
                 //si es valida la operacion, se actualizan
                 if ($OpFecha >= $PFechaInicial and $OpFecha <= $PFechaFinal) {
                     my_query($sqlUSPM);
                     $msg .= "{$socio}\t{$cuenta}\t+SDPM\t{$ejercicio}\t{$periodo}\t{$OpFecha}\t{$diasTrans}\t{$OpMonto}\t{$saldoAnterior}\t{$sdpd}\r\n";
                 } else {
                     $msg .= "{$socio}\t{$cuenta}\t=SDPM\t{$ejercicio}\t{$periodo}\t{$OpFecha}\t{$diasTrans}\t{$OpMonto}\t{$saldoAnterior}\t{$sdpd}\r\n";
                 }
                 $FechaAnterior = $OpFecha;
                 $saldoAnterior += $OpMonto;
             }
         }
     }
     //Agregar Movimientos Finales del MES.
     //FIXME: Corregir incidencias
     //opcional: agregar Interes
     if ($GenerarInteres == true) {
         $xRec = new cReciboDeOperacion(12, false);
         $recibo = $xRec->setNuevoRecibo(DEFAULT_SOCIO, 1, $PFechaFinal, 1, 12, "REGENERAR_INTERES_SDPM_{$PFechaFinal}", "NA", "ninguno", "NA", DEFAULT_GRUPO);
         $msg .= "==========================================================================================\r\n";
         $msg .= "==================\tAGREGADO INTERES :: RECIBO {$recibo}\r\n";
         $msg .= "==========================================================================================\r\n";
         $_SESSION["recibo_en_proceso"] = $recibo;
         //sumar sdpm del mes por cuenta
         $sqlSDPM = "SELECT\n\t\t\t\t\t\t\t\t`captacion_sdpm_historico`.`numero_de_socio`,\n\t\t\t\t\t\t\t\t`captacion_sdpm_historico`.`cuenta`,\n\t\t\t\t\t\t\t\tSUM(`captacion_sdpm_historico`.`dias`)  AS `dias_transcurridos`,\n\t\t\t\t\t\t\t\tSUM(`captacion_sdpm_historico`.`monto`) AS `sdpm`,\n\t\t\t\t\t\t\t\tROUND( (`captacion_sdpm_historico`.`monto` / `captacion_sdpm_historico`.`dias`), 2) AS `ultimo_saldo`,\n\t\t\t\t\t\t\t\tMAX(`captacion_sdpm_historico`.`fecha`) AS 'UltimaFecha'\n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t`captacion_sdpm_historico` `captacion_sdpm_historico` \n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t(`captacion_sdpm_historico`.`fecha` >= '{$PFechaInicial}')\n\t\t\t\t\t\t\t\tAND\n\t\t\t\t\t\t\t\t(`captacion_sdpm_historico`.`fecha` <= '{$PFechaFinal}')\n\t\t\t\t\t\t\t\t{$ByCuentaSDPM}\n\t\t\t\t\t\t\tGROUP BY\n\t\t\t\t\t\t\t\t`captacion_sdpm_historico`.`cuenta`,\n\t\t\t\t\t\t\t\t`captacion_sdpm_historico`.`ejercicio`,\n\t\t\t\t\t\t\t\t`captacion_sdpm_historico`.`periodo`\n\t\t\t\t\t\t\tORDER BY\n\t\t\t\t\t\t\t\t`captacion_sdpm_historico`.`fecha` DESC ";
         $rsCAP = $ql->getDataRecord($sqlSDPM);
         //setLog($sqlSDPM);
         foreach ($rsCAP as $rwC) {
             $socio = $rwC["numero_de_socio"];
             $cuenta = $rwC["cuenta"];
             $dias_de_calc = $rwC["dias_transcurridos"];
             $sumaSDPM = $rwC["sdpm"];
             $FechaI = $rwC["UltimaFecha"];
             $promedio = $xT->cFloat($sumaSDPM / $dias_de_calc, 2);
             //XXX: Solucionar Tasa de Interes y hacer las rapida la consulta
             $xCta = new cCuentaDeCaptacion($cuenta);
             $xCta->init();
             $subtipo = $xCta->getTipoDeSubproducto();
             $tasa_nueva = obtentasa($promedio, CAPTACION_TIPO_VISTA, 0, $subtipo);
             $interes = $sumaSDPM * $tasa_nueva / EACP_DIAS_INTERES;
             $interes = $xT->cFloat($interes, 2);
             //agregar movimiento
             if ($interes > 0) {
                 setNuevoMvto($socio, $cuenta, $recibo, $FechaI, $interes, 222, 1, "CALCULO_AUTOMATICO_DESDE_{$PFechaInicial}");
                 $msg .= "{$socio}\t{$cuenta}\tAGREGAR\tInteres por {$interes}, tasa {$tasa_nueva}, Promedio {$promedio}, SDPM {$sumaSDPM}, Dias {$dias_de_calc}\r\n";
             } else {
                 $msg .= "{$socio}\t{$cuenta}\tIGNORAR\tInteres por {$interes}, tasa {$tasa_nueva}, Promedio {$promedio}, SDPM {$sumaSDPM}, Dias {$dias_de_calc}\r\n";
             }
         }
     }
     return $msg;
 }
 /**
  * Genera un reinversion
  *
  * @param date $fecha		Fecha de Cierre se refiere a la fecha que que se efectua la Reinversion
  * @param boolean $cerrar	Cerrar, indica si se cierra la inversion.
  * @param float $tasa
  * @param int $dias
  * @return integer Numero de Recibo
  */
 function setReinversion($fecha = false, $cerrar = false, $tasa = false, $dias = false, $InversionParcial = false, $invertido = 0)
 {
     $recibo = false;
     $xF = new cFecha();
     //en Monto de la reinversion sera despues de los depositos (Saldo Actual)
     //si cerrar = false, no efectuar ninguno movimiento
     if ($cerrar == true) {
         $this->mPeriodoCuenta = setNoMenorQueCero($this->mPeriodoCuenta) + 1;
         $this->mDiasInvertidos = setNoMenorQueCero($dias) > 0 ? $dias : $this->mDiasInvertidos;
         //2012-01-09: correccion de dias menores a cero
         $this->mDiasInvertidos = $this->mDiasInvertidos < INVERSION_DIAS_MINIMOS ? INVERSION_DIAS_MINIMOS : $this->mDiasInvertidos;
         if ($tasa != false) {
             if ($tasa > $this->mTasaInteres) {
                 $this->mTasaInteres = $tasa;
                 $this->mMessages .= "WARN\tTASA\tSe respeta una Tasa Especial de {$tasa} sobre " . $this->mTasaInteres . " que tenia Anteriormente  \r\n";
             }
         }
         $grupo = $this->mGrupoAsociado;
         $observaciones = "REINVERSION AUTOMATICA # " . $this->mPeriodoCuenta;
         $recibo_fiscal = "NA";
         $tipo_de_pago = TESORERIA_COBRO_NINGUNO;
         $cheque = "NA";
         $tipo_de_recibo = 6;
         //OK: Verificar Monto de la Operacion
         $monto = ($InversionParcial == true and $invertido > 0) ? $invertido : $this->mNuevoSaldo;
         //verificar Nuevamente la Tasa
         $tasa = $this->mTasaInteres <= 0 ? $this->getTasaAplicable($this->mDiasInvertidos, 0, $monto) : $this->mTasaInteres;
         //algoritmo de tasa incremental
         eval($this->mModificadorTasa);
         $this->mTasaInteres = $tasa;
         if (setNoMenorQueCero($this->mSocioTitular) <= DEFAULT_SOCIO) {
             $this->initCuentaByCodigo();
         }
         //2014-09-09 .- validar si el recibo se inicia y tiene fecha de hoy
         if ($this->getOReciboInversion() == null) {
             //El recibo no existe
             $this->mMessages .= "WARN\tNo existe el Recibo de Inversion\r\n";
         } else {
             $dia_de_inversion = $this->getOReciboInversion()->getFechaDeRecibo();
             $recibo_anterior = $this->getOReciboInversion()->getCodigoDeRecibo();
             if ($xF->getInt($dia_de_inversion) == $xF->getInt($fecha)) {
                 $this->mMessages .= "WARN\tLa fecha de reinversion[{$fecha}] es igual al recibo anterior[{$recibo_anterior} - " . $dia_de_inversion . "] se Eliminara\r\n";
                 $this->getOReciboInversion()->setRevertir(true);
                 $this->mMessages .= $this->getOReciboInversion()->getMessages();
             }
         }
         if ($fecha == false) {
             if (isset($this->mFechaOperacion) and $this->mFechaOperacion != false) {
                 $fecha = $this->mFechaOperacion;
             } else {
                 $fecha = fechasys();
             }
         }
         //Corrige el Dia Inhabil
         //$this->mFechaVencimiento;
         //corrige la fecha de Vencimiento, si es menor a la actual
         if (strtotime($fecha) >= strtotime($this->mFechaVencimiento)) {
             $this->mMessages .= "WARN\tLa fecha de reinversion[{$fecha}] es mayor a la de vencimiento[" . $this->mFechaVencimiento . "]\r\n";
             if ($this->mDiasInvertidos > 0) {
                 $this->mFechaVencimiento = $xF->setSumarDias($this->mDiasInvertidos, $fecha);
             }
         }
         $this->mFechaVencimiento = $xF->getDiaHabil($this->mFechaVencimiento);
         $diasCalculados = $xF->setRestarFechas($this->mFechaVencimiento, $fecha);
         if ($diasCalculados > $this->mDiasInvertidos) {
             $this->mDiasInvertidos = $diasCalculados;
             $this->mMessages .= "WARN\tSe Actualizan los Dias de Inversion a {$diasCalculados}\r\n";
         }
         $socio = $this->mSocioTitular;
         //Inicializar el Recibo
         $CRecibo = new cReciboDeOperacion($tipo_de_recibo, true);
         //Agregar recibo si no hay
         if (setNoMenorQueCero($recibo) <= 0) {
             $recibo = $CRecibo->setNuevoRecibo($socio, $this->mNumeroCuenta, $this->mFechaOperacion, $this->mPeriodoCuenta, $tipo_de_recibo, $observaciones, $cheque, $tipo_de_pago, $recibo_fiscal, $grupo);
             //Checar si se agrego el recibo
             if (setNoMenorQueCero($recibo) > 0) {
                 $this->mMessages .= "SUCESS\tSe Agrego Exitosamente el Recibo {$recibo} de la Cuenta " . $this->mNumeroCuenta . " \r\n";
                 $this->mReciboDeReinversion = $recibo;
                 $this->mSucess = true;
             } else {
                 $this->mMessages .= "ERROR\tSe Fallo al Agregar el Recibo {$recibo} de la Cuenta " . $this->mNumeroCuenta . " \r\n";
                 $this->mSucess = false;
             }
         } else {
         }
         $this->mReciboDeReinversion = $recibo;
         //Calcular el Interes
         $interes = $monto * $this->mTasaInteres * $this->mDiasInvertidos / EACP_DIAS_INTERES;
         //OK: Ejecutar modificador de interes
         eval($this->mModificadorDeInteres);
         //si hay recibo, agregar
         if (setNoMenorQueCero($recibo) > 0) {
             //Agregar el Movimiento de Reinversion
             $CRecibo->setNuevoMvto($fecha, $monto, 223, $this->mPeriodoCuenta, $observaciones, 1, TM_ABONO, $socio, $this->mNumeroCuenta);
             $this->mMessages .= "OK\tEVENT\tAgregando la Reinversion por un Monto de {$monto} de la Cuenta " . $this->mNumeroCuenta . " con fecha {$fecha} \r\n";
             //Agregar el Movimiento de Interes
             $CRecibo->setNuevoMvto($this->mFechaVencimiento, $interes, 500, $this->mPeriodoCuenta, $observaciones, 1, TM_ABONO, $socio, $this->mNumeroCuenta);
             $CRecibo->setFinalizarRecibo(true);
             $this->mMessages .= $CRecibo->getMessages("txt");
             $this->mSucess = true;
             //Actualizar la Cuenta
             if ($InversionParcial == false and $invertido == 0) {
                 $this->setUpdateInversion();
             }
         } else {
             $this->mMessages .= "ERROR\tNo Existe Recibo con el cual trabajar({$recibo}) \r\n";
         }
         $this->mMessages .= $CRecibo->getMessages();
         return $recibo;
     }
 }
 for ($simletras1 = 1; $simletras1 <= $PAGOS_AUTORIZADOS; $simletras1++) {
     $fecha_de_referencia = $simletras1 == 1 ? $fecha_primer_abono : $fecha_de_pago;
     $saldo_final = $saldo_inicial - $parcialidad_capital;
     $xPlanGen->setTipoDeCreditoEnSistema($xCred->getTipoEnSistema());
     $xPlanGen->setPagosAutorizados($PAGOS_AUTORIZADOS);
     $xPlanGen->setDiasDeAbonoFijo($dia_1_ab, $dia_2_ab, $dia_3_ab);
     $xPlanGen->setTipoDePlanDePago($tipo_de_plan);
     $xPlanGen->setPeriocidadDePago($PERIOCIDAD_DE_PAGO);
     $xPlanGen->setSaldoInicial($saldo_inicial);
     $xPlanGen->setSaldoFinal($saldo_final);
     $fecha_de_pago = $xPlanGen->getFechaDePago($fecha_de_referencia, $simletras1);
 }
 /*if( $PERIOCIDAD_DE_PAGO == CREDITO_TIPO_PERIOCIDAD_DIARIO){
 		$fecha_de_pago			= $xCred->getFechaDeVencimiento();
 	}*/
 $dias_estimados = $xF->setRestarFechas($fecha_de_pago, $fecha_ministracion);
 $dias_desviados = $dias_estimados - $PAGOS_AUTORIZADOS * $PERIOCIDAD_DE_PAGO;
 $desviacion_total = 1 + $dias_desviados / ($PAGOS_AUTORIZADOS * $PERIOCIDAD_DE_PAGO) / 10;
 $desviacion = $tipo_de_plan != 99 ? 0.013 - 0.00013 * $PAGOS_AUTORIZADOS : 0;
 $estimado_dias_promedio = $dias_estimados / $PAGOS_AUTORIZADOS * (1 + $desviacion);
 if ($tipo_de_calculo == INTERES_POR_SALDO_HISTORICO) {
     $estimado_periodico_interes = $monto_autorizado * $tasa_interes * $dias_estimados / EACP_DIAS_INTERES * (1 + $tasa_iva);
     $parcialidad_presumida = ($monto_autorizado + $total_ahorro + $monto_extra + $estimado_periodico_interes) / $PAGOS_AUTORIZADOS;
 } else {
     //Recompocision para el tipo de Pago sobre Saldos Insolutos
     $estimado_periodico_interes = $tasa_interes / EACP_DIAS_INTERES * $estimado_dias_promedio * (1 + $tasa_iva);
     $parcialidad_presumida = $monto_autorizado * $estimado_periodico_interes / (1 - pow(1 + $estimado_periodico_interes, $PAGOS_AUTORIZADOS * -1)) + ($total_ahorro + $monto_extra) / $PAGOS_AUTORIZADOS;
 }
 $parcialidad_presumida = $parcialidad_presumida * $desviacion_total;
 $parcialidad_presumida = PLAN_DE_PAGOS_SIN_REDONDEO == true ? $parcialidad_presumida : round($parcialidad_presumida, 2);
 //======================================   modificar la parcialidad
function restarfechas($el_restado, $por_restar)
{
    $xF = new cFecha();
    return $xF->setRestarFechas($el_restado, $por_restar);
}
 function setPrevalidarCredito($arrDatos, $retornarMonto = false)
 {
     //$periocidad, $convenio, $contrato
     $xF = new cFecha(0);
     $sucess = true;
     $xT = new cTipos();
     $socio = $this->mCodigo;
     //Datos a Manejar
     $monto_maximo = 0;
     $solicitud = isset($arrDatos["numero_de_solicitud"]) ? $arrDatos["numero_de_solicitud"] : false;
     $periocidad = isset($arrDatos["periocidad_de_pago"]) ? $arrDatos["periocidad_de_pago"] : 1;
     $convenio = isset($arrDatos["tipo_de_producto"]) ? $arrDatos["tipo_de_producto"] : false;
     $pagos = isset($arrDatos["numero_de_pagos"]) ? $arrDatos["numero_de_pagos"] : 0;
     $fecha_de_venc = isset($arrDatos["fecha_de_vencimiento"]) ? $arrDatos["fecha_de_vencimiento"] : $xF->get();
     $fecha_de_min = isset($arrDatos["fecha_de_ministracion"]) ? $arrDatos["fecha_de_ministracion"] : $xF->get();
     $contrato_corr = isset($arrDatos["contrato_corriente_relacionado"]) ? $arrDatos["contrato_corriente_relacionado"] : DEFAULT_CUENTA_CORRIENTE;
     $monto = isset($arrDatos["monto_solicitado"]) ? $arrDatos["monto_solicitado"] : 0;
     //
     $dias = ($periocidad == CREDITO_TIPO_PERIOCIDAD_FINAL_DE_PLAZO or $periocidad == CREDITO_TIPO_PERIOCIDAD_DIARIO) ? $xF->setRestarFechas($fecha_de_venc, $fecha_de_min) : $periocidad * $pagos;
     //enviar false
     if ($convenio == false) {
         $sucess = false;
         $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tEl tipo de Convenio no es Valido\r\n";
     } else {
         $xConv = new cProductoDeCredito($convenio);
         //si es nomina y no tiene empresa. mostrar false
         if ($xConv->getEsProductoDeNomina() == true) {
             $this->mMessages .= "WARN\t{$socio}\t{$solicitud}\tEl Producto e de Nomina\r\n";
             if ($this->getClaveDeEmpresa() == FALLBACK_CLAVE_EMPRESA) {
                 $sucess = false;
                 $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tEl Producto es de Nomina y No hay EMPRESA\r\n";
             }
         }
         $DConv = $xConv->getDatosInArray();
         $dias_maximo = $DConv["dias_maximo"];
         $tasa_ahorro = $DConv["tasa_ahorro"];
         $pagos_maximo = $DConv["pagos_maximo"];
         $validacion_php = $DConv["php_monto_maximo"];
         //cargar datos economicos del socio
         $ingreso_mensual = $this->getIngresosMensuales();
         $DTotCreds = $this->getTotalColocacionActual();
         $DTotCredsByConvenio = $this->getTotalColocacionActual($convenio);
         $DTotCapt = $this->getTotalCaptacionActual();
         //Datos de los Creditos segun referencias
         $monto_de_aportaciones = $this->getFondoPatrimonial();
         $saldos_de_creditos = $xT->cFloat($DTotCreds["saldo"]);
         $saldo_por_producto = $xT->cFloat($DTotCredsByConvenio["saldo"]);
         $monto_de_planeacion = get_monto_planeacion_credito($socio);
         //TODO: modificar
         $monto_linea_credito = $this->getMontoLineaDeCredito();
         $saldo_de_captacion = $xT->cFloat($DTotCapt["saldo"]);
         //Datos de los Creditos segun Productos
         $producto_monto_maximo = $DConv["maximo_otorgable"];
         //Valorar Dias Maximo del Credito
         if ($dias > $dias_maximo) {
             $sucess = false;
             $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tLos Dias del Credito[{$dias}] se exceden a lo permitido[{$dias_maximo}]\r\n";
         } else {
             if ($dias < EACP_DIAS_MINIMO_CREDITO) {
                 $sucess = false;
                 $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tLos Dias del Credito[{$dias}] son Menores al Minimo Permitido [" . EACP_DIAS_MINIMO_CREDITO . "] por la Institucion\r\n";
             } else {
                 $this->mMessages .= "OK\t{$socio}\t{$solicitud}\tDias de Pago dentro del Rango Permitido:[{$dias}]\r\n";
             }
         }
         //Valorar Pagos Maximo del Credito
         if ($pagos > $pagos_maximo) {
             $sucess = false;
             $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tLos Numero de Pagos[{$pagos}] Execeden a lo Permitido[{$pagos_maximo}]\r\n";
         } else {
             $this->mMessages .= "OK\t{$socio}\t{$solicitud}\tNumero de Pagos dentro del Rango Permitido[{$pagos}]\r\n";
         }
         //tasa de ahorro
         if ($tasa_ahorro > 0) {
             $this->mMessages .= "WARN\t{$socio}\t{$solicitud}\tEl Ahorro para este Convenio es Obligatorio\r\n";
             //Valorar Contrato de Captacion
             if ($contrato_corr == DEFAULT_CUENTA_CORRIENTE or strlen($contrato_corr) < DIGITOS_DE_CLAVE_DE_SOCIO) {
                 $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tDebe Capturar un Numero de Contrato de Cuenta Corriente\tpara que los Pagos de Credito se Acumulen\r\n";
                 $sucess = false;
             } else {
                 $xCta = new cCuentaDeCaptacion($contrato_corr);
                 $existe = $this->existeCuenta($contrato_corr, CAPTACION_TIPO_VISTA);
                 if ($existe == false) {
                     //
                     $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tLa Cuenta {$contrato_corr} No existe, o no es del Tipo requerido\r\n";
                     $sucess = false;
                 } else {
                     //
                     $this->mMessages .= "OK\t{$socio}\t{$solicitud}\tLa Cuenta {$contrato_corr}  es valida para Utilizar\r\n";
                 }
             }
             //end: contrato
         }
         // end: tasa ahorro
         //
         eval($validacion_php);
         if ($monto > $monto_maximo) {
             $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tEl Monto Solicitado {$monto} es mayor al Maximo Permitido {$monto_maximo}\r\n";
             $sucess = false;
         }
     }
     $this->mUUID = md5($socio . $convenio . $monto . $pagos . ROTTER_KEY . date("Ymd"));
     return $retornarMonto == false ? $sucess : $monto_maximo;
     //obtener mensajes
 }
 function setGenerarMvtoFinDeMes($fecha_inicial, $fecha_final, $NumeroDeCredito = false, $ForzarEnPeriodo = false)
 {
     /**
      * @var $ForzarPeriodo
      * se refiere a que debe actualizar el saldo conciliado segun los pagos acumulados a la fecha
      * */
     $msg = "==\t\tGENERAR MOVIMIENTOS DEL FIN DE MES\t\t==\r\n";
     $arrPagosF = array();
     $arrPagosM = array();
     $xQl = new MQL();
     //$wByCredito			= " AND ( (`creditos_solicitud`.`fecha_ministracion` >= '$fecha_inicial' ) AND (`creditos_solicitud`.`fecha_ministracion` <= '$fecha_final' ) ) ";
     $wByCredito = "";
     $wByCredito = $NumeroDeCredito != false ? " AND (`creditos_solicitud`.`numero_solicitud` = {$NumeroDeCredito}) " : $wByCredito;
     $wByMvto = " AND fecha_operacion>='{$fecha_inicial}' AND fecha_operacion<='{$fecha_final}'  ";
     $wByMvto = $NumeroDeCredito != false ? " AND docto_afectado = {$NumeroDeCredito} " : $wByMvto;
     //==============================================================================
     $fechaRec = fechasys();
     $observaciones = "GENERADO_EN_LA_UTILERIA_888";
     //==============================================================================
     $sqlDM = "DELETE FROM operaciones_mvtos WHERE tipo_operacion=999 {$wByMvto} ";
     // Agregado el 2012-01-17- Ya lo habia corregido???
     my_query($sqlDM);
     //==============================================================================
     if ($ForzarEnPeriodo == true) {
         $sqlP = "SELECT\n\t\t\t\t\t\t\t\t`operaciones_mvtos`.`socio_afectado`       AS `socio`,\n\t\t\t\t\t\t\t\t`operaciones_mvtos`.`docto_afectado`       AS `documento`,\n\t\t\t\t\t\t\t\t`operaciones_mvtos`.`tipo_operacion`       AS `operacion`,\n\t\t\t\t\t\t\t\tMAX(`operaciones_mvtos`.`fecha_operacion`) AS `fecha`,\n\t\t\t\t\t\t\t\tSUM(`operaciones_mvtos`.`afectacion_real`) AS `monto` \n\t\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t\t`operaciones_mvtos` `operaciones_mvtos` \n\t\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t(`operaciones_mvtos`.`tipo_operacion` = 120) \n\t\t\t\t\t\t\t\tAND\n\t\t\t\t\t\t\t\t(`operaciones_mvtos`.`fecha_operacion` <='{$fecha_final}')\n\t\t\t\t\t\t\t\t{$wByMvto}\n\t\t\t\t\t\t\tGROUP BY\n\t\t\t\t\t\t\t\t`operaciones_mvtos`.`docto_afectado`,\n\t\t\t\t\t\t\t\t`operaciones_mvtos`.`tipo_operacion` ";
         $rsP = $xQl->getDataRecord($sqlP);
         $msg .= "============ ULTIMOS MVTOS HASTA LA FECHA {$fecha_final} \r\n";
         foreach ($rsP as $rwP) {
             $mSocio = $rwP["socio"];
             $mCredito = $rwP["documento"];
             $mFecha = $rwP["fecha"];
             $mMonto = $rwP["monto"];
             $arrPagosF[$mCredito] = $mFecha;
             $arrPagosM[$mCredito] = $mMonto;
             $msg .= "{$mSocio}\t{$mCredito}\tFecha {$mFecha}\t Monto: {$mMonto}\r\n";
         }
     }
     //==============================================================================
     $CRecibo = new cReciboDeOperacion(10, false);
     $sql = "SELECT SQL_CACHE\n\t\t\t\t\t`creditos_solicitud`.*,\n\t\t\t\t\t`creditos_tipoconvenio`.*,\n\t\t\t\t\t`creditos_periocidadpagos`.*,\n\t\t\t\t\t`creditos_estatus`.*,\n\t\t\t\t\t`creditos_solicitud`.`tasa_interes` AS `tasa_ordinaria_anual`,\n\t\t\t\t\t`creditos_solicitud`.`tipo_autorizacion` AS `tipo_de_autorizacion`,\n\t\t\t\t\t`creditos_solicitud`.`tasa_ahorro` AS `tasa_de_ahorro`\n\t\t\t\tFROM\n\t\t\t\t\t`creditos_tipoconvenio` `creditos_tipoconvenio`\n\t\t\t\t\t\tINNER JOIN `creditos_solicitud` `creditos_solicitud`\n\t\t\t\t\t\tON `creditos_tipoconvenio`.`idcreditos_tipoconvenio`\n\t\t\t\t\t\t= `creditos_solicitud`.`tipo_convenio`\n\t\t\t\t\t\t\tINNER JOIN `creditos_periocidadpagos`\n\t\t\t\t\t\t\t`creditos_periocidadpagos`\n\t\t\t\t\t\t\tON `creditos_periocidadpagos`.\n\t\t\t\t\t\t\t`idcreditos_periocidadpagos` =\n\t\t\t\t\t\t\t`creditos_solicitud`.`periocidad_de_pago`\n\t\t\t\t\t\t\t\tINNER JOIN `creditos_estatus`\n\t\t\t\t\t\t\t\t`creditos_estatus`\n\t\t\t\t\t\t\t\tON `creditos_estatus`.`idcreditos_estatus` =\n\t\t\t\t\t\t\t\t`creditos_solicitud`.`estatus_actual`\n\t\t\t\tWHERE\n\t\t\t\t\t\t\t\t(`creditos_solicitud`.`estatus_actual` !=50)\n\t\t\t\t\t\t\t\t{$wByCredito}\n\t\t\t\t\t\t\t\t ";
     $rsMx = $xQl->getDataRecord($sql);
     // mysql_query($sql, cnnGeneral() );
     //$msg				.= $sql ."\r\n" . $sqlDM  . "\r\n";
     $msg .= "============ GENERANDO MOVIMIENTOS 999: Saldos al Fin del mes \r\n";
     $xF = new cFecha();
     $recibo = $CRecibo->setNuevoRecibo(DEFAULT_SOCIO, DEFAULT_CREDITO, $fechaRec, 1, 10, $observaciones, DEFAULT_CHEQUE, "ninguno", DEFAULT_RECIBO_FISCAL, DEFAULT_GRUPO);
     $CRecibo->setNumeroDeRecibo($recibo);
     foreach ($rsMx as $rw) {
         //corregir cuando yo me acuerde
         //Corregi accion de forzado... que mas?
         $solicitud = $rw["numero_solicitud"];
         $socio = $rw["numero_socio"];
         $fechaMinistracion = $rw["fecha_ministracion"];
         $montoMinistrado = $rw["monto_autorizado"];
         //Datos a conciliar
         $fechaUltimoMvto = $rw["fecha_ultimo_mvto"];
         $saldoActual = $rw["saldo_actual"];
         $FechaInicial = $fechaMinistracion;
         if ($ForzarEnPeriodo == true) {
             $pagos = isset($arrPagosM[$solicitud]) ? $arrPagosM[$solicitud] : 0;
             $saldo = $montoMinistrado - $pagos;
             $fechaUltimoMvto = isset($arrPagosF[$solicitud]) ? $arrPagosF[$solicitud] : $fechaUltimoMvto;
             //notas_auditoria= '', fecha_revision='2011-10-23',
             //si la fecha de ministracion es mayor a la final, invalidad fecha y saldo a cero
             $saldo_conciliado = $fechaMinistracion > $fecha_final ? 0 : $saldo;
             $fecha_conciliada = $fechaMinistracion > $fecha_final ? $fechaMinistracion : $fechaUltimoMvto;
             $sqlUC = "UPDATE creditos_solicitud SET saldo_conciliado={$saldo_conciliado}, fecha_conciliada='{$fecha_conciliada}'\n\t\t\t\t\t\t\t\t\t    \tWHERE numero_solicitud={$solicitud} ";
             $msg .= "{$socio}\t{$solicitud}\tActualizar Saldo a {$saldo_conciliado}, Fecha a {$fecha_conciliada}, Ministrado: {$montoMinistrado}, Monto Pagado: {$pagos}\r\n";
             my_query($sqlUC);
         }
         $FechaFinal = $saldoActual <= TOLERANCIA_SALDOS ? $fechaUltimoMvto : fechasys();
         $dias = $xF->setRestarFechas($FechaFinal, $FechaInicial);
         $monto = 1;
         //$saldoActual;
         //$msg					.= "Dias $dias \r\n";
         for ($i = 0; $i <= $dias; $i++) {
             $fecha = $xF->setSumarDias($i, $FechaInicial);
             $fin_de_mes = $xF->getDiaFinal($fecha);
             if ($fecha == $fin_de_mes) {
                 //guardar solo los datos del fin de mes
                 if ($fecha >= $fecha_inicial and $fecha <= $fecha_final) {
                     $observaciones = "Cierre a {$fecha}, Fin de mes {$fin_de_mes}";
                     $operacion = $CRecibo->setNuevoMvto($fecha, $monto, OPERACION_CLAVE_FIN_DE_MES, 1, $observaciones, 0, TM_CARGO, $socio, $solicitud);
                     $msg .= "{$i}\t{$socio}\t{$solicitud}\t{$fecha}\t{$fin_de_mes}\t{$saldoActual}\t{$operacion}\r\n";
                 } else {
                     $msg .= "{$i}\t{$socio}\t{$solicitud}\t{$fecha}\t{$fin_de_mes}\t{$saldoActual}\tNO_REG\r\n";
                 }
             }
         }
     }
     $CRecibo->setFinalizarRecibo();
     return $msg;
 }