/**
  * Crea un registro nuevo en la entidad correspondiente
  * y su correspondiente registro en las líneas de recepción
  * 
  * @return array con el template y valores a renderizar
  */
 public function newAction()
 {
     switch ($this->request["entidad"]) {
         //CREAR UNA LINEA DE PEDIDO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION
         case 'PedidosCab':
             $pedido = new PedidosCab($this->request['idEntidad']);
             $lineaPedido = new PedidosLineas();
             $lineaPedido->setIDPedido($this->request['idEntidad']);
             $lineaPedido->setIDArticulo($this->request['idArticulo']);
             $lineaPedido->setDescripcion($this->request['Descripcion']);
             $lineaPedido->setUnidades(0);
             $lineaPedido->setIDEstado(1);
             $lineaPedido->setIDAgente($_SESSION['usuarioPortal']['Id']);
             $lineaPedido->setIDAlmacen($pedido->getIDAlmacen()->getIDAlmacen());
             if ($lineaPedido->valida()) {
                 if ($lineaPedido->create()) {
                     $this->creaLineaRecepcion($this->request['entidad'], $this->request['idEntidad'], $lineaPedido);
                     $pedido->setIDAlmacen($pedido->getIDAlmacen()->getIDAlmacen());
                     $pedido->setIncidencias($pedido->getIncidencias() . "\nFuera de pedido: " . $lineaPedido->getDescripcion());
                     $pedido->save();
                 }
             }
             $this->values['errores'] = $lineaPedido->getErrores();
             unset($pedido);
             unset($lineaPedido);
             break;
             //CREAR UNA LINEA DE PEDIDO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION
         //CREAR UNA LINEA DE PEDIDO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION
         case 'ManufacCab':
             $manufac = new ManufacCab($this->request['idEntidad']);
             $lineaManufac = new ManufacLineas();
             $lineaManufac->setIDManufac($this->request['idEntidad']);
             $lineaManufac->setTipo(1);
             $lineaManufac->setIDArticulo($this->request['idArticulo']);
             $lineaManufac->setDescripcion($this->request['Descripcion']);
             $lineaManufac->setUnidades(1);
             $lineaManufac->setIDEstado(0);
             $lineaManufac->setIDAlmacen($manufac->getIDAlmacenDestino()->getIDAlmacen());
             if ($lineaManufac->valida()) {
                 if ($lineaManufac->create()) {
                     $this->creaLineaRecepcion($this->request['entidad'], $this->request['idEntidad'], $lineaManufac);
                     $manufac->setIDAlmacenDestino($manufac->getIDAlmacenDestino()->getIDAlmacen());
                     $manufac->setIncidencias($manufac->getIncidencias() . "\nFuera de pedido: " . $lineaManufac->getDescripcion());
                     $manufac->save();
                 }
             }
             $this->values['errores'] = $lineaManufac->getErrores();
             unset($manufac);
             unset($lineaManufac);
             break;
             //CREAR UNA LINEA DE TRASPASO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION
         //CREAR UNA LINEA DE TRASPASO NUEVA Y SU CORRESPONDIENTE LINEA DE RECEPCION
         case 'TraspasosCab':
             $traspaso = new TraspasosCab($this->request['idEntidad']);
             $lineaTraspaso = new TraspasosLineas();
             $lineaTraspaso->setIDTraspaso($this->request['idEntidad']);
             $lineaTraspaso->setTipo(1);
             $lineaTraspaso->setIDArticulo($this->request['idArticulo']);
             $lineaTraspaso->setDescripcion($this->request['Descripcion']);
             $lineaTraspaso->setUnidades(1);
             $lineaTraspaso->setIDEstado(0);
             $lineaTraspaso->setIDAlmacen($traspaso->getIDAlmacenDestino()->getIDAlmacen());
             if ($lineaTraspaso->valida()) {
                 if ($lineaTraspaso->create()) {
                     $this->creaLineaRecepcion($this->request['entidad'], $this->request['idEntidad'], $lineaTraspaso);
                     $traspaso->setIDAlmacenDestino($traspaso->getIDAlmacenDestino()->getIDAlmacen());
                     $traspaso->setIncidencias($traspaso->getIncidencias() . "\nFuera de traspaso: " . $lineaTraspaso->getDescripcion());
                     $traspaso->save();
                 }
             }
             $this->values['errores'] = $lineaTraspaso->getErrores();
             unset($traspaso);
             unset($lineaTraspaso);
             break;
     }
     return $this->listAction($this->request['entidad'], $this->request['idEntidad']);
 }
 /**
  * Hace una copia del parte de traspaso
  * Genera otro parte en base al actual.
  *
  * @return integer El id del parte generado
  */
 public function duplica()
 {
     $idOrigen = $this->IDTraspaso;
     // Crear la cabecera del parte
     $destino = new TraspasosCab();
     $destino->setIDSucursal($this->IDSucursal);
     $destino->setIDContador($this->IDContador);
     $destino->setIDEstado(0);
     $destino->setFechaOrden(date('d-m-Y'));
     $destino->setFechaEntrada('00-00-0000');
     $destino->setDescripcion($this->Descripcion);
     $destino->setIDAlmacenOrigen($this->IDAlmacenOrigen);
     $destino->setIDAlmacenDestino($this->IDAlmacenDestino);
     $idDestino = $destino->create();
     // Crear las líneas de parte
     if ($idDestino) {
         $linea = new TraspasosLineas();
         $rows = $linea->cargaCondicion("*", "IDTraspaso='{$idOrigen}'", "IDLinea ASC");
         unset($linea);
         foreach ($rows as $row) {
             $lineaDestino = new TraspasosLineas();
             $lineaDestino->setIDTraspaso($idDestino);
             $lineaDestino->setTipo($row['Tipo']);
             $lineaDestino->setIDArticulo($row['IDArticulo']);
             $lineaDestino->setDescripcion($row['Descripcion']);
             $lineaDestino->setUnidades($row['Unidades']);
             $lineaDestino->setIDAlmacen($row['IDAlmacen']);
             $lineaDestino->setPrecio($row['Precio']);
             $lineaDestino->setImporte($row['Importe']);
             $lineaDestino->create();
         }
         unset($lineaDestino);
     } else {
         $this->_errores[] = "Hubo un error al duplicar la orden de traspaso.";
     }
     return $idDestino;
 }
 /**
  * Expide la linea de traspaso de tipo 0 (la de envío)
  * Actualiza las existencias y marca la línea como expedida.
  * Genera la línea de traspaso de tipo 1 (la de entrada) poniendo el 'entrando' y
  * generar tantas líneas de recepción como líneas de expedición se hayan generado
  * para mantener las mismas unidades y lotes
  *
  * NO SE REALIZA NINGUN TRATAMIENTO CON LAS EXISTENCIAS SI EL ARTICULO NO ES INVENTARIABLE
  *
  * @return boolean
  */
 public function expide()
 {
     $ok = true;
     $articulo = new Articulos($this->IDArticulo);
     $esInventariable = $articulo->getInventario()->getIDTipo();
     if ($esInventariable) {
         // Quitar la reserva de mercancía
         $exi = new Existencias();
         $ok = $exi->quitaReserva($this->IDAlmacen, $this->IDArticulo, $this->Unidades, $this->UnidadMedida);
         unset($exi);
     }
     if ($esInventariable and $ok) {
         // Expedir la línea de traspaso
         $expedicion = new Expediciones();
         $unidadesNetas = $expedicion->expide("TraspasosCab", $this->IDLinea);
         unset($expedicion);
     } else {
         $unidadesNetas = $this->Unidades;
     }
     if ($ok) {
         // Marcar la línea de traspaso como expedida y
         // poner las unidades netas expedidas
         $this->setIDEstado(2);
         $this->setUnidades($unidadesNetas);
         $this->totalizaLinea();
         $this->save();
         // Generar la línea de traspaso de tipo 1 (la de entrada) y poner el entrando
         $idAlmacenDestino = $this->getIDTraspaso()->getIDAlmacenDestino()->getIDAlmacen();
         $lineaEntrada = new TraspasosLineas();
         $lineaEntrada->setIDLinea('');
         $lineaEntrada->setIDTraspaso($this->IDTraspaso);
         $lineaEntrada->setTipo(1);
         $lineaEntrada->setIDArticulo($this->IDArticulo);
         $lineaEntrada->setDescripcion($this->Descripcion);
         $lineaEntrada->setUnidades($this->Unidades);
         $lineaEntrada->setUnidadMedida($this->UnidadMedida);
         $lineaEntrada->setIDAlmacen($idAlmacenDestino);
         $lineaEntrada->setPrecio($this->Precio);
         $lineaEntrada->setImporte($this->Importe);
         $lineaEntrada->setIDEstado(0);
         $idLineaEntrada = $lineaEntrada->create();
         unset($lineaEntrada);
         // Generar tantas líneas de recepción como líneas de expedición haya para
         // la línea de traspaso expedida
         $expedicion = new Expediciones();
         $rows = $expedicion->cargaCondicion("*", "Entidad='TraspasosCab' and IDLineaEntidad='{$this->IDLinea}'");
         unset($expedicion);
         foreach ($rows as $row) {
             $recepcion = new Recepciones();
             $recepcion->setEntidad($row['Entidad']);
             $recepcion->setIDEntidad($row['IDEntidad']);
             $recepcion->setIDLineaEntidad($idLineaEntrada);
             $recepcion->setIDAlmacen($idAlmacenDestino);
             $recepcion->setIDAlmacenero($_SESSION['usuarioPortal']['Id']);
             $recepcion->setIDArticulo($row['IDArticulo']);
             $recepcion->setUnidades($row['Unidades']);
             $recepcion->setUnidadMedida($row['UnidadMedida']);
             $recepcion->setUnidadesBrutas($row['Unidades']);
             $recepcion->setUnidadesNetas($row['Unidades']);
             $recepcion->setIDLote($row['IDLote']);
             $recepcion->create();
             unset($recepcion);
         }
         // Poner el entrando
         $exi = new Existencias();
         $ok = $exi->hazEntrando($idAlmacenDestino, $this->IDArticulo, $this->getUnidades(), $this->getUnidadMedida());
         unset($exi);
     }
     unset($articulo);
     return $ok;
 }