diff --git a/pms/README.rst b/pms/README.rst index 6e3c0d37a8..9c355d0610 100644 --- a/pms/README.rst +++ b/pms/README.rst @@ -1,7 +1,3 @@ -.. image:: https://odoo-community.org/readme-banner-image - :target: https://odoo-community.org/get-involved?utm_source=readme - :alt: Odoo Community Association - ================================ PMS (Property Management System) ================================ @@ -17,7 +13,7 @@ PMS (Property Management System) .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta -.. |badge2| image:: https://img.shields.io/badge/license-AGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fpms-lightgray.png?logo=github diff --git a/pms/__manifest__.py b/pms/__manifest__.py index f372d0cf9e..3f8bbbd3dc 100644 --- a/pms/__manifest__.py +++ b/pms/__manifest__.py @@ -4,7 +4,7 @@ { "name": "PMS (Property Management System)", "summary": "A property management system", - "version": "16.0.0.15.0", + "version": "16.0.1.0.0", "development_status": "Beta", "category": "Generic Modules/Property Management System", "website": "https://github.com/OCA/pms", @@ -21,14 +21,11 @@ "sales_team", "multi_pms_properties", "partner_firstname", - "partner_second_lastname", "partner_contact_gender", "partner_contact_birthdate", "partner_contact_nationality", - # "partner_identification_unique_by_category", "queue_job", "web_timeline", - "partner_identification", "analytic", "account", "sale", @@ -104,8 +101,6 @@ "views/account_analytic_distribution_views.xml", # "views/account_analytic_line_views.xml", "views/res_partner_category.xml", - "views/res_partner_id_category_views.xml", - "views/res_partner_id_number_views.xml", "views/res_country_views.xml", "views/payment_templates.xml", ], @@ -118,6 +113,11 @@ "qweb": [ "static/src/xml/reservation_group_button_views.xml", ], + "external_dependencies": { + "python": [ + "openupgradelib", + ], + }, "assets": { "web.assets_frontend": [ "pms/static/src/js/payment_form.js", diff --git a/pms/data/pms_data.xml b/pms/data/pms_data.xml index 3eb5f674d6..e13cba8e5b 100644 --- a/pms/data/pms_data.xml +++ b/pms/data/pms_data.xml @@ -69,15 +69,4 @@ Agency indirect - - Passport - P - 20 - - - - Other - O - 90 - diff --git a/pms/migrations/16.0.1.0.0/pre-migration.py b/pms/migrations/16.0.1.0.0/pre-migration.py new file mode 100644 index 0000000000..991b9d10fa --- /dev/null +++ b/pms/migrations/16.0.1.0.0/pre-migration.py @@ -0,0 +1,48 @@ +from openupgradelib import openupgrade + +_rename_fields = [ + ( + "pms.checkin.partner", + "pms_checkin_partner", + "residence_street", + "street", + ), + ( + "pms.checkin.partner", + "pms_checkin_partner", + "residence_street2", + "street2", + ), + ( + "pms.checkin.partner", + "pms_checkin_partner", + "residence_zip", + "zip", + ), + ( + "pms.checkin.partner", + "pms_checkin_partner", + "residence_city", + "city", + ), + ( + "pms.checkin.partner", + "pms_checkin_partner", + "residence_country_id", + "country_id", + ), + ( + "pms.checkin.partner", + "pms_checkin_partner", + "residence_state_id", + "state_id", + ), +] + + +@openupgrade.migrate() +def migrate(env, version): + for model, table, oldfield, newfield in _rename_fields: + if not openupgrade.column_exists(env.cr, table, oldfield): + continue + openupgrade.rename_fields(env, [(model, table, oldfield, newfield)]) diff --git a/pms/models/__init__.py b/pms/models/__init__.py index 7af52f1e06..6e8a5079cc 100644 --- a/pms/models/__init__.py +++ b/pms/models/__init__.py @@ -43,7 +43,6 @@ from . import account_bank_statement from . import account_journal from . import pms_availability -from . import res_partner_id_number from . import pms_automated_mails from . import payment_transaction from . import pms_team_member @@ -53,4 +52,3 @@ from . import account_analytic_line from . import res_partner_category from . import res_country -from . import res_partner_id_category diff --git a/pms/models/pms_checkin_partner.py b/pms/models/pms_checkin_partner.py index f5f110e860..6da180fb42 100644 --- a/pms/models/pms_checkin_partner.py +++ b/pms/models/pms_checkin_partner.py @@ -5,12 +5,8 @@ import json from datetime import datetime -from dateutil.relativedelta import relativedelta - from odoo import _, api, fields, models -from odoo.exceptions import UserError, ValidationError -from odoo.tools import DEFAULT_SERVER_DATE_FORMAT -from odoo.tools.safe_eval import safe_eval +from odoo.exceptions import ValidationError class PmsCheckinPartner(models.Model): @@ -65,18 +61,21 @@ class PmsCheckinPartner(models.Model): readonly=False, store=True, compute="_compute_email", + inverse=lambda r: r._inverse_partner_fields("email", "email"), ) mobile = fields.Char( help="Checkin Partner Mobile", readonly=False, store=True, compute="_compute_mobile", + inverse=lambda r: r._inverse_partner_fields("mobile", "mobile"), ) phone = fields.Char( help="Checkin Partner Phone", readonly=False, store=True, compute="_compute_phone", + inverse=lambda r: r._inverse_partner_fields("phone", "phone"), ) image_128 = fields.Image( string="Image", @@ -130,6 +129,7 @@ class PmsCheckinPartner(models.Model): store=True, compute="_compute_gender", selection=[("male", "Male"), ("female", "Female"), ("other", "Other")], + inverse=lambda r: r._inverse_partner_fields("gender", "gender"), ) nationality_id = fields.Many2one( string="Nationality", @@ -139,52 +139,49 @@ class PmsCheckinPartner(models.Model): index=True, compute="_compute_nationality_id", comodel_name="res.country", + inverse=lambda r: r._inverse_partner_fields("nationality_id", "nationality_id"), ) - residence_street = fields.Char( - string="Street", - help="Street of the guest's residence", + street = fields.Char( + help="Street of the guest", readonly=False, store=True, - compute="_compute_residence_street", + compute="_compute_street", ) - residence_street2 = fields.Char( - string="Street2", - help="Second street of the guest's residence", + street2 = fields.Char( + help="Second street of the guest", readonly=False, store=True, - compute="_compute_residence_street2", + compute="_compute_street2", ) - residence_zip = fields.Char( - string="Zip", - help="Zip of the guest's residence", + zip = fields.Char( + help="Zip of the guest", readonly=False, store=True, - compute="_compute_residence_zip", + compute="_compute_zip", change_default=True, ) - residence_city = fields.Char( - string="City", - help="City of the guest's residence", + city = fields.Char( + help="City of the guest", readonly=False, store=True, - compute="_compute_residence_city", + compute="_compute_city", ) - residence_country_id = fields.Many2one( + country_id = fields.Many2one( string="Country of residence", - help="Country of the guest's residence", + help="Country of the guest", readonly=False, store=True, index=True, - compute="_compute_residence_country_id", + compute="_compute_country_id", comodel_name="res.country", ) - residence_state_id = fields.Many2one( + state_id = fields.Many2one( string="State of residence", - help="State of the guest's residence", + help="State of the guest", readonly=False, store=True, index=True, - compute="_compute_residence_state_id", + compute="_compute_state_id", comodel_name="res.country.state", ) @@ -194,6 +191,7 @@ class PmsCheckinPartner(models.Model): readonly=False, store=True, compute="_compute_firstname", + inverse=lambda r: r._inverse_partner_fields("firstname", "firstname"), ) lastname = fields.Char( string="Last Name", @@ -201,13 +199,7 @@ class PmsCheckinPartner(models.Model): readonly=False, store=True, compute="_compute_lastname", - ) - lastname2 = fields.Char( - string="Second Last Name", - help="host second lastname", - readonly=False, - store=True, - compute="_compute_lastname2", + inverse=lambda r: r._inverse_partner_fields("lastname", "lastname"), ) birthdate_date = fields.Date( string="Birthdate", @@ -215,51 +207,8 @@ class PmsCheckinPartner(models.Model): readonly=False, store=True, compute="_compute_birth_date", + inverse=lambda r: r._inverse_partner_fields("birthdate_date", "birthdate_date"), ) - document_number = fields.Char( - help="Host document number", - readonly=False, - store=True, - compute="_compute_document_number", - ) - document_type = fields.Many2one( - help="Select a valid document type", - readonly=False, - store=True, - index=True, - comodel_name="res.partner.id_category", - compute="_compute_document_type", - domain="['|', ('country_ids', '=', False)," - " ('country_ids', 'in', document_country_id)]", - ) - document_expedition_date = fields.Date( - string="Expedition Date", - help="Date on which document_type was issued", - readonly=False, - store=True, - compute="_compute_document_expedition_date", - ) - - document_id = fields.Many2one( - string="Document", - help="Technical field", - readonly=False, - store=True, - index=True, - comodel_name="res.partner.id_number", - compute="_compute_document_id", - ondelete="restrict", - ) - - document_country_id = fields.Many2one( - string="Document Country", - help="Country of the document", - comodel_name="res.country", - compute="_compute_document_country_id", - store=True, - readonly=False, - ) - partner_incongruences = fields.Char( help="indicates that some partner fields \ on the checkin do not correspond to that of \ @@ -271,7 +220,6 @@ class PmsCheckinPartner(models.Model): string="Possible existing customer", compute="_compute_possible_existing_customer_ids", comodel_name="res.partner", - inverse_name="checkin_partner_possible_customer_id", ) partner_relationship = fields.Char(help="Family relationship between travelers") @@ -285,49 +233,10 @@ class PmsCheckinPartner(models.Model): compute="_compute_sign_on", ) - @api.depends("partner_id") - def _compute_document_number(self): - for record in self: - if not record.document_number and record.partner_id.id_numbers: - last_update_document = record.partner_id.id_numbers.filtered( - lambda x, record=record: x.write_date - == max(record.partner_id.id_numbers.mapped("write_date")) - ) - if last_update_document and last_update_document[0].name: - record.document_number = last_update_document[0].name - - @api.depends("partner_id") - def _compute_document_type(self): - for record in self: - if not record.document_type and record.partner_id.id_numbers: - last_update_document = record.partner_id.id_numbers.filtered( - lambda x, record=record: x.write_date - == max(record.partner_id.id_numbers.mapped("write_date")) - ) - if last_update_document and last_update_document[0].category_id: - record.document_type = last_update_document[0].category_id - - @api.depends("partner_id") - def _compute_document_expedition_date(self): + def _inverse_partner_fields(self, checkin_field_name, partner_field_name): for record in self: - if not record.document_expedition_date and record.partner_id.id_numbers: - last_update_document = record.partner_id.id_numbers.filtered( - lambda x, record=record: x.write_date - == max(record.partner_id.id_numbers.mapped("write_date")) - ) - if last_update_document and last_update_document[0].valid_from: - record.document_expedition_date = last_update_document[0].valid_from - - @api.depends("partner_id") - def _compute_document_country_id(self): - for record in self: - if not record.document_country_id and record.partner_id.id_numbers: - last_update_document = record.partner_id.id_numbers.filtered( - lambda x, record=record: x.write_date - == max(record.partner_id.id_numbers.mapped("write_date")) - ) - if last_update_document and last_update_document[0].country_id: - record.document_country_id = last_update_document[0].country_id + if record.partner_id: + record.partner_id[partner_field_name] = record[checkin_field_name] @api.depends("partner_id") def _compute_firstname(self): @@ -345,14 +254,6 @@ def _compute_lastname(self): elif not record.lastname: record.lastname = False - @api.depends("partner_id") - def _compute_lastname2(self): - for record in self: - if not record.lastname2 and record.partner_id.lastname2: - record.lastname2 = record.partner_id.lastname2 - elif not record.lastname2: - record.lastname2 = False - @api.depends("partner_id") def _compute_birth_date(self): for record in self: @@ -378,53 +279,52 @@ def _compute_nationality_id(self): record.nationality_id = False @api.depends("partner_id") - def _compute_residence_street(self): + def _compute_street(self): for record in self: - if not record.residence_street and record.partner_id.residence_street: - record.residence_street = record.partner_id.residence_street - elif not record.residence_street: - record.residence_street = False + if not record.street and record.partner_id.street: + record.street = record.partner_id.street + elif not record.street: + record.street = False @api.depends("partner_id") - def _compute_residence_street2(self): + def _compute_street2(self): for record in self: - if not record.residence_street2 and record.partner_id.residence_street2: - record.residence_street2 = record.partner_id.residence_street2 - elif not record.residence_street2: - record.residence_street2 = False + if not record.street2 and record.partner_id.street2: + record.street2 = record.partner_id.street2 + elif not record.street2: + record.street2 = False @api.depends("partner_id") - def _compute_residence_zip(self): + def _compute_zip(self): for record in self: - if not record.residence_zip and record.partner_id.residence_zip: - record.residence_zip = record.partner_id.residence_zip - elif not record.residence_zip: - record.residence_zip = False + if not record.zip and record.partner_id.zip: + record.zip = record.partner_id.zip + elif not record.zip: + record.zip = False @api.depends("partner_id") - def _compute_residence_city(self): + def _compute_city(self): for record in self: - if not record.residence_city and record.partner_id.residence_city: - record.residence_city = record.partner_id.residence_city - elif not record.residence_city: - record.residence_city = False + if not record.city and record.partner_id.city: + record.city = record.partner_id.city + elif not record.city: + record.city = False @api.depends("partner_id", "nationality_id") - def _compute_residence_country_id(self): + def _compute_country_id(self): for record in self: - if ( - not record.residence_country_id - and record.partner_id.residence_country_id - ): - record.residence_country_id = record.partner_id.residence_country_id + if not record.country_id and record.partner_id.country_id: + record.country_id = record.partner_id.country_id + elif not record.state_id: + record.country_id = False @api.depends("partner_id") - def _compute_residence_state_id(self): + def _compute_state_id(self): for record in self: - if not record.residence_state_id and record.partner_id.residence_state_id: - record.residence_state_id = record.partner_id.residence_state_id - elif not record.residence_state_id: - record.residence_state_id = False + if not record.state_id and record.partner_id.state_id: + record.state_id = record.partner_id.state_id + elif not record.state_id: + record.state_id = False @api.depends(lambda self: self._checkin_manual_fields()) def _compute_state(self): @@ -441,11 +341,7 @@ def _compute_state(self): record.state = "dummy" elif any( not getattr(record, field) - for field in record._checkin_mandatory_fields( - residence_country=record.residence_country_id, - document_type=record.document_type, - birthdate_date=record.birthdate_date, - ) + for field in record._checkin_mandatory_fields() ): record.state = "draft" else: @@ -481,92 +377,38 @@ def _compute_phone(self): elif not record.phone: record.phone = False - @api.depends("partner_id") - def _compute_document_id(self): - for record in self: - if record.partner_id: - if ( - not record.document_id - and record.document_number - and record.document_type - ): - id_number_id = ( - self.sudo() - .env["res.partner.id_number"] - .search( - [ - ("partner_id", "=", record.partner_id.id), - ("name", "=", record.document_number), - ("category_id", "=", record.document_type.id), - ] - ) - ) - if not id_number_id: - document_vals = record.get_document_vals() - id_number_id = self.env["res.partner.id_number"].create( - document_vals - ) + @api.model + def _get_compute_partner_id_field_names(self): + return ["firstname", "lastname"] - record.document_id = id_number_id - else: - record.document_id = False + def _completed_partner_creation_fields(self): + self.ensure_one() + if self.firstname or self.lastname: + return True + return False - def get_document_vals(self): + def _get_partner_create_vals(self): return { - "name": self.document_number, - "partner_id": self.partner_id.id, - "category_id": self.document_type.id, - "valid_from": self.document_expedition_date, - "country_id": self.document_country_id.id, + "firstname": self.firstname, + "lastname": self.lastname, + "gender": self.gender, + "birthdate_date": self.birthdate_date, + "nationality_id": self.nationality_id.id, } - @api.depends( - "document_number", - "document_type", - "firstname", - "lastname", - "lastname2", - ) + @api.depends(lambda self: self._get_compute_partner_id_field_names()) def _compute_partner_id(self): for record in self: if not record.partner_id: - if record.document_number and record.document_type: - partner = self._get_partner_by_document( - record.document_number, record.document_type + if record._completed_partner_creation_fields(): + partner_values = record._get_partner_create_vals() + partner = ( + self.env["res.partner"] + .with_context(avoid_document_restriction=True) + .create(partner_values) ) - if not partner: - if record.firstname or record.lastname or record.lastname2: - partner_values = { - "firstname": record.firstname, - "lastname": record.lastname, - "lastname2": record.lastname2, - "gender": record.gender, - "birthdate_date": record.birthdate_date, - "nationality_id": record.nationality_id.id, - } - partner = ( - self.env["res.partner"] - .with_context(avoid_document_restriction=True) - .create(partner_values) - ) record.partner_id = partner - @api.model - def _get_partner_by_document(self, document_number, document_type): - number = ( - self.sudo() - .env["res.partner.id_number"] - .search( - [ - ("name", "=", document_number), - ("category_id", "=", document_type.id), - ] - ) - ) - return ( - self.sudo().env["res.partner"].search([("id", "=", number.partner_id.id)]) - ) - @api.depends("email", "mobile") def _compute_possible_existing_customer_ids(self): for record in self: @@ -578,17 +420,20 @@ def _compute_possible_existing_customer_ids(self): else: record.possible_existing_customer_ids = False - @api.depends( - "firstname", - "lastname", - "lastname2", - "gender", - "birthdate_date", - "nationality_id", - "email", - "mobile", - "partner_id", - ) + @api.model + def _get_partner_incongruences_field_names(self): + return [ + "firstname", + "lastname", + "gender", + "birthdate_date", + "nationality_id", + "email", + "mobile", + "partner_id", + ] + + @api.depends(lambda self: self._get_partner_incongruences_field_names()) def _compute_partner_incongruences(self): for record in self: incongruous_fields = False @@ -657,89 +502,41 @@ def _check_partner_id(self): _("This guest is already registered in the room") ) - @api.constrains("document_number") - def check_document_number(self): - for record in self: - if record.partner_id: - for number in record.partner_id.id_numbers: - if record.document_type == number.category_id: - if record.document_number != number.name: - raise ValidationError(_("Document_type has already exists")) - def _validation_eval_context(self, id_number): self.ensure_one() return {"self": self, "id_number": id_number} - @api.constrains("document_number", "document_type") - def validate_id_number(self): - """Validate the given ID number - The method raises an odoo.exceptions.ValidationError if the eval of - python validation code fails - """ - for record in self: - if record.document_number and record.document_type: - id_number = self.env["res.partner.id_number"].new( - { - "name": record.document_number, - "category_id": record.document_type, - } - ) - if ( - self.env.context.get("id_no_validate") - or not record.document_type.validation_code - ): - return - eval_context = record._validation_eval_context(id_number) - try: - safe_eval( - record.document_type.validation_code, - eval_context, - mode="exec", - nocopy=True, - ) - except Exception as e: - raise UserError( - _( - "Error when evaluating the id_category " - "validation code:\n %(name)s \n(%(error)s)", - name=self.name, - error=e, - ) - ) from e - if eval_context.get("failed", False): - raise ValidationError( - _( - "%(doc_number)s is not a valid %(doc_type)s identifier", - doc_number=record.document_number, - doc_type=record.document_type.name, - ) - ) - - @api.constrains("document_country_id", "document_type") - def _check_document_country_id_document_type_consistence(self): + @api.constrains("state_id", "country_id") + def _check_state_id_country_id_consistence(self): for record in self: - if record.document_country_id and record.document_type: + if record.state_id and record.country_id: if ( - record.document_type.country_ids - and record.document_country_id - not in record.document_type.country_ids + record.state_id.country_id + and record.country_id not in record.state_id.country_id ): raise ValidationError( - _("Document type and country of document do not match") + _("State and country of residence do not match") ) - @api.constrains("residence_state_id", "residence_country_id") - def _check_residence_state_id_residence_country_id_consistence(self): + def set_partner_address(self): + """ + Only sets the checkin.partner address in the associated partner if + the partner don't have any address field filled. + """ for record in self: - if record.residence_state_id and record.residence_country_id: - if ( - record.residence_state_id.country_id - and record.residence_country_id - not in record.residence_state_id.country_id - ): - raise ValidationError( - _("State and country of residence do not match") - ) + if record.partner_id: + residence_vals = { + "street": record.street, + "street2": record.street2, + "zip": record.zip, + "city": record.city, + "country_id": record.country_id.id, + "state_id": record.state_id.id, + } + if any(residence_vals.values()): + address_fields = residence_vals.keys() + if not any(record.partner_id[field] for field in address_fields): + record.partner_id.write(residence_vals) @api.model_create_multi def create(self, vals_list): @@ -775,6 +572,7 @@ def create(self, vals_list): "check-in in this reservation" ) ) + records.set_partner_address() return records def write(self, vals): @@ -784,6 +582,7 @@ def write(self, vals): tourist_tax_services_cmds = reservation._compute_tourist_tax_lines() if tourist_tax_services_cmds: reservation.write({"service_ids": tourist_tax_services_cmds}) + self.set_partner_address() return res def unlink(self): @@ -803,19 +602,14 @@ def _checkin_manual_fields(self, country=False): "gender", "firstname", "lastname", - "lastname2", "birthdate_date", - "document_number", - "document_expedition_date", "nationality_id", - "residence_street", - "residence_street2", - "residence_zip", - "residence_city", - "residence_country_id", - "residence_state_id", - "document_country_id", - "document_type", + "street", + "street2", + "zip", + "city", + "country_id", + "state_id", ] return manual_fields @@ -825,19 +619,19 @@ def _get_depends_state_fields(self): manual_fields.append("reservation_id.state") return manual_fields - @api.model - def _checkin_mandatory_fields( - self, residence_country=False, document_type=False, birthdate_date=False - ): - mandatory_fields = [] - return mandatory_fields + def _checkin_mandatory_fields(self): + """ + Auxiliar method to return the mandatory fields for checkin. + It can be extended by modules that need to add more mandatory fields. + """ + self.ensure_one() + return [] @api.model def _checkin_partner_fields(self): checkin_fields = [ "firstname", "lastname", - "lastname2", "mobile", "email", "gender", @@ -873,28 +667,6 @@ def import_room_list_json(self, roomlist_json): checkin_vals[key] = value checkin.write(checkin_vals) - @api.model - def calculate_doc_type_expedition_date_from_validity_date( - self, doc_type, doc_date, birthdate - ): - today = fields.datetime.today() - datetime_doc_date = datetime.strptime(doc_date, DEFAULT_SERVER_DATE_FORMAT) - if datetime_doc_date < today: - return datetime_doc_date - datetime_birthdate = datetime.strptime(birthdate, DEFAULT_SERVER_DATE_FORMAT) - age = today.year - datetime_birthdate.year - - document_expedition_date = False - if doc_type.code == "D" or doc_type.code == "P": - if age < 30: - document_expedition_date = datetime_doc_date - relativedelta(years=5) - else: - document_expedition_date = datetime_doc_date - relativedelta(years=10) - if doc_type.code == "C": - if age < 70: - document_expedition_date = datetime_doc_date - relativedelta(years=10) - return document_expedition_date - def action_on_board(self): for record in self: if record.reservation_id.checkin > fields.Date.today(): @@ -903,7 +675,8 @@ def action_on_board(self): raise ValidationError(_("Its too late to checkin")) if any( - not getattr(record, field) for field in self._checkin_mandatory_fields() + not getattr(record, field) + for field in record._checkin_mandatory_fields() ): raise ValidationError(_("Personal data is missing for check-in")) vals = { @@ -964,52 +737,6 @@ def open_wizard_several_partners(self): "context": ctx, } - def _save_data_from_portal(self, values): - checkin_partner = values.get("checkin_partner", "") - values.pop("checkin_partner") - values.pop("folio_access_token") if "folio_access_token" in values else None - if values.get("nationality"): - values.update({"nationality_id": int(values.get("nationality_id"))}) - - doc_type = ( - self.sudo() - .env["res.partner.id_category"] - .browse(int(values.get("document_type"))) - ) - if values.get("document_type"): - values.update({"document_type": int(values.get("document_type"))}) - if values.get("residence_state_id"): - values.update({"residence_state_id": int(values.get("residence_state_id"))}) - if values.get("residence_country_id"): - values.update( - {"residence_country_id": int(values.get("residence_country_id"))} - ) - - if values.get("document_expedition_date"): - values.update( - { - "document_expedition_date": datetime.strptime( - values.get("document_expedition_date"), "%d/%m/%Y" - ).strftime("%Y-%m-%d"), - "birthdate_date": datetime.strptime( - values.get("birthdate_date"), "%d/%m/%Y" - ).strftime("%Y-%m-%d"), - } - ) - doc_date = values.get("document_expedition_date") - birthdate = values.get("birthdate_date") - document_expedition_date = ( - self.calculate_doc_type_expedition_date_from_validity_date( - doc_type, doc_date, birthdate - ) - ) - values.update( - { - "document_expedition_date": document_expedition_date, - } - ) - checkin_partner.sudo().write(values) - def send_portal_invitation_email(self, invitation_firstname=None, email=None): template = self.sudo().env.ref( "pms.precheckin_invitation_email", raise_if_not_found=False diff --git a/pms/models/pms_folio.py b/pms/models/pms_folio.py index d98193ae38..a9ce7ba3e3 100644 --- a/pms/models/pms_folio.py +++ b/pms/models/pms_folio.py @@ -523,7 +523,6 @@ class PmsFolio(models.Model): string="Possible existing customer", compute="_compute_possible_existing_customer_ids", comodel_name="res.partner", - inverse_name="folio_possible_customer_id", ) first_checkin = fields.Date( string="First Folio Checkin", diff --git a/pms/models/pms_reservation.py b/pms/models/pms_reservation.py index eb36074d0d..7f587611ea 100644 --- a/pms/models/pms_reservation.py +++ b/pms/models/pms_reservation.py @@ -629,7 +629,6 @@ class PmsReservation(models.Model): string="Possible existing customer", compute="_compute_possible_existing_customer_ids", comodel_name="res.partner", - inverse_name="reservation_possible_customer_id", ) avoid_mails = fields.Boolean( @@ -871,7 +870,7 @@ def _compute_reservation_line_ids(self): reservation.reservation_line_ids = False reservation.check_in_out_dates() - @api.depends("board_service_room_id") + @api.depends("board_service_room_id", "adults", "children") def _compute_board_service_ids(self): if self.env.context.get("skip_compute_board_service_ids", False): return @@ -2185,10 +2184,10 @@ def _check_clousure_reason(self, reservation_type, closure_reason_id): ) def _check_services(self, vals): - # If we create a reservation with board service and other service at the - # same time, compute_service_ids dont run (compute with readonly to False), and + # If we create a reservation with board service, compute_service_ids dont run + # (compute with readonly to False), and # we must force it to compute the services linked with the board service: - if "board_service_room_id" in vals and "service_ids" in vals: + if "board_service_room_id" in vals: self._compute_board_service_ids() def get_folios_to_update_channel(self, vals): diff --git a/pms/models/pms_room.py b/pms/models/pms_room.py index f620550ab9..ec760f12da 100644 --- a/pms/models/pms_room.py +++ b/pms/models/pms_room.py @@ -226,7 +226,7 @@ def _compute_address_id(self): "type": "other", "is_company": False, "active": True, - "parent_id": record.pms_property_id.id, + "parent_id": record.pms_property_id.partner_id.id, } ) ) diff --git a/pms/models/res_company.py b/pms/models/res_company.py index b140bff0b2..eff8ac76d5 100644 --- a/pms/models/res_company.py +++ b/pms/models/res_company.py @@ -43,12 +43,6 @@ class ResCompany(models.Model): default="no", ) - document_partner_required = fields.Boolean( - help="""If true, the partner document is required - to create a new contact""", - default=False, - ) - cancel_penalty_product_id = fields.Many2one( string="Cancel penalty product", help="Product used to calculate the cancel penalty", diff --git a/pms/models/res_partner.py b/pms/models/res_partner.py index 70501e8015..9822e4fdd2 100644 --- a/pms/models/res_partner.py +++ b/pms/models/res_partner.py @@ -4,7 +4,6 @@ import logging from odoo import _, api, fields, models -from odoo.exceptions import ValidationError _logger = logging.getLogger(__name__) @@ -87,98 +86,10 @@ class ResPartner(models.Model): comodel_name="pms.folio", inverse_name="partner_id", ) - gender = fields.Selection( - readonly=False, - store=True, - compute="_compute_gender", - ) - birthdate_date = fields.Date( - readonly=False, - store=True, - compute="_compute_birthdate_date", - ) - nationality_id = fields.Many2one( - readonly=False, - store=True, - index=True, - compute="_compute_nationality_id", - ) - email = fields.Char( - readonly=False, - store=True, - compute="_compute_email", - ) - mobile = fields.Char( - readonly=False, - store=True, - compute="_compute_mobile", - ) - phone = fields.Char( - readonly=False, - store=True, - compute="_compute_phone", - ) - firstname = fields.Char( - readonly=False, - store=True, - compute="_compute_firstname", - ) - lastname = fields.Char( - readonly=False, - store=True, - compute="_compute_lastname", - ) - lastname2 = fields.Char( - readonly=False, - store=True, - compute="_compute_lastname2", - ) - country_id = fields.Many2one( - readonly=False, - store=True, - index=True, - compute="_compute_country_id", - ) - state_id = fields.Many2one( - readonly=False, - store=True, - index=True, - compute="_compute_state_id", - ) - city = fields.Char( - readonly=False, - store=True, - compute="_compute_city", - ) - street = fields.Char( - readonly=False, - store=True, - compute="_compute_street", - ) - street2 = fields.Char( - readonly=False, - store=True, - compute="_compute_street2", - ) - zip = fields.Char( - readonly=False, - store=True, - compute="_compute_zip", - ) comment = fields.Text( tracking=True, ) - reservation_possible_customer_id = fields.Many2one( - string="Possible Customer In Reservation", comodel_name="pms.reservation" - ) - folio_possible_customer_id = fields.Many2one( - string="Possible Customer In Folio", comodel_name="pms.folio" - ) - checkin_partner_possible_customer_id = fields.Many2one( - string="Possible Customer In Checkin Partner", - comodel_name="pms.checkin.partner", - ) invoicing_policy = fields.Selection( help="""The invoicing policy of the partner, set Property to user the policy configured in the Property""", @@ -197,353 +108,6 @@ class ResPartner(models.Model): string="Days from Checkout", help="Days from Checkout to generate the invoice", ) - residence_street = fields.Char( - string="Street of residence", - help="Street of the guest's residence", - readonly=False, - store=True, - compute="_compute_residence_street", - ) - residence_street2 = fields.Char( - string="Second street of residence", - help="Second street of the guest's residence", - readonly=False, - store=True, - compute="_compute_residence_street2", - ) - residence_zip = fields.Char( - string="Zip of residence", - help="Zip of the guest's residence", - readonly=False, - store=True, - compute="_compute_residence_zip", - change_default=True, - ) - residence_city = fields.Char( - string="city of residence", - help="City of the guest's residence", - readonly=False, - store=True, - compute="_compute_residence_city", - ) - residence_country_id = fields.Many2one( - string="Country of residence", - help="Partner country of residence", - readonly=False, - store=True, - index=True, - compute="_compute_residence_country_id", - comodel_name="res.country", - ) - residence_state_id = fields.Many2one( - string="State of residence", - help="Partner state of residence", - readonly=False, - store=True, - index=True, - compute="_compute_residence_state_id", - comodel_name="res.country.state", - ) - - # pylint: disable=W8110 - @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.gender") - def _compute_gender(self): - if hasattr(super(), "_compute_gender"): - super()._compute_gender() - for record in self: - if record.pms_checkin_partner_ids: - last_update_gender = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_gender and last_update_gender[0].gender: - record.gender = last_update_gender[0].gender - - # pylint: disable=W8110 - @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.birthdate_date") - def _compute_birthdate_date(self): - if hasattr(super(), "_compute_birthdate_date"): - super()._compute_birthdate_date() - for record in self: - if record.pms_checkin_partner_ids: - last_update_birthdate = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_birthdate and last_update_birthdate[0].birthdate_date: - record.birthdate_date = last_update_birthdate[0].birthdate_date - - # pylint: disable=W8110 - @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.nationality_id") - def _compute_nationality_id(self): - if hasattr(super(), "_compute_nationality_id"): - super()._compute_nationality_id() - for record in self: - if record.pms_checkin_partner_ids: - last_update_nationality = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if ( - last_update_nationality - and last_update_nationality[0].nationality_id - ): - record.nationality_id = last_update_nationality[0].nationality_id - if not record.nationality_id and record.country_id: - record.nationality_id = record.country_id - - # pylint: disable=W8110 - @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.phone") - def _compute_phone(self): - if hasattr(super(), "_compute_phone"): - super()._compute_phone() - for record in self: - if record.pms_checkin_partner_ids: - last_update_phone = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_phone and last_update_phone[0].phone: - record.phone = last_update_phone[0].phone - - # pylint: disable=W8110 - @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.residence_street") - def _compute_residence_street(self): - if hasattr(super(), "_compute_residence_street"): - super()._compute_residence_street() - for record in self: - if record.pms_checkin_partner_ids: - last_update_street = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_street and last_update_street[0].residence_street: - record.residence_street = last_update_street[0].residence_street - - # pylint: disable=W8110 - @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.residence_street2") - def _compute_residence_street2(self): - if hasattr(super(), "_compute_residence_street2"): - super()._compute_residence_street2() - for record in self: - if record.pms_checkin_partner_ids: - last_update_street2 = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_street2 and last_update_street2[0].residence_street2: - record.residence_street2 = last_update_street2[0].residence_street2 - - # pylint: disable=W8110 - @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.residence_zip") - def _compute_residence_zip(self): - if hasattr(super(), "_compute_residence_zip"): - super()._compute_residence_zip() - for record in self: - if record.pms_checkin_partner_ids: - last_update_zip = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_zip and last_update_zip[0].residence_zip: - record.residence_zip = last_update_zip[0].residence_zip - - # pylint: disable=W8110 - @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.residence_city") - def _compute_residence_city(self): - if hasattr(super(), "_compute_residence_city"): - super()._compute_residence_city() - for record in self: - if record.pms_checkin_partner_ids: - last_update_city = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_city and last_update_city[0].residence_city: - record.residence_city = last_update_city[0].residence_city - - # pylint: disable=W8110 - @api.depends( - "pms_checkin_partner_ids", - "pms_checkin_partner_ids.residence_country_id", - "nationality_id", - ) - def _compute_residence_country_id(self): - if hasattr(super(), "_compute_residence_country_id"): - super()._compute_residence_country_id() - for record in self: - if record.pms_checkin_partner_ids: - last_update_country = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_country and last_update_country[0].residence_country_id: - record.residence_country_id = last_update_country[ - 0 - ].residence_country_id - - # pylint: disable=W8110 - @api.depends( - "pms_checkin_partner_ids", "pms_checkin_partner_ids.residence_state_id" - ) - def _compute_residence_state_id(self): - if hasattr(super(), "_compute_residence_state_id"): - super()._compute_residence_state_id() - for record in self: - if record.pms_checkin_partner_ids: - last_update_state = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_state and last_update_state[0].residence_state_id: - record.residence_state_id = last_update_state[0].residence_state_id - - # pylint: disable=W8110 - @api.depends( - "pms_checkin_partner_ids", - "pms_checkin_partner_ids.email", - "pms_reservation_ids", - "pms_reservation_ids.email", - "pms_folio_ids", - "pms_folio_ids.email", - ) - def _compute_email(self): - if hasattr(super(), "_compute_email"): - super()._compute_email() - for record in self: - if record.pms_checkin_partner_ids: - last_update_checkin_mail = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_checkin_mail and last_update_checkin_mail[0].email: - record.email = last_update_checkin_mail[0].email - - # pylint: disable=W8110 - @api.depends( - "pms_checkin_partner_ids", - "pms_checkin_partner_ids.mobile", - "pms_reservation_ids", - "pms_reservation_ids.mobile", - "pms_folio_ids", - "pms_folio_ids.mobile", - ) - def _compute_mobile(self): - if hasattr(super(), "_compute_mobile"): - super()._compute_mobile() - for record in self: - if record.pms_checkin_partner_ids: - last_update_mobile = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_mobile and last_update_mobile[0].mobile: - record.mobile = last_update_mobile[0].mobile - - # pylint: disable=W8110 - @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.firstname") - def _compute_firstname(self): - if hasattr(super(), "_compute_firstname"): - super()._compute_firstname() - for record in self: - if record.pms_checkin_partner_ids: - last_update_firstname = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_firstname and last_update_firstname[0].firstname: - record.firstname = last_update_firstname[0].firstname - - # pylint: disable=W8110 - @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.lastname") - def _compute_lastname(self): - if hasattr(super(), "_compute_lastname"): - super()._compute_lastname() - for record in self: - if record.pms_checkin_partner_ids: - last_update_lastname = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_lastname and last_update_lastname[0].lastname: - record.lastname = last_update_lastname[0].lastname - - # pylint: disable=W8110 - @api.depends("pms_checkin_partner_ids", "pms_checkin_partner_ids.lastname2") - def _compute_lastname2(self): - if hasattr(super(), "_compute_lastname2"): - super()._compute_lastname2() - for record in self: - if record.pms_checkin_partner_ids: - last_update_lastname2 = record.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.write_date - == max(r.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_lastname2 and last_update_lastname2[0].lastname2: - record.lastname2 = last_update_lastname2[0].lastname2 - - # pylint: disable=W8110 - @api.depends("id_numbers") - def _compute_country_id(self): - if hasattr(super(), "_compute_country_id"): - super()._compute_country_id() - for record in self: - if ( - not record.parent_id - and not record.country_id - and record.id_numbers - and record.id_numbers.country_id - ): - record.country_id = record.id_numbers[0].country_id - - # pylint: disable=W8110 - @api.depends("residence_state_id") - def _compute_state_id(self): - if hasattr(super(), "_compute_state_id"): - super()._compute_state_id() - for record in self: - if ( - not record.parent_id - and not record.state_id - and record.residence_state_id - ): - record.state_id = record.residence_state_id - - # pylint: disable=W8110 - @api.depends("residence_city") - def _compute_city(self): - if hasattr(super(), "_compute_city"): - super()._compute_city() - for record in self: - if not record.parent_id and not record.city and record.residence_city: - record.city = record.residence_city - - # pylint: disable=W8110 - @api.depends("residence_street") - def _compute_street(self): - if hasattr(super(), "_compute_street"): - super()._compute_street() - for record in self: - if not record.parent_id and not record.street and record.residence_street: - record.street = record.residence_street - - # pylint: disable=W8110 - @api.depends("residence_street2") - def _compute_street2(self): - if hasattr(super(), "_compute_street2"): - super()._compute_street2() - for record in self: - if not record.parent_id and not record.street2 and record.residence_street2: - record.street2 = record.residence_street2 - - # pylint: disable=W8110 - @api.depends("residence_zip") - def _compute_zip(self): - if hasattr(super(), "_compute_zip"): - super()._compute_zip() - for record in self: - if not record.parent_id and not record.zip and record.residence_zip: - record.zip = record.residence_zip def _compute_reservations_count(self): # Return reservation with partner included in reservation and/or checkin @@ -685,46 +249,6 @@ def _check_is_agency(self): if not record.is_agency and record.sale_channel_id: record.sale_channel_id = None - # REVIEW: problems with odoo demo data - # @api.constrains("mobile", "email") - # def _check_duplicated(self): - # for record in self: - # partner, field = record._search_duplicated() - # if partner: - # raise models.ValidationError( - # _( - # "Partner %s found with same %s (%s)", - # partner.name, - # partner._fields[field].string, - # getattr(record, field), - # ) - # ) - - @api.constrains("residence_state_id", "residence_country_id") - def _check_residence_state_id_residence_country_id_consistence(self): - for record in self: - if record.residence_state_id and record.residence_country_id: - if ( - record.residence_state_id.country_id - and record.residence_country_id - not in record.residence_state_id.country_id - ): - raise ValidationError( - _("State and country of residence do not match") - ) - - def _search_duplicated(self): - self.ensure_one() - partner = False - for field in self._get_key_fields(): - if getattr(self, field): - partner = self.search( - [(field, "=", getattr(self, field)), ("id", "!=", self.id)] - ) - if partner: - field = field - return partner, field - @api.model def _get_key_fields(self): key_fields = super()._get_key_fields() @@ -736,87 +260,6 @@ def _check_enought_invoice_data(self): # Template to be inherited by localization modules return True - def unlink(self): - various_partner_id = self.env.ref("pms.various_pms_partner").id - if various_partner_id in self.ids: - various_partner = self.browse(various_partner_id) - raise ValidationError( - _("The partner %s cannot be deleted"), various_partner.name - ) - return super().unlink() - - @api.model_create_multi - def create(self, vals_list): - for vals in vals_list: - check_missing_document = self._check_document_partner_required(vals) - if check_missing_document: - raise ValidationError(_("A document identification is required")) - return super().create(vals_list) - - def write(self, vals): - check_missing_document = self._check_document_partner_required( - vals, partners=self - ) - if check_missing_document: - # REVIEW: Deactivate this check for now, because it can generate problems - # with other modules that update technical partner fields - _logger.warning( - _("Partner without document identification, update vals %s"), vals - ) - # We only check if the vat or document_number is updated - if "vat" in vals or "document_number" in vals: - raise ValidationError(_("A document identification is required")) - return super().write(vals) - - @api.model - def _check_document_partner_required(self, vals, partners=False): - company_ids = ( - self.env["res.company"].sudo().search([]).ids - if (not partners or any([not partner.company_id for partner in partners])) - else partners.mapped("company_id.id") - ) - if not self.env.context.get("avoid_document_restriction") and any( - [ - self.env["res.company"] - .sudo() - .browse(company_id) - .document_partner_required - for company_id in company_ids - ] - ): - return self._missing_document(vals, partners) - return False - - @api.model - def _missing_document(self, vals, partners=False): - # If not is a partner contact and not have vat, - # then return missing document True - if ( - not vals.get("parent_id") - or (partners and any([not partner.parent_id for partner in partners])) - ) and ( - vals.get("vat") is False - or vals.get("vat") == "" - or ( - "vat" not in vals - and ( - any([not partner.vat for partner in partners]) if partners else True - ) - ) - or vals.get("country_id") is False - or vals.get("country_id") == "" - or ( - "country_id" not in vals - and ( - any([not partner.country_id for partner in partners]) - if partners - else True - ) - ) - ): - return True - return False - @api.constrains("is_agency", "property_product_pricelist") def _check_agency_pricelist(self): if any( diff --git a/pms/models/res_partner_id_number.py b/pms/models/res_partner_id_number.py deleted file mode 100644 index 7ae73bb06f..0000000000 --- a/pms/models/res_partner_id_number.py +++ /dev/null @@ -1,141 +0,0 @@ -# Copyright 2004-2010 Tiny SPRL http://tiny.be -# Copyright 2010-2012 ChriCar Beteiligungs- und Beratungs- GmbH -# http://www.camptocamp.at -# Copyright 2015 Antiun Ingenieria, SL (Madrid, Spain) -# http://www.antiun.com -# Antonio Espinosa -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html). - -from odoo import _, api, fields, models -from odoo.exceptions import ValidationError - - -class ResPartnerIdNumber(models.Model): - _inherit = "res.partner.id_number" - - name = fields.Char( - readonly=False, - store=True, - compute="_compute_name", - ) - - category_id = fields.Many2one( - readonly=False, - store=True, - compute="_compute_category_id", - ) - - valid_from = fields.Date( - readonly=False, - store=True, - compute="_compute_valid_from", - ) - - country_id = fields.Many2one( - string="Country", - comodel_name="res.country", - help="Country of the document", - compute="_compute_country_id", - store=True, - readonly=False, - ) - - # pylint: disable=W8110 - @api.depends("partner_id", "partner_id.pms_checkin_partner_ids.document_number") - def _compute_name(self): - if hasattr(super(), "_compute_name"): - super()._compute_name() - for record in self: - if record.partner_id.pms_checkin_partner_ids: - last_update_name = record.partner_id.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.document_id == r - and x.write_date - == max(r.partner_id.pms_checkin_partner_ids.mapped("write_date")) - ) - if last_update_name and last_update_name[0].document_number: - record.name = last_update_name[0].document_number - - # pylint: disable=W8110 - @api.depends( - "partner_id", "partner_id.pms_checkin_partner_ids.document_expedition_date" - ) - def _compute_valid_from(self): - if hasattr(super(), "_compute_valid_from"): - super()._compute_valid_from() - for record in self: - if record.partner_id.pms_checkin_partner_ids: - last_update_valid_from = ( - record.partner_id.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.document_id == r - and x.write_date - == max( - r.partner_id.pms_checkin_partner_ids.mapped("write_date") - ) - ) - ) - if ( - last_update_valid_from - and last_update_valid_from[0].document_expedition_date - ): - record.valid_from = last_update_valid_from[ - 0 - ].document_expedition_date - - # pylint: disable=W8110 - @api.depends("partner_id", "partner_id.pms_checkin_partner_ids.document_type") - def _compute_category_id(self): - if hasattr(super(), "_compute_category_id"): - super()._compute_category_id() - for record in self: - if record.partner_id.pms_checkin_partner_ids: - last_update_category_id = ( - record.partner_id.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.document_id == r - and x.write_date - == max( - r.partner_id.pms_checkin_partner_ids.mapped("write_date") - ) - ) - ) - if last_update_category_id and last_update_category_id[0].document_type: - record.category_id = last_update_category_id[0].document_type - - @api.depends("partner_id", "partner_id.pms_checkin_partner_ids.document_country_id") - def _compute_country_id(self): - for record in self: - if record.partner_id.pms_checkin_partner_ids: - last_update_document = ( - record.partner_id.pms_checkin_partner_ids.filtered( - lambda x, r=record: x.document_id == r - and x.write_date - == max( - r.partner_id.pms_checkin_partner_ids.mapped("write_date") - ) - ) - ) - if last_update_document and last_update_document[0].document_country_id: - record.country_id = last_update_document[0].document_country_id - - @api.constrains("partner_id", "category_id") - def _check_category_id_unique(self): - for record in self: - id_number = self.env["res.partner.id_number"].search( - [ - ("partner_id", "=", record.partner_id.id), - ("category_id", "=", record.category_id.id), - ] - ) - if len(id_number) > 1: - raise ValidationError(_("Partner already has this document type")) - - @api.constrains("country_id", "category_id") - def _check_document_country_id_category_id_consistence(self): - for record in self: - if record.category_id and record.country_id: - if ( - record.category_id.country_ids - and record.country_id not in record.category_id.country_ids - ): - raise ValidationError( - _("Country is not allowed for this document type") - ) diff --git a/pms/static/description/index.html b/pms/static/description/index.html index 72d369699a..6b837637a6 100644 --- a/pms/static/description/index.html +++ b/pms/static/description/index.html @@ -3,7 +3,7 @@ -README.rst +PMS (Property Management System) -
+
+

PMS (Property Management System)

- - -Odoo Community Association - -
-

PMS (Property Management System)

-

Beta License: AGPL-3 OCA/pms Translate me on Weblate Try me on Runboat

+

Beta License: AGPL-3 OCA/pms Translate me on Weblate Try me on Runboat

This module is an all-in-one property management system (PMS) focused on medium-sized properties for managing every aspect of your property’s daily operations.

You can manage properties with multi-property and multi-company support, including your rooms inventory, @@ -395,21 +390,21 @@

PMS (Property Management System)

-

Installation

+

Installation

This module depends on modules base, mail, sale and multi_pms_properties. Ensure yourself to have all them in your addons list.

-

Configuration

+

Configuration

You will find the hotel settings in PMS Management > Configuration > Properties > Your Property.

This module required additional configuration for company, accounting, invoicing and user privileges.

-

Usage

+

Usage

To use this module, please, read the complete user guide at roomdoo.com.

-

Bug Tracker

+

Bug Tracker

Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us to smash it by providing a detailed and welcomed @@ -417,15 +412,15 @@

Bug Tracker

Do not contact contributors directly about support or help with technical issues.

-

Credits

+

Credits

-

Authors

+

Authors

  • Commit [Sun]
-

Contributors

+

Contributors

  • Alexandre Díaz
  • Pablo Quesada
  • @@ -442,7 +437,7 @@

    Contributors

-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association @@ -455,6 +450,5 @@

Maintainers

-
diff --git a/pms/tests/test_pms_checkin_partner.py b/pms/tests/test_pms_checkin_partner.py index 199644c523..76336f71ac 100644 --- a/pms/tests/test_pms_checkin_partner.py +++ b/pms/tests/test_pms_checkin_partner.py @@ -1,7 +1,6 @@ import datetime import logging -from dateutil.relativedelta import relativedelta from freezegun import freeze_time from odoo import fields @@ -58,21 +57,6 @@ def setUpClass(cls): "gender": "male", } ) - cls.id_category = cls.env["res.partner.id_category"].search( - [("code", "=", "D")] - ) - if not cls.id_category: - cls.id_category = cls.env["res.partner.id_category"].create( - {"name": "DNI", "code": "D"} - ) - cls.env["res.partner.id_number"].create( - { - "category_id": cls.id_category.id, - "name": "30065089H", - "valid_from": today, - "partner_id": cls.host1.id, - } - ) cls.sale_channel_direct1 = cls.env["pms.sale.channel"].create( { "name": "Door", @@ -125,14 +109,6 @@ def test_auto_unlink_checkins(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "85564627G", - "valid_from": datetime.date.today(), - "partner_id": host2.id, - } - ) self.reservation_1.checkin_partner_ids = [ ( 0, @@ -268,14 +244,6 @@ def test_too_many_people_checkin(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "95876871Z", - "valid_from": datetime.date.today(), - "partner_id": host2.id, - } - ) host3 = self.env["res.partner"].create( { "name": "Enmanuel", @@ -285,14 +253,6 @@ def test_too_many_people_checkin(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "58261664L", - "valid_from": datetime.date.today(), - "partner_id": host3.id, - } - ) host4 = self.env["res.partner"].create( { "name": "Enrique", @@ -302,14 +262,6 @@ def test_too_many_people_checkin(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "61645604S", - "valid_from": datetime.date.today(), - "partner_id": host4.id, - } - ) self.env["pms.checkin.partner"].create( { "partner_id": host2.id, @@ -358,14 +310,6 @@ def test_count_pending_arrival_persons(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "63073204M", - "valid_from": datetime.date.today(), - "partner_id": self.host2.id, - } - ) self.host3 = self.env["res.partner"].create( { "name": "Enmanuel", @@ -375,14 +319,6 @@ def test_count_pending_arrival_persons(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "70699468K", - "valid_from": datetime.date.today(), - "partner_id": self.host3.id, - } - ) self.checkin2 = self.env["pms.checkin.partner"].create( { @@ -433,14 +369,7 @@ def test_complete_checkin_data(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "12650631X", - "valid_from": datetime.date.today(), - "partner_id": self.host2.id, - } - ) + # ACT self.checkin2 = self.env["pms.checkin.partner"].create( @@ -486,14 +415,7 @@ def test_auto_arrival_delayed(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "61369791H", - "valid_from": datetime.date.today(), - "partner_id": self.host2.id, - } - ) + self.host3 = self.env["res.partner"].create( { "name": "Enmanuel", @@ -503,14 +425,7 @@ def test_auto_arrival_delayed(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "53563260D", - "valid_from": datetime.date.today(), - "partner_id": self.host3.id, - } - ) + self.host4 = self.env["res.partner"].create( { "name": "Enrique", @@ -520,14 +435,7 @@ def test_auto_arrival_delayed(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "63742138F", - "valid_from": datetime.date.today(), - "partner_id": self.host4.id, - } - ) + self.reservation_1.write( { "checkin": datetime.date.today() + datetime.timedelta(days=1), @@ -600,14 +508,7 @@ def test_auto_arrival_delayed_checkout(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "61369791H", - "valid_from": datetime.date.today(), - "partner_id": self.host2.id, - } - ) + self.host3 = self.env["res.partner"].create( { "name": "Enmanuel", @@ -617,14 +518,7 @@ def test_auto_arrival_delayed_checkout(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "53563260D", - "valid_from": datetime.date.today(), - "partner_id": self.host3.id, - } - ) + self.host4 = self.env["res.partner"].create( { "name": "Enrique", @@ -634,14 +528,7 @@ def test_auto_arrival_delayed_checkout(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "63742138F", - "valid_from": datetime.date.today(), - "partner_id": self.host4.id, - } - ) + self.reservation_1.write( { "checkin": datetime.date.today(), @@ -926,8 +813,6 @@ def test_create_partner_when_checkin_has_enought_data(self): { "firstname": "Pepe", "lastname": "Paz", - "document_type": self.id_category.id, - "document_number": "77156490T", "reservation_id": self.reservation_1.id, } ) @@ -938,28 +823,6 @@ def test_create_partner_when_checkin_has_enought_data(self): "Partner should have been created and associated with the checkin", ) - def test_not_create_partner_checkin_hasnt_enought_data(self): - """ - Check that partner is not created when the necessary minimum data isn't entered - into checkin_partner data, in this case document_id and document_number - """ - # ACT & ASSERT - checkin = self.env["pms.checkin.partner"].create( - { - "firstname": "Pepe", - "lastname": "Paz", - "email": "pepepaz@gmail.com", - "mobile": "666777777", - "reservation_id": self.reservation_1.id, - } - ) - - # ASSERT - self.assertFalse( - checkin.partner_id, - "Partner mustn't have been created and associated with the checkin", - ) - def test_add_partner_data_from_checkin(self): """ If the checkin_partner has some data that the partner doesn't have, @@ -977,32 +840,6 @@ def test_add_partner_data_from_checkin(self): # ASSERT self.assertTrue(self.host1.mobile, "Partner mobile must be added") - def test_partner_id_numbers_created_from_checkin(self): - """ - Some of the required data of the checkin_partner to create the partner are - document_type and document_number, with them an id_number is created associated - with the partner that has just been created. In this test it is verified that - this document has been created correctly - """ - # ACT & ARRANGE - checkin = self.env["pms.checkin.partner"].create( - { - "firstname": "Pepe", - "lastname": "Paz", - "document_type": self.id_category.id, - "document_number": "77156490T", - "reservation_id": self.reservation_1.id, - } - ) - - checkin.flush_recordset() - - # ASSERT - self.assertTrue( - checkin.partner_id.id_numbers, - "Partner id_number should have been created and hasn't been", - ) - def _test_partner_not_modified_when_checkin_modified(self): """ If a partner is associated with a checkin @@ -1034,47 +871,6 @@ def test_partner_modified_previous_checkin_not_modified(self): "Checkin partner gender and partner gender shouldn't match", ) - def test_add_partner_if_exists_from_checkin(self): - """ - Check when a document_type and document_number are entered in a checkin if this - document already existes and is associated with a partner, this partner will be - associated with the checkin - """ - # ACT - host = self.env["res.partner"].create( - { - "name": "Ricardo", - "mobile": "666555666", - "email": "ricardo@example.com", - "birthdate_date": "1995-11-14", - "gender": "male", - } - ) - - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "55562998N", - "partner_id": host.id, - } - ) - - # ARRANGE - checkin = self.env["pms.checkin.partner"].create( - { - "document_type": self.id_category.id, - "document_number": "55562998N", - "reservation_id": self.reservation_1.id, - } - ) - - # ASSERT - self.assertEqual( - checkin.partner_id.id, - host.id, - "Checkin partner_id must be the same as the one who has that document", - ) - def test_is_possible_customer_by_email(self): """ It is checked that the field possible_existing_customer_ids @@ -1321,245 +1117,12 @@ def test_not_add_any_possibles_customers(self): ): several_partners_wizard.add_partner() - def test_calculate_dni_expedition_date_from_validity_date_age_lt_30(self): - """ - Check that the calculate_doc_type_expedition_date_from_validity_date() - method calculates correctly the expedition_date of an id category DNI - when the age is less than 30. - ------------- - We launch the method calculate_doc_type_expedition_date_from_validity_date - with the parameters doc_type_id DNI, birthdate calculated so that the age - is = 20 years old and document_date = today + 1 year. The expected - expedition date has to be doc_date - 5 years - """ - doc_date = fields.date.today() + relativedelta(years=1) - doc_date_str = str(doc_date) - - # age=20 years old - birthdate = fields.date.today() - relativedelta(years=20) - birthdate_str = str(birthdate) - - # expected_expedition_date = doc_date - 5 years - expected_exp_date = doc_date - relativedelta(years=5) - expedition_date = ( - self.checkin1.calculate_doc_type_expedition_date_from_validity_date( - self.id_category, doc_date_str, birthdate_str - ) - ) - date_expedition_date = datetime.date( - year=expedition_date.year, - month=expedition_date.month, - day=expedition_date.day, - ) - self.assertEqual( - date_expedition_date, - expected_exp_date, - "Expedition date doesn't correspond with expected expedition date", - ) - - def test_calculate_dni_expedition_date_from_validity_date_age_gt_30(self): - """ - Check that the calculate_doc_type_expedition_date_from_validity_date() - method calculates correctly the expedition_date of an id category DNI - when the age is greater than 30. - ------------- - We launch the method calculate_doc_type_expedition_date_from_validity_date - with the parameters doc_type_id DNI, birthdate calculated so that the age - is = 40 years old and document_date = today + 1 year. The expected - expedition date has to be doc_date - 10 years - """ - doc_date = fields.date.today() + relativedelta(years=1) - doc_date_str = str(doc_date) - - # age=40 years old - birthdate = fields.date.today() - relativedelta(years=40) - birthdate_str = str(birthdate) - - # expected_expedition_date = doc_date - 10 years - expected_exp_date = doc_date - relativedelta(years=10) - expedition_date = ( - self.checkin1.calculate_doc_type_expedition_date_from_validity_date( - self.id_category, doc_date_str, birthdate_str - ) - ) - date_expedition_date = datetime.date( - year=expedition_date.year, - month=expedition_date.month, - day=expedition_date.day, - ) - self.assertEqual( - date_expedition_date, - expected_exp_date, - "Expedition date doesn't correspond with expected expedition date", - ) - - def test_calculate_passport_expedition_date_from_validity_date_age_lt_30(self): - """ - Check that the calculate_doc_type_expedition_date_from_validity_date() - method calculates correctly the expedition_date of an id category Passport - when the age is less than 30. - ------------- - We launch the method calculate_doc_type_expedition_date_from_validity_date - with the parameters doc_type_id Passport, birthdate calculated so that the age - is = 20 years old and document_date = today + 1 year. The expected - expedition date has to be doc_date - 5 years - """ - doc_date = fields.date.today() + relativedelta(years=1) - doc_date_str = str(doc_date) - - # age=20 years old - birthdate = fields.date.today() - relativedelta(years=20) - birthdate_str = str(birthdate) - - # expected_expedition_date = doc_date - 5 years - expected_exp_date = doc_date - relativedelta(years=5) - expedition_date = ( - self.checkin1.calculate_doc_type_expedition_date_from_validity_date( - self.id_category, doc_date_str, birthdate_str - ) - ) - date_expedition_date = datetime.date( - year=expedition_date.year, - month=expedition_date.month, - day=expedition_date.day, - ) - self.assertEqual( - date_expedition_date, - expected_exp_date, - "Expedition date doesn't correspond with expected expedition date", - ) - - def test_calculate_passport_expedition_date_from_validity_date_age_gt_30(self): - """ - Check that the calculate_doc_type_expedition_date_from_validity_date() - method calculates correctly the expedition_date of an id category Passport - when the age is greater than 30. - ------------- - We launch the method calculate_doc_type_expedition_date_from_validity_date - with the parameters doc_type_id Passport, birthdate calculated so that the age - is = 40 years old and document_date = today + 1 year. The expected - expedition date has to be doc_date - 10 years - """ - doc_type_id = self.env["res.partner.id_category"].search([("code", "=", "P")]) - doc_date = fields.date.today() + relativedelta(years=1) - doc_date_str = str(doc_date) - - # age=40 years old - birthdate = fields.date.today() - relativedelta(years=40) - birthdate_str = str(birthdate) - - # expected_expedition_date = doc_date - 10 years - expected_exp_date = doc_date - relativedelta(years=10) - expedition_date = ( - self.checkin1.calculate_doc_type_expedition_date_from_validity_date( - doc_type_id, doc_date_str, birthdate_str - ) - ) - date_expedition_date = datetime.date( - year=expedition_date.year, - month=expedition_date.month, - day=expedition_date.day, - ) - self.assertEqual( - date_expedition_date, - expected_exp_date, - "Expedition date doesn't correspond with expected expedition date", - ) - - def test_calculate_expedition_date(self): - """ - Check that if the value of the doc_date is less than today, - the method calculate_doc_type_expedition_date_from_validity_date - returns the value of the doc_date as expedition_date. - ----------- - We launch the method calculate_doc_type_expedition_date_from_validity_date - with the parameters doc_type_id DNI, birthdate calculated so that the age - is = 20 years old and document_date = today - 1 year. The expected - expedition date has to be the value of doc_date. - """ - doc_type_id = self.env["res.partner.id_category"].search([("code", "=", "D")]) - doc_date = fields.date.today() - relativedelta(years=1) - doc_date_str = str(doc_date) - birthdate = fields.date.today() - relativedelta(years=20) - birthdate_str = str(birthdate) - expedition_date = ( - self.checkin1.calculate_doc_type_expedition_date_from_validity_date( - doc_type_id, doc_date_str, birthdate_str - ) - ) - date_expedition_date = datetime.date( - year=expedition_date.year, - month=expedition_date.month, - day=expedition_date.day, - ) - self.assertEqual( - date_expedition_date, - doc_date, - "Expedition date doesn't correspond with expected expedition date", - ) - - def test_save_checkin_from_portal(self): - """ - Check by subtesting that a checkin partner is saved correctly - with the _save_data_from_portal() method. - --------- - A reservation is created with an adult, and it will create a checkin partner. - A dictionary is created with the values to be saved and with the key 'id' - equal to the id of the checkin_partner created when the reservation was - created. We launch the _save_data_from_portal() method, passing the created - dictionary as a parameter. Then it is verified that the value of each key - in the dictionary corresponds to the fields of the saved checkin_partner. - """ - self.reservation = self.env["pms.reservation"].create( - { - "checkin": datetime.date.today() + datetime.timedelta(days=10), - "checkout": datetime.date.today() + datetime.timedelta(days=13), - "room_type_id": self.room_type1.id, - "partner_id": self.host1.id, - "adults": 1, - "pms_property_id": self.pms_property1.id, - "sale_channel_origin_id": self.sale_channel_direct1.id, - } - ) - checkin_partner = self.reservation.checkin_partner_ids[0] - checkin_partner_vals = { - "checkin_partner": checkin_partner, - "id": checkin_partner.id, - "firstname": "Serafín", - "lastname": "Rivas", - "lastname2": "Gonzalez", - "document_type": self.id_category, - "document_number": "18038946T", - "document_expedition_date": "07/10/2010", - "birthdate_date": "05/10/1983", - "mobile": "60595595", - "email": "serafin@example.com", - "gender": "male", - "nationality_id": 1, - "residence_state_id": 1, - } - checkin_partner._save_data_from_portal(checkin_partner_vals) - checkin_partner_vals.update( - { - "birthdate_date": datetime.date(1983, 10, 5), - "document_expedition_date": datetime.date(2010, 10, 7), - "nationality_id": self.env["res.country"].search([("id", "=", 1)]), - "residence_state_id": self.env["res.country.state"].browse(1), - "document_type": self.id_category, - } - ) - for key in checkin_partner_vals: - with self.subTest(k=key): - self.assertEqual( - self.reservation.checkin_partner_ids[0][key], - checkin_partner_vals[key], - "The value of " + key + " is not correctly established", - ) - - def test_compute_partner_fields(self): + def test_compute_inverse_partner_fields(self): """ Check that the computes of the checkin_partner fields related to your partner correctly add these fields to the checkin_partner. + Also check if a change in checkin_partner fields correctly + executes the inverse way. --------------------------------------- A reservation is created with an adult (checkin_partner) ql which is saved in the checkin_partner_id variable, a partner is also created with all @@ -1590,19 +1153,18 @@ def test_compute_partner_fields(self): partner_vals = { "firstname": "Paz", "lastname": "Valenzuela", - "lastname2": "Soto", "email": "paz@example.com", "birthdate_date": datetime.date(1980, 10, 5), "gender": "female", "mobile": "666555444", "phone": "123456789", "nationality_id": nationality.id, - "residence_street": "Calle 123", - "residence_street2": "Avda. Constitución 123", - "residence_zip": "15700", - "residence_city": "City Residence", - "residence_country_id": nationality.id, - "residence_state_id": state.id, + "street": "Calle 123", + "street2": "Avda. Constitución 123", + "zip": "15700", + "city": "City Residence", + "country_id": nationality.id, + "state_id": state.id, # "pms_checkin_partner_ids": checkin_partner_id, } self.partner_id = self.env["res.partner"].create(partner_vals) @@ -1610,8 +1172,8 @@ def test_compute_partner_fields(self): partner_vals.update( { "nationality_id": nationality, - "residence_country_id": nationality, - "residence_state_id": state, + "country_id": nationality, + "state_id": state, } ) @@ -1624,3 +1186,21 @@ def test_compute_partner_fields(self): self.partner_id[key], "The value of " + key + " is not correctly established", ) + + checkin_partner_vals = { + "firstname": "Carlos", + "lastname": "balenzuela", + "email": "paz2@example.com", + "birthdate_date": datetime.date(1980, 10, 3), + "gender": "male", + "mobile": "626555444", + "phone": "124456789", + } + checkin_partner.write(checkin_partner_vals) + for key in checkin_partner_vals: + with self.subTest(k=key): + self.assertEqual( + self.reservation.checkin_partner_ids[0][key], + self.partner_id[key], + "The value of " + key + " is not correctly established", + ) diff --git a/pms/tests/test_pms_folio.py b/pms/tests/test_pms_folio.py index a844a310aa..f5c4510dd5 100644 --- a/pms/tests/test_pms_folio.py +++ b/pms/tests/test_pms_folio.py @@ -733,9 +733,6 @@ def test_auto_complete_partner_mobile(self): "email": "enrique@example.com", } ) - self.id_category = self.env["res.partner.id_category"].create( - {"name": "DNI", "code": "D"} - ) # ACT folio1 = self.env["pms.folio"].create( { @@ -769,9 +766,6 @@ def test_auto_complete_partner_email(self): "email": "simon@example.com", } ) - self.id_category = self.env["res.partner.id_category"].create( - {"name": "DNI", "code": "D"} - ) # ACT folio1 = self.env["pms.folio"].create( diff --git a/pms/tests/test_pms_reservation.py b/pms/tests/test_pms_reservation.py index af5a8ad1f1..d2bc6e1bc7 100644 --- a/pms/tests/test_pms_reservation.py +++ b/pms/tests/test_pms_reservation.py @@ -138,9 +138,7 @@ def setUpClass(cls): "gender": "male", } ) - cls.id_category = cls.env["res.partner.id_category"].create( - {"name": "DNI", "code": "D"} - ) + cls.sale_channel_direct = cls.env["pms.sale.channel"].create( {"name": "sale channel direct", "channel_type": "direct"} ) @@ -913,15 +911,7 @@ def test_reservation_action_checkout(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "30065089H", - "valid_from": datetime.date.today(), - "partner_id": host.id, - "country_id": self.env.ref("base.es").id, - } - ) + r1 = self.env["pms.reservation"].create( { "checkin": fields.date.today(), @@ -1174,15 +1164,7 @@ def test_compute_ready_for_checkin(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "30065000H", - "valid_from": datetime.date.today(), - "partner_id": self.host1.id, - "country_id": self.env.ref("base.es").id, - } - ) + self.host2 = self.env["res.partner"].create( { "firstname": "Brais", @@ -1192,15 +1174,7 @@ def test_compute_ready_for_checkin(self): "gender": "male", } ) - self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "30065089H", - "valid_from": datetime.date.today(), - "partner_id": self.host2.id, - "country_id": self.env.ref("base.es").id, - } - ) + self.reservation = self.env["pms.reservation"].create( { "checkin": "2012-01-14", @@ -2593,9 +2567,7 @@ def _test_create_partner_in_reservation(self): # ARRANGE checkin = fields.date.today() checkout = fields.date.today() + datetime.timedelta(days=3) - self.id_category = self.env["res.partner.id_category"].create( - {"name": "DNI", "code": "D"} - ) + # ACT reservation = self.env["pms.reservation"].create( { @@ -2632,16 +2604,7 @@ def test_auto_complete_partner_mobile(self): "email": "enrique@example.com", } ) - self.id_category = self.env["res.partner.id_category"].create( - {"name": "DNI", "code": "D"} - ) - self.document_id = self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "61645604S", - "partner_id": partner.id, - } - ) + checkin = fields.date.today() checkout = fields.date.today() + datetime.timedelta(days=3) # ACT @@ -2683,16 +2646,7 @@ def test_auto_complete_partner_email(self): "email": "simon@example.com", } ) - self.id_category = self.env["res.partner.id_category"].create( - {"name": "DNI", "code": "D"} - ) - self.document_id = self.env["res.partner.id_number"].create( - { - "category_id": self.id_category.id, - "name": "74247377L", - "partner_id": partner.id, - } - ) + checkin = fields.date.today() checkout = fields.date.today() + datetime.timedelta(days=3) # ACT diff --git a/pms/tests/test_pms_reservation_line.py b/pms/tests/test_pms_reservation_line.py index b236663a27..b89650587e 100644 --- a/pms/tests/test_pms_reservation_line.py +++ b/pms/tests/test_pms_reservation_line.py @@ -145,9 +145,6 @@ def setUpClass(cls): "gender": "male", } ) - cls.id_category = cls.env["res.partner.id_category"].create( - {"name": "DNI", "code": "D"} - ) cls.sale_channel_direct = cls.env["pms.sale.channel"].create( {"name": "sale channel direct", "channel_type": "direct"} ) diff --git a/pms/views/pms_checkin_partner_views.xml b/pms/views/pms_checkin_partner_views.xml index f823d3bbf2..973e331110 100644 --- a/pms/views/pms_checkin_partner_views.xml +++ b/pms/views/pms_checkin_partner_views.xml @@ -62,49 +62,43 @@ /> - - - - - - -