private void btnAddXuat_Click(object sender, EventArgs e) { //Lấy dữ liệu đầu vào MatHang mh = cbMatHangXuat.Tag as MatHang; int giaXuatHang = Convert.ToInt32(cbGiaXuat.Text); int soLuongXuat = Convert.ToInt32(nudSoLuongXuat.Value); if (cbMatHangXuat.Text != "" && cbGiaXuat.Text != "")//Kiểm tra thông tin đã nhập hay chưa { //Lấy danh sách tồn kho của mặt hàng với giá vừa được nhập vào TonKho tk = new TonKho(); conn.Open(); string sql = @"select idMatHang,giaXuat,sum(trangThai) as tonKho from ChiTietPhieuNhap where idMatHang =N'" + mh.id + @"' and giaXuat =N'" + giaXuatHang.ToString() + @"' group by idMatHang,giaXuat"; SqlCommand cmd = new SqlCommand(); cmd.CommandText = sql; cmd.Connection = conn; DbDataReader reader = cmd.ExecuteReader(); try { if (reader.HasRows) { while (reader.Read()) { int idIndex = reader.GetOrdinal("idMatHang"); tk.id = Convert.ToString(reader.GetValue(idIndex)); int giaIndex = reader.GetOrdinal("giaXuat"); tk.gia = Convert.ToInt32(reader.GetValue(giaIndex)); int tonKhoIndex = reader.GetOrdinal("tonKho"); tk.soLuongTon = Convert.ToInt32(reader.GetValue(tonKhoIndex)); } } } catch { MessageBox.Show(@"Lỗi khi kiểm tra tồn kho " + mh.ten); } finally { reader.Close(); reader.Dispose(); } //Thêm mat hang vao hoa don ChiTietPhieuXuat item = new ChiTietPhieuXuat(); item.maHang = mh.id; item.tenHang = mh.ten; item.donVi = mh.tenDonVi; item.giaXuat = giaXuatHang; item.soLuong = soLuongXuat; item.thanhTien = giaXuatHang * soLuongXuat; //Nếu hóa đơn chưa có mặt hàng nào if (lsChiTietPhieuXuat.Count == 0) { if (soLuongXuat <= tk.soLuongTon && soLuongXuat > 0) { lsChiTietPhieuXuat.Add(item); } else { MessageBox.Show(@"số lượng tồn kho không đủ hoặc bạn nhập vào số âm khi chưa có mặt hàng này trong phiếu! Hiện tại " + item.tenHang + @" với giá " + item.giaXuat.ToString() + @"chỉ còn " + tk.soLuongTon.ToString() + @" (" + item.donVi + @")"); } } else //trường hợp hóa đơn đã có nội dung { bool daCoMatHang = false; //kiểm tra mặt hàng đã có trong hóa đơn hay chưa foreach (ChiTietPhieuXuat tg in lsChiTietPhieuXuat) { if (item.maHang == tg.maHang)//nếu đã có { daCoMatHang = true; int sl = item.soLuong + tg.soLuong; if (sl <= 0)//nếu tổng số thêm vào nhỏ hơn hoặc bằng 0 thì xóa mặt hàng khỏi hóa đơn { lsChiTietPhieuXuat.Remove(tg); } else if (sl <= tk.soLuongTon)// nếu tổng số lượng thêm vào >0 và <= số lượng tồn kho { lsChiTietPhieuXuat.Add(item); } else { MessageBox.Show(@"tồn kho không đủ!"); } } } if (daCoMatHang == false) { if (soLuongXuat <= tk.soLuongTon && soLuongXuat > 0) { lsChiTietPhieuXuat.Add(item); } else { MessageBox.Show(@"Tồn kho không đủ hoặc số lượng mặt hàng thêm vào đang âm!"); } } } //Hiển thị nội dung hóa đơn cho người dùng int chay = 0; lsvPhieuXuat.Items.Clear(); foreach (ChiTietPhieuXuat i in lsChiTietPhieuXuat) { chay++; ListViewItem itemTG = new ListViewItem(chay.ToString()); itemTG.SubItems.Add(i.maHang); itemTG.SubItems.Add(i.tenHang); itemTG.SubItems.Add(i.soLuong.ToString()); itemTG.SubItems.Add(i.donVi); itemTG.SubItems.Add(i.giaXuat.ToString()); itemTG.SubItems.Add(i.thanhTien.ToString()); lsvPhieuXuat.Items.Add(itemTG); } conn.Close(); //sau khi thêm xong tiến hành làm trống lại các mục cbMatHangXuat.Text = ""; cbGiaXuat.Text = ""; nudSoLuongXuat.Value = 0; } else { MessageBox.Show(@"Hãy nhập tên mặt hàng và chọn giá hàng!"); } }
private void ThemNoiDungPhieuXuat(ChiTietPhieuXuat item, int idPhieuXuat) { //Lấy ra danh sách các lô hàng của mặt hàng item.tenHang với giá xuât item.giaXuat và còn trong kho(trangThai>0) SqlConnection connetion = new SqlConnection(@"Data Source=DESKTOP-KP2LC3K\SQLEXPRESS;Initial Catalog=QuanLyKhoHang;Integrated Security=True"); connetion.Open(); SqlCommand command = new SqlCommand(); string lenh = @"select *from ChiTietPhieuNhap where idMatHang =N'" + item.maHang + @"' and giaXuat=N'" + item.giaXuat.ToString() + @"' order by id"; command.Connection = connetion; command.CommandText = lenh; DbDataReader read = command.ExecuteReader(); List <ChiTietPhieuNhap> ls = new List <ChiTietPhieuNhap>(); try { if (read.HasRows) { while (read.Read()) { ChiTietPhieuNhap tg = new ChiTietPhieuNhap(); int idIndex = read.GetOrdinal("id"); tg.id = Convert.ToInt32(read.GetValue(idIndex)); int idHangIndex = read.GetOrdinal("idMatHang"); tg.idMatHang = Convert.ToString(read.GetValue(idHangIndex)); int idPhieuNhapIndex = read.GetOrdinal("idPhieuNhap"); tg.idPhieuNhap = Convert.ToInt32(read.GetValue(idPhieuNhapIndex)); int giaNhapIndex = read.GetOrdinal("giaNhap"); tg.giaNhap = Convert.ToInt32(read.GetValue(giaNhapIndex)); int giaXuatIndex = read.GetOrdinal("giaXuat"); tg.giaXuat = Convert.ToInt32(read.GetValue(giaXuatIndex)); int soLuongIndex = read.GetOrdinal("soLuong"); tg.soLuong = Convert.ToInt32(read.GetValue(soLuongIndex)); int trangThaiIndex = read.GetOrdinal("trangThai"); tg.trangThai = Convert.ToInt32(read.GetValue(trangThaiIndex)); ls.Add(tg); } } } catch { MessageBox.Show(@"lỗi khi lấy danh sách ct phiếu nhập của mặt hàng " + item.tenHang + @" với giá xuất " + item.giaXuat.ToString()); } finally { read.Dispose(); } //thêm bản ghi vào Bảng ChiTietPhieuXuat foreach (var i in ls) { if (i.trangThai >= item.soLuong) { //thêm vào ctpx lenh = @"insert into ChiTietPhieuXuat(idMatHang,idPhieuXuat,idChiTietPhieuNhap,soLuong) values(N'" + item.maHang + @"',N'" + idPhieuXuat.ToString() + @"',N'" + i.id.ToString() + @"',N'" + item.soLuong.ToString() + @"')"; command.CommandText = lenh; command.ExecuteNonQuery(); //cập nhật lại trạng thái cho bản ghi ctpn có id là i.id i.trangThai = i.trangThai - item.soLuong; lenh = @"update ChiTietPhieuNhap set trangThai = N'" + i.trangThai.ToString() + @"' where id=N'" + i.id.ToString() + @"'"; command.CommandText = lenh; command.ExecuteNonQuery(); break; } else { //thêm vào ctpx lenh = @"insert into ChiTietPhieuXuat(idMatHang,idPhieuXuat,idChiTietPhieuNhap,soLuong) values(N'" + item.maHang + @"',N'" + idPhieuXuat.ToString() + @"',N'" + i.id.ToString() + @"',N'" + i.trangThai.ToString() + @"')"; command.CommandText = lenh; command.ExecuteNonQuery(); item.soLuong = item.soLuong - i.trangThai; //cập nhật trạng thái lenh = @"update ChiTietPhieuNhap set trangThai = N'0' where id=N'" + i.id.ToString() + @"'"; command.CommandText = lenh; command.ExecuteNonQuery(); } } connetion.Close(); connetion.Dispose(); }