feat: refs #6739 transferInvoice new functionality #2412

Merged
jon merged 10 commits from 6739-transferInvoiceOut into dev 2024-05-10 04:51:42 +00:00
6 changed files with 69 additions and 26 deletions

View File

@ -33,7 +33,6 @@ module.exports = Self => {
try {
await Self.makePdf(id, options);
} catch (err) {
console.error(err);
throw new UserError('Error while generating PDF', 'pdfError');
}

View File

@ -36,6 +36,11 @@ module.exports = Self => {
type: 'number',
required: true
},
{
arg: 'checked',
type: 'boolean',
required: true
},
],
returns: {
type: 'boolean',
@ -51,6 +56,7 @@ module.exports = Self => {
const models = Self.app.models;
const myOptions = {userId: ctx.req.accessToken.userId};
const {id, refFk, newClientFk, cplusRectificationTypeFk, siiTypeInvoiceOutFk, invoiceCorrectionTypeFk} = ctx.args;
const checked = ctx.args.checked;
let tx;
if (typeof options == 'object')
Object.assign(myOptions, options);
@ -96,9 +102,10 @@ module.exports = Self => {
await models.Ticket.invoiceTickets(ctx, refundTicketIds, invoiceCorrection, myOptions);
const [invoiceId] = await models.Ticket.invoiceTicketsAndPdf(ctx, clonedTicketIds, null, myOptions);
return invoiceId;
if (!checked) {
const [invoiceId] = await models.Ticket.invoiceTicketsAndPdf(ctx, clonedTicketIds, null, myOptions);
return invoiceId;
}
} catch (e) {
if (tx) await tx.rollback();
throw e;

View File

@ -1,15 +1,3 @@
<vn-crud-model
auto-load="true"
url="CplusRectificationTypes"
data="cplusRectificationTypes"
order="description">
</vn-crud-model>
<vn-crud-model
auto-load="true"
url="SiiTypeInvoiceOuts"
data="siiTypeInvoiceOuts"
where="{code: {like: 'R%'}}">
</vn-crud-model>
<vn-crud-model
auto-load="true"
url="InvoiceCorrectionTypes"
@ -211,14 +199,14 @@
vn-one
vn-id="cplusRectificationType"
required="true"
data="cplusRectificationTypes"
data="$ctrl.cplusRectificationTypes"
show-field="description"
value-field="id"
ng-model="$ctrl.cplusRectificationType"
search-function="{or: [{id: $search}, {description: {like: '%'+ $search +'%'}}]}"
label="Rectificative type">
<tpl-item>
{{::description}}
{{ ::description}}
</tpl-item>
</vn-autocomplete>
</vn-horizontal>
@ -226,7 +214,7 @@
<vn-autocomplete
vn-one
vn-id="siiTypeInvoiceOut"
data="siiTypeInvoiceOuts"
data="$ctrl.siiTypeInvoiceOuts"
show-field="description"
value-field="id"
fields="['id','code','description']"
@ -248,6 +236,14 @@
label="Type">
</vn-autocomplete>
</vn-horizontal>
<vn-horizontal>
<vn-check
ng-model="$ctrl.isChecked"
label="destinationClient"
info="transferInvoiceInfo"
/>
</vn-check>
</vn-horizontal>
</section>
</tpl-body>
<tpl-buttons>

View File

@ -7,6 +7,7 @@ class Controller extends Section {
super($element, $);
this.vnReport = vnReport;
this.vnEmail = vnEmail;
this.checked = true;
}
get invoiceOut() {
@ -23,6 +24,26 @@ class Controller extends Section {
return this.aclService.hasAny(['invoicing']);
}
get isChecked() {
return this.checked;
}
set isChecked(value) {
this.checked = value;
}
$onInit() {
this.$http.get(`CplusRectificationTypes`, {filter: {order: 'description'}})
.then(res => {
this.cplusRectificationTypes = res.data;
this.cplusRectificationType = res.data.filter(type => type.description == 'I Por diferencias')[0].id;
});
this.$http.get(`SiiTypeInvoiceOuts`, {filter: {where: {code: {like: 'R%'}}}})
.then(res => {
this.siiTypeInvoiceOuts = res.data;
this.siiTypeInvoiceOut = res.data.filter(type => type.code == 'R4')[0].id;
});
}
loadData() {
const filter = {
include: [
@ -34,7 +55,7 @@ class Controller extends Section {
}, {
relation: 'client',
scope: {
fields: ['id', 'name', 'email']
fields: ['id', 'name', 'email', 'hasToInvoiceByAddress']
}
}
]
@ -136,12 +157,24 @@ class Controller extends Section {
newClientFk: this.clientId,
cplusRectificationTypeFk: this.cplusRectificationType,
siiTypeInvoiceOutFk: this.siiTypeInvoiceOut,
invoiceCorrectionTypeFk: this.invoiceCorrectionType
invoiceCorrectionTypeFk: this.invoiceCorrectionType,
checked: this.checked
};
this.$http.post(`InvoiceOuts/transferInvoice`, params).then(res => {
const invoiceId = res.data;
this.vnApp.showSuccess(this.$t('Transferred invoice'));
this.$state.go('invoiceOut.card.summary', {id: invoiceId});
this.$http.get(`Clients/${this.clientId}`).then(response => {
const clientData = response.data;
const hasToInvoiceByAddress = clientData.hasToInvoiceByAddress;
if (this.checked && hasToInvoiceByAddress) {
if (!window.confirm(this.$t('confirmTransferInvoice')))
return;
}
this.$http.post(`InvoiceOuts/transferInvoice`, params).then(res => {
const invoiceId = res.data;
this.vnApp.showSuccess(this.$t('Transferred invoice'));
this.$state.go('invoiceOut.card.summary', {id: invoiceId});
});
});
}
}

View File

@ -1,3 +1,7 @@
The following refund tickets have been created: "The following refund tickets have been created: {{ticketIds}}"
Transfer invoice to...: Transfer invoice to...
Cplus Type: Cplus Type
transferInvoice: Transfer Invoice
destinationClient: Bill destination client
transferInvoiceInfo: New tickets from the destination customer will be generated in the default consignee.
confirmTransferInvoice: Destination customer has marked to bill by consignee, do you want to continue?

View File

@ -24,3 +24,7 @@ Refund...: Abono...
Transfer invoice to...: Transferir factura a...
Rectificative type: Tipo rectificativa
Transferred invoice: Factura transferida
transferInvoice: Transferir factura
destinationClient: Facturar cliente destino
transferInvoiceInfo: Los nuevos tickets del cliente destino serán generados en el consignatario por defecto.
confirmTransferInvoice: El cliente destino tiene marcado facturar por consignatario, ¿desea continuar?