using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kingdee.BOS;
using Kingdee.BOS.Util;
using Kingdee.BOS.Core;
using Kingdee.BOS.Contracts;
using Kingdee.BOS.Orm;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Orm.Metadata;
using Kingdee.BOS.Orm.Metadata.DataEntity;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.Core.Metadata.FieldElement;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Metadata.ConvertElement.PlugIn;
using Kingdee.BOS.BusinessEntity.Organizations;
using Kingdee.BOS.Resource;
using Kingdee.K3.SCM.Contracts;
using Kingdee.K3.SCM.App.Utils;
namespace Kingdee.K3.SCM.App.Pur.ServicePlugIn
{
/// <summary>
/// 采购申请单到采购订单的单据转换插件
/// </summary>
public class PurReqToOrderService : AbstractConvertPlugIn
{
public override void OnAfterFieldMapping(BOS.Core.Metadata.ConvertElement.PlugIn.Args.AfterFieldMappingEventArgs e)
{
long assignSupplierId = 0;
ExtendedDataEntity[] heads = e.TargetExtendDataEntitySet.FindByEntityKey("FBillHead");
if (heads == null)
{
return;
}
foreach (ExtendedDataEntity head in heads)
{
//映射过来表头指定供应商有值的更改供应商字段值为指定供应商的值
assignSupplierId = Convert.ToInt64(head.DataEntity["AssignSupplierId_Id"]);
if (assignSupplierId != 0)
{
SetSupplierId(e, assignSupplierId, head);
}
DynamicObject supplierObj = head.DataEntity["SupplierId"] as DynamicObject;
if (supplierObj != null)
{
DynamicObjectCollection porderFinance = head.DataEntity["POOrderFinance"] as DynamicObjectCollection;
DynamicObjectCollection supplierBusiness = supplierObj["SupplierFinance"] as DynamicObjectCollection;
if (supplierBusiness != null && supplierBusiness.Count > 0)
{
long payConditionId = Convert.ToInt64(supplierBusiness[0]["PayCondition_Id"]);
BaseDataField payConditionIdOjb = e.TargetBusinessInfo.GetField("FPayConditionId") as BaseDataField;
FieldUtils.SetBaseDataFieldValue(this.Context, payConditionIdOjb, porderFinance[0], payConditionId);
}
}
}
}
public override void OnFieldMapping(BOS.Core.Metadata.ConvertElement.PlugIn.Args.FieldMappingEventArgs e)
{
if (e.TargetField.Key.ToUpperInvariant() == "FSUPPLIERID")
{
if (this.OperationNumber.EqualsIgnoreCase("Draw"))
{
if (Convert.ToInt64(e.ExtendedDataEntity.DataEntity["SupplierId_Id"]) > 0)
{
e.Cancel = true;
}
}
else
{
List<DynamicObject> sourceDatas = e.ExtendedDataEntity["ConvertSource"] as List<DynamicObject>;
long suggestSupplierId = sourceDatas.Where(p => p != null && Convert.ToInt64(p["FSuggestSupplierId"]) > 0).Select(p => Convert.ToInt64(p["FSuggestSupplierId"])).FirstOrDefault();
e.MapValue = suggestSupplierId;
}
}
base.OnFieldMapping(e);
}
private void SetSupplierId(BOS.Core.Metadata.ConvertElement.PlugIn.Args.AfterFieldMappingEventArgs e, long supplierId, ExtendedDataEntity head)
{
head.DataEntity["SupplierId_Id"] = supplierId;
BaseDataField supplier = e.TargetBusinessInfo.GetField("FSupplierId") as BaseDataField;
FieldUtils.SetBaseDataFieldValue(this.Context, supplier, head.DataEntity, supplierId);
}
}
}