/// <summary> /// /// </summary> /// <param name="rollInfo"></param> /// <returns></returns> public bool AddInvoiceRoll(InvoiceRoll rollInfo) { try { using (var tran = new TransactionScope(TransactionScopeOption.Required)) { var invoiceRollDetail = CreateRollDetail(rollInfo); if (invoiceRollDetail.Count > 0) { _invoiceDao.InsertRoll(rollInfo); foreach (var detail in invoiceRollDetail) { _invoiceDao.InsertRollDetail(detail); } tran.Complete(); return(true); } return(false); } } catch { return(false); } }
/// <summary> /// /// </summary> /// <param name="rollInfo"></param> /// <returns></returns> public bool UpdateInvoiceRoll(InvoiceRoll rollInfo) { try { using (var tran = new TransactionScope(TransactionScopeOption.Required)) { var state = _invoiceDao.SumRollDeatilState(rollInfo.Id); if (state == 0) { var invoiceRollDetail = CreateRollDetail(rollInfo); if (invoiceRollDetail.Count > 0) { _invoiceDao.UpdateRoll(rollInfo); _invoiceDao.DeleteRollDetail(rollInfo.Id); foreach (var detail in invoiceRollDetail) { _invoiceDao.InsertRollDetail(detail); } tran.Complete(); return(true); } return(false); } return(false); } } catch (Exception) { return(false); } }
/// <summary> /// /// </summary> /// <param name="rollInfo"></param> /// <returns></returns> private static IList <InvoiceRollDetail> CreateRollDetail(InvoiceRoll rollInfo) { IList <InvoiceRollDetail> rollDetailList = new List <InvoiceRollDetail>(); var rollIntervalQuantity = rollInfo.InvoiceCount / rollInfo.InvoiceRollCount; for (int i = 0; i < rollInfo.InvoiceRollCount; i++) { var detail = new InvoiceRollDetail { RollId = rollInfo.Id, StartNo = rollInfo.InvoiceStartNo + (rollIntervalQuantity * i) }; if (i == rollInfo.InvoiceRollCount - 1) { detail.EndNo = rollInfo.InvoiceEndNo; } else { detail.EndNo = rollInfo.InvoiceStartNo + (rollIntervalQuantity * (i + 1) - 1); } detail.State = InvoiceRollState.NoInvocation; rollDetailList.Add(detail); } return(rollDetailList); }
public void LoadOrderData() { DataTable OrderDT = new DataTable(); DataTable OrderItemDT = new DataTable(); DataTable FailInvoiceDT = new DataTable(); //儲位所在地 int _areaId = int.Parse(Area.WmsAreaXml("Area")); StoreNo = _areaId.ToString("D3"); if (!string.IsNullOrEmpty(Date)) { OrderDT = Order.GetOrderMapingInvoiceRollByDate(Date); OrderItemDT = Order.GetOrderItemByDate(Date, PosNo); FailInvoiceDT = Order.GetFailInvoiceRollByDate(Date); } var OrderList = OrderDT.AsEnumerable().Select(r => new { OrderID = r["OrderID"], InvoiceNo = r["InvoiceNo"], Amount = (int)r["Amount"], PayType = (int)r["PayType"], StartingNumber = r["StartingNumber"], EndingNumber = r["EndingNumber"], PosNo = r["PosNo"], RowNo = Convert.ToInt32(r["RowNo"]) }).ToList(); var FailInvoiceOrderList = FailInvoiceDT.AsEnumerable().Select(r => new { RowNo = r["RowNo"], OrderID = r["OrderID"], InvoiceNo = r["InvoiceNo"], Amount = (int)r["Amount"], PayType = (int)r["PayType"], StartingNumber = r["StartingNumber"], EndingNumber = r["EndingNumber"], PosNo = r["PosNo"], Status = (int)r["Status"] }).ToList(); var OrderListByStartNo = (from a in OrderList where (PosNo != "All" ? a.PosNo.ToString() == PosNo : true) select a).ToList(); var OrderListCash = (from a in OrderListByStartNo where a.PayType.ToString() == "1" select new { OrderID = a.OrderID, Amount = a.Amount }).Distinct().ToList(); var OrderListCreidt = (from a in OrderListByStartNo where a.PayType.ToString() == "2" select new { OrderID = a.OrderID, Amount = a.Amount }).Distinct().ToList(); var FailInvoiceOrderListByPosNo = (from a in FailInvoiceOrderList where (PosNo != "All" ? a.PosNo.ToString() == PosNo : true) select new { RowNo = Convert.ToInt32(a.RowNo), OrderID = a.OrderID, Amount = (int)a.Amount, PayType = (int)a.PayType, InvoiceNo = a.InvoiceNo, StartNo = a.StartingNumber, Status = a.Status }).Distinct().ToList(); //總訂單數量 TotalOrderNum = (from a in OrderListByStartNo select new { OrderID = a.OrderID, Amount = a.Amount }).Distinct().ToList().Count; #region 計算訂單金額 if (TotalOrderNum > 0) { var InvoiceRollList = (from o in OrderList where (PosNo != "All" ? o.PosNo.ToString() == PosNo : true) group o by new { startNo = o.StartingNumber, endNo = o.EndingNumber, PosNo = o.PosNo } into RollList select new { startNo = RollList.Key.startNo, endNo = RollList.Key.endNo, PosNo = RollList.Key.PosNo, InvList = RollList.ToList() }); StartOrderID = int.Parse(OrderListByStartNo.First().OrderID.ToString()).ToString("D9"); EndOrderID = int.Parse(OrderListByStartNo.Last().OrderID.ToString()).ToString("D9"); #region 計算起始發票號碼 foreach (var r in InvoiceRollList) { InvoiceRoll roll = new InvoiceRoll(); roll.StartInvoice = r.InvList.First().InvoiceNo.ToString(); roll.EndInvoice = r.InvList.Last().InvoiceNo.ToString(); roll.Cash = (from x in r.InvList where x.PayType == 1 && x.RowNo == 1 select new { OrderID = x.OrderID, Amount = x.Amount, RowNo = x.RowNo }).Sum(y => y.Amount); roll.Credit = (from x in r.InvList where x.PayType == 2 && x.RowNo == 1 select new { OrderID = x.OrderID, Amount = x.Amount, RowNo = x.RowNo }).Sum(y => y.Amount); foreach (var a in FailInvoiceOrderListByPosNo) { //如果作廢發票在同一捆 if (a.StartNo.Equals(r.startNo)) { //把OrderID=0 的單獨作廢的發票,判斷是否比今天這一捆的頭還前面,如果是就取代 if (int.Parse(a.InvoiceNo.ToString().Substring(2, 8)) < int.Parse(roll.StartInvoice.Substring(2, 8)) && int.Parse(a.OrderID.ToString()) == 0) { roll.StartInvoice = a.InvoiceNo.ToString(); } //把OrderID=0 的單獨作廢的發票,判斷是否比今天這一捆的頭還後面,如果是就取代 if (int.Parse(a.InvoiceNo.ToString().Substring(2, 8)) > int.Parse(roll.EndInvoice.Substring(2, 8)) && int.Parse(a.OrderID.ToString()) == 0) { roll.EndInvoice = a.InvoiceNo.ToString(); } } } InvoiceList.Add(roll); } #endregion TotalOrderAmount = (from a in OrderListByStartNo select new { OrderID = a.OrderID, Amount = a.Amount }).Distinct().ToList().Sum(x => x.Amount); CashIncome = OrderListCash.Sum(x => x.Amount); TotalCashOrderNum = OrderListCash.Count; CardIncome = OrderListCreidt.Sum(x => x.Amount); TotalCardOrderNum = OrderListCreidt.Count; } foreach (DataRow row in OrderItemDT.Rows) { TotalQuantity += int.Parse(row["Quantity"].ToString()); } #endregion #region 作廢訂單計算 FailCashInvoiceList = (from a in FailInvoiceOrderListByPosNo where a.PayType.ToString() == "1" && a.Status == 2 select new Order.FailInvoice { RowNo = Convert.ToInt32(a.RowNo), InvoiceNo = a.InvoiceNo.ToString(), InvoiceNoAmount = (Convert.ToInt32(a.RowNo) == 1) ? a.Amount.ToString() : "0" }).OrderBy(x => x.InvoiceNo).ToList(); FailCardInvoiceList = (from a in FailInvoiceOrderListByPosNo where a.PayType.ToString() == "2" && a.Status == 2 select new Order.FailInvoice { RowNo = Convert.ToInt32(a.RowNo), InvoiceNo = a.InvoiceNo.ToString(), InvoiceNoAmount = (Convert.ToInt32(a.RowNo) == 1) ? a.Amount.ToString() : "0" }).OrderBy(x => x.InvoiceNo).ToList(); FailOhterInvoiceList = (from a in FailInvoiceOrderListByPosNo where a.Status == 0 select new Order.FailInvoice { RowNo = Convert.ToInt32(a.RowNo), InvoiceNo = a.InvoiceNo.ToString(), InvoiceNoAmount = a.Amount.ToString() }).OrderBy(x => x.InvoiceNo).ToList(); FailOrderNum = (from a in FailInvoiceOrderListByPosNo where a.RowNo == 1 && (a.Status == 2 || a.Status == 6) select a).ToList().Count; FailInvoiceNum = FailInvoiceOrderListByPosNo.Count; ReturnTotalAmount = (from a in FailInvoiceOrderListByPosNo where a.RowNo == 1 && a.Status == 2 select a).ToList().Sum(x => x.Amount); ReturnTotalCashAmount = (from a in FailInvoiceOrderListByPosNo where a.PayType == 1 && a.RowNo == 1 && a.Status == 2 select a ).ToList().Sum(x => x.Amount); ReturnTotalCardAmount = (from a in FailInvoiceOrderListByPosNo where a.PayType == 2 && a.RowNo == 1 && a.Status == 2 select a ).ToList().Sum(x => x.Amount); #endregion #region 折讓訂單計算 AllowancesCashList = (from a in FailInvoiceOrderListByPosNo where a.PayType.ToString() == "1" && a.Status == 6 select new Order.FailInvoice { RowNo = Convert.ToInt32(a.RowNo), InvoiceNo = a.InvoiceNo.ToString(), InvoiceNoAmount = (Convert.ToInt32(a.RowNo) == 1) ? a.Amount.ToString() : "0" }).OrderBy(x => x.InvoiceNo).ToList(); AllowancesCardList = (from a in FailInvoiceOrderListByPosNo where a.PayType.ToString() == "2" && a.Status == 6 select new Order.FailInvoice { RowNo = Convert.ToInt32(a.RowNo), InvoiceNo = a.InvoiceNo.ToString(), InvoiceNoAmount = (Convert.ToInt32(a.RowNo) == 1) ? a.Amount.ToString() : "0" }).OrderBy(x => x.InvoiceNo).ToList(); AllowancesCashAmount = (from a in FailInvoiceOrderListByPosNo where a.PayType == 1 && a.RowNo == 1 && a.Status == 6 select a ).ToList().Sum(x => x.Amount); AllowancesCardAmount = (from a in FailInvoiceOrderListByPosNo where a.PayType == 2 && a.RowNo == 1 && a.Status == 6 select a ).ToList().Sum(x => x.Amount); #endregion }