using ComponentFactory.Krypton.Toolkit;
using NXWMS.Client.Model.AppModels.Condition.Balance;
using NXWMS.Client.Model.AppModels.Result.Balance;
using NXWMS.Client.Model.AppModels.Result.Common;
using NXWMS.Client.Model.AppModels.Result.OutStock;
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.Threading;
using System.Threading.Tasks;
using System.Web.UI.WebControls;
using System.Windows.Forms;
namespace NXWMS.Forms.OutStock.frmOutstockChild
{
///
/// 添加发货单窗体类
///
public partial class frmChildAddWmsOutInvoice : KryptonForm
{
///
/// 窗体构造函数
///
public frmChildAddWmsOutInvoice()
{
InitializeComponent();
InitmaterielBalanceDataControl();
}
#region 全局变量
///
/// 库存物料数据的浮动DataGridView数据表
///
private KryptonDataGridView kdgv_materielBalanceData = new KryptonDataGridView();
#endregion
#region 初始化数据
private void frmChildAddWmsOutInvoice_Load(object sender, EventArgs e)
{
InitComboBoxItemData();
kdtp_InvoiceEndTime.Checked = false;
}
///
/// 初始化下拉列表数据
///
private void InitComboBoxItemData()
{
/*
ToDo:后续把下拉列表转为 后台获取数据,目前是写死的。
*/
List results = new List();
#region 单据类型
results = BasDictionaryUtil.basDictionaryResultLst.FindAll(x => x.DICTIONARY_CODE == "InvoiceTypeDesc");
if (results.Count > 0)
{
kcmb_InvoiceType.Items.Clear();
foreach (var item in results)
{
kcmb_InvoiceType.Items.Add(new ListItem
{
Value = item.DICTIONARY_ITEM_CODE,
Text = item.DICTIONARY_ITEM_NAME,
});
}
kcmb_InvoiceType.SelectedIndex = 0;
}
else
{
KryptonMessageBox.Show("未找到发货单类型的字典项数据!");
}
#endregion
}
private DataTable CreateTable(WmsStkBalanceDtlSearchMd SearchMd)
{
DataTable dt = new DataTable();
DataColumn 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);
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);
var result = WmsInvoiceService.wmsOutInvoiceService.GetBalanceForInvoice(new WmsStkBalanceDtlSearchMd
{
MaterielMsg = ktb_MaterielMsg.Text,
BatchNoMsg = ktb_BatchNoMsg.Text
});
if (result.Status == OperateStatus.Success)
{
if (result.Data.Count > 0)
{
int index = 0;
foreach (WmsStkBalanceDtlResult item in result.Data)
{
index++;
DataRow dr = dt.NewRow();
dr["序号"] = index;
dr["物料编码"] = item.MATERIEL_CODE;
dr["物料名称"] = item.MATERIEL_NAME;
dr["物料规格"] = item.MATERIEL_SPEC;
dr["物料条码"] = item.MATERIEL_BARCODE;
dr["批次号"] = item.BATCH_NO;
dr["库存数量"] = item.QTY;
dr["单位"] = item.UNIT_CODE;
dr["包装"] = item.PACKAGE_CODE;
dt.Rows.Add(dr);
}
}
}
return dt;
}
///
/// 初始化库存物料数据的浮动DataGridView数据表
///
private void InitmaterielBalanceDataControl()
{
this.Controls.Add(kdgv_materielBalanceData);
kdgv_materielBalanceData.Visible = false;
kdgv_materielBalanceData.AllowUserToAddRows = false;
kdgv_materielBalanceData.AllowUserToDeleteRows = false;
kdgv_materielBalanceData.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells;
kdgv_materielBalanceData.MultiSelect = false;
kdgv_materielBalanceData.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
kdgv_materielBalanceData.ScrollBars = System.Windows.Forms.ScrollBars.None;
kdgv_materielBalanceData.BorderStyle = System.Windows.Forms.BorderStyle.None;
kdgv_materielBalanceData.BackgroundColor = this.BackColor;
kdgv_materielBalanceData.BringToFront();
kdgv_materielBalanceData.ReadOnly = true;
kdgv_materielBalanceData.CellDoubleClick += kdgv_materielBalanceData_CellDoubleClick;
}
private void kdgv_materielBalanceData_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
int rowIndex = e.RowIndex;
if (rowIndex >= 0)
{
string idX = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["序号"].Value.ToString();
string materielCode = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["物料编码"].Value.ToString();
string materielName = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["物料名称"].Value.ToString();
string materielBarCode = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["物料条码"].Value.ToString();
string materielSpec = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["物料规格"].Value.ToString();
string batchNo = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["批次号"].Value.ToString();
string balanceQty = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["库存数量"].Value.ToString();
string unitCode = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["单位"].Value.ToString();
string packageCode = this.kdgv_materielBalanceData.Rows[rowIndex].Cells["包装"].Value.ToString();
if (kdgv_InvoiceDtlData.Rows.Count > 0)
{
foreach (DataGridViewRow item in kdgv_InvoiceDtlData.Rows)
{
string tmpBatchNo = item.Cells[5].Value == null ? "" : item.Cells[5].Value.ToString();
string tmpMateriel = item.Cells[1].Value == null ? "" : item.Cells[1].Value.ToString();
if (batchNo == tmpBatchNo && materielCode == tmpMateriel && !item.IsNewRow)
{
KryptonMessageBox.Show($"物料条码:【{tmpMateriel}】,批次号:【{tmpBatchNo}】 已经被添加到发货单明细,不允许重复添加。");
return;
}
}
}
int index = kdgv_InvoiceDtlData.Rows.Add();
kdgv_InvoiceDtlData.Rows[index].Cells[0].Value = index + 1;
kdgv_InvoiceDtlData.Rows[index].Cells[1].Value = materielCode;
kdgv_InvoiceDtlData.Rows[index].Cells[2].Value = materielName;
kdgv_InvoiceDtlData.Rows[index].Cells[3].Value = materielBarCode;
kdgv_InvoiceDtlData.Rows[index].Cells[4].Value = materielSpec;
kdgv_InvoiceDtlData.Rows[index].Cells[5].Value = batchNo;
kdgv_InvoiceDtlData.Rows[index].Cells[6].Value = balanceQty;
kdgv_InvoiceDtlData.Rows[index].Cells[8].Value = unitCode;
kdgv_InvoiceDtlData.Rows[index].Cells[9].Value = packageCode;
this.kdgv_materielBalanceData.Visible = false;
this.kdgv_materielBalanceData.DataSource = null;
this.ktb_BatchNoMsg.Text = "";
this.ktb_MaterielMsg.Text = "";
}
}
private void Delay(int milliseconds)
{
var timer = new System.Timers.Timer(milliseconds) { AutoReset = false };
timer.Elapsed += delegate {
Invoke(new Action(()=> {
DataGridViewCellEventArgs evta = new DataGridViewCellEventArgs(1, 0);
kdgv_materielBalanceData_CellDoubleClick(this.kdgv_materielBalanceData, evta);
timer.Dispose();
}));
};
timer.Start();
}
///
/// 物料信息输入内容变化事件
///
///
///
private void ktb_MaterielMsg_TextChanged(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(this.ktb_MaterielMsg.Text))
{
Point pot = this.ktb_MaterielMsg.Location;
pot.X = pot.X + 2;
pot.Y = pot.Y + this.ktb_MaterielMsg.Height * 2 + 2;
DataTable dt = CreateTable(new WmsStkBalanceDtlSearchMd {
MaterielMsg = this.ktb_MaterielMsg.Text
//BatchNoMsg = this.ktb_BatchNoMsg.Text
});
if (dt.Rows.Count == 1 && this.ktb_MaterielMsg.Text == dt.Rows[0]["物料编码"].ToString())
{
this.kdgv_materielBalanceData.Location = pot;
this.kdgv_materielBalanceData.DataSource = dt;
int cWidth = 0;
for (int i = 0; i < this.kdgv_materielBalanceData.Columns.Count; i++)
{
cWidth = cWidth + this.kdgv_materielBalanceData.Columns[i].Width;
}
this.kdgv_materielBalanceData.Width = cWidth + 40;
this.kdgv_materielBalanceData.Height = this.kdgv_materielBalanceData.Rows.Count * this.kdgv_materielBalanceData.RowTemplate.Height + this.kdgv_materielBalanceData.ColumnHeadersHeight;
this.kdgv_materielBalanceData.Visible = true;
this.kdgv_materielBalanceData.Invalidate();
this.kdgv_materielBalanceData.CurrentCell = this.kdgv_materielBalanceData.Rows[0].Cells[0];
Delay(300);
}
else
{
this.kdgv_materielBalanceData.Location = pot;
this.kdgv_materielBalanceData.DataSource = dt;
int cWidth = 0;
for (int i = 0; i < this.kdgv_materielBalanceData.Columns.Count; i++)
{
cWidth = cWidth + this.kdgv_materielBalanceData.Columns[i].Width;
}
this.kdgv_materielBalanceData.Width = cWidth + 40;
this.kdgv_materielBalanceData.Height = this.kdgv_materielBalanceData.Rows.Count * this.kdgv_materielBalanceData.RowTemplate.Height + this.kdgv_materielBalanceData.ColumnHeadersHeight;
this.kdgv_materielBalanceData.Visible = true;
this.kdgv_materielBalanceData.Invalidate();
}
}
else
{
this.kdgv_materielBalanceData.Visible = false;
this.kdgv_materielBalanceData.DataSource = null;
}
}
///
/// 批次号输入内容变化事件
///
///
///
private void ktb_BatchNoMsg_TextChanged(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(this.ktb_BatchNoMsg.Text))
{
Point pot = this.ktb_BatchNoMsg.Location;
pot.X = pot.X + 2;
pot.Y = pot.Y + this.ktb_BatchNoMsg.Height * 2 + 2;
DataTable dt = CreateTable(new WmsStkBalanceDtlSearchMd
{
//MaterielMsg = this.ktb_MaterielMsg.Text,
BatchNoMsg = this.ktb_BatchNoMsg.Text
});
if (dt.Rows.Count == 1 && this.ktb_BatchNoMsg.Text == dt.Rows[0]["物料编码"].ToString())
{
this.kdgv_materielBalanceData.Location = pot;
this.kdgv_materielBalanceData.DataSource = dt;
int cWidth = 0;
for (int i = 0; i < this.kdgv_materielBalanceData.Columns.Count; i++)
{
cWidth = cWidth + this.kdgv_materielBalanceData.Columns[i].Width;
}
this.kdgv_materielBalanceData.Width = cWidth + 40;
this.kdgv_materielBalanceData.Height = this.kdgv_materielBalanceData.Rows.Count * this.kdgv_materielBalanceData.RowTemplate.Height + this.kdgv_materielBalanceData.ColumnHeadersHeight;
this.kdgv_materielBalanceData.Visible = true;
this.kdgv_materielBalanceData.Invalidate();
this.kdgv_materielBalanceData.CurrentCell = this.kdgv_materielBalanceData.Rows[0].Cells[0];
Delay(300);
}
else
{
this.kdgv_materielBalanceData.Location = pot;
this.kdgv_materielBalanceData.DataSource = dt;
int cWidth = 0;
for (int i = 0; i < this.kdgv_materielBalanceData.Columns.Count; i++)
{
cWidth = cWidth + this.kdgv_materielBalanceData.Columns[i].Width;
}
this.kdgv_materielBalanceData.Width = cWidth + 40;
this.kdgv_materielBalanceData.Height = this.kdgv_materielBalanceData.Rows.Count * this.kdgv_materielBalanceData.RowTemplate.Height + this.kdgv_materielBalanceData.ColumnHeadersHeight;
this.kdgv_materielBalanceData.Visible = true;
this.kdgv_materielBalanceData.Invalidate();
}
}
else
{
this.kdgv_materielBalanceData.Visible = false;
this.kdgv_materielBalanceData.DataSource = null;
}
}
#endregion
#region 按钮事件
private void btnConfirm_Click(object sender, EventArgs e)
{
WmsOutInvoiceResult wmsOutInvoiceResult = new WmsOutInvoiceResult();
wmsOutInvoiceResult.INVOICE_PRIORITY = Convert.ToInt32(knud_InvoicePriority.Value);
wmsOutInvoiceResult.INVOICE_TYPE = ((ListItem)kcmb_InvoiceType.SelectedItem).Value;
if (kdtp_InvoiceEndTime.Checked)
{
wmsOutInvoiceResult.INVOICE_END_TIME = kdtp_InvoiceEndTime.Value;
}
else
{
wmsOutInvoiceResult.INVOICE_END_TIME = new DateTime();
}
wmsOutInvoiceResult.DESCRIBE = ktb_Describe.Text.Trim();
wmsOutInvoiceResult.CREATE_BY = AppConfig.UserLoginResult.UserInfo.UserId;
wmsOutInvoiceResult.UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId;
List mdInvoiceDtlList = new List();
if (kdgv_InvoiceDtlData.Rows.Count > 0 && !kdgv_InvoiceDtlData.Rows[0].IsNewRow)
{
foreach (DataGridViewRow dvr in kdgv_InvoiceDtlData.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 materielSpec = dvr.Cells[4].Value == null ? null : dvr.Cells[4].Value.ToString();
string batchNo = dvr.Cells[5].Value == null ? null : dvr.Cells[5].Value.ToString();
decimal invoiceQty = Convert.ToDecimal(dvr.Cells[7].Value.ToString());
string unitCode = dvr.Cells[8].Value == null ? null : dvr.Cells[8].Value.ToString();
string packageCode = dvr.Cells[9].Value == null ? null : dvr.Cells[9].Value.ToString();
mdInvoiceDtlList.Add(new WmsOutInvoiceDtlResult
{
MATERIEL_CODE = materielCode,
MATERIEL_NAME = materielName,
MATERIEL_BARCODE = materielBarcode,
MATERIEL_SPEC = materielSpec,
BATCH_NO = batchNo,
INVOICE_DEMAND_QTY = invoiceQty,
UNIT_CODE = unitCode,
PACKAGE_CODE = packageCode,
CREATE_BY = AppConfig.UserLoginResult.UserInfo.UserId,
UPDATE_BY = AppConfig.UserLoginResult.UserInfo.UserId,
DESCRIBE = null
});
}
}
wmsOutInvoiceResult.WmsOutInvoiceDtlList = mdInvoiceDtlList;
var result = WmsInvoiceService.wmsOutInvoiceService.AddWmsOutInvoiceData(wmsOutInvoiceResult);
if (result.Status == OperateStatus.Success)
{
KryptonMessageBox.Show(result.Message);
frmWmsOutInvoice.RefreshFrmHost();
this.Close();
}
else
{
KryptonMessageBox.Show(result.Message);
}
}
else
{
KryptonMessageBox.Show("请添加发货单明细数据!");
}
}
///
/// 校验DataGridView输入行数据的正确性
///
/// DataGridView输入行
/// 校验结果信息
///
private bool CheckDataGridViewRowFormat(DataGridViewRow dvr, ref string OutMssg)
{
if (dvr.Cells[7].Value == null)
{
OutMssg = $"第【{dvr.Index + 1}】行未输入发货数量!";
return false;
}
else
{
if (!Regex.IsMatch(dvr.Cells[7].Value.ToString(), @"([1-9]\d*(\.\d*[1-9])?)"))
{
OutMssg = $"第【{dvr.Index + 1}】行输入的发货数量不是合法的数字类型,请检查!";
return false;
}
}
OutMssg = "校验成功!";
return true;
}
private void btnCancel_Click(object sender, EventArgs e)
{
this.Close();
}
#endregion
#region DataGridView相关事件
private void kdgv_ReceiptDtlData_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
//int index = e.RowIndex;
//kdgv_materielBalanceData.Rows[index].Cells[0].Value = index + 1;
}
#endregion
#region 鼠标右键单击事件
private void 删除选中行ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (!kdgv_InvoiceDtlData.CurrentRow.IsNewRow)
{
kdgv_InvoiceDtlData.Rows.Remove(kdgv_InvoiceDtlData.CurrentCell.OwningRow);
foreach (DataGridViewRow item in kdgv_InvoiceDtlData.Rows)
{
if (!item.IsNewRow)
{
int index = item.Index;
kdgv_InvoiceDtlData.Rows[index].Cells[0].Value = index + 1;
}
}
}
}
private void 全部删除ToolStripMenuItem_Click(object sender, EventArgs e)
{
kdgv_InvoiceDtlData.Rows.Clear();
}
#endregion
}
}