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 WMS.Model.SC;
using WMS.Frm.Base;
using WMS.Common;
using WMS.Ctrl;
using WMS.Model.Base;
using WMS.Model.SystemManage;
using WMS.Business.SystemManage;
using WMS.Business;
using WMS.Business.SC;
using WMS.Business.Stock;
using WMS.Model.Stock;
//using WMS.FrmStock;
namespace WMS.FrmSC
{
public partial class FrmPlan : FormBase
{
///
/// 业务类型MODEL
///
ProcessPlanModel processPlanModel = new ProcessPlanModel();
///
/// 业务类型集合
///
List planList = new List();
///
/// 对应关系Model
///
PlanGoodsModel infomodel = new PlanGoodsModel();
///
/// 对应关系集合
///
List infoList = new List();
List lstGoodMaterials = new List();
///
/// 业务类型
///
int workflag = 3;//0 增加 1 修改 2 删除 ;
public FrmPlan()
{
InitializeComponent();
}
private void FrmPlan_Load(object sender, EventArgs e)
{
DicGoods.selSql = "select g.*,gt.GOODS_TYPE_ID GOODS_TYPE,gt.GOODS_TYPE_NAME GOODS_TYPENAME from t_base_goods g left join T_BASE_GOODS_TYPE gt on gt.GOODS_TYPE_ID=g.GOODS_TYPE_ID where g.sc_flag = '1'";//组合商品
LEPStoID.LoadData();//计划页面仓库
LEPStoSel.LoadData();//查询页面 仓库选择
LEPTeam.LoadData();//班组
BindTeamData();
PageWork.PageEnabled = false;
BSPlanTab.DataSource = new ProcessPlanModel() { DATESTAR = DateTime.Now.AddMonths(-1), DATEEND = DateTime.Now };
Search();
try
{
if (frmButtonItem.ContainsKey("Save")) { frmButtonItem["Save"].Enabled = false; }
if (frmButtonItem.ContainsKey("Clear")) { frmButtonItem["Clear"].Enabled = false; }
if (frmButtonItem.ContainsKey("Confirm")) { frmButtonItem["Confirm"].Enabled = false; }
if (frmButtonItem.ContainsKey("Refresh")) { frmButtonItem["Refresh"].Enabled = true; }
if (frmButtonItem.ContainsKey("Add")) { frmButtonItem["Add"].Enabled = true; }
if (frmButtonItem.ContainsKey("Edit")) { frmButtonItem["Edit"].Enabled = true; }
if (frmButtonItem.ContainsKey("Del")) { frmButtonItem["Del"].Enabled = true; }
if (frmButtonItem.ContainsKey("Search")) { frmButtonItem["Search"].Enabled = true; }
}
catch (Exception ex)
{
}
}
private void BindTeamData()
{
try
{
List list = IBussFactory.Instance().GetList(new TeamModel());
repositoryItemLookUpEditTeam.DataSource = list;
repositoryItemLookUpEditTeam.DisplayMember = "TEAM_NAME";
repositoryItemLookUpEditTeam.ValueMember = "TEAM_ID";
LEPTeam.Properties.DataSource = list;
LEPTeam.Properties.DisplayMember = "TEAM_NAME";
LEPTeam.Properties.ValueMember = "TEAM_ID";
}
catch (Exception ex)
{
SystemCommon.ShowInfoMessageBox("加载班组失败:BindTeamData" + ex.Message);
}
}
private void bindPlan(ProcessPlanModel model)
{
try
{
planList = IBussFactory.Instance().GetScPlanList(model);
GCPlan.DataSource = planList;
GVPlan.RefreshData();
if (planList.Count > 0)
{
processPlanModel = planList[0];
bindPlanGoods(new ScProcessModel() { TASK_ID = processPlanModel.PLAN_ID });
}
}
catch (Exception ex)
{
SystemCommon.ShowInfoMessageBox("出错了bindPlan:" + ex.Message);
}
}
private void bindPlanGoods(PlanGoodsModel model)
{
try
{
List list = IBussFactory.Instance().GetPlanGoodsList(model);
GCPlanGoods.DataSource = list;
GVPlanGoods.RefreshData();
}
catch (Exception)
{
SystemCommon.ShowInfoMessageBox("获取数据失败,请检查网络连接!");
}
}
private void bindPlanGoods(ScProcessModel model)
{
try
{
List list = IBussFactory.Instance().GetProcess(model);
GCPlanGoods.DataSource = list;
GVPlanGoods.RefreshData();
}
catch (Exception)
{
SystemCommon.ShowInfoMessageBox("获取数据失败,请检查网络连接!");
}
}
private void GVPlan_Click(object sender, EventArgs e)
{
if (GVPlan.FocusedRowHandle >= 0)
{
processPlanModel = GVPlan.GetFocusedRow() as ProcessPlanModel;
bindPlanGoods(new ScProcessModel() { TASK_ID = processPlanModel.PLAN_ID });
}
}
private void GVPlan_DoubleClick(object sender, EventArgs e)
{
Edit();
//if (GVPlan.FocusedRowHandle < 0)
//{
// return;
//}
//PageWork.PageEnabled = true;
//xtraTabControl1.SelectedTabPage = PageWork;
//processPlanModel = GVPlan.GetFocusedRow() as ProcessPlanModel;
//BSPlan.DataSource = processPlanModel;
//BSPlan.ResetBindings(true);
//txtPlanID.Enabled = false;
//DicPlanMan.TextBoxFlag = processPlanModel.PLAN_USERID;
//DicPlanMan.TextBoxValue = processPlanModel.PLAN_USERNAME;
}
#region 以下是继承的按钮事件
///
/// 新增按钮
///
public override void Add()
{
try
{
if (frmButtonItem.ContainsKey("Save")) { frmButtonItem["Save"].Enabled = true; }
if (frmButtonItem.ContainsKey("Clear")) { frmButtonItem["Clear"].Enabled = true; }
if (frmButtonItem.ContainsKey("Confirm")) { frmButtonItem["Confirm"].Enabled = true; }
if (frmButtonItem.ContainsKey("Refresh")) { frmButtonItem["Refresh"].Enabled = false; }
if (frmButtonItem.ContainsKey("Add")) { frmButtonItem["Add"].Enabled = false; }
if (frmButtonItem.ContainsKey("Edit")) { frmButtonItem["Edit"].Enabled = false; }
if (frmButtonItem.ContainsKey("Del")) { frmButtonItem["Del"].Enabled = false; }
if (frmButtonItem.ContainsKey("Search")) { frmButtonItem["Search"].Enabled = false; }
}
catch (Exception ex)
{
}
PageWork.PageEnabled = true;
xtraTabControl1.SelectedTabPage = PageWork;
workflag = 0;
processPlanModel = new ProcessPlanModel()
{
PLAN_CREATETIME = DateTime.Now,
PLAN_STARTDATE = DateTime.Now.AddDays(1),
PLAN_USERID = userData.USER_ID,
STORAGE_ID = userData.STORAGE_ID,
PLAN_ENDDATE = DateTime.Now.AddDays(8),
};
BSPlan.DataSource = processPlanModel;
BSPlan.ResetBindings(true);
DicPlanMan.TextBoxFlag = userData.USER_ID;
DicPlanMan.TextBoxValue = userData.NAME;
lstGoodMaterials = new List();
}
///
/// 保存按钮
///
public override void Save()
{
FrmOperator(workflag);
}
///
/// 作废按钮
///
public override void Del()
{
workflag = 2;
if (GVPlan.FocusedRowHandle > -1)
{
if (SystemCommon.ShowMessageBoxResult("确定作废次计划:" + GVPlan.GetFocusedRowCellValue("PLAN_NAME").ToString()) == System.Windows.Forms.DialogResult.OK)
{
ObsoletePlan();
}
}
}
///
/// 修改按钮
///
public override void Edit()
{
if (GVPlan.FocusedRowHandle < 0)
{
SystemCommon.ShowInfoMessageBox("请先选择要编辑的数据");
return;
}
try
{
if (frmButtonItem.ContainsKey("Save")) { frmButtonItem["Save"].Enabled = true; }
if (frmButtonItem.ContainsKey("Clear")) { frmButtonItem["Clear"].Enabled = true; }
if (frmButtonItem.ContainsKey("Confirm")) { frmButtonItem["Confirm"].Enabled = true; }
if (frmButtonItem.ContainsKey("Refresh")) { frmButtonItem["Refresh"].Enabled = false; }
if (frmButtonItem.ContainsKey("Add")) { frmButtonItem["Add"].Enabled = false; }
if (frmButtonItem.ContainsKey("Edit")) { frmButtonItem["Edit"].Enabled = false; }
if (frmButtonItem.ContainsKey("Del")) { frmButtonItem["Del"].Enabled = false; }
if (frmButtonItem.ContainsKey("Search")) { frmButtonItem["Search"].Enabled = false; }
}
catch (Exception)
{
}
workflag = 1;
PageWork.PageEnabled = true;
PageSel.PageEnabled = false;
xtraTabControl1.SelectedTabPage = PageWork;
processPlanModel = GVPlan.GetFocusedRow() as ProcessPlanModel;
BSPlan.DataSource = processPlanModel;
BSPlan.ResetBindings(true);
DicPlanMan.TextBoxFlag = processPlanModel.PLAN_USERID;
DicPlanMan.TextBoxValue = processPlanModel.PLAN_USERNAME;
PlanGoodsModel planGoodsModel = new PlanGoodsModel()
{
PLAN_ID = processPlanModel.PLAN_ID,
};
infoList = IBussFactory.Instance().GetPlanGoodsList(planGoodsModel);
GCPlanGoodsWork.DataSource = infoList;
GCPlanGoodsWork.RefreshDataSource();
lstGoodMaterials = new List();
}
///
/// 刷新按钮
///
public override void Refresh()
{
xtraTabControl1.SelectedTabPage = PageSel;
PageWork.PageEnabled = false;
PageSel.PageEnabled = true;
Search();
}
///
/// 商品选择
///
public void Confirm()
{
if (workflag == 3)
{
return;
}
DicGoods.t_dictonary_ButtonClick(null, null);
}
///
/// 明细删除
///
public override void Clear()
{
if (workflag == 3)
{
return;
}
if (GVPlanGoodsWork.FocusedRowHandle >= 0)
{
PlanGoodsModel model = GVPlanGoodsWork.GetFocusedRow() as PlanGoodsModel;
infoList.Remove(model);
GCPlanGoodsWork.DataSource = infoList;
GVPlanGoodsWork.RefreshData();
lstGoodMaterials.RemoveAll(r => r.GOODS_ID == model.GOODS_ID);
}
}
///
/// 查询按钮
///
public override void Search()
{
if (xtraTabControl1.SelectedTabPage == PageSel)
{
PageSel.PageEnabled = true;
PageWork.PageEnabled = false;
BSPlanTab.EndEdit();
processPlanModel = BSPlanTab.DataSource as ProcessPlanModel;
bindPlan(processPlanModel);
}
else
{
xtraTabControl1.SelectedTabPage = PageSel;
PageSel.PageEnabled = true;
PageWork.PageEnabled = false;
}
}
#endregion
#region 操作(增、改、删)
public bool CheckData(ProcessPlanModel processPlanModel)
{
if (string.IsNullOrEmpty(processPlanModel.PLAN_NAME))
{
SystemCommon.ShowErrorMessageBox("请填写计划名称!");
return false;
}
if (string.IsNullOrEmpty(processPlanModel.STORAGE_ID))
{
SystemCommon.ShowErrorMessageBox("请选择计划仓库!");
return false;
}
if (infoList == null || infoList.Count == 0)
{
SystemCommon.ShowErrorMessageBox("请完善计划生产的成品!");
return false;
}
foreach (var item in infoList)
{
if (item.GOODS_NUM <= 0)
{
SystemCommon.ShowErrorMessageBox(string.Format("【{0}】产品数量必须大于0", item.GOODS_NAME));
GVPlanGoodsWork.Focus();
return false;
}
}
return true;
}
public void AddPlan(ProcessPlanModel processPlanModel)
{
if (CheckData(processPlanModel))
{
string errText = string.Empty;
processPlanModel.STATUS = "0";
foreach (PlanGoodsModel pmodel in infoList)
{
if (pmodel.GOODS_NUM == 0)
{
SystemCommon.ShowInfoMessageBox("产品数量不能为0!");
return;
}
}
bool r = CheckStock();//库存检查
if (r)
{
processPlanModel.PLAN_ID = "SC" + DateCreateTime.DateTime.ToString("yyyyMMdd") + IBussFactory.Instance().GetSerialNum();
foreach (PlanGoodsModel pmodel in infoList)
{
pmodel.PLAN_ID = processPlanModel.PLAN_ID;
if (LEPTeam.EditValue != null)
{
pmodel.TEAM_ID = LEPTeam.EditValue.ToString();
}
}
errText = IBussFactory.Instance().AddList(processPlanModel, infoList);
if (string.IsNullOrEmpty(errText))
{
SystemCommon.ShowInfoMessageBox("操作成功!");
ChangeState();
}
else
{
SystemCommon.ShowInfoMessageBox("操作失败:" + errText);
}
}
else
{
return;
}
}
}
public void UpdatePlan(ProcessPlanModel processPlanModel)
{
if (CheckData(processPlanModel))
{
bool r = CheckStock();//检查库存
//r = true;
if (r)
{
string errText = IBussFactory.Instance().UpdateAndList(processPlanModel, infoList);
if (string.IsNullOrEmpty(errText))
{
SystemCommon.ShowInfoMessageBox("操作成功!");
ChangeState();
}
else
{
SystemCommon.ShowInfoMessageBox("操作失败:" + errText);
}
}
else
{
return;
}
}
}
public void ObsoletePlan()
{
string planID = GVPlan.GetFocusedRowCellValue("PLAN_ID").ToString();
string errText = IBussFactory.Instance().Obsolete(planID,"3");
if (string.IsNullOrEmpty(errText))
{
SystemCommon.ShowInfoMessageBox("操作成功!");
ChangeState();
Search();
}
else
{
SystemCommon.ShowInfoMessageBox("操作失败:" + errText);
}
}
public void ChangeState()
{
BSPlanGoods.Clear();
if (frmButtonItem.ContainsKey("Save")) { frmButtonItem["Save"].Enabled = false; }
if (frmButtonItem.ContainsKey("Clear")) { frmButtonItem["Clear"].Enabled = false; }
if (frmButtonItem.ContainsKey("Confirm")) { frmButtonItem["Confirm"].Enabled = false; }
if (frmButtonItem.ContainsKey("Refresh")) { frmButtonItem["Refresh"].Enabled = true; }
if (frmButtonItem.ContainsKey("Add")) { frmButtonItem["Add"].Enabled = true; }
if (frmButtonItem.ContainsKey("Edit")) { frmButtonItem["Edit"].Enabled = true; }
if (frmButtonItem.ContainsKey("Del")) { frmButtonItem["Del"].Enabled = true; }
if (frmButtonItem.ContainsKey("Search")) { frmButtonItem["Search"].Enabled = true; }
workflag = 3;
xtraTabControl1.SelectedTabPage = PageSel;
PageWork.PageEnabled = false;
}
///
/// 操作(增、改、删)
///
/// 0 新增 1修改 2删除 3停用 4启用/param>
private void FrmOperator(int flag)
{
BSPlan.EndEdit();
string errtxt = string.Empty;
processPlanModel = BSPlan.DataSource as ProcessPlanModel;
try
{
switch (flag)
{
case 0:
AddPlan(processPlanModel);
break;
case 1:
UpdatePlan(processPlanModel);
break;
case 3:
ObsoletePlan();
break;
default:
break;
}
Search();
}
catch (Exception ex)
{
SystemCommon.ShowInfoMessageBox("操作失败:" + ex.Message);
}
}
#endregion
#region 检查库存
private bool CheckStock()
{
string errtxt = string.Empty;
;
List miList = IBussFactory.Instance().GetMIStockList(new Model.Stock.MIStockModel() { STORAGE_ID = LEPStoID.EditValue.ToString() });
if (miList.Count == 0)
{
return false;//没有库存
}
List lost = new List();
foreach (GoodsMaterialModel goodsMaterialModel in lstGoodMaterials)
{
Model.Stock.MIStockModel mimodel = miList.Find(r => r.GOODS_ID == goodsMaterialModel.MATERIAL_ID);
if (mimodel == null)
{
return false;//没有库存
}
decimal stonum = isnum(mimodel.SHELVES_NUM);//库存剩余量
decimal neednum = infoList.Find(r => r.GOODS_ID == goodsMaterialModel.GOODS_ID).GOODS_NUM * goodsMaterialModel.STAND_NUM;//需要库存量
mimodel.SHELVES_NUM = stonum - neednum;
if (stonum - neednum < 0)//库存不足
{
if (lost.Count(r => r.GOODS_ID == goodsMaterialModel.MATERIAL_ID) > 0)
{
lost.Find(r => r.GOODS_ID == goodsMaterialModel.MATERIAL_ID).GOODS_NUM += stonum - neednum;//相同物料
}
else
{
lost.Add(new PlanGoodsModel() { GOODS_ID = goodsMaterialModel.MATERIAL_ID, GOODS_NUM = stonum - neednum });
}
}
}
if (lost.Count > 0)
{
string mess = "";
List lstAreaModel = new List();
foreach (PlanGoodsModel model in lost)
{
AreaRepModel areaRepModel = new AreaRepModel()
{
AREA_REP_ID = "",
CREATE_METHOD = "",
CREATE_PERSON = userData.USER_ID,
CREATE_PERSON_NAME = userData.NAME,
CREATE_TIME = DateTime.Now,
STORAGE_ID = "CK246",
GOODS_ID = model.GOODS_ID,
GOODS_NAME = model.GOODS_NAME,
DOCUMENT_PERSON = userData.NAME,
DOCUMENT_PERSON_ID = userData.USER_ID,
DOCUMENT_TIME = DateTime.Now,
REASON = "制定生产计划,因物料库存不足补做调拨单",
OUT_AREA_ID = "",
IN_AREA_ID = "",
REMARK = "制定生产计划,因物料库存不足补做调拨单",
TOTAL_PLAN_NUM = model.GOODS_NUM,
STATE = "未审核"
};
lstAreaModel.Add(areaRepModel);
mess += ("原材料:" + model.GOODS_NAME + "不足,暂缺数量:" + Math.Abs(model.GOODS_NUM) + Environment.NewLine);
}
mess += "是否补做调拨单?";
if (SystemCommon.ShowMessageBoxResult(mess) == System.Windows.Forms.DialogResult.OK)
{
InsertAreaRep(lstAreaModel);//此处设计有问题
////暂时注释 2018 - 12 - 10 16:19:53
//FormBase formBase = OpenFrmTable("WMS.FrmStock", "FrmStorageREP");//创建窗体
//if (formBase != null)
//{
// FrmStorageREP frmStorage = formBase as FrmStorageREP;
// if (!OpenTabAddFrm("1010", "FrmStorageREP", "仓库调拨"))
// {
// frmStorage.FrmStorageREP_Load(null, null);//如果已经被打开,执行一下窗体加载方法
// }
//}
}
return false;
}
else
{
return true;
}
}
#endregion
#region 插入库区间调拨单
///
/// 插入库区间调拨单
///
public void InsertAreaRep(List lstAreaModel)
{
string errtext = "";
try
{
errtext= IBussFactory.Instance().InsertAreaRep(lstAreaModel);
if (!string.IsNullOrEmpty(errtext))
{
SystemCommon.ShowInfoMessageBox("操作失败!" + errtext);
}
else
{
SystemCommon.ShowInfoMessageBox("操作成功!");
}
}
catch (Exception ex)
{
SystemCommon.ShowInfoMessageBox("插入库区间调拨单出错了" + ex.Message);
}
}
#endregion
#region 选择要加工的组合商品
private void DicGoods_Button_Click(object sender, EventArgs e)
{
if (DicGoods.SelectTable.Rows.Count > 0)
{
string err = string.Empty;
foreach (DataRow row in DicGoods.SelectTable.Rows)
{
if (infoList.FindAll(r => r.GOODS_ID == isnull(row["Goods_ID"])).Count > 0)//去掉重复的成品
{
continue;
}
List list = IBussFactory.Instance().GetGoodsMaterialList((new GoodsMaterialModel() { GOODS_ID = row["Goods_ID"].ToString() }));
if (list != null && list.Count > 0)
{
lstGoodMaterials.AddRange(list);//获得物料
}
//不区分大小写
infoList.Add(new PlanGoodsModel() { GOODS_ID = isnull(row["Goods_ID"]), GOODS_NAME = isnull(row["Goods_Name"]), GOODS_TYPE = isnull(row["Goods_TYPE"]), GOODS_TYPENAME = isnull(row["Goods_TYPENAME"]) });
}
}
GCPlanGoodsWork.DataSource = infoList;
GVPlanGoodsWork.RefreshData();
}
#endregion
private void txtPlanID_Leave(object sender, EventArgs e)
{
//if (!string.IsNullOrEmpty(txtPlanID.Text))
//{
// try
// {
// string strPlan = Newtonsoft.Json.JsonConvert.SerializeObject(new ProcessPlanModel() { PLAN_ID = txtPlanID.Text });
// string strPlanList = WebLockConfig.Instance.WebProcessPlan.execProcessPlanGetList(strPlan);
// List list = Newtonsoft.Json.JsonConvert.DeserializeObject>(strPlanList);
// if (list.Count > 0)
// {
// SystemCommon.ShowErrorMessageBox("该计划编号已存在!");
// txtPlanID.Text = "";
// txtPlanID.Focus();
// txtPlanID.Select();
// }
// }
// catch (Exception)
// {
// }
//}
}
private decimal isnum(object obj)
{
if (obj == null || obj == DBNull.Value)
{
return 0;
}
else
{
return Convert.ToDecimal(obj);
}
}
private void GVPlan_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
{
if (e.Column.FieldName == "STATUS")
{
if (e.Value != null && e.Value != DBNull.Value)
{
switch (e.Value.ToString().Trim())
{
case "0":
e.DisplayText = "未领取";
break;
case "1":
e.DisplayText = "已领取";
break;
case "2":
e.DisplayText = "已完成";
break;
case "3":
e.DisplayText = "作废";
break;
}
}
}
}
private void GVPlanGoods_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
{
if (e.Column.FieldName == "STATUS")
{
if (e.Value != null && e.Value != DBNull.Value)
{
switch (e.Value.ToString().Trim())
{
case "0":
e.DisplayText = "未完成";
break;
case "1":
e.DisplayText = "已完成";
break;
}
}
}
}
private string isnull(object obj)
{
if (obj != null && obj != DBNull.Value)
{
return obj.ToString();
}
else
return "";
}
private void repositoryItemHyperLinkEdit1_Click(object sender, EventArgs e)
{
}
}
}