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