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.

316 lines
11 KiB
C#

9 months ago
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using POSV.Entity;
using POSV.ShoppingCart;
using DevComponents.DotNetBar;
using DevComponents.DotNetBar.Metro;
using POSV.Utils;
namespace POSV.Business
{
public partial class SuitPanelEx : AbstractFlyoutPanelEx
{
/// <summary>
/// 套餐主菜的信息,道菜加价后主菜单价会改变
/// </summary>
private readonly OrderItem _master = null;
/// <summary>
/// 选中行数据
/// </summary>
private readonly List<OrderItem> _selected = null;
/// <summary>
/// 道菜
/// </summary>
private List<ProductSuit> _suitList = null;
/// <summary>
/// 道菜明细
/// </summary>
private List<SuitExt> _suitDetailList = null;
/// <summary>
/// 权限控制码
/// </summary>
private string _permissionCode = string.Empty;
/// <summary>
/// 授权人权限信息
/// </summary>
private Tuple<decimal , decimal , List<string> , Worker> _authz = null;
public SuitPanelEx(List<OrderItem> rows , string permissionCode , Tuple<decimal , decimal , List<string> , Worker> authz = null)
{
InitializeComponent();
this._selected = rows;
//操作功能的权限码
this._permissionCode = permissionCode;
//授权人综合信息
this._authz = authz;
//套餐主菜的信息,道菜加价后主菜单价会改变
var _parent = this._selected.Find(x => x.RowState == OrderRowState.);
if (_parent != null)
{
this._master = ObjectUtils.Copy<OrderItem>(_parent);
}
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.DesignMode) return;
//商品ID
var productId = this._master.ProductId;
lock (Global.Instance.SyncLock)
{
using (var db = Global.Instance.OpenDataBase)
{
this._suitList = db.Query<ProductSuit>("where productId = @0" , productId).ToList();
this._suitDetailList = db.Fetch<SuitExt>(string.Format(SqlConstant.SuitExt , productId));
}
}
if (this._suitList == null)
{
this._suitList = new List<ProductSuit>();
}
if (this._suitDetailList == null)
{
this._suitDetailList = new List<SuitExt>();
}
this.BuilderAll();
}
private void BuilderAll()
{
this.metroTilePanel.Items.Clear();
this.metroTilePanel.BackgroundStyle.Class = "MetroTileGroupTitle";
this.metroTilePanel.LayoutOrientation = eOrientation.Horizontal;
foreach (var suit in this._suitList)
{
ItemContainer itemContainer = new ItemContainer();
itemContainer.Name = suit.No;
itemContainer.Orientation = eOrientation.Horizontal;
itemContainer.MultiLine = true;
itemContainer.TitleStyle.Class = "MetroTileGroupTitle";
itemContainer.TitleText = suit.Name;
itemContainer.ItemSpacing = 0;
ElementStyle style = (ElementStyle)itemContainer.TitleStyle;
style.Font = Constant.BIG_FONT;
style.TextColor = Color.Black;
style.BackColor = Color.Bisque;
style.PaddingBottom = -1;
style.PaddingLeft = style.PaddingRight = -1;
this.BuilderSuitDetail(itemContainer , suit);
this.metroTilePanel.Items.Add(itemContainer);
}
this.metroTilePanel.Invalidate();
}
private void BuilderSuitDetail(ItemContainer itemContainer , ProductSuit suit)
{
var lists = this._suitDetailList.FindAll(x => x.SuitId == suit.Id);
foreach (var detail in lists)
{
MetroTileItem tileItem = new MetroTileItem();
tileItem.OptionGroup = detail.SuitId;
tileItem.TileSize = new Size(90 , 60);
tileItem.TileStyle.Font = Constant.DEFAULT_FONT;
tileItem.TitleTextAlignment = ContentAlignment.BottomCenter;
tileItem.TitleTextFont = Constant.NORMAL_FONT;
tileItem.TileStyle.PaddingLeft = tileItem.TileStyle.PaddingRight = -1;
tileItem.TileStyle.TextAlignment = eStyleTextAlignment.Center;
tileItem.TileStyle.TextLineAlignment = eStyleTextAlignment.Center;
if (detail.AddPrice > 0)
{
tileItem.TileStyle.TextLineAlignment = eStyleTextAlignment.Near;
tileItem.TitleText = string.Format("{0}{1}*{2}" , Constant.CNY,detail.AddPrice,detail.Quantity);
tileItem.TileStyle.PaddingBottom = -1;
}
if(detail.SpecCount > 1)
{
tileItem.Text = string.Format("{0}[{1}]" , detail.Name , detail.SpecName);
}
else
{
tileItem.Text = string.Format("{0}" , detail.Name);
}
//查找具体的单个套菜明细
var obj = this._selected.Find(x => x.SuitId.Equals(detail.SuitId) && x.SpecId.Equals(detail.SpecId));
tileItem.Checked = (obj != null);
tileItem.TileColor = tileItem.Checked ? eMetroTileColor.RedOrange : eMetroTileColor.Coffee;
tileItem.Tag = detail;
tileItem.MouseDown += TileItemMouseDown;
tileItem.CheckedChanged += TileItemCheckedChanged;
itemContainer.SubItems.Add(tileItem);
}
}
private void TileItemMouseDown(object sender , MouseEventArgs e)
{
MetroTileItem item = (MetroTileItem)sender;
item.Checked = true;
}
private void TileItemCheckedChanged(object sender , EventArgs e)
{
MetroTileItem item = (MetroTileItem)sender;
if (item.Checked)
{
item.TileColor = eMetroTileColor.RedOrange;
var newItem = item.Tag as SuitExt;
//查找具体的单个套菜明细
var oldItem = this._selected.Find(x => x.SuitId.Equals(newItem.SuitId));
//将当前SuitExt序列化
var json = JsonUtils.Serialize(newItem);
//反序列化为ProductExt对象
var product = JsonUtils.Deserialize<ProductExt>(json);
oldItem.ProductExt = product;
oldItem.SalePrice = product.Price;
//默认情况下零售价和售价一样零售价主要解决前台售价为0的商品需要录入的售价
oldItem.Price = product.Price;
//默认情况下,折后单价和零售价一样
oldItem.DiscountPrice = product.Price;
//单品最低售价
oldItem.MinPrice = product.MinPrice;
//会员价
oldItem.MemberPrice = product.MemberPrice;
//会员价(原)
oldItem.MemberSalePrice = product.MemberPrice;
//批发价
oldItem.DispatchPrice = product.DispatchPrice;
//第三方价
oldItem.OtherPrice = product.OtherPrice;
//商品ID
oldItem.ProductId = product.Id;
//商品编号
oldItem.ProductNo = product.No;
//单品名称
oldItem.Name = product.Name;
//单品简称
oldItem.ShortName = product.ShortName;
//规格ID
oldItem.SpecId = product.SpecId;
//规格名称
oldItem.SpecName = product.SpecName;
//品类ID
oldItem.TypeId = product.TypeId;
//品类名称
oldItem.TypeName = product.TypeName;
//商品单位ID
oldItem.ProductUnitId = product.UnitId;
//商品单位名称
oldItem.ProductUnitName = product.UnitName;
//厨打标识
oldItem.Chuda = product.Chuda;
oldItem.ChudaFlag = product.ChudaFlag;
oldItem.ChudaQty = 0;
//出品标识
oldItem.Chupin = product.Chupin;
oldItem.ChupinFlag = product.ChupinFlag;
oldItem.ChupinQty = 0;
//厨打标签标示
oldItem.ChuDaLabel = product.ChuDaLabel;
oldItem.ChuDaLabelFlag = product.ChuDaLabelFlag;
oldItem.ChuDaLabelQty = 0;
//标签标识
oldItem.LabelPrintFlag = product.LabelPrintFlag;
oldItem.LabelQty = 0;
//厨显标示
oldItem.Chuxian = product.Chuxian;
oldItem.ChuxianFlag = product.ChuxianFlag;
oldItem.ChuxianQty = 0;
oldItem.ChuxianTime = product.ChuxianTime;
//kds出品
oldItem.KdsChupin = product.KdsChupin;
oldItem.KdsChupinFlag = product.KdsChupinFlag;
oldItem.KdsChupinQty = 0;
oldItem.KdsChupinTime = product.KdsChupinTime;
oldItem.RowState = OrderRowState.;
//道菜ID
oldItem.SuitId = newItem.SuitId;
//道菜基准数量
oldItem.SuitQuantity = newItem.Quantity;
//道菜基准加价
oldItem.SuitAddPrice = newItem.AddPrice;
//道菜基准加价 = 主菜数量 * 道菜基准单价
oldItem.SuitAmount = this._master.Quantity * newItem.AddPrice;
//道菜数量随主菜变化而增加
oldItem.Quantity = this._master.Quantity * oldItem.SuitQuantity;
//清除做法记录
oldItem.Flavors.Clear();
//通知主界面改变
this.OnNotifyChanged(new FlyoutEventArgs(FlyoutAction.Notify , oldItem));
}
else
{
item.TileColor = eMetroTileColor.Coffee;
}
}
}
}