添加功能

This commit is contained in:
zhou
2025-02-25 18:44:17 +08:00
parent ad2334e2f8
commit 0f0bb6fbc0
12 changed files with 88 additions and 59 deletions
@@ -91,20 +91,22 @@ class HrAttendanceMonthDetail(models.Model):
('11', '11月份'),
('12', '12月份')
], string="考勤月份")
required_attendance_days = fields.Float(string="应出勤天数")
actual_attendance_days = fields.Float(string="实际出勤天数")
compensatory_leave = fields.Float(string="调休(小时)")
leave_of_absence = fields.Float(string="事假(小时)")
leave_of_sick = fields.Float(string="病假(天)")
statutory_leave = fields.Float(string="法定假(天)")
work_overtime = fields.Float(string="加班(小时)")
required_attendance_days = fields.Integer(string="应出勤天数")
actual_attendance_days = fields.Integer(string="实际出勤天数")
compensatory_leave = fields.Integer(string="调休(小时)")
leave_of_absence = fields.Integer(string="事假(小时)")
leave_of_sick = fields.Integer(string="病假(天)")
statutory_leave = fields.Integer(string="法定假(天)")
work_overtime = fields.Integer(string="加班(小时)")
entry_date = fields.Date(string="入职时间")
expected_date = fields.Date(string="离职日期")
# todo 需要什么字段往上加什么
# 打卡
come_late = fields.Float(string="迟到(次)")
is_early_card = fields.Float(string="早退(次)")
is_no_card = fields.Float(string="缺卡(次)")
come_late = fields.Integer(string="迟到")
is_early_card = fields.Integer(string="早退")
is_no_card = fields.Integer(string="缺卡")
# 假期
unpaid_leave = fields.Float(string="无薪假(小时)")
unpaid_leave = fields.Integer(string="无薪假(小时)")
note = fields.Char(string='备注')
@@ -352,3 +354,9 @@ class HrAttendanceMonthDetail(models.Model):
for record in self:
# 更新用户的考勤明细
record.analysis_attendance_month_detail()
def button_put(self):
pass
def button_all_put(self):
pass
@@ -66,7 +66,7 @@
<field name="department_id" optional="hide"/>
<field name="current_year" />
<field name="current_month" />
<field name="signature" widget="image" options='{"size": [80, 40]}' />
<field name="work_overtime" />
<!-- todo 需要什么字段往上加什么-->
<!-- 打卡-->
<field name="come_late"/>
@@ -75,9 +75,12 @@
<!-- 请假-->
<field name="unpaid_leave" />
<!-- 其他-->
<field name="note" optional="hide"/>
<field name="company_id" optional="hide"/>
<field name="entry_date"/>
<field name="expected_date"/>
<field name="note"/>
<field name="company_id"/>
<field name="state" widget="badge" decoration-info="state == 'unconfirmed'" decoration-success="state == 'confirmed'"/>
<button name="button_put" string="发送" type="object" class="oe_highlight"/>
</tree>
</field>
</record>
@@ -152,4 +155,11 @@
}
</field>
</record>
<record id="all_data_attendance_put_month" model="ir.actions.server">
<field name="name">批量发送</field>
<field name="model_id" ref="yuthon_hr_attendance.model_hr_attendance_month_detail"/>
<field name="binding_model_id" ref="yuthon_hr_attendance.model_hr_attendance_month_detail"/>
<field name="state">code</field>
<field name="code">action = model.button_all_put()</field>
</record>
</odoo>
@@ -217,16 +217,13 @@
<xpath expr="//field[@name='work_email']" position="attributes">
<attribute name="optional">hide</attribute>
</xpath>
<xpath expr="//field[@name='name']" position="after">
<field name="company_old"/>
</xpath>
<xpath expr="//field[@name='parent_id']" position="attributes">
<attribute name="string">上级单位</attribute>
</xpath>
<xpath expr="//field[@name='job_id']" position="after">
<field name="number" optional="hide"/>
<field name="yuthon_company" optional="hide"/>
<field name="use_user_type"/>
<field name="number"/>
<field name="user_number" optional="hide"/>
<field name="mobile_phone"/>
<field name="confirmation_date" optional="hide"/>
@@ -251,9 +248,6 @@
<field name="graduate_date" optional="hide"/>
<field name="graduate_school" optional="hide"/>
</xpath>
<xpath expr="//field[@name='name']" position="after">
<field name="number"/>
</xpath>
<xpath expr="//field[@name='first_contract_date']" position="attributes">
<attribute name="optional">hide</attribute>
</xpath>
+18 -33
View File
@@ -1,46 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="issue_meeting_minutes_report_template">
<template id="property_base_accounts_report_template">
<t t-call="web.basic_layout" t-foreach="docs" t-as="doc">
<div class="page">
<h1 style="text-align:center;">
<storng>
<t t-esc="doc.name"/>
<t t-esc="发票基本信息"/>
<br/>
<br/>
</storng>
</h1>
<h2 style="text-align:center;">
<storng>
<t t-esc="doc.computed_meeting_name"/>
</storng>
</h2>
<div style="text-indent: 4em;font-size: 24px;width: 900px;line-height: 2;" >
<t t-esc="doc.meeting_date.strftime('%Y年%m月%d日')" />,
<t t-if="doc.company_page == 'tz'">天河投资集团</t>
<t t-elif="doc.company_page == 'wg'">天河物管集团</t>
<t t-elif="doc.company_page == 'lc'">天河粮储集团</t>(下称“公司”)在
<t t-esc="doc.meeting_id.room_id.name"/>(下称“会议”),召开了本年度
第<t t-esc="doc.number_of_meetings"/>次<t t-esc="doc.meeting_type_id.name"/>,会议议题如下:<br/>
</div>
<div style="text-indent: 4em;font-size: 24px;width: 900px;line-height: 2;" >
<t t-set="chinese_digits" t-value="['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']"/>
<t t-set="counter" t-value="1"/>
<t t-foreach="doc.meeting_minutes_ids" t-as="dm">
<t t-esc="chinese_digits[counter]"/>、<t t-esc="dm.minutes_id.name"/>
<t t-set="counter" t-value="counter + 1" />
</t>
</div>
<div style="text-indent: 4em;font-size: 24px;width: 900px;line-height: 2;" >
<t t-set="chinese_digits" t-value="['零', '一', '二', '三', '四', '五', '六', '七', '八', '九']"/>
<t t-set="counter" t-value="1" />
<t t-foreach="doc.meeting_minutes_ids" t-as="dm">
<span t-if="counter != 1" style="display: inline-block; width: 4em;"></span>
<t t-esc="chinese_digits[counter]"/>、<t t-esc="dm.overview"/>
<br/>
<t t-set="counter" t-value="counter + 1" />
</t>
</div>
填表说明:
1、仅支持数电票的导入开具,不支持纸质发票批量导入开具;
2、发票流水号:纳税人自定义,长度不超过20位;发票流水号为导入开具区分发票的唯一标识,用于关联发票的明细信息、特定业务信息、附加要素信息;
3、发票类型:增值税专用发票、普通发票;
4、不支持差额开具和减按开具模式;
5、当开具的发票类型为增值税专用发票时,购买方纳税人识别号必填。当开具的发票类型为普票时,若购买方为企业的,购买方纳税人识别号必填。
6、所有内容输入均为文本格式输入;
7、若开具发票需要使用邮箱推送时:可填写购买方电子邮箱;
8、“放弃享受减按1%征收率原因”填写说明:您在2023年1月1日以后取得的适用3%征收率的应税销售收入,可减按1%征收率征收增值税。若您有特殊情况,需要开具其他发票,请在【放弃享受减按1%征收率原因】字段中选择相应原因(小规模纳税人开具增值税普通发票可不填写此项)。
9、含税标志: 在填写sheet页“2-发票明细信息”中,根据实际业务需要,当单价、金额为含税时,选择“是”,当单价、金额为不含税时,选择“否”。
10、开具除特定业务外的普通发票:1、如受票方(发票抬头)为自然人,请根据实际需要提供姓名或姓。如您的姓名为张某某,可在名称栏次填写:张某某、张先生或张女士;2、如受票方(发票抬头)为自然人,并要求能将发票归集在个人票夹中展示,需要提供姓名及身份证号码(自然人纳税人识别号);3、如受票方(发票抬头)为个体工商户,需提供统一社会信用代码或纳税人识别号,并在受票方自然人标识栏次选择“否”。
11、当“特定业务类型”为“农产品收购”、“光伏收购”、“报废产品收购”时,本模板中填写的“购买方名称”指实际的销售方名称,“购买方纳税人识别号”指实际的销售方纳税人识别号。
12、当“特定业务类型”为“农产品收购”、“报废产品收购”时,“购买方名称”、“购买方纳税人识别号”、“购买方证件类型”、“购买方证件号码”、“购买方国籍(或地区)”为必填项;当“特定业务类型”为“光伏收购”且“受票方自然人标识”为“是”时,“购买方名称”、“购买方纳税人识别号”、“购买方证件类型”、“购买方证件号码”、“购买方国籍(或地区)”为必填项。
13、当“特定业务类型”为““报废产品收购”时,购买方地址信息请填写在“购买方所在地区(报废产品收购必填)”列和“购买方详细地址(报废产品收购必填)”列,“购买方电话”为必填项。
14、当“特定业务类型”为“报废产品收购”且商品和服务编码包含“报废机动车”类(即1110700000000000000、1110701000000000000、1110702000000000000、1110799000000000000之一)时,本模版中“报废产品销售类型”为必填,请根据真实业务情况选择(如为向出售者收购其自用的报废机动车,选择“销售自己使用过的报废产品”,其他情形请选择“销售收购的报废产品”);开具非“报废机动车”类商品和服务编码无需填写。
15、当单张发票煤炭销售金额大于或等于1000万时,请在“每千克煤炭发热量(千卡)”、“干基全硫(%)(保留两位小数)”、“干燥无灰基挥发分(%)(保留两位小数)列填写具体信息;若单张发票煤炭销售金额小于1000万,则“每千克煤炭发热量(千卡)”、“干基全硫(%)(保留两位小数)”、“干燥无灰基挥发分(%)(保留两位小数)列无需填写。
</div>
</t>
</template>
+1 -1
View File
@@ -20,7 +20,7 @@ class YuthonNotice(models.Model):
start_date = fields.Date(string="生效日期", default=fields.Date.today())
end_date = fields.Date(string="终止日期")
sequence = fields.Integer(string="顺序", default=1, compute='_compute_sequence')
employee_ids = fields.Many2many('hr.employee', string="人员范围", default=lambda self: self.env.user.employee_id)
employee_ids = fields.Many2many('hr.employee', string="人员范围")
notice_state = fields.Selection([('no', '未发布'), ('yes', '已发布'), ('stop', '已终止')], default='no',
string="公告状态")
notice_documents_ids = fields.Many2many('ir.attachment', string="附件")
@@ -1,5 +1,5 @@
from odoo import models, fields, api
import xlwt
class PropertyAccountsReceivable(models.Model):
_name = 'property.accounts.receivable'
@@ -37,4 +37,20 @@ class PropertyAccountsReceivable(models.Model):
last_update_time = fields.Datetime(string='最后修改时间')
def unlink(self):
return super().unlink()
return super().unlink()
def report_button_xls(self):
workbook = xlwt.Workbook() # 创建一个工作簿
worksheet = workbook.add_sheet('Sheet1')
for record in self:
worksheet.write(1, 0, record.original_amount)
action = {
'type': 'ir.actions.act_url', # 表示将执行一个客户端动作。
'tag': 'self',
'context': dict({
'url': 'yuthon_property/static/others/property_bases_account.xlsx',
'module': 'yuthon_property', # 指定模块名称
'content_type': 'application/vnd.ms-excel'
}, **self._context)
}
return action
@@ -25,5 +25,8 @@ class PropertyBankStatements(models.Model):
def button_reconciliation(self):
pass
def button_all_reconciliation(self):
pass
def unlink(self):
return super().unlink()
@@ -44,4 +44,11 @@
<field name="res_model">property.accounts.receivable</field>
<field name="view_mode">tree</field>
</record>
<record id="all_property_accounts_receivable_contract" model="ir.actions.server">
<field name="name">批量导入合同</field>
<field name="model_id" ref="yuthon_property.model_property_accounts_receivable"/>
<field name="binding_model_id" ref="yuthon_property.model_property_accounts_receivable"/>
<field name="state">code</field>
<field name="code">action = model.report_button_xls()</field>
</record>
</odoo>
@@ -26,4 +26,11 @@
<field name="res_model">property.bank.statements</field>
<field name="view_mode">tree</field>
</record>
<record id="all_data_property_bank_statements" model="ir.actions.server">
<field name="name">批量对账</field>
<field name="model_id" ref="yuthon_property.model_property_bank_statements"/>
<field name="binding_model_id" ref="yuthon_property.model_property_bank_statements"/>
<field name="state">code</field>
<field name="code">action = model.action_yuthon_salary_wizard()</field>
</record>
</odoo>
@@ -27,8 +27,8 @@
<field name="lv_name" column_invisible="1"/>
</xpath>
<xpath expr="//field[@name='name']" position="after">
<field name="rank_salary" groups="yuthon_hr_employee.group_hr_employee_tt_user"/>
<field name="base_salary"/>
<field name="rank_salary" groups="yuthon_hr_employee.group_hr_employee_tt_user"/>
<field name="position_subsidy" groups="yuthon_hr_employee.group_hr_employee_lc_user"/>
<field name="performance_bonus" groups="yuthon_hr_employee.group_hr_employee_tt_user,yuthon_hr_employee.group_hr_employee_lc_user"/>
<field name="integrated_subsidy" groups="yuthon_hr_employee.group_hr_employee_wg_user"/>
@@ -85,7 +85,6 @@
<field name="name">全部</field>
<field name="res_model">hr.payroll.structure</field>
<field name="view_mode">tree,form,search</field>
<field name="context">{'search_default_group_lv_name': 1}</field>
</record>
<record id="all_paroll_write_salary" model="ir.actions.server">
<field name="name">批量更新职级类型</field>