Exemplo n.º 1
0
        /// <summary>
        /// Hủy giao dịch với id xác định
        /// </summary>
        /// <requires>
        /// lastGiaoDich != null /\ lastGiaoDich.GiaoDich.SoTien != null
        /// </requires>
        /// <effects>
        /// soTien = lastGiaoDich.SoTien
        /// delete GiaoDich
        ///
        /// update model
        ///     SoTienDaThu -= soTien
        ///
        /// duNo = SoTienPhaiNop - SoTienDaThu
        /// if duNo > 0
        ///     TrangThaiThu = false
        ///     if DuCo != null
        ///         delete DuCo
        /// else
        ///     if DuCo != null
        ///         DuCo.SoTienDu -= soTien
        ///         if DuCo.SoTienDu eq 0
        ///             delete DuCo
        /// </effects>
        public static bool HuyGiaoDich(GiaoDichModel model, HDNHDUnitOfWork uow = null)
        {
            if (uow == null)
            {
                uow = new HDNHDUnitOfWork();
            }

            IGiaoDichRepository giaoDichRepository = uow.Repository <GiaoDichRepository>();
            IDuCoRepository     duCoRepository     = uow.Repository <DuCoRepository>();

            uow.BeginTransaction();
            try
            {
                var soTien = model.GiaoDich.SoTien.Value;
                giaoDichRepository.Delete(model.GiaoDich);

                // update model
                model.SoTienNopTheoThang.SoTienDaThu -= soTien;

                int duNo = (int)(model.SoTienNopTheoThang.SoTienPhaiNop - model.SoTienNopTheoThang.SoTienDaThu);

                if (duNo > 0)
                {
                    model.HoaDon.Trangthaithu = false;
                    model.HoaDon.NgayNopTien  = null;
                }

                // trừ dư có
                if (model.DuCo != null)
                {
                    // thu hồi dư có nếu đã áp dụng cho hóa đơn tháng sau
                    IHoaDonRepository hoaDonRepository = uow.Repository <HoaDonRepository>();
                    var hoaDonModel = hoaDonRepository.GetHoaDonModelByID(model.HoaDon.HoadonnuocID);

                    // cập nhật dư có
                    model.DuCo.SoTienDu -= soTien;

                    if (model.DuCo.SoTienDu <= 0)
                    {
                        duCoRepository.Delete(model.DuCo);
                        thuHoiDuCo(hoaDonModel, uow);
                    }
                    else
                    {
                        apDungDuCo(hoaDonModel, uow);
                    }
                }

                uow.SubmitChanges();
                uow.Commit();
            }
            catch (Exception)
            {
                uow.RollBack();
                return(false);
            }

            return(true);
        }
 public HomeStatisticViewComponent(
     UserManager <ApplicationUser> userManager,
     IFeedbackRepository feedbackRepository,
     INopCardRepository noptheRepository,
     IGiaoDichRepository giaodichRepository)
 {
     _noptheRepository   = noptheRepository;
     _giaodichRepository = giaodichRepository;
     _userManager        = userManager;
     _feedbackRepository = feedbackRepository;
 }
Exemplo n.º 3
0
 public GiaoDichController(INopCardRepository NopCardRepository,
                           UserManager <ApplicationUser> userManager,
                           IMenhGiaRepository menhGiaRepository,
                           ICardRepository cardRepository,
                           IGiaoDichRepository giaodichRepository)
 {
     _NopCardRepository  = NopCardRepository;
     _userManager        = userManager;
     _menhGiaRepository  = menhGiaRepository;
     _cardRepository     = cardRepository;
     _giaodichRepository = giaodichRepository;
 }
Exemplo n.º 4
0
        /// <summary>
        /// Hủy giao dịch với ID đã cho
        /// </summary>
        /// <effects>
        /// if giaoDich with specified giaoDichID not exist
        ///     throw NotFoundException: Dữ liệu bất đồng bộ. Vui lòng tải lại trang.
        /// if lastGiaoDich.ID == giaoDichID
        ///     invoke @{link #HuyGiaoDich}: roll back lastGiaoDich
        /// </effects>
        public AjaxResult HuyGiaoDich(int khachHangID, int giaoDichID)
        {
            IGiaoDichRepository giaoDichRepository = uow.Repository <GiaoDichRepository>();

            var model = giaoDichRepository.GetLastGiaoDichByKHID(khachHangID);

            if (model == null || model.GiaoDich.GiaoDichID != giaoDichID)
            {
                return(AjaxResult.Fail("Dữ liệu bất đồng bộ. Vui lòng tải lại trang.", true));
            }

            if (!GiaoDichHelpers.HuyGiaoDich(model, uow))
            {
                return(AjaxResult.Fail("Lỗi hủy giao dịch. Vui lòng thử lại."));
            }

            return(AjaxResult.Success("Hủy giao dịch thành công.", true));
        }
Exemplo n.º 5
0
 public UserAccountController(UserManager <ApplicationUser> userManager,
                              RoleManager <IdentityRole> roleManager,
                              SignInManager <ApplicationUser> signInManager,
                              INopCardRepository NopCardRepository,
                              IGiaoDichRepository giaoDichRepository,
                              ITKNHRepository tknhRepository,
                              ICardRepository cardRepository,
                              IMenhGiaRepository menhgiaRepository)
 {
     _signInManager      = signInManager;
     _userManager        = userManager;
     _roleManager        = roleManager;
     _NopCardRepository  = NopCardRepository;
     _giaoDichRepository = giaoDichRepository;
     _tknhRepository     = tknhRepository;
     _menhgiaRepository  = menhgiaRepository;
     _cardRepository     = cardRepository;
 }
Exemplo n.º 6
0
        public ActionResult ThemGiaoDich(int hoaDonID, Pager pager)
        {
            IGiaoDichRepository giaoDichRepository = uow.Repository <GiaoDichRepository>();
            var model = hoaDonRepository.GetHoaDonModelByID(hoaDonID);

            if (model == null)
            {
                return(HttpNotFound("Dữ liệu bất đồng bộ. Vui lòng refresh lại trang!"));
            }

            var giaoDichs = giaoDichRepository.GetAllGiaoDichModelByKHID(model.KhachHang.KhachhangID);

            giaoDichs = pager.ApplyPager(giaoDichs);
            #region view data
            ViewBag.HoaDonModel = model;
            ViewBag.Pager       = pager;
            ViewBag.KhachHang   = model.KhachHang;
            #endregion
            return(View(giaoDichs.ToList()));
        }
Exemplo n.º 7
0
        /// <summary>
        /// Hủy thanh toán HoaDonModel
        /// </summary>
        /// <requires>
        /// model != null /\ model.HoaDon.TrangThaiThu eq true
        /// </requires>
        /// <effects>
        /// if model.SoTienPhaiNop.SoTienDaThu == 0
        ///     throw NotPossibleException: Khách hàng thanh toán trừ dư có
        /// if model.KhachHang.HinhThucThanhToan == ChuyenKhoan
        ///     throw NotPossibleException: Khách hàng thanh toán qua chuyển khoản
        /// if lastGiaoDich.NgayThu == model.HoaDon.NgayThu && lastGiaoDich.SoTien == model.SoTienNopTheoThang.SoTienDaThu
        ///     invoke @{link GiaoDichHelpers#HuyGiaoDich()}: huy giao dich gan nhat
        ///
        /// throw NotPossibleException: Không thể hủy thanh toán tại đây! Vui lòng hủy giao dịch tại Xem lịch sử giao dịch.
        public static bool HuyThanhToan(HoaDonModel model, HDNHDUnitOfWork uow = null)
        {
            if (uow == null)
            {
                uow = new HDNHDUnitOfWork();
            }

            if (model.SoTienNopTheoThang.SoTienDaThu == 0)
            {
                throw new Exception("Khách hàng thanh toán trừ dư có.");
            }

            if (model.KhachHang.HinhthucttID == (int)EHinhThucThanhToan.ChuyenKhoan)
            {
                throw new Exception("Khách hàng thanh toán qua chuyển khoản.");
            }

            var current = DateTime.Now.AddMonths(-1);

            if (model.HoaDonTiepTheo != null && model.HoaDonTiepTheo.Trangthaithu == true &&
                (model.HoaDon.ThangHoaDon != current.Month || model.HoaDon.NamHoaDon != current.Year))
            {
                throw new Exception("Khách hàng đã thanh toán hóa đơn tiếp theo.");
            }

            IGiaoDichRepository giaoDichRepository = uow.Repository <GiaoDichRepository>();
            var lastGiaoDich = giaoDichRepository.GetLastGiaoDichByKHID(model.KhachHang.KhachhangID);

            if (lastGiaoDich == null)
            {
                throw new Exception("Lỗi, không có dữ liệu giao dịch cho hóa đơn này.");
            }

            if (lastGiaoDich.SoTienNopTheoThang.ID != model.SoTienNopTheoThang.ID ||
                lastGiaoDich.GiaoDich.SoTien != model.SoTienNopTheoThang.SoTienDaThu)
            {
                throw new Exception("Không thể hủy thanh toán tại đây! Vui lòng hủy tại trang 'Lịch sử giao dịch'.");
            }

            return(GiaoDichHelpers.HuyGiaoDich(lastGiaoDich, uow));
        }
Exemplo n.º 8
0
        /// <summary>
        ///     Xem lịch sử giao dịch của khách hàng
        /// </summary>
        public ActionResult LichSuGiaoDich(int id, Pager pager)
        {
            title = "Chi tiết lịch sử giao dịch";

            var khachHangModel = khachHangRepository.GetKhachHangDetailsModel(id);

            if (khachHangModel == null)
            {
                return(RedirectToAction("Index"));
            }

            IGiaoDichRepository giaoDichRepository = uow.Repository <GiaoDichRepository>();
            var items = giaoDichRepository.GetAllGiaoDichModelByKHID(id);

            items = pager.ApplyPager(items);

            #region view data
            ViewBag.Pager          = pager;
            ViewBag.KhachHangModel = khachHangModel;
            #endregion

            return(View(items.ToList()));
        }
Exemplo n.º 9
0
        /// <summary>
        /// cập nhật ngày thu cho HoaDon với ID đã cho
        /// </summary>
        public AjaxResult CapNhatNgayThu(int hoaDonID, string ngayThu)
        {
            var    hoaDon     = hoaDonRepository.GetByID(hoaDonID);
            string bakNgayNop = null;

            if (hoaDon != null && hoaDon.Trangthaithu == true)
            {
                IGiaoDichRepository giaoDichRepository = uow.Repository <GiaoDichRepository>();
                var giaoDich = giaoDichRepository.GetGDThanhToanByHDID(hoaDonID);
                if (giaoDich == null)
                {
                    return(AjaxResult.Fail("Không tìm thấy giao dịch thanh toán cho hóa đơn đã chọn. Vui lòng tải lại trang.", true, new
                    {
                        HoaDon = new { NgayNopTien = bakNgayNop } // send back prev ngayNop
                    }));
                }

                bakNgayNop = hoaDon.NgayNopTien.Value.ToString("dd/MM/yyyy"); // backup ngayNop
                DateTime dt;
                if (DateTime.TryParseExact(ngayThu, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
                {
                    if ((hoaDon.ThangHoaDon < dt.Month && hoaDon.NamHoaDon == dt.Year) || hoaDon.NamHoaDon < dt.Year)
                    {
                        hoaDon.NgayNopTien    = dt;
                        giaoDich.NgayGiaoDich = dt;
                        uow.SubmitChanges();
                        return(AjaxResult.Success("Ngày thu đã được cập nhật."));
                    }
                }
            }

            return(AjaxResult.Fail("Ngày thu không đúng hoặc hóa đơn chưa thanh toán.", false, new
            {
                HoaDon = new { NgayNopTien = bakNgayNop } // send back prev ngayNop
            }));
        }
Exemplo n.º 10
0
        /// <summary>
        /// Khách hàng thanh toán hóa đơn hoặc nộp vào tài khoản
        /// ngayThu không đúng > ngày hiện tại
        /// </summary>
        /// <requires>
        /// model != null /\ model.KhachHang != null /\ model.SoTienNopTheoThang != null /\ soTien > 0
        /// </requires>
        /// <effects>
        /// create new GiaoDich & insert
        /// update model
        ///     SoTienDaThu += soTien
        ///
        /// duNo = SoTienPhaiNop - SoTienDaThu
        /// if duNo lt= 0
        ///     TrangThaiThu = true
        ///     NgayThu = ngayThu
        ///     if duNo lt 0
        ///         if DuCo == null
        ///             create new DuCo & insert
        ///         DuCo.SoTienDu -= duNo
        /// else
        ///     giaoDich.SoDu = duNo
        /// </effects>
        public static bool ThemGiaoDich(HoaDonModel model, int soTien, DateTime?ngayThu = null, HDNHDUnitOfWork uow = null)
        {
            if (ngayThu == null)
            {
                ngayThu = DateTime.Now;
            }
            if (uow == null)
            {
                uow = new HDNHDUnitOfWork();
            }
            IGiaoDichRepository giaoDichRepository = uow.Repository <GiaoDichRepository>();
            IDuCoRepository     duCoRepository     = uow.Repository <DuCoRepository>();

            uow.BeginTransaction();
            try
            {
                // add new GiaoDich
                var giaoDich = new HDNHD.Models.DataContexts.GiaoDich()
                {
                    TienNopTheoThangID = model.SoTienNopTheoThang.ID,
                    SoTien             = soTien,
                    SoDu         = 0,
                    NgayGiaoDich = ngayThu
                };
                giaoDichRepository.Insert(giaoDich);

                // update model
                model.SoTienNopTheoThang.SoTienDaThu += soTien;

                int duNo = (int)(model.SoTienNopTheoThang.SoTienPhaiNop - model.SoTienNopTheoThang.SoTienDaThu);

                if (duNo <= 0)
                {
                    model.HoaDon.Trangthaithu = true;
                    model.HoaDon.NgayNopTien  = ngayThu;

                    if (duNo < 0)
                    {
                        if (model.DuCo == null)
                        {
                            model.DuCo = new HDNHD.Models.DataContexts.DuCo()
                            {
                                KhachhangID        = model.KhachHang.KhachhangID,
                                TienNopTheoThangID = model.SoTienNopTheoThang.ID,
                            };
                            duCoRepository.Insert(model.DuCo);
                        }
                        model.DuCo.SoTienDu = -duNo;

                        // trừ dư có cho hóa đơn tiếp theo (nếu có)
                        apDungDuCo(model, uow);
                    }
                }
                else
                {
                    giaoDich.SoDu = duNo;

                    // TODO: nếu hóa đơn đã thanh toán, giaoDich.SoDu = dư có sau giao dịch
                }

                uow.SubmitChanges();
                uow.Commit();
                return(true);
            }
            catch (Exception)
            {
                uow.RollBack();
            }

            return(false);
        }