/** * Valida que la cantidad indicada esté disponible en * el almacén, ubicación y lote * * @return boolean */ public function validaLogico() { parent::validaLogico(); $articulo = new Articulos($this->IDArticulo); $bloqueoStock = $articulo->getBloqueoStock()->getIDTIpo() == '1'; if ($this->Unidades == 0) { $this->_errores[] = "Debe indicar una cantidad distinta a cero"; } $almacen = new Almacenes($this->IDAlmacen); //print_r($this); if ($almacen->getControlUbicaciones()->getIDTipo() == '1' and $this->IDUbicacion == 0) { $this->_errores[] = "Debe indicar la ubicación"; } unset($almacen); if ($bloqueoStock) { $udadMedidaVenta = $articulo->getUMV(); $udadMedidaAlmacen = $articulo->getUMA(); $stock = new Existencias(); $existencias = $stock->getStock($this->IDArticulo, $this->IDAlmacen, $this->IDLote, $this->IDUbicacion); unset($stock); // Calcular las cantidades de ese articulo, almacen, lote y ubicación que estan // en lineas de expediciones sin estar expedidas aún. O sea lo que está en // proceso de expedición. No tengo en cuenta los valores de la BD de la línea actual // porque puede que hayan cambiado. $filtro = "IDLinea<>'{$this->IDLinea}' and Expedida='0' and IDAlmacen='{$this->IDAlmacen}' and IDLote='{$this->IDLote}' and IDUbicacion='{$this->IDUbicacion}'"; $expedicion = new Expediciones(); $rows = $expedicion->cargaCondicion("sum(Unidades) as Unidades,sum(Pales) as Pales,sum(Cajas) as Cajas", $filtro); $row = $rows[0]; $row['Unidades'] += $this->Unidades; $row['Pales'] += $this->Pales; $row['Cajas'] += $this->Cajas; unset($expedicion); if ($existencias['DI'] < $articulo->convertUnit('UMV', 'UMA', $row['Unidades'])) { $this->_errores[] = "Hay " . round($articulo->convertUnit('UMA', 'UMV', $existencias['DI']), 2) . " {$udadMedidaVenta} (" . round($existencias['DI'], 2) . " {$udadMedidaAlmacen}) disponibles para ese lote y ubicación"; } if ($existencias['CA'] < $row['Cajas']) { $this->_errores[] = "Hay {$existencias['CA']} cajas disponibles para ese lote y ubicacion"; } if ($existencias['PT'] < $row['Pales']) { $this->_errores[] = "Hay {$existencias['PT']} pales disponibles para ese lote y ubicacion"; } } unset($articulo); return count($this->_errores) == 0; }
/** * 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; }
public function listAction($entidad = '', $idEntidad = '') { if ($entidad == '') { $entidad = $this->request[2]; } if ($idEntidad == '') { $idEntidad = $this->request[3]; } $objetoEntidad = new $entidad($idEntidad); $lis = new Expediciones(); $rows = $lis->cargaCondicion('IDLinea', "Entidad='{$entidad}' AND IDEntidad='{$idEntidad}'", 'IDLineaEntidad,IDLinea ASC'); unset($lis); foreach ($rows as $row) { $lineas[] = new Expediciones($row['IDLinea']); } if ($entidad == "AlbaranesCab" and count($lineas) == 0) { // En un albarán que no tiene nada que expedir, posiblemente esté vacío // o sus artículos no son inventariables. Lo expedido directamente $objetoEntidad->expide(); } if ($objetoEntidad->getIDEstado()->getIDTipo() == '1') { $template = 'ExpedirLineas/form.html.twig'; } else { $template = 'ExpedirLineas/list.html.twig'; } $this->values['listado']['data'] = $lineas; $this->values['entidad'] = $entidad; $this->values['idEntidad'] = $idEntidad; $this->values['objetoEntidad'] = $objetoEntidad; unset($objetoEntidad); unset($lineas); return array('template' => $template, 'values' => $this->values); }