public function get_tarifas($todas = FALSE) { $tarifa = new tarifa(); $tarifas = $tarifa->all(); $tarifa_articulo = new tarifa_articulo(); $tas = $tarifa_articulo->all_from_articulo($this->referencia); if ($todas) { foreach ($tarifas as $t) { $encontrada = FALSE; foreach ($tas as $ta) { if ($ta->codtarifa == $t->codtarifa) { $encontrada = TRUE; break; } } if (!$encontrada) { /// añadimos las tarifas que no tiene asignadas $tas[] = new tarifa_articulo(array('id' => NULL, 'codtarifa' => $t->codtarifa, 'referencia' => $this->referencia, 'descuento' => 0 - $t->incporcentual)); } } } /// rellenamos las tarifas foreach ($tas as $ta) { foreach ($tarifas as $t) { if ($t->codtarifa == $ta->codtarifa) { $ta->nombre = $t->nombre; $ta->pvp = $this->pvp; $ta->iva = $this->get_iva(); break; } } } return $tas; }
/** * Rellenamos los descuentos y los datos de la tarifa de una lista de * artículos. * @param type $articulos */ public function set_precios(&$articulos) { /// obtenemos todos los datos de las familias de esta tarifa $tarfamilias = $this->all_from_tarifa($this->codtarifa); /// obtenemos los precios fijos de los artículos, los de la tabla articulostarifas $tarifa_articulo = new tarifa_articulo(); $precios_articulos = $tarifa_articulo->get_precios($articulos, $this->codtarifa); foreach ($articulos as $i => $value) { $articulos[$i]->codtarifa = $this->codtarifa; $articulos[$i]->tarifa_nombre = $this->nombre; $articulos[$i]->tarifa_url = $this->url(); $articulos[$i]->dtopor = 0; /// si encontramos el precio fijo, genial, no necesitamos más $encontrada = FALSE; if (isset($precios_articulos[$value->referencia])) { $articulos[$i]->pvp = $precios_articulos[$value->referencia]; $articulos[$i]->tarifa_diff = 'Precio fijo'; $encontrada = TRUE; } if (!$encontrada) { $pvp = $articulos[$i]->pvp; /// si no hemos encontrado el precio fijo, hay que ver si hay alguna tarifa para la familia foreach ($tarfamilias as $tar) { if ($value->codfamilia == $tar->codfamilia) { $articulos[$i]->tarifa_nombre = $this->nombre . ' - ' . $tar->nombre; $articulos[$i]->tarifa_diff = $tar->diff(); if ($tar->margen) { $articulos[$i]->pvp = $articulos[$i]->preciocoste() * (100 + $tar->x()) / 100 + $tar->y(); } else { if ($tar->x() >= 0) { $articulos[$i]->dtopor = $tar->x(); $articulos[$i]->pvp = $articulos[$i]->pvp - $tar->y(); } else { $articulos[$i]->pvp = $articulos[$i]->pvp * (100 - $tar->x()) / 100 - $tar->y(); } } $encontrada = TRUE; break; } } /// si no hay precio fijo, ni tarifa de familia, usamos los datos de la tarifa madre if (!$encontrada) { $articulos[$i]->tarifa_diff = $this->diff(); if ($this->margen) { $articulos[$i]->pvp = $articulos[$i]->preciocoste() * (100 + $this->x()) / 100 + $this->y(); } else { if ($this->x() >= 0) { $articulos[$i]->dtopor = $this->x(); $articulos[$i]->pvp = $articulos[$i]->pvp - $this->y(); } else { $articulos[$i]->pvp = $articulos[$i]->pvp * (100 - $this->x()) / 100 - $this->y(); } } } if ($this->mincoste) { if ($articulos[$i]->pvp * (100 - $articulos[$i]->dtopor) / 100 < $articulos[$i]->preciocoste()) { $articulos[$i]->dtopor = 0; $articulos[$i]->pvp = $articulos[$i]->preciocoste(); $articulos[$i]->tarifa_diff = 'Mínimo precio coste'; } } if ($this->maxpvp) { if ($articulos[$i]->pvp * (100 - $articulos[$i]->dtopor) / 100 > $pvp) { $articulos[$i]->dtopor = 0; $articulos[$i]->pvp = $pvp; $articulos[$i]->tarifa_diff = 'Máximo precio de venta'; } } } } }
protected function process() { $this->show_fs_toolbar = FALSE; $this->ppage = $this->page->get('ventas_articulos'); $articulo = new articulo(); if (isset($_POST['pvpiva'])) { $this->articulo = $articulo->get($_POST['referencia']); if ($this->articulo) { $continuar = TRUE; $this->articulo->set_impuesto($_POST['codimpuesto']); $this->articulo->set_pvp_iva($_POST['pvpiva']); if (isset($_POST['preciocoste'])) { $this->articulo->preciocoste = floatval($_POST['preciocoste']); } if (!$this->articulo->save()) { $this->new_error_msg("¡Imposible modificar el artículo!"); $continuar = FALSE; } if ($_POST['pvpiva'] > 0) { $tarifa_articulo = new tarifa_articulo(); for ($i = 0; $i < 100; $i++) { if (isset($_POST['codtarifa_' . $i])) { if ($_POST['id_' . $i] != '') { $ta = $tarifa_articulo->get($_POST['id_' . $i]); } else { $ta = FALSE; } if (!$ta) { $ta = new tarifa_articulo(); $ta->codtarifa = $_POST['codtarifa_' . $i]; $ta->referencia = $this->articulo->referencia; } $ta->pvp = $this->articulo->pvp; $ta->iva = $this->articulo->get_iva(); $ta->set_pvp_iva($_POST['pvpiva_' . $i]); if (!$ta->save()) { $this->new_error_msg("¡Imposible modificar la tarifa!"); $continuar = FALSE; } } else { break; } } } else { $this->new_advice("Debe establecer el Precio de Venta"); } if ($continuar) { $this->new_message("Precios modificadas correctamente."); } } } else { if (isset($_POST['almacen'])) { $this->articulo = $articulo->get($_POST['referencia']); if ($this->articulo) { if ($this->articulo->set_stock($_POST['almacen'], $_POST['cantidad'])) { $this->new_message("Stock guardado correctamente."); } else { $this->new_error_msg("Error al guardar el stock."); } } } else { if (isset($_POST['imagen'])) { $this->articulo = $articulo->get($_POST['referencia']); if (is_uploaded_file($_FILES['fimagen']['tmp_name']) and $_FILES['fimagen']['size'] <= 1024000) { $this->articulo->set_imagen(file_get_contents($_FILES['fimagen']['tmp_name'])); if ($this->articulo->save()) { $this->new_message("Imagen del articulo modificada correctamente"); } else { $this->new_error_msg("¡Error al guardar la imagen del articulo!"); } } } else { if (isset($_GET['delete_img'])) { $this->articulo = $articulo->get($_GET['ref']); $this->articulo->set_imagen(NULL); if ($this->articulo->save()) { $this->new_message("Imagen del articulo eliminada correctamente"); } else { $this->new_error_msg("¡Error al eliminar la imagen del articulo!"); } } else { if (isset($_POST['referencia'])) { $this->articulo = $articulo->get($_POST['referencia']); $this->articulo->descripcion = $_POST['descripcion']; $this->articulo->codfamilia = $_POST['codfamilia']; $this->articulo->codbarras = $_POST['codbarras']; $this->articulo->equivalencia = $_POST['equivalencia']; $this->articulo->destacado = isset($_POST['destacado']); $this->articulo->bloqueado = isset($_POST['bloqueado']); $this->articulo->controlstock = isset($_POST['controlstock']); $this->articulo->secompra = isset($_POST['secompra']); $this->articulo->sevende = isset($_POST['sevende']); $this->articulo->publico = isset($_POST['publico']); $this->articulo->observaciones = $_POST['observaciones']; $this->articulo->stockmin = $_POST['stockmin']; $this->articulo->stockmax = $_POST['stockmax']; if ($this->articulo->save()) { $this->new_message("Datos del articulo modificados correctamente"); $this->articulo->set_referencia($_POST['nreferencia']); } else { $this->new_error_msg("¡Error al guardar el articulo!"); } } else { if (isset($_GET['ref'])) { $this->articulo = $articulo->get($_GET['ref']); } } } } } } if ($this->articulo) { $this->page->title = $this->articulo->referencia; if ($this->articulo->bloqueado) { $this->new_error_msg("Este artículo está bloqueado."); } $this->almacen = new almacen(); $this->familia = $this->articulo->get_familia(); if (!$this->familia) { $this->familia = new familia(); } $this->impuesto = new impuesto(); $this->stocks = $this->articulo->get_stock(); /// metemos en un array los almacenes que no tengan stock de este producto $this->nuevos_almacenes = array(); foreach ($this->almacen->all() as $a) { $encontrado = FALSE; foreach ($this->stocks as $s) { if ($a->codalmacen == $s->codalmacen) { $encontrado = TRUE; } } if (!$encontrado) { $this->nuevos_almacenes[] = $a; } } $this->equivalentes = $this->articulo->get_equivalentes(); } else { $this->new_error_msg("Artículo no encontrado."); } }
protected function private_core() { $this->share_extension(); $this->impuesto = new impuesto(); $this->articulo = FALSE; if (isset($_POST['pvpiva'])) { $articulo = new articulo(); $this->articulo = $articulo->get($_POST['referencia']); if ($this->articulo) { $continuar = TRUE; $this->articulo->set_impuesto($_POST['codimpuesto']); $this->articulo->set_pvp_iva($_POST['pvpiva']); if (isset($_POST['preciocoste'])) { $this->articulo->costemedio = $this->articulo->preciocoste = floatval($_POST['preciocoste']); } if (!$this->articulo->save()) { $this->new_error_msg("¡Imposible modificar el artículo!"); $continuar = FALSE; } $tarifa_articulo = new tarifa_articulo(); for ($i = 0; $i < 100; $i++) { if (isset($_POST['codtarifa_' . $i])) { if ($_POST['pvpi_' . $i] != '') { $ta = $tarifa_articulo->get_by($this->articulo->referencia, $_POST['codtarifa_' . $i]); if (!$ta) { $ta = new tarifa_articulo(); $ta->codtarifa = $_POST['codtarifa_' . $i]; $ta->referencia = $this->articulo->referencia; } $ta->calculado = FALSE; $ta->pvp = $this->pvpiva2pvp(floatval($_POST['pvpi_' . $i])); if (!$ta->save()) { $this->new_error_msg("¡Imposible modificar la tarifa!"); $continuar = FALSE; } } else { if ($_POST['pvp_' . $i] != '') { $ta = $tarifa_articulo->get_by($this->articulo->referencia, $_POST['codtarifa_' . $i]); if (!$ta) { $ta = new tarifa_articulo(); $ta->codtarifa = $_POST['codtarifa_' . $i]; $ta->referencia = $this->articulo->referencia; } $ta->calculado = FALSE; $ta->pvp = floatval($_POST['pvp_' . $i]); if (!$ta->save()) { $this->new_error_msg("¡Imposible modificar la tarifa!"); $continuar = FALSE; } } } } else { break; } } if ($continuar) { $this->new_message("Precios modificadas correctamente."); } } } else { if (isset($_GET['ref'])) { $art = new articulo(); $this->articulo = $art->get($_GET['ref']); } } if ($this->articulo) { if (isset($_GET['recalcular'])) { /// eliminamos los precios fijos almacenados $tarifa_articulo = new tarifa_articulo(); foreach ($tarifa_articulo->all_from_articulo($this->articulo->referencia) as $ta) { $ta->delete(); } } } else { $this->new_error_msg('Artículo no encontrado.'); } }