/** * Descatalogar los lotes (poner no vigentes) que no tengan existencias * entre todos los almacenes de la empresa */ public function DescatalogarAction() { if ($this->values['permisos']['permisosModulo']['UP']) { $lote = new Lotes(); $tablaLotes = $lote->getDataBaseName() . "." . $lote->getTableName(); $existencias = new Existencias(); $tablaExistencias = $existencias->getDataBaseName() . "." . $existencias->getTableName(); unset($existencias); $em = new EntityManager($lote->getConectionName()); if ($em->getDbLink()) { $query = "\n UPDATE {$tablaLotes} SET Vigente='0'\n WHERE IDLote not in (\n SELECT IDLote\n FROM {$tablaExistencias} e\n WHERE (\n IDLote>0 AND\n (\n Reales>0 OR\n Reservadas>0 OR\n Entrando>0\n )\n )\n GROUP BY IDLote\n ORDER BY IDLote\n );"; $em->query($query); $em->desConecta(); } unset($lote); return $this->indexAction(); } else { return array('template' => '_global/forbiden.html.twig'); } }
/** * Devuelve un array con todos los lotes y ubicaciones donde * hay existencias reales del artículo en el almacén indicado * * Si se indica el parametro 'cantidad' solo devuelve los lotes-ubicaciones * necesarios para satisfacer esa cantidad. En caso contrario, devuelve todos. * * El array tiene 4 columnas: IDLote, FechaCaducidad, IDUbicacion, Reales * El orden es ascendente por FechaCadudidad * * @param integer $idAlmacen El id de almacén * @param decimal $cantidad La cantidad que se necesita (opcional) * @return array Los Lotes, Ubicaciones y Existencias Reales */ public function getLotesUbicaciones($idAlmacen, $cantidad = 0) { $lotesUbicaciones = array(); $tablaExistencias = new Existencias(); $tablaLotes = new Lotes(); $this->conecta(); if (is_resource($this->_dbLink)) { //Lotes con existencias. //$query = "Call LotesUbicacionesArticulo({$idAlmacen},{$this->IDArticulo});"; $query = "SELECT DISTINCT e.IDLote, l.FechaCaducidad, e.IDUbicacion, e.Reales\n FROM \n {$tablaExistencias->getDataBaseName()}.{$tablaExistencias->getTableName()} e, \n {$tablaLotes->getDataBaseName()}.{$tablaLotes->getTableName()} l\n WHERE\n e.IDArticulo = '{$this->IDArticulo}' AND\n e.IDAlmacen= '{$idAlmacen}' AND\n e.IDLote = l.IDLote AND\n e.Reales > 0\n ORDER BY l.FechaCaducidad, e.Reales ASC"; $this->_em->query($query); $lotesUbicaciones = $this->_em->fetchResult(); $this->_em->desConecta(); unset($this->_em); } unset($tablaExistencias); unset($tablaLotes); if ($cantidad > 0) { //Devolver solo lo necesario para satisfacer esta cantidad $aux = array(); $acumulado = 0; foreach ($lotesUbicaciones as $item) { $aux[] = $item; $acumulado += $item['Reales']; if ($acumulado >= $cantidad) { break; } } $lotesUbicaciones = $aux; } return $lotesUbicaciones; }