From 9c0eebd07d65f84f0ff31002199ff591ad61b289 Mon Sep 17 00:00:00 2001
From: Mono Mono <monomono@disroot.org>
Date: Sat, 14 Dec 2024 22:34:58 -0500
Subject: [PATCH]  #69 refactor(ReconciliationJar): extract to method.

---
 tienda_ilusion/don_confiao/api_views.py | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/tienda_ilusion/don_confiao/api_views.py b/tienda_ilusion/don_confiao/api_views.py
index 7130d7f..e860314 100644
--- a/tienda_ilusion/don_confiao/api_views.py
+++ b/tienda_ilusion/don_confiao/api_views.py
@@ -58,18 +58,14 @@ class ReconciliateJarView(APIView):
         cash_purchases_id = data.get('cash_purchases')
         serializer = ReconciliationJarSerializer(data=data)
         if serializer.is_valid():
-            purchases = Sale.objects.filter(pk__in=cash_purchases_id)
-            total_cash_purchases = sum(p.get_total() for p in purchases)
-            if total_cash_purchases != Decimal(data.get('total_cash_purchases')):
+            cash_purchases = Sale.objects.filter(pk__in=cash_purchases_id)
+            if not self._is_valid_total(cash_purchases, data.get('total_cash_purchases')):
                 return Response(
                     {'error': 'total_cash_purchases not equal to sum of all purchases.'},
                     status=HTTP_400_BAD_REQUEST
                 )
             reconciliation = serializer.save()
-            for purchase in purchases:
-                purchase.reconciliation = reconciliation
-                purchase.clean()
-                purchase.save()
+            self._link_purchases(reconciliation, cash_purchases)
             return Response({'id': reconciliation.id})
         return Response(serializer.errors, status=HTTP_400_BAD_REQUEST)
 
@@ -77,3 +73,13 @@ class ReconciliateJarView(APIView):
         reconciliations = ReconciliationJar.objects.all()
         serializer = ReconciliationJarSerializer(reconciliations, many=True)
         return Response(serializer.data)
+
+    def _is_valid_total(self, purchases, total):
+        calculated_total = sum(p.get_total() for p in purchases)
+        return calculated_total == Decimal(total)
+
+    def _link_purchases(self, reconciliation, purchases):
+        for purchase in purchases:
+            purchase.reconciliation = reconciliation
+            purchase.clean()
+            purchase.save()