public ActionResult SaveUpdatePurRet(PurRetMain PurRet, List <PurRetDetail> PurRetDetail, string IsSave) { using (var transaction = new TransactionScope()) { try { RBACUser rUser = new RBACUser(Session["UserName"].ToString()); #region for Purs Return transection string trnType = "Save"; string Msg = "1"; //Firstly deleted the saved For Update if (IsSave == "1") { if (!rUser.HasPermission("PurchaseReturn_Update")) { return(Json("U", JsonRequestBehavior.AllowGet)); } trnType = "Update"; Msg = "2"; #region For AVP OR LOT if (Session["MaintLot"].ToString() == "True") { var sRetMain = _PurRetMainService.All().Where(s => s.PurRetNo == PurRet.PurRetNo).FirstOrDefault(); var sRetDetail = _PurRetDetailService.All().Where(s => s.PurRetId == sRetMain.PurRetId).ToList(); foreach (var currentItem in sRetDetail) { var currentStocks = _currentStockService.All().ToList().FirstOrDefault(m => m.ItemCode == currentItem.ItemCode && m.LocCode == PurRet.LocNo && m.LotNo == currentItem.LotNo); if (currentStocks != null) { currentStocks.CurrQty = currentStocks.CurrQty + currentItem.ReturnQty; currentStocks.UnitPrice = Convert.ToDouble(currentItem.UnitPrice); _currentStockService.Update(currentStocks); } } } else { // For Costledger Code } #endregion var saleRetDel = _PurRetMainService.All().ToList().Where(y => y.PurRetNo == PurRet.PurRetNo).FirstOrDefault(); _PurRetDetailService.All().ToList().Where(y => y.PurRetId == saleRetDel.PurRetId).ToList().ForEach(x => _PurRetDetailService.Delete(x)); _PurRetDetailService.Save(); _PurRetMainService.Delete(saleRetDel); _PurRetMainService.Save(); var rcvDel = _issueMainService.All().ToList().Where(y => y.RefNo == PurRet.PurRetNo && y.VchrNo == PurRet.VchrNo).FirstOrDefault(); _issueDetailService.All().ToList().Where(y => y.IssueNo == PurRet.ChallanNo).ToList().ForEach(x => _issueDetailService.Delete(x)); _receiveDetailService.Save(); _issueMainService.Delete(rcvDel); _issueMainService.Save(); } if (!rUser.HasPermission("PurchaseReturn_Insert")) { return(Json("X", JsonRequestBehavior.AllowGet)); } var IfExist = _PurRetMainService.All().Where(x => x.PurRetNo == PurRet.PurRetNo).FirstOrDefault(); if (IfExist == null) { PurRet.FinYear = Session["FinYear"].ToString(); PurRet.BranchCode = Session["BranchCode"].ToString(); PurRet.ProjCode = Session["ProjCode"].ToString(); PurRet.EntryDateTime = DateTime.Now; _PurRetMainService.Add(PurRet); _PurRetMainService.Save(); if (PurRetDetail != null) { foreach (var sRetDExtItem in PurRetDetail) { PurRetDetail sRetDetail = new PurRetDetail(); var srID = _PurRetMainService.All().Select(s => s.PurRetId).LastOrDefault(); if (srID == 0) { sRetDExtItem.PurRetId = 1; } else { sRetDExtItem.PurRetId = srID; } sRetDetail = sRetDExtItem; _PurRetDetailService.Add(sRetDetail); } } _PurRetDetailService.Save(); #region For Issue var IssueNo = _issueMainService.All().Select(s => Convert.ToInt32(s.IssueNo)).LastOrDefault() + 1; if (IssueNo != 0) { var todayDate = DateTime.Now; IssueMain issueInfo = new IssueMain(); issueInfo.IssueNo = "0" + IssueNo.ToString(); //PurRet.PurRetNo; issueInfo.BranchCode = Session["BranchCode"].ToString(); issueInfo.IssueDate = PurRet.PurRetDate.AddHours(todayDate.Hour).AddMinutes(todayDate.Minute).AddSeconds(todayDate.Second).AddMilliseconds(todayDate.Millisecond); issueInfo.FromLocCode = PurRet.LocNo; //issueInfo.StoreLocCode = PurRet.StoreLocCode; issueInfo.IssueToSubCode = PurRet.CustCode; //issueInfo.DesLocCode = PurRet.DesLocCode; //issueInfo.Accode = PurRet.Accode; issueInfo.RefNo = PurRet.PurRetNo; issueInfo.RefDate = PurRet.PurRetDate; issueInfo.Remarks = PurRet.Remarks; //issueInfo.IssueByCode = PurRet.IssueByCode; issueInfo.AppByCode = PurRet.ApprBy; issueInfo.IssTime = DateTime.Now; issueInfo.FinYear = Session["FinYear"].ToString(); issueInfo.GLPost = false; issueInfo.IssDate = PurRet.PurRetDate.AddHours(todayDate.Hour).AddMinutes(todayDate.Minute).AddSeconds(todayDate.Second).AddMilliseconds(todayDate.Millisecond); issueInfo.cashReceiptStatus = false; issueInfo.IsReceived = false; issueInfo.VchrNo = PurRet.VchrNo; double amount = 0.0; issueInfo.EntrySrc = "PR"; issueInfo.EntrySrcNo = issueInfo.IssueNo; List <IssueDetails> issuDetailsList = new List <IssueDetails>(); #region For LOT OR AVP if (Session["MaintLot"].ToString() == "True") { #region Not AutoLot by issueDetail foreach (var currentItem in PurRetDetail) { var currentStocks = _currentStockService.All().ToList().FirstOrDefault(m => m.ItemCode == currentItem.ItemCode && m.LocCode == PurRet.LocNo && m.LotNo == currentItem.LotNo); if (currentStocks != null) { currentStocks.CurrQty = currentStocks.CurrQty - currentItem.ReturnQty; currentStocks.UnitPrice = (double)currentItem.UnitPrice; _currentStockService.Update(currentStocks); } else { CurrentStock currStock = new CurrentStock(); currStock.LocCode = PurRet.LocNo; currStock.LotNo = currentItem.LotNo; currStock.ItemCode = currentItem.ItemCode; currStock.CurrQty = 0 - currentItem.ReturnQty; currStock.UnitPrice = (double)currentItem.UnitPrice; _currentStockService.Add(currStock); } } #endregion } else { #region for Cost ledger foreach (var costLedger in PurRetDetail) { CostLedger cLedger = new CostLedger(); cLedger.IssQty = costLedger.ReturnQty; cLedger.IssRate = (double)costLedger.UnitPrice; cLedger.IssTotal = cLedger.IssQty * cLedger.IssRate; cLedger.RecQty = 0; cLedger.RecRate = 0; cLedger.RecTotal = 0; var existCurrStoc = CostLedgerAppService.All().Where(x => x.ItemCode == costLedger.ItemCode && x.LocNo == PurRet.LocNo.Trim()).ToList(); if (existCurrStoc.Count != 0) { var date = existCurrStoc.Max(x => x.TrDate); var existCurrStock = CostLedgerAppService.All().OrderByDescending(s => s.RecId).Where(x => x.ItemCode == costLedger.ItemCode && x.LocNo == PurRet.LocNo.Trim() && x.TrDate == date).FirstOrDefault(); cLedger.BalQty = existCurrStock.BalQty - cLedger.IssQty; cLedger.BalRate = System.Math.Round(existCurrStock.BalRate, 2); cLedger.BalTotal = System.Math.Round(cLedger.BalQty * cLedger.BalRate, 2); cLedger.LocNo = PurRet.LocNo; cLedger.ItemCode = costLedger.ItemCode; cLedger.TrDate = PurRet.PurRetDate.AddHours(todayDate.Hour).AddMinutes(todayDate.Minute).AddSeconds(todayDate.Second).AddMilliseconds(todayDate.Millisecond); cLedger.UpdSrcNo = PurRet.PurRetNo; cLedger.UpdSrc = "PR"; CostLedgerAppService.Add(cLedger); } else if (existCurrStoc.Count == 0) { cLedger.CurrQty = 0; cLedger.UnitPrice = 0; cLedger.BalTotal = 0; cLedger.BalQty = cLedger.BalQty - cLedger.IssQty; cLedger.BalRate = cLedger.IssRate; cLedger.BalRate = System.Math.Round(cLedger.BalRate, 2); cLedger.BalTotal = System.Math.Round(cLedger.BalQty * cLedger.BalRate, 2); cLedger.LocNo = PurRet.LocNo; cLedger.ItemCode = costLedger.ItemCode; cLedger.TrDate = PurRet.PurRetDate.AddHours(todayDate.Hour).AddMinutes(todayDate.Minute).AddSeconds(todayDate.Second).AddMilliseconds(todayDate.Millisecond); cLedger.UpdSrcNo = PurRet.PurRetNo; cLedger.UpdSrc = "PR"; CostLedgerAppService.Add(cLedger); } CostLedgerAppService.Save(); } #endregion } #endregion foreach (var issuDetailsItem in PurRetDetail) { IssueDetails issueDetailsInfo = new IssueDetails(); issueDetailsInfo.IssueNo = "0" + IssueNo.ToString(); issueDetailsInfo.ItemCode = issuDetailsItem.ItemCode; issueDetailsInfo.SubCode = PurRet.CustCode; issueDetailsInfo.Description = issuDetailsItem.Description; issueDetailsInfo.Qty = issuDetailsItem.ReturnQty; issueDetailsInfo.Price = (double)issuDetailsItem.UnitPrice; //issueDetailsInfo.ExQty = issuDetailsItem.ExQty; issueDetailsInfo.LotNo = "01"; amount = amount + (issuDetailsItem.ReturnQty * (double)issuDetailsItem.UnitPrice); issuDetailsList.Add(issueDetailsInfo); } issueInfo.Amount = amount; issueInfo.IssueDetails = issuDetailsList; _issueMainService.Add(issueInfo); _issueMainService.Save(); } #endregion TransactionLogService.SaveTransactionLog(_transactionLogService, "Purchase Return", trnType, PurRet.VchrNo, Session["UserName"].ToString()); //LoadDropDown.ProvitionInvRSave("IR", "I", recvInfo.RcvNo, recvInfo.VchrNo, Session["FinYear"].ToString(), Session["ProjCode"].ToString(), Session["BranchCode"].ToString(), recvMain.RcvDate.ToString("yyyy-MM-dd"), Session["UserName"].ToString()); transaction.Complete(); return(Json(new { Msg = Msg }, JsonRequestBehavior.AllowGet)); } else { transaction.Dispose(); return(Json("3", JsonRequestBehavior.AllowGet)); } #endregion } catch (Exception ex) { transaction.Dispose(); return(Json(ex.Message.ToString(), JsonRequestBehavior.AllowGet)); } } }