EVOLUTION-NINJA
Edit File: report_details.php
<?php echo view('includes/sidebar'); ?> <script type="text/javascript" src="<?php echo base_url('public/assets/js/jquery-3.6.0.min.js'); ?>"></script> <script src="<?php echo base_url('public/assets/toastr/toastr.min.js');?>"></script> <link rel="stylesheet" href="<?php echo base_url('public/assets/toastr/toastr.min.css');?>"> <link rel="stylesheet" href="https://cdn.datatables.net/1.11.5/css/jquery.dataTables.min.css"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script> <script src="https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js"></script> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.min.js"></script> <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.17.4/xlsx.full.min.js"></script> <style> table { width: 90%; border-collapse: collapse; text-align: left; } th, td { padding:0 5px; border: 1px solid #ddd; } th { background-color: #f4f4f4; font-weight: bold; } tr:nth-child(even) { background-color: #f9f9f9; } .table-container { width: 91%; margin: auto; overflow-x: auto; height: 552px; overflow-y: scroll; border: 1px solid #999; } /* Styling for totals and grand total row */ .total-row { font-weight: bold; background-color: #e0e0e0; } h4{ text-align:center; font-size:20px; margin-bottom:30px; margin-left:-150px; font-weight:bold; color:#4B0B0B; } .fieldsbox{ width:93%; } /* Additional styles for responsive view */ @media screen and (max-width: 768px) { th, td { font-size: 14px; padding: 8px; } .total-row th, .total-row td { font-size: 14px; padding: 8px; } .fieldsbox{ width:100%; } } /* Table header fixed while scrolling */ /*.table-container th {*/ /* position: sticky;*/ /* top: 0;*/ /* background-color: #f4f4f4;*/ /* z-index: 2;*/ /*}*/ #reportTable{ width: 100%; margin: auto; /* overflow-y: auto;*/ /*max-height: 400px;*/ } #reportTable, th, td { border-collapse: collapse; } #reportTable td{ padding:5px 10px; border: 1px solid black; font-size: 15px; vertical-align: middle !important; } #reportTable th{ padding:0 10px; border: 1px solid black; font-size: 13px; vertical-align: middle; } /*#reportTable .width{*/ /* padding:0px 120px !important;*/ /*}*/ /*#reportTable .reduced-width{*/ /* padding:0px 0px !important;*/ /*}*/ .heading{ text-align:center; font-size:22px; margin-left:-150px; font-weight:bold; color:#4B0B0B; /*border:none !important;*/ } </style> <section class="home-section fullpage"> <div class="home-content"> <i class='bx bx-menu'></i> <!-- <span class="text">Drop Down Sidebar</span> --> </div> <div class="row m-0"> <div class="col-sm-12"> <h1 class="crt-pjt">Reports</h1> </div> </div> <form id="report"> <div class="row m-0"> <div class="constuency_page"> <div class="constuencydetails"> <!-- ----------------------------1st row------------------------------------------ --> <div class="constuencydetail row"> <div class="col-sm-4"> <label for="constituency" class="form-label inpfieldname">Constituency Name</label> <select class="form-select form-control fieldsbox" id="constituency" name="constituency"> <option value=""></option> </select> </div> <div class="col-sm-4"> <label for="mla" class="form-label inpfieldname">MLA</label> <select class="form-select form-control fieldsbox" id="mla" name="mla"> <option value=""></option> </select> </div> <!-- <div class="col-sm-4">--> <!-- <label for="mla" class="form-label inpfieldname">MP</label>--> <!-- <select class="form-select form-control fieldsbox" id="mp" name="mp">--> <!-- <option value=""></option>--> <!-- </select>--> <!--</div>--> <!--<div class="col-sm-4">--> <!-- <label for="mla" class="form-label inpfieldname">MLC</label>--> <!-- <select class="form-select form-control fieldsbox" id="mlc" name="mlc">--> <!-- <option value=""></option>--> <!-- </select>--> <!-- </div>--> <div class="col-sm-4"> <label for="department" class="form-label inpfieldname">Department</label> <select class="form-select form-control fieldsbox" id="department" name="department"> <option value=""></option> </select> </div> <div class="col-sm-4"> <label for="engineer" class="form-label inpfieldname">Fund Wise</label><br> <select class="form-select form-control fieldsbox" aria-label="Default select example" id="Fund" name="fund"> <option value=""></option> </select> </div> <div class="col-sm-4"> <label for="year" class="form-label inpfieldname">Financial Year</label> <select class="form-select form-control fieldsbox" id="year" name="year"> <option value="">Select</option> <option value="2028-29">2028-29</option> <option value="2027-28">2027-28</option> <option value="2026-27">2026-27</option> <option value="2025-26">2025-26</option> <option value="2024-25">2024-25</option> <option value="2023-24">2023-24</option> <option value="2022-23">2022-23</option> <option value="2021-22">2021-22</option> <option value="2020-21">2020-21</option> <option value="2019-20">2019-20</option> <option value="2018-19">2018-19</option> <option value="2017-18">2017-18</option> <option value="2016-17">2016-17</option> <option value="2015-16">2015-16</option> <option value="2014-15">2014-15</option> </select> </div> <div class="col-sm-4"> <label for="Apm" class="form-label inpfieldname">APM</label><br> <select class="form-select form-control fieldsbox" aria-label="Default select example" id="apm" name="apm"> <option value=""></option> </select> </div> </div> <!-- ----------------------------2nd row------------------------------------------ --> <div class="constuencydetail row"> <div class="col-sm-4"> <label for="engineer" class="form-label inpfieldname">Engineer</label><br> <select class="form-select form-control fieldsbox" aria-label="Default select example" id="Engineer" name="engineer"> <option value=""></option> </select> </div> <div class="col-sm-4"> <label for="engineer" class="form-label inpfieldname">Status</label><br> <select class="form-select form-control fieldsbox" aria-label="Default select example" id="status" name="Status"> <option value="">All</option> <option value="1">Progress</option> <option value="2">Not started</option> <option value="3">completed</option> <?php if (session('role') == 0): ?> <option value="4">hide</option> <option value="5">Completed Against Amount Released</option> <?php endif; ?> </select> </div> <div class="col-sm-4"> <label for="engineer" class="form-label inpfieldname">Date</label><br> <input type="text" class="form-control fieldsbox" id="date" name="date" onchange="updateYearChange()" placeholder="dd/mm/yy"> </div> </div> <div class="constuencydetail row"> <div class="col-sm-4"> <label for="from_date" class="form-label inpfieldname">From Date</label><br> <input type="number" class="form-control fieldsbox" id="from_date" name="from_date" placeholder="YYYY" min="2000" max="2100"> </div> <div class="col-sm-4"> <label for="to_date" class="form-label inpfieldname">To Date</label><br> <input type="number" class="form-control fieldsbox" id="to_date" name="to_date" placeholder="YYYY" min="2000" max="2100"> </div> </div> </div> <div class="col-sm-6 buttns-cnl"> <button type="submit" class="submit" style="width:200px">Get Report</button> </div> </div> </form> <?php $currentMonth = date('n'); // 1–12 $currentYear = date('Y'); if ($currentMonth >= 4) { // April to December → current year - next year $financialYear = $currentYear . '-' . substr($currentYear + 1, -2); } else { // January to March → previous year - current year $financialYear = ($currentYear - 1) . '-' . substr($currentYear, -2); } ?> <!--<script>--> <!--$(document).on("change", "#year", function () {--> <!-- let selectedYear = $(this).val();--> <!-- $("#yearHeading").text(selectedYear);--> <!--});--> <!--</script>--> <!-- Table --> <div class="mt-4 ml-3 mr-3"> <button id="printBtn" class="btn btn-primary">Print PDF</button> <button id="printExcel" class="btn btn-primary">Export To Excel</button> <div class="table-container mt-4" id="reportContainer"> <table class="table mt-3" id="reportTable"> <input type="text" id="projectSearch" class="form-control search" placeholder="Search Project Name..."> <div id="firstPagePrintHeader"> <div style="text-align:center;font-size:20px;font-weight:bold;"> Mysore Nirmithi Kendra </div> <div style="text-align:center;font-size:14px;font-weight:600;"> <span id="yearchange"></span> ಸಾಲಿನಲ್ಲಿ ಕೈಗೊಳ್ಳುತ್ತಿರುವ ಕಾಮಗಾರಿಗಳ ಘೋಷ್ವಾರ <span id="monthChange"></span> <span id="constituencyName" style="font-weight:bold; display:block; margin-top:5px;"></span> </div> </div> <thead> <!--<tr>--> <!-- <td colspan="17" class="heading">Mysore Nirmithi kendra</td>--> <!-- </tr>--> <!--<tr>--> <!-- <td colspan="17" style="text-align:center;font-size: 14px;font-weight: 600;padding: 6px;">--> <!-- <span id="yearchange"></span> ಸಾಲಿನಲ್ಲಿ ಕೈಗೊಳ್ಳುತ್ತಿರುವ ಕಾಮಗಾರಿಗಳ ಘೋಷ್ವಾರ<span id="monthChange"></span></td>--> <!-- </tr>--> <tr> <th rowspan="2">SL NO</th> <th class="project-column width text-center" rowspan="2" >Work Details</th> <th class="reduced-width" rowspan="2">ADM Details</th> <th class="reduced-width" rowspan="2">No Of Works</th> <th class="reduced-width">ADM Amount</th> <!--<th class="reduced-width">Total Amount</th>--> <th class="reduced-width">Previous Year Amount Release </th> <th class="reduced-width"> <span id="yearHeading"><?php echo $financialYear?></span> Amount Release </th> <th class="reduced-width">Total Release</th> <th class="reduced-width">Expenditure</th> <th colspan="4" class="reduced-width text-center">Stage Of Work </th> <th class="reduced-width width text-center" rowspan="2">Remarks</th> <th class="reduced-width width text-center" id="hide" rowspan="2">Balance Amount</th> </tr> <tr> <!--<td></td>--> <!--<td></td>--> <!--<td></td>--> <th colspan="5" class="text-center">Lakhs in Rupees</th> <th>Fully completed</th> <th>Completed Against Amount Released</th> <th>Progress</th> <th>Not Started</th> <!--<th>Financially completed</th>--> <!--<td></td>--> </tr> </thead> <tbody id="reportTableBody"> <!-- Dynamic rows will be appended here --> </tbody> </table> </div> </div> </div> <script> // alert(userRole); $(document).ready(function () { function fetchReport(formData = null) { // Reset the report data and totals $('#reportTableBody').empty(); $('#totalAmount').text('0'); $('#totalReleaseAmount').text('0'); $('#totalExpenses').text('0'); $('#notStartedCount').text('0'); $('#workingInProgressCount').text('0'); $('#physicallyCount').text('0'); $('#financiallyCount').text('0'); $('#lastReleasedAmountTotal').text('0'); $('#totalSlNo').text('0'); $('#totalPresentYearRelease').text('0'); $('#totalPreviousYearRelease').text('0'); let ajaxOptions = { url: "<?php echo base_url('get_report'); ?>", type: 'POST', dataType: 'json', success: function (response) { // console.log(response); if (response.result === 1) { let departmentGroups = {}; // Group data by department, constituency, financial year, and funds $.each(response.table, function (index, row) { const departmentName = row.department_name; const currentConstituencyName = row.constituency_name; const financialYear = row.adm_financial_year; const funds = row.fund_name ? row.fund_name : ''; if (!departmentGroups[departmentName]) { departmentGroups[departmentName] = {}; } // if ro(!departmentGups[departmentName][currentConstituencyName]) { if (!departmentGroups[departmentName][currentConstituencyName]) { departmentGroups[departmentName][currentConstituencyName] = {}; } if (!departmentGroups[departmentName][currentConstituencyName][financialYear]) { departmentGroups[departmentName][currentConstituencyName][financialYear] = {}; } if (!departmentGroups[departmentName][currentConstituencyName][financialYear][funds]) { departmentGroups[departmentName][currentConstituencyName][financialYear][funds] = []; } departmentGroups[departmentName][currentConstituencyName][financialYear][funds].push(row); }); let totalOverall = 0, totalReleaseOverall = 0, totalExpenseOverall = 0; let presentYearTotalReleaseOverall = 0, previousYearTotalReleaseOverall = 0; let workingInProgressOverall = 0, physicallyOverall = 0,financiallyOverall=0; notStartedOverall = 0;releasedAmountAgainstOverall = 0; let totalSlNoOverall = 0 , grandTotalLastReleasedAmount=0; let totalOverallAdm =0 ; let totalBalanceOverall = 0; // Loop through each department $.each(departmentGroups, function (departmentName, constituencies) { let departmentHeader = ` <tr> <td colspan="16" style="text-align:center"><strong>${departmentName}</strong></td> </tr> `; $('#reportTableBody').append(departmentHeader); // Loop through each constituency $.each(constituencies, function (currentConstituencyName, financialYears) { let constituencyRow = ` <tr> <td colspan="16" style="text-align:left !important; background-color:#f2f2f2;"><strong>${currentConstituencyName}</strong></td> </tr> `; $('#reportTableBody').append(constituencyRow); // Loop through each financial year $.each(financialYears, function (financialYear, fundsData) { let financialYearRow = ` <tr> <td colspan="16" style="text-align:center !important;"><strong> ${financialYear}</strong></td> </tr> `; $('#reportTableBody').append(financialYearRow); // Loop through each fund type $.each(fundsData, function (funds, projects) { let fundRow = ` <tr> <td colspan="16" style="text-align:left !important;"><strong> ${funds}</strong></td> </tr> `; $('#reportTableBody').append(fundRow); let total = 0, totalRelease = 0, totalExpense = 0; let presentYearTotalRelease = 0, previousYearTotalRelease = 0; let workingInProgressCount = 0, physicallyCount = 0,financiallyCount=0, notStartedCount = 0; let totalSlNo = 0,mostRecentLastReleasedDate=0 , lastReleasedAmount =0 ,totalAdm=0 , adm_date =0; let lastReleasedAmountTotal = 0, previousYearReleased = 0 , completedCount=0; let totalBalance = 0; // Grand total // let totalBalanceOverall = 0; // Loop through projects $.each(projects, function (index, project) { let p_amount = parseFloat(project.total_released_amount) || 0; let amount = parseFloat(project.Total_amount) || 0; let presentYearReleased = parseFloat(project.present_year_released) || 0; // let previousYearReleased = parseFloat(project.previous_year_released) || 0; let previousYearReleased = p_amount-presentYearReleased; let releaseAmount = previousYearReleased + presentYearReleased ; let lastReleasedAmount = parseFloat(project.last_released_amount) || 0; let lastReleasedDate = project.last_released_date? new Date(project.last_released_date).toLocaleDateString('en-GB') : ''; let adm_date= project.adm_date? new Date(project.adm_date).toLocaleDateString('en-GB') : ''; let expenses = parseFloat(project.total_expenditure) || 0; let adm_amount = parseFloat(project.adm_amount) || 0; let balanceAmount = amount - p_amount; // let balanceAmount = Math.max(0, parseFloat((adm_amount - releaseAmount).toFixed(2))); const releasedAgainstCompleted = project.released_against_completed; let slNo = parseInt(project.sl_no) || 0; const workingStage = project.status; // Financial completion condition // const projectYear = project.adm_financial_year; //added // const currentFY = "<?php echo $financialYear; ?>"; // these 2 added // const selectedYear = $('#year').val(); // // ✅ FILTER FIRST (VERY IMPORTANT) // if (!selectedYear && projectYear !== currentFY && workingStage === '3') { //this condition added // return; // ❌ skip this project completely // } //added 1/4/26 // const projectYear = project.adm_financial_year; // const currentFY = "<?php echo $financialYear; ?>"; // const selectedYear = $('#year').val(); // // ✅ FILTER LOGIC // if (!selectedYear) { // // ❌ Hide only fully completed // // ✅ But allow "Completed Against Amount Released" // if ( // projectYear !== currentFY && // workingStage === '3' && // releasedAgainstCompleted !== '1' // ) { // return; // } // } //added 1/4/26 // const projectYear = project.adm_financial_year ? project.adm_financial_year.trim() : ''; // const currentFY = "<?php echo $financialYear; ?>"; // const selectedYear = $('#year').val(); // // ✅ Reset fully completed for previous years (ONLY for display) // let fullyCompletedDisplay = 0; // if (workingStage === '3') { // if (!selectedYear) { // if (projectYear === currentFY) { // fullyCompletedDisplay = 1; // } // } else { // fullyCompletedDisplay = 1; // } // } // const releasedAgainstCompleted = // (p_amount > 0 && // expenses >= p_amount && // amount > p_amount) ? 1 : 0; let workingInProgress = workingStage === '1' ? 1 : 0; let notStarted = workingStage === '2' ? 1 : 0; let physicallyComplete = workingStage === '3' ? 1 : 0; // if (workingStage === '3') { // physicallyCount+=(1*slNo); // } else if (workingStage === '1') { // workingInProgressCount+=(1*slNo); // } else if (workingStage === '2') { // notStartedCount+=(1*slNo); // } if (releasedAgainstCompleted==='1') { completedCount += (1 * slNo); physicallyComplete = 0; workingInProgress = 0; } else if (workingStage === '3') { physicallyCount += (1 * slNo); } //added 1/4/26 // else if (workingStage === '3') { // const projectYear = project.adm_financial_year ? project.adm_financial_year.trim() : ''; // const currentFY = "<?php echo $financialYear; ?>"; // const selectedYear = $('#year').val(); // // ✅ Default load → ONLY current FY // if (!selectedYear) { // if (projectYear === currentFY) { // physicallyCount += (1 * slNo); // } // } // // ✅ If user selects year → normal // else { // physicallyCount += (1 * slNo); // } // } else if (workingStage ==='1' ) { workingInProgressCount += (1 * slNo); } else if (workingStage === '2') { notStartedCount += (1 * slNo); } // console.log(project.project_name ); // if(project.project_name == "ಮರಸೆ ಗ್ರಾಮದಲ್ಲಿ ವಾಲ್ಮೀಕಿ ಸಮುದಾಯ ಭವನ ಕಾಮಗಾರ"){ // console.log(project.project_name ); // } // <td>${physicallyComplete}</td> removed this line 1/4/26 and added this <td>${fullyCompletedDisplay}</td> let newRow = ` <tr> <td>${index + 1}</td> <td>${project.project_name}</td> <td>${adm_date}</td> <td>${slNo}</td> <td>${amount.toFixed(2)}</td> <td>${previousYearReleased.toFixed(2)}</td> <td>${presentYearReleased.toFixed(2)}</td> <td>${releaseAmount.toFixed(2)}</td> <td>${expenses.toFixed(2)}</td> <td>${physicallyComplete}</td> <td>${releasedAgainstCompleted}</td> <td>${workingInProgress}</td> <td>${notStarted}</td> <td>${project.remarks || ''}</td> <td id="hide">${balanceAmount.toFixed(2)}</td> </tr> `; $('#reportTableBody').append(newRow); total += amount; totalAdm += adm_amount; totalRelease += releaseAmount; totalExpense += expenses; totalSlNo += slNo; presentYearTotalRelease += presentYearReleased; previousYearTotalRelease += previousYearReleased; lastReleasedAmountTotal += lastReleasedAmount; totalBalance += balanceAmount; // grand total totalBalanceOverall += balanceAmount; }); let totalsRow = ` <tr> <th colspan="2"></th> <th></th> <th>${totalSlNo}</th> <th>${total.toFixed(2)}</th> <th>${previousYearTotalRelease.toFixed(2)}</th> <th>${presentYearTotalRelease.toFixed(2)}</th> <th>${totalRelease.toFixed(2)}</th> <th>${totalExpense.toFixed(2)}</th> <th>${physicallyCount}</th> <th>${completedCount }</th> <th>${workingInProgressCount}</th> <th>${notStartedCount}</th> <td></td> <th id="hide">${totalBalance.toFixed(2)}</th> </tr> `; $('#reportTableBody').append(totalsRow); totalOverall += total; totalOverallAdm += totalAdm; totalReleaseOverall += totalRelease; totalExpenseOverall += totalExpense; presentYearTotalReleaseOverall += presentYearTotalRelease; previousYearTotalReleaseOverall += previousYearTotalRelease; grandTotalLastReleasedAmount += lastReleasedAmountTotal; // Accumulate last released amount notStartedOverall += notStartedCount; workingInProgressOverall += workingInProgressCount; physicallyOverall += physicallyCount; releasedAmountAgainstOverall +=completedCount ; totalSlNoOverall += totalSlNo; }); }); }); }); // Display grand totals let grandTotalsRow = ` <tr style="font-weight:bold;"> <th colspan="2">Total</th> <th></th> <th>${totalSlNoOverall}</th> <th>${totalOverall.toFixed(2)}</th> <th>${previousYearTotalReleaseOverall.toFixed(2)}</th> <th>${presentYearTotalReleaseOverall.toFixed(2)}</th> <th>${totalReleaseOverall.toFixed(2)}</th> <th>${totalExpenseOverall.toFixed(2)}</th> <th>${physicallyOverall}</th> <th>${releasedAmountAgainstOverall}</th> <th>${workingInProgressOverall}</th> <th>${notStartedOverall}</th> <td></td> <td id="hide">${totalBalanceOverall.toFixed(2)}</td> </tr> `; $('#reportTableBody').append(grandTotalsRow); $('#totalAmount').text(totalOverall.toFixed(2)); $('#totalReleaseAmount').text(totalReleaseOverall.toFixed(2)); $('#totalExpenses').text(totalExpenseOverall.toFixed(2)); $('#notStartedCount').text(notStartedOverall); $('#workingInProgressCount').text(workingInProgressOverall); $('#physicallyCount').text(physicallyOverall); $('#financiallyCount').text(financiallyOverall); $('#totalSlNo').text(totalSlNoOverall); $('#totalPresentYearRelease').text(presentYearTotalReleaseOverall.toFixed(2)); $('#totalPreviousYearRelease').text(previousYearTotalReleaseOverall.toFixed(2)); $('#totalAdmAmount').text(totalOverallAdm.toFixed(2)); // Add ADM amount total display $('#totalLastReleasedAmount').text(grandTotalLastReleasedAmount.toFixed(2)); $('#totalBalanceAmount').text(totalBalanceOverall.toFixed(2)); } else { alert(response.message); } }, error: function (xhr, status, error) { console.error('AJAX error:', error); } }; if (formData) { ajaxOptions['data'] = formData; ajaxOptions['processData'] = false; ajaxOptions['contentType'] = false; } $.ajax(ajaxOptions); } //---------------------------------------------------------------28/08/2025 const urlParams = new URLSearchParams(window.location.search); const deptId = urlParams.get('department_id'); const constituencyId = urlParams.get('constituency_id'); if (deptId) { let formData = new FormData(); formData.append('department', deptId); fetchReport(formData); // fetch with department filter } else if (constituencyId) { let formData = new FormData(); formData.append('constituency', constituencyId); fetchReport(formData); // fetch with constituency filter } else { fetchReport(); // default fetch if no id in url } // ------------------------------------------------------------------ // fetchReport(); $('#report').submit(function (e) { e.preventDefault(); let formData = new FormData(this); fetchReport(formData); }); $('#printBtn').click(function() { printReport(); }); $('#printExcel').click(function () { generateExcel(); }); function generateExcel() { const worksheet = XLSX.utils.table_to_sheet(document.getElementById('reportTable')); const wb = XLSX.utils.book_new(); XLSX.utils.book_append_sheet(wb, worksheet, "Report"); XLSX.writeFile(wb, "report.xlsx"); } function printReport() { // Create a new window const printWindow = window.open('', '_blank'); const reportContent = $('#reportContainer').html(); // Get the HTML of the report printWindow.document.write(` <html> <head> <title>Report</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css"> <style> body { font-family: Arial, sans-serif; margin:0 5px !important; } .heading { font-size: 20px; font-weight: bold; text-align: center; margin-bottom: 20px; } table { width: 100%; border-collapse: collapse; } th, td { padding:2px 2px !important; text-align:center; border:1px solid black !important; max-width:90px !important; vertical-align: middle !important; } th {padding:0px 3px !important;font-size:14px !important; } .width{padding:0px 100px !important; } /* Landscape orientation for printing */ @media print { /* Hide the original heading rows everywhere */ .print-first-page-only { display: none !important; } #hide{ display: none !important; } /* Create a printed-only header that appears only on page 1 */ #firstPageHeader { display: table-header-group; } /* Prevent table thead from repeating */ thead { display: table-header-group; } @page { size: landscape; margin: 10mm; } } .search{ display: none !important; } </style> </head> <body> <div class=" mt-4 ml-1 mr-1"> <div class="table-container">${reportContent}</div> </div> </body> </html> `); printWindow.document.close(); // Close the document to complete the rendering printWindow.onload = function() { printWindow.print(); // Trigger print when the document is fully loaded printWindow.close(); // Close the print window after printing }; } }); $(document).on("keyup", "#projectSearch", function () { let value = $(this).val().toLowerCase(); $("#reportTableBody tr").filter(function () { // Column 2 contains project name (index 1) let projectName = $(this).find("td:eq(1)").text().toLowerCase(); $(this).toggle(projectName.indexOf(value) > -1); }); }); $('#constituency').change(function () { let selectedText = $("#constituency option:selected").text(); if (selectedText && selectedText !== "Select Constituency") { $('#constituencyName').text(selectedText); // ❌ removed "Constituency:" } else { $('#constituencyName').text(""); } }); </script> <script> function updateYearChange() { const dateInput = document.getElementById('date').value; // Validate input format (dd/mm/yy) const dateParts = dateInput.split('/'); if (dateParts.length === 3) { const day = parseInt(dateParts[0], 10); const month = parseInt(dateParts[1], 10) - 1; // Month is zero-indexed in JavaScript const year = parseInt( dateParts[2], 10); // Prefix '20' for 2-digit year const date = new Date(year, month, day); // Format month and year const monthName = date.toLocaleString('kn-IN', { month: 'long' }); // Kannada month name const yearFull = date.getFullYear(); document.getElementById('monthChange').textContent = `(${monthName} - ${yearFull})`; } else { // alert('Please enter a valid date in dd/mm/yy format'); } } </script> <script> // function updateYearChange() { // const dateInput = document.getElementById('date').value; // if (dateInput) { // const date = new Date(dateInput); // const month = date.toLocaleString('kn-IN', { month: 'long' }); // Kannada month name // const year = date.getFullYear(); // document.getElementById('monthChange').textContent = `(${month} - ${year})`; // } // } // </script> <!--<script>--> <!-- $(document).ready(function() {--> <!-- const currentYear = new Date().getFullYear();--> <!-- const fiscalYear = `${currentYear}-${currentYear + 1}`; --> <!-- if (!$('#year').val()) {--> <!-- $('#yearchange').text(fiscalYear); --> <!-- }--> <!-- $('#year').change(function() {--> <!-- const selectedYear = $(this).val();--> <!--// const fiscalSelectedYear = `${selectedYear}-${parseInt(selectedYear) + 1}`;--> <!-- const fiscalSelectedYear = `${selectedYear}`;--> <!-- $('#yearchange').text(fiscalSelectedYear);--> <!-- });--> <!-- });--> <!-- </script>--> <script> // $(document).ready(function () { // const currentDate = new Date(); // const currentYear = currentDate.getFullYear(); // const currentMonth = currentDate.getMonth() + 1; // Months are 0-indexed in JavaScript // let fiscalYear; // if (currentMonth >= 4) { // // From April to December // fiscalYear = `${currentYear}-${currentYear + 1}`; // } else { // fiscalYear = `${currentYear - 1}-${currentYear}`; // } // if (!$('#year').val()) { // $('#yearchange').text(fiscalYear); // } // $('#year').change(function () { // const selectedYear = parseInt($(this).val()); // const selectedMonth = currentMonth; // let fiscalSelectedYear; // if (selectedMonth >= 4) { // fiscalSelectedYear = `${selectedYear}-${selectedYear + 1}`; // } else { // fiscalSelectedYear = `${selectedYear - 1}-${selectedYear}`; // } // $('#yearchange').text(fiscalSelectedYear); // }); // }); $(document).ready(function () { function formatYear(selectedYear) { if (selectedYear && selectedYear.includes('-')) { let parts = selectedYear.split('-'); return parts[0] + '-20' + parts[1]; // 2022-2023 } return selectedYear; } // 🔹 Default fiscal year const currentDate = new Date(); const currentYear = currentDate.getFullYear(); const currentMonth = currentDate.getMonth() + 1; let fiscalYear; if (currentMonth >= 4) { fiscalYear = `${currentYear}-${currentYear + 1}`; } else { fiscalYear = `${currentYear - 1}-${currentYear}`; } // ✅ Always set default $('#yearchange').text(fiscalYear); // 🔹 On dropdown change $('#year').change(function () { const selectedYear = $(this).val(); // no parseInt ❌ const formattedYear = formatYear(selectedYear); $('#yearchange').text(formattedYear); }); }); </script> <script> $(document).ready(function () { // Initialize Date of Estimation datepicker $('#date').datepicker({ dateFormat: 'dd/mm/yy', // Custom format: dd/mm/yy changeMonth: true, // Allow changing the month changeYear: true // Allow changing the year }); }); </script> <script> document.addEventListener("DOMContentLoaded", function () { let today = new Date(); let day = ("0" + today.getDate()).slice(-2); let month = ("0" + (today.getMonth() + 1)).slice(-1); let year = today.getFullYear(); let formatted = `${day}/${month}/${year}`; document.getElementById("date").value = formatted; document.getElementById("from_date").value = formatted; document.getElementById("to_date").value = formatted; }); </script> <script> let arrow = document.querySelectorAll(".arrow"); for (var i = 0; i < arrow.length; i++) { arrow[i].addEventListener("click", (e) => { let arrowParent = e.target.parentElement.parentElement; arrowParent.classList.toggle("showMenu"); }); } let sidebar = document.querySelector(".sidebar"); let sidebarBtn = document.querySelector(".bx-menu"); console.log(sidebarBtn); sidebarBtn.addEventListener("click", () => { sidebar.classList.toggle("close"); }); </script> <script> $(document).ready(function () { $.ajax({ url: '<?php echo base_url("fetch-constituency"); ?>', method: 'GET', success: function (response) { if (response.length > 0) { var options = '<option value="">Select Constituency</option>'; $.each(response, function (key, value) { options += `<option value="${value.id}">${value.constituency_name}</option>`; }); $('#constituency').html(options); } else { console.log('No constituency found'); } }, error: function (xhr, status, error) { console.error("Error fetching constituency:", error); } }); }); </script> <script> $(document).ready(function () { $.ajax({ url: '<?php echo base_url("fetch-department"); ?>', method: 'GET', success: function (response) { if (response.length > 0) { var options = '<option value="">Select Department</option>'; $.each(response, function (key, value) { options += `<option value="${value.id}">${value.department_name}</option>`; }); $('#department').html(options); } else { console.log('No department found'); } }, error: function (xhr, status, error) { console.error("Error fetching department:", error); } }); }); </script> <script> $(document).ready(function () { $.ajax({ url: '<?php echo base_url("fetch-mla"); ?>', method: 'GET', success: function (response) { if (response.length > 0) { var options = '<option value="">Select </option>'; $.each(response, function (key, value) { options += `<option value="${value.id}">${value.mla}</option>`; }); $('#mla').html(options); } else { console.log('No mla found'); } }, error: function (xhr, status, error) { console.error("Error fetching mla:", error); } }); }); </script> <script> $(document).ready(function () { $.ajax({ url: '<?php echo base_url("fetch-apm"); ?>', method: 'GET', success: function (response) { if (response.length > 0) { var options = '<option value="">Select APM</option>'; $.each(response, function (key, value) { options += `<option value="${value.id}">${value.username}</option>`; }); $('#apm').html(options); } else { console.log('No apm found'); } }, error: function (xhr, status, error) { console.error("Error fetching apm:", error); } }); }); </script> <script> $(document).ready(function () { $.ajax({ url: '<?php echo base_url("fetch-engineer"); ?>', method: 'GET', success: function (response) { if (response.length > 0) { var options = '<option value="">Select Engineer</option>'; $.each(response, function (key, value) { options += `<option value="${value.id}">${value.username}</option>`; }); $('#Engineer').html(options); } else { console.log('No Engineer found'); } }, error: function (xhr, status, error) { console.error("Error fetching engineer:", error); } }); }); </script> <script> $(document).ready(function () { $.ajax({ url: '<?php echo base_url("fetch-fund"); ?>', method: 'GET', success: function (response) { if (response.length > 0) { var options = '<option value="">Select fund</option>'; $.each(response, function (key, value) { options += `<option value="${value.id}">${value.fund_name}</option>`; }); $('#Fund').html(options); } else { console.log('No fund found'); } }, error: function (xhr, status, error) { console.error("Error fund engineer:", error); } }); }); </script> <script> $(document).ready(function () { $.ajax({ url: '<?php echo base_url("fetch-mp"); ?>', method: 'GET', success: function (response) { if (response.length > 0) { var options = '<option value="">Select MP</option>'; $.each(response, function (key, value) { options += `<option value="${value.id}">${value.mp}</option>`; }); $('#mp').html(options); } else { console.log('No MP found'); } }, error: function (xhr, status, error) { console.error("Error fetching status:", error); } }); }); </script> <script> $(document).ready(function () { $.ajax({ url: '<?php echo base_url("fetch-mlc"); ?>', method: 'GET', success: function (response) { if (response.length > 0) { var options = '<option value="">Select mlc</option>'; $.each(response, function (key, value) { options += `<option value="${value.id}">${value.mlc}</option>`; }); $('#mlc').html(options); } else { console.log('No MLC found'); } }, error: function (xhr, status, error) { console.error("Error fetching status:", error); } }); }); </script> <?php echo view('includes/footer'); ?>