예제 #1
0
        private TPaymentDetail[] CreatePaymentDetail()
        {
            int idx = 0;
            int i = 0;
            foreach (Janus.Windows.GridEX.GridEXRow gridExRow in grdPaymentDetail.GetDataRows())
            {
                if(gridExRow.RowType==Janus.Windows.GridEX.RowType.Record) idx++;

            }
            var arrPaymentDetail = new TPaymentDetail[idx];
            foreach (Janus.Windows.GridEX.GridEXRow gridExRow in grdPaymentDetail.GetDataRows())
            {
                if (gridExRow.RowType == Janus.Windows.GridEX.RowType.Record)
                {
                    arrPaymentDetail[i]=new TPaymentDetail();
                    arrPaymentDetail[i].ThuTuIn = Utility.Int32Dbnull(gridExRow.Cells["Thu_Tu_In"].Value, 0);
                    arrPaymentDetail[i].PaymentDetailId = Utility.Int64Dbnull(
                        gridExRow.Cells["PaymentDetail_ID"].Value, -1);
                    arrPaymentDetail[i].SurchargePrice = Utility.DecimaltoDbnull(
                       gridExRow.Cells["Surcharge_Price"].Value, -1);
                    i++;
                }

            }
            return arrPaymentDetail;
        }
예제 #2
0
        public static TPaymentDetail[] TinhPhamTramBHYT(TPaymentDetail[] arrPaymentDetail, TPatientExam objPatientExam, decimal v_DiscountRate)
        {
            string IsDungTuyen = "DT";
            LObjectType objectType = LObjectType.FetchByID(objPatientExam.ObjectTypeId);
            if (objectType != null)
            {
                switch (objectType.ObjectTypeCode)
                {
                    case "BHYT":
                        if (Utility.Int32Dbnull(objPatientExam.CorrectLine, "0") == 1) IsDungTuyen = "DT";
                        else
                        {
                            IsDungTuyen = "TT";
                        }
                        break;
                    default:
                        IsDungTuyen = "KHAC";
                        break;
                }

            }
            foreach (TPaymentDetail objPaymentDetail in arrPaymentDetail)
            {
                if (objPaymentDetail.IsPayment == 0)//Có thể tính cho BHYT
                {
                    SqlQuery sqlQuery = new Select().From(LInsDetailDiscountRate.Schema)
                        .Where(LInsDetailDiscountRate.Columns.ServiceDetailId).IsEqualTo(objPaymentDetail.ServiceDetailId)
                        .And(LInsDetailDiscountRate.Columns.PaymentTypeId).IsEqualTo(objPaymentDetail.PaymentTypeId)
                        .And(LInsDetailDiscountRate.Columns.InsType).IsEqualTo(IsDungTuyen)
                        .And(LInsDetailDiscountRate.Columns.ObjectTypeCode).IsEqualTo(objPatientExam.MaDoiTuong);
                    LInsDetailDiscountRate objDetailDiscountRate = sqlQuery.ExecuteSingle<LInsDetailDiscountRate>();
                    if (objDetailDiscountRate != null)
                    {
                        objPaymentDetail.MaDv = Utility.sDbnull(objPatientExam.MaDoiTuong);
                        objPaymentDetail.PTramBh = (int?)objDetailDiscountRate.DiscountRate;
                        objPaymentDetail.DiscountRate = DiscountRate(objDetailDiscountRate.DiscountRate,
                                                      Utility.DecimaltoDbnull(
                                                          objPaymentDetail.OriginPrice, 0));
                        objPaymentDetail.DiscountPrice = DiscountPrice(objDetailDiscountRate.DiscountRate,
                                                                 Utility.DecimaltoDbnull(
                                                                     objPaymentDetail.OriginPrice, 0));
                    }
                    else
                    {
                        objPaymentDetail.MaDv = Utility.sDbnull(objPatientExam.MaDoiTuong);
                        objPaymentDetail.PTramBh = (int?)v_DiscountRate;
                        objPaymentDetail.DiscountRate = DiscountRate(v_DiscountRate,
                                                       Utility.DecimaltoDbnull(
                                                           objPaymentDetail.OriginPrice, 0));
                        objPaymentDetail.DiscountPrice = DiscountPrice(v_DiscountRate,
                                                                 Utility.DecimaltoDbnull(
                                                                     objPaymentDetail.OriginPrice, 0));
                    }

                }
                else
                {
                    objPaymentDetail.MaDv = "DV";
                    objPaymentDetail.DiscountRate = 0;
                    objPaymentDetail.DiscountPrice = objPaymentDetail.OriginPrice;
                }

            }
            return arrPaymentDetail;
        }
예제 #3
0
        public static TPaymentDetail[] TinhPhamTramBHYT(TPaymentDetail[] arrPaymentDetail, decimal v_DiscountRate)
        {
            foreach (TPaymentDetail objPaymentDetail in arrPaymentDetail)
            {
                if (objPaymentDetail.IsPayment == 0)//Không tự túc mới tính
                {
                    objPaymentDetail.PTramBh = (int?)v_DiscountRate;
                    objPaymentDetail.DiscountRate = DiscountRate(v_DiscountRate, Utility.DecimaltoDbnull(objPaymentDetail.OriginPrice, 0));
                    objPaymentDetail.DiscountPrice = DiscountPrice(v_DiscountRate, Utility.DecimaltoDbnull(objPaymentDetail.OriginPrice, 0));
                }
                else//Tự túc
                {
                    objPaymentDetail.MaDv = "DV";
                    objPaymentDetail.DiscountRate = 0;//BHYT chi trả 0 do tự túc
                    objPaymentDetail.DiscountPrice = objPaymentDetail.OriginPrice;
                }

            }
            return arrPaymentDetail;
        }
예제 #4
0
        public ActionResult ThanhToanKeDonThuocTaiQuay(TPayment objPayment, TPatientExam objPatientExam, TPaymentDetail[] objArrPaymentDetail)
        {
            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_TotalOrginPrice = 0;
            ///tổng tiền đã thanh toán
            decimal v_TotalPaymentDetail = 0;
            try
            {
                using (var scope = new TransactionScope())
                {
                    using (var dbscope = new SharedDbConnectionScope())
                    {
                        ///lấy tổng số Payment của mang truyền vào của pay ment hiện tại
                        //v_TotalOrginPrice = SumOfPaymentDetail_NGOAITRU(objArrPaymentDetail);

                        TPaymentCollection paymentCollection =
                            new TPaymentController().FetchByQuery(
                                TPayment.CreateQuery().AddWhere(TPayment.Columns.PatientCode, Comparison.Equals,
                                                                objPatientExam.PatientCode).AND(
                                                                    TPayment.Columns.PatientId, Comparison.Equals,
                                                                    objPatientExam.PatientId).AND(
                                                                        TPayment.Columns.Status, Comparison.Equals, 0).
                                    AND(TPayment.Columns.KieuThanhToan, Comparison.Equals, 0).AND(
                                        TPayment.Columns.Status, Comparison.Equals, 0));

                        foreach (TPayment Payment in paymentCollection)
                        {
                            TPaymentDetailCollection paymentDetailCollection = new Select().From(TPaymentDetail.Schema)
                                .Where(TPaymentDetail.Columns.IdThanhtoan).IsEqualTo(Payment.IdThanhtoan)
                                .And(TPaymentDetail.Columns.IsCancel).IsEqualTo(0).ExecuteAsCollection
                                <TPaymentDetailCollection>();

                            foreach (TPaymentDetail paymentDetail in paymentDetailCollection)
                            {
                                if (paymentDetail.IsPayment == 0)
                                    v_TotalPaymentDetail += Utility.Int32Dbnull(paymentDetail.Quantity) *
                                                            Utility.DecimaltoDbnull(paymentDetail.OriginPrice);

                            }

                        }
                        ///lấy thông tin chiết khấu xem đã thực hiện chưa
                        LayThongPtramBHYT(v_TotalOrginPrice + v_TotalPaymentDetail, objPatientExam, ref PtramBHYT);
                        log.Info(string.Format("Thong tin chi khau {0}, voi ma Patient_Code{1}",
                                               PtramBHYT, objPatientExam.PatientCode));

                        ///hàm thực hiện việc xử lý lại thông tin
                       // XuLyChiKhauDacBietBHYT(objPatientExam, PtramBHYT);
                        objPayment.DaIn = 0;
                        objPayment.KieuThanhToan = 0;
                        objPayment.NguoiIn = string.Empty;
                        objPayment.TrongGoi = 0;
                        objPayment.IpMacTao = BusinessHelper.GetMACAddress();
                        objPayment.IpMayTao = BusinessHelper.GetIP4Address();
                        objPayment.PaymentCode = BusinessHelper.GeneratePaymentCode(Convert.ToDateTime(objPayment.NgayThanhtoan), 0);
                        objPayment.IsNew = true;
                        objPayment.Save();
                        //StoredProcedure sp = SPs.KcbThanhtoanThemmoi(objPayment.IdThanhtoan, objPayment.PatientCode, objPayment.PatientId,
                        //                  objPayment.NgayThanhtoan, objPayment.StaffId, objPayment.Status,
                        //                  objPayment.CreatedBy, objPayment.CreatedDate, objPayment.ModifyDate,
                        //                  objPayment.ModifyBy, objPayment.PaymentCode, objPayment.KieuThanhToan,
                        //                  objPayment.DaIn, objPayment.NgayIn, objPayment.NgayTHop, objPayment.NguoiIn,
                        //                  objPayment.NguoiTHop, Utility.Int32Dbnull(objPayment.TrongGoi), objPayment.IpMayTao, objPayment.IpMacTao, globalVariables.MA_KHOA_THIEN);
                        //sp.Execute();
                        //objPayment.IdThanhtoan = Utility.Int32Dbnull(sp.OutputValues[0], -1);
                        //objPayment.IdThanhtoan = Utility.Int32Dbnull(_QueryPayment.GetMax(TPayment.Columns.IdThanhtoan), -1);
                        log.Info("Lay ma thanh toan cua phan thanh toan Payment_ID={0}", objPayment.IdThanhtoan);
                        ///hàm thực hiện việc mảng thao tác mảng của chi tiết thanh toán

                        foreach (TPaymentDetail objPaymentDetail in objArrPaymentDetail)
                        {

                            log.Info("Thuc hien thanh cong cap nhap dich vu can lam sang ");
                            ///thanh toán phần thuốc);
                            if (THU_VIEN_CHUNG.LayMaDviLamViec() == "DETMAY")
                            {
                                if (objPaymentDetail.IdLoaithanhtoan == 3)
                                {
                                    new Update(TPrescription.Schema)
                                        .Set(TPrescription.Columns.TrangthaiThanhtoan).EqualTo(1)
                                        .Set(TPrescription.Columns.Status).EqualTo(2)///nếu =2 đối với đơn thuốc ngoại trú
                                        .Where(TPrescription.Columns.PresId).IsEqualTo(objPaymentDetail.Id).Execute();

                                }
                            }

                            log.Info("Thuc hien thanh cong cap nhap thuoc");
                            ///quần áo cho thuê);

                            log.Info("Cap nhap thong tin thanh cong cho phan giuong benh");
                            switch (BusinessHelper.GetThanhToan_TraiTuyen())
                            {
                                case "PHUTHU":
                                    if (objPaymentDetail.IdLoaithanhtoan == 1)
                                    {
                                        objPaymentDetail.SurchargePrice = 0;
                                    }
                                    break;

                            }
                            objPaymentDetail.NguoiTao = globalVariables.UserName;
                            objPaymentDetail.NoiTru = 0;
                            objPaymentDetail.TrongGoi = 0;
                            objPaymentDetail.IpMacTao = BusinessHelper.GetMACAddress();
                            objPaymentDetail.IpMayTao = BusinessHelper.GetIP4Address();
                            objPaymentDetail.IdThanhtoan = Utility.Int32Dbnull(objPayment.IdThanhtoan, -1);
                            objPaymentDetail.MaKieuTtoan = BusinessHelper.MaKieuThanhToan(Utility.Int32Dbnull(objPaymentDetail.IdLoaithanhtoan, -1));
                            objPaymentDetail.TienBnTra = Utility.DecimaltoDbnull(objPaymentDetail.DiscountPrice);
                            StoredProcedure spPaymentDetail = SPs.KcbThanhtoanThemchitiet(
                                objPaymentDetail.PaymentDetailId, objPaymentDetail.IdThanhtoan,
                                objPaymentDetail.Quantity, objPaymentDetail.OriginPrice,
                                objPaymentDetail.DiscountRate, Utility.DecimaltoDbnull(objPaymentDetail.DiscountPrice),
                                Utility.DecimaltoDbnull(objPaymentDetail.TienBnTra),
                                objPaymentDetail.SurchargePrice, objPaymentDetail.Id,
                                objPaymentDetail.IdDetail, objPaymentDetail.ServiceId,
                                objPaymentDetail.ServiceDetailId, objPaymentDetail.IdLoaithanhtoan,
                                objPaymentDetail.IsCancel, objPaymentDetail.IsPayment,
                                objPaymentDetail.CancelBy, objPaymentDetail.CancelDate,
                                objPaymentDetail.DepartmentId, objPaymentDetail.DoctorAssignId,
                                objPaymentDetail.ThuTuIn, objPaymentDetail.DonViTinh,
                                objPaymentDetail.MaDv, objPaymentDetail.PTramBh,
                                objPaymentDetail.ServiceDetailName, Utility.sDbnull(objPaymentDetail.ServiceDetailName),
                                objPaymentDetail.MaKieuTtoan, 0, objPaymentDetail.TrongGoi, objPaymentDetail.IdGoiDvu,
                                objPaymentDetail.NoiTru, objPaymentDetail.NguoiTao, objPaymentDetail.IpMacTao, objPaymentDetail.IpMayTao);

                            spPaymentDetail.Execute();
                            objPaymentDetail.PaymentDetailId = Utility.Int32Dbnull(spPaymentDetail.OutputValues[0], -1);
                            UpdateTrangThaiBangChucNang(objPayment, objPaymentDetail);

                            log.Info("Thuc hien dua vao chen bang ghi cua phan ky dong");
                        }

                        if (objPatientExam.MaDoiTuong == "BHYT")
                        {
                            if (globalVariables.gv_BenhVienTuyen == "TW")
                            {
                                SqlQuery sqlQuery = new Select().From(TPaymentDetail.Schema)
                                    .Where(TPaymentDetail.Columns.IdThanhtoan).In(
                                        new Select(TPayment.Columns.IdThanhtoan).From(TPayment.Schema).Where(
                                            TPayment.Columns.PatientCode).IsEqualTo(
                                                objPatientExam.PatientCode).And(TPayment.Columns.PatientId).IsEqualTo(
                                                    objPatientExam.PatientId).And(TPayment.Columns.KieuThanhToan).
                                            IsEqualTo(0).
                                            And(TPayment.Columns.Status).IsEqualTo(0))
                                    .And(TPaymentDetail.Columns.IsCancel).IsEqualTo(0)
                                    .And(TPaymentDetail.Columns.IsPayment).IsEqualTo(0);

                                TPaymentDetailCollection objPaymentDetailCollection =
                                    sqlQuery.ExecuteAsCollection<TPaymentDetailCollection>();
                                decimal TongTien =
                                    Utility.DecimaltoDbnull(objPaymentDetailCollection.Sum(c => c.Quantity * c.OriginPrice));
                                LayThongPtramBHYT(TongTien, objPatientExam, ref PtramBHYT);
                                foreach (TPaymentDetail objPaymentDetail in objPaymentDetailCollection)
                                {
                                    decimal BHCT = Utility.DecimaltoDbnull(objPaymentDetail.OriginPrice * PtramBHYT / 100);
                                    decimal BNCT = Utility.DecimaltoDbnull(objPaymentDetail.OriginPrice - BHCT);
                                    new Update(TPaymentDetail.Schema)
                                        .Set(TPaymentDetail.Columns.PTramBh).EqualTo(PtramBHYT)
                                        .Set(TPaymentDetail.Columns.DiscountRate).EqualTo(BHCT)
                                        .Set(TPaymentDetail.Columns.DiscountPrice).EqualTo(BNCT)
                                        .Where(TPaymentDetail.Columns.PaymentDetailId).IsEqualTo(objPaymentDetail.PaymentDetailId).Execute();

                                }
                            }

                        }
                        SPs.KydongThemthongtinThanhtoanThem(objPatientExam.PatientCode, Utility.Int32Dbnull(objPatientExam.PatientId, -1)).
                           Execute();

                    }
                    scope.Complete();
                   // Payment_Id = Utility.Int32Dbnull(objPayment.IdThanhtoan, -1);
                    log.Info("Thuc hien thanh cong viec thanh toan");
                    return ActionResult.Success;
                }
            }
            catch (Exception ex)
            {
                log.Error("Loi thuc hien thanh toan:" + ex.ToString());
                return ActionResult.Error;
            }
        }