From a60c1393ee078571fff929a0bae46a61bda4a683 Mon Sep 17 00:00:00 2001 From: Alan Woodman Date: Wed, 1 Oct 2025 14:38:35 +0800 Subject: [PATCH] fixed up invoice payments to include pending --- pending_fixup.py | 52 ++++++++++++++++++++++++++++++++++++++++++++++++ query_mysql.py | 2 +- test.py | 22 +++----------------- 3 files changed, 56 insertions(+), 20 deletions(-) create mode 100644 pending_fixup.py diff --git a/pending_fixup.py b/pending_fixup.py new file mode 100644 index 0000000..e74784f --- /dev/null +++ b/pending_fixup.py @@ -0,0 +1,52 @@ +import json +import stripe +from typing import List, Dict, Union, Any +from app import create_app, db +from models import Payments, PaymentBatch, SinglePayments, PaymentPlans +from splynx import Splynx, SPLYNX_URL, SPLYNX_KEY, SPLYNX_SECRET +from services import log_activity +from config import Config +from sqlalchemy import and_ + + +splynx = Splynx(url=SPLYNX_URL, key=SPLYNX_KEY, secret=SPLYNX_SECRET) + + +api_key = Config.STRIPE_LIVE_API_KEY + +stripe.api_key = api_key + + +def find_pay_splynx_invoices(splynx_id: int, result: dict) -> List[Dict[str, Any]]: + #result = splynx.get(url=f"/api/2.0/admin/finance/invoices?main_attributes[customer_id]={splynx_id}&main_attributes[status]=not_paid&main_attributes[status]=pending") + + invoice_pay = { + "status": "paid" + } + + for pay in result: + res = splynx.put(url=f"/api/2.0/admin/finance/invoices/{pay['id']}", params=invoice_pay) + + + +if __name__ == "__main__": + app = create_app() + i = 1 + #cust_bill = splynx.get(url=f"/api/2.0/admin/customers/customer-billing/31") + #print(json.dumps(cust_bill,indent=2)) + with app.app_context(): + custs = db.session.query(PaymentBatch,Payments)\ + .join(Payments, Payments.PaymentBatch_ID == PaymentBatch.id)\ + .filter(and_(PaymentBatch.id.in_((102,103)), Payments.Success == True))\ + .all() + print(len(custs)) + for cust in custs: + cust_bill = splynx.get(url=f"/api/2.0/admin/customers/customer-billing/{cust.Payments.Splynx_ID}") + print(f"{i}/{len(custs)}") + if cust_bill['deposit'] == 0: + result = splynx.get(url=f"/api/2.0/admin/finance/invoices?main_attributes[customer_id]={cust.Payments.Splynx_ID}&main_attributes[status]=pending") + #print(json.dumps(result,indent=2)) + if len(result) > 0: + print(f"\t{cust.Payments.Splynx_ID} - Has unpaid invoices") + find_pay_splynx_invoices(splynx_id=cust.Payments.Splynx_ID, result=result) + i += 1 diff --git a/query_mysql.py b/query_mysql.py index 95a15c2..96e225e 100644 --- a/query_mysql.py +++ b/query_mysql.py @@ -153,7 +153,7 @@ def create_customer_friendly_message(payment_data: dict, error_details: str) -> def find_pay_splynx_invoices(splynx_id: int) -> List[Dict[str, Any]]: - result = splynx.get(url=f"/api/2.0/admin/finance/invoices?main_attributes[customer_id]={splynx_id}&main_attributes[status]=not_paid") + result = splynx.get(url=f"/api/2.0/admin/finance/invoices?main_attributes[customer_id]={splynx_id}&main_attributes[status]=not_paid&main_attributes[status]=pending") invoice_pay = { "status": "paid" diff --git a/test.py b/test.py index 86f18da..342a7cc 100644 --- a/test.py +++ b/test.py @@ -17,23 +17,7 @@ stripe.api_key = api_key if __name__ == "__main__": - customers = stripe.Customer.search(query="email:'tom.bj@icloud.com'") - print(customers) + splynx_id = 1218789 + result = splynx.get(url=f"/api/2.0/admin/finance/invoices?main_attributes[customer_id]={splynx_id}&main_attributes[status]=not_paid&main_attributes[status]=pending") - cust = splynx.Customer(31) - print(f"cust: {json.dumps(cust,indent=2)}") - - params = { - 'additional_attributes': { - 'stripe_customer_id': customers['data'][-1]['id'] - } - } - - update_cust = splynx.put(url=f"/api/2.0/admin/customers/customer/31", params=params) - - print(f"update_cust: {update_cust}") - - cust = splynx.Customer(31) - print(f"cust: {json.dumps(cust,indent=2)}") - - print(cust['additional_attributes']['stripe_customer_id']) \ No newline at end of file + print(json.dumps(result,indent=2)) \ No newline at end of file