/** * Cierra el inventario. * * Consiste en generar los movimientos de almacén necesarios * para dejar las existencias de cada articulo/lote/ubicación * según lo indicado en las líneas de inventario */ public function cierra() { $ok = true; // Si no está cerrado if ($this->Cerrado == 0) { $lineas = new InventariosLineas(); $rows = $lineas->cargaCondicion("*", "IDInventario='{$this->IDInventario}'"); unset($lineas); $exi = new Existencias(); foreach ($rows as $row) { // Buscar la existencias que hay para calcular el mvto // de almacén de tal forma que se queden como dice el inventario $stock = $exi->cargaCondicion("*", "IDAlmacen='{$this->IDAlmacen}' and IDArticulo='{$row['IDArticulo']}' and IDLote='{$row['IDLote']}' and IDUbicacion='{$row['IDUbicacion']}'"); $valores = array('UM' => 'UMA', 'Reales' => $row['Stock'] - $stock[0]['Reales'], 'Pales' => $row['Pales'] - $stock[0]['Pales'], 'Cajas' => $row['Cajas'] - $stock[0]['Cajas'], 'Reservadas' => 0, 'Entrando' => 0); /** if ($valores['Reales']>=0) $signo = "E"; else { $signo = "S"; $valores['Reales'] = abs($valores['Reales']); } */ $signo = "E"; $mvtoAlmacen = new MvtosAlmacen(); $ok = $mvtoAlmacen->genera('InventariosCab', $signo, $this->IDInventario, $this->IDAlmacen, $row['IDArticulo'], $row['IDLote'], $row['IDUbicacion'], 0, $valores); // Valores con los que actualizar } unset($exi); unset($mvtoAlmacen); // Marcar el inventario como cerrado if ($ok) { $this->setCerrado(1); $this->save(); } } return $ok; }
private function LineasInventario($fecha, $id, $dbLink) { $query = "select i.*,a.IDArticulo as id,a.Descripcion from {$this->dbOrigen}.inventarios i LEFT JOIN {$this->dbDestino}.ErpArticulos a on i.IDArticulo=a.Codigo WHERE DATE_FORMAT(Fecha,'%Y-%m-%d')='{$fecha}' and a.IDArticulo>0"; $result = mysql_query($query, $dbLink); while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $l = new InventariosLineas(); $l->setIDInventario($id); $l->setIDArticulo($row['id']); $l->setIDLote(0); $l->setIDUbicacion(0); $l->setDescripcion($row['Descripcion']); $l->setStock($row['Stock']); $pk = $l->create(); if (!$id) { $errores[] = $l->getErrores(); $nErrores++; } else { $l->setIDLinea($pk); $l->setPrimaryKeyMD5(md5($pk)); $l->save(); $nItems++; } } print_r($errores); }
/** * 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; }