Merge pull request 'Importación de clientes por CSV' (#56) from import_customers into main

Reviewed-on: OneTeam/don_confiao#56
This commit is contained in:
Cosmos 2024-10-26 17:24:21 -05:00
commit 95fab71898
10 changed files with 94 additions and 1 deletions

View 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
1 nombre correo telefono
2 Alejandro Ayala mono@disroot.org 3232321
3 Mono Francisco pablo@onecluster.org 321312312
4 Pablo Bolivar alejo@onecluster.org 3243242

View File

@ -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

View File

@ -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),
),
]

View File

@ -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),
),
]

View File

@ -9,6 +9,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

View File

@ -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 %}

View File

@ -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>

View File

@ -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>

View File

@ -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"),

View File

@ -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 = [