From 5a582374f084f6ac7006d255b73ab35f9b220eef Mon Sep 17 00:00:00 2001 From: zhou <123@> Date: Thu, 17 Apr 2025 11:05:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../models/property_evaluation_plan.py | 5 +- yuthon_property/models/yuthon_property.py | 11 +- .../models/yuthon_resource_mgmt_config.py | 8 ++ yuthon_property/security/ir.model.access.csv | 3 +- yuthon_property/views/menuitem.xml | 3 + .../views/property_evaluation_plan_view.xml | 3 +- .../views/yuthon_property_views.xml | 5 +- .../yuthon_resource_mgmt_config_views.xml | 14 +++ .../wizard/evaluation_plan_wizard.py | 3 +- yuthon_property_approval/__manifest__.py | 1 + .../data/sale_renting_code_data.xml | 5 + yuthon_property_approval/models/__init__.py | 3 +- .../models/property_approval.py | 2 +- .../models/property_evaluate_application.py | 3 +- .../models/property_lease_contract.py | 6 +- .../models/property_meeting_approval.py | 104 ++++++++++++++++ .../models/property_record.py | 11 ++ .../models/property_rental_conditions.py | 4 +- .../security/ir.model.access.csv | 1 + .../static/others/property_template.xlsx | Bin 0 -> 9459 bytes .../property_evaluate_application_views.xml | 3 +- .../views/property_meeting_approval_views.xml | 114 ++++++++++++++++++ .../views/property_menu_all.xml | 7 +- .../views/property_record_views.xml | 3 + .../views/property_rental_conditions.xml | 2 +- .../wizard/property_add_wizard_views.xml | 4 +- .../models/inherit_hr_payroll_structure.py | 7 ++ .../models/yuthon_payroll_project.py | 2 +- .../inherit_hr_payroll_structure_views.xml | 9 +- 29 files changed, 309 insertions(+), 37 deletions(-) create mode 100644 yuthon_property_approval/models/property_meeting_approval.py create mode 100644 yuthon_property_approval/static/others/property_template.xlsx create mode 100644 yuthon_property_approval/views/property_meeting_approval_views.xml diff --git a/yuthon_property/models/property_evaluation_plan.py b/yuthon_property/models/property_evaluation_plan.py index 685f68747..44f0c8222 100644 --- a/yuthon_property/models/property_evaluation_plan.py +++ b/yuthon_property/models/property_evaluation_plan.py @@ -15,10 +15,7 @@ class PropertyEvaluationPlan(models.Model): registered_id = fields.Many2one('yuthon.purpose.evidence', string='证载用途') registered_id2 = fields.Many2one('yuthon.purpose.evidence', string='设定用途') rent_id = fields.Many2one('rent.free.setting', string="办法") - start_lease_period = fields.Selection(selection=[(str(i), str(i)) for i in range(1, 7)], string='租期开始', - default='1') - end_lease_period = fields.Selection(selection=[(str(i), str(i)) for i in range(1, 7)], string='租期结束', - default='6') + lease_period = fields.Integer(string='租赁期限(<=)') annual_increase_percentage = fields.Float(string='每年递增(%)', igits=(6, 2)) remake = fields.Text(string='备注') property_state = fields.Selection([('to', '待审批'), ('done', '已审批')], string="状态", default='to') diff --git a/yuthon_property/models/yuthon_property.py b/yuthon_property/models/yuthon_property.py index dae2b58c5..73823fca0 100644 --- a/yuthon_property/models/yuthon_property.py +++ b/yuthon_property/models/yuthon_property.py @@ -234,8 +234,7 @@ class YuthonProperty(models.Model): 'owner_id': record.title_information_ids[0].owner_id.id if record.title_information_ids else None, 'registered_id': record.title_information_ids[0].registered_id.id if record.title_information_ids else None, 'rent_id': record.reference_ids[0].rent_id.id if record.reference_ids else None, - 'start_lease_period': record.reference_ids[0].start_lease_period if record.reference_ids else None, - 'end_lease_period': record.reference_ids[0].end_lease_period if record.reference_ids else None, + 'lease_period': record.reference_ids[0].lease_period if record.reference_ids else None, 'annual_increase_percentage': record.reference_ids[0].annual_increase_percentage if record.reference_ids else None, 'assessment_category': 'rent_money', 'remake': record.remark, @@ -261,8 +260,7 @@ class YuthonProperty(models.Model): 'owner_id': record.title_information_ids[0].owner_id.id if record.title_information_ids else None, 'registered_id': record.title_information_ids[0].registered_id.id if record.title_information_ids else None, 'rent_id': record.reference_ids[0].rent_id.id if record.reference_ids else None, - 'start_lease_period': record.reference_ids[0].start_lease_period if record.reference_ids else None, - 'end_lease_period': record.reference_ids[0].end_lease_period if record.reference_ids else None, + 'lease_period': record.reference_ids[0].lease_period if record.reference_ids else None, 'annual_increase_percentage': record.reference_ids[0].annual_increase_percentage if record.reference_ids else None, 'assessment_category': 'rent_money', 'remake': record.remark, @@ -444,9 +442,8 @@ class YuthonReferenceConditions(models.Model): _description = '出租参考条件' yuthon_property_id = fields.Many2one('yuthon.property', string="关联物业信息") - rent_id = fields.Many2one('rent.free.setting', string="办法") - start_lease_period = fields.Selection(selection=[(str(i), str(i)) for i in range(1, 7)], string='租期开始', default='1') - end_lease_period = fields.Selection(selection=[(str(i), str(i)) for i in range(1, 7)], string='租期结束', default='6') + lease_period = fields.Integer(string='租赁期限(<=)') + rent_period = fields.Integer(string="免租期(<=)") annual_increase_percentage = fields.Float(string='每年递增(%)', igits=(6, 2)) class YuthonMajorEventLine(models.Model): diff --git a/yuthon_property/models/yuthon_resource_mgmt_config.py b/yuthon_property/models/yuthon_resource_mgmt_config.py index 582aad30b..a3b9e44e9 100644 --- a/yuthon_property/models/yuthon_resource_mgmt_config.py +++ b/yuthon_property/models/yuthon_resource_mgmt_config.py @@ -238,4 +238,12 @@ class EvaluationCompany(models.Model): _name = 'evaluation.company' _description = '评估公司配置' + name = fields.Char(string="名称") + + + +class AmountWay(models.Model): + _name = 'amount.way' + _description = '交易方式' + name = fields.Char(string="名称") \ No newline at end of file diff --git a/yuthon_property/security/ir.model.access.csv b/yuthon_property/security/ir.model.access.csv index 947d1c41b..3974ff8b3 100644 --- a/yuthon_property/security/ir.model.access.csv +++ b/yuthon_property/security/ir.model.access.csv @@ -86,4 +86,5 @@ access_yuthon_major_event_line,yuthon_major_event_line,model_yuthon_major_event_ access_property_floor_setting,property_floor_setting,model_property_floor_setting,base.group_user,1,1,1,1 access_property_evaluation_plan,property_evaluation_plan,model_property_evaluation_plan,base.group_user,1,1,1,1 access_evaluation_company,evaluation_company,model_evaluation_company,base.group_user,1,1,1,1 -access_evaluation_plan_wizard,evaluation_plan_wizard,model_evaluation_plan_wizard,base.group_user,1,1,1,1 \ No newline at end of file +access_evaluation_plan_wizard,evaluation_plan_wizard,model_evaluation_plan_wizard,base.group_user,1,1,1,1 +access_amount_way,amount_way,model_amount_way,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/yuthon_property/views/menuitem.xml b/yuthon_property/views/menuitem.xml index 0e164c833..bfbd8f658 100644 --- a/yuthon_property/views/menuitem.xml +++ b/yuthon_property/views/menuitem.xml @@ -314,6 +314,9 @@ action="action_feature_setting" sequence="90"/> + + - - + diff --git a/yuthon_property/views/yuthon_property_views.xml b/yuthon_property/views/yuthon_property_views.xml index a676e6a43..e8c10977c 100644 --- a/yuthon_property/views/yuthon_property_views.xml +++ b/yuthon_property/views/yuthon_property_views.xml @@ -197,9 +197,8 @@ - - - + + diff --git a/yuthon_property/views/yuthon_resource_mgmt_config_views.xml b/yuthon_property/views/yuthon_resource_mgmt_config_views.xml index 0dbadd927..6349919c7 100644 --- a/yuthon_property/views/yuthon_resource_mgmt_config_views.xml +++ b/yuthon_property/views/yuthon_resource_mgmt_config_views.xml @@ -383,4 +383,18 @@ evaluation.company tree + + amount.way.tree + amount.way + + + + + + + + 交易方式 + amount.way + tree + diff --git a/yuthon_property/wizard/evaluation_plan_wizard.py b/yuthon_property/wizard/evaluation_plan_wizard.py index c69d59be5..d50531a2c 100644 --- a/yuthon_property/wizard/evaluation_plan_wizard.py +++ b/yuthon_property/wizard/evaluation_plan_wizard.py @@ -24,8 +24,7 @@ class EvaluationPlanWizard(models.Model): 'owner_id': first_id.title_information_ids[0].owner_id.id if first_id.title_information_ids else None, 'registered_id': first_id.title_information_ids[0].registered_id.id if first_id.title_information_ids else None, 'rent_id': first_id.reference_ids[0].rent_id.id if first_id.reference_ids else None, - 'start_lease_period': first_id.reference_ids[0].start_lease_period if first_id.reference_ids else None, - 'end_lease_period': first_id.reference_ids[0].end_lease_period if first_id.reference_ids else None, + 'lease_period': first_id.reference_ids[0].lease_period if first_id.reference_ids else None, 'annual_increase_percentage': first_id.reference_ids[0].annual_increase_percentage if first_id.reference_ids else None, 'remake': first_id.remark, 'property_ids': self.property_ids.ids diff --git a/yuthon_property_approval/__manifest__.py b/yuthon_property_approval/__manifest__.py index d50f72ce9..5f941cae1 100644 --- a/yuthon_property_approval/__manifest__.py +++ b/yuthon_property_approval/__manifest__.py @@ -67,6 +67,7 @@ 'views/property_accounts_approval_views.xml', 'views/property_delegated_agent_views.xml', 'views/property_transaction_confirmed.xml', + 'views/property_meeting_approval_views.xml', 'wizard/property_add_wizard_views.xml', 'wizard/property_contract_wizard.xml', 'wizard/property_physical_wizard_views.xml', diff --git a/yuthon_property_approval/data/sale_renting_code_data.xml b/yuthon_property_approval/data/sale_renting_code_data.xml index 692c5c220..a99b714a9 100644 --- a/yuthon_property_approval/data/sale_renting_code_data.xml +++ b/yuthon_property_approval/data/sale_renting_code_data.xml @@ -304,4 +304,9 @@ property_claim_approval_code YW%(y)s%(month)s%(day)s + + 物业出租申报会议 + property_meeting_approval_code + HY%(y)s%(month)s%(day)s + \ No newline at end of file diff --git a/yuthon_property_approval/models/__init__.py b/yuthon_property_approval/models/__init__.py index 3dad2c3a9..de52fc969 100644 --- a/yuthon_property_approval/models/__init__.py +++ b/yuthon_property_approval/models/__init__.py @@ -53,4 +53,5 @@ from . import property_service_approval from . import property_engineering_approval from . import property_current_approval from . import property_accounts_approval -from . import inherit_property_tenant_information \ No newline at end of file +from . import inherit_property_tenant_information +from . import property_meeting_approval \ No newline at end of file diff --git a/yuthon_property_approval/models/property_approval.py b/yuthon_property_approval/models/property_approval.py index 804a16ee3..744eed38c 100644 --- a/yuthon_property_approval/models/property_approval.py +++ b/yuthon_property_approval/models/property_approval.py @@ -20,7 +20,7 @@ class PropertyApproval(models.Model): issues_result = fields.Html(string="会议结果") related_issues_id = fields.Many2one('issue.library', string="关联议题") property_documents_ids = fields.Many2many('documents.document', string="附件") - property_source = fields.Selection([('cut', '划入'), ('self', '自建'), + property_source = fields.Selection([('cut', '划拨'), ('self', '自建'), ('replace', '置换'), ('buy', '购入'), ('entrust', '委托'), ('Rent', '租入')], string='资产来源') property_massage_ids = fields.One2many('property.approval.line', 'property_approval_id', string="审批信息") diff --git a/yuthon_property_approval/models/property_evaluate_application.py b/yuthon_property_approval/models/property_evaluate_application.py index bccb5284e..187c86783 100644 --- a/yuthon_property_approval/models/property_evaluate_application.py +++ b/yuthon_property_approval/models/property_evaluate_application.py @@ -85,8 +85,7 @@ class YuhtonPropertyLine(models.Model): property_ids = fields.Many2many(related='property_evaluation_id.property_ids', string="物业信息") owner_id = fields.Many2one('yuthon.owner.message', related='property_evaluation_id.owner_id', string="权属人") assessment_category = fields.Selection(related='property_evaluation_id.assessment_category', string="评估类别") - start_lease_period = fields.Selection(related='property_evaluation_id.start_lease_period', string='租期开始') - end_lease_period = fields.Selection(related='property_evaluation_id.end_lease_period', string='租期结束') + lease_period = fields.Integer(related='property_evaluation_id.lease_period', string='租期期限(<=)') registered_id = fields.Many2one(related='property_evaluation_id.registered_id', string='证载用途') registered_id2 = fields.Many2one(related='property_evaluation_id.registered_id2', string='设定用途') annual_increase_percentage = fields.Float(related='property_evaluation_id.annual_increase_percentage', string='每年递增(%)', igits=(6, 2)) diff --git a/yuthon_property_approval/models/property_lease_contract.py b/yuthon_property_approval/models/property_lease_contract.py index c34cc95cc..853a260ba 100644 --- a/yuthon_property_approval/models/property_lease_contract.py +++ b/yuthon_property_approval/models/property_lease_contract.py @@ -1206,8 +1206,7 @@ class PropertyLeaseContract(models.Model): 'owner_id': first_address_id.title_information_ids[0].owner_id.id if first_address_id and first_address_id.title_information_ids else None, 'registered_id': first_address_id.title_information_ids[0].registered_id.id if first_address_id and first_address_id.title_information_ids else None, 'rent_id': first_address_id.reference_ids[0].rent_id.id if first_address_id and first_address_id.reference_ids else None, - 'start_lease_period': first_address_id.reference_ids[0].start_lease_period if first_address_id and first_address_id.reference_ids else None, - 'end_lease_period': first_address_id.reference_ids[0].end_lease_period if first_address_id and first_address_id.reference_ids else None, + 'lease_period': first_address_id.reference_ids[0].lease_period if first_address_id and first_address_id.reference_ids else None, 'annual_increase_percentage': first_address_id.reference_ids[0].annual_increase_percentage if first_address_id and first_address_id.reference_ids else None, 'remake': first_address_id.remark if first_address_id else None, 'assessment_category': 'rent_money', @@ -1238,8 +1237,7 @@ class PropertyLeaseContract(models.Model): 'owner_id': property_id.title_information_ids[0].owner_id.id if property_id.title_information_ids else None, 'registered_id': property_id.title_information_ids[0].registered_id.id if property_id.title_information_ids else None, 'rent_id': property_id.reference_ids[0].rent_id.id if property_id.reference_ids else None, - 'start_lease_period': property_id.reference_ids[0].start_lease_period if property_id.reference_ids else None, - 'end_lease_period': property_id.reference_ids[0].end_lease_period if property_id.reference_ids else None, + 'lease_period': property_id.reference_ids[0].lease_period if property_id.reference_ids else None, 'annual_increase_percentage': property_id.reference_ids[0].annual_increase_percentage if property_id.reference_ids else None, 'remake': property_id.remark, 'assessment_category': 'rent_money', diff --git a/yuthon_property_approval/models/property_meeting_approval.py b/yuthon_property_approval/models/property_meeting_approval.py new file mode 100644 index 000000000..3b679fd47 --- /dev/null +++ b/yuthon_property_approval/models/property_meeting_approval.py @@ -0,0 +1,104 @@ +from email.policy import default + +from odoo import models, fields, api, exceptions, _ +from odoo.exceptions import UserError, ValidationError + + +class PropertyMeetingApproval(models.Model): + _name = 'property.meeting.approval' + _inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin'] + _description = '物业出租申报会议审批表' + + name = fields.Char(string='标题') + reason = fields.Html(string="正文") + property_documents_ids = fields.Many2many('ir.attachment', string="附件") + property_id = fields.Many2one('yuthon.property', string="物业地址") + registered_id = fields.Many2one(related='property_id.registered_id', string='证载用途') + evaluation_area = fields.Float(related='property_id.rent_area', string='出租面积(m²)') + lease_expiration_date = fields.Date(string='租赁到期日') + lessee_id = fields.Many2one('property.tenant.information', string='原租户') + now_rent_price = fields.Float(related='property_id.rental_unit_price', string='现租价(元/m² •月)') + appraisal_price = fields.Float(string='评估价(元/m² •月)') + 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="部门") + code = fields.Char(string="编号", + default=lambda self: self.env['ir.sequence'].next_by_code('property_meeting_approval_code')) + urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度', + default='normal') + active = fields.Boolean('Active', default=True, tracking=True) + work_end = fields.Boolean(string="结束") + initial_low_area_price = fields.Float() # 初始底价 + low_area_price = fields.Float(string='底价(元/m² •月)', default=lambda self: self.appraisal_price) + low_price = fields.Float(string='底价(元/月)', compute='_compute_low_price', store=True) + lease_period = fields.Integer(string='租赁期限(<=)') + annual_increase_percentage = fields.Float(string='每年递增(%)', igits=(6, 2)) + rental_purposes = fields.Many2one('yuthon.rental.purpose', string="出租用途") + rent_period = fields.Integer(string="免租期(<=)") + amount_way = fields.Many2one('amount.way', string="交易方式") + initial_rent_period = fields.Integer(string="初始免租期(<=)") + initial_lease_period = fields.Integer(string="初始租赁期限(<=)") + initial_low_price = fields.Float(string='初始底价(元/月)') + is_issues = fields.Boolean(string='是否上会') + issues_result = fields.Html(string="会议结果") + related_issues_id = fields.Many2one('issue.library', string="关联议题") + rent_comparison = fields.Selection([('red', '红'), ('green',' 绿')] , string="免租期结果") + lease_comparison = fields.Selection([('red', '红'), ('green',' 绿')] , string="租赁期限结果") + end_comparison = fields.Selection([('red', '红'), ('green',' 绿')] , 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) + + @api.onchange('is_issues') + def _onchange_is_issues(self): + if self.is_issues: + issue_id = self.env['issue.library'].create({'name': self.name}) + self.related_issues_id = issue_id.id + workflow_record_id = self.env["soong.workflow.record"].search( + [("res_model", "=", self._name), ("res_id", "=", self.id)]) + self.env['issue.library.approval.line'].create({ + 'issue_library_id': issue_id.id, + 'workflow_record_id': workflow_record_id.id, + 'approval_type': workflow_record_id.workflow_id.id, + 'code': self.code, + 'approval_date': fields.Datetime.now(), + }) + + @api.onchange('rent_period') + def _onchange_rent_period(self): + if self.initial_rent_period == 0: + self.initial_rent_period = self.rent_period + else: + if self.rent_period > self.initial_rent_period: + self.rent_comparison = 'red' + elif self.rent_period < self.initial_rent_period: + self.rent_comparison = 'green' + + @api.onchange('lease_period') + def _onchange_lease_period(self): + if self.initial_lease_period == 0: + # 如果是第一次输入,记录初始值 + self.initial_lease_period = self.lease_period + else: + if self.lease_period > self.initial_lease_period: + self.lease_comparison = 'red' + elif self.lease_period < self.initial_lease_period: + self.lease_comparison = 'green' + + @api.onchange('low_area_price') + def _onchange_low_area_price(self): + if self.initial_low_area_price == 0: + # 如果是第一次输入,记录初始值 + self.initial_low_price = self.low_price + else: + if self.low_area_price > self.initial_low_price: + self.end_comparison = 'red' + elif self.low_area_price < self.initial_low_price: + self.end_comparison = 'green' + + + @api.depends('evaluation_area') + def _compute_low_price(self): + if self.evaluation_area and self.low_area_price: + self.low_price = self.evaluation_area * self.low_area_price \ No newline at end of file diff --git a/yuthon_property_approval/models/property_record.py b/yuthon_property_approval/models/property_record.py index 739ff4e76..ae05ee1e7 100644 --- a/yuthon_property_approval/models/property_record.py +++ b/yuthon_property_approval/models/property_record.py @@ -51,6 +51,17 @@ class PropertyRecord(models.Model): 'approval_date': fields.Datetime.now(), }) + def button_meeting(self): + property_record_ids = self.env["property.record"].browse( + self._context.get('active_ids', self._context.get('active_id'))) + form_id = self.env.ref('yuthon_property_approval.view_property_meeting_approval_form').id + return { + "type": "ir.actions.act_window", + "name": "物业出租申报会议审批表", + "res_model": "property.meeting.approval", + "views": [[form_id, "form"]], + } + class EvaluatedApplicationLine(models.Model): _name = 'evaluated.application.line' diff --git a/yuthon_property_approval/models/property_rental_conditions.py b/yuthon_property_approval/models/property_rental_conditions.py index bb6fb2649..af0c456f0 100644 --- a/yuthon_property_approval/models/property_rental_conditions.py +++ b/yuthon_property_approval/models/property_rental_conditions.py @@ -37,7 +37,7 @@ class NowRentalConditionsLine(models.Model): property_rental_conditions_id = fields.Many2one('property.rental.conditions', string='关联出租调整表') rental_price = fields.Float(string='租金底价(元/m²)') rental_price_month = fields.Float(string='租金底价(/m²)') - rental_year = fields.Char(string='租聘期限(年)') + lease_period = fields.Integer(string='租聘期限(<=)') increment_rate = fields.Char(string='每年递增率(%)') rental_use = fields.Many2one('yuthon.rental.purpose',string='出租用途') other = fields.Char(string='其他') @@ -50,7 +50,7 @@ class RentalConditionsLine(models.Model): property_rental_conditions_id = fields.Many2one('property.rental.conditions', string='关联出租调整表') new_rental_price = fields.Float(string='租金底价(元/m²)') new_rental_price_month = fields.Float(string='租金底价(/m²)') - new_rental_year = fields.Char(string='租聘期限(年)') + new_rental_year = fields.Integer(string='租聘期限(<=)') new_increment_rate = fields.Char(string='每年递增率(%)') new_rental_use = fields.Many2one('yuthon.rental.purpose', string='出租用途') new_other = fields.Char(string='其他') \ No newline at end of file diff --git a/yuthon_property_approval/security/ir.model.access.csv b/yuthon_property_approval/security/ir.model.access.csv index f9795e04d..138204f61 100644 --- a/yuthon_property_approval/security/ir.model.access.csv +++ b/yuthon_property_approval/security/ir.model.access.csv @@ -92,5 +92,6 @@ access_property_current_approval, property_current_approval,model_property_curre access_property_accounts_approval, property_accounts_approval,model_property_accounts_approval,base.group_user,1,1,1,1 access_yuthon_property_line,yuthon_property_line,model_yuthon_property_line,base.group_user,1,1,1,1 access_property_tenant_line, property_tenant_line,model_property_tenant_line,base.group_user,1,1,1,1 +access_property_meeting_approval,property_meeting_approval,model_property_meeting_approval,base.group_user,1,1,1,1 diff --git a/yuthon_property_approval/static/others/property_template.xlsx b/yuthon_property_approval/static/others/property_template.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..a658c70676d06f79b3b844b19a4d6a9aea1f052f GIT binary patch literal 9459 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 Z?B6*6iZW0?7b_Ylj|K*Wn - - + diff --git a/yuthon_property_approval/views/property_meeting_approval_views.xml b/yuthon_property_approval/views/property_meeting_approval_views.xml new file mode 100644 index 000000000..8f1c5200f --- /dev/null +++ b/yuthon_property_approval/views/property_meeting_approval_views.xml @@ -0,0 +1,114 @@ + + + + property.meeting.approval.tree + property.meeting.approval + + + + + + + + + + + + + + + + + + + + + + + + property.meeting.approval.form + property.meeting.approval + +
+ + + + + + + + + + + + + + + + + + +
+

+ +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ + 出租申报会议审批表 + property.meeting.approval + tree,form + +
+ + diff --git a/yuthon_property_approval/views/property_menu_all.xml b/yuthon_property_approval/views/property_menu_all.xml index 394926d66..fa0da81d4 100644 --- a/yuthon_property_approval/views/property_menu_all.xml +++ b/yuthon_property_approval/views/property_menu_all.xml @@ -166,7 +166,12 @@ name="备案申请" action="property_record_action" sequence="9"/> - + property.record
+
+
diff --git a/yuthon_property_approval/views/property_rental_conditions.xml b/yuthon_property_approval/views/property_rental_conditions.xml index 742585653..df7bd4b36 100644 --- a/yuthon_property_approval/views/property_rental_conditions.xml +++ b/yuthon_property_approval/views/property_rental_conditions.xml @@ -75,7 +75,7 @@ - + diff --git a/yuthon_property_approval/wizard/property_add_wizard_views.xml b/yuthon_property_approval/wizard/property_add_wizard_views.xml index 87179faa9..1edaae667 100644 --- a/yuthon_property_approval/wizard/property_add_wizard_views.xml +++ b/yuthon_property_approval/wizard/property_add_wizard_views.xml @@ -3,11 +3,11 @@ 物业模板 self - ... + /yuthon_property_approval/static/others/property_template.xlsx - 薪资物业合同 + 新增物业合同 property.add.wizard
diff --git a/yuthon_salary/models/inherit_hr_payroll_structure.py b/yuthon_salary/models/inherit_hr_payroll_structure.py index 6ecc23fe3..f024c7913 100644 --- a/yuthon_salary/models/inherit_hr_payroll_structure.py +++ b/yuthon_salary/models/inherit_hr_payroll_structure.py @@ -171,3 +171,10 @@ class HrPayrollStructure(models.Model): "view_mode": "form", "target": "new", } + + def delete_structure(self): + payroll_ids = self.env["hr.payroll.structure"].browse( + self._context.get('active_ids', self._context.get('active_id'))) + for payroll in payroll_ids: + for rule in payroll.rule_ids: + rule.sudo().unlink() \ No newline at end of file diff --git a/yuthon_salary/models/yuthon_payroll_project.py b/yuthon_salary/models/yuthon_payroll_project.py index b70974b5e..68c92e864 100644 --- a/yuthon_salary/models/yuthon_payroll_project.py +++ b/yuthon_salary/models/yuthon_payroll_project.py @@ -49,7 +49,7 @@ class YuthonPayrollCommon(models.Model): """ insurances_ids = self.env["yuthon.payroll.common"].browse(self._context.get('active_ids', self._context.get('active_id'))) for ins in insurances_ids: - for sal in self.env["hr.payroll.structure"].search(['company_id', '=', ins.company_id.id]): + for sal in self.env["hr.payroll.structure"].search([('company_id', '=', ins.company_id.id)]): if sal.id in ins.payroll_structure_ids.ids: continue rule_list = [] diff --git a/yuthon_salary/views/inherit_hr_payroll_structure_views.xml b/yuthon_salary/views/inherit_hr_payroll_structure_views.xml index 2d50d0b8c..cba38e241 100644 --- a/yuthon_salary/views/inherit_hr_payroll_structure_views.xml +++ b/yuthon_salary/views/inherit_hr_payroll_structure_views.xml @@ -120,10 +120,17 @@ action = model.action_yuthon_payroll_wizard() - 删除数据 + 选择删除工资项 code action = model.action_select_delete_wizard() + + 删除工资项 + + + code + action = model.delete_structure() + \ No newline at end of file