function b_week($ignium)
{
    if (!$ignium) {
        $mesa = date("m");
        $annoa = date("Y");
        //$fecha = date("Y-m-d", strtotime("$annoa-$mesa-01"));
    } else {
        $mesa = date("m", strtotime($ignium)) - 1;
        $annoa = date("Y", strtotime($ignium));
        if ($mesa < 1) {
            $mesa = 12;
            $annoa = $annoa - 1;
        }
    }
    $xF = new cFecha(0, "{$annoa}-{$mesa}-01");
    $fecha = $xF->get();
    $dias_mes = $xF->getDiasDelMes();
    $idm = $xF->mes();
    $month = $xF->getMesNombre();
    //Valores Iniciales
    $tdweek = "";
    $colorweek = "#FFDFC6";
    $nsemana = 1;
    $tcal = "";
    for ($i = 1; $i <= $dias_mes; $i++) {
        $nowdate = "{$annoa}-{$idm}-{$i}";
        $nday = date("l", strtotime($nowdate));
        if ($nday == "Monday") {
            $dia = dia_semana($nowdate);
            $cnowdate = fecha_corta($nowdate);
            if ($tcal == "cal_2") {
                $tcal = "cal_1";
                $tdweek = $tdweek . "<td class='{$tcal}' onclick='show_week(\"{$nowdate}\")'>SEMANA: {$nsemana} <br /> {$cnowdate}</td>";
            } else {
                $tcal = "cal_2";
                $tdweek = $tdweek . "<td class='{$tcal}' onclick='show_week(\"{$nowdate}\")'>SEMANA: {$nsemana} <br /> {$cnowdate}</td>";
            }
            $nsemana++;
        }
    }
    return "<hr />\n\t<center>\n\t<table class='calendar_week'\n\tcellpadding='2' cellspacing='2' border='2'>\n\t\t<tr>\n\t\t\t<td class='{$tcal}'><img src='../images/common/query_back_down.png' onclick='back_week(\"{$nowdate}\");' /></td>\n\t\t\t{$tdweek}\n\t\t\t<td class='{$tcal}'><img src='../images/common/query_next_down.png' onclick='next_week(\"{$nowdate}\");' /></td>\n\t\t</tr>\n\t</table>\n\t</center>\n\t<hr />";
}
//=====================================================================================================
$xP = new cHPage("Pruebas de Fechas", HP_FORM);
$xP->setIncludes();
echo $xP->getHeader();
echo $xP->setBodyinit();
//Crear formularios
$xHFrm = new cHForm("frmTest", "./test.php");
$xHTxt = new cHText("");
//$txt 	= $xHTxt->getDeMoneda("id", "Moneda de Prueba",  100);
$miFecha = parametro("fecha", fechasys());
$xF = new cFecha(0, $miFecha);
//$xHFrm->addHElem( $txt );
$xHFrm->addHElem($xF->show(true));
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Inicio se semana==" . $xF->getFechaDeInicioDeSemana() . "</p>");
$xHFrm->addHElem("<p class='aviso'>La {$miFecha}, Inicio se nombre semana==" . $xF->getDayName($xF->getFechaDeInicioDeSemana()) . "</p>");
$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>");
 function setGenerarInteresSobreSDPM($recibo = false, $fecha_de_corte = false)
 {
     $sucursal = getSucursal();
     $xQL = new MQL();
     $xErC = new cErrorCodes();
     $xLog = new cCoreLog();
     $xDTb = new cSAFETabla(TCAPTACION_CUENTAS);
     //(`captacion_cuentas`.`sucursal` ='$sucursal') AND
     $txtlog = "";
     $txtlog .= "==========================================================================================\r\n";
     $txtlog .= "==========\tCALCULO DE INTERESES SOBRE SDPM DE CUENTAS A LA VISTA EN LA SUCURSAL {$sucursal}\r\n";
     $txtlog .= "==========\tRECIBO DE CALCULO {$recibo}\r\n";
     $txtlog .= "==========================================================================================\r\n";
     $xF0 = new cFecha(0, $fecha_de_corte);
     $fecha_de_corte = $fecha_de_corte == false ? fechasys() : $fecha_de_corte;
     $dias_del_mes = $xF0->getDiasDelMes();
     $fecha_de_inicio = $xF0->getDiaInicial();
     $fecha_de_termino = $xF0->getDiaFinal();
     $ejer = $xF0->anno();
     $peri = $xF0->mes();
     //(`captacion_cuentas`.`sucursal` ='$sucursal') AND
     /**
      * Reestructurar los Dias SDPM para los Creditos que no han tenido Movimiento
      */
     //Generando el SDPM de los Credito sin movimiento o ultimo SDPM del mes
     $SQL_LST = $xDTb->getQueryInicial() . "\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t(`captacion_cuentas`.`estatus_cuenta` ='10') AND\n\t\t\t\t\t\t\t(`captacion_subproductos`.`metodo_de_abono_de_interes` ='AL_FIN_DE_MES')\n\t\t\t\t\t\t\tAND\n\t\t\t\t\t\t\t(`captacion_cuentas`.`saldo_cuenta`>= " . A_LA_VISTA_MONTO_MINIMO . " )\n\t\t\t\t\t\t";
     $txtlog .= date("H:i:s") . "\t=========Cerrando las cuentas a su ultimo SDPM\r\n";
     $txtlog .= date("H:i:s") . "\tLas Cuentas con Saldo Menor a " . A_LA_VISTA_MONTO_MINIMO . " no se Incluyen\r\n";
     $rsUSDPM = $xQL->getDataRecord($SQL_LST);
     foreach ($rsUSDPM as $rwUSDPM) {
         $cuenta = $rwUSDPM["numero_cuenta"];
         $socio = $rwUSDPM["numero_socio"];
         $fecha_ultimo_mvto = $rwUSDPM["fecha_afectacion"];
         $saldo_actual = $rwUSDPM["saldo_cuenta"];
         $dias_de_sdpm = restarfechas($fecha_de_corte, $fecha_ultimo_mvto);
         $xCta = new cCuentaALaVista($cuenta);
         $xCta->init($rwUSDPM);
         if ($dias_de_sdpm > $dias_del_mes) {
             $txtlog .= date("H:i:s") . "\t{$socio}\t{$cuenta}\tLos dias del SDPM son de {$dias_de_sdpm} Mayores al del Mes {$dias_del_mes}, se ajustan\r\n";
             $xFMes = new cFecha(0, $fecha_de_corte);
             $dias_de_sdpm = $xF0->setRestarFechas($fecha_de_corte, $xF0->getDiaInicial());
         }
         $sdpm = $saldo_actual * $dias_de_sdpm;
         //Obtiene la Tasa
         $tasa = $xCta->getTasaAplicable(0, 0, $saldo_actual);
         //Inserta el SDPM
         $sqlUS = "INSERT INTO captacion_sdpm_historico\n\t\t\t\t\t\t(ejercicio, periodo, cuenta, fecha, dias, tasa, monto, recibo)\n\t    \t\t\t\tVALUES( {$ejer}, {$peri}, {$cuenta}, '{$fecha_de_corte}', {$dias_de_sdpm}, {$tasa},{$sdpm}, {$recibo})";
         my_query($sqlUS);
         //Actualiza la Cuenta
         $sqlUI = "UPDATE captacion_cuentas\n\t    \t\t\t\t\t\tSET fecha_afectacion='{$fecha_de_corte}', ultimo_sdpm={$sdpm}\n\t    \t\t\t\t\t\tWHERE numero_cuenta={$cuenta}";
         my_query($sqlUI);
         $txtlog .= date("H:i:s") . "\t{$socio}\t{$cuenta}\tAgregando y Actualizando el SDPM por {$sdpm} del {$fecha_ultimo_mvto} al {$fecha_de_corte} por {$saldo_actual}\r\n";
     }
     //considerar fecha de Apertura
     //agregar al Recibo
     //TODO: Actualizar esta linea
     $SQL_Captacion = "\n\t\t\t\t\t\tSELECT\n\t\t\t\t\t\t\t`captacion_cuentas`.*,\n\t\t\t\t\t\t\t`captacion_subproductos`.*,\n\t\t\t\t\n\t\t\t\t\t`captacion_cuentas`.`numero_cuenta`                 AS `cuenta`,\n\t\t\t\t\t`captacion_cuentas`.`fecha_afectacion`              AS `apertura`,\n\t\t\t\t\t`captacion_cuentas`.`inversion_fecha_vcto`          AS `vencimiento`,\n\t\t\t\t\t`captacion_cuentas`.`tasa_otorgada`                 AS `tasa`,\n\t\t\t\t\t`captacion_cuentas`.`dias_invertidos`               AS `dias`,\n\t\t\t\t\t`captacion_cuentas`.`observacion_cuenta`            AS `observaciones`,\n\t\t\t\t\t`captacion_cuentas`.`saldo_cuenta` \t\t\t        AS `saldo`,\n\t\t\t\t\t`captacion_subproductos`.`descripcion_subproductos` AS `subproducto`,\n\t\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tSUM(`captacion_sdpm_historico`.`monto`) AS 'suma_sdpm'\n\t\t\t\t\t\tFROM\n\t\t\t\t\t\t\t`captacion_cuentas` `captacion_cuentas`\n\t\t\t\t\t\t\t\tINNER JOIN `captacion_subproductos` `captacion_subproductos`\n\t\t\t\t\t\t\t\tON `captacion_cuentas`.`tipo_subproducto` = `captacion_subproductos`.\n\t\t\t\t\t\t\t\t`idcaptacion_subproductos`\n\t\t\t\t\t\t\t\t\tINNER JOIN `captacion_sdpm_historico` `captacion_sdpm_historico`\n\t\t\t\t\t\t\t\t\tON `captacion_cuentas`.`numero_cuenta` = `captacion_sdpm_historico`.\n\t\t\t\t\t\t\t\t\t`cuenta`\n\t\t\t\t\t\tWHERE\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t(`captacion_cuentas`.`estatus_cuenta` ='10') AND\n\t\t\t\t\t\t\t(`captacion_subproductos`.`metodo_de_abono_de_interes` ='AL_FIN_DE_MES')\n\t\t\t\t\t\t\tAND\n\t\t\t\t\t\t\t(`captacion_sdpm_historico`.`fecha` >='{$fecha_de_inicio}')\n\t\t\t\t\t\t\tAND\n\t\t\t\t\t\t\t(`captacion_sdpm_historico`.`fecha` <='{$fecha_de_termino}')\n\t\t\t\t\t\t\tAND\n\t\t\t\t\t\t\t(`captacion_cuentas`.`saldo_cuenta`>=" . A_LA_VISTA_MONTO_MINIMO . ")\n\t\t\t\t\t\tGROUP BY\n\t\t\t\t\t\t\t`captacion_sdpm_historico`.`cuenta`\n\t\t\t\t\t\t\t";
     setLog($SQL_Captacion);
     $rsCAP = $xQL->getDataRecord($SQL_Captacion);
     if (!$rsCAP) {
         if (MODO_DEBUG == true) {
             $txtlog .= $xQL->getMessages();
             //date("H:i:s") . "\tERROR (" . mysql_errno() . ") AL EJECUTAR LA CONSULTA";
         }
     } else {
         $txtlog .= "==========================================================================================\r\n";
         //$xT1	= new cTipos();
         foreach ($rsCAP as $rwC) {
             $cuenta = $rwC["numero_cuenta"];
             $socio = $rwC["numero_socio"];
             $apertura = $rwC["fecha_apertura"];
             $sumaSDPM = $rwC["suma_sdpm"];
             $dias_de_calc = $dias_del_mes;
             $promedio = $rwC["saldo_cuenta"];
             $modificadorDeInteres = $rwC["algoritmo_modificador_del_interes"];
             $modificadorDeTasa = $rwC["algoritmo_de_tasa_incremental"];
             $interes = 0;
             $producto = $rwC["tipo_subproducto"];
             //Si la Fecha de Apertura es Menor al Inicio de mes
             if (strtotime($apertura) > strtotime($fecha_de_inicio)) {
                 $dias_de_calc = restarfechas($fecha_de_termino, $apertura);
                 //Corrige el TIMESTAMP de Interes, la rotacion debe ser de al menos 24 Horas
                 if ($dias_de_calc == 0) {
                     $dias_de_calc = 1;
                 } elseif ($dias_de_calc < 0) {
                     $txtlog .= date("H:i:s") . "\t{$socio}\t{$cuenta}\tEROR_DIAS\t SDPM {$sumaSDPM}, Dias {$dias_de_calc}\r\n";
                     $dias_de_calc = 1;
                     $sumaSDPM = $promedio;
                 }
             }
             $xCta = new cCuentaALaVista($cuenta);
             $xCta->init($rwC);
             $promedio = round($sumaSDPM / $dias_de_calc, 2);
             $tasa_nueva = $xCta->getTasaAplicable(0, 0, $promedio);
             $tasa = $tasa_nueva;
             //OK: Ejecutar Modificador de Tasa
             eval($modificadorDeTasa);
             //setLog("$modificadorDeTasa");
             $interes = $sumaSDPM * $tasa / EACP_DIAS_INTERES;
             //OK: Ejecutar Consulta de Modificador de Interes
             eval($modificadorDeInteres);
             $interes = round($interes, 2);
             //$txtlog		.= $modificadorDeInteres;
             if ($interes > 0) {
                 $rsx = setNuevoMvto($socio, $cuenta, $recibo, $fecha_de_corte, $interes, 222, 1, "CALCULO_AUTOMATICO");
                 if ($rsx == false) {
                     $txtlog .= "ERROR\t{$socio}\t{$cuenta}\tInteres por {$interes}, tasa {$tasa_nueva}, Promedio {$promedio}, SDPM {$sumaSDPM}, Dias {$dias_de_calc}\r\n";
                 } else {
                     $txtlog .= "OK\t{$socio}\t{$cuenta}\tInteres por {$interes}, tasa {$tasa_nueva}, Promedio {$promedio}, SDPM {$sumaSDPM}, Dias {$dias_de_calc} en Rec {$recibo}\r\n";
                 }
                 $sqlUI = "UPDATE captacion_cuentas\n\t\t    \t\t\t\t\t\tSET saldo_cuenta = (saldo_cuenta + {$interes})\n\t\t    \t\t\t\t\t\tWHERE numero_cuenta={$cuenta} AND numero_socio={$socio}";
                 $x = my_query($sqlUI);
             } else {
                 $txtlog .= "WARN\t{$socio}\t{$cuenta}\tNOINT\t({$interes} / {$tasa_nueva}) Promedio {$promedio}, SDPM {$sumaSDPM}, Dias {$dias_de_calc}\r\n";
             }
         }
     }
     return $txtlog;
 }
 function getFechaDeAviso($periocidad = false, $fecha = false, $periodoInit = false, $periodoEnd = false)
 {
     $xF = new cFecha();
     $dias = explode(",", strtoupper($this->mDiasDeAviso));
     $diasSem = $xF->getDiasDeSemanaInArray();
     $periocidad = $periocidad == false ? $this->getPeriocidadPref() : $periocidad;
     $fecha = $fecha == false ? fechasys() : $fecha;
     $result = null;
     $items = 1;
     foreach ($diasSem as $numero => $nombre) {
         /*if(isset($dias[$nombre]) ){
         			unset($dias[$nombre]);
         			$dias[$numero]
         		}*/
     }
     foreach ($dias as $id => $dia) {
     }
     foreach ($dias as $id => $dia) {
         //limpiar
         if ($periocidad != CREDITO_TIPO_PERIOCIDAD_SEMANAL) {
             foreach ($diasSem as $numero => $nombre) {
                 if ($dia == $nombre) {
                     unset($dias[$id]);
                 }
             }
             if (setNoMenorQueCero($dia) > $xF->getDiasDelMes() or setNoMenorQueCero($dia) == 0) {
                 unset($dias[$id]);
             }
             switch ($periocidad) {
                 case CREDITO_TIPO_PERIOCIDAD_DECENAL:
                     if ($id > 3) {
                         unset($dias[$id]);
                     }
                     break;
                 case CREDITO_TIPO_PERIOCIDAD_CATORCENAL:
                     if ($id > 2) {
                         unset($dias[$id]);
                     }
                     break;
                 case CREDITO_TIPO_PERIOCIDAD_QUINCENAL:
                     if ($id > 2) {
                         unset($dias[$id]);
                     }
                     break;
                 case CREDITO_TIPO_PERIOCIDAD_MENSUAL:
                     if ($id > 1) {
                         unset($dias[$id]);
                     }
                     break;
             }
         } else {
             //convertir dias
             foreach ($diasSem as $numero => $nombre) {
                 if ($dia == $nombre) {
                     $dias[$id] = $numero;
                 }
             }
             if (setNoMenorQueCero($dia) > 7 or setNoMenorQueCero($dia) == 0) {
                 unset($dias[$id]);
             }
             if ($id > 1) {
                 unset($dias[$id]);
             }
         }
     }
     //$items		= count($dias);
     //encontrar el periodo cero
     switch ($periocidad) {
         case CREDITO_TIPO_PERIOCIDAD_DECENAL:
             break;
         case CREDITO_TIPO_PERIOCIDAD_CATORCENAL:
             break;
         case CREDITO_TIPO_PERIOCIDAD_QUINCENAL:
             break;
         case CREDITO_TIPO_PERIOCIDAD_MENSUAL:
             $xF1 = new cFecha(0, $fecha);
             $result = $xF1->anno() . "-" . $xF1->mes() . "-" . $dias[0];
             break;
         case CREDITO_TIPO_PERIOCIDAD_SEMANAL:
             //$fechaInicial	= $xF->setFechaPorSemana();
             $xF1 = new cFecha(0, $fecha);
             $buscar = 1;
             foreach ($dias as $id => $cnt) {
                 $buscar = $cnt;
             }
             $semana = date("W", $xF1->getInt());
             $result = $xF1->setFechaPorSemana($semana, $buscar);
             /*
              $first_day_of_week = date('m-d-Y', strtotime('Last Monday', time()));
             $last_day_of_week = date('m-d-Y', strtotime('Next Sunday', time()));
             */
             break;
     }
     return $result;
 }