/** * Recepciona la línea de traspaso de tipo 1 (la de entrada) * Actualiza las existencias y marca la línea como expedida. * * NO SE REALIZA NINGUN TRATAMIENTO CON LAS EXISTENCIAS SI EL ARTICULO NO ES INVENTARIABLE * * @return boolean */ public function recepciona() { $ok = true; $articulo = new Articulos($this->IDArticulo); $esInventariable = $articulo->getInventario()->getIDTipo(); if ($esInventariable) { // Quitar 'entrando' $exi = new Existencias(); $ok = $exi->quitaEntrando($this->IDAlmacen, $this->IDArticulo, $this->Unidades, $this->UnidadMedida); unset($exi); } if ($esInventariable and $ok) { // Recepcionar las líneas de recepción de la línea de traspaso $recepcion = new Recepciones(); $unidadesNetas = $recepcion->recepciona("TraspasosCab", $this->IDLinea); unset($recepcion); } else { $unidadesNetas = $this->Unidades; } if ($ok) { // Marcar la línea de traspaso como recepcionada y // Poner las unidades netas recibidas // Recalcular la línea // Actualiza los precios del artículo $this->setIDEstado(3); $this->setUnidades($unidadesNetas); $this->TotalizaLinea(); if ($unidadesNetas != 0) { $articulo = new Articulos($this->IDArticulo); $articulo->actualizaPrecios($unidadesNetas, abs($this->Importe / $unidadesNetas)); unset($articulo); } $this->save(); } return $ok; }
/** * Recepciona la línea de pedido. * Pasa las existencias del estado "Entrando" (1) al estado "Recepionada" (2) * y marca la línea como Recepcionada. * * Las unidades recibidas pueden ser diferentes a las pedidas. * * Recalcula los precios (Pvd,Pmc,Margen,Pvp) del artículo en base a las unidades recepcionadas * * @return boolean */ public function recepciona() { $ok = true; $articulo = new Articulos($this->IDArticulo); $esInventariable = $articulo->getInventario()->getIDTipo(); if ($esInventariable) { // Quitar 'entrando' $exi = new Existencias(); $ok = $exi->quitaEntrando($this->IDAlmacen, $this->IDArticulo, $this->Unidades, $this->UnidadMedida); unset($exi); } if ($esInventariable and $ok) { // Recepcionar las líneas de recepción de la línea de pedido $recepcion = new Recepciones(); $unidadesNetas = $recepcion->recepciona("PedidosCab", $this->IDLinea); unset($recepcion); } else { $unidadesNetas = $this->Unidades; } if ($ok) { // Marcar la línea de pedido como recepcionada y // Poner las unidades netas recibidas y las unidades pendientes de facturar // Recalcular la línea de pedido en base a las Unidades Recibidas // Actualiza los precios del artículo $this->setIDEstado(2); $this->setUnidadesRecibidas($unidadesNetas); $this->setUnidadesPtesFacturar($unidadesNetas); $this->setImporte($unidadesNetas * $this->Precio * (1 - $this->Descuento / 100)); if ($unidadesNetas != 0) { $articulo = new Articulos($this->IDArticulo); $articulo->actualizaPrecios($unidadesNetas, abs($this->Importe / $unidadesNetas)); unset($articulo); } $this->save(); } return $ok; }
/** * Anula la confirmación del pedido * Pasando del estado CONFIRMADO (1) a PTE. CONFIRMAR (0) * Solo se tienen en cuenta los artículos inventariables. * Anula del registro de existencias las cantidades pendientes de entrada */ public function anulaConfirmacion() { // Si está confirmado if ($this->getIDEstado()->getIDTipo() == 1) { $lineas = new PedidosLineas(); $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName(); $articulos = new Articulos(); $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName(); $em = new EntityManager($this->getConectionName()); $query = "SELECT t1.IDArticulo, t1.IDAlmacen, sum(t1.Unidades) as Entrando, t1.UnidadMedida\n FROM {$tablaLineas} as t1, {$tablaArticulos} as t2\n WHERE t1.IDPedido='{$this->IDPedido}'\n AND t1.IDEstado='1'\n AND t1.IDArticulo=t2.IDArticulo\n AND t2.Inventario='1'\n GROUP BY t1.IDArticulo, t1.IDAlmacen, t1.UnidadMedida"; $em->query($query); $rows = $em->fetchResult(); $em->desConecta(); // Quitar previsión de entrada $exi = new Existencias(); foreach ($rows as $row) { $exi->quitaEntrando($row['IDAlmacen'], $row['IDArticulo'], $row['Entrando'], $row['UnidadMedida'], $this->Deposito); } unset($exi); // Marcar como NO CONFIRMADAS las líneas de pedido y // quitar la eventual asignación de lotes y UnidadesRecbidas $lineas->queryUpdate(array("IDEstado" => 0), "IDPedido='{$this->IDPedido}' and IDEstado='1'"); // Borrar las eventuales líneas de recepción $recepciones = new Recepciones(); $recepciones->queryDelete("Entidad='PedidosCab' and IDEntidad='{$this->IDPedido}'"); // Anular la reserva en la cabecera del pedido // y quitar la fecha prevista de entrega y las posibles incidencias $this->setIDEstado(0); $this->setFechaEntrega('00/00/0000'); $this->setIncidencias(''); $this->save(); } }