163 lines
5.1 KiB
JavaScript
163 lines
5.1 KiB
JavaScript
import {defineStore} from 'pinia'
|
|
import {add, format, formatDistance} from "date-fns";
|
|
import {fr} from 'date-fns/locale';
|
|
|
|
const today = new Date();
|
|
|
|
const tomorrow =
|
|
add(new Date(), {
|
|
days: 1
|
|
})
|
|
|
|
const afterTomorrow =
|
|
add(new Date(), {
|
|
days: 2
|
|
})
|
|
|
|
let date = {collectExpress: null, deliveryExpress: null, collectFacteur: null, deliveryFacteur: null}
|
|
|
|
const currentDay = format(today, 'e')
|
|
//const isWeekEnd = (currentDay === '7' || currentDay === '8')
|
|
|
|
|
|
if (format(today, 'HH') > 16) {
|
|
date.collectExpress = date.deliveryExpress = tomorrow
|
|
} else {
|
|
date.collectExpress = date.deliveryExpress = today
|
|
}
|
|
|
|
date.collectFacteur = tomorrow
|
|
date.deliveryFacteur = afterTomorrow
|
|
|
|
if (currentDay === '5') // jeudi
|
|
{
|
|
date.deliveryFacteur = add(today, {
|
|
days: 4
|
|
})
|
|
} else if (currentDay === '6') // vendredi
|
|
{
|
|
date.collectFacteur = add(today, {
|
|
days: 3
|
|
})
|
|
date.deliveryFacteur = add(today, {
|
|
days: 4
|
|
})
|
|
|
|
if (format(today, 'HH') > 17) {
|
|
date.collectExpress = date.deliveryExpress = add(today, {
|
|
days: 3
|
|
})
|
|
}
|
|
|
|
} else if (currentDay === '7') // samedi
|
|
{
|
|
date.collectFacteur = add(today, {
|
|
days: 2
|
|
})
|
|
date.deliveryFacteur = add(today, {
|
|
days: 3
|
|
})
|
|
|
|
date.collectExpress = date.deliveryExpress = add(today, {
|
|
days: 2
|
|
})
|
|
} else if (currentDay === '8') // dimanche ou 17
|
|
{
|
|
date.collectExpress = date.deliveryExpress = tomorrow
|
|
}
|
|
|
|
|
|
const timestampConverter = (digit13) => digit13 / 1000
|
|
|
|
export const useMMCMStore = defineStore('counter', {
|
|
state: () => ({
|
|
idSession: '',
|
|
street: null,
|
|
zipCode: null,
|
|
city: null,
|
|
productList: [],
|
|
withPrescription: null,
|
|
idProduct: null,
|
|
dateDelivery: null, // 13 digit timestamp millisecond
|
|
dateCollect: null,
|
|
methodDelivery: 'Main propre',
|
|
methodCollect: 'Main propre',
|
|
timeSlot : '09h30-11h00',
|
|
}),
|
|
getters: {
|
|
fullAddress: (state) => (state.street !== null) ? state.street + ' ' + state.zipCode + ' ' + state.city : null,
|
|
deliveryMethod: (state) => state.productList.filter(p => p.id === state.idProduct)[0].name,
|
|
deliveryMethodCode: (state) => state.productList.filter(p => p.id === state.idProduct)[0].ref,
|
|
dateDeliveryString: (state) => new Date(state.dateDelivery).toLocaleDateString("fr-FR"),
|
|
dateCollectString: (state) => new Date(state.dateCollect).toLocaleDateString("fr-FR"),
|
|
displayTimeSlot: (state) => (state.productList.filter(p => p.id === state.idProduct)[0].ref === 'MMCM_EXPRESS') ? 'entre ' +state.timeSlot : 'entre 09h00-17h00',
|
|
minDateForDelivery: (state) => (state.productList.filter(p => p.id === state.idProduct)[0].ref === 'MMCM_EXPRESS') ? date.deliveryExpress : date.deliveryFacteur,
|
|
minDateForCollect: (state) => (state.productList.filter(p => p.id === state.idProduct)[0].ref === 'MMCM_EXPRESS') ? date.collectExpress : date.collectFacteur,
|
|
needPrescriptionDateCollect: (state) => !!(state.productList.filter(p => p.id === state.idProduct)[0].ref === 'MMCM_FACTEUR' && state.withPrescription),
|
|
dateDeliveryTimestampInSecond: (state) => timestampConverter(state.dateDelivery),
|
|
dateCollectTimestampInSecond: (state) => timestampConverter(state.dateCollect),
|
|
msgDelivery: (state) => {
|
|
|
|
//console.log(formatDistance(date.deliveryExpress, today))
|
|
|
|
let arr = []
|
|
|
|
if(state.productList.length === 2) {
|
|
|
|
if (date.deliveryExpress === today) {
|
|
arr.push('Dès aujourd\'hui en moins de 2h')
|
|
} else {
|
|
arr.push('A partir de ' + format(date.deliveryExpress, 'EEEE', {locale: fr}) + ' en moins de 2h')
|
|
}
|
|
}
|
|
|
|
const useFacteurDate = (state.withPrescription) ? date.deliveryFacteur : date.collectFacteur;
|
|
|
|
if (useFacteurDate === tomorrow) {
|
|
arr.push('A partir de demain entre 9h et 17h')
|
|
} else {
|
|
arr.push('A partir de ' + format(useFacteurDate, 'EEEE', {locale: fr}) + ' entre 9h et 17h')
|
|
}
|
|
return arr
|
|
},
|
|
stepFacteur: (state) => {
|
|
|
|
let step = {dayOne: false, dayTwo: false}
|
|
|
|
if (state.withPrescription) {
|
|
step.dayOne = format(date.collectFacteur, 'dd/MM/yyyy', {locale: fr})
|
|
step.dayTwo = format(date.deliveryFacteur, 'dd/MM/yyyy', {locale: fr})
|
|
}
|
|
return step
|
|
|
|
}
|
|
|
|
},
|
|
actions: {
|
|
setIdSession(idSession) {
|
|
this.idSession = idSession
|
|
},
|
|
setStreet(street) {
|
|
this.street = street
|
|
},
|
|
setZipCode(zipCode) {
|
|
this.zipCode = zipCode
|
|
},
|
|
setCity(city) {
|
|
this.city = city
|
|
},
|
|
setProductList(array) {
|
|
this.productList = array
|
|
},
|
|
setPrescription(bool) {
|
|
this.withPrescription = bool
|
|
},
|
|
setIdProduct(id) {
|
|
this.idProduct = id
|
|
},
|
|
setTimeSlot(timeSlot) {
|
|
this.timeSlot = timeSlot
|
|
}
|
|
},
|
|
})
|