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;
 }
 function setReestructurarICA($fecha_corte)
 {
     $periodo_de_calculo = date("m", strtotime($fecha_corte));
     $ejercicio = date("Y", strtotime($fecha_corte));
     $fecha_operacion = $fecha_corte;
     $tipo_operacion = 451;
     $msg .= "============== REESTRUCTURAR EL ICA \r\n";
     /**
      * llevar a cero los Intereses
      */
     $sqlUICA = "UPDATE creditos_solicitud SET sdo_int_ant=0";
     my_query($sqlUICA);
     /**
      * Eliminar el ica
      */
     $sqlDEL = "DELETE FROM operaciones_mvtos WHERE tipo_operacion = 451 AND periodo_mensual<={$periodo_de_calculo} AND periodo_anual <= {$ejercicio}";
     $myq = my_query($sqlDEL);
     /**
      * Agregar el Recibo
      *
      */
     $NRecibo = setNuevoRecibo(1, 1, $fecha_operacion, 1, 10, "CALCULO_GENERADO_EN_UTIL_835", "NA", "ninguno", "NA", 99, 0);
     $sqlConICA = "SELECT\n\t\t\t\t\t\t`creditos_solicitud`.*,\n\t\t\t\t\t\t`creditos_tipoconvenio`.*\n\t\t\t\t\tFROM\n\t\t\t\t\t\t`creditos_solicitud` `creditos_solicitud`\n\t\t\t\t\t\t\tINNER JOIN `creditos_tipoconvenio`\n\t\t\t\t\t\t\t`creditos_tipoconvenio`\n\t\t\t\t\t\t\tON `creditos_solicitud`.`tipo_convenio` =\n\t\t\t\t\t\t\t`creditos_tipoconvenio`.`idcreditos_tipoconvenio`\n\t\t\t\t\tWHERE\n\t\t\t\t\t\t(`creditos_tipoconvenio`.`porcentaje_ica` >0) AND\n\t\t\t\t\t\t(`creditos_solicitud`.`saldo_actual` >0.99) AND\n\n\t\t\t\t\t\t(`creditos_solicitud`.`estatus_actual` !=50) AND\n\t\t\t\t\t\t(`creditos_solicitud`.`estatus_actual` !=98) AND\n\t\t\t\t\t\t(`creditos_solicitud`.`estatus_actual` !=99)\n\n\t\t\t\t\t\t/*AND\n\t\t\t\t\t\t(`creditos_solicitud`.`fecha_vencimiento` >=\n\t\t\t\t\t\t'{$fecha_operacion}')*/\n\t\t\t\t\t\tAND\n\t\t\t\t\t\t(`creditos_solicitud`.`fecha_ministracion` <='{$fecha_operacion}')\n\t\t\t\t\tORDER BY\n\t\t\t\t\t\t`creditos_solicitud`.`fecha_ministracion`\n\t\t\t\t\t";
     //echo $sqlConICA;
     $rs = mysql_query($sqlConICA, cnnGeneral());
     while ($rw = mysql_fetch_array($rs)) {
         $socio = $rw["numero_socio"];
         $solicitud = $rw["numero_solicitud"];
         $monto_ministrado = $rw["monto_autorizado"];
         $tasa_interes = $rw["tasa_interes"];
         $dias_autorizados = $rw["dias_autorizados"];
         $porcentaje_ica = $rw["porcentaje_ica"];
         $fecha_ult_mvto = $rw["fecha_ultimo_mvto"];
         $fecha_ministracion = $rw["fecha_ministracion"];
         $dias_autorizados = $rw["dias_autorizados"];
         $saldo_historico = $monto_ministrado;
         $iva_incluido = $rw["iva_incluido"];
         $tasa_iva = $rw["tasa_iva"];
         $factor_interes = 1;
         if ($iva_incluido == "1") {
             $factor_interes = 1 / (1 + $tasa_iva);
         }
         $dias_transcurridos = restarfechas($fecha_corte, $fecha_ministracion);
         $ica = $dias_autorizados * $monto_ministrado * ($tasa_interes * $factor_interes) / EACP_DIAS_INTERES * $porcentaje_ica;
         $interes_generado = $dias_transcurridos * $monto_ministrado * ($tasa_interes * $factor_interes) / EACP_DIAS_INTERES;
         $ica_a_amortizar = $interes_generado;
         if ($ica_a_amortizar > $ica) {
             $ica_a_amortizar = $ica;
         }
         //purgar posibles errores
         if ($interes_generado < 0) {
             $interes_generado = 0;
         }
         //lleva a cero el Ica a Amortizar si ya se amort
         if ($ica_a_amortizar > 0) {
             $xn = setNuevoMvto($socio, $solicitud, $NRecibo, $fecha_operacion, $ica_a_amortizar, $tipo_operacion, 1, "REESTRUCTURACION AUTOMATICA HECHA POR {$iduser}");
         } else {
             $ica_a_amortizar = 0;
         }
         if ($interes_generado < $ica) {
             $ica = $ica - $interes_generado;
             if ($ica < 0) {
                 $ica = 0;
             }
             $UICA_sql = "UPDATE creditos_solicitud SET sdo_int_ant = {$ica}\n\t\t\t\t\t\tWHERE numero_solicitud={$solicitud} AND numero_socio={$socio}";
             my_query($UICA_sql);
         }
         $msg .= date("Y-m-d") . "\t{$socio}\t{$solicitud}\tMonto: {$saldo_historico}, Tasa: {$tasa_interes}, Factor: {$factor_interes}, Tasa ICA {$porcentaje_ica}\r\n";
         $msg .= date("Y-m-d") . "\t{$socio}\t{$solicitud}\tI.C.A. {$ica}, Int. Generado: {$interes_generado}, Dias Trans.: {$dias_transcurridos}/{$dias_autorizados}, ICA A AMort: {$ica_a_amortizar}\r\n";
     }
     return $msg;
 }
             if ($rw["iva_incluido"] == 1) {
                 $NuevoMonto = $monto * (1 / (1 + $tasa_iva));
                 //1000 * 1/1.15
                 $iva = $monto - $NuevoMonto;
                 setNuevoMvto($socio, $solicitud, $recibo, $fecha, $iva, 413, $parcialidad, $txt);
                 //Si el IVA esta Incluido Crear IVA y Descontar Monto
                 $sqlNuevoM = "UPDATE operaciones_mvtos\n    \t\t\t\t\t\t\t\t\t\tSET afectacion_real={$NuevoMonto},\n    \t\t\t\t\t\t\t\t\t\tafectacion_cobranza={$NuevoMonto},\n    \t\t\t\t\t\t\t\t\t\tafectacion_contable={$NuevoMonto},\n    \t\t\t\t\t\t\t\t\t\tafectacion_estadistica={$NuevoMonto} /*,\n    \t\t\t\t\t\t\t\t\t\tdetalles=  CONCAT(detalles, '; {$useKey}')*/\n    \t\t\t\t\t\t\t\t\t\tWHERE idoperaciones_mvtos={$operacion}\n    \t\t\t\t\t\t\t\t\t\tAND tipo_operacion =411";
                 $tmp = my_query($sqlNuevoM);
                 if ($tmp["stat"] == false) {
                     echo "<p class='aviso'>LA ACTUALIZACION CON CODIGO {$operacion}, NO SE EFECTUO; EL SISTEMA DEVOLVIO " . $tmp[SYS_MSG] . "</p>";
                 } else {
                     //echo "<p class='aviso'>LA OPERACION FUE EXITOSA, EL SISTEMA DIJO " . $tmp["info"] ."</p>";
                 }
             } else {
                 $iva = $monto * $tasa_iva;
                 setNuevoMvto($socio, $solicitud, $recibo, $fecha, $iva, 413, $parcialidad, txt);
             }
         }
     }
     //nd if
     @mysql_free_result($rs);
     //unset($rs);
     //saveError(10,$_SESSION["SN_b80bb7740288fda1f201890375a60c8f"], "EL Usuario $oficial Utilizo la Utileria 837");
     break;
     //Elimina Entradas de Archivos Inexistentes
 //Elimina Entradas de Archivos Inexistentes
 case 838:
     break;
     /**
      * Depura las sucursales segun su caja local
      */
        $monto_sdpm = $saldo_cuenta * $diastrans;
    }
    //Guarda los datos del SDPM
    $ejer = date("Y", strtotime($fecha_operacion));
    $peri = date("m", strtotime($fecha_operacion));
    $sqlUS = "INSERT INTO captacion_sdpm_historico\n\t\t\t\t\t\t\t(ejercicio, periodo, cuenta, fecha, dias, tasa, monto, recibo)\n\t\t    \t\t\t\tVALUES( {$ejer}, {$peri},{$contrato_captacion}, '{$fecha_operacion}',\n\t\t    \t\t\t\t{$diastrans}, {$tasa}, {$monto_sdpm}, {$recibo_pago})";
    my_query($sqlUS);
    $msg .= "WARN\tAHORRO\t{$socio}\t{$contrato_captacion}\tAgregando y Actualizando el SDPM por {$monto_sdpm} del {$fecha_ultima} al {$fecha_operacion} agregando al saldo {$baseM220}\r\n";
    //Afectar el Saldo de la Cuenta de Captacion
    $sqlUAh = "UPDATE captacion_cuentas\n                            SET  fecha_afectacion='{$fecha_operacion}',\n                            saldo_cuenta=(saldo_cuenta +({$baseM220})),\n                            ultimo_sdpm={$monto_sdpm}\n                            WHERE numero_cuenta={$contrato_captacion}";
    my_query($sqlUAh);
}
//**************************************************************************************
$arrUCredito = array();
setNuevoMvto($socio, $solicitud, $recibo_pago, $fecha_operacion, $baseM303, 303, $parcialidad, $observaciones);
setNuevoMvto($socio, $solicitud, $recibo_pago, $fecha_operacion, $baseM352, 352, $parcialidad, $observaciones);
//si hay abono a capital
$actualizar_parcialidad = true;
/**
 * 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;