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) => (
))}
{captionApply}}
onClick={(e)=>applyPromotion(e)}
variant='success'
type='button'
style={{}} disabled={disableApply}
/>
);
}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)=> (
))}
))}
{captionApply}}
onClick={(e)=>applyPromotion(e)}
variant='success'
type='button'
style={{}} disabled={disableApply}
/>
);
}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"}
{captionApply}}
onClick={(e)=>applyPromotion(e)}
variant='success'
type='button'
style={{}} disabled={disableApply}
/>
);
}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"}
{captionApply}}
onClick={(e)=>applyPromotion(e)}
variant='success'
type='button'
style={{}} disabled={disableApply}
/>
);
}
return (
<>
>
)
};