diff --git a/attendance_iot/models/attendance_iot.py b/attendance_iot/models/attendance_iot.py
index a5754bd17..bc9115352 100644
--- a/attendance_iot/models/attendance_iot.py
+++ b/attendance_iot/models/attendance_iot.py
@@ -27,7 +27,5 @@ class AttendanceIot(models.Model):
('employee_id', 'in', self.employee_ids.ids),
('attendance_iot_id', '=', self.id),
],
- 'context': {
- 'group_by': ['attendance_iot_id'],
- },
+ 'context': {'group_by': ['company_id', 'attendance_iot_id']}
}
diff --git a/attendance_iot/views/attendance_iot_user_views.xml b/attendance_iot/views/attendance_iot_user_views.xml
index 6ca4447f2..cf4ca2a85 100644
--- a/attendance_iot/views/attendance_iot_user_views.xml
+++ b/attendance_iot/views/attendance_iot_user_views.xml
@@ -7,7 +7,7 @@
-
+
diff --git a/room/models/room_booking.py b/room/models/room_booking.py
index 7db1cd7ce..1e6c11b1b 100644
--- a/room/models/room_booking.py
+++ b/room/models/room_booking.py
@@ -223,7 +223,7 @@ class RoomBooking(models.Model):
'views': [(False, 'form')],
'target': 'new',
'context': {
- 'default_qrcode_image': qrcode_image,
+ 'efault_default_qrcode_image': qrcode_image,
}
}
return action
diff --git a/yuthon_hr_attendance/views/hr_attendance_month_views.xml b/yuthon_hr_attendance/views/hr_attendance_month_views.xml
index e0d1d1e16..9930fc09a 100644
--- a/yuthon_hr_attendance/views/hr_attendance_month_views.xml
+++ b/yuthon_hr_attendance/views/hr_attendance_month_views.xml
@@ -69,6 +69,7 @@
+
@@ -105,7 +106,6 @@
-
diff --git a/yuthon_property/models/property_accounts_receivable.py b/yuthon_property/models/property_accounts_receivable.py
index 9e35359e3..e7ef82699 100644
--- a/yuthon_property/models/property_accounts_receivable.py
+++ b/yuthon_property/models/property_accounts_receivable.py
@@ -8,6 +8,7 @@ class PropertyAccountsReceivable(models.Model):
_description = '应收账单'
property_id = fields.Many2one('yuthon.property', string='物业')
+ management_area = fields.Float(related='property_id.management_area', string='面积')
lessee_id = fields.Many2one('property.tenant.information', string='承租方')
admin_id = fields.Many2one(related='property_id.admin_id', string="片区管理员")
company_id = fields.Many2one(related='property_id.company_id', string="公司")
diff --git a/yuthon_property/models/property_bank_statements.py b/yuthon_property/models/property_bank_statements.py
index ab397540a..918861641 100644
--- a/yuthon_property/models/property_bank_statements.py
+++ b/yuthon_property/models/property_bank_statements.py
@@ -155,7 +155,7 @@ class PropertyBankStatements(models.Model):
contract_ids = self.env['property.lease.contract'].search([('lessee_id', '=', tenant_id.id)])
for contract in contract_ids:
if contract.lease_ids:
- lease_id = contract.lease_ids[0].address_id
+ lease_id = contract.lease_ids[-1].address_id
if lease_id:
property_ids.append(lease_id.id)
self.property_ids = [(6, 0, property_ids)]
diff --git a/yuthon_property/models/yuthon_property.py b/yuthon_property/models/yuthon_property.py
index c1d291533..a25e83b24 100644
--- a/yuthon_property/models/yuthon_property.py
+++ b/yuthon_property/models/yuthon_property.py
@@ -83,8 +83,6 @@ class YuthonProperty(models.Model):
first_letter = fields.Char(string="首字母", compute='_compute_first_letter', store=True)
- # 报表新增字段
- title_certificate = fields.Char(string="产权证号")
vacant_duration = fields.Float(string="空置时长", digits=(16, 2))
@@ -108,7 +106,25 @@ class YuthonProperty(models.Model):
if rec.title_information_ids:
latest_title_information = sorted(rec.title_information_ids, key=lambda x: x.start_time, reverse=True)[0]
rec.write({
- 'title_deed': latest_title_information.title_certificate})
+ 'title_deed': latest_title_information.title_certificate,
+ 'registered_id': latest_title_information.registered_id,
+ 'equity_area': latest_title_information.equity_area,
+ })
+
+ @api.onchange('manage_information_ids')
+ def _onchange_information_ids(self):
+ for rec in self:
+ if rec.manage_information_ids:
+ latest_title_information = sorted(rec.manage_information_ids, key=lambda x: x.start_time, reverse=True)[
+ 0]
+ rec.write({
+ 'precinct_id': latest_title_information.precinct_id,
+ 'tenure_type': latest_title_information.tenure_type,
+ 'management_area': latest_title_information.management_area,
+ 'rent_area': latest_title_information.rent_area,
+ 'admin_id': latest_title_information.admin_id,
+ 'company_id' : latest_title_information.company_id,
+ })
@api.onchange('energy_meter_ids')
def _onchange_energy_meter_ids(self):
@@ -164,6 +180,15 @@ class YuthonProperty(models.Model):
"context": {'default_property_rental_form_line_ids': property_list}
}
+ def open_record(self):
+ return {
+ "type": "ir.actions.act_window",
+ "res_model": 'yuthon.property',
+ "res_id": self.id,
+ "name": '物业详情',
+ "view_mode": "form",
+ }
+
def put_offline_approval(self):
form_id = self.env.ref('yuthon_property_approval.view_property_offline_registration_form').id
return {
@@ -177,6 +202,7 @@ class YuthonProperty(models.Model):
}
}
+
def put_adjustment_approval(self):
form_id = self.env.ref('yuthon_property_approval.view_property_rental_conditions_form').id
return {
@@ -247,11 +273,11 @@ class YuthonProperty(models.Model):
'name': record.name,
'property_ids': [(6, 0, [record.id])],
'evaluation_area': record.rent_area,
- '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,
- '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,
+ 'owner_id': record.title_information_ids[-1].owner_id.id if record.title_information_ids else None,
+ 'registered_id': record.title_information_ids[-1].registered_id.id if record.title_information_ids else None,
+ 'rent_id': record.reference_ids[-1].rent_id.id if record.reference_ids else None,
+ 'lease_period': record.reference_ids[-1].lease_period if record.reference_ids else None,
+ 'annual_increase_percentage': record.reference_ids[-1].annual_increase_percentage if record.reference_ids else None,
'assessment_category': 'rent_money',
'remake': record.remark,
})
@@ -273,11 +299,11 @@ class YuthonProperty(models.Model):
'name': record.name,
'property_ids': [(6, 0, [record.id])],
'evaluation_area': record.rent_area,
- '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,
- '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,
+ 'owner_id': record.title_information_ids[-1].owner_id.id if record.title_information_ids else None,
+ 'registered_id': record.title_information_ids[-1].registered_id.id if record.title_information_ids else None,
+ 'rent_id': record.reference_ids[-1].rent_id.id if record.reference_ids else None,
+ 'lease_period': record.reference_ids[-1].lease_period if record.reference_ids else None,
+ 'annual_increase_percentage': record.reference_ids[-1].annual_increase_percentage if record.reference_ids else None,
'assessment_category': 'rent_money',
'remake': record.remark,
})
@@ -346,13 +372,15 @@ class YuthonProperty(models.Model):
self._context.get('active_ids', self._context.get('active_id')))
for record in property_ids:
precinct_id = self.env["yuthon.precinct.message"].search([('employee_id.name', '=', record.admin_id.name)])
- company_id = record.manage_information_ids[0].company_id.id if record.manage_information_ids else ''
- title_deed = record.title_information_ids[0].title_certificate if record.title_information_ids else ''
+ company_id = record.manage_information_ids[-1].company_id.id if record.manage_information_ids else ''
+ title_deed = record.title_information_ids[-1].title_certificate if record.title_information_ids else ''
+ registered_id = record.title_information_ids[-1].registered_id if record.title_information_ids else ''
+ record.registered_id = registered_id
record.company_id = company_id
record.title_deed = title_deed
record.precinct_id = precinct_id.id if precinct_id else ''
if record.manage_information_ids:
- record.manage_information_ids[0].precinct_id = precinct_id.id if precinct_id else ''
+ record.manage_information_ids[-1].precinct_id = precinct_id.id if precinct_id else ''
def revert_change(self):
property_ids = self.env["yuthon.property"].browse(
diff --git a/yuthon_property/static/src/js/statements_create_button.js b/yuthon_property/static/src/js/statements_create_button.js
index 726ffaac4..5c7065632 100644
--- a/yuthon_property/static/src/js/statements_create_button.js
+++ b/yuthon_property/static/src/js/statements_create_button.js
@@ -11,8 +11,8 @@ export class CustomStatementsListController extends ListController {
openAllStatementsWizard() {
this.actionService.doAction({
type: 'ir.actions.act_window',
- res_model: 'property.statements.wizard',
- name: '批量对账',
+ res_model: 'click.reconciliation.wizard',
+ name: '一键对账',
view_mode: 'form',
view_type: 'form',
views: [[false, 'form']],
diff --git a/yuthon_property/views/property_accounts_receivable_views.xml b/yuthon_property/views/property_accounts_receivable_views.xml
index 9bd749557..9e30bbfe3 100644
--- a/yuthon_property/views/property_accounts_receivable_views.xml
+++ b/yuthon_property/views/property_accounts_receivable_views.xml
@@ -3,7 +3,7 @@
property.accounts.receivable.tree
property.accounts.receivable
-
diff --git a/yuthon_property/views/property_rent_list_views.xml b/yuthon_property/views/property_rent_list_views.xml
index c9416bf6f..e4a574f90 100644
--- a/yuthon_property/views/property_rent_list_views.xml
+++ b/yuthon_property/views/property_rent_list_views.xml
@@ -8,6 +8,8 @@
decoration-success="charge_status == 'fully_paid'" js_class="custom_rent_list_button" limit="20">
+
+
@@ -31,6 +33,8 @@
+
+
diff --git a/yuthon_property/views/yuthon_property_views.xml b/yuthon_property/views/yuthon_property_views.xml
index 7164e84df..715a65966 100644
--- a/yuthon_property/views/yuthon_property_views.xml
+++ b/yuthon_property/views/yuthon_property_views.xml
@@ -276,19 +276,11 @@
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
@@ -344,21 +336,44 @@
yuthon.property
-
+
-
+
+
+
+
+ property.management.area.report.search
+ yuthon.property
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
管理面积报表
yuthon.property
tree
+ {'search_default_group_by_tenure_type': True}
+
+
@@ -373,13 +388,35 @@
+
+
+ property.management.area.report.search
+ yuthon.property
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- 可租面积报表
- yuthon.property
- tree
+ 可租面积报表
+ yuthon.property
+ tree
+ {'search_default_group_by_tenure_type': True}
+
+
物业
@@ -387,6 +424,8 @@
kanban,tree,form
{'search_default_referred_id': 1}
+
我的物业
@@ -395,6 +434,8 @@
[('admin_id','=',uid)]
{'search_default_referred_id': 1}
+
批量导入物业信息
diff --git a/yuthon_property_approval/__manifest__.py b/yuthon_property_approval/__manifest__.py
index 8557cab46..ec934cd4e 100644
--- a/yuthon_property_approval/__manifest__.py
+++ b/yuthon_property_approval/__manifest__.py
@@ -74,6 +74,7 @@
'wizard/choose_contract_wizard_views.xml',
'wizard/property_reconciliation_wizard_views.xml',
'wizard/property_management_wizard.xml',
+ 'wizard/click_reconciliation_wizard_views.xml',
'wizard/property_rental_wizard_views.xml',
'wizard/property_meeting_wizard_views.xml',
'views/property_menu_all.xml',
diff --git a/yuthon_property_approval/models/inherit_yuthon_property.py b/yuthon_property_approval/models/inherit_yuthon_property.py
index c3e1675c5..71b7dc652 100644
--- a/yuthon_property_approval/models/inherit_yuthon_property.py
+++ b/yuthon_property_approval/models/inherit_yuthon_property.py
@@ -65,20 +65,41 @@ class PropertyBankStatements(models.Model):
def _get_reconciliation_vals(self, record):
if record.name:
- bank_id = self.env['property.bank.line'].search([('bank', '=', record.name)])
+ dt = datetime.strptime(str(self.start_time), '%Y-%m-%d %H:%M:%S').date()
+ bank_id = self.env['property.bank.line'].search([('bank', '=', record.name)], limit=1)
+ first_day = dt.replace(day=1)
+ last_day = first_day + relativedelta(months=1) - relativedelta(days=1)
total_rent_month = 0
if bank_id:
tenant_id = bank_id.tenant_id
# 应收租金
- rent_ids = self.env['property.rent.list'].search([('lessee_id', '=', tenant_id.id)])
+ rent_ids = self.env['property.rent.list'].search([
+ ('lessee_id', '=', tenant_id.id),
+ ('due_date', '>=', fields.Date.to_string(first_day)),
+ ('due_date', '<=', fields.Date.to_string(last_day)),
+ ])
# 应收押金
- deposit_ids = self.env['property.deposit.list'].search([('lessee_id', '=', tenant_id.id)])
+ deposit_ids = self.env['property.deposit.list'].search([
+ ('lessee_id', '=', tenant_id.id),
+ ])
# 应收管理费
- management_ids = self.env['property.management.list'].search([('lessee_id', '=', tenant_id.id)])
+ management_ids = self.env['property.management.list'].search([
+ ('lessee_id', '=', tenant_id.id),
+ ('due_date', '>=', fields.Date.to_string(first_day)),
+ ('due_date', '<=', fields.Date.to_string(last_day)),
+ ])
# 应收水费
- water_ids = self.env['property.water.list'].search([('lessee_id', '=', tenant_id.id)])
+ water_ids = self.env['property.water.list'].search([
+ ('lessee_id', '=', tenant_id.id),
+ ('due_date', '>=', fields.Date.to_string(first_day)),
+ ('due_date', '<=', fields.Date.to_string(last_day)),
+ ])
# 应收电费
- electricity_ids = self.env['property.tariff.list'].search([('lessee_id', '=', tenant_id.id)])
+ electricity_ids = self.env['property.tariff.list'].search([
+ ('lessee_id', '=', tenant_id.id),
+ ('due_date', '>=', fields.Date.to_string(first_day)),
+ ('due_date', '<=', fields.Date.to_string(last_day)),
+ ])
def create_reconciliation_vals(ids, collection_type_val, sequence_val):
"""
@@ -95,7 +116,6 @@ class PropertyBankStatements(models.Model):
'repair_fee': '维修费',
'other': '其他'
}
-
nonlocal total_rent_month
vals_list = []
current_sequence = sequence_val
@@ -200,19 +220,6 @@ class PropertyBankStatements(models.Model):
all_vals, total_rent_month = self._get_reconciliation_vals(record)
return self._get_context_and_action(record, all_vals, total_rent_month)
- def button_all_reconciliation(self):
- statements_ids = self.env["property.bank.statements"].browse(self._context.get('active_ids', self._context.get('active_id')))
- total_all_vals = []
- grand_total_rent_month = 0
- for record in statements_ids:
- all_vals, total_rent_month = self._get_reconciliation_vals(record)
- total_all_vals.extend(all_vals)
- grand_total_rent_month += total_rent_month
- if statements_ids:
- first_record = statements_ids[0]
- return self._get_context_and_action(first_record, total_all_vals, grand_total_rent_month)
- return None
-
def put_button(self):
form_id = self.env.ref('yuthon_property_approval.view_property_accounts_approval_form').id
bank_list = []
@@ -258,6 +265,8 @@ class PropertyAccountsReceivable(models.Model):
_inherit = 'property.accounts.receivable'
contract_id = fields.Many2one('property.lease.contract', string="关联租赁合同审批")
+ tenure_type = fields.Selection(related='property_id.tenure_type', string="权属类型", store=True)
+ precinct_id = fields.Many2one(related='property_id.precinct_id', string="所属片区", store=True)
penalty = fields.Float(string="违约金")
penalty_date = fields.Date(string="违约金日期")
# 报表新增字段
@@ -414,7 +423,7 @@ class PropertyDepositList(models.Model):
'contract_id': rec.contract_id.id,
'property_id': rec.property_id.id,
'lessee_id': rec.contract_id.lessee_id.id if rec.contract_id.lessee_id else None,
- 'original_amount': rec.aggregate,
+ 'original_amount': rec.original_amount,
'create_time': datetime.now(),
'management_type_id': management_type_id.id,
})
diff --git a/yuthon_property_approval/models/property_lease_contract.py b/yuthon_property_approval/models/property_lease_contract.py
index dbf60ae03..f3086ca4f 100644
--- a/yuthon_property_approval/models/property_lease_contract.py
+++ b/yuthon_property_approval/models/property_lease_contract.py
@@ -165,6 +165,14 @@ class PropertyLeaseContract(models.Model):
name_title = fields.Char(compute='_compute_name_title')
+ def open_record(self):
+ return {
+ 'type': 'ir.actions.act_window',
+ 'res_model': 'property.lease.contract',
+ 'res_id': self.id,
+ 'view_mode': 'form',
+ }
+
@api.depends('contract_code', 'name')
def _compute_name_title(self):
for record in self:
diff --git a/yuthon_property_approval/security/ir.model.access.csv b/yuthon_property_approval/security/ir.model.access.csv
index 9b1378375..9491d48b1 100644
--- a/yuthon_property_approval/security/ir.model.access.csv
+++ b/yuthon_property_approval/security/ir.model.access.csv
@@ -97,4 +97,5 @@ access_property_meeting_line,property_meeting_line,model_property_meeting_line,b
access_property_management_line, property_management_line,model_property_management_line,base.group_user,1,1,1,1
access_property_management_line2, property_management_line2,model_property_management_line2,base.group_user,1,1,1,1
access_property_management_wizard, property_management_wizard,model_property_management_wizard,base.group_user,1,1,1,1
+access_click_reconciliation_wizard, click_reconciliation_wizard,model_click_reconciliation_wizard,base.group_user,1,1,1,1
diff --git a/yuthon_property_approval/views/inherit_yuthon_property_views.xml b/yuthon_property_approval/views/inherit_yuthon_property_views.xml
index 117f3d342..c71ba5f9e 100644
--- a/yuthon_property_approval/views/inherit_yuthon_property_views.xml
+++ b/yuthon_property_approval/views/inherit_yuthon_property_views.xml
@@ -386,13 +386,14 @@
- 应收列表
- property.accounts.receivable
- tree
- {'group_by': 'contract_id'}
+ 应收账单
+ property.accounts.receivable
+ tree
+ {'group_by': 'contract_id'}
+
-
+
property.accounts.receivable.tree.form
property.accounts.receivable
@@ -403,13 +404,35 @@
+
+
+ property.accounts.receivable.search
+ property.accounts.receivable
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
合同应收报表
tree
property.accounts.receivable
+ {'search_default_group_by_tenure_type': True}
+
+
@@ -431,6 +454,7 @@
+
@@ -438,6 +462,9 @@
违约金明细报表
property.accounts.receivable
tree
+ {'search_default_group_by_tenure_type': True}
+
+
@@ -451,6 +478,7 @@
+
@@ -458,6 +486,9 @@
本月实收报表
property.accounts.receivable
tree
+ {'search_default_group_by_tenure_type': True}
+
+
@@ -465,7 +496,15 @@
property.accounts.receivable
-
+
+
+
+
+
+
+
+
+
@@ -473,6 +512,9 @@
累计欠收报表
property.accounts.receivable
tree
+ {'search_default_group_by_tenure_type': True}
+
+
批量生成违约金
@@ -501,13 +543,6 @@
-
-
- 批量对账
-
-
- code
- action = model.button_all_reconciliation()
diff --git a/yuthon_property_approval/views/property_lease_contract.xml b/yuthon_property_approval/views/property_lease_contract.xml
index 61c89f1f4..b580f5752 100644
--- a/yuthon_property_approval/views/property_lease_contract.xml
+++ b/yuthon_property_approval/views/property_lease_contract.xml
@@ -766,17 +766,37 @@
-
+
+
+
+ yuthon.property.rented.area.report.search
+ property.lease.contract
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
已租面积报表
property.lease.contract
tree
-
+ {'search_default_group_by_tenure_type': True}
+
+
合同管理
diff --git a/yuthon_property_approval/views/property_menu_all.xml b/yuthon_property_approval/views/property_menu_all.xml
index b24c4f6b0..2518aedaa 100644
--- a/yuthon_property_approval/views/property_menu_all.xml
+++ b/yuthon_property_approval/views/property_menu_all.xml
@@ -365,7 +365,7 @@
action="property_penalty_line_report_action"/>