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;