/** * Calculo las unidades (kgrs) netas restando a las unidades brutas * Comprueba que se haya indicado el lote si procede( * Comprueba que se haya indicado la ubiación si procede * * @return boolean */ public function validaLogico() { parent::validaLogico(); $this->setUnidadesNetas($this->UnidadesBrutas - ($this->Pales * $this->DestarePale + $this->Cajas * $this->DestareCaja)); if ($this->Unidades == 0 or $this->UnidadesNetas == 0) { $this->_errores[] = "Debe indicar la cantidad recibida y las unidades brutas"; } $articulo = new Articulos($this->IDArticulo); if ($articulo->getTrazabilidad()->getIDTipo() and !$this->IDLote) { $this->_errores[] = "Debe indicar un lote"; } unset($articulo); $almacen = new Almacenes($this->IDAlmacen); if ($almacen->getControlUbicaciones()->getIDTipo() and !$this->IDUbicacion) { $this->_errores[] = "Debe indicar una ubicación"; } unset($almacen); return count($this->_errores) == 0; }
/** * Realiza validaciones logicas antes de crear/actualizar el objeto: * * 1.- Comprueba la existencia del lote y ubicación (si procede) * 2.- Agrupa con código de artículo, lote ubicación */ public function validaLogico() { parent::validaLogico(); // Control Lote y Ubicación $articulo = new Articulos($this->IDArticulo); if ($articulo->getStatus()) { $trazabilidad = $articulo->getTrazabilidad()->getIDTipo() == 1; $this->Descripcion = $articulo->getDescripcion(); } else { $this->_errores[] = "El artículo no existe"; } unset($articulo); $inventario = new InventariosCab($this->IDInventario); $controlUbicaciones = $inventario->getIDAlmacen()->getControlUbicaciones()->getIDTipo() == 1; unset($inventario); if ($trazabilidad) { if ($this->IDLote == 0) { $this->_errores[] = "Debe indicar un lote"; } else { // Comprobar que el lote pertenezca al artículo $lote = new Lotes($this->IDLote); if ($lote->getIDArticulo()->getIDArticulo() != $this->IDArticulo) { $this->_errores[] = "El lote no pertenece al artículo"; } unset($lote); } } if ($controlUbicaciones and $this->IDUbicacion == 0) { $this->_errores[] = "Debe indicar la ubicación"; } // Agrupar en la misma línea de inventario las entradas // que coinciden en el código de articulo, lote y ubicación $rows = $this->cargaCondicion("*", "IDArticulo='{$this->IDArticulo}' and IDLote='{$this->IDLote}' and IDUbicacion='{$this->IDUbicacion}' and IDInventario='{$this->IDInventario}'"); if (count($rows)) { $this->_idLineaNueva = $rows[0]['IDLinea']; $this->Stock += $rows[0]['Stock']; $this->Cajas += $rows[0]['Cajas']; $this->Pales += $rows[0]['Pales']; $this->_flagAgrupa = true; } }
/** * Valida la idoneidad del movimiento. * * Chequea si se aplica o no la trazabilidad, la ubicacion y el bloqueo de stock * * @param char $signo El signo del movimiento (E=Entrada, S=Salida) * @return boolean */ private function validaMovimiento($signo) { $articulo = new Articulos($this->IDArticulo); $almacen = new Almacenes($this->IDAlmacen); $hayTrazabilidad = $articulo->getTrazabilidad()->getIDTipo(); $hayBloqueoStock = $articulo->getBloqueoStock()->getIDTipo(); $hayControlUbicaciones = $almacen->getControlUbicaciones()->getIDTipo(); if ($hayBloqueoStock) { $exi = new Existencias(); $stock = $exi->getStock($this->IDArticulo, $this->IDAlmacen, $this->IDLote, $this->IDUbicacion, '', 'UMA'); unset($exi); switch ($signo) { case 'S': $unidades = $this->UnidadesE + $this->UnidadesS; if ($unidades < 0) { $okBloqueoStock = true; } else { $okBloqueoStock = $stock['RE'] >= $unidades; } break; case 'E': $unidades = $this->UnidadesE + $this->UnidadesS; if ($unidades < 0) { $okBloqueoStock = $unidades + $stock['RE'] >= 0; } else { $okBloqueoStock = true; } break; } } else { $okBloqueoStock = true; } $okTrazabilidad = (!$hayTrazabilidad or $this->IDLote != 0); $okUbicacion = (!$hayControlUbicaciones or $this->IDUbicacion != 0); if (!$okBloqueoStock) { $this->_errores[] = "No hay stock suficiente para " . $articulo->getDescripcion(); } if (!$okTrazabilidad) { $this->_errores[] = "Debe indicar el lote para " . $articulo->getDescripcion(); } if (!$okUbicacion) { $this->_errores[] = "Debe indicar la ubicación para " . $articulo->getDescripcion(); } unset($articulo); unset($almacen); return count($this->_errores) == 0; }