fix: refs #6900 fine tunning #661

Merged
jorgep merged 13 commits from 6900-hotfix-fineTunning into master 2024-09-04 13:58:59 +00:00
13 changed files with 195 additions and 193 deletions
Showing only changes of commit be63c8a7fa - Show all commits

View File

@ -0,0 +1,10 @@
import { toCurrency } from 'src/filters';
Review

Lo uso varias veces.

Lo uso varias veces.
export function getTotal(rows, key, opts = {}) {
const { currency, cb } = opts;
const total = rows.reduce((acc, row) => acc + +(cb ? cb(row) : row[key] || 0), 0);
jsegarra marked this conversation as resolved
Review

Porque no sacas el valor cb fuera? y asi simplificas el reduce
Por ciertpo, que significa cb? callback, no vedad?

Porque no sacas el valor cb fuera? y asi simplificas el reduce Por ciertpo, que significa cb? callback, no vedad?
Review

No acabo de entender lo de sacarlo fuera, la idea es que si en lugar de solo sumar, quiero llamar a una fn tipo saca el 20% o 30% lo puedas hacer pasandole un callback(cb)

No acabo de entender lo de sacarlo fuera, la idea es que si en lugar de solo sumar, quiero llamar a una fn tipo saca el 20% o 30% lo puedas hacer pasandole un callback(cb)
Review

Lo dejamos asi

Lo dejamos asi
return currency
? toCurrency(total, currency == 'default' ? undefined : currency)
: total;
}

View File

@ -252,6 +252,7 @@ globals:
ldap: LDAP
samba: Samba
serial: Serial
supplier: Supplier
created: Created
worker: Worker
now: Now
@ -738,56 +739,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

View File

@ -254,6 +254,7 @@ globals:
ldap: LDAP
samba: Samba
serial: Facturas por serie
supplier: Proveedor
created: Fecha creación
worker: Trabajador
now: Ahora
@ -782,54 +783,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

View File

@ -223,6 +223,10 @@ async function onSubmit() {
autofocus
/>
</VnRow>
<VnRow>
Review

Ahora están todas las fechas juntas.

Ahora están todas las fechas juntas.
<VnInputDate :label="t('Entry date')" v-model="data.bookEntried" />
<VnInputDate :label="t('Accounted date')" v-model="data.booked" />
</VnRow>
<VnRow>
<VnSelect
:label="t('Undeductible VAT')"
@ -285,10 +289,6 @@ async function onSubmit() {
</template>
</VnInput>
</VnRow>
<VnRow>
<VnInputDate :label="t('Entry date')" v-model="data.bookEntried" />
<VnInputDate :label="t('Accounted date')" v-model="data.booked" />
</VnRow>
<VnRow>
<VnSelect
:label="t('Currency')"

View File

@ -356,10 +356,7 @@ const createInvoiceInCorrection = async () => {
<template #body="{ entity }">
<VnLv :label="t('invoiceIn.card.issued')" :value="toDate(entity.issued)" />
<VnLv :label="t('invoiceIn.summary.booked')" :value="toDate(entity.booked)" />
<VnLv
:label="t('invoiceIn.card.amount')"
:value="toCurrency(totalAmount, entity.currency?.code)"
/>
<VnLv :label="t('invoiceIn.card.amount')" :value="toCurrency(totalAmount)" />
Review

Este valor siempre en euros.

Este valor siempre en euros.
<VnLv :label="t('invoiceIn.summary.supplier')">
<template #value>
<span class="link">

View File

@ -5,6 +5,7 @@ import { useI18n } from 'vue-i18n';
import axios from 'axios';
import { toDate } from 'src/filters';
import { useArrayData } from 'src/composables/useArrayData';
import { getTotal } from 'src/composables/getTotal';
import CrudModel from 'src/components/CrudModel.vue';
import FetchData from 'src/components/FetchData.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
@ -71,7 +72,7 @@ async function insert() {
await invoiceInFormRef.value.reload();
notify(t('globals.dataSaved'), 'positive');
}
const getTotalAmount = (rows) => rows.reduce((acc, { amount }) => acc + +amount, 0);
// const getTotal = (rows, key) => rows.reduce((acc, row) => acc + +row[key], 0);
</script>
<template>
<FetchData
@ -154,11 +155,17 @@ const getTotalAmount = (rows) => rows.reduce((acc, { amount }) => acc + +amount,
<QTd />
<QTd />
<QTd>
{{
toCurrency(getTotalAmount(rows), invoiceIn.currency.code)
}}
{{ getTotal(rows, 'amount', { currency: 'default' }) }}
</QTd>
<QTd>
<template v-if="isNotEuro(invoiceIn.currency.code)">
{{
getTotal(rows, 'foreignValue', {
currency: invoiceIn.currency.code,
})
}}
</template>
</QTd>
<QTd />
</QTr>
</template>
<template #item="props">

View File

@ -3,6 +3,7 @@ import { computed, ref } from 'vue';
import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n';
import { toCurrency } from 'src/filters';
import { getTotal } from 'src/composables/getTotal';
import CrudModel from 'src/components/CrudModel.vue';
import FetchData from 'src/components/FetchData.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
@ -72,9 +73,6 @@ const columns = computed(() => [
},
]);
const getTotal = (data, key) =>
data.reduce((acc, cur) => acc + +String(cur[key] || 0).replace(',', '.'), 0);
const formatOpt = (row, { model, options }, prop) => {
const obj = row[model];
const option = options.find(({ id }) => id == obj);
@ -154,7 +152,7 @@ const formatOpt = (row, { model, options }, prop) => {
<QTd />
<QTd />
<QTd>
{{ toCurrency(getTotal(rows, 'amount'), currency) }}
{{ getTotal(rows, 'amount', { currency: 'default' }) }}

En invoiceInDueDay, los parametros son los mismo, declaramos valores por defecto?

En invoiceInDueDay, los parametros son los mismo, declaramos valores por defecto?

No entiendo lo que quieres decir.

No entiendo lo que quieres decir.

El composable getTotal, tiene un 3er parametro vacio.
A lo mejor podriamos reemplzar opts={} por opts = {currency: 'default'}

El composable getTotal, tiene un 3er parametro vacio. A lo mejor podriamos reemplzar opts={} por opts = {currency: 'default'}

No siempre se que quiere devolver el total en valor monetario. A veces solo se quiere hacer la suma de cantidades.

No siempre se que quiere devolver el total en valor monetario. A veces solo se quiere hacer la suma de cantidades.
</QTd>
<QTd>
{{ getTotal(rows, 'net') }}

View File

@ -35,7 +35,7 @@ const vatColumns = ref([
name: 'landed',
label: 'invoiceIn.summary.taxableBase',
field: (row) => row.taxableBase,
format: (value) => toCurrency(value, currency.value),
format: (value) => toCurrency(value),
Review

valor en euros.

valor en euros.
sortable: true,
align: 'left',
},
@ -64,7 +64,7 @@ const vatColumns = ref([
name: 'rate',
label: 'invoiceIn.summary.rate',
field: (row) => taxRate(row.taxableBase, row.taxTypeSage?.rate),
format: (value) => toCurrency(value, currency.value),
format: (value) => toCurrency(value),
sortable: true,
align: 'left',
},
@ -72,7 +72,7 @@ const vatColumns = ref([
name: 'currency',
label: 'invoiceIn.summary.currency',
field: (row) => row.foreignValue,
format: (value) => value,
format: (val) => val && toCurrency(val, currency.value),
Review

valor en otra divisa.

valor en otra divisa.
sortable: true,
align: 'left',
},
@ -97,7 +97,7 @@ const dueDayColumns = ref([
name: 'amount',
label: 'invoiceIn.summary.amount',
field: (row) => row.amount,
format: (value) => toCurrency(value, currency.value),
format: (value) => toCurrency(value),
sortable: true,
align: 'left',
},
@ -105,7 +105,7 @@ const dueDayColumns = ref([
name: 'landed',
label: 'invoiceIn.summary.foreignValue',
field: (row) => row.foreignValue,
format: (value) => value,
format: (val) => val && toCurrency(val, currency.value),
sortable: true,
align: 'left',
},
@ -124,7 +124,7 @@ const intrastatColumns = ref([
{
name: 'amount',
label: 'invoiceIn.summary.amount',
field: (row) => toCurrency(row.amount, currency.value),
field: (row) => toCurrency(row.amount),
sortable: true,
align: 'left',
},
@ -179,7 +179,6 @@ const getTotalTax = (tax) =>
const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
</script>
<template>
<CardSummary
data-key="InvoiceInSummary"
@ -229,10 +228,7 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
:label="t('invoiceIn.summary.currency')"
:value="entity.currency?.code"
/>
<VnLv
:label="t('invoiceIn.summary.docNumber')"
:value="`${entity.serial}/${entity.serialNumber}`"
/>
<VnLv :label="t('invoiceIn.serial')" :value="`${entity.serial}`" />
</QCard>
<QCard class="vn-one">
<QCardSection class="q-pa-none">
@ -293,12 +289,9 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
<QCardSection class="q-pa-none">
<VnLv
:label="t('invoiceIn.summary.taxableBase')"
:value="toCurrency(entity.totals.totalTaxableBase, currency)"
/>
<VnLv
label="Total"
:value="toCurrency(entity.totals.totalVat, currency)"
:value="toCurrency(entity.totals.totalTaxableBase)"
Review

solo euros.

solo euros.
/>
<VnLv label="Total" :value="toCurrency(entity.totals.totalVat)" />
<VnLv :label="t('invoiceIn.summary.dueTotal')">
<template #value>
<QChip
@ -311,7 +304,7 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
: t('invoiceIn.summary.dueTotal')
"
>
{{ toCurrency(entity.totals.totalDueDay, currency) }}
{{ toCurrency(entity.totals.totalDueDay) }}
</QChip>
</template>
</VnLv>
@ -350,15 +343,17 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
<template #bottom-row>
<QTr class="bg">
<QTd></QTd>
<QTd>{{ toCurrency(entity.totals.totalTaxableBase) }}</QTd>
<QTd></QTd>
<QTd></QTd>
<QTd>{{ toCurrency(getTotalTax(entity.invoiceInTax)) }}</QTd>
<QTd>{{
toCurrency(entity.totals.totalTaxableBase, currency)
entity.totals.totalTaxableBaseForeignValue &&
toCurrency(
entity.totals.totalTaxableBaseForeignValue,
currency
)
}}</QTd>
<QTd></QTd>
<QTd></QTd>
<QTd>{{
toCurrency(getTotalTax(entity.invoiceInTax, currency))
}}</QTd>
<QTd></QTd>
</QTr>
</template>
</QTable>
@ -384,9 +379,17 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
<QTd></QTd>
<QTd></QTd>
<QTd>
{{ toCurrency(entity.totals.totalDueDay, currency) }}
{{ toCurrency(entity.totals.totalDueDay) }}
</QTd>
<QTd>
{{
entity.totals.totalDueDayForeignValue &&
toCurrency(
entity.totals.totalDueDayForeignValue,
currency
)
}}
</QTd>
<QTd></QTd>
</QTr>
</template>
</QTable>
@ -421,7 +424,7 @@ const getLink = (param) => `#/invoice-in/${entityId.value}/${param}`;
<template #bottom-row>
<QTr class="bg">
<QTd></QTd>
<QTd>{{ toCurrency(intrastatTotals.amount, currency) }}</QTd>
<QTd>{{ toCurrency(intrastatTotals.amount) }}</QTd>
<QTd>{{ intrastatTotals.net }}</QTd>
<QTd>{{ intrastatTotals.stems }}</QTd>
<QTd></QTd>

View File

@ -5,6 +5,7 @@ import { useI18n } from 'vue-i18n';
import { useQuasar } from 'quasar';
import axios from 'axios';
import { useArrayData } from 'src/composables/useArrayData';
import { getTotal } from 'src/composables/getTotal';
import { toCurrency } from 'src/filters';
import FetchData from 'src/components/FetchData.vue';
import VnSelect from 'src/components/common/VnSelect.vue';
@ -56,7 +57,7 @@ const columns = computed(() => [
{
name: 'taxablebase',
label: t('Taxable base'),
field: (row) => toCurrency(row.taxableBase, currency.value),
field: (row) => row.taxableBase,
model: 'taxableBase',
sortable: true,
tabIndex: 2,
@ -91,7 +92,7 @@ const columns = computed(() => [
label: t('Rate'),
sortable: true,
tabIndex: 5,
field: (row) => toCurrency(taxRate(row, row.taxTypeSageFk), currency.value),
field: (row) => taxRate(row, row.taxTypeSageFk),
align: 'left',
},
{
@ -162,9 +163,11 @@ async function addExpense() {
});
}
}
const getTotalTaxableBase = (rows) =>

Ahora se usa un composable.

Ahora se usa un composable.
rows.reduce((acc, { taxableBase }) => acc + +(taxableBase || 0), 0);
const getTotalRate = (rows) => rows.reduce((acc, cur) => acc + +taxRate(cur), 0);
const formatTotal = (rows, key, cb) => {
const total = rows.reduce((acc, row) => acc + +(cb ? cb(row) : row[key] || 0), 0);
return toCurrency(total, key == 'foreignValue' ? currency.value : undefined);
};
const formatOpt = (row, { model, options }, prop) => {
const obj = row[model];
@ -324,12 +327,24 @@ const formatOpt = (row, { model, options }, prop) => {
<QTd />
<QTd />
<QTd>
{{ toCurrency(getTotalTaxableBase(rows), currency) }}
{{ getTotal(rows, 'taxableBase', { currency: 'default' }) }}
</QTd>
<QTd />
<QTd />
<QTd> {{ toCurrency(getTotalRate(rows), currency) }}</QTd>
<QTd />
<QTd>
{{
getTotal(rows, null, { cb: taxRate, currency: 'default' })
}}</QTd
>
<QTd>
<template v-if="isNotEuro(invoiceIn.currency.code)">
{{
getTotal(rows, 'foreignValue', {
currency: invoiceIn.currency.code,
})
}}
</template>
</QTd>
</QTr>
</template>
<template #item="props">

View File

@ -28,6 +28,16 @@ const activities = ref([]);
</div>
</template>
<template #body="{ params, searchFn }">
<QItem>
<QItemSection>
<VnInputDate :label="t('From')" v-model="params.from" is-outlined />
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInputDate :label="t('To')" v-model="params.to" is-outlined />
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnSelect
@ -64,16 +74,6 @@ const activities = ref([]);
/>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInput
:label="t('params.serialNumber')"
v-model="params.serialNumber"
is-outlined
lazy-rules
/>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInput
@ -84,15 +84,6 @@ const activities = ref([]);
/>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInputDate
:label="t('Issued')"
v-model="params.issued"
is-outlined
/>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInput
@ -140,22 +131,6 @@ const activities = ref([]);
/>
</QItemSection>
</QItem>
<QExpansionItem :label="t('More options')" expand-separator>
<QItem>
<QItemSection>
<VnInputDate
:label="t('From')"
v-model="params.from"
is-outlined
/>
</QItemSection>
</QItem>
<QItem>
<QItemSection>
<VnInputDate :label="t('To')" v-model="params.to" is-outlined />
</QItemSection>
</QItem>
</QExpansionItem>
</template>
</VnFilterPanel>
</template>
@ -179,6 +154,7 @@ en:
correctedFk: Rectified
issued: Issued
to: To
from: From
awbCode: AWB
correctingFk: Rectificative
supplierActivityFk: Supplier activity
@ -201,6 +177,8 @@ es:
correctedFk: Rectificada
correctingFk: Rectificativa
supplierActivityFk: Actividad proveedor
from: Desde
to: Hasta
From: Desde
To: Hasta
Amount: Importe

View File

@ -47,12 +47,6 @@ const cols = computed(() => [
name: 'supplierRef',
label: t('invoiceIn.list.supplierRef'),
},
{
align: 'left',
name: 'serialNumber',
label: t('invoiceIn.list.serialNumber'),
},
{
align: 'left',
name: 'serial',
@ -141,7 +135,7 @@ const cols = computed(() => [
v-model="data.supplierFk"
url="Suppliers"
:fields="['id', 'nickname']"
:label="t('Supplier')"
:label="t('globals.supplier')"
option-value="id"
option-label="nickname"
:filter-options="['id', 'name']"
@ -162,7 +156,7 @@ const cols = computed(() => [
/>
<VnSelect
url="Companies"
:label="t('Company')"
:label="t('globals.company')"
:fields="['id', 'code']"
v-model="data.companyFk"
option-value="id"

View File

@ -0,0 +1,49 @@
invoiceIn:
serial: Serial
list:
ref: Reference
supplier: Supplier
supplierRef: Supplier ref.
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
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

View File

@ -0,0 +1,47 @@
invoiceIn:
serial: Serie
list:
ref: Referencia
supplier: Proveedor
supplierRef: Ref. proveedor
shortIssued: F. emisión
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