diff --git a/src/components/VnTable/VnTable.vue b/src/components/VnTable/VnTable.vue index e8dd1b526..e214770d2 100644 --- a/src/components/VnTable/VnTable.vue +++ b/src/components/VnTable/VnTable.vue @@ -897,7 +897,7 @@ const rowCtrlClickFunction = computed(() => { {{ row[splittedColumns.title.name] }} </span> </QCardSection> - <!-- Fields --> + <!-- Fields --> <QCardSection class="q-pl-sm q-py-xs" :class="$props.cardClass" @@ -1156,7 +1156,7 @@ es: .grid-create { display: grid; - grid-template-columns: 1fr 1fr; + grid-template-columns: repeat(auto-fit, minmax(150px, max-content)); max-width: 100%; grid-gap: 20px; margin: 0 auto; diff --git a/src/components/common/VnDmsInput.vue b/src/components/common/VnDmsInput.vue new file mode 100644 index 000000000..25d625d5d --- /dev/null +++ b/src/components/common/VnDmsInput.vue @@ -0,0 +1,166 @@ +<script setup> +import VnConfirm from '../ui/VnConfirm.vue'; +import VnInput from './VnInput.vue'; +import VnDms from './VnDms.vue'; +import axios from 'axios'; +import { useQuasar } from 'quasar'; +import { ref } from 'vue'; +import { useI18n } from 'vue-i18n'; +import { downloadFile } from 'src/composables/downloadFile'; + +const { t } = useI18n(); +const quasar = useQuasar(); +const documentDialogRef = ref({}); +const editDownloadDisabled = ref(false); +const $props = defineProps({ + defaultDmsCode: { + type: String, + default: 'InvoiceIn', + }, + disable: { + type: Boolean, + default: true, + }, + data: { + type: Object, + default: null, + }, + formRef: { + type: Object, + default: null, + }, +}); + +function deleteFile(dmsFk) { + quasar + .dialog({ + component: VnConfirm, + componentProps: { + title: t('globals.confirmDeletion'), + message: t('globals.confirmDeletionMessage'), + }, + }) + .onOk(async () => { + await axios.post(`dms/${dmsFk}/removeFile`); + $props.formRef.formData.dmsFk = null; + $props.formRef.formData.dms = undefined; + $props.formRef.hasChanges = true; + $props.formRef.save(); + }); +} +</script> +<template> + <div class="row no-wrap"> + <VnInput + :label="t('Document')" + v-model="data.dmsFk" + clearable + clear-icon="close" + class="full-width" + :disable="disable" + /> + <div + v-if="data.dmsFk" + class="row no-wrap q-pa-xs q-gutter-x-xs" + data-cy="dms-buttons" + > + <QBtn + :disable="editDownloadDisabled" + @click="downloadFile(data.dmsFk)" + icon="cloud_download" + color="primary" + flat + :class="{ + 'no-pointer-events': editDownloadDisabled, + }" + padding="xs" + round + > + <QTooltip>{{ t('Download file') }}</QTooltip> + </QBtn> + <QBtn + :disable="editDownloadDisabled" + @click=" + () => { + documentDialogRef.show = true; + documentDialogRef.dms = data.dms; + } + " + icon="edit" + color="primary" + flat + :class="{ + 'no-pointer-events': editDownloadDisabled, + }" + padding="xs" + round + > + <QTooltip>{{ t('Edit document') }}</QTooltip> + </QBtn> + <QBtn + :disable="editDownloadDisabled" + @click="deleteFile(data.dmsFk)" + icon="delete" + color="primary" + flat + round + :class="{ + 'no-pointer-events': editDownloadDisabled, + }" + padding="xs" + > + <QTooltip>{{ t('Delete file') }}</QTooltip> + </QBtn> + </div> + <QBtn + v-else + icon="add_circle" + color="primary" + flat + round + v-shortcut="'+'" + padding="xs" + @click=" + () => { + documentDialogRef.show = true; + delete documentDialogRef.dms; + } + " + data-cy="dms-create" + > + <QTooltip>{{ t('Create document') }}</QTooltip> + </QBtn> + </div> + <QDialog v-model="documentDialogRef.show"> + <VnDms + model="dms" + :default-dms-code="defaultDmsCode" + :form-initial-data="documentDialogRef.dms" + :url=" + documentDialogRef.dms + ? `Dms/${documentDialogRef.dms.id}/updateFile` + : 'Dms/uploadFile' + " + :description="documentDialogRef.supplierName" + @on-data-saved=" + (_, { data }) => { + let dmsData = data; + if (Array.isArray(data)) dmsData = data[0]; + formRef.formData.dmsFk = dmsData.id; + formRef.formData.dms = dmsData; + formRef.hasChanges = true; + formRef.save(); + } + " + /> + </QDialog> +</template> +<i18n> +es: + Document: Documento + Download file: Descargar archivo + Edit document: Editar documento + Delete file: Eliminar archivo + Create document: Crear documento + +</i18n> diff --git a/src/components/common/VnInput.vue b/src/components/common/VnInput.vue index 9821992cb..474d68116 100644 --- a/src/components/common/VnInput.vue +++ b/src/components/common/VnInput.vue @@ -84,7 +84,7 @@ const mixinRules = [ ...($attrs.rules ?? []), (val) => { const maxlength = $props.maxlength; - if (maxlength && +val.length > maxlength) + if (maxlength && +val?.length > maxlength) return t(`maxLength`, { value: maxlength }); const { min, max } = vnInputRef.value.$attrs; if (!min) return null; diff --git a/src/components/ui/VnNotes.vue b/src/components/ui/VnNotes.vue index 6ce28254d..b7e6ccbec 100644 --- a/src/components/ui/VnNotes.vue +++ b/src/components/ui/VnNotes.vue @@ -40,6 +40,11 @@ const quasar = useQuasar(); const newNote = reactive({ text: null, observationTypeFk: null }); const observationTypes = ref([]); const vnPaginateRef = ref(); + +const defaultObservationType = computed(() => + observationTypes.value.find(ot => ot.code === 'salesPerson')?.id +); + let originalText; function handleClick(e) { @@ -111,14 +116,22 @@ function fetchData([data]) { originalText = data?.notes; emit('onFetch', data); } + +const handleObservationTypes = (data) => { + observationTypes.value = data; + if(defaultObservationType.value) { + newNote.observationTypeFk = defaultObservationType.value; + } +}; + </script> <template> <FetchData v-if="selectType" url="ObservationTypes" - :filter="{ fields: ['id', 'description'] }" + :filter="{ fields: ['id', 'description', 'code'] }" auto-load - @on-fetch="(data) => (observationTypes = data)" + @on-fetch="handleObservationTypes" /> <FetchData v-if="justInput" @@ -154,6 +167,7 @@ function fetchData([data]) { filled size="lg" autogrow + autofocus @keyup.enter.stop="handleClick" :required="isRequired" clearable @@ -189,7 +203,6 @@ function fetchData([data]) { :search-url="false" @on-fetch=" newNote.text = ''; - newNote.observationTypeFk = null; " > <template #body="{ rows }"> diff --git a/src/composables/downloadFile.js b/src/composables/downloadFile.js index 302836e09..0c4e8edb6 100644 --- a/src/composables/downloadFile.js +++ b/src/composables/downloadFile.js @@ -5,18 +5,19 @@ import { exportFile } from 'quasar'; const { getTokenMultimedia } = useSession(); const token = getTokenMultimedia(); -const appUrl = (await getUrl('', 'lilium')).replace('/#/', ''); export async function downloadFile(id, model = 'dms', urlPath = '/downloadFile', url) { + const appUrl = await getAppUrl(); const response = await axios.get( url ?? `${appUrl}/api/${model}/${id}${urlPath}?access_token=${token}`, - { responseType: 'blob' } + { responseType: 'blob' }, ); download(response); } export async function downloadDocuware(url, params) { + const appUrl = await getAppUrl(); const response = await axios.get(`${appUrl}/api/` + url, { responseType: 'blob', params, @@ -32,3 +33,7 @@ function download(response) { exportFile(filename, response.data); } + +async function getAppUrl() { + return (await getUrl('', 'lilium')).replace('/#/', ''); +} diff --git a/src/css/app.scss b/src/css/app.scss index 5befd150b..b299973d1 100644 --- a/src/css/app.scss +++ b/src/css/app.scss @@ -325,7 +325,6 @@ input::-webkit-inner-spin-button { min-height: auto !important; display: flex; align-items: flex-end; - padding-bottom: 2px; .q-field__native.row { min-height: auto !important; } diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml index 7374cda68..c62305f95 100644 --- a/src/i18n/locale/en.yml +++ b/src/i18n/locale/en.yml @@ -817,6 +817,7 @@ travel: search: Search travel searchInfo: You can search by travel id or name id: Id + awbFk: AWB travelList: tableVisibleColumns: ref: Reference diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml index f0ce53e37..86d15e985 100644 --- a/src/i18n/locale/es.yml +++ b/src/i18n/locale/es.yml @@ -900,6 +900,7 @@ travel: search: Buscar envío searchInfo: Buscar envío por id o nombre id: Id + awbFk: Guía aérea travelList: tableVisibleColumns: ref: Referencia diff --git a/src/pages/Account/Card/AccountSummary.vue b/src/pages/Account/Card/AccountSummary.vue index 2172fec9a..a098f10ee 100644 --- a/src/pages/Account/Card/AccountSummary.vue +++ b/src/pages/Account/Card/AccountSummary.vue @@ -18,7 +18,7 @@ const entityId = computed(() => $props.id || route.params.id); data-key="Account" ref="AccountSummary" url="VnUsers/preview" - :filter="filter" + :filter="{ ...filter, where: { id: entityId } }" > <template #header="{ entity }">{{ entity.id }} - {{ entity.nickname }}</template> <template #menu> diff --git a/src/pages/Claim/Card/ClaimBasicData.vue b/src/pages/Claim/Card/ClaimBasicData.vue index 43941d1dc..7e7d42ae8 100644 --- a/src/pages/Claim/Card/ClaimBasicData.vue +++ b/src/pages/Claim/Card/ClaimBasicData.vue @@ -2,6 +2,7 @@ import { ref } from 'vue'; import { useRoute } from 'vue-router'; import { useI18n } from 'vue-i18n'; +import { getDifferences, getUpdatedValues } from 'src/filters'; import VnSelect from 'src/components/common/VnSelect.vue'; import VnSelectEnum from 'src/components/common/VnSelectEnum.vue'; import FetchData from 'components/FetchData.vue'; @@ -9,12 +10,18 @@ import FormModel from 'components/FormModel.vue'; import VnRow from 'components/ui/VnRow.vue'; import VnInput from 'src/components/common/VnInput.vue'; import VnInputDate from 'components/common/VnInputDate.vue'; - import VnAvatar from 'src/components/ui/VnAvatar.vue'; const route = useRoute(); const { t } = useI18n(); const workersOptions = ref([]); + +function onBeforeSave(formData, originalData) { + return getUpdatedValues( + Object.keys(getDifferences(formData, originalData)), + formData, + ); +} </script> <template> <FetchData @@ -27,6 +34,7 @@ const workersOptions = ref([]); <FormModel model="Claim" :url-update="`Claims/updateClaim/${route.params.id}`" + :mapper="onBeforeSave" auto-load > <template #form="{ data, validate }"> diff --git a/src/pages/Entry/Card/EntryBasicData.vue b/src/pages/Entry/Card/EntryBasicData.vue index 34e4a0f9c..f6d15a977 100644 --- a/src/pages/Entry/Card/EntryBasicData.vue +++ b/src/pages/Entry/Card/EntryBasicData.vue @@ -14,6 +14,8 @@ import VnInputNumber from 'src/components/common/VnInputNumber.vue'; import VnSelectTravelExtended from 'src/components/common/VnSelectTravelExtended.vue'; import VnSelectSupplier from 'src/components/common/VnSelectSupplier.vue'; import VnCheckbox from 'src/components/common/VnCheckbox.vue'; +import VnSelectWorker from 'src/components/common/VnSelectWorker.vue'; +import VnDmsInput from 'src/components/common/VnDmsInput.vue'; const route = useRoute(); const { t } = useI18n(); @@ -24,6 +26,7 @@ const user = state.getUser().fn(); const companiesOptions = ref([]); const currenciesOptions = ref([]); +const entryRef = ref({}); onMounted(() => { checkEntryLock(route.params.id, user.id); @@ -48,10 +51,11 @@ onMounted(() => { auto-load /> <FormModel - :url-update="`Entries/${route.params.id}`" + ref="entryRef" model="Entry" - auto-load + :url-update="`Entries/${route.params.id}`" :clear-store-on-unmount="false" + auto-load > <template #form="{ data }"> <VnRow class="q-py-sm"> @@ -67,11 +71,18 @@ onMounted(() => { /> </VnRow> <VnRow class="q-py-sm"> - <VnInput v-model="data.reference" :label="t('globals.reference')" /> - <VnInputNumber - v-model="data.invoiceAmount" - :label="t('entry.summary.invoiceAmount')" - :positive="false" + <VnInput + v-model="data.reference" + :label="t('entry.list.tableVisibleColumns.reference')" + /> + <VnSelect + v-model="data.typeFk" + url="entryTypes" + :fields="['code', 'description']" + option-value="code" + optionLabel="description" + sortBy="description" + :label="t('entry.list.tableVisibleColumns.entryTypeDescription')" /> </VnRow> <VnRow class="q-py-sm"> @@ -113,7 +124,6 @@ onMounted(() => { name="initialTemperature" :label="t('entry.basicData.initialTemperature')" :step="0.5" - :decimal-places="2" :positive="false" /> <VnInputNumber @@ -121,20 +131,21 @@ onMounted(() => { name="finalTemperature" :label="t('entry.basicData.finalTemperature')" :step="0.5" - :decimal-places="2" :positive="false" /> - <VnSelect - v-model="data.typeFk" - url="entryTypes" - :fields="['code', 'description']" - option-value="code" - optionLabel="description" - sortBy="description" - /> </VnRow> <VnRow class="q-py-sm"> - <QInput + <VnInputNumber + v-model="data.invoiceAmount" + :label="t('entry.list.tableVisibleColumns.invoiceAmount')" + :positive="false" + @update:model-value="data.buyerFk = user.id" + /> + <VnSelectWorker v-model="data.buyerFk" hide-selected /> + <VnDmsInput :data="data" :formRef="entryRef" :disable="false" /> + </VnRow> + <VnRow class="q-py-sm"> + <VnInputNumber :label="t('entry.basicData.observation')" type="textarea" v-model="data.observation" diff --git a/src/pages/Entry/Card/EntryBuys.vue b/src/pages/Entry/Card/EntryBuys.vue index 3990fde19..a93b0801b 100644 --- a/src/pages/Entry/Card/EntryBuys.vue +++ b/src/pages/Entry/Card/EntryBuys.vue @@ -18,6 +18,7 @@ import VnSelectEnum from 'src/components/common/VnSelectEnum.vue'; import { checkEntryLock } from 'src/composables/checkEntryLock'; import VnRow from 'src/components/ui/VnRow.vue'; import VnInput from 'src/components/common/VnInput.vue'; +import VnInputNumber from 'src/components/common/VnInputNumber.vue'; const $props = defineProps({ id: { @@ -44,6 +45,8 @@ const entityId = ref($props.id ?? route.params.id); const entryBuysRef = ref(); const footerFetchDataRef = ref(); const footer = ref({}); +const dialogRef = ref(false); +const newEntryRef = ref(null); const columns = [ { align: 'center', @@ -250,6 +253,7 @@ const columns = [ component: 'number', attrs: { positive: false, + decimalPlaces: 3, }, cellEvent: { 'update:modelValue': async (value, oldValue, row) => { @@ -497,6 +501,23 @@ async function setBuyUltimate(itemFk, data) { }); } +async function transferBuys(rows, newEntry) { + if (!newEntry) return; + + const promises = rows.map((row) => { + return axios.patch('Buys', { id: row.id, entryFk: newEntry }); + }); + + await Promise.all(promises); + + await axios.post(`Entries/${newEntry}/recalcEntryPrices`); + await axios.post(`Entries/${entityId.value}/recalcEntryPrices`); + + entryBuysRef.value.reload(); + newEntryRef.value = null; + dialogRef.value = false; +} + onMounted(() => { stateStore.rightDrawer = false; if ($props.editableMode) checkEntryLock(entityId.value, user.id); @@ -571,6 +592,47 @@ onMounted(() => { </QItem> </QList> </QBtnDropdown> + <QBtn + icon="move_group" + color="primary" + :title="t('Transfer buys')" + data-cy="transferBuys" + flat + @click="dialogRef = true" + :disable="!selectedRows.length" + /> + <QDialog v-model="dialogRef"> + <QCard> + <QCardSection> + <span>{{ t('Transfer buys') }}</span> + </QCardSection> + <QCardSection> + <VnInputNumber + v-model="newEntryRef" + :label="t('Entry')" + type="number" + data-cy="entryDestinyInput" + /> + </QCardSection> + <QCardSection> + <QCardActions> + <QBtn + label="Cancel" + flat + color="primary" + @click="dialogRef = false" + /> + <QBtn + label="Transfer" + data-cy="transferBuysBtn" + flat + color="primary" + @click="transferBuys(selectedRows, newEntryRef)" + /> + </QCardActions> + </QCardSection> + </QCard> + </QDialog> </QBtnGroup> </Teleport> <FetchData @@ -620,7 +682,7 @@ onMounted(() => { }, columnGridStyle: { 'max-width': '50%', - 'margin-right': '30px', + 'margin-right': '5%', flex: 1, }, previousStyle: { @@ -652,6 +714,7 @@ onMounted(() => { :fields="['id', 'nickname']" option-label="nickname" sort-by="nickname ASC" + :use-like="false" /> <VnSelect :label="t('Family')" @@ -816,6 +879,8 @@ es: Create buy: Crear compra Invert quantity value: Invertir valor de cantidad Check buy amount: Marcar como correcta la cantidad de compra + Transfer buys: Transferir compras + Entry: Entrada </i18n> <style lang="scss" scoped> .centered-container { diff --git a/src/pages/Entry/Card/EntryDescriptor.vue b/src/pages/Entry/Card/EntryDescriptor.vue index 560114283..202f94997 100644 --- a/src/pages/Entry/Card/EntryDescriptor.vue +++ b/src/pages/Entry/Card/EntryDescriptor.vue @@ -92,7 +92,7 @@ const getEntryRedirectionFilter = (entry) => { }; function showEntryReport() { - openReport(`Entries/${entityId.value}/entry-order-pdf`); + openReport(`Entries/${entityId.value}/entry-order-pdf`, {}, true); } function showNotification(type, message) { @@ -147,7 +147,7 @@ async function deleteEntry() { <template> <EntityDescriptor :url="`Entries/${entityId}`" - :filter="entryFilter" + :user-filter="entryFilter" title="supplier.nickname" data-key="Entry" width="lg-width" diff --git a/src/pages/Entry/Card/EntrySummary.vue b/src/pages/Entry/Card/EntrySummary.vue index 53967e66f..37a28968c 100644 --- a/src/pages/Entry/Card/EntrySummary.vue +++ b/src/pages/Entry/Card/EntrySummary.vue @@ -84,7 +84,10 @@ onMounted(async () => { :label="t('globals.company')" :value="entry?.company?.code" /> - <VnLv :label="t('globals.reference')" :value="entry?.reference" /> + <VnLv + :label="t('entry.list.tableVisibleColumns.reference')" + :value="entry?.reference" + /> <VnLv :label="t('entry.summary.invoiceNumber')" :value="entry?.invoiceNumber" @@ -159,6 +162,7 @@ onMounted(async () => { /> </div> <div class="card-content"> + <VnLv :label="t('travel.awbFk')" :value="entry.travel.awbFk" /> <VnCheckbox :label="t('entry.summary.travelDelivered')" v-model="entry.travel.isDelivered" diff --git a/src/pages/Entry/EntryStockBought.vue b/src/pages/Entry/EntryStockBought.vue index 5da51d5a6..6168f0737 100644 --- a/src/pages/Entry/EntryStockBought.vue +++ b/src/pages/Entry/EntryStockBought.vue @@ -162,8 +162,8 @@ async function beforeSave(data, getChanges) { } await Promise.all(patchPromises); - const filteredChanges = changes.filter((change) => change?.isReal !== false); - data.creates = filteredChanges; + data.creates = []; + return data; } </script> <template> @@ -203,7 +203,7 @@ async function beforeSave(data, getChanges) { </VnRow> </template> </VnSubToolbar> - <QDialog v-model="travelDialogRef" :maximized="true" :class="['vn-row', 'wrap']"> + <QDialog v-model="travelDialogRef" :class="['vn-row', 'wrap']"> <FormModelPopup :url-update="`Travels/${travel?.id}`" model="travel" @@ -252,12 +252,15 @@ async function beforeSave(data, getChanges) { </span> </template> <template #column-footer-reserve> - <span> + <span class="q-pr-xs"> {{ round(footer.reserve) }} </span> </template> <template #column-footer-bought> - <span :style="boughtStyle(footer?.bought, footer?.reserve)"> + <span + :style="boughtStyle(footer?.bought, footer?.reserve)" + class="q-pr-xs" + > {{ round(footer.bought) }} </span> </template> @@ -275,7 +278,7 @@ async function beforeSave(data, getChanges) { } .column { min-width: 35%; - margin-top: 5%; + margin-top: 1%; } .text-negative { color: $negative !important; diff --git a/src/pages/Entry/locale/es.yml b/src/pages/Entry/locale/es.yml index 10d863ea2..2c80299bc 100644 --- a/src/pages/Entry/locale/es.yml +++ b/src/pages/Entry/locale/es.yml @@ -25,7 +25,7 @@ entry: entryTypeDescription: Tipo entrada invoiceAmount: Importe dated: Fecha - inventoryEntry: Es inventario + inventoryEntry: Es inventario summary: commission: Comisión currency: Moneda @@ -33,7 +33,8 @@ entry: invoiceAmount: Importe ordered: Pedida booked: Contabilizada - excludedFromAvailable: Excluido + excludedFromAvailable: Excluir del disponible + isConfirmed: Lista para etiquetar travelReference: Referencia travelAgency: Agencia travelShipped: F. envio @@ -56,7 +57,7 @@ entry: observation: Observación commission: Comisión booked: Contabilizada - excludedFromAvailable: Excluido + excludedFromAvailable: Excluir del disponible initialTemperature: Ini °C finalTemperature: Fin °C buys: @@ -119,9 +120,9 @@ entry: supplierName: Proveedor entryFilter: params: - isExcludedFromAvailable: Excluido + isExcludedFromAvailable: Excluir del disponible isOrdered: Pedida - isConfirmed: Confirmado + isConfirmed: Lista para etiquetar isReceived: Recibida isRaid: Raid landed: Fecha diff --git a/src/pages/Travel/Card/TravelBasicData.vue b/src/pages/Travel/Card/TravelBasicData.vue index b1adc8126..a6ef8ad19 100644 --- a/src/pages/Travel/Card/TravelBasicData.vue +++ b/src/pages/Travel/Card/TravelBasicData.vue @@ -36,7 +36,7 @@ const warehousesOptionsIn = ref([]); auto-load :filter="{ where: { isDestiny: TRUE } }" /> - <FormModel :url-update="`Travels/${route.params.id}`" model="Travel" auto-load> + <FormModel :url-update="`Travels/${route.params.id}`" model="Travel"> <template #form="{ data }"> <VnRow> <VnInput v-model="data.ref" :label="t('globals.reference')" /> @@ -57,8 +57,8 @@ const warehousesOptionsIn = ref([]); <VnRow> <VnInputDate v-model="data.availabled" - :label="t('travel.summary.availabled')" - /> + :label="t('travel.summary.availabled')" + /> <VnInputTime v-model="data.availabled" :label="t('travel.summary.availabledHour')" @@ -96,6 +96,7 @@ const warehousesOptionsIn = ref([]); </QIcon> </template> </VnInput> + <VnInput v-model="data.awbFk" :label="t('travel.awbFk')" /> </VnRow> <VnRow> <QCheckbox v-model="data.isRaid" :label="t('travel.basicData.isRaid')" /> diff --git a/src/pages/Travel/Card/TravelFilter.js b/src/pages/Travel/Card/TravelFilter.js index 05436834f..0799e449c 100644 --- a/src/pages/Travel/Card/TravelFilter.js +++ b/src/pages/Travel/Card/TravelFilter.js @@ -12,6 +12,7 @@ export default { 'isRaid', 'daysInForward', 'availabled', + 'awbFk', ], include: [ { diff --git a/test/cypress/integration/entry/entryCard/entryBuys.spec.js b/test/cypress/integration/entry/entryCard/entryBuys.spec.js index f8f5e6b80..b5e185a8e 100644 --- a/test/cypress/integration/entry/entryCard/entryBuys.spec.js +++ b/test/cypress/integration/entry/entryCard/entryBuys.spec.js @@ -80,6 +80,11 @@ describe('EntryBuys', () => { checkColor('amount', COLORS.positive); cy.saveCard(); + cy.get('tbody > tr [tabindex="0"][role="checkbox"]').click(); + cy.dataCy('transferBuys').should('be.enabled').click(); + cy.dataCy('entryDestinyInput').should('be.visible').type('100'); + cy.dataCy('transferBuysBtn').click(); + cy.deleteEntry(); }); diff --git a/test/cypress/integration/ticket/ticketList.spec.js b/test/cypress/integration/ticket/ticketList.spec.js index a3d8fe908..5613a5854 100644 --- a/test/cypress/integration/ticket/ticketList.spec.js +++ b/test/cypress/integration/ticket/ticketList.spec.js @@ -35,7 +35,7 @@ describe('TicketList', () => { cy.get('.summaryBody').should('exist'); }); - it.skip('filter client and create ticket', () => { + it('filter client and create ticket', () => { cy.intercept('GET', /\/api\/Tickets\/filter/).as('ticketSearchbar'); searchResults(); cy.wait('@ticketSearchbar'); @@ -44,6 +44,7 @@ describe('TicketList', () => { cy.dataCy('Customer ID_input').type('1101{enter}'); cy.get('[data-cy="vnTableCreateBtn"] > .q-btn__content > .q-icon').click(); + cy.waitSpinner(); cy.dataCy('Customer_select').should('have.value', 'Bruce Wayne'); cy.dataCy('Address_select').click();