refactor: refs #6802 replace 'salesPerson' terminology with 'team' across multiple locales and components

This commit is contained in:
Javi Gallego 2025-01-31 12:26:20 +01:00
parent 22ae08863b
commit 71a8e72f20
45 changed files with 228 additions and 600 deletions

View File

@ -328,7 +328,6 @@ en:
active: Is active
visible: Is visible
floramondo: Is floramondo
salesPersonFk: Buyer
categoryFk: Category
es:
@ -339,7 +338,6 @@ es:
active: Activo
visible: Visible
floramondo: Floramondo
salesPersonFk: Comprador
categoryFk: Categoría
Plant: Planta natural
Flower: Flor fresca

View File

@ -14,7 +14,7 @@ vi.mock('src/router/modules', () => ({
icon: 'vn:client',
},
menus: {
main: ['CustomerList', 'CustomerCreate'],
main: ['CustomerList'],
card: ['CustomerBasicData'],
},
children: [
@ -30,14 +30,6 @@ vi.mock('src/router/modules', () => ({
icon: 'view_list',
},
},
{
path: 'create',
name: 'CustomerCreate',
meta: {
title: 'createCustomer',
icon: 'vn:addperson',
},
},
],
},
],

View File

@ -97,7 +97,6 @@ globals:
file: File
selectFile: Select a file
copyClipboard: Copy on clipboard
salesPerson: SalesPerson
send: Send
code: Code
since: Since
@ -155,6 +154,7 @@ globals:
changeState: Change state
raid: 'Raid {daysInForward} days'
isVies: Vies
department: Department
pageTitles:
logIn: Login
addressEdit: Update address
@ -336,7 +336,6 @@ globals:
subtitle: Are you sure exit without saving?
params:
clientFk: Client id
salesPersonFk: Sales person
warehouseFk: Warehouse
provinceFk: Province
stateFk: State
@ -510,7 +509,6 @@ department:
departmentRemoved: Department removed
worker:
list:
department: Department
schedule: Schedule
newWorker: New worker
summary:
@ -736,7 +734,6 @@ components:
mine: For me
hasMinPrice: Minimum price
# LatestBuysFilter
salesPersonFk: Buyer
supplierFk: Supplier
from: From
to: To

View File

@ -97,7 +97,6 @@ globals:
file: Fichero
selectFile: Seleccione un fichero
copyClipboard: Copiar en portapapeles
salesPerson: Comercial
send: Enviar
code: Código
since: Desde
@ -155,6 +154,7 @@ globals:
changeState: Cambiar estado
raid: 'Redada {daysInForward} días'
isVies: Vies
department: Departamento
pageTitles:
logIn: Inicio de sesión
addressEdit: Modificar consignatario
@ -336,7 +336,6 @@ globals:
subtitle: ¿Seguro que quiere salir sin guardar?
params:
clientFk: Id cliente
salesPersonFk: Comercial
warehouseFk: Almacén
provinceFk: Provincia
stateFk: Estado
@ -452,8 +451,6 @@ ticket:
create:
address: Dirección
order:
field:
salesPersonFk: Comercial
form:
clientFk: Cliente
addressFk: Dirección
@ -482,7 +479,6 @@ department:
departmentRemoved: Departamento eliminado
worker:
list:
department: Departamento
schedule: Horario
newWorker: Nuevo trabajador
summary:
@ -707,7 +703,6 @@ components:
hasMinPrice: Precio mínimo
wareHouseFk: Almacén
# LatestBuysFilter
salesPersonFk: Comprador
supplierFk: Proveedor
visible: Visible
active: Activo

View File

@ -75,11 +75,11 @@ onMounted(async () => {
</template>
</VnLv>
<VnLv :label="t('claim.created')" :value="toDateHourMinSec(entity.created)" />
<VnLv :label="t('claim.commercial')">
<VnLv :label="t('globals.department')">
<template #value>
<VnUserLink
:name="entity.client?.salesPersonUser?.name"
:worker-id="entity.client?.salesPersonFk"
:name="entity.client?.department?.name"
:worker-id="entity.client?.departmentFk"
/>
</template>
</VnLv>

View File

@ -14,7 +14,7 @@ export default {
relation: 'client',
scope: {
include: [
{ relation: 'salesPersonUser' },
{ relation: 'department' },
{
relation: 'claimsRatio',
scope: {

View File

@ -246,7 +246,7 @@ function claimUrl(section) {
</QChip>
</template>
</VnLv>
<VnLv :label="t('globals.salesPerson')">
<VnLv :label="t('customer.summary.team')">
<template #value>
<VnUserLink
:name="claim.client?.salesPersonUser?.name"

View File

@ -8,7 +8,6 @@ import FormModel from 'components/FormModel.vue';
import VnRow from 'components/ui/VnRow.vue';
import VnInput from 'src/components/common/VnInput.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
import VnSelectWorker from 'src/components/common/VnSelectWorker.vue';
import { getDifferences, getUpdatedValues } from 'src/filters';
const route = useRoute();
@ -37,7 +36,7 @@ const exprBuilder = (param, value) => {
function onBeforeSave(formData, originalData) {
return getUpdatedValues(
Object.keys(getDifferences(formData, originalData)),
formData
formData,
);
}
</script>
@ -119,16 +118,11 @@ function onBeforeSave(formData, originalData) {
/>
</VnRow>
<VnRow>
<VnSelectWorker
:label="t('customer.summary.salesPerson')"
v-model="data.salesPersonFk"
:params="{
departmentCodes: ['VT', 'shopping'],
}"
:has-avatar="true"
:rules="validate('client.salesPersonFk')"
:expr-builder="exprBuilder"
emit-value
<VnSelect
:label="t('globals.department')"
v-model="data.departmentFk"
url="Departments"
:fields="['id', 'name']"
/>
<VnSelect
v-model="data.contactChannelFk"
@ -160,7 +154,7 @@ function onBeforeSave(formData, originalData) {
<QIcon name="info" class="cursor-pointer">
<QTooltip>{{
t(
'In case of a company succession, specify the grantor company'
'In case of a company succession, specify the grantor company',
)
}}</QTooltip>
</QIcon>

View File

@ -3,14 +3,14 @@ import { ref, computed } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import { dashIfEmpty, toCurrency, toDate } from 'src/filters';
import { toCurrency, toDate } from 'src/filters';
import useCardDescription from 'src/composables/useCardDescription';
import CardDescriptor from 'components/ui/CardDescriptor.vue';
import VnLv from 'src/components/ui/VnLv.vue';
import VnUserLink from 'src/components/ui/VnUserLink.vue';
import CustomerDescriptorMenu from './CustomerDescriptorMenu.vue';
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
const customerDebt = ref();
const customerCredit = ref();
@ -78,14 +78,10 @@ const debtWarning = computed(() => {
:value="toCurrency(entity.debt)"
:info="t('customer.summary.riskInfo')"
/>
<VnLv :label="t('customer.summary.salesPerson')">
<VnLv :label="t('globals.department')">
<template #value>
<VnUserLink
v-if="entity.salesPersonUser"
:name="entity.salesPersonUser.name"
:worker-id="entity.salesPersonFk"
/>
<span v-else>{{ dashIfEmpty(entity.salesPersonUser) }}</span>
<span class="link" v-text="entity.department?.name" />
<DepartmentDescriptorProxy :id="entity.department?.id" />
</template>
</VnLv>
<VnLv

View File

@ -2,7 +2,6 @@
import { computed, ref } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import VnUserLink from 'src/components/ui/VnUserLink.vue';
import { toCurrency, toPercentage, toDate, dashOrCurrency } from 'src/filters';
import CardSummary from 'components/ui/CardSummary.vue';
@ -13,6 +12,8 @@ import CustomerSummaryTable from 'src/pages/Customer/components/CustomerSummaryT
import VnTitle from 'src/components/common/VnTitle.vue';
import VnRow from 'src/components/ui/VnRow.vue';
import CustomerDescriptorMenu from './CustomerDescriptorMenu.vue';
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
const route = useRoute();
const { t } = useI18n();
const grafanaUrl = 'https://grafana.verdnatura.es';
@ -106,16 +107,12 @@ const sumRisk = ({ clientRisks }) => {
{{ t('globals.params.email') }}
<VnLinkMail email="entity.email"></VnLinkMail> </template
></VnLv>
<VnLv
:label="t('customer.summary.salesPerson')"
:value="entity?.salesPersonUser?.name"
>
<VnLv :label="t('globals.department')">
<template #value>
<VnUserLink
:name="entity.salesPersonUser?.name"
:worker-id="entity.salesPersonFk"
/> </template
></VnLv>
<span class="link" v-text="entity.department?.name" />
<DepartmentDescriptorProxy :id="entity?.department?.id" />
</template>
</VnLv>
<VnLv
:label="t('customer.summary.contactChannel')"
:value="entity?.contactChannel?.name"

View File

@ -1,146 +0,0 @@
<script setup>
import { reactive, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import FetchData from 'components/FetchData.vue';
import FormModel from 'components/FormModel.vue';
import VnRow from 'components/ui/VnRow.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
import VnLocation from 'src/components/common/VnLocation.vue';
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
const { t } = useI18n();
const initialData = reactive({
active: true,
isEqualizated: false,
});
const workersOptions = ref([]);
const businessTypesOptions = ref([]);
function handleLocation(data, location) {
const { town, code, provinceFk, countryFk } = location ?? {};
data.postcode = code;
data.city = town;
data.provinceFk = provinceFk;
data.countryFk = countryFk;
}
</script>
<template>
<FetchData
@on-fetch="(data) => (workersOptions = data)"
auto-load
url="Workers/search?departmentCodes"
/>
<FetchData
@on-fetch="(data) => (businessTypesOptions = data)"
auto-load
url="BusinessTypes"
/>
<QPage>
<VnSubToolbar />
<FormModel
:form-initial-data="initialData"
model="client"
url-create="Clients/createWithUser"
>
<template #form="{ data, validate }">
<VnRow>
<QInput :label="t('Comercial name')" v-model="data.name" />
<VnSelect
:label="t('Salesperson')"
:options="workersOptions"
hide-selected
option-label="name"
option-value="id"
v-model="data.salesPersonFk"
/>
</VnRow>
<VnRow>
<VnSelect
:label="t('Business type')"
:options="businessTypesOptions"
hide-selected
option-label="description"
option-value="code"
v-model="data.businessTypeFk"
/>
<QInput v-model="data.fi" :label="t('Tax number')" />
</VnRow>
<VnRow>
<QInput
:label="t('Business name')"
:rules="validate('client.socialName')"
v-model="data.socialName"
/>
</VnRow>
<VnRow>
<QInput
:label="t('Street')"
:rules="validate('client.street')"
v-model="data.street"
/>
</VnRow>
<VnRow>
<VnLocation
:rules="validate('Worker.postcode')"
:acls="[{ model: 'Town', props: '*', accessType: 'WRITE' }]"
v-model="data.location"
@update:model-value="(location) => handleLocation(data, location)"
>
</VnLocation>
</VnRow>
<VnRow>
<QInput v-model="data.userName" :label="t('Web user')" />
<QInput
:label="t('Email')"
:rules="validate('client.email')"
clearable
type="email"
v-model="data.email"
>
<template #append>
<QIcon name="info" class="cursor-info">
<QTooltip max-width="400px">{{
t('customer.basicData.youCanSaveMultipleEmails')
}}</QTooltip>
</QIcon>
</template>
</QInput>
</VnRow>
<QCheckbox
:label="t('Is equalizated')"
v-model="initialData.isEqualizated"
/>
</template>
</FormModel>
</QPage>
</template>
<style lang="scss" scoped>
.card {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
grid-gap: 20px;
}
</style>
<i18n>
es:
Comercial name: Nombre comercial
Salesperson: Comercial
Business type: Tipo de negocio
Tax number: NIF / CIF
Business name: Razón social
Street: Dirección fiscal
Postcode: Código postal
City: Población
Province: Provincia
Country: País
Web user: Usuario web
Email: Email
Is equalizated: Recargo de equivalencia
</i18n>

View File

@ -1,10 +1,8 @@
<script setup>
import { useI18n } from 'vue-i18n';
import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
import VnSelect from 'components/common/VnSelect.vue';
import VnInput from 'src/components/common/VnInput.vue';
import VnSelectWorker from 'src/components/common/VnSelectWorker.vue';
const { t } = useI18n();
defineProps({
@ -70,22 +68,15 @@ const exprBuilder = (param, value) => {
</QItem>
<QItem class="q-mb-sm">
<QItemSection>
<VnSelectWorker
:label="t('Salesperson')"
v-model="params.salesPersonFk"
:params="{
departmentCodes: ['VT'],
}"
:expr-builder="exprBuilder"
@update:model-value="searchFn()"
emit-value
map-options
use-input
hide-selected
dense
<VnSelect
outlined
dense
rounded
:input-debounce="0"
:label="t('globals.params.departmentFk')"
v-model="params.departmentFk"
option-value="id"
option-label="name"
url="Departments"
/>
</QItemSection>
</QItem>
@ -168,7 +159,6 @@ en:
params:
search: Contains
fi: FI
salesPersonFk: Salesperson
provinceFk: Province
isActive: Is active
city: City
@ -195,7 +185,6 @@ es:
sageTaxTypeFk: Tipo de impuesto Sage
sageTransactionTypeFk: Tipo de impuesto Sage
payMethodFk: Forma de pago
salesPersonFk: Comercial
provinceFk: Provincia
city: Ciudad
phone: Teléfono
@ -205,7 +194,6 @@ es:
name: Nombre
postcode: CP
FI: NIF
Salesperson: Comercial
Province: Provincia
City: Ciudad
Phone: Teléfono

View File

@ -10,7 +10,6 @@ import CustomerFilter from './CustomerFilter.vue';
import VnTable from 'components/VnTable/VnTable.vue';
import VnLocation from 'src/components/common/VnLocation.vue';
import VnLinkPhone from 'src/components/ui/VnLinkPhone.vue';
import VnSelectWorker from 'src/components/common/VnSelectWorker.vue';
import VnSection from 'src/components/common/VnSection.vue';
const { t } = useI18n();
@ -73,20 +72,17 @@ const columns = computed(() => [
},
{
align: 'left',
name: 'salesPersonFk',
label: t('customer.extendedList.tableVisibleColumns.salesPersonFk'),
name: 'departmentFk',
label: t('customer.summary.team'),
component: 'select',
attrs: {
url: 'Workers/activeWithInheritedRole',
fields: ['id', 'name'],
where: { role: 'salesPerson' },
optionFilter: 'firstName',
url: 'Departments',
},
create: false,
create: true,
columnField: {
component: null,
},
format: (row, dashIfEmpty) => dashIfEmpty(row.salesPerson),
format: (row, dashIfEmpty) => dashIfEmpty(row.departmentName),
},
{
align: 'left',
@ -145,6 +141,9 @@ const columns = computed(() => [
inWhere: true,
},
columnClass: 'expand',
attrs: {
uppercase: true,
},
},
{
align: 'left',
@ -434,36 +433,6 @@ function handleLocation(data, location) {
redirect="customer"
>
<template #more-create-dialog="{ data }">
<VnSelectWorker
:label="t('customer.summary.salesPerson')"
v-model="data.salesPersonFk"
:params="{
departmentCodes: ['VT', 'shopping'],
}"
:has-avatar="true"
:id-value="data.salesPersonFk"
emit-value
auto-load
>
<template #prepend>
<VnAvatar
:worker-id="data.salesPersonFk"
color="primary"
:title="title"
/>
</template>
<template #option="scope">
<QItem v-bind="scope.itemProps">
<QItemSection>
<QItemLabel>{{ scope.opt?.name }}</QItemLabel>
<QItemLabel caption
>{{ scope.opt?.nickname }},
{{ scope.opt?.code }}</QItemLabel
>
</QItemSection>
</QItem>
</template>
</VnSelectWorker>
<VnLocation
:acls="[{ model: 'Province', props: '*', accessType: 'WRITE' }]"
v-model="data.location"

View File

@ -37,23 +37,6 @@ const columns = computed(() => [
name: 'isWorker',
label: t('Is worker'),
},
{
align: 'left',
name: 'salesPersonFk',
label: t('Salesperson'),
columnFilter: {
component: 'select',
attrs: {
url: 'Workers/activeWithInheritedRole',
fields: ['id', 'name'],
where: { role: 'salesPerson' },
useLike: false,
optionValue: 'id',
optionLabel: 'name',
optionFilter: 'firstName',
},
},
},
{
align: 'left',
name: 'departmentFk',
@ -167,7 +150,6 @@ const viewAddObservation = (rowsSelected) => {
function exprBuilder(param, value) {
switch (param) {
case 'salesPersonFk':
case 'creditInsurance':
case 'countryFk':
return { [`c.${param}`]: value };
@ -241,12 +223,6 @@ function exprBuilder(param, value) {
<template #column-observation="{ row }">
<VnInput type="textarea" v-model="row.observation" readonly dense rows="2" />
</template>
<template #column-salesPersonFk="{ row }">
<span class="link" @click.stop>
{{ row.salesPersonName }}
<WorkerDescriptorProxy :id="row.salesPersonFk" />
</span>
</template>
<template #column-departmentFk="{ row }">
<span class="link" @click.stop>
{{ row.departmentName }}
@ -265,8 +241,6 @@ function exprBuilder(param, value) {
es:
Add observation: Añadir observación
Client: Cliente
Is worker: Es trabajador
Salesperson: Comercial
Department: Departamento
Country: País
P. Method: F. Pago

View File

@ -15,19 +15,12 @@ const props = defineProps({
},
});
const salespersons = ref();
const countries = ref();
const authors = ref();
const departments = ref();
</script>
<template>
<FetchData
:filter="{ where: { role: 'salesPerson' } }"
@on-fetch="(data) => (salespersons = data)"
auto-load
url="Workers/activeWithInheritedRole"
/>
<FetchData @on-fetch="(data) => (countries = data)" auto-load url="Countries" />
<FetchData
@on-fetch="(data) => (authors = data)"
@ -62,29 +55,6 @@ const departments = ref();
@update:model-value="searchFn()"
/>
</QItem>
<QItem class="q-mb-sm">
<QItemSection v-if="salespersons">
<VnSelect
:input-debounce="0"
:label="t('Salesperson')"
:options="salespersons"
dense
emit-value
hide-selected
map-options
option-label="name"
option-value="id"
outlined
rounded
use-input
v-model="params.salesPersonFk"
@update:model-value="searchFn()"
/>
</QItemSection>
<QItemSection v-else>
<QSkeleton class="full-width" type="QInput" />
</QItemSection>
</QItem>
<QItem class="q-mb-sm">
<QItemSection v-if="departments">
<VnSelect
@ -219,7 +189,6 @@ const departments = ref();
en:
params:
clientFk: Client
salesPersonFk: Salesperson
countryFk: Country
paymentMethod: P. Method
balance: Balance D.
@ -230,7 +199,6 @@ en:
es:
params:
clientFk: Cliente
salesPersonFk: Comercial
countryFk: País
paymentMethod: F. Pago
balance: Saldo V.
@ -239,7 +207,6 @@ es:
credit: Crédito A.
defaulterSinced: Desde
Client: Cliente
Salesperson: Comercial
Departments: Departamentos
Country: País
P. Method: F. Pago

View File

@ -69,17 +69,16 @@ const columns = computed(() => [
},
{
align: 'left',
label: t('customer.extendedList.tableVisibleColumns.salesPersonFk'),
name: 'salesPersonFk',
name: 'departmentFk',
label: t('customer.summary.team'),
component: 'select',
attrs: {
url: 'Workers/activeWithInheritedRole',
fields: ['id', 'name'],
where: { role: 'salesPerson' },
optionFilter: 'firstName',
useLike: false,
url: 'Departments',
},
visible: false,
columnField: {
component: null,
},
format: (row, dashIfEmpty) => dashIfEmpty(row.departmentName),
},
]);
</script>
@ -96,7 +95,7 @@ const columns = computed(() => [
</VnSubToolbar>
<VnTable
:data-key="dataKey"
url="Clients"
url="Clients/filter"
:table="{
'row-key': 'id',
selection: 'multiple',
@ -127,7 +126,6 @@ const columns = computed(() => [
es:
Identifier: Identificador
Social name: Razón social
Salesperson: Comercial
Phone: Teléfono
City: Población
Email: Email

View File

@ -20,7 +20,7 @@ customer:
name: Name
contact: Contact
mobile: Mobile
salesPerson: Sales person
team: Team
contactChannel: Contact channel
socialName: Social name
fiscalId: Fiscal ID
@ -78,7 +78,6 @@ customer:
id: Identifier
socialName: Social name
fi: Tax number
salesPersonFk: Salesperson
creditInsurance: Credit insurance
phone: Phone
street: Street

View File

@ -20,7 +20,7 @@ customer:
name: Nombre
contact: Contacto
mobile: Móvil
salesPerson: Comercial
team: Equipo
contactChannel: Canal de contacto
socialName: Razón social
fiscalId: NIF/CIF
@ -78,7 +78,6 @@ customer:
id: Identificador
socialName: Razón social
fi: NIF / CIF
salesPersonFk: Comercial
creditInsurance: Crédito asegurado
phone: Teléfono
street: Dirección fiscal

View File

@ -25,9 +25,8 @@ const tagValues = ref([]);
<template>
<FetchData
url="TicketRequests/getItemTypeWorker"
limit="30"
auto-load
:filter="{ fields: ['id', 'nickname'], order: 'nickname ASC', limit: 30 }"
:filter="{ fields: ['id', 'nickname'], order: 'nickname ASC' }"
@on-fetch="(data) => (itemTypeWorkersOptions = data)"
/>
<ItemsFilterPanel :data-key="dataKey" :custom-tags="['tags']">
@ -35,8 +34,8 @@ const tagValues = ref([]);
<QItem class="q-my-md">
<QItemSection>
<VnSelect
:label="t('components.itemsFilterPanel.salesPersonFk')"
v-model="params.salesPersonFk"
:label="t('components.itemsFilterPanel.buyerFk')"
v-model="params.buyerFk"
:options="itemTypeWorkersOptions"
option-value="id"
option-label="nickname"

View File

@ -110,18 +110,16 @@ const columns = computed(() => [
},
{
align: 'left',
label: t('customer.extendedList.tableVisibleColumns.salesPersonFk'),
name: 'workerName',
name: 'departmentFk',
label: t('customer.summary.team'),
component: 'select',
attrs: {
url: 'Workers/activeWithInheritedRole',
fields: ['id', 'name'],
where: { role: 'salesPerson' },
url: 'Departments',
},
columnField: {
component: null,
},
format: (row, dashIfEmpty) => dashIfEmpty(row.workerName),
format: (row, dashIfEmpty) => dashIfEmpty(row.departmentName),
},
]);
@ -142,7 +140,7 @@ const downloadCSV = async () => {
await invoiceOutGlobalStore.getNegativeBasesCsv(
userParams.from,
userParams.to,
filterParams
filterParams,
);
};
</script>

View File

@ -31,7 +31,7 @@ function exprBuilder(param, value) {
switch (param) {
case 'clientFk':
return { [`c.id`]: value };
case 'salesPersonFk':
case 'departmentFk':
return { [`c.${param}`]: value };
}
}
@ -62,25 +62,17 @@ const columns = computed(() => [
columnFilter: false,
},
{
label: t('salesClientsTable.salesPerson'),
name: 'salesPersonFk',
field: 'salesPerson',
align: 'left',
name: 'departmentFk',
label: t('customer.summary.team'),
component: 'select',
attrs: {
url: 'Departments',
},
columnField: {
component: null,
},
optionFilter: 'firstName',
columnFilter: {
component: 'select',
attrs: {
url: 'Workers/activeWithInheritedRole',
fields: ['id', 'name'],
sortBy: 'nickname ASC',
where: { role: 'salesPerson' },
useLike: false,
},
},
columnClass: 'no-padding',
format: (row, dashIfEmpty) => dashIfEmpty(row.departmentName),
},
{
label: t('salesClientsTable.client'),
@ -128,9 +120,9 @@ const columns = computed(() => [
<VnInputDate v-model="to" :label="$t('globals.to')" dense />
</VnRow>
</template>
<template #column-salesPersonFk="{ row }">
<span class="link" :title="row.salesPerson" v-text="row.salesPerson" />
<WorkerDescriptorProxy :id="row.salesPersonFk" dense />
<template #column-departmentFk="{ row }">
<span class="link" :title="row.department" v-text="row.department" />
<WorkerDescriptorProxy :id="row.departmentFk" dense />
</template>
<template #column-clientFk="{ row }">
<span class="link" :title="row.clientName" v-text="row.clientName" />

View File

@ -1,9 +1,9 @@
<script setup>
import { ref, computed } from 'vue';
import { useI18n } from 'vue-i18n';
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
import CustomerDescriptorProxy from 'src/pages/Customer/Card/CustomerDescriptorProxy.vue';
import VnTable from 'components/VnTable/VnTable.vue';
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
import { toDateFormat, toDateTimeFormat } from 'src/filters/date.js';
import { toCurrency } from 'src/filters';
@ -20,8 +20,8 @@ function exprBuilder(param, value) {
switch (param) {
case 'clientFk':
return { [`c.id`]: value };
case 'salesPersonFk':
return { [`c.salesPersonFk`]: value };
case 'departmentFk':
return { [`c.departmentFk`]: value };
}
}
@ -63,20 +63,18 @@ const columns = computed(() => [
columnFilter: false,
},
{
label: t('salesClientsTable.salesPerson'),
name: 'salesPersonFk',
align: 'left',
optionFilter: 'firstName',
columnFilter: {
name: 'departmentFk',
label: t('customer.summary.team'),
component: 'select',
attrs: {
url: 'Workers/activeWithInheritedRole',
fields: ['id', 'name'],
sortBy: 'nickname ASC',
where: { role: 'salesPerson' },
useLike: false,
url: 'Departments',
},
create: true,
columnField: {
component: null,
},
format: (row, dashIfEmpty) => dashIfEmpty(row.departmentName),
},
{
label: t('salesOrdersTable.import'),
@ -157,7 +155,7 @@ const openTab = (id) =>
openConfirmationModal(
$t('globals.deleteConfirmTitle'),
$t('salesOrdersTable.deleteConfirmMessage'),
removeOrders
removeOrders,
)
"
>
@ -184,11 +182,10 @@ const openTab = (id) =>
<CustomerDescriptorProxy :id="row.clientFk" />
</QTd>
</template>
<template #column-salesPersonFk="{ row }">
<template #column-departmentFk="{ row }">
<QTd @click.stop>
<span class="link" v-text="row.salesPerson" />
<WorkerDescriptorProxy :id="row.salesPersonFk" dense />
<span class="link" v-text="row.departmentName" />
<DepartmentDescriptorProxy :id="row.departmentFk" dense />
</QTd>
</template>
</VnTable>

View File

@ -9,7 +9,6 @@ import VnInput from 'src/components/common/VnInput.vue';
import VnInputNumber from 'src/components/common/VnInputNumber.vue';
import FetchData from 'src/components/FetchData.vue';
import { dateRange } from 'src/filters';
import VnSelectWorker from 'src/components/common/VnSelectWorker.vue';
defineProps({ dataKey: { type: String, required: true } });
const { t, te } = useI18n();
@ -113,16 +112,16 @@ const getLocale = (label) => {
</QItem>
<QItem>
<QItemSection>
<VnSelectWorker
<VnSelect
outlined
dense
rounded
:label="t('globals.params.salesPersonFk')"
v-model="params.salesPersonFk"
:params="{ departmentCodes: ['VT'] }"
:no-one="true"
>
</VnSelectWorker>
:label="t('globals.params.departmentFk')"
v-model="params.departmentFk"
option-value="id"
option-label="name"
url="Departments"
/>
</QItemSection>
</QItem>
<QItem>

View File

@ -2,7 +2,7 @@
import { ref, computed, onMounted } from 'vue';
import { useI18n } from 'vue-i18n';
import FetchData from 'components/FetchData.vue';
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
import CustomerDescriptorProxy from 'src/pages/Customer/Card/CustomerDescriptorProxy.vue';
import TicketDescriptorProxy from 'src/pages/Ticket/Card/TicketDescriptorProxy.vue';
import InvoiceOutDescriptorProxy from 'src/pages/InvoiceOut/Card/InvoiceOutDescriptorProxy.vue';
@ -48,8 +48,8 @@ function exprBuilder(param, value) {
switch (param) {
case 'stateFk':
return { 'ts.stateFk': value };
case 'salesPersonFk':
return { 'c.salesPersonFk': !value ? null : value };
case 'departmentFk':
return { 'c.departmentFk': !value ? null : value };
case 'provinceFk':
return { 'a.provinceFk': value };
case 'theoreticalHour':
@ -106,19 +106,18 @@ const columns = computed(() => [
},
},
{
label: t('salesClientsTable.salesPerson'),
name: 'salesPersonFk',
field: 'userName',
align: 'left',
columnFilter: {
name: 'departmentFk',
label: t('customer.summary.team'),
component: 'select',
attrs: {
url: 'Workers/search?departmentCodes=["VT"]',
fields: ['id', 'name', 'nickname', 'code'],
sortBy: 'nickname ASC',
optionLabel: 'nickname',
url: 'Departments',
},
create: true,
columnField: {
component: null,
},
format: (row, dashIfEmpty) => dashIfEmpty(row.departmentName),
},
{
label: t('salesClientsTable.date'),
@ -435,10 +434,10 @@ const openTab = (id) =>
<CustomerDescriptorProxy :id="row.clientFk" />
</div>
</template>
<template #column-salesPersonFk="{ row }">
<div @click.stop :title="row.userName">
<span class="link" v-text="dashIfEmpty(row.userName)" />
<WorkerDescriptorProxy :id="row.salesPersonFk" />
<template #column-departmentFk="{ row }">
<div @click.stop :title="row.departmentName">
<span class="link" v-text="dashIfEmpty(row.departmentName)" />
<DepartmentDescriptorProxy :id="row.departmentFk" />
</div>
</template>
<template #column-shippedDate="{ row }">

View File

@ -7,7 +7,6 @@ salesClientsTable:
to: To
date: Date
hour: Hour
salesPerson: Salesperson
client: Client
salesOrdersTable:
delete: Delete

View File

@ -7,7 +7,6 @@ salesClientsTable:
to: Hasta
date: Fecha
hour: Hora
salesPerson: Comercial
client: Cliente
salesOrdersTable:
delete: Eliminar

View File

@ -65,17 +65,7 @@ const orderFilter = {
{
relation: 'client',
scope: {
fields: [
'salesPersonFk',
'name',
'isActive',
'isFreezed',
'isTaxDataChecked',
],
include: {
relation: 'salesPersonUser',
scope: { fields: ['id', 'name'] },
},
fields: ['name', 'isActive', 'isFreezed', 'isTaxDataChecked'],
},
},
],
@ -169,7 +159,7 @@ const onClientChange = async (clientId) => {
!data.isConfirmed &&
agencyList?.length &&
agencyList.some(
(agency) => agency.agencyModeFk === data.agency_id
(agency) => agency.agencyModeFk === data.agency_id,
)
? data.agencyModeFk
: null

View File

@ -9,7 +9,7 @@ import useCardDescription from 'src/composables/useCardDescription';
import CardDescriptor from 'components/ui/CardDescriptor.vue';
import VnLv from 'src/components/ui/VnLv.vue';
import FetchData from 'components/FetchData.vue';
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
const DEFAULT_ITEMS = 0;
@ -43,14 +43,14 @@ const filter = {
relation: 'client',
scope: {
fields: [
'salesPersonFk',
'departmentFk',
'name',
'isActive',
'isFreezed',
'isTaxDataChecked',
],
include: {
relation: 'salesPersonUser',
relation: 'department',
scope: { fields: ['id', 'name'] },
},
},
@ -98,11 +98,11 @@ const total = ref(0);
:label="t('globals.state')"
:value="getConfirmationValue(entity.isConfirmed)"
/>
<VnLv :label="t('order.field.salesPersonFk')">
<VnLv :label="t('customer.summary.team')">
<template #value>
<span class="link">
{{ entity?.client?.salesPersonUser?.name || '-' }}
<WorkerDescriptorProxy :id="entity?.client?.salesPersonFk" />
{{ entity?.client?.department?.name || '-' }}
<DepartmentDescriptorProxy :id="entity?.client?.departmentFk" />
</span>
</template>
</VnLv>

View File

@ -6,7 +6,6 @@ import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
import VnSelect from 'components/common/VnSelect.vue';
import VnInputDate from 'components/common/VnInputDate.vue';
import VnInput from 'components/common/VnInput.vue';
import VnSelectWorker from 'src/components/common/VnSelectWorker.vue';
const { t } = useI18n();
const props = defineProps({
@ -62,15 +61,15 @@ const sourceList = ref([]);
outlined
rounded
/>
<VnSelectWorker
:label="t('globals.salesPerson')"
v-model="params.workerFk"
:params="{
departmentCodes: ['VT'],
}"
dense
<VnSelect
outlined
dense
rounded
:label="t('globals.params.departmentFk')"
v-model="params.departmentFk"
option-value="id"
option-label="name"
url="Departments"
/>
<VnInputDate
v-model="params.from"
@ -125,7 +124,6 @@ en:
search: Includes
clientFk: Client
agencyModeFk: Agency
salesPersonFk: Sales Person
from: From
to: To
orderFk: Order
@ -136,7 +134,6 @@ en:
showEmpty: Show Empty
customerId: Customer ID
agency: Agency
salesPerson: Sales Person
fromLanded: From Landed
toLanded: To Landed
orderId: Order ID
@ -149,7 +146,6 @@ es:
search: Búsqueda
clientFk: Cliente
agencyModeFk: Agencia
salesPersonFk: Comercial
from: Desde
to: Hasta
orderFk: Cesta
@ -160,7 +156,6 @@ es:
showEmpty: Mostrar vacías
customerId: ID Cliente
agency: Agencia
salesPerson: Comercial
fromLanded: Desde F. entrega
toLanded: Hasta F. entrega
orderId: ID Cesta

View File

@ -10,12 +10,12 @@ import axios from 'axios';
import OrderSummary from 'pages/Order/Card/OrderSummary.vue';
import OrderFilter from './Card/OrderFilter.vue';
import CustomerDescriptorProxy from '../Customer/Card/CustomerDescriptorProxy.vue';
import WorkerDescriptorProxy from '../Worker/Card/WorkerDescriptorProxy.vue';
import VnTable from 'src/components/VnTable/VnTable.vue';
import VnInputDate from 'src/components/common/VnInputDate.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
import VnSection from 'src/components/common/VnSection.vue';
import DepartmentDescriptorProxy from '../Department/Card/DepartmentDescriptorProxy.vue';
const { t } = useI18n();
const { viewSummary } = useSummaryDialog();
@ -53,22 +53,17 @@ const columns = computed(() => [
},
{
align: 'left',
name: 'salesPersonFk',
label: t('module.salesPerson'),
columnFilter: {
name: 'departmentFk',
label: t('customer.summary.team'),
component: 'select',
inWhere: true,
attrs: {
url: 'Workers/activeWithInheritedRole',
fields: ['id', 'name'],
where: { role: 'salesPerson' },
useLike: false,
optionValue: 'id',
optionLabel: 'name',
optionFilter: 'firstName',
url: 'Departments',
},
create: true,
columnField: {
component: null,
},
format: (row) => row?.name,
format: (row, dashIfEmpty) => dashIfEmpty(row.departmentName),
},
{
align: 'left',
@ -153,7 +148,7 @@ onMounted(() => {
async function fetchClientAddress(id, formData = {}) {
const { data } = await axios.get(
`Clients/${id}/addresses?filter[order]=isActive DESC`
`Clients/${id}/addresses?filter[order]=isActive DESC`,
);
addressOptions.value = data;
formData.addressId = data.defaultAddressFk;
@ -220,10 +215,10 @@ const getDateColor = (date) => {
<CustomerDescriptorProxy :id="row?.clientFk" />
</span>
</template>
<template #column-salesPersonFk="{ row }">
<template #column-departmentFk="{ row }">
<span class="link" @click.stop>
{{ row?.name }}
<WorkerDescriptorProxy :id="row?.salesPersonFk" />
{{ row?.departmentName }}
<DepartmentDescriptorProxy :id="row?.departmentFk" />
</span>
</template>
<template #column-landed="{ row }">

View File

@ -8,7 +8,6 @@ module:
hour: Hour
agency: Agency
total: Total
salesPerson: Sales Person
address: Address
cerateOrder: Create order
lines:
@ -22,8 +21,6 @@ lines:
params:
tagGroups: Tags
order:
field:
salesPersonFk: Sales Person
form:
clientFk: Client
addressFk: Address

View File

@ -8,7 +8,6 @@ module:
hour: Hora
agency: Agencia
total: Total
salesPerson: Comercial
address: Dirección
cerateOrder: Crear cesta
lines:
@ -22,8 +21,6 @@ lines:
params:
tagGroups: Tags
order:
field:
salesPersonFk: Comercial
form:
clientFk: Cliente
addressFk: Dirección

View File

@ -29,7 +29,6 @@ const ticketFilter = {
relation: 'client',
scope: {
fields: [
'salesPersonFk',
'name',
'isActive',
'isFreezed',
@ -40,10 +39,6 @@ const ticketFilter = {
'mobile',
'hasElectronicInvoice',
],
include: {
relation: 'salesPersonUser',
scope: { fields: ['id', 'name'] },
},
},
},
{ relation: 'invoiceOut' },
@ -80,7 +75,7 @@ const getPriceDifference = async () => {
};
const { data } = await axios.post(
`tickets/${formData.value.id}/priceDifference`,
params
params,
);
formData.value.sale = data;
};
@ -107,7 +102,7 @@ const submit = async () => {
const { data } = await axios.post(
`tickets/${formData.value.id}/componentUpdate`,
params
params,
);
if (!data) return;
@ -134,7 +129,7 @@ const onNextStep = async () => {
openConfirmationModal(
t('basicData.negativesConfirmTitle'),
t('basicData.negativesConfirmMessage'),
submitWithNegatives
submitWithNegatives,
);
else submit();
}

View File

@ -3,11 +3,12 @@ import { ref, computed } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import CustomerDescriptorProxy from 'pages/Customer/Card/CustomerDescriptorProxy.vue';
import DepartmentDescriptorProxy from 'pages/Department/Card/DepartmentDescriptorProxy.vue';
import CardDescriptor from 'components/ui/CardDescriptor.vue';
import TicketDescriptorMenu from './TicketDescriptorMenu.vue';
import VnLv from 'src/components/ui/VnLv.vue';
import useCardDescription from 'src/composables/useCardDescription';
import VnUserLink from 'src/components/ui/VnUserLink.vue';
import { toDateTimeFormat } from 'src/filters/date';
const $props = defineProps({
@ -43,7 +44,7 @@ const filter = {
fields: [
'id',
'name',
'salesPersonFk',
'departmentFk',
'phone',
'mobile',
'email',
@ -59,7 +60,7 @@ const filter = {
fields: ['id', 'lang'],
},
},
{ relation: 'salesPersonUser' },
{ relation: 'department' },
],
},
},
@ -147,12 +148,12 @@ const setData = (entity) => {
</QBadge>
</template>
</VnLv>
<VnLv :label="t('globals.salesPerson')">
<VnLv :label="t('customer.summary.team')">
<template #value>
<VnUserLink
:name="entity.client?.salesPersonUser?.name"
:worker-id="entity.client?.salesPersonFk"
/>
<span class="link">
{{ entity?.client?.department?.name || '-' }}
<DepartmentDescriptorProxy :id="entity?.client?.departmentFk" />
</span>
</template>
</VnLv>
<VnLv

View File

@ -56,7 +56,7 @@ const canProceed = ref();
watch(
() => route.params.id,
() => tableRef.value.reload()
() => tableRef.value.reload(),
);
const columns = computed(() => [
@ -199,7 +199,7 @@ const changeQuantity = async (sale) => {
await updateQuantity(sale);
} catch (e) {
const { quantity } = tableRef.value.CrudModelRef.originalData.find(
(s) => s.id === sale.id
(s) => s.id === sale.id,
);
sale.quantity = quantity;
throw e;
@ -261,7 +261,7 @@ const getUsesMana = async () => {
};
const getMana = async () => {
const { data } = await axios.get(`Tickets/${route.params.id}/getSalesPersonMana`);
const { data } = await axios.get(`Tickets/${route.params.id}/departmentMana`);
mana.value = data;
await getUsesMana();
};
@ -503,7 +503,7 @@ async function isSalePrepared(item) {
componentProps: {
title: t('Item prepared'),
message: t(
'This item is already prepared. Do you want to continue?'
'This item is already prepared. Do you want to continue?',
),
data: item,
},
@ -525,7 +525,7 @@ watch(
if (newItemFk) {
updateItem(newRow.value);
}
}
},
);
</script>
@ -595,7 +595,7 @@ watch(
openConfirmationModal(
t('Continue anyway?'),
t('You are going to delete lines of the ticket'),
removeSales
removeSales,
)
"
>

View File

@ -13,9 +13,9 @@ import VnLinkPhone from 'src/components/ui/VnLinkPhone.vue';
import { getUrl } from 'src/composables/getUrl';
import useNotify from 'src/composables/useNotify.js';
import { useArrayData } from 'composables/useArrayData';
import VnUserLink from 'src/components/ui/VnUserLink.vue';
import VnTitle from 'src/components/common/VnTitle.vue';
import ItemDescriptorProxy from 'src/pages/Item/Card/ItemDescriptorProxy.vue';
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
import ZoneDescriptorProxy from 'src/pages/Zone/Card/ZoneDescriptorProxy.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
import VnToSummary from 'src/components/ui/VnToSummary.vue';
@ -142,12 +142,14 @@ onMounted(async () => {
</QBadge>
</template>
</VnLv>
<VnLv :label="t('globals.salesPerson')">
<VnLv :label="t('customer.summary.team')">
<template #value>
<VnUserLink
:name="entity.client?.salesPersonUser?.name"
:worker-id="entity.client?.salesPersonFk"
<span class="link">
{{ entity?.client?.department?.name || '-' }}
<DepartmentDescriptorProxy
:id="entity?.client?.departmentFk"
/>
</span>
</template>
</VnLv>
<VnLv :label="t('globals.agency')" :value="entity.agencyMode?.name" />

View File

@ -82,15 +82,15 @@ const getGroupedStates = (data) => {
</QItem>
<QItem>
<QItemSection>
<VnSelectWorker
:label="t('globals.salesPerson')"
v-model="params.salesPersonFk"
:params="{
departmentCodes: ['VT'],
}"
dense
<VnSelect
outlined
dense
rounded
:label="t('globals.params.departmentFk')"
v-model="params.departmentFk"
option-value="id"
option-label="name"
url="Departments"
/>
</QItemSection>
</QItem>
@ -294,7 +294,6 @@ en:
orderFk: Order
from: From
to: To
salesPersonFk: Salesperson
stateFk: State
groupedStates: Grouped State
refFk: Invoice Ref.
@ -321,7 +320,6 @@ es:
orderFk: Pedido
from: Desde
to: Hasta
salesPersonFk: Comercial
stateFk: Estado
groupedStates: Estado agrupado
refFk: Ref. Factura
@ -340,7 +338,6 @@ es:
Order ID: ID Pedido
From: Desde
To: Hasta
Salesperson: Comercial
State: Estado
Invoice Ref.: Ref. Factura
My team: Mi equipo

View File

@ -17,6 +17,7 @@ import TicketFilter from './TicketFilter.vue';
import VnInput from 'src/components/common/VnInput.vue';
import FetchData from 'src/components/FetchData.vue';
import CustomerDescriptorProxy from 'src/pages/Customer/Card/CustomerDescriptorProxy.vue';
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
import ZoneDescriptorProxy from 'src/pages/Zone/Card/ZoneDescriptorProxy.vue';
import { toTimeFormat } from 'src/filters/date';
import InvoiceOutDescriptorProxy from 'src/pages/InvoiceOut/Card/InvoiceOutDescriptorProxy.vue';
@ -89,22 +90,17 @@ const columns = computed(() => [
},
{
align: 'left',
label: t('ticketList.salesPerson'),
name: 'salesPersonFk',
name: 'departmentFk',
label: t('customer.summary.team'),
component: 'select',
attrs: {
url: 'Workers/activeWithInheritedRole',
fields: ['id', 'name'],
where: { role: 'salesPerson' },
optionFilter: 'firstName',
useLike: false,
url: 'Departments',
},
create: true,
columnField: {
component: null,
},
columnClass: 'expand',
cardVisible: true,
format: (row, dashIfEmpty) => dashIfEmpty(row.salesPerson),
format: (row, dashIfEmpty) => dashIfEmpty(row.departmentName),
},
{
align: 'left',
@ -245,7 +241,7 @@ const fetchAvailableAgencies = async (formData) => {
const defaultAgency = agenciesOptions.value.find(
(agency) =>
agency.agencyModeFk === selectedClient.value.defaultAddress.agencyModeFk
agency.agencyModeFk === selectedClient.value.defaultAddress.agencyModeFk,
);
if (defaultAgency) formData.agencyModeId = defaultAgency.agencyModeFk;
@ -321,7 +317,7 @@ function openBalanceDialog(ticket) {
const description = ref([]);
const firstTicketClientId = checkedTickets[0].clientFk;
const isSameClient = checkedTickets.every(
(ticket) => ticket.clientFk === firstTicketClientId
(ticket) => ticket.clientFk === firstTicketClientId,
);
if (!isSameClient) {
@ -360,7 +356,7 @@ async function onSubmit() {
description: dialogData.value.value.description,
clientFk: dialogData.value.value.clientFk,
email: email[0].email,
}
},
);
if (data) notify('globals.dataSaved', 'positive');
@ -379,32 +375,32 @@ function setReference(data) {
switch (data) {
case 1:
newDescription = `${t(
'ticketList.creditCard'
'ticketList.creditCard',
)}, ${dialogData.value.value.description.replace(
/^(Credit Card, |Cash, |Transfers, )/,
''
'',
)}`;
break;
case 2:
newDescription = `${t(
'ticketList.cash'
'ticketList.cash',
)}, ${dialogData.value.value.description.replace(
/^(Credit Card, |Cash, |Transfers, )/,
''
'',
)}`;
break;
case 3:
newDescription = `${newDescription.replace(
/^(Credit Card, |Cash, |Transfers, )/,
''
'',
)}`;
break;
case 4:
newDescription = `${t(
'ticketList.transfers'
'ticketList.transfers',
)}, ${dialogData.value.value.description.replace(
/^(Credit Card, |Cash, |Transfers, )/,
''
'',
)}`;
break;
case 3317:
@ -467,10 +463,10 @@ function setReference(data) {
<template #column-statusIcons="{ row }">
<TicketProblems :row="row" />
</template>
<template #column-salesPersonFk="{ row }">
<template #column-departmentFk="{ row }">
<span class="link" @click.stop>
{{ dashIfEmpty(row.userName) }}
<CustomerDescriptorProxy :id="row.salesPersonFk" />
{{ dashIfEmpty(row.departmentName) }}
<DepartmentDescriptorProxy :id="row.departmentFk" />
</span>
</template>
<template #column-shippedDate="{ row }">

View File

@ -5,7 +5,7 @@ import VnSelect from 'src/components/common/VnSelect.vue';
import VnSelectCache from 'src/components/common/VnSelectCache.vue';
import CustomerDescriptorProxy from 'src/pages/Customer/Card/CustomerDescriptorProxy.vue';
import TicketDescriptorProxy from 'src/pages/Ticket/Card/TicketDescriptorProxy.vue';
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
import DepartmentDescriptorProxy from 'src/pages/Department/Card/DepartmentDescriptorProxy.vue';
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
import { useStateStore } from 'stores/useStateStore';
import { useVnConfirm } from 'composables/useVnConfirm';
@ -112,23 +112,17 @@ const columns = computed(() => [
},
{
align: 'left',
name: 'id',
label: t('weeklyTickets.salesperson'),
columnFilter: {
name: 'departmentFk',
label: t('customer.summary.team'),
component: 'select',
alias: 'u',
attrs: {
url: 'Workers/activeWithInheritedRole',
fields: ['id', 'name'],
where: { role: 'salesperson' },
},
inWhere: true,
url: 'Departments',
},
create: true,
columnField: {
component: null,
},
cardVisible: true,
format: (row) => row.userName,
format: (row, dashIfEmpty) => dashIfEmpty(row.departmentName),
},
{
align: 'right',
@ -142,9 +136,9 @@ const columns = computed(() => [
openConfirmationModal(
t('You are going to delete this weekly ticket'),
t(
'This ticket will be removed from weekly tickets! Continue anyway?'
'This ticket will be removed from weekly tickets! Continue anyway?',
),
() => deleteWeekly(row.ticketFk)
() => deleteWeekly(row.ticketFk),
),
isPrimary: true,
},
@ -219,10 +213,10 @@ onMounted(async () => {
<CustomerDescriptorProxy :id="row.clientFk" />
</span>
</template>
<template #column-id="{ row }">
<template #column-departmentFk="{ row }">
<span class="link" @click.stop>
{{ row.userName }}
<WorkerDescriptorProxy :id="row.workerFk" />
{{ row.departmentName }}
<DepartmentDescriptorProxy :id="row.departmentFk" />
</span>
</template>
</VnTable>

View File

@ -134,7 +134,6 @@ purchaseRequest:
weeklyTickets:
id: Ticket ID
shipment: Shipment
salesperson: Salesperson
search: Search weekly tickets
searchInfo: Search weekly tickets by id or client id
ticketSaleTracking:
@ -170,7 +169,7 @@ tracking:
addState: Add state
package:
package: Package
added: Added
added: D. Added
addPackage: Add package
removePackage: Remove package
ticketList:
@ -179,7 +178,6 @@ ticketList:
state: State
shipped: Shipped
zone: Zone
salesPerson: Sales person
totalWithVat: Total with VAT
summary: Summary
client: Customer

View File

@ -58,7 +58,6 @@ basicData:
weeklyTickets:
id: ID Ticket
shipment: Salida
salesperson: Comercial
search: Buscar por tickets programados
searchInfo: Buscar tickets programados por el identificador o el identificador del cliente
advanceTickets:
@ -160,7 +159,7 @@ expedition:
removeExpedition: Eliminar expedición
package:
package: Embalaje
added: Añadido
added: F. Creacion
addPackage: Añadir embalaje
removePackage: Quitar embalaje
ticketSaleTracking:
@ -184,7 +183,6 @@ ticketList:
state: Estado
shipped: F. Envío
zone: Zona
salesPerson: Comercial
totalWithVat: Total con IVA
summary: Resumen
client: Cliente

View File

@ -116,7 +116,7 @@ const handlePhotoUpdated = (evt = false) => {
:value="entity.user?.emailUser?.email"
copy
/>
<VnLv :label="t('worker.list.department')">
<VnLv :label="t('globals.department')">
<template #value>
<span class="link" v-text="entity.department?.department?.name" />
<DepartmentDescriptorProxy :id="entity.department?.department?.id" />

View File

@ -50,7 +50,7 @@ onBeforeMount(async () => {
<QCard class="vn-one">
<VnTitle :url="basicDataUrl" :text="t('globals.summary.basicData')" />
<VnLv :label="t('globals.name')" :value="worker.user?.nickname" />
<VnLv :label="t('worker.list.department')">
<VnLv :label="t('globals.department')">
<template #value>
<span class="link" v-text="worker.department?.department?.name" />
<DepartmentDescriptorProxy

View File

@ -40,8 +40,7 @@ const customerCard = {
title: 'basicData',
icon: 'vn:settings',
},
component: () =>
import('src/pages/Customer/Card/CustomerBasicData.vue'),
component: () => import('src/pages/Customer/Card/CustomerBasicData.vue'),
},
{
path: 'fiscal-data',
@ -50,8 +49,7 @@ const customerCard = {
title: 'fiscalData',
icon: 'vn:dfiscales',
},
component: () =>
import('src/pages/Customer/Card/CustomerFiscalData.vue'),
component: () => import('src/pages/Customer/Card/CustomerFiscalData.vue'),
},
{
path: 'billing-data',
@ -60,8 +58,7 @@ const customerCard = {
title: 'billingData',
icon: 'vn:payment',
},
component: () =>
import('src/pages/Customer/Card/CustomerBillingData.vue'),
component: () => import('src/pages/Customer/Card/CustomerBillingData.vue'),
},
{
path: 'address',
@ -85,9 +82,7 @@ const customerCard = {
title: 'address-create',
},
component: () =>
import(
'src/pages/Customer/components/CustomerAddressCreate.vue'
),
import('src/pages/Customer/components/CustomerAddressCreate.vue'),
},
{
path: ':addressId',
@ -125,8 +120,7 @@ const customerCard = {
title: 'credits',
icon: 'vn:credit',
},
component: () =>
import('src/pages/Customer/Card/CustomerCredits.vue'),
component: () => import('src/pages/Customer/Card/CustomerCredits.vue'),
},
{
path: 'greuges',
@ -135,8 +129,7 @@ const customerCard = {
title: 'greuges',
icon: 'vn:greuge',
},
component: () =>
import('src/pages/Customer/Card/CustomerGreuges.vue'),
component: () => import('src/pages/Customer/Card/CustomerGreuges.vue'),
},
{
path: 'balance',
@ -145,8 +138,7 @@ const customerCard = {
title: 'balance',
icon: 'balance',
},
component: () =>
import('src/pages/Customer/Card/CustomerBalance.vue'),
component: () => import('src/pages/Customer/Card/CustomerBalance.vue'),
},
{
path: 'recoveries',
@ -155,8 +147,7 @@ const customerCard = {
title: 'recoveries',
icon: 'vn:recovery',
},
component: () =>
import('src/pages/Customer/Card/CustomerRecoveries.vue'),
component: () => import('src/pages/Customer/Card/CustomerRecoveries.vue'),
},
{
path: 'web-access',
@ -165,8 +156,7 @@ const customerCard = {
title: 'webAccess',
icon: 'vn:web',
},
component: () =>
import('src/pages/Customer/Card/CustomerWebAccess.vue'),
component: () => import('src/pages/Customer/Card/CustomerWebAccess.vue'),
},
{
path: 'log',
@ -247,9 +237,7 @@ const customerCard = {
title: 'creditOpinion',
},
component: () =>
import(
'src/pages/Customer/Card/CustomerCreditOpinion.vue'
),
import('src/pages/Customer/Card/CustomerCreditOpinion.vue'),
},
],
},
@ -319,9 +307,7 @@ const customerCard = {
title: 'samples',
},
component: () =>
import(
'src/pages/Customer/Card/CustomerSamples.vue'
),
import('src/pages/Customer/Card/CustomerSamples.vue'),
},
{
path: 'create',
@ -376,9 +362,7 @@ const customerCard = {
title: 'fileManagement',
},
component: () =>
import(
'src/pages/Customer/Card/CustomerFileManagement.vue'
),
import('src/pages/Customer/Card/CustomerFileManagement.vue'),
},
{
path: 'file-management',
@ -420,8 +404,7 @@ const customerCard = {
meta: {
title: 'unpaid',
},
component: () =>
import('src/pages/Customer/Card/CustomerUnpaid.vue'),
component: () => import('src/pages/Customer/Card/CustomerUnpaid.vue'),
},
],
},
@ -469,15 +452,6 @@ export default {
customerCard,
],
},
{
path: 'create',
name: 'CustomerCreate',
meta: {
title: 'customerCreate',
icon: 'add',
},
component: () => import('src/pages/Customer/CustomerCreate.vue'),
},
{
path: 'payments',
name: 'CustomerPayments',

View File

@ -26,7 +26,7 @@ describe('Client list', () => {
'Web user': { val: `user_test_${randomInt}` },
Street: { val: `C/ STREET ${randomInt}` },
Email: { val: `user.test${randomInt}@cypress.com` },
'Sales person': { val: 'salesPerson', type: 'select' },
Team: { val: 'Informatica', type: 'select' },
Location: { val: '46000', type: 'select' },
'Business type': { val: 'Otros', type: 'select' },
};