From 5910c0c2272676d8ae60e5a4cbafa155cd87d9f0 Mon Sep 17 00:00:00 2001 From: cosmos Date: Sat, 26 Oct 2024 17:16:27 -0500 Subject: [PATCH 1/2] Import Customers --- .../don_confiao/example_customer.csv | 4 +++ tienda_ilusion/don_confiao/forms.py | 4 +++ ...e_address_customer_email_customer_phone.py | 23 +++++++++++++++ tienda_ilusion/don_confiao/models.py | 3 +- .../don_confiao/import_customers.html | 13 +++++++++ .../templates/don_confiao/index.html | 1 + .../templates/don_confiao/menu.html | 1 + tienda_ilusion/don_confiao/urls.py | 1 + tienda_ilusion/don_confiao/views.py | 28 ++++++++++++++++++- 9 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 tienda_ilusion/don_confiao/example_customer.csv create mode 100644 tienda_ilusion/don_confiao/migrations/0031_rename_address_customer_email_customer_phone.py create mode 100644 tienda_ilusion/don_confiao/templates/don_confiao/import_customers.html diff --git a/tienda_ilusion/don_confiao/example_customer.csv b/tienda_ilusion/don_confiao/example_customer.csv new file mode 100644 index 0000000..4795cc8 --- /dev/null +++ b/tienda_ilusion/don_confiao/example_customer.csv @@ -0,0 +1,4 @@ +nombre,correo,telefono +Alejandro Ayala,mono@disroot.org,3232321 +Mono Francisco,pablo@onecluster.org,321312312 +Pablo Bolivar,alejo@onecluster.org,3243242 diff --git a/tienda_ilusion/don_confiao/forms.py b/tienda_ilusion/don_confiao/forms.py index 241dac3..0b9df88 100644 --- a/tienda_ilusion/don_confiao/forms.py +++ b/tienda_ilusion/don_confiao/forms.py @@ -12,6 +12,10 @@ class ImportProductsForm(forms.Form): csv_file = forms.FileField() +class ImportCustomersForm(forms.Form): + csv_file = forms.FileField() + + class PurchaseForm(forms.ModelForm): class Meta: model = Sale diff --git a/tienda_ilusion/don_confiao/migrations/0031_rename_address_customer_email_customer_phone.py b/tienda_ilusion/don_confiao/migrations/0031_rename_address_customer_email_customer_phone.py new file mode 100644 index 0000000..43a6773 --- /dev/null +++ b/tienda_ilusion/don_confiao/migrations/0031_rename_address_customer_email_customer_phone.py @@ -0,0 +1,23 @@ +# Generated by Django 5.0.6 on 2024-10-26 22:01 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('don_confiao', '0030_paymentsale'), + ] + + operations = [ + migrations.RenameField( + model_name='customer', + old_name='address', + new_name='email', + ), + migrations.AddField( + model_name='customer', + name='phone', + field=models.CharField(blank=True, max_length=100, null=True), + ), + ] diff --git a/tienda_ilusion/don_confiao/models.py b/tienda_ilusion/don_confiao/models.py index 05b0c14..f44ed1c 100644 --- a/tienda_ilusion/don_confiao/models.py +++ b/tienda_ilusion/don_confiao/models.py @@ -8,7 +8,8 @@ from datetime import datetime class Customer(models.Model): name = models.CharField(max_length=100, default=None, null=False, blank=False) - address = models.CharField(max_length=100, null=True, blank=True) + email = models.CharField(max_length=100, null=True, blank=True) + phone = models.CharField(max_length=100, null=True, blank=True) def __str__(self): return self.name diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/import_customers.html b/tienda_ilusion/don_confiao/templates/don_confiao/import_customers.html new file mode 100644 index 0000000..3c9d1f9 --- /dev/null +++ b/tienda_ilusion/don_confiao/templates/don_confiao/import_customers.html @@ -0,0 +1,13 @@ +{% extends 'don_confiao/base.html' %} +{% block content %} +{% if form.is_multipart %} +
+{% else %} + +{% endif %} + +{% csrf_token %} +{{ form }} + +
+{% endblock %} diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/index.html b/tienda_ilusion/don_confiao/templates/don_confiao/index.html index 7b791c0..176a2aa 100644 --- a/tienda_ilusion/don_confiao/templates/don_confiao/index.html +++ b/tienda_ilusion/don_confiao/templates/don_confiao/index.html @@ -4,4 +4,5 @@
  • Comprar
  • Productos
  • Importar Productos
  • +
  • Importar Terceros
  • diff --git a/tienda_ilusion/don_confiao/templates/don_confiao/menu.html b/tienda_ilusion/don_confiao/templates/don_confiao/menu.html index 9f418cb..b5b21d7 100644 --- a/tienda_ilusion/don_confiao/templates/don_confiao/menu.html +++ b/tienda_ilusion/don_confiao/templates/don_confiao/menu.html @@ -9,6 +9,7 @@
  • Compras
  • Productos
  • Importar Productos
  • +
  • Importar Terceros
  • Cuadrar tarro
  • diff --git a/tienda_ilusion/don_confiao/urls.py b/tienda_ilusion/don_confiao/urls.py index d323431..d226d13 100644 --- a/tienda_ilusion/don_confiao/urls.py +++ b/tienda_ilusion/don_confiao/urls.py @@ -19,6 +19,7 @@ urlpatterns = [ path("productos", views.products, name="products"), path("lista_productos", views.ProductListView.as_view(), name='product_list'), path("importar_productos", views.import_products, name="import_products"), + path("importar_terceros", views.import_customers, name="import_customers"), path("exportar_ventas_para_tryton", views.exportar_ventas_para_tryton, name="exportar_ventas_para_tryton"), diff --git a/tienda_ilusion/don_confiao/views.py b/tienda_ilusion/don_confiao/views.py index 2141a97..ec39607 100644 --- a/tienda_ilusion/don_confiao/views.py +++ b/tienda_ilusion/don_confiao/views.py @@ -4,9 +4,10 @@ from django.views.generic import ListView from django.db import transaction from .models import ( - Sale, SaleLine, Product, ProductCategory, Payment, PaymentMethods) + Sale, SaleLine, Product, Customer, ProductCategory, Payment, PaymentMethods) from .forms import ( ImportProductsForm, + ImportCustomersForm, PurchaseForm, SaleLineFormSet, ReconciliationJarForm, @@ -94,6 +95,19 @@ def import_products(request): {'form': form} ) +def import_customers(request): + if request.method == "POST": + form = ImportCustomersForm(request.POST, request.FILES) + if form.is_valid(): + handle_import_customers_file(request.FILES["csv_file"]) + return HttpResponseRedirect("productos") + else: + form = ImportCustomersForm() + return render( + request, + "don_confiao/import_customers.html", + {'form': form} + ) def reconciliate_jar(request): summary = Payment.get_reconciliation_jar_summary() @@ -154,6 +168,18 @@ def handle_import_products_file(csv_file): for category in categories: product.categories.add(category) +def handle_import_customers_file(csv_file): + data = io.StringIO(csv_file.read().decode('utf-8')) + reader = csv.DictReader(data, quotechar='"') + for row in reader: + customer, created = Customer.objects.update_or_create( + name=row['nombre'], + defaults={ + 'email': row['correo'], + 'phone': row['telefono'] + } + ) + def exportar_ventas_para_tryton(request): tryton_sales_header = [ From 83f3bbdc85eeec74829c0266592e83520345a4f7 Mon Sep 17 00:00:00 2001 From: cosmos Date: Sat, 26 Oct 2024 17:22:58 -0500 Subject: [PATCH 2/2] Add migrate --- .../migrations/0032_customer_address.py | 18 ++++++++++++++++++ tienda_ilusion/don_confiao/models.py | 1 + 2 files changed, 19 insertions(+) create mode 100644 tienda_ilusion/don_confiao/migrations/0032_customer_address.py diff --git a/tienda_ilusion/don_confiao/migrations/0032_customer_address.py b/tienda_ilusion/don_confiao/migrations/0032_customer_address.py new file mode 100644 index 0000000..3b2bca2 --- /dev/null +++ b/tienda_ilusion/don_confiao/migrations/0032_customer_address.py @@ -0,0 +1,18 @@ +# Generated by Django 5.0.6 on 2024-10-26 22:21 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('don_confiao', '0031_rename_address_customer_email_customer_phone'), + ] + + operations = [ + migrations.AddField( + model_name='customer', + name='address', + field=models.CharField(blank=True, max_length=100, null=True), + ), + ] diff --git a/tienda_ilusion/don_confiao/models.py b/tienda_ilusion/don_confiao/models.py index f44ed1c..b82f9dd 100644 --- a/tienda_ilusion/don_confiao/models.py +++ b/tienda_ilusion/don_confiao/models.py @@ -8,6 +8,7 @@ from datetime import datetime class Customer(models.Model): name = models.CharField(max_length=100, default=None, null=False, blank=False) + address = models.CharField(max_length=100, null=True, blank=True) email = models.CharField(max_length=100, null=True, blank=True) phone = models.CharField(max_length=100, null=True, blank=True)