350 lines
14 KiB
C#
350 lines
14 KiB
C#
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 Pilot.Report.Exploitation.PublicClass;
|
||
|
||
namespace Pilot.Report.Exploitation.ContractDetails
|
||
{
|
||
[Description("【列表插件】派诺合同明细报表【报表】"), HotUpdate]
|
||
public class ContractDetailsReport: 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)
|
||
{
|
||
base.GetReportHeaders(filter);
|
||
|
||
ReportHeader header = new ReportHeader();
|
||
|
||
header.AddChild("Month", new LocaleValue("月份"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("BelongsRegion", new LocaleValue("所属区域"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("Salesman", new LocaleValue("销售员"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("PurchasesUnit", new LocaleValue("购货单位"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("SignedDate", new LocaleValue("签订日期"), SqlStorageType.SqlDatetime);
|
||
header.AddChild("OrderNumber", new LocaleValue("订单号"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("ProductsName", new LocaleValue("产品名称"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("Model/Size/Standard", new LocaleValue("型号/规格/标准"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("Number/Platform", new LocaleValue("数量/台"), SqlStorageType.SqlDecimal);
|
||
header.AddChild("Price/Platform", new LocaleValue("单价元/台"), SqlStorageType.SqlDecimal);
|
||
header.AddChild("ContractPrice", new LocaleValue("合同总价"), SqlStorageType.SqlDecimal);
|
||
header.AddChild("NumberDelivered", new LocaleValue("已交货数"), SqlStorageType.SqlDecimal);
|
||
header.AddChild("NumberUnDelivered", new LocaleValue("未交货数"), SqlStorageType.SqlDecimal);
|
||
header.AddChild("Invoicing", new LocaleValue("开票情况"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("ProjectName", new LocaleValue("项目名称"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("ProjectField", new LocaleValue("所属领域"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("BusinessType", new LocaleValue("集采业务分类"), SqlStorageType.Sqlvarchar);
|
||
header.AddChild("ClientQuality", new LocaleValue("客户性质"), SqlStorageType.Sqlvarchar);
|
||
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;
|
||
|
||
// 下单时间
|
||
string fDate = customFilter["FDate"]?.ToString();
|
||
// 纸质合同号
|
||
string fPaperContract = customFilter["FPaperContract"]?.ToString();
|
||
// 组织
|
||
var organizationList = (customFilter["FZuZhi"] as DynamicObjectCollection)?.Select(n => (n["FZuZhi"] as DynamicObject)["ID"].ToString()).ToList();
|
||
|
||
var organization = organizationList == null ? "" : (string.Join(",", organizationList));
|
||
|
||
base.BuilderReportSqlAndTempTable(filter, tableName);
|
||
|
||
string sql = string.Format(@"/*dialect*/
|
||
Select
|
||
MONTH(A.FDATE) as 'Month', --月份
|
||
(SELECT FNAME FROM T_BD_DEPARTMENT_L WHERE FDEPTID = A.FSaleDeptId) as 'BelongsRegion', --所属区域
|
||
(Select FNAME From V_BD_SALESMAN_L Where fid = A.FSalerId) as 'Salesman', --销售员
|
||
(SELECT FNAME FROM T_BD_CUSTOMER_L WHERE FCUSTID = A.FCustId) as 'PurchasesUnit', --购货单位
|
||
A.FDATE as 'SignedDate', --签订日期
|
||
A.F_contractnumber as 'OrderNumber', --订单号
|
||
C.FNAME as 'ProductsName', --产品名称
|
||
C.FSPECIFICATION as 'ModelSizeStandard', --型号\规格\标准
|
||
B.FQty as 'NumberPlatform', --数量/台
|
||
(Select FTaxPrice From T_SAL_ORDERENTRY_F Where FENTRYID = B.FENTRYID) as 'PricePlatform', --单价元/台
|
||
(Select FAllAmount_LC From T_SAL_ORDERENTRY_F Where FENTRYID = B.FENTRYID) as 'ContractPrice', --合同总价
|
||
(Select FStockOutQty From T_SAL_ORDERENTRY_R Where FENTRYID = B.FENTRYID) as 'NumberDelivered', --已交货数
|
||
(Select FRemainOutQty From T_SAL_ORDERENTRY_R Where FENTRYID = B.FENTRYID) as 'NumberUnDelivered', --未交货数
|
||
CASE WHEN
|
||
(D.FOPENSTATUS) --A=空,B=部分,C=完全
|
||
= 'A'
|
||
Then '空'
|
||
When (D.FOPENSTATUS) --A=空,B=部分,C=完全
|
||
= 'B'
|
||
Then '部分'
|
||
When (D.FOPENSTATUS) --A=空,B=部分,C=完全
|
||
= 'C'
|
||
Then '完全'
|
||
Else ''
|
||
END as 'Invoicing', --开票情况 A.F_VRYF_Assistant_k79
|
||
(Select FNAME From T_BAS_PREBDONE_L Where FID = A.F_projectname) as 'ProjectName', --项目名称
|
||
CASE WHEN --项目所属1
|
||
(Select
|
||
aq.F_Projectfield
|
||
From
|
||
T_BAS_PREBDTHREE aq
|
||
JOIN
|
||
T_BAS_PREBDTHREE_L aw
|
||
on aq.FID = aw.FID
|
||
Where aq.FID = A.F_BON) = 1
|
||
THEN '建筑楼宇'
|
||
WHEN --项目所属2
|
||
(Select
|
||
aq.F_Projectfield
|
||
From
|
||
T_BAS_PREBDTHREE aq
|
||
JOIN
|
||
T_BAS_PREBDTHREE_L aw
|
||
on aq.FID = aw.FID
|
||
Where aq.FID = A.F_BON) = 2
|
||
THEN '医疗卫生'
|
||
WHEN --项目所属3
|
||
(Select
|
||
aq.F_Projectfield
|
||
From
|
||
T_BAS_PREBDTHREE aq
|
||
JOIN
|
||
T_BAS_PREBDTHREE_L aw
|
||
on aq.FID = aw.FID
|
||
Where aq.FID = A.F_BON) = 3
|
||
THEN '学校'
|
||
WHEN --项目所属4
|
||
(Select
|
||
aq.F_Projectfield
|
||
From
|
||
T_BAS_PREBDTHREE aq
|
||
JOIN
|
||
T_BAS_PREBDTHREE_L aw
|
||
on aq.FID = aw.FID
|
||
Where aq.FID = A.F_BON) = 4
|
||
THEN '文娱康乐'
|
||
WHEN --项目所属5
|
||
(Select
|
||
aq.F_Projectfield
|
||
From
|
||
T_BAS_PREBDTHREE aq
|
||
JOIN
|
||
T_BAS_PREBDTHREE_L aw
|
||
on aq.FID = aw.FID
|
||
Where aq.FID = A.F_BON) = 5
|
||
THEN '市政工程'
|
||
WHEN --项目所属6
|
||
(Select
|
||
aq.F_Projectfield
|
||
From
|
||
T_BAS_PREBDTHREE aq
|
||
JOIN
|
||
T_BAS_PREBDTHREE_L aw
|
||
on aq.FID = aw.FID
|
||
Where aq.FID = A.F_BON) = 6
|
||
THEN '能源'
|
||
WHEN --项目所属7
|
||
(Select
|
||
aq.F_Projectfield
|
||
From
|
||
T_BAS_PREBDTHREE aq
|
||
JOIN
|
||
T_BAS_PREBDTHREE_L aw
|
||
on aq.FID = aw.FID
|
||
Where aq.FID = A.F_BON) = 7
|
||
THEN '工业'
|
||
WHEN --项目所属8
|
||
(Select
|
||
aq.F_Projectfield
|
||
From
|
||
T_BAS_PREBDTHREE aq
|
||
JOIN
|
||
T_BAS_PREBDTHREE_L aw
|
||
on aq.FID = aw.FID
|
||
Where aq.FID = A.F_BON) = 8
|
||
THEN '交通运输'
|
||
ELSE ''
|
||
END as 'ProjectField', --项目所属领域
|
||
CASE WHEN --集采业务分类
|
||
A.F_PurchasingPro = 'LH'
|
||
THEN '龙湖'
|
||
WHEN --集采业务分类
|
||
A.F_PurchasingPro = 'BL'
|
||
THEN '保利地产'
|
||
WHEN --集采业务分类
|
||
A.F_PurchasingPro = 'HR'
|
||
THEN '华润'
|
||
WHEN --集采业务分类
|
||
A.F_PurchasingPro = 'N'
|
||
THEN '否'
|
||
WHEN --集采业务分类
|
||
A.F_PurchasingPro = 'HEF'
|
||
THEN '华润非集采'
|
||
WHEN --集采业务分类
|
||
A.F_PurchasingPro = 'LD'
|
||
THEN '绿地'
|
||
ELSE ''
|
||
END as 'BusinessType', --集采业务分类 LH=龙湖,BL=保利地产,HR=华润,N=否,HEF=华润非集采,LD=绿地
|
||
(Select wa.FDATAVALUE From
|
||
T_BAS_ASSISTANTDATAENTRY aw
|
||
JOIN
|
||
T_BAS_ASSISTANTDATAENTRY_L wa
|
||
on aw.FENTRYID = wa.FENTRYID
|
||
Where wa.FENTRYID = (Select F_CreditClassification From T_BD_CUSTOMER where FCUSTID = A.FCustId)
|
||
AND FDocumentStatus = 'C' AND FFORBIDSTATUS = 'A') as 'ClientQuality', --客户性质
|
||
(Select V1.区域 From
|
||
{0} V1
|
||
JOIN
|
||
(Select FName From V_BD_SALESMAN_L
|
||
Where
|
||
fid in (Select A1.FSALEID From
|
||
(Select a2.* From
|
||
T_PerformanceSharing a1
|
||
JOIN
|
||
T_PerformanceSharingEntry a2
|
||
on a1.FID = a2.FID
|
||
Where a1.FDocumentStatus = 'C') A1
|
||
JOIN
|
||
T_PerformanceSharing_LK A2
|
||
on A2.FID = A1.FID
|
||
Where A2.FSTableName = 'T_SAL_ORDER1'
|
||
AND A2.FSId = B.FID AND A1.FSALEID = A.FSalerId
|
||
)) V2
|
||
on V1.名称 = V2.FNAME GROUP BY V1.区域)
|
||
as 'SBU' --SBU
|
||
Into #TempTable1 ", tableNameView);
|
||
|
||
sql += string.Format(@"From
|
||
T_SAL_ORDER A
|
||
JOIN
|
||
T_SAL_ORDERENTRY B
|
||
on B.FID = A.FID
|
||
Left JOIN
|
||
(Select aq.FMATERIALID,qa.FNAME,aq.F_XHDL,aq.F_116,qa.FSpecification
|
||
From
|
||
T_BD_MATERIAL aq
|
||
Left JOIN
|
||
T_BD_MATERIAL_L qa
|
||
on aq.FMATERIALID = qa.FMATERIALID) C
|
||
on B.FMaterialId = C.FMATERIALID
|
||
LEFT JOIN
|
||
(Select A2.FOPENSTATUS,A1.FID,A1.FORDERNUMBER From T_AR_RECEIVABLEENTRY A1 JOIN T_AR_RECEIVABLE A2 on A1.FID = A2.FID
|
||
Where A2.FSETACCOUNTTYPE = 3 Group by A2.FOPENSTATUS,A1.FID,A1.FORDERNUMBER) D on A.FBILLNO = D.FORDERNUMBER
|
||
--条件
|
||
Where A.FDocumentStatus = 'C'
|
||
AND A.FCloseStatus = 'A'
|
||
AND A.FCancelStatus = 'A'");
|
||
|
||
if (!string.IsNullOrEmpty(fDate))
|
||
{
|
||
sql += string.Format(@" AND A.FDATE = '{0}'", fDate);
|
||
}
|
||
if (!string.IsNullOrEmpty(fPaperContract))
|
||
{
|
||
sql += string.Format(@" AND A.F_contractnumber like '%{0}%'", fPaperContract);
|
||
}
|
||
if (!string.IsNullOrEmpty(organization))
|
||
{
|
||
sql += string.Format(@" AND A.FSaleOrgId in ({0})", organization);
|
||
}
|
||
|
||
|
||
sql += string.Format(@";");
|
||
|
||
sql += string.Format(@"/*dialect*/
|
||
Select
|
||
ROW_NUMBER() OVER (ORDER BY SignedDate) AS FID,
|
||
ROW_NUMBER() OVER (ORDER BY SignedDate) AS FIDENTITYID,
|
||
*
|
||
into {0}
|
||
From #TempTable1", tableName);
|
||
|
||
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)
|
||
{
|
||
// 下单时间
|
||
string fDate = customFilter["FDate"]?.ToString();
|
||
// 纸质合同号
|
||
string fPaperContract = customFilter["FPaperContract"]?.ToString();
|
||
// 组织
|
||
var organizationList = (customFilter["FZuZhi"] as DynamicObjectCollection)?.Select(n => (n["FZuZhi"] as DynamicObject)["Name"].ToString()).ToList();
|
||
|
||
//这里是报表页面的标识
|
||
reportTitles.AddTitle("FPaperContract", fPaperContract == null ? "" : fPaperContract);
|
||
reportTitles.AddTitle("FDate", fDate == null ? "" : Convert.ToDateTime(fDate).ToString("yyyy-MM-dd"));
|
||
reportTitles.AddTitle("FZuZhi", organizationList == null ? "" : string.Join(",", organizationList));
|
||
}
|
||
return reportTitles;
|
||
}
|
||
}
|
||
}
|