diff --git a/src/components/TransferInvoiceForm.vue b/src/components/TransferInvoiceForm.vue
index f013e80fb..1af23583d 100644
--- a/src/components/TransferInvoiceForm.vue
+++ b/src/components/TransferInvoiceForm.vue
@@ -2,7 +2,8 @@
import { ref, reactive } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRouter } from 'vue-router';
-
+import { useQuasar } from 'quasar';
+import VnConfirm from 'components/ui/VnConfirm.vue';
import VnRow from 'components/ui/VnRow.vue';
import FetchData from 'components/FetchData.vue';
import VnSelect from 'components/common/VnSelect.vue';
@@ -18,33 +19,68 @@ const $props = defineProps({
},
});
+const quasar = useQuasar();
const { t } = useI18n();
const router = useRouter();
const { notify } = useNotify();
-
+const checked = ref(true);
const transferInvoiceParams = reactive({
id: $props.invoiceOutData?.id,
refFk: $props.invoiceOutData?.ref,
});
-const closeButton = ref(null);
-const clientsOptions = ref([]);
+
const rectificativeTypeOptions = ref([]);
const siiTypeInvoiceOutsOptions = ref([]);
const invoiceCorrectionTypesOptions = ref([]);
-const closeForm = () => {
- if (closeButton.value) closeButton.value.click();
+const selectedClient = (client) => {
+ transferInvoiceParams.selectedClientData = client;
};
-const transferInvoice = async () => {
+const makeInvoice = async () => {
+ const hasToInvoiceByAddress =
+ transferInvoiceParams.selectedClientData.hasToInvoiceByAddress;
+
+ const params = {
+ id: transferInvoiceParams.id,
+ cplusRectificationTypeFk: transferInvoiceParams.cplusRectificationTypeFk,
+ invoiceCorrectionTypeFk: transferInvoiceParams.invoiceCorrectionTypeFk,
+ newClientFk: transferInvoiceParams.newClientFk,
+ refFk: transferInvoiceParams.refFk,
+ siiTypeInvoiceOutFk: transferInvoiceParams.siiTypeInvoiceOutFk,
+ makeInvoice: checked.value,
+ };
+
try {
- const { data } = await axios.post(
- 'InvoiceOuts/transferInvoice',
- transferInvoiceParams
- );
+ if (checked.value && hasToInvoiceByAddress) {
+ const response = await new Promise((resolve) => {
+ quasar
+ .dialog({
+ component: VnConfirm,
+ componentProps: {
+ title: t('Bill destination client'),
+ message: t('transferInvoiceInfo'),
+ },
+ })
+ .onOk(() => {
+ resolve(true);
+ })
+ .onCancel(() => {
+ resolve(false);
+ });
+ });
+ if (!response) {
+ console.log('entra cuando no checkbox');
+ return;
+ }
+ }
+
+ console.log('params: ', params);
+ const { data } = await axios.post('InvoiceOuts/transferInvoice', params);
+ console.log('data: ', data);
notify(t('Transferred invoice'), 'positive');
- closeForm();
- router.push('InvoiceOutSummary', { id: data.id });
+ const id = data?.[0];
+ if (id) router.push({ name: 'InvoiceOutSummary', params: { id } });
} catch (err) {
console.error('Error transfering invoice', err);
}
@@ -52,22 +88,30 @@ const transferInvoice = async () => {
- (clientsOptions = data)"
- :filter="{ fields: ['id', 'name'], order: 'id', limit: 30 }"
- auto-load
- />
(rectificativeTypeOptions = data)"
+ @on-fetch="
+ (data) => (
+ (rectificativeTypeOptions = data),
+ (transferInvoiceParams.cplusRectificationTypeFk = data.filter(
+ (type) => type.description == 'I – Por diferencias'
+ )[0].id)
+ )
+ "
auto-load
/>
(siiTypeInvoiceOutsOptions = data)"
+ @on-fetch="
+ (data) => (
+ (siiTypeInvoiceOutsOptions = data),
+ (transferInvoiceParams.siiTypeInvoiceOutFk = data.filter(
+ (type) => type.code == 'R4'
+ )[0].id)
+ )
+ "
auto-load
/>
{
auto-load
/>
{
option-value="id"
v-model="transferInvoiceParams.newClientFk"
:required="true"
+ url="Clients"
+ :fields="['id', 'name', 'hasToInvoiceByAddress']"
+ auto-load
>
-
+
- #{{ scope.opt?.id }} -
- {{ scope.opt?.name }}
+ #{{ scope.opt?.id }} - {{ scope.opt?.name }}
@@ -144,11 +193,23 @@ const transferInvoice = async () => {
:required="true"
/>
+
+
+
+
+ {{ t('transferInvoiceInfo') }}
+
+
+
+en:
+ checkInfo: New tickets from the destination customer will be generated in the consignee by default.
+ transferInvoiceInfo: Destination customer is marked to bill in the consignee
+ confirmTransferInvoice: The destination customer has selected to bill in the consignee, do you want to continue?
es:
Transfer invoice: Transferir factura
Transfer client: Transferir cliente
@@ -157,4 +218,7 @@ es:
Class: Clase
Type: Tipo
Transferred invoice: Factura transferida
+ Bill destination client: Facturar cliente destino
+ transferInvoiceInfo: Los nuevos tickets del cliente destino, serán generados en el consignatario por defecto.
+ confirmTransferInvoice: El cliente destino tiene marcado facturar por consignatario, desea continuar?
diff --git a/src/components/UserPanel.vue b/src/components/UserPanel.vue
index 691d3db8f..9c3b456b1 100644
--- a/src/components/UserPanel.vue
+++ b/src/components/UserPanel.vue
@@ -11,6 +11,7 @@ import VnSelect from 'src/components/common/VnSelect.vue';
import VnRow from 'components/ui/VnRow.vue';
import FetchData from 'components/FetchData.vue';
import { useClipboard } from 'src/composables/useClipboard';
+import VnImg from 'src/components/ui/VnImg.vue';
const state = useState();
const session = useSession();
@@ -47,7 +48,6 @@ const darkMode = computed({
});
const user = state.getUser();
-const token = session.getTokenMultimedia();
const warehousesData = ref();
const companiesData = ref();
const accountBankData = ref();
@@ -149,10 +149,7 @@ function saveUserData(param, value) {
-
+
diff --git a/src/components/common/VnInput.vue b/src/components/common/VnInput.vue
index 07e82abed..4cd964012 100644
--- a/src/components/common/VnInput.vue
+++ b/src/components/common/VnInput.vue
@@ -22,6 +22,10 @@ const $props = defineProps({
type: String,
default: '',
},
+ clearable: {
+ type: Boolean,
+ default: true,
+ },
});
const { t } = useI18n();
@@ -88,7 +92,7 @@ const inputRules = [
diff --git a/src/components/common/VnInputDate.vue b/src/components/common/VnInputDate.vue
index 3c1a12f24..77ab2692d 100644
--- a/src/components/common/VnInputDate.vue
+++ b/src/components/common/VnInputDate.vue
@@ -1,5 +1,6 @@
+
+
+
+
+
+ {{ t('Progress') }}
+
+
+
+
+
+
{{ t('Total progress') }}:
+
+
+
+
+ {{ progressLabel }}
+
+
+
+
+
+
+
+
+ {{ t('globals.cancel') }}
+
+
+
+
+
+
+
+es:
+ Progress: Progreso
+ Total progress: Progreso total
+ Cancelled: Cancelado
+
diff --git a/src/components/common/VnSelect.vue b/src/components/common/VnSelect.vue
index 04ccca889..52cb68438 100644
--- a/src/components/common/VnSelect.vue
+++ b/src/components/common/VnSelect.vue
@@ -1,6 +1,5 @@
diff --git a/src/components/common/VnSmsDialog.vue b/src/components/common/VnSmsDialog.vue
index 5b192f95d..064394445 100644
--- a/src/components/common/VnSmsDialog.vue
+++ b/src/components/common/VnSmsDialog.vue
@@ -184,6 +184,7 @@ en:
minAmount: 'A minimum amount of 50€ (VAT excluded) is required for your order
{ orderId } of { shipped } to receive it without additional shipping costs.'
orderChanges: 'Order {orderId} of { shipped }: { changes }'
+ productNotAvailable: 'Verdnatura communicates: Your order {ticketFk} with reception date on {landed}. {notAvailables} not available. Sorry for the inconvenience.'
en: English
es: Spanish
fr: French
@@ -203,6 +204,7 @@ es:
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 }'
+ productNotAvailable: 'Verdnatura le comunica: Pedido {ticketFk} con fecha de recepción {landed}. {notAvailables} no disponible/s. Disculpe las molestias.'
en: Inglés
es: Español
fr: Francés
@@ -222,6 +224,7 @@ fr:
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.'
+ productNotAvailable: 'Verdnatura communique : Votre commande {ticketFk} avec date de réception le {landed}. {notAvailables} non disponible. Nous sommes désolés pour les inconvénients.'
en: Anglais
es: Espagnol
fr: Français
@@ -240,6 +243,7 @@ pt:
minAmount: 'É necessário um valor mínimo de 50€ (sem IVA) em seu pedido
{ orderId } do dia { landing } para recebê-lo sem custos de envio adicionais.'
orderChanges: 'Pedido { orderId } com chegada dia { landing }: { changes }'
+ productNotAvailable: 'Verdnatura comunica: Seu pedido {ticketFk} com data de recepção em {landed}. {notAvailables} não disponível/eis. Desculpe pelo transtorno.'
en: Inglês
es: Espanhol
fr: Francês
diff --git a/src/components/ui/CardSummary.vue b/src/components/ui/CardSummary.vue
index ceff9028a..253683889 100644
--- a/src/components/ui/CardSummary.vue
+++ b/src/components/ui/CardSummary.vue
@@ -30,7 +30,7 @@ const props = defineProps({
const emit = defineEmits(['onFetch']);
const route = useRoute();
const isSummary = ref();
-const arrayData = useArrayData(props.dataKey || route.meta.moduleName, {
+const arrayData = useArrayData(props.dataKey, {
url: props.url,
filter: props.filter,
skip: 0,
diff --git a/src/components/ui/VnImg.vue b/src/components/ui/VnImg.vue
index 37072a69e..37c1edefc 100644
--- a/src/components/ui/VnImg.vue
+++ b/src/components/ui/VnImg.vue
@@ -3,22 +3,26 @@ import { ref, computed, onMounted } from 'vue';
import { useSession } from 'src/composables/useSession';
const $props = defineProps({
- collection: {
+ storage: {
type: [String, Number],
default: 'Images',
},
+ collection: {
+ type: String,
+ default: 'catalog',
+ },
size: {
type: String,
default: '200x200',
},
zoomSize: {
type: String,
- required: true,
+ required: false,
default: 'lg',
},
id: {
- type: Boolean,
- default: false,
+ type: Number,
+ required: true,
},
});
const show = ref(false);
@@ -26,10 +30,9 @@ const token = useSession().getTokenMultimedia();
const timeStamp = ref(`timestamp=${Date.now()}`);
const url = computed(
() =>
- `/api/${$props.collection}/catalog/${$props.size}/${$props.id}/download?access_token=${token}&${timeStamp.value}`
+ `/api/${$props.storage}/${$props.collection}/${$props.size}/${$props.id}/download?access_token=${token}&${timeStamp.value}`
);
-const emits = defineEmits(['refresh']);
-const reload = (emit = false) => {
+const reload = () => {
timeStamp.value = `timestamp=${Date.now()}`;
};
defineExpose({
@@ -41,20 +44,25 @@ onMounted(() => {});
-
+
diff --git a/src/filters/toPercentage.js b/src/filters/toPercentage.js
index d701cb9e7..9b5e953c0 100644
--- a/src/filters/toPercentage.js
+++ b/src/filters/toPercentage.js
@@ -8,11 +8,8 @@ export default function (value, fractionSize = 2) {
const options = {
style: 'percent',
minimumFractionDigits: fractionSize,
- maximumFractionDigits: fractionSize
+ maximumFractionDigits: fractionSize,
};
- return new Intl.NumberFormat(locale, options)
- .format(parseFloat(value));
-
-
-}
\ No newline at end of file
+ return new Intl.NumberFormat(locale, options).format(parseFloat(value));
+}
diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml
index 1b51799db..f8850d396 100644
--- a/src/i18n/locale/en.yml
+++ b/src/i18n/locale/en.yml
@@ -444,6 +444,10 @@ ticket:
sms: Sms
notes: Notes
sale: Sale
+ ticketAdvance: Advance tickets
+ futureTickets: Future tickets
+ purchaseRequest: Purchase request
+ weeklyTickets: Weekly tickets
list:
nickname: Nickname
state: State
@@ -845,7 +849,7 @@ worker:
calendar: Calendar
timeControl: Time control
locker: Locker
-
+ formation: Formation
list:
name: Name
email: Email
@@ -915,6 +919,16 @@ worker:
payMethods: Pay method
iban: IBAN
bankEntity: Swift / BIC
+ formation:
+ tableVisibleColumns:
+ course: Curso
+ startDate: Fecha Inicio
+ endDate: Fecha Fin
+ center: Centro Formación
+ invoice: Factura
+ amount: Importe
+ remark: Bonficado
+ hasDiploma: Diploma
imageNotFound: Image not found
wagon:
pageTitles:
diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml
index 55b6e4667..e5924f93b 100644
--- a/src/i18n/locale/es.yml
+++ b/src/i18n/locale/es.yml
@@ -443,6 +443,10 @@ ticket:
sms: Sms
notes: Notas
sale: Lineas del pedido
+ ticketAdvance: Adelantar tickets
+ futureTickets: Tickets a futuro
+ purchaseRequest: Petición de compra
+ weeklyTickets: Tickets programados
list:
nickname: Alias
state: Estado
@@ -841,6 +845,7 @@ worker:
calendar: Calendario
timeControl: Control de horario
locker: Taquilla
+ formation: Formación
list:
name: Nombre
email: Email
@@ -901,6 +906,16 @@ worker:
payMethods: Método de pago
iban: IBAN
bankEntity: Swift / BIC
+ formation:
+ tableVisibleColumns:
+ course: Curso
+ startDate: Fecha Inicio
+ endDate: Fecha Fin
+ center: Centro Formación
+ invoice: Factura
+ amount: Importe
+ remark: Bonficado
+ hasDiploma: Diploma
imageNotFound: No se ha encontrado la imagen
wagon:
pageTitles:
diff --git a/src/pages/Account/Card/AccountBasicData.vue b/src/pages/Account/Card/AccountBasicData.vue
index 3a9d5c9bf..42b77419f 100644
--- a/src/pages/Account/Card/AccountBasicData.vue
+++ b/src/pages/Account/Card/AccountBasicData.vue
@@ -3,7 +3,6 @@ import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import VnSelect from 'src/components/common/VnSelect.vue';
import FormModel from 'components/FormModel.vue';
-import VnRow from 'components/ui/VnRow.vue';
import VnInput from 'src/components/common/VnInput.vue';
import { ref, watch } from 'vue';
diff --git a/src/pages/Account/Card/AccountDescriptor.vue b/src/pages/Account/Card/AccountDescriptor.vue
index 2ff8afa33..ddc7c077f 100644
--- a/src/pages/Account/Card/AccountDescriptor.vue
+++ b/src/pages/Account/Card/AccountDescriptor.vue
@@ -6,8 +6,8 @@ import CardDescriptor from 'components/ui/CardDescriptor.vue';
import VnLv from 'src/components/ui/VnLv.vue';
import useCardDescription from 'src/composables/useCardDescription';
import AccountDescriptorMenu from './AccountDescriptorMenu.vue';
-import { useSession } from 'src/composables/useSession';
import FetchData from 'src/components/FetchData.vue';
+import VnImg from 'src/components/ui/VnImg.vue';
const $props = defineProps({
id: {
@@ -19,7 +19,6 @@ const $props = defineProps({
const route = useRoute();
const { t } = useI18n();
-const { getTokenMultimedia } = useSession();
const entityId = computed(() => {
return $props.id || route.params.id;
});
@@ -31,10 +30,6 @@ const filter = {
fields: ['id', 'nickname', 'name', 'role'],
include: { relation: 'role', scope: { fields: ['id', 'name'] } },
};
-function getAccountAvatar() {
- const token = getTokenMultimedia();
- return `/api/Images/user/160x160/${entityId.value}/download?access_token=${token}`;
-}
const hasAccount = ref(false);
@@ -72,7 +67,8 @@ const hasAccount = ref(false);
-
+
+
-
+
diff --git a/src/pages/Account/Card/AccountSummary.vue b/src/pages/Account/Card/AccountSummary.vue
index 1c7f79f0e..1901f9cde 100644
--- a/src/pages/Account/Card/AccountSummary.vue
+++ b/src/pages/Account/Card/AccountSummary.vue
@@ -30,6 +30,7 @@ const filter = {
$props.id || useRoute().params.id);
-
+
{{ agency.name }}
diff --git a/src/pages/Claim/Card/ClaimBasicData.vue b/src/pages/Claim/Card/ClaimBasicData.vue
index 977a4dc5b..4656980d9 100644
--- a/src/pages/Claim/Card/ClaimBasicData.vue
+++ b/src/pages/Claim/Card/ClaimBasicData.vue
@@ -10,12 +10,13 @@ import VnInput from 'src/components/common/VnInput.vue';
import VnInputDate from 'components/common/VnInputDate.vue';
import axios from 'axios';
-import { useSession } from 'src/composables/useSession';
+// import { useSession } from 'src/composables/useSession';
+import VnImg from 'src/components/ui/VnImg.vue';
const route = useRoute();
const { t } = useI18n();
-const { getTokenMultimedia } = useSession();
-const token = getTokenMultimedia();
+// const { getTokenMultimedia } = useSession();
+// const token = getTokenMultimedia();
const claimStates = ref([]);
const claimStatesCopy = ref([]);
@@ -97,9 +98,11 @@ const statesFilter = {
>
-
diff --git a/src/pages/Claim/Card/ClaimSummary.vue b/src/pages/Claim/Card/ClaimSummary.vue
index 36a26008e..1a2d3c251 100644
--- a/src/pages/Claim/Card/ClaimSummary.vue
+++ b/src/pages/Claim/Card/ClaimSummary.vue
@@ -185,6 +185,7 @@ async function changeState(value) {
:url="`Claims/${entityId}/getSummary`"
:entity-id="entityId"
@on-fetch="getClaimDms"
+ data-key="claimSummary"
>
{{ claim.id }} - {{ claim.client.name }} ({{ claim.client.id }})
diff --git a/src/pages/Customer/Card/CustomerBasicData.vue b/src/pages/Customer/Card/CustomerBasicData.vue
index b0c2d60e3..805795522 100644
--- a/src/pages/Customer/Card/CustomerBasicData.vue
+++ b/src/pages/Customer/Card/CustomerBasicData.vue
@@ -3,16 +3,14 @@ import { ref } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
-import { useSession } from 'src/composables/useSession';
import FetchData from 'components/FetchData.vue';
import FormModel from 'components/FormModel.vue';
import VnRow from 'components/ui/VnRow.vue';
import VnInput from 'src/components/common/VnInput.vue';
+import VnImg from 'src/components/ui/VnImg.vue';
const route = useRoute();
const { t } = useI18n();
-const { getTokenMultimedia } = useSession();
-const token = getTokenMultimedia();
const workers = ref([]);
const workersCopy = ref([]);
@@ -143,10 +141,11 @@ const filterOptions = {
>
-
diff --git a/src/pages/Customer/Card/CustomerSummary.vue b/src/pages/Customer/Card/CustomerSummary.vue
index 5a003dc85..1190f22fe 100644
--- a/src/pages/Customer/Card/CustomerSummary.vue
+++ b/src/pages/Customer/Card/CustomerSummary.vue
@@ -61,7 +61,11 @@ const creditWarning = computed(() => {
-
+
{
ref="summaryRef"
:url="`Entries/${entityId}/getEntry`"
@on-fetch="(data) => setEntryData(data)"
+ data-key="EntrySummary"
>
(stateStore.rightDrawer = false));
-
+
diff --git a/src/pages/InvoiceOut/Card/InvoiceOutSummary.vue b/src/pages/InvoiceOut/Card/InvoiceOutSummary.vue
index e98de6b30..c773c43cf 100644
--- a/src/pages/InvoiceOut/Card/InvoiceOutSummary.vue
+++ b/src/pages/InvoiceOut/Card/InvoiceOutSummary.vue
@@ -106,6 +106,7 @@ const ticketsColumns = ref([
ref="summary"
:url="`InvoiceOuts/${entityId}/summary`"
:entity-id="entityId"
+ data-key="InvoiceOutSummary"
>
{{ invoiceOut.ref }} - {{ invoiceOut.client?.socialName }}
diff --git a/src/pages/Item/Card/ItemDescriptor.vue b/src/pages/Item/Card/ItemDescriptor.vue
index 155c9eb4c..f3eba8c82 100644
--- a/src/pages/Item/Card/ItemDescriptor.vue
+++ b/src/pages/Item/Card/ItemDescriptor.vue
@@ -13,7 +13,6 @@ import ItemDescriptorImage from 'src/pages/Item/Card/ItemDescriptorImage.vue';
import { useState } from 'src/composables/useState';
import useCardDescription from 'src/composables/useCardDescription';
-import { useSession } from 'src/composables/useSession';
import { getUrl } from 'src/composables/getUrl';
import axios from 'axios';
import { dashIfEmpty } from 'src/filters';
@@ -42,14 +41,12 @@ const quasar = useQuasar();
const route = useRoute();
const router = useRouter();
const { t } = useI18n();
-const { getTokenMultimedia } = useSession();
const state = useState();
const user = state.getUser();
const entityId = computed(() => {
return $props.id || route.params.id;
});
-const image = ref(null);
const regularizeStockFormDialog = ref(null);
const item = ref(null);
const available = ref(null);
@@ -67,17 +64,10 @@ const warehouseFk = computed({
});
onMounted(async () => {
- await getItemAvatar();
warehouseFk.value = user.value.warehouseFk;
salixUrl.value = await getUrl('');
});
-const getItemAvatar = async () => {
- const token = getTokenMultimedia();
- const timeStamp = `timestamp=${Date.now()}`;
- image.value = `/api/Images/catalog/200x200/${entityId.value}/download?access_token=${token}&${timeStamp}`;
-};
-
const data = ref(useCardDescription());
const setData = (entity) => {
if (!entity) return;
diff --git a/src/pages/Item/ItemFixedPrice.vue b/src/pages/Item/ItemFixedPrice.vue
index 97f40b84d..2ecd1f21b 100644
--- a/src/pages/Item/ItemFixedPrice.vue
+++ b/src/pages/Item/ItemFixedPrice.vue
@@ -33,7 +33,6 @@ const user = state.getUser();
const fixedPrices = ref([]);
const fixedPricesOriginalData = ref([]);
const warehousesOptions = ref([]);
-const itemsWithNameOptions = ref([]);
const rowsSelected = ref([]);
const exprBuilder = (param, value) => {
@@ -371,12 +370,6 @@ onUnmounted(() => (stateStore.rightDrawer = false));
auto-load
@on-fetch="(data) => onWarehousesFetched(data)"
/>
- (itemsWithNameOptions = data)"
- />
(stateStore.rightDrawer = false));
(stateStore.rightDrawer = false));
-
+
{{ t('Edit fixed price(s)') }}
diff --git a/src/pages/Item/ItemList.vue b/src/pages/Item/ItemList.vue
index 0e40740b9..f1e3629cd 100644
--- a/src/pages/Item/ItemList.vue
+++ b/src/pages/Item/ItemList.vue
@@ -16,17 +16,15 @@ import ItemListFilter from './ItemListFilter.vue';
import { useStateStore } from 'stores/useStateStore';
import { toDateFormat } from 'src/filters/date.js';
-import { useSession } from 'composables/useSession';
import { dashIfEmpty } from 'src/filters';
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
import { useVnConfirm } from 'composables/useVnConfirm';
import axios from 'axios';
import RightMenu from 'src/components/common/RightMenu.vue';
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
+import VnImg from 'src/components/ui/VnImg.vue';
const router = useRouter();
-const { getTokenMultimedia } = useSession();
-const token = getTokenMultimedia();
const stateStore = useStateStore();
const { t } = useI18n();
const { viewSummary } = useSummaryDialog();
@@ -491,10 +489,9 @@ onUnmounted(() => (stateStore.rightDrawer = false));
-
-
+
{{ t('order.summary.basket') }} #{{ entity?.id }} -
{{ entity?.client?.name }} ({{ entity?.clientFk }})
diff --git a/src/pages/Parking/Card/ParkingSummary.vue b/src/pages/Parking/Card/ParkingSummary.vue
index ebc3a996b..7406856b9 100644
--- a/src/pages/Parking/Card/ParkingSummary.vue
+++ b/src/pages/Parking/Card/ParkingSummary.vue
@@ -30,6 +30,7 @@ const filter = {
:url="`Parkings/${entityId}`"
:filter="filter"
@on-fetch="(data) => (parking = data)"
+ data-key="Parking"
>
{{ parking.code }}
diff --git a/src/pages/Route/Card/RouteSummary.vue b/src/pages/Route/Card/RouteSummary.vue
index 653508fe8..d7a02833e 100644
--- a/src/pages/Route/Card/RouteSummary.vue
+++ b/src/pages/Route/Card/RouteSummary.vue
@@ -123,6 +123,7 @@ const ticketColumns = ref([
ref="summary"
:url="`Routes/${entityId}/summary`"
:entity-id="entityId"
+ data-key="RouteSummary"
>
{{ `${entity?.route.id} - ${entity?.route?.description}` }}
diff --git a/src/pages/Route/RouteList.vue b/src/pages/Route/RouteList.vue
index edec43fec..de60d164e 100644
--- a/src/pages/Route/RouteList.vue
+++ b/src/pages/Route/RouteList.vue
@@ -1,5 +1,4 @@
diff --git a/src/pages/Shelving/Card/ShelvingSummary.vue b/src/pages/Shelving/Card/ShelvingSummary.vue
index 168552832..08d05626e 100644
--- a/src/pages/Shelving/Card/ShelvingSummary.vue
+++ b/src/pages/Shelving/Card/ShelvingSummary.vue
@@ -36,7 +36,12 @@ const filter = {
-
+
{{ entity.code }}
diff --git a/src/pages/Supplier/Card/SupplierSummary.vue b/src/pages/Supplier/Card/SupplierSummary.vue
index 4cd1f46f5..d007ad08f 100644
--- a/src/pages/Supplier/Card/SupplierSummary.vue
+++ b/src/pages/Supplier/Card/SupplierSummary.vue
@@ -48,6 +48,7 @@ function getUrl(section) {
ref="summaryRef"
:url="`Suppliers/${entityId}/getSummary`"
@on-fetch="(data) => setData(data)"
+ data-key="SupplierSummary"
>
{{ supplier.name }} - {{ supplier.id }}
diff --git a/src/pages/Ticket/Card/BasicData/BasicDataTable.vue b/src/pages/Ticket/Card/BasicData/BasicDataTable.vue
new file mode 100644
index 000000000..48b8c882f
--- /dev/null
+++ b/src/pages/Ticket/Card/BasicData/BasicDataTable.vue
@@ -0,0 +1,263 @@
+
+
+
+ (ticketUpdateActions = data)"
+ auto-load
+ />
+
+
+
+
+
+ {{ t('basicData.total') }}
+
+
+
+
+ {{ t('basicData.price') }}:
+ {{ toCurrency(totalPrice) }}
+
+
+
+
+ {{ t('basicData.newPrice') }}: {{ toCurrency(totalNewPrice) }}
+
+
+
+
+ {{ t('basicData.difference') }}: {{ toCurrency(totalDifference) }}
+
+
+
+
+
+
+ {{ t('basicData.chargeDifference') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('basicData.withoutNegativesInfo') }}
+
+
+
+
+
+
+
+
+
+
+ {{ row.itemFk }}
+
+
+
+
+
+
+
+ {{ row.item.name }}
+ {{ row.item.subName }}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/Ticket/Card/BasicData/TicketBasicDataForm.vue b/src/pages/Ticket/Card/BasicData/TicketBasicDataForm.vue
new file mode 100644
index 000000000..c8a8e85c9
--- /dev/null
+++ b/src/pages/Ticket/Card/BasicData/TicketBasicDataForm.vue
@@ -0,0 +1,468 @@
+
+
+ (clientsOptions = data)"
+ auto-load
+ />
+ (warehousesOptions = data)"
+ auto-load
+ />
+ (companiesOptions = data)"
+ auto-load
+ />
+ (agenciesOptions = data)"
+ auto-load
+ />
+ (zonesOptions = data)"
+ auto-load
+ />
+
+
+
+
+
+
+ #{{ scope.opt?.id }} {{ scope.opt?.name }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{
+ `${
+ !scope.opt?.isActive
+ ? t('basicData.inactive')
+ : ''
+ } `
+ }}
+ {{ scope.opt?.nickname }}
+ , {{ scope.opt?.street }}, {{ scope.opt?.city }},
+ {{ scope.opt?.province?.name }} -
+ {{ scope.opt?.agencyMode?.name }}
+
+
+
+
+
+
+ {{ t('basicData.editAddress') }}
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ scope.opt?.name }} - Max.
+ {{ toTimeFormat(scope.opt?.hour) }}
+ h.
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/Ticket/Card/BasicData/TicketBasicDataView.vue b/src/pages/Ticket/Card/BasicData/TicketBasicDataView.vue
new file mode 100644
index 000000000..af47761a2
--- /dev/null
+++ b/src/pages/Ticket/Card/BasicData/TicketBasicDataView.vue
@@ -0,0 +1,195 @@
+
+
+
+
+ (formData = $event)"
+ :form-data="formData"
+ />
+
+
+ (formData = $event)"
+ />
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/Ticket/Card/TicketBasicData.vue b/src/pages/Ticket/Card/TicketBasicData.vue
deleted file mode 100644
index 0c9a8b042..000000000
--- a/src/pages/Ticket/Card/TicketBasicData.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
- Basic Data
-
diff --git a/src/pages/Ticket/Card/TicketCard.vue b/src/pages/Ticket/Card/TicketCard.vue
index 04363b506..689a717e6 100644
--- a/src/pages/Ticket/Card/TicketCard.vue
+++ b/src/pages/Ticket/Card/TicketCard.vue
@@ -1,17 +1,30 @@
diff --git a/src/pages/Ticket/Card/TicketCreateRequest.vue b/src/pages/Ticket/Card/TicketCreateRequest.vue
new file mode 100644
index 000000000..6b436621f
--- /dev/null
+++ b/src/pages/Ticket/Card/TicketCreateRequest.vue
@@ -0,0 +1,69 @@
+
+
+ (attendersOptions = data)"
+ />
+ emit('onRequestCreated')"
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ es:
+ Create request: Crear petición de compra
+
diff --git a/src/pages/Ticket/Card/TicketEditMana.vue b/src/pages/Ticket/Card/TicketEditMana.vue
new file mode 100644
index 000000000..721057515
--- /dev/null
+++ b/src/pages/Ticket/Card/TicketEditMana.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('New price') }}
+
+ {{ toCurrency($props.newPrice) }}
+
+
+
+
+
+
+ {{ t('globals.cancel') }}
+
+
+ {{ t('globals.save') }}
+
+
+
+
+
+
+
+
+
+es:
+ New price: Nuevo precio
+
diff --git a/src/pages/Ticket/Card/TicketLog.vue b/src/pages/Ticket/Card/TicketLog.vue
index 94b63a117..94cff4dfc 100644
--- a/src/pages/Ticket/Card/TicketLog.vue
+++ b/src/pages/Ticket/Card/TicketLog.vue
@@ -1,7 +1,10 @@
-
+
diff --git a/src/pages/Ticket/Card/TicketPurchaseRequest.vue b/src/pages/Ticket/Card/TicketPurchaseRequest.vue
new file mode 100644
index 000000000..281dc46a1
--- /dev/null
+++ b/src/pages/Ticket/Card/TicketPurchaseRequest.vue
@@ -0,0 +1,267 @@
+
+
+
+
+
+
+ redirectToTicketSummary(row.ticketFk)"
+ >
+
+
+
+
+
+
+
+
+ {{ row.requester?.user?.nickname }}
+
+
+
+
+
+
+
+ {{ row.atender?.user?.nickname }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.sale.itemFk }}
+
+
+
+
+
+
+
+
+ {{ t('globals.delete') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('purchaseRequest.newRequest') }}
+
+
+
+
+
+ es:
+ New: Nueva
+ Denied: Denegada
+ Accepted: Aceptada
+
diff --git a/src/pages/Ticket/Card/TicketSale.vue b/src/pages/Ticket/Card/TicketSale.vue
index 02cccaff2..32408bf67 100644
--- a/src/pages/Ticket/Card/TicketSale.vue
+++ b/src/pages/Ticket/Card/TicketSale.vue
@@ -1 +1,779 @@
-Ticket sale
+
+
+
+ (isTicketEditable = data)"
+ />
+ (isLocked = data)"
+ />
+ (itemsWithNameOptions = data)"
+ />
+ (editableStatesOptions = data)"
+ />
+
+
+
+
+ {{ t(`Change ticket state to 'Ok'`) }}
+
+
+
+
+
+
+ {{ t('Remove lines') }}
+
+
+ {{ t('Transfer lines') }}
+
+
+
+
+
+
+
+
+
+ {{ t('ticketSale.subtotal') }}:
+
+ {{ toCurrency(store.data?.totalWithoutVat) }}
+
+
+
+ {{ t('ticketSale.tax') }}:
+
+ {{
+ toCurrency(store.data?.totalWithVat - store.data?.totalWithoutVat)
+ }}
+
+
+
+ {{ t('ticketSale.total') }}:
+
+ {{ toCurrency(store.data?.totalWithVat) }}
+
+
+
+
+
+
+
+
+
+
+ {{ t('ticketSale.claim') }}:
+ {{ row.claim?.claimFk }}
+
+
+
+
+
+ {{ t('ticketSale.visible') }}: {{ row.visible || 0 }}
+
+
+
+
+ {{ t('ticketSale.reserved') }}
+
+
+
+
+ {{ t('ticketSale.noVisible') }}
+
+
+
+
+ {{ t('ticketSale.hasComponentLack') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.visible }}
+
+
+
+
+
+
+ {{ row.available }}
+
+
+
+
+
+
+
+ {{ row.itemFk }}
+
+
+
+
+
+
+
+ #{{ scope.opt?.id }}
+ {{ scope.opt?.name }}
+
+
+
+
+
+
+
+
+
+ {{ row.quantity }}
+
+
+
+
+
+ {{ row.concept }}
+ {{ row.item?.subName }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ toCurrency(row.price) }}
+
+
+
+
+
+ {{ toCurrency(row.price) }}
+
+
+
+
+
+
+ {{ toPercentage(row.discount / 100) }}
+
+
+
+
+
+ {{ toPercentage(row.discount / 100) }}
+
+
+
+
+
+
+ {{ t('ticketSale.history') }}
+
+
+
+
+
+
+
+ {{ t('Add item') }}
+
+
+
+
+
+
+
+
+ {{ t('Add item to basket') }}
+
+
+
+
+
+es:
+ New item: Nuevo artículo
+ Add item to basket: Añadir artículo a la cesta
+ Change ticket state to 'Ok': Cambiar estado del ticket a 'Ok'
+ Remove lines: Eliminar líneas
+ Continue anyway?: ¿Continuar de todas formas?
+ You are going to delete lines of the ticket: Vas a eliminar lineas del ticket
+ Add item: Añadir artículo
+ Select lines to see the options: Selecciona líneas para ver las opciones
+ Transfer lines: Transferir líneas
+
diff --git a/src/pages/Ticket/Card/TicketSaleMoreActions.vue b/src/pages/Ticket/Card/TicketSaleMoreActions.vue
new file mode 100644
index 000000000..9ec6b303a
--- /dev/null
+++ b/src/pages/Ticket/Card/TicketSaleMoreActions.vue
@@ -0,0 +1,289 @@
+
+
+
+
+
+ {{ t('Select lines to see the options') }}
+
+
+
+
+ {{ t('Send shortage SMS') }}
+
+
+
+
+ {{ t('Recalculate price') }}
+
+
+
+
+ {{ t('Update discount') }}
+
+
+
+
+
+
+
+ {{ t('Add claim') }}
+
+
+
+
+ {{ t('Mark as reserved') }}
+
+
+
+
+ {{ t('Unmark as reserved') }}
+
+
+
+
+ {{ t('Refund...') }}
+
+
+
+
+
+
+
+
+ {{ t('with warehouse') }}
+
+
+
+
+ {{ t('without warehouse') }}
+
+
+
+
+
+
+
+
+
+
+en:
+ refundTicketCreated: 'The following refund ticket have been created {ticketId}'
+es:
+ SMS sent: SMS enviado
+ Send shortage SMS: Enviar SMS faltas
+ Recalculate price: Recalcular precio
+ Update discount: Actualizar descuento
+ Add claim: Crear reclamación
+ Mark as reserved: Marcar como reservado
+ Unmark as reserved: Desmarcar como reservado
+ Refund...: Abono...
+ with warehouse: con almacén
+ without warehouse: sin almacén
+ Claim out of time: Reclamación fuera de plazo
+ Do you want to continue?: ¿Desea continuar?
+ Do you want to create a claim?: ¿Quieres crear una reclamación?
+ refundTicketCreated: 'The following refund ticket have been created: {ticketId}'
+
diff --git a/src/pages/Ticket/Card/TicketSummary.vue b/src/pages/Ticket/Card/TicketSummary.vue
index 0715cf7ba..295e8bca5 100644
--- a/src/pages/Ticket/Card/TicketSummary.vue
+++ b/src/pages/Ticket/Card/TicketSummary.vue
@@ -90,6 +90,7 @@ async function changeState(value) {
ref="summaryRef"
:url="`Tickets/${entityId}/summary`"
@on-fetch="(data) => setData(data)"
+ data-key="TicketSummary"
>
diff --git a/src/pages/Ticket/Card/TicketTransfer.vue b/src/pages/Ticket/Card/TicketTransfer.vue
new file mode 100644
index 000000000..9a22c764c
--- /dev/null
+++ b/src/pages/Ticket/Card/TicketTransfer.vue
@@ -0,0 +1,196 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ row.nickname }}
+ {{ row.name }}
+ {{ row.street }}
+ {{ row.postalCode }}
+ {{ row.city }}
+
+
+ {{ row.nickname }}
+ {{ row.name }}
+ {{ row.street }}
+ {{ row.postalCode }}
+ {{ row.city }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+es:
+ Sales to transfer: Líneas a transferir
+ Destination ticket: Ticket destinatario
+ Transfer to ticket: Transferir a ticket
+ New ticket: Nuevo ticket
+
diff --git a/src/pages/Ticket/TicketAdvance.vue b/src/pages/Ticket/TicketAdvance.vue
new file mode 100644
index 000000000..8b0a426dd
--- /dev/null
+++ b/src/pages/Ticket/TicketAdvance.vue
@@ -0,0 +1,710 @@
+
+
+
+ (itemPackingTypesOptions = data)"
+ />
+ (zonesOptions = data)"
+ />
+
+
+
+
+
+ {{ t('advanceTickets.advanceTickets') }}
+
+
+
+
+ {{ t('advanceTickets.advanceTicketsWithoutNegatives') }}
+
+
+
+
+
+
+
+
+
+ {{ t('advanceTickets.destination') }}
+ {{ toDateFormat(userParams.dateToAdvance) }}
+
+
+ {{ t('advanceTickets.origin') }}
+ {{ toDateFormat(userParams.dateFuture) }}
+
+
+
+
+
+
+
+ {{ col.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ col.label }}
+
+
+
+
+
+
+
+ {{
+ t('advanceTickets.originAgency', {
+ agency: row.futureAgency,
+ })
+ }}
+
+
+ {{
+ t('advanceTickets.destinationAgency', {
+ agency: row.agency,
+ })
+ }}
+
+
+
+
+
+
+
+
+ {{ row.id }}
+
+
+
+
+
+
+
+ {{ row.state }}
+
+
+
+
+
+
+ {{ toCurrency(row.totalWithVat || 0) }}
+
+
+
+
+
+
+ {{ row.futureId }}
+
+
+
+
+
+
+
+ {{ row.futureState }}
+
+
+
+
+
+
+ {{ toCurrency(row.futureTotalWithVat || 0) }}
+
+
+
+
+
+
+ {{ t('advanceTickets.errorsList') }}:
+
+ {{ error.id }}: {{ error.reason }}
+
+
+
+
+
+
+
diff --git a/src/pages/Ticket/TicketFuture.vue b/src/pages/Ticket/TicketFuture.vue
new file mode 100644
index 000000000..4db32de75
--- /dev/null
+++ b/src/pages/Ticket/TicketFuture.vue
@@ -0,0 +1,533 @@
+
+
+
+ (itemPackingTypesOptions = data)"
+ />
+
+
+
+
+
+ {{ t('futureTickets.futureTicket') }}
+
+
+
+
+
+
+
+
+
+
+ {{ t('futureTickets.origin') }}
+
+
+ {{ t('futureTickets.destination') }}
+
+
+
+
+
+
+
+ {{ col.label }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ col.label }}
+
+
+
+
+
+
+ {{ t('futureTickets.noVerified') }}
+
+
+
+
+ {{ t('futureTickets.purchaseRequest') }}
+
+
+
+
+ {{ t('futureTickets.noVisible') }}
+
+
+
+
+ {{ t('futureTickets.clientFrozen') }}
+
+
+
+
+ {{ t('futureTickets.risk') }}: {{ row.risk }}
+
+
+
+
+ {{ t('futureTickets.componentLack') }}
+
+
+
+
+ {{ t('futureTickets.rounding') }}
+
+
+
+
+
+
+
+ {{ row.id }}
+
+
+
+
+
+
+
+ {{ toDateTimeFormat(row.shipped) }}
+
+
+
+
+
+
+ {{ row.state }}
+
+
+
+
+
+
+ {{ toCurrency(row.totalWithVat || 0) }}
+
+
+
+
+
+
+ {{ row.futureId }}
+
+
+
+
+
+
+
+ {{ toDateTimeFormat(row.futureShipped) }}
+
+
+
+
+
+
+ {{ row.futureState }}
+
+
+
+
+
+
+
+
diff --git a/src/pages/Ticket/TicketWeekly.vue b/src/pages/Ticket/TicketWeekly.vue
new file mode 100644
index 000000000..5dbc99d22
--- /dev/null
+++ b/src/pages/Ticket/TicketWeekly.vue
@@ -0,0 +1,326 @@
+
+
+
+ (agencyModesOptions = data)"
+ />
+
+
+
+
+
+
+
+
+
+ redirectToTicketSummary(row.ticketFk)"
+ >
+
+
+
+
+
+
+
+
+
+
+ {{ row.ticketFk }}
+
+
+
+
+
+
+
+ {{ row.userName }}
+
+
+
+
+
+
+
+ {{ row.clientName }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ deleteWeekly(row.ticketFk)
+ )
+ "
+ class="q-ml-sm cursor-pointer"
+ color="primary"
+ name="delete"
+ size="sm"
+ >
+
+ {{ t('globals.delete') }}
+
+
+
+
+
+
+
+
+
+
+
+es:
+ You are going to delete this weekly ticket: Vas a eliminar este ticket programado
+ This ticket will be removed from weekly tickets! Continue anyway?: Este ticket se eliminará de tickets programados! ¿Continuar de todas formas?
+
diff --git a/src/pages/Ticket/locale/en.yml b/src/pages/Ticket/locale/en.yml
new file mode 100644
index 000000000..2c648e7f2
--- /dev/null
+++ b/src/pages/Ticket/locale/en.yml
@@ -0,0 +1,138 @@
+ticketSale:
+ id: Id
+ visible: Visible
+ available: Available
+ quantity: Quantity
+ item: Item
+ price: Price
+ discount: Disc
+ amount: Amount
+ packaging: Packaging
+ subtotal: Subtotal
+ tax: VAT
+ total: Total
+ history: History
+ claim: Claim
+ reserved: Reserved
+ noVisible: Not visible
+ hasComponentLack: Component lack
+ ok: Ok
+ state: State
+ more: More
+ shipped: Shipped
+ agency: Agency
+ address: Address
+advanceTickets:
+ origin: Origin
+ destination: Destination
+ originAgency: 'Origin agency: {agency}'
+ destinationAgency: 'Destination agency: {agency}'
+ ticketId: ID
+ ipt: IPT
+ state: State
+ liters: Liters
+ lines: Lines
+ import: Import
+ futureId: ID
+ futureIpt: IPT
+ futureState: State
+ futureLiters: Liters
+ futureZone: Zone
+ notMovableLines: Not movable
+ futureLines: Lines
+ futureImport: Import
+ advanceTickets: Advance tickets with negatives
+ advanceTicketTitle: Advance {selectedTickets} tickets
+ advanceTitleSubtitle: Advance {selectedTickets} tickets confirmation
+ noDeliveryZone: No delivery zone available for this landing date
+ moveTicketSuccess: 'Tickets moved successfully! {ticketsNumber}'
+ advanceTicketsWithoutNegatives: Advance tickets without negatives
+ advanceWithoutNegativeTitle: Advance tickets (without negatives)
+ advanceWithoutNegativeSubtitle: Advance {selectedTickets} tickets confirmation
+ errorsList: Errors list
+futureTickets:
+ problems: Problems
+ ticketId: ID
+ shipped: Date
+ ipt: IPT
+ state: State
+ liters: Liters
+ import: Import
+ availableLines: Available lines
+ futureId: ID
+ futureShipped: Date
+ futureIpt: IPT
+ futureState: State
+ noVerified: No verified data
+ noVisible: Not visible
+ purchaseRequest: Purchase request
+ clientFrozen: Client frozen
+ componentLack: Component lack
+ rounding: Rounding
+ risk: Risk
+ origin: Origin
+ destination: Destination
+ moveTicketTitle: Move tickets
+ moveTicketDialogSubtitle: 'Do you want to move {selectedTickets} tickets to the future?'
+ moveTicketSuccess: Tickets moved successfully!
+ searchInfo: Search future tickets by date
+ futureTicket: Future tickets
+basicData:
+ next: Next
+ back: Back
+ finalize: Finalize
+ client: Client
+ warehouse: Warehouse
+ address: Address
+ inactive: (Inactive)
+ noDeliveryZoneAvailable: No delivery zone available for this landing date
+ editAddress: Edit address
+ alias: Alias
+ company: Company
+ agency: Agency
+ zone: Zone
+ shipped: Shipped
+ landed: Landed
+ shippedHour: Shipped hour
+ priceDifference: Price difference
+ someFieldsAreInvalid: Some fields are invalid
+ item: Item
+ description: Description
+ movable: Movable
+ quantity: Quantity
+ pricePPU: Price (PPU)
+ newPricePPU: New (PPU)
+ difference: Difference
+ total: Total
+ price: Price
+ newPrice: New price
+ chargeDifference: Charge difference to
+ withoutNegatives: Create without negatives
+ withoutNegativesInfo: Clone this ticket with the changes and only sales availables
+ negativesConfirmTitle: Edit basic data
+ negativesConfirmMessage: Negatives are going to be generated, are you sure you want to advance all the lines?
+ chooseAnOption: Choose an option
+ unroutedTicket: The ticket has been unrouted
+card:
+ search: Search tickets
+ searchInfo: You can search by ticket id or alias
+purchaseRequest:
+ id: Id
+ description: Description
+ created: Created
+ requester: Requester
+ atender: Atender
+ quantity: Quantity
+ price: Price
+ saleFk: Item id
+ state: State
+ newRequest: New request
+weeklyTickets:
+ id: Ticket ID
+ client: Client
+ shipment: Shipment
+ agency: Agency
+ warehouse: Warehouse
+ salesperson: Salesperson
+ search: Search weekly tickets
+ searchInfo: Search weekly tickets by id or client id
diff --git a/src/pages/Ticket/locale/es.yml b/src/pages/Ticket/locale/es.yml
index 5348b29b9..3ce4c0545 100644
--- a/src/pages/Ticket/locale/es.yml
+++ b/src/pages/Ticket/locale/es.yml
@@ -1,2 +1,140 @@
-Search ticket: Buscar ticket
+card:
+ search: Buscar tickets
+ searchInfo: Buscar tickets por identificador o alias
+purchaseRequest:
+ Id: Id
+ description: Descripción
+ created: Fecha creación
+ requester: Solicitante
+ atender: Comprador
+ quantity: Cantidad
+ price: Precio
+ saleFk: Id artículo
+ state: Estado
+ newRequest: Crear petición
+basicData:
+ next: Siguiente
+ back: Anterior
+ finalize: Finalizar
+ client: Cliente
+ warehouse: Almacén
+ address: Consignatario
+ inactive: (Inactivo)
+ noDeliveryZoneAvailable: No hay una zona de reparto disponible para la fecha de envío seleccionada
+ editAddress: Editar dirección
+ alias: Alias
+ company: Empresa
+ agency: Agencia
+ zone: Zona
+ shipped: F. Envío
+ landed: F. Entrega
+ shippedHour: Hora de envío
+ priceDifference: Diferencia de precio
+ someFieldsAreInvalid: Algunos campos no son válidos
+ item: Artículo
+ description: Descripción
+ movable: Movible
+ quantity: Cantidad
+ pricePPU: Precio (Ud.)
+ newPricePPU: Nuevo (Ud.)
+ difference: Diferencia
+ total: Total
+ price: Precio
+ newPrice: Nuevo precio
+ chargeDifference: Cargar diferencia a
+ withoutNegatives: Crear sin negativos
+ withoutNegativesInfo: Clonar este ticket con los cambios y solo ventas disponibles
+ negativesConfirmTitle: Editar datos básicos
+ negativesConfirmMessage: Se van a generar negativos, ¿seguro que quieres adelantar todas las líneas?
+ chooseAnOption: Elige una opción
+ unroutedTicket: El ticket ha sido desenrutado
+weeklyTickets:
+ id: ID Ticket
+ client: Cliente
+ shipment: Salida
+ agency: Agencia
+ warehouse: Almacén
+ salesperson: Comercial
+ search: Buscar por tickets programados
+ searchInfo: Buscar tickets programados por el identificador o el identificador del cliente
+advanceTickets:
+ origin: Origen
+ destination: Destinatario
+ originAgency: 'Agencia origen: {agency}'
+ destinationAgency: 'Agencia destino: {agency}'
+ ticketId: ID
+ ipt: IPT
+ state: Estado
+ liters: Litros
+ lines: Líneas
+ import: Importe
+ futureId: ID
+ futureIpt: IPT
+ futureState: Estado
+ futureLiters: Litros
+ futureZone: Zona
+ notMovableLines: No movibles
+ futureLines: Líneas
+ futureImport: Importe
+ advanceTickets: Adelantar tickets con negativos
+ advanceTicketTitle: Advance tickets
+ advanceTitleSubtitle: '¿Desea adelantar {selectedTickets} tickets?'
+ noDeliveryZone: No hay una zona de reparto disponible para la fecha de envío seleccionada
+ moveTicketSuccess: 'Tickets movidos correctamente {ticketsNumber}'
+ advanceTicketsWithoutNegatives: Adelantar tickets sin negativos
+ advanceWithoutNegativeTitle: Adelantar tickets (sin negativos)
+ advanceWithoutNegativeSubtitle: '¿Desea adelantar {selectedTickets} tickets?'
+ errorsList: Lista de errores
+futureTickets:
+ problems: Problemas
+ ticketId: ID
+ shipped: Fecha
+ ipt: IPT
+ state: Estado
+ liters: Litros
+ import: Importe
+ availableLines: Líneas disponibles
+ futureId: ID
+ futureShipped: Fecha
+ futureIpt: IPT
+ futureState: Estado
+ noVerified: Sin datos comprobados
+ noVisible: No visible
+ purchaseRequest: Petición de compra
+ clientFrozen: Cliente congelado
+ risk: Riesgo
+ componentLack: Faltan componentes
+ rounding: Redondeo
+ origin: Origen
+ destination: Destino
+ moveTicketTitle: Mover tickets
+ moveTicketDialogSubtitle: '¿Desea mover {selectedTickets} tickets hacia el futuro?'
+ moveTicketSuccess: Tickets movidos correctamente
+ searchInfo: Buscar tickets por fecha
+ futureTicket: Tickets a futuro
+Search ticket: Buscar tickets
You can search by ticket id or alias: Puedes buscar por id o alias del ticket
+ticketSale:
+ id: Id
+ visible: Visible
+ available: Disponible
+ quantity: Cantidad
+ item: Artículo
+ price: Precio
+ discount: Dto
+ amount: Importe
+ packaging: Encajado
+ subtotal: Subtotal
+ tax: IVA
+ total: Total
+ history: Historial
+ claim: Reclamación
+ reserved: Reservado
+ noVisible: No visible
+ hasComponentLack: Faltan componentes
+ ok: Ok
+ state: Estado
+ more: Más
+ shipped: F. Envío
+ agency: Agencia
+ address: Consignatario
diff --git a/src/pages/Travel/Card/TravelSummary.vue b/src/pages/Travel/Card/TravelSummary.vue
index 91b36f0cf..88ddee9a2 100644
--- a/src/pages/Travel/Card/TravelSummary.vue
+++ b/src/pages/Travel/Card/TravelSummary.vue
@@ -237,6 +237,7 @@ const getLink = (param) => `#/travel/${entityId.value}/${param}`;
ref="summaryRef"
:url="`Travels/${entityId}/getTravel`"
@on-fetch="(data) => setTravelData(data)"
+ data-key="TravelSummary"
>
{{ travel.ref }} - {{ travel.id }}
diff --git a/src/pages/Travel/Card/TravelThermographs.vue b/src/pages/Travel/Card/TravelThermographs.vue
index d2195beb4..9f224154c 100644
--- a/src/pages/Travel/Card/TravelThermographs.vue
+++ b/src/pages/Travel/Card/TravelThermographs.vue
@@ -137,7 +137,7 @@ const removeThermograph = async (id) => {
data-key="TravelThermographs"
url="TravelThermographs"
:filter="thermographFilter"
- :params="{ travelFk: route.params.id }"
+ :params="{ travelFk: id }"
auto-load
>
diff --git a/src/pages/Wagon/WagonCounter.vue b/src/pages/Wagon/WagonCounter.vue
index 15a1ab7ba..70bbc9803 100644
--- a/src/pages/Wagon/WagonCounter.vue
+++ b/src/pages/Wagon/WagonCounter.vue
@@ -1,14 +1,12 @@
+
+
+
diff --git a/src/pages/Worker/Card/WorkerSummary.vue b/src/pages/Worker/Card/WorkerSummary.vue
index 6d6dde97b..319592fe9 100644
--- a/src/pages/Worker/Card/WorkerSummary.vue
+++ b/src/pages/Worker/Card/WorkerSummary.vue
@@ -66,7 +66,12 @@ const filter = {
-
+
{{ entity.id }} - {{ entity.firstName }} {{ entity.lastName }}
diff --git a/src/pages/Zone/Card/ZoneCard.vue b/src/pages/Zone/Card/ZoneCard.vue
index 1cbc01dd7..f92ee1e4e 100644
--- a/src/pages/Zone/Card/ZoneCard.vue
+++ b/src/pages/Zone/Card/ZoneCard.vue
@@ -22,6 +22,7 @@ const searchBarDataKeys = {
ZoneEvents: 'ZoneEvents',
};
+
import('src/pages/Ticket/TicketCreate.vue'),
},
+ {
+ name: 'TicketWeekly',
+ path: 'weekly',
+ meta: {
+ title: 'weeklyTickets',
+ icon: 'access_time',
+ },
+ component: () => import('src/pages/Ticket/TicketWeekly.vue'),
+ },
+ {
+ name: 'TicketFuture',
+ path: 'future',
+ meta: {
+ title: 'futureTickets',
+ icon: 'keyboard_double_arrow_right',
+ },
+ component: () => import('src/pages/Ticket/TicketFuture.vue'),
+ },
+ {
+ name: 'TicketAdvance',
+ path: 'advance',
+ meta: {
+ title: 'ticketAdvance',
+ icon: 'keyboard_double_arrow_left',
+ },
+ component: () => import('src/pages/Ticket/TicketAdvance.vue'),
+ },
],
},
{
@@ -64,7 +98,8 @@ export default {
title: 'basicData',
icon: 'vn:settings',
},
- component: () => import('src/pages/Ticket/Card/TicketBasicData.vue'),
+ component: () =>
+ import('src/pages/Ticket/Card/BasicData/TicketBasicDataView.vue'),
},
{
name: 'TicketSale',
@@ -75,6 +110,25 @@ export default {
},
component: () => import('src/pages/Ticket/Card/TicketSale.vue'),
},
+ {
+ path: 'request',
+ name: 'TicketPurchaseRequest',
+ meta: {
+ title: 'purchaseRequest',
+ icon: 'vn:buyrequest',
+ },
+ component: () =>
+ import('src/pages/Ticket/Card/TicketPurchaseRequest.vue'),
+ },
+ {
+ path: 'log',
+ name: 'TicketLog',
+ meta: {
+ title: 'log',
+ icon: 'history',
+ },
+ component: () => import('src/pages/Ticket/Card/TicketLog.vue'),
+ },
{
path: 'boxing',
name: 'TicketBoxing',
@@ -93,15 +147,6 @@ export default {
},
component: () => import('src/pages/Ticket/Card/TicketSms.vue'),
},
- {
- path: 'log',
- name: 'TicketLog',
- meta: {
- title: 'log',
- icon: 'history',
- },
- component: () => import('src/pages/Ticket/Card/TicketLog.vue'),
- },
],
},
],
diff --git a/src/router/modules/worker.js b/src/router/modules/worker.js
index 36ee55d8e..259253c06 100644
--- a/src/router/modules/worker.js
+++ b/src/router/modules/worker.js
@@ -23,6 +23,7 @@ export default {
'WorkerDms',
'WorkerTimeControl',
'WorkerLocker',
+ 'WorkerFormation',
],
},
children: [
@@ -176,6 +177,15 @@ export default {
},
component: () => import('src/pages/Worker/Card/WorkerLocker.vue'),
},
+ {
+ name: 'WorkerFormation',
+ path: 'formation',
+ meta: {
+ title: 'formation',
+ icon: 'clinical_notes',
+ },
+ component: () => import('src/pages/Worker/Card/WorkerFormation.vue'),
+ },
],
},
],