ldj/winform/在库/StockCompareForm.cs

749 lines
26 KiB
C#
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraBars;
using DevExpress.XtraGrid.Views.Base;
//using DeiNiu.wms.Logical;
using DeiNiu.wms.Data;
using DevExpress.XtraGrid.Columns;
using System.Threading;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraEditors.DXErrorProvider;
using DeiNiu.wms.Data.Model;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DeiNiu.Utils;
using DeiNiu.wms.win.ServiceReferenceGoods;
namespace DeiNiu.wms.win
{
public partial class StockCompareForm : BasicRibbonForm
{
// lWmsGoods lgt = new lWmsGoods();
private string fieldName = WmsLocation.fields.locationId.ToString();
private string fieldGoodType = WmsLocation.fields.whGoodsType.ToString();
private string lastQuery = "";
private DataTable dtDiffs;
private DataTable dtDetail;
private int selectedRowIndex = -1;
private string selectedGoodsId;
private string selectedBatch;
private int selectedSkuId;
public StockCompareForm()
{
InitializeComponent();
initialControls();
// loadData();
}
#region initialControls
private void initialControls()
{
initialComboBoxes();
initialPagerControls();
initialDataGrid();
initialQueryInput();
setValidationRule();
}
private void initialComboBoxes()
{
initialComboBoxs(comboType, this.stkdiff,false);
}
private void setValidationRule()
{
// dxValidationProvider.SetValidationRule(comWarehouse, ValidationRules.notEmptyValidationRule);
//txtGoodType.Properties.MaxLength = 40;
//txtGoodDesc.Properties.MaxLength = 250;
//textEdit1.Properties.MaxLength = txtGoodType.Properties.MaxLength;
}
private void initialQueryInput()
{
}
private void initialDataGridColumns(GridView gridview)
{
setupGridView(gridview, true);
// gridviewGoodsType.PopulateColumns();
gridview.Columns.Clear();
// gridviewGoodsType.Columns.Remove(gridviewGoodsType.Columns["DealerPrice"]);
GridColumn myCol0 = new GridColumn() { Caption = "ID", Visible = true, FieldName = "id" };
myCol0.Visible = false;
GridColumn myCol1 = new GridColumn() { Caption = "商品编码", Visible = true, FieldName = WmsGoods.fields.goodsId.ToString()};
GridColumn myCol2 = new GridColumn() { Caption = "商品名称", Visible = true, FieldName = WmsGoods.exfields.goodsName.ToString() };
GridColumn myCol3 = new GridColumn() { Caption = "厂家", Visible = true, FieldName = WmsGoods.exfields.manufacturer.ToString() };
/*GridColumn myCol4 = new GridColumn() { Caption = "规格", Visible = true, FieldName = WmsGoods.exfields.spec.ToString() };
GridColumn myCol5 = new GridColumn() { Caption = "单位", Visible = true, FieldName = WmsGoods.exfields.unit.ToString() };
GridColumn myCol6 = new GridColumn() { Caption = "大包装数量", Visible = true, FieldName = WmsGoods.exfields.bigCount.ToString()};
GridColumn myCol7 = new GridColumn() { Caption = "剂型", Visible = true, FieldName = WmsGoods.exfields.type.ToString() };
GridColumn myCol8 = new GridColumn() { Caption = "商品类型", Visible = true, FieldName = WmsGoods.exfields.goodsTypeName.ToString() };
GridColumn myCol9 = new GridColumn() { Caption = "大零", Visible = true, FieldName = WmsGoods.fields.bulkMax.ToString() };
GridColumn myCol10 = new GridColumn() { Caption = "小整", Visible = true, FieldName = WmsGoods.fields.batchMax1.ToString()};
GridColumn myCol11 = new GridColumn() { Caption = "大整", Visible = true, FieldName = WmsGoods.fields.batchMax2.ToString() };*/
GridColumn myCol12 = new GridColumn() { Caption = "批号", Visible = true, FieldName = "batch" };
// GridColumn myCol13 = new GridColumn() { Caption = "拼音简码", Visible = true, FieldName ="pinYin" };
GridColumn myCol14 = new GridColumn() { Caption = "货位", Visible = true, FieldName = "locationId" };
GridColumn myCol15 = new GridColumn() { Caption = "WMS数量", Visible = true, FieldName = "avcount" };
GridColumn myCol16 = new GridColumn() { Caption = "ERP数量", Visible = true, FieldName = "erpCount" };
GridColumn myCol17 = new GridColumn() { Caption = "WMS件数", Visible = true, FieldName = "boxcnt" };
GridColumn myCol18 = new GridColumn() { Caption = "ERP件数", Visible = true, FieldName = "erpBoxcnt" };
GridColumn myCol191 = new GridColumn() { Caption = "差异类别", Visible = true, FieldName = "flag" };
if (gridview == gridView1 )
{
gridview.Columns.Add(myCol2);
gridview.Columns.Add(myCol12);
gridview.Columns.Add(myCol191);
// gridview.Columns.Add(myCol14);
gridview.Columns.Add(myCol15);
gridview.Columns.Add(myCol17);
gridview.Columns.Add(myCol16);
gridview.Columns.Add(myCol18);
}
else if (gridview == gridView2 )
{
GridColumn myCol20 = new GridColumn() { Caption = "数量", Visible = true, FieldName = "count" };
GridColumn myCol8 = new GridColumn() { Caption = "商品类型", Visible = true, FieldName = WmsGoods.exfields.goodsTypeName.ToString() };
GridColumn myCol4 = new GridColumn() { Caption = "规格", Visible = true, FieldName = WmsGoods.exfields.spec.ToString() };
GridColumn myCol6 = new GridColumn() { Caption = "大包装数量", Visible = true, FieldName = WmsGoods.exfields.bigCount.ToString() };
gridview.Columns.Add(myCol14);
gridview.Columns.Add(myCol20);
gridview.Columns.Add(myCol2);
gridview.Columns.Add(myCol12);
gridview.Columns.Add(myCol0);
gridview.Columns.Add(myCol1);
gridview.Columns.Add(myCol4);
gridview.Columns.Add(myCol8);
gridview.Columns.Add(myCol6);
}
gridview.Columns.Add(myCol3);
//to show bottom scroll bar
gridview.OptionsView.ColumnAutoWidth = false;
gridview.BestFitColumns();
// gridview.Focus();
//自动列宽
//gridView1.OptionsView.ColumnAutoWidth = false;
//this.gridView1.BestFitColumns();
//this.gridView1.Columns[2].MinWidth = 500;
//this.gridView1.Columns[1].BestFit();
//for (int I = 0; I < gridView1.Columns.Count; I++)
//{
// this.gridView1.Columns[I].BestFit()
//}
}
#endregion
/// <summary>
/// loading data
/// </summary>
private int loadData()
{
//this.gridviewGoodsType.DataSource = lgt.GetAllActiveData().Tables[0].DefaultView;
showWaitForm();
try
{
// this.splashScreenManager1.ShowWaitForm();
string query = (this.comboType.SelectedIndex== 0 ? "" : string.Format("{0} =#'{1}';", "flag", comboType.SelectedItem.ToString()))
+ (this.txtGoodId.Text.Trim().Length == 0 ? "" : string.Format("{0} =#'{1}';", WmsGoods.fields.goodsId.ToString(), filtRiskChar( txtGoodId.Text.Trim())))
+ (this.txtGoodName.Text.Trim().Length == 0 ? "" : string.Format("{0} like # '%{1}%';", WmsGoods.exfields.goodsName.ToString(), filtRiskChar( txtGoodName.Text.Trim())))
+ (this.txtpinyin.Text.Trim().Length == 0 ? "" : string.Format("{0} like # '%{1}%';", WmsGoods.exfields.pinYin.ToString(), filtRiskChar(txtpinyin.Text.Trim())))
+ (this.textBatch.Text.Trim().Length == 0 ? "" : string.Format("{0} like # '%{1}%';", "batch", filtRiskChar(textBatch.Text.Trim())));
this.pager1.PageCurrent = lastQuery.Equals(query) ? this.pager1.PageCurrent : 1; //根据查询条件的变化给pager赋值
int start = (pager1.PageSize * (pager1.PageCurrent - 1) + 1);
int end = (pager1.PageSize * pager1.PageCurrent);
lastQuery = query;
DataSet ds = stkLocClient.getStockDiff(query, start, end);
closeClient();
dtDiffs = ds.Tables[0];
int cnt = Convert.ToInt32(ds.Tables[1].Rows[0][0].ToString());
//dt = lgt.Query(query, start, end); //string.IsNullOrEmpty(query) ? lgt.GetGoodType.getAllData(start, end) : lgt.g;
// dtDiffs.PrimaryKey = new DataColumn[] { dtDiffs.Columns["goodsId"], dtDiffs.Columns["batch"] };
this.gridControl1.DataSource = dtDiffs.DefaultView;
initialDataGridColumns(this.gridView1);
//update selected row index to the last updated one.
gridControl2.DataSource = null;
clearInputs();
if (!string.IsNullOrEmpty(selectedGoodsId))
{
DataRow[] drs = dtDiffs.Select(string.Format("goodsId='{0}' and skuId ='{1}'", selectedGoodsId, selectedSkuId));
DataRow dr = null;
if (drs.Length > 0)
{
dr = drs[0];
}
if (dr != null)
{
selectedRowIndex = dtDiffs.Rows.IndexOf(dr);
if (selectedRowIndex > 0 && dtDiffs.Rows.Count > selectedRowIndex)
{
// gridView1.SelectRow(selectedRowIndex);
gridView1.FocusedRowHandle = selectedRowIndex;
// gridView1.MakeRowVisible(selectedRowIndex);
setCurrentRequestDetail();
}
}
else
{
gridView1.FocusedRowHandle = 0;
gridView1.SelectRow(0);
setCurrentRequestDetail();
}
//gridView1.FocusedRowHandle = selectedRowIndex;
}
else
{
gridView1.FocusedRowHandle = 0;
gridView1.SelectRow(0);
setCurrentRequestDetail();
}
closeWaitForm();
return cnt;// lgt.getRowCount(query);
// return lgt.GetGoodType.QueryCount();
}
catch (Exception er)
{
showErrorMsg(er,er.Message);
}
return 0;
}
private void bindDetail()
{
}
private void setDataBack()
{
}
private bool validData()
{
bool isvalid = dxValidationProvider1.Validate();
// MessageBox.Show("goodtype is " + txtGoodType.Text +", is valid ? " + isvalid);
return isvalid;
//String gdtype = txtGoodType.Text.Trim();
//if (gdtype.Length == 0)
//{
// dxValidationProvider.Validate();
// return false;
//}
//return true;
}
/// <summary>
/// 分页控件产生的事件
/// </summary>
private int pager_EventPaging(DeiNiu.Controls.pager.EventPagingArg e)
{
selectedRowIndex = 0; //reset currentRowIndex
return loadData();
}
private void initialPagerControls()
{
pager1.MaximumSize = new Size(0, 20);
pager1.EventPaging += new DeiNiu.Controls.pager.EventPagingHandler(pager_EventPaging);
#region DataGridView与Pager控件绑定
this.pager1.PageCurrent = 1;//当前页为第一页
pager1.PageSize = Utils.WmsConstants.PAGER_SIZE;//每页行数
// this.pager1.Bind();//绑定
#endregion
}
private void initialDataGrid()
{
gridView1.OptionsSelection.MultiSelect = true;//按shift / control 多选
this.gridView1.OptionsBehavior.AutoPopulateColumns = false;
this.gridView1.FocusRectStyle = DevExpress.XtraGrid.Views.Grid.DrawFocusRectStyle.RowFocus;
this.gridView1.OptionsBehavior.Editable = false;
this.gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;
this.gridView1.FocusedRowObjectChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventHandler(this.gridView1_FocusedRowObjectChanged);
this.gridView1.DataSourceChanged += new System.EventHandler(this.gridView1_DataSourceChanged);
this.gridView2.FocusedRowObjectChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventHandler(this.gridView2_FocusedRowObjectChanged);
this.gridView2.DataSourceChanged += new System.EventHandler(this.gridView2_DataSourceChanged);
//show line number
this.gridView1.IndicatorWidth = 40;
this.gridView1.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(gridView1_CustomDrawRowIndicator);
this.gridView2.IndicatorWidth = 40;
this.gridView2.CustomDrawRowIndicator += new DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventHandler(gridView1_CustomDrawRowIndicator);
}
//显示行的序号
private void gridView1_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
{
if (e.Info.IsRowIndicator && e.RowHandle >= 0)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
}
bool isDataSourceChanged = false;
private void gridView1_DataSourceChanged(object sender, EventArgs e)
{
isDataSourceChanged = true;
if (selectedRowIndex > 0 && dtDiffs.Rows.Count > selectedRowIndex)
{
gridView1.FocusedRowHandle = selectedRowIndex;
gridView1.MakeRowVisible(selectedRowIndex);
}
}
private void gridView1_FocusedRowObjectChanged(object sender, FocusedRowObjectChangedEventArgs e)
{
if (gridView1.FocusedRowHandle < 0 || gridView1.FocusedRowHandle == selectedRowIndex || isDataSourceChanged)
{
isDataSourceChanged = false;
if (gridView1.IsGroupRow(e.RowHandle)) //set first row of group selected
{
selectedRowIndex = gridView1.GetChildRowHandle(e.RowHandle, 0);
setCurrentRequestDetail();
}
return;
}
selectedRowIndex = gridView1.FocusedRowHandle;
// showErrorMsg("selection:"+ selectedRowIndex);
this.gridControl2.DataSource = null;
clearInputs();
setCurrentRequestDetail();
}
private void setCurrentRequestDetail()
{
if (!getCurrentObject() || string.IsNullOrEmpty(selectedGoodsId))
{
return;
}
showWaitForm();
try
{
dtDetail = stkLocClient.getWmsStockDetails(selectedGoodsId,selectedSkuId, "");
closeClient();
selectedDetailInIndex = -1;
clearInputs();
this.gridControl2.DataSource = dtDetail;
initialDataGridColumns(gridView2);
bindLookup();
}
catch (Exception e)
{
showErrorMsg(e,e.Message);
}
closeWaitForm();
}
private bool getCurrentObject()
{
if (selectedRowIndex < 0 || selectedRowIndex >= dtDiffs.Rows.Count)
{
return false;
}
// DataRow currentRow = dt.Rows[selectedRowIndex];
DataRowView dr = (DataRowView)(GetGridViewFilteredAndSortedData(gridView1)[selectedRowIndex]);
selectedGoodsId = dr["goodsId"].ToString(); ;
selectedBatch = dr["batch"].ToString();
selectedSkuId = Convert.ToInt32(( dr["skuId"].ToString()));
this.gridControl2.DataSource = null;
return true;
}
private void gridView2_FocusedRowObjectChanged(object sender, FocusedRowObjectChangedEventArgs e)
{
if (gridView2.FocusedRowHandle < 0 || gridView2.FocusedRowHandle == selectedDetailInIndex ||isDetailDataSourceChanged )
{
isDetailDataSourceChanged = false;
if (gridView2.IsGroupRow(e.RowHandle)) //set first row of group selected
{
selectedDetailInIndex = gridView2.GetChildRowHandle(e.RowHandle, 0);
setCurrentRequestDetail();
}
return;
}
selectedDetailInIndex = gridView2.FocusedRowHandle;
// showErrorMsg("selection:"+ selectedRowIndex);
setCurrentLocationDetail();
}
int selectedDetailInIndex = -1;
private void setCurrentLocationDetail()
{
if (!getCurrentLocation() || string.IsNullOrEmpty(selectedLocation))
{
return;
}
try
{
textOldLocation.Text = selectedLocation;
textLocation.Text = "";
}
catch (Exception e)
{
showErrorMsg(e.Message);
}
}
string selectedLocation = "";
string selectedCount = "";
private bool getCurrentLocation()
{
if (selectedDetailInIndex < 0 || selectedDetailInIndex >= this.dtDetail .Rows.Count)
{
return false;
}
// DataRow currentRow = dt.Rows[selectedRowIndex];
DataRowView dr = (DataRowView)(GetGridViewFilteredAndSortedData(gridView2)[selectedDetailInIndex]);
selectedLocation = dr["locationId"].ToString(); ;
selectedCount = dr["avcount"].ToString();
return true;
}
private void clearInputs()
{
textOldLocation.Text = "";
textLocation.Text = "";
textCount.Text = "0.0";
}
private void gridView1_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
{
}
bool isDetailDataSourceChanged = false;
private void gridView2_DataSourceChanged(object sender, EventArgs e)
{
isDetailDataSourceChanged = false;
if (selectedDetailInIndex > 0 && dtDetail.Rows.Count > selectedDetailInIndex)
{
gridView2.FocusedRowHandle = selectedDetailInIndex;
gridView2.MakeRowVisible(selectedRowIndex);
}
}
private void btnDelete_Click(object sender, EventArgs e)
{
}
protected void query()
{
pager1.Bind();
}
private void queryGoods()
{
showWaitForm();
try
{
query();// loadData();
}
catch (Exception e)
{
showErrorMsg(e,e.Message);
}
finally
{
// WaitFormService.Close();
closeWaitForm();
bbQuery.Enabled = true;
}
}
private void bbQuery_ItemClick_1(object sender, ItemClickEventArgs e)
{
this.bbQuery.Enabled = false;
queryGoods();
}
private void updateObjects(List<WmsGoods> goods)
{
showWaitForm();
//WaitFormService.Show(this);
try
{
// lgt.update(wgoods);
//get updated data
query();
}
catch (Exception e)
{
showErrorMsg(e,e.Message);
}
finally
{
// WaitFormService.Close();
closeWaitForm();
}
}
private void btnUpdateVol_Click(object sender, EventArgs e)
{
DialogResult r = MessageBox.Show(string.Format("确定要更新选中的{0}条商品容积信息吗?", 1 , "确认修改", MessageBoxButtons.YesNo, MessageBoxIcon.Warning));
if (r == DialogResult.Yes)
{
}
}
private void btnUpdateGoodType_Click(object sender, EventArgs e)
{
}
private void btnQuery_Click(object sender, EventArgs e)
{
this.query();
}
private void txtpinyin_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
loadData();
}
}
private void bbQuery_ItemClick(object sender, ItemClickEventArgs e)
{
query();
}
//绑定可用货位
private void bindLookup()
{
if (string.IsNullOrEmpty(selectedGoodsId))
{
return;
}
// Bind the edit value to the ProductID field of the "Order Details" table;
// the edit value matches the value of the ValueMember field.
// textLocation.DataBindings.Add("EditValue", dvMain, "ProductID");
// Prevent columns from being automatically created when a data source is assigned.
textLocation.Properties.View.OptionsBehavior.AutoPopulateColumns = false;
// The data source for the dropdown rows
textLocation.Properties.DataSource = stkLocClient.getStockFreeLocations(selectedGoodsId, 10); closeClient();
// The field for the editor's display text.
textLocation.Properties.DisplayMember = "locationId";
// The field matching the edit value.
textLocation.Properties.ValueMember = "locationId";
// Add two columns in the dropdown:
// A column to display the values of the ProductID field;
textLocation.Properties.View.Columns.Clear();
GridColumn col1 = textLocation.Properties.View.Columns.AddField("locationId");
col1.VisibleIndex = 0;
col1.Caption = "货位";
// A column to display the values of the ProductName field.
GridColumn col2 = textLocation.Properties.View.Columns.AddField("goodsTypeName");
col2.VisibleIndex = 1;
col2.Caption = "商品类别";
GridColumn col3 = textLocation.Properties.View.Columns.AddField("locType");
col3.VisibleIndex = 2;
col3.Caption = "货位类型";
GridColumn col4 = textLocation.Properties.View.Columns.AddField("volume");
col4.VisibleIndex = 3;
col4.Caption = "货位容积";
// Set column widths according to their contents.
textLocation.Properties.View.BestFitColumns();
// Specify the total dropdown width.
textLocation.Properties.PopupFormWidth = 330;
}
//值改变事件
private void textLocation_EditValueChanged(object sender, EventArgs e)
{
string daID = this.textLocation.EditValue.ToString(); //是ookUpEdit.Properties.ValueMember的值
string xm = this.textLocation.Text.Trim();
}
private void btnOkay_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(selectedBatch) || string.IsNullOrEmpty(selectedGoodsId))
{
showErrorMsg("请选择库存异常数据");
return;
}
string locationId = string.IsNullOrEmpty(textLocation.Text) ? textOldLocation.Text : textLocation.Text;
if(string.IsNullOrEmpty(locationId)){
showErrorMsg("请输入或选择正确的货位编号");
return;
}
decimal count = 0m;
try{
count = Convert.ToDecimal(textCount.Text.Trim());
}catch(Exception er){
showErrorMsg(er.Message);
textCount.Focus();
return;
}
DialogResult r = MessageBox.Show(string.Format("确定要修改库存信息吗?"), "确认修改", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (r != DialogResult.Yes)
{
return;
}
enumRepResult rr = (enumRepResult)stkLocClient.upDownStockLocation(locationId, selectedGoodsId,
selectedSkuId, selectedBatch, "WMS、ERP库存对比不一致纠正操作", count, (int)enumStockRecordType.);
if (rr == enumRepResult.)
{
MessageBox.Show("操作成功");
query();
setCurrentRequestDetail();
}
else
{
showErrorMsg(rr.ToString());
}
closeClient();
}
private void bbiExport_ItemClick(object sender, ItemClickEventArgs e)
{
exportExcel(gridView1);
}
}
}