Files
HaitiWater/code/haitiwater/apps/consumers/models.py
T

74 lines
3.0 KiB
Python

from django.contrib.gis.db import models
from django.db.models import ManyToOneRel
from ..log.utils import *
from ..utils.common_models import *
from ..water_network.models import Location, Element
class Consumer(models.Model):
first_name = models.CharField("Prénom", max_length=20)
last_name = models.CharField("Nom", max_length=20)
gender = models.CharField("Genre", max_length=1, choices=[("M", "Homme"), ("F", "Femme"), ("O", "Autre")])
phone_number = models.CharField("Numéro de téléphone", max_length=10, null=True)
location = models.CharField("Adresse", max_length=50)
household_size = models.IntegerField("Taille du ménage")
water_outlet = models.ForeignKey(Element, verbose_name="Sortie d'eau", related_name="consumers", on_delete=models.CASCADE)
creation_date = models.DateTimeField("Date de création", auto_now_add=True)
# Consumer's zone is inferred regarding the water_outlet he uses
def __str__(self):
return self.first_name + " " + self.last_name
def descript(self):
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, 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é"
def infos(self):
result = {}
for field in Consumer._meta.get_fields():
if type(field) != ManyToOneRel:
if field.name == "water_outlet":
result[field.verbose_name] = self.water_outlet.name
result["_water_outlet"] = self.water_outlet_id
elif field.name == "gender":
result[field.verbose_name] = self.get_gender_display()
result["_gender"] = self.gender
elif field.name == "phone_number":
result[field.verbose_name] = self.get_phone_number()
elif field.name == "creation_date":
result[field.verbose_name] = str(self.creation_date.date())
else:
result[field.verbose_name] = self.__getattribute__(field.name)
return result
def log_add(self, transaction):
add(self._meta.model_name, self.infos(), transaction)
def log_delete(self, transaction):
delete(self._meta.model_name, self.infos(), transaction)
def log_edit(self, old, transaction):
edit(self._meta.model_name, self.infos(), old, transaction)
class VirtualConsumersBalance(models.Model):
relevant_model = models.BigIntegerField("Id", primary_key=True)
payed = models.FloatField("Total payé", null=False, default=0)
due = models.FloatField("Total dû", null=False, default=0)
class Meta:
managed = False
db_table = 'consumer_virtualtotalbalance'