4548-invoiceIn-pdf #1113
|
@ -0,0 +1,50 @@
|
||||||
|
const {Report} = require('vn-print');
|
||||||
|
|
||||||
|
module.exports = Self => {
|
||||||
|
Self.remoteMethodCtx('invoiceInPdf', {
|
||||||
|
description: 'Returns the delivery note pdf',
|
||||||
|
accessType: 'READ',
|
||||||
|
accepts: [
|
||||||
|
{
|
||||||
|
arg: 'id',
|
||||||
|
type: 'number',
|
||||||
|
required: true,
|
||||||
|
description: 'The ticket id',
|
||||||
|
http: {source: 'path'}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
returns: [
|
||||||
|
{
|
||||||
|
arg: 'body',
|
||||||
|
type: 'file',
|
||||||
|
root: true
|
||||||
|
}, {
|
||||||
|
arg: 'Content-Type',
|
||||||
|
type: 'String',
|
||||||
|
http: {target: 'header'}
|
||||||
|
}, {
|
||||||
|
arg: 'Content-Disposition',
|
||||||
|
type: 'String',
|
||||||
|
http: {target: 'header'}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
http: {
|
||||||
|
path: '/:id/invoiceInPdf',
|
||||||
|
verb: 'GET'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Self.invoiceInPdf = async(ctx, id) => {
|
||||||
|
const args = Object.assign({}, ctx.args);
|
||||||
|
const params = {lang: ctx.req.getLocale()};
|
||||||
|
|
||||||
|
delete args.ctx;
|
||||||
|
for (const param in args)
|
||||||
|
params[param] = args[param];
|
||||||
|
|
||||||
|
const report = new Report('invoiceIn', params);
|
||||||
|
const stream = await report.toPdfStream();
|
||||||
|
|
||||||
|
return [stream, 'application/pdf', `filename="doc-${id}.pdf"`];
|
||||||
|
};
|
||||||
|
};
|
|
@ -4,4 +4,5 @@ module.exports = Self => {
|
||||||
require('../methods/invoice-in/clone')(Self);
|
require('../methods/invoice-in/clone')(Self);
|
||||||
require('../methods/invoice-in/toBook')(Self);
|
require('../methods/invoice-in/toBook')(Self);
|
||||||
require('../methods/invoice-in/getTotals')(Self);
|
require('../methods/invoice-in/getTotals')(Self);
|
||||||
|
require('../methods/invoice-in/invoiceInPdf')(Self);
|
||||||
};
|
};
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
translate>
|
translate>
|
||||||
To book
|
To book
|
||||||
</vn-item>
|
</vn-item>
|
||||||
|
|
||||||
<vn-item
|
<vn-item
|
||||||
ng-click="deleteConfirmation.show()"
|
ng-click="deleteConfirmation.show()"
|
||||||
vn-acl="administrative"
|
vn-acl="administrative"
|
||||||
|
@ -26,6 +25,18 @@
|
||||||
translate>
|
translate>
|
||||||
Clone Invoice
|
Clone Invoice
|
||||||
</vn-item>
|
</vn-item>
|
||||||
|
<vn-item
|
||||||
|
ng-if="!$ctrl.hasDocuwareFile"
|
||||||
|
ng-click="$ctrl.showPdfInvoice()"
|
||||||
|
translate>
|
||||||
|
Show Invoice as PDF
|
||||||
|
</vn-item>
|
||||||
|
<vn-item
|
||||||
|
ng-if="!$ctrl.hasDocuwareFile"
|
||||||
|
ng-click="$ctrl.showPdfInvoice()"
|
||||||
|
translate>
|
||||||
|
Send Invoice as PDF
|
||||||
|
</vn-item>
|
||||||
</slot-menu>
|
</slot-menu>
|
||||||
<slot-body>
|
<slot-body>
|
||||||
<div class="attributes">
|
<div class="attributes">
|
||||||
|
|
|
@ -96,6 +96,9 @@ class Controller extends Descriptor {
|
||||||
.then(() => this.$state.reload())
|
.then(() => this.$state.reload())
|
||||||
.then(() => this.vnApp.showSuccess(this.$t('InvoiceIn booked')));
|
.then(() => this.vnApp.showSuccess(this.$t('InvoiceIn booked')));
|
||||||
}
|
}
|
||||||
|
showPdfInvoice() {
|
||||||
|
this.vnReport.show(`InvoiceIns/${this.id}/invoiceInPdf`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ngModule.vnComponent('vnInvoiceInDescriptor', {
|
ngModule.vnComponent('vnInvoiceInDescriptor', {
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
const Stylesheet = require(`vn-print/core/stylesheet`);
|
||||||
|
|
||||||
|
const path = require('path');
|
||||||
|
const vnPrintPath = path.resolve('print');
|
||||||
|
|
||||||
|
module.exports = new Stylesheet([
|
||||||
|
`${vnPrintPath}/common/css/spacing.css`,
|
||||||
|
`${vnPrintPath}/common/css/misc.css`,
|
||||||
|
`${vnPrintPath}/common/css/layout.css`,
|
||||||
|
`${vnPrintPath}/common/css/report.css`,
|
||||||
|
`${__dirname}/style.css`])
|
||||||
|
.mergeStyles();
|
|
@ -0,0 +1,42 @@
|
||||||
|
h2 {
|
||||||
|
font-weight: 100;
|
||||||
|
color: #555
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-title {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
font-size: .8rem
|
||||||
|
}
|
||||||
|
|
||||||
|
.table-title h2 {
|
||||||
|
margin: 0 15px 0 0
|
||||||
|
}
|
||||||
|
|
||||||
|
.ticket-info {
|
||||||
|
font-size: 22px
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#nickname h2 {
|
||||||
|
max-width: 400px;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
#phytosanitary {
|
||||||
|
padding-right: 10px
|
||||||
|
}
|
||||||
|
|
||||||
|
#phytosanitary .flag img {
|
||||||
|
width: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
#phytosanitary .flag .flag-text {
|
||||||
|
padding-left: 10px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
.phytosanitary-info {
|
||||||
|
margin-top: 10px
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 54 KiB |
|
@ -0,0 +1,319 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html v-bind:lang="$i18n.locale">
|
||||||
|
<body>
|
||||||
|
<table class="grid">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
|
||||||
|
<!-- Incoterms block -->
|
||||||
|
<invoice-incoterms
|
||||||
|
v-if="hasIncoterms"
|
||||||
|
v-bind="$props">
|
||||||
|
</invoice-incoterms>
|
||||||
|
|
||||||
|
<!-- Header block -->
|
||||||
|
<report-header v-bind="$props"
|
||||||
|
v-bind:company-code="invoice.companyCode">
|
||||||
|
</report-header>
|
||||||
|
<!-- Block -->
|
||||||
|
<div class="grid-row">
|
||||||
|
<div class="grid-block">
|
||||||
|
<div class="columns vn-mb-lg">
|
||||||
|
<div class="size50">
|
||||||
|
<div class="size75 vn-mt-ml">
|
||||||
|
<h1 class="title uppercase">{{$t('title')}}</h1>
|
||||||
|
<table class="row-oriented ticket-info">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="font gray uppercase">{{$t('clientId')}}</td>
|
||||||
|
<th>{{client.id}}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="font gray uppercase">{{$t('invoice')}}</td>
|
||||||
|
<th>{{invoice.ref}}</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="font gray uppercase">{{$t('date')}}</td>
|
||||||
|
<th>{{invoice.issued | date('%d-%m-%Y')}}</th>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="size50">
|
||||||
|
<div class="panel">
|
||||||
|
<div class="header">{{$t('invoiceData')}}</div>
|
||||||
|
<div class="body">
|
||||||
|
<h3 class="uppercase">{{client.socialName}}</h3>
|
||||||
|
<div>
|
||||||
|
{{client.postalAddress}}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{{client.postcodeCity}}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{{$t('fiscalId')}}: {{client.fi}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- Rectified invoices block -->
|
||||||
|
<div class="size100 no-page-break" v-if="rectified.length > 0">
|
||||||
|
<h2>{{$t('rectifiedInvoices')}}</h2>
|
||||||
|
<table class="column-oriented">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>{{$t('invoice')}}</th>
|
||||||
|
<th>{{$t('issued')}}</th>
|
||||||
|
<th class="number">{{$t('amount')}}</th>
|
||||||
|
<th width="50%">{{$t('description')}}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="row in rectified">
|
||||||
|
<td>{{row.ref}}</td>
|
||||||
|
<td>{{row.issued | date}}</td>
|
||||||
|
<td class="number">{{row.amount | currency('EUR', $i18n.locale)}}</td>
|
||||||
|
<td width="50%">{{row.description}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- End of rectified invoices block -->
|
||||||
|
|
||||||
|
<!-- Sales block -->
|
||||||
|
<div class="vn-mt-lg" v-for="ticket in tickets">
|
||||||
|
<div class="table-title clearfix">
|
||||||
|
<div class="pull-left">
|
||||||
|
<h2>{{$t('deliveryNote')}}</strong>
|
||||||
|
</div>
|
||||||
|
<div class="pull-left vn-mr-md">
|
||||||
|
<div class="field rectangle">
|
||||||
|
<span>{{ticket.id}}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pull-left">
|
||||||
|
<h2>{{$t('shipped')}}</h2>
|
||||||
|
</div>
|
||||||
|
<div class="pull-left">
|
||||||
|
<div class="field rectangle">
|
||||||
|
<span>{{ticket.shipped | date}}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<span id="nickname" class="pull-right">
|
||||||
|
<h2>{{ticket.nickname}}</h2>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<table class="column-oriented">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th width="5%">{{$t('reference')}}</th>
|
||||||
|
<th class="number">{{$t('quantity')}}</th>
|
||||||
|
<th width="50%">{{$t('concept')}}</th>
|
||||||
|
<th class="number">{{$t('price')}}</th>
|
||||||
|
<th class="centered" width="5%">{{$t('discount')}}</th>
|
||||||
|
<th class="centered">{{$t('vat')}}</th>
|
||||||
|
<th class="number">{{$t('amount')}}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody v-for="sale in ticket.sales" class="no-page-break">
|
||||||
|
<tr>
|
||||||
|
<td width="5%">{{sale.itemFk | zerofill('000000')}}</td>
|
||||||
|
<td class="number">{{sale.quantity}}</td>
|
||||||
|
<td width="50%">{{sale.concept}}</td>
|
||||||
|
<td class="number">{{sale.price | currency('EUR', $i18n.locale)}}</td>
|
||||||
|
<td class="centered" width="5%">{{(sale.discount / 100) | percentage}}</td>
|
||||||
|
<td class="centered">{{sale.vatType}}</td>
|
||||||
|
<td class="number">{{saleImport(sale) | currency('EUR', $i18n.locale)}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="description font light-gray">
|
||||||
|
<td colspan="7">
|
||||||
|
<span v-if="sale.value5">
|
||||||
|
<strong>{{sale.tag5}}</strong> {{sale.value5}}
|
||||||
|
</span>
|
||||||
|
<span v-if="sale.value6">
|
||||||
|
<strong>{{sale.tag6}}</strong> {{sale.value6}}
|
||||||
|
</span>
|
||||||
|
<span v-if="sale.value7">
|
||||||
|
<strong>{{sale.tag7}}</strong> {{sale.value7}}
|
||||||
|
</span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<td colspan="6" class="font bold">
|
||||||
|
<span class="pull-right">{{$t('subtotal')}}</span>
|
||||||
|
</td>
|
||||||
|
<td class="number">{{ticketSubtotal(ticket) | currency('EUR', $i18n.locale)}}</td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- End of sales block -->
|
||||||
|
|
||||||
|
<div class="columns vn-mt-xl">
|
||||||
|
<!-- Taxes block -->
|
||||||
|
<div id="taxes" class="size50 pull-right no-page-break" v-if="taxes">
|
||||||
|
<table class="column-oriented">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th colspan="4">{{$t('taxBreakdown')}}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<thead class="light">
|
||||||
|
<tr>
|
||||||
|
<th width="45%">{{$t('type')}}</th>
|
||||||
|
<th width="25%" class="number">
|
||||||
|
{{$t('taxBase')}}
|
||||||
|
</th>
|
||||||
|
<th>{{$t('tax')}}</th>
|
||||||
|
<th class="number">{{$t('fee')}}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="tax in taxes">
|
||||||
|
<td width="45%">{{tax.name}}</td>
|
||||||
|
<td width="25%" class="number">
|
||||||
|
{{tax.base | currency('EUR', $i18n.locale)}}
|
||||||
|
</td>
|
||||||
|
<td>{{tax.vatPercent | percentage}}</td>
|
||||||
|
<td class="number">{{tax.vat | currency('EUR', $i18n.locale)}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr class="font bold">
|
||||||
|
<td width="45%">{{$t('subtotal')}}</td>
|
||||||
|
<td width="20%" class="number">
|
||||||
|
{{sumTotal(taxes, 'base') | currency('EUR', $i18n.locale)}}
|
||||||
|
</td>
|
||||||
|
<td></td>
|
||||||
|
<td class="number">{{sumTotal(taxes, 'vat') | currency('EUR', $i18n.locale)}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="font bold">
|
||||||
|
<td colspan="2">{{$t('total')}}</td>
|
||||||
|
<td colspan="2" class="number">{{taxTotal | currency('EUR', $i18n.locale)}}</td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<div class="panel" v-if="invoice.footNotes">
|
||||||
|
<div class="header">{{$t('notes')}}</div>
|
||||||
|
<div class="body">
|
||||||
|
<span>{{invoice.footNotes}}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- End of taxes block -->
|
||||||
|
|
||||||
|
<!-- Phytosanitary block -->
|
||||||
|
<div id="phytosanitary" class="size50 pull-left no-page-break">
|
||||||
|
<div class="panel">
|
||||||
|
<div class="body">
|
||||||
|
<div class="flag">
|
||||||
|
<div class="columns">
|
||||||
|
<div class="size25">
|
||||||
|
<img v-bind:src="getReportSrc('europe.png')"/>
|
||||||
|
</div>
|
||||||
|
<div class="size75 flag-text">
|
||||||
|
<strong>{{$t('plantPassport')}}</strong><br/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="phytosanitary-info">
|
||||||
|
<div>
|
||||||
|
<strong>A</strong>
|
||||||
|
<span>{{botanical}}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<strong>B</strong>
|
||||||
|
<span>ES17462130</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<strong>C</strong>
|
||||||
|
<span>{{ticketsId}}</span>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<strong>D</strong>
|
||||||
|
<span>ES</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- End of phytosanitary block -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- Intrastat block -->
|
||||||
|
<div class="size100 no-page-break" v-if="intrastat.length > 0">
|
||||||
|
<h2>{{$t('intrastat')}}</h2>
|
||||||
|
<table class="column-oriented">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>{{$t('code')}}</th>
|
||||||
|
<th width="50%">{{$t('description')}}</th>
|
||||||
|
<th class="number">{{$t('stems')}}</th>
|
||||||
|
<th class="number">{{$t('netKg')}}</th>
|
||||||
|
<th class="number">{{$t('amount')}}</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr v-for="row in intrastat">
|
||||||
|
<td>{{row.code}}</td>
|
||||||
|
<td width="50%">{{row.description}}</td>
|
||||||
|
<td class="number">{{row.stems | number($i18n.locale)}}</td>
|
||||||
|
<td class="number">{{row.netKg | number($i18n.locale)}}</td>
|
||||||
|
<td class="number">{{row.subtotal | currency('EUR', $i18n.locale)}}</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
<tfoot>
|
||||||
|
<tr>
|
||||||
|
<td colspan="2"></td>
|
||||||
|
<td class="number">
|
||||||
|
<strong>{{sumTotal(intrastat, 'stems') | number($i18n.locale)}}</strong>
|
||||||
|
</td>
|
||||||
|
<td class="number">
|
||||||
|
<strong>{{sumTotal(intrastat, 'netKg') | number($i18n.locale)}}</strong>
|
||||||
|
</td>
|
||||||
|
<td class="number">
|
||||||
|
<strong>{{sumTotal(intrastat, 'subtotal') | currency('EUR', $i18n.locale)}}</strong>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tfoot>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<!-- End of intrastat block -->
|
||||||
|
|
||||||
|
<!-- Observations block -->
|
||||||
|
<div class="columns vn-mt-xl" v-if="invoice.payMethodCode == 'wireTransfer'">
|
||||||
|
<div class="size50 pull-left no-page-break" >
|
||||||
|
<div class="panel" >
|
||||||
|
<div class="header">{{$t('observations')}}</div>
|
||||||
|
<div class="body">
|
||||||
|
<div>{{$t('wireTransfer')}}</div>
|
||||||
|
<div>{{$t('accountNumber', [invoice.iban])}}</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- End of observations block -->
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- Footer block -->
|
||||||
|
<report-footer id="pageFooter"
|
||||||
|
v-bind:company-code="invoice.companyCode"
|
||||||
|
v-bind:left-text="$t('invoiceRef', [invoice.ref])"
|
||||||
|
v-bind:center-text="client.socialName"
|
||||||
|
v-bind="$props">
|
||||||
|
</report-footer>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,33 @@
|
||||||
|
const Component = require(`vn-print/core/component`);
|
||||||
|
const Report = require(`vn-print/core/report`);
|
||||||
|
const reportHeader = new Component('report-header');
|
||||||
|
const reportFooter = new Component('report-footer');
|
||||||
|
const invoiceIncoterms = new Report('invoice-incoterms');
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
name: 'invoiceIn',
|
||||||
|
async serverPrefetch() {
|
||||||
|
this.invoice = await this.fetchInvoice(this.id);
|
||||||
|
|
||||||
|
if (!this.invoice)
|
||||||
|
throw new Error('Something went wrong');
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
fetchInvoice(id) {
|
||||||
|
return this.findOneFromDef('invoice', [id]);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
components: {
|
||||||
|
'report-header': reportHeader.build(),
|
||||||
|
'report-footer': reportFooter.build(),
|
||||||
|
'invoice-incoterms': invoiceIncoterms.build()
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
id: {
|
||||||
|
type: [Number, String],
|
||||||
|
description: 'The invoice id'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,36 @@
|
||||||
|
reportName: invoice
|
||||||
|
title: Invoice
|
||||||
|
invoice: Invoice
|
||||||
|
clientId: Client
|
||||||
|
invoiceData: Invoice data
|
||||||
|
fiscalId: FI / NIF
|
||||||
|
invoiceRef: Invoice {0}
|
||||||
|
deliveryNote: Delivery note
|
||||||
|
shipped: Shipped
|
||||||
|
date: Date
|
||||||
|
reference: Ref.
|
||||||
|
quantity: Qty.
|
||||||
|
concept: Concept
|
||||||
|
price: PSP/u
|
||||||
|
discount: Disc.
|
||||||
|
vat: VAT
|
||||||
|
amount: Amount
|
||||||
|
type: Type
|
||||||
|
taxBase: Tax base
|
||||||
|
tax: Tax
|
||||||
|
fee: Fee
|
||||||
|
total: Total
|
||||||
|
subtotal: Subtotal
|
||||||
|
taxBreakdown: Tax breakdown
|
||||||
|
notes: Notes
|
||||||
|
intrastat: Intrastat
|
||||||
|
code: Code
|
||||||
|
description: Description
|
||||||
|
stems: Stems
|
||||||
|
netKg: Net kg
|
||||||
|
rectifiedInvoices: Rectified invoices
|
||||||
|
issued: Issued
|
||||||
|
plantPassport: Plant passport
|
||||||
|
observations: Observations
|
||||||
|
wireTransfer: "Pay method: Transferencia"
|
||||||
|
accountNumber: "Account number: {0}"
|
|
@ -0,0 +1,36 @@
|
||||||
|
reportName: factura
|
||||||
|
title: Factura
|
||||||
|
invoice: Factura
|
||||||
|
clientId: Cliente
|
||||||
|
invoiceData: Datos de facturación
|
||||||
|
fiscalId: CIF / NIF
|
||||||
|
invoiceRef: Factura {0}
|
||||||
|
deliveryNote: Albarán
|
||||||
|
shipped: F. envío
|
||||||
|
date: Fecha
|
||||||
|
reference: Ref.
|
||||||
|
quantity: Cant.
|
||||||
|
concept: Concepto
|
||||||
|
price: PVP/u
|
||||||
|
discount: Dto.
|
||||||
|
vat: IVA
|
||||||
|
amount: Importe
|
||||||
|
type: Tipo
|
||||||
|
taxBase: Base imp.
|
||||||
|
tax: Tasa
|
||||||
|
fee: Cuota
|
||||||
|
total: Total
|
||||||
|
subtotal: Subtotal
|
||||||
|
taxBreakdown: Desglose impositivo
|
||||||
|
notes: Notas
|
||||||
|
intrastat: Intrastat
|
||||||
|
code: Código
|
||||||
|
description: Descripción
|
||||||
|
stems: Tallos
|
||||||
|
netKg: KG Neto
|
||||||
|
rectifiedInvoices: Facturas rectificadas
|
||||||
|
issued: F. emisión
|
||||||
|
plantPassport: Pasaporte fitosanitario
|
||||||
|
observations: Observaciones
|
||||||
|
wireTransfer: "Forma de pago: Transferencia"
|
||||||
|
accountNumber: "Número de cuenta: {0}"
|
|
@ -0,0 +1,5 @@
|
||||||
|
SELECT *
|
||||||
|
FROM invoiceIn i
|
||||||
|
JOIN supplier s ON s.id = i.supplierFk
|
||||||
|
JOIN company c ON c.id = i.companyFk
|
||||||
|
WHERE i.id = ?
|
Loading…
Reference in New Issue