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.

319 lines
14 KiB
C#

using DevComponents.DotNetBar.Controls;
using DevComponents.DotNetBar.SuperGrid;
using POSV.Card;
using POSV.Entity;
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 DispatchTicketReceiveForm : BusinessForm
{
//仓库列表
private List<StoreStorage> storageList = new List<StoreStorage>();
private string storageId = null;
//选择的明细列表
DispatchTicketResponse dispatchTicketResponse;
List<DispatchTicketDetailResponse> detailList;
public DispatchTicketReceiveForm(DispatchTicketResponse dispatchTicketResponse, List<DispatchTicketDetailResponse> detailList)
{
InitializeComponent();
this.dispatchTicketResponse = dispatchTicketResponse;
this.detailList = detailList;
this.controlBox1.Text = "配送单验收";
this.controlBox1.ShowApplicationVersion = false;
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (this.DesignMode) return;
this.busNoTextBox.Text = dispatchTicketResponse.No;
this.askGoodsNoTextBox.Text = dispatchTicketResponse.AskGoodsNo;
this.statusBox.Text = "待收货";
this.linkManBox.Text = dispatchTicketResponse.LinkMan;
this.linkTelephoneTextBox.Text = dispatchTicketResponse.LinkTelephone;
this.addressTextBox.Text = dispatchTicketResponse.Address;
this.logisticsNoTextBox.Text = dispatchTicketResponse.LogisticsNo;
this.logisticsNameBox.Text = dispatchTicketResponse.LogisticsName;
this.orderMoneyTextBox.Text = string.Format("{0}", dispatchTicketResponse.Money);
this.logisticsFeeTextBox.Text = string.Format("{0}", dispatchTicketResponse.LogisticsFee);
this.totalMoneyTextBox.Text = string.Format("{0}", dispatchTicketResponse.Money);
this.receiveUserBox.Text = Global.Instance.BusinessPlanLog.WorkerNo;
this.receiveDateTextBox.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//仓库列表
InitStorageMenu();
foreach (DispatchTicketDetailResponse response in detailList)
{
response.DifferenceAmount = "0.00";
response.DifferenceMoney = "0.00";
response.ReceiveAmount = response.DispatchAmount;
response.SubtotalPrice = response.DispatchAmount;
}
detailListTable.PrimaryGrid.DataSource = detailList;
//可编辑cell颜色特殊标注
var panel = this.detailListTable.PrimaryGrid;
Color bgColor = ColorTranslator.FromHtml("193,255,192");
panel.Columns["receiveAmount"].CellStyles.Default.Background.Color1 = bgColor;
panel.Columns["description"].CellStyles.Default.Background.Color1 = bgColor;
}
private void InitStorageMenu()
{
StoreStorage storeStorage = new StoreStorage();
storeStorage.Id = "";
storeStorage.No = "";
storeStorage.Name = "全部仓库";
storageList.Add(storeStorage);
try
{
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuf = new StringBuilder();
sqlBuf.Append(" select id,no,name from pos_store_storage ;");
storageList.AddRange(db.Fetch<StoreStorage>(sqlBuf.ToString()));
}
}
catch (Exception ex)
{
LOGGER.Error(ex);
}
RefreshMain();
}
private void RefreshMain()
{
this.comboBoxEx1.DisplayMember = "name";
this.comboBoxEx1.ValueMember = "id";
this.comboBoxEx1.DataSource = storageList;
this.comboBoxEx1.SelectedIndexChanged += OnStorageSelectedIndexChanged;
}
private void OnStorageSelectedIndexChanged(object sender, EventArgs e)
{
var obj = sender as ComboBoxEx;
storageId = StringUtils.GetString(obj.SelectedValue);
}
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();
}
public delegate void EventHandler(object sender);
public event EventHandler OnTicktQuery;
private void exitClick(object sender, EventArgs e)
{
//先关闭父窗体
if (this.Owner != null)
{
this.Owner.Close();
}
//再关闭当前窗体
this.Close();
}
private void applyClick(object sender, EventArgs e)
{
this.buttonX1.Focus();
if (storageId == null || "".Equals(storageId))
{
this.ShowToastNotify(this, "请选择入库仓库");
return;
}
try
{
DispatchTicketReceiveRequest request = new DispatchTicketReceiveRequest();
request.StoreId = Global.Instance.BusinessPlanLog.StoreId;
request.No = dispatchTicketResponse.No;
request.DispatchId = dispatchTicketResponse.Id;
request.DispatchNo = dispatchTicketResponse.No;
request.StorageId = storageId;
request.ReceiveUser = Global.Instance.BusinessPlanLog.WorkerNo;
request.ReceiveDate = this.receiveDateTextBox.Text;
request.Description = this.memoTextBox.Text;
//遍历获取列表信息
var rows = this.detailListTable.PrimaryGrid.Rows;
List<DispatchTicketReceive> addDetail = new List<DispatchTicketReceive>();
if (rows.Count > 0)
{
foreach (var temRow in rows)
{
GridRow row = temRow as GridRow;
var ProductId = StringUtils.GetString(row.Cells["ProductId"].Value);
var ProductNo = StringUtils.GetString(row.Cells["productNo"].Value);
var ProductName = StringUtils.GetString(row.Cells["productName"].Value);
var SpecId = StringUtils.GetString(row.Cells["SpecId"].Value);
var SpecName = StringUtils.GetString(row.Cells["specName"].Value);
var ProductDescription = StringUtils.GetString(row.Cells["productDescription"].Value);
var DispatchUnitId = StringUtils.GetString(row.Cells["dispatchUnitId"].Value);
var DispatchUnitName = StringUtils.GetString(row.Cells["dispatchUnitName"].Value);
var Price = StringUtils.GetDecimal(row.Cells["price"].Value);
var AskgoodsAmount = StringUtils.GetDecimal(row.Cells["askgoodsAmount"].Value);
var DispatchAmount = StringUtils.GetDecimal(row.Cells["dispatchAmount"].Value);
var ReceiveAmount = StringUtils.GetDecimal(row.Cells["receiveAmount"].Value);
var SubtotalPrice = StringUtils.GetDecimal(row.Cells["subtotalPrice"].Value);
var DifferenceAmount = StringUtils.GetDecimal(row.Cells["differenceAmount"].Value);
var DifferencePrice = StringUtils.GetDecimal(row.Cells["differenceMoney"].Value);
var Description = StringUtils.GetString(row.Cells["description"].Value);
DispatchTicketReceive dispatchTicketReceive = new DispatchTicketReceive();
dispatchTicketReceive.ProductId = ProductId;
dispatchTicketReceive.ProductNo = ProductNo;
dispatchTicketReceive.ProductName = ProductName;
dispatchTicketReceive.SpecId = SpecId;
dispatchTicketReceive.SpecName = SpecName;
dispatchTicketReceive.ProductDescription = ProductDescription;
dispatchTicketReceive.DispatchUnitId = DispatchUnitId;
dispatchTicketReceive.DispatchUnitName = DispatchUnitName;
dispatchTicketReceive.DispatchPrice = Price;
dispatchTicketReceive.AskgoodsAmount = AskgoodsAmount;
dispatchTicketReceive.DispatchAmount = DispatchAmount;
dispatchTicketReceive.ReceiveAmount = ReceiveAmount;
dispatchTicketReceive.SubtotalPrice = SubtotalPrice;
dispatchTicketReceive.DifferenceAmount = DifferenceAmount;
dispatchTicketReceive.DifferencePrice = DifferencePrice;
dispatchTicketReceive.Description = Description;
addDetail.Add(dispatchTicketReceive);
}
}
request.Detail = addDetail;
var response = StockUtils.DispatchTicketReceive(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 OnCellValueChanged(object sender, GridCellValueChangedEventArgs e)
{
var cell = e.GridCell;
if (cell.GridColumn.Name == "receiveAmount")
{
var row = cell.GridRow;
var price = StringUtils.GetDecimal(row.Cells["price"].Value);//配送价
var dispatchAmount = StringUtils.GetDecimal(row.Cells["dispatchAmount"].Value);//配送数量
var money = StringUtils.GetDecimal(row.Cells["money"].Value);//配送金额
var amount = StringUtils.GetDecimal(row.Cells["receiveAmount"].Value);//收货数量
var subtotalPrice = price * amount;
row.Cells["subtotalPrice"].Value = StringUtils.FormatDataTwoDigit(subtotalPrice);
row.Cells["differenceAmount"].Value = StringUtils.FormatDataTwoDigit(amount - dispatchAmount);//差异数量= 验收数量-配送数量
row.Cells["differenceMoney"].Value = StringUtils.FormatDataTwoDigit(money - subtotalPrice);//差异金额= 验收金额-配送金额
if (amount - dispatchAmount != 0)
{
row.CellStyles.Default.TextColor = Color.Red;
}
else
{
row.CellStyles.Default.TextColor = Color.Black;
}
}
}
private void OnBeginEdit(object sender, GridEditEventArgs e)
{
var cell = e.GridCell;
var cellPoint = this.detailListTable.PointToScreen(cell.LocationRelative);
if (cell.GridColumn.Name == "receiveAmount")
{
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();
}
}
}