/// <summary> /// Hàm lấy dữ liệu từ giao diện gán cho các thuộc tính có trong bảng congThucPhaChe /// </summary> /// <param name="congThuc"></param> /// <param name="f"></param> private void layDuLieuTuViewCongThuc(congThucPhaChe congThuc, FormCollection f) { string loi = ""; congThuc.maSanPham = this.xuLyRequestLayMaSanPham(); if (congThuc.maSanPham <= 0) { loi += "Vui lòng chọn sản phẩm cần công thức pha chế <br/>"; } congThuc.tenCongThuc = xulyDuLieu.xulyKyTuHTML(f["txtTenCongThuc"]); if (congThuc.tenCongThuc.Length <= 0) { loi += "Vui lòng nhập tên công thức <br/>"; } congThuc.dienGiai = xulyDuLieu.xulyKyTuHTML(f["txtDienGiai"]); if (congThuc.dienGiai.Length <= 0) { loi += "Vui lòng nhập diễn giải về công thức <br/>"; } congThuc.ghiChu = xulyDuLieu.xulyKyTuHTML(f["txtGhiChu"]); congThuc.nguoiTao = ((taiKhoan)Session["login"]).tenDangNhap; congThuc.ngayTao = DateTime.Now; congThuc.trangThai = false; //-------Thiết lập trạng thái công thức chưa được sử dụng if (loi.Length > 0) { throw new Exception(loi); } }
/// <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 }
public ActionResult ct_TaoMoiCongThuc(congThucPhaChe ct, FormCollection f) { string ndThongBao = ""; int kqLuu = 0; qlCaPheEntities db = new qlCaPheEntities(); try { int maSP = this.xuLyRequestLayMaSanPham(); this.layDuLieuTuViewCongThuc(ct, f); ct.sanPham = db.sanPhams.SingleOrDefault(s => s.maSanPham == maSP); //---Insert table lichSuGia this.themLichSuGiaVaoDatabase(db, f); //---Insert table congThucPhaChe db.congThucPhaChes.Add(ct); kqLuu = db.SaveChanges(); if (kqLuu > 0) { //---Insert table ctCongThuc this.themChiTietVaoDatabase(ct.maCongThuc, db); ndThongBao = createHTML.taoNoiDungThongBao("Công thức pha chế", xulyDuLieu.traVeKyTuGoc(ct.tenCongThuc), "/CongThuc/ct_TableCongThuc"); xulyChung.ghiNhatKyDtb(2, "Công thức pha chế của \" " + xulyDuLieu.traVeKyTuGoc(ct.sanPham.tenSanPham) + " \""); } } catch (Exception ex) { xulyFile.ghiLoi("Class CongThucController - Function: ct_TaoMoiCongThuc_Post", ex.Message); ndThongBao = ex.Message; this.doDuLieuCongThucLenView(ct, db); } this.resetData(); ViewBag.ThongBao = createHTML.taoThongBaoLuu(ndThongBao); return(View()); }
/// <summary> /// Hàm thực hiện xóa một công thức khỏi CSDL /// </summary> /// <param name="maCongThuc"></param> public void xoaCongThuc(int maCongThuc) { try { int kqLuu = 0; qlCaPheEntities db = new qlCaPheEntities(); congThucPhaChe ctXoa = db.congThucPhaChes.SingleOrDefault(c => c.maCongThuc == maCongThuc); if (ctXoa != null) { //-----xóa dữ liệu trong bảng chi tiết trước this.xoaChiTiet(ctXoa.maCongThuc, db); //------Tiến hành xóa công thức db.congThucPhaChes.Remove(ctXoa); kqLuu = db.SaveChanges(); if (kqLuu > 0) { xulyChung.ghiNhatKyDtb(3, "Công thức pha chế của \"" + xulyDuLieu.traVeKyTuGoc(ctXoa.sanPham.tenSanPham) + " \""); } } else { throw new Exception("Công thức có mã " + maCongThuc.ToString() + " không tồn tại để xóa bỏ"); } } catch (Exception ex) { xulyFile.ghiLoi("Class CongThucController - Function: xoaCongThuc", ex.Message); } }
/// <summary> /// Hàm tạo html cho class body của modal nội dung công thức /// </summary> /// <param name="db"></param> /// <param name="congThuc"></param> /// <returns></returns> private string htmlTaoNoiDungTrongBodyChiTiet(congThucPhaChe congThuc) { string kq = ""; kq += " <div class=\"wizard\">"; kq += " <div class=\"wizard-inner\">"; kq += " <div class=\"connecting-line\"></div>"; kq += " <ul class=\"nav nav-tabs\" role=\"tablist\">"; //-----------Lặp qua chi tiết để hiện các bước chọn List <ctCongThuc> listChiTiet = congThuc.ctCongThucs.Where(c => c.maCongThuc == congThuc.maCongThuc).OrderBy(c => c.buocSo).ToList(); int index = 0; //----Biến xác định. Nếu là phần tử đầu tiên thì add class active để chọn bước này foreach (ctCongThuc ct in listChiTiet) { //---------Gán danh sách các bước để người dùng chọn kq += this.htmlStepListModalChitietCongThuc(ct, index); index++; } kq += " </ul></div>"; //-----Đóng ul và div cho khu vực danh sách các bước kq += " <div class=\"tab-content\">"; //------Khu vực nội dung bước int indexNoiDung = 0; foreach (ctCongThuc ct in listChiTiet)//----Lặp qua danh sách chi tiết để gán nội dung các bước thực hiện { kq += this.htmlNoiDungChoTungBuoc(ct, indexNoiDung); indexNoiDung++; } kq += " </div>"; kq += " </div>"; return(kq); }
/// <summary> /// Hàm thực hiện đổ dữ liệu của công thức lên giao diện /// </summary> /// <param name="congThuc"></param> private void doDuLieuCongThucLenView(congThucPhaChe congThuc, qlCaPheEntities db) { ViewBag.txtMaCongThuc = congThuc.maCongThuc.ToString(); ViewBag.txtTenCongThuc = xulyDuLieu.traVeKyTuGoc(congThuc.tenCongThuc); ViewBag.txtDienGiai = xulyDuLieu.traVeKyTuGoc(congThuc.dienGiai); ViewBag.txtGhiChu = xulyDuLieu.traVeKyTuGoc(congThuc.ghiChu); ViewBag.TitleListCongThuc = xulyChung.taoUrlCoTruyenThamSo("CongThuc/ct_TableCongThuc", congThuc.maSanPham.ToString()); ViewBag.TitleCreateCongThuc = xulyChung.taoUrlCoTruyenThamSo("CongThuc/ct_TaoMoiCongThuc", congThuc.maSanPham.ToString()); ViewBag.hinhSP = xulyDuLieu.chuyenByteHinhThanhSrcImage(db.sanPhams.SingleOrDefault(s => s.maSanPham == congThuc.maSanPham).hinhAnh); }
/// <summary> /// Hàm tạo chuỗi html cho div modal nội dung các bước của công thức /// </summary> /// <param name="congThuc"></param> /// <returns></returns> private string htmlModalChiTietCongThuc(congThucPhaChe congThuc) { string kq = ""; //-------Tạo tiêu đế cho modal và gán tên công thức pha chế kq += this.htmlHeaderModalChiTietCongthuc(xulyDuLieu.traVeKyTuGoc(congThuc.tenCongThuc)); //-------Tạo body cho modal kq += this.htmlBodyModalChiTietCongThuc(congThuc); //-------Tạo footer cho modal kq += this.htmlFooterModalChiTietCongThuc(xulyDuLieu.traVeKyTuGoc(congThuc.ghiChu)); return(kq); }
/// <summary> /// Hàm gán dữ liệu của 1 object ctHoaDonTam vào 1 dòng trên bảng /// </summary> /// <param name="ct"></param> /// <param name="db"></param> /// <returns></returns> private string ganDuLieuChiTietHoaDon(ctHoaDonTam ct) { string html = ""; //----------Gán dữ liệu cho giao diện html += "<tr>"; html += " <td>"; html += " <div class=\"col-md-4 col-sm-4 col-xs-4 col-lg-4\">"; html += " <img width=\"50px;\" height=\"50px;\" src=\"" + xulyDuLieu.chuyenByteHinhThanhSrcImage(ct.sanPham.hinhAnh) + "\">"; html += " </div>"; html += " <div class=\"col-md-8 col-sm-8 col-xs-8 col-lg-8\">"; html += " <h4>" + xulyDuLieu.traVeKyTuGoc(ct.sanPham.tenSanPham) + "</h4>"; html += " </div>"; html += " </td>"; html += " <td>" + ct.soLuong.ToString() + "</td>"; //----Kiểm tra trạng thái của hóa đơn để thiết lập các nút chức năng tương ứng if (ct.trangThaiPhaChe == 0) //-----Trạng thái đang pha chế --- CÓ CHỨC NĂNG PHA CHẾ SẢN PHẨM HOẶC HỦY { if (new bSanPham().kiemTraSanPhamKhaThi(ct.sanPham)) { html += " <td><button type=\"button\" maCt=\"" + ct.maCtTam.ToString() + "\" class=\"btnPhaChe btn btn-success btn-circle waves-effect waves-circle waves-float\"><i class=\"material-icons\">send</i></button></td>"; } else { html += " <td><button type=\"button\" maCt=\"" + ct.maCtTam.ToString() + "\" class=\"btnThayThe btn btn-warning btn-circle waves-effect waves-circle waves-float\"><i class=\"material-icons\">undo</i></button></td>"; } } else if (ct.trangThaiPhaChe == 1) //----Trạng thái đã pha chế --- CÓ CHỨC NĂNG CẬP NHẬT TRẠNG THÁI PHA CHẾ XONG HOẶC XEM CÔNG THỨC { congThucPhaChe ctSanPham = ct.sanPham.congThucPhaChes.SingleOrDefault(c => c.trangThai == true); if (ctSanPham != null) //-----Tạo nút xem công thức { html += " <td><button type=\"button\" maCongThuc=\"" + ctSanPham.maCongThuc.ToString() + "\" class=\"btnXemCongThuc btn btn-info btn-circle waves-effect waves-circle waves-float\"><i class=\"material-icons\">info_outline</i></button></td>"; } else { html += " <td></td>"; } html += " <td><button type=\"button\" maCt=\"" + ct.maCtTam.ToString() + "\" class=\"btnHoanTat btn btn-danger btn-circle waves-effect waves-circle waves-float\"><i class=\"material-icons\">done</i></button></td>"; } html += "</tr>"; return(html); }
/// <summary> /// Hàm thực hiện cập nhật trạng thái của 1 công thức /// Trạng thái cập nhật sẽ ngược với trạng thái hiện tại /// </summary> /// <param name="maCongThuc">Mã công thức cần cập nhật</param> public void capNhatTrangThai() { try { string param = xulyChung.nhanThamSoTrongSession(); int kqLuu = 0; if (param.Length > 0) { int maCongThuc = xulyDuLieu.doiChuoiSangInteger(param); qlCaPheEntities db = new qlCaPheEntities(); congThucPhaChe congThucSua = db.congThucPhaChes.SingleOrDefault(c => c.maCongThuc == maCongThuc); this.capNhatCacCongThucFalse(congThucSua.sanPham, db); if (congThucSua != null) { bool trangThaiCu = (bool)congThucSua.trangThai; //Lưu lại trạng thái cũ để chuyển đến danh sách tương ứng congThucSua.trangThai = !trangThaiCu; //Cập nhật trạng thái ngược với trạng thái cũ congThucSua.nguoiDuyet = ((taiKhoan)Session["login"]).tenDangNhap; db.Entry(congThucSua).State = System.Data.Entity.EntityState.Modified; kqLuu = db.SaveChanges(); if (kqLuu > 0) { xulyChung.ghiNhatKyDtb(4, "Cập nhật trạng thái công thức pha chế của \" " + xulyDuLieu.traVeKyTuGoc(congThucSua.sanPham.tenSanPham) + " \""); //-------Thiết lập lại session để chuyển đến danh sách đúng nhất Session["urlAction"] = "page=/CongThuc/ct_TableCongThuc|request=" + congThucSua.maSanPham.ToString(); Response.Redirect(xulyChung.layTenMien() + "/CongThuc/ct_TableCongThuc"); } } else { throw new Exception("Slide có mã " + maCongThuc + " không tồn tại để cập nhật"); } } else { throw new Exception("không nhận được tham số"); } } catch (Exception ex) { xulyFile.ghiLoi("Class: CongThucController - Function: capNhatTrangThai", ex.Message); Response.Redirect(xulyChung.layTenMien() + "/Home/ServerError"); } }
/// <summary> /// Hàm tạo html body của modal xem chi tiết công thức. /// </summary> /// <param name="congThuc"></param> /// <param name="db"></param> /// <returns></returns> private string htmlBodyModalChiTietCongThuc(congThucPhaChe congThuc) { string kq = ""; kq += "<div class=\"modal-body\">"; kq += " <div class=\"row\">"; kq += " <div class=\"col-md-12 col-lg-12\">"; kq += " <div class=\"card\">"; kq += " <div class=\"header bg-cyan\">"; kq += " <h2>Danh mục các bước thực hiện</h2>"; kq += " </div>"; kq += " <div class=\"body\">"; //---------Gán nội dung danh sách các bước và nội dung của từng bước kq += this.htmlTaoNoiDungTrongBodyChiTiet(congThuc); kq += " </div>";//End div body kq += " </div>"; kq += " </div>"; kq += " </div>"; kq += "</div>"; return(kq); }
public ActionResult ct_ChinhSuaCongThuc(FormCollection f) { int kqLuu = 0; qlCaPheEntities db = new qlCaPheEntities(); congThucPhaChe ctSua = new congThucPhaChe(); try { int maCT = xulyDuLieu.doiChuoiSangInteger(f["txtMaCongThuc"]); ctSua = db.congThucPhaChes.SingleOrDefault(c => c.maCongThuc == maCT); if (ctSua != null) { //------Gán session dể chuyển đến danh sách công thức của sản phẩm Session["urlAction"] = "page=/CongThuc/ct_TableCongThuc|request=" + ctSua.maSanPham.ToString(); //-------Cập nhật thông tin công thức this.layDuLieuTuViewCongThuc(ctSua, f); //-------Cập nhât lịch sử giá this.themLichSuGiaVaoDatabase(db, f); db.Entry(ctSua).State = System.Data.Entity.EntityState.Modified; kqLuu = db.SaveChanges(); if (kqLuu > 0) { xulyChung.ghiNhatKyDtb(4, "Công thức pha chế của \" " + xulyDuLieu.traVeKyTuGoc(ctSua.sanPham.tenSanPham) + " \""); //-----Tiến hành xóa những chi tiết công thức và thêm lại this.xoaChiTiet(ctSua.maCongThuc, db); this.themChiTietVaoDatabase(ctSua.maCongThuc, db); //Xóa session Session.Remove("congThuc"); return(RedirectToAction("ct_TableCongThuc")); } } } catch (Exception ex) { ViewBag.ThongBao = createHTML.taoThongBaoLuu(ex.Message); xulyFile.ghiLoi("Class CongThucController - Function: ct_ChinhSuaCongThuc_Post", ex.Message); this.doDuLieuCongThucLenView(ctSua, db); } return(View()); }
/// <summary> /// Hàm tạo danh sách các nút chức năng tương ứng trên bảng /// </summary> /// <returns></returns> private string thietLapNutChucNangTable(sanPham sp) { string htmlTable = ""; htmlTable += " <div class=\"btn-group\">"; htmlTable += " <button type=\"button\" class=\"btn btn-primary dropdown-toggle\" data-toggle=\"dropdown\">"; htmlTable += " Chức năng <span class=\"caret\"></span>"; htmlTable += " </button>"; htmlTable += " <ul class=\"dropdown-menu\" role=\"menu\">"; htmlTable += " <li><a task=\"" + xulyChung.taoUrlCoTruyenThamSo("/DoUong/du_ChinhSuaDoUong", sp.maSanPham.ToString()) + "\" class=\"guiRequest col-blue\"><i class=\"material-icons\">mode_edit</i>Chỉnh sửa</a></li>"; if (sp.congThucPhaChes.Count() > 0) { congThucPhaChe ctSanPham = sp.congThucPhaChes.SingleOrDefault(c => c.trangThai == true); if (ctSanPham != null) { htmlTable += " <li><a maCongThuc=\"" + ctSanPham.maCongThuc.ToString() + "\" class=\"goiYCongThuc col-blue\"><i class=\"material-icons\">search</i>Xem công thức</a></li>"; } } switch (sp.trangThai) //-----Dựa vào trạng thái để hiện chức năng phù hợp { case 0: //---Cho sản phẩm đang chờ duyệt. Cập nhật trạng thái thành 1 htmlTable += " <li><a task=\"" + xulyChung.taoUrlCoTruyenThamSo("/DoUong/capNhatTrangThai", sp.maSanPham.ToString() + "&1") + "\" class=\"guiRequest col-orange\"><i class=\"material-icons\">done</i>Duyệt</a></li>"; break; case 1: //---Cho sản phẩm đang được bán. Cập nhật trạng thái thành 2 htmlTable += " <li><a task=\"" + xulyChung.taoUrlCoTruyenThamSo("/DoUong/capNhatTrangThai", sp.maSanPham.ToString() + "&2") + "\" class=\"guiRequest col-orange\"><i class=\"material-icons\">clear</i>Ngưng bán</a></li>"; break; case 2: //---Cho sản phẩm ngưng bán. Cập nhật trạng thái thành 1 htmlTable += " <li><a task=\"" + xulyChung.taoUrlCoTruyenThamSo("/DoUong/capNhatTrangThai", sp.maSanPham.ToString() + "&1") + "\" class=\"guiRequest col-orange\"><i class=\"material-icons\">refresh</i>Bán lại</a></li>"; break; } htmlTable += " <li><a maXoa=\"" + sp.maSanPham.ToString() + "\" href=\"#\" class=\"xoa col-red\"><i class=\"material-icons\">delete</i>Xoá bỏ</a></li>"; htmlTable += " </ul>"; htmlTable += " </div>"; return(htmlTable); }
/// <summary> /// Hàm thêm mới dữ liệu vào bảng ctPhieuXuatKho khi tiếp nhận pha chế 1 sản phẩm /// </summary> /// <param name="ct"></param> /// <param name="db"></param> private void insertNewCtPhieuXuat(ctHoaDonTam ct, qlCaPheEntities db) { try { //------Nhận mã phiếu xuất vửa thêm khi vào trang. int maPhieuXuat = this.layThamSoTrongSession(1); //---------DUYỆT QUA NGUYÊN LIỆU LÀM NÊN SẢN PHẨM ĐỂ THÊM VÀO PHIẾU XUẤT congThucPhaChe congThucSanPham = ct.sanPham.congThucPhaChes.SingleOrDefault(c => c.trangThai == true); if (congThucSanPham != null) { //----------Lặp qua từng nguyên liệu trong công thức pha chế sản phẩm foreach (ctCongThuc ctCongThuc in congThucSanPham.ctCongThucs.Where(c => c.maNguyenLieu > 0).ToList()) { //---------Lấy thông tin chi tiết để xem nguyên đang duyệt có trong phiếu chưa ctPhieuXuatKho ctXuat = db.ctPhieuXuatKhoes.SingleOrDefault(c => c.maPhieu == maPhieuXuat && c.maNguyenLieu == ctCongThuc.maNguyenLieu); if (ctXuat == null) //--------Chưa có nguyên liệu này trong phiếu => tạo mới { ctXuat = new ctPhieuXuatKho(); ctXuat.maPhieu = maPhieuXuat; ctXuat.maNguyenLieu = (int)ctCongThuc.maNguyenLieu; ctXuat.soLuongXuat = ctCongThuc.soLuongNguyenLieu; ctXuat.donGiaXuat = new bTonKho().layDonGiaNguyenLieuTonKho(ctXuat.maNguyenLieu); ctXuat.ghiChu = "XUẤT NGUYÊN LIỆU KHI PHA CHẾ"; db.ctPhieuXuatKhoes.Add(ctXuat); db.SaveChanges(); } else //-------Cập nhật số lượng nguyên liệu { this.capNhatSoLuongNguyenLieuTrongChiTiet(db, ctXuat, (double)ctCongThuc.soLuongNguyenLieu); } } } } catch (Exception ex) { xulyFile.ghiLoi("Class: PhaCheController - Function: insertCtPhieuXuatKho", ex.Message); } }
/// <summary> /// Hàm tạo giao diện chỉnh sửa công thức /// </summary> /// <param name="maCongThuc"></param> /// <returns></returns> public ActionResult ct_ChinhSuaCongThuc() { this.resetData(); try { string param = xulyChung.nhanThamSoTrongSession(); if (param.Length > 0) { int maCongThuc = xulyDuLieu.doiChuoiSangInteger(param); qlCaPheEntities db = new qlCaPheEntities(); congThucPhaChe ctSua = db.congThucPhaChes.SingleOrDefault(c => c.maCongThuc == maCongThuc); if (ctSua != null) { this.doDuLieuCongThucLenView(ctSua, db); //------Gán dữ liệu trong bảng chi tiết vào session cartCongThuc cart = (cartCongThuc)Session["congThuc"]; foreach (ctCongThuc ct in db.ctCongThucs.ToList().Where(c => c.maCongThuc == ctSua.maCongThuc)) { cart.addCart(ct); Session["congThuc"] = cart; } xulyChung.ghiNhatKyDtb(1, "Chỉnh sửa công thức pha chế của \" " + xulyDuLieu.traVeKyTuGoc(ctSua.sanPham.tenSanPham) + " \""); } } else { throw new Exception("không nhận được tham số"); } } catch (Exception ex) { xulyFile.ghiLoi("Class CongThucController - Function: ct_ChinhSuaCongThuc_Get", ex.Message); return(RedirectToAction("PageNotFound", "Home")); } return(View()); }