feat: refs #8945 add Fixed Asset management components
gitea/salix-front/pipeline/pr-dev There was a failure building this commit
Details
gitea/salix-front/pipeline/pr-dev There was a failure building this commit
Details
This commit is contained in:
parent
47bde21df5
commit
ca0d90c07e
|
@ -0,0 +1,215 @@
|
|||
<script setup>
|
||||
import { useRoute } from 'vue-router';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { ref } from 'vue';
|
||||
import FormModel from 'components/FormModel.vue';
|
||||
import VnRow from 'components/ui/VnRow.vue';
|
||||
import VnSelect from 'components/common/VnSelect.vue';
|
||||
import VnInput from 'components/common/VnInput.vue';
|
||||
import VnInputDate from 'components/common/VnInputDate.vue';
|
||||
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
|
||||
import VnAccountNumber from 'src/components/common/VnAccountNumber.vue';
|
||||
import VnInputNumber from 'src/components/common/VnInputNumber.vue';
|
||||
import VnCheckbox from 'src/components/common/VnCheckbox.vue';
|
||||
import { toCurrency } from 'src/filters';
|
||||
import FetchData from 'src/components/FetchData.vue';
|
||||
|
||||
const { t } = useI18n();
|
||||
const route = useRoute();
|
||||
|
||||
const isNew = Boolean(!route.params.id);
|
||||
const natureOptions = ref([]);
|
||||
const prueba = ref();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<FetchData
|
||||
url="Ppes/getNatures"
|
||||
@on-fetch="(data) => (natureOptions = data)"
|
||||
auto-load
|
||||
/>
|
||||
<VnSubToolbar v-if="isNew" />
|
||||
<div class="q-pa-md">
|
||||
<FormModel :url-update="`Ppes/${route.params.id}`" model="FixedAsset" auto-load>
|
||||
<template #form="{ data }">
|
||||
<VnRow>
|
||||
<VnInput
|
||||
:label="t('globals.description')"
|
||||
v-model="data.description"
|
||||
fill-input
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
url="companies"
|
||||
:label="t('globals.company')"
|
||||
v-model="data.companyFk"
|
||||
option-value="id"
|
||||
option-label="code"
|
||||
hide-selected
|
||||
/>
|
||||
<VnSelect
|
||||
:label="t('fixedAsset.nature')"
|
||||
v-model="data.nature"
|
||||
:options="natureOptions"
|
||||
option-value="nature"
|
||||
option-label="nature"
|
||||
hide-selected
|
||||
/>
|
||||
<VnInputNumber
|
||||
:label="t('fixedAsset.value')"
|
||||
v-model="data.value"
|
||||
fill-input
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
url="Ppes/getSubAccounts"
|
||||
:label="t('fixedAsset.account')"
|
||||
v-model="data.account"
|
||||
option-value="code"
|
||||
option-label="code"
|
||||
hide-selected
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel>{{
|
||||
`${scope.opt?.description}`
|
||||
}}</QItemLabel>
|
||||
<QItemLabel caption>
|
||||
{{ `#${scope.opt?.code}` }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
<VnSelect
|
||||
url="Ppes/getEndowments"
|
||||
:label="t('fixedAsset.endowment')"
|
||||
v-model="data.endowment"
|
||||
option-value="code"
|
||||
option-label="code"
|
||||
hide-selected
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel>{{
|
||||
`${scope.opt?.description}`
|
||||
}}</QItemLabel>
|
||||
<QItemLabel caption>
|
||||
{{ `#${scope.opt?.code}` }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
<VnAccountNumber
|
||||
:label="t('fixedAsset.elementAccount')"
|
||||
v-model="data.elementAccount"
|
||||
fill-input
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
url="PpeLocations"
|
||||
:label="t('fixedAsset.location')"
|
||||
v-model="data.locationFk"
|
||||
option-value="code"
|
||||
:option-label="(value) => `${value.code} - ${value.description}`"
|
||||
hide-selected
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel>{{
|
||||
`${scope.opt?.description}`
|
||||
}}</QItemLabel>
|
||||
<QItemLabel caption>
|
||||
{{ `#${scope.opt?.code}` }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
<VnSelect
|
||||
url="PpeGroups"
|
||||
:label="t('globals.group')"
|
||||
v-model="data.groupFk"
|
||||
option-value="id"
|
||||
option-label="description"
|
||||
hide-selected
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnInputDate
|
||||
:label="t('fixedAsset.firstAmortizated')"
|
||||
v-model="data.firstAmortizated"
|
||||
placeholder="dd-mm-aaaa"
|
||||
fill-input
|
||||
/>
|
||||
<VnInputDate
|
||||
:label="t('fixedAsset.lastAmortizated')"
|
||||
v-model="data.lastAmortizated"
|
||||
placeholder="dd-mm-aaaa"
|
||||
fill-input
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnInputDate
|
||||
:label="t('fixedAsset.finished')"
|
||||
v-model="data.finished"
|
||||
placeholder="dd-mm-aaaa"
|
||||
fill-input
|
||||
/>
|
||||
<VnInputNumber
|
||||
:label="t('fixedAsset.amortization')"
|
||||
v-model="data.amortization"
|
||||
fill-input
|
||||
/>
|
||||
<VnSelect
|
||||
url="PpePlans"
|
||||
:label="t('fixedAsset.plan')"
|
||||
v-model="data.planFk"
|
||||
:option-label="(value) => `${value.rate}% - ${value.days} days`"
|
||||
hide-selected
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel>{{
|
||||
`${scope.opt?.rate}% - ${scope.opt?.days} days`
|
||||
}}</QItemLabel>
|
||||
<QItemLabel caption>
|
||||
{{ `#${scope.opt?.id}` }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnInputDate
|
||||
:label="t('fixedAsset.discharged')"
|
||||
v-model="data.discharged"
|
||||
placeholder="dd-mm-aaaa"
|
||||
fill-input
|
||||
/>
|
||||
<VnInput
|
||||
:label="t('fixedAsset.cause')"
|
||||
v-model="data.cause"
|
||||
fill-input
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnCheckbox
|
||||
v-model="data.isInvestmentAsset"
|
||||
:label="t('fixedAsset.isInvestmentAsset')"
|
||||
/>
|
||||
<VnCheckbox :label="t('fixedAsset.isDone')" v-model="data.isDone" />
|
||||
</VnRow>
|
||||
</template>
|
||||
</FormModel>
|
||||
</div>
|
||||
</template>
|
|
@ -0,0 +1,12 @@
|
|||
<script setup>
|
||||
import VnCard from 'components/common/VnCard.vue';
|
||||
import FixedAssetDescriptor from 'pages/FixedAsset/Card/FixedAssetDescriptor.vue';
|
||||
</script>
|
||||
<template>
|
||||
<VnCard
|
||||
data-key="FixedAsset"
|
||||
url="Ppes"
|
||||
:descriptor="FixedAssetDescriptor"
|
||||
:filter="{ where: { id: $route.params.id } }"
|
||||
/>
|
||||
</template>
|
|
@ -0,0 +1,103 @@
|
|||
<script setup>
|
||||
import { computed, ref } from 'vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
import CardDescriptor from 'src/components/ui/CardDescriptor.vue';
|
||||
import VnLv from 'src/components/ui/VnLv.vue';
|
||||
import FixedAssetCard from './FixedAssetCard.vue';
|
||||
import EditPictureForm from 'src/components/EditPictureForm.vue';
|
||||
import VnImg from 'src/components/ui/VnImg.vue';
|
||||
import FixedAssetDescriptorMenu from './FixedAssetDescriptorMenu.vue';
|
||||
|
||||
const route = useRoute();
|
||||
|
||||
const entityId = computed(() => {
|
||||
return Number(props.id || route.params.id);
|
||||
});
|
||||
|
||||
const props = defineProps({
|
||||
id: {
|
||||
type: Number,
|
||||
required: false,
|
||||
default: null,
|
||||
},
|
||||
summary: {
|
||||
type: Object,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
|
||||
const image = ref(null);
|
||||
const showEditPhotoForm = ref(false);
|
||||
const toggleEditPictureForm = () => {
|
||||
showEditPhotoForm.value = !showEditPhotoForm.value;
|
||||
};
|
||||
</script>
|
||||
<template>
|
||||
<CardDescriptor
|
||||
v-bind="$attrs"
|
||||
:id="entityId"
|
||||
:card="FixedAssetCard"
|
||||
title="description"
|
||||
module="FixedAsset"
|
||||
>
|
||||
<template #before>
|
||||
<div class="relative-position">
|
||||
<VnImg
|
||||
ref="image"
|
||||
:id="parseInt(entityId)"
|
||||
collection="fixedAsset"
|
||||
resolution="520x520"
|
||||
class="photo"
|
||||
>
|
||||
<template #error>
|
||||
<div
|
||||
class="absolute-full picture text-center q-pa-md flex flex-center"
|
||||
>
|
||||
<div>
|
||||
<div
|
||||
class="text-grey-5"
|
||||
style="opacity: 0.4; font-size: 5vh"
|
||||
>
|
||||
<QIcon name="vn:claims" />
|
||||
</div>
|
||||
<div class="text-grey-5" style="opacity: 0.4">
|
||||
{{ t('fixedAsset.imageNotFound') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template> </VnImg
|
||||
><QBtn
|
||||
color="primary"
|
||||
size="lg"
|
||||
round
|
||||
class="edit-photo-btn"
|
||||
@click="toggleEditPictureForm()"
|
||||
>
|
||||
<QIcon name="edit" size="sm" />
|
||||
<QDialog ref="editPhotoFormDialog" v-model="showEditPhotoForm">
|
||||
<EditPictureForm
|
||||
collection="fixedAsset"
|
||||
:id="entityId"
|
||||
@close-form="toggleEditPictureForm()"
|
||||
@on-photo-uploaded="handlePhotoUpdated"
|
||||
/>
|
||||
</QDialog>
|
||||
</QBtn>
|
||||
</div>
|
||||
</template>
|
||||
<template #body="{ entity }">
|
||||
<VnLv
|
||||
:label="$t('fixedAsset.elementAccount')"
|
||||
:value="entity.elementAccount"
|
||||
copy
|
||||
/>
|
||||
<VnLv
|
||||
:label="$t('fixedAsset.location')"
|
||||
:value="entity.location.description"
|
||||
/>
|
||||
</template>
|
||||
<template #menu="{ entity }">
|
||||
<FixedAssetDescriptorMenu :fixedAsset="entity" />
|
||||
</template>
|
||||
</CardDescriptor>
|
||||
</template>
|
|
@ -0,0 +1,47 @@
|
|||
<script setup>
|
||||
import axios from 'axios';
|
||||
import { useQuasar } from 'quasar';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useRouter } from 'vue-router';
|
||||
import VnConfirm from 'components/ui/VnConfirm.vue';
|
||||
|
||||
const props = defineProps({
|
||||
fixedAsset: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
});
|
||||
const router = useRouter();
|
||||
const quasar = useQuasar();
|
||||
const { t } = useI18n();
|
||||
const fixedAssetId = props.fixedAsset.id;
|
||||
|
||||
function confirmRemove() {
|
||||
quasar
|
||||
.dialog({
|
||||
component: VnConfirm,
|
||||
componentProps: {
|
||||
title: t('fixedAsset.confirmDeletion'),
|
||||
message: t('fixedAsset.confirmDeletionMessage'),
|
||||
promise: remove,
|
||||
},
|
||||
})
|
||||
.onOk(async () => await router.push({ name: 'FixedAssetList' }));
|
||||
}
|
||||
|
||||
async function remove() {
|
||||
await axios.delete(`Ppes/${fixedAssetId}`);
|
||||
quasar.notify({
|
||||
message: t('globals.dataDeleted'),
|
||||
type: 'positive',
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<template>
|
||||
<QItem @click="confirmRemove" v-ripple clickable>
|
||||
<QItemSection avatar>
|
||||
<QIcon name="delete" />
|
||||
</QItemSection>
|
||||
<QItemSection>{{ t('fixedAsset.delete') }}</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
|
@ -0,0 +1,24 @@
|
|||
<script setup>
|
||||
import { ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import VnDmsList from 'src/components/common/VnDmsList.vue';
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
const dmsListRef = ref(null);
|
||||
const showImportDialog = ref(false);
|
||||
|
||||
const onDataSaved = () => dmsListRef.value.dmsRef.fetch();
|
||||
</script>
|
||||
<template>
|
||||
<VnDmsList
|
||||
ref="dmsListRef"
|
||||
model="PpeDms"
|
||||
update-model="PpeDms"
|
||||
delete-model="PpeDms"
|
||||
download-model="dms"
|
||||
default-dms-code="fixedAssets"
|
||||
filter="ppeFk"
|
||||
/>
|
||||
</template>
|
|
@ -0,0 +1,140 @@
|
|||
<script setup>
|
||||
import VnTable from 'src/components/VnTable/VnTable.vue';
|
||||
import InvoiceInDescriptorProxy from 'pages/InvoiceIn/Card/InvoiceInDescriptorProxy.vue';
|
||||
import SupplierDescriptorProxy from 'src/pages/Supplier/Card/SupplierDescriptorProxy.vue';
|
||||
import { toDate, toCurrency } from 'src/filters/index';
|
||||
import { useRoute } from 'vue-router';
|
||||
import { ref, computed } from 'vue';
|
||||
import { useVnConfirm } from 'composables/useVnConfirm';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import useNotify from 'src/composables/useNotify.js';
|
||||
import axios from 'axios';
|
||||
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||
import VnInputNumber from 'src/components/common/VnInputNumber.vue';
|
||||
|
||||
const tableRef = ref();
|
||||
const { t } = useI18n();
|
||||
const route = useRoute();
|
||||
const { notify } = useNotify();
|
||||
const dataKey = 'fixedAssetInvoiceIn';
|
||||
const { openConfirmationModal } = useVnConfirm();
|
||||
|
||||
const columns = computed(() => [
|
||||
{
|
||||
align: 'left',
|
||||
name: 'issued',
|
||||
label: t('invoiceIn.list.issued'),
|
||||
columnFilter: {
|
||||
component: 'date',
|
||||
},
|
||||
format: (row, dashIfEmpty) => dashIfEmpty(toDate(row.issued)),
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
name: 'supplierFk',
|
||||
label: t('invoiceIn.list.supplier'),
|
||||
columnFilter: {
|
||||
component: 'select',
|
||||
attrs: {
|
||||
url: 'Suppliers',
|
||||
fields: ['id', 'name'],
|
||||
},
|
||||
},
|
||||
format: ({ supplierName }) => supplierName,
|
||||
columnClass: 'expand',
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
name: 'supplierRef',
|
||||
label: t('invoiceIn.supplierRef'),
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
name: 'amount',
|
||||
label: t('invoiceIn.list.amount'),
|
||||
format: ({ amount }) => toCurrency(amount),
|
||||
columnFilter: false,
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
align: 'right',
|
||||
name: 'tableActions',
|
||||
actions: [
|
||||
{
|
||||
title: t('fixedAsset.invoice.unassignInvoice'),
|
||||
icon: 'delete',
|
||||
action: (row) =>
|
||||
openConfirmationModal(
|
||||
t('fixedAsset.invoice.unassignInvoice'),
|
||||
t('fixedAsset.invoice.unassignInvoiceConfirmation'),
|
||||
() => unassignInvoice(row.id),
|
||||
),
|
||||
isPrimary: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
]);
|
||||
|
||||
async function unassignInvoice(id) {
|
||||
try {
|
||||
await axios.delete(`PpeComponents/${id}`);
|
||||
notify(t('fixedAsset.invoice.unassignedInvoice'), 'positive');
|
||||
tableRef.value.reload();
|
||||
} catch (e) {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<VnTable
|
||||
ref="tableRef"
|
||||
:data-key="dataKey"
|
||||
:url="`ppes/${route.params.id}/getInvoices`"
|
||||
:columns="columns"
|
||||
search-url="fixedAssetInvoiceIns"
|
||||
:order="['issued DESC', 'supplierRef ASC']"
|
||||
:create="{
|
||||
urlCreate: 'ppeComponents',
|
||||
title: t('fixedAsset.invoice.assignInvoice'),
|
||||
formInitialData: {
|
||||
ppeFk: parseInt(route.params.id, 10),
|
||||
},
|
||||
onDataSaved: ( {id} ) => tableRef.reload(),
|
||||
}"
|
||||
auto-load
|
||||
>
|
||||
<template #column-supplierFk="{ row }">
|
||||
<span class="link" @click.stop>
|
||||
{{ row.supplierName }}
|
||||
<SupplierDescriptorProxy :id="row.supplierId" />
|
||||
</span>
|
||||
</template>
|
||||
<template #column-supplierRef="{ row }">
|
||||
<span class="link" @click.stop>
|
||||
{{ row.supplierRef }}
|
||||
<InvoiceInDescriptorProxy :id="row.invoiceInFk" />
|
||||
</span>
|
||||
</template>
|
||||
<template #more-create-dialog="{ data }">
|
||||
<VnSelect
|
||||
url="invoiceIns"
|
||||
:label="t('invoiceIn.supplierRef')"
|
||||
:fields="['id', 'supplierRef', 'supplierFk']"
|
||||
:filter-options="['id', 'supplierRef']"
|
||||
v-model="data.invoiceInFk"
|
||||
option-label="supplierRef"
|
||||
:required="true"
|
||||
>
|
||||
</VnSelect>
|
||||
<VnInputNumber
|
||||
:label="t('invoiceIn.list.amount')"
|
||||
v-model="data.amount"
|
||||
required
|
||||
/>
|
||||
</template>
|
||||
</VnTable>
|
||||
</template>
|
|
@ -0,0 +1,6 @@
|
|||
<script setup>
|
||||
import VnLog from 'src/components/common/VnLog.vue';
|
||||
</script>
|
||||
<template>
|
||||
<VnLog model="Ppe" url="/FixedAssetLogs" />
|
||||
</template>
|
|
@ -0,0 +1,345 @@
|
|||
<script setup>
|
||||
import { onMounted, ref, computed } from 'vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { dashIfEmpty, toDate, toCurrency } from 'src/filters';
|
||||
import { getTotal } from 'src/composables/getTotal';
|
||||
import CardSummary from 'components/ui/CardSummary.vue';
|
||||
import VnLv from 'src/components/ui/VnLv.vue';
|
||||
import { getUrl } from 'src/composables/getUrl';
|
||||
import VnTitle from 'src/components/common/VnTitle.vue';
|
||||
import VnToSummary from 'src/components/ui/VnToSummary.vue';
|
||||
import VnCheckbox from 'src/components/common/VnCheckbox.vue';
|
||||
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
|
||||
import SupplierDescriptorProxy from 'src/pages/Supplier/Card/SupplierDescriptorProxy.vue';
|
||||
import InvoiceInDescriptorProxy from 'src/pages/InvoiceIn/Card/InvoiceInDescriptorProxy.vue';
|
||||
import FixedAssetDescriptorMenu from './FixedAssetDescriptorMenu.vue';
|
||||
|
||||
const route = useRoute();
|
||||
const { t } = useI18n();
|
||||
|
||||
const $props = defineProps({
|
||||
id: {
|
||||
type: Number,
|
||||
default: null,
|
||||
},
|
||||
});
|
||||
|
||||
const dmsColumns = ref([
|
||||
{
|
||||
align: 'left',
|
||||
label: t('globals.id'),
|
||||
name: 'id',
|
||||
field: ({ id }) => id,
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('globals.type'),
|
||||
name: 'type',
|
||||
field: ({ type }) => type?.name,
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('globals.order'),
|
||||
name: 'order',
|
||||
field: ({ hardCopyNumber }) => dashIfEmpty(hardCopyNumber),
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('globals.reference'),
|
||||
name: 'reference',
|
||||
field: ({ reference }) => dashIfEmpty(reference),
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('globals.description'),
|
||||
name: 'description',
|
||||
field: ({ description }) => dashIfEmpty(description),
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('globals.original'),
|
||||
name: 'hasFile',
|
||||
toolTip: t('The documentation is available in paper form'),
|
||||
component: 'checkbox',
|
||||
field: ({ hasFile }) => hasFile,
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('globals.worker'),
|
||||
name: 'worker',
|
||||
field: ({ worker }) => worker?.name,
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
label: t('globals.created'),
|
||||
name: 'created',
|
||||
field: ({ created }) => toDate(created),
|
||||
},
|
||||
]);
|
||||
|
||||
const entityId = computed(() => $props.id || route.params.id);
|
||||
|
||||
const summary = ref();
|
||||
const fixedAssetUrl = ref();
|
||||
|
||||
onMounted(async () => {
|
||||
fixedAssetUrl.value = (await getUrl('fixedAsset/')) + entityId.value + '/';
|
||||
});
|
||||
|
||||
function toFixedAssetUrl(section) {
|
||||
return '#/fixedAsset/' + entityId.value + '/' + section;
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<CardSummary
|
||||
ref="summary"
|
||||
:url="`Ppes/${entityId}/summary`"
|
||||
data-key="FixedAssetSummary"
|
||||
v-bind="$attrs.width"
|
||||
>
|
||||
<template #header-left>
|
||||
<VnToSummary
|
||||
v-if="route?.name !== 'FixedAssetSummary'"
|
||||
:route-name="'FixedAssetSummary'"
|
||||
:entity-id="entityId"
|
||||
:url="FixedAssetUrl"
|
||||
/>
|
||||
</template>
|
||||
<template #header="{ entity }">
|
||||
<div>Fixed asset #{{ entity.id }} - {{ entity.description }}</div>
|
||||
</template>
|
||||
<template #menu="{ entity }">
|
||||
<FixedAssetDescriptorMenu :fixedAsset="entity" />
|
||||
</template>
|
||||
<template #body="{ entity }">
|
||||
<QCard class="vn-two">
|
||||
<VnTitle
|
||||
:url="toFixedAssetUrl('basic-data')"
|
||||
:text="t('globals.summary.basicData')"
|
||||
data-cy="titleBasicDataBlock1"
|
||||
/>
|
||||
<div class="vn-card-group">
|
||||
<div class="vn-card-content">
|
||||
<VnLv
|
||||
:label="t('globals.description')"
|
||||
:value="dashIfEmpty(entity.description)"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('globals.company')"
|
||||
:value="entity.company.code"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('fixedAsset.account')"
|
||||
:value="entity.account"
|
||||
copy
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('fixedAsset.endowment')"
|
||||
:value="entity.endowment"
|
||||
copy
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('fixedAsset.elementAccount')"
|
||||
:value="entity.elementAccount"
|
||||
copy
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('fixedAsset.nature')"
|
||||
:value="dashIfEmpty(entity.nature)"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('fixedAsset.location')"
|
||||
:value="
|
||||
dashIfEmpty(
|
||||
`${entity.location.code} - ${entity.location.description}`,
|
||||
)
|
||||
"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('globals.group')"
|
||||
:value="dashIfEmpty(entity.group.description)"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('fixedAsset.isInvestmentAsset')"
|
||||
:value="entity.isInvestmentAsset"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</QCard>
|
||||
<QCard class="vn-two">
|
||||
<VnTitle
|
||||
:url="toFixedAssetUrl('basic-data')"
|
||||
:text="t('globals.summary.basicData')"
|
||||
data-cy="titleBasicDataBlock2"
|
||||
/>
|
||||
<div class="vn-card-content">
|
||||
<VnLv
|
||||
:label="t('fixedAsset.value')"
|
||||
:value="dashIfEmpty(toCurrency(entity.value))"
|
||||
copy
|
||||
/>
|
||||
<VnLv
|
||||
:label="$t('fixedAsset.firstAmortizated')"
|
||||
:tooltip="$t('fixedAsset.firstAmortizatedTooltip')"
|
||||
:value="dashIfEmpty(toDate(entity.firstAmortizated))"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('fixedAsset.lastAmortizated')"
|
||||
:tooltip="t('fixedAsset.lastAmortizatedTooltip')"
|
||||
:value="dashIfEmpty(toDate(entity.lastAmortizated))"
|
||||
/>
|
||||
<VnLv
|
||||
:label="$t('fixedAsset.finished')"
|
||||
:tooltip="$t('fixedAsset.finishedTooltip')"
|
||||
:value="dashIfEmpty(toDate(entity.finished))"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('fixedAsset.amortization')"
|
||||
:value="dashIfEmpty(toCurrency(entity.amortization))"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('fixedAsset.plan')"
|
||||
:value="
|
||||
dashIfEmpty(`${entity.plan.rate}% - ${entity.plan.days}days`)
|
||||
"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('fixedAsset.discharged')"
|
||||
:value="dashIfEmpty(toDate(entity.discharged))"
|
||||
/>
|
||||
<VnLv
|
||||
:label="t('fixedAsset.cause')"
|
||||
:value="dashIfEmpty(entity.cause)"
|
||||
/>
|
||||
<VnLv :label="t('fixedAsset.isDone')" :value="entity.isDone" />
|
||||
</div>
|
||||
</QCard>
|
||||
<QCard v-if="entity?.ppeDms?.length > 0" class="vn-two">
|
||||
<VnTitle
|
||||
:url="toFixedAssetUrl('dms')"
|
||||
:text="t('globals.pageTitles.dms')"
|
||||
data-cy="titleDmsBlock"
|
||||
/>
|
||||
<QTable :columns="dmsColumns" :rows="entity?.ppeDms" flat>
|
||||
<template #header="props">
|
||||
<QTr :props="props">
|
||||
<QTh auto-width class="text-left">{{ t('globals.id') }}</QTh>
|
||||
<QTh auto-width class="text-left">{{
|
||||
t('globals.type')
|
||||
}}</QTh>
|
||||
<QTh auto-width class="text-left">{{
|
||||
t('globals.order')
|
||||
}}</QTh>
|
||||
<QTh auto-width class="text-left">{{
|
||||
t('globals.reference')
|
||||
}}</QTh>
|
||||
<QTh auto-width class="text-left">{{
|
||||
t('globals.description')
|
||||
}}</QTh>
|
||||
<QTh auto-width class="text-center">{{
|
||||
t('globals.original')
|
||||
}}</QTh>
|
||||
<QTh auto-width class="text-left">{{
|
||||
t('globals.worker')
|
||||
}}</QTh>
|
||||
<QTh auto-width class="text-center">{{
|
||||
t('globals.created')
|
||||
}}</QTh>
|
||||
</QTr>
|
||||
</template>
|
||||
<template #body="props">
|
||||
<QTr :props="props">
|
||||
<QTd class="text-left">{{ props.row.dms.id }}</QTd>
|
||||
<QTd class="text-left">{{ props.row.dms.dmsType.name }}</QTd>
|
||||
<QTd class="text-left">{{
|
||||
props.row.dms.hardCopyNumber
|
||||
}}</QTd>
|
||||
<QTd class="text-left">{{ props.row.dms.reference }}</QTd>
|
||||
<QTd class="text-left">{{ props.row.dms.description }}</QTd>
|
||||
<QTd class="text-center"
|
||||
><VnCheckbox
|
||||
:disable="true"
|
||||
v-model="props.row.dms.hasFile"
|
||||
/></QTd>
|
||||
<QTd class="text-left"
|
||||
><span class="link" @click.stop
|
||||
>{{ props.row.dms.worker.firstName
|
||||
}}<WorkerDescriptorProxy
|
||||
:id="props.row.dms.worker.id" /></span
|
||||
></QTd>
|
||||
<QTd class="text-center">{{
|
||||
toDate(props.row.dms.created)
|
||||
}}</QTd>
|
||||
</QTr>
|
||||
</template>
|
||||
</QTable>
|
||||
</QCard>
|
||||
<QCard v-if="entity.ppeComponents?.length > 0" class="vn-two">
|
||||
<VnTitle
|
||||
:url="toFixedAssetUrl('invoice-in')"
|
||||
:text="$t('vehicle.ticket.assignedInvoices')"
|
||||
/>
|
||||
<QTable :rows="entity.ppeComponents" style="text-align: center">
|
||||
<template #body-cell="{ value }">
|
||||
<QTd>{{ value }}</QTd>
|
||||
</template>
|
||||
<template #header="props">
|
||||
<QTr class="tr-header" :props="props">
|
||||
<QTh auto-width>{{ $t('invoiceIn.list.issued') }}</QTh>
|
||||
<QTh auto-width>{{ $t('invoiceIn.list.supplier') }}</QTh>
|
||||
<QTh auto-width>{{ $t('invoiceIn.supplierRef') }}</QTh>
|
||||
<QTh auto-width>{{ $t('invoiceIn.list.amount') }}</QTh>
|
||||
</QTr>
|
||||
</template>
|
||||
<template #body="props">
|
||||
<QTr :props="props">
|
||||
<QTd>{{ toDate(props.row.invoiceIn.issued) }}</QTd>
|
||||
<QTd>
|
||||
<span class="link">
|
||||
{{ props.row.invoiceIn.supplier.name }}
|
||||
<SupplierDescriptorProxy :id="props.row.supplierFk" />
|
||||
</span>
|
||||
</QTd>
|
||||
<QTd>
|
||||
<span class="link">
|
||||
{{ props.row.invoiceInFk }}
|
||||
<InvoiceInDescriptorProxy
|
||||
:id="props.row.invoiceInFk"
|
||||
/>
|
||||
</span>
|
||||
</QTd>
|
||||
<QTd>{{ toCurrency(props.row.amount) }}</QTd>
|
||||
</QTr>
|
||||
</template>
|
||||
<template #bottom-row>
|
||||
<QTr class="bg">
|
||||
<QTd></QTd>
|
||||
<QTd></QTd>
|
||||
<QTd></QTd>
|
||||
<QTd>
|
||||
{{ toCurrency(getTotal(entity.ppeComponents, 'amount')) }}
|
||||
</QTd>
|
||||
</QTr>
|
||||
</template>
|
||||
</QTable>
|
||||
</QCard>
|
||||
</template>
|
||||
</CardSummary>
|
||||
</template>
|
||||
<style lang="scss" scoped>
|
||||
.q-card.q-card--dark.q-dark.vn-one {
|
||||
& > .bodyCard {
|
||||
padding: 1%;
|
||||
}
|
||||
}
|
||||
|
||||
.q-table {
|
||||
tr,
|
||||
th,
|
||||
.q-td {
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,207 @@
|
|||
<script setup>
|
||||
import { useI18n } from 'vue-i18n';
|
||||
|
||||
import VnFilterPanel from 'src/components/ui/VnFilterPanel.vue';
|
||||
import VnInput from 'src/components/common/VnInput.vue';
|
||||
import VnInputDate from 'components/common/VnInputDate.vue';
|
||||
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||
import VnCheckbox from 'src/components/common/VnCheckbox.vue';
|
||||
|
||||
const { t } = useI18n();
|
||||
const props = defineProps({
|
||||
dataKey: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<VnFilterPanel :data-key="props.dataKey" :search-button="true">
|
||||
<template #tags="{ tag, formatFn }">
|
||||
<div class="q-gutter-x-xs">
|
||||
<strong>{{ t(`fixedAsset.params.${tag.label}`) }}: </strong>
|
||||
<span>{{ formatFn(tag.value) }}</span>
|
||||
</div>
|
||||
</template>
|
||||
<template #body="{ params, searchFn }">
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnInput
|
||||
v-model="params.id"
|
||||
:label="t('globals.id')"
|
||||
dense
|
||||
filled
|
||||
data-cy="idInput"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnInput
|
||||
v-model="params.description"
|
||||
:label="t('globals.description')"
|
||||
dense
|
||||
filled
|
||||
data-cy="nameInput"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnSelect
|
||||
url="Companies"
|
||||
:label="t('globals.company')"
|
||||
v-model="params.companyFk"
|
||||
option-value="id"
|
||||
option-label="code"
|
||||
dense
|
||||
filled
|
||||
data-cy="fixedAssetGroupSelect"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnInputDate
|
||||
v-model="params.firstAmortizated"
|
||||
:label="t('fixedAsset.firstAmortizated')"
|
||||
dense
|
||||
filled
|
||||
data-cy="firstAmortizatedDateInput"
|
||||
/>
|
||||
</QItemSection>
|
||||
<QItemSection>
|
||||
<VnInputDate
|
||||
v-model="params.lastAmortizated"
|
||||
:label="t('fixedAsset.lastAmortizated')"
|
||||
dense
|
||||
filled
|
||||
data-cy="lastAmortizatedDateInput"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnInputDate
|
||||
v-model="params.finished"
|
||||
:label="t('fixedAsset.finished')"
|
||||
dense
|
||||
filled
|
||||
data-cy="finishedDateInput"
|
||||
/>
|
||||
</QItemSection>
|
||||
<QItemSection>
|
||||
<VnInputDate
|
||||
v-model="params.discharged"
|
||||
:label="t('fixedAsset.discharged')"
|
||||
dense
|
||||
filled
|
||||
data-cy="dischargedDateInput"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnSelect
|
||||
url="Ppes/getNatures"
|
||||
:label="t('fixedAsset.nature')"
|
||||
v-model="params.nature"
|
||||
option-value="nature"
|
||||
option-label="nature"
|
||||
dense
|
||||
filled
|
||||
data-cy="natureSelect"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnSelect
|
||||
url="PpePlans"
|
||||
:label="t('fixedAsset.plan')"
|
||||
v-model="params.planFk"
|
||||
:option-label="(value) => `${value.rate}% - ${value.days} days`"
|
||||
dense
|
||||
filled
|
||||
data-cy="planSelect"
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel>{{
|
||||
`${scope.opt?.rate}% - ${scope.opt?.days} days`
|
||||
}}</QItemLabel>
|
||||
<QItemLabel caption>
|
||||
{{ `#${scope.opt?.id}` }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnSelect
|
||||
url="PpeGroups"
|
||||
:label="t('globals.group')"
|
||||
v-model="params.groupFk"
|
||||
option-value="id"
|
||||
option-label="description"
|
||||
dense
|
||||
filled
|
||||
data-cy="groupSelect"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnSelect
|
||||
url="PpeLocations"
|
||||
:label="t('fixedAsset.location')"
|
||||
v-model="params.locationFk"
|
||||
option-value="code"
|
||||
:option-label="(value) => `${value.code} - ${value.description}`"
|
||||
dense
|
||||
filled
|
||||
data-cy="locationSelect"
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel>{{ scope.opt?.description }}</QItemLabel>
|
||||
<QItemLabel caption>
|
||||
{{ scope.opt?.code }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnCheckbox
|
||||
v-model="params.isInvestmentAsset"
|
||||
:label="t('fixedAsset.isInvestmentAsset')"
|
||||
dense
|
||||
filled
|
||||
data-cy="isInvestmentAssetCheckbox"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
<QItem>
|
||||
<QItemSection>
|
||||
<VnCheckbox
|
||||
v-model="params.isDone"
|
||||
:label="t('fixedAsset.isDone')"
|
||||
dense
|
||||
filled
|
||||
data-cy="isDoneCheckbox"
|
||||
/>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnFilterPanel>
|
||||
</template>
|
|
@ -0,0 +1,364 @@
|
|||
<script setup>
|
||||
import { computed, ref } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useState } from 'src/composables/useState';
|
||||
import VnTable from 'src/components/VnTable/VnTable.vue';
|
||||
import VnSection from 'src/components/common/VnSection.vue';
|
||||
import { dashIfEmpty, toCurrency, toDate } from 'src/filters';
|
||||
import FixedAssetFilter from './FixedAssetFilter.vue';
|
||||
import VnInput from 'src/components/common/VnInput.vue';
|
||||
import VnRow from 'src/components/ui/VnRow.vue';
|
||||
import VnInputNumber from 'src/components/common/VnInputNumber.vue';
|
||||
import VnSelect from 'src/components/common/VnSelect.vue';
|
||||
import VnInputDate from 'src/components/common/VnInputDate.vue';
|
||||
import VnAccountNumber from 'src/components/common/VnAccountNumber.vue';
|
||||
|
||||
const user = useState().getUser();
|
||||
const { t } = useI18n();
|
||||
const tableRef = ref();
|
||||
|
||||
const dataKey = 'FixedAssetList';
|
||||
|
||||
const columns = computed(() => [
|
||||
{
|
||||
align: 'right',
|
||||
name: 'id',
|
||||
label: t('globals.id'),
|
||||
width: '35px',
|
||||
chip: {
|
||||
condition: () => true,
|
||||
},
|
||||
isId: true,
|
||||
},
|
||||
{
|
||||
align: 'left',
|
||||
name: 'description',
|
||||
label: t('globals.description'),
|
||||
cardVisible: true,
|
||||
columnClass: 'expand',
|
||||
},
|
||||
{
|
||||
name: 'companyFk',
|
||||
label: t('globals.company'),
|
||||
component: 'select',
|
||||
attrs: {
|
||||
url: 'companies',
|
||||
optionValue: 'code',
|
||||
},
|
||||
format: ({ company }) => company?.code,
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
name: 'value',
|
||||
label: t('fixedAsset.value'),
|
||||
component: 'number',
|
||||
format: ({ value }) => toCurrency(value),
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
align: 'center',
|
||||
name: 'firstAmortizated',
|
||||
label: t('fixedAsset.firstAmortizated'),
|
||||
toolTip: t('fixedAsset.firstAmortizatedTooltip'),
|
||||
component: 'date',
|
||||
format: ({ firstAmortizated }) => dashIfEmpty(toDate(firstAmortizated)),
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
align: 'center',
|
||||
name: 'lastAmortizated',
|
||||
label: t('fixedAsset.lastAmortizated'),
|
||||
toolTip: t('fixedAsset.lastAmortizatedTooltip'),
|
||||
component: 'date',
|
||||
format: ({ lastAmortizated }) => dashIfEmpty(toDate(lastAmortizated)),
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
align: 'center',
|
||||
name: 'finished',
|
||||
label: t('fixedAsset.finished'),
|
||||
toolTip: t('fixedAsset.finishedTooltip'),
|
||||
component: 'date',
|
||||
format: ({ finished }) => dashIfEmpty(toDate(finished)),
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
align: 'center',
|
||||
name: 'discharged',
|
||||
label: t('fixedAsset.discharged'),
|
||||
toolTip: t('fixedAsset.dischargedTooltip'),
|
||||
component: 'date',
|
||||
format: ({ discharged }) => dashIfEmpty(toDate(discharged)),
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
name: 'amortization',
|
||||
label: t('fixedAsset.amortization'),
|
||||
component: 'number',
|
||||
format: ({ amortization }) => toCurrency(amortization),
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
name: 'nature',
|
||||
label: t('fixedAsset.nature'),
|
||||
component: 'select',
|
||||
attrs: {
|
||||
url: 'Ppes/getNatures',
|
||||
optionValue: 'nature',
|
||||
optionLabel: 'nature',
|
||||
},
|
||||
format: ({ nature }) => dashIfEmpty(nature),
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
name: 'plan',
|
||||
label: t('fixedAsset.plan'),
|
||||
toolTip: t('fixedAsset.planTooltip'),
|
||||
component: 'select',
|
||||
attrs: {
|
||||
url: 'PpePlans',
|
||||
optionValue: 'rate',
|
||||
optionLabel: 'days',
|
||||
},
|
||||
format: ({ plan }) => dashIfEmpty(`${plan?.rate * 100}% - ${plan?.days} days`),
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
name: 'group',
|
||||
label: t('globals.group'),
|
||||
component: 'select',
|
||||
attrs: {
|
||||
url: 'PpeGroups',
|
||||
optionValue: 'id',
|
||||
optionLabel: 'description',
|
||||
},
|
||||
format: ({ group }) => dashIfEmpty(group?.description),
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
name: 'locationFk',
|
||||
label: t('fixedAsset.location'),
|
||||
component: 'select',
|
||||
attrs: {
|
||||
url: 'PpeLocations',
|
||||
optionValue: 'code',
|
||||
optionLabel: 'description',
|
||||
},
|
||||
format: ({ location }) =>
|
||||
dashIfEmpty(`${location?.code} - ${location?.description}`),
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
labelAbbreviation: t('fixedAsset.isInvestmentAssetAbbr'),
|
||||
label: t('fixedAsset.isInvestmentAsset'),
|
||||
toolTip: t('fixedAsset.isInvestmentAsset'),
|
||||
name: 'isInvestmentAsset',
|
||||
component: 'checkbox',
|
||||
cardVisible: true,
|
||||
},
|
||||
{
|
||||
labelAbbreviation: t('fixedAsset.isDoneAbbr'),
|
||||
label: t('fixedAsset.isDone'),
|
||||
toolTip: t('fixedAsset.isDone'),
|
||||
name: 'isDone',
|
||||
component: 'checkbox',
|
||||
cardVisible: true,
|
||||
},
|
||||
]);
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<VnSection
|
||||
:data-key="dataKey"
|
||||
:columns="columns"
|
||||
prefix="fixedAsset"
|
||||
:array-data-props="{
|
||||
url: 'ppes/filter',
|
||||
}"
|
||||
>
|
||||
<template #advanced-menu>
|
||||
<FixedAssetFilter :data-key="dataKey" />
|
||||
</template>
|
||||
<template #body>
|
||||
<VnTable
|
||||
ref="tableRef"
|
||||
:data-key="dataKey"
|
||||
:columns="columns"
|
||||
redirect="fixedAsset"
|
||||
:create="{
|
||||
urlCreate: 'Ppes/createFixedAsset',
|
||||
title: t('fixedAsset.createFixedAsset'),
|
||||
onDataSaved: ({ id }) => tableRef.redirect(id),
|
||||
formInitialData: {
|
||||
nature: 'INMOVILIZADO',
|
||||
companyFk: user.companyFk,
|
||||
},
|
||||
}"
|
||||
:right-search="false"
|
||||
:column-search="false"
|
||||
>
|
||||
<template #more-create-dialog="{ data }">
|
||||
<div class="col-span-2">
|
||||
<VnRow>
|
||||
<VnInput
|
||||
v-model="data.id"
|
||||
:label="$t('globals.id')"
|
||||
required
|
||||
/>
|
||||
<VnInputNumber
|
||||
v-model="data.value"
|
||||
:label="$t('fixedAsset.value')"
|
||||
required
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnInput
|
||||
v-model="data.description"
|
||||
:label="$t('globals.description')"
|
||||
required
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnInputDate
|
||||
v-model="data.firstAmortizated"
|
||||
:label="$t('fixedAsset.firstAmortizated')"
|
||||
placeholder="dd-mm-aaaa"
|
||||
/>
|
||||
<VnInputDate
|
||||
v-model="data.lastAmortizated"
|
||||
:label="$t('fixedAsset.lastAmortizated')"
|
||||
placeholder="dd-mm-aaaa"
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
url="Ppes/getSubaccounts"
|
||||
v-model="data.account"
|
||||
:label="$t('fixedAsset.account')"
|
||||
option-value="code"
|
||||
option-label="code"
|
||||
hide-selected
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel>{{
|
||||
`${scope.opt?.description}`
|
||||
}}</QItemLabel>
|
||||
<QItemLabel caption>
|
||||
{{ `#${scope.opt?.code}` }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
<VnSelect
|
||||
url="Ppes/getEndowments"
|
||||
v-model="data.endowment"
|
||||
:label="$t('fixedAsset.endowment')"
|
||||
option-value="code"
|
||||
option-label="code"
|
||||
hide-selected
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel>{{
|
||||
`${scope.opt?.description}`
|
||||
}}</QItemLabel>
|
||||
<QItemLabel caption>
|
||||
{{ `#${scope.opt?.code}` }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnAccountNumber
|
||||
:label="$t('fixedAsset.elementAccount')"
|
||||
v-model="data.elementAccount"
|
||||
required
|
||||
/>
|
||||
<VnSelect
|
||||
url="PpePlans"
|
||||
v-model="data.planFk"
|
||||
:label="$t('fixedAsset.plan')"
|
||||
option-value="id"
|
||||
:option-label="
|
||||
(value) => `${value.rate * 100}% - ${value.days} days`
|
||||
"
|
||||
hide-selected
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel>{{
|
||||
`${scope.opt?.rate * 100}% - ${scope.opt?.days} days`
|
||||
}}</QItemLabel>
|
||||
<QItemLabel caption>
|
||||
{{ `#${scope.opt?.id}` }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
url="Ppes/getNatures"
|
||||
v-model="data.nature"
|
||||
:label="$t('fixedAsset.nature')"
|
||||
option-value="nature"
|
||||
option-label="nature"
|
||||
hide-selected
|
||||
/>
|
||||
<VnSelect
|
||||
url="PpeGroups"
|
||||
v-model="data.groupFk"
|
||||
:label="$t('globals.group')"
|
||||
option-value="id"
|
||||
option-label="description"
|
||||
hide-selected
|
||||
/>
|
||||
</VnRow>
|
||||
<VnRow>
|
||||
<VnSelect
|
||||
url="Companies"
|
||||
:fields="['id', 'code']"
|
||||
v-model="data.companyFk"
|
||||
:label="$t('globals.company')"
|
||||
option-value="id"
|
||||
option-label="code"
|
||||
hide-selected
|
||||
/>
|
||||
<VnSelect
|
||||
url="PpeLocations"
|
||||
v-model="data.locationFk"
|
||||
:label="$t('fixedAsset.location')"
|
||||
option-value="code"
|
||||
:option-label="
|
||||
(value) => `${value.code} - ${value.description}`
|
||||
"
|
||||
hide-selected
|
||||
>
|
||||
<template #option="scope">
|
||||
<QItem v-bind="scope.itemProps">
|
||||
<QItemSection>
|
||||
<QItemLabel>{{
|
||||
`${scope.opt?.description}`
|
||||
}}</QItemLabel>
|
||||
<QItemLabel caption>
|
||||
{{ `#${scope.opt?.code}` }}
|
||||
</QItemLabel>
|
||||
</QItemSection>
|
||||
</QItem>
|
||||
</template>
|
||||
</VnSelect>
|
||||
</VnRow>
|
||||
</div>
|
||||
</template>
|
||||
</VnTable>
|
||||
</template>
|
||||
</VnSection>
|
||||
</template>
|
Loading…
Reference in New Issue