李狗蛋 58d7a96f65 Revert "11"
This reverts commit 99f9c1f80a332b10474965e0d2d4264166326490.
2025-03-14 20:17:51 +08:00

723 lines
34 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Kingdee.BOS.App.Data;
using Kingdee.BOS;
using Kingdee.BOS.Contracts.Report;
using Kingdee.BOS.Core.Report;
using Kingdee.BOS.Util;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Kingdee.BOS.Orm.DataEntity;
using System.Data;
using Pilot.Report.Exploitation.PublicClass;
using Pilot.Report.Exploitation.Common;
namespace Pilot.Report.Exploitation.ResultsKanbanSummary
{
[Description("【列表插件】绩效看板汇总报表【报表】"), HotUpdate]
public class ResultsKanbanSumReport: SysReportBaseService
{
private string tableNameView = EnvironmentTEST.tableNameView_TEST;
/// <summary>
/// 初始化
/// </summary>
public override void Initialize()
{
base.Initialize();
this.ReportProperty.ReportName = new LocaleValue("绩效看板汇总", base.Context.UserLocale.LCID);
this.ReportProperty.IsUIDesignerColumns = false;
// 简单账表类型:普通、树形、分页
this.ReportProperty.ReportType = ReportType.REPORTTYPE_NORMAL;
this.IsCreateTempTableByPlugin = true;
//
this.IsCreateTempTableByPlugin = true;
//
this.ReportProperty.IsGroupSummary = true;
//
this.ReportProperty.SimpleAllCols = false;
// 单据主键两行FID相同则为同一单的两条分录单据编号可以不重复显示
this.ReportProperty.PrimaryKeyFieldName = "FID";
//
this.ReportProperty.IsDefaultOnlyDspSumAndDetailData = true;
// 设置精度控制
var list = new List<DecimalControlField>
{
new DecimalControlField("FDECIMALS", "OrigInvoiceAmount"),
new DecimalControlField("FDECIMALS", "ExchangeRate"),
new DecimalControlField("FDECIMALS", "InvoiceAmountTHB"),
new DecimalControlField("FDECIMALS", "MonthEndExRate"),
new DecimalControlField("FDECIMALS", "RevaluationAountInTHB"),
new DecimalControlField("FDECIMALS", "UnrealizedGainLoss"),
};
this.ReportProperty.DecimalControlFieldList = list;
}
/// <summary>
/// 报表列表头
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
public override ReportHeader GetReportHeaders(IRptParams filter)
{
DynamicObject customFilter = filter.FilterParameter.CustomFilter;
base.GetReportHeaders(filter);
ReportHeader header = new ReportHeader();
// 下单时间
string fDate = customFilter["F_Date"]?.ToString();
int year = Convert.ToInt32(fDate.Split('-')[0]);
//int year = 2011;
header.AddChild("ID", new LocaleValue("序号"), SqlStorageType.Sqlvarchar);
header.AddChild("DetailArea", new LocaleValue("明细区域"), SqlStorageType.Sqlvarchar);
header.AddChild("Salesperson", new LocaleValue("销售员"), SqlStorageType.Sqlvarchar);
header.AddChild("FPERFORMANCETARGETS", new LocaleValue(""+year+"年业绩目标(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("Pilot2024", new LocaleValue(""+year+ "派诺业绩(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("SiNO2024", new LocaleValue(""+year+ "兴诺业绩(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("WuHanPilot2024", new LocaleValue(""+year+ "武汉派诺(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("Discovery2024", new LocaleValue(""+year+ "碳索业绩(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("HongKongPilot2024", new LocaleValue(""+year+ "香港派诺业绩(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("HuaXiaYunLian2024", new LocaleValue(""+year+ "华夏云联业绩(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("UsualAlterAmount", new LocaleValue("往年订单变更金额(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("SumAmount2024", new LocaleValue(""+year+ "合计业绩额(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("SumAmount2024", new LocaleValue(""+year+ "合计业绩额(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("AttainmentRate", new LocaleValue("达标率"), SqlStorageType.Sqlvarchar);
header.AddChild("SumAmount2023", new LocaleValue(""+(year-1)+ "合计业绩额(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("SameGrowthRate", new LocaleValue("同比增长率"), SqlStorageType.Sqlvarchar);
header.AddChild("FPAYMENTSUM", new LocaleValue(""+year+"回款目标(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("Payment", new LocaleValue("回款额(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("PaymentRate", new LocaleValue("回款率"), SqlStorageType.Sqlvarchar);
header.AddChild("ShippedReceivables", new LocaleValue("已发货应收款(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("ExpiredReceivables", new LocaleValue("已到期应收款(万元)"), SqlStorageType.SqlDecimal);
header.AddChild("SBU", new LocaleValue("SBU"), SqlStorageType.Sqlvarchar);
foreach (var item in header.GetChilds())
{
item.Width = 160;
}
return header;
}
/// <summary>
/// 显示报表数据
/// </summary>
/// <param name="filter"></param>
/// <param name="tableName"></param>
public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName)
{
DynamicObject customFilter = filter.FilterParameter.CustomFilter;
// 销售员列表
var salesperson = (customFilter["F_Salesperson"] as DynamicObjectCollection)?.Select(n => (n["F_Salesperson"] as DynamicObject)["msterID"].ToString()).ToList();
// 销售员
var salespersonString = salesperson == null ? "" : string.Join(",", salesperson);
// 组织列表
var organizationList = (customFilter["FZuZhi"] as DynamicObjectCollection)?.Select(n => (n["FZuZhi"] as DynamicObject)["ID"].ToString()).ToList();
// 组织
var organization = organizationList == null ? "" : (string.Join(",", organizationList));
// 开始日期
string fStrartDate = customFilter["FStrartDate"]?.ToString();
// 结束日期
string fEndDate = customFilter["FEndDate"]?.ToString();
// 审核开始日期
string fSDate = customFilter["FSDate"]?.ToString();
// 审核结束日期
string fEDate = customFilter["FEDate"]?.ToString();
// 下单时间
string fDate = customFilter["F_Date"]?.ToString();
int year = Convert.ToInt32(fDate.Split('-')[0]);
base.BuilderReportSqlAndTempTable(filter, tableName);
string sql = string.Format(@"/*dialect*/
Select
CASE WHEN ISNULL(W4.FNAME,'') = '' THEN ISNULL(A.区域,'') ELSE ISNULL(A2.区域,'') END as 'Area',
CASE WHEN ISNULL(W4.FNAME,'') = '' THEN ISNULL(A.明细区域,'') ELSE ISNULL(A2.明细区域,'') END as 'DetailArea',
CASE WHEN ISNULL(W4.FNAME,'') = '' THEN W1.FNAME ELSE W4.FNAME END as 'Salesperson',
ISNULL(E.FPERFORMANCETARGETS,0) as 'FPERFORMANCETARGETS', --> 2024年业绩目标万元
CASE WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 100302 AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 100302 THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024Pilot', -->2024派诺
CASE WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 100303 AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 100303 THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024SiNO', -->2024兴诺
CASE WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 100305 AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 100305 THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024WuHanPilot', -->2024武汉兴诺
CASE WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 438223 AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 438223 THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024Discovery', -->2024碳索
CASE WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 438224 AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 438224 THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024HongKongPilot', -->2024香港兴诺
CASE WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 533896 AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 533896 THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024HuaXiaYunLian', -->2024华夏云联
CASE WHEN YEAR(D.FDATE) < {0} AND D.FSalerId = D.FSALERID
THEN
ISNULL(((SELECT
CAST(JSON_VALUE(CAST(FJSONDATA AS NVARCHAR(MAX)), '$.SaleOrderFinance[0].BillAllAmount_LC') as decimal(23,10) ) AS FPrice
From T_SCM_BILLCHANGEVERSIONS
WHere FVERSION =
(
Select MAX(FVERSION) as FVERSION From T_SCM_BILLCHANGEVERSIONS
WHERE
FFORMID = 'SAL_SaleOrder'
AND FBILLNO = D.FBILLNO
)
AND FFORMID = 'SAL_SaleOrder'
AND FBILLNO = D.FBILLNO)
-
(SELECT
CAST(JSON_VALUE(CAST(FJSONDATA AS NVARCHAR(MAX)), '$.SaleOrderFinance[0].BillAllAmount_LC') as decimal(23,10) ) AS FPrice
From T_SCM_BILLCHANGEVERSIONS
WHere FVERSION =
(
Select MIN(FVERSION) as FVERSION From T_SCM_BILLCHANGEVERSIONS
WHERE
FFORMID = 'SAL_SaleOrder'
AND FBILLNO = D.FBILLNO
)
AND FFORMID = 'SAL_SaleOrder'
AND FBILLNO = D.FBILLNO))/10000,0)
ELSE 0
END as 'UsualAlterAmount', --> 往年订单变更金额(派诺&子公司合计)
CASE WHEN YEAR(D.FDATE) = {0} AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024SumAmount', -->2024合计业绩额
CASE WHEN YEAR(D.FDATE) = {1} AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {1} THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2023SumAmount', -->2023合计业绩额
ISNULL(E.FPAYMENTSUM,0) as 'FPAYMENTSUM', -->回款目标(万元)
ISNULL(F.FALLAMOUNT,0)/10000 as 'Payment', --> 回款额(派诺&子公司合计)
(round( (DD.FBILLALLAMOUNT_LC-(isnull(ae.累计收款,0)))*isnull(W3.FSHARERATE,100)/100,2))-
(round( DD.FBILLALLAMOUNT_LC-ISNULL(Q.累计发货金额,0)*ISNULL(W3.FSHARERATE,100)/100,2))
as 'ShippedReceivables', --> 已发货应收款
ISNULL(XX.到期金额,0) as 'ExpiredReceivables', --> 已到期应收款
CASE WHEN ISNULL(W4.FNAME,'') = '' THEN ISNULL(A.区域,'') ELSE ISNULL(A2.区域,'') END as 'SBU'
INTO #TempTable1
From
T_SAL_ORDER D --销售订单
JOIN T_SAL_ORDERFIN DD on D.FID = DD.FID
LEFT JOIN
V_BD_SALESMAN_L W1 on W1.fid = D.FSALERID
LEFT JOIN
T_PerformanceSharing W2 on W2.FSOURCEBILLNO = D.FBILLNO
LEFT JOIN
T_PerformanceSharingEntry W3 on W2.FID = W3.FID
LEFT JOIN
V_BD_SALESMAN_L W4 on W3.FSALEID = W4.fid
LEFT JOIN
{2} A on W1.FNAME = A.名称
LEFT JOIN
{2} A2 on W4.FNAME = A2.名称
LEFT JOIN
(
SELECT a.F_Papercontract,
avg(d.FCURWRITTENOFFAMOUNT) as '累计收款'
FROM t_AR_receivable A
INNER JOIN T_AR_RECEIVABLEENTRY E ON E.FID =A.FID
INNER JOIN T_AR_RECMacthLogENTRY B ON A.FBILLNO = B.FSRCBILLNO
INNER JOIN T_AR_RECMacthLog C ON C.FID = B.FID
INNER JOIN T_AR_RECMacthLogENTRY D ON D.FID = B.FID
AND D.FSOURCETYPE = '36cf265bd8c3452194ed9c83ec5e73d2'
WHERE
1=1
group by a.F_Papercontract
) AE ON AE.F_Papercontract = D.F_contractnumber
LEFT JOIN
(
SELECT F_Papercontract,MAX(CONVERT(NVARCHAR(10), A.FDATE,23)) AS '发货日期',SUM(B.FBILLALLAMOUNT_LC) AS '累计发货金额' FROM T_SAL_DELIVERYNOTICE A
INNER JOIN T_SAL_DELIVERYNOTICEFIN B ON A.FID =B.FID
WHERE A.FDOCUMENTSTATUS= 'C'
GROUP BY A.F_Papercontract
) Q ON Q.F_PAPERCONTRACT = D.F_contractnumber --获取发货通知单最大的发货日期
LEFT JOIN (Select FID,SUM(到期金额) as '到期金额' From View_Table_JXBB GROUP BY FID) XX on XX.FID = D.FID
LEFT JOIN
(Select
A1.F_MBBA_COMBO_QTR as 'FDate',
A2.FPERFORMANCETARGETS as 'FPERFORMANCETARGETS',
A2.FPAYMENTSUM as 'FPAYMENTSUM',
A2.FNAME as 'FNAME'
From
MBBA_t_Cust100002 A1
JOIN
MBBA_t_Cust_Entry100003 A2
on A1.FID = A2.FID
Where A1.FDOCUMENTSTATUS = 'C'
AND A1.F_MBBA_Combo_qtr = {0}) E --业绩回款目标单
on E.FNAME = D.FSALERID
LEFT JOIN
(Select
a1.FORDERNUMBER,
SUM(a1.FALLAMOUNT) as 'FALLAMOUNT'
From
T_AR_RECEIVABLEENTRY a1
JOIN
T_AR_RECEIVABLE a2
on a1.FID = a2.FID
Where a1.FORDERNUMBER != '' AND a2.FSETACCOUNTTYPE = 1
GROUP BY a1.FORDERNUMBER) F --求回款的表
on D.FBILLNO = F.FORDERNUMBER
LEFT JOIN
(Select
a1.FORDERNUMBER,
SUM(a1.FALLAMOUNT) as 'FALLAMOUNT'
From
T_AR_RECEIVABLEENTRY a1
JOIN
T_AR_RECEIVABLE a2
on a1.FID = a2.FID
Where a1.FORDERNUMBER != '' AND a2.FSETACCOUNTTYPE = 1
AND a2.FENDDATE < GETDATE()
GROUP BY a1.FORDERNUMBER) G
on D.FBILLNO = G.FORDERNUMBER
LEFT JOIN
T_BD_CUSTOMER_L K on K.FCUSTID = D.FCUSTID
LEFT JOIN
(Select FNumber,FMASTERID From T_BAS_ASSISTANTDATAENTRY
Where FID = '670cc977263353'
AND FDocumentStatus = 'C'
AND FForbidStatus = 'A') D2 --合同类型#(辅助资料表)
on D.F_ORDERCATEGORY = D2.FMASTERID
-- 条件
Where D.FDocumentStatus = 'C' --AND D.FID in (Select * From #TABLEXYX)
AND D2.FNUMBER != 'Z' AND D.FSALEORGID = 100302
AND ISNULL(A.区域,'') != '碳索智控' AND D.FMANUALCLOSE != '1'
AND ISNULL(K.FNAME,'') NOT IN ('派诺科技(香港)有限公司','武汉派诺科技发展有限公司')
AND ISNULL(W1.FNAME,'') != '兴诺总'", year,year-1,tableNameView);
if (!string.IsNullOrEmpty(salespersonString))
{
sql += string.Format(@" AND B.FSALEID in ({0})", salespersonString);
}
if (!string.IsNullOrEmpty(organization))
{
sql += string.Format(@" AND D.FSaleOrgId in ({0})", organization);
}
if (!string.IsNullOrEmpty(fStrartDate))
{
sql += string.Format(@" AND D.FDate >= '{0}'", fStrartDate);
}
if (!string.IsNullOrEmpty(fEndDate))
{
sql += string.Format(@" AND D.FDate <= '{0}'", fEndDate);
}
if (!string.IsNullOrEmpty(fSDate))
{
sql += string.Format(@" AND D.FAPPROVEDATE >= '{0}'", fSDate);
}
if (!string.IsNullOrEmpty(fEDate))
{
sql += string.Format(@" AND D.FAPPROVEDATE < DATEADD(DAY, 1, CONVERT(DATE, '{0}'))", fEDate);
}
sql += string.Format(@";");
sql += string.Format(@"/*dialect*/
Select
CASE WHEN ISNULL(W4.FNAME,'') = '' THEN ISNULL(A.区域,'') ELSE ISNULL(A2.区域,'') END as 'Area',
CASE WHEN ISNULL(W4.FNAME,'') = '' THEN ISNULL(A.明细区域,'') ELSE ISNULL(A2.明细区域,'') END as 'DetailArea',
CASE WHEN ISNULL(W4.FNAME,'') = '' THEN W1.FNAME ELSE W4.FNAME END as 'Salesperson',
ISNULL(E.FPERFORMANCETARGETS,0) as 'FPERFORMANCETARGETS', --> 2024年业绩目标万元
CASE WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 100302 AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 100302 THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024Pilot', -->2024派诺
CASE WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 100303 AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 100303 THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024SiNO', -->2024兴诺
CASE WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 100305 AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 100305 THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024WuHanPilot', -->2024武汉兴诺
CASE WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 438223 AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 438223 THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024Discovery', -->2024碳索
CASE WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 438224 AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 438224 THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024HongKongPilot', -->2024香港兴诺
CASE WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 533896 AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} AND D.FSaleOrgId = 533896 THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024HuaXiaYunLian', -->2024华夏云联
CASE WHEN YEAR(D.FDATE) < {0} AND D.FSalerId = D.FSALERID
THEN
ISNULL(((SELECT
CAST(JSON_VALUE(CAST(FJSONDATA AS NVARCHAR(MAX)), '$.SaleOrderFinance[0].BillAllAmount_LC') as decimal(23,10) ) AS FPrice
From T_SCM_BILLCHANGEVERSIONS
WHere FVERSION =
(
Select MAX(FVERSION) as FVERSION From T_SCM_BILLCHANGEVERSIONS
WHERE
FFORMID = 'SAL_SaleOrder'
AND FBILLNO = D.FBILLNO
)
AND FFORMID = 'SAL_SaleOrder'
AND FBILLNO = D.FBILLNO)
-
(SELECT
CAST(JSON_VALUE(CAST(FJSONDATA AS NVARCHAR(MAX)), '$.SaleOrderFinance[0].BillAllAmount_LC') as decimal(23,10) ) AS FPrice
From T_SCM_BILLCHANGEVERSIONS
WHere FVERSION =
(
Select MIN(FVERSION) as FVERSION From T_SCM_BILLCHANGEVERSIONS
WHERE
FFORMID = 'SAL_SaleOrder'
AND FBILLNO = D.FBILLNO
)
AND FFORMID = 'SAL_SaleOrder'
AND FBILLNO = D.FBILLNO))/10000,0)
ELSE 0
END as 'UsualAlterAmount', --> 往年订单变更金额(派诺&子公司合计)
CASE WHEN YEAR(D.FDATE) = {0} AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {0} THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2024SumAmount', -->2024合计业绩额
CASE WHEN YEAR(D.FDATE) = {1} AND ISNULL(W3.FSHAREAMOUNT,-1)!=-1
THEN ISNULL(W3.FSHAREAMOUNT,0)/10000
WHEN YEAR(D.FDATE) = {1} THEN ISNULL(DD.FBILLALLAMOUNT_LC,0)/10000
ELSE 0
END as '2023SumAmount', -->2023合计业绩额
ISNULL(E.FPAYMENTSUM,0) as 'FPAYMENTSUM', -->回款目标(万元)
ISNULL(F.FALLAMOUNT,0)/10000 as 'Payment', --> 回款额(派诺&子公司合计)
(round( (DD.FBILLALLAMOUNT_LC-(isnull(ae.累计收款,0)))*isnull(W3.FSHARERATE,100)/100,2))-
(round( DD.FBILLALLAMOUNT_LC-ISNULL(Q.累计发货金额,0)*ISNULL(W3.FSHARERATE,100)/100,2))
as 'ShippedReceivables', --> 已发货应收款
ISNULL(XX.到期金额,0) as 'ExpiredReceivables', --> 已到期应收款
CASE WHEN ISNULL(W4.FNAME,'') = '' THEN ISNULL(A.区域,'') ELSE ISNULL(A2.区域,'') END as 'SBU'
INTO #TempTable2
From
T_SAL_ORDER D --销售订单
JOIN T_SAL_ORDERFIN DD on D.FID = DD.FID
LEFT JOIN
V_BD_SALESMAN_L W1 on W1.fid = D.FSALERID
LEFT JOIN
T_PerformanceSharing W2 on W2.FSOURCEBILLNO = D.FBILLNO
LEFT JOIN
T_PerformanceSharingEntry W3 on W2.FID = W3.FID
LEFT JOIN
V_BD_SALESMAN_L W4 on W3.FSALEID = W4.fid
LEFT JOIN
{2} A on W1.FNAME = A.名称
LEFT JOIN
{2} A2 on W4.FNAME = A2.名称
LEFT JOIN
(
SELECT a.F_Papercontract,
avg(d.FCURWRITTENOFFAMOUNT) as '累计收款'
FROM t_AR_receivable A
INNER JOIN T_AR_RECEIVABLEENTRY E ON E.FID =A.FID
INNER JOIN T_AR_RECMacthLogENTRY B ON A.FBILLNO = B.FSRCBILLNO
INNER JOIN T_AR_RECMacthLog C ON C.FID = B.FID
INNER JOIN T_AR_RECMacthLogENTRY D ON D.FID = B.FID
AND D.FSOURCETYPE = '36cf265bd8c3452194ed9c83ec5e73d2'
WHERE
1=1
group by a.F_Papercontract
) AE ON AE.F_Papercontract = D.F_contractnumber
LEFT JOIN
(
SELECT F_Papercontract,MAX(CONVERT(NVARCHAR(10), A.FDATE,23)) AS '发货日期',SUM(B.FBILLALLAMOUNT_LC) AS '累计发货金额' FROM T_SAL_DELIVERYNOTICE A
INNER JOIN T_SAL_DELIVERYNOTICEFIN B ON A.FID =B.FID
WHERE A.FDOCUMENTSTATUS= 'C'
GROUP BY A.F_Papercontract
) Q ON Q.F_PAPERCONTRACT = D.F_contractnumber --获取发货通知单最大的发货日期
LEFT JOIN (Select FID,SUM(到期金额) as '到期金额' From View_Table_JXBB GROUP BY FID) XX on XX.FID = D.FID
LEFT JOIN
(Select
A1.F_MBBA_COMBO_QTR as 'FDate',
A2.FPERFORMANCETARGETS as 'FPERFORMANCETARGETS',
A2.FPAYMENTSUM as 'FPAYMENTSUM',
A2.FNAME as 'FNAME'
From
MBBA_t_Cust100002 A1
JOIN
MBBA_t_Cust_Entry100003 A2
on A1.FID = A2.FID
Where A1.FDOCUMENTSTATUS = 'C'
AND A1.F_MBBA_Combo_qtr = {0}) E --业绩回款目标单
on E.FNAME = D.FSALERID
LEFT JOIN
(Select
a1.FORDERNUMBER,
SUM(a1.FALLAMOUNT) as 'FALLAMOUNT'
From
T_AR_RECEIVABLEENTRY a1
JOIN
T_AR_RECEIVABLE a2
on a1.FID = a2.FID
Where a1.FORDERNUMBER != '' AND a2.FSETACCOUNTTYPE = 1
GROUP BY a1.FORDERNUMBER) F --求回款的表
on D.FBILLNO = F.FORDERNUMBER
LEFT JOIN
(Select
a1.FORDERNUMBER,
SUM(a1.FALLAMOUNT) as 'FALLAMOUNT'
From
T_AR_RECEIVABLEENTRY a1
JOIN
T_AR_RECEIVABLE a2
on a1.FID = a2.FID
Where a1.FORDERNUMBER != '' AND a2.FSETACCOUNTTYPE = 1
AND a2.FENDDATE < GETDATE()
GROUP BY a1.FORDERNUMBER) G
on D.FBILLNO = G.FORDERNUMBER
LEFT JOIN
(Select FNumber,FMASTERID From T_BAS_ASSISTANTDATAENTRY
Where FID = '670cc977263353'
AND FDocumentStatus = 'C'
AND FForbidStatus = 'A') D2 --合同类型#(辅助资料表)
on D.F_ORDERCATEGORY = D2.FMASTERID
-- 条件
Where D.FDocumentStatus = 'C' --AND D.FID in (Select * From #TABLEXYX)
AND D2.FNUMBER != 'Z' AND D.FSALEORGID != 100302", year, year - 1, tableNameView);
if (!string.IsNullOrEmpty(salespersonString))
{
sql += string.Format(@" AND B.FSALEID in ({0})", salespersonString);
}
if (!string.IsNullOrEmpty(organization))
{
sql += string.Format(@" AND D.FSaleOrgId in ({0})", organization);
}
if (!string.IsNullOrEmpty(fStrartDate))
{
sql += string.Format(@" AND D.FDate >= '{0}'", fStrartDate);
}
if (!string.IsNullOrEmpty(fEndDate))
{
sql += string.Format(@" AND D.FDate <= '{0}'", fEndDate);
}
if (!string.IsNullOrEmpty(fSDate))
{
sql += string.Format(@" AND D.FAPPROVEDATE >= '{0}'", fSDate);
}
if (!string.IsNullOrEmpty(fEDate))
{
sql += string.Format(@" AND D.FAPPROVEDATE < DATEADD(DAY, 1, CONVERT(DATE, '{0}'))", fEDate);
}
sql += string.Format(@";");
sql += string.Format(@"/*dialect*/Select * INTO #TempTable3 From #TempTable1 UNION ALL (Select * From #TempTable2)");
sql += string.Format(@"/*dialect*/
Select
A.Area, --区域
A.DetailArea, --明细区域
A.Salesperson, --销售员
A.FPERFORMANCETARGETS, --业绩目标
SUM(A.[2024Pilot]) as 'Pilot2024', --2024派诺
SUM(A.[2024SiNO]) as 'SiNO2024', --2024兴诺
SUM(A.[2024WuHanPilot]) as 'WuHanPilot2024', --2024武汉派诺
SUM(A.[2024Discovery]) as 'Discovery2024', --2024碳索业绩
SUM(A.[2024HongKongPilot]) as 'HongKongPilot2024', --2024香港派诺业绩
SUM(A.[2024HuaXiaYunLian]) as 'HuaXiaYunLian2024', --
SUM(A.UsualAlterAmount) as 'UsualAlterAmount', --往年订单变更金额(派诺&子公司合计)
SUM(A.[2024SumAmount]) as 'SumAmount2024', --2024合计业绩额
SUM(A.[2023SumAmount]) as 'SumAmount2023', --2023合计业绩额
A.FPAYMENTSUM, --回款目标
SUM(A.Payment) as 'Payment', --回款额(派诺&子公司合计)
SUM(A.ShippedReceivables) as 'ShippedReceivables', --已发货应收款
SUM(A.ExpiredReceivables) as 'ExpiredReceivables', --已到期应收款
A.SBU
Into #TempTable4
From
#TempTable3 A
Group by A.Area,A.DetailArea,A.Salesperson,A.FPERFORMANCETARGETS,A.FPAYMENTSUM,A.SBU;
Select
ROW_NUMBER() OVER (ORDER BY SBU) AS ID,
*,
CASE When SumAmount2024 = 0 or FPERFORMANCETARGETS = 0
THen 0
ELSE (SumAmount2024/FPERFORMANCETARGETS)*100
END as 'AttainmentRate',--达标率
CASE WHEN SumAmount2023 = 0 or SumAmount2024 = 0
THEN 0
ELSE ((SumAmount2024-SumAmount2023)/SumAmount2023)*100
END as 'SameGrowthRate', --同比增长率
0 as 'PaymentRate' --回款率
Into #TempTable5
From
#TempTable4;");
sql += string.Format(@"/*dialect*/
SELECT
*,
ROW_NUMBER() OVER (ORDER BY t1.Area,Sort) AS FID,
ROW_NUMBER() OVER (ORDER BY t1.Area,Sort) AS FIDENTITYID
INTO {0}
FROM(SELECT *,1 Sort FROM #TempTable3
UNION ALL
SELECT
null,
t1.Area,
t1.Area+'小计:',
'',
SUM(t1.FPERFORMANCETARGETS),
SUM(t1.Pilot2024),
SUM(t1.SiNO2024),
SUM(t1.WuHanPilot2024),
SUM(t1.Discovery2024),
SUM(t1.HongKongPilot2024),
SUM(t1.HuaXiaYunLian2024),
SUM(t1.UsualAlterAmount),
SUM(t1.SumAmount2024),
SUM(t1.SumAmount2023),
SUM(t1.FPAYMENTSUM),
SUM(t1.Payment),
SUM(t1.ShippedReceivables),
SUM(t1.ExpiredReceivables),
'',
0 Sort
FROM #TempTable5 t1 GROUP BY t1.Area) t1
order by t1.Area,Sort;", tableName);
Loghelp.Log("BuilderReportSqlAndTempTable");
Loghelp.Log(sql);
DBUtils.Execute(this.Context, sql);
}
/// <summary>
/// 获取前端组件转换过滤条件
/// </summary>
/// <param name="filter"></param>
/// <returns></returns>
public override ReportTitles GetReportTitles(IRptParams filter)
{
ReportTitles reportTitles = new ReportTitles();
DynamicObject customFilter = filter.FilterParameter.CustomFilter;
if (customFilter != null)
{
// 销售员
var salesperson = (customFilter["F_Salesperson"] as DynamicObjectCollection)?.Select(n => (n["F_Salesperson"] as DynamicObject)["Name"].ToString()).ToList();
// 年份
string fDate = customFilter["F_Date"]?.ToString();
// 开始日期
string fStrartDate = customFilter["FStrartDate"]?.ToString();
// 结束日期
string fEndDate = customFilter["FEndDate"]?.ToString();
// 开始日期
string fSDate = customFilter["FSDate"]?.ToString();
// 结束日期
string fEDate = customFilter["FEDate"]?.ToString();
// 组织
var organizationList = (customFilter["FZuZhi"] as DynamicObjectCollection)?.Select(n => (n["FZuZhi"] as DynamicObject)["Name"].ToString()).ToList();
//这里是报表页面的标识
reportTitles.AddTitle("FSalesperson", salesperson == null ? "" : string.Join(",", salesperson));
reportTitles.AddTitle("FDate", fDate == null ? "" : Convert.ToDateTime(fDate).ToString("yyyy-MM-dd"));
reportTitles.AddTitle("FStrartDate", string.IsNullOrWhiteSpace(fStrartDate) ? "" : Convert.ToDateTime(fStrartDate).ToString("yyyy-MM-dd"));
reportTitles.AddTitle("FEndDate", string.IsNullOrWhiteSpace(fEndDate) ? "" : Convert.ToDateTime(fEndDate).ToString("yyyy-MM-dd"));
reportTitles.AddTitle("FSDate", string.IsNullOrWhiteSpace(fSDate) ? "" : Convert.ToDateTime(fSDate).ToString("yyyy-MM-dd"));
reportTitles.AddTitle("FEDate", string.IsNullOrWhiteSpace(fEDate) ? "" : Convert.ToDateTime(fEDate).ToString("yyyy-MM-dd"));
reportTitles.AddTitle("FZuZhi", organizationList == null ? "" : string.Join(",", organizationList));
}
return reportTitles;
}
/// <summary>
/// 生成显示表后更改
/// </summary>
/// <param name="sSQL"></param>
/// <returns></returns>
protected override DataTable GetListData(string sSQL)
{
var last = sSQL.Trim().Split(' ').ToList().Last();
int rowId = int.Parse(last);
string sql = @"/*dialect*/
SELECT
*
FROM
(
{0}
UNION ALL
SELECT
null,
null,
'合计:',
null,
SUM(FPERFORMANCETARGETS),
SUM(Pilot2024),
SUM(SiNO2024),
SUM(WuHanPilot2024),
SUM(Discovery2024),
SUM(HongKongPilot2024),
SUM(HuaXiaYunLian2024),
SUM(UsualAlterAmount),
SUM(SumAmount2024),
SUM(SumAmount2023),
SUM(FPAYMENTSUM),
SUM(Payment),
SUM(ShippedReceivables),
SUM(ExpiredReceivables),
3,
{2} FID,
{2} FIDENTITYID
FROM
(
{0}
) temp2
WHERE
Sort = 0
) temp
";
string SqlStr = string.Format(sql, sSQL, rowId + 1, rowId + 2, rowId + 1024);
Loghelp.Log("GetListData");
Loghelp.Log(SqlStr);
return base.GetListData(SqlStr);
}
}
}