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..a166448e4 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:
@@ -61,7 +63,7 @@ class RoomBooking(models.Model):
# odoo发通知
def meeting_sign_in(self):
# todo 需要写一个页面填写信息之后返回给地址
- code_url = "" # 制作填写表单的地址
+ code_url = "https://pengyuthon.com/contactus" # 制作填写表单的地址
qrcode_url = qrcode.make(code_url)
buffer = BytesIO()
qrcode_url.save(buffer, format='PNG')
@@ -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": [r.oauth_uid for r in record.room_users_ids]
+ },
+ }
+ )
+ 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": [r.oauth_uid for r in record.room_users_ids]
+ },
+ }
+ )
+ 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
diff --git a/room/wizard/room_booking_sign_wizard.xml b/room/wizard/room_booking_sign_wizard.xml
index d4e98be2c..ef109fafd 100644
--- a/room/wizard/room_booking_sign_wizard.xml
+++ b/room/wizard/room_booking_sign_wizard.xml
@@ -6,7 +6,7 @@
diff --git a/website_form_room/__init__.py b/website_form_room/__init__.py
new file mode 100644
index 000000000..e046e49fb
--- /dev/null
+++ b/website_form_room/__init__.py
@@ -0,0 +1 @@
+from . import controllers
diff --git a/website_form_room/__manifest__.py b/website_form_room/__manifest__.py
new file mode 100644
index 000000000..a62a8ec87
--- /dev/null
+++ b/website_form_room/__manifest__.py
@@ -0,0 +1,11 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+{
+ 'name': '会议表单',
+ 'version': '17.0',
+ 'depends': ['web'],
+ 'data': [
+ 'views/webclient_templates.xml',
+ ],
+}
diff --git a/website_form_room/controllers/__init__.py b/website_form_room/controllers/__init__.py
new file mode 100644
index 000000000..12a7e529b
--- /dev/null
+++ b/website_form_room/controllers/__init__.py
@@ -0,0 +1 @@
+from . import main
diff --git a/website_form_room/controllers/main.py b/website_form_room/controllers/main.py
new file mode 100644
index 000000000..240ecd61a
--- /dev/null
+++ b/website_form_room/controllers/main.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+# Part of Odoo. See LICENSE file for full copyright and licensing details.
+
+import json
+import logging
+
+
+import odoo
+import odoo.modules.registry
+from odoo import http
+from odoo.exceptions import AccessError
+from odoo.http import request
+from odoo.addons.web.controllers.utils import ensure_db
+
+_logger = logging.getLogger(__name__)
+
+
+class Home(http.Controller):
+ @http.route('/web/room', type='http', auth="none")
+ def web_login(self, room_id=None, **kw):
+ ensure_db()
+ values = {k: v for k, v in request.params.items()}
+
+ if not room_id:
+ values['error'] = "缺少会议号"
+ else:
+ values['room_id'] = int(room_id)
+ # record = request.env['room.booking'].sudo().browse(values['room_id'])
+ if request.httprequest.method == 'POST':
+ try:
+ # pass
+ values["message"] = "签到成功"
+ except odoo.exceptions.AccessDenied as e:
+ if e.args == odoo.exceptions.AccessDenied().args:
+ values['error'] = "重复签到"
+ else:
+ values['error'] = "签到失败"
+
+ response = request.render('website_form_room.website_form_room', values)
+ response.headers['X-Frame-Options'] = 'SAMEORIGIN'
+ response.headers['Content-Security-Policy'] = "frame-ancestors 'self'"
+ return response
diff --git a/website_form_room/static/description/icon.png b/website_form_room/static/description/icon.png
new file mode 100644
index 000000000..b7aaac75c
Binary files /dev/null and b/website_form_room/static/description/icon.png differ
diff --git a/website_form_room/views/webclient_templates.xml b/website_form_room/views/webclient_templates.xml
new file mode 100644
index 000000000..135d9bbf3
--- /dev/null
+++ b/website_form_room/views/webclient_templates.xml
@@ -0,0 +1,78 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/yuthon_hr_employee/models/hr_employee_page.py b/yuthon_hr_employee/models/hr_employee_page.py
index c7e2eb037..41b198132 100644
--- a/yuthon_hr_employee/models/hr_employee_page.py
+++ b/yuthon_hr_employee/models/hr_employee_page.py
@@ -36,6 +36,8 @@ class YuthonEducationExperienceLine(models.Model):
start_date = fields.Date(string="入学时间")
end_date = fields.Date(string="毕业时间")
professional = fields.Char(string="专业")
+ Part_time_degree = fields.Char(string="非全日制学历学位")
+ full_time_degree = fields.Char(string="全日制学历学位")
major_courses = fields.Char(string="主修课程")
diff --git a/yuthon_hr_employee/models/yuthon_hr_employee.py b/yuthon_hr_employee/models/yuthon_hr_employee.py
index dd06dc58f..75175eb8d 100644
--- a/yuthon_hr_employee/models/yuthon_hr_employee.py
+++ b/yuthon_hr_employee/models/yuthon_hr_employee.py
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
from odoo import api, fields, models
+from datetime import datetime
nation_list = [('a', '汉族'), ('b', '壮族'), ('v', '满族'), ('d', '回族'), ('e', '苗族'), ('f', '维吾尔族'),
('g', '土家族'), ('h', '彝族'), ('i', '蒙古族'), ('j', '藏族'), ('k', '布依族'), ('l', '侗族'),
@@ -22,25 +23,26 @@ class YuthonHrEmployee(models.Model):
# odoo里是这样做的,一个用户可以多个公司绑定多个员工,每个员工都有自己的部门和岗位
number = fields.Char(string="编号")
- use_user_type = fields.Selection([('formal', '正式工'), ('labor', '劳务派遣'),
- ('part_time', '兼职人员'), ('practice', '正式工')], string="用工形式")
+ use_user_type = fields.Selection([('formal', '正式职工'), ('labor', '劳务协议'),
+ ('part_time', '兼职协议'), ('employment', '兼职用工')], string="用工形式")
user_number = fields.Char(string="员工编号")
job_lv_id = fields.Many2one('yuthon.job.lv', string="最新职级")
# 个人信息
user_salary = fields.Float(string="基本工资")
job_lv_salary = fields.Float(string="职级工资")
- entry_time = fields.Datetime(string="入职时间")
- confirmation_time = fields.Datetime(string="转正时间")
- company_old = fields.Integer(string="司龄")
+ entry_date = fields.Date(string="入职时间")
+ confirmation_date = fields.Date(string="转正时间")
+ company_old = fields.Char(string="司龄", compute='_compute_company_old')
user_sex = fields.Selection([('girl', '女'), ('boy', '男')], string="性别")
user_number_start_time = fields.Date(string="身份中有效开始时间")
user_number_end_time = fields.Date(string="身份证有效到期时间")
nation = fields.Selection(nation_list, string="民族")
- old = fields.Integer(string="年龄")
+ old = fields.Integer(string="年龄", compute='_compute_birthday_old')
+ birthday_month = fields.Integer(string="生日月份", compute='_compute_birthday_old')
user_type = fields.Char(string="人员类别")
- retire_data = fields.Date(string="退休日期")
- retire_years = fields.Integer(string="离退休年限")
- political_aspects = fields.Selection([('dang', '党员'), ('people', '群众')], string="政治面貌")
+ retire_date = fields.Date(string="退休日期")
+ retire_years = fields.Integer(string="离退休年限", compute='_compute_retire_years')
+ political_aspects = fields.Selection([('cpc_dang', '中共党员'), ('nld', '民盟'), ('league_member', '共青团员'), ('people', '群众')], string="政治面貌")
dang_data = fields.Date(string="入团(党)时间")
user_origin = fields.Char(string="籍贯")
user_location = fields.Char(string="户口所在地")
@@ -57,7 +59,6 @@ class YuthonHrEmployee(models.Model):
cumulative_work_month = fields.Integer(string="累计工作月数")
cumulative_work_years = fields.Integer(string="累计工作年限")
# 教育
- full_degree = fields.Selection([('full', '全日制学历学位'), ('no_full', '非全日制学历学位')], string="学历学位")
high_degree = fields.Char(string="最高学历")
high_degree2 = fields.Char(string="最高学位")
graduate_school = fields.Char(string="毕业院校")
@@ -116,35 +117,44 @@ class YuthonHrEmployee(models.Model):
else:
social.social_insurance_time = False
+ @api.depends('entry_date')
+ def _compute_company_old(self):
+ """司龄计算"""
+ for record in self:
+ if record.entry_date:
+ today = datetime.now().date()
+ years_diff = today.year - record.entry_date.year
+ months_diff = today.month - record.entry_date.month
+ if today.month < record.entry_date.month:
+ years_diff -= 1
+ months_diff += 12
+ record.company_old = str(years_diff) + '年' + str(months_diff) + '月'
+ else:
+ record.company_old = None
+ @api.depends('birthday')
+ def _compute_birthday_old(self):
+ """生日月份 年龄 计算"""
+ for record in self:
+ if record.birthday:
+ today = datetime.now().date()
+ record.birthday_month = record.birthday.month
+ record.old = today.year - record.birthday.year
+ else:
+ record.birthday_month = 0
+ record.old = 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ @api.depends('retire_date')
+ def _compute_retire_years(self):
+ """离退休年限计算"""
+ for record in self:
+ if record.retire_date:
+ today = datetime.now().date()
+ years_diff = today.year - record.retire_date.year
+ compute = years_diff
+ if compute < 0:
+ record.retire_years = -1 * compute
+ else:
+ record.retire_years = 0
+ else:
+ record.retire_years = 0
diff --git a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
index 67c656a3b..186727826 100644
--- a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
+++ b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
@@ -49,8 +49,8 @@
-
-
+
+
@@ -60,10 +60,20 @@
-
+
+
+ 岁
+
+
+
+ 月
+
-
-
+
+
+
+ 年
+
@@ -72,26 +82,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -196,6 +189,8 @@
+
+
diff --git a/yuthon_hr_employee/wizard/hr_employee_wizard.py b/yuthon_hr_employee/wizard/hr_employee_wizard.py
index 8d7efccfb..500bdfe03 100644
--- a/yuthon_hr_employee/wizard/hr_employee_wizard.py
+++ b/yuthon_hr_employee/wizard/hr_employee_wizard.py
@@ -22,9 +22,11 @@ class YuthonHrEmployeeWizard(models.Model):
raise ValidationError('请上传文件。')
book = xlrd.open_workbook(file_contents=base64.decodebytes(self.excel_file))
sh = book.sheet_by_index(0)
+ sh2 = book.sheet_by_index(1)
+ sh3 = book.sheet_by_index(2)
for rx in range(1, sh.nrows):
row = sh.row(rx)
- self.employee_user_data(row)
+ self.employee_user_data(row, sh2, sh3)
return {
'name': '批量更新员工',
'type': 'ir.actions.act_window',
@@ -32,45 +34,75 @@ class YuthonHrEmployeeWizard(models.Model):
'res_model': 'hr.employee',
}
- def employee_user_data(self, row):
- employee_name = self.env['hr.employee'].search([('name', '=', row[0].value)])
- department_id = self.env['hr.department'].search([('name', '=', row[1].value.split('\\')[-1])])
- role_main = self.env['soong.user.role'].search([('name', '=', row[4].value)])
- job = self.env['hr.job'].search([('name', '=', row[7].value)])
- job_lv = self.env['yuthon.job.lv'].search([('name', '=', row[8].value)])
- parent_id = self.env['hr.employee'].search([('name', '=', row[9].value)])
- if role_main:
- role_list_id = role_main
- else:
- role_list_id = self.env['soong.user.role'].create({'name': row[4].value})
- if job:
- job_id = job
- else:
- job_id = self.env['hr.job'].create({'name': row[7].value})
- if job_lv:
- job_lv_id = job_lv
- else:
- job_lv_id = self.env['yuthon.job.lv'].create({'name': row[8].value})
- role_data = row[5].value
- role_list_ids = []
- for user in role_data.split(','):
- user_role = self.env['soong.user.role'].search([('name', '=', user)])
- if user_role:
- role_list_ids.append(user_role.id)
- else:
- new_user_role = self.env['soong.user.role'].create({'name': user})
- role_list_ids.append(new_user_role.id)
+ def employee_user_data(self, row, sh2, sh3):
+ employee_name = self.env['hr.employee'].search([('name', '=', row[4].value)])
+ use_user_type_dict = {'正式职工': 'formal', '劳务协议': 'labor', '兼职协议': 'part_time', '兼职用工': 'employment', '': ''}
+ use_user_type = use_user_type_dict[row[1].value]
+ job_lv_id = self.env['yuthon.job.lv'].search([('name', '=', row[9].value)])
+ marital_dict = {'单身': 'single', '已婚': 'married', '合法同居者': 'cohabitant', '丧偶': 'widower', '离异': 'divorced', '': ''}
+ marital = marital_dict[row[19].value]
+ political_aspects_dict = {'中共党员': 'cpc_dang', '民盟': 'nld', '共青团员': 'league_member', '群众': 'people', '': ''}
+ political_aspects = political_aspects_dict[row[26].value]
+
employee_data = {
- 'name': employee_name.name,
- 'department_id': department_id.id,
- 'user_sex': 'boy' if row[2].value == '男' else 'girl',
- 'birthday': datetime.strptime(row[3].value, '%Y-%m-%d').date() if len(row[3].value) != 0 else '',
- 'user_role_id': role_list_id,
- 'user_role_ids': role_list_ids,
- 'work_phone': row[6].value,
- 'job_id': job_id,
- 'job_lv_id': job_lv_id,
- 'parent_id': parent_id,
+ 'use_user_type': use_user_type if use_user_type else None, # 用工形式
+ 'marital': marital if marital else None, # 婚姻
+ 'user_type': row[23].value if row[23].value else None, # 人员类别
+ 'high_degree': row[30].value if row[30].value else None, # 最高学历
+ 'seniority_prize_pick_up_status': row[43].value if row[43].value else None, # 工龄相关年功奖领取情况
+ 'high_degree2': row[31].value if row[31].value else None, # 最高学位
+ 'new_start_contract_data': datetime.strptime(row[28].value, '%Y/%m/%d').date() if row[28].value else None, # 最新合同开始日期
+ 'political_aspects': political_aspects if political_aspects else None, # 政治面貌
+ 'birthday': datetime.strptime(row[20].value, '%Y/%m/%d').date() if row[20].value else None, # 出生年月
+ 'dang_data': datetime.strptime(row[27].value, '%Y/%m/%d').date() if row[27].value else None, # 入党(团)时间
+ 'retire_date': datetime.strptime(row[24].value, '%Y/%m/%d').date() if row[24].value else None, # 退休日期
+ 'new_end_contract_data': datetime.strptime(row[29].value, '%Y/%m/%d').date() if row[29].value else None, # 最新合同终止日期
+ 'job_lv_id': job_lv_id.id, # 最新职级 有几个没有
+ 'user_sex': 'boy' if row[18].value == '男' else 'girl', # 性别
+ 'nation': row[17].value if row[17].value else None, # 民族
+ 'identification_id': row[14].value if row[14].value else None, # 身份证号
+ 'entry_date': datetime.strptime(row[11].value, '%Y/%m/%d').date() if row[11].value else None, # 入职时间
+ 'confirmation_date': datetime.strptime(row[12].value, '%Y/%m/%d').date() if row[12].value else None, # 转正时间
+ 'user_number_start_time': datetime.strptime(row[15].value, '%Y/%m/%d').date() if row[15].value else None, # 身份证有效期开始时间
+ 'user_number_end_time': datetime.strptime(row[16].value, '%Y/%m/%d').date() if row[16].value else None, # 身份证有效期结束时间
+ 'mobile_phone': int(row[8].value) if row[8].value else None, # 手机号码
+ 'work_phone': int(row[7].value) if row[7].value else None, # 办公电话
+ 'user_number': row[3].value if row[3].value else None, # 员工编号
}
if employee_name:
employee_name.write(employee_data)
+
+ # 处理教育经历
+ for rx in range(1, sh2.nrows):
+ row2 = sh2.row(rx)
+ if row2[0].value == row[4].value:
+ existing_education = employee_name.education_experience_ids.filtered(lambda e: e.name_school == row2[1].value)
+ education_data = {
+ 'name_school': row2[1].value if row2[1].value else None, # 学校名称
+ 'end_date': datetime.strptime(row2[2].value, '%Y/%m/%d').date() if row2[2].value else None, # 毕业时间
+ 'professional': row2[3].value if row2[3].value else None, # 专业
+ 'Part_time_degree': row2[4].value if row2[4].value else None, # 非全日制学历学位
+ 'full_time_degree': row2[5].value if row2[5].value else None, # 全日制学历学位
+ }
+ if existing_education:
+ existing_education.write(education_data)
+ else:
+ employee_name.write({
+ 'education_experience_ids': [(0, 0, education_data)]
+ })
+
+ # 处理技能证书
+ for rx in range(1, sh3.nrows):
+ row3 = sh3.row(rx)
+ if row3[0].value == row[4].value:
+ existing_certificate = employee_name.skills_certificates_ids.filtered(lambda s: s.rank_name == row3[1].value)
+ certificate_data = {
+ 'rank_name': row3[1].value if row3[1].value else None, # 职级名称
+ 'rank_time': datetime.strptime(row3[2].value, '%Y/%m/%d').date() if row3[2].value else None, # 职级时间
+ }
+ if existing_certificate:
+ existing_certificate.write(certificate_data)
+ else:
+ employee_name.write({
+ 'skills_certificates_ids': [(0, 0, certificate_data)]
+ })
diff --git a/yuthon_issue/__manifest__.py b/yuthon_issue/__manifest__.py
index fa7cae1dd..2ac78637e 100644
--- a/yuthon_issue/__manifest__.py
+++ b/yuthon_issue/__manifest__.py
@@ -20,6 +20,7 @@
'views/issue_approval_class_views.xml',
'views/issue_approval_boss_views.xml',
'views/inherit_room_booking_views.xml',
+ 'views/menus.xml',
],
'installable': True,
'application': True,
diff --git a/yuthon_issue/models/issue_library.py b/yuthon_issue/models/issue_library.py
index dfdbe0105..69dece85a 100644
--- a/yuthon_issue/models/issue_library.py
+++ b/yuthon_issue/models/issue_library.py
@@ -15,8 +15,14 @@ class IssueLibrary(models.Model):
statu = fields.Selection([('draft', '草稿'), ('approval', '审批中'), ('done', '已通过'), ('stop', '已拒绝'),
('will', '待上会'), ('on_meet', '已上会'), ('cancel', '已取消')], default='draft', string="议题状态")
is_party = fields.Boolean(string="党之委会")
+ is_party_pass = fields.Boolean(string="通过")
+ is_party_note = fields.Text(string="不通过意见")
is_class = fields.Boolean(string="班子会")
+ is_class_pass = fields.Boolean(string="通过")
+ is_class_note = fields.Text(string="不通过意见")
is_boss = fields.Boolean(string="董事会")
+ is_boss_pass = fields.Boolean(string="通过")
+ is_boss_note = fields.Text(string="不通过意见")
is_note = fields.Boolean(string="备案、核准")
creart_datetime = fields.Datetime(string="创建时间", default=fields.Datetime.now)
notice_documents_ids = fields.Many2many('documents.document', string="议题管理文件")
diff --git a/yuthon_issue/security/ir.model.access.csv b/yuthon_issue/security/ir.model.access.csv
index a2fc9712b..d1f18eba3 100644
--- a/yuthon_issue/security/ir.model.access.csv
+++ b/yuthon_issue/security/ir.model.access.csv
@@ -1,3 +1,6 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_issue_library,issue_library,model_issue_library,base.group_user,1,1,1,1
+access_issue_approval_boss,issue_approval_boss,model_issue_approval_boss,base.group_user,1,1,1,1
+access_issue_approval_class,issue_approval_class,model_issue_approval_class,base.group_user,1,1,1,1
+access_issue_approval_party,issue_approval_party,model_issue_approval_party,base.group_user,1,1,1,1
diff --git a/yuthon_issue/views/issue_approval_boss_views.xml b/yuthon_issue/views/issue_approval_boss_views.xml
index 8d37acbbe..8507b392e 100644
--- a/yuthon_issue/views/issue_approval_boss_views.xml
+++ b/yuthon_issue/views/issue_approval_boss_views.xml
@@ -60,16 +60,10 @@
- 党总支议题审批
+ 董事会议题审批
issue.approval.boss
tree,form
-
-
+
\ No newline at end of file
diff --git a/yuthon_issue/views/issue_approval_class_views.xml b/yuthon_issue/views/issue_approval_class_views.xml
index bb78ca39d..4cfb88eea 100644
--- a/yuthon_issue/views/issue_approval_class_views.xml
+++ b/yuthon_issue/views/issue_approval_class_views.xml
@@ -60,16 +60,10 @@
- 党总支议题审批
+ 领导班子议题审批
issue.approval.class
tree,form
-
-
+
\ No newline at end of file
diff --git a/yuthon_issue/views/issue_approval_party_views.xml b/yuthon_issue/views/issue_approval_party_views.xml
index c8d7af591..78ffd365e 100644
--- a/yuthon_issue/views/issue_approval_party_views.xml
+++ b/yuthon_issue/views/issue_approval_party_views.xml
@@ -66,10 +66,5 @@
-
+
\ No newline at end of file
diff --git a/yuthon_issue/views/issue_library_views.xml b/yuthon_issue/views/issue_library_views.xml
index 0b1112e04..f889ecf14 100644
--- a/yuthon_issue/views/issue_library_views.xml
+++ b/yuthon_issue/views/issue_library_views.xml
@@ -11,8 +11,11 @@
+
+
+
@@ -21,6 +24,110 @@
+ issue.library.tree
+ issue.library
+
+
+
+
+
+
+ issue.library.search
+ issue.library
+
+
+
+
+
+
+
+
+
+
+
+
+ 议题库
+ issue.library
+ tree,form
+
+
+
+
+ 待上会
+ issue.library
+ tree,form
+ [('statu','=','will')]
+
+
+
+ 已上会
+ issue.library
+ tree,form
+ [('statu','=','on_meet')]
+
+
+
+
+ issue.library.tree
+ issue.library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
issue.library.tree
issue.library
@@ -65,41 +172,34 @@
-
- issue.library.search
- issue.library
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
议题库
issue.library
tree,form
-
+
-
+
+
待上会
issue.library
tree,form
[('statu','=','will')]
+
-
+
+
已上会
issue.library
tree,form
[('statu','=','on_meet')]
+
@@ -109,41 +209,4 @@
code
action = model.all_meeting_issue()
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/yuthon_issue/views/issue_type_views.xml b/yuthon_issue/views/issue_type_views.xml
index 830a75533..69ad8c9a1 100644
--- a/yuthon_issue/views/issue_type_views.xml
+++ b/yuthon_issue/views/issue_type_views.xml
@@ -17,10 +17,10 @@
tree
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yuthon_issue/views/menus.xml b/yuthon_issue/views/menus.xml
new file mode 100644
index 000000000..eca8b842a
--- /dev/null
+++ b/yuthon_issue/views/menus.xml
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/yuthon_res_partner/__init__.py b/yuthon_res_partner/__init__.py
deleted file mode 100644
index cde864bae..000000000
--- a/yuthon_res_partner/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from . import models
diff --git a/yuthon_res_partner/__manifest__.py b/yuthon_res_partner/__manifest__.py
deleted file mode 100644
index 9800f7161..000000000
--- a/yuthon_res_partner/__manifest__.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- coding: utf-8 -*-
-{
- 'name': "Yuthon Res Partner",
- 'summary': "联系人承租方",
- 'description': """
-
- """,
- 'author': 'pengyuthon',
- 'website': 'https://www.pengyuthon.com',
- 'category': 'Human Resources/Attendances',
- 'version': '0.1',
- 'license': 'LGPL-3',
- 'depends': ['base', 'account', 'contacts'],
- 'data': [
- 'security/ir.model.access.csv',
- 'views/yuthon_res_partner_views.xml',
- 'views/contacts_inherit_menu_views.xml',
- ],
- 'installable': True,
- 'application': True,
-}
-
diff --git a/yuthon_res_partner/models/__init__.py b/yuthon_res_partner/models/__init__.py
deleted file mode 100644
index c005a0071..000000000
--- a/yuthon_res_partner/models/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from . import yuthon_res_partner
diff --git a/yuthon_res_partner/security/ir.model.access.csv b/yuthon_res_partner/security/ir.model.access.csv
deleted file mode 100644
index d7595f820..000000000
--- a/yuthon_res_partner/security/ir.model.access.csv
+++ /dev/null
@@ -1,4 +0,0 @@
-id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
-
-
-
diff --git a/yuthon_res_partner/static/description/icon.svg b/yuthon_res_partner/static/description/icon.svg
deleted file mode 100644
index 21ce0f24e..000000000
--- a/yuthon_res_partner/static/description/icon.svg
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/yuthon_sale_renting/__manifest__.py b/yuthon_sale_renting/__manifest__.py
index 23ba12ad3..ba30b1dc5 100644
--- a/yuthon_sale_renting/__manifest__.py
+++ b/yuthon_sale_renting/__manifest__.py
@@ -10,10 +10,12 @@
'category': 'Human Resources/Attendances',
'version': '0.1',
'license': 'LGPL-3',
- 'depends': ['sale_renting', 'mail', 'documents', 'soong_workflow'],
+ 'depends': ['sale_renting', 'mail', 'documents', 'soong_workflow', 'contacts'],
'data': [
'data/sale_renting_code_data.xml',
'security/ir.model.access.csv',
+ 'views/contacts_inherit_menu_views.xml',
+ 'views/yuthon_res_partner_views.xml',
'views/property_assess_views.xml',
'views/property_confirm_views.xml',
'views/property_move_views.xml',
diff --git a/yuthon_sale_renting/models/__init__.py b/yuthon_sale_renting/models/__init__.py
index 8a812b92d..87362a99a 100644
--- a/yuthon_sale_renting/models/__init__.py
+++ b/yuthon_sale_renting/models/__init__.py
@@ -1,5 +1,6 @@
# -*- coding: utf-8 -*-
+from . import yuthon_res_partner
from . import yuthon_product_template
from . import property_assess
from . import property_confirm
diff --git a/yuthon_res_partner/models/yuthon_res_partner.py b/yuthon_sale_renting/models/yuthon_res_partner.py
similarity index 100%
rename from yuthon_res_partner/models/yuthon_res_partner.py
rename to yuthon_sale_renting/models/yuthon_res_partner.py
diff --git a/yuthon_res_partner/views/contacts_inherit_menu_views.xml b/yuthon_sale_renting/views/contacts_inherit_menu_views.xml
similarity index 100%
rename from yuthon_res_partner/views/contacts_inherit_menu_views.xml
rename to yuthon_sale_renting/views/contacts_inherit_menu_views.xml
diff --git a/yuthon_res_partner/views/yuthon_res_partner_views.xml b/yuthon_sale_renting/views/yuthon_res_partner_views.xml
similarity index 100%
rename from yuthon_res_partner/views/yuthon_res_partner_views.xml
rename to yuthon_sale_renting/views/yuthon_res_partner_views.xml
diff --git a/序列号生成器/序列号.py b/序列号生成器/序列号.py
index 1fff5b110..132a85d8a 100644
--- a/序列号生成器/序列号.py
+++ b/序列号生成器/序列号.py
@@ -39,7 +39,7 @@ def rsaDecrypt(str1):
return con
-str1 = rsaEncrypt("base#2099-04-18 23:59:59")
+str1 = rsaEncrypt("base#2030-04-18 23:59:59")
print("加密后密文:\n%s" % str1)
# content = rsaDecrypt('16E01254F15E539CF5B734A9A6FB3649640709796F06F5167CB5BFE542210596CE920CBFDB5E22E863983682DC326C421EF896A9D8E2CAC6B9226E89F502FDD7')
# print("解密后明文:\n%s" % content)