#6321 - Negative ticket #158

Open
jsegarra wants to merge 220 commits from 6321_negative_tickets into dev
6 changed files with 102 additions and 43 deletions
Showing only changes of commit 973209abed - Show all commits

View File

@ -273,7 +273,6 @@ input::-webkit-inner-spin-button {
} }
td { td {
font-size: 11pt; font-size: 11pt;
border-top: 1px solid var(--vn-page-color);
border-collapse: collapse; border-collapse: collapse;
} }
} }

View File

@ -32,7 +32,7 @@ const gradientStyle = (value) => {
} }
return color; return color;
}; };
const tagColor = (match) => `color: ${!match ? 'red' : 'var(--vn-label-color)'}`;
const $props = defineProps({ const $props = defineProps({
itemLack: { itemLack: {
type: Object, type: Object,
@ -102,6 +102,42 @@ const columns = computed(() => [
field: 'longName', field: 'longName',
columnClass: 'expand', columnClass: 'expand',
}, },
{
align: 'left',
sortable: true,
label: t('proposal.tag5'),
name: 'tag5',
field: 'value5',
// format: (val) => val,
style: "color: 'red'",
columnClass: 'expand',
},
{
align: 'left',
sortable: true,
label: t('proposal.tag6'),
name: 'tag6',
field: 'value6',
// format: (val) => val,
attrs: ({ model }) => {
return {
style: `color: var(--vn-label-color)`,
};
},
style: (row) => `color: var(--vn-label-color)`,
columnClass: 'expand',
},
{
align: 'left',
sortable: true,
label: t('proposal.tag7'),
name: 'tag7',
field: 'value7',
// format: (val) => val,
style: "color: 'red'",
columnClass: 'expand',
},
{ {
...defaultColumnAttrs, ...defaultColumnAttrs,
@ -243,42 +279,36 @@ const isDisabled = (row) => !isSelectionAvailable(row);
{{ compatibilityItem(statusConditionalValue(row)) }} {{ compatibilityItem(statusConditionalValue(row)) }}
</QTooltip> </QTooltip>
</div> </div>
<div style="flex: 2 0 100%"> <div style="flex: 2 0 100%; align-content: center">
<div> <div>
<span style="font-size: x-small">({{ row.id }})</span <span class="link">{{ row.longName }}</span>
><span class="link">{{ row.longName }}</span>
<ItemDescriptorProxy :id="row.id" /> <ItemDescriptorProxy :id="row.id" />
</div> </div>
<div class="inline-tag">
{{ tag }}
<span
:key="key"
v-for="(tag, key) in [5, 6, 7]"
class="text"
:style="{
color: row[`match${tag}`]
? 'green'
: 'var(--vn-label-color)',
}"
>
{{ row[`value${tag}`] }}
</span>
</div>
</div> </div>
</QTd> </QTd>
</template> </template>
<template #column-available="{ row }"> <template #column-tag5="{ row }">
{{ row.available }} <span :style="tagColor(row.match5)">{{ row.value5 }}</span>
</template>
<template #column-tag6="{ row }">
<span :style="tagColor(row.match6)">{{ row.value6 }}</span>
</template>
<template #column-tag7="{ row }">
<span :style="tagColor(row.match7)">{{ row.value7 }}</span>
</template> </template>
<template #column-counter="{ row }"> <template #column-counter="{ row }">
{{ row.counter }} <span
:style="{
color: row[`match${tag}`] ? 'green' : 'var(--vn-label-color)',
}"
>{{ row.counter }}</span
>
</template> </template>
<template #column-minQuantity="{ row }"> <template #column-minQuantity="{ row }">
{{ row.minQuantity }} {{ row.minQuantity }}
</template> </template>
<template #column-price2="{ row }"> <template #column-price2="{ row }">
<div class="flex column items-center content-center"> <div class="flex column items-center content-center">
* {{ sales[0] }} **{{ row.price2 }}*
<VnStockValueDisplay :value="sales[0].price - row.price2" /> <VnStockValueDisplay :value="sales[0].price - row.price2" />
<span :class="[conditionalValuePrice(row.price2)]">{{ <span :class="[conditionalValuePrice(row.price2)]">{{
toCurrency(row.price2) toCurrency(row.price2)

View File

@ -7,7 +7,7 @@ import TicketTransferForm from './TicketTransferForm.vue';
import { toDateFormat } from 'src/filters/date.js'; import { toDateFormat } from 'src/filters/date.js';
import VnInputDate from 'src/components/common/VnInputDate.vue'; import VnInputDate from 'src/components/common/VnInputDate.vue';
import transferSales from './components/transferSales'; import split from './components/split';
const $props = defineProps({ const $props = defineProps({
mana: { mana: {
@ -93,16 +93,21 @@ const handleRowClick = (row) => {
transferFormRef.value.transferSales(ticketId); transferFormRef.value.transferSales(ticketId);
} }
}; };
const split = () => { const splitSelectedRows = async () => {
const tickets = Array.isArray($props.ticket) ? $props.ticket : [$props.ticket]; const tickets = Array.isArray($props.ticket) ? $props.ticket : [$props.ticket];
tickets.forEach(transferSales); await split(tickets);
}; };
</script> </script>
<template> <template>
<QPopupProxy ref="popupProxyRef" data-cy="ticketTransferPopup"> <QPopupProxy ref="popupProxyRef" data-cy="ticketTransferPopup">
<div class="flex row items-center q-ma-lg" v-if="$props.split"> <div class="flex row items-center q-ma-lg" v-if="$props.split">
<QBtn class="q-mr-sm" color="primary" label="Split" @click="split"></QBtn> <QBtn
class="q-mr-sm"
color="primary"
label="Split"
@click="splitSelectedRows"
></QBtn>
<VnInputDate :label="$t('New date')" v-model="splitDate"></VnInputDate> <VnInputDate :label="$t('New date')" v-model="splitDate"></VnInputDate>
</div> </div>
<QSeparator class="q-my-lg" color="primary" /> <QSeparator class="q-my-lg" color="primary" />

View File

@ -0,0 +1,39 @@
import axios from 'axios';
export default async function (data) {
const reducedData = data.reduce((acc, item) => {
const existing = acc.find((obj) => obj.ticketFk === item.id);
if (existing) {
existing.sales.push(item.saleFk);
} else {
acc.push({ ticketFk: item.id, sales: [item.saleFk] });
}
return acc;
}, []);
console.log(reducedData);
const promises = reducedData.map((params) => axios.post(`Tickets/split`, params));
const results = await Promise.allSettled(promises);
// results.forEach((result, index) => {
// if (result.status === 'fulfilled') {
// console.log(`Promise ${index + 1} fulfilled:`, result.value.data);
// // Mostrar notificación de éxito
// Notify.create({
// type: 'positive',
// message: `Operación ${index + 1} completada con éxito.`,
// });
// } else {
// console.error(`Promise ${index + 1} rejected:`, result.reason);
// // Mostrar notificación de error
// Notify.create({
// type: 'negative',
// message: `Operación ${index + 1} fallida: ${result.reason.message}`,
// });
// }
// });
return results;
}

View File

@ -1,10 +0,0 @@
export default async function ({ ticketId, sales }) {
const params = {
ticketId,
sales,
};
const { data } = await axios.post(`tickets/${ticketId}/transferSales`, params);
return data;
}

View File

@ -175,11 +175,7 @@ const filterTable = { stateFk: 0, warehouseFk: useState().getUser().value.wareho
}" }"
></TicketTransfer> ></TicketTransfer>
</QBtn> </QBtn>
<QBtn <QBtn color="primary" @click="showProposalDialog = true">
color="primary"
@click="showProposalDialog = true"
:disable="selectedRows.length < 1"
>
<QIcon <QIcon
name="import_export" name="import_export"
class="rotate-90" class="rotate-90"