|
@@ -1,11 +1,54 @@
|
|
from odoo import models, fields, api
|
|
from odoo import models, fields, api
|
|
|
|
|
|
|
|
+
|
|
|
|
+class HostelStudent(models.Model):
|
|
|
|
+ _name = "hostel.student"
|
|
|
|
+ _description = "宿舍学生信息"
|
|
|
|
+
|
|
|
|
+ # 学生信息
|
|
|
|
+ name = fields.Char("姓名", required=True)
|
|
|
|
+ gender = fields.Selection([("male", "男"), ("female", "女")], string="性别", required=True)
|
|
|
|
+ age = fields.Integer("年龄", required=True)
|
|
|
|
+ active = fields.Boolean("可用", default=True, help="激活/停用 宿舍记录")
|
|
|
|
+ room_id = fields.Many2one("hostel.room", "房间", help="选择房间号")
|
|
|
|
+
|
|
|
|
+
|
|
class HostelRoom(models.Model):
|
|
class HostelRoom(models.Model):
|
|
_name = "hostel.room"
|
|
_name = "hostel.room"
|
|
_description = "宿舍房间信息"
|
|
_description = "宿舍房间信息"
|
|
|
|
+
|
|
floor_number = fields.Integer("楼层", required=True)
|
|
floor_number = fields.Integer("楼层", required=True)
|
|
room_name = fields.Char("房间名称", required=True)
|
|
room_name = fields.Char("房间名称", required=True)
|
|
room_id = fields.Integer("房间编号", required=True)
|
|
room_id = fields.Integer("房间编号", required=True)
|
|
rent_amount = fields.Monetary("租金", help="输入每月租金", currency_field="currency_id")
|
|
rent_amount = fields.Monetary("租金", help="输入每月租金", currency_field="currency_id")
|
|
currency_id = fields.Many2one('res.currency', string="货币种类")
|
|
currency_id = fields.Many2one('res.currency', string="货币种类")
|
|
|
|
+ hostel_id = fields.Many2one("hostel.hostel", "hostel", help='输入宿舍名称')
|
|
|
|
+ student_ids = fields.One2many("hostel.student", "room_id", "学生")
|
|
|
|
+
|
|
|
|
+ hostel_amenities_ids = fields.Many2many("hostel.amenities", "hostel_room_amenities_rel", "room_id", "amenitily_id",
|
|
|
|
+ string="设施", domain="[('active', '=', True)]", help="选择宿舍设施")
|
|
|
|
+ # 添加状态字段
|
|
|
|
+ state = fields.Selection([('draft', 'Unavailable'), ('available', 'Available'), ('closed', 'Closed')],
|
|
|
|
+ 'State', default='draft')
|
|
|
|
+
|
|
|
|
+ @api.model
|
|
|
|
+ def is_allowed_transition(self, old_state, new_state):
|
|
|
|
+ allowed = {
|
|
|
|
+ 'draft': ['available'],
|
|
|
|
+ 'available': ['closed'],
|
|
|
|
+ 'closed': []
|
|
|
|
+ }
|
|
|
|
+ return (old_state, new_state) in allowed
|
|
|
|
+
|
|
|
|
+ def change_state(self, new_state):
|
|
|
|
+ for room in self:
|
|
|
|
+ if room.is_allowed_transition(room.state, new_state):
|
|
|
|
+ room.state = new_state
|
|
|
|
+ else:
|
|
|
|
+ continue
|
|
|
|
+
|
|
|
|
+ def make_availabel(self):
|
|
|
|
+ self.change_state('available')
|
|
|
|
|
|
|
|
+ def make_closed(self):
|
|
|
|
+ self.change_state('closed')
|