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.

399 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevComponents.DotNetBar.Controls;
using DevComponents.DotNetBar.SuperGrid;
using NLog;
using POSV.Component;
using POSV.Entity;
using POSV.Utils;
namespace POSV
{
public partial class SaleClearForm : BusinessForm
{
public SaleClearForm()
{
InitializeComponent();
this.Name = "SaleClearForm";
this.keyboardPanel.Height = 0;
this.keyboardPanel.Visible = false;
this.controlBox.ForeColor = System.Drawing.Color.White;
this.controlBox.Text = "单品沽清";
this.detailPanel.Visible = false;
this.dateTime.Value = DateTime.Now.AddDays(1);
InitializeGrid();
this.categoryControl.CategoryCheckedChanged += OnCategoryCheckedChanged;
this.dateTime.ValueChanged += OnDateTimeValueChanged;
}
private void InitializeGrid()
{
try
{
gridControl.RowActivated -= GridControlRowActivated;
gridControl.RowActivated += GridControlRowActivated;
gridControl.CellDoubleClick -= GridCellDoubleClick;
gridControl.CellDoubleClick += GridCellDoubleClick;
gridControl.CellClick -= GridControlCellClick;
gridControl.CellClick += GridControlCellClick;
}
catch (Exception ex)
{
LOGGER.Error(ex , "初始化沽清列表异常");
}
finally
{
this.leftContainer.Invalidate();
}
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.DesignMode) return;
this.checkBoxX28.Checked = true;
Task.Factory.StartNew(() =>
{
this.Invoke(new Action(() =>
{
try
{
var lists = Global.Product._productList;
this.productControl.PageNumber = 1;
this.productControl.BindDataSource(lists, KeyboardAction.None);
}
catch (Exception ex)
{
LOGGER.Error(ex, "加载商品信息异常");
}
}));
}).ContinueWith(task => {
this.Invoke(new Action(() =>
{
RefreshGrid();
}));
});
}
private void OnCategoryCheckedChanged(object sender , Component.CategoryEventArgs e)
{
var productType = e.Data;
try
{
var lists = Global.Product._productList;
var selectProduct = new List<ProductExt>();
if (!Constant.ALL_PRODUCT_TAG.Equals(productType.No))
{
selectProduct = lists.FindAll(x => !string.IsNullOrEmpty(x.TypePath) && x.TypePath.StartsWith(productType.Path));
}
this.productControl.PageNumber = 1;
this.productControl.BindDataSource(selectProduct, KeyboardAction.None);
}
catch (Exception ex)
{
LOGGER.Error(ex, "加载商品信息异常");
}
}
private void OnProductCheckedChanged(object sender , Component.ProductEventArgs e)
{
bool isGo = true;
//**********************开始*******************************
var product = e.Product;
if (isGo)
{
ProcessSaleClearModify(product);
}
}
private void ProcessSaleClearModify(ProductExt product, SaleClear saleClear = null)
{
if(saleClear == null)
{
if (MessageCenterUtils.Instance.IsSaleClear)
{
if (SaleClearUtils.Instance.Maps.ContainsKey(product.Id))
{
saleClear = SaleClearUtils.Instance.Maps[product.Id];
}
}
else
{
using (var db = Global.Instance.OpenDataBase)
{
saleClear = db.FirstOrDefault<SaleClear>("where productId = @0" , product.Id);
}
}
}
var dialogForm = new SaleClearModify(product , saleClear);
dialogForm.AcceptButtonClick += (o , args) =>
{
RefreshGrid();
};
dialogForm.CancelButtonClick += (o , args) => { };
TransparentForm trans = new TransparentForm(this , dialogForm);
trans.Show(this);
}
private void RefreshGrid()
{
try
{
List<SaleClear> rows = new List<SaleClear>();
var startTime = DateTime.Now.ToString("yyyy-MM-dd 00:00:00");
var endTime = DateTime.Now.ToString("yyyy-MM-dd 23:59:00");
//指定日期
if (checkBoxX1.Checked)
{
startTime = dateTime.Value.ToString("yyyy-MM-dd 00:00:00");
endTime = dateTime.Value.ToString("yyyy-MM-dd 23:59:00");
}
//启用消息中心并且可访问
if (MessageCenterUtils.Instance.IsSaleClear)
{
var result = MessageCenterUtils.Instance.GetSaleClearList(startTime);
rows = result.Item3;
}
else
{
//本地获取沽清数据
using (var db = Global.Instance.OpenDataBase)
{
rows = db.Query<SaleClear>(" where startTime <= @0 and endTime >= @1 and stopFlag == 0;" , endTime , startTime).ToList();
}
}
GridPanel panel = gridControl.PrimaryGrid;
//清理数据
panel.Rows.Clear();
foreach (var r in rows)
{
GridRow gridRow = new GridRow(r.Id , r.ProductName , r.Quantity, r.UnitName);
gridRow.RowHeight = 40;
gridRow.Tag = r;
panel.Rows.Add(gridRow);
panel.SetSelected(gridRow , true);
panel.SetActiveRow(gridRow);
}
//滚动条
this.gridControl.HScrollBarVisible = false;
this.gridControl.VScrollBarVisible = true;
this.gridControl.VScrollBar.Width = 0;
}
catch(Exception ex)
{
LOGGER.Error(ex , "加载沽清列表异常");
}
finally
{
}
}
private void GridControlRowActivated(object sender , GridRowActivatedEventArgs e)
{
if (e.NewActiveRow != null)
{
GridPanel panel = e.GridPanel;
panel.SetSelected(e.OldActiveRow , false);
panel.SetSelected(e.NewActiveRow , true);
panel.SetActiveRow(e.NewActiveRow);
if (e.NewActiveRow.Tag is SaleClear)
{
SaleClear saleClear = e.NewActiveRow.Tag as SaleClear;
this.ShowSaleClearDetail(saleClear);
}
}
}
private void ShowSaleClearDetail(SaleClear saleClear)
{
this.lblTotalQuantity.Text = string.Format(this.lblTotalQuantity.Tag.ToString() , saleClear.TotalQuantity);
this.lblNotifyQuantity.Text = string.Format(this.lblNotifyQuantity.Tag.ToString() , saleClear.NotifyQuantity);
this.lblSaleQuantity.Text = string.Format(this.lblSaleQuantity.Tag.ToString() , saleClear.SaleQuantity);
this.lblDateTimer.Text = string.Format(this.lblDateTimer.Tag.ToString() , saleClear.StartTime , saleClear.EndTime);
}
private void GridCellDoubleClick(object sender , GridCellDoubleClickEventArgs e)
{
if (e.MouseEventArgs.Button == MouseButtons.Left && e.GridCell.GridRow.Tag is SaleClear)
{
SaleClear saleClear = e.GridCell.GridRow.Tag as SaleClear;
var lists = Global.Product._productList;
ProductExt product = lists.FindLast(x => !string.IsNullOrEmpty(x.Id) && x.Id.Equals(saleClear.ProductId));
if(product != null)
{
this.ProcessSaleClearModify(product,saleClear);
}
}
}
private void GridControlCellClick(object sender , GridCellClickEventArgs e)
{
if (e.MouseEventArgs.Button == MouseButtons.Left && e.GridCell.GridRow.Tag is SaleClear)
{
SaleClear saleClear = e.GridCell.GridRow.Tag as SaleClear;
this.ShowSaleClearDetail(saleClear);
}
}
private void OnControlBoxCloseClick(object sender , EventArgs e)
{
if (this.Owner != null)
{
this.Owner.Close();
}
this.Close();
}
protected override void OnFormClosing(FormClosingEventArgs e)
{
e.Cancel = false;
}
private void OnShowOrHideTouchClick(object sender , EventArgs e)
{
this.detailPanel.Visible = !this.detailPanel.Visible;
}
private void OnSearchCustomClick(object sender , EventArgs e)
{
if (SimpleKeyboard.Showing())
{
this.keyboardPanel.Height = 0;
this.keyboardPanel.Visible = false;
SimpleKeyboard.CloseKeyboard();
}
else
{
this.keyboardPanel.Height = 250;
this.keyboardPanel.Visible = true;
var location = this.keyboardPanel.PointToScreen(Point.Empty);
var size = this.keyboardPanel.Size;
SimpleKeyboard.ShowKeyboard(this , location , size , false , null);
}
}
private void OnSearchTextChanged(object sender , EventArgs e)
{
var search = this.txtSearch.Text.Trim();
Task.Factory.StartNew(() =>
{
this.Invoke(new Action(() =>
{
try
{
var lists = Global.Product._productList;
var selectProduct = new List<ProductExt>();
selectProduct = lists.FindAll(x => (!string.IsNullOrEmpty(x.Spell) && x.Spell.Contains(search)) || (!string.IsNullOrEmpty(x.BarCode) && x.BarCode.Contains(search)) || (!string.IsNullOrEmpty(x.No) && x.No.Contains(search)));
this.productControl.PageNumber = 1;
this.productControl.BindDataSource(selectProduct, KeyboardAction.Search);
}
catch (Exception ex)
{
LOGGER.Error(ex, "加载商品信息异常");
}
}));
}).ContinueWith(task =>
{
//this.Invoke(new Action(() =>
//{
// MsgEvent.Send(Constant.PRODUCT_KEYBOARD_NOTIFY , KeyboardAction.Search);
//}));
});
}
private void OnSearchPanelVisibleChanged(object sender , EventArgs e)
{
this.txtSearch.Focus();
this.txtSearch.Text = string.Empty;
}
private void OnSearchCheckedChanged(object sender , EventArgs e)
{
this.RefreshGrid();
}
private void OnDateTimeValueChanged(object sender , EventArgs e)
{
this.checkBoxX1.Checked = false;
this.checkBoxX1.Checked = true;
}
private void OnPageChangeClick(object sender, EventArgs e)
{
var obj = sender as TouchLabelX;
string tag = obj.Tag as string;
//购物车换页
if (tag == "up")
{
this.gridControl.VScrollOffset -= this.gridControl.Height - 120;
}
else if (tag == "down")
{
this.gridControl.VScrollOffset += this.gridControl.Height - 120;
}
}
}
}