350 lines
14 KiB
C#
Raw Normal View History

2025-03-14 10:00:24 +08:00
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;
}
}
}