diff --git a/src/components/common/VnInput.vue b/src/components/common/VnInput.vue
index 4c7445aab..e921d8e1f 100644
--- a/src/components/common/VnInput.vue
+++ b/src/components/common/VnInput.vue
@@ -42,10 +42,13 @@ const $props = defineProps({
type: Number,
default: null,
},
+ uppercase: {
+ type: Boolean,
+ default: false,
+ },
});
const vnInputRef = ref(null);
-const showPassword = ref(false);
const value = computed({
get() {
return $props.modelValue;
@@ -117,6 +120,10 @@ const handleInsertMode = (e) => {
input.setSelectionRange(cursorPos + 1, cursorPos + 1);
});
};
+
+const handleUppercase = () => {
+ value.value = value.value?.toUpperCase() || '';
+};
@@ -159,7 +166,16 @@ const handleInsertMode = (e) => {
emit('remove');
}
"
+ >
+
+
+
@@ -170,3 +186,14 @@ const handleInsertMode = (e) => {
+
+
+ en:
+ inputMin: Must be more than {value}
+ maxLength: The value exceeds {value} characters
+ inputMax: Must be less than {value}
+ es:
+ inputMin: Debe ser mayor a {value}
+ maxLength: El valor excede los {value} carácteres
+ inputMax: Debe ser menor a {value}
+
\ No newline at end of file
diff --git a/src/components/common/VnInputDate.vue b/src/components/common/VnInputDate.vue
index 952a843e3..a8888aad8 100644
--- a/src/components/common/VnInputDate.vue
+++ b/src/components/common/VnInputDate.vue
@@ -105,6 +105,7 @@ const manageDate = (date) => {
:rules="mixinRules"
:clearable="false"
@click="isPopupOpen = !isPopupOpen"
+ @keydown="isPopupOpen = false"
hide-bottom-space
>
diff --git a/src/components/common/VnInputTime.vue b/src/components/common/VnInputTime.vue
index 4147f8976..323427f5b 100644
--- a/src/components/common/VnInputTime.vue
+++ b/src/components/common/VnInputTime.vue
@@ -79,6 +79,7 @@ function dateToTime(newDate) {
style="min-width: 100px"
:rules="mixinRules"
@click="isPopupOpen = !isPopupOpen"
+ @keydown="isPopupOpen = false"
type="time"
hide-bottom-space
>
diff --git a/src/components/common/VnSelect.vue b/src/components/common/VnSelect.vue
index ee94a1d81..a3e85655d 100644
--- a/src/components/common/VnSelect.vue
+++ b/src/components/common/VnSelect.vue
@@ -294,7 +294,7 @@ async function onScroll({ to, direction, from, index }) {
}
}
-defineExpose({ opts: myOptions });
+defineExpose({ opts: myOptions, vnSelectRef });
function handleKeyDown(event) {
if (event.key === 'Tab' && !event.shiftKey) {
diff --git a/src/components/common/VnSelectDialog.vue b/src/components/common/VnSelectDialog.vue
index 12322c3fa..a4cd0011d 100644
--- a/src/components/common/VnSelectDialog.vue
+++ b/src/components/common/VnSelectDialog.vue
@@ -1,5 +1,5 @@
emit('update:modelValue', ...args)"
diff --git a/src/composables/useArrayData.js b/src/composables/useArrayData.js
index c13c4f9a6..6fb22a340 100644
--- a/src/composables/useArrayData.js
+++ b/src/composables/useArrayData.js
@@ -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);
diff --git a/src/css/app.scss b/src/css/app.scss
index d4790a6b8..a28a04a16 100644
--- a/src/css/app.scss
+++ b/src/css/app.scss
@@ -310,6 +310,14 @@ input::-webkit-inner-spin-button {
.no-visible {
visibility: hidden;
}
+
+.q-item > .q-item__section:has(.q-checkbox) {
+ max-width: min-content;
+}
+
+.row > .column:has(.q-checkbox) {
+ max-width: min-content;
+}
.q-field__inner {
.q-field__control {
min-height: auto !important;
diff --git a/src/filters/index.js b/src/filters/index.js
index a92d2eb07..bf1429aee 100644
--- a/src/filters/index.js
+++ b/src/filters/index.js
@@ -16,6 +16,7 @@ import getUpdatedValues from './getUpdatedValues';
import getParamWhere from './getParamWhere';
import parsePhone from './parsePhone';
import isDialogOpened from './isDialogOpened';
+import toCelsius from './toCelsius';
export {
getUpdatedValues,
@@ -36,4 +37,5 @@ export {
dashIfEmpty,
dateRange,
getParamWhere,
+ toCelsius,
};
diff --git a/src/filters/toCelsius.js b/src/filters/toCelsius.js
new file mode 100644
index 000000000..83cab32ca
--- /dev/null
+++ b/src/filters/toCelsius.js
@@ -0,0 +1,3 @@
+export default function toCelsius(value) {
+ return value ? `${value}°C` : '';
+}
diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml
index b9d9db586..353bd9a30 100644
--- a/src/i18n/locale/en.yml
+++ b/src/i18n/locale/en.yml
@@ -704,6 +704,7 @@ travel:
totalEntries: Total entries
totalEntriesTooltip: Total entries
daysOnward: Landed days onwards
+ awb: AWB
summary:
entryId: Entry Id
freight: Freight
diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml
index 627594b87..3260e38bb 100644
--- a/src/i18n/locale/es.yml
+++ b/src/i18n/locale/es.yml
@@ -700,6 +700,7 @@ travel:
totalEntries: ∑
totalEntriesTooltip: Entradas totales
daysOnward: Días de llegada en adelante
+ awb: AWB
summary:
entryId: Id entrada
freight: Porte
diff --git a/src/pages/Customer/Card/CustomerBillingData.vue b/src/pages/Customer/Card/CustomerBillingData.vue
index 48f729e29..29394ceec 100644
--- a/src/pages/Customer/Card/CustomerBillingData.vue
+++ b/src/pages/Customer/Card/CustomerBillingData.vue
@@ -38,7 +38,7 @@ const getBankEntities = (data, formData) => {
hide-selected
option-label="name"
option-value="id"
- v-model="data.payMethod"
+ v-model="data.payMethodFk"
/>
diff --git a/src/pages/Customer/Card/CustomerCredits.vue b/src/pages/Customer/Card/CustomerCredits.vue
index 1fa7047e5..d6e4be89e 100644
--- a/src/pages/Customer/Card/CustomerCredits.vue
+++ b/src/pages/Customer/Card/CustomerCredits.vue
@@ -59,6 +59,7 @@ const columns = computed(() => [
diff --git a/src/pages/Customer/Card/CustomerGreuges.vue b/src/pages/Customer/Card/CustomerGreuges.vue
index dcf297d12..47a589aaa 100644
--- a/src/pages/Customer/Card/CustomerGreuges.vue
+++ b/src/pages/Customer/Card/CustomerGreuges.vue
@@ -84,6 +84,7 @@ const columns = computed(() => [
component: 'number',
autofocus: true,
required: true,
+ positive: false,
},
format: ({ amount }) => toCurrency(amount),
create: true,
diff --git a/src/pages/Customer/CustomerList.vue b/src/pages/Customer/CustomerList.vue
index fdfd7ff9c..bd2947cfc 100644
--- a/src/pages/Customer/CustomerList.vue
+++ b/src/pages/Customer/CustomerList.vue
@@ -50,6 +50,14 @@ const columns = computed(() => [
isTitle: true,
create: true,
columnClass: 'expand',
+ attrs: {
+ uppercase: true,
+ },
+ columnFilter: {
+ attrs: {
+ uppercase: false,
+ },
+ },
},
{
align: 'left',
@@ -423,7 +431,7 @@ function handleLocation(data, location) {
:label="t('customer.summary.salesPerson')"
v-model="data.salesPersonFk"
:params="{
- departmentCodes: ['VT', 'shopping'],
+ departmentCodes: ['VT'],
}"
:has-avatar="true"
:id-value="data.salesPersonFk"
diff --git a/src/pages/Department/Card/DepartmentDescriptor.vue b/src/pages/Department/Card/DepartmentDescriptor.vue
index e08495faf..b219ccfe1 100644
--- a/src/pages/Department/Card/DepartmentDescriptor.vue
+++ b/src/pages/Department/Card/DepartmentDescriptor.vue
@@ -106,7 +106,7 @@ const { openConfirmationModal } = useVnConfirm();
:to="{
name: 'WorkerList',
query: {
- params: JSON.stringify({ departmentFk: entityId }),
+ table: JSON.stringify({ departmentFk: entityId }),
},
}"
>
diff --git a/src/pages/Entry/Card/EntryBasicData.vue b/src/pages/Entry/Card/EntryBasicData.vue
index 147287837..68d666fc0 100644
--- a/src/pages/Entry/Card/EntryBasicData.vue
+++ b/src/pages/Entry/Card/EntryBasicData.vue
@@ -3,7 +3,6 @@ import { ref } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import { useRole } from 'src/composables/useRole';
-
import FetchData from 'components/FetchData.vue';
import FormModel from 'components/FormModel.vue';
import VnRow from 'components/ui/VnRow.vue';
@@ -11,7 +10,7 @@ import VnInput from 'src/components/common/VnInput.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
import VnSelectDialog from 'src/components/common/VnSelectDialog.vue';
import FilterTravelForm from 'src/components/FilterTravelForm.vue';
-
+import VnInputNumber from 'src/components/common/VnInputNumber.vue';
import { toDate } from 'src/filters';
const route = useRoute();
@@ -26,6 +25,7 @@ const onFilterTravelSelected = (formData, id) => {
formData.travelFk = id;
};
+
{
- {{ scope.opt?.agencyModeName }} -
- {{ scope.opt?.warehouseInName }} ({{
- toDate(scope.opt?.shipped)
- }}) → {{ scope.opt?.warehouseOutName }} ({{
- toDate(scope.opt?.landed)
- }})
+
+ {{ scope.opt?.agencyModeName }} -
+ {{ scope.opt?.warehouseInName }}
+ ({{ toDate(scope.opt?.shipped) }}) →
+ {{ scope.opt?.warehouseOutName }}
+ ({{ toDate(scope.opt?.landed) }})
+
@@ -126,6 +125,13 @@ const onFilterTravelSelected = (formData, id) => {
/>
+
{
option-value="id"
option-label="code"
/>
-
+
+
+
diff --git a/src/pages/Entry/Card/EntrySummary.vue b/src/pages/Entry/Card/EntrySummary.vue
index 755e39454..8c46fb6e6 100644
--- a/src/pages/Entry/Card/EntrySummary.vue
+++ b/src/pages/Entry/Card/EntrySummary.vue
@@ -7,7 +7,7 @@ import CardSummary from 'components/ui/CardSummary.vue';
import VnLv from 'src/components/ui/VnLv.vue';
import TravelDescriptorProxy from 'src/pages/Travel/Card/TravelDescriptorProxy.vue';
-import { toDate, toCurrency } from 'src/filters';
+import { toDate, toCurrency, toCelsius } from 'src/filters';
import { getUrl } from 'src/composables/getUrl';
import axios from 'axios';
import FetchedTags from 'src/components/ui/FetchedTags.vue';
@@ -193,6 +193,14 @@ const fetchEntryBuys = async () => {
:label="t('entry.summary.invoiceNumber')"
:value="entry.invoiceNumber"
/>
+
+
[
name: 'invoiceAmount',
cardVisible: true,
},
+ {
+ align: 'left',
+ name: 'initialTemperature',
+ label: t('entry.basicData.initialTemperature'),
+ field: 'initialTemperature',
+ format: (row) => toCelsius(row.initialTemperature),
+ },
+ {
+ align: 'left',
+ name: 'finalTemperature',
+ label: t('entry.basicData.finalTemperature'),
+ field: 'finalTemperature',
+ format: (row) => toCelsius(row.finalTemperature),
+ },
{
label: t('entry.list.tableVisibleColumns.isExcludedFromAvailable'),
name: 'isExcludedFromAvailable',
@@ -188,7 +202,7 @@ const columns = computed(() => [
:array-data-props="{
url: 'Entries/filter',
order: 'id DESC',
- userFilter: 'entryFilter',
+ userFilter: entryFilter,
}"
>
diff --git a/src/pages/Entry/locale/en.yml b/src/pages/Entry/locale/en.yml
index ff83de0ab..97a3be32b 100644
--- a/src/pages/Entry/locale/en.yml
+++ b/src/pages/Entry/locale/en.yml
@@ -40,6 +40,8 @@ entry:
observation: Observation
booked: Booked
excludedFromAvailable: Inventory
+ initialTemperature: Ini °C
+ finalTemperature: Fin °C
buys:
observations: Observations
packagingFk: Box
diff --git a/src/pages/Entry/locale/es.yml b/src/pages/Entry/locale/es.yml
index 72072f6ab..993913417 100644
--- a/src/pages/Entry/locale/es.yml
+++ b/src/pages/Entry/locale/es.yml
@@ -41,6 +41,8 @@ entry:
commission: Comisión
booked: Asentado
excludedFromAvailable: Inventario
+ initialTemperature: Ini °C
+ finalTemperature: Fin °C
buys:
observations: Observaciónes
packagingFk: Embalaje
diff --git a/src/pages/InvoiceIn/Card/InvoiceInVat.vue b/src/pages/InvoiceIn/Card/InvoiceInVat.vue
index f7ef7d525..74fd02816 100644
--- a/src/pages/InvoiceIn/Card/InvoiceInVat.vue
+++ b/src/pages/InvoiceIn/Card/InvoiceInVat.vue
@@ -25,6 +25,7 @@ const sageTaxTypes = ref([]);
const sageTransactionTypes = ref([]);
const rowsSelected = ref([]);
const invoiceInFormRef = ref();
+const expenseRef = ref();
defineProps({
actionIcon: {
@@ -128,7 +129,7 @@ function autocompleteExpense(evt, row, col) {
({ id }) => id == useAccountShortToStandard(param)
);
- if (lookup) row[col.model] = lookup;
+ expenseRef.value.vnSelectDialogRef.vnSelectRef.toggleOption(lookup);
}
@@ -167,6 +168,7 @@ function autocompleteExpense(evt, row, col) {
-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;
}
- (itemBalances = data)"
- />
fetchItemBalances() && updateWarehouse(value)
+ (val) => fetchItemBalances() && updateWarehouse(val)
"
class="q-mr-lg"
+ :is-clearable="false"
/>
{
+ if (!val) where.date = null;
+ else where.date = inventoriedDate;
+ await fetchItemBalances();
+ }
+ "
class="q-mr-lg"
/>
diff --git a/src/pages/Item/Card/ItemLastEntries.vue b/src/pages/Item/Card/ItemLastEntries.vue
index c2df553c3..7d8890c2b 100644
--- a/src/pages/Item/Card/ItemLastEntries.vue
+++ b/src/pages/Item/Card/ItemLastEntries.vue
@@ -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();
diff --git a/src/pages/Supplier/Card/SupplierFiscalData.vue b/src/pages/Supplier/Card/SupplierFiscalData.vue
index 44235717f..1d9f3ab94 100644
--- a/src/pages/Supplier/Card/SupplierFiscalData.vue
+++ b/src/pages/Supplier/Card/SupplierFiscalData.vue
@@ -68,6 +68,8 @@ function handleLocation(data, location) {
'supplierActivityFk',
'healthRegister',
'street',
+ 'isVies',
+ 'isTrucker',
],
include: [
{
@@ -92,6 +94,7 @@ function handleLocation(data, location) {
[
align: 'left',
label: t('globals.name'),
name: 'socialName',
- create: true,
+ attrs: {
+ uppercase: true,
+ },
columnFilter: {
name: 'search',
+ attrs: {
+ uppercase: false,
+ },
},
isTitle: true,
},
@@ -118,14 +124,18 @@ const columns = computed(() => [
formInitialData: {},
mapper: (data) => {
data.name = data.socialName;
- delete data.socialName;
+
return data;
},
}"
:right-search="false"
order="id ASC"
:columns="columns"
- />
+ >
+
+
+
+
diff --git a/src/pages/Ticket/Card/TicketSale.vue b/src/pages/Ticket/Card/TicketSale.vue
index 8aa785c74..b849b3b35 100644
--- a/src/pages/Ticket/Card/TicketSale.vue
+++ b/src/pages/Ticket/Card/TicketSale.vue
@@ -54,7 +54,6 @@ const transfer = ref({
});
const tableRef = ref([]);
const canProceed = ref();
-const isLoading = ref(false);
watch(
() => route.params.id,
@@ -197,6 +196,7 @@ const changeQuantity = async (sale) => {
try {
if (!rowToUpdate.value) return;
rowToUpdate.value = null;
+ sale.isNew = false;
await updateQuantity(sale);
} catch (e) {
const { quantity } = tableRef.value.CrudModelRef.originalData.find(
@@ -214,9 +214,6 @@ const updateQuantity = async ({ quantity, id }) => {
};
const addSale = async (sale) => {
- if (isLoading.value) return;
-
- isLoading.value = true;
const params = {
barcode: sale.itemFk,
quantity: sale.quantity,
@@ -237,6 +234,7 @@ const addSale = async (sale) => {
sale.item = newSale.item;
notify('globals.dataSaved', 'positive');
+ sale.isNew = false;
arrayData.fetch({});
};
@@ -754,6 +752,7 @@ watch(
option-label="name"
option-value="id"
v-model="row.itemFk"
+ :use-like="false"
@update:model-value="updateItem(row)"
>
diff --git a/src/pages/Ticket/Card/TicketService.vue b/src/pages/Ticket/Card/TicketService.vue
index 950e6e8be..d045eadee 100644
--- a/src/pages/Ticket/Card/TicketService.vue
+++ b/src/pages/Ticket/Card/TicketService.vue
@@ -166,8 +166,10 @@ async function handleSave() {
v-model="row.ticketServiceTypeFk"
:options="ticketServiceOptions"
option-label="name"
+ :roles-allowed-to-create="['administrative']"
option-value="id"
hide-selected
+ sort-by="name ASC"
>
{
showValue: true,
},
{ label: 'm³', field: 'm3', name: 'm3', align: 'left', showValue: true },
+ {
+ label: t('entry.basicData.initialTemperature'),
+ field: 'initialTemperature',
+ name: 'initialTemperature',
+ align: 'left',
+ format: (val) => toCelsius(val),
+ },
+ {
+ label: t('entry.basicData.finalTemperature'),
+ field: 'finalTemperature',
+ name: 'finalTemperature',
+ align: 'left',
+ format: (val) => toCelsius(val),
+ },
{
label: '',
field: 'observation',
@@ -133,14 +147,14 @@ const thermographsTableColumns = computed(() => {
field: 'maxTemperature',
name: 'maxTemperature',
align: 'left',
- format: (val) => (val ? `${val}°` : ''),
+ format: (val) => toCelsius(val),
},
{
label: t('globals.minTemperature'),
field: 'minTemperature',
name: 'minTemperature',
align: 'left',
- format: (val) => (val ? `${val}°` : ''),
+ format: (val) => toCelsius(val),
},
{
label: t('globals.state'),
diff --git a/src/pages/Travel/Card/TravelThermographs.vue b/src/pages/Travel/Card/TravelThermographs.vue
index f63c0da6b..0e11588f1 100644
--- a/src/pages/Travel/Card/TravelThermographs.vue
+++ b/src/pages/Travel/Card/TravelThermographs.vue
@@ -10,7 +10,7 @@ import FetchData from 'src/components/FetchData.vue';
import axios from 'axios';
import useNotify from 'src/composables/useNotify.js';
-import { toDate } from 'src/filters';
+import { toDate, toCelsius } from 'src/filters';
import { downloadFile } from 'src/composables/downloadFile';
import { useArrayData } from 'src/composables/useArrayData';
@@ -68,14 +68,14 @@ const TableColumns = computed(() => {
field: 'maxTemperature',
name: 'maxTemperature',
align: 'left',
- format: (val) => (val ? `${val}°` : ''),
+ format: (val) => toCelsius(val),
},
{
label: t('globals.minTemperature'),
field: 'minTemperature',
name: 'minTemperature',
align: 'left',
- format: (val) => (val ? `${val}°` : ''),
+ format: (val) => toCelsius(val),
},
{
label: t('globals.state'),
diff --git a/src/pages/Travel/TravelList.vue b/src/pages/Travel/TravelList.vue
index 67fdb3254..c976678e0 100644
--- a/src/pages/Travel/TravelList.vue
+++ b/src/pages/Travel/TravelList.vue
@@ -79,6 +79,13 @@ const columns = computed(() => [
cardVisible: true,
create: true,
},
+ {
+ align: 'left',
+ name: 'awb',
+ label: t('travel.travelList.tableVisibleColumns.awb'),
+ columnFilter: false,
+ format: (row) => row.awbCode,
+ },
{
align: 'left',
name: 'warehouseInFk',
diff --git a/src/pages/Worker/Card/WorkerPda.vue b/src/pages/Worker/Card/WorkerPda.vue
index 3ceee2493..c1beef40d 100644
--- a/src/pages/Worker/Card/WorkerPda.vue
+++ b/src/pages/Worker/Card/WorkerPda.vue
@@ -27,7 +27,7 @@ const initialData = computed(() => {
return {
userFk: routeId.value,
deviceProductionFk: null,
- simSerialNumber: null,
+ simFk: null,
};
});
@@ -42,7 +42,7 @@ const deallocatePDA = async (deviceProductionFk) => {
function reloadData() {
initialData.value.deviceProductionFk = null;
- initialData.value.simSerialNumber = null;
+ initialData.value.simFk = null;
paginate.value.fetch();
}
@@ -89,7 +89,7 @@ function reloadData() {
/>
{
year: selectedDateYear.value,
week: selectedWeekNumber.value,
};
- const mail = (
- await axiosNoError.get(`Workers/${route.params.id}/mail`, {
- params: { filter: { where } },
- })
- ).data[0];
+ try {
+ const [{ data: mailData }, { data: countData }] = await Promise.all([
+ axiosNoError.get(`Workers/${route.params.id}/mail`, {
+ params: { filter: { where } },
+ }),
+ axiosNoError.get('WorkerTimeControlMails/count', { params: { where } }),
+ ]);
- if (!mail) state.value = null;
- else {
- state.value = mail.state;
- reason.value = mail.reason;
+ const mail = mailData[0];
+
+ state.value = mail?.state;
+ reason.value = mail?.reason;
+ canResend.value = !!countData.count;
+ } catch {
+ state.value = null;
}
-
- canResend.value = !!(
- await axiosNoError.get('WorkerTimeControlMails/count', { params: { where } })
- ).data.count;
};
const setHours = (data) => {
diff --git a/src/pages/Worker/WorkerList.vue b/src/pages/Worker/WorkerList.vue
index 48393a8c7..0b784b993 100644
--- a/src/pages/Worker/WorkerList.vue
+++ b/src/pages/Worker/WorkerList.vue
@@ -138,7 +138,11 @@ function uppercaseStreetModel(data) {
return {
get: () => (data.street ? data.street.toUpperCase() : ''),
set: (value) => {
- data.street = value.toUpperCase();
+ if (value) {
+ data.street = value.toUpperCase();
+ } else {
+ data.street = null;
+ }
},
};
}
diff --git a/test/cypress/integration/claim/claimPhoto.spec.js b/test/cypress/integration/claim/claimPhoto.spec.js
index 9b2978b19..0a7320060 100755
--- a/test/cypress/integration/claim/claimPhoto.spec.js
+++ b/test/cypress/integration/claim/claimPhoto.spec.js
@@ -1,5 +1,6 @@
///
-describe('ClaimPhoto', () => {
+// redmine.verdnatura.es/issues/8417
+describe.skip('ClaimPhoto', () => {
beforeEach(() => {
const claimId = 1;
cy.login('developer');
diff --git a/test/cypress/integration/entry/myEntry.spec.js b/test/cypress/integration/entry/myEntry.spec.js
index 4addec1c4..c25476419 100644
--- a/test/cypress/integration/entry/myEntry.spec.js
+++ b/test/cypress/integration/entry/myEntry.spec.js
@@ -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();
diff --git a/test/cypress/integration/invoiceIn/invoiceInCorrective.spec.js b/test/cypress/integration/invoiceIn/invoiceInCorrective.spec.js
index 0eb873355..c2f111892 100644
--- a/test/cypress/integration/invoiceIn/invoiceInCorrective.spec.js
+++ b/test/cypress/integration/invoiceIn/invoiceInCorrective.spec.js
@@ -1,6 +1,6 @@
///
-
-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 ';
diff --git a/test/cypress/integration/invoiceIn/invoiceInList.spec.js b/test/cypress/integration/invoiceIn/invoiceInList.spec.js
index d9ab3f7e7..0eb495419 100644
--- a/test/cypress/integration/invoiceIn/invoiceInList.spec.js
+++ b/test/cypress/integration/invoiceIn/invoiceInList.spec.js
@@ -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');
diff --git a/test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js b/test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js
index b7fd11307..27f887eeb 100644
--- a/test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js
+++ b/test/cypress/integration/invoiceOut/invoiceOutSummary.spec.js
@@ -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();
diff --git a/test/cypress/integration/item/itemList.spec.js b/test/cypress/integration/item/itemList.spec.js
index 49e393451..97e85a212 100644
--- a/test/cypress/integration/item/itemList.spec.js
+++ b/test/cypress/integration/item/itemList.spec.js
@@ -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' },
diff --git a/test/cypress/integration/item/itemTag.spec.js b/test/cypress/integration/item/itemTag.spec.js
index c2de93068..28e0a747f 100644
--- a/test/cypress/integration/item/itemTag.spec.js
+++ b/test/cypress/integration/item/itemTag.spec.js
@@ -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();
diff --git a/test/cypress/integration/ticket/ticketExpedition.spec.js b/test/cypress/integration/ticket/ticketExpedition.spec.js
index d74a122a1..d957f2136 100644
--- a/test/cypress/integration/ticket/ticketExpedition.spec.js
+++ b/test/cypress/integration/ticket/ticketExpedition.spec.js
@@ -1,6 +1,6 @@
///
-
-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)';
diff --git a/test/cypress/integration/ticket/ticketList.spec.js b/test/cypress/integration/ticket/ticketList.spec.js
index e273825c0..3337287c4 100644
--- a/test/cypress/integration/ticket/ticketList.spec.js
+++ b/test/cypress/integration/ticket/ticketList.spec.js
@@ -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');
diff --git a/test/cypress/integration/vnComponent/VnLocation.spec.js b/test/cypress/integration/vnComponent/VnLocation.spec.js
index 14eb0f978..09665a816 100644
--- a/test/cypress/integration/vnComponent/VnLocation.spec.js
+++ b/test/cypress/integration/vnComponent/VnLocation.spec.js
@@ -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 () {
diff --git a/test/cypress/integration/zone/zoneWarehouse.spec.js b/test/cypress/integration/zone/zoneWarehouse.spec.js
index 817e26312..a55a5619e 100644
--- a/test/cypress/integration/zone/zoneWarehouse.spec.js
+++ b/test/cypress/integration/zone/zoneWarehouse.spec.js
@@ -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();