Uname: Linux webm012.cluster130.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
Software: Apache
PHP version: 8.0.30 [ PHP INFO ] PHP os: Linux
Server Ip: 145.239.37.162
Your Ip: 216.73.216.190
User: dreampi (1009562) | Group: users (100)
Safe Mode: OFF
Disable Function:
_dyuweyrj4,_dyuweyrj4r,dl

name : paymentMixin.js
import taxesMixin from '../../common/mixins/taxesMixin'

export default {
  mixins: [taxesMixin],

  data: () => ({}),

  methods: {
    getPaymentType(payment) {
      if (!payment.gateway || payment.gateway === 'onSite') {
        return 'onsite'
      }
      if (payment.status === 'partiallyPaid') {
        return 'deposit'
      }
      return 'online'
    },

    longNamePayments(gateway) {
      return ['mollie', 'razorpay', 'square'].includes(gateway)
    },

    getPaymentData(payment, appointment, event, pack, recurring = []) {
      let selectedPaymentModalData = {}

      selectedPaymentModalData.paymentId = payment.id

      if (appointment) {
        selectedPaymentModalData.bookableType = 'appointment'

        let provider = this.getProviderById(appointment.providerId)
        provider.fullName = provider.firstName + ' ' + provider.lastName

        selectedPaymentModalData.appointment = [{
          bookable: this.getServiceById(appointment.serviceId),
          bookingStart: appointment.bookingStart,
          providers: [provider]
        }]

        appointment.bookings.forEach(function (bookItem) {
          bookItem.payments.forEach(function (payItem) {
            if (payItem.id === payment.id) {
              selectedPaymentModalData.appointment[0].booking = bookItem
            }
          })
        })

        recurring.forEach(app => {
          let provider = this.getProviderById(app.providerId)
          provider.fullName = provider.firstName + ' ' + provider.lastName
          selectedPaymentModalData.appointment.push({
            bookable: this.getServiceById(app.serviceId),
            bookingStart: app.bookingStart,
            providers: [provider],
            booking: app.bookings[0]
          })
        })
      }

      if (event) {
        selectedPaymentModalData.bookableType = 'event'

        selectedPaymentModalData.event = [{
          bookable: event,
          bookingStart: event.periods[0].periodStart,
          providers: event.providers
        }]

        event.bookings.forEach(function (bookItem) {
          bookItem.payments.forEach(function (payItem) {
            if (payItem.id === payment.id) {
              selectedPaymentModalData.event[0].booking = bookItem
            }
          })
        })
      }

      if (pack) {
        selectedPaymentModalData.bookableType = 'package'

        selectedPaymentModalData.package = [{
          bookable: pack.package,
          bookingStart: null,
          providers: [],
          booking: pack.booking
        }]
      }

      selectedPaymentModalData.customer = {
        email: payment.customerEmail,
        firstName: payment.customerFirstName,
        lastName: payment.customerLastName,
        id: payment.customerId
      }

      return selectedPaymentModalData
    },

    getPaymentStatusNiceName(status) {
      switch (status) {
        case ('paid'):
          return this.$root.labels.paid

        case ('pending'):
          return this.$root.labels.pending

        case ('partiallyPaid'):
          return this.$root.labels.partially_paid

        case ('refunded'):
          return this.$root.labels.refunded
      }
    },

    getPaymentClassName(payment) {
      let method = payment.gateway

      if (payment.gatewayTitle === 'oliver') {
        method = 'oliver'
      }

      return 'am-appointment-payment am-appointment-payment-' + method
    },

    getPaymentIconName(payment) {
      return (payment.gateway === 'onSite' || payment.gateway === 'stripe') && payment.gatewayTitle === 'oliver' ? 'oliver.png' : payment.gateway + '.svg'
    },

    getPaymentGatewayNiceName(payment) {
      if (payment.gateway === 'stripe' && payment.gatewayTitle === 'oliver') {
        return this.$root.labels.oliver_on_line
      }

      if (payment.gateway === 'onSite' && payment.gatewayTitle === 'oliver') {
        return this.$root.labels.oliver_on_site
      }

      if (payment.gateway === 'onSite') {
        return this.$root.labels.on_site
      }

      if (payment.gateway === 'wc') {
        return payment.gatewayTitle
      }

      if (payment.gateway) {
        return payment.gateway.charAt(0).toUpperCase() + payment.gateway.slice(1)
      }
    },

    getPaymentIconWidth(paymentGateway) {
      switch (paymentGateway) {
        case 'razorpay':
          return '76px'
        case 'square':
          return '70px'
        case 'mollie':
          return '38px'
        default:
          return '16px'
      }
    },

    getPaymentAmountData (bookings, type) {
      let result = {
        bookablePriceTotal: 0,
        extrasPriceTotal: 0,
        tax: 0,
        wcTax: 0,
        discountTotal: 0,
        paidDeposit: 0,
        paidRemaining: 0,
        paid: 0,
        refunded: 0,
        subtotal: 0,
        total: 0,
        due: 0
      }

      let $this = this

      bookings.forEach(function (app) {
        let bookItem = app.booking

        if (bookItem.tax && !Array.isArray(bookItem.tax)) {
          bookItem.tax = JSON.parse(bookItem.tax)
        }

        switch (type) {
          case ('appointment'):
            let amountData = $this.getAppointmentPriceAmount(
              {
                price: bookItem.price,
                aggregatedPrice: bookItem.aggregatedPrice,
                tax: bookItem.tax,
                id: null
              },
              bookItem.extras,
              bookItem.persons,
              bookItem.coupon,
              false
            )

            result.bookablePriceTotal += amountData.totalBookable
            result.extrasPriceTotal += amountData.total - amountData.totalBookable
            result.tax += amountData.tax
            result.discountTotal += amountData.discount

            break

          case ('event'):
            let eventAmountData = $this.getEventBookingPriceAmount(bookItem)

            result.bookablePriceTotal += eventAmountData.total
            result.extrasPriceTotal += 0
            result.tax += eventAmountData.tax
            result.discountTotal += eventAmountData.discount

            break
          case ('package'):
            let coupon = null

            bookItem.payments.forEach(function (payItem) {
              coupon = payItem.coupon ? payItem.coupon : coupon
            })

            let packagePrice = bookItem.price * (bookItem.aggregatedPrice ? bookItem.persons : 1)

            let packageAmountData = $this.getAmountData(
              bookItem.tax && bookItem.tax.length ? bookItem.tax[0] : null,
              packagePrice,
              coupon
            )

            result.bookablePriceTotal += packageAmountData.total
            result.extrasPriceTotal += 0
            result.tax += packageAmountData.tax
            result.discountTotal += packageAmountData.discount

            break
        }

        let paidDeposit = 0
        let paidRemaining = 0
        bookItem.payments.forEach(function (payItem) {
          result.discountTotal += (payItem.wcOrderId ? payItem.wcItemCouponValue : 0)
          if (payItem.status === 'paid') {
            paidRemaining += payItem.amount
          } else if (payItem.status === 'partiallyPaid') {
            paidDeposit += payItem.amount
          }

          if (payItem.wcOrderId && payItem.wcItemTaxValue) {
            result.wcTax += payItem.wcItemTaxValue
          }
        })
        result.paidDeposit += paidDeposit
        result.paidRemaining += paidRemaining

        result.refunded += bookItem.payments.filter(payItem => payItem.status === 'refunded').reduce((partialSum, a) => partialSum + a.amount, 0)
      })

      result.subTotal = result.bookablePriceTotal + result.extrasPriceTotal
      result.total = result.subTotal + result.tax + result.wcTax
      result.total -= result.discountTotal
      result.paid = result.paidDeposit + result.paidRemaining
      result.total = result.total >= 0 ? result.total : 0
      result.due = ((result.total - result.paid) > 0 ? (result.total - result.paid) : 0)

      return result
    }

  }
}
© 2026 GrazzMean-Shell