/**
  * Expide la linea de traspaso de tipo 0 (la de envío)
  * Actualiza las existencias y marca la línea como expedida.
  * Genera la línea de traspaso de tipo 1 (la de entrada) poniendo el 'entrando' y
  * generar tantas líneas de recepción como líneas de expedición se hayan generado
  * para mantener las mismas unidades y lotes
  *
  * NO SE REALIZA NINGUN TRATAMIENTO CON LAS EXISTENCIAS SI EL ARTICULO NO ES INVENTARIABLE
  *
  * @return boolean
  */
 public function expide()
 {
     $ok = true;
     $articulo = new Articulos($this->IDArticulo);
     $esInventariable = $articulo->getInventario()->getIDTipo();
     if ($esInventariable) {
         // Quitar la reserva de mercancía
         $exi = new Existencias();
         $ok = $exi->quitaReserva($this->IDAlmacen, $this->IDArticulo, $this->Unidades, $this->UnidadMedida);
         unset($exi);
     }
     if ($esInventariable and $ok) {
         // Expedir la línea de traspaso
         $expedicion = new Expediciones();
         $unidadesNetas = $expedicion->expide("TraspasosCab", $this->IDLinea);
         unset($expedicion);
     } else {
         $unidadesNetas = $this->Unidades;
     }
     if ($ok) {
         // Marcar la línea de traspaso como expedida y
         // poner las unidades netas expedidas
         $this->setIDEstado(2);
         $this->setUnidades($unidadesNetas);
         $this->totalizaLinea();
         $this->save();
         // Generar la línea de traspaso de tipo 1 (la de entrada) y poner el entrando
         $idAlmacenDestino = $this->getIDTraspaso()->getIDAlmacenDestino()->getIDAlmacen();
         $lineaEntrada = new TraspasosLineas();
         $lineaEntrada->setIDLinea('');
         $lineaEntrada->setIDTraspaso($this->IDTraspaso);
         $lineaEntrada->setTipo(1);
         $lineaEntrada->setIDArticulo($this->IDArticulo);
         $lineaEntrada->setDescripcion($this->Descripcion);
         $lineaEntrada->setUnidades($this->Unidades);
         $lineaEntrada->setUnidadMedida($this->UnidadMedida);
         $lineaEntrada->setIDAlmacen($idAlmacenDestino);
         $lineaEntrada->setPrecio($this->Precio);
         $lineaEntrada->setImporte($this->Importe);
         $lineaEntrada->setIDEstado(0);
         $idLineaEntrada = $lineaEntrada->create();
         unset($lineaEntrada);
         // Generar tantas líneas de recepción como líneas de expedición haya para
         // la línea de traspaso expedida
         $expedicion = new Expediciones();
         $rows = $expedicion->cargaCondicion("*", "Entidad='TraspasosCab' and IDLineaEntidad='{$this->IDLinea}'");
         unset($expedicion);
         foreach ($rows as $row) {
             $recepcion = new Recepciones();
             $recepcion->setEntidad($row['Entidad']);
             $recepcion->setIDEntidad($row['IDEntidad']);
             $recepcion->setIDLineaEntidad($idLineaEntrada);
             $recepcion->setIDAlmacen($idAlmacenDestino);
             $recepcion->setIDAlmacenero($_SESSION['usuarioPortal']['Id']);
             $recepcion->setIDArticulo($row['IDArticulo']);
             $recepcion->setUnidades($row['Unidades']);
             $recepcion->setUnidadMedida($row['UnidadMedida']);
             $recepcion->setUnidadesBrutas($row['Unidades']);
             $recepcion->setUnidadesNetas($row['Unidades']);
             $recepcion->setIDLote($row['IDLote']);
             $recepcion->create();
             unset($recepcion);
         }
         // Poner el entrando
         $exi = new Existencias();
         $ok = $exi->hazEntrando($idAlmacenDestino, $this->IDArticulo, $this->getUnidades(), $this->getUnidadMedida());
         unset($exi);
     }
     unset($articulo);
     return $ok;
 }
 private function recalcula($idAlmacen)
 {
     // Poner las reservadas y el entrando a cero
     $stock = new Existencias();
     $stock->queryUpdate(array("Reservadas" => 0, "Entrando" => 0), "IDAlmacen='{$idAlmacen}'");
     // Borrar los registros de stock que estén a cero
     $stock->queryDelete("IDAlmacen='{$idAlmacen}' and Reales=0 and Pales=0 and Cajas=0 and Reservadas=0 and Entrando=0");
     // Calcular las reservas de los artículos inventariables
     $lineas = new AlbaranesLineas();
     $articulos = new Articulos();
     $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName();
     unset($lineas);
     unset($articulos);
     $query = "select l.IDArticulo,a.Codigo,l.Descripcion, sum(l.Unidades) Unidades,l.UnidadMedida ";
     $query .= "from {$tablaLineas} as l ";
     $query .= "join {$tablaArticulos} as a on l.IDArticulo=a.IDArticulo ";
     $query .= "where l.IDEstado='1' and a.Inventario='1' ";
     $query .= "group by l.IDArticulo";
     $em = new EntityManager($_SESSION['project']['conection']);
     $em->query($query);
     $rows = $em->fetchResult();
     $em->desConecta();
     unset($em);
     $resultado['reservas'] = $rows;
     foreach ($rows as $row) {
         $stock = new Existencias();
         $stock->hazReserva($idAlmacen, $row['IDArticulo'], $row['Unidades'], $row['UnidadMedida']);
     }
     // Calcular el entrando de los artículos inventariables
     $lineas = new PedidosLineas();
     $articulos = new Articulos();
     $tablaLineas = $lineas->getDataBaseName() . "." . $lineas->getTableName();
     $tablaArticulos = $articulos->getDataBaseName() . "." . $articulos->getTableName();
     unset($lineas);
     unset($articulos);
     $query = "select l.IDArticulo,a.Codigo,l.Descripcion,sum(l.Unidades) Unidades,l.UnidadMedida ";
     $query .= "from {$tablaLineas} as l ";
     $query .= "join {$tablaArticulos} as a on l.IDArticulo=a.IDArticulo ";
     $query .= "where l.IDEstado='1' and a.Inventario='1' ";
     $query .= "group by l.IDArticulo";
     $em = new EntityManager($_SESSION['project']['conection']);
     $em->query($query);
     $rows = $em->fetchResult();
     $em->desConecta();
     unset($em);
     $resultado['entrando'] = $rows;
     foreach ($rows as $row) {
         $stock = new Existencias();
         $stock->hazEntrando($idAlmacen, $row['IDArticulo'], $row['Unidades'], $row['UnidadMedida']);
     }
     return $resultado;
 }
Example #3
0
 /**
  * Confirma el pedido, que consiste actualizar las existencias a ENTRANDO.
  * Pasando del estado PTE. CONFIRMAR (0) a CONFIRMADO (1).
  * Para poder confirmar es obligatorio indicar una fecha prevista de entrega
  * Solo se tienen en cuenta los artículos inventariables.
  * Anota en el registro de existencias las cantidades pendientes de entrada
  */
 public function confirma()
 {
     if ($this->getFechaEntrega() == '00/00/0000') {
         $this->_errores[] = "Antes de confirmar el pedido debe indicar una fecha prevista de entrega";
     } elseif ($this->FechaEntrega < $this->Fecha) {
         $this->_errores[] = "La fecha prevista de entrega debe ser igual o mayor a la fecha del pedido";
     }
     // Si no está confirmado
     if ($this->getIDEstado()->getIDTipo() == 0 and count($this->_errores) == 0) {
         $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='0'\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();
         // Poner previsión de entrada
         $exi = new Existencias();
         foreach ($rows as $row) {
             $exi->hazEntrando($row['IDAlmacen'], $row['IDArticulo'], $row['Entrando'], $row['UnidadMedida'], $this->Deposito);
         }
         unset($exi);
         // Marcar como Entrando las líneas de pedido
         $lineas->queryUpdate(array("IDEstado" => 1), "IDPedido='{$this->IDPedido}' and IDEstado='0'");
         // Confirmar la cabecera del pedido
         $this->setIDEstado(1);
         $this->save();
     }
 }