diff --git a/hotel/models/hotel_folio.py b/hotel/models/hotel_folio.py index 814428784..77aeabf08 100644 --- a/hotel/models/hotel_folio.py +++ b/hotel/models/hotel_folio.py @@ -134,6 +134,9 @@ class HotelFolio(models.Model): ('web', 'Web')], 'Sales Channel', default='door') user_id = fields.Many2one('res.users', string='Salesperson', index=True, track_visibility='onchange', default=lambda self: self.env.user) + tour_operator_id = fields.Many2one('res.partner', + 'Tour Operator', + domain=[('is_tour_operator', '=', True)]) date_order = fields.Datetime( string='Order Date', required=True, readonly=True, index=True, diff --git a/hotel/models/hotel_reservation.py b/hotel/models/hotel_reservation.py index 47b17924c..f9fcd328c 100644 --- a/hotel/models/hotel_reservation.py +++ b/hotel/models/hotel_reservation.py @@ -210,6 +210,7 @@ class HotelReservation(models.Model): required=True, track_visibility='onchange') partner_id = fields.Many2one(related='folio_id.partner_id') + tour_operator_id = fields.Many2one(related='folio_id.tour_operator_id') partner_invoice_id = fields.Many2one(related='folio_id.partner_invoice_id') partner_invoice_vat = fields.Char(related="partner_invoice_id.vat") partner_invoice_name = fields.Char(related="partner_invoice_id.name") diff --git a/hotel/models/inherited_res_partner.py b/hotel/models/inherited_res_partner.py index 0979bcfb8..0e41db720 100644 --- a/hotel/models/inherited_res_partner.py +++ b/hotel/models/inherited_res_partner.py @@ -3,6 +3,7 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). from odoo import api, fields, models from odoo.osv.expression import get_unaccent_wrapper +from odoo.exceptions import ValidationError import logging _logger = logging.getLogger(__name__) @@ -29,49 +30,23 @@ class ResPartner(models.Model): folios_count = fields.Integer('Folios', compute='_compute_folios_count') unconfirmed = fields.Boolean('Unconfirmed', default=True) main_partner_id = fields.Many2one('res.partner', string='Destination Partner fusion') + is_tour_operator = fields.Boolean('Is Tour Operator') @api.model def name_search(self, name, args=None, operator='ilike', limit=100): - result = super(ResPartner, self).name_search(name, args=None, - operator='ilike', - limit=100) - if args is None: + if not args: args = [] - if name and operator in ('=', 'ilike', '=ilike', 'like', '=like'): - self.check_access_rights('read') - where_query = self._where_calc(args) - self._apply_ir_rules(where_query, 'read') - from_clause, where_clause, where_clause_params = where_query.get_sql() - where_str = where_clause and (" WHERE %s AND " % where_clause) or ' WHERE ' - - # search on the name of the contacts and of its company - search_name = name - if operator in ('ilike', 'like'): - search_name = '%%%s%%' % name - if operator in ('=ilike', '=like'): - operator = operator[1:] - - unaccent = get_unaccent_wrapper(self.env.cr) - - query = """SELECT id - FROM res_partner - {where} ({phone} {operator} {percent} - OR {mobile} {operator} {percent}) - ORDER BY {display_name} {operator} {percent} desc, - {display_name} - """.format(where=where_str, - operator=operator, - phone=unaccent('phone'), - display_name=unaccent('display_name'), - mobile=unaccent('mobile'), - percent=unaccent('%s'),) - - where_clause_params += [search_name]*3 - if limit: - query += ' limit %s' - where_clause_params.append(limit) - self.env.cr.execute(query, where_clause_params) - partner_ids = [row[0] for row in self.env.cr.fetchall()] - if partner_ids: - result += self.browse(partner_ids).name_get() - return result + domain = ['|', '|', ('phone', operator, name), + ('mobile', operator, name), ('email', operator, name), + ] + partners = self.search(domain + args, limit=limit,) + res = partners.name_get() + if limit: + limit_rest = limit - len(partners) + else: + limit_rest = limit + if limit_rest or not limit: + args += [('id', 'not in', partners.ids)] + res += super(ResPartner, self).name_search( + name, args=args, operator=operator, limit=limit_rest) + return res diff --git a/hotel/views/hotel_folio_views.xml b/hotel/views/hotel_folio_views.xml index 420a7fb70..0409be154 100644 --- a/hotel/views/hotel_folio_views.xml +++ b/hotel/views/hotel_folio_views.xml @@ -84,6 +84,8 @@ + @@ -287,6 +289,7 @@ + - + + diff --git a/hotel/views/hotel_reservation_views.xml b/hotel/views/hotel_reservation_views.xml index 55fe8f0c9..25fbfbf69 100644 --- a/hotel/views/hotel_reservation_views.xml +++ b/hotel/views/hotel_reservation_views.xml @@ -192,26 +192,28 @@ attrs="{'invisible': [('reservation_type','in',('out'))]}"/> + + - - - + + @@ -545,6 +547,7 @@ + diff --git a/hotel/views/inherited_res_partner_views.xml b/hotel/views/inherited_res_partner_views.xml index 435f46a97..03f43d37d 100644 --- a/hotel/views/inherited_res_partner_views.xml +++ b/hotel/views/inherited_res_partner_views.xml @@ -32,6 +32,10 @@ + + + + diff --git a/hotel_l10n_es/models/inherit_res_partner.py b/hotel_l10n_es/models/inherit_res_partner.py index 48395cb4b..7d2eed286 100755 --- a/hotel_l10n_es/models/inherit_res_partner.py +++ b/hotel_l10n_es/models/inherit_res_partner.py @@ -54,47 +54,23 @@ class ResPartner(models.Model): @api.model def name_search(self, name, args=None, operator='ilike', limit=100): - result = super(ResPartner, self).name_search(name, args=None, - operator='ilike', - limit=100) - if args is None: + if not args: args = [] - if name and operator in ('=', 'ilike', '=ilike', 'like', '=like'): - self.check_access_rights('read') - where_query = self._where_calc(args) - self._apply_ir_rules(where_query, 'read') - from_clause, where_clause, where_clause_params = where_query.get_sql() - where_str = where_clause and (" WHERE %s AND " % where_clause) or ' WHERE ' - - # search on the name of the contacts and of its company - search_name = name - if operator in ('ilike', 'like'): - search_name = '%%%s%%' % name - if operator in ('=ilike', '=like'): - operator = operator[1:] - - unaccent = get_unaccent_wrapper(self.env.cr) - - query = """SELECT id - FROM res_partner - {where} ({document_number} {operator} {percent}) - ORDER BY {display_name} {operator} {percent} desc, - {display_name} - """.format(where=where_str, - operator=operator, - document_number=unaccent('document_number'), - display_name=unaccent('display_name'), - percent=unaccent('%s'),) - - where_clause_params += [search_name]*2 - if limit: - query += ' limit %s' - where_clause_params.append(limit) - self.env.cr.execute(query, where_clause_params) - partner_ids = [row[0] for row in self.env.cr.fetchall()] - if partner_ids: - result += self.browse(partner_ids).name_get() - return result + domain = ['|', + ('document_number', operator, name), + ('vat', operator, name), + ] + partners = self.search(domain + args, limit=limit,) + res = partners.name_get() + if limit: + limit_rest = limit - len(partners) + else: + limit_rest = limit + if limit_rest or not limit: + args += [('id', 'not in', partners.ids)] + res += super(ResPartner, self).name_search( + name, args=args, operator=operator, limit=limit_rest) + return res @api.model def _get_duplicated_ids(self, partner): diff --git a/hotel_l10n_es/views/inherit_res_partner.xml b/hotel_l10n_es/views/inherit_res_partner.xml index 609a008d6..a8f948bd6 100755 --- a/hotel_l10n_es/views/inherit_res_partner.xml +++ b/hotel_l10n_es/views/inherit_res_partner.xml @@ -30,7 +30,7 @@ - +