PR-CUSTOMER #186

Merged
jsegarra merged 105 commits from :PR-CUSTOMER into dev 2024-04-19 15:55:53 +00:00
14 changed files with 171 additions and 60 deletions
Showing only changes of commit 3cf3687b84 - Show all commits

View File

@ -225,11 +225,13 @@ export default {
socialName: 'Fiscal name',
businessType: 'Business type',
contact: 'Contact',
youCanSaveMultipleEmails: 'You can save multiple emails',
email: 'Email',
phone: 'Phone',
mobile: 'Mobile',
salesPerson: 'Sales person',
contactChannel: 'Contact channel',
previousClient: 'Previous client',
},
extendedList: {
tableVisibleColumns: {

View File

@ -224,11 +224,14 @@ export default {
socialName: 'Nombre fiscal',
businessType: 'Tipo de negocio',
contact: 'Contacto',
youCanSaveMultipleEmails:
'Puedeguardar varios correos electrónicos encadenandolos mediante comas sin espacios, ejemplo: user@dominio.com,user2@dominio.com siendo el primer correo electrónico el principal',
email: 'Email',
phone: 'Teléfono',
mobile: 'Móvil',
salesPerson: 'Comercial',
jsegarra marked this conversation as resolved Outdated

Falta espacio en "puedeguardar"

Falta espacio en "puedeguardar"

Corregido: bb10714824

Corregido: bb10714824
contactChannel: 'Canal de contacto',
previousClient: 'Cliente anterior',
},
extendedList: {
tableVisibleColumns: {

View File

@ -3,15 +3,17 @@ import { computed, onBeforeMount, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute } from 'vue-router';
import { date, QCheckbox, QBtn, useQuasar } from 'quasar';
import axios from 'axios';
import { QCheckbox, QBtn, useQuasar, QField, QPopupEdit } from 'quasar';
import { toCurrency } from 'src/filters';
import { toCurrency, toDate, toDateHour } from 'src/filters';
import { useState } from 'src/composables/useState';
import { useStateStore } from 'stores/useStateStore';
import { useValidator } from 'src/composables/useValidator';
import FetchData from 'components/FetchData.vue';
import VnSelectFilter from 'src/components/common/VnSelectFilter.vue';
import VnInput from 'src/components/common/VnInput.vue';
import CustomerNewPayment from 'src/pages/Customer/components/CustomerNewPayment.vue';
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
@ -58,7 +60,8 @@ const tableColumnComponents = {
event: () => {},
},
description: {
component: 'span',
component: QField,
attrs: () => ({ readonly: true, dense: true }),
props: () => {},
event: () => {},
},
@ -96,14 +99,14 @@ const columns = computed(() => [
{
align: 'left',
jsegarra marked this conversation as resolved Outdated

todos los campos de euros deben de ir alineados a la derecha como en salix.

todos los campos de euros deben de ir alineados a la derecha como en salix.

Así se ve para el cliente 1101. Ver imagen adjunta
Sin embargo, el cursor cambia a "la mano", induciendo a que se puede cambiar, cuando debería aparecer el prohibido o cambiar el color del checkbox a gris

Así se ve para el cliente 1101. Ver imagen adjunta Sin embargo, el cursor cambia a "la mano", induciendo a que se puede cambiar, cuando debería aparecer el prohibido o cambiar el color del checkbox a gris

Corregido, campos de tipo moneda alineados a la derecha y el checkbox deshabilitado: 0aa5a051fb

Corregido, campos de tipo moneda alineados a la derecha y el checkbox deshabilitado: 0aa5a051fb

Yo lo he visto OK
El checkbox es de color naranja pero se ve que está deshabilitado y tiene el cursor en prohibido

Yo lo he visto OK El checkbox es de color naranja pero se ve que está deshabilitado y tiene el cursor en prohibido
field: 'payed',
format: (value) => date.formatDate(value, 'DD/MM/YYYY'),
format: (value) => toDate(value),
label: t('Date'),
name: 'payed',
},
{
align: 'left',
field: 'created',
format: (value) => date.formatDate(value, 'DD/MM/YYYY hh:mm'),
format: (value) => toDateHour(value),
label: t('Creation date'),
name: 'created',
},
@ -182,6 +185,15 @@ const updateCompanyId = (id) => {
}
getData();
};
const saveFieldValue = async (event) => {
try {
const payload = { description: event.value };
await axios.patch(`Receipts/${event.key}`, payload);
} catch (err) {
return err;
}
};
</script>
<template>
@ -223,9 +235,35 @@ const updateCompanyId = (id) => {
v-bind="tableColumnComponents[props.col.name].props(props)"
@click="tableColumnComponents[props.col.name].event(props)"
>
<template v-if="props.col.name !== 'isConciliate'">
<template
v-if="
props.col.name !== 'isConciliate' &&
props.col.name !== 'description'
"
>
{{ props.value }}
</template>
<template v-if="props.col.name === 'description'" #control>
<div class="self-center full-width no-outline" tabindex="0">
{{ props.value }}
</div>
<QPopupEdit
:key="props.col.name"
label-cancel="Close"
label-set="Save"
v-model="props.field"
>
<VnInput
@keyup.enter="saveFieldValue(props)"
autofocus
clearable
dense
v-model="props.row.description"
/>
</QPopupEdit>
</template>
jsegarra marked this conversation as resolved Outdated

Revisar, si este es el componente que acordamos en la UX/UI.
Hablar con @buezas porque ha hecho un cambio en la parte de travel/extra-community y el tipo de componente quasar que se está usando aquí no es el mismo

Revisar, si este es el componente que acordamos en la UX/UI. Hablar con @buezas porque ha hecho un cambio en la parte de travel/extra-community y el tipo de componente quasar que se está usando aquí no es el mismo

Corregido: 86199d8197

Corregido: 86199d8197
<WorkerDescriptorProxy
:id="props.row.workerFk"
v-if="props.col.name === 'userName'"
@ -275,6 +313,13 @@ const updateCompanyId = (id) => {
</QPageSticky>
</template>
<style lang="scss" scoped>
.col-content {
border-radius: 4px;
padding: 6px;
}
</style>
<i18n>
es:
Company: Empresa

View File

@ -60,8 +60,14 @@ const filterOptions = {
@on-fetch="(data) => (businessTypes = data)"
auto-load
/>
<fetch-data
:filter="filter"
@on-fetch="(data) => (clients = data)"
auto-load
url="Clients"
/>
<FormModel :url="`Clients/${route.params.id}`" model="customer" auto-load>
<FormModel :url="`Clients/${route.params.id}`" auto-load model="customer">
<template #form="{ data, validate, filter }">
<VnRow class="row q-gutter-md q-mb-md">
<div class="col">
@ -75,15 +81,15 @@ const filterOptions = {
</div>
<div class="col">
<QSelect
v-model="data.businessTypeFk"
:options="businessTypes"
option-value="code"
option-label="description"
emit-value
:label="t('customer.basicData.businessType')"
map-options
:rules="validate('client.businessTypeFk')"
:input-debounce="0"
:label="t('customer.basicData.businessType')"
:options="businessTypes"
:rules="validate('client.businessTypeFk')"
emit-value
map-options
option-label="description"
option-value="code"
v-model="data.businessTypeFk"
/>
</div>
</VnRow>
@ -103,7 +109,15 @@ const filterOptions = {
clearable
type="email"
v-model="data.email"
/>
>
<template #append>
<QIcon name="info" class="cursor-info">
<QTooltip>{{
t('customer.basicData.youCanSaveMultipleEmails')
}}</QTooltip>
</QIcon>
</template>
</VnInput>
</div>
</VnRow>
<VnRow class="row q-gutter-md q-mb-md">
@ -127,24 +141,24 @@ const filterOptions = {
<VnRow class="row q-gutter-md q-mb-md">
<div class="col">
<QSelect
v-model="data.salesPersonFk"
:options="workers"
option-value="id"
option-label="name"
emit-value
:label="t('customer.basicData.salesPerson')"
map-options
use-input
@filter="(value, update) => filter(value, update, filterOptions)"
:rules="validate('client.salesPersonFk')"
:input-debounce="0"
:label="t('customer.basicData.salesPerson')"
:options="workers"
:rules="validate('client.salesPersonFk')"
@filter="(value, update) => filter(value, update, filterOptions)"
emit-value
map-options
option-label="name"
option-value="id"
use-input
v-model="data.salesPersonFk"
>
<template #prepend>
<QAvatar color="orange">
<QImg
v-if="data.salesPersonFk"
:src="`/api/Images/user/160x160/${data.salesPersonFk}/download?access_token=${token}`"
spinner-color="white"
v-if="data.salesPersonFk"
/>
</QAvatar>
</template>
@ -152,18 +166,48 @@ const filterOptions = {
</div>
<div class="col">
<QSelect
v-model="data.contactChannelFk"
:options="contactChannels"
option-value="id"
option-label="name"
emit-value
:label="t('customer.basicData.contactChannel')"
map-options
:rules="validate('client.contactChannelFk')"
:input-debounce="0"
:label="t('customer.basicData.contactChannel')"
:options="contactChannels"
:rules="validate('client.contactChannelFk')"
emit-value
map-options
option-label="name"
option-value="id"
v-model="data.contactChannelFk"
/>
</div>
</VnRow>
<VnRow class="row q-gutter-md q-mb-md">
<div class="col">
<QSelect
:input-debounce="0"
:label="t('customer.basicData.previousClient')"
:options="clients"
:rules="validate('client.transferorFk')"
emit-value
map-options
option-label="name"
option-value="id"
v-model="data.transferorFk"
>
<template #append>
<QIcon name="info" class="cursor-pointer">
<QTooltip>{{
t(
'In case of a company succession, specify the grantor company'
)
}}</QTooltip>
</QIcon>
</template>
</QSelect>
</div>
</VnRow>
</template>
</FormModel>
</template>
<i18n>
es:
In case of a company succession, specify the grantor company: En el caso de que haya habido una sucesión de empresa, indicar la empresa cedente
</i18n>

View File

@ -3,9 +3,9 @@ import { computed, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute, useRouter } from 'vue-router';
import { date, QBtn } from 'quasar';
import { QBtn } from 'quasar';
import { toCurrency } from 'src/filters';
import { toCurrency, toDateHour } from 'src/filters';
import FetchData from 'components/FetchData.vue';
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
@ -55,7 +55,7 @@ const columns = computed(() => [
field: 'created',
label: t('Since'),
name: 'created',
format: (value) => date.formatDate(value, 'DD/MM/YYYY hh:mm'),
format: (value) => toDateHour(value),
jsegarra marked this conversation as resolved Outdated

Revisar, porque en Salix, se muestra dd/mm/yyy HH:MM

Revisar, porque en Salix, se muestra dd/mm/yyy HH:MM

Corregido: 86199d8197

Corregido: 86199d8197

Duda, cuando actualicemos con dev no tendremos conflicto?

Duda, cuando actualicemos con dev no tendremos conflicto?
},
{
align: 'left',

View File

@ -2,10 +2,13 @@
import { ref, computed } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import { toCurrency } 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 useCardDescription from 'src/composables/useCardDescription';
import VnUserLink from 'src/components/ui/VnUserLink.vue';
const $props = defineProps({
@ -95,7 +98,10 @@ const setData = (entity) => (data.value = useCardDescription(entity.name, entity
</QCardActions>
</template>
<template #actions="{ entity }">
<QCardActions>
<div class="flex justify-center q-mb-md">
<QIcon color="primary" name="vn:noweb" size="sm" />
</div>
<QCardActions class="flex justify-center">
<QBtn
:to="{
name: 'TicketList',
@ -118,6 +124,20 @@ const setData = (entity) => (data.value = useCardDescription(entity.name, entity
>
<QTooltip>{{ t('invoiceOutList') }}</QTooltip>
</QBtn>
<QBtn
:to="{
jsegarra marked this conversation as resolved Outdated

Revisar tooltip porque no está igual.
Lo del icono va a parte

Revisar tooltip porque no está igual. Lo del icono va a parte

Corregido: 0a33b8d92a

Corregido: 0a33b8d92a

Para probar hay que añadir valores a la fixtures.before.sql

Para probar hay que añadir valores a la fixtures.before.sql
name: 'OrderCreate',
params: { id: entity.id },
}"
size="md"
icon="vn:basketadd"
color="primary"
>
<QTooltip>{{ t('invoiceOutList') }}</QTooltip>
</QBtn>
<QBtn size="md" icon="vn:Person" color="primary">
<QTooltip>{{ t('invoiceOutList') }}</QTooltip>
</QBtn>
</QCardActions>
</template>
</CardDescriptor>

View File

@ -3,8 +3,10 @@ import { computed, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute, useRouter } from 'vue-router';
import { date, QBadge, QBtn, QCheckbox } from 'quasar';
import { QBadge, QBtn, QCheckbox } from 'quasar';
import { downloadFile } from 'src/composables/downloadFile';
import { toDateHour } from 'src/filters';
import FetchData from 'components/FetchData.vue';
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
@ -161,7 +163,7 @@ const columns = computed(() => [
field: (value) => value.dms.created,
label: t('Created'),
name: 'created',
format: (value) => date.formatDate(value, 'DD/MM/YYYY hh:mm'),
format: (value) => toDateHour(value),
jsegarra marked this conversation as resolved Outdated

Duda, cuando actualicemos con dev no tendremos conflicto?

Duda, cuando actualicemos con dev no tendremos conflicto?

Se reemplazo toDateHourMinSec por las nuevas utils ubicadas en date.js

Commit: 3cb045936b

Se reemplazo `toDateHourMinSec` por las nuevas utils ubicadas en `date.js` Commit: https://gitea.verdnatura.es/verdnatura/salix-front/commit/3cb045936b2d17001fedd87219c904162d29fba4
},
{
align: 'right',

View File

@ -5,7 +5,7 @@ import { useRoute, useRouter } from 'vue-router';
import { date, QBtn } from 'quasar';
import { toCurrency } from 'src/filters';
import { toCurrency, toDateHour } from 'src/filters';
import FetchData from 'components/FetchData.vue';
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
@ -73,7 +73,7 @@ const columns = computed(() => [
field: 'shipped',
label: t('Date'),
name: 'date',
format: (value) => date.formatDate(value, 'DD/MM/YYYY hh:mm'),
format: (value) => toDateHour(value),
jsegarra marked this conversation as resolved Outdated

Duda, cuando actualicemos con dev no tendremos conflicto?

Duda, cuando actualicemos con dev no tendremos conflicto?

Se reemplazo toDateHourMinSec por las nuevas utils ubicadas en date.js

Commit: 73ea49df63

Se reemplazo `toDateHourMinSec` por las nuevas utils ubicadas en `date.js` Commit: https://gitea.verdnatura.es/verdnatura/salix-front/commit/73ea49df6340e32cc035ac132e666c4be2d1fa27
},
{
align: 'left',

View File

@ -3,9 +3,7 @@ import { ref, computed } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute, useRouter } from 'vue-router';
import { date, QBtn } from 'quasar';
import { toCurrency } from 'src/filters';
import { toCurrency, toDate } from 'src/filters';
import FetchData from 'components/FetchData.vue';
@ -49,14 +47,14 @@ const columns = computed(() => [
field: 'started',
label: t('Since'),
name: 'since',
format: (value) => date.formatDate(value, 'DD/MM/YYYY'),
format: (value) => toDate(value),
},
{
align: 'left',
field: 'finished',
label: t('To'),
name: 'to',
format: (value) => date.formatDate(value, 'DD/MM/YYYY'),
format: (value) => toDate(value),
},
{
align: 'left',

View File

@ -3,10 +3,11 @@ import { ref, computed } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute, useRouter } from 'vue-router';
import { date, QBtn } from 'quasar';
import { QBtn } from 'quasar';
import FetchData from 'components/FetchData.vue';
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
import { toDateHour } from 'src/filters';
const { t } = useI18n();
const route = useRoute();
@ -54,7 +55,7 @@ const columns = computed(() => [
field: 'created',
label: t('Sent'),
name: 'sent',
format: (value) => date.formatDate(value, 'DD/MM/YYYY hh:mm'),
format: (value) => toDateHour(value),
jsegarra marked this conversation as resolved Outdated

Duda, cuando actualicemos con dev no tendremos conflicto?

Duda, cuando actualicemos con dev no tendremos conflicto?

Se reemplazo toDateHourMinSec por las nuevas utils ubicadas en date.js

Commit: c856adc8d0

Se reemplazo `toDateHourMinSec` por las nuevas utils ubicadas en `date.js` Commit: https://gitea.verdnatura.es/verdnatura/salix-front/commit/c856adc8d0defb6c5574f9d6198ddcf2a28356c4
},
{
align: 'left',

View File

@ -3,9 +3,7 @@ import { computed, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute } from 'vue-router';
import { date } from 'quasar';
import { toCurrency } from 'src/filters';
import { toCurrency, toDateHour } from 'src/filters';
import FetchData from 'components/FetchData.vue';
@ -43,7 +41,7 @@ const columns = computed(() => [
{
align: 'left',
field: 'created',
format: (value) => date.formatDate(value, 'DD/MM/YYYY'),
format: (value) => toDateHour(value),
label: t('Created'),
name: 'created',
},

View File

@ -182,7 +182,7 @@ const inputFileRef = ref();
>
<template #append>
<QBtn
icon="attach_file_add"
icon="vn:attach"
flat
round
padding="xs"

View File

@ -160,7 +160,7 @@ const inputFileRef = ref();
>
<template #append>
<QBtn
icon="attach_file_add"
icon="vn:attach"
flat
round
padding="xs"

View File

@ -136,9 +136,7 @@ const onDataSaved = async () => {
<QIcon name="close" size="sm" />
</span>
<h5 class="flex justify-center q-mt-xs">
{{ t('New payment') }}
</h5>
<h5 class="q-mt-none">{{ t('New payment') }}</h5>
jsegarra marked this conversation as resolved Outdated

Porqué está en el centro si el resto de dialogos si el resto está a un lateral?

Porqué está en el centro si el resto de dialogos si el resto está a un lateral?

Corregido: 3cf3687b84

Corregido: 3cf3687b84
<VnRow class="row q-gutter-md q-mb-md">
<div class="col">