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.

302 lines
12 KiB
C#

using DevComponents.DotNetBar.SuperGrid;
using POSV.Card;
using POSV.Component;
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.Windows.Forms;
namespace POSV.Stock
{
public partial class StoreStockCheckTemplateForm : BusinessForm
{
private List<string> selectMaterialList = new List<string>();
List<StockCheckTemplateDetailResponse> detailList;
private string storageId;
public StoreStockCheckTemplateForm(string storageId, List<string> ids)
{
InitializeComponent();
this.controlBox1.Text = "门店盘点模板";
this.controlBox1.ShowApplicationVersion = false;
selectMaterialList = ids ?? new List<string>();
this.storageId = storageId;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.DesignMode) return;
this.Focus();
this.noTextBox.Focus();
this.noTextBox.SelectAll();
this.ActiveControl = this.noTextBox;
//获得当前页
int cur = pagerControl1.CurrentPage;
//获得每页显示的记录数
int rows = pagerControl1.RowsPerPage;
QueryTicket(cur, rows);
}
public void QueryTicket(int PageNum, int pageSize)
{
try
{
var request = new StockCheckTemplateListRequest();
request.StoreId = Global.Instance.Authc.StoreId;
request.PageNumber = PageNum;
request.PageSize = pageSize;
request.Keyword = this.noTextBox.Text;
var response = StockUtils.StockCheckTemplateList(request);
//成功
if (response.Item1)
{
this.pagerControl1.TotalPage = response.Item3.PageCount;
this.pagerControl1.CurrentPage = response.Item3.PageNumber;
this.pagerControl1.RecordCount = response.Item3.TotalCount;
this.pagerControl1.RowsPerPage = response.Item3.PageSize;
ticketListTable.PrimaryGrid.DataSource = response.Item3.List;
}
else
{
List<StockCheckTemplateListResponse> list = new List<StockCheckTemplateListResponse>();
ticketListTable.PrimaryGrid.DataSource = list;
this.ShowToastNotify(this, response.Item2);
}
}
catch (Exception ex)
{
this.ShowToastNotify(this, "盘点模板列表查询异常");
LOGGER.Error(ex, "盘点模板列表查询异常");
}
}
private void OnCloseTouchClick(object sender, EventArgs e)
{
//先关闭父窗体
if (this.Owner != null)
{
this.Owner.Close();
}
//再关闭当前窗体
this.Close();
}
/// <summary>
/// 取消按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnCancelClick(object sender, EventArgs e)
{
//先关闭父窗体
if (this.Owner != null)
{
this.Owner.Close();
}
//再关闭当前窗体
this.Close();
}
private void OnTxtMemoCustomClick(object sender, EventArgs e)
{
var obj = sender as NormalTextBox;
var txtForm = new TxtKeyboardForm(StringUtils.GetString(obj.Text));
txtForm.NotifyChanged += (o, args) =>
{
obj.Text = args.Data.ToString();
};
var trans = new TransparentForm(this, .5, txtForm);
trans.Show(this);
}
/// <summary>
/// 查询盘点模板
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BntQuery(object sender, EventArgs e)
{
//获得当前页
int cur = pagerControl1.CurrentPage;
//获得每页显示的记录数
int rows = pagerControl1.RowsPerPage;
QueryTicket(cur, rows);
}
private void OnTicketRowActivated(object sender, DevComponents.DotNetBar.SuperGrid.GridRowActivatedEventArgs e)
{
GridPanel grid = e.GridPanel;
if (e.NewActiveRow != null)
{
detailListTable.PrimaryGrid.Rows.Clear();
//先清除其他表数据
GridRow row = e.NewActiveRow as GridRow;
grid.SetSelected(e.NewActiveRow, false);
grid.SetActiveRow(e.NewActiveRow);
var ticketId = StringUtils.GetString(row.Cells["id"].Value);
AskgoodsTicketDetail(ticketId);
}
else
{
detailListTable.PrimaryGrid.Rows.Clear();
}
}
public void AskgoodsTicketDetail(string ticketId)
{
try
{
var request = new StockCheckTemplateDetailRequest();
request.StoreId = Global.Instance.Authc.StoreId;
request.TicketId = ticketId;
var response = StockUtils.StockCheckTemplateDetail(request);
//成功
if (response.Item1)
{
List<StockCheckTemplateDetailResponse> stockCheckTemplateDetailList = response.Item3.List;
detailListTable.PrimaryGrid.DataSource = stockCheckTemplateDetailList;
detailList = stockCheckTemplateDetailList;
}
else
{
List<StockCheckTemplateDetailResponse> list = new List<StockCheckTemplateDetailResponse>();
detailListTable.PrimaryGrid.DataSource = list;
detailList = list;
this.ShowToastNotify(this, response.Item2);
}
}
catch (Exception ex)
{
this.ShowToastNotify(this, "盘点模板明细查询异常");
LOGGER.Error(ex, "盘点模板明细查询异常");
}
}
/// <summary>
/// 选中模板
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void BtnSelect(object sender, EventArgs e)
{
string SpecIds = "";
foreach (StockCheckTemplateDetailResponse response in detailList)
{
FoodMaterialDetailEntity detail = GetMaterialDetail(response.ProductId, response.SpecId);
if (detail != null)
{
//加入选中项
if (!selectMaterialList.Contains(String.Format("{0}-{1}", storageId, response.SpecId)))
{
selectMaterialList.Add(String.Format("{0}-{1}", storageId, response.SpecId));
SpecIds = SpecIds + response.SpecId + ",";
}
// OnMaterialDetailClick?.Invoke(sender, new MaterialDetailEventArgs(detail));
}
}
//门店支付的原料走服务器查看未盘点的商品信息
if (!"".Equals(SpecIds)) {
SpecIds = SpecIds.Substring(0, SpecIds.Length-1);
}
try
{
StockCheckProductValidRequest request = new StockCheckProductValidRequest();
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
request.StorageId = this.storageId;
request.SpecIds = SpecIds;
var response = StockUtils.StockCheckProductValid(request);
//成功
if (response.Item1)
{
foreach (StockCheckProductValidResponse stockCheckProductValidResponse in response.Item3.List) {
//遍历获取可添加的盘点明细列表
StockCheckTemplateDetailResponse stockCheckTemplateDetailResponse = detailList.Find(x => x.SpecId.Equals(stockCheckProductValidResponse.SpecId));
if (stockCheckTemplateDetailResponse != null ) {
FoodMaterialDetailEntity product = new FoodMaterialDetailEntity();
product.ProductId = stockCheckTemplateDetailResponse.ProductId;
product.ProductNo = stockCheckTemplateDetailResponse.ProductNo;
product.ProductName = stockCheckTemplateDetailResponse.ProductName;
product.SpecId = stockCheckTemplateDetailResponse.SpecId;
product.SpecName = stockCheckTemplateDetailResponse.SpecName;
product.PackUnitId = stockCheckTemplateDetailResponse.StockUnitId;
product.PackUnitName = stockCheckTemplateDetailResponse.StockUnitName;
OnProductClick?.Invoke(sender, new MaterialDetailEventArgs(product));
}
}
}
}
catch (Exception ex)
{
this.ShowToastNotify(this, "获取可盘点商品信息失败");
LOGGER.Error(ex, "获取可盘点商品信息失败");
}
//先关闭父窗体
if (this.Owner != null)
{
this.Owner.Close();
}
//再关闭当前窗体
this.Close();
}
public delegate void EventHandler(object sender, MaterialDetailEventArgs e);
public event EventHandler OnProductClick;
/// <summary>
/// 获取门店自身支持的原料数据
/// </summary>
/// <param name="productId"></param>
/// <param name="specId"></param>
/// <returns></returns>
private FoodMaterialDetailEntity GetMaterialDetail(string productId, string specId)
{
List<FoodMaterialDetailEntity> detailList = new List<FoodMaterialDetailEntity>();
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" select a.tenantId, a.id as productId,b.id as specId,a.name as productName,a.no as productNo, ");
sqlBuld.Append(" b.name as specName,d.dispatchUnitId,c.name as dispatchUnitName,a.spell,a.memo,d.packUnitId,e.name as packUnitName ");
sqlBuld.Append(" from pos_product a ");
sqlBuld.Append(" LEFT JOIN pos_product_spec b on b.productId = a.id ");
sqlBuld.Append(" LEFT JOIN pos_product_ratio d on d.productId = a.id ");
sqlBuld.Append(" LEFT JOIN pos_product_unit c on c.id = d.dispatchUnitId ");
sqlBuld.Append(" LEFT JOIN pos_product_unit e on e.id = d.packUnitId ");
sqlBuld.Append(" where a.id={0} and b.id={1} ");
using (var db = Global.Instance.OpenDataBase)
{
string sql = string.Format(sqlBuld.ToString(), productId, specId);
detailList = db.Query<FoodMaterialDetailEntity>(sql).ToList();
if (detailList == null)
{
detailList = new List<FoodMaterialDetailEntity>();
}
}
if (detailList.Count > 0)
{
return detailList[0];
}
return null;
}
}
}