/** * 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; }