diff --git a/room/__manifest__.py b/room/__manifest__.py index d538c5d17..d6cacebe6 100644 --- a/room/__manifest__.py +++ b/room/__manifest__.py @@ -22,6 +22,7 @@ 'data/ir_module_category_data.xml', 'report/meet_check_report.xml', 'wizard/room_booking_sign_wizard.xml', + 'wizard/room_booking_partner_create_wizard.xml', ], 'demo': [ 'demo/room_office.xml', diff --git a/room/controllers/main_room_yuthon.py b/room/controllers/main_room_yuthon.py index 736f880f9..a13463503 100644 --- a/room/controllers/main_room_yuthon.py +++ b/room/controllers/main_room_yuthon.py @@ -22,7 +22,7 @@ class Home(http.Controller): values = {k: v for k, v in request.params.items()} if not room_id: values['error'] = "缺少会议号" - response = request.render('website_form_room.website_form_room', values) + response = request.render('room.website_form_room', values) response.headers['X-Frame-Options'] = 'SAMEORIGIN' response.headers['Content-Security-Policy'] = "frame-ancestors 'self'" return response @@ -36,12 +36,15 @@ class Home(http.Controller): "sign_type": 'yes' }) values["message"] = "签到成功" - response = request.render('website_form_room.website_form_room', values) + response = request.render('room.website_form_room', values) response.headers['X-Frame-Options'] = 'SAMEORIGIN' response.headers['Content-Security-Policy'] = "frame-ancestors 'self'" return response values['room_id'] = int(room_id) + record = request.env['room.booking'].sudo().browse(values['room_id']) + new_partner = request.env["res.partner"].sudo().browse(record.other_company_id.id) + values['child_ids'] = new_partner.child_ids if request.httprequest.method == 'POST': try: record = request.env['room.booking'].sudo().browse(values['room_id']) @@ -58,7 +61,84 @@ class Home(http.Controller): values['error'] = "重复签到" else: values['error'] = "签到失败" - response = request.render('website_form_room.website_form_room', values) + response = request.render('room.website_form_room', values) response.headers['X-Frame-Options'] = 'SAMEORIGIN' response.headers['Content-Security-Policy'] = "frame-ancestors 'self'" return response + + @http.route('/web/room/partner/create', type='http', auth="none") + def web_room_partner_create(self, room_id=None, **kw): + ensure_db() + values = {k: v for k, v in request.params.items()} + if not (room_id or values['room_id']): + values['error'] = "缺少会议号" + response = request.render('room.partner_create_form_room', values) + response.headers['X-Frame-Options'] = 'SAMEORIGIN' + response.headers['Content-Security-Policy'] = "frame-ancestors 'self'" + return response + + values['room_id'] = int(room_id) + if request.httprequest.method == 'POST': + record = request.env['room.booking'].sudo().browse(values['room_id']) + other_company_id = record.other_company_id + if not record.other_company_id: + new_partner = request.env["res.partner"].sudo().create({ + "name": values.get("name", ""), + }) + record.other_company_id = new_partner.id + other_company_id = new_partner + # pass + values["message"] = values.get("name", "") + ": 创建成功,请继续添加人员!" + values["partner_id"] = int(other_company_id.id) + values["partner_name"] = other_company_id.name + values.pop("name", "") + response = request.render('room.partner_create_user_room', values) + response.headers['X-Frame-Options'] = 'SAMEORIGIN' + response.headers['Content-Security-Policy'] = "frame-ancestors 'self'" + return response + if values['room_id']: + record = request.env['room.booking'].sudo().browse(values['room_id']) + other_company_id = record.other_company_id + if record.other_company_id: + values["partner_id"] = int(other_company_id.id) + values["partner_name"] = other_company_id.name + values["message"] = other_company_id.name + ": 已存在,请继续添加人员!" + new_partner = request.env["res.partner"].sudo().browse(int(values['partner_id'])) + values["new_partner"] = new_partner.child_ids + response = request.render('room.partner_create_user_room', values) + response.headers['X-Frame-Options'] = 'SAMEORIGIN' + response.headers['Content-Security-Policy'] = "frame-ancestors 'self'" + return response + response = request.render('room.partner_create_form_room', values) + response.headers['X-Frame-Options'] = 'SAMEORIGIN' + response.headers['Content-Security-Policy'] = "frame-ancestors 'self'" + return response + + @http.route('/web/room/partner/user/create', type='http', auth="none") + def web_room_partner_user_create(self, **kw): + ensure_db() + values = {k: v for k, v in request.params.items()} + if request.httprequest.method == 'POST': + new_obj = request.env["res.partner"].sudo().create({ + "name": values.get("name", ""), + "type": "contact", + "parent_id": values['partner_id'] + }) + # pass + values["message"] = values.get("name", "") + ": 创建成功" + values["partner_id"] = int(values['partner_id']) + new_partner = request.env["res.partner"].sudo().browse(int(values['partner_id'])) + new_ids = new_partner.child_ids.ids + [new_obj.id] + # record = request.env['room.booking'].sudo().browse(values['room_id']) + # record.other_user_ids = new_ids + new_all_obj = request.env["res.partner"].sudo().search([("id", "in", new_ids)]) + values.pop("name", "") + values["new_partner"] = new_all_obj + response = request.render('room.partner_create_user_room', values) + response.headers['X-Frame-Options'] = 'SAMEORIGIN' + response.headers['Content-Security-Policy'] = "frame-ancestors 'self'" + return response + response = request.render('room.partner_create_form_room', values) + response.headers['X-Frame-Options'] = 'SAMEORIGIN' + response.headers['Content-Security-Policy'] = "frame-ancestors 'self'" + return response \ No newline at end of file diff --git a/room/models/room_booking.py b/room/models/room_booking.py index 0ec4000e0..13ddc601c 100644 --- a/room/models/room_booking.py +++ b/room/models/room_booking.py @@ -35,7 +35,8 @@ class RoomBooking(models.Model): employee_ids = fields.Many2many('hr.employee', string='人员范围') users_role_ids = fields.Many2many('soong.user.role', string='角色范围') room_users_ids = fields.Many2many('res.users', string="会议参加人员", compute="compute_room_users_ids", store=True) - other_user_ids = fields.Many2many('res.partner', string="外部人员") + other_company_id = fields.Many2one('res.partner', string="外部公司") + other_company_user_ids = fields.One2many(related="other_company_id.child_ids", string="外部人员") meeting_party_note = fields.Text(string="党之委会议纪要") meeting_party_document_ids = fields.One2many('party.document', 'room_booking_id', string="党之委会议文档") meeting_class_note = fields.Text(string="班子会议纪要") @@ -156,6 +157,27 @@ class RoomBooking(models.Model): } return action + def meeting_partner_create(self): + # 页面填写信息之后返回给地址 + code_url = self.get_base_url() + "/web/room/partner/create?room_id=" + str(self.id) + # 制作填写表单的地址 + qrcode_url = qrcode.make(code_url) + buffer = BytesIO() + qrcode_url.save(buffer, format='PNG') + qrcode_image = base64.b64encode(buffer.getvalue()).decode('utf-8') + # 返回给向导试图的字段 + action = { + 'type': 'ir.actions.act_window', + 'name': _("会议人员录入"), + 'res_model': 'room.booking.sign.wizard', + 'views': [(False, 'form')], + 'target': 'new', + 'context': { + 'default_qrcode_image': qrcode_image, + } + } + return action + def sync_room_get_attendee_list(self): for record in self: if record.wechat_meetingid and record.meeting_type == "up" and record.start_datetime < fields.Datetime.now() and record.stop_datetime > fields.Datetime.now(): diff --git a/room/models/room_room.py b/room/models/room_room.py index e121ceb5a..4f232b289 100644 --- a/room/models/room_room.py +++ b/room/models/room_room.py @@ -59,7 +59,6 @@ class Room(models.Model): self.description = html_content - @api.depends("room_booking_ids") def _compute_bookings_count(self): bookings_count_by_room = dict(self.env["room.booking"]._read_group( diff --git a/room/security/ir.model.access.csv b/room/security/ir.model.access.csv index 4174b62f5..5225235a1 100644 --- a/room/security/ir.model.access.csv +++ b/room/security/ir.model.access.csv @@ -10,4 +10,5 @@ access_party_document,party_document,model_party_document,base.group_user,1,1,1, access_class_document,class_document,model_class_document,base.group_user,1,1,1,1 access_boss_document,boss_document,model_boss_document,base.group_user,1,1,1,1 -access_room_booking_sign_wizard,room.booking.sign.wizard,model_room_booking_sign_wizard,,1,1,1,1 \ No newline at end of file +access_room_booking_sign_wizard,room.booking.sign.wizard,model_room_booking_sign_wizard,,1,1,1,1 +access_room_booking_partner_create_wizard,room.booking.partner.create.wizard,model_room_booking_partner_create_wizard,,1,1,1,1 diff --git a/room/views/room_booking_views.xml b/room/views/room_booking_views.xml index 8326463b3..d85bc7431 100644 --- a/room/views/room_booking_views.xml +++ b/room/views/room_booking_views.xml @@ -128,6 +128,8 @@ +