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