From cc3bc45a2c12c68dfbec3a98bd9f0eb6243e5e58 Mon Sep 17 00:00:00 2001 From: taro Date: Sat, 22 Mar 2025 12:01:11 -0300 Subject: [PATCH 01/15] . --- src/utils/onUserId.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/utils/onUserId.js diff --git a/src/utils/onUserId.js b/src/utils/onUserId.js new file mode 100644 index 00000000..28c1fcae --- /dev/null +++ b/src/utils/onUserId.js @@ -0,0 +1,19 @@ +import { watch } from 'vue'; + +import { useUserStore } from 'stores/user'; + +const userStore = useUserStore(); + +export const onUserId = (cb) => watch( + () => userStore?.user?.id, + async userId => { + if (userId) { + try { + await cb(userId); + } catch (error) { + console.error(error); + } + } + }, + { immediate: true } +); From f00bfb1311cc63029ba8667d47922f57cc6a0344 Mon Sep 17 00:00:00 2001 From: taro Date: Thu, 27 Mar 2025 19:39:55 -0300 Subject: [PATCH 02/15] refactor: use salix for myBasketDefaults --- src/pages/Ecomerce/CheckoutView.vue | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue index ad4eaf9e..2ffb86cd 100644 --- a/src/pages/Ecomerce/CheckoutView.vue +++ b/src/pages/Ecomerce/CheckoutView.vue @@ -11,6 +11,7 @@ import { useAppStore } from 'stores/app'; import { storeToRefs } from 'pinia'; const jApi = inject('jApi'); +const api = inject('api'); const { t } = useI18n(); const route = useRoute(); const router = useRouter(); @@ -295,10 +296,8 @@ const submit = async () => { }; const getDefaultValues = async () => { - return await jApi.query( - `SELECT deliveryMethod, agencyModeFk, addressFk, defaultAgencyFk - FROM myBasketDefaults` - ); + const { data: myBasketDefaults } = await api.get('Clients/myBasketDefaults'); + return myBasketDefaults; }; onMounted(async () => { From 809527558ed5428bc18b84e875109cbc3814ff86 Mon Sep 17 00:00:00 2001 From: taro Date: Fri, 28 Mar 2025 02:09:15 -0300 Subject: [PATCH 03/15] refactor: use Salix for myAddresses --- src/pages/Ecomerce/CheckoutView.vue | 53 +++++++++++++++++++++++------ 1 file changed, 43 insertions(+), 10 deletions(-) diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue index 2ffb86cd..a8471b35 100644 --- a/src/pages/Ecomerce/CheckoutView.vue +++ b/src/pages/Ecomerce/CheckoutView.vue @@ -7,6 +7,7 @@ import VnSelect from 'src/components/common/VnSelect.vue'; import { formatDateTitle, formatDate } from 'src/lib/filters.js'; import useNotify from 'src/composables/useNotify.js'; +import { onUserId } from 'src/utils/onUserId'; import { useAppStore } from 'stores/app'; import { storeToRefs } from 'pinia'; @@ -149,15 +150,47 @@ const validateStep = (formField, errorMessage) => { return validation; }; -const getAddresses = async () => { +const getAddresses = async (clientFk) => { try { - addresses.value = await jApi.query( - `SELECT a.id, a.nickname, p.name province, a.city, a.street, a.isActive, c.name - FROM myAddress a - LEFT JOIN vn.province p ON p.id = a.provinceFk - JOIN vn.country c ON c.id = p.countryFk - WHERE a.isActive` - ); + const filter = { + where: { + clientFk, + isActive: true, + }, + include: [ + { + relation: 'province', + scope: { + fields: ['name', 'countryFk'], + include: [ + 'country', + { + relation: 'country', + scope: { + fields: ['name'], + }, + }, + ], + }, + }, + ], + fields: [ + 'id', + 'nickname', + 'city', + 'street', + 'isActive', + 'provinceFk', + ] + }; + + const { data: myAddresses } = await api.get('Addresses', { + params: { + filter: JSON.stringify(filter) + } + }); + + addresses.value = myAddresses; } catch (error) { console.error('Error getting addresses:', error); } @@ -325,10 +358,10 @@ onMounted(async () => { const [_defaultValues] = await getDefaultValues(); if (_defaultValues) defaultValues.value = _defaultValues; } - - getAddresses(); }); +onUserId(getAddresses); + watch( () => orderForm.value.method, () => { From e7f4ece0a74897febd4b8cd70194ec40a120d3b2 Mon Sep 17 00:00:00 2001 From: taro Date: Mon, 31 Mar 2025 03:35:52 -0300 Subject: [PATCH 04/15] refactor(CheckoutView): use salix for getAgencies --- src/pages/Ecomerce/CheckoutView.vue | 35 ++++++++++++++++------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue index a8471b35..ee38062f 100644 --- a/src/pages/Ecomerce/CheckoutView.vue +++ b/src/pages/Ecomerce/CheckoutView.vue @@ -198,22 +198,25 @@ const getAddresses = async (clientFk) => { const getAgencies = async () => { try { - const { results } = await jApi.execQuery( - `CALL vn.zone_getAgency(#address, #date); - SELECT DISTINCT a.agencyModeFk id, a.description - FROM tmp.zoneGetAgency a - JOIN vn.deliveryMethod d - ON d.id = a.deliveryMethodFk - WHERE d.code IN ('AGENCY', 'DELIVERY') - AND a.isVisible - ORDER BY a.description; - DROP TEMPORARY TABLE tmp.zoneGetAgency`, - { - address: orderForm.value.address, - date: new Date(orderForm.value.date) - } - ); - agencies.value = results[1].data; + const agenciesInZone = await api.get('Agencies/landsThatDay', { + params: { + addressFk: orderForm.value.address, + landed: new Date(orderForm.value.date), + } + }); + const deliveryMethods = await api.get('DeliveryMethods'); + + const results = agenciesInZone.data + .filter(agency => agency.isVisible) + .map(agency => ({ + id: agency.agencyModeFk, + description: agency.description, + deliveryMethod: deliveryMethods.data.find(dm => dm.id === agency.deliveryMethodFk).code, + })) + .filter(agency => agency.deliveryMethod === 'AGENCY' || agency.deliveryMethod === 'DELIVERY') + .toSorted((a, b) => a.description.localeCompare(b.description)); + + agencies.value = results; if (agencies.value && agencies.value.length && defaultValues.value) { const found = agencies.value.find( From 410bf86913686c2ee31bc625b606979acf6e3e93 Mon Sep 17 00:00:00 2001 From: taro Date: Wed, 2 Apr 2025 11:31:21 -0300 Subject: [PATCH 05/15] refactor(CheckoutView): use salix for checkOrder --- src/i18n/ca-ES/index.js | 3 ++- src/i18n/en-US/index.js | 3 ++- src/i18n/es-ES/index.js | 3 ++- src/i18n/fr-FR/index.js | 3 ++- src/i18n/pt-PT/index.js | 3 ++- src/stores/app.js | 57 ++++++++++++++++++++++------------------- 6 files changed, 40 insertions(+), 32 deletions(-) diff --git a/src/i18n/ca-ES/index.js b/src/i18n/ca-ES/index.js index 48d214e0..02f060ea 100644 --- a/src/i18n/ca-ES/index.js +++ b/src/i18n/ca-ES/index.js @@ -168,6 +168,7 @@ export default { // Errors errors: { statusUnauthorized: 'Accés denegat', - tokenConfig: 'Error al obtenir la configuració del token' + tokenConfig: 'Error al obtenir la configuració del token', + orderNotOwnedByUser: 'The order belongs to another user' } }; diff --git a/src/i18n/en-US/index.js b/src/i18n/en-US/index.js index 80107dd5..fba57ab0 100644 --- a/src/i18n/en-US/index.js +++ b/src/i18n/en-US/index.js @@ -200,6 +200,7 @@ export default { // Errors errors: { statusUnauthorized: 'Access denied', - tokenConfig: 'Error fetching token config' + tokenConfig: 'Error fetching token config', + orderNotOwnedByUser: 'The order belongs to another user' } }; diff --git a/src/i18n/es-ES/index.js b/src/i18n/es-ES/index.js index 15639c2d..67248e94 100644 --- a/src/i18n/es-ES/index.js +++ b/src/i18n/es-ES/index.js @@ -200,6 +200,7 @@ export default { // Errors errors: { statusUnauthorized: 'Acceso denegado', - tokenConfig: 'Error al obtener configuración de token' + tokenConfig: 'Error al obtener configuración de token', + orderNotOwnedByUser: 'The order belongs to another user' } }; diff --git a/src/i18n/fr-FR/index.js b/src/i18n/fr-FR/index.js index 2eea9a38..9881c440 100644 --- a/src/i18n/fr-FR/index.js +++ b/src/i18n/fr-FR/index.js @@ -172,6 +172,7 @@ export default { errors: { statusUnauthorized: 'Accès refusé', tokenConfig: - 'Erreur lors de la récupération de la configuration du jeton' + 'Erreur lors de la récupération de la configuration du jeton', + orderNotOwnedByUser: 'The order belongs to another user' } }; diff --git a/src/i18n/pt-PT/index.js b/src/i18n/pt-PT/index.js index 460335e0..ecbed192 100644 --- a/src/i18n/pt-PT/index.js +++ b/src/i18n/pt-PT/index.js @@ -166,6 +166,7 @@ export default { // Errors errors: { statusUnauthorized: 'Acesso negado', - tokenConfig: 'Erro ao obter configuração do token' + tokenConfig: 'Erro ao obter configuração do token', + orderNotOwnedByUser: 'The order belongs to another user' } }; diff --git a/src/stores/app.js b/src/stores/app.js index d5183dc8..3c0b3009 100644 --- a/src/stores/app.js +++ b/src/stores/app.js @@ -81,14 +81,6 @@ export const useAppStore = defineStore('hedera', { this.basketOrderId = localStorage.getItem(storageOrderName); }, - async checkOrder(orderId) { - const resultSet = await jApi.execQuery( - 'CALL myOrder_checkConfig(#id)', - { id: orderId } - ); - resultSet.fetchValue(); - }, - async check(checkoutContinue) { if (this.basketOrderId) { return await this.checkRedirect(checkoutContinue); @@ -99,26 +91,37 @@ export const useAppStore = defineStore('hedera', { }, async checkRedirect(checkoutContinue) { - try { - await this.checkOrder(this.basketOrderId); - return true; - } catch (err) { - switch (err.code) { - case 'orderConfirmed': - case 'orderNotOwnedByUser': - this.unloadOrder(); - await this.redirect(); - break; - default: - this.router.push({ - name: 'checkout', - params: { id: this.basketOrderId }, - query: { continue: checkoutContinue } - }); - notify(err.message, 'negative'); - } - return false; + const orderId = this.basketOrderId; + // const orderId = 'nope!'; // <--- hard-coded invalid orderId to test failure case + const myOrder_checkConfig = await api.post('applications/myOrder_checkConfig/execute-proc', { + schema: 'hedera', + params: [orderId], + }, { + validateStatus: () => true, + }); + + if (myOrder_checkConfig.status >= 200 && myOrder_checkConfig.status < 300) { + return true; } + + switch (myOrder_checkConfig.data.error?.message) { + case 'orderNotOwnedByUser': + notify(t(`errors.orderNotOwnedByUser`), 'negative'); + case 'orderConfirmed': + case 'orderNotOwnedByUser': + this.unloadOrder(); + await this.redirect(); + break; + default: + this.router.push({ + name: 'checkout', + params: { id: this.basketOrderId }, + query: { continue: checkoutContinue } + }); + notify(myOrder_checkConfig.data.error.message, 'negative'); + } + + return false; }, async redirect() { From f5e17900d774f1daf8a027f72e49b8a67b983311 Mon Sep 17 00:00:00 2001 From: taro Date: Fri, 4 Apr 2025 03:20:33 -0300 Subject: [PATCH 06/15] refactor(CheckoutView): use salix for createOrder --- src/pages/Ecomerce/CheckoutView.vue | 49 +++++++++++++++++++---------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue index ee38062f..8712cb74 100644 --- a/src/pages/Ecomerce/CheckoutView.vue +++ b/src/pages/Ecomerce/CheckoutView.vue @@ -8,6 +8,7 @@ import VnSelect from 'src/components/common/VnSelect.vue'; import { formatDateTitle, formatDate } from 'src/lib/filters.js'; import useNotify from 'src/composables/useNotify.js'; import { onUserId } from 'src/utils/onUserId'; +import { useUserStore } from 'stores/user'; import { useAppStore } from 'stores/app'; import { storeToRefs } from 'pinia'; @@ -18,6 +19,7 @@ const route = useRoute(); const router = useRouter(); const { notify } = useNotify(); const appStore = useAppStore(); +const userStore = useUserStore(); const { localeDates, isMobile } = storeToRefs(appStore); const stepperRef = ref(null); @@ -299,30 +301,43 @@ const onPreviousStep = async stepIndex => { const submit = async () => { loading.value = true; - let query = - 'CALL myOrder_create(@orderId, #date, #method, #agency, #address); SELECT @orderId;'; - if (id) { - orderForm.value.id = id; - query = - 'CALL myOrder_configure(#id, #date, #method, #agency, #address)'; + + const userId = userStore?.user?.id; + + if (!userId) { + throw 'no user id'; } - let resultSet; try { const { date, ...restOfForm } = orderForm.value; const _date = new Date(date); - resultSet = await jApi.execQuery(query, { ...restOfForm, date: _date }); - if (id) { - notify(t('orderUpdated'), 'positive'); - if (route.query.continue === 'catalog') { - router.push({ name: 'catalog' }); - } else { - router.push({ name: 'basket', params: { id } }); - } + + if (!id) { + const response = await api.post( + 'Orders', + { + sourceApp: 'WEB', + landed: new Date(date), + clientFk: userId, + companyFk: 442, // SELECT defaultCompanyFk FROM orderConfig; (wtf) + addressFk: orderForm.value.address, + agencyModeFk: orderForm.value.agency, + configured: new Date(), + }, + ); + const orderId = response.data.id; + appStore.loadIntoBasket(orderId); + router.push({ name: 'catalog' }); } else { - const orderId = resultSet.results[1].data[0]['@orderId']; - appStore.loadIntoBasket(orderId); + orderForm.value.id = id; + let query = 'CALL myOrder_configure(#id, #date, #method, #agency, #address)'; + let resultSet = await jApi.execQuery(query, { ...restOfForm, date: _date }); + notify(t('orderUpdated'), 'positive'); + if (route.query.continue === 'catalog') { router.push({ name: 'catalog' }); + } else { + router.push({ name: 'basket', params: { id } }); + } } } catch (error) { console.error('Error submitting order:', error); From 53d0bb96d8c6acaae48f22baf93242c0214d703f Mon Sep 17 00:00:00 2001 From: taro Date: Mon, 7 Apr 2025 00:11:02 -0300 Subject: [PATCH 07/15] refactor(CheckoutView): remove leftover test code --- src/stores/app.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/stores/app.js b/src/stores/app.js index 3c0b3009..ad0babd8 100644 --- a/src/stores/app.js +++ b/src/stores/app.js @@ -92,7 +92,6 @@ export const useAppStore = defineStore('hedera', { async checkRedirect(checkoutContinue) { const orderId = this.basketOrderId; - // const orderId = 'nope!'; // <--- hard-coded invalid orderId to test failure case const myOrder_checkConfig = await api.post('applications/myOrder_checkConfig/execute-proc', { schema: 'hedera', params: [orderId], From 0fd14873beb3d4980cc44a5003c21a713d1ee673 Mon Sep 17 00:00:00 2001 From: taro Date: Mon, 7 Apr 2025 00:23:28 -0300 Subject: [PATCH 08/15] refactor(CheckoutView): use salix for order update --- src/pages/Ecomerce/CheckoutView.vue | 51 ++++++++++++++++++----------- 1 file changed, 32 insertions(+), 19 deletions(-) diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue index 8712cb74..1fdb2cc4 100644 --- a/src/pages/Ecomerce/CheckoutView.vue +++ b/src/pages/Ecomerce/CheckoutView.vue @@ -299,6 +299,32 @@ const onPreviousStep = async stepIndex => { } }; +const configureOrder = (orderId) => api.post( + 'applications/myOrder_configure/execute-proc', + { + schema: 'hedera', + params: [ + orderId, + new Date(orderForm.value.date), + orderForm.value.method, + orderForm.value.agency, + orderForm.value.address, + ], + }, +); + +const createOrder = (userId) => api.post( + 'Orders', + { + sourceApp: 'WEB', + landed: new Date(orderForm.value.date), + clientFk: userId, + companyFk: 442, // SELECT defaultCompanyFk FROM orderConfig; (wtf) + addressFk: orderForm.value.address, + agencyModeFk: orderForm.value.agency, + }, +); + const submit = async () => { loading.value = true; @@ -309,29 +335,16 @@ const submit = async () => { } try { - const { date, ...restOfForm } = orderForm.value; - const _date = new Date(date); - if (!id) { - const response = await api.post( - 'Orders', - { - sourceApp: 'WEB', - landed: new Date(date), - clientFk: userId, - companyFk: 442, // SELECT defaultCompanyFk FROM orderConfig; (wtf) - addressFk: orderForm.value.address, - agencyModeFk: orderForm.value.agency, - configured: new Date(), - }, - ); - const orderId = response.data.id; + const order = await createOrder(userId); + const orderId = order.data.id; + await configureOrder(orderId); + appStore.loadIntoBasket(orderId); router.push({ name: 'catalog' }); } else { - orderForm.value.id = id; - let query = 'CALL myOrder_configure(#id, #date, #method, #agency, #address)'; - let resultSet = await jApi.execQuery(query, { ...restOfForm, date: _date }); + await configureOrder(id); + notify(t('orderUpdated'), 'positive'); if (route.query.continue === 'catalog') { router.push({ name: 'catalog' }); From c5fbb9205af7911443ab0a38efe39cd3cd7300fc Mon Sep 17 00:00:00 2001 From: taro Date: Mon, 7 Apr 2025 20:42:05 -0300 Subject: [PATCH 09/15] fix(CheckoutView): un-hard-code OrderConfigs in createOrder --- src/pages/Ecomerce/CheckoutView.vue | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue index 1fdb2cc4..3a521f62 100644 --- a/src/pages/Ecomerce/CheckoutView.vue +++ b/src/pages/Ecomerce/CheckoutView.vue @@ -313,17 +313,23 @@ const configureOrder = (orderId) => api.post( }, ); -const createOrder = (userId) => api.post( - 'Orders', - { - sourceApp: 'WEB', - landed: new Date(orderForm.value.date), - clientFk: userId, - companyFk: 442, // SELECT defaultCompanyFk FROM orderConfig; (wtf) - addressFk: orderForm.value.address, - agencyModeFk: orderForm.value.agency, - }, -); +const createOrder = async (userId) => { + const orderConfig = await api.get('OrderConfigs'); + + const companyFk = orderConfig.data[0]?.defaultCompanyFk; + + return api.post( + 'Orders', + { + sourceApp: 'WEB', + landed: new Date(orderForm.value.date), + clientFk: userId, + companyFk, + addressFk: orderForm.value.address, + agencyModeFk: orderForm.value.agency, + }, + ) +}; const submit = async () => { loading.value = true; From 03175e15b0ae1fbfbb2eaf476118ae279ffd8530 Mon Sep 17 00:00:00 2001 From: taro Date: Mon, 7 Apr 2025 20:45:39 -0300 Subject: [PATCH 10/15] refactor(CheckoutView): remove unnecessary check --- src/pages/Ecomerce/CheckoutView.vue | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue index 3a521f62..3d7f3075 100644 --- a/src/pages/Ecomerce/CheckoutView.vue +++ b/src/pages/Ecomerce/CheckoutView.vue @@ -334,11 +334,7 @@ const createOrder = async (userId) => { const submit = async () => { loading.value = true; - const userId = userStore?.user?.id; - - if (!userId) { - throw 'no user id'; - } + const userId = userStore.user.id; try { if (!id) { From 23d97a5f633a93b08b5f029ce1f7c797c578e419 Mon Sep 17 00:00:00 2001 From: taro Date: Tue, 8 Apr 2025 01:44:10 -0300 Subject: [PATCH 11/15] refactor(CheckoutView): use Salix for getOrder --- src/pages/Ecomerce/CheckoutView.vue | 37 ++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue index 3d7f3075..67ce9710 100644 --- a/src/pages/Ecomerce/CheckoutView.vue +++ b/src/pages/Ecomerce/CheckoutView.vue @@ -198,6 +198,31 @@ const getAddresses = async (clientFk) => { } }; +const getOrder = async (orderId) => { + const { data } = await api.get(`Orders/${orderId}`, { + params: { + filter: JSON.stringify({ + include: [ + { + relation: 'deliveryMethod', + scope: { + fields: ['code'], + }, + }, + ], + fields: [ + 'id', + 'delivery_method_id', + 'landed', + 'agencyModeFk', + 'addressFk', + ] + }) + } + }); + return data; +}; + const getAgencies = async () => { try { const agenciesInZone = await api.get('Agencies/landsThatDay', { @@ -373,17 +398,11 @@ onMounted(async () => { if (route.params.id) { notify(t('rememberReconfiguringImpact'), 'warning'); - const [order] = await jApi.query( - `SELECT m.code deliveryMethod, o.sent, o.agencyModeFk, o.addressFk - FROM myOrder o - JOIN vn.deliveryMethod m ON m.id = o.deliveryMethodFk - WHERE o.id = #id`, - { id: route.params.id } - ); + const order = await getOrder(route.params.id); if (order) { - orderForm.value.method = order.deliveryMethod; - orderForm.value.date = formatDate(order.sent, 'YYYY/MM/DD'); + orderForm.value.method = order.deliveryMethod.code; + orderForm.value.date = formatDate(order.landed, 'YYYY/MM/DD'); orderForm.value.agency = order.agencyModeFk; orderForm.value.address = order.addressFk; } From bddfb74bd8babb36ea0e8fec180881689340d4e8 Mon Sep 17 00:00:00 2001 From: taro Date: Wed, 9 Apr 2025 02:47:15 -0300 Subject: [PATCH 12/15] refactor(CheckoutView): use Salix for getWarehouses --- src/pages/Ecomerce/CheckoutView.vue | 35 ++++++++++++++++------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue index 67ce9710..f7023451 100644 --- a/src/pages/Ecomerce/CheckoutView.vue +++ b/src/pages/Ecomerce/CheckoutView.vue @@ -260,22 +260,25 @@ const getAgencies = async () => { const getWarehouses = async () => { try { - const { results } = await jApi.execQuery( - `CALL vn.zone_getAgency(#address, #date); - SELECT DISTINCT a.agencyModeFk id, a.description - FROM tmp.zoneGetAgency a - JOIN vn.deliveryMethod d - ON d.id = a.deliveryMethodFk - WHERE d.code IN ('PICKUP') - AND a.isVisible - ORDER BY a.description; - DROP TEMPORARY TABLE tmp.zoneGetAgency;`, - { - address: orderForm.value.address, - date: new Date(orderForm.value.date) - } - ); - warehouses.value = results[1].data; + const agenciesInZone = await api.get('Agencies/landsThatDay', { + params: { + addressFk: orderForm.value.address, + landed: new Date(orderForm.value.date), + } + }); + const deliveryMethods = await api.get('DeliveryMethods'); + + const results = agenciesInZone.data + .filter(agency => agency.isVisible) + .map(agency => ({ + id: agency.agencyModeFk, + description: agency.description, + deliveryMethod: deliveryMethods.data.find(dm => dm.id === agency.deliveryMethodFk).code, + })) + .filter(agency => agency.deliveryMethod === 'PICKUP') + .toSorted((a, b) => a.description.localeCompare(b.description)); + + warehouses.value = results; if (!warehouses.value || !warehouses.value.length) { notify(t('noWarehousesAvailableForDate'), 'negative'); From d67f1f2427d7db95bd7ec1e9ca7499b019838570 Mon Sep 17 00:00:00 2001 From: taro Date: Wed, 9 Apr 2025 02:51:37 -0300 Subject: [PATCH 13/15] refactor(CheckoutView): dedup code in getAgencies/getWarehouses --- src/pages/Ecomerce/CheckoutView.vue | 58 ++++++++++++----------------- 1 file changed, 24 insertions(+), 34 deletions(-) diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue index f7023451..f3e67444 100644 --- a/src/pages/Ecomerce/CheckoutView.vue +++ b/src/pages/Ecomerce/CheckoutView.vue @@ -223,25 +223,30 @@ const getOrder = async (orderId) => { return data; }; +const getAgenciesInZone = async () => { + const agenciesInZone = await api.get('Agencies/landsThatDay', { + params: { + addressFk: orderForm.value.address, + landed: new Date(orderForm.value.date), + } + }); + const deliveryMethods = await api.get('DeliveryMethods'); + + return agenciesInZone.data + .filter(agency => agency.isVisible) + .map(agency => ({ + id: agency.agencyModeFk, + description: agency.description, + deliveryMethod: deliveryMethods.data.find(dm => dm.id === agency.deliveryMethodFk).code, + })) + .toSorted((a, b) => a.description.localeCompare(b.description)); +}; + const getAgencies = async () => { try { - const agenciesInZone = await api.get('Agencies/landsThatDay', { - params: { - addressFk: orderForm.value.address, - landed: new Date(orderForm.value.date), - } - }); - const deliveryMethods = await api.get('DeliveryMethods'); - - const results = agenciesInZone.data - .filter(agency => agency.isVisible) - .map(agency => ({ - id: agency.agencyModeFk, - description: agency.description, - deliveryMethod: deliveryMethods.data.find(dm => dm.id === agency.deliveryMethodFk).code, - })) - .filter(agency => agency.deliveryMethod === 'AGENCY' || agency.deliveryMethod === 'DELIVERY') - .toSorted((a, b) => a.description.localeCompare(b.description)); + const agenciesInZone = await getAgenciesInZone(); + const results = agenciesInZone + .filter(agency => agency.deliveryMethod === 'AGENCY' || agency.deliveryMethod === 'DELIVERY'); agencies.value = results; @@ -260,23 +265,8 @@ const getAgencies = async () => { const getWarehouses = async () => { try { - const agenciesInZone = await api.get('Agencies/landsThatDay', { - params: { - addressFk: orderForm.value.address, - landed: new Date(orderForm.value.date), - } - }); - const deliveryMethods = await api.get('DeliveryMethods'); - - const results = agenciesInZone.data - .filter(agency => agency.isVisible) - .map(agency => ({ - id: agency.agencyModeFk, - description: agency.description, - deliveryMethod: deliveryMethods.data.find(dm => dm.id === agency.deliveryMethodFk).code, - })) - .filter(agency => agency.deliveryMethod === 'PICKUP') - .toSorted((a, b) => a.description.localeCompare(b.description)); + const agenciesInZone = await getAgenciesInZone(); + const results = agenciesInZone.filter(agency => agency.deliveryMethod === 'PICKUP'); warehouses.value = results; From 099d7feb7844be2290a8d8f0b564aeac5f76ee12 Mon Sep 17 00:00:00 2001 From: taro Date: Wed, 9 Apr 2025 02:52:26 -0300 Subject: [PATCH 14/15] =?UTF-8?q?refactor(CheckoutView):=20remove=20no-lon?= =?UTF-8?q?ger-needed=20jApi=20=F0=9F=8E=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/Ecomerce/CheckoutView.vue | 1 - 1 file changed, 1 deletion(-) diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue index f3e67444..abd77367 100644 --- a/src/pages/Ecomerce/CheckoutView.vue +++ b/src/pages/Ecomerce/CheckoutView.vue @@ -12,7 +12,6 @@ import { useUserStore } from 'stores/user'; import { useAppStore } from 'stores/app'; import { storeToRefs } from 'pinia'; -const jApi = inject('jApi'); const api = inject('api'); const { t } = useI18n(); const route = useRoute(); From 7ad5feacc2a48bd613924e619e93c51776cff802 Mon Sep 17 00:00:00 2001 From: taro Date: Sun, 13 Apr 2025 23:01:56 -0300 Subject: [PATCH 15/15] refactor(CheckoutView): `return await api.post` in createOrder --- src/pages/Ecomerce/CheckoutView.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/Ecomerce/CheckoutView.vue b/src/pages/Ecomerce/CheckoutView.vue index abd77367..3143264c 100644 --- a/src/pages/Ecomerce/CheckoutView.vue +++ b/src/pages/Ecomerce/CheckoutView.vue @@ -335,7 +335,7 @@ const createOrder = async (userId) => { const companyFk = orderConfig.data[0]?.defaultCompanyFk; - return api.post( + return await api.post( 'Orders', { sourceApp: 'WEB',