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.

258 lines
9.2 KiB
C#

9 months ago
using DevComponents.DotNetBar.SuperGrid;
using POSV.Card;
using POSV.Entity.Stock;
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 AskgoodsTemplateForm : BusinessForm
{
private List<string> selectMaterialList = new List<string>();
private List<AskgoodsTemplateDetailResponse> askgoodsDetailResponse = new List<AskgoodsTemplateDetailResponse>();
public AskgoodsTemplateForm(List<string> ids)
{
InitializeComponent();
this.controlBox1.Text = "要货单模板";
this.controlBox1.ShowApplicationVersion = false;
selectMaterialList = ids ?? new List<string>();
}
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;
AskgoodsTemplateQuery(cur, rows);
}
public void AskgoodsTemplateQuery(int PageNum, int pageSize)
{
try
{
var request = new AskgoodsTemplateRequest();
request.StoreId = Global.Instance.Authc.StoreId;
request.No = this.noTextBox.Text;
request.PageNumber = PageNum;
request.PageSize = pageSize;
var response = StockUtils.AskgoodsTemplate(request);
//成功
if (response.Item1)
{
this.ShowToastNotify(this, response.Item2);
List<AskgoodsTemplateResponse> askgoodsTemplateResponse = response.Item7;
this.pagerControl1.TotalPage = response.Item4;
this.pagerControl1.CurrentPage = response.Item5;
this.pagerControl1.RecordCount = response.Item3;
this.pagerControl1.RowsPerPage = response.Item6;
ticketListTable.PrimaryGrid.DataSource = askgoodsTemplateResponse;
}
else
{
List<AskgoodsTemplateResponse> list = new List<AskgoodsTemplateResponse>();
ticketListTable.PrimaryGrid.DataSource = list;
this.ShowToastNotify(this, response.Item2);
}
}
catch (Exception ex)
{
this.ShowToastNotify(this, "要货模板查询异常");
LOGGER.Error(ex, "要货模板查询异常");
}
}
private void exitClick(object sender, EventArgs e)
{
//先关闭父窗体
if (this.Owner != null)
{
this.Owner.Close();
}
//再关闭当前窗体
this.Close();
}
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 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);
AskgoodsTemplateDetail(ticketId, 1, 1000);
}
else
{
detailListTable.PrimaryGrid.Rows.Clear();
}
}
public void AskgoodsTemplateDetail(string ticketId, int PageNum, int pageSize)
{
try
{
var request = new AskgoodsTemplateDetailRequest();
request.StoreId = Global.Instance.Authc.StoreId;
request.TicketId = ticketId;
request.PageNumber = PageNum;
request.PageSize = pageSize;
var response = StockUtils.AskgoodsTemplateDetail(request);
//成功
if (response.Item1)
{
this.ShowToastNotify(this, response.Item2);
askgoodsDetailResponse = response.Item7;
detailListTable.PrimaryGrid.DataSource = askgoodsDetailResponse;
}
else
{
askgoodsDetailResponse = new List<AskgoodsTemplateDetailResponse>();
detailListTable.PrimaryGrid.DataSource = askgoodsDetailResponse;
this.ShowToastNotify(this, response.Item2);
}
}
catch (Exception ex)
{
this.ShowToastNotify(this, "要货模板明细查询异常");
LOGGER.Error(ex, "要货模板明细查询异常");
}
}
private void btn_ok(object sender, EventArgs e)
{
foreach (AskgoodsTemplateDetailResponse response in askgoodsDetailResponse) {
FoodMaterialDetailEntity detail = GetMaterialDetail(response.ProductId, response.SpecId);
if (detail!=null) {
//加入选中项
if (!selectMaterialList.Contains(detail.SpecId))
{
selectMaterialList.Add(detail.SpecId);
}
OnMaterialDetailClick?.Invoke(sender, new MaterialDetailEventArgs(detail));
}
}
//先关闭父窗体
if (this.Owner != null)
{
this.Owner.Close();
}
//再关闭当前窗体
this.Close();
}
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;
}
public delegate void EventHandler(object sender, MaterialDetailEventArgs e);
public event EventHandler OnMaterialDetailClick;
}
public class MaterialDetailEventArgs : EventArgs
{
private readonly FoodMaterialDetailEntity _detail;
public MaterialDetailEventArgs(FoodMaterialDetailEntity detail)
{
this._detail = detail;
}
public FoodMaterialDetailEntity Detail
{
get
{
return _detail;
}
}
}
}