diff --git a/TenderItem.Induct/FillComboFieldPlugIn.cs b/TenderItem.Induct/FillComboFieldPlugIn.cs new file mode 100644 index 0000000..e93bf6d --- /dev/null +++ b/TenderItem.Induct/FillComboFieldPlugIn.cs @@ -0,0 +1,68 @@ +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Core; +using Kingdee.BOS.Core.Bill.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.List.PlugIn.Args; +using Kingdee.BOS.Core.Util; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TenderItem.Induct +{ + /// + /// 【单据插件】填充中标项目分类 + /// + [Description("【单据插件】填充中标项目分类"), HotUpdate] + public class FillComboFieldPlugIn: AbstractBillPlugIn + { + public override void DataChanged(DataChangedEventArgs e) + { + base.DataChanged(e); + //this.View.ShowMessage("触发"); + if (e.Field.Key == "F_CYG_BidSerial") + { + string newValue = Convert.ToString(e.NewValue); + + string sql1 = string.Format(@"/*dialect*/ + Select + FBIDPROJECTTYPE + From + MBBA_t_Cust100005 + Where FTENDER = '{0}'", newValue); + + var NameList = DBUtils.ExecuteDynamicObject(Context, sql1); + string Name = ""; + if (NameList.Count != 0) + { + Name = NameList[0]["FBIDPROJECTTYPE"].ToString(); + } + + string sql2 = string.Format(@"/*dialect*/ + SELECT + A.FMASTERID + FROM + T_BAS_ASSISTANTDATAENTRY A + JOIN + T_BAS_ASSISTANTDATAENTRY_L B + on A.FENTRYID = B.FENTRYID + Where B.FLOCALEID = 2052 + AND A.FID = '6716fb25f5fc9d' + AND B.FDataValue = '{0}'", Name); + + var NumberList = DBUtils.ExecuteDynamicObject(Context, sql2); + var Number = ""; + if (NumberList.Count != 0) + { + Number = NumberList[0]["FMASTERID"].ToString(); + } + + this.View.Model.SetValue("F_CYG_WinningProject", Number); + } + } + } +} diff --git a/TenderItem.Induct/FormOperationServicePlugIn.cs b/TenderItem.Induct/FormOperationServicePlugIn.cs new file mode 100644 index 0000000..546dc10 --- /dev/null +++ b/TenderItem.Induct/FormOperationServicePlugIn.cs @@ -0,0 +1,100 @@ +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Core.BusinessFlow; +using Kingdee.BOS.Core.DynamicForm.PlugIn; +using Kingdee.BOS.Core.DynamicForm.PlugIn.Args; +using Kingdee.BOS.Core.List.PlugIn; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace TenderItem.Induct +{ + /// + /// 【表单插件】导入前事件 + /// 查询Excel中的标书编号 + /// 删除数据库中存在对应标书编号的数据 + /// 实现重复标书覆盖效果 + /// + [Description("【表单插件】导入前事件"), HotUpdate] + public class FormOperationServicePlugIn : AbstractListPlugIn + { + /// + /// 导入之前方法 + /// + /// + public override void BeforeImportData(BeforeImportDataArgs e) + { + base.BeforeImportData(e); + + string FTenderList = ""; + + var dataTable = e.DataSource.Tables[0]; + + //循环找到所有标书编号 + for (int i = 0; i < dataTable.Rows.Count; i++) + { + var FTender = dataTable.Rows[i]["FTender"]; + var FBidProjectType = dataTable.Rows[i]["FBidProjectType"]; + + string sql2 = string.Format(@"/*dialect*/ + SELECT + A.FMASTERID + FROM + T_BAS_ASSISTANTDATAENTRY A + JOIN + T_BAS_ASSISTANTDATAENTRY_L B + on A.FENTRYID = B.FENTRYID + Where B.FLOCALEID = 2052 + AND A.FID = '6716fb25f5fc9d' + AND B.FDataValue = '{0}'", FBidProjectType); + + var FBidProjectTypeList = DBUtils.ExecuteDynamicObject(Context, sql2); + + var FBidProjectTypeId = ""; + if (FBidProjectTypeList.Count != 0) + { + FBidProjectTypeId = FBidProjectTypeList[0]["FMASTERID"].ToString(); + } + + string sql = string.Format(@"Update + T_CRM_CONTRACT + Set F_CYG_WinningProject = '{1}' + Where F_CYG_BidSerial = '{0}'", FTender, FBidProjectTypeId); + + DBUtils.ExecuteDynamicObject(Context, sql); + + decimal n1 = 0; + + decimal n2 = 0; + + string nn1 = dataTable.Rows[i]["FWinningBid"].ToString(); + + string nn2 = dataTable.Rows[i]["FFrameVolume"].ToString(); + + if(!string.IsNullOrEmpty(nn1)) + { + n1 = Convert.ToDecimal(nn1); + } + if(!string.IsNullOrEmpty(nn2)) + { + n2 = Convert.ToDecimal(nn2); + } + + dataTable.Rows[i]["FWinningBidSubtotal"] = n1 + n2; + + FTenderList += "'" + FTender + "',"; + } + + FTenderList += "'0'"; + + string sqlDelete = string.Format(@"Delete MBBA_t_Cust100005 where FTender in ({0})", FTenderList); + DBUtils.ExecuteDynamicObject(this.Context, sqlDelete); + //this.View.ShowErrMessage("引入数据操作(测试是否进入插件!!!)"); + } + } +} diff --git a/TenderItem.Induct/Properties/AssemblyInfo.cs b/TenderItem.Induct/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..1982f35 --- /dev/null +++ b/TenderItem.Induct/Properties/AssemblyInfo.cs @@ -0,0 +1,33 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的一般信息由以下 +// 控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("TenderItem.Induct")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("TenderItem.Induct")] +[assembly: AssemblyCopyright("Copyright © 2024")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 会使此程序集中的类型 +//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型 +//请将此类型的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("b19f9275-cf4f-45ad-a0b1-a138317ddf6b")] + +// 程序集的版本信息由下列四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/TenderItem.Induct/TenderFormServicePlugIn.cs b/TenderItem.Induct/TenderFormServicePlugIn.cs new file mode 100644 index 0000000..f47347f --- /dev/null +++ b/TenderItem.Induct/TenderFormServicePlugIn.cs @@ -0,0 +1,36 @@ +using Kingdee.BOS.Core.Report.PlugIn; +using Kingdee.BOS.Core.Report.PlugIn.Args; +using Kingdee.BOS.Util; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TenderItem.Induct +{ + [Description("【报表表单插件】投标项目报表"), HotUpdate] + public class TenderFormServicePlugIn: AbstractSysReportPlugIn + { + public override void FormatCellValue(FormatCellValueArgs args) + { + // 格式化日期 + base.FormatCellValue(args); + if (args.Header.ColType == Kingdee.BOS.SqlStorageType.SqlDatetime) + { + DateTime value = Convert.ToDateTime(args.FormateValue); + string afterValue = value.ToString("yyyy-MM-dd"); + args.FormateValue = afterValue; + } + // 格式化金额 汇率不格式化 + if (args.Header.ColType == Kingdee.BOS.SqlStorageType.SqlDecimal) + { + decimal value = decimal.Parse(args.FormateValue); + // 千分位 + string afterValue = value.ToString("N"); + args.FormateValue = afterValue; + } + } + } +} diff --git a/TenderItem.Induct/TenderItem.Induct.csproj b/TenderItem.Induct/TenderItem.Induct.csproj new file mode 100644 index 0000000..043815d --- /dev/null +++ b/TenderItem.Induct/TenderItem.Induct.csproj @@ -0,0 +1,82 @@ + + + + + Debug + AnyCPU + {B19F9275-CF4F-45AD-A0B1-A138317DDF6B} + Library + Properties + TenderItem.Induct + TenderItem.Induct + v4.8 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\..\AccountingVoucher\AccountingVoucher.BOS\bin\Debug\Kingdee.BOS.dll + + + ..\..\AccountingVoucher\AccountingVoucher.BOS\bin\Debug\Kingdee.BOS.App.dll + + + ..\..\AccountingVoucher\AccountingVoucher.BOS\bin\Debug\Kingdee.BOS.Contracts.dll + + + ..\..\AccountingVoucher\AccountingVoucher.BOS\bin\Debug\Kingdee.BOS.Core.dll + + + ..\..\AccountingVoucher\AccountingVoucher.BOS\bin\Debug\Kingdee.BOS.DataEntity.dll + + + ..\..\AccountingVoucher\AccountingVoucher.BOS\bin\Debug\Kingdee.BOS.Web.dll + + + ..\..\AccountingVoucher\AccountingVoucher.BOS\bin\Debug\Kingdee.BOS.Web.HTML.dll + + + ..\..\AccountingVoucher\AccountingVoucher.BOS\bin\Debug\Kingdee.BOS.Web.HTML.Core.dll + + + ..\..\AccountingVoucher\AccountingVoucher.BOS\bin\Debug\Kingdee.K3.MFG.PLN.Business.PlugIn.dll + + + + + + + + + + + + + + + + + + + + + copy $(TargetPath) "F:\金蝶\WebSite\Bin\$(TargetFileName)" + + \ No newline at end of file diff --git a/TenderItem.Induct/TenderProjectReportPlugin.cs b/TenderItem.Induct/TenderProjectReportPlugin.cs new file mode 100644 index 0000000..019bb34 --- /dev/null +++ b/TenderItem.Induct/TenderProjectReportPlugin.cs @@ -0,0 +1,316 @@ +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Contracts.Report; +using Kingdee.BOS.Core.Report; +using Kingdee.BOS.Orm.Cvp; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using Kingdee.BOS; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TenderItem.Induct +{ + /// + /// 【列表插件】投标项目数据简单报表 + /// + [Description("【列表插件】投标项目数据报表"), HotUpdate] + public class TenderProjectReportPlugin : SysReportBaseService + { + /// + /// 初始化 + /// + 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(); + if (this.Context.UserLocale.LCID == 2052) + { + header.AddChild("Year", new LocaleValue("年份"), SqlStorageType.Sqlvarchar); + header.AddChild("TenderNumber", new LocaleValue("招标编号"), SqlStorageType.Sqlvarchar); + header.AddChild("TenderMain", new LocaleValue("标书主编号"), SqlStorageType.Sqlvarchar); + header.AddChild("Tender", new LocaleValue("标书编号"), SqlStorageType.Sqlvarchar); + header.AddChild("ProjectName", new LocaleValue("项目名称"), SqlStorageType.Sqlvarchar); + header.AddChild("TenderingUnit", new LocaleValue("招标单位"), SqlStorageType.Sqlvarchar); + header.AddChild("BidProjectType", new LocaleValue("中标项目分类"), SqlStorageType.Sqlvarchar); + header.AddChild("ProvincesHead", new LocaleValue("省区负责人"), SqlStorageType.Sqlvarchar); + header.AddChild("Authorizer", new LocaleValue("授权人"), SqlStorageType.Sqlvarchar); + header.AddChild("Region", new LocaleValue("大区"), SqlStorageType.Sqlvarchar); + header.AddChild("Provinces", new LocaleValue("省区"), SqlStorageType.Sqlvarchar); + header.AddChild("BidProductsType", new LocaleValue("中标产品分类"), SqlStorageType.Sqlvarchar); + header.AddChild("BidProducts", new LocaleValue("中标产品"), SqlStorageType.Sqlvarchar); + header.AddChild("BidPackageNumber", new LocaleValue("中标包号"), SqlStorageType.Sqlvarchar); + header.AddChild("WinningBid", new LocaleValue("中标额(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("FrameVolume", new LocaleValue("框架标预估体量"), SqlStorageType.SqlDecimal); + header.AddChild("WinningBidSubtotal", new LocaleValue("中标额小计"), SqlStorageType.SqlDecimal); + header.AddChild("BidsDate", new LocaleValue("开标时间"), SqlStorageType.SqlDatetime); + header.AddChild("InstallationIllustrate", new LocaleValue("安装说明"), SqlStorageType.Sqlvarchar); + header.AddChild("Remark", new LocaleValue("备注"), SqlStorageType.Sqlvarchar); + header.AddChild("ContractOriginalReturns", new LocaleValue("合同原件返回额"), SqlStorageType.SqlDecimal); + header.AddChild("AmountOrder", new LocaleValue("下单金额"), SqlStorageType.SqlDecimal); + header.AddChild("AmountOriginalOrder", new LocaleValue("下单无原件金额"), SqlStorageType.SqlDecimal); + header.AddChild("ContractAmountOrder", new LocaleValue("合同返回未下单金额"), SqlStorageType.SqlDecimal); + header.AddChild("BidderNotAgency", new LocaleValue("中标未签约且未下单(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("Sales", new LocaleValue("销售额"), SqlStorageType.SqlDecimal); + header.AddChild("InvoicedAmount", new LocaleValue("已开票额"), SqlStorageType.SqlDecimal); + header.AddChild("UnbilledAmount", new LocaleValue("未开票额"), SqlStorageType.SqlDecimal); + header.AddChild("ProjectSpecialIllustrate", new LocaleValue("项目特殊情况说明"), SqlStorageType.Sqlvarchar); + header.AddChild("Cost", new LocaleValue("成本"), SqlStorageType.SqlDecimal); + } + else + { + header.AddChild("Year", new LocaleValue("Year"), SqlStorageType.Sqlvarchar); + header.AddChild("TenderNumber", new LocaleValue("TenderNumber"), SqlStorageType.Sqlvarchar); + header.AddChild("TenderMain", new LocaleValue("TenderMain"), SqlStorageType.Sqlvarchar); + header.AddChild("Tender", new LocaleValue("Tender"), SqlStorageType.Sqlvarchar); + header.AddChild("ProjectName", new LocaleValue("ProjectName"), SqlStorageType.Sqlvarchar); + header.AddChild("TenderingUnit", new LocaleValue("TenderingUnit"), SqlStorageType.Sqlvarchar); + header.AddChild("BidProjectType", new LocaleValue("BidProjectType"), SqlStorageType.Sqlvarchar); + header.AddChild("ProvincesHead", new LocaleValue("ProvincesHead"), SqlStorageType.Sqlvarchar); + header.AddChild("Authorizer", new LocaleValue("Authorizer"), SqlStorageType.Sqlvarchar); + header.AddChild("Region", new LocaleValue("Region"), SqlStorageType.Sqlvarchar); + header.AddChild("Provinces", new LocaleValue("Provinces"), SqlStorageType.Sqlvarchar); + header.AddChild("BidProductsType", new LocaleValue("BidProductsType"), SqlStorageType.Sqlvarchar); + header.AddChild("BidProducts", new LocaleValue("BidProducts"), SqlStorageType.Sqlvarchar); + header.AddChild("BidPackageNumber", new LocaleValue("BidPackageNumber"), SqlStorageType.Sqlvarchar); + header.AddChild("WinningBid", new LocaleValue("WinningBid"), SqlStorageType.SqlDecimal); + header.AddChild("FrameVolume", new LocaleValue("FrameVolume"), SqlStorageType.SqlDecimal); + header.AddChild("WinningBidSubtotal", new LocaleValue("WinningBidSubtotal"), SqlStorageType.SqlDecimal); + header.AddChild("BidsDate", new LocaleValue("InstallationIllustrate"), SqlStorageType.SqlDatetime); + header.AddChild("InstallationIllustrate", new LocaleValue("InstallationIllustrate"), SqlStorageType.Sqlvarchar); + header.AddChild("Remark", new LocaleValue("Remark"), SqlStorageType.Sqlvarchar); + header.AddChild("ContractOriginalReturns", new LocaleValue("ContractOriginalReturns"), SqlStorageType.SqlDecimal); + header.AddChild("AmountOrder", new LocaleValue("AmountOrder"), SqlStorageType.SqlDecimal); + header.AddChild("AmountOriginalOrder", new LocaleValue("AmountOriginalOrder"), SqlStorageType.SqlDecimal); + header.AddChild("ContractAmountOrder", new LocaleValue("ContractAmountOrder"), SqlStorageType.SqlDecimal); + header.AddChild("BidderNotAgency", new LocaleValue("BidderNotAgency"), SqlStorageType.SqlDecimal); + header.AddChild("Sales", new LocaleValue("Sales"), SqlStorageType.SqlDecimal); + header.AddChild("InvoicedAmount", new LocaleValue("InvoicedAmount"), SqlStorageType.SqlDecimal); + header.AddChild("UnbilledAmount", new LocaleValue("UnbilledAmount"), SqlStorageType.SqlDecimal); + header.AddChild("ProjectSpecialIllustrate", new LocaleValue("ProjectSpecialIllustrate"), SqlStorageType.Sqlvarchar); + header.AddChild("Cost", new LocaleValue("Cost"), SqlStorageType.SqlDecimal); + } + foreach (var item in header.GetChilds()) + { + item.Width = 150; + } + return header; + } + + public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName) + { + DynamicObject customFilter = filter.FilterParameter.CustomFilter; + + // 年份 + string fDate = customFilter["FDate"]?.ToString(); + // 标书编号 + string fTender = customFilter["FTender"]?.ToString(); + + base.BuilderReportSqlAndTempTable(filter, tableName); + + string sql = string.Format(@"/*dialect*/ + Select + A.FYEAR as [Year], + A.FTenderNumber as TenderNumber, + A.FTenderMain as TenderMain, + A.FTender as Tender, + A.FProjectName as ProjectName, + A.FTenderingUnit as TenderingUnit, + A.FBidProjectType as BidProjectType, + A.FProvincesHead as ProvincesHead, + A.FAuthorizer as Authorizer, + A.FRegion as Region, + A.FProvinces as Provinces, + A.FBidProductsType as BidProductsType, + A.FBidProducts as BidProducts, + A.FBidPackageNumber as BidPackageNumber, + A.FWinningBid as WinningBid, + A.FFrameVolume as FrameVolume, + A.FWinningBidSubtotal as WinningBidSubtotal, + A.FBidsDate as BidsDate, + A.FInstallationIllustrate as InstallationIllustrate, + A.FRemark as Remark, + CASE WHEN ISNULL(E.F_CYG_Paperreturndate,'')='' THEN 0 + ELSE (Select FCONTRACTAMOUNT_LC From T_CRM_CONTRACTFIN WHere FId = E.FID) + END as ContractOriginalReturns, --合同原件返回额 + ISNULL((Select + Sum(q.FAllAmount_LC) + From T_SAL_ORDERENTRY_F q + JOIN + T_SAL_ORDERENTRY w + on q.FID = w.FID + Where q.FID = B.FID + AND w.F_CYG_CheckBalance1 != 1),0) as AmountOrder, --下单金额 + CASE WHEN ISNULL(E.F_CYG_Paperreturndate,'')='' THEN ISNULL((Select FCONTRACTAMOUNT_LC From T_CRM_CONTRACTFIN WHere FId = E.FID),0) + ELSE 0 + END as AmountOriginalOrder, --下单无原件金额 + ((CASE WHEN ISNULL(E.F_CYG_PAPERRETURNDATE,'')='' THEN 0 + ELSE (Select FCONTRACTAMOUNT_LC From T_CRM_CONTRACTFIN WHere FId = E.FID) + END)-(ISNULL((Select + Sum(q.FAllAmount_LC) + From T_SAL_ORDERENTRY_F q + JOIN + T_SAL_ORDERENTRY w + on q.FID = w.FID + Where q.FID = B.FID + AND w.F_CYG_CheckBalance1 != 1),0))) as ContractAmountOrder, --合同返回未下单金额 + ((A.FWinningBidSubtotal)-(CASE WHEN ISNULL(E.F_CYG_Paperreturndate,'')='' THEN 0 + ELSE (Select FCONTRACTAMOUNT_LC From T_CRM_CONTRACTFIN WHere FId = E.FID) + END)-(CASE WHEN ISNULL(E.F_CYG_Paperreturndate,'')='' THEN ISNULL((Select FCONTRACTAMOUNT_LC From T_CRM_CONTRACTFIN WHere FId = E.FID),0) + ELSE 0 + END)) as BidderNotAgency, --中标未签约且未下单(万元) + CASE WHEN D.FID in (Select Ae.FID From + (Select WW.FID,SUM(EE.FMustqty) as 'FMustqty',Sum(EE.FRealQty) as 'FRealQty' + From + (Select W.FSID,E.FID + From T_AR_RECEIVABLEENTRY_LK W + --Where FSTABLENAME = 'T_SAL_RETURNSTOCKENTRY' + JOIN + T_AR_RECEIVABLEENTRY E + on W.FENTRYID = E.FENTRYID AND W.FSTABLENAME = 'T_SAL_RETURNSTOCKENTRY') WW + JOIN + T_SAL_RETURNSTOCKENTRY EE + on WW.FSID = EE.FENTRYID + Group by WW.FID) Ae + Where Ae.FMustqty=Ae.FRealQty) + THEN 0 + ELSE + ISNULL((Select SUM(FALLAMOUNT) From T_AR_RECEIVABLEENTRY Where FID = D.FID),0) + END as Sales,--销售额 + ISNull((Select SUM(FOPENAMOUNTFOR) From T_AR_RECEIVABLEENTRY Where FID = D.FID),0) as InvoicedAmount, --已开票额 + ((CASE WHEN D.FID in (Select Ae.FID From + (Select WW.FID,SUM(EE.FMustqty) as 'FMustqty',Sum(EE.FRealQty) as 'FRealQty' + From + (Select W.FSID,E.FID + From T_AR_RECEIVABLEENTRY_LK W + --Where FSTABLENAME = 'T_SAL_RETURNSTOCKENTRY' + JOIN + T_AR_RECEIVABLEENTRY E + on W.FENTRYID = E.FENTRYID AND W.FSTABLENAME = 'T_SAL_RETURNSTOCKENTRY') WW + JOIN + T_SAL_RETURNSTOCKENTRY EE + on WW.FSID = EE.FENTRYID + Group by WW.FID) Ae + Where Ae.FMustqty=Ae.FRealQty) + THEN 0 + ELSE + ISNULL((Select SUM(FALLAMOUNT) From T_AR_RECEIVABLEENTRY Where FID = D.FID),0) + END) + -(ISNull((Select SUM(FOPENAMOUNTFOR) From T_AR_RECEIVABLEENTRY Where FID = D.FID),0))) as UnbilledAmount, --未开票额 + A.FProjectSpecialIllustrate as ProjectSpecialIllustrate, --项目特殊情况说明 + 0 as Cost --成本 + Into #TempTable1 "); + + sql += string.Format(@"From MBBA_t_Cust100005 A --投标项目表 + Left JOIN --关联销售订单表 + T_SAL_ORDER B + on A.FTender = B.FTENDERNO + AND B.FBusinessType != 'RETURNSO' + AND B.F_CYG_CheckBalance != 1 + AND B.FDocumentStatus = 'C' + AND B.FCloseStatus = 'A' + AND B.FCancelStatus = 'A' + Left JOIN --销售出库单 + T_SAL_OUTSTOCK C + on A.FTENDER = C.FTENDERNO + AND C.FDocumentStatus = 'C' + AND C.FCancelStatus = 'A' + Left JOIN --应收单 + T_AR_RECEIVABLE D + on A.FTENDER = D.FTENDERNO + AND D.FDocumentStatus = 'C' + AND D.FWRITTENOFFSTATUS != 'C' --过滤完全核销单据 + AND D.FCancelStatus = 'A' + Left JOIN --销售合同 + T_CRM_CONTRACT E + on E.F_CYG_BidSerial = A.FTENDER + AND E.FDocumentStatus = 'C' + AND E.FCloseStatus = 'A' + AND E.FCancelStatus = 'A' + Where 1=1"); + + //过滤条件 + if (!string.IsNullOrEmpty(fDate)) + { + string dateString = fDate.Split('-')[0]; + sql += string.Format(@" AND A.FYEAR = {0}", dateString); + } + if (!string.IsNullOrEmpty(fTender)) + { + sql += string.Format(@" AND A.FTender = '{0}'", fTender); + } + + sql += string.Format(@";"); + + sql += string.Format(@"/*dialect*/ + Select + ROW_NUMBER() OVER (ORDER BY Year) AS FID, + ROW_NUMBER() OVER (ORDER BY Year) 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 fTender = customFilter["FTender"]?.ToString(); + + //这里是报表页面的标识 + reportTitles.AddTitle("FTender", fTender == null ? "" : fTender); + reportTitles.AddTitle("FDate", fDate == null ? "" : Convert.ToDateTime(fDate).ToString("yyyy-MM-dd")); + } + return reportTitles; + } + } +} diff --git a/TenderItem.Induct/TenderProjectReportPlugin2.cs b/TenderItem.Induct/TenderProjectReportPlugin2.cs new file mode 100644 index 0000000..c3755ee --- /dev/null +++ b/TenderItem.Induct/TenderProjectReportPlugin2.cs @@ -0,0 +1,203 @@ +using Kingdee.BOS.App.Data; +using Kingdee.BOS.Contracts.Report; +using Kingdee.BOS.Core.Report; +using Kingdee.BOS.Orm.Cvp; +using Kingdee.BOS.Orm.DataEntity; +using Kingdee.BOS.Util; +using Kingdee.BOS; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace TenderItem.Induct +{ + /// + /// 【列表插件】投标项目数据简单报表2 + /// + [Description("【列表插件】投标项目数据报表2"), HotUpdate] + public class TenderProjectReportPlugin2 : SysReportBaseService + { + /// + /// 初始化 + /// + 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(); + if (this.Context.UserLocale.LCID == 2052) + { + header.AddChild("Year", new LocaleValue("年份"), SqlStorageType.Sqlvarchar); + header.AddChild("TenderNumber", new LocaleValue("招标编号"), SqlStorageType.Sqlvarchar); + header.AddChild("TenderMain", new LocaleValue("标书主编号"), SqlStorageType.Sqlvarchar); + header.AddChild("Tender", new LocaleValue("标书编号"), SqlStorageType.Sqlvarchar); + header.AddChild("ProjectName", new LocaleValue("项目名称"), SqlStorageType.Sqlvarchar); + header.AddChild("TenderingUnit", new LocaleValue("招标单位"), SqlStorageType.Sqlvarchar); + header.AddChild("BidProjectType", new LocaleValue("中标项目分类"), SqlStorageType.Sqlvarchar); + header.AddChild("ProvincesHead", new LocaleValue("省区负责人"), SqlStorageType.Sqlvarchar); + header.AddChild("Authorizer", new LocaleValue("授权人"), SqlStorageType.Sqlvarchar); + header.AddChild("Region", new LocaleValue("大区"), SqlStorageType.Sqlvarchar); + header.AddChild("Provinces", new LocaleValue("省区"), SqlStorageType.Sqlvarchar); + header.AddChild("BidProductsType", new LocaleValue("中标产品分类"), SqlStorageType.Sqlvarchar); + header.AddChild("BidProducts", new LocaleValue("中标产品"), SqlStorageType.Sqlvarchar); + header.AddChild("BidPackageNumber", new LocaleValue("中标包号"), SqlStorageType.Sqlvarchar); + header.AddChild("WinningBid", new LocaleValue("中标额(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("FrameVolume", new LocaleValue("框架标预估体量"), SqlStorageType.SqlDecimal); + header.AddChild("WinningBidSubtotal", new LocaleValue("中标额小计"), SqlStorageType.SqlDecimal); + header.AddChild("BidsDate", new LocaleValue("开标时间"), SqlStorageType.SqlDatetime); + header.AddChild("InstallationIllustrate", new LocaleValue("安装说明"), SqlStorageType.Sqlvarchar); + header.AddChild("Remark", new LocaleValue("备注"), SqlStorageType.Sqlvarchar); + header.AddChild("ContractOriginalReturns", new LocaleValue("合同原件返回额"), SqlStorageType.SqlDecimal); + header.AddChild("AmountOrder", new LocaleValue("下单金额"), SqlStorageType.SqlDecimal); + header.AddChild("AmountOriginalOrder", new LocaleValue("下单无原件金额"), SqlStorageType.SqlDecimal); + header.AddChild("ContractAmountOrder", new LocaleValue("合同返回未下单金额"), SqlStorageType.SqlDecimal); + header.AddChild("BidderNotAgency", new LocaleValue("中标未签约且未下单(万元)"), SqlStorageType.SqlDecimal); + header.AddChild("Sales", new LocaleValue("销售额"), SqlStorageType.SqlDecimal); + header.AddChild("InvoicedAmount", new LocaleValue("已开票额"), SqlStorageType.SqlDecimal); + header.AddChild("UnbilledAmount", new LocaleValue("未开票额"), SqlStorageType.SqlDecimal); + header.AddChild("ProjectSpecialIllustrate", new LocaleValue("项目特殊情况说明"), SqlStorageType.Sqlvarchar); + header.AddChild("Cost", new LocaleValue("成本"), SqlStorageType.SqlDecimal); + } + else + { + header.AddChild("Year", new LocaleValue("Year"), SqlStorageType.Sqlvarchar); + header.AddChild("TenderNumber", new LocaleValue("TenderNumber"), SqlStorageType.Sqlvarchar); + header.AddChild("TenderMain", new LocaleValue("TenderMain"), SqlStorageType.Sqlvarchar); + header.AddChild("Tender", new LocaleValue("Tender"), SqlStorageType.Sqlvarchar); + header.AddChild("ProjectName", new LocaleValue("ProjectName"), SqlStorageType.Sqlvarchar); + header.AddChild("TenderingUnit", new LocaleValue("TenderingUnit"), SqlStorageType.Sqlvarchar); + header.AddChild("BidProjectType", new LocaleValue("BidProjectType"), SqlStorageType.Sqlvarchar); + header.AddChild("ProvincesHead", new LocaleValue("ProvincesHead"), SqlStorageType.Sqlvarchar); + header.AddChild("Authorizer", new LocaleValue("Authorizer"), SqlStorageType.Sqlvarchar); + header.AddChild("Region", new LocaleValue("Region"), SqlStorageType.Sqlvarchar); + header.AddChild("Provinces", new LocaleValue("Provinces"), SqlStorageType.Sqlvarchar); + header.AddChild("BidProductsType", new LocaleValue("BidProductsType"), SqlStorageType.Sqlvarchar); + header.AddChild("BidProducts", new LocaleValue("BidProducts"), SqlStorageType.Sqlvarchar); + header.AddChild("BidPackageNumber", new LocaleValue("BidPackageNumber"), SqlStorageType.Sqlvarchar); + header.AddChild("WinningBid", new LocaleValue("WinningBid"), SqlStorageType.SqlDecimal); + header.AddChild("FrameVolume", new LocaleValue("FrameVolume"), SqlStorageType.SqlDecimal); + header.AddChild("WinningBidSubtotal", new LocaleValue("WinningBidSubtotal"), SqlStorageType.SqlDecimal); + header.AddChild("BidsDate", new LocaleValue("InstallationIllustrate"), SqlStorageType.SqlDatetime); + header.AddChild("InstallationIllustrate", new LocaleValue("InstallationIllustrate"), SqlStorageType.Sqlvarchar); + header.AddChild("Remark", new LocaleValue("Remark"), SqlStorageType.Sqlvarchar); + header.AddChild("ContractOriginalReturns", new LocaleValue("ContractOriginalReturns"), SqlStorageType.SqlDecimal); + header.AddChild("AmountOrder", new LocaleValue("AmountOrder"), SqlStorageType.SqlDecimal); + header.AddChild("AmountOriginalOrder", new LocaleValue("AmountOriginalOrder"), SqlStorageType.SqlDecimal); + header.AddChild("ContractAmountOrder", new LocaleValue("ContractAmountOrder"), SqlStorageType.SqlDecimal); + header.AddChild("BidderNotAgency", new LocaleValue("BidderNotAgency"), SqlStorageType.SqlDecimal); + header.AddChild("Sales", new LocaleValue("Sales"), SqlStorageType.SqlDecimal); + header.AddChild("InvoicedAmount", new LocaleValue("InvoicedAmount"), SqlStorageType.SqlDecimal); + header.AddChild("UnbilledAmount", new LocaleValue("UnbilledAmount"), SqlStorageType.SqlDecimal); + header.AddChild("ProjectSpecialIllustrate", new LocaleValue("ProjectSpecialIllustrate"), SqlStorageType.Sqlvarchar); + header.AddChild("Cost", new LocaleValue("Cost"), SqlStorageType.SqlDecimal); + } + foreach (var item in header.GetChilds()) + { + item.Width = 150; + } + return header; + } + + public override void BuilderReportSqlAndTempTable(IRptParams filter, string tableName) + { + DynamicObject customFilter = filter.FilterParameter.CustomFilter; + + // 年份 + string fDate = customFilter["FDate"]?.ToString(); + // 标书编号 + string fTender = customFilter["FTender"]?.ToString();//FTender + + base.BuilderReportSqlAndTempTable(filter, tableName); + + string sql = string.Format(@"/*dialect*/ + SELECT + * + INTO #TempTable1 + FROM + T_DB_TESTVIEW + WHERE 1=1"); + + //过滤条件 + if (!string.IsNullOrEmpty(fDate)) + { + string dateString = fDate.Split('-')[0]; + sql += string.Format(@" AND YEAR = {0}", dateString); + } + if (!string.IsNullOrEmpty(fTender)) + { + sql += string.Format(@" AND Tender = '{0}'", fTender); + } + + sql += string.Format(@";"); + + sql += string.Format(@"/*dialect*/ + Select + ROW_NUMBER() OVER (ORDER BY Year) AS FID, + ROW_NUMBER() OVER (ORDER BY Year) 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 fTender = customFilter["FTender"]?.ToString(); + + //这里是报表页面的标识 + reportTitles.AddTitle("FTender", fTender == null ? "" : fTender); + reportTitles.AddTitle("FDate", fDate == null ? "" : Convert.ToDateTime(fDate).ToString("yyyy-MM-dd")); + } + return reportTitles; + } + } +} diff --git a/TenderItem.sln b/TenderItem.sln new file mode 100644 index 0000000..35e6573 --- /dev/null +++ b/TenderItem.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.11.35327.3 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TenderItem.Induct", "TenderItem.Induct\TenderItem.Induct.csproj", "{B19F9275-CF4F-45AD-A0B1-A138317DDF6B}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B19F9275-CF4F-45AD-A0B1-A138317DDF6B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B19F9275-CF4F-45AD-A0B1-A138317DDF6B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B19F9275-CF4F-45AD-A0B1-A138317DDF6B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B19F9275-CF4F-45AD-A0B1-A138317DDF6B}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {62FD1093-89C0-435F-86D4-BD6B63A15E7C} + EndGlobalSection +EndGlobal