private void LoadHeaderInfo() { if (this.HHTHeaderId != null) { using (var ctx = new EF6.RT2020Entities()) { var hhtHeader = ctx.StocktakeHeader_HHT.Where(x => x.HeaderId == this.HHTHeaderId).AsNoTracking().FirstOrDefault(); if (hhtHeader != null) { txtTxNumber.Text = hhtHeader.TxNumber; txtWorkplace.Text = WorkplaceEx.GetWorkplaceCodeById(hhtHeader.WorkplaceId.Value); txtHHTId.Text = hhtHeader.HHTId; txtUploadedOn.Text = hhtHeader.UploadedOn.Value.ToString("dd MMM yyyy HH:mm:ss"); txtCreatedOn.Text = hhtHeader.CreatedOn.ToString("dd MMM yyyy HH:mm:ss"); txtCreatedBy.Text = StaffEx.GetStaffNumberById(hhtHeader.CreatedBy); txtTotalLine_HHTData.Text = hhtHeader.TotalRows.Value.ToString("n0"); txtTotalLine_StockTake.Text = hhtHeader.TotalRows.Value.ToString("n0"); txtTotalLine_MissingBarcode.Text = hhtHeader.MissingRows.Value.ToString("n0"); txtTotalQty_HHTData.Text = hhtHeader.TOTALQTY.Value.ToString("n0"); txtTotalQty_StockTake.Text = hhtHeader.TOTALQTY.Value.ToString("n0"); txtTotalQty_MissingBarcode.Text = hhtHeader.MissingQty.Value.ToString("n0"); LoadDetailsInfo(hhtHeader.HeaderId); } } } }
private void CreateADJTx(Guid headerId) { using (var ctx = new EF6.RT2020Entities()) { var oBatchHeader = ctx.StockTakeHeader.Find(headerId); if (oBatchHeader != null) { oBatchHeader.PostedOn = DateTime.Now; ctx.SaveChanges(); this.UpdateProduct(oBatchHeader.HeaderId, oBatchHeader.WorkplaceId.Value); // Create Ledger for TxType 'STK' string txNumber_Ledger = SystemInfoHelper.Settings.QueuingTxNumber(EnumHelper.TxType.ADJ); Guid ledgerHeaderId = CreateLedgerHeader(txNumber_Ledger, oBatchHeader); CreateLedgerDetails( txNumber_Ledger, ledgerHeaderId, oBatchHeader.HeaderId, StaffEx.GetStaffNumberById(ConfigHelper.CurrentUserId), WorkplaceEx.GetWorkplaceCodeById(oBatchHeader.WorkplaceId.Value) ); oBatchHeader.ADJNUM = txNumber_Ledger; ctx.SaveChanges(); } } }
private void UpdateLedgerDetails() { using (var ctx = new EF6.RT2020Entities()) { using (var scope = ctx.Database.BeginTransaction()) { try { DateTime currMonth = SystemInfoEx.CurrentInfo.Default.CurrentSystemDate; string whereClause = "TxDate >= CAST('" + currMonth.AddMonths(-1).ToString("yyyy-MM-dd 00:00:00") + "' AS DATETIME) AND TxDate < CAST('" + currMonth.ToString("yyyy-MM-dd 00:00:00") + "' AS DATETIME)"; var oHeaderList = ctx.InvtLedgerHeader.SqlQuery( string.Format("Select * from InvtLedgerHeader Where{0} ", whereClause) ); foreach (var oHeader in oHeaderList) { var oDetailList = ctx.InvtLedgerDetails.Where(x => x.HeaderId == oHeader.HeaderId); foreach (var oDetail in oDetailList) { if (oDetail != null) { oDetail.TxDate = oHeader.TxDate; oDetail.SHOP = WorkplaceEx.GetWorkplaceCodeById(oHeader.WorkplaceId); #region this.AppendMissingProductWorkplace(oDetail.ProductId, oHeader.WorkplaceId); var oProdWp = ctx.ProductWorkplace.Where(x => x.ProductId == oDetail.ProductId && x.WorkplaceId == oHeader.WorkplaceId).FirstOrDefault(); if (oProdWp == null) { oProdWp = new EF6.ProductWorkplace(); oProdWp.ProductWorkplaceId = Guid.NewGuid(); oProdWp.ProductId = oDetail.ProductId.Value; oProdWp.WorkplaceId = oHeader.WorkplaceId; ctx.ProductWorkplace.Add(oProdWp); } #endregion } } ctx.SaveChanges(); } scope.Commit(); } catch (Exception ex) { scope.Rollback(); } } } }
private void FillListBox() { lbStockTakeList.Items.Clear(); using (var ctx = new EF6.RT2020Entities()) { string[] orderBy = new string[] { "TxNumber" }; string sql = " YEAR(PostedOn) = 1900 AND LEN(ADJNUM) = 0 "; var stkHeaderList = ctx.StockTakeHeader.Where(x => x.PostedOn.Value.Year == 1900 && x.ADJNUM.Length == 0).OrderBy(x => x.TxNumber).AsNoTracking().ToList(); foreach (var stkHeader in stkHeaderList) { StringBuilder stk = new StringBuilder(); stk.Append(stkHeader.TxNumber); stk.Append(" - "); stk.Append(WorkplaceEx.GetWorkplaceCodeById(stkHeader.WorkplaceId.Value)); lbStockTakeList.Items.Add(stk.ToString()); } } }
/// <summary> /// Creates the ledger details. /// </summary> /// <param name="headerId">The header id.</param> /// <param name="subLedgerHeaderId">The sub ledger header id.</param> private void CreateLedgerDetails(Guid headerId, Guid subLedgerHeaderId, DateTime txDate, Guid workplaceId) { string query = "HeaderId = '" + subLedgerHeaderId.ToString() + "'"; using (var ctx = new EF6.RT2020Entities()) { var detailList = ctx.InvtSubLedgerADJ_Details.Where(x => x.HeaderId == subLedgerHeaderId); foreach (var detail in detailList) { //InvtSubLedgerADJ_Details detail = detailList[i]; //if (detail != null) //{ query = "HeaderId = '" + headerId.ToString() + "' AND ProductId = '" + detail.ProductId.ToString() + "'"; var objDetail = ctx.InvtLedgerDetails.Where(x => x.HeaderId == headerId && x.ProductId == detail.ProductId).FirstOrDefault(); if (objDetail == null) { objDetail = new EF6.InvtLedgerDetails(); objDetail.DetailsId = Guid.NewGuid(); objDetail.HeaderId = headerId; objDetail.TxType = detail.TxType; objDetail.TxNumber = detail.TxNumber; objDetail.LineNumber = 0; objDetail.ProductId = detail.ProductId; objDetail.SHOP = WorkplaceEx.GetWorkplaceCodeById(workplaceId); objDetail.TxDate = txDate; objDetail.OPERATOR = StaffEx.GetStaffNumberById(ConfigHelper.CurrentUserId); objDetail.Qty = detail.Qty; objDetail.AverageCost = detail.AverageCost; objDetail.UnitAmount = detail.AverageCost; objDetail.Amount = detail.AverageCost * detail.Qty; ctx.InvtLedgerDetails.Add(objDetail); } //} } } }
private void Save() { int iCount = 1; bool isValid = true; foreach (ListViewItem lvItem in lvPPCPacketList.Items) { if (lvItem.Checked) { string stktkNumber = string.Empty; Guid workplaceId = Guid.Empty; DateTime uploadedOn = DateTime.Now; List <ImportDetailsInfo> detailAllList = new List <ImportDetailsInfo>(); decimal totalLine = 0, totalQty = 0, missingLine = 0, missingQty = 0; this.CheckHHTLog(lvItem.SubItems[4].Text); #region Load Header's detail info FileHelperEngine <ImportHeaderInfo> headerInfoEngine = new FileHelperEngine <ImportHeaderInfo>(); headerInfoEngine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue; ImportHeaderInfo[] headerInfoList = headerInfoEngine.ReadFile(lvItem.SubItems[8].Text); if (headerInfoEngine.ErrorManager.ErrorCount > 0) { headerInfoEngine.ErrorManager.SaveErrors(logFile); } #endregion Utility.WriteLog("Date Create : "+ uploadedOn.ToString("dd/MM/yyyy HH:mm:ss"), logFile); Utility.WriteLog("Session ID : "+ uploadedOn.ToString("yyyyMMdd-HHmmss") + "-" + iCount.ToString().PadLeft(3, '0'), logFile); Utility.WriteLog("Upload Time : "+ uploadedOn.ToString("dd/MM/yyyy HH:mm:ss"), logFile); Utility.WriteLog("HHT TRN# : "+ lvItem.SubItems[2].Text, logFile); Utility.WriteLog("Location# : " + lvItem.SubItems[9].Text + " [Original]; " + lvItem.Text + " [Current]", logFile); Utility.WriteLog("Stock Take# : "+ lvItem.SubItems[10].Text + " [Suggested]; " + lvItem.SubItems[1].Text + " [Current]", logFile); Utility.WriteLog("Process Detail : Import Data", logFile); Utility.WriteLog("Message :- ", logFile); Utility.WriteLog("=> Checking Loc# ", logFile); #region Check Workplace (Loc#) using (var ctx = new EF6.RT2020Entities()) { var wp = ctx.Workplace.Where(x => x.WorkplaceCode == lvItem.Text).AsNoTracking().FirstOrDefault(); if (wp != null) { if (wp.Retired) { Utility.WriteLog(" [ERROR] Loc# was retired ", logFile); isValid = isValid & false; } else { Utility.WriteLog(" [OK] ", logFile); workplaceId = wp.WorkplaceId; } } else { Utility.WriteLog(" [ERROR] Loc# Not Found", logFile); isValid = isValid & false; } } #endregion Utility.WriteLog(" RESULT : COMPLETED", logFile); Utility.WriteLog("=> Import Packet File ", logFile); #region Load details files string[] packetFiles = Directory.GetFiles(tempDirectory, "DT_" + lvItem.SubItems[2].Text + "*", SearchOption.TopDirectoryOnly); for (int i = 0; i < packetFiles.Length; i++) { Utility.WriteLog(@" " + (i + 1).ToString() + @") Packet => " + Path.GetFileNameWithoutExtension(packetFiles[i]) + " [" + packetFiles[i] + "] ", logFile); } #endregion Utility.WriteLog(" RESULT : COMPLETED", logFile); Utility.WriteLog("=> Checking (Header) ", logFile); stktkNumber = lvItem.SubItems[1].Text.Trim(); #region checking Header info using (var ctx = new EF6.RT2020Entities()) { var stktkHeader = ctx.StockTakeHeader.Where(x => x.TxNumber == lvItem.SubItems[1].Text.Trim()).FirstOrDefault(); if (stktkHeader != null) { if (!string.IsNullOrEmpty(stktkHeader.ADJNUM)) { Utility.WriteLog(" [ERROR] The Stock Take Number was posted, cannot be used anymore. ", logFile); isValid = isValid & false; } else if (!WorkplaceEx.GetWorkplaceCodeById(stktkHeader.WorkplaceId.Value).Equals(lvItem.Text.Trim())) { Utility.WriteLog(" [ERROR] The loc# in Stock Take Header must be as same as the selected one. ", logFile); isValid = isValid & false; } else { //? Why compare the UploadedOn down to "seconds" //string sql = "TxNumber = '" + lvItem.SubItems[1].Text.Trim() + "' AND HHTId = '" + lvItem.SubItems[4].Text + "' AND CONVERT(NVARCHAR(20), UploadedOn, 120) = '" + uploadedOn.ToString("yyyy-MM-dd HH:mm:ss") + "'"; var txNumber = lvItem.SubItems[1].Text.Trim(); var hhtId = lvItem.SubItems[4].Text; var hhtHeader = ctx.StocktakeHeader_HHT.Where(x => x.TxNumber == txNumber && x.HHTId == hhtId && x.UploadedOn.Value.ToString("yyyy-MM-dd HH:mm:ss") == uploadedOn.ToString("yyyy-MM-dd HH:mm:ss")).FirstOrDefault(); if (hhtHeader != null) { if (hhtHeader.PostedOn.Value.Year > 1900) { Utility.WriteLog(" [ERROR] The Stock Take (HHT) Number was posted, cannot be used anymore. ", logFile); isValid = isValid & false; } else { Utility.WriteLog(" [ERROR] The Stock Take (HHT) Number existed. ", logFile); isValid = isValid & false; } } else { Utility.WriteLog(" [OK] ", logFile); } } } else { Utility.WriteLog(" [OK] ", logFile); } } #endregion Utility.WriteLog("=> Checking (Detail) ", logFile); int iCountBarcode = 0; #region checking details info for (int iHeader = 0; iHeader < headerInfoList.Length; iHeader++) { ImportHeaderInfo headerInfo = headerInfoList[iHeader]; FileHelperEngine <ImportDetailsInfo> detailInfoEngine = new FileHelperEngine <ImportDetailsInfo>(); detailInfoEngine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue; string detailPacket = Path.Combine(tempDirectory, "DT_" + lvItem.SubItems[2].Text + "_" + headerInfo.ShelfId + ".TXT"); ImportDetailsInfo[] detailInfoList = detailInfoEngine.ReadFile(detailPacket); if (headerInfoEngine.ErrorManager.ErrorCount > 0) { headerInfoEngine.ErrorManager.SaveErrors(logFile); } Utility.WriteLog(" => Checking Shelf ("+ headerInfo.ShelfId + " - " + headerInfo.ShelfName + ")", logFile); for (int iDetail = 0; iDetail < detailInfoList.Length; iDetail++) { ImportDetailsInfo detailInfo = detailInfoList[iDetail]; if (string.IsNullOrEmpty(detailInfo.Barcode)) { iCountBarcode++; missingQty += detailInfo.Qty; Utility.WriteLog(" [ERROR] Barcode does not exist. ", logFile); } else { Guid productId = ProductBarcodeEx.GetProductIdByBarcode(detailInfo.Barcode); if (productId == System.Guid.Empty) { iCountBarcode++; missingQty += detailInfo.Qty; Utility.WriteLog(" [ERROR] Barcode ("+ detailInfo.Barcode + ") does not exist. ", logFile); } else { if (detailInfo.Qty <= 0) { Utility.WriteLog(" [ERROR] Barcode ("+ detailInfo.Barcode + ") QTY <= 0 ", logFile); isValid = isValid & false; } else { Utility.WriteLog(" [OK] Barcode ("+ detailInfo.Barcode + ") QTY > 0 ", logFile); } } } totalLine++; totalQty += detailInfo.Qty; detailAllList.Add(detailInfo); } missingLine += iCountBarcode; if (iCountBarcode > 0) { Utility.WriteLog(" [ERROR] Details of Shelf ("+ headerInfo.ShelfId + " - " + headerInfo.ShelfName + ") has " + iCountBarcode.ToString() + " empty barcode.", logFile); } else { Utility.WriteLog(" [OK] Details of Shelf ("+ headerInfo.ShelfId + " - " + headerInfo.ShelfName + ") has 0 empty barcode.", logFile); } } #endregion Utility.WriteLog(" RESULT : COMPLETED", logFile); Utility.WriteLog("=> Save Packet", logFile); #region isValid: wrapping up if (isValid) { if (stktkNumber.Trim().Length == 0) { stktkNumber = SystemInfoHelper.Settings.QueuingTxNumber(EnumHelper.TxType.STK); } Utility.WriteLog(" [OK] System Queue ", logFile); if (stktkNumber.Length > 0) { // Stock take header System.Guid stktkheaderId = CreateStockTakeHeader(stktkNumber.Trim(), workplaceId); Utility.WriteLog(" [OK] Create Worksheet (Stock Take - Header)", logFile); // Stock take details if (stktkheaderId != System.Guid.Empty) { CreatedStockTakeDetail(stktkheaderId, stktkNumber.Trim(), detailAllList, workplaceId, uploadedOn); } Utility.WriteLog(" [OK] Create Worksheet (Stock Take - Detail)", logFile); // Stock take header (HHT) System.Guid hhtHeaderId = CreateStockTakeHHTHeader(stktkNumber.Trim(), lvItem.SubItems[4].Text, uploadedOn, workplaceId, lvItem.SubItems[2].Text, totalLine, totalQty, missingLine, missingQty); Utility.WriteLog(" [OK] Create Worksheet (HHT Data Review - Header)", logFile); // Stock take details (HHT) if (hhtHeaderId != System.Guid.Empty) { CreateStockTakeHHTDetails(hhtHeaderId, stktkNumber.Trim(), lvItem.SubItems[4].Text, uploadedOn, detailAllList, lvItem.SubItems[2].Text); } Utility.WriteLog(" [OK] Create Worksheet (HHT Data Review - Detail)", logFile); Utility.WriteLog(" [OK] Barcode Matching", logFile); Utility.WriteLog(" [OK] Counting Missing Data", logFile); Utility.WriteLog(" RESULT : COMPLETED", logFile); // Backup text files if (!Directory.Exists(backupDirectory)) { Directory.CreateDirectory(backupDirectory); } // Header file File.Move(lvItem.SubItems[8].Text, Path.Combine(backupDirectory, Path.GetFileName(lvItem.SubItems[8].Text))); for (int i = 0; i < packetFiles.Length; i++) { File.Move(packetFiles[i], Path.Combine(backupDirectory, Path.GetFileName(packetFiles[i]))); } Utility.WriteLog("=> Backup Data RESULT : COMPLETED", logFile); } } #endregion iCount++; } } }
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(); } } } }