class Order(models.Model): REGISTERED_STATUS = '1' DELIVERED_STATUS = '2' LOADING_STATUS = '3' SENDING_STATUS = '4' CLEARED_STATUS = '5' ORDER_STATUS = ( (REGISTERED_STATUS, _('Order is begin registered')), (DELIVERED_STATUS, _('Delivered to the sales unit')), (LOADING_STATUS, _('Loading')), (SENDING_STATUS, _('Sending')), (CLEARED_STATUS, _('Cleared')), ) objects = jmodels.jManager() order_number = models.CharField(max_length=100, default=set_order_number, verbose_name=_("Order number")) order_status = models.CharField(choices=ORDER_STATUS, max_length=1, default=REGISTERED_STATUS, verbose_name=_('Order status')) total_cost = models.PositiveIntegerField(verbose_name=_("Total cost")) off = models.PositiveIntegerField(verbose_name=_("Off"), default=0) phone_number = models.CharField(max_length=13,verbose_name=_("Phone number"), null=True, blank=True) first_name = models.CharField(max_length=100, verbose_name=_("First name")) last_name = models.CharField(max_length=100, verbose_name=_("last name")) created_at = jmodels.jDateTimeField(auto_now_add=True, verbose_name=_("Created at")) updated_at = jmodels.jDateTimeField(auto_now=True, verbose_name=_("Updated at")) class Meta: verbose_name = _("Order") verbose_name_plural = _("Orders") def __str__(self): return self.order_number
class OpinionForDrug(models.Model): objects = jmodels.jManager() drug = models.ForeignKey('Drug', on_delete = models.CASCADE, null = False, blank = False, verbose_name = 'دارو') author = models.ForiegnKey('MyUser', on_delete = models.CASCADE, null = False, blank = False, verbose_name = 'نویسنده') title = models.CharField(db_index = True, max_length = 300, null = True, blank = True, verbose_name = 'عنوان') text = models.TextField(max_length = 1000, null = False, blank = False, verbose_name = 'متن') date = jmodels.jDateField(default = jdatetime.date.today, null = False = blank = True, verbose_name = 'تاریخ ثبت')
class BarTime(models.Model): objects = jmodels.jManager() name = models.CharField(max_length=200) datetime = jmodels.jDateTimeField() def __str__(self): return "%s, %s" % (self.name, self.datetime)
class AvailabilityStatus(LogMixin): objects = jmodels.jManager() reason = models.CharField(max_length=20, choices=AVAILABILITY_STATUS_REASON_TYPES) until = jmodels.jDateTimeField() class Meta: verbose_name = "وضعیت کارمند" verbose_name_plural = "وضعیتهای کارمند" def get_type_info(self): return self.get_reason_display() @property def until_formatted(self): object_type = "date" if self.reason in DAYLONG_STATUS_TYPES else "datetime" formatted_datetime = get_formatted_jdatetime(self.until, object_type=object_type, show_seconds=False) return formatted_datetime def __str__(self): until_details = ("" if self.reason in INDEFINITE_STATUS_TYPES else f" تا {self.until_formatted}") return f"{self.employee} - {self.get_reason_display()} {until_details}"
class Packet(models.Model): objects = jmodels.jManager() profile_id = models.ForeignKey(Profile, on_delete=models.CASCADE, null=True) sDate = jmodels.jDateTimeField('Date Created', auto_now_add=True) def __str__(self): return '{0}/{1}/{2}'.format(self.sDate.year, self.sDate.month,self.sDate.day)
class Term(models.Model): objects = jmodels.jManager() start_date = jmodels.jDateField(null=False, blank=False) end_date = jmodels.jDateField(null=False, blank=False) @property def title(self): if self.start_date.month > self.end_date.month: return str(self.start_date.year) + " دوم" else: return str(self.start_date.year) + " اول" class Meta: unique_together = (("start_date", "end_date")) def __str__(self): return self.title def __init__(self, *args, **kwargs): super(Term, self).__init__(* args, **kwargs) if self.start_date is not None: self.old_title = self.title else: self.old_title = " " def clean(self): if (self.end_date < self.start_date) or (self.end_date.year - self.start_date.year > 1): raise ValidationError("Invalid Term interval!") elif self.title != self.old_title and self.title in list(map(lambda x: x.title, Term.objects.all())): raise ValidationError( "A term with the title <%s> is already defined!" % self.title) def save(self, *args, **kwargs): self.full_clean() super(Term, self).save(*args, **kwargs)
class Grade(models.Model): objects = jmodels.jManager() out_of_twenty = models.FloatField( null=False, blank=False, default=20.0) # az 20 nomre value = models.FloatField(null=False, blank=False, default=0.0) base_value = models.FloatField(null=False, blank=False, default=20.0) date_examined = jmodels.jDateField(null=True, blank=True) title = models.CharField(max_length=255, blank=True) attend = models.ForeignKey( Attend, on_delete=models.CASCADE, related_name="grades") @property def percentage(self): return self.out_of_twenty*100/20.0 @property def carrier(self): return self.attend.carrier @property def course(self): return self.attend.course def __str__(self): return "Grade for: "+str(self.attend)+" | Title :"+str(self.title)
class DrugRegistration(models.Model): objects = jmodels.jManager() drug = models.OneToOneField('Drug',on_delete = models.CASCADE, null = False, blank = False, unique = True, verbose_name = 'دارو') addDate = jmodels.jDateField(default = jdatetime.date.today, null = False, blank = True, verbose_name = 'تاریخ ثبت') pharmacy = models.ForeignKey('Pharmacy', on_delete = models.CASCADE, null = False, blank = False, verbose_name = 'داروخانه ثبت کننده') def __str__(self): return '%s : %s'%(self.drug.name,self.parmacy.fullName)
class TimeStampedModel(models.Model): objects = jmodels.jManager() created = jmodels.jDateTimeField(auto_now_add=True) modified = jmodels.jDateTimeField(auto_now=True) class Meta: abstract = True
class DrugPricing(models.Model): objects = jmodels.jManager() drug = models.ForeignKey('Drug', on_delete = models.CASCADE, null = False, blank = False, verbose_name = 'دارو') price = models.FloatField(null = False, blank = False, verbose_name = 'قیمت') insuranceRate = models.ForeignKey('InsuranceRate', on_delete = models.CASCADE, null = Flase, blank = False, verbose_name = 'نرخ بیمه') addDate = jmodels.jDateTimeField(default = jdatetime.datetime.now, null = False, blank = True, verbose_name = 'تاریخ ثبت قیمت') def __str__(self): return '%s : %s'%(self.drug.name,self.addDate)
class Request(models.Model): objects = jmodels.jManager() applicantFirstName = models.CharField(db_index = True, max_length = 50, null = False, blank = False, verbose_name = 'نام متقاضی') applicantLastName = models.CharField(db_index = True, max_length = 100, null = False, blank = False, verbose_name = 'نام خانوادگی متقاضی') text = models.TextField(db_index = True, max_length = 2000, null = False, blank = False, verbose_name = 'متن درخواست') isAccepted = models.BooleanField(default = False, null = False, blank = True, verbose_name = 'تاییدیه') requestDate = jmodels.jDateField(default = jdatetime.date.today, null = False, blank = True, verbose_name = 'تاریخ درخواست') def __str__(self): return '%s %s : %s'%(self.applicantFirstName,self.applicantLastName,self.requestDate)
class Profile(models.Model): objects = jmodels.jManager() user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) date_of_birth = jmodels.jDateField(blank=True, null=True) photo = models.ImageField(upload_to='users/%Y/%m/%d/', blank=True) def __str__(self): return f'{self.user.first_name} {self.user.last_name}'
class Order(models.Model): objects = jmodels.jManager() datetime = jmodels.jDateTimeField(default=jdatetime.datetime.now, null=False, blank=True, verbose_name="زمان سفارش") ORDER_TYPE_CHOICES = [ (1, "بیرون بر"), (2, "سالن"), ] title = models.PositiveSmallIntegerField(null=False, blank=False, choices=ORDER_TYPE_CHOICES, verbose_name="نوع") customer = models.ForeignKey("Customer", on_delete=models.DO_NOTHING, null=False, blank=False, unique_for_date='datetime', verbose_name="مشتری") branch = models.ForeignKey("Branch", on_delete=models.CASCADE, null=False, blank=False, verbose_name="مجموعه غذایی") table = models.ForeignKey("Table", on_delete=models.DO_NOTHING, null=True, blank=True, verbose_name="میز") foods = models.ManyToManyField("Food", verbose_name="غذا") @property def prices(self): foods = self.foods for food in foods: prices += food.price return prices def __str__(self): return "{1} -> {0}".format(self.branch.name, self.customer.user.username) class Meta: verbose_name = "سفارش" verbose_name_plural = "سفارشات"
class Dissertation(models.Model): title = models.CharField(max_length=500) description = models.TextField() is_approved = models.BooleanField(default=False) created_at = jmodels.jDateTimeField(auto_now_add=True) jury_date = jmodels.jDateField(blank=True) objects = jmodels.jManager() docfile = models.FileField(blank=True, upload_to='disserta') # RELATIONS student = models.OneToOneField(Student, on_delete=models.CASCADE)
class Fund(models.Model): objects = jmodels.jManager() owner = models.ForeignKey(User, on_delete=models.DO_NOTHING) title = models.CharField(max_length=150, null=True, blank=True) pub_date = models.DateTimeField(default=now) date_fa = jmodels.jDateField(default=now) summary = models.TextField(max_length=600, null=True, blank=True) class Meta: permissions = (("index_fund", "Can view list of funds"), ) def __str__(self): return '%s' % self.title
class Transaction(models.Model): title = models.CharField(max_length=40, null=True, verbose_name='عنوان') objects = jmodels.jManager() date = jmodels.jDateField(verbose_name='تاریخ') amount = models.IntegerField(verbose_name='مقدار') payment_method = models.ForeignKey(PaymentMethod, null=True, on_delete=models.SET_NULL, verbose_name='پرداخت با') class Meta: abstract = True def tag_date(self): return "%s" % (digits.en_to_fa(self.date.__str__()))
class Event(models.Model): Name = models.CharField(max_length=40) Kanoon = models.ForeignKey(Kanoon, on_delete=models.CASCADE) objects = jmodels.jManager() DateTime = jmodels.jDateTimeField Group = models.ManyToManyField(Group) # TODO: Only from Kanoon Group Creator = models.ForeignKey( User, on_delete=models.CASCADE) # TODO : default current user Description = models.TextField() Members = models.ManyToManyField(Member) # TODO: Only from Group Member Poster = models.ImageField(blank=True, null=True) def __str__(self): return '{} - {}'.format(self.Name, self.Kanoon)
class FoodCollection(models.Model): full_name = models.CharField(db_index=True, max_length=100, null=False, blank=False, verbose_name="نام مجموعه") guild_id = models.CharField( db_index=True, max_length=12, null=False, blank=False, validators=[ RegexValidator(regex=r"^\d{12}$", message="شناسه صنفی را بصورت درست وارد نمایید", code="شناسه صنفی نامعتبر") ], verbose_name="شناسه صنفی") objects = jmodels.jManager() expiration_date = jmodels.jDateField(null=False, blank=False, verbose_name="تاریخ انقضا پروانه کسب") collaborationRequest = models.OneToOneField("CollaborationRequest", on_delete=models.CASCADE, null=False, blank=False, verbose_name="درخواست مربوطه") manager = models.OneToOneField("User", on_delete=models.CASCADE, null=False, blank=False, verbose_name="مدیر مجموعه") def __str__(self): return self.full_name class Meta: verbose_name = "مجموعه غذایی" verbose_name_plural = "مجموعه های غذایی"
class Comment(MPTTModel): RelPost = models.ForeignKey(Post, on_delete=models.CASCADE) Text = models.TextField() Author = models.CharField(max_length=50) objects = jmodels.jManager() Date = jmodels.jDateField() models.DateTimeField(default=datetime.datetime.now()) Email = models.EmailField(null=True) Valid = models.BooleanField(default=False) parent = TreeForeignKey('self', on_delete=models.CASCADE, null=True, blank=True, related_name='children') class MPTTMeta: order_insertion_by = ['Date']
class Answer(models.Model): objects = jmodels.jManager() Date = jmodels.jDateField(null=True) Time = models.TimeField(null=True) Sex = models.CharField(max_length=20, default='M') Age = models.CharField(max_length=20, default='None') QoProduct = models.IntegerField(default=0) QoDesign = models.IntegerField(default=0) QoResponse = models.IntegerField(default=0) QoDelivery = models.IntegerField(default=0) QoPersonality = models.IntegerField(default=0) QoDecor = models.IntegerField(default=0) QoAmount = models.IntegerField(default=0) QoShape = models.IntegerField(default=0) Comment = models.TextField(max_length=300, blank=True) def __str__(self): return "{} {}".format(self.Sex, self.Age)
class Post(models.Model): Title = models.TextField(blank=False) Type = models.CharField(max_length=50) Category = models.CharField(max_length=50) SubTitle = models.TextField(null=True, blank=True) About = models.TextField(null=True, blank=True) Author = models.CharField(max_length=50, null=True, blank=True) Avatar = models.ImageField(upload_to='static/image/avatar/', null=True, blank=True) Text = models.TextField() objects = jmodels.jManager() Date = jmodels.jDateField() AparatLink = models.TextField(null=True, blank=True) PostImage = models.ImageField(upload_to='static/image/post/', null=True, blank=True) tags = TaggableManager() Index = models.IntegerField(default=0)
class Log(models.Model): objects = jmodels.jManager() datetime_occured = jmodels.jDateTimeField(auto_now_add=True) employee = models.ForeignKey("Employee", on_delete=models.SET_NULL, null=True) event_message = models.TextField() event_type = models.CharField(max_length=40) class Meta: verbose_name = "لاگ" verbose_name_plural = "لاگها" @property def datetime_occured_formatted(self): return get_formatted_jdatetime(self.datetime_occured) def __str__(self): return f"{self.datetime_occured_formatted} - {self.event_message}"
class MyUser(AbstractBaseUser,PermissionsMixin): objects = jmodels.jManager() username = models.CharField(db_index = True, max_length = 100, null = False, blank = False, unique = True, verbose_name = 'نام کاربری') email = models.EmailField(max_length = 255, null = True, blank = True, unique = True, verbose_name = 'آدرس ایمیل') date_joined = jmodels.jDateField(default = jdatetime.date.todey, null = False, blank = True, verbose_name = 'تاریخ ثبت نام') last_login = models.jDateTimeField(default = jdatetime.datetime.now, null = False,blank = True, verbose_name = 'آخرین ورود') is_active = models.BooleanField(default = True, null = False, blank = True, verbose_name = 'فعال') is_superuser = models.BooleanField(default = False, null = False, blank = True, verbose_name = 'ادمین') USERNAME_FIELD = 'username' EMAIL_FIELD = 'email' REQUIRED_FIELDS = [] objects = UserManager() @property def is_staff(self): "Is the user a member of staff?" # Simplest possible answer: All admins are staff return self.is_admin def __str__(self): return self.username
class Rate(models.Model): objects = jmodels.jManager() datetime = jmodels.jDateTimeField(default=jdatetime.datetime.now, null=False, blank=True, editable=False, verbose_name="زمان ثبت") title = models.CharField(db_index=True, max_length=100, null=False, blank=False, verbose_name="عنوان") text = models.TextField(max_length=2000, null=False, blank=False, verbose_name="متن") customer = models.ForeignKey("Customer", on_delete=models.CASCADE, null=False, blank=True, verbose_name="کاربر نظر دهنده") branch = models.ForeignKey("Branch", on_delete=models.CASCADE, null=False, blank=True, verbose_name="مجموعه غذایی مورد نظر") def __str__(self): return "{0} -> {1}".format(self.customer.user.username, self.branch.name) class Meta: verbose_name = "نظر" verbose_name_plural = "نظرات"
class BlogPost(models.Model): objects = jmodels.jManager() photo = models.ImageField( upload_to='blog/', null=True, blank=True, help_text= "برای نمایش بهتر در سایت، باید نسبت ابعاد تصویر بین ۰.۸ تا ۱.۲ باشد.", validators=[validate_image_size, validate_square_image]) title = models.CharField(max_length=70, null=False, blank=False) publish_date = jmodels.jDateTimeField(auto_now_add=True) summary = models.TextField(max_length=100, null=False, blank=False) text = RichTextField(null=False, blank=False) categories = models.ManyToManyField(Category, related_name='blog_posts') def __str__(self): return self.title def get_persian_date(self): return persian_date(self.publish_date) def get_persian_month(self): months = [ 'فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند' ] return months[self.publish_date.month - 1] def get_persian_year(self): translate_table = str.maketrans('1234567890', '۱۲۳۴۵۶۷۸۹۰') return str(self.publish_date.year).translate(translate_table) def get_persian_time(self): translate_table = str.maketrans('1234567890', '۱۲۳۴۵۶۷۸۹۰') return str(self.publish_date.time().strftime(" %H:%M ")).translate( translate_table) def get_persian_day(self): translate_table = str.maketrans('1234567890', '۱۲۳۴۵۶۷۸۹۰') return str(self.publish_date.day).translate(translate_table)
class Member(models.Model): FirstName = models.CharField(max_length=30, blank=True) LastName = models.CharField(max_length=30, blank=True) NickName = models.CharField(max_length=30, blank=True) # PhoneNumber = models.CharField(max_length=20) Kanoon = models.ForeignKey(Kanoon, on_delete=models.CASCADE) objects = jmodels.jManager() BrithDate = jmodels.jDateField(blank=True, null=True) PhoneNumber = PhoneNumberField() Avatar = AvatarField(upload_to='Members', width=100, height=100, null=True, blank=True) Group = models.ManyToManyField(Group) Email = models.EmailField(max_length=70, unique=True, blank=True, null=True) def __str__(self): return '{} - {}'.format(self.FirstName, self.LastName)
class jDateModel(models.Model): objects = jmodels.jManager() date = jmodels.jDateField() def __repr__(self): return str(self.date)
class jDateTimeModel(models.Model): objects = jmodels.jManager() date_time = jmodels.jDateTimeField()
class jDateTimeModelAutoNow(models.Model): objects = jmodels.jManager() date_time = jmodels.jDateTimeField(auto_now=True)
class jDateModelAutoNow(models.Model): objects = jmodels.jManager() date = jmodels.jDateField(auto_now=True) def __repr__(self): return str(self.date)