forked from verdnatura/salix-front
Correccion de conflicto
This commit is contained in:
commit
31467a2bef
|
@ -0,0 +1,140 @@
|
||||||
|
<script setup>
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import { ref, computed } from 'vue';
|
||||||
|
|
||||||
|
import FetchData from 'components/FetchData.vue';
|
||||||
|
|
||||||
|
import { useState } from 'src/composables/useState';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
|
const $props = defineProps({
|
||||||
|
allColumns: {
|
||||||
|
type: Array,
|
||||||
|
default: () => [],
|
||||||
|
},
|
||||||
|
tableCode: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
|
labelsTraductionsPath: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const emit = defineEmits(['onConfigSaved']);
|
||||||
|
|
||||||
|
const state = useState();
|
||||||
|
const { t } = useI18n();
|
||||||
|
const popupProxyRef = ref(null);
|
||||||
|
const user = state.getUser();
|
||||||
|
const initialUserConfigViewData = ref(null);
|
||||||
|
const userConfigFilter = {
|
||||||
|
where: {
|
||||||
|
tableCode: $props.tableCode,
|
||||||
|
userFk: user.id,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const formattedCols = ref([]);
|
||||||
|
|
||||||
|
const areAllChecksMarked = computed(() => {
|
||||||
|
return formattedCols.value.every((col) => col.active);
|
||||||
|
});
|
||||||
|
|
||||||
|
const setUserConfigViewData = (data) => {
|
||||||
|
initialUserConfigViewData.value = data;
|
||||||
|
if (data.length === 0) return;
|
||||||
|
formattedCols.value = $props.allColumns.map((col) => {
|
||||||
|
// Importante: El name de las columnas de la tabla debe conincidir con el name de las variables que devuelve la view config
|
||||||
|
const obj = {
|
||||||
|
name: col,
|
||||||
|
active: data[0].configuration[col],
|
||||||
|
};
|
||||||
|
return obj;
|
||||||
|
});
|
||||||
|
emitSavedConfig();
|
||||||
|
};
|
||||||
|
|
||||||
|
const toggleMarkAll = (val) => {
|
||||||
|
formattedCols.value.forEach((col) => (col.active = val));
|
||||||
|
};
|
||||||
|
|
||||||
|
const saveConfig = async () => {
|
||||||
|
try {
|
||||||
|
const data = {
|
||||||
|
id: initialUserConfigViewData.value[0].id,
|
||||||
|
userFk: 9,
|
||||||
|
tableCode: $props.tableCode,
|
||||||
|
configuration: {},
|
||||||
|
};
|
||||||
|
|
||||||
|
formattedCols.value.forEach((col) => {
|
||||||
|
data.configuration[col.name] = col.active;
|
||||||
|
});
|
||||||
|
|
||||||
|
await axios.patch('UserConfigViews', data);
|
||||||
|
emitSavedConfig();
|
||||||
|
popupProxyRef.value.hide();
|
||||||
|
} catch (err) {
|
||||||
|
console.error('Error saving user view config');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const emitSavedConfig = () => {
|
||||||
|
const filteredCols = formattedCols.value.filter((col) => col.active);
|
||||||
|
const mappedCols = filteredCols.map((col) => col.name);
|
||||||
|
emit('onConfigSaved', mappedCols);
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<fetch-data
|
||||||
|
v-if="user"
|
||||||
|
url="UserConfigViews"
|
||||||
|
:filter="userConfigFilter"
|
||||||
|
@on-fetch="(data) => setUserConfigViewData(data)"
|
||||||
|
auto-load
|
||||||
|
/>
|
||||||
|
<QBtn color="primary" icon="view_column">
|
||||||
|
<QPopupProxy ref="popupProxyRef">
|
||||||
|
<QCard class="column q-pa-md">
|
||||||
|
<QIcon name="info" size="sm" class="info-icon">
|
||||||
|
<QTooltip>{{ t('Check the columns you want to see') }}</QTooltip>
|
||||||
|
</QIcon>
|
||||||
|
<span class="text-body1 q-mb-sm">{{ t('Visible columns') }}</span>
|
||||||
|
<QCheckbox
|
||||||
|
:label="t('Tick all')"
|
||||||
|
:model-value="areAllChecksMarked"
|
||||||
|
@update:model-value="toggleMarkAll($event)"
|
||||||
|
class="q-mb-sm"
|
||||||
|
/>
|
||||||
|
<div
|
||||||
|
v-if="allColumns.length !== 0 && formattedCols.length !== 0"
|
||||||
|
class="checks-layout"
|
||||||
|
>
|
||||||
|
<QCheckbox
|
||||||
|
v-for="(col, index) in allColumns"
|
||||||
|
:key="index"
|
||||||
|
:label="t(`${$props.labelsTraductionsPath + '.' + col}`)"
|
||||||
|
v-model="formattedCols[index].active"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<QBtn class="full-width q-mt-md" color="primary" @click="saveConfig()">{{
|
||||||
|
t('globals.save')
|
||||||
|
}}</QBtn>
|
||||||
|
</QCard>
|
||||||
|
</QPopupProxy>
|
||||||
|
</QBtn>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.info-icon {
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.checks-layout {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(3, 200px);
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -207,6 +207,52 @@ export default {
|
||||||
salesPerson: 'Sales person',
|
salesPerson: 'Sales person',
|
||||||
contactChannel: 'Contact channel',
|
contactChannel: 'Contact channel',
|
||||||
},
|
},
|
||||||
|
extendedList: {
|
||||||
|
tableVisibleColumns: {
|
||||||
|
id: 'Identifier',
|
||||||
|
name: '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',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
entry: {
|
||||||
|
pageTitles: {
|
||||||
|
entries: 'Entries',
|
||||||
|
list: 'List',
|
||||||
|
createEntry: 'New entry',
|
||||||
|
summary: 'Summary',
|
||||||
|
create: 'Create',
|
||||||
|
},
|
||||||
|
list: {
|
||||||
|
newEntry: 'New entry',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
ticket: {
|
ticket: {
|
||||||
pageTitles: {
|
pageTitles: {
|
||||||
|
@ -770,6 +816,15 @@ export default {
|
||||||
list: 'List',
|
list: 'List',
|
||||||
create: 'Create',
|
create: 'Create',
|
||||||
summary: 'Summary',
|
summary: 'Summary',
|
||||||
|
basicData: 'Basic data',
|
||||||
|
fiscalData: 'Fiscal data',
|
||||||
|
billingData: 'Billing data',
|
||||||
|
log: 'Log',
|
||||||
|
accounts: 'Accounts',
|
||||||
|
contacts: 'Contacts',
|
||||||
|
addresses: 'Addresses',
|
||||||
|
consumption: 'Consumption',
|
||||||
|
agencyTerm: 'Agency agreement',
|
||||||
},
|
},
|
||||||
list: {
|
list: {
|
||||||
payMethod: 'Pay method',
|
payMethod: 'Pay method',
|
||||||
|
|
|
@ -206,6 +206,51 @@ export default {
|
||||||
salesPerson: 'Comercial',
|
salesPerson: 'Comercial',
|
||||||
contactChannel: 'Canal de contacto',
|
contactChannel: 'Canal de contacto',
|
||||||
},
|
},
|
||||||
|
extendedList: {
|
||||||
|
tableVisibleColumns: {
|
||||||
|
id: 'Identificador',
|
||||||
|
name: 'Nombre',
|
||||||
|
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',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
entry: {
|
||||||
|
pageTitles: {
|
||||||
|
entries: 'Entradas',
|
||||||
|
list: 'Listado',
|
||||||
|
summary: 'Resumen',
|
||||||
|
create: 'Crear',
|
||||||
|
},
|
||||||
|
list: {
|
||||||
|
newEntry: 'Nueva entrada',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
ticket: {
|
ticket: {
|
||||||
pageTitles: {
|
pageTitles: {
|
||||||
|
@ -770,6 +815,15 @@ export default {
|
||||||
list: 'Listado',
|
list: 'Listado',
|
||||||
create: 'Crear',
|
create: 'Crear',
|
||||||
summary: 'Resumen',
|
summary: 'Resumen',
|
||||||
|
basicData: 'Datos básicos',
|
||||||
|
fiscalData: 'Datos fiscales',
|
||||||
|
billingData: 'Forma de pago',
|
||||||
|
log: 'Historial',
|
||||||
|
accounts: 'Cuentas',
|
||||||
|
contacts: 'Contactos',
|
||||||
|
addresses: 'Direcciones',
|
||||||
|
consumption: 'Consumo',
|
||||||
|
agencyTerm: 'Acuerdo agencia',
|
||||||
},
|
},
|
||||||
list: {
|
list: {
|
||||||
payMethod: 'Método de pago',
|
payMethod: 'Método de pago',
|
||||||
|
|
|
@ -1,16 +1,18 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref, computed, onBeforeMount } from 'vue';
|
import { ref, computed, onBeforeMount, onMounted } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { useRouter } from 'vue-router';
|
import { useRouter } from 'vue-router';
|
||||||
|
|
||||||
import { QBtn } from 'quasar';
|
import { QBtn, QIcon } from 'quasar';
|
||||||
|
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
|
||||||
import { useArrayData } from 'composables/useArrayData';
|
|
||||||
import { useStateStore } from 'stores/useStateStore';
|
|
||||||
|
|
||||||
import CustomerDescriptorProxy from 'src/pages/Customer/Card/CustomerDescriptorProxy.vue';
|
import CustomerDescriptorProxy from 'src/pages/Customer/Card/CustomerDescriptorProxy.vue';
|
||||||
import CustomerExtendedListActions from './CustomerExtendedListActions.vue';
|
import CustomerExtendedListActions from './CustomerExtendedListActions.vue';
|
||||||
import CustomerExtendedListFilter from './CustomerExtendedListFilter.vue';
|
import CustomerExtendedListFilter from './CustomerExtendedListFilter.vue';
|
||||||
|
import TableVisibleColumns from 'src/components/common/TableVisibleColumns.vue';
|
||||||
|
|
||||||
|
import { useArrayData } from 'composables/useArrayData';
|
||||||
|
import { useStateStore } from 'stores/useStateStore';
|
||||||
|
import { dashIfEmpty, toDate } from 'src/filters';
|
||||||
|
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
@ -27,22 +29,62 @@ onBeforeMount(async () => {
|
||||||
stateStore.rightDrawer = true;
|
stateStore.rightDrawer = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
const filteredColumns = columns.value.filter(
|
||||||
|
(col) => col.name !== 'actions' && col.name !== 'customerStatus'
|
||||||
|
);
|
||||||
|
allColumnNames.value = filteredColumns.map((col) => col.name);
|
||||||
|
});
|
||||||
|
|
||||||
const rows = computed(() => arrayData.value.store.data);
|
const rows = computed(() => arrayData.value.store.data);
|
||||||
|
|
||||||
const selectedCustomerId = ref(0);
|
const selectedCustomerId = ref(0);
|
||||||
|
const selectedSalesPersonId = ref(0);
|
||||||
|
const allColumnNames = ref([]);
|
||||||
|
const visibleColumns = ref([]);
|
||||||
|
|
||||||
const tableColumnComponents = {
|
const tableColumnComponents = {
|
||||||
|
customerStatus: {
|
||||||
|
component: QIcon,
|
||||||
|
props: (prop) => ({
|
||||||
|
name: !prop.row.isActive
|
||||||
|
? 'vn:disabled'
|
||||||
|
: prop.row.isActive && prop.row.isFreezed
|
||||||
|
? 'vn:frozen'
|
||||||
|
: '',
|
||||||
|
color: 'primary',
|
||||||
|
size: 'sm',
|
||||||
|
}),
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
id: {
|
id: {
|
||||||
component: QBtn,
|
component: QBtn,
|
||||||
props: () => ({ flat: true, color: 'blue' }),
|
props: () => ({ flat: true, color: 'blue' }),
|
||||||
event: (prop) => selectCustomerId(prop.row.id),
|
event: (prop) => {
|
||||||
|
selectCustomerId(prop.row.id);
|
||||||
},
|
},
|
||||||
socialName: {
|
},
|
||||||
|
name: {
|
||||||
component: 'span',
|
component: 'span',
|
||||||
props: () => {},
|
props: () => {},
|
||||||
event: () => {},
|
event: () => {},
|
||||||
},
|
},
|
||||||
salesPerson: {
|
fi: {
|
||||||
|
component: 'span',
|
||||||
|
props: () => {},
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
salesPersonFk: {
|
||||||
|
component: QBtn,
|
||||||
|
props: () => ({ flat: true, color: 'blue' }),
|
||||||
|
event: (prop) => selectSalesPersonId(prop.row.salesPersonFk),
|
||||||
|
},
|
||||||
|
credit: {
|
||||||
|
component: 'span',
|
||||||
|
props: () => {},
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
creditInsurance: {
|
||||||
component: 'span',
|
component: 'span',
|
||||||
props: () => {},
|
props: () => {},
|
||||||
event: () => {},
|
event: () => {},
|
||||||
|
@ -52,16 +94,165 @@ const tableColumnComponents = {
|
||||||
props: () => {},
|
props: () => {},
|
||||||
event: () => {},
|
event: () => {},
|
||||||
},
|
},
|
||||||
|
mobile: {
|
||||||
|
component: 'span',
|
||||||
|
props: () => {},
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
street: {
|
||||||
|
component: 'span',
|
||||||
|
props: () => {},
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
countryFk: {
|
||||||
|
component: 'span',
|
||||||
|
props: () => {},
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
provinceFk: {
|
||||||
|
component: 'span',
|
||||||
|
props: () => {},
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
city: {
|
city: {
|
||||||
component: 'span',
|
component: 'span',
|
||||||
props: () => {},
|
props: () => {},
|
||||||
event: () => {},
|
event: () => {},
|
||||||
},
|
},
|
||||||
|
postcode: {
|
||||||
|
component: 'span',
|
||||||
|
props: () => {},
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
email: {
|
email: {
|
||||||
component: 'span',
|
component: 'span',
|
||||||
props: () => {},
|
props: () => {},
|
||||||
event: () => {},
|
event: () => {},
|
||||||
},
|
},
|
||||||
|
created: {
|
||||||
|
component: 'span',
|
||||||
|
props: () => {},
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
businessTypeFk: {
|
||||||
|
component: 'span',
|
||||||
|
props: () => {},
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
payMethodFk: {
|
||||||
|
component: 'span',
|
||||||
|
props: () => {},
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
sageTaxTypeFk: {
|
||||||
|
component: 'span',
|
||||||
|
props: () => {},
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
sageTransactionTypeFk: {
|
||||||
|
component: 'span',
|
||||||
|
props: () => {},
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
isActive: {
|
||||||
|
component: QIcon,
|
||||||
|
props: (prop) => ({
|
||||||
|
name: prop.row.isActive ? 'check' : 'close',
|
||||||
|
color: prop.row.isActive ? 'positive' : 'negative',
|
||||||
|
size: 'sm',
|
||||||
|
}),
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
isVies: {
|
||||||
|
component: QIcon,
|
||||||
|
props: (prop) => ({
|
||||||
|
name: prop.row.isVies ? 'check' : 'close',
|
||||||
|
color: prop.row.isVies ? 'positive' : 'negative',
|
||||||
|
size: 'sm',
|
||||||
|
}),
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
isTaxDataChecked: {
|
||||||
|
component: QIcon,
|
||||||
|
props: (prop) => ({
|
||||||
|
name: prop.row.isTaxDataChecked ? 'check' : 'close',
|
||||||
|
color: prop.row.isTaxDataChecked ? 'positive' : 'negative',
|
||||||
|
size: 'sm',
|
||||||
|
}),
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
isEqualizated: {
|
||||||
|
component: QIcon,
|
||||||
|
props: (prop) => ({
|
||||||
|
name: prop.row.isEqualizated ? 'check' : 'close',
|
||||||
|
color: prop.row.isEqualizated ? 'positive' : 'negative',
|
||||||
|
size: 'sm',
|
||||||
|
}),
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
isFreezed: {
|
||||||
|
component: QIcon,
|
||||||
|
props: (prop) => ({
|
||||||
|
name: prop.row.isFreezed ? 'check' : 'close',
|
||||||
|
color: prop.row.isFreezed ? 'positive' : 'negative',
|
||||||
|
size: 'sm',
|
||||||
|
}),
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
hasToInvoice: {
|
||||||
|
component: QIcon,
|
||||||
|
props: (prop) => ({
|
||||||
|
name: prop.row.hasToInvoice ? 'check' : 'close',
|
||||||
|
color: prop.row.hasToInvoice ? 'positive' : 'negative',
|
||||||
|
size: 'sm',
|
||||||
|
}),
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
hasToInvoiceByAddress: {
|
||||||
|
component: QIcon,
|
||||||
|
props: (prop) => ({
|
||||||
|
name: prop.row.hasToInvoiceByAddress ? 'check' : 'close',
|
||||||
|
color: prop.row.hasToInvoiceByAddress ? 'positive' : 'negative',
|
||||||
|
size: 'sm',
|
||||||
|
}),
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
isToBeMailed: {
|
||||||
|
component: QIcon,
|
||||||
|
props: (prop) => ({
|
||||||
|
name: prop.row.isToBeMailed ? 'check' : 'close',
|
||||||
|
color: prop.row.isToBeMailed ? 'positive' : 'negative',
|
||||||
|
size: 'sm',
|
||||||
|
}),
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
hasLcr: {
|
||||||
|
component: QIcon,
|
||||||
|
props: (prop) => ({
|
||||||
|
name: prop.row.hasLcr ? 'check' : 'close',
|
||||||
|
color: prop.row.hasLcr ? 'positive' : 'negative',
|
||||||
|
size: 'sm',
|
||||||
|
}),
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
hasCoreVnl: {
|
||||||
|
component: QIcon,
|
||||||
|
props: (prop) => ({
|
||||||
|
name: prop.row.hasCoreVnl ? 'check' : 'close',
|
||||||
|
color: prop.row.hasCoreVnl ? 'positive' : 'negative',
|
||||||
|
size: 'sm',
|
||||||
|
}),
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
|
hasSepaVnl: {
|
||||||
|
component: QIcon,
|
||||||
|
props: (prop) => ({
|
||||||
|
name: prop.row.hasSepaVnl ? 'check' : 'close',
|
||||||
|
color: prop.row.hasSepaVnl ? 'positive' : 'negative',
|
||||||
|
size: 'sm',
|
||||||
|
}),
|
||||||
|
event: () => {},
|
||||||
|
},
|
||||||
actions: {
|
actions: {
|
||||||
component: CustomerExtendedListActions,
|
component: CustomerExtendedListActions,
|
||||||
props: (prop) => ({
|
props: (prop) => ({
|
||||||
|
@ -73,42 +264,205 @@ const tableColumnComponents = {
|
||||||
|
|
||||||
const columns = computed(() => {
|
const columns = computed(() => {
|
||||||
return [
|
return [
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: '',
|
||||||
|
label: '',
|
||||||
|
name: 'customerStatus',
|
||||||
|
format: () => ' ',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'id',
|
field: 'id',
|
||||||
label: t('Identifier'),
|
label: t('customer.extendedList.tableVisibleColumns.id'),
|
||||||
name: 'id',
|
name: 'id',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'socialName',
|
field: 'name',
|
||||||
label: t('Social name'),
|
label: t('customer.extendedList.tableVisibleColumns.name'),
|
||||||
name: 'socialName',
|
name: 'name',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'fi',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.fi'),
|
||||||
|
name: 'fi',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'salesPerson',
|
field: 'salesPerson',
|
||||||
label: t('Salesperson'),
|
label: t('customer.extendedList.tableVisibleColumns.salesPersonFk'),
|
||||||
name: 'salesPerson',
|
name: 'salesPersonFk',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'credit',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.credit'),
|
||||||
|
name: 'credit',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'creditInsurance',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.creditInsurance'),
|
||||||
|
name: 'creditInsurance',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'phone',
|
field: 'phone',
|
||||||
label: t('Phone'),
|
label: t('customer.extendedList.tableVisibleColumns.phone'),
|
||||||
name: 'phone',
|
name: 'phone',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'mobile',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.mobile'),
|
||||||
|
name: 'mobile',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'street',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.street'),
|
||||||
|
name: 'street',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'country',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.countryFk'),
|
||||||
|
name: 'countryFk',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'province',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.provinceFk'),
|
||||||
|
name: 'provinceFk',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'city',
|
field: 'city',
|
||||||
label: t('City'),
|
label: t('customer.extendedList.tableVisibleColumns.city'),
|
||||||
name: 'city',
|
name: 'city',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'postcode',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.postcode'),
|
||||||
|
name: 'postcode',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
align: 'left',
|
align: 'left',
|
||||||
field: 'email',
|
field: 'email',
|
||||||
label: t('Email'),
|
label: t('customer.extendedList.tableVisibleColumns.email'),
|
||||||
name: 'email',
|
name: 'email',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'created',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.created'),
|
||||||
|
name: 'created',
|
||||||
|
format: (value) => toDate(value),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'businessType',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.businessTypeFk'),
|
||||||
|
name: 'businessTypeFk',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'payMethod',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.payMethodFk'),
|
||||||
|
name: 'payMethodFk',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'sageTaxType',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.sageTaxTypeFk'),
|
||||||
|
name: 'sageTaxTypeFk',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'sageTransactionType',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.sageTransactionTypeFk'),
|
||||||
|
name: 'sageTransactionTypeFk',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'isActive',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.isActive'),
|
||||||
|
name: 'isActive',
|
||||||
|
format: () => ' ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'isVies',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.isVies'),
|
||||||
|
name: 'isVies',
|
||||||
|
format: () => ' ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'isTaxDataChecked',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.isTaxDataChecked'),
|
||||||
|
name: 'isTaxDataChecked',
|
||||||
|
format: () => ' ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'isEqualizated',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.isEqualizated'),
|
||||||
|
name: 'isEqualizated',
|
||||||
|
format: () => ' ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'isFreezed',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.isFreezed'),
|
||||||
|
name: 'isFreezed',
|
||||||
|
format: () => ' ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'hasToInvoice',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.hasToInvoice'),
|
||||||
|
name: 'hasToInvoice',
|
||||||
|
format: () => ' ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'hasToInvoiceByAddress',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.hasToInvoiceByAddress'),
|
||||||
|
name: 'hasToInvoiceByAddress',
|
||||||
|
format: () => ' ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'isToBeMailed',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.isToBeMailed'),
|
||||||
|
name: 'isToBeMailed',
|
||||||
|
format: () => ' ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'hasLcr',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.hasLcr'),
|
||||||
|
name: 'hasLcr',
|
||||||
|
format: () => ' ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'hasCoreVnl',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.hasCoreVnl'),
|
||||||
|
name: 'hasCoreVnl',
|
||||||
|
format: () => ' ',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
align: 'left',
|
||||||
|
field: 'hasSepaVnl',
|
||||||
|
label: t('customer.extendedList.tableVisibleColumns.hasSepaVnl'),
|
||||||
|
name: 'hasSepaVnl',
|
||||||
|
format: () => ' ',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
align: 'right',
|
align: 'right',
|
||||||
field: 'actions',
|
field: 'actions',
|
||||||
|
@ -119,7 +473,7 @@ const columns = computed(() => {
|
||||||
});
|
});
|
||||||
|
|
||||||
const stopEventPropagation = (event, col) => {
|
const stopEventPropagation = (event, col) => {
|
||||||
if (!['ref', 'id', 'supplier'].includes(col.name)) return;
|
if (!['id', 'salesPersonFk'].includes(col.name)) return;
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
};
|
};
|
||||||
|
@ -131,17 +485,35 @@ const navigateToTravelId = (id) => {
|
||||||
const selectCustomerId = (id) => {
|
const selectCustomerId = (id) => {
|
||||||
selectedCustomerId.value = id;
|
selectedCustomerId.value = id;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const selectSalesPersonId = (id) => {
|
||||||
|
console.log('selectedSalesPersonId:: ', selectedSalesPersonId.value);
|
||||||
|
selectedSalesPersonId.value = id;
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<QDrawer v-model="stateStore.rightDrawer" side="right" :width="256" show-if-above>
|
<QDrawer v-model="stateStore.rightDrawer" side="right" :width="256" show-if-above>
|
||||||
<QScrollArea class="fit text-grey-8">
|
<QScrollArea class="fit text-grey-8">
|
||||||
<CustomerExtendedListFilter data-key="CustomerExtendedList" />
|
<CustomerExtendedListFilter
|
||||||
|
v-if="visibleColumns.length !== 0"
|
||||||
|
data-key="CustomerExtendedList"
|
||||||
|
:visible-columns="visibleColumns"
|
||||||
|
/>
|
||||||
</QScrollArea>
|
</QScrollArea>
|
||||||
</QDrawer>
|
</QDrawer>
|
||||||
|
|
||||||
<QToolbar class="bg-vn-dark">
|
<QToolbar class="bg-vn-dark">
|
||||||
<div id="st-data"></div>
|
<div id="st-data">
|
||||||
|
<TableVisibleColumns
|
||||||
|
:all-columns="allColumnNames"
|
||||||
|
table-code="clientsDetail"
|
||||||
|
labels-traductions-path="customer.extendedList.tableVisibleColumns"
|
||||||
|
@on-config-saved="
|
||||||
|
visibleColumns = ['customerStatus', ...$event, 'actions']
|
||||||
|
"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
<QSpace />
|
<QSpace />
|
||||||
<div id="st-actions"></div>
|
<div id="st-actions"></div>
|
||||||
</QToolbar>
|
</QToolbar>
|
||||||
|
@ -149,11 +521,11 @@ const selectCustomerId = (id) => {
|
||||||
<QPage class="column items-center q-pa-md">
|
<QPage class="column items-center q-pa-md">
|
||||||
<QTable
|
<QTable
|
||||||
:columns="columns"
|
:columns="columns"
|
||||||
:pagination="{ rowsPerPage: 0 }"
|
:pagination="{ rowsPerPage: 12 }"
|
||||||
:rows="rows"
|
:rows="rows"
|
||||||
class="full-width q-mt-md"
|
class="full-width q-mt-md"
|
||||||
hide-bottom
|
|
||||||
row-key="id"
|
row-key="id"
|
||||||
|
:visible-columns="visibleColumns"
|
||||||
>
|
>
|
||||||
<template #body="props">
|
<template #body="props">
|
||||||
<QTr
|
<QTr
|
||||||
|
@ -173,8 +545,15 @@ const selectCustomerId = (id) => {
|
||||||
v-bind="tableColumnComponents[col.name].props(props)"
|
v-bind="tableColumnComponents[col.name].props(props)"
|
||||||
@click="tableColumnComponents[col.name].event(props)"
|
@click="tableColumnComponents[col.name].event(props)"
|
||||||
>
|
>
|
||||||
{{ col.value }}
|
{{ dashIfEmpty(col.value) }}
|
||||||
<CustomerDescriptorProxy :id="selectedCustomerId" />
|
<WorkerDescriptorProxy
|
||||||
|
v-if="props.row.salesPersonFk"
|
||||||
|
:id="selectedSalesPersonId"
|
||||||
|
/>
|
||||||
|
<CustomerDescriptorProxy
|
||||||
|
v-if="props.row.id"
|
||||||
|
:id="selectedCustomerId"
|
||||||
|
/>
|
||||||
</component>
|
</component>
|
||||||
</QTd>
|
</QTd>
|
||||||
</QTr>
|
</QTr>
|
||||||
|
@ -189,13 +568,3 @@ const selectCustomerId = (id) => {
|
||||||
padding: 6px 6px 6px 6px;
|
padding: 6px 6px 6px 6px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<i18n>
|
|
||||||
es:
|
|
||||||
Identifier: Identificador
|
|
||||||
Social name: Razón social
|
|
||||||
Salesperson: Comercial
|
|
||||||
Phone: Teléfono
|
|
||||||
City: Población
|
|
||||||
Email: Email
|
|
||||||
</i18n>
|
|
||||||
|
|
|
@ -39,7 +39,13 @@ const viewSummary = () => {
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<QIcon @click.stop="redirectToCreateView" color="primary" name="vn:ticket" size="sm">
|
<div>
|
||||||
|
<QIcon
|
||||||
|
@click.stop="redirectToCreateView"
|
||||||
|
color="primary"
|
||||||
|
name="vn:ticket"
|
||||||
|
size="sm"
|
||||||
|
>
|
||||||
<QTooltip>
|
<QTooltip>
|
||||||
{{ t('Client ticket list') }}
|
{{ t('Client ticket list') }}
|
||||||
</QTooltip>
|
</QTooltip>
|
||||||
|
@ -55,6 +61,7 @@ const viewSummary = () => {
|
||||||
{{ t('Preview') }}
|
{{ t('Preview') }}
|
||||||
</QTooltip>
|
</QTooltip>
|
||||||
</QIcon>
|
</QIcon>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<i18n>
|
<i18n>
|
||||||
|
|
|
@ -1,22 +1,40 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import { ref } from 'vue';
|
import { ref, computed } from 'vue';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
import FetchData from 'components/FetchData.vue';
|
import FetchData from 'components/FetchData.vue';
|
||||||
import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
|
import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
|
||||||
import VnSelectFilter from 'components/common/VnSelectFilter.vue';
|
import VnSelectFilter from 'components/common/VnSelectFilter.vue';
|
||||||
import VnInput from 'src/components/common/VnInput.vue';
|
import VnInput from 'src/components/common/VnInput.vue';
|
||||||
|
import VnInputDate from 'components/common/VnInputDate.vue';
|
||||||
|
|
||||||
const { t } = useI18n();
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
dataKey: {
|
dataKey: {
|
||||||
type: String,
|
type: String,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
visibleColumns: {
|
||||||
|
type: Array,
|
||||||
|
required: true,
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
const clients = ref();
|
const clients = ref();
|
||||||
const workers = ref();
|
const workers = ref();
|
||||||
|
const countriesOptions = ref([]);
|
||||||
|
const provincesOptions = ref([]);
|
||||||
|
const paymethodsOptions = ref([]);
|
||||||
|
const businessTypesOptions = ref([]);
|
||||||
|
const sageTaxTypesOptions = ref([]);
|
||||||
|
const sageTransactionTypesOptions = ref([]);
|
||||||
|
|
||||||
|
const visibleColumnsSet = computed(() => new Set(props.visibleColumns));
|
||||||
|
|
||||||
|
const shouldRenderColumn = (colName) => {
|
||||||
|
return visibleColumnsSet.value.has(colName);
|
||||||
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
|
@ -32,25 +50,75 @@ const workers = ref();
|
||||||
@on-fetch="(data) => (workers = data)"
|
@on-fetch="(data) => (workers = data)"
|
||||||
auto-load
|
auto-load
|
||||||
/>
|
/>
|
||||||
|
<FetchData
|
||||||
|
url="Workers/activeWithInheritedRole"
|
||||||
|
:filter="{ where: { role: 'salesPerson' } }"
|
||||||
|
@on-fetch="(data) => (workers = data)"
|
||||||
|
auto-load
|
||||||
|
/>
|
||||||
|
<FetchData
|
||||||
|
url="Countries"
|
||||||
|
:filter="{ fields: ['id', 'country'], order: 'country ASC' }"
|
||||||
|
@on-fetch="(data) => (countriesOptions = data)"
|
||||||
|
auto-load
|
||||||
|
/>
|
||||||
|
<FetchData
|
||||||
|
ref="provincesFetchDataRef"
|
||||||
|
@on-fetch="(data) => (provincesOptions = data)"
|
||||||
|
auto-load
|
||||||
|
url="Provinces"
|
||||||
|
/>
|
||||||
|
<FetchData
|
||||||
|
url="Paymethods"
|
||||||
|
@on-fetch="(data) => (paymethodsOptions = data)"
|
||||||
|
auto-load
|
||||||
|
/>
|
||||||
|
<FetchData
|
||||||
|
url="BusinessTypes"
|
||||||
|
@on-fetch="(data) => (businessTypesOptions = data)"
|
||||||
|
auto-load
|
||||||
|
/>
|
||||||
|
<FetchData
|
||||||
|
url="SageTaxTypes"
|
||||||
|
auto-load
|
||||||
|
@on-fetch="(data) => (sageTaxTypesOptions = data)"
|
||||||
|
/>
|
||||||
|
<FetchData
|
||||||
|
url="sageTransactionTypes"
|
||||||
|
auto-load
|
||||||
|
@on-fetch="(data) => (sageTransactionTypesOptions = data)"
|
||||||
|
/>
|
||||||
<VnFilterPanel :data-key="props.dataKey" :search-button="true">
|
<VnFilterPanel :data-key="props.dataKey" :search-button="true">
|
||||||
<template #tags="{ tag, formatFn }">
|
<template #tags="{ tag, formatFn }">
|
||||||
<div class="q-gutter-x-xs">
|
<div class="q-gutter-x-xs">
|
||||||
<strong>{{ t(`params.${tag.label}`) }}: </strong>
|
<strong
|
||||||
|
>{{ t(`customer.extendedList.tableVisibleColumns.${tag.label}`) }}:
|
||||||
|
</strong>
|
||||||
<span>{{ formatFn(tag.value) }}</span>
|
<span>{{ formatFn(tag.value) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template #body="{ params, searchFn }">
|
<template #body="{ params, searchFn }">
|
||||||
<QList dense class="list">
|
<QList dense class="list q-gutter-y-sm q-mt-sm">
|
||||||
<QItem class="q-mb-sm q-mt-sm">
|
<QItem v-if="shouldRenderColumn('id')">
|
||||||
<QItemSection>
|
<QItemSection>
|
||||||
<VnInput
|
<VnInput
|
||||||
:label="t('Identifier')"
|
:label="t('customer.extendedList.tableVisibleColumns.id')"
|
||||||
v-model="params.identifier"
|
v-model="params.id"
|
||||||
|
is-outlined
|
||||||
|
clearable
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('name')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnInput
|
||||||
|
:label="t('customer.extendedList.tableVisibleColumns.name')"
|
||||||
|
v-model="params.name"
|
||||||
is-outlined
|
is-outlined
|
||||||
/>
|
/>
|
||||||
</QItemSection>
|
</QItemSection>
|
||||||
</QItem>
|
</QItem>
|
||||||
<QItem class="q-mb-sm">
|
<!-- <QItem class="q-mb-sm">
|
||||||
<QItemSection v-if="!clients">
|
<QItemSection v-if="!clients">
|
||||||
<QSkeleton type="QInput" class="full-width" />
|
<QSkeleton type="QInput" class="full-width" />
|
||||||
</QItemSection>
|
</QItemSection>
|
||||||
|
@ -72,15 +140,28 @@ const workers = ref();
|
||||||
:input-debounce="0"
|
:input-debounce="0"
|
||||||
/>
|
/>
|
||||||
</QItemSection>
|
</QItemSection>
|
||||||
|
</QItem> -->
|
||||||
|
<QItem v-if="shouldRenderColumn('fi')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnInput
|
||||||
|
:label="t('customer.extendedList.tableVisibleColumns.fi')"
|
||||||
|
v-model="params.fi"
|
||||||
|
is-outlined
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
</QItem>
|
</QItem>
|
||||||
<QItem class="q-mb-sm">
|
<QItem v-if="shouldRenderColumn('salesPersonFk')">
|
||||||
<QItemSection v-if="!workers">
|
<QItemSection v-if="!workers">
|
||||||
<QSkeleton type="QInput" class="full-width" />
|
<QSkeleton type="QInput" class="full-width" />
|
||||||
</QItemSection>
|
</QItemSection>
|
||||||
<QItemSection v-if="workers">
|
<QItemSection v-if="workers">
|
||||||
<VnSelectFilter
|
<VnSelectFilter
|
||||||
:label="t('Salesperson')"
|
:label="
|
||||||
v-model="params.salesPerson"
|
t(
|
||||||
|
'customer.extendedList.tableVisibleColumns.salesPersonFk'
|
||||||
|
)
|
||||||
|
"
|
||||||
|
v-model="params.salesPersonFk"
|
||||||
@update:model-value="searchFn()"
|
@update:model-value="searchFn()"
|
||||||
:options="workers"
|
:options="workers"
|
||||||
option-value="id"
|
option-value="id"
|
||||||
|
@ -96,19 +177,375 @@ const workers = ref();
|
||||||
/>
|
/>
|
||||||
</QItemSection>
|
</QItemSection>
|
||||||
</QItem>
|
</QItem>
|
||||||
<QItem class="q-mb-sm">
|
<QItem v-if="shouldRenderColumn('credit')">
|
||||||
<QItemSection>
|
<QItemSection>
|
||||||
<VnInput :label="t('Phone')" v-model="params.phone" is-outlined />
|
<VnInput
|
||||||
|
:label="t('customer.extendedList.tableVisibleColumns.credit')"
|
||||||
|
v-model="params.credit"
|
||||||
|
is-outlined
|
||||||
|
/>
|
||||||
</QItemSection>
|
</QItemSection>
|
||||||
</QItem>
|
</QItem>
|
||||||
<QItem class="q-mb-sm">
|
<QItem v-if="shouldRenderColumn('creditInsurance')">
|
||||||
<QItemSection>
|
<QItemSection>
|
||||||
<VnInput :label="t('City')" v-model="params.city" is-outlined />
|
<VnInput
|
||||||
|
:label="
|
||||||
|
t(
|
||||||
|
'customer.extendedList.tableVisibleColumns.creditInsurance'
|
||||||
|
)
|
||||||
|
"
|
||||||
|
v-model="params.creditInsurance"
|
||||||
|
is-outlined
|
||||||
|
/>
|
||||||
</QItemSection>
|
</QItemSection>
|
||||||
</QItem>
|
</QItem>
|
||||||
<QItem class="q-mb-sm">
|
<QItem v-if="shouldRenderColumn('phone')">
|
||||||
<QItemSection>
|
<QItemSection>
|
||||||
<VnInput :label="t('Email')" v-model="params.email" is-outlined />
|
<VnInput
|
||||||
|
:label="t('customer.extendedList.tableVisibleColumns.phone')"
|
||||||
|
v-model="params.phone"
|
||||||
|
is-outlined
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('mobile')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnInput
|
||||||
|
:label="t('customer.extendedList.tableVisibleColumns.mobile')"
|
||||||
|
v-model="params.mobile"
|
||||||
|
is-outlined
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('street')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnInput
|
||||||
|
:label="t('customer.extendedList.tableVisibleColumns.street')"
|
||||||
|
v-model="params.street"
|
||||||
|
is-outlined
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('countryFk')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnSelectFilter
|
||||||
|
:label="
|
||||||
|
t('customer.extendedList.tableVisibleColumns.countryFk')
|
||||||
|
"
|
||||||
|
v-model="params.countryFk"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:options="countriesOptions"
|
||||||
|
option-value="id"
|
||||||
|
option-label="country"
|
||||||
|
map-options
|
||||||
|
hide-selected
|
||||||
|
dense
|
||||||
|
outlined
|
||||||
|
rounded
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('provinceFk')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnSelectFilter
|
||||||
|
:label="
|
||||||
|
t('customer.extendedList.tableVisibleColumns.provinceFk')
|
||||||
|
"
|
||||||
|
v-model="params.provinceFk"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:options="provincesOptions"
|
||||||
|
option-value="id"
|
||||||
|
option-label="name"
|
||||||
|
map-options
|
||||||
|
hide-selected
|
||||||
|
dense
|
||||||
|
outlined
|
||||||
|
rounded
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('city')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnInput
|
||||||
|
:label="t('customer.extendedList.tableVisibleColumns.city')"
|
||||||
|
v-model="params.city"
|
||||||
|
is-outlined
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('postcode')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnInput
|
||||||
|
:label="
|
||||||
|
t('customer.extendedList.tableVisibleColumns.postcode')
|
||||||
|
"
|
||||||
|
v-model="params.postcode"
|
||||||
|
is-outlined
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('email')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnInput
|
||||||
|
:label="t('customer.extendedList.tableVisibleColumns.email')"
|
||||||
|
v-model="params.email"
|
||||||
|
is-outlined
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
|
||||||
|
<QItem v-if="shouldRenderColumn('created')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnInputDate
|
||||||
|
v-model="params.created"
|
||||||
|
:label="
|
||||||
|
t('customer.extendedList.tableVisibleColumns.created')
|
||||||
|
"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
is-outlined
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('businessTypeFk')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnSelectFilter
|
||||||
|
:label="
|
||||||
|
t(
|
||||||
|
'customer.extendedList.tableVisibleColumns.businessTypeFk'
|
||||||
|
)
|
||||||
|
"
|
||||||
|
v-model="params.businessTypeFk"
|
||||||
|
:options="businessTypesOptions"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
option-value="code"
|
||||||
|
option-label="description"
|
||||||
|
map-options
|
||||||
|
hide-selected
|
||||||
|
dense
|
||||||
|
outlined
|
||||||
|
rounded
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('payMethodFk')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnSelectFilter
|
||||||
|
:label="
|
||||||
|
t('customer.extendedList.tableVisibleColumns.payMethodFk')
|
||||||
|
"
|
||||||
|
v-model="params.payMethodFk"
|
||||||
|
:options="paymethodsOptions"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
option-value="id"
|
||||||
|
option-label="name"
|
||||||
|
map-options
|
||||||
|
hide-selected
|
||||||
|
dense
|
||||||
|
outlined
|
||||||
|
rounded
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('sageTaxTypeFk')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnSelectFilter
|
||||||
|
:label="
|
||||||
|
t(
|
||||||
|
'customer.extendedList.tableVisibleColumns.sageTaxTypeFk'
|
||||||
|
)
|
||||||
|
"
|
||||||
|
v-model="params.sageTaxTypeFk"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:options="sageTaxTypesOptions"
|
||||||
|
option-value="id"
|
||||||
|
option-label="vat"
|
||||||
|
map-options
|
||||||
|
hide-selected
|
||||||
|
dense
|
||||||
|
outlined
|
||||||
|
rounded
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('sageTransactionTypeFk')">
|
||||||
|
<QItemSection>
|
||||||
|
<VnSelectFilter
|
||||||
|
:label="
|
||||||
|
t(
|
||||||
|
'customer.extendedList.tableVisibleColumns.sageTransactionTypeFk'
|
||||||
|
)
|
||||||
|
"
|
||||||
|
v-model="params.sageTransactionTypeFk"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:options="sageTransactionTypesOptions"
|
||||||
|
option-value="id"
|
||||||
|
option-label="transaction"
|
||||||
|
map-options
|
||||||
|
hide-selected
|
||||||
|
dense
|
||||||
|
outlined
|
||||||
|
rounded
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem
|
||||||
|
v-if="shouldRenderColumn('isActive') || shouldRenderColumn('isVies')"
|
||||||
|
>
|
||||||
|
<QItemSection v-if="shouldRenderColumn('isActive')">
|
||||||
|
<QCheckbox
|
||||||
|
v-model="params.isActive"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:label="
|
||||||
|
t('customer.extendedList.tableVisibleColumns.isActive')
|
||||||
|
"
|
||||||
|
toggle-indeterminate
|
||||||
|
:false-value="undefined"
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
<QItemSection v-if="shouldRenderColumn('isVies')">
|
||||||
|
<QCheckbox
|
||||||
|
v-model="params.isVies"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:label="t('customer.extendedList.tableVisibleColumns.isVies')"
|
||||||
|
toggle-indeterminate
|
||||||
|
:false-value="undefined"
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem
|
||||||
|
v-if="
|
||||||
|
shouldRenderColumn('isEqualizated') ||
|
||||||
|
shouldRenderColumn('isTaxDataChecked')
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<QItemSection v-if="shouldRenderColumn('isTaxDataChecked')">
|
||||||
|
<QCheckbox
|
||||||
|
v-model="params.isTaxDataChecked"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:label="
|
||||||
|
t(
|
||||||
|
'customer.extendedList.tableVisibleColumns.isTaxDataChecked'
|
||||||
|
)
|
||||||
|
"
|
||||||
|
toggle-indeterminate
|
||||||
|
:false-value="undefined"
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
<QItemSection v-if="shouldRenderColumn('isEqualizated')">
|
||||||
|
<QCheckbox
|
||||||
|
v-model="params.isEqualizated"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:label="
|
||||||
|
t(
|
||||||
|
'customer.extendedList.tableVisibleColumns.isEqualizated'
|
||||||
|
)
|
||||||
|
"
|
||||||
|
toggle-indeterminate
|
||||||
|
:false-value="undefined"
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem
|
||||||
|
v-if="
|
||||||
|
shouldRenderColumn('hasToInvoice') ||
|
||||||
|
shouldRenderColumn('isFreezed')
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<QItemSection v-if="shouldRenderColumn('isFreezed')">
|
||||||
|
<QCheckbox
|
||||||
|
v-model="params.isFreezed"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:label="
|
||||||
|
t('customer.extendedList.tableVisibleColumns.isFreezed')
|
||||||
|
"
|
||||||
|
toggle-indeterminate
|
||||||
|
:false-value="undefined"
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
<QItemSection v-if="shouldRenderColumn('hasToInvoice')">
|
||||||
|
<QCheckbox
|
||||||
|
v-model="params.hasToInvoice"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:label="
|
||||||
|
t(
|
||||||
|
'customer.extendedList.tableVisibleColumns.hasToInvoice'
|
||||||
|
)
|
||||||
|
"
|
||||||
|
toggle-indeterminate
|
||||||
|
:false-value="undefined"
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem
|
||||||
|
v-if="
|
||||||
|
shouldRenderColumn('isToBeMailed') ||
|
||||||
|
shouldRenderColumn('hasToInvoiceByAddress')
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<QItemSection v-if="shouldRenderColumn('hasToInvoiceByAddress')">
|
||||||
|
<QCheckbox
|
||||||
|
v-model="params.hasToInvoiceByAddress"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:label="
|
||||||
|
t(
|
||||||
|
'customer.extendedList.tableVisibleColumns.hasToInvoiceByAddress'
|
||||||
|
)
|
||||||
|
"
|
||||||
|
toggle-indeterminate
|
||||||
|
:false-value="undefined"
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
<QItemSection v-if="shouldRenderColumn('isToBeMailed')">
|
||||||
|
<QCheckbox
|
||||||
|
v-model="params.isToBeMailed"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:label="
|
||||||
|
t(
|
||||||
|
'customer.extendedList.tableVisibleColumns.isToBeMailed'
|
||||||
|
)
|
||||||
|
"
|
||||||
|
toggle-indeterminate
|
||||||
|
:false-value="undefined"
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem
|
||||||
|
v-if="
|
||||||
|
shouldRenderColumn('hasLcr') || shouldRenderColumn('hasCoreVnl')
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<QItemSection v-if="shouldRenderColumn('hasLcr')">
|
||||||
|
<QCheckbox
|
||||||
|
v-model="params.hasLcr"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:label="t('customer.extendedList.tableVisibleColumns.hasLcr')"
|
||||||
|
toggle-indeterminate
|
||||||
|
:false-value="undefined"
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
<QItemSection v-if="shouldRenderColumn('hasCoreVnl')">
|
||||||
|
<QCheckbox
|
||||||
|
v-model="params.hasCoreVnl"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:label="
|
||||||
|
t('customer.extendedList.tableVisibleColumns.hasCoreVnl')
|
||||||
|
"
|
||||||
|
toggle-indeterminate
|
||||||
|
:false-value="undefined"
|
||||||
|
/>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
<QItem v-if="shouldRenderColumn('hasSepaVnl')">
|
||||||
|
<QItemSection>
|
||||||
|
<QCheckbox
|
||||||
|
v-model="params.hasSepaVnl"
|
||||||
|
@update:model-value="searchFn()"
|
||||||
|
:label="
|
||||||
|
t('customer.extendedList.tableVisibleColumns.hasSepaVnl')
|
||||||
|
"
|
||||||
|
toggle-indeterminate
|
||||||
|
:false-value="undefined"
|
||||||
|
/>
|
||||||
</QItemSection>
|
</QItemSection>
|
||||||
</QItem>
|
</QItem>
|
||||||
|
|
||||||
|
@ -128,11 +565,12 @@ const workers = ref();
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<i18n>
|
<i18n>
|
||||||
|
<<<<<<< HEAD:src/pages/Customer/ExtendedList/CustomerExtendedListFilter.vue
|
||||||
es:
|
es:
|
||||||
Identifier: Identificador
|
Identifier: Identificador
|
||||||
|
=======
|
||||||
|
|
||||||
|
es:
|
||||||
|
>>>>>>> dev:src/pages/Customer/CustomerExtendedListFilter.vue
|
||||||
Social name: Razón social
|
Social name: Razón social
|
||||||
Salesperson: Comercial
|
|
||||||
Phone: Teléfono
|
|
||||||
City: Población
|
|
||||||
Email: Email
|
|
||||||
</i18n>
|
</i18n>
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
<script setup>
|
||||||
|
import { useStateStore } from 'stores/useStateStore';
|
||||||
|
import LeftMenu from 'components/LeftMenu.vue';
|
||||||
|
|
||||||
|
const stateStore = useStateStore();
|
||||||
|
</script>
|
||||||
|
<template>
|
||||||
|
<!-- Entry searchbar -->
|
||||||
|
<QDrawer v-model="stateStore.leftDrawer" show-if-above :width="256">
|
||||||
|
<QScrollArea class="fit">
|
||||||
|
<!-- EntryDescriptor -->
|
||||||
|
<QSeparator />
|
||||||
|
<LeftMenu source="card" />
|
||||||
|
</QScrollArea>
|
||||||
|
</QDrawer>
|
||||||
|
<QPageContainer>
|
||||||
|
<QPage>
|
||||||
|
<QToolbar class="bg-vn-dark justify-end">
|
||||||
|
<div id="st-data"></div>
|
||||||
|
<QSpace />
|
||||||
|
<div id="st-actions"></div>
|
||||||
|
</QToolbar>
|
||||||
|
<div class="q-pa-md"><RouterView></RouterView></div>
|
||||||
|
</QPage>
|
||||||
|
</QPageContainer>
|
||||||
|
</template>
|
|
@ -0,0 +1,135 @@
|
||||||
|
<script setup>
|
||||||
|
import { reactive, ref } from 'vue';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
|
|
||||||
|
import FormModel from 'components/FormModel.vue';
|
||||||
|
import VnRow from 'components/ui/VnRow.vue';
|
||||||
|
import VnSelectFilter from 'src/components/common/VnSelectFilter.vue';
|
||||||
|
import FetchData from 'components/FetchData.vue';
|
||||||
|
|
||||||
|
import { toDate } from 'src/filters';
|
||||||
|
|
||||||
|
const { t } = useI18n();
|
||||||
|
const route = useRoute();
|
||||||
|
|
||||||
|
const newEntryForm = reactive({
|
||||||
|
supplierFk: null,
|
||||||
|
travelFk: route.query?.travelFk || null,
|
||||||
|
companyFk: null,
|
||||||
|
});
|
||||||
|
|
||||||
|
const suppliersOptions = ref([]);
|
||||||
|
const travelsOptionsOptions = ref([]);
|
||||||
|
const companiesOptions = ref([]);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<FetchData
|
||||||
|
url="Suppliers"
|
||||||
|
:filter="{ fields: ['id', 'nickname'] }"
|
||||||
|
order="nickname"
|
||||||
|
@on-fetch="(data) => (suppliersOptions = data)"
|
||||||
|
auto-load
|
||||||
|
/>
|
||||||
|
<FetchData
|
||||||
|
url="Travels/filter"
|
||||||
|
:filter="{ fields: ['id', 'warehouseInName'] }"
|
||||||
|
order="id"
|
||||||
|
@on-fetch="(data) => (travelsOptionsOptions = data)"
|
||||||
|
auto-load
|
||||||
|
/>
|
||||||
|
<FetchData
|
||||||
|
ref="companiesRef"
|
||||||
|
url="Companies"
|
||||||
|
:filter="{ fields: ['id', 'code'] }"
|
||||||
|
order="code"
|
||||||
|
@on-fetch="(data) => (companiesOptions = data)"
|
||||||
|
auto-load
|
||||||
|
/>
|
||||||
|
|
||||||
|
<!-- Agregar searchbar de entries -->
|
||||||
|
|
||||||
|
<QPage>
|
||||||
|
<QToolbar class="bg-vn-dark justify-end">
|
||||||
|
<div id="st-data"></div>
|
||||||
|
<QSpace />
|
||||||
|
<div id="st-actions"></div>
|
||||||
|
</QToolbar>
|
||||||
|
<FormModel url-create="Entries" model="entry" :form-initial-data="newEntryForm">
|
||||||
|
<template #form="{ data, validate }">
|
||||||
|
<VnRow class="row q-gutter-md q-mb-md">
|
||||||
|
<VnSelectFilter
|
||||||
|
:label="t('Supplier *')"
|
||||||
|
class="full-width"
|
||||||
|
v-model="data.supplierFk"
|
||||||
|
:options="suppliersOptions"
|
||||||
|
option-value="id"
|
||||||
|
option-label="nickname"
|
||||||
|
hide-selected
|
||||||
|
:rules="validate('entry.supplierFk')"
|
||||||
|
>
|
||||||
|
<template #option="scope">
|
||||||
|
<QItem v-bind="scope.itemProps">
|
||||||
|
<QItemSection>
|
||||||
|
<QItemLabel>{{ scope.opt?.nickname }}</QItemLabel>
|
||||||
|
<QItemLabel caption>
|
||||||
|
#{{ scope.opt?.id }}
|
||||||
|
</QItemLabel>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
</template>
|
||||||
|
</VnSelectFilter>
|
||||||
|
</VnRow>
|
||||||
|
<VnRow class="row q-gutter-md q-mb-md">
|
||||||
|
<VnSelectFilter
|
||||||
|
:label="t('Travel *')"
|
||||||
|
class="full-width"
|
||||||
|
v-model="data.travelFk"
|
||||||
|
:options="travelsOptionsOptions"
|
||||||
|
option-value="id"
|
||||||
|
option-label="warehouseInName"
|
||||||
|
map-options
|
||||||
|
hide-selected
|
||||||
|
:rules="validate('entry.travelFk')"
|
||||||
|
>
|
||||||
|
<template #option="scope">
|
||||||
|
<QItem v-bind="scope.itemProps">
|
||||||
|
<QItemSection>
|
||||||
|
<QItemLabel
|
||||||
|
>{{ scope.opt?.agencyModeName }} -
|
||||||
|
{{ scope.opt?.warehouseInName }} ({{
|
||||||
|
toDate(scope.opt?.shipped)
|
||||||
|
}}) → {{ scope.opt?.warehouseOutName }} ({{
|
||||||
|
toDate(scope.opt?.landed)
|
||||||
|
}})</QItemLabel
|
||||||
|
>
|
||||||
|
</QItemSection>
|
||||||
|
</QItem>
|
||||||
|
</template>
|
||||||
|
</VnSelectFilter>
|
||||||
|
</VnRow>
|
||||||
|
<VnRow class="row q-gutter-md q-mb-md">
|
||||||
|
<VnSelectFilter
|
||||||
|
:label="t('Company *')"
|
||||||
|
class="full-width"
|
||||||
|
v-model="data.companyFk"
|
||||||
|
:options="companiesOptions"
|
||||||
|
option-value="id"
|
||||||
|
option-label="code"
|
||||||
|
map-options
|
||||||
|
hide-selected
|
||||||
|
:rules="validate('entry.companyFk')"
|
||||||
|
/>
|
||||||
|
</VnRow>
|
||||||
|
</template>
|
||||||
|
</FormModel>
|
||||||
|
</QPage>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<i18n>
|
||||||
|
es:
|
||||||
|
Supplier *: Proveedor *
|
||||||
|
Travel *: Envío *
|
||||||
|
Company *: Empresa *
|
||||||
|
</i18n>
|
|
@ -0,0 +1,22 @@
|
||||||
|
<script setup>
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
const { t } = useI18n();
|
||||||
|
|
||||||
|
const redirectToCreateView = () => {
|
||||||
|
router.push({ name: 'EntryCreate' });
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<QPage class="column items-center q-pa-md">
|
||||||
|
<QPageSticky :offset="[20, 20]">
|
||||||
|
<QBtn fab icon="add" color="primary" @click="redirectToCreateView()" />
|
||||||
|
<QTooltip>
|
||||||
|
{{ t('entry.list.newEntry') }}
|
||||||
|
</QTooltip>
|
||||||
|
</QPageSticky>
|
||||||
|
</QPage>
|
||||||
|
</template>
|
|
@ -0,0 +1,17 @@
|
||||||
|
<script setup>
|
||||||
|
import { useStateStore } from 'stores/useStateStore';
|
||||||
|
import LeftMenu from 'src/components/LeftMenu.vue';
|
||||||
|
|
||||||
|
const stateStore = useStateStore();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<QDrawer v-model="stateStore.leftDrawer" show-if-above :width="256">
|
||||||
|
<QScrollArea class="fit text-grey-8">
|
||||||
|
<LeftMenu />
|
||||||
|
</QScrollArea>
|
||||||
|
</QDrawer>
|
||||||
|
<QPageContainer>
|
||||||
|
<RouterView></RouterView>
|
||||||
|
</QPageContainer>
|
||||||
|
</template>
|
|
@ -0,0 +1 @@
|
||||||
|
<template>Supplier accounts</template>
|
|
@ -0,0 +1 @@
|
||||||
|
<template>Supplier addresses</template>
|
|
@ -0,0 +1 @@
|
||||||
|
<template>Supplier agency term</template>
|
|
@ -0,0 +1 @@
|
||||||
|
<template>Supplier basic data</template>
|
|
@ -0,0 +1 @@
|
||||||
|
<template>Supplier billing data</template>
|
|
@ -2,6 +2,8 @@
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
import { useStateStore } from 'stores/useStateStore';
|
import { useStateStore } from 'stores/useStateStore';
|
||||||
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
|
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
|
||||||
|
import LeftMenu from 'components/LeftMenu.vue';
|
||||||
|
import SupplierDescriptor from './SupplierDescriptor.vue';
|
||||||
|
|
||||||
const stateStore = useStateStore();
|
const stateStore = useStateStore();
|
||||||
const { t } = useI18n();
|
const { t } = useI18n();
|
||||||
|
@ -18,7 +20,9 @@ const { t } = useI18n();
|
||||||
</template>
|
</template>
|
||||||
<QDrawer v-model="stateStore.leftDrawer" show-if-above :width="256">
|
<QDrawer v-model="stateStore.leftDrawer" show-if-above :width="256">
|
||||||
<QScrollArea class="fit">
|
<QScrollArea class="fit">
|
||||||
<!-- Aca iría left menu y descriptor -->
|
<SupplierDescriptor />
|
||||||
|
<QSeparator />
|
||||||
|
<LeftMenu source="card" />
|
||||||
</QScrollArea>
|
</QScrollArea>
|
||||||
</QDrawer>
|
</QDrawer>
|
||||||
<QPageContainer>
|
<QPageContainer>
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
<template>Supplier consumption</template>
|
|
@ -0,0 +1 @@
|
||||||
|
<template>Supplier contacts</template>
|
|
@ -0,0 +1 @@
|
||||||
|
<template>Supplier fiscal data</template>
|
|
@ -0,0 +1 @@
|
||||||
|
<template>Supplier log</template>
|
|
@ -51,13 +51,3 @@ const newSupplierForm = reactive({
|
||||||
</FormModel>
|
</FormModel>
|
||||||
</QPage>
|
</QPage>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<style lang="scss" scoped>
|
|
||||||
.card {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
width: 100%;
|
|
||||||
background-color: var(--vn-dark);
|
|
||||||
padding: 40px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
|
@ -2,15 +2,17 @@
|
||||||
import { onMounted, ref, computed, onUpdated } from 'vue';
|
import { onMounted, ref, computed, onUpdated } from 'vue';
|
||||||
import { useRoute, useRouter } from 'vue-router';
|
import { useRoute, useRouter } from 'vue-router';
|
||||||
import { useI18n } from 'vue-i18n';
|
import { useI18n } from 'vue-i18n';
|
||||||
|
|
||||||
|
import { QCheckbox, QIcon } from 'quasar';
|
||||||
import CardSummary from 'components/ui/CardSummary.vue';
|
import CardSummary from 'components/ui/CardSummary.vue';
|
||||||
import VnLv from 'src/components/ui/VnLv.vue';
|
import VnLv from 'src/components/ui/VnLv.vue';
|
||||||
import { getUrl } from 'src/composables/getUrl';
|
|
||||||
import { toDate } from 'src/filters';
|
|
||||||
import travelService from 'src/services/travel.service';
|
|
||||||
import { QCheckbox, QIcon } from 'quasar';
|
|
||||||
import { toCurrency } from 'filters/index';
|
|
||||||
import VnRow from 'components/ui/VnRow.vue';
|
import VnRow from 'components/ui/VnRow.vue';
|
||||||
|
|
||||||
|
import travelService from 'src/services/travel.service';
|
||||||
|
import { toDate, toCurrency } from 'src/filters';
|
||||||
|
import { getUrl } from 'src/composables/getUrl';
|
||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
onUpdated(() => summaryRef.value.fetch());
|
onUpdated(() => summaryRef.value.fetch());
|
||||||
|
|
||||||
const route = useRoute();
|
const route = useRoute();
|
||||||
|
@ -40,9 +42,17 @@ const cloneTravel = () => {
|
||||||
redirectToCreateView(stringifiedTravelData);
|
redirectToCreateView(stringifiedTravelData);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const cloneTravelWithEntries = () => {
|
||||||
|
try {
|
||||||
|
axios.post(`Travels/${$props.id}/cloneWithEntries`);
|
||||||
|
} catch (err) {
|
||||||
|
console.err('Error cloning travel with entries');
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const headerMenuOptions = [
|
const headerMenuOptions = [
|
||||||
{ name: t('travel.summary.cloneShipping'), action: cloneTravel },
|
{ name: t('travel.summary.cloneShipping'), action: cloneTravel },
|
||||||
{ name: t('travel.summary.CloneTravelAndEntries'), action: null },
|
{ name: t('travel.summary.CloneTravelAndEntries'), action: cloneTravelWithEntries },
|
||||||
{ name: t('travel.summary.AddEntry'), action: null },
|
{ name: t('travel.summary.AddEntry'), action: null },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,10 @@ const redirectToCreateView = (queryParams) => {
|
||||||
router.push({ name: 'TravelCreate', query: { travelData: queryParams } });
|
router.push({ name: 'TravelCreate', query: { travelData: queryParams } });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const redirectCreateEntryView = (travelData) => {
|
||||||
|
router.push({ name: 'EntryCreate', query: { travelFk: travelData.id } });
|
||||||
|
};
|
||||||
|
|
||||||
const viewSummary = (id) => {
|
const viewSummary = (id) => {
|
||||||
quasar.dialog({
|
quasar.dialog({
|
||||||
component: TravelSummaryDialog,
|
component: TravelSummaryDialog,
|
||||||
|
@ -103,7 +107,7 @@ onMounted(async () => {
|
||||||
/>
|
/>
|
||||||
<QBtn
|
<QBtn
|
||||||
:label="t('addEntry')"
|
:label="t('addEntry')"
|
||||||
@click.stop="viewSummary(row.id)"
|
@click.stop="redirectCreateEntryView(row)"
|
||||||
class="bg-vn-dark"
|
class="bg-vn-dark"
|
||||||
outline
|
outline
|
||||||
style="margin-top: 15px"
|
style="margin-top: 15px"
|
||||||
|
|
|
@ -11,7 +11,17 @@ export default {
|
||||||
redirect: { name: 'SupplierMain' },
|
redirect: { name: 'SupplierMain' },
|
||||||
menus: {
|
menus: {
|
||||||
main: ['SupplierList'],
|
main: ['SupplierList'],
|
||||||
card: [],
|
card: [
|
||||||
|
'SupplierBasicData',
|
||||||
|
'SupplierFiscalData',
|
||||||
|
'SupplierBillingData',
|
||||||
|
'SupplierLog',
|
||||||
|
'SupplierAccounts',
|
||||||
|
'SupplierContacts',
|
||||||
|
'SupplierAddresses',
|
||||||
|
'SupplierConsumption',
|
||||||
|
'SupplierAgencyTerm',
|
||||||
|
],
|
||||||
},
|
},
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
|
@ -55,6 +65,95 @@ export default {
|
||||||
component: () =>
|
component: () =>
|
||||||
import('src/pages/Supplier/Card/SupplierSummary.vue'),
|
import('src/pages/Supplier/Card/SupplierSummary.vue'),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: 'basic-data',
|
||||||
|
name: 'SupplierBasicData',
|
||||||
|
meta: {
|
||||||
|
title: 'basicData',
|
||||||
|
icon: 'vn:settings',
|
||||||
|
},
|
||||||
|
component: () =>
|
||||||
|
import('src/pages/Supplier/Card/SupplierBasicData.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'fiscal-data',
|
||||||
|
name: 'SupplierFiscalData',
|
||||||
|
meta: {
|
||||||
|
title: 'fiscalData',
|
||||||
|
icon: 'vn:dfiscales',
|
||||||
|
},
|
||||||
|
component: () =>
|
||||||
|
import('src/pages/Supplier/Card/SupplierFiscalData.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'billing-data',
|
||||||
|
name: 'SupplierBillingData',
|
||||||
|
meta: {
|
||||||
|
title: 'billingData',
|
||||||
|
icon: 'vn:payment',
|
||||||
|
},
|
||||||
|
component: () =>
|
||||||
|
import('src/pages/Supplier/Card/SupplierBillingData.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'log',
|
||||||
|
name: 'SupplierLog',
|
||||||
|
meta: {
|
||||||
|
title: 'log',
|
||||||
|
icon: 'vn:History',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Supplier/Card/SupplierLog.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'account',
|
||||||
|
name: 'SupplierAccounts',
|
||||||
|
meta: {
|
||||||
|
title: 'accounts',
|
||||||
|
icon: 'vn:account',
|
||||||
|
},
|
||||||
|
component: () =>
|
||||||
|
import('src/pages/Supplier/Card/SupplierAccounts.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'contact',
|
||||||
|
name: 'SupplierContacts',
|
||||||
|
meta: {
|
||||||
|
title: 'contacts',
|
||||||
|
icon: 'contact_phone',
|
||||||
|
},
|
||||||
|
component: () =>
|
||||||
|
import('src/pages/Supplier/Card/SupplierContacts.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'address',
|
||||||
|
name: 'SupplierAddresses',
|
||||||
|
meta: {
|
||||||
|
title: 'addresses',
|
||||||
|
icon: 'vn:delivery',
|
||||||
|
},
|
||||||
|
component: () =>
|
||||||
|
import('src/pages/Supplier/Card/SupplierAddresses.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'consumption',
|
||||||
|
name: 'SupplierConsumption',
|
||||||
|
meta: {
|
||||||
|
title: 'consumption',
|
||||||
|
icon: 'show_chart',
|
||||||
|
},
|
||||||
|
component: () =>
|
||||||
|
import('src/pages/Supplier/Card/SupplierConsumption.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'agency-term',
|
||||||
|
name: 'SupplierAgencyTerm',
|
||||||
|
meta: {
|
||||||
|
title: 'agencyTerm',
|
||||||
|
icon: 'vn:agency-term',
|
||||||
|
},
|
||||||
|
component: () =>
|
||||||
|
import('src/pages/Supplier/Card/SupplierAgencyTerm.vue'),
|
||||||
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
import { RouterView } from 'vue-router';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
path: '/entry',
|
||||||
|
name: 'Entry',
|
||||||
|
meta: {
|
||||||
|
title: 'entries',
|
||||||
|
icon: 'vn:entry',
|
||||||
|
},
|
||||||
|
component: RouterView,
|
||||||
|
redirect: { name: 'EntryMain' },
|
||||||
|
menus: {
|
||||||
|
main: ['EntryList'],
|
||||||
|
card: [],
|
||||||
|
},
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: '',
|
||||||
|
name: 'EntryMain',
|
||||||
|
component: () => import('src/pages/Entry/EntryMain.vue'),
|
||||||
|
redirect: { name: 'EntryList' },
|
||||||
|
children: [
|
||||||
|
{
|
||||||
|
path: 'list',
|
||||||
|
name: 'EntryList',
|
||||||
|
meta: {
|
||||||
|
title: 'list',
|
||||||
|
icon: 'view_list',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Entry/EntryList.vue'),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
path: 'create',
|
||||||
|
name: 'EntryCreate',
|
||||||
|
meta: {
|
||||||
|
title: 'create',
|
||||||
|
},
|
||||||
|
component: () => import('src/pages/Entry/EntryCreate.vue'),
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// name: 'EntryCard',
|
||||||
|
// path: ':id',
|
||||||
|
// component: () => import('src/pages/Entry/Card/EntryCard.vue'),
|
||||||
|
// redirect: { name: 'EntrySummary' },
|
||||||
|
// children: [
|
||||||
|
// {
|
||||||
|
// name: 'EntrySummary',
|
||||||
|
// path: 'summary',
|
||||||
|
// meta: {
|
||||||
|
// title: 'summary',
|
||||||
|
// icon: 'launch',
|
||||||
|
// },
|
||||||
|
// component: () =>
|
||||||
|
// import('src/pages/Entry/Card/EntrySummary.vue'),
|
||||||
|
// },
|
||||||
|
// ],
|
||||||
|
// },
|
||||||
|
],
|
||||||
|
};
|
|
@ -11,6 +11,7 @@ import Supplier from './Supplier';
|
||||||
import Travel from './travel';
|
import Travel from './travel';
|
||||||
import Order from './order';
|
import Order from './order';
|
||||||
import Department from './department';
|
import Department from './department';
|
||||||
|
import Entry from './entry';
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
Customer,
|
Customer,
|
||||||
|
@ -26,4 +27,5 @@ export default [
|
||||||
Order,
|
Order,
|
||||||
invoiceIn,
|
invoiceIn,
|
||||||
Department,
|
Department,
|
||||||
|
Entry,
|
||||||
];
|
];
|
||||||
|
|
|
@ -11,6 +11,7 @@ import travel from './modules/travel';
|
||||||
import department from './modules/department';
|
import department from './modules/department';
|
||||||
import shelving from 'src/router/modules/shelving';
|
import shelving from 'src/router/modules/shelving';
|
||||||
import order from 'src/router/modules/order';
|
import order from 'src/router/modules/order';
|
||||||
|
import entry from 'src/router/modules/entry';
|
||||||
|
|
||||||
const routes = [
|
const routes = [
|
||||||
{
|
{
|
||||||
|
@ -63,6 +64,7 @@ const routes = [
|
||||||
supplier,
|
supplier,
|
||||||
travel,
|
travel,
|
||||||
department,
|
department,
|
||||||
|
entry,
|
||||||
{
|
{
|
||||||
path: '/:catchAll(.*)*',
|
path: '/:catchAll(.*)*',
|
||||||
name: 'NotFound',
|
name: 'NotFound',
|
||||||
|
|
|
@ -19,6 +19,7 @@ export const useNavigationStore = defineStore('navigationStore', () => {
|
||||||
'supplier',
|
'supplier',
|
||||||
'travel',
|
'travel',
|
||||||
'invoiceIn',
|
'invoiceIn',
|
||||||
|
'entry',
|
||||||
];
|
];
|
||||||
const pinnedModules = ref([]);
|
const pinnedModules = ref([]);
|
||||||
const role = useRole();
|
const role = useRole();
|
||||||
|
|
Loading…
Reference in New Issue