Merge branch 'test' of https://gitea.verdnatura.es/verdnatura/salix-front into fixConflicts_testToDev
gitea/salix-front/pipeline/pr-dev This commit looks good Details

This commit is contained in:
Javier Segarra 2024-10-01 11:35:14 +02:00
commit 27b2d0232c
3 changed files with 10 additions and 435 deletions

View File

@ -12,6 +12,16 @@ const props = defineProps({
default: null,
},
});
const locationProperties = [
'postcode',
(obj) =>
obj.city
? `${obj.city}${obj.province?.name ? `(${obj.province.name})` : ''}`
: null,
(obj) => obj.country?.name,
];
const formatLocation = (obj, properties) => {
const parts = properties.map((prop) => {
if (typeof prop === 'string') {
@ -29,15 +39,6 @@ const formatLocation = (obj, properties) => {
return filteredParts.join(', ');
};
const locationProperties = [
'postcode',
(obj) =>
obj.city
? `${obj.city}${obj.province?.name ? `(${obj.province.name})` : ''}`
: null,
(obj) => obj.country?.name,
];
const modelValue = ref(
props.location ? formatLocation(props.location, locationProperties) : null
);

View File

@ -1,300 +0,0 @@
<script setup>
import { ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { useState } from 'src/composables/useState';
import { useQuasar } from 'quasar';
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
import FetchData from 'components/FetchData.vue';
import FormModelPopup from 'components/FormModelPopup.vue';
import VnInput from 'src/components/common/VnInput.vue';
import VnRow from 'components/ui/VnRow.vue';
import RightMenu from 'src/components/common/RightMenu.vue';
import EntryStockBoughtFilter from './EntryStockBoughtFilter.vue';
import VnTable from 'components/VnTable/VnTable.vue';
import WorkerDescriptorProxy from 'src/pages/Worker/Card/WorkerDescriptorProxy.vue';
import EntryStockBoughtDetail from 'src/pages/Entry/EntryStockBoughtDetail.vue';
const { t } = useI18n();
const quasar = useQuasar();
const state = useState();
const user = state.getUser();
const columns = [
{
align: 'left',
label: 'Id',
name: 'id',
isId: true,
columnFilter: false,
visible: false,
},
{
align: 'left',
name: 'workerFk',
label: t('Buyer'),
isTitle: true,
component: 'select',
cardVisible: true,
create: true,
attrs: {
url: 'Workers/activeWithInheritedRole',
fields: ['id', 'name'],
where: { role: 'buyer' },
optionFilter: 'firstName',
optionLabel: 'name',
optionValue: 'id',
useLike: false,
},
},
{
align: 'center',
label: t('Reserve'),
name: 'reserve',
columnFilter: false,
create: true,
component: 'number',
summation: true,
},
{
align: 'center',
label: t('Bought'),
name: 'bought',
summation: true,
cardVisible: true,
columnFilter: false,
},
{
align: 'left',
label: t('Date'),
name: 'dated',
component: 'date',
visible: false,
create: true,
},
{
align: 'left',
name: 'tableActions',
actions: [
{
title: t('View more details'),
icon: 'search',
isPrimary: true,
action: (row) => {
quasar.dialog({
component: EntryStockBoughtDetail,
componentProps: {
workerFk: row.workerFk,
dated: userParams.value.dated,
},
});
},
},
],
},
];
const fetchDataRef = ref();
const travelDialogRef = ref(false);
const tableRef = ref();
const travel = ref(null);
const userParams = ref({
dated: Date.vnNew(),
});
const filter = ref({
fields: ['id', 'm3', 'warehouseInFk'],
include: [
{
relation: 'warehouseIn',
scope: {
fields: ['code'],
},
},
],
where: {
shipped: (userParams.value.dated
? new Date(userParams.value.dated)
: Date.vnNew()
).setHours(0, 0, 0, 0),
m3: { neq: null },
},
});
const setUserParams = async ({ dated }) => {
const shipped = (dated ? new Date(dated) : Date.vnNew()).setHours(0, 0, 0, 0);
filter.value.where.shipped = shipped;
fetchDataRef.value?.fetch();
};
function openDialog() {
travelDialogRef.value = true;
}
function setFooter(data) {
const footer = {
bought: 0,
reserve: 0,
};
data.forEach((row) => {
footer.bought += row?.bought;
footer.reserve += row?.reserve;
});
tableRef.value.footer = footer;
}
function round(value) {
return Math.round(value * 100) / 100;
}
</script>
<template>
<VnSubToolbar>
<template #st-data>
<FetchData
ref="fetchDataRef"
url="Travels"
auto-load
:filter="filter"
@on-fetch="
(data) => {
travel = data.find(
(data) => data.warehouseIn.code.toLowerCase() === 'vnh'
);
}
"
/>
<VnRow class="travel">
<div v-if="travel">
<span style="color: var(--vn-label-color)">
{{ t('Booked trucks') }}:
</span>
<span>
{{ travel?.m3 }}
</span>
<QBtn
v-if="travel?.m3"
style="max-width: 20%"
flat
icon="edit"
@click="openDialog()"
:title="t('Edit travel')"
color="primary"
/>
</div>
</VnRow>
</template>
</VnSubToolbar>
<QDialog v-model="travelDialogRef" :maximized="true" :class="['vn-row', 'wrap']">
<FormModelPopup
:url-update="`Travels/${travel?.id}`"
model="travel"
:title="t('Travel m3')"
:form-initial-data="{ id: travel?.id, m3: travel?.m3 }"
@on-data-saved="fetchDataRef.fetch()"
>
<template #form-inputs="{ data }">
<VnInput
v-model="data.id"
:label="t('id')"
type="number"
disable
readonly
/>
<VnInput v-model="data.m3" :label="t('m3')" type="number" />
</template>
</FormModelPopup>
</QDialog>
<RightMenu>
<template #right-panel>
<EntryStockBoughtFilter
data-key="StockBoughts"
@set-user-params="setUserParams"
/>
</template>
</RightMenu>
<div class="table-container">
<div class="column items-center">
<VnTable
ref="tableRef"
data-key="StockBoughts"
url="StockBoughts/getStockBought"
save-url="StockBoughts/crud"
order="reserve DESC"
:right-search="false"
:is-editable="true"
@on-fetch="(data) => setFooter(data)"
:create="{
urlCreate: 'StockBoughts',
title: t('Reserve some space'),
onDataSaved: () => tableRef.reload(),
formInitialData: {
workerFk: user.id,
dated: Date.vnNow(),
},
}"
:columns="columns"
:user-params="userParams"
:footer="true"
table-height="80vh"
auto-load
>
<template #column-workerFk="{ row }">
<span class="link" @click.stop>
{{ row?.worker?.user?.name }}
<WorkerDescriptorProxy :id="row?.workerFk" />
</span>
</template>
<template #column-bought="{ row }">
<span :class="{ 'text-negative': row.reserve < row.bought }">
{{ row?.bought }}
</span>
</template>
<template #column-footer-reserve>
<span>
{{ round(tableRef.footer.reserve) }}
</span>
</template>
<template #column-footer-bought>
<span
:class="{
'text-negative':
tableRef.footer.reserve < tableRef.footer.bought,
}"
>
{{ round(tableRef.footer.bought) }}
</span>
</template>
</VnTable>
</div>
</div>
</template>
<style lang="scss" scoped>
.travel {
margin-bottom: 0px;
}
.table-container {
display: flex;
justify-content: center;
}
.column {
display: flex;
flex-direction: column;
align-items: center;
width: 35%;
}
.text-negative {
color: $negative !important;
}
</style>
<i18n>
es:
Edit travel: Editar envío
Travel: Envíos
Booked trucks: Camiones reservados
Buyer: Comprador
Reserve: Reservado
Bought: Comprado
Date: Fecha
View more details: Ver más detalles
Reserve some space: Reservar espacio
This buyer has already made a reservation for this date: Este comprador ya ha hecho una reserva para esta fecha
</i18n>

View File

@ -1,126 +0,0 @@
<script setup>
import { ref } from 'vue';
import { useI18n } from 'vue-i18n';
import VnTable from 'components/VnTable/VnTable.vue';
import EntryDescriptorProxy from 'src/pages/Entry/Card/EntryDescriptorProxy.vue';
import ItemDescriptorProxy from 'src/pages/Item/Card/ItemDescriptorProxy.vue';
const { t } = useI18n();
const tableRef = ref();
const $props = defineProps({
workerFk: {
type: Number,
required: true,
},
dated: {
type: Date,
required: true,
},
});
const customUrl = `StockBoughts/getStockBoughtDetail?workerFk=${$props.workerFk}&date=${$props.dated}`;
const columns = [
{
align: 'left',
label: t('Entry'),
name: 'entryFk',
isTitle: true,
isId: true,
columnFilter: false,
},
{
align: 'left',
name: 'itemFk',
label: t('Item'),
columnFilter: false,
},
{
align: 'left',
label: t('Name'),
name: 'itemName',
create: true,
columnClass: 'expand',
columnFilter: false,
cardVisible: true,
},
{
align: 'left',
name: 'volume',
label: t('Volume'),
columnFilter: false,
cardVisible: true,
},
{
align: 'left',
label: t('Packaging'),
name: 'packagingFk',
columnFilter: false,
cardVisible: true,
},
{
align: 'left',
label: 'Packing',
name: 'packing',
columnFilter: false,
cardVisible: true,
},
];
</script>
<template>
<QDialog>
<div class="container">
<VnTable
ref="tableRef"
data-key="StockBoughtsDetail"
:url="customUrl"
order="itemName DESC"
:columns="columns"
:right-search="false"
:disable-infinite-scroll="true"
:disable-option="{ card: true }"
:limit="0"
auto-load
>
<template #column-entryFk="{ row }">
<span class="link">
{{ row?.entryFk }}
<EntryDescriptorProxy :id="row.entryFk" />
</span>
</template>
<template #column-itemName="{ row }">
<span class="link">
{{ row?.itemName }}
<ItemDescriptorProxy :id="row.itemFk" />
</span>
</template>
</VnTable>
</div>
</QDialog>
</template>
<style lang="css" scoped>
.container {
max-width: 50vw;
overflow: auto;
justify-content: center;
align-items: center;
margin: auto;
background-color: var(--vn-section-color);
padding: 4px;
}
.container > div > div > .q-table__top.relative-position.row.items-center {
background-color: red !important;
}
</style>
<i18n>
es:
Buyer: Comprador
Reserve: Reservado
Bought: Comprado
More: Más
Date: Fecha
Entry: Entrada
Item: Artículo
Name: Nombre
Volume: Volumen
Packaging: Embalage
</i18n>