Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 110 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
110
Dung lượng
4,28 MB
Nội dung
` TỐNG HUY TOÀN BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Tống Huy Toàn CHUYÊN NGÀNH KỸ THUẬT Y SINH HỆ THỐNG Y BẠ ĐIỆN TỬ SỬ DỤNG CÔNG NGHỆ RFID LUẬN VĂN THẠC SĨ KỸ THUẬT KỸ THUẬT Y SINH KHÓA 2015B Hà Nội – Năm 2018 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI Tống Huy Tồn HỆ THỐNG Y BẠ ĐIỆN TỬ SỬ DỤNG CƠNG NGHỆ RFID Chuyên ngành : Kỹ thuật y sinh LUẬN VĂN THẠC SĨ KỸ THUẬT KỸ THUẬT Y SINH NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS VŨ DUY HẢI Hà Nội – Năm 2018 i LỜI CAM ĐOAN Tôi xin cam đoan số liệu kết nghiên cứu luận văn trung thực chưa sử dụng để bảo vệ học vị Mọi giúp đỡ cho việc thực luận văn cảm ơn thơng tin trích dẫn luận văn rõ nguồn gốc rõ ràng phép công bố Hà nội, ngày tháng năm 2018 Học viên thực Tống Huy Toàn ii MỤC LỤC LỜI CAM ĐOAN ii MỤC LỤC a DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT c DANH MỤC CÁC BẢNG d DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ e TỔNG QUAN 1.1 Đặt vấn đề 1.2 Công nghệ RFID 1.2.1 Giới thiệu công nghệ RFID 1.2.2 Phân loại RFID 1.2.3 Cấu trúc hệ thống RFID 1.2.3.1 Thẻ RFID 1.2.3.2 Đầu đọc RFID 13 1.2.3.3 Truyền thông thẻ đầu đọc 14 1.2.3.4 Máy chủ hệ thống phần mềm trung gian 14 1.2.4 1.2.4.1 Ưu điểm hệ thống RFID 16 1.2.4.2 Nhược điểm hệ thống RFID 19 1.2.5 1.3 Ưu nhược điểm hệ thống RFID so với hệ thống khác 16 Ứng dụng chung công nghệ RFID 20 Ứng dụng công nghệ RFID hệ thống y tế giới hạn đề tài .22 1.3.1 Ứng dụng công nghệ RFID hệ thống y tế 22 1.3.2 Giới hạn đề tài 27 THIẾT KẾ HỆ THỐNG 28 2.1 Tổng quan hệ thống .28 2.2 Chỉ tiêu kĩ thuật 29 2.3 Các khối chức đầu đọc RFID .30 2.4 Các chức phần mềm quản lý bệnh án điện tử 33 2.4.1 Kết nối đến sở liệu thông qua RFID 33 a 2.4.2 Quản lý nhân viên 33 2.4.3 Quản lý bệnh nhân 34 2.4.4 Quản lý hóa đơn tốn viện phí 34 TRIỂN KHAI VÀ THỰC THI THIẾT KẾ 35 3.1 Môi trường hoạt động 35 3.1.1 3.1.1.1 Đầu đọc RFID 35 3.1.1.2 Thẻ RFID 35 3.1.2 3.2 Phần cứng 35 Phần mềm 37 3.1.2.1 Mơi trường lập trình Microsoft Visual Studio 37 3.1.2.2 Hệ quản trị sở liệu Microsoft SQL Server 38 Triển khai thiết kế 40 3.2.1 Nghiên cứu phần cứng cho hệ thống 40 3.2.2 Hoàn thiện phần mềm, kết nối đến hệ thống phần cứng 42 3.2.2.1 Kết nối đến sở liệu thông qua RFID 43 3.2.2.2 Quản lý nhân viên 44 3.2.2.3 Quản lý thông tin bệnh nhân 46 3.2.2.4 Quản lý hóa đơn tốn viện phí 47 KẾT QUẢ VÀ BÀN LUẬN 49 4.1 Kết 49 4.2 Đánh giá kết 69 4.2.1 Các vấn đề làm 69 4.2.2 Hướng phát triển đề tài 70 TÀI LIỆU THAM KHẢO 72 PHỤ LỤC 73 b DANH MỤC CÁC KÝ HIỆU, CÁC CHỮ VIẾT TẮT STT Thuật ngữ viết tắt Thuật ngữ tiếng anh Thuật ngữ tiếng việt RFID Radio Frequency Identification Công nghệ xác nhận đối tượng sóng vơ tuyến LF Low Frequency Tần số thấp HF High Frequency Tần số cao UHF Ultra High Frequency Siêu cao tần ITS Intelligent Transportation Systems Giao thông thông minh OBU On Board Unit Mạch truyền nhận liệu MCU Micro Controller Unit Vi điều khiển ICU Intensive Care Unit Khu chăm sóc đặc biệt DHS Department of Homeland Security Cục an ninh quốc gia Mỹ Bảng 1: Danh mục ký hiệu, chữ viết tắt c DANH MỤC CÁC BẢNG Bảng 1: Danh mục ký hiệu, chữ viết tắt c d DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ Hình 1-1:Ứng dụng cơng nghệ RFID sống đại Hình 1-2: Mơ hình hệ thống RFID trang bị cho bệnh viện Hình 1-3: Triển khai bán hàng RFID siêu thị Hình 1-4: Cấu trúc hệ thống RFID Hình 1-5: Thẻ RFID tích cực gắn túi máu 10 Hình 1-6: Các khối bên thẻ RFID tích cực 10 Hình 1-7: Thẻ RFID thụ động 11 Hình 1-8 : Các thẻ RFID bán tích cực 12 Hình 1-9: Các thành phần RFID reader 13 Hình 1-10: Sóng điện từ truyển từ anten lưỡng cực 14 Hình 1-11: Sóng điện từ truyển từ anten phân cực cầu 14 Hình 1-12: Mơ hình cấu trúc phần mềm trung gian 16 Hình 1-13: Sử dụng RFID theo dõi, kiểm sốt hàng hóa kho 18 Hình 1-14: Sử dụng RFID chuỗi cung ứng 21 Hình 1-15: Túi máu với thẻ RFID- An tồn từ tĩnh mạch đến tĩnh mạch 23 Hình 1-16: Túi máu với thẻ RFID- Thiết kế chịu áp lực máy li tâm 24 Hình 1-17: Sử dụng RFID để quản lý trang bị vật tư y tế 25 Hình 1-18: Sử dụng RFID quản lý thơng tin thuốc 26 Hình 2-1: Sơ đồ tổng quan hệ thống y bạ điện tử sử dụng RFID 28 Hình 2-2: Sơ đồ khối đầu đọc RFID LF 30 Hình 2-3 : Khối EM4095 thẻ 33 Hình 3-1: Kiến trúc lớp thẻ RFID 35 Hình 3-2: Dạng tín hiệu liệu xuất từ thẻ 36 Hình 3-3: Tổ chức nhớ bên thẻ RFID 36 Hình 3-4: Sơ đồ khối chức chip thẻ RFID 37 Hình 3-5: Tồn cảnh Microsoft SQL server 39 e Hình 3-6: Dạng tín hiệu Ơ xi lơ cực anten thứ 40 Hình 3-7: Dạng tín hiệu Ơ xi lơ cực anten thứ hai 40 Hình 3-8: Đầu đọc hoạt động quét thẻ 41 Hình 3-9: Sơ đồ chức phần mềm 42 Hình 3-10: Thiết kế sở liệu thẻ RFID kết nối thông qua ID nhân viên 43 Hình 3-11: Giao diện đăng nhập vào hệ thống kết nối qua thẻ RFID 43 Hình 3-12: Thiết kế CSDL quản lý nhân viên 44 Hình 3-13: Giao diện quản lý nhân viên 44 Hình 3-14: Giao diện thêm nhân viên 45 Hình 3-15: Thiết kế CSDL quản lý bệnh nhân 46 Hình 3-16: Giao diện thêm bệnh nhân 46 Hình 3-17: Thiết kế CSDL Quản lý hóa đơn tốn viện phí 47 Hình 3-18: Hóa đơn tốn viện phí mẫu hóa đơn kèm 48 Hình 4-1: Nhân viên y tế đăng nhập vào phần mềm hệ thống qua thẻ cá nhân 50 Hình 4-2: Giao diện sau đăng nhập thành công vào hệ thống 51 Hình 4-3: Giao diện chức phân quyền phần mềm 52 Hình 4-4: Giao diện phân quyền quản trị hệ thống 53 Hình 4-5: Giao diện phân quyền quản lý khác 54 Hình 4-6: Giao diện chức phân quyền quản lý bác sỹ 55 Hình 4-7: Giao diện định dịch vụ cận lâm sàng cho bệnh nhân 55 Hình 4-8: Giao diện dịch vụ kỹ thuật cận lâm sàng 55 Hình 4-9: Giao diện định dịch vụ cận lâm sàng khác cho bệnh nhân 56 Hình 4-10: Giao diện xuất phiếu thu 56 Hình 4-11: Giao diện xuất phiếu khám bệnh cho bệnh nhân 57 Hình 4-12: Phiếu khám bệnh để kết luận hướng điều trị cho bệnh nhân 57 Hình 4-13: Giao diện lý nhập viện cho bệnh nhân 58 Hình 4-14: Giao diện xác nhận nhập viện cho bệnh nhân 59 f Hình 4-15: Giao diện lập bệnh án cho bệnh nhân 59 Hình 4-16: Giao diện quản lý giường bệnh khoa 60 Hình 4-17: Giao diện quản lý thuê đồ dùng 61 Hình 4-18: Giao diện bác sỹ lập thông tin ca mổ cho bệnh nhân 62 Hình 4-19: Giao diện hiển thị chi tiết ca mổ thực 62 Hình 4-20: Giao diện quản lý hóa đơn 63 Hình 4-21: Giao diện Hóa đơn dịch vụ kỹ thuật 64 Hình 4-22: Giao diện Hóa đơn dịch vụ mượn đồ 64 Hình 4-23: Giao diện quản lý Dược 65 Hình 4-24: Giao diện quản lý thuốc 65 Hình 4-25: Giao diện quản lý kê đơn thuốc cho bệnh nhân 66 Hình 4-26: Giao diện quản lý hóa đơn tốn thuốc 67 g FORM HÓA ĐƠN XUẤT VIỆN using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.SqlClient; using Hospital.Model; using System.Globalization; namespace Hospital.View { public partial class FormBillDetail : Form { public Bill BillDetail { get; set; } public Staff StaffDetail { get; set; } public Patient PatientDetail { get; set; } public string UserAction { get; set; } public int PrescriptionID { get; set; } public int HICID { get; set; } private DataTable BillMedicineTable { get; set; } private DataTable BillServiceTable { get; set; } private DataTable BillMaterialTable { get; set; } private FormBillDetail() { InitializeComponent(); } public FormBillDetail(string userAction, Bill bill) { InitializeComponent(); // Set useraction and bill this.BillDetail = bill; this.UserAction = userAction; this.StaffDetail = Staff.GetStaff(BillDetail.StaffID); this.PatientDetail = Patient.GetPatient(BillDetail.PatientID); reFreshForm(); } public FormBillDetail(string userAction, Bill bill, int prescriptionID) { InitializeComponent(); 86 // Set useraction and bill this.BillDetail = bill; this.UserAction = userAction; this.StaffDetail = Staff.GetStaff(BillDetail.StaffID); this.PatientDetail = Patient.GetPatient(BillDetail.PatientID); this.PrescriptionID = prescriptionID; reFreshForm(); } //public FormBillDetail(string userAction, Bill bill, Staff staff, Patient patient) //{ // InitializeComponent(); // // // // // // Set useraction and bill this.BillDetail = bill; this.UserAction = userAction; this.StaffDetail = staff; this.PatientDetail = patient; // reFreshForm(); //} // Set information to form private void reFreshForm() { try { // Set bill information textBoxPatientID.Text = PatientDetail.PatientID.ToString(); textBoxPatientName.Text = PatientDetail.LastName + ' ' + PatientDetail.FirstName; textBoxStaffID.Text = StaffDetail.StaffID.ToString(); textBoxStaffName.Text = StaffDetail.LastName + ' ' + StaffDetail.FirstName; if (PatientDetail.State == 0) { buttonSave.Enabled = false; } //Check HIC if (HIC.CheckHIC(BillDetail.PatientID)) { HIC newHIC = HIC.GetPatientHIC(BillDetail.PatientID); if (HIC.CheckHICExpiration(newHIC.HICID)) { labelHICID.Text = "Đã hết hạn"; this.HICID = 0; } else { 87 labelHICID.Text = "Còn hạn sử dụng"; this.HICID = newHIC.HICID; } } else { labelHICID.Text = "Khơng có"; this.HICID = 0; } // Set comboBoxDetail corresponding to bill's type switch (BillDetail.BillTypeID) { case Bill.MEDICINEBILL: labelDetail.Text = "Tên thuốc:"; // Get Medicine list and set it to comboBox comboBoxDetail.DataSource = Medicine.GetListMedicine(); comboBoxDetail.ValueMember = "PRICE"; comboBoxDetail.DisplayMember = "MEDICINENAME"; break; case Bill.SERVICEBILL: labelDetail.Text = "Dịch vụ:"; // Get Service list and set it to comboBox comboBoxDetail.DataSource = Service.GetListService(); comboBoxDetail.ValueMember = "PRICE"; comboBoxDetail.DisplayMember = "SERVICENAME"; break; case Bill.MATERIALBILL: labelDetail.Text = "Đồ dùng:"; // Get Material list and set it to comboBox comboBoxDetail.DataSource = Material.GetListMaterial(); comboBoxDetail.ValueMember = "PRICE"; comboBoxDetail.DisplayMember = "MATERIALNAME"; labelHIC.Visible = false; labelHICID.Visible = false; break; } // If bill was pay then nothing if (BillDetail.State == Bill.PAY) { buttonAdd.Enabled = false; buttonDelete.Enabled = false; buttonPay.Enabled = false; buttonSave.Enabled = false; dateTimeInputBill.Enabled = false; labelTotalBillPrice.ForeColor = Color.Green; 88 labelBillState.ForeColor = Color.Green; labelBillState.Text = "Đã toán"; } // Set information when user edit bill's detail if ("edit".Equals(UserAction)) { decimal totalPrice = BillDetail.TotalPrice; // Set billID textBoxBillID.Text = BillDetail.BillID.ToString(); dateTimeInputBill.Value = BillDetail.Date; // When update bill, user can only update bill's state buttonAdd.Enabled = false; buttonDelete.Enabled = false; buttonSave.Enabled = false; dateTimeInputBill.Enabled = false; //BillDetail = Bill.GetBill(BillDetail.BillID); if (HICID != 0) { totalPrice = totalPrice / 4; } labelTotalBillPrice.Text = CultureInfo.CreateSpecificCulture("vi")); totalPrice.ToString("C", // Set dataViewBillDetail corresponding bill's type switch (BillDetail.BillTypeID) { case Bill.MEDICINEBILL: BillMedicineTable MedicineBillDetail.GetListMedicineBillDetail(BillDetail.BillID); = BillMedicineTable.Columns.Add("Thuốc", typeof(string), "[MEDICINENAME]"); BillMedicineTable.Columns.Add("Số lượng", typeof(int), "[QUANTITY]"); BillMedicineTable.Columns.Add("Giá", typeof(decimal), "[PRICE]"); dataViewBillDetail.DataSource = BillMedicineTable; for (int i = 0; i < 3; i++) { dataViewBillDetail.Columns[i].Visible = false; } break; case Bill.SERVICEBILL: BillServiceTable ServiceBillDetail.GetListServiceBillDetail(BillDetail.BillID); 89 = BillServiceTable.Columns.Add("Dịch vụ", typeof(string), "[SERVICENAME]"); BillServiceTable.Columns.Add("Số lượng", typeof(int), "[QUANTITY]"); BillServiceTable.Columns.Add("Giá", typeof(decimal), "[PRICE]"); dataViewBillDetail.DataSource = BillServiceTable; for (int i = 0; i < 3; i++) { dataViewBillDetail.Columns[i].Visible = false; } break; case Bill.MATERIALBILL: BillMaterialTable RentMaterialBillDetail.GetListRentMaterialBillDetail(BillDetail.BillID); = BillMaterialTable.Columns.Add("Đồ dùng", typeof(string), "[MATERIALNAME]"); BillMaterialTable.Columns.Add("Số lượng", typeof(int), "[QUANTITY]"); BillMaterialTable.Columns.Add("Giá", typeof(decimal), "[PRICE]"); dataViewBillDetail.DataSource = BillMaterialTable; for (int i = 0; i < 3; i++) { dataViewBillDetail.Columns[i].Visible = false; } break; } } else if ("insert".Equals(UserAction)) /// Set information when user insert bill's detail { // Generate next billID textBoxBillID.Text = Bill.GetNextBillID().ToString(); dateTimeInputBill.Value = DateTime.Today; labelTotalBillPrice.Text = 0.ToString("C", CultureInfo.CreateSpecificCulture("vi")); BillDetail.BillID = Bill.GetNextBillID(); BillDetail.Date = dateTimeInputBill.Value; BillDetail.TotalPrice = 0; BillDetail.State = 0; switch (BillDetail.BillTypeID) 90 { case Bill.MEDICINEBILL: buttonAdd.Enabled = false; buttonDelete.Enabled = false; decimal totalPrice = new Decimal(); BillMedicineTable PrescriptionDetail.GetListPrescriptionDetailWithMedicine(PrescriptionID); = BillMedicineTable.Columns.Add("Thuốc", typeof(string), "[MEDICINENAME]"); BillMedicineTable.Columns.Add("Số lượng", typeof(int), "[QUANTITY]"); BillMedicineTable.Columns.Add("Giá", typeof(decimal), "[PRICE]"); dataViewBillDetail.DataSource = BillMedicineTable; for (int i = 0; i < 4; i++) { dataViewBillDetail.Columns[i].Visible = false; } foreach (DataRow row in BillMedicineTable.Rows) { totalPrice += (decimal)row["Giá"]; } BillDetail.TotalPrice = totalPrice; if (HICID != 0) { totalPrice = totalPrice/4; } labelTotalBillPrice.Text CultureInfo.CreateSpecificCulture("vi")); = totalPrice.ToString("C", break; case Bill.SERVICEBILL: BillServiceTable = new DataTable(); BillServiceTable.Columns.Add("SERVICEID", typeof(int)); BillServiceTable.Columns.Add("Dịch vụ", typeof(string)); BillServiceTable.Columns.Add("Số lượng", typeof(int)); BillServiceTable.Columns.Add("Giá", typeof(decimal)); dataViewBillDetail.DataSource = BillServiceTable; dataViewBillDetail.Columns["SERVICEID"].Visible = false; break; 91 case Bill.MATERIALBILL: BillMaterialTable = new DataTable(); BillMaterialTable.Columns.Add("MATERIALID", typeof(int)); BillMaterialTable.Columns.Add("Đồ dùng", typeof(string)); BillMaterialTable.Columns.Add("Số lượng", typeof(int)); BillMaterialTable.Columns.Add("Giá", typeof(decimal)); dataViewBillDetail.DataSource = BillMaterialTable; dataViewBillDetail.Columns["MATERIALID"].Visible = false; break; } } else { switch (UserAction) { case "insertExamination": decimal totalPrice = Service.GetServiceExamination().Price; // Only save and pay when create examination buttonAdd.Enabled = false; buttonDelete.Enabled = false; // Set new bill detail for examination BillDetail.BillID = Bill.GetNextBillID(); BillDetail.Date = DateTime.Now; BillDetail.TotalPrice = totalPrice; BillDetail.State = 0; // Create table for datagridview BillServiceTable = new DataTable(); BillServiceTable.Columns.Add("SERVICEID", typeof(int)); BillServiceTable.Columns.Add("Dịch vụ", typeof(string)); BillServiceTable.Columns.Add("Số lượng", typeof(int)); BillServiceTable.Columns.Add("Giá", typeof(decimal)); dataViewBillDetail.DataSource = BillServiceTable; dataViewBillDetail.Columns["SERVICEID"].Visible = false; BillServiceTable.Rows.Add(new object[] { 100, "Khám bệnh", 1, totalPrice }); if (HICID != 0) { totalPrice = totalPrice / 4; //BillDetail.TotalPrice = totalPrice; } // Set form information 92 textBoxBillID.Text = Bill.GetNextBillID().ToString(); dateTimeInputBill.Value = BillDetail.Date; labelTotalBillPrice.Text = totalPrice.ToString("C", CultureInfo.CreateSpecificCulture("vi")); break; case "insertTest": break; case "insertSurgery": break; } UserAction = "insert"; } } catch (SqlException exception) { MessageBox.Show(exception.Message, "Lỗi liệu", MessageBoxButtons.OK, MessageBoxIcon.Error); } } private void comboBoxDetail_SelectedIndexChanged(object sender, EventArgs e) { switch (BillDetail.BillTypeID) { case Bill.MEDICINEBILL: decimal medicinePrice = Convert.ToDecimal(((DataRowView)comboBoxDetail.SelectedItem).Row["PRICE"]); labelPriceDetail.Text = medicinePrice.ToString("C", CultureInfo.CreateSpecificCulture("vi")); break; case Bill.SERVICEBILL: decimal servicePrice = Convert.ToDecimal(((DataRowView)comboBoxDetail.SelectedItem).Row["PRICE"]); labelPriceDetail.Text = servicePrice.ToString("C", CultureInfo.CreateSpecificCulture("vi")); break; case Bill.MATERIALBILL: decimal materialPrice = Convert.ToDecimal(((DataRowView)comboBoxDetail.SelectedItem).Row["PRICE"]); labelPriceDetail.Text = materialPrice.ToString("C", CultureInfo.CreateSpecificCulture("vi")); break; } } private void buttonAdd_Click(object sender, EventArgs e) { 93 decimal totalPrice = new Decimal(); bool isDulicate = false; // Check validate if (!superValidator1.Validate()) { return; } // Add bill detail corresponding to bill's type switch (BillDetail.BillTypeID) { // Add medicine detail case Bill.MEDICINEBILL: //int medicineID = Convert.ToInt32(((DataRowView)comboBoxDetail.SelectedItem).Row["MEDICINEID"]) ; //string medicineName = ((DataRowView)comboBoxDetail.SelectedItem).Row["MEDICINENAME"].ToString(); //int quantityMedicine = Convert.ToInt32(textBoxQuantity.Text); //decimal priceMedicine = Convert.ToDecimal(((DataRowView)comboBoxDetail.SelectedItem).Row["PRICE"]) * quantityMedicine; //BillMedicineTable.Rows.Add(new object[] { medicineID, medicineName, quantityMedicine, priceMedicine }); break; // Add service detail case Bill.SERVICEBILL: int serviceID = Convert.ToInt32(((DataRowView)comboBoxDetail.SelectedItem).Row["SERVICEID"]); string serviceName = ((DataRowView)comboBoxDetail.SelectedItem).Row["SERVICENAME"].ToString(); int quantityService = Convert.ToInt32(textBoxQuantity.Text); decimal priceService = Convert.ToDecimal(((DataRowView)comboBoxDetail.SelectedItem).Row["PRICE"]) * quantityService; foreach (DataRow row in BillServiceTable.Rows) { if (row["SERVICEID"].ToString().Trim().Equals( ((DataRowView)comboBoxDetail.SelectedItem).Row["SERVICEID"].ToString().Trim())) { isDulicate = true; row["Số lượng"] = quantityService + (int)row["Số lượng"]; row["Giá"] = priceService + (decimal)row["Giá"]; } 94 } if (!isDulicate) { BillServiceTable.Rows.Add(new quantityService, priceService }); isDulicate = false; } object[] { serviceID, serviceName, break; case Bill.MATERIALBILL: int materialID = Convert.ToInt32(((DataRowView)comboBoxDetail.SelectedItem).Row["MATERIALID"] ); string materialName = ((DataRowView)comboBoxDetail.SelectedItem).Row["MATERIALNAME"].ToString(); int quantityMaterial = Convert.ToInt32(textBoxQuantity.Text); decimal priceMaterial = Convert.ToDecimal(((DataRowView)comboBoxDetail.SelectedItem).Row["PRICE"]) * quantityMaterial; foreach (DataRow row in BillMaterialTable.Rows) { if (row["MATERIALID"].ToString().Trim().Equals( ((DataRowView)comboBoxDetail.SelectedItem).Row["MATERIALID"].ToString().Trim( ))) { isDulicate = true; row["Số lượng"] = quantityMaterial + (int)row["Số lượng"]; row["Giá"] = priceMaterial + (decimal)row["Giá"]; } } if (!isDulicate) { BillMaterialTable.Rows.Add(new object[] { materialID, materialName, quantityMaterial, priceMaterial }); isDulicate = false; } break; } foreach (DataRow record in ((DataTable)dataViewBillDetail.DataSource).Rows) { totalPrice += Convert.ToDecimal(record["Giá"]); } BillDetail.TotalPrice = totalPrice; 95 if (HICID != && BillDetail.BillTypeID != 102) { totalPrice = totalPrice / 4; } labelTotalBillPrice.Text = CultureInfo.CreateSpecificCulture("vi")); } totalPrice.ToString("C", // Delete bill detail private void buttonDelete_Click(object sender, EventArgs e) { decimal totalPrice = new Decimal(); if (dataViewBillDetail.SelectedRows.Count > 0) { dataViewBillDetail.Rows.Remove(dataViewBillDetail.SelectedRows[0]); switch (BillDetail.BillTypeID) { case Bill.MEDICINEBILL: foreach (DataRow row in BillMedicineTable.Rows) { totalPrice += (decimal)row["Giá"]; } break; case Bill.SERVICEBILL: foreach (DataRow row in BillServiceTable.Rows) { totalPrice += (decimal)row["Giá"]; } break; case Bill.MATERIALBILL: foreach (DataRow row in BillMaterialTable.Rows) { totalPrice += (decimal)row["Giá"]; } break; } if (HICID != 0) { totalPrice = totalPrice / 4; } labelTotalBillPrice.Text = totalPrice.ToString("C", CultureInfo.CreateSpecificCulture("vi")); } } // Accept payment private void buttonPay_Click(object sender, EventArgs e) { 96 try { if (dataViewBillDetail.Rows.Count