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.

1365 lines
53 KiB
C#

using Newtonsoft.Json;
using NLog;
using POSV.Card;
using POSV.Proxy.Base;
using POSV.Proxy.Common;
using POSV.Stock;
using POSV.Utils;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using static POSV.Proxy.Common.CefOperationDelegation;
namespace POSV.Proxy.Stock
{
public class CostControlList : FromBase
{
public CostControlList()
{
this.LOGGER = LogManager.GetLogger(GetType().FullName);
}
//==========================全局变量===========================
private readonly Logger LOGGER = null;
private string m_displayType = "新增";
private StoreCostTicketDetailResponse storeCostTicketDetailResponse = new StoreCostTicketDetailResponse();
/// <summary>
/// 状态
/// </summary>
public int m_Status = -1;//状态
/// <summary>
/// 选中的单据ID
/// </summary>
public string m_TicketId = null;//选中的单据ID
/// <summary>
/// 单号
/// </summary>
public string m_No = null;//单号
/// <summary>
/// 查询开始时间
/// </summary>
public DateTime m_StartPicker = Convert.ToDateTime(DateTime.Now.AddDays(-7).ToString("yyyy-MM-dd 00:00:00"));
/// <summary>
/// 查询结束时间
/// </summary>
public DateTime m_EndPicker = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd 23:59:59"));
/// <summary>
/// 分页参数
/// </summary>
public PageObject m_pageObject = new PageObject();
/// <summary>
/// 最后汇总时间
/// </summary>
public const string FINALSUMMARYTIME = "FinalSummaryTime";
/// <summary>
/// 单据信息数据
/// </summary>
public List<StoreCostTicketSalesinfoProduct> m_ProductList = null;
public string m_SummData = "";
/// <summary>
/// 状态string
/// </summary>
public string StatusStr
{
get
{
switch (m_Status)
{
case 0:
return "待审核";
case 1:
return "已审核";
case 2:
return "已作废";
default:
return "全部";
}
}
}
/// <summary>
/// 页面类型
/// </summary>
public string DisplayType { get => m_displayType; set => m_displayType = value; }
/// <summary>
/// 当前单据数据
/// </summary>
public StoreCostTicketDetailResponse StoreCostTicketDetailResponse { get => storeCostTicketDetailResponse; set => storeCostTicketDetailResponse = value; }
public string GetStoreCostTicketDetailResponse()
{
return JsonConvert.SerializeObject(StoreCostTicketDetailResponse);
}
/// <summary>
/// 辅助
/// </summary>
public void AuxiliaryTABKey()
{
InputSimulatorUtils.SendKey(KeyCodes.Map["tab"]);
}
/// <summary>
/// 跳转
/// </summary>
public void LoadModule(string str)
{
if (string.IsNullOrEmpty(str))
{
return;
}
if (this.m_LoadPageEvent == null)
{
return;
}
switch (str)
{
case "新增经营会计报表":
this.m_LoadPageEvent("custom://form/AddCostControl.html");
break;
case "经营会计报表":
this.m_LoadPageEvent("custom://form/CostControlList.html");
break;
case "审核经营会计报表":
this.m_LoadPageEvent("custom://form/AddCostControl.html");
break;
case "修改经营会计报表":
this.m_LoadPageEvent("custom://form/AddCostControl.html");
break;
case "查看经营会计报表":
this.m_LoadPageEvent("custom://form/AddCostControl.html");
break;
default:
this.m_LoadPageEvent("custom://form/CostControlList.html");
break;
}
}
/// <summary>
/// 前端传入 查询参数
/// </summary>
public void SetQueryCondition(string _status, string _no, string _startPicker, string _endPicker)
{
int status = -1;
int.TryParse(_status, out status);
this.m_Status = status;
this.m_No = _no;
if (!string.IsNullOrEmpty(_startPicker) && !string.IsNullOrEmpty(_endPicker))
{
this.m_StartPicker = DateTime.Parse(_startPicker);
this.m_EndPicker = DateTime.Parse(_endPicker);
}
}
/// <summary>
/// 获取查询参数
/// </summary>
/// <returns></returns>
public string GetQueryCondition()
{
ReturnInfo<object> returnInfo = new ReturnInfo<object>();
var _data = new
{
No = m_No,
Status = m_Status,
StartPicker = m_StartPicker.ToString("yyyy-MM-dd HH:mm:ss"),
EndPicker = m_EndPicker.ToString("yyyy-MM-dd HH:mm:ss")
};
returnInfo.Code = ReturnState.Succeed;
returnInfo.Data = _data;
return JsonConvert.SerializeObject(returnInfo);
}
/// <summary>
/// 查询单据
/// </summary>
public string BtnQuery()
{
return JsonConvert.SerializeObject(this.CostControlListQuery());
}
/// <summary>
/// 获取经营成本模板
/// </summary>
/// <param name="summData">汇总日期</param>
public string GetTicketTemplate()
{
if (this.DisplayType == "审核" || this.DisplayType == "查看")
{
this.UpdataStoreCostTicketDetailResponse();
ReturnInfo<object> _Return = new ReturnInfo<object>();
_Return.Code = 0;
this.StoreCostTicketDetailResponse.ProductMoreChange.ForEach(f => { f.NotCalculate = true; });
this.StoreCostTicketDetailResponse.ProductChange.ForEach(f => { f.NotCalculate = true; });
_Return.Data = this.StoreCostTicketDetailResponse;
return JsonConvert.SerializeObject(_Return);
}
else if (this.DisplayType == "修改")
{
this.UpdataStoreCostTicketDetailResponse();
ReturnInfo<object> _Return = new ReturnInfo<object>();
_Return.Code = 0;
var _data = JsonConvert.DeserializeObject<StoreCostTicketDetailResponse>(JsonConvert.SerializeObject(this.StoreCostTicketDetailResponse));
this.TicketTemplateQuery(DateTime.Parse(StoreCostTicketDetailResponse.SummaryDate));
this.StoreCostTicketDetailResponse.No = _data.No;
this.StoreCostTicketDetailResponse.CreateDate = _data.CreateDate;
this.StoreCostTicketDetailResponse.ProductChange.ForEach(f =>
{
if (f.CostType == 0)
{
var _todayStock = _data.ProductChange.FirstOrDefault(a => a.ProductId == f.ProductId)?.TodayStock;
f.TodayStock = _todayStock == null ? 0 : (decimal)_todayStock;
}
else if (f.CostType == 1)
{
var _todayIn = _data.ProductChange.FirstOrDefault(a => a.ProductId == f.ProductId)?.TodayIn;
f.TodayIn = _todayIn == null ? 0 : (decimal)_todayIn;
}
else
{
var _cost = _data.ProductChange.FirstOrDefault(a => a.ProductId == f.ProductId)?.Cost;
f.Cost = _cost == null ? 0 : (decimal)_cost;
}
});
this.StoreCostTicketDetailResponse.ProductMoreChange.ForEach(f =>
{
if (f.CostType == 0)
{
var _todayStock = _data.ProductMoreChange.FirstOrDefault(a => a.ProductId == f.ProductId)?.TodayStock;
f.TodayStock = _todayStock == null ? 0 : (decimal)_todayStock;
}
else if (f.CostType == 1)
{
var _todayIn = _data.ProductMoreChange.FirstOrDefault(a => a.ProductId == f.ProductId)?.TodayIn;
f.TodayIn = _todayIn == null ? 0 : (decimal)_todayIn;
}
else
{
var _cost = _data.ProductMoreChange.FirstOrDefault(a => a.ProductId == f.ProductId)?.Cost;
f.Cost = _cost == null ? 0 : (decimal)_cost;
}
});
this.StoreCostTicketDetailResponse.ProductFixedChange.ForEach(f =>
{
var _money = _data.ProductFixedChange.FirstOrDefault(a => a.ItemId == f.ItemId)?.Money;
f.Money = _money == null ? 0 : (decimal)_money;
});
this.StoreCostTicketDetailResponse.ProductOtherChange.ForEach(f =>
{
var _money = _data.ProductOtherChange.FirstOrDefault(a => a.ItemId == f.ItemId)?.Money;
f.Money = _money == null ? 0 : (decimal)_money;
});
_Return.Data = this.StoreCostTicketDetailResponse;
return JsonConvert.SerializeObject(_Return);
}
else
{
return JsonConvert.SerializeObject(this.TicketTemplateQuery(GetChoosableDate()));
}
}
/// <summary>
/// 最后可汇总时间
/// </summary>
public DateTime GetChoosableDate()
{
DateTime _itme = DateTime.Now;
if (string.IsNullOrEmpty(this.m_SummData))
{
if (!string.IsNullOrEmpty(Global.Instance.GlobalConfigStringValue(FINALSUMMARYTIME)))
{
try
{
_itme = DateTime.Parse(Global.Instance.GlobalConfigStringValue(FINALSUMMARYTIME));
}
catch
{
}
}
}
else
{
_itme = DateTime.Parse(this.m_SummData);
this.m_SummData = string.Empty;
}
return _itme;
}
/// <summary>
/// ProductChange计算后数据
/// </summary>
public string SetProductCalculate(string StrJson)
{
return JsonConvert.SerializeObject(this.ProductCalculate(StrJson));
}
/// <summary>
/// ProductMore计算后数据
/// </summary>
public string SetProductMoreCalculate(string StrJson)
{
return JsonConvert.SerializeObject(this.ProductMoreCalculate(StrJson));
}
/// <summary>
/// ProductOther计算后数据
/// </summary>
public string SetProductOtherCalculate(string StrJson)
{
return JsonConvert.SerializeObject(this.ProductOtherCalculate(StrJson));
}
/// <summary>
/// ProductFixedChange计算后数据
/// </summary>
public string SetProductFixedChangeCalculate(string StrJson)
{
return JsonConvert.SerializeObject(this.ProductFixedChangeCalculate(StrJson));
}
public string GetProductCalculateData(string id)
{
ReturnInfo<StoreCostTicketDetailProductChange> returnInfo = new ReturnInfo<StoreCostTicketDetailProductChange>();
var _data = this.StoreCostTicketDetailResponse.ProductChange.FirstOrDefault(f => f.ProductId == id);
if (_data == null)
{
returnInfo.ErrorMessage = "编辑的商品无法找到源数据";
return JsonConvert.SerializeObject(returnInfo);
}
returnInfo.Data = _data;
returnInfo.Code = ReturnState.Succeed;
return JsonConvert.SerializeObject(returnInfo);
}
public string GetProductMoreCalculateData(string id)
{
ReturnInfo<StoreCostTicketDetailProductMoreChange> returnInfo = new ReturnInfo<StoreCostTicketDetailProductMoreChange>();
var _data = this.StoreCostTicketDetailResponse.ProductMoreChange.FirstOrDefault(f => f.ProductId == id);
if (_data == null)
{
returnInfo.ErrorMessage = "编辑的商品无法找到源数据";
return JsonConvert.SerializeObject(returnInfo);
}
returnInfo.Data = _data;
returnInfo.Code = ReturnState.Succeed;
return JsonConvert.SerializeObject(returnInfo);
}
public string GetProductOtherCalculateData(string id)
{
ReturnInfo<StoreCostTicketDetailProductOtherChange> returnInfo = new ReturnInfo<StoreCostTicketDetailProductOtherChange>();
var _data = this.StoreCostTicketDetailResponse.ProductOtherChange.FirstOrDefault(f => f.ItemId == id);
if (_data == null)
{
returnInfo.ErrorMessage = "编辑的项无法找到源数据";
return JsonConvert.SerializeObject(returnInfo);
}
returnInfo.Data = _data;
returnInfo.Code = ReturnState.Succeed;
return JsonConvert.SerializeObject(returnInfo);
}
public string GetProductFixedChangeCalculateData(string id)
{
ReturnInfo<StoreCostTicketDetailProductFixedChange> returnInfo = new ReturnInfo<StoreCostTicketDetailProductFixedChange>();
var _data = this.StoreCostTicketDetailResponse.ProductFixedChange.FirstOrDefault(f => f.ItemId == id);
if (_data == null)
{
returnInfo.ErrorMessage = "编辑的项无法找到源数据";
return JsonConvert.SerializeObject(returnInfo);
}
returnInfo.Data = _data;
returnInfo.Code = ReturnState.Succeed;
return JsonConvert.SerializeObject(returnInfo);
}
/// <summary>
/// 退出
/// </summary>
public void BtnExit()
{
}
/// <summary>
/// 保存
/// </summary>
public string Save()
{
ReturnInfo<string> m_request = new ReturnInfo<string>();
StoreCostTicketSaveRequest saveRequest = new StoreCostTicketSaveRequest();
saveRequest.StoreId = Global.Instance.Authc.StoreId;
saveRequest.Operator = Global.Instance.BusinessPlanLog.WorkerNo;
saveRequest.storeCostTicketDetailResponse = this.StoreCostTicketDetailResponse;
var _data = StockUtils.StoreCostTicketSave(saveRequest);
if (_data.Item1)
{
m_request.Code = ReturnState.Succeed;
}
else
{
if (_data.Item3 != null)
{
m_request.ErrorMessage = _data.Item3.Message;
}
else
{
m_request.ErrorMessage = _data.Item2;
}
}
return JsonConvert.SerializeObject(m_request);
}
/// <summary>
/// 选中当前行
/// </summary>
/// <param name="_TicketId"></param>
public void SetSelectedRow(string _TicketId)
{
this.m_TicketId = _TicketId;
}
/// <summary>
/// 审核单据
/// </summary>
/// <returns></returns>
public string AuditStoreCostTicket()
{
StoreCostTicketUpdateStatusRequest storeCostTicketUpdate = new StoreCostTicketUpdateStatusRequest();
storeCostTicketUpdate.Operator = Global.Instance.BusinessPlanLog.WorkerNo;//制单人
storeCostTicketUpdate.StoreId = Global.Instance.Authc.StoreId;
storeCostTicketUpdate.TicketId = this.StoreCostTicketDetailResponse.Id;
storeCostTicketUpdate.Type = 1;
return JsonConvert.SerializeObject(this.StoreCostTicketUpdateStatusResponse(storeCostTicketUpdate));
}
public string Cancellation()
{
StoreCostTicketUpdateStatusRequest storeCostTicketUpdate = new StoreCostTicketUpdateStatusRequest();
storeCostTicketUpdate.Operator = Global.Instance.BusinessPlanLog.WorkerNo;//制单人
storeCostTicketUpdate.StoreId = Global.Instance.Authc.StoreId;
storeCostTicketUpdate.TicketId = this.m_TicketId;
storeCostTicketUpdate.Type = 2;
return JsonConvert.SerializeObject(this.StoreCostTicketUpdateStatusResponse(storeCostTicketUpdate));
}
public string StoreCostTicketUpdate()
{
StoreCostTicketUpdateRequest storeCostTicketUpdate = new StoreCostTicketUpdateRequest();
storeCostTicketUpdate.storeCostTicketDetailResponse = this.StoreCostTicketDetailResponse;
storeCostTicketUpdate.StoreId = Global.Instance.Authc.StoreId;
storeCostTicketUpdate.Operator = Global.Instance.BusinessPlanLog.WorkerNo;
return JsonConvert.SerializeObject(this.StoreCostTicketUpdate(storeCostTicketUpdate));
}
public void UpdataStoreCostTicketDetailResponse()
{
if (!string.IsNullOrEmpty(this.m_TicketId))
{
StoreCostTicketDetail(this.m_TicketId);
}
}
public void SetSummData(string _summData)
{
this.m_SummData = _summData;
this.m_ReloadFormEvent();
}
public void SetDescription(string str)
{
this.StoreCostTicketDetailResponse.Description = str;
}
//==========================私有函数===========================
/// <summary>
/// 查询数据
/// </summary>
private ReturnInfo<List<StoreCostTicketResponse>> CostControlListQuery()
{
ReturnInfo<List<StoreCostTicketResponse>> _Return = new ReturnInfo<List<StoreCostTicketResponse>>();
try
{
var request = new StoreCostTicketRequest();
request.StoreId = Global.Instance.Authc.StoreId;
if (!string.IsNullOrEmpty(this.m_No))
{
request.No = this.m_No;
request.Status = -1;
}
else
{
request.Status = this.m_Status;
request.StartTime = this.m_StartPicker.ToString("yyyy-MM-dd HH:mm:ss");
request.EndTime = this.m_EndPicker.ToString("yyyy-MM-dd HH:mm:ss");
}
request.PageNumber = this.m_pageObject.PageNumber;
request.PageSize = this.m_pageObject.PageSize;
var response = StockUtils.StoreCostTicket(request);
//成功
if (response.Item1)
{
List<StoreCostTicketResponse> storeCostTicketResponse = response.Item3.List;
foreach (StoreCostTicketResponse ticketResponse in storeCostTicketResponse)
{
switch (ticketResponse.Status)
{
case 0:
ticketResponse.StatusName = "待审核";
break;
case 1:
ticketResponse.StatusName = "已审核";
break;
case 2:
ticketResponse.StatusName = "已作废";
break;
default:
ticketResponse.StatusName = "其他";
break;
}
}
this.m_pageObject.PageCount = response.Item3.PageCount;
this.m_pageObject.PageNumber = response.Item3.PageNumber;
this.m_pageObject.TotalCount = response.Item3.TotalCount;
// this.m_pageObject.PageSize = response.Item3.PageSize;
_Return.Data = storeCostTicketResponse.OrderByDescending(f => f.CreateDate).ToList();
_Return.Code = ReturnState.Succeed;
return _Return;
}
else
{
_Return.ErrorMessage = response.Item2;
return _Return;
}
}
catch (Exception ex)
{
LOGGER.Error(ex, "经营会计报表查询异常");
_Return.ErrorMessage = ex.Message;
return _Return;
}
}
/// <summary>
/// 获取模板
/// </summary>
/// <param name="summData">汇总日期</param>
private ReturnInfo<object> TicketTemplateQuery(DateTime summData)
{
ReturnInfo<object> _Return = new ReturnInfo<object>();
List<StoreCostTicketTemplateProductChange> ProductChangeList = null;
List<StoreCostTicketTemplateProductMoreChange> MoreChangeList = null;
List<StoreCostTicketTemplateProductOtherChange> OtherChangeList = null;
List<StoreCostTicketTemplateProductFixedChange> FixedChangeList = null;
List<StoreCostTicketSalesinfoProductType> ProductTypeList = null;
List<StoreCostTicketSalesinfoPayType> PayTypeList = null;
string amount = string.Format("{0}", 0.00M);
string discountAmount = string.Format("{0}", 0.00M);
string receivableAmount = string.Format("{0}", 0.00M);
string ticketCount = string.Format("{0}", 0);
string peoplePrice = string.Format("{0}", 0.00M);
string boxAmount = string.Format("{0}", 0.00M);
string workerAmount = string.Format("{0}", 0.00M);
//第一步加载主单数据
var busNo = string.Format("K{0}{1}", DateTime.Now.ToString("yyyyMMddHHmmss"), Global.Instance.BusinessPlanLog.PosNo);//单据编号
var storeName = Global.Instance.Worker.StoreInfo.Name;//门店名称
var setMan = Global.Instance.BusinessPlanLog.WorkerNo;//制单人
var setDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");//制单时间
var dateInputPicker = summData;//汇总日期
var status = "新建";
var totalCost = string.Format("{0}", 0.00M);
var profit = string.Format("{0}", 0.00M);
#region 获取汇总数据
var request = new StoreCostTicketSalesinfoRequest();
request.StoreId = Global.Instance.Authc.StoreId;
request.Date = summData.ToString("yyyy-MM-dd");
var response = StockUtils.StoreCostTicketSalesinfo(request);
if (response.Item1)
{
if (response.Item3.Data == null)
{
_Return.ErrorMessage = "汇总数据获取失败," + response.Item2;
ProductTypeList = new List<StoreCostTicketSalesinfoProductType>();
PayTypeList = new List<StoreCostTicketSalesinfoPayType>();
m_ProductList = new List<StoreCostTicketSalesinfoProduct>();
}
else
{
//营业额
amount = string.Format("{0}", response.Item3.Data.Amount);
//折扣金额
discountAmount = string.Format("{0}", response.Item3.Data.DiscountAmount);
//应收金额
receivableAmount = string.Format("{0}", response.Item3.Data.ReceivableAmount);
//单数
ticketCount = string.Format("{0}", response.Item3.Data.TicketCount);
//客单价
peoplePrice = string.Format("{0}", response.Item3.Data.PeoplePrice);
//餐盒费
boxAmount = string.Format("{0}", response.Item3.Data.BoxAmount);
//员工餐
workerAmount = string.Format("{0}", response.Item3.Data.WorkerAmount);
//第六步加载分类汇总
ProductTypeList = response.Item3.Data.ProductTypeList;
//第七步加载支付方式汇总
PayTypeList = response.Item3.Data.PayTypeList;
//第八步加载单品销售信息
m_ProductList = response.Item3.Data.ProductList;
}
}
else
{
_Return.ErrorMessage = "汇总数据获取失败," + response.Item2;
return _Return;
}
#endregion
#region 获取成本模板
var request1 = new StoreCostTicketTemplateInfoRequest();
request1.StoreId = Global.Instance.Authc.StoreId;
request1.DateTime = summData.ToString("yyyy-MM-dd");
var response1 = StockUtils.StoreCostTicketTemplateInfo(request1);
if (response1.Item1)
{
if (response1.Item3.Data == null)
{
_Return.ErrorMessage = "成本数据获取失败," + response.Item2;
}
else
{
//第二步加载生产变动成本模板数据
ProductChangeList = response1.Item3.Data.ProductChangeList;
//第三步加载辅助生产变动成本模板数据
MoreChangeList = response1.Item3.Data.MoreChangeList;
//第四步加载其他变动费用成本模板数据
OtherChangeList = response1.Item3.Data.OtherChangeList;
//第五步加载固定费成本模板数据
FixedChangeList = response1.Item3.Data.FixedChangeList;
}
}
else
{
_Return.ErrorMessage = "成本数据获取失败," + response.Item2;
return _Return;
}
#endregion
this.StoreCostTicketDetailResponse.TenantId = Global.Instance.Worker.StoreInfo.TenantId;
this.StoreCostTicketDetailResponse.No = busNo;
this.StoreCostTicketDetailResponse.StoreNo = Global.Instance.Worker.StoreInfo.No;
this.StoreCostTicketDetailResponse.StoreName = storeName;
this.StoreCostTicketDetailResponse.Status = 0;
this.StoreCostTicketDetailResponse.Amount = decimal.Parse(amount);
this.StoreCostTicketDetailResponse.DiscountAmount = decimal.Parse(discountAmount);
this.StoreCostTicketDetailResponse.BoxAmount = decimal.Parse(boxAmount);
this.StoreCostTicketDetailResponse.WorkerAmount = decimal.Parse(workerAmount);
this.StoreCostTicketDetailResponse.SummaryDate = summData.ToString("yyyy-MM-dd");
this.StoreCostTicketDetailResponse.CreateUser = setMan;
this.StoreCostTicketDetailResponse.CreateDate = setDate;
this.StoreCostTicketDetailResponse.ReceivableAmount = decimal.Parse(receivableAmount);
this.StoreCostTicketDetailResponse.CheckPeople = "";
this.StoreCostTicketDetailResponse.TicketCount = int.Parse(ticketCount);
this.StoreCostTicketDetailResponse.PeoplePrice = decimal.Parse(peoplePrice);
this.StoreCostTicketDetailResponse.ProductType = JsonConvert.DeserializeObject<List<StoreCostTicketDetailProductType>>(JsonConvert.SerializeObject(response.Item3.Data?.ProductTypeList));
this.StoreCostTicketDetailResponse.PayType = JsonConvert.DeserializeObject<List<StoreCostTicketDetailPayType>>(JsonConvert.SerializeObject(response.Item3.Data?.PayTypeList));
this.StoreCostTicketDetailResponse.ProductChange = this.ToProductChange(response1.Item3.Data.ProductChangeList, summData.ToString("yyyy-MM-dd"));
this.StoreCostTicketDetailResponse.ProductMoreChange = this.ToProductMoreChange(response1.Item3.Data.MoreChangeList, summData.ToString("yyyy-MM-dd"));
this.StoreCostTicketDetailResponse.ProductOtherChange = JsonConvert.DeserializeObject<List<StoreCostTicketDetailProductOtherChange>>(JsonConvert.SerializeObject(response1.Item3.Data.OtherChangeList));
this.StoreCostTicketDetailResponse.ProductFixedChange = JsonConvert.DeserializeObject<List<StoreCostTicketDetailProductFixedChange>>(JsonConvert.SerializeObject(response1.Item3.Data.FixedChangeList));
if (this.DisplayType.Equals("新增"))
{
this.StoreCostTicketDetailResponse.ProductOtherChange.ForEach(f => { f.Money = 0.00M; });
this.StoreCostTicketDetailResponse.ProductChange.ForEach(f =>
{
if (f.CostType == 1)
{
f.PosUse = 0;
f.TodayStock = 0;
f.TodayUse = 0;
f.TodayIn = 0;
}
if (f.CostType == 2)
{
f.PosUse = 0;
f.TodayIn = 0;
f.TodayStock = 0;
f.TodayUse = 0;
f.Cost = 0;
}
});
this.StoreCostTicketDetailResponse.ProductMoreChange.ForEach(f =>
{
if (f.CostType == 1)
{
f.PosUse = 0;
f.TodayIn = 0;
f.TodayStock = 0;
f.TodayUse = 0;
}
if (f.CostType == 2)
{
f.PosUse = 0;
f.TodayIn = 0;
f.TodayStock = 0;
f.TodayUse = 0;
f.Cost = 0;
}
});
}
else if (this.DisplayType.Equals("修改"))
{
this.StoreCostTicketDetailResponse.ProductChange.ForEach(f =>
{
if (f.CostType == 1)
{
f.PosUse = 0;
f.TodayStock = 0;
f.TodayUse = 0;
}
if (f.CostType == 2)
{
f.PosUse = 0;
f.TodayIn = 0;
f.TodayStock = 0;
f.TodayUse = 0;
}
});
this.StoreCostTicketDetailResponse.ProductMoreChange.ForEach(f =>
{
if (f.CostType == 1)
{
f.PosUse = 0;
f.TodayStock = 0;
f.TodayUse = 0;
}
if (f.CostType == 2)
{
f.PosUse = 0;
f.TodayIn = 0;
f.TodayStock = 0;
f.TodayUse = 0;
}
});
}
if (this.StoreCostTicketDetailResponse.PayType == null)
{
this.StoreCostTicketDetailResponse.PayType = new List<StoreCostTicketDetailPayType>();
}
if (this.StoreCostTicketDetailResponse.ProductType == null)
{
this.StoreCostTicketDetailResponse.ProductType = new List<StoreCostTicketDetailProductType>();
}
_Return.Data = this.StoreCostTicketDetailResponse;
_Return.Code = 0;
return _Return;
}
/// <summary>
/// ProductChange计算后数据
/// </summary>
/// <param name="StrJson">编辑JSON Data</param>
private ReturnInfo<StoreCostTicketDetailProductChange> ProductCalculate(string StrJson)
{
ReturnInfo<StoreCostTicketDetailProductChange> returnInfo = new ReturnInfo<StoreCostTicketDetailProductChange>();
try
{
var _data = JsonConvert.DeserializeObject<StoreCostTicketDetailProductChange>(StrJson);
if (_data == null)
{
returnInfo.ErrorMessage = "传入的数据为空或者不能正确解析";
return returnInfo;
}
var _source = this.StoreCostTicketDetailResponse.ProductChange.FirstOrDefault(f => f.ProductId == _data.ProductId);
if (_source == null)
{
returnInfo.ErrorMessage = "编辑的商品无法找到源数据";
return returnInfo;
}
if (this.StoreCostTicketDetailResponse.ProductChange.Remove(_source))
{
_source.TodayStock = _data.TodayStock;
_source.TodayIn = _data.TodayIn;
if (_source.CostType == 2)
{
_source.Cost = _data.Cost;
}
}
//加入计算
this.StoreCostTicketDetailResponse.ProductChange.Add(_source);
this.StoreCostTicketDetailResponse.ProductChange.ForEach(f =>
{
f.SalePro = decimal.Round((f.Cost / this.StoreCostTicketDetailResponse.TotalCost) * 100, 2);
f.DifStandard = decimal.Round((f.SalePro - f.Standard), 2);
});
returnInfo.Code = ReturnState.Succeed;
returnInfo.Data = _source;
return returnInfo;
}
catch (Exception ex)
{
returnInfo.ErrorMessage = ex.Message;
return returnInfo;
}
}
/// <summary>
/// ProductMore计算后数据
/// </summary>
private ReturnInfo<StoreCostTicketDetailProductMoreChange> ProductMoreCalculate(string StrJson)
{
ReturnInfo<StoreCostTicketDetailProductMoreChange> returnInfo = new ReturnInfo<StoreCostTicketDetailProductMoreChange>();
try
{
var _data = JsonConvert.DeserializeObject<StoreCostTicketDetailProductMoreChange>(StrJson);
if (_data == null)
{
returnInfo.ErrorMessage = "传入的数据为空或者不能正确解析";
return returnInfo;
}
var _source = this.storeCostTicketDetailResponse.ProductMoreChange.FirstOrDefault(f => f.ProductId == _data.ProductId);
if (_source == null)
{
returnInfo.ErrorMessage = "编辑的商品无法找到源数据";
return returnInfo;
}
if (this.storeCostTicketDetailResponse.ProductMoreChange.Remove(_source))
{
_source.TodayStock = _data.TodayStock;
_source.TodayIn = _data.TodayIn;
if (_source.CostType == 2)
{
_source.Cost = _data.Cost;
}
}
//加入计算
this.storeCostTicketDetailResponse.ProductMoreChange.Add(_source);
this.StoreCostTicketDetailResponse.ProductMoreChange.ForEach(f =>
{
f.SalePro = decimal.Round((f.Cost / this.StoreCostTicketDetailResponse.TotalCost) * 100.00M, 2);
f.DifStandard = decimal.Round((f.SalePro - f.Standard), 2);
});
returnInfo.Code = ReturnState.Succeed;
returnInfo.Data = _source;
return returnInfo;
}
catch (Exception ex)
{
returnInfo.ErrorMessage = ex.Message;
return returnInfo;
}
}
/// <summary>
/// ProductOther计算后数据
/// </summary>
private ReturnInfo<StoreCostTicketDetailProductOtherChange> ProductOtherCalculate(string StrJson)
{
ReturnInfo<StoreCostTicketDetailProductOtherChange> returnInfo = new ReturnInfo<StoreCostTicketDetailProductOtherChange>();
try
{
var _data = JsonConvert.DeserializeObject<StoreCostTicketDetailProductOtherChange>(StrJson);
if (_data == null)
{
returnInfo.ErrorMessage = "传入的数据为空或者不能正确解析";
return returnInfo;
}
var _source = this.storeCostTicketDetailResponse.ProductOtherChange.FirstOrDefault(f => f.ItemId == _data.ItemId);
if (_source == null)
{
returnInfo.ErrorMessage = "编辑的向无法找到源数据";
return returnInfo;
}
if (this.storeCostTicketDetailResponse.ProductOtherChange.Remove(_source))
{
_source.Money = _data.Money;
}
//加入计算
this.storeCostTicketDetailResponse.ProductOtherChange.Add(_source);
returnInfo.Code = ReturnState.Succeed;
returnInfo.Data = _source;
return returnInfo;
}
catch (Exception ex)
{
returnInfo.ErrorMessage = ex.Message;
return returnInfo;
}
}
/// <summary>
/// ProductFixedChange计算后数据
/// </summary>
private ReturnInfo<StoreCostTicketDetailProductFixedChange> ProductFixedChangeCalculate(string strJson)
{
ReturnInfo<StoreCostTicketDetailProductFixedChange> returnInfo = new ReturnInfo<StoreCostTicketDetailProductFixedChange>();
try
{
var _data = JsonConvert.DeserializeObject<StoreCostTicketDetailProductFixedChange>(strJson);
if (_data == null)
{
returnInfo.ErrorMessage = "传入的数据为空或者不能正确解析";
return returnInfo;
}
var _source = this.storeCostTicketDetailResponse.ProductFixedChange.FirstOrDefault(f => f.ItemId == _data.ItemId);
if (_source == null)
{
returnInfo.ErrorMessage = "编辑的向无法找到源数据";
return returnInfo;
}
if (this.storeCostTicketDetailResponse.ProductFixedChange.Remove(_source))
{
_source.Money = _data.Money;
}
//加入计算
this.storeCostTicketDetailResponse.ProductFixedChange.Add(_source);
returnInfo.Code = ReturnState.Succeed;
returnInfo.Data = _source;
return returnInfo;
}
catch (Exception ex)
{
returnInfo.ErrorMessage = ex.Message;
return returnInfo;
}
}
private ReturnInfo<bool> StoreCostTicketUpdateStatusResponse(StoreCostTicketUpdateStatusRequest storeCostTicketUpdateStatusRequest)
{
ReturnInfo<bool> returnInfo = new ReturnInfo<bool>();
try
{
//非新单据不能审核
//if (this.storeCostTicketDetailResponse.Status != 0)
//{
// returnInfo.ErrorMessage = this.storeCostTicketDetailResponse.Status == 1 ? "单据已审核不能重复操作" : "单据已作废";
// // return returnInfo;
//}
var _data = StockUtils.StoreCostTicketUpdateStatus(storeCostTicketUpdateStatusRequest);
if (_data.Item1)
{
returnInfo.Code = ReturnState.Succeed;
returnInfo.Data = true;
}
else
{
if (_data.Item3 == null)
{
returnInfo.ErrorMessage = _data.Item2;
}
else
{
returnInfo.ErrorMessage = _data.Item3.Message;
}
}
return returnInfo;
}
catch (Exception ex)
{
returnInfo.ErrorMessage = ex.Message;
return returnInfo;
}
}
private ReturnInfo<bool> StoreCostTicketUpdate(StoreCostTicketUpdateRequest request)
{
ReturnInfo<bool> returnInfo = new ReturnInfo<bool>();
try
{
//非新单据不能审核
if (this.StoreCostTicketDetailResponse.Status != 0)
{
returnInfo.ErrorMessage = this.StoreCostTicketDetailResponse.Status == 1 ? "单据已审核不能操作" : "单据已作废";
return returnInfo;
}
var _data = StockUtils.StoreCostTicketUpdate(request);
if (_data.Item1)
{
returnInfo.Code = ReturnState.Succeed;
returnInfo.Data = true;
}
else
{
if (_data.Item3 == null)
{
returnInfo.ErrorMessage = _data.Item2;
}
else
{
returnInfo.ErrorMessage = _data.Item3.Message;
returnInfo.Data = false;
}
}
return returnInfo;
}
catch (Exception ex)
{
returnInfo.ErrorMessage = ex.Message;
return returnInfo;
}
}
private ReturnInfo<StoreCostTicketDetailResponse> StoreCostTicketDetail(string _TicketId)
{
ReturnInfo<StoreCostTicketDetailResponse> returnInfo = new ReturnInfo<StoreCostTicketDetailResponse>();
StoreCostTicketDetailRequest request = new StoreCostTicketDetailRequest();
try
{
request.StoreId = Global.Instance.Authc.StoreId;
request.TicketId = _TicketId;
var _data = StockUtils.StoreCostTicketDetail(request);
if (_data.Item1)
{
returnInfo.Code = ReturnState.Succeed;
if (_data.Item3 == null)
{
returnInfo.ErrorMessage = "请求明细失败";
return returnInfo;
}
returnInfo.Data = _data.Item3.Data;
this.StoreCostTicketDetailResponse = returnInfo.Data;
return returnInfo;
}
else
{
if (_data.Item3 == null)
{
returnInfo.ErrorMessage = _data.Item2;
}
else
{
returnInfo.ErrorMessage = _data.Item3.Message;
}
}
return returnInfo;
}
catch (Exception ex)
{
returnInfo.ErrorMessage = ex.Message;
return returnInfo;
}
}
private List<StoreCostTicketDetailProductChange> ToProductChange(List<StoreCostTicketTemplateProductChange> _storeCosts, string _summaryDate)
{
List<StoreCostTicketDetailProductChange> _productChanges = new List<StoreCostTicketDetailProductChange>();
List<Entity.ProductUnit> _productUnit = new List<Entity.ProductUnit>();
List<Entity.ProductBurden> _productBurden = new List<Entity.ProductBurden>();
List<Entity.Product> _product = new List<Entity.Product>();
if (_storeCosts == null || _storeCosts.Count == 0)
{
return _productChanges;
}
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" select * from pos_product_burden ");
_productBurden = db.Query<Entity.ProductBurden>(sqlBuld.ToString()).ToList();
}
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" select * from pos_product_unit ");
_productUnit = db.Query<Entity.ProductUnit>(sqlBuld.ToString()).ToList();
}
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" select * from pos_product");
_product = db.Query<Entity.Product>(sqlBuld.ToString()).ToList();
}
_storeCosts.ForEach(f =>
{
StoreCostTicketDetailProductChange productChange = new StoreCostTicketDetailProductChange();
productChange.Cost = f.Cost;
productChange.CostType = f.CostType;
productChange.DifStandard = 0.00M;
productChange.Id = f.Id;
productChange.PackUnitId = f.PackUnitId;
productChange.ProductId = f.ProductId;
productChange.ProductName = f.ProductName;
productChange.ProductNo = f.ProductNo;
productChange.SalePro = 0.00M;
productChange.SpecId = f.SpecId;
productChange.SpecName = f.SpecName;
productChange.Standard = f.Standard;
productChange.StoreId = Global.Instance.Worker.StoreId;
productChange.StoreName = Global.Instance.Worker.StoreInfo.Name;
productChange.StoreNo = Global.Instance.Worker.StoreInfo.No;
productChange.SummaryDate = _summaryDate;
productChange.TenantId = f.TenantId;
productChange.TicketId = f.TicketId;
productChange.TicketNo = f.TicketNo;
productChange.TodayIn = f.TodayStockIn;
productChange.TypeId = f.TypeId;
productChange.TypeName = f.TypeName;
productChange.TypeNo = f.TypeNo;
productChange.PackUnitName = _productUnit.FirstOrDefault(pr => pr.Id == productChange.PackUnitId)?.Name;
productChange.YeterdayStock = f.LastStock;
var _productBurdendata = _productBurden.Where(a => a.BurdenSpecId == productChange.SpecId && a.BurdenProductId == productChange.ProductId).ToList();
if (_productBurdendata == null || _productBurdendata.Count <= 0)
{
var _productitem = _product.FirstOrDefault(p => p.Type == 0 && p.StockFlag == 1);
if (_productitem != null)
{
var _produc = this.m_ProductList.FirstOrDefault(o => o.ProductId == f.ProductId && o.SpecId == f.SpecId);
if (_produc != null)
{
productChange.PosUse = _produc.Count;
productChange.TodayUse = _produc.Count;
}
}
}
else
{
_productBurdendata.ForEach(fr =>
{
var _produc = this.m_ProductList.FirstOrDefault(o => o.ProductId == fr.ProductId && o.SpecId == fr.SpecId);
if (_produc != null)
{
productChange.PosUse += (decimal)_produc.Count * fr.SalesAmount;
productChange.TodayUse += (decimal)_produc.Count * fr.SalesAmount;
}
});
}
_productChanges.Add(productChange);
});
return _productChanges;
}
private List<StoreCostTicketDetailProductMoreChange> ToProductMoreChange(List<StoreCostTicketTemplateProductMoreChange> _productMoreChanges, string _summaryDate)
{
List<StoreCostTicketDetailProductMoreChange> _ProductMoreChanges = new List<StoreCostTicketDetailProductMoreChange>();
List<Entity.ProductBurden> _productBurden = new List<Entity.ProductBurden>();
List<Entity.ProductUnit> _productUnit = new List<Entity.ProductUnit>();
List<Entity.Product> _product = new List<Entity.Product>();
if (_productMoreChanges == null || _productMoreChanges.Count == 0)
{
return _ProductMoreChanges;
}
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" select * from pos_product_burden ");
_productBurden = db.Query<Entity.ProductBurden>(sqlBuld.ToString()).ToList();
}
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" select * from pos_product_unit ");
_productUnit = db.Query<Entity.ProductUnit>(sqlBuld.ToString()).ToList();
}
using (var db = Global.Instance.OpenDataBase)
{
StringBuilder sqlBuld = new StringBuilder();
sqlBuld.Append(" select * from pos_product");
_product = db.Query<Entity.Product>(sqlBuld.ToString()).ToList();
}
_productMoreChanges.ForEach(f =>
{
StoreCostTicketDetailProductMoreChange ProductMoreChange = new StoreCostTicketDetailProductMoreChange();
ProductMoreChange.Cost = f.Cost;
ProductMoreChange.CostType = f.CostType;
ProductMoreChange.DifStandard = 0.00M;
ProductMoreChange.Id = f.Id;
ProductMoreChange.PackUnitId = f.PackUnitId;
ProductMoreChange.ProductId = f.ProductId;
ProductMoreChange.ProductName = f.ProductName;
ProductMoreChange.ProductNo = f.ProductNo;
ProductMoreChange.SalePro = 0.00M;
ProductMoreChange.SpecId = f.SpecId;
ProductMoreChange.SpecName = f.SpecName;
ProductMoreChange.Standard = f.Standard;
ProductMoreChange.StoreId = Global.Instance.Worker.StoreId;
ProductMoreChange.StoreName = Global.Instance.Worker.StoreInfo.Name;
ProductMoreChange.StoreNo = Global.Instance.Worker.StoreInfo.No;
ProductMoreChange.SummaryDate = _summaryDate;
ProductMoreChange.TenantId = f.TenantId;
ProductMoreChange.TicketId = f.TicketId;
ProductMoreChange.TicketNo = f.TicketNo;
ProductMoreChange.TodayIn = f.TodayStockIn;
ProductMoreChange.TypeId = f.TypeId;
ProductMoreChange.TypeName = f.TypeName;
ProductMoreChange.TypeNo = f.TypeNo;
ProductMoreChange.PackUnitName = _productUnit.FirstOrDefault(pr => pr.Id == ProductMoreChange.PackUnitId)?.Name;
ProductMoreChange.YeterdayStock = f.LastStock;
var _productBurdendata = _productBurden.Where(a => a.BurdenSpecId == ProductMoreChange.SpecId && a.BurdenProductId == ProductMoreChange.ProductId).ToList();
if (_productBurdendata == null || _productBurdendata.Count <= 0)
{
var _productitem = _product.FirstOrDefault(p => p.Type == 0 && p.StockFlag == 1);
if (_productitem != null)
{
var _produc = this.m_ProductList.FirstOrDefault(o => o.ProductId == f.ProductId && o.SpecId == f.SpecId);
if (_produc != null)
{
ProductMoreChange.PosUse = _produc.Count;
ProductMoreChange.TodayUse = _produc.Count;
}
}
}
else
{
_productBurdendata.ForEach(fr =>
{
var _produc = this.m_ProductList.FirstOrDefault(o => o.ProductId == fr.ProductId && o.SpecId == fr.SpecId);
if (_produc != null)
{
ProductMoreChange.PosUse += (decimal)_produc.Count * fr.SalesAmount;
ProductMoreChange.TodayUse += (decimal)_produc.Count * fr.SalesAmount;
}
});
}
_ProductMoreChanges.Add(ProductMoreChange);
});
return _ProductMoreChanges;
}
}
}