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