@@ -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',
|
||||
|
||||
@@ -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
|
||||
@@ -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():
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
|
@@ -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"/>
|
||||
|
||||
@@ -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,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>
|
||||
Reference in New Issue
Block a user