/**
  * Funcion que Busca un Fecha por el Numero de Pagos por el que debe llevar
  * @param integer	$pago_buscado	Numero de pago del cual se debe buscar la fecha
  * @param array 	$aD 			establece los parametros por array
  */
 function getFechaEstimadaPorNumeroDePago($pago_buscado, $aD = false)
 {
     if ($this->mCreditoInicializado == false) {
         $this->initCredito();
     }
     $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;
     $dias_tolerancia_no_pago = $this->mToleranciaEnDiasParaPago;
     $tipo_de_pago = $this->mTipoDePago;
     $msg = "";
     $ql = new MQL();
     $fecha_devuelta = $fecha_vencimiento;
     if ($tipo_de_pago == CREDITO_TIPO_PAGO_UNICO or $tipo_de_pago == CREDITO_TIPO_PERIOCIDAD_FINAL_DE_PLAZO) {
         $msg .= "TIPO.PAG\tEl Tipo de pago es UNICO, se devuelve la fecha de Vencimiento: {$fecha_vencimiento}\r\n";
         $fecha_devuelta = $fecha_vencimiento;
     } else {
         //(is_array($aD) AND isset($aD[]))
         $data = $ql->getDataRow("SELECT * FROM historial_de_pagos WHERE credito={$credito} AND periodo={$pago_buscado} LIMIT 0,1");
         if (isset($data["fecha"])) {
             $fecha_devuelta = $data["fecha"];
         } else {
             //10*15 - 200 = 50
             //HACK se omite un periodo para Interpretarse como Primer Dia de Abono
             $dias_de_tolerancia = $dias_autorizados - ($pagos_autorizados - 1) * $periocidad_pago;
             $fecha_primer_abono = sumardias($fecha_ministracion, $dias_de_tolerancia);
             $msg .= "{$socio}\t{$credito}\tDIAS_DE_TOLERANCIA:\t{$dias_de_tolerancia}\r\n";
             $msg .= "{$socio}\t{$credito}\tFECHA_PRIMER_ABONO:\t{$fecha_primer_abono}\r\n";
             $dia_1_ab = PQ_DIA_PRIMERA_QUINCENA;
             $dia_2_ab = PQ_DIA_SEGUNDA_QUINCENA;
             $dvparcial = DIAS_PAGO_VARIOS;
             $fecha_de_pago = $fecha_primer_abono;
             //filtra solo pagos Quincenales
             if ($periocidad_pago != CREDITO_TIPO_PERIOCIDAD_QUINCENAL) {
                 //convierte la Fecha de Vencimiento al dia de pago Predeterminado
                 $dia_1_ab = date("d", strtotime($fecha_vencimiento));
                 //$msg				.= "$socio\t$credito\tPAGOS_NO_QUINCENALES:\t$periocidad_pago\r\n";
             }
             $msg .= "{$socio}\t{$credito}\tPERIODO\tFECHA_REFERENCIA\tFECHA_PAGO\r\n";
             if ($this->mCreditoInicializado == true) {
                 for ($i = 1; $i <= $pagos_autorizados; $i++) {
                     if ($i == 1) {
                         $fecha_de_referencia = $fecha_primer_abono;
                     } else {
                         $fecha_de_referencia = $fecha_de_pago;
                     }
                     // ------------------------------------ Obtiene la Fecha de Pago ----------------------------------------------
                     if ($periocidad_pago <= 7) {
                         //Obtiene el Dia de Ref + dias del periodo
                         if ($i == 1) {
                             //Si es primer pago, es el dia de abono
                             $fecha_de_pago = $fecha_de_referencia;
                         } else {
                             $fecha_de_pago = sumardias($fecha_de_referencia, $periocidad_pago);
                         }
                         $fecha_de_pago = set_no_festivo($fecha_de_pago);
                     } elseif ($periocidad_pago >= 15 && $periocidad_pago <= 29) {
                         //Obtiene el Dia de Ref + dias del periodo
                         if ($i == 1) {
                             //Si es primer pago, es el dia de abono
                             $fecha_de_pago = $fecha_de_referencia;
                         } else {
                             $fecha_de_pago = sumardias($fecha_de_referencia, $periocidad_pago);
                         }
                         $fecha_de_pago = set_dia_abono_quincenal($fecha_de_pago, $dia_1_ab, $dia_2_ab);
                         $fecha_de_pago = set_no_festivo($fecha_de_pago);
                         // Tratamiento Mesual o mas, si es menor a la 1era Quincena, baja al dia dos, si no sube un mes al dia dos...
                     } elseif ($periocidad_pago >= 30 && $periocidad_pago < 60) {
                         //Obtiene el Dia de Ref + dias del periodo
                         if ($i == 1) {
                             //Si es primer pago, es el dia de abono
                             $fecha_de_pago = $fecha_de_referencia;
                         } else {
                             $fecha_de_pago = sumardias($fecha_de_referencia, $periocidad_pago);
                         }
                         $fecha_de_pago = set_dia_abono_mensual($fecha_de_pago, $dia_1_ab);
                         $fecha_de_pago = set_no_festivo($fecha_de_pago);
                     } elseif ($periocidad_pago >= 60 && $periocidad_pago < 360) {
                         //Obtiene el Dia de Ref + dias del periodo
                         if ($i == 1) {
                             //Si es primer pago, es el dia de abono
                             $fecha_de_pago = $fecha_de_referencia;
                         } else {
                             $fecha_de_pago = sumardias($fecha_de_referencia, $periocidad_pago);
                         }
                         $fecha_de_pago = set_dia_abono_mensual($fecha_de_pago, $dia_1_ab);
                         $fecha_de_pago = set_no_festivo($fecha_de_pago);
                     } else {
                         // Tratamiento 360 o Semanal
                         $fecha_de_pago = sumardias($fecha_de_referencia, $periocidad_pago);
                     }
                     //-----------------------------------------------------------------------------------------------------------------------------------
                     //$msg						.= "$socio\t$credito\t$i\t$fecha_de_referencia\t$fecha_de_pago\r\n";
                     //Marcar la Fecha de Pago
                     if ($i == $pago_buscado) {
                         $fecha_devuelta = $fecha_de_pago;
                         $msg .= "{$socio}\t{$credito}\tFECHA_BUSCADA:\t{$fecha_devuelta}\r\n";
                         break;
                     }
                     $dias_para_vencimiento = $dvparcial + $dias_tolerancia_no_pago;
                     $vencimiento_parcialidad = sumardias($fecha_de_pago, $dias_para_vencimiento);
                     //Fecha de Pago + Dias en que vence la Parc + 1
                 }
                 //END FOR
             }
             //END IF
         }
         //END TIPO DE PAGO VALUATE
     }
     $this->mMessages .= $msg;
     return $fecha_devuelta;
 }
 function analizarOperacion($persona, $monto_operado, $moneda, $tipo_de_pago, $fecha = false, $recibo = false, $perfil = false)
 {
     $moneda = strtoupper($moneda);
     $sql = "SELECT * FROM `aml_risk_catalog` \n\t\t\t\t\tWHERE (`aml_risk_catalog`.`tipo_de_riesgo` = 912)\n\t\t\t\t\tAND (`aml_risk_catalog`.`clave_de_control` != " . AML_CLAVE_RIESGO_OPS_INDIVIDUALES . ")\n\t\t\t\t\tORDER BY \n\t\t\t\t\t`aml_risk_catalog`.`unidad_de_medida`,\t`aml_risk_catalog`.`unidades_ponderadas` DESC ";
     $ql = new MQL();
     $risk = new cAml_risk_catalog();
     $raised = false;
     $xAML = new cAML();
     $rs = $ql->getDataRecord($sql);
     //Datos de Operaciones Mensuales
     $xAMLP = new cAMLPersonas($persona);
     $xAMLP->init();
     $OMens = $xAMLP->getOAcumuladoDeOperaciones($fecha, $fecha, $moneda, $tipo_de_pago);
     $monto_original = $OMens->getMonto() + $monto_operado;
     $this->mMessages .= "WARN\tOperaciones acumuladas por " . $OMens->getMonto() . "\r\n";
     if ($perfil == false) {
         $this->mMessages .= "ERROR\tNo existe el perfil tipo de pago {$tipo_de_pago} en Moneda {$moneda} \r\n";
         //agregar perfil a cero
     } else {
         $perfil = setNoMenorQueCero($perfil);
         $sql = "SELECT * FROM `personas_perfil_transaccional_tipos` WHERE `idpersonas_perfil_transaccional_tipos` = {$perfil} LIMIT 0,1";
         $d = $ql->getDataRow($sql);
         if (isset($d["tipo_de_exhibicion"])) {
             $tipo_de_pago = strtolower($d["tipo_de_exhibicion"]);
         }
         $this->mMessages .= "OK\tCarga del perfil {$perfil}  con tipo de pago {$tipo_de_pago}\r\n";
     }
     //verificar operaciones con reglas
     foreach ($rs as $rows) {
         $risk->setData($rows);
         $reporteMoneda = strtoupper($risk->unidad_de_medida()->v());
         if ($reporteMoneda == $moneda) {
             if ($raised == false) {
                 $reporteMoneda = strtoupper($risk->unidad_de_medida()->v());
                 $xMon = new cMonedas($reporteMoneda);
                 $valor_local = $xMon->getValor();
                 $clave = $risk->clave_de_control()->v();
                 if ($xAML->isTransaccionVigilada($tipo_de_pago) != false) {
                     $unidadesReportadas = $risk->unidades_ponderadas()->v();
                     $unidadesOperadas = 0;
                     if ($reporteMoneda == AML_CLAVE_MONEDA_LOCAL) {
                         $unidadesOperadas = $monto_original;
                     } else {
                         $this->mMessages .= "WARN\tUnidades reportadas {$unidadesOperadas} en Moneda {$moneda} con valor local de {$valor_local}\r\n";
                         $unidadesReportadas = $valor_local * $unidadesReportadas / VALOR_ACTUAL_DOLAR;
                         $unidadesOperadas = $monto_original * $valor_local / VALOR_ACTUAL_DOLAR;
                     }
                     if ($unidadesOperadas >= $unidadesReportadas) {
                         $this->mMsgAlert = "ERROR\tUnidades excedidas de {$unidadesReportadas} operados {$unidadesOperadas} en la Moneda {$reporteMoneda}\r\n";
                         $this->mMessages .= $this->mMsgAlert;
                         $raised = true;
                         $this->mTipoDeAlerta = $clave;
                         $this->mTipoDeReporte = $risk->forma_de_reportar()->v();
                     } else {
                         $this->mMessages .= "OK\tOperacion Normal de {$unidadesOperadas} no sobrepasan {$unidadesReportadas}\r\n";
                     }
                     //Validar sivienen de paises con alto riesgo
                     $xP = new cDomiciliosPaises();
                     $xP->getPaisPorMoneda($reporteMoneda);
                     $nombrepais = $xP->getNombre();
                     if ($xP->getRiesgoAMLAsociado() >= SYS_RIESGO_MEDIO) {
                         //Agregar alerta por operaciones en paises de  alto y medio riesgo
                         $this->mMsgAlert .= "ERROR\tFondos provenientes de paises con Riesgo Elevado {$nombrepais}\r\n";
                         $this->mMessages .= "ERROR\tFondos provenientes de paises con Riesgo Elevado {$nombrepais}\r\n";
                     }
                 } else {
                     $this->mMessages .= "OK\tOperacion Omitida por ser tipo de pago {$tipo_de_pago} ({$reporteMoneda} )\r\n";
                 }
             }
         } else {
             $this->mMessages .= "OK\tOperacion Omitida por ser Moneda {$moneda} de {$reporteMoneda}\r\n";
         }
     }
     //setLog($this->mMessages);
     if (MODO_DEBUG == true) {
         setLog($this->getMessages());
     }
     return $raised;
 }
 function init($data = false)
 {
     if (!is_array($data)) {
         $ql = new MQL();
         $sql = "SELECT * FROM `bancos_operaciones` WHERE (`idcontrol` =" . $this->mCodigo . ") LIMIT 0,1";
         $data = $ql->getDataRow($sql);
     }
     $this->mObj = new cBancos_operaciones();
     $this->mObj->setData($data);
     $this->mNumeroBancario = $this->mObj->cuenta_bancaria()->v();
     $this->mTipoDeOperacion = $this->mObj->tipo_operacion()->v(OUT_TXT);
     $this->mMonto = setNoMenorQueCero($this->mObj->monto_real()->v(OUT_TXT));
     switch ($this->mTipoDeOperacion) {
         case $this->CHEQUE:
             $this->mNumeroDeCheque = setNoMenorQueCero($this->mObj->numero_de_documento()->v(OUT_TXT));
             break;
     }
 }
 function init($data = false)
 {
     $clave = $this->mClave;
     if (is_array($data)) {
     } else {
         $ql = new MQL();
         $data = $ql->getDataRow("SELECT * FROM `tesoreria_monedas` WHERE `clave_de_moneda`='{$clave}' ");
     }
     $this->mObj = new cTesoreria_monedas();
     $this->mObj->setData($data);
     $this->mData = $data;
 }
                 unset($DXEstado[$idxcp]);
                 $estado = $xFil->cleanString(implode(" ", $DXEstado), array("/CP/", "/C.P./"));
             } else {
                 $estado = $DEstado[1];
             }
         } else {
             $estado = $DEstado[0];
         }
         //Obtener pais
         $pais = trim($xFil->cleanString($xFil->getV(5), array("/-0-/")));
         $sqlPais = "SELECT * FROM `personas_domicilios_paises` WHERE `nombre_oficial` SOUNDS LIKE '%{$pais}%' LIMIT 0,1";
         $idpais = mifila($sqlPais, "clave_de_control");
         $idpais = $idpais == 0 ? EACP_CLAVE_DE_PAIS : $idpais;
         //Obtener Localidad
         $sqllocal = "SELECT * FROM `catalogos_localidades` WHERE `nombre_de_la_localidad` LIKE '%{$estado} {$pais}%' LIMIT 0,1";
         $DLocal = $xQL->getDataRow($sqllocal);
         if (setNoMenorQueCero($DLocal["clave_unica"]) > 0) {
             $idlocal = setNoMenorQueCero($DLocal["clave_unica"]);
             $localidad = $DLocal["nombre_de_la_localidad"];
         }
         $xSoc->addVivienda($calle, $numero, $cp, "", $referencia, "0", "0", SYS_UNO, FALLBACK_PERSONAS_REGIMEN_VIV, FALLBACK_PERSONAS_TIPO_VIV, DEFAULT_TIEMPO, $colonia, "calle", "", $idlocal, $idpais, $pais, $estado, $municipio, $localidad);
         //Actualizar pais
     }
     $msg .= $xSoc->getMessages(OUT_TXT);
     break;
 case "ALT":
     /*
     1597|1190|"aka"|"OCTOBER HOLDING COMPANY"|-0- 
     1661|1229|"aka"|"PESMAR S.A."|-0-
     6857|4607|"aka"|"CARDENAS GUILLEN, Oscar"|-0-
     */
 function setPorCodigo($CodigoDeOperacion, $delimitador = ".")
 {
     //FIXME: terminar cuando sea necesario
     //ejercicio . periodo . tipo . numero
     $d = explode($delimitador, $CodigoDeOperacion);
     $this->mEjercicioPoliza = setNoMenorQueCero($d[0]);
     $this->mPeriodoPoliza = setNoMenorQueCero($d[1]);
     $this->mTipoDePoliza = setNoMenorQueCero($d[2]);
     $this->mNumeroDePoliza = setNoMenorQueCero($d[3]);
     $this->mNumeroDeMvto = setNoMenorQueCero($d[4]);
     $this->mCodigoDeMvto = $CodigoDeOperacion;
     $QL = new MQL();
     //unset($_SESSION[ POLIZA_ID_ULTIMAOPERACION ]);
     $sql = "SELECT *\tFROM `contable_movimientos`\n\t\tWHERE\n\t\t(`contable_movimientos`.`ejercicio` =" . $this->mEjercicioPoliza . ") AND\n\t\t(`contable_movimientos`.`periodo` =" . $this->mPeriodoPoliza . ") AND\n\t\t(`contable_movimientos`.`tipopoliza` =" . $this->mTipoDePoliza . ") AND\n\t\t(`contable_movimientos`.`numeropoliza` =" . $this->mNumeroDePoliza . ") AND\n\t\t(`contable_movimientos`.`numeromovimiento` =" . $this->mNumeroDeMvto . ") LIMIT 0,1";
     $Data = $QL->getDataRow($sql);
     $this->init($Data);
 }
 function getCobrados()
 {
     $id = setNoMenorQueCero($this->idempresas_operaciones()->v());
     $ql = new MQL();
     $sql = "SELECT COUNT(`idempresas_cobranza`) AS 'cobrados' FROM `empresas_cobranza` WHERE `clave_de_nomina` = {$id} AND `estado`=0";
     $datos = $ql->getDataRow($sql);
     return isset($datos["cobrados"]) ? setNoMenorQueCero($datos["cobrados"]) : 0;
 }
     $msg .= $xPerUtils->setCorregirActividadEconomica($ForzarCorreccion);
     break;
     //===============genera colonias por localidades
 //===============genera colonias por localidades
 case 13002:
     $ql = new MQL();
     $rs = $ql->getDataRecord("SELECT * FROM `catalogos_localidades`");
     $xLoc = new cCatalogos_localidades();
     $xCol = new cGeneral_colonias();
     foreach ($rs as $rw) {
         $xLoc->setData($rw);
         $xCol->ciudad_colonia($xLoc->nombre_de_la_localidad()->v());
         $xCol->codigo_de_estado($xLoc->clave_de_estado()->v());
         $xCol->codigo_de_municipio($xLoc->clave_de_municipio()->v());
         $xCol->codigo_postal($xLoc->clave_de_localidad()->v());
         $DEstado = $ql->getDataRow("SELECT * FROM `general_estados` WHERE idgeneral_estados= " . $xLoc->clave_de_estado()->v());
         $NEstado = "";
         if (isset($DEstado["nombre"])) {
             $NEstado = $DEstado["nombre"];
         }
         $xCol->estado_colonia($NEstado);
         $xCol->fecha_de_revision(fechasys());
         $DMun = $ql->getDataRow("SELECT * FROM `general_municipios` WHERE `clave_de_municipio`= " . $xLoc->clave_de_municipio()->v() . " AND `clave_de_entidad`=" . $xLoc->clave_de_estado()->v());
         $NMun = "";
         if (isset($DMun["nombre_del_municipio"])) {
             $NMun = $DMun["nombre_del_municipio"];
         }
         $xCol->municipio_colonia($NMun);
         $xCol->nombre_colonia($xLoc->nombre_de_la_localidad()->v());
         $xCol->sucursal(getSucursal());
         $xCol->tipo_colonia("Colonia");
 function addLang($palabra, $traduccion, $idioma = "es")
 {
     $xLng = new cSistema_lenguaje();
     $idioma = strtoupper($idioma);
     //verificar si existe la palabra
     $sql = "SELECT *, COUNT(`idsistema_lenguaje`) as 'existen' FROM\t`sistema_lenguaje` WHERE (`sistema_lenguaje`.`equivalente` ='{$palabra}') AND (`sistema_lenguaje`.`idioma` ='{$idioma}')";
     $mql = new MQL();
     $d = $mql->getDataRow($sql);
     $existen = setNoMenorQueCero($d["existen"]) > 0 ? true : false;
     if ($existen == false) {
         $xLng->idsistema_lenguaje($xLng->query()->getLastID());
         $xLng->idioma($idioma);
         $xLng->equivalente($palabra);
         $xLng->traduccion($traduccion);
         $xLng->query()->insert()->save();
         //setLog($xLng->query()->insert()->get());
         $this->mMessages .= "LANG\tAgregar {$palabra} con traduccion {$traduccion}\r\n";
     } else {
         $id = $d["idsistema_lenguaje"];
         $xLng->idsistema_lenguaje($id);
         $xLng->idioma($idioma);
         $xLng->equivalente($palabra);
         $xLng->traduccion($traduccion);
         $xLng->query()->update()->save($id);
         $this->mMessages .= "LANG\tActualizar {$id} {$palabra} con traduccion {$traduccion}\r\n";
     }
 }