diff --git a/docker-compose.yml b/docker-compose.yml index 4fc5dc811..13a7bc751 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,6 +12,9 @@ services: placement: constraints: - node.role == worker + resources: + limits: + memory: 1G back: image: registry.verdnatura.es/salix-back:${BRANCH_NAME:?} build: . @@ -38,6 +41,9 @@ services: placement: constraints: - node.role == worker + resources: + limits: + memory: 4G configs: datasources: external: true diff --git a/modules/client/back/methods/tpv-transaction/confirm.js b/modules/client/back/methods/tpv-transaction/confirm.js index a26e0bad6..41229a1fd 100644 --- a/modules/client/back/methods/tpv-transaction/confirm.js +++ b/modules/client/back/methods/tpv-transaction/confirm.js @@ -32,45 +32,66 @@ module.exports = Self => { Self.confirm = async(signatureVersion, merchantParameters, signature) => { const $ = Self.app.models; + let transaction; - const decodedParams = JSON.parse( - base64url.decode(merchantParameters, 'utf8')); - const params = {}; + try { + const decodedParams = JSON.parse( + base64url.decode(merchantParameters, 'utf8')); + const params = {}; - for (const param in decodedParams) - params[param] = decodeURIComponent(decodedParams[param]); + for (const param in decodedParams) + params[param] = decodeURIComponent(decodedParams[param]); - const orderId = params['Ds_Order']; - const merchantId = parseInt(params['Ds_MerchantCode']); + const orderId = params['Ds_Order']; + if (!orderId) + throw new UserError('Order id not provided'); - if (!orderId) - throw new UserError('Order id not found'); - if (!merchantId) - throw new UserError('Mechant id not found'); + transaction = await Self.findById(orderId, {fields: ['id']}); + if (!transaction) + throw new UserError('Order not found'); - const merchant = await $.TpvMerchant.findById(merchantId, { - fields: ['id', 'secretKey'] - }); + await transaction.updateAttributes({ + merchantParameters, + signature, + signatureVersion, + }); - const base64hmac = Self.createSignature( - orderId, - merchant.secretKey, - merchantParameters - ); + const merchantId = parseInt(params['Ds_MerchantCode']); + if (!merchantId) + throw new UserError('Merchant id not provided'); - if (base64hmac !== base64url.toBase64(signature)) - throw new UserError('Invalid signature'); + const merchant = await $.TpvMerchant.findById(merchantId, { + fields: ['id', 'secretKey'] + }); + if (!merchant) + throw new UserError('Merchant not found'); - await Self.rawSql( - 'CALL hedera.tpvTransaction_confirm(?, ?, ?, ?, ?, ?)', [ - params['Ds_Amount'], + const base64hmac = Self.createSignature( orderId, - merchantId, - params['Ds_Currency'], - params['Ds_Response'], - params['Ds_ErrorCode'] - ]); + merchant.secretKey, + merchantParameters + ); - return true; + if (base64hmac !== base64url.toBase64(signature)) + throw new UserError('Invalid signature'); + + await Self.rawSql( + 'CALL hedera.tpvTransaction_confirm(?, ?, ?, ?, ?, ?)', [ + params['Ds_Amount'], + orderId, + merchantId, + params['Ds_Currency'], + params['Ds_Response'], + params['Ds_ErrorCode'] + ]); + + return true; + } catch (err) { + if (transaction) + await transaction.updateAttribute('responseError', err.message); + else + console.error(err); + throw err; + } }; }; diff --git a/modules/client/back/models/tpv-transaction.json b/modules/client/back/models/tpv-transaction.json index 2d926cc40..878b1f41a 100644 --- a/modules/client/back/models/tpv-transaction.json +++ b/modules/client/back/models/tpv-transaction.json @@ -35,6 +35,18 @@ }, "created": { "type": "date" + }, + "merchantParameters": { + "type": "string" + }, + "signature": { + "type": "string" + }, + "signatureVersion": { + "type": "string" + }, + "responseError": { + "type": "string" } }, "relations": { @@ -45,4 +57,3 @@ } } } - \ No newline at end of file diff --git a/modules/invoiceOut/front/descriptor/index.html b/modules/invoiceOut/front/descriptor/index.html index 92f0b9de5..e1dc579ab 100644 --- a/modules/invoiceOut/front/descriptor/index.html +++ b/modules/invoiceOut/front/descriptor/index.html @@ -3,7 +3,7 @@ description="$ctrl.invoiceOut.ref" summary="$ctrl.$.summary"> - @@ -11,23 +11,23 @@
- {{$ctrl.invoiceOut.client.name}}
@@ -53,4 +53,7 @@ - \ No newline at end of file + + + diff --git a/modules/item/back/methods/item-image-queue/downloadImages.js b/modules/item/back/methods/item-image-queue/downloadImages.js index 08e5df050..c4d7f4b98 100644 --- a/modules/item/back/methods/item-image-queue/downloadImages.js +++ b/modules/item/back/methods/item-image-queue/downloadImages.js @@ -59,17 +59,10 @@ module.exports = Self => { } const writeStream = fs.createWriteStream(filePath); - writeStream.on('open', () => { - response.pipe(writeStream); - }); - - writeStream.on('error', async error => { - await errorHandler(image.itemFk, error, filePath); - }); - - writeStream.on('finish', async function() { - writeStream.end(); - }); + writeStream.on('open', () => response.pipe(writeStream)); + writeStream.on('error', async error => + await errorHandler(image.itemFk, error, filePath)); + writeStream.on('finish', writeStream.end()); writeStream.on('close', async function() { try { diff --git a/print/templates/reports/invoice/sql/rectified.sql b/print/templates/reports/invoice/sql/rectified.sql index 49db8f68b..79ce733e3 100644 --- a/print/templates/reports/invoice/sql/rectified.sql +++ b/print/templates/reports/invoice/sql/rectified.sql @@ -1,10 +1,11 @@ SELECT - io.amount, - io.ref, - io.issued, + io2.amount, + io2.ref, + io2.issued, ict.description FROM invoiceOut io JOIN invoiceCorrection ic ON ic.correctingFk = io.id - JOIN invoiceCorrectionType ict ON ict.id = ic.invoiceCorrectionTypeFk + JOIN invoiceOut io2 ON io2.id = ic.correctedFk LEFT JOIN ticket t ON t.refFk = io.ref -WHERE io.ref = ? \ No newline at end of file + JOIN invoiceCorrectionType ict ON ict.id = ic.invoiceCorrectionTypeFk +WHERE io.ref = ?