#84 refactor(SaleSummary): move to apiview.

This commit is contained in:
Mono Mono 2024-12-31 13:51:11 -05:00
parent 8b7c2efcb3
commit 69d8b1d2ad
4 changed files with 37 additions and 34 deletions

View File

@ -4,7 +4,7 @@ from rest_framework.status import HTTP_400_BAD_REQUEST
from rest_framework.views import APIView from rest_framework.views import APIView
from .models import Sale, SaleLine, Customer, Product, ReconciliationJar, PaymentMethods from .models import Sale, SaleLine, Customer, Product, ReconciliationJar, PaymentMethods
from .serializers import SaleSerializer, ProductSerializer, CustomerSerializer, ReconciliationJarSerializer, PaymentMethodSerializer, SaleForRenconciliationSerializer from .serializers import SaleSerializer, ProductSerializer, CustomerSerializer, ReconciliationJarSerializer, PaymentMethodSerializer, SaleForRenconciliationSerializer, SaleSummarySerializer
from decimal import Decimal from decimal import Decimal
import json import json
@ -120,3 +120,9 @@ class SalesForReconciliationView(APIView):
grouped_sales[sale.payment_method].append(serializer.data) grouped_sales[sale.payment_method].append(serializer.data)
return Response(grouped_sales) return Response(grouped_sales)
class SaleSummary(APIView):
def get(self, request, id):
sale = Sale.objects.get(pk=id)
serializer = SaleSummarySerializer(sale)
return Response(serializer.data)

View File

@ -64,3 +64,32 @@ class SaleForRenconciliationSerializer(serializers.Serializer):
def get_total(self, sale): def get_total(self, sale):
return sale.get_total() return sale.get_total()
class ListCustomerSerializer(serializers.ModelSerializer):
class Meta:
model = Customer
fields = ['id', 'name']
class ListProductSerializer(serializers.ModelSerializer):
class Meta:
model = Product
fields = ['id', 'name']
class SummarySaleLineSerializer(serializers.ModelSerializer):
product = ListProductSerializer()
class Meta:
model = SaleLine
fields = ['product', 'quantity', 'unit_price', 'description']
class SaleSummarySerializer(serializers.ModelSerializer):
customer = ListCustomerSerializer()
saleline_set = SummarySaleLineSerializer(many=True)
class Meta:
model = Sale
fields = ['id', 'date', 'customer', 'payment_method', 'saleline_set']

View File

@ -24,7 +24,7 @@ urlpatterns = [
views.exportar_ventas_para_tryton, views.exportar_ventas_para_tryton,
name="exportar_ventas_para_tryton"), name="exportar_ventas_para_tryton"),
path("resumen_compra/<int:id>", views.purchase_summary, name="purchase_summary"), path("resumen_compra/<int:id>", views.purchase_summary, name="purchase_summary"),
path("resumen_compra_json/<int:id>", views.purchase_json_summary, name="purchase_json_summary"), path("resumen_compra_json/<int:id>", api_views.SaleSummary.as_view(), name="purchase_json_summary"),
path("payment_methods/all/select_format", api_views.PaymentMethodView.as_view(), name="payment_methods_to_select"), path("payment_methods/all/select_format", api_views.PaymentMethodView.as_view(), name="payment_methods_to_select"),
path('purchases/for_reconciliation', api_views.SalesForReconciliationView.as_view(), name='sales_for_reconciliation'), path('purchases/for_reconciliation', api_views.SalesForReconciliationView.as_view(), name='sales_for_reconciliation'),
path('reconciliate_jar', api_views.ReconciliateJarView.as_view()), path('reconciliate_jar', api_views.ReconciliateJarView.as_view()),

View File

@ -125,38 +125,6 @@ def purchase_summary(request, id):
) )
def purchase_json_summary(request, id):
purchase = Sale.objects.get(pk=id)
lines = []
for line in purchase.saleline_set.all():
lines.append({
'product': {
'id': line.product.id,
'name': line.product.name,
},
'quantity': line.quantity,
'unit_price': line.unit_price,
'description': line.description,
})
to_response = {
'id': purchase.id,
'date': purchase.date,
'customer': {
'id': purchase.customer.id,
'name': purchase.customer.name,
# 'phone': _mask_phone(purchase.customer.phone)
},
'payment_method': purchase.payment_method,
'set_lines': lines,
}
return JsonResponse(to_response, safe=False)
def _mask_phone(phone):
digits = str(phone)[-3:] if phone else " " * 3
return "X" * 7 + digits
def _categories_from_csv_string(categories_string, separator="&"): def _categories_from_csv_string(categories_string, separator="&"):
categories = categories_string.split(separator) categories = categories_string.split(separator)
clean_categories = [c.strip() for c in categories] clean_categories = [c.strip() for c in categories]