using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using UAS_MES.DataOperate;
using UAS_MES.Entity;
using UAS_MES.PublicMethod;
namespace UAS_MES.Warehouse
{
public partial class Warehouse_FinishedProductOut : Form
{
DataTable dbfind;
AutoSizeFormClass asc = new AutoSizeFormClass();
LogStringBuilder sql = new LogStringBuilder();
DataTable dt;
DataHelper dh;
DataTable dta;
Warehouse_NewPiInOut newpi;
public Warehouse_FinishedProductOut()
{
InitializeComponent();
}
private void Warehouse_FinishedProductOut_Load(object sender, EventArgs e)
{
pi_inoutno.TableName = "prodinout";
pi_inoutno.DBTitle = "出货单查询";
pi_inoutno.SelectField = "pi_id # ID,pi_title # 客户名称,pi_inoutno # 出货单号,pi_type # 出货类型";
pi_inoutno.SetValueField = new string[] { "pi_title", "pi_inoutno", "pi_id" };
pi_inoutno.FormName = Name;
pi_inoutno.Condition = "pi_pdastatus<>'已出库' and pi_class='出货单'";
pi_inoutno.DbChange += Pi_inoutno_DbChange;
dh = new DataHelper();
asc.controllInitializeSize(this);
}
private void Pi_inoutno_DbChange(object sender, EventArgs e)
{
dbfind = pi_inoutno.ReturnData;
BaseUtil.SetFormValue(this.Controls, dbfind);
LoadFormData();
LoadGridData();
}
///
/// j加载Form数据
///
private void LoadFormData()
{
sql.Clear();
sql.Append("select pi_id,pi_title,pi_inoutno,pi_type from prodinout where pi_inoutno = '" + pi_inoutno.Text + "'");
dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
if (dt.Rows.Count > 0)
{
BaseUtil.SetFormValue(this.Controls, dt);
}
sql.Clear();
sql.Append("select nvl((select sum(pd_outqty) from prodiodetail where pd_piid=''),0)outqty,nvl((select count(1)cn from prodiomac where pim_inoutno=pd_inoutno),0) getqty , ");
sql.Append("nvl((select sum(CASE WHEN pim_type='BOX' then 1 else nvl((select pa_packageqty from package where pa_outboxcode=pim_outboxcode),0)end) from prodiomac ");
sql.Append("where pim_inoutno='" + pi_inoutno.Text + "' and NVL(PIM_OUTBOXCODE,' ')<>' ' AND pim_type in('BOX','PALLET')),0) boxqty from prodiodetail where pd_piid='" + pi_id.Text + "' ");
dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
if (dt.Rows.Count > 0)
{
BaseUtil.SetFormValue(this.Controls, dt);
ungetqty.Text = (int.Parse(dt.Rows[0]["outqty"].ToString()) - int.Parse(dt.Rows[0]["getqty"].ToString())).ToString();
}
}
///
/// 加载Grid数据
///
private void LoadGridData()
{
sql.Clear();
sql.Append("select pim_outboxcode,pim_mac,pim_prodcode,pr_detail,pr_spec from prodiomac ");
sql.Append("left join product on pr_code=pim_prodcode where pim_inoutno='" + pi_inoutno.Text + "'");
DataTable dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
BaseUtil.FillDgvWithDataTable(InOutDetailDGV, dt);
}
private void Warehouse_FinishedProductOut_SizeChanged(object sender, EventArgs e)
{
asc.controlAutoSize(this);
}
private void NewProdInOut_Click(object sender, EventArgs e)
{
newpi = new Warehouse_NewPiInOut();
newpi.Controls["Confirm"].Click += newpi_clck;
BaseUtil.SetFormCenter(newpi);
newpi.ShowDialog();
}
private void newpi_clck(object sender, EventArgs e)
{
pi_inoutno.Text = newpi.pi_inoutno_text;
LoadFormData();
LoadGridData();
newpi.Close();
}
private void ProdDetail_Click(object sender, EventArgs e)
{
Warehouse_ProdDetail newpd = new Warehouse_ProdDetail();
BaseUtil.SetFormCenter(newpd);
newpd.ShowDialog();
}
private void ConfirmOut_Click(object sender, EventArgs e)
{
}
private void input_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
if (input.Text == "")
{
OperateResult.AppendText("录入信息不能为空\n", Color.Red, input);
return;
}
sql.Clear();
sql.Append("select nvl(pi_pdastatus,'未备货')pi_pdastatus,pi_type from prodinout where pi_inoutno='" + pi_inoutno.Text + "'");
dta = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
if (dta.Rows.Count > 0)
{
if (!cancel.Checked)
{
if (palletBtn.Checked)
{
sql.Clear();
sql.Append("select pa_outboxcode,pa_status,nvl(pa_downstatus,0)pa_downstatus,pa_outno from package where pa_outboxcode='" + input.Text + "' and pa_type=3");
dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
if (dt.Rows.Count > 0)
{
if (!checkinput(dt, "栈板号"))
return;
}
else
{
OperateResult.AppendText("栈板号" + input.Text + "不存在,请重新输入\n", Color.Red, input);
return;
}
checkinsertprodiomac("栈板号");
}
else if (bigboxBtn.Checked)
{
sql.Clear();
sql.Append("select pa_outboxcode,pa_status,nvl(pa_downstatus,0)pa_downstatus,pa_outno, pa_mothercode from package where pa_outboxcode='" + input.Text + "' and pa_type=(1,2)");
dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
if (dt.Rows.Count > 0)
{
if (dt.Rows[0]["pa_mothercode"].ToString() != "")
{
OperateResult.AppendText("箱号" + input.Text + "已经装大箱或者栈板,不允许单独出货\n", Color.Red, input);
return;
}
if (!checkinput(dt, "箱号"))
return;
}
else
{
OperateResult.AppendText("箱号" + input.Text + "不存在,请重新输入\n", Color.Red, input);
return;
}
checkinsertprodiomac("箱号");
//更新箱号对应的出货单号
dh.UpdateByCondition("package", "pa_outno = '" + pi_inoutno.Text + "'", "pa_outboxcode = '" + input.Text + "'");
}
else if (serBtn.Checked) {
if (dh.getFieldDataByCondition("makeserial", "max(ms_id)ms_id", "ms_sncode='" + input.Text + "'").ToString() == "")
{
OperateResult.AppendText("序列号" + input.Text + "不存在,请重新输入\n", Color.Red, input);
return;
}
}
}
}
else
{
OperateResult.AppendText("出货单" + pi_inoutno.Text + "不存在\n", Color.Red, pi_inoutno);
return;
}
}
}
//插入prodiomac表
private void insertprodiomac(string type)
{
string pib_type = "";
if (type == "栈板号")
{
pib_type = "PALLET";
}
else if(type == "箱号")
{
pib_type = "BOX";
}
sql.Clear();
sql.Append("insert into prodiomac(pim_id,pim_inoutno,pim_piid,pim_prodcode,pim_mac,pim_indate,pim_inman,pib_type,pim_outboxcode)");
sql.Append("select prodiomac_seq.nextval,'" + pi_inoutno.Text + "','" + pi_id.Text + "',v_prodcode,v_barcode,sysdate,'" + User.UserCode + "','"+ pib_type + "','" + input.Text + "' from mes_package_view where v_outboxcode='" + input.Text + "'");
dh.ExecuteSql(sql.GetString(), "insert");
}
private void checkinsertprodiomac(string type)
{
sql.Clear();
sql.Append("select wm_concat(v_barcode)data,count(1)cn from mes_package_view left join makeserial on ms_sncode=v_barcode and ms_makecode=v_makecode where v_outboxcode='" + input.Text + "' and nvl(ms_status,0)<>2 and rownum<20");
dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
if (dt.Rows[0]["data"].ToString() != "" && int.Parse(dt.Rows[0]["cn"].ToString()) > 0)
{
OperateResult.AppendText(type + input.Text + "内序列号未完工,序列号:" + dt.Rows[0]["data"].ToString() + "\n", Color.Red, input);
return;
}
if (dta.Rows[0]["pi_type"].ToString() == "订单出库")
{
sql.Clear();
sql.Append("select ms_prodcode,ms_salecode,cn from (select ms_prodcode,ms_salecode,count(1)cn from mes_package_view left join makeserial on ms_sncode=v_barcode and ms_makecode=v_makecode where v_outboxcode='" + input.Text + "' ");
sql.Append(" group by ms_prodcode,ms_salecode) left join (select pd_ordercode,pd_prodcode,outqty-nvl((select count(1) from prodiomac where pim_inoutno='" + pi_inoutno.Text + "' and pim_prodcode=pd_prodcode),0)ungetqty");
sql.Append(" from (select pd_ordercode,pd_prodcode,sum(pd_outqty)outqty from prodiodetail where pd_piid='" + pi_inoutno.Text + "' group by pd_prodcode,pd_ordercode)) on ms_prodcode=pd_prodcode and ms_salecode=pd_ordercode where nvl(pd_prodcode,' ')<>' ' or nvl(pd_ordercode,' ')<>' ' or cn>nvl(ungetqty,0)");
dt = (DataTable)dh.ExecuteSql(sql.GetString(), "select");
if (int.Parse(dt.Rows[0]["cn"].ToString()) > 0)
{
OperateResult.AppendText(type + input.Text + "内的序列号中的物料+订单不在出货单中或者栈板内中序列号的数量大于剩余出货数,栈板内物料号:" + dt.Rows[0]["ms_prodcode"].ToString() + ",订单号:" + dt.Rows[0]["ms_salecode"].ToString() + ",数量:" + dt.Rows[0]["cn"].ToString() + "\n", Color.Red, input);
return;
}
else
{
//插入prodiomac表
insertprodiomac(type);
}
}
else if (dta.Rows[0]["pi_type"].ToString() == "自由出货")
{
insertprodiomac(type);
}
}
private Boolean checkinput(DataTable dt, string type)
{
if (dt.Rows[0]["pa_outno"].ToString() != "")
{
OperateResult.AppendText(type + input.Text + "已经被出货单:" + dt.Rows[0]["pa_outno"].ToString() + "采集,请重新输入\n", Color.Red, input);
return false;
}
if (dt.Rows[0]["pa_status"].ToString() == "0")
{
OperateResult.AppendText(type + input.Text + "未封装,请重新输入\n", Color.Red, input);
return false;
}
else if (dt.Rows[0]["pa_status"].ToString() == "2")
{
OperateResult.AppendText(type + input.Text + "已出库,请重新输入\n", Color.Red, input);
return false;
}
if (dt.Rows[0]["pa_downstatus"].ToString() != "0")
{
OperateResult.AppendText(type + input.Text + "处于下地状态,若需出货,请先取消下地\n", Color.Red, input);
return false;
}
return true;
}
}
}