Changed Checkout to correctly reflect cash. Minor updates.
This commit is contained in:
@ -5,6 +5,7 @@ using Tanshu.Accounts.Entities;
|
||||
using Tanshu.Accounts.Entities.Auth;
|
||||
using NHibernate.Criterion;
|
||||
using Tanshu.Accounts.Contracts;
|
||||
using Tanshu.Common.Helpers;
|
||||
|
||||
namespace Tanshu.Accounts.Repository
|
||||
{
|
||||
@ -23,7 +24,7 @@ namespace Tanshu.Accounts.Repository
|
||||
public decimal VoidsInSystem { get; private set; }
|
||||
public decimal Discount { get; private set; }
|
||||
public decimal PendingBills { get; private set; }
|
||||
public decimal NetSales { get; private set; }
|
||||
public decimal CashReceipts { get; private set; }
|
||||
public decimal ClosingBalance { get; private set; }
|
||||
public decimal RetainedOvernight { get; private set; }
|
||||
public decimal CashDeposited { get; private set; } //
|
||||
@ -62,13 +63,13 @@ namespace Tanshu.Accounts.Repository
|
||||
this.FinishDate = finishDate.Date.AddDays(1).AddHours(5);
|
||||
|
||||
string info;
|
||||
PendingBills = GetPending(out info);
|
||||
PendingBills = GetPrintInfo(out info,SettleOption.Unsettled);
|
||||
PendingString = info;
|
||||
CcReceipts = GetCreditCard(out info);
|
||||
CcReceipts = GetPrintInfo(out info,SettleOption.CreditCard);
|
||||
CcString = info;
|
||||
NcReceipts = GetNoCharge(out info);
|
||||
NcReceipts = GetPrintInfo(out info, SettleOption.CreditCard);
|
||||
NcString = info;
|
||||
BtcReceipts = GetBillToCompany(out info);
|
||||
BtcReceipts = GetPrintInfo(out info, SettleOption.BillToCompany);
|
||||
BtcString = info;
|
||||
VoidsInSystem = GetVoids(out info);
|
||||
VoidsString = info;
|
||||
@ -89,21 +90,19 @@ namespace Tanshu.Accounts.Repository
|
||||
|
||||
|
||||
Cashiers = GetActiveCashiers();
|
||||
NetSales = GetNetSales();
|
||||
CashReceipts = GetPrintInfo(out info, SettleOption.Cash);
|
||||
Discount = GetDiscountBills(.1M, out info);
|
||||
DiscountString = info;
|
||||
ClosingBalance = Opening
|
||||
+ Receipts
|
||||
+ AdvanceReceipts
|
||||
- CcReceipts
|
||||
- BtcReceipts
|
||||
- AdvanceAdjusted
|
||||
- CashPayments
|
||||
- AdditionalVoids
|
||||
+ NetSales;
|
||||
+ CashReceipts;
|
||||
}
|
||||
}
|
||||
|
||||
#region Advances
|
||||
private decimal GetAdvancesAdjusted()
|
||||
{
|
||||
using (var session = SessionManager.Session)
|
||||
@ -127,6 +126,8 @@ namespace Tanshu.Accounts.Repository
|
||||
return amt;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
public void Calculate(decimal cashDeposited, decimal retainedOvernight)
|
||||
{
|
||||
this.CashDeposited = cashDeposited;
|
||||
@ -135,84 +136,123 @@ namespace Tanshu.Accounts.Repository
|
||||
Status = string.Format("{0:Extra Cash Rs #,##0.00; Cash Short Rs #,##0.00;Cash Perfect}", Excess);
|
||||
}
|
||||
|
||||
private decimal GetPending(out string info)
|
||||
private decimal GetPrintInfo(out string info, SettleOption settleOption)
|
||||
{
|
||||
using (var session = SessionManager.Session)
|
||||
{
|
||||
Voucher voucher = null;
|
||||
decimal amount;
|
||||
decimal discount;
|
||||
info = "\n\r--- Pending Bills ------------------------";
|
||||
info = string.Format("\n\r--- {0} ", settleOption.Display()).PadRight(44,'-');
|
||||
var list = session.QueryOver<Voucher>(() => voucher)
|
||||
.Where(i => i.LastEditDate >= StartDate &&
|
||||
i.LastEditDate <= FinishDate &&
|
||||
i.User == Cashier &&
|
||||
i.Void == false)
|
||||
.WithSubquery.WhereExists(QueryOver.Of<VoucherSettlement>().Where(x => x.Voucher.VoucherID == voucher.VoucherID && x.Settled == SettleOption.Unsettled).Select(x => x.Voucher))
|
||||
.WithSubquery.WhereExists(QueryOver.Of<VoucherSettlement>().Where(x => x.Voucher.VoucherID == voucher.VoucherID && x.Settled == settleOption).Select(x => x.Voucher))
|
||||
.List();
|
||||
GetInfo(list, SettleOption.Unsettled, out amount, out discount, ref info);
|
||||
return amount;
|
||||
}
|
||||
}
|
||||
|
||||
private decimal GetNoCharge(out string info)
|
||||
{
|
||||
using (var session = SessionManager.Session)
|
||||
{
|
||||
Voucher voucher = null;
|
||||
decimal amount;
|
||||
decimal discount;
|
||||
info = "\n\r--- No Charge ----------------------------";
|
||||
var list = session.QueryOver<Voucher>(() => voucher)
|
||||
.Where(i => i.LastEditDate >= StartDate &&
|
||||
i.LastEditDate <= FinishDate &&
|
||||
i.User == Cashier &&
|
||||
i.Void == false)
|
||||
.WithSubquery.WhereExists(QueryOver.Of<VoucherSettlement>().Where(x => x.Voucher.VoucherID == voucher.VoucherID && x.Settled == SettleOption.NoCharge).Select(x => x.Voucher))
|
||||
.List();
|
||||
GetInfo(list, SettleOption.NoCharge, out amount, out discount, ref info);
|
||||
return amount;
|
||||
}
|
||||
}
|
||||
private decimal GetBillToCompany(out string info)
|
||||
{
|
||||
using (var session = SessionManager.Session)
|
||||
{
|
||||
Voucher voucher = null;
|
||||
decimal amount;
|
||||
decimal discount;
|
||||
info = "\n\r--- Bill To Company ----------------------";
|
||||
var list = session.QueryOver<Voucher>(() => voucher)
|
||||
.Where(i => i.LastEditDate >= StartDate &&
|
||||
i.LastEditDate <= FinishDate &&
|
||||
i.User == Cashier &&
|
||||
i.Void == false)
|
||||
.WithSubquery.WhereExists(QueryOver.Of<VoucherSettlement>().Where(x => x.Voucher.VoucherID == voucher.VoucherID && x.Settled == SettleOption.BillToCompany).Select(x => x.Voucher))
|
||||
.List();
|
||||
GetInfo(list, SettleOption.BillToCompany, out amount, out discount, ref info);
|
||||
return amount;
|
||||
}
|
||||
}
|
||||
private decimal GetCreditCard(out string info)
|
||||
{
|
||||
using (var session = SessionManager.Session)
|
||||
{
|
||||
Voucher voucher = null;
|
||||
decimal amount;
|
||||
decimal discount;
|
||||
info = "\n\r--- Credit Card Bills --------------------";
|
||||
var list = session.QueryOver<Voucher>(() => voucher)
|
||||
.Where(i => i.LastEditDate >= StartDate &&
|
||||
i.LastEditDate <= FinishDate &&
|
||||
i.User == Cashier &&
|
||||
i.Void == false)
|
||||
.WithSubquery.WhereExists(QueryOver.Of<VoucherSettlement>().Where(x => x.Voucher.VoucherID == voucher.VoucherID && x.Settled == SettleOption.CreditCard).Select(x => x.Voucher))
|
||||
.List();
|
||||
//private decimal GetPending(out string info)
|
||||
//{
|
||||
// using (var session = SessionManager.Session)
|
||||
// {
|
||||
// Voucher voucher = null;
|
||||
// decimal amount;
|
||||
// decimal discount;
|
||||
// info = "\n\r--- Pending Bills ------------------------";
|
||||
// var list = session.QueryOver<Voucher>(() => voucher)
|
||||
// .Where(i => i.LastEditDate >= StartDate &&
|
||||
// i.LastEditDate <= FinishDate &&
|
||||
// i.User == Cashier &&
|
||||
// i.Void == false)
|
||||
// .WithSubquery.WhereExists(QueryOver.Of<VoucherSettlement>().Where(x => x.Voucher.VoucherID == voucher.VoucherID && x.Settled == SettleOption.Unsettled).Select(x => x.Voucher))
|
||||
// .List();
|
||||
// GetInfo(list, SettleOption.Unsettled, out amount, out discount, ref info);
|
||||
// return amount;
|
||||
// }
|
||||
//}
|
||||
|
||||
GetInfo(list, SettleOption.CreditCard, out amount, out discount, ref info);
|
||||
return amount;
|
||||
}
|
||||
}
|
||||
//private decimal GetNoCharge(out string info)
|
||||
//{
|
||||
// using (var session = SessionManager.Session)
|
||||
// {
|
||||
// Voucher voucher = null;
|
||||
// decimal amount;
|
||||
// decimal discount;
|
||||
// info = "\n\r--- No Charge ----------------------------";
|
||||
// var list = session.QueryOver<Voucher>(() => voucher)
|
||||
// .Where(i => i.LastEditDate >= StartDate &&
|
||||
// i.LastEditDate <= FinishDate &&
|
||||
// i.User == Cashier &&
|
||||
// i.Void == false)
|
||||
// .WithSubquery.WhereExists(QueryOver.Of<VoucherSettlement>().Where(x => x.Voucher.VoucherID == voucher.VoucherID && x.Settled == SettleOption.NoCharge).Select(x => x.Voucher))
|
||||
// .List();
|
||||
// GetInfo(list, SettleOption.NoCharge, out amount, out discount, ref info);
|
||||
// return amount;
|
||||
// }
|
||||
//}
|
||||
//private decimal GetCashReceipts(out string info)
|
||||
//{
|
||||
// using (var session = SessionManager.Session)
|
||||
// {
|
||||
// Voucher voucher = null;
|
||||
// decimal amount;
|
||||
// decimal discount;
|
||||
// info = "\n\r--- Cash Settlement ----------------------";
|
||||
// var list = session.QueryOver<Voucher>(() => voucher)
|
||||
// .Where(i => i.LastEditDate >= StartDate &&
|
||||
// i.LastEditDate <= FinishDate &&
|
||||
// i.User == Cashier &&
|
||||
// i.Void == false)
|
||||
// .WithSubquery.WhereExists(QueryOver.Of<VoucherSettlement>().Where(x => x.Voucher.VoucherID == voucher.VoucherID && x.Settled == SettleOption.Cash).Select(x => x.Voucher))
|
||||
// .List();
|
||||
// GetInfo(list, SettleOption.Cash, out amount, out discount, ref info);
|
||||
// return amount;
|
||||
// }
|
||||
//}
|
||||
//private decimal GetBillToCompany(out string info)
|
||||
//{
|
||||
// using (var session = SessionManager.Session)
|
||||
// {
|
||||
// Voucher voucher = null;
|
||||
// decimal amount;
|
||||
// decimal discount;
|
||||
// info = "\n\r--- Bill To Company ----------------------";
|
||||
// var list = session.QueryOver<Voucher>(() => voucher)
|
||||
// .Where(i => i.LastEditDate >= StartDate &&
|
||||
// i.LastEditDate <= FinishDate &&
|
||||
// i.User == Cashier &&
|
||||
// i.Void == false)
|
||||
// .WithSubquery.WhereExists(QueryOver.Of<VoucherSettlement>().Where(x => x.Voucher.VoucherID == voucher.VoucherID && x.Settled == SettleOption.BillToCompany).Select(x => x.Voucher))
|
||||
// .List();
|
||||
// GetInfo(list, SettleOption.BillToCompany, out amount, out discount, ref info);
|
||||
// return amount;
|
||||
// }
|
||||
//}
|
||||
//private decimal GetCreditCard(out string info)
|
||||
//{
|
||||
// using (var session = SessionManager.Session)
|
||||
// {
|
||||
// Voucher voucher = null;
|
||||
// decimal amount;
|
||||
// decimal discount;
|
||||
// info = "\n\r--- Credit Card Bills --------------------";
|
||||
// var list = session.QueryOver<Voucher>(() => voucher)
|
||||
// .Where(i => i.LastEditDate >= StartDate &&
|
||||
// i.LastEditDate <= FinishDate &&
|
||||
// i.User == Cashier &&
|
||||
// i.Void == false)
|
||||
// .WithSubquery.WhereExists(QueryOver.Of<VoucherSettlement>().Where(x => x.Voucher.VoucherID == voucher.VoucherID && x.Settled == SettleOption.CreditCard).Select(x => x.Voucher))
|
||||
// .List();
|
||||
|
||||
// GetInfo(list, SettleOption.CreditCard, out amount, out discount, ref info);
|
||||
// return amount;
|
||||
// }
|
||||
//}
|
||||
private decimal GetVoids(out string info)
|
||||
{
|
||||
using (var session = SessionManager.Session)
|
||||
@ -261,31 +301,6 @@ and i.Discount >= :discount";
|
||||
}
|
||||
}
|
||||
|
||||
private decimal GetNetSales()
|
||||
{
|
||||
using (var session = SessionManager.Session)
|
||||
{
|
||||
const string query = @"
|
||||
select sum(i.Amount) from Voucher v
|
||||
inner join v.Kots k
|
||||
inner join k.Inventories i
|
||||
where v.Date >= :startDate and v.Date <= :finishDate and v.User = :cashierID and v.Void = false
|
||||
and exists (select Voucher from VoucherSettlement vs where vs.Voucher = v
|
||||
and vs.Settled != :noCharge and vs.Settled != :unSettled and vs.Settled != :amount and vs.Settled != :roundoff)
|
||||
";
|
||||
var amount = session.CreateQuery(query)
|
||||
.SetParameter("startDate", StartDate)
|
||||
.SetParameter("finishDate", FinishDate)
|
||||
.SetParameter("cashierID", Cashier.UserID)
|
||||
.SetParameter("unSettled", SettleOption.Unsettled)
|
||||
.SetParameter("noCharge", SettleOption.NoCharge)
|
||||
.SetParameter("amount", SettleOption.Amount)
|
||||
.SetParameter("roundoff", SettleOption.RoundOff)
|
||||
.UniqueResult<decimal>();
|
||||
return amount;
|
||||
}
|
||||
}
|
||||
|
||||
private static void GetInfo(ICollection<Voucher> list, out decimal amount, out decimal discount, ref string info)
|
||||
{
|
||||
amount = 0;
|
||||
|
||||
@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using NHibernate;
|
||||
using NHibernate.Criterion;
|
||||
using Tanshu.Accounts.Entities;
|
||||
using System.Linq;
|
||||
|
||||
namespace Tanshu.Accounts.Repository
|
||||
{
|
||||
@ -63,7 +64,7 @@ namespace Tanshu.Accounts.Repository
|
||||
return _session.Get<FoodTable>(foodTableID);
|
||||
}
|
||||
|
||||
public FoodTable GetByName(string name)
|
||||
public FoodTable Get(string name)
|
||||
{
|
||||
return _session.CreateCriteria<FoodTable>()
|
||||
.Add(Restrictions.Eq("Name", name))
|
||||
@ -122,5 +123,17 @@ namespace Tanshu.Accounts.Repository
|
||||
return voucher.VoucherID;
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateStatus(Voucher voucher)
|
||||
{
|
||||
string status;
|
||||
if (!voucher.Printed)
|
||||
status = "running";
|
||||
else if (voucher.Settlements.Count(x => x.Settled == SettleOption.Unsettled) != 0 && voucher.Void == false)
|
||||
status = "printed";
|
||||
else
|
||||
status = null;
|
||||
UpdateStatus(voucher.TableID, voucher.VoucherID, status);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -67,7 +67,8 @@ namespace Tanshu.Accounts.Repository
|
||||
}
|
||||
UpdateSettlements(voucher, session);
|
||||
session.Save(voucher);
|
||||
UpdateTable(voucher, session);
|
||||
using (var ft = new FoodTableBI(session, true))
|
||||
ft.UpdateStatus(voucher);
|
||||
trans.Commit();
|
||||
return addedKot == null ? (int?)null : addedKot.KotID;
|
||||
}
|
||||
@ -82,13 +83,13 @@ namespace Tanshu.Accounts.Repository
|
||||
voucher.Settlements.Add(new VoucherSettlement() { Amount = amount, Settled = SettleOption.Amount });
|
||||
else
|
||||
voucher.Settlements.Single(x => x.Settled == SettleOption.Amount).Amount = amount;
|
||||
|
||||
|
||||
var roundoff = Math.Round(amount) - amount;
|
||||
if (voucher.Settlements.Count(x => x.Settled == SettleOption.RoundOff) == 0)
|
||||
voucher.Settlements.Add(new VoucherSettlement() { Amount = roundoff, Settled = SettleOption.RoundOff });
|
||||
else
|
||||
voucher.Settlements.Single(x => x.Settled == SettleOption.RoundOff).Amount = roundoff;
|
||||
|
||||
|
||||
var balance = voucher.Settlements.Where(x => x.Settled != SettleOption.Unsettled).Sum(x => x.Amount) * -1;
|
||||
if (voucher.Settlements.Count(x => x.Settled == SettleOption.Unsettled) == 0)
|
||||
voucher.Settlements.Add(new VoucherSettlement() { Amount = balance, Settled = SettleOption.Unsettled });
|
||||
@ -144,7 +145,8 @@ namespace Tanshu.Accounts.Repository
|
||||
}
|
||||
UpdateSettlements(voucher, session);
|
||||
session.Update(voucher);
|
||||
UpdateTable(voucher, session);
|
||||
using (var ft = new FoodTableBI(session, true))
|
||||
ft.UpdateStatus(voucher);
|
||||
trans.Commit();
|
||||
if (addedKot == null)
|
||||
return null;
|
||||
@ -153,21 +155,21 @@ namespace Tanshu.Accounts.Repository
|
||||
}
|
||||
}
|
||||
}
|
||||
static private void UpdateTable(Voucher voucher, ISession session)
|
||||
{
|
||||
using (var ft = new FoodTableBI(session, true))
|
||||
{
|
||||
string status;
|
||||
if (!voucher.Printed)
|
||||
status = "running";
|
||||
else if (voucher.Settlements.Count(x => x.Settled == SettleOption.Unsettled) != 0 && voucher.Void == false)
|
||||
status = "printed";
|
||||
else
|
||||
status = null;
|
||||
ft.UpdateStatus(voucher.TableID, voucher.VoucherID, status);
|
||||
}
|
||||
}
|
||||
static public Voucher GetVoucher(int voucherID)
|
||||
//static private void UpdateTable(Voucher voucher, ISession session)
|
||||
//{
|
||||
// using (var ft = new FoodTableBI(session, true))
|
||||
// {
|
||||
// string status;
|
||||
// if (!voucher.Printed)
|
||||
// status = "running";
|
||||
// else if (voucher.Settlements.Count(x => x.Settled == SettleOption.Unsettled) != 0 && voucher.Void == false)
|
||||
// status = "printed";
|
||||
// else
|
||||
// status = null;
|
||||
// ft.UpdateStatus(voucher.TableID, voucher.VoucherID, status);
|
||||
// }
|
||||
//}
|
||||
static public Voucher Get(int voucherID)
|
||||
{
|
||||
using (var session = SessionManager.Session)
|
||||
{
|
||||
@ -198,11 +200,12 @@ namespace Tanshu.Accounts.Repository
|
||||
{
|
||||
using (var trans = session.BeginTransaction())
|
||||
{
|
||||
var saleVoucher = session.Get<Voucher>(voucherID);
|
||||
saleVoucher.Void = true;
|
||||
saleVoucher.VoidReason = reason;
|
||||
session.Save(saleVoucher);
|
||||
UpdateTable(saleVoucher, session);
|
||||
var voucher = session.Get<Voucher>(voucherID);
|
||||
voucher.Void = true;
|
||||
voucher.VoidReason = reason;
|
||||
session.Save(voucher);
|
||||
using (var ft = new FoodTableBI(session, true))
|
||||
ft.UpdateStatus(voucher);
|
||||
trans.Commit();
|
||||
}
|
||||
}
|
||||
@ -223,7 +226,8 @@ namespace Tanshu.Accounts.Repository
|
||||
voucher.User = user;
|
||||
voucher.LastEditDate = DbValues.Date;
|
||||
session.Update(voucher);
|
||||
UpdateTable(voucher, session);
|
||||
using (var ft = new FoodTableBI(session, true))
|
||||
ft.UpdateStatus(voucher);
|
||||
trans.Commit();
|
||||
}
|
||||
}
|
||||
|
||||
@ -21,7 +21,7 @@ namespace Tanshu.Accounts.Repository
|
||||
{
|
||||
using (var session = SessionManager.Session)
|
||||
{
|
||||
string query = @"SELECT ISNULL('K-' + CAST(MAX(CAST(SUBSTRING(KotID, 3,8) AS int)) + 1 AS nvarchar(8)), 'K-1') FROM Entities_Vouchers";
|
||||
const string query = @"SELECT ISNULL('K-' + CAST(MAX(CAST(SUBSTRING(KotID, 3,8) AS int)) + 1 AS nvarchar(8)), 'K-1') FROM Entities_Vouchers";
|
||||
var sqlQuery = session.CreateSQLQuery(query);
|
||||
return (string)sqlQuery.UniqueResult();
|
||||
}
|
||||
@ -33,7 +33,7 @@ namespace Tanshu.Accounts.Repository
|
||||
{
|
||||
using (var session = SessionManager.Session)
|
||||
{
|
||||
string query = @"SELECT ISNULL('S-' + CAST(MAX(CAST(SUBSTRING(Code, 3,8) AS int)) + 1 AS nvarchar(8)), 'S-1') FROM Entities_Kots";
|
||||
const string query = @"SELECT ISNULL('S-' + CAST(MAX(CAST(SUBSTRING(Code, 3,8) AS int)) + 1 AS nvarchar(8)), 'S-1') FROM Entities_Kots";
|
||||
var sqlQuery = session.CreateSQLQuery(query);
|
||||
return (string)sqlQuery.UniqueResult();
|
||||
}
|
||||
@ -45,7 +45,7 @@ namespace Tanshu.Accounts.Repository
|
||||
{
|
||||
using (var session = SessionManager.Session)
|
||||
{
|
||||
string query = @"
|
||||
const string query = @"
|
||||
DECLARE @BillID nvarchar(10)
|
||||
SELECT @BillID = ISNULL(CAST(MAX(CAST(REPLACE(BillID, '-', '') AS int)) + 1 AS nvarchar(9)), '010001') FROM Entities_Vouchers WHERE BillID LIKE '__-____'
|
||||
IF LEN(@BillID) = 5
|
||||
|
||||
@ -11,39 +11,39 @@ namespace Tanshu.Accounts.Contracts
|
||||
{
|
||||
public static class Session
|
||||
{
|
||||
private static Dictionary<string, bool> roles;
|
||||
private static User currentUser;
|
||||
private static Dictionary<string, bool> _roles;
|
||||
private static User _currentUser;
|
||||
public static bool IsAuthenticated { get; private set; }
|
||||
public static User User
|
||||
{
|
||||
get
|
||||
{
|
||||
return currentUser;
|
||||
return _currentUser;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value != null)
|
||||
{
|
||||
currentUser = value;
|
||||
_currentUser = value;
|
||||
IsAuthenticated = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
currentUser = null;
|
||||
_currentUser = null;
|
||||
IsAuthenticated = false;
|
||||
roles = null;
|
||||
_roles = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
public static bool IsAllowed(RoleConstants role)
|
||||
{
|
||||
if (currentUser == null)
|
||||
if (_currentUser == null)
|
||||
return false;
|
||||
if (roles == null)
|
||||
roles = new Dictionary<string, bool>();
|
||||
if (!roles.ContainsKey(role.Role))
|
||||
roles.Add(role.Role, MembershipBI.IsUserInRole(currentUser.UserID, role.Role));
|
||||
return roles[role.Role];
|
||||
if (_roles == null)
|
||||
_roles = new Dictionary<string, bool>();
|
||||
if (!_roles.ContainsKey(role.Role))
|
||||
_roles.Add(role.Role, MembershipBI.IsUserInRole(_currentUser.UserID, role.Role));
|
||||
return _roles[role.Role];
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user