diff --git a/pms/controllers/pms_portal.py b/pms/controllers/pms_portal.py index 9ffb80888..819d890b8 100644 --- a/pms/controllers/pms_portal.py +++ b/pms/controllers/pms_portal.py @@ -317,7 +317,7 @@ class PortalPrecheckin(CustomerPortal): } ) if kw: - error, error_message = self.form_validate(kw) + error, error_message = self.form_validate(kw, None) values.update( { "error": error, @@ -349,6 +349,7 @@ class PortalPrecheckin(CustomerPortal): elif checkin_partner.partner_id: res_partner = checkin_partner.partner_id res_partner.write(values) + checkin_partner.write(values) values1 = dict() values1.update( @@ -414,7 +415,7 @@ class PortalPrecheckin(CustomerPortal): "mobile": kw.get("mobile-" + str(counter)), "email": kw.get("email-" + str(counter)), } - error, error_message = self.form_validate(values) + error, error_message = self.form_validate(kw, counter) errors.update({counter: error}) if error_message: for e in error_message: @@ -436,13 +437,17 @@ class PortalPrecheckin(CustomerPortal): elif checkin.partner_id: res_partner = checkin.partner_id res_partner.write(values) + checkin.write(values) counter = counter + 1 values = {"no_breadcrumbs": True} + if has_error: - for e in errors: - error = errors[e] + filtered_dict = {k: v for k, v in errors.items() if v} + for e in filtered_dict: + error = filtered_dict[e] values.update({"error": error}) + values.update( { "error_message": e_messages, @@ -473,55 +478,66 @@ class PortalPrecheckin(CustomerPortal): ) return request.render("pms.portal_my_reservation_precheckin", values) - def form_validate(self, data): + def form_validate(self, data, counter): error = dict() error_message = [] - if data["mobile"]: + keys = data.keys() + mobile = "mobile" if "mobile" in keys else "mobile-" + str(counter) + if data[mobile]: if not re.match( r"^(\d{3}[\-\s]?\d{2}[\-\s]?\d{2}[\-\s]?\d{2}[\-\s]?|" r"\d{3}[\-\s]?\d{3}[\-\s]?\d{3})$", - data["mobile"], + data[mobile], ): - error["mobile"] = error + error[mobile] = "error" error_message.append("Invalid phone") if data["document_number"]: + if not data["document_type"]: + error["document_type"] = "error" + error_message.append("Document Type is not selected") if data["document_type"] == "D": - if not re.match(r"^\d{8}[ -]?[a-zA-Z]$", data["document_number"]): - error["document_number"] = "error" - error_message.append("The DNI format is wrong") - letters = { - 0: "T", - 1: "R", - 2: "W", - 3: "A", - 4: "G", - 5: "M", - 6: "Y", - 7: "F", - 8: "P", - 9: "D", - 10: "X", - 11: "B", - 12: "N", - 13: "J", - 14: "Z", - 15: "S", - 16: "Q", - 17: "V", - 18: "H", - 19: "L", - 20: "C", - 21: "K", - 22: "E", - } - dni_number = data["document_number"][0:8] - dni_letter = data["document_number"][ - len(data["document_number"]) - 1 : len(data["document_number"]) - ] - if letters.get(int(dni_number) % 23) != dni_letter: + if ( + len(data["document_number"]) == 9 + or len(data["document_number"]) == 10 + ): + if not re.match(r"^\d{8}[ -]?[a-zA-Z]$", data["document_number"]): + error["document_number"] = "error" + error_message.append("The DNI format is wrong") + letters = { + 0: "T", + 1: "R", + 2: "W", + 3: "A", + 4: "G", + 5: "M", + 6: "Y", + 7: "F", + 8: "P", + 9: "D", + 10: "X", + 11: "B", + 12: "N", + 13: "J", + 14: "Z", + 15: "S", + 16: "Q", + 17: "V", + 18: "H", + 19: "L", + 20: "C", + 21: "K", + 22: "E", + } + dni_number = data["document_number"][0:8] + dni_letter = data["document_number"][ + len(data["document_number"]) - 1 : len(data["document_number"]) + ] + if letters.get(int(dni_number) % 23) != dni_letter.upper(): + error["document_number"] = "error" + error_message.append("DNI is invalid") + else: error["document_number"] = "error" error_message.append("DNI is invalid") - if data["document_type"] == "C" and not re.match( r"^\d{8}[ -]?[a-zA-Z]$", data["document_number"] ): @@ -537,6 +553,9 @@ class PortalPrecheckin(CustomerPortal): ): error["document_number"] = "error" error_message.append("The European Residence Permit format is wrong") + elif data["document_type"]: + error["document_number"] = "error" + error_message.append("Document Number not entered") if data["birthdate_date"] and data["birthdate_date"] > str( fields.Datetime.today() @@ -552,4 +571,9 @@ class PortalPrecheckin(CustomerPortal): if data["email"] and not tools.single_email_re.match(data["email"]): error["email"] = "error" error_message.append("Email format is wrong") + + if not data["firstname"] and not data["lastname"] and not data["lastname2"]: + error["firstanme"] = "error" + error_message.append("Firstname or any lastname are not included") + return error, error_message diff --git a/pms/views/precheckin_portal_templates.xml b/pms/views/precheckin_portal_templates.xml index 9b0560375..6ed1656ea 100644 --- a/pms/views/precheckin_portal_templates.xml +++ b/pms/views/precheckin_portal_templates.xml @@ -28,7 +28,6 @@ for="firstname" >Name + @@ -98,6 +98,13 @@ name="document_type" t-att-value="document_type or checkin_partner.document_type" > + + + + @@ -181,7 +188,7 @@
+ @@ -301,6 +311,9 @@ t-att-name="'document_type-'+ str(count)" t-att-value="document_type or checkin_partner.document_type" > +
+ + +
@@ -427,7 +443,7 @@
+ @@ -581,6 +600,9 @@ t-att-name="'document_type-'+ str(count)" t-att-value="document_type or checkin_partner.document_type" > + @@ -639,7 +661,7 @@