/// <summary> /// Hàm gán dữ liệu cho object cttonkho để thêm vào danh sách hiện lên giao diện /// </summary> /// <param name="itemNhap">ctPhieuNhap để lấy thông tin nguyên liệu, số lượng nhập.</param> /// <param name="db"></param> /// <param name="soLuongXuat">Tổng số lượng nguyên liệu đã xuất trong kỳ.</param> /// <returns></returns> private ctTonKho addCtTonKhoToList(ctPhieuNhapKho itemNhap, qlCaPheEntities db, double soLuongXuat) { int soLuongCuoiKyTruoc = 0;//, maKyTruoc=0; //--------Lấy thông tin tồn kho kỳ trước để xác định SỐ LƯỢNG TỒN CUỒI KỲ TRƯỚC TonKho tonKhoKyTruoc = db.TonKhoes.OrderByDescending(t => t.maSoKy).FirstOrDefault(); if (tonKhoKyTruoc != null) { ctTonKho ctTonTruoc = tonKhoKyTruoc.ctTonKhoes.SingleOrDefault(c => c.TonKho.maSoKy == tonKhoKyTruoc.maSoKy && c.maNguyenLieu == itemNhap.maNguyenLieu); if (ctTonTruoc != null) { //----------Lấy số lượng tồn kho cuối kỳ trước làm đầu kỳ này. (Số lượng cuối kỳ trước là số lượng thực tế). soLuongCuoiKyTruoc = (int)ctTonTruoc.soLuongThucTe; } } ctTonKho ctTon = new ctTonKho(); ctTon.maNguyenLieu = itemNhap.maNguyenLieu; ctTon.donGia = itemNhap.donGiaNhap; ctTon.soLuongDauKy = soLuongCuoiKyTruoc; ctTon.soLuongCuoiKyLyThuyet = itemNhap.soLuongNhap - soLuongXuat; ctTon.soLuongThucTe = itemNhap.soLuongNhap - soLuongXuat; ctTon.nguyenLieu = itemNhap.nguyenLieu; ctTon.tyLeHaoHut = 0; return(ctTon); }
/// <summary> /// Hàm lấy tổng số lượng của nguyên liệu thực tế đang tồn trong kho. /// </summary> /// <param name="db"></param> /// <param name="maNguyenLieu">Mã nguyên liệu cần kiểm tra tồn kho</param> /// <returns></returns> public double laySoLuongNguyenLieuTonThucTeTrongKho(int maNguyenLieu, qlCaPheEntities db) { double soLuongTon = 0; //--------Lấy thông tin tồn kho mới nhất. TonKho tonKhoNew = db.TonKhoes.OrderByDescending(t => t.maSoKy).FirstOrDefault(); if (tonKhoNew != null) { //------Lấy thông tin tồn kho của nguyên liệu ctTonKho ctTonKhoThucTe = tonKhoNew.ctTonKhoes.SingleOrDefault(ct => ct.maNguyenLieu == maNguyenLieu); if (ctTonKhoThucTe != null) { //---------Lấy số lượng thực tế của nguyên liệu trong kỳ kiểm tra mới nhất. double soLuongThucTe = (double)ctTonKhoThucTe.soLuongThucTe; ////////////------------------3. Lấy danh sách xuất kho từ thời điểm kiểm kê kho đến nay var listXuat = db.ctPhieuXuatKhoes.Where(ct => ct.phieuXuatKho.ngayXuat >= tonKhoNew.ngayKiem && ct.phieuXuatKho.ngayXuat <= DateTime.Now && ct.maNguyenLieu == maNguyenLieu).GroupBy(ct => ct.maNguyenLieu); double soLuongDaXuat = 0; //--------Lặp qua danh sách nguyên liệu đã xuất để tính tồn kho foreach (var listXuatItem in listXuat) { foreach (var ctXuat in listXuatItem) { soLuongDaXuat += (double)ctXuat.soLuongXuat; } } //-------Tính số lượng tồn kho soLuongTon = soLuongThucTe - soLuongDaXuat; } } return(soLuongTon); }
public int themMoiChiTietTonKho(int maSoKy, int maNguyenLieu, long donGia, double soLuongDauKy, double soLuongCuoiKyLyThuyet, double soLuongThucTe, double tyLeHaoHut, string nguyenNhan) { int kq = 0; try { qlCaPheEntities db = new qlCaPheEntities(); ctTonKho ctAdd = new ctTonKho(); ctAdd.maSoKy = maSoKy; ctAdd.maNguyenLieu = maNguyenLieu; ctAdd.donGia = donGia; ctAdd.soLuongDauKy = soLuongDauKy; ctAdd.soLuongCuoiKyLyThuyet = soLuongCuoiKyLyThuyet; ctAdd.soLuongThucTe = soLuongThucTe; ctAdd.tyLeHaoHut = tyLeHaoHut; ctAdd.nguyenNhanHaoHut = nguyenNhan; db.ctTonKhoes.Add(ctAdd); kq = db.SaveChanges(); kq += this.capNhatTongTienTonKho(ctAdd, db); } catch (Exception ex) { xulyFile.ghiLoi("Class: bKiemKho - Function: themMoiChiTietTonKho", ex.Message); } return(kq); }
/// <summary> /// Hàm thực hiện cập nhật lại nguyên liệu sang trạng thái chưa kiểm kê /// Xảy ra khi người dùng click vào nút "Kiểm lại" trên danh sách /// </summary> /// <param name="param">Tham số chứa mã nguyên liệu cần kiểm lại</param> /// <returns>Chuỗi html tạo dữ liệu cho bảng nguyên liệu đã kiểm</returns> public string AjaxSuKienKiemLai(int param) { try { cartKiemKho cartTruoc = (cartKiemKho)Session["truocKiemKho"]; cartKiemKho cartSau = (cartKiemKho)Session["sauKiemKho"]; //-------Lấy thông tin nguyên liệu cần kiểm lại ctTonKho itemDaKiem = cartSau.getInfo(param); if (itemDaKiem != null) { //-------Khỡi tạo object chưa kiểm kê và chuyển dữ liệu từ đã kiểm sang chưa kiểm ctTonKho itemChuaKiem = new ctTonKho(); itemChuaKiem.soLuongThucTe = 0; itemChuaKiem.nguyenNhanHaoHut = ""; this.ganDuLieuTuItemCuSangItemMoi(itemDaKiem, itemChuaKiem); //-------Thêm nguyên liệu vào giỏ chưa kiểm cartTruoc.addCart(itemChuaKiem); Session["truocKiemKho"] = cartTruoc; //------Xóa nguyên liệu từ cart đã kiểm cartSau.removeItem(param); Session["sauKiemKho"] = cartSau; } } catch (Exception ex) { xulyFile.ghiLoi("Class: TonKhoController - Function: AjaxSuKienKiemLai", ex.Message); } return AjaxDoiChieuSoLuong(); }
/// <summary> /// Hàm kiểm tra sản phẩm có khả thi để tiếp nhận /// </summary> /// <param name="sp">Sản phẩm cần kiểm tra</param> /// <returns>True: Khả thi, False: không khả thi (hết nguyên liệu)</returns> public bool kiemTraSanPhamKhaThi(sanPham sp) { qlCaPheEntities db = new qlCaPheEntities(); //------Lấy công thức của sản phẩm còn sử dụng congThucPhaChe congThucSanPham = sp.congThucPhaChes.SingleOrDefault(c => c.trangThai == true); //---------Kiểm tra công thức của sản phẩm if (congThucSanPham != null) { //--------------Lấy số lượng thực tế trong kho List <ctTonKho> listThucTe = new bTonKho().layDanhSachTon(); List <ctCongThuc> listBuocCongThuc = congThucSanPham.ctCongThucs.Where(c => c.maNguyenLieu > 0).ToList(); //-------------Lặp qua những bước có sử dụng nguyên liệu foreach (ctCongThuc ctCongThuc in listBuocCongThuc) { double soLuongSuDung = (double)ctCongThuc.soLuongNguyenLieu; //-------Lặp qua các nguyên liệu tồn kho cần sử dụng cho công thức ctTonKho nguyenLieuTonThucTe = listThucTe.SingleOrDefault(ct => ct.maNguyenLieu == ctCongThuc.maNguyenLieu); if (nguyenLieuTonThucTe != null) { if (nguyenLieuTonThucTe.soLuongCuoiKyLyThuyet < soLuongSuDung) { return(false); } } else { return(false);//-----Trả về khi không có nguyên liệu trong kho } } return(true); //----Trả về khi đã kiểm tra số lượng nguyên liệu pha chế sản phẩm đủ } return(false); //------Trả về khi không có công thức pha chế của sản phẩm }
/// <summary> /// Hàm lấy danh sách nguyên liệu tồn kho thực tế /// </summary> /// <returns>Trả về danh sách các nguyên liệu tồn kho thực tế</returns> public List <ctTonKho> layDanhSachTon() { List <ctTonKho> kq = new List <ctTonKho>(); try { qlCaPheEntities db = new qlCaPheEntities(); //------Lấy thông tin đợt kiểm kho gần nhất TonKho tonKho = db.TonKhoes.OrderByDescending(t => t.maSoKy).FirstOrDefault(); if (tonKho != null) { List <ctPhieuNhapKho> listNguyenLieuNhapTrongKy = new bNguyenLieu().layDanhSachNguyenLieuNhapTrongKy(db, tonKho.ngayKiem); List <NguyenLieuXuat> listNguyenLieuXuat = new bNguyenLieu().layDanhSachNguyenLieuXuat(db, tonKho.ngayKiem); //-------Đọc tất cả các nguyên liệu foreach (nguyenLieu nlItem in db.nguyenLieux.Where(n => n.trangThai == true).ToList()) { double soLuongXuat = 0, soLuongNhap = 0, soLuongThucTe = 0, soLuongDauKy = 0, donGiaNhap = 0; ctTonKho ctKQ = new ctTonKho(); ctKQ.nguyenLieu = nlItem; ctPhieuNhapKho nguyenLieuNhap = listNguyenLieuNhapTrongKy.SingleOrDefault(s => s.maNguyenLieu == nlItem.maNguyenLieu); if (nguyenLieuNhap != null) { soLuongNhap = (double)nguyenLieuNhap.soLuongNhap; donGiaNhap = nguyenLieuNhap.donGiaNhap; ctKQ.maNguyenLieu = nguyenLieuNhap.maNguyenLieu; } //--------Kiểm tra để nguyên liệu đang duyệt có trong sổ kho trước đây ctTonKho itemSoKho = tonKho.ctTonKhoes.SingleOrDefault(t => t.maNguyenLieu == nlItem.maNguyenLieu); if (itemSoKho != null) { ctKQ.maNguyenLieu = itemSoKho.maNguyenLieu; //------Số lượng dầu kỳ này là số lượng thực tế cuối kỳ trước soLuongDauKy = (double)itemSoKho.soLuongThucTe; soLuongThucTe = (double)itemSoKho.soLuongThucTe; donGiaNhap = itemSoKho.donGia; //----Kiểm tra nguyên liệu đang duyệt cần kiểm tra có được xuất chưa. NguyenLieuXuat nguyenLieuXuat = listNguyenLieuXuat.SingleOrDefault(s => s.maNguyenLieu == itemSoKho.maNguyenLieu); if (nguyenLieuXuat != null) { soLuongXuat = nguyenLieuXuat.soLuongXuat; } } ctKQ.donGia = (long)donGiaNhap; ctKQ.soLuongDauKy = soLuongDauKy; ctKQ.soLuongThucTe = soLuongThucTe; //-------------Số lượng THỰC TẾ TRÊN LÝ THUYẾT là số lượng (CUỐI KỲ TRƯỚC + SỐ LƯỢNG NHẬP(Trong kỳ)) - SỐ LƯỢNG ĐÃ XUẤT(trong kỳ) //=============Trong kỳ: từ ngày kiểm kê cuối cùng đến nay ctKQ.soLuongCuoiKyLyThuyet = (soLuongThucTe + soLuongNhap) - soLuongXuat; ctKQ.tyLeHaoHut = ctKQ.soLuongDauKy - ctKQ.soLuongCuoiKyLyThuyet; kq.Add(ctKQ); } } } catch (Exception ex) { xulyFile.ghiLoi("Class: bTonKho - Function: layDanhSachTon", ex.Message); } return(kq); }
/// <summary> /// Hàm tạo một hàng cho bảng danh sách các nguyên liệu kiểm kho /// </summary> /// <param name="item">Object chứa thông tin nguyên liệu kiểm kho</param> /// <param name="loaiDS">Loại bảng cần lấy các thuộc tính <para/> 1: Lấy danh sách nguyên liệu chưa kiểm kê - 2: Lấy danh sách nguyên liệu đã kiểm kê</param> /// <returns></returns> private string taoDongNguyenLieuKiemKho(ctTonKho item, int loaiDS) { string kq = ""; kq += "<tr role=\"row\" class=\"odd\">"; kq += " <td><b>" + xulyDuLieu.traVeKyTuGoc(item.nguyenLieu.tenNguyenLieu) + "</b></td>"; kq += " <td>" + xulyDuLieu.doiVND(item.donGia) + "</td>"; kq += " <td> <input min=\"0\" class=\"form-control\" id=\"txtSoLuongThucTe" + item.maNguyenLieu.ToString() + "\" style=\"width:100%\"></td>"; kq += " <td>" + xulyDuLieu.traVeKyTuGoc(item.nguyenLieu.donViPhaChe) + "</td>"; kq += " <td> <input type=\"text\" min=\"0\" class=\"form-control\" id=\"txtNguyenNhan" + item.maNguyenLieu.ToString() + "\" placeholder=\"Nguyên nhân hao hụt\" style=\"width:100%\"></td>"; kq += " <td> <button type=\"button\" manl=\"" + item.maNguyenLieu.ToString() + "\" class=\"btnKiemHang btn btn-info waves-effect\">Nhập </button> </td>"; kq += "</tr>"; return kq; }
/// <summary> /// Hàm thêm mới một nguyên liệu cần kiểm tra vào giỏ /// </summary> /// <param name="x"></param> public void addCart(ctTonKho x) { try { //-----Kiểm tra xem nguyên liệu đã có trong giỏ chưa if (!this.Info.ContainsKey(x.maNguyenLieu)) { this.Info.Add(x.maNguyenLieu, x); } } catch (Exception ex) { xulyFile.ghiLoi("Class: cartKiemKho - Function: addCart", ex.Message); } }
/// <summary> /// Hàm chuyển đổi dữ liệu giữa nguyên liệu chưa kiểm sang đã kiểm /// </summary> /// <param name="ctCu">Object tồn kho cũ cần đổi</param> /// <param name="ctMoi">Object tồn kho mới cần đổi</param> /// <param name="param">Chuỗi dữ liệu lấy từ giao diện</param> private void ganDuLieuTuItemCuSangItemMoi(ctTonKho oldItem, ctTonKho newItem) { if (oldItem != null) { if(oldItem.soLuongCuoiKyLyThuyet>0) { double soLuongLyThuyet = (double)oldItem.soLuongCuoiKyLyThuyet; newItem.donGia = oldItem.donGia; newItem.soLuongCuoiKyLyThuyet = soLuongLyThuyet; newItem.soLuongDauKy = oldItem.soLuongDauKy; //------Tính tỷ lệ hao hụt newItem.tyLeHaoHut = (double)(soLuongLyThuyet - newItem.soLuongThucTe); } newItem.maNguyenLieu = oldItem.nguyenLieu.maNguyenLieu; newItem.nguyenLieu = oldItem.nguyenLieu; } }
/// <summary> /// Hàm thực hiện thêm các nguyên liệu đã kiểm kê vào bảng chi tiết tồn kho /// </summary> /// <param name="maSoKy">Mã số kỳ kiểm kê</param> /// <param name="cart">Object chứa giỏ nguyên liệu đã kiểm kê</param> /// <param name="db"></param> private void themChiTietTonKho(int maSoKy, cartKiemKho cart, qlCaPheEntities db) { foreach (ctTonKho item in cart.Info.Values) { ctTonKho ctAdd = new ctTonKho(); ctAdd.maSoKy = maSoKy; ctAdd.maNguyenLieu = item.maNguyenLieu; ctAdd.donGia = item.donGia; ctAdd.soLuongDauKy = item.soLuongDauKy; ctAdd.soLuongCuoiKyLyThuyet = item.soLuongCuoiKyLyThuyet; ctAdd.soLuongThucTe = item.soLuongThucTe; ctAdd.tyLeHaoHut = item.tyLeHaoHut; ctAdd.nguyenNhanHaoHut = item.nguyenNhanHaoHut; db.ctTonKhoes.Add(ctAdd); db.SaveChanges(); new bKiemKho().capNhatTongTienTonKho(ctAdd, db); } }
/// <summary> /// Hàm thực hiện cập nhật lại tổng tiền tồn kho. /// </summary> /// <param name="ct">Object chi tiết tồn kho để lấy các thuộc tính cần thiết</param> /// <param name="db"></param> /// <returns>1: Cập nhật thành công - 2: thất bại</returns> public int capNhatTongTienTonKho(ctTonKho ct, qlCaPheEntities db) { int kq = 0; try { TonKho tkUpdate = db.TonKhoes.SingleOrDefault(s => s.maSoKy == ct.maSoKy); if (tkUpdate != null) { ct.nguyenLieu = db.nguyenLieux.SingleOrDefault(s => s.maNguyenLieu == ct.maNguyenLieu); double soLuongTinh = new bNguyenLieu().chuyenDoiDonViNhoSangLon(ct.soLuongThucTe, ct.nguyenLieu); tkUpdate.tongTien += (long)(ct.donGia * soLuongTinh); db.Entry(tkUpdate).State = System.Data.Entity.EntityState.Modified; kq = db.SaveChanges(); } } catch (Exception ex) { xulyFile.ghiLoi("Class: bKiemKho - Function: capNhatTongTienTonKho", ex.Message); } return(kq); }
/// <summary> /// Hàm xử lý sự kiện click vào nút "Nhập" để ghi nhận số lượng tồn kho thực tế /// </summary> /// <param name="param">Tham số của nguyên liệu đang kiểm kê <para/> param có dạng: maNguyenLieu|soLuongThucTe|nguyenNhanHaoHut</param> /// <returns>Chuổi html danh sách các nguyên liệu chưa kiểm kho</returns> public string AjaxSuKienKiemHang(string param) { string kq = ""; try { cartKiemKho cartTruoc = (cartKiemKho)Session["truocKiemKho"]; cartKiemKho cartSau = (cartKiemKho)Session["sauKiemKho"]; if (param.Split('|').Count() == 3) //---Nếu tham số đúng định dạng { //----Xử lý tham số int maNguyenLieu = xulyDuLieu.doiChuoiSangInteger(param.Split('|')[0]); int soLuongThucTe = xulyDuLieu.doiChuoiSangInteger(param.Split('|')[1]); string nguyenNhanHaoHut = xulyDuLieu.xulyKyTuHTML(param.Split('|')[2]); //-------Lấy thông tin nguyên liệu đang kiểm kê ctTonKho itemDangKiem = cartTruoc.getInfo(maNguyenLieu); //----------Gán dữ liệu của nguyên liệu đang kiểm vào đã kiểm ctTonKho itemDaKiem = new ctTonKho(); //---Gán dữ liệu cho object mới itemDaKiem.soLuongThucTe = soLuongThucTe; itemDaKiem.nguyenNhanHaoHut = nguyenNhanHaoHut; this.ganDuLieuTuItemCuSangItemMoi(itemDangKiem, itemDaKiem); //-----Thêm nguyên liệu vào cart đã kiểm cartSau.addCart(itemDaKiem); Session["sauKiemKho"] = cartSau; //----------Xóa nguyên liệu trong cartTruocKiemKho cartTruoc.removeItem(maNguyenLieu); Session["truocKiemKho"] = cartTruoc; } kq = this.AjaxLayNguyenLieuKiemKho(); } catch (Exception ex) { xulyFile.ghiLoi("Class: TonKhoController - Function: AjaxSuKienKiemHang", ex.Message); } return kq; }
/// <summary> /// Hàm lấy đơn giá nhập nguyên liệu tại thời điểm kiểm kê kho mới nhất /// </summary> /// <param name="maNguyenLieu"></param> /// <returns></returns> public long layDonGiaNguyenLieuTonKho(int maNguyenLieu) { try { //----------Lấy thông tin tồn kho mới nhất TonKho tonKhoNew = new qlCaPheEntities().TonKhoes.OrderByDescending(t => t.maSoKy).FirstOrDefault(); if (tonKhoNew != null) { //------Lấy thông tin nguyên liệu trong tồn kho ctTonKho ctTonKhoNew = tonKhoNew.ctTonKhoes.SingleOrDefault(ct => ct.maNguyenLieu == maNguyenLieu); if (ctTonKhoNew != null) { //---------Lấy số lượng thực tế của nguyên liệu trong kỳ kiểm tra mới nhất. return(ctTonKhoNew.donGia); } } } catch (Exception ex) { xulyFile.ghiLoi("Class: bTonKho - Function: layDonGiaNguyenLieuTonKho", ex.Message); } return(0); }