using DevComponents.DotNetBar.SuperGrid; using POSV.Boduo.Stock; using POSV.Card; using POSV.Entity; using POSV.Entity.Stock; using POSV.Template; using POSV.Utils; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace POSV.Stock { public partial class AskGoodsEditForm : BusinessForm { private List ids = new List(); private List specIdList = new List(); private List details = new List(); private AskgoodsTicketResponse askgoodsTicketResponse; private List detailList; public AskGoodsEditForm(AskgoodsTicketResponse askgoodsTicketResponse, List detailList) { InitializeComponent(); this.controlBox1.Text = "要货单修改"; this.controlBox1.ShowApplicationVersion = false; this.askgoodsTicketResponse = askgoodsTicketResponse; this.detailList = detailList; } protected override void OnLoad(EventArgs e) { base.OnLoad(e); if (this.DesignMode) return; this.busNoTextBox.Text = askgoodsTicketResponse.No; this.storeNameTextBox.Text = Global.Instance.Worker.StoreInfo.Name; this.statusBox.Text = "新建"; this.setManTextBox.Text = Global.Instance.BusinessPlanLog.WorkerNo; this.setDateTextBox.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); this.productMoneyTextBox.Text = string.Format("{0}", askgoodsTicketResponse.ProductMoney); this.dispatchMoneyTextBox.Text = string.Format("{0}", askgoodsTicketResponse.DispatchMoney); this.totalMoneyTextBox.Text = string.Format("{0}", askgoodsTicketResponse.TotalMoney); this.memoTextBox.Text = askgoodsTicketResponse.Description; foreach (AskgoodsDetailResponse askgoodsDetailResponse in detailList) { specIdList.Add(askgoodsDetailResponse.SpecId); ids.Add(askgoodsDetailResponse.SpecId); FoodMaterialDetailEntity detail = new FoodMaterialDetailEntity(); detail.TenantId = askgoodsDetailResponse.TenantId; detail.ProductId = askgoodsDetailResponse.ProductId; detail.SpecId = askgoodsDetailResponse.SpecId; detail.ProductName = askgoodsDetailResponse.ProductName; detail.ProductNo = askgoodsDetailResponse.ProductNo; detail.SpecName = askgoodsDetailResponse.SpecName; detail.DispatchUnitId = askgoodsDetailResponse.DispatchUnitId; detail.DispatchUnitName = askgoodsDetailResponse.DispatchUnitName; detail.Memo = askgoodsDetailResponse.Description; detail.PackUnitId = askgoodsDetailResponse.PackUnitId; detail.PackUnitName = askgoodsDetailResponse.PackUnitName; detail.Amount = StringUtils.FormatDataTwoDigitObject(askgoodsDetailResponse.Amount); detail.Price = StringUtils.FormatDataTwoDigitObject(askgoodsDetailResponse.Price); detail.Description = askgoodsDetailResponse.Description; detail.Operation = "删除"; details.Add(detail); } string specIds = ""; foreach (string id in specIdList) { specIds += id + ","; } if (specIds.Length > 1) { specIds = specIds.Substring(0, specIds.Length - 1); } //获取原料价格 ProductDispatchpriceRequest request = new ProductDispatchpriceRequest(); request.StoreId = Global.Instance.BusinessPlanLog.StoreId; request.SpecIds = specIds; var response = StockUtils.ProductDispatchprice(request); //成功时刷新价格 if (response.Item1) { List list = response.Item3; if (list != null) { foreach (ProductDispatchpriceResponse dispatchpriceResponse in list) { foreach (FoodMaterialDetailEntity detail in details) { if (dispatchpriceResponse.SpecId.Equals(detail.SpecId)) { detail.Price = StringUtils.FormatDataTwoDigitObject(dispatchpriceResponse.DispatchPrice); } } } } } //获取原料库存 ProductStockSumRequest request1 = new ProductStockSumRequest(); request1.StoreId = Global.Instance.BusinessPlanLog.StoreId; request1.SpecIds = specIds; var response1 = StockUtils.ProductStockSum(request1); //成功时刷新当前库存 if (response1.Item1) { List list = response1.Item3; if (list != null) { foreach (ProductStockSumResponse productStockSumResponse in list) { foreach (FoodMaterialDetailEntity detail in details) { if (productStockSumResponse.SpecId.Equals(detail.SpecId)) { detail.StockAmount = StringUtils.FormatDataTwoDigitObject(productStockSumResponse.StockAmount); } } } } } foreach (FoodMaterialDetailEntity detail in details) { var rows = this.detailListTable.PrimaryGrid.Rows; bool isExist = false; //过滤已存在的原料信息 if (rows.Count > 0) { foreach (var temRow in rows) { GridRow row = temRow as GridRow; if (detail.SpecId.Equals(row["SpecId"].Value.ToString())) { isExist = true; break; } } } if (!isExist) { GridRow row = new GridRow(detail.ProductId, detail.SpecId, detail.ProductNo, detail.ProductName, detail.SpecName, detail.Memo, detail.PackUnitName, detail.StockAmount, detail.DispatchUnitName, detail.Amount, detail.Price, StringUtils.FormatDataTwoDigit(detail.Money), detail.Description, "删除"); row.Tag = detail; rows.Add(row); } } //可编辑cell颜色特殊标注 var panel = this.detailListTable.PrimaryGrid; Color bgColor = ColorTranslator.FromHtml("193,255,192"); panel.Columns["amount"].CellStyles.Default.Background.Color1 = bgColor; panel.Columns["description"].CellStyles.Default.Background.Color1 = bgColor; } private void OnCloseTouchClick(object sender, EventArgs e) { //先关闭父窗体 if (this.Owner != null) { this.Owner.Close(); } //再关闭当前窗体 this.Close(); } private void OnControlBoxKeyboardClick(object sender, EventArgs e) { try { KeyboardType keyboardType = KeyboardType.数字; Type type = this.ActiveControl.GetType(); PropertyInfo pinfo = type.GetProperty("Keyboard"); if (pinfo != null) { keyboardType = (KeyboardType)pinfo.GetValue(this.ActiveControl, null); } var keyboard = Application.OpenForms["VirtualKeyboard"]; if (keyboard == null) { keyboard = new VirtualKeyboard(keyboardType); } ((VirtualKeyboard)keyboard).ShowVirtualKeyboard(this, keyboardType); } catch (Exception ex) { LOGGER.Error(ex, "打开屏幕键盘异常"); } } private void btn_exit_Click(object sender, EventArgs e) { //先关闭父窗体 if (this.Owner != null) { this.Owner.Close(); } //再关闭当前窗体 this.Close(); } private void btn_selectProduct(object sender, EventArgs e) { var form = new SelectProductForm(ids, ">=10"); form.OnProductClick += Form_OnMaterialDetailClick1; TransparentForm trans = new TransparentForm(this, form); trans.Show(this); } private void btn_selectTemplate(object sender, EventArgs e) { var form = new AskgoodsTemplateForm(ids); form.OnMaterialDetailClick += Form_OnMaterialDetailClick1; TransparentForm trans = new TransparentForm(this, form); trans.Show(this); } private void Form_OnMaterialDetailClick1(object sender, MaterialDetailEventArgs e) { AddMaterialDetail(e.Detail); } /// /// 修改单据 /// /// /// private void btn_saveProduct(object sender, EventArgs e) { this.buttonX4.Focus(); try { if (details.Count <= 0) { this.ShowToastNotify(this, "请选择原料"); return; } AskgoodsTicketEditRequest request = new AskgoodsTicketEditRequest(); request.StoreId = Global.Instance.BusinessPlanLog.StoreId; AskgoodsTicketEdit askgoodsTicketEdit = new AskgoodsTicketEdit(); askgoodsTicketEdit.Id = askgoodsTicketResponse.Id; askgoodsTicketEdit.No = this.busNoTextBox.Text; askgoodsTicketEdit.StoreId = Global.Instance.Authc.StoreId; askgoodsTicketEdit.Description = this.memoTextBox.Text; askgoodsTicketEdit.ProductMoney = StringUtils.FormatDataTwoDigitObject(this.productMoneyTextBox.Text); askgoodsTicketEdit.DispatchMoney = StringUtils.FormatDataTwoDigitObject(this.dispatchMoneyTextBox.Text); askgoodsTicketEdit.TotalMoney = StringUtils.FormatDataTwoDigitObject(this.totalMoneyTextBox.Text); askgoodsTicketEdit.SetMan = Global.Instance.BusinessPlanLog.WorkerNo; //便利获取原料信息 var rows = this.detailListTable.PrimaryGrid.Rows; List editDetail = new List(); if (rows.Count > 0) { foreach (var temRow in rows) { GridRow row = temRow as GridRow; var ProductId = StringUtils.GetString(row.Cells["ProductId"].Value); var SpecId = StringUtils.GetString(row.Cells["SpecId"].Value); var Amount = StringUtils.FormatDataTwoDigitObject(row.Cells["amount"].Value); var productName = StringUtils.GetString(row.Cells["productName"].Value); bool AskGoodsCount = Global.Instance.GlobalConfigBoolValue(ConfigConstant.CONFIG_CASHIER_ASKGOODSCOUNT, false); if (Amount <= 0) { if (!AskGoodsCount) { var dialog = new DialogForm("错误提示", string.Format("<{0}>要货数量<{1}>,请调整", productName, Amount), MessageBoxIcon.Error, MessageBoxButtons.OK); dialog.ShowDialog(this); row.IsSelected = true; return; } } var Price = StringUtils.FormatDataTwoDigitObject(row.Cells["price"].Value); var Money = StringUtils.FormatDataTwoDigitObject(row.Cells["money"].Value); var Description = StringUtils.GetString(row.Cells["description"].Value); AskgoodsTicketEditDetail askgoodsTicketEditDetail = new AskgoodsTicketEditDetail(); askgoodsTicketEditDetail.ProductId = ProductId; askgoodsTicketEditDetail.SpecId = SpecId; askgoodsTicketEditDetail.Amount = Amount; askgoodsTicketEditDetail.Price = Price; askgoodsTicketEditDetail.Money = Money; askgoodsTicketEditDetail.Description = Description; editDetail.Add(askgoodsTicketEditDetail); } } askgoodsTicketEdit.Detail = editDetail; request.AskgoodsTicketEdit = askgoodsTicketEdit; var response = StockUtils.AskgoodsTicketEdit(request); //成功 if (response.Item1) { OnTicktQuery?.Invoke(sender); this.ShowToastNotify(this, response.Item2); //保存成功关闭当前窗口 if (this.Owner != null) { this.Owner.Close(); } //再关闭当前窗体 this.Close(); } else { this.ShowToastNotify(this, response.Item2); } } catch (Exception ex) { this.ShowToastNotify(this, "要货单修改异常"); LOGGER.Error(ex, "要货单修改异常"); } } private void AddMaterialDetail(FoodMaterialDetailEntity detail) { var rows = this.detailListTable.PrimaryGrid.Rows; bool isExist = false; //过滤已存在的原料信息 if (rows.Count > 0) { foreach (var temRow in rows) { GridRow row = temRow as GridRow; if (detail.ProductId.Equals(row["ProductId"].Value.ToString())) { isExist = true; break; } } } if (!isExist) { decimal price = 0; //获取原料价格 ProductDispatchpriceRequest request = new ProductDispatchpriceRequest(); request.StoreId = Global.Instance.BusinessPlanLog.StoreId; request.SpecIds = detail.SpecId; var response = StockUtils.ProductDispatchprice(request); //成功 if (response.Item1) { List list = response.Item3; foreach (ProductDispatchpriceResponse dispatchpriceResponse in list) { if (dispatchpriceResponse.SpecId.Equals(detail.SpecId)) { price = StringUtils.FormatDataTwoDigitObject(dispatchpriceResponse.DispatchPrice); } } } else { price = 0; } //获取原料门店库存 ProductStockSumRequest request1 = new ProductStockSumRequest(); request1.StoreId = Global.Instance.BusinessPlanLog.StoreId; request1.SpecIds = detail.SpecId; var response1 = StockUtils.ProductStockSum(request1); decimal stockAmount = 0; //成功 if (response1.Item1) { List list = response1.Item3; foreach (ProductStockSumResponse productStockSumResponse in list) { if (productStockSumResponse.SpecId.Equals(detail.SpecId)) { stockAmount = StringUtils.FormatDataTwoDigitObject(productStockSumResponse.StockAmount); } } } else { stockAmount = 0; } detail.Price = price; detail.StockAmount = stockAmount; GridRow row = new GridRow(detail.ProductId, detail.SpecId, detail.ProductNo, detail.ProductName, detail.SpecName, detail.Memo, detail.PackUnitName, detail.StockAmount, detail.DispatchUnitName, "0", detail.Price, "0", "", "删除"); row.Tag = detail; rows.Add(row); details.Add(detail); } } private void OnCellValueChanged(object sender, GridCellValueChangedEventArgs e) { var cell = e.GridCell; if (cell.GridColumn.Name == "amount") { var row = cell.GridRow; var price = StringUtils.FormatDataTwoDigitObject(row.Cells["price"].Value); var amount = StringUtils.FormatDataTwoDigitObject(row.Cells["amount"].Value); if (amount < 0) { this.ShowToastNotify(this, "数量非法"); row.Cells["amount"].Value = 0; amount = 0; } var money = price * amount; row.Cells["money"].Value = StringUtils.FormatDataTwoDigitObject(money); decimal productMoney = 0.00M; //便利获取原料总额 var rows = this.detailListTable.PrimaryGrid.Rows; if (rows.Count > 0) { foreach (var temRow in rows) { GridRow amountRow = temRow as GridRow; var Money = StringUtils.FormatDataTwoDigitObject(amountRow.Cells["money"].Value); productMoney = productMoney + Money; } } this.productMoneyTextBox.Text = StringUtils.GetString(StringUtils.FormatDataTwoDigitObject(productMoney)); this.totalMoneyTextBox.Text = StringUtils.GetString(StringUtils.FormatDataTwoDigitObject(this.productMoneyTextBox.Text) + StringUtils.FormatDataTwoDigitObject(this.dispatchMoneyTextBox.Text)); } } public delegate void EventHandler(object sender); public event EventHandler OnTicktQuery; private void OnBeginEdit(object sender, GridEditEventArgs e) { var cell = e.GridCell; var cellPoint = this.detailListTable.PointToScreen(cell.LocationRelative); if (cell.GridColumn.Name == "amount") { cellPoint.Y -= this.detailListTable.VScrollOffset; var p = NumericKeyboard.CalculateLocation(cellPoint, cell.GridColumn.Width); NumericKeyboard.ShowKeyboard(this, p); } else { var txtForm = new TxtKeyboardForm(StringUtils.GetString(cell.Value)); txtForm.NotifyChanged += (o, args) => { cell.Value = args.Data; }; var trans = new TransparentForm(this, .5, txtForm); trans.Show(this); } } private void OnCloseEdit(object sender, GridCloseEditEventArgs e) { NumericKeyboard.CloseKeyboard(); } private void OnCellClick(object sender, GridCellClickEventArgs e) { if ("operation" == e.GridCell.GridColumn.Name) { GridRow selectRow = (GridRow)this.detailListTable.PrimaryGrid.ActiveRow; if (selectRow != null) { var detail = selectRow.Tag as FoodMaterialDetailEntity; this.detailListTable.PrimaryGrid.Rows.Remove(selectRow); ids.Remove(detail.SpecId); details.Remove(detail); } decimal productMoney = 0.00M; //便利获取原料总额 var rows = this.detailListTable.PrimaryGrid.Rows; if (rows.Count > 0) { foreach (var temRow in rows) { GridRow amountRow = temRow as GridRow; var Money = StringUtils.FormatDataTwoDigitObject(amountRow.Cells["money"].Value); productMoney = productMoney + Money; } } this.productMoneyTextBox.Text = StringUtils.GetString(StringUtils.FormatDataTwoDigitObject(productMoney)); this.totalMoneyTextBox.Text = StringUtils.GetString(StringUtils.FormatDataTwoDigitObject(this.productMoneyTextBox.Text) + StringUtils.FormatDataTwoDigitObject(this.dispatchMoneyTextBox.Text)); } } } }