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;
 }
Beispiel #2
0
 /**
  * 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.');
     }
 }