#6321 - Negative ticket #158
|
@ -403,6 +403,11 @@ function handleOnDataSaved(_) {
|
|||
<template #top-left v-if="!$props.withoutHeader">
|
||||
<slot name="top-left"></slot>
|
||||
</template>
|
||||
<template #body-selection="props">
|
||||
<slot name="body-selection" v-bind="props">
|
||||
<QCheckbox class="q-ma-xs" v-model="props.selected"></QCheckbox>
|
||||
</slot>
|
||||
</template>
|
||||
|
||||
<template #top-right v-if="!$props.withoutHeader">
|
||||
<VnVisibleColumn
|
||||
|
|
|
@ -1,12 +1,13 @@
|
|||
<script setup>
|
||||
import { ref, computed, onUnmounted } from 'vue';
|
||||
import axios from 'axios';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import ItemDescriptorProxy from 'src/pages/Item/Card/ItemDescriptorProxy.vue';
|
||||
import FetchedTags from 'components/ui/FetchedTags.vue';
|
||||
import VnImg from 'src/components/ui/VnImg.vue';
|
||||
import { toCurrency } from 'filters/index';
|
||||
import VnStockValueDisplay from 'src/components/ui/VnStockValueDisplay.vue';
|
||||
import { useDialogPluginComponent } from 'quasar';
|
||||
// import { useDialogPluginComponent } from 'quasar';
|
||||
import VnTable from 'src/components/VnTable/VnTable.vue';
|
||||
jgallego marked this conversation as resolved
Outdated
|
||||
import VnInputNumber from 'src/components/common/VnInputNumber.vue';
|
||||
|
||||
|
@ -49,6 +50,8 @@ const defaultColumnAttrs = {
|
|||
align: 'left',
|
||||
sortable: true,
|
||||
};
|
||||
const ticket = computed(() => $props.tickets[0]);
|
||||
const saleFk = computed(() => ticket.value.saleFk);
|
||||
const statusConditionalValue = (row) => {
|
||||
const total = MATCH_VALUES.reduce((acc, i) => acc + row[`match${i}`], 0);
|
||||
return total;
|
||||
|
@ -132,26 +135,43 @@ const columns = computed(() => [
|
|||
]);
|
||||
|
||||
async function confirm() {
|
||||
emit('refreshData', { type: 'refresh', itemProposal: proposalSelected.value[0] });
|
||||
proposalSelected.value = [];
|
||||
popupProxyRef.value.hide();
|
||||
try {
|
||||
const params = {
|
||||
saleFk: saleFk.value,
|
||||
newItemFK: proposalSelected.value[0].id,
|
||||
quantity: quantity.value,
|
||||
};
|
||||
const { data } = await axios.post('Sales/replaceItem', params);
|
||||
emit('refreshData', {
|
||||
type: 'refresh',
|
||||
itemProposal: proposalSelected.value[0],
|
||||
...data,
|
||||
});
|
||||
proposalSelected.value = [];
|
||||
popupProxyRef.value.hide();
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
}
|
||||
const { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent();
|
||||
// const { dialogRef, onDialogOK, onDialogCancel } = useDialogPluginComponent();
|
||||
const popupProxyRef = ref(null);
|
||||
const emit = defineEmits(['dialogClosed', 'refreshData']);
|
||||
const emit = defineEmits(['onDialogClosed', 'refreshData']);
|
||||
jgallego marked this conversation as resolved
Outdated
jsegarra
commented
Aqui no veo correcto usar las variables de colores definidos Aqui no veo correcto usar las variables de colores definidos
jgallego
commented
yo lo que no veo correcto es usar el amarillo que nos de javascript sin saber cual és, creemos una variable amarillo porque tal vez en el dark o en el light lo queramos hacer amarillo pero no el mismo tono yo lo que no veo correcto es usar el amarillo que nos de javascript sin saber cual és, creemos una variable amarillo porque tal vez en el dark o en el light lo queramos hacer amarillo pero no el mismo tono
jsegarra
commented
ok, vale, cambio de style por class ok, vale, cambio de style por class
|
||||
|
||||
function onDialogClose() {
|
||||
console.log('Dialog has been closed');
|
||||
// Emitir el evento personalizado
|
||||
emit('dialogClosed', { data: true });
|
||||
}
|
||||
// function onDialogClose() {
|
||||
// console.log('Dialog has been closed');
|
||||
// // Emitir el evento personalizado
|
||||
// emit('onDialogClosed', { data: true });
|
||||
// }
|
||||
onUnmounted(() => {});
|
||||
function handleSelection(value, evt) {
|
||||
function handleSelection(value, _) {
|
||||
quantity.value = value.available;
|
||||
}
|
||||
const isSelectionAvailable = ({ row }) => {
|
||||
const isSelectionAvailable = (data) => {
|
||||
if (!data?.row) return false;
|
||||
const { row } = data;
|
||||
return $props.replaceAction && row.available >= $props.itemLack.lack * -1;
|
||||
};
|
||||
// watch(proposalSelected, ({ available }) => (quantity.value = available));
|
||||
</script>
|
||||
<template>
|
||||
<div style="min-width: 65vw">
|
||||
|
@ -179,7 +199,6 @@ const isSelectionAvailable = ({ row }) => {
|
|||
}"
|
||||
>
|
||||
<template #top-left>
|
||||
{{ proposalSelected }}
|
||||
<div v-if="$props.replaceAction" style="display: flex">
|
||||
<QBtn
|
||||
jgallego marked this conversation as resolved
Outdated
jgallego
commented
numeros en el codigo no en tablas, que es este 30? numeros en el codigo no en tablas, que es este 30?
jsegarra
commented
Gestionado en una columna de TicketConfig Gestionado en una columna de TicketConfig
|
||||
:label="t('globals.replace')"
|
||||
|
@ -201,13 +220,13 @@ const isSelectionAvailable = ({ row }) => {
|
|||
class="q-ml-xs"
|
||||
/></div
|
||||
></template>
|
||||
<template #body-selection="{ data }">
|
||||
<template #body-selection="props">
|
||||
<QCheckbox
|
||||
class="q-ma-xs"
|
||||
flat
|
||||
v-if="isSelectionAvailable(data)"
|
||||
v-model="data.selected"
|
||||
@update:model-value="(evt, _) => handleSelection(data.row, null)"
|
||||
v-if="isSelectionAvailable(props)"
|
||||
v-model="props.selected"
|
||||
@update:model-value="(evt, _) => handleSelection(props.row, null)"
|
||||
>
|
||||
</QCheckbox>
|
||||
</template>
|
||||
|
|
|
@ -42,6 +42,8 @@ const $props = defineProps({
|
|||
<ItemDescriptorProxy :id="item.id" />
|
||||
</QBtn>
|
||||
<FetchedTags :item="item" />
|
||||
|
||||
<!-- {{ tickets[0].saleFk }} -->
|
||||
</QCardSection>
|
||||
<QCardSection class="q-pt-none">
|
||||
<ItemProposal v-bind="$props"></ItemProposal
|
||||
|
|
|
@ -69,7 +69,7 @@ function freeFirst({ alertLevel: a }, { alertLevel: b }) {
|
|||
}
|
||||
jsegarra marked this conversation as resolved
Outdated
jgallego
commented
este lo tenias en la tabla este lo tenias en la tabla
jsegarra
commented
No, no lo tenia 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
|
||||
const { store } = useArrayData(URL_KEY);
|
||||
const handleRows = (rows) => {
|
||||
rows.forEach((row) => (row.concept = item.value.name));
|
||||
// rows.forEach((row) => (row.concept = item.value.name));
|
||||
rows = rows.sort(freeFirst);
|
||||
if (showFree.value) return rows.filter(({ alertLevel }) => alertLevel === 0);
|
||||
return rows;
|
||||
|
@ -152,7 +152,11 @@ const replaceItem = () => {
|
|||
>
|
||||
</ChangeQuantityDialog>
|
||||
</TicketMassiveUpdate>
|
||||
<QBtn color="primary" icon="vn:splitline">
|
||||
<QBtn
|
||||
color="primary"
|
||||
icon="vn:splitline"
|
||||
:disable="selectedRows.length < 1"
|
||||
>
|
||||
<QTooltip>{{ t('ticketSale.transferLines') }}</QTooltip>
|
||||
<TicketTransfer
|
||||
class="full-width"
|
||||
|
@ -162,7 +166,11 @@ const replaceItem = () => {
|
|||
}"
|
||||
></TicketTransfer>
|
||||
</QBtn>
|
||||
<QBtn color="primary" @click="showProposalDialog = true">
|
||||
<QBtn
|
||||
color="primary"
|
||||
@click="showProposalDialog = true"
|
||||
:disable="selectedRows.length < 1"
|
||||
>
|
||||
<QIcon name="import_export" class="rotate-90"></QIcon>
|
||||
<ItemProposalProxy
|
||||
ref="proposalDialogRef"
|
||||
|
@ -223,7 +231,11 @@ const replaceItem = () => {
|
|||
</template>
|
||||
</VnPaginate>
|
||||
</div>
|
||||
<TicketLackTable :filter="{ alertLevel: showFree }"></TicketLackTable>
|
||||
|
||||
<TicketLackTable
|
||||
:filter="{ alertLevel: showFree }"
|
||||
@update:selection="({ value }, _) => (selectedRows = value)"
|
||||
></TicketLackTable>
|
||||
</QPage>
|
||||
</template>
|
||||
<style lang="scss" scoped>
|
||||
|
|
|
@ -10,7 +10,7 @@ import { useRoute } from 'vue-router';
|
|||
import VnTable from 'src/components/VnTable/VnTable.vue';
|
||||
import TicketDescriptorProxy from '../Card/TicketDescriptorProxy.vue';
|
||||
import VnInputNumber from 'src/components/common/VnInputNumber.vue';
|
||||
const rowsSelected = ref([]);
|
||||
const selectedRows = ref([]);
|
||||
const $props = defineProps({
|
||||
filter: {
|
||||
type: Object,
|
||||
|
@ -33,7 +33,7 @@ const filterLack = ref({
|
|||
},
|
||||
},
|
||||
],
|
||||
where: { alertLevel: 'FRasdEE' },
|
||||
where: { alertLevel: 'FREE' },
|
||||
});
|
||||
const { t } = useI18n();
|
||||
const URL_KEY = 'Tickets/ItemLack';
|
||||
|
@ -178,11 +178,14 @@ const reload = async () => {
|
|||
itemLackForm.value.fetch();
|
||||
};
|
||||
defineExpose({ reload });
|
||||
const emit = defineEmits(['update:selection']);
|
||||
|
||||
const tableRef = ref(null);
|
||||
watch(selectedRows, () => emit('update:selection', selectedRows));
|
||||
</script>
|
||||
|
||||
<template>
|
||||
{{ selectedRows }}
|
||||
<FetchData
|
||||
url="States/editableStates"
|
||||
@on-fetch="(data) => (editableStates = data)"
|
||||
|
@ -230,7 +233,7 @@ const tableRef = ref(null);
|
|||
:is-editable="true"
|
||||
:row-click="false"
|
||||
:right-search="false"
|
||||
v-model:selected="rowsSelected"
|
||||
v-model:selected="selectedRows"
|
||||
>
|
||||
<template #column-quantity="props">
|
||||
<VnInputNumber
|
||||
|
|
Loading…
Reference in New Issue
configuracion a tablas
ya no hace falta