2025-04-07 21:06:39 +08:00

1467 lines
77 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}
}
}
}
}
}
}
}