diff --git a/code/haitiwater/apps/api/get_table.py b/code/haitiwater/apps/api/get_table.py index d74b6ef..04e26bf 100644 --- a/code/haitiwater/apps/api/get_table.py +++ b/code/haitiwater/apps/api/get_table.py @@ -187,14 +187,13 @@ def get_payment_elements(request): def get_payment_details(request): consumer_id = request.GET.get("id", None) - balance = 0 # TODO balance in view to optimize + from ..consumers.models import Consumer + consumer = Consumer.objects.filter(id=consumer_id).first() + balance = consumer.get_balance() validity = None for elem in Invoice.objects.filter(consumer_id=consumer_id): - balance -= elem.amount if not validity or elem.expiration > validity: validity = elem.expiration - for elem in Payment.objects.filter(consumer_id=consumer_id): - balance += elem.amount return balance, str(validity) diff --git a/code/haitiwater/apps/consumers/models.py b/code/haitiwater/apps/consumers/models.py index 14ab627..8697129 100644 --- a/code/haitiwater/apps/consumers/models.py +++ b/code/haitiwater/apps/consumers/models.py @@ -22,12 +22,15 @@ class Consumer(models.Model): return self.first_name + " " + self.last_name def descript(self): - view = VirtualConsumersBalance.objects.filter(relevant_model=self.id).first() tab = [self.id, self.last_name, self.first_name, self.get_gender_display(), self.location, self.get_phone_number(), - self.household_size, self.water_outlet.name, view.balance, self.water_outlet.zone.name] + self.household_size, self.water_outlet.name, self.get_balance(), self.water_outlet.zone.name] return tab + def get_balance(self): + view = VirtualConsumersBalance.objects.filter(relevant_model=self.id).first() + return view.payed - view.due + def get_phone_number(self): return self.phone_number if self.phone_number != "0" else "Non spécifié" @@ -61,7 +64,9 @@ class Consumer(models.Model): class VirtualConsumersBalance(models.Model): relevant_model = models.BigIntegerField("Id", primary_key=True) - balance = models.FloatField("Balance", null=False, default=0) + payed = models.FloatField("Total payé", null=False, default=0) + due = models.FloatField("Total dû", null=False, default=0) + class Meta: managed = False diff --git a/code/haitiwater/views.sql b/code/haitiwater/views.sql index 61461f9..d9597d3 100644 --- a/code/haitiwater/views.sql +++ b/code/haitiwater/views.sql @@ -45,5 +45,8 @@ CREATE OR REPLACE VIEW public.consumer_virtualtotalbalance AS c.id AS "relevant_model", ( SELECT COALESCE(SUM(p.amount), 0) FROM financial_payment p - WHERE p.consumer_id = c.id) AS "balance" + WHERE p.consumer_id = c.id) AS "payed", + ( SELECT COALESCE(SUM(i.amount), 0) + FROM financial_invoice i + WHERE i.consumer_id = c.id) AS "due" FROM consumers_consumer c; \ No newline at end of file