169 lines
No EOL
4.4 KiB
Python
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=6,
|
|
verbose_name="X UTM",
|
|
null=True,
|
|
blank=True
|
|
)
|
|
utm_y = models.DecimalField(
|
|
max_digits=10,
|
|
decimal_places=6,
|
|
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 |