diff --git a/bross.py b/bross.py index 9cf069d..1425421 100755 --- a/bross.py +++ b/bross.py @@ -18,7 +18,7 @@ headers = { # response = requests.get("https://connect.hopenapi.com/api/exelypms/v1/analytics/services/cancelled?startDate=20241008&endDate=20241008&dateKind=0", headers=headers) # PAYMENTS TIME PERIOD -# response = requests.get("https://connect.hopenapi.com/api/exelypms/v1/analytics/payments?startDateTime=202408010000&endDateTime=202408072359&includeServices=true", headers=headers) +response = requests.get("https://connect.hopenapi.com/api/exelypms/v1/analytics/payments?startDateTime=202408010000&endDateTime=202408072359&includeServices=true", headers=headers) # BOOKINGS TIME PERIOD # response = requests.get("https://connect.hopenapi.com/api/exelypms/v1/bookings?modifiedFrom=2024-01-01T00:00&modifiedTo=2024-01-30T23:59&state=Active", headers=headers) @@ -26,7 +26,7 @@ headers = { # BOOKING # response = requests.get("https://connect.hopenapi.com/api/exelypms/v1/bookings/20241009-503875-1220777184", headers=headers) # Room move -response = requests.get("https://connect.hopenapi.com/api/exelypms/v1/bookings/20241106-503875-1217522037", headers=headers) # Cancelled booking +# response = requests.get("https://connect.hopenapi.com/api/exelypms/v1/bookings/20241106-503875-1217522037", headers=headers) # Cancelled booking # response = requests.get("https://connect.hopenapi.com/api/exelypms/v1/bookings/20240727-503875-1216958604", headers=headers) # INVOICES diff --git a/bross_bank_management/__manifest__.py b/bross_bank_management/__manifest__.py index 1e96a04..4c7d680 100644 --- a/bross_bank_management/__manifest__.py +++ b/bross_bank_management/__manifest__.py @@ -20,6 +20,7 @@ 'views/raw_movements.xml', 'views/bank_deposits_views.xml', 'views/service_payments_views.xml', + 'views/bank_payments_views.xml', ], 'installable': True, 'application': True, diff --git a/bross_bank_management/models/__init__.py b/bross_bank_management/models/__init__.py index dfb6d80..36e3639 100644 --- a/bross_bank_management/models/__init__.py +++ b/bross_bank_management/models/__init__.py @@ -3,4 +3,5 @@ from . import bank_account from . import bank_settings from . import bank_models from . import bank_deposits +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 index f67973e..f001b92 100644 --- a/bross_bank_management/models/bank_deposits.py +++ b/bross_bank_management/models/bank_deposits.py @@ -13,3 +13,7 @@ class BrosseBankDeposits(models.Model): 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_payments.py b/bross_bank_management/models/bank_payments.py new file mode 100644 index 0000000..c161df7 --- /dev/null +++ b/bross_bank_management/models/bank_payments.py @@ -0,0 +1,22 @@ +from odoo import models, fields, _ + + +class HmsBankPayments(models.Model): + _name = 'hms.bank.payments' + _description = 'Hms Bank Payments' + _rec_name = 'booking_id' + + 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") diff --git a/bross_bank_management/security/ir.model.access.csv b/bross_bank_management/security/ir.model.access.csv index cbd67e8..9d4296e 100644 --- a/bross_bank_management/security/ir.model.access.csv +++ b/bross_bank_management/security/ir.model.access.csv @@ -4,4 +4,6 @@ access_brosse_bank_account_user,access_brosse_bank_account,model_brosse_bank_acc 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_service_payments,access_brosse_service_payments,bross_bank_management.model_brosse_service_payments,base.group_user,1,1,1,1 \ No newline at end of file +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_hms_bank_payments,access_hms_bank_payments,bross_bank_management.model_hms_bank_payments,base.group_user,1,1,1,1 diff --git a/bross_bank_management/views/bank_deposits_views.xml b/bross_bank_management/views/bank_deposits_views.xml index 5154d42..5214b20 100644 --- a/bross_bank_management/views/bank_deposits_views.xml +++ b/bross_bank_management/views/bank_deposits_views.xml @@ -1,5 +1,35 @@ + + Brosse Bank + + + code + + action = records.action_process_selected_records() + + + + + Deposits + brosse.bank.deposits + + +
+
+ + + + + + + +
+
+
+ + Deposits brosse.bank.deposits diff --git a/bross_bank_management/views/bank_payments_views.xml b/bross_bank_management/views/bank_payments_views.xml new file mode 100644 index 0000000..476fd47 --- /dev/null +++ b/bross_bank_management/views/bank_payments_views.xml @@ -0,0 +1,27 @@ + + + + Reservations + hms.bookings + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bross_hms/__manifest__.py b/bross_hms/__manifest__.py index f7a63d5..58c4de6 100644 --- a/bross_hms/__manifest__.py +++ b/bross_hms/__manifest__.py @@ -12,6 +12,7 @@ 'data': [ 'security/ir.model.access.csv', # 'cron/crons.xml', + 'data/payment_methods.xml', 'data/service_kinds.xml', 'views/misc_menus.xml', 'views/main_menus.xml', @@ -22,10 +23,13 @@ 'views/room_types.xml', 'views/floor.xml', 'views/services.xml', + 'views/reservations.xml', 'views/guests.xml', 'views/amenities.xml', 'views/roomstays.xml', 'views/agents.xml', + 'views/source_channels.xml', + 'views/booking_source.xml', 'views/bookings.xml', 'views/status.xml', ], diff --git a/bross_hms/data/payment_methods.xml b/bross_hms/data/payment_methods.xml new file mode 100644 index 0000000..05680e8 --- /dev/null +++ b/bross_hms/data/payment_methods.xml @@ -0,0 +1,45 @@ + + + + + unknown + 0 + + + bank card + 1 + + + e-payment + 2 + + + bank transfer for legal entities + 3 + + + payment at check-in + 4 + + + bank transfer for individuals + 5 + + + external payment system + 6 + + + bank card guarantee + 7 + + + installment payment + 8 + + + Faster payments system + 9 + + + diff --git a/bross_hms/models/hms_models.py b/bross_hms/models/hms_models.py index 63e4a85..8685f0b 100644 --- a/bross_hms/models/hms_models.py +++ b/bross_hms/models/hms_models.py @@ -2,6 +2,7 @@ import requests import logging +import json from odoo import models, fields, api, _ from datetime import datetime, timedelta @@ -42,6 +43,19 @@ class HmsCustomer(models.Model): emails = fields.Many2many(comodel_name="hms.email", string="Emails") phones = fields.Many2many(comodel_name="hms.phones", string="Phones") gender = fields.Char(string="Gender") + + customerIndex = fields.Integer(string="customerIndex", index=True) + name = fields.Char(string="Name") + customerKind = fields.Selection([('0', 'Company'), ('1', 'individual')], string="CustomerType") + inn = fields.Char(string="Tax ID") + kpp = fields.Char(string="Tax Registration Reason Code") + legalAddress = fields.Char(string="Legal Address") + mailingAddress = fields.Char(string="Mailing Address") + + @api.depends('firstName', 'lastName') + def _compute_display_name(self): + for customer in self: + customer.display_name = f"{customer.firstName} {customer.lastName}" if customer.firstName and customer.lastName else "" class HmsRooms(models.Model): @@ -127,8 +141,8 @@ class HmsSourceChannel(models.Model): _rec_name = 'name' name = fields.Char(string="Name") - - + + class HmsBookings(models.Model): _name = 'hms.bookings' _description = 'Hms Bookings' @@ -148,6 +162,55 @@ class HmsBookings(models.Model): source = fields.Json(string="RoomStays (Json)") sourceChannelName = fields.Many2one(comodel_name="hms.source.channel", string="Source Channel Name") + checkin_date = fields.Datetime(string="Checkin Date", compute="_compute_checkin_checkout_date", store=True) + checkout_date = fields.Datetime(string="Checkout Date", compute="_compute_checkin_checkout_date", store=True) + booking_date = fields.Datetime(string="Booking Date") + night = fields.Integer(string="Night", compute="_compute_checkin_checkout_date", store=True) + roomstays_count = fields.Integer(string="Roomstays Count", compute="_compute_checkin_checkout_date", store=True) + total_amount = fields.Float(string="Total Amount", compute="_compute_checkin_checkout_date", store=True) + to_be_paid = fields.Float(string="To Pay Amount", compute="_compute_checkin_checkout_date", store=True) + + @api.depends('roomStays') + def _compute_checkin_checkout_date(self): + for booking in self: + checkin_dates = booking.roomStays.mapped('checkInDateTime') + checkout_dates = booking.roomStays.mapped('checkOutDateTime') + + if checkin_dates: + checkin_date = min(datetime.fromisoformat(date) for date in checkin_dates) - timedelta(hours=4) + else: + checkin_date = False + + if checkout_dates: + checkout_date = max(datetime.fromisoformat(date) for date in checkout_dates) - timedelta(hours=4) + else: + checkout_date = False + + booking.checkin_date = checkin_date + booking.checkout_date = checkout_date + if checkin_date and checkout_date: + booking.night = (checkout_date - checkin_date).days if checkout_date.time() > checkin_date.time() else (checkout_date - checkin_date).days + 1 + booking.roomstays_count = len(booking.roomStays) + booking.total_amount = sum(stay.totalPrice.get('amount', 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) + + + def add_bank_deposits(self): + return { + 'name': 'Add bank deposit', + '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, + 'target': 'new', + 'context': { + 'booking_id': self.id, + 'create': False, + } + } + class HmsStatus(models.Model): _name = 'hms.status' @@ -185,7 +248,7 @@ class HmsServiceKinds(models.Model): _rec_name = 'name' name = fields.Char(string="Name") - hms_id = fields.Integer(string="ID") + hms_id = fields.Integer(string="HMS ID") class HmsServiceVatKinds(models.Model): @@ -194,7 +257,7 @@ class HmsServiceVatKinds(models.Model): _rec_name = 'name' name = fields.Char(string="Name") - hms_id = fields.Integer(string="ID") + hms_id = fields.Integer(string="HMS ID") class HmsServices(models.Model): @@ -202,7 +265,7 @@ class HmsServices(models.Model): _description = 'Hms Services' _rec_name = 'bid' - bid = fields.Char(string="ID") + bid = fields.Char(string="Service ID") kind = fields.Many2one(comodel_name="hms.service.kinds", string="Kind") name = fields.Char(string="Name") amount = fields.Float(string="Amount") @@ -211,6 +274,59 @@ class HmsServices(models.Model): vat = fields.Float(string="VAT") quantity = fields.Integer(string="Quantity") service_date = fields.Datetime(string="Date") - reservationId = fields.Char(string="Reservation") + reservationId = fields.Many2one(comodel_name="hms.reservations", string="Reservation ID") optionCategory = fields.Char(string="Option Category") - isIncluded = fields.Boolean(string="Is Included") \ No newline at end of file + isIncluded = fields.Boolean(string="Is Included") + + +class HmsPaymentMethods(models.Model): + _name = 'hms.payment.methods' + _description = 'Hms Payment Methods' + _rec_name = 'name' + + name = fields.Char(string="Name") + hms_id = fields.Integer(string="HMS ID") + + +class HmsBookingSource(models.Model): + _name = 'hms.booking.source' + _description = 'Hms Booking Source' + _rec_name = 'name' + + name = fields.Char(string="Name") + + +class HmsReservations(models.Model): + _name = 'hms.reservations' + _description = 'Hms Reservations' + + bid = fields.Char(string="Reservation ID") + customerIndex = fields.Many2one(comodel_name="hms.customer", string="Customer") + agentIndex = fields.Many2one(comodel_name="hms.agents", string="Agent") + currency = fields.Many2one(comodel_name="res.currency", string="Currency") + currencyRate = fields.Float(string="Currency Rate", digits=(16, 4)) + bookingNumber = fields.Many2one(comodel_name="hms.bookings", string="Booking Number") + roomNumber = fields.Many2one(comodel_name="hms.rooms", string="Room Number") + guestId = fields.Many2one(comodel_name="hms.guests", string="Guest ID") + guestName = fields.Char(string="Guest Name") + guestCount = fields.Integer(string="Guest Count") + checkInDateTime = fields.Char(string="Check-In Char") + checkOutDateTime = fields.Char(string="Check-Out Char") + checkInDateTime_date = fields.Datetime(string="Check-In") + checkOutDateTime_date = fields.Datetime(string="Check-Out") + permitNumber = fields.Char(string="Permit Number") + isDeparted = fields.Boolean(string="Is Departed", default=False) + isArrived = fields.Boolean(string="Is Arrived", default=False) + paymentMethod = fields.Integer(string="Payment Method") + roomTypeId = fields.Many2one(comodel_name="hms.room.types", string="Room Type ID") + customerCompany = fields.Char(string="Customer Company") + payerCompany = fields.Char(string="Payer Company") + total = fields.Monetary(string="Total", currency_field='currency') + tax = fields.Monetary(string="Tax", currency_field='currency') + paid = fields.Monetary(string="Paid", currency_field='currency') + balance = fields.Monetary(string="Balance", currency_field='currency') + creationDateTime = fields.Char(string="Creation Char") + creationDateTime_date = fields.Datetime(string="Creation") + folioNumber = fields.Char(string="Folio Number") + marketCode = fields.Json(string="Market Code") + bookingSource = fields.Many2one(comodel_name="hms.booking.source", string="Booking Source") \ No newline at end of file diff --git a/bross_hms/security/ir.model.access.csv b/bross_hms/security/ir.model.access.csv index 3275794..7b6d80f 100644 --- a/bross_hms/security/ir.model.access.csv +++ b/bross_hms/security/ir.model.access.csv @@ -18,4 +18,7 @@ bross_hms.access_hms_booking_status,access_hms_booking_status,bross_hms.model_hm bross_hms.access_hms_service_kinds,access_hms_service_kinds,bross_hms.model_hms_service_kinds,base.group_user,1,1,1,1 bross_hms.access_hms_service_vat_kinds,access_hms_service_vat_kinds,bross_hms.model_hms_service_vat_kinds,base.group_user,1,1,1,1 -bross_hms.access_hms_services,access_hms_services,bross_hms.model_hms_services,base.group_user,1,1,1,1 \ No newline at end of file +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 diff --git a/bross_hms/views/agents.xml b/bross_hms/views/agents.xml index 7374268..f748951 100644 --- a/bross_hms/views/agents.xml +++ b/bross_hms/views/agents.xml @@ -22,6 +22,6 @@ - +
diff --git a/bross_hms/views/amenities.xml b/bross_hms/views/amenities.xml index c5eeb33..da25a7a 100644 --- a/bross_hms/views/amenities.xml +++ b/bross_hms/views/amenities.xml @@ -22,6 +22,6 @@ - + diff --git a/bross_hms/views/booking_source.xml b/bross_hms/views/booking_source.xml new file mode 100644 index 0000000..4743c7a --- /dev/null +++ b/bross_hms/views/booking_source.xml @@ -0,0 +1,27 @@ + + + + + Booking Source + hms.booking.source + + + + + + + + + Booking Source + hms.booking.source + list + +

+ Create your first booking source record. +

+
+
+ + +
+
diff --git a/bross_hms/views/bookings.xml b/bross_hms/views/bookings.xml index cc4d219..bffe8c1 100644 --- a/bross_hms/views/bookings.xml +++ b/bross_hms/views/bookings.xml @@ -12,6 +12,7 @@ +