Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 3
0
        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));
        }
Exemplo n.º 5
0
        /// <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;
            }
        }
Exemplo n.º 6
0
        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));
        }
Exemplo n.º 7
0
        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." }));
                }
            }
        }