Vendor Report
Vendor Report
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")
<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">
.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 -->
<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
<td class="vendorOutstandingInvoiceNumber"> </td>
<td class="vendorOutstandingInvoiceNumber"> </td>
<td class="vendorOutstandingAmount"> </td>
<td class="vendorOutstandingInvoiceNumber"> </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;
sumEasan += easanAmount;
sumSangili += sangiliAmount;
sumTrident += tridentAmount;
closingBalance += rowClosingBalance;
});
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