Merge pull request !185 from ljm/dev_ljm
This commit is contained in:
ljm
2024-09-05 15:48:48 +00:00
committed by Gitee
10 changed files with 220 additions and 9 deletions
+1
View File
@@ -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',
+83 -3
View File
@@ -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
+23 -1
View File
@@ -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():
-1
View File
@@ -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(
+2 -1
View File
@@ -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
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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
10 access_boss_document boss_document model_boss_document base.group_user 1 1 1 1
11 access_room_booking_sign_wizard room.booking.sign.wizard model_room_booking_sign_wizard 1 1 1 1
12 access_room_booking_partner_create_wizard room.booking.partner.create.wizard model_room_booking_partner_create_wizard 1 1 1 1
13
14
+5 -1
View File
@@ -128,6 +128,8 @@
<button name="meet_notice" string="会议通知" type="object" class="oe_highlight"/>
<button name="meeting_sign_in" string="签到" invisible="meeting_type != 'down'" type="object"
class="oe_highlight"/>
<button name="meeting_partner_create" string="录入" invisible="meeting_type != 'down'" type="object"
class="oe_highlight"/>
<button name="sync_wechat_room" string="同步企业微信" type="object" class="oe_highlight"/>
</header>
<div class="oe_title mb-3">
@@ -141,7 +143,9 @@
<field name="room_id"/>
<field name="stop_datetime" invisible="1"/>
<field name="start_datetime" string="Date" widget="daterange" options="{'end_date_field': 'stop_datetime'}"/>
<field name="other_user_ids" widget="many2many_tags"/>
<!-- <field name="other_user_ids" widget="many2many_tags"/>-->
<field name="other_company_user_ids" widget="many2many_tags" readonly="1"/>
</group>
<group>
<field name="organizer_id" widget="many2one_avatar_user"/>
+80 -2
View File
@@ -38,7 +38,7 @@
</xpath>
</template>
<template id="room.room" name="website form room">
<template id="room.website_form_room" name="website_form_room">
<t t-call="room.frontend_layout">
<div class="container py-5">
<form class="oe_website_form_room" role="form" t-attf-action="/web/room" method="post" onsubmit="this.action = '/web/room' + location.hash">
@@ -51,7 +51,12 @@
<div class="mb-3 field-name">
<label for="name" class="form-label">名字</label>
<input type="text" placeholder="名字" name="name" t-att-value="name" id="name" t-attf-class="form-control" required="required" autofocus="autofocus" autocapitalize="off"/>
<select name="name" class="profile_param form-select">
<t t-foreach="child_ids" t-as="c">
<option t-att-value="c.name"><t t-out="c.name"/></option>
</t>
</select>
<!-- <input type="text" placeholder="名字" name="name" t-att-value="name" id="name" t-attf-class="form-control" required="required" autofocus="autofocus" autocapitalize="off"/>-->
</div>
<!-- <div class="mb-3">-->
@@ -74,5 +79,78 @@
</div>
</t>
</template>
<template id="room.partner_create_form_room" name="partner_create_form_room">
<t t-call="room.frontend_layout">
<div class="container py-5">
<form class="oe_website_form_room" role="form" t-attf-action="/web/room/partner/create" method="post" onsubmit="this.action = '/web/room/partner/create' + location.hash">
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<div class="mb-3 field-room_id">
<label for="room_id" class="form-label">会议号</label>
<input type="text" placeholder="会议号" name="room_id" t-att-value="room_id" id="room_id" t-attf-class="form-control" readonly="readonly"/>
</div>
<div class="mb-3 field-name">
<label for="name" class="form-label">公司名称</label>
<input type="text" placeholder="名字" name="name" t-att-value="name" id="name" t-attf-class="form-control" required="required" autofocus="autofocus" autocapitalize="off"/>
</div>
<p class="alert alert-danger" t-if="error" role="alert">
<t t-esc="error"/>
</p>
<p class="alert alert-success" t-if="message" role="status">
<t t-esc="message"/>
</p>
<div t-attf-class="clearfix oe_login_buttons text-center gap-1 d-grid mb-1">
<button type="submit" class="btn btn-primary">提交</button>
</div>
</form>
</div>
</t>
</template>
<template id="room.partner_create_user_room" name="partner_create_user_room">
<t t-call="room.frontend_layout">
<div class="container py-5">
<form class="oe_website_form_room" role="form" t-attf-action="/web/room/partner/user/create" method="post" onsubmit="this.action = '/web/room/partner/user/create' + location.hash">
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<div class="mb-3 field-room_id">
<label for="room_id" class="form-label">会议号</label>
<input type="text" placeholder="会议号" name="room_id" t-att-value="room_id" id="room_id" t-attf-class="form-control" readonly="readonly"/>
</div>
<div class="mb-3 field-partner_id">
<label for="partner_id" class="form-label">公司ID</label>
<input type="text" placeholder="公司" name="partner_id" t-att-value="partner_id" id="partner_id" t-attf-class="form-control" readonly="readonly"/>
</div>
<div class="mb-3 field-partner_id">
<label for="partner_name" class="form-label">公司名称</label>
<input type="text" placeholder="公司" name="partner_name" t-att-value="partner_name" id="partner_name" t-attf-class="form-control" readonly="readonly"/>
</div>
<div class="mb-3 field-name">
<label for="name" class="form-label">人员名称</label>
<input type="text" placeholder="名字" name="name" t-att-value="name" id="name" t-attf-class="form-control" required="required" autofocus="autofocus" autocapitalize="off"/>
</div>
<p class="alert alert-danger" t-if="error" role="alert">
<t t-esc="error"/>
</p>
<p class="alert alert-success" t-if="message" role="status">
<t t-esc="message"/>
</p>
<div t-attf-class="clearfix oe_login_buttons text-center gap-1 d-grid mb-1">
<button type="submit" class="btn btn-primary">提交</button>
</div>
<t t-foreach="new_partner" t-as="p">
<label for="p_name" class="form-label">人员名称</label>
<input type="text" placeholder="名字" name="p_name" readonly="readonly" t-att-value="p.name" id="p_name" t-attf-class="form-control" />
</t>
</form>
</div>
</t>
</template>
</odoo>
+1
View File
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-
from . import room_booking_sign_wizard
from . import room_booking_partner_create_wizard
@@ -0,0 +1,11 @@
# -*- coding: utf-8 -*-
import datetime
import calendar
from odoo import models, api, fields, _
from odoo.exceptions import UserError
class RoombBookingPartnerCreateWizard(models.Model):
_name = "room.booking.partner.create.wizard"
qrcode_image = fields.Image(string='二维码')
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_room_booking_partner_create_wizard" model="ir.ui.view">
<field name="name">签到二维码</field>
<field name="model">room.booking.partner.create.wizard</field>
<field name="arch" type="xml">
<form create="false" edit="false" delete="false">
<div class="col-12 text-center">
<field name="qrcode_image" widget="image" readonly="1"/>
</div>
</form>
</field>
</record>
</odoo>