/// <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); }