report code changes by pankaj
This commit is contained in:
379
model/Invoice.py
Normal file
379
model/Invoice.py
Normal file
@@ -0,0 +1,379 @@
|
||||
import config
|
||||
import mysql.connector
|
||||
|
||||
# ------------------- Helper -------------------
|
||||
def clear_results(cursor):
|
||||
for r in cursor.stored_results():
|
||||
r.fetchall()
|
||||
|
||||
|
||||
# ------------------- Get Village Id -------------------
|
||||
def get_village_id(village_name):
|
||||
connection = config.get_db_connection()
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
cursor.callproc("GetVillageIdByName", (village_name,))
|
||||
village_result = None
|
||||
|
||||
for rs in cursor.stored_results():
|
||||
village_result = rs.fetchone()
|
||||
|
||||
cursor.close()
|
||||
connection.close()
|
||||
return village_result
|
||||
|
||||
|
||||
# ------------------- Insert Invoice -------------------
|
||||
def insert_invoice(data, village_id):
|
||||
connection = config.get_db_connection()
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
try:
|
||||
# 1. Insert Invoice
|
||||
cursor.callproc('InsertInvoice', [
|
||||
data.get('pmc_no'),
|
||||
village_id,
|
||||
data.get('work_type'),
|
||||
data.get('invoice_details'),
|
||||
data.get('invoice_date'),
|
||||
data.get('invoice_no'),
|
||||
float(data.get('basic_amount') or 0),
|
||||
float(data.get('debit_amount') or 0),
|
||||
float(data.get('after_debit_amount') or 0),
|
||||
float(data.get('amount') or 0),
|
||||
float(data.get('gst_amount') or 0),
|
||||
float(data.get('tds_amount') or 0),
|
||||
float(data.get('sd_amount') or 0),
|
||||
float(data.get('on_commission') or 0),
|
||||
float(data.get('hydro_testing') or 0),
|
||||
float(data.get('gst_sd_amount') or 0),
|
||||
float(data.get('final_amount') or 0)
|
||||
])
|
||||
|
||||
invoice_id = None
|
||||
for result in cursor.stored_results():
|
||||
row = result.fetchone()
|
||||
if row:
|
||||
invoice_id = row.get('invoice_id')
|
||||
|
||||
if not invoice_id:
|
||||
raise Exception("Invoice ID not returned")
|
||||
|
||||
# 2. Insert Inpayment
|
||||
cursor.callproc('InsertInpayment', [
|
||||
data.get('pmc_no'),
|
||||
village_id,
|
||||
data.get('work_type'),
|
||||
data.get('invoice_details'),
|
||||
data.get('invoice_date'),
|
||||
data.get('invoice_no'),
|
||||
float(data.get('basic_amount') or 0),
|
||||
float(data.get('debit_amount') or 0),
|
||||
float(data.get('after_debit_amount') or 0),
|
||||
float(data.get('amount') or 0),
|
||||
float(data.get('gst_amount') or 0),
|
||||
float(data.get('tds_amount') or 0),
|
||||
float(data.get('sd_amount') or 0),
|
||||
float(data.get('on_commission') or 0),
|
||||
float(data.get('hydro_testing') or 0),
|
||||
float(data.get('gst_sd_amount') or 0),
|
||||
float(data.get('final_amount') or 0),
|
||||
data.get('subcontractor_id')
|
||||
])
|
||||
clear_results(cursor)
|
||||
|
||||
connection.commit()
|
||||
return invoice_id
|
||||
|
||||
except Exception as e:
|
||||
connection.rollback()
|
||||
raise e
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
|
||||
|
||||
# ------------------- Assign Subcontractor -------------------
|
||||
def assign_subcontractor(data, village_id):
|
||||
connection = config.get_db_connection()
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
try:
|
||||
cursor.callproc('AssignSubcontractor', [
|
||||
data.get('pmc_no'),
|
||||
data.get('subcontractor_id'),
|
||||
village_id
|
||||
])
|
||||
clear_results(cursor)
|
||||
|
||||
connection.commit()
|
||||
|
||||
except Exception as e:
|
||||
connection.rollback()
|
||||
raise e
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
|
||||
|
||||
# ------------------- Insert Hold Types -------------------
|
||||
def insert_hold_types(data, invoice_id):
|
||||
connection = config.get_db_connection()
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
try:
|
||||
hold_types = data.getlist('hold_type[]')
|
||||
hold_amounts = data.getlist('hold_amount[]')
|
||||
|
||||
for hold_type, hold_amount in zip(hold_types, hold_amounts):
|
||||
if not hold_type:
|
||||
continue
|
||||
|
||||
cursor.callproc('GetHoldTypeIdByName', [hold_type])
|
||||
hold_type_result = None
|
||||
|
||||
for result in cursor.stored_results():
|
||||
hold_type_result = result.fetchone()
|
||||
|
||||
if not hold_type_result:
|
||||
cursor.callproc('InsertHoldType', [hold_type, 0])
|
||||
cursor.execute("SELECT @_InsertHoldType_1")
|
||||
hold_type_id = cursor.fetchone()[0]
|
||||
else:
|
||||
hold_type_id = hold_type_result['hold_type_id']
|
||||
|
||||
hold_amount = float(hold_amount or 0)
|
||||
|
||||
cursor.callproc('InsertInvoiceSubcontractorHold', [
|
||||
data.get('subcontractor_id'),
|
||||
invoice_id,
|
||||
hold_type_id,
|
||||
hold_amount
|
||||
])
|
||||
clear_results(cursor)
|
||||
|
||||
connection.commit()
|
||||
|
||||
except Exception as e:
|
||||
connection.rollback()
|
||||
raise e
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
|
||||
|
||||
# ------------------- Get All Invoices -------------------
|
||||
def get_all_invoice_details():
|
||||
connection = config.get_db_connection()
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
cursor.callproc('GetAllInvoiceDetails')
|
||||
invoices = []
|
||||
|
||||
for result in cursor.stored_results():
|
||||
invoices = result.fetchall()
|
||||
|
||||
cursor.close()
|
||||
connection.close()
|
||||
return invoices
|
||||
|
||||
|
||||
# ------------------- Get All Villages -------------------
|
||||
def get_all_villages():
|
||||
connection = config.get_db_connection()
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
cursor.callproc("GetAllVillages")
|
||||
villages = []
|
||||
|
||||
for result in cursor.stored_results():
|
||||
villages = result.fetchall()
|
||||
|
||||
cursor.close()
|
||||
connection.close()
|
||||
return villages
|
||||
|
||||
|
||||
# ------------------- Search Contractors -------------------
|
||||
def search_contractors(sub_query):
|
||||
connection = config.get_db_connection()
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
cursor.callproc('SearchContractorsByName', [sub_query])
|
||||
results = []
|
||||
|
||||
for result in cursor.stored_results():
|
||||
results = result.fetchall()
|
||||
|
||||
cursor.close()
|
||||
connection.close()
|
||||
return results
|
||||
|
||||
|
||||
# ------------------- Get All Hold Types -------------------
|
||||
def get_all_hold_types():
|
||||
connection = config.get_db_connection()
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
cursor.callproc("GetAllHoldTypes")
|
||||
hold_types = []
|
||||
|
||||
for result in cursor.stored_results():
|
||||
hold_types = result.fetchall()
|
||||
|
||||
cursor.close()
|
||||
connection.close()
|
||||
return hold_types
|
||||
|
||||
|
||||
# ------------------- Get Invoice By Id -------------------
|
||||
def get_invoice_by_id(invoice_id):
|
||||
connection = config.get_db_connection()
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
cursor.callproc('GetInvoiceDetailsById', [invoice_id])
|
||||
invoice = None
|
||||
|
||||
for result in cursor.stored_results():
|
||||
invoice = result.fetchone()
|
||||
|
||||
cursor.callproc('GetHoldAmountsByInvoiceId', [invoice_id])
|
||||
hold_amounts = []
|
||||
|
||||
for result in cursor.stored_results():
|
||||
hold_amounts = result.fetchall()
|
||||
|
||||
if invoice:
|
||||
invoice["hold_amounts"] = hold_amounts
|
||||
|
||||
cursor.close()
|
||||
connection.close()
|
||||
return invoice
|
||||
|
||||
|
||||
# ------------------- Update Invoice -------------------
|
||||
def update_invoice(data, invoice_id):
|
||||
connection = config.get_db_connection()
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
try:
|
||||
cursor.callproc("GetVillageIdByName", (data.get('village'),))
|
||||
village = None
|
||||
|
||||
for rs in cursor.stored_results():
|
||||
village = rs.fetchone()
|
||||
|
||||
village_id = village['Village_Id']
|
||||
|
||||
numeric = [
|
||||
float(data.get('basic_amount') or 0),
|
||||
float(data.get('debit_amount') or 0),
|
||||
float(data.get('after_debit_amount') or 0),
|
||||
float(data.get('amount') or 0),
|
||||
float(data.get('gst_amount') or 0),
|
||||
float(data.get('tds_amount') or 0),
|
||||
float(data.get('sd_amount') or 0),
|
||||
float(data.get('on_commission') or 0),
|
||||
float(data.get('hydro_testing') or 0),
|
||||
float(data.get('gst_sd_amount') or 0),
|
||||
float(data.get('final_amount') or 0),
|
||||
]
|
||||
|
||||
cursor.callproc('UpdateInvoice', [
|
||||
data.get('pmc_no'),
|
||||
village_id,
|
||||
data.get('work_type'),
|
||||
data.get('invoice_details'),
|
||||
data.get('invoice_date'),
|
||||
data.get('invoice_no'),
|
||||
*numeric,
|
||||
invoice_id
|
||||
])
|
||||
clear_results(cursor)
|
||||
|
||||
connection.commit()
|
||||
|
||||
except Exception as e:
|
||||
connection.rollback()
|
||||
raise e
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
|
||||
|
||||
# ------------------- Update Inpayment -------------------
|
||||
def update_inpayment(data):
|
||||
connection = config.get_db_connection()
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
try:
|
||||
numeric = [
|
||||
float(data.get('basic_amount') or 0),
|
||||
float(data.get('debit_amount') or 0),
|
||||
float(data.get('after_debit_amount') or 0),
|
||||
float(data.get('amount') or 0),
|
||||
float(data.get('gst_amount') or 0),
|
||||
float(data.get('tds_amount') or 0),
|
||||
float(data.get('sd_amount') or 0),
|
||||
float(data.get('on_commission') or 0),
|
||||
float(data.get('hydro_testing') or 0),
|
||||
float(data.get('gst_sd_amount') or 0),
|
||||
float(data.get('final_amount') or 0),
|
||||
]
|
||||
|
||||
cursor.callproc('UpdateInpayment', [
|
||||
data.get('work_type'),
|
||||
data.get('invoice_details'),
|
||||
data.get('invoice_date'),
|
||||
*numeric,
|
||||
data.get('pmc_no'),
|
||||
data.get('invoice_no')
|
||||
])
|
||||
clear_results(cursor)
|
||||
|
||||
connection.commit()
|
||||
|
||||
except Exception as e:
|
||||
connection.rollback()
|
||||
raise e
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
|
||||
|
||||
# ------------------- Delete Invoice -------------------
|
||||
def delete_invoice_data(invoice_id, user_id):
|
||||
connection = config.get_db_connection()
|
||||
cursor = connection.cursor(dictionary=True)
|
||||
|
||||
try:
|
||||
cursor.callproc('GetInvoicePMCById', [invoice_id])
|
||||
|
||||
record = {}
|
||||
for result in cursor.stored_results():
|
||||
record = result.fetchone() or {}
|
||||
if not record:
|
||||
raise Exception("Invoice not found")
|
||||
|
||||
cursor.callproc("DeleteInvoice", (invoice_id,))
|
||||
clear_results(cursor)
|
||||
|
||||
cursor.callproc(
|
||||
'DeleteInpaymentByPMCInvoice',
|
||||
[record['PMC_No'], record['invoice_no']]
|
||||
)
|
||||
|
||||
connection.commit()
|
||||
|
||||
except Exception as e:
|
||||
connection.rollback()
|
||||
raise e
|
||||
|
||||
finally:
|
||||
cursor.close()
|
||||
connection.close()
|
||||
Reference in New Issue
Block a user