/**
  * Recibe un objeto y realiza un apunte en caja con los
  * valores del mismo. Si la caja no estuviera abierta, la abre.
  * 
  * El apunte de caja se realiza en la sucursal y tpv en curso
  *
  * Los objetos posibles son:
  *
  *  Contratos
  *  FemitidasCab
  *  FrecibidasCab
  *  RecibosClientes
  *  RecibosProveedores
  *
  * La forma de pago que se pondrá en el apunte de caja es la indicada en el
  * parámetro $idFormaPago, y si no se indica, será la que tenga asociada
  * el objeto.
  *
  * @param object $objeto Contratos, FemitidasCab, FrecibidasCab, RecibosClientes, RecibosProveedores
  * @param integer $idFormaPago El id de la forma de pago (opcional)
  * @return boolean TRUE si se pudo crear, FALSE si no.
  */
 public function anotaEnCaja($objeto, $idFormaPago = '')
 {
     $ok = false;
     if ($_SESSION['tpv'] == '') {
         $this->_errores[] = "No se ha establecido el TPV";
         return $ok;
     }
     $entidad = get_class($objeto);
     //$idSucursal = $objeto->getIDSucursal()->getIDSucursal();
     if ($idFormaPago == '') {
         $idFormaPago = $objeto->getIDFP()->getIDFP();
     }
     switch ($entidad) {
         case 'Contratos':
             $concepto = "Pago Contrato " . $objeto->getIDArticulo()->getIDVenta() . " " . $objeto->getNumeroDocumento();
             $origen = 7;
             $importe = -1 * $objeto->getImportePago();
             $idEntidad = $objeto->getPrimaryKeyValue();
             break;
         case 'FemitidasCab':
             $concepto = "Cobro N/Fra. {$objeto->getNumeroFactura()} de {$objeto->getIDCLiente()}";
             $origen = 2;
             $importe = $objeto->getTotal();
             $idEntidad = $objeto->getPrimaryKeyValue();
             break;
         case 'RecibosClientes':
             $concepto = "Cobro N/Fra. {$objeto->getIDFactura()->getNumeroFactura()} de {$objeto->getIDCliente()}";
             $origen = 3;
             $importe = $objeto->getImporte();
             $idEntidad = $objeto->getPrimaryKeyValue();
             break;
         case 'FrecibidasCab':
             $concepto = "Pago S/Fra. {$objeto->getNumeroFactura()} de {$objeto->getIDProveedor()}";
             $origen = 4;
             $importe = -1 * $objeto->getTotal();
             $idEntidad = $objeto->getPrimaryKeyValue();
             break;
         case 'RecibosProveedores':
             $concepto = "Pago S/Fra. {$objeto->getIDFactura()->getNumeroFactura()} de {$objeto->getIDProveedor()}";
             $origen = 5;
             $importe = -1 * $objeto->getImporte();
             $idEntidad = $objeto->getPrimaryKeyValue();
             break;
     }
     // Comprobar que la caja esté abierta, si no, abrirla
     $this->setIDSucursal($_SESSION['suc']);
     $this->setIDTpv($_SESSION['tpv']);
     $this->setDia(date('Y-m-d'));
     $idArqueo = $this->estaAbierta();
     if (!$idArqueo) {
         $idArqueo = $this->apertura();
     }
     if ($idArqueo) {
         $apunte = new CajaLineas();
         $apunte->setIDArqueo($idArqueo);
         $apunte->setFecha(date('Y-m-d H:i:s'));
         $apunte->setConcepto($concepto);
         $apunte->setIDFP($idFormaPago);
         $apunte->setOrigen($origen);
         $apunte->setEntidad($entidad);
         $apunte->setIDEntidad($idEntidad);
         $apunte->setImporte($importe);
         $apunte->setIDAgente($_SESSION['usuarioPortal']['Id']);
         $ok = $apunte->create();
         $this->_errores = $apunte->getErrores();
     } else {
         $this->_errores[] = "No se ha realizado el apunte de caja.";
     }
     return $ok;
 }