Merge branch 'dev' of https://gitea.verdnatura.es/verdnatura/salix-front into Fix-AddSearchbarToWagonModule
gitea/salix-front/pipeline/pr-dev Build queued...
Details
gitea/salix-front/pipeline/pr-dev Build queued...
Details
This commit is contained in:
commit
3d21c0cdb6
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "salix-front",
|
||||
"version": "24.44.0",
|
||||
"version": "24.50.0",
|
||||
"description": "Salix frontend",
|
||||
"productName": "Salix",
|
||||
"author": "Verdnatura",
|
||||
|
@ -64,4 +64,4 @@
|
|||
"vite": "^5.1.4",
|
||||
"vitest": "^0.31.1"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,155 +0,0 @@
|
|||
<script setup>
|
||||
import { reactive, ref, computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useRouter } from 'vue-router';
|
||||
|
||||
import FetchData from 'components/FetchData.vue';
|
||||
import VnRow from 'components/ui/VnRow.vue';
|
||||
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||
import VnInput from 'src/components/common/VnInput.vue';
|
||||
import FormModelPopup from './FormModelPopup.vue';
|
||||
import VnInputDate from './common/VnInputDate.vue';
|
||||
|
||||
const emit = defineEmits(['onDataSaved']);
|
||||
|
||||
const { t } = useI18n();
|
||||
const router = useRouter();
|
||||
|
||||
const manualInvoiceFormData = reactive({
|
||||
maxShipped: Date.vnNew(),
|
||||
});
|
||||
|
||||
const formModelPopupRef = ref();
|
||||
const invoiceOutSerialsOptions = ref([]);
|
||||
const taxAreasOptions = ref([]);
|
||||
const ticketsOptions = ref([]);
|
||||
const clientsOptions = ref([]);
|
||||
const isLoading = computed(() => formModelPopupRef.value?.isLoading);
|
||||
|
||||
const onDataSaved = async (formData, requestResponse) => {
|
||||
emit('onDataSaved', formData, requestResponse);
|
||||
if (requestResponse && requestResponse.id)
|
||||
router.push({ name: 'InvoiceOutSummary', params: { id: requestResponse.id } });
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<FetchData
|
||||
url="InvoiceOutSerials"
|
||||
:filter="{ where: { code: { neq: 'R' } }, order: ['code'] }"
|
||||
@on-fetch="(data) => (invoiceOutSerialsOptions = data)"
|
||||
auto-load
|
||||
/>
|
||||
<FetchData
|
||||
url="TaxAreas"
|
||||
:filter="{ order: ['code'] }"
|
||||
@on-fetch="(data) => (taxAreasOptions = data)"
|
||||
auto-load
|
||||
/>
|
||||
<FormModelPopup
|
||||
ref="formModelPopupRef"
|
||||
:title="t('Create manual invoice')"
|
||||
url-create="InvoiceOuts/createManualInvoice"
|
||||
model="invoiceOut"
|
||||
:form-initial-data="manualInvoiceFormData"
|
||||
@on-data-saved="onDataSaved"
|
||||
>
|
||||
<template #form-inputs="{ data }">
|
||||
<span v-if="isLoading" class="text-primary invoicing-text">
|
||||
<QIcon name="warning" class="fill-icon q-mr-sm" size="md" />
|
||||
{{ t('Invoicing in progress...') }}
|
||||
</span>
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
:label="t('Ticket')"
|
||||
:options="ticketsOptions"
|
||||
hide-selected
|
||||
option-label="id"
|
||||
option-value="id"
|
||||
v-model="data.ticketFk"
|
||||
@update:model-value="data.clientFk = null"
|
||||
url="Tickets"
|
||||
:where="{ refFk: null }"
|
||||
:fields="['id', 'nickname']"
|
||||
:filter-options="{ order: 'shipped DESC' }"
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel> #{{ scope.opt?.id }} </QItemLabel>
|
||||
<QItemLabel caption>{{ scope.opt?.nickname }}</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
<span class="row items-center" style="max-width: max-content">{{
|
||||
t('Or')
|
||||
}}</span>
|
||||
<VnSelect
|
||||
:label="t('Client')"
|
||||
:options="clientsOptions"
|
||||
hide-selected
|
||||
option-label="name"
|
||||
option-value="id"
|
||||
v-model="data.clientFk"
|
||||
@update:model-value="data.ticketFk = null"
|
||||
url="Clients"
|
||||
:fields="['id', 'name']"
|
||||
:filter-options="{ order: 'name ASC' }"
|
||||
/>
|
||||
<VnInputDate :label="t('Max date')" v-model="data.maxShipped" />
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
:label="t('Serial')"
|
||||
:options="invoiceOutSerialsOptions"
|
||||
hide-selected
|
||||
option-label="description"
|
||||
option-value="code"
|
||||
v-model="data.serial"
|
||||
/>
|
||||
<VnSelect
|
||||
:label="t('Area')"
|
||||
:options="taxAreasOptions"
|
||||
hide-selected
|
||||
option-label="code"
|
||||
option-value="code"
|
||||
v-model="data.taxArea"
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnInput
|
||||
:label="t('Reference')"
|
||||
type="textarea"
|
||||
v-model="data.reference"
|
||||
fill-input
|
||||
autogrow
|
||||
/>
|
||||
</VnRow>
|
||||
</template>
|
||||
</FormModelPopup>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.invoicing-text {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
color: $primary;
|
||||
font-size: 24px;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<i18n>
|
||||
es:
|
||||
Create manual invoice: Crear factura manual
|
||||
Ticket: Ticket
|
||||
Client: Cliente
|
||||
Max date: Fecha límite
|
||||
Serial: Serie
|
||||
Area: Area
|
||||
Reference: Referencia
|
||||
Or: O
|
||||
Invoicing in progress...: Facturación en progreso...
|
||||
</i18n>
|
|
@ -38,7 +38,7 @@ const onDataSaved = (dataSaved) => {
|
|||
@on-fetch="(data) => (warehousesOptions = data)"
|
||||
auto-load
|
||||
url="Warehouses"
|
||||
:filter="{ fields: ['id', 'name'], order: 'name ASC', limit: 30 }"
|
||||
:filter="{ fields: ['id', 'name'], order: 'name ASC' }"
|
||||
/>
|
||||
<FetchData
|
||||
@on-fetch="(data) => (temperaturesOptions = data)"
|
||||
|
|
|
@ -77,7 +77,7 @@ const isLoading = ref(false);
|
|||
const hasChanges = ref(false);
|
||||
const originalData = ref();
|
||||
const vnPaginateRef = ref();
|
||||
const formData = ref();
|
||||
const formData = ref([]);
|
||||
const saveButtonRef = ref(null);
|
||||
const watchChanges = ref();
|
||||
const formUrl = computed(() => $props.url);
|
||||
|
|
|
@ -50,25 +50,25 @@ const loading = ref(false);
|
|||
|
||||
const tableColumns = computed(() => [
|
||||
{
|
||||
label: t('entry.buys.id'),
|
||||
label: t('globals.id'),
|
||||
name: 'id',
|
||||
field: 'id',
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('entry.buys.name'),
|
||||
label: t('globals.name'),
|
||||
name: 'name',
|
||||
field: 'name',
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('entry.buys.size'),
|
||||
label: t('globals.size'),
|
||||
name: 'size',
|
||||
field: 'size',
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('entry.buys.producer'),
|
||||
label: t('globals.producer'),
|
||||
name: 'producerName',
|
||||
field: 'producer',
|
||||
align: 'left',
|
||||
|
@ -152,10 +152,10 @@ const selectItem = ({ id }) => {
|
|||
</span>
|
||||
<h1 class="title">{{ t('Filter item') }}</h1>
|
||||
<VnRow>
|
||||
<VnInput :label="t('entry.buys.name')" v-model="itemFilterParams.name" />
|
||||
<VnInput :label="t('globals.name')" v-model="itemFilterParams.name" />
|
||||
<VnInput :label="t('entry.buys.size')" v-model="itemFilterParams.size" />
|
||||
<VnSelect
|
||||
:label="t('entry.buys.producer')"
|
||||
:label="t('globals.producer')"
|
||||
:options="producersOptions"
|
||||
hide-selected
|
||||
option-label="name"
|
||||
|
@ -163,7 +163,7 @@ const selectItem = ({ id }) => {
|
|||
v-model="itemFilterParams.producerFk"
|
||||
/>
|
||||
<VnSelect
|
||||
:label="t('entry.buys.type')"
|
||||
:label="t('globals.type')"
|
||||
:options="ItemTypesOptions"
|
||||
hide-selected
|
||||
option-label="name"
|
||||
|
|
|
@ -48,13 +48,13 @@ const loading = ref(false);
|
|||
|
||||
const tableColumns = computed(() => [
|
||||
{
|
||||
label: t('entry.basicData.id'),
|
||||
label: t('globals.id'),
|
||||
name: 'id',
|
||||
field: 'id',
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('entry.basicData.warehouseOut'),
|
||||
label: t('globals.warehouseOut'),
|
||||
name: 'warehouseOutFk',
|
||||
field: 'warehouseOutFk',
|
||||
align: 'left',
|
||||
|
@ -62,7 +62,7 @@ const tableColumns = computed(() => [
|
|||
warehousesOptions.value.find((warehouse) => warehouse.id === val).name,
|
||||
},
|
||||
{
|
||||
label: t('entry.basicData.warehouseIn'),
|
||||
label: t('globals.warehouseIn'),
|
||||
name: 'warehouseInFk',
|
||||
field: 'warehouseInFk',
|
||||
align: 'left',
|
||||
|
@ -70,14 +70,14 @@ const tableColumns = computed(() => [
|
|||
warehousesOptions.value.find((warehouse) => warehouse.id === val).name,
|
||||
},
|
||||
{
|
||||
label: t('entry.basicData.shipped'),
|
||||
label: t('globals.shipped'),
|
||||
name: 'shipped',
|
||||
field: 'shipped',
|
||||
align: 'left',
|
||||
format: (val) => toDate(val),
|
||||
},
|
||||
{
|
||||
label: t('entry.basicData.landed'),
|
||||
label: t('globals.landed'),
|
||||
name: 'landed',
|
||||
field: 'landed',
|
||||
align: 'left',
|
||||
|
@ -146,7 +146,7 @@ const selectTravel = ({ id }) => {
|
|||
<h1 class="title">{{ t('Filter travels') }}</h1>
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
:label="t('entry.basicData.agency')"
|
||||
:label="t('globals.agency')"
|
||||
:options="agenciesOptions"
|
||||
hide-selected
|
||||
option-label="name"
|
||||
|
@ -154,7 +154,7 @@ const selectTravel = ({ id }) => {
|
|||
v-model="travelFilterParams.agencyModeFk"
|
||||
/>
|
||||
<VnSelect
|
||||
:label="t('entry.basicData.warehouseOut')"
|
||||
:label="t('globals.warehouseOut')"
|
||||
:options="warehousesOptions"
|
||||
hide-selected
|
||||
option-label="name"
|
||||
|
@ -162,7 +162,7 @@ const selectTravel = ({ id }) => {
|
|||
v-model="travelFilterParams.warehouseOutFk"
|
||||
/>
|
||||
<VnSelect
|
||||
:label="t('entry.basicData.warehouseIn')"
|
||||
:label="t('globals.warehouseIn')"
|
||||
:options="warehousesOptions"
|
||||
hide-selected
|
||||
option-label="name"
|
||||
|
@ -170,11 +170,11 @@ const selectTravel = ({ id }) => {
|
|||
v-model="travelFilterParams.warehouseInFk"
|
||||
/>
|
||||
<VnInputDate
|
||||
:label="t('entry.basicData.shipped')"
|
||||
:label="t('globals.shipped')"
|
||||
v-model="travelFilterParams.shipped"
|
||||
/>
|
||||
<VnInputDate
|
||||
:label="t('entry.basicData.landed')"
|
||||
:label="t('globals.landed')"
|
||||
v-model="travelFilterParams.landed"
|
||||
/>
|
||||
</VnRow>
|
||||
|
|
|
@ -248,7 +248,7 @@ const removeTag = (index, params, search) => {
|
|||
>
|
||||
<QItemSection class="col">
|
||||
<VnSelect
|
||||
:label="t('components.itemsFilterPanel.tag')"
|
||||
:label="t('globals.tag')"
|
||||
v-model="value.selectedTag"
|
||||
:options="tagOptions"
|
||||
option-label="name"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
<script setup>
|
||||
import axios from 'axios';
|
||||
import { onMounted, watch, ref, reactive } from 'vue';
|
||||
import { onMounted, watch, ref, reactive, computed } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { QSeparator, useQuasar } from 'quasar';
|
||||
import { useRoute } from 'vue-router';
|
||||
|
@ -9,6 +9,7 @@ import { toLowerCamel } from 'src/filters';
|
|||
import routes from 'src/router/modules';
|
||||
import LeftMenuItem from './LeftMenuItem.vue';
|
||||
import LeftMenuItemGroup from './LeftMenuItemGroup.vue';
|
||||
import VnInput from './common/VnInput.vue';
|
||||
|
||||
const { t } = useI18n();
|
||||
const route = useRoute();
|
||||
|
@ -21,17 +22,52 @@ const props = defineProps({
|
|||
default: 'main',
|
||||
},
|
||||
});
|
||||
|
||||
const initialized = ref(false);
|
||||
const items = ref([]);
|
||||
const expansionItemElements = reactive({});
|
||||
const pinnedModules = computed(() => {
|
||||
const map = new Map();
|
||||
items.value.forEach((item) => item.isPinned && map.set(item.name, item));
|
||||
return map;
|
||||
});
|
||||
const search = ref(null);
|
||||
|
||||
const filteredItems = computed(() => {
|
||||
if (!search.value) return items.value;
|
||||
const normalizedSearch = normalize(search.value);
|
||||
return items.value.filter((item) => {
|
||||
const locale = normalize(t(item.title));
|
||||
return locale.includes(normalizedSearch);
|
||||
});
|
||||
});
|
||||
|
||||
const filteredPinnedModules = computed(() => {
|
||||
if (!search.value) return pinnedModules.value;
|
||||
const normalizedSearch = search.value
|
||||
.normalize('NFD')
|
||||
.replace(/[\u0300-\u036f]/g, '')
|
||||
.toLowerCase();
|
||||
const map = new Map();
|
||||
for (const [key, pinnedModule] of pinnedModules.value) {
|
||||
const locale = t(pinnedModule.title)
|
||||
.normalize('NFD')
|
||||
.replace(/[\u0300-\u036f]/g, '')
|
||||
.toLowerCase();
|
||||
if (locale.includes(normalizedSearch)) map.set(key, pinnedModule);
|
||||
}
|
||||
return map;
|
||||
});
|
||||
|
||||
onMounted(async () => {
|
||||
await navigation.fetchPinned();
|
||||
getRoutes();
|
||||
initialized.value = true;
|
||||
});
|
||||
|
||||
watch(
|
||||
() => route.matched,
|
||||
() => {
|
||||
if (!initialized.value) return;
|
||||
items.value = [];
|
||||
getRoutes();
|
||||
},
|
||||
|
@ -66,8 +102,6 @@ function addChildren(module, route, parent) {
|
|||
}
|
||||
}
|
||||
|
||||
const items = ref([]);
|
||||
|
||||
function getRoutes() {
|
||||
if (props.source === 'main') {
|
||||
const modules = Object.assign([], navigation.getModules().value);
|
||||
|
@ -123,21 +157,57 @@ async function togglePinned(item, event) {
|
|||
const handleItemExpansion = (itemName) => {
|
||||
expansionItemElements[itemName].scrollToLastElement();
|
||||
};
|
||||
|
||||
function normalize(text) {
|
||||
return text
|
||||
.normalize('NFD')
|
||||
.replace(/[\u0300-\u036f]/g, '')
|
||||
.toLowerCase();
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<QList padding class="column-max-width">
|
||||
<template v-if="$props.source === 'main'">
|
||||
<template v-if="$route?.matched[1]?.name === 'Dashboard'">
|
||||
<QItem class="header">
|
||||
<QItemSection avatar>
|
||||
<QIcon name="view_module" />
|
||||
</QItemSection>
|
||||
<QItemSection> {{ t('globals.modules') }}</QItemSection>
|
||||
<QItem class="q-pb-md">
|
||||
<VnInput
|
||||
v-model="search"
|
||||
:label="t('Search modules')"
|
||||
class="full-width"
|
||||
filled
|
||||
dense
|
||||
/>
|
||||
</QItem>
|
||||
<QSeparator />
|
||||
<template v-for="item in items" :key="item.name">
|
||||
<template v-if="item.children">
|
||||
<template v-if="filteredPinnedModules.size">
|
||||
<LeftMenuItem
|
||||
v-for="[key, pinnedModule] of filteredPinnedModules"
|
||||
:key="key"
|
||||
:item="pinnedModule"
|
||||
group="modules"
|
||||
>
|
||||
<template #side>
|
||||
<QBtn
|
||||
v-if="pinnedModule.isPinned === true"
|
||||
@click="togglePinned(pinnedModule, $event)"
|
||||
icon="remove_circle"
|
||||
size="xs"
|
||||
flat
|
||||
round
|
||||
>
|
||||
<QTooltip>
|
||||
{{ t('components.leftMenu.removeFromPinned') }}
|
||||
</QTooltip>
|
||||
</QBtn>
|
||||
</template>
|
||||
</LeftMenuItem>
|
||||
<QSeparator />
|
||||
</template>
|
||||
<template v-for="item in filteredItems" :key="item.name">
|
||||
<template
|
||||
v-if="item.children && !filteredPinnedModules.has(item.name)"
|
||||
>
|
||||
<LeftMenuItem :item="item" group="modules">
|
||||
<template #side>
|
||||
<QBtn
|
||||
|
@ -256,3 +326,7 @@ const handleItemExpansion = (itemName) => {
|
|||
color: var(--vn-label-color);
|
||||
}
|
||||
</style>
|
||||
<i18n>
|
||||
es:
|
||||
Search modules: Buscar módulos
|
||||
</i18n>
|
||||
|
|
|
@ -25,7 +25,7 @@ const $props = defineProps({
|
|||
},
|
||||
searchUrl: {
|
||||
type: String,
|
||||
default: 'params',
|
||||
default: 'table',
|
||||
},
|
||||
});
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@ const $props = defineProps({
|
|||
},
|
||||
searchUrl: {
|
||||
type: String,
|
||||
default: 'params',
|
||||
default: 'table',
|
||||
},
|
||||
vertical: {
|
||||
type: Boolean,
|
||||
|
|
|
@ -162,9 +162,7 @@ onMounted(() => {
|
|||
: $props.defaultMode;
|
||||
stateStore.rightDrawer = quasar.screen.gt.xs;
|
||||
columnsVisibilitySkipped.value = [
|
||||
...splittedColumns.value.columns
|
||||
.filter((c) => c.visible == false)
|
||||
.map((c) => c.name),
|
||||
...splittedColumns.value.columns.filter((c) => !c.visible).map((c) => c.name),
|
||||
...['tableActions'],
|
||||
];
|
||||
createForm.value = $props.create;
|
||||
|
@ -237,7 +235,7 @@ function splitColumns(columns) {
|
|||
if (col.create) splittedColumns.value.create.push(col);
|
||||
if (col.cardVisible) splittedColumns.value.cardVisible.push(col);
|
||||
if ($props.isEditable && col.disable == null) col.disable = false;
|
||||
if ($props.useModel && col.columnFilter != false)
|
||||
if ($props.useModel && col.columnFilter !== false)
|
||||
col.columnFilter = { inWhere: true, ...col.columnFilter };
|
||||
splittedColumns.value.columns.push(col);
|
||||
}
|
||||
|
|
|
@ -163,7 +163,7 @@ function addDefaultData(data) {
|
|||
/>
|
||||
<QFile
|
||||
ref="inputFileRef"
|
||||
:label="t('entry.buys.file')"
|
||||
:label="t('globals.file')"
|
||||
v-model="dms.files"
|
||||
:multiple="false"
|
||||
:accept="allowedContentTypes"
|
||||
|
|
|
@ -1,8 +1,7 @@
|
|||
<script setup>
|
||||
import { onMounted, watch, computed, ref } from 'vue';
|
||||
import { onMounted, watch, computed, ref, useAttrs } from 'vue';
|
||||
import { date } from 'quasar';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useAttrs } from 'vue';
|
||||
import VnDate from './VnDate.vue';
|
||||
import { useRequired } from 'src/composables/useRequired';
|
||||
|
||||
|
|
|
@ -2,5 +2,12 @@
|
|||
const model = defineModel({ type: Boolean, required: true });
|
||||
</script>
|
||||
<template>
|
||||
<QRadio v-model="model" v-bind="$attrs" dense :dark="true" class="q-mr-sm" />
|
||||
<QRadio
|
||||
v-model="model"
|
||||
v-bind="$attrs"
|
||||
dense
|
||||
:dark="true"
|
||||
class="q-mr-sm"
|
||||
size="xs"
|
||||
/>
|
||||
</template>
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
<script setup>
|
||||
import { ref, toRefs, computed, watch, onMounted, useAttrs } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import FetchData from 'src/components/FetchData.vue';
|
||||
import { useArrayData } from 'src/composables/useArrayData';
|
||||
import { useRequired } from 'src/composables/useRequired';
|
||||
import dataByOrder from 'src/utils/dataByOrder';
|
||||
|
||||
const emit = defineEmits(['update:modelValue', 'update:options', 'remove']);
|
||||
const $attrs = useAttrs();
|
||||
const { t } = useI18n();
|
||||
|
@ -88,6 +90,10 @@ const $props = defineProps({
|
|||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
dataKey: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
|
||||
const mixinRules = [requiredFieldRule, ...($attrs.rules ?? [])];
|
||||
|
@ -96,14 +102,14 @@ const { optionLabel, optionValue, optionFilter, optionFilterValue, options, mode
|
|||
const myOptions = ref([]);
|
||||
const myOptionsOriginal = ref([]);
|
||||
const vnSelectRef = ref();
|
||||
const dataRef = ref();
|
||||
const lastVal = ref();
|
||||
const noOneText = t('globals.noOne');
|
||||
const noOneOpt = ref({
|
||||
[optionValue.value]: false,
|
||||
[optionLabel.value]: noOneText,
|
||||
});
|
||||
|
||||
const isLoading = ref(false);
|
||||
const useURL = computed(() => $props.url);
|
||||
const value = computed({
|
||||
get() {
|
||||
return $props.modelValue;
|
||||
|
@ -119,7 +125,7 @@ watch(options, (newValue) => {
|
|||
});
|
||||
|
||||
watch(modelValue, async (newValue) => {
|
||||
if (!myOptions.value.some((option) => option[optionValue.value] == newValue))
|
||||
if (!myOptions?.value?.some((option) => option[optionValue.value] == newValue))
|
||||
await fetchFilter(newValue);
|
||||
|
||||
if ($props.noOne) myOptions.value.unshift(noOneOpt.value);
|
||||
|
@ -127,17 +133,25 @@ watch(modelValue, async (newValue) => {
|
|||
|
||||
onMounted(() => {
|
||||
setOptions(options.value);
|
||||
if ($props.url && $props.modelValue && !findKeyInOptions())
|
||||
if (useURL.value && $props.modelValue && !findKeyInOptions())
|
||||
fetchFilter($props.modelValue);
|
||||
if ($props.focusOnMount) setTimeout(() => vnSelectRef.value.showPopup(), 300);
|
||||
});
|
||||
|
||||
defineExpose({ opts: myOptions });
|
||||
|
||||
const arrayDataKey =
|
||||
$props.dataKey ?? ($props.url?.length > 0 ? $props.url : $attrs.name ?? $attrs.label);
|
||||
|
||||
const arrayData = useArrayData(arrayDataKey, { url: $props.url, searchUrl: false });
|
||||
|
||||
function findKeyInOptions() {
|
||||
if (!$props.options) return;
|
||||
return filter($props.modelValue, $props.options)?.length;
|
||||
}
|
||||
|
||||
function setOptions(data) {
|
||||
data = dataByOrder(data, $props.sortBy);
|
||||
myOptions.value = JSON.parse(JSON.stringify(data));
|
||||
myOptionsOriginal.value = JSON.parse(JSON.stringify(data));
|
||||
emit('update:options', data);
|
||||
|
@ -165,7 +179,7 @@ function filter(val, options) {
|
|||
}
|
||||
|
||||
async function fetchFilter(val) {
|
||||
if (!$props.url || !dataRef.value) return;
|
||||
if (!$props.url) return;
|
||||
|
||||
const { fields, include, sortBy, limit } = $props;
|
||||
const key =
|
||||
|
@ -187,8 +201,8 @@ async function fetchFilter(val) {
|
|||
const fetchOptions = { where, include, limit };
|
||||
if (fields) fetchOptions.fields = fields;
|
||||
if (sortBy) fetchOptions.order = sortBy;
|
||||
|
||||
return dataRef.value.fetch(fetchOptions);
|
||||
arrayData.reset(['skip', 'filter.skip', 'page']);
|
||||
return (await arrayData.applyFilter({ filter: fetchOptions }))?.data;
|
||||
}
|
||||
|
||||
async function filterHandler(val, update) {
|
||||
|
@ -228,20 +242,23 @@ function nullishToTrue(value) {
|
|||
|
||||
const getVal = (val) => ($props.useLike ? { like: `%${val}%` } : val);
|
||||
|
||||
defineExpose({ opts: myOptions });
|
||||
async function onScroll({ to, direction, from, index }) {
|
||||
const lastIndex = myOptions.value.length - 1;
|
||||
|
||||
if (from === 0 && index === 0) return;
|
||||
if (!useURL.value && !$props.fetchRef) return;
|
||||
if (direction === 'decrease') return;
|
||||
if (to === lastIndex && arrayData.store.hasMoreData && !isLoading.value) {
|
||||
isLoading.value = true;
|
||||
await arrayData.loadMore();
|
||||
setOptions(arrayData.store.data);
|
||||
vnSelectRef.value.scrollTo(lastIndex);
|
||||
isLoading.value = false;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<FetchData
|
||||
ref="dataRef"
|
||||
:url="$props.url"
|
||||
@on-fetch="(data) => setOptions(data)"
|
||||
:where="where || { [optionValue]: value }"
|
||||
:limit="limit"
|
||||
:sort-by="sortBy"
|
||||
:fields="fields"
|
||||
:params="params"
|
||||
/>
|
||||
<QSelect
|
||||
v-model="value"
|
||||
:options="myOptions"
|
||||
|
@ -260,6 +277,9 @@ defineExpose({ opts: myOptions });
|
|||
:rules="mixinRules"
|
||||
virtual-scroll-slice-size="options.length"
|
||||
hide-bottom-space
|
||||
:input-debounce="useURL ? '300' : '0'"
|
||||
:loading="isLoading"
|
||||
@virtual-scroll="onScroll"
|
||||
>
|
||||
<template v-if="isClearable" #append>
|
||||
<QIcon
|
||||
|
|
|
@ -83,7 +83,7 @@ async function fetch() {
|
|||
<slot name="header" :entity="entity" dense>
|
||||
<VnLv :label="`${entity.id} -`" :value="entity.name" />
|
||||
</slot>
|
||||
<slot name="header-right">
|
||||
<slot name="header-right" :entity="entity">
|
||||
<span></span>
|
||||
</slot>
|
||||
</div>
|
||||
|
|
|
@ -37,7 +37,7 @@ const $props = defineProps({
|
|||
},
|
||||
hiddenTags: {
|
||||
type: Array,
|
||||
default: () => ['filter', 'search', 'or', 'and'],
|
||||
default: () => ['filter', 'or', 'and'],
|
||||
},
|
||||
customTags: {
|
||||
type: Array,
|
||||
|
@ -49,7 +49,7 @@ const $props = defineProps({
|
|||
},
|
||||
searchUrl: {
|
||||
type: String,
|
||||
default: 'params',
|
||||
default: 'table',
|
||||
},
|
||||
redirect: {
|
||||
type: Boolean,
|
||||
|
@ -57,12 +57,10 @@ const $props = defineProps({
|
|||
},
|
||||
});
|
||||
|
||||
defineExpose({ search, sanitizer });
|
||||
const emit = defineEmits([
|
||||
'update:modelValue',
|
||||
'refresh',
|
||||
'clear',
|
||||
'search',
|
||||
'init',
|
||||
'remove',
|
||||
'setUserParams',
|
||||
|
@ -170,9 +168,29 @@ const tagsList = computed(() => {
|
|||
return tagList;
|
||||
});
|
||||
|
||||
const formatTags = (tags) => {
|
||||
const formattedTags = [];
|
||||
tags.forEach((tag) => {
|
||||
if (tag.label === 'and') {
|
||||
tag.value.forEach((item) => {
|
||||
for (const key in item) {
|
||||
formattedTags.push({ label: key, value: item[key] });
|
||||
}
|
||||
});
|
||||
} else {
|
||||
formattedTags.push(tag);
|
||||
}
|
||||
});
|
||||
return formattedTags;
|
||||
};
|
||||
|
||||
const tags = computed(() => {
|
||||
return tagsList.value.filter((tag) => !($props.customTags || []).includes(tag.label));
|
||||
const filteredTags = tagsList.value.filter(
|
||||
(tag) => !($props.customTags || []).includes(tag.label)
|
||||
);
|
||||
return formatTags(filteredTags);
|
||||
});
|
||||
|
||||
const customTags = computed(() =>
|
||||
tagsList.value.filter((tag) => ($props.customTags || []).includes(tag.label))
|
||||
);
|
||||
|
@ -193,13 +211,20 @@ function formatValue(value) {
|
|||
|
||||
function sanitizer(params) {
|
||||
for (const [key, value] of Object.entries(params)) {
|
||||
if (value && typeof value === 'object') {
|
||||
if (key === 'and' && Array.isArray(value)) {
|
||||
value.forEach((item) => {
|
||||
Object.assign(params, item);
|
||||
});
|
||||
delete params[key];
|
||||
} else if (value && typeof value === 'object') {
|
||||
const param = Object.values(value)[0];
|
||||
if (typeof param == 'string') params[key] = param.replaceAll('%', '');
|
||||
}
|
||||
}
|
||||
return params;
|
||||
}
|
||||
|
||||
defineExpose({ search, sanitizer, userParams });
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
|
|
@ -1,16 +1,49 @@
|
|||
<script setup>
|
||||
defineProps({ phoneNumber: { type: [String, Number], default: null } });
|
||||
import { reactive, useAttrs, onBeforeMount, capitalize } from 'vue';
|
||||
import axios from 'axios';
|
||||
const props = defineProps({
|
||||
phoneNumber: { type: [String, Number], default: null },
|
||||
channel: { type: Number, default: null },
|
||||
});
|
||||
|
||||
const config = reactive({
|
||||
sip: { icon: 'phone', href: `sip:${props.phoneNumber}` },
|
||||
'say-simple': {
|
||||
icon: 'vn:saysimple',
|
||||
href: null,
|
||||
channel: props.channel,
|
||||
},
|
||||
});
|
||||
const type = Object.keys(config).find((key) => key in useAttrs()) || 'sip';
|
||||
|
||||
onBeforeMount(async () => {
|
||||
let { channel } = config[type];
|
||||
|
||||
if (type === 'say-simple') {
|
||||
const { url, defaultChannel } = (await axios.get('SaySimpleConfigs/findOne'))
|
||||
.data;
|
||||
if (!channel) channel = defaultChannel;
|
||||
|
||||
config[
|
||||
type
|
||||
].href = `${url}?customerIdentity=%2B${props.phoneNumber}&channelId=${channel}`;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<template>
|
||||
<QBtn
|
||||
v-if="phoneNumber"
|
||||
flat
|
||||
round
|
||||
icon="phone"
|
||||
:icon="config[type].icon"
|
||||
size="sm"
|
||||
color="primary"
|
||||
padding="none"
|
||||
:href="`sip:${phoneNumber}`"
|
||||
:href="config[type].href"
|
||||
@click.stop
|
||||
/>
|
||||
>
|
||||
<QTooltip>
|
||||
{{ capitalize(type).replace('-', '') }}
|
||||
</QTooltip>
|
||||
</QBtn>
|
||||
</template>
|
||||
|
|
|
@ -65,13 +65,9 @@ onBeforeRouteLeave((to, from, next) => {
|
|||
auto-load
|
||||
@on-fetch="(data) => (observationTypes = data)"
|
||||
/>
|
||||
<QCard class="q-pa-xs q-mb-xl full-width" v-if="$props.addNote">
|
||||
<QCard class="q-pa-xs q-mb-lg full-width" v-if="$props.addNote">
|
||||
<QCardSection horizontal>
|
||||
<VnAvatar :worker-id="currentUser.id" size="md" />
|
||||
<div class="full-width row justify-between q-pa-xs">
|
||||
<VnUserLink :name="t('New note')" :worker-id="currentUser.id" />
|
||||
{{ t('globals.now') }}
|
||||
</div>
|
||||
{{ t('New note') }}
|
||||
</QCardSection>
|
||||
<QCardSection class="q-px-xs q-my-none q-py-none">
|
||||
<VnRow class="full-width">
|
||||
|
@ -144,7 +140,7 @@ onBeforeRouteLeave((to, from, next) => {
|
|||
<div class="full-width row justify-between q-pa-xs">
|
||||
<div>
|
||||
<VnUserLink
|
||||
:name="`${note.worker.user.nickname}`"
|
||||
:name="`${note.worker.user.name}`"
|
||||
:worker-id="note.worker.id"
|
||||
/>
|
||||
<QBadge
|
||||
|
|
|
@ -44,7 +44,7 @@ const props = defineProps({
|
|||
},
|
||||
limit: {
|
||||
type: Number,
|
||||
default: 10,
|
||||
default: 20,
|
||||
},
|
||||
userParams: {
|
||||
type: Object,
|
||||
|
@ -100,7 +100,7 @@ const arrayData = useArrayData(props.dataKey, {
|
|||
const store = arrayData.store;
|
||||
|
||||
onMounted(async () => {
|
||||
if (props.autoLoad) await fetch();
|
||||
if (props.autoLoad && !store.data?.length) await fetch();
|
||||
mounted.value = true;
|
||||
});
|
||||
|
||||
|
@ -115,7 +115,11 @@ watch(
|
|||
|
||||
watch(
|
||||
() => store.data,
|
||||
(data) => emit('onChange', data)
|
||||
(data) => {
|
||||
if (!mounted.value) return;
|
||||
emit('onChange', data);
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
watch(
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<div class="vn-row q-gutter-md q-mb-md">
|
||||
<div class="vn-row q-gutter-md">
|
||||
<slot />
|
||||
</div>
|
||||
</template>
|
||||
|
@ -18,6 +18,9 @@
|
|||
&:not(.wrap) {
|
||||
flex-direction: column;
|
||||
}
|
||||
&[fixed] {
|
||||
flex-direction: row;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
|
|
@ -45,7 +45,7 @@ const props = defineProps({
|
|||
},
|
||||
limit: {
|
||||
type: Number,
|
||||
default: 10,
|
||||
default: 20,
|
||||
},
|
||||
userParams: {
|
||||
type: Object,
|
||||
|
|
|
@ -75,18 +75,10 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
|||
limit: store.limit,
|
||||
};
|
||||
|
||||
let exprFilter;
|
||||
let userParams = { ...store.userParams };
|
||||
if (store?.exprBuilder) {
|
||||
const where = buildFilter(userParams, (param, value) => {
|
||||
const res = store.exprBuilder(param, value);
|
||||
if (res) delete userParams[param];
|
||||
return res;
|
||||
});
|
||||
exprFilter = where ? { where } : null;
|
||||
}
|
||||
|
||||
Object.assign(filter, store.userFilter, exprFilter);
|
||||
Object.assign(filter, store.userFilter);
|
||||
|
||||
let where;
|
||||
if (filter?.where || store.filter?.where)
|
||||
where = Object.assign(filter?.where ?? {}, store.filter?.where ?? {});
|
||||
|
@ -96,11 +88,28 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
|||
|
||||
Object.assign(params, userParams);
|
||||
params.filter.skip = store.skip;
|
||||
if (store.order && store.order.length) params.filter.order = store.order;
|
||||
if (store?.order && typeof store?.order == 'string') store.order = [store.order];
|
||||
if (store.order?.length) params.filter.order = [...store.order];
|
||||
else delete params.filter.order;
|
||||
|
||||
store.currentFilter = JSON.parse(JSON.stringify(params));
|
||||
delete store.currentFilter.filter.include;
|
||||
store.currentFilter.filter = JSON.stringify(store.currentFilter.filter);
|
||||
|
||||
let exprFilter;
|
||||
if (store?.exprBuilder) {
|
||||
exprFilter = buildFilter(params, (param, value) => {
|
||||
if (param == 'filter') return;
|
||||
const res = store.exprBuilder(param, value);
|
||||
if (res) delete params[param];
|
||||
return res;
|
||||
});
|
||||
}
|
||||
|
||||
if (params.filter.where || exprFilter)
|
||||
params.filter.where = { ...params.filter.where, ...exprFilter };
|
||||
params.filter = JSON.stringify(params.filter);
|
||||
store.currentFilter = params;
|
||||
|
||||
store.isLoading = true;
|
||||
const response = await axios.get(store.url, {
|
||||
signal: canceller.signal,
|
||||
|
@ -247,6 +256,7 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
|||
}
|
||||
|
||||
function updateStateParams() {
|
||||
if (!route?.path) return;
|
||||
const usesModuleName = userOptions.moduleName;
|
||||
const newUrl = { path: route.path, query: { ...(route.query ?? {}) } };
|
||||
if (store?.searchUrl)
|
||||
|
@ -280,7 +290,7 @@ export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
|||
const pushUrl = { path: to };
|
||||
if (to.endsWith('/list') || to.endsWith('/'))
|
||||
pushUrl.query = newUrl.query;
|
||||
destroy();
|
||||
else destroy();
|
||||
return router.push(pushUrl);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
import { openURL } from 'quasar';
|
||||
const defaultWindowFeatures = {
|
||||
noopener: true,
|
||||
noreferrer: true,
|
||||
};
|
||||
export default function (url, windowFeatures = defaultWindowFeatures, fn = undefined) {
|
||||
openURL(url, fn, windowFeatures);
|
||||
}
|
|
@ -9,12 +9,20 @@ function parseJSON(str, fallback) {
|
|||
}
|
||||
export default function (route, param) {
|
||||
// catch route query params
|
||||
const params = parseJSON(route?.query?.params, {});
|
||||
|
||||
const params = parseJSON(route?.query?.table, {});
|
||||
// extract and parse filter from params
|
||||
const { filter: filterStr = '{}' } = params;
|
||||
|
||||
const where = parseJSON(filterStr, {})?.where;
|
||||
if (where && where[param] !== undefined) {
|
||||
|
||||
if (where && !param) {
|
||||
return where;
|
||||
} else if (where && where.and) {
|
||||
const foundParam = where.and.find((p) => p[param]);
|
||||
if (foundParam) {
|
||||
return foundParam[param];
|
||||
}
|
||||
} else if (where && where[param]) {
|
||||
return where[param];
|
||||
}
|
||||
return null;
|
||||
|
|
|
@ -59,7 +59,7 @@ globals:
|
|||
downloadCSVSuccess: CSV downloaded successfully
|
||||
reference: Reference
|
||||
agency: Agency
|
||||
wareHouseOut: Warehouse Out
|
||||
warehouseOut: Warehouse Out
|
||||
wareHouseIn: Warehouse In
|
||||
landed: Landed
|
||||
shipped: Shipped
|
||||
|
@ -106,6 +106,26 @@ globals:
|
|||
weight: Weight
|
||||
error: Ups! Something went wrong
|
||||
recalc: Recalculate
|
||||
alias: Alias
|
||||
vat: VAT
|
||||
intrastat: Intrastat
|
||||
tags: Tags
|
||||
size: Size
|
||||
producer: Producer
|
||||
origin: Origin
|
||||
state: State
|
||||
subtotal: Subtotal
|
||||
visible: Visible
|
||||
price: Price
|
||||
client: Client
|
||||
country: Country
|
||||
phone: Phone
|
||||
mobile: Mobile
|
||||
postcode: Postcode
|
||||
street: Street
|
||||
tag: Tag
|
||||
ticketId: Ticket ID
|
||||
confirmed: Confirmed
|
||||
small: Small
|
||||
medium: Medium
|
||||
big: Big
|
||||
|
@ -300,13 +320,10 @@ globals:
|
|||
maxTemperature: Max
|
||||
minTemperature: Min
|
||||
params:
|
||||
id: ID
|
||||
clientFk: Client id
|
||||
salesPersonFk: Sales person
|
||||
warehouseFk: Warehouse
|
||||
provinceFk: Province
|
||||
from: From
|
||||
To: To
|
||||
stateFk: State
|
||||
email: Email
|
||||
SSN: SSN
|
||||
|
@ -336,16 +353,12 @@ login:
|
|||
loginError: Invalid username or password
|
||||
fieldRequired: This field is required
|
||||
twoFactorRequired: Two-factor verification required
|
||||
twoFactor:
|
||||
code: Code
|
||||
twoFactorRequired:
|
||||
validate: Validate
|
||||
insert: Enter the verification code
|
||||
explanation: >-
|
||||
Please, enter the verification code that we have sent to your email in the
|
||||
next 5 minutes
|
||||
verifyEmail:
|
||||
pageTitles:
|
||||
verifyEmail: Email verification
|
||||
recoverPassword:
|
||||
userOrEmail: User or recovery email
|
||||
explanation: >-
|
||||
|
@ -357,15 +370,7 @@ resetPassword:
|
|||
entry:
|
||||
list:
|
||||
newEntry: New entry
|
||||
landed: Landed
|
||||
invoiceNumber: Invoice number
|
||||
supplier: Supplier
|
||||
booked: Booked
|
||||
confirmed: Confirmed
|
||||
ordered: Ordered
|
||||
tableVisibleColumns:
|
||||
id: Id
|
||||
reference: Reference
|
||||
created: Creation
|
||||
supplierFk: Supplier
|
||||
isBooked: Booked
|
||||
|
@ -378,236 +383,117 @@ entry:
|
|||
summary:
|
||||
commission: Commission
|
||||
currency: Currency
|
||||
company: Company
|
||||
reference: Reference
|
||||
invoiceNumber: Invoice number
|
||||
ordered: Ordered
|
||||
confirmed: Confirmed
|
||||
booked: Booked
|
||||
excludedFromAvailable: Inventory
|
||||
travelReference: Reference
|
||||
travelAgency: Agency
|
||||
travelShipped: Shipped
|
||||
travelWarehouseOut: Warehouse Out
|
||||
travelDelivered: Delivered
|
||||
travelLanded: Landed
|
||||
travelWarehouseIn: Warehouse In
|
||||
travelReceived: Received
|
||||
buys: Buys
|
||||
quantity: Quantity
|
||||
stickers: Stickers
|
||||
package: Package
|
||||
weight: Weight
|
||||
packing: Packing
|
||||
grouping: Grouping
|
||||
buyingValue: Buying value
|
||||
import: Import
|
||||
pvp: PVP
|
||||
item: Item
|
||||
basicData:
|
||||
supplier: Supplier
|
||||
travel: Travel
|
||||
reference: Reference
|
||||
invoiceNumber: Invoice number
|
||||
company: Company
|
||||
currency: Currency
|
||||
commission: Commission
|
||||
observation: Observation
|
||||
ordered: Ordered
|
||||
confirmed: Confirmed
|
||||
booked: Booked
|
||||
excludedFromAvailable: Inventory
|
||||
agency: Agency
|
||||
warehouseOut: Warehouse Out
|
||||
warehouseIn: Warehouse In
|
||||
shipped: Shipped
|
||||
landed: Landed
|
||||
id: ID
|
||||
buys:
|
||||
groupingPrice: Grouping price
|
||||
packingPrice: Packing price
|
||||
reference: Reference
|
||||
observations: Observations
|
||||
item: Item
|
||||
size: Size
|
||||
packing: Packing
|
||||
grouping: Grouping
|
||||
buyingValue: Buying value
|
||||
packagingFk: Box
|
||||
file: File
|
||||
name: Name
|
||||
producer: Producer
|
||||
type: Type
|
||||
color: Color
|
||||
id: ID
|
||||
printedStickers: Printed stickers
|
||||
notes:
|
||||
observationType: Observation type
|
||||
descriptor:
|
||||
agency: Agency
|
||||
landed: Landed
|
||||
warehouseOut: Warehouse Out
|
||||
latestBuys:
|
||||
tableVisibleColumns:
|
||||
image: Picture
|
||||
itemFk: Item ID
|
||||
packing: Packing
|
||||
grouping: Grouping
|
||||
quantity: Quantity
|
||||
size: Size
|
||||
tags: Tags
|
||||
type: Type
|
||||
intrastat: Intrastat
|
||||
origin: Origin
|
||||
weightByPiece: Weight/Piece
|
||||
isActive: Active
|
||||
family: Family
|
||||
entryFk: Entry
|
||||
buyingValue: Buying value
|
||||
freightValue: Freight value
|
||||
comissionValue: Commission value
|
||||
description: Description
|
||||
packageValue: Package value
|
||||
isIgnored: Is ignored
|
||||
price2: Grouping
|
||||
price3: Packing
|
||||
minPrice: Min
|
||||
ektFk: Ekt
|
||||
weight: Weight
|
||||
packagingFk: Package
|
||||
packingOut: Package out
|
||||
landing: Landing
|
||||
isExcludedFromAvailable: Es inventory
|
||||
ticket:
|
||||
pageTitles:
|
||||
tickets: Tickets
|
||||
list: List
|
||||
ticketCreate: New ticket
|
||||
summary: Summary
|
||||
basicData: Basic Data
|
||||
boxing: Boxing
|
||||
sms: Sms
|
||||
notes: Notes
|
||||
sale: Sale
|
||||
dms: File management
|
||||
volume: Volume
|
||||
observation: Notes
|
||||
ticketAdvance: Advance tickets
|
||||
futureTickets: Future tickets
|
||||
purchaseRequest: Purchase request
|
||||
weeklyTickets: Weekly tickets
|
||||
list:
|
||||
nickname: Nickname
|
||||
state: State
|
||||
shipped: Shipped
|
||||
landed: Landed
|
||||
salesPerson: Sales person
|
||||
total: Total
|
||||
card:
|
||||
ticketId: Ticket ID
|
||||
state: State
|
||||
customerId: Customer ID
|
||||
salesPerson: Sales person
|
||||
agency: Agency
|
||||
shipped: Shipped
|
||||
warehouse: Warehouse
|
||||
customerCard: Customer card
|
||||
alias: Alias
|
||||
ticketList: Ticket List
|
||||
newOrder: New Order
|
||||
boxing:
|
||||
expedition: Expedition
|
||||
item: Item
|
||||
created: Created
|
||||
worker: Worker
|
||||
selectTime: 'Select time:'
|
||||
selectVideo: 'Select video:'
|
||||
notFound: No videos available
|
||||
summary:
|
||||
state: State
|
||||
salesPerson: Sales person
|
||||
agency: Agency
|
||||
zone: Zone
|
||||
warehouse: Warehouse
|
||||
collection: Collection
|
||||
route: Route
|
||||
invoice: Invoice
|
||||
shipped: Shipped
|
||||
landed: Landed
|
||||
consigneePhone: Consignee phone
|
||||
consigneeMobile: Consignee mobile
|
||||
consigneeAddress: Consignee address
|
||||
clientPhone: Client phone
|
||||
clientMobile: Client mobile
|
||||
consignee: Consignee
|
||||
subtotal: Subtotal
|
||||
vat: VAT
|
||||
total: Total
|
||||
saleLines: Line items
|
||||
item: Item
|
||||
visible: Visible
|
||||
available: Available
|
||||
quantity: Quantity
|
||||
price: Price
|
||||
discount: Discount
|
||||
packing: Packing
|
||||
hasComponentLack: Component lack
|
||||
itemShortage: Not visible
|
||||
claim: Claim
|
||||
reserved: Reserved
|
||||
created: Created
|
||||
package: Package
|
||||
taxClass: Tax class
|
||||
services: Services
|
||||
requester: Requester
|
||||
atender: Atender
|
||||
request: Request
|
||||
weight: Weight
|
||||
goTo: Go to
|
||||
summaryAmount: Summary
|
||||
purchaseRequest: Purchase request
|
||||
service: Service
|
||||
description: Description
|
||||
attender: Attender
|
||||
ok: Ok
|
||||
create:
|
||||
client: Client
|
||||
address: Address
|
||||
landed: Landed
|
||||
warehouse: Warehouse
|
||||
agency: Agency
|
||||
invoiceOut:
|
||||
list:
|
||||
ref: Reference
|
||||
issued: Issued
|
||||
shortIssued: Issued
|
||||
client: Client
|
||||
created: Created
|
||||
shortCreated: Created
|
||||
company: Company
|
||||
dued: Due date
|
||||
shortDued: Due date
|
||||
amount: Amount
|
||||
card:
|
||||
issued: Issued
|
||||
client: Client
|
||||
company: Company
|
||||
customerCard: Customer card
|
||||
summary:
|
||||
issued: Issued
|
||||
created: Created
|
||||
dued: Due
|
||||
booked: Booked
|
||||
company: Company
|
||||
taxBreakdown: Tax breakdown
|
||||
type: Type
|
||||
taxableBase: Taxable base
|
||||
rate: Rate
|
||||
fee: Fee
|
||||
tickets: Tickets
|
||||
ticketId: Ticket id
|
||||
nickname: Alias
|
||||
shipped: Shipped
|
||||
totalWithVat: Amount
|
||||
globalInvoices:
|
||||
errors:
|
||||
|
@ -620,23 +506,16 @@ invoiceOut:
|
|||
invoiceWithFutureDate: Exists an invoice with a future date
|
||||
noTicketsToInvoice: There are not tickets to invoice
|
||||
criticalInvoiceError: 'Critical invoicing error, process stopped'
|
||||
invalidSerialTypeForAll: The serial type must be global when invoicing all clients
|
||||
table:
|
||||
client: Client
|
||||
addressId: Address id
|
||||
streetAddress: Street
|
||||
statusCard:
|
||||
percentageText: '{getPercentage}% {getAddressNumber} of {getNAddresses}'
|
||||
pdfsNumberText: '{nPdfs} of {totalPdfs} PDFs'
|
||||
negativeBases:
|
||||
from: From
|
||||
to: To
|
||||
company: Company
|
||||
country: Country
|
||||
clientId: Client Id
|
||||
client: Client
|
||||
amount: Amount
|
||||
base: Base
|
||||
ticketId: Ticket Id
|
||||
active: Active
|
||||
hasToInvoice: Has to Invoice
|
||||
verifiedData: Verified Data
|
||||
|
@ -649,15 +528,6 @@ shelving:
|
|||
priority: Priority
|
||||
newShelving: New Shelving
|
||||
summary:
|
||||
code: Code
|
||||
parking: Parking
|
||||
priority: Priority
|
||||
worker: Worker
|
||||
recyclable: Recyclable
|
||||
basicData:
|
||||
code: Code
|
||||
parking: Parking
|
||||
priority: Priority
|
||||
recyclable: Recyclable
|
||||
parking:
|
||||
pickingOrder: Picking order
|
||||
|
@ -670,56 +540,27 @@ parking:
|
|||
order:
|
||||
field:
|
||||
salesPersonFk: Sales Person
|
||||
clientFk: Client
|
||||
isConfirmed: Confirmed
|
||||
created: Created
|
||||
landed: Landed
|
||||
hour: Hour
|
||||
agency: Agency
|
||||
total: Total
|
||||
form:
|
||||
clientFk: Client
|
||||
addressFk: Address
|
||||
landed: Landed
|
||||
agencyModeFk: Agency
|
||||
list:
|
||||
newOrder: New Order
|
||||
summary:
|
||||
basket: Basket
|
||||
nickname: Nickname
|
||||
company: Company
|
||||
confirmed: Confirmed
|
||||
notConfirmed: Not confirmed
|
||||
created: Created
|
||||
landed: Landed
|
||||
phone: Phone
|
||||
createdFrom: Created From
|
||||
address: Address
|
||||
notes: Notes
|
||||
subtotal: Subtotal
|
||||
total: Total
|
||||
vat: VAT
|
||||
state: State
|
||||
alias: Alias
|
||||
items: Items
|
||||
orderTicketList: Order Ticket List
|
||||
details: Details
|
||||
item: Item
|
||||
quantity: Quantity
|
||||
price: Price
|
||||
amount: Amount
|
||||
confirm: Confirm
|
||||
confirmLines: Confirm lines
|
||||
department:
|
||||
pageTitles:
|
||||
basicData: Basic data
|
||||
department: Department
|
||||
summary: Summary
|
||||
name: Name
|
||||
code: Code
|
||||
chat: Chat
|
||||
bossDepartment: Boss Department
|
||||
email: Email
|
||||
selfConsumptionCustomer: Self-consumption customer
|
||||
telework: Telework
|
||||
notifyOnErrors: Notify on errors
|
||||
|
@ -728,47 +569,11 @@ department:
|
|||
hasToSendMail: Send check-ins by email
|
||||
departmentRemoved: Department removed
|
||||
worker:
|
||||
pageTitles:
|
||||
workers: Workers
|
||||
list: List
|
||||
basicData: Basic data
|
||||
summary: Summary
|
||||
notifications: Notifications
|
||||
workerCreate: New worker
|
||||
department: Department
|
||||
pda: PDA
|
||||
notes: Notas
|
||||
dms: My documentation
|
||||
pbx: Private Branch Exchange
|
||||
log: Log
|
||||
calendar: Calendar
|
||||
timeControl: Time control
|
||||
locker: Locker
|
||||
balance: Balance
|
||||
medical: Medical
|
||||
operator: Operator
|
||||
list:
|
||||
name: Name
|
||||
email: Email
|
||||
phone: Phone
|
||||
mobile: Mobile
|
||||
active: Active
|
||||
department: Department
|
||||
schedule: Schedule
|
||||
newWorker: New worker
|
||||
card:
|
||||
workerId: Worker ID
|
||||
user: User
|
||||
name: Name
|
||||
email: Email
|
||||
phone: Phone
|
||||
mobile: Mobile
|
||||
active: Active
|
||||
warehouse: Warehouse
|
||||
agency: Agency
|
||||
salesPerson: Sales person
|
||||
summary:
|
||||
basicData: Basic data
|
||||
boss: Boss
|
||||
phoneExtension: Phone extension
|
||||
entPhone: Enterprise phone
|
||||
|
@ -800,19 +605,12 @@ worker:
|
|||
serialNumber: Serial number
|
||||
removePDA: Deallocate PDA
|
||||
create:
|
||||
name: Name
|
||||
lastName: Last name
|
||||
birth: Birth
|
||||
fi: Fi
|
||||
code: Worker code
|
||||
phone: Phone
|
||||
postcode: Postcode
|
||||
province: Province
|
||||
city: City
|
||||
street: Street
|
||||
webUser: Web user
|
||||
personalEmail: Personal email
|
||||
company: Company
|
||||
boss: Boss
|
||||
payMethods: Pay method
|
||||
iban: IBAN
|
||||
|
@ -824,16 +622,13 @@ worker:
|
|||
endDate: End date
|
||||
center: Training center
|
||||
invoice: Invoice
|
||||
amount: Amount
|
||||
remark: Remark
|
||||
hasDiploma: Has diploma
|
||||
medical:
|
||||
tableVisibleColumns:
|
||||
date: Date
|
||||
time: Hour
|
||||
center: Formation Center
|
||||
invoice: Invoice
|
||||
amount: Amount
|
||||
isFit: Fit
|
||||
remark: Observations
|
||||
imageNotFound: Image not found
|
||||
|
@ -857,18 +652,7 @@ worker:
|
|||
isOnReservationMode: Reservation mode
|
||||
machine: Machine
|
||||
wagon:
|
||||
pageTitles:
|
||||
wagons: Wagons
|
||||
wagonsList: Wagons List
|
||||
wagonCreate: Create wagon
|
||||
wagonEdit: Edit wagon
|
||||
typesList: Types List
|
||||
typeCreate: Create type
|
||||
typeEdit: Edit type
|
||||
wagonCounter: Trolley counter
|
||||
wagonTray: Tray List
|
||||
type:
|
||||
name: Name
|
||||
submit: Submit
|
||||
reset: Reset
|
||||
trayColor: Tray color
|
||||
|
@ -876,13 +660,10 @@ wagon:
|
|||
list:
|
||||
plate: Plate
|
||||
volume: Volume
|
||||
type: Type
|
||||
remove: Remove
|
||||
removeItem: Wagon removed successfully
|
||||
create:
|
||||
plate: Plate
|
||||
volume: Volume
|
||||
type: Type
|
||||
label: Label
|
||||
warnings:
|
||||
noData: No data available
|
||||
|
@ -899,26 +680,17 @@ wagon:
|
|||
supplier:
|
||||
list:
|
||||
payMethod: Pay method
|
||||
payDeadline: Pay deadline
|
||||
payDay: Pay day
|
||||
account: Account
|
||||
newSupplier: New supplier
|
||||
tableVisibleColumns:
|
||||
id: Id
|
||||
name: Name
|
||||
nif: NIF/CIF
|
||||
nickname: Alias
|
||||
account: Account
|
||||
payMethod: Pay Method
|
||||
payDay: Pay Day
|
||||
country: Country
|
||||
summary:
|
||||
responsible: Responsible
|
||||
notes: Notes
|
||||
verified: Verified
|
||||
isActive: Is active
|
||||
billingData: Billing data
|
||||
payMethod: Pay method
|
||||
payDeadline: Pay deadline
|
||||
payDay: Pay day
|
||||
account: Account
|
||||
|
@ -931,15 +703,10 @@ supplier:
|
|||
fiscalAddress: Fiscal address
|
||||
socialName: Social name
|
||||
taxNumber: Tax number
|
||||
street: Street
|
||||
city: City
|
||||
postCode: Postcode
|
||||
province: Province
|
||||
country: Country
|
||||
create:
|
||||
supplierName: Supplier name
|
||||
basicData:
|
||||
alias: Alias
|
||||
workerFk: Responsible
|
||||
isSerious: Verified
|
||||
isActive: Active
|
||||
|
@ -954,36 +721,18 @@ supplier:
|
|||
sageWithholdingFk: Sage withholding
|
||||
sageTransactionTypeFk: Sage transaction type
|
||||
supplierActivityFk: Supplier activity
|
||||
healthRegister: Health register
|
||||
street: Street
|
||||
postcode: Postcode
|
||||
city: City *
|
||||
provinceFk: Province
|
||||
country: Country
|
||||
isTrucker: Trucker
|
||||
isVies: Vies
|
||||
billingData:
|
||||
payMethodFk: Billing data
|
||||
payDemFk: Payment deadline
|
||||
payDay: Pay day
|
||||
accounts:
|
||||
iban: Iban
|
||||
bankEntity: Bank entity
|
||||
beneficiary: Beneficiary
|
||||
contacts:
|
||||
name: Name
|
||||
phone: Phone
|
||||
mobile: Mobile
|
||||
email: Email
|
||||
observation: Notes
|
||||
addresses:
|
||||
street: Street
|
||||
postcode: Postcode
|
||||
phone: Phone
|
||||
name: Name
|
||||
city: City
|
||||
province: Province
|
||||
mobile: Mobile
|
||||
agencyTerms:
|
||||
agencyFk: Agency
|
||||
minimumM3: Minimum M3
|
||||
|
@ -995,25 +744,16 @@ supplier:
|
|||
addRow: Add row
|
||||
consumption:
|
||||
entry: Entry
|
||||
date: Date
|
||||
reference: Reference
|
||||
travel:
|
||||
travelList:
|
||||
tableVisibleColumns:
|
||||
id: Id
|
||||
ref: Reference
|
||||
agency: Agency
|
||||
shipped: Shipped
|
||||
landed: Landed
|
||||
shipHour: Shipment Hour
|
||||
landHour: Landing Hour
|
||||
warehouseIn: Warehouse in
|
||||
warehouseOut: Warehouse out
|
||||
totalEntries: Total entries
|
||||
totalEntriesTooltip: Total entries
|
||||
daysOnward: Landed days onwards
|
||||
summary:
|
||||
confirmed: Confirmed
|
||||
entryId: Entry Id
|
||||
freight: Freight
|
||||
package: Package
|
||||
|
@ -1026,64 +766,89 @@ travel:
|
|||
AddEntry: Add entry
|
||||
thermographs: Thermographs
|
||||
hb: HB
|
||||
variables:
|
||||
search: Id/Reference
|
||||
agencyModeFk: Agency
|
||||
warehouseInFk: ' Warehouse In'
|
||||
warehouseOutFk: Warehouse Out
|
||||
landedFrom: Landed from
|
||||
landedTo: Landed to
|
||||
continent: Continent out
|
||||
totalEntries: Total entries
|
||||
basicData:
|
||||
reference: Reference
|
||||
agency: Agency
|
||||
shipped: Shipped
|
||||
landed: Landed
|
||||
warehouseOut: Warehouse Out
|
||||
warehouseIn: Warehouse In
|
||||
delivered: Delivered
|
||||
received: Received
|
||||
daysInForward: Days in forward
|
||||
thermographs:
|
||||
code: Code
|
||||
temperature: Temperature
|
||||
state: State
|
||||
destination: Destination
|
||||
created: Created
|
||||
thermograph: Thermograph
|
||||
reference: Reference
|
||||
type: Type
|
||||
company: Company
|
||||
warehouse: Warehouse
|
||||
travelFileDescription: 'Travel id { travelId }'
|
||||
file: File
|
||||
item:
|
||||
descriptor:
|
||||
buyer: Buyer
|
||||
color: Color
|
||||
category: Category
|
||||
available: Available
|
||||
warehouseText: 'Calculated on the warehouse of { warehouseName }'
|
||||
itemDiary: Item diary
|
||||
list:
|
||||
id: Identifier
|
||||
stems: Stems
|
||||
category: Category
|
||||
typeName: Type
|
||||
isActive: Active
|
||||
userName: Buyer
|
||||
weightByPiece: Weight/Piece
|
||||
stemMultiplier: Multiplier
|
||||
fixedPrice:
|
||||
itemFk: Item ID
|
||||
groupingPrice: Grouping price
|
||||
packingPrice: Packing price
|
||||
hasMinPrice: Has min price
|
||||
minPrice: Min price
|
||||
started: Started
|
||||
ended: Ended
|
||||
create:
|
||||
priority: Priority
|
||||
buyRequest:
|
||||
requester: Requester
|
||||
requested: Requested
|
||||
attender: Atender
|
||||
achieved: Achieved
|
||||
concept: Concept
|
||||
summary:
|
||||
otherData: Other data
|
||||
tax: Tax
|
||||
botanical: Botanical
|
||||
barcode: Barcode
|
||||
completeName: Complete name
|
||||
family: Familiy
|
||||
stems: Stems
|
||||
multiplier: Multiplier
|
||||
buyer: Buyer
|
||||
doPhoto: Do photo
|
||||
intrastatCode: Intrastat code
|
||||
ref: Reference
|
||||
relevance: Relevance
|
||||
weight: Weight (gram)/stem
|
||||
units: Units/box
|
||||
expense: Expense
|
||||
generic: Generic
|
||||
recycledPlastic: Recycled plastic
|
||||
nonRecycledPlastic: Non recycled plastic
|
||||
minSalesQuantity: Min sales quantity
|
||||
genus: Genus
|
||||
specie: Specie
|
||||
components:
|
||||
topbar: {}
|
||||
itemsFilterPanel:
|
||||
typeFk: Type
|
||||
tag: Tag
|
||||
value: Value
|
||||
# ItemFixedPriceFilter
|
||||
buyerFk: Buyer
|
||||
warehouseFk: Warehouse
|
||||
started: From
|
||||
ended: To
|
||||
mine: For me
|
||||
hasMinPrice: Minimum price
|
||||
# LatestBuysFilter
|
||||
salesPersonFk: Buyer
|
||||
supplierFk: Supplier
|
||||
from: From
|
||||
to: To
|
||||
active: Is active
|
||||
visible: Is visible
|
||||
floramondo: Is floramondo
|
||||
showBadDates: Show future items
|
||||
userPanel:
|
||||
copyToken: Token copied to clipboard
|
||||
settings: Settings
|
||||
logOut: Log Out
|
||||
localWarehouse: Local warehouse
|
||||
localBank: Local bank
|
||||
localCompany: Local company
|
||||
|
@ -1091,9 +856,9 @@ components:
|
|||
userCompany: User company
|
||||
smartCard:
|
||||
downloadFile: Download file
|
||||
clone: Clone
|
||||
openCard: View
|
||||
openSummary: Summary
|
||||
viewSummary: Summary
|
||||
cardDescriptor:
|
||||
mainList: Main list
|
||||
summary: Summary
|
||||
|
|
|
@ -58,8 +58,8 @@ globals:
|
|||
downloadCSVSuccess: Descarga de CSV exitosa
|
||||
reference: Referencia
|
||||
agency: Agencia
|
||||
wareHouseOut: Alm. salida
|
||||
wareHouseIn: Alm. entrada
|
||||
warehouseOut: Alm. salida
|
||||
warehouseIn: Alm. entrada
|
||||
landed: F. entrega
|
||||
shipped: F. envío
|
||||
totalEntries: Ent. totales
|
||||
|
@ -108,6 +108,26 @@ globals:
|
|||
weight: Peso
|
||||
error: ¡Ups! Algo salió mal
|
||||
recalc: Recalcular
|
||||
alias: Alias
|
||||
vat: IVA
|
||||
intrastat: Intrastat
|
||||
tags: Etiquetas
|
||||
size: Medida
|
||||
producer: Productor
|
||||
origin: Origen
|
||||
state: Estado
|
||||
subtotal: Subtotal
|
||||
visible: Visible
|
||||
price: Precio
|
||||
client: Cliente
|
||||
country: País
|
||||
phone: Teléfono
|
||||
mobile: Móvil
|
||||
postcode: Código postal
|
||||
street: Dirección
|
||||
tag: Etiqueta
|
||||
ticketId: ID ticket
|
||||
confirmed: Confirmado
|
||||
small: Pequeño/a
|
||||
medium: Mediano/a
|
||||
big: Grande
|
||||
|
@ -304,13 +324,10 @@ globals:
|
|||
maxTemperature: Máx
|
||||
minTemperature: Mín
|
||||
params:
|
||||
id: Id
|
||||
clientFk: Id cliente
|
||||
salesPersonFk: Comercial
|
||||
warehouseFk: Almacén
|
||||
provinceFk: Provincia
|
||||
from: Desde
|
||||
To: Hasta
|
||||
stateFk: Estado
|
||||
departmentFk: Departamento
|
||||
email: Correo
|
||||
|
@ -341,13 +358,9 @@ login:
|
|||
fieldRequired: Este campo es obligatorio
|
||||
twoFactorRequired: Verificación de doble factor requerida
|
||||
twoFactor:
|
||||
code: Código
|
||||
validate: Validar
|
||||
insert: Introduce el código de verificación
|
||||
explanation: Por favor introduce el código de verificación que te hemos enviado a tu email en los próximos 5 minutos
|
||||
verifyEmail:
|
||||
pageTitles:
|
||||
verifyEmail: Verificación de correo
|
||||
recoverPassword:
|
||||
userOrEmail: Usuario o correo de recuperación
|
||||
explanation: >-
|
||||
|
@ -359,15 +372,7 @@ resetPassword:
|
|||
entry:
|
||||
list:
|
||||
newEntry: Nueva entrada
|
||||
landed: F. entrega
|
||||
invoiceNumber: Núm. factura
|
||||
supplier: Proveedor
|
||||
booked: Asentado
|
||||
confirmed: Confirmado
|
||||
ordered: Pedida
|
||||
tableVisibleColumns:
|
||||
id: Id
|
||||
reference: Referencia
|
||||
created: Creación
|
||||
supplierFk: Proveedor
|
||||
isBooked: Asentado
|
||||
|
@ -380,11 +385,8 @@ entry:
|
|||
summary:
|
||||
commission: Comisión
|
||||
currency: Moneda
|
||||
company: Empresa
|
||||
reference: Referencia
|
||||
invoiceNumber: Núm. factura
|
||||
ordered: Pedida
|
||||
confirmed: Confirmada
|
||||
booked: Contabilizada
|
||||
excludedFromAvailable: Inventario
|
||||
travelReference: Referencia
|
||||
|
@ -393,230 +395,108 @@ entry:
|
|||
travelWarehouseOut: Alm. salida
|
||||
travelDelivered: Enviada
|
||||
travelLanded: F. entrega
|
||||
travelWarehouseIn: Alm. entrada
|
||||
travelReceived: Recibida
|
||||
buys: Compras
|
||||
quantity: Cantidad
|
||||
stickers: Etiquetas
|
||||
package: Embalaje
|
||||
weight: Peso
|
||||
packing: Packing
|
||||
grouping: Grouping
|
||||
buyingValue: Coste
|
||||
import: Importe
|
||||
pvp: PVP
|
||||
item: Artículo
|
||||
basicData:
|
||||
supplier: Proveedor
|
||||
travel: Envío
|
||||
reference: Referencia
|
||||
invoiceNumber: Núm. factura
|
||||
company: Empresa
|
||||
currency: Moneda
|
||||
observation: Observación
|
||||
commission: Comisión
|
||||
ordered: Pedida
|
||||
confirmed: Confirmado
|
||||
booked: Asentado
|
||||
excludedFromAvailable: Inventario
|
||||
agency: Agencia
|
||||
warehouseOut: Alm. salida
|
||||
warehouseIn: Alm. entrada
|
||||
shipped: F. envío
|
||||
landed: F. entrega
|
||||
id: ID
|
||||
buys:
|
||||
groupingPrice: Precio grouping
|
||||
packingPrice: Precio packing
|
||||
reference: Referencia
|
||||
observations: Observaciónes
|
||||
item: Artículo
|
||||
size: Medida
|
||||
packing: Packing
|
||||
grouping: Grouping
|
||||
buyingValue: Coste
|
||||
packagingFk: Embalaje
|
||||
file: Fichero
|
||||
name: Nombre
|
||||
producer: Productor
|
||||
type: Tipo
|
||||
color: Color
|
||||
id: ID
|
||||
printedStickers: Etiquetas impresas
|
||||
notes:
|
||||
observationType: Tipo de observación
|
||||
descriptor:
|
||||
agency: Agencia
|
||||
landed: F. entrega
|
||||
warehouseOut: Alm. salida
|
||||
latestBuys:
|
||||
tableVisibleColumns:
|
||||
image: Foto
|
||||
itemFk: Id Artículo
|
||||
packing: packing
|
||||
grouping: Grouping
|
||||
quantity: Cantidad
|
||||
size: Medida
|
||||
tags: Etiquetas
|
||||
type: Tipo
|
||||
intrastat: Intrastat
|
||||
origin: Origen
|
||||
weightByPiece: Peso (gramos)/tallo
|
||||
isActive: Activo
|
||||
family: Familia
|
||||
entryFk: Entrada
|
||||
buyingValue: Coste
|
||||
freightValue: Porte
|
||||
comissionValue: Comisión
|
||||
description: Descripción
|
||||
packageValue: Embalaje
|
||||
isIgnored: Ignorado
|
||||
price2: Grouping
|
||||
price3: Packing
|
||||
minPrice: Min
|
||||
ektFk: Ekt
|
||||
weight: Peso
|
||||
packagingFk: Embalaje
|
||||
packingOut: Embalaje envíos
|
||||
landing: Llegada
|
||||
isExcludedFromAvailable: Es inventario
|
||||
ticket:
|
||||
pageTitles:
|
||||
tickets: Tickets
|
||||
list: Listado
|
||||
ticketCreate: Nuevo ticket
|
||||
summary: Resumen
|
||||
basicData: Datos básicos
|
||||
boxing: Encajado
|
||||
sms: Sms
|
||||
notes: Notas
|
||||
sale: Lineas del pedido
|
||||
dms: Gestión documental
|
||||
volume: Volumen
|
||||
observation: Notas
|
||||
ticketAdvance: Adelantar tickets
|
||||
futureTickets: Tickets a futuro
|
||||
expedition: Expedición
|
||||
purchaseRequest: Petición de compra
|
||||
weeklyTickets: Tickets programados
|
||||
saleTracking: Líneas preparadas
|
||||
services: Servicios
|
||||
tracking: Estados
|
||||
components: Componentes
|
||||
pictures: Fotos
|
||||
packages: Embalajes
|
||||
list:
|
||||
nickname: Alias
|
||||
state: Estado
|
||||
shipped: Enviado
|
||||
landed: Entregado
|
||||
salesPerson: Comercial
|
||||
total: Total
|
||||
card:
|
||||
ticketId: ID ticket
|
||||
state: Estado
|
||||
customerId: ID cliente
|
||||
salesPerson: Comercial
|
||||
agency: Agencia
|
||||
shipped: Enviado
|
||||
warehouse: Almacén
|
||||
customerCard: Ficha del cliente
|
||||
alias: Alias
|
||||
ticketList: Listado de tickets
|
||||
newOrder: Nuevo pedido
|
||||
boxing:
|
||||
expedition: Expedición
|
||||
item: Artículo
|
||||
created: Creado
|
||||
worker: Trabajador
|
||||
selectTime: 'Seleccionar hora:'
|
||||
selectVideo: 'Seleccionar vídeo:'
|
||||
notFound: No hay vídeos disponibles
|
||||
summary:
|
||||
state: Estado
|
||||
salesPerson: Comercial
|
||||
agency: Agencia
|
||||
zone: Zona
|
||||
warehouse: Almacén
|
||||
collection: Colección
|
||||
route: Ruta
|
||||
invoice: Factura
|
||||
shipped: Enviado
|
||||
landed: Entregado
|
||||
consigneePhone: Tel. consignatario
|
||||
consigneeMobile: Móv. consignatario
|
||||
consigneeAddress: Dir. consignatario
|
||||
clientPhone: Tel. cliente
|
||||
clientMobile: Móv. cliente
|
||||
consignee: Consignatario
|
||||
subtotal: Subtotal
|
||||
vat: IVA
|
||||
total: Total
|
||||
saleLines: Líneas del pedido
|
||||
item: Artículo
|
||||
visible: Visible
|
||||
available: Disponible
|
||||
quantity: Cantidad
|
||||
price: Precio
|
||||
discount: Descuento
|
||||
packing: Encajado
|
||||
hasComponentLack: Faltan componentes
|
||||
itemShortage: No visible
|
||||
claim: Reclamación
|
||||
reserved: Reservado
|
||||
created: Fecha creación
|
||||
package: Embalaje
|
||||
taxClass: Tipo IVA
|
||||
services: Servicios
|
||||
requester: Solicitante
|
||||
atender: Comprador
|
||||
request: Petición de compra
|
||||
weight: Peso
|
||||
goTo: Ir a
|
||||
summaryAmount: Resumen
|
||||
purchaseRequest: Petición de compra
|
||||
service: Servicio
|
||||
description: Descripción
|
||||
attender: Consignatario
|
||||
create:
|
||||
client: Cliente
|
||||
address: Dirección
|
||||
landed: F. entrega
|
||||
warehouse: Almacén
|
||||
agency: Agencia
|
||||
invoiceOut:
|
||||
list:
|
||||
ref: Referencia
|
||||
issued: Fecha emisión
|
||||
shortIssued: F. emisión
|
||||
client: Cliente
|
||||
created: Fecha creación
|
||||
shortCreated: F. creación
|
||||
company: Empresa
|
||||
dued: Fecha vencimineto
|
||||
shortDued: F. vencimiento
|
||||
amount: Importe
|
||||
card:
|
||||
issued: Fecha emisión
|
||||
client: Cliente
|
||||
company: Empresa
|
||||
customerCard: Ficha del cliente
|
||||
ticketList: Listado de tickets
|
||||
summary:
|
||||
issued: Fecha
|
||||
created: Fecha creación
|
||||
dued: Vencimiento
|
||||
booked: Contabilizada
|
||||
company: Empresa
|
||||
taxBreakdown: Desglose impositivo
|
||||
type: Tipo
|
||||
taxableBase: Base imp.
|
||||
rate: Tarifa
|
||||
fee: Cuota
|
||||
tickets: Tickets
|
||||
ticketId: Id ticket
|
||||
nickname: Alias
|
||||
shipped: F. envío
|
||||
totalWithVat: Importe
|
||||
globalInvoices:
|
||||
errors:
|
||||
|
@ -629,21 +509,16 @@ invoiceOut:
|
|||
invoiceWithFutureDate: Existe una factura con una fecha futura
|
||||
noTicketsToInvoice: No existen tickets para facturar
|
||||
criticalInvoiceError: Error crítico en la facturación proceso detenido
|
||||
invalidSerialTypeForAll: El tipo de serie debe ser global cuando se facturan todos los clientes
|
||||
table:
|
||||
client: Cliente
|
||||
addressId: Id dirección
|
||||
streetAddress: Dirección fiscal
|
||||
statusCard:
|
||||
percentageText: '{getPercentage}% {getAddressNumber} de {getNAddresses}'
|
||||
pdfsNumberText: '{nPdfs} de {totalPdfs} PDFs'
|
||||
negativeBases:
|
||||
company: Empresa
|
||||
country: País
|
||||
clientId: Id cliente
|
||||
client: Cliente
|
||||
amount: Importe
|
||||
base: Base
|
||||
ticketId: Id ticket
|
||||
active: Activo
|
||||
hasToInvoice: Facturar
|
||||
verifiedData: Datos comprobados
|
||||
|
@ -653,43 +528,24 @@ invoiceOut:
|
|||
order:
|
||||
field:
|
||||
salesPersonFk: Comercial
|
||||
clientFk: Cliente
|
||||
isConfirmed: Confirmada
|
||||
created: Creado
|
||||
landed: F. entrega
|
||||
hour: Hora
|
||||
agency: Agencia
|
||||
total: Total
|
||||
form:
|
||||
clientFk: Cliente
|
||||
addressFk: Dirección
|
||||
landed: F. entrega
|
||||
agencyModeFk: Agencia
|
||||
list:
|
||||
newOrder: Nuevo Pedido
|
||||
summary:
|
||||
basket: Cesta
|
||||
nickname: Alias
|
||||
company: Empresa
|
||||
confirmed: Confirmada
|
||||
notConfirmed: No confirmada
|
||||
created: Creado
|
||||
landed: F. entrega
|
||||
phone: Teléfono
|
||||
createdFrom: Creado desde
|
||||
address: Dirección
|
||||
notes: Notas
|
||||
subtotal: Subtotal
|
||||
total: Total
|
||||
vat: IVA
|
||||
state: Estado
|
||||
alias: Alias
|
||||
items: Artículos
|
||||
orderTicketList: Tickets del pedido
|
||||
details: Detalles
|
||||
item: Item
|
||||
quantity: Cantidad
|
||||
price: Precio
|
||||
amount: Monto
|
||||
confirm: Confirmar
|
||||
confirmLines: Confirmar lineas
|
||||
|
@ -699,15 +555,6 @@ shelving:
|
|||
priority: Prioridad
|
||||
newShelving: Nuevo Carro
|
||||
summary:
|
||||
code: Código
|
||||
parking: Parking
|
||||
priority: Prioridad
|
||||
worker: Trabajador
|
||||
recyclable: Reciclable
|
||||
basicData:
|
||||
code: Código
|
||||
parking: Parking
|
||||
priority: Prioridad
|
||||
recyclable: Reciclable
|
||||
parking:
|
||||
pickingOrder: Orden de recogida
|
||||
|
@ -717,15 +564,8 @@ parking:
|
|||
info: Puedes buscar por código de parking
|
||||
label: Buscar parking...
|
||||
department:
|
||||
pageTitles:
|
||||
basicData: Basic data
|
||||
department: Departamentos
|
||||
summary: Resumen
|
||||
name: Nombre
|
||||
code: Código
|
||||
chat: Chat
|
||||
bossDepartment: Jefe de departamento
|
||||
email: Email
|
||||
selfConsumptionCustomer: Cliente autoconsumo
|
||||
telework: Teletrabaja
|
||||
notifyOnErrors: Notificar errores
|
||||
|
@ -734,48 +574,11 @@ department:
|
|||
hasToSendMail: Enviar fichadas por mail
|
||||
departmentRemoved: Departamento eliminado
|
||||
worker:
|
||||
pageTitles:
|
||||
workers: Trabajadores
|
||||
list: Listado
|
||||
basicData: Datos básicos
|
||||
summary: Resumen
|
||||
notifications: Notificaciones
|
||||
workerCreate: Nuevo trabajador
|
||||
department: Departamentos
|
||||
pda: PDA
|
||||
notes: Notas
|
||||
dms: Mi documentación
|
||||
pbx: Centralita
|
||||
log: Historial
|
||||
calendar: Calendario
|
||||
timeControl: Control de horario
|
||||
locker: Taquilla
|
||||
balance: Balance
|
||||
formation: Formación
|
||||
medical: Mutua
|
||||
operator: Operario
|
||||
list:
|
||||
name: Nombre
|
||||
email: Email
|
||||
phone: Teléfono
|
||||
mobile: Móvil
|
||||
active: Activo
|
||||
department: Departamento
|
||||
schedule: Horario
|
||||
newWorker: Nuevo trabajador
|
||||
card:
|
||||
workerId: ID Trabajador
|
||||
user: Usuario
|
||||
name: Nombre
|
||||
email: Correo personal
|
||||
phone: Teléfono
|
||||
mobile: Móvil
|
||||
active: Activo
|
||||
warehouse: Almacén
|
||||
agency: Empresa
|
||||
salesPerson: Comercial
|
||||
summary:
|
||||
basicData: Datos básicos
|
||||
boss: Jefe
|
||||
phoneExtension: Extensión de teléfono
|
||||
entPhone: Teléfono de empresa
|
||||
|
@ -798,19 +601,12 @@ worker:
|
|||
serialNumber: Número de serie
|
||||
removePDA: Desasignar PDA
|
||||
create:
|
||||
name: Nombre
|
||||
lastName: Apellido
|
||||
birth: Fecha de nacimiento
|
||||
fi: DNI/NIF/NIE
|
||||
code: Código de trabajador
|
||||
phone: Teléfono
|
||||
postcode: Código postal
|
||||
province: Provincia
|
||||
city: Población
|
||||
street: Dirección
|
||||
webUser: Usuario Web
|
||||
personalEmail: Correo personal
|
||||
company: Empresa
|
||||
boss: Jefe
|
||||
payMethods: Método de pago
|
||||
iban: IBAN
|
||||
|
@ -822,16 +618,13 @@ worker:
|
|||
endDate: Fecha Fin
|
||||
center: Centro Formación
|
||||
invoice: Factura
|
||||
amount: Importe
|
||||
remark: Bonficado
|
||||
hasDiploma: Diploma
|
||||
medical:
|
||||
tableVisibleColumns:
|
||||
date: Fecha
|
||||
time: Hora
|
||||
center: Centro de Formación
|
||||
invoice: Factura
|
||||
amount: Importe
|
||||
isFit: Apto
|
||||
remark: Observaciones
|
||||
imageNotFound: No se ha encontrado la imagen
|
||||
|
@ -856,18 +649,7 @@ worker:
|
|||
machine: Máquina
|
||||
|
||||
wagon:
|
||||
pageTitles:
|
||||
wagons: Vagones
|
||||
wagonsList: Listado vagones
|
||||
wagonCreate: Crear tipo
|
||||
wagonEdit: Editar tipo
|
||||
typesList: Listado tipos
|
||||
typeCreate: Crear tipo
|
||||
typeEdit: Editar tipo
|
||||
wagonCounter: Contador de carros
|
||||
wagonTray: Listado bandejas
|
||||
type:
|
||||
name: Nombre
|
||||
submit: Guardar
|
||||
reset: Deshacer cambios
|
||||
trayColor: Color de la bandeja
|
||||
|
@ -875,13 +657,9 @@ wagon:
|
|||
list:
|
||||
plate: Matrícula
|
||||
volume: Volumen
|
||||
type: Tipo
|
||||
remove: Borrar
|
||||
removeItem: Vagón borrado correctamente
|
||||
create:
|
||||
plate: Matrícula
|
||||
volume: Volumen
|
||||
type: Tipo
|
||||
label: Etiqueta
|
||||
warnings:
|
||||
noData: Sin datos disponibles
|
||||
|
@ -897,26 +675,16 @@ wagon:
|
|||
supplier:
|
||||
list:
|
||||
payMethod: Método de pago
|
||||
payDeadline: Plazo de pago
|
||||
payDay: Día de pago
|
||||
account: Cuenta
|
||||
newSupplier: Nuevo proveedor
|
||||
tableVisibleColumns:
|
||||
id: Id
|
||||
name: Nombre
|
||||
nif: NIF/CIF
|
||||
nickname: Alias
|
||||
account: Cuenta
|
||||
payMethod: Método de pago
|
||||
payDay: Dia de pago
|
||||
country: País
|
||||
summary:
|
||||
responsible: Responsable
|
||||
notes: Notas
|
||||
verified: Verificado
|
||||
isActive: Está activo
|
||||
billingData: Forma de pago
|
||||
payMethod: Método de pago
|
||||
payDeadline: Plazo de pago
|
||||
payDay: Día de pago
|
||||
account: Cuenta
|
||||
|
@ -929,15 +697,11 @@ supplier:
|
|||
fiscalAddress: Dirección fiscal
|
||||
socialName: Razón social
|
||||
taxNumber: NIF/CIF
|
||||
street: Dirección
|
||||
city: Población
|
||||
postCode: Código postal
|
||||
province: Provincia
|
||||
country: País
|
||||
create:
|
||||
supplierName: Nombre del proveedor
|
||||
basicData:
|
||||
alias: Alias
|
||||
workerFk: Responsable
|
||||
isSerious: Verificado
|
||||
isActive: Activo
|
||||
|
@ -952,36 +716,17 @@ supplier:
|
|||
sageWithholdingFk: Retención sage
|
||||
sageTransactionTypeFk: Tipo de transacción sage
|
||||
supplierActivityFk: Actividad proveedor
|
||||
healthRegister: Pasaporte sanitario
|
||||
street: Calle
|
||||
postcode: Código postal
|
||||
city: Población *
|
||||
provinceFk: Provincia
|
||||
country: País
|
||||
isTrucker: Transportista
|
||||
isVies: Vies
|
||||
billingData:
|
||||
payMethodFk: Forma de pago
|
||||
payDemFk: Plazo de pago
|
||||
payDay: Día de pago
|
||||
accounts:
|
||||
iban: Iban
|
||||
bankEntity: Entidad bancaria
|
||||
beneficiary: Beneficiario
|
||||
contacts:
|
||||
name: Nombre
|
||||
phone: Teléfono
|
||||
mobile: Móvil
|
||||
email: Email
|
||||
observation: Notas
|
||||
addresses:
|
||||
street: Dirección
|
||||
postcode: Código postal
|
||||
phone: Teléfono
|
||||
name: Nombre
|
||||
city: Población
|
||||
province: Provincia
|
||||
mobile: Móvil
|
||||
agencyTerms:
|
||||
agencyFk: Agencia
|
||||
minimumM3: M3 mínimos
|
||||
|
@ -993,25 +738,16 @@ supplier:
|
|||
addRow: Añadir fila
|
||||
consumption:
|
||||
entry: Entrada
|
||||
date: Fecha
|
||||
reference: Referencia
|
||||
travel:
|
||||
travelList:
|
||||
tableVisibleColumns:
|
||||
id: Id
|
||||
ref: Referencia
|
||||
agency: Agencia
|
||||
shipped: F.envío
|
||||
shipHour: Hora de envío
|
||||
landHour: Hora de llegada
|
||||
landed: F.entrega
|
||||
warehouseIn: Alm.salida
|
||||
warehouseOut: Alm.entrada
|
||||
totalEntries: ∑
|
||||
totalEntriesTooltip: Entradas totales
|
||||
daysOnward: Días de llegada en adelante
|
||||
summary:
|
||||
confirmed: Confirmado
|
||||
entryId: Id entrada
|
||||
freight: Porte
|
||||
package: Embalaje
|
||||
|
@ -1024,62 +760,88 @@ travel:
|
|||
AddEntry: Añadir entrada
|
||||
thermographs: Termógrafos
|
||||
hb: HB
|
||||
variables:
|
||||
search: Id/Referencia
|
||||
agencyModeFk: Agencia
|
||||
warehouseInFk: Alm. entrada
|
||||
warehouseOutFk: ' Alm. salida'
|
||||
landedFrom: Llegada desde
|
||||
landedTo: Llegada hasta
|
||||
continent: Cont. Salida
|
||||
totalEntries: Ent. totales
|
||||
basicData:
|
||||
reference: Referencia
|
||||
agency: Agencia
|
||||
shipped: F. Envío
|
||||
landed: F. entrega
|
||||
warehouseOut: Alm. salida
|
||||
warehouseIn: Alm. entrada
|
||||
delivered: Enviada
|
||||
received: Recibida
|
||||
daysInForward: Días redada
|
||||
thermographs:
|
||||
code: Código
|
||||
temperature: Temperatura
|
||||
state: Estado
|
||||
destination: Destino
|
||||
created: Fecha creación
|
||||
thermograph: Termógrafo
|
||||
reference: Referencia
|
||||
type: Tipo
|
||||
company: Empresa
|
||||
warehouse: Almacén
|
||||
travelFileDescription: 'Id envío { travelId }'
|
||||
file: Fichero
|
||||
item:
|
||||
descriptor:
|
||||
buyer: Comprador
|
||||
color: Color
|
||||
category: Categoría
|
||||
available: Disponible
|
||||
warehouseText: 'Calculado sobre el almacén de { warehouseName }'
|
||||
itemDiary: Registro de compra-venta
|
||||
list:
|
||||
id: Identificador
|
||||
stems: Tallos
|
||||
category: Reino
|
||||
typeName: Tipo
|
||||
isActive: Activo
|
||||
weightByPiece: Peso (gramos)/tallo
|
||||
userName: Comprador
|
||||
stemMultiplier: Multiplicador
|
||||
fixedPrice:
|
||||
itemFk: ID Artículo
|
||||
groupingPrice: Precio grouping
|
||||
packingPrice: Precio packing
|
||||
hasMinPrice: Tiene precio mínimo
|
||||
minPrice: Precio min
|
||||
started: Inicio
|
||||
ended: Fin
|
||||
create:
|
||||
priority: Prioridad
|
||||
summary:
|
||||
otherData: Otros datos
|
||||
tax: IVA
|
||||
botanical: Botánico
|
||||
barcode: Código de barras
|
||||
completeName: Nombre completo
|
||||
family: Familia
|
||||
stems: Tallos
|
||||
multiplier: Multiplicador
|
||||
buyer: Comprador
|
||||
doPhoto: Hacer foto
|
||||
intrastatCode: Código intrastat
|
||||
ref: Referencia
|
||||
relevance: Relevancia
|
||||
weight: Peso (gramos)/tallo
|
||||
units: Unidades/caja
|
||||
expense: Gasto
|
||||
generic: Genérico
|
||||
recycledPlastic: Plástico reciclado
|
||||
nonRecycledPlastic: Plástico no reciclado
|
||||
minSalesQuantity: Cantidad mínima de venta
|
||||
genus: Genus
|
||||
specie: Specie
|
||||
buyRequest:
|
||||
requester: Solicitante
|
||||
requested: Solicitado
|
||||
attender: Comprador
|
||||
achieved: Conseguido
|
||||
concept: Concepto
|
||||
components:
|
||||
topbar: {}
|
||||
itemsFilterPanel:
|
||||
typeFk: Tipo
|
||||
tag: Etiqueta
|
||||
value: Valor
|
||||
# ItemFixedPriceFilter
|
||||
buyerFk: Comprador
|
||||
warehouseFk: Almacén
|
||||
started: Desde
|
||||
ended: Hasta
|
||||
mine: Para mi
|
||||
hasMinPrice: Precio mínimo
|
||||
# LatestBuysFilter
|
||||
salesPersonFk: Comprador
|
||||
supplierFk: Proveedor
|
||||
active: Activo
|
||||
visible: Visible
|
||||
floramondo: Floramondo
|
||||
showBadDates: Ver items a futuro
|
||||
userPanel:
|
||||
copyToken: Token copiado al portapapeles
|
||||
settings: Configuración
|
||||
logOut: Cerrar sesión
|
||||
localWarehouse: Almacén local
|
||||
localBank: Banco local
|
||||
localCompany: Empresa local
|
||||
|
@ -1087,7 +849,6 @@ components:
|
|||
userCompany: Empresa del usuario
|
||||
smartCard:
|
||||
downloadFile: Descargar archivo
|
||||
clone: Clonar
|
||||
openCard: Ficha
|
||||
openSummary: Detalles
|
||||
viewSummary: Vista previa
|
||||
|
|
|
@ -37,7 +37,7 @@ const redirectToAccountBasicData = (_, { id }) => {
|
|||
<div class="column q-gutter-sm">
|
||||
<VnInput
|
||||
v-model="data.name"
|
||||
:label="t('account.create.name')"
|
||||
:label="t('globals.name')"
|
||||
:rules="validate('VnUser.name')"
|
||||
/>
|
||||
<VnInput
|
||||
|
@ -47,12 +47,12 @@ const redirectToAccountBasicData = (_, { id }) => {
|
|||
/>
|
||||
<VnInput
|
||||
v-model="data.email"
|
||||
:label="t('account.create.email')"
|
||||
:label="t('globals.params.email')"
|
||||
type="email"
|
||||
:rules="validate('VnUser.email')"
|
||||
/>
|
||||
<VnSelect
|
||||
:label="t('account.create.role')"
|
||||
:label="t('account.card.role')"
|
||||
v-model="data.roleFk"
|
||||
:options="rolesOptions"
|
||||
option-value="id"
|
||||
|
@ -63,7 +63,7 @@ const redirectToAccountBasicData = (_, { id }) => {
|
|||
/>
|
||||
<VnInput
|
||||
v-model="data.password"
|
||||
:label="t('account.create.password')"
|
||||
:label="t('ldap.password')"
|
||||
type="password"
|
||||
:rules="validate('VnUser.password')"
|
||||
/>
|
||||
|
|
|
@ -45,7 +45,7 @@ const rolesOptions = ref([]);
|
|||
<QItem class="q-my-sm">
|
||||
<QItemSection>
|
||||
<VnInput
|
||||
:label="t('account.card.name')"
|
||||
:label="t('globals.name')"
|
||||
v-model="params.name"
|
||||
lazy-rules
|
||||
is-outlined
|
||||
|
|
|
@ -102,11 +102,11 @@ onMounted(async () => await getInitialLdapConfig());
|
|||
<QBtn
|
||||
class="q-ml-none"
|
||||
color="primary"
|
||||
:label="t('ldap.testConnection')"
|
||||
:label="t('account.card.testConnection')"
|
||||
@click="onTestConection()"
|
||||
>
|
||||
<QTooltip>
|
||||
{{ t('ldap.testConnection') }}
|
||||
{{ t('account.card.testConnection') }}
|
||||
</QTooltip>
|
||||
</QBtn>
|
||||
</template>
|
||||
|
@ -114,7 +114,7 @@ onMounted(async () => await getInitialLdapConfig());
|
|||
<VnRow class="row q-gutter-md">
|
||||
<div class="col">
|
||||
<QCheckbox
|
||||
:label="t('ldap.enableSync')"
|
||||
:label="t('account.card.enableSync')"
|
||||
v-model="data.hasData"
|
||||
@update:model-value="($event) => (hasData = $event)"
|
||||
:toggle-indeterminate="false"
|
||||
|
@ -146,7 +146,7 @@ onMounted(async () => await getInitialLdapConfig());
|
|||
/>
|
||||
<VnInput :label="t('ldap.userDN')" clearable v-model="data.userDn" />
|
||||
<VnInput
|
||||
:label="t('ldap.groupDN')"
|
||||
:label="t('account.card.groupDN')"
|
||||
clearable
|
||||
v-model="data.groupDn"
|
||||
/>
|
||||
|
|
|
@ -104,7 +104,7 @@ const exprBuilder = (param, value) => {
|
|||
|
||||
<template>
|
||||
<VnSearchbar
|
||||
data-key="AccountUsers"
|
||||
data-key="AccountList"
|
||||
:expr-builder="exprBuilder"
|
||||
:label="t('account.search')"
|
||||
:info="t('account.searchInfo')"
|
||||
|
@ -112,12 +112,12 @@ const exprBuilder = (param, value) => {
|
|||
/>
|
||||
<RightMenu>
|
||||
<template #right-panel>
|
||||
<AccountFilter data-key="AccountUsers" />
|
||||
<AccountFilter data-key="AccountList" />
|
||||
</template>
|
||||
</RightMenu>
|
||||
<VnTable
|
||||
ref="tableRef"
|
||||
data-key="AccountUsers"
|
||||
data-key="AccountList"
|
||||
url="VnUsers/preview"
|
||||
:filter="filter"
|
||||
order="id DESC"
|
||||
|
|
|
@ -110,12 +110,12 @@ onMounted(async () => await getInitialSambaConfig());
|
|||
<QBtn
|
||||
class="q-ml-none"
|
||||
color="primary"
|
||||
:label="t('samba.testConnection')"
|
||||
:label="t('account.card.testConnection')"
|
||||
:disable="formModel.hasChanges"
|
||||
@click="onTestConection()"
|
||||
>
|
||||
<QTooltip>
|
||||
{{ t('samba.testConnection') }}
|
||||
{{ t('account.card.testConnection') }}
|
||||
</QTooltip>
|
||||
</QBtn>
|
||||
</template>
|
||||
|
@ -123,7 +123,7 @@ onMounted(async () => await getInitialSambaConfig());
|
|||
<VnRow class="row q-gutter-md">
|
||||
<div class="col">
|
||||
<QCheckbox
|
||||
:label="t('samba.enableSync')"
|
||||
:label="t('account.card.enableSync')"
|
||||
v-model="data.hasData"
|
||||
@update:model-value="($event) => (hasData = $event)"
|
||||
:toggle-indeterminate="false"
|
||||
|
|
|
@ -36,15 +36,12 @@ const onDataSaved = ({ id }) => {
|
|||
<template #form-inputs="{ data }">
|
||||
<VnRow>
|
||||
<div class="col">
|
||||
<VnInput v-model="data.alias" :label="t('mailAlias.name')" />
|
||||
<VnInput v-model="data.alias" :label="t('globals.name')" />
|
||||
</div>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<div class="col">
|
||||
<VnInput
|
||||
v-model="data.description"
|
||||
:label="t('mailAlias.description')"
|
||||
/>
|
||||
<VnInput v-model="data.description" :label="t('role.description')" />
|
||||
</div>
|
||||
</VnRow>
|
||||
</template>
|
||||
|
|
|
@ -11,8 +11,8 @@ const { t } = useI18n();
|
|||
<FormModel model="Alias">
|
||||
<template #form="{ data }">
|
||||
<div class="column q-gutter-y-md">
|
||||
<VnInput v-model="data.alias" :label="t('mailAlias.name')" />
|
||||
<VnInput v-model="data.description" :label="t('mailAlias.description')" />
|
||||
<VnInput v-model="data.alias" :label="t('globals.name')" />
|
||||
<VnInput v-model="data.description" :label="t('role.description')" />
|
||||
<QCheckbox :label="t('mailAlias.isPublic')" v-model="data.isPublic" />
|
||||
</div>
|
||||
</template>
|
||||
|
|
|
@ -71,7 +71,7 @@ const removeAlias = () => {
|
|||
</QItem>
|
||||
</template>
|
||||
<template #body="{ entity }">
|
||||
<VnLv :label="t('mailAlias.description')" :value="entity.description" />
|
||||
<VnLv :label="t('role.description')" :value="entity.description" />
|
||||
</template>
|
||||
</CardDescriptor>
|
||||
</template>
|
||||
|
|
|
@ -42,8 +42,8 @@ const entityId = computed(() => $props.id || route.params.id);
|
|||
<QIcon name="open_in_new" />
|
||||
</router-link>
|
||||
</QCardSection>
|
||||
<VnLv :label="t('mailAlias.id')" :value="alias.id" />
|
||||
<VnLv :label="t('mailAlias.description')" :value="alias.description" />
|
||||
<VnLv :label="t('role.id')" :value="alias.id" />
|
||||
<VnLv :label="t('role.description')" :value="alias.description" />
|
||||
</QCard>
|
||||
</template>
|
||||
</CardSummary>
|
||||
|
|
|
@ -36,7 +36,7 @@ watch(
|
|||
<div class="q-gutter-y-sm">
|
||||
<VnInput v-model="data.name" :label="t('account.card.nickname')" />
|
||||
<VnInput v-model="data.nickname" :label="t('account.card.alias')" />
|
||||
<VnInput v-model="data.email" :label="t('account.card.email')" />
|
||||
<VnInput v-model="data.email" :label="t('globals.params.email')" />
|
||||
<VnSelect
|
||||
url="Languages"
|
||||
v-model="data.lang"
|
||||
|
|
|
@ -54,7 +54,7 @@ const hasAccount = ref(false);
|
|||
</template>
|
||||
<template #before>
|
||||
<!-- falla id :id="entityId.value" collection="user" size="160x160" -->
|
||||
<VnImg :id="entityId" collection="user" resolution="160x160" class="photo">
|
||||
<VnImg :id="entityId" collection="user" resolution="520x520" class="photo">
|
||||
<template #error>
|
||||
<div
|
||||
class="absolute-full picture text-center q-pa-md flex flex-center"
|
||||
|
|
|
@ -82,14 +82,14 @@ const exprBuilder = (param, value) => {
|
|||
|
||||
<template>
|
||||
<VnSearchbar
|
||||
data-key="Roles"
|
||||
data-key="AccountRolesList"
|
||||
:expr-builder="exprBuilder"
|
||||
:label="t('role.searchRoles')"
|
||||
:info="t('role.searchInfo')"
|
||||
/>
|
||||
<VnTable
|
||||
ref="tableRef"
|
||||
data-key="Roles"
|
||||
data-key="AccountRolesList"
|
||||
:url="`VnRoles`"
|
||||
:create="{
|
||||
urlCreate: 'VnRoles',
|
||||
|
|
|
@ -29,7 +29,7 @@ const props = defineProps({
|
|||
<QItem class="q-my-sm">
|
||||
<QItemSection>
|
||||
<VnInput
|
||||
:label="t('role.name')"
|
||||
:label="t('globals.name')"
|
||||
v-model="params.name"
|
||||
lazy-rules
|
||||
is-outlined
|
||||
|
|
|
@ -12,15 +12,12 @@ const { t } = useI18n();
|
|||
<template #form="{ data }">
|
||||
<VnRow>
|
||||
<div class="col">
|
||||
<VnInput v-model="data.name" :label="t('role.card.name')" />
|
||||
<VnInput v-model="data.name" :label="t('globals.name')" />
|
||||
</div>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<div class="col">
|
||||
<VnInput
|
||||
v-model="data.description"
|
||||
:label="t('role.card.description')"
|
||||
/>
|
||||
<VnInput v-model="data.description" :label="t('role.description')" />
|
||||
</div>
|
||||
</VnRow>
|
||||
</template>
|
||||
|
|
|
@ -9,7 +9,7 @@ const { t } = useI18n();
|
|||
<VnCard
|
||||
data-key="Role"
|
||||
:descriptor="RoleDescriptor"
|
||||
search-data-key="AccountRoles"
|
||||
search-data-key="AccountRolesList"
|
||||
:searchbar-props="{
|
||||
url: 'VnRoles',
|
||||
label: t('role.searchRoles'),
|
||||
|
|
|
@ -58,7 +58,7 @@ const removeRole = async () => {
|
|||
</QItem>
|
||||
</template>
|
||||
<template #body="{ entity }">
|
||||
<VnLv :label="t('role.card.description')" :value="entity.description" />
|
||||
<VnLv :label="t('role.description')" :value="entity.description" />
|
||||
</template>
|
||||
</CardDescriptor>
|
||||
</template>
|
||||
|
|
|
@ -22,15 +22,12 @@ const { t } = useI18n();
|
|||
<template #form-inputs="{ data }">
|
||||
<VnRow>
|
||||
<div class="col">
|
||||
<VnInput v-model="data.name" :label="t('role.card.name')" />
|
||||
<VnInput v-model="data.name" :label="t('globals.name')" />
|
||||
</div>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<div class="col">
|
||||
<VnInput
|
||||
v-model="data.description"
|
||||
:label="t('role.card.description')"
|
||||
/>
|
||||
<VnInput v-model="data.description" :label="t('role.description')" />
|
||||
</div>
|
||||
</VnRow>
|
||||
</template>
|
||||
|
|
|
@ -44,9 +44,9 @@ const filter = {
|
|||
<QIcon name="open_in_new" />
|
||||
</a>
|
||||
</QCardSection>
|
||||
<VnLv :label="t('role.card.id')" :value="role.id" />
|
||||
<VnLv :label="t('role.card.name')" :value="role.name" />
|
||||
<VnLv :label="t('role.card.description')" :value="role.description" />
|
||||
<VnLv :label="t('role.id')" :value="role.id" />
|
||||
<VnLv :label="t('globals.name')" :value="role.name" />
|
||||
<VnLv :label="t('role.description')" :value="role.description" />
|
||||
</QCard>
|
||||
</template>
|
||||
</CardSummary>
|
||||
|
|
|
@ -1,32 +1,15 @@
|
|||
account:
|
||||
pageTitles:
|
||||
users: Users
|
||||
list: Users
|
||||
roles: Roles
|
||||
alias: Mail aliasses
|
||||
accounts: Accounts
|
||||
ldap: LDAP
|
||||
samba: Samba
|
||||
acls: ACLs
|
||||
connections: Connections
|
||||
inheritedRoles: Inherited Roles
|
||||
subRoles: Sub Roles
|
||||
newRole: New role
|
||||
privileges: Privileges
|
||||
mailAlias: Mail Alias
|
||||
mailForwarding: Mail Forwarding
|
||||
accountCreate: New user
|
||||
aliasUsers: Users
|
||||
card:
|
||||
name: Name
|
||||
nickname: User
|
||||
role: Role
|
||||
email: Email
|
||||
alias: Alias
|
||||
lang: Language
|
||||
roleFk: Role
|
||||
newUser: New user
|
||||
ticketTracking: Ticket tracking
|
||||
enableSync: Habilitar sincronización
|
||||
groupDN: DN grupos
|
||||
testConnection: Probar conexión
|
||||
privileges:
|
||||
delegate: Can delegate privileges
|
||||
enabled: Account enabled!
|
||||
|
@ -74,11 +57,7 @@ account:
|
|||
search: Search user
|
||||
searchInfo: You can search by id, name or nickname
|
||||
create:
|
||||
name: Name
|
||||
nickname: Nickname
|
||||
email: Email
|
||||
role: Role
|
||||
password: Password
|
||||
active: Active
|
||||
mailForwarding:
|
||||
forwardingMail: Forward email
|
||||
|
@ -86,50 +65,30 @@ account:
|
|||
enableMailForwarding: Enable mail forwarding
|
||||
mailInputInfo: All emails will be forwarded to the specified address.
|
||||
role:
|
||||
pageTitles:
|
||||
inheritedRoles: Inherited Roles
|
||||
subRoles: Sub Roles
|
||||
card:
|
||||
description: Description
|
||||
id: Id
|
||||
name: Name
|
||||
newRole: New role
|
||||
searchRoles: Search role
|
||||
searchInfo: Search role by id or name
|
||||
name: Name
|
||||
description: Description
|
||||
id: Id
|
||||
mailAlias:
|
||||
pageTitles:
|
||||
aliasUsers: Users
|
||||
search: Search mail alias
|
||||
searchInfo: Search alias by id or name
|
||||
alias: Alias
|
||||
description: Description
|
||||
id: Id
|
||||
newAlias: New alias
|
||||
name: Name
|
||||
isPublic: Public
|
||||
ldap:
|
||||
enableSync: Enable synchronization
|
||||
server: Server
|
||||
rdn: RDN
|
||||
userDN: User DN
|
||||
filter: Filter
|
||||
groupDN: Group DN
|
||||
testConnection: Test connection
|
||||
success: LDAP connection established!
|
||||
password: Password
|
||||
samba:
|
||||
enableSync: Enable synchronization
|
||||
domainController: Domain controller
|
||||
domainAD: AD domain
|
||||
userAD: AD user
|
||||
groupDN: Group DN
|
||||
passwordAD: AD password
|
||||
domainPart: User DN (without domain part)
|
||||
verifyCertificate: Verify certificate
|
||||
testConnection: Test connection
|
||||
success: Samba connection established!
|
||||
accounts:
|
||||
homedir: Homedir base
|
||||
|
@ -147,8 +106,6 @@ connections:
|
|||
created: Created
|
||||
killSession: Kill session
|
||||
acls:
|
||||
role: Role
|
||||
accessType: Access type
|
||||
permissions: Permission
|
||||
search: Search acls
|
||||
searchInfo: Search acls by model name
|
||||
|
|
|
@ -1,27 +1,7 @@
|
|||
account:
|
||||
pageTitles:
|
||||
users: Usuarios
|
||||
list: Usuarios
|
||||
roles: Roles
|
||||
alias: Alias de correo
|
||||
accounts: Cuentas
|
||||
ldap: LDAP
|
||||
samba: Samba
|
||||
acls: ACLs
|
||||
connections: Conexiones
|
||||
inheritedRoles: Roles heredados
|
||||
newRole: Nuevo rol
|
||||
subRoles: Subroles
|
||||
privileges: Privilegios
|
||||
mailAlias: Alias de correo
|
||||
mailForwarding: Reenvío de correo
|
||||
accountCreate: Nuevo usuario
|
||||
aliasUsers: Usuarios
|
||||
card:
|
||||
nickname: Usuario
|
||||
name: Nombre
|
||||
role: Rol
|
||||
email: Mail
|
||||
alias: Alias
|
||||
lang: Idioma
|
||||
roleFk: Rol
|
||||
|
@ -33,6 +13,9 @@ account:
|
|||
deactivated: ¡Usuario desactivado!
|
||||
newUser: Nuevo usuario
|
||||
twoFactor: Doble factor
|
||||
enableSync: Habilitar sincronización
|
||||
groupDN: DN grupos
|
||||
testConnection: Probar conexión
|
||||
privileges:
|
||||
delegate: Puede delegar privilegios
|
||||
actions:
|
||||
|
@ -73,11 +56,7 @@ account:
|
|||
search: Buscar usuario
|
||||
searchInfo: Puedes buscar por id, nombre o usuario
|
||||
create:
|
||||
name: Nombre
|
||||
nickname: Nombre mostrado
|
||||
email: Email
|
||||
role: Rol
|
||||
password: Contraseña
|
||||
active: Activo
|
||||
mailForwarding:
|
||||
forwardingMail: Dirección de reenvío
|
||||
|
@ -85,51 +64,30 @@ account:
|
|||
enableMailForwarding: Habilitar redirección de correo
|
||||
mailInputInfo: Todos los correos serán reenviados a la dirección especificada, no se mantendrá copia de los mismos en el buzón del usuario.
|
||||
role:
|
||||
pageTitles:
|
||||
inheritedRoles: Roles heredados
|
||||
subRoles: Subroles
|
||||
newRole: Nuevo rol
|
||||
card:
|
||||
description: Descripción
|
||||
id: Id
|
||||
name: Nombre
|
||||
newRole: Nuevo rol
|
||||
searchRoles: Buscar roles
|
||||
searchInfo: Buscar rol por id o nombre
|
||||
name: Nombre
|
||||
description: Descripción
|
||||
id: Id
|
||||
mailAlias:
|
||||
pageTitles:
|
||||
aliasUsers: Usuarios
|
||||
search: Buscar alias de correo
|
||||
searchInfo: Buscar alias por id o nombre
|
||||
alias: Alias
|
||||
description: Descripción
|
||||
id: Id
|
||||
newAlias: Nuevo alias
|
||||
name: Nombre
|
||||
isPublic: Público
|
||||
ldap:
|
||||
password: Contraseña
|
||||
enableSync: Habilitar sincronización
|
||||
server: Servidor
|
||||
rdn: RDN
|
||||
userDN: DN usuarios
|
||||
filter: Filtro
|
||||
groupDN: DN grupos
|
||||
testConnection: Probar conexión
|
||||
success: ¡Conexión con LDAP establecida!
|
||||
samba:
|
||||
enableSync: Habilitar sincronización
|
||||
domainController: Controlador de dominio
|
||||
domainAD: Dominio AD
|
||||
groupDN: DN grupos
|
||||
userAD: Usuario AD
|
||||
passwordAD: Contraseña AD
|
||||
domainPart: DN usuarios (sin la parte del dominio)
|
||||
verifyCertificate: Verificar certificado
|
||||
testConnection: Probar conexión
|
||||
success: ¡Conexión con Samba establecida!
|
||||
accounts:
|
||||
homedir: Directorio base para carpetas de usuario
|
||||
|
@ -147,8 +105,6 @@ connections:
|
|||
created: Creado
|
||||
killSession: Matar sesión
|
||||
acls:
|
||||
role: Rol
|
||||
accessType: Tipo de acceso
|
||||
permissions: Permiso
|
||||
search: Buscar acls
|
||||
searchInfo: Buscar acls por nombre
|
||||
|
|
|
@ -23,7 +23,7 @@ defineExpose({ states });
|
|||
|
||||
<template>
|
||||
<FetchData url="ClaimStates" @on-fetch="(data) => (states = data)" auto-load />
|
||||
<VnFilterPanel :data-key="props.dataKey" :search-button="true" search-url="table">
|
||||
<VnFilterPanel :data-key="props.dataKey" :search-button="true">
|
||||
<template #tags="{ tag, formatFn }">
|
||||
<div class="q-gutter-x-xs">
|
||||
<strong>{{ t(`params.${tag.label}`) }}: </strong>
|
||||
|
|
|
@ -55,7 +55,7 @@ const exprBuilder = (param, value) => {
|
|||
/>
|
||||
<VnSelect
|
||||
:input-debounce="0"
|
||||
:label="t('customer.basicData.businessType')"
|
||||
:label="t('customer.summary.businessType')"
|
||||
:options="businessTypes"
|
||||
:rules="validate('client.businessTypeFk')"
|
||||
emit-value
|
||||
|
@ -67,13 +67,13 @@ const exprBuilder = (param, value) => {
|
|||
</VnRow>
|
||||
<VnRow>
|
||||
<VnInput
|
||||
:label="t('customer.basicData.contact')"
|
||||
:label="t('customer.summary.contact')"
|
||||
:rules="validate('client.contact')"
|
||||
clearable
|
||||
v-model="data.contact"
|
||||
/>
|
||||
<VnInput
|
||||
:label="t('customer.basicData.email')"
|
||||
:label="t('globals.params.email')"
|
||||
:rules="validate('client.email')"
|
||||
clearable
|
||||
type="email"
|
||||
|
@ -90,13 +90,13 @@ const exprBuilder = (param, value) => {
|
|||
</VnRow>
|
||||
<VnRow>
|
||||
<VnInput
|
||||
:label="t('customer.basicData.phone')"
|
||||
:label="t('customer.extendedList.tableVisibleColumns.phone')"
|
||||
:rules="validate('client.phone')"
|
||||
clearable
|
||||
v-model="data.phone"
|
||||
/>
|
||||
<VnInput
|
||||
:label="t('customer.basicData.mobile')"
|
||||
:label="t('customer.summary.mobile')"
|
||||
:rules="validate('client.mobile')"
|
||||
clearable
|
||||
v-model="data.mobile"
|
||||
|
@ -106,7 +106,7 @@ const exprBuilder = (param, value) => {
|
|||
<VnSelect
|
||||
url="Workers/search"
|
||||
v-model="data.salesPersonFk"
|
||||
:label="t('customer.basicData.salesPerson')"
|
||||
:label="t('customer.summary.salesPerson')"
|
||||
:params="{
|
||||
departmentCodes: ['VT', 'shopping'],
|
||||
}"
|
||||
|
@ -144,7 +144,7 @@ const exprBuilder = (param, value) => {
|
|||
option-value="id"
|
||||
option-label="name"
|
||||
emit-value
|
||||
:label="t('customer.basicData.contactChannel')"
|
||||
:label="t('customer.summary.contactChannel')"
|
||||
map-options
|
||||
:rules="validate('client.contactChannelFk')"
|
||||
:input-debounce="0"
|
||||
|
|
|
@ -37,6 +37,9 @@ const entityId = computed(() => {
|
|||
|
||||
const data = ref(useCardDescription());
|
||||
const setData = (entity) => (data.value = useCardDescription(entity?.name, entity?.id));
|
||||
const debtWarning = computed(() => {
|
||||
return customer.value?.debt > customer.value?.credit ? 'negative' : 'primary';
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -53,11 +56,17 @@ const setData = (entity) => (data.value = useCardDescription(entity?.name, entit
|
|||
<CustomerDescriptorMenu :customer="entity" />
|
||||
</template>
|
||||
<template #body="{ entity }">
|
||||
<VnLv :label="t('customer.card.payMethod')" :value="entity.payMethod.name" />
|
||||
|
||||
<VnLv :label="t('customer.card.credit')" :value="toCurrency(entity.credit)" />
|
||||
<VnLv
|
||||
:label="t('customer.card.securedCredit')"
|
||||
:label="t('customer.summary.payMethod')"
|
||||
:value="entity.payMethod.name"
|
||||
/>
|
||||
|
||||
<VnLv
|
||||
:label="t('customer.summary.credit')"
|
||||
:value="toCurrency(entity.credit)"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('customer.summary.securedCredit')"
|
||||
:value="toCurrency(entity.creditInsurance)"
|
||||
/>
|
||||
|
||||
|
@ -66,7 +75,7 @@ const setData = (entity) => (data.value = useCardDescription(entity?.name, entit
|
|||
:value="toCurrency(entity.debt)"
|
||||
:info="t('customer.summary.riskInfo')"
|
||||
/>
|
||||
<VnLv :label="t('customer.card.salesPerson')">
|
||||
<VnLv :label="t('customer.summary.salesPerson')">
|
||||
<template #value>
|
||||
<VnUserLink
|
||||
v-if="entity.salesPersonUser"
|
||||
|
@ -77,7 +86,7 @@ const setData = (entity) => (data.value = useCardDescription(entity?.name, entit
|
|||
</template>
|
||||
</VnLv>
|
||||
<VnLv
|
||||
:label="t('customer.card.businessTypeFk')"
|
||||
:label="t('customer.extendedList.tableVisibleColumns.businessTypeFk')"
|
||||
:value="entity.businessType.description"
|
||||
/>
|
||||
</template>
|
||||
|
@ -111,7 +120,7 @@ const setData = (entity) => (data.value = useCardDescription(entity?.name, entit
|
|||
v-if="customer.debt > customer.credit"
|
||||
name="vn:risk"
|
||||
size="xs"
|
||||
color="primary"
|
||||
:color="debtWarning"
|
||||
>
|
||||
<QTooltip>{{ t('customer.card.hasDebt') }}</QTooltip>
|
||||
</QIcon>
|
||||
|
@ -168,23 +177,6 @@ const setData = (entity) => (data.value = useCardDescription(entity?.name, entit
|
|||
>
|
||||
<QTooltip>{{ t('Customer ticket list') }}</QTooltip>
|
||||
</QBtn>
|
||||
<QBtn
|
||||
:to="{
|
||||
name: 'TicketList',
|
||||
query: {
|
||||
table: JSON.stringify({
|
||||
clientFk: entity.id,
|
||||
}),
|
||||
createForm: JSON.stringify({ clientId: entity.id }),
|
||||
},
|
||||
}"
|
||||
size="md"
|
||||
color="primary"
|
||||
target="_blank"
|
||||
icon="vn:ticketAdd"
|
||||
>
|
||||
<QTooltip>{{ t('New ticket') }}</QTooltip>
|
||||
</QBtn>
|
||||
<QBtn
|
||||
:to="{
|
||||
name: 'InvoiceOutList',
|
||||
|
@ -196,23 +188,6 @@ const setData = (entity) => (data.value = useCardDescription(entity?.name, entit
|
|||
>
|
||||
<QTooltip>{{ t('Customer invoice out list') }}</QTooltip>
|
||||
</QBtn>
|
||||
<QBtn
|
||||
:to="{
|
||||
name: 'OrderList',
|
||||
query: {
|
||||
table: JSON.stringify({
|
||||
clientFk: entity.id,
|
||||
}),
|
||||
createForm: JSON.stringify({ clientFk: entity.id }),
|
||||
},
|
||||
}"
|
||||
size="md"
|
||||
target="_blank"
|
||||
icon="vn:basketadd"
|
||||
color="primary"
|
||||
>
|
||||
<QTooltip>{{ t('New order') }}</QTooltip>
|
||||
</QBtn>
|
||||
<QBtn
|
||||
:to="{
|
||||
name: 'AccountSummary',
|
||||
|
|
|
@ -6,8 +6,8 @@ import axios from 'axios';
|
|||
import { useQuasar } from 'quasar';
|
||||
|
||||
import useNotify from 'src/composables/useNotify';
|
||||
|
||||
import VnSmsDialog from 'src/components/common/VnSmsDialog.vue';
|
||||
import useOpenURL from 'src/composables/useOpenURL';
|
||||
|
||||
const $props = defineProps({
|
||||
customer: {
|
||||
|
@ -15,7 +15,6 @@ const $props = defineProps({
|
|||
required: true,
|
||||
},
|
||||
});
|
||||
|
||||
const { notify } = useNotify();
|
||||
const { t } = useI18n();
|
||||
const quasar = useQuasar();
|
||||
|
@ -25,7 +24,7 @@ const showSmsDialog = () => {
|
|||
quasar.dialog({
|
||||
component: VnSmsDialog,
|
||||
componentProps: {
|
||||
phone: $props.customer.phone || $props.customer.mobile,
|
||||
phone: $props.customer.mobile || $props.customer.phone,
|
||||
promise: sendSms,
|
||||
},
|
||||
});
|
||||
|
@ -40,9 +39,42 @@ const sendSms = async (payload) => {
|
|||
notify(error.message, 'positive');
|
||||
}
|
||||
};
|
||||
|
||||
const openCreateForm = (type) => {
|
||||
const query = {
|
||||
table: {
|
||||
clientFk: $props.customer.id,
|
||||
},
|
||||
createForm: {
|
||||
addressId: $props.customer.defaultAddressFk,
|
||||
},
|
||||
};
|
||||
const clientFk = {
|
||||
ticket: 'clientId',
|
||||
order: 'clientFk',
|
||||
};
|
||||
const key = clientFk[type];
|
||||
if (!key) return;
|
||||
query.createForm[key] = $props.customer.id;
|
||||
|
||||
const params = Object.entries(query)
|
||||
.map(([key, value]) => `${key}=${JSON.stringify(value)}`)
|
||||
.join('&');
|
||||
useOpenURL(`/#/${type}/list?${params}`);
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<QItem v-ripple clickable @click="openCreateForm('ticket')">
|
||||
<QItemSection>
|
||||
{{ t('globals.pageTitles.createTicket') }}
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem v-ripple clickable @click="openCreateForm('order')">
|
||||
<QItemSection>
|
||||
{{ t('globals.pageTitles.createOrder') }}
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem v-ripple clickable>
|
||||
<QItemSection @click="showSmsDialog()">{{ t('Send SMS') }}</QItemSection>
|
||||
</QItem>
|
||||
|
|
|
@ -4,7 +4,7 @@ import { useRoute } from 'vue-router';
|
|||
import { useI18n } from 'vue-i18n';
|
||||
import VnUserLink from 'src/components/ui/VnUserLink.vue';
|
||||
|
||||
import { toCurrency, toPercentage, toDate } from 'src/filters';
|
||||
import { toCurrency, toPercentage, toDate, dashOrCurrency } from 'src/filters';
|
||||
import CardSummary from 'components/ui/CardSummary.vue';
|
||||
import { getUrl } from 'src/composables/getUrl';
|
||||
import VnLv from 'src/components/ui/VnLv.vue';
|
||||
|
@ -27,21 +27,16 @@ const $props = defineProps({
|
|||
const entityId = computed(() => $props.id || route.params.id);
|
||||
const customer = computed(() => summary.value.entity);
|
||||
const summary = ref();
|
||||
const clientUrl = ref();
|
||||
|
||||
onMounted(async () => {
|
||||
clientUrl.value = (await getUrl('client/')) + entityId.value + '/';
|
||||
});
|
||||
|
||||
const defaulterAmount = computed(() => customer.value.defaulters[0]?.amount);
|
||||
const balanceDue = computed(() => {
|
||||
return (
|
||||
customer.value &&
|
||||
customer.value.defaulters.length &&
|
||||
customer.value.defaulters[0].amount
|
||||
);
|
||||
const amount = defaulterAmount.value;
|
||||
if (!amount || amount < 0) {
|
||||
return null;
|
||||
}
|
||||
return amount;
|
||||
});
|
||||
|
||||
const balanceDueWarning = computed(() => (balanceDue.value ? 'negative' : ''));
|
||||
const balanceDueWarning = computed(() => (defaulterAmount.value ? 'negative' : ''));
|
||||
|
||||
const claimRate = computed(() => {
|
||||
return customer.value.claimsRatio?.claimingRate ?? 0;
|
||||
|
@ -87,7 +82,7 @@ const sumRisk = ({ clientRisks }) => {
|
|||
<VnLv :label="t('customer.summary.contact')" :value="entity.contact" />
|
||||
<VnLv :value="entity.phone">
|
||||
<template #label>
|
||||
{{ t('customer.summary.phone') }}
|
||||
{{ t('customer.extendedList.tableVisibleColumns.phone') }}
|
||||
<VnLinkPhone :phone-number="entity.phone" />
|
||||
</template>
|
||||
</VnLv>
|
||||
|
@ -95,11 +90,17 @@ const sumRisk = ({ clientRisks }) => {
|
|||
<template #label>
|
||||
{{ t('customer.summary.mobile') }}
|
||||
<VnLinkPhone :phone-number="entity.mobile" />
|
||||
<VnLinkPhone
|
||||
say-simple
|
||||
:phone-number="entity.mobile"
|
||||
:channel="entity.country?.saySimpleCountry?.channel"
|
||||
class="q-ml-xs"
|
||||
/>
|
||||
</template>
|
||||
</VnLv>
|
||||
<VnLv :value="entity.email" copy
|
||||
><template #label>
|
||||
{{ t('customer.summary.email') }}
|
||||
{{ t('globals.params.email') }}
|
||||
<VnLinkMail email="entity.email"></VnLinkMail> </template
|
||||
></VnLv>
|
||||
<VnLv
|
||||
|
@ -142,7 +143,7 @@ const sumRisk = ({ clientRisks }) => {
|
|||
<VnLv
|
||||
v-if="entity.country"
|
||||
:label="t('customer.summary.country')"
|
||||
:value="entity.country.country"
|
||||
:value="entity.country.name"
|
||||
/>
|
||||
<VnLv :label="t('customer.summary.street')" :value="entity.street" />
|
||||
</QCard>
|
||||
|
@ -213,7 +214,7 @@ const sumRisk = ({ clientRisks }) => {
|
|||
:value="entity.defaultAddress.city"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('customer.summary.addressStreet')"
|
||||
:label="t('customer.summary.street')"
|
||||
:value="entity.defaultAddress.street"
|
||||
/>
|
||||
</QCard>
|
||||
|
@ -299,7 +300,7 @@ const sumRisk = ({ clientRisks }) => {
|
|||
<VnLv
|
||||
v-if="entity.defaulters"
|
||||
:label="t('customer.summary.balanceDue')"
|
||||
:value="toCurrency(balanceDue)"
|
||||
:value="dashOrCurrency(balanceDue)()"
|
||||
:class="balanceDueWarning"
|
||||
:info="t('customer.summary.balanceDueInfo')"
|
||||
/>
|
||||
|
|
|
@ -2,10 +2,9 @@
|
|||
import { computed, onBeforeMount, ref, watch, nextTick } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useRoute } from 'vue-router';
|
||||
|
||||
import VnInputDate from 'components/common/VnInputDate.vue';
|
||||
import VnInput from 'src/components/common/VnInput.vue';
|
||||
|
||||
import VnRow from 'components/ui/VnRow.vue';
|
||||
import axios from 'axios';
|
||||
import useNotify from 'src/composables/useNotify';
|
||||
import { useStateStore } from 'stores/useStateStore';
|
||||
|
|
|
@ -11,10 +11,24 @@ defineProps({
|
|||
required: true,
|
||||
},
|
||||
});
|
||||
const handleSalesModelValue = (val) => ({
|
||||
or: [
|
||||
{ id: val },
|
||||
{ name: val },
|
||||
{ nickname: { like: '%' + val + '%' } },
|
||||
{ code: { like: `${val}%` } },
|
||||
],
|
||||
});
|
||||
|
||||
const exprBuilder = (param, value) => {
|
||||
return {
|
||||
and: [{ active: { neq: false } }, handleSalesModelValue(value)],
|
||||
};
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<VnFilterPanel :data-key="dataKey" :search-button="true" search-url="table">
|
||||
<VnFilterPanel :data-key="dataKey" :search-button="true">
|
||||
<template #tags="{ tag, formatFn }">
|
||||
<div class="q-gutter-x-xs">
|
||||
<strong>{{ t(`params.${tag.label}`) }}: </strong>
|
||||
|
@ -34,7 +48,7 @@ defineProps({
|
|||
<QItem class="q-mb-sm">
|
||||
<QItemSection>
|
||||
<VnInput
|
||||
:label="t('customerFilter.filter.name')"
|
||||
:label="t('globals.name')"
|
||||
v-model="params.name"
|
||||
is-outlined
|
||||
/>
|
||||
|
@ -43,7 +57,7 @@ defineProps({
|
|||
<QItem class="q-mb-sm">
|
||||
<QItemSection>
|
||||
<VnInput
|
||||
:label="t('customerFilter.filter.socialName')"
|
||||
:label="t('customer.summary.socialName')"
|
||||
v-model="params.socialName"
|
||||
is-outlined
|
||||
/>
|
||||
|
@ -52,14 +66,18 @@ defineProps({
|
|||
<QItem class="q-mb-sm">
|
||||
<QItemSection>
|
||||
<VnSelect
|
||||
url="Workers/activeWithInheritedRole"
|
||||
:filter="{ where: { role: 'salesPerson' } }"
|
||||
url="Workers/search"
|
||||
:params="{
|
||||
departmentCodes: ['VT'],
|
||||
}"
|
||||
auto-load
|
||||
:label="t('Salesperson')"
|
||||
:expr-builder="exprBuilder"
|
||||
v-model="params.salesPersonFk"
|
||||
@update:model-value="searchFn()"
|
||||
option-value="id"
|
||||
option-label="name"
|
||||
sort-by="nickname ASC"
|
||||
emit-value
|
||||
map-options
|
||||
use-input
|
||||
|
@ -68,7 +86,18 @@ defineProps({
|
|||
outlined
|
||||
rounded
|
||||
:input-debounce="0"
|
||||
/>
|
||||
>
|
||||
<template #option="{ itemProps, opt }">
|
||||
<QItem v-bind="itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel>{{ opt.name }}</QItemLabel>
|
||||
<QItemLabel caption>
|
||||
{{ opt.nickname }},{{ opt.code }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template></VnSelect
|
||||
>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem class="q-mb-sm">
|
||||
|
|
|
@ -77,7 +77,7 @@ const columns = computed(() => [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('customer.extendedList.tableVisibleColumns.credit'),
|
||||
label: t('customer.summary.credit'),
|
||||
name: 'credit',
|
||||
columnFilter: {
|
||||
component: 'number',
|
||||
|
@ -115,7 +115,7 @@ const columns = computed(() => [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('customer.extendedList.tableVisibleColumns.mobile'),
|
||||
label: t('customer.summary.mobile'),
|
||||
name: 'mobile',
|
||||
cardVisible: true,
|
||||
columnFilter: {
|
||||
|
@ -162,17 +162,17 @@ const columns = computed(() => [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('customer.extendedList.tableVisibleColumns.city'),
|
||||
label: t('customer.summary.city'),
|
||||
name: 'city',
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('customer.extendedList.tableVisibleColumns.postcode'),
|
||||
label: t('customer.summary.postcode'),
|
||||
name: 'postcode',
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('customer.extendedList.tableVisibleColumns.email'),
|
||||
label: t('globals.params.email'),
|
||||
name: 'email',
|
||||
cardVisible: true,
|
||||
},
|
||||
|
@ -207,7 +207,7 @@ const columns = computed(() => [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('customer.extendedList.tableVisibleColumns.payMethodFk'),
|
||||
label: t('customer.summary.payMethodFk'),
|
||||
name: 'payMethodFk',
|
||||
columnFilter: {
|
||||
component: 'select',
|
||||
|
@ -250,7 +250,7 @@ const columns = computed(() => [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('customer.extendedList.tableVisibleColumns.isActive'),
|
||||
label: t('customer.summary.isActive'),
|
||||
name: 'isActive',
|
||||
chip: {
|
||||
color: null,
|
||||
|
@ -279,7 +279,7 @@ const columns = computed(() => [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('customer.extendedList.tableVisibleColumns.isEqualizated'),
|
||||
label: t('customer.summary.isEqualizated'),
|
||||
name: 'isEqualizated',
|
||||
create: true,
|
||||
columnFilter: {
|
||||
|
@ -325,7 +325,7 @@ const columns = computed(() => [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('customer.extendedList.tableVisibleColumns.hasLcr'),
|
||||
label: t('customer.summary.hasLcr'),
|
||||
name: 'hasLcr',
|
||||
columnFilter: {
|
||||
inWhere: true,
|
||||
|
@ -333,7 +333,7 @@ const columns = computed(() => [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('customer.extendedList.tableVisibleColumns.hasCoreVnl'),
|
||||
label: t('customer.summary.hasCoreVnl'),
|
||||
name: 'hasCoreVnl',
|
||||
columnFilter: {
|
||||
inWhere: true,
|
||||
|
@ -394,16 +394,16 @@ function handleLocation(data, location) {
|
|||
<VnSearchbar
|
||||
:info="t('You can search by customer id or name')"
|
||||
:label="t('Search customer')"
|
||||
data-key="Customer"
|
||||
data-key="CustomerList"
|
||||
/>
|
||||
<RightMenu>
|
||||
<template #right-panel>
|
||||
<CustomerFilter data-key="Customer" />
|
||||
<CustomerFilter data-key="CustomerList" />
|
||||
</template>
|
||||
</RightMenu>
|
||||
<VnTable
|
||||
ref="tableRef"
|
||||
data-key="Customer"
|
||||
data-key="CustomerList"
|
||||
url="Clients/filter"
|
||||
:create="{
|
||||
urlCreate: 'Clients/createWithUser',
|
||||
|
@ -424,7 +424,7 @@ function handleLocation(data, location) {
|
|||
<VnSelect
|
||||
url="Workers/search"
|
||||
v-model="data.salesPersonFk"
|
||||
:label="t('customer.basicData.salesPerson')"
|
||||
:label="t('customer.summary.salesPerson')"
|
||||
:params="{
|
||||
departmentCodes: ['VT', 'shopping'],
|
||||
}"
|
||||
|
|
|
@ -23,6 +23,7 @@ const incoterms = ref([]);
|
|||
const customsAgents = ref([]);
|
||||
const observationTypes = ref([]);
|
||||
const notes = ref([]);
|
||||
let originalNotes = [];
|
||||
const deletes = ref([]);
|
||||
|
||||
onBeforeMount(() => {
|
||||
|
@ -42,7 +43,8 @@ const getData = async (observations) => {
|
|||
});
|
||||
|
||||
if (data.length) {
|
||||
notes.value = data
|
||||
originalNotes = data;
|
||||
notes.value = originalNotes
|
||||
.map((observation) => {
|
||||
const type = observationTypes.value.find(
|
||||
(type) => type.id === observation.observationTypeFk
|
||||
|
@ -81,14 +83,24 @@ const deleteNote = (id, index) => {
|
|||
};
|
||||
|
||||
const onDataSaved = async () => {
|
||||
let payload = {};
|
||||
const creates = notes.value.filter((note) => note.$isNew);
|
||||
if (creates.length) {
|
||||
payload.creates = creates;
|
||||
}
|
||||
if (deletes.value.length) {
|
||||
payload.deletes = deletes.value;
|
||||
}
|
||||
let payload = {
|
||||
creates: notes.value.filter((note) => note.$isNew),
|
||||
deletes: deletes.value,
|
||||
updates: notes.value
|
||||
.filter((note) =>
|
||||
originalNotes.some(
|
||||
(oNote) =>
|
||||
oNote.id === note.id &&
|
||||
(note.description !== oNote.description ||
|
||||
note.observationTypeFk !== oNote.observationTypeFk)
|
||||
)
|
||||
)
|
||||
.map((note) => ({
|
||||
data: note,
|
||||
where: { id: note.id },
|
||||
})),
|
||||
};
|
||||
|
||||
await axios.post('AddressObservations/crud', payload);
|
||||
notes.value = [];
|
||||
deletes.value = [];
|
||||
|
|
|
@ -191,16 +191,17 @@ const getItemPackagingType = (ticketSales) => {
|
|||
class="full-width"
|
||||
:disable-infinite-scroll="true"
|
||||
:search-url="false"
|
||||
redirect="ticket"
|
||||
>
|
||||
<template #column-nickname="{ row }">
|
||||
<span class="link">
|
||||
<span class="link" @click.stop>
|
||||
{{ row.nickname }}
|
||||
<CustomerDescriptorProxy :id="row.clientFk" />
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<template #column-routeFk="{ row }">
|
||||
<span class="link">
|
||||
<span class="link" @click.stop>
|
||||
{{ row.routeFk }}
|
||||
<RouteDescriptorProxy :id="row.routeFk" />
|
||||
</span>
|
||||
|
@ -217,7 +218,7 @@ const getItemPackagingType = (ticketSales) => {
|
|||
<span v-else> {{ toCurrency(row.totalWithVat) }}</span>
|
||||
</template>
|
||||
<template #column-state="{ row }">
|
||||
<span v-if="row.invoiceOut">
|
||||
<span v-if="row.invoiceOut" @click.stop>
|
||||
<span :class="{ link: row.invoiceOut.ref }">
|
||||
{{ row.invoiceOut.ref }}
|
||||
<InvoiceOutDescriptorProxy :id="row.invoiceOut.id" />
|
||||
|
|
|
@ -1,21 +1,5 @@
|
|||
customerFilter:
|
||||
filter:
|
||||
name: Name
|
||||
socialName: Social name
|
||||
customer:
|
||||
list:
|
||||
phone: Phone
|
||||
email: Email
|
||||
customerOrders: Display customer orders
|
||||
moreOptions: More options
|
||||
card:
|
||||
customerList: Customer list
|
||||
customerId: Claim ID
|
||||
salesPerson: Sales person
|
||||
credit: Credit
|
||||
risk: Risk
|
||||
securedCredit: Secured credit
|
||||
payMethod: Pay method
|
||||
debt: Debt
|
||||
isFrozen: Customer frozen
|
||||
hasDebt: Customer has debt
|
||||
|
@ -23,9 +7,7 @@ customer:
|
|||
notChecked: Customer no checked
|
||||
webAccountInactive: Web account inactive
|
||||
noWebAccess: Web access is disabled
|
||||
businessType: Business type
|
||||
passwordRequirements: 'The password must have at least { length } length characters, {nAlpha} alphabetic characters, {nUpper} capital letters, {nDigits} digits and {nPunct} symbols (Ex: $%&.)\n'
|
||||
businessTypeFk: Business type
|
||||
summary:
|
||||
basicData: Basic data
|
||||
fiscalAddress: Fiscal address
|
||||
|
@ -37,9 +19,7 @@ customer:
|
|||
customerId: Customer ID
|
||||
name: Name
|
||||
contact: Contact
|
||||
phone: Phone
|
||||
mobile: Mobile
|
||||
email: Email
|
||||
salesPerson: Sales person
|
||||
contactChannel: Contact channel
|
||||
socialName: Social name
|
||||
|
@ -63,7 +43,6 @@ customer:
|
|||
hasB2BVnl: Has B2B VNL
|
||||
addressName: Address name
|
||||
addressCity: City
|
||||
addressStreet: Street
|
||||
username: Username
|
||||
webAccess: Web access
|
||||
totalGreuge: Total greuge
|
||||
|
@ -92,45 +71,27 @@ customer:
|
|||
goToLines: Go to lines
|
||||
basicData:
|
||||
socialName: Fiscal name
|
||||
businessType: Business type
|
||||
contact: Contact
|
||||
youCanSaveMultipleEmails: You can save multiple emails
|
||||
email: Email
|
||||
phone: Phone
|
||||
mobile: Mobile
|
||||
salesPerson: Sales person
|
||||
contactChannel: Contact channel
|
||||
previousClient: Previous client
|
||||
extendedList:
|
||||
tableVisibleColumns:
|
||||
id: Identifier
|
||||
name: Name
|
||||
socialName: Social name
|
||||
fi: Tax number
|
||||
salesPersonFk: Salesperson
|
||||
credit: Credit
|
||||
creditInsurance: Credit insurance
|
||||
phone: Phone
|
||||
mobile: Mobile
|
||||
street: Street
|
||||
countryFk: Country
|
||||
provinceFk: Province
|
||||
city: City
|
||||
postcode: Postcode
|
||||
email: Email
|
||||
created: Created
|
||||
businessTypeFk: Business type
|
||||
payMethodFk: Billing data
|
||||
sageTaxTypeFk: Sage tax type
|
||||
sageTransactionTypeFk: Sage tr. type
|
||||
isActive: Active
|
||||
isVies: Vies
|
||||
isTaxDataChecked: Verified data
|
||||
isEqualizated: Is equalizated
|
||||
isFreezed: Freezed
|
||||
hasToInvoice: Invoice
|
||||
hasToInvoiceByAddress: Invoice by address
|
||||
isToBeMailed: Mailing
|
||||
hasLcr: Received LCR
|
||||
hasCoreVnl: VNL core received
|
||||
hasSepaVnl: VNL B2B received
|
||||
|
|
|
@ -1,22 +1,7 @@
|
|||
Search customer: Buscar cliente
|
||||
You can search by customer id or name: Puedes buscar por id o nombre del cliente
|
||||
customerFilter:
|
||||
filter:
|
||||
name: Nombre
|
||||
socialName: Razón Social
|
||||
customer:
|
||||
list:
|
||||
phone: Teléfono
|
||||
email: Email
|
||||
customerOrders: Mostrar órdenes del cliente
|
||||
moreOptions: Más opciones
|
||||
card:
|
||||
customerId: ID cliente
|
||||
salesPerson: Comercial
|
||||
credit: Crédito
|
||||
risk: Riesgo
|
||||
securedCredit: Crédito asegurado
|
||||
payMethod: Método de pago
|
||||
debt: Riesgo
|
||||
isFrozen: Cliente congelado
|
||||
hasDebt: Cliente con riesgo
|
||||
|
@ -24,9 +9,7 @@ customer:
|
|||
notChecked: Cliente no comprobado
|
||||
webAccountInactive: Sin acceso web
|
||||
noWebAccess: El acceso web está desactivado
|
||||
businessType: Tipo de negocio
|
||||
passwordRequirements: 'La contraseña debe tener al menos { length } caracteres de longitud, {nAlpha} caracteres alfabéticos, {nUpper} letras mayúsculas, {nDigits} dígitos y {nPunct} símbolos (Ej: $%&.)'
|
||||
businessTypeFk: Tipo de negocio
|
||||
summary:
|
||||
basicData: Datos básicos
|
||||
fiscalAddress: Dirección fiscal
|
||||
|
@ -38,9 +21,7 @@ customer:
|
|||
customerId: ID cliente
|
||||
name: Nombre
|
||||
contact: Contacto
|
||||
phone: Teléfono
|
||||
mobile: Móvil
|
||||
email: Email
|
||||
salesPerson: Comercial
|
||||
contactChannel: Canal de contacto
|
||||
socialName: Razón social
|
||||
|
@ -64,7 +45,6 @@ customer:
|
|||
hasB2BVnl: Recibido B2B VNL
|
||||
addressName: Nombre de la dirección
|
||||
addressCity: Ciudad
|
||||
addressStreet: Calle
|
||||
username: Usuario
|
||||
webAccess: Acceso web
|
||||
totalGreuge: Greuge total
|
||||
|
@ -93,45 +73,27 @@ customer:
|
|||
goToLines: Ir a líneas
|
||||
basicData:
|
||||
socialName: Nombre fiscal
|
||||
businessType: Tipo de negocio
|
||||
contact: Contacto
|
||||
youCanSaveMultipleEmails: Puede guardar varios correos electrónicos encadenándolos mediante comas sin espacios{','} ejemplo{':'} user{'@'}dominio{'.'}com, user2{'@'}dominio{'.'}com siendo el primer correo electrónico el principal
|
||||
email: Email
|
||||
phone: Teléfono
|
||||
mobile: Móvil
|
||||
salesPerson: Comercial
|
||||
contactChannel: Canal de contacto
|
||||
previousClient: Cliente anterior
|
||||
extendedList:
|
||||
tableVisibleColumns:
|
||||
id: Identificador
|
||||
name: Nombre
|
||||
socialName: Razón social
|
||||
fi: NIF / CIF
|
||||
salesPersonFk: Comercial
|
||||
credit: Crédito
|
||||
creditInsurance: Crédito asegurado
|
||||
phone: Teléfono
|
||||
mobile: Móvil
|
||||
street: Dirección fiscal
|
||||
countryFk: País
|
||||
provinceFk: Provincia
|
||||
city: Población
|
||||
postcode: Código postal
|
||||
email: Email
|
||||
created: Fecha creación
|
||||
businessTypeFk: Tipo de negocio
|
||||
payMethodFk: Forma de pago
|
||||
sageTaxTypeFk: Tipo de impuesto Sage
|
||||
sageTransactionTypeFk: Tipo tr. sage
|
||||
isActive: Activo
|
||||
isVies: Vies
|
||||
isTaxDataChecked: Datos comprobados
|
||||
isEqualizated: Recargo de equivalencias
|
||||
isFreezed: Congelado
|
||||
hasToInvoice: Factura
|
||||
hasToInvoiceByAddress: Factura por consigna
|
||||
isToBeMailed: Env. emails
|
||||
hasLcr: Recibido LCR
|
||||
hasCoreVnl: Recibido core VNL
|
||||
hasSepaVnl: Recibido B2B VNL
|
||||
|
|
|
@ -20,16 +20,16 @@ const { t } = useI18n();
|
|||
<template #form="{ data, validate }">
|
||||
<VnRow>
|
||||
<VnInput
|
||||
:label="t('department.name')"
|
||||
:label="t('globals.name')"
|
||||
v-model="data.name"
|
||||
:rules="validate('department.name')"
|
||||
:rules="validate('globals.name')"
|
||||
clearable
|
||||
autofocus
|
||||
/>
|
||||
<VnInput
|
||||
v-model="data.code"
|
||||
:label="t('department.code')"
|
||||
:rules="validate('department.code')"
|
||||
:label="t('globals.code')"
|
||||
:rules="validate('globals.code')"
|
||||
clearable
|
||||
/>
|
||||
</VnRow>
|
||||
|
@ -42,8 +42,8 @@ const { t } = useI18n();
|
|||
/>
|
||||
<VnInput
|
||||
v-model="data.notificationEmail"
|
||||
:label="t('department.email')"
|
||||
:rules="validate('department.email')"
|
||||
:label="t('globals.params.email')"
|
||||
:rules="validate('globals.params.email')"
|
||||
clearable
|
||||
/>
|
||||
</VnRow>
|
||||
|
|
|
@ -45,16 +45,8 @@ onMounted(async () => {
|
|||
/>
|
||||
<div class="full-width row wrap justify-between content-between">
|
||||
<div class="column" style="min-width: 50%">
|
||||
<VnLv
|
||||
:label="t('department.name')"
|
||||
:value="department.name"
|
||||
dash
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('department.code')"
|
||||
:value="department.code"
|
||||
dash
|
||||
/>
|
||||
<VnLv :label="t('globals.name')" :value="department.name" dash />
|
||||
<VnLv :label="t('globals.code')" :value="department.code" dash />
|
||||
<VnLv
|
||||
:label="t('department.chat')"
|
||||
:value="department.chatName"
|
||||
|
|
|
@ -44,16 +44,15 @@ const onFilterTravelSelected = (formData, id) => {
|
|||
auto-load
|
||||
/>
|
||||
<FormModel
|
||||
:url="`Entries/${route.params.id}`"
|
||||
:url-update="`Entries/${route.params.id}`"
|
||||
model="entry"
|
||||
model="Entry"
|
||||
auto-load
|
||||
:clear-store-on-unmount="false"
|
||||
>
|
||||
<template #form="{ data }">
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
:label="t('entry.basicData.supplier')"
|
||||
:label="t('globals.supplier')"
|
||||
v-model="data.supplierFk"
|
||||
url="Suppliers"
|
||||
option-value="id"
|
||||
|
@ -108,18 +107,15 @@ const onFilterTravelSelected = (formData, id) => {
|
|||
</VnSelectDialog>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnInput
|
||||
v-model="data.reference"
|
||||
:label="t('entry.basicData.reference')"
|
||||
/>
|
||||
<VnInput v-model="data.reference" :label="t('globals.reference')" />
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnInput
|
||||
v-model="data.invoiceNumber"
|
||||
:label="t('entry.basicData.invoiceNumber')"
|
||||
:label="t('entry.summary.invoiceNumber')"
|
||||
/>
|
||||
<VnSelect
|
||||
:label="t('entry.basicData.company')"
|
||||
:label="t('globals.company')"
|
||||
v-model="data.companyFk"
|
||||
:options="companiesOptions"
|
||||
option-value="id"
|
||||
|
@ -131,14 +127,14 @@ const onFilterTravelSelected = (formData, id) => {
|
|||
</VnRow>
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
:label="t('entry.basicData.currency')"
|
||||
:label="t('entry.summary.currency')"
|
||||
v-model="data.currencyFk"
|
||||
:options="currenciesOptions"
|
||||
option-value="id"
|
||||
option-label="code"
|
||||
/>
|
||||
<QInput
|
||||
:label="t('entry.basicData.commission')"
|
||||
:label="t('entry.summary.commission')"
|
||||
v-model="data.commission"
|
||||
type="number"
|
||||
autofocus
|
||||
|
@ -156,17 +152,11 @@ const onFilterTravelSelected = (formData, id) => {
|
|||
/>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<QCheckbox
|
||||
v-model="data.isOrdered"
|
||||
:label="t('entry.basicData.ordered')"
|
||||
/>
|
||||
<QCheckbox
|
||||
v-model="data.isConfirmed"
|
||||
:label="t('entry.basicData.confirmed')"
|
||||
/>
|
||||
<QCheckbox v-model="data.isOrdered" :label="t('entry.summary.ordered')" />
|
||||
<QCheckbox v-model="data.isConfirmed" :label="t('globals.confirmed')" />
|
||||
<QCheckbox
|
||||
v-model="data.isExcludedFromAvailable"
|
||||
:label="t('entry.basicData.excludedFromAvailable')"
|
||||
:label="t('entry.summary.excludedFromAvailable')"
|
||||
/>
|
||||
<QCheckbox
|
||||
v-if="isAdministrative()"
|
||||
|
|
|
@ -5,7 +5,6 @@ import { useI18n } from 'vue-i18n';
|
|||
import { QBtn } from 'quasar';
|
||||
|
||||
import VnPaginate from 'src/components/ui/VnPaginate.vue';
|
||||
import FetchData from 'src/components/FetchData.vue';
|
||||
import VnSelect from 'components/common/VnSelect.vue';
|
||||
import VnInput from 'src/components/common/VnInput.vue';
|
||||
import FetchedTags from 'components/ui/FetchedTags.vue';
|
||||
|
@ -157,13 +156,13 @@ const tableColumnComponents = computed(() => ({
|
|||
const entriesTableColumns = computed(() => {
|
||||
return [
|
||||
{
|
||||
label: t('entry.summary.item'),
|
||||
label: t('globals.item'),
|
||||
field: 'itemFk',
|
||||
name: 'item',
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('entry.summary.quantity'),
|
||||
label: t('globals.quantity'),
|
||||
field: 'quantity',
|
||||
name: 'quantity',
|
||||
align: 'left',
|
||||
|
@ -187,7 +186,7 @@ const entriesTableColumns = computed(() => {
|
|||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('entry.summary.weight'),
|
||||
label: t('globals.weight'),
|
||||
field: 'weight',
|
||||
name: 'weight',
|
||||
align: 'left',
|
||||
|
@ -212,13 +211,13 @@ const entriesTableColumns = computed(() => {
|
|||
format: (value) => toCurrency(value),
|
||||
},
|
||||
{
|
||||
label: t('entry.buys.groupingPrice'),
|
||||
label: t('item.fixedPrice.groupingPrice'),
|
||||
field: 'price2',
|
||||
name: 'price2',
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('entry.buys.packingPrice'),
|
||||
label: t('item.fixedPrice.packingPrice'),
|
||||
field: 'price3',
|
||||
name: 'price3',
|
||||
align: 'left',
|
||||
|
|
|
@ -35,7 +35,7 @@ const packagingsOptions = ref([]);
|
|||
|
||||
const columns = computed(() => [
|
||||
{
|
||||
label: t('entry.buys.item'),
|
||||
label: t('globals.item'),
|
||||
name: 'item',
|
||||
field: 'itemFk',
|
||||
options: lastItemBuysOptions.value,
|
||||
|
@ -56,19 +56,19 @@ const columns = computed(() => [
|
|||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('entry.buys.packing'),
|
||||
label: t('entry.summary.packing'),
|
||||
name: 'packing',
|
||||
field: 'packing',
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('entry.buys.grouping'),
|
||||
label: t('entry.summary.grouping'),
|
||||
name: 'grouping',
|
||||
field: 'grouping',
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('entry.buys.buyingValue'),
|
||||
label: t('entry.summary.buyingValue'),
|
||||
name: 'buyingValue',
|
||||
field: 'buyingValue',
|
||||
align: 'left',
|
||||
|
@ -200,7 +200,7 @@ const redirectToBuysView = () => {
|
|||
<VnRow>
|
||||
<QFile
|
||||
ref="inputFileRef"
|
||||
:label="t('entry.buys.file')"
|
||||
:label="t('globals.file')"
|
||||
v-model="importData.file"
|
||||
:multiple="false"
|
||||
accept=".json"
|
||||
|
@ -220,10 +220,7 @@ const redirectToBuysView = () => {
|
|||
</VnRow>
|
||||
<div v-if="importData.file">
|
||||
<VnRow>
|
||||
<VnInput
|
||||
:label="t('entry.buys.reference')"
|
||||
v-model="importData.ref"
|
||||
/>
|
||||
<VnInput :label="t('globals.reference')" v-model="importData.ref" />
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnInput
|
||||
|
|
|
@ -2,11 +2,13 @@
|
|||
import VnCard from 'components/common/VnCard.vue';
|
||||
import EntryDescriptor from './EntryDescriptor.vue';
|
||||
import EntryFilter from '../EntryFilter.vue';
|
||||
import filter from './EntryFilter.js';
|
||||
</script>
|
||||
<template>
|
||||
<VnCard
|
||||
data-key="Entry"
|
||||
base-url="Entries"
|
||||
:filter="filter"
|
||||
:descriptor="EntryDescriptor"
|
||||
:filter-panel="EntryFilter"
|
||||
search-data-key="EntryList"
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
<script setup>
|
||||
import { ref, computed, watch, onMounted } from 'vue';
|
||||
import { ref, computed, onMounted } from 'vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import CardDescriptor from 'components/ui/CardDescriptor.vue';
|
||||
import VnLv from 'src/components/ui/VnLv.vue';
|
||||
import useCardDescription from 'src/composables/useCardDescription';
|
||||
|
||||
import { toDate } from 'src/filters';
|
||||
import { usePrintService } from 'composables/usePrintService';
|
||||
import { getUrl } from 'src/composables/getUrl';
|
||||
import filter from './EntryFilter.js';
|
||||
|
||||
const $props = defineProps({
|
||||
id: {
|
||||
|
@ -25,50 +25,6 @@ const { openReport } = usePrintService();
|
|||
const entryDescriptorRef = ref(null);
|
||||
const url = ref();
|
||||
|
||||
const entryFilter = {
|
||||
include: [
|
||||
{
|
||||
relation: 'travel',
|
||||
scope: {
|
||||
fields: [
|
||||
'id',
|
||||
'landed',
|
||||
'shipped',
|
||||
'agencyModeFk',
|
||||
'warehouseOutFk',
|
||||
'daysInForward',
|
||||
],
|
||||
include: [
|
||||
{
|
||||
relation: 'agency',
|
||||
scope: {
|
||||
fields: ['name'],
|
||||
},
|
||||
},
|
||||
{
|
||||
relation: 'warehouseOut',
|
||||
scope: {
|
||||
fields: ['name'],
|
||||
},
|
||||
},
|
||||
{
|
||||
relation: 'warehouseIn',
|
||||
scope: {
|
||||
fields: ['name'],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
relation: 'supplier',
|
||||
scope: {
|
||||
fields: ['id', 'nickname'],
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
const entityId = computed(() => {
|
||||
return $props.id || route.params.id;
|
||||
});
|
||||
|
@ -76,10 +32,6 @@ onMounted(async () => {
|
|||
url.value = await getUrl('');
|
||||
});
|
||||
|
||||
const data = ref(useCardDescription());
|
||||
const setData = (entity) =>
|
||||
(data.value = useCardDescription(entity.supplier?.nickname, entity.id));
|
||||
|
||||
const getEntryRedirectionFilter = (entry) => {
|
||||
let entryTravel = entry && entry.travel;
|
||||
|
||||
|
@ -104,8 +56,6 @@ const getEntryRedirectionFilter = (entry) => {
|
|||
const showEntryReport = () => {
|
||||
openReport(`Entries/${route.params.id}/entry-order-pdf`);
|
||||
};
|
||||
|
||||
watch;
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -113,11 +63,9 @@ watch;
|
|||
ref="entryDescriptorRef"
|
||||
module="Entry"
|
||||
:url="`Entries/${entityId}`"
|
||||
:filter="entryFilter"
|
||||
:title="data.title"
|
||||
:subtitle="data.subtitle"
|
||||
@on-fetch="setData"
|
||||
data-key="entry"
|
||||
:filter="filter"
|
||||
title="supplier.nickname"
|
||||
data-key="Entry"
|
||||
>
|
||||
<template #menu="{ entity }">
|
||||
<QItem v-ripple clickable @click="showEntryReport(entity)">
|
||||
|
@ -125,14 +73,11 @@ watch;
|
|||
</QItem>
|
||||
</template>
|
||||
<template #body="{ entity }">
|
||||
<VnLv
|
||||
:label="t('entry.descriptor.agency')"
|
||||
:value="entity.travel?.agency?.name"
|
||||
/>
|
||||
<VnLv :label="t('globals.agency')" :value="entity.travel?.agency?.name" />
|
||||
<VnLv :label="t('shipped')" :value="toDate(entity.travel?.shipped)" />
|
||||
<VnLv :label="t('landed')" :value="toDate(entity.travel?.landed)" />
|
||||
<VnLv
|
||||
:label="t('entry.descriptor.warehouseOut')"
|
||||
:label="t('globals.warehouseOut')"
|
||||
:value="entity.travel?.warehouseOut?.name"
|
||||
/>
|
||||
</template>
|
||||
|
@ -165,7 +110,7 @@ watch;
|
|||
<template #actions="{ entity }">
|
||||
<QCardActions>
|
||||
<QBtn
|
||||
:to="`/supplier/${entity.supplier.id}`"
|
||||
:to="`/supplier/${entity.supplier?.id}`"
|
||||
size="md"
|
||||
icon="vn:supplier"
|
||||
color="primary"
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
export default {
|
||||
include: [
|
||||
{
|
||||
relation: 'travel',
|
||||
scope: {
|
||||
fields: [
|
||||
'id',
|
||||
'landed',
|
||||
'shipped',
|
||||
'agencyModeFk',
|
||||
'warehouseOutFk',
|
||||
'daysInForward',
|
||||
],
|
||||
include: [
|
||||
{
|
||||
relation: 'agency',
|
||||
scope: {
|
||||
fields: ['name'],
|
||||
},
|
||||
},
|
||||
{
|
||||
relation: 'warehouseOut',
|
||||
scope: {
|
||||
fields: ['name'],
|
||||
},
|
||||
},
|
||||
{
|
||||
relation: 'warehouseIn',
|
||||
scope: {
|
||||
fields: ['name'],
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
{
|
||||
relation: 'supplier',
|
||||
scope: {
|
||||
fields: ['id', 'nickname'],
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
|
@ -84,7 +84,7 @@ const tableColumnComponents = {
|
|||
const entriesTableColumns = computed(() => {
|
||||
return [
|
||||
{
|
||||
label: t('entry.summary.quantity'),
|
||||
label: t('globals.quantity'),
|
||||
field: 'quantity',
|
||||
name: 'quantity',
|
||||
align: 'left',
|
||||
|
@ -102,7 +102,7 @@ const entriesTableColumns = computed(() => {
|
|||
align: 'left',
|
||||
},
|
||||
{
|
||||
label: t('entry.summary.weight'),
|
||||
label: t('globals.weight'),
|
||||
field: 'weight',
|
||||
name: 'weight',
|
||||
align: 'left',
|
||||
|
@ -188,8 +188,8 @@ const fetchEntryBuys = async () => {
|
|||
:label="t('entry.summary.currency')"
|
||||
:value="entry.currency?.name"
|
||||
/>
|
||||
<VnLv :label="t('entry.summary.company')" :value="entry.company.code" />
|
||||
<VnLv :label="t('entry.summary.reference')" :value="entry.reference" />
|
||||
<VnLv :label="t('globals.company')" :value="entry.company.code" />
|
||||
<VnLv :label="t('globals.reference')" :value="entry.reference" />
|
||||
<VnLv
|
||||
:label="t('entry.summary.invoiceNumber')"
|
||||
:value="entry.invoiceNumber"
|
||||
|
@ -217,7 +217,7 @@ const fetchEntryBuys = async () => {
|
|||
/>
|
||||
<VnLv :label="t('shipped')" :value="toDate(entry.travel.shipped)" />
|
||||
<VnLv
|
||||
:label="t('entry.summary.travelWarehouseOut')"
|
||||
:label="t('globals.warehouseOut')"
|
||||
:value="entry.travel.warehouseOut?.name"
|
||||
/>
|
||||
<QCheckbox
|
||||
|
@ -227,7 +227,7 @@ const fetchEntryBuys = async () => {
|
|||
/>
|
||||
<VnLv :label="t('landed')" :value="toDate(entry.travel.landed)" />
|
||||
<VnLv
|
||||
:label="t('entry.summary.travelWarehouseIn')"
|
||||
:label="t('globals.warehouseIn')"
|
||||
:value="entry.travel.warehouseIn?.name"
|
||||
/>
|
||||
<QCheckbox
|
||||
|
@ -250,7 +250,7 @@ const fetchEntryBuys = async () => {
|
|||
:disable="true"
|
||||
/>
|
||||
<QCheckbox
|
||||
:label="t('entry.summary.confirmed')"
|
||||
:label="t('globals.confirmed')"
|
||||
v-model="entry.isConfirmed"
|
||||
:disable="true"
|
||||
/>
|
||||
|
|
|
@ -35,7 +35,7 @@ const entriesTableColumns = computed(() => [
|
|||
{
|
||||
align: 'left',
|
||||
name: 'item',
|
||||
label: t('entry.summary.item'),
|
||||
label: t('globals.item'),
|
||||
field: (row) => row.item.name,
|
||||
},
|
||||
{
|
||||
|
|
|
@ -40,7 +40,7 @@ const columns = [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.packing'),
|
||||
label: t('entry.summary.packing'),
|
||||
name: 'packing',
|
||||
columnFilter: {
|
||||
component: 'number',
|
||||
|
@ -49,7 +49,7 @@ const columns = [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.grouping'),
|
||||
label: t('entry.summary.grouping'),
|
||||
name: 'grouping',
|
||||
columnFilter: {
|
||||
component: 'number',
|
||||
|
@ -58,7 +58,7 @@ const columns = [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.quantity'),
|
||||
label: t('globals.quantity'),
|
||||
name: 'quantity',
|
||||
columnFilter: {
|
||||
component: 'number',
|
||||
|
@ -67,12 +67,12 @@ const columns = [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.description'),
|
||||
label: t('globals.description'),
|
||||
name: 'description',
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.size'),
|
||||
label: t('globals.size'),
|
||||
name: 'size',
|
||||
columnFilter: {
|
||||
component: 'number',
|
||||
|
@ -81,27 +81,27 @@ const columns = [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.tags'),
|
||||
label: t('globals.tags'),
|
||||
name: 'tags',
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.type'),
|
||||
label: t('globals.type'),
|
||||
name: 'type',
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.intrastat'),
|
||||
label: t('globals.intrastat'),
|
||||
name: 'intrastat',
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.origin'),
|
||||
label: t('globals.origin'),
|
||||
name: 'origin',
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.weightByPiece'),
|
||||
label: t('globals.weightByPiece'),
|
||||
name: 'weightByPiece',
|
||||
columnFilter: {
|
||||
component: 'number',
|
||||
|
@ -129,7 +129,7 @@ const columns = [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.buyingValue'),
|
||||
label: t('entry.summary.buyingValue'),
|
||||
name: 'buyingValue',
|
||||
columnFilter: {
|
||||
component: 'number',
|
||||
|
@ -156,7 +156,7 @@ const columns = [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.packageValue'),
|
||||
label: t('entry.buys.packageValue'),
|
||||
name: 'packageValue',
|
||||
columnFilter: {
|
||||
component: 'number',
|
||||
|
@ -202,7 +202,7 @@ const columns = [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.weight'),
|
||||
label: t('globals.weight'),
|
||||
name: 'weight',
|
||||
columnFilter: {
|
||||
component: 'number',
|
||||
|
@ -211,7 +211,7 @@ const columns = [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.latestBuys.tableVisibleColumns.packagingFk'),
|
||||
label: t('entry.buys.packagingFk'),
|
||||
name: 'packagingFk',
|
||||
columnFilter: {
|
||||
component: 'number',
|
||||
|
|
|
@ -47,14 +47,14 @@ const columns = computed(() => [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.list.tableVisibleColumns.id'),
|
||||
label: t('globals.id'),
|
||||
name: 'id',
|
||||
isTitle: true,
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('entry.list.tableVisibleColumns.reference'),
|
||||
label: t('globals.reference'),
|
||||
name: 'reference',
|
||||
isTitle: true,
|
||||
component: 'input',
|
||||
|
|
|
@ -99,7 +99,7 @@ const travelDialogRef = ref(false);
|
|||
const tableRef = ref();
|
||||
const travel = ref(null);
|
||||
const userParams = ref({
|
||||
dated: Date.vnNew(),
|
||||
dated: Date.vnNew().toJSON(),
|
||||
});
|
||||
|
||||
const filter = ref({
|
||||
|
@ -219,6 +219,7 @@ function round(value) {
|
|||
data-key="StockBoughts"
|
||||
url="StockBoughts/getStockBought"
|
||||
save-url="StockBoughts/crud"
|
||||
search-url="StockBoughts"
|
||||
order="reserve DESC"
|
||||
:right-search="false"
|
||||
:is-editable="true"
|
||||
|
@ -281,6 +282,7 @@ function round(value) {
|
|||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
min-width: 35%;
|
||||
}
|
||||
.text-negative {
|
||||
color: $negative !important;
|
||||
|
@ -297,5 +299,5 @@ function round(value) {
|
|||
Date: Fecha
|
||||
View more details: Ver más detalles
|
||||
Reserve some space: Reservar espacio
|
||||
This buyer has already made a reservation for this date: Este comprador ya ha hecho una reserva para esta fecha
|
||||
This buyer has already made a reservation for this date: Este comprador ya ha hecho una reserva para esta fecha
|
||||
</i18n>
|
||||
|
|
|
@ -18,7 +18,7 @@ const $props = defineProps({
|
|||
required: true,
|
||||
},
|
||||
});
|
||||
const customUrl = `StockBoughts/getStockBoughtDetail?workerFk=${$props.workerFk}&date=${$props.dated}`;
|
||||
const customUrl = `StockBoughts/getStockBoughtDetail?workerFk=${$props.workerFk}&dated=${$props.dated}`;
|
||||
const columns = [
|
||||
{
|
||||
align: 'left',
|
||||
|
|
|
@ -27,7 +27,7 @@ onMounted(async () => {
|
|||
<VnFilterPanel
|
||||
:data-key="props.dataKey"
|
||||
:search-button="true"
|
||||
search-url="table"
|
||||
search-url="StockBoughts"
|
||||
@set-user-params="setUserParams"
|
||||
>
|
||||
<template #tags="{ tag, formatFn }">
|
||||
|
@ -36,12 +36,19 @@ onMounted(async () => {
|
|||
<span>{{ formatFn(tag.value) }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #body="{ params }">
|
||||
<template #body="{ params, searchFn }">
|
||||
<QItem class="q-my-sm">
|
||||
<QItemSection>
|
||||
<VnInputDate
|
||||
id="date"
|
||||
v-model="params.dated"
|
||||
@update:model-value="
|
||||
(value) => {
|
||||
params.dated = value;
|
||||
setUserParams(params);
|
||||
searchFn();
|
||||
}
|
||||
"
|
||||
:label="t('Date')"
|
||||
is-outlined
|
||||
/>
|
||||
|
|
|
@ -355,10 +355,10 @@ const createInvoiceInCorrection = async () => {
|
|||
</QItem>
|
||||
</template>
|
||||
<template #body="{ entity }">
|
||||
<VnLv :label="t('invoiceIn.card.issued')" :value="toDate(entity.issued)" />
|
||||
<VnLv :label="t('invoiceIn.list.issued')" :value="toDate(entity.issued)" />
|
||||
<VnLv :label="t('invoiceIn.summary.booked')" :value="toDate(entity.booked)" />
|
||||
<VnLv :label="t('invoiceIn.card.amount')" :value="toCurrency(totalAmount)" />
|
||||
<VnLv :label="t('invoiceIn.summary.supplier')">
|
||||
<VnLv :label="t('invoiceIn.list.amount')" :value="toCurrency(totalAmount)" />
|
||||
<VnLv :label="t('invoiceIn.list.supplier')">
|
||||
<template #value>
|
||||
<span class="link">
|
||||
{{ entity?.supplier?.nickname }}
|
||||
|
|
|
@ -95,7 +95,7 @@ const dueDayColumns = ref([
|
|||
},
|
||||
{
|
||||
name: 'amount',
|
||||
label: 'invoiceIn.summary.amount',
|
||||
label: 'invoiceIn.list.amount',
|
||||
field: (row) => row.amount,
|
||||
format: (value) => toCurrency(value),
|
||||
sortable: true,
|
||||
|
@ -123,7 +123,7 @@ const intrastatColumns = ref([
|
|||
},
|
||||
{
|
||||
name: 'amount',
|
||||
label: 'invoiceIn.summary.amount',
|
||||
label: 'invoiceIn.list.amount',
|
||||
field: (row) => toCurrency(row.amount),
|
||||
sortable: true,
|
||||
align: 'left',
|
||||
|
@ -210,7 +210,7 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
|
|||
/>
|
||||
</QCardSection>
|
||||
<VnLv
|
||||
:label="t('invoiceIn.summary.supplier')"
|
||||
:label="t('invoiceIn.list.supplier')"
|
||||
:value="entity.supplier?.name"
|
||||
>
|
||||
<template #value>
|
||||
|
@ -221,7 +221,7 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
|
|||
</template>
|
||||
</VnLv>
|
||||
<VnLv
|
||||
:label="t('invoiceIn.summary.supplierRef')"
|
||||
:label="t('invoiceIn.list.supplierRef')"
|
||||
:value="entity.supplierRef"
|
||||
/>
|
||||
<VnLv
|
||||
|
@ -271,7 +271,7 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
|
|||
:value="entity.expenseDeductible?.name"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('invoiceIn.summary.company')"
|
||||
:label="t('invoiceIn.card.company')"
|
||||
:value="entity.company?.code"
|
||||
/>
|
||||
<VnLv :label="t('invoiceIn.isBooked')" :value="invoiceIn?.isBooked" />
|
||||
|
|
|
@ -83,7 +83,7 @@ const redirectToInvoiceInBasicData = (__, { id }) => {
|
|||
</template>
|
||||
</VnSelect>
|
||||
<VnInput
|
||||
:label="t('invoiceIn.summary.supplierRef')"
|
||||
:label="t('invoiceIn.list.supplierRef')"
|
||||
v-model="data.supplierRef"
|
||||
/>
|
||||
</VnRow>
|
||||
|
|
|
@ -50,7 +50,7 @@ const cols = computed(() => [
|
|||
{
|
||||
align: 'left',
|
||||
name: 'serial',
|
||||
label: t('invoiceIn.list.serial'),
|
||||
label: t('invoiceIn.serial'),
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
|
@ -122,7 +122,7 @@ const cols = computed(() => [
|
|||
:columns="cols"
|
||||
:right-search="false"
|
||||
:disable-option="{ card: true }"
|
||||
:auto-load="!!$route.query.params"
|
||||
:auto-load="!!$route.query.table"
|
||||
>
|
||||
<template #column-supplierFk="{ row }">
|
||||
<span class="link" @click.stop>
|
||||
|
@ -151,7 +151,7 @@ const cols = computed(() => [
|
|||
</template>
|
||||
</VnSelect>
|
||||
<VnInput
|
||||
:label="t('invoiceIn.summary.supplierRef')"
|
||||
:label="t('invoiceIn.list.supplierRef')"
|
||||
v-model="data.supplierRef"
|
||||
/>
|
||||
<VnSelect
|
||||
|
|
|
@ -5,14 +5,11 @@ invoiceIn:
|
|||
ref: Reference
|
||||
supplier: Supplier
|
||||
supplierRef: Supplier ref.
|
||||
serial: Serial
|
||||
file: File
|
||||
issued: Issued
|
||||
awb: AWB
|
||||
amount: Amount
|
||||
card:
|
||||
issued: Issued
|
||||
amount: Amount
|
||||
client: Client
|
||||
company: Company
|
||||
customerCard: Customer card
|
||||
|
@ -21,8 +18,6 @@ invoiceIn:
|
|||
dueDay: Due day
|
||||
intrastat: Intrastat
|
||||
summary:
|
||||
supplier: Supplier
|
||||
supplierRef: Supplier ref.
|
||||
currency: Currency
|
||||
issued: Expedition date
|
||||
operated: Operation date
|
||||
|
@ -30,7 +25,6 @@ invoiceIn:
|
|||
bookedDate: Booked date
|
||||
sage: Sage withholding
|
||||
vat: Undeductible VAT
|
||||
company: Company
|
||||
expense: Expense
|
||||
taxableBase: Taxable base
|
||||
rate: Rate
|
||||
|
@ -38,7 +32,6 @@ invoiceIn:
|
|||
sageTransaction: Sage transaction
|
||||
dueDay: Date
|
||||
bank: Bank
|
||||
amount: Amount
|
||||
foreignValue: Foreign value
|
||||
dueTotal: Due day
|
||||
noMatch: Do not match
|
||||
|
|
|
@ -11,8 +11,6 @@ invoiceIn:
|
|||
awb: AWB
|
||||
amount: Importe
|
||||
card:
|
||||
issued: Fecha emisión
|
||||
amount: Importe
|
||||
client: Cliente
|
||||
company: Empresa
|
||||
customerCard: Ficha del cliente
|
||||
|
@ -20,8 +18,6 @@ invoiceIn:
|
|||
vat: Iva
|
||||
dueDay: Fecha de vencimiento
|
||||
summary:
|
||||
supplier: Proveedor
|
||||
supplierRef: Ref. proveedor
|
||||
currency: Divisa
|
||||
docNumber: Número documento
|
||||
issued: Fecha de expedición
|
||||
|
@ -30,14 +26,12 @@ invoiceIn:
|
|||
bookedDate: Fecha contable
|
||||
sage: Retención sage
|
||||
vat: Iva no deducible
|
||||
company: Empresa
|
||||
expense: Gasto
|
||||
taxableBase: Base imp.
|
||||
rate: Tasa
|
||||
sageTransaction: Sage transación
|
||||
dueDay: Fecha
|
||||
bank: Caja
|
||||
amount: Importe
|
||||
foreignValue: Divisa
|
||||
dueTotal: Vencimiento
|
||||
code: Código
|
||||
|
|
|
@ -69,7 +69,7 @@ const setData = (entity) => (data.value = useCardDescription(entity.ref, entity.
|
|||
<template #body="{ entity }">
|
||||
<VnLv :label="t('invoiceOut.card.issued')" :value="toDate(entity.issued)" />
|
||||
<VnLv :label="t('globals.amount')" :value="toCurrency(entity.amount)" />
|
||||
<VnLv v-if="entity.client" :label="t('invoiceOut.card.client')">
|
||||
<VnLv v-if="entity.client" :label="t('globals.client')">
|
||||
<template #value>
|
||||
<span class="link">
|
||||
{{ entity.client.name }}
|
||||
|
@ -79,7 +79,7 @@ const setData = (entity) => (data.value = useCardDescription(entity.ref, entity.
|
|||
</VnLv>
|
||||
<VnLv
|
||||
v-if="entity.company"
|
||||
:label="t('invoiceOut.card.company')"
|
||||
:label="t('globals.company')"
|
||||
:value="entity.company.code"
|
||||
/>
|
||||
</template>
|
||||
|
|
|
@ -42,7 +42,7 @@ function fetch() {
|
|||
const taxColumns = ref([
|
||||
{
|
||||
name: 'item',
|
||||
label: 'invoiceOut.summary.type',
|
||||
label: 'globals.type',
|
||||
field: (row) => row.name,
|
||||
sortable: true,
|
||||
},
|
||||
|
@ -72,21 +72,21 @@ const taxColumns = ref([
|
|||
const ticketsColumns = ref([
|
||||
{
|
||||
name: 'item',
|
||||
label: t('invoiceOut.summary.ticketId'),
|
||||
label: t('globals.ticketId'),
|
||||
field: (row) => row.id,
|
||||
sortable: true,
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
name: 'nickname',
|
||||
label: t('invoiceOut.summary.nickname'),
|
||||
label: t('globals.alias'),
|
||||
field: (row) => row.nickname,
|
||||
sortable: true,
|
||||
align: 'left',
|
||||
},
|
||||
{
|
||||
name: 'landed',
|
||||
label: t('invoiceOut.summary.shipped'),
|
||||
label: t('globals.shipped'),
|
||||
field: (row) => row.shipped,
|
||||
format: (value) => toDate(value),
|
||||
sortable: true,
|
||||
|
@ -124,18 +124,12 @@ const ticketsColumns = ref([
|
|||
:label="t('invoiceOut.summary.dued')"
|
||||
:value="toDate(invoiceOut.dued)"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('invoiceOut.summary.created')"
|
||||
:value="toDate(invoiceOut.created)"
|
||||
/>
|
||||
<VnLv :label="t('globals.created')" :value="toDate(invoiceOut.created)" />
|
||||
<VnLv
|
||||
:label="t('invoiceOut.summary.booked')"
|
||||
:value="toDate(invoiceOut.booked)"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('invoiceOut.summary.company')"
|
||||
:value="invoiceOut.company.code"
|
||||
/>
|
||||
<VnLv :label="t('globals.company')" :value="invoiceOut.company.code" />
|
||||
</QCard>
|
||||
<QCard class="vn-three">
|
||||
<VnTitle :text="t('invoiceOut.summary.taxBreakdown')" />
|
||||
|
|
|
@ -59,7 +59,7 @@ const columns = computed(() => [
|
|||
field: 'clientId',
|
||||
},
|
||||
{
|
||||
label: t('invoiceOut.globalInvoices.table.client'),
|
||||
label: t('globals.client'),
|
||||
field: 'clientName',
|
||||
name: 'clientName',
|
||||
align: 'left',
|
||||
|
|
|
@ -183,7 +183,7 @@ onMounted(async () => {
|
|||
<i18n>
|
||||
en:
|
||||
invoiceDate: Invoice date
|
||||
maxShipped: Max date
|
||||
maxShipped: Max date ticket
|
||||
allClients: All clients
|
||||
oneClient: One client
|
||||
company: Company
|
||||
|
@ -195,7 +195,7 @@ en:
|
|||
|
||||
es:
|
||||
invoiceDate: Fecha de factura
|
||||
maxShipped: Fecha límite
|
||||
maxShipped: Fecha límite ticket
|
||||
allClients: Todos los clientes
|
||||
oneClient: Un solo cliente
|
||||
company: Empresa
|
||||
|
|
|
@ -6,15 +6,19 @@ import VnInputDate from 'src/components/common/VnInputDate.vue';
|
|||
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
|
||||
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
|
||||
import { useSummaryDialog } from 'src/composables/useSummaryDialog';
|
||||
import { usePrintService } from 'composables/usePrintService';
|
||||
import VnTable from 'components/VnTable/VnTable.vue';
|
||||
import { usePrintService } from 'src/composables/usePrintService';
|
||||
import VnTable from 'src/components/VnTable/VnTable.vue';
|
||||
import InvoiceOutSummary from './Card/InvoiceOutSummary.vue';
|
||||
import { toCurrency, toDate } from 'src/filters/index';
|
||||
import { useStateStore } from 'stores/useStateStore';
|
||||
import { QBtn } from 'quasar';
|
||||
import CustomerDescriptorProxy from '../Customer/Card/CustomerDescriptorProxy.vue';
|
||||
import axios from 'axios';
|
||||
import RightMenu from 'src/components/common/RightMenu.vue';
|
||||
import InvoiceOutFilter from './InvoiceOutFilter.vue';
|
||||
import VnRow from 'src/components/ui/VnRow.vue';
|
||||
import VnRadio from 'src/components/common/VnRadio.vue';
|
||||
import VnInput from 'src/components/common/VnInput.vue';
|
||||
import CustomerDescriptorProxy from '../Customer/Card/CustomerDescriptorProxy.vue';
|
||||
|
||||
const { t } = useI18n();
|
||||
const stateStore = useStateStore();
|
||||
|
@ -26,99 +30,86 @@ const selectedRows = ref([]);
|
|||
const hasSelectedCards = computed(() => selectedRows.value.length > 0);
|
||||
const MODEL = 'InvoiceOuts';
|
||||
const { openReport } = usePrintService();
|
||||
const addressOptions = ref([]);
|
||||
const selectedOption = ref('ticket');
|
||||
async function fetchClientAddress(id) {
|
||||
const { data } = await axios.get(
|
||||
`Clients/${id}/addresses?filter[order]=isActive DESC`
|
||||
);
|
||||
addressOptions.value = data;
|
||||
}
|
||||
|
||||
const exprBuilder = (_, value) => {
|
||||
return {
|
||||
or: [{ code: value }, { description: { like: `%${value}%` } }],
|
||||
};
|
||||
};
|
||||
|
||||
const columns = computed(() => [
|
||||
{
|
||||
align: 'center',
|
||||
name: 'id',
|
||||
label: t('invoiceOutList.tableVisibleColumns.id'),
|
||||
chip: {
|
||||
condition: () => true,
|
||||
},
|
||||
chip: { condition: () => true },
|
||||
isId: true,
|
||||
columnFilter: {
|
||||
name: 'search',
|
||||
},
|
||||
columnFilter: { name: 'search' },
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
name: 'ref',
|
||||
label: t('invoiceOutList.tableVisibleColumns.ref'),
|
||||
label: t('globals.reference'),
|
||||
isTitle: true,
|
||||
component: 'select',
|
||||
attrs: {
|
||||
url: MODEL,
|
||||
optionLabel: 'ref',
|
||||
optionValue: 'id',
|
||||
},
|
||||
columnField: {
|
||||
component: null,
|
||||
},
|
||||
attrs: { url: MODEL, optionLabel: 'ref', optionValue: 'id' },
|
||||
columnField: { component: null },
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
name: 'Issued',
|
||||
label: t('invoiceOutList.tableVisibleColumns.issued'),
|
||||
name: 'issued',
|
||||
label: t('invoiceOut.summary.issued'),
|
||||
component: 'date',
|
||||
format: (row) => toDate(row.issued),
|
||||
columnField: {
|
||||
component: null,
|
||||
},
|
||||
columnField: { component: null },
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
name: 'clientFk',
|
||||
label: t('invoiceOutModule.customer'),
|
||||
label: t('globals.client'),
|
||||
cardVisible: true,
|
||||
component: 'select',
|
||||
attrs: {
|
||||
url: 'Clients',
|
||||
fields: ['id', 'name'],
|
||||
},
|
||||
columnField: {
|
||||
component: null,
|
||||
},
|
||||
attrs: { url: 'Clients', fields: ['id', 'name'] },
|
||||
columnField: { component: null },
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
name: 'companyCode',
|
||||
label: t('invoiceOutModule.company'),
|
||||
label: t('globals.company'),
|
||||
cardVisible: true,
|
||||
component: 'select',
|
||||
attrs: {
|
||||
url: 'Companies',
|
||||
optionLabel: 'code',
|
||||
optionValue: 'id',
|
||||
},
|
||||
columnField: {
|
||||
component: null,
|
||||
},
|
||||
attrs: { url: 'Companies', optionLabel: 'code', optionValue: 'id' },
|
||||
columnField: { component: null },
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
name: 'amount',
|
||||
label: t('invoiceOutModule.amount'),
|
||||
label: t('globals.amount'),
|
||||
cardVisible: true,
|
||||
format: (row) => toCurrency(row.amount),
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
name: 'created',
|
||||
label: t('invoiceOutList.tableVisibleColumns.created'),
|
||||
label: t('globals.created'),
|
||||
component: 'date',
|
||||
columnField: {
|
||||
component: null,
|
||||
},
|
||||
columnField: { component: null },
|
||||
format: (row) => toDate(row.created),
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
name: 'dued',
|
||||
label: t('invoiceOutList.tableVisibleColumns.dueDate'),
|
||||
label: t('invoiceOut.summary.dued'),
|
||||
component: 'date',
|
||||
columnField: {
|
||||
component: null,
|
||||
},
|
||||
columnField: { component: null },
|
||||
format: (row) => toDate(row.dued),
|
||||
},
|
||||
{
|
||||
|
@ -128,11 +119,12 @@ const columns = computed(() => [
|
|||
{
|
||||
title: t('components.smartCard.viewSummary'),
|
||||
icon: 'preview',
|
||||
isPrimary: true,
|
||||
action: (row) => viewSummary(row.id, InvoiceOutSummary),
|
||||
},
|
||||
{
|
||||
title: t('DownloadPdf'),
|
||||
icon: 'vn:ticket',
|
||||
title: t('globals.downloadPdf'),
|
||||
icon: 'cloud_download',
|
||||
isPrimary: true,
|
||||
action: (row) => openPdf(row.id),
|
||||
},
|
||||
|
@ -181,12 +173,12 @@ watchEffect(selectedRows);
|
|||
<template>
|
||||
<VnSearchbar
|
||||
:info="t('youCanSearchByInvoiceReference')"
|
||||
:label="t('searchInvoice')"
|
||||
data-key="invoiceOut"
|
||||
:label="t('Search invoice')"
|
||||
data-key="invoiceOutList"
|
||||
/>
|
||||
<RightMenu>
|
||||
<template #right-panel>
|
||||
<InvoiceOutFilter data-key="invoiceOut" />
|
||||
<InvoiceOutFilter data-key="invoiceOutList" />
|
||||
</template>
|
||||
</RightMenu>
|
||||
<VnSubToolbar>
|
||||
|
@ -197,21 +189,19 @@ watchEffect(selectedRows);
|
|||
@click="downloadPdf()"
|
||||
:disable="!hasSelectedCards"
|
||||
>
|
||||
<QTooltip>{{ t('globals.downloadPdf') }}</QTooltip>
|
||||
<QTooltip>{{ t('downloadPdf') }}</QTooltip>
|
||||
</QBtn>
|
||||
</template>
|
||||
</VnSubToolbar>
|
||||
<VnTable
|
||||
ref="tableRef"
|
||||
data-key="invoiceOut"
|
||||
data-key="invoiceOutList"
|
||||
:url="`${MODEL}/filter`"
|
||||
:create="{
|
||||
urlCreate: 'InvoiceOuts/createManualInvoice',
|
||||
title: t('Create manual invoice'),
|
||||
title: t('createManualInvoice'),
|
||||
onDataSaved: ({ id }) => tableRef.redirect(id),
|
||||
formInitialData: {
|
||||
active: true,
|
||||
},
|
||||
formInitialData: { active: true },
|
||||
}"
|
||||
:right-search="false"
|
||||
v-model:selected="selectedRows"
|
||||
|
@ -231,74 +221,203 @@ watchEffect(selectedRows);
|
|||
</span>
|
||||
</template>
|
||||
<template #more-create-dialog="{ data }">
|
||||
<div class="flex no-wrap flex-center">
|
||||
<VnSelect
|
||||
url="Tickets"
|
||||
v-model="data.ticketFk"
|
||||
:label="t('invoiceOutList.tableVisibleColumns.ticket')"
|
||||
option-label="id"
|
||||
option-value="id"
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel> #{{ scope.opt?.id }} </QItemLabel>
|
||||
<QItemLabel caption>{{ scope.opt?.nickname }}</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
<span class="q-ml-md">O</span>
|
||||
<div class="row q-col-gutter-xs">
|
||||
<div class="col-12">
|
||||
<div class="q-col-gutter-xs">
|
||||
<VnRow fixed>
|
||||
<VnRadio
|
||||
v-model="selectedOption"
|
||||
val="ticket"
|
||||
:label="t('globals.ticket')"
|
||||
class="q-my-none q-mr-md"
|
||||
/>
|
||||
|
||||
<VnInput
|
||||
v-show="selectedOption === 'ticket'"
|
||||
v-model="data.ticketFk"
|
||||
:label="t('globals.ticket')"
|
||||
style="flex: 1"
|
||||
/>
|
||||
|
||||
<div
|
||||
class="row q-col-gutter-xs q-ml-none"
|
||||
v-show="selectedOption !== 'ticket'"
|
||||
>
|
||||
<div class="col">
|
||||
<VnSelect
|
||||
v-model="data.clientFk"
|
||||
:label="t('globals.client')"
|
||||
url="Clients"
|
||||
:options="customerOptions"
|
||||
option-label="name"
|
||||
option-value="id"
|
||||
@update:model-value="fetchClientAddress"
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem
|
||||
v-bind="scope.itemProps"
|
||||
@click="selectedClient(scope.opt)"
|
||||
>
|
||||
<QItemSection>
|
||||
<QItemLabel>
|
||||
#{{ scope.opt?.id }} -
|
||||
{{ scope.opt?.name }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
</div>
|
||||
<div class="col">
|
||||
<VnSelect
|
||||
v-model="data.addressFk"
|
||||
:label="t('ticket.summary.consignee')"
|
||||
:options="addressOptions"
|
||||
option-label="nickname"
|
||||
option-value="id"
|
||||
v-if="
|
||||
data.clientFk &&
|
||||
selectedOption === 'consignatario'
|
||||
"
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel
|
||||
:class="{
|
||||
'color-vn-label':
|
||||
!scope.opt?.isActive,
|
||||
}"
|
||||
>
|
||||
{{
|
||||
`${
|
||||
!scope.opt?.isActive
|
||||
? t('inactive')
|
||||
: ''
|
||||
} `
|
||||
}}
|
||||
<span>
|
||||
{{
|
||||
scope.opt?.nickname
|
||||
}}</span
|
||||
>
|
||||
<span
|
||||
v-if="
|
||||
scope.opt?.province ||
|
||||
scope.opt?.city ||
|
||||
scope.opt?.street
|
||||
"
|
||||
>, {{ scope.opt?.street }},
|
||||
{{ scope.opt?.city }},
|
||||
{{
|
||||
scope.opt?.province?.name
|
||||
}}
|
||||
-
|
||||
{{
|
||||
scope.opt?.agencyMode
|
||||
?.name
|
||||
}}</span
|
||||
>
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
</div>
|
||||
</div>
|
||||
</VnRow>
|
||||
<VnRow fixed>
|
||||
<VnRadio
|
||||
v-model="selectedOption"
|
||||
val="cliente"
|
||||
:label="t('globals.client')"
|
||||
class="q-my-none q-mr-md"
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow fixed>
|
||||
<VnRadio
|
||||
v-model="selectedOption"
|
||||
val="consignatario"
|
||||
:label="t('ticket.summary.consignee')"
|
||||
class="q-my-none q-mr-md"
|
||||
/>
|
||||
</VnRow>
|
||||
</div>
|
||||
</div>
|
||||
<div class="full-width">
|
||||
<VnRow class="row q-col-gutter-xs">
|
||||
<VnSelect
|
||||
url="InvoiceOutSerials"
|
||||
v-model="data.serial"
|
||||
:label="t('invoiceIn.serial')"
|
||||
:options="invoiceOutSerialsOptions"
|
||||
option-label="description"
|
||||
option-value="code"
|
||||
option-filter
|
||||
:expr-builder="exprBuilder"
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel>
|
||||
{{ scope.opt?.code }} -
|
||||
{{ scope.opt?.description }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
<VnInputDate
|
||||
:label="t('invoiceOut.summary.dued')"
|
||||
v-model="data.maxShipped"
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow class="row q-col-gutter-xs">
|
||||
<VnSelect
|
||||
url="TaxAreas"
|
||||
v-model="data.taxArea"
|
||||
:label="t('invoiceOutList.tableVisibleColumns.taxArea')"
|
||||
:options="taxAreasOptions"
|
||||
option-label="code"
|
||||
option-value="code"
|
||||
/>
|
||||
<VnInput
|
||||
v-model="data.reference"
|
||||
:label="t('globals.reference')"
|
||||
/>
|
||||
</VnRow>
|
||||
</div>
|
||||
</div>
|
||||
<VnSelect
|
||||
url="Clients"
|
||||
v-model="data.clientFk"
|
||||
:label="t('invoiceOutModule.customer')"
|
||||
:options="customerOptions"
|
||||
option-label="name"
|
||||
option-value="id"
|
||||
/>
|
||||
<VnSelect
|
||||
url="InvoiceOutSerials"
|
||||
v-model="data.serial"
|
||||
:label="t('invoiceOutList.tableVisibleColumns.invoiceOutSerial')"
|
||||
:options="invoiceOutSerialsOptions"
|
||||
option-label="description"
|
||||
option-value="code"
|
||||
/>
|
||||
<VnInputDate
|
||||
:label="t('invoiceOutList.tableVisibleColumns.dueDate')"
|
||||
v-model="data.maxShipped"
|
||||
/>
|
||||
<VnSelect
|
||||
url="TaxAreas"
|
||||
v-model="data.taxArea"
|
||||
:label="t('invoiceOutList.tableVisibleColumns.taxArea')"
|
||||
:options="taxAreasOptions"
|
||||
option-label="code"
|
||||
option-value="code"
|
||||
/>
|
||||
<QInput
|
||||
v-model="data.reference"
|
||||
:label="t('invoiceOutList.tableVisibleColumns.ref')"
|
||||
/>
|
||||
</template>
|
||||
</VnTable>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
#formModel .vn-row {
|
||||
min-height: 45px;
|
||||
|
||||
.q-radio {
|
||||
align-self: flex-end;
|
||||
flex: 0.3;
|
||||
}
|
||||
|
||||
> .q-input,
|
||||
> .q-select {
|
||||
flex: 0.75;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<i18n>
|
||||
en:
|
||||
searchInvoice: Search issued invoice
|
||||
fileDenied: Browser denied file download...
|
||||
fileAllowed: Successful download of CSV file
|
||||
youCanSearchByInvoiceReference: You can search by invoice reference
|
||||
createInvoice: Make invoice
|
||||
Create manual invoice: Create manual invoice
|
||||
es:
|
||||
searchInvoice: Buscar factura emitida
|
||||
fileDenied: El navegador denegó la descarga de archivos...
|
||||
fileAllowed: Descarga exitosa de archivo CSV
|
||||
youCanSearchByInvoiceReference: Puedes buscar por referencia de la factura
|
||||
createInvoice: Crear factura
|
||||
Create manual invoice: Crear factura manual
|
||||
en:
|
||||
invoiceId: Invoice ID
|
||||
youCanSearchByInvoiceReference: You can search by invoice reference
|
||||
createManualInvoice: Create Manual Invoice
|
||||
inactive: (Inactive)
|
||||
|
||||
es:
|
||||
invoiceId: ID de factura
|
||||
youCanSearchByInvoiceReference: Puedes buscar por referencia de la factura
|
||||
createManualInvoice: Crear factura manual
|
||||
inactive: (Inactivo)
|
||||
</i18n>
|
||||
|
|
|
@ -33,7 +33,7 @@ const props = defineProps({
|
|||
<QItemSection>
|
||||
<VnInputDate
|
||||
v-model="params.from"
|
||||
:label="t('invoiceOut.negativeBases.from')"
|
||||
:label="t('globals.from')"
|
||||
is-outlined
|
||||
/>
|
||||
</QItemSection>
|
||||
|
@ -42,7 +42,7 @@ const props = defineProps({
|
|||
<QItemSection>
|
||||
<VnInputDate
|
||||
v-model="params.to"
|
||||
:label="t('invoiceOut.negativeBases.to')"
|
||||
:label="t('globals.to')"
|
||||
is-outlined
|
||||
/>
|
||||
</QItemSection>
|
||||
|
@ -51,7 +51,7 @@ const props = defineProps({
|
|||
<QItemSection>
|
||||
<VnInput
|
||||
v-model="params.company"
|
||||
:label="t('invoiceOut.negativeBases.company')"
|
||||
:label="t('globals.company')"
|
||||
is-outlined
|
||||
/>
|
||||
</QItemSection>
|
||||
|
@ -60,7 +60,7 @@ const props = defineProps({
|
|||
<QItemSection>
|
||||
<VnInput
|
||||
v-model="params.country"
|
||||
:label="t('invoiceOut.negativeBases.country')"
|
||||
:label="t('globals.country')"
|
||||
is-outlined
|
||||
/>
|
||||
</QItemSection>
|
||||
|
@ -79,7 +79,7 @@ const props = defineProps({
|
|||
<QItemSection>
|
||||
<VnInput
|
||||
v-model="params.clientSocialName"
|
||||
:label="t('invoiceOut.negativeBases.client')"
|
||||
:label="t('globals.client')"
|
||||
is-outlined
|
||||
/>
|
||||
</QItemSection>
|
||||
|
@ -88,7 +88,7 @@ const props = defineProps({
|
|||
<QItemSection>
|
||||
<VnInputNumber
|
||||
v-model="params.amount"
|
||||
:label="t('invoiceOut.negativeBases.amount')"
|
||||
:label="t('globals.amount')"
|
||||
is-outlined
|
||||
/>
|
||||
</QItemSection>
|
||||
|
|
|
@ -2,6 +2,7 @@ invoiceOutModule:
|
|||
customer: Client
|
||||
amount: Amount
|
||||
company: Company
|
||||
address: Address
|
||||
invoiceOutList:
|
||||
tableVisibleColumns:
|
||||
id: ID
|
||||
|
@ -15,11 +16,11 @@ invoiceOutList:
|
|||
DownloadPdf: Download PDF
|
||||
InvoiceOutSummary: Summary
|
||||
negativeBases:
|
||||
country: Country
|
||||
clientId: Client ID
|
||||
base: Base
|
||||
ticketId: Ticket
|
||||
active: Active
|
||||
hasToInvoice: Has to invoice
|
||||
verifiedData: Verified data
|
||||
commercial: Commercial
|
||||
country: Country
|
||||
clientId: Client ID
|
||||
base: Base
|
||||
ticketId: Ticket
|
||||
active: Active
|
||||
hasToInvoice: Has to invoice
|
||||
verifiedData: Verified data
|
||||
commercial: Commercial
|
||||
|
|
|
@ -4,14 +4,12 @@ invoiceOutModule:
|
|||
customer: Cliente
|
||||
amount: Importe
|
||||
company: Empresa
|
||||
address: Consignatario
|
||||
invoiceOutList:
|
||||
tableVisibleColumns:
|
||||
id: ID
|
||||
ref: Referencia
|
||||
issued: Fecha emisión
|
||||
customer: Cliente
|
||||
company: Empresa
|
||||
amount: Importe
|
||||
created: F. creación
|
||||
dueDate: F. máxima
|
||||
invoiceOutSerial: Serial
|
||||
|
@ -20,12 +18,12 @@ invoiceOutList:
|
|||
DownloadPdf: Descargar PDF
|
||||
InvoiceOutSummary: Resumen
|
||||
negativeBases:
|
||||
country: País
|
||||
clientId: ID del cliente
|
||||
client: Cliente
|
||||
base: Base
|
||||
ticketId: Ticket
|
||||
active: Activo
|
||||
hasToInvoice: Debe facturar
|
||||
verifiedData: Datos verificados
|
||||
commercial: Comercial
|
||||
country: País
|
||||
clientId: ID del cliente
|
||||
client: Cliente
|
||||
base: Base
|
||||
ticketId: Ticket
|
||||
active: Activo
|
||||
hasToInvoice: Debe facturar
|
||||
verifiedData: Datos verificados
|
||||
commercial: Comercial
|
||||
|
|
|
@ -42,7 +42,7 @@ onMounted(async () => {
|
|||
:required="true"
|
||||
/>
|
||||
<VnInput
|
||||
:label="t('createIntrastatForm.description')"
|
||||
:label="t('itemBasicData.description')"
|
||||
v-model="data.description"
|
||||
:required="true"
|
||||
/>
|
||||
|
|
|
@ -140,10 +140,7 @@ const openRegularizeStockForm = () => {
|
|||
</span>
|
||||
</template>
|
||||
</VnLv>
|
||||
<VnLv
|
||||
:label="t('item.descriptor.producer')"
|
||||
:value="dashIfEmpty(entity.subName)"
|
||||
/>
|
||||
<VnLv :label="t('globals.producer')" :value="dashIfEmpty(entity.subName)" />
|
||||
<VnLv
|
||||
v-if="entity.value5"
|
||||
:label="t('item.descriptor.color')"
|
||||
|
@ -157,7 +154,7 @@ const openRegularizeStockForm = () => {
|
|||
/>
|
||||
<VnLv
|
||||
v-if="entity.value7"
|
||||
:label="t('item.descriptor.stems')"
|
||||
:label="t('item.list.stems')"
|
||||
:value="entity.value7"
|
||||
/>
|
||||
</template>
|
||||
|
|
|
@ -75,7 +75,7 @@ const handlePhotoUpdated = (evt = false) => {
|
|||
<QIcon name="vn:item" />
|
||||
</div>
|
||||
<div class="text-grey-5" style="opacity: 0.4">
|
||||
{{ t('item.descriptor.item') }}
|
||||
{{ t('globals.item') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -107,7 +107,7 @@ const handlePhotoUpdated = (evt = false) => {
|
|||
>
|
||||
<div class="col column items-center">
|
||||
<span class="text-uppercase color-vn-white" style="font-size: 11px">
|
||||
{{ t('item.descriptor.visible') }}
|
||||
{{ t('globals.visible') }}
|
||||
</span>
|
||||
<span class="text-weight-bold text-h5 color-vn-white">{{ visible }}</span>
|
||||
</div>
|
||||
|
|
|
@ -90,7 +90,7 @@ const columns = computed(() => [
|
|||
format: (val) => dashIfEmpty(val),
|
||||
},
|
||||
{
|
||||
label: t('itemDiary.reference'),
|
||||
label: t('itemBasicData.reference'),
|
||||
field: 'reference',
|
||||
name: 'reference',
|
||||
align: 'left',
|
||||
|
|
|
@ -59,7 +59,7 @@ const columns = computed(() => [
|
|||
align: 'center',
|
||||
},
|
||||
{
|
||||
label: t('lastEntries.warehouse'),
|
||||
label: t('itemDiary.warehouse'),
|
||||
name: 'warehouse',
|
||||
field: 'warehouse',
|
||||
align: 'left',
|
||||
|
@ -94,7 +94,7 @@ const columns = computed(() => [
|
|||
format: (val) => dashIfEmpty(val),
|
||||
},
|
||||
{
|
||||
label: t('lastEntries.packing'),
|
||||
label: t('shelvings.packing'),
|
||||
name: 'packing',
|
||||
align: 'center',
|
||||
},
|
||||
|
@ -104,7 +104,7 @@ const columns = computed(() => [
|
|||
align: 'center',
|
||||
},
|
||||
{
|
||||
label: t('lastEntries.stems'),
|
||||
label: t('itemBasicData.stems'),
|
||||
name: 'stems',
|
||||
field: 'stems',
|
||||
align: 'center',
|
||||
|
@ -188,7 +188,7 @@ onUnmounted(() => (stateStore.rightDrawer = false));
|
|||
<VnSubToolbar>
|
||||
<template #st-data>
|
||||
<VnInputDate
|
||||
:label="t('lastEntries.since')"
|
||||
:label="t('itemDiary.since')"
|
||||
dense
|
||||
v-model="from"
|
||||
class="q-mr-lg"
|
||||
|
|
|
@ -55,13 +55,13 @@ const getUrl = (id, param) => `#/Item/${id}/${param}`;
|
|||
<QCard class="vn-one">
|
||||
<VnTitle
|
||||
:url="getUrl(entityId, 'basic-data')"
|
||||
:text="t('item.summary.basicData')"
|
||||
:text="t('globals.summary.basicData')"
|
||||
/>
|
||||
<VnLv :label="t('item.summary.name')" :value="item.name" />
|
||||
<VnLv :label="t('globals.name')" :value="item.name" />
|
||||
<VnLv :label="t('item.summary.completeName')" :value="item.longName" />
|
||||
<VnLv :label="t('item.summary.family')" :value="item.itemType.name" />
|
||||
<VnLv :label="t('item.summary.size')" :value="item.size" />
|
||||
<VnLv :label="t('item.summary.origin')" :value="item.origin.name" />
|
||||
<VnLv :label="t('globals.size')" :value="item.size" />
|
||||
<VnLv :label="t('globals.origin')" :value="item.origin.name" />
|
||||
<VnLv :label="t('item.summary.stems')" :value="item.stems" />
|
||||
<VnLv
|
||||
:label="t('item.summary.multiplier')"
|
||||
|
@ -96,7 +96,7 @@ const getUrl = (id, param) => `#/Item/${id}/${param}`;
|
|||
:value="item.intrastat.id"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('item.summary.intrastat')"
|
||||
:label="t('globals.intrastat')"
|
||||
:value="item.intrastat.description"
|
||||
/>
|
||||
<VnLv :label="t('item.summary.ref')" :value="item.comment" />
|
||||
|
@ -115,7 +115,7 @@ const getUrl = (id, param) => `#/Item/${id}/${param}`;
|
|||
/>
|
||||
</QCard>
|
||||
<QCard class="vn-one">
|
||||
<VnTitle :url="getUrl(entityId, 'tags')" :text="t('item.summary.tags')" />
|
||||
<VnTitle :url="getUrl(entityId, 'tags')" :text="t('globals.tags')" />
|
||||
<VnLv
|
||||
v-for="(tag, index) in tags"
|
||||
:key="index"
|
||||
|
@ -126,7 +126,7 @@ const getUrl = (id, param) => `#/Item/${id}/${param}`;
|
|||
<QCard class="vn-one" v-if="item.description">
|
||||
<VnTitle
|
||||
:url="getUrl(entityId, 'basic-data')"
|
||||
:text="t('item.summary.description')"
|
||||
:text="t('globals.description')"
|
||||
/>
|
||||
<p v-text="item.description" />
|
||||
</QCard>
|
||||
|
|
|
@ -151,7 +151,7 @@ const insertTag = (rows) => {
|
|||
:is-clearable="false"
|
||||
/>
|
||||
<VnInput
|
||||
:label="t('itemTags.relevancy')"
|
||||
:label="t('itemBasicData.relevancy')"
|
||||
type="number"
|
||||
v-model="row.priority"
|
||||
:required="true"
|
||||
|
|
|
@ -86,12 +86,9 @@ onBeforeMount(async () => {
|
|||
>
|
||||
<template #form="{ data }">
|
||||
<VnRow>
|
||||
<VnInput
|
||||
v-model="data.provisionalName"
|
||||
:label="t('item.create.name')"
|
||||
/>
|
||||
<VnInput v-model="data.provisionalName" :label="t('globals.name')" />
|
||||
<VnSelect
|
||||
:label="t('item.create.tag')"
|
||||
:label="t('globals.tag')"
|
||||
v-model="data.tag"
|
||||
:options="tagsOptions"
|
||||
option-value="id"
|
||||
|
@ -109,7 +106,7 @@ onBeforeMount(async () => {
|
|||
</VnRow>
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
:label="t('item.create.type')"
|
||||
:label="t('globals.type')"
|
||||
v-model="data.typeFk"
|
||||
:options="itemTypesOptions"
|
||||
option-label="name"
|
||||
|
@ -133,7 +130,7 @@ onBeforeMount(async () => {
|
|||
</template>
|
||||
</VnSelect>
|
||||
<VnSelect
|
||||
:label="t('item.create.intrastat')"
|
||||
:label="t('globals.intrastat')"
|
||||
v-model="data.intrastatFk"
|
||||
:options="intrastatsOptions"
|
||||
option-label="description"
|
||||
|
@ -156,7 +153,7 @@ onBeforeMount(async () => {
|
|||
</VnRow>
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
:label="t('item.create.origin')"
|
||||
:label="t('globals.origin')"
|
||||
v-model="data.originFk"
|
||||
:options="originsOptions"
|
||||
option-value="id"
|
||||
|
|
|
@ -64,8 +64,7 @@ const columns = computed(() => [
|
|||
},
|
||||
{
|
||||
label: t('globals.name'),
|
||||
field: 'name',
|
||||
name: 'description',
|
||||
name: 'name',
|
||||
...defaultColumnAttrs,
|
||||
create: true,
|
||||
cardVisible: true,
|
||||
|
@ -132,7 +131,7 @@ const columns = computed(() => [
|
|||
},
|
||||
|
||||
{
|
||||
label: t('item.fixedPrice.warehouse'),
|
||||
label: t('globals.warehouse'),
|
||||
field: 'warehouseFk',
|
||||
name: 'warehouseFk',
|
||||
...defaultColumnAttrs,
|
||||
|
@ -192,7 +191,7 @@ const editTableFieldsOptions = [
|
|||
},
|
||||
{
|
||||
field: 'warehouseFk',
|
||||
label: t('item.fixedPrice.warehouse'),
|
||||
label: t('globals.warehouse'),
|
||||
component: 'select',
|
||||
attrs: {
|
||||
options: [],
|
||||
|
@ -426,7 +425,7 @@ function handleOnDataSave({ CrudModelRef }) {
|
|||
:default-save="false"
|
||||
data-key="ItemFixedPrices"
|
||||
url="FixedPrices/filter"
|
||||
:order="['description DESC']"
|
||||
:order="['itemFk DESC', 'name DESC']"
|
||||
save-url="FixedPrices/crud"
|
||||
:user-params="{ warehouseFk: user.warehouseFk }"
|
||||
ref="tableRef"
|
||||
|
@ -480,7 +479,7 @@ function handleOnDataSave({ CrudModelRef }) {
|
|||
</template>
|
||||
</VnSelect>
|
||||
</template>
|
||||
<template #column-description="{ row }">
|
||||
<template #column-name="{ row }">
|
||||
<span class="link">
|
||||
{{ row.name }}
|
||||
</span>
|
||||
|
|
|
@ -17,21 +17,6 @@ const props = defineProps({
|
|||
});
|
||||
|
||||
const itemTypeWorkersOptions = ref([]);
|
||||
const exprBuilder = (param, value) => {
|
||||
switch (param) {
|
||||
case 'name':
|
||||
return { 'i.name': { like: `%${value}%` } };
|
||||
case 'itemFk':
|
||||
case 'warehouseFk':
|
||||
case 'rate2':
|
||||
case 'rate3':
|
||||
param = `fp.${param}`;
|
||||
return { [param]: value };
|
||||
case 'minPrice':
|
||||
param = `i.${param}`;
|
||||
return { [param]: value };
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -66,7 +51,7 @@ const exprBuilder = (param, value) => {
|
|||
url="Warehouses"
|
||||
auto-load
|
||||
:filter="{ fields: ['id', 'name'], order: 'name ASC', limit: 30 }"
|
||||
:label="t('components.itemsFilterPanel.warehouseFk')"
|
||||
:label="t('globals.warehouse')"
|
||||
v-model="params.warehouseFk"
|
||||
option-label="name"
|
||||
option-value="id"
|
||||
|
|
|
@ -80,7 +80,7 @@ const columns = computed(() => [
|
|||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
label: t('item.list.grouping'),
|
||||
label: t('entry.summary.grouping'),
|
||||
name: 'grouping',
|
||||
align: 'left',
|
||||
columnFilter: {
|
||||
|
@ -89,7 +89,7 @@ const columns = computed(() => [
|
|||
},
|
||||
},
|
||||
{
|
||||
label: t('item.list.packing'),
|
||||
label: t('entry.summary.packing'),
|
||||
name: 'packing',
|
||||
align: 'left',
|
||||
columnFilter: {
|
||||
|
@ -118,7 +118,7 @@ const columns = computed(() => [
|
|||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
label: t('item.list.size'),
|
||||
label: t('globals.size'),
|
||||
name: 'size',
|
||||
align: 'left',
|
||||
columnFilter: {
|
||||
|
@ -165,7 +165,7 @@ const columns = computed(() => [
|
|||
},
|
||||
},
|
||||
{
|
||||
label: t('item.list.intrastat'),
|
||||
label: t('globals.intrastat'),
|
||||
name: 'intrastat',
|
||||
align: 'left',
|
||||
component: 'select',
|
||||
|
@ -184,7 +184,7 @@ const columns = computed(() => [
|
|||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
label: t('item.list.origin'),
|
||||
label: t('globals.origin'),
|
||||
name: 'origin',
|
||||
align: 'left',
|
||||
component: 'select',
|
||||
|
@ -258,7 +258,7 @@ const columns = computed(() => [
|
|||
component: 'checkbox',
|
||||
},
|
||||
{
|
||||
label: t('item.list.producer'),
|
||||
label: t('globals.producer'),
|
||||
name: 'producer',
|
||||
align: 'left',
|
||||
component: 'select',
|
||||
|
@ -275,7 +275,7 @@ const columns = computed(() => [
|
|||
},
|
||||
},
|
||||
{
|
||||
label: t('item.list.landed'),
|
||||
label: t('globals.landed'),
|
||||
name: 'landed',
|
||||
align: 'left',
|
||||
component: 'date',
|
||||
|
|
|
@ -40,7 +40,7 @@ watch(
|
|||
|
||||
const columns = computed(() => [
|
||||
{
|
||||
label: t('item.buyRequest.ticketId'),
|
||||
label: t('globals.ticketId'),
|
||||
name: 'ticketFk',
|
||||
align: 'left',
|
||||
isId: true,
|
||||
|
@ -50,7 +50,7 @@ const columns = computed(() => [
|
|||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
label: t('item.buyRequest.shipped'),
|
||||
label: t('globals.shipped'),
|
||||
name: 'shipped',
|
||||
align: 'left',
|
||||
component: 'date',
|
||||
|
@ -90,7 +90,7 @@ const columns = computed(() => [
|
|||
columnClass: 'shrink',
|
||||
},
|
||||
{
|
||||
label: t('item.buyRequest.price'),
|
||||
label: t('globals.price'),
|
||||
name: 'price',
|
||||
align: 'left',
|
||||
format: (row) => toCurrency(row.price),
|
||||
|
@ -115,7 +115,7 @@ const columns = computed(() => [
|
|||
columnClass: 'shrink',
|
||||
},
|
||||
{
|
||||
label: t('item.buyRequest.item'),
|
||||
label: t('globals.item'),
|
||||
name: 'item',
|
||||
align: 'left',
|
||||
component: 'input',
|
||||
|
@ -137,7 +137,7 @@ const columns = computed(() => [
|
|||
columnClass: 'expand',
|
||||
},
|
||||
{
|
||||
label: t('item.buyRequest.state'),
|
||||
label: t('globals.state'),
|
||||
name: 'state',
|
||||
format: (row) => getState(row.isOk),
|
||||
align: 'left',
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue