@@ -58,7 +58,7 @@ onMounted(async () => {
dash
/>
diff --git a/src/pages/Entry/Card/EntryDescriptor.vue b/src/pages/Entry/Card/EntryDescriptor.vue
index 188e66358..c54ecc3f0 100644
--- a/src/pages/Entry/Card/EntryDescriptor.vue
+++ b/src/pages/Entry/Card/EntryDescriptor.vue
@@ -7,9 +7,9 @@ import CardDescriptor from 'components/ui/CardDescriptor.vue';
import VnLv from 'src/components/ui/VnLv.vue';
import { toDate } from 'src/filters';
-import { usePrintService } from 'composables/usePrintService';
import { getUrl } from 'src/composables/getUrl';
import filter from './EntryFilter.js';
+import EntryDescriptorMenu from './EntryDescriptorMenu.vue';
const $props = defineProps({
id: {
@@ -21,7 +21,6 @@ const $props = defineProps({
const route = useRoute();
const { t } = useI18n();
-const { openReport } = usePrintService();
const entryDescriptorRef = ref(null);
const url = ref();
@@ -52,10 +51,6 @@ const getEntryRedirectionFilter = (entry) => {
to,
});
};
-
-const showEntryReport = () => {
- openReport(`Entries/${route.params.id}/entry-order-pdf`);
-};
@@ -68,9 +63,7 @@ const showEntryReport = () => {
data-key="Entry"
>
-
- {{ t('Show entry report') }}
-
+
@@ -154,7 +147,6 @@ es:
Supplier card: Ficha del proveedor
All travels with current agency: Todos los envíos con la agencia actual
All entries with current supplier: Todas las entradas con el proveedor actual
- Show entry report: Ver informe del pedido
Go to module index: Ir al índice del modulo
Inventory entry: Es inventario
Virtual entry: Es una redada
diff --git a/src/pages/Entry/Card/EntryDescriptorMenu.vue b/src/pages/Entry/Card/EntryDescriptorMenu.vue
new file mode 100644
index 000000000..a357b46fe
--- /dev/null
+++ b/src/pages/Entry/Card/EntryDescriptorMenu.vue
@@ -0,0 +1,22 @@
+
+
+
+
+ {{ $t('entryList.list.showEntryReport') }}
+
+
diff --git a/src/pages/Entry/Card/EntrySummary.vue b/src/pages/Entry/Card/EntrySummary.vue
index 4fb81d18f..755e39454 100644
--- a/src/pages/Entry/Card/EntrySummary.vue
+++ b/src/pages/Entry/Card/EntrySummary.vue
@@ -12,6 +12,9 @@ import { getUrl } from 'src/composables/getUrl';
import axios from 'axios';
import FetchedTags from 'src/components/ui/FetchedTags.vue';
import VnToSummary from 'src/components/ui/VnToSummary.vue';
+import EntryDescriptorMenu from './EntryDescriptorMenu.vue';
+import VnRow from 'src/components/ui/VnRow.vue';
+import VnTitle from 'src/components/common/VnTitle.vue';
const route = useRoute();
const { t } = useI18n();
@@ -147,9 +150,8 @@ async function setEntryData(data) {
}
const fetchEntryBuys = async () => {
- const { data } = await axios.get(`Entries/${entry.value.id}/getBuys`);
- if (data) entryBuys.value = data;
-
+ const { data } = await axios.get(`Entries/${entry.value.id}/getBuys`);
+ if (data) entryBuys.value = data;
};
@@ -171,15 +173,15 @@ const fetchEntryBuys = async () => {
{{ entry.id }} - {{ entry.supplier.nickname }}
+
+
+
-
+
{
/>
-
+
@@ -212,61 +211,45 @@ const fetchEntryBuys = async () => {
:label="t('entry.summary.travelAgency')"
:value="entry.travel.agency?.name"
/>
-
+
-
-
+
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
-import { computed } from 'vue';
+import { computed, ref } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import { QBtn } from 'quasar';
import VnPaginate from 'src/components/ui/VnPaginate.vue';
import { usePrintService } from 'composables/usePrintService';
-const { openReport } = usePrintService();
+const { openReport } = usePrintService();
+const buyRows = ref([]);
const route = useRoute();
const { t } = useI18n();
const $props = defineProps({
id: {
- type: String,
+ type: Number,
required: false,
default: null,
},
});
const entityId = computed(() => $props.id || route.params.id);
-
const entriesTableColumns = computed(() => [
{
align: 'left',
@@ -63,34 +63,39 @@ const entriesTableColumns = computed(() => [
field: 'grouping',
},
]);
-
+function downloadCSV(rows) {
+ const headers = ['id', 'itemFk', 'name', 'stickers', 'packing', 'comment'];
+
+ const csvRows = rows.map((row) => {
+ const buy = row;
+ const item = buy.item || {};
+
+ return [
+ buy.id,
+ buy.itemFk,
+ item.name || '',
+ buy.stickers,
+ buy.packing,
+ item.comment || '',
+ ].join(',');
+ });
+
+ const csvContent = [headers.join(','), ...csvRows].join('\n');
+
+ const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });
+ const url = URL.createObjectURL(blob);
+ const link = document.createElement('a');
+ link.href = url;
+ link.setAttribute('download', `${entityId.value}data.csv`);
+ document.body.appendChild(link);
+ link.click();
+ document.body.removeChild(link);
+}
+
-
-
- {{ title }}
-
-
-
-
-
-
[
>
[
:grid="$q.screen.lt.md"
:no-data-label="t('globals.noResults')"
>
+
+
+
+
+
+
@@ -118,7 +144,6 @@ const entriesTableColumns = computed(() => [
- {{
- scope.opt?.name + ': ' + scope.opt?.nickname
- }}
+
+ {{ scope.opt?.name}}
+
+
+ {{ `#${scope.opt?.id } , ${ scope.opt?.nickname}` }}
+
diff --git a/src/pages/Entry/EntryLatestBuysFilter.vue b/src/pages/Entry/EntryLatestBuysFilter.vue
index 83124c1bf..59dddce26 100644
--- a/src/pages/Entry/EntryLatestBuysFilter.vue
+++ b/src/pages/Entry/EntryLatestBuysFilter.vue
@@ -58,7 +58,7 @@ const tagValues = ref([]);
-
-
+
+
- {{ opt.name }}
+
+ {{ scope.opt?.name}}
+
- {{ opt.nickname }}
+ {{ `#${scope.opt?.id } , ${ scope.opt?.nickname}` }}
@@ -85,7 +87,7 @@ const tagValues = ref([]);
-import { onMounted, ref, computed } from 'vue';
+import { ref, computed } from 'vue';
import { useI18n } from 'vue-i18n';
import EntryFilter from './EntryFilter.vue';
import VnSearchbar from 'src/components/ui/VnSearchbar.vue';
-import { useStateStore } from 'stores/useStateStore';
import VnTable from 'components/VnTable/VnTable.vue';
import RightMenu from 'src/components/common/RightMenu.vue';
import { toDate } from 'src/filters';
@@ -12,7 +11,6 @@ import EntrySummary from './Card/EntrySummary.vue';
import SupplierDescriptorProxy from 'src/pages/Supplier/Card/SupplierDescriptorProxy.vue';
import TravelDescriptorProxy from 'src/pages/Travel/Card/TravelDescriptorProxy.vue';
-const stateStore = useStateStore();
const { t } = useI18n();
const tableRef = ref();
@@ -245,7 +243,6 @@ const columns = computed(() => [
es:
- Inventory entry: Es inventario
Virtual entry: Es una redada
Search entries: Buscar entradas
You can search by entry reference: Puedes buscar por referencia de la entrada
diff --git a/src/pages/Entry/EntryStockBoughtFilter.vue b/src/pages/Entry/EntryStockBoughtFilter.vue
index e59332064..136881f17 100644
--- a/src/pages/Entry/EntryStockBoughtFilter.vue
+++ b/src/pages/Entry/EntryStockBoughtFilter.vue
@@ -65,6 +65,6 @@ onMounted(async () => {
es:
Date: Fecha
params:
- dated: Date
+ dated: Fecha
workerFk: Trabajador
diff --git a/src/pages/Entry/MyEntries.vue b/src/pages/Entry/MyEntries.vue
index 91a29b190..dbe05eb88 100644
--- a/src/pages/Entry/MyEntries.vue
+++ b/src/pages/Entry/MyEntries.vue
@@ -102,7 +102,7 @@ const columns = computed(() => [
actions: [
{
title: t('myEntries.printLabels'),
- icon: 'print',
+ icon: 'move_item',
isPrimary: true,
action: (row) => printBuys(row.id),
},
diff --git a/src/pages/Entry/locale/en.yml b/src/pages/Entry/locale/en.yml
index cd5113d84..59c2666a7 100644
--- a/src/pages/Entry/locale/en.yml
+++ b/src/pages/Entry/locale/en.yml
@@ -1,6 +1,7 @@
entryList:
list:
inventoryEntry: Inventory entry
+ showEntryReport: Show entry report
entryFilter:
filter:
search: General search
@@ -17,5 +18,6 @@ myEntries:
warehouseInFk: Warehouse in
daysOnward: Days onward
daysAgo: Days ago
+ downloadCsv: Download CSV
wasteRecalc:
recalcOk: The wastes were successfully recalculated
diff --git a/src/pages/Entry/locale/es.yml b/src/pages/Entry/locale/es.yml
index 3007c5d44..4fb7bbf08 100644
--- a/src/pages/Entry/locale/es.yml
+++ b/src/pages/Entry/locale/es.yml
@@ -4,6 +4,7 @@ You can search by entry reference: Puedes buscar por referencia de la entrada
entryList:
list:
inventoryEntry: Es inventario
+ showEntryReport: Ver informe del pedido
entryFilter:
filter:
search: Búsqueda general
@@ -20,5 +21,6 @@ myEntries:
warehouseInFk: Alm. entrada
daysOnward: Días adelante
daysAgo: Días atras
+ downloadCsv: Descargar CSV
wasteRecalc:
recalcOk: Se han recalculado las mermas correctamente
diff --git a/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue b/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue
index cb8a45833..9ba0df395 100644
--- a/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue
+++ b/src/pages/InvoiceIn/Card/InvoiceInDescriptor.vue
@@ -1,60 +1,30 @@
+
+
+
+
+
+ {{ t('InvoiceIn.descriptorMenu.toBook') }}
+
+
+
+
+
+ {{ t('InvoiceIn.descriptorMenu.toUnbook') }}
+
+
+
+ {{ t('InvoiceIn.descriptorMenu.deleteInvoice') }}
+
+
+ {{ t('InvoiceIn.descriptorMenu.cloneInvoice') }}
+
+
+ {{
+ t('InvoiceIn.descriptorMenu.showAgriculturalPdf')
+ }}
+
+
+ {{ t('InvoiceIn.descriptorMenu.sendAgriculturalPdf') }}...
+
+
+ {{ t('InvoiceIn.descriptorMenu.createCorrective') }}...
+
+
+ {{ t('components.smartCard.downloadFile') }}
+
+
+
+
+en:
+ isNotLinked: The entry {bookEntry} has been deleted with {accountingEntries} entries
+ isLinked: The entry has been linked to Sage. Please contact administration for further information
+ assertAction: Are you sure you want to {action} this invoice?
+es:
+ isNotLinked: Se ha eliminado el asiento nº {bookEntry} con {accountingEntries} apuntes
+ isLinked: El asiento fue enlazado a Sage, por favor contacta con administración
+ assertAction: Estas seguro de querer {action} esta factura?
+
diff --git a/src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue b/src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue
index 1c4091169..e529ea6cd 100644
--- a/src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue
+++ b/src/pages/InvoiceIn/Card/InvoiceInIntrastat.vue
@@ -161,7 +161,7 @@ const columns = computed(() => [
`#/invoice-in/${entityId.value}/${param}`;
+
+
+
diff --git a/src/pages/InvoiceIn/InvoiceInFilter.vue b/src/pages/InvoiceIn/InvoiceInFilter.vue
index 653692026..6259030e0 100644
--- a/src/pages/InvoiceIn/InvoiceInFilter.vue
+++ b/src/pages/InvoiceIn/InvoiceInFilter.vue
@@ -68,13 +68,26 @@ function handleDaysAgo(params, daysAgo) {
+ >
+
+
+
+
+ {{ scope.opt?.name}}
+
+
+ {{ `#${scope.opt?.id } , ${ scope.opt?.nickname}` }}
+
+
+
+
+
diff --git a/src/pages/InvoiceIn/InvoiceInList.vue b/src/pages/InvoiceIn/InvoiceInList.vue
index 43b9f2c11..2d8fb2989 100644
--- a/src/pages/InvoiceIn/InvoiceInList.vue
+++ b/src/pages/InvoiceIn/InvoiceInList.vue
@@ -165,18 +165,18 @@ const cols = computed(() => [
{{ scope.opt?.nickname }}
- #{{ scope.opt?.id }}
+ #{{ scope.opt?.id }}, {{ scope.opt?.name }}
diff --git a/src/pages/InvoiceIn/locale/en.yml b/src/pages/InvoiceIn/locale/en.yml
index ef7e31ac3..2d1458290 100644
--- a/src/pages/InvoiceIn/locale/en.yml
+++ b/src/pages/InvoiceIn/locale/en.yml
@@ -12,6 +12,26 @@ InvoiceIn:
amount: Amount
descriptor:
ticketList: Ticket list
+ descriptorMenu:
+ book: Book
+ unbook: Unbook
+ delete: Delete
+ clone: Clone
+ toBook: To book
+ toUnbook: To unbook
+ deleteInvoice: Delete invoice
+ invoiceDeleted: invoice deleted
+ cloneInvoice: Clone invoice
+ invoiceCloned: Invoice cloned
+ showAgriculturalPdf: Show agricultural receipt as PDF
+ sendAgriculturalPdf: Send agricultural receipt as PDF
+ checkSendInvoice: Are you sure you want to send it?
+ sendPdfInvoice: Send PDF invoice
+ createCorrective: Create rectificative invoice
+ correctiveInvoice: Rectificative invoice
+ originalInvoice: Original invoice
+ entry: Entry
+ emailEmpty: The email can't be empty
card:
client: Client
company: Company
@@ -44,7 +64,9 @@ InvoiceIn:
country: Country
params:
search: Id or supplier name
- account: Ledger account
- correctingFk: Rectificative
correctedFk: Corrected
isBooked: Is booked
+invoicein:
+ params:
+ account: Ledger account
+ correctingFk: Rectificative
diff --git a/src/pages/InvoiceIn/locale/es.yml b/src/pages/InvoiceIn/locale/es.yml
index ed5943489..e6b323a73 100644
--- a/src/pages/InvoiceIn/locale/es.yml
+++ b/src/pages/InvoiceIn/locale/es.yml
@@ -12,6 +12,26 @@ InvoiceIn:
amount: Importe
descriptor:
ticketList: Listado de tickets
+ descriptorMenu:
+ book: Asentar
+ unbook: Desasentar
+ delete: Eliminar
+ clone: Clonar
+ toBook: Contabilizar
+ toUnbook: Descontabilizar
+ deleteInvoice: Eliminar factura
+ invoiceDeleted: Factura eliminada
+ cloneInvoice: Clonar factura
+ invoiceCloned: Factura clonada
+ showAgriculturalPdf: Ver recibo agrícola como PDF
+ sendAgriculturalPdf: Enviar recibo agrícola como PDF
+ checkSendInvoice: ¿Estás seguro que quieres enviarlo?
+ sendPdfInvoice: Enviar factura a PDF
+ createCorrective: Crear factura rectificativa
+ correctiveInvoice: Factura rectificativa
+ originalInvoice: Factura origen
+ entry: Entrada
+ emailEmpty: El email no puede estar vacío
card:
client: Cliente
company: Empresa
@@ -42,6 +62,8 @@ InvoiceIn:
country: País
params:
search: Id o nombre proveedor
+ correctedFk: Rectificada
+invoicein:
+ params:
account: Cuenta contable
correctingFk: Rectificativa
- correctedFk: Rectificada
diff --git a/src/pages/InvoiceOut/Card/InvoiceOutSummary.vue b/src/pages/InvoiceOut/Card/InvoiceOutSummary.vue
index 81b3e7c41..3ceb447dd 100644
--- a/src/pages/InvoiceOut/Card/InvoiceOutSummary.vue
+++ b/src/pages/InvoiceOut/Card/InvoiceOutSummary.vue
@@ -10,6 +10,7 @@ import { getUrl } from 'src/composables/getUrl';
import TicketDescriptorProxy from 'src/pages/Ticket/Card/TicketDescriptorProxy.vue';
import CustomerDescriptorProxy from 'src/pages/Customer/Card/CustomerDescriptorProxy.vue';
import VnTitle from 'src/components/common/VnTitle.vue';
+import InvoiceOutDescriptorMenu from './InvoiceOutDescriptorMenu.vue';
onMounted(async () => {
fetch();
@@ -113,6 +114,9 @@ const ticketsColumns = ref([
{{ invoiceOut.ref }} - {{ invoiceOut.client?.socialName }}
+
+
+
diff --git a/src/pages/InvoiceOut/InvoiceOutFilter.vue b/src/pages/InvoiceOut/InvoiceOutFilter.vue
index dc1d833a2..cdc9f037a 100644
--- a/src/pages/InvoiceOut/InvoiceOutFilter.vue
+++ b/src/pages/InvoiceOut/InvoiceOutFilter.vue
@@ -47,6 +47,7 @@ const states = ref();
:label="t('Amount')"
v-model="params.amount"
is-outlined
+ data-cy="InvoiceOutFilterAmountBtn"
/>
diff --git a/src/pages/InvoiceOut/InvoiceOutGlobalForm.vue b/src/pages/InvoiceOut/InvoiceOutGlobalForm.vue
index e6c689523..392256473 100644
--- a/src/pages/InvoiceOut/InvoiceOutGlobalForm.vue
+++ b/src/pages/InvoiceOut/InvoiceOutGlobalForm.vue
@@ -101,6 +101,7 @@ onMounted(async () => {
dense
outlined
rounded
+ data-cy="InvoiceOutGlobalClientSelect"
>
@@ -125,6 +126,7 @@ onMounted(async () => {
dense
outlined
rounded
+ data-cy="InvoiceOutGlobalSerialSelect"
/>
{
v-model="formData.maxShipped"
:label="t('maxShipped')"
is-outlined
+ data-cy="InvoiceOutGlobalMaxShippedDate"
/>
{
dense
outlined
rounded
+ data-cy="InvoiceOutGlobalCompanySelect"
/>
{
dense
outlined
rounded
+ data-cy="InvoiceOutGlobalPrinterSelect"
/>