using ComponentFactory.Krypton.Toolkit;
using NXWMS.Client.FrmCustom;
using NXWMS.Client.Model.AppModels.Condition.Common;
using NXWMS.Client.Model.AppModels.Result.Common;
using NXWMS.Client.Model.AppModels.Result.Instock;
using NXWMS.Client.Model.CoreModels;
using NXWMS.Commons;
using NXWMS.Services;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Web.UI.WebControls;
using System.Windows.Forms;
using static NXWMS.Client.FrmCustom.CustomEventMsg;
namespace NXWMS.Forms.Instock.frmInstockChild
{
///
/// 编辑收货单窗体类
///
public partial class frmChildEditWmsInReceipt : KryptonForm
{
///
/// 窗体构造函数
///
public frmChildEditWmsInReceipt()
{
InitializeComponent();
}
#region 全局变量
///
/// 收货单主键
///
public string ReceiptId { get; set; }
///
/// 到货通知单号
///
public string ArrivalNo { get; set; }
///
/// 数据库中的收货单所有数据(包括主、明细表)。
/// 未进行编辑过。
///
private WmsInReceiptResult ReceiptDataNotEdit = new WmsInReceiptResult();
List lstArrivalDtl = new List();
///
/// 模板地址
///
private string _reportFolder = Application.StartupPath + "\\ReportMd\\";
#endregion
#region 初始化数据
///
/// 窗体加载函数
///
///
///
private void frmChildEditWmsInReceipt_Load(object sender, EventArgs e)
{
InitComboBoxItemData();
InitDataGridViewColumn();
kdtp_ReceiptTime.Checked = false;
LoadWmsInReceiptDtlData();
}
///
/// 初始化下拉列表数据
///
private void InitComboBoxItemData()
{
/*
ToDo:后续把下拉列表转为 后台获取数据,目前是写死的。
1:WMS人工创建;2:到货通知单导入;3:手持端创建;4:接口导入;5:Excel导入。
*/
List results = new List();
#region 单据类型
results = BasDictionaryUtil.basDictionaryResultLst.FindAll(x => x.DICTIONARY_CODE == "ReceiptTypeDesc");
if (results.Count > 0)
{
kcmb_ReceiptType.Items.Clear();
foreach (var item in results)
{
kcmb_ReceiptType.Items.Add(new ListItem
{
Value = item.DICTIONARY_ITEM_CODE,
Text = item.DICTIONARY_ITEM_NAME,
});
}
kcmb_ReceiptType.SelectedIndex = 0;
}
else
{
KryptonMessageBox.Show("未找到收货单类型的字典项数据!");
}
#endregion
}
DataTable dt;
///
/// 初始化DataGridView列信息
///
private void InitDataGridViewColumn()
{
DataGridViewColumn column1 = new KryptonDataGridViewTextBoxColumn();
column1.HeaderText = "序号";
column1.Width = 50;
column1.ReadOnly = true;
kdgv_ReceiptDtlData.Columns.Add(column1);
dt = CreateTable();
DataGridViewColumn column = new DataGridViewDataWindowColumn();
(column as DataGridViewDataWindowColumn).SDisplayField = "到货通知单明细ID,物料编码,物料名称,物料条码,物料类型编码,物料类型名称";
(column as DataGridViewDataWindowColumn).SDisplayMember = "物料编码";
(column as DataGridViewDataWindowColumn).SKeyWords = "物料编码";
(column as DataGridViewDataWindowColumn).DataSource = dt;
column.Width = 150;
column.HeaderText = "物料编码";
kdgv_ReceiptDtlData.Columns.Add(column);
column = new DataGridViewDataWindowColumn();
(column as DataGridViewDataWindowColumn).SDisplayField = "到货通知单明细ID,物料编码,物料名称,物料条码,物料类型编码,物料类型名称";
(column as DataGridViewDataWindowColumn).SDisplayMember = "物料名称";
(column as DataGridViewDataWindowColumn).SKeyWords = "物料名称";
(column as DataGridViewDataWindowColumn).DataSource = dt;
column.HeaderText = "物料名称";
column.Width = 200;
kdgv_ReceiptDtlData.Columns.Add(column);
column = new DataGridViewDataWindowColumn();
(column as DataGridViewDataWindowColumn).SDisplayField = "到货通知单明细ID,物料编码,物料名称,物料条码,物料类型编码,物料类型名称";
(column as DataGridViewDataWindowColumn).SDisplayMember = "物料条码";
(column as DataGridViewDataWindowColumn).SKeyWords = "物料条码";
(column as DataGridViewDataWindowColumn).DataSource = dt;
column.HeaderText = "物料条码";
column.Width = 150;
kdgv_ReceiptDtlData.Columns.Add(column);
column1 = new KryptonDataGridViewTextBoxColumn();
column1.HeaderText = "批次号";
column1.Width = 120;
kdgv_ReceiptDtlData.Columns.Add(column1);
column1 = new KryptonDataGridViewTextBoxColumn();
column1.HeaderText = "到货单明细未收货数量";
column1.Width = 150;
kdgv_ReceiptDtlData.Columns.Add(column1);
column1 = new KryptonDataGridViewTextBoxColumn();
column1.HeaderText = "收货单明细数量";
column1.Width = 100;
kdgv_ReceiptDtlData.Columns.Add(column1);
DataGridViewComboBoxColumn cmb_Unit = new DataGridViewComboBoxColumn();
cmb_Unit.HeaderText = "单位";
cmb_Unit.Width = 70;
//目前写死下拉列表的数据项,后续改为后台获取
cmb_Unit.Items.AddRange(new ListItem[]
{
new ListItem{ Value = "kg",Text = "千克"},
new ListItem{ Value = "ge",Text = "个"},
new ListItem{ Value = "pkg",Text = "箱"}
});
cmb_Unit.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
kdgv_ReceiptDtlData.Columns.Add(cmb_Unit);
DataGridViewComboBoxColumn cmb_Supplier = new DataGridViewComboBoxColumn();
cmb_Supplier.HeaderText = "供应商";
cmb_Supplier.Width = 120;
//目前写死下拉列表的数据项,后续改为后台获取
cmb_Supplier.Items.AddRange(new ListItem[]
{
new ListItem{ Value ="WX_NXZB_001" ,Text = "无锡南兴装备"},
new ListItem{ Value ="WX_NXZB_002" ,Text = "东莞南兴装备"}
});
cmb_Supplier.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing;
kdgv_ReceiptDtlData.Columns.Add(cmb_Supplier);
column1 = new KryptonDataGridViewTextBoxColumn();
column1.HeaderText = "包装";
column1.Width = 80;
kdgv_ReceiptDtlData.Columns.Add(column1);
KryptonDataGridViewDateTimePickerColumn column_ProductTime = new KryptonDataGridViewDateTimePickerColumn();
column_ProductTime.HeaderText = "生产日期";
column_ProductTime.Width = 160;
column_ProductTime.Format = DateTimePickerFormat.Custom;
column_ProductTime.CustomFormat = "yyyy-MM-dd HH:mm:ss";
kdgv_ReceiptDtlData.Columns.Add(column_ProductTime);
KryptonDataGridViewDateTimePickerColumn column_ExpTime = new KryptonDataGridViewDateTimePickerColumn();
column_ExpTime.HeaderText = "失效日期";
column_ExpTime.Width = 160;
column_ExpTime.Format = DateTimePickerFormat.Custom;
column_ExpTime.CustomFormat = "yyyy-MM-dd HH:mm:ss";
kdgv_ReceiptDtlData.Columns.Add(column_ExpTime);
column1 = new KryptonDataGridViewTextBoxColumn();
column1.HeaderText = "";
column1.Width = 30;
column1.Visible = false;
kdgv_ReceiptDtlData.Columns.Add(column1);
column1 = new KryptonDataGridViewTextBoxColumn();
column1.HeaderText = "到货单明细ID";
column1.Width = 120;
//column1.Visible = false;
kdgv_ReceiptDtlData.Columns.Add(column1);
column1 = new KryptonDataGridViewTextBoxColumn();
column1.HeaderText = "到货数量";
column1.Width = 30;
column1.Visible = false;
kdgv_ReceiptDtlData.Columns.Add(column1);
}
///
/// 创建数据源表格
///
///
private DataTable CreateTable()
{
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("到货通知单明细ID");
dt.Columns.Add(dc);
dc = new DataColumn("物料编码");
dt.Columns.Add(dc);
dc = new DataColumn("物料名称");
dt.Columns.Add(dc);
dc = new DataColumn("物料条码");
dt.Columns.Add(dc);
dc = new DataColumn("物料类型编码");
dt.Columns.Add(dc);
dc = new DataColumn("物料类型名称");
dt.Columns.Add(dc);
if (string.IsNullOrEmpty(this.ArrivalNo))
{
var result = WmsInstockService.materielMsgForAddArrivalService.GetMaterielMsgForAddArrival();
if (result.Status == OperateStatus.Success)
{
foreach (MaterielMsgForAddArrivalResult item in result.Data)
{
DataRow dr = dt.NewRow();
dr["物料编码"] = item.MATERIEL_CODE;
dr["物料名称"] = item.MATERIEL_NAME;
dr["物料条码"] = item.MATERIEL_BARCODE;
dr["物料类型编码"] = item.MATERIEL_TYPE_CODE;
dr["物料类型名称"] = item.MATERIEL_TYPE_NAME;
dr["到货通知单明细ID"] = 0;
dt.Rows.Add(dr);
}
lstArrivalDtl.Clear();
}
}
else
{
var result = WmsInstockService.wmsInArrivalService.GetWmsInArrivalDtlDataForNo(new WmsInArrivalResult { ARRIVAL_NO = this.ArrivalNo, REMARKS1 = "编辑收货单" });
if (result.Status == OperateStatus.Success)
{
foreach (WmsInArrivalDtlResult item in result.Data)
{
if (item.RECEIPT_QTY < item.ARRIVAL_QTY)
{
DataRow dr = dt.NewRow();
dr["物料编码"] = item.MATERIEL_CODE;
dr["物料名称"] = item.MATERIEL_NAME;
dr["物料条码"] = item.MATERIEL_BARCODE;
dr["物料类型编码"] = item.MATERIEL_TYPE_CODE;
dr["物料类型名称"] = item.MATERIEL_TYPE_NAME;
dr["到货通知单明细ID"] = item.ARRIVAL_DTL_ID;
dt.Rows.Add(dr);
}
}
lstArrivalDtl.Clear();
lstArrivalDtl = result.Data;
}
}
return dt;
}
///
/// 调用服务端接口,请求收货单明细表数据
///
///
private string LoadWmsInReceiptDtlData()
{
var result = WmsInstockService.wmsInReceiptService.GetWmsInReceiptDtlListForId(new WmsInReceiptResult { RECEIPT_ID = Convert.ToInt32(this.ReceiptId) });
if (result.Status == OperateStatus.Success)
{
ktb_ArrivalNo.Text = result.Data.ARRIVAL_NO;
ktb_ArrivalNo.Enabled = false;
ktb_Receipter.Text = result.Data.RECEIPTER;
ktb_Receipter.Enabled = true;
kcmb_ReceiptType.Text = result.Data.RECEIPT_TYPE_NAME;
kcmb_ReceiptType.Enabled = false;
ktb_Describe.Text = result.Data.DESCRIBE;
if (result.Data.RECEIPT_TIME != new DateTime())
{
kdtp_ReceiptTime.Value = result.Data.RECEIPT_TIME;
kdtp_ReceiptTime.Enabled = false;
}
ReceiptDataNotEdit = result.Data;
kdgv_ReceiptDtlData.Rows.Clear();
foreach (WmsInReceiptDtlResult item in result.Data.WmsInReceiptDtlList)
{
int index = kdgv_ReceiptDtlData.Rows.Add();
kdgv_ReceiptDtlData.Rows[index].Cells[0].Value = index + 1;
kdgv_ReceiptDtlData.Rows[index].Cells[1].Value = item.MATERIEL_CODE;
kdgv_ReceiptDtlData.Rows[index].Cells[2].Value = item.MATERIEL_NAME;
kdgv_ReceiptDtlData.Rows[index].Cells[3].Value = item.MATERIEL_BARCODE;
kdgv_ReceiptDtlData.Rows[index].Cells[4].Value = item.BATCH_NO;
WmsInArrivalDtlResult arrDtlMd = lstArrivalDtl.Find(x => x.ARRIVAL_DTL_ID == item.ARRIVAL_DTL_ID);
if (arrDtlMd != null && ktb_ArrivalNo.Text != null)
{
kdgv_ReceiptDtlData.Rows[index].Cells[5].Value = arrDtlMd.ARRIVAL_QTY - arrDtlMd.RECEIPT_QTY;
}
else
{
kdgv_ReceiptDtlData.Rows[index].Cells[5].Value = 0;
}
kdgv_ReceiptDtlData.Rows[index].Cells[6].Value = item.RECEIPT_DTL_QTY;
ListItem unitLstItm = GetComboBoxItem((DataGridViewComboBoxCell)kdgv_ReceiptDtlData.Rows[index].Cells[7], item.UNIT_CODE);
kdgv_ReceiptDtlData.Rows[index].Cells[7].Value = unitLstItm;
ListItem supplierLstItm = GetComboBoxItem((DataGridViewComboBoxCell)kdgv_ReceiptDtlData.Rows[index].Cells[8], item.SUPPLIER_CODE);
kdgv_ReceiptDtlData.Rows[index].Cells[8].Value = supplierLstItm;
kdgv_ReceiptDtlData.Rows[index].Cells[9].Value = item.PACKAGE_CODE;
kdgv_ReceiptDtlData.Rows[index].Cells[10].Value = item.PRODUCT_DATE;
kdgv_ReceiptDtlData.Rows[index].Cells[11].Value = item.EXP_DATE;
kdgv_ReceiptDtlData.Rows[index].Cells[12].Value = item.RECEIPT_DTL_ID;
kdgv_ReceiptDtlData.Rows[index].Cells[13].Value = item.ARRIVAL_DTL_ID;
kdgv_ReceiptDtlData.Rows[index].Cells[14].Value = item.ARRIVAL_QTY;
}
return string.Empty;
}
else
{
return result.Message;
}
}
#endregion
#region 按钮事件
///
/// 取消按钮事件
/// 退出编辑页面
///
///
///
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
///
/// 确认按钮事件
/// 提交收货单数据
///
///
///
private void btnConfirm_Click(object sender, EventArgs e)
{
WmsInReceiptResult mdReceipt = new WmsInReceiptResult();
mdReceipt.RECEIPT_ID = ReceiptDataNotEdit.RECEIPT_ID;
mdReceipt.RECEIPT_NO = ReceiptDataNotEdit.RECEIPT_NO;
mdReceipt.ARRIVAL_NO = ktb_ArrivalNo.Text.Trim();
mdReceipt.RECEIPT_TYPE = kcmb_ReceiptType.SelectedIndex + 1;
mdReceipt.RECEIPT_TYPE_NAME = kcmb_ReceiptType.Text;
mdReceipt.RECEIPTER = ktb_Receipter.Text.Trim();
if (kdtp_ReceiptTime.Checked)
{
mdReceipt.RECEIPT_TIME = kdtp_ReceiptTime.Value;
}
else
{
mdReceipt.RECEIPT_TIME = new DateTime();
}
mdReceipt.RECEIPT_STATUS = ReceiptDataNotEdit.RECEIPT_STATUS;
mdReceipt.DESCRIBE = ktb_Describe.Text.Trim();
mdReceipt.CREATE_BY = AppConfig.UserLoginResult.UserInfo.UserId;
mdReceipt.UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId;
List mdReceiptDtlList = new List();
if (kdgv_ReceiptDtlData.Rows.Count > 0 && !kdgv_ReceiptDtlData.Rows[0].IsNewRow)
{
foreach (DataGridViewRow dvr in kdgv_ReceiptDtlData.Rows)
{
if (!dvr.IsNewRow)
{
#region 校验每一行数据的完整性
string RowCheckMsg = string.Empty;
if (!CheckDataGridViewRowFormat(dvr, ref RowCheckMsg))
{
KryptonMessageBox.Show(RowCheckMsg);
return;
}
#endregion
string materielCode = dvr.Cells[1].Value.ToString();
string materielName = dvr.Cells[2].Value.ToString();
string materielBarcode = dvr.Cells[3].Value == null ? null : dvr.Cells[3].Value.ToString();
string batchNo = dvr.Cells[4].Value == null ? null : dvr.Cells[4].Value.ToString();
decimal arrivalQty = dvr.Cells[14].Value == null ? 0 : Convert.ToDecimal(dvr.Cells[14].Value.ToString());
decimal receiptDtlQty = Convert.ToDecimal(dvr.Cells[6].Value);
string unitCode = GetComboBoxItem((DataGridViewComboBoxCell)dvr.Cells[7]).Value;
string supplierCode = GetComboBoxItem((DataGridViewComboBoxCell)dvr.Cells[8]).Value;
string supplierName = GetComboBoxItem((DataGridViewComboBoxCell)dvr.Cells[8]).Text;
string packageCode = dvr.Cells[9].Value == null ? null : dvr.Cells[9].Value.ToString();
DateTime productTime = Convert.ToDateTime(dvr.Cells[10].Value);
DateTime expTime = Convert.ToDateTime(dvr.Cells[11].Value);
int receiptDtlId = dvr.Cells[12].Value == null ? 0 : Convert.ToInt32(dvr.Cells[12].Value);
int arrivalDtlId = dvr.Cells[13].Value == null ? 0 : Convert.ToInt32(dvr.Cells[13].Value);
mdReceiptDtlList.Add(new WmsInReceiptDtlResult
{
RECEIPT_DTL_ID = receiptDtlId,
MATERIEL_CODE = materielCode,
MATERIEL_NAME = materielName,
MATERIEL_BARCODE = materielBarcode,
BATCH_NO = batchNo,
ARRIVAL_QTY = arrivalQty,
RECEIPT_DTL_QTY = receiptDtlQty,
UNIT_CODE = unitCode,
SUPPLIER_CODE = supplierCode,
SUPPLIER_NAME = supplierName,
PACKAGE_CODE = packageCode,
PRODUCT_DATE = productTime,
EXP_DATE = expTime,
CREATE_BY = AppConfig.UserLoginResult.UserInfo.UserId,
UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId,
DESCRIBE = null,
ARRIVAL_DTL_ID = arrivalDtlId
});
}
}
#region 校验明细行 不能存在相同批次、物料条码的数据行
var strList = mdReceiptDtlList.GroupBy(x => new { x.MATERIEL_CODE, x.BATCH_NO, x.ARRIVAL_DTL_ID }).Select(x => new { Key = x.Count(), MATERIEL_CODE = x.Key.MATERIEL_CODE, BATCH_NO = x.Key.BATCH_NO, ARRIVAL_DTL_ID = x.Key.ARRIVAL_DTL_ID }).ToList();
foreach (var item in strList)
{
if (item.Key > 1)
{
KryptonMessageBox.Show($"相同的物料:【{item.MATERIEL_CODE}】,批次号:【{item.BATCH_NO}】到货单明细行:【{item.ARRIVAL_DTL_ID}】只能添加一行收货数据,请修正输入数据行!");
return;
}
}
#endregion
List finalReceiptDtlList = new List();
foreach (WmsInReceiptDtlResult itemOld in ReceiptDataNotEdit.WmsInReceiptDtlList)
{
WmsInReceiptDtlResult receiptDtlNew = mdReceiptDtlList.Find(x => x.RECEIPT_DTL_ID == itemOld.RECEIPT_DTL_ID);
if (receiptDtlNew != null)
{
receiptDtlNew.RECEIPT_DTL_STATUS = itemOld.RECEIPT_DTL_STATUS;
receiptDtlNew.REMARKS1 = "更新";
finalReceiptDtlList.Add(receiptDtlNew);
}
else
{
itemOld.RECEIPT_DTL_STATUS = (int)ReceiptStatus.已删除;
itemOld.REMARKS1 = "删除";
finalReceiptDtlList.Add(itemOld);
}
}
foreach (WmsInReceiptDtlResult itemNew in mdReceiptDtlList)
{
if (itemNew.RECEIPT_DTL_ID == 0)
{
itemNew.REMARKS1 = "添加";
finalReceiptDtlList.Add(itemNew);
}
}
mdReceipt.WmsInReceiptDtlList = finalReceiptDtlList;
var result = WmsInstockService.wmsInReceiptService.EditWmsInReceiptData(mdReceipt);
if (result.Status == OperateStatus.Success)
{
KryptonMessageBox.Show(result.Message);
frmWmsInReceipt.RefreshFrmHost();
this.Close();
}
else
{
KryptonMessageBox.Show(result.Message);
}
}
else
{
DialogResult dr = KryptonMessageBox.Show("由于明细为空,确定要删除收货单所有数据吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (dr == DialogResult.OK)
{
var result = WmsInstockService.wmsInReceiptService.DeleteWmsInReceiptData(new WmsInReceiptResult { RECEIPT_NO = ReceiptDataNotEdit.RECEIPT_ID.ToString(), UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId });
if (result.Status == OperateStatus.Success)
{
KryptonMessageBox.Show(result.Message);
frmWmsInReceipt.RefreshFrmHost();
this.Close();
}
else
{
KryptonMessageBox.Show(result.Message);
}
}
}
}
private ListItem GetComboBoxItem(DataGridViewComboBoxCell dataGridViewComboBoxCell)
{
foreach (var item in dataGridViewComboBoxCell.Items)
{
if (((ListItem)item).Text == dataGridViewComboBoxCell.Value.ToString())
{
return (ListItem)item;
}
}
return new ListItem();
}
private ListItem GetComboBoxItem(DataGridViewComboBoxCell dataGridViewComboBoxCell, string value)
{
foreach (var item in dataGridViewComboBoxCell.Items)
{
if (((ListItem)item).Value == value)
{
return (ListItem)item;
}
}
return new ListItem();
}
///
/// 校验DataGridView输入行数据的正确性
///
/// DataGridView输入行
/// 校验结果信息
///
private bool CheckDataGridViewRowFormat(DataGridViewRow dvr, ref string OutMssg)
{
if (dvr.Cells[1].Value == null)
{
OutMssg = $"第【{dvr.Index + 1}】行未输入物料编码!";
return false;
}
if (dvr.Cells[2].Value == null)
{
OutMssg = $"第【{dvr.Index + 1}】行未输入物料名称!";
return false;
}
if (dvr.Cells[6].Value == null)
{
OutMssg = $"第【{dvr.Index + 1}】行未输入收货明细数量!";
return false;
}
else
{
if (!Regex.IsMatch(dvr.Cells[6].Value.ToString(), @"([1-9]\d*(\.\d*[1-9])?)"))
{
OutMssg = $"第【{dvr.Index + 1}】行输入的收货明细数量不是合法的数字类型,请检查!";
return false;
}
else
{
if (!string.IsNullOrEmpty(ktb_ArrivalNo.Text))
{
decimal receiptDtlQty = Convert.ToDecimal(dvr.Cells[6].Value);
decimal ArrivalDtlQty_NoReceipt = Convert.ToDecimal(dvr.Cells[5].Value);
if (receiptDtlQty > ArrivalDtlQty_NoReceipt && ArrivalDtlQty_NoReceipt > 0)
{
OutMssg = $"第【{dvr.Index + 1}】行输入的收货明细数量大于到货单明细未收货数量,请修改收货明细数量!";
return false;
}
}
}
}
if (dvr.Cells[7].Value == null)
{
OutMssg = $"第【{dvr.Index + 1}】行未选择单位信息!";
return false;
}
if (dvr.Cells[8].Value == null)
{
OutMssg = $"第【{dvr.Index + 1}】行未选择供应商信息!";
return false;
}
if (dvr.Cells[10].Value == null)
{
OutMssg = $"第【{dvr.Index + 1}】行未输入生产日期!";
return false;
}
if (dvr.Cells[11].Value == null)
{
OutMssg = $"第【{dvr.Index + 1}】行未输入失效日期!";
return false;
}
if (DateTime.Compare(Convert.ToDateTime(dvr.Cells[10].Value), Convert.ToDateTime(dvr.Cells[11].Value)) >= 0)
{
OutMssg = $"第【{dvr.Index + 1}】行未输入的生产日期大于失效日期,不符合实际情况,请重新输入!";
return false;
}
OutMssg = "校验成功!";
return true;
}
#endregion
#region DataGridView相关的事件
///
/// 编辑单元格控件时触发的事件
///
///
///
private void kdgv_ReceiptDtlData_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control is DataGridViewOfComoBoxCustom)
{
(e.Control as DataGridViewOfComoBoxCustom).AfterSelector -= new AfterSelectorEventHandler(SalePageAddOrEditForm_AfterSelector);
(e.Control as DataGridViewOfComoBoxCustom).AfterSelector += new AfterSelectorEventHandler(SalePageAddOrEditForm_AfterSelector);
}
}
///
/// 针对ComboBox下拉列表的DataGridView数据列单元格。
/// 由于DataGridView的ComboBox列的Item至使用的是KeyValue形式的ListItem,
/// 并且单元格刚开始进入编辑的时候,value值为null。如果后续不选择下拉列表的值,就切换编辑的单元格,就会触发DataError事件,警告数据格式错误。
/// 所以单元格刚开始进入编辑的时候。需要设定一个默认值。默认值的类型为ListItem。一般设定为下拉列表值集合的第一个值。
///
///
///
private void kdgv_ReceiptDtlData_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
int rowIndex = e.RowIndex;
int columnIndex = e.ColumnIndex;
if (kdgv_ReceiptDtlData.Rows[rowIndex].Cells[columnIndex] is DataGridViewComboBoxCell)
{
if (kdgv_ReceiptDtlData.Rows[rowIndex].Cells[columnIndex].Value == null)
{
DataGridViewComboBoxCell dataGridViewComboBoxCell = (DataGridViewComboBoxCell)kdgv_ReceiptDtlData.Rows[rowIndex].Cells[columnIndex];
ListItem tstlst = (ListItem)dataGridViewComboBoxCell.Items[0];
kdgv_ReceiptDtlData.Rows[rowIndex].Cells[columnIndex].Value = tstlst;
}
}
}
///
/// 针对ComboBox下拉列表的DataGridView数据列单元格。
/// 由于DataGridView的ComboBox列的Item至使用的是KeyValue形式的ListItem,
/// 所以单元格结束编辑的时候。需要给单元格设定一个类型为ListItem的值。
///
///
///
private void kdgv_ReceiptDtlData_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
int rowIndex = e.RowIndex;
int columnIndex = e.ColumnIndex;
if (kdgv_ReceiptDtlData.Rows[rowIndex].Cells[columnIndex] is DataGridViewComboBoxCell)
{
ListItem tstlst = GetComboBoxItem((DataGridViewComboBoxCell)kdgv_ReceiptDtlData.Rows[rowIndex].Cells[columnIndex]);
kdgv_ReceiptDtlData.Rows[rowIndex].Cells[columnIndex].Value = tstlst;
}
}
///
/// 悬浮datagridview数据窗体,行选择后事件
///
///
///
void SalePageAddOrEditForm_AfterSelector(object sender, AfterSelectorEventArgs e)
{
try
{
DataGridViewRow row = e.Value as DataGridViewRow;
DataRowView dataRow = row.DataBoundItem as DataRowView;
WmsInArrivalDtlResult mdArrDtl = new WmsInArrivalDtlResult();
if (lstArrivalDtl.Count > 0 && ktb_ArrivalNo.Text != "")
{
int arrivalDtlId = Convert.ToInt32(dataRow["到货通知单明细ID"].ToString().Trim());
mdArrDtl = lstArrivalDtl.Find(x => x.ARRIVAL_DTL_ID == arrivalDtlId);
//bool isExisArrDtlId = false;
//foreach (DataGridViewRow item in kdgv_ReceiptDtlData.Rows)
//{
// if (Convert.ToString(item.Cells[13].Value) == dataRow["到货通知单明细ID"].ToString().Trim())
// {
// isExisArrDtlId = true;
// break;
// }
//}
//if (isExisArrDtlId)
//{
// KryptonMessageBox.Show($"表格中已存在相同物料:【{dataRow["物料编码"].ToString().Trim()}】相同批次:【{mdArrDtl.BATCH_NO}】的到货通知单明细行,请删除原数据行后重新添加,或者修改原数据行的信息。");
// return;
//}
}
kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[1].Value = dataRow["物料编码"].ToString().Trim();
kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[2].Value = dataRow["物料名称"].ToString().Trim();
kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[3].Value = dataRow["物料条码"].ToString().Trim();
if (lstArrivalDtl.Count > 0)
{
if (mdArrDtl != null)
{
kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[4].Value = mdArrDtl.BATCH_NO;
kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[5].Value = mdArrDtl.ARRIVAL_QTY - mdArrDtl.RECEIPT_QTY;
ListItem unitLstItm = GetComboBoxItem((DataGridViewComboBoxCell)kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[7], mdArrDtl.UNIT_CODE);
kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[7].Value = unitLstItm;
ListItem supplierLstItm = GetComboBoxItem((DataGridViewComboBoxCell)kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[8], mdArrDtl.SUPPLIER_CODE);
kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[8].Value = supplierLstItm;
kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[9].Value = mdArrDtl.PACKAGE_CODE;
kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[10].Value = mdArrDtl.PRODUCT_DATE;
kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[11].Value = mdArrDtl.EXP_DATE;
kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[14].Value = mdArrDtl.ARRIVAL_QTY;
}
}
kdgv_ReceiptDtlData.Rows[e.RowIndex].Cells[13].Value = dataRow["到货通知单明细ID"].ToString().Trim();
kdgv_ReceiptDtlData.CurrentCell = this.kdgv_ReceiptDtlData[e.ColumnIndex, e.RowIndex + 1];
}
catch (Exception ex)
{
KryptonMessageBox.Show(ex.Message);
}
}
private void kdgv_ReceiptDtlData_DataError(object sender, DataGridViewDataErrorEventArgs e)
{
}
private void kdgv_ReceiptDtlData_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
int index = kdgv_ReceiptDtlData.Rows.Count;
kdgv_ReceiptDtlData.Rows[index - 1].Cells[0].Value = index;
}
#endregion
#region 鼠标右键单击事件
///
/// 删除选中行事件
///
///
///
private void 删除选中行ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!kdgv_ReceiptDtlData.CurrentRow.IsNewRow)
{
if (ktb_ArrivalNo.Text != "")
{
DataGridViewRow item = kdgv_ReceiptDtlData.CurrentCell.OwningRow;
decimal currCellRecQty = item.Cells[6].Value == null ? 0 : Convert.ToDecimal(item.Cells[6].Value);
int currCellArrDtlId = item.Cells[13].Value == null ? 0 : Convert.ToInt32(item.Cells[13].Value);
if (currCellRecQty > 0)
{
WmsInArrivalDtlResult arrDtlMd = lstArrivalDtl.Find(x => x.ARRIVAL_DTL_ID == currCellArrDtlId);
lstArrivalDtl.Find(x => x.ARRIVAL_DTL_ID == currCellArrDtlId).RECEIPT_QTY = arrDtlMd.RECEIPT_QTY - currCellRecQty;
dt.Rows.Clear();
foreach (WmsInArrivalDtlResult item1 in lstArrivalDtl)
{
if (item1.RECEIPT_QTY < item1.ARRIVAL_QTY)
{
DataRow dr = dt.NewRow();
dr["物料编码"] = item1.MATERIEL_CODE;
dr["物料名称"] = item1.MATERIEL_NAME;
dr["物料条码"] = item1.MATERIEL_BARCODE;
dr["物料类型编码"] = item1.MATERIEL_TYPE_CODE;
dr["物料类型名称"] = item1.MATERIEL_TYPE_NAME;
dr["到货通知单明细ID"] = item1.ARRIVAL_DTL_ID;
dt.Rows.Add(dr);
}
}
}
}
kdgv_ReceiptDtlData.Rows.Remove(kdgv_ReceiptDtlData.CurrentCell.OwningRow);
foreach (DataGridViewRow item in kdgv_ReceiptDtlData.Rows)
{
int index = item.Index;
kdgv_ReceiptDtlData.Rows[index].Cells[0].Value = index + 1;
}
}
}
///
/// 删除全部行事件
///
///
///
private void 全部删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (ktb_ArrivalNo.Text != "")
{
foreach (DataGridViewRow item in kdgv_ReceiptDtlData.Rows)
{
decimal currCellRecQty = item.Cells[6].Value == null ? 0 : Convert.ToDecimal(item.Cells[6].Value);
int currCellArrDtlId = item.Cells[13].Value == null ? 0 : Convert.ToInt32(item.Cells[13].Value);
if (currCellRecQty > 0)
{
WmsInArrivalDtlResult arrDtlMd = lstArrivalDtl.Find(x => x.ARRIVAL_DTL_ID == currCellArrDtlId);
lstArrivalDtl.Find(x => x.ARRIVAL_DTL_ID == currCellArrDtlId).RECEIPT_QTY = arrDtlMd.RECEIPT_QTY - currCellRecQty;
}
}
}
kdgv_ReceiptDtlData.Rows.Clear();
}
///
/// 重新加载正在编辑的收货单明细数据
///
///
///
private void 重新加载ToolStripMenuItem_Click(object sender, EventArgs e)
{
var loadfrm = new frmLoading();
loadfrm.Show();
var message = loadfrm.EventCalExec(LoadWmsInReceiptDtlData);
if (!string.IsNullOrWhiteSpace(message))
{
KryptonMessageBox.Show($"查询失败!\r\n{message}", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
try
{
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("MaterialCode");
dt.Columns.Add(dc);
dc = new DataColumn("UnitCode");
dt.Columns.Add(dc);
dc = new DataColumn("MaterialName");
dt.Columns.Add(dc);
dc = new DataColumn("Specs");
dt.Columns.Add(dc);
dc = new DataColumn("BatchNo");
dt.Columns.Add(dc);
dc = new DataColumn("Qty");
dt.Columns.Add(dc);
dc = new DataColumn("UniqueLabel");
dt.Columns.Add(dc);
foreach (WmsInReceiptDtlResult item in ReceiptDataNotEdit.WmsInReceiptDtlList)
{
DataRow dr = dt.NewRow();
dr["MaterialCode"] = item.MATERIEL_CODE;
dr["UnitCode"] = item.UNIT_CODE;
dr["MaterialName"] = item.MATERIEL_NAME;
dr["Specs"] = item.MATERIEL_SPEC;
dr["BatchNo"] = item.BATCH_NO;
dr["Qty"] = item.RECEIPT_DTL_QTY;
dr["UniqueLabel"] = item.MATERIEL_CODE + "_" + item.RECEIPT_DTL_ID;
dt.Rows.Add(dr);
}
DataSet dts = new DataSet();
dts.Tables.Add(dt);
FastReport.Report report = new FastReport.Report();
string filename = _reportFolder + "标签数据.frx";
report.Load(filename);
report.RegisterData(dts);
report.Prepare();
report.PrintSettings.ShowDialog = false;
report.Print();
report.Clear();
}
catch (Exception ex)
{
KryptonMessageBox.Show(ex.Message);
}
button1.Enabled = true;
}
}
}