From e6944b5b717efd0ce2a40a9c3c1cf31943d8dffa Mon Sep 17 00:00:00 2001 From: Satendra Rawat Date: Mon, 21 Jun 2021 11:55:20 +0530 Subject: [PATCH 1/8] Code refactoring --- api/helpers/db_helper.py | 24 ------------------------ api/helpers/prompt_helper.py | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/api/helpers/db_helper.py b/api/helpers/db_helper.py index 04049770..5837ff06 100644 --- a/api/helpers/db_helper.py +++ b/api/helpers/db_helper.py @@ -12,30 +12,6 @@ def get_partner_id_by_system_phone(system_phone): return None -def get_program_prompt_id(jsonData): - """ - Expected program_details categories format (for ex): INTRO_1-SIGNUP_1-SELECTION_PROGRAM-OPTIN_2 - Value returned by this function: 2 - """ - if "program_details" in jsonData: - program_categories = helpers.fetch_by_key( - "categories", jsonData["program_details"] - ) - if len(program_categories) > 0: - split_prompt_by_hyphen = helpers.split_prompt_by_hyphen( - program_categories[0] - ) - split_prompt_by_underscore = helpers.split_prompt_by_underscore( - split_prompt_by_hyphen[-1] - ) - return ( - split_prompt_by_underscore[1] - if len(split_prompt_by_underscore) > 1 - else None - ) - return None - - def save(data): db.session.add(data) db.session.commit() diff --git a/api/helpers/prompt_helper.py b/api/helpers/prompt_helper.py index fc07e059..415eea4a 100644 --- a/api/helpers/prompt_helper.py +++ b/api/helpers/prompt_helper.py @@ -6,3 +6,27 @@ def split_prompt_by_hyphen(data): def split_prompt_by_underscore(data): program_sub_prompt = data.split("_") return program_sub_prompt + + +def get_program_prompt_id(jsonData): + """ + Expected program_details categories format (for ex): INTRO_1-SIGNUP_1-SELECTION_PROGRAM-OPTIN_2 + Value returned by this function: 2 + """ + if "program_details" in jsonData: + program_categories = helpers.fetch_by_key( + "categories", jsonData["program_details"] + ) + if len(program_categories) > 0: + split_prompt_by_hyphen = helpers.split_prompt_by_hyphen( + program_categories[0] + ) + split_prompt_by_underscore = helpers.split_prompt_by_underscore( + split_prompt_by_hyphen[-1] + ) + return ( + split_prompt_by_underscore[1] + if len(split_prompt_by_underscore) > 1 + else None + ) + return None From 473f79b0de220aee520ae8c4269e5ca3944db497 Mon Sep 17 00:00:00 2001 From: Satendra Rawat Date: Mon, 21 Jun 2021 11:56:08 +0530 Subject: [PATCH 2/8] Added model based status --- api/models/registration.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/api/models/registration.py b/api/models/registration.py index 7a1015f1..95ae9507 100644 --- a/api/models/registration.py +++ b/api/models/registration.py @@ -26,6 +26,12 @@ def get_latest_by_phone(self, phone): class Registration(TimestampMixin, db.Model): query_class = RegistrationQuery __tablename__ = "registration" + + class RegistrationStatus(object): + PENDING = "pending" + INCOMPLETE = "in-complete" + COMPLETE = "complete" + id = db.Column(db.Integer, primary_key=True) user_id = db.Column(db.Integer, db.ForeignKey("user.id")) user_phone = db.Column(db.String(50), nullable=False) From 03d9d09a8c393414a39f9f263f8a75c73e59fee2 Mon Sep 17 00:00:00 2001 From: Satendra Rawat Date: Mon, 21 Jun 2021 11:58:12 +0530 Subject: [PATCH 3/8] Fetch default program value from config --- api/services/registration_service.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/api/services/registration_service.py b/api/services/registration_service.py index 6bf2e66e..dc2449d6 100644 --- a/api/services/registration_service.py +++ b/api/services/registration_service.py @@ -1,5 +1,5 @@ # This file is treated as service layer -from api import models, db, helpers +from api import models, db, helpers, app from datetime import datetime @@ -8,14 +8,18 @@ def __init__(self): self.system_phone = None self.user_phone = None self.user_id = None - self.selected_program_id = None + self.selected_program_id = app.config["DEFAULT_PROGRAM_ID"] + self.has_default_program_selection = True self.selected_time_slot = None def set_init_data(self, jsonData): user_phone = helpers.fetch_by_key("urn", jsonData["contact"]) self.system_phone = helpers.fetch_by_key("address", jsonData["channel"]) self.user_phone = helpers.sanitize_phone_string(user_phone) - self.selected_program_id = helpers.get_program_prompt_id(jsonData) + selected_program_id = helpers.get_program_prompt_id(jsonData) + if selected_program_id: + self.selected_program_id = selected_program_id + self.has_default_program_selection = False def handle_registration(self, jsonData): try: @@ -83,6 +87,7 @@ def update_registration(self, registration, jsonData): registration.program_id = self.selected_program_id registration.signup_date = datetime.now() registration.user_id = self.user_id + registration.has_received_callback = True registration.status = "complete" db.session.commit() From 4ec0a2d831035f60c1460a452f4df85bf64b3b60 Mon Sep 17 00:00:00 2001 From: Satendra Rawat Date: Mon, 21 Jun 2021 11:58:52 +0530 Subject: [PATCH 4/8] set default program value in config --- config.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/config.py b/config.py index 9ecee7a4..10471436 100644 --- a/config.py +++ b/config.py @@ -36,3 +36,5 @@ SQLALCHEMY_TRACK_MODIFICATIONS = True WTF_CSRF_ENABLED = True SECRET_KEY = os.environ.get("SECRET_KEY") + +DEFAULT_PROGRAM_ID = 2 From f4d010f8c4e43de2966a8f9297414a89c2c92c61 Mon Sep 17 00:00:00 2001 From: Satendra Rawat Date: Tue, 22 Jun 2021 14:59:47 +0530 Subject: [PATCH 5/8] Registration statuses --- api/services/registration_service.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/api/services/registration_service.py b/api/services/registration_service.py index dc2449d6..f358c3d1 100644 --- a/api/services/registration_service.py +++ b/api/services/registration_service.py @@ -55,13 +55,17 @@ def register(self, jsonData): if self.selected_program_id: self.user_id = self.create_user(jsonData) - registration_status = "in-progress" if self.selected_program_id else "pending" + registration_status = ( + models.RegistrationStatus.IvrStatus.INCOMPLETE + if self.has_default_program_selection + else models.RegistrationStatus.IvrStatus.COMPLETE + ) if system_phone_details: registrant = models.Registration( user_phone=self.user_phone, system_phone=self.system_phone, state=system_phone_details.state, - status="complete" if self.user_id else registration_status, + status=registration_status, program_id=self.selected_program_id, partner_id=helpers.get_partner_id_by_system_phone(self.system_phone), user_id=self.user_id, From ede80a0c2b40666430691231550fde30d32d11bc Mon Sep 17 00:00:00 2001 From: Satendra Rawat Date: Tue, 22 Jun 2021 15:47:41 +0530 Subject: [PATCH 6/8] fix Registration status workflow --- api/helpers/db_helper.py | 2 +- api/helpers/prompt_helper.py | 3 +++ api/services/content_service.py | 2 +- api/services/registration_service.py | 4 ++-- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/api/helpers/db_helper.py b/api/helpers/db_helper.py index 5837ff06..f5bee86c 100644 --- a/api/helpers/db_helper.py +++ b/api/helpers/db_helper.py @@ -1,4 +1,4 @@ -from api import models, db, helpers +from api import models, db # TODO: Need to refactor this and try using ORM def get_partner_id_by_system_phone(system_phone): diff --git a/api/helpers/prompt_helper.py b/api/helpers/prompt_helper.py index 415eea4a..23c4f73b 100644 --- a/api/helpers/prompt_helper.py +++ b/api/helpers/prompt_helper.py @@ -1,3 +1,6 @@ +from api import helpers + + def split_prompt_by_hyphen(data): split_prompt = data.split("-") return split_prompt diff --git a/api/services/content_service.py b/api/services/content_service.py index 252bb82c..30aeb8af 100644 --- a/api/services/content_service.py +++ b/api/services/content_service.py @@ -1,4 +1,4 @@ -from api import models, db, helpers +from api import models, helpers class ContentService(object): diff --git a/api/services/registration_service.py b/api/services/registration_service.py index f358c3d1..2575dcff 100644 --- a/api/services/registration_service.py +++ b/api/services/registration_service.py @@ -56,9 +56,9 @@ def register(self, jsonData): self.user_id = self.create_user(jsonData) registration_status = ( - models.RegistrationStatus.IvrStatus.INCOMPLETE + models.Registration.RegistrationStatus.INCOMPLETE if self.has_default_program_selection - else models.RegistrationStatus.IvrStatus.COMPLETE + else models.Registration.RegistrationStatus.COMPLETE ) if system_phone_details: registrant = models.Registration( From 2c7461f59935faef93ce5d60b0fb4215132e4528 Mon Sep 17 00:00:00 2001 From: Satendra Rawat Date: Tue, 22 Jun 2021 15:53:18 +0530 Subject: [PATCH 7/8] Fixed issues with phone comparision --- api/models/system_phone.py | 2 +- api/models/user.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/api/models/system_phone.py b/api/models/system_phone.py index dee4d261..efa5e68e 100644 --- a/api/models/system_phone.py +++ b/api/models/system_phone.py @@ -5,7 +5,7 @@ class SystemPhoneQuery(BaseQuery): def get_by_phone(self, phone): - return self.filter(SystemPhone.phone == phone).first() + return self.filter(SystemPhone.phone.contains(phone[-10:])).first() class SystemPhone(TimestampMixin, db.Model): diff --git a/api/models/user.py b/api/models/user.py index 51a061e7..e3928766 100644 --- a/api/models/user.py +++ b/api/models/user.py @@ -5,7 +5,7 @@ class UserQuery(BaseQuery): def get_by_phone(self, phone): - return self.filter(User.phone == phone).first() + return self.filter(User.phone.contains(phone[-10:])).first() def get_by_id(self, id): return self.filter(User.id == id).first() From 4a8c03cf7514c8f4160fa1c1b8f9c6ad7398f756 Mon Sep 17 00:00:00 2001 From: Satendra Rawat Date: Wed, 23 Jun 2021 19:16:00 +0530 Subject: [PATCH 8/8] Fixed wording for registration status --- api/models/registration.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/models/registration.py b/api/models/registration.py index 95ae9507..f354d82a 100644 --- a/api/models/registration.py +++ b/api/models/registration.py @@ -29,7 +29,7 @@ class Registration(TimestampMixin, db.Model): class RegistrationStatus(object): PENDING = "pending" - INCOMPLETE = "in-complete" + INCOMPLETE = "incomplete" COMPLETE = "complete" id = db.Column(db.Integer, primary_key=True)