const PromotionDetail = (props) => { const { promo, setBaskets,mainItemCode, config,scrollToFirstPage, member } = props; const [selectedItem, setSelectedItem] = useState([]);// list item_code const [productsRef, setProuductsRef] = useState([]) const [loading, setLoading] = useState(false) let captionApply = config?.lang=='vi'?"Áp dụng khuyến mãi":"Apply promotion" let disableApply = false if (promo?.apply_for_branch!=0){ if (config?.branch_no!=promo?.apply_for_branch){ disableApply=true } captionApply = config?.lang=='vi'?"Áp dụng khuyến mãi (Chỉ dành cho online)":"Apply promotion (Only for online)" }else if(promo?.condition_value=='45'){ if (!member){ disableApply=true } captionApply = config?.lang=='vi'?"Áp dụng khuyến mãi (Chỉ dành cho member)":"Apply promotion (Only for member)" } // Kiểm tra kiểu khuyến mãi const handleItemChange = (itemId) => { setSelectedItem([itemId]) }; const findIdsSelected =(objPromo)=>{ const divPromo = objPromo.target.closest('.div_promo'); // Lấy phần tử cha gần nhất có class 'div_promo' let arr=[] if (divPromo) { // Tìm tất cả các radio button được chọn bên trong divPromo const checkedRadios = divPromo.querySelectorAll('input[type="radio"]:checked'); // Chuyển đổi NodeList thành mảng nếu cần const checkedRadioArray = Array.from(checkedRadios); // Xử lý các radio button đã chọn checkedRadioArray.forEach(radio => { if ( arr.includes (radio?.getAttribute('data_item_code')) ==false){ arr.push(radio?.getAttribute('data_item_code')) } //console.log(radio.getAttribute('data_id')); // Ví dụ: in ra data_id của radio button đã chọn }); } return arr; } const fetchProductReference = async (items) => { try { if (config==null){ return } setLoading(true) const url =`/api/get-mdc-product-reference` const dataRequest = { item_codes: items } const resultObj = await commonApi.APIPOSTByURL(url, dataRequest, config) if (resultObj.status == 200){ setProuductsRef(resultObj.data); } } catch (e) { console.log("ERROR get-product-info" ) }finally{ setLoading(false) } }; if (promo.type === "buy_a_group_of_items_get_a_group_discounted") { useEffect(()=>{ const itemIds = discountGroup?.items?.map(item => item.id) || []; if (itemIds?.length >0){ fetchProductReference(itemIds) } },[]) const mainGroup = promo.conditions.rules.find(group => group?.items.some(item => item.id === mainItemCode)); // chứa sản phẩm đang được chọn const discountGroup = promo.conditions.rules.find(rule => rule.group != mainGroup?.group); if (discountGroup?.items?.length > 0) { const newItemId = discountGroup?.items[0].id; if (!selectedItem.includes(newItemId)) { setSelectedItem(prev => [...prev, newItemId]); } } const applyPromotion = (objPromo) => { const itemsToAdd = []; // Thêm sản phẩm nhóm chính vào giỏ hàng if (mainGroup) { const mainItem = mainGroup?.items?.find(obj =>obj.id==mainItemCode); itemsToAdd.push({ item_code: mainItem.id, qty: mainGroup.quantity, normal_price: mainItem.normal_price, promotion_price: mainItem.promotion_price, }); } const selectedItems = findIdsSelected(objPromo) // Thêm sản phẩm nhóm khuyến mãi vào giỏ hàng if (discountGroup) { discountGroup?.items?.filter(obj=>selectedItems.includes(obj.id)).forEach(item => { itemsToAdd.push({ item_code: item.id, qty: discountGroup.quantity, normal_price: item.normal_price, promotion_price: item.promotion_price, }); }); } // Cập nhật giỏ hàng setBaskets(prevBaskets => { const currentBaskets = prevBaskets || { items: [] }; const items = [...currentBaskets.items]; itemsToAdd.forEach(newItem => { const existingItemIndex = items?.findIndex(item => item.item_code === newItem.item_code); if (existingItemIndex !== -1) { // Nếu tồn tại, cập nhật số lượng items[existingItemIndex].qty = Math.max(items[existingItemIndex].qty, newItem.qty); } else { // Nếu không tồn tại, thêm mới items.push(newItem); } }); return { ...currentBaskets, items: items }; }); if (scrollToFirstPage){ scrollToFirstPage() } }; return (

{promo?.promotion_scheme_custom?.map(scheme => scheme.promotion_scheme_vi).join(', ')}

{config?.lang=='vi'?"Chọn sản phẩm khuyến mãi:":"Select promotional products:"}
{discountGroup?.items?.map((item, index) => (
))}
); }else if (promo?.type === 'fixed_price_for_group_of_items') { // là combo nên không có nhóm chính, đạt đủ combo mới tính khuyến mãi const mainGroup = promo.conditions.rules.find(group => group.items?.some(item => item.id === mainItemCode)); // chứa sản phẩm đang được chọn const mainGroupNo = mainGroup?.group const anotherGroups = promo?.conditions?.rules?.filter(obj => obj.group != mainGroupNo) useEffect(()=>{ const itemIds = [...new Set(anotherGroups?.flatMap(rule => rule.items?.map(item => item.id)))]; if (itemIds?.length >0){ fetchProductReference(itemIds) } },[]) const applyPromotion = (objPromo) => { const itemsToAdd = []; const mainItem = mainGroup?.items?.find(obj =>obj.id==mainItemCode); itemsToAdd.push({ item_code: mainItemCode, qty: mainGroup.quantity, normal_price: mainItem.normal_price, promotion_price: promo.conditions.value, // Giá cố định cho nhóm }); // Thêm sản phầm của từng nhóm khác vào basket const selectedItems = findIdsSelected(objPromo) if (anotherGroups?.length>0) { for (var i =0; i< anotherGroups?.length; i++){ const {group, items, quantity} = anotherGroups[i] items?.filter(obj=>selectedItems.includes(obj.id)).forEach(item => { itemsToAdd.push({ item_code: item.id, qty: quantity, normal_price: item.normal_price, promotion_price: item.promotion_price, }); }); } } setBaskets(prevBaskets => { const currentBaskets = prevBaskets || { items: [] }; const items = [...currentBaskets.items]; itemsToAdd.forEach(newItem => { const existingItemIndex = items?.findIndex(item => item.item_code === newItem.item_code); if (existingItemIndex !== -1) { // Nếu tồn tại, cập nhật số lượng items[existingItemIndex].qty = Math.max(items[existingItemIndex].qty, newItem.qty); } else { // Nếu không tồn tại, thêm mới items.push(newItem); } }); return { ...currentBaskets, items: items }; }); if (scrollToFirstPage){ scrollToFirstPage() } }; return (

{promo?.promotion_scheme_custom?.map(scheme => scheme.promotion_scheme_vi).join(', ')}

{config?.lang=='vi'?"Chọn sản phẩm cho combo khuyến mãi:":"Select promotional combo products:"}
{anotherGroups.filter(obj=>obj.group !=mainGroupNo)?.map(group => (
{"Group: " + group?.group}
{group?.items?.map((item, index)=> ( ))}
))}
); }else if (promo?.type === 'lowest_priced_item_discount') { const rule = promo.conditions.rules; // Lấy nhóm đầu tiên const applyPromotion = (objPromo) => { const itemsToAdd = []; const mainItem = promo.conditions.items?.find(obj => obj.id==mainItemCode); itemsToAdd.push({ item_code: mainItemCode, qty: rule.quantity!=rule.discount_quantity? rule.quantity/rule.discount_quantity: rule.quantity, normal_price: mainItem.normal_price, promotion_price: promo.conditions.value, // Giá cố định cho nhóm }); // Cập nhật giỏ hàng setBaskets(prevBaskets => { // Kiểm tra nếu prevBaskets là null, khởi tạo với giá trị mặc định const currentBaskets = prevBaskets || { items: [] }; const items = [...currentBaskets.items]; const existingItemIndex = items.findIndex(item => item.item_code === mainItem.id); if (existingItemIndex !== -1) { // Nếu tồn tại, cập nhật số lượng items[existingItemIndex].qty = Math.max(items[existingItemIndex].qty, rule.quantity); } else { // Nếu không tồn tại, thêm mới items.push(...itemsToAdd); } return { ...currentBaskets, items: items }; }); if (scrollToFirstPage){ scrollToFirstPage() } }; return (

{promo?.promotion_scheme_custom?.map(scheme => scheme.promotion_scheme_vi).join(', ')}

{config?.lang=='vi'?"Thêm":" Add"} {rule.quantity} {config?.lang=='vi'?" sản phẩm vào giỏ hàng để áp dụng khuyến mãi.":" products to apply promotion"}
); }else if (promo?.type === 'fixed_price_per_item') { const rule = promo.conditions.rules; // Lấy nhóm đầu tiên const applyPromotion = (objPromo) => { const itemsToAdd = []; const mainItem = promo.conditions.items?.find(obj => obj.id==mainItemCode); itemsToAdd.push({ item_code: mainItemCode, qty: rule.quantity, normal_price: mainItem.normal_price, promotion_price: rule.value, // Giá cố định cho sản phẩm }); // Cập nhật giỏ hàng setBaskets(prevBaskets => { // Kiểm tra nếu prevBaskets là null, khởi tạo với giá trị mặc định const currentBaskets = prevBaskets || { items: [] }; const items = [...currentBaskets.items]; const existingItemIndex = items.findIndex(item => item.item_code === mainItem.id); if (existingItemIndex !== -1) { // Nếu tồn tại, cập nhật số lượng items[existingItemIndex].qty = Math.max(items[existingItemIndex].qty, rule.quantity); } else { // Nếu không tồn tại, thêm mới items.push(...itemsToAdd); } return { ...currentBaskets, items: items }; }); if (scrollToFirstPage){ scrollToFirstPage() } }; return (

{promo?.promotion_scheme_custom?.map(scheme => scheme.promotion_scheme_vi).join(', ')}

{config?.lang=='vi'?"Thêm":" Add"} {rule.quantity} {config?.lang=='vi'?" sản phẩm vào giỏ hàng để áp dụng khuyến mãi.":" products to apply promotion"}
); } return ( <> ) };