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; /// /// 初始化 /// 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 { 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; } /// /// 报表列表头 /// /// /// 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; } /// /// 显示报表数据 /// /// /// 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); } /// /// 获取前端组件转换过滤条件 /// /// /// 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; } } }