first commit

This commit is contained in:
2026-01-18 11:29:19 +03:30
commit b42c80cf1c
354 changed files with 14705 additions and 0 deletions

0
app/__init__.py Normal file
View File

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

3
app/admin.py Normal file
View File

@@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

6
app/apps.py Normal file
View File

@@ -0,0 +1,6 @@
from django.apps import AppConfig
class AppConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'app'

663
app/cityandprovince.py Normal file
View File

@@ -0,0 +1,663 @@
search_city_list = ["آغاجری"
"سلسله", "معمولان", "کوهدشت", "آمل", "بابل", "بابلسر", "بهشهر",
"تنکابن", "جویبار", "چالوس", "رامسر", "ساری", "سواد کوه",
"سوادکوه شمالی", "سیمرغ", "عباس آباد", "فریدونکنار", "قائم شهر",
"گلوگاه", "محمود آباد", "میاندورود", "نکا", "نور", "نوشهر",
"کلاردشت", "آشتیان", "اراک", "تفرش", "خمین", "خنداب", "دلیجان",
"زرندیه", "ساوه", "شازند", "فراهان", "کمیجان", "محلات", "ابوموسی",
"بستک", "بشاگرد", "بندرعباس", "بندرلنگه", "پارسیان", "جاسک",
"حاجی آباد", "خمیر", "رودان", "سیریک", "قشم", "میناب", "اسدآباد",
"بهار", "تویسرکان", "درگزین", "رزن", "فامنین", "کبودرآهنگ", "ملایر",
"نهاوند", "همدان", "ابرکوه", "اردکان", "بافق", "بهاباد", "تفت",
"خاتم", "صدوق", "مروست", "زارچ", "مهریز", "میبد", "یزد",
"ثلاث باباجانی", "جوانرود", "دالاهو", "روانسر", "سر پل ذهاب",
"سنقر", "صحنه", "قصر شیرین", "گیلانغرب", "ماهیدشت", "هرسین",
"کرمانشاه", "کنگاور", "باشت", "بهمئی", "بویراحمد", "چرام", "دنا",
"گچساران", "لنده", "مارگون", "کهگیلویه", "آزاد شهر", "آق قلا",
"بندر گز", "ترکمن", "رامیان", "علی آباد", "گالیکش", "گرگان",
"گمیشان", "گنبد کاووس", "مراوه تپه", "مینودشت", "کردکوی",
"کلاله", "آستارا", "آستانه اشرفیه", "املش", "بندر انزلی",
"تالش", "خمام", "رشت", "رضوانشهر", "رودبار", "رودسر", "سیاهکل",
"شفت", "صومعه سرا", "طوالش", "فومن", "لاهیجان", "لنگرود", "ماسال",
"ازنا", "الیگودرز", "بروجرد", "پلدختر", "چگنی", "خرم آباد",
"دلفان", "دورود", "رومشکان", "زاهدان", "زرآباد", "زهک", "سراوان",
"سرباز", "سیب سوران", "فنوج", "قصرقند", "گلشن", "لاشار",
"مهرستان", "میرجاوه", "نیمروز", "نیک شهر", "هامون", "هیرمند",
"کنارک", "آباده", "ارسنجان", "استهبان", "اقلید", "اوز", "بختگان",
"بوانات", "بیضا", "پاسارگاد", "جهرم", "جویم", "خرامه", "خرم بید",
"خفر", "خنج", "داراب", "رستم", "زرقان", "زرین دشت", "سپیدان",
"سرچهان", "سروستان", "شیراز", "فراشبند", "فسا", "فیروز آباد",
"قیر و کارزین", "گراش", "لارستان", "لامرد", "مرودشت", "ممسنی",
"مهر", "نی ریز", "کازرون", "کوار", "کوه چنار", "آبیک", "آوج",
"البرز", "بوئین زهرا", "تاکستان", "قزوین", "جعفریه", "خلجستان",
"سلفچگان", "قم", "کهک", "بانه", "بیجار", "دهگلان", "دیواندره"
"سرو آباد", "سقز", "سنندج", "قروه", "مریوان",
"کامیاران",
"ارزوئیه", "انار", "بافت", "بردسیر", "بم", "رابر", "راور",
"رفسنجان", "ریگان", "زرند", "سیرجان", "شهربابک", "فهرج",
"گنبکی", "نرماشیر", "کرمان", "کوهبنان", "اسلام آباد غرب",
"پاوه", "رشتخوار", "زاوه", "زبرخان", "سبزوار", "سرخس",
"ششتمد", "صالح آباد", "طرقبه", "فریمان", "فیروزه", "قوچان",
"گلبهار", "گناباد", "مشهد", "مه ولات", "نیشابور", "کاشمر",
"کلات", "کوهسرخ", "اسفراین", "بام و صفی آباد", "بجنورد",
"جاجرم", "راز و جرگلان", "سملقان", "شیروان", "فاروج", "گرمه",
"مانه", "آبادان"
, "امیدیه", "اندیمشک", "اندیکا", "اهواز", "ایذه", "باغ ملک", "باوی", "بندر ماهشهر",
"بهبهان", "حمیدیه", "خرمشهر", "دزپارت", "دزفول", "دشت آزادگان", "رامشیر", "رامهرمز", "شادگان",
"شوش", "شوشتر", "صیدون", "گتوند", "لالی", "مسجد سلیمان", "هفتگل", "هندیجان", "هویزه", "کارون",
"کرخه", "ابهر", "ایجرود", "خدابنده", "خرمدره", "زنجان", "سلطانیه", "طارم", "ماهنشان", "آرادان",
"دامغان", "سرخه", "سمنان", "شاهرود", "گرمسار", "مهدی شهر", "میامی", "ایرانشهر", "بمپور", "تفتان",
"چاه بهار", "خاش", "دشتیاری", "دلگان", "راسک", "زابل", "آذرشهر", "اسکو", "اهر", "بستان آباد",
"بناب", "تبریز", "جلفا", "چاراویماق", "خدا آفرین", "سراب", "شبستر", "عجب شیر", "مراغه", "مرند",
"ملکان", "میانه", "هریس", "هشترود", "هوراند", "ورزقان", "کلیبر", "ارومیه", "اشنویه", "بوکان",
"پلدشت", "پیرانشهر", "تکاب", "چاربرج", "چالدران", "چایپاره", "خوی", "سر دشت", "سلماس", "شاهین دژ",
"شوط", "ماکو", "مهاباد", "میاندوآب", "نقده", "اردبیل", "اصلاندوز", "انگوت", "بیله سوار",
"پارس آباد", "خلخال", "سرعین", "گرمی", "مشگین شهر", "نمین", "نیر", "کوثر", "آران و بیدگل",
"اردستان", "اصفهان", "برخوار", "بوئین و میاندشت", "تیران و کرون", "جرقویه", "چادگان", "خمینی شهر",
"خوانسار", "خور و بیابانک", "دهاقان", "زرین شهر", "سمیرم", "شاهین شهر", "شهرضا", "فریدن",
"فریدونشهر", "فلاورجان", "گلپایگان", "مبارکه", "میمه", "نائین", "نجف آباد", "نطنز", "هرند", "ورزنه",
"کاشان", "کوهپایه", "اشتهارد", "چهار باغ", "ساوجبلاغ", "طالقان", "فردیس", "نظر آباد", "کرج",
"آبدانان", "ایلام", "ایوان", "بدره", "چرداول", "چوار", "دره‌شهر", "دهلران", "سیروان", "ملکشاهی",
"مهران", "هلیلان", "بوشهر", "تنگستان", "جم", "دشتستان", "دشتی", "دیر", "دیلم", "عسلویه", "گناوه",
"کنگان", "اسلامشهر", "بهارستان", "پاکدشت", "پردیس", "پیشوا", "تهران", "دماوند", "رباط کریم", "ری",
"شمیرانات", "شهریار", "فیروز کوه", "قدس", "قرچک", "ملارد", "ورامین", "اردل", "بروجن", "بن",
"خانمیرزا", "سامان", "شهر کرد", "فارسان", "فرخ شهر", "فلارد", "لردگان", "کوهرنگ", "کیار", "بشرویه",
"بیرجند", "خوسف", "درمیان", "زیرکوه", "سرایان", "سربیشه", "طبس", "فردوس", "قائنات", "نهبندان",
"باخرز", "بجستان", "بردسکن", "تایباد", "تربت جام", "تربت حیدریه", "جغتای", "جوین", "چناران",
"خلیل آباد", "خواف", "خوشاب", "داورزن", "درگز"]
search_province_list = [
"همدان", "مرکزی", "بوشهر", "آذربایجان شرقی", "آذربایجان غربی", "اردبیل",
"اصفهان", "البرز", "ایلام", "تهران", "چهار محال و بختیاری", "خراسان جنوبی",
"خراسان رضوی", "خراسان شمالی", "خوزستان", "زنجان", "سمنان", "سیستان و بلوچستان",
"فارس", "قزوین", "قم", "کردستان", "کرمان", "کرمانشاه", "کهکیلویه و بویراحمد",
"گلستان", "گیلان", "لرستان", "مازندران", "هرمزگان", "یزد"
]
irancity = [
{"name": "سلسله", "id": "65885", "province_id": "65546"},
{"name": "معمولان", "id": "66903", "province_id": "65546"},
{"name": "کوهدشت", "id": "65886", "province_id": "65546"},
{"name": "آمل", "id": "65887", "province_id": "65547"},
{"name": "بابل", "id": "65888", "province_id": "65547"},
{"name": "بابلسر", "id": "65889", "province_id": "65547"},
{"name": "بهشهر", "id": "65890", "province_id": "65547"},
{"name": "تنکابن", "id": "65891", "province_id": "65547"},
{"name": "جویبار", "id": "65892", "province_id": "65547"},
{"name": "چالوس", "id": "65893", "province_id": "65547"},
{"name": "رامسر", "id": "65894", "province_id": "65547"},
{"name": "ساری", "id": "65895", "province_id": "65547"},
{"name": "سواد کوه", "id": "65896", "province_id": "65547"},
{"name": "سوادکوه شمالی", "id": "66870", "province_id": "65547"},
{"name": "سیمرغ", "id": "66871", "province_id": "65547"},
{"name": "عباس آباد", "id": "65897", "province_id": "65547"},
{"name": "فریدونکنار", "id": "65898", "province_id": "65547"},
{"name": "قائم شهر", "id": "65899", "province_id": "65547"},
{"name": "گلوگاه", "id": "65900", "province_id": "65547"},
{"name": "محمود آباد", "id": "65901", "province_id": "65547"},
{"name": "میاندورود", "id": "65902", "province_id": "65547"},
{"name": "نکا", "id": "65903", "province_id": "65547"},
{"name": "نور", "id": "65904", "province_id": "65547"},
{"name": "نوشهر", "id": "65905", "province_id": "65547"},
{"name": "کلاردشت", "id": "66869", "province_id": "65547"},
{"name": "آشتیان", "id": "65906", "province_id": "65548"},
{"name": "اراک", "id": "65907", "province_id": "65548"},
{"name": "تفرش", "id": "65908", "province_id": "65548"},
{"name": "خمین", "id": "65909", "province_id": "65548"},
{"name": "خنداب", "id": "65910", "province_id": "65548"},
{"name": "دلیجان", "id": "65911", "province_id": "65548"},
{"name": "زرندیه", "id": "65912", "province_id": "65548"},
{"name": "ساوه", "id": "65913", "province_id": "65548"},
{"name": "شازند", "id": "65914", "province_id": "65548"},
{"name": "فراهان", "id": "65915", "province_id": "65548"},
{"name": "کمیجان", "id": "65916", "province_id": "65548"},
{"name": "محلات", "id": "65917", "province_id": "65548"},
{"name": "ابوموسی", "id": "65918", "province_id": "65549"},
{"name": "بستک", "id": "65919", "province_id": "65549"},
{"name": "بشاگرد", "id": "65920", "province_id": "65549"},
{"name": "بندرعباس", "id": "65921", "province_id": "65549"},
{"name": "بندرلنگه", "id": "65922", "province_id": "65549"},
{"name": "پارسیان", "id": "65923", "province_id": "65549"},
{"name": "جاسک", "id": "65924", "province_id": "65549"},
{"name": "حاجی آباد", "id": "65925", "province_id": "65549"},
{"name": "خمیر", "id": "65926", "province_id": "65549"},
{"name": "رودان", "id": "65927", "province_id": "65549"},
{"name": "سیریک", "id": "65928", "province_id": "65549"},
{"name": "قشم", "id": "65929", "province_id": "65549"},
{"name": "میناب", "id": "65930", "province_id": "65549"},
{"name": "اسدآباد", "id": "65931", "province_id": "65550"},
{"name": "بهار", "id": "65932", "province_id": "65550"},
{"name": "تویسرکان", "id": "65933", "province_id": "65550"},
{"name": "درگزین", "id": "66884", "province_id": "65550"},
{"name": "رزن", "id": "65934", "province_id": "65550"},
{"name": "فامنین", "id": "66853", "province_id": "65550"},
{"name": "کبودرآهنگ", "id": "65936", "province_id": "65550"},
{"name": "ملایر", "id": "65937", "province_id": "65550"},
{"name": "نهاوند", "id": "65938", "province_id": "65550"},
{"name": "همدان", "id": "65939", "province_id": "65550"},
{"name": "ابرکوه", "id": "65940", "province_id": "65551"},
{"name": "اردکان", "id": "65941", "province_id": "65551"},
{"name": "بافق", "id": "65942", "province_id": "65551"},
{"name": "بهاباد", "id": "65943", "province_id": "65551"},
{"name": "تفت", "id": "65944", "province_id": "65551"},
{"name": "خاتم", "id": "65945", "province_id": "65551"},
{"name": "صدوق", "id": "65946", "province_id": "65551"},
{"name": "مروست", "id": "66812", "province_id": "65551"},
{"name": "زارچ", "id": "66899", "province_id": "65551"},
{"name": "مهریز", "id": "65948", "province_id": "65551"},
{"name": "میبد", "id": "65949", "province_id": "65551"},
{"name": "یزد", "id": "65950", "province_id": "65551"},
{"name": "ثلاث باباجانی", "id": "65828", "province_id": "65542"},
{"name": "جوانرود", "id": "65829", "province_id": "65542"},
{"name": "دالاهو", "id": "65830", "province_id": "65542"},
{"name": "روانسر", "id": "65831", "province_id": "65542"},
{"name": "سر پل ذهاب", "id": "65832", "province_id": "65542"},
{"name": "سنقر", "id": "65833", "province_id": "65542"},
{"name": "صحنه", "id": "65834", "province_id": "65542"},
{"name": "قصر شیرین", "id": "65835", "province_id": "65542"},
{"name": "گیلانغرب", "id": "65838", "province_id": "65542"},
{"name": "ماهیدشت", "id": "66823", "province_id": "65542"},
{"name": "هرسین", "id": "65839", "province_id": "65542"},
{"name": "کرمانشاه", "id": "65836", "province_id": "65542"},
{"name": "کنگاور", "id": "65837", "province_id": "65542"},
{"name": "باشت", "id": "65840", "province_id": "65543"},
{"name": "بهمئی", "id": "65841", "province_id": "65543"},
{"name": "بویراحمد", "id": "65842", "province_id": "65543"},
{"name": "چرام", "id": "65843", "province_id": "65543"},
{"name": "دنا", "id": "65844", "province_id": "65543"},
{"name": "گچساران", "id": "65846", "province_id": "65543"},
{"name": "لنده", "id": "66594", "province_id": "65543"},
{"name": "مارگون", "id": "66587", "province_id": "65543"},
{"name": "کهگیلویه", "id": "65845", "province_id": "65543"},
{"name": "آزاد شهر", "id": "65847", "province_id": "65544"},
{"name": "آق قلا", "id": "65848", "province_id": "65544"},
{"name": "بندر گز", "id": "65849", "province_id": "65544"},
{"name": "ترکمن", "id": "65850", "province_id": "65544"},
{"name": "رامیان", "id": "65851", "province_id": "65544"},
{"name": "علی آباد", "id": "65852", "province_id": "65544"},
{"name": "گالیکش", "id": "65855", "province_id": "65544"},
{"name": "گرگان", "id": "65856", "province_id": "65544"},
{"name": "گمیشان", "id": "65857", "province_id": "65544"},
{"name": "گنبد کاووس", "id": "65858", "province_id": "65544"},
{"name": "مراوه تپه", "id": "65859", "province_id": "65544"},
{"name": "مینودشت", "id": "65860", "province_id": "65544"},
{"name": "کردکوی", "id": "65853", "province_id": "65544"},
{"name": "کلاله", "id": "65854", "province_id": "65544"},
{"name": "آستارا", "id": "65861", "province_id": "65545"},
{"name": "آستانه اشرفیه", "id": "65862", "province_id": "65545"},
{"name": "املش", "id": "65863", "province_id": "65545"},
{"name": "بندر انزلی", "id": "65864", "province_id": "65545"},
{"name": "تالش", "id": "66851", "province_id": "65545"},
{"name": "خمام", "id": "66627", "province_id": "65545"},
{"name": "خمام", "id": "66904", "province_id": "65545"},
{"name": "رشت", "id": "65865", "province_id": "65545"},
{"name": "رضوانشهر", "id": "65866", "province_id": "65545"},
{"name": "رودبار", "id": "65867", "province_id": "65545"},
{"name": "رودسر", "id": "65868", "province_id": "65545"},
{"name": "سیاهکل", "id": "65869", "province_id": "65545"},
{"name": "شفت", "id": "65870", "province_id": "65545"},
{"name": "صومعه سرا", "id": "65871", "province_id": "65545"},
{"name": "طوالش", "id": "65872", "province_id": "65545"},
{"name": "فومن", "id": "65873", "province_id": "65545"},
{"name": "لاهیجان", "id": "65874", "province_id": "65545"},
{"name": "لنگرود", "id": "65875", "province_id": "65545"},
{"name": "ماسال", "id": "65876", "province_id": "65545"},
{"name": "ازنا", "id": "65877", "province_id": "65546"},
{"name": "الیگودرز", "id": "65878", "province_id": "65546"},
{"name": "بروجرد", "id": "65879", "province_id": "65546"},
{"name": "پلدختر", "id": "65880", "province_id": "65546"},
{"name": "چگنی", "id": "65883", "province_id": "65546"},
{"name": "خرم آباد", "id": "65881", "province_id": "65546"},
{"name": "دلفان", "id": "65882", "province_id": "65546"},
{"name": "دورود", "id": "65884", "province_id": "65546"},
{"name": "رومشکان", "id": "66865", "province_id": "65546"},
{"name": "زاهدان", "id": "65749", "province_id": "65536"},
{"name": "زرآباد", "id": "66384", "province_id": "65536"},
{"name": "زهک", "id": "65750", "province_id": "65536"},
{"name": "سراوان", "id": "65751", "province_id": "65536"},
{"name": "سرباز", "id": "65752", "province_id": "65536"},
{"name": "سیب سوران", "id": "65753", "province_id": "65536"},
{"name": "فنوج", "id": "66860", "province_id": "65536"},
{"name": "قصرقند", "id": "66861", "province_id": "65536"},
{"name": "گلشن", "id": "66896", "province_id": "65536"},
{"name": "لاشار", "id": "66390", "province_id": "65536"},
{"name": "مهرستان", "id": "65755", "province_id": "65536"},
{"name": "میرجاوه", "id": "66862", "province_id": "65536"},
{"name": "نیمروز", "id": "66859", "province_id": "65536"},
{"name": "نیک شهر", "id": "65756", "province_id": "65536"},
{"name": "هامون", "id": "66858", "province_id": "65536"},
{"name": "هیرمند", "id": "65757", "province_id": "65536"},
{"name": "کنارک", "id": "65754", "province_id": "65536"},
{"name": "آباده", "id": "65758", "province_id": "65537"},
{"name": "ارسنجان", "id": "65759", "province_id": "65537"},
{"name": "استهبان", "id": "65760", "province_id": "65537"},
{"name": "اقلید", "id": "65761", "province_id": "65537"},
{"name": "اوز", "id": "66442", "province_id": "65537"},
{"name": "بختگان", "id": "66880", "province_id": "65537"},
{"name": "بوانات", "id": "65762", "province_id": "65537"},
{"name": "بیضا", "id": "66416", "province_id": "65537"},
{"name": "پاسارگاد", "id": "65763", "province_id": "65537"},
{"name": "جهرم", "id": "65764", "province_id": "65537"},
{"name": "جویم", "id": "66445", "province_id": "65537"},
{"name": "خرامه", "id": "65765", "province_id": "65537"},
{"name": "خرم بید", "id": "65766", "province_id": "65537"},
{"name": "خفر", "id": "66848", "province_id": "65537"},
{"name": "خنج", "id": "65767", "province_id": "65537"},
{"name": "داراب", "id": "65768", "province_id": "65537"},
{"name": "رستم", "id": "65769", "province_id": "65537"},
{"name": "زرقان", "id": "66422", "province_id": "65537"},
{"name": "زرین دشت", "id": "65770", "province_id": "65537"},
{"name": "سپیدان", "id": "65771", "province_id": "65537"},
{"name": "سرچهان", "id": "66843", "province_id": "65537"},
{"name": "سروستان", "id": "65772", "province_id": "65537"},
{"name": "شیراز", "id": "65773", "province_id": "65537"},
{"name": "فراشبند", "id": "65774", "province_id": "65537"},
{"name": "فسا", "id": "65775", "province_id": "65537"},
{"name": "فیروز آباد", "id": "65776", "province_id": "65537"},
{"name": "قیر و کارزین", "id": "66842", "province_id": "65537"},
{"name": "گراش", "id": "65780", "province_id": "65537"},
{"name": "لارستان", "id": "65781", "province_id": "65537"},
{"name": "لامرد", "id": "65782", "province_id": "65537"},
{"name": "مرودشت", "id": "65783", "province_id": "65537"},
{"name": "ممسنی", "id": "65784", "province_id": "65537"},
{"name": "مهر", "id": "65785", "province_id": "65537"},
{"name": "نی ریز", "id": "65786", "province_id": "65537"},
{"name": "کازرون", "id": "65778", "province_id": "65537"},
{"name": "کوار", "id": "65779", "province_id": "65537"},
{"name": "کوه چنار", "id": "66881", "province_id": "65537"},
{"name": "آبیک", "id": "65787", "province_id": "65538"},
{"name": "آوج", "id": "66849", "province_id": "65538"},
{"name": "البرز", "id": "65788", "province_id": "65538"},
{"name": "بوئین زهرا", "id": "65789", "province_id": "65538"},
{"name": "تاکستان", "id": "65790", "province_id": "65538"},
{"name": "قزوین", "id": "65791", "province_id": "65538"},
{"name": "جعفریه", "id": "66483", "province_id": "65539"},
{"name": "خلجستان", "id": "66484", "province_id": "65539"},
{"name": "سلفچگان", "id": "66485", "province_id": "65539"},
{"name": "قم", "id": "65792", "province_id": "65539"},
{"name": "کهک", "id": "66487", "province_id": "65539"},
{"name": "بانه", "id": "65793", "province_id": "65540"},
{"name": "بیجار", "id": "65794", "province_id": "65540"},
{"name": "دهگلان", "id": "65795", "province_id": "65540"},
{"name": "دیواندره", "id": "65796", "province_id": "65540"},
{"name": "سرو آباد", "id": "65797", "province_id": "65540"},
{"name": "سقز", "id": "65798", "province_id": "65540"},
{"name": "سنندج", "id": "65799", "province_id": "65540"},
{"name": "قروه", "id": "65800", "province_id": "65540"},
{"name": "مریوان", "id": "65802", "province_id": "65540"},
{"name": "کامیاران", "id": "65801", "province_id": "65540"},
{"name": "ارزوئیه", "id": "65803", "province_id": "65541"},
{"name": "انار", "id": "65804", "province_id": "65541"},
{"name": "بافت", "id": "65805", "province_id": "65541"},
{"name": "بردسیر", "id": "65806", "province_id": "65541"},
{"name": "بم", "id": "65807", "province_id": "65541"},
{"name": "رابر", "id": "65809", "province_id": "65541"},
{"name": "راور", "id": "65810", "province_id": "65541"},
{"name": "رفسنجان", "id": "65811", "province_id": "65541"},
{"name": "ریگان", "id": "65813", "province_id": "65541"},
{"name": "زرند", "id": "65814", "province_id": "65541"},
{"name": "سیرجان", "id": "65815", "province_id": "65541"},
{"name": "شهربابک", "id": "66825", "province_id": "65541"},
{"name": "فهرج", "id": "65819", "province_id": "65541"},
{"name": "گنبکی", "id": "66900", "province_id": "65541"},
{"name": "نرماشیر", "id": "65825", "province_id": "65541"},
{"name": "کرمان", "id": "65821", "province_id": "65541"},
{"name": "کوهبنان", "id": "65823", "province_id": "65541"},
{"name": "اسلام آباد غرب", "id": "65826", "province_id": "65542"},
{"name": "پاوه", "id": "65827", "province_id": "65542"},
{"name": "رشتخوار", "id": "65687", "province_id": "65531"},
{"name": "زاوه", "id": "65688", "province_id": "65531"},
{"name": "زبرخان", "id": "66265", "province_id": "65531"},
{"name": "سبزوار", "id": "65689", "province_id": "65531"},
{"name": "سرخس", "id": "65690", "province_id": "65531"},
{"name": "ششتمد", "id": "66246", "province_id": "65531"},
{"name": "صالح آباد", "id": "66838", "province_id": "65531"},
{"name": "طرقبه", "id": "66837", "province_id": "65531"},
{"name": "فریمان", "id": "65691", "province_id": "65531"},
{"name": "فیروزه", "id": "66836", "province_id": "65531"},
{"name": "قوچان", "id": "65692", "province_id": "65531"},
{"name": "گلبهار", "id": "66228", "province_id": "65531"},
{"name": "گناباد", "id": "65695", "province_id": "65531"},
{"name": "مشهد", "id": "65696", "province_id": "65531"},
{"name": "مه ولات", "id": "65697", "province_id": "65531"},
{"name": "نیشابور", "id": "65698", "province_id": "65531"},
{"name": "کاشمر", "id": "65693", "province_id": "65531"},
{"name": "کلات", "id": "65694", "province_id": "65531"},
{"name": "کوهسرخ", "id": "66254", "province_id": "65531"},
{"name": "اسفراین", "id": "65699", "province_id": "65532"},
{"name": "بام و صفی آباد", "id": "66897", "province_id": "65532"},
{"name": "بجنورد", "id": "65700", "province_id": "65532"},
{"name": "جاجرم", "id": "65701", "province_id": "65532"},
{"name": "راز و جرگلان", "id": "66271", "province_id": "65532"},
{"name": "سملقان", "id": "65705", "province_id": "65532"},
{"name": "شیروان", "id": "65702", "province_id": "65532"},
{"name": "فاروج", "id": "65703", "province_id": "65532"},
{"name": "گرمه", "id": "65704", "province_id": "65532"},
{"name": "مانه", "id": "66898", "province_id": "65532"},
{"name": "آبادان", "id": "65706", "province_id": "65533"},
{"name": "آغاجری", "id": "66878", "province_id": "65533"},
{"name": "امیدیه", "id": "65707", "province_id": "65533"},
{"name": "اندیمشک", "id": "65708", "province_id": "65533"},
{"name": "اندیکا", "id": "65709", "province_id": "65533"},
{"name": "اهواز", "id": "65710", "province_id": "65533"},
{"name": "ایذه", "id": "65711", "province_id": "65533"},
{"name": "باغ ملک", "id": "65712", "province_id": "65533"},
{"name": "باوی", "id": "65713", "province_id": "65533"},
{"name": "بندر ماهشهر", "id": "65714", "province_id": "65533"},
{"name": "بهبهان", "id": "65715", "province_id": "65533"},
{"name": "حمیدیه", "id": "66873", "province_id": "65533"},
{"name": "خرمشهر", "id": "65716", "province_id": "65533"},
{"name": "دزپارت", "id": "66893", "province_id": "65533"},
{"name": "دزفول", "id": "65717", "province_id": "65533"},
{"name": "دشت آزادگان", "id": "65718", "province_id": "65533"},
{"name": "رامشیر", "id": "65719", "province_id": "65533"},
{"name": "رامهرمز", "id": "65720", "province_id": "65533"},
{"name": "شادگان", "id": "65721", "province_id": "65533"},
{"name": "شوش", "id": "65722", "province_id": "65533"},
{"name": "شوشتر", "id": "65723", "province_id": "65533"},
{"name": "صیدون", "id": "66902", "province_id": "65533"},
{"name": "گتوند", "id": "65724", "province_id": "65533"},
{"name": "لالی", "id": "65725", "province_id": "65533"},
{"name": "مسجد سلیمان", "id": "65726", "province_id": "65533"},
{"name": "هفتگل", "id": "65727", "province_id": "65533"},
{"name": "هندیجان", "id": "65728", "province_id": "65533"},
{"name": "هویزه", "id": "65729", "province_id": "65533"},
{"name": "کارون", "id": "66874", "province_id": "65533"},
{"name": "کرخه", "id": "66886", "province_id": "65533"},
{"name": "ابهر", "id": "65730", "province_id": "65534"},
{"name": "ایجرود", "id": "65731", "province_id": "65534"},
{"name": "خدابنده", "id": "65732", "province_id": "65534"},
{"name": "خرمدره", "id": "65733", "province_id": "65534"},
{"name": "زنجان", "id": "65734", "province_id": "65534"},
{"name": "سلطانیه ", "id": "66868", "province_id": "65534"},
{"name": "طارم", "id": "65735", "province_id": "65534"},
{"name": "ماهنشان", "id": "65736", "province_id": "65534"},
{"name": "آرادان", "id": "65737", "province_id": "65535"},
{"name": "دامغان", "id": "65738", "province_id": "65535"},
{"name": "سرخه", "id": "66840", "province_id": "65535"},
{"name": "سمنان", "id": "65739", "province_id": "65535"},
{"name": "شاهرود", "id": "65740", "province_id": "65535"},
{"name": "گرمسار", "id": "65741", "province_id": "65535"},
{"name": "مهدی شهر", "id": "65742", "province_id": "65535"},
{"name": "میامی", "id": "65743", "province_id": "65535"},
{"name": "ایرانشهر", "id": "65744", "province_id": "65536"},
{"name": "بمپور", "id": "66362", "province_id": "65536"},
{"name": "تفتان", "id": "66882", "province_id": "65536"},
{"name": "چاه بهار", "id": "65745", "province_id": "65536"},
{"name": "خاش", "id": "65746", "province_id": "65536"},
{"name": "دشتیاری", "id": "66364", "province_id": "65536"},
{"name": "دلگان", "id": "65747", "province_id": "65536"},
{"name": "راسک", "id": "66883", "province_id": "65536"},
{"name": "زابل", "id": "65748", "province_id": "65536"},
{"name": "آذرشهر", "id": "65552", "province_id": "65521"},
{"name": "اسکو", "id": "65553", "province_id": "65521"},
{"name": "اهر", "id": "65554", "province_id": "65521"},
{"name": "بستان آباد", "id": "65555", "province_id": "65521"},
{"name": "بناب", "id": "65556", "province_id": "65521"},
{"name": "تبریز", "id": "65557", "province_id": "65521"},
{"name": "جلفا", "id": "65558", "province_id": "65521"},
{"name": "چاراویماق", "id": "65559", "province_id": "65521"},
{"name": "خدا آفرین", "id": "65560", "province_id": "65521"},
{"name": "سراب", "id": "65561", "province_id": "65521"},
{"name": "شبستر", "id": "65562", "province_id": "65521"},
{"name": "عجب شیر", "id": "65563", "province_id": "65521"},
{"name": "مراغه", "id": "65565", "province_id": "65521"},
{"name": "مرند", "id": "65566", "province_id": "65521"},
{"name": "ملکان", "id": "65567", "province_id": "65521"},
{"name": "میانه", "id": "65568", "province_id": "65521"},
{"name": "هریس", "id": "65569", "province_id": "65521"},
{"name": "هشترود", "id": "65570", "province_id": "65521"},
{"name": "هوراند", "id": "65957", "province_id": "65521"},
{"name": "ورزقان", "id": "65571", "province_id": "65521"},
{"name": "کلیبر", "id": "65564", "province_id": "65521"},
{"name": "ارومیه", "id": "65572", "province_id": "65522"},
{"name": "اشنویه", "id": "65573", "province_id": "65522"},
{"name": "بوکان", "id": "65574", "province_id": "65522"},
{"name": "پلدشت", "id": "65575", "province_id": "65522"},
{"name": "پیرانشهر", "id": "65576", "province_id": "65522"},
{"name": "تکاب", "id": "65577", "province_id": "65522"},
{"name": "چاربرج", "id": "66905", "province_id": "65522"},
{"name": "چالدران", "id": "65578", "province_id": "65522"},
{"name": "چایپاره", "id": "65579", "province_id": "65522"},
{"name": "خوی", "id": "65580", "province_id": "65522"},
{"name": "سر دشت", "id": "65581", "province_id": "65522"},
{"name": "سلماس", "id": "65582", "province_id": "65522"},
{"name": "شاهین دژ", "id": "65583", "province_id": "65522"},
{"name": "شوط", "id": "65584", "province_id": "65522"},
{"name": "ماکو", "id": "65585", "province_id": "65522"},
{"name": "مهاباد", "id": "65586", "province_id": "65522"},
{"name": "میاندوآب", "id": "65587", "province_id": "65522"},
{"name": "نقده", "id": "65588", "province_id": "65522"},
{"name": "اردبیل", "id": "65589", "province_id": "65523"},
{"name": "اصلاندوز", "id": "66032", "province_id": "65523"},
{"name": "انگوت", "id": "66040", "province_id": "65523"},
{"name": "بیله سوار", "id": "65590", "province_id": "65523"},
{"name": "پارس آباد", "id": "65591", "province_id": "65523"},
{"name": "خلخال", "id": "65592", "province_id": "65523"},
{"name": "سرعین", "id": "65593", "province_id": "65523"},
{"name": "گرمی", "id": "65595", "province_id": "65523"},
{"name": "مشگین شهر", "id": "65596", "province_id": "65523"},
{"name": "نمین", "id": "65597", "province_id": "65523"},
{"name": "نیر", "id": "65598", "province_id": "65523"},
{"name": "کوثر", "id": "65594", "province_id": "65523"},
{"name": "آران و بیدگل", "id": "65599", "province_id": "65524"},
{"name": "اردستان", "id": "65600", "province_id": "65524"},
{"name": "اصفهان", "id": "65601", "province_id": "65524"},
{"name": "برخوار", "id": "65602", "province_id": "65524"},
{"name": "بوئین و میاندشت", "id": "66075", "province_id": "65524"},
{"name": "تیران و کرون", "id": "65603", "province_id": "65524"},
{"name": "جرقویه", "id": "66887", "province_id": "65524"},
{"name": "چادگان", "id": "65604", "province_id": "65524"},
{"name": "خمینی شهر", "id": "65605", "province_id": "65524"},
{"name": "خوانسار", "id": "65606", "province_id": "65524"},
{"name": "خور و بیابانک", "id": "65607", "province_id": "65524"},
{"name": "دهاقان", "id": "65608", "province_id": "65524"},
{"name": "زرین شهر", "id": "66828", "province_id": "65524"},
{"name": "سمیرم", "id": "65609", "province_id": "65524"},
{"name": "شاهین شهر", "id": "65610", "province_id": "65524"},
{"name": "شهرضا", "id": "65611", "province_id": "65524"},
{"name": "فریدن", "id": "65612", "province_id": "65524"},
{"name": "فریدونشهر", "id": "65613", "province_id": "65524"},
{"name": "فلاورجان", "id": "65614", "province_id": "65524"},
{"name": "گلپایگان", "id": "65616", "province_id": "65524"},
{"name": "مبارکه", "id": "65618", "province_id": "65524"},
{"name": "میمه", "id": "66906", "province_id": "65524"},
{"name": "نائین", "id": "65619", "province_id": "65524"},
{"name": "نجف آباد", "id": "65620", "province_id": "65524"},
{"name": "نطنز", "id": "65621", "province_id": "65524"},
{"name": "هرند", "id": "66888", "province_id": "65524"},
{"name": "ورزنه", "id": "66889", "province_id": "65524"},
{"name": "کاشان", "id": "65615", "province_id": "65524"},
{"name": "کوهپایه", "id": "66059", "province_id": "65524"},
{"name": "اشتهارد", "id": "66855", "province_id": "65525"},
{"name": "چهار باغ", "id": "66096", "province_id": "65525"},
{"name": "ساوجبلاغ", "id": "65622", "province_id": "65525"},
{"name": "طالقان", "id": "65623", "province_id": "65525"},
{"name": "فردیس", "id": "66877", "province_id": "65525"},
{"name": "نظر آباد", "id": "65625", "province_id": "65525"},
{"name": "کرج", "id": "65624", "province_id": "65525"},
{"name": "آبدانان", "id": "65626", "province_id": "65526"},
{"name": "ایلام", "id": "65627", "province_id": "65526"},
{"name": "ایوان", "id": "65628", "province_id": "65526"},
{"name": "بدره", "id": "66830", "province_id": "65526"},
{"name": "چرداول", "id": "66829", "province_id": "65526"},
{"name": "چوار", "id": "66107", "province_id": "65526"},
{"name": "دره‌شهر", "id": "66831", "province_id": "65526"},
{"name": "دهلران", "id": "65630", "province_id": "65526"},
{"name": "سیروان", "id": "66832", "province_id": "65526"},
{"name": "ملکشاهی", "id": "65632", "province_id": "65526"},
{"name": "مهران", "id": "65633", "province_id": "65526"},
{"name": "هلیلان", "id": "66118", "province_id": "65526"},
{"name": "بوشهر", "id": "65634", "province_id": "65527"},
{"name": "تنگستان", "id": "65635", "province_id": "65527"},
{"name": "جم", "id": "65636", "province_id": "65527"},
{"name": "دشتستان", "id": "65637", "province_id": "65527"},
{"name": "دشتی", "id": "65638", "province_id": "65527"},
{"name": "دیر", "id": "65639", "province_id": "65527"},
{"name": "دیلم", "id": "65640", "province_id": "65527"},
{"name": "عسلویه", "id": "66142", "province_id": "65527"},
{"name": "گناوه", "id": "65642", "province_id": "65527"},
{"name": "کنگان", "id": "65641", "province_id": "65527"},
{"name": "اسلامشهر", "id": "65643", "province_id": "65528"},
{"name": "بهارستان", "id": "65644", "province_id": "65528"},
{"name": "پاکدشت", "id": "65645", "province_id": "65528"},
{"name": "پردیس", "id": "66867", "province_id": "65528"},
{"name": "پیشوا", "id": "65646", "province_id": "65528"},
{"name": "تهران", "id": "65647", "province_id": "65528"},
{"name": "دماوند", "id": "65648", "province_id": "65528"},
{"name": "رباط کریم", "id": "65649", "province_id": "65528"},
{"name": "ری", "id": "65650", "province_id": "65528"},
{"name": "شمیرانات", "id": "65651", "province_id": "65528"},
{"name": "شهریار", "id": "65652", "province_id": "65528"},
{"name": "فیروز کوه", "id": "65653", "province_id": "65528"},
{"name": "قدس", "id": "65654", "province_id": "65528"},
{"name": "قرچک", "id": "66866", "province_id": "65528"},
{"name": "ملارد", "id": "65655", "province_id": "65528"},
{"name": "ورامین", "id": "65656", "province_id": "65528"},
{"name": "اردل", "id": "65657", "province_id": "65529"},
{"name": "بروجن", "id": "65658", "province_id": "65529"},
{"name": "بن", "id": "66875", "province_id": "65529"},
{"name": "خانمیرزا", "id": "66183", "province_id": "65529"},
{"name": "سامان", "id": "66876", "province_id": "65529"},
{"name": "شهر کرد", "id": "65659", "province_id": "65529"},
{"name": "فارسان", "id": "65660", "province_id": "65529"},
{"name": "فرخ شهر", "id": "66907", "province_id": "65529"},
{"name": "فلارد", "id": "66184", "province_id": "65529"},
{"name": "لردگان", "id": "65663", "province_id": "65529"},
{"name": "کوهرنگ", "id": "65661", "province_id": "65529"},
{"name": "کیار", "id": "65662", "province_id": "65529"},
{"name": "بشرویه", "id": "65664", "province_id": "65530"},
{"name": "بیرجند", "id": "65665", "province_id": "65530"},
{"name": "خوسف", "id": "66834", "province_id": "65530"},
{"name": "درمیان", "id": "65666", "province_id": "65530"},
{"name": "زیرکوه", "id": "66863", "province_id": "65530"},
{"name": "سرایان", "id": "65667", "province_id": "65530"},
{"name": "سربیشه", "id": "65668", "province_id": "65530"},
{"name": "طبس", "id": "66864", "province_id": "65530"},
{"name": "فردوس", "id": "65669", "province_id": "65530"},
{"name": "قائنات", "id": "65670", "province_id": "65530"},
{"name": "نهبندان", "id": "65671", "province_id": "65530"},
{"name": "باخرز", "id": "65672", "province_id": "65531"},
{"name": "بجستان", "id": "65673", "province_id": "65531"},
{"name": "بردسکن", "id": "65674", "province_id": "65531"},
{"name": "تایباد", "id": "65676", "province_id": "65531"},
{"name": "تربت جام", "id": "65678", "province_id": "65531"},
{"name": "تربت حیدریه", "id": "65679", "province_id": "65531"},
{"name": "جغتای", "id": "65680", "province_id": "65531"},
{"name": "جوین", "id": "65681", "province_id": "65531"},
{"name": "چناران", "id": "65682", "province_id": "65531"},
{"name": "خلیل آباد", "id": "65683", "province_id": "65531"},
{"name": "خواف", "id": "65684", "province_id": "65531"},
{"name": "خوشاب", "id": "65685", "province_id": "65531"},
{"name": "داورزن", "id": "66835", "province_id": "65531"},
{"name": "درگز", "id": "65686", "province_id": "65531"}
]
iranprovince = [
{"name": "همدان", "id": "65550", "address": "https://habackend.rasadyaar.ir/"},
{"name": "مرکزی", "id": "65548", "address": "https://mabackend.rasadyaar.ir/"},
{"name": "بوشهر", "id": "65527", "address": "https://bubackend.rasadyaar.ir/"},
{"name": "آذربایجان شرقی", "id": "65521"},
{"name": "آذربایجان غربی", "id": "65522"},
{"name": "اردبیل", "id": "65523"},
{"name": "اصفهان", "id": "65524"},
{"name": "البرز", "id": "65525"},
{"name": "ایلام", "id": "65526"},
{"name": "تهران", "id": "65528"},
{"name": "چهار محال و بختیاری", "id": "65529"},
{"name": "خراسان جنوبی", "id": "65530"},
{"name": "خراسان رضوی", "id": "65531"},
{"name": "خراسان شمالی", "id": "65532"},
{"name": "خوزستان", "id": "65533"},
{"name": "زنجان", "id": "65534"},
{"name": "سمنان", "id": "65535"},
{"name": "سیستان و بلوچستان", "id": "65536"},
{"name": "فارس", "id": "65537"},
{"name": "قزوین", "id": "65538"},
{"name": "قم", "id": "65539"},
{"name": "کردستان", "id": "65540"},
{"name": "کرمان", "id": "65541"},
{"name": "کرمانشاه", "id": "65542"},
{"name": "کهکیلویه و بویراحمد", "id": "65543"},
{"name": "گلستان", "id": "65544"},
{"name": "گیلان", "id": "65545"},
{"name": "لرستان", "id": "65546"},
{"name": "مازندران", "id": "65547"},
{"name": "هرمزگان", "id": "65549"},
{"name": "یزد", "id": "65551"},
]
from fuzzywuzzy import fuzz
import re
def normalize_text(text):
if not text:
return ""
text = re.sub(r'[^\w\s]', '', text)
text = re.sub(r'\s+', ' ', text).strip()
return text
def find_best_match_for_province(input_text):
input_norm = normalize_text(input_text)
best_match = None
highest_score = 0
for item in iranprovince:
score = fuzz.ratio(input_norm, normalize_text(item['name']))
if score > highest_score and score > 70:
highest_score = score
best_match = item['name']
return best_match if highest_score > 0 else None
def get_province_id(province_name):
for i in iranprovince:
if i['name'] == province_name:
return i['id']
return 0
def find_best_match_for_city(input_text, province_name):
input_norm = normalize_text(input_text)
best_match = None
highest_score = 0
province_id = get_province_id(province_name)
city = [city for city in irancity if int(city['province_id']) == int(province_id)]
for item in city:
score = fuzz.ratio(input_norm, normalize_text(item['name']))
if score > highest_score and score > 70:
highest_score = score
best_match = item['name']
return best_match if highest_score > 0 else None
def correct_province(input_text):
province_match = find_best_match_for_province(input_text)
if province_match:
return province_match
return input_text
def correct_city(input_text, province_name):
province_match = find_best_match_for_city(input_text, province_name)
if province_match:
return province_match
return input_text
# امل درمیان خرمبید دشتستان قائنات گناوه اسلام آباد
# corrupted_text = "کهگیلویه و بویراحمد"
# corrected = correct_province(corrupted_text)
# print(f"ورودی: {corrupted_text} -> خروجی: {corrected}")
# #تست شهر
# province_name = "کهگیلویه و بویراحمد"
# corrupted_text = "دنا"
# corrected = correct_city(corrupted_text,province_name)
# print(f"ورودی: {corrupted_text} -> خروجی: {corrected}")

2574
app/excel_processing.py Normal file

File diff suppressed because it is too large Load Diff

332
app/filtersets.py Normal file
View File

@@ -0,0 +1,332 @@
import datetime
from django_filters import rest_framework as filters
from app.models import Poultry, PoultryHatching, TransportingChickenDetail, Hatching, TransportingDetail, KillHouse, \
TransportCarcassDetail, Driver, Guilds, AllProductsTransport
class PoultryFilterSet(filters.FilterSet):
class Meta:
model = Poultry
fields = [
'UserName',
'FirstName',
'LastName',
'UnitName',
'PartIdCode',
'UnitId',
'LocationIdProvince',
'LocationIdCity'
]
class PoultryHatchingFilterSet(filters.FilterSet):
class Meta:
model = PoultryHatching
fields = [
'DesCertId',
'RequestCode',
'Mobile',
'PartIdCode',
'EpidemiologicCode',
'LocationNameProvince',
'LocationNameCity',
'poultry__UserName',
'poultry__FirstName',
'poultry__LastName',
'poultry__UnitName',
'poultry__PartIdCode',
'poultry__UnitId',
'LocationIdProvince',
'LocationIdCity',
'LocationNameCity',
]
class HatchingsFilterSet(filters.FilterSet):
class Meta:
model = Hatching
fields = [
'UnitName',
'ProvinceName',
'CityName',
'PartIdCode',
'RequestCode',
'poultry__UserName',
'poultry__FirstName',
'poultry__LastName',
'poultry__UnitName',
'poultry__PartIdCode',
'poultry__UnitId',
]
class TransportingChickenDetailFilterSet(filters.FilterSet):
class Meta:
model = TransportingChickenDetail
fields = [
'DesUnitName',
'DesPartIdCode',
'SourceUnitPartIdCode',
'SourceUnitName',
'SourceCertId',
'hatching__DesCertId',
'hatching__LocationNameProvince',
'hatching__LocationNameCity',
'hatching__poultry__UserName',
'hatching__poultry__FirstName',
'hatching__poultry__LastName',
'hatching__poultry__UnitName',
'hatching__poultry__PartIdCode',
'hatching__poultry__UnitId',
'hatching__poultry__LocationIdProvince',
'hatching__poultry__LocationIdCity'
]
class HatchingFilterSet(filters.FilterSet):
class Meta:
model = PoultryHatching
fields = [
'LocationNameCity',
'LocationNameProvince',
'HatchingAge',
]
class PoultryInfoFilterSet(filters.FilterSet):
class Meta:
model = Poultry
fields = [
'LocationNameProvince',
'Province',
'LocationNameCity',
'City',
'FirstName',
'LastName',
'Mobile',
'SystemCode',
'EpidemiologicCode',
'PartIdCode',
'UnitName',
]
class HatchingCalculationsFilterSet(filters.FilterSet):
class Meta:
model = PoultryHatching
fields = [
'LocationNameProvince',
'LocationNameCity',
]
class TransportingDetailFilterSet(filters.FilterSet):
class Meta:
model = TransportingDetail
fields = [
'TrackingCode',
'Province',
'City',
'DesPartIdCode',
'Age',
'hatching__poultry__FirstName',
'hatching__poultry__PartIdCode',
'hatching__RequestCode',
'hatching__CityName',
'hatching__ProvinceName',
]
class KillHouseFilterSet(filters.FilterSet):
class Meta:
model = KillHouse
fields = [
'PartIdCode',
'UnitName',
'Province',
'City',
'ProvinceId'
]
class CustomHatchingsFilterSet(filters.FilterSet):
city = filters.CharFilter(field_name='CityName', lookup_expr='icontains')
province = filters.CharFilter(field_name='ProvinceName', lookup_expr='icontains')
system_code = filters.CharFilter(field_name='SystemCode', lookup_expr='exact')
age = filters.NumberFilter(field_name='Age', lookup_expr='exact')
age__gt = filters.NumberFilter(field_name='Age', lookup_expr='gt')
age__gte = filters.NumberFilter(field_name='Age', lookup_expr='gte')
age__lt = filters.NumberFilter(field_name='Age', lookup_expr='lt')
age__lte = filters.NumberFilter(field_name='Age', lookup_expr='lte')
killing_age = filters.NumberFilter(field_name='KillingAve', lookup_expr='exact')
killing_age__gt = filters.NumberFilter(field_name='KillingAve', lookup_expr='gt')
killing_age__gte = filters.NumberFilter(field_name='KillingAve', lookup_expr='gte')
killing_age__lt = filters.NumberFilter(field_name='KillingAve', lookup_expr='lt')
killing_age__lte = filters.NumberFilter(field_name='KillingAve', lookup_expr='lte')
leftover__gt = filters.NumberFilter(field_name='LeftOver', lookup_expr='gt')
leftover__gte = filters.NumberFilter(field_name='LeftOver', lookup_expr='gte')
leftover__lt = filters.NumberFilter(field_name='LeftOver', lookup_expr='lt')
leftover__lte = filters.NumberFilter(field_name='LeftOver', lookup_expr='lte')
leftover__exact = filters.NumberFilter(field_name='LeftOver', lookup_expr='exact')
date1__date__gte = filters.DateFilter(method='filter_date_range')
date2__date__lte = filters.DateFilter(method='filter_date_range')
state = filters.CharFilter(method='filter_state')
class Meta:
model = Hatching
fields = [
'city', 'province', 'system_code',
'age', 'age__gt', 'age__gte', 'age__lt', 'age__lte',
'killing_age', 'killing_age__gt', 'killing_age__gte', 'killing_age__lt', 'killing_age__lte',
'leftover__gt', 'leftover__gte', 'leftover__lt', 'leftover__lte', 'leftover__exact',
'date1__date__gte', 'date2__date__lte', 'state'
]
def filter_date_range(self, queryset, name, value):
date1 = self.data.get('date1__date__gte')
date2 = self.data.get('date2__date__lte')
if date1 and date2:
try:
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
return queryset.filter(Date__date__gte=date1, Date__date__lte=date2)
except ValueError:
return queryset
return queryset
def filter_state(self, queryset, name, value):
state = self.data.get('state')
if state:
if state == 'pending':
queryset = queryset.filter(Age__lte=70)
else:
queryset = queryset.filter(Age__gt=70)
return queryset
class TransportingDetailCustomFilterSet(filters.FilterSet):
unitname = filters.CharFilter(field_name='DesUnitName', lookup_expr='icontains')
province = filters.CharFilter(field_name='Province', lookup_expr='icontains')
city = filters.CharFilter(field_name='City', lookup_expr='icontains')
code = filters.CharFilter(field_name='DesPartIdCode', lookup_expr='exact')
trackingstatus = filters.CharFilter(field_name='TrackingStatusDescription', lookup_expr='exact')
quantity__gt = filters.NumberFilter(field_name='GoodAmount', lookup_expr='gt')
quantity__gte = filters.NumberFilter(field_name='GoodAmount', lookup_expr='gte')
quantity__lt = filters.NumberFilter(field_name='GoodAmount', lookup_expr='lt')
quantity__lte = filters.NumberFilter(field_name='GoodAmount', lookup_expr='lte')
age = filters.NumberFilter(field_name='Age', lookup_expr='exact')
age__gt = filters.NumberFilter(field_name='Age', lookup_expr='gt')
age__gte = filters.NumberFilter(field_name='Age', lookup_expr='gte')
age__lt = filters.NumberFilter(field_name='Age', lookup_expr='lt')
age__lte = filters.NumberFilter(field_name='Age', lookup_expr='lte')
date1__date__gte = filters.DateFilter(method='filter_date_range')
date2__date__lte = filters.DateFilter(method='filter_date_range')
poultry_unitname = filters.DateFilter(method='filter_poultry_unit_name')
class Meta:
model = TransportingDetail
fields = [
'unitname',
'province',
'city',
'code',
'trackingstatus',
'quantity__gt',
'quantity__gte',
'quantity__lt',
'quantity__lte',
'age',
'age__gt',
'age__gte',
'age__lt',
'age__lte',
'date1__date__gte',
'date2__date__lte',
'poultry_unitname',
]
def filter_date_range(self, queryset, name, value):
date1 = self.data.get('date1__date__gte')
date2 = self.data.get('date2__date__lte')
if date1 and date2:
try:
date1 = datetime.datetime.strptime(str(date1), '%Y-%m-%d').date()
date2 = datetime.datetime.strptime(str(date2), '%Y-%m-%d').date()
return queryset.filter(Date__date__gte=date1, Date__date__lte=date2)
except ValueError:
return queryset
return queryset
def filter_poultry_unit_name(self, queryset, name, value):
return queryset.filter(poultry__UnitName__icontains=value)
class TransportCarcassDetailFilterSet(filters.FilterSet):
class Meta:
model = TransportCarcassDetail
fields = [
'tracking',
'origin_province',
'origin_city',
'destination_province',
'destination_city',
'product',
'owner']
class DriverFilterSet(filters.FilterSet):
class Meta:
model = Driver
fields = [
'owner_name',
'driver_name',
'city',
'province',
]
class GuildsFilterSet(filters.FilterSet):
class Meta:
model = Guilds
fields = [
'name',
'province',
'city',
'jihadi_code'
]
class AllProductsTransportFilterSet(filters.FilterSet):
class Meta:
model = AllProductsTransport
fields = [
'record_id',
'tracking',
'product',
'items',
'origin_province',
'origin_city',
'destination_province',
'destination_city',
'owner',
'driver_name',
'car_tracking_code',
'out',
'quantity',
'jihadi_destination',
'jihadi_origin',
]

157
app/helper.py Normal file
View File

@@ -0,0 +1,157 @@
import re
import requests
from bs4 import BeautifulSoup
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.ssl_ import create_urllib3_context
from django.db.models import Q
from django.views.decorators.csrf import csrf_exempt
from rest_framework import status
from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response import Response
from app.cityandprovince import correct_province, correct_city, search_city_list, \
search_province_list
from app.models import TransportingDetail, Guilds, AllProductsTransport
from app.serializers import TransportingDetailForUpdateSerializer, AllProductsTransportSerializer
@api_view(["POST"])
@permission_classes([AllowAny])
@csrf_exempt
def get_bar_info(request):
kill_houses = request.data
kill_houses = dict(kill_houses)['kill_house']
bars = AllProductsTransport.objects.filter(trash=False, out=True, jihadi_destination__in=kill_houses,
unloading='تخلیه شده.',product='مرغ زنده -جهت كشتار',hatching__isnull=False,
date__gte='2025-12-25').order_by('-date')
ser_data = AllProductsTransportSerializer(bars, many=True).data
return Response(ser_data, status=status.HTTP_200_OK)
@api_view(["GET"])
@permission_classes([AllowAny])
@csrf_exempt
def test_city(request):
excluded_provinces = search_province_list
excluded_city = search_city_list
# hatchings = Hatching.objects.filter(
# ~Q(ProvinceName__in=excluded_provinces) | ~Q(CityName__in=excluded_city)
# )
transport = TransportingDetail.objects.filter(
~Q(Province__in=excluded_provinces) | ~Q(City__in=excluded_city)).only('Province', 'City')
# hatchings = Hatching.objects.filter(
# Q(ProvinceName__contains='<27>') | Q( CityName__contains='<27>')
# )
l = 1
for t in transport:
print(l)
if t.Province not in excluded_provinces:
t.Province = correct_province(t.Province)
t.save()
if t.City not in excluded_city:
t.CityName = correct_city(t.City, t.Province)
t.save()
l += 1
# if hatching:
return Response('lo')
class SSLAdapter(HTTPAdapter):
def __init__(self, *args, **kwargs):
self.context = create_urllib3_context()
self.context.options |= 0x4 # OP_LEGACY_SERVER_CONNECT
super().__init__(*args, **kwargs)
def init_poolmanager(self, *args, **kwargs):
kwargs['ssl_context'] = self.context
return super().init_poolmanager(*args, **kwargs)
def build_response(self, req, resp):
resp = super().build_response(req, resp)
return resp
def check_quarantine_code(lst):
result_code = []
for code in lst:
session = requests.Session()
session.mount('https://', SSLAdapter())
data = {'gid': str(code)}
m = session.post('https://e.ivo.ir/Rahgiri/Gidprnt.aspx', data=data, verify=False,
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
' (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'})
context = BeautifulSoup(m.text, 'html.parser')
table = context.find_all('table')
if table[5:6]:
row = context.find('div', align="right")
if row:
content = row.get_text(separator=" ", strip=True)
date_match = re.search(r'تاريخ:(\d{4}/\d{2}/\d{2})', content)
if date_match:
for i in table[5:6]:
row = i.find_all('tr')
for r in row[1:2]:
quantity = r.find('td')
match = re.search(r'\d+', quantity.text)
if match:
result_code.append(code)
return result_code
def get_hatching_permit_code(code):
result = {}
session = requests.Session()
session.mount('https://', SSLAdapter())
data = {'gid': str(code)}
m = session.post(
'https://e.ivo.ir/Rahgiri/Gidprnt.aspx',
data=data,
verify=False,
headers={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
' (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
},
timeout=20,
)
text = m.text
permit = None
match = re.search(r'کد\s*مجوز\s*جوجه\s*ریزی\s*[:]\s*([0-9۰-۹]+)', text)
if match:
raw_permit = match.group(1)
trans = str.maketrans('۰۱۲۳۴۵۶۷۸۹', '0123456789')
permit = raw_permit.translate(trans)
if permit:
result[str(code)] = permit
return result
@api_view(["GET"])
@permission_classes([AllowAny])
@csrf_exempt
def api_get_hatching_permit_code(request):
code = request.GET.get('code')
if not code:
return Response({'detail': 'code query param is required'}, status=status.HTTP_400_BAD_REQUEST)
try:
data = get_hatching_permit_code(code)
return Response(data, status=status.HTTP_200_OK)
except Exception as e:
return Response({'detail': str(e)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def create_guild(**info):
Guilds(
)
class SSLAdapter(HTTPAdapter):
def __init__(self, *args, **kwargs):
self.context = create_urllib3_context()
self.context.options |= 0x4 # OP_LEGACY_SERVER_CONNECT
super().__init__(*args, **kwargs)

327
app/helper_excel.py Normal file
View File

@@ -0,0 +1,327 @@
from io import BytesIO
import jdatetime
import openpyxl
from django.http import HttpResponse
from openpyxl import Workbook
from openpyxl.chart import LineChart, Reference, BarChart
from openpyxl.styles import PatternFill, Alignment, Font
from openpyxl.utils import get_column_letter
correction_dict = {
'<EFBFBD><EFBFBD>ربراکرز (آپلاس)': 'آربراکرز (آپلاس)',
'آ<EFBFBD><EFBFBD>براکرز (آپلاس)': 'آربراکرز (آپلاس)',
'آر<EFBFBD><EFBFBD>راکرز (آپلاس)': 'آربراکرز (آپلاس)',
'آرب<EFBFBD><EFBFBD>اکرز (آپلاس)': 'آربراکرز (آپلاس)',
'آربر<EFBFBD><EFBFBD>کرز (آپلاس)': 'آربراکرز (آپلاس)',
'آربرا<EFBFBD><EFBFBD>رز (آپلاس)': 'آربراکرز (آپلاس)',
'آربراک<EFBFBD><EFBFBD>ز (آپلاس)': 'آربراکرز (آپلاس)',
'آربراکر<EFBFBD><EFBFBD> (آپلاس)': 'آربراکرز (آپلاس)',
'آربراکرز<EFBFBD><EFBFBD> آپلاس)': 'آربراکرز (آپلاس)',
'آربراکرز (<28><>پلاس)': 'آربراکرز (آپلاس)',
'آربراکرز (آ<><D8A2>لاس)': 'آربراکرز (آپلاس)',
'آربراکرز (آپ<D8A2><D9BE>اس)': 'آربراکرز (آپلاس)',
'آربراکرز (آپل<D9BE><D984>س)': 'آربراکرز (آپلاس)',
'آربراکرز (آپلا<D984><D8A7>)': 'آربراکرز (آپلاس)',
'آربراکرز (آپلاس<D8A7><D8B3>': 'آربراکرز (آپلاس)',
'آربراکرز<EFBFBD><EFBFBD>(آپلاس)': 'آربراکرز (آپلاس)',
'<EFBFBD><EFBFBD>اس': 'راس',
'ر<EFBFBD><EFBFBD>س': 'راس',
'را<EFBFBD><EFBFBD>': 'راس',
'<EFBFBD><EFBFBD>رین': 'آرین',
'آ<EFBFBD><EFBFBD>ین': 'آرین',
'آر<EFBFBD><EFBFBD>ن': 'آرین',
'آری<EFBFBD><EFBFBD>': 'آرین',
'<EFBFBD><EFBFBD>ندین ریور': 'ایندین ریور',
'ای<EFBFBD><EFBFBD>دین ریور': 'ایندین ریور',
'این<EFBFBD><EFBFBD>ین ریور': 'ایندین ریور',
'ایند<EFBFBD><EFBFBD>ن ریور': 'ایندین ریور',
'ایندی<EFBFBD><EFBFBD> ریور': 'ایندین ریور',
'ایندین<EFBFBD><EFBFBD>ریور': 'ایندین ریور',
'ایندین <20><>یور': 'ایندین ریور',
'ایندین ر<><D8B1>ور': 'ایندین ریور',
'ایندین ری<D8B1><DB8C>ر': 'ایندین ریور',
'ایندین ریو<DB8C><D988>': 'ایندین ریور',
'<EFBFBD><EFBFBD>اب': 'کاب',
'ک<EFBFBD><EFBFBD>ب': 'کاب',
'کا<EFBFBD><EFBFBD>': 'کاب'
}
blue_fill = PatternFill(start_color="277358", fill_type="solid")
Alignment_CELL = Alignment(horizontal='center', vertical='center', wrap_text=True)
red_font = Font(color="C00000", bold=True)
GREEN_CELL = PatternFill(start_color="00B050", fill_type="solid")
RED_CELL = PatternFill(start_color="FCDFDC", fill_type="solid")
YELLOW_CELL = PatternFill(start_color="FFFF00", fill_type="solid")
ORANGE_CELL = PatternFill(start_color="FFC000", fill_type="solid")
BLUE_CELL = PatternFill(start_color="538DD5", fill_type="solid")
LIGHT_GREEN_CELL = PatternFill(start_color="92D050", fill_type="solid")
VERY_LIGHT_GREEN_CELL = PatternFill(start_color="5AFC56", fill_type="solid")
def shamsi_date(date,in_value=None):
if in_value:
sh_date=jdatetime.date.fromgregorian(
year=date.year,
month=date.month,
day=date.day
)
else:
gh_date = jdatetime.date.fromgregorian(
year=date.year,
month=date.month,
day=date.day
).strftime('%Y-%m-%d')
reversed_date = reversed(gh_date.split("-"))
separate = "-"
sh_date = separate.join(reversed_date)
return sh_date
def create_header(worksheet, list, num, row, height=None, width=None,color=None,text_color=None,border_style=None):
for col_num, option in enumerate(list, num):
cell = worksheet.cell(row=row, column=col_num, value=option)
col_letter = get_column_letter(col_num)
cell.alignment = Alignment_CELL
if color is not None:
if color == 'green':
cell.fill=GREEN_CELL
elif color == 'orange':
cell.fill=ORANGE_CELL
elif color == 'blue':
cell.fill=BLUE_CELL
else:
cell.fill = PatternFill(start_color=color, fill_type="solid")
else:
cell.fill = blue_fill
if text_color is not None:
cell.font = Font(size=9, bold=True, color=text_color)
else:
cell.font = Font(size=9, bold=True, color='D9FFFFFF')
if height is not None:
worksheet.row_dimensions[row].height = height
if width is not None:
worksheet.column_dimensions[col_letter].width = width
if border_style is not None:
cell.border = openpyxl.styles.Border(
left=openpyxl.styles.Side(style=border_style),
right=openpyxl.styles.Side(style=border_style),
top=openpyxl.styles.Side(style=border_style),
bottom=openpyxl.styles.Side(style=border_style)
)
def create_header_freez(worksheet, list, num, row, header_row, height=None, width=None,len_with=None,different_cell=None):
for col_num, option in enumerate(list, num):
col_letter = get_column_letter(col_num)
cell = worksheet.cell(row=row, column=col_num, value=option)
cell.alignment = Alignment_CELL
cell.fill = blue_fill
cell.font = Font(size=10, bold=True, color='D9FFFFFF')
if height is not None:
worksheet.row_dimensions[row].height = height
if len(option) > worksheet.column_dimensions[col_letter].width:
worksheet.column_dimensions[col_letter].width = len(option) + 2
if width is not None:
worksheet.column_dimensions[col_letter].width = width
if len_with is not None:
if len(option) > worksheet.column_dimensions[col_letter].width:
worksheet.column_dimensions[col_letter].width = len(option) + 3
if different_cell is not None:
if option == different_cell:
cell.fill = PatternFill(start_color="C00000", fill_type="solid")
worksheet.freeze_panes = worksheet[f'A{header_row}']
max_col = worksheet.max_column
range_str = f'A{header_row - 1}:{get_column_letter(max_col)}{worksheet.max_row}'
worksheet.auto_filter.ref = range_str
def excel_description(worksheet, row1, description, size=None, color=None,my_color=None, row2=None):
worksheet[row1] = description
worksheet[row1].alignment = Alignment_CELL
if size is not None:
worksheet[row1].font = Font(size=size)
if color is not None:
worksheet[row1].font = red_font
if my_color is not None:
worksheet[row1].font = PatternFill(start_color=my_color, fill_type="solid")
if row2 is not None:
merge_range = f'{row1}:{row2}'
worksheet.merge_cells(merge_range)
def create_value(worksheet, list, l, num, border_style=None, m=None, height=None, color=None, width=None,
different_cell=None, different_value=None, item_num=None, item_color=None):
color_dict = {
'green': GREEN_CELL,
'yellow': YELLOW_CELL,
'blue': BLUE_CELL,
'red': RED_CELL,
'light_green': LIGHT_GREEN_CELL,
'very_light_green': VERY_LIGHT_GREEN_CELL
}
for item in range(len(list)):
cell = worksheet.cell(row=l, column=item + num, value=list[item])
cell.alignment = Alignment_CELL
if border_style:
cell.border = openpyxl.styles.Border(
left=openpyxl.styles.Side(style=border_style),
right=openpyxl.styles.Side(style=border_style),
top=openpyxl.styles.Side(style=border_style),
bottom=openpyxl.styles.Side(style=border_style)
)
value = list[item]
if isinstance(value, (int, float)) and value != 0:
cell.number_format = '#,###'
else:
cell.value = value
cell.font = Font(size=10, bold=True)
if m is not None and m % 2 != 0:
cell.fill = PatternFill(start_color="D6F6FE", fill_type="solid")
if height is not None:
worksheet.row_dimensions[l + 1].height = height
if item_num is not None and item == item_num:
if item_color:
cell.fill = item_color
elif color in color_dict:
cell.fill = color_dict[color]
if different_cell is not None and list[different_cell] == different_value:
cell.fill = RED_CELL
if width is not None:
worksheet.column_dimensions[openpyxl.utils.get_column_letter(item + num)].width = width
def merge_cells(worksheet, l, s, cell1=None, cell2=None, lst=None):
if lst is not None:
for col in lst:
rng = f'{col}{l}:{col}{l + s}'
worksheet.merge_cells(rng)
worksheet[col + f'{l}'].alignment = Alignment_CELL
else:
for col in range(ord(f'{cell1}'), ord(f'{cell2}') + 1):
rng = f'{chr(col)}{l}:{chr(col)}{l + s}'
worksheet.merge_cells(rng)
worksheet[chr(col) + f'{l}'].alignment = Alignment_CELL
def add_header(worksheet):
worksheet.oddHeader.center.text = "سامانه رصدیار"
worksheet.oddHeader.center.size = 14 # تنظیم اندازه فونت
worksheet.oddHeader.center.font = "Arial,Bold" # تنظیم فونت و ضخامت
# همچنین می‌توانید از هدرهای چپ و راست هم استفاده کنید
# worksheet.oddHeader.right.text = f"تاریخ: {shamsi_now_date}"
def cell_color_changer(worksheet, row, start_index, end_index, custom_color):
for item in range(start_index, end_index):
cell = worksheet.cell(row=row, column=item)
cell.fill = PatternFill(start_color=custom_color, fill_type="solid")
def start_excel():
output = BytesIO()
workbook = Workbook()
worksheet = workbook.active
worksheet.sheet_view.rightToLeft = True
worksheet.insert_rows(1)
return workbook,worksheet,output
def close_excel(name):
workbook,worksheet,output=start_excel()
workbook.save(output)
output.seek(0)
response = HttpResponse(
content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
response[
'Content-Disposition'] = f'attachment; filename="{name}.xlsx"'.encode(
'utf-8')
response.write(output.getvalue())
return response
def add_chart(
worksheet,
chart_type,
data_columns,
category_column,
start_row,
end_row,
chart_position,
chart_title,
x_axis_title,
y_axis_title,
chart_width=25, # عرض نمودار پیش‌فرض (واحد: cm)
chart_height=15
):
"""
افزودن نمودار به صفحه اکسل.
ورودی:
worksheet (openpyxl.Worksheet): صفحه اکسل.
chart_type (str): نوع نمودار ("line" یا "bar").
data_columns (list): لیستی از ستون‌های داده.
category_column (int): ستون دسته‌بندی‌ها.
start_row (int): ردیف شروع داده‌ها.
end_row (int): ردیف پایان داده‌ها.
chart_position (str): محل قرار گرفتن نمودار.
chart_title (str): عنوان نمودار.
x_axis_title (str): عنوان محور X.
y_axis_title (str): عنوان محور Y.
chart_width (float): عرض نمودار (واحد: cm).
chart_height (float): ارتفاع نمودار (واحد: cm).
"""
if chart_type == 'line':
chart = LineChart()
chart.style = 20
elif chart_type == 'bar':
chart = BarChart()
else:
raise ValueError("chart_type باید 'line' یا 'bar' باشد.")
chart.title = chart_title
chart.y_axis.title = y_axis_title
chart.x_axis.title = x_axis_title
chart.width = chart_width
chart.height = chart_height
categories = Reference(worksheet, min_col=category_column, min_row=start_row, max_row=end_row)
data = Reference(worksheet, min_col=data_columns, min_row=start_row - 1, max_row=end_row)
chart.add_data(data, titles_from_data=True)
chart.set_categories(categories)
for series in chart.series:
series.graphicalProperties.line.solidFill = "277358"
series.graphicalProperties.line.width = 30000
worksheet.add_chart(chart, chart_position)
#example
# add_chart(
# worksheet=worksheet,
# chart_type='line',
# data_columns=7, # ستون وزن وارد شده
# category_column=2, # ستون نام سردخانه‌ها
# start_row=7,
# end_row=l + 1,
# chart_position="A12",
# chart_title="نمودار تغییرات وزن در سردخانه‌ها",
# x_axis_title="سردخانه‌ها",
# y_axis_title="وزن (کیلوگرم)"
# )

View File

@@ -0,0 +1,138 @@
# Generated by Django 4.2.19 on 2025-02-26 11:13
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
migrations.CreateModel(
name='Poultry',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('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.CharField(max_length=200, null=True)),
('AllowInsert', models.CharField(max_length=200, null=True)),
('AllowUpdate', models.CharField(max_length=200, 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)),
('UnitIsActive', models.CharField(max_length=200, null=True)),
('UnitIsActiveDescription', models.CharField(max_length=200, null=True)),
('PId', models.CharField(max_length=200, null=True)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL)),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='PoultryHatching',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('DesCertId', models.CharField(max_length=200, null=True)),
('UnitId', models.CharField(max_length=200, null=True)),
('BroilerFlockRequestId', models.CharField(max_length=200, 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)),
('MaxHatchingDate', models.CharField(max_length=200, null=True)),
('MaxHatchingDatePersian', models.CharField(max_length=200, null=True)),
('HatchingCount', models.CharField(max_length=200, null=True)),
('HatchingCountInBargiri', models.CharField(max_length=200, null=True)),
('HatchingCountInTakhlie', models.CharField(max_length=200, null=True)),
('TrackingCount', models.CharField(max_length=200, null=True)),
('TrackingBargiriCount', models.CharField(max_length=200, null=True)),
('PercentHamlToMojavez', models.CharField(max_length=200, null=True)),
('PercentTakhlieToBargiri', models.CharField(max_length=200, null=True)),
('FlockAgeDay', models.CharField(max_length=200, 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.CharField(max_length=200, 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.CharField(max_length=200, null=True)),
('HamlMorghTakhlieCount', models.CharField(max_length=200, null=True)),
('EvacuationCount', models.CharField(max_length=200, null=True)),
('EvacuationCount_1', models.CharField(max_length=200, null=True)),
('EvacuationCount_2', models.CharField(max_length=200, null=True)),
('EvacuationCount_3', models.CharField(max_length=200, null=True)),
('BaseHatchingCount', models.CharField(max_length=200, null=True)),
('PercentMorghToJoojeTotal', models.CharField(max_length=200, null=True)),
('PercentMorghToJoojeTakhlie', models.CharField(max_length=200, null=True)),
('PercentMorghToJoojeTakhlieWithEvacutaion', models.CharField(max_length=200, null=True)),
('PercentNotDeliverd', models.CharField(max_length=200, null=True)),
('PercentDeliveredForSP', models.CharField(max_length=200, null=True)),
('PercentDeliveredForSPNoExclude', models.CharField(max_length=200, null=True)),
('PercentDeliveredWithoutEvac', models.CharField(max_length=200, null=True)),
('DiffHamlThanTakhlieCount', models.CharField(max_length=200, null=True)),
('DiffTakhlieThanHamlCount', models.CharField(max_length=200, null=True)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL)),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL)),
('poultry', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='hatching_poultry', to='app.poultry')),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,29 @@
# Generated by Django 4.2.19 on 2025-02-26 11:46
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('app', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='poultry',
name='AllowInsert',
),
migrations.RemoveField(
model_name='poultry',
name='AllowUpdate',
),
migrations.RemoveField(
model_name='poultry',
name='IsPersisted',
),
migrations.RemoveField(
model_name='poultry',
name='UnitIsActive',
),
]

View File

@@ -0,0 +1,33 @@
# Generated by Django 4.2.19 on 2025-02-26 11:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0002_remove_poultry_allowinsert_and_more'),
]
operations = [
migrations.AddField(
model_name='poultry',
name='AllowInsert',
field=models.BooleanField(null=True),
),
migrations.AddField(
model_name='poultry',
name='AllowUpdate',
field=models.BooleanField(null=True),
),
migrations.AddField(
model_name='poultry',
name='IsPersisted',
field=models.BooleanField(null=True),
),
migrations.AddField(
model_name='poultry',
name='UnitIsActive',
field=models.BooleanField(null=True),
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 4.2.19 on 2025-02-27 08:30
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0003_poultry_allowinsert_poultry_allowupdate_and_more'),
]
operations = [
migrations.AddField(
model_name='poultryhatching',
name='Date',
field=models.DateTimeField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='HatchingAge',
field=models.IntegerField(default=1),
),
]

View File

@@ -0,0 +1,117 @@
# Generated by Django 4.2.19 on 2025-02-27 09:04
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('app', '0004_poultryhatching_date_poultryhatching_hatchingage'),
]
operations = [
migrations.RemoveField(
model_name='poultryhatching',
name='BaseHatchingCount',
),
migrations.RemoveField(
model_name='poultryhatching',
name='BroilerFlockRequestId',
),
migrations.RemoveField(
model_name='poultryhatching',
name='CapacityFemale',
),
migrations.RemoveField(
model_name='poultryhatching',
name='DiffHamlThanTakhlieCount',
),
migrations.RemoveField(
model_name='poultryhatching',
name='DiffTakhlieThanHamlCount',
),
migrations.RemoveField(
model_name='poultryhatching',
name='EvacuationCount',
),
migrations.RemoveField(
model_name='poultryhatching',
name='EvacuationCount_1',
),
migrations.RemoveField(
model_name='poultryhatching',
name='EvacuationCount_2',
),
migrations.RemoveField(
model_name='poultryhatching',
name='EvacuationCount_3',
),
migrations.RemoveField(
model_name='poultryhatching',
name='FlockAgeDay',
),
migrations.RemoveField(
model_name='poultryhatching',
name='HamlMorghTakhlieCount',
),
migrations.RemoveField(
model_name='poultryhatching',
name='HamlMorghTotalCount',
),
migrations.RemoveField(
model_name='poultryhatching',
name='HatchingCount',
),
migrations.RemoveField(
model_name='poultryhatching',
name='HatchingCountInBargiri',
),
migrations.RemoveField(
model_name='poultryhatching',
name='HatchingCountInTakhlie',
),
migrations.RemoveField(
model_name='poultryhatching',
name='PercentDeliveredForSP',
),
migrations.RemoveField(
model_name='poultryhatching',
name='PercentDeliveredForSPNoExclude',
),
migrations.RemoveField(
model_name='poultryhatching',
name='PercentDeliveredWithoutEvac',
),
migrations.RemoveField(
model_name='poultryhatching',
name='PercentHamlToMojavez',
),
migrations.RemoveField(
model_name='poultryhatching',
name='PercentMorghToJoojeTakhlie',
),
migrations.RemoveField(
model_name='poultryhatching',
name='PercentMorghToJoojeTakhlieWithEvacutaion',
),
migrations.RemoveField(
model_name='poultryhatching',
name='PercentMorghToJoojeTotal',
),
migrations.RemoveField(
model_name='poultryhatching',
name='PercentNotDeliverd',
),
migrations.RemoveField(
model_name='poultryhatching',
name='PercentTakhlieToBargiri',
),
migrations.RemoveField(
model_name='poultryhatching',
name='TrackingBargiriCount',
),
migrations.RemoveField(
model_name='poultryhatching',
name='TrackingCount',
),
]

View File

@@ -0,0 +1,143 @@
# Generated by Django 4.2.19 on 2025-02-27 09:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0005_remove_poultryhatching_basehatchingcount_and_more'),
]
operations = [
migrations.AddField(
model_name='poultryhatching',
name='BaseHatchingCount',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='BroilerFlockRequestId',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='CapacityFemale',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='DiffHamlThanTakhlieCount',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='DiffTakhlieThanHamlCount',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='EvacuationCount',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='EvacuationCount_1',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='EvacuationCount_2',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='EvacuationCount_3',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='FlockAgeDay',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='HamlMorghTakhlieCount',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='HamlMorghTotalCount',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='HatchingCount',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='HatchingCountInBargiri',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='HatchingCountInTakhlie',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='PercentDeliveredForSP',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='PercentDeliveredForSPNoExclude',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='PercentDeliveredWithoutEvac',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='PercentHamlToMojavez',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='PercentMorghToJoojeTakhlie',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='PercentMorghToJoojeTakhlieWithEvacutaion',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='PercentMorghToJoojeTotal',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='PercentNotDeliverd',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='PercentTakhlieToBargiri',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='TrackingBargiriCount',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='poultryhatching',
name='TrackingCount',
field=models.IntegerField(null=True),
),
]

View File

@@ -0,0 +1,34 @@
# Generated by Django 4.2.19 on 2025-02-27 11:07
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0006_poultryhatching_basehatchingcount_and_more'),
]
operations = [
migrations.CreateModel(
name='TransportingChickenDetail',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('PedigreeName', models.CharField(max_length=200, null=True)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL)),
('hatching', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='transporting_hatching', to='app.poultryhatching')),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,118 @@
# Generated by Django 4.2.19 on 2025-02-27 11:12
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0007_transportingchickendetail'),
]
operations = [
migrations.AddField(
model_name='transportingchickendetail',
name='CertId',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='DesCertId',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='GoodAmount',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='GoodCode',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='GoodName',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='IssueDate',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='IssueDatePersian',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='ParentPartIdCode',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='ParentUnitName',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='ResideDate',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='ResideDatePersian',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='SourceCertId',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='SourcePartIdCode',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='SourceUnitName',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='TakhlieDate',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='TakhlieDatePersian',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='TrackingCode',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='TrackingStatus',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='TrackingStatusDescription',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='issue_date',
field=models.DateTimeField(null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='reside_date',
field=models.DateTimeField(null=True),
),
]

View File

@@ -0,0 +1,38 @@
# Generated by Django 4.2.19 on 2025-02-27 12:21
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0008_transportingchickendetail_certid_and_more'),
]
operations = [
migrations.AddField(
model_name='transportingchickendetail',
name='BroilerFlockRequestId',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='DesPartIdCode',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='DesUnitName',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='HealthPermitId',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='transportingchickendetail',
name='SourceUnitPartIdCode',
field=models.CharField(max_length=200, null=True),
),
]

View File

@@ -0,0 +1,22 @@
# Generated by Django 4.2.19 on 2025-02-28 10:40
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("app", "0009_transportingchickendetail_broilerflockrequestid_and_more"),
]
operations = [
migrations.AddField(
model_name="transportingchickendetail",
name="Province",
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name="transportingchickendetail",
name="ProvinceId",
field=models.CharField(max_length=200, null=True),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.2.19 on 2025-03-01 11:11
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0010_transportingchickendetail_province_and_more'),
]
operations = [
migrations.AddField(
model_name='poultryhatching',
name='PedigreeName',
field=models.CharField(max_length=200, null=True),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.13 on 2025-03-03 12:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0011_poultryhatching_pedigreename'),
]
operations = [
migrations.AddField(
model_name='transportingchickendetail',
name='age',
field=models.IntegerField(default=1),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.2.19 on 2025-03-09 11:52
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0012_transportingchickendetail_age'),
]
operations = [
migrations.AddField(
model_name='poultryhatching',
name='LeftOver',
field=models.IntegerField(null=True),
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 4.2.19 on 2025-03-11 12:25
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0013_poultryhatching_leftover'),
]
operations = [
migrations.AddField(
model_name='poultry',
name='LocationNameCity',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='poultry',
name='LocationNameProvince',
field=models.CharField(max_length=200, null=True),
),
]

View File

@@ -0,0 +1,155 @@
# Generated by Django 4.2.19 on 2025-04-05 13:43
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0014_poultry_locationnamecity_and_more'),
]
operations = [
migrations.CreateModel(
name='Hatching',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('BroilerFlockRequestId', models.IntegerField(blank=True, null=True)),
('InsertDate', models.CharField(blank=True, max_length=200, null=True)),
('LastChangeStatusDate', models.CharField(blank=True, max_length=200, null=True)),
('LastChangeStatusDateShamsi', models.CharField(blank=True, max_length=200, null=True)),
('FlockRequestUnitName', models.CharField(blank=True, max_length=200, null=True)),
('PedigreeName', models.CharField(blank=True, max_length=200, null=True)),
('StatusId', models.IntegerField(blank=True, null=True)),
('Status', models.IntegerField(blank=True, null=True)),
('StatusName', models.CharField(blank=True, max_length=200, null=True)),
('PedigreeType', models.IntegerField(blank=True, null=True)),
('BroilerPedigreeTypeName', models.CharField(blank=True, max_length=200, null=True)),
('StatusColor', models.CharField(blank=True, max_length=200, null=True)),
('SystemRevocationDate', models.CharField(blank=True, max_length=200, null=True)),
('RemindDays', models.IntegerField(blank=True, null=True)),
('PartyCount', models.IntegerField(blank=True, null=True)),
('GoodCount', models.IntegerField(blank=True, null=True)),
('ShowButtons', models.BooleanField(blank=True, null=True)),
('HasSync', models.BooleanField(blank=True, null=True)),
('BroilerFlockRequestExpireStatus', models.IntegerField(blank=True, null=True)),
('IdWithFormat', models.CharField(blank=True, max_length=200, null=True)),
('ProvinceName', models.CharField(blank=True, max_length=200, null=True)),
('CityName', models.CharField(blank=True, max_length=200, null=True)),
('Address', models.CharField(blank=True, max_length=200, null=True)),
('UnitTel', models.CharField(blank=True, max_length=200, null=True)),
('UnitPostalCode', models.CharField(blank=True, max_length=200, null=True)),
('UnitName', models.CharField(blank=True, max_length=200, null=True)),
('SystemCode', models.CharField(blank=True, max_length=200, null=True)),
('CapacityFemale', models.CharField(blank=True, max_length=200, null=True)),
('EpidemiologicCode', models.CharField(blank=True, max_length=200, null=True)),
('RequestCode', models.CharField(blank=True, max_length=200, null=True)),
('RequestDate', models.CharField(blank=True, max_length=200, null=True)),
('RequestDateFa', models.CharField(blank=True, max_length=200, null=True)),
('RequestCount', models.IntegerField(blank=True, null=True)),
('DeliverDate', models.CharField(blank=True, max_length=200, null=True)),
('DeliverDateFa', models.CharField(blank=True, max_length=200, null=True)),
('UnionName', models.CharField(blank=True, max_length=200, null=True)),
('PersonTypeId', models.IntegerField(blank=True, null=True)),
('PersonType', models.IntegerField(blank=True, null=True)),
('PersonTypeName', models.CharField(blank=True, max_length=200, null=True)),
('PersonFullName', models.CharField(blank=True, max_length=200, null=True)),
('NationalCode', models.CharField(blank=True, max_length=200, null=True)),
('InteractType', models.IntegerField(blank=True, null=True)),
('InteractTypeName', models.CharField(blank=True, max_length=200, null=True)),
('UnionTypeId', models.IntegerField(blank=True, null=True)),
('UnionTypeName', models.CharField(blank=True, max_length=200, null=True)),
('SendDate', models.CharField(blank=True, max_length=200, null=True)),
('SendDateFa', models.CharField(blank=True, max_length=200, null=True)),
('ChickCountSum', models.IntegerField(blank=True, null=True)),
('CalculatedDate', models.CharField(blank=True, max_length=200, null=True)),
('CalculatedDateFa', models.CharField(blank=True, max_length=200, null=True)),
('PartIdCode', models.CharField(blank=True, max_length=200, null=True)),
('CertId', models.CharField(blank=True, max_length=200, null=True)),
('StartDate', models.CharField(blank=True, max_length=200, null=True)),
('StartDateFa', models.CharField(blank=True, max_length=200, null=True)),
('EndDate', models.CharField(blank=True, max_length=200, null=True)),
('EndDateFa', models.CharField(blank=True, max_length=200, null=True)),
('RemainCredit', models.IntegerField(blank=True, null=True)),
('StrRemainCredit', models.CharField(blank=True, max_length=200, null=True)),
('ShowStatus', models.CharField(blank=True, max_length=200, null=True)),
('ValidStatus', models.CharField(blank=True, max_length=200, null=True)),
('ValidStatusName', models.CharField(blank=True, max_length=200, null=True)),
('RegDate', models.CharField(blank=True, max_length=200, null=True)),
('RegDateShamsi', models.CharField(blank=True, max_length=200, null=True)),
('RegDateShamsiWithTime', models.CharField(blank=True, max_length=200, null=True)),
('RegDateShamsiOnlyTime', models.CharField(blank=True, max_length=200, null=True)),
('HatchingId', models.CharField(blank=True, max_length=200, null=True)),
('StringId', models.CharField(blank=True, max_length=200, null=True)),
('IsPersisted', models.BooleanField(blank=True, null=True)),
('AllowInsert', models.BooleanField(blank=True, null=True)),
('AllowUpdate', models.BooleanField(blank=True, null=True)),
('ModalCss', models.CharField(blank=True, max_length=200, null=True)),
('GridContainerParametersModel', models.CharField(blank=True, max_length=200, null=True)),
('MenuUserAccess', models.CharField(blank=True, max_length=200, null=True)),
('MenuUserAccessId', models.IntegerField(blank=True, null=True)),
('LogTableName', models.CharField(blank=True, max_length=200, null=True)),
('LogTableAlias', models.CharField(blank=True, max_length=200, null=True)),
('PageTitle', models.CharField(blank=True, max_length=200, null=True)),
('Evacuation', models.IntegerField(default=0)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL)),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL)),
('poultry', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='poultry_hatching_poultry', to='app.poultry')),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='TransportingDetail',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('BroilerFlockRequestId', models.IntegerField(blank=True, 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)),
('SourceUnitPartIdCode', 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)),
('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)),
('ProvinceId', models.CharField(max_length=200, null=True)),
('Province', models.CharField(max_length=200, null=True)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL)),
('hatching', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='transport_hatching', to='app.hatching')),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,68 @@
# Generated by Django 4.2.19 on 2025-04-06 07:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0015_hatching_transportingdetail'),
]
operations = [
migrations.RemoveField(
model_name='transportingdetail',
name='CertId',
),
migrations.RemoveField(
model_name='transportingdetail',
name='ParentPartIdCode',
),
migrations.RemoveField(
model_name='transportingdetail',
name='ParentUnitName',
),
migrations.RemoveField(
model_name='transportingdetail',
name='ProvinceId',
),
migrations.RemoveField(
model_name='transportingdetail',
name='issue_date',
),
migrations.AddField(
model_name='hatching',
name='Age',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='hatching',
name='Date',
field=models.DateTimeField(null=True),
),
migrations.AddField(
model_name='hatching',
name='LeftOver',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='hatching',
name='Period',
field=models.IntegerField(default=1),
),
migrations.AddField(
model_name='transportingdetail',
name='Age',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='transportingdetail',
name='City',
field=models.CharField(max_length=200, null=True),
),
migrations.AddField(
model_name='transportingdetail',
name='Date',
field=models.DateTimeField(null=True),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.2.19 on 2025-04-06 10:43
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0016_remove_transportingdetail_certid_and_more'),
]
operations = [
migrations.AddField(
model_name='hatching',
name='ArchiveDate',
field=models.DateTimeField(null=True),
),
]

View File

@@ -0,0 +1,17 @@
# Generated by Django 4.2.19 on 2025-04-06 11:59
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('app', '0017_hatching_archivedate'),
]
operations = [
migrations.RemoveField(
model_name='hatching',
name='CapacityFemale',
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.2.19 on 2025-04-06 11:59
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0018_remove_hatching_capacityfemale'),
]
operations = [
migrations.AddField(
model_name='hatching',
name='CapacityFemale',
field=models.IntegerField(blank=True, null=True),
),
]

View File

@@ -0,0 +1,36 @@
# Generated by Django 3.2.13 on 2025-04-07 05:00
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0019_hatching_capacityfemale'),
]
operations = [
migrations.CreateModel(
name='KillHouse',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('PartIdCode', models.CharField(blank=True, max_length=250, null=True)),
('UnitName', models.CharField(blank=True, max_length=250, null=True)),
('Province', models.CharField(blank=True, max_length=250, null=True)),
('City', models.CharField(blank=True, max_length=250, null=True)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='killhouse_createdby', to=settings.AUTH_USER_MODEL)),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='killhouse_modifiedby', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,36 @@
# Generated by Django 4.2.19 on 2025-04-07 06:21
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0020_killhouse'),
]
operations = [
migrations.AddField(
model_name='hatching',
name='KillingAve',
field=models.IntegerField(null=True),
),
migrations.AddField(
model_name='transportingdetail',
name='Out',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='killhouse',
name='created_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='killhouse',
name='modified_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 4.2.19 on 2025-04-07 06:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0021_hatching_killingave_transportingdetail_out_and_more'),
]
operations = [
migrations.AlterField(
model_name='hatching',
name='KillingAve',
field=models.IntegerField(default=0),
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 4.2.19 on 2025-04-07 08:34
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0022_alter_hatching_killingave'),
]
operations = [
migrations.AddField(
model_name='killhouse',
name='CityId',
field=models.CharField(blank=True, max_length=200, null=True),
),
migrations.AddField(
model_name='killhouse',
name='ProvinceId',
field=models.CharField(blank=True, max_length=200, null=True),
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 4.2.19 on 2025-04-07 09:19
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0023_killhouse_cityid_killhouse_provinceid'),
]
operations = [
migrations.AddField(
model_name='poultry',
name='City',
field=models.CharField(blank=True, max_length=500, null=True),
),
migrations.AddField(
model_name='poultry',
name='Province',
field=models.CharField(blank=True, max_length=500, null=True),
),
]

View File

@@ -0,0 +1,16 @@
# Generated by Django 3.2.13 on 2025-04-29 12:52
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('app', '0024_poultry_city_poultry_province'),
]
operations = [
migrations.DeleteModel(
name='TransportingDetail',
),
]

View File

@@ -0,0 +1,60 @@
# Generated by Django 3.2.13 on 2025-04-29 12:57
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0025_delete_transportingdetail'),
]
operations = [
migrations.CreateModel(
name='TransportingDetail',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('BroilerFlockRequestId', models.IntegerField(blank=True, 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)),
('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)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='transportingdetail_createdby', to=settings.AUTH_USER_MODEL)),
('hatching', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='transport_hatching', to='app.hatching')),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='transportingdetail_modifiedby', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,31 @@
# Generated by Django 4.2.19 on 2025-05-06 08:21
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0026_transportingdetail'),
]
operations = [
migrations.AddField(
model_name='hatching',
name='samasat_discharge_percentage',
field=models.IntegerField(default=0),
),
migrations.AlterField(
model_name='transportingdetail',
name='created_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='transportingdetail',
name='modified_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.13 on 2025-06-30 12:08
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0027_hatching_samasat_discharge_percentage_and_more'),
]
operations = [
migrations.AddField(
model_name='hatching',
name='GoodSum',
field=models.IntegerField(default=0),
),
]

View File

@@ -0,0 +1,34 @@
# Generated by Django 4.2.19 on 2025-07-20 05:32
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0028_hatching_goodsum'),
]
operations = [
migrations.CreateModel(
name='ApkInfo',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('info', models.JSONField(null=True)),
('download_link', models.CharField(blank=True, max_length=700, null=True)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL)),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,52 @@
# Generated by Django 3.2.13 on 2025-09-21 10:17
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0029_apkinfo'),
]
operations = [
migrations.CreateModel(
name='TransportCarcassDetail',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('id_quarantineh', models.CharField(blank=True, max_length=255, null=True)),
('destination_prev', models.CharField(blank=True, max_length=255, null=True)),
('destination_changed', models.CharField(blank=True, max_length=255, null=True)),
('payment', models.CharField(blank=True, max_length=255, null=True)),
('tracking', models.CharField(blank=True, max_length=255, null=True)),
('date', models.DateField(blank=True, null=True)),
('time', models.TimeField(blank=True, null=True)),
('product', models.CharField(blank=True, max_length=255, null=True)),
('items', models.CharField(blank=True, max_length=255, null=True)),
('quantity', models.FloatField(blank=True, null=True)),
('unit', models.CharField(blank=True, max_length=50, null=True)),
('origin_province', models.CharField(blank=True, max_length=255, null=True)),
('origin_city', models.CharField(blank=True, max_length=255, null=True)),
('origin', models.CharField(blank=True, max_length=255, null=True)),
('destination_province', models.CharField(blank=True, max_length=255, null=True)),
('destination_city', models.CharField(blank=True, max_length=255, null=True)),
('destination', models.CharField(blank=True, max_length=255, null=True)),
('jihadi_origin', models.CharField(blank=True, max_length=255, null=True)),
('jihadi_destination', models.CharField(blank=True, max_length=255, null=True)),
('owner', models.CharField(blank=True, max_length=255, null=True)),
('car_tracking_code', models.CharField(blank=True, max_length=255, null=True)),
('driver_name', models.CharField(blank=True, max_length=255, null=True)),
('plate', models.CharField(blank=True, max_length=50, null=True)),
('amount', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True)),
('unloading', models.CharField(blank=True, max_length=255, null=True)),
('gross_weight', models.FloatField(blank=True, null=True)),
('tare_weight', models.FloatField(blank=True, null=True)),
('net_weight', models.FloatField(blank=True, null=True)),
('scale_code', models.CharField(blank=True, max_length=255, null=True)),
('scale_name', models.CharField(blank=True, max_length=255, null=True)),
('scale_receipt', models.CharField(blank=True, max_length=255, null=True)),
('unloading_date', models.DateField(blank=True, null=True)),
('out', models.BooleanField(default=False)),
],
),
]

View File

@@ -0,0 +1,49 @@
# Generated by Django 3.2.13 on 2025-09-21 11:17
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0030_transportcarcassdetail'),
]
operations = [
migrations.AddField(
model_name='transportcarcassdetail',
name='create_date',
field=models.DateTimeField(auto_now_add=True, default=django.utils.timezone.now),
preserve_default=False,
),
migrations.AddField(
model_name='transportcarcassdetail',
name='created_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='transportcarcassdetail_createdby', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='transportcarcassdetail',
name='key',
field=models.UUIDField(default=uuid.uuid4, editable=False, unique=True),
),
migrations.AddField(
model_name='transportcarcassdetail',
name='modified_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='transportcarcassdetail_modifiedby', to=settings.AUTH_USER_MODEL),
),
migrations.AddField(
model_name='transportcarcassdetail',
name='modify_date',
field=models.DateTimeField(auto_now=True),
),
migrations.AddField(
model_name='transportcarcassdetail',
name='trash',
field=models.BooleanField(default=False),
),
]

View File

@@ -0,0 +1,16 @@
# Generated by Django 3.2.13 on 2025-09-21 11:18
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('app', '0031_auto_20250921_1447'),
]
operations = [
migrations.DeleteModel(
name='TransportCarcassDetail',
),
]

View File

@@ -0,0 +1,65 @@
# Generated by Django 3.2.13 on 2025-09-21 11:18
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0032_delete_transportcarcassdetail'),
]
operations = [
migrations.CreateModel(
name='TransportCarcassDetail',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('id_quarantineh', models.CharField(blank=True, max_length=255, null=True)),
('destination_prev', models.CharField(blank=True, max_length=255, null=True)),
('destination_changed', models.CharField(blank=True, max_length=255, null=True)),
('payment', models.CharField(blank=True, max_length=255, null=True)),
('tracking', models.CharField(blank=True, max_length=255, null=True)),
('date', models.DateField(blank=True, null=True)),
('time', models.TimeField(blank=True, null=True)),
('product', models.CharField(blank=True, max_length=255, null=True)),
('items', models.CharField(blank=True, max_length=255, null=True)),
('quantity', models.FloatField(blank=True, null=True)),
('unit', models.CharField(blank=True, max_length=50, null=True)),
('origin_province', models.CharField(blank=True, max_length=255, null=True)),
('origin_city', models.CharField(blank=True, max_length=255, null=True)),
('origin', models.CharField(blank=True, max_length=255, null=True)),
('destination_province', models.CharField(blank=True, max_length=255, null=True)),
('destination_city', models.CharField(blank=True, max_length=255, null=True)),
('destination', models.CharField(blank=True, max_length=255, null=True)),
('jihadi_origin', models.CharField(blank=True, max_length=255, null=True)),
('jihadi_destination', models.CharField(blank=True, max_length=255, null=True)),
('owner', models.CharField(blank=True, max_length=255, null=True)),
('car_tracking_code', models.CharField(blank=True, max_length=255, null=True)),
('driver_name', models.CharField(blank=True, max_length=255, null=True)),
('plate', models.CharField(blank=True, max_length=50, null=True)),
('amount', models.DecimalField(blank=True, decimal_places=2, max_digits=20, null=True)),
('unloading', models.CharField(blank=True, max_length=255, null=True)),
('gross_weight', models.FloatField(blank=True, null=True)),
('tare_weight', models.FloatField(blank=True, null=True)),
('net_weight', models.FloatField(blank=True, null=True)),
('scale_code', models.CharField(blank=True, max_length=255, null=True)),
('scale_name', models.CharField(blank=True, max_length=255, null=True)),
('scale_receipt', models.CharField(blank=True, max_length=255, null=True)),
('unloading_date', models.DateField(blank=True, null=True)),
('out', models.BooleanField(default=False)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='transportcarcassdetail_createdby', to=settings.AUTH_USER_MODEL)),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='transportcarcassdetail_modifiedby', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,36 @@
# Generated by Django 3.2.13 on 2025-09-22 10:08
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0033_transportcarcassdetail'),
]
operations = [
migrations.CreateModel(
name='Guilds',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('name', models.CharField(blank=True, max_length=255, null=True)),
('city', models.CharField(blank=True, max_length=255, null=True)),
('province', models.CharField(blank=True, max_length=255, null=True)),
('jihadi_code', models.CharField(blank=True, max_length=255, null=True)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='guilds_createdby', to=settings.AUTH_USER_MODEL)),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='guilds_modifiedby', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.13 on 2025-09-22 10:12
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0034_guilds'),
]
operations = [
migrations.AddField(
model_name='guilds',
name='is_steward',
field=models.BooleanField(default=False),
),
]

View File

@@ -0,0 +1,43 @@
# Generated by Django 3.2.13 on 2025-09-22 12:22
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0035_guilds_is_steward'),
]
operations = [
migrations.CreateModel(
name='Driver',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('car_id', models.CharField(blank=True, max_length=255, null=True)),
('driver_name', models.CharField(blank=True, max_length=255, null=True)),
('owner_name', models.CharField(blank=True, max_length=255, null=True)),
('city', models.CharField(blank=True, max_length=255, null=True)),
('province', models.CharField(blank=True, max_length=255, null=True)),
('pelak', models.CharField(blank=True, max_length=255, null=True)),
('tracking_code', models.CharField(blank=True, max_length=255, null=True)),
('weight', models.IntegerField(blank=True, null=True)),
('car_type', models.CharField(blank=True, max_length=255, null=True)),
('expire_licence_date', models.DateField(blank=True, null=True)),
('health_permit', models.CharField(blank=True, max_length=255, null=True)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='driver_createdby', to=settings.AUTH_USER_MODEL)),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='driver_modifiedby', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.13 on 2025-09-22 12:24
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0036_driver'),
]
operations = [
migrations.AddField(
model_name='driver',
name='product',
field=models.CharField(blank=True, max_length=255, null=True),
),
]

View File

@@ -0,0 +1,23 @@
# Generated by Django 3.2.13 on 2025-09-27 05:18
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0037_driver_product'),
]
operations = [
migrations.AddField(
model_name='driver',
name='kill_house_name',
field=models.CharField(blank=True, max_length=255, null=True),
),
migrations.AddField(
model_name='driver',
name='part_id_code',
field=models.CharField(blank=True, max_length=255, null=True),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.13 on 2025-09-27 06:40
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0038_auto_20250927_0848'),
]
operations = [
migrations.AlterField(
model_name='transportcarcassdetail',
name='tracking',
field=models.CharField(blank=True, max_length=255, null=True, unique=True),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.13 on 2025-09-27 07:39
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0039_alter_transportcarcassdetail_tracking'),
]
operations = [
migrations.AddField(
model_name='transportcarcassdetail',
name='product_date',
field=models.DateField(blank=True, null=True),
),
]

View File

@@ -0,0 +1,18 @@
# Generated by Django 3.2.13 on 2025-09-28 08:05
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('app', '0040_transportcarcassdetail_product_date'),
]
operations = [
migrations.AddField(
model_name='transportcarcassdetail',
name='has_product_date',
field=models.BooleanField(default=False),
),
]

View File

@@ -0,0 +1,64 @@
# Generated by Django 4.2.19 on 2025-11-04 07:13
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0041_transportcarcassdetail_has_product_date'),
]
operations = [
migrations.AlterField(
model_name='driver',
name='created_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='driver',
name='modified_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='guilds',
name='created_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='guilds',
name='modified_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='transportcarcassdetail',
name='created_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL),
),
migrations.AlterField(
model_name='transportcarcassdetail',
name='modified_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL),
),
migrations.CreateModel(
name='InquiryCredentials',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('data', models.JSONField(blank=True, null=True)),
('numbers', models.JSONField(blank=True, null=True)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL)),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,62 @@
# Generated by Django 4.2.19 on 2025-11-08 08:21
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0042_alter_driver_created_by_alter_driver_modified_by_and_more'),
]
operations = [
migrations.CreateModel(
name='AllProductsTransport',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('record_id', models.CharField(blank=True, max_length=255, null=True)),
('destination_prev', models.CharField(blank=True, max_length=255, null=True)),
('destination_changed', models.CharField(blank=True, max_length=255, null=True)),
('tracking', models.CharField(blank=True, max_length=255, null=True, unique=True)),
('date', models.DateField(blank=True, null=True)),
('product', models.CharField(blank=True, max_length=255, null=True)),
('items', models.CharField(blank=True, max_length=255, null=True)),
('quantity', models.FloatField(blank=True, null=True)),
('unit', models.CharField(blank=True, max_length=50, null=True)),
('origin_province', models.CharField(blank=True, max_length=255, null=True)),
('origin_city', models.CharField(blank=True, max_length=255, null=True)),
('origin', models.CharField(blank=True, max_length=255, null=True)),
('destination_province', models.CharField(blank=True, max_length=255, null=True)),
('destination_city', models.CharField(blank=True, max_length=255, null=True)),
('destination', models.CharField(blank=True, max_length=255, null=True)),
('jihadi_origin', models.CharField(blank=True, max_length=255, null=True)),
('jihadi_destination', models.CharField(blank=True, max_length=255, null=True)),
('owner', models.CharField(blank=True, max_length=255, null=True)),
('car_tracking_code', models.CharField(blank=True, max_length=255, null=True)),
('driver_name', models.CharField(blank=True, max_length=255, null=True)),
('gross_weight', models.FloatField(blank=True, null=True)),
('tare_weight', models.FloatField(blank=True, null=True)),
('net_weight', models.FloatField(blank=True, null=True)),
('scale_code', models.CharField(blank=True, max_length=255, null=True)),
('scale_name', models.CharField(blank=True, max_length=255, null=True)),
('scale_receipt', models.CharField(blank=True, max_length=255, null=True)),
('unloading_date', models.DateField(blank=True, null=True)),
('unloading', models.CharField(blank=True, max_length=255, null=True)),
('out', models.BooleanField(default=False)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_createdby', to=settings.AUTH_USER_MODEL)),
('hatching', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='all_products_transports', to='app.hatching')),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='%(class)s_modifiedby', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]

View File

@@ -0,0 +1,56 @@
# Generated by Django 3.2.13 on 2025-11-08 17:33
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('app', '0043_allproductstransport'),
]
operations = [
migrations.CreateModel(
name='EvacuationDetail',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('key', models.UUIDField(default=uuid.uuid4, editable=False, unique=True)),
('create_date', models.DateTimeField(auto_now_add=True)),
('modify_date', models.DateTimeField(auto_now=True)),
('trash', models.BooleanField(default=False)),
('BroilerFlockRequestId', models.IntegerField(blank=True, null=True)),
('TrackingCode', models.CharField(blank=True, max_length=200, null=True)),
('IssueDate', models.CharField(blank=True, max_length=200, null=True)),
('IssueDatePersian', models.CharField(blank=True, max_length=200, null=True)),
('issue_date', models.DateTimeField(blank=True, null=True)),
('GoodAmount', models.IntegerField(blank=True, null=True)),
('GoodCode', models.IntegerField(blank=True, null=True)),
('GoodName', models.CharField(blank=True, max_length=200, null=True)),
('TrackingStatus', models.IntegerField(blank=True, null=True)),
('TrackingStatusDescription', models.CharField(blank=True, max_length=200, null=True)),
('TakhlieDate', models.CharField(blank=True, max_length=200, null=True)),
('TakhlieDatePersian', models.CharField(blank=True, max_length=200, null=True)),
('takhlie_date', models.DateTimeField(blank=True, null=True)),
('SourceUnitPartIdCode', models.CharField(blank=True, max_length=200, null=True)),
('SourceUnitName', models.CharField(blank=True, max_length=200, null=True)),
('SourceCertId', models.CharField(blank=True, max_length=200, null=True)),
('SourcePartIdCode', models.CharField(blank=True, max_length=200, null=True)),
('DesUnitName', models.CharField(blank=True, max_length=200, null=True)),
('DesPartIdCode', models.CharField(blank=True, max_length=200, null=True)),
('HealthPermitId', models.IntegerField(blank=True, null=True)),
('ResideDate', models.CharField(blank=True, max_length=200, null=True)),
('ResideDatePersian', models.CharField(blank=True, max_length=200, null=True)),
('reside_date', models.DateTimeField(blank=True, null=True)),
('created_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='evacuationdetail_createdby', to=settings.AUTH_USER_MODEL)),
('hatching', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='evacuation_details', to='app.hatching')),
('modified_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='evacuationdetail_modifiedby', to=settings.AUTH_USER_MODEL)),
],
options={
'abstract': False,
},
),
]

Some files were not shown because too many files have changed in this diff Show More