/**
  * Realiza un traspaso de importes entre la caja actual y la de destino
  *
  * Las cajas pueden ser de distintas sucursales
  *
  * Realiza las siguientes validaciones antes de traspasar:
  *
  *   - Se haya indicado tpv destino y que sea distinto al de origen
  *   - Que los importes a traspasar no superen la cantidad origen
  *   - Que el arqueo del tpv origen no esté cerrado
  *   - Que el arqueo del tpv destino para la fecha actual no esté cerrado
  *
  */
 public function TraspasarAction()
 {
     if ($this->validaTraspaso()) {
         $arqueoOrigen = new CajaArqueos($this->request['CajaArqueos']['IDArqueo']);
         // Comprobar que la caja destino esté abierta, si no, abrirla
         $arqueoDestino = new CajaArqueos();
         $arqueoDestino->setIDSucursal($this->request['IDSucursalDestino']);
         $arqueoDestino->setIDTpv($this->request['IDTpvDestino']);
         $arqueoDestino->setDia(date('Y-m-d'));
         $idArqueoDestino = $arqueoDestino->estaAbierta();
         if (!$idArqueoDestino) {
             $idArqueoDestino = $arqueoDestino->apertura();
         }
         foreach ($this->request['traspaso'] as $idFormaPago => $importes) {
             if ($importes['importeDestino'] > 0) {
                 // Sacar de la caja origen
                 $apunteSalida = new CajaLineas();
                 $apunteSalida->setIDArqueo($this->request['CajaArqueos']['IDArqueo']);
                 $apunteSalida->setFecha(date('Y-m-d H:i:s'));
                 $apunteSalida->setConcepto("Salida por Traspaso a " . $arqueoDestino->getIDSucursal() . " " . $arqueoDestino->getIDTpv());
                 $apunteSalida->setIDFP($idFormaPago);
                 $apunteSalida->setOrigen('6');
                 // Traspasos
                 $apunteSalida->setImporte(-1 * $importes['importeDestino']);
                 $apunteSalida->setIDAgente($_SESSION['usuarioPortal']['Id']);
                 $apunteSalida->create();
                 $this->_errores = $apunteSalida->getErrores();
                 // Meter en la caja destino
                 $apunteEntrada = new CajaLineas();
                 $apunteEntrada->setIDArqueo($idArqueoDestino);
                 $apunteEntrada->setFecha(date('Y-m-d H:i:s'));
                 $apunteEntrada->setConcepto("Entrada por Traspaso de " . $arqueoOrigen->getIDSucursal() . " " . $arqueoOrigen->getIDTpv());
                 $apunteEntrada->setIDFP($idFormaPago);
                 $apunteEntrada->setOrigen('6');
                 // Traspasos
                 $apunteEntrada->setImporte($importes['importeDestino']);
                 $apunteEntrada->setIDAgente($_SESSION['usuarioPortal']['Id']);
                 $apunteEntrada->create();
                 $this->_errores = $apunteEntrada->getErrores();
             }
         }
     } else {
         $this->values['errores'] = $this->errorTraspaso;
     }
     unset($arqueoDestino);
     unset($arqueoOrigen);
     unset($apunteEntrada);
     unset($apunteSalida);
     $datos = new CajaArqueos($this->request[$this->entity]['IDArqueo']);
     $this->values['datos'] = $datos;
     unset($datos);
     return array('template' => $this->entity . "/edit.html.twig", 'values' => $this->values);
 }
 /**
  * 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;
 }