Beispiel #1
0
 public function addProduct($idArticulo, $unidades)
 {
     $ok = false;
     $filtro = "session='{$_SESSION['IdSesion']}' and IDArticulo='{$idArticulo}'";
     $rows = $this->cargaCondicion("Id", $filtro);
     if ($rows[0]['Id']) {
         $carrito = new Carrito($rows[0]['Id']);
         $carrito->setUnidades($carrito->getUnidades() + $unidades);
         $carrito->setImporte($carrito->getUnidades() * $carrito->getPrecio() * (1 - $carrito->getDescuento() / 100));
         $ok = $carrito->save();
         unset($carrito);
     } else {
         $articulo = new Articulos($idArticulo);
         $this->sesion = $_SESSION['IdSesion'];
         $this->IpOrigen = $_SERVER['REMOTE_ADDR'];
         $this->UserAgent = $_SERVER['HTTP_USER_AGENT'];
         $this->IDArticulo = $idArticulo;
         $this->Descripcion = $articulo->getDescripcion();
         $this->Unidades = $unidades;
         $this->UnidadMedida = $articulo->getUnidadMedida("UMV");
         $this->Precio = $articulo->getPrecioVentaConImpuestos();
         $this->Descuento = 0;
         $this->Importe = $this->Unidades * $this->Precio * (1 - $this->Descuento / 100);
         $this->Iva = $articulo->getIDIva()->getIva();
         $this->Recargo = $articulo->getIDIva()->getRecargo();
         $this->Estado = 0;
         $ok = $this->create() > 0;
         unset($articulo);
     }
     return $ok;
 }
 private function generaCombinaciones($idArticulo, $combinaciones)
 {
     foreach ($combinaciones as $value) {
         $nuevo = new Articulos($idArticulo);
         $nuevo->setIDArticulo('');
         $nuevo->setDescripcion($nuevo->getDescripcion() . " " . $value);
         $nuevo->setBelongsTo($idArticulo);
         $nuevo->setPrimaryKeyMD5('');
         $nuevo->setNivelJerarquico($nuevo->getNivelJerarquico() + 1);
         $nuevo->create();
     }
 }
 /**
  * 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;
     }
 }
Beispiel #4
0
 /**
  * Devuelve un array con los artículos que forman
  * parte del escandallo del articulo actual
  * 
  * array('IDArticulo'=>,'Codigo'=>,'Descripcion'=>,'Unidades'=>,'UMV'=>)
  * 
  * @return array \Articulos
  */
 public function getEscandallo()
 {
     $escan = new ArticulosEscandallos();
     $filtro = "IDArticuloOrigen='{$this->IDArticulo}' and IDArticuloDestino<>'0'";
     $rows = $escan->cargaCondicion("IDArticuloDestino,Unidades", $filtro, "Id ASC");
     unset($escan);
     $array = array();
     foreach ($rows as $row) {
         $articulo = new Articulos($row['IDArticuloDestino']);
         $array[] = array('IDArticulo' => $articulo->getIDArticulo(), 'Codigo' => $articulo->getCodigo(), 'Descripcion' => $articulo->getDescripcion(), 'Unidades' => $row['Unidades'], 'UMV' => $articulo->getUMV()->getUnidadMedida());
         unset($articulo);
     }
     return $array;
 }
 /**
  * Recalcula los precios de costo y de venta de los articulos
  * obtenidos en la elaboración, prorrateando el costo total de
  * la elaboración entre las UMAs obtenidas de cada producto
  *
  * Este proceso se hace con las líneas de tipo 1 que estén recepcionadas (Estado=3)
  * y en base a la política de recálculo de precios definida con el parámetro ACTU_PRECIOS
  */
 public function CotizarAction()
 {
     if ($this->values['permisos']['permisosModulo']['UP']) {
         $idManufac = $this->request['ManufacCab']['IDManufac'];
         $datos = new ManufacCab($idManufac);
         if ($datos->getKilosDestino() != 0) {
             $totalCoste = $datos->getTotalCoste();
             $totalUMAObtenidos = $datos->getKilosDestino();
             $costePorUMA = $totalCoste / $datos->getKilosDestino();
             //Recorrer las lineas de elaboracion tipo 1
             $lineas = new ManufacLineas();
             $rows = $lineas->cargaCondicion("*", "IDManufac='{$idManufac}' and Tipo='1' and IDEstado='3'");
             unset($lineas);
             foreach ($rows as $row) {
                 $articulo = new Articulos($row['IDArticulo']);
                 if ($articulo->actualizaPrecios($row['Unidades'], $costePorUMA)) {
                     $this->values['alertas'][] = "Se actualizó: " . $articulo->getCodigo() . " " . $articulo->getDescripcion();
                 } else {
                     $this->values['alertas'][] = "NO Se actualizó: " . $articulo->getCodigo() . " " . $articulo->getDescripcion();
                 }
             }
             unset($articulo);
         }
         $this->values['datos'] = $datos;
         $this->values['errores'] = $datos->getErrores();
         unset($datos);
         return array('template' => $this->entity . '/edit.html.twig', 'values' => $this->values);
     } else {
         return array('template' => '_global/forbiden.html.twig');
     }
 }
 /**
  * Genera los ordenes del articulo $idArticulo en base
  * a todas las reglas aplicables al mismo
  * 
  * @param int $idArticulo El id del artículo
  * @return void
  */
 public function aplicaReglasArticulo($idArticulo)
 {
     $articulo = new Articulos($idArticulo);
     $reglas = $this->getReglasArticulo($idArticulo);
     foreach ($reglas as $regla) {
         $orden = new OrdenesArticulos();
         $filtro = "IDRegla='{$regla}' AND IDArticulo='{$articulo->getIDArticulo()}'";
         $rows = $orden->cargaCondicion("Id", $filtro);
         if (!$rows[0]["Id"]) {
             $orden->setIDRegla($regla);
             $orden->setIDArticulo($articulo->getIDArticulo());
             $orden->setObservations($articulo->getDescripcion());
             $orden->create();
         }
     }
     unset($articulo);
 }
 /**
  * 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;
 }