You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

448 lines
19 KiB
C#

9 months ago
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 AskGoodsAddForm : BusinessForm
{
private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
private List<string> ids = new List<string>();
private List<FoodMaterialDetailEntity> details = new List<FoodMaterialDetailEntity>();
public AskGoodsAddForm()
{
InitializeComponent();
this.controlBox1.Text = "要货单新增";
this.controlBox1.ShowApplicationVersion = false;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.DesignMode) return;
this.busNoTextBox.Text = string.Format("Y{0}{1}", Global.Instance.Authc.PosNo, DateTime.Now.ToString("yyyyMMddHHmmss") );
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}", 0.00);
this.dispatchMoneyTextBox.Text = string.Format("{0}", 0.00);
this.totalMoneyTextBox.Text = string.Format("{0}", 0.00);
//可编辑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_OnProductClick;
TransparentForm trans = new TransparentForm(this, form);
trans.Show(this);
}
private void Form_OnProductClick(object sender, MaterialDetailEventArgs e)
{
var detail = e.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.SpecId.Equals(row["SpecId"].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<ProductDispatchpriceResponse> 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<ProductStockSumResponse> list = response1.Item3;
foreach (ProductStockSumResponse productStockSumResponse in list)
{
if (productStockSumResponse.SpecId.Equals(detail.SpecId))
{
stockAmount = StringUtils.FormatDataTwoDigitObject(StringUtils.FormatDataTwoDigit(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);
}
}
/// <summary>
/// 保存单据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btn_saveProduct(object sender, EventArgs e)
{
this.buttonX4.Focus();
try
{
if (details.Count <= 0)
{
this.ShowToastNotify(this, "请选择原料");
return;
}
AskgoodsTicketAddRequest request = new AskgoodsTicketAddRequest();
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
AskgoodsTicketAdd askgoodsTicketAdd = new AskgoodsTicketAdd();
askgoodsTicketAdd.No = this.busNoTextBox.Text;
askgoodsTicketAdd.StoreId = Global.Instance.Authc.StoreId;
askgoodsTicketAdd.Description = this.memoTextBox.Text;
askgoodsTicketAdd.ProductMoney = StringUtils.FormatDataTwoDigitObject(this.productMoneyTextBox.Text);
askgoodsTicketAdd.DispatchMoney = StringUtils.FormatDataTwoDigitObject(this.dispatchMoneyTextBox.Text);
askgoodsTicketAdd.TotalMoney = StringUtils.FormatDataTwoDigitObject(this.totalMoneyTextBox.Text);
askgoodsTicketAdd.SetMan = Global.Instance.BusinessPlanLog.WorkerNo;
//便利获取原料信息
var rows = this.detailListTable.PrimaryGrid.Rows;
List<AskgoodsTicketAddDetail> addDetail = new List<AskgoodsTicketAddDetail>();
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);
AskgoodsTicketAddDetail askgoodsTicketAddDetail = new AskgoodsTicketAddDetail();
askgoodsTicketAddDetail.ProductId = ProductId;
askgoodsTicketAddDetail.SpecId = SpecId;
askgoodsTicketAddDetail.Amount = Amount;
askgoodsTicketAddDetail.Price = Price;
askgoodsTicketAddDetail.Money = Money;
askgoodsTicketAddDetail.Description = Description;
addDetail.Add(askgoodsTicketAddDetail);
}
}
askgoodsTicketAdd.Detail = addDetail;
request.AskgoodsTicketAdd = askgoodsTicketAdd;
var response = StockUtils.AskgoodsTicketAdd(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 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));
}
}
private void btn_selectTemplate(object sender, EventArgs e)
{
var form = new AskgoodsTemplateForm(ids);
form.OnMaterialDetailClick += Form_OnProductClick;
TransparentForm trans = new TransparentForm(this, form);
trans.Show(this);
}
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));
}
}
private void btnIntelligent_Click(object sender, EventArgs e)
{
var form = new AskGoodsPredictionTurnover( );
TransparentForm trans = new TransparentForm(this, form);
trans.ShowDialog();
var rows = this.detailListTable.PrimaryGrid.Rows;
foreach (var detail in form.foods)
{
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<ProductDispatchpriceResponse> 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<ProductStockSumResponse> list = response1.Item3;
foreach (ProductStockSumResponse productStockSumResponse in list)
{
if (productStockSumResponse.SpecId.Equals(detail.SpecId))
{
stockAmount = StringUtils.FormatDataTwoDigitObject(StringUtils.FormatDataTwoDigit(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, detail.Amount, detail.Price, "0", detail.Description, "删除");
row.Tag = detail;
rows.Add(row);
details.Add(detail);
}
}
}
}