Browse Source

merge

feature/19315_Customer-Registration
shakun 12 months ago
parent
commit
df141bd158
  1. 35
      CustomerOnlineV2/CustomerOnlineV2.Business/Business/DocumentBusiness/DocumentBusiness.cs
  2. 11
      CustomerOnlineV2/CustomerOnlineV2.Business/Business/DocumentBusiness/IDocumentBusiness.cs
  3. 6
      CustomerOnlineV2/CustomerOnlineV2.Business/Business/TransactionBusiness/ITransactionBusiness.cs
  4. 9
      CustomerOnlineV2/CustomerOnlineV2.Business/Business/TransactionBusiness/TransactionBusiness.cs
  5. 23
      CustomerOnlineV2/CustomerOnlineV2.Common/Models/DocumentModel/CustomerDocumentModel.cs
  6. 1
      CustomerOnlineV2/CustomerOnlineV2.Repository/Repository/AccountRepository/AccountRepository.cs
  7. 90
      CustomerOnlineV2/CustomerOnlineV2.Repository/Repository/DocumentRepository/DocumentRepository.cs
  8. 10
      CustomerOnlineV2/CustomerOnlineV2.Repository/Repository/DocumentRepository/IDocumentRepository.cs
  9. 5
      CustomerOnlineV2/CustomerOnlineV2.Repository/Repository/TransactionRepository/ITransactionRepository.cs
  10. 50
      CustomerOnlineV2/CustomerOnlineV2.Repository/Repository/TransactionRepository/TransactionRepository.cs
  11. 16
      CustomerOnlineV2/CustomerOnlineV2/Controllers/CustomerController.cs
  12. 149
      CustomerOnlineV2/CustomerOnlineV2/Controllers/CustomerDocumentController.cs
  13. 434
      CustomerOnlineV2/CustomerOnlineV2/Views/Customer/CustomerProfile.cshtml
  14. 382
      CustomerOnlineV2/CustomerOnlineV2/Views/Customer/CustomerRegistration.cshtml
  15. 407
      CustomerOnlineV2/CustomerOnlineV2/Views/CustomerDocument/CustomerDocument.cshtml
  16. 2
      CustomerOnlineV2/CustomerOnlineV2/Views/Shared/_Layout.cshtml
  17. 3
      CustomerOnlineV2/CustomerOnlineV2/Views/Transaction/Payment.cshtml
  18. 72
      CustomerOnlineV2/CustomerOnlineV2/Views/Transaction/Success.cshtml
  19. 13
      CustomerOnlineV2/CustomerOnlineV2/Views/Transaction/TranPaySuccess.cshtml
  20. BIN
      CustomerOnlineV2/CustomerOnlineV2/wwwroot/images/loading.gif

35
CustomerOnlineV2/CustomerOnlineV2.Business/Business/DocumentBusiness/DocumentBusiness.cs

@ -0,0 +1,35 @@
using CustomerOnlineV2.Common.Models.DocumentModel;
using CustomerOnlineV2.Repository.Repository.DocumentRepository;
using CustomerOnlineV2.Repository.Repository.ReceiverRepository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace CustomerOnlineV2.Business.Business.DocumentBusiness
{
public class DocumentBusiness : IDocumentBusiness
{
private readonly IDocumentRepository _docRepository;
public DocumentBusiness(IDocumentRepository docRepository)
{
_docRepository = docRepository;
}
public string WebRootPath => throw new NotImplementedException();
public async Task<CustomerDocumentModel> Document(CustomerDocumentModel doc, string Id, string user)
{
var model1 = await _docRepository.GetDocument(doc, Id, user);
return model1;
}
}
}

11
CustomerOnlineV2/CustomerOnlineV2.Business/Business/DocumentBusiness/IDocumentBusiness.cs

@ -0,0 +1,11 @@
using CustomerOnlineV2.Common.Models.DocumentModel;
namespace CustomerOnlineV2.Business.Business.DocumentBusiness
{
public interface IDocumentBusiness
{
string WebRootPath { get; }
Task<CustomerDocumentModel> Document(CustomerDocumentModel doc, string userId, string userName);
}
}

6
CustomerOnlineV2/CustomerOnlineV2.Business/Business/TransactionBusiness/ITransactionBusiness.cs

@ -11,7 +11,9 @@ namespace CustomerOnlineV2.Business.Business.TransactionBusiness
Task<SendMoneyResponse> SendMoney(SendTransactionModel sendMoneyRequest, LoginResponse loginDetails);
Task<SendMoneySuccessModel> GetTransactionDetails(string id, LoginResponse loginDetails);
Task<TransactionDetailModel> GetReceiptData(string id, LoginResponse loginDetails);
Task<TrustPaymentRequest> saveTranData(TrustPaymentRequest tranData, LoginResponse loginDetails);
Task<CustomerTransactionList> GetTranData(LoginResponse loginDetails);
Task<SendMoneySuccessModel> SaveTranData(TrustPaymentRequest tranData, LoginResponse loginDetails);
Task<TrustPaymentRequest> UpdateTranData(TrustPaymentRequest tranData, LoginResponse loginDetails);
Task<CustomerTransactionList> GetTranData(LoginResponse loginDetails);
}
}

9
CustomerOnlineV2/CustomerOnlineV2.Business/Business/TransactionBusiness/TransactionBusiness.cs

@ -67,11 +67,16 @@ namespace CustomerOnlineV2.Business.Business.TransactionBusiness
return await _transactionRepo.GetReceiptData(id, loginDetails);
}
public async Task<TrustPaymentRequest> saveTranData(TrustPaymentRequest tranData, LoginResponse loginDetails)
public async Task<SendMoneySuccessModel> SaveTranData(TrustPaymentRequest tranData, LoginResponse loginDetails)
{
return await _transactionRepo.saveTranData(tranData, loginDetails);
return await _transactionRepo.SaveTranData(tranData, loginDetails);
}
public async Task<TrustPaymentRequest> UpdateTranData(TrustPaymentRequest tranData, LoginResponse loginDetails)
{
return await _transactionRepo.UpdateTranData(tranData, loginDetails);
}
private SendMoneyRequestModel GenerateSendMoneyParams(SendTransactionModel sendMoneyRequest, LoginResponse loginDetails)
{
return new SendMoneyRequestModel

23
CustomerOnlineV2/CustomerOnlineV2.Common/Models/DocumentModel/CustomerDocumentModel.cs

@ -0,0 +1,23 @@
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CustomerOnlineV2.Common.Models.DocumentModel
{
public class CustomerDocumentModel: CommonResponse
{
public string? cdid { get; set; }
public string? customerId { get; set; }
public string? fileName { get; set;}
public string? description { get; set; }
public string? fileType { get; set; }
public string? documentType { get; set; }
public string? user { get; set;}
public string? sessionId { get; set; }
public IFormFile? File { get; set; }
public object? FormFile { get; set; }
}
}

1
CustomerOnlineV2/CustomerOnlineV2.Repository/Repository/AccountRepository/AccountRepository.cs

@ -76,6 +76,7 @@ namespace CustomerOnlineV2.Repository.Repository.AccountRepository
var sql = "EXEC PROC_DYNAMIC_TABLE";
sql += " @Flag = " + _connHelper.FilterString("ForceChange");
sql += ",@UserEmail = " + _connHelper.FilterString(logindetails.UserName);
sql += ",@OldPassword = " + _connHelper.FilterString(model.OldPassword);
sql += ",@Password = " + _connHelper.FilterString(model.NewPassword);
sql += ",@ConfirmPassword = " + _connHelper.FilterString(model.ConfirmNewPassword);
sql += ",@ipAddress = " + _connHelper.FilterString(model.IpAddress);

90
CustomerOnlineV2/CustomerOnlineV2.Repository/Repository/DocumentRepository/DocumentRepository.cs

@ -0,0 +1,90 @@
using CustomerOnlineV2.Common.Models;
using CustomerOnlineV2.Common.Models.DocumentModel;
using CustomerOnlineV2.Repository.ConnectionHelper;
namespace CustomerOnlineV2.Repository.Repository.DocumentRepository
{
public class DocumentRepository : IDocumentRepository
{
private readonly IConnectionHelper _connHelper;
public DocumentRepository(IConnectionHelper connHelper)
{
_connHelper = connHelper;
}
//public void ExecuteStoredProcedure(string fileName)
//{
// // try
// // {
// // string sql = "exec proc_customerDocumentType";
// // if (cdId != "")
// // {
// // sql += " @flag ='u'";
// // }
// // else
// // {
// // sql += " @flag ='i'";
// // }
// // sql += ",@customerId =" + FilterString(customerId);
// // sql += ",@cdId =" + FilterString(cdId);
// // sql += ",@fileName =" + FilterString(fileName);
// // sql += ",@fileDescription =" + FilterString(fileDescription);
// // sql += ",@fileType =" + FilterString(fileType);
// // sql += ",@documentType =" + FilterString(documentType);
// // sql += ",@user =" + FilterString(user);
// // sql += ",@rowIdField =" + FilterString(sessionId);
// // }
// //catch (Exception ex)
// // {
// // ex.Message(w)
// // }
//}
public async Task<CustomerDocumentModel> GetDocument(CustomerDocumentModel doc, string id, string user)
{
try
{
var sql = "exec proc_customerDocumentType";
sql += " @flag = " + _connHelper.FilterString("i");
sql += ",@customerId =" + _connHelper.FilterString(id);
sql += ",@user = " + _connHelper.FilterString(user);
//sql += ",@cdId =" + _connHelper.FilterString(doc.cdid);
sql += ",@fileName =" + _connHelper.FilterString(doc.fileName);
sql += ",@fileDescription =" + _connHelper.FilterString(doc.description);
sql += ",@fileType =" + _connHelper.FilterString(doc.fileType);
sql += ",@documentType =" + _connHelper.FilterString(doc.documentType);
sql += ",@rowIdField =" + _connHelper.FilterString(doc.sessionId);
var dt = _connHelper.ExecuteDataTable(sql);
if (dt == null || dt.Rows.Count <= 0)
{
doc.ResponseCode = ResponseHelper.FAILED;
doc.ResponseMessage = "DB Null Error!";
}
else
{
doc.ResponseCode = ResponseHelper.SUCCESS;
doc.ResponseMessage = ResponseMessageHelper.SUCCESS;
}
}
catch (Exception ex)
{
doc.ResponseCode = ResponseHelper.EXCEPTION;
doc.ResponseMessage = "Exception occured: " + ex.Message;
}
return await Task.FromResult(doc);
}
}
}

10
CustomerOnlineV2/CustomerOnlineV2.Repository/Repository/DocumentRepository/IDocumentRepository.cs

@ -0,0 +1,10 @@
using CustomerOnlineV2.Common.Models.DocumentModel;
namespace CustomerOnlineV2.Repository.Repository.DocumentRepository
{
public interface IDocumentRepository
{
//void ExecuteStoredProcedure(string fileName);
Task<CustomerDocumentModel> GetDocument(CustomerDocumentModel doc, string? id, string? user);
}
}

5
CustomerOnlineV2/CustomerOnlineV2.Repository/Repository/TransactionRepository/ITransactionRepository.cs

@ -9,7 +9,8 @@ namespace CustomerOnlineV2.Repository.Repository.TransactionRepository
Task<ExratePayoutDetailsModel> GetPayoutDetails(SendTransactionModel calcRequest, LoginResponse loginDetails);
Task<SendMoneySuccessModel> GetTransactionDetails(string id, LoginResponse loginDetails);
Task<TransactionDetailModel> GetReceiptData(string id, LoginResponse loginDetails);
Task<TrustPaymentRequest> saveTranData(TrustPaymentRequest tranData, LoginResponse loginDetails);
Task<CustomerTransactionList> GetTranData(LoginResponse loginDetails);
Task<SendMoneySuccessModel> SaveTranData(TrustPaymentRequest tranData, LoginResponse loginDetails);
Task<TrustPaymentRequest> UpdateTranData(TrustPaymentRequest tranData, LoginResponse loginDetails);
Task<CustomerTransactionList> GetTranData(LoginResponse loginDetails);
}
}

50
CustomerOnlineV2/CustomerOnlineV2.Repository/Repository/TransactionRepository/TransactionRepository.cs

@ -92,9 +92,12 @@ namespace CustomerOnlineV2.Repository.Repository.TransactionRepository
_response.ControlNo = Convert.ToString(dt.Rows[0]["ControlNo"]);
_response.CollectAmount = Convert.ToString(dt.Rows[0]["camt"]);
_response.TransferAmount = Convert.ToString(dt.Rows[0]["tAmt"]);
_response.CollectCurrency = Convert.ToString(dt.Rows[0]["collCurr"]);
_response.ReceiverName = Convert.ToString(dt.Rows[0]["receivername"]);
_response.SenderName = Convert.ToString(dt.Rows[0]["SenderName"]);
_response.TransactionId = Convert.ToString(dt.Rows[0]["id"]);
_response.PCountry = Convert.ToString(dt.Rows[0]["pCountry"]);
}
}
catch (Exception ex)
@ -139,7 +142,7 @@ namespace CustomerOnlineV2.Repository.Repository.TransactionRepository
_response.RecFirstName = Convert.ToString(dt.Rows[0]["recFName"]);
_response.RecMiddleName = Convert.ToString(dt.Rows[0]["recMidName"]);
_response.RecLastName = Convert.ToString(dt.Rows[0]["recLName"]);
_response.ReceiverAddress = Convert.ToString(dt.Rows[0]["address"]);
_response.ReceiverAddress = Convert.ToString(dt.Rows[0]["raddress"]);
_response.DeliveryMethod = Convert.ToString(dt.Rows[0]["paymentMethod"]);
_response.BankName = Convert.ToString(dt.Rows[0]["pbankname"]);
_response.BankBranch = Convert.ToString(dt.Rows[0]["pbankBranchName"]);
@ -173,14 +176,52 @@ namespace CustomerOnlineV2.Repository.Repository.TransactionRepository
}
return await Task.FromResult(_response);
}
public async Task<SendMoneySuccessModel> SaveTranData(TrustPaymentRequest tranData, LoginResponse loginDetails)
{
SendMoneySuccessModel _response = new SendMoneySuccessModel();
try
{
var sql = "EXEC proc_trust_payment";
sql += " @Flag = " + _connHelper.FilterString("i-details");
sql += ",@UserEmail = " + _connHelper.FilterString(loginDetails.UserName);
sql += ",@refId = " + _connHelper.FilterString(Guid.NewGuid().ToString());
sql += ",@sitereference = " + _connHelper.FilterString(tranData.sitereference);
sql += ",@tranid = " + _connHelper.FilterString(tranData.tranId);
sql += ",@customerid = " + _connHelper.FilterString(loginDetails.UserId);
sql += ",@orderreference = " + _connHelper.FilterString(tranData.orderreference);
sql += ",@token = " + _connHelper.FilterString(tranData.token);
public async Task<TrustPaymentRequest> saveTranData(TrustPaymentRequest tranData, LoginResponse loginDetails)
_logger.LogDebug("TRANSACTIONREPOSITORY | SaveTranData | SQL | " + sql);
var dt = _connHelper.ExecuteDataTable(sql);
if (dt == null || dt.Rows.Count <= 0)
{
_response.ResponseCode = ResponseHelper.FAILED;
_response.ResponseMessage = "DB Null Error!";
_logger.LogError("TRANSACTIONREPOSITORY | SaveTranData | DB RESPONSE | " + JsonConvert.SerializeObject(_response));
}
else
{
}
}
catch (Exception ex)
{
_response.ResponseCode = ResponseHelper.EXCEPTION;
_response.ResponseMessage = "Exception occured: " + ex.Message;
_logger.LogError("saveTranData | EXCEPTION | " + ex.ToString());
}
return await Task.FromResult(_response);
}
public async Task<TrustPaymentRequest> UpdateTranData(TrustPaymentRequest tranData, LoginResponse loginDetails)
{
TrustPaymentRequest _response = new TrustPaymentRequest();
try
{
var sql = "EXEC PROC_DYNAMIC_TABLE";
sql += " @Flag = " + _connHelper.FilterString("save-trandetail");
var sql = "EXEC proc_trust_payment";
sql += " @Flag = " + _connHelper.FilterString("u-details");
sql += ",@UserEmail = " + _connHelper.FilterString(loginDetails.UserName);
sql += ",@id = " + _connHelper.FilterString(loginDetails.UserId);
sql += ",@refId = " + _connHelper.FilterString("");
@ -213,7 +254,6 @@ namespace CustomerOnlineV2.Repository.Repository.TransactionRepository
{
_response.ResponseCode = ResponseHelper.EXCEPTION;
_response.ResponseMessage = "Exception occured: " + ex.Message;
_logger.LogError("TRANSACTIONREPOSITORY | GETTRANSACTIONDETAILS | EXCEPTION | " + JsonConvert.SerializeObject(_response));
}
return await Task.FromResult(_response);

16
CustomerOnlineV2/CustomerOnlineV2/Controllers/CustomerController.cs

@ -2,7 +2,7 @@
using CustomerOnlineV2.Authorization;
using CustomerOnlineV2.Business.Business.RegisterBusiness;
using CustomerOnlineV2.Common.Models;
using CustomerOnlineV2.Common.Models.HomeModel;
using CustomerOnlineV2.Common.Helper;
using CustomerOnlineV2.Common.Models.ReceiverModel;
using CustomerOnlineV2.Common.Models.RegisterModel;
using CustomerOnlineV2.Common.Models.TransactionModel;
@ -10,7 +10,7 @@ using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Serilog.Context;
using CustomerOnlineV2.Common.Helper;
using CustomerOnlineV2.Common.Models.HomeModel;
namespace CustomerOnlineV2.Controllers
{
@ -79,7 +79,17 @@ namespace CustomerOnlineV2.Controllers
{
return View();
}
public IActionResult CustomerProfile()
{
return View();
}
[HttpGet]
[Route("Customer/GetCustomerDetail")]
public async Task<CustomerList> GetCustomerDetail()
{
var loginDetails = HttpContext.GetLoginDetails();
return await _registerBusiness.GetTranCustomerById(loginDetails);
}
[Authorization("Notifications")]
public IActionResult Notifications()
{

149
CustomerOnlineV2/CustomerOnlineV2/Controllers/CustomerDocumentController.cs

@ -0,0 +1,149 @@
using CustomerOnlineV2.Common.Models.DocumentModel;
using Microsoft.AspNetCore.Mvc;
using CustomerOnlineV2.Common.Helper;
using HttpPostAttribute = Microsoft.AspNetCore.Mvc.HttpPostAttribute;
using CustomerOnlineV2.Business.Business.DocumentBusiness;
using Microsoft.AspNetCore.Hosting;
using System.Reflection;
using CustomerOnlineV2.Authorization;
namespace CustomerOnlineV2.Controllers
{
public class CustomerDocumentController : Controller
{
private readonly IDocumentBusiness _business;
public CustomerDocumentController(IDocumentBusiness business)
{
_business = business;
}
public IActionResult CustomerDocument()
{
return View();
}
[HttpPost]
[Authorization("AddDocment")]
public async Task<CustomerDocumentModel> AddDocment(CustomerDocumentModel doc, string id, string user)
{
var loginDetails = HttpContext.GetLoginDetails();
//ReceiverInformationModel _response = new ReceiverInformationModel();
var Document = await _business.Document(doc, loginDetails.UserId, loginDetails.UserName);
//if (ModelState.IsValid)
//{
// string folder = null;
// if (doc.File != null)
// {
// if (doc.File.Length > 0)
// {
// Guid guid1 = Guid.NewGuid();
// folder = "/attachement/docs/" + guid1 + doc.File.FileName;
// string uploadFolder = Path.Combine(webHostEnvironment.WebRootPath, "attachement/docs");
// string uniqueFileName = guid1 + doc.File.FileName;
// string filePath = Path.Combine(uploadFolder, uniqueFileName);
// using (var stream = new FileStream(filePath, FileMode.Create))
// {
// await doc.FormFile.CopyToAsync(stream);
// }
// }
// }
//}
return Document;
}
//[HttpPost]
//[ValidateAntiForgeryToken]
//public async Task<IActionResult> AddDocment(CustomerDocumentModel doc)
//{
// if (doc.File != null)
// {
// //upload files to wwwroot
// var fileName = Path.GetFileName(doc.File.FileName);
// var filePath = Path.Combine(_business.WebRootPath, "images", fileName);
// using (var fileSteam = new FileStream(filePath, FileMode.Create))
// {
// await doc.File.CopyToAsync(fileSteam);
// }
// }
// return View();
//}
//public void ProcessRequest(HttpContext context)
//{
// context.Response.ContentType = "text/plain";
// string dirFullPath = HttpContext.Current.Server.MapPath("~/MediaUploader/");
// string[] files;
// int numFiles;
// files = System.IO.Directory.GetFiles(dirFullPath);
// numFiles = files.Length;
// numFiles = numFiles + 1;
// string str_image = "";
// foreach (string s in context.Request.Files)
// {
// HttpPostedFile file = context.Request.Files[s];
// string fileName = file.FileName;
// string fileExtension = file.ContentType;
// if (!string.IsNullOrEmpty(fileName))
// {
// fileExtension = Path.GetExtension(fileName);
// str_image = "MyPHOTO_" + numFiles.ToString() + fileExtension;
// string pathToSave = HttpContext.Current.Server.MapPath("~/MediaUploader/") + str_image;
// System.Drawing.Bitmap bmpPostedImage = new System.Drawing.Bitmap(file.InputStream);
// //ResizeMyImage method call
// System.Drawing.Image objImage = ResizeMyImage(bmpPostedImage, 200);
// objImage.Save(pathToSave, System.Drawing.Imaging.ImageFormat.Jpeg);
// }
// }
// context.Response.Write(str_image);
//}
//public async Task <IActionResult> Upload(CustomerDocumentModel model)
//{
// var loginDetails = HttpContext.GetLoginDetails();
// //ReceiverInformationModel _response = new ReceiverInformationModel();
// var receiver1 = await _receiverBusiness.Receivers(receiver, loginDetails.UserId, loginDetails.UserName);
// return receiver1;
// //////ar result = dbresult.Extra.Split('|');
// //var customerId = result[0];
// //var membershipId = result[1];
// //var registerDate = result[2];
// //var loginDetails = HttpContext.GetLoginDetails();
// //if (model.File != null && model.File.Length > 0)
// //{
// // var fileName = model.File.FileName;
// // var documentType = model.File.ContentType;
// // ///var
// // _repository.ExecuteStoredProcedure(fileName);
// // return Json(new { success = true, message = "File uploaded and processed successfully." });
// //}
// //return Json(new { success = false, message = "File upload failed." });
//}
}
}

434
CustomerOnlineV2/CustomerOnlineV2/Views/Customer/CustomerProfile.cshtml

@ -0,0 +1,434 @@
@model CustomerOnlineV2.Common.Models.RegisterModel.OnlineCustomerRegisterModel
@using CustomerOnlineV2.Common.Helper
@{
Layout = "_Layout2";
}
@{
var userInfo = Context.GetLoginDetails();
var fullName = userInfo.FullName;
var username = userInfo.UserName;
var firstName = fullName.Split(' ')[0];
var mobileNumber = userInfo.MobileNumber;
var email = userInfo.Email;
var userId = userInfo.UserId;
var errorMessage = Context.Request.Cookies["ErrorMessage"];
var errorCode = Context.Request.Cookies["ErrorCode"];
CustomerOnlineV2.Helper.HelperClass.RemoveCookies("ErrorMessage", Context);
CustomerOnlineV2.Helper.HelperClass.RemoveCookies("ErrorCode", Context);
}
@{
//var customerInfo = Context.GetCustomerDetails();
{
}
}
<style>
.section-form-bg{
background-color: #cfdddd;
}
</style>
<div id="content" class="bg-light py-4">
<div class="container">
<div class="row">
<!-- Left Panel -->
<aside class="col-lg-3">
<!-- Profile Details -->
<div class="bg-white rounded text-center p-3 mb-4">
<div class="profile-thumb mt-3 mb-4">
@* <img class="rounded-circle" src="images/profile-thumb.jpg" alt=""> *@
<div class="profile-thumb-edit bg-primary text-white" data-bs-toggle="tooltip" title="Change Profile Picture">
<i class="fas fa-camera position-absolute"></i>
<input type="file" class="custom-file-input" id="customFile">
</div>
</div>
<p class="text-3 fw-500 mb-2">Hello, @firstName</p>
<p class="text-3 fw-500 mb-2">User Id : <span>@userId</span></p>
<p class="mb-2">
<a href="profile.html" class="text-5 text-light" data-bs-toggle="tooltip" title="Edit Profile">
<i class="fas fa-edit"></i>
</a>
</p>
</div>
<!-- Profile Details End -->
<!-- Need Help? -->
<div class="bg-white rounded text-center p-3 mb-4">
<div class="text-17 text-light my-3"><i class="fa fa-bullhorn"></i></div>
<h3 class="text-5 fw-400 my-4">Refer a Friend</h3>
<p class="text-muted opacity-8 mb-4">Refer a Friend and Earn Rewards!</p>
<div class="d-grid">
<a href="refer.html" class="btn btn-primary">Refer a Friend</a>
</div>
</div>
<!-- Need Help? End -->
</aside>
<!-- Left Panel End -->
<!-- Middle Panel -->
<div class="col-lg-9">
<!-- Personal Details -->
<div class="bg-white shadow-sm rounded p-4 mb-4">
<h3 class="text-5 fw-400 d-flex align-items-center mb-4">
Personal Details
@* <a href="#edit-personal-details" data-bs-toggle="modal" class="ms-auto text-2 text-uppercase btn-link">
<span class="me-1"><i class="fas fa-edit"></i></span>Edit
</a> *@
</h3>
<hr class="mx-n4 mb-4" />
<div class="row gx-3 align-items-center">
<p class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">Name:</p>
<p class="col-sm-9 text-3" id="fullName"></p>
</div>
<div class="row gx-3 align-items-center">
<label class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3" id="">Date of Birth:</label>
<p class="col-sm-9 text-3" id="dob"></p>
</div>
<div class="row gx-3 align-items-baseline">
<label class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">Email Address:</label>
<p class="col-sm-9 text-3" id="email">
</p>
</div>
<div class="row gx-3 align-items-baseline">
<label class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">Mobile :</label>
<p class="col-sm-9 text-3" id="mobile">
</p>
</div>
<div class="row gx-3 align-items-baseline">
<label class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">Language :</label>
<p class="col-sm-9 text-3">
English (United kingdom)
</p>
</div>
<div class="row gx-3 align-items-baseline">
<label class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3" s>Account Status:</label>
<p class="col-sm-9 text-3">
<span class="bg-success text-white rounded-pill d-inline-block px-2 mb-0" id="Status"><i class="fas fa-check-circle"></i> Active</span>
</p>
</div>
</div>
<!-- Edit Details Modal -->
<!-- Personal Details End -->
<!-- Account Settings -->
<div class="bg-white shadow-sm rounded p-4 mb-4">
<h3 class="text-5 fw-400 d-flex align-items-center mb-4">
Personal Address
@* <a href="#edit-personal-details" data-bs-toggle="modal" class="ms-auto text-2 text-uppercase btn-link">
<span class="me-1"><i class="fas fa-edit"></i></span>Edit
</a> *@
<a href="#edit-personal-details" data-bs-toggle="modal" class="ms-auto text-1 text-uppercase btn-link">
<span class="me-1"><i class="fas fa-edit"></i></span>Edit
</a>
</h3>
<hr class="mx-n4 mb-4" />
<div class="row gx-3 align-items-center">
<p class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">ZipCode:</p>
<p class="col-sm-9 text-3" id="zipCode"></p>
</div>
<div class="row gx-3 align-items-center">
<P class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">City:</P>
<p class="col-sm-9 text-3" id="city"> </p>
</div>
<div class="row gx-3 align-items-center">
<p class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">Address1:</p>
<p class="col-sm-9 text-3" id="address1">
</p>
</div>
<div class="row gx-3 align-items-center">
<p class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">Address2:</p>
<p class="col-sm-9 text-3" id="address2">
</p>
</div>
</div>
<div id="edit-personal-details" class="modal fade" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title fw-400">Address Details</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body p-4">
<form id="personaldetails" method="post">
<h3 class="text-5 fw-400 mt-4">Address</h3>
<hr />
<div class="row g-3">
<div class="col-12 col-sm-6">
<label for="postalCode" class="form-label">City</label>
<input type="text" class="form-control" required placeholder="City" readonly />
</div>
<div class="col-12 col-sm-6">
<label for="zipCode" class="form-label">Zip Code</label>
<input asp-for="postalCode" type="text" class="form-control" required placeholder="City" />
<span class="input-group-text px-2">
<button class="btn-choose bg-transparent text-white border-0" id="btnSearch" type="button">Lookup</button>
</span>
</div>
<div id="apiDataPopup" class="modal" role="dialog">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Address List</h4>
</div>
<div class="modal-body">
<table class="table table-bordered">
<thead>
<tr>
<th>SN</th>
<th>Address1</th>
<th>Address2</th>
<th>Action</th>
</tr>
</thead>
<tbody id="apiDataBody">
</tbody>
</table>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<div class="col-12 col-sm-6">
<label for="input-zone" class="form-label">Address1</label>
<input type="text" class="form-control" asp-for="address" />
</div>
<div class="col-12 col-sm-6">
<label for="input-zone" class="form-label">Address2</label>
<input type="text" class="form-control" asp-for="address2" />
</div>
<div class="col-12 mt-4 d-grid"><button class="btn btn-primary" type="submit">Save Changes</button></div>
</div>
</form>
</div>
</div>
</div>
</div>
<div class="bg-white shadow-sm rounded p-4 mb-4">
<h3 class="text-5 fw-400 d-flex align-items-center mb-4">
Account Setting
<a href="#edit-email" data-bs-toggle="modal" class="ms-auto text-2 text-uppercase btn-link">
<span class="me-1"><i class="fas fa-edit"></i></span>Edit
</a>
</h3>
<hr class="mx-n4 mb-4" />
<div class="row gx-3 align-items-center">
<p class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">Nationality:</p>
<p class="col-sm-9 text-3" id="nationality"></p>
</div>
<div class="row gx-3 align-items-center">
<p class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">Id Type:</p>
<p class="col-sm-9 text-3" id="idtype"></p>
</div>
<div class="row gx-3 align-items-center">
<p class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">Id Number:</p>
<p class="col-sm-9 text-3" id="idnumber"></p>
</div>
<div class="row gx-3 align-items-center">
<p class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">IdIssue Country :</p>
<p class="col-sm-9 text-3" id="idIssuecountry"></p>
</div>
<div class="row gx-3 align-items-center">
<p class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">Id Issue Date:</p>
<p class="col-sm-9 text-3" id="idissueDate"></p>
</div>
<div class="row gx-3 align-items-center">
<p class="col-sm-3 text-muted text-sm-end mb-0 mb-sm-3">Id Expiry Date:</p>
<p class="col-sm-9 text-3 " id="expairydate"></p>
</div>
</div>
<!-- Edit Details Modal -->
<div id="edit-email" class="modal fade" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title fw-400">Document</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body p-4">
<form id="emailAddresses" method="post">
<div class="row g-3">
<div class="col-12 col-sm-6">
<label for="city" class="form-label">Nationality</label>
<input id="city" value="Nepal" type="text" class="form-control" placeholder="City" readonly />
</div>
<div class="col-12 col-sm-6">
<label for="zipCode" class="form-label">Id Type</label>
<select class="form-select" asp-for="idType" asp-items="@CustomerOnlineV2.Helper.HelperClass.GetDropdownData("getIdType", true)">
</select>
</div>
<div class="col-12 col-sm-6">
<label for="input-zone" class="form-label">Id Number</label>
<input id="zipCode" type="text" class="form-control" required placeholder="City" />
</div>
<div class="col-12 col-sm-6">
<label for="input-zone" class="form-label">Id Issue Country</label>
<select class="form-select" asp-for="country" asp-items="@CustomerOnlineV2.Helper.HelperClass.GetDropdownData("allCountrylist", true)">
</select>
</div>
<div class="col-12 col-sm-6">
<label for="input-zone" class="form-label">Id Issue Date</label>
<input id="zipCode" type="date" class="form-control" />
</div>
<div class="col-12 col-sm-6">
<label for="input-zone" class="form-label">Id Expiry Date</label>
<input id="zipCode" type="date" class="form-control" />
</div>
</div>
<div class="d-grid w-100"><button class="btn btn-primary" type="submit">Save Changes</button></div>
</form>
</div>
</div>
</div>
</div>
<!-- Email Addresses End -->
</div>
<!-- Middle Panel End -->
</div>
</div>
</div>
@section Scripts {
<script>
$(document).ready(function () {
getData();
});
// function pageLoad() {
// getData(id);
// }
$(document).ready(function () {
$('#btnSearch').click(function (e) {
e.preventDefault();
var postalCode = $('#postalCode').val();
if (!postalCode || postalCode == "" || postalCode == null) {
alert("Postal cannot be empty");
return;
}
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
url: '/Customer/GetAddressByPostCode',
//data: JSON.stringify({ postalCode: postalCode }),
data: JSON.stringify(postalCode),
dataType: 'json',
success: function (response) {
var data = JSON.parse(response);
$('#apiDataPopup').modal({ backdrop: 'static', keyboard: false }, 'show');
$('#apiDataBody tbody').empty();
if (data && data.Data && data.Data.Addresses) {
var addresses = data.Data.Addresses;
addresses.forEach(function (item, index) {
var row = $('<tr>');
row.append($('<td>').text(index + 1));
row.append($('<td>').text(item.Address1));
row.append($('<td>').text(item.Address2));
var selectButton = $('<button>')
.addClass('btn btn-primary')
.text('Select')
.click(function (event) {
var additionalAddress = item.Address1;
var city = item.Address2;
$('#hdnAdditionalAddress').val(additionalAddress);
$('#cityHidden').val(city);
$('#address').val(additionalAddress);
$('#address2').val(city);
$('#apiDataPopup').modal('hide');
event.preventDefault();
});
row.append($('<td>').append(selectButton));
$('#apiDataBody').append(row);
});
$('#apiDataPopup').modal('show');
} else {
console.error("Invalid response.");
}
},
error: function (error) {
console.error(error);
}
});
});
});
function getData() {
debugger;
$.ajax({
//var id;
type: 'GET',
contentType: 'application/json; charset=utf-8',
url: '/Customer/GetCustomerDetail',
success: function (response) {
debugger;
var data = response.customerListModel[0];
$('#fullName').text(data.fullName);
$('#dob').text(data.dob);
$('#email').text(data.email);
$('#mobile').text(data.mobile);
$('#zipCode').text(data.zipCode);
$('#city').text(data.city);
$('#address1').text(data.address);
$('#address2').text(data.address2);
$('#nationality').text(data.country);
$('#idtype').text(data.idType);
$('#idnumber').text(data.idNumber);
$('#idIssuecountry').text(data.nativeCountry);
$('#idissueDate').text(data.idIssueDate);
$('#expairydate').text(data.idExpiryDate);
$('#expairydate').text(data.idExpiryDate);
},
error: function (error) {
console.error(error);
}
});
}
</script>
}

382
CustomerOnlineV2/CustomerOnlineV2/Views/Customer/CustomerRegistration.cshtml

@ -88,7 +88,7 @@
</div>
<div class="col-lg-12">
<h5 class="mb-4">Login Details</h5>
<h5 class="mb-4">Your Details</h5>
</div>
<div class="col-md-4">
<div class="mb-4">
@ -98,7 +98,7 @@
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-4">
@ -108,9 +108,9 @@
<input type="password" class="form-control" asp-for="Password">
<span id="password-validation" class="text-danger"></span>
<label asp-for="Password"></label>
@*
<input type="password" class="form-control" asp:RegularExpressionValidator asp-for="Password" runat="server" ErrorMessage="Invalid Password Charecters"
ValidationExpression="^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8}$" ControlToValidate="txtPassword" ForeColor="Red">
@*<input type="password" class="form-control" asp:RegularExpressionValidator asp-for="Password" runat="server" ErrorMessage="Invalid Password Charecters"
ValidationExpression="^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8}$" ControlToValidate="txtPassword" ForeColor="Red">
<span asp-validation-for="@Model.Password" class="error"></span> *@
</div>
</div>
@ -119,26 +119,17 @@
<div class="mb-4">
<div class="form-floating">
<input type="password" class="form-control" asp-for="ConfirmPassword">
<input type="password" class="form-control" asp-for="ConfirmPassword" >
<span id="confirm-password-validation" class="text-danger"></span>
<label asp-for="ConfirmPassword"></label>
@* <input type="password" class="form-control" asp:RegularExpressionValidator asp-for="ConfirmPassword" runat="server" ErrorMessage="Invalid Password Charecters"
ValidationExpression="^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8}$" ControlToValidate="txtPassword" ForeColor="Red">
<span asp-validation-for="@Model.ConfirmPassword" class="error"></span>
<label for="ConfirmPassword">Re-Type Password</label> *@
@* <input type="password" class="form-control" asp:RegularExpressionValidator asp-for="ConfirmPassword" runat="server" ErrorMessage="Invalid Password Charecters"
ValidationExpression="^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8}$" ControlToValidate="txtPassword" ForeColor="Red">
<span asp-validation-for="@Model.ConfirmPassword" class="error"></span>
<label for="ConfirmPassword">Re-Type Password</label> *@
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card bg-light border-0 mb-4">
<div class="card-body">
<div class="row">
<div class="col-lg-12">
<h5 class="mb-4">Personal Information</h5>
</div>
<div class="col-md-4">
<div class="mb-4">
<div class="form-floating mb-3">
@ -163,55 +154,17 @@
</div>
</div>
</div>
@* <div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
<input type="password" class="form-control" asp-for="Password">
<span id="confirm-password-validation" class="text-danger"></span>
<label for="floatingPassword">Password</label>
</div>
</div>
</div> *@
<div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
<select class="form-select" asp-for="country" asp-items="@CustomerOnlineV2.Helper.HelperClass.GetDropdownData("allCountrylist", true)" aria-label="Floating label select example">
@* <option selected></option>
<option value="1">Nepal</option>
<option value="2">India</option>
<option value="3">Pakistan</option> *@
</select>
@* select class="form-select form-control" asp-for="Country" asp-items="@CustomerOnlineV2.Helper.HelperClass.GetDropdownData("allCountrylist", true)" class="form-select" required onkeydown="PaymentMethodChangeEvent"> *@
<label for="Nationality">Nationality</label>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
<select class="form-select" asp-for="idType" aria-label="Floating label select example" asp-items="@CustomerOnlineV2.Helper.HelperClass.GetDropdownData("getIdType", true)" required>
@* <option value="" selected></option>
<option value="Bank Statement">Bank Statement</option>
<option value="DRIVER LICENSE">Driver License</option>
<option value="EEA national Id Card">EEA national Id Card</option>
<option value="HM Forces ID">HM Forces ID</option>
<option value="other Valid documents">other Valid documents</option>
<option value="PASSPORT">Passport</option>
<option value="RESIDENT CARD">Resident Card</option>
<option value="Utility bill">Utility bill</option> *@
</select>
<label for="Nationality">ID Type</label>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
<input type="text" class="form-control" asp-for="idNumber" placeholder="Password">
<label for="IdNUmber">Id Number</label>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-0">
<div class="input-group flex-nowrap">
@ -225,108 +178,16 @@
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
<select class="form-select" asp-for="nativeCountry" asp-items="@CustomerOnlineV2.Helper.HelperClass.GetDropdownData("allCountrylist", true)" aria-label="Floating label select example">
@* <option selected></option>
<option value="1">Nepal</option>
<option value="2">India</option>
<option value="3">Pakistan</option> *@
</select>
<label for="IssueCountry">Issue Country</label>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
<select class="form-select" asp-for="gender" asp-items="@CustomerOnlineV2.Helper.HelperClass.GetDropdownData("getGender", true)" aria-label="Floating label select example">
@* <option selected></option>
<option value="1">Male</option>
<option value="2">Famale</option> *@
</select>
<label for="Gender">Gender</label>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-4">
<div class="input-group flex-nowrap ">
<div class="form-floating flex-grow-1 input-file">
<input type="text" id="DocFront" class="form-control" placeholder="Chose File..." />
<label for="DocFront">Upload Document</label>
</div>
<span class="input-group-text px-2">
<button class="btn-choose bg-transparent text-white border-0" type="button">Upload</button>
</span>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-0">
<div class="input-group flex-nowrap">
<div class="form-floating flex-grow-1">
<input type="date" asp-for="idIssueDate" class="datepicker-here form-control issue-date" placeholder="dd/mm/yyyy" aria-describedby="basic-addon2" />
<label for="IdIssue" class="form-label">Id Issue Date</label>
</div>
@* <span class="input-group-text px-4">
<i class="fa fa-calendar"></i>
</span> *@
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-0">
<div class="input-group flex-nowrap">
<div class="form-floating flex-grow-1">
<input type="date" asp-for="idExpiryDate" class="datepicker-here form-control expire-date" placeholder="dd/mm/yyyy" aria-describedby="basic-addon2" />
<label for="IdExpire" class="form-label">Id Expire Date</label>
</div>
@* <span class="input-group-text px-4">
<i class="fa fa-calendar"></i>
</span> *@
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card bg-light border-0 mb-4">
<div class="card-body">
<div class="row">
<div class="col-lg-12">
<h5 class="mb-4">Contact Details</h5>
</div>
<div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
<select class="form-select" asp-for="nativeCountry" asp-items="@CustomerOnlineV2.Helper.HelperClass.GetDropdownData("allCountrylist", true)" aria-label="Floating label select example" required>
@* <option selected></option>
<option value="1">Nepal</option>
<option value="2">India</option>
<option value="3">Pakistan</option> *@
</select>
<label for="Country">Country</label>
</div>
</div>
</div>
@* <div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
<input type="text" class="form-control" id="CountryAddress1" placeholder="Address 1" asp-for="address">
<label for="CountryAddress1">Address 1</label>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
<input type="text" class="form-control" id="CountryAddress2" placeholder="Address 2" asp-for="address2">
<label for="CountryAddress2">Address 2</label>
</div>
</div>
</div> *@
<div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
@ -392,73 +253,12 @@
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
<input type="number" class="form-control" asp-for="telNo" id="Mobile" placeholder="Address 2">
<label for="Mobile">Telephone (optional)</label>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="card bg-light border-0 mb-4">
<div class="card-body">
<div class="row">
<div class="col-lg-12">
<h5 class="mb-4">Other Details</h5>
</div>
<div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
<select class="form-select" asp-for="occupation" asp-items="@CustomerOnlineV2.Helper.HelperClass.GetDropdownData("getOccuptttion", true)">
@* <option selected></option>
<option value="Retired">Retired</option>
<option value="Security Officer">Security Officer</option>
<option value="Unemployed">Unemployed</option>
<option value="Others">Others</option> *@
</select>
<label for="Occupation">Occupation</label>
</div>
</div>
</div>
<div class="col-md-4">
<div class="mb-4">
<div class="form-floating">
<select class="form-select" asp-for="sourceOfFound" asp-items="@CustomerOnlineV2.Helper.HelperClass.GetDropdownData("getSourceOfFound", true)">
@* <option selected></option>
<option value="Business Income">Business Income</option>
<option value="Investment">Investment</option>
<option value="Loan">Loan</option>
<option value="Others">Others</option>
<option value="Salary">Salary</option>
<option value="Sale of Property">Sale of Property</option>
<option value="Others">Others</option> *@
</select>
<label for="Occupation">Source Of Income</label>
</div>
</div>
</div>
<div class="col-md-8">
<div class="mb-4">
<div class="form-floating">
<select class="form-select" id="AboutUS">
<option selected></option>
<option value="Facebook/Social Media">Facebook/Social Media</option>
<option value="Family or Friend">Family or Friend</option>
<option value="Google Search/Website">Google Search/Website</option>
<option value="Nepalese Organization">Nepalese Organization</option>
<option value="Nepali Events/Newspaper">Nepali Events/Newspaper</option>
<option value="Refer A Friend">Refer A Friend</option>
</select>
<label for="AboutUS">How did you hear about us?</label>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="mb-4">
@ -491,8 +291,8 @@
</div>
</section>
<!-- Who we are end -->
<input type="hidden" id="hdnAdditionalAddress" name="hdnAdditionalAddress" value="initial value" />
<input type="hidden" id="cityHidden" name="cityHidden" value="initial value" />
<input type="hidden" id="hdnAdditionalAddress" name="hdnAdditionalAddress" value="initial value" />
<input type="hidden" id="cityHidden" name="cityHidden" value="initial value" />
</div>
@ -516,7 +316,7 @@
</div>
</footer>
</div>
<!-- Content end -->
<!-- Content end -->
<a id="back-to-top" data-bs-toggle="tooltip" title="Back to Top" href="javascript:void(0)"><i class="fa fa-chevron-up"></i></a>
@ -546,30 +346,10 @@
<script type="text/javascript">
// $(document).ready(function () {
// $('#Customer-form').submit(function (e) {
// e.preventDefault(); // Prevent form submission for now
// validatePasswords();
// });
// $('#password, #confirmPassword').on('keyup', function () {
// validatePasswords();
// });
// function validatePasswords() {
// var password = $('#password').val();
// var confirmPassword = $('#confirmPassword').val();
// if (password !== confirmPassword) {
// $('#confirmPassword').get(0).setCustomValidity('Passwords do not match');
// } else {
// $('#confirmPassword').get(0).setCustomValidity('');
// }
// }
// });
$(document).ready(function () {
$(document).ready(function () {
debugger;
$('#btnSearch').click(function (e) {
e.preventDefault();
@ -632,40 +412,40 @@
}
});
});
// Select the password and confirmPassword input fields
var passwordField = $("#Password");
var confirmPasswordField = $("#ConfirmPassword");
// Select the password and confirmPassword validation elements
var passwordValidation = $("#password-validation");
var confirmPasswordValidation = $("#confirm-password-validation");
// Password regex: Minimum 8 characters, at least one uppercase letter, one lowercase letter, and one number
var passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d@('@')$#!%*?&]{8,}$/;
// Add event handlers to the password and confirmPassword fields
passwordField.on("keyup", function () {
var password = passwordField.val();
if (passwordRegex.test(password)) {
passwordValidation.text("Valid password").css("color", "green");
} else {
passwordValidation.text("Password should contain at least one special character (*&%$), one uppercase, one lowercase and min of 8 characters").css("color", "green");
}
});
// Select the password and confirmPassword input fields
var passwordField = $("#Password");
var confirmPasswordField = $("#ConfirmPassword");
// Select the password and confirmPassword validation elements
var passwordValidation = $("#password-validation");
var confirmPasswordValidation = $("#confirm-password-validation");
// Password regex: Minimum 8 characters, at least one uppercase letter, one lowercase letter, and one number
var passwordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d@('@')$#!%*?&]{8,}$/;
// Add event handlers to the password and confirmPassword fields
passwordField.on("keyup", function () {
var password = passwordField.val();
if (passwordRegex.test(password)) {
passwordValidation.text("Valid password").css("color", "green");
} else {
passwordValidation.text("Password should contain at least one special character (*&%$), one uppercase, one lowercase and min of 8 characters").css("color", "red");
}
});
confirmPasswordField.on("keyup", function () {
var password = passwordField.val();
var confirmPassword = confirmPasswordField.val();
confirmPasswordField.on("keyup", function () {
var password = passwordField.val();
var confirmPassword = confirmPasswordField.val();
if (password === confirmPassword) {
confirmPasswordValidation.text("Passwords match").css("color", "green");
} else {
confirmPasswordValidation.text("Passwords do not match").css("color", "red");
}
});
});
if (password === confirmPassword) {
confirmPasswordValidation.text("Passwords match").css("color", "green");
} else {
confirmPasswordValidation.text("Passwords do not match").css("color", "green");
}
});
});
(function () {
@ -700,45 +480,46 @@
let email = $('#email').val();
let country = $('#country').val();
let firstName = $('#firstName').val();
let country = $('#country').val();
let firstName = $('#firstName').val();
let Password = $('#Password').val();
let ConfirmPassword = $('#ConfirmPassword').val();
let middleName = $('#middleName').val();
let lastName1 = $('#lastName1').val();
let idType = $('#idType').val();
let idNumber = $('#idNumber').val();
let dob = $('#dob').val();
let nativeCountry = $('#nativeCountry').val();
let gender = $('#gender').val();
let middleName = $('#middleName').val();
let lastName1 = $('#lastName1').val();
let idType = $('#idType').val();
let idNumber = $('#idNumber').val();
let dob = $('#dob').val();
let nativeCountry = $('#nativeCountry').val();
let gender = $('#gender').val();
let mobile = $('#mobile').val();
let telNo = $('#telNo').val();
let occupation = $('#occupation').val();
let telNo = $('#telNo').val();
let occupation = $('#occupation').val();
let customerPassword = $('#customerPassword').val();
let postalCode = $('#postalCode').val();
let address = $('#address').val();
let address2 = $('#address2').val();
let idIssueDate = $('#idIssueDate').val();
let idIssueDate = $('#idIssueDate').val();
let idExpiryDate = $('#idExpiryDate').val();
let aboutus = $('#AboutUS').val();
let Data = {
email: email,
country: country,
firstName: firstName,
middleName: middleName,
lastName1: lastName1,
idType: idType,
idNumber: idNumber,
dob: dob,
nativeCountry: nativeCountry,
gender: gender,
country : country ,
firstName : firstName ,
middleName : middleName,
lastName1 : lastName1,
idType : idType ,
idNumber : idNumber ,
dob : dob,
nativeCountry : nativeCountry ,
gender : gender ,
mobile: mobile,
telNo: telNo,
occupation: occupation,
telNo : telNo,
occupation : occupation ,
address: address,
address2: address2,
idIssueDate: idIssueDate,
@ -747,6 +528,9 @@
ConfirmPassword: ConfirmPassword,
postalCode: postalCode,
AboutUs: aboutus
};
$.ajax(
@ -762,8 +546,6 @@
},
async: true,
success: function (response) {
EnableRegisterButton();
if (response.responseCode != 0) {
ShowAlertMessage(response.responseCode, response.responseMessage);
@ -773,8 +555,6 @@
}
window.location.replace("/account/index");
ShowAlertMessage(response.responseCode, response.responseMessage);
// clearFields();

407
CustomerOnlineV2/CustomerOnlineV2/Views/CustomerDocument/CustomerDocument.cshtml

@ -0,0 +1,407 @@
@model CustomerOnlineV2.Common.Models.DocumentModel.CustomerDocumentModel
@using CustomerOnlineV2.Common.Helper
@{
Layout = "_Layout2";
}
@{
var userInfo = Context.GetLoginDetails();
var fullName = userInfo.FullName;
var username = userInfo.UserName;
var firstName = fullName.Split(' ')[0];
var mobileNumber = userInfo.MobileNumber;
var email = userInfo.Email;
var userId = userInfo.UserId;
var errorMessage = Context.Request.Cookies["ErrorMessage"];
var errorCode = Context.Request.Cookies["ErrorCode"];
CustomerOnlineV2.Helper.HelperClass.RemoveCookies("ErrorMessage", Context);
CustomerOnlineV2.Helper.HelperClass.RemoveCookies("ErrorCode", Context);
}
<!-- Content -->
<div id="content" class="bg-light py-4">
<div class="container">
<div class="row">
<!-- Left Panel -->
<aside class="col-lg-3">
<!-- Profile Details -->
<div class="bg-white rounded text-center p-3 mb-4">
<div class="profile-thumb mt-3 mb-4">
<img class="rounded-circle" src="images/profile-thumb.jpg" alt="">
<div class="profile-thumb-edit bg-primary text-white" data-bs-toggle="tooltip" title="Change Profile Picture">
<i class="fas fa-camera position-absolute"></i>
<input type="file" class="custom-file-input" id="customFile">
</div>
</div>
<p class="text-3 fw-500 mb-2">Hello, @firstName</p>
<p class="text-3 fw-500 mb-2">User Id : <span>@userId</span></p>
<p class="mb-2">
<a href="profile.html" class="text-5 text-light" data-bs-toggle="tooltip" title="Edit Profile">
<i class="fas fa-edit"></i>
</a>
</p>
<div class="d-grid">
<a href="document-upload.html" class="btn btn-primary">Upload documents</a>
</div>
</div>
<!-- Profile Details End -->
<!-- Need Help? -->
<div class="bg-white rounded text-center p-3 mb-4">
<div class="text-17 text-light my-3"><i class="fa fa-bullhorn"></i></div>
<h3 class="text-5 fw-400 my-4">Refer a Friend</h3>
<p class="text-muted opacity-8 mb-4">Refer a Friend and Earn Rewards!</p>
<div class="d-grid">
<a href="refer.html" class="btn btn-primary">Refer a Friend</a>
</div>
</div>
<!-- Need Help? End -->
</aside>
<!-- Left Panel End -->
<!-- Middle Panel -->
<div class="col-lg-9">
<div class="bg-white shadow-sm rounded p-4 mb-4">
<h3 class="text-5 fw-400 mb-4">Valid ID Card<span class="text-muted text-2 ms-2">(BRP Card / Passport / Driving License)</span></h3>
<hr class="mb-4 mx-n4" />
<div class="row g-3">
<div class="col-12 col-md-6 col-lg-4">
<div class="account-doc rounded p-3">
<div class="front">
<img src="images/profile-thumb.jpg" class="img-fluid">
<span class="mt-2">Front</span>
</div>
<div class="account-doc-overlay rounded">
<a href="#" data-bs-target="#edit-doc-details" data-bs-toggle="modal" class="text-light btn-link mx-2">
<span class="me-1"><i class="fas fa-edit"></i></span>Edit
</a>
</div>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4">
<div class="account-doc rounded p-3">
<div class="front">
<img src="images/profile-thumb.jpg" class="img-fluid">
<span class="mt-2">Back</span>
</div>
<div class="account-doc-overlay rounded">
<a href="#" data-bs-target="#edit-doc-details" data-bs-toggle="modal" class="text-light btn-link mx-2">
<span class="me-1"><i class="fas fa-edit"></i></span>Edit
</a>
</div>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4">
<a href="" data-bs-target="#edit-doc-details" data-bs-toggle="modal" class="account-doc-new d-flex align-items-center rounded h-100 p-3 mb-4 mb-lg-0">
<p class="w-100 text-center lh-base m-0">
<span class="text-3"><i class="fas fa-plus-circle"></i></span> <span class="d-block text-body text-3">Add New Document</span>
</p>
</a>
</div>
</div>
</div>
<div class="bg-white shadow-sm rounded p-4 mb-4">
<h3 class="text-5 fw-400 mb-4">Proof of address<span class="text-muted text-2 ms-2">(Bank Statement / Utility Bills / Driving License)</span></h3>
<hr class="mb-4 mx-n4" />
<div class="row g-3">
<div class="col-12 col-md-6 col-lg-4">
<div class="account-doc rounded p-3">
<div class="front">
<img src="images/profile-thumb.jpg" class="img-fluid">
<span class="mt-2">Front</span>
</div>
<div class="account-doc-overlay rounded">
<a href="#" data-bs-target="#edit-doc-details" data-bs-toggle="modal" class="text-light btn-link mx-2">
<span class="me-1"><i class="fas fa-edit"></i></span>Edit
</a>
</div>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4">
<div class="account-doc rounded p-3">
<div class="front">
<img src="images/profile-thumb.jpg" class="img-fluid">
<span class="mt-2">Back</span>
</div>
<div class="account-doc-overlay rounded">
<a href="#" data-bs-target="#edit-doc-details" data-bs-toggle="modal" class="text-light btn-link mx-2">
<span class="me-1"><i class="fas fa-edit"></i></span>Edit
</a>
</div>
</div>
</div>
<div class="col-12 col-md-6 col-lg-4">
<a href="" data-bs-target="#edit-doc-details" data-bs-toggle="modal" class="account-doc-new d-flex align-items-center rounded h-100 p-3 mb-4 mb-lg-0">
<p class="w-100 text-center lh-base m-0">
<span class="text-3"><i class="fas fa-plus-circle"></i></span> <span class="d-block text-body text-3">Add New Document</span>
</p>
</a>
</div>
</div>
</div>
<!-- Edit Card Details Modal -->
<div id="edit-doc-details" class="modal fade" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title fw-400">Update Document</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body p-4">
<form id="updateCard" method="post">
<div class="mb-3">
<label for="IdFront" class="form-label">Document Type</label>
<select class="form-select" asp-for="documentType" aria-label="Floating label select example" asp-items="@CustomerOnlineV2.Helper.HelperClass.GetDropdownData("getIdType", true)" required>
@* <select class="form-select" id="doc" name=""> *@
@* <option value="0" selected>-- Select --</option>
<option value="1">Id Card</option>
<option value="2">Passport </option>
<option value="3">License</option> *@
</select>
</div>
<div class="mb-3">
<label for="IdFront" class="form-label">Document Front</label>
<div class="input-group flex-nowrap">
<div class="flex-grow-1 input-file">
<input type="text" asp-for="fileName" class="form-control" placeholder="Chose File..." />
@* <img id="myUploadedImg" alt="Photo" style="width:180px;" /> *@
</div>
@* <span class="input-group-text px-2">
<button class="btn-choose bg-transparent text-white border-0" id="BtnUpload" type="submit">
< span class="RegisterText"></span>&nbsp;<div class="spinner-border text-success loading" role="status" style="display:none;"></div>
</button>
</span> *@
</div>
</div>
<div class="mb-3">
<label for="IdBack" class="form-label">Document Back</label>
<div class="input-group flex-nowrap">
<div class="flex-grow-1 input-file">
<input type="text" id="IdBack" class="form-control" placeholder="Chose File...">
</div>
<span class="input-group-text px-2">
<button class="btn-choose bg-transparent text-white border-0" type="button">Upload</button>
</span>
</div>
</div>
<div class="d-grid mt-4">
@* <button class="btn btn-primary" onclick="btnUpload" type="submit">Update Document </button> *@
<button type="submit" id="btnUpload" class="btn btn-lg btn-primary" style="width: 250px;">
<span class="ButtonTExt">Update Document</span>&nbsp;<div class="spinner-border text-success loading" role="status" style="display:none;"></div>
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<!-- Middle Panel End -->
</div>
</div>
</div>
<!-- Content end -->
@section Scripts {
<script>
(function () {
'use strict'
// Fetch all the forms we want to apply custom Bootstrap validation styles to
var forms = document.querySelectorAll('#updateCard')
// Receiver();
// Loop over them and prevent submission
Array.prototype.slice.call(forms)
.forEach(function (form) {
form.addEventListener('submit', function (event) {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}
else {
event.preventDefault();
FileUpload();
}
form.classList.add('was-validated')
}, false)
})
})();
function FileUpload() {
debugger;
DisableDocumentButton();
let documentType = $('#documentType').val();
let fileName = $('#fileName').val();
let Data = {
documentType: documentType,
fileName: fileName,
};
$.ajax(
{
type: 'POST',
url: '/CustomerDocument/AddDocment',
data: Data,
processData: true,
headers: {
"RequestVerificationToken":
$('input[name="__RequestVerificationToken"]').val()
},
async: true,
success: function (response) {
EnableDocumentButton();
if (response.responseCode != 0) {
ShowAlertMessage(response.responseCode, response.responseMessage);
//ShowAlertMessage("Receiver Successfully created")
return;
}
// clearFields();
// $('#Country').focus();
$('#message').text('Data successfully submitted');
window.location.replace("/home");
},
error: function () {
return null;
}
});
}
function DisableDocumentButton() {
$('.ButtonTExt').hide();
$('#btnUpload').css('cursor', 'not-allowed');
$('.loadingSend').show();
$('#btnUpload').prop('disabled', true);
}
function EnableDocumentButton() {
debugger;
$('.ButtonTExt').show();
$('#btnUpload').css('cursor', 'pointer');
$('.loadingSend').hide();
$('#btnUpload').prop('disabled', false);
}
// $(document).ready(function () {
// $('#ContentPlaceHolder1_reg_front_id').on('change', function (e) {
// $('.loadImg').remove();
// ValidateExtension('ContentPlaceHolder1_reg_front_id');
// // console.log(e.target, 'e')
// for (var i = 0; i < e.target.files.length; i++) {
// var tmppath = URL.createObjectURL(e.target.files[i]);
// $(this).after('<span class="loadImg"><img src="' + tmppath + '" alt=""></span>');
// $(".loadImg img").fadeIn("fast");
// }
// });
// $('#ContentPlaceHolder1_reg_id_additional').on('change', function (e) {
// $('.loadImg2').remove();
// ValidateExtension('ContentPlaceHolder1_reg_id_additional');
// // console.log(e.target, 'e')
// for (var i = 0; i < e.target.files.length; i++) {
// var tmppath = URL.createObjectURL(e.target.files[i]);
// $(this).after('<span class="loadImg2"><img src="' + tmppath + '" alt=""></span>');
// $(".loadImg2 img").fadeIn("fast");
// }
// });
// // Image upload for back id
// $('#ContentPlaceHolder1_reg_back_id').on('change', function (e) {
// $('.loadImg1').remove();
// ValidateExtension('ContentPlaceHolder1_reg_back_id');
// // console.log(e.target, 'e')
// for (var i = 0; i < e.target.files.length; i++) {
// var tmppath = URL.createObjectURL(e.target.files[i]);
// $(this).after('<span class="loadImg1"><img src="' + tmppath + '" alt=""></span>');
// $(".loadImg1 img").fadeIn("fast");
// }
// });
// });
// var _URL = window.URL || window.webkitURL;
// $("#fileName").on('change', function () {
// var file, img;
// if ((file = this.files[0])) {
// img = new Image();
// img.onload = function () {
// sendFile(file);
// };
// img.onerror = function () {
// alert("Not a valid file:" + file.type);
// };
// img.src = _URL.createObjectURL(file);
// }
// });
// function sendFile(file) {
// var formData = new FormData();
// formData.append('file', $('#fileName')[0].files[0]);
// $.ajax({
// type: 'post',
// url: 'CustomerDocument/AddDocment,
// data: formData,
// success: function (status) {
// if (status != 'error') {
// var my_path = "MediaUploader/" + status;
// $("#myUploadedImg").attr("src", my_path);
// }
// },
// processData: false,
// contentType: false,
// error: function () {
// alert("Whoops something went wrong!");
// }
// });
</script>
}

2
CustomerOnlineV2/CustomerOnlineV2/Views/Shared/_Layout.cshtml

@ -160,7 +160,7 @@
<i class="fas fa-edit"></i>
</a>
<div class="">
<a href="/CustomerDocument/CustomerDocument" class="px-1 text-3">Upload Documents</a>|<a href="profile.html" class="px-1 text-3">Edit Profile</a>
<a href="/CustomerDocument/CustomerDocument" class="px-1 text-3">Upload Documents</a>|<a href="/Customer/CustomerProfile" class="px-1 text-3">Edit Profile</a>
</div>
</p>

3
CustomerOnlineV2/CustomerOnlineV2/Views/Transaction/Payment.cshtml

@ -70,7 +70,8 @@
<input asp-for="declinedurlredirect" name="declinedurlredirect" type="hidden" />
<input asp-for="sitesecuritytimestamp" name="sitesecuritytimestamp" type="hidden" />
<input asp-for="sitesecurity" name="sitesecurity" type="hidden" />
<input asp-for="token" name="sitetoken" type="hidden" />
<input type="hidden" name="stextraurlredirectfields" value="sitetoken">
<input asp-for="merchantemail" name="merchantemail" value="shakun@japanremit.com" type="hidden" />
@Html.AntiForgeryToken()
<input type="submit" id="btn_submit" style="display:none;" />

72
CustomerOnlineV2/CustomerOnlineV2/Views/Transaction/Success.cshtml

@ -14,15 +14,73 @@
<div class="card">
<div class="card-body p-4">
<div class="row">
<div class="col-md-9 col-lg-7 col-xl-6 mx-auto align-items-center text-center">
<div class="my-4">
<p class="text-success text-20 lh-1"><i class="fas fa-check-circle"></i></p>
<p class="text-success text-8 fw-500 lh-1">Success!</p>
<p class="lead">Transactions Complete</p>
<div class="col-md-9 col-lg-7 col-xl-6 mx-auto align-items-center">
<div class="my-3">
<p class="text-success text-7 lh-1"><i class="fas fa-check-circle"></i>Your Transaction is succesfully created! <a class="text-3 d-inline-block btn-link mt-4" href="#"><i class="fas fa-print"></i> Print</a></p>
@* <p class="lead">Transactions Complete</p> *@
</div>
<div style="border:solid 1px; padding:10px; margin:10px; background-color:#FBFBFB;">
<p class="text-3 mb-4">Thank you <span class="fw-500">@Model.SenderName</span> for sending transaction with us. </p>
<p class="text-3 mb-4">Your Transaction ID is <span class="fw-500">@Model.TransactionId</span> <span style="color: red;"> (This is not a Reference No)</span></p>
<p class="text-3 mb-4">Your transaction to <span class="fw-500">@Model.PCountry</span> for <span class="text-4 fw-500">@CustomerOnlineV2.Common.Helper.Utilities.ShowDecimal(Model.TransferAmount) @Model.CollectCurrency</span> is in progress. You will receive an email regarding the transfer update shortly.</p>
<p class="text-3 mb-4">Please log-in your personal online banking and transfer funds directly to our accounts </p>
@* <p class="text-3 mb-4">You've Succesfully sent <span class="text-4 fw-500">@CustomerOnlineV2.Common.Helper.Utilities.ShowDecimal(Model.CollectAmount) @Model.CollectCurrency</span> to <span class="fw-500">@Model.ReceiverName</span>, See transaction details under <a href="/Transaction/Receipt?id=@Model.TransactionId">Transactions Details</a></p> *@
<table>
<tr>
<td>
Bank Name: &nbsp;
<span>CLEAR BANK</span>
<br>
</td>
</tr>
<tr>
<td>
Account Name: &nbsp;
<span>IME LONDON</span>
<br>
</td>
</tr>
<tr>
<td>
Sort Code: &nbsp;
<span>04-6-93</span>
<br>
</td>
</tr>
<tr>
<td>
Account Number: &nbsp;
<span>00000151</span>
<br>
</td>
</tr>
<tr>
<td>
Total To Pay: &nbsp;
<span class="text-4 fw-500">@CustomerOnlineV2.Common.Helper.Utilities.ShowDecimal(Model.CollectAmount) @Model.CollectCurrency</span>
<br>
</td>
</tr>
<tr>
<td>
Reference: &nbsp;
<span class="text-4 fw-500">@Model.SenderName</span>
<br>
</td>
</tr>
</table>
</div>
<p class="text-3 mb-4">You've Succesfully sent <span class="text-4 fw-500">@CustomerOnlineV2.Common.Helper.Utilities.ShowDecimal(Model.CollectAmount) @Model.CollectCurrency</span> to <span class="fw-500">@Model.ReceiverName</span>, See transaction details under <a href="/Transaction/Receipt?id=@Model.TransactionId">Transactions Details</a></p>
<div class="d-grid"><a href="/Transaction/SendMoney"><button class="btn btn-primary">Send Money Again</button></a></div>
<a class="text-3 d-inline-block btn-link mt-4" href="#"><i class="fas fa-print"></i> Print</a>
</div>
</div>
</div>

13
CustomerOnlineV2/CustomerOnlineV2/Views/Transaction/TranPaySuccess.cshtml

@ -39,18 +39,11 @@
<p class="text-success text-8 fw-500 lh-1">Success!</p>
<p class="lead"> Transaction Payment Complete</p>
<p>Error Code: @ViewBag.errorCode</p>
<p>Order Reference: @ViewBag.orderReference</p>
<p>Payment Type Description: @ViewBag.paymentTypeDescription</p>
<p>Request Reference: @ViewBag.requestReference</p>
<p>Response Site Security: @ViewBag.responseSiteSecurity</p>
<p>Settle Status: @ViewBag.settleStatus</p>
<p>Site Reference: @ViewBag.siteReference</p>
<p>Transaction Reference: @ViewBag.transactionReference</p>
</div>
@* <p class="text-3 mb-4">You've Succesfully sent <span class="text-4 fw-500">@CustomerOnlineV2.Common.Helper.Utilities.ShowDecimal(Model.CollectAmount) @Model.CollectCurrency</span> to <span class="fw-500">@Model.ReceiverName</span>, See transaction details under <a href="/Transaction/Receipt?id=@Model.TransactionId">Transactions Details</a></p>
*@ <div class="d-grid"><a href="/Home/Index"><button class="btn btn-primary">Dashboard Page</button></a></div>
< class="text-3 mb-4">You've Succesfully sent <span class="text-4 fw-500">@CustomerOnlineV2.Common.Helper.Utilities.ShowDecimal(Model.CollectAmount) @Model.CollectCurrency</span> to <span class="fw-500">@Model.ReceiverName</span>, See transaction details under <a href="/Transaction/Receipt?id=@Model.TransactionId">Transactions Details</a></p>
<div class="d-grid"><a href="/Home/Index"><button class="btn btn-primary">Dashboard Page</button></a></div>
</div>
</div>

BIN
CustomerOnlineV2/CustomerOnlineV2/wwwroot/images/loading.gif

After

Width: 64  |  Height: 64  |  Size: 20 KiB

Loading…
Cancel
Save