private void cboFullStockCode_SelectedIndexChanged(object sender, EventArgs e) { string query = string.Empty; Guid productId = Guid.Empty; //* 搞咩呢?cboFullStockCode 一定係 ProductId + stkcode if (cboFullStockCode.SelectedValue != null && Guid.TryParse(cboFullStockCode.SelectedValue.ToString(), out productId)) { query = "ProductId = '" + productId.ToString() + "'"; } else { query = BuildWhereClause(cboFullStockCode.Text.Trim()); } if (query.Length > 0) { var oProd = ProductEx.Get(query); if (oProd != null) { this.SelectedItem = oProd.ProductId; ProductSelectionEventArgs args = new ProductSelectionEventArgs(oProd.ProductId, oProd.STKCODE, oProd.APPENDIX1, oProd.APPENDIX2, oProd.APPENDIX3, oProd.ProductName, oProd.RetailPrice.Value, Utility.GetOnHandQtyByCurrentZone(oProd.ProductId), oProd.OriginalRetailPrice.Value, ProductCurrentSummaryEx.GetAverageCode(oProd.ProductId), oProd.NormalDiscount); OnSelectionChanged(args); } } }
private void CheckDetails(Guid hhtHeaderId, Guid stkHeaderId, Guid workplaceId) { using (var ctx = new EF6.RT2020Entities()) { var hhtDetailList = ctx.StockTakeDetails_HHT.Where(x => x.HeaderId == hhtHeaderId).OrderBy(x => x.LineNumber); foreach (var hhtDetail in hhtDetailList) { //sql = "HeaderId = '" + stkHeaderId + "' AND ProductId = '" + hhtDetail.ProductId.ToString() + "'"; var stkDetail = ctx.StockTakeDetails.Where(x => x.HeaderId == stkHeaderId && x.ProductId == hhtDetail.ProductId).FirstOrDefault(); //StockTakeDetails stkDetail = StockTakeDetails.LoadWhere(sql); if (stkDetail == null) { stkDetail = new EF6.StockTakeDetails(); stkDetail.DetailsId = Guid.NewGuid(); stkDetail.HeaderId = stkHeaderId; stkDetail.ProductId = hhtDetail.ProductId; stkDetail.TxNumber = hhtDetail.TxNumber; stkDetail.WorkplaceId = workplaceId; stkDetail.HHTQty = hhtDetail.Qty; } stkDetail.AverageCost = ProductCurrentSummaryEx.GetAverageCode(stkDetail.ProductId.Value); stkDetail.HHTQty = (stkDetail.HHTQty == null ? 0 : stkDetail.HHTQty) + hhtDetail.Qty; ctx.SaveChanges(); } } }
private void CreateSTKDetails(System.Guid headerId, string txNumber, Guid workplaceId) { decimal amount = 0, qty = 0; using (var ctx = new EF6.RT2020Entities()) { using (var scope = ctx.Database.BeginTransaction()) { try { /** * string sql = "WorkplaceId = '" + workplaceId.ToString() + "' "; * if (rbtnNonZeroQtyItems.Checked) * { * sql += " AND CDQTY > 0"; * } */ var wpItemList = ctx.ProductWorkplace .Where(x => x.WorkplaceId == workplaceId && (rbtnNonZeroQtyItems.Checked ? x.CDQTY > 0 : true)); foreach (var wpItem in wpItemList) { decimal avgCost = ProductCurrentSummaryEx.GetAverageCode(wpItem.ProductId); var stkDetail = new EF6.StockTakeDetails(); stkDetail.DetailsId = Guid.NewGuid(); stkDetail.TxNumber = txNumber; stkDetail.HeaderId = headerId; stkDetail.WorkplaceId = workplaceId; stkDetail.ProductId = wpItem.ProductId; stkDetail.CapturedQty = wpItem.CDQTY; stkDetail.AverageCost = avgCost; stkDetail.ModifiedBy = ConfigHelper.CurrentUserId; stkDetail.ModifiedOn = DateTime.Now; ctx.StockTakeDetails.Add(stkDetail); ctx.SaveChanges(); qty += wpItem.CDQTY; amount += wpItem.CDQTY * avgCost; } var oHeader = ctx.StockTakeHeader.Find(headerId); if (oHeader != null) { oHeader.CapturedQty = qty; oHeader.CapturedAmount = amount; ctx.SaveChanges(); } scope.Commit(); } catch (Exception ex) { scope.Rollback(); } } } }
private void ShowCurrentSummaryInfo() { var oCurrentSummary = ProductCurrentSummaryEx.GetByProductCode(_ProductId); if (oCurrentSummary != null) { this.txtOnHandQty.Text = oCurrentSummary.CDQTY.ToString("n0"); txtAverageCost.Text = oCurrentSummary.AverageCost.ToString("n2"); txtLastReceivingCost.Text = oCurrentSummary.LastCost.ToString("n2"); txtLastPurDate.Text = oCurrentSummary.LastPurchasedOn.Value.ToString(DateTimeHelper.GetDateFormat()); txtLastSoldDate.Text = oCurrentSummary.LastSoldOn.Value.ToString(DateTimeHelper.GetDateFormat()); } }
/// <summary> /// Createds the adj sub ledger details. /// </summary> private void CreatedAdjSubLedgerDetails(Guid headerId, Guid productId, decimal cdQty) { using (var ctx = new EF6.RT2020Entities()) { var objDetail = new EF6.InvtSubLedgerADJ_Details(); objDetail.DetailsId = Guid.NewGuid(); objDetail.HeaderId = headerId; objDetail.TxNumber = txNumber; objDetail.LineNumber = 0; objDetail.TxType = EnumHelper.TxType.ADJ.ToString(); objDetail.ProductId = productId; objDetail.Qty = Math.Abs(cdQty) * (-1); objDetail.AverageCost = ProductCurrentSummaryEx.GetAverageCode(productId); objDetail.ReasonCode = string.Empty; objDetail.Remarks = string.Empty; ctx.InvtSubLedgerADJ_Details.Add(objDetail); } }
/// <summary> /// Gets the price. /// </summary> /// <param name="productId">The product id.</param> /// <returns></returns> private decimal GetPrice(Guid productId) { decimal result = 0; switch (this.TxType) { case EnumHelper.TxType.ADJ: result = ProductCurrentSummaryEx.GetAverageCode(productId); break; case EnumHelper.TxType.TXF: //DAL.Product product = DAL.Product.Load(productId); //if (product != null) //{ // result = product.RetailPrice; //} result = ProductEx.GetRetailPrice(productId); break; } return(result); }
private void CreateSTKDetails(System.Guid headerId, string txNumber, Guid workplaceId) { decimal amount = 0, qty = 0; using (var ctx = new EF6.RT2020Entities()) { using (var scope = ctx.Database.BeginTransaction()) { try { var prodList = ctx.Product.SqlQuery(string.Format("Select * from Product Where {0}", GetProductListQueryString())).ToList(); foreach (var prod in prodList) { string sql = "WorkplaceId = '" + workplaceId.ToString() + "' AND ProductId = '" + prod.ProductId.ToString() + "'"; if (rbtnNonZeroQtyItems.Checked) { sql += " AND CDQTY > 0"; } var wpItem = ctx.ProductWorkplace .SqlQuery(string.Format("Select * from ProductWorkplace Where {0}", sql)) .FirstOrDefault(); if (wpItem != null) { decimal avgCost = ProductCurrentSummaryEx.GetAverageCode(prod.ProductId); #region 一隻跟一隻 save detail var stkDetail = new EF6.StockTakeDetails(); stkDetail.DetailsId = Guid.NewGuid(); stkDetail.TxNumber = txNumber; stkDetail.HeaderId = headerId; stkDetail.WorkplaceId = workplaceId; stkDetail.ProductId = prod.ProductId; stkDetail.CapturedQty = wpItem.CDQTY; stkDetail.AverageCost = avgCost; stkDetail.ModifiedBy = ConfigHelper.CurrentUserId; stkDetail.ModifiedOn = DateTime.Now; ctx.StockTakeDetails.Add(stkDetail); ctx.SaveChanges(); #endregion qty += wpItem.CDQTY; amount += wpItem.CDQTY * avgCost; } } #region save header var oHeader = ctx.StockTakeHeader.Find(headerId); if (oHeader != null) { oHeader.CapturedQty = qty; oHeader.CapturedAmount = amount; ctx.SaveChanges(); } #endregion scope.Commit(); } catch (Exception ex) { scope.Rollback(); } } } }
private void CreateADJTx(ListViewItem listItem) { using (var ctx = new EF6.RT2020Entities()) { using (var scope = ctx.Database.BeginTransaction()) { try { Guid headerId = Guid.Empty; if (Guid.TryParse(listItem.Text, out headerId)) { var oBatchHeader = ctx.InvtBatchADJ_Header.Find(headerId); if (oBatchHeader != null) { // Update Product Info #region UpdateProduct(oBatchHeader.HeaderId, oBatchHeader.WorkplaceId); Guid txHeaderId = oBatchHeader.HeaderId; Guid workplaceId = oBatchHeader.WorkplaceId; var detailsList = ctx.InvtBatchADJ_Details.Where(x => x.HeaderId == txHeaderId); foreach (var item in detailsList) { Guid productId = item.ProductId; decimal qty = item.Qty.Value; #region UpdateProductCurrentSummary(item.ProductId, item.Qty.Value); var currProd = ctx.ProductCurrentSummary.Where(x => x.ProductId == productId).FirstOrDefault(); if (currProd == null) { currProd = new EF6.ProductCurrentSummary(); currProd.CurrentSummaryId = Guid.NewGuid(); currProd.ProductId = productId; ctx.ProductCurrentSummary.Add(currProd); } currProd.CDQTY += qty; #endregion #region UpdateProductQty(item.ProductId, workplaceId, item.Qty.Value); var wpProd = ctx.ProductWorkplace.Where(x => x.ProductId == productId && x.WorkplaceId == workplaceId).FirstOrDefault(); if (wpProd == null) { wpProd = new EF6.ProductWorkplace(); wpProd.ProductWorkplaceId = Guid.NewGuid(); wpProd.ProductId = productId; wpProd.WorkplaceId = workplaceId; ctx.ProductWorkplace.Add(wpProd); } wpProd.CDQTY += qty; #endregion ctx.SaveChanges(); } #endregion // Create ADJ SubLedger string txNumber_SubLedger = oBatchHeader.TxNumber; #region Guid subLedgerHeaderId = CreateADJSubLedgerHeader(txNumber_SubLedger, oBatchHeader.TxDate, oBatchHeader.WorkplaceId, oBatchHeader.StaffId, oBatchHeader.Remarks, oBatchHeader.Reference + "\t" + oBatchHeader.TxNumber); string txnumber = txNumber_SubLedger; DateTime txDate = oBatchHeader.TxDate.Value; //Guid workplaceId = oBatchHeader.WorkplaceId; Guid staffId = oBatchHeader.StaffId; string remarks = oBatchHeader.Remarks; string reference = oBatchHeader.Reference + "\t" + oBatchHeader.TxNumber; var oSubADJ = new EF6.InvtSubLedgerADJ_Header(); oSubADJ.HeaderId = Guid.NewGuid(); oSubADJ.TxNumber = txnumber; oSubADJ.TxType = EnumHelper.TxType.ADJ.ToString(); oSubADJ.WorkplaceId = workplaceId; oSubADJ.TxDate = txDate; oSubADJ.Reference = reference; oSubADJ.Remarks = remarks; oSubADJ.StaffId = staffId; oSubADJ.Status = Convert.ToInt32(EnumHelper.Status.Active.ToString("d")); oSubADJ.CreatedBy = ConfigHelper.CurrentUserId; oSubADJ.CreatedOn = DateTime.Now; oSubADJ.ModifiedBy = ConfigHelper.CurrentUserId; oSubADJ.ModifiedOn = DateTime.Now; ctx.InvtSubLedgerADJ_Header.Add(oSubADJ); ctx.SaveChanges(); Guid subLedgerHeaderId = oSubADJ.HeaderId; #endregion #region CreateADJSubLedgerDetail(txNumber_SubLedger, oBatchHeader.HeaderId, subLedgerHeaderId); //string txnumber = txNumber_SubLedger; Guid batchHeaderId = oBatchHeader.HeaderId; decimal ttlAmt = 0; string sql = "HeaderId = '" + batchHeaderId.ToString() + "'"; string[] orderBy = new string[] { "LineNumber" }; var oBatchDetails = ctx.InvtBatchADJ_Details.Where(x => x.HeaderId == batchHeaderId).OrderBy(x => x.LineNumber); foreach (var oBDetail in oBatchDetails) { var oSubLedgerDetail = new EF6.InvtSubLedgerADJ_Details(); oSubLedgerDetail.DetailsId = Guid.NewGuid(); oSubLedgerDetail.HeaderId = subLedgerHeaderId; oSubLedgerDetail.LineNumber = oBDetail.LineNumber.Value; oSubLedgerDetail.ProductId = oBDetail.ProductId; oSubLedgerDetail.Qty = oBDetail.Qty.Value; oSubLedgerDetail.TxNumber = txnumber; oSubLedgerDetail.TxType = EnumHelper.TxType.ADJ.ToString(); oSubLedgerDetail.AverageCost = oBDetail.AverageCost.Value; oSubLedgerDetail.ReasonCode = oBDetail.ReasonCode; oSubLedgerDetail.Remarks = oBDetail.Remarks; ctx.InvtSubLedgerADJ_Details.Add(oSubLedgerDetail); ttlAmt += oSubLedgerDetail.Qty.Value * oSubLedgerDetail.AverageCost.Value; } var oSubLedgerHeader = ctx.InvtSubLedgerADJ_Header.Find(subLedgerHeaderId); if (oSubLedgerHeader != null) { oSubLedgerHeader.TotalAmount = ttlAmt; oSubLedgerHeader.ModifiedOn = DateTime.Now; oSubLedgerHeader.ModifiedBy = ConfigHelper.CurrentUserId; } ctx.SaveChanges(); #endregion // Create Ledger for TxType 'ADJ' string txNumber_Ledger = oBatchHeader.TxNumber; #region Guid ledgerHeaderId = CreateLedgerHeader(txNumber_Ledger, oBatchHeader.TxDate, subLedgerHeaderId, oBatchHeader.WorkplaceId, oBatchHeader.StaffId, oBatchHeader.Reference + "\t" + txNumber_SubLedger, oBatchHeader.Remarks); //string txnumber = txNumber_Ledger; //DateTime txDate = oBatchHeader.TxDate.Value; //Guid subLedgerHeaderId = subLedgerHeaderId; //Guid workplaceId = oBatchHeader.WorkplaceId; //Guid staffId = oBatchHeader.StaffId; //string reference = oBatchHeader.Reference + "\t" + txNumber_SubLedger; //string remarks = oBatchHeader.Remarks; var oLedgerHeader = new EF6.InvtLedgerHeader(); oLedgerHeader.HeaderId = Guid.NewGuid(); oLedgerHeader.TxNumber = txnumber; oLedgerHeader.TxType = EnumHelper.TxType.ADJ.ToString(); oLedgerHeader.TxDate = txDate; oLedgerHeader.SubLedgerHeaderId = subLedgerHeaderId; oLedgerHeader.WorkplaceId = workplaceId; oLedgerHeader.StaffId = staffId; oLedgerHeader.Reference = reference; oLedgerHeader.Remarks = remarks; oLedgerHeader.Status = Convert.ToInt32(EnumHelper.Status.Active.ToString("d")); oLedgerHeader.CreatedBy = ConfigHelper.CurrentUserId; oLedgerHeader.CreatedOn = DateTime.Now; oLedgerHeader.ModifiedBy = ConfigHelper.CurrentUserId; oLedgerHeader.ModifiedOn = DateTime.Now; ctx.InvtLedgerHeader.Add(oLedgerHeader); ctx.SaveChanges(); Guid ledgerHeaderId = oLedgerHeader.HeaderId; #endregion #region CreateLedgerDetails(txNumber_Ledger, subLedgerHeaderId, ledgerHeaderId, oBatchHeader); //string txnumber = txNumber_Ledger; //Guid subledgerHeaderId = subLedgerHeaderId; //Guid ledgerHeaderId = ledgerHeaderId; //InvtBatchADJ_Header oBatchHeader //string sql = "HeaderId = '" + subledgerHeaderId.ToString() + "'"; //string[] orderBy = new string[] { "LineNumber" }; var oSubLedgerDetails = ctx.InvtSubLedgerADJ_Details.Where(x => x.HeaderId == subLedgerHeaderId).OrderBy(x => x.LineNumber); foreach (var oSDetail in oSubLedgerDetails) { var oLedgerDetail = new EF6.InvtLedgerDetails(); oLedgerDetail.DetailsId = Guid.NewGuid(); oLedgerDetail.HeaderId = ledgerHeaderId; oLedgerDetail.SubLedgerDetailsId = oSDetail.DetailsId; oLedgerDetail.LineNumber = oSDetail.LineNumber.Value; oLedgerDetail.ProductId = oSDetail.ProductId; oLedgerDetail.Qty = oSDetail.Qty.Value; oLedgerDetail.TxNumber = txnumber; oLedgerDetail.TxType = EnumHelper.TxType.ADJ.ToString(); oLedgerDetail.TxDate = oBatchHeader.TxDate.Value; oLedgerDetail.Amount = oLedgerDetail.Qty * oLedgerDetail.AverageCost; oLedgerDetail.Notes = string.Empty; oLedgerDetail.SerialNumber = string.Empty; oLedgerDetail.SHOP = WorkplaceEx.GetWorkplaceCodeById(oBatchHeader.WorkplaceId); oLedgerDetail.OPERATOR = StaffEx.GetStaffNumberById(oBatchHeader.StaffId); // Product Info var oItem = ctx.Product.Find(oSDetail.ProductId); if (oItem != null) { oLedgerDetail.BasicPrice = oItem.RetailPrice.Value; oLedgerDetail.UnitAmount = ProductCurrentSummaryEx.GetAverageCode(oItem.ProductId); oLedgerDetail.Discount = oItem.NormalDiscount; oLedgerDetail.Amount = oLedgerDetail.UnitAmount * oLedgerDetail.Qty; oLedgerDetail.AverageCost = ProductCurrentSummaryEx.GetAverageCode(oItem.ProductId); var priceTypeId = ProductPriceTypeEx.GetIdByPriceType(ProductHelper.Prices.VPRC.ToString()); //sql = "ProductId = '" + oSDetail.ProductId.ToString() + "' AND PriceTypeId = '" + priceTypeId.ToString() + "'"; var oPrice = ctx.ProductPrice.Where(x => x.ProductId == oSDetail.ProductId && x.PriceTypeId == priceTypeId).FirstOrDefault(); if (oPrice != null) { oLedgerDetail.VendorRef = oPrice.CurrencyCode; } } ctx.InvtLedgerDetails.Add(oLedgerDetail); var oLedgerHeader2 = ctx.InvtLedgerHeader.Find(ledgerHeaderId); if (oLedgerHeader2 != null) { oLedgerHeader2.TotalAmount += oLedgerDetail.Amount; } ctx.SaveChanges(); } #endregion oBatchHeader.PostedBy = ConfigHelper.CurrentUserId; oBatchHeader.PostedOn = DateTime.Now; oBatchHeader.ModifiedBy = ConfigHelper.CurrentUserId; oBatchHeader.ModifiedOn = DateTime.Now; ctx.SaveChanges(); #region ClearBatchTransaction(oBatchHeader); string query = "HeaderId = '" + oBatchHeader.HeaderId.ToString() + "'"; var detailList = ctx.InvtBatchADJ_Details.Where(x => x.HeaderId == oBatchHeader.HeaderId); foreach (var detail in detailList) { ctx.InvtBatchADJ_Details.Remove(detail); } ctx.InvtBatchADJ_Header.Remove(oBatchHeader); ctx.SaveChanges(); #endregion } } scope.Commit(); } catch (Exception ex) { scope.Rollback(); } } } }