/**
  * Validaciones antes de actualizar o crear
  */
 public function valida(array $rules)
 {
     unset($this->_errores);
     //Para tener disponibles los datos de la
     //cabecera del pedido
     $pedido = new PedidosCab($this->IDPedido);
     // Compruebo la existencia del artículo y que pertenezca a
     // la sucursal de la cabecera del pedido.
     if ($this->IDArticulo == '') {
         $this->_errores[] = "Debe indicar un código de artículo";
     } else {
         $articulo = new Articulos($this->IDArticulo);
         if ($articulo->getStatus() == 0) {
             $this->_errores[] = "El artículo indicado no existe";
             unset($articulo);
         }
     }
     // Si existe el articulo ...
     if (count($this->_errores) == 0) {
         $aviso = $articulo->getAvisosPedidos();
         if ($aviso) {
             $this->_alertas[] = $aviso;
         }
         $this->checkPackingCompras($articulo);
         // Si la descripcion está vacia, pongo la del artículo
         // Si trae algo, la respeto.
         if ($this->Descripcion == '') {
             $this->setDescripcion($articulo->getDescripcion());
         }
         // Si no se ha indicado precio, pongo el precio de costo de la ficha del articulo
         if ($this->Precio == '') {
             $this->setPrecio($articulo->getPrecioCosto());
         }
         // Totalizar la linea de pedido
         $this->setImporte($this->Unidades * $this->Precio * (1 - $this->Descuento / 100));
         //Comparar el precio respecto al PMC.
         //Si el importe neto (despues de dctos) unitario supera el P.M.C. se emite alerta
         if ($this->getImporte() / $this->getUnidades() > $articulo->getPmc()) {
             $this->_alertas[] = "El precio supera al Precio Medio de Compra: " . $articulo->getPmc();
         }
         // Poner el mismo almacen de la cabecera del pedido y el agente en curso
         $this->setIDAlmacen($pedido->getIDAlmacen()->getIDAlmacen());
         $this->setIDAgente($_SESSION['usuarioPortal']['Id']);
         // Si el proveedor no está sujeto a Iva, pongo a 0 el iva y el recargo
         if ($pedido->getIDProveedor()->getIva()->getIDTipo() == '0') {
             $this->setIva('0');
             $this->setRecargo('0');
         } else {
             // Si no se ha indicando iva, pongo el iva asociado al artículo,
             if ($this->Iva == '') {
                 $this->setIva($articulo->getIDIva()->getIva());
             }
         }
         // Si el artículo es inventariable:
         // Comprobar existencias sin tener en cuenta lote ni ubicación
         // de almacen. Solo se buscan existencias en el almacen indicado
         // en la línea del pedido
         if ($articulo->getInventario()->getIDTipo() == '1') {
             $existencias = new Existencias();
             $stock = $existencias->getStock($this->IDArticulo, $this->IDAlmacen);
             // Se genera una alerta si hay stock disponible o pendiente de entrada
             if ($stock['PE'] > 0 or $stock['DI'] > 0) {
                 $this->_alertas[] = "Hay stock";
                 $this->_alertas[] = "---------";
             }
             $this->_alertas[] = "Disponible: " . $stock['DI'];
             $this->_alertas[] = "Real: " . $stock['RE'];
             $this->_alertas[] = "Reservado: " . $stock['RV'];
             $this->_alertas[] = "Pte. Entrada: " . $stock['PE'];
         }
     }
     unset($articulo);
     unset($pedido);
     unset($existencias);
     return count($this->_errores) == 0;
 }
 /**
  * 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']);
 }