Only add taxes that have labels to invoice rows. Be able to overwrite invoice row taxes when changing taxes on team.

This commit is contained in:
HenriT
2021-04-22 16:04:49 +03:00
parent 4bbb6a6ab2
commit f0dec10854
6 changed files with 62 additions and 10 deletions

View File

@ -26,5 +26,11 @@
"company_city": "City", "company_city": "City",
"company_county": "County/State", "company_county": "County/State",
"company_country": "Country" "company_country": "Country"
},
"tax_modal": {
"title": "Overwrite taxes for current invoice rows?",
"ok_title": "Overwrite",
"cancel_title": "Dismiss",
"taxes_updated": "Taxes updated"
} }
} }

View File

@ -26,5 +26,11 @@
"company_city": "Linn", "company_city": "Linn",
"company_county": "Maakond", "company_county": "Maakond",
"company_country": "Riik" "company_country": "Riik"
},
"tax_modal": {
"title": "Kirjuta antud arve ridade maksud üle?",
"ok_title": "Kirjuta üle",
"cancel_title": "Sulge",
"taxes_updated": "Maksud uuendatud"
} }
} }

View File

@ -5,7 +5,7 @@
<h4>{{ $t('title') }}</h4> <h4>{{ $t('title') }}</h4>
<div v-if="team"> <div v-if="team">
<button class="btn btn-sm btn-primary" <button class="btn btn-sm btn-primary"
@click="$emit('done')">{{ $t('done') }} @click="done">{{ $t('done') }}
</button> </button>
</div> </div>
</div> </div>
@ -62,7 +62,7 @@
</b-tab> </b-tab>
<b-tab :title="$t('tabs.taxes')" class="col-12"> <b-tab :title="$t('tabs.taxes')" class="col-12">
<TeamTaxes class="row"/> <TeamTaxes class="row" @changed="taxesChanged = true"/>
</b-tab> </b-tab>
</b-tabs> </b-tabs>
@ -96,6 +96,7 @@ export default {
return { return {
errors: new Errors(), errors: new Errors(),
loading: false, loading: false,
taxesChanged: false,
}; };
}, },
computed: { computed: {
@ -113,6 +114,25 @@ export default {
}) })
.catch(err => this.errors.set(err.errors)); .catch(err => this.errors.set(err.errors));
}, },
async done() {
if (this.taxesChanged) {
await this.promptUpdateInvoiceRowTaxes();
}
this.$emit('done');
},
async promptUpdateInvoiceRowTaxes() {
const confirmed = await this.$bvModal.msgBoxConfirm(this.$t('tax_modal.title'), {
okTitle: this.$t('tax_modal.ok_title'),
okVariant: 'primary',
cancelTitle: this.$t('tax_modal.cancel_title'),
cancelVariant: 'btn-link',
contentClass: 'bg-base dp--24',
});
if (confirmed) {
await this.$store.dispatch('invoiceRows/overwriteTaxes');
NotificationService.success(this.$t('tax_modal.taxes_updated'));
}
},
}, },
}; };
</script> </script>

View File

@ -48,6 +48,7 @@ export default {
if (confirmed) { if (confirmed) {
await this.$store.dispatch('taxes/deleteTax', field.id); await this.$store.dispatch('taxes/deleteTax', field.id);
try { try {
this.$emit('changed');
NotificationService.success(this.$t('notification_deleted')); NotificationService.success(this.$t('notification_deleted'));
} catch (err) { } catch (err) {
NotificationService.error(err.message); NotificationService.error(err.message);
@ -59,6 +60,7 @@ export default {
props, props,
taxId: tax.id, taxId: tax.id,
}); });
this.$emit('changed');
}, },
}, },
}; };

View File

@ -2,6 +2,16 @@ import InvoiceRow from '@/store/models/invoice-row';
import InvoiceRowTax from '@/store/models/invoice-row-tax'; import InvoiceRowTax from '@/store/models/invoice-row-tax';
import { flatten, uniqBy } from 'lodash'; import { flatten, uniqBy } from 'lodash';
function addTaxes(taxes, row) {
taxes.forEach((tax) => {
const rowTax = new InvoiceRowTax();
rowTax.label = tax.label;
rowTax.value = tax.value;
rowTax.row_id = row.id;
rowTax.$save();
});
}
export default { export default {
namespaced: true, namespaced: true,
state: {}, state: {},
@ -35,16 +45,21 @@ export default {
if (client && client.has_tax) { if (client && client.has_tax) {
const taxes = getters.taxes.length > 0 const taxes = getters.taxes.length > 0
? getters.taxes ? getters.taxes
: rootGetters['taxes/all']; : rootGetters['taxes/allWithLabels'];
taxes.forEach((tax) => { addTaxes(taxes, row);
const rowTax = new InvoiceRowTax();
rowTax.label = tax.label;
rowTax.value = tax.value;
rowTax.row_id = row.id;
rowTax.$save();
});
} }
}, },
overwriteTaxes({ rootGetters, rootState }) {
const taxes = rootGetters['taxes/allWithLabels'];
const rows = InvoiceRow.query()
.where('invoice_id', rootState.invoices.invoiceId)
.get();
rows.forEach((row) => {
InvoiceRowTax.delete(tax => tax.row_id === row.id)
.then(() => addTaxes(taxes, row));
});
},
async removeRow(store, rowId) { async removeRow(store, rowId) {
await InvoiceRow.delete(rowId); await InvoiceRow.delete(rowId);
}, },

View File

@ -40,5 +40,8 @@ export default {
all() { all() {
return Tax.all(); return Tax.all();
}, },
allWithLabels() {
return Tax.all().filter(tax => !!tax.label);
},
}, },
}; };