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 dbc3e4077..473446970 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 1b6ed7b71..b764b1e43 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/InvoiceInDescriptor.vue b/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue
index 4d9e180eb..9fa3bcbcb 100644
--- a/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue
+++ b/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue
@@ -6,24 +6,16 @@ import axios from 'axios';
import { toCurrency, toDate } from 'src/filters';
import VnLv from 'src/components/ui/VnLv.vue';
import CardDescriptor from 'components/ui/CardDescriptor.vue';
-import FetchData from 'src/components/FetchData.vue';
-import VnSelect from 'src/components/common/VnSelect.vue';
-import { useCapitalize } from 'src/composables/useCapitalize';
import SupplierDescriptorProxy from 'src/pages/Supplier/Card/SupplierDescriptorProxy.vue';
import InvoiceInDescriptorMenu from './InvoiceInDescriptorMenu.vue';
const $props = defineProps({ id: { type: Number, default: null } });
-const { push, currentRoute } = useRouter();
+const { currentRoute } = useRouter();
const { t } = useI18n();
const cardDescriptorRef = ref();
-const correctionDialogRef = ref();
const entityId = computed(() => $props.id || +currentRoute.value.params.id);
const totalAmount = ref();
-const config = ref();
-const cplusRectificationTypes = ref([]);
-const siiTypeInvoiceIns = ref([]);
-const invoiceCorrectionTypes = ref([]);
const filter = {
include: [
@@ -85,12 +77,6 @@ const routes = reactive({
return { name: 'EntryCard', params: { id } };
},
});
-const correctionFormData = reactive({
- invoiceReason: 2,
- invoiceType: 2,
- invoiceClass: 6,
-});
-const isNotFilled = computed(() => Object.values(correctionFormData).includes(null));
onBeforeMount(async () => {
await setInvoiceCorrection(entityId.value);
@@ -122,38 +108,8 @@ async function setInvoiceCorrection(id) {
(corrected) => corrected.correctingFk
);
}
-
-const createInvoiceInCorrection = async () => {
- const { data: correctingId } = await axios.post(
- 'InvoiceIns/corrective',
- Object.assign(correctionFormData, { id: entityId.value })
- );
- push({ path: `/invoice-in/${correctingId}/summary` });
-};
- (config = data)"
- />
- (cplusRectificationTypes = data)"
- auto-load
- />
- (siiTypeInvoiceIns = data)"
- auto-load
- />
- (invoiceCorrectionTypes = data)"
- auto-load
- />
{
-
+
@@ -227,65 +186,6 @@ const createInvoiceInCorrection = async () => {
-
-
-
-
-
- {{ t('Create rectificative invoice') }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-