function jsaGetPerfilDeProducto($producto, $persona)
{
    $OConv = new cProductoDeCredito($producto);
    $OConv->init();
    $tab = new TinyAjaxBehavior();
    $xSoc = new cSocio($persona);
    $pagos = $OConv->getNumeroPagosPreferente();
    $periocidad = $OConv->getPeriocidadPrefente();
    if ($xSoc->init() == true) {
        if ($xSoc->getClaveDeEmpresa() != FALLBACK_CLAVE_EMPRESA) {
            $xEmp = new cEmpresas($xSoc->getClaveDeEmpresa());
            $xEmp->init();
            $tab->add(TabSetValue::getBehavior('idproducto', $xEmp->getProductoPref()));
            $periocidad = $xEmp->getPeriocidadPref();
        }
    }
    $tab->add(TabSetValue::getBehavior('idnumerodepagos', $pagos));
    $tab->add(TabSetValue::getBehavior('idperiocidad', $periocidad));
    return $tab->getString();
}
function jsaCargarDatosDeConvenio($convenio)
{
    $OConv = new cProductoDeCredito($convenio);
    $OConv->init();
    $tab = new TinyAjaxBehavior();
    $tab->add(TabSetValue::getBehavior('idnumpagos', $OConv->getNumeroPagosPreferente()));
    if ($OConv->getEsProductoDeNomina() == false) {
        //false por	que lo determina la empresa
        $tab->add(TabSetValue::getBehavior('idperiocidadpagos', $OConv->getPeriocidadPrefente()));
    }
    //$tab -> add(TabSetValue::getBehavior('idnumpagos', $OConv->obj()->pagos_maximo()->v()));
    return $tab->getString();
}
 function getOProductoDeCredito($TipoDeConvenio = false)
 {
     $TipoDeConvenio = $TipoDeConvenio == false ? $this->getClaveDeProducto() : $TipoDeConvenio;
     $xP = new cProductoDeCredito($TipoDeConvenio);
     $xP->init();
     return $xP;
 }
 */
 //obtener parametros extras en una array
 //su valor es del producto
 $xCred = new cCredito($idcredito, $rw["numero_socio"]);
 $xCred->init($rw);
 if (isset($DPagos[$idcredito])) {
     $xCred->initPagosEfectuados($DPagos[$idcredito], $FechaFinal);
     ///$xLog->add("OK\t$icnt\tDatos del credito $idpersona|$idcredito SI existen \r\n", $xLog->DEVELOPER);
 } else {
     $xLog->add("WARN\t{$idpersona}-{$idcredito}\t{$sucres}\t{$icnt}\tDatos de Pago del credito {$idpersona}|{$idcredito} no existen \r\n", $xLog->DEVELOPER);
 }
 $ClaveActualOtorgante = $xCR->getClaveDeOtorgante();
 // ENTIDAD_CLAVE_SIC;
 $NombreOtorgante = $xCR->getNombreOtorgante();
 $CuentaActual = $rw["numero_solicitud"];
 $xTConv = new cProductoDeCredito($rw["tipo_convenio"]);
 $xTConv->init();
 $DTConv = $xTConv->getOtrosParametrosInArray();
 $TipoDeResponsabilidad = isset($DTConv["SIC_TIPO_DE_RESPONSABILIDAD"]) ? $DTConv["SIC_TIPO_DE_RESPONSABILIDAD"] : "I";
 //individual
 $TipoDeCuenta = isset($DTConv["SIC_TIPO_DE_CUENTA"]) ? $DTConv["SIC_TIPO_DE_CUENTA"] : "F";
 //Pagos fijos
 $TipoDeContrato = strtoupper($xCred->getOProductoDeCredito()->getTipoDeContratoCR());
 // isset($DTConv["SIC_TIPO_DE_CONTRATO"]) ? $DTConv["SIC_TIPO_DE_CONTRATO"] : "DESCONOCIDO";
 $ClaveUnidadMonetaria = "MX";
 $ValorActivoValuacion = 0;
 $NumeroDePagos = $xCred->getPagosAutorizados();
 $FrecuenciaDePagos = $xCR->getEPeriocidad($xCred->getPeriocidadDePago());
 $MontoPagar = $xCR->getMonto($xCred->getSaldoActual($FechaFinal));
 //Acabar, valor de la letra actual o saldo?
 $FechaAperturaCuenta = $xCR->getDate($xCred->getFechaDeMinistracion());
    }
} else {
    $sucess = false;
}
if ($sucess == true) {
    $grupo_asociado = $xSoc->getClaveDeGrupo();
    if ($periocidad == CREDITO_TIPO_PERIOCIDAD_FINAL_DE_PLAZO) {
        $dias_solicitados = $xFecha->setRestarFechas($fecha_vencimiento, $fecha_ministracion);
    } elseif ($periocidad == CREDITO_TIPO_PERIOCIDAD_DIARIO) {
        $dias_solicitados = $xFecha->setRestarFechas($fecha_vencimiento, $fecha_ministracion);
        $numeropagos = $dias_solicitados - $xFecha->getDiasHabilesEnRango($fecha_vencimiento, $fecha_ministracion);
    } else {
        $dias_solicitados = $numeropagos * $periocidad;
        $fecha_vencimiento = $xFecha->setSumarDias($dias_solicitados, $fecha_ministracion);
    }
    $xConv = new cProductoDeCredito($tipoconvenio);
    $xConv->init();
    if (USE_OFICIAL_BY_PRODUCTO == true) {
        $oficial_de_seguimiento = $xConv->getOficialDeSeguimiento();
    }
    if ($esrenovado == true) {
        $TipoDeAutorizacion = CREDITO_AUTORIZACION_RENOVADO;
        $msg .= "WARN\tCredito marcado como Renovado \r\n";
    }
    $xCred = new cCredito();
    $result = $xCred->add($tipoconvenio, $persona, $contrato_corriente, $monto_solicitado, $periocidad, $numeropagos, $dias_solicitados, $rubro_destino, false, $grupo_asociado, $amp_destino, $observaciones, $oficial_de_credito, $fecha_solicitud, $tipo_de_pago, INTERES_POR_SALDO_INSOLUTO, false, $fecha_ministracion, $xSoc->getClaveDeEmpresa(), $TipoDeAutorizacion);
    if ($result == false) {
        $xFRM->addToolbar($xBtn->getRegresar("solicitud_de_credito.frm.php", true));
        $xFRM->addAviso($xHP->lang(MSG_ERROR_SAVE));
        $xFL = new cFileLog();
        $xFL->setWrite($xCred->getMessages(OUT_TXT));
 $Creds = new cCreditos_solicitud();
 $rs = $Creds->query()->select()->exec("numero_socio={$socio}");
 foreach ($rs as $data) {
     /*$Creds->setData($data);
     		$solicitud 	= $Creds->numero_solicitud()->v();
     		$socio		= $Creds->numero_socio()->v();
     		$xCred		= new cCredito($solicitud, $socio);
     		$msg		.= $xCred->setDelete();*/
 }
 if ($socio == 0) {
     $msg .= "{$iReg}\t\tERROR\tLa Linea({$iReg}) no se leyo({$bufer})\r\n";
 } else {
     $sqls = "UPDATE socios_general SET dependencia=" . DEFAULT_EMPRESA . " WHERE codigo={$socio}";
     my_query($sqls);
     $xCred = new cCredito();
     $xConv = new cProductoDeCredito($producto);
     $xConv->init();
     //Crear Contrato corriente si el producto tiene ahorro
     $DConv = $xCred->getDatosDeProducto($producto);
     $tasaAhorro = $xConv->getTasaDeAhorro();
     // $cT->cFloat( $DConv["tasa_ahorro"] );
     if ($ContratoCorriente == 0 and $tasaAhorro > 0) {
         /*$xCapta				= new cCuentaALaVista(false);
         		$ContratoCorriente	= $xCapta->setNuevaCuenta(99, DEFAULT_SUBPRODUCTO_CAPTACION, $socio, "CUENTA POR IMPORTACION", $credito);
         		$msg 			.= "$iReg\t$socio\t$credito\tAgregando una Cuenta Corriente $ContratoCorriente NUEVO\r\n";*/
     }
     //Agregar
     $msg .= "{$iReg}\t{$socio}\t{$credito}\t-----------------------------------------\r\n";
     $ok = $xCred->add($producto, $socio, $ContratoCorriente, $monto, $periocidad, $pagos, $dias, $aplicacion, $credito, DEFAULT_GRUPO, $descDestino, "CREDITO IMPORTADO #{$iReg}", DEFAULT_USER, $fechaSolicitado, CREDITO_TIPO_PAGO_PERIODICO, INTERES_POR_SALDO_INSOLUTO, $tasa);
     if ($ok == true) {
         ///Inicializar
 function setPrevalidarCredito($arrDatos, $retornarMonto = false)
 {
     //$periocidad, $convenio, $contrato
     $xF = new cFecha(0);
     $sucess = true;
     $xT = new cTipos();
     $socio = $this->mCodigo;
     //Datos a Manejar
     $monto_maximo = 0;
     $solicitud = isset($arrDatos["numero_de_solicitud"]) ? $arrDatos["numero_de_solicitud"] : false;
     $periocidad = isset($arrDatos["periocidad_de_pago"]) ? $arrDatos["periocidad_de_pago"] : 1;
     $convenio = isset($arrDatos["tipo_de_producto"]) ? $arrDatos["tipo_de_producto"] : false;
     $pagos = isset($arrDatos["numero_de_pagos"]) ? $arrDatos["numero_de_pagos"] : 0;
     $fecha_de_venc = isset($arrDatos["fecha_de_vencimiento"]) ? $arrDatos["fecha_de_vencimiento"] : $xF->get();
     $fecha_de_min = isset($arrDatos["fecha_de_ministracion"]) ? $arrDatos["fecha_de_ministracion"] : $xF->get();
     $contrato_corr = isset($arrDatos["contrato_corriente_relacionado"]) ? $arrDatos["contrato_corriente_relacionado"] : DEFAULT_CUENTA_CORRIENTE;
     $monto = isset($arrDatos["monto_solicitado"]) ? $arrDatos["monto_solicitado"] : 0;
     //
     $dias = ($periocidad == CREDITO_TIPO_PERIOCIDAD_FINAL_DE_PLAZO or $periocidad == CREDITO_TIPO_PERIOCIDAD_DIARIO) ? $xF->setRestarFechas($fecha_de_venc, $fecha_de_min) : $periocidad * $pagos;
     //enviar false
     if ($convenio == false) {
         $sucess = false;
         $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tEl tipo de Convenio no es Valido\r\n";
     } else {
         $xConv = new cProductoDeCredito($convenio);
         //si es nomina y no tiene empresa. mostrar false
         if ($xConv->getEsProductoDeNomina() == true) {
             $this->mMessages .= "WARN\t{$socio}\t{$solicitud}\tEl Producto e de Nomina\r\n";
             if ($this->getClaveDeEmpresa() == FALLBACK_CLAVE_EMPRESA) {
                 $sucess = false;
                 $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tEl Producto es de Nomina y No hay EMPRESA\r\n";
             }
         }
         $DConv = $xConv->getDatosInArray();
         $dias_maximo = $DConv["dias_maximo"];
         $tasa_ahorro = $DConv["tasa_ahorro"];
         $pagos_maximo = $DConv["pagos_maximo"];
         $validacion_php = $DConv["php_monto_maximo"];
         //cargar datos economicos del socio
         $ingreso_mensual = $this->getIngresosMensuales();
         $DTotCreds = $this->getTotalColocacionActual();
         $DTotCredsByConvenio = $this->getTotalColocacionActual($convenio);
         $DTotCapt = $this->getTotalCaptacionActual();
         //Datos de los Creditos segun referencias
         $monto_de_aportaciones = $this->getFondoPatrimonial();
         $saldos_de_creditos = $xT->cFloat($DTotCreds["saldo"]);
         $saldo_por_producto = $xT->cFloat($DTotCredsByConvenio["saldo"]);
         $monto_de_planeacion = get_monto_planeacion_credito($socio);
         //TODO: modificar
         $monto_linea_credito = $this->getMontoLineaDeCredito();
         $saldo_de_captacion = $xT->cFloat($DTotCapt["saldo"]);
         //Datos de los Creditos segun Productos
         $producto_monto_maximo = $DConv["maximo_otorgable"];
         //Valorar Dias Maximo del Credito
         if ($dias > $dias_maximo) {
             $sucess = false;
             $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tLos Dias del Credito[{$dias}] se exceden a lo permitido[{$dias_maximo}]\r\n";
         } else {
             if ($dias < EACP_DIAS_MINIMO_CREDITO) {
                 $sucess = false;
                 $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tLos Dias del Credito[{$dias}] son Menores al Minimo Permitido [" . EACP_DIAS_MINIMO_CREDITO . "] por la Institucion\r\n";
             } else {
                 $this->mMessages .= "OK\t{$socio}\t{$solicitud}\tDias de Pago dentro del Rango Permitido:[{$dias}]\r\n";
             }
         }
         //Valorar Pagos Maximo del Credito
         if ($pagos > $pagos_maximo) {
             $sucess = false;
             $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tLos Numero de Pagos[{$pagos}] Execeden a lo Permitido[{$pagos_maximo}]\r\n";
         } else {
             $this->mMessages .= "OK\t{$socio}\t{$solicitud}\tNumero de Pagos dentro del Rango Permitido[{$pagos}]\r\n";
         }
         //tasa de ahorro
         if ($tasa_ahorro > 0) {
             $this->mMessages .= "WARN\t{$socio}\t{$solicitud}\tEl Ahorro para este Convenio es Obligatorio\r\n";
             //Valorar Contrato de Captacion
             if ($contrato_corr == DEFAULT_CUENTA_CORRIENTE or strlen($contrato_corr) < DIGITOS_DE_CLAVE_DE_SOCIO) {
                 $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tDebe Capturar un Numero de Contrato de Cuenta Corriente\tpara que los Pagos de Credito se Acumulen\r\n";
                 $sucess = false;
             } else {
                 $xCta = new cCuentaDeCaptacion($contrato_corr);
                 $existe = $this->existeCuenta($contrato_corr, CAPTACION_TIPO_VISTA);
                 if ($existe == false) {
                     //
                     $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tLa Cuenta {$contrato_corr} No existe, o no es del Tipo requerido\r\n";
                     $sucess = false;
                 } else {
                     //
                     $this->mMessages .= "OK\t{$socio}\t{$solicitud}\tLa Cuenta {$contrato_corr}  es valida para Utilizar\r\n";
                 }
             }
             //end: contrato
         }
         // end: tasa ahorro
         //
         eval($validacion_php);
         if ($monto > $monto_maximo) {
             $this->mMessages .= "ERROR\t{$socio}\t{$solicitud}\tEl Monto Solicitado {$monto} es mayor al Maximo Permitido {$monto_maximo}\r\n";
             $sucess = false;
         }
     }
     $this->mUUID = md5($socio . $convenio . $monto . $pagos . ROTTER_KEY . date("Ymd"));
     return $retornarMonto == false ? $sucess : $monto_maximo;
     //obtener mensajes
 }
function jsaSetClonarProducto($idclonado, $nuevoid, $nombre)
{
    $xProducto = new cProductoDeCredito($idclonado);
    $xProducto->add($nuevoid, $nombre, $idclonado);
    return $xProducto->getMessages(OUT_HTML);
}
 }
 //Si es a Final de Plazo
 if ($periocidad == CREDITO_TIPO_PERIOCIDAD_FINAL_DE_PLAZO) {
     $dias_solicitados = restarfechas($fecha_vencimiento, $fecha_ministracion);
 } elseif ($periocidad == CREDITO_TIPO_PERIOCIDAD_DIARIO) {
     $dias_solicitados = restarfechas($fecha_vencimiento, $fecha_ministracion);
     $numeropagos = $dias_solicitados - $xFecha->getDiasHabilesEnRango($fecha_vencimiento, $fecha_ministracion);
 } else {
     $dias_solicitados = $numeropagos * $periocidad;
     $fecha_vencimiento = sumardias($fecha_ministracion, $dias_solicitados);
 }
 $dias_autorizados = 0;
 $monto_autorizado = 0;
 $pagos_autorizados = 0;
 $saldo_actual = 0;
 $xConv = new cProductoDeCredito($tipoconvenio);
 $dconv = $xConv->getDatosInArray();
 //Datos de los Creditos segun Productos
 $producto_monto_maximo = $dconv["maximo_otorgable"];
 $tipo_autorizacion = $dconv["tipo_autorizacion"];
 $docto_autorizacion = $dconv["leyenda_docto_autorizacion"];
 $interes_normal = $xConv->getTasaDeInteres();
 $interes_moratorio = $dconv["interes_moratorio"];
 $tipo_credito = $dconv["tipo_de_credito"];
 $estatus_pred = $dconv["estatus_predeterminado"];
 $nivel_riesgo = $dconv["nivel_riesgo"];
 $tasa_ahorro = $dconv["tasa_ahorro"];
 $tipo_de_calculo_interes = $dconv["base_de_calculo_de_interes"];
 //Si es Automatizado
 if ($tipo_autorizacion == CREDITO_TIPO_AUTORIZACION_AUTOMATICA) {
     $monto_autorizado = $monto_solicitado;