diff --git a/.env b/.env index 62ceeb9..a9c7867 100644 --- a/.env +++ b/.env @@ -14,5 +14,5 @@ DBUSER="odoo" PASSWORD="odoo" ADDONS="--addons-path=/opt/odoo/addons/,/opt/odoo/customaddons/$CUSTOMADDONS_DIR" # ARGS="" -ARGS="-d bross_hms_dev -u bross_hms,exely_integration,bross_bank_management" +ARGS="-d bross_hms_dev -u bross_hms,exely_integration,bross_bank_management,restore_buttons" # DEBUG="-m debugpy --listen 0.0.0.0:5678 --wait-for-client" diff --git a/bross_bank_management/__init__.py b/bross_bank_management/__init__.py index 0650744..9b42961 100644 --- a/bross_bank_management/__init__.py +++ b/bross_bank_management/__init__.py @@ -1 +1,2 @@ from . import models +from . import wizard diff --git a/bross_bank_management/__manifest__.py b/bross_bank_management/__manifest__.py index 4c7d680..f8bf4fe 100644 --- a/bross_bank_management/__manifest__.py +++ b/bross_bank_management/__manifest__.py @@ -12,15 +12,18 @@ 'data': [ 'security/ir.model.access.csv', 'data/bank_conf.xml', + 'data/bank_transactions_status_code.xml', + 'data/bank_transactions_subtype_code.xml', 'cron/crons.xml', 'views/main_menu.xml', 'views/bank_views.xml', 'views/bank_account_views.xml', 'views/bank_settings_views.xml', 'views/raw_movements.xml', - 'views/bank_deposits_views.xml', + 'views/bank_transactions_views.xml', 'views/service_payments_views.xml', 'views/bank_payments_views.xml', + 'wizard/add_payments_view.xml', ], 'installable': True, 'application': True, diff --git a/bross_bank_management/data/bank_transactions_status_code.xml b/bross_bank_management/data/bank_transactions_status_code.xml new file mode 100644 index 0000000..160de35 --- /dev/null +++ b/bross_bank_management/data/bank_transactions_status_code.xml @@ -0,0 +1,17 @@ + + + + + Waiting for authorization + 1 + + + Waiting for second authorization + 2 + + + Authorized + 3 + + + diff --git a/bross_bank_management/data/bank_transactions_subtype_code.xml b/bross_bank_management/data/bank_transactions_subtype_code.xml new file mode 100644 index 0000000..d3f7544 --- /dev/null +++ b/bross_bank_management/data/bank_transactions_subtype_code.xml @@ -0,0 +1,33 @@ + + + + + Transfer between own accounts + 1 + + + Currency exchange + 5 + + + Income + 20 + + + Transfer out and cash withdrawal + 30 + + + Bill, Top UP Mobile, fine payments + 31 + + + Treasury transfers + 32 + + + Other expenses + 33 + + + diff --git a/bross_bank_management/models/__init__.py b/bross_bank_management/models/__init__.py index 36e3639..de372f2 100644 --- a/bross_bank_management/models/__init__.py +++ b/bross_bank_management/models/__init__.py @@ -2,6 +2,6 @@ from . import bank from . import bank_account from . import bank_settings from . import bank_models -from . import bank_deposits +from . import bank_transactions from . import bank_payments from . import service_payments diff --git a/bross_bank_management/models/bank_deposits.py b/bross_bank_management/models/bank_deposits.py deleted file mode 100644 index f001b92..0000000 --- a/bross_bank_management/models/bank_deposits.py +++ /dev/null @@ -1,19 +0,0 @@ -from odoo import models, fields, _ - - -class BrosseBankDeposits(models.Model): - _name = 'brosse.bank.deposits' - _description = 'Bank Deposits' - - amount = fields.Monetary(string="Amount", currency_field='currency_id') - currency_id = fields.Many2one('res.currency', string='Account Currency') - description = fields.Char(string="Description") - comment = fields.Text(string="Comment") - partner_name = fields.Char(string="Partner Name") - taxpayer_name = fields.Char(string="Taxpayer Name") - - bank_account_id = fields.Many2one('brosse.bank.account', string="Bank Account") - - def action_process_selected_records(self): - print(self) - print(self.env.context) \ No newline at end of file diff --git a/bross_bank_management/models/bank_models.py b/bross_bank_management/models/bank_models.py index e00c934..359c0bf 100644 --- a/bross_bank_management/models/bank_models.py +++ b/bross_bank_management/models/bank_models.py @@ -4,8 +4,8 @@ import hashlib import json import math import os -from datetime import datetime -from odoo import models, fields, _ +from datetime import datetime, timedelta +from odoo import models, fields, api, _ from tbc_bank_integration_service_lib.client import TBCBankClient from odoo.exceptions import UserError @@ -96,15 +96,32 @@ class BankMovements(models.Model): for rec in to_process_movements: movement = json.loads(rec.json_data) - account_number = movement['accountNumber'] - account_name = movement['accountName'] + movement_id = movement['movementId'] + external_payment_id = movement['externalPaymentId'] + debit_credit = movement['debitCredit'] + value_date = movement['valueDate'] + description = movement['description'] amount = movement['amount']['amount'] currency = movement['amount']['currency'] - iban_code = account_number[4:6] - description = movement['description'] + account_number = movement['accountNumber'] + account_name = movement['accountName'] comment = movement['additionalInformation'] + document_date = movement['documentDate'] + document_number = movement['documentNumber'] partner_name = movement['partnerName'] + partner_tax_code = movement['partnerTaxCode'] + taxpayer_code = movement['taxpayerCode'] taxpayer_name = movement['taxpayerName'] + operation_code = movement['operationCode'] + exchange_rate_text = movement['exchangeRate'] + partner_personal_number = movement['partnerPersonalNumber'] + partner_document_type = movement['partnerDocumentType'] + partner_document_number = movement['partnerDocumentNumber'] + parent_external_payment_id = movement['parentExternalPaymentId'] + status_code = movement['statusCode'] + transaction_type = movement['transactionType'] + + iban_code = account_number[4:6] if movement['debitCredit'] == '0': amount = float(amount) * -1 @@ -136,14 +153,33 @@ class BankMovements(models.Model): 'account_number': account_number, }).id - self.env['brosse.bank.deposits'].create({ + self.env['brosse.bank.transactions'].create({ 'bank_account_id': bank_account_id, 'amount': amount, 'currency_id': currency_id.id, + 'exchange_rate_text': exchange_rate_text, 'description': description, 'comment': comment, 'partner_name': partner_name, - 'taxpayer_name': taxpayer_name + 'taxpayer_name': taxpayer_name, + + 'movement_id': movement_id, + 'external_payment_id': external_payment_id, + 'debit_credit': debit_credit, + 'value_date': datetime.strptime(value_date, "%Y-%m-%dT%H:%M:%S") - timedelta(hours=4), + 'document_date': datetime.strptime(document_date, "%Y-%m-%dT%H:%M:%S") - timedelta(hours=4), + 'document_number': document_number, + 'partner_tax_code': partner_tax_code, + 'taxpayer_code': taxpayer_code, + 'operation_code': operation_code, + 'partner_personal_number': partner_personal_number, + 'partner_document_type': partner_document_type, + 'partner_document_number': partner_document_number, + 'parent_external_payment_id': parent_external_payment_id, + 'status_code_id': self.env['brosse.bank.transactions.status.code'].search([('code', '=', status_code)]).id, + 'transaction_type_id': self.env['brosse.bank.transactions.subtype.code'].search([('code', '=', transaction_type)]).id, + 'account_number': account_number, + 'account_name': account_name }) # movement_id = '013762510743.2' diff --git a/bross_bank_management/models/bank_payments.py b/bross_bank_management/models/bank_payments.py index c161df7..29eb9bb 100644 --- a/bross_bank_management/models/bank_payments.py +++ b/bross_bank_management/models/bank_payments.py @@ -1,22 +1,7 @@ from odoo import models, fields, _ -class HmsBankPayments(models.Model): - _name = 'hms.bank.payments' - _description = 'Hms Bank Payments' - _rec_name = 'booking_id' +class HmsPayments(models.Model): + _inherit = 'hms.payments' - bank_payment_id = fields.Many2one(comodel_name="brosse.bank.deposits", string="Bank Payment ID") - booking_id = fields.Many2one(comodel_name="hms.bookings", string="Booking ID") - - currency_id = fields.Many2one(comodel_name="res.currency", string="Currency") - amount = fields.Monetary(string="Amount", currency_field='currency_id') - amount_left = fields.Monetary(string="Left Amount", currency_field='currency_id') - exchange_rate = fields.Float(string="Exchange Rate") - notes = fields.Text(string="Notes") - - -class HmsBookings(models.Model): - _inherit = 'hms.bookings' - - bank_payment_ids = fields.One2many(comodel_name="hms.bank.payments", inverse_name="booking_id", string="Booking Payments") + bank_payment_id = fields.Many2one(comodel_name="brosse.bank.transactions", string="Bank Payment ID") diff --git a/bross_bank_management/models/bank_transactions.py b/bross_bank_management/models/bank_transactions.py new file mode 100644 index 0000000..549508b --- /dev/null +++ b/bross_bank_management/models/bank_transactions.py @@ -0,0 +1,75 @@ +from odoo import models, fields, api, _ +from odoo.exceptions import UserError, ValidationError + + +class BrosseBankTransactionsStatusCode(models.Model): + _name = 'brosse.bank.transactions.status.code' + _description = 'Bank Transactions Status Code' + + name = fields.Char(string='Name') + code = fields.Integer(string='Code') + + +class BrosseBankTransactionsSubtypeCode(models.Model): + _name = 'brosse.bank.transactions.subtype.code' + _description = 'Bank Transactions Subtype Code' + + name = fields.Char(string='Name') + code = fields.Integer(string='Code') + + +class BrosseBankTransactions(models.Model): + _name = 'brosse.bank.transactions' + _description = 'Bank Transactions' + _rec_name = 'document_number' + + movement_id = fields.Char(string='Movement ID') + external_payment_id = fields.Char(string='External Payment ID') + debit_credit = fields.Boolean(string='Debit/Credit', help="False = Debit, True = Credit") + value_date = fields.Date(string='Value Date') + description = fields.Char(string="Description") + amount = fields.Monetary(string="Amount", currency_field='currency_id') + currency_id = fields.Many2one('res.currency', string='Currency') + account_number = fields.Char(string='Account Number') + account_name = fields.Char(string='Account Name') + comment = fields.Text(string="Comment") + document_date = fields.Date(string='Document Date') + document_number = fields.Char(string='Document Number') + partner_name = fields.Char(string="Partner Name") + partner_tax_code = fields.Char(string='Partner Tax Code') + taxpayer_code = fields.Char(string='Taxpayer Code') + taxpayer_name = fields.Char(string="Taxpayer Name") + operation_code = fields.Char(string='Operation Code') + exchange_rate = fields.Float(string="Exchange Rate") + exchange_rate_text = fields.Char(string='Exchange Rate (Text)') + partner_personal_number = fields.Char(string='Partner Personal Number') + partner_document_type = fields.Char(string='Partner Document Type') + partner_document_number = fields.Char(string='Partner Document Number') + parent_external_payment_id = fields.Char(string='Parent External Payment ID') + 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') + + bank_account_id = fields.Many2one('brosse.bank.account', string="Bank Account") + + @api.depends('document_date', 'amount') + def _compute_display_name(self): + for rec in self: + rec.display_name = f"{rec.document_date} / {rec.amount} {rec.currency_id.symbol}" if rec.document_date and rec.amount else "" + + def action_process_selected_records(self): + booking_id = self.env.context.get('booking_id') + booking = self.env['hms.bookings'].browse(booking_id) + + for rec in self: + if booking.payment_ids: + to_pay = booking.total_amount - sum(booking.payment_ids.mapped('amount')) + else: + to_pay = booking.total_amount + + self.env['hms.payments'].create({ + 'bank_payment_id': rec.id, + 'booking_id': booking.id, + 'currency_id': rec.currency_id.id, + 'amount': rec.amount, + 'exchange_rate': rec.exchange_rate, + }) diff --git a/bross_bank_management/security/ir.model.access.csv b/bross_bank_management/security/ir.model.access.csv index 9d4296e..d420549 100644 --- a/bross_bank_management/security/ir.model.access.csv +++ b/bross_bank_management/security/ir.model.access.csv @@ -3,7 +3,9 @@ access_brosse_bank_user,access_brosse_bank,model_brosse_bank,base.group_user,1,1 access_brosse_bank_account_user,access_brosse_bank_account,model_brosse_bank_account,base.group_user,1,1,1,1 access_bank_settings_admin,access_bank_settings,model_bank_settings,base.group_system,1,1,1,1 bross_bank_management.access_bank_raw_movements,access_bank_raw_movements,bross_bank_management.model_bank_raw_movements,base.group_user,1,1,1,1 -bross_bank_management.access_brosse_bank_deposits,access_brosse_bank_deposits,bross_bank_management.model_brosse_bank_deposits,base.group_user,1,1,1,1 +bross_bank_management.access_brosse_bank_transactions,access_brosse_bank_transactions,bross_bank_management.model_brosse_bank_transactions,base.group_user,1,1,1,1 bross_bank_management.access_brosse_service_payments,access_brosse_service_payments,bross_bank_management.model_brosse_service_payments,base.group_user,1,1,1,1 +bross_bank_management.access_add_payments_wizard,access_add_payments_wizard,bross_bank_management.model_add_payments_wizard,base.group_user,1,1,1,1 -bross_bank_management.access_hms_bank_payments,access_hms_bank_payments,bross_bank_management.model_hms_bank_payments,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 \ No newline at end of file diff --git a/bross_bank_management/views/bank_payments_views.xml b/bross_bank_management/views/bank_payments_views.xml index 476fd47..68f4eee 100644 --- a/bross_bank_management/views/bank_payments_views.xml +++ b/bross_bank_management/views/bank_payments_views.xml @@ -6,19 +6,8 @@ - - - - - - - - - - - - - + + diff --git a/bross_bank_management/views/bank_deposits_views.xml b/bross_bank_management/views/bank_transactions_views.xml similarity index 53% rename from bross_bank_management/views/bank_deposits_views.xml rename to bross_bank_management/views/bank_transactions_views.xml index 5214b20..8a5fa55 100644 --- a/bross_bank_management/views/bank_deposits_views.xml +++ b/bross_bank_management/views/bank_transactions_views.xml @@ -1,22 +1,23 @@ - + Brosse Bank - - + + code action = records.action_process_selected_records() - - Deposits - brosse.bank.deposits + + Transactions + brosse.bank.transactions + - + - + @@ -30,32 +31,34 @@ - - Deposits - brosse.bank.deposits + + Transactions + brosse.bank.transactions - + + + + - - - Bank Deposits - brosse.bank.deposits + + Bank Transactions + brosse.bank.transactions list - diff --git a/bross_bank_management/views/service_payments_views.xml b/bross_bank_management/views/service_payments_views.xml index a06605c..2f49e36 100644 --- a/bross_bank_management/views/service_payments_views.xml +++ b/bross_bank_management/views/service_payments_views.xml @@ -4,7 +4,7 @@ Service Payments brosse.service.payments - + diff --git a/bross_bank_management/wizard/__init__.py b/bross_bank_management/wizard/__init__.py new file mode 100644 index 0000000..7a73d4a --- /dev/null +++ b/bross_bank_management/wizard/__init__.py @@ -0,0 +1,3 @@ +# -*- coding: utf-8 -*- + +from . import add_payments \ No newline at end of file diff --git a/bross_bank_management/wizard/add_payments.py b/bross_bank_management/wizard/add_payments.py new file mode 100644 index 0000000..5d15468 --- /dev/null +++ b/bross_bank_management/wizard/add_payments.py @@ -0,0 +1,96 @@ +# -*- coding: utf-8 -*- + +from odoo import models, fields, api, _ + + +class AddPayments(models.TransientModel): + _name = "add.payments.wizard" + _description = "Add Payments Wizard" + + payment_type = fields.Many2one(comodel_name="hms.payment.types", string="Payment Type") + + @api.model + def _transaction_domain(self): + 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") + pending_transcation = fields.Boolean(string="Pending Transaction") + + amount_gel = fields.Monetary(string="Amount GEL", currency_field='gel_currency_id') + gel_currency_id = fields.Many2one('res.currency', string='Gel Currency', default=lambda self: self.env['res.currency'].search([('name', '=', 'GEL')]).id) + show_amount_gel = fields.Boolean(string="Show Amount GEL") + + amount = fields.Monetary(string="Amount", currency_field='currency_id') + currency_id = fields.Many2one('res.currency', string='Currency', default=lambda self: self.env['res.currency'].search([('name', '=', 'GEL')]).id) + + exchange_rate = fields.Float(string="Exchange Rate") + hide_exchange_rate = fields.Boolean(string="Hide Exchange Rate") + + booking_id = fields.Many2one(comodel_name="hms.bookings", string="Booking ID") + + expected_payment = fields.Monetary(string="Expected Payment", currency_field='expected_payment_currency') + expected_payment_currency = fields.Many2one('res.currency', string='Expected Payment Currency') + + pos_terminal_code = fields.Char(string="POS Terminal Code") + wire_transfer_code = fields.Char(string="Wire Transfer Code") + + @api.onchange('payment_type') + def onchange_payment_type(self): + if self.payment_type == self.env.ref('bross_hms.payment_type_1'): + self.pending_transcation = True + if self.payment_type == self.env.ref('bross_hms.payment_type_0') or not self.payment_type: + self.pending_transcation = False + + @api.onchange('transaction_id') + def onchange_transaction_id(self): + if self.transaction_id: + self.amount = self.transaction_id.amount + self.currency_id = self.transaction_id.currency_id + + @api.onchange('currency_id') + def onchange_currency_id(self): + if self.currency_id: + gel_currency = self.env['res.currency'].search([('name', '=', 'GEL')]) + if self.currency_id.id == gel_currency.id: + self.exchange_rate = 1.0 + self.amount_gel = self.amount + self.hide_exchange_rate = True + else: + self.exchange_rate = self.currency_id.rate_ids.sorted('id', reverse=True)[0].rate + self.amount_gel = self.amount * self.exchange_rate + self.show_amount_gel = True + self.hide_exchange_rate = False + + @api.onchange('exchange_rate') + def onchange_exchange_rate(self): + if self.exchange_rate: + self.amount_gel = self.amount * self.exchange_rate + + def add_payments(self): + for rec in self: + if rec.payment_type == self.env.ref('bross_hms.payment_type_0'): + pending_transcation = False + transaction_id = False + pos_terminal_code = False + wire_transfer_code = False + elif rec.payment_type == self.env.ref('bross_hms.payment_type_1'): + pending_transcation = rec.pending_transcation + transaction_id = False + pos_terminal_code = rec.pos_terminal_code + wire_transfer_code = False + else: + pending_transcation = rec.pending_transcation + transaction_id = rec.transaction_id.id if rec.transaction_id else False + pos_terminal_code = False + wire_transfer_code = rec.wire_transfer_code + + self.env['hms.payments'].create({ + 'booking_id': rec.booking_id.id, + 'currency_id': rec.currency_id.id, + 'amount': rec.amount, + 'exchange_rate': rec.exchange_rate, + 'pending_transcation': rec.pending_transcation, + 'bank_payment_id': transaction_id, + 'pos_terminal_code': pos_terminal_code, + 'wire_transfer_code': wire_transfer_code, + }) diff --git a/bross_bank_management/wizard/add_payments_view.xml b/bross_bank_management/wizard/add_payments_view.xml new file mode 100644 index 0000000..dc05fdd --- /dev/null +++ b/bross_bank_management/wizard/add_payments_view.xml @@ -0,0 +1,49 @@ + + + + + add.payments.wizard.form + add.payments.wizard + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bross_hms/__manifest__.py b/bross_hms/__manifest__.py index 58c4de6..2125d1f 100644 --- a/bross_hms/__manifest__.py +++ b/bross_hms/__manifest__.py @@ -13,6 +13,7 @@ 'security/ir.model.access.csv', # 'cron/crons.xml', 'data/payment_methods.xml', + 'data/payment_types.xml', 'data/service_kinds.xml', 'views/misc_menus.xml', 'views/main_menus.xml', @@ -32,11 +33,12 @@ 'views/booking_source.xml', 'views/bookings.xml', 'views/status.xml', + 'views/hms_payments.xml', ], 'assets': { - 'web.assets_backend': [ - 'bross_hms/static/src/scss/required.scss', - ], + # 'web.assets_backend': [ + # 'bross_hms/static/src/scss/required.scss', + # ], }, } diff --git a/bross_hms/data/payment_methods.xml b/bross_hms/data/payment_methods.xml index 05680e8..2570965 100644 --- a/bross_hms/data/payment_methods.xml +++ b/bross_hms/data/payment_methods.xml @@ -40,6 +40,6 @@ Faster payments system 9 - + diff --git a/bross_hms/data/payment_types.xml b/bross_hms/data/payment_types.xml new file mode 100644 index 0000000..9c5de4a --- /dev/null +++ b/bross_hms/data/payment_types.xml @@ -0,0 +1,14 @@ + + + + + Cash + + + POS Terminal + + + Wire Transfer + + + diff --git a/bross_hms/models/__init__.py b/bross_hms/models/__init__.py index fe2d928..5c57168 100644 --- a/bross_hms/models/__init__.py +++ b/bross_hms/models/__init__.py @@ -1,3 +1,5 @@ # -*- coding: utf-8 -*- from . import hms_models +from . import hms_payments +from . import hms_services diff --git a/bross_hms/models/hms_models.py b/bross_hms/models/hms_models.py index 38778dc..214b45a 100644 --- a/bross_hms/models/hms_models.py +++ b/bross_hms/models/hms_models.py @@ -157,6 +157,8 @@ class HmsBookings(models.Model): groupName = fields.Char(string="Group Name") currencyId = fields.Char(string="Currency ID") customer = fields.Many2one(comodel_name="hms.customer", string="Customer") + + payment_ids = fields.One2many(comodel_name="hms.payments", inverse_name="booking_id", string="Booking Payments") roomStays = fields.One2many(comodel_name="hms.roomstays", inverse_name="bookings_id", string="RoomStays") @@ -211,19 +213,58 @@ class HmsBookings(models.Model): 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' - def add_bank_deposits(self): + # def add_bank_transactions(self): + # return { + # 'name': _('Add bank transactions'), + # 'type': 'ir.actions.act_window', + # 'view_mode': 'list', + # 'res_model': 'brosse.bank.transactions', + # 'view_id': self.env.ref('bross_bank_management.view_brosse_bank_transactions_operation_list').id, + # 'target': 'new', + # 'context': { + # 'booking_id': self.id, + # 'create': False, + # 'edit': False + # } + # } + + def add_bank_transactions(self): + gel_currency_id = self.env['res.currency'].search([('name', '=', 'GEL')]) + wire_transfer_id = self.env.ref('bross_hms.payment_type_2').id + + expected_payment = self.total_amount + + 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 + + expected_payment = expected_payment - paid_amount return { - 'name': 'Add bank deposit', + 'name': _('Add Payments'), 'type': 'ir.actions.act_window', - 'view_mode': 'list', - 'view_type': 'form', - 'res_model': 'brosse.bank.deposits', - # 'res_id': self.id, - 'view_id': self.env.ref('bross_bank_management.view_brosse_bank_deposits_list').id, + 'view_mode': 'form', + 'res_model': 'add.payments.wizard', + 'view_id': self.env.ref('bross_bank_management.add_payments_wizard_view_form').id, 'target': 'new', 'context': { - 'booking_id': self.id, - 'create': False, + 'default_payment_type': wire_transfer_id, + 'default_booking_id': self.id, + 'default_gel_currency_id': gel_currency_id.id, + 'default_expected_payment': expected_payment, + 'default_expected_payment_currency': self.currency.id, } } diff --git a/bross_hms/models/hms_payments.py b/bross_hms/models/hms_payments.py new file mode 100644 index 0000000..c49d9a2 --- /dev/null +++ b/bross_hms/models/hms_payments.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- + +import requests +import logging +import json +from odoo import models, fields, api, _ +from datetime import datetime, timedelta + + +_logger = logging.getLogger(__name__) + + +class HmsPaymentTypes(models.Model): + _name = 'hms.payment.types' + _description = 'Hms Payment Types' + _rec_name = 'name' + + name = fields.Char(string="Name") + + +class HmsPayments(models.Model): + _name = 'hms.payments' + _description = 'Hms Payments' + _rec_name = 'booking_id' + + booking_id = fields.Many2one(comodel_name="hms.bookings", string="Booking ID") + + hms_service_id = fields.Many2one(comodel_name="hms.services", string="Service") + + hms_payment_type_id = fields.Many2one(comodel_name="hms.payment.types", string="Payment Type") + + pending_transcation = fields.Boolean(string="Pending Transaction") + + currency_id = fields.Many2one(comodel_name="res.currency", string="Currency") + amount = fields.Monetary(string="Amount", currency_field='currency_id') + exchange_rate = fields.Float(string="Exchange Rate") + notes = fields.Text(string="Notes") + + pos_terminal_code = fields.Char(string="POS Terminal Code") + wire_transfer_code = fields.Char(string="Wire Transfer Code") + + def open_payment_record(self): + self.ensure_one() + return { + 'name': _('Payment'), + 'view_mode': 'form', + 'res_model': 'hms.payments', + 'type': 'ir.actions.act_window', + 'view_id': self.env.ref('bross_hms.view_hms_payments_form').id, + 'res_id': self.id, + 'target': 'new', + 'context': { + 'create': False, + 'edit': False + } + } \ No newline at end of file diff --git a/bross_hms/models/hms_services.py b/bross_hms/models/hms_services.py new file mode 100644 index 0000000..1a4a258 --- /dev/null +++ b/bross_hms/models/hms_services.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- + +import requests +import logging +import json +from odoo import models, fields, api, _ +from datetime import datetime, timedelta + + +_logger = logging.getLogger(__name__) + diff --git a/bross_hms/security/ir.model.access.csv b/bross_hms/security/ir.model.access.csv index 7b6d80f..9b0dbf3 100644 --- a/bross_hms/security/ir.model.access.csv +++ b/bross_hms/security/ir.model.access.csv @@ -21,4 +21,7 @@ bross_hms.access_hms_service_vat_kinds,access_hms_service_vat_kinds,bross_hms.mo bross_hms.access_hms_services,access_hms_services,bross_hms.model_hms_services,base.group_user,1,1,1,1 bross_hms.access_hms_payment_methods,access_hms_payment_methods,bross_hms.model_hms_payment_methods,base.group_user,1,1,1,1 bross_hms.access_hms_booking_source,access_hms_booking_source,bross_hms.model_hms_booking_source,base.group_user,1,1,1,1 -bross_hms.access_hms_reservations,access_hms_reservations,bross_hms.model_hms_reservations,base.group_user,1,1,1,1 \ No newline at end of file +bross_hms.access_hms_reservations,access_hms_reservations,bross_hms.model_hms_reservations,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 diff --git a/bross_hms/views/bookings.xml b/bross_hms/views/bookings.xml index 461c8ea..ea1342e 100644 --- a/bross_hms/views/bookings.xml +++ b/bross_hms/views/bookings.xml @@ -6,13 +6,13 @@ hms.bookings + - @@ -21,9 +21,10 @@ Reception hms.bookings - + - + + @@ -52,6 +53,7 @@ + @@ -59,6 +61,23 @@ + + + + + + + + + + + + + + + + + diff --git a/bross_hms/views/hms_payments.xml b/bross_hms/views/hms_payments.xml new file mode 100644 index 0000000..706b7fe --- /dev/null +++ b/bross_hms/views/hms_payments.xml @@ -0,0 +1,36 @@ + + + + + Payments + hms.payments + + + + + + + + + + + + + Payments + hms.payments + + + + + + + + + + + + + + + + diff --git a/compose.yaml b/compose.yaml index 1ecf99d..9faf3cc 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1,6 +1,6 @@ services: db: - image: postgres:17.0-alpine3.20 + image: postgres:17.1-alpine3.20 restart: unless-stopped command: > -c max_wal_size=4GB @@ -30,7 +30,7 @@ services: - logging_jobname=containerlogs nginx: - image: nginx:1.27.0-alpine3.19-slim + image: nginx:1.27.2-alpine3.20-slim restart: unless-stopped env_file: .env diff --git a/compose_dev.yaml b/compose_dev.yaml index f8dad90..93ac4c4 100644 --- a/compose_dev.yaml +++ b/compose_dev.yaml @@ -1,6 +1,6 @@ services: db: - image: postgres:17.0-alpine3.20 + image: postgres:17.1-alpine3.20 restart: unless-stopped command: > -c max_wal_size=4GB @@ -32,7 +32,7 @@ services: - logging_jobname=containerlogs nginx: - image: nginx:1.27.0-alpine3.19-slim + image: nginx:1.27.2-alpine3.20-slim restart: unless-stopped ports: - 3080:80 diff --git a/restore_buttons/LICENSE b/restore_buttons/LICENSE new file mode 100644 index 0000000..b01eaf1 --- /dev/null +++ b/restore_buttons/LICENSE @@ -0,0 +1,27 @@ +Odoo Proprietary License v1.0 + +This software and associated files (the "Software") may only be used (executed, +modified, executed after modifications) if you have purchased a valid license +from the authors, typically via Odoo Apps, or if you have received a written +agreement from the authors of the Software (see the COPYRIGHT file). + +You may develop Odoo modules that use the Software as a library (typically +by depending on it, importing it and using its resources), but without copying +any source code or material from the Software. You may distribute those +modules under the license of your choice, provided that this license is +compatible with the terms of the Odoo Proprietary License (For example: +LGPL, MIT, or proprietary licenses similar to this one). + +It is forbidden to publish, distribute, sublicense, or sell copies of the Software +or modified copies of the Software. + +The above copyright notice and this permission notice must be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. diff --git a/restore_buttons/__init__.py b/restore_buttons/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/restore_buttons/__manifest__.py b/restore_buttons/__manifest__.py new file mode 100644 index 0000000..0744e89 --- /dev/null +++ b/restore_buttons/__manifest__.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +{ + 'name': "Restore Action, Save & Discard Buttons", + 'summary': """Restore old actions, save and discard buttons.""", + 'description': """Restore old actions, save and discard buttons.""", + 'author': "mgite", + # 'website': "https://example.com", + 'price': '5.5', + 'currency': 'EUR', + 'support': 'matemana2608@gmail.com', + 'license': 'OPL-1', + 'category': 'Services', + 'version': '18.0.1.0.0', + 'images': ['static/description/wallpaper.png'], + 'depends': [ + 'web', + ], + 'data': [], + 'assets': { + 'web.assets_backend': [ + 'restore_buttons/static/src/scss/*.scss', + 'restore_buttons/static/src/xml/*.xml', + ], + }, + 'installable': True, + 'application': True, + 'auto_install': False, + 'bootstrap': True, +} diff --git a/restore_buttons/static/description/gifs/action_save_discard.gif b/restore_buttons/static/description/gifs/action_save_discard.gif new file mode 100644 index 0000000..27f72ac Binary files /dev/null and b/restore_buttons/static/description/gifs/action_save_discard.gif differ diff --git a/restore_buttons/static/description/icon.png b/restore_buttons/static/description/icon.png new file mode 100644 index 0000000..03edb1b Binary files /dev/null and b/restore_buttons/static/description/icon.png differ diff --git a/restore_buttons/static/description/index.html b/restore_buttons/static/description/index.html new file mode 100644 index 0000000..f44fa5d --- /dev/null +++ b/restore_buttons/static/description/index.html @@ -0,0 +1,26 @@ + + + + + + Restore Buttons + + + + + + + + + Demonstration + + + Restore old actions, save and discard buttons + + + + + + + + diff --git a/restore_buttons/static/description/wallpaper.png b/restore_buttons/static/description/wallpaper.png new file mode 100644 index 0000000..ada9435 Binary files /dev/null and b/restore_buttons/static/description/wallpaper.png differ diff --git a/restore_buttons/static/src/scss/actions_dropdown.scss b/restore_buttons/static/src/scss/actions_dropdown.scss new file mode 100644 index 0000000..6b2c1f8 --- /dev/null +++ b/restore_buttons/static/src/scss/actions_dropdown.scss @@ -0,0 +1,44 @@ +.o-dropdown { + margin-left: 10px; + + .dropdown-toggle { + width: 100%; + + &.dropdown-toggle.d-print-none { + background-color: transparent; + border-color: $primary; + color: $primary; + + &:hover { + filter: brightness(0.9); + background-color: $primary; + border-color: $primary; + color: white; + } + } + + .dropdown_actions_button { + width: 100%; + font-weight: 500; + color: white; + display: inline-block; + text-align: center; + vertical-align: middle; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.3125rem 0.625rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 1; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + text-transform: uppercase; + font-family: "Your Font Stack Here"; + cursor: pointer; + } + } +} + +.o_control_panel_breadcrumbs { + flex-wrap: wrap; +} \ No newline at end of file diff --git a/restore_buttons/static/src/xml/actions_dropdown.xml b/restore_buttons/static/src/xml/actions_dropdown.xml new file mode 100644 index 0000000..a87a1e2 --- /dev/null +++ b/restore_buttons/static/src/xml/actions_dropdown.xml @@ -0,0 +1,8 @@ + + + + + Actions + + + diff --git a/restore_buttons/static/src/xml/breadcrumbs.xml b/restore_buttons/static/src/xml/breadcrumbs.xml new file mode 100644 index 0000000..7c56980 --- /dev/null +++ b/restore_buttons/static/src/xml/breadcrumbs.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/restore_buttons/static/src/xml/save_discard.xml b/restore_buttons/static/src/xml/save_discard.xml new file mode 100644 index 0000000..d810632 --- /dev/null +++ b/restore_buttons/static/src/xml/save_discard.xml @@ -0,0 +1,10 @@ + + + + Discard + + + Save + + +
+ Restore old actions, save and discard buttons +