BookingService/booking/models.py

80 lines
3.1 KiB
Python

import datetime
import uuid
from django.db import models
from user.models import User
class Setting(models.Model):
pre_booking_interval_day = models.IntegerField('提前预约时间间隔(天)', default=30)
booking_interval = models.IntegerField('预约间隔(分钟)', default=30)
start_time = models.TimeField('开始时间', default=datetime.time(8, 0))
end_time = models.TimeField('结束时间', default=datetime.time(21, 0))
punish_point = models.IntegerField('惩罚积分数', default=5)
reward_point = models.IntegerField('奖励积分数', default=10)
class Meta:
verbose_name = '预约设置'
verbose_name_plural = verbose_name
def __str__(self):
return f'{self.start_time}-{self.end_time}'
class Room(models.Model):
id = models.CharField('ID', max_length=36, default=uuid.uuid1, primary_key=True)
name = models.CharField('名称', max_length=128, blank=True)
description = models.TextField('说明', max_length=512, blank=True)
class Meta:
verbose_name = '房间'
verbose_name_plural = verbose_name
def __str__(self):
return f'{self.name}'
class Seat(models.Model):
id = models.CharField('ID', max_length=36, default=uuid.uuid1, primary_key=True)
name = models.CharField('名称', max_length=128, blank=True)
room = models.ForeignKey(verbose_name='房间', to=Room, on_delete=models.CASCADE)
created_datetime = models.DateTimeField('创建时间', auto_now_add=True)
class Meta:
verbose_name = '座位'
verbose_name_plural = verbose_name
def __str__(self):
return f'{self.room.id}-{self.room.name}-{self.id}'
class Booking(models.Model):
STATUS_CHIOCE = [
('PENDING', '正在申请'),
('SUCCESS', '申请成功'),
('FAILED', '申请失败'),
('CANCELED', '被取消'),
]
user = models.ForeignKey(verbose_name='预约人', to=User, on_delete=models.CASCADE, related_name='user')
room = models.ForeignKey(verbose_name='房间', to=Room, on_delete=models.CASCADE)
seats = models.ManyToManyField(verbose_name='多个座位', to=Seat, related_name='seats')
created_datetime = models.DateTimeField('预约日期时间', auto_now_add=True)
start_time = models.TimeField('开始时间')
end_time = models.TimeField('结束时间')
date = models.DateField('日期')
arrive_time = models.TimeField('到达时间', blank=True, null=True)
leave_time = models.TimeField('离开时间', blank=True, null=True)
status = models.CharField('状态', choices=STATUS_CHIOCE, max_length=10, default='PENDING')
cancel_datetime = models.DateTimeField('取消日期时间', blank=True, null=True)
cancel_reason = models.CharField('取消理由', max_length=512, blank=True, null=True)
cancel_by = models.ForeignKey(verbose_name='取消人', to=User, on_delete=models.CASCADE, related_name='cancel_by',
blank=True, null=True)
class Meta:
verbose_name = '预约'
verbose_name_plural = verbose_name
def __str__(self):
return f'{self.user.username}-{self.date}'