function jsa_getDatosDeCredito($solicitud)
{
    $xCred = new cCredito($solicitud);
    $xCred->initCredito();
    $xF = new cFecha();
    $xT = new cTipos();
    $dCreds = $xCred->getDatosDeCredito();
    $periocidad = $xCred->getPeriocidadDePago();
    $FMinistracion = $xCred->getFechaDeMinistracion();
    $contrato_corriente = $xCred->getContratoCorriente();
    $xPlanGen = new cPlanDePagosGenerador();
    $xPlanGen->initPorCredito($solicitud);
    $FPrimerAb = $xPlanGen->getFechaDePrimerPago();
    $xF = new cFecha(0, $FMinistracion);
    $FM_d = $xF->dia();
    $FM_a = $xF->anno();
    $FM_m = $xF->mes();
    $xF2 = new cFecha(1, $FPrimerAb);
    $xF2->set($FPrimerAb);
    $PA_d = $xF2->dia();
    $PA_a = $xF2->anno();
    $PA_m = $xF2->mes();
    $tab = new TinyAjaxBehavior();
    //setLog("$PA_d --- $PA_m ---- $PA_a  - - - - - $FPrimerAb");
    $tab->add(TabSetvalue::getBehavior('ideldia1', $FM_d));
    $tab->add(TabSetvalue::getBehavior('idelmes1', $FM_m));
    $tab->add(TabSetvalue::getBehavior('idelanno1', $FM_a));
    $tab->add(TabSetvalue::getBehavior('ideldia0', $PA_d));
    $tab->add(TabSetvalue::getBehavior('idelmes0', $PA_m));
    $tab->add(TabSetvalue::getBehavior('idelanno0', $PA_a));
    $tab->add(TabSetvalue::getBehavior('idDescripcionSolicitud', $xCred->getShortDescription()));
    $tab->add(TabSetvalue::getBehavior('idcuenta', $contrato_corriente));
    //$xCred->getPeriocidadDePago() != CREDITO_TIPO_PERIOCIDAD_CATORCENAL
    if ($xCred->getTipoEnSistema() == CREDITO_PRODUCTO_NOMINA) {
        $tab->add(TabSetvalue::getBehavior('idFormaDePago', $xCred->getTipoDePago()));
        //setLog("El pago es " . $xCred->getPeriocidadDePago() );
        if ($xCred->getPeriocidadDePago() != CREDITO_TIPO_PERIOCIDAD_CATORCENAL) {
            $tab->add(TabSetvalue::getBehavior('idtipo_plan_pagos', CREDITO_TIPO_DIAS_DE_PAGO_PERSONALIZADOS));
        }
    }
    return $tab->getString();
}
 /**
  * Funcion que determina es Estatus de un Credito segun su Tipo de Pago
  * @param date $fecha_de_corte	Fecha de Estimación
  * @param boolean $explain	Explicar Estatus
  */
 function setDetermineDatosDeEstatus($fecha_de_corte = false, $explain = false, $actualizar = false, $DPagos = false)
 {
     $xF = new cFecha();
     $xLog = new cCoreLog();
     $fecha_de_corte = $fecha_de_corte == false ? fechasys() : $fecha_de_corte;
     $fecha_de_corte_int = $xF->getInt($fecha_de_corte);
     $exoExplain = "";
     $aviso = "";
     if ($this->mCreditoInicializado == false) {
         $this->init();
     }
     if ($this->getEsAfectable() == true) {
         $credito = $this->mNumeroCredito;
         $socio = $this->mNumeroSocio;
         $fecha_ministracion = $this->mFechaMinistracion;
         $fecha_vencimiento = $this->mFechaVencimiento;
         $pagos_autorizados = $this->mPagosAutorizados;
         $periocidad_pago = $this->mPeriocidadDePago;
         $dias_autorizados = $this->mDiasAutorizados;
         $tipo_de_pago = $this->mTipoDePago;
         $fecha_ultimo_mvto = $this->mFechaUltimoMvtoCapital;
         $saldo_insoluto = $this->mSdoCapitalInsoluto;
         $monto_ministrado = $this->mMontoMinistrado;
         $dias_tolerados_para_vencer = $this->mToleranciaEnDiasParaVcto;
         $estatus_actual = $this->mEstatusActual;
         $interes_diario = $this->mInteresDiario;
         $pagos_pendientes = $this->mPagosAutorizados;
         $xPer = $this->getOPeriocidad();
         $OProd = $this->getOProductoDeCredito();
         $dias_para_mora = $OProd->getDiasTolerados();
         $dias_tolerados_para_vencer = $xPer->getDiasToleradosEnVencer();
         $stat = array();
         $ql = new MQL();
         $stat[SYS_ESTADO] = $this->getEstadoActual();
         $stat[SYS_CREDITO_DIAS_NORMALES] = 0;
         $stat[SYS_CREDITO_DIAS_MOROSOS] = 0;
         $stat[SYS_CREDITO_DIAS_VENCIDOS] = 0;
         $stat["fecha_de_inicio_de_pagos"] = $fecha_vencimiento;
         $xLog->add("----------CREDITO\t{$credito} --- Ministrado {$fecha_ministracion}\r\n", $xLog->DEVELOPER);
         if ($periocidad_pago == CREDITO_TIPO_PERIOCIDAD_FINAL_DE_PLAZO) {
             //Tomado para los tipos 1: Pago unico a Final de Plazo --- 360 ---
             $mFechaDeInicio = $fecha_vencimiento;
             $mFechaDeMora = $xF->setSumarDias($dias_para_mora, $mFechaDeInicio);
             $mFechaDeVencimiento = $xF->setSumarDias($dias_tolerados_para_vencer, $mFechaDeMora);
             $letra_actualmente_pagada = $this->getPeriodoActual();
         } else {
             //obtener la letra que debe pagar.
             $DFechas = is_array($DPagos) ? $DPagos : $ql->getDataRecord("SELECT * FROM historial_de_pagos WHERE credito={$credito} ");
             //==============================================================
             $DataFechas = array();
             $Historico = array();
             $letra_que_debe_estar_pagada = $this->getPeriodoActual();
             $letra_actualmente_pagada = $this->getPeriodoActual();
             //lo que se ha pagado
             $capital_pagado = 0;
             $capital_pendiente = 0;
             $interes_pagado = 0;
             $interes_pendiente = 0;
             $interes_nosaldado = 0;
             $terminado = false;
             //determina si ya termino la busqueda
             foreach ($DFechas as $rows) {
                 $idxc = $rows["periodo"];
                 $DataFechas[$idxc][SYS_FECHA] = $rows["fecha"];
                 $DataFechas[$idxc][SYS_CAPITAL] = setNoMenorQueCero($rows["capital"]);
                 $DataFechas[$idxc][SYS_MONTO] = setNoMenorQueCero($rows["pagos"]);
                 $DataFechas[$idxc][SYS_INTERES_NORMAL] = setNoMenorQueCero($rows["interes"]);
                 $DataFechas[$idxc]["SYS_INTERES_PAGADO"] = setNoMenorQueCero($rows["interes_pagado"]);
                 $DataFechas[$idxc]["SYS_INTERES_SALDO"] = setNoMenorQueCero($rows["interes"] - $rows["interes_pagado"]);
                 $capital_pendiente += $DataFechas[$idxc][SYS_CAPITAL];
                 $capital_pagado += $DataFechas[$idxc][SYS_MONTO];
                 $interes_pagado += $DataFechas[$idxc]["SYS_INTERES_PAGADO"];
                 $interes_pendiente += $DataFechas[$idxc][SYS_INTERES_NORMAL];
                 //$xLog->add("WARN\t$idxc\tAgregando pagos $capital_pendiente|$capital_pagado . $interes_pendiente|$interes_pagado \r\n", $xLog->DEVELOPER);
                 //corregir
                 if ($rows["fecha"] == "0000-00-00") {
                     $idxAnterior = setNoMenorQueCero($idxc - 1);
                     if (isset($DataFechas[$idxAnterior])) {
                         $DataFechas[$idxc][SYS_FECHA] = $xF->setSumarDias($periocidad_pago, $DataFechas[$idxAnterior][SYS_FECHA]);
                         $ql->setRawQuery("UPDATE operaciones_mvtos SET fecha_afectacion='" . $DataFechas[$idxc][SYS_FECHA] . "' WHERE docto_afectado={$credito} AND periodo_socio='{$idxc}' AND fecha_afectacion='0000-00-00' ");
                         $xLog->add("ERROR\t{$idxc}\tFecha Invalida, corregida\r\n", $xLog->DEVELOPER);
                     }
                 }
             }
             //lo que debe pagarse
             for ($i = 1; $i <= $this->getPagosAutorizados(); $i++) {
                 if ($terminado == false) {
                     $idpagoanterior = setNoMenorQueCero($i - 1);
                     $idpagoproximo = setNoMenorQueCero($i + 1);
                     if (!isset($DataFechas[$i])) {
                         //==========================
                         $xLog->add("ERROR\t{$i}\tNumero de Pago con error\r\n", $xLog->DEVELOPER);
                         $xPlan = new cPlanDePagosGenerador();
                         $xPlan->initPorCredito($this->mNumeroCredito, $this->getDatosInArray());
                         $fecha_de_referencia = $xF->setSumarDias($this->getPeriocidadDePago() * $i, $this->getFechaDeMinistracion());
                         $FechaDePago = $xPlan->getFechaDePago($fecha_de_referencia, $i);
                     } else {
                         $Datos = $DataFechas[$i];
                         $fecha = $Datos[SYS_FECHA];
                         if ($xF->getInt($fecha) <= $fecha_de_corte_int) {
                             //creditos con solo interes
                             if ($this->getPagosSinCapital() == true) {
                                 if ($Datos["SYS_INTERES_SALDO"] > 0) {
                                     $fecha = $xF->setSumarDias(1, $fecha);
                                     $xLog->add("WARN\t{$i}\tInicia la fecha de Mora en {$fecha} porque el interes es " . $Datos["SYS_INTERES_SALDO"] . " \r\n", $xLog->DEVELOPER);
                                     $FechaDePago = $fecha;
                                     $terminado = true;
                                 }
                             } else {
                                 $saldoLetra = setNoMenorQueCero($Datos[SYS_CAPITAL] - $Datos[SYS_MONTO]);
                                 if ($saldoLetra > 0) {
                                     $fecha = $xF->setSumarDias(1, $fecha);
                                     $xLog->add("ERROR\t{$i}\tInicia la fecha de Mora en {$fecha} porque el Saldo de la Letra es {$saldoLetra} \r\n", $xLog->DEVELOPER);
                                     $FechaDePago = $fecha;
                                     $terminado = true;
                                 }
                             }
                         } else {
                             $xLog->add("WARN\t{$i}\tFecha de Pago({$fecha}) Superior a la Fecha de corte ({$fecha_de_corte})\r\n", $xLog->DEVELOPER);
                             $FechaDePago = $fecha;
                             $terminado = true;
                         }
                     }
                 }
             }
             //==============================================================
             if (!isset($FechaDePago)) {
                 $xPlan = new cPlanDePagosGenerador();
                 $xPlan->initPorCredito($this->mNumeroCredito, $this->getDatosInArray());
                 $fecha_de_referencia = $xF->setSumarDias($this->getPeriocidadDePago() * $this->getPeriodoActual(), $this->getFechaDeMinistracion());
                 $FechaDePago = $xPlan->getFechaDePago($fecha_de_referencia, $this->getPeriodoActual());
                 $xLog->add("ERROR\tError en la Fecha. Se carga por estimacion {$FechaDePago} del periodo " . $this->getPeriodoActual() . " \r\n", $xLog->DEVELOPER);
                 //corregir y actualizar
             }
             //$letra_que_debe_estar_pagada	= ($letra_que_debe_estar_pagada ==0) ? 1 : $letra_que_debe_estar_pagada;
             //$FechaDePago					= $Historico[$letra_que_debe_estar_pagada][SYS_FECHA];
             $mFechaDeInicio = $FechaDePago;
             $mFechaDeMora = $xF->setSumarDias($dias_para_mora, $mFechaDeInicio);
             $mFechaDeVencimiento = $xF->setSumarDias($dias_tolerados_para_vencer, $mFechaDeMora);
             //$xLog->add("OK\t$idxc\t=" . $letra_que_debe_estar_pagada  . "|" . $letra_actualmente_pagada . "|" . $FechaDePago . "|$mFechaDeInicio|$mFechaDeMora|$mFechaDeVencimiento\r\n", $xLog->DEVELOPER);
             //			$xLog->add("Letra pagara $letra_actualmente_pagada , que debe pagar $letra_que_debe_estar_pagada\r\n", $xLog->DEVELOPER);
             //$pagos_pendientes				= setNoMenorQueCero( $this->mPagosAutorizados - $letra_actualmente_pagada );
         }
         $stat[SYS_CREDITO_DIAS_NORMALES] = setNoMenorQueCero($xF->setRestarFechas($mFechaDeMora, $fecha_ministracion));
         $stat[SYS_CREDITO_DIAS_MOROSOS] = setNoMenorQueCero($xF->setRestarFechas($mFechaDeVencimiento, $mFechaDeMora));
         $stat[SYS_CREDITO_DIAS_VENCIDOS] = setNoMenorQueCero($xF->setRestarFechas($fecha_de_corte, $mFechaDeVencimiento));
         $stat["fecha_de_inicio"] = $mFechaDeInicio;
         $stat["fecha_de_mora"] = $mFechaDeMora;
         $stat["fecha_de_vencimiento"] = $mFechaDeVencimiento;
         /**
          * Calcular el Estatus por metodo reversivo
          */
         if ($xF->getInt($fecha_de_corte) >= $xF->getInt($mFechaDeVencimiento)) {
             $xLog->add("ERROR\tA.VENC\tLa fecha de corte (" . $xF->getFechaCorta($fecha_de_corte) . ") es mayor a la de vencimiento(" . $xF->getFechaCorta($mFechaDeVencimiento) . ") por o que se da como ***VENCIDO***\r\n");
             $stat[SYS_ESTADO] = CREDITO_ESTADO_VENCIDO;
         } else {
             if ($xF->getInt($fecha_de_corte) >= $xF->getInt($mFechaDeMora) and $xF->getInt($fecha_de_corte) < $xF->getInt($mFechaDeVencimiento)) {
                 $xLog->add("WARN\tA.MOR\tLa fecha de corte (" . $xF->getFechaCorta($fecha_de_corte) . ") es mayor a la de Mora(" . $xF->getFechaCorta($mFechaDeMora) . ") y Menor a la Fecha de Vencimiento (" . $xF->getFechaCorta($mFechaDeVencimiento) . ") por lo que se da como ***MOROSO***\r\n");
                 $stat[SYS_ESTADO] = CREDITO_ESTADO_MOROSO;
                 $stat[SYS_CREDITO_DIAS_VENCIDOS] = 0;
             } else {
                 if ($xF->getInt($fecha_de_corte) < $xF->getInt($mFechaDeMora)) {
                     $xLog->add("OK\tA.VIG\tLa fecha de corte (" . $xF->getFechaCorta($fecha_de_corte) . ") es mayor a la de Mora(" . $xF->getFechaCorta($mFechaDeMora) . ") por o que se da como ***VIGENTE***\r\n");
                     $stat[SYS_ESTADO] = CREDITO_ESTADO_VIGENTE;
                     $stat[SYS_CREDITO_DIAS_VENCIDOS] = 0;
                     $stat[SYS_CREDITO_DIAS_MOROSOS] = 0;
                 } else {
                 }
             }
         }
         $this->mFechaVencimientoLegal = $mFechaDeVencimiento;
         $this->mFechaMora = $mFechaDeMora;
         //if($actualizar == true){ $xLog->add("Se actualizaran saldos12\r\n", $xLog->DEVELOPER);}
         if ($explain == true) {
             $stat["notas"] = $xLog->getMessages();
         } else {
             $stat["notas"] = "";
         }
         if ($actualizar == true) {
             $arrUpdate = array("fecha_mora" => $mFechaDeMora, "fecha_vencimiento_dinamico" => $mFechaDeVencimiento, "estatus_actual" => $stat[SYS_ESTADO]);
             $this->setUpdate($arrUpdate);
             $xLog->add("WARN\tActualizar Fecha de Mora a {$mFechaDeMora} y Fecha de Vencimiento a {$mFechaDeVencimiento}\r\n", $xLog->DEVELOPER);
         }
         $this->mMessages .= $xLog->getMessages();
         if ($explain == true) {
             $aviso .= $this->getMessages(OUT_HTML);
             $exoExplain = "<fieldset>\n                    <legend>Explicacion de estatus al " . $xF->getFechaCorta($fecha_de_corte) . "</legend>\n                    <table>\n                        <tbody>\n                            <tr>\n                                <th class='izq'>Fecha de Ministracion</th>\n                                <td>" . $xF->getFechaCorta($fecha_ministracion) . "</td>\n                                <th class='izq'>Fecha de Inicio de Pagos</th>\n                                <td>" . $xF->getFechaCorta($stat["fecha_de_inicio_de_pagos"]) . "</td>\n                            </tr>\n                            <tr>\n                                <th class='izq'>Pagos Autorizados</th>\n                                <td>{$pagos_autorizados}</td>\n                                <th class='izq'>Periocidad de Pagos</th>\n                                <td>{$periocidad_pago}</td>\n\n                            </tr>\n                            <tr>\n                                <th class='izq'>Monto Ministrado</th>\n                                <td>{$monto_ministrado}</td>\n                                <th class='izq' >Saldo Insoluto</th>\n                                <td>{$saldo_insoluto}</td>\n                            </tr>\n                            <tr>\n                                <th class='izq'>Pagos Efectuados</th>\n                                <td>{$letra_actualmente_pagada}</td>\n                                <th class='izq'>Pagos Pendientes</th>\n                                <td>{$pagos_pendientes}</td>\n                            </tr>\n                            <tr>\n                                <th class='izq'>Fecha de Inicio de Calculo</th>\n                                <td>" . $xF->getFechaCorta($mFechaDeInicio) . "</td>\n                                <th class='izq'>Fecha de Mora</th>\n                                <td>" . $xF->getFechaCorta($mFechaDeMora) . "</td>\n                            </tr>\n                            <tr>\n                                <th class='izq'>Fecha de Vencimiento</th>\n                                <td>" . $xF->getFechaCorta($mFechaDeVencimiento) . "</td>\n                                <th class='izq'>Estatus Determinado</th>\n                                <td>" . $stat["estatus"] . "</td>\n                            </tr>\n\n                            <tr>\n                                <th class='izq'>Dias Vigentes</th>\n                                <td>" . $stat[SYS_CREDITO_DIAS_NORMALES] . "</td>\n                                <th class='izq'>Dias Morosos</th>\n                                <td>" . $stat[SYS_CREDITO_DIAS_MOROSOS] . "</td>\n                            </tr>\n                            <tr>\n                                <th class='izq'>Dias Vencidos</th>\n                                <td>" . $stat[SYS_CREDITO_DIAS_VENCIDOS] . "</td>\n                                <th class='izq'>Tipo de Pago</th>\n                                <td >{$tipo_de_pago}</td>\n                            </tr>\n                            <tr>\n                                <th colspan='4'>{$aviso}</th>\n                            </tr>\n                        </tbody>\n                    </table>\n\t\t\t\t\t</fieldset>";
             return $exoExplain;
         } else {
             return $stat;
         }
     }
 }
 function setActualizarPrimerPago($default_fecha = "2014-01-01")
 {
     $xLi = new cSQLListas();
     $query = new MQL();
     $sql = $xLi->getInicialDeCreditos() . " WHERE `creditos_solicitud`.`fecha_de_primer_pago` ='{$default_fecha}'";
     // AND `creditos_solicitud`.`periocidad_de_pago` != " . CREDITO_TIPO_PERIOCIDAD_FINAL_DE_PLAZO . " ";
     $data = $query->getDataRecord($sql);
     $msg = "";
     $FechaFinal = "";
     $ByPersona1 = "";
     $ByPersona3 = "";
     $rsPagos = $query->getDataRecord("SELECT * FROM `creditos_abonos_parciales` WHERE periodo_socio = 1 ");
     // /*WHERE	(`creditos_abonos_parciales`.`fecha_de_pago` <='$FechaFinal') $ByPersona1 */");
     $DPagos = array();
     foreach ($rsPagos as $dpags) {
         $credito = $dpags["docto_afectado"];
         $DPagos[$credito][] = $dpags;
     }
     $rsCal = $query->getDataRecord("SELECT * FROM `letras` WHERE periodo_socio = 1 ");
     // /*WHERE	(`fecha_de_pago` <='$FechaFinal') $ByPersona3 */");
     $DCal = array();
     foreach ($rsCal as $dscal) {
         $credito = $dscal["docto_afectado"];
         $DCal[$credito][] = $dscal;
     }
     foreach ($data as $rows) {
         $idcredito = $rows["numero_solicitud"];
         $antes = $rows["fecha_de_primer_pago"];
         $periocidad = $rows["periocidad_de_pago"];
         $FPrimerAb = false;
         $Tipo = "";
         if ($periocidad == CREDITO_TIPO_PERIOCIDAD_FINAL_DE_PLAZO) {
             $xCred = new cCredito($idcredito);
             $xCred->init($rows);
             $FPrimerAb = $xCred->getFechaDevencimientoLegal();
         } else {
             //info pagos
             $d1 = isset($DCal[$idcredito]) ? $DCal[$idcredito] : false;
             $d2 = isset($DPagos[$idcredito]) ? $DPagos[$idcredito] : false;
             if ($d2 == false) {
                 if ($d1 != false) {
                     $Tipo = "PLAN";
                     $record = $d2[0];
                     $FPrimerAb = $record["fecha_de_pago"];
                 }
             } else {
                 $Tipo = "PAG";
                 $record = $d2[0];
                 $FPrimerAb = $record["fecha_de_pago"];
             }
             if ($FPrimerAb == false) {
                 $xPlanGen = new cPlanDePagosGenerador();
                 $xPlanGen->initPorCredito($idcredito, $rows);
                 $FPrimerAb = $xPlanGen->getFechaDePrimerPago();
                 $Tipo = "EST";
             }
         }
         $msg .= "WARN\t{$idcredito}\t{$Tipo}\tLa fecha de Primer abono es {$FPrimerAb} de {$antes}\r\n";
         $query->setRawQuery("UPDATE creditos_solicitud SET `fecha_de_primer_pago`='{$FPrimerAb}' WHERE numero_solicitud = {$idcredito} ");
     }
     return $msg;
 }