using POSV.Card; using POSV.Entity; 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.Windows.Forms; namespace POSV.Stock { public partial class AskGoodsPredictionTurnover : BusinessForm { public AskGoodsPredictionTurnover() { InitializeComponent(); } AskgoodsTurnoverResponse askgoodsTurnoverResponse = new AskgoodsTurnoverResponse(); public List foods = new List(); protected override void OnLoad(EventArgs e) { base.OnLoad(e); this.GetPredictionTurnover(); } 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 GetPredictionTurnover() { AskgoodsTurnoverRequest request = new AskgoodsTurnoverRequest(); request.StoreId = Global.Instance.BusinessPlanLog.StoreId; var _data = StockUtils.AskgoodsPreictdionTurnover(request); if (_data.Item1) { this.askgoodsTurnoverResponse = _data.Item3; this.askgoodsTurnoverResponse.PredictionTurnover.ForEach(f => { f.PreDictionAmountFloat = f.PreDictionAmount; }); this.turnoverTable.PrimaryGrid.DataSource = this.askgoodsTurnoverResponse.PredictionTurnover; } else { this.ShowToastNotify(this, _data.Item2); } } /// /// 获取数据库商品 /// private void AbrufbildungDetail() { List _entity = new List(); AskgoodsPredictionProductRequest request = new AskgoodsPredictionProductRequest(); using (var db = Global.Instance.OpenDataBase) { StringBuilder sqlBuld = new StringBuilder(); sqlBuld.Append(" select " + " pos_product.id as 'productId'," + " pos_product_spec.id as 'specId'," + " pos_product.name as 'productName'," + " pos_product.\"no\" as 'productNo'," + " pos_product_spec.name as 'specName'," + " pos_product_stock.packUnitId as 'dispatchUnitId'," + " pos_product_stock.packUnitName as 'dispatchUnitName'," + " pos_product.spell as 'spell'," + " pos_product.memo as 'memo'," + " pos_product_stock.packUnitId as 'packUnitId'," + " pos_product_stock.packUnitName as 'packUnitName'," + " pos_product_spec.thUseLevel as 'thUseLevel'" + " from pos_product_spec" + " LEFT JOIN pos_product on pos_product.id = pos_product_spec.productId" + " LEFT JOIN pos_product_stock on pos_product_stock.productId = pos_product_spec.productId" + " where thUseLevel > 0 "); _entity = db.Query(sqlBuld.ToString()).ToList(); } if (_entity.Count <= 0) { this.ShowToastNotify(this, "无万用量数据"); return; } var _ids = _entity.Select(f => f.SpecId); request.StoreId = Global.Instance.BusinessPlanLog.StoreId; request.ProductIds = string.Join(",", _ids); var _data = StockUtils.AskgoodsPredictionProductStock(request); if (_data.Item1) { //(营业额 / 10000 * 万元用量 )-当前库存 - 待入库数量 = 实际要货数量 var _ch = this.ToChinese(askgoodsTurnoverResponse.AdvanceDay, askgoodsTurnoverResponse.GoodsDay); var _turnover = this.askgoodsTurnoverResponse.PredictionTurnover.Where(f => _ch.Contains(f.WeekDay)); //if (_turnover.Count() != int.Parse(this.askgoodsTurnoverResponse.GoodsDay)) //{ // this.ShowToastNotify(this, "获取计划要货数据不等于设置计划要货数,数据异常请联系管理员"); // return; //} foreach (var item in _turnover) { foreach (var _costitem in _data.Item3.costTickets) { var _specitem = _entity.FirstOrDefault(f => f.ProductId == _costitem.ProductId); if (_specitem == null) { continue; } if (_specitem.thUseLevel == 0) { continue; } // _specitem.Description = "智能要货"; var _DispatchStockdata = _data.Item3.DispatchTickets.FirstOrDefault(f => f.ProductId == _costitem.ProductId); decimal DispatchStock = 0.00M; if (_DispatchStockdata == null) { DispatchStock = 0; } else { DispatchStock = decimal.Parse(_DispatchStockdata.DispatchStock); } _specitem.Amount = (item.PreDictionAmountFloat / 10000 * _specitem.thUseLevel) - decimal.Parse(_costitem.YeterdayStock) - DispatchStock; _specitem.Amount = Math.Floor(_specitem.Amount); if (_specitem.Amount < 0) { continue; } foods.Add(_specitem); } } } else { } } /// /// 阿拉伯转中文 /// /// private List ToChinese(string advanceDay, string goodsDay) { var _advanceDay = (System.DateTime.Now.DayOfWeek + 1) + int.Parse(advanceDay); List DayOfWeeks = new List(); for (int i = 0; i < int.Parse(goodsDay); i++) { switch ((int)_advanceDay) { case 7: DayOfWeeks.Add("日"); break; case 1: DayOfWeeks.Add("一"); break; case 2: DayOfWeeks.Add("二"); break; case 3: DayOfWeeks.Add("三"); break; case 4: DayOfWeeks.Add("四"); break; case 5: DayOfWeeks.Add("五"); break; case 6: DayOfWeeks.Add("六"); break; } if ((int)_advanceDay == 7) { //Monday值等于1 _advanceDay = DayOfWeek.Monday; } else { _advanceDay++; } } return DayOfWeeks; } private void btnFloating_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(this.proportionTextBox.Text)) { this.ShowToastNotify(this, "请输入浮动比例"); return; } if (this.proportionTextBox.DecimalValue <= 0 || this.proportionTextBox.DecimalValue > 100) { this.ShowToastNotify(this, "请输入1-100的数值"); return; } this.askgoodsTurnoverResponse.PredictionTurnover.ForEach(f => { var _txt = sender as DevComponents.DotNetBar.ButtonX; if (_txt == null) { return; }; f.PreDictionAmountExplain = _txt.Text + " - " + this.proportionTextBox.DecimalValue + "%"; if (_txt.Text.Equals("上浮")) { f.PreDictionAmountFloat = f.PreDictionAmount + (f.PreDictionAmount * (this.proportionTextBox.DecimalValue * 0.01M)); } else { f.PreDictionAmountFloat = f.PreDictionAmount - (f.PreDictionAmount * (this.proportionTextBox.DecimalValue * 0.01M)); } }); this.turnoverTable.PrimaryGrid.DataSource = this.askgoodsTurnoverResponse.PredictionTurnover; } private void btnClose_Click(object sender, EventArgs e) { OnCloseTouchClick(sender, e); } private void btnConfirm_Click(object sender, EventArgs e) { AbrufbildungDetail(); OnCloseTouchClick(sender, e); } } }