0
0
Fork 0
This commit is contained in:
William Buezas 2024-06-25 08:27:25 -03:00
parent fb12d4ddc0
commit 8e538fb463
7 changed files with 190 additions and 26 deletions

View File

@ -443,11 +443,7 @@ ticket:
sms: Sms sms: Sms
notes: Notes notes: Notes
sale: Sale sale: Sale
<<<<<<< Updated upstream
=======
dms: File management
services: Service services: Service
>>>>>>> Stashed changes
list: list:
nickname: Nickname nickname: Nickname
state: State state: State

View File

@ -441,11 +441,7 @@ ticket:
sms: Sms sms: Sms
notes: Notas notes: Notas
sale: Lineas del pedido sale: Lineas del pedido
<<<<<<< Updated upstream
=======
dms: Gestión documental
service: Servicios service: Servicios
>>>>>>> Stashed changes
list: list:
nickname: Alias nickname: Alias
state: Estado state: Estado

View File

@ -0,0 +1,49 @@
<script setup>
import { reactive, ref, onMounted, nextTick } from 'vue';
import { useI18n } from 'vue-i18n';
import VnInput from 'src/components/common/VnInput.vue';
import VnRow from 'components/ui/VnRow.vue';
import FormModelPopup from 'components/FormModelPopup.vue';
const { t } = useI18n();
const emit = defineEmits(['onDataSaved']);
const nameInputRef = ref(null);
const serviceFormData = reactive({});
const onDataSaved = (formData, requestResponse) => {
emit('onDataSaved', formData, requestResponse);
};
onMounted(async () => {
await nextTick();
nameInputRef.value.focus();
});
</script>
<template>
<FormModelPopup
url-create="TicketServiceTypes"
model="TicketServiceType"
:title="t('New service type')"
:form-initial-data="serviceFormData"
@on-data-saved="onDataSaved"
>
<template #form-inputs="{ data }">
<VnRow class="row q-gutter-md q-mb-md">
<VnInput
ref="nameInputRef"
:label="t('service.description')"
v-model="data.name"
:required="true"
/>
</VnRow>
</template>
</FormModelPopup>
</template>
<i18n>
es:
New service type: Nuevo tipo de servicio
</i18n>

View File

@ -1 +1,137 @@
<template>Ticket service</template> <script setup>
import { ref, watch, computed } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import CrudModel from 'components/CrudModel.vue';
import VnSelectDialog from 'src/components/common/VnSelectDialog.vue';
import FetchData from 'components/FetchData.vue';
import TicketCreateServiceType from './TicketCreateServiceType.vue';
import VnInput from 'src/components/common/VnInput.vue';
import VnSubToolbar from 'src/components/ui/VnSubToolbar.vue';
import { useArrayData } from 'src/composables/useArrayData';
const route = useRoute();
const { t } = useI18n();
const ticketServiceTypeFetchRef = ref(null);
const ticketServiceCrudRef = ref(null);
const ticketServiceOptions = ref([]);
const arrayData = useArrayData('TicketNotes');
const { store } = arrayData;
const selectedServices = ref(new Set());
const toggleCheckSelection = (id) => {
if (selectedServices.value.has(id)) selectedServices.value.delete(id);
else selectedServices.value.add(id);
};
const crudModelFilter = computed(() => ({
where: { ticketFk: route.params.id },
}));
const crudModelRequiredData = computed(() => ({ ticketFk: route.params.id }));
watch(
() => route.params.id,
async () => {
store.filter = crudModelFilter.value;
await ticketServiceCrudRef.value.reload();
}
);
</script>
<template>
<FetchData
ref="ticketServiceTypeFetchRef"
@on-fetch="(data) => (ticketServiceOptions = data)"
auto-load
url="TicketServiceTypes"
/>
<!-- <Teleport v-if="" to="#st-actions">
<QBtn
color="primary"
:label="t('service.pay')"
:disabled="!selectedServices.size"
@click.stop="viewAddObservation(selected)"
/>
</Teleport> -->
<CrudModel
ref="ticketServiceCrudRef"
data-key="TicketService"
url="TicketServices"
model="TicketService"
:filter="crudModelFilter"
:data-required="crudModelRequiredData"
:default-remove="false"
auto-load
>
<template #body="{ rows }">
<QCard class="q-px-lg q-py-md">
<div
v-for="(row, index) in rows"
:key="index"
class="q-mb-md row items-center q-gutter-x-md"
>
<QCheckbox
size="sm"
@update:model-value="toggleCheckSelection(row.id)"
:model-value="selectedServices.has(row.id)"
:toggle-indeterminate="false"
/>
<VnSelectDialog
:label="t('service.description')"
v-model="row.ticketServiceTypeFk"
:options="ticketServiceOptions"
option-label="name"
option-value="id"
hide-selected
>
<template #form>
<TicketCreateServiceType
@on-data-saved="ticketServiceTypeFetchRef.fetch()"
/>
</template>
</VnSelectDialog>
<VnInput
:label="t('service.quantity')"
v-model="row.quantity"
type="number"
min="0"
:info="t('service.quantityInfo')"
/>
<VnInput
:label="t('service.price')"
v-model="row.price"
type="number"
min="0"
/>
<QIcon
name="delete"
size="sm"
class="cursor-pointer"
color="primary"
@click="ticketServiceCrudRef.remove([row])"
>
<QTooltip>
{{ t('service.removeNote') }}
</QTooltip>
</QIcon>
</div>
<QIcon
name="add_circle"
class="fill-icon-on-hover q-ml-md"
size="sm"
color="primary"
@click="ticketServiceCrudRef.insert()"
>
<QTooltip>
{{ t('service.addService') }}
</QTooltip>
</QIcon>
</QCard>
</template>
</CrudModel>
<pre>checkeds: {{ selectedServices }}</pre>
</template>

View File

@ -6,3 +6,4 @@ service:
removeService: Remove service removeService: Remove service
newService: New service type newService: New service type
addService: Add service addService: Add service
quantityInfo: To create services with negative amounts mark the service on the source ticket and press the pay button.

View File

@ -6,5 +6,6 @@ service:
removeService: Quitar servicio removeService: Quitar servicio
newService: Nuevo tipo de servicio newService: Nuevo tipo de servicio
addService: Añadir servicio addService: Añadir servicio
quantityInfo: Para crear sevicios con cantidades negativas marcar servicio en el ticket origen y apretar el boton abonar.
Search ticket: Buscar ticket Search ticket: Buscar ticket
You can search by ticket id or alias: Puedes buscar por id o alias del ticket You can search by ticket id or alias: Puedes buscar por id o alias del ticket

View File

@ -12,11 +12,7 @@ export default {
redirect: { name: 'TicketMain' }, redirect: { name: 'TicketMain' },
menus: { menus: {
main: ['TicketList'], main: ['TicketList'],
<<<<<<< Updated upstream card: ['TicketBoxing', 'TicketSms', 'TicketSale', 'TicketService'],
card: ['TicketBoxing', 'TicketSms', 'TicketSale'],
=======
card: ['TicketBoxing', 'TicketSms', 'TicketSale', 'TicketDms', 'TicketService'],
>>>>>>> Stashed changes
}, },
children: [ children: [
{ {
@ -97,17 +93,7 @@ export default {
}, },
component: () => import('src/pages/Ticket/Card/TicketSms.vue'), component: () => import('src/pages/Ticket/Card/TicketSms.vue'),
}, },
<<<<<<< Updated upstream
=======
{
path: 'dms',
name: 'TicketDms',
meta: {
title: 'dms',
icon: 'cloud_upload',
},
component: () => import('src/pages/Ticket/Card/TicketDms.vue'),
},
{ {
path: 'service', path: 'service',
name: 'TicketService', name: 'TicketService',
@ -117,7 +103,6 @@ export default {
}, },
component: () => import('src/pages/Ticket/Card/TicketService.vue'), component: () => import('src/pages/Ticket/Card/TicketService.vue'),
}, },
>>>>>>> Stashed changes
], ],
}, },
], ],