@@ -15,7 +18,9 @@
}
@media screen and (max-width: 800px) {
.vn-row {
- flex-direction: column;
+ &:not(.wrap) {
+ flex-direction: column;
+ }
}
}
diff --git a/src/composables/getTotal.js b/src/composables/getTotal.js
new file mode 100644
index 000000000..41c4330c4
--- /dev/null
+++ b/src/composables/getTotal.js
@@ -0,0 +1,10 @@
+import { toCurrency } from 'src/filters';
+
+export function getTotal(rows, key, opts = {}) {
+ const { currency, cb } = opts;
+ const total = rows.reduce((acc, row) => acc + +(cb ? cb(row) : row[key] || 0), 0);
+
+ return currency
+ ? toCurrency(total, currency == 'default' ? undefined : currency)
+ : total;
+}
diff --git a/src/i18n/locale/en.yml b/src/i18n/locale/en.yml
index 12177c58f..4d3e02a67 100644
--- a/src/i18n/locale/en.yml
+++ b/src/i18n/locale/en.yml
@@ -40,6 +40,8 @@ globals:
noChanges: No changes to save
changesToSave: You have changes pending to save
confirmRemove: You are about to delete this row. Are you sure?
+ rowWillBeRemoved: This row will be removed
+ sureToContinue: Are you sure you want to continue?
rowAdded: Row added
rowRemoved: Row removed
pleaseWait: Please wait...
@@ -84,7 +86,7 @@ globals:
description: Description
id: Id
order: Order
- original: Original
+ original: Phys. Doc
file: File
selectFile: Select a file
copyClipboard: Copy on clipboard
@@ -261,6 +263,7 @@ globals:
clientsActionsMonitor: Clients and actions
serial: Serial
medical: Mutual
+ supplier: Supplier
created: Created
worker: Worker
now: Now
@@ -760,56 +763,6 @@ parking:
searchBar:
info: You can search by parking code
label: Search parking...
-invoiceIn:
- list:
- ref: Reference
- supplier: Supplier
- supplierRef: Supplier ref.
- serialNumber: Serial number
- serial: Serial
- file: File
- issued: Issued
- isBooked: Is booked
- awb: AWB
- amount: Amount
- card:
- issued: Issued
- amount: Amount
- client: Client
- company: Company
- customerCard: Customer card
- ticketList: Ticket List
- vat: Vat
- dueDay: Due day
- intrastat: Intrastat
- summary:
- supplier: Supplier
- supplierRef: Supplier ref.
- currency: Currency
- docNumber: Doc number
- issued: Expedition date
- operated: Operation date
- bookEntried: Entry date
- bookedDate: Booked date
- sage: Sage withholding
- vat: Undeductible VAT
- company: Company
- booked: Booked
- expense: Expense
- taxableBase: Taxable base
- rate: Rate
- sageVat: Sage vat
- sageTransaction: Sage transaction
- dueDay: Date
- bank: Bank
- amount: Amount
- foreignValue: Foreign value
- dueTotal: Due day
- noMatch: Do not match
- code: Code
- net: Net
- stems: Stems
- country: Country
order:
field:
salesPersonFk: Sales Person
@@ -1305,6 +1258,7 @@ components:
active: Is active
visible: Is visible
floramondo: Is floramondo
+ showBadDates: Show future items
userPanel:
copyToken: Token copied to clipboard
settings: Settings
diff --git a/src/i18n/locale/es.yml b/src/i18n/locale/es.yml
index e918516d9..5bf53da76 100644
--- a/src/i18n/locale/es.yml
+++ b/src/i18n/locale/es.yml
@@ -39,6 +39,8 @@ globals:
noChanges: Sin cambios que guardar
changesToSave: Tienes cambios pendientes de guardar
confirmRemove: Vas a eliminar este registro. ¿Continuar?
+ rowWillBeRemoved: Esta linea se eliminará
+ sureToContinue: ¿Seguro que quieres continuar?
rowAdded: Fila añadida
rowRemoved: Fila eliminada
pleaseWait: Por favor espera...
@@ -86,7 +88,7 @@ globals:
description: Descripción
id: Id
order: Orden
- original: Original
+ original: Doc. física
file: Fichero
selectFile: Seleccione un fichero
copyClipboard: Copiar en portapapeles
@@ -265,6 +267,7 @@ globals:
clientsActionsMonitor: Clientes y acciones
serial: Facturas por serie
medical: Mutua
+ supplier: Proveedor
created: Fecha creación
worker: Trabajador
now: Ahora
@@ -806,54 +809,6 @@ parking:
searchBar:
info: Puedes buscar por código de parking
label: Buscar parking...
-invoiceIn:
- list:
- ref: Referencia
- supplier: Proveedor
- supplierRef: Ref. proveedor
- serialNumber: Num. serie
- shortIssued: F. emisión
- serial: Serie
- file: Fichero
- issued: Fecha emisión
- isBooked: Conciliada
- awb: AWB
- amount: Importe
- card:
- issued: Fecha emisión
- amount: Importe
- client: Cliente
- company: Empresa
- customerCard: Ficha del cliente
- ticketList: Listado de tickets
- vat: Iva
- dueDay: Fecha de vencimiento
- summary:
- supplier: Proveedor
- supplierRef: Ref. proveedor
- currency: Divisa
- docNumber: Número documento
- issued: Fecha de expedición
- operated: Fecha operación
- bookEntried: Fecha asiento
- bookedDate: Fecha contable
- sage: Retención sage
- vat: Iva no deducible
- company: Empresa
- booked: Contabilizada
- expense: Gasto
- taxableBase: Base imp.
- rate: Tasa
- sageTransaction: Sage transación
- dueDay: Fecha
- bank: Caja
- amount: Importe
- foreignValue: Divisa
- dueTotal: Vencimiento
- code: Código
- net: Neto
- stems: Tallos
- country: País
department:
pageTitles:
basicData: Basic data
@@ -1285,6 +1240,7 @@ components:
active: Activo
visible: Visible
floramondo: Floramondo
+ showBadDates: Ver items a futuro
userPanel:
copyToken: Token copiado al portapapeles
settings: Configuración
diff --git a/src/pages/Account/AccountConnections.vue b/src/pages/Account/AccountConnections.vue
index 4d3450665..057745831 100644
--- a/src/pages/Account/AccountConnections.vue
+++ b/src/pages/Account/AccountConnections.vue
@@ -27,15 +27,15 @@ const filter = {
order: 'created DESC',
};
-const urlPath = 'AccessTokens';
+const urlPath = 'VnTokens';
const refresh = () => paginateRef.value.fetch();
const navigate = (id) => router.push({ name: 'AccountSummary', params: { id } });
-const killSession = async (id) => {
+const killSession = async ({ userId, created }) => {
try {
- await axios.delete(`${urlPath}/${id}`);
+ await axios.post(`${urlPath}/killSession`, { userId, created });
paginateRef.value.fetch();
notify(t('Session killed'), 'positive');
} catch (error) {
@@ -84,7 +84,7 @@ const killSession = async (id) => {
openConfirmationModal(
t('Session will be killed'),
t('Are you sure you want to continue?'),
- () => killSession(row.id)
+ () => killSession(row)
)
"
outline
diff --git a/src/pages/Customer/components/CustomerSamplesCreate.vue b/src/pages/Customer/components/CustomerSamplesCreate.vue
index 0470dc176..79f4fe449 100644
--- a/src/pages/Customer/components/CustomerSamplesCreate.vue
+++ b/src/pages/Customer/components/CustomerSamplesCreate.vue
@@ -4,6 +4,7 @@ import { useI18n } from 'vue-i18n';
import { useRoute, useRouter } from 'vue-router';
import axios from 'axios';
+import { usePrintService } from 'composables/usePrintService';
import { useQuasar } from 'quasar';
import { useState } from 'src/composables/useState';
@@ -27,7 +28,7 @@ const router = useRouter();
const state = useState();
const user = state.getUser();
const stateStore = useStateStore();
-
+const { sendEmail } = usePrintService();
const client = ref({});
const hasChanged = ref(false);
const isLoading = ref(false);
@@ -156,22 +157,33 @@ const onSubmit = async () => {
}
};
-const onDataSaved = async ({
- addressId,
- companyFk,
- companyId,
- from,
- recipient,
- replyTo,
-}) => {
- await axios.post(`Clients/${route.params.id}/incoterms-authorization-email`, {
- addressId,
- companyFk,
- companyId,
- from,
- recipient,
- replyTo,
- });
+const getSamples = async () => {
+ try {
+ const filter = { where: { id: initialData.typeFk } };
+ let { data } = await axios.get('Samples', {
+ params: { filter: JSON.stringify(filter) },
+ });
+ return data[0];
+ } catch (error) {
+ notify('errors.create', 'negative');
+ }
+};
+
+getSamples();
+const onDataSaved = async () => {
+ try {
+ const params = {
+ recipientId: initialData.recipientId,
+ recipient: initialData.recipient,
+ replyTo: initialData.replyTo,
+ };
+ setParams(params);
+ const samplesData = await getSamples();
+ const path = `${samplesData.model}/${route.params.id}/${samplesData.code}-email`;
+ await sendEmail(path, params);
+ } catch (error) {
+ notify('errors.create', 'negative');
+ }
toCustomerSamples();
};
diff --git a/src/pages/Dashboard/DashboardMain.vue b/src/pages/Dashboard/DashboardMain.vue
index 6da39ce25..a339120e2 100644
--- a/src/pages/Dashboard/DashboardMain.vue
+++ b/src/pages/Dashboard/DashboardMain.vue
@@ -55,6 +55,15 @@ const pinnedModules = computed(() => navigation.getPinnedModules());
>
{{ t(item.title) }}
+
+ {{ '(' + item.keyBinding + ')' }}
+
+ {{
+ 'Ctrl + Alt + ' +
+ item.keyBinding.toUpperCase()
+ }}
+
+
diff --git a/src/pages/Entry/Card/EntryBuys.vue b/src/pages/Entry/Card/EntryBuys.vue
index e9a9ab815..ff89faada 100644
--- a/src/pages/Entry/Card/EntryBuys.vue
+++ b/src/pages/Entry/Card/EntryBuys.vue
@@ -26,7 +26,6 @@ const { notify } = useNotify();
const rowsSelected = ref([]);
const entryBuysPaginateRef = ref(null);
-const packagingsOptions = ref(null);
const originalRowDataCopy = ref(null);
const getInputEvents = (colField, props) => {
@@ -66,7 +65,10 @@ const tableColumnComponents = computed(() => ({
'map-options': true,
'use-input': true,
'hide-selected': true,
- options: packagingsOptions.value,
+ url: 'Packagings',
+ fields: ['id'],
+ where: { freightItemFk: true },
+ 'sort-by': 'id ASC',
dense: true,
},
event: getInputEvents,
@@ -304,13 +306,6 @@ const lockIconType = (groupingMode, mode) => {