using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using PosDataTest.Common;
namespace PosDataTest
{
public class GoodsAddHelper
{
///
/// 留夫鸭销售模式
///
/// 条码
/// 销售列表
/// out[保质期状态]
/// out[商品行]
///
public static bool GetLFY(string inputBarcode, DataTable commodityTable,
out PosDictionary.GuaranteeState guaranteeState, out DataRow commodityRow)
{
//01234567 8901 234567 89
//05314020 0290 180914 08808
if (inputBarcode.Length < 23)
{
commodityRow = null;
guaranteeState = PosDictionary.GuaranteeState.OK;
return false;
}
string _strBarcode = inputBarcode.Substring(0, 8);
string _strWeight = inputBarcode.Substring(8, 4);
if (!decimal.TryParse(_strWeight, out decimal _decWeight))
{
commodityRow = null;
guaranteeState = PosDictionary.GuaranteeState.OK;
return false;
}
_decWeight = _decWeight / 1000;
string _strProductionDate = inputBarcode.Substring(12, 6);
if (!DateTime.TryParseExact(_strProductionDate, "yyMMdd",
System.Globalization.CultureInfo.CurrentCulture,
System.Globalization.DateTimeStyles.None,
out DateTime _ProductionDate))
{
commodityRow = null;
guaranteeState = PosDictionary.GuaranteeState.OK;
return false;
}
string _strSelect = string.Format(@"SELECT DISTINCT A.COMMODITY_NAME,A.COMMODITY_RETAILPRICE,
A.COMMODITY_CODE,A.COMMODITY_TYPE,A.COMMODITY_SYMBOL,A.COMMODITY_BARCODE,
A.COMMODITY_MEMBERPRICE,ISNULL(A.METERINGMETHOD,1) AS METERINGMETHOD,
ISNULL(A.GUARANTEE_DAY,0) AS GUARANTEE_DAY,ISNULL(A.REMINDER_DAY,0) AS REMINDER_DAY,
ISNULL(B.KITCHENCONFIG_INDEX,1000) AS KITCHENCONFIG_INDEX,A.COMMODITY_UNIT
FROM T_COMMODITYEX A LEFT JOIN T_KITCHENCONFIG B ON A.COMMODITY_TYPE = B.COMMODITYTYPE
WHERE A.ISVALID = 1 AND A.SERVERPARTSHOP_ID = {0} AND A.COMMODITY_BARCODE = '{1}'",
QualityHelper.serverpartshop_id, _strBarcode);
try
{
using (DataTable _DataTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(_strSelect).Tables[0])
{
if (_DataTable.Rows.Count > 0)
{
commodityRow = commodityTable.NewRow();
commodityRow["commodity_barcode"] = _DataTable.Rows[0]["COMMODITY_BARCODE"];
commodityRow["commodity_name"] = _DataTable.Rows[0]["COMMODITY_NAME"];
commodityRow["commodity_unit"] = _DataTable.Rows[0]["COMMODITY_UNIT"];
commodityRow["PrintGoodsName"] = _DataTable.Rows[0]["COMMODITY_NAME"];
commodityRow["commodity_code"] = _DataTable.Rows[0]["COMMODITY_CODE"];
commodityRow["commodity_retailprice"] = _DataTable.Rows[0]["COMMODITY_RETAILPRICE"];
commodityRow["discount_rate"] = 0;
commodityRow["actualprice"] = _DataTable.Rows[0]["COMMODITY_RETAILPRICE"];
commodityRow["memberprice"] = _DataTable.Rows[0]["COMMODITY_MEMBERPRICE"];
commodityRow["price"] = (decimal)_DataTable.Rows[0]["METERINGMETHOD"] == 1 ?
(decimal)_DataTable.Rows[0]["COMMODITY_RETAILPRICE"] :
((decimal)_DataTable.Rows[0]["COMMODITY_RETAILPRICE"] * _decWeight);
commodityRow["count"] = (decimal)_DataTable.Rows[0]["METERINGMETHOD"] == 1 ? 1 : _decWeight;
commodityRow["foreground"] = "#575757";
commodityRow["background"] = "#91DAC9";
commodityRow["kitchenindex"] = _DataTable.Rows[0]["KITCHENCONFIG_INDEX"];
commodityRow["commodity_type"] = _DataTable.Rows[0]["COMMODITY_TYPE"];
commodityRow["commodity_symbol"] = _DataTable.Rows[0]["COMMODITY_SYMBOL"];
//计算到期日期
if ((decimal)_DataTable.Rows[0]["GUARANTEE_DAY"] > 0)
{
DateTime _GuaranteeDate = _ProductionDate.AddDays((int)(decimal)_DataTable.Rows[0]["GUARANTEE_DAY"]);
if (_GuaranteeDate < DateTime.Today)
{
guaranteeState = PosDictionary.GuaranteeState.Expire;
}
else
{
if ((_GuaranteeDate - DateTime.Today).TotalDays <= (int)(decimal)_DataTable.Rows[0]["REMINDER_DAY"])
{
guaranteeState = PosDictionary.GuaranteeState.Reminder;
}
else
{
guaranteeState = PosDictionary.GuaranteeState.OK;
}
}
}
else
{
guaranteeState = PosDictionary.GuaranteeState.OK;
}
return true;
}
else
{
commodityRow = null;
guaranteeState = PosDictionary.GuaranteeState.OK;
return false;
}
}
}
catch (Exception ex)
{
ESSupport.Lib.LogHelper.WriteServiceLog("留夫鸭错误:" + ex.Message);
commodityRow = null;
guaranteeState = PosDictionary.GuaranteeState.OK;
return false;
}
}
///
/// 查询商品信息
///
/// 商品条码
/// 商品列表
/// 称重标识
/// 是否叠加
///
public static DataRow IsVague(string inputBarcode, DataTable goodsTable, string weighSign, out bool IsOverly)
{
DataRow _DataRow = goodsTable.NewRow();
IsOverly = true;
decimal Price = 0;
decimal Count = 0;
string sql = string.Format(@"SELECT DISTINCT A.COMMODITY_NAME,A.COMMODITY_RETAILPRICE,
A.COMMODITY_CODE,A.COMMODITY_TYPE,A.COMMODITY_SYMBOL,A.COMMODITY_BARCODE,
A.COMMODITY_MEMBERPRICE,ISNULL(B.KITCHENCONFIG_INDEX,1000) AS KITCHENCONFIG_INDEX,
ISNULL(A.METERINGMETHOD,1) AS METERINGMETHOD,A.COMMODITY_UNIT
FROM T_COMMODITYEX A LEFT JOIN T_KITCHENCONFIG B ON A.COMMODITY_TYPE = B.COMMODITYTYPE
WHERE A.ISVALID = 1 AND A.SERVERPARTSHOP_ID = {0} AND {1}",
ESSupport.DataStorage.DataFunction.QueryShopID(QualityHelper.serverpartcode,QualityHelper.shopcode),
(QualityHelper.input_mode == "1" && inputBarcode.Length <= 4) ?
string.Format(" COMMODITY_HOTKEY = '{0}'", inputBarcode) :
string.Format(" (COMMODITY_BARCODE = '{0}' OR COMMODITY_CODE = '{0}' OR UPPER(COMMODITY_EN) = '{0}')",
inputBarcode.ToUpper()));
DataTable _GoodsTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(sql).Tables[0];
if (_GoodsTable.Rows.Count > 1)
{
return null;
}
if (_GoodsTable.Rows.Count == 0)
{
if (inputBarcode.Length < 13)
{
return null;
}
string _strGoodsSign = inputBarcode.Substring(0, 2);
string _strCommodityCode = "";
if (_strGoodsSign == weighSign)
{
_strCommodityCode = inputBarcode.Substring(2, 5);
_GoodsTable = ESSupport.Lib.SyBaseHelper.QueryOdbc(string.Format(
@"SELECT DISTINCT A.COMMODITY_NAME,A.COMMODITY_RETAILPRICE,
A.COMMODITY_CODE,A.COMMODITY_TYPE,A.COMMODITY_SYMBOL,
A.COMMODITY_BARCODE,A.COMMODITY_RULE,A.COMMODITY_MEMBERPRICE,
ISNULL(A.METERINGMETHOD,1) AS METERINGMETHOD,
ISNULL(B.KITCHENCONFIG_INDEX,1000) AS KITCHENCONFIG_INDEX,A.COMMODITY_UNIT
FROM T_COMMODITYEX A LEFT JOIN T_KITCHENCONFIG B
ON A.COMMODITY_TYPE = B.COMMODITYTYPE,T_COMMODITYSCALE C
WHERE A.ISVALID = 1 AND A.SERVERPARTSHOP_ID = {0} AND
A.COMMODITY_CODE = C.COMMODITY_CODE AND C.SCALE_CODE = '{1}'",
QualityHelper.serverpartshop_id, _strCommodityCode)).Tables[0];
if (_GoodsTable.Rows.Count == 1)
{
if ((decimal)_GoodsTable.Rows[0]["METERINGMETHOD"] == 0)
{
IsOverly = false;
Price = decimal.Parse(inputBarcode.Substring(7, 5)) / 100;
Count = Math.Round(Price / (decimal)_GoodsTable.Rows[0]["COMMODITY_RETAILPRICE"], 3, MidpointRounding.AwayFromZero);
}
else
{
return null;
}
}
else
{
return null;
}
}
else
{
return null;
}
}
_DataRow["commodity_barcode"] = _GoodsTable.Rows[0]["commodity_barcode"];
_DataRow["commodity_name"] = _GoodsTable.Rows[0]["commodity_name"];
_DataRow["commodity_unit"] = _GoodsTable.Rows[0]["commodity_unit"];
_DataRow["PrintGoodsName"] = _GoodsTable.Rows[0]["commodity_name"];
_DataRow["commodity_code"] = _GoodsTable.Rows[0]["commodity_code"];
_DataRow["commodity_retailprice"] = _GoodsTable.Rows[0]["commodity_retailprice"];
_DataRow["discount_rate"] = 0;
_DataRow["actualprice"] = _GoodsTable.Rows[0]["commodity_retailprice"];
_DataRow["memberprice"] = _GoodsTable.Rows[0]["commodity_memberprice"];
_DataRow["price"] = IsOverly ? (decimal)_GoodsTable.Rows[0]["commodity_retailprice"] : Price;
_DataRow["count"] = IsOverly ? 1 : Count;
_DataRow["foreground"] = "#575757";
_DataRow["background"] = "#91DAC9";
_DataRow["kitchenindex"] = _GoodsTable.Rows[0]["kitchenconfig_index"];
_DataRow["commodity_type"] = _GoodsTable.Rows[0]["commodity_type"];
_DataRow["commodity_symbol"] = _GoodsTable.Rows[0]["commodity_symbol"];
_DataRow["meteringmethod"] = _GoodsTable.Rows[0]["meteringmethod"];
_DataRow["kitchenconfig_index"] = _GoodsTable.Rows[0]["kitchenconfig_index"];
_DataRow["commodity_memberprice"] = _GoodsTable.Rows[0]["commodity_memberprice"];
return _DataRow;
}
}
}