Import Customers
This commit is contained in:
		
							
								
								
									
										4
									
								
								tienda_ilusion/don_confiao/example_customer.csv
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								tienda_ilusion/don_confiao/example_customer.csv
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| 
 | 
| @@ -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 | ||||
|   | ||||
| @@ -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), | ||||
|         ), | ||||
|     ] | ||||
| @@ -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 | ||||
|   | ||||
| @@ -0,0 +1,13 @@ | ||||
| {% extends 'don_confiao/base.html' %} | ||||
| {% block content %} | ||||
| {% if form.is_multipart %} | ||||
|     <form enctype="multipart/form-data" method="post"> | ||||
| {% else %} | ||||
|     <form method="post"> | ||||
| {% endif %} | ||||
|  | ||||
| {% csrf_token %} | ||||
| {{ form }} | ||||
| <input type="submit" value="Importar"> | ||||
| </form> | ||||
| {% endblock %} | ||||
| @@ -4,4 +4,5 @@ | ||||
|     <li><a href='./comprar'>Comprar</a></li> | ||||
|     <li><a href='./productos'>Productos</a></li> | ||||
|     <li><a href='./importar_productos'>Importar Productos</a></li> | ||||
|     <li><a href='./importar_terceros'>Importar Terceros</a></li> | ||||
| </ul> | ||||
|   | ||||
| @@ -9,6 +9,7 @@ | ||||
|             <li><a href='/don_confiao/compras'>Compras</a></li> | ||||
|             <li><a href='/don_confiao/lista_productos'>Productos</a></li> | ||||
|             <li><a href='/don_confiao/importar_productos'>Importar Productos</a></li> | ||||
|             <li><a href='/don_confiao/importar_terceros'>Importar Terceros</a></li> | ||||
|             <li><a href='/don_confiao/cuadrar_tarro'>Cuadrar tarro</a></li> | ||||
|         </ul> | ||||
|     </nav> | ||||
|   | ||||
| @@ -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"), | ||||
|   | ||||
| @@ -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 = [ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user