1467 lines
77 KiB
C#
Raw Normal View History

2025-04-07 21:06:39 +08:00
using DocumentFormat.OpenXml.Office2016.Drawing.ChartDrawing;
using Kingdee.BOS.App.Core.Report;
using Kingdee.BOS.App.Data;
using Kingdee.BOS.Core.DynamicForm;
using Kingdee.BOS.Core.DynamicForm.PlugIn;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata.EntityElement;
using Kingdee.BOS.Core.Permission;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.Performance.Publisher;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.Util;
using Newtonsoft.Json;
using Pilot_KD_Parino.Common;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static Pilot_KD_Parino.QPHY_AutoWrire.Bill3;
namespace Pilot_KD_Parino.QPHY_AutoWrire
{
[HotUpdate]
[Description("收款核销2")]
//核销在用的
public class Bill2 : AbstractDynamicFormPlugIn
{
//全局存储单据体数据
public List<CombinaClass> SaleBILLLIS = new List<CombinaClass>();
public List<CombinaClass> ReceiveBILLLIST = new List<CombinaClass>();
//拿来匹配的集合
public List<CombinaClass> SaleBILLLIS2 = new List<CombinaClass>();
int INDEXNumber = 0;
/// <summary>
/// 开始
/// </summary>
/// <param name="e"></param>
public override void OnLoad(EventArgs e)
{
base.OnLoad(e);
SaleBILLLIS = new List<CombinaClass>();
ReceiveBILLLIST = new List<CombinaClass>();
List<CombinaClass> SaleBILLLISnew = new List<CombinaClass>();
List<CombinaClass> ReceiveBILLLISTNew = new List<CombinaClass>();
//删除四个单据体
this.View.Model.DeleteEntryData("FEntity");
this.View.Model.DeleteEntryData("FEntity2");
var FOrgId = this.Context.CurrentOrganizationInfo.ID;
var FShuaXin = this.View.Model.GetValue("FShuaXin");
//调用SQL获取数据
var WriteOrderDate = SQL.SqlManage.GetWriteOrderDate3(this.Context, Convert.ToString(FOrgId));
var WriteReceiveDate = SQL.SqlManage.GetWriteReceiveDate3(this.Context, Convert.ToString(FOrgId));
foreach (var item in WriteOrderDate)
{
SaleBILLLIS.Add(new CombinaClass()
{
FBIllNO = Convert.ToString(item["FBIllNO"]),
FCONTRACTNUMBER = Convert.ToString(item["F_CONTRACTNUMBER"]),
FClient = Convert.ToInt32(item["FCUSTID"]),
FDate = Convert.ToString(item["FDate"]),
FALLAMOUNT = Convert.ToDouble(item["FALLAMOUNT"]),
FYAMOUNT = Convert.ToDouble(item["FYAMOUNT"]),
FDAMOUNT = Convert.ToDouble(item["FDAMOUNT"]),
FCreated = Convert.ToInt32(item["FCREATORID"]),
FSalesman = Convert.ToInt32(item["FSALERID"]),
FIs30 = Convert.ToBoolean(item["FIs30"]),
FType = Convert.ToString(item["FType"]),
});
}
foreach (var item in WriteReceiveDate)
{
ReceiveBILLLIST.Add(new CombinaClass()
{
FBIllNO = Convert.ToString(item["FBIllNO"]),
FDate = Convert.ToString(item["FDate"]),
FALLAMOUNT = Convert.ToDouble(item["FALLAMOUNT"]),
FYAMOUNT = Convert.ToDouble(item["FYAMOUNT"]),
FDAMOUNT = Convert.ToDouble(item["FDAMOUNT"]),
FClient = Convert.ToInt32(item["FCONTACTUNIT"]),
FCreated = Convert.ToInt32(item["FCREATORID"]),
FRemark = Convert.ToString(item["FREMARK"]),
FSalesman = Convert.ToInt32(item["FSALEERID"]),
//FALLAMOUNTY = Convert.ToDouble(item["FALLAMOUNTY"]),
//FCurr = Convert.ToInt32(item["FCurr"])
});
}
SaleBILLLIS2 = SaleBILLLIS.Where(t => t.FIs30 == true).ToList();
//绑定销售订单数据
for (int i = 0; i < SaleBILLLIS2.Count; i++)
{
int rowindex = this.View.Model.GetEntryRowCount("FEntity");
this.View.Model.CreateNewEntryRow("FEntity");
//单据编号
this.View.Model.SetValue("FBILLNO", SaleBILLLIS2[i].FBIllNO, i);
//日期
this.View.Model.SetValue("FDate", DateTime.Now.AddDays(-1 * Convert.ToInt32(SaleBILLLIS2[i].FDate)).ToString("yyyy-MM-dd"), i);
//金额
this.View.Model.SetValue("F_MBBA_Decimal_c1c", SaleBILLLIS2[i].FALLAMOUNT, i);
//类型
this.View.Model.SetValue("FType", SaleBILLLIS2[i].FType, i);
//纸质合同号
this.View.Model.SetValue("FCONTRACTNUMBER", SaleBILLLIS2[i].FCONTRACTNUMBER, i);
//客户名称
this.View.Model.SetValue("FClient", SaleBILLLIS2[i].FClient, i);
//已核销金额
this.View.Model.SetValue("F_MBBA_Decimal_vb1", SaleBILLLIS2[i].FYAMOUNT, i);
//待核销金额
this.View.Model.SetValue("F_MBBA_Decimal_emq", SaleBILLLIS2[i].FDAMOUNT, i);
//商务人员
this.View.Model.SetValue("FCreated", SaleBILLLIS2[i].FCreated, i);
//销售员
this.View.Model.SetValue("FSalesman", SaleBILLLIS2[i].FSalesman, i);
this.View.UpdateView("FEntity");
}
//绑定收款单数据
for (int i = 0; i < ReceiveBILLLIST.Count; i++)
{
int rowindex = this.View.Model.GetEntryRowCount("FEntity2");
this.View.Model.CreateNewEntryRow("FEntity2");
//单据编号
this.View.Model.SetValue("FBILLNO2", ReceiveBILLLIST[i].FBIllNO, i);
//日期
this.View.Model.SetValue("FDate2", DateTime.Now.AddDays(-1 * Convert.ToInt32(ReceiveBILLLIST[i].FDate)).ToString("yyyy-MM-dd"), i);
//金额
this.View.Model.SetValue("F_MBBA_Decimal_jdx", ReceiveBILLLIST[i].FALLAMOUNT, i);
//客户名称
this.View.Model.SetValue("FClient2", ReceiveBILLLIST[i].FClient, i);
//备注
this.View.Model.SetValue("FRemark", ReceiveBILLLIST[i].FRemark, i);
//已核销金额
this.View.Model.SetValue("F_MBBA_Decimal_391", ReceiveBILLLIST[i].FYAMOUNT, i);
//待核销金额
this.View.Model.SetValue("F_MBBA_Decimal_mjq", ReceiveBILLLIST[i].FDAMOUNT, i);
//商务人员
this.View.Model.SetValue("FCreated2", ReceiveBILLLIST[i].FCreated, i);
//销售员
this.View.Model.SetValue("FSalesman2", ReceiveBILLLIST[i].FSalesman, i);
this.View.UpdateView("FEntity2");
}
}
/// <summary>
/// 编辑按钮点击事件
/// </summary>
/// <param name="e"></param>
public override void BeforeF7Select(BeforeF7SelectEventArgs e)
{
base.BeforeF7Select(e);
if (e.FieldKey.EqualsIgnoreCase("FCONTRACTNUMBER2"))
{
//获取收款单号
var fBillNo = this.View.Model.GetValue("FBILLNO2", e.Row).ToString();
//获取收款单单据体数据
DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection;
//新建存储类
List<StringFBILLNO> stringFBILLNO = new List<StringFBILLNO>();
foreach (var item in FEntity)
{
if (!string.IsNullOrWhiteSpace(item["FISHX"]?.ToString()))
{
StringFBILLNO stringFBILLNO1 = new StringFBILLNO();
stringFBILLNO1.FBILLNO = item["FBILLNO"]?.ToString();
stringFBILLNO.Add(stringFBILLNO1);
}
}
ShowDynamicForm(stringFBILLNO, fBillNo);
}
}
/// <summary>
/// 存储为配对核销的销售订单号
/// </summary>
public class StringFBILLNO
{
/// <summary>
/// 销售订单号/应收单号(纸质合同号)
/// </summary>
public string FBILLNO { get; set; }
}
/// <summary>
/// 弹出动态表单窗口
/// </summary>
private void ShowDynamicForm(List<StringFBILLNO> stringFBILLNO, string fBillNo)
{
// 将列表序列化为JSON字符串
string jsonFBILLNO = JsonConvert.SerializeObject(stringFBILLNO);
// 创建动态表单显示参数
DynamicFormShowParameter dynamicFormShowParameter = new DynamicFormShowParameter();
//dynamicFormShowParameter.FormId = "VRYF_WriteoffWindow"; // 表单ID
dynamicFormShowParameter.FormId = "MBBA_WriteoffWindow"; // 替换为实际动态表单ID
dynamicFormShowParameter.OpenStyle.ShowType = ShowType.Modal; // 以模态窗口形式显示
// 添加自定义参数,用于传递数据
dynamicFormShowParameter.CustomParams.Add("fBillNo", fBillNo); // 根据需要设置参数
dynamicFormShowParameter.CustomParams.Add("stringFBILLNO", jsonFBILLNO); // 根据需要设置参数
dynamicFormShowParameter.CustomParams.Add("IsEditable", "true"); // 确保表单是可编辑的
var stringFBILLNOANDList = new List<StringFBILLNOANDList>();
// 显示动态表单
this.View.ShowForm(dynamicFormShowParameter, result =>
{
if (result != null && result.ReturnData != null)
{
stringFBILLNOANDList.Add((StringFBILLNOANDList)result.ReturnData);
}
//判断是否获取到数据
if (stringFBILLNOANDList[0].FBILLNOList.Count > 0)
{
//获取销售订单/应收单单据体数据
DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection;
//获取收款单单据体数据
DynamicObjectCollection FEntity2 = this.View.Model.DataObject["FEntity2"] as DynamicObjectCollection;
SaleBILLLIS = new List<CombinaClass>();
ReceiveBILLLIST = new List<CombinaClass>();
foreach (var item in FEntity)
{
SaleBILLLIS.Add(new CombinaClass()
{
FBIllNO = Convert.ToString(item["FBILLNO"]),
FCONTRACTNUMBER = Convert.ToString(item["FCONTRACTNUMBER"]),
FClient = Convert.ToInt32(item["FClient_Id"]),
FDate = Convert.ToString(item["FDate"]),
FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_c1c"]),
FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_vb1"]),
FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_emq"]),
FSKBIllNO = Convert.ToString(item["FSKBILLNO"]),
FCreated = Convert.ToInt32(item["FCreated_Id"]),
FSalesman = Convert.ToInt32(item["FSalesman_Id"]),
FType = Convert.ToString(item["FType"]),
FISHX = item["FISHX"]?.ToString(),
FWeiYi = item["FWeiYi"]?.ToString(),
});
}
foreach (var item in FEntity2)
{
ReceiveBILLLIST.Add(new CombinaClass()
{
FBIllNO = Convert.ToString(item["FBILLNO2"]),
FDate = Convert.ToString(item["FDate2"]),
FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_jdx"]),
FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_391"]),
FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_mjq"]),
FClient = Convert.ToInt32(item["FClient2_Id"]),
FCONTRACTNUMBER = item["FCONTRACTNUMBER2"]?.ToString(),
FRemark = Convert.ToString(item["FRemark"]),
FCreated = Convert.ToInt32(item["FCreated2_Id"]),
FSalesman = Convert.ToInt32(item["FSalesman2_Id"]),
FISHX = item["FISHX2"]?.ToString(),
FWeiYi = item["FWeiYi2"]?.ToString(),
});
}
//获取纸质合同号
List<string> fString = new List<string>();
//修改销售订单/应收单
foreach (var item in stringFBILLNOANDList[0].FBILLNOList)
{
foreach (var item2 in SaleBILLLIS)
{
if (item2.FBIllNO == item.FBILLNO)
{
item2.FSKBIllNO = stringFBILLNOANDList[0].FBILLNO;
fString.Add(item2.FCONTRACTNUMBER);
item2.FISHX = "已核销配对";
}
}
}
string fCONTRACTNUMBER = string.Join(",", fString);
//修改收款单
foreach (var item in ReceiveBILLLIST)
{
if (item.FBIllNO == stringFBILLNOANDList[0].FBILLNO)
{
item.FCONTRACTNUMBER = fCONTRACTNUMBER;
item.FISHX = "已核销配对";
}
}
//删除数据
this.View.Model.DeleteEntryData("FEntity");
this.View.Model.DeleteEntryData("FEntity2");
//绑定销售订单数据
for (int i = 0; i < SaleBILLLIS.Count; i++)
{
int rowindex = this.View.Model.GetEntryRowCount("FEntity");
this.View.Model.CreateNewEntryRow("FEntity");
//单据编号
this.View.Model.SetValue("FBILLNO", SaleBILLLIS[i].FBIllNO, i);
//日期
this.View.Model.SetValue("FDate", SaleBILLLIS[i].FDate, i);
//金额
this.View.Model.SetValue("F_MBBA_Decimal_c1c", SaleBILLLIS[i].FALLAMOUNT, i);
//类型
this.View.Model.SetValue("FType", SaleBILLLIS[i].FType, i);
//纸质合同号
this.View.Model.SetValue("FCONTRACTNUMBER", SaleBILLLIS[i].FCONTRACTNUMBER, i);
//客户名称
this.View.Model.SetValue("FClient", SaleBILLLIS[i].FClient, i);
//已核销金额
this.View.Model.SetValue("F_MBBA_Decimal_vb1", SaleBILLLIS[i].FYAMOUNT, i);
//待核销金额
this.View.Model.SetValue("F_MBBA_Decimal_emq", SaleBILLLIS[i].FDAMOUNT, i);
//单据编号(收款单)
this.View.Model.SetValue("FSKBILLNO", SaleBILLLIS[i].FSKBIllNO, i);
//是否核销匹对
this.View.Model.SetValue("FISHX", SaleBILLLIS[i].FISHX, i);
//是否唯一
this.View.Model.SetValue("FWeiYi", SaleBILLLIS[i]?.FWeiYi, i);
//商务人员
this.View.Model.SetValue("FCreated", SaleBILLLIS[i].FCreated, i);
//销售员
this.View.Model.SetValue("FSalesman", SaleBILLLIS[i].FSalesman, i);
}
this.View.UpdateView("FEntity");
//绑定收款单数据
for (int i = 0; i < ReceiveBILLLIST.Count; i++)
{
int rowindex = this.View.Model.GetEntryRowCount("FEntity2");
this.View.Model.CreateNewEntryRow("FEntity2");
//单据编号
this.View.Model.SetValue("FBILLNO2", ReceiveBILLLIST[i].FBIllNO, i);
//日期
this.View.Model.SetValue("FDate2", ReceiveBILLLIST[i].FDate, i);
//金额
this.View.Model.SetValue("F_MBBA_Decimal_jdx", ReceiveBILLLIST[i].FALLAMOUNT, i);
//客户名称
this.View.Model.SetValue("FClient2", ReceiveBILLLIST[i].FClient, i);
//备注
this.View.Model.SetValue("FRemark", ReceiveBILLLIST[i].FRemark, i);
//已核销金额
this.View.Model.SetValue("F_MBBA_Decimal_391", ReceiveBILLLIST[i].FYAMOUNT, i);
//待核销金额
this.View.Model.SetValue("F_MBBA_Decimal_mjq", ReceiveBILLLIST[i].FDAMOUNT, i);
//纸质合同号
this.View.Model.SetValue("FCONTRACTNUMBER2", ReceiveBILLLIST[i].FCONTRACTNUMBER, i);
//是否核销匹对
this.View.Model.SetValue("FISHX2", ReceiveBILLLIST[i].FISHX, i);
//是否唯一
this.View.Model.SetValue("FWeiYi2", ReceiveBILLLIST[i]?.FWeiYi, i);
//商务人员
this.View.Model.SetValue("FCreated2", ReceiveBILLLIST[i].FCreated, i);
//销售员
this.View.Model.SetValue("FSalesman2", ReceiveBILLLIST[i].FSalesman, i);
}
this.View.UpdateView("FEntity2");
}
});
}
/// <summary>
/// 弹出动态表单窗口2
/// </summary>
private void ShowDynamicForm2(List<StringFBILLNO> stringFBILLNO, string fBillNo)
{
// 将列表序列化为JSON字符串
string jsonFBILLNO = JsonConvert.SerializeObject(stringFBILLNO);
// 创建动态表单显示参数
DynamicFormShowParameter dynamicFormShowParameter = new DynamicFormShowParameter();
//dynamicFormShowParameter.FormId = "VRYF_OrderWindow"; // 表单ID
dynamicFormShowParameter.FormId = "MBBA_OrderWindow"; // 替换为实际动态表单ID
dynamicFormShowParameter.OpenStyle.ShowType = ShowType.Modal; // 以模态窗口形式显示
// 添加自定义参数,用于传递数据
dynamicFormShowParameter.CustomParams.Add("fBillNo", fBillNo); // 根据需要设置参数
dynamicFormShowParameter.CustomParams.Add("stringFBILLNO", jsonFBILLNO); // 根据需要设置参数
dynamicFormShowParameter.CustomParams.Add("IsEditable", "true"); // 确保表单是可编辑的
var stringFBILLNOANDList = new List<StringFBILLNOANDList>();
// 显示动态表单
this.View.ShowForm(dynamicFormShowParameter);
}
/// <summary>
/// 单据体双击事件
/// </summary>
/// <param name="e"></param>
public override void EntityRowDoubleClick(EntityRowClickEventArgs e)
{
base.EntityRowDoubleClick(e);
if (e.Key == "FENTITY2")
{
//获取收款单号
var fBillNo = this.View.Model.GetValue("FBILLNO2", e.Row).ToString();
//获取收款单单据体数据
DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection;
List<StringFBILLNO> stringFBILLNO = new List<StringFBILLNO>();
foreach (var item in FEntity)
{
//判断如果有多个收款单的情况
var stringNo = item["FSKBILLNO"]?.ToString();
if (!string.IsNullOrWhiteSpace(stringNo))
{
string[] stringNosp = stringNo?.Split(',');
if (stringNosp.Contains(fBillNo))
{
StringFBILLNO stringFBILLNO1 = new StringFBILLNO();
stringFBILLNO1.FBILLNO = item["FBILLNO"]?.ToString();
stringFBILLNO.Add(stringFBILLNO1);
}
}
}
//判断是否存在纸质合同号
var fCONTRACTNUMBER = this.View.Model.GetValue("FCONTRACTNUMBER2", e.Row)?.ToString();
if (!string.IsNullOrEmpty(fCONTRACTNUMBER))
{
ShowDynamicForm2(stringFBILLNO, fBillNo);
}
}
}
/// <summary>
/// 点击按钮操作
/// </summary>
/// <param name="e"></param>
public override void AfterBarItemClick(AfterBarItemClickEventArgs e)
{
base.AfterBarItemClick(e);
//自动匹配
if (e.BarItemKey.ToString().Equals("MBBA_tbButton_2"))
{
//销售订单绑定数据
var SaleBILLLISNew = new List<CombinaClass>(SaleBILLLIS);
List<string> FBILLNOLIST = new List<string>();
List<int> FClient = new List<int>();
List<DataItem> result = new List<DataItem>();
var FStartTime = DateTime.Now;
#region
//var SaleBILLLIS2Sal = SaleBILLLIS2.Where(t => t.FType == "销售订单" && t.FISHX != "已核销配对").ToList();
var SaleBILLLIS2Sal = SaleBILLLIS2.Where(t => t.FType == "销售订单").ToList();
//-----------20250117--------------------↓
//将销售订单根据客户分组
var FClientList = SaleBILLLIS2Sal.GroupBy(t => t.FClient).ToList();
//计算分组汇总合计金额用于配对收款单
for (int i = 0; i < FClientList.Count; i++)
{
List<DataItem> result2 = new List<DataItem>();
var SaleSumAmount = SaleBILLLIS2Sal.Where(a => a.FClient == FClientList[i].Key).ToList();
CombinationGenerator.GetCombinations2(SaleSumAmount, 0, FBILLNOLIST, FClient, ref result2, 0);
result.AddRange(result2);
}
//------------20250117-------------------↑
//存储收款单用于核销
List<CombinaClass> ReceiveBILLLISTNew = new List<CombinaClass>(ReceiveBILLLIST);
//存储对应销售订单/应收单以及收款单的
List<DataItem> resultNew = new List<DataItem>();
//先挑1张收款单对应一张销售订单
for (int i = 0; i < ReceiveBILLLIST.Count; i++)
{
var aaa = CombinationGenerator.GetCombinationsDataByList2(result, ReceiveBILLLIST[i].FDAMOUNT, ReceiveBILLLIST[i].FClient);
if (aaa.Count > 0)
{
//FBIllNO存放对应的销售订单编号、FBIllNO2存放对应收款单编号
result = CombinationGenerator.DeleteCombinationsDataByList(result, aaa[0].FBIllNO);
foreach (var item in SaleBILLLIS.Where(t => aaa[0].FBIllNO.Contains(t.FBIllNO)))
{
SaleBILLLIS2Sal.Remove(item);
}
//获取纸质合同号
List<string> fString = new List<string>();
foreach (var item in SaleBILLLISNew)
{
if (item.FBIllNO.Equals(aaa[0].FBIllNO[0].ToString()))
{
//更新销售订单数据
item.FSKBIllNO = ReceiveBILLLIST[i].FBIllNO;
//if (item.FDAMOUNT != 0)
//{
// item.FYAMOUNT = item.FDAMOUNT;
//}
//item.FDAMOUNT = 0;
item.FISHX = "已核销配对";
fString.Add(item.FCONTRACTNUMBER);
}
}
string fCONTRACTNUMBER = string.Join(",", fString);
//更新收款单数据
ReceiveBILLLIST[i].FCONTRACTNUMBER = fCONTRACTNUMBER;
//if (ReceiveBILLLIST[i].FDAMOUNT != 0)
//{
// ReceiveBILLLIST[i].FYAMOUNT = ReceiveBILLLIST[i].FDAMOUNT;
//}
//ReceiveBILLLIST[i].FDAMOUNT = 0;
ReceiveBILLLIST[i].FISHX = "已核销配对";
//删除已核销匹对的收款单
ReceiveBILLLISTNew.Remove(ReceiveBILLLIST[i]);
}
}
//先挑1张收款单对应多张张销售订单
for (int i = 0; i < ReceiveBILLLISTNew.Count; i++)
{
var resultNew2 = CombinationGenerator.GetCombinationsDataByList(result, ReceiveBILLLISTNew[i].FDAMOUNT, ReceiveBILLLISTNew[i].FClient);
if (resultNew2.Count > 0)
{
result = CombinationGenerator.DeleteCombinationsDataByList(result, resultNew2[0].FBIllNO);
foreach (var item in SaleBILLLIS.Where(t => resultNew2[0].FBIllNO.Contains(t.FBIllNO)))
{
SaleBILLLIS2Sal.Remove(item);
}
//获取纸质合同号
List<string> fString = new List<string>();
//循环销售订单
foreach (var item in resultNew2[0].FBIllNO)
{
foreach (var item2 in SaleBILLLISNew)
{
if (item2.FBIllNO.Equals(item))
{
item2.FSKBIllNO = ReceiveBILLLISTNew[i].FBIllNO;
//if (item2.FDAMOUNT != 0)
//{
// item2.FYAMOUNT = item2.FDAMOUNT;
//}
//item2.FDAMOUNT = 0;
item2.FISHX = "已核销配对";
fString.Add(item2.FCONTRACTNUMBER);
}
}
}
string fCONTRACTNUMBER = string.Join(",", fString);
//循环收款单
foreach (var item in ReceiveBILLLIST.Where(t => t.FBIllNO == ReceiveBILLLISTNew[i].FBIllNO))
{
item.FCONTRACTNUMBER = fCONTRACTNUMBER;
//if (item.FDAMOUNT != 0)
//{
// item.FYAMOUNT = item.FDAMOUNT;
//}
//item.FDAMOUNT = 0;
item.FISHX = "已核销配对";
}
//删除已核销匹对的收款单
ReceiveBILLLISTNew.Remove(ReceiveBILLLISTNew[i]);
}
}
//-----------20250118--------------------↓
//将收款单根据客户分组
var SKFClientList = ReceiveBILLLISTNew.GroupBy(t => t.FClient).ToList();
result = new List<DataItem>();
for (int i = 0; i < SKFClientList.Count; i++)
{
List<DataItem> result2 = new List<DataItem>();
var SaleSumAmount = ReceiveBILLLISTNew.Where(a => a.FClient == SKFClientList[i].Key).ToList();
CombinationGenerator.GetCombinations2(SaleSumAmount, 0, FBILLNOLIST, FClient, ref result2, 0);
result.AddRange(result2);
}
//1个销售订单对应多张收款单
for (int i = 0; i < SaleBILLLIS2Sal.Count; i++)
{
var resultNew2 = CombinationGenerator.GetCombinationsDataByListTK(result, SaleBILLLIS2Sal[i].FDAMOUNT, SaleBILLLIS2Sal[i].FClient);
if (resultNew2.Count > 0)
{
result = CombinationGenerator.DeleteCombinationsDataByList(result, resultNew2[0].FBIllNO2);
foreach (var item in ReceiveBILLLIST.Where(t => resultNew2[0].FBIllNO2.Contains(t.FBIllNO)))
{
ReceiveBILLLISTNew.Remove(item);
}
foreach (var item in SaleBILLLISNew.Where(a => a.FBIllNO == SaleBILLLIS2Sal[i].FBIllNO))
{
string fCONTRACTNUMBER = string.Join(",", resultNew2[0].FBIllNO2);
item.FSKBIllNO = fCONTRACTNUMBER;
item.FWeiYi = "是";
//if (item.FDAMOUNT != 0)
//{
// item.FYAMOUNT = item.FDAMOUNT;
//}
//item.FDAMOUNT = 0;
item.FISHX = "已核销配对";
}
foreach (var item in resultNew2[0].FBIllNO2)
{
foreach (var item2 in ReceiveBILLLIST)
{
if (item2.FBIllNO.Equals(item))
{
item2.FCONTRACTNUMBER = SaleBILLLIS2Sal[i].FCONTRACTNUMBER;
item2.FWeiYi = "否";
//if (item2.FDAMOUNT != 0)
//{
// item2.FYAMOUNT = item2.FDAMOUNT;
//}
//item2.FDAMOUNT = 0;
item2.FISHX = "已核销配对";
}
}
}
SaleBILLLIS2Sal.Remove(SaleBILLLIS2Sal[i]);
}
}
//-----------20250118--------------------↑
#endregion
#region
//var SaleBILLLIS2Receive = SaleBILLLIS2.Where(t => t.FType == "应收单" && t.FISHX != "已核销配对").ToList();
var SaleBILLLIS2Receive = SaleBILLLIS2.Where(t => t.FType == "应收单").ToList();
result = new List<DataItem>();
//-----------20250117--------------------↓
var FClientList2 = SaleBILLLIS2Receive.GroupBy(t => t.FClient).ToList();
//计算分组汇总合计金额用于配对收款单
for (int i = 0; i < FClientList2.Count; i++)
{
List<DataItem> result2 = new List<DataItem>();
var SaleSumAmount = SaleBILLLIS2Receive.Where(a => a.FClient == FClientList2[i].Key).ToList();
CombinationGenerator.GetCombinations2(SaleSumAmount, 0, FBILLNOLIST, FClient, ref result2, 0);
result.AddRange(result2);
}
//------------20250117-------------------↑
//先挑1张收款单对应一张应收单
for (int i = 0; i < ReceiveBILLLISTNew.Count; i++)
{
var aaa = CombinationGenerator.GetCombinationsDataByList2(result, ReceiveBILLLISTNew[i].FDAMOUNT, ReceiveBILLLISTNew[i].FClient);
if (aaa.Count > 0)
{
result = CombinationGenerator.DeleteCombinationsDataByList(result, aaa[0].FBIllNO);
foreach (var item in SaleBILLLIS.Where(t => aaa[0].FBIllNO.Contains(t.FBIllNO)))
{
SaleBILLLIS2Receive.Remove(item);
}
//获取纸质合同号
List<string> fString = new List<string>();
foreach (var item in SaleBILLLISNew)
{
if (item.FBIllNO.Equals(aaa[0].FBIllNO[0].ToString()))
{
//更新销售订单数据
item.FSKBIllNO = ReceiveBILLLISTNew[i].FBIllNO;
//if (item.FDAMOUNT != 0)
//{
// item.FYAMOUNT = item.FDAMOUNT;
//}
//item.FDAMOUNT = 0;
item.FISHX = "已核销配对";
fString.Add(item.FCONTRACTNUMBER);
}
}
string fCONTRACTNUMBER = string.Join(",", fString);
//更新收款单数据
ReceiveBILLLIST[i].FCONTRACTNUMBER = fCONTRACTNUMBER;
//if (ReceiveBILLLIST[i].FDAMOUNT != 0)
//{
// ReceiveBILLLIST[i].FYAMOUNT = ReceiveBILLLIST[i].FDAMOUNT;
//}
//ReceiveBILLLIST[i].FDAMOUNT = 0;
ReceiveBILLLIST[i].FISHX = "已核销配对";
//删除已核销匹对的收款单
ReceiveBILLLISTNew.Remove(ReceiveBILLLIST[i]);
}
}
//先挑1张收款单对应多张应收单
for (int i = 0; i < ReceiveBILLLISTNew.Count; i++)
{
var resultNew2 = CombinationGenerator.GetCombinationsDataByList(result, ReceiveBILLLISTNew[i].FDAMOUNT, ReceiveBILLLISTNew[i].FClient);
if (resultNew2.Count > 0)
{
result = CombinationGenerator.DeleteCombinationsDataByList(result, resultNew2[0].FBIllNO);
foreach (var item in SaleBILLLIS.Where(t => resultNew2[0].FBIllNO.Contains(t.FBIllNO)))
{
SaleBILLLIS2Receive.Remove(item);
}
//获取纸质合同号
List<string> fString = new List<string>();
foreach (var item in resultNew2[0].FBIllNO)
{
foreach (var item2 in SaleBILLLISNew)
{
if (item2.FBIllNO.Equals(item))
{
item2.FSKBIllNO = ReceiveBILLLISTNew[i].FBIllNO;
//if (item2.FDAMOUNT != 0)
//{
// item2.FYAMOUNT = item2.FDAMOUNT;
//}
//item2.FDAMOUNT = 0;
item2.FISHX = "已核销配对";
fString.Add(item2.FCONTRACTNUMBER);
}
}
}
string fCONTRACTNUMBER = string.Join(",", fString);
foreach (var item in ReceiveBILLLIST.Where(t => t.FBIllNO == ReceiveBILLLISTNew[i].FBIllNO))
{
//更新收款单数据
item.FCONTRACTNUMBER = fCONTRACTNUMBER;
//if (item.FDAMOUNT != 0)
//{
// item.FYAMOUNT = item.FDAMOUNT;
//}
//item.FDAMOUNT = 0;
item.FISHX = "已核销配对";
}
//删除已核销匹对的收款单
ReceiveBILLLISTNew.Remove(ReceiveBILLLISTNew[i]);
}
}
//-----------20250118--------------------↓
//将收款单根据客户分组
var SKFClientList2 = ReceiveBILLLISTNew.GroupBy(t => t.FClient).ToList();
result = new List<DataItem>();
for (int i = 0; i < SKFClientList2.Count; i++)
{
List<DataItem> result2 = new List<DataItem>();
var SaleSumAmount = ReceiveBILLLISTNew.Where(a => a.FClient == SKFClientList2[i].Key).ToList();
CombinationGenerator.GetCombinations2(SaleSumAmount, 0, FBILLNOLIST, FClient, ref result2, 0);
result.AddRange(result2);
}
//1个应收单对应多张收款单
for (int i = 0; i < SaleBILLLIS2Receive.Count; i++)
{
var resultNew2 = CombinationGenerator.GetCombinationsDataByListTK(result, SaleBILLLIS2Receive[i].FDAMOUNT, SaleBILLLIS2Receive[i].FClient);
if (resultNew2.Count > 0)
{
result = CombinationGenerator.DeleteCombinationsDataByList(result, resultNew2[0].FBIllNO2);
foreach (var item in SaleBILLLIS.Where(t => resultNew2[0].FBIllNO.Contains(t.FBIllNO)))
{
SaleBILLLIS2Receive.Remove(item);
}
foreach (var item in SaleBILLLISNew.Where(a => a.FBIllNO == SaleBILLLIS2Sal[i].FBIllNO))
{
string fCONTRACTNUMBER = string.Join(",", resultNew2[0].FBIllNO2);
item.FSKBIllNO = fCONTRACTNUMBER;
item.FWeiYi = "是";
//if (item.FDAMOUNT != 0)
//{
// item.FYAMOUNT = item.FDAMOUNT;
//}
//item.FDAMOUNT = 0;
item.FISHX = "已核销配对";
}
foreach (var item in resultNew2[0].FBIllNO2)
{
foreach (var item2 in ReceiveBILLLIST)
{
if (item2.FBIllNO.Equals(item))
{
item2.FCONTRACTNUMBER = SaleBILLLIS2Sal[i].FCONTRACTNUMBER;
item2.FWeiYi = "否";
//if (item2.FDAMOUNT != 0)
//{
// item2.FYAMOUNT = item2.FDAMOUNT;
//}
//item2.FDAMOUNT = 0;
item2.FISHX = "已核销配对";
}
}
}
SaleBILLLIS2Sal.Remove(SaleBILLLIS2Sal[i]);
}
}
//-----------20250118--------------------↑
#endregion
//删除数据
this.View.Model.DeleteEntryData("FEntity");
this.View.Model.DeleteEntryData("FEntity2");
#region
//第二次自动配对(是否有误)[收款单为主]
for (int i = 0; i < ReceiveBILLLIST.Count; i++)
{
//过滤除了1对1、1对多的数据
if (!string.IsNullOrWhiteSpace(ReceiveBILLLIST[i].FISHX?.ToString()) && string.IsNullOrWhiteSpace(ReceiveBILLLIST[i].FWeiYi?.ToString()))
{
string[] strings = ReceiveBILLLIST[i].FCONTRACTNUMBER.Split(',');
//获取收款单核销金额
decimal amount1 = Convert.ToDecimal(ReceiveBILLLIST[i].FDAMOUNT);
//获取销售订单/应收单(汇总后金额)
var number = SaleBILLLISNew.Where(a => strings.Contains(a.FCONTRACTNUMBER)).ToList();
decimal amount2 = Convert.ToDecimal(number.Sum(a => a.FDAMOUNT));
//如果自动配对的值不相同就重置为未匹对状态
if (amount1 != amount2)
{
//收款单修改
ReceiveBILLLIST[i].FCONTRACTNUMBER = "";
ReceiveBILLLIST[i].FISHX = "";
//销售订单修改
foreach (var item in number)
{
item.FSKBIllNO = "";
item.FISHX = "";
}
}
}
}
//第二次自动配对(是否有误)[销售订单为主]
for (int i = 0; i < SaleBILLLISNew.Count; i++)
{
//过滤未匹对上的数据/过滤不是唯一的数据
if (!string.IsNullOrWhiteSpace(SaleBILLLISNew[i].FISHX?.ToString()) && !string.IsNullOrWhiteSpace(SaleBILLLISNew[i].FWeiYi?.ToString()))
{
string[] strings = SaleBILLLISNew[i].FSKBIllNO.Split(',');
//获取收款单核销金额(汇总后金额)
var number = ReceiveBILLLIST.Where(a => strings.Contains(a.FBIllNO)).ToList();
decimal amount2 = Convert.ToDecimal(number.Sum(a => a.FDAMOUNT));
//获取销售订单/应收单
decimal amount1 = Convert.ToDecimal(SaleBILLLISNew[i].FDAMOUNT);
//如果自动配对的值不相同就重置为未匹对状态
if (amount1 != amount2)
{
//销售订单修改
SaleBILLLISNew[i].FSKBIllNO = "";
SaleBILLLISNew[i].FISHX = "";
SaleBILLLISNew[i].FWeiYi = "";
//收款单修改
foreach (var item in number)
{
item.FCONTRACTNUMBER = "";
item.FISHX = "";
item.FWeiYi = "";
}
}
}
}
#endregion
//绑定销售订单数据
for (int i = 0; i < SaleBILLLISNew.Count; i++)
{
int rowindex = this.View.Model.GetEntryRowCount("FEntity");
this.View.Model.CreateNewEntryRow("FEntity");
//单据编号
this.View.Model.SetValue("FBILLNO", SaleBILLLISNew[i]?.FBIllNO, i);
//日期
string dateFormat = "yyyy-MM-dd HH:mm:ss"; // 指定的日期格式
if (DateTime.TryParseExact(SaleBILLLISNew[i]?.FDate, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate))
{
this.View.Model.SetValue("FDate", SaleBILLLISNew[i]?.FDate, i);
}
else
{
this.View.Model.SetValue("FDate", DateTime.Now.AddDays(-1 * Convert.ToInt32(SaleBILLLISNew[i]?.FDate)).ToString("yyyy-MM-dd"), i);
}
//金额
this.View.Model.SetValue("F_MBBA_Decimal_c1c", SaleBILLLISNew[i]?.FALLAMOUNT, i);
//类型
this.View.Model.SetValue("FType", SaleBILLLISNew[i]?.FType, i);
//纸质合同号
this.View.Model.SetValue("FCONTRACTNUMBER", SaleBILLLISNew[i]?.FCONTRACTNUMBER, i);
//客户名称
this.View.Model.SetValue("FClient", SaleBILLLISNew[i]?.FClient, i);
//已核销金额
this.View.Model.SetValue("F_MBBA_Decimal_vb1", SaleBILLLISNew[i]?.FYAMOUNT, i);
//待核销金额
this.View.Model.SetValue("F_MBBA_Decimal_emq", SaleBILLLISNew[i]?.FDAMOUNT, i);
//单据编号(收款单)
this.View.Model.SetValue("FSKBILLNO", SaleBILLLISNew[i]?.FSKBIllNO, i);
//是否核销匹对
this.View.Model.SetValue("FISHX", SaleBILLLISNew[i]?.FISHX, i);
//是否唯一
this.View.Model.SetValue("FWeiYi", SaleBILLLISNew[i]?.FWeiYi, i);
//商务人员
this.View.Model.SetValue("FCreated", SaleBILLLISNew[i]?.FCreated, i);
//销售员
this.View.Model.SetValue("FSalesman", SaleBILLLISNew[i]?.FSalesman, i);
}
INDEXNumber = 1;
this.View.UpdateView("FEntity");
//绑定收款单数据
for (int i = 0; i < ReceiveBILLLIST.Count; i++)
{
int rowindex = this.View.Model.GetEntryRowCount("FEntity2");
this.View.Model.CreateNewEntryRow("FEntity2");
//单据编号
this.View.Model.SetValue("FBILLNO2", ReceiveBILLLIST[i]?.FBIllNO, i);
//日期
string dateFormat = "yyyy-MM-dd HH:mm:ss"; // 指定的日期格式
if (DateTime.TryParseExact(ReceiveBILLLIST[i]?.FDate, dateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate))
{
this.View.Model.SetValue("FDate2", ReceiveBILLLIST[i]?.FDate, i);
}
else
{
this.View.Model.SetValue("FDate2", DateTime.Now.AddDays(-1 * Convert.ToInt32(ReceiveBILLLIST[i]?.FDate)).ToString("yyyy-MM-dd"), i);
}
//金额
this.View.Model.SetValue("F_MBBA_Decimal_jdx", ReceiveBILLLIST[i]?.FALLAMOUNT, i);
//客户名称
this.View.Model.SetValue("FClient2", ReceiveBILLLIST[i]?.FClient, i);
//备注
this.View.Model.SetValue("FRemark", ReceiveBILLLIST[i]?.FRemark, i);
//已核销金额
this.View.Model.SetValue("F_MBBA_Decimal_391", ReceiveBILLLIST[i]?.FYAMOUNT, i);
//待核销金额
this.View.Model.SetValue("F_MBBA_Decimal_mjq", ReceiveBILLLIST[i]?.FDAMOUNT, i);
//纸质合同号
this.View.Model.SetValue("FCONTRACTNUMBER2", ReceiveBILLLIST[i]?.FCONTRACTNUMBER, i);
//是否核销匹对
this.View.Model.SetValue("FISHX2", ReceiveBILLLIST[i]?.FISHX, i);
//是否唯一
this.View.Model.SetValue("FWeiYi2", ReceiveBILLLIST[i]?.FWeiYi, i);
//商务人员
this.View.Model.SetValue("FCreated2", ReceiveBILLLIST[i]?.FCreated, i);
//销售员
this.View.Model.SetValue("FSalesman2", ReceiveBILLLIST[i]?.FSalesman, i);
}
this.View.UpdateView("FEntity2");
var FEndTime = DateTime.Now;
TimeSpan timeSpan = FEndTime - FStartTime;
this.View.ShowMessage(string.Format("匹配成功,匹配耗费时长为:{0}s", Math.Round(timeSpan.TotalMilliseconds / 1000)));
}
//生成核销记录单
if (e.BarItemKey.ToString().Equals("MBBA_tbButton_5"))
{
// 弹出确认框
View.ShowMessage("确定要生成核销记录单吗?", MessageBoxOptions.YesNo, result =>
{
if (result == MessageBoxResult.Yes)
{
#region
//存储销售订单/应收单
var fCombinaAddClass1 = new List<CombinaAddClass1>();
//存储收款单
var fCombinaAddSK = new List<CombinaAddSK>();
var FOrgId = this.Context.CurrentOrganizationInfo.ID;
string Message = string.Empty;
bool ErrMessage = false;
//获取销售订单/应收单单据体数据
DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection;
//获取收款单单据体数据
DynamicObjectCollection FEntity2 = this.View.Model.DataObject["FEntity2"] as DynamicObjectCollection;
SaleBILLLIS = new List<CombinaClass>();
ReceiveBILLLIST = new List<CombinaClass>();
foreach (var item in FEntity)
{
SaleBILLLIS.Add(new CombinaClass()
{
FBIllNO = item["FBILLNO"]?.ToString(),
FCONTRACTNUMBER = item["FCONTRACTNUMBER"]?.ToString(),
FClient = Convert.ToInt32(item["FClient_Id"]),
FDate = item["FDate"]?.ToString(),
FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_c1c"]),
FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_vb1"]),
FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_emq"]),
FSKBIllNO = item["FSKBILLNO"]?.ToString(),
FCreated = Convert.ToInt32(item["FCreated_Id"]),
FSalesman = Convert.ToInt32(item["FSalesman_Id"]),
FType = item["FType"]?.ToString(),
FISHX = item["FISHX"]?.ToString(),
FWeiYi = item["FWeiYi"]?.ToString(),
});
}
foreach (var item in FEntity2)
{
ReceiveBILLLIST.Add(new CombinaClass()
{
FBIllNO = Convert.ToString(item["FBILLNO2"]),
FDate = Convert.ToString(item["FDate2"]),
FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_jdx"]),
FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_391"]),
FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_mjq"]),
FClient = Convert.ToInt32(item["FClient2_Id"]),
FCONTRACTNUMBER = item["FCONTRACTNUMBER2"]?.ToString(),
FRemark = Convert.ToString(item["FRemark"]),
FCreated = Convert.ToInt32(item["FCreated2_Id"]),
FSalesman = Convert.ToInt32(item["FSalesman2_Id"]),
FISHX = item["FISHX2"]?.ToString(),
FWeiYi = item["FWeiYi2"]?.ToString(),
});
}
//循环收款单
foreach (var item in FEntity2)
{
//创建对象存储
var SKList = new CombinaAddSK();
//过滤未匹对上的数据/过滤除了收款单1对1、1对多的数据
if (item["F_ISHX"]?.ToString() == "True" && !string.IsNullOrWhiteSpace(item["FISHX2"]?.ToString()) && string.IsNullOrWhiteSpace(item["FWeiYi2"]?.ToString()))
{
//获取纸质合同号
var stringSplit = (item["FCONTRACTNUMBER2"])?.ToString()?.Split(',');
//找到对应销售订单
foreach (var item2 in FEntity.Where(a => stringSplit.Contains(a["FCONTRACTNUMBER"])))
{
var nTestList = new CombinaAddClass1();
nTestList.FBIllNO = item2["FBILLNO"]?.ToString();
nTestList.FClient = Convert.ToInt32(item2["FClient_Id"]);
nTestList.FDate = item2["FDate"]?.ToString();
nTestList.FALLAMOUNT = Convert.ToDecimal(item2["F_MBBA_Decimal_emq"]);
nTestList.FCONTRACTNUMBER = item2["FCONTRACTNUMBER"]?.ToString();
nTestList.FType = item2["FTYPE"]?.ToString();
nTestList.FCreated = Convert.ToInt32(item2["FCreated_Id"]);
nTestList.FSalesman = Convert.ToInt32(item2["FSalesman_Id"]);
SKList.XSAPList.Add(nTestList);
}
SKList.FBIllNO = item["FBILLNO2"]?.ToString();
SKList.FCONTRACTNUMBER = item["FCONTRACTNUMBER2"]?.ToString();
SKList.FClient = Convert.ToInt32(item["FClient2_Id"]);
SKList.FDate = item["FDate2"]?.ToString();
SKList.FALLAMOUNT = Convert.ToDecimal(item["F_MBBA_Decimal_mjq"]);
SKList.FRemark = item["FRemark"]?.ToString();
SKList.FCreated = Convert.ToInt32(item["FCreated2_Id"]);
SKList.FSalesman = Convert.ToInt32(item["FSalesman2_Id"]);
fCombinaAddSK.Add(SKList);
}
}
//循环销售订单/应收单
foreach (var item in FEntity)
{
//创建对象存储
var SKList = new CombinaAddClass1();
//过滤未匹对上的数据/过滤不是唯一的数据
if (item["F_ISGX"]?.ToString() == "True" && !string.IsNullOrWhiteSpace(item["FISHX"]?.ToString()) && !string.IsNullOrWhiteSpace(item["FWeiYi"]?.ToString()))
{
//获取纸质合同号
var stringSplit = (item["FSKBILLNO"])?.ToString()?.Split(',');
//找到对应销售订单
foreach (var item2 in FEntity2.Where(a => stringSplit.Contains(a["FBILLNO2"])))
{
var nTestList = new CombinaAddSK();
nTestList.FBIllNO = item2["FBILLNO2"]?.ToString();
nTestList.FCONTRACTNUMBER = item2["FCONTRACTNUMBER2"]?.ToString();
nTestList.FClient = Convert.ToInt32(item2["FClient2_Id"]);
nTestList.FDate = item2["FDate2"]?.ToString();
nTestList.FALLAMOUNT = Convert.ToDecimal(item2["F_MBBA_Decimal_mjq"]);
nTestList.FRemark = item2["FRemark"]?.ToString();
nTestList.FSalesman = Convert.ToInt32(item2["FSalesman2_Id"]);
nTestList.FCreated = Convert.ToInt32(item2["FCreated2_Id"]);
SKList.SKList.Add(nTestList);
}
SKList.FBIllNO = item["FBILLNO"]?.ToString();
SKList.FClient = Convert.ToInt32(item["FClient_Id"]);
SKList.FDate = item["FDate"]?.ToString();
SKList.FALLAMOUNT = Convert.ToDecimal(item["F_MBBA_Decimal_emq"]);
SKList.FCONTRACTNUMBER = item["FCONTRACTNUMBER"]?.ToString();
SKList.FType = item["FType"]?.ToString();
SKList.FCreated = Convert.ToInt32(item["FCreated_Id"]);
SKList.FSalesman = Convert.ToInt32(item["FSalesman_Id"]);
fCombinaAddClass1.Add(SKList);
}
}
#endregion
if (fCombinaAddClass1.Count == 0 && fCombinaAddSK.Count == 0)
{
this.View.ShowWarnningMessage("未选择核销数据!");
return;
}
//用于存储生成成功的收款单
List<string> strings1 = new List<string>();
//用于存储生成成功的销售订单
List<string> strings2 = new List<string>();
//循环收款单/新增核销记录
foreach (var item in fCombinaAddSK)
{
//获取销售订单/应收单
var list = item.XSAPList;
//汇总金额
var Amount = list.Sum(a => a.FALLAMOUNT);
//应收单/销售订单判断字段
int isTrue1 = list.GroupBy(t => t.FType).Count();
//收款单/销售订单-应收单判断客户字段
int isTrue2 = list.GroupBy(t => t.FClient).Count();
//判断是否存在应收单跟销售订单汇总核销
if (isTrue1 > 1)
{
ErrMessage = true;
Message = Message + string.Format("收款单号:'{0}'存在销售订单与应收单合并核销的记录,不允许核销\r\n", item.FBIllNO);
continue;
}
//判断是否是同一个客户
else if (isTrue2 > 1 || item.FClient != list[0].FClient)
{
ErrMessage = true;
Message = Message + string.Format("收款单号:'{0}'配对的(销售订单/应收单)的客户不一致,不允许核销\r\n", item.FBIllNO);
continue;
}
//判断是否存在两个销售订单/应收单汇总核销(不能小于汇总数)
else if (list.Count > 1 && item.FALLAMOUNT < Amount)
{
ErrMessage = true;
Message = Message + string.Format("收款单号:'{0}'的核销金额小于多个(销售订单/应收单)的核销金额,不允许核销\r\n", item.FBIllNO);
continue;
}
else
{
//创建核销记录单
string FBILLNO = CommonHelper.CreateAutoWrireRecord2(this.Context, Convert.ToString(FOrgId), item.XSAPList, item);
Message = Message + string.Format("生成核销记录单成功,单号为:'{0}'\r\n", FBILLNO);
strings1.Add(item.FBIllNO);
}
}
//循环(销售订单/应收单)/新增核销记录
foreach (var item in fCombinaAddClass1)
{
strings2.Add(item.FBIllNO);
//创建核销记录单
string FBILLNO = CommonHelper.CreateAutoWrireRecord3(this.Context, Convert.ToString(FOrgId), item, item.SKList);
Message = Message + string.Format("生成核销记录单成功,单号为:'{0}'\r\n", FBILLNO);
}
if (!ErrMessage)
{
this.View.ShowMessage(Message);
//this.View.Model.SetValue("FShuaXin", "需要刷新");
}
else
{
this.View.ShowErrMessage(Message);
}
//如果存在生成成功的、也有生成失败的不走刷新功能直接将成功的单据体数据删除!
for (int i = 0; i < SaleBILLLIS.Count; i++)
{
if (strings2.Contains(SaleBILLLIS[i].FBIllNO))
{
string[] strings = SaleBILLLIS[i].FSKBIllNO?.Split(',');
SaleBILLLIS.Remove(SaleBILLLIS[i]);
for (int j = 0; j < ReceiveBILLLIST.Count; j++)
{
if (strings.Contains(ReceiveBILLLIST[j]?.FBIllNO))
{
ReceiveBILLLIST.Remove(ReceiveBILLLIST[j]);
}
}
}
}
for (int i = 0; i < ReceiveBILLLIST.Count; i++)
{
if (strings1.Contains(ReceiveBILLLIST[i].FBIllNO))
{
string[] strings = ReceiveBILLLIST[i].FCONTRACTNUMBER?.Split(',');
ReceiveBILLLIST.Remove(ReceiveBILLLIST[i]);
for (int j = 0; j < SaleBILLLIS.Count; j++)
{
if (strings.Contains(SaleBILLLIS[j]?.FCONTRACTNUMBER))
{
SaleBILLLIS.Remove(SaleBILLLIS[j]);
}
}
}
}
//删除数据
this.View.Model.DeleteEntryData("FEntity");
this.View.Model.DeleteEntryData("FEntity2");
//绑定销售订单数据
for (int i = 0; i < SaleBILLLIS.Count; i++)
{
int rowindex = this.View.Model.GetEntryRowCount("FEntity");
this.View.Model.CreateNewEntryRow("FEntity");
//单据编号
this.View.Model.SetValue("FBILLNO", SaleBILLLIS[i].FBIllNO, i);
//日期
this.View.Model.SetValue("FDate", SaleBILLLIS[i].FDate, i);
//金额
this.View.Model.SetValue("F_MBBA_Decimal_c1c", SaleBILLLIS[i].FALLAMOUNT, i);
//类型
this.View.Model.SetValue("FType", SaleBILLLIS[i].FType, i);
//纸质合同号
this.View.Model.SetValue("FCONTRACTNUMBER", SaleBILLLIS[i].FCONTRACTNUMBER, i);
//客户名称
this.View.Model.SetValue("FClient", SaleBILLLIS[i].FClient, i);
//已核销金额
this.View.Model.SetValue("F_MBBA_Decimal_vb1", SaleBILLLIS[i].FYAMOUNT, i);
//待核销金额
this.View.Model.SetValue("F_MBBA_Decimal_emq", SaleBILLLIS[i].FDAMOUNT, i);
//单据编号(收款单)
this.View.Model.SetValue("FSKBILLNO", SaleBILLLIS[i].FSKBIllNO, i);
//是否核销匹对
this.View.Model.SetValue("FISHX", SaleBILLLIS[i].FISHX, i);
//是否唯一
this.View.Model.SetValue("FWeiYi", SaleBILLLIS[i]?.FWeiYi, i);
//商务人员
this.View.Model.SetValue("FCreated", SaleBILLLIS[i]?.FCreated, i);
//销售员
this.View.Model.SetValue("FSalesman", SaleBILLLIS[i]?.FSalesman, i);
}
this.View.UpdateView("FEntity");
//绑定收款单数据
for (int i = 0; i < ReceiveBILLLIST.Count; i++)
{
int rowindex = this.View.Model.GetEntryRowCount("FEntity2");
this.View.Model.CreateNewEntryRow("FEntity2");
//单据编号
this.View.Model.SetValue("FBILLNO2", ReceiveBILLLIST[i].FBIllNO, i);
//日期
this.View.Model.SetValue("FDate2", ReceiveBILLLIST[i].FDate, i);
//金额
this.View.Model.SetValue("F_MBBA_Decimal_jdx", ReceiveBILLLIST[i].FALLAMOUNT, i);
//客户名称
this.View.Model.SetValue("FClient2", ReceiveBILLLIST[i].FClient, i);
//备注
this.View.Model.SetValue("FRemark", ReceiveBILLLIST[i].FRemark, i);
//已核销金额
this.View.Model.SetValue("F_MBBA_Decimal_391", ReceiveBILLLIST[i].FYAMOUNT, i);
//待核销金额
this.View.Model.SetValue("F_MBBA_Decimal_mjq", ReceiveBILLLIST[i].FDAMOUNT, i);
//纸质合同号
this.View.Model.SetValue("FCONTRACTNUMBER2", ReceiveBILLLIST[i].FCONTRACTNUMBER, i);
//商务人员
this.View.Model.SetValue("FCreated2", ReceiveBILLLIST[i].FCreated, i);
//销售员
this.View.Model.SetValue("FSalesman2", ReceiveBILLLIST[i]?.FSalesman, i);
}
this.View.UpdateView("FEntity2");
}
else
{
return;
}
});
}
}
/// <summary>
/// 生成记录单自动刷新
/// </summary>
/// <param name="e"></param>
public override void DataChanged(DataChangedEventArgs e)
{
if (e.Field.Key.Equals("FShuaXin"))
{
//文本字段触发值更新时,模拟用户点击菜单,此处模拟点击“选项”菜单:
((IDynamicFormViewService)this.View).MainBarItemClick("MBBA_tbButton_1");
}
if (e.Field.Key.Equals("FCONTRACTNUMBER2"))
{
if (INDEXNumber == 0)
{
//获取销售订单/应收单单据体数据
DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection;
SaleBILLLIS = new List<CombinaClass>();
foreach (var item in FEntity)
{
SaleBILLLIS.Add(new CombinaClass()
{
FBIllNO = item["FBILLNO"]?.ToString(),
FCONTRACTNUMBER = item["FCONTRACTNUMBER"]?.ToString(),
FClient = Convert.ToInt32(item["FClient_Id"]),
FDate = item["FDate"]?.ToString(),
FALLAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_c1c"]),
FYAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_vb1"]),
FDAMOUNT = Convert.ToDouble(item["F_MBBA_Decimal_emq"]),
FSKBIllNO = item["FSKBILLNO"]?.ToString(),
FCreated = Convert.ToInt32(item["FCreated_Id"]),
FSalesman = Convert.ToInt32(item["FSalesman_Id"]),
FType = item["FType"]?.ToString(),
FISHX = item["FISHX"]?.ToString(),
FWeiYi = item["FWeiYi"]?.ToString(),
});
}
var fBILLNO = this.Model.GetValue("FBILLNO2", e.Row);
var fCONTRACTNUMBER = this.Model.GetValue("FCONTRACTNUMBER2", e.Row);
//判断是否为空
if (string.IsNullOrWhiteSpace(fCONTRACTNUMBER?.ToString()))
{
this.Model.SetValue("FISHX2", "", e.Row);
foreach (var item in SaleBILLLIS)
{
if (!string.IsNullOrEmpty(item.FSKBIllNO))
{
string[] strings = item.FSKBIllNO?.ToString()?.Split(',');
//判断假如是一个收款单对应多个销售订单
if (strings.Contains(fBILLNO?.ToString()) && strings.Count() == 1)
{
item.FSKBIllNO = "";
item.FISHX = "";
item.FWeiYi = "";
}
//判断多个收款单对应一个销售订单
else if (strings.Contains(fBILLNO?.ToString()) && strings.Count() > 1)
{
List<string> strings1 = new List<string>(strings);
strings1.Remove(fBILLNO?.ToString());
string strings2 = string.Join(",", strings1);
item.FSKBIllNO = strings2;
}
}
}
}
int n = 1;
//判断多个销售订单对应1个收款单只删除一个或多个但不是空的情况
if (!string.IsNullOrWhiteSpace(fCONTRACTNUMBER?.ToString()))
{
string[] strings = fCONTRACTNUMBER?.ToString()?.Split(',');
foreach (var item in SaleBILLLIS)
{
if (!string.IsNullOrEmpty(item.FSKBIllNO) && item.FSKBIllNO == fBILLNO?.ToString())
{
if (!strings.Contains(item.FCONTRACTNUMBER))
{
item.FSKBIllNO = "";
item.FISHX = "";
item.FWeiYi = "";
}
}
if (strings.Contains(item.FCONTRACTNUMBER))
{
item.FSKBIllNO = fBILLNO?.ToString();
item.FISHX = "已核销配对";
this.Model.SetValue("FISHX2", "已核销配对", e.Row);
}
}
n = SaleBILLLIS.Count(a => strings.Contains(a.FCONTRACTNUMBER));
}
if (n == 0)
{
this.Model.SetValue("FISHX2", "", e.Row);
}
//删除数据
this.View.Model.DeleteEntryData("FEntity");
//绑定销售订单数据
for (int i = 0; i < SaleBILLLIS.Count; i++)
{
int rowindex = this.View.Model.GetEntryRowCount("FEntity");
this.View.Model.CreateNewEntryRow("FEntity");
//单据编号
this.View.Model.SetValue("FBILLNO", SaleBILLLIS[i].FBIllNO, i);
//日期
this.View.Model.SetValue("FDate", SaleBILLLIS[i].FDate, i);
//金额
this.View.Model.SetValue("F_MBBA_Decimal_c1c", SaleBILLLIS[i].FALLAMOUNT, i);
//类型
this.View.Model.SetValue("FType", SaleBILLLIS[i].FType, i);
//纸质合同号
this.View.Model.SetValue("FCONTRACTNUMBER", SaleBILLLIS[i].FCONTRACTNUMBER, i);
//客户名称
this.View.Model.SetValue("FClient", SaleBILLLIS[i].FClient, i);
//已核销金额
this.View.Model.SetValue("F_MBBA_Decimal_vb1", SaleBILLLIS[i].FYAMOUNT, i);
//待核销金额
this.View.Model.SetValue("F_MBBA_Decimal_emq", SaleBILLLIS[i].FDAMOUNT, i);
//单据编号(收款单)
this.View.Model.SetValue("FSKBILLNO", SaleBILLLIS[i].FSKBIllNO, i);
//是否核销匹对
this.View.Model.SetValue("FISHX", SaleBILLLIS[i].FISHX, i);
//是否唯一
this.View.Model.SetValue("FWeiYi", SaleBILLLIS[i]?.FWeiYi, i);
//商务人员
this.View.Model.SetValue("FCreated", SaleBILLLIS[i]?.FCreated, i);
//销售员
this.View.Model.SetValue("FSalesman", SaleBILLLIS[i]?.FSalesman, i);
}
this.View.UpdateView("FEntity");
}
}
if (e.Field.Key.Equals("F_ISHX"))
{
//获取当前复选框的值
var IsHX = this.Model.GetValue("F_ISHX", e.Row)?.ToString();
var ISWeiYi = this.Model.GetValue("FWeiYi2", e.Row)?.ToString();
//查询对应的销售订单/应收单-》勾选复选框
var fc = this.Model.GetValue("FCONTRACTNUMBER2", e.Row)?.ToString();
if (IsHX == "True")
{
//查看是否为唯一
if (!string.IsNullOrEmpty(ISWeiYi) && ISWeiYi == "否")
{
//获取销售订单/应收单单据体数据
DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection;
for (int i = 0; i < FEntity.Count; i++)
{
if (FEntity[i]["FCONTRACTNUMBER"]?.ToString() == fc)
{
this.Model.SetValue("F_ISGX", "True", i);
}
}
}
}
if (IsHX == "False")
{
//获取销售订单/应收单单据体数据
DynamicObjectCollection FEntity2 = this.View.Model.DataObject["FEntity2"] as DynamicObjectCollection;
int n = 0;
//判断其他收款单是否勾选
foreach (var item in FEntity2)
{
if (item["F_ISHX"]?.ToString() == "True" && item["FCONTRACTNUMBER2"]?.ToString() == fc)
{
n++;
}
}
if (n == 0)
{
//查看是否为唯一
if (!string.IsNullOrEmpty(ISWeiYi) && ISWeiYi == "否")
{
//获取销售订单/应收单单据体数据
DynamicObjectCollection FEntity = this.View.Model.DataObject["FEntity"] as DynamicObjectCollection;
for (int i = 0; i < FEntity.Count; i++)
{
if (FEntity[i]["FCONTRACTNUMBER"]?.ToString() == fc)
{
this.Model.SetValue("F_ISGX", "False", i);
}
}
}
}
}
}
}
}
}