shafafiyat/wells/models.py

169 lines
No EOL
4.4 KiB
Python

from django.db import models
from common.models import SluggedModel, BaseModel
from django.contrib.auth import get_user_model
from simple_history.models import HistoricalRecords
from locations.models import Affairs, Broker, County
import utm
from uuid import uuid4
import os
class WaterMeterManufacturer(BaseModel):
name = models.CharField(
max_length=20,
verbose_name="نام شرکت سازنده کنتور آب",
null=True,
blank=True)
def __str__(self):
return self.name
class Meta:
verbose_name = "شرکت سازنده کنتور آب"
verbose_name_plural = "شرکت‌های سازنده کنتور آب"
class Well(SluggedModel):
def path_and_rename(self, filename):
upload_to = "representative_letters"
ext = filename.split(".")[-1]
# create unique filename
filename = f"{uuid4().hex}.{ext}"
# return the whole path to the file
return os.path.join(upload_to, filename)
Hemisphere_Choices = [
('N', 'شمال'),
('S', 'جنوب'),
]
representative = models.ForeignKey(
get_user_model(),
on_delete=models.SET_NULL,
verbose_name="نماینده",
related_name="wells",
null=True,
)
water_subscription_number = models.CharField(
max_length=20,
verbose_name="شماره اشتراک آب",
unique=True
)
electricity_subscription_number = models.CharField(
max_length=20,
verbose_name="شماره اشتراک برق",
null=True,
unique=True
)
water_meter_serial_number = models.CharField(
max_length=20,
verbose_name="سریال کنتور آب",
null=True,
blank=True
)
water_meter_old_serial_number = models.CharField(
max_length=20,
verbose_name="سریال کنتور قدیمی آب",
null=True,
blank=True
)
water_meter_manufacturer = models.ForeignKey(
WaterMeterManufacturer,
on_delete=models.SET_NULL,
verbose_name="شرکت سازنده کنتور آب",
null=True,
blank=True
)
utm_x = models.DecimalField(
max_digits=10,
decimal_places=0,
verbose_name="X UTM",
null=True,
blank=True
)
utm_y = models.DecimalField(
max_digits=10,
decimal_places=0,
verbose_name="Y UTM",
null=True,
blank=True
)
utm_zone = models.PositiveIntegerField(
verbose_name="زون UTM",
null=True,
blank=True,
default=40
)
utm_hemisphere = models.CharField(
max_length=1,
verbose_name="نیمکره UTM",
null=True,
blank=True,
choices=Hemisphere_Choices,
default='N'
)
well_power = models.PositiveIntegerField(
verbose_name="قدرت چاه",
null=True,
blank=True
)
reference_letter_number = models.CharField(
max_length=20,
verbose_name="شماره معرفی نامه",
null=True,
blank=True
)
reference_letter_date = models.DateField(
verbose_name="تاریخ معرفی نامه",
null=True,
blank=True
)
representative_letter_file = models.FileField(
upload_to=path_and_rename,
verbose_name="نامه نمایندگی",
null=True,
blank=True
)
affairs = models.ForeignKey(
Affairs,
on_delete=models.SET_NULL,
verbose_name="امور",
null=True,
blank=True
)
county = models.ForeignKey(
County,
on_delete=models.SET_NULL,
verbose_name="شهرستان",
null=True,
blank=True
)
broker = models.ForeignKey(
Broker,
on_delete=models.SET_NULL,
verbose_name="کارگزار",
null=True,
blank=True
)
history = HistoricalRecords()
class Meta:
verbose_name = "چاه"
verbose_name_plural = "چاه‌ها"
def __str__(self):
return self.water_subscription_number
def lat_long(self):
if self.utm_x and self.utm_y and self.utm_zone and self.utm_hemisphere:
northern = False if self.utm_hemisphere == 'S' else True
return utm.to_latlon(self.utm_x, self.utm_y, self.utm_zone, northern=northern)
return None