Example #1
0
 /**
  * Devuelve un array con todas las ubicaciones del almacén
  * El array es del tipo array('Id' => , 'Value' => )
  *
  * @param string Filtro para la ubicacion (defecto %)
  * @return array Las ubicaciones del almacen
  */
 public function getUbicaciones($filtroUbicacion = "%")
 {
     $mapa = new AlmacenesMapas();
     $ubicaciones = $mapa->fetchAll($this->IDAlmacen, $filtroUbicacion);
     unset($mapa);
     return $ubicaciones;
 }
Example #2
0
 /**
  * Devuelve un array con las ubicaciones del $idAlmacen
  * donde hay existencias del artículo y le añade al final
  * el resto de ubicaciones.
  *
  * Si el parámetro $todas se pone al false, solo devuelve las ubicaciones
  * donde haya existencias.
  *
  * Se utiliza principalmente en los procesos de recepción de mercancía
  * (recepción de pedidos y de elaboraciones)
  *
  * @param integer $idAlmacen El id de almacén
  * @param string $filtroUbicacion Filtro de la ubicación (defecto %)
  * @param boolean $todas
  * @return array Las ubicaciones array('Id' => IDUbicacion, 'Value' => Ubicacion, 'Reales' => Existencias Reales)
  */
 public function getUbicaciones($idAlmacen, $filtroUbicacion = "%", $todas = TRUE)
 {
     $ubicaciones = array();
     $mapa = new AlmacenesMapas();
     $existencias = new Existencias();
     $em = new EntityManager($this->getConectionName());
     if ($em->getDbLink()) {
         //Ubicaciones donde haya existencias.
         //$query = "Call UbicacionesArticulo({$idAlmacen},{$this->IDArticulo});";
         $query = "SELECT DISTINCT e.IDUbicacion AS Id, m.Ubicacion AS Value, e.Reales as Reales\n                        FROM\n                            {$existencias->getDataBaseName()}.{$existencias->getTableName()} e,\n                            {$mapa->getDataBaseName()}.{$mapa->getTableName()} m\n                        WHERE\n                            e.IDUbicacion = m.IDUbicacion AND\n                            e.IDAlmacen= '{$idAlmacen}' AND\n                            e.IDArticulo= '{$this->IDArticulo}' AND\n                            e.Reales > 0 AND\n                            m.Ubicacion LIKE '{$filtroUbicacion}'";
         $em->query($query);
         $habituales = $em->fetchResult();
         $em->desConecta();
         unset($em);
     }
     if ($todas) {
         $habituales[] = array('Id' => '0', 'Value' => ':: Resto de Ubicaciones ::');
         $ubicaciones = array_merge($habituales, $mapa->fetchAll($idAlmacen, $filtroUbicacion));
     } else {
         $ubicaciones = $habituales;
     }
     unset($mapa);
     unset($existencias);
     return $ubicaciones;
 }
 /**
  * Importar el contenido del archivo $filename, genera un archivo log
  * cuyo path devuelve.
  * 
  * Comprueba la existencias de los lotes y ubicaciones indicados
  * Si no existe el lote, lo crea.
  *
  * @param string $fileName
  * @return string El path al archivo log generado en la importación
  */
 private function importarArchivo($fileName)
 {
     set_time_limit(0);
     $archivoImportar = new Archivo($fileName);
     if ($archivoImportar->open("r")) {
         // Abrir en modo escritura el archivo de log.
         $usuario = new Agentes($_SESSION['usuarioPortal']['Id']);
         $pathArchivoLog = "docs/docs" . $_SESSION['emp'] . "/tmp/logImportarInventario.txt";
         $archivoLog = new Archivo($pathArchivoLog);
         $archivoLog->open("w");
         $archivoLog->writeLine("IMPORTACIÓN DE ARCHIVO DE INVENTARIO");
         $archivoLog->writeLine("FECHA: " . date('d-m-Y H:i:s'));
         $archivoLog->writeLine("ARCHIVO: " . $archivoImportar->getBaseName());
         $archivoLog->writeLine("USUARIO: " . $usuario->getNombre());
         $archivoLog->writeLine(str_repeat("-", 50));
         unset($usuario);
         $fila = 1;
         $fallidos = 0;
         $cargados = 0;
         $primeraLinea = $archivoImportar->readLine();
         // Pongo los títulos con la primera letra en mayúscula y le doy
         // la vuelta al array
         $titulos = $primeraLinea;
         foreach ($titulos as $key => $value) {
             $titulos[$key] = ucwords(trim($value));
         }
         $titulos = array_flip($titulos);
         while (($linea = $archivoImportar->readLine()) !== FALSE) {
             $fila++;
             $lineaInventario = new InventariosLineas();
             $lineaInventario->setIDInventario($this->request['InventariosCab']['IDInventario']);
             // Buscar el id del articulo a partir del codigo
             $articulo = new Articulos();
             $articulo = $articulo->find("Codigo", trim($linea[$titulos['Codigo']]));
             $lineaInventario->setIDArticulo($articulo->getIDArticulo());
             // Buscar el id del lote a partir del nombre de lote
             $nombreLote = trim($linea[$titulos['Lote']]);
             $lote = new Lotes();
             $rows = $lote->cargaCondicion("IDLote", "IDArticulo='{$articulo->getIDArticulo()}' and Lote='" . $nombreLote . "'");
             $idLote = $rows[0]['IDLote'];
             // Si no existe el lote, lo creo.
             if ($idLote == '' and $nombreLote != '') {
                 $lote->setIDArticulo($articulo->getIDArticulo());
                 $lote->setLote($nombreLote);
                 $idLote = $lote->create();
             }
             $lineaInventario->setIDLote($idLote);
             // Buscar la id de la ubicacion del almacen en curso
             $ubicacion = new AlmacenesMapas();
             $rows = $ubicacion->cargaCondicion("IDUbicacion", "IDAlmacen='{$this->request['InventariosCab']['IDAlmacen']}' and Ubicacion='" . trim($linea[$titulos['Ubicacion']]) . "'");
             $lineaInventario->setIDUbicacion($rows[0]['IDUbicacion']);
             // A los valores numéricos les cambio la coma decimal por el punto
             $lineaInventario->setStock(str_replace(",", ".", $linea[$titulos['Stock']]));
             $lineaInventario->setCajas(str_replace(",", ".", $linea[$titulos['Cajas']]));
             $lineaInventario->validaLogico();
             if (count($lineaInventario->getErrores()) == 0) {
                 $lineaInventario->create();
                 $cargados++;
             } else {
                 // Si hay errores de validacion muestro la linea y los errores
                 $fallidos++;
                 $archivoLog->writeLine("Error en línea: " . $fila);
                 foreach ($linea as $key => $value) {
                     $string = "\t" . $primeraLinea[$key] . " : " . $value;
                     $archivoLog->writeLine($string);
                 }
                 foreach ($lineaInventario->getErrores() as $error) {
                     $archivoLog->writeLine("\t* " . $error);
                 }
             }
         }
         $archivoLog->writeLine("" . str_repeat("-", 50));
         $archivoLog->writeLine("Total registros   : " . ($fila - 1));
         $archivoLog->writeLine("Registros cargados: " . $cargados);
         $archivoLog->writeLine("Registros fallidos: " . $fallidos);
         $archivoImportar->close();
         $archivoLog->close();
         unset($archivoLog);
     } else {
         $resultado[] = "El archivo de importación no existe";
     }
     unset($archivoImportar);
     return $pathArchivoLog;
 }
Example #4
0
 /**
  * Devuelve un array con los ubicaciones del almacen $idAlmacen
  * donde hay existencias reales del lote en curso
  * 
  * El array tiene tres elementos:
  * 
  *  Id : El id de la ubicacion
  * 
  *  Value: El nombre de la ubicacion
  * 
  *  Reales: Las existencias reales del lote
  * 
  * @param integer $idAlmacen El id de almacen
  * @return array Array de ubicaciones
  */
 public function getUbicacionesStock($idAlmacen)
 {
     $ubicaciones = array();
     $mapas = new AlmacenesMapas();
     $mapasDataBase = $mapas->getDataBaseName();
     $mapasTableName = $mapas->getTableName();
     unset($mapas);
     $this->conecta();
     if (is_resource($this->_dbLink)) {
         //$query = "Call UbicacionesLote('{$idAlmacen}','{$this->IDLote}','{$filtroUbicacion}');";
         $query = "SELECT e.IDUbicacion AS Id, m.Ubicacion AS Value, e.Reales AS Reales \n                        FROM\n                            {$this->_dataBaseName}.ErpExistencias e,\n                            {$mapasDataBase}.{$mapasTableName} as m\n                        WHERE\n                            e.IDAlmacen= '{$idAlmacen}' AND\n                            e.IDLote= '{$this->IDLote}' AND\n                            e.Reales > 0 AND\n                            e.IDUbicacion = m.IDUbicacion\n                        ORDER BY m.Ubicacion";
         $this->_em->query($query);
         $ubicaciones = $this->_em->fetchResult();
         $this->_em->desConecta();
         unset($this->_em);
     }
     return $ubicaciones;
 }