#6321 - Negative ticket #158
|
@ -372,9 +372,7 @@ function handleOnDataSaved(_) {
|
|||
ref="CrudModelRef"
|
||||
@on-fetch="(...args) => emit('onFetch', ...args)"
|
||||
:search-url="searchUrl"
|
||||
:disable-infinite-scroll="
|
||||
$attrs['disableInfiniteScroll'] ? isTableMode : !disableInfiniteScroll
|
||||
"
|
||||
:disable-infinite-scroll="$attrs['disableInfiniteScroll']"
|
||||
@save-changes="reload"
|
||||
:has-sub-toolbar="$props.hasSubToolbar ?? isEditable"
|
||||
:auto-load="hasParams || $attrs['auto-load']"
|
||||
|
@ -394,7 +392,7 @@ function handleOnDataSaved(_) {
|
|||
card-container-class="grid-three"
|
||||
flat
|
||||
:style="isTableMode && `max-height: ${tableHeight}`"
|
||||
:virtual-scroll="!isTableMode"
|
||||
virtual-scroll
|
||||
@virtual-scroll="
|
||||
(event) =>
|
||||
event.index > rows.length - 2 &&
|
||||
|
|
|
@ -84,8 +84,12 @@ const styleAttrs = computed(() => {
|
|||
outlined: true,
|
||||
rounded: true,
|
||||
}
|
||||
: {};
|
||||
: { eventColor: handleEventColor };
|
||||
});
|
||||
const handleEventColor = (date) => {
|
||||
console.error(date);
|
||||
return date === Date.now() ? null : 'orange';
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -139,6 +143,10 @@ const styleAttrs = computed(() => {
|
|||
:landscape="true"
|
||||
:today-btn="true"
|
||||
:options="$attrs.options"
|
||||
color="orange"
|
||||
text-color="black"
|
||||
dark
|
||||
bordered
|
||||
@update:model-value="
|
||||
(date) => {
|
||||
formattedDate = date;
|
||||
|
@ -158,6 +166,12 @@ const styleAttrs = computed(() => {
|
|||
.vn-input-date.q-field--outlined.q-field--readonly .q-field__control:before {
|
||||
border-style: solid;
|
||||
}
|
||||
.calendar-event {
|
||||
background-color: red;
|
||||
&.--today {
|
||||
border: 2px solid $info;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<i18n>
|
||||
es:
|
||||
|
|
|
@ -63,22 +63,18 @@ const columns = computed(() => [
|
|||
label: t('proposal.available'),
|
||||
name: 'available',
|
||||
field: 'available',
|
||||
columnClass: 'shrink',
|
||||
columnFilter: {
|
||||
component: 'input',
|
||||
type: 'number',
|
||||
columnClass: 'shrink',
|
||||
},
|
||||
component: 'input',
|
||||
type: 'number',
|
||||
class: 'shrink',
|
||||
},
|
||||
{
|
||||
...defaultColumnAttrs,
|
||||
label: t('proposal.difference'),
|
||||
name: 'difference',
|
||||
columnFilter: {
|
||||
component: 'input',
|
||||
type: 'number',
|
||||
columnClass: 'shrink',
|
||||
},
|
||||
component: 'input',
|
||||
type: 'number',
|
||||
class: 'shrink',
|
||||
style: 'background-color:red;max-width: 75px',
|
||||
},
|
||||
{
|
||||
...defaultColumnAttrs,
|
||||
|
@ -92,6 +88,9 @@ const columns = computed(() => [
|
|||
label: t('proposal.counter'),
|
||||
name: 'counter',
|
||||
field: 'counter',
|
||||
component: 'input',
|
||||
type: 'number',
|
||||
class: 'shrink',
|
||||
},
|
||||
|
||||
{
|
||||
|
@ -109,22 +108,18 @@ const columns = computed(() => [
|
|||
label: t('proposal.price2'),
|
||||
name: 'price2',
|
||||
field: 'price2',
|
||||
columnFilter: {
|
||||
component: 'input',
|
||||
type: 'number',
|
||||
class: 'expand',
|
||||
},
|
||||
component: 'input',
|
||||
type: 'number',
|
||||
class: 'shrink',
|
||||
},
|
||||
{
|
||||
...defaultColumnAttrs,
|
||||
label: t('proposal.minQuantity'),
|
||||
name: 'minQuantity',
|
||||
field: 'minQuantity',
|
||||
columnFilter: {
|
||||
component: 'input',
|
||||
type: 'number',
|
||||
class: 'expand',
|
||||
},
|
||||
component: 'input',
|
||||
type: 'number',
|
||||
class: 'shrink',
|
||||
},
|
||||
{
|
||||
...defaultColumnAttrs,
|
||||
|
@ -141,11 +136,11 @@ async function confirm() {
|
|||
newItemFK: proposalSelected.value[0].id,
|
||||
quantity: quantity.value,
|
||||
};
|
||||
const { data } = await axios.post('Sales/replaceItem', params);
|
||||
emit('refreshData', {
|
||||
// const { data } = await axios.post('Sales/replaceItem', params);
|
||||
emit('itemReplaced', {
|
||||
type: 'refresh',
|
||||
itemProposal: proposalSelected.value[0],
|
||||
...data,
|
||||
...params,
|
||||
});
|
||||
proposalSelected.value = [];
|
||||
popupProxyRef.value.hide();
|
||||
|
@ -155,7 +150,7 @@ async function confirm() {
|
|||
}
|
||||
// const { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent();
|
||||
const popupProxyRef = ref(null);
|
||||
const emit = defineEmits(['onDialogClosed', 'refreshData']);
|
||||
const emit = defineEmits(['onDialogClosed', 'itemReplaced']);
|
||||
|
||||
// function onDialogClose() {
|
||||
// console.log('Dialog has been closed');
|
||||
|
@ -270,7 +265,9 @@ const isSelectionAvailable = (data) => {
|
|||
}}</span>
|
||||
</template>
|
||||
<template #column-difference="{ row }">
|
||||
<VnStockValueDisplay :value="row.id % 2 === 0 ? 10 : -10" />
|
||||
<QTd style="width: 75px; background-color: red"
|
||||
><VnStockValueDisplay :value="row.id % 2 === 0 ? 10 : -10"
|
||||
/></QTd>
|
||||
</template>
|
||||
</VnTable>
|
||||
</div>
|
||||
|
|
|
@ -3,6 +3,7 @@ import ItemProposal from './ItemProposal.vue';
|
|||
import VnImg from 'src/components/ui/VnImg.vue';
|
||||
import FetchedTags from 'components/ui/FetchedTags.vue';
|
||||
import ItemDescriptorProxy from 'src/pages/Item/Card/ItemDescriptorProxy.vue';
|
||||
const emit = defineEmits(['onDialogClosed', 'itemReplaced']);
|
||||
|
||||
const $props = defineProps({
|
||||
item: {
|
||||
|
@ -46,7 +47,10 @@ const $props = defineProps({
|
|||
<!-- {{ tickets[0].saleFk }} -->
|
||||
</QCardSection>
|
||||
<QCardSection class="q-pt-none">
|
||||
<ItemProposal v-bind="$props"></ItemProposal
|
||||
<ItemProposal
|
||||
v-bind="$props"
|
||||
@item-replaced="(data) => emit('itemReplaced', data)"
|
||||
></ItemProposal
|
||||
></QCardSection>
|
||||
</QCard>
|
||||
</QPopupProxy>
|
||||
|
|
|
@ -5,6 +5,7 @@ import FetchData from 'components/FetchData.vue';
|
|||
import { ref } from 'vue';
|
||||
import CrudModel from 'components/CrudModel.vue';
|
||||
import RoadmapAddStopForm from 'pages/Route/Roadmap/RoadmapAddStopForm.vue';
|
||||
import { QBtn } from 'quasar';
|
||||
|
||||
const { t } = useI18n();
|
||||
const route = useRoute();
|
||||
|
@ -65,9 +66,10 @@ const updateDefaultStop = (data) => {
|
|||
</div>
|
||||
</QCardSection>
|
||||
<QCardSection>
|
||||
<QIcon
|
||||
name="add"
|
||||
size="sm"
|
||||
<QBtn
|
||||
flat
|
||||
icon="add"
|
||||
shortcut="+"
|
||||
class="cursor-pointer"
|
||||
color="primary"
|
||||
@click="roadmapStopsCrudRef.insert()"
|
||||
|
@ -75,7 +77,7 @@ const updateDefaultStop = (data) => {
|
|||
<QTooltip>
|
||||
{{ t('Add stop') }}
|
||||
</QTooltip>
|
||||
</QIcon>
|
||||
</QBtn>
|
||||
</QCardSection>
|
||||
</QCard>
|
||||
</template>
|
||||
|
|
|
@ -19,8 +19,8 @@ const sageTransactionTypesOptions = ref([]);
|
|||
const supplierActivitiesOptions = ref([]);
|
||||
|
||||
function handleLocation(data, location) {
|
||||
const { town, label, provinceFk, countryFk } = location ?? {};
|
||||
data.postCode = label;
|
||||
const { town, code, provinceFk, countryFk } = location ?? {};
|
||||
data.postCode = code;
|
||||
data.city = town;
|
||||
data.provinceFk = provinceFk;
|
||||
data.countryFk = countryFk;
|
||||
|
|
|
@ -12,7 +12,7 @@ import VnPaginate from 'src/components/ui/VnPaginate.vue';
|
|||
import FetchData from 'src/components/FetchData.vue';
|
||||
import { useStateStore } from 'stores/useStateStore';
|
||||
import { useRoute } from 'vue-router';
|
||||
import { useArrayData } from 'src/composables/useArrayData';
|
||||
// import { useArrayData } from 'src/composables/useArrayData';
|
||||
import VnImg from 'src/components/ui/VnImg.vue';
|
||||
import TicketLackTable from './TicketLackTable.vue';
|
||||
import ItemProposalProxy from 'src/pages/Item/components/ItemProposalProxy.vue';
|
||||
|
@ -23,6 +23,7 @@ const URL_KEY = 'Tickets/ItemLack';
|
|||
const editableStates = ref([]);
|
||||
const stateStore = useStateStore();
|
||||
const proposalDialogRef = ref();
|
||||
const tableRef = ref();
|
||||
const changeStateDialogRef = ref();
|
||||
const changeQuantityDialogRef = ref();
|
||||
const showProposalDialog = ref(false);
|
||||
|
@ -54,48 +55,49 @@ const reload = async () => {
|
|||
defineExpose({ reload });
|
||||
|
||||
// Función de comparación
|
||||
function freeFirst({ alertLevel: a }, { alertLevel: b }) {
|
||||
const DEFAULT = 0;
|
||||
// Si el estado de 'a' es 'free' y el de 'b' no lo es, 'a' viene primero
|
||||
if (a === DEFAULT && b !== DEFAULT) {
|
||||
return -1;
|
||||
}
|
||||
// Si el estado de 'b' es 'free' y el de 'a' no lo es, 'b' viene primero
|
||||
if (b === DEFAULT && a !== DEFAULT) {
|
||||
return 1;
|
||||
}
|
||||
// En cualquier otro caso, no se cambia el orden
|
||||
return 0;
|
||||
}
|
||||
const { store } = useArrayData(URL_KEY);
|
||||
const handleRows = (rows) => {
|
||||
// rows.forEach((row) => (row.concept = item.value.name));
|
||||
rows = rows.sort(freeFirst);
|
||||
if (showFree.value) return rows.filter(({ alertLevel }) => alertLevel === 0);
|
||||
return rows;
|
||||
};
|
||||
// function freeFirst({ alertLevel: a }, { alertLevel: b }) {
|
||||
// const DEFAULT = 0;
|
||||
// // Si el estado de 'a' es 'free' y el de 'b' no lo es, 'a' viene primero
|
||||
// if (a === DEFAULT && b !== DEFAULT) {
|
||||
// return -1;
|
||||
// }
|
||||
// // Si el estado de 'b' es 'free' y el de 'a' no lo es, 'b' viene primero
|
||||
// if (b === DEFAULT && a !== DEFAULT) {
|
||||
// return 1;
|
||||
// }
|
||||
// // En cualquier otro caso, no se cambia el orden
|
||||
// return 0;
|
||||
jsegarra marked this conversation as resolved
Outdated
|
||||
// }
|
||||
// const { store } = useArrayData(URL_KEY);
|
||||
// const handleRows = (rows) => {
|
||||
// // rows.forEach((row) => (row.concept = item.value.name));
|
||||
// rows = rows.sort(freeFirst);
|
||||
// if (showFree.value) return rows.filter(({ alertLevel }) => alertLevel === 0);
|
||||
// return rows;
|
||||
// };
|
||||
|
||||
const itemProposalEvt = ({ itemProposal }) => {
|
||||
itemProposalSelected.value = itemProposal;
|
||||
replaceItem();
|
||||
tableRef.value.reload();
|
||||
// replaceItem();
|
||||
};
|
||||
const itemProposalSelected = ref(null);
|
||||
const replaceItem = () => {
|
||||
const rows = handleRows(originalRowDataCopy.value).sort((row) => row.quantity);
|
||||
for (const ticket of rows) {
|
||||
if (ticket.quantity > itemProposalSelected.value.available) continue;
|
||||
originalRowDataCopy.value.splice(originalRowDataCopy.value.indexOf(ticket));
|
||||
ticket.itemFk = itemProposalSelected.value.id;
|
||||
selectedRows.value.push({ ticketFk: ticket.ticketFk });
|
||||
itemProposalSelected.value.available -= ticket.quantity;
|
||||
itemLack.value.lack += ticket.quantity;
|
||||
const index = store.data.findIndex((t) => t.ticketFk === ticket.ticketFk);
|
||||
store.data.splice(index, 1);
|
||||
console.log(ticket);
|
||||
useArrayData('ItemsGetSimilar').store.data[1].available =
|
||||
itemProposalSelected.value.available;
|
||||
}
|
||||
};
|
||||
// const replaceItem = () => {
|
||||
// const rows = handleRows(originalRowDataCopy.value).sort((row) => row.quantity);
|
||||
// for (const ticket of rows) {
|
||||
// if (ticket.quantity > itemProposalSelected.value.available) continue;
|
||||
// originalRowDataCopy.value.splice(originalRowDataCopy.value.indexOf(ticket));
|
||||
// ticket.itemFk = itemProposalSelected.value.id;
|
||||
// selectedRows.value.push({ ticketFk: ticket.ticketFk });
|
||||
// itemProposalSelected.value.available -= ticket.quantity;
|
||||
jsegarra marked this conversation as resolved
jgallego
commented
2 ? 2 ?
jsegarra
commented
Esto ya lo habia cambiado, pero a lo mejor al hacer otros cambios se ha machacado Esto ya lo habia cambiado, pero a lo mejor al hacer otros cambios se ha machacado
|
||||
// itemLack.value.lack += ticket.quantity;
|
||||
// const index = store.data.findIndex((t) => t.ticketFk === ticket.ticketFk);
|
||||
// store.data.splice(index, 1);
|
||||
// console.log(ticket);
|
||||
// useArrayData('ItemsGetSimilar').store.data[1].available =
|
||||
// itemProposalSelected.value.available;
|
||||
// }
|
||||
// };
|
||||
</script>
|
||||
|
||||
<template>
|
||||
|
@ -178,7 +180,7 @@ const replaceItem = () => {
|
|||
:item-lack="itemLack"
|
||||
:replace-action="true"
|
||||
:tickets="selectedRows"
|
||||
@refresh-data="itemProposalEvt"
|
||||
@item-replaced="itemProposalEvt"
|
||||
></ItemProposalProxy>
|
||||
<QTooltip bottom anchor="bottom right">
|
||||
{{ t('itemProposal') }}
|
||||
|
@ -216,6 +218,7 @@ const replaceItem = () => {
|
|||
:label="itemLack.lack"
|
||||
/>
|
||||
<QBadge
|
||||
color="secondary"
|
||||
class="q-ml-xs q-mt-xs"
|
||||
v-if="itemLack"
|
||||
:label="toCurrency(itemLack.lack)"
|
||||
|
@ -233,6 +236,7 @@ const replaceItem = () => {
|
|||
</div>
|
||||
|
||||
<TicketLackTable
|
||||
ref="tableRef"
|
||||
:filter="{ alertLevel: showFree }"
|
||||
@update:selection="({ value }, _) => (selectedRows = value)"
|
||||
></TicketLackTable>
|
||||
|
|
|
@ -34,6 +34,7 @@ const filterLack = ref({
|
|||
},
|
||||
],
|
||||
where: { alertLevel: 'FREE' },
|
||||
order: 'ts.alertLevelCODE ASC',
|
||||
});
|
||||
const { t } = useI18n();
|
||||
const URL_KEY = 'Tickets/ItemLack';
|
||||
|
@ -225,6 +226,7 @@ watch(selectedRows, () => emit('update:selection', selectedRows));
|
|||
:create-as-dialog="false"
|
||||
:use-model="true"
|
||||
:filter="filterLack"
|
||||
:order="['ts.alertLevelCode ASC']"
|
||||
:table="{
|
||||
'row-key': 'id',
|
||||
selection: 'multiple',
|
||||
|
|
Loading…
Reference in New Issue
este lo tenias en la tabla
No, no lo tenia
He hecho, que si vienes desde el listado, pases el valor por parámetro al detalle, así evitamos un 2 a pelo