0% found this document useful (0 votes)
9 views8 pages

Vendor Report

Uploaded by

bhasithbhasith44
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views8 pages

Vendor Report

Uploaded by

bhasithbhasith44
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 8

@using Nop.Web.Areas.Admin.Models.

Inventory
@using Nop.Web.Framework.Models.AdminAreaTour
@using Nop.Web.Areas.Admin.Models.Purchases
@model PurchaseSearchModel

@{
ViewBag.PageTitle = T("Admin.Report.VendorOutstandingReport").Text;
ViewBag.TourStep = TourStep.SalesBillList;
NopHtml.SetActiveMenuItemSystemName("Ledger");
string editQueryString = string.Empty;
var showTour = ViewBag.ShowTour ?? false;
if (showTour)
{
editQueryString = "?showtour=true";
}
const string hideSearchBlockAttributeName =
"PurchaseListPage.HideSearchBlock";
var hideSearchBlock = await
genericAttributeService.GetAttributeAsync<bool>(await
workContext.GetCurrentCustomerAsync(), hideSearchBlockAttributeName);
}

@await Html.PartialAsync("_AdminTour")

<div class="content-header clearfix">


<h1 class="float-left">@T("Admin.Report.VendorOutstandingReport")</h1>
<div class="row">
<div class="text-right col-12">
<a id="download-excel" class="btn btn-primary">
<i class="fa fa-download"></i> Download Excel
</a>
<a id="download-csv" class="btn btn-primary">
<i class="fa fa-download"></i> Download CSV
</a>
</div>
</div>
</div>

<section class="content">
<div class="container-fluid">
<div class="form-horizontal">
<div class="cards-group">
@await
Component.InvokeAsync(typeof(AdminWidgetViewComponent), new { widgetZone =
AdminWidgetZones.SalesBillListButtons, additionalData = Model })
<div class="card card-default card-search">
<div class="card-body">
<div class="row search-row" data-
hideAttribute="@hideSearchBlockAttributeName">
<div class="search-
text">@T("Admin.Common.Search")</div>
<div class="icon-search"><i class="fas
fa-search" aria-hidden="true"></i></div>
<div class="icon-collapse"><i class="far
fa-angle-@(!hideSearchBlock ? "up" : "down")" aria-hidden="true"></i></div>
</div>
<div class="search-body closed">
<div class="card-body">
<div class="row">
<div class="col-md-4">
<div class="form-group
row">
<div class="col-
md-4">
<nop-label
asp-for="FromDate" />
</div>
<div class="col-
md-8">
<nop-editor
asp-for="FromDate" />
</div>
</div>
</div>
<div class="col-md-4">
<div class="form-group
row">
<div class="col-
md-4">
<nop-label
asp-for="ToDate" />
</div>
<div class="col-
md-8">
<nop-editor
asp-for="ToDate" />
</div>
</div>
</div>
<div class="col-md-4">
<div class="form-group
row">
<div class="col-
md-4">
<nop-label
asp-for="VendorId" />
</div>
<div class="col-
md-8">
<select
class="receiptdropdown" asp-for="VendorId"
asp-items="Model.AvailableVendor"></select>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4">
<div class="form-group
row">
<div class="col-
md-4">
<nop-label
asp-for="OrderById" />
</div>
<div class="col-
md-8">
<select
class="receiptdropdown" asp-for="OrderById" asp-items="Model.AvailableOrderBy">

<option value="">Select</option> <!-- Optionally add a default option -->


</select>
<span asp-
validation-for="OrderById" class="text-danger"></span> <!-- Validation message -->
</div>
</div>
</div>
<div class="col-md-4">
<div class="form-group
row">
<div class="col-
md-4">
<nop-label
asp-for="FiscalYearId" />
</div>
<div class="col-
md-8">
<select
class="receiptdropdown" asp-for="FiscalYearId" asp-
items="Model.AvailableFiscalYears">

<option value="">Select</option> <!-- Optionally add a default option -->


</select>
<span asp-
validation-for="FiscalYearId" class="text-danger"></span> <!-- Validation message
-->
</div>
</div>
</div>
</div>
<div class="row">
<div class="text-center col-
12">
<button type="button"
id="search-ledger" class="btn btn-primary btn-search">
<i class="fas fa-
search"></i> @T("Admin.Common.Search")
</button>
</div>
</div>
</div>
</div>
</div>
</div>
<style>
.dataTables_scrollHeads {
overflow-x: auto;
}

.dataTables_scrollHeadInners {
width: 100%;
}

.light-ash-bg {
background-color: #f2f2f2;
}
</style>
<div class="card card-default">
<div class="card-body">
<div class="dataTables_scrollHeads">
<div class="dataTables_scrollHeadInners">
@{
// Extract distinct, non-
null, and non-empty company names
var distinctCompanies =
Model.VendorItems?
.Where(v => !
string.IsNullOrWhiteSpace(v.Company))
.Select(v =>
v.Company.Trim())
.Distinct(StringComparer.Ordi
nalIgnoreCase)
.OrderBy(c => c) // Optional:
Order alphabetically
.ToList() ?? new
List<string>();
}

<table class="table-bordered
stockJournalTableForReportalign-font table-borderedspace" id="ledgerReport-grid">
<thead>
<tr class="text-center">
<th class="light-
ash-bg">@T("Ledger.Id")</th>
<th class="light-
ash-bg">@T("Admin.VendorName")</th>
@foreach (var
company in distinctCompanies)
{
<th
class="light-ash-bg" colspan="4">@company</th>
}
<th class="light-
ash-bg">@T("Ledger.ClosingBalance")</th>
</tr>
<tr class="text-center">
<th class="light-
ash-bg"></th>
<th class="light-
ash-bg"></th>
@foreach (var
company in distinctCompanies)
{
<th
class="light-ash-bg">@T("Admin.InvoiceNumber")</th>
<th
class="light-ash-bg">@T("Admin.Date")</th>
<th
class="light-ash-bg">@T("Admin.Amount")</th>
<th
class="light-ash-bg">@T("Admin.Age")</th>
}
<th class="light-
ash-bg"></th>
</tr>
</thead>
<tbody>
@if (Model.VendorItems !
= null && Model.VendorItems.Any())
{
for (int i = 0; i
< Model.VendorItems.Count; i++)
{
var item =
Model.VendorItems[i];

// Determine
the company name, replacing null or empty with "Unknown"
var
itemCompany = string.IsNullOrWhiteSpace(item.Company) ? "Unknown" :
item.Company.Trim();

<tr>
<td
class="vendorOutstandingId">@(i + 1)</td>

<!--
Vendor Name -->
<td
class="vendorOutstandingVendorName>@item.VendorName</td>

<!--
Company-Specific Columns -->

@foreach (var company in distinctCompanies)


{

if (string.Equals(itemCompany, company, StringComparison.OrdinalIgnoreCase))

<td class="vendorOutstandingInvoiceNumber">@item.InvoiceNumber</td>

<td class="vendorOutstandingInvoiceNumber">@item.Date</td>

<td class="vendorOutstandingAmount">@item.Amount</td>

<td class="vendorOutstandingInvoiceNumber">@item.Age</td>

else

<!-- Empty cells for other companies -->

<td class="vendorOutstandingInvoiceNumber">&nbsp;</td>

<td class="vendorOutstandingInvoiceNumber">&nbsp;</td>

<td class="vendorOutstandingAmount">&nbsp;</td>

<td class="vendorOutstandingInvoiceNumber">&nbsp;</td>
}
}

<!--
Closing Balance -->

<td class="vendorOutstandingAllAmount">@item.Amount</td>
</tr>
}
}
else
{
<tr>
<!-- Adjust
colspan based on dynamic number of companies -->
<td
colspan="@(2 + distinctCompanies.Count * 4 + 1)" class="text-center">No records
found.</td>
</tr>
}
</tbody>

</table>
</<div>

</div>
<div class="text-right">
<span id="closing-statement"></span>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<script>
document.getElementById('download-excel').addEventListener('click', function
() {
var fromDate = document.querySelector('[name="FromDate"]').value;
var toDate = document.querySelector('[name="ToDate"]').value;
var vendorId = document.querySelector('[name="VendorId"]').value;
var url = '@Url.Action("DownloadExcelForVendorReportWithTrident",
"Purchase")' + '?fromDate=' + fromDate + '&toDate=' + toDate + '&vendorId=' +
vendorId;
window.location.href = url;
});

document.getElementById('download-csv').addEventListener('click', function ()
{
var fromDate = document.querySelector('[name="FromDate"]').value;
var toDate = document.querySelector('[name="ToDate"]').value;
var vendorId = document.querySelector('[name="VendorId"]').value;
var url = '@Url.Action("DownloadCsvForVendorReportWithTrident",
"Purchase")' + '?fromDate=' + fromDate + '&toDate=' + toDate + '&vendorId=' +
vendorId;
window.location.href = url;
});
$(document).ready(function () {
function calculateLedgerSums() {
var sumEasan = 0;
var sumSangili = 0;
var sumTrident = 0;
var closingBalance = 0;

$('#ledgerReport-grid tbody tr').each(function () {


// Get Easan and Sangili amounts (5th and 9th columns
respectively, zero-indexed)
var easanAmount = parseFloat($
(this).find('td:eq(4)').text()) || 0;
var sangiliAmount = parseFloat($
(this).find('td:eq(8)').text()) || 0;
var tridentAmount = parseFloat($
(this).find('td:eq(12)').text()) || 0;
var rowClosingBalance = parseFloat($
(this).find('td:eq(14)').text()) || 0; // Closing Balance column

sumEasan += easanAmount;
sumSangili += sangiliAmount;
sumTrident += tridentAmount;
closingBalance += rowClosingBalance;
});

// Append the closing statement to the table body


$('#ledgerReport-grid tbody').append(
'<tr>' +
'<td colspan="4" class="text-right"><strong>Closing
Statement:</strong></td>' +
'<td class="text-right"><strong>' + sumEasan.toFixed(2) +
'</strong></td>' +
'<td></td>' +
'<td></td>' +
'<td></td>' +
'<td class="text-right"><strong>' + sumSangili.toFixed(2) +
'</strong></td>' +
'<td></td>' +
'<td></td>' +
'<td></td>' +
'<td class="text-right"><strong>' + sumTrident.toFixed(2) +
'</strong></td>' +
'<td></td>' +
'<td class="text-right"><strong>' +
closingBalance.toFixed(2) + '</strong></td>' +
'</tr>'
);
}

calculateLedgerSums();
});

$(document).ready(function () {
$('#search-ledger').on('click', function () {
var fromDate = $('[name="FromDate"]').val();
var toDate = $('[name="ToDate"]').val();
var vendorId = $('[name="VendorId"]').val(); // Change to
VendorId as per your dropdown
var orderById = $('[name="OrderById"]').val(); // Ensure the name
matches the select's name
var fiscalYearId = $('[name="FiscalYearId"]').val(); // Retrieve
FiscalYearId

// Construct the URL with query parameters


var url = '@Url.Action("VendorOutstandingReport", "Purchase")';
var params = [];

// Add parameters only if they have a value


if (fromDate) params.push('FromDate=' +
encodeURIComponent(fromDate));
if (toDate) params.push('ToDate=' + encodeURIComponent(toDate));
if (vendorId) params.push('VendorId=' +
encodeURIComponent(vendorId)); // Include VendorId
if (orderById) params.push('OrderById=' +
encodeURIComponent(orderById)); // Include OrderById
if (fiscalYearId) params.push('FiscalYearId=' +
encodeURIComponent(fiscalYearId)); // Include FiscalYearId

// Append parameters to URL


if (params.length > 0) {
url += '?' + params.join('&');
}

// Redirect to the URL


window.location.href = url;
});
});
</script>

You might also like