Compare commits
2 Commits
464e155f98
...
5d0ec2ca01
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5d0ec2ca01 | ||
|
|
f7ff8dce93 |
@ -14,6 +14,7 @@
|
|||||||
'data/bank_conf.xml',
|
'data/bank_conf.xml',
|
||||||
'data/bank_transactions_status_code.xml',
|
'data/bank_transactions_status_code.xml',
|
||||||
'data/bank_transactions_subtype_code.xml',
|
'data/bank_transactions_subtype_code.xml',
|
||||||
|
'data/regex_paterns.xml',
|
||||||
'cron/crons.xml',
|
'cron/crons.xml',
|
||||||
'views/main_menu.xml',
|
'views/main_menu.xml',
|
||||||
'views/bank_views.xml',
|
'views/bank_views.xml',
|
||||||
@ -22,6 +23,7 @@
|
|||||||
'views/raw_movements.xml',
|
'views/raw_movements.xml',
|
||||||
'views/bank_transactions_views.xml',
|
'views/bank_transactions_views.xml',
|
||||||
'views/service_payments_views.xml',
|
'views/service_payments_views.xml',
|
||||||
|
'views/transactions_regex.xml',
|
||||||
'views/bank_payments_views.xml',
|
'views/bank_payments_views.xml',
|
||||||
'wizard/add_payments_view.xml',
|
'wizard/add_payments_view.xml',
|
||||||
],
|
],
|
||||||
|
|||||||
25
bross_bank_management/data/regex_paterns.xml
Normal file
25
bross_bank_management/data/regex_paterns.xml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data noupdate="1">
|
||||||
|
<record id="regex_patern_1" model="hms.payment.categories.regex">
|
||||||
|
<field name="name">Salary</field>
|
||||||
|
<field name="regex">^ხელფასი</field>
|
||||||
|
<field name="category_id" ref="bross_hms.payment_category_3"/>
|
||||||
|
</record>
|
||||||
|
<record id="regex_patern_2" model="hms.payment.categories.regex">
|
||||||
|
<field name="name">Service Revenue</field>
|
||||||
|
<field name="regex">^\d+(\.\d+)?$</field>
|
||||||
|
<field name="category_id" ref="bross_hms.payment_category_1"/>
|
||||||
|
</record>
|
||||||
|
<record id="regex_patern_3" model="hms.payment.categories.regex">
|
||||||
|
<field name="name">Bank Fees</field>
|
||||||
|
<field name="regex">გადარიცხვის საკომისიო</field>
|
||||||
|
<field name="category_id" ref="bross_hms.payment_category_4"/>
|
||||||
|
</record>
|
||||||
|
<record id="regex_patern_4" model="hms.payment.categories.regex">
|
||||||
|
<field name="name">Bank Fees</field>
|
||||||
|
<field name="regex">საკასო მომსახურების საკომისიო</field>
|
||||||
|
<field name="category_id" ref="bross_hms.payment_category_4"/>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
@ -3,5 +3,6 @@ from . import bank_account
|
|||||||
from . import bank_settings
|
from . import bank_settings
|
||||||
from . import bank_models
|
from . import bank_models
|
||||||
from . import bank_transactions
|
from . import bank_transactions
|
||||||
from . import bank_payments
|
from . import hms_payments_inherit
|
||||||
from . import service_payments
|
from . import service_payments
|
||||||
|
from . import transactions_regex
|
||||||
@ -1,7 +0,0 @@
|
|||||||
from odoo import models, fields, _
|
|
||||||
|
|
||||||
|
|
||||||
class HmsPayments(models.Model):
|
|
||||||
_inherit = 'hms.payments'
|
|
||||||
|
|
||||||
bank_payment_id = fields.Many2one(comodel_name="brosse.bank.transactions", string="Bank Payment ID")
|
|
||||||
@ -49,8 +49,47 @@ class BrosseBankTransactions(models.Model):
|
|||||||
status_code_id = fields.Many2one('brosse.bank.transactions.status.code', string='Status Code')
|
status_code_id = fields.Many2one('brosse.bank.transactions.status.code', string='Status Code')
|
||||||
transaction_type_id = fields.Many2one('brosse.bank.transactions.subtype.code', string='Transaction Type')
|
transaction_type_id = fields.Many2one('brosse.bank.transactions.subtype.code', string='Transaction Type')
|
||||||
|
|
||||||
|
payments_ids = fields.One2many(comodel_name="hms.payments", inverse_name="transaction_id", string="HMS Payments")
|
||||||
|
|
||||||
|
unassigned_amount = fields.Monetary(string="Unassigned Amount", currency_field='currency_id', compute="_compute_unassigned_amount")
|
||||||
|
|
||||||
bank_account_id = fields.Many2one('brosse.bank.account', string="Bank Account")
|
bank_account_id = fields.Many2one('brosse.bank.account', string="Bank Account")
|
||||||
|
|
||||||
|
category_id = fields.Many2one('hms.payment.categories', string='Category')
|
||||||
|
manually_assigned = fields.Boolean(string="Manually Assigned", default=False)
|
||||||
|
|
||||||
|
@api.depends('payments_ids')
|
||||||
|
def _compute_unassigned_amount(self):
|
||||||
|
for rec in self:
|
||||||
|
if rec.payments_ids:
|
||||||
|
gel_currency_id = self.env['res.currency'].search([('name', '=', 'GEL')])
|
||||||
|
payments = 0
|
||||||
|
unassigned_amount = 0
|
||||||
|
for payment in rec.payments_ids:
|
||||||
|
if rec.currency_id.id == gel_currency_id.id:
|
||||||
|
if payment.currency_id.id == rec.currency_id.id:
|
||||||
|
payments += payment.amount
|
||||||
|
else:
|
||||||
|
payments += payment.amount * payment.currency_id.rate_ids.sorted('id', reverse=True)[0].rate
|
||||||
|
else:
|
||||||
|
if payment.currency_id.id == rec.currency_id.id:
|
||||||
|
payments += payment.amount
|
||||||
|
else:
|
||||||
|
payments += payment.amount * payment.currency_id.rate_ids.sorted('id', reverse=True)[0].rate / rec.currency_id.rate_ids.sorted('id', reverse=True)[0].rate
|
||||||
|
|
||||||
|
print(f"################## {payments}")
|
||||||
|
unassigned_amount = rec.amount - payments
|
||||||
|
else:
|
||||||
|
unassigned_amount = rec.amount
|
||||||
|
rec.unassigned_amount = unassigned_amount
|
||||||
|
|
||||||
|
@api.onchange('category_id')
|
||||||
|
def onchange_category_id(self):
|
||||||
|
if self.category_id:
|
||||||
|
self.write({'manually_assigned': True})
|
||||||
|
print(self.manually_assigned)
|
||||||
|
print('movida')
|
||||||
|
|
||||||
@api.depends('document_date', 'amount')
|
@api.depends('document_date', 'amount')
|
||||||
def _compute_display_name(self):
|
def _compute_display_name(self):
|
||||||
for rec in self:
|
for rec in self:
|
||||||
@ -67,7 +106,7 @@ class BrosseBankTransactions(models.Model):
|
|||||||
to_pay = booking.total_amount
|
to_pay = booking.total_amount
|
||||||
|
|
||||||
self.env['hms.payments'].create({
|
self.env['hms.payments'].create({
|
||||||
'bank_payment_id': rec.id,
|
'transaction_id': rec.id,
|
||||||
'booking_id': booking.id,
|
'booking_id': booking.id,
|
||||||
'currency_id': rec.currency_id.id,
|
'currency_id': rec.currency_id.id,
|
||||||
'amount': rec.amount,
|
'amount': rec.amount,
|
||||||
|
|||||||
7
bross_bank_management/models/hms_payments_inherit.py
Normal file
7
bross_bank_management/models/hms_payments_inherit.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
from odoo import models, fields, _
|
||||||
|
|
||||||
|
|
||||||
|
class HmsPayments(models.Model):
|
||||||
|
_inherit = 'hms.payments'
|
||||||
|
|
||||||
|
transaction_id = fields.Many2one(comodel_name="brosse.bank.transactions", string="Bank Transaction")
|
||||||
35
bross_bank_management/models/transactions_regex.py
Normal file
35
bross_bank_management/models/transactions_regex.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import re
|
||||||
|
from odoo import models, fields, api, _
|
||||||
|
|
||||||
|
|
||||||
|
class PaymentCategoriesRegex(models.Model):
|
||||||
|
_name = 'hms.payment.categories.regex'
|
||||||
|
_description = 'Payment Categories Regex'
|
||||||
|
|
||||||
|
name = fields.Char('Name', required=True)
|
||||||
|
regex = fields.Char('Regex', required=True)
|
||||||
|
category_id = fields.Many2one(comodel_name="hms.payment.categories", string="Category")
|
||||||
|
|
||||||
|
def search_transactions_with_wallet_and_domestic(self, regex_patern):
|
||||||
|
pattern = re.compile(regex_patern, re.IGNORECASE)
|
||||||
|
transactions = self.env['brosse.bank.transactions'].search([('manually_assigned', '!=', True)])
|
||||||
|
|
||||||
|
matching_transactions = []
|
||||||
|
for transaction in transactions:
|
||||||
|
amount = str(transaction.amount or 0)
|
||||||
|
description = transaction.description or ''
|
||||||
|
comment = transaction.comment or ''
|
||||||
|
|
||||||
|
if pattern.search(amount) or pattern.search(description) or pattern.search(comment):
|
||||||
|
matching_transactions.append(transaction)
|
||||||
|
return matching_transactions
|
||||||
|
|
||||||
|
def write(self, vals):
|
||||||
|
res = super(PaymentCategoriesRegex, self).write(vals)
|
||||||
|
matching_transactions = self.search_transactions_with_wallet_and_domestic(self.regex)
|
||||||
|
|
||||||
|
for transaction in matching_transactions:
|
||||||
|
transaction.write({'category_id': self.category_id.id})
|
||||||
|
return res
|
||||||
@ -9,3 +9,5 @@ bross_bank_management.access_add_payments_wizard,access_add_payments_wizard,bros
|
|||||||
|
|
||||||
bross_bank_management.access_brosse_bank_transactions_status_code,access_brosse_bank_transactions_status_code,bross_bank_management.model_brosse_bank_transactions_status_code,base.group_user,1,1,1,1
|
bross_bank_management.access_brosse_bank_transactions_status_code,access_brosse_bank_transactions_status_code,bross_bank_management.model_brosse_bank_transactions_status_code,base.group_user,1,1,1,1
|
||||||
bross_bank_management.access_brosse_bank_transactions_subtype_code,access_brosse_bank_transactions_subtype_code,bross_bank_management.model_brosse_bank_transactions_subtype_code,base.group_user,1,1,1,1
|
bross_bank_management.access_brosse_bank_transactions_subtype_code,access_brosse_bank_transactions_subtype_code,bross_bank_management.model_brosse_bank_transactions_subtype_code,base.group_user,1,1,1,1
|
||||||
|
|
||||||
|
bross_bank_management.access_hms_payment_categories_regex,access_hms_payment_categories_regex,bross_bank_management.model_hms_payment_categories_regex,base.group_user,1,1,1,1
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<data>
|
<data>
|
||||||
<xpath expr="//field[@name='amount']" position="before">
|
<xpath expr="//field[@name='amount']" position="before">
|
||||||
<field name="bank_payment_id" optional="hide" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
<field name="transaction_id" optional="hide" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
</xpath>
|
</xpath>
|
||||||
</data>
|
</data>
|
||||||
</field>
|
</field>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<odoo>
|
<odoo>
|
||||||
<data>
|
<data>
|
||||||
<record id="action_process_selected_brosse_bank_transactions" model="ir.actions.server">
|
<record id="action_process_selected_brosse_bank_transactions" model="ir.actions.server">
|
||||||
<field name="name">Brosse Bank</field>
|
<field name="name">Bank</field>
|
||||||
<field name="model_id" ref="model_brosse_bank_transactions"/>
|
<field name="model_id" ref="model_brosse_bank_transactions"/>
|
||||||
<field name="binding_model_id" ref="model_brosse_bank_transactions"/>
|
<field name="binding_model_id" ref="model_brosse_bank_transactions"/>
|
||||||
<field name="state">code</field>
|
<field name="state">code</field>
|
||||||
@ -17,20 +17,22 @@
|
|||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<list string="Bank Transactions" editable="bottom">
|
<list string="Bank Transactions" editable="bottom">
|
||||||
<header>
|
<header>
|
||||||
<button name="%(action_process_selected_brosse_bank_transactions)d" type="action" string="Add bank transactions" class="btn-primary"/>
|
<button name="%(action_process_selected_brosse_bank_transactions)d" type="action" string="Map transactions" class="btn-primary"/>
|
||||||
</header>
|
</header>
|
||||||
<field name="bank_account_id"/>
|
<field name="bank_account_id"/>
|
||||||
<field name="amount"/>
|
<field name="amount"/>
|
||||||
|
<field name="unassigned_amount" force_save="1"/>
|
||||||
|
<field name="currency_id" optional="show" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="category_id" optional="show" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
<field name="description" optional="show"/>
|
<field name="description" optional="show"/>
|
||||||
<field name="comment" optional="show"/>
|
<field name="comment" optional="show"/>
|
||||||
<field name="partner_name" optional="show"/>
|
<field name="partner_name" optional="show"/>
|
||||||
<field name="taxpayer_name" optional="show"/>
|
<field name="taxpayer_name" optional="show"/>
|
||||||
<field name="currency_id" column_invisible='1'/>
|
<field name="manually_assigned" column_invisible="1" force_save="1" />
|
||||||
</list>
|
</list>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|
||||||
|
|
||||||
<record id="view_brosse_bank_transactions_list" model="ir.ui.view">
|
<record id="view_brosse_bank_transactions_list" model="ir.ui.view">
|
||||||
<field name="name">Transactions</field>
|
<field name="name">Transactions</field>
|
||||||
<field name="model">brosse.bank.transactions</field>
|
<field name="model">brosse.bank.transactions</field>
|
||||||
@ -38,13 +40,16 @@
|
|||||||
<list string="Bank Transactions" editable="bottom">
|
<list string="Bank Transactions" editable="bottom">
|
||||||
<field name="bank_account_id"/>
|
<field name="bank_account_id"/>
|
||||||
<field name="amount"/>
|
<field name="amount"/>
|
||||||
|
<field name="unassigned_amount" force_save="1"/>
|
||||||
<field name="exchange_rate"/>
|
<field name="exchange_rate"/>
|
||||||
<field name="exchange_rate_text"/>
|
<field name="exchange_rate_text"/>
|
||||||
<field name="currency_id" optional="hide"/>
|
<field name="currency_id" optional="hide" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="category_id" optional="show" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
<field name="description" optional="show"/>
|
<field name="description" optional="show"/>
|
||||||
<field name="comment" optional="show"/>
|
<field name="comment" optional="show"/>
|
||||||
<field name="partner_name" optional="show"/>
|
<field name="partner_name" optional="show"/>
|
||||||
<field name="taxpayer_name" optional="show"/>
|
<field name="taxpayer_name" optional="show"/>
|
||||||
|
<field name="manually_assigned" column_invisible="1" force_save="1" />
|
||||||
</list>
|
</list>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
29
bross_bank_management/views/transactions_regex.xml
Normal file
29
bross_bank_management/views/transactions_regex.xml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<record id="view_hms_payment_categories_regex_tree" model="ir.ui.view">
|
||||||
|
<field name="name">Payment Categories Regex</field>
|
||||||
|
<field name="model">hms.payment.categories.regex</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<list editable="bottom">
|
||||||
|
<field name="name"/>
|
||||||
|
<field name="regex"/>
|
||||||
|
<field name="category_id"/>
|
||||||
|
</list>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="action_hms_payment_categories_regex_action" model="ir.actions.act_window">
|
||||||
|
<field name="name">Payment Categories Regex</field>
|
||||||
|
<field name="res_model">hms.payment.categories.regex</field>
|
||||||
|
<field name="view_mode">list</field>
|
||||||
|
<field name="help" type="html">
|
||||||
|
<p class="o_view_nocontent_smiling_face">
|
||||||
|
Create your first payment category regex record.
|
||||||
|
</p>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem name="Payment Categories Regex" parent="bross_hms.finance_root_menu" id="finance_payment_categories_regex" sequence="40" action="action_hms_payment_categories_regex_action"/>
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
@ -11,6 +11,7 @@ class AddPayments(models.TransientModel):
|
|||||||
|
|
||||||
@api.model
|
@api.model
|
||||||
def _transaction_domain(self):
|
def _transaction_domain(self):
|
||||||
|
print(self.env.ref('bross_bank_management.transaction_code_3').id)
|
||||||
return [('status_code_id', '=', self.env.ref('bross_bank_management.transaction_code_3').id)]
|
return [('status_code_id', '=', self.env.ref('bross_bank_management.transaction_code_3').id)]
|
||||||
|
|
||||||
transaction_id = fields.Many2one(comodel_name="brosse.bank.transactions", domain=_transaction_domain, string="Bank Transaction")
|
transaction_id = fields.Many2one(comodel_name="brosse.bank.transactions", domain=_transaction_domain, string="Bank Transaction")
|
||||||
@ -84,13 +85,16 @@ class AddPayments(models.TransientModel):
|
|||||||
pos_terminal_code = False
|
pos_terminal_code = False
|
||||||
wire_transfer_code = rec.wire_transfer_code
|
wire_transfer_code = rec.wire_transfer_code
|
||||||
|
|
||||||
|
print(transaction_id)
|
||||||
|
|
||||||
self.env['hms.payments'].create({
|
self.env['hms.payments'].create({
|
||||||
|
'hms_payment_type_id': rec.payment_type.id,
|
||||||
'booking_id': rec.booking_id.id,
|
'booking_id': rec.booking_id.id,
|
||||||
'currency_id': rec.currency_id.id,
|
'currency_id': rec.currency_id.id,
|
||||||
'amount': rec.amount,
|
'amount': rec.amount,
|
||||||
'exchange_rate': rec.exchange_rate,
|
'exchange_rate': rec.exchange_rate,
|
||||||
'pending_transcation': rec.pending_transcation,
|
'pending_transcation': rec.pending_transcation,
|
||||||
'bank_payment_id': transaction_id,
|
'transaction_id': transaction_id,
|
||||||
'pos_terminal_code': pos_terminal_code,
|
'pos_terminal_code': pos_terminal_code,
|
||||||
'wire_transfer_code': wire_transfer_code,
|
'wire_transfer_code': wire_transfer_code,
|
||||||
})
|
})
|
||||||
|
|||||||
@ -14,6 +14,7 @@
|
|||||||
# 'cron/crons.xml',
|
# 'cron/crons.xml',
|
||||||
'data/payment_methods.xml',
|
'data/payment_methods.xml',
|
||||||
'data/payment_types.xml',
|
'data/payment_types.xml',
|
||||||
|
'data/payment_categories.xml',
|
||||||
'data/service_kinds.xml',
|
'data/service_kinds.xml',
|
||||||
'views/misc_menus.xml',
|
'views/misc_menus.xml',
|
||||||
'views/main_menus.xml',
|
'views/main_menus.xml',
|
||||||
@ -32,6 +33,8 @@
|
|||||||
'views/source_channels.xml',
|
'views/source_channels.xml',
|
||||||
'views/booking_source.xml',
|
'views/booking_source.xml',
|
||||||
'views/bookings.xml',
|
'views/bookings.xml',
|
||||||
|
'views/room_revenue.xml',
|
||||||
|
'views/service_categories.xml',
|
||||||
'views/status.xml',
|
'views/status.xml',
|
||||||
'views/hms_payments.xml',
|
'views/hms_payments.xml',
|
||||||
],
|
],
|
||||||
|
|||||||
23
bross_hms/data/payment_categories.xml
Normal file
23
bross_hms/data/payment_categories.xml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data noupdate="0">
|
||||||
|
<record id="payment_category_1" model="hms.payment.categories">
|
||||||
|
<field name="name">Service Revenue</field>
|
||||||
|
</record>
|
||||||
|
<record id="payment_category_2" model="hms.payment.categories">
|
||||||
|
<field name="name">Tax</field>
|
||||||
|
</record>
|
||||||
|
<record id="payment_category_3" model="hms.payment.categories">
|
||||||
|
<field name="name">Salary</field>
|
||||||
|
</record>
|
||||||
|
<record id="payment_category_4" model="hms.payment.categories">
|
||||||
|
<field name="name">Bank Fees</field>
|
||||||
|
</record>
|
||||||
|
<record id="payment_category_5" model="hms.payment.categories">
|
||||||
|
<field name="name">Lease Expenses</field>
|
||||||
|
</record>
|
||||||
|
<record id="payment_category_6" model="hms.payment.categories">
|
||||||
|
<field name="name">Other Expenses</field>
|
||||||
|
</record>
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<odoo>
|
<odoo>
|
||||||
<data noupdate="0">
|
<data noupdate="1">
|
||||||
<record id="payment_type_0" model="hms.payment.types">
|
<record id="payment_type_0" model="hms.payment.types">
|
||||||
<field name="name">Cash</field>
|
<field name="name">Cash</field>
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
@ -177,16 +177,39 @@ class HmsBookings(models.Model):
|
|||||||
paid = fields.Monetary(string="Paid Amount", compute="_compute_checkin_checkout_date", currency_field='currency', store=True)
|
paid = fields.Monetary(string="Paid Amount", compute="_compute_checkin_checkout_date", currency_field='currency', store=True)
|
||||||
to_be_paid = fields.Monetary(string="To Pay Amount", compute="_compute_checkin_checkout_date", currency_field='currency', store=True)
|
to_be_paid = fields.Monetary(string="To Pay Amount", compute="_compute_checkin_checkout_date", currency_field='currency', store=True)
|
||||||
currency = fields.Many2one(comodel_name="res.currency", string="Currency")
|
currency = fields.Many2one(comodel_name="res.currency", string="Currency")
|
||||||
|
expected_payment = fields.Monetary(string="Expected Payment", compute="_compute_checkin_checkout_date", currency_field='currency', store=True)
|
||||||
|
|
||||||
paymentMethod = fields.Many2one(comodel_name="hms.payment.methods", string="Payment Method", compute="_compute_checkin_checkout_date", store=True)
|
paymentMethod = fields.Many2one(comodel_name="hms.payment.methods", string="Payment Method", compute="_compute_checkin_checkout_date", store=True)
|
||||||
|
|
||||||
payment_status = fields.Selection(
|
payment_status = fields.Selection(
|
||||||
[('completely_paid', 'Completely Paid'), ('partially_paid', 'Partially Paid'), ('not_paid', 'Not Paid')], string="Payment Status", compute="_compute_checkin_checkout_date", store=True
|
[('completely_paid', 'Completely Paid'), ('partially_paid', 'Partially Paid'), ('not_paid', 'Not Paid')], string="Payment Status", compute="_compute_checkin_checkout_date", store=True)
|
||||||
)
|
|
||||||
|
|
||||||
@api.depends('roomStays')
|
booking_status = fields.Many2one(comodel_name="hms.booking.status", string="Booking Status", compute="_compute_checkin_checkout_date", store=True)
|
||||||
|
status = fields.Many2one(comodel_name="hms.status", string="Status", compute="_compute_checkin_checkout_date", store=True)
|
||||||
|
|
||||||
|
@api.depends('roomStays', 'payment_ids')
|
||||||
def _compute_checkin_checkout_date(self):
|
def _compute_checkin_checkout_date(self):
|
||||||
for booking in self:
|
for booking in self:
|
||||||
|
# Status fields
|
||||||
|
if booking.roomStays.filtered(lambda stay: stay.bookingStatus.name == 'Confirmed'):
|
||||||
|
booking.booking_status = self.env['hms.booking.status'].search([('name', '=', 'Confirmed')]).id
|
||||||
|
elif not booking.roomStays.filtered(lambda stay: stay.bookingStatus.name != 'Cancelled'):
|
||||||
|
booking.booking_status = self.env['hms.booking.status'].search([('name', '=', 'Cancelled')]).id
|
||||||
|
elif not booking.roomStays.filtered(lambda stay: stay.bookingStatus.name != 'Pending'):
|
||||||
|
booking.booking_status = self.env['hms.booking.status'].search([('name', '=', 'UpcoPendingming')]).id
|
||||||
|
|
||||||
|
if not booking.roomStays.filtered(lambda stay: stay.status.name == 'CheckedIn') and not booking.roomStays.filtered(lambda stay: stay.status.name == 'CheckedOut') and booking.roomStays.filtered(lambda stay: stay.status.name == 'New'):
|
||||||
|
booking.status = self.env['hms.status'].search([('name', '=', 'Upcoming')]).id
|
||||||
|
elif booking.roomStays.filtered(lambda stay: stay.status.name == 'CheckedIn'):
|
||||||
|
booking.status = self.env['hms.status'].search([('name', '=', 'CheckedIn')]).id
|
||||||
|
elif booking.roomStays.filtered(lambda stay: stay.status.name == 'CheckedOut'):
|
||||||
|
booking.status = self.env['hms.status'].search([('name', '=', 'CheckedOut')]).id
|
||||||
|
elif not booking.roomStays.filtered(lambda stay: stay.status.name != 'Cancelled'):
|
||||||
|
booking.status = self.env['hms.status'].search([('name', '=', 'Cancelled')]).id
|
||||||
|
elif not booking.roomStays.filtered(lambda stay: stay.status.name != 'No Show'):
|
||||||
|
booking.status = self.env['hms.status'].search([('name', '=', 'No Show')]).id
|
||||||
|
|
||||||
|
# Computed fields
|
||||||
checkin_dates = booking.roomStays.mapped('checkInDateTime')
|
checkin_dates = booking.roomStays.mapped('checkInDateTime')
|
||||||
checkout_dates = booking.roomStays.mapped('checkOutDateTime')
|
checkout_dates = booking.roomStays.mapped('checkOutDateTime')
|
||||||
|
|
||||||
@ -211,7 +234,42 @@ class HmsBookings(models.Model):
|
|||||||
booking.to_be_paid = sum(stay.totalPrice.get('toPayAmount', 0) for stay in booking.roomStays if stay.totalPrice)
|
booking.to_be_paid = sum(stay.totalPrice.get('toPayAmount', 0) for stay in booking.roomStays if stay.totalPrice)
|
||||||
booking.currency = booking.reservation_ids[0].currency if booking.reservation_ids else False
|
booking.currency = booking.reservation_ids[0].currency if booking.reservation_ids else False
|
||||||
booking.paymentMethod = booking.reservation_ids[0].paymentMethod if booking.reservation_ids else False
|
booking.paymentMethod = booking.reservation_ids[0].paymentMethod if booking.reservation_ids else False
|
||||||
booking.payment_status = 'completely_paid' if booking.paid == booking.total_amount else 'partially_paid' if booking.paid > 0 else 'not_paid'
|
|
||||||
|
paid_amount = booking.compute_paid_amount()
|
||||||
|
|
||||||
|
if booking.total_amount != 0:
|
||||||
|
expected_payment = booking.total_amount - paid_amount
|
||||||
|
booking.expected_payment = expected_payment
|
||||||
|
|
||||||
|
if expected_payment <= 0:
|
||||||
|
booking.payment_status = 'completely_paid'
|
||||||
|
elif booking.total_amount > expected_payment:
|
||||||
|
booking.payment_status = 'partially_paid'
|
||||||
|
else:
|
||||||
|
booking.payment_status = 'not_paid'
|
||||||
|
else:
|
||||||
|
booking.payment_status = 'not_paid'
|
||||||
|
|
||||||
|
def compute_paid_amount(self):
|
||||||
|
gel_currency_id = self.env['res.currency'].search([('name', '=', 'GEL')])
|
||||||
|
|
||||||
|
paid_amount = 0
|
||||||
|
if self.payment_ids:
|
||||||
|
for payment in self.payment_ids:
|
||||||
|
if self.currency.id == gel_currency_id.id:
|
||||||
|
if payment.currency_id.id != gel_currency_id.id:
|
||||||
|
paid_amount += payment.amount * payment.exchange_rate
|
||||||
|
else:
|
||||||
|
paid_amount += payment.amount
|
||||||
|
else:
|
||||||
|
if payment.currency_id.id == gel_currency_id.id:
|
||||||
|
paid_amount += payment.amount / self.currency.rate_ids.sorted('id', reverse=True)[0].rate
|
||||||
|
else:
|
||||||
|
if self.currency.id == payment.currency_id.id:
|
||||||
|
paid_amount += payment.amount
|
||||||
|
else:
|
||||||
|
paid_amount += payment.amount * gel_currency_id.rate_ids.sorted('id', reverse=True)[0].rate / self.currency.rate_ids.sorted('id', reverse=True)[0].rate
|
||||||
|
return paid_amount
|
||||||
|
|
||||||
# def add_bank_transactions(self):
|
# def add_bank_transactions(self):
|
||||||
# return {
|
# return {
|
||||||
@ -234,22 +292,7 @@ class HmsBookings(models.Model):
|
|||||||
|
|
||||||
expected_payment = self.total_amount
|
expected_payment = self.total_amount
|
||||||
|
|
||||||
paid_amount = 0
|
paid_amount = self.compute_paid_amount()
|
||||||
if self.payment_ids:
|
|
||||||
for payment in self.payment_ids:
|
|
||||||
if self.currency.id == gel_currency_id.id:
|
|
||||||
if payment.currency_id.id != gel_currency_id.id:
|
|
||||||
paid_amount += payment.amount * payment.exchange_rate
|
|
||||||
else:
|
|
||||||
paid_amount += payment.amount
|
|
||||||
else:
|
|
||||||
if payment.currency_id.id == gel_currency_id.id:
|
|
||||||
paid_amount += payment.amount / self.currency.rate_ids.sorted('id', reverse=True)[0].rate
|
|
||||||
else:
|
|
||||||
if self.currency.id == payment.currency_id.id:
|
|
||||||
paid_amount += payment.amount
|
|
||||||
else:
|
|
||||||
paid_amount += payment.amount * gel_currency_id.rate_ids.sorted('id', reverse=True)[0].rate / self.currency.rate_ids.sorted('id', reverse=True)[0].rate
|
|
||||||
|
|
||||||
expected_payment = expected_payment - paid_amount
|
expected_payment = expected_payment - paid_amount
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -1,11 +1,10 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import requests
|
|
||||||
import logging
|
|
||||||
import json
|
|
||||||
from odoo import models, fields, api, _
|
from odoo import models, fields, api, _
|
||||||
from datetime import datetime, timedelta
|
|
||||||
|
|
||||||
|
|
||||||
_logger = logging.getLogger(__name__)
|
class PaymentCategories(models.Model):
|
||||||
|
_name = 'hms.payment.categories'
|
||||||
|
_description = 'Payment Categories'
|
||||||
|
|
||||||
|
name = fields.Char('Name', required=True)
|
||||||
|
|||||||
@ -25,3 +25,4 @@ bross_hms.access_hms_reservations,access_hms_reservations,bross_hms.model_hms_re
|
|||||||
|
|
||||||
bross_hms.access_hms_payments,access_hms_payments,bross_hms.model_hms_payments,base.group_user,1,1,1,1
|
bross_hms.access_hms_payments,access_hms_payments,bross_hms.model_hms_payments,base.group_user,1,1,1,1
|
||||||
bross_hms.access_hms_payment_types,access_hms_payment_types,bross_hms.model_hms_payment_types,base.group_user,1,1,1,1
|
bross_hms.access_hms_payment_types,access_hms_payment_types,bross_hms.model_hms_payment_types,base.group_user,1,1,1,1
|
||||||
|
bross_hms.access_hms_payment_categories,access_hms_payment_categories,bross_hms.model_hms_payment_categories,base.group_user,1,1,1,0
|
||||||
|
|||||||
|
@ -6,13 +6,18 @@
|
|||||||
<field name="model">hms.bookings</field>
|
<field name="model">hms.bookings</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<list>
|
<list>
|
||||||
<button name="add_bank_transactions" type="object" string="Add bank transactions" class="btn btn-primary"/>
|
<field name="number" optional="show"/>
|
||||||
<field name="bid"/>
|
<field name="customer" optional="show"/>
|
||||||
<field name="number"/>
|
<field name="checkin_date" optional="show"/>
|
||||||
<field name="customerLanguage"/>
|
<field name="checkout_date" optional="show"/>
|
||||||
<field name="lastModified"/>
|
<field name="night" optional="show"/>
|
||||||
<field name="currencyId"/>
|
<field name="total_amount" optional="show"/>
|
||||||
<field name="sourceChannelName"/>
|
<field name="currency" column_invisible="1"/>
|
||||||
|
<field name="sourceChannelName" optional="show"/>
|
||||||
|
<field name="booking_date" optional="show"/>
|
||||||
|
<field name="payment_status" optional="show"/>
|
||||||
|
<field name="booking_status" optional="show"/>
|
||||||
|
<field name="status" optional="show"/>
|
||||||
</list>
|
</list>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
@ -23,10 +28,12 @@
|
|||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<form edit="1">
|
<form edit="1">
|
||||||
<header>
|
<header>
|
||||||
<button name="add_bank_transactions" type="object" string="Add bank transactions" class="btn btn-primary"/>
|
|
||||||
<field name="payment_status" widget="statusbar"/>
|
<field name="payment_status" widget="statusbar"/>
|
||||||
</header>
|
</header>
|
||||||
<sheet>
|
<sheet>
|
||||||
|
<widget name="web_ribbon" title="Completely Paid" bg_color="bg-success" invisible="payment_status != 'completely_paid'"/>
|
||||||
|
<widget name="web_ribbon" title="Partially Paid" bg_color="bg-warning" invisible="payment_status != 'partially_paid'"/>
|
||||||
|
<widget name="web_ribbon" title="Not Paid" bg_color="bg-danger" invisible="payment_status != 'not_paid'"/>
|
||||||
<div class="oe_title">
|
<div class="oe_title">
|
||||||
<h1><field name="bid"/></h1>
|
<h1><field name="bid"/></h1>
|
||||||
</div>
|
</div>
|
||||||
@ -53,7 +60,10 @@
|
|||||||
<field name="roomstays_count"/>
|
<field name="roomstays_count"/>
|
||||||
<field name="total_amount"/>
|
<field name="total_amount"/>
|
||||||
<field name="to_be_paid"/>
|
<field name="to_be_paid"/>
|
||||||
|
<field name="expected_payment"/>
|
||||||
<field name="currency" invisible="1"/>
|
<field name="currency" invisible="1"/>
|
||||||
|
<field name="booking_status"/>
|
||||||
|
<field name="status"/>
|
||||||
</group>
|
</group>
|
||||||
</group>
|
</group>
|
||||||
<group>
|
<group>
|
||||||
@ -64,7 +74,7 @@
|
|||||||
<page name="payments" string="Payments">
|
<page name="payments" string="Payments">
|
||||||
<separator string="Payments"/>
|
<separator string="Payments"/>
|
||||||
<field name="payment_ids">
|
<field name="payment_ids">
|
||||||
<list editable="bottom" create="1" delete="1" edit="1">
|
<list create="0" delete="0" edit="0">
|
||||||
<button name="open_payment_record" type="object" string="Open Payment" class="btn btn-primary"/>
|
<button name="open_payment_record" type="object" string="Open Payment" class="btn btn-primary"/>
|
||||||
<field name="hms_payment_type_id" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
<field name="hms_payment_type_id" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
<field name="amount"/>
|
<field name="amount"/>
|
||||||
@ -130,6 +140,9 @@
|
|||||||
<field name="name">Reception</field>
|
<field name="name">Reception</field>
|
||||||
<field name="res_model">hms.bookings</field>
|
<field name="res_model">hms.bookings</field>
|
||||||
<field name="view_mode">list,form</field>
|
<field name="view_mode">list,form</field>
|
||||||
|
<field name="view_ids" eval="[(5, 0, 0),
|
||||||
|
(0, 0, {'view_mode': 'list', 'view_id': ref('view_hms_bookings_tree')}),
|
||||||
|
(0, 0, {'view_mode': 'form', 'view_id': ref('view_hms_bookings_form')})]"/>
|
||||||
<field name="help" type="html">
|
<field name="help" type="html">
|
||||||
<p class="o_view_nocontent_smiling_face">
|
<p class="o_view_nocontent_smiling_face">
|
||||||
Create your first booking record.
|
Create your first booking record.
|
||||||
|
|||||||
158
bross_hms/views/room_revenue.xml
Normal file
158
bross_hms/views/room_revenue.xml
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<record id="view_hms_bookings_tree_finance" model="ir.ui.view">
|
||||||
|
<field name="name">Room Revenue</field>
|
||||||
|
<field name="model">hms.bookings</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<list>
|
||||||
|
<button name="add_bank_transactions" type="object" string="Map transactions" class="btn btn-primary"/>
|
||||||
|
<field name="number" optional="show"/>
|
||||||
|
<field name="customer" optional="show"/>
|
||||||
|
<field name="checkin_date" optional="show"/>
|
||||||
|
<field name="checkout_date" optional="show"/>
|
||||||
|
<field name="night" optional="show"/>
|
||||||
|
<field name="total_amount" optional="show"/>
|
||||||
|
<field name="expected_payment" optional="show"/>
|
||||||
|
<field name="currency" column_invisible="1"/>
|
||||||
|
<field name="sourceChannelName" optional="show"/>
|
||||||
|
<field name="booking_date" optional="show"/>
|
||||||
|
<field name="payment_status" optional="show"/>
|
||||||
|
<field name="booking_status" optional="show"/>
|
||||||
|
<field name="status" optional="show"/>
|
||||||
|
</list>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="view_hms_bookings_form_finance" model="ir.ui.view">
|
||||||
|
<field name="name">Room Revenue</field>
|
||||||
|
<field name="model">hms.bookings</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<form edit="1">
|
||||||
|
<header>
|
||||||
|
<button name="add_bank_transactions" type="object" string="Map transactions" class="btn btn-primary"/>
|
||||||
|
<field name="payment_status" widget="statusbar"/>
|
||||||
|
</header>
|
||||||
|
<sheet>
|
||||||
|
<widget name="web_ribbon" title="Completely Paid" bg_color="bg-success" invisible="payment_status != 'completely_paid'"/>
|
||||||
|
<widget name="web_ribbon" title="Partially Paid" bg_color="bg-warning" invisible="payment_status != 'partially_paid'"/>
|
||||||
|
<widget name="web_ribbon" title="Not Paid" bg_color="bg-danger" invisible="payment_status != 'not_paid'"/>
|
||||||
|
<div class="oe_title">
|
||||||
|
<h1><field name="bid"/></h1>
|
||||||
|
</div>
|
||||||
|
<group>
|
||||||
|
<group>
|
||||||
|
<field name="number"/>
|
||||||
|
<field name="customerLanguage"/>
|
||||||
|
<field name="visitPurpose"/>
|
||||||
|
<!-- <button name="json_data_store_visit" type="object" class="btn btn-primary" string="Visit Purpose"/> -->
|
||||||
|
<field name="customerComment"/>
|
||||||
|
<field name="lastModified"/>
|
||||||
|
<field name="groupName"/>
|
||||||
|
<field name="currencyId"/>
|
||||||
|
<field name="customer"/>
|
||||||
|
<field name="customerCompany"/>
|
||||||
|
<field name="source"/>
|
||||||
|
<field name="sourceChannelName"/>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="checkin_date"/>
|
||||||
|
<field name="checkout_date"/>
|
||||||
|
<field name="booking_date"/>
|
||||||
|
<field name="night"/>
|
||||||
|
<field name="roomstays_count"/>
|
||||||
|
<field name="total_amount"/>
|
||||||
|
<field name="to_be_paid"/>
|
||||||
|
<field name="expected_payment"/>
|
||||||
|
<field name="currency" invisible="1"/>
|
||||||
|
<field name="booking_status"/>
|
||||||
|
<field name="status"/>
|
||||||
|
</group>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="roomStays" widget="many2many_tags"/>
|
||||||
|
</group>
|
||||||
|
<group>
|
||||||
|
<notebook>
|
||||||
|
<page name="payments" string="Payments">
|
||||||
|
<separator string="Payments"/>
|
||||||
|
<field name="payment_ids">
|
||||||
|
<list editable="bottom" create="1" delete="1" edit="1">
|
||||||
|
<button name="open_payment_record" type="object" string="Open Payment" class="btn btn-primary"/>
|
||||||
|
<field name="hms_payment_type_id" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="amount"/>
|
||||||
|
<field name="currency_id" optional="hide" readonly="1" force_save="1"/>
|
||||||
|
<field name="exchange_rate" optional="show" readonly="1" force_save="1"/>
|
||||||
|
<field name="create_date" optional="show"/>
|
||||||
|
<field name="create_uid" optional="show"/>
|
||||||
|
<field name="write_date" optional="show"/>
|
||||||
|
<field name="write_uid" optional="show"/>
|
||||||
|
<field name="notes"/>
|
||||||
|
</list>
|
||||||
|
</field>
|
||||||
|
</page>
|
||||||
|
<page name="room_stays" string="Room Stays">
|
||||||
|
<separator string="Room Stays"/>
|
||||||
|
<field name="roomStays">
|
||||||
|
<list>
|
||||||
|
<field name="roomId" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="roomTypeId" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="guestsIds" optional="hide" widget="many2many_tags" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="checkInDateTime"/>
|
||||||
|
<field name="checkOutDateTime"/>
|
||||||
|
<field name="actualCheckInDateTime"/>
|
||||||
|
<field name="actualCheckOutDateTime"/>
|
||||||
|
<field name="status" optional="hide" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="bookingStatus" optional="hide" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="totalPrice" optional="hide"/>
|
||||||
|
</list>
|
||||||
|
</field>
|
||||||
|
</page>
|
||||||
|
<page name="reservations" string="Reservations">
|
||||||
|
<separator string="Reservations"/>
|
||||||
|
<field name="reservation_ids">
|
||||||
|
<list>
|
||||||
|
<field name="bid"/>
|
||||||
|
<field name="customerIndex" optional="hide" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="agentIndex" optional="hide" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="roomNumber" optional="hide" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="roomTypeId" optional="hide" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="guestId" optional="hide" widget="many2many_tags" options="{'no_open': True, 'no_create': True, 'no_create_edit': True, 'no_quick_create': True}"/>
|
||||||
|
<field name="checkInDateTime" optional="hide"/>
|
||||||
|
<field name="checkOutDateTime" optional="hide"/>
|
||||||
|
<field name="checkInDateTime_date"/>
|
||||||
|
<field name="checkOutDateTime_date"/>
|
||||||
|
<field name="creationDateTime_date"/>
|
||||||
|
<field name="paymentMethod" optional="hide"/>
|
||||||
|
<field name="paid" optional="hide"/>
|
||||||
|
<field name="tax" optional="hide"/>
|
||||||
|
<field name="total" optional="show"/>
|
||||||
|
<field name="balance" optional="hide"/>
|
||||||
|
<field name="currency" optional="hide"/>
|
||||||
|
</list>
|
||||||
|
</field>
|
||||||
|
</page>
|
||||||
|
</notebook>
|
||||||
|
</group>
|
||||||
|
</sheet>
|
||||||
|
</form>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="action_hms_bookings_action_finance" model="ir.actions.act_window">
|
||||||
|
<field name="name">Room Revenue</field>
|
||||||
|
<field name="res_model">hms.bookings</field>
|
||||||
|
<field name="view_mode">list,form</field>
|
||||||
|
<field name="view_ids" eval="[(5, 0, 0),
|
||||||
|
(0, 0, {'view_mode': 'list', 'view_id': ref('view_hms_bookings_tree_finance')}),
|
||||||
|
(0, 0, {'view_mode': 'form', 'view_id': ref('view_hms_bookings_form_finance')})]"/>
|
||||||
|
<field name="help" type="html">
|
||||||
|
<p class="o_view_nocontent_smiling_face">
|
||||||
|
Create your first booking record.
|
||||||
|
</p>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem name="Room Revenue" parent="finance_root_menu" id="reception_root_menu_finance" sequence="20" action="action_hms_bookings_action_finance"/>
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
27
bross_hms/views/service_categories.xml
Normal file
27
bross_hms/views/service_categories.xml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<odoo>
|
||||||
|
<data>
|
||||||
|
<record id="view_hms_payment_categories_tree" model="ir.ui.view">
|
||||||
|
<field name="name">Payment Categories</field>
|
||||||
|
<field name="model">hms.payment.categories</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<list editable="bottom">
|
||||||
|
<field name="name"/>
|
||||||
|
</list>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<record id="action_hms_payment_categories_action" model="ir.actions.act_window">
|
||||||
|
<field name="name">Payment Categories</field>
|
||||||
|
<field name="res_model">hms.payment.categories</field>
|
||||||
|
<field name="view_mode">list</field>
|
||||||
|
<field name="help" type="html">
|
||||||
|
<p class="o_view_nocontent_smiling_face">
|
||||||
|
Create your first payment category record.
|
||||||
|
</p>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
|
||||||
|
<menuitem name="Payment Categories" parent="finance_root_menu" id="finance_payment_categories" sequence="30" action="action_hms_payment_categories_action"/>
|
||||||
|
</data>
|
||||||
|
</odoo>
|
||||||
Loading…
Reference in New Issue
Block a user