From 62c7b50120780f52e00ce36ce631f4844ddc86bc Mon Sep 17 00:00:00 2001 From: Jepp9350 <2jepp9350@gmail.com> Date: Fri, 7 Mar 2025 11:16:16 +0100 Subject: [PATCH] Add customer discount display to products Introduced a reusable CustomerProductDiscountDisplay component to show applicable discounts per product. Updated related files to pass necessary props and refactor discount handling for accuracy and consistency. --- src/components/displays/boxes/ProductBox.vue | 190 +++++++------ .../CustomerProductDiscountDisplay.vue | 258 ++++++++++++++++++ .../department/pos/SelectProductsFormPOS.vue | 9 +- .../user/SuperUserSelectedUserObject.vue | 6 +- .../superUserDashboard/user/UserPricing.vue | 6 +- 5 files changed, 368 insertions(+), 101 deletions(-) create mode 100644 src/components/displays/department/pos/displays/CustomerProductDiscountDisplay.vue diff --git a/src/components/displays/boxes/ProductBox.vue b/src/components/displays/boxes/ProductBox.vue index 2f9f74da..95850890 100644 --- a/src/components/displays/boxes/ProductBox.vue +++ b/src/components/displays/boxes/ProductBox.vue @@ -3,6 +3,8 @@ import { ref, defineProps, defineEmits } from 'vue'; import { Colors } from "@/ThemeConfig.vue"; import { showPopper, popperBoxProductAddonHtml, removePopperIfOpen } from "@/components/displays/PopperDefault.vue"; import Swal from "sweetalert2"; +import CustomerProductDiscountDisplay + from "@/components/displays/department/pos/displays/CustomerProductDiscountDisplay.vue"; const expandIcon = ref(null); @@ -10,6 +12,7 @@ const emit = defineEmits(['add-to-cart']); const props = defineProps({ id: Number, + product: Object, name: String, description: String, price: Number, @@ -22,7 +25,8 @@ const props = defineProps({ addProductAddon: Function, subtractProductAddon: Function, unselect: Function, - setProductAddonNote: Function + setProductAddonNote: Function, + customerDiscounts: Array, }); const isAddonSelected = (productId, addonId) => { @@ -125,109 +129,119 @@ const doesAddonHaveNoteRequirement = (addon) => { return addon.product.requires_note; }; - diff --git a/src/components/displays/department/pos/displays/CustomerProductDiscountDisplay.vue b/src/components/displays/department/pos/displays/CustomerProductDiscountDisplay.vue new file mode 100644 index 00000000..2d50c840 --- /dev/null +++ b/src/components/displays/department/pos/displays/CustomerProductDiscountDisplay.vue @@ -0,0 +1,258 @@ + + + + + \ No newline at end of file diff --git a/src/components/forms/department/pos/SelectProductsFormPOS.vue b/src/components/forms/department/pos/SelectProductsFormPOS.vue index 6322033a..67f541fa 100644 --- a/src/components/forms/department/pos/SelectProductsFormPOS.vue +++ b/src/components/forms/department/pos/SelectProductsFormPOS.vue @@ -461,13 +461,6 @@ onMounted(() => { font-size: 0.8rem; "> {{ category.name }} - {{ - user_discounts !== undefined - ?getUserGlobalDiscount() !== 0 - ? `( -${getUserGlobalDiscount() }% )` - : '' - : '' - }} @@ -586,6 +579,7 @@ onMounted(() => { :class="{ 'is-selected': selectedProduct === product.id }" > { @addToCart="addProductWithAddonsToOrder(product.id)" :unselect="unselectProduct" :setProductAddonNote="setProductAddonNote" + :customer-discounts="user_discounts" /> diff --git a/src/views/dashboards/superUserDashboard/user/SuperUserSelectedUserObject.vue b/src/views/dashboards/superUserDashboard/user/SuperUserSelectedUserObject.vue index 1776aa15..d22f1bd6 100644 --- a/src/views/dashboards/superUserDashboard/user/SuperUserSelectedUserObject.vue +++ b/src/views/dashboards/superUserDashboard/user/SuperUserSelectedUserObject.vue @@ -128,7 +128,7 @@ export const getUserCategoryDiscount = (category) => { try { categoryDiscount = parseInt(user.discounts.value.find( (discount) => - parseInt(discount.product_or_category_id) === category && parseInt(discount.is_category) === 1 + parseInt(discount.product_or_category_id) === category && discount.is_category ).percentage) || null; } catch (e) {} return categoryDiscount ? categoryDiscount : 0; @@ -140,7 +140,7 @@ export const getUserGlobalDiscount = () => { try { globalDiscount = parseInt(user.discounts.value.find( (discount) => - discount.id === '999999' + discount.id === 999999 ).percentage) || null; } catch (e) {} return globalDiscount ? globalDiscount : 0; @@ -152,7 +152,7 @@ export const getUserProductOnlyDiscount = (product) => { // Find the discount for the product let discount = null; try { - discount = user.discounts.value.find(discount => discount.product_or_category_id == productId && discount.is_category == 0) || null; + discount = user.discounts.value.find(discount => discount.product_or_category_id == productId && !discount.is_category) || null; } catch (e) {} // If the discount is not found, return 0 return discount ? discount.percentage : 0; diff --git a/src/views/dashboards/superUserDashboard/user/UserPricing.vue b/src/views/dashboards/superUserDashboard/user/UserPricing.vue index 7969a3d5..f28b556a 100644 --- a/src/views/dashboards/superUserDashboard/user/UserPricing.vue +++ b/src/views/dashboards/superUserDashboard/user/UserPricing.vue @@ -90,20 +90,20 @@ const editDiscount = (product, isCategory) => { {{ getUserProductOnlyDiscount(product) }} % - {{ getUserCategoryDiscount(getProductCategory(product)) }} % {{ isProductAllowedToApplyCategoryDiscounts(product) ? ' ' : ' - Disabled for item. ' }}