Merge branch 'dev' into update_quasar_version
gitea/salix-front/pipeline/head This commit looks good
Details
gitea/salix-front/pipeline/head This commit looks good
Details
This commit is contained in:
commit
3f753a97e7
|
@ -7,7 +7,9 @@ import { isDialogOpened } from 'src/filters';
|
|||
|
||||
const arrayDataStore = useArrayDataStore();
|
||||
|
||||
export function useArrayData(key = useRoute().meta.moduleName, userOptions) {
|
||||
export function useArrayData(key, userOptions) {
|
||||
key ??= useRoute().meta.moduleName;
|
||||
|
||||
if (!key) throw new Error('ArrayData: A key is required to use this composable');
|
||||
|
||||
if (!arrayDataStore.get(key)) arrayDataStore.set(key);
|
||||
|
|
|
@ -106,7 +106,7 @@ const { openConfirmationModal } = useVnConfirm();
|
|||
:to="{
|
||||
name: 'WorkerList',
|
||||
query: {
|
||||
params: JSON.stringify({ departmentFk: entityId }),
|
||||
table: JSON.stringify({ departmentFk: entityId }),
|
||||
},
|
||||
}"
|
||||
>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<script setup>
|
||||
import { onMounted, computed, reactive, ref, nextTick, watch } from 'vue';
|
||||
import { onMounted, computed, ref, nextTick } from 'vue';
|
||||
import { useI18n } from 'vue-i18n';
|
||||
import { useRoute, useRouter } from 'vue-router';
|
||||
import { useRoute } from 'vue-router';
|
||||
|
||||
import TicketDescriptorProxy from 'src/pages/Ticket/Card/TicketDescriptorProxy.vue';
|
||||
import EntryDescriptorProxy from 'src/pages/Entry/Card/EntryDescriptorProxy.vue';
|
||||
|
@ -22,19 +22,16 @@ import VnSubToolbar from 'components/ui/VnSubToolbar.vue';
|
|||
|
||||
const { t } = useI18n();
|
||||
const route = useRoute();
|
||||
const router = useRouter();
|
||||
const state = useState();
|
||||
const user = state.getUser();
|
||||
const today = ref(Date.vnNew());
|
||||
const today = Date.vnNew();
|
||||
today.setHours(0, 0, 0, 0);
|
||||
const warehousesOptions = ref([]);
|
||||
const itemBalancesRef = ref(null);
|
||||
const itemsBalanceFilter = reactive({
|
||||
where: { itemFk: route.params.id, warehouseFk: null, date: null },
|
||||
});
|
||||
const itemBalances = ref([]);
|
||||
const warehouseFk = ref(null);
|
||||
const _showWhatsBeforeInventory = ref(false);
|
||||
const itemBalances = computed(() => arrayDataItemBalances.store.data);
|
||||
const where = computed(() => arrayDataItemBalances.store.filter.where || {});
|
||||
const showWhatsBeforeInventory = ref(false);
|
||||
const inventoriedDate = ref(null);
|
||||
let arrayDataItemBalances = useArrayData('ItemBalances');
|
||||
|
||||
const originTypeMap = {
|
||||
entry: {
|
||||
|
@ -122,36 +119,28 @@ const columns = computed(() => [
|
|||
},
|
||||
]);
|
||||
|
||||
const showWhatsBeforeInventory = computed({
|
||||
get: () => _showWhatsBeforeInventory.value,
|
||||
set: (val) => {
|
||||
_showWhatsBeforeInventory.value = val;
|
||||
if (!val) itemsBalanceFilter.where.date = null;
|
||||
else itemsBalanceFilter.where.date = inventoriedDate.value ?? new Date();
|
||||
},
|
||||
});
|
||||
|
||||
onMounted(async () => {
|
||||
today.value.setHours(0, 0, 0, 0);
|
||||
if (route.query.warehouseFk) warehouseFk.value = route.query.warehouseFk;
|
||||
else if (user.value) warehouseFk.value = user.value.warehouseFk;
|
||||
itemsBalanceFilter.where.warehouseFk = warehouseFk.value;
|
||||
const { data } = await axios.get('Configs/findOne');
|
||||
inventoriedDate.value = data.inventoried;
|
||||
const ref = where.value;
|
||||
const query = route.query;
|
||||
inventoriedDate.value =
|
||||
(await axios.get('Configs/findOne')).data?.inventoried || today;
|
||||
|
||||
if (query.warehouseFk) ref.warehouseFk = query.warehouseFk;
|
||||
else if (!ref.warehouseFk && user.value) ref.warehouseFk = user.value.warehouseFk;
|
||||
if (ref.date) showWhatsBeforeInventory.value = true;
|
||||
ref.itemFk = route.params.id;
|
||||
|
||||
arrayDataItemBalances = useArrayData('ItemBalances', {
|
||||
url: 'Items/getBalance',
|
||||
filter: { where: ref },
|
||||
});
|
||||
|
||||
await fetchItemBalances();
|
||||
await scrollToToday();
|
||||
await updateWarehouse(warehouseFk.value);
|
||||
await updateWarehouse(ref.warehouseFk);
|
||||
});
|
||||
|
||||
watch(
|
||||
() => router.currentRoute.value.params.id,
|
||||
(newId) => {
|
||||
itemsBalanceFilter.where.itemFk = newId;
|
||||
itemBalancesRef.value.fetch();
|
||||
}
|
||||
);
|
||||
|
||||
const fetchItemBalances = async () => await itemBalancesRef.value.fetch();
|
||||
const fetchItemBalances = async () => await arrayDataItemBalances.fetch({});
|
||||
|
||||
const getBadgeAttrs = (_date) => {
|
||||
const isSameDate = date.isSameDate(today.value, _date);
|
||||
|
@ -178,23 +167,13 @@ const formatDateForAttribute = (dateValue) => {
|
|||
};
|
||||
|
||||
async function updateWarehouse(warehouseFk) {
|
||||
const stock = useArrayData('descriptorStock', {
|
||||
userParams: {
|
||||
warehouseFk,
|
||||
},
|
||||
});
|
||||
const stock = useArrayData('descriptorStock', { userParams: { warehouseFk } });
|
||||
await stock.fetch({});
|
||||
stock.store.data.itemFk = route.params.id;
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<FetchData
|
||||
ref="itemBalancesRef"
|
||||
url="Items/getBalance"
|
||||
:filter="itemsBalanceFilter"
|
||||
@on-fetch="(data) => (itemBalances = data)"
|
||||
/>
|
||||
<FetchData
|
||||
url="Warehouses"
|
||||
:filter="{ fields: ['id', 'name'], order: 'name ASC' }"
|
||||
|
@ -207,27 +186,30 @@ async function updateWarehouse(warehouseFk) {
|
|||
<VnSelect
|
||||
:label="t('itemDiary.warehouse')"
|
||||
:options="warehousesOptions"
|
||||
hide-selected
|
||||
option-label="name"
|
||||
option-value="id"
|
||||
dense
|
||||
v-model="itemsBalanceFilter.where.warehouseFk"
|
||||
v-model="where.warehouseFk"
|
||||
@update:model-value="
|
||||
(value) => fetchItemBalances() && updateWarehouse(value)
|
||||
(val) => fetchItemBalances() && updateWarehouse(val)
|
||||
"
|
||||
class="q-mr-lg"
|
||||
:is-clearable="false"
|
||||
/>
|
||||
<QCheckbox
|
||||
:label="t('itemDiary.showBefore')"
|
||||
v-model="showWhatsBeforeInventory"
|
||||
@update:model-value="fetchItemBalances"
|
||||
@update:model-value="
|
||||
async (val) => {
|
||||
if (!val) where.date = null;
|
||||
else where.date = inventoriedDate;
|
||||
await fetchItemBalances();
|
||||
}
|
||||
"
|
||||
class="q-mr-lg"
|
||||
/>
|
||||
<VnInputDate
|
||||
v-if="showWhatsBeforeInventory"
|
||||
:label="t('itemDiary.since')"
|
||||
dense
|
||||
v-model="itemsBalanceFilter.where.date"
|
||||
v-model="where.date"
|
||||
@update:model-value="fetchItemBalances"
|
||||
/>
|
||||
</div>
|
||||
|
|
|
@ -36,18 +36,7 @@ const exprBuilder = (param, value) => {
|
|||
}
|
||||
};
|
||||
|
||||
const where = {
|
||||
itemFk: route.params.id,
|
||||
};
|
||||
|
||||
const arrayData = useArrayData('ItemLastEntries', {
|
||||
url: 'Items/lastEntriesFilter',
|
||||
order: ['landed DESC', 'buyFk DESC'],
|
||||
exprBuilder: exprBuilder,
|
||||
userFilter: {
|
||||
where: where,
|
||||
},
|
||||
});
|
||||
let arrayData = useArrayData('ItemLastEntries');
|
||||
const itemLastEntries = ref([]);
|
||||
|
||||
const columns = computed(() => [
|
||||
|
@ -161,25 +150,51 @@ const getDate = (date, type) => {
|
|||
};
|
||||
|
||||
const updateFilter = async () => {
|
||||
let filter;
|
||||
if (!from.value && to.value) filter = { lte: to.value };
|
||||
else if (from.value && !to.value) filter = { gte: from.value };
|
||||
else if (from.value && to.value) filter = { between: [from.value, to.value] };
|
||||
|
||||
const userFilter = arrayData.store.userFilter.where;
|
||||
|
||||
userFilter.landed = filter;
|
||||
let landed;
|
||||
if (!from.value && to.value) landed = { lte: to.value };
|
||||
else if (from.value && !to.value) landed = { gte: from.value };
|
||||
else if (from.value && to.value) landed = { between: [from.value, to.value] };
|
||||
|
||||
arrayData.store.filter.where.landed = landed;
|
||||
await fetchItemLastEntries();
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
const _from = Date.vnNew();
|
||||
_from.setDate(_from.getDate() - 75);
|
||||
from.value = getDate(_from, 'from');
|
||||
const _to = Date.vnNew();
|
||||
_to.setDate(_to.getDate() + 10);
|
||||
to.value = getDate(_to, 'to');
|
||||
const landed = arrayData.store.filter.where?.landed;
|
||||
arrayData = useArrayData('ItemLastEntries', {
|
||||
url: 'Items/lastEntriesFilter',
|
||||
order: ['landed DESC', 'buyFk DESC'],
|
||||
exprBuilder: exprBuilder,
|
||||
filter: {
|
||||
where: {
|
||||
itemFk: route.params.id,
|
||||
landed,
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
if (landed) {
|
||||
const key = Object.keys(landed)[0];
|
||||
switch (key) {
|
||||
case 'gte':
|
||||
from.value = landed.gte;
|
||||
break;
|
||||
case 'lte':
|
||||
to.value = landed.lte;
|
||||
break;
|
||||
case 'between':
|
||||
from.value = landed.between[0];
|
||||
to.value = landed.between[1];
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
const _from = Date.vnNew();
|
||||
_from.setDate(_from.getDate() - 75);
|
||||
from.value = getDate(_from, 'from');
|
||||
const _to = Date.vnNew();
|
||||
_to.setDate(_to.getDate() + 10);
|
||||
to.value = getDate(_to, 'to');
|
||||
}
|
||||
|
||||
updateFilter();
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
/// <reference types="cypress" />
|
||||
describe('ClaimPhoto', () => {
|
||||
// redmine.verdnatura.es/issues/8417
|
||||
describe.skip('ClaimPhoto', () => {
|
||||
beforeEach(() => {
|
||||
const claimId = 1;
|
||||
cy.login('developer');
|
||||
|
|
|
@ -8,8 +8,8 @@ describe('EntryMy when is supplier', () => {
|
|||
},
|
||||
});
|
||||
});
|
||||
|
||||
it('should open buyLabel when is supplier', () => {
|
||||
// https://redmine.verdnatura.es/issues/8418
|
||||
it.skip('should open buyLabel when is supplier', () => {
|
||||
cy.get(
|
||||
'[to="/null/3"] > .q-card > .column > .q-btn > .q-btn__content > .q-icon'
|
||||
).click();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/// <reference types="cypress" />
|
||||
|
||||
describe('InvoiceInCorrective', () => {
|
||||
// https://redmine.verdnatura.es/issues/8419
|
||||
describe.skip('InvoiceInCorrective', () => {
|
||||
const createCorrective = '.q-menu > .q-list > :nth-child(6) > .q-item__section';
|
||||
const rectificativeSection = '.q-drawer-container .q-list > a:nth-child(6)';
|
||||
const saveDialog = '.q-card > .q-card__actions > .q-btn--standard ';
|
||||
|
|
|
@ -21,8 +21,8 @@ describe('InvoiceInList', () => {
|
|||
cy.url().should('include', `/invoice-in/${id}/summary`);
|
||||
});
|
||||
});
|
||||
|
||||
it('should open the details', () => {
|
||||
// https://redmine.verdnatura.es/issues/8420
|
||||
it.skip('should open the details', () => {
|
||||
cy.get(firstDetailBtn).click();
|
||||
cy.get(summaryHeaders).eq(1).contains('Basic data');
|
||||
cy.get(summaryHeaders).eq(4).contains('Vat');
|
||||
|
|
|
@ -35,8 +35,8 @@ describe('InvoiceOut summary', () => {
|
|||
cy.dataCy('VnConfirm_confirm').click();
|
||||
cy.checkNotification('InvoiceOut deleted');
|
||||
});
|
||||
|
||||
it('should transfer the invoice ', () => {
|
||||
// https://redmine.verdnatura.es/issues/8415
|
||||
it.skip('should transfer the invoice ', () => {
|
||||
cy.typeSearchbar('T1111111{enter}');
|
||||
cy.dataCy('descriptor-more-opts').click();
|
||||
cy.get('.q-menu > .q-list > :nth-child(1)').click();
|
||||
|
|
|
@ -15,8 +15,8 @@ describe('Item list', () => {
|
|||
cy.get('.q-menu .q-item').contains('Anthurium').click();
|
||||
cy.get('.q-virtual-scroll__content > :nth-child(4) > :nth-child(4)').click();
|
||||
});
|
||||
|
||||
it('should create an item', () => {
|
||||
// https://redmine.verdnatura.es/issues/8421
|
||||
it.skip('should create an item', () => {
|
||||
const data = {
|
||||
Description: { val: `Test item` },
|
||||
Type: { val: `Crisantemo`, type: 'select' },
|
||||
|
|
|
@ -18,8 +18,8 @@ describe('Item tag', () => {
|
|||
+cy.dataCy('crudModelDefaultSaveBtn').click();
|
||||
cy.checkNotification("The tag or priority can't be repeated for an item");
|
||||
});
|
||||
|
||||
it('should add a new tag', () => {
|
||||
// https://redmine.verdnatura.es/issues/8422
|
||||
it.skip('should add a new tag', () => {
|
||||
cy.get('.q-page').should('be.visible');
|
||||
cy.get('.q-page-sticky > div').click();
|
||||
cy.get('.q-page-sticky > div').click();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/// <reference types="cypress" />
|
||||
|
||||
describe('Ticket expedtion', () => {
|
||||
// https://redmine.verdnatura.es/issues/8423
|
||||
describe.skip('Ticket expedtion', () => {
|
||||
const tableContent = '.q-table .q-virtual-scroll__content';
|
||||
const stateTd = 'td:nth-child(9)';
|
||||
|
||||
|
|
|
@ -30,8 +30,8 @@ describe('TicketList', () => {
|
|||
cy.get(firstRow).find('.q-btn:first').click();
|
||||
cy.get('@windowOpen').should('be.calledWithMatch', /\/ticket\/\d+\/sale/);
|
||||
});
|
||||
|
||||
it('should open ticket summary', () => {
|
||||
// https://redmine.verdnatura.es/issues/8424
|
||||
it.skip('should open ticket summary', () => {
|
||||
searchResults();
|
||||
cy.get(firstRow).find('.q-btn:last').click();
|
||||
cy.dataCy('ticketSummary').should('exist');
|
||||
|
|
|
@ -53,7 +53,8 @@ describe('VnLocation', () => {
|
|||
cy.waitForElement('.q-card');
|
||||
cy.get(inputLocation).click();
|
||||
});
|
||||
it('Show all options', function () {
|
||||
// https://redmine.verdnatura.es/issues/8436
|
||||
it.skip('Show all options', function () {
|
||||
cy.get(locationOptions).should('have.length.at.least', 5);
|
||||
});
|
||||
it('input filter location as "al"', function () {
|
||||
|
|
|
@ -18,8 +18,8 @@ describe('ZoneWarehouse', () => {
|
|||
cy.get(saveBtn).click();
|
||||
cy.checkNotification(dataError);
|
||||
});
|
||||
|
||||
it('should create & remove a warehouse', () => {
|
||||
// https://redmine.verdnatura.es/issues/8425
|
||||
it.skip('should create & remove a warehouse', () => {
|
||||
cy.addBtnClick();
|
||||
cy.fillInForm(data);
|
||||
cy.get(saveBtn).click();
|
||||
|
|
Loading…
Reference in New Issue