first commit
This commit is contained in:
720
app/models.py
Normal file
720
app/models.py
Normal file
@@ -0,0 +1,720 @@
|
||||
import datetime
|
||||
import re
|
||||
from datetime import timedelta
|
||||
from itertools import product
|
||||
|
||||
from app.cityandprovince import search_province_list, correct_province, search_city_list, correct_city, normalize_text
|
||||
from app.helper_excel import correction_dict
|
||||
from authentication.models import BaseModel
|
||||
from django.db import models
|
||||
|
||||
from helpers import convert_to_miladi
|
||||
|
||||
|
||||
class Poultry(BaseModel):
|
||||
UserName = models.CharField(max_length=200, null=True)
|
||||
Password = models.CharField(max_length=200, null=True)
|
||||
FirstName = models.CharField(max_length=200, null=True)
|
||||
LastName = models.CharField(max_length=200, null=True)
|
||||
UserGroupName = models.CharField(max_length=200, null=True)
|
||||
UserRoleName = models.CharField(max_length=200, null=True)
|
||||
UserGroupId = models.CharField(max_length=200, null=True)
|
||||
UserRoleId = models.CharField(max_length=200, null=True)
|
||||
Mobile = models.CharField(max_length=200, null=True)
|
||||
Email = models.CharField(max_length=200, null=True)
|
||||
UserIsActive = models.BooleanField(null=True)
|
||||
UserIsActiveDescription = models.CharField(max_length=200, null=True)
|
||||
RegDate = models.CharField(max_length=200, null=True)
|
||||
RegDateShamsi = models.CharField(max_length=200, null=True)
|
||||
RegDateShamsiWithTime = models.CharField(max_length=200, null=True)
|
||||
RegDateShamsiOnlyTime = models.CharField(max_length=200, null=True)
|
||||
StringId = models.CharField(max_length=200, null=True)
|
||||
IsPersisted = models.BooleanField(null=True)
|
||||
AllowInsert = models.BooleanField(null=True)
|
||||
AllowUpdate = models.BooleanField(null=True)
|
||||
ModalCss = models.CharField(max_length=200, null=True)
|
||||
GridContainerParametersModel = models.CharField(max_length=200, null=True)
|
||||
MenuUserAccess = models.CharField(max_length=200, null=True)
|
||||
MenuUserAccessId = models.CharField(max_length=200, null=True)
|
||||
LogTableName = models.CharField(max_length=200, null=True)
|
||||
LogTableAlias = models.CharField(max_length=200, null=True)
|
||||
PageTitle = models.CharField(max_length=200, null=True)
|
||||
UnitName = models.CharField(max_length=200, null=True)
|
||||
SystemCode = models.CharField(max_length=200, null=True)
|
||||
TrackingCode = models.CharField(max_length=200, null=True)
|
||||
EpidemiologicCode = models.CharField(max_length=200, null=True)
|
||||
PartIdCode = models.CharField(max_length=200, null=True)
|
||||
PostalCode = models.CharField(max_length=200, null=True)
|
||||
UnitId = models.CharField(max_length=200, null=True)
|
||||
UnitTypeId = models.CharField(max_length=200, null=True)
|
||||
UnitTypeName = models.CharField(max_length=200, null=True)
|
||||
LocationIdProvince = models.CharField(max_length=200, null=True)
|
||||
LocationIdCity = models.CharField(max_length=200, null=True)
|
||||
LocationNameProvince = models.CharField(max_length=200, null=True)
|
||||
LocationNameCity = models.CharField(max_length=200, null=True)
|
||||
UnitIsActive = models.BooleanField(null=True)
|
||||
UnitIsActiveDescription = models.CharField(max_length=200, null=True)
|
||||
PId = models.CharField(max_length=200, null=True)
|
||||
Province = models.CharField(max_length=500, null=True, blank=True)
|
||||
City = models.CharField(max_length=500, null=True, blank=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(Poultry, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class PoultryHatching(BaseModel):
|
||||
poultry = models.ForeignKey(
|
||||
Poultry,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="hatching_poultry",
|
||||
null=True
|
||||
)
|
||||
DesCertId = models.CharField(max_length=200, null=True)
|
||||
UnitId = models.CharField(max_length=200, null=True)
|
||||
BroilerFlockRequestId = models.IntegerField(null=True)
|
||||
RequestCode = models.CharField(max_length=200, null=True)
|
||||
StartDate = models.CharField(max_length=200, null=True)
|
||||
StartDatePersian = models.CharField(max_length=200, null=True)
|
||||
EndDate = models.CharField(max_length=200, null=True)
|
||||
EndDatePersian = models.CharField(max_length=200, null=True)
|
||||
HatchingDate = models.CharField(max_length=200, null=True)
|
||||
HatchingDatePersian = models.CharField(max_length=200, null=True)
|
||||
Date = models.DateTimeField(null=True)
|
||||
HatchingAge = models.IntegerField(default=1)
|
||||
MaxHatchingDate = models.CharField(max_length=200, null=True)
|
||||
MaxHatchingDatePersian = models.CharField(max_length=200, null=True)
|
||||
HatchingCount = models.IntegerField(null=True)
|
||||
HatchingCountInBargiri = models.IntegerField(null=True)
|
||||
HatchingCountInTakhlie = models.IntegerField(null=True)
|
||||
TrackingCount = models.IntegerField(null=True)
|
||||
TrackingBargiriCount = models.IntegerField(null=True)
|
||||
PercentHamlToMojavez = models.IntegerField(null=True)
|
||||
PercentTakhlieToBargiri = models.IntegerField(null=True)
|
||||
FlockAgeDay = models.IntegerField(null=True)
|
||||
PartIdCode = models.CharField(max_length=200, null=True)
|
||||
UnitName = models.CharField(max_length=200, null=True)
|
||||
PostalCode = models.CharField(max_length=200, null=True)
|
||||
EpidemiologicCode = models.CharField(max_length=200, null=True)
|
||||
CapacityFemale = models.IntegerField(null=True)
|
||||
PersonFullName = models.CharField(max_length=200, null=True)
|
||||
LocationIdProvince = models.CharField(max_length=200, null=True)
|
||||
LocationNameProvince = models.CharField(max_length=200, null=True)
|
||||
LocationIdCity = models.CharField(max_length=200, null=True)
|
||||
LocationNameCity = models.CharField(max_length=200, null=True)
|
||||
Mobile = models.CharField(max_length=200, null=True)
|
||||
HamlMorghMinDate = models.CharField(max_length=200, null=True)
|
||||
HamlMorghTotalCount = models.IntegerField(null=True)
|
||||
HamlMorghTakhlieCount = models.IntegerField(null=True)
|
||||
EvacuationCount = models.IntegerField(null=True)
|
||||
EvacuationCount_1 = models.IntegerField(null=True)
|
||||
EvacuationCount_2 = models.IntegerField(null=True)
|
||||
EvacuationCount_3 = models.IntegerField(null=True)
|
||||
BaseHatchingCount = models.IntegerField(null=True)
|
||||
PercentMorghToJoojeTotal = models.IntegerField(null=True)
|
||||
PercentMorghToJoojeTakhlie = models.IntegerField(null=True)
|
||||
PercentMorghToJoojeTakhlieWithEvacutaion = models.IntegerField(null=True)
|
||||
PercentNotDeliverd = models.IntegerField(null=True)
|
||||
PercentDeliveredForSP = models.IntegerField(null=True)
|
||||
PercentDeliveredForSPNoExclude = models.IntegerField(null=True)
|
||||
PercentDeliveredWithoutEvac = models.IntegerField(null=True)
|
||||
DiffHamlThanTakhlieCount = models.IntegerField(null=True)
|
||||
DiffTakhlieThanHamlCount = models.IntegerField(null=True)
|
||||
PedigreeName = models.CharField(max_length=200, null=True)
|
||||
LeftOver = models.IntegerField(null=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if hasattr(self, 'PedigreeName') and self.PedigreeName in correction_dict:
|
||||
self.PedigreeName = correction_dict[self.PedigreeName]
|
||||
self.LeftOver = self.HatchingCount - self.EvacuationCount
|
||||
hatching_date = self.HatchingDatePersian.split('/')
|
||||
date = convert_to_miladi(
|
||||
year=int(hatching_date[0]),
|
||||
month=int(hatching_date[1]),
|
||||
day=int(hatching_date[2])
|
||||
)
|
||||
self.Date = date
|
||||
super(PoultryHatching, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class Hatching(BaseModel):
|
||||
poultry = models.ForeignKey(
|
||||
Poultry,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="poultry_hatching_poultry",
|
||||
null=True
|
||||
)
|
||||
Date = models.DateTimeField(null=True)
|
||||
ArchiveDate = models.DateTimeField(null=True)
|
||||
BroilerFlockRequestId = models.IntegerField(null=True, blank=True)
|
||||
InsertDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
LastChangeStatusDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
LastChangeStatusDateShamsi = models.CharField(max_length=200, null=True, blank=True)
|
||||
FlockRequestUnitName = models.CharField(max_length=200, null=True, blank=True)
|
||||
PedigreeName = models.CharField(max_length=200, null=True, blank=True)
|
||||
StatusId = models.IntegerField(null=True, blank=True)
|
||||
Status = models.IntegerField(null=True, blank=True)
|
||||
StatusName = models.CharField(max_length=200, null=True, blank=True)
|
||||
PedigreeType = models.IntegerField(null=True, blank=True)
|
||||
BroilerPedigreeTypeName = models.CharField(max_length=200, null=True, blank=True)
|
||||
StatusColor = models.CharField(max_length=200, null=True, blank=True)
|
||||
SystemRevocationDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
RemindDays = models.IntegerField(null=True, blank=True)
|
||||
PartyCount = models.IntegerField(null=True, blank=True)
|
||||
GoodCount = models.IntegerField(null=True, blank=True)
|
||||
ShowButtons = models.BooleanField(null=True, blank=True)
|
||||
HasSync = models.BooleanField(null=True, blank=True)
|
||||
BroilerFlockRequestExpireStatus = models.IntegerField(null=True, blank=True)
|
||||
IdWithFormat = models.CharField(max_length=200, null=True, blank=True)
|
||||
ProvinceName = models.CharField(max_length=200, null=True, blank=True)
|
||||
CityName = models.CharField(max_length=200, null=True, blank=True)
|
||||
Address = models.CharField(max_length=200, null=True, blank=True)
|
||||
UnitTel = models.CharField(max_length=200, null=True, blank=True)
|
||||
UnitPostalCode = models.CharField(max_length=200, null=True, blank=True)
|
||||
UnitName = models.CharField(max_length=200, null=True, blank=True)
|
||||
SystemCode = models.CharField(max_length=200, null=True, blank=True)
|
||||
CapacityFemale = models.IntegerField(null=True, blank=True)
|
||||
EpidemiologicCode = models.CharField(max_length=200, null=True, blank=True)
|
||||
RequestCode = models.CharField(max_length=200, null=True, blank=True)
|
||||
RequestDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
RequestDateFa = models.CharField(max_length=200, null=True, blank=True)
|
||||
RequestCount = models.IntegerField(null=True, blank=True)
|
||||
DeliverDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
DeliverDateFa = models.CharField(max_length=200, null=True, blank=True)
|
||||
UnionName = models.CharField(max_length=200, null=True, blank=True)
|
||||
PersonTypeId = models.IntegerField(null=True, blank=True)
|
||||
PersonType = models.IntegerField(null=True, blank=True)
|
||||
PersonTypeName = models.CharField(max_length=200, null=True, blank=True)
|
||||
PersonFullName = models.CharField(max_length=200, null=True, blank=True)
|
||||
NationalCode = models.CharField(max_length=200, null=True, blank=True)
|
||||
InteractType = models.IntegerField(null=True, blank=True)
|
||||
InteractTypeName = models.CharField(max_length=200, null=True, blank=True)
|
||||
UnionTypeId = models.IntegerField(null=True, blank=True)
|
||||
UnionTypeName = models.CharField(max_length=200, null=True, blank=True)
|
||||
SendDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
SendDateFa = models.CharField(max_length=200, null=True, blank=True)
|
||||
ChickCountSum = models.IntegerField(null=True, blank=True)
|
||||
CalculatedDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
CalculatedDateFa = models.CharField(max_length=200, null=True, blank=True)
|
||||
PartIdCode = models.CharField(max_length=200, null=True, blank=True)
|
||||
CertId = models.CharField(max_length=200, null=True, blank=True)
|
||||
StartDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
StartDateFa = models.CharField(max_length=200, null=True, blank=True)
|
||||
EndDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
EndDateFa = models.CharField(max_length=200, null=True, blank=True)
|
||||
RemainCredit = models.IntegerField(null=True, blank=True)
|
||||
StrRemainCredit = models.CharField(max_length=200, null=True, blank=True)
|
||||
ShowStatus = models.CharField(max_length=200, null=True, blank=True)
|
||||
ValidStatus = models.CharField(max_length=200, null=True, blank=True)
|
||||
ValidStatusName = models.CharField(max_length=200, null=True, blank=True)
|
||||
RegDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
RegDateShamsi = models.CharField(max_length=200, null=True, blank=True)
|
||||
RegDateShamsiWithTime = models.CharField(max_length=200, null=True, blank=True)
|
||||
RegDateShamsiOnlyTime = models.CharField(max_length=200, null=True, blank=True)
|
||||
HatchingId = models.CharField(max_length=200, null=True, blank=True)
|
||||
StringId = models.CharField(max_length=200, null=True, blank=True)
|
||||
IsPersisted = models.BooleanField(null=True, blank=True)
|
||||
AllowInsert = models.BooleanField(null=True, blank=True)
|
||||
AllowUpdate = models.BooleanField(null=True, blank=True)
|
||||
ModalCss = models.CharField(max_length=200, null=True, blank=True)
|
||||
GridContainerParametersModel = models.CharField(max_length=200, null=True, blank=True)
|
||||
MenuUserAccess = models.CharField(max_length=200, null=True, blank=True)
|
||||
MenuUserAccessId = models.IntegerField(null=True, blank=True)
|
||||
LogTableName = models.CharField(max_length=200, null=True, blank=True)
|
||||
LogTableAlias = models.CharField(max_length=200, null=True, blank=True)
|
||||
PageTitle = models.CharField(max_length=200, null=True, blank=True)
|
||||
Evacuation = models.IntegerField(default=0)
|
||||
Age = models.IntegerField(null=True)
|
||||
KillingAve = models.IntegerField(default=0)
|
||||
Period = models.IntegerField(default=1)
|
||||
LeftOver = models.IntegerField(null=True)
|
||||
samasat_discharge_percentage = models.IntegerField(default=0)
|
||||
GoodSum = models.IntegerField(default=0)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if hasattr(self, 'PedigreeName') and self.PedigreeName in correction_dict:
|
||||
self.PedigreeName = correction_dict[self.PedigreeName]
|
||||
try:
|
||||
date1 = AllProductsTransport.objects.filter(hatching__id=self.id, trash=False, product='جوجه یک روزه گوشتی').order_by('date').first().date
|
||||
date = datetime.datetime(year=date1.year, month=date1.month, day=date1.day, hour=10,
|
||||
minute=1,
|
||||
second=1)
|
||||
except:
|
||||
hatching_date = self.SendDateFa.split('/')
|
||||
date = convert_to_miladi(
|
||||
year=int(hatching_date[0]),
|
||||
month=int(hatching_date[1]),
|
||||
day=int(hatching_date[2])
|
||||
)
|
||||
self.Date = date
|
||||
self.Age = (datetime.datetime.now().date() - self.Date.date()).days + 1
|
||||
if self.ProvinceName and self.ProvinceName not in search_province_list:
|
||||
self.ProvinceName = correct_province(self.ProvinceName)
|
||||
if self.CityName and self.CityName not in search_city_list:
|
||||
self.CityName = correct_city(self.CityName, self.ProvinceName)
|
||||
self.ChickCountSum = self.GoodSum
|
||||
super(Hatching, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class TransportingDetail(BaseModel):
|
||||
hatching = models.ForeignKey(
|
||||
Hatching,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="transport_hatching",
|
||||
null=True
|
||||
)
|
||||
BroilerFlockRequestId = models.IntegerField(null=True, blank=True)
|
||||
TrackingCode = models.CharField(max_length=200, null=True)
|
||||
DesCertId = models.CharField(max_length=200, null=True)
|
||||
IssueDate = models.CharField(max_length=200, null=True)
|
||||
IssueDatePersian = models.CharField(max_length=200, null=True)
|
||||
GoodCode = models.IntegerField(null=True)
|
||||
GoodName = models.CharField(max_length=200, null=True)
|
||||
GoodAmount = models.IntegerField(null=True)
|
||||
TrackingStatus = models.IntegerField(null=True)
|
||||
TrackingStatusDescription = models.CharField(max_length=200, null=True)
|
||||
TakhlieDate = models.CharField(max_length=200, null=True)
|
||||
TakhlieDatePersian = models.CharField(max_length=200, null=True)
|
||||
SourcePartIdCode = models.CharField(max_length=200, null=True)
|
||||
SourceUnitPartIdCode = models.CharField(max_length=200, null=True)
|
||||
SourceUnitName = models.CharField(max_length=200, null=True)
|
||||
SourceCertId = models.CharField(max_length=200, null=True)
|
||||
ResideDate = models.CharField(max_length=200, null=True)
|
||||
ResideDatePersian = models.CharField(max_length=200, null=True)
|
||||
PedigreeName = models.CharField(max_length=200, null=True)
|
||||
DesUnitName = models.CharField(max_length=200, null=True)
|
||||
DesPartIdCode = models.CharField(max_length=200, null=True)
|
||||
HealthPermitId = models.IntegerField(null=True)
|
||||
Province = models.CharField(max_length=200, null=True)
|
||||
City = models.CharField(max_length=200, null=True)
|
||||
Age = models.IntegerField(null=True)
|
||||
Date = models.DateTimeField(null=True)
|
||||
Out = models.BooleanField(default=False)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
issue = self.IssueDatePersian.split('/')
|
||||
date = convert_to_miladi(
|
||||
year=int(issue[0]),
|
||||
month=int(issue[1]),
|
||||
day=int(issue[2])
|
||||
)
|
||||
self.Date = date
|
||||
kill_house = KillHouse.objects.filter(PartIdCode=self.DesPartIdCode, trash=False).first()
|
||||
if kill_house:
|
||||
self.Province = kill_house.Province
|
||||
self.City = kill_house.City
|
||||
if self.Province and self.Province not in search_province_list:
|
||||
self.Province = correct_province(self.Province)
|
||||
if self.City and self.City not in search_city_list:
|
||||
self.City = correct_city(self.City, self.Province)
|
||||
super(TransportingDetail, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class TransportingChickenDetail(BaseModel):
|
||||
hatching = models.ForeignKey(
|
||||
PoultryHatching,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="transporting_hatching",
|
||||
null=True
|
||||
)
|
||||
TrackingCode = models.CharField(max_length=200, null=True)
|
||||
DesCertId = models.CharField(max_length=200, null=True)
|
||||
IssueDate = models.CharField(max_length=200, null=True)
|
||||
IssueDatePersian = models.CharField(max_length=200, null=True)
|
||||
issue_date = models.DateTimeField(null=True)
|
||||
GoodCode = models.IntegerField(null=True)
|
||||
GoodName = models.CharField(max_length=200, null=True)
|
||||
GoodAmount = models.IntegerField(null=True)
|
||||
TrackingStatus = models.IntegerField(null=True)
|
||||
TrackingStatusDescription = models.CharField(max_length=200, null=True)
|
||||
TakhlieDate = models.CharField(max_length=200, null=True)
|
||||
TakhlieDatePersian = models.CharField(max_length=200, null=True)
|
||||
SourcePartIdCode = models.CharField(max_length=200, null=True)
|
||||
SourceUnitName = models.CharField(max_length=200, null=True)
|
||||
SourceCertId = models.CharField(max_length=200, null=True)
|
||||
ParentPartIdCode = models.CharField(max_length=200, null=True)
|
||||
ParentUnitName = models.CharField(max_length=200, null=True)
|
||||
CertId = models.CharField(max_length=200, null=True)
|
||||
ResideDate = models.CharField(max_length=200, null=True)
|
||||
ResideDatePersian = models.CharField(max_length=200, null=True)
|
||||
reside_date = models.DateTimeField(null=True)
|
||||
PedigreeName = models.CharField(max_length=200, null=True)
|
||||
BroilerFlockRequestId = models.IntegerField(null=True)
|
||||
SourceUnitPartIdCode = models.CharField(max_length=200, null=True)
|
||||
DesUnitName = models.CharField(max_length=200, null=True)
|
||||
DesPartIdCode = models.CharField(max_length=200, null=True)
|
||||
HealthPermitId = models.IntegerField(null=True)
|
||||
ProvinceId = models.CharField(max_length=200, null=True)
|
||||
Province = models.CharField(max_length=200, null=True)
|
||||
age = models.IntegerField(default=1)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
Issue = self.IssueDatePersian.split('/')
|
||||
date = convert_to_miladi(
|
||||
year=int(Issue[0]),
|
||||
month=int(Issue[1]),
|
||||
day=int(Issue[2])
|
||||
)
|
||||
self.issue_date = date
|
||||
|
||||
Reside = self.ResideDatePersian.split('/')
|
||||
date = convert_to_miladi(
|
||||
year=int(Reside[0]),
|
||||
month=int(Reside[1]),
|
||||
day=int(Reside[2])
|
||||
)
|
||||
self.reside_date = date
|
||||
if self.hatching:
|
||||
self.age = (self.issue_date.date() - self.hatching.Date.date()).days + 1
|
||||
super(TransportingChickenDetail, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class KillHouse(BaseModel):
|
||||
PartIdCode = models.CharField(max_length=250, null=True, blank=True)
|
||||
UnitName = models.CharField(max_length=250, null=True, blank=True)
|
||||
Province = models.CharField(max_length=250, null=True, blank=True)
|
||||
City = models.CharField(max_length=250, null=True, blank=True)
|
||||
ProvinceId = models.CharField(max_length=200, null=True, blank=True)
|
||||
CityId = models.CharField(max_length=200, null=True, blank=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(KillHouse, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class ApkInfo(BaseModel):
|
||||
info = models.JSONField(null=True)
|
||||
download_link = models.CharField(max_length=700, null=True, blank=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(ApkInfo, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class TransportCarcassDetail(BaseModel): # بارهای لاشه
|
||||
id_quarantineh = models.CharField(max_length=255, null=True, blank=True) # id
|
||||
destination_prev = models.CharField(max_length=255, null=True, blank=True) # مقصد قبلی
|
||||
destination_changed = models.CharField(max_length=255, null=True, blank=True) # تغییر مقصد
|
||||
payment = models.CharField(max_length=255, null=True, blank=True) # پرداخت
|
||||
tracking = models.CharField(max_length=255, null=True, blank=True, unique=True) # رهگیری
|
||||
date = models.DateField(null=True, blank=True) # تاریخ
|
||||
time = models.TimeField(null=True, blank=True) # ساعت
|
||||
product = models.CharField(max_length=255, null=True, blank=True) # محصول
|
||||
items = models.CharField(max_length=255, null=True, blank=True) # اقلام
|
||||
quantity = models.FloatField(null=True, blank=True) # مقدار
|
||||
unit = models.CharField(max_length=50, null=True, blank=True) # واحد
|
||||
origin_province = models.CharField(max_length=255, null=True, blank=True) # استان مبدا
|
||||
origin_city = models.CharField(max_length=255, null=True, blank=True) # شهرستان مبدا
|
||||
origin = models.CharField(max_length=255, null=True, blank=True) # مبدا
|
||||
destination_province = models.CharField(max_length=255, null=True, blank=True) # استان مقصد
|
||||
destination_city = models.CharField(max_length=255, null=True, blank=True) # شهرستان مقصد
|
||||
destination = models.CharField(max_length=255, null=True, blank=True) # مقصد
|
||||
jihadi_origin = models.CharField(max_length=255, null=True, blank=True) # ش جهادی مبدا
|
||||
jihadi_destination = models.CharField(max_length=255, null=True, blank=True) # ش جهادی مقصد
|
||||
owner = models.CharField(max_length=255, null=True, blank=True) # مالک
|
||||
car_tracking_code = models.CharField(max_length=255, null=True, blank=True) # کد رهگیری خودرو
|
||||
driver_name = models.CharField(max_length=255, null=True, blank=True) # نام راننده
|
||||
plate = models.CharField(max_length=50, null=True, blank=True) # پلاک
|
||||
amount = models.DecimalField(max_digits=20, decimal_places=2, null=True, blank=True) # مبلغ
|
||||
unloading = models.CharField(max_length=255, null=True, blank=True) # تخلیه
|
||||
gross_weight = models.FloatField(null=True, blank=True) # وزن پر
|
||||
tare_weight = models.FloatField(null=True, blank=True) # وزن خالی
|
||||
net_weight = models.FloatField(null=True, blank=True) # وزن
|
||||
scale_code = models.CharField(max_length=255, null=True, blank=True) # کد باسکول
|
||||
scale_name = models.CharField(max_length=255, null=True, blank=True) # نام باسکول
|
||||
scale_receipt = models.CharField(max_length=255, null=True, blank=True) # قبض باسکول
|
||||
unloading_date = models.DateField(null=True, blank=True) # تاریخ تخلیه
|
||||
out = models.BooleanField(default=False) # Out (True/False)
|
||||
product_date = models.DateField(null=True, blank=True) # تاریخ
|
||||
has_product_date = models.BooleanField(default=False) # دارای تاریخ
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.origin_province:
|
||||
self.origin_province = normalize_text(correct_province(self.origin_province))
|
||||
if self.origin_city:
|
||||
self.origin_city = normalize_text(correct_city(self.origin_city, self.origin_province))
|
||||
|
||||
if self.destination_province:
|
||||
self.destination_province = normalize_text(correct_province(self.destination_province))
|
||||
if self.destination_city:
|
||||
self.destination_city = normalize_text(correct_city(self.destination_city, self.destination_province))
|
||||
if isinstance(self.product_date, str):
|
||||
try:
|
||||
self.product_date = datetime.datetime.strptime(self.product_date, '%Y-%m-%d').date()
|
||||
except ValueError:
|
||||
try:
|
||||
self.product_date = datetime.datetime.strptime(self.product_date, '%Y/%m/%d').date()
|
||||
except ValueError:
|
||||
self.product_date = None
|
||||
super(TransportCarcassDetail, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class Guilds(BaseModel):
|
||||
name = models.CharField(max_length=255, null=True, blank=True)
|
||||
city = models.CharField(max_length=255, null=True, blank=True)
|
||||
province = models.CharField(max_length=255, null=True, blank=True)
|
||||
jihadi_code = models.CharField(max_length=255, null=True, blank=True)
|
||||
is_steward = models.BooleanField(default=False)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.province:
|
||||
self.province = normalize_text(correct_province(self.province))
|
||||
if self.city:
|
||||
self.city = normalize_text(correct_city(self.city, self.province))
|
||||
super(Guilds, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class Driver(BaseModel):
|
||||
car_id = models.CharField(max_length=255, null=True, blank=True)
|
||||
driver_name = models.CharField(max_length=255, null=True, blank=True)
|
||||
owner_name = models.CharField(max_length=255, null=True, blank=True)
|
||||
city = models.CharField(max_length=255, null=True, blank=True)
|
||||
province = models.CharField(max_length=255, null=True, blank=True)
|
||||
pelak = models.CharField(max_length=255, null=True, blank=True)
|
||||
tracking_code = models.CharField(max_length=255, null=True, blank=True)
|
||||
weight = models.IntegerField(null=True, blank=True)
|
||||
car_type = models.CharField(max_length=255, null=True, blank=True)
|
||||
expire_licence_date = models.DateField(null=True, blank=True)
|
||||
health_permit = models.CharField(max_length=255, null=True, blank=True)
|
||||
product = models.CharField(max_length=255, null=True, blank=True)
|
||||
part_id_code = models.CharField(max_length=255, null=True, blank=True)
|
||||
kill_house_name = models.CharField(max_length=255, null=True, blank=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.province:
|
||||
self.province = normalize_text(correct_province(self.province))
|
||||
if self.city:
|
||||
self.city = normalize_text(correct_city(self.city, self.province))
|
||||
super(Driver, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class InquiryCredentials(BaseModel):
|
||||
data = models.JSONField(null=True, blank=True)
|
||||
numbers = models.JSONField(null=True, blank=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(InquiryCredentials, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class EvacuationDetail(BaseModel): # گزارشات تلفات جوجه ریزی
|
||||
hatching = models.ForeignKey(
|
||||
Hatching,
|
||||
on_delete=models.CASCADE,
|
||||
related_name="evacuation_details",
|
||||
null=True,
|
||||
blank=True
|
||||
)
|
||||
PartIdCode = models.CharField(max_length=200, null=True, blank=True)
|
||||
RequestId = models.CharField(max_length=200, null=True, blank=True)
|
||||
MoReportId = models.CharField(max_length=200, null=True, blank=True)
|
||||
ReportType = models.IntegerField(null=True, blank=True)
|
||||
ReportTypeString = models.CharField(max_length=255, null=True, blank=True)
|
||||
ReportDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
ReportDateShamsi = models.CharField(max_length=200, null=True, blank=True)
|
||||
MoReason = models.TextField(null=True, blank=True)
|
||||
MoDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
MoDateShamsi = models.CharField(max_length=200, null=True, blank=True)
|
||||
MoStartDay = models.IntegerField(null=True, blank=True)
|
||||
MoEndDay = models.IntegerField(null=True, blank=True)
|
||||
MoReportSubId = models.CharField(max_length=200, null=True, blank=True)
|
||||
ReportStatus = models.IntegerField(null=True, blank=True)
|
||||
GoodCount = models.IntegerField(null=True, blank=True)
|
||||
Message = models.TextField(null=True, blank=True)
|
||||
ErrorCode = models.IntegerField(null=True, blank=True)
|
||||
IsDeleted = models.BooleanField(default=False)
|
||||
RegDate = models.CharField(max_length=200, null=True, blank=True)
|
||||
RegDateShamsi = models.CharField(max_length=200, null=True, blank=True)
|
||||
RegDateShamsiWithTime = models.CharField(max_length=200, null=True, blank=True)
|
||||
RegDateShamsiOnlyTime = models.CharField(max_length=200, null=True, blank=True)
|
||||
ExternalId = models.CharField(max_length=200, null=True, blank=True)
|
||||
StringId = models.CharField(max_length=200, null=True, blank=True)
|
||||
IsPersisted = models.BooleanField(default=False)
|
||||
AllowInsert = models.BooleanField(default=False)
|
||||
AllowUpdate = models.BooleanField(default=False)
|
||||
ModalCss = models.CharField(max_length=255, null=True, blank=True)
|
||||
GridContainerParametersModel = models.CharField(max_length=255, null=True, blank=True)
|
||||
MenuUserAccess = models.CharField(max_length=255, null=True, blank=True)
|
||||
MenuUserAccessId = models.IntegerField(null=True, blank=True)
|
||||
LogTableName = models.CharField(max_length=255, null=True, blank=True)
|
||||
LogTableAlias = models.CharField(max_length=255, null=True, blank=True)
|
||||
PageTitle = models.CharField(max_length=255, null=True, blank=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
def parse_dotnet_date(dotnet_string):
|
||||
if not dotnet_string:
|
||||
return None
|
||||
try:
|
||||
match = re.search(r'/Date\((\d+)\)/', str(dotnet_string))
|
||||
if match:
|
||||
milliseconds = int(match.group(1))
|
||||
return datetime.datetime.utcfromtimestamp(milliseconds / 1000)
|
||||
except (ValueError, TypeError):
|
||||
pass
|
||||
return None
|
||||
|
||||
def parse_shamsi_date(shamsi_string):
|
||||
if not shamsi_string:
|
||||
return None
|
||||
try:
|
||||
parts = str(shamsi_string).split('/')
|
||||
if len(parts) == 3:
|
||||
year, month, day = map(int, parts)
|
||||
return convert_to_miladi(year=year, month=month, day=day)
|
||||
except (ValueError, TypeError):
|
||||
pass
|
||||
return None
|
||||
|
||||
def parse_shamsi_with_time(value):
|
||||
if not value:
|
||||
return None
|
||||
try:
|
||||
text = str(value)
|
||||
if '(' in text and ')' in text:
|
||||
date_part, time_part = text.split('(')
|
||||
date_part = date_part.strip()
|
||||
time_part = time_part.replace(')', '').strip()
|
||||
base_date = parse_shamsi_date(date_part)
|
||||
if base_date:
|
||||
hour, minute, second = map(int, time_part.split(':'))
|
||||
return datetime.datetime(
|
||||
year=base_date.year,
|
||||
month=base_date.month,
|
||||
day=base_date.day,
|
||||
hour=hour,
|
||||
minute=minute,
|
||||
second=second
|
||||
)
|
||||
except (ValueError, TypeError):
|
||||
pass
|
||||
return None
|
||||
|
||||
def parse_time_only(value):
|
||||
if not value:
|
||||
return None
|
||||
try:
|
||||
hour, minute, second = map(int, value.split(':'))
|
||||
return datetime.time(hour=hour, minute=minute, second=second)
|
||||
except (ValueError, TypeError):
|
||||
pass
|
||||
return None
|
||||
|
||||
dotnet_report = parse_dotnet_date(self.ReportDate)
|
||||
if dotnet_report:
|
||||
self.ReportDate = dotnet_report.strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
dotnet_mo = parse_dotnet_date(self.MoDate)
|
||||
if dotnet_mo:
|
||||
self.MoDate = dotnet_mo.strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
dotnet_reg = parse_dotnet_date(self.RegDate)
|
||||
if dotnet_reg:
|
||||
self.RegDate = dotnet_reg.strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
shamsi_report = parse_shamsi_date(self.ReportDateShamsi)
|
||||
if shamsi_report:
|
||||
self.ReportDateShamsi = shamsi_report.strftime('%Y-%m-%d')
|
||||
|
||||
shamsi_mo = parse_shamsi_date(self.MoDateShamsi)
|
||||
if shamsi_mo:
|
||||
self.MoDateShamsi = shamsi_mo.strftime('%Y-%m-%d')
|
||||
|
||||
shamsi_reg = parse_shamsi_date(self.RegDateShamsi)
|
||||
if shamsi_reg:
|
||||
self.RegDateShamsi = shamsi_reg.strftime('%Y-%m-%d')
|
||||
|
||||
shamsi_with_time = parse_shamsi_with_time(self.RegDateShamsiWithTime)
|
||||
if shamsi_with_time:
|
||||
self.RegDateShamsiWithTime = shamsi_with_time.strftime('%Y-%m-%d %H:%M:%S')
|
||||
|
||||
time_only = parse_time_only(self.RegDateShamsiOnlyTime)
|
||||
if time_only:
|
||||
self.RegDateShamsiOnlyTime = time_only.strftime('%H:%M:%S')
|
||||
|
||||
super(EvacuationDetail, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class AllProductsTransport(BaseModel): # بارهای تمامی محصولات
|
||||
hatching = models.ForeignKey(
|
||||
Hatching,
|
||||
on_delete=models.SET_NULL,
|
||||
related_name="all_products_transports",
|
||||
null=True,
|
||||
blank=True
|
||||
)
|
||||
record_id = models.CharField(max_length=255, null=True, blank=True) # id (نام تغییر یافته)
|
||||
destination_prev = models.CharField(max_length=255, null=True, blank=True) # مقصد قبلی
|
||||
destination_changed = models.CharField(max_length=255, null=True, blank=True) # تغییر مقصد
|
||||
tracking = models.CharField(max_length=255, null=True, blank=True, unique=True) # کد رهگیری
|
||||
date = models.DateField(null=True, blank=True) # تاریخ
|
||||
product = models.CharField(max_length=255, null=True, blank=True) # محصول
|
||||
items = models.CharField(max_length=255, null=True, blank=True) # اقلام
|
||||
quantity = models.FloatField(null=True, blank=True) # مقدار
|
||||
unit = models.CharField(max_length=50, null=True, blank=True) # واحد
|
||||
origin_province = models.CharField(max_length=255, null=True, blank=True) # استان مبدا
|
||||
origin_city = models.CharField(max_length=255, null=True, blank=True) # شهرستان مبدا
|
||||
origin = models.CharField(max_length=255, null=True, blank=True) # مبدا
|
||||
destination_province = models.CharField(max_length=255, null=True, blank=True) # استان مقصد
|
||||
destination_city = models.CharField(max_length=255, null=True, blank=True) # شهرستان مقصد
|
||||
destination = models.CharField(max_length=255, null=True, blank=True) # مقصد
|
||||
jihadi_origin = models.CharField(max_length=255, null=True, blank=True) # ش جهادی مبدا
|
||||
jihadi_destination = models.CharField(max_length=255, null=True, blank=True) # ش جهادی مقصد
|
||||
owner = models.CharField(max_length=255, null=True, blank=True) # مالک
|
||||
car_tracking_code = models.CharField(max_length=255, null=True, blank=True) # کد رهگیری خودرو
|
||||
driver_name = models.CharField(max_length=255, null=True, blank=True) # نام راننده
|
||||
gross_weight = models.FloatField(null=True, blank=True) # وزن پر
|
||||
tare_weight = models.FloatField(null=True, blank=True) # وزن خالی
|
||||
net_weight = models.FloatField(null=True, blank=True) # وزن
|
||||
scale_code = models.CharField(max_length=255, null=True, blank=True) # کد باسکول
|
||||
scale_name = models.CharField(max_length=255, null=True, blank=True) # نام باسکول
|
||||
scale_receipt = models.CharField(max_length=255, null=True, blank=True) # قبض باسکول
|
||||
unloading_date = models.DateField(null=True, blank=True) # تاریخ تخلیه
|
||||
unloading = models.CharField(max_length=255, null=True, blank=True) # تخلیه
|
||||
out = models.BooleanField(default=False) # Out (True/False)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
# تصحیح استان/شهر مبدا
|
||||
if self.origin_province:
|
||||
self.origin_province = normalize_text(correct_province(self.origin_province))
|
||||
if self.origin_city:
|
||||
self.origin_city = normalize_text(correct_city(self.origin_city, self.origin_province))
|
||||
|
||||
# تصحیح استان/شهر مقصد
|
||||
if self.destination_province:
|
||||
self.destination_province = normalize_text(correct_province(self.destination_province))
|
||||
if self.destination_city:
|
||||
self.destination_city = normalize_text(correct_city(self.destination_city, self.destination_province))
|
||||
|
||||
# تنظیم out بر اساس تفاوت استان مبدا و مقصد
|
||||
if self.origin_province and self.destination_province:
|
||||
if self.origin_province != self.destination_province:
|
||||
self.out = True
|
||||
else:
|
||||
self.out = False
|
||||
|
||||
# تبدیل تاریخها از string به date در صورت نیاز
|
||||
if isinstance(self.date, str):
|
||||
try:
|
||||
self.date = datetime.datetime.strptime(self.date, '%Y-%m-%d').date()
|
||||
except ValueError:
|
||||
try:
|
||||
self.date = datetime.datetime.strptime(self.date, '%Y/%m/%d').date()
|
||||
except ValueError:
|
||||
self.date = None
|
||||
|
||||
if isinstance(self.unloading_date, str):
|
||||
try:
|
||||
self.unloading_date = datetime.datetime.strptime(self.unloading_date, '%Y-%m-%d').date()
|
||||
except ValueError:
|
||||
try:
|
||||
self.unloading_date = datetime.datetime.strptime(self.unloading_date, '%Y/%m/%d').date()
|
||||
except ValueError:
|
||||
self.unloading_date = None
|
||||
|
||||
super(AllProductsTransport, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
class RasadyarAppInfo(BaseModel):
|
||||
info = models.JSONField(null=True, blank=True)
|
||||
file = models.CharField(max_length=700, null=True, blank=True)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
super(RasadyarAppInfo, self).save(*args, **kwargs)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user