(20250102) Print statement removed.

This commit is contained in:
2025-01-02 10:12:05 +00:00
parent 2f563b2a0e
commit 7f98f1f662
5 changed files with 108 additions and 49 deletions
@@ -213,8 +213,6 @@ async def request_oauth_authorization_url(
if inbound_data.client == "zerodhaKite":
print("Zerodha")
# Prepare the inputs:
auth_url = await current_app.zerodha_kite_controller.get_authorization_url(api_key = inbound_data.auth.apiKey)
@@ -252,8 +250,6 @@ async def request_oauth_authorization_url(
if inbound_data.client == "iciciBreeze":
print("ICICI")
# Prepare the inputs:
auth_url = await current_app.icici_breeze_controller.get_authorization_url(api_key = inbound_data.auth.apiKey)
@@ -36,6 +36,7 @@ sys.path.append(".")
sys.path.append("..")
# My async utils:
from utils_v2.string import json
from utils_v2.database.async_mysql_v2 import AsyncMySQL
from utils_v2.database.async_mongo_v2 import AsyncMongo
from utils_v2.cache.async_redis_cache_v2 import AsyncRedisCache
@@ -310,6 +311,51 @@ class PaymentsController(CoreAuthTokenController, ABC):
# We don't support updating payments themselves,
# but we will allow updating fields like tags, adding events, etc.
async def add_receipt(
self,
sql_conn: AsyncMySQL,
mongo_data_conn: AsyncMongo,
payment: CorePaymentModel,
session_token: str = None
) -> bool:
"""
The API endpoint that initiates the payment request will send details for calling this procedure in the
'metadata' field. We take those values and invoke the procedure to add a receipt in the database's records.
:param sql_conn: The database connection to use to perform this activity.
:param mongo_data_conn: The database connection to use to perform this activity.
:param payment: The record of the payment whose details need to be added as a receipt.
:param session_token: The session token of the user to identify whose request caused this receipt update.
:return: True is the receipt was added, else False.
"""
# Call the database's procedure:
sql_json = await self.call_procedure(
sql_conn = sql_conn,
proc_name = "accounting_receipt_add",
proc_args = (
payment.metadata["idClient"],
payment.metadata["date"],
payment.metadata["source"],
payment.metadata["amount"],
payment.metadata["reference"],
payment.metadata["inAccount"],
payment.metadata["idUser"],
payment.metadata["documentUrl"],
payment.metadata["notes"]
),
retry_count = 1,
backoff_seconds = 0.5,
backoff_multiplier = 1.1,
session_token = session_token
)
print("RECEIPT ADD SQL JSON:", json.to_string(sql_json, default=str))
# Return the response:
if sql_json["status"] == 1: return True
else: return False
async def add_event_by_payment_id(
self,
mongo_data_conn: AsyncMongo,
@@ -238,7 +238,6 @@ class SafaricomMPesaExpressPaymentsController(PaymentsController):
) if isinstance(payment_request.payerNo, str) else payment_request.payerNo,
party_b = auth_token.auth["businessShortCode"]
)
print(client_response.to_markdown())
# Add this event to the payment's document:
event_note_success = await self.add_event_by_payment_id(
@@ -345,7 +344,7 @@ class SafaricomMPesaExpressPaymentsController(PaymentsController):
}
)
# For now, we just insert the event into the record:
# We just insert the event into the record:
event_note_success = await self.add_event_by_client_reference_id(
mongo_data_conn = mongo_data_conn,
event = PaymentEvent(
@@ -360,23 +359,20 @@ class SafaricomMPesaExpressPaymentsController(PaymentsController):
client_reference_id = pg_reference_id
)
# In case the payment collector's credentials have changed,
# we mark his account as disabled:
# if pg_result_code in [2001]:
# payment = await self.get_payment_by_client_reference_id(
# mongo_data_conn = mongo_data_conn,
# client_reference_id = pg_reference_id
# )
# auth_token = await self.get_token_from_id(
# mongo_data_conn = mongo_data_conn,
# token_id = payment.tokenId
# )
# auth_token.status = "disabled"
# await self.set_token(
# sql_conn = sql_conn,
# mongo_data_conn = mongo_data_conn,
# auth_token = auth_token
# )
# We now fetch the payment record and use that for cases like adding the receipt or disabling an account whose
# credentials are invalid:
payment = await self.get_payment_by_client_reference_id(
mongo_data_conn = mongo_data_conn,
client_reference_id = pg_reference_id
)
# For when the payment is successful:
if pg_result_code in []:
await self.add_receipt(
sql_conn = sql_conn,
mongo_data_conn = mongo_data_conn,
payment = payment
)
# Done here:
if event_note_success:
+2 -26
View File
@@ -44,7 +44,7 @@ from utils_v2.string import regex
from utils_v2.date_time import date_time
# Models:
from models.core.payment import CorePaymentModel
from models.core.payment import CorePaymentModel, PaymentMetadata
# To work with date and time:
import datetime
@@ -108,30 +108,6 @@ class PGPaymentRequestHeaders(BaseModel):
# ---------------------------------------------------------------------------------------------------------------------
class PaymentRequestMetadata(BaseModel):
idClient: str | int = Field(
description = "account master id for the user's customer",
frozen = True
)
inAccount: str | int = Field(
description = "account master id for the user's bank account",
frozen = True
)
# ┏┓ ┏•
# ┃ ┏┓┏┓╋┓┏┓
# ┗┛┗┛┛┗┛┗┗┫
# ┛
class Config:
extra = "allow"
# ---------------------------------------------------------------------------------------------------------------------
class PGPaymentRequestData(BaseModel):
tokenKey: ObjectId = Field(
@@ -183,7 +159,7 @@ class PGPaymentRequestData(BaseModel):
frozen = True
)
metadata: PaymentRequestMetadata = Field(
metadata: PaymentMetadata = Field(
description = "any extra information about this payment",
frozen = True
)
+45
View File
@@ -134,6 +134,51 @@ class CustomerDetails(BaseModel):
# ---------------------------------------------------------------------------------------------------------------------
class PaymentMetadata(BaseModel):
"""
These are things that the UI will send you, and you must use them as-is for adding receipts. Their internal workings
and use-cases are not known and are not of this code's direct concern except that you must ensure that these details
get delivered through the mechanism of adding receipts.
"""
idClient: int = Field(frozen = True)
inAccount: int = Field(frozen = True)
reference: str | None = Field(frozen = True, default = None, validate_default = True)
againstReference: str | None = Field(frozen = True, default = None, validate_default = True)
documentUrl: str | None = Field(frozen = False, default = None, validate_default = True)
# ┏┓ ┏•
# ┃ ┏┓┏┓╋┓┏┓
# ┗┛┗┛┛┗┛┗┗┫
# ┛
class Config:
extra = "allow"
# ┓┏ ┓• ┓ •
# ┃┃┏┓┃┓┏┫┏┓╋┓┏┓┏┓
# ┗┛┗┻┗┗┗┻┗┻┗┗┗┛┛┗
@field_validator("reference")
def validate_reference(cls, value):
if not value: value = "On Account"
return value
@field_validator("againstReference")
def validate_against_reference(cls, value):
if not value: value = None
return value
@field_validator("documentUrl")
def validate_document_url(cls, value):
if not value: value = None
return value
# ---------------------------------------------------------------------------------------------------------------------
class PaymentEvent(BaseModel):
eventTs: AwareDatetime = Field(