forked from verdnatura/salix-front
Merge branch 'fix_Customer_1' of https://gitea.verdnatura.es/verdnatura/salix-front into fix_Customer_1
This commit is contained in:
commit
d692c77fcf
|
@ -421,12 +421,13 @@ setLogTree();
|
|||
>
|
||||
<div class="timeline">
|
||||
<div class="user-avatar">
|
||||
<VnUserLink :worker-id="userLog.user.id">
|
||||
<VnUserLink :worker-id="userLog?.user?.id">
|
||||
<template #link>
|
||||
<VnAvatar
|
||||
:class="{ 'cursor-pointer': userLog.user.id }"
|
||||
:worker-id="userLog.user.id"
|
||||
:title="userLog.user.nickname"
|
||||
:class="{ 'cursor-pointer': userLog?.user?.id }"
|
||||
:worker-id="userLog?.user?.id"
|
||||
:title="userLog?.user?.nickname"
|
||||
:show-letter="!userLog?.user"
|
||||
size="lg"
|
||||
/>
|
||||
</template>
|
||||
|
|
|
@ -199,9 +199,10 @@ es:
|
|||
templates:
|
||||
pendingPayment: 'Su pedido está pendiente de pago.
|
||||
Por favor, entre en la página web y efectue el pago con tarjeta. Muchas gracias.'
|
||||
minAmount: 'Es necesario un importe mínimo de 50€ (Sin IVA) en su pedido
|
||||
{ orderId } del día { shipped } para recibirlo sin portes adicionales.'
|
||||
orderChanges: 'Pedido {orderId} día { shipped }: { changes }'
|
||||
minAmount: 'Te recordamos que tu pedido {orderId} es inferior a 50€.
|
||||
Te recomendamos amplíes para no generar costes extra, provocarán un incremento de tu tarifa.
|
||||
¡Un saludo!'
|
||||
orderChanges: 'Pedido {orderId} con llegada estimada día { landing }: { changes }'
|
||||
en: Inglés
|
||||
es: Español
|
||||
fr: Francés
|
||||
|
@ -215,11 +216,12 @@ fr:
|
|||
Message: Message
|
||||
messageTooltip: Les caractères spéciaux comme les accents comptent comme plusieurs
|
||||
templates:
|
||||
pendingPayment: 'Votre commande est en attente de paiement.
|
||||
Veuillez vous connecter sur le site web et effectuer le paiement par carte. Merci beaucoup.'
|
||||
minAmount: 'Un montant minimum de 50€ (TVA non incluse) est requis pour votre commande
|
||||
{ orderId } du { shipped } afin de la recevoir sans frais de port supplémentaires.'
|
||||
orderChanges: 'Commande { orderId } du { shipped }: { changes }'
|
||||
pendingPayment: 'Verdnatura : Commande en attente de règlement. Veuillez régler votre commande avant 9h.
|
||||
Sinon elle sera décalée en fonction de vos jours de livraison . Merci'
|
||||
minAmount: 'Verdnatura vous rappelle :
|
||||
Montant minimum nécessaire de 50 euros pour recevoir la commande { orderId } livraison { landing }.
|
||||
Merci.'
|
||||
orderChanges: 'Commande {orderId} livraison {landing} indisponible/s. Désolés pour le dérangement.'
|
||||
en: Anglais
|
||||
es: Espagnol
|
||||
fr: Français
|
||||
|
@ -236,8 +238,8 @@ pt:
|
|||
pendingPayment: 'Seu pedido está pendente de pagamento.
|
||||
Por favor, acesse o site e faça o pagamento com cartão. Muito obrigado.'
|
||||
minAmount: 'É necessário um valor mínimo de 50€ (sem IVA) em seu pedido
|
||||
{ orderId } do dia { shipped } para recebê-lo sem custos de envio adicionais.'
|
||||
orderChanges: 'Pedido { orderId } dia { shipped }: { changes }'
|
||||
{ orderId } do dia { landing } para recebê-lo sem custos de envio adicionais.'
|
||||
orderChanges: 'Pedido { orderId } com chegada dia { landing }: { changes }'
|
||||
en: Inglês
|
||||
es: Espanhol
|
||||
fr: Francês
|
||||
|
|
|
@ -41,6 +41,7 @@ const workers = ref([]);
|
|||
const workersCopy = ref([]);
|
||||
const claimStates = ref([]);
|
||||
const claimStatesCopy = ref([]);
|
||||
const optionsList = ref([]);
|
||||
|
||||
function setWorkers(data) {
|
||||
workers.value = data;
|
||||
|
@ -51,9 +52,9 @@ function setClaimStates(data) {
|
|||
claimStates.value = data;
|
||||
claimStatesCopy.value = data;
|
||||
}
|
||||
let optionsList;
|
||||
|
||||
async function getEnumValues() {
|
||||
optionsList = [{ id: null, description: t('claim.basicData.null') }];
|
||||
optionsList.value = [{ id: null, description: t('claim.basicData.null') }];
|
||||
const { data } = await axios.get(`Applications/get-enum-values`, {
|
||||
params: {
|
||||
schema: 'vn',
|
||||
|
@ -62,8 +63,9 @@ async function getEnumValues() {
|
|||
},
|
||||
});
|
||||
for (let value of data)
|
||||
optionsList.push({ id: value, description: t(`claim.basicData.${value}`) });
|
||||
optionsList.value.push({ id: value, description: t(`claim.basicData.${value}`) });
|
||||
}
|
||||
|
||||
getEnumValues();
|
||||
|
||||
const workerFilter = {
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
<script setup>
|
||||
import { ref, computed } from 'vue';
|
||||
import { useQuasar } from 'quasar';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import { QBtn } from 'quasar';
|
||||
|
@ -9,6 +10,7 @@ import CustomerNotificationsFilter from './CustomerNotificationsFilter.vue';
|
|||
import CustomerDescriptorProxy from '../Card/CustomerDescriptorProxy.vue';
|
||||
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
|
||||
import { useStateStore } from 'stores/useStateStore';
|
||||
import CustomerNotificationsCampaignConsumption from './CustomerNotificationsCampaignConsumption.vue';
|
||||
|
||||
const stateStore = useStateStore();
|
||||
|
||||
|
@ -17,6 +19,8 @@ const { t } = useI18n();
|
|||
const rows = ref([]);
|
||||
const selected = ref([]);
|
||||
const selectedCustomerId = ref(0);
|
||||
const quasar = useQuasar();
|
||||
const dataRef = ref(null);
|
||||
|
||||
const tableColumnComponents = {
|
||||
id: {
|
||||
|
@ -82,6 +86,19 @@ const columns = computed(() => [
|
|||
const selectCustomerId = (id) => {
|
||||
selectedCustomerId.value = id;
|
||||
};
|
||||
|
||||
const campaignConsumption = () => {
|
||||
quasar.dialog({
|
||||
component: CustomerNotificationsCampaignConsumption,
|
||||
componentProps: {
|
||||
clients: selected,
|
||||
promise: refreshData,
|
||||
},
|
||||
});
|
||||
};
|
||||
const refreshData = async () => {
|
||||
await dataRef.value.fetch();
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -114,9 +131,19 @@ const selectCustomerId = (id) => {
|
|||
<CustomerNotificationsFilter data-key="CustomerNotifications" />
|
||||
</QScrollArea>
|
||||
</QDrawer>
|
||||
|
||||
<VnSubToolbar />
|
||||
|
||||
<VnSubToolbar class="justify-end">
|
||||
<template #st-data>
|
||||
<QBtn
|
||||
icon="show_chart"
|
||||
color="primary"
|
||||
class="q-mr-sm"
|
||||
:disabled="!selected.length"
|
||||
@click="campaignConsumption"
|
||||
>
|
||||
<QTooltip>{{ t('Campaign consumption') }}</QTooltip>
|
||||
</QBtn>
|
||||
</template>
|
||||
</VnSubToolbar>
|
||||
<QPage class="column items-center q-pa-md">
|
||||
<QTable
|
||||
:columns="columns"
|
||||
|
@ -160,4 +187,5 @@ es:
|
|||
Phone: Teléfono
|
||||
City: Población
|
||||
Email: Email
|
||||
Campaign consumption: Consumo campaña
|
||||
</i18n>
|
||||
|
|
|
@ -0,0 +1,126 @@
|
|||
<script setup>
|
||||
import { ref, reactive } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import axios from 'axios';
|
||||
import { useDialogPluginComponent } from 'quasar';
|
||||
import useNotify from 'src/composables/useNotify';
|
||||
import { useValidator } from 'src/composables/useValidator';
|
||||
import VnRow from 'components/ui/VnRow.vue';
|
||||
import VnInputDate from 'components/common/VnInputDate.vue';
|
||||
import FetchData from 'src/components/FetchData.vue';
|
||||
import { onMounted } from 'vue';
|
||||
|
||||
const $props = defineProps({
|
||||
clients: {
|
||||
type: Array,
|
||||
required: true,
|
||||
},
|
||||
promise: {
|
||||
type: Function,
|
||||
required: true,
|
||||
},
|
||||
});
|
||||
|
||||
const { dialogRef } = useDialogPluginComponent();
|
||||
const { notify } = useNotify();
|
||||
const { t } = useI18n();
|
||||
const validationsStore = useValidator();
|
||||
const campaignParams = reactive({});
|
||||
const moreFields = ref([]);
|
||||
|
||||
async function onSubmit() {
|
||||
try {
|
||||
const data = {
|
||||
clients: $props.clients._value.map((item) => item.id),
|
||||
from: this.campaignParams.from,
|
||||
to: this.campaignParams.to,
|
||||
};
|
||||
|
||||
const params = JSON.stringify(data);
|
||||
await axios.post('ClientConsumptionQueues', { params });
|
||||
|
||||
notify('globals.dataSaved', 'positive');
|
||||
} catch (error) {
|
||||
notify(error.message, 'negative');
|
||||
}
|
||||
}
|
||||
onMounted(async () => {
|
||||
const { models } = validationsStore;
|
||||
const properties = models.Item?.properties || {};
|
||||
const _moreFields = ['valentinesDay', 'mothersDay', 'allSaints'];
|
||||
|
||||
_moreFields.forEach((field) => {
|
||||
let prop = properties[field];
|
||||
const label = t(`params.${field}`);
|
||||
moreFields.value.push({
|
||||
name: field,
|
||||
label,
|
||||
type: prop ? prop.type : null,
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<FetchData
|
||||
url="Campaigns/latest"
|
||||
@on-fetch="(data) => (campaignsOptions = data)"
|
||||
:filter="{ fields: ['id', 'code', 'dated'], order: 'code ASC', limit: 30 }"
|
||||
auto-load
|
||||
/>
|
||||
<QDialog ref="dialogRef">
|
||||
<QCard class="q-pa-md q-mb-md">
|
||||
<QCardSection>
|
||||
<QForm @submit="onSubmit()" class="q-pa-sm">
|
||||
<div>
|
||||
{{ t('Campaign consumption') }}
|
||||
</div>
|
||||
<VnRow class="row q-gutter-md q-mb-md">
|
||||
<QSelect
|
||||
:options="moreFields"
|
||||
v-model="campaignParams.campaign"
|
||||
:label="t('Campaign')"
|
||||
option-label="label"
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow class="row q-gutter-md q-mb-md">
|
||||
<VnInputDate v-model="campaignParams.from" :label="t('From')" />
|
||||
<VnInputDate v-model="campaignParams.to" :label="t('To')" />
|
||||
</VnRow>
|
||||
<div class="q-mt-lg row justify-end">
|
||||
<QBtn
|
||||
:label="t('globals.cancel')"
|
||||
color="primary"
|
||||
flat
|
||||
class="q-mr-md"
|
||||
v-close-popup
|
||||
/>
|
||||
<QBtn
|
||||
:label="t('globals.save')"
|
||||
type="submit"
|
||||
color="primary"
|
||||
v-close-popup
|
||||
/>
|
||||
</div>
|
||||
</QForm>
|
||||
</QCardSection>
|
||||
</QCard>
|
||||
</QDialog>
|
||||
</template>
|
||||
|
||||
<i18n>
|
||||
en:
|
||||
params:
|
||||
valentinesDay: Valentine's Day
|
||||
mothersDay: Mother's Day
|
||||
allSaints: All Saints' Day
|
||||
es:
|
||||
params:
|
||||
valentinesDay: Día de San Valentín
|
||||
mothersDay: Día de la Madre
|
||||
allSaints: Día de Todos los Santos
|
||||
Campaign consumption: Consumo campaña
|
||||
Campaign: Campaña
|
||||
From: Desde
|
||||
To: Hasta
|
||||
</i18n>
|
Loading…
Reference in New Issue