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.

499 lines
22 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 AskGoodsEditForm : BusinessForm
{
private List<string> ids = new List<string>();
private List<string> specIdList = new List<string>();
private List<FoodMaterialDetailEntity> details = new List<FoodMaterialDetailEntity>();
private AskgoodsTicketResponse askgoodsTicketResponse;
private List<AskgoodsDetailResponse> detailList;
public AskGoodsEditForm(AskgoodsTicketResponse askgoodsTicketResponse, List<AskgoodsDetailResponse> 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<ProductDispatchpriceResponse> 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<ProductStockSumResponse> 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);
}
/// <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;
}
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<AskgoodsTicketEditDetail> editDetail = new List<AskgoodsTicketEditDetail>();
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<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(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));
}
}
}
}