fix: refs #7323 auto fill bic #642
|
@ -73,6 +73,10 @@ const $props = defineProps({
|
|||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
params: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
|
||||
const { t } = useI18n();
|
||||
|
@ -153,9 +157,14 @@ async function fetchFilter(val) {
|
|||
? optionValue.value
|
||||
: optionFilter.value ?? optionLabel.value);
|
||||
|
||||
const defaultWhere = $props.useLike
|
||||
? { [key]: { like: `%${val}%` } }
|
||||
: { [key]: val };
|
||||
let defaultWhere = {};
|
||||
if ($props.filterOptions.length) {
|
||||
|
||||
defaultWhere = $props.filterOptions.reduce((obj, prop) => {
|
||||
jorgep marked this conversation as resolved
jsegarra
commented
Porque la logica de $props.useLike no se puede usar en el reduce? Porque la logica de $props.useLike no se puede usar en el reduce?
|
||||
if (!obj.or) obj.or = [];
|
||||
obj.or.push({ [prop]: getVal(val) });
|
||||
jorgep marked this conversation as resolved
Outdated
jsegarra
commented
Okey, pero ahora tenemos la misma logica 2 veces. La unica diferencia es como gestionas la variable key. Mas limpio, o que te parece? Okey, pero ahora tenemos la misma logica 2 veces. La unica diferencia es como gestionas la variable key.
Porque no sacas el operador ternario a una funcion y luego lo asignas como valor a esa Key
Mas limpio, o que te parece?
|
||||
return obj;
|
||||
}, {});
|
||||
} else defaultWhere = { [key]: getVal(val) };
|
||||
const where = { ...(val ? defaultWhere : {}), ...$props.where };
|
||||
const fetchOptions = { where, include, limit };
|
||||
if (fields) fetchOptions.fields = fields;
|
||||
|
@ -194,6 +203,8 @@ async function filterHandler(val, update) {
|
|||
function nullishToTrue(value) {
|
||||
return value ?? true;
|
||||
}
|
||||
|
||||
const getVal = (val) => ($props.useLike ? { like: `%${val}%` } : val);
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -205,6 +216,7 @@ function nullishToTrue(value) {
|
|||
:limit="limit"
|
||||
:sort-by="sortBy"
|
||||
:fields="fields"
|
||||
:params="params"
|
||||
/>
|
||||
<QSelect
|
||||
v-model="value"
|
||||
|
|
|
@ -19,7 +19,6 @@ const { t } = useI18n();
|
|||
const user = useState().getUser();
|
||||
|
||||
const companiesOptions = ref([]);
|
||||
const workersOptions = ref([]);
|
||||
const payMethodsOptions = ref([]);
|
||||
const bankEntitiesOptions = ref([]);
|
||||
const formData = ref({ companyFk: user.value.companyFk, isFreelance: false });
|
||||
|
@ -56,6 +55,18 @@ function generateCodeUser(worker) {
|
|||
|
||||
if (!worker.companyFk) worker.companyFk = user.companyFk;
|
||||
}
|
||||
|
||||
async function autofillBic(worker) {
|
||||
if (!worker || !worker.iban) return;
|
||||
|
||||
let bankEntityId = parseInt(worker.iban.substr(4, 4));
|
||||
jorgep marked this conversation as resolved
jsegarra
commented
Con esto obtenemos las posiciones 5,6, 7 y 8, no? Con esto obtenemos las posiciones 5,6, 7 y 8, no?
jorgep
commented
Sí, lógica de Salix. Sí, lógica de Salix.
|
||||
let filter = { where: { id: bankEntityId } };
|
||||
|
||||
const { data } = await axios.get(`BankEntities`, { params: { filter } });
|
||||
const hasData = data && data[0];
|
||||
if (hasData) worker.bankEntityFk = data[0].id;
|
||||
jorgep marked this conversation as resolved
jsegarra
commented
hasData solo puede tener 2 valores no? hasData solo puede tener 2 valores no?
Porque lo que es if...else
jsegarra
commented
De todas maneras si vas a hacer una asignacion porque no quitas el if...else De todas maneras si vas a hacer una asignacion porque no quitas el if...else
jorgep
commented
Está copiado de salix. De todas maneras, te lo he puesto como en el comentario de abajo. Está copiado de salix. De todas maneras, te lo he puesto como en el comentario de abajo.
|
||||
else if (!hasData) worker.bankEntityFk = undefined;
|
||||
}
|
||||
</script>
|
||||
<template>
|
||||
<FetchData
|
||||
|
@ -63,11 +74,6 @@ function generateCodeUser(worker) {
|
|||
@on-fetch="(data) => (companiesOptions = data)"
|
||||
auto-load
|
||||
/>
|
||||
<FetchData
|
||||
url="Workers/search"
|
||||
@on-fetch="(data) => (workersOptions = data)"
|
||||
auto-load
|
||||
/>
|
||||
<FetchData
|
||||
url="Paymethods"
|
||||
@on-fetch="(data) => (payMethodsOptions = data)"
|
||||
|
@ -146,7 +152,7 @@ function generateCodeUser(worker) {
|
|||
<VnSelect
|
||||
:label="t('worker.create.boss')"
|
||||
v-model="data.bossFk"
|
||||
:options="workersOptions"
|
||||
url="Workers/search"
|
||||
option-value="id"
|
||||
option-label="name"
|
||||
hide-selected
|
||||
|
@ -220,6 +226,7 @@ function generateCodeUser(worker) {
|
|||
:label="t('worker.create.iban')"
|
||||
:rules="validate('Worker.iban')"
|
||||
:disable="formData.isFreelance"
|
||||
@update:model-value="autofillBic(data)"
|
||||
>
|
||||
<template #append>
|
||||
<QIcon name="info" class="cursor-info">
|
||||
|
@ -237,6 +244,8 @@ function generateCodeUser(worker) {
|
|||
:roles-allowed-to-create="['salesAssistant', 'hr']"
|
||||
:rules="validate('Worker.bankEntity')"
|
||||
:disable="formData.isFreelance"
|
||||
@update:model-value="autofillBic(data)"
|
||||
:filter-options="['bic', 'name']"
|
||||
>
|
||||
<template #form>
|
||||
<CreateBankEntityForm
|
||||
|
|
|
@ -23,7 +23,6 @@ const { t } = useI18n();
|
|||
const tableRef = ref();
|
||||
const { viewSummary } = useSummaryDialog();
|
||||
const companiesOptions = ref([]);
|
||||
const workersOptions = ref([]);
|
||||
const payMethodsOptions = ref([]);
|
||||
const bankEntitiesOptions = ref([]);
|
||||
const postcodesOptions = ref([]);
|
||||
|
@ -125,6 +124,16 @@ function generateCodeUser(worker) {
|
|||
|
||||
if (!worker.companyFk) worker.companyFk = user.companyFk;
|
||||
}
|
||||
|
||||
async function autofillBic(worker) {
|
||||
jorgep marked this conversation as resolved
jsegarra
commented
Espera, la misma lógica 2 veces? Espera, la misma lógica 2 veces?
Mmm...podemos externalizar a un js dentro del módulo?
jorgep
commented
Ya hay una tarea para eso. Porque no es cosa de WorkerCreate, está en toda la web. Ya hay una tarea para eso. Porque no es cosa de WorkerCreate, está en toda la web.
|
||||
if (!worker || !worker.iban) return;
|
||||
|
||||
let bankEntityId = parseInt(worker.iban.substr(4, 4));
|
||||
let filter = { where: { id: bankEntityId } };
|
||||
|
||||
const { data } = await axios.get(`BankEntities`, { params: { filter } });
|
||||
jorgep marked this conversation as resolved
jsegarra
commented
Lo dejaria asi Lo dejaria asi
`worker.bankEntityFk = data?.[0]?.id ?? undefined;`
|
||||
worker.bankEntityFk = data?.[0]?.id ?? undefined;
|
||||
}
|
||||
</script>
|
||||
<template>
|
||||
<VnSearchbar
|
||||
|
@ -137,11 +146,6 @@ function generateCodeUser(worker) {
|
|||
@on-fetch="(data) => (companiesOptions = data)"
|
||||
auto-load
|
||||
/>
|
||||
<FetchData
|
||||
url="Workers/search"
|
||||
@on-fetch="(data) => (workersOptions = data)"
|
||||
auto-load
|
||||
/>
|
||||
<FetchData
|
||||
url="Paymethods"
|
||||
@on-fetch="(data) => (payMethodsOptions = data)"
|
||||
|
@ -225,7 +229,7 @@ function generateCodeUser(worker) {
|
|||
<VnSelect
|
||||
:label="t('worker.create.boss')"
|
||||
v-model="data.bossFk"
|
||||
:options="workersOptions"
|
||||
jorgep
commented
Cargaba demasiados datos. Cargaba demasiados datos.
|
||||
url="Workers/search"
|
||||
option-value="id"
|
||||
option-label="name"
|
||||
hide-selected
|
||||
|
@ -290,6 +294,7 @@ function generateCodeUser(worker) {
|
|||
v-model="data.iban"
|
||||
:label="t('worker.create.iban')"
|
||||
:disable="data.isFreelance"
|
||||
@update:model-value="autofillBic(data)"
|
||||
>
|
||||
<template #append>
|
||||
<QIcon name="info" class="cursor-info">
|
||||
|
@ -308,6 +313,8 @@ function generateCodeUser(worker) {
|
|||
hide-selected
|
||||
:roles-allowed-to-create="['salesAssistant', 'hr']"
|
||||
:disable="data.isFreelance"
|
||||
@update:model-value="autofillBic(data)"
|
||||
:filter-options="['bic', 'name']"
|
||||
>
|
||||
<template #form>
|
||||
<CreateBankEntityForm
|
||||
|
|
Permite filtrar por varias opciones. Antes, si era un digito, solo filtraba por id.