/// <summary> /// /// </summary> /// <param name="objThanhtoan"></param> /// <param name="objLuotkham"></param> /// <param name="objArrPaymentDetail"></param> /// <param name="id_thanhtoan"></param> /// <param name="IdHdonLog"></param> /// <param name="Layhoadondo"></param> /// <param name="TongtienBNchitra"></param> /// <returns></returns> public ActionResult ThanhtoanChiphiDVuKCB(KcbThanhtoan objThanhtoan, KcbLuotkham objLuotkham, List<KcbThanhtoanChitiet> objArrPaymentDetail, ref int id_thanhtoan, long IdHdonLog, bool Layhoadondo, ref decimal TongtienBNchitra,ref string ErrMsg) { ErrMsg = ""; decimal PtramBHYT = 0; ///tổng tiền hiện tại truyền vào của lần payment đang thực hiện decimal v_dblTongtienDCT = 0; ///tổng tiền đã thanh toán decimal v_TotalPaymentDetail = 0; try { using (var scope = new TransactionScope()) { using (var dbscope = new SharedDbConnectionScope()) { if (Utility.Byte2Bool(objThanhtoan.NoiTru)) { if (THU_VIEN_CHUNG.Laygiatrithamsohethong("NOITRU_TUDONGHOANUNG_KHITHANHTOANNOITRU", "0", false) == "1") { SPs.NoitruHoanung(objLuotkham.MaLuotkham, objLuotkham.IdBenhnhan, objThanhtoan.NgayThanhtoan, globalVariables.gv_intIDNhanvien, globalVariables.UserName, (int)objLuotkham.IdKhoanoitru, (long)objLuotkham.IdRavien, (int)objLuotkham.IdBuong, (int)objLuotkham.IdGiuong, (byte)1).Execute(); } } else { if (THU_VIEN_CHUNG.Laygiatrithamsohethong("KCB_THANHTOAN_KICHHOAT_TAMUNG_NGOAITRU", "0", false) == "1") if (THU_VIEN_CHUNG.Laygiatrithamsohethong("NGOAITRU_TUDONGHOANUNG_KHITHANHTOANNGOAITRU", "0", false) == "1") { SPs.NoitruHoanung(objLuotkham.MaLuotkham, objLuotkham.IdBenhnhan, objThanhtoan.NgayThanhtoan, globalVariables.gv_intIDNhanvien, globalVariables.UserName, (int)objLuotkham.IdKhoanoitru, (long)objLuotkham.IdRavien, (int)objLuotkham.IdBuong, (int)objLuotkham.IdGiuong, (byte)0).Execute(); } } ///Tính tổng tiền đồng chi trả v_dblTongtienDCT = TongtienKhongTutuc(objArrPaymentDetail); KcbThanhtoanCollection lstKcbThanhtoanCollection = new KcbThanhtoanController() .FetchByQuery( KcbThanhtoan.CreateQuery() .AddWhere(KcbThanhtoan.Columns.MaLuotkham, Comparison.Equals, objLuotkham.MaLuotkham) .AND(KcbThanhtoan.Columns.IdBenhnhan, Comparison.Equals, objLuotkham.IdBenhnhan) .AND(KcbThanhtoan.Columns.KieuThanhtoan, Comparison.Equals, 0) ); List<long> lstIdThanhtoan = (from q in lstKcbThanhtoanCollection select q.IdThanhtoan).Distinct().ToList<long>(); //Biến chứa danh sách tất cả các chi tiết dùng để tính lại tổng tiền thanh toán cho thanh toán có bản ghi bị hủy List<KcbThanhtoanChitiet> lstKcbThanhtoanChitiet = new List<KcbThanhtoanChitiet>(); if (lstIdThanhtoan.Count > 0) lstKcbThanhtoanChitiet = new Select().From(KcbThanhtoanChitiet.Schema) .Where(KcbThanhtoanChitiet.Columns.IdThanhtoan).In(lstIdThanhtoan) .ExecuteAsCollection<KcbThanhtoanChitietCollection>().ToList<KcbThanhtoanChitiet>(); v_TotalPaymentDetail = (from p in lstKcbThanhtoanChitiet where p.TuTuc == 0 select p).Sum(c => c.SoLuong * c.DonGia); //Tính toán lại phần trăm BHYT chủ yếu liên quan đến phần lương cơ bản. //Phần trăm này có thể bị biến đổi và khác với % trong các bảng dịch vụ LayThongtinPtramBHYT(v_dblTongtienDCT + v_TotalPaymentDetail, objLuotkham, ref PtramBHYT); objThanhtoan.MaThanhtoan = THU_VIEN_CHUNG.TaoMathanhtoan(Convert.ToDateTime(objThanhtoan.NgayThanhtoan)); objThanhtoan.PtramBhyt = Utility.Int16Dbnull(PtramBHYT, 0); objThanhtoan.IdLoaidoituongKcb = objLuotkham.IdLoaidoituongKcb; objThanhtoan.IsNew = true; objThanhtoan.Save(); //Tính lại Bnhan chi trả và BHYT chi trả theo % BHYT mới THU_VIEN_CHUNG.TinhPhamTramBHYT(objLuotkham, ref objArrPaymentDetail, ref lstKcbThanhtoanChitiet, PtramBHYT); decimal TT_BN = 0m; decimal TT_BNCT = 0m; decimal TT_PT = 0m; decimal TT_TT = 0m; decimal TT_BHYT = 0m; decimal TT_Chietkhau_Chitiet = 0m; if (THU_VIEN_CHUNG.Laygiatrithamsohethong("BHYT_TINHLAI_TOANBODICHVU", "1", false) == "1") { foreach (int IdThanhtoan in lstIdThanhtoan) { TT_BN = 0m; TT_BHYT = 0m; TT_PT = 0m; TT_TT = 0m; TT_BNCT = 0m; TT_Chietkhau_Chitiet = 0m; List<KcbThanhtoanChitiet> _LstChitiet = (from q in lstKcbThanhtoanChitiet where q.IdThanhtoan == IdThanhtoan select q).ToList<KcbThanhtoanChitiet>(); if (_LstChitiet.Count > 0) { foreach (KcbThanhtoanChitiet objChitietThanhtoan in _LstChitiet) { if (!Utility.Byte2Bool(objChitietThanhtoan.TuTuc)) TT_BHYT += objChitietThanhtoan.BhytChitra * objChitietThanhtoan.SoLuong; TT_Chietkhau_Chitiet += Utility.DecimaltoDbnull(objChitietThanhtoan.TienChietkhau, 0); TT_PT += objChitietThanhtoan.PhuThu * objChitietThanhtoan.SoLuong; if (Utility.Byte2Bool(objChitietThanhtoan.TuTuc)) TT_TT += objChitietThanhtoan.BnhanChitra * objChitietThanhtoan.SoLuong; else TT_BNCT += objChitietThanhtoan.BnhanChitra * objChitietThanhtoan.SoLuong; objChitietThanhtoan.IsNew = false; objChitietThanhtoan.MarkOld(); objChitietThanhtoan.Save(); } TT_BN += TT_PT + TT_BNCT + TT_TT; //Update lại tiền thanh toán new Update(KcbThanhtoan.Schema) .Set(KcbThanhtoan.Columns.TongTien).EqualTo(TT_BHYT + TT_BN) .Set(KcbThanhtoan.Columns.BnhanChitra).EqualTo(TT_BNCT) .Set(KcbThanhtoan.Columns.BhytChitra).EqualTo(TT_BHYT) .Set(KcbThanhtoan.Columns.PhuThu).EqualTo(TT_PT) .Set(KcbThanhtoan.Columns.TuTuc).EqualTo(TT_TT) .Set(KcbThanhtoan.Columns.MaDoituongKcb).EqualTo(objLuotkham.MaDoituongKcb) .Set(KcbThanhtoan.Columns.IdDoituongKcb).EqualTo(objLuotkham.IdDoituongKcb) .Set(KcbThanhtoan.Columns.PtramBhyt).EqualTo(objLuotkham.PtramBhyt) .Set(KcbThanhtoan.Columns.IdHdonLog).EqualTo(IdHdonLog) .Where(KcbThanhtoan.Columns.IdThanhtoan).IsEqualTo(IdThanhtoan).Execute(); //Update phiếu thu new Update(KcbPhieuthu.Schema) .Set(KcbPhieuthu.Columns.SoTien).EqualTo(TT_BN - TT_Chietkhau_Chitiet) .Set(KcbPhieuthu.Columns.SotienGoc).EqualTo(TT_BN) .Where(KcbPhieuthu.Columns.IdThanhtoan).IsEqualTo(IdThanhtoan).Execute(); } } } //Reset để không bị cộng dồn với các thanh toán cũ TT_BN = 0m; TT_BHYT = 0m; TT_PT = 0m; TT_TT = 0m; TT_BNCT = 0m; TT_Chietkhau_Chitiet = 0m; int reval = -1; foreach (KcbThanhtoanChitiet objChitietThanhtoan in objArrPaymentDetail) { if (!Utility.Byte2Bool(objChitietThanhtoan.TuTuc)) TT_BHYT += objChitietThanhtoan.BhytChitra * objChitietThanhtoan.SoLuong; TT_Chietkhau_Chitiet += Utility.DecimaltoDbnull(objChitietThanhtoan.TienChietkhau, 0); TT_PT += objChitietThanhtoan.PhuThu * objChitietThanhtoan.SoLuong; if (Utility.Byte2Bool(objChitietThanhtoan.TuTuc)) TT_TT += objChitietThanhtoan.BnhanChitra * objChitietThanhtoan.SoLuong; else TT_BNCT += objChitietThanhtoan.BnhanChitra * objChitietThanhtoan.SoLuong; objChitietThanhtoan.IdThanhtoan = Utility.Int32Dbnull(objThanhtoan.IdThanhtoan, -1); objChitietThanhtoan.IsNew = true; objChitietThanhtoan.Save(); reval= UpdatePaymentStatus(objThanhtoan, objChitietThanhtoan); if (reval <= 0) { ErrMsg = string.Format("Dịch vụ {0} đã bị người dùng khác hủy bỏ nên bạn không thể thanh toán. Hãy nhấn nút OK và chọn lại Bệnh nhân để lấy lại các chi phí thanh toán mới nhất", objChitietThanhtoan.TenChitietdichvu); return ActionResult.Cancel; } } TT_BN += TT_PT + TT_BNCT + TT_TT; TongtienBNchitra = TT_BN; objThanhtoan.TongTien = TT_BN + TT_BHYT; #region Hoadondo if (Layhoadondo) { int record = -1; if (IdHdonLog > 0) { record = new Delete().From(HoadonLog.Schema) .Where(HoadonLog.Columns.IdHdonLog) .IsEqualTo(IdHdonLog) .Execute(); if (record <= 0) { Utility.ShowMsg("Có lỗi trong quá trình xóa thông tin serie hóa đơn đã hủy để cấp lại cho lần thanh toán này."); return ActionResult.Error; } } var obj = new HoadonLog(); obj.IdThanhtoan = objThanhtoan.IdThanhtoan; obj.TongTien = objThanhtoan.TongTien - Utility.DecimaltoDbnull(objThanhtoan.TongtienChietkhau, 0); obj.IdBenhnhan = objThanhtoan.IdBenhnhan; obj.MaLuotkham = objThanhtoan.MaLuotkham; obj.MauHoadon = objThanhtoan.MauHoadon; obj.KiHieu = objThanhtoan.KiHieu; obj.IdCapphat = objThanhtoan.IdCapphat.Value; obj.MaQuyen = objThanhtoan.MaQuyen; obj.Serie = objThanhtoan.Serie; obj.MaNhanvien = globalVariables.UserName; obj.MaLydo = "0"; obj.NgayIn = globalVariables.SysDate; obj.TrangThai = 0; obj.IsNew = true; obj.Save(); IdHdonLog = obj.IdHdonLog;//Để update lại vào bảng thanh toán new Update(HoadonCapphat.Schema).Set(HoadonCapphat.Columns.SerieHientai) .EqualTo(objThanhtoan.Serie) .Set(HoadonCapphat.Columns.TrangThai).EqualTo(1) .Where(HoadonCapphat.Columns.IdCapphat).IsEqualTo(obj.IdCapphat) .Execute(); } #endregion KcbPhieuthu objPhieuthu = new KcbPhieuthu(); objPhieuthu.IdBenhnhan = objThanhtoan.IdBenhnhan; objPhieuthu.MaLuotkham = objThanhtoan.MaLuotkham; objPhieuthu.IdThanhtoan = objThanhtoan.IdThanhtoan; objPhieuthu.MaPhieuthu = THU_VIEN_CHUNG.GetMaPhieuThu(globalVariables.SysDate, 0); objPhieuthu.SoluongChungtugoc = 1; objPhieuthu.LoaiPhieuthu = Convert.ToByte(0); objPhieuthu.NgayThuchien = globalVariables.SysDate; objPhieuthu.SoTien = TT_BN - TT_Chietkhau_Chitiet; objPhieuthu.SotienGoc = TT_BN; objPhieuthu.MaLydoChietkhau = objThanhtoan.MaLydoChietkhau; objPhieuthu.TienChietkhauchitiet = TT_Chietkhau_Chitiet; objPhieuthu.TienChietkhau = objThanhtoan.TongtienChietkhau; objPhieuthu.TienChietkhauhoadon = objPhieuthu.TienChietkhau - objPhieuthu.TienChietkhauchitiet; objPhieuthu.NguoiNop = globalVariables.UserName; objPhieuthu.TaikhoanCo = ""; objPhieuthu.TaikhoanNo = ""; objPhieuthu.NoiTru = (byte)objThanhtoan.NoiTru; objPhieuthu.LydoNop = "Thu tiền bệnh nhân"; objPhieuthu.IdKhoaThuchien = globalVariables.idKhoatheoMay; objPhieuthu.IdNhanvien = globalVariables.gv_intIDNhanvien; objPhieuthu.IsNew = true; objPhieuthu.Save(); new Update(KcbThanhtoan.Schema) .Set(KcbThanhtoan.Columns.TongTien).EqualTo(TT_BHYT + TT_BN) .Set(KcbThanhtoan.Columns.BnhanChitra).EqualTo(TT_BNCT) .Set(KcbThanhtoan.Columns.BhytChitra).EqualTo(TT_BHYT) .Set(KcbThanhtoan.Columns.PhuThu).EqualTo(TT_PT) .Set(KcbThanhtoan.Columns.TuTuc).EqualTo(TT_TT) .Set(KcbThanhtoan.Columns.MaDoituongKcb).EqualTo(objLuotkham.MaDoituongKcb) .Set(KcbThanhtoan.Columns.IdDoituongKcb).EqualTo(objLuotkham.IdDoituongKcb) .Set(KcbThanhtoan.Columns.PtramBhyt).EqualTo(objLuotkham.PtramBhyt) .Set(KcbThanhtoan.Columns.IdHdonLog).EqualTo(IdHdonLog) .Where(KcbThanhtoan.Columns.IdThanhtoan).IsEqualTo(objThanhtoan.IdThanhtoan).Execute(); //Tạo bản ghi trong bảng phân bổ tiền theo phương thức thanh toán new Delete().From(KcbThanhtoanPhanbotheoPTTT.Schema) .Where(KcbThanhtoanPhanbotheoPTTT.Columns.IdThanhtoan) .IsEqualTo(objThanhtoan.IdThanhtoan).Execute(); KcbThanhtoanPhanbotheoPTTT objPhanbotienTT = new KcbThanhtoanPhanbotheoPTTT(); objPhanbotienTT.IdThanhtoan = objThanhtoan.IdThanhtoan; objPhanbotienTT.IdBenhnhan = objThanhtoan.IdBenhnhan; objPhanbotienTT.MaLuotkham = objThanhtoan.MaLuotkham; objPhanbotienTT.MaPttt = objThanhtoan.MaPttt; objPhanbotienTT.SoTien = TT_BN - TT_Chietkhau_Chitiet; objPhanbotienTT.NoiTru = objThanhtoan.NoiTru; objPhanbotienTT.TongTien = objPhanbotienTT.SoTien; objPhanbotienTT.NguoiTao = objThanhtoan.NguoiTao; objPhanbotienTT.NgayTao = objThanhtoan.NgayTao; objPhanbotienTT.IsNew = true; objPhanbotienTT.Save(); if (Utility.Byte2Bool(objThanhtoan.NoiTru) && Utility.ByteDbnull(objLuotkham.TrangthaiNoitru, 0) >= 2) new Update(KcbLuotkham.Schema).Set(KcbLuotkham.Columns.TthaiThanhtoannoitru).EqualTo(1) .Where(KcbLuotkham.Columns.IdBenhnhan).IsEqualTo(objLuotkham.IdBenhnhan) .And(KcbLuotkham.Columns.MaLuotkham).IsEqualTo(objLuotkham.MaLuotkham) .Execute(); } scope.Complete(); id_thanhtoan = Utility.Int32Dbnull(objThanhtoan.IdThanhtoan, -1); return ActionResult.Success; } } catch (Exception ex) { log.Error("Loi thuc hien thanh toan:" + ex.ToString()); return ActionResult.Error; } }
public ActionResult UpdateTienphanbotheoPTTT( DataTable dtData,ref string msg) { try { using (var scope = new TransactionScope()) { using (var sh = new SharedDbConnectionScope()) { long id_thanhtoan = Utility.Int64Dbnull(dtData.Select("id_thanhtoan>0")[0][KcbThanhtoan.Columns.IdThanhtoan], 0); decimal tong_tien = Utility.Int64Dbnull(dtData.Select("tong_tien>0")[0]["tong_tien"], 0); if (id_thanhtoan > 0) { KcbThanhtoan objThanhtoan = KcbThanhtoan.FetchByID(id_thanhtoan); new Delete().From(KcbThanhtoanPhanbotheoPTTT.Schema).Where(KcbThanhtoanPhanbotheoPTTT.Columns.IdThanhtoan).IsEqualTo(id_thanhtoan).Execute(); foreach (DataRow dr in dtData.Rows) { if (Utility.DecimaltoDbnull(dr["so_tien"], 0) > 0) { KcbThanhtoanPhanbotheoPTTT _newItem = new KcbThanhtoanPhanbotheoPTTT(); _newItem.IdThanhtoan = id_thanhtoan; _newItem.MaPttt = Utility.sDbnull(dr["ma_pttt"], ""); _newItem.IdBenhnhan = objThanhtoan.IdBenhnhan; _newItem.MaLuotkham = objThanhtoan.MaLuotkham; _newItem.TongTien = tong_tien; _newItem.NoiTru = objThanhtoan.NoiTru; _newItem.SoTien = Utility.DecimaltoDbnull(dr["so_tien"], 0); _newItem.NguoiTao = globalVariables.UserName; _newItem.NgayTao = globalVariables.SysDate; _newItem.IsNew = true; _newItem.Save(); } } } } scope.Complete(); return ActionResult.Success; } } catch (Exception ex) { msg = ex.Message; log.Error("Loi trong qua trinh tra tien lai:{0}", ex.ToString()); return ActionResult.Error; } }
public void Update(long IdThanhtoan,string MaPttt,long IdBenhnhan,string MaLuotkham,byte NoiTru,decimal TongTien,decimal SoTien,string NguoiTao,DateTime NgayTao,string NguoiSua,DateTime? NgaySua) { KcbThanhtoanPhanbotheoPTTT item = new KcbThanhtoanPhanbotheoPTTT(); item.MarkOld(); item.IsLoaded = true; item.IdThanhtoan = IdThanhtoan; item.MaPttt = MaPttt; item.IdBenhnhan = IdBenhnhan; item.MaLuotkham = MaLuotkham; item.NoiTru = NoiTru; item.TongTien = TongTien; item.SoTien = SoTien; item.NguoiTao = NguoiTao; item.NgayTao = NgayTao; item.NguoiSua = NguoiSua; item.NgaySua = NgaySua; item.Save(UserName); }