From 47098c48af0b66ed0f9cde50225aca2ed36d5330 Mon Sep 17 00:00:00 2001 From: Mono Mono Date: Sat, 29 Jun 2024 18:12:25 -0500 Subject: [PATCH] fix: actualizacion de categorias en la importacion de productos. --- .../don_confiao/example_products2.csv | 2 +- tienda_ilusion/don_confiao/test_products.py | 15 +++++++++++++ tienda_ilusion/don_confiao/views.py | 21 +++++++++++-------- 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/tienda_ilusion/don_confiao/example_products2.csv b/tienda_ilusion/don_confiao/example_products2.csv index f46428b..787e48d 100644 --- a/tienda_ilusion/don_confiao/example_products2.csv +++ b/tienda_ilusion/don_confiao/example_products2.csv @@ -1,4 +1,4 @@ "producto","unidad","precio","categorias" "Aceite","Unidad", 50000,"Aceites&Alimentos" "Café","Unidad", 15000,"Cafes&Alimentos" -"Arroz","Unidad", 6000,"Cafes&Alimentos" +"Arroz","Unidad", 6000,"Alimentos&Granos" diff --git a/tienda_ilusion/don_confiao/test_products.py b/tienda_ilusion/don_confiao/test_products.py index 94870a6..0b4e0dc 100644 --- a/tienda_ilusion/don_confiao/test_products.py +++ b/tienda_ilusion/don_confiao/test_products.py @@ -48,6 +48,21 @@ class TestProducts(TestCase): id_post_updated = Product.objects.get(name='Aceite').id self.assertEqual(id_aceite, id_post_updated) + def test_update_categories_on_import(self): + self._import_csv() + first_products = self._get_products() + first_categories = {p["name"]: p["categories"] for p in first_products} + self._import_csv('example_products2.csv') + updated_products = self._get_products() + updated_categories = {p["name"]: p["categories"] for p in updated_products} + + self.assertIn('Cafes', first_categories['Arroz']) + self.assertNotIn('Granos', first_categories['Arroz']) + + self.assertIn('Granos', updated_categories['Arroz']) + self.assertNotIn('Cafes', updated_categories['Arroz']) + + def test_update_price(self): self._import_csv() first_products = self._get_products() diff --git a/tienda_ilusion/don_confiao/views.py b/tienda_ilusion/don_confiao/views.py index 8f04092..257b779 100644 --- a/tienda_ilusion/don_confiao/views.py +++ b/tienda_ilusion/don_confiao/views.py @@ -55,6 +55,14 @@ def import_products(request): {'form': form} ) +def _categories_from_csv_string(categories_string, separator="&"): + categories = categories_string.split(separator) + clean_categories = [c.strip() for c in categories] + return [_category_from_name(category) for category in clean_categories] + +def _category_from_name(name): + return ProductCategory.objects.get_or_create(name=name)[0] + def handle_import_products_file(csv_file): data = io.StringIO(csv_file.read().decode('utf-8')) reader = csv.DictReader(data, quotechar='"') @@ -63,15 +71,10 @@ def handle_import_products_file(csv_file): name=row['producto'], defaults={ 'price': row['precio'], - 'measuring_unit': row['unidad'], + 'measuring_unit': row['unidad'] } ) - - categories = [n.strip() for n in row["categorias"].split("&")] + categories = _categories_from_csv_string(row["categorias"]) + product.categories.clear() for category in categories: - category_model, _ = ProductCategory.objects.get_or_create( - name=category - ) - category_model.save() - product.categories.add(category_model) - product.save() + product.categories.add(category)