diff --git a/yuthon_property/views/menuitem.xml b/yuthon_property/views/menuitem.xml index 27795ee36..207775e02 100644 --- a/yuthon_property/views/menuitem.xml +++ b/yuthon_property/views/menuitem.xml @@ -121,25 +121,25 @@ parent="yuthon_property_archives_setting_meu" action="yuthon_property_approval.action_property_meter_water"/> - - - - + + + + + + + + + + + + + + + + + + + - diff --git a/yuthon_property_approval/views/property_menu_all.xml b/yuthon_property_approval/views/property_menu_all.xml index 2518aedaa..6fbd83760 100644 --- a/yuthon_property_approval/views/property_menu_all.xml +++ b/yuthon_property_approval/views/property_menu_all.xml @@ -337,45 +337,45 @@ parent="property_construction_process_menu" action="view_property_delegated_agent_action"/> - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/yuthon_property_report/__init__.py b/yuthon_property_report/__init__.py new file mode 100644 index 000000000..c536983e2 --- /dev/null +++ b/yuthon_property_report/__init__.py @@ -0,0 +1,2 @@ +from . import models +from . import wizard \ No newline at end of file diff --git a/yuthon_property_report/__manifest__.py b/yuthon_property_report/__manifest__.py new file mode 100644 index 000000000..e33b98848 --- /dev/null +++ b/yuthon_property_report/__manifest__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +{ + 'name': "Yuthon Property Report", + 'summary': "", + 'description': """物业查询报表 """, + 'category': 'zhou', + 'version': '0.1', + 'license': 'LGPL-3', + 'depends': ['base', 'hr', 'yuthon_property'], + 'data': [ + 'security/ir.model.access.csv', + 'views/yuthon_property_report_views.xml', + 'views/menu.xml', + 'wizard/yuthon_property_report_wizard.xml', + ], + 'assets': { + 'web.assets_backend': [ + 'yuthon_property_report/static/src/js/report_create_button.js', + 'yuthon_property_report/static/src/xml/report_create_button.xml', + ], + }, + 'installable': True, + 'application': True, + +} diff --git a/yuthon_property_report/models/__init__.py b/yuthon_property_report/models/__init__.py new file mode 100644 index 000000000..b863a030c --- /dev/null +++ b/yuthon_property_report/models/__init__.py @@ -0,0 +1,2 @@ +# -*- coding: utf-8 -*- +from . import yuthon_property_report \ No newline at end of file diff --git a/yuthon_property_report/models/yuthon_property_report.py b/yuthon_property_report/models/yuthon_property_report.py new file mode 100644 index 000000000..b9607c791 --- /dev/null +++ b/yuthon_property_report/models/yuthon_property_report.py @@ -0,0 +1,162 @@ +from odoo import models, fields + + +class PropertyLedger(models.Model): + _name = 'property.ledger' + _description = '物业台账' + + title_deed = fields.Char(string="产权证编号") + name = fields.Char(string="资产名称") + management_area = fields.Float(string="管理面积") + equity_area = fields.Float(string="产权面积") + registered_id = fields.Many2one('yuthon.purpose.evidence', string='证载用途') + message_standard_id = fields.Many2one('property.message.fee', string="管理费标准") + admin_id = fields.Many2one('res.users', string="片区管理员") + company_id = fields.Many2one('res.company', string="公司") + tenure_type = fields.Selection([('self', '自有'), ('agency', '代管')], string='权属类型') + + +class PropertyOperationReport(models.Model): + _name = 'property.operation.report' + _description = '经营报表' + + title_deed = fields.Char(string="产权证编号") + name = fields.Char(string="资产名称") + management_area = fields.Float(string="管理面积") + equity_area = fields.Float(string="产权面积") + registered_id = fields.Many2one('yuthon.purpose.evidence', string='证载用途') + message_standard_id = fields.Many2one('property.message.fee', string="管理费标准") + admin_id = fields.Many2one('res.users', string="片区管理员") + company_id = fields.Many2one('res.company', string="公司") + tenure_type = fields.Selection([('self', '自有'), ('agency', '代管')], string='权属类型') + + +class PropertyFinancialLedger(models.Model): + _name = 'property.financial.ledger' + _description = '财务台账' + + title_deed = fields.Char(string="产权证编号") + name = fields.Char(string="资产名称") + management_area = fields.Float(string="管理面积") + equity_area = fields.Float(string="产权面积") + registered_id = fields.Many2one('yuthon.purpose.evidence', string='证载用途') + message_standard_id = fields.Many2one('property.message.fee', string="管理费标准") + admin_id = fields.Many2one('res.users', string="片区管理员") + company_id = fields.Many2one('res.company', string="公司") + tenure_type = fields.Selection([('self', '自有'), ('agency', '代管')], string='权属类型') + + +class ManagementAreaReport(models.Model): + _name = 'management.area.report' + _description = '管理面积报表' + + title_deed = fields.Char(string="产权证编号") + name = fields.Char(string="资产名称") + management_area = fields.Float(string="管理面积") + equity_area = fields.Float(string="产权面积") + registered_id = fields.Many2one('yuthon.purpose.evidence', string='证载用途') + message_standard_id = fields.Many2one('property.message.fee', string="管理费标准") + admin_id = fields.Many2one('res.users', string="片区管理员") + company_id = fields.Many2one('res.company', string="公司") + tenure_type = fields.Selection([('self', '自有'), ('agency', '代管')], string='权属类型') + + +class RentAreaReport(models.Model): + _name = 'rent.area.report' + _description = '可租面积报表' + + name = fields.Char(string="资产名称") + rent_area = fields.Float(string="可租面积") + property_state = fields.Selection([('vacant', '空置'), ('rented', '已租')], string="资产状态") + vacant_duration = fields.Float(string="空置时长") + admin_id = fields.Many2one('res.users', string="片区管理员") + company_id = fields.Many2one('res.company', string="公司") + tenure_type = fields.Selection([('self', '自有'), ('agency', '代管')], string='权属类型') + + +class RentedAreaReport(models.Model): + _name = 'rented.area.report' + _description = '已租面积报表' + + name = fields.Char(string="资产名称") + total_area = fields.Float(string="总面积") + lessee_id = fields.Many2one('property.tenant.information', string='承租方') + contract_code = fields.Char(string="合同编号") + unit_price = fields.Float(string="单价") + rent = fields.Float(string="租金") + company_id = fields.Many2one('res.company', string="公司") + admin_id = fields.Many2one('res.users', string="片区管理员") + tenure_type = fields.Selection([('self', '自有'), ('agency', '代管')], string='权属类型') + + +class AccountsReceivableReport(models.Model): + _name = 'accounts.receivable.report' + _description = '合同应收报表' + + name = fields.Char(string="合同编号") + due_date = fields.Date(string="应收日期") + lessee_id = fields.Many2one('property.tenant.information', string='承租方') + original_amount = fields.Float(string="当期金额") + property_id = fields.Many2one('yuthon.property', string='物业') + contract_id = fields.Many2one('property.lease.contract', string='合同') + admin_id = fields.Many2one('res.users', string="片区管理员") + tenure_type = fields.Selection([('self', '自有'), ('agency', '代管')], string='权属类型') + + +class AccountsDefaultReport(models.Model): + _name = 'accounts.default.report' + _description = '违约金明细报表' + + contract_id = fields.Many2one('property.lease.contract', string='合同') + property_id = fields.Many2one('yuthon.property', string='物业') + lessee_id = fields.Many2one('property.tenant.information', string='承租方') + original_amount = fields.Float(string="当月所收金额") + rent_owed = fields.Float(string="欠租金额") + per_day = fields.Float(string="每日违约金元/天") + penalty = fields.Float(string="违约金") + delivered1 = fields.Float(string="已交") + submitted = fields.Float(string="未交") + due_date = fields.Date(string="应收日期") + admin_id = fields.Many2one('res.users', string="片区管理员") + company_id = fields.Many2one('res.company', string="公司") + title_certificate = fields.Char(sting="产权证号") + tenure_type = fields.Selection([('self', '自有'), ('agency', '代管')], string='权属类型') + + +class ReceivedMonthReport(models.Model): + _name = 'received.month.report' + _description = '本月实收报表' + + contract_id = fields.Many2one('property.lease.contract', string='合同') + property_id = fields.Many2one('yuthon.property', string='物业') + lessee_id = fields.Many2one('property.tenant.information', string='承租方') + delivered1 = fields.Float(string="金额") + company_id = fields.Many2one('res.company', string="公司") + admin_id = fields.Many2one('res.users', string="片区管理员") + tenure_type = fields.Selection([('self', '自有'), ('agency', '代管')], string='权属类型') + + +class PenaltyListReport(models.Model): + _name = 'penalty.list.report' + _description = '累计欠收报表' + + property_id = fields.Many2one('yuthon.property', string='物业') + contract_id = fields.Many2one('property.lease.contract', string='合同') + lessee_id = fields.Many2one('property.tenant.information', string='承租方') + management_area = fields.Char(string="片区") + delivered1 = fields.Float(string="已交") + submitted = fields.Float(string="未交") + due_date = fields.Date(string="应收日期") + company_id = fields.Many2one('res.company', string="公司") + tenure_type = fields.Selection([('self', '自有'), ('agency', '代管')], string='权属类型') + + +class PropertyDepositList(models.Model): + _name = 'property.deposit.list' + _description = '押金累计欠收' + + property_id = fields.Many2one('yuthon.property', string='物业') + contract_id = fields.Many2one('property.lease.contract', string='合同') + admin_id = fields.Many2one('res.users', string="片区管理员") + original_amount = fields.Float(string="金额") + company_id = fields.Many2one('res.company', string="公司") diff --git a/yuthon_property_report/security/ir.model.access.csv b/yuthon_property_report/security/ir.model.access.csv new file mode 100644 index 000000000..9f2187720 --- /dev/null +++ b/yuthon_property_report/security/ir.model.access.csv @@ -0,0 +1,13 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_property_ledger,property.ledger,model_property_ledger,base.group_user,1,1,1,1 +access_management_area_report,management.area.report,model_management_area_report,base.group_user,1,1,1,1 +access_rent_area_report,rent.area.report,model_rent_area_report,base.group_user,1,1,1,1 +access_rented_area_report,rented.area.report,model_rented_area_report,base.group_user,1,1,1,1 +access_accounts_receivable_report,accounts.receivable.report,model_accounts_receivable_report,base.group_user,1,1,1,1 +access_accounts_default_report,accounts.default.report,model_accounts_default_report,base.group_user,1,1,1,1 +access_received_month_report,received.month.report,model_received_month_report,base.group_user,1,1,1,1 +access_penalty_list_report,penalty.list.report,model_penalty_list_report,base.group_user,1,1,1,1 +access_property_deposit_list,property.deposit.list,model_property_deposit_list,base.group_user,1,1,1,1 +access_property_operation_report,property.operation.report,model_property_operation_report,base.group_user,1,1,1,1 +access_property_financial_ledger,property.financial.ledger,model_property_financial_ledger,base.group_user,1,1,1,1 +access_yuthon_property_report_wizard,yuthon.property.report.wizard,model_yuthon_property_report_wizard,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/yuthon_property_report/static/src/js/report_create_button.js b/yuthon_property_report/static/src/js/report_create_button.js new file mode 100644 index 000000000..e04accd68 --- /dev/null +++ b/yuthon_property_report/static/src/js/report_create_button.js @@ -0,0 +1,29 @@ +/** @odoo-module */ +import { ListController } from "@web/views/list/list_controller"; +import { registry } from '@web/core/registry'; +import { listView } from '@web/views/list/list_view'; + +export class CustomReportStatementsController extends ListController { + setup() { + super.setup(); + } + + openReportWizard() { + this.actionService.doAction({ + type: 'ir.actions.act_window', + res_model: 'yuthon.property.report.wizard', + name: '物业报表弹窗', + view_mode: 'form', + view_type: 'form', + views: [[false, 'form']], + target: 'new', // 以弹窗形式打开 + context: {}, + }); + } +} + +registry.category("views").add("custom_report_statements_button", { + ...listView, + Controller: CustomReportStatementsController, + buttonTemplate: "report_module.ListView.Buttons", +}); \ No newline at end of file diff --git a/yuthon_property_report/static/src/xml/report_create_button.xml b/yuthon_property_report/static/src/xml/report_create_button.xml new file mode 100644 index 000000000..65aa6c4b5 --- /dev/null +++ b/yuthon_property_report/static/src/xml/report_create_button.xml @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/yuthon_property_report/views/menu.xml b/yuthon_property_report/views/menu.xml new file mode 100644 index 000000000..063240814 --- /dev/null +++ b/yuthon_property_report/views/menu.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/yuthon_property_report/views/yuthon_property_report_views.xml b/yuthon_property_report/views/yuthon_property_report_views.xml new file mode 100644 index 000000000..2952ef84c --- /dev/null +++ b/yuthon_property_report/views/yuthon_property_report_views.xml @@ -0,0 +1,270 @@ + + + + + property.ledger.tree + property.ledger + + + + + + + + + + + + + + + + + property.operation.report.tree + property.operation.report + + + + + + + + + + + + + + + + + property.financial.ledger.tree + property.financial.ledger + + + + + + + + + + + + + + + + 物业台账 + property.ledger + tree,form + + + + 经营报表 + property.operation.report + tree,form + + + + 财务台账 + property.financial.ledger + tree,form + + + + + management.area.report.tree + management.area.report + + + + + + + + + + + + + + + + 管理面积报表 + management.area.report + tree,form + + + + + + rent.area.report.tree + rent.area.report + + + + + + + + + + + + + + 可租面积报表 + rent.area.report + tree,form + + + + + + rented.area.report.tree + rented.area.report + + + + + + + + + + + + + + + + 已租面积报表 + rented.area.report + tree,form + + + + + + accounts.receivable.report.tree + accounts.receivable.report + + + + + + + + + + + + + + + 合同应收报表 + accounts.receivable.report + tree,form + + + + + + accounts.default.report.tree + accounts.default.report + + + + + + + + + + + + + + + + + + + + + 违约金明细报表 + accounts.default.report + tree,form + + + + + + received.month.report.tree + received.month.report + + + + + + + + + + + + + + 本月实收报表 + received.month.report + tree,form + + + + + + penalty.list.report.tree + penalty.list.report + + + + + + + + + + + + + + + + 累计欠收报表 + penalty.list.report + tree,form + + + + + + property.deposit.list.tree + property.deposit.list + + + + + + + + + + + + 押金累计欠收 + property.deposit.list + tree,form + + + \ No newline at end of file diff --git a/yuthon_property_report/wizard/__init__.py b/yuthon_property_report/wizard/__init__.py new file mode 100644 index 000000000..be274e446 --- /dev/null +++ b/yuthon_property_report/wizard/__init__.py @@ -0,0 +1,2 @@ +from . import yuthon_property_report_wizard + diff --git a/yuthon_property_report/wizard/yuthon_property_report_wizard.py b/yuthon_property_report/wizard/yuthon_property_report_wizard.py new file mode 100644 index 000000000..54fb2d0c0 --- /dev/null +++ b/yuthon_property_report/wizard/yuthon_property_report_wizard.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +from email.policy import default + +from odoo import models, fields, api, _, SUPERUSER_ID +from odoo.exceptions import ValidationError, UserError +from pypinyin import pinyin, Style +import xlrd +import base64 +import datetime +from datetime import datetime + + +class YuthonPropertyReportWizard(models.Model): + _name = 'yuthon.property.report.wizard' + _description = '物业报表弹窗' + + select_month = fields.Selection([('1', '一月'), ('2', '二月'), ('3', '三月'), ('4', '四月'), + ('5', '五月'), ('6', '六月'), ('7', '七月'), ('8', '八月'), + ('9', '九月'), ('10', '十月'), ('11', '十一月'), + ('12', '十二月')], string='选择月份', + default=lambda self: str(datetime.now().month)) + select_year = fields.Selection(selection=[(str(i), str(i)) for i in range(2024, 2060)], string='选择年份', + default=lambda self: str(datetime.now().year)) + + company_id = fields.Many2one('res.company', string='公司') + tenure_type = fields.Selection([('self', '自有'), ('agency', '代管')], string='权属类型') + precinct_id = fields.Many2one('yuthon.precinct.message', string="所属片区") + + def confirm(self): + pass \ No newline at end of file diff --git a/yuthon_property_report/wizard/yuthon_property_report_wizard.xml b/yuthon_property_report/wizard/yuthon_property_report_wizard.xml new file mode 100644 index 000000000..43103e2fc --- /dev/null +++ b/yuthon_property_report/wizard/yuthon_property_report_wizard.xml @@ -0,0 +1,24 @@ + + + + yuthon.property.report.wizard.form + yuthon.property.report.wizard + +
+ + + + + + + + + + +
+
+
+
\ No newline at end of file