PR-CUSTOMER #186
|
@ -1,3 +0,0 @@
|
|||
[ZoneTransfer]
|
||||
ZoneId=3
|
||||
ReferrerUrl=C:\Users\cmari\Downloads\Salix-font1.68.zip
|
|
@ -1,3 +0,0 @@
|
|||
[ZoneTransfer]
|
||||
ZoneId=3
|
||||
ReferrerUrl=C:\Users\cmari\Downloads\Salix-font1.68.zip
|
|
@ -1,3 +0,0 @@
|
|||
[ZoneTransfer]
|
||||
ZoneId=3
|
||||
ReferrerUrl=C:\Users\cmari\Downloads\Salix-font1.68.zip
|
|
@ -1,3 +0,0 @@
|
|||
[ZoneTransfer]
|
||||
ZoneId=3
|
||||
ReferrerUrl=C:\Users\cmari\Downloads\Salix-font1.68.zip
|
|
@ -1,3 +0,0 @@
|
|||
[ZoneTransfer]
|
||||
ZoneId=3
|
||||
ReferrerUrl=C:\Users\cmari\Downloads\Salix-font1.68.zip
|
|
@ -1,3 +0,0 @@
|
|||
[ZoneTransfer]
|
||||
ZoneId=3
|
||||
ReferrerUrl=C:\Users\cmari\Downloads\Salix-font1.68.zip
|
|
@ -1,3 +0,0 @@
|
|||
[ZoneTransfer]
|
||||
ZoneId=3
|
||||
ReferrerUrl=C:\Users\cmari\Downloads\Salix-font1.68.zip
|
|
@ -176,11 +176,11 @@ export default {
|
|||
securedCredit: 'Secured credit',
|
||||
payMethod: 'Pay method',
|
||||
debt: 'Debt',
|
||||
isDisabled: 'Customer is disabled',
|
||||
isFrozen: 'Customer is frozen',
|
||||
webAccountInactive: 'Web account inactive',
|
||||
isFrozen: 'Customer frozen',
|
||||
hasDebt: 'Customer has debt',
|
||||
notChecked: 'Customer not checked',
|
||||
isDisabled: 'Customer inactive',
|
||||
notChecked: 'Customer no checked',
|
||||
webAccountInactive: 'Web account inactive',
|
||||
noWebAccess: 'Web access is disabled',
|
||||
businessType: 'Business type',
|
||||
passwordRequirements:
|
||||
|
|
|
@ -175,11 +175,11 @@ export default {
|
|||
securedCredit: 'Crédito asegurado',
|
||||
payMethod: 'Método de pago',
|
||||
debt: 'Riesgo',
|
||||
isDisabled: 'El cliente está desactivado',
|
||||
isFrozen: 'El cliente está congelado',
|
||||
isFrozen: 'Cliente congelado',
|
||||
jsegarra marked this conversation as resolved
Outdated
|
||||
hasDebt: 'Cliente con riesgo',
|
||||
isDisabled: 'Cliente inactivo',
|
||||
notChecked: 'Cliente no comprobado',
|
||||
webAccountInactive: 'Sin acceso web',
|
||||
hasDebt: 'El cliente tiene riesgo',
|
||||
notChecked: 'El cliente no está comprobado',
|
||||
noWebAccess: 'El acceso web está desactivado',
|
||||
businessType: 'Tipo de negocio',
|
||||
passwordRequirements:
|
||||
|
|
|
@ -46,62 +46,6 @@ const filter = {
|
|||
where: { clientFk: route.params.id, companyFk: user.value.companyFk },
|
||||
};
|
||||
|
||||
const tableColumnComponents = {
|
||||
date: {
|
||||
component: 'span',
|
||||
props: () => {},
|
||||
event: () => {},
|
||||
},
|
||||
creationDate: {
|
||||
component: 'span',
|
||||
props: () => {},
|
||||
event: () => {},
|
||||
},
|
||||
employee: {
|
||||
component: QBtn,
|
||||
props: () => ({ flat: true, color: 'blue', noCaps: true }),
|
||||
event: () => {},
|
||||
},
|
||||
reference: {
|
||||
component: 'div',
|
||||
props: () => {},
|
||||
event: () => {},
|
||||
},
|
||||
bank: {
|
||||
component: 'span',
|
||||
props: () => {},
|
||||
event: () => {},
|
||||
},
|
||||
debit: {
|
||||
component: 'span',
|
||||
props: () => {},
|
||||
event: () => {},
|
||||
},
|
||||
havings: {
|
||||
component: 'span',
|
||||
props: () => {},
|
||||
event: () => {},
|
||||
},
|
||||
balance: {
|
||||
component: 'span',
|
||||
props: () => {},
|
||||
event: () => {},
|
||||
},
|
||||
conciliated: {
|
||||
component: QCheckbox,
|
||||
props: (prop) => ({
|
||||
disable: true,
|
||||
'model-value': Boolean(prop.value),
|
||||
}),
|
||||
event: () => {},
|
||||
},
|
||||
actions: {
|
||||
component: 'div',
|
||||
props: () => {},
|
||||
event: () => {},
|
||||
},
|
||||
};
|
||||
|
||||
const columns = computed(() => [
|
||||
{
|
||||
align: 'left',
|
||||
|
@ -151,8 +95,8 @@ const columns = computed(() => [
|
|||
},
|
||||
{
|
||||
align: 'left',
|
||||
field: (value) => value.debit - value.credit,
|
||||
format: (value) => toCurrency(value),
|
||||
field: 'balance',
|
||||
format: (value) => value && toCurrency(value),
|
||||
label: t('Balance'),
|
||||
jsegarra marked this conversation as resolved
Outdated
jgallego
commented
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.
jsegarra
commented
Así se ve para el cliente 1101. Ver imagen adjunta 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
cfonseca
commented
Corregido, campos de tipo moneda alineados a la derecha y el checkbox deshabilitado: Corregido, campos de tipo moneda alineados a la derecha y el checkbox deshabilitado: 0aa5a051fb
jsegarra
commented
Yo lo he visto OK Yo lo he visto OK
El checkbox es de color naranja pero se ve que está deshabilitado y tiene el cursor en prohibido
|
||||
name: 'balance',
|
||||
},
|
||||
|
@ -190,6 +134,16 @@ const getData = () => {
|
|||
};
|
||||
|
||||
const onFetch = (data) => {
|
||||
if (clientRisks.value?.length && data.length) {
|
||||
data[0].balance = clientRisks.value[0]?.amount || 0;
|
||||
|
||||
jgallego
commented
en las columnas debe y haber si el valor es cero no mostrarlo en las columnas debe y haber si el valor es cero no mostrarlo
tal como lo hace en salix.
cfonseca
commented
Corregido: Corregido: d74119f433
jsegarra
commented
Yo lo he visto OK Yo lo he visto OK
|
||||
data.reduce((prev, curr) => {
|
||||
const netMovement = prev.debit - prev.credit;
|
||||
curr.balance = prev.balance - netMovement;
|
||||
return curr;
|
||||
});
|
||||
}
|
||||
|
||||
receiptsData.value = data;
|
||||
};
|
||||
|
||||
|
@ -213,10 +167,10 @@ const updateCompanyId = (id) => {
|
|||
getData();
|
||||
};
|
||||
|
||||
const saveFieldValue = async (event) => {
|
||||
const saveFieldValue = async (row) => {
|
||||
try {
|
||||
const payload = { description: event.value };
|
||||
await axios.patch(`Receipts/${event.key}`, payload);
|
||||
const payload = { description: row.description };
|
||||
await axios.patch(`Receipts/${row.id}`, payload);
|
||||
} catch (err) {
|
||||
return err;
|
||||
}
|
||||
|
@ -228,13 +182,6 @@ const sendEmailAction = () => {
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<FetchData
|
||||
:filter="filterCompanies"
|
||||
@on-fetch="(data) => (companiesOptions = data)"
|
||||
auto-load
|
||||
url="Companies"
|
||||
/>
|
||||
|
||||
<FetchData
|
||||
:filter="filter"
|
||||
@on-fetch="(data) => (clientRisks = data)"
|
||||
|
@ -242,6 +189,12 @@ const sendEmailAction = () => {
|
|||
ref="clientRisksRef"
|
||||
url="ClientRisks"
|
||||
/>
|
||||
<FetchData
|
||||
:filter="filterCompanies"
|
||||
@on-fetch="(data) => (companiesOptions = data)"
|
||||
auto-load
|
||||
url="Companies"
|
||||
/>
|
||||
|
||||
<VnPaginate
|
||||
auto-load
|
||||
|
@ -261,116 +214,91 @@ const sendEmailAction = () => {
|
|||
class="full-width q-mt-md"
|
||||
row-key="id"
|
||||
>
|
||||
<template #body-cell="props">
|
||||
<QTd :props="props">
|
||||
<QTr :props="props" class="cursor-pointer">
|
||||
<component
|
||||
:is="tableColumnComponents[props.col.name].component"
|
||||
class="col-content"
|
||||
v-bind="
|
||||
tableColumnComponents[props.col.name].props(props)
|
||||
"
|
||||
@click="
|
||||
tableColumnComponents[props.col.name].event(props)
|
||||
"
|
||||
>
|
||||
<template
|
||||
v-if="
|
||||
props.col.name !== 'conciliated' &&
|
||||
props.col.name !== 'reference' &&
|
||||
props.col.name !== 'actions'
|
||||
"
|
||||
>
|
||||
{{ props.value }}
|
||||
</template>
|
||||
<template #body-cell-employee="{ row }">
|
||||
<QTd auto-width @click.stop>
|
||||
<QBtn color="blue" flat no-caps>{{ row.userName }}</QBtn>
|
||||
<WorkerDescriptorProxy :id="row.clientFk" />
|
||||
</QTd>
|
||||
</template>
|
||||
|
||||
<template v-if="props.col.name === 'reference'">
|
||||
<div v-if="props.row.isInvoice">
|
||||
<QBtn color="blue" dense flat>
|
||||
{{ t('bill', { ref: props.value }) }}
|
||||
</QBtn>
|
||||
<InvoiceOutDescriptorProxy
|
||||
:id="props.row.id"
|
||||
v-if="props.col.name === 'reference'"
|
||||
/>
|
||||
</div>
|
||||
<VnInput
|
||||
@keyup.enter="saveFieldValue(props)"
|
||||
autofocus
|
||||
clearable
|
||||
dense
|
||||
v-model="props.row.description"
|
||||
v-else
|
||||
/>
|
||||
</template>
|
||||
<template #body-cell-reference="{ row }">
|
||||
<QTd auto-width @click.stop v-if="row.isInvoice">
|
||||
<QBtn color="blue" dense flat>
|
||||
{{ t('bill', { ref: row.description }) }}
|
||||
</QBtn>
|
||||
<InvoiceOutDescriptorProxy :id="row.id" />
|
||||
</QTd>
|
||||
<QTd v-else>
|
||||
<VnInput
|
||||
@keyup.enter="saveFieldValue(row)"
|
||||
autofocus
|
||||
clearable
|
||||
dense
|
||||
v-model="row.description"
|
||||
/>
|
||||
</QTd>
|
||||
</template>
|
||||
|
||||
<template
|
||||
v-if="
|
||||
props.col.name === 'actions' &&
|
||||
props.row.isCompensation
|
||||
"
|
||||
>
|
||||
<QIcon
|
||||
@click.stop="showDialog = true"
|
||||
class="q-ml-md"
|
||||
color="primary"
|
||||
name="add"
|
||||
size="sm"
|
||||
<template #body-cell-conciliated="{ row }">
|
||||
<QTd align="center">
|
||||
<QCheckbox :model-value="row.isConciliate === 1" />
|
||||
</QTd>
|
||||
</template>
|
||||
|
||||
<template #body-cell-actions="{ row }">
|
||||
<QTd align="center">
|
||||
<QIcon
|
||||
@click.stop="showDialog = true"
|
||||
class="q-ml-md"
|
||||
color="primary"
|
||||
name="add"
|
||||
size="sm"
|
||||
v-if="row.isCompensation"
|
||||
>
|
||||
<QTooltip>
|
||||
{{ t('Send compensation') }}
|
||||
</QTooltip>
|
||||
</QIcon>
|
||||
|
||||
<QDialog v-model="showDialog">
|
||||
<QCard class="q-pa-sm">
|
||||
<QCardSection>
|
||||
<span
|
||||
jsegarra marked this conversation as resolved
Outdated
jsegarra
commented
Revisar, si este es el componente que acordamos en la UX/UI. 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
cfonseca
commented
Corregido: Corregido: 86199d8197
|
||||
ref="closeButton"
|
||||
class="flex justify-end color-vn-label"
|
||||
v-close-popup
|
||||
>
|
||||
<QTooltip>
|
||||
{{ t('Send compensation') }}
|
||||
</QTooltip>
|
||||
</QIcon>
|
||||
|
||||
<QDialog v-model="showDialog">
|
||||
<QCard class="q-pa-sm">
|
||||
<QCardSection>
|
||||
<span
|
||||
ref="closeButton"
|
||||
class="flex justify-end color-vn-label"
|
||||
v-close-popup
|
||||
>
|
||||
<QIcon name="close" size="sm" />
|
||||
</span>
|
||||
<div class="text-h6">
|
||||
{{ t('Send compensation') }}
|
||||
</div>
|
||||
</QCardSection>
|
||||
<QCardSection>
|
||||
<div>
|
||||
{{
|
||||
t(
|
||||
'Do you want to report compensation to the client by mail?'
|
||||
)
|
||||
}}
|
||||
</div>
|
||||
</QCardSection>
|
||||
<QCardActions
|
||||
class="flex justify-end q-mb-sm"
|
||||
>
|
||||
<QBtn
|
||||
:label="t('globals.cancel')"
|
||||
color="primary"
|
||||
flat
|
||||
v-close-popup
|
||||
/>
|
||||
<QBtn
|
||||
:label="t('globals.save')"
|
||||
@click="sendEmailAction"
|
||||
class="q-ml-sm"
|
||||
color="primary"
|
||||
/>
|
||||
</QCardActions>
|
||||
</QCard>
|
||||
</QDialog>
|
||||
</template>
|
||||
|
||||
<WorkerDescriptorProxy
|
||||
:id="props.row.clientFk"
|
||||
v-if="props.col.name === 'userName'"
|
||||
/>
|
||||
</component>
|
||||
</QTr>
|
||||
<QIcon name="close" size="sm" />
|
||||
</span>
|
||||
<div class="text-h6">
|
||||
jsegarra marked this conversation as resolved
Outdated
jgallego
commented
http://localhost:5000/#!/client/100/balance/index en salix hay un registro y el boton de enviar compensación, en lilium no aparece ni el registro ni el boton http://localhost:5000/#!/client/100/balance/index en salix hay un registro y el boton de enviar compensación, en lilium no aparece ni el registro ni el boton
cfonseca
commented
Corregido: Corregido: f8b698e4e7 hace falta cambiar el icono del mail, no lo he encontrado en Lilium aun
jsegarra
commented
Efectivamente no está. Hablamos con el responsable de la iconografía Gracias Efectivamente no está.
Hablamos con el responsable de la iconografía
Gracias
jsegarra
commented
Resuelto Resuelto
|
||||
{{ t('Send compensation') }}
|
||||
</div>
|
||||
</QCardSection>
|
||||
<QCardSection>
|
||||
<div>
|
||||
{{
|
||||
t(
|
||||
'Do you want to report compensation to the client by mail?'
|
||||
)
|
||||
}}
|
||||
</div>
|
||||
</QCardSection>
|
||||
<QCardActions class="flex justify-end q-mb-sm">
|
||||
<QBtn
|
||||
:label="t('globals.cancel')"
|
||||
color="primary"
|
||||
flat
|
||||
v-close-popup
|
||||
/>
|
||||
<QBtn
|
||||
:label="t('globals.save')"
|
||||
@click="sendEmailAction"
|
||||
class="q-ml-sm"
|
||||
color="primary"
|
||||
/>
|
||||
</QCardActions>
|
||||
</QCard>
|
||||
</QDialog>
|
||||
</QTd>
|
||||
</template>
|
||||
</QTable>
|
||||
|
|
|
@ -92,87 +92,91 @@ const updateData = () => {
|
|||
'is-active': !item.finished,
|
||||
}"
|
||||
>
|
||||
<QCardSection class="flex q-py-none">
|
||||
<div
|
||||
class="flex items-center q-ml-md cursor-pointer"
|
||||
v-if="!item.finished"
|
||||
>
|
||||
<QIcon
|
||||
@click.stop="openDialog(item)"
|
||||
color="primary"
|
||||
name="lock"
|
||||
size="md"
|
||||
<QCardSection
|
||||
class="full-width flex justify-between q-py-none"
|
||||
>
|
||||
<div class="width-state flex">
|
||||
<div
|
||||
class="flex items-center cursor-pointer q-mr-md"
|
||||
v-if="!item.finished"
|
||||
>
|
||||
<QTooltip>{{ t('Close contract') }}</QTooltip>
|
||||
</QIcon>
|
||||
</div>
|
||||
<QIcon
|
||||
@click.stop="openDialog(item)"
|
||||
color="primary"
|
||||
name="lock"
|
||||
size="md"
|
||||
style="font-variation-settings: 'FILL' 1"
|
||||
>
|
||||
<QTooltip>{{ t('Close contract') }}</QTooltip>
|
||||
</QIcon>
|
||||
</div>
|
||||
|
||||
<div class="q-ml-lg">
|
||||
<div class="flex q-mb-xs">
|
||||
<div class="q-mr-sm color-vn-label">
|
||||
{{ t('Since') }}:
|
||||
<div>
|
||||
<div class="flex q-mb-xs">
|
||||
<div class="q-mr-sm color-vn-label">
|
||||
{{ t('Since') }}:
|
||||
</div>
|
||||
<div class="text-weight-bold">
|
||||
{{ toDate(item.started) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-weight-bold">
|
||||
{{ toDate(item.started) }}
|
||||
<div class="flex">
|
||||
<div class="q-mr-sm color-vn-label">
|
||||
{{ t('To') }}:
|
||||
</div>
|
||||
<div class="text-weight-bold">
|
||||
{{ toDate(item.finished) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex">
|
||||
<div class="q-mr-sm color-vn-label">
|
||||
{{ t('To') }}:
|
||||
</div>
|
||||
|
||||
<QSeparator vertical />
|
||||
|
||||
<div class="width-data flex">
|
||||
<div
|
||||
class="full-width flex justify-between items-center"
|
||||
v-if="item?.insurances.length"
|
||||
>
|
||||
<div class="flex">
|
||||
<div class="color-vn-label q-mr-xs">
|
||||
{{ t('Credit') }}:
|
||||
</div>
|
||||
<div class="text-weight-bold">
|
||||
{{ item.insurances[0].credit }}
|
||||
jsegarra marked this conversation as resolved
Outdated
jsegarra
commented
Si no tiene valor aparece vacío. En Salix aparece un "-" Si no tiene valor aparece vacío. En Salix aparece un "-"
cfonseca
commented
Corregido: Corregido: c0a9835e80
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-weight-bold">
|
||||
{{ toDate(item.finished) }}
|
||||
<div class="flex">
|
||||
<div class="color-vn-label q-mr-xs">
|
||||
{{ t('Grade') }}:
|
||||
</div>
|
||||
<div class="text-weight-bold">
|
||||
{{ item.insurances[0].grade || '-' }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex">
|
||||
<div class="color-vn-label q-mr-xs">
|
||||
{{ t('Date') }}:
|
||||
</div>
|
||||
<div class="text-weight-bold">
|
||||
{{ toDate(item.insurances[0].created) }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex items-center cursor-pointer">
|
||||
<QIcon
|
||||
@click.stop="openViewCredit(item)"
|
||||
color="primary"
|
||||
name="preview"
|
||||
size="md"
|
||||
>
|
||||
<QTooltip>{{
|
||||
t('View credits')
|
||||
}}</QTooltip>
|
||||
</QIcon>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</QCardSection>
|
||||
|
||||
<QSeparator class="q-mx-lg" vertical />
|
||||
|
||||
<div class="flex">
|
||||
<div
|
||||
class="flex items-center"
|
||||
v-if="item?.insurances.length"
|
||||
>
|
||||
<div class="flex q-mr-xl">
|
||||
<div class="q-mr-sm color-vn-label">
|
||||
{{ t('Credit') }}:
|
||||
</div>
|
||||
<div class="text-weight-bold">
|
||||
{{ item.insurances[0].credit }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex q-mr-xl">
|
||||
<div class="q-mr-sm color-vn-label">
|
||||
{{ t('Grade') }}:
|
||||
</div>
|
||||
<div class="text-weight-bold">
|
||||
{{ item.insurances[0].grade || '-' }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex">
|
||||
<div class="q-mr-sm color-vn-label">
|
||||
{{ t('Date') }}:
|
||||
</div>
|
||||
<div class="text-weight-bold">
|
||||
{{ toDate(item.insurances[0].created) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
class="flex items-center q-ml-lg q-mr-md cursor-pointer"
|
||||
>
|
||||
<QIcon
|
||||
@click.stop="openViewCredit(item)"
|
||||
color="primary"
|
||||
name="preview"
|
||||
size="md"
|
||||
>
|
||||
<QTooltip>{{ t('View credits') }}</QTooltip>
|
||||
</QIcon>
|
||||
</div>
|
||||
</div>
|
||||
</QCard>
|
||||
</div>
|
||||
<h5 class="flex justify-center color-vn-label" v-else>
|
||||
|
@ -207,6 +211,12 @@ const updateData = () => {
|
|||
.is-active {
|
||||
background-color: var(--vn-light-gray);
|
||||
}
|
||||
.width-state {
|
||||
width: 30%;
|
||||
}
|
||||
.width-data {
|
||||
width: 65%;
|
||||
}
|
||||
</style>
|
||||
|
||||
<i18n>
|
||||
|
|
|
@ -95,7 +95,6 @@ const columns = computed(() => [
|
|||
/>
|
||||
|
||||
<FormModel
|
||||
:form-initial-data="{}"
|
||||
:observe-form-changes="false"
|
||||
:url-create="`Clients/${route.params.id}/setRating`"
|
||||
>
|
||||
|
|
|
@ -139,39 +139,29 @@ const onSubmit = async () => {
|
|||
<QCard class="card-width q-pa-lg">
|
||||
<QCardSection>
|
||||
<QForm>
|
||||
<VnRow class="row q-gutter-md q-mb-md">
|
||||
<div class="col">
|
||||
<QCheckbox :label="t('Enable web access')" v-model="active" />
|
||||
</div>
|
||||
</VnRow>
|
||||
<QCheckbox :label="t('Enable web access')" v-model="active" />
|
||||
|
||||
<VnRow class="row q-gutter-md q-mb-md">
|
||||
<div class="col">
|
||||
<VnInput :label="t('User')" clearable v-model="name" />
|
||||
</div>
|
||||
</VnRow>
|
||||
|
||||
<VnRow class="row q-gutter-md q-mb-md">
|
||||
<div class="col">
|
||||
<VnInput
|
||||
:label="t('Recovery email')"
|
||||
:rules="validate('client.email')"
|
||||
clearable
|
||||
type="email"
|
||||
v-model="email"
|
||||
>
|
||||
<template #append>
|
||||
<QIcon name="info" class="cursor-pointer">
|
||||
<QTooltip>{{
|
||||
t(
|
||||
'This email is used for user to regain access their account'
|
||||
)
|
||||
}}</QTooltip>
|
||||
</QIcon>
|
||||
</template>
|
||||
</VnInput>
|
||||
</div>
|
||||
</VnRow>
|
||||
<div class="q-px-sm">
|
||||
<VnInput :label="t('User')" clearable v-model="name" />
|
||||
<VnInput
|
||||
:label="t('Recovery email')"
|
||||
:rules="validate('client.email')"
|
||||
clearable
|
||||
type="email"
|
||||
v-model="email"
|
||||
class="q-mt-sm"
|
||||
jgallego
commented
ubicar el mail bajo del usuario como en salix, solo hay 3 campos la lectura es mas facil ubicar el mail bajo del usuario como en salix, solo hay 3 campos la lectura es mas facil
cfonseca
commented
Corregido: Corregido: 3bcd4984f5
jsegarra
commented
Lo veo OK Lo veo OK
|
||||
>
|
||||
<template #append>
|
||||
<QIcon name="info" class="cursor-pointer">
|
||||
<QTooltip>{{
|
||||
t(
|
||||
'This email is used for user to regain access their account'
|
||||
)
|
||||
}}</QTooltip>
|
||||
</QIcon>
|
||||
</template>
|
||||
</VnInput>
|
||||
</div>
|
||||
</QForm>
|
||||
</QCardSection>
|
||||
</QCard>
|
||||
|
|
|
@ -84,79 +84,64 @@ function handleLocation(data, location) {
|
|||
</template>
|
||||
|
||||
<template #form="{ data, validate }">
|
||||
<VnRow class="row q-gutter-md q-mb-md">
|
||||
<div class="col">
|
||||
<QCheckbox :label="t('Default')" v-model="data.isDefaultAddress" />
|
||||
</div>
|
||||
</VnRow>
|
||||
<QCheckbox :label="t('Default')" v-model="data.isDefaultAddress" />
|
||||
|
||||
<VnRow class="row q-gutter-md q-mb-md">
|
||||
<div class="col">
|
||||
<VnInput :label="t('Consignee')" clearable v-model="data.nickname" />
|
||||
</div>
|
||||
<div class="col">
|
||||
<VnInput
|
||||
:label="t('Street address')"
|
||||
clearable
|
||||
v-model="data.street"
|
||||
/>
|
||||
</div>
|
||||
<VnInput :label="t('Consignee')" clearable v-model="data.nickname" />
|
||||
|
||||
<VnInput :label="t('Street address')" clearable v-model="data.street" />
|
||||
</VnRow>
|
||||
|
||||
<VnRow class="row q-gutter-md q-mb-md">
|
||||
<div class="col">
|
||||
<VnLocation
|
||||
:rules="validate('Worker.postcode')"
|
||||
:roles-allowed-to-create="['deliveryAssistant']"
|
||||
:options="postcodesOptions"
|
||||
v-model="data.location"
|
||||
@update:model-value="(location) => handleLocation(data, location)"
|
||||
></VnLocation>
|
||||
</div>
|
||||
<div class="col">
|
||||
<VnSelectFilter
|
||||
:label="t('Agency')"
|
||||
:options="agencyModes"
|
||||
:rules="validate('route.agencyFk')"
|
||||
hide-selected
|
||||
option-label="name"
|
||||
option-value="id"
|
||||
v-model="data.agencyModeFk"
|
||||
/>
|
||||
</div>
|
||||
<div class="col">
|
||||
<VnInput :label="t('Phone')" clearable v-model="data.phone" />
|
||||
</div>
|
||||
<div class="col">
|
||||
<VnInput :label="t('Mobile')" clearable v-model="data.mobile" />
|
||||
</div>
|
||||
</VnRow>
|
||||
<VnLocation
|
||||
:rules="validate('Worker.postcode')"
|
||||
:roles-allowed-to-create="['deliveryAssistant']"
|
||||
:options="postcodesOptions"
|
||||
v-model="data.location"
|
||||
@update:model-value="(location) => handleLocation(data, location)"
|
||||
/>
|
||||
|
||||
<div class="row justify-between q-gutter-md q-mb-md">
|
||||
<VnSelectFilter
|
||||
:label="t('Agency')"
|
||||
jsegarra marked this conversation as resolved
Outdated
jsegarra
commented
El layout debe tener(salto de linea = 1 fila) El layout debe tener(salto de linea = 1 fila)
1 checkbox
2 inputs
El componente VnLocation ocupa toda la fila
3 inputs
1 inputs y un input con el botón de crear
cfonseca
commented
Corregido: Corregido: 38d3d49ecb
|
||||
:options="agencyModes"
|
||||
:rules="validate('route.agencyFk')"
|
||||
hide-selected
|
||||
option-label="name"
|
||||
option-value="id"
|
||||
v-model="data.agencyModeFk"
|
||||
class="col"
|
||||
/>
|
||||
<VnInput class="col" :label="t('Phone')" clearable v-model="data.phone" />
|
||||
<VnInput
|
||||
class="col"
|
||||
:label="t('Mobile')"
|
||||
clearable
|
||||
v-model="data.mobile"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<VnRow class="row q-gutter-md q-mb-md">
|
||||
<div class="col">
|
||||
<VnSelectFilter
|
||||
:label="t('Incoterms')"
|
||||
:options="incoterms"
|
||||
hide-selected
|
||||
option-label="name"
|
||||
option-value="code"
|
||||
v-model="data.incotermsFk"
|
||||
/>
|
||||
</div>
|
||||
<div class="col">
|
||||
<VnSelectDialog
|
||||
:label="t('Customs agent')"
|
||||
:options="customsAgents"
|
||||
hide-selected
|
||||
option-label="fiscalName"
|
||||
option-value="id"
|
||||
v-model="data.customsAgentFk"
|
||||
>
|
||||
<template #form>
|
||||
<CustomerNewCustomsAgent @on-data-saved="refreshData()" />
|
||||
</template>
|
||||
</VnSelectDialog>
|
||||
</div>
|
||||
<VnSelectFilter
|
||||
:label="t('Incoterms')"
|
||||
:options="incoterms"
|
||||
hide-selected
|
||||
option-label="name"
|
||||
option-value="code"
|
||||
v-model="data.incotermsFk"
|
||||
/>
|
||||
|
||||
<VnSelectDialog
|
||||
:label="t('Customs agent')"
|
||||
:options="customsAgents"
|
||||
hide-selected
|
||||
option-label="fiscalName"
|
||||
option-value="id"
|
||||
v-model="data.customsAgentFk"
|
||||
>
|
||||
<template #form>
|
||||
<CustomerNewCustomsAgent @on-data-saved="refreshData()" />
|
||||
</template>
|
||||
</VnSelectDialog>
|
||||
</VnRow>
|
||||
</template>
|
||||
</FormModel>
|
||||
|
|
|
@ -25,7 +25,6 @@ const toCustomerCreditContracts = () => {
|
|||
<FormModel
|
||||
:form-initial-data="initialData"
|
||||
:observe-form-changes="false"
|
||||
:default-actions="true"
|
||||
url-create="creditClassifications/createWithInsurance"
|
||||
jsegarra marked this conversation as resolved
jsegarra
commented
Por defecto, el valor es true, así que creo que no es necesario definirla Por defecto, el valor es true, así que creo que no es necesario definirla
cfonseca
commented
Corregido: Corregido: 38d3d49ecb
|
||||
@on-data-saved="toCustomerCreditContracts()"
|
||||
>
|
||||
|
|
|
@ -1,15 +1,22 @@
|
|||
<script setup>
|
||||
import { reactive } from 'vue';
|
||||
import { ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
|
||||
import FetchData from 'components/FetchData.vue';
|
||||
import FormModel from 'components/FormModel.vue';
|
||||
import VnRow from 'components/ui/VnRow.vue';
|
||||
|
||||
const { t } = useI18n();
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
|
||||
const initialData = ref({});
|
||||
|
||||
const setClient = (data) => {
|
||||
console.log(data.credit);
|
||||
initialData.value.credit = data.credit;
|
||||
};
|
||||
|
||||
const toCustomerCredits = () => {
|
||||
router.push({
|
||||
name: 'CustomerCredits',
|
||||
|
@ -21,8 +28,15 @@ const toCustomerCredits = () => {
|
|||
</script>
|
||||
|
||||
<template>
|
||||
<FetchData
|
||||
:filter="filter"
|
||||
@on-fetch="setClient"
|
||||
auto-load
|
||||
:url="`Clients/${route.params.id}/getCard`"
|
||||
/>
|
||||
|
||||
<FormModel
|
||||
:form-initial-data="{}"
|
||||
:form-initial-data="initialData"
|
||||
:observe-form-changes="false"
|
||||
:url-update="`/Clients/${route.params.id}`"
|
||||
@on-data-saved="toCustomerCredits()"
|
||||
|
@ -38,15 +52,12 @@ const toCustomerCredits = () => {
|
|||
</template>
|
||||
|
||||
<template #form="{ data }">
|
||||
<VnRow class="row q-gutter-md q-mb-md">
|
||||
<div class="col">
|
||||
<QInput
|
||||
:label="t('Credit')"
|
||||
type="number"
|
||||
v-model.number="data.credit"
|
||||
/>
|
||||
</div>
|
||||
</VnRow>
|
||||
<QInput
|
||||
:label="t('Credit')"
|
||||
clearable
|
||||
type="number"
|
||||
v-model.number="data.credit"
|
||||
/>
|
||||
</template>
|
||||
</FormModel>
|
||||
</template>
|
||||
|
|
|
@ -57,18 +57,21 @@ watch([client, findOne], ([newClient, newFindOne]) => {
|
|||
const saveData = async () => {
|
||||
try {
|
||||
const formData = new FormData();
|
||||
const files = dms.value.files;
|
||||
|
||||
if (dms.value.files) {
|
||||
for (let i = 0; i < dms.value.files.length; i++)
|
||||
formData.append(dms.value.files[i].name, dms.value.files[i]);
|
||||
if (files && files.length > 0) {
|
||||
jsegarra marked this conversation as resolved
Outdated
jsegarra
commented
Comentario, no es nuestro estilo, hay otras instrucciones para hacer lo mismo pero con menos código. Comentario, no es nuestro estilo, hay otras instrucciones para hacer lo mismo pero con menos código.
cfonseca
commented
Aunque no es su estilo, la repetición de código en varios archivos me intrigó. Viendo espacio para mejora, investigué su origen y hallé varias instancias. Curioso para ser 'no característico' de su enfoque, ¿no? Corregido: Aunque no es su estilo, la repetición de código en varios archivos me intrigó. Viendo espacio para mejora, investigué su origen y hallé varias instancias. Curioso para ser 'no característico' de su enfoque, ¿no?
Corregido: 38d3d49ecb
jsegarra
commented
Fantástico Carlos, tomaré tu commit como ejemplo para nuevos casos y cuando surja la oportunidad cambiar las otras ocurrencias! Fantástico Carlos, tomaré tu commit como ejemplo para nuevos casos y cuando surja la oportunidad cambiar las otras ocurrencias!
|
||||
for (let file of files) {
|
||||
formData.append(file.name, file);
|
||||
}
|
||||
dms.value.hasFileAttached = true;
|
||||
|
||||
const url = `clients/${route.params.id}/uploadFile`;
|
||||
await axios.post(url, formData, {
|
||||
params: dms.value,
|
||||
});
|
||||
notify('globals.dataSaved', 'positive');
|
||||
toCustomerFileManagement();
|
||||
}
|
||||
const url = `clients/${route.params.id}/uploadFile`;
|
||||
await axios.post(url, formData, {
|
||||
params: dms.value,
|
||||
});
|
||||
notify('globals.dataSaved', 'positive');
|
||||
toCustomerFileManagement();
|
||||
} catch (error) {
|
||||
notify(error.message, 'negative');
|
||||
}
|
||||
|
|
|
@ -43,20 +43,21 @@ const setCurrentDms = (data) => {
|
|||
const saveData = async () => {
|
||||
try {
|
||||
const formData = new FormData();
|
||||
const files = dms.value.files;
|
||||
|
||||
if (dms.value.files) {
|
||||
for (let i = 0; i < dms.value.files.length; i++)
|
||||
formData.append(dms.value.files[i].name, dms.value.files[i]);
|
||||
if (files && files.length > 0) {
|
||||
for (let file of files) {
|
||||
formData.append(file.name, file);
|
||||
}
|
||||
dms.value.hasFileAttached = true;
|
||||
|
||||
const url = `dms/${route.params.dmsId}/updateFile`;
|
||||
await axios.post(url, formData, {
|
||||
params: dms.value,
|
||||
});
|
||||
notify('globals.dataSaved', 'positive');
|
||||
toCustomerFileManagement();
|
||||
}
|
||||
|
||||
const url = `dms/${route.params.dmsId}/updateFile`;
|
||||
await axios.post(url, formData, {
|
||||
params: dms.value,
|
||||
});
|
||||
|
||||
notify('globals.dataSaved', 'positive');
|
||||
toCustomerFileManagement();
|
||||
} catch (error) {
|
||||
notify(error.message, 'negative');
|
||||
}
|
||||
|
|
|
@ -17,7 +17,6 @@ const onDataSaved = (dataSaved) => {
|
|||
|
||||
<template>
|
||||
<FormModelPopup
|
||||
:form-initial-data="{}"
|
||||
:title="t('New customs agent')"
|
||||
@on-data-saved="onDataSaved($event)"
|
||||
model="customer"
|
||||
|
|
Comentario, ¿Podemos cambiar "El cliente {verbo} {estado}" por "Cliente {estado}"?
Cliente inactivo
Cliente congelado
Cliente con riesgo
cliente no comprobado
Así está en Salix:
Client frozen: Cliente congelado
Client has debt: Cliente con riesgo
Client inactive: Cliente inactivo
Client not checked: Cliente no comprobado
Gracias
Los elementos a los cuales este comentario hace referencia fueron creados hace 17 MESES, igualmente lo corregí.
Corregido:
38d3d49ecb
Genial!
Gracias Carlos