updated Payment reconcillation code
This commit is contained in:
236
model/payment.py
Normal file
236
model/payment.py
Normal file
@@ -0,0 +1,236 @@
|
||||
import config
|
||||
import mysql.connector
|
||||
import config
|
||||
import mysql.connector
|
||||
from enum import Enum
|
||||
from model.Utilities import ItemCRUDType
|
||||
|
||||
class Paymentmodel:
|
||||
|
||||
# ---------------- Database Connection ----------------
|
||||
@staticmethod
|
||||
def get_connection():
|
||||
connection = config.get_db_connection()
|
||||
if not connection:
|
||||
return None
|
||||
return connection
|
||||
|
||||
# ---------------- Payment Methods ----------------
|
||||
@staticmethod
|
||||
def fetch_all_payments():
|
||||
connection = Paymentmodel.get_connection()
|
||||
payments = []
|
||||
if connection:
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
try:
|
||||
cursor.callproc('GetAllPayments')
|
||||
for result in cursor.stored_results():
|
||||
payments = result.fetchall()
|
||||
except mysql.connector.Error as e:
|
||||
print(f"Error fetching payment history: {e}")
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
return payments
|
||||
|
||||
@staticmethod
|
||||
def insert_payment(subcontractor_id, pmc_no, invoice_no, amount, tds_amount, total_amount, utr):
|
||||
connection = Paymentmodel.get_connection()
|
||||
if not connection:
|
||||
return False
|
||||
|
||||
cursor = None
|
||||
try:
|
||||
cursor = connection.cursor()
|
||||
|
||||
cursor.callproc('GetInvoiceId', [subcontractor_id, pmc_no, invoice_no])
|
||||
|
||||
invoice_id = None
|
||||
for result in cursor.stored_results():
|
||||
row = result.fetchone()
|
||||
if row:
|
||||
invoice_id = row[0]
|
||||
|
||||
if not invoice_id:
|
||||
return False
|
||||
|
||||
cursor.callproc(
|
||||
'InsertPayments',
|
||||
[pmc_no, invoice_no, amount, tds_amount, total_amount, utr, invoice_id]
|
||||
)
|
||||
|
||||
connection.commit()
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(e)
|
||||
return False
|
||||
|
||||
finally:
|
||||
if cursor:
|
||||
cursor.close()
|
||||
if connection:
|
||||
connection.close()
|
||||
|
||||
# @staticmethod
|
||||
# def update_inpayment(subcontractor_id, pmc_no, invoice_no, amount, tds_amount, total_amount, utr):
|
||||
# connection = Paymentmodel.get_connection()
|
||||
# if not connection:
|
||||
# return False
|
||||
# try:
|
||||
# cursor = connection.cursor()
|
||||
# cursor.callproc('UpdateInpaymentRecord', [
|
||||
# subcontractor_id, pmc_no, invoice_no, amount, tds_amount, total_amount, utr
|
||||
# ])
|
||||
# connection.commit()
|
||||
# return True
|
||||
# except mysql.connector.Error as e:
|
||||
# print(f"Error updating inpayment: {e}")
|
||||
# return False
|
||||
# finally:
|
||||
# cursor.close()
|
||||
# connection.close()
|
||||
|
||||
@staticmethod
|
||||
def fetch_payment_by_id(payment_id):
|
||||
connection = Paymentmodel.get_connection()
|
||||
if not connection:
|
||||
return None
|
||||
payment_data = {}
|
||||
try:
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
cursor.callproc("GetPaymentById", (payment_id,))
|
||||
for result in cursor.stored_results():
|
||||
payment_data = result.fetchone()
|
||||
if payment_data:
|
||||
payment_data = [
|
||||
payment_data.get('Payment_Id'),
|
||||
payment_data.get('PMC_No'),
|
||||
payment_data.get('Invoice_No'),
|
||||
payment_data.get('Payment_Amount'),
|
||||
payment_data.get('TDS_Payment_Amount'),
|
||||
payment_data.get('Total_Amount'),
|
||||
payment_data.get('UTR')
|
||||
]
|
||||
except mysql.connector.Error as e:
|
||||
print(f"Error fetching payment data: {e}")
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
return payment_data
|
||||
|
||||
@staticmethod
|
||||
def call_update_payment_proc(payment_id, pmc_no, invoice_no, amount, tds_amount, total_amount, utr):
|
||||
connection = Paymentmodel.get_connection()
|
||||
if not connection:
|
||||
return False
|
||||
try:
|
||||
cursor = connection.cursor()
|
||||
cursor.callproc("UpdatePayment", (payment_id, pmc_no, invoice_no, amount, tds_amount, total_amount, utr))
|
||||
connection.commit()
|
||||
return True
|
||||
except mysql.connector.Error as e:
|
||||
print(f"Error updating payment: {e}")
|
||||
return False
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
|
||||
@staticmethod
|
||||
def delete_payment(payment_id):
|
||||
connection = Paymentmodel.get_connection()
|
||||
if not connection:
|
||||
return False, None, None
|
||||
try:
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
# Fetch PMC & Invoice before deleting
|
||||
cursor.callproc('GetPaymentPMCInvoiceById', [payment_id])
|
||||
record = {}
|
||||
for result in cursor.stored_results():
|
||||
record = result.fetchone() or {}
|
||||
if not record:
|
||||
return False, None, None
|
||||
pmc_no = record['PMC_No']
|
||||
invoice_no = record['Invoice_No']
|
||||
# Delete payment
|
||||
cursor.callproc("DeletePayment", (payment_id,))
|
||||
connection.commit()
|
||||
# Reset inpayment fields
|
||||
# cursor.callproc("ResetInpayment", [pmc_no, invoice_no])
|
||||
# connection.commit()
|
||||
return True, pmc_no, invoice_no
|
||||
except mysql.connector.Error as e:
|
||||
print(f"Error deleting payment: {e}")
|
||||
return False, None, None
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
|
||||
# ---------------- Item CRUD Methods ----------------
|
||||
@staticmethod
|
||||
def fetch_items(item_type: ItemCRUDType):
|
||||
connection = Paymentmodel.get_connection()
|
||||
items = []
|
||||
if connection:
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
try:
|
||||
cursor.callproc('GetItemsByType', [item_type.value])
|
||||
for result in cursor.stored_results():
|
||||
items = result.fetchall()
|
||||
except mysql.connector.Error as e:
|
||||
print(f"Error fetching {item_type.name}: {e}")
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
return items
|
||||
|
||||
@staticmethod
|
||||
def insert_item(item_type: ItemCRUDType, name: str):
|
||||
connection = Paymentmodel.get_connection()
|
||||
if not connection:
|
||||
return False
|
||||
try:
|
||||
cursor = connection.cursor()
|
||||
cursor.callproc('InsertItem', [item_type.value, name])
|
||||
connection.commit()
|
||||
return True
|
||||
except mysql.connector.Error as e:
|
||||
print(f"Error inserting {item_type.name}: {e}")
|
||||
return False
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
|
||||
@staticmethod
|
||||
def update_item(item_type: ItemCRUDType, item_id: int, new_name: str):
|
||||
connection = Paymentmodel.get_connection()
|
||||
if not connection:
|
||||
return False
|
||||
try:
|
||||
cursor = connection.cursor()
|
||||
cursor.callproc('UpdateItem', [item_type.value, item_id, new_name])
|
||||
connection.commit()
|
||||
return True
|
||||
except mysql.connector.Error as e:
|
||||
print(f"Error updating {item_type.name}: {e}")
|
||||
return False
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
|
||||
@staticmethod
|
||||
def delete_item(item_type: ItemCRUDType, item_id: int):
|
||||
connection = Paymentmodel.get_connection()
|
||||
if not connection:
|
||||
return False
|
||||
try:
|
||||
cursor = connection.cursor()
|
||||
cursor.callproc('DeleteItem', [item_type.value, item_id])
|
||||
connection.commit()
|
||||
return True
|
||||
except mysql.connector.Error as e:
|
||||
print(f"Error deleting {item_type.name}: {e}")
|
||||
return False
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
Reference in New Issue
Block a user