0
0
Fork 0

perf: remove almost fonseca code

This commit is contained in:
Javier Segarra 2024-11-23 00:33:30 +01:00
parent 12dcb51fbe
commit 276dc233c1
10 changed files with 121 additions and 263 deletions

View File

@ -2,6 +2,7 @@
import { onBeforeMount, ref, watch } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute, useRouter } from 'vue-router';
import VnPaginate from 'src/components/ui/VnPaginate.vue';
import axios from 'axios';
@ -52,7 +53,7 @@ const addressFilter = {
onBeforeMount(() => {
const { id } = route.params;
getAddressesData(id);
// getAddressesData(id);
getClientData(id);
});
@ -60,22 +61,14 @@ watch(
() => route.params.id,
(newValue) => {
if (!newValue) return;
getAddressesData(newValue);
// getAddressesData(newValue);
getClientData(newValue);
}
);
const getAddressesData = async (id) => {
try {
const { data } = await axios.get(`Clients/${id}/addresses`, {
params: { filter: JSON.stringify(addressFilter) },
});
addresses.value = data;
sortAddresses();
} catch (error) {
return error;
}
};
async function onFetch(data) {
addresses.value = data;
sortAddresses();
}
const getClientData = async (id) => {
try {
@ -125,7 +118,16 @@ const toCustomerAddressEdit = (addressId) => {
<template>
<div class="full-width flex justify-center">
<QCard class="card-width q-pa-lg" v-if="addresses.length">
<QCard class="card-width q-pa-lg">
<VnPaginate
@on-fetch="onFetch"
auto-load
data-key="CustomerAddresses"
order="id DESC"
ref="vnPaginateRef"
:filter="addressFilter"
:url="`Clients/${route.params.id}/addresses`"
></VnPaginate>
<QCardSection>
<div
v-for="(item, index) in addresses"

View File

@ -51,12 +51,7 @@ function onBeforeSave(formData, originalData) {
@on-fetch="(data) => (businessTypes = data)"
auto-load
/>
<FormModel
:url="`Clients/${route.params.id}`"
auto-load
model="customer"
:mapper="onBeforeSave"
>
<FormModel auto-load model="customer" :mapper="onBeforeSave">
<template #form="{ data, validate }">
<VnRow>
<VnInput

View File

@ -28,12 +28,7 @@ const getBankEntities = (data, formData) => {
</script>
<template>
<FormModel
:url-update="`Clients/${route.params.id}`"
:url="`Clients/${route.params.id}/getCard`"
auto-load
model="customer"
>
<FormModel :url-update="`Clients/${route.params.id}`" auto-load model="customer">
<template #form="{ data, validate }">
<VnRow>
<VnSelect

View File

@ -93,22 +93,6 @@ const columns = computed(() => [
<WorkerDescriptorProxy :id="row.worker.id" />
</template>
</VnTable>
<!-- <QTable
:columns="columns"
:pagination="{ rowsPerPage: 0 }"
:rows="rows"
hide-bottom
row-key="id"
v-model:selected="selected"
class="card-width q-px-lg"
>
<template #body-cell-employee="{ row }">
<QTd @click.stop>
<span class="link">{{ row.worker.user.nickname }}</span>
<WorkerDescriptorProxy :id="row.clientFk" />
</QTd>
</template>
</QTable> -->
</template>
<i18n>

View File

@ -34,7 +34,6 @@ function handleLocation(data, location) {
/>
<FormModel
:url-update="`Clients/${route.params.id}/updateFiscalData`"
:url="`Clients/${route.params.id}/getCard`"
auto-load
model="customer"
>

View File

@ -1,165 +1,79 @@
<script setup>
import { computed, onBeforeMount, ref, watch, nextTick } from 'vue';
import { ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute } from 'vue-router';
import VnInputDate from 'components/common/VnInputDate.vue';
import VnInput from 'src/components/common/VnInput.vue';
import axios from 'axios';
import useNotify from 'src/composables/useNotify';
import { useStateStore } from 'stores/useStateStore';
import FormModel from 'components/FormModel.vue';
import FetchData from 'components/FetchData.vue';
import VnInputNumber from 'src/components/common/VnInputNumber.vue';
const formModelRef = ref(false);
const { t } = useI18n();
const route = useRoute();
const { notify } = useNotify();
const stateStore = useStateStore();
const amountInputRef = ref(null);
const initialDated = Date.vnNew();
const unpaidClient = ref(false);
const isLoading = ref(false);
const amount = ref(null);
const dated = ref(initialDated);
const initialData = ref({
dated: initialDated,
dated: Date.vnNew(),
amount: null,
});
const hasChanged = computed(() => {
return (
initialData.value.dated !== dated.value ||
initialData.value.amount !== amount.value
);
});
onBeforeMount(() => {
getData(route.params.id);
});
watch(
() => route.params.id,
(newValue) => {
if (!newValue) return;
getData(newValue);
}
);
const getData = async (id) => {
const filter = { where: { clientFk: id } };
try {
const { data } = await axios.get('ClientUnpaids', {
params: { filter: JSON.stringify(filter) },
});
if (data.length) {
setValues(data[0]);
} else {
defaultValues();
}
} catch (error) {
defaultValues();
}
};
const setValues = (data) => {
unpaidClient.value = true;
amount.value = data.amount;
dated.value = data.dated;
initialData.value = data;
};
const defaultValues = () => {
unpaidClient.value = false;
initialData.value.amount = null;
setInitialData();
};
const setInitialData = () => {
amount.value = initialData.value.amount;
dated.value = initialData.value.dated;
};
const onSubmit = async () => {
isLoading.value = true;
const payload = {
amount: amount.value,
const filterClientFindOne = {
fields: ['unpaid', 'dated', 'amount'],
where: {
clientFk: route.params.id,
dated: dated.value,
};
try {
await axios.patch('ClientUnpaids', payload);
notify('globals.dataSaved', 'positive');
unpaidClient.value = true;
} catch (error) {
notify('errors.writeRequest', 'negative');
} finally {
isLoading.value = false;
}
},
};
watch(
() => unpaidClient.value,
async (val) => {
await nextTick();
if (val) amountInputRef.value.focus();
}
);
</script>
<template>
<Teleport v-if="stateStore?.isSubToolbarShown()" to="#st-actions">
<QBtnGroup push class="q-gutter-x-sm">
<QBtn
:disabled="!hasChanged"
:label="t('globals.reset')"
:loading="isLoading"
@click="setInitialData"
color="primary"
flat
icon="restart_alt"
type="reset"
/>
<QBtn
:disabled="!hasChanged"
:label="t('globals.save')"
:loading="isLoading"
@click="onSubmit"
color="primary"
icon="save"
/>
</QBtnGroup>
</Teleport>
<div class="full-width flex justify-center">
<QCard class="card-width q-pa-lg">
<QForm>
<FetchData
:filter="filterClientFindOne"
auto-load
url="ClientUnpaids"
@on-fetch="
(data) => {
const unpaid = data.length == 1;
initialData = { ...data[0], unpaid };
}
"
/>
<QCard>
<FormModel
v-if="'unpaid' in initialData"
:observe-form-changes="false"
ref="formModelRef"
model="unpaid"
url-update="ClientUnpaids"
:mapper="(formData) => ({ ...formData, clientFk: route.params.id })"
:form-initial-data="initialData"
>
<template #form="{ data }">
{{ data }}
<VnRow>
<div class="col">
<QCheckbox :label="t('Unpaid client')" v-model="unpaidClient" />
</div>
<QCheckbox :label="t('Unpaid client')" v-model="data.unpaid" />
</VnRow>
<VnRow class="row q-gutter-md q-mb-md" v-show="unpaidClient">
<VnRow class="row q-gutter-md q-mb-md" v-show="data.unpaid">
<div class="col">
<VnInputDate :label="t('Date')" v-model="dated" />
<VnInputDate :label="t('Date')" v-model="data.dated" />
</div>
<div class="col">
<VnInput
<VnInputNumber
ref="amountInputRef"
:label="t('Amount')"
clearable
type="number"
v-model="amount"
v-model="data.amount"
autofocus
>
<template #append></template></VnInput
<template #append></template></VnInputNumber
>
</div>
</VnRow>
</QForm>
</QCard>
</div>
</template>
</FormModel>
</QCard>
<!-- </div> -->
</template>
<i18n>

View File

@ -25,10 +25,9 @@ async function hasCustomerRole() {
</script>
<template>
<FormModel
url="VnUsers/preview"
:url-update="`Clients/${route.params.id}/updateUser`"
:filter="filter"
model="webAccess"
model="customer"
:mapper="
({ active, name, email }) => {
return {
@ -42,7 +41,7 @@ async function hasCustomerRole() {
auto-load
>
<template #form="{ data, validate }">
<QCheckbox :label="t('Enable web access')" v-model="data.active" />
<QCheckbox :label="t('Enable web access')" v-model="data.account.active" />
<VnInput :label="t('User')" clearable v-model="data.name" />
<VnInput
:label="t('Recovery email')"

View File

@ -1,14 +1,14 @@
<script setup>
import { computed, onBeforeMount, ref, watch } from 'vue';
import { computed, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute } from 'vue-router';
import axios from 'axios';
import FetchData from 'src/components/FetchData.vue';
import { toCurrency, toDateHourMin } from 'src/filters';
import CustomerCloseIconTooltip from '../components/CustomerCloseIconTooltip.vue';
import CustomerCheckIconTooltip from '../components/CustomerCheckIconTooltip.vue';
import CustomerCloseIconTooltip from 'src/components/CustomerCloseIconTooltip.vue';
import CustomerCheckIconTooltip from 'src/components/CustomerCheckIconTooltip.vue';
const { t } = useI18n();
const route = useRoute();
@ -20,10 +20,11 @@ const filter = {
{ relation: 'mandateType', scope: { fields: ['id', 'name'] } },
{ relation: 'company', scope: { fields: ['id', 'code'] } },
],
where: { clientFk: null },
where: { clientFk: route.params.id },
order: ['created DESC'],
limit: 20,
};
const ClientDmsRef = ref(false);
const tableColumnComponents = {
state: {
@ -50,7 +51,7 @@ const tableColumnComponents = {
component: CustomerCheckIconTooltip,
props: ({ row }) => ({
transaction: row,
promise: refreshData,
promise: () => ClientDmsRef.value.fetch(),
}),
event: () => {},
},
@ -89,72 +90,45 @@ const columns = computed(() => [
name: 'validate',
},
]);
onBeforeMount(() => {
getData(route.params.id);
});
watch(
() => route.params.id,
(newValue) => {
if (!newValue) return;
getData(newValue);
}
);
const getData = async (id) => {
filter.where.clientFk = id;
try {
const { data } = await axios.get('clients/transactions', {
params: { filter: JSON.stringify(filter) },
});
rows.value = data;
} catch (error) {
return error;
}
};
const refreshData = () => {
getData(route.params.id);
};
</script>
<template>
<div class="full-width flex justify-center">
<QPage class="card-width q-pa-lg">
<QTable
:columns="columns"
:pagination="{ rowsPerPage: 12 }"
:rows="rows"
class="full-width q-mt-md"
row-key="id"
v-if="rows?.length"
>
<template #body-cell="props">
<QTd :props="props">
<QTr :props="props">
<component
:is="tableColumnComponents[props.col.name].component"
@click="
tableColumnComponents[props.col.name].event(props)
"
class="rounded-borders q-pa-sm"
v-bind="
tableColumnComponents[props.col.name].props(props)
"
>
{{ props.value }}
</component>
</QTr>
</QTd>
</template>
</QTable>
<FetchData
ref="ClientDmsRef"
:filter="filter"
@on-fetch="(data) => (rows = data)"
auto-load
url="Clients/transactions"
/>
<QPage class="card-width q-pa-lg">
<QTable
:columns="columns"
:pagination="{ rowsPerPage: 12 }"
:rows="rows"
class="full-width q-mt-md"
row-key="id"
v-if="rows?.length"
>
<template #body-cell="props">
<QTd :props="props">
<QTr :props="props">
<component
:is="tableColumnComponents[props.col.name].component"
@click="tableColumnComponents[props.col.name].event(props)"
class="rounded-borders q-pa-sm"
v-bind="tableColumnComponents[props.col.name].props(props)"
>
{{ props.value }}
</component>
</QTr>
</QTd>
</template>
</QTable>
<h5 class="flex justify-center color-vn-label" v-else>
{{ t('globals.noResults') }}
</h5>
</QPage>
</div>
<h5 class="flex justify-center color-vn-label" v-else>
{{ t('globals.noResults') }}
</h5>
</QPage>
</template>
<i18n>

View File

@ -1,9 +1,8 @@
<script setup>
import { onBeforeMount, reactive, ref } from 'vue';
import { reactive, ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useRoute, useRouter } from 'vue-router';
import axios from 'axios';
import VnLocation from 'src/components/common/VnLocation.vue';
import FetchData from 'components/FetchData.vue';
import FormModel from 'components/FormModel.vue';
@ -25,20 +24,6 @@ const agencyModes = ref([]);
const incoterms = ref([]);
const customsAgents = ref([]);
onBeforeMount(() => {
urlCreate.value = `Clients/${route.params.id}/createAddress`;
getCustomsAgents();
});
const getCustomsAgents = async () => {
const { data } = await axios.get('CustomsAgents');
customsAgents.value = data;
};
const refreshData = () => {
getCustomsAgents();
};
const toCustomerAddress = () => {
router.push({
name: 'CustomerAddress',
@ -54,6 +39,11 @@ function handleLocation(data, location) {
data.provinceFk = provinceFk;
data.countryFk = countryFk;
}
function onAgentCreated(requestResponse, data) {
customsAgents.value.push(requestResponse);
data.customsAgentFk = requestResponse.id;
}
</script>
<template>
@ -128,6 +118,7 @@ function handleLocation(data, location) {
/>
<VnSelectDialog
url="CustomsAgents"
:label="t('Customs agent')"
:options="customsAgents"
hide-selected
@ -137,7 +128,12 @@ function handleLocation(data, location) {
:tooltip="t('Create a new expense')"
>
<template #form>
<CustomerNewCustomsAgent @on-data-saved="refreshData()" />
<CustomerNewCustomsAgent
@on-data-saved="
(_, requestResponse) =>
onAgentCreated(requestResponse, data)
"
/>
</template>
</VnSelectDialog>
</VnRow>

View File

@ -144,7 +144,7 @@ function handleLocation(data, location) {
:url="`Addresses/${route.params.addressId}`"
@on-data-saved="onDataSaved()"
auto-load
model="client"
model="customer"
>
<template #moreActions>
<QBtn