/**
  * 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;
 }
Example #3
0
 /**
  * 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();
     }
 }