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 @@ + @@ -22,29 +23,61 @@ - + - + - + - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bross_hms/views/customers.xml b/bross_hms/views/customers.xml index 1310b5c..e9f7470 100644 --- a/bross_hms/views/customers.xml +++ b/bross_hms/views/customers.xml @@ -7,8 +7,8 @@ - + diff --git a/bross_hms/views/guests.xml b/bross_hms/views/guests.xml index 9adf381..3967081 100644 --- a/bross_hms/views/guests.xml +++ b/bross_hms/views/guests.xml @@ -63,6 +63,6 @@ - + diff --git a/bross_hms/views/reservations.xml b/bross_hms/views/reservations.xml new file mode 100644 index 0000000..3d7f68c --- /dev/null +++ b/bross_hms/views/reservations.xml @@ -0,0 +1,80 @@ + + + + + Reservations + hms.reservations + + + + + + + + + Reservations + hms.reservations + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Reservations + hms.reservations + list,form + + + Create your first reservation record. + + + + + + + diff --git a/bross_hms/views/roomstays.xml b/bross_hms/views/roomstays.xml index 9af34b4..ea0f963 100644 --- a/bross_hms/views/roomstays.xml +++ b/bross_hms/views/roomstays.xml @@ -57,6 +57,6 @@ - + diff --git a/bross_hms/views/source_channels.xml b/bross_hms/views/source_channels.xml new file mode 100644 index 0000000..8e4bc54 --- /dev/null +++ b/bross_hms/views/source_channels.xml @@ -0,0 +1,27 @@ + + + + + Channel + hms.source.channel + + + + + + + + + Channel + hms.source.channel + list + + + Create your first source channel record. + + + + + + + diff --git a/bross_hms/views/status.xml b/bross_hms/views/status.xml index e618243..5bd21eb 100644 --- a/bross_hms/views/status.xml +++ b/bross_hms/views/status.xml @@ -22,7 +22,7 @@ - + @@ -47,6 +47,6 @@ - + diff --git a/docker-compose.yml b/compose.yaml similarity index 100% rename from docker-compose.yml rename to compose.yaml diff --git a/exely_integration/models/exely_raw_data.py b/exely_integration/models/exely_raw_data.py index 123ceb7..8adc44e 100644 --- a/exely_integration/models/exely_raw_data.py +++ b/exely_integration/models/exely_raw_data.py @@ -206,6 +206,31 @@ class ExelyModifiedData(models.Model): payment_data = data.pop('data', None) if payment_data: + customers_dict = {} + all_customers = payment_data.pop('customers', None) + if all_customers: + for customer in all_customers: + customer['bid'] = customer.pop('id') + customer['customerIndex'] = customer.pop('index') + customer['customerKind'] = str(customer.pop('customerKind')) + + email = customer.pop('email', None) + if email: + customer['emails'] = [(4, self.env['hms.email'].search([('email', '=', email)], limit=1).id or self.env['hms.email'].create({'email': email}).id)] + + phone = customer.pop('phone', None) + if customer: + customer['phones'] = [(4, self.env['hms.phones'].search([('phone', '=', phone)], limit=1).id or self.env['hms.phones'].create({'phone': phone}).id)] + + found_customer = self.env['hms.customer'].search([('bid', '=', customer['bid'])]) + if not found_customer: + customer_obj = self.env['hms.customer'].create(customer) + customers_dict[customer_obj.customerIndex] = customer_obj.id + else: + found_customer.write(customer) + customers_dict[customer.get('customerIndex')] = found_customer.id + + agents_dict = {} all_agents = payment_data.pop('agents', None) if all_agents: for agent in all_agents: @@ -218,11 +243,13 @@ class ExelyModifiedData(models.Model): if phone: agent['phone'] = self.env['hms.phones'].search([('phone', '=', phone)], limit=1).id or self.env['hms.phones'].create({'phone': phone}).id - if all_agents: - for agent in all_agents: - found_agent = self.env['hms.agents'].search([('bid', '=', agent['bid'])]) - if not found_agent: - self.env['hms.agents'].create(agent) + found_agent = self.env['hms.agents'].search([('bid', '=', agent['bid'])]) + if not found_agent: + customer_obj = self.env['hms.agents'].create(agent) + agents_dict[customer_obj.index] = customer_obj.id + else: + found_agent.write(agent) + agents_dict[agent.get('index')] = found_agent.id all_roomtypes = payment_data.pop('roomTypes', None) if all_roomtypes: @@ -234,6 +261,74 @@ class ExelyModifiedData(models.Model): else: found_roomtype.write(roomtype) + reservations_dict = {reservation.bid: reservation.id for reservation in self.env['hms.reservations'].search([])} + all_reservations = payment_data.pop('reservations', None) + if all_reservations: + for reservation in all_reservations: + reservation['bid'] = reservation.pop('id') + + customerindex = reservation.pop('customerIndex', None) + if customerindex: + reservation['customerIndex'] = customers_dict[customerindex] + + agentindex = reservation.pop('agentIndex', None) + if agentindex: + reservation['agentIndex'] = agents_dict[agentindex] + + currency = reservation.pop('currency', None) + if currency: + reservation['currency'] = self.env['res.currency'].search([('name', '=', currency)]).id + + bookingnumber = reservation.pop('bookingNumber', None) + if bookingnumber: + reservation['bookingNumber'] = self.env['hms.bookings'].search([('number', '=', bookingnumber)]).id + + roomnumber = reservation.pop('roomNumber', None) + if roomnumber: + reservation['roomNumber'] = self.env['hms.rooms'].search([('name', '=', roomnumber)]).id + + guestid = reservation.pop('guestId', None) + if guestid: + guestid = guestid.split('_')[1] + reservation['guestId'] = self.env['hms.guests'].search([('bid', '=', guestid)]).id + + checkindatetime = reservation.pop('checkInDateTime', None) + if checkindatetime: + reservation['checkInDateTime_date'] = datetime.strptime(checkindatetime, "%Y%m%d%H%M").strftime("%Y-%m-%d %H:%M:%S") + + checkoutdatetime = reservation.pop('checkOutDateTime', None) + if checkoutdatetime: + reservation['checkOutDateTime_date'] = datetime.strptime(checkoutdatetime, "%Y%m%d%H%M").strftime("%Y-%m-%d %H:%M:%S") + + paymentmethod = reservation.pop('paymentMethod', None) + if paymentmethod: + reservation['paymentMethod'] = self.env['hms.payment.methods'].search([('hms_id', '=', paymentmethod)]).id + + roomtypeid = reservation.pop('roomTypeId', None) + if roomtypeid: + reservation['roomTypeId'] = self.env['hms.room.types'].search([('bid', '=', roomtypeid)]).id + + creationdatetime = reservation.pop('creationDateTime', None) + if creationdatetime: + reservation['creationDateTime_date'] = datetime.strptime(creationdatetime, "%Y%m%d%H%M").strftime("%Y-%m-%d %H:%M:%S") + + bookingsource = reservation.pop('bookingSource', None) + if bookingsource: + found_bookingsource = self.env['hms.booking.source'].search([('name', '=', bookingsource)]) + if found_bookingsource: + reservation['bookingSource'] = found_bookingsource.id + else: + reservation['bookingSource'] = self.env['hms.booking.source'].create({'name': bookingsource}).id + + found_reservation = self.env['hms.reservations'].search([('bid', '=', reservation['bid'])]) + if not found_reservation: + reservation_obj =self.env['hms.reservations'].create(reservation) + else: + reservation_obj = found_reservation + + if not reservation_obj.bid in reservations_dict: + reservations_dict[reservation_obj.bid] = reservation_obj.id + all_services = payment_data.pop('services', None) if all_services: for service in all_services: @@ -249,6 +344,10 @@ class ExelyModifiedData(models.Model): service['service_date'] = datetime.strptime(service.pop('date', None), "%Y%m%d").strftime("%Y-%m-%d") + reservationid = service.pop('reservationId', None) + if reservationid: + service['reservationId'] = reservations_dict[str(reservationid)] + found_service = self.env['hms.services'].search([('bid', '=', service['bid'])]) if not found_service: self.env['hms.services'].create(service) @@ -492,154 +591,6 @@ class ExelyModifiedData(models.Model): _logger.warning(f"##############################: {i}") - # DIRECTLY FROM EXELY - # def process_exely_data(self): - # self.sync_room_numbers() - - # start_date = datetime(2024, 1, 1) - # end_date = datetime.now() - - # date_ranges = self.generate_date_ranges(start_date, end_date) - - # to_create = [] - # for status in STATES: - # for start, end in date_ranges: - # print(f"{start} to {end}") - - # data = self.get_modified_bookings(start, end, status) - # if data: - # for booking_number in data['bookingNumbers']: - # start_write = datetime.strptime(start, "%Y-%m-%dT%H:%M") - timedelta(hours=4) - # end_write = datetime.strptime(end, "%Y-%m-%dT%H:%M") - timedelta(hours=4) - # found_modified_booking = self.env['exely.modified.bookings'].search([ - # ('mod_period_start', '=', start_write), - # ('mod_period_end', '=', end_write), - # ('booking_number', '=', booking_number), - # ('status', '=', status)] - # ) - # if not found_modified_booking: - # self.env['exely.modified.bookings'].create({ - # 'mod_period_start': start_write, - # 'mod_period_end': end_write, - # 'booking_number': booking_number, - # 'status': status - # }) - - # data = self.get_booking_info(booking_number) - # if data: - # data['bid'] = data.pop('id') - # customer = data.pop('customer', None) - - # if customer: - # customer['bid'] = customer.pop('id') - - # if customer.get('emails', None): - # customer['emails'] = [(6, 0, [ - # self.env['exely.email'].search([('email', '=', email)], limit=1).id or - # self.env['exely.email'].create({'email': email}).id - # for email in customer['emails'] - # ])] - - # if customer.get('phones', None): - # customer['phones'] = [(6, 0, [ - # self.env['exely.phones'].search([('phone', '=', phone)], limit=1).id or - # self.env['exely.phones'].create({'phone': phone}).id - # for phone in customer['phones'] - # ])] - - # found_customer = self.env['exely.customer'].search([('bid', '=', customer['bid'])]) - # if found_customer: - # customer_id = found_customer.id - # else: - # customer_id = self.env['exely.customer'].create(customer).id - # data['customer'] = customer_id - - # roomstays = data.pop('roomStays', None) - # if roomstays: - # roomstays_ids = [] - # for roomstay in roomstays: - # roomstay['bid'] = roomstay.pop('id') - - # if roomstay.get('roomId', None): - # roomstay['roomId'] = self.env['exely.rooms'].search([('bid', '=', roomstay['roomId'])]).id - - # guests = roomstay.pop('guestsIds', None) - - # if guests: - # guest_ids = [] - # for guest in guests: - # guest_data = self.get_guest_info(guest) - # guest_data['bid'] = guest_data.pop('id') - - # if guest_data: - # if guest_data.get('emails', None): - # guest_data['emails'] = [(6, 0, [ - # self.env['exely.email'].search([('email', '=', email)], limit=1).id or - # self.env['exely.email'].create({'email': email}).id - # for email in guest_data['emails'] - # ])] - # if guest_data.get('phones', None): - # guest_data['phones'] = [(6, 0, [ - # self.env['exely.phones'].search([('phone', '=', phone)], limit=1).id or - # self.env['exely.phones'].create({'phone': phone}).id - # for phone in guest_data['phones'] - # ])] - - # found_guest = self.env['exely.guests'].search([('bid', '=', guest)]) - # if found_guest: - # guest_id = found_guest.id - # else: - # guest_id = self.env['exely.guests'].create(guest_data).id - # guest_ids.append(guest_id) - - # if guest_ids: - # roomstay['guestsIds'] = [(6, 0, guest_ids)] - - # amenities = roomstay.pop('amenities', None) - - # if not amenities: - # amenity_ids = [] - # for amenity in amenities: - # found_amenity = self.env['exely.amenities'].search([('name', '=', amenity)]) - # if found_amenity: - # amenity_id = found_amenity.id - # else: - # amenity_id = self.env['exely.amenities'].create({'name': amenity}).id - # amenity_ids.append(amenity_id) - - # if amenity_ids: - # roomstay['amenities'] = [(6, 0, amenity_ids)] - - # found_roomstay = self.env['exely.roomstays'].search([('bid', '=', roomstay['bid'])]) - # if found_roomstay: - # roomstay_id = found_roomstay.id - # else: - # roomstay_id = self.env['exely.roomstays'].create(roomstay).id - # roomstays_ids.append(roomstay_id) - - # if roomstays_ids: - # data['roomStays'] = [(6, 0, roomstays_ids)] - - # to_create.append(data) - # else: - # _logger.warning(f"Failed to retrieve data. Status code: {response.status_code}") - # # except Exception as e: - # # _logger.warning(f"Error processing data: {e}") - - # if to_create: - # for i in to_create: - # try: - # self.env['exely.bookings'].create(i) - # except Exception as e: - # _logger.warning(f"##############################: {i}") - # break - # cr.commit() - - - # if to_create: - # self.env['exely.bookings'].create(to_create) - - class HmsBookings(models.Model): _inherit = 'hms.bookings' _description = 'Hms Bookings'
+ Create your first booking source record. +
+ Create your first reservation record. +
+ Create your first source channel record. +