Browse Source

pdf

feature/19315_Customer-Registration-new
Dinesh 10 months ago
parent
commit
4685fc7daf
  1. 3
      CustomerOnlineV2/CustomerOnlineV2.Api/CustomerOnlineV2.Api.csproj
  2. 6
      CustomerOnlineV2/CustomerOnlineV2.Business/CustomerOnlineV2.Business.csproj
  3. 3
      CustomerOnlineV2/CustomerOnlineV2.Common/CustomerOnlineV2.Common.csproj
  4. 3
      CustomerOnlineV2/CustomerOnlineV2.Repository/CustomerOnlineV2.Repository.csproj
  5. 182
      CustomerOnlineV2/CustomerOnlineV2/Controllers/ReportController.cs
  6. 1
      CustomerOnlineV2/CustomerOnlineV2/CustomerOnlineV2.csproj
  7. 145
      CustomerOnlineV2/CustomerOnlineV2/Views/Report/GeneratePdf.cshtml
  8. 185
      CustomerOnlineV2/CustomerOnlineV2/Views/TransactionReport/TranReport.cshtml

3
CustomerOnlineV2/CustomerOnlineV2.Api/CustomerOnlineV2.Api.csproj

@ -7,8 +7,11 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DinkToPdf" Version="1.0.8" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="Select.HtmlToPdf.NetCore" Version="23.2.0-rc2" />
<PackageReference Include="WkHtmlToPdf" Version="1.0.2" />
</ItemGroup>
<ItemGroup>

6
CustomerOnlineV2/CustomerOnlineV2.Business/CustomerOnlineV2.Business.csproj

@ -6,6 +6,12 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DinkToPdf" Version="1.0.8" />
<PackageReference Include="Select.HtmlToPdf.NetCore" Version="23.2.0-rc2" />
<PackageReference Include="WkHtmlToPdf" Version="1.0.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CustomerOnlineV2.Api\CustomerOnlineV2.Api.csproj" />
<ProjectReference Include="..\CustomerOnlineV2.Common\CustomerOnlineV2.Common.csproj" />

3
CustomerOnlineV2/CustomerOnlineV2.Common/CustomerOnlineV2.Common.csproj

@ -7,9 +7,12 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="DinkToPdf" Version="1.0.8" />
<PackageReference Include="Microsoft.AspNet.Mvc" Version="5.2.9" />
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
<PackageReference Include="Select.HtmlToPdf.NetCore" Version="23.2.0-rc2" />
<PackageReference Include="WkHtmlToPdf" Version="1.0.2" />
</ItemGroup>
</Project>

3
CustomerOnlineV2/CustomerOnlineV2.Repository/CustomerOnlineV2.Repository.csproj

@ -11,10 +11,13 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="DinkToPdf" Version="1.0.8" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="5.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="7.0.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NPoco" Version="5.7.1" />
<PackageReference Include="Select.HtmlToPdf.NetCore" Version="23.2.0-rc2" />
<PackageReference Include="WkHtmlToPdf" Version="1.0.2" />
</ItemGroup>
<ItemGroup>

182
CustomerOnlineV2/CustomerOnlineV2/Controllers/ReportController.cs

@ -0,0 +1,182 @@
using CustomerOnlineV2.Business.Business.TransactionBusiness;
using CustomerOnlineV2.Common.Models.HomeModel;
using CustomerOnlineV2.Common.Helper;
using DinkToPdf;
using DinkToPdf.Contracts;
using Microsoft.AspNetCore.Mvc;
using System.Reflection;
using System.Text;
//using DinkToPdf.PdfTools.Load;
using System.Formats.Asn1;
using CustomerOnlineV2.Authorization;
using static Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary;
using CustomerOnlineV2.Repository.ConnectionHelper;
using SelectPdf;
using System.Diagnostics;
namespace CustomerOnlineV2.Controllers
{
public class ReportController : Controller
{
private readonly ITransactionBusiness _transactionBusiness;
public ReportController(ITransactionBusiness transactionBusiness)
{
_transactionBusiness = transactionBusiness;
}
//private readonly IConverter _converter = new SynchronizedConverter(new PdfTools());
//private byte[] GeneratePdfBytes(string htmlContent)
//{
// var globalSettings = new GlobalSettings
// {
// PaperSize = PaperKind.A4,
// Orientation = Orientation.Portrait,
// Margins = new MarginSettings { Top = 10, Bottom = 10, Left = 10, Right = 10 },
// };
// var objectSettings = new ObjectSettings
// {
// PagesCount = true,
// HtmlContent = htmlContent,
// };
// var pdf = new HtmlToPdfDocument()
// {
// GlobalSettings = globalSettings,
// Objects = { objectSettings }
// };
// if (_converter != null)
// {
// return _converter.Convert(pdf);
// }
// else
// {
// // Handle the case where _converter is null
// throw new InvalidOperationException("_converter is not properly initialized.");
// }
//}
// [HttpGet("generate-pdf")]
//[HttpPost]
public IActionResult GeneratePdf(CustomerTransaction customerTransaction)
{
var loginDetails = HttpContext.GetLoginDetails();
var r = _transactionBusiness.GetTransactionReportList(loginDetails, customerTransaction);
if (r?.Result?.CustomerTransaction == null)
{
return NotFound("Transaction Not Found");
}
StringBuilder htmlContent = new StringBuilder();
var imageUrl = "data:image/png;base64," + Convert.ToBase64String(System.IO.File.ReadAllBytes("wwwroot/images/logo.png"));
htmlContent.AppendLine("<html><head><style> .header {overflow: auto;}" +
".img {float: left; width: 250px; height: 150px;}" +
" .parag {text-align: justify;} " +
"</style></head> <body> " +
" <div class='header'>" +
$"<img class='img' src='{imageUrl}' />" +
"<div class=\"parag\"><p><b> IME is the trading name of Subhida UK Ltd company.</b>" +
"<br /> Registration No.: 6432399" +
"<br />FCA Registration No.: 576127" +
"<br />HMRC Registration No.: 12663526" +
"<br /> Registered Address : Pentax House South Hill Avenue, South Harrow," +
"<br />London, HA2 0DU" +
"<br />Email:info@imelondon.co.uk</p> </div></div>" +
"<h1>Transaction List</h1>");
htmlContent.AppendLine("<table border='1'><thead><tr>" +
"<th>S.N</th>" +
"<th>Receiver Name</th>" +
"<th>Send Date</th>" +
"<th>Tran Id</th>" +
"<th>Control No</th>" +
"<th>Delivery Method</th>" +
"<th>Status</th>" +
"<th>Transfer Amount</th>" +
"<th>Receive Amount</th>" +
"</tr></thead><tbody>");
int sn = 1;
decimal totalPayoutAmt = 0;
foreach (var transa in r.Result.CustomerTransaction)
{
if (decimal.TryParse(transa.PayoutAmt, out decimal payoutAmtDecimal))
{
totalPayoutAmt += payoutAmtDecimal;
}
htmlContent.AppendLine(
$"<tr>" +
$"<td>{sn}</td>" +
$"<td>{transa.Id}</td>" +
$"<td>{transa.SendDate}</td>" +
$"<td>{transa.TranId}</td>" +
$"<td>{transa.ControlNo}</td>" +
$"<td>{transa.PayoutMode}</td>" +
$"<td>{transa.PayStatus}</td>" +
$"<td>{transa.CollAmt}</td>" +
$"<td>{transa.PayoutAmt}</td>" +
$"</tr>");
sn++;
}
htmlContent.AppendLine(
$"<tr>" +
$"<td></td>" +
$"<td></td>" +
$"<td></td>" +
$"<td></td>" +
$"<td></td>" +
$"<td></td>" +
$"<td></td>" +
$"<td>Total:</td>" +
$"<td>{totalPayoutAmt}</td>" +
$"</tr>");
htmlContent.AppendLine("</tbody></table></body></html>");
var pdfBytes = GeneratePdf(htmlContent.ToString());
// Return the PDF as a file result
return File(pdfBytes, "application/pdf", "TransactionReport.pdf");
}
private byte[] GeneratePdf(string htmlContent)
{
var fileName = Path.GetTempFileName();
// Save the HTML content to a temporary file
System.IO.File.WriteAllText(fileName + ".html", htmlContent);
// Run the WkHtmlToPdf process
var process = new Process()
{
StartInfo = new ProcessStartInfo
{
FileName = @"C:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe", // Provide the full path here
Arguments = $"{fileName}.html {fileName}.pdf",
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true,
}
};
process.Start();
process.WaitForExit();
// Read the generated PDF into a byte array
var pdfBytes = System.IO.File.ReadAllBytes($"{fileName}.pdf");
// Cleanup temporary files
//System.IO.File.Delete($"{fileName}.html");
//System.IO.File.Delete($"{fileName}.pdf");
return pdfBytes;
}
}
}

1
CustomerOnlineV2/CustomerOnlineV2/CustomerOnlineV2.csproj

@ -11,6 +11,7 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="LibWkHtmlToX-32" Version="0.12.6.1" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="7.0.11" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="7.0.9" />
<PackageReference Include="Serilog" Version="3.0.1" />

145
CustomerOnlineV2/CustomerOnlineV2/Views/Report/GeneratePdf.cshtml

@ -0,0 +1,145 @@

@{
ViewData["Title"] = "Transaction Report";
}
<a href="/Report/GeneratePdf" target="_blank">Download Transaction Report</a>
@* <!DOCTYPE html>
<html>
<head>
<style>
.header {
overflow: auto;
}
.img {
float: left;
width: 250px;
height: 150px;
}
.parag {
text-align: justify;
}
/* .tab, .trr {
border: 1px solid black;
} */
</style>
</head>
<body>
<br />
<div class="header"><img class="img" src="/images/logo.png" />
<div class="parag">
<p>
<b> IME is the trading name of Subhida UK Ltd company.</b><br />
Registration No.: 6432399<br />
FCA Registration No.: 576127<br />
HMRC Registration No.: 12663526<br />
Registered Address : Pentax House South Hill Avenue, South Harrow,<br />
London, HA2 0DU<br />
Email:info@imelondon.co.uk
</p>
</div>
</div>
@* <div class="px-4">
<div class="col-lg-12">
<h5 class="mb-4"> Remitter Transactions Report </h5>
</div>
<h5 class="mb-4">
Remitter Details
</h5>
<table class="table">
<tr>
<td>Member Id :</td>
<td>
<strong><span id="rName"></span></strong>
</td>
</tr>
<tr>
<td>Name :</td>
<td>
<strong><span id="mNumber"></span></strong>
</td>
</tr>
<tr>
<td>Address :</td>
<td>
<strong><span id="country"></span></strong>
</td>
</tr>
<tr>
<td>Telephone :</td>
<td>
<strong><span id="pmode"></span></strong>
</td>
</tr>
<tr>
<td> Date Of Birth :</td>
<td>
<strong><span id="bname"></span></strong>
</td>
</tr>
<tr>
<td> Nationality :</td>
<td>
<strong><span id="acountNumber"></span></strong>
</td>
</tr>
<tr>
<td> ID Details :</td>
<td>
<strong><span id="Branch"></span></strong>
</td>
</tr>
<tr>
<td>Date Of Issue :</td>
<td>
<strong><span id="relationship"></span></strong>
</td>
</tr>
</table>
</div> *@
@* <h5 class="mb-4">
Transactions
</h5>
{{table}}
<script>
$(document).ready(function () {
downloadPdf();
});
function downloadPdf() {
$.ajax({
type: "POST",
url: "/Report/GeneratePdf",
data: JSON.stringify(yourData), // Pass any necessary data to the server
contentType: "application/json; charset=utf-8",
success: function (data) {
// Create a Blob from the PDF data and create a download link
var blob = new Blob([data], { type: "application/pdf" });
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "TransactionReport.pdf";
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
},
error: function (error) {
console.error("Error generating PDF: ", error);
}
});
}
</script>
</body>
</html>
*@

185
CustomerOnlineV2/CustomerOnlineV2/Views/TransactionReport/TranReport.cshtml

@ -34,21 +34,24 @@
<div class="text-left">
<h3 class="text-5 fw-400 d-flex align-items-center px-4 mb-4">Transactions Report</h3>
<form >
<form>
<label for="fromDate">From Date:</label>
<input type="date" id="fromDate" name="fromDate">
<label for="toDate">To Date:</label>
<input type="date" id="toDate" name="toDate">
<button type="button" onclick="GetTransactionList()">Search</button>
</form>
<button type="button" onclick="downloadPdf()"><i class="fas fa-print"></i> Print</button>
@* <p class="text-success text-7 lh-1"> <a class="text-3 d-inline-block btn-link mt-4" href="/TransactionReport/PrintPDF"><i class="fas fa-print"></i> Print</a></p> *@
@* <p class="text-success text-7 lh-1" style=" display: inline;"> <a class="text-3 d-inline-block btn-link mt-4" href="/Report/GeneratePdf"><i class="fas fa-print"></i> Print</a></p> *@
</form>
</div>
<br />
<!-- Title
=============================== -->
@ -61,10 +64,10 @@
<div class="col-5 col-sm-1" style="color:white">Transfer Amount</div>
<div class="col-6 col-sm-1" style="color:white">Recieve Amount</div>
<div class="col-7 col-sm-1" style="color:white">Delivery Method</div>
<div class="col-8 col-sm-2 text-center" style="color:white">Transaction Detail View</div>
@* <div class="col-7 col-sm-1 text-end">Total Transfer Amount</div> *@
@* <div class="col-7 col-sm-1 text-end">Total Transfer Amount</div> *@
</div>
</div>
<!-- Title End -->
@ -83,11 +86,11 @@
<div class="col-7 col-sm-1" id="PayoutMode"></div>
<div class="col-8 col-sm-2 text-center"> <span class="d-block text-1" id="tranId"><a><i class="fa fa-eye" style="font-size:30px"></i></a></span></div>
@* <div class="col-8 col-sm-2"> <span class="d-block text-1" id="tranId"><a href="/Transaction/ReceiptTran"><i class="fa fa-eye" style="font-size:30px"></i></a></span></div> *@
@* <div class="col-11 col-sm-1" id="SendDate"></div> *@
@* <div class="col-13 col-sm-1" id="recCountry"></div> *@
@* <div class="col-4 col-sm-2 text-end" id="tranType"> <span class="text-nowrap"></span></div> *@
@* <div class="col-11 col-sm-1" id="SendDate"></div> *@
@* <div class="col-13 col-sm-1" id="recCountry"></div> *@
@* <div class="col-4 col-sm-2 text-end" id="tranType"> <span class="text-nowrap"></span></div> *@
</div>
</div>
</div>
@ -160,7 +163,7 @@
<script src="vendor/bootstrap-select/js/bootstrap-select.min.js"></script>
<script src="vendor/owl.carousel/owl.carousel.min.js"></script>
<!-- custom -->
</body>
</html>
@ -174,7 +177,7 @@
}
});
function GetTransactionList() {
$.ajax(
{
type: 'POST',
@ -182,7 +185,7 @@
data: {
FromDate: $("#fromDate").val(),
ToDate: $("#toDate").val(),
},
processData: true,
headers: {
@ -204,7 +207,7 @@
}
function PopulateTransactionReportData(response) {
var result = response.customerTransaction;
//console.log('Received response:', result);
@ -215,80 +218,82 @@
let i = 1;
$.each(result, function (i, d) {
var row = `
<div class="transaction-item px-4 py-2" data-bs-toggle="modal" data-bs-target="#transaction-detail">
<div class="row align-items-center flex-row">
<div class="col-1 col-sm-1" >${i+1}</div>
<div class="col-2 col-sm-2" id="paidDate">${d.sendDate}</div>
<div class="col-3 col-sm-2" id="Rname">${d.id}</div>
<div class="col-4 col-sm-2" id="controlNo">${d.controlNo}</div>
<div class="col-5 col-sm-1" id="collAmt">${d.collAmt}</div>
<div class="col-6 col-sm-1" id="PayoutAmt">${d.payoutAmt}</div>
<div class="col-7 col-sm-1" id="PayoutMode">${d.payoutMode}</div>
<div class="col-8 col-sm-2 text-center" id="tranId"><a href="/Transaction/Receipt?id=${d.tranId}" id="tranId" target="_blank"><i class="fa fa-eye" style="font-size:30px"></i></a></div>
</div>
</div>`;
<div class="transaction-item px-4 py-2" data-bs-toggle="modal" data-bs-target="#transaction-detail">
<div class="row align-items-center flex-row">
<div class="col-1 col-sm-1" >${i + 1}</div>
<div class="col-2 col-sm-2" id="paidDate">${d.sendDate}</div>
<div class="col-3 col-sm-2" id="Rname">${d.id}</div>
<div class="col-4 col-sm-2" id="controlNo">${d.controlNo}</div>
<div class="col-5 col-sm-1" id="collAmt">${d.collAmt}</div>
<div class="col-6 col-sm-1" id="PayoutAmt">${d.payoutAmt}</div>
<div class="col-7 col-sm-1" id="PayoutMode">${d.payoutMode}</div>
<div class="col-8 col-sm-2 text-center" id="tranId"><a href="/Transaction/Receipt?id=${d.tranId}" id="tranId" target="_blank"><i class="fa fa-eye" style="font-size:30px"></i></a></div>
</div>
</div>`;
transactionList.append(row);
});
}
}
// <div class="col-8 col-sm-2" id = "tranId" > <a href="/Transaction/ReceiptTran" > <i class="fa fa-eye" style = "font-size:30px" > </i></a > </div>
// function PopulateTransactionReportData(response) {
// ;
// var result = response.customerTransaction;
// if (response.responseCode == 0) {
// let row = '';
// $.each(result, function (i, d) {
// // row += '<div class="transaction-item px-4 py-3" data-bs-toggle="modal" data-bs-target="#receiver-detail" onclick="getReceiverDetails(' + d['id'] + ')">';
// // row += '<div class="row align-items-center flex-row">';
// // row += '<div class="col-1 col-sm-4"><span class="d-block text-1">' + d['name'] + '</span> <span class="text-muted">' + d['mobile'] + '</span></div>';
// // row += '<div class="col-2 col-sm-2"><span class="d-block text-1"><a href="/Transaction/SendMoney">Send Transaction</a></span></div>';
// // row += '<div class="col-3 col-sm-2 d-none d-sm-block text-center text-1">' + d['country'] + '</div>';
// // row += '<div class="col-4 col-sm-2 text-end text-1"> <span class="text-nowrap">' + d['transactionType'] + '</span></div>';
// // row += '<div class="col-5 col-sm-2"><button class="btn btn-primary" onclick="editReceiver(' + d['id'] + ')">Edit</button></div>';
// // row += '</div>';
// // row += '</div>';
// row += '<div class="transaction-item px-4 py-3" data-bs-toggle="modal">';
// // row += '<div class="row align-items-center flex-row">';
// //row += '<div class="col-2 col-sm-4">';
// row += d['sendDate'];
// row += '</div>';
// row += d['id'];
// row += '</div>';
// row += d['controlNo'];
// row += '</div>';
// row += d['collAmt'];
// row += '</div>';
// row += d['PayoutAmt'];
// row += '</div>';
// row += d['PCurr'];
// row += '</div>';
// row += d['CollCurr'];
// row += '</div>';
// row += d['PayStatus'];
// row += '</div>';
// row += d['PayoutMode'];
// row += '</div>';
// row += d['SendDate'];
// row += '</div>';
// row += '</div>';
// row += '</div>';
// row += '</div>';
// });
// $('#GetTransactionList').html(row);
// // $('#receiverListDiv').hide();
// }
// }
</script>
// <div class="col-8 col-sm-2" id = "tranId" > <a href="/Transaction/ReceiptTran" > <i class="fa fa-eye" style = "font-size:30px" > </i></a > </div>
// function PopulateTransactionReportData(response) {
// ;
// var result = response.customerTransaction;
// if (response.responseCode == 0) {
// let row = '';
// $.each(result, function (i, d) {
// // row += '<div class="transaction-item px-4 py-3" data-bs-toggle="modal" data-bs-target="#receiver-detail" onclick="getReceiverDetails(' + d['id'] + ')">';
// // row += '<div class="row align-items-center flex-row">';
// // row += '<div class="col-1 col-sm-4"><span class="d-block text-1">' + d['name'] + '</span> <span class="text-muted">' + d['mobile'] + '</span></div>';
// // row += '<div class="col-2 col-sm-2"><span class="d-block text-1"><a href="/Transaction/SendMoney">Send Transaction</a></span></div>';
// // row += '<div class="col-3 col-sm-2 d-none d-sm-block text-center text-1">' + d['country'] + '</div>';
// // row += '<div class="col-4 col-sm-2 text-end text-1"> <span class="text-nowrap">' + d['transactionType'] + '</span></div>';
// // row += '<div class="col-5 col-sm-2"><button class="btn btn-primary" onclick="editReceiver(' + d['id'] + ')">Edit</button></div>';
// // row += '</div>';
// // row += '</div>';
// row += '<div class="transaction-item px-4 py-3" data-bs-toggle="modal">';
// // row += '<div class="row align-items-center flex-row">';
// //row += '<div class="col-2 col-sm-4">';
// row += d['sendDate'];
// row += '</div>';
// row += d['id'];
// row += '</div>';
// row += d['controlNo'];
// row += '</div>';
// row += d['collAmt'];
// row += '</div>';
// row += d['PayoutAmt'];
// row += '</div>';
// row += d['PCurr'];
// row += '</div>';
// row += d['CollCurr'];
// row += '</div>';
// row += d['PayStatus'];
// row += '</div>';
// row += d['PayoutMode'];
// row += '</div>';
// row += d['SendDate'];
// row += '</div>';
// row += '</div>';
// row += '</div>';
// row += '</div>';
// });
// $('#GetTransactionList').html(row);
// // $('#receiverListDiv').hide();
// }
// }
function downloadPdf() {
window.location.href = '/Report/GeneratePdf';
}
</script>
}
Loading…
Cancel
Save