Exemple #1
0
        /// <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);
        }
Exemple #2
0
        /// <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);
        }
Exemple #3
0
    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();
        }
Exemple #5
0
        /// <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
        }
Exemple #6
0
        /// <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);
     }
 }
Exemple #11
0
    /// <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;
        }
Exemple #13
0
 /// <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);
 }