public async Task <IActionResult> ListInvoices(string searchTerm = null, int skip = 0, int count = 50, int timezoneOffset = 0) { var fs = new SearchString(searchTerm); var storeIds = fs.GetFilterArray("storeid") != null?fs.GetFilterArray("storeid") : new List <string>().ToArray(); var model = new InvoicesModel { SearchTerm = searchTerm, Skip = skip, Count = count, StoreIds = storeIds, TimezoneOffset = timezoneOffset }; InvoiceQuery invoiceQuery = GetInvoiceQuery(searchTerm, timezoneOffset); var counting = _InvoiceRepository.GetInvoicesTotal(invoiceQuery); invoiceQuery.Count = count; invoiceQuery.Skip = skip; var list = await _InvoiceRepository.GetInvoices(invoiceQuery); foreach (var invoice in list) { var state = invoice.GetInvoiceState(); model.Invoices.Add(new InvoiceModel() { Status = invoice.Status, StatusString = state.ToString(), ShowCheckout = invoice.Status == InvoiceStatus.New, Date = invoice.InvoiceTime, InvoiceId = invoice.Id, OrderId = invoice.OrderId ?? string.Empty, RedirectUrl = invoice.RedirectURL?.AbsoluteUri ?? string.Empty, AmountCurrency = _CurrencyNameTable.DisplayFormatCurrency(invoice.ProductInformation.Price, invoice.ProductInformation.Currency), CanMarkInvalid = state.CanMarkInvalid(), CanMarkComplete = state.CanMarkComplete(), Details = InvoicePopulatePayments(invoice) }); } model.Total = await counting; return(View(model)); }
public async Task <IActionResult> ListInvoices(string searchTerm = null, int skip = 0, int count = 50) { if (searchTerm == null) { searchTerm = HttpContext.Session.GetString("InvoicesSearchTerm"); } var model = new InvoicesModel { SearchTerm = searchTerm, Skip = skip, Count = count, StatusMessage = StatusMessage }; InvoiceQuery invoiceQuery = GetInvoiceQuery(searchTerm); var counting = _InvoiceRepository.GetInvoicesTotal(invoiceQuery); invoiceQuery.Count = count; invoiceQuery.Skip = skip; var list = await _InvoiceRepository.GetInvoices(invoiceQuery); foreach (var invoice in list) { var state = invoice.GetInvoiceState(); model.Invoices.Add(new InvoiceModel() { Status = state.ToString(), ShowCheckout = invoice.Status == InvoiceStatus.New, Date = invoice.InvoiceTime, InvoiceId = invoice.Id, OrderId = invoice.OrderId ?? string.Empty, RedirectUrl = invoice.RedirectURL ?? string.Empty, AmountCurrency = _CurrencyNameTable.DisplayFormatCurrency(invoice.ProductInformation.Price, invoice.ProductInformation.Currency), CanMarkInvalid = state.CanMarkInvalid(), CanMarkComplete = state.CanMarkComplete() }); } model.Total = await counting; return(View(model)); }
public ActionResult PrintBill(int id) { var ctx = new SmsContext(); InvoicesModel model = new InvoicesModel(); var invoiceInfor = ctx.SP_GET_HOA_DON_INFO(id).FirstOrDefault(); List <V_HOA_DON> detailList = ctx.V_HOA_DON.Where(dh => dh.MA_HOA_DON == id).ToList(); model.Infor = invoiceInfor; model.detailList = detailList; if (invoiceInfor.MA_KHACH_HANG != null && invoiceInfor.MA_KHACH_HANG >= 1) { var customer = ctx.KHACH_HANG.Find(invoiceInfor.MA_KHACH_HANG); if (customer != null && customer.NO_GOI_DAU != null && customer.NO_GOI_DAU > 0) { model.CustomerInformation = customer; } } SmsMasterModel master = new SmsMasterModel(); var companyName = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "COMPANY_NAME").FirstOrDefault(); var address = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "ADDRESS").FirstOrDefault(); var phoneNumber = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "PHONE_NUMBER").FirstOrDefault(); var faxNumber = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "FAX_NUMBER").FirstOrDefault(); var advertisementHeader = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "ADVERTISEMENT_HEADER").FirstOrDefault(); var advertisementFooter = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "ADVERTISEMENT_FOOTER").FirstOrDefault(); master.CompanyName = companyName == null ? "" : companyName.VALUE; master.Address = address == null ? "" : address.VALUE; master.AdvertisementHeader = advertisementHeader == null ? "" : advertisementHeader.VALUE; master.AdvertisementFooter = advertisementFooter == null ? "" : advertisementFooter.VALUE; master.PhoneNumber = phoneNumber == null ? "" : phoneNumber.VALUE; master.FaxNumber = faxNumber == null ? "" : faxNumber.VALUE; model.SmsMaster = master; ctx.Dispose(); return(View(model)); }
public ActionResult Show(int id, string message, string messageInfor) { var ctx = new SmsContext(); var invoiceInfor = ctx.SP_GET_HOA_DON_INFO(id).FirstOrDefault(); InvoicesModel model = new InvoicesModel(); if (invoiceInfor != null && invoiceInfor.MA_KHACH_HANG != null) { var customerInformation = ctx.KHACH_HANG.Find(invoiceInfor.MA_KHACH_HANG); if (customerInformation != null) { model.CustomerInformation = customerInformation; } } List <SP_GET_HOA_DON_DETAIL_FOR_RETURN_Result> detailList = ctx.SP_GET_HOA_DON_DETAIL_FOR_RETURN(id).ToList <SP_GET_HOA_DON_DETAIL_FOR_RETURN_Result>(); model.Infor = invoiceInfor; model.detailReturnList = detailList; ViewBag.Message = message; ViewBag.MessageInfor = messageInfor; ctx.Dispose(); return(View(model)); }
/// <summary> /// service export pdf dự thảo hóa đơn /// </summary> /// <param name="exportObj"></param> /// <returns></returns> public byte[] exportPDF(ExportInvoiceRequest exportObj) { try { SearchInvoiceDA da = new SearchInvoiceDA(); GenerateXMLInvoice xMLInvoice = new GenerateXMLInvoice(); searchInvoiceResponse response = new searchInvoiceResponse(); //lay hoa don PVOILInvoice invoice = da.selectItemInvoiceByFKey(exportObj.FKey); InvoicesModel invoiceModel = ModelBase.mapperStatic <PVOILInvoice, InvoicesModel>().Map <PVOILInvoice, InvoicesModel>(invoice); searchInvoiceModel tmp = new searchInvoiceModel(); //tmp.invoice = invoiceModel; ////lay san pham //tmp.invoice.products = da.selectProductByInvoice(invoiceModel.id); //InvTemplate_GetTemplateInvoice_Result template = da.InvTemplate_GetTemplateInvoice(invoice.Pattern, invoice.ComTaxCode); ////Tạo data XML từ invoice và product //String xml = xMLInvoice.GetXMLData(tmp.invoice, tmp.invoice.products, template.TemplateName); //Tạo data html từ xml //String html = xMLInvoice.GetHtml(xMLInvoice.GetData(xml), template); //Tạo pdf html từ html var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter(); htmlToPdf.Zoom = 1.6f; htmlToPdf.Size = NReco.PdfGenerator.PageSize.A4; htmlToPdf.Margins = new PageMargins { Left = 20 }; //byte[] pdfBytes = htmlToPdf.GeneratePdf(html); //return pdfBytes; return(null); } catch (Exception ex) { throw ex; } }
public ActionResult Payment(InvoicesModel model) { var ctx = new SmsContext(); var invoice = ctx.HOA_DON.Find(model.Infor.MA_HOA_DON); if (invoice != null && invoice.STATUS >= 2) { return(RedirectToAction("Collection", new { @messagae = "Hóa đơn đã được thu tiền." })); } if (invoice != null && invoice.ACTIVE == "A") { if (model.Infor.SO_TIEN_KHACH_TRA == null) { model.Infor.SO_TIEN_KHACH_TRA = 0; } if (model.Infor.SO_TIEN_KHACH_TRA <= (model.Infor.TONG_TIEN - model.Infor.CHIEC_KHAU)) { model.Infor.SO_TIEN_NO_GOI_DAU = (model.Infor.TONG_TIEN - model.Infor.CHIEC_KHAU) - model.Infor.SO_TIEN_KHACH_TRA; } else { model.Infor.SO_TIEN_KHACH_TRA = (model.Infor.TONG_TIEN - model.Infor.CHIEC_KHAU); model.Infor.SO_TIEN_NO_GOI_DAU = 0; } invoice.SO_TIEN_KHACH_TRA = model.Infor.SO_TIEN_KHACH_TRA; invoice.SO_TIEN_NO_GOI_DAU = model.Infor.SO_TIEN_NO_GOI_DAU; invoice.STATUS = 2; invoice.UPDATE_AT = DateTime.Now; invoice.UPDATE_BY = (int)Session["UserId"]; invoice.MA_NHAN_VIEN_THU_TIEN = (int)Session["UserId"]; if (Convert.ToInt32(model.Infor.MA_KHACH_HANG) > 0) { var customer = ctx.KHACH_HANG.Find(Convert.ToInt32(model.Infor.MA_KHACH_HANG)); if (customer != null && customer.ACTIVE == "A") { customer.DOANH_SO = customer.DOANH_SO + Convert.ToDecimal(model.Infor.TONG_TIEN) - Convert.ToDecimal(model.Infor.CHIEC_KHAU); if (model.Infor.SO_TIEN_NO_GOI_DAU > 0) { if (customer.NGAY_PHAT_SINH_NO == null) { customer.NGAY_PHAT_SINH_NO = DateTime.Now; } var DebitHist = ctx.KHACH_HANG_DEBIT_HIST.Create(); DebitHist.NO_TRUOC = Convert.ToDouble(customer.NO_GOI_DAU); DebitHist.NO_SAU = Convert.ToDouble(customer.NO_GOI_DAU) + model.Infor.SO_TIEN_NO_GOI_DAU; DebitHist.NGAY_PHAT_SINH = DateTime.Now; DebitHist.PHAT_SINH = -1 * Convert.ToDouble(model.Infor.SO_TIEN_NO_GOI_DAU); DebitHist.MA_HOA_DON = model.Infor.MA_HOA_DON; DebitHist.MA_KHACH_HANG = customer.MA_KHACH_HANG; DebitHist.MA_NHAN_VIEN_TH = (int)Session["UserId"]; DebitHist.ACTIVE = "A"; DebitHist.UPDATE_AT = DateTime.Now; DebitHist.UPDATE_BY = (int)Session["UserId"]; DebitHist.CREATE_AT = DateTime.Now; DebitHist.CREATE_BY = (int)Session["UserId"]; ctx.KHACH_HANG_DEBIT_HIST.Add(DebitHist); } //customer.NO_GOI_DAU = customer.NO_GOI_DAU + Convert.ToDecimal(model.Infor.SO_TIEN_NO_GOI_DAU); customer.NO_GOI_DAU = Convert.ToDecimal(model.Infor.SO_TIEN_NO_GOI_DAU); customer.UPDATE_AT = DateTime.Now; customer.UPDATE_BY = (int)Session["UserId"]; } else { ViewBag.Message = "Không tìm thấy khách hàng tương ứng."; return(View("../Home/Error")); } } ctx.SaveChanges(); } else { ctx.Dispose(); ViewBag.Message = "Không tìm thấy hóa đơn tương ứng."; return(View("../Home/Error")); } var invoiceInfor = ctx.SP_GET_HOA_DON_INFO(model.Infor.MA_HOA_DON).FirstOrDefault(); List <V_HOA_DON> detailList = ctx.V_HOA_DON.Where(dh => dh.MA_HOA_DON == model.Infor.MA_HOA_DON).ToList(); model.Infor = invoiceInfor; model.detailList = detailList; SmsMasterModel master = new SmsMasterModel(); var companyName = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "COMPANY_NAME").FirstOrDefault(); var address = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "ADDRESS").FirstOrDefault(); var phoneNumber = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "PHONE_NUMBER").FirstOrDefault(); var faxNumber = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "FAX_NUMBER").FirstOrDefault(); var advertisementHeader = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "ADVERTISEMENT_HEADER").FirstOrDefault(); var advertisementFooter = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "ADVERTISEMENT_FOOTER").FirstOrDefault(); master.CompanyName = companyName == null ? "" : companyName.VALUE; master.Address = address == null ? "" : address.VALUE; master.AdvertisementHeader = advertisementHeader == null ? "" : advertisementHeader.VALUE; master.AdvertisementFooter = advertisementFooter == null ? "" : advertisementFooter.VALUE; master.PhoneNumber = phoneNumber == null ? "" : phoneNumber.VALUE; master.FaxNumber = faxNumber == null ? "" : faxNumber.VALUE; model.SmsMaster = master; ctx.Dispose(); return(View(model)); }
public ActionResult PaymentAndExport(InvoicesModel model) { var ctx = new SmsContext(); var InvoiceId = new SqlParameter { ParameterName = "MA_HOA_DON", Value = Convert.ToInt32(model.Infor.MA_HOA_DON) }; var UserId = new SqlParameter { ParameterName = "MA_NHAN_VIEN_THUC_HIEN", Value = Convert.ToInt32(Session["UserId"]) }; if (model.Infor.SO_TIEN_KHACH_TRA >= (model.Infor.TONG_TIEN - model.Infor.CHIEC_KHAU)) { model.Infor.SO_TIEN_KHACH_TRA = model.Infor.TONG_TIEN - model.Infor.CHIEC_KHAU; } var TotalPay = new SqlParameter { ParameterName = "SO_TIEN_KHACH_TRA", Value = Convert.ToDouble(model.Infor.SO_TIEN_KHACH_TRA) }; var returnValue = new SqlParameter { ParameterName = "RETURN_VALUE", Value = Convert.ToInt32(0), Direction = ParameterDirection.Output }; ctx.Database.CommandTimeout = 300; var tonkho = ctx.Database.ExecuteSqlCommand("exec SP_THU_TIEN_XUAT_KHO @MA_HOA_DON, @MA_NHAN_VIEN_THUC_HIEN, @SO_TIEN_KHACH_TRA , @RETURN_VALUE OUT", InvoiceId, UserId, TotalPay, returnValue ); int returnVal = Convert.ToInt32(returnValue.Value); int flg = Convert.ToInt32(Request.Form["flg"]); if (returnVal == 0) { ViewBag.Message = "Không đủ số lượng để xuất kho. Vui lòng kiểm tra lại hóa đơn."; ViewBag.Status = 0; ctx.Dispose(); return(RedirectToAction("ShowDetail", new { @id = model.Infor.MA_HOA_DON, @flg = flg, @status = 0 })); } else if (returnVal == -1) { ViewBag.Message = "Hóa đơn đã được thu tiền. Không thể thu tiền hóa đơn này"; ViewBag.Status = -1; ctx.Dispose(); return(RedirectToAction("ShowDetail", new { @id = model.Infor.MA_HOA_DON, @flg = flg, @status = -1 })); } var invoiceInfor = ctx.SP_GET_HOA_DON_INFO(model.Infor.MA_HOA_DON).FirstOrDefault(); List <V_HOA_DON> detailList = ctx.V_HOA_DON.Where(dh => dh.MA_HOA_DON == model.Infor.MA_HOA_DON).ToList(); model.Infor = invoiceInfor; model.detailList = detailList; SmsMasterModel master = new SmsMasterModel(); var companyName = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "COMPANY_NAME").FirstOrDefault(); var address = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "ADDRESS").FirstOrDefault(); var phoneNumber = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "PHONE_NUMBER").FirstOrDefault(); var faxNumber = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "FAX_NUMBER").FirstOrDefault(); var advertisementHeader = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "ADVERTISEMENT_HEADER").FirstOrDefault(); var advertisementFooter = ctx.SMS_MASTER.Where(u => u.ACTIVE == "A" && u.NAME == "ADVERTISEMENT_FOOTER").FirstOrDefault(); master.CompanyName = companyName == null ? "" : companyName.VALUE; master.Address = address == null ? "" : address.VALUE; master.AdvertisementHeader = advertisementHeader == null ? "" : advertisementHeader.VALUE; master.AdvertisementFooter = advertisementFooter == null ? "" : advertisementFooter.VALUE; master.PhoneNumber = phoneNumber == null ? "" : phoneNumber.VALUE; master.FaxNumber = faxNumber == null ? "" : faxNumber.VALUE; model.SmsMaster = master; ctx.Dispose(); return(View(model)); }
public void TestEndEdit() { EntityList<Invoice> invoices; invoices = _invoiceAdapter.LoadByObjectQuery(new OQuery<Invoice>()); InvoicesModel invModel = new InvoicesModel(invoices); _controller.OpenView(invModel); Assert.IsNotNull(_sideController.CurrentView); Assert.AreSame(invModel, _sideController.CurrentView.Model); Client client; client = GetSomeClient(); client.Invoices.AddRange(_invoiceAdapter.LoadByObjectQuery(new OQuery<Invoice>())); ClientInvoicesModel model = new ClientInvoicesModel(client); _controller.OpenView(model); Invoice inv; inv = invoices[3]; Assert.IsTrue(model.HasEntity(inv.Id)); _controller.BeginEdit(_sideController.CurrentView, inv); double originalAmount = inv.Amount; inv.Amount = 99.0; _controller.EndEdit(_sideController.CurrentView, inv); Invoice inv2; inv2 = (Invoice)model.GetEntity(inv.Id); Assert.IsNotNull(inv2); Assert.AreEqual(inv, inv2); Assert.AreNotSame(inv2, inv); Assert.AreEqual(99.0, inv2.Amount); }
public ActionResult Show(InvoicesModel model) { var id = model.Infor.MA_HOA_DON; var returnList = model.detailReturnList; var ctx = new SmsContext(); var hoaDon = ctx.V_HOA_DON.Where(u => u.MA_HOA_DON == id).FirstOrDefault(); using (var transaction = new System.Transactions.TransactionScope()) { try { var hoadon = ctx.HOA_DON.Find(id); if (hoadon.STATUS == 4) { return(RedirectToAction("Index", new { @message = "Hóa đơn này ." })); } hoadon.STATUS = 4; hoadon.UPDATE_AT = DateTime.Now; hoadon.UPDATE_BY = Convert.ToInt32(Session["UserId"]); ctx.SaveChanges(); var phieutra = ctx.TRA_HANG.Create(); phieutra.MA_HOA_DON = id; phieutra.NGAY_TRA = DateTime.Now; phieutra.NHAN_VIEN_NHAN = Convert.ToInt32(Session["UserId"]); phieutra.STATUS = 1; phieutra.TEN_KHACH_HANG = hoaDon.TEN_KHACH_HANG; phieutra.CREATE_AT = DateTime.Now; phieutra.CREATE_BY = Convert.ToInt32(Session["UserId"]); phieutra.UPDATE_AT = DateTime.Now; phieutra.MA_KHACH_HANG = model.Infor.MA_KHACH_HANG; phieutra.UPDATE_BY = Convert.ToInt32(Session["UserId"]); phieutra.ACTIVE = "A"; ctx.TRA_HANG.Add(phieutra); ctx.SaveChanges(); int maPhieuTra = phieutra.MA_TRA_HANG; CHI_TIET_TRA_HANG chitiet = null; double total = 0; foreach (var detail in model.detailReturnList) { if (Convert.ToInt32(detail.DEL_FLG) != 1) { total += detail.DON_GIA * detail.SO_LUONG; chitiet = ctx.CHI_TIET_TRA_HANG.Create(); chitiet.MA_TRA_HANG = maPhieuTra; chitiet.MA_SAN_PHAM = detail.MA_SAN_PHAM; chitiet.SO_LUONG_TRA = detail.SO_LUONG; chitiet.GIA_VON = detail.DON_GIA; chitiet.ACTIVE = "A"; chitiet.CREATE_AT = DateTime.Now; chitiet.UPDATE_AT = DateTime.Now; chitiet.CREATE_BY = Convert.ToInt32(Session["UserId"]); chitiet.UPDATE_BY = Convert.ToInt32(Session["UserId"]); ctx.CHI_TIET_TRA_HANG.Add(chitiet); ctx.SaveChanges(); } } if (model.Infor.MA_KHACH_HANG != null && model.CustomerInformation != null && model.CustomerInformation.NO_GOI_DAU > 0) { if ((double)model.CustomerInformation.NO_GOI_DAU > total) { var customerInfor = ctx.KHACH_HANG.Find(model.Infor.MA_KHACH_HANG); var cusHist = ctx.KHACH_HANG_DEBIT_HIST.Create(); customerInfor.UPDATE_AT = DateTime.Now; customerInfor.UPDATE_BY = Convert.ToInt32(Session["UserId"]); cusHist.NO_TRUOC = (double)customerInfor.NO_GOI_DAU; cusHist.NO_SAU = cusHist.NO_TRUOC - total; cusHist.MA_NHAN_VIEN_TH = Convert.ToInt32(Session["UserId"]); cusHist.GHI_CHU = "Trả hàng - Trừ vào công nợ của khách hàng"; customerInfor.NO_GOI_DAU = customerInfor.NO_GOI_DAU - (decimal)total; cusHist.PHAT_SINH = total; cusHist.NGAY_PHAT_SINH = DateTime.Now; cusHist.UPDATE_AT = DateTime.Now; cusHist.CREATE_AT = DateTime.Now; cusHist.MA_KHACH_HANG = customerInfor.MA_KHACH_HANG; cusHist.UPDATE_BY = Convert.ToInt32(Session["UserId"]); cusHist.CREATE_BY = Convert.ToInt32(Session["UserId"]); cusHist.ACTIVE = "A"; cusHist.MA_PHIEU_TRA = maPhieuTra; customerInfor.DOANH_SO = customerInfor.DOANH_SO - (decimal)total; ctx.KHACH_HANG_DEBIT_HIST.Add(cusHist); ctx.SaveChanges(); } else { var customerInfor = ctx.KHACH_HANG.Find(model.Infor.MA_KHACH_HANG); var cusHist = ctx.KHACH_HANG_DEBIT_HIST.Create(); customerInfor.UPDATE_AT = DateTime.Now; customerInfor.UPDATE_BY = Convert.ToInt32(Session["UserId"]); cusHist.NO_SAU = 0; cusHist.NO_TRUOC = (double)customerInfor.NO_GOI_DAU; cusHist.PHAT_SINH = (double)customerInfor.NO_GOI_DAU; cusHist.NGAY_PHAT_SINH = DateTime.Now; cusHist.UPDATE_AT = DateTime.Now; cusHist.CREATE_AT = DateTime.Now; cusHist.MA_KHACH_HANG = customerInfor.MA_KHACH_HANG; cusHist.UPDATE_BY = Convert.ToInt32(Session["UserId"]); cusHist.CREATE_BY = Convert.ToInt32(Session["UserId"]); cusHist.ACTIVE = "A"; cusHist.MA_PHIEU_TRA = maPhieuTra; cusHist.MA_NHAN_VIEN_TH = Convert.ToInt32(Session["UserId"]); cusHist.GHI_CHU = "Trả hàng - Trừ vào công nợ của khách hàng"; customerInfor.NO_GOI_DAU = 0; customerInfor.NGAY_PHAT_SINH_NO = null; customerInfor.DOANH_SO = customerInfor.DOANH_SO - (decimal)total; ctx.KHACH_HANG_DEBIT_HIST.Add(cusHist); ctx.SaveChanges(); } } transaction.Complete(); ctx.Dispose(); return(RedirectToAction("ReturnPurchaseList", new { @inforMessage = "Nhận trả hàng thành công." })); } catch (Exception) { Transaction.Current.Rollback(); ctx.Dispose(); return(RedirectToAction("ReturnPurchaseList", new { @message = "Nhận trả hàng thất bại, vui lòng liên hệ admin." })); } } }