2011-01-30 07:14:05 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using Tanshu.Accounts.Contracts;
|
|
|
|
|
using Tanshu.Accounts.Entities;
|
2011-02-09 12:03:22 +00:00
|
|
|
|
using Tanshu.Common;
|
2011-06-23 12:47:48 +00:00
|
|
|
|
using Tanshu.Common.Helpers;
|
2011-01-30 07:14:05 +00:00
|
|
|
|
|
|
|
|
|
namespace Tanshu.Accounts.Repository
|
|
|
|
|
{
|
|
|
|
|
public class SalesAnalysisBI
|
|
|
|
|
{
|
2011-02-09 12:03:22 +00:00
|
|
|
|
public ICollection<SalesAnalysisDetail> GetSaleDetail(DateTime startDate, DateTime finishDate)
|
2011-01-30 07:14:05 +00:00
|
|
|
|
{
|
2011-02-09 12:03:22 +00:00
|
|
|
|
|
|
|
|
|
startDate = startDate.Date.AddHours(6);
|
|
|
|
|
finishDate = finishDate.Date.AddDays(1).AddHours(5);
|
|
|
|
|
if (finishDate <= startDate)
|
|
|
|
|
return new List<SalesAnalysisDetail>();
|
|
|
|
|
|
2011-01-30 07:14:05 +00:00
|
|
|
|
using (var session = SessionManager.Session)
|
|
|
|
|
{
|
2011-02-09 12:03:22 +00:00
|
|
|
|
var query = @"
|
|
|
|
|
select concat(p.Name, ' ', p.Units) as Product, Sum(i.Quantity) as Amount
|
2011-02-18 16:54:48 +00:00
|
|
|
|
from Voucher v
|
|
|
|
|
inner join v.Kots k
|
|
|
|
|
inner join k.Inventories i
|
2011-02-09 12:03:22 +00:00
|
|
|
|
inner join i.Product p
|
2011-03-11 18:49:48 +00:00
|
|
|
|
where v.Date >= :startDate and v.Date <= :finishDate 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)
|
2011-02-09 12:03:22 +00:00
|
|
|
|
group by concat(p.Name, ' ', p.Units), p.ProductGroup
|
|
|
|
|
order by p.ProductGroup, concat(p.Name, ' ', p.Units)
|
|
|
|
|
";
|
|
|
|
|
var list = session
|
|
|
|
|
.CreateQuery(query)
|
|
|
|
|
.SetParameter("startDate", startDate)
|
|
|
|
|
.SetParameter("finishDate", finishDate)
|
2011-02-18 16:54:48 +00:00
|
|
|
|
.SetParameter("noCharge", SettleOption.NoCharge)
|
2011-03-11 18:49:48 +00:00
|
|
|
|
.SetParameter("unsettled", SettleOption.Unsettled)
|
|
|
|
|
.SetParameter("amount", SettleOption.Amount)
|
|
|
|
|
.SetParameter("roundoff", SettleOption.RoundOff)
|
2011-02-09 12:03:22 +00:00
|
|
|
|
.List<object[]>();
|
|
|
|
|
var outList = new OrderedDictionary<string, SalesAnalysisDetail>();
|
|
|
|
|
foreach (var item in list)
|
|
|
|
|
outList.Add((string)item[0], new SalesAnalysisDetail() { Product = (string)item[0], Sale = (decimal)item[1] });
|
|
|
|
|
|
|
|
|
|
query = @"
|
|
|
|
|
select concat(p.Name, ' ', p.Units) as Product, Sum(i.Quantity) as Amount
|
2011-02-18 16:54:48 +00:00
|
|
|
|
from Voucher v
|
|
|
|
|
inner join v.Kots k
|
|
|
|
|
inner join k.Inventories i
|
2011-02-09 12:03:22 +00:00
|
|
|
|
inner join i.Product p
|
2011-03-11 18:49:48 +00:00
|
|
|
|
where v.Date >= :startDate and v.Date <= :finishDate and v.Void = false
|
|
|
|
|
and exists (select Voucher from VoucherSettlement vs where vs.Voucher = v and vs.Settled = :noCharge)
|
2011-02-09 12:03:22 +00:00
|
|
|
|
group by concat(p.Name, ' ', p.Units), p.ProductGroup
|
|
|
|
|
order by p.ProductGroup, concat(p.Name, ' ', p.Units)
|
|
|
|
|
";
|
|
|
|
|
list = session
|
|
|
|
|
.CreateQuery(query)
|
|
|
|
|
.SetParameter("startDate", startDate)
|
|
|
|
|
.SetParameter("finishDate", finishDate)
|
2011-02-18 16:54:48 +00:00
|
|
|
|
.SetParameter("noCharge", SettleOption.NoCharge)
|
2011-02-09 12:03:22 +00:00
|
|
|
|
.List<object[]>();
|
|
|
|
|
foreach (var item in list)
|
|
|
|
|
if (outList.ContainsKey((string)item[0]))
|
|
|
|
|
outList[(string)item[0]].NC = (decimal)item[1];
|
|
|
|
|
else
|
|
|
|
|
outList.Add((string)item[0], new SalesAnalysisDetail() { Product = (string)item[0], NC = (decimal)item[1] });
|
|
|
|
|
|
|
|
|
|
return outList.Values;
|
2011-01-30 07:14:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public IList<SalesAnalysis> GetSale(DateTime startDate, DateTime finishDate)
|
|
|
|
|
{
|
2011-02-09 12:03:22 +00:00
|
|
|
|
startDate = startDate.Date.AddHours(6);
|
|
|
|
|
finishDate = finishDate.Date.AddDays(1).AddHours(5);
|
|
|
|
|
if (finishDate <= startDate)
|
|
|
|
|
return new List<SalesAnalysis>();
|
2011-01-31 20:33:22 +00:00
|
|
|
|
using (var session = SessionManager.Session)
|
|
|
|
|
{
|
2011-03-11 18:49:48 +00:00
|
|
|
|
const string query = @"
|
2011-02-09 12:03:22 +00:00
|
|
|
|
select g.GroupType as GroupType, Sum(i.Quantity * i.Rate * (1 - i.Discount)) as Amount
|
2011-02-18 16:54:48 +00:00
|
|
|
|
from Voucher v
|
|
|
|
|
inner join v.Kots k
|
|
|
|
|
inner join k.Inventories i
|
2011-02-09 12:03:22 +00:00
|
|
|
|
inner join i.Product p
|
|
|
|
|
inner join p.ProductGroup g
|
2011-03-11 18:49:48 +00:00
|
|
|
|
where v.Date >= :startDate and v.Date <= :finishDate 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)
|
2011-02-09 12:03:22 +00:00
|
|
|
|
group by g.GroupType
|
|
|
|
|
order by g.GroupType
|
|
|
|
|
";
|
|
|
|
|
var list = session
|
|
|
|
|
.CreateQuery(query)
|
|
|
|
|
.SetParameter("startDate", startDate)
|
|
|
|
|
.SetParameter("finishDate", finishDate)
|
2011-02-18 16:54:48 +00:00
|
|
|
|
.SetParameter("noCharge", SettleOption.NoCharge)
|
|
|
|
|
.SetParameter("unsettled", SettleOption.Unsettled)
|
2011-03-11 18:49:48 +00:00
|
|
|
|
.SetParameter("amount", SettleOption.Amount)
|
|
|
|
|
.SetParameter("roundoff", SettleOption.RoundOff)
|
2011-02-09 12:03:22 +00:00
|
|
|
|
.List<object[]>();
|
|
|
|
|
var outList = new List<SalesAnalysis>();
|
2011-02-18 16:54:48 +00:00
|
|
|
|
decimal amount = 0;
|
2011-02-09 12:03:22 +00:00
|
|
|
|
foreach (var item in list)
|
2011-02-18 16:54:48 +00:00
|
|
|
|
{
|
|
|
|
|
amount += (decimal)item[1];
|
2011-02-09 12:03:22 +00:00
|
|
|
|
outList.Add(new SalesAnalysis() { GroupType = (string)item[0], Amount = (decimal)item[1] });
|
2011-02-18 16:54:48 +00:00
|
|
|
|
}
|
|
|
|
|
outList.Add(new SalesAnalysis() { GroupType = "Total Settled", Amount = amount });
|
2011-02-09 12:03:22 +00:00
|
|
|
|
return GetSettlement(outList, startDate, finishDate);
|
2011-01-30 07:14:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2011-06-23 12:47:48 +00:00
|
|
|
|
public IList<BillDetail> GetBillDetails(DateTime startDate, DateTime finishDate)
|
|
|
|
|
{
|
|
|
|
|
startDate = startDate.Date.AddHours(6);
|
|
|
|
|
finishDate = finishDate.Date.AddDays(1).AddHours(5);
|
|
|
|
|
if (finishDate <= startDate)
|
|
|
|
|
return new List<BillDetail>();
|
|
|
|
|
using (var session = SessionManager.Session)
|
|
|
|
|
{
|
|
|
|
|
const string query = @"
|
|
|
|
|
select v.Date, v.BillID, s.Settled, s.Amount
|
|
|
|
|
from Voucher v
|
|
|
|
|
inner join v.Settlements s
|
|
|
|
|
where v.Date >= :startDate and v.Date <= :finishDate
|
|
|
|
|
order by v.BillID, s.Settled
|
|
|
|
|
";
|
|
|
|
|
var list = session
|
|
|
|
|
.CreateQuery(query)
|
|
|
|
|
.SetParameter("startDate", startDate)
|
|
|
|
|
.SetParameter("finishDate", finishDate)
|
|
|
|
|
.List<object[]>();
|
|
|
|
|
var outList = new List<BillDetail>();
|
|
|
|
|
foreach (var item in list)
|
|
|
|
|
{
|
|
|
|
|
outList.Add(new BillDetail()
|
|
|
|
|
{
|
|
|
|
|
Date = (DateTime)item[0],
|
|
|
|
|
BillID = (string)item[1],
|
|
|
|
|
Settlement = ((SettleOption)item[2]).Display(),
|
|
|
|
|
Amount = (decimal)item[3]
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
return outList;
|
|
|
|
|
}
|
|
|
|
|
}
|
2011-03-11 18:49:48 +00:00
|
|
|
|
private static IList<SalesAnalysis> GetSettlement(IList<SalesAnalysis> outList, DateTime startDate, DateTime finishDate)
|
2011-01-30 07:14:05 +00:00
|
|
|
|
{
|
2011-02-09 12:03:22 +00:00
|
|
|
|
outList.Add(new SalesAnalysis() { GroupType = " -- ", Amount = 0 });
|
|
|
|
|
if (finishDate <= startDate)
|
|
|
|
|
return new List<SalesAnalysis>();
|
2011-01-30 07:14:05 +00:00
|
|
|
|
using (var session = SessionManager.Session)
|
|
|
|
|
{
|
2011-02-18 16:54:48 +00:00
|
|
|
|
//select v.Settled, Sum(i.Quantity * i.Rate * (1 - i.Discount) * (1 + i.ServiceCharge) * (1 + i.Tax)) as Amount
|
2011-03-11 18:49:48 +00:00
|
|
|
|
const string query = @"
|
|
|
|
|
select s.Settled, Sum(s.Amount)
|
2011-02-18 16:54:48 +00:00
|
|
|
|
from Voucher v
|
2011-03-11 18:49:48 +00:00
|
|
|
|
inner join v.Settlements s
|
|
|
|
|
where v.Date >= :startDate and v.Date <= :finishDate and v.Void = false
|
|
|
|
|
group by s.Settled
|
|
|
|
|
order by s.Settled
|
2011-02-09 12:03:22 +00:00
|
|
|
|
";
|
|
|
|
|
var list = session
|
|
|
|
|
.CreateQuery(query)
|
|
|
|
|
.SetParameter("startDate", startDate)
|
|
|
|
|
.SetParameter("finishDate", finishDate)
|
|
|
|
|
.List<object[]>();
|
2011-02-18 16:54:48 +00:00
|
|
|
|
decimal amount = 0;
|
2011-02-09 12:03:22 +00:00
|
|
|
|
foreach (var item in list)
|
2011-02-18 16:54:48 +00:00
|
|
|
|
{
|
|
|
|
|
amount += (decimal)item[1];
|
2011-06-23 12:47:48 +00:00
|
|
|
|
outList.Add(new SalesAnalysis() { GroupType = ((SettleOption)item[0]).Display(), Amount = (decimal)item[1] });
|
2011-02-18 16:54:48 +00:00
|
|
|
|
}
|
|
|
|
|
outList.Add(new SalesAnalysis() { GroupType = "Total", Amount = amount });
|
2011-02-09 12:03:22 +00:00
|
|
|
|
return GetOtherDetails(outList, startDate, finishDate);
|
2011-01-30 07:14:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2011-03-11 18:49:48 +00:00
|
|
|
|
private static IList<SalesAnalysis> GetOtherDetails(IList<SalesAnalysis> outList, DateTime startDate, DateTime finishDate)
|
2011-01-30 07:14:05 +00:00
|
|
|
|
{
|
2011-02-09 12:03:22 +00:00
|
|
|
|
outList.Add(new SalesAnalysis() { GroupType = " -- ", Amount = 0 });
|
|
|
|
|
if (finishDate <= startDate)
|
|
|
|
|
return new List<SalesAnalysis>();
|
2011-01-30 07:14:05 +00:00
|
|
|
|
using (var session = SessionManager.Session)
|
|
|
|
|
{
|
2011-02-09 12:03:22 +00:00
|
|
|
|
#region Service Charge
|
|
|
|
|
var query = @"
|
|
|
|
|
select Sum(i.Quantity * i.Rate * (1 - i.Discount) * i.ServiceCharge)
|
2011-02-18 16:54:48 +00:00
|
|
|
|
from Voucher v
|
|
|
|
|
inner join v.Kots k
|
|
|
|
|
inner join k.Inventories i
|
2011-03-11 18:49:48 +00:00
|
|
|
|
where v.Date >= :startDate and v.Date <= :finishDate 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)
|
2011-02-09 12:03:22 +00:00
|
|
|
|
";
|
|
|
|
|
var amt = session
|
2011-03-11 18:49:48 +00:00
|
|
|
|
.CreateQuery(query)
|
|
|
|
|
.SetParameter("startDate", startDate)
|
|
|
|
|
.SetParameter("finishDate", finishDate)
|
|
|
|
|
.SetParameter("noCharge", SettleOption.NoCharge)
|
|
|
|
|
.SetParameter("unsettled", SettleOption.Unsettled)
|
|
|
|
|
.SetParameter("amount", SettleOption.Amount)
|
|
|
|
|
.SetParameter("roundoff", SettleOption.RoundOff)
|
|
|
|
|
.UniqueResult() ?? 0M;
|
2011-02-09 12:03:22 +00:00
|
|
|
|
outList.Add(new SalesAnalysis() { GroupType = "Service Charge", Amount = (decimal)amt });
|
|
|
|
|
#endregion
|
|
|
|
|
#region Tax
|
2011-01-30 07:14:05 +00:00
|
|
|
|
query = @"
|
2011-02-09 12:03:22 +00:00
|
|
|
|
select i.Tax, Sum(i.Quantity * i.Rate * (1 - i.Discount) * (1 + i.ServiceCharge) * i.Tax)
|
2011-02-18 16:54:48 +00:00
|
|
|
|
from Voucher v
|
|
|
|
|
inner join v.Kots k
|
|
|
|
|
inner join k.Inventories i
|
2011-03-11 18:49:48 +00:00
|
|
|
|
where v.Date >= :startDate and v.Date <= :finishDate 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)
|
2011-02-09 12:03:22 +00:00
|
|
|
|
group by i.Tax
|
|
|
|
|
";
|
|
|
|
|
var list = session
|
|
|
|
|
.CreateQuery(query)
|
|
|
|
|
.SetParameter("startDate", startDate)
|
|
|
|
|
.SetParameter("finishDate", finishDate)
|
2011-02-18 16:54:48 +00:00
|
|
|
|
.SetParameter("noCharge", SettleOption.NoCharge)
|
|
|
|
|
.SetParameter("unsettled", SettleOption.Unsettled)
|
2011-03-11 18:49:48 +00:00
|
|
|
|
.SetParameter("amount", SettleOption.Amount)
|
|
|
|
|
.SetParameter("roundoff", SettleOption.RoundOff)
|
2011-02-09 12:03:22 +00:00
|
|
|
|
.List<object[]>();
|
|
|
|
|
foreach (var item in list)
|
|
|
|
|
outList.Add(new SalesAnalysis() { GroupType = string.Format("Tax {0:P}", (decimal)item[0]), Amount = (decimal)item[1] });
|
|
|
|
|
#endregion
|
|
|
|
|
return outList;
|
2011-01-30 07:14:05 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|