/** * Devuelve separados por guión la descripción de los lotes * que se han expedido en la línea de elaboración * * @return string Descripcion de los lotes */ public function getLotesExpedidos() { $expedicion = new Expediciones(); $lotes = $expedicion->getLotes("ManufacCab", $this->IDLinea); unset($expedicion); return $lotes; }
/** * Expide todas las líneas de expedición correspondientes * a la entidad $entidad y línea de entidad $idLineaEntidad * * @param string $entidad La entidad padre (AlbaranesCab,ManufacCab,TraspasosCab) * @param integer $idLineaEntidad El id de la línea de la entidad padre * @return float La cantidad de unidades expedidas */ public function expide($entidad, $idLineaEntidad) { $unidadesExpedidas = 0; $rows = $this->cargaCondicion("*", "Entidad='{$entidad}' and IDLineaEntidad='{$idLineaEntidad}' and Expedida='0'"); foreach ($rows as $row) { // Si no se han indicado unidades a expedir, // no se actualiza stock ni se genera mvto de almacen. if ($row['Unidades'] != 0) { $valores = array('UM' => $row['UnidadMedida'], 'Reales' => $row['Unidades'], 'Pales' => $row['Pales'], 'Cajas' => $row['Cajas'], 'Reservadas' => 0, 'Entrando' => 0); $mvtoAlmacen = new MvtosAlmacen(); $ok = $mvtoAlmacen->genera($row['Entidad'], 'S', $row['IDEntidad'], $row['IDAlmacen'], $row['IDArticulo'], $row['IDLote'], $row['IDUbicacion'], 0, $valores); // Valores con los que actualizar } $unidadesExpedidas += $row['Unidades']; if ($ok) { // Marcar la linea de expedición como expedida $expedicion = new Expediciones($row['IDLinea']); $expedicion->setExpedida(1); $expedicion->save(); } else { $expedicion = new Expediciones($row['IDLinea']); $expedicion->setExpedida(0); $expedicion->setUnidades(0); $expedicion->save(); $unidadesExpedidas = 0; } } unset($mvtoAlmacen); unset($expedicion); return $unidadesExpedidas; }
/** * Anula la confirmacion de la orden de traspaso, que consiste en: * * 1.- Quitar la reserva de mercancia en el registro de existencias sin indicar lote ni ubicacion * solo para aquellos artículos que estén sujetos a inventario * 2.- Poner la cabecera de la orden de traspaso y sus lineas en estado PTE. DE CONFIRMAR (0) * */ public function anulaConfirmacion() { // Si está confirmado if ($this->getIDEstado()->getIDTipo() == 1) { $em = new EntityManager($this->getConectionName()); $query = "SELECT t1.IDArticulo, t1.IDAlmacen, t1.Unidades, t1.UnidadMedida\n FROM {$this->_dataBaseName}.ErpTraspasosLineas as t1, ErpArticulos as t2\n WHERE t1.IDTraspaso='{$this->IDTraspaso}'\n AND t1.Tipo='0'\n AND t1.IDEstado='1'\n AND t1.IDArticulo=t2.IDArticulo\n AND t2.Inventario='1'"; $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); // Quitar las reservas $exi = new Existencias(); foreach ($rows as $row) { $exi->quitaReserva($row['IDAlmacen'], $row['IDArticulo'], $row['Unidades'], $row['UnidadMedida']); } unset($exi); // Poner en estado de PTE DE CONFIRMAR las líneas de la orden de traspaso de tipo 0 (salida) $lineas = new TraspasosLineas(); $lineas->queryUpdate(array("IDEstado" => 0), "IDTraspaso='{$this->IDTraspaso}' and IDEstado='1' and Tipo='0'"); unset($lineas); // Borrar las eventuales lineas de expedicion $expediciones = new Expediciones(); $expediciones->queryDelete("Entidad='TraspasosCab' and IDEntidad='{$this->IDTraspaso}'"); unset($expediciones); // Anular la reserva en la cabecera de la orden de traspaso $this->setIDEstado(0); $this->save(); } }
/** * Devuelve separados por guión la descripción de los lotes * que se han servido en la línea de traspaso * * @return string Descripcion de los lotes */ public function getLotesEnviados() { $expedicion = new Expediciones(); $lotes = $expedicion->getLotes("TraspasosCab", $this->IDLinea); unset($expedicion); return $lotes; }
/** * Devuelve separados por guión la descripción de los lotes * que se han servido en la línea de albarán * * @return string Descripcion de los lotes */ public function getLotes() { $expedicion = new Expediciones(); $lotes = $expedicion->getLotes("AlbaranesCab", $this->IDLinea); unset($expedicion); return $lotes; }
/** * Preasigna stock sin control de trazabilidad ni de ubicación * * Si hay stock pero no es suficiente, se crea la línea de expedición proponiendo el que hay. * * Si NO hay stock: * * Caso 1) El artículo bloquea stock: no se crea la línea de expedición * Caso 2) El artículo NO bloquea stock: se crea la línea de expedición proponiendo 0 unidades * * @param AlbaranesLineas $lineaAlbaran * @param <type> $idRepartidor */ private function preasignaStock($entidad, $idEntidad, $linea, $idRepartidor = '') { echo "asdfasdfasdfasdfasdf"; $idLineaEntidad = $linea->getPrimaryKeyValue(); $articulo = $linea->getIDArticulo(); $idAlmacen = $linea->getIDAlmacen()->getIDAlmacen(); $unidades = $linea->getUnidades(); $unidadMedidaOrigen = $linea->getUnidadMedida(); $unidadesAlmacen = $articulo->convertUnit($unidadMedidaOrigen, 'UMA', $unidades); $bloqueoStock = $articulo->getBloqueoStock()->getIDTipo() == '1'; $exi = new Existencias(); $existencias = $exi->getStock($articulo->getIDArticulo(), $idAlmacen); unset($exi); if ($existencias['RE'] >= $unidadesAlmacen) { $asignado = $articulo->convertUnit('UMA', $unidadMedidaOrigen, $unidadesAlmacen); $stockInsuficiente = false; } else { $stockInsuficiente = true; $asignado = $articulo->convertUnit('UMA', $unidadMedidaOrigen, $existencias['RE']); } if ($asignado <= 0 and !$bloqueoStock) { $asignado = 0; } $lineaExpedicion = new Expediciones(); $lineaExpedicion->setEntidad($entidad); $lineaExpedicion->setIDEntidad($idEntidad); $lineaExpedicion->setIDLineaEntidad($idLineaEntidad); $lineaExpedicion->setIDAlmacen($idAlmacen); $lineaExpedicion->setIDAlmacenero($_SESSION['usuarioPortal']['Id']); $lineaExpedicion->setIDRepartidor($idRepartidor); $lineaExpedicion->setIDArticulo($articulo->getIDArticulo()); if ($existencias['RE'] > 0) { $asignado = $existencias['RE'] > $unidadesAlmacen ? $unidadesAlmacen : $existencias['RE']; } else { $asignado = 0; } $asignado = $articulo->convertUnit('UMA', $unidadMedidaOrigen, $asignado); $lineaExpedicion->setUnidades($asignado); $lineaExpedicion->setUnidadMedida($unidadMedidaOrigen); $lineaExpedicion->setIDLote(0); $lineaExpedicion->setIDUbicacion(0); $lineaExpedicion->setFlagTrazabilidad(0); $lineaExpedicion->setFlagUbicacion(0); $lineaExpedicion->setFlagSinStock($stockInsuficiente); $lineaExpedicion->create(); }