/**
  * @return integer Numero de Operacion
  **/
 function setNuevoMvto($fecha_operacion, $monto, $tipo_operacion, $periodo_de_socio, $observaciones, $signo_afectacion = 1, $mvto_contable = false, $socio = false, $documento = false, $fecha_afectacion = false, $fecha_vencimiento = false, $saldo_anterior = false, $saldo_nuevo = false)
 {
     $sucess = false;
     //inicializa el recibo
     if (!isset($this->mCodigoDeRecibo) or $this->mCodigoDeRecibo == false) {
         //
     }
     //Si no hay valores, obtenerlos del recibo
     if ($documento == false or !isset($documento)) {
         $documento = $this->mDocto;
     }
     if ($socio == false or !isset($socio)) {
         $socio = $this->mSocio;
     }
     //Verificar la Cuenta Bancaria
     if ($this->mCuentaBancaria == false) {
         $this->mCuentaBancaria = DEFAULT_CUENTA_BANCARIA;
     }
     $recibo = $this->mCodigoDeRecibo;
     $fecha_afectacion = $fecha_afectacion == false ? $fecha_operacion : $fecha_afectacion;
     // --------------------------------------- VALOR SQL DEL MVTO.-------------------------------------------------------
     // VALORES FIJOS
     $smf = "idusuario, codigo_eacp, socio_afectado, docto_afectado, recibo_afectado, fecha_operacion, ";
     // PERIODOS
     $smf .= "periodo_contable, periodo_cobranza, periodo_seguimiento, ";
     $smf .= "periodo_anual, periodo_mensual, periodo_semanal, ";
     // AFECTACIONES
     $smf .= "afectacion_cobranza, afectacion_contable, afectacion_estadistica, ";
     $smf .= "afectacion_real, valor_afectacion, ";
     // FECHAS Y TIPOS
     $smf .= "idoperaciones_mvtos, tipo_operacion, estatus_mvto, periodo_socio, ";
     $smf .= "fecha_afectacion, fecha_vcto, ";
     // SALDOS
     $smf .= "saldo_anterior, saldo_actual, detalles, sucursal, tasa_asociada, dias_asociados, grupo_asociado";
     //
     $iduser = $_SESSION["SN_b80bb7740288fda1f201890375a60c8f"];
     $eacp = EACP_CLAVE;
     // PERIODOS
     $percont = EACP_PER_CONTABLE;
     // Periodo Contable
     $percbza = EACP_PER_COBRANZA;
     // Periodo Cobranza.
     $perseg = EACP_PER_SEGUIMIENTO;
     // Period de Seguimiento.
     $permens = date("m", strtotime($fecha_operacion));
     // Periodo mes
     $persem = date("N", strtotime($fecha_operacion));
     // Periodo de dias en la semana.
     $peranual = date("Y", strtotime($fecha_operacion));
     // A�o Natural.
     $persoc = $periodo_de_socio;
     // periodo del Socio.
     $estatus_mvto = $this->mDefMvtoStatus;
     $fecha_vcto = $fecha_vencimiento == false ? $this->mFechaDeVcto : $fecha_vencimiento;
     $saldo_anterior = $saldo_anterior === false ? 0 : $saldo_anterior;
     $saldo_nuevo = $saldo_nuevo === false ? $monto : $saldo_nuevo;
     $sucursal = getSucursal();
     $afect_cbza = $monto;
     $afect_seg = $monto;
     $afect_cont = $monto;
     $afect_esta = $monto;
     $idoperacion = folios(2);
     $tasa = 0;
     $dias = 0;
     $grupo = $this->mGrupoAsociado;
     $viable = true;
     $xT = new cTipos(0);
     if ($this->mGrupoAsociado == false) {
         $grupo = DEFAULT_GRUPO;
     }
     $smv = "{$iduser}, '{$eacp}', {$socio}, {$documento}, {$recibo}, '{$fecha_operacion}',\n\t\t\t\t{$percont}, {$percbza}, {$perseg}, {$peranual}, {$permens}, {$persem},\n\t\t\t\t{$afect_cbza}, {$afect_cont}, {$afect_esta},\n\t\t\t\t{$monto}, {$signo_afectacion},\n\t\t\t\t{$idoperacion}, {$tipo_operacion}, {$estatus_mvto}, {$persoc},\n\t\t\t\t'{$fecha_afectacion}', '{$fecha_vcto}',\n\t\t\t\t{$saldo_anterior}, {$saldo_nuevo}, '{$observaciones}', '{$sucursal}', {$tasa}, {$dias}, {$grupo}\n\t\t\t\t";
     $arrD = array($socio, $documento, $recibo);
     $viable = $xT->getEvalNotNull($arrD);
     if ($viable == false) {
         $this->mMessages .= "ERROR\tVARS\tError al Evaluar alguno de estos Valores Socio {$socio}, Documento {$documento}, Recibo {$recibo}\r\n";
         $this->mMessages .= $xT->getMessages();
     }
     $SQl_comp = "INSERT INTO operaciones_mvtos({$smf}) VALUES ({$smv})\n\t\t\t\t\t\tON DUPLICATE KEY UPDATE idoperaciones_mvtos = " . folios(2) . "\n\t\t\t\t\t";
     if ($monto != 0 and isset($monto) and $this->mAfectar == true and $viable == true) {
         $exec = my_query($SQl_comp);
         if ($exec["stat"] == false) {
             $sucess = false;
             $this->mMessages .= "ERROR\t{$recibo}\tSe Fallo al Agregar la Operacion({$tipo_operacion}) por {$monto} con Numero {$idoperacion}\r\n";
         } else {
             $sucess = true;
             $this->mMessages .= "SUCESS\t{$recibo}\tSe agrego Exitosamente la Operacion({$tipo_operacion}) por {$monto} con Numero {$idoperacion} \r\n";
         }
     } else {
         $this->TxtLog .= "WARNING\tSe simula Agregar el Mvto {$idoperacion} del tipo {$tipo_operacion} por un monto de {$monto} \r\n";
     }
     //Sumar al Recibo el Monto
     $this->mSumaDeRecibo += $monto;
     $this->mNumeroDeMvtos++;
     //
     return $idoperacion;
 }
</fieldset>
</form>
<?php 
} elseif ($action == 'i') {
    $xT = new cTipos();
    $socio = $_POST["idsocio"];
    $monto = $_POST["cMonto"];
    $cuentaOrigen = $_POST["cCuentaOrigen"];
    $cuentaDestino = $_POST["cCuentaDestino"];
    $observaciones = $_POST["cObservaciones"];
    $tipoOrigen = $_POST["cTipoOrigen"];
    $tipoDestino = $_POST["cTipoDestino"];
    $sucess = true;
    $xSoc = new cSocio($socio);
    $xSoc->init();
    if ($xT->getEvalNotNull(array($cuentaOrigen, $cuentaDestino)) == false) {
        $sucess = false;
        $msg .= "ERROR\tLa cuenta de Origen({$cuentaOrigen}) o la cuenta de Destino({$cuentaDestino}) NO EXISTE\r\n";
    }
    if ($cuentaOrigen == $cuentaDestino) {
        $sucess = false;
        $msg .= "ERROR\tLa cuenta de Origen({$cuentaOrigen}) es igual a la cuenta de Destino({$cuentaDestino}) \r\n";
    }
    if ($xSoc->existeCuenta($cuentaOrigen) == 0 or $xSoc->existeCuenta($cuentaDestino) == 0) {
        $sucess = false;
        $msg .= "ERROR\tLa cuenta de Origen({$cuentaOrigen}) o la cuenta de Destino({$cuentaDestino}) NO son del Misma Persona ({$socio})\r\n";
    }
    if ($sucess == true) {
        if ($tipoOrigen == CAPTACION_TIPO_PLAZO) {
            $xCOrigen = new cCuentaInversionPlazoFijo($cuentaOrigen, $socio);
        } else {
 /**
  * Agrega una operacion a tesoreria
  * @param integer $recibo	Numero de recibo
  * 
  */
 function addOperacion($recibo, $tipoDeExposicion, $MontoRecibido, $MontoOperacion = 0, $MontoCambio = 0, $banco = FALLBACK_CLAVE_DE_BANCO, $cheque = "", $CuentaBancaria = 0, $DocumentoDescontado = 0, $Observaciones = "", $fecha = false, $hora = false, $moneda = false, $monto_original = 0, $persona = false, $documento = false, $transaccion = SYS_NINGUNO)
 {
     $sucess = false;
     $fecha = $fecha == false ? fechasys() : $fecha;
     $arrQ = array("aumento" => 1, "disminucion" => -1, "ninguna" => 0);
     $xF = new cFecha(0, $fecha);
     $xT = new cTipos();
     $fecha = $xF->get();
     $hora = $hora == false ? date("H:i:s") : $hora;
     $CodigoDeCaja = $this->getKey();
     $cajero = $this->mCajero;
     $banco = setNoMenorQueCero($banco) <= 0 ? FALLBACK_CLAVE_DE_BANCO : $banco;
     $this->mMoneda = $this->mMoneda == "" ? AML_CLAVE_MONEDA_LOCAL : $this->mMoneda;
     if ($moneda == false or $moneda == AML_CLAVE_MONEDA_LOCAL) {
         $moneda = $this->mMoneda != AML_CLAVE_MONEDA_LOCAL ? $this->mMoneda : AML_CLAVE_MONEDA_LOCAL;
     }
     //$monto_original	= setNoMenorQueCero($monto_original);
     $monto_original = $monto_original == 0 ? $this->mMontoOrigen : $monto_original;
     $xRec = new cReciboDeOperacion(false, false, $recibo);
     $xRec->init();
     $DRec = $xRec->getDatosInArray();
     $persona = ($persona == false or $persona == "") ? DEFAULT_SOCIO : $persona;
     $documento = $documento == false ? $xRec->getCodigoDeDocumento() : $documento;
     $afectaCaja = $arrQ[$DRec["afectacion_en_flujo_efvo"]];
     $MontoOperacion = $MontoOperacion == 0 ? $DRec["total_operacion"] : $MontoOperacion;
     $MontoCambio = $MontoCambio == 0 ? $MontoRecibido - $MontoOperacion : $MontoCambio;
     //Obtener Banco
     $pais = EACP_CLAVE_DE_PAIS;
     $eacp = EACP_CLAVE;
     $sucursal = getSucursal();
     if ($banco == FALLBACK_CLAVE_DE_BANCO and $CuentaBancaria > 0) {
         $xCta = new cCuentaBancaria($CuentaBancaria);
         $xCta->init();
         $banco = $xCta->getClaveDeBanco();
         $pais = $xCta->getPaisDeOrigen();
     }
     $xBanco = new cBancos_entidades();
     $xBanco->setData($xBanco->query()->initByID($banco));
     $pais = $xBanco->pais_de_origen()->v();
     //Actualizar Moneda por pais
     if ($banco != FALLBACK_CLAVE_DE_BANCO) {
         $moneda2 = mifila("SELECT clave_de_moneda FROM `tesoreria_monedas` WHERE `pais_de_origen` ='{$pais}' LIMIT 0,1 ", "clave_de_moneda");
         if ($moneda2 === 0) {
         } else {
             $moneda = $moneda2;
         }
     }
     $xTes = new cTesoreria_cajas_movimientos();
     $xTes->banco($banco);
     $xTes->codigo_de_caja($CodigoDeCaja);
     $xTes->cuenta_bancaria($CuentaBancaria);
     $xTes->documento($documento);
     $xTes->documento_descontado($DocumentoDescontado);
     $xTes->eacp(EACP_CLAVE);
     $xTes->fecha($fecha);
     $xTes->hora($hora);
     $xTes->idtesoreria_cajas_movimientos($xTes->query()->getLastID());
     $xTes->idusuario($cajero);
     $xTes->moneda_de_operacion($moneda);
     if ($moneda != AML_CLAVE_MONEDA_LOCAL) {
     }
     //EVALUAR MONEDA
     $xTes->monto_del_movimiento($MontoOperacion);
     $xTes->monto_en_cambio($MontoCambio);
     $xTes->monto_recibido($MontoRecibido);
     $xTes->numero_de_cheque($cheque);
     $xTes->observaciones($Observaciones);
     $xTes->recibo($recibo);
     $xTes->sucursal($sucursal);
     $xTes->tipo_de_exposicion($tipoDeExposicion);
     $xTes->tipo_de_movimiento($afectaCaja);
     $xTes->unidades_de_moneda(setNoMenorQueCero($monto_original));
     $xTes->persona($persona);
     $sucess = $xT->getEvalNotNull(array($cajero, $CodigoDeCaja));
     if ($sucess == true) {
         $q = $xTes->query()->insert();
         $id = $q->save();
         $sucess = $id == false ? false : true;
         if ($sucess == true) {
             $this->mMessages .= "OK\tRegistro Agregado exitosamente, relacionado con el Recibo {$recibo}, Operacion {$id} ({$moneda}|{$monto_original}|{$cheque}|{$tipoDeExposicion}|{$transaccion})\r\n";
             //Agregar recibo
             $xRec->setDatosDePago($moneda, $monto_original, $cheque, $tipoDeExposicion, $transaccion);
             $this->mMessages .= $xRec->getMessages(OUT_TXT);
         } else {
             if (MODO_DEBUG == true) {
                 $this->mMessages .= $q->getMessages(OUT_TXT);
             }
         }
     } else {
         $this->mMessages .= "ERROR\tSe produjo un error al Agregar la Operacion de Tesoreria({$cajero}, {$CodigoDeCaja})\r\n";
     }
     return $sucess;
 }
 if ($sucess == true) {
     $xCta->setUpdate($arrUpdate);
     $xCta->init();
 } else {
     $messages .= "WARN\\NO_ACT\tLa Cuenta no se actualizo\r\n";
 }
 $saldo = $xCta->getNuevoSaldo();
 if ($sucess == true) {
     if ($saldo > INVERSION_MONTO_MINIMO) {
         $recibo_de_reinversion = $xCta->setReinversion($fecha_actual, true);
         $messages .= "WARN\tLa Inversion se CIERRA\r\n";
     } elseif ($saldo >= TOLERANCIA_SALDOS) {
         $messages .= "ERROR\tSDO_MIN\tEL saldo de la Inversion({$saldo}) es menor a " . INVERSION_MONTO_MINIMO . ", la Inversion no se efectua\r\n";
         //LLevar a cuenta Corriente
         $mCorriente = $xSoc->getCuentaDeCaptacionPrimaria(CAPTACION_TIPO_VISTA);
         if ($xTyp->getEvalNotNull(array($mCorriente)) == true) {
             $messages .= "WARN\tSDO_MIN\tSe intenta el Traspaso a cuenta Corriente\r\n";
             $messages .= $xCta->setTraspaso($mCorriente, CAPTACION_TIPO_VISTA);
         }
     }
 } else {
     $messages .= "WARN\tLa Inversion permanece Abierta\r\n";
 }
 $url_recibo_inversion = $xCta->getURLReciboInversion($recibo_de_reinversion);
 if (MODO_DEBUG == true) {
     $xFRM->addLog($messages . $xCta->getMessages());
 }
 $xFRM->addAviso($messages);
 $xCta->init();
 $xFRM->addHElem($xCta->getFicha(true, "", true));
 $xFRM->addToolbar($xBtn->getBasic("TR.Imprimir constancia_de_inversion", "jsPrintReporto()", "imprimir", "idnim", false));