From 4a287aaa5f622583a898ccdebdb89e7394164244 Mon Sep 17 00:00:00 2001
From: ONION <2275333053@qq.com>
Date: Fri, 16 Aug 2024 18:31:22 +0800
Subject: [PATCH 1/8] =?UTF-8?q?=E5=AD=97=E6=AE=B5=E4=BF=AE=E6=94=B9employe?=
=?UTF-8?q?e?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
yuthon_hr_employee/models/yuthon_hr_employee.py | 10 +++++-----
.../views/yuthon_hr_employee_views.xml | 17 +++++++++--------
2 files changed, 14 insertions(+), 13 deletions(-)
diff --git a/yuthon_hr_employee/models/yuthon_hr_employee.py b/yuthon_hr_employee/models/yuthon_hr_employee.py
index dd06dc58f..9d32371f8 100644
--- a/yuthon_hr_employee/models/yuthon_hr_employee.py
+++ b/yuthon_hr_employee/models/yuthon_hr_employee.py
@@ -22,15 +22,15 @@ 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="转正时间")
+ entry_date = fields.Date(string="入职时间")
+ confirmation_date = fields.Date(string="转正时间")
company_old = fields.Integer(string="司龄")
user_sex = fields.Selection([('girl', '女'), ('boy', '男')], string="性别")
user_number_start_time = fields.Date(string="身份中有效开始时间")
@@ -40,7 +40,7 @@ class YuthonHrEmployee(models.Model):
user_type = fields.Char(string="人员类别")
retire_data = fields.Date(string="退休日期")
retire_years = fields.Integer(string="离退休年限")
- political_aspects = fields.Selection([('dang', '党员'), ('people', '群众')], string="政治面貌")
+ 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="户口所在地")
diff --git a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
index 67c656a3b..2cb51c890 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 @@
-
-
+
+
@@ -86,12 +86,13 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
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 2/8] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E4=BC=81=E4=B8=9A?=
=?UTF-8?q?=E5=BE=AE=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
From f447d3cc4929d147a304dfce8e1242ec6d736edb Mon Sep 17 00:00:00 2001
From: soong
Date: Mon, 19 Aug 2024 08:28:35 +0800
Subject: [PATCH 3/8] =?UTF-8?q?[ADD]=20=E5=A2=9E=E5=8A=A0=E4=BC=9A?=
=?UTF-8?q?=E8=AE=AE=E8=A1=A8=E5=8D=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
website_form_room/__init__.py | 1 +
website_form_room/__manifest__.py | 11 +++
website_form_room/controllers/__init__.py | 1 +
website_form_room/controllers/main.py | 42 ++++++++++
website_form_room/static/description/icon.png | Bin 0 -> 2329 bytes
.../views/webclient_templates.xml | 78 ++++++++++++++++++
6 files changed, 133 insertions(+)
create mode 100644 website_form_room/__init__.py
create mode 100644 website_form_room/__manifest__.py
create mode 100644 website_form_room/controllers/__init__.py
create mode 100644 website_form_room/controllers/main.py
create mode 100644 website_form_room/static/description/icon.png
create mode 100644 website_form_room/views/webclient_templates.xml
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 0000000000000000000000000000000000000000..b7aaac75c2d3f1b84c4d84c26abb29d310f54364
GIT binary patch
literal 2329
zcmV+!3Fh{RP)FsL5N!$BqR``X(b+@4>SmncxfD7
z5N(x|2gDOi-~k~7DR-%D8VAHhqNoWe_e-4$A+;rG+$N13+v{PzO(N3J>~(f$9nVjS
ztUBY?-T%(_pa0D407xVfi9{liNF)-8L?Vd}1SFRHFP+1e^>IUexu_aDzu#0l4gsQo
z#1bY1VLu1iox4dh)Ds(y=66GYNI@*vaI6S~kS-=h%fed?K$IT#eisCUELkhic*HDK
zJBXqlT%pNGK{eWWmoO>F6DD`@Aefx?OWP!%RbNI52sAK^A;mcQK$%1*`
zC~D>POpJrzA78#w^*uySQ@jWbYmLGQ7rx;LN}%`TX6*?#pQ(C58jsB3HRvM>*$%1Ub-AUuB6$DM3mde|FjHujzlar48sVYm><>8O$5Dv6V
zjn=QX)DBxUs=6M6CO!v=hLFWThyvtsyGAjnGV04EtO|QV7GoZwTyNK;s(Q#m67OQZ
z5$KwR1-e~>suAS>=@~GTxu%dz+%r{Cve3lK^Cs?hTErI=VA!rrRS3d_K;IY=;v0X$
zg1hpHU87Ym2=fgTqlc9$9mF!O6pJ6(HCokzY#1!C`;y{NQ!m5?hJ$i>WZr5@|hF0_x{;cn%SyCBKlsbpe*F39O@YcPdJA^cJL?C5QE
zqu>(mg5(UXkIifLC-&w-zbFf94!s~4RxkUUn)q_K3X<4=sf$q9YW{(gQ;B`E=|u08
z4k3VIFcVLMcrs)l*2k
zZCWdEz*i43O&nY=_UNXs?3-=@A1pC(p<*yHYSGvUobW7&c|reT;*QbTKb`h7G>#ie
zZv;%-Q~0yOQ^_(%O%8m+A^nM1p)=dr;CN(W?lc$g8nyARYOV
zHsW+>+;}9{5eX9qc!9SVh-*O>MoK#HMW-l=&6ErJ22oVuNgQy}a5~-%0pLmyk0$O2
zg63>7<)Wu)GAbtSH~d-Q*hAvIQyW!w7egqJVTjG`SUNOr9Gp8ufNTY^P-@WjlegEr
z4FTb(hhTkYVjP0dxO~cGK8Xt#!wi2xih(%lAvj5BUL*n3!&Lu2ny&5u!LU+&=&QCG
zSBp(vu|t|;X83ynLc~@O_N@XLZ?A-U{tRe8TQ5bU
zAm`sY3gvtO0wgomrgcKdIPnnI3-w+>6R-LDQ%7y{Kb?l(`v!vY6%2oyK>!YNh+(@Q
zl^2U9?i4Ix6MctZ_T*2%5e$E!`o>ah1cD~_+_|;cI!+mWKTelXx5LWoJ!qL=8{^`1Y_GK{`
zQQ(X+eV&ULNb%gHIW#Vwodger7XGYob;rl|&TLeH;GWs_zyUOIx4z+&wYN5#KMuj|
zJI$heV=1nt--}Pzje?=HvTnj<*0**f9f%kRdJ0atI2amZ`0I{>7>H+2U~B3rrsp27
ze+Qa){PedFH0ruKxaz?>SMrtl@FyT|tb{L2|Gj4UuTC*Bu7e2SYa3ARsk#HCq%^bpEaUVuX7~$H3}l5V7h&Pg3NFLg#B({F
zs>QoqLb+z}CQ%@uaOvgWh*%weuzXe{}+?lW(04`h>q
zU$_T7ZU4osgqlZlU*;>k!k)&4PD`?^o5QC`!8N)~j
z4}Vq!@{D2rncDGuyueZ!?ML5;gcv}l41;XW4(|wcIl(P~KNem8@ZnT!>g*n7HresH4*7FKv5DWf
z%!9e$#KhoZH$a6D+H>mJ{+q|MuitxZIZ=xnl)29uUkU7$r4qRhDhMHUJ$e7TyOmtF
zCtzQpr4nt<4(}2_qHuwblN_>d+;gBjed*c&eZ};RN)rPSdiad#D}{-H*tuVufFF?$
ze^v-R>%{bx*Y3u=g3}mWe5De?pA{-ZfZ0ULdm$-Nkp)vlxFf%7~FBMNBf99f{
zudwjfREc?GB_e;sANtDVT@N&~aB+oa!YecUSy54^k}mZX6ln6;uE=cP;YCFqf@%5+
zo1bDmBW)OKBDp3mkw_#Gi9{liNF)-8WHs>zQ`DPOOtls_00000NkvXXu0mjff?H3D
literal 0
HcmV?d00001
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
From 31ef7f47f6fc3bea1ff64f2086bc5b3096b3fcf2 Mon Sep 17 00:00:00 2001
From: ONION <2275333053@qq.com>
Date: Mon, 19 Aug 2024 14:13:02 +0800
Subject: [PATCH 4/8] =?UTF-8?q?=E5=AD=97=E6=AE=B5=E4=BF=AE=E6=94=B9employe?=
=?UTF-8?q?e=202.0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
yuthon_hr_employee/models/hr_employee_page.py | 2 +
.../models/yuthon_hr_employee.py | 80 +++++++++++--------
.../views/yuthon_hr_employee_views.xml | 23 +-----
3 files changed, 51 insertions(+), 54 deletions(-)
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 9d32371f8..73aa1bbc8 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', '侗族'),
@@ -31,15 +32,16 @@ class YuthonHrEmployee(models.Model):
job_lv_salary = fields.Float(string="职级工资")
entry_date = fields.Date(string="入职时间")
confirmation_date = fields.Date(string="转正时间")
- company_old = fields.Integer(string="司龄")
+ company_old = fields.Integer(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="离退休年限")
+ 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="籍贯")
@@ -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 = years_diff * 12 + months_diff
+ else:
+ record.company_old = 0
+ @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 2cb51c890..820188aac 100644
--- a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
+++ b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
@@ -61,8 +61,9 @@
+
-
+
@@ -72,27 +73,9 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -197,6 +180,8 @@
+
+
From 9762cfe90b20433b4fe824b427a5d9fc9c6f7ba6 Mon Sep 17 00:00:00 2001
From: ONION <2275333053@qq.com>
Date: Mon, 19 Aug 2024 14:22:07 +0800
Subject: [PATCH 5/8] =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?=E5=91=98=E5=B7=A5=E6=96=B9=E6=B3=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../wizard/hr_employee_wizard.py | 110 +++++++++++-------
1 file changed, 71 insertions(+), 39 deletions(-)
diff --git a/yuthon_hr_employee/wizard/hr_employee_wizard.py b/yuthon_hr_employee/wizard/hr_employee_wizard.py
index 8d7efccfb..7675d7a69 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': row[8].value if row[8].value else None, # 手机号码
+ 'work_phone': 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)]
+ })
From 7f5fbbc05826be9f8af3c80fbb138d40c21bffac Mon Sep 17 00:00:00 2001
From: Onion-Jasper <13426750698@163.com>
Date: Mon, 19 Aug 2024 14:54:19 +0800
Subject: [PATCH 6/8] =?UTF-8?q?8=E6=9C=8819=E6=97=A5=EF=BC=8C=E6=96=B0?=
=?UTF-8?q?=E5=BB=BA=E5=AD=90=E9=83=A8=E9=97=A8=E8=AE=AE=E9=A2=98=E7=AE=A1?=
=?UTF-8?q?=E7=90=86=E8=8F=9C=E5=8D=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../views/issue_approval_boss_views.xml | 2 +-
.../views/issue_approval_class_views.xml | 2 +-
yuthon_issue/views/issue_library_views.xml | 148 ++++++++++++++++--
3 files changed, 137 insertions(+), 15 deletions(-)
diff --git a/yuthon_issue/views/issue_approval_boss_views.xml b/yuthon_issue/views/issue_approval_boss_views.xml
index 8d37acbbe..be06b77ce 100644
--- a/yuthon_issue/views/issue_approval_boss_views.xml
+++ b/yuthon_issue/views/issue_approval_boss_views.xml
@@ -60,7 +60,7 @@
- 党总支议题审批
+ 董事会议题审批
issue.approval.boss
tree,form
diff --git a/yuthon_issue/views/issue_approval_class_views.xml b/yuthon_issue/views/issue_approval_class_views.xml
index bb78ca39d..5487e05c5 100644
--- a/yuthon_issue/views/issue_approval_class_views.xml
+++ b/yuthon_issue/views/issue_approval_class_views.xml
@@ -60,7 +60,7 @@
- 党总支议题审批
+ 领导班子议题审批
issue.approval.class
tree,form
diff --git a/yuthon_issue/views/issue_library_views.xml b/yuthon_issue/views/issue_library_views.xml
index 0b1112e04..cf0583fe1 100644
--- a/yuthon_issue/views/issue_library_views.xml
+++ b/yuthon_issue/views/issue_library_views.xml
@@ -75,18 +75,109 @@
-
-
-
+
+
+
- 议题库
+ 待上会
+ issue.library
+ tree,form
+
+
+
+
+
+ issue.library.tree
+ issue.library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ issue.library.tree
+ issue.library
+
+
+
+
+
+
+ issue.library.search
+ issue.library
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 已上会
issue.library
tree,form
+
+ {'search_default_group_by_statu': 'on_meet'}
@@ -111,10 +202,10 @@
+ id="tianhe_issue_library_menu_root"
+ name="议题管理"
+ web_icon="yuthon_issue,static/description/icon.png"
+ sequence="1"/>
+ sequence="20"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ sequence="9"/>
\ No newline at end of file
From 82d0974539de483138e347bb427d17c03fd2889b Mon Sep 17 00:00:00 2001
From: ONION <2275333053@qq.com>
Date: Mon, 19 Aug 2024 15:45:15 +0800
Subject: [PATCH 7/8] =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=8D=95=E4=BD=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
yuthon_hr_employee/models/yuthon_hr_employee.py | 6 +++---
.../views/yuthon_hr_employee_views.xml | 15 ++++++++++++---
yuthon_hr_employee/wizard/hr_employee_wizard.py | 4 ++--
3 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/yuthon_hr_employee/models/yuthon_hr_employee.py b/yuthon_hr_employee/models/yuthon_hr_employee.py
index 73aa1bbc8..75175eb8d 100644
--- a/yuthon_hr_employee/models/yuthon_hr_employee.py
+++ b/yuthon_hr_employee/models/yuthon_hr_employee.py
@@ -32,7 +32,7 @@ class YuthonHrEmployee(models.Model):
job_lv_salary = fields.Float(string="职级工资")
entry_date = fields.Date(string="入职时间")
confirmation_date = fields.Date(string="转正时间")
- company_old = fields.Integer(string="司龄", compute='_compute_company_old')
+ 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="身份证有效到期时间")
@@ -128,9 +128,9 @@ class YuthonHrEmployee(models.Model):
if today.month < record.entry_date.month:
years_diff -= 1
months_diff += 12
- record.company_old = years_diff * 12 + months_diff
+ record.company_old = str(years_diff) + '年' + str(months_diff) + '月'
else:
- record.company_old = 0
+ record.company_old = None
@api.depends('birthday')
def _compute_birthday_old(self):
diff --git a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
index 820188aac..186727826 100644
--- a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
+++ b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
@@ -60,11 +60,20 @@
-
-
+
+
+ 岁
+
+
+
+ 月
+
-
+
+
+ 年
+
diff --git a/yuthon_hr_employee/wizard/hr_employee_wizard.py b/yuthon_hr_employee/wizard/hr_employee_wizard.py
index 7675d7a69..500bdfe03 100644
--- a/yuthon_hr_employee/wizard/hr_employee_wizard.py
+++ b/yuthon_hr_employee/wizard/hr_employee_wizard.py
@@ -65,8 +65,8 @@ class YuthonHrEmployeeWizard(models.Model):
'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': row[8].value if row[8].value else None, # 手机号码
- 'work_phone': row[7].value if row[7].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:
From 1be44202dee8855ea439ade6dd38057c1ec288ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=9D=8E=E9=B9=8F=E5=AE=87?=
Date: Mon, 19 Aug 2024 16:25:09 +0800
Subject: [PATCH 8/8] =?UTF-8?q?ljm=20=E4=BC=9A=E8=AE=AE=E4=BA=8C=E7=BB=B4?=
=?UTF-8?q?=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
room/models/room_booking.py | 8 +-
room/wizard/room_booking_sign_wizard.xml | 2 +-
yuthon_issue/__manifest__.py | 1 +
yuthon_issue/models/issue_library.py | 6 +
yuthon_issue/security/ir.model.access.csv | 3 +
.../views/issue_approval_boss_views.xml | 8 +-
.../views/issue_approval_class_views.xml | 8 +-
.../views/issue_approval_party_views.xml | 7 +-
yuthon_issue/views/issue_library_views.xml | 135 +++++-------------
yuthon_issue/views/issue_type_views.xml | 12 +-
yuthon_issue/views/menus.xml | 87 +++++++++++
yuthon_res_partner/__init__.py | 3 -
yuthon_res_partner/__manifest__.py | 22 ---
yuthon_res_partner/models/__init__.py | 3 -
.../security/ir.model.access.csv | 4 -
.../static/description/icon.svg | 1 -
yuthon_sale_renting/__manifest__.py | 4 +-
yuthon_sale_renting/models/__init__.py | 1 +
.../models/yuthon_res_partner.py | 0
.../views/contacts_inherit_menu_views.xml | 0
.../views/yuthon_res_partner_views.xml | 0
序列号生成器/序列号.py | 2 +-
22 files changed, 154 insertions(+), 163 deletions(-)
create mode 100644 yuthon_issue/views/menus.xml
delete mode 100644 yuthon_res_partner/__init__.py
delete mode 100644 yuthon_res_partner/__manifest__.py
delete mode 100644 yuthon_res_partner/models/__init__.py
delete mode 100644 yuthon_res_partner/security/ir.model.access.csv
delete mode 100644 yuthon_res_partner/static/description/icon.svg
rename {yuthon_res_partner => yuthon_sale_renting}/models/yuthon_res_partner.py (100%)
rename {yuthon_res_partner => yuthon_sale_renting}/views/contacts_inherit_menu_views.xml (100%)
rename {yuthon_res_partner => yuthon_sale_renting}/views/yuthon_res_partner_views.xml (100%)
diff --git a/room/models/room_booking.py b/room/models/room_booking.py
index d6feb6d38..a166448e4 100644
--- a/room/models/room_booking.py
+++ b/room/models/room_booking.py
@@ -63,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')
@@ -134,7 +134,7 @@ class RoomBooking(models.Model):
kwargs={
"location": record.room_id.name,
"invitees": {
- "userid": record.room_users_ids.oauth_uid
+ "userid": [r.oauth_uid for r in record.room_users_ids]
},
}
)
@@ -148,10 +148,10 @@ class RoomBooking(models.Model):
kwargs={
"title": title,
"meeting_start": meeting_start,
- "meeting_duration" :meeting_duration,
+ "meeting_duration":meeting_duration,
"location": record.room_id.name,
"invitees": {
- "userid": record.room_users_ids.oauth_uid
+ "userid": [r.oauth_uid for r in record.room_users_ids]
},
}
)
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/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 be06b77ce..8507b392e 100644
--- a/yuthon_issue/views/issue_approval_boss_views.xml
+++ b/yuthon_issue/views/issue_approval_boss_views.xml
@@ -63,13 +63,7 @@
董事会议题审批
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 5487e05c5..4cfb88eea 100644
--- a/yuthon_issue/views/issue_approval_class_views.xml
+++ b/yuthon_issue/views/issue_approval_class_views.xml
@@ -63,13 +63,7 @@
领导班子议题审批
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 cf0583fe1..f889ecf14 100644
--- a/yuthon_issue/views/issue_library_views.xml
+++ b/yuthon_issue/views/issue_library_views.xml
@@ -11,8 +11,11 @@
+
+
+
@@ -40,11 +43,17 @@
+
+
+
+
+
+
@@ -75,21 +84,32 @@
-
-
-
- 待上会
- issue.library
- tree,form
-
+ 议题库
+ issue.library
+ tree,form
+
+
+ 待上会
+ issue.library
+ tree,form
+ [('statu','=','will')]
+
+
+ 已上会
+ issue.library
+ tree,form
+ [('statu','=','on_meet')]
+
+
+
issue.library.tree
issue.library
@@ -152,45 +172,34 @@
-
- issue.library.search
- issue.library
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 已上会
+ 议题库
issue.library
tree,form
- {'search_default_group_by_statu': 'on_meet'}
-
-
+
+
待上会
issue.library
tree,form
[('statu','=','will')]
+
-
+
+
已上会
issue.library
tree,form
[('statu','=','on_meet')]
+
@@ -200,72 +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)