function jsaGuardarDatos($idcuenta, $nombre, $tipo, $centro, $equivalencia, $operacion)
{
    //no se puede cambiar naturaleza, superior
    $xLog = new cCoreLog();
    if ($operacion == SYS_CERO) {
        $xEsq = new cCuentaContableEsquema($idcuenta);
        $superior = $xEsq->CUENTA_SUPERIOR;
        $idcuenta = $xEsq->CUENTA;
        $nivel = $xEsq->NIVEL_ACTUAL;
        $xCta = new cCuentaContable($idcuenta);
        $xCta->add($nombre, $tipo, $centro, false, $nivel, false, $equivalencia, $superior);
        $xLog->add($xCta->getMessages(), $xLog->DEVELOPER);
        $xLog->add("OK\tAgregar Nueva cuenta {$idcuenta}\r\n");
    } else {
        $xCta = new cCuentaContable($idcuenta);
        if ($xCta->init() == true) {
            $xCta->setActualizar($nombre, $equivalencia, $centro);
        }
        $xLog->add($xCta->getMessages(), $xLog->DEVELOPER);
        $xLog->add("OK\tActualizar {$idcuenta} {$nombre} {$equivalencia} {$centro}\r\n");
    }
    return $xLog->getMessages(OUT_HTML);
}
 function setActualizarNivelDeRiesgo($actualizar = false)
 {
     $xQL = new MQL();
     $xLi = new cSQLListas();
     $xLog = new cCoreLog();
     //$xLi->getInicialDeCuentas()
     $rs = $xQL->getDataRecord($xLi->getInicialDePersonas());
     foreach ($rs as $rows) {
         $persona = $rows["codigo"];
         $xAml = new cAMLPersonas($persona);
         $xAml->init($persona, $rows);
         $riesgo = $xAml->setAnalizarNivelDeRiesgo();
         $NivelActual = $xAml->getOPersona()->getNivelDeRiesgo();
         if ($riesgo != $NivelActual) {
             if ($riesgo >= SYS_RIESGO_MEDIO) {
                 $xLog->add($xAml->getMessages(), $xLog->DEVELOPER);
             }
             if ($actualizar == true) {
                 $xAml->getOPersona()->setActualizarNivelDeRiesgo($riesgo, $xAml->getMessages());
             }
             $xLog->add($xAml->getOPersona()->getMessages(), $xLog->DEVELOPER);
         }
     }
     return $xLog->getMessages();
 }
 /**
  * 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 getFactura($enviar = false, $out = OUT_PDF)
 {
     $ready = null;
     $xml = "";
     $unidad = "NO APLICA";
     $cantidad = 1;
     $mql = new MQL();
     $xLis = new cSQLListas();
     $xLoc = new cLocal();
     $xPais = new cDomiciliosPaises(EACP_CLAVE_DE_PAIS);
     $xLog = new cCoreLog();
     $sql = "SELECT * FROM `operaciones_archivo_de_facturas` WHERE `clave_de_recibo` = " . $this->mCodigoDeRecibo . " LIMIT 0,1";
     $xArch = new cOperaciones_archivo_de_facturas();
     $DFact = $mql->getDataRow($sql);
     if (isset($DFact["clave_de_recibo"])) {
         $xArch->setData($DFact);
         $this->mMessages .= "OK\tEl UUID existe  " . $xArch->uuid()->v(OUT_TXT) . "\r\n";
         if ($enviar == true) {
             if ($this->getOPersona() == null) {
             } else {
                 $xSoc = $this->getOPersona();
                 $email = $xSoc->getCorreoElectronico();
                 $comprobante = PATH_FACTURAS . $xArch->uuid()->v(OUT_TXT);
                 file_put_contents($comprobante . ".xml", base64_decode($xArch->contenido()->v(OUT_TXT)));
                 file_put_contents($comprobante . ".pdf", base64_decode($xArch->impreso()->v(OUT_TXT)));
                 $ready = $out == OUT_PDF ? base64_decode($xArch->impreso()->v(OUT_TXT)) : base64_decode($xArch->contenido()->v(OUT_TXT));
                 $xNotif = new cNotificaciones();
                 //PDF y XML
                 $arrFil = array();
                 $arrFil["archivo1"]["path"] = $comprobante . ".pdf";
                 $arrFil["archivo2"]["path"] = $comprobante . ".xml";
                 $xNotif->sendMail("Factura del Recibo " . $this->mCodigoDeRecibo, "Factura del Recibo " . $this->mCodigoDeRecibo, $email, $arrFil);
                 //Enviar al Archivo mail
                 $xNotif->sendMail("Factura del Recibo " . $this->mCodigoDeRecibo, "Factura del Recibo " . $this->mCodigoDeRecibo, FACTURACION_MAIL_ARCHIVO, $arrFil);
                 $this->mMessages .= $xNotif->getMessages();
             }
         } else {
             $ready = $out == OUT_PDF ? $xArch->impreso()->v(OUT_TXT) : $xArch->contenido()->v(OUT_TXT);
         }
     } else {
         $xLog->add("WARN\tGenerando Nueva Factura\r\n", $xLog->DEVELOPER);
         //cargar Archivo
         $xPais->init();
         if ($this->mReciboIniciado == false) {
             $this->init();
         }
         if ($this->getOPersona() == null) {
             $xLog->add("ERROR\tAl cargar la Persona\r\n");
         } else {
             $xFact = new cFacturaElectronica();
             //datos de la emisora
             //persona iniciada
             $xSoc = $this->getOPersona();
             $email = $xSoc->getCorreoElectronico();
             $xFact->setEmisor(EACP_NAME, EACP_RFC, EACP_DOMICILIO_CALLE, EACP_DOMICILIO_NUM_EXT, EACP_DOMICILIO_NUM_INT, EACP_CODIGO_POSTAL, EACP_COLONIA, EACP_MUNICIPIO, EACP_ESTADO, $xPais->getNombre());
             $xFact->setRegimenFiscal(EACP_REGIMEN_FISCAL);
             $calle = $xLoc->DomicilioCalle();
             $numeroInt = $xLoc->DomicilioNumeroInterior();
             $numeroExt = $xLoc->DomicilioNumeroExterior();
             $codigoPostal = $xLoc->DomicilioCodigoPostal();
             $colonia = $xLoc->DomicilioColonia();
             $xSocDom = $xSoc->getODomicilio();
             $pais = $xLoc->getNombreDePais();
             $estado = $xLoc->DomicilioEstado();
             $municipio = $xLoc->DomicilioMunicipio();
             $tasa_iva = TASA_IVA;
             $xFact->setLugarDeExpedicion($xLoc->DomicilioCalle(), $xLoc->DomicilioNumeroExterior(), $xLoc->DomicilioNumeroInterior(), $xLoc->DomicilioCodigoPostal(), $xLoc->DomicilioColonia(), $xLoc->DomicilioMunicipio(), $xLoc->DomicilioEstado(), $xLoc->getNombreDePais());
             if ($xSocDom == null) {
                 $xLog->add("WARN\tNo hay domicilio Valido\r\n", $xLog->DEVELOPER);
             } else {
                 $calle = $xSocDom->getCalle();
                 $numeroExt = $xSocDom->getNumeroExterior();
                 $numeroInt = $xSocDom->getNumeroInterior();
                 $codigoPostal = $xSocDom->getCodigoPostal();
                 $colonia = $xSocDom->getColonia();
                 $municipio = $xSocDom->getMunicipio();
                 $estado = $xSocDom->getEstado();
                 $pais = $xSocDom->getNombreDePais();
             }
             //Cargar datos del Docto
             //$this->getOrigen();
             $OTipoRec = $this->getOTipoRecibo();
             if ($OTipoRec->getOrigen() == RECIBOS_ORIGEN_MIXTO or $OTipoRec->getOrigen() == RECIBOS_ORIGEN_COLOCACION) {
                 $xCred = new cCredito($this->getCodigoDeDocumento());
                 $xCred->init();
                 $tasa_iva = $xCred->getTasaIVA();
                 $xLog->add("WARN\tLa tasa de IVA es {$tasa_iva}\r\n", $xLog->DEVELOPER);
             }
             $xFact->setReceptor($xSoc->getNombreCompleto(), $xSoc->getRFC(true, true), $calle, $numeroExt, $numeroInt, $codigoPostal, $colonia, $municipio, $estado, $pais);
             //Datos del pagos
             $formaDePago = "Pago en una sola exhibición";
             $cuentaDePago = "No Identificado";
             $arrEquiv = array(TESORERIA_COBRO_DOCTO => "Documentos", TESORERIA_COBRO_EFECTIVO => "Efectivo", TESORERIA_COBRO_INTERNO => "Documentos", TESORERIA_COBRO_MULTIPLE => "Documentos", TESORERIA_COBRO_NINGUNO => "Documentos", TESORERIA_COBRO_TRANSFERENCIA => "Transferencia", TESORERIA_COBRO_CHEQUE => "Cheque");
             $metodoDePago = $arrEquiv[$this->getTipoDePago()];
             //cargar equivalencias
             //TODO: Considerar cambios en otro de tipo de tributacion
             if ($this->getTipoDePago() == TESORERIA_COBRO_TRANSFERENCIA or $this->getTipoDePago() == TESORERIA_COBRO_CHEQUE) {
                 $OCaja = $this->getOCaja();
                 $cuentaDePago = $OCaja->getCuentaBancoActivo();
             }
             //Cheque, Transferencia, Depósito
             $xFact->setDatosDePago($formaDePago, $metodoDePago, $cuentaDePago);
             $sql = "SELECT\n\t\t\t\t\t`eacp_config_bases_de_integracion_miembros`.`codigo_de_base`,\n\t\t\t\t\t`operaciones_mvtos`.`recibo_afectado`,\n\t\t\t\t\t`eacp_config_bases_de_integracion_miembros`.`miembro`,\n\t\t\t\t\t`eacp_config_bases_de_integracion_miembros`.`subclasificacion`,\n\t\t\t\t\t`operaciones_tipos`.`descripcion_operacion` AS `operacion`,\n\t\t\t\t\t`operaciones_mvtos`.`fecha_operacion`,\n\t\t\t\t\t`operaciones_mvtos`.`afectacion_real` AS 'monto'  \n\t\t\t\tFROM\n\t\t\t\t\t`operaciones_mvtos` `operaciones_mvtos` \n\t\t\t\t\t\tINNER JOIN `eacp_config_bases_de_integracion_miembros` \n\t\t\t\t\t\t`eacp_config_bases_de_integracion_miembros` \n\t\t\t\t\t\tON `operaciones_mvtos`.`tipo_operacion` = \n\t\t\t\t\t\t`eacp_config_bases_de_integracion_miembros`.`miembro` \n\t\t\t\t\t\t\tINNER JOIN `operaciones_tipos` `operaciones_tipos` \n\t\t\t\t\t\t\tON `operaciones_mvtos`.`tipo_operacion` = `operaciones_tipos`.\n\t\t\t\t\t\t\t`idoperaciones_tipos` \n\t\t\t\tWHERE\n\t\t\t\t\t(`eacp_config_bases_de_integracion_miembros`.`codigo_de_base` =11000) AND\n\t\t\t\t\t(`operaciones_mvtos`.`recibo_afectado` =" . $this->mCodigoDeRecibo . " )";
             $iva = 0;
             $total = 0;
             $rs = $mql->getDataRecord($sql);
             foreach ($rs as $rows) {
                 $descripcion = $rows["operacion"];
                 $valor = $rows["monto"];
                 $tipo = $rows["subclasificacion"];
                 $total += $valor;
                 if ($tipo == 1000) {
                     $iva += $rows["monto"];
                 } else {
                     $xFact->addConcepto($cantidad, $unidad, $valor, $descripcion);
                 }
             }
             //agregar IVA
             if ($iva > 0) {
                 $xFact->addTrasladado("IVA", $tasa_iva, $iva);
             }
             $xml = $xFact->get();
             $this->mOFactura = $xFact;
             if ($total <= 0) {
                 $enviar = false;
             }
         }
         if ($enviar == true) {
             if ($this->mOFactura != null) {
                 if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
                     if ($this->mOFactura->timbrar() == 1) {
                         //ready = true
                         $xNotif = new cNotificaciones();
                         //PDF y XML
                         $arrFil = array();
                         $arrFil["archivo1"]["path"] = $this->mOFactura->getComprobante() . ".pdf";
                         $arrFil["archivo2"]["path"] = $this->mOFactura->getComprobante() . ".xml";
                         $xNotif->sendMail("Factura del Recibo " . $this->mCodigoDeRecibo, "Factura del Recibo " . $this->mCodigoDeRecibo, $email, $arrFil);
                         //Enviar al Archivo mail
                         $xNotif->sendMail("Factura del Recibo " . $this->mCodigoDeRecibo, "Factura del Recibo " . $this->mCodigoDeRecibo, FACTURACION_MAIL_ARCHIVO, $arrFil);
                         //Guardar en DB
                         $this->mOFactura->setArchivar($this->mCodigoDeRecibo);
                         $xLog->add($xNotif->getMessages(), $xLog->DEVELOPER);
                         $ready = $out == OUT_PDF ? $this->mOFactura->getPDF() : $this->mOFactura->getXML();
                     }
                 } else {
                     $xLog->add("WARN\tNo hay email valido para la Factura ({$email})\r\n", $xLog->DEVELOPER);
                 }
                 $xLog->add($this->mOFactura->getMessages(), $xLog->DEVELOPER);
             }
         }
     }
     $this->mMessages .= $xLog->getMessages();
     return $ready;
 }
$clave = parametro("id", false, MQL_RAW);
$rs = array();
//AND MODO_DEBUG == true
if ($tabla != false and $clave != false) {
    $xObj = new cSAFETabla($tabla);
    if ($xObj->obj() == null) {
        $rs["message"] = "ERROR\tAl eliminar el Registro con ID {$clave} en la Tabla {$tabla}\r\n";
        $rs["error"] = true;
    } else {
        $obj = $xObj->obj();
        $key = $obj->getKey();
        $obj = new cSocios_aeconomica();
        $obj->setData($obj->query()->initByID($clave));
        $data = base64_encode(json_encode($obj->query()->getCampos()));
        $ql->setRawQuery("DELETE FROM {$tabla} WHERE {$key}='{$clave}'");
        $rs["message"] = "OK\tSe elimina el Registro con ID {$clave} en la Tabla {$tabla}\r\n";
        if (MODO_DEBUG == true) {
            $rs["message"] .= $ql->getMessages();
        }
        $rs["error"] = false;
        //guardar error
        $xLog = new cCoreLog();
        $xLog->add($rs["message"] . " {$data}", $xLog->COMMON);
        $xLog->guardar($xLog->OCat()->ELIMINAR_RAW);
        //agregar memo
    }
}
header('Content-type: application/json');
echo json_encode($rs);
//setLog(json_encode($rs));
//setLog($sql);
include_once "../core/core.init.inc.php";
$theFile = __FILE__;
$permiso = getSIPAKALPermissions($theFile);
if ($permiso === false) {
    header("location:../404.php?i=999");
}
$_SESSION["current_file"] = addslashes($theFile);
//<=====	FIN_H
//=====================================================================================================
ini_set("max_execution_time", 600);
$xHP = new cHPage("", HP_REPORT);
$mql = new cSQLListas();
$xF = new cFecha();
$query = new MQL();
$xLoc = new cLocal();
$xLog = new cCoreLog();
$xCR = new cReporteCirculoDeCredito_tipo();
$ClaveOtorgante = $xCR->getClaveDeOtorgante();
$NombreOtorgante = $xCR->getNombreOtorgante();
$ByPersona1 = "";
$ByPersona2 = "";
$ByPersona3 = "";
$FechaInicial = isset($_GET["on"]) ? $_GET["on"] : FECHA_INICIO_OPERACIONES_SISTEMA;
$FechaFinal = isset($_GET["off"]) ? $_GET["off"] : fechasys();
$toJson = false;
//parametro("beauty", false, MQL_BOOL);
$lineaJson = array();
$itemJson = array();
$FechaExtraccion = date("Ymd", strtotime($FechaFinal));
$estatus_actual = parametro("f2", false, MQL_INT);
$persona = parametro("persona", DEFAULT_SOCIO, MQL_INT);
//Mejorar
?>
<script  >
function cierrame() {	if( window.console ) window.console.log( '' ) ; 	window.close(); }
</script>
<body onLoad="setTimeout('cierrame()',60*5)">
<p class="frmTitle"><script> document.write(document.title); </script></p>
<?php 
$filter = isset($_GET["f"]) ? $_GET["f"] : false;
$table = isset($_GET["t"]) ? $_GET["t"] : false;
$msg = "";
if ($filter == false or $table == false) {
    $msg .= "ERROR\tNO SE TIENE UN DATO\r\n";
} else {
    $insql = "DELETE FROM {$table} WHERE {$filter}";
    $sqlor = "SELECT * FROM {$table} WHERE {$filter}";
    $filas = obten_filas($sqlor);
    $cadena = json_encode($filas);
    $xErr = new cCoreLog();
    $xErr->add("{$oficial} Elimino {$filter} de {$table}.\n ORIGINAL:\n{$cadena}");
    $xErr->guardar($xErr->OCat()->ELIMINAR_RAW);
    $rs = my_query($insql);
    if ($rs["stat"] == true) {
        $msg .= "OK\tSE HA ELIMINADO EL REGISTRO\r\n";
    }
}
echo JS_CLOSE;
?>
</body>
</html>
 function setPolizaPorRecibo($recibo, $generador = false)
 {
     $sucess = false;
     $QL = new MQL();
     $xLogg = new cCoreLog();
     //$arrEquivEfvo			=
     //if (GENERAR_CONTABILIDAD == true){
     $xLogg->add("=======\tGENERAR POLIZA POR RECIBO NUM {$recibo}\r\n", $xLogg->DEVELOPER);
     $xT = new cCatalogoOperacionesDeCaja();
     $centro_de_costo = DEFAULT_CENTRO_DE_COSTO;
     //($generador == GENERAR_POLIZAS_AL_CIERRE) AND
     if (setNoMenorQueCero($recibo) > 0) {
         $xRec = new cReciboDeOperacion(false, false, $recibo);
         if ($xRec->init() == true) {
             $sucess = true;
             //Obten datos del recibo para la Poliza
             $sqlRec = "SELECT\r\n\t\t\t\t\t\t\t`operaciones_recibos`.*,\r\n\t\t\t\t\t\t\t`operaciones_recibostipo`.`tipo_poliza_generada`,\r\n\t\t\t\t\t\t`operaciones_recibostipo`.`afectacion_en_flujo_efvo`\r\n\t\t\t\t\t\tFROM\r\n\t\t\t\t\t\t\t`operaciones_recibos` `operaciones_recibos`\r\n\t\t\t\t\t\t\t\tINNER JOIN `operaciones_recibostipo`\r\n\t\t\t\t\t\t\t\t`operaciones_recibostipo`\r\n\t\t\t\t\t\t\t\tON `operaciones_recibos`.`tipo_docto` =\r\n\t\t\t\t\t\t\t\t`operaciones_recibostipo`.\r\n\t\t\t\t\t\t\t\t`idoperaciones_recibostipo`\r\n\t\t\t\t\t\tWHERE\r\n\t\t\t\t\t\t\t(`operaciones_recibos`.`idoperaciones_recibos` = {$recibo})\r\n\t\t\t\t\t\tLIMIT 0,1 ";
             $dRec = obten_filas($sqlRec);
             $tipo_de_pago = $xRec->getTipoDePago();
             //Corrige los cargos de la PolizaS
             $total_poliza = 0;
             $SQLSumCargos = "SELECT SUM(monto) AS 'total' FROM contable_polizas_proforma\r\n\t\t\t\t\t\t\t\t\t\t\t\tWHERE contable_operacion = '" . TM_CARGO . "'\r\n\t\t\t\t\t\t\t\t\t\t\t\tAND numero_de_recibo={$recibo} ";
             $TMPCargos = mifila($SQLSumCargos, "total");
             $SQLSumAbonos = "SELECT SUM(monto) AS 'total' FROM contable_polizas_proforma\r\n\t\t\t\t\t\t\t\t\t\t\t\tWHERE contable_operacion = '" . TM_ABONO . "'\r\n\t\t\t\t\t\t\t\t\t\t\t\tAND numero_de_recibo={$recibo} ";
             $TMPAbonos = mifila($SQLSumAbonos, "total");
             if ($TMPCargos > $TMPAbonos) {
                 $diferencia = $TMPAbonos - $TMPCargos;
                 $diferencia = $diferencia < 0 ? $diferencia * -1 : $diferencia;
                 $total_poliza = $TMPCargos;
                 setPolizaProforma($recibo, $xT->getTipoOperacionByTipoPago($tipo_de_pago), $diferencia, 1, 1, TM_ABONO);
                 $xLogg->add("OK\tCUADRAR\tABONO\tOperacion Agregada por DESCUADRE en {$tipo_de_pago} por {$diferencia}\r\n", $xLogg->DEVELOPER);
                 //$xLogg->add( , $xLogg->DEVELOPER);
             } elseif ($TMPCargos < $TMPAbonos) {
                 $diferencia = $TMPCargos - $TMPAbonos;
                 $diferencia = $diferencia < 0 ? $diferencia * -1 : $diferencia;
                 $total_poliza = $TMPAbonos;
                 setPolizaProforma($recibo, $xT->getTipoOperacionByTipoPago($tipo_de_pago), $diferencia, 1, 1, TM_CARGO);
                 $xLogg->add("OK\tCUADRAR\tCARGOS\tOperacion Agregada por DESCUADRE en {$tipo_de_pago} por {$diferencia}\r\n", $xLogg->DEVELOPER);
             } else {
                 $total_poliza = $TMPCargos;
             }
             //tipos de Poliza 1=ingreso, 2=egreso, 3 Diario, 4=orden 5
             $xD = new cFecha(0, $xRec->getFechaDeRecibo());
             $numero_de_recibo = $recibo;
             $tipo_de_poliza = $xRec->getOTipoRecibo()->getTipoPolizaContable();
             $fecha_de_poliza = $xRec->getFechaDeRecibo();
             $ejercicio_de_poliza = $xD->anno();
             $periodo_de_poliza = $xD->mes();
             $recibo_fiscal = strlen($xRec->getReciboFiscal()) > 2 ? ";RF:" . $xRec->getReciboFiscal() : "";
             $observacion_recibo = $xRec->getObservaciones();
             $cheque = strlen($xRec->getNumeroDeCheque()) > 2 ? ";Ch:" . $xRec->getNumeroDeCheque() : "";
             $concepto_poliza = substr("R:" . $numero_de_recibo . $recibo_fiscal . $cheque . ";" . $xRec->getObservaciones(), 0, 80);
             $flujo_efectivo = $xRec->getOTipoRecibo()->getAfectacionEnEfvo();
             $socio = $xRec->getCodigoDeSocio();
             $propietario = $xRec->getCodigoDeUsuario();
             $xLogg->add("=====\tRECIBO TIPO: " . $xRec->getTipoDeRecibo() . " SUMA: " . $xRec->getTotal() . " \r\n", $xLogg->DEVELOPER);
             //------------------ Agregar Poliza
             $xPol = new cPoliza($tipo_de_poliza, false, $ejercicio_de_poliza, $periodo_de_poliza);
             $xPol->add($concepto_poliza, $fecha_de_poliza, false, 0, 0, $propietario, $centro_de_costo, $recibo);
             $numero_de_poliza = $xPol->get();
             $xLogg->add("=====\tPOLIZA NUM: {$numero_de_poliza} | TIPO: {$tipo_de_poliza} | EJERCICIO: {$ejercicio_de_poliza} | PERIODO: {$periodo_de_poliza}\r\n", $xLogg->DEVELOPER);
             $sucess = $xPol->mRaiseError == true ? false : true;
             //------------------ Leer la PROFORMA
             $sqlMvtosToPoliza = "SELECT\r\n\t\t\t\t\t`contable_polizas_proforma`.*,\r\n\t\t\t\t\t`operaciones_tipos`.*\r\n\t\t\r\n\t\t\t\t\tFROM\r\n\t\t\t\t\t`operaciones_tipos` `operaciones_tipos`\r\n\t\t\t\t\t\tINNER JOIN `contable_polizas_proforma`\r\n\t\t\t\t\t\t`contable_polizas_proforma`\r\n\t\t\t\t\t\tON `operaciones_tipos`.`idoperaciones_tipos` =\r\n\t\t\t\t\t\t`contable_polizas_proforma`.`tipo_de_mvto`\r\n\t\t\t\t\t\tAND `contable_polizas_proforma`.`numero_de_recibo` = {$numero_de_recibo}\r\n\t\t\t\t\tORDER BY\r\n\t\t\t\t\t\t`contable_polizas_proforma`.`contable_operacion` DESC,\r\n\t\t\t\t\t\t`contable_polizas_proforma`.`socio`,\r\n\t\t\t\t\t\t`contable_polizas_proforma`.`tipo_de_mvto`\t\t\t\t\r\n\t\t\t\t\t";
             if ($sucess == true) {
                 $rs = $QL->getDataRecord($sqlMvtosToPoliza);
                 foreach ($rs as $rw) {
                     $cuenta = CUENTA_DE_CUADRE;
                     $nombre = "";
                     $socio = $rw["socio"];
                     if (CONTABLE_CUENTAS_POR_SOCIO == true) {
                         $xSoc = new cSocio($socio, true);
                         $nombre = $xSoc->getNombreCompleto();
                     }
                     $documento = $rw["documento"];
                     $monto_movimiento = $rw["monto"];
                     $tipoOp = $rw["tipo_de_mvto"];
                     $tipo_movimiento = $rw["contable_operacion"];
                     $RecUsr = $rw["idusuario"];
                     $cuenta_bancaria = $rw["banco"];
                     $cargo_movimiento = 0;
                     $abono_movimiento = 0;
                     if ($tipo_movimiento == TM_CARGO) {
                         $cargo_movimiento = $monto_movimiento;
                         $abono_movimiento = 0;
                     } else {
                         $cargo_movimiento = 0;
                         $abono_movimiento = $monto_movimiento;
                     }
                     $formula = $rw["cuenta_contable"];
                     //Corregir de urgencia: OK: 06Oct2011
                     $sForms = new cValorarFormulas();
                     $cuenta = $sForms->getCuentaContable($socio, $documento, $formula, $RecUsr, $xRec->getNumeroDeCheque(), $cuenta_bancaria);
                     $xLogg->add($sForms->getMessages(), $xLogg->DEVELOPER);
                     //tipo de cuenta es Abonos a efectivo
                     if ($cuenta != "NO_CONTABILIZAR") {
                         $xCuenta = new cCuentaContable($cuenta);
                         $xCuenta->init();
                         $cuenta = $xCuenta->get();
                         //Carga los datos del Oficial
                         if ($xCuenta->getEsCuentaDeCirculante() == true) {
                             $xOf = new cSystemUser($RecUsr);
                             $xOf->init();
                             $nombre = $xOf->getNombreCompleto();
                             $xLogg->add("OK\tCUENTA_ADD\tLa Cuenta {$cuenta} de Carga por Usuario [ {$nombre} ]\r\n", $xLogg->DEVELOPER);
                         } else {
                             $xLogg->add("OK\tCUENTA\tLa Cuenta de Trabajo es {$cuenta} Originado del Socio {$socio}\r\n", $xLogg->DEVELOPER);
                         }
                         //verifica para dar de alta a la cuenta
                         $Existentes = $xCuenta->getCountCuenta();
                         if ($Existentes == false) {
                             $xLogg->add("WARN\tCUENTA_ADD\tLa Cuenta de Trabajo {$cuenta} NO EXISTE, se AGREGA\r\n", $xLogg->DEVELOPER);
                             $cuenta = $xCuenta->add($nombre);
                             if ($xCuenta->mRaiseError == true) {
                                 //$msg				.= "ERROR\tLa Cuenta de Trabajo $cuenta NO EXISTE\r\n";
                                 //$msg		= $xCuenta->getMessages();
                             }
                         }
                         $xCuenta->init();
                         $xPol->addMovimiento($cuenta, $cargo_movimiento, $abono_movimiento, "{$socio}", "{$documento}:{$tipoOp}", false, $fecha_de_poliza);
                         //$xLogg->add("WARN\tNO_CONT\tAGREGAR $cuenta, $cargo_movimiento, $abono_movimiento\r\n" , $xLogg->DEVELOPER);
                         $xLogg->add($xCuenta->getMessages(), $xLogg->DEVELOPER);
                     } else {
                         $xLogg->add("WARN\tNO_CONT\tEl Movimiento de {$socio} | {$documento} | {$tipoOp} de Monto {$monto_movimiento} se OMITE\r\n", $xLogg->DEVELOPER);
                     }
                 }
                 $xPol->setFinalizar();
             }
             //sucess
             $xLogg->add($xPol->getMessages(), $xLogg->DEVELOPER);
             $this->mIDDePoliza = $xPol->getCodigo();
         }
     }
     //END VALUE.- GENERAR AL FINAL
     //}		//END VALUE.- GENERAR CONTABILIDAD
     $this->mMessages .= $xLogg->getMessages();
     return $xLogg->getMessages();
 }
 function getValidacion($out = OUT_TXT, $corregir = false)
 {
     $txt = "";
     $cTipo = new cTipos();
     $ready = true;
     $xLog = new cCoreLog();
     $EsOperable = true;
     $xLoc = new cLocal();
     if ($this->mSocioIniciado == false) {
         $this->init();
     }
     //Validar GrupoSolidario
     if ($this->getClaveDeGrupo() > DEFAULT_GRUPO) {
         $xGrupo = new cGrupo($this->getClaveDeGrupo());
         if ($xGrupo->init() == false) {
             $ready = false;
             $xLog->add("ERROR\t" . $this->mCodigo . "\tGRUPO\tEl Grupo " . $this->mGrupoAsociado . " No Existe \r\n");
             if ($corregir == true) {
                 $xGrupo->add("_GRUPO_NO_EXISTENTE_", "_GRUPO_EN_ALTA_POR_CORRECION_SOCIO_" . $this->mCodigo, $this->mCodigo, DEFAULT_SOCIO, 10, 1, $this->mGrupoAsociado);
                 $xLog->add("WARN\t" . $this->mCodigo . "\tGRUPO\tEl Grupo " . $this->mGrupoAsociado . " Ha sido AGREGADO \r\n");
                 $xLog->add($xGrupo->getMessages(), $xLog->DEVELOPER);
             }
         }
     }
     //Validar Caja Local
     if (SISTEMA_CAJASLOCALES_ACTIVA == true) {
         $xCL = new cCajaLocal();
         if ($xCL->init() == false) {
             $xLog->add("ERROR\t" . $this->mCodigo . "\tCAJALOCAL\tLa Caja Local " . $this->mCajaLocal . " No Existe \r\n");
             $ready = false;
         }
     }
     //Validar Dependencias
     if ($this->getClaveDeEmpresa() != DEFAULT_EMPRESA) {
         $xEmp = new cEmpresas($this->getClaveDeEmpresa());
         if ($xEmp->init() == false) {
             $xLog->add("ERROR\t" . $this->mCodigo . "\tDEPENDENCIA_E\tLa Dependencia " . $this->mDependencia . " No Existe \r\n");
             $xLog->add($xEmp->getMessages(), $xLog->DEVELOPER);
             $ready = false;
         }
     }
     //Validar propietario
     if ($this->getClaveDeUsuario() != DEFAULT_USER) {
         $xUsr = new cSystemUser($this->getClaveDeUsuario());
         if ($xUsr->init() == false) {
             $xLog->add("ERROR\t" . $this->mCodigo . "\tPROPIETARIO\tEl Propietario # " . $this->mPropietario . " NO EXISTE \r\n");
             if ($corregir == true) {
                 $xUsr->add("usr" . $this->mPropietario, "", 2, "USUARIO", "AGREGADO", "EN_VERIFICACION", "", false, "baja", "", false, $this->mPropietario);
             }
             $xLog->add($xUsr->getMessages(), $xLog->DEVELOPER);
         }
     }
     //Validar persona Moral
     if ($this->getEsPersonaFisica() == false) {
         if ($this->getORepresentanteLegal() == null) {
             $xLog->add("ERROR\t" . $this->mCodigo . "\tREP_LEGAL\tEl representante legal NO EXISTE \r\n");
             $ready = false;
             $EsOperable = false;
         }
     }
     //Validar Tipo de Ingreso
     $xT = new cPersonasTipoDeIngreso($this->mTipoDeIngreso);
     if ($xT->init() == false) {
         $txt .= "ERROR\t" . $this->mCodigo . "\tTIPO_INGRESO\tLa Dependencia " . $this->mTipoDeIngreso . " No Existe \r\n";
         $ready = false;
     }
     //Validar Actividad Economica
     if ($this->getOActividadEconomica() == null) {
         $ready = false;
         $EsOperable = false;
         $xLog->add("ERROR\t" . $this->mCodigo . "\tACTIVIDAD\tEL Socio NO tiene Registrado alguna ACTIVIDAD ECONOMICA \r\n");
     }
     //Validar Vivienda
     if ($this->getODomicilio() == null) {
         $ready = false;
         $EsOperable = false;
         $xLog->add("ERROR\t" . $this->mCodigo . "\tVIVIENDA\tEL Socio NO tiene Registrado algun DOMICILIO Valido \r\n");
         if ($corregir == true) {
             $codigo_postal = $xLoc->DomicilioCodigoPostal();
             $this->addVivienda("DESCONOCIDO", "POR_REGISTRAR", $codigo_postal);
         }
     } else {
         //TODO: 2014/01/12 Terminar Validacion de codigo postal y busqueda por domicilio aternativo
     }
     //Valida el codigo postal
     /*$sqlDV		= "SELECT idsocios_vivienda, socio_numero, tipo_regimen, calle, numero_exterior, numero_interior, colonia, localidad, estado, municipio, telefono_residencial, telefono_movil, tiempo_residencia, referencia, idusuario, principal, tipo_domicilio, codigo_postal, fecha_alta, codigo, sucursal, eacp, coordenadas_gps
     					    FROM socios_vivienda
     						WHERE socio_numero = " . $this->mCodigo . " ";
     		$rsV		= mysql_query($sqlDV, cnnGeneral() );
     		if($corregir == true){
     			while($rwV	= mysql_fetch_array($rsV) ){
     				$cpostal	= $cTipo->cInt($rwV["codigo_postal"]);
     				$clave		= $rwV["idsocios_vivienda"];
     				if ( strlen($cpostal) < DIGITOS_DE_CODIGO_POSTAL ){
     					$xCl		= new cCajaLocal( $this->mCajaLocal );
     					$xCl->init();
     					$DCL		= $xCl->getDatosInArray();
     					$codigo_postal	= $DCL["codigo_postal"];
     					$sqlUV = "UPDATE socios_vivienda
     						    SET codigo_postal='$codigo_postal'
     						    WHERE idsocios_vivienda=$clave";
     					my_query($sqlUV);
     					$txt	.= "WARN\tCORREC_VIVIENDA\tSe Actualiza el Codigo postal de [$cpostal] a [$codigo_postal] \r\n";
     				}
     			}
     		}*/
     //validar fecha de Ingreso
     /*$mDA		= date("Y", strtotime($this->mFechaDeIngreso) );
     		$mMA		= date("m", strtotime($this->mFechaDeIngreso) );
     		$mAA		= date("d", strtotime($this->mFechaDeIngreso) );
     		$mFValida	= checkdate($mMA, $mAA, $mDA  );
     		if ( $mFValida == false ){
     			$mFSustituta	= EACP_FECHA_DE_CONSTITUCION;
     			$sqlNFI		= "UPDATE socios_general
     							    SET fechaalta=(SELECT fecha_operacion FROM operaciones_recibos WHERE numero_socio = " . $this->mCodigo . " LIMIT 0,1)
     							    WHERE  codigo= " . $this->mCodigo . " ";
     			my_query($sqlNFI);
     			$txt	.= "ERROR\t" . $this->mCodigo . "\tFINGRESO\tLa fecha de Alta no es valida, se Actualiza a la Primera Operacion\r\n";
     
     		}*/
     //Validar modulo de AML
     if (MODULO_AML_ACTIVADO == true) {
         $xAml = new cAMLPersonas($this->getCodigo());
         $xAml->init($this->getCodigo(), $this->getDatosInArray());
         $NRiesgo = $xAml->setAnalizarNivelDeRiesgo();
         if ($this->getNivelDeRiesgo() != $NRiesgo) {
             $ready = false;
             $EsOperable = false;
             $xLog->add("ERROR\t" . $this->mCodigo . "\tRiesgo\tEl riesgo({$NRiesgo}) es diferente al actual(" . $this->getNivelDeRiesgo() . ") \r\n");
             if ($corregir == true) {
                 $this->setActualizarNivelDeRiesgo($NRiesgo, $xAml->getMessages());
             }
         }
         $xLog->add($xAml->getMessages(), $xLog->DEVELOPER);
         //Perfil Transaccional
         $xTrans = new cAMLPersonas_PerfilTransaccional($this->getCodigo());
         if ($xTrans->getNumeroEntradas() <= 0) {
             $ready = false;
             $EsOperable = false;
             $xLog->add("ERROR\t" . $this->mCodigo . "\tPerfilT\tNo existe perfil transaccional \r\n");
         }
     }
     return $xLog->getMessages($out);
 }
 function setEditar($cuenta, $cargo = false, $abono = false, $referencia = false, $concepto = false, $diario = DEFAULT_CONTABLE_DIARIO_MVTOS)
 {
     $xLog = new cCoreLog();
     //,$NumMvto = false, $Fecha = false
     $xCta = new cCuentaContableEsquema($cuenta);
     $cuenta = $xCta->CUENTA;
     $rebuild = false;
     if ($cargo !== false) {
         $cargo = setNoMenorQueCero($cargo);
         if ($cargo != $this->mCargo) {
             $rebuild = true;
             $this->mCargo = $cargo;
             $this->mAbono = 0;
         }
     }
     $referencia = $referencia == false ? $this->mObj->referencia()->v(OUT_TXT) : $referencia;
     $concepto = $concepto == false ? $this->mObj->concepto()->v(OUT_TXT) : $concepto;
     if ($abono !== false) {
         $abono = setNoMenorQueCero($abono);
         if ($abono != $this->mAbono) {
             $rebuild = true;
             $this->mAbono = $abono;
             $this->mCargo = 0;
         }
     }
     if ($this->mNumeroCuenta != $cuenta) {
         $rebuild = true;
         $this->mNumeroCuenta = $cuenta;
     }
     //========================
     if ($rebuild == true) {
         //eliminar
         $this->setEliminar();
         //agregar
         $xPol = new cPoliza($this->mTipoDePoliza);
         $xPol->setPorCodigo($this->getCodigoDePoliza());
         $xPol->addMovimiento($this->mNumeroCuenta, $this->mCargo, $this->mAbono, $referencia, $concepto, $this->mNumeroDeMvto);
         $xLog->add($xPol->getMessages(), $xLog->DEVELOPER);
     } else {
         $sql = "UPDATE contable_movimientos\n\t\t\tSET referencia='{$referencia}', concepto='{$concepto}' \n\t\t\tWHERE clave_unica= " . $this->mCodigoUnico;
         $ql = new MQL();
         $ql->setRawQuery($sql);
     }
     $this->mMessages .= $xLog->getMessages();
     return $xLog->getMessages();
 }
 private function aceptado($valor, $aceptados)
 {
     $aceptado = true;
     $operandos = array("=", ">", "<", "!=");
     $xLog = new cCoreLog();
     $xLog->add("WARN\tValores Aceptados {$aceptados}. " . $this->mNombre, $xLog->DEVELOPER);
     if (trim($aceptados) == "" or trim($aceptados) == "*") {
         $xLog->add("WARN\tTodos los valores Aceptados {$aceptados}. " . $this->mNombre, $xLog->DEVELOPER);
     } else {
         //buscar separador
         if (strpos($aceptados, "&") !== false) {
             //separar
             $arr = explode("&", $aceptados);
             foreach ($arr as $idx => $vals) {
                 $xLog->add("WARN\tSeparar {$aceptados} y comparar {$valor} con {$vals}. " . $this->mNombre, $xLog->DEVELOPER);
                 $aceptado = $this->testVal($vals, $valor) == false ? false : $aceptado;
             }
         } else {
             if (strpos($aceptados, "AND") !== false) {
                 //separar
                 $arr = explode("AND", $aceptados);
                 foreach ($arr as $idx => $vals) {
                     $xLog->add("WARN\tSeparar con AND {$aceptados} y comparar {$valor} con {$vals}. " . $this->mNombre, $xLog->DEVELOPER);
                     $aceptado = $this->testVal($vals, $valor) == false ? false : $aceptado;
                 }
             } else {
                 //buscar operandos
                 $aceptado = $this->testVal($aceptados, $valor);
                 $xLog->add("WARN\tComparar {$aceptado} con {$valor}. " . $this->mNombre, $xLog->DEVELOPER);
             }
         }
     }
     //$this->mMessages	.= $xLog->getMessages();
     return $aceptado;
 }
 $xF = new cFecha();
 if ($tabla != "" and $filtro != "") {
     $rs = false;
     $vars = $_REQUEST;
     //var_dump($vars);
     //$DFiltro	= explode("=", $filtro);
     $xData = new cSAFETabla($tabla);
     $q = $xData->obj()->query();
     $datos = $q->getRow($filtro);
     $q->setData($datos);
     $campos = $q->getCampos();
     $actualizar = false;
     $sqlor = "SELECT * FROM {$tabla} WHERE {$filtro}";
     $filas = obten_filas($sqlor);
     $cadena = json_encode($filas);
     $xErr = new cCoreLog();
     $xErr->add("{$oficial} Editar {$tabla} como {$filtro}.\n ORIGINAL:\n {$cadena}");
     $xErr->guardar($xErr->OCat()->EDICION_RAW);
     foreach ($vars as $k => $v) {
         $campo = substr($k, 1);
         if (isset($campos[$campo])) {
             if ($campos[$campo]["V"] == $v) {
                 $msg .= "OMITIR_ACTUALIZAR: {$campo}, ";
             } else {
                 if ($campos[$campo]["T"] == "DATE") {
                     $v = $xF->getFechaISO($v);
                 }
                 $msg .= "ACTUALIZAR : {$campo} DE " . $campos[$campo]["V"] . " A {$v},";
                 $campos[$campo]["V"] = $v;
                 //echo "" . $campos[$campo]["V"] . " === "  . $v . "\n";
                 $actualizar = true;
 function setReestructurarSDPM_Planes($SoloConSaldos = false, $creditoFiltrado = false, $forzarTodos = false, $fechaCorte = false, $fechaInicial = false, $EliminarTodo = true)
 {
     $msg = "";
     $xLog = new cCoreLog();
     $xF = new cFecha();
     $ql = new MQL();
     $creditoFiltrado = setNoMenorQueCero($creditoFiltrado);
     if ($creditoFiltrado > DEFAULT_CREDITO) {
         $xLog->add("Socio\tCredito\tFecha\tMonto\tSaldo\tDias\tOperacion\tEstatus\tInteres\tMoratorios\r\n");
     }
     $fechaCorte = $xF->getFechaISO($fechaCorte);
     $fechaInicial = $fechaInicial == false ? EACP_FECHA_DE_CONSTITUCION : $fechaInicial;
     $wCredito1 = $creditoFiltrado > DEFAULT_CREDITO ? "  `creditos_mvtos_asdpm_planes`.`documento` = {$creditoFiltrado} " : " `documento` > 0";
     $wCredito2 = $creditoFiltrado > DEFAULT_CREDITO ? "  numero_de_credito = {$creditoFiltrado} " : " numero_de_credito > 0 ";
     $ByRTM = $creditoFiltrado > DEFAULT_CREDITO ? " " : " SQL_CACHE ";
     $wFecha1 = " AND (fecha >='{$fechaInicial}' AND fecha <='{$fechaCorte}' ) ";
     $wFecha2 = " AND (`fecha_actual` >= '{$fechaInicial}' AND `fecha_actual`<='{$fechaCorte}' ) ";
     $sql = "SELECT {$ByRTM} `creditos_mvtos_asdpm_planes`.* FROM `creditos_mvtos_asdpm_planes` WHERE {$wCredito1} {$wFecha1} ";
     $rs = $ql->getDataRecord($sql);
     if ($EliminarTodo == true) {
         $DAction = my_query("DELETE FROM creditos_sdpm_historico WHERE {$wCredito2} {$wFecha2}");
     }
     $saldo = 0;
     $creditoA = 0;
     $xT = new cTipos();
     $xF = new cFecha();
     $FECHA_DE_ULTIMO_PAGO = EACP_FECHA_DE_CONSTITUCION;
     $CREDITO_SALDO_ANTERIOR = 0;
     $MvtoAnterior = OPERACION_CLAVE_MINISTRACION;
     $ESTADO_ACTUAL = CREDITO_ESTADO_VIGENTE;
     $DIVISOR_DE_INTERESES = EACP_DIAS_INTERES;
     $DCred = array();
     $IsCredNew = true;
     $xCred = null;
     foreach ($rs as $rw) {
         $socio = $xT->cInt($rw["socio"]);
         $credito = $xT->cInt($rw["documento"]);
         $operacion = $xT->cInt($rw["operacion"]);
         $periodo = $xT->cInt($rw["periodo"]);
         $afectacion = $rw["afectacion"];
         $monto = $xT->cFloat($rw["monto"], 2);
         $fecha = $rw["fecha"];
         $nota = "";
         $dias_tolerados = DIAS_PAGO_VARIOS;
         $IsCredNew = true;
         if ($creditoA != $credito) {
             $saldo = 0;
             $FECHA_DE_ULTIMO_PAGO = $fecha;
             $ESTADO_ACTUAL = CREDITO_ESTADO_VIGENTE;
             $xCred = new cCredito($credito, $socio);
             $xCred->init();
             $DCred = $xCred->getDatosDeCredito();
             $CREDITO_SALDO_ANTERIOR = 0;
             $dias_tolerados = $xCred->getOPeriocidad()->getDiasToleradosEnVencer();
             //si es Ministracion
             if ($MvtoAnterior == OPERACION_CLAVE_MINISTRACION) {
                 $FECHA_DE_ULTIMO_PAGO = $xCred->getFechaDeMinistracion();
             }
             $xLog->add("======\t\tINIT-CREDITO : {$credito}\r\n");
             $letras_en_mora = array();
             if ($EliminarTodo == false) {
                 my_query("DELETE FROM creditos_sdpm_historico WHERE numero_de_credito = {$credito} {$wFecha2}");
             }
         } else {
             $IsCredNew = false;
         }
         $interes = 0;
         $moratorio = 0;
         if ($operacion == OPERACION_CLAVE_PLAN_CAPITAL and $monto > 0) {
             if ($xF->getInt($fecha) <= $xF->getInt($fechaCorte)) {
                 $letras_en_mora[$periodo][SYS_MONTO] = $monto;
                 $letras_en_mora[$periodo][SYS_FECHA] = $fecha;
                 $letras_en_mora[$periodo][SYS_DEFAULT] = $fecha;
                 $letras_en_mora[$periodo][SYS_INTERES_MORATORIO] = $monto * $xCred->getTasaDeMora() / EACP_DIAS_INTERES;
                 //TODO: Formular en SQL.- tasa mora para planes
                 $xLog->add("WARN\tAgregando letra en mora por {$monto} del periodo {$periodo} de {$fecha}\r\n", $xLog->DEVELOPER);
             }
         }
         if ($operacion == OPERACION_CLAVE_PLAN_CAPITAL and $monto > 0) {
             if (!isset($FECHA_DE_COMPROMISO)) {
                 $FECHA_DE_COMPROMISO = $fecha;
                 $xLog->add("WARN\tAgregando fecha de primer atraso a {$fecha} del pago {$periodo}\r\n", $xLog->DEVELOPER);
                 //$xLog->add( , $xLog->DEVELOPER);
             }
         }
         if ($operacion == OPERACION_CLAVE_PLAN_INTERES or $operacion == OPERACION_CLAVE_PAGO_INTERES) {
             $interes = $monto;
         } else {
             $interes = 0;
         }
         //XXX: Checar
         $saldo_calculado = 0;
         if ($operacion == OPERACION_CLAVE_PAGO_CAPITAL or $operacion == OPERACION_CLAVE_MINISTRACION) {
             $dias_transcurridos = $xF->setRestarFechas($fecha, $FECHA_DE_ULTIMO_PAGO);
             $saldo_calculado = $saldo * $dias_transcurridos;
             $saldo += $monto * $afectacion;
             $FECHA_DE_ULTIMO_PAGO = $fecha;
             //disminuye de la letra
             if ($operacion == OPERACION_CLAVE_PAGO_CAPITAL) {
                 if (isset($letras_en_mora[$periodo])) {
                     $letras_en_mora[$periodo][SYS_MONTO] -= $monto;
                     $xLog->add("WARN\t{$periodo}\tDisminuir base de mora por {$monto}\r\n", $xLog->DEVELOPER);
                     if (setNoMenorQueCero($letras_en_mora[$periodo][SYS_MONTO]) <= 0) {
                         unset($letras_en_mora[$periodo]);
                     }
                 }
             }
         } else {
             $monto = 0;
         }
         if ($operacion == OPERACION_CLAVE_FIN_DE_MES) {
             $moratorio = 0;
             //if(MODO_DEBUG == true){ $msg	.= "WARN\tFIN DE MES $operacion\r\n"; }
             //Calcular moratorios
             //setLog($letras_en_mora);
             foreach ($letras_en_mora as $id => $atrasos) {
                 $fecha_letra = $atrasos[SYS_DEFAULT];
                 $xLog->add("WARN\t{$periodo}\t{$id} {$fecha_letra}\r\n", $xLog->DEVELOPER);
                 if ($xF->getInt($fecha) >= $xF->getInt($fecha_letra)) {
                     $dias_mora = $xF->setRestarFechas($fecha, $fecha_letra);
                     $xLog->add("WARN\t{$periodo}\tDias de Mora del periodo {$id} por dias {$dias_mora}\r\n", $xLog->DEVELOPER);
                     $moratorio += $atrasos[SYS_INTERES_MORATORIO] * $dias_mora;
                     $letras_en_mora[$id][SYS_DEFAULT] = $fecha;
                 }
             }
         }
         if (isset($FECHA_DE_COMPROMISO)) {
             $dias_de_atraso = $xF->setRestarFechas($fecha, $FECHA_DE_COMPROMISO);
             if ($dias_de_atraso > 1) {
                 $ESTADO_ACTUAL = CREDITO_ESTADO_MOROSO;
             }
             if ($dias_de_atraso > $dias_tolerados) {
                 $ESTADO_ACTUAL = CREDITO_ESTADO_VENCIDO;
                 $xLog->add("WARN\t{$periodo}\tPeriodo a Vencido por {$dias_de_atraso}|{$dias_tolerados}\r\n", $xLog->DEVELOPER);
             }
         }
         if ($creditoFiltrado > DEFAULT_CREDITO) {
             $xLog->add("{$socio}\t{$credito}\t{$fecha}\t{$monto}\t{$saldo}\t{$dias_transcurridos}\t{$operacion}\t{$ESTADO_ACTUAL}\t{$interes}\t{$moratorio}\t{$nota}\r\n");
         }
         if ($xF->getInt($fecha) <= $xF->getInt(SYS_FECHA_DE_MIGRACION)) {
             $interes = 0;
             $moratorio = 0;
             $xLog->add("WARN\tOMITIR Interes {$interes} y MORA por {$moratorio} por estar antes de la migracion {$fecha}\r\n", $xLog->DEVELOPER);
         }
         //agregando letras en Intereses en mora
         $mm = $monto + $interes + $moratorio;
         if ($xF->getInt($fecha) <= $xF->getInt($fechaCorte) and $mm > 0) {
             $xCred->addSDPM($interes, $moratorio, $FECHA_DE_ULTIMO_PAGO, $saldo, $ESTADO_ACTUAL, $fecha, $operacion, $saldo_calculado, $periodo);
         }
         if ($saldo <= TOLERANCIA_SALDOS) {
             $xLog->add("======\t\tEND-CREDITO : {$credito}\r\n");
         }
         $creditoA = $credito;
         $CREDITO_SALDO_ANTERIOR = $saldo;
         $MvtoAnterior = $operacion;
     }
     return $xLog->getMessages();
 }
$_SESSION["current_file"] = addslashes($theFile);
//<=====	FIN_H
$iduser = $_SESSION["log_id"];
//=====================================================================================================
$xHP = new cHPage("TR.PROCESAMIENTO DE PAGO. PART 01", HP_FORM);
$xLng = new cLang();
$params = isset($_GET["p"]) ? $_GET["p"] : false;
$jxc = new TinyAjax();
$xT = new cTipos();
$xSQL = new cSQLListas();
$xF = new cFecha();
$ql = new MQL();
$capital_original_de_letra = 0;
//Monto original de capital de la letra
$msg = "";
$xLog = new cCoreLog();
function jsaActualizarLetra($persona, $credito, $letra, $monto)
{
    $NLetra = $letra + 1;
    $xCred = new cCredito($credito, $persona);
    $xCred->init();
    if ($xCred->isAFinalDePlazo() == false) {
        if ($NLetra < $xCred->getPagosAutorizados()) {
            $xPlan = new cPlanDePagos();
            $xPlan->initByCredito($credito);
            $xPlan->setOperarCapital($NLetra, "+{$monto}");
        }
    }
}
function jsaAmortizarLetras($persona, $credito, $letra, $amortizable)
{
 function setProcesarProgramacion($id, $arrVars = false, $data = false, $fecha = false)
 {
     $xF = new cFecha();
     $xT = new cTipos();
     $xLog = new cCoreLog();
     $arrVars = $arrVars == false ? $this->mArrVars : $arrVars;
     //idprograma, nombre_del_aviso, forma_de_creacion, programacion, destinatarios, microformato, tipo_de_medios, intent_check, intent_command
     $sql = "SELECT *\tFROM sistema_programacion_de_avisos WHERE idprograma={$id} LIMIT 0,1";
     $d = $data == false ? obten_filas($sql) : $data;
     $mOb = new cSistema_programacion_de_avisos();
     $mOb->setData($d);
     $emails = array();
     $tels = array();
     $enviar = false;
     $fecha = $fecha == false ? fechasys() : $fecha;
     $nombredia = $xF->getDayName();
     $diadelmes = date("j", $xF->getInt());
     $EnviarNota = true;
     $EnviarMail = true;
     $EnviarSMS = false;
     $xLoc = new cLocal();
     //procesar cuerpo del contenido
     $arrVars["fecha"] = !isset($arrVars["fecha"]) ? $fecha : $arrVars["fecha"];
     $arrVars["fecha_dia_siguiente"] = $xF->setSumarDias(1, $fecha);
     $arrVars["fecha_inicio_de_semana"] = $xF->getFechaDeInicioDeSemana($fecha);
     $arrVars["fecha_inicio_de_mes"] = $xF->getDiaInicial($fecha);
     //Dia de la semana inicial
     $arrVars["hora"] = date("H");
     $arrVars["usuario"] = $xLoc->getNombreUsuario();
     $arrVars["clave_de_usuario"] = !isset($arrVars["clave_de_usuario"]) ? getUsuarioActual() : $arrVars["clave_de_usuario"];
     //interpretar DIA
     if (strtoupper($mOb->forma_de_creacion()->v()) == SYS_ALERTA_POR_EVENTO) {
         $enviar = true;
     } else {
         //if($mOb->programacion())
         $programacion = strtoupper($mOb->programacion()->v());
         $periodo = explode(":", $programacion);
         //INTERPRETAR DIA
         if ($periodo[0] == "PROGRAMACION_SEMANAL") {
             if (strpos($nombredia, $programacion) !== false) {
                 $enviar = true;
             }
         } else {
             if ($periodo[0] == "PROGRAMACION_DIARIA") {
                 $enviar = true;
             } else {
                 if (isset($periodo[1])) {
                     $dias = explode(",", $periodo[1]);
                     foreach ($dias as $dias => $iddia) {
                         $mes = $xF->mes();
                         $anno = $xF->anno();
                         if (date("Y-m-d", strtotime("{$anno}-{$mes}-{$iddia}")) == $fecha) {
                             $enviar = true;
                         }
                     }
                 }
             }
         }
     }
     //1.- extraer emails
     $destinatarios = explode("|", $mOb->destinatarios()->v());
     foreach ($destinatarios as $key => $cnt) {
         if (trim($cnt) != "") {
             //1.1 Desfragmentar destinos
             $DS = explode(":", $cnt);
             $mdestino = isset($DS[0]) ? strtoupper($DS[0]) : "";
             switch ($mdestino) {
                 case "OFICIALES":
                     if (isset($DS[1])) {
                         $oficiales = explode(",", $DS[1]);
                         foreach ($oficiales as $ofc => $ofkey) {
                             $xOf = new cOficial($ofkey);
                             $xOf->init();
                             $mail = $xOf->getEmail();
                             $emails[] = $mail;
                             $xLog->add("OK\tOFICIAL\tAgregar mail {$mail}  \r\n", $xLog->DEVELOPER);
                         }
                     }
                     break;
                 case "EMPRESAS":
                     if (isset($DS[1])) {
                         $empresas = explode(",", $DS[1]);
                         foreach ($empresas as $emp => $empkey) {
                             $xEmp = new cEmpresas($empkey);
                             $xEmp->init();
                             //$mail		= $xEmp->getEmailsDeEnvio();
                             //$emails[]	= $mail;
                             $emails = array_merge($emails, $xEmp->getEmailsDeEnvio());
                             $xLog->add("OK\tEMPRESAS\tAgregar mail de la empresa {$empkey}  \r\n", $xLog->DEVELOPER);
                         }
                     }
                     break;
                 case "PERSONAS":
                     if (isset($DS[1])) {
                         $personas = explode(",", $DS[1]);
                         foreach ($personas as $ofc => $ofkey) {
                             $xSoc = new cSocio($ofkey);
                             $xSoc->init();
                             $mail = $xSoc->getCorreoElectronico();
                             $emails[] = $mail;
                             $xLog->add("OK\tPERSONA\tAgregar mail {$mail}  \r\n", $xLog->DEVELOPER);
                             if ($xT->cNumeroTelefonico($xSoc->getTelefonoPrincipal()) != false) {
                                 $EnviarSMS = true;
                                 $tels[] = $xT->cNumeroTelefonico($xSoc->getTelefonoPrincipal());
                             }
                         }
                     }
                     break;
                 case "CORREO":
                     if (isset($DS[1])) {
                         $personas = explode(",", $DS[1]);
                         foreach ($personas as $ofc => $ofkey) {
                             if (filter_var($ofkey, FILTER_VALIDATE_EMAIL)) {
                                 $emails[] = $ofkey;
                             }
                             $xLog->add("OK\tCORREO\tAgregar mail {$ofkey}  \r\n", $xLog->DEVELOPER);
                         }
                     }
                     break;
             }
             //1.1.1 Validar oficiales, empresas, personas
             //if(strpos("OFICIALES:", $needle))
         }
     }
     $this->mMessages .= $xLog->getMessages();
     $texto = $mOb->microformato()->v();
     foreach ($arrVars as $variable => $valor) {
         $texto = str_replace("{" . $variable . "}", $valor, $texto);
     }
     if ($enviar == true) {
         $url = $mOb->intent_command()->v(OUT_TXT);
         //2 procesado del comando
         if (trim($url) == "") {
             $titulo = strtoupper($mOb->nombre_del_aviso()->v());
             $xNot = new cNotificaciones();
             //enviar mail normal
             if ($EnviarSMS == true) {
                 foreach ($tels as $pitm => $ptel) {
                     $xNot->sendSMS($ptel, $texto);
                 }
             }
             if ($EnviarMail == true) {
                 foreach ($emails as $itm => $pmail) {
                     $xNot->sendMail($titulo, $texto, $pmail);
                 }
             }
         } else {
             //execute command
             //rpttesoreria/corte_de_caja.rpt.php?on=2014-5-3&off=2014-5-3&cajero=todas&dependencia=todas
             $smail = "";
             $xHO = new cHObject();
             foreach ($arrVars as $variable => $valor) {
                 $url = str_replace("{" . $variable . "}", $valor, $url);
             }
             foreach ($emails as $id => $rmail) {
                 //$smail	.= ($smail == "") ? "email$id=$rmail" : "&email$id=$rmail";
                 $smail .= "&email{$id}={$rmail}";
             }
             //Iniciar session en contexto &on=$fecha&off=$fecha
             $xSysUser = new cSystemUser();
             $xSysUser->init();
             $url = $url . $smail . "&ctx=" . $xSysUser->getCTX();
             if (MODO_DEBUG == true) {
                 setLog($url);
             }
             $xHO->navigate($url);
         }
     } else {
         $this->mMessages .= "OK\tNo e envia el reporte\r\n";
     }
     setLog($this->mMessages);
     $this->mObProgAv = $mOb;
     //return $this->mObProgAv;
 }