214 lines
9.7 KiB
C#
214 lines
9.7 KiB
C#
using GZ_KD_Parino.Common;
|
|
using GZ_KD_Parino.Services;
|
|
using GZ_KD_Parino.SQL;
|
|
using Kingdee.BOS.App;
|
|
using Kingdee.BOS.App.Data;
|
|
using Kingdee.BOS.Contracts;
|
|
using Kingdee.BOS.Core.DynamicForm.PlugIn;
|
|
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
|
|
using Kingdee.BOS.Core.Metadata;
|
|
using Kingdee.BOS.Orm.DataEntity;
|
|
using Kingdee.BOS.Util;
|
|
using System;
|
|
using System.ComponentModel;
|
|
using System.Data;
|
|
|
|
namespace GZ_KD_Parino.Sal_Order
|
|
{
|
|
[Description("销售订单--更新纸质合同号"), HotUpdate]
|
|
|
|
public class Save : AbstractOperationServicePlugIn
|
|
{
|
|
|
|
public override void OnPreparePropertys(PreparePropertysEventArgs e)
|
|
{
|
|
|
|
base.OnPreparePropertys(e);
|
|
//订单类别#
|
|
e.FieldKeys.Add("F_Ordercategory");
|
|
//日期
|
|
e.FieldKeys.Add("FDATE");
|
|
//纸质合同号
|
|
e.FieldKeys.Add("F_CONTRACTNUMBER");
|
|
//商机名称
|
|
e.FieldKeys.Add("F_BON");
|
|
//销售组织
|
|
e.FieldKeys.Add("FSaleOrgId");
|
|
//备用组织
|
|
e.FieldKeys.Add("F_SaleOrgId");
|
|
//退货类型
|
|
e.FieldKeys.Add("FBILLTYPEID");
|
|
}
|
|
|
|
/// <summary>
|
|
/// 保存后事件,保存事务结束后
|
|
/// </summary>
|
|
/// <param name="e"></param>
|
|
/// <exception cref="Exception"></exception>
|
|
public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
|
|
{
|
|
base.AfterExecuteOperationTransaction(e);
|
|
foreach (var rows in e.SelectedRows)
|
|
{
|
|
var Billobj = rows.DataEntity;
|
|
// 更新纸质合同号
|
|
var result = SqlManage.UpdateFlexNumber(this.Context, Convert.ToString(Billobj["Id"]));
|
|
// 获取商机名称
|
|
var F_BON = Billobj["F_BON"] as DynamicObject;
|
|
//
|
|
//获取销售组织
|
|
var SalZZFid = Billobj["SaleOrgId_Id"].ToString();
|
|
|
|
var FBILLTYPEID = Convert.ToString(Billobj["BILLTYPEID_Id"]);
|
|
if (F_BON == null)
|
|
{
|
|
continue;
|
|
}
|
|
//获取纸质合同号
|
|
var FlexNumber = SqlManage.GetFlexNumber(this.Context, Convert.ToString(Billobj["Id"]));
|
|
//如果已经存在纸质合同号,则不继续执行操作
|
|
if (FlexNumber == "")
|
|
{
|
|
return;
|
|
}
|
|
//退货订单不需要创建工程项目
|
|
if (FBILLTYPEID != "eacb50844fc84a10b03d7b841f3a6278")
|
|
{
|
|
continue;
|
|
}
|
|
//创建上下文变量,默认为administrator
|
|
var ctx = this.Context;
|
|
|
|
//获取当前用户名 和 用户ID
|
|
ctx.UserId = Convert.ToInt32(this.Context.UserId);
|
|
ctx.UserName = Convert.ToString(this.Context.UserName);
|
|
|
|
string fid = "";
|
|
if (SqlManage.CheckItem(this.Context, FlexNumber, "1").Count == 0)
|
|
{
|
|
//创建工程项目
|
|
fid = CommonHelper.CreateItemData(ctx, "1", FlexNumber, Convert.ToString(F_BON["Name"]));
|
|
}
|
|
else
|
|
{
|
|
string sql = string.Format(@"SELECT A.FID AS FID,A.FNUMBER AS FNUMBER FROM T_BAS_PREBDONE A LEFT JOIN T_BAS_PREBDONE_L B on A.FID = B.FID WHERE FNUMBER = '{0}' AND A.FUSEORGID = '1' AND B.FNAME = '{1}'", FlexNumber, Convert.ToString(Convert.ToString(F_BON["Name"])));
|
|
var sqlDS = DBUtils.ExecuteDynamicObject(this.Context, sql);
|
|
if (sqlDS.Count != 0)
|
|
{
|
|
fid = sqlDS[0]["FID"].ToString();
|
|
}
|
|
else
|
|
{
|
|
string sql1 = string.Format(@"SELECT FID FROM T_BAS_PREBDONE WHERE FNUMBER = '{0}' AND FUSEORGID = '{1}'", FlexNumber, SalZZFid);
|
|
|
|
var sqlDS1 = DBUtils.ExecuteDynamicObject(this.Context, sql1);
|
|
|
|
if (sqlDS1.Count == 0)
|
|
{
|
|
throw new Exception($"商机名称:{F_BON["Name"].ToString()},不存在对应的工程项目。");
|
|
}
|
|
fid = sqlDS1[0]["FID"].ToString();
|
|
// 更新项目名称
|
|
string F_contractnumberSQL1 = string.Format(@"UPDATE T_BAS_PREBDONE_L SET FNAME = '{0}' WHERE fid in (SELECT FID FROM T_BAS_PREBDONE WHERE FNUMBER = '{1}' AND FUSEORGID = '{2}' )", Convert.ToString(F_BON["Name"]), FlexNumber, SalZZFid);
|
|
DBUtils.ExecuteDynamicObject(ctx, F_contractnumberSQL1.ToString(), null, null, CommandType.Text, null);
|
|
// 更新项目状态
|
|
var F_contractnumberSQL2 = string.Format(@"UPDATE T_BAS_PREBDONE SET F_CXSFBG = 1 WHERE FNUMBER = '{0}' AND FUSEORGID = '{1}'", FlexNumber, SalZZFid);
|
|
DBUtils.ExecuteDynamicObject(ctx, F_contractnumberSQL2.ToString(), null, null, CommandType.Text, null);
|
|
|
|
//获取元数据服务
|
|
IMetaDataService metaDataService = ServiceHelper.GetService<IMetaDataService>();
|
|
|
|
//获取保存服务
|
|
ISaveService saveService = ServiceHelper.GetService<ISaveService>();
|
|
|
|
//获取加载数据服务
|
|
IViewService viewService = ServiceHelper.GetService<IViewService>();
|
|
|
|
//获取物料元数据
|
|
FormMetadata materialMetadata = metaDataService.Load(this.Context, "BAS_PreBaseDataOne") as FormMetadata;
|
|
|
|
//获取ID的工程项目数据
|
|
DynamicObject[] objs = viewService.Load(
|
|
this.Context,
|
|
new object[] { fid },
|
|
materialMetadata.BusinessInfo.GetDynamicObjectType()
|
|
);
|
|
|
|
//调用保存工程项目数据的保存服务
|
|
saveService.Save(this.Context, objs);
|
|
saveService.Save(this.Context, materialMetadata.BusinessInfo, objs);
|
|
}
|
|
}
|
|
|
|
|
|
//判断该销售组织是否存在工程项目
|
|
if (SqlManage.CheckItem(this.Context, FlexNumber, Convert.ToString((Billobj["SaleOrgId"] as DynamicObject)["Id"])).Count == 0)
|
|
{
|
|
var SaleOrgId = Billobj["SaleOrgId"] as DynamicObject;
|
|
CommonHelper.Allocate(ctx, fid, "BAS_PreBaseDataOne", Convert.ToString(SaleOrgId["Id"]), Convert.ToString(SaleOrgId["Name"]));
|
|
}
|
|
//判断该备货组织是否存在工程项目
|
|
if (SqlManage.CheckItem(this.Context, FlexNumber, Convert.ToString((Billobj["F_SaleOrgId"] as DynamicObject)["Id"])).Count == 0)
|
|
{
|
|
var F_SaleOrgId = Billobj["F_SaleOrgId"] as DynamicObject;
|
|
//分配工程项目
|
|
CommonHelper.Allocate(ctx, fid, "BAS_PreBaseDataOne", Convert.ToString(F_SaleOrgId["Id"]), Convert.ToString(F_SaleOrgId["Name"]));
|
|
}
|
|
//反写工程项目
|
|
SqlManage.UpdateItemData(this.Context, Convert.ToString(Billobj["Id"]), FlexNumber);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 开始保存插件
|
|
/// </summary>
|
|
/// <param name="e"></param>
|
|
public override void BeforeDoSaveExecute(BeforeDoSaveExecuteEventArgs e)
|
|
{
|
|
base.BeforeDoSaveExecute(e);
|
|
foreach (var billObj in e.DataEntities)
|
|
{
|
|
var cust = billObj["CustId"] as DynamicObject;
|
|
var saleOrg = billObj["SaleOrgId"] as DynamicObject;
|
|
var F_BON = billObj["F_BON"] as DynamicObject;
|
|
// 如果商机为空,直接跳过,不用带出历史单价
|
|
if (F_BON == null)
|
|
{
|
|
continue;
|
|
}
|
|
// 客户
|
|
var custId = cust["Id"].ToString();
|
|
// 销售组织
|
|
var saleOrgId = saleOrg["Id"].ToString();
|
|
// 商机项目
|
|
var F_BONId = F_BON["Id"].ToString();
|
|
var createDate = billObj["CreateDate"];
|
|
var date = DateTime.Now;
|
|
if (createDate != null)
|
|
{
|
|
date = Convert.ToDateTime(createDate);
|
|
}
|
|
var saleEntryList = billObj["SaleOrderEntry"] as DynamicObjectCollection;
|
|
|
|
var saleOrderService = new SaleOrderService(this.Context);
|
|
|
|
// TODO 销售订单,根据组织+客户+商机名称#+物料代码带出最近一次历史销售含税单价,取当前日期前,
|
|
// 审核日期最大的销售订单含税单价,日期越大表示离当前日期越近
|
|
foreach (var item in saleEntryList)
|
|
{
|
|
var material = item["MaterialId"] as DynamicObject;
|
|
var materialId = material["Id"].ToString();
|
|
var historyOrder = saleOrderService.GetHistoryOrder(saleOrgId, custId, F_BONId, materialId, date);
|
|
if (historyOrder == null)
|
|
{
|
|
continue;
|
|
}
|
|
var historyUnitPrice = Convert.ToDecimal(historyOrder["FTAXPRICE"]);
|
|
// 更新历史单价
|
|
item["F_LSDJ"] = historyUnitPrice;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
} |