|
@@ -1,4 +1,6 @@
|
|
|
from odoo import models, fields, api
|
|
|
+from odoo.exceptions import UserError
|
|
|
+from odoo.tools.translate import _
|
|
|
|
|
|
|
|
|
class HostelStudent(models.Model):
|
|
@@ -19,12 +21,72 @@ class HostelRoom(models.Model):
|
|
|
|
|
|
floor_number = fields.Integer("楼层", required=True)
|
|
|
room_name = fields.Char("房间名称", required=True)
|
|
|
- room_id = fields.Integer("房间编号", required=True)
|
|
|
+ room_id = fields.Char("房间编号", required=True)
|
|
|
+ currency_id = fields.Many2one('res.currency', string="货币种类") # 货币字段种类,要放到租金字段前面,否则会有None这个问题,而且不好排查
|
|
|
rent_amount = fields.Monetary("租金", help="输入每月租金", currency_field="currency_id")
|
|
|
- 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
|
|
|
+
|
|
|
+ @api.model
|
|
|
+ def rooms_with_multiple_memebers(self, all_rooms):
|
|
|
+ def predicate(room):
|
|
|
+ if len(room.member_ids) > 1:
|
|
|
+ return True
|
|
|
+ return False
|
|
|
+ return all_rooms.filter(lambda b : len(b.member_ids)>1)
|
|
|
+
|
|
|
+ def change_state(self, new_state):
|
|
|
+ for room in self:
|
|
|
+ if room.is_allowed_transition(room.state, new_state):
|
|
|
+ room.state = new_state
|
|
|
+ else:
|
|
|
+ msg = _("Moving from %s to %s is not allowed.") % (room.state, new_state)
|
|
|
+ raise UserError(msg)
|
|
|
+
|
|
|
+ def make_available(self):
|
|
|
+ self.change_state('available')
|
|
|
+
|
|
|
+ def make_closed(self):
|
|
|
+ self.change_state('closed')
|
|
|
+
|
|
|
+ def log_all_room_members(self):
|
|
|
+ hostel_room_obj = self.env['hostel.room']
|
|
|
+ all_members = hostel_room_obj.search([])
|
|
|
+ print("宿舍房间成员信息:", all_members)
|
|
|
+ return True
|
|
|
+
|
|
|
+ def update_room_id(self):
|
|
|
+ self.ensure_one()
|
|
|
+ self.update({
|
|
|
+ 'room_id':'RM002',
|
|
|
+ 'room_name': '荷兰风情'
|
|
|
+ })
|
|
|
+
|
|
|
+ def find_room(self):
|
|
|
+ domain = ['|', '&', ('name', 'ilike', 'Room Name'),
|
|
|
+ ('category_id', 'ilike', 'Category name'),
|
|
|
+ '&', ('name', 'ilike', 'Second Room Name'),
|
|
|
+ ('category_id.name', 'ilike', 'SecondCategory Name 2')
|
|
|
+ ]
|
|
|
+ rooms = self.search(domain)
|
|
|
+ return rooms
|
|
|
+
|
|
|
+ def filter_members(self, room):
|
|
|
+ all_rooms = self.search([])
|
|
|
+ filtered_rooms = self.rooms_with_multiple_members(all_rooms)
|
|
|
+ return filtered_rooms
|