From ef302d980a623ae5158846238675b30641279b35 Mon Sep 17 00:00:00 2001 From: akashbhome Date: Mon, 30 Mar 2026 16:08:07 +0530 Subject: [PATCH] delete store Procedure --- controllers/excel_upload_controller.py | 4 +- controllers/invoice_controller.py | 3 - controllers/payment_controller.py | 16 +- controllers/pmc_report_controller.py | 3 - controllers/report_controller.py | 4 - logs/activity.log | 204 +++++++++++++++++++++++ model/Block.py | 47 +----- model/ContractorInfo.py | 5 +- model/PmcReport.py | 38 ++--- model/Village.py | 2 +- static/download/Contractor_Report_1.xlsx | Bin 6212 -> 6213 bytes static/download/Contractor_Report_2.xlsx | Bin 8647 -> 8646 bytes static/download/Contractor_Report_3.xlsx | Bin 47431 -> 47431 bytes static/download/Contractor_Report_4.xlsx | Bin 8449 -> 8448 bytes static/download/Contractor_Report_6.xlsx | Bin 0 -> 6334 bytes static/download/Contractor_Report_7.xlsx | Bin 0 -> 11946 bytes templates/show_excel_file.html | 3 +- 17 files changed, 234 insertions(+), 95 deletions(-) create mode 100644 static/download/Contractor_Report_6.xlsx create mode 100644 static/download/Contractor_Report_7.xlsx diff --git a/controllers/excel_upload_controller.py b/controllers/excel_upload_controller.py index c2b6b73..23d95f8 100644 --- a/controllers/excel_upload_controller.py +++ b/controllers/excel_upload_controller.py @@ -66,14 +66,14 @@ def show_table(filename): errors.append(f"State '{file_info['State']}' is not valid. Please add it.") if state_data: - cursor.callproc('GetDistrictByNameAndStates', [file_info['District'], state_data['State_ID']]) + cursor.callproc('GetDistrictByNameAndState', [file_info['District'], state_data['State_ID']]) # Change GetDistrictByNameAndStates to GetDistrictByNameAndState for result in cursor.stored_results(): district_data = result.fetchone() if not district_data: errors.append(f"District '{file_info['District']}' is not valid under state '{file_info['State']}'.") if district_data: - cursor.callproc('GetBlockByNameAndDistricts', [file_info['Block'], district_data['District_ID']]) + cursor.callproc('GetBlockByNameAndDistrict', [file_info['Block'], district_data['District_id']]) #Change District_ID to District_id and GetBlockByNameAndDistricts to GetBlockByNameAndDistrict for result in cursor.stored_results(): block_data = result.fetchone() if not block_data: diff --git a/controllers/invoice_controller.py b/controllers/invoice_controller.py index 0beaaf1..8c03c3c 100644 --- a/controllers/invoice_controller.py +++ b/controllers/invoice_controller.py @@ -1,6 +1,3 @@ - - - # controllers/invoice_controller.py from flask import Blueprint, request, jsonify, render_template diff --git a/controllers/payment_controller.py b/controllers/payment_controller.py index 3973f36..ed10850 100644 --- a/controllers/payment_controller.py +++ b/controllers/payment_controller.py @@ -72,15 +72,13 @@ def edit_payment(payment_id): Paymentmodel.call_update_payment_proc(payment_id, pmc_no, invoice_no, amount, tds_amount, total_amount, utr) # Update inpayment - connection = Paymentmodel.get_connection() - cursor = connection.cursor() - cursor.callproc( - 'UpdateInpaymentByPMCInvoiceUTR', - [amount, tds_amount, total_amount, pmc_no, invoice_no, utr] -) - connection.commit() - cursor.close() - connection.close() + # connection = Paymentmodel.get_connection() + # cursor = connection.cursor() + # cursor.callproc('UpdateInpaymentByPMCInvoiceUTR',[amount, tds_amount, total_amount, pmc_no, invoice_no, utr]) + + # connection.commit() + # cursor.close() + # connection.close() return redirect(url_for('payment_bp.add_payment')) diff --git a/controllers/pmc_report_controller.py b/controllers/pmc_report_controller.py index ee05092..9b7313f 100644 --- a/controllers/pmc_report_controller.py +++ b/controllers/pmc_report_controller.py @@ -1,10 +1,7 @@ from flask import Blueprint, render_template, send_from_directory from flask_login import login_required - from model.PmcReport import PmcReport - - pmc_report_bp = Blueprint("pmc_report", __name__) # ---------------- Contractor Report by pmc no ---------------- diff --git a/controllers/report_controller.py b/controllers/report_controller.py index e8d6d15..55afc03 100644 --- a/controllers/report_controller.py +++ b/controllers/report_controller.py @@ -52,10 +52,6 @@ def contractor_report(contractor_id): # return ReportHelper().download_report(contractor_id=contractor_id) - - - - @report_bp.route('/download_report/') def download_report(contractor_id): output_file, error = ReportHelper.create_contractor_report(contractor_id) diff --git a/logs/activity.log b/logs/activity.log index 4914a3d..87b18c6 100644 --- a/logs/activity.log +++ b/logs/activity.log @@ -8061,3 +8061,207 @@ Timestamp: 2026-03-28 15:49:00 | User: Unknown | Action: Data saved | Details: Timestamp: 2026-03-28 15:49:00 | User: Unknown | Action: Data saved | Details: Timestamp: 2026-03-28 15:49:06 | User: Unknown | Action: Search Contractor | Details: Timestamp: 2026-03-28 15:49:08 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 11:06:32 | User: Unknown | Action: Login | Details: +Timestamp: 2026-03-30 11:06:39 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 11:06:40 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 11:06:42 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 11:08:00 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 11:08:00 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 11:08:00 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 11:08:02 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 11:08:02 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 11:08:04 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 11:10:15 | User: Unknown | Action: Download PMC Report | Details: +Timestamp: 2026-03-30 11:10:30 | User: Unknown | Action: Download PMC Report | Details: +Timestamp: 2026-03-30 13:21:03 | User: Unknown | Action: Check State | Details: +Timestamp: 2026-03-30 13:21:08 | User: Unknown | Action: Check State | Details: +Timestamp: 2026-03-30 13:21:09 | User: Unknown | Action: Check State | Details: +Timestamp: 2026-03-30 13:21:09 | User: Unknown | Action: Check State | Details: +Timestamp: 2026-03-30 13:21:11 | User: Unknown | Action: Add State | Details: +Timestamp: 2026-03-30 13:21:26 | User: Unknown | Action: Edit State | Details: +Timestamp: 2026-03-30 13:21:32 | User: Unknown | Action: Delete State | Details: +Timestamp: 2026-03-30 13:21:45 | User: Unknown | Action: Check Item | Details: +Timestamp: 2026-03-30 13:21:45 | User: Unknown | Action: Check Item | Details: +Timestamp: 2026-03-30 13:21:45 | User: Unknown | Action: Check Item | Details: +Timestamp: 2026-03-30 13:21:46 | User: Unknown | Action: Check Item | Details: +Timestamp: 2026-03-30 13:21:47 | User: Unknown | Action: Check Item | Details: +Timestamp: 2026-03-30 13:21:48 | User: Unknown | Action: Check Item | Details: +Timestamp: 2026-03-30 13:21:49 | User: Unknown | Action: Check Item | Details: +Timestamp: 2026-03-30 13:21:49 | User: Unknown | Action: Add Item | Details: +Timestamp: 2026-03-30 13:22:03 | User: Unknown | Action: Edit Item | Details: +Timestamp: 2026-03-30 13:22:12 | User: Unknown | Action: Delete Item | Details: +Timestamp: 2026-03-30 13:22:26 | User: Unknown | Action: Check Block | Details: +Timestamp: 2026-03-30 13:22:26 | User: Unknown | Action: Check Block | Details: +Timestamp: 2026-03-30 13:22:32 | User: Unknown | Action: Check Block | Details: +Timestamp: 2026-03-30 13:22:33 | User: Unknown | Action: Check Block | Details: +Timestamp: 2026-03-30 13:22:33 | User: Unknown | Action: Check Block | Details: +Timestamp: 2026-03-30 13:22:33 | User: Unknown | Action: Check Block | Details: +Timestamp: 2026-03-30 13:22:33 | User: Unknown | Action: Check Block | Details: +Timestamp: 2026-03-30 13:22:33 | User: Unknown | Action: Check Block | Details: +Timestamp: 2026-03-30 13:22:35 | User: Unknown | Action: Check Block | Details: +Timestamp: 2026-03-30 13:22:35 | User: Unknown | Action: Add Block | Details: +Timestamp: 2026-03-30 13:22:49 | User: Unknown | Action: Edit Block | Details: +Timestamp: 2026-03-30 13:22:54 | User: Unknown | Action: Delete Block | Details: +Timestamp: 2026-03-30 13:23:10 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:23:10 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:23:12 | User: Unknown | Action: Add Village | Details: +Timestamp: 2026-03-30 13:23:39 | User: Unknown | Action: Edit Village | Details: +Timestamp: 2026-03-30 13:23:49 | User: Unknown | Action: Delete Village | Details: +Timestamp: 2026-03-30 13:24:09 | User: Unknown | Action: Add Subcontractor | Details: +Timestamp: 2026-03-30 13:24:23 | User: Unknown | Action: Get hold type | Details: +Timestamp: 2026-03-30 13:25:09 | User: Unknown | Action: Add invoice | Details: +Timestamp: 2026-03-30 13:25:11 | User: Unknown | Action: Get hold type | Details: +Timestamp: 2026-03-30 13:25:29 | User: Unknown | Action: Edit invoice | Details: +Timestamp: 2026-03-30 13:25:32 | User: Unknown | Action: Get hold type | Details: +Timestamp: 2026-03-30 13:26:08 | User: Unknown | Action: Add Payment | Details: +Timestamp: 2026-03-30 13:27:00 | User: Unknown | Action: Add GSTRelease | Details: +Timestamp: 2026-03-30 13:27:00 | User: Unknown | Action: Add GST Release | Details: +Timestamp: 2026-03-30 13:27:27 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 13:27:28 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 13:27:29 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 13:34:29 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 13:34:41 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 13:34:58 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 13:37:16 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 13:38:25 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 13:39:45 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 13:46:29 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 13:46:31 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 13:46:50 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 13:46:53 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 13:47:08 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 13:47:08 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 13:47:10 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 13:47:42 | User: Unknown | Action: Download PMC Report | Details: +Timestamp: 2026-03-30 13:48:00 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 13:48:01 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 13:48:01 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 13:48:11 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 13:48:32 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 13:48:34 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 13:48:39 | User: Unknown | Action: Download PMC Report | Details: +Timestamp: 2026-03-30 13:49:17 | User: Unknown | Action: Download PMC Report | Details: +Timestamp: 2026-03-30 13:49:41 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:49:41 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:49:41 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:49:43 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:49:45 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:49:45 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:49:46 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:49:46 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:49:46 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:49:48 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:49:48 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:49:51 | User: Unknown | Action: Add Village | Details: +Timestamp: 2026-03-30 13:50:08 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:50:08 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:50:11 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:50:11 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 13:53:57 | User: Unknown | Action: Check Village | Details: +Timestamp: 2026-03-30 14:00:00 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 14:00:01 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 14:00:05 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 14:26:11 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 14:26:12 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 14:26:38 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 14:53:18 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 15:10:21 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 15:14:03 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 15:14:05 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 15:14:11 | User: Unknown | Action: Download PMC Report | Details: +Timestamp: 2026-03-30 15:19:11 | User: Unknown | Action: Download PMC Report | Details: +Timestamp: 2026-03-30 15:26:09 | User: Unknown | Action: Download PMC Report | Details: +Timestamp: 2026-03-30 15:51:15 | User: Unknown | Action: Login | Details: +Timestamp: 2026-03-30 15:51:32 | User: Unknown | Action: Check Block | Details: +Timestamp: 2026-03-30 15:51:32 | User: Unknown | Action: Check Block | Details: +Timestamp: 2026-03-30 15:51:32 | User: Unknown | Action: Add Block | Details: +Timestamp: 2026-03-30 15:51:44 | User: Unknown | Action: Edit Block | Details: +Timestamp: 2026-03-30 15:51:50 | User: Unknown | Action: Delete Block | Details: +Timestamp: 2026-03-30 15:56:11 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 15:56:14 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 15:56:14 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 15:56:14 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 15:56:14 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 15:56:14 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 15:56:14 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 15:56:14 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 15:56:22 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 15:56:22 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 15:56:24 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:03:52 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:03:52 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:03:52 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:03:53 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:03:53 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:03:53 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:03:54 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:03:54 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:03:56 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:05:06 | User: Unknown | Action: Upload Excel File | Details: +Timestamp: 2026-03-30 16:05:10 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:10 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:10 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:10 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:11 | User: Unknown | Action: Data saved | Details: +Timestamp: 2026-03-30 16:05:18 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:05:19 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:05:21 | User: Unknown | Action: Search Contractor | Details: +Timestamp: 2026-03-30 16:05:24 | User: Unknown | Action: Search Contractor | Details: diff --git a/model/Block.py b/model/Block.py index 640ab0c..f93869f 100644 --- a/model/Block.py +++ b/model/Block.py @@ -32,22 +32,14 @@ class Block: district_id = request.form.get('district_Id') block_name = request.form.get('block_Name', '').strip() - block.AddItem(request=request, parentid=district_id, childname=block_name, storedprocfetch="GetBlockByNameAndDistricts", storedprocadd="SaveBlock" ) + block.AddItem(request=request, parentid=district_id, childname=block_name, storedprocfetch="GetBlockByNameAndDistrict", storedprocadd="SaveBlock" ) # Change GetBlockByNameAndDistricts to GetBlockByNameAndDistrict self.isSuccess = block.isSuccess self.resultMessage = block.resultMessage return # ---------------------------------------------------------- # Get All Blocks - # ---------------------------------------------------------- - # def GetAllBlocks(self): - - # block = ItemCRUD(itemType=ItemCRUDType.Block) - # blocksdata = block.GetAllData(request=request, storedproc="GetAllBlock") - # self.isSuccess = block.isSuccess - # self.resultMessage = block.resultMessage - # return blocksdata - + # ---------------------------------------------------------- def GetAllBlocks(self, request): block = ItemCRUD(itemType=ItemCRUDType.Block) @@ -60,15 +52,6 @@ class Block: # ---------------------------------------------------------- # Check Block Exists # ---------------------------------------------------------- - - # def CheckBlock(self, request): - # block = ItemCRUD(itemType=ItemCRUDType.Block) - # block_name = request.json.get('block_Name', '').strip() - # district_id = request.json.get('district_Id') - # result = block.CheckItem(request=request, parentid=district_id, childname=block_name, storedprocfetch="GetBlockByNameAndDistrict") - # self.isSuccess = block.isSuccess - # self.resultMessage = block.resultMessage - # return result def CheckBlock(self, request): block = ItemCRUD(itemType=ItemCRUDType.Block) data = request.get_json(silent=True) or request.form @@ -88,21 +71,6 @@ class Block: # ---------------------------------------------------------- # Get Block By ID # ---------------------------------------------------------- - # def GetBlockByID(self, id): - - # block = ItemCRUD(itemType=ItemCRUDType.Village) - # blockdata = block.GetAllData(id=id,storedproc="GetBlockDataByID") - # self.isSuccess = block.isSuccess - # self.resultMessage = block.resultMessage - # print("akash"+blockdata) - # return blockdata - - # def GetBlockByID(self,request,id): - # block = ItemCRUD(itemType=ItemCRUDType.Block) - # blockdata = block.GetDataByID(request=request,id=id,storedproc="GetBlockDataByID") - # self.isSuccess = block.isSuccess - # self.resultMessage = block.resultMessage - # return blockdata def GetBlockByID(self, id): block = ItemCRUD(itemType=ItemCRUDType.Block) @@ -119,17 +87,6 @@ class Block: # ---------------------------------------------------------- # Update Block # ---------------------------------------------------------- - # def EditBlock(self, request, block_id): - - # block = ItemCRUD(itemType=ItemCRUDType.Block) - - # district_id = request.form.get('district_Id') - # block_name = request.form.get('block_Name', '').strip() - - # block.EditItem(request=request, childid=block_id, parentid=district_id, childname=block_name, storedprocadd="UpdateBlockById" ) - # self.isSuccess = block.isSuccess - # self.resultMessage = block.resultMessage - # return def EditBlock(self, request, block_id): block = ItemCRUD(itemType=ItemCRUDType.Block) diff --git a/model/ContractorInfo.py b/model/ContractorInfo.py index edfa3cd..4e89806 100644 --- a/model/ContractorInfo.py +++ b/model/ContractorInfo.py @@ -1,6 +1,3 @@ - - - from mysql.connector import Error import config from datetime import datetime @@ -17,7 +14,7 @@ class ContractorInfo: try: connection = config.get_db_connection() with connection.cursor(dictionary=True, buffered=True) as cursor: - cursor.callproc('GetContractorInfoById', [self.ID]) + cursor.callproc('GetContractorInfo', [self.ID]) #Change GetContractorInfoById to GetContractorInfo # Get the first result set for result in cursor.stored_results(): self.contInfo = result.fetchone() diff --git a/model/PmcReport.py b/model/PmcReport.py index 83e5b63..a05ae4b 100644 --- a/model/PmcReport.py +++ b/model/PmcReport.py @@ -16,7 +16,6 @@ class PmcReport: cursor = connection.cursor(dictionary=True, buffered=True) try: - pmc_info = ReportHelper.execute_sp(cursor, 'GetContractorInfoByPmcNo', [pmc_no], True) if not pmc_info: @@ -30,17 +29,24 @@ class PmcReport: invoices = [] hold_amount_total = 0 - if hold_type_ids: - hold_type_ids_str = ",".join(map(str, hold_type_ids)) - cursor.callproc( + # if hold_type_ids: + # hold_type_ids_str = ",".join(map(str, hold_type_ids)) + # cursor.callproc( + # 'GetInvoices_WithHold', + # [pmc_no, pmc_info["Contractor_Id"], hold_type_ids_str] + # ) + # else: + # cursor.callproc( + # 'GetInvoices_NoHold', + # [pmc_no, pmc_info["Contractor_Id"]] + # ) + + hold_type_ids_str = ",".join(map(str, hold_type_ids)) + cursor.callproc( 'GetInvoices_WithHold', [pmc_no, pmc_info["Contractor_Id"], hold_type_ids_str] ) - else: - cursor.callproc( - 'GetInvoices_NoHold', - [pmc_no, pmc_info["Contractor_Id"]] - ) + for result in cursor.stored_results(): invoices = result.fetchall() @@ -49,9 +55,7 @@ class PmcReport: total_invo_final = sum(row.get('Final_Amount', 0) or 0 for row in invoices) - gst_rel = ReportHelper.execute_sp(cursor, 'GetGSTReleaseByPMC', [pmc_no]) - total_gst_basic = sum(row.get('basic_amount', 0) or 0 for row in gst_rel) total_gst_final = sum(row.get('final_amount', 0) or 0 for row in gst_rel) @@ -60,9 +64,6 @@ class PmcReport: credit_note = ReportHelper.execute_sp(cursor, 'GetCreditNoteByPMC', [pmc_no]) payments = ReportHelper.execute_sp(cursor, 'GetPaymentsByPMC', [pmc_no]) - - - total_pay_amount = sum(row.get('Payment_Amount', 0) or 0 for row in payments) total_pay_total = sum(row.get('Total_amount', 0) or 0 for row in payments) @@ -133,7 +134,6 @@ class PmcReport: cursor, 'GetHoldTypesByContractor', [contractor_info["Contractor_Id"]] ) - print("hold_types::::",hold_types) hold_type_map = { ht['hold_type_id']: ht['hold_type'] for ht in hold_types @@ -143,12 +143,9 @@ class PmcReport: cursor, 'GetInvoicesAndGstReleaseByPmcNo', [pmc_no] ) - print("invoices:::",invoices) - credit_notes = ReportHelper.execute_sp( cursor, 'NewGetCreditNotesByPMCNo', [pmc_no] ) - print("credit_notes:::",credit_notes) hold_amounts = ReportHelper.execute_sp( cursor, 'GetHoldAmountsByContractor', @@ -170,7 +167,6 @@ class PmcReport: if pmc: credit_note_map.setdefault(pmc, []).append(cn) - gst_map = {} for gst in gst_releases: pmc = gst.get("PMC_No") @@ -248,8 +244,6 @@ class PmcReport: # GST release placeholders (will add real GST below) row += ["", ""] - print("11111::",row) - sheet.append(row) for pmc, cn_list in credit_note_map.items(): @@ -267,7 +261,6 @@ class PmcReport: cn.get("Total_Amount", ""), cn.get("UTR", "") ] - print("22222::", cn_row) sheet.append(cn_row) # ================= GST RELEASE ROWS ================= @@ -287,7 +280,6 @@ class PmcReport: gst.get("Total_Amount", ""), gst.get("UTR", "") ] - print("33333::",gst_row) sheet.append(gst_row) # ================= AUTO WIDTH ================= diff --git a/model/Village.py b/model/Village.py index d6f0bb2..d2e2068 100644 --- a/model/Village.py +++ b/model/Village.py @@ -85,7 +85,7 @@ class Village: request=request, parentid=block_id, childname=village_name, - storedprocfetch="GetVillageByNameAndBlocks" + storedprocfetch="GetVillageByNameAndBlock" # Change GetVillageByNameAndBlocks to GetVillageByNameAndBlock ) self._set_status(self.village) return result diff --git a/static/download/Contractor_Report_1.xlsx b/static/download/Contractor_Report_1.xlsx index 6a683e3dbb68347b91200120168663ef014b6868..e79374f1cabf6db805e291e2dc255415acf688ea 100644 GIT binary patch delta 570 zcmX?NaMXY|z?+#xgn@y9gMlNjZX)j?P9PN%&lAG*dg2YOdKH1L!s3@NRyH5xlHM&D zoqP5Xe@^d?|8*+amwVrCTm9wL#GY2Jn4cZ~7ukDK4AyRvjd`S%(`6j^fWdR_#Zw_a z8}x2Je6e`y6fJpwfhASb)mz#&^65;vGD*cJK~ikvj!99vDL*<6^JK7EEO2$_e6^~r zdYZwlFV7F$iJW9PQ`NM-FWGck@w&t{ZP$8S?I?}A_4aUL_!r*nU6Zz^p61Ir``UEC}z5XoY zpW?lSxC86!U)wXH_&sK3%p7G-HU@?{>I@9Rz!0g((ck=^QJIYy7$TchIWi!O34G6( zKq8YX1)qUsl7!M3!2)N5AAtonig-f={)<{8LUXdSm>F1EjhHm!{mC=Ll)${bK%V5} zn_}wnpm0A~|5#@q69dCc9tH+ppc7!Afw5(>ytoWlhn=`IWA5ZAaj6)Pj))?yxwec9 z3?@Kb{4nJ}x`8oF2<(OO{G#ln{QPXairkz4Z$>5&26$}87{7kJYb{XmZ=eBED4GvU ez96m%w(gI(G}BU%$p=J4C+kTFuzeH-sRIBc1j>K_ delta 548 zcmX?VaKwN&z?+#xgn@y9gMp>CW+Lw)P9PQI!XM%IYT^y8dW(Rr!s3@VGMf)_N$-}7 z&OQ65b?wA2_xn?FcWt~|HZ{(6(#9*EFJ^qyJl-->XWG>lu^LXxb4!)Hm=?Sct_qzs z!=UG$Y|^(bFX7LElP4} zO)WR4+p|AAH%X>DHt2Acfr+#EbBko%J$80B=Z{}E6A5xmzUsZW_1p@LXLVJ9R{eg5 zwlCWA=AYJr$ljw|R_b@cuAlSXzWet5aNG2n*v;#n&8|J|a+>A#9^Y&IKc!zR-pKx& z|0CBIp}N1(|2a{-zWEKKIU6(3^PAN;G9ZkJe9xFbB9p5GpMhnPh0+aZ5bIDOn|!hVakDY17oNV14BiQetCXT zc2a(Rwq8YUPJlNflL!MmUSo`3Ki;(#sQ5R~04WsB`zK!%*92SlS6rHDiOA%GBBGP^ MB?Q<$h=SAs06fOT-~a#s diff --git a/static/download/Contractor_Report_2.xlsx b/static/download/Contractor_Report_2.xlsx index 4b99f07e56d5ce33fc8787548f35a099caa313da..20af16d51d99be7aa67f24c68fec23d8500cfe3e 100644 GIT binary patch delta 525 zcmX@^e9W0Qz?+#xgn@y9gW+97-9+9)oIonZNm;b|^~4+6^+y~6r*n4*dwBRT6?O~d zcW2m5k=XkC`-;@p4h4_1_Se19nCp4zNRPjz+L+FuY-=a zB!2m;m$rW86~p(6nV;8v=g@tg{lVi_)+K|+&?uKOrL~bKzD)crxq)qidw(OBNh$Mm zoy2cX&o}PetaAL(v?~T#JYN-_#hk8WUf<7u{`1GF+^r=BCqmMDO(ac^u309&^zn`I z4{LACEvpy3u?5#% ziJUh?ph?~u5pa`_$(w^PnoE)Q|ZU+kDll6~v_AxOq%;aHU z;01<13^XvZN-!`~>s93D1b8zti7>z;Y4Sm!LGLEtRgeN3`wPgsK3Pmr zP61@B@$1LC)&kA?&B(wY1v3*!H!wQNPL7k6nOvaA1J+irD9xxgdA6b&Tai3S9RQP3 B(;ff- delta 547 zcmX@+eB7Bgz?+#xgn@y9gW*SQ%|zZqoIon(*&c8AHxqAY*Dq%byvCiOK4HQPmPcZ$ z_r%uz3`n~2?*8IwYnc!BuKxRL<6;llRzA-8!5uSBB*pQp`yBaVM;iMg4Tep23xap@ z2>yMrE7rp=P|x|6bI7k1-#AR4YZrK&(g-qWa-HK^rq(;}5?x?j2JyuauE`uHEwl7lzq z{%x;djN;t?Z|z?e6u-yJjG3d%$;QAiN1cH|7#JcIIr^KJl-Zbp0kT<*<0U_sAtdpP z3B;KETk08D;E8lPBUr#s_7PaXSk42+YYx<;}p#{>e)-KA0?}pakaGD@Zd+ zO^#Mjmj?y=$@<4S`Ucl-j)D}J_ftXI{)RNz zt>yVe*-82N*?JYZIRV~`Od<^MXpJ#`{dm_}plQDu85pEsrUK~(Mkm?Hv9dCg^A&l( U=G7@mGpbLXrKrYMEDur#0DfB7H2?qr diff --git a/static/download/Contractor_Report_3.xlsx b/static/download/Contractor_Report_3.xlsx index ebf7e3d91b58bca8e33c09002d72a8f2c0562570..debf4650eefc9352913b24f03b0c46dd3128b1ff 100644 GIT binary patch delta 425 zcmX^9iRt(!Cf)#VW)=|!1_lm>=7ze7yoWe|R7_18gUQ6}^7RM(4jb^WJqVv!l|Oge zigu0HtVcLiRMZ-Gxb|&#Rq>r7v9-GT%BE6<9fe!#>&rx11Cua`3k7ESck3In!g5U3k~`^PfNcajC4)YsQr? zraE?ZnzUazuiv%&q~?#Xkmq;fS&e3EMxR{nar@Dw%FO)tW#3)zcP!I(joy|N&VBQq z$Hl#8ul4`be$l+K`ZxbarY~G|f203%qJ%=s%$PaKoNNpXo4+vXu`vS!WV0$q_Hr;| z^7>~?AjagHP0zprshiUo!2;*EJOT@B+3F1uVA^gC56sD~+s(nM>bKj0=>yxH!8F?r Y3oz}t!wgJU?XUvV+jqEv>Hj-C046uWn*aa+ delta 425 zcmX^9iRt(!Cf)#VW)=|!1_lm>OSLr_sTjsHn^sJ`E?@8KeZ)Y3?ZN&{U+(!$ za+-MItn0@m3Og25aG!jWx8bLPWajt#-mmk*FV4O`vwYsn3HMYola4Ky5l$1;-s&D-J)LrCNVx-yh2jCD)#W+?geHe52%TRdtESAAbG#utz3-cYp_b z^VC;sC#o%8Hsk7_MJ2P^6R zLbXcu+wXF>)t!lVlwW&$cYTMr!`Bb5?_W_z35A%MF>{nT*%%l$e__;PV+IDuW>t>t zWd#1pF diff --git a/static/download/Contractor_Report_4.xlsx b/static/download/Contractor_Report_4.xlsx index a70ea73f60665c2b83efbc359fc1b616b3dfa421..a850d5f894a5bcddacf2f304e1465bac3e5209bf 100644 GIT binary patch delta 516 zcmZp4YH;EW@MdNaVPIh3U?^;;o5*{J6G+8a%yK^UYT^yK`h$Ll4S3idgwHI>pKF%X zuJM}n2&amQnqgtLP=2?^EDgh~@84G3z1H~P*wuf3Zw5~BymX{T-%{<&lMQQ*J@~EU zduxMo;3S5lGKMdLj<@`k_+$5M!OAO!@(P)s7xHuHKF{XxxRrIupfNPcrA%>ct;PvhOsmtWV^JpJXg%lw2@ zYOjf;>CrpB`d-T~YX1lenSS><)2*u!bCv`j;@w?#@5tZ7-zJvo=3f^TpZef-o44YU z9o6&K$bU9BaC!aho%|!w7b1UtZGXp&5)3gjW9BGxvN14h{>rGw#taOR&1xJf{9uN! z_%kLDW3rjlGq8ZXbUGtgpi|}%SRhZ<8zQhr&KeP#ljP07sx0ND8ShOFl~)4us(?I+ z$l-4^v^cP=5D`=|YRs{>yF6k>$vXd3(KIc4>IviU}VyTRS>=o`n`(OJDeC znU#PmbI|2#i%CvuYNY*o{~WaF~pb*VjvUq3$lxuzz!M(w3&nDhFn z0i3F>CO-OI$CIjmguU_Ky`O7ExT>_{@s8QA?o__ad%x}b)eD=-VmGhLTfcn{XPxqo ztG84B&e-3em$BLSzrgte7Y?tlm$qX>35S@OF>{nT*%&r|X4Ge628PIHRSp$?FvCau z854*x*;MKoSU^rXoe?b1A@c|mGaVzl9Q*(tAly_fjo!Fx8-HPykGLtR+>@_4Dm&&ImP;VATq$4kx7IB z9*Z#%MOt%h85tN%m>3xNVdewr21cRD{t9wnV+s_c8EYo@C}@HmHM`BJMH;B%Iy1VX P5+`3#P-9yw2Qmf#m9WUH diff --git a/static/download/Contractor_Report_6.xlsx b/static/download/Contractor_Report_6.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8f6b0253779e3f2c5e025b24ad1b5df122b4c03e GIT binary patch literal 6334 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 literal 0 HcmV?d00001 diff --git a/templates/show_excel_file.html b/templates/show_excel_file.html index 19b8903..2e11b0c 100644 --- a/templates/show_excel_file.html +++ b/templates/show_excel_file.html @@ -59,7 +59,8 @@ - + +