添加功能

This commit is contained in:
李鹏宇
2026-03-17 20:57:11 +08:00
parent 7d2231d601
commit f5192c7a40
8 changed files with 224 additions and 5 deletions
+1
View File
@@ -14,6 +14,7 @@
'report/hr_leave_batch_report_action.xml',
'views/inherit_hr_type_views.xml',
'views/inherit_hr_leave_allocation_views.xml',
'views/extended_vacation_approval_views.xml',
'views/inherit_hr_leave_accrual_plan_views.xml',
'views/hr_leave_accrual_views.xml',
'views/yuthon_fixes_approval_views.xml',
@@ -14,6 +14,13 @@
<field name="padding">4</field>
<field name="company_id" eval="False"/>
</record>
<record id="yuthon_extended_sequence" model="ir.sequence">
<field name="name">修正编号</field>
<field name="code">yuthon_extended_code</field>
<field name="prefix">JQYC</field>
<field name="padding">4</field>
<field name="company_id" eval="False"/>
</record>
<record id="yuthon_breastfeed_leave_sequence" model="ir.sequence">
<field name="name">哺乳编号</field>
<field name="code">yuthon_breastfeed_leave_code</field>
+2 -1
View File
@@ -4,4 +4,5 @@ from . import inherit_hr_leave
from . import inherit_hr_leave_accrual_plan
from . import yuthon_fixes_approval
from . import yuthon_holiday_setting
from . import yuthon_breastfeed_leave
from . import yuthon_breastfeed_leave
from . import extended_vacation_approval
@@ -0,0 +1,91 @@
# -*- coding: utf-8 -*-
from email.policy import default
from odoo import models, fields, api
class ExtendedVacationApproval(models.Model):
_name = 'extended.vacation.approval'
_description = '假期延长申请'
_inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
name = fields.Char(string="标题")
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('yuthon_extended_code'))
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门")
employee_ids = fields.Many2many('hr.employee', string="假期顺延人员")
type_vacations_ids = fields.Many2many('hr.leave.type', string="假期类型")
is_issues = fields.Boolean(string='是否上会')
issues_result = fields.Html(string="会议结果")
related_issues_id = fields.Many2one('issue.library', string="关联议题")
reason_application = fields.Text(string="申请事由")
documents_ids = fields.Many2many('ir.attachment', string="附件")
date_postponed = fields.Date(string="延期至")
active = fields.Boolean('Active', default=True, tracking=True)
remarks = fields.Text(string="备注")
work_end = fields.Boolean(string="结束")
urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度',
default='normal')
line_ids = fields.One2many('extended.vacation.line', 'vacation_id', string="延期假期")
def _get_default_name_title(self):
return self._description if self._description else self._name
name_title = fields.Char(default=_get_default_name_title)
self_users_ids = fields.Many2many('res.users', string="当前经办人", default=lambda self: [(6, 0, [self.env.user.id])])
@api.onchange('employee_ids')
def _onchange_employee_ids(self):
if not self.employee_ids:
self.line_ids = [(5, 0, 0)]
return
current_date = fields.Date.today()
target_date = fields.Date.to_date(f"{current_date.year}-{current_date.month}-01")
self.line_ids = [(5, 0, 0)]
line_values = []
for employee in self.employee_ids:
report_record = self.env['yuthon.vacation.reports'].search([
('employee_id', '=', employee.id.origin),
('vacation_date', '=', target_date)
], limit=1)
line_data = {
'employee_id': employee.id,
'dynamic_previous_year': report_record.dynamic_previous_year if report_record else 0.0,
'dynamic_previous_year1': report_record.dynamic_previous_year1 if report_record else 0.0,
}
line_values.append((0, 0, line_data))
self.line_ids = line_values
def end_approval(self):
current_date = fields.Date.today()
start_date = fields.Date.to_date(f"{current_date.year}-01-01")
end_date = fields.Date.to_date(f"{current_date.year}-{current_date.month}-01")
if self.employee_ids:
has_annual_leave = self.type_vacations_ids.filtered(lambda r: r.name == '年假')
has_overtime_leave = self.type_vacations_ids.filtered(lambda r: r.name == '加班')
for employee in self.employee_ids:
report_records = self.env['yuthon.vacation.reports'].search([
('employee_id', '=', employee.id.origin),
('vacation_date', '>=', start_date),
('vacation_date', '<=', end_date)
])
if report_records:
write_vals = {}
if has_annual_leave:
write_vals['valid_date'] = self.date_postponed
if has_overtime_leave:
write_vals['valid_date1'] = self.date_postponed
if write_vals:
report_records.write(write_vals)
for record in report_records:
record.update_line()
class ExtendedVacationLine(models.Model):
_name = 'extended.vacation.line'
_description = "假期延长明细"
vacation_id = fields.Many2one('extended.vacation.approval', string="假期延长")
employee_id = fields.Many2one('hr.employee', string="姓名")
dynamic_previous_year = fields.Float(string="上年年假剩余d", digits=(16, 3))
dynamic_previous_year1 = fields.Float(string="上年补休剩余d", digits=(16, 3))
+3 -1
View File
@@ -6,4 +6,6 @@ access_yuthon_fixes_wizard,yuthon_fixes_wizard,model_yuthon_fixes_wizard,base.gr
access_yuthon_holiday_setting,yuthon_holiday_setting,model_yuthon_holiday_setting,base.group_user,1,1,1,1
access_leave_allocation_wizard,leave_allocation_wizard,model_leave_allocation_wizard,base.group_user,1,1,1,1
access_yuthon_leave_wizard,yuthon_leave_wizard,model_yuthon_leave_wizard,base.group_user,1,1,1,1
access_yuthon_breastfeed_leave,yuthon_breastfeed_leave,model_yuthon_breastfeed_leave,base.group_user,1,1,1,1
access_yuthon_breastfeed_leave,yuthon_breastfeed_leave,model_yuthon_breastfeed_leave,base.group_user,1,1,1,1
access_extended_vacation_approval,extended_vacation_approval,model_extended_vacation_approval,base.group_user,1,1,1,1
access_extended_vacation_line,extended_vacation_line,model_extended_vacation_line,base.group_user,1,1,1,1
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
6 access_yuthon_holiday_setting yuthon_holiday_setting model_yuthon_holiday_setting base.group_user 1 1 1 1
7 access_leave_allocation_wizard leave_allocation_wizard model_leave_allocation_wizard base.group_user 1 1 1 1
8 access_yuthon_leave_wizard yuthon_leave_wizard model_yuthon_leave_wizard base.group_user 1 1 1 1
9 access_yuthon_breastfeed_leave yuthon_breastfeed_leave model_yuthon_breastfeed_leave base.group_user 1 1 1 1
10 access_extended_vacation_approval extended_vacation_approval model_extended_vacation_approval base.group_user 1 1 1 1
11 access_extended_vacation_line extended_vacation_line model_extended_vacation_line base.group_user 1 1 1 1
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8" ?>
<odoo>
<record id="view_extended_vacation_approval_tree" model="ir.ui.view">
<field name="name">extended.vacation.approval.tree</field>
<field name="model">extended.vacation.approval</field>
<field name="arch" type="xml">
<tree string="假期延长申请">
<field name="users_id"/>
<field name="department_id"/>
</tree>
</field>
</record>
<record id="view_extended_vacation_approval_form" model="ir.ui.view">
<field name="name">extended.vacation.approval.form</field>
<field name="model">extended.vacation.approval</field>
<field name="arch" type="xml">
<form string='假期延长审批' create="1">
<sheet>
<widget name="web_ribbon" title="普件" bg_color="text-bg-success"
invisible="urgency_level != 'normal'"/>
<widget name="web_ribbon" title="急件" bg_color="text-bg-warning"
invisible="urgency_level != 'urgent'"/>
<widget name="web_ribbon" title="特急" bg_color="text-bg-danger"
invisible="urgency_level != 'emergency'"/>
<group col="4">
<group>
<field name="code" string="流水号" readonly="1"/>
</group>
<group>
<field name="urgency_level" readonly="1"/>
</group>
<group>
<field name="is_issues"/>
</group>
<group>
<field name="related_issues_id" invisible="is_issues == False"/>
</group>
</group>
<div class="col-12 text-center">
<h1>
<field name="name_title" readonly="1"/>
</h1>
</div>
<group string="审批事项">
<group>
<field name="users_id"/>
<field name="type_vacations_ids" widget="many2many_tags"/>
<field name="department_id" invisible="1"/>
<field name="date_postponed"/>
<field name="employee_ids" widget="many2many_tags"/>
</group>
</group>
<group string="延长明细">
<field name="line_ids" string=" ">
<tree editable="bottom">
<field name="vacation_id" column_invisible="1"/>
<field name="employee_id"/>
<field name="dynamic_previous_year"/>
<field name="dynamic_previous_year1"/>
</tree>
</field>
</group>
<group>
<field name="reason_application"/>
<field name="work_end" invisible="1"/>
<field name="documents_ids" widget="preview_many2many"/>
</group>
</sheet>
</form>
</field>
</record>
</odoo>
@@ -1365,12 +1365,21 @@ class YuthonVacationReports(models.Model):
}
rec.write(inherit_vals)
current_date = fields.Date.today()
if last_month_record:
if last_month_record.valid_date and last_month_record.valid_date < current_date:
dynamic_previous_year_val = 0.0
else:
dynamic_previous_year_val = last_month_record.dynamic_previous_year
if last_month_record.valid_date1 and last_month_record.valid_date1 < current_date:
dynamic_previous_year1_val = 0.0
else:
dynamic_previous_year1_val = last_month_record.dynamic_previous_year1
inherit_vals = {
'leave': last_month_record.leave,
'dynamic_previous_year': last_month_record.dynamic_previous_year,
'dynamic_previous_year': dynamic_previous_year_val,
'dynamic_remainder_year': last_month_record.dynamic_remainder_year,
'dynamic_previous_year1': last_month_record.dynamic_previous_year1,
'dynamic_previous_year1': dynamic_previous_year1_val,
'this_year1': last_month_record.this_year1,
'working_overtime': last_month_record.working_overtime,
'medical_fee': last_month_record.medical_fee,
@@ -11,7 +11,7 @@ class PropertyStatementsWizard(models.Model):
_name = 'property.statements.wizard'
_description = '银行流水向导弹窗'
selection_bank = fields.Selection([('js', '建设银行'), ('gs', '工商银行'),('sh', '农商')], string="选择银行")
selection_bank = fields.Selection([('js', '建设银行'), ('gs', '工商银行'),('sh', '农商'), ('ms', '民生'), ('zc', '中城'), ('dj', '东进')], string="选择银行")
excel_file = fields.Binary(string="上传Excel表")
excel_name = fields.Char(string="文件名")
@@ -31,6 +31,12 @@ class PropertyStatementsWizard(models.Model):
self.property_bank_statements_gc_data(row)
elif self.selection_bank == 'sh':
self.property_bank_statements_sh_data(row)
elif self.selection_bank == 'ms':
self.property_bank_statements_ms_data(row)
elif self.selection_bank == 'zc':
self.property_bank_statements_zc_data(row)
elif self.selection_bank == 'dj':
self.property_bank_statements_dj_data(row)
def property_bank_statements_gc_data(self, row):
if row[0].value:
@@ -171,6 +177,31 @@ class PropertyStatementsWizard(models.Model):
elif original_amount:
self.env['property.bank.statements'].create(bank_data)
def property_bank_statements_ms_data(self, row):
if row[2].value:
start_time = datetime.strptime(row[2].value, '%Y-%m-%d %H:%M:%S')
else:
start_time = None
name = row[1].value
number = row[0].value
if row[3].value == "贷":
lending_direction = "loan"
elif row[3].value == "借":
lending_direction = "borrow"
name_account = row[4].value
bank_number = row[5].value
purpose = row[6].value
extract = row[7].value
remake = row[8].value
company_id = self.env['res.company'].search([('name', '=', '天河物管')], limit=1)
pass
def property_bank_statements_zc_data(self, row):
pass
def property_bank_statements_dj_data(self, row):
pass
def classify_by_last_four(self, input_str):
if not isinstance(input_str, str) or len(input_str) < 4: