150 lines
5.0 KiB
HTML
150 lines
5.0 KiB
HTML
<vn-crud-model
|
|
vn-id="model"
|
|
url="InvoiceInTaxes"
|
|
fields="[
|
|
'id',
|
|
'invoiceInFk',
|
|
'taxableBase',
|
|
'expenseFk',
|
|
'foreignValue',
|
|
'taxTypeSageFk',
|
|
'transactionTypeSageFk']"
|
|
link="{invoiceInFk: $ctrl.$params.id}"
|
|
data="$ctrl.taxes"
|
|
auto-load="true">
|
|
</vn-crud-model>
|
|
<vn-crud-model
|
|
url="Expenses"
|
|
data="expenses"
|
|
auto-load="true">
|
|
</vn-crud-model>
|
|
<vn-watcher
|
|
vn-id="watcher"
|
|
data="$ctrl.taxes"
|
|
form="form">
|
|
</vn-watcher>
|
|
<form name="form" ng-submit="$ctrl.onSubmit()">
|
|
<vn-card class="vn-pa-lg">
|
|
<vn-horizontal ng-repeat="invoiceInTax in $ctrl.taxes">
|
|
<vn-autocomplete vn-three vn-id="expense" vn-focus
|
|
label="Expense"
|
|
ng-model="invoiceInTax.expenseFk"
|
|
data="expenses"
|
|
show-field="id"
|
|
rule>
|
|
<tpl-item>{{id}}: {{name}}</tpl-item>
|
|
<append>
|
|
<vn-icon-button
|
|
vn-tooltip="Create expense"
|
|
icon="add_circle"
|
|
vn-click-stop="createExpense.show()">
|
|
</vn-icon-button>
|
|
</append>
|
|
</vn-autocomplete>
|
|
<vn-input-number vn-one
|
|
disabled="$ctrl.invoiceIn.currency.code != 'EUR'"
|
|
step="0.01"
|
|
label="Taxable base"
|
|
ng-model="invoiceInTax.taxableBase"
|
|
rule>
|
|
</vn-input-number>
|
|
<vn-autocomplete vn-three
|
|
label="Sage tax"
|
|
ng-model="invoiceInTax.taxTypeSageFk"
|
|
url="SageTaxTypes"
|
|
show-field="vat"
|
|
fields="['id', 'vat', 'rate']"
|
|
search-function="{or: [{id: $search}, {vat: {like: '%'+ $search +'%'}}]}"
|
|
selection="taxRateSelection"
|
|
rule>
|
|
<tpl-item>
|
|
<div>{{::vat}}</div>
|
|
<div class="text-secondary text-caption">#{{::id}}</div>
|
|
</tpl-item>
|
|
</vn-autocomplete>
|
|
<vn-autocomplete vn-three
|
|
label="Sage transaction"
|
|
ng-model="invoiceInTax.transactionTypeSageFk"
|
|
url="SageTransactionTypes"
|
|
show-field="transaction"
|
|
search-function="{or: [{id: $search}, {transaction: {like: '%'+ $search +'%'}}]}"
|
|
rule>
|
|
<tpl-item>
|
|
<div>{{::transaction}}</div>
|
|
<div class="text-secondary text-caption">#{{::id}}</div>
|
|
</tpl-item>
|
|
</vn-autocomplete>
|
|
<vn-textfield
|
|
disabled="true"
|
|
label="Rate"
|
|
field="$ctrl.taxRate(invoiceInTax, taxRateSelection) | currency:'EUR':2">
|
|
</vn-textfield>
|
|
<vn-input-number
|
|
disabled="$ctrl.invoiceIn.currency.code == 'EUR'"
|
|
label="Foreign value"
|
|
ng-model="invoiceInTax.foreignValue"
|
|
rule>
|
|
</vn-input-number>
|
|
<vn-none>
|
|
<vn-icon-button
|
|
vn-tooltip="Remove tax"
|
|
icon="delete"
|
|
ng-click="model.remove($index)"
|
|
tabindex="-1">
|
|
</vn-icon-button>
|
|
</vn-none>
|
|
</vn-horizontal>
|
|
<vn-one>
|
|
<vn-icon-button
|
|
vn-bind="+"
|
|
vn-tooltip="Add tax"
|
|
icon="add_circle"
|
|
ng-click="$ctrl.add()">
|
|
</vn-icon-button>
|
|
</vn-one>
|
|
</vn-card>
|
|
<vn-button-bar>
|
|
<vn-submit
|
|
disabled="!watcher.dataChanged()"
|
|
label="Save">
|
|
</vn-submit>
|
|
</vn-button-bar>
|
|
</form>
|
|
|
|
<!-- Dialog of create expense-->
|
|
<vn-dialog
|
|
vn-id="createExpense"
|
|
on-accept="$ctrl.onResponse()">
|
|
<tpl-body>
|
|
<section>
|
|
<h5 class="vn-py-sm">{{$ctrl.$t('New expense')}}</h5>
|
|
<vn-horizontal>
|
|
<vn-textfield vn-one
|
|
vn-id="code"
|
|
label="Code"
|
|
ng-model="$ctrl.expense.code"
|
|
required="true"
|
|
vn-focus>
|
|
</vn-textfield>
|
|
<vn-check
|
|
vn-one
|
|
label="It's a withholding"
|
|
ng-model="$ctrl.expense.isWithheld">
|
|
</vn-check>
|
|
</vn-horizontal>
|
|
<vn-horizontal>
|
|
<vn-textfield vn-one
|
|
vn-id="description"
|
|
label="Description"
|
|
ng-model="$ctrl.expense.description"
|
|
required="true">
|
|
</vn-textfield>
|
|
</vn-horizontal>
|
|
</section>
|
|
</tpl-body>
|
|
<tpl-buttons>
|
|
<input type="button" response="cancel" translate-attr="{value: 'Cancel'}"/>
|
|
<button response="accept" translate>Save</button>
|
|
</tpl-buttons>
|
|
</vn-dialog>
|