using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;
using System.IO;
using HH.WMS.Client;
using Newtonsoft.Json;
using DevComponents.DotNetBar.Controls;
using System.Collections;
using Newtonsoft.Json.Linq;
using System.Net;
using System.Management;
using HH.WMS.Client.Common;
using HH.WMS.Entitys.Basic;
using HH.WMS.Entitys.Entitys.PrintDataSource;
using HH.WMS.Client.frm;
using HH.WMS.Entitys.Sys;
using DevComponents.DotNetBar;
namespace WindowsFormsApplication2
{
public partial class ItemTagPrint : frmTemplet
{
//全局变量
DataTable dt = new DataTable();
private string currentPrintOrder = "";
public ItemTagPrint()
{
InitializeComponent();
}
///
/// 物料编码
///
public bool isItems { get; set; }
private void ItemTagPrint_Load(object sender, EventArgs e)
{
dgvWaitPrintDg.AutoGenerateColumns = false;
PrintService();
GetOrder();
GetPrinter();
GetBarMode();
DevComponents.DotNetBar.ButtonItem btnItemSet = new DevComponents.DotNetBar.ButtonItem();
btnItemSet.Image = global::HH.WMS.Client.Properties.Resources.moban;
btnItemSet.ItemAlignment = DevComponents.DotNetBar.eItemAlignment.Center;
//btnItemHome.Name = "btnItemHome";
btnItemSet.PopupWidth = 100;
btnItemSet.Text = "设置";
btnItemSet.Click += btnItemSet_Click;
//btnItemSet.ItemAlignment = DevComponents.DotNetBar.eItemAlignment.Far;
this.AddMenu(btnItemSet);
}
void btnItemSet_Click(object sender, EventArgs e)
{
frmTempletSet from = new frmTempletSet();
from.ShowDialog();
}
//填充表格
public void BindData(string opNo)
{
dgvlist.Refresh();
string str = "";
var type = this.cmbOrderType.Text;
if (type == "入库单")
{
str = WebApiManager.HttpWMS_Get("/api/In/GetListInventoryDtl?opNo=" + opNo);
}
else if (type == "采购单")
{
str = WebApiManager.HttpWMS_Get("/api/In/GetInDtlList?opNo=" + opNo);
}
else if (type == "到货单")
{
str = WebApiManager.HttpWMS_Get("/api/Arrival/GetDtlList?opNo=" + opNo);
}
OperateResult results = JsonConvert.DeserializeObject(str);
dgvlist.AutoGenerateColumns = false;
this.dgvlist.DataSource = results.Data;
SetPrintQty();
}
#region 计算打印数量
public void SetPrintQty()
{
List items = new List();
foreach (DataGridViewRow r in this.dgvlist.Rows)
{
items.Add(r.Cells["CN_S_ITEM_CODE"].Value.ToString());
}
string str = WebApiManager.HttpWMS_Get("/api/Item/GetItemModels?itemCodes=" + string.Join(",", items));
OperateResult results = JsonConvert.DeserializeObject(str);
if (results.Status == ResultStatus.Success)
{
List itemlist = JsonConvert.DeserializeObject>(results.Data.ToString());
foreach (DataGridViewRow r in this.dgvlist.Rows)
{
AutoBomItemEntity item = itemlist.Find(x => x.CN_S_ITEM_CODE.Equals(r.Cells["CN_S_ITEM_CODE"].Value.ToString()));
if (item == null)
{
MessageBoxEx.Show("Mongo中未找到该物料!");
return;
}
if (item.CN_F_MIN_PACK_QTY == 0)
{
r.Cells["CN_F_MIN_PACK_QTY"].Value = Convert.ToInt16(r.Cells["CN_F_QUANTITY"].Value);
r.Cells["PrintQuantity"].Value = 1;
}
else
{
r.Cells["CN_F_MIN_PACK_QTY"].Value = item.CN_F_MIN_PACK_QTY;
r.Cells["PrintQuantity"].Value = Convert.ToInt16(Convert.ToInt16(r.Cells["CN_F_QUANTITY"].Value) / item.CN_F_MIN_PACK_QTY);
}
}
}
}
#endregion
//事件处理方法
void frm_TransfEvent(string value)
{
BindData(value);
}
///
/// 绑定选择Item的数据源
///
///
public void GetItemlist(DataTable ds)
{
isItems = true;
dgvlist.Refresh();
dgvlist.AutoGenerateColumns = false;
ds.Columns.Add("PrintQuantity");
foreach (DataRow dr in ds.Rows)
dr["PrintQuantity"] = 1;
this.dgvlist.DataSource = ds; //results.Data;
}
#region 加载打印机
///
/// 加载打印机
///
public void GetPrinter()
{
PrintDocument print = new PrintDocument();
string sDefault = print.PrinterSettings.PrinterName;//默认打印机名
var printers = PrinterSettings.InstalledPrinters;//获取全部打印机
foreach (string sPrint in PrinterSettings.InstalledPrinters)//获取所有打印机名称
{
cmbPrinter.Items.Add(sPrint);
}
}
#endregion
//加载单据
public void GetOrder()
{
DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(string));
dt.Columns.Add("name", typeof(string));
dt.Rows.Add("0", "--请选择--");
dt.Rows.Add("1", "入库单");
dt.Rows.Add("2", "采购单");
dt.Rows.Add("3", "到货单");
this.cmbOrderType.DataSource = dt;
this.cmbOrderType.ValueMember = "id";
this.cmbOrderType.DisplayMember = "name";
}
#region 获取bartender文件模版
///
/// 获取bartender文件模版
///
public void GetBarMode()
{
this.cmbBartender.Items.Clear();
string path = @"ActionReport/Template/";
DirectoryInfo root = new DirectoryInfo(path);
FileInfo[] files = root.GetFiles();
foreach (FileInfo m in files)
this.cmbBartender.Items.Add(m.Name);
//string str = WebApiManager.HttpWMS_Get("/api/PrintTemplet/GetPrintTemplet?ip=" + StaticUtil.Ip
// + "&mac=" + StaticUtil.Mac);
//OperateResult results = JsonConvert.DeserializeObject(str);
//if (results.Status == ResultStatus.Success)
//{
//List v = JsonConvert.DeserializeObject>(results.Data.ToString());
//this.cmbBartender.DataSource = v.FindAll(x => x.CN_S_TEMPLET_TYPE.Equals("物料标签") && x.CN_S_MAC.Equals(StaticUtil.Mac));
//this.cmbBartender.DisplayMember ="CN_S_TEMPLET_NAME";
//}
//else
//{
// MessageBoxEx.Show("打印模板加载失败!");
//}
}
#endregion
#region 打印
///
/// 打印
///
///
///
private void btnPrint_Click(object sender, EventArgs e)
{
//组织打印信息
List list = new List();
dt = new DataTable();
if (this.dgvlist.Rows.Count == 0)
{
MessageBoxEx.Show("请选择打印信息!", "汉和信息");
return;
}
if (string.IsNullOrEmpty(this.cmbBartender.Text))
{
MessageBoxEx.Show("请选择打印模版!", "汉和信息");
return;
}
TN_WM_B_STRATEGY_VALUEEntity strategy = StaticUtil.StrategyList.Find(x => x.CN_S_CODE.Equals("IsUseSNCode"));
string IsUseSNCode = "Y";
if (strategy != null)
IsUseSNCode = strategy.CN_S_VALUE;
DataTable printDt = new DataTable();
printDt.Columns.Add("ItemCode");
printDt.Columns.Add("ItemName");
printDt.Columns.Add("Model");
printDt.Columns.Add("Qty");
printDt.Columns.Add("Unit");
printDt.Columns.Add("FigureNo");
printDt.Columns.Add("UniqueCode");
for (int i = 0; i < dgvlist.Rows.Count; i++)
{
int printQuantity = Convert.ToInt32(dgvlist.Rows[i].Cells["PrintQuantity"].FormattedValue);
for (int j = 0; j < printQuantity; j++)
{
string itemCode = dgvlist.Rows[i].Cells["CN_S_ITEM_CODE"].Value.ToString();
decimal packQty = Convert.ToDecimal(dgvlist.Rows[i].Cells["CN_F_MIN_PACK_QTY"].Value);
if (packQty == 0)
{
MessageBoxEx.Show("请维护最小包装数!");
return;
}
string uniqueCode = "";
if (IsUseSNCode == "Y")
{
//启用唯一码时生成 PAK唯一号
uniqueCode = Guid.NewGuid().ToString();
}
printDt.Rows.Add(
itemCode,
dgvlist.Rows[i].Cells["CN_S_ITEM_NAME"].Value,
dgvlist.Rows[i].Cells["CN_S_MODEL"].Value,
packQty,
dgvlist.Rows[i].Cells["CN_S_MEASURE_UNIT"].Value,
dgvlist.Rows[i].Cells["CN_S_FIGURE_NO"].Value,
uniqueCode);
list.Add(new MONGO_PRINT_BARCODE()
{
CN_S_IN_ORDER = currentPrintOrder,
CN_S_ITEM_CODE = itemCode,
CN_S_ITEM_NAME = dgvlist.Rows[i].Cells["CN_S_ITEM_NAME"].Value.ToString(),
CN_S_FIGURE_NO = dgvlist.Rows[i].Cells["CN_S_FIGURE_NO"].Value.ToString(),
CN_S_UNIQUE_CODE = uniqueCode,
//CN_S_PACKING_UNIT =
CN_F_PACKING_QTY = packQty,
CN_F_QUANTITY = packQty//.ToDecimal(dgvlist.Rows[i].Cells["CN_F_QUANTITY"].Value)
});
}
}
currPrintDS = printDt;
//var info = SysStrategyList.Where(x => (x["CN_S_STOCK_CODE"]).ToString() ==StaticUtil.StockCode && (x["CN_S_CODE"]).ToString() == "IsUseSNCode").ToArray();
if (IsUseSNCode.Equals("Y"))
{
string str = WebApiManager.HttpWMS_Post("/api/PrintTag/PrintItemTag", JsonConvert.SerializeObject(list));
OperateResult results = JsonConvert.DeserializeObject(str);
if (results.Status == ResultStatus.Error)
{
MessageBoxEx.Show("打印失败", "合肥汉和");
return;
}
}
OperateResult or = ArPrint(cmbPrinter.Text, cmbBartender.Text, currPrintDS);
if (or.Status != ResultStatus.Success)
MessageBoxEx.Show(or.Msg);
else
MessageBoxEx.Show("打印成功!");
//ArPrint();
}
#endregion
#region 删除
///
/// 删除
///
///
///
private void btnDelete_Click(object sender, EventArgs e)
{
if (this.dgvlist.SelectedRows.Count == 0)
{
MessageBoxEx.Show(this, "请选择需要删除的行!", "合肥汉和");
return;
}
DialogResult dr = MessageBoxEx.Show(this, "确定要删除选中行数据码?", "合肥汉和", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (dr == System.Windows.Forms.DialogResult.Yes)
{
for (int i = this.dgvlist.SelectedRows.Count; i > 0; i--)
{
dgvlist.Rows.RemoveAt(dgvlist.SelectedRows[i - 1].Index);
if (dgvlist.Rows.Count == 0)
btnSelectOne.Enabled = true;
}
}
}
#endregion
//新增
private void btnSelectOne_Click(object sender, EventArgs e)
{
ItemForm item = new ItemForm();
item.Text = "单品选择";
item.itemCodes += GetItemlist;
item.Show();
}
//弹出子窗体
private void btnSelect_Click(object sender, EventArgs e)
{
var fromtext = this.cmbOrderType.Text;
if (fromtext == "--请选择--")
{
MessageBoxEx.Show("请选择单据类型", "合肥汉和");
return;
}
if (fromtext == "入库单")
{
InFrom f2 = new InFrom();
f2.Text = fromtext;
//注册事件
f2.TransfEvent += frm_TransfEvent;
f2.ShowDialog();
}
else if (fromtext == "采购单")
{
InOrderFrom io = new InOrderFrom();
io.Text = fromtext;
//注册事件
io.TransfEvent += frm_TransfEvent;
io.ShowDialog();
}
else if (fromtext == "到货单")
{
ArrivalOrderForm ao = new ArrivalOrderForm();
ao.Text = fromtext;
ao.TransfEvent += frm_TransfEvent;
ao.ShowDialog();
}
}
private void dgvlist_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
for (int i = 0; i < this.dgvlist.Rows.Count; i++)
{
DataGridViewRow r = this.dgvlist.Rows[i];
r.HeaderCell.Value = string.Format("{0}", i + 1);
}
}
private void btnEmpty_Click(object sender, EventArgs e)
{
this.dgvlist.DataSource = null;
btnSelectOne.Enabled = true;
}
//设置默认值
private void dgvlist_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
e.Row.Cells["PrintQuantity"].Value = "1";
}
#region 打印
private DataTable currPrintDS;
///
/// 打印
///
/// 打印机名
/// 打印模板
/// 打印数据源
private OperateResult ArPrint(string printer, string templetName, DataTable dt)
{
try
{
currPrintDS = dt;
GrapeCity.ActiveReports.PageReport rpt = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(@"ActionReport/Template/" + templetName + ""));//打开模版
rpt.Document.LocateDataSource += new GrapeCity.ActiveReports.LocateDataSourceEventHandler(SetPrintDataSource);
rpt.Document.Printer.PrinterName = printer;
//this.viewer1.LoadDocument(rpt.Document);
bool b = GrapeCity.ActiveReports.PrintExtension.Print(rpt.Document, false, false);
if (b)
return OperateResult.Succeed();
else
return OperateResult.Error("打印异常!");
}
catch (Exception ex)
{
return OperateResult.Error(ex.Message);
}
}
private void SetPrintDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
{
args.Data = currPrintDS;
}
#endregion
#region 刷新模板
///
/// 刷新模板
///
///
///
private void btnShuaxin_Click(object sender, EventArgs e)
{
//清除
GetBarMode();//从新加载
}
#endregion
#region 编辑格式限制
///
/// 编辑格式限制
///
///
///
TextBox control;
private void dgvlist_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
if (e.Control.GetType().BaseType.Name == "TextBox")
{
control = new TextBox();
control = (TextBox)e.Control;
if (control.Text == "0") //需要限制输入数字的单元格
{
control.KeyPress += new KeyPressEventHandler(control_KeyPress);
}
else
{
//非数字类型单元格
control.Leave += new EventHandler(control_Leave);
}
}
}
void control_KeyPress(object sender, KeyPressEventArgs e)
{
//限制只能输入-9的数字,退格键,小数点和回车
//if (((int)e.KeyChar >= 48 && (int)e.KeyChar <= 57) || e.KeyChar == 13 || e.KeyChar == 8 || e.KeyChar == 46)
if (((int)e.KeyChar >= 48 && (int)e.KeyChar <= 57) || e.KeyChar == 13 || e.KeyChar == 8)
{
e.Handled = false;
}
else
{
e.Handled = true;
MessageBoxEx.Show("只能输入数字!");
}
}
void control_Leave(object sender, EventArgs e)
{
//如果需要限制字符串输入长度
//if (control.Text.Length != 11)
//{
// MessageBox.Show("只能为位!");
// control.Focus();
//}
}
#endregion
#region 后台打印服务
Timer GetTaskTimer;
///
/// 后台打印服务
///
private void PrintService()
{
GetTaskTimer = new Timer();
GetTaskTimer.Interval = 2000;
GetTaskTimer.Tick += GetTaskTimer_Tick;
GetTaskTimer.Start();
}
private void GetTaskTimer_Tick(object sender, EventArgs e)
{
GetPrintTask(true);
}
#endregion
#region 复选历史打印任务
///
/// 复选历史打印任务
///
///
///
private void cbkHistory_CheckedChanged(object sender, EventArgs e)
{
dtiStart.Visible = dtiEnd.Visible = lbl1.Visible = chkHistory.Checked;
}
#endregion
#region 补打任务
///
/// 补打任务
///
///
///
private void btnRePrint_Click(object sender, EventArgs e)
{
try
{
if (dgvTask.SelectedRows.Count == 0)
{
MessageBoxEx.Show("请选择需要补打的行!");
return;
}
bool isOk = true;
foreach (DataGridViewRow m in dgvTask.SelectedRows)
{
string content = m.Cells["CN_S_CONTENT"].Value.ToString().Replace('<', '[').Replace('(', '{').Replace('\\', '\"').Replace(')', '}').Replace('>', ']');
currPrintDS = JsonConvert.DeserializeObject(content);
OperateResult or = ArPrint(m.Cells["CN_S_PRINTER"].Value.ToString().Replace('!', '\\'), m.Cells["CN_S_TEMPLET_NAME"].Value.ToString(), currPrintDS);
if (or.Status == ResultStatus.Success)
WebApiManager.HttpWMS_Get("/api/PrintTemplet/UpdatePrintFlag?guids=" + m.Cells["CN_GUID"].ToString());
else
{
m.Cells["columnRemark"].Value = or.Msg;
isOk = false;
}
}
if (!isOk)
{
MessageBoxEx.Show("打印失败,请查看备注!");
}
}
catch (Exception ex)
{
MessageBoxEx.Show(ex.Message);
}
}
#endregion
#region 搜索
///
/// 搜索
///
///
///
private void btnSearch_Click(object sender, EventArgs e)
{
if (chkHistory.Checked && (dtiStart.Value.ToShortDateString().Equals("0001/1/1") || dtiEnd.Value.ToShortDateString().Equals("0001/1/1")))
{
MessageBoxEx.Show("请选择查找范围!");
return;
}
GetPrintTask(false);
}
#endregion
#region 获取打印任务
///
/// 获取打印任务
///
/// 是否自动打印
private void GetPrintTask(bool isPrint)
{
string startDate = "", endDate = "";
if (chkHistory.Checked)
{
startDate = dtiStart.Value.ToShortDateString();
endDate = dtiEnd.Value.ToShortDateString();
}
string str = WebApiManager.HttpWMS_Get("/api/PrintTemplet/GetPrintTask?mac=" + StaticUtil.Mac + "&isHistory=" + (chkHistory.Checked ? "Y" : "N") + "&key=" + txtKey.Text + "&startDate=" + startDate + "&endDate=" + endDate);
OperateResult results = JsonConvert.DeserializeObject(str);
if (results.Status == ResultStatus.Error)
{
return;
}
if (!isPrint)
{
dgvTask.Rows.Clear();
}
if (!results.Data.ToString().Equals("[]"))
{
foreach (TN_WM_PRINT_TASKEntity m in JsonConvert.DeserializeObject>(results.Data.ToString()))
{
bool b = true;
foreach (DataGridViewRow r in dgvTask.Rows)
{
if (r.Cells[0].Tag.ToString().Equals(m.CN_GUID))
{
b = false;
break;
}
}
if (!b)
continue;
if (!chkHistory.Checked)
{
DataGridViewRow row = new DataGridViewRow();
DataGridViewCheckBoxCell cell0 = new DataGridViewCheckBoxCell();
cell0.Tag = m.CN_GUID;
row.Cells.Add(cell0);
DataGridViewTextBoxCell cell1 = new DataGridViewTextBoxCell();
cell1.Value = m.CN_S_TEMPLET_TYPE.Trim();
row.Cells.Add(cell1);
DataGridViewTextBoxCell cell2 = new DataGridViewTextBoxCell();
cell2.Value = m.CN_S_TEMPLET_NAME.Trim();
row.Cells.Add(cell2);
DataGridViewTextBoxCell cell3 = new DataGridViewTextBoxCell();
cell3.Value = m.CN_S_PRINTER.Trim();
row.Cells.Add(cell3);
DataGridViewTextBoxCell cell5 = new DataGridViewTextBoxCell();
cell5.Value = m.CN_S_CONTENT.Trim();
row.Cells.Add(cell5);
DataGridViewTextBoxCell cell9 = new DataGridViewTextBoxCell();
cell9.Value = m.CN_T_CREATE;
row.Cells.Add(cell9);
DataGridViewTextBoxCell cell8 = new DataGridViewTextBoxCell();
cell8.Value = m.CN_C_IS_PRINTED.Trim();
row.Cells.Add(cell8);
dgvTask.Rows.Add(row);
}
if (isPrint)
{
m.CN_S_CONTENT = m.CN_S_CONTENT.Replace('<', '[').Replace('(', '{').Replace('\\', '\"').Replace(')', '}').Replace('>', ']');
currPrintDS = JsonConvert.DeserializeObject(m.CN_S_CONTENT);
OperateResult or = ArPrint(m.CN_S_PRINTER.Replace('!', '\\'), m.CN_S_TEMPLET_NAME, currPrintDS);
if (or.Status == ResultStatus.Success)
{
string strResult = WebApiManager.HttpWMS_Get("/api/PrintTemplet/UpdatePrintFlag?guids=" + m.CN_GUID.Trim());
or = JsonConvert.DeserializeObject(strResult);
if (or.Status == ResultStatus.Success)
{
//清除已打印的任务
foreach (DataGridViewRow r in dgvTask.Rows)
{
if (r.Cells[0].Tag.ToString().Trim().Equals(m.CN_GUID.Trim()))
{
dgvTask.Rows.Remove(r);
break;
}
}
}
else
{
foreach (DataGridViewRow r in dgvTask.Rows)
{
if (r.Cells[0].Tag.ToString().Trim().Equals(m.CN_GUID.Trim()))
{
r.Cells["columnRemark"].Value = or.Msg;
break;
}
}
}
}
else
{
foreach (DataGridViewRow r in dgvTask.Rows)
{
if (r.Cells[0].Tag.ToString().Trim().Equals(m.CN_GUID.Trim()))
{
r.Cells["columnRemark"].Value = or.Msg;
break;
}
}
}
}
}
}
}
#endregion
#region 选择打印机模板
///
/// 选择打印机模板
///
///
///
private void cmbBartender_SelectedValueChanged(object sender, EventArgs e)
{
if (cmbBartender.SelectedValue != null)
{
string printer = cmbBartender.SelectedValue.ToString().Replace('!', '\\');
cmbPrinter.SelectedIndex = cmbPrinter.Items.IndexOf(printer);
}
}
#endregion
#region 刷新未完全打印的入库单
///
/// 刷新未完全打印的入库单
///
///
///
private void btnRef_Click(object sender, EventArgs e)
{
string strResult = WebApiManager.HttpWMS_Get("/api/In/GetWaitPrintOrder?StockCode=" + StaticUtil.StockCode);
OperateResult or = JsonConvert.DeserializeObject(strResult);
if (or.Status == ResultStatus.Success)
{
//JsonConvert.DeserializeObject>(results.Data.ToString())
dgvWaitPrintDg.DataSource = or.Data;
}
else
{
MessageBoxEx.Show(or.Msg);
}
}
#endregion
///
/// 单击待打印的入库单单号
///
///
///
private void dgvWaitPrintDg_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == 0)
{
string opNo = dgvWaitPrintDg.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
string str = WebApiManager.HttpWMS_Get("/api/In/GetListInventoryDtl?opNo=" + opNo);
OperateResult results = JsonConvert.DeserializeObject(str);
if (results.Status == ResultStatus.Success)
{
tabControl1.SelectedTabIndex = 1;
btnSelectOne.Enabled = false;
currentPrintOrder = opNo;
dgvlist.AutoGenerateColumns = false;
this.dgvlist.DataSource = results.Data;
SetPrintQty();
colPrintedQty.Visible = true;
}
}
}
private void cmbPrinter_SelectedIndexChanged(object sender, EventArgs e)
{
}
}
}