refactor_endpoints_to_api_views #84 #85

Merged
mono merged 5 commits from refactor_endpoints_to_api_views_#84 into main 2024-12-31 14:51:05 -05:00
4 changed files with 37 additions and 34 deletions
Showing only changes of commit 69d8b1d2ad - Show all commits

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]