/**
  * 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');
     }
 }
示例#2
0
 /**
  * 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;
 }