Files
mmcm/src/stores/mmcm.js
Jonathan Chevalier bb0f6cb030 WIP MMCM
2022-11-24 18:11:47 +01:00

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
}
},
})