李狗蛋 69cf26105d 0
2025-03-14 10:00:24 +08:00

350 lines
14 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 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;
}
}
}