From 0461bad40f330d92ce24cbdc8d2f026933d5430e Mon Sep 17 00:00:00 2001 From: ameye Date: Thu, 30 Apr 2026 21:35:23 -0400 Subject: [PATCH] members update --- app/api/routes/routes.py | 7 ++++ app/api/services/contacts.py | 12 ------ app/api/services/office_customer.py | 65 ++++++++++++++++++++++++++++- app/models/members.py | 18 ++++++++ 4 files changed, 89 insertions(+), 13 deletions(-) diff --git a/app/api/routes/routes.py b/app/api/routes/routes.py index 6ec80af..76a3fbe 100644 --- a/app/api/routes/routes.py +++ b/app/api/routes/routes.py @@ -795,6 +795,13 @@ def product_rebuild_office(): result = OfficeTemplatesService.office_template_rebuild(data) return jsonify(result) +@api.route('/office/update-profile', methods=['POST']) +def member_office_update(): + # Call the dashboard service + data = request.get_json() + result = OfficeCustomerService.update_customer_data(data) + return jsonify(result) + @api.route('/office/products-templates', methods=['GET']) def get_product_templates(): diff --git a/app/api/services/contacts.py b/app/api/services/contacts.py index 4454b73..2d94555 100644 --- a/app/api/services/contacts.py +++ b/app/api/services/contacts.py @@ -1,25 +1,13 @@ -from flask import session, jsonify -# from app.models.loan import Loan from app.utils.logger import logger from app.api.services.base_service import BaseService -# from app.api.schemas.eligibility_check import EligibilityCheckSchema from marshmallow import ValidationError -# from app.api.enums import TransactionType -# from app.api.integrations import SimbrellaIntegration from app.extensions import db from app.models import MembersProducts, Products, Members - -# from app.api.services.offer_analysis import OfferAnalysis from app.api.helpers.response_helper import ResponseHelper -from werkzeug.security import generate_password_hash, check_password_hash -# from app.api.schemas.register import RegisterSchema -from app.api.schemas.products import ProductsSchema from app.api.schemas.user import UserSchema import datetime -import jwt import random -from app.config import Config class ContactService(BaseService): diff --git a/app/api/services/office_customer.py b/app/api/services/office_customer.py index f803b6a..ec9ab8e 100644 --- a/app/api/services/office_customer.py +++ b/app/api/services/office_customer.py @@ -4,11 +4,74 @@ from app.api.services.base_service import BaseService from sqlalchemy import func, desc from datetime import datetime, timedelta, timezone from app.extensions import db -from app.models import MembersProducts, Products, Members, ProductsDetails, ProductsDetails, ProvisionActions +from app.models import (MembersProducts, Products, Members) +from app.api.schemas.office_member_data import OfficeMemberDataSchema +from app.api.helpers.response_helper import ResponseHelper +from marshmallow import ValidationError class OfficeCustomerService(BaseService): + + @staticmethod + def update_customer_data(data): + try: + with db.session.begin(): + logger.info(f"Incoming BackOffice Member data ==>>>> {data}") + validated_data = OfficeCustomerService.validate_data(data, OfficeMemberDataSchema()) + member_uid = validated_data.get('member_uid') + member_account_name = validated_data.get('member_account_name') + member_firstname = validated_data.get('member_account_name') + member_lastname = validated_data.get('member_account_name') + member_full_address = validated_data.get('member_account_name') + member_email = validated_data.get('member_account_name') + member_phone = validated_data.get('member_account_name') + + member_data = Members.get_member_by_uid(member_uid) + member_id = member_data.id + if member_data and member_id: + member_account_name = validated_data.get('member_account_name') + member_firstname = validated_data.get('member_account_name') + member_lastname = validated_data.get('member_account_name') + member_full_address = validated_data.get('member_account_name') + member_email = validated_data.get('member_account_name') + member_phone = validated_data.get('member_account_name') + + profile_data = { + "member_account_name": member_account_name, + "member_firstname": member_firstname, + "member_lastname": member_lastname, + "member_full_address": member_full_address, + "member_email": member_email, + "member_phone": member_phone, + } + Members.set_office_update_profile(member_uid, profile_data) + + response_data = { + "last_update": datetime.datetime.utcnow(), + "member_id": member_id + } + + return ResponseHelper.success(data=response_data) + + except ValidationError as err: + + logger.error(f"Validation Error: {getattr(err, 'messages', str(err))}") + db.session.rollback() + return ResponseHelper.unprocessable_entity(result_description="Validation exception") + + except ValueError as err: + logger.error(f"{getattr(err, 'messages', str(err))}") + db.session.rollback() + return ResponseHelper.error(result_description=str(err)) + + except Exception as e: + logger.error(f"An error occurred: {str(e)}", exc_info=True) + db.session.rollback() + return ResponseHelper.internal_server_error() + + + @staticmethod def get_customer_data(filters=None): try: diff --git a/app/models/members.py b/app/models/members.py index bb60d99..be91a5f 100644 --- a/app/models/members.py +++ b/app/models/members.py @@ -125,6 +125,24 @@ class Members(db.Model): member.updated = datetime.now(timezone.utc) return member + @classmethod + def set_office_update_profile(cls, uid, profile_data): + member = cls.query.filter_by(uid=str(uid)).first() + + if not member: + logger.info(f"User UID = {uid} found") + raise ValueError(f"Member with UID {uid} does not exist.") + + member.full_address = profile_data["member_full_address"] + member.account_name = profile_data["member_account_name"] + member.firstname = profile_data["member_firstname"] + member.lastname = profile_data["member_lastname"] + member.phone = profile_data["member_phone"] + member.email = profile_data["member_email"] + member.updated = datetime.now(timezone.utc) + return member + + @classmethod def set_member_last_login(cls, uid): member = cls.query.filter_by(uid=str(uid)).first()