168 lines
6.7 KiB
Python
168 lines
6.7 KiB
Python
from flask import session, jsonify
|
|
|
|
from app.api.schemas.report import ReportSchema
|
|
from app.utils.logger import logger
|
|
from app.api.services.base_service import BaseService
|
|
from marshmallow import ValidationError
|
|
from app.extensions import db
|
|
from app.models import MembersProducts, Products, Members, Payments, MembersActions
|
|
from app.api.helpers.response_helper import ResponseHelper
|
|
from app.api.schemas.user import UserSchema
|
|
import datetime
|
|
|
|
|
|
class SystemReportService(BaseService):
|
|
|
|
@staticmethod
|
|
def process_report_topic_request(data):
|
|
try:
|
|
with db.session.begin():
|
|
logger.info(f"Incoming SystemReportService data ==>>>> {data}")
|
|
validated_data = SystemReportService.validate_data(data, UserSchema())
|
|
token = validated_data.get('token')
|
|
uid = validated_data.get('uid')
|
|
member_data = Members.get_member_by_uid(uid)
|
|
member_id = member_data.id
|
|
|
|
topics_data = SystemReportService.configured_report_types()
|
|
response_data = {
|
|
"last_update": datetime.datetime.utcnow(),
|
|
"member_id": member_id,
|
|
"topics": topics_data,
|
|
}
|
|
|
|
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 configured_report_types():
|
|
data = {
|
|
"topics": [
|
|
{"name": 'Payments', "url": 'payment', "active": True, "list_order": 0},
|
|
{"name": 'Product', "url": 'product', "active": True, "list_order": 1},
|
|
{"name": 'System', "url": 'system', "active": True, "list_order": 2},
|
|
]
|
|
|
|
}
|
|
return data
|
|
|
|
@staticmethod
|
|
def process_report_topic_item(report_type, data):
|
|
try:
|
|
with db.session.begin():
|
|
logger.info(f"Incoming ReportService Item Data ==>>>> {data}")
|
|
validated_data = SystemReportService.validate_data(data, ReportSchema())
|
|
token = validated_data.get('token')
|
|
uid = validated_data.get('uid')
|
|
page = validated_data.get('page')
|
|
|
|
|
|
member_data = Members.get_member_by_uid(uid)
|
|
member_id = member_data.id
|
|
response_data =[]
|
|
|
|
if report_type == "PAYMENT":
|
|
member_payments = Payments.get_member_payments_by_member_id(member_id)
|
|
|
|
member_payments_data = []
|
|
|
|
for t in member_payments:
|
|
member_payments_data.append({
|
|
'id': t.id,
|
|
'uid': t.uid,
|
|
'option_name': t.option_name,
|
|
'option_type': t.option_type,
|
|
'payment_uid': t.payment_uid,
|
|
'amount': round(t.amount * 0.01, 2),
|
|
'currency': '$',
|
|
'status': t.status,
|
|
'added': t.added
|
|
})
|
|
|
|
response_data = {
|
|
"last_update": datetime.datetime.utcnow(),
|
|
"member_id": member_id,
|
|
"payment": member_payments_data,
|
|
}
|
|
|
|
if report_type == "PRODUCT":
|
|
sub_status = []
|
|
|
|
member_subs = MembersProducts.get_member_productlist_by_member_id(member_id)
|
|
for tt in member_subs:
|
|
sub_status.append({
|
|
'product_id': tt.product_id,
|
|
'product_name': "Name for - " + tt.product_id,
|
|
'added': tt.added,
|
|
'subscription_uid': tt.uid,
|
|
'status': tt.status,
|
|
'internal_url': tt.internal_url,
|
|
'dns_group': tt.dns_group,
|
|
})
|
|
logger.info(f"Member Product Sub Data ****** *****: {sub_status}")
|
|
|
|
|
|
response_data = {
|
|
"last_update": datetime.datetime.utcnow(),
|
|
"member_id": member_id,
|
|
"product": sub_status,
|
|
}
|
|
|
|
if report_type == "SYSTEM":
|
|
member_actions = MembersActions.get_recent_member_actions(member_id)
|
|
member_actions_data = []
|
|
if member_actions:
|
|
for t in member_actions:
|
|
member_actions_data.append({
|
|
'id': t.id,
|
|
'uid': t.uid,
|
|
'member_id': t.member_id,
|
|
'member_uid': t.member_uid,
|
|
'action_label': t.action_label,
|
|
'action_name': t.action_name,
|
|
'status_description': t.status_description,
|
|
'status': t.status,
|
|
'added': t.added,
|
|
'updated': t.updated
|
|
})
|
|
response_data = {
|
|
"last_update": datetime.datetime.utcnow(),
|
|
"member_id": member_id,
|
|
"system": member_actions_data,
|
|
}
|
|
|
|
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()
|
|
|
|
|