From 12650f8a5969b557ceaff02cba6f35947563ab8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E5=81=A5=E6=98=8E?= Date: Sun, 18 Aug 2024 21:28:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=BC=81=E4=B8=9A=E5=BE=AE?= =?UTF-8?q?=E4=BF=A1=E4=BC=9A=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- room/__manifest__.py | 2 +- room/models/room_booking.py | 50 ++++++++++++++++++++++++++++++++++++- 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/room/__manifest__.py b/room/__manifest__.py index 25522f044..43b68f973 100644 --- a/room/__manifest__.py +++ b/room/__manifest__.py @@ -7,7 +7,7 @@ 'description': 'Experience the Ease of Booking Meeting Rooms with Real-Time Availability Display.', 'category': 'Services/Room', 'version': '1.0', - 'depends': ['mail', 'hr', 'documents'], + 'depends': ['mail', 'hr', 'documents', 'yuthon_wechat'], 'data': [ 'data/message_template_views.xml', 'views/room_booking_views.xml', diff --git a/room/models/room_booking.py b/room/models/room_booking.py index bf88722f3..d6feb6d38 100644 --- a/room/models/room_booking.py +++ b/room/models/room_booking.py @@ -4,7 +4,7 @@ import qrcode import base64 from io import BytesIO from odoo import api, fields, models, _ -from odoo.exceptions import ValidationError +from odoo.exceptions import ValidationError, UserError class RoomBooking(models.Model): @@ -34,6 +34,8 @@ class RoomBooking(models.Model): meeting_boss_document_ids = fields.One2many('boss.document', 'room_booking_id', string="董事会议文档") meeting_sing_ids = fields.One2many('room.meeting.sign', 'room_booking_id', string="签到详情") meeting_data = fields.Html(string="会议说明") + wechat_meetingid = fields.Char("企业微信会议室ID") + def meet_notice(self): if self.is_notice: @@ -111,13 +113,58 @@ class RoomBooking(models.Model): # Notify frontend views of new bookings for room, bookings in bookings.grouped("room_id").items(): room._notify_booking_view("create", bookings) + # wechat 创建会议 + for record in bookings: + record.sync_wechat_room() return bookings + @api.model + def sync_wechat_room(self): + for record in self: + admin_userid = record.organizer_id.oauth_uid + title = record.name + meeting_start = record.start_datetime.timestamp() + meeting_duration = record.stop_datetime.timestamp() - record.start_datetime.timestamp() + if not record.wechat_meetingid: + create_result, create_data = self.sudo().env["wecom.apps"].sync_meeting_create( + admin_userid=admin_userid, + title=title, + meeting_start=meeting_start, + meeting_duration=meeting_duration, + kwargs={ + "location": record.room_id.name, + "invitees": { + "userid": record.room_users_ids.oauth_uid + }, + } + ) + if create_result: + record.wechat_meetingid = create_data.get("meetingid", "") + if not create_result: + raise UserError("同步企业微信会议失败:{0}".format(str(create_data))) + if record.wechat_meetingid: + update_result, update_data = self.sudo().env["wecom.apps"].sync_meeting_update( + meetingid=record.wechat_meetingid, + kwargs={ + "title": title, + "meeting_start": meeting_start, + "meeting_duration" :meeting_duration, + "location": record.room_id.name, + "invitees": { + "userid": record.room_users_ids.oauth_uid + }, + } + ) + if not update_result: + raise UserError("更新企业微信会议失败:{0}".format(str(update_data))) + def unlink(self): # Notify frontend of deleted bookings bookings_by_room = self.grouped("room_id") for room, bookings in bookings_by_room.items(): room._notify_booking_view("delete", bookings) + if self.wechat_meetingid: + self.sudo().env["wecom.apps"].sync_meeting_cancel(meetingid=self.wechat_meetingid) return super(RoomBooking, self).unlink() def write(self, vals): @@ -132,6 +179,7 @@ class RoomBooking(models.Model): elif {"name", "start_datetime", "stop_datetime"} & vals.keys(): for room, bookings in bookings_by_room.items(): room._notify_booking_view("update", bookings) + self.sync_wechat_room() return res @api.model