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;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|