Merge branch 'dev' into 5090-renameGoLabel
gitea/salix/pipeline/head There was a failure building this commit Details

This commit is contained in:
Joan Sanchez 2023-03-08 09:47:47 +00:00
commit 63694f4478
6 changed files with 88 additions and 53 deletions

View File

@ -12,6 +12,9 @@ services:
placement: placement:
constraints: constraints:
- node.role == worker - node.role == worker
resources:
limits:
memory: 1G
back: back:
image: registry.verdnatura.es/salix-back:${BRANCH_NAME:?} image: registry.verdnatura.es/salix-back:${BRANCH_NAME:?}
build: . build: .
@ -38,6 +41,9 @@ services:
placement: placement:
constraints: constraints:
- node.role == worker - node.role == worker
resources:
limits:
memory: 4G
configs: configs:
datasources: datasources:
external: true external: true

View File

@ -32,45 +32,66 @@ module.exports = Self => {
Self.confirm = async(signatureVersion, merchantParameters, signature) => { Self.confirm = async(signatureVersion, merchantParameters, signature) => {
const $ = Self.app.models; const $ = Self.app.models;
let transaction;
const decodedParams = JSON.parse( try {
base64url.decode(merchantParameters, 'utf8')); const decodedParams = JSON.parse(
const params = {}; base64url.decode(merchantParameters, 'utf8'));
const params = {};
for (const param in decodedParams) for (const param in decodedParams)
params[param] = decodeURIComponent(decodedParams[param]); params[param] = decodeURIComponent(decodedParams[param]);
const orderId = params['Ds_Order']; const orderId = params['Ds_Order'];
const merchantId = parseInt(params['Ds_MerchantCode']); if (!orderId)
throw new UserError('Order id not provided');
if (!orderId) transaction = await Self.findById(orderId, {fields: ['id']});
throw new UserError('Order id not found'); if (!transaction)
if (!merchantId) throw new UserError('Order not found');
throw new UserError('Mechant id not found');
const merchant = await $.TpvMerchant.findById(merchantId, { await transaction.updateAttributes({
fields: ['id', 'secretKey'] merchantParameters,
}); signature,
signatureVersion,
});
const base64hmac = Self.createSignature( const merchantId = parseInt(params['Ds_MerchantCode']);
orderId, if (!merchantId)
merchant.secretKey, throw new UserError('Merchant id not provided');
merchantParameters
);
if (base64hmac !== base64url.toBase64(signature)) const merchant = await $.TpvMerchant.findById(merchantId, {
throw new UserError('Invalid signature'); fields: ['id', 'secretKey']
});
if (!merchant)
throw new UserError('Merchant not found');
await Self.rawSql( const base64hmac = Self.createSignature(
'CALL hedera.tpvTransaction_confirm(?, ?, ?, ?, ?, ?)', [
params['Ds_Amount'],
orderId, orderId,
merchantId, merchant.secretKey,
params['Ds_Currency'], merchantParameters
params['Ds_Response'], );
params['Ds_ErrorCode']
]);
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;
}
}; };
}; };

View File

@ -35,6 +35,18 @@
}, },
"created": { "created": {
"type": "date" "type": "date"
},
"merchantParameters": {
"type": "string"
},
"signature": {
"type": "string"
},
"signatureVersion": {
"type": "string"
},
"responseError": {
"type": "string"
} }
}, },
"relations": { "relations": {
@ -45,4 +57,3 @@
} }
} }
} }

View File

@ -3,7 +3,7 @@
description="$ctrl.invoiceOut.ref" description="$ctrl.invoiceOut.ref"
summary="$ctrl.$.summary"> summary="$ctrl.$.summary">
<slot-dot-menu> <slot-dot-menu>
<vn-invoice-out-descriptor-menu <vn-invoice-out-descriptor-menu
invoice-out="$ctrl.invoiceOut" invoice-out="$ctrl.invoiceOut"
parent-reload="$ctrl.reload()" parent-reload="$ctrl.reload()"
/> />
@ -11,23 +11,23 @@
<slot-body> <slot-body>
<div class="attributes"> <div class="attributes">
<vn-label-value <vn-label-value
label="Date" label="Date"
value="{{$ctrl.invoiceOut.issued | date: 'dd/MM/yyyy'}}"> value="{{$ctrl.invoiceOut.issued | date: 'dd/MM/yyyy'}}">
</vn-label-value> </vn-label-value>
<vn-label-value <vn-label-value
label="Import" label="Import"
value="{{$ctrl.invoiceOut.amount | currency: 'EUR': 2}}"> value="{{$ctrl.invoiceOut.amount | currency: 'EUR': 2}}">
</vn-label-value> </vn-label-value>
<vn-label-value <vn-label-value
label="Client"> label="Client">
<span <span
ng-click="clientDescriptor.show($event, $ctrl.invoiceOut.client.id)" ng-click="clientDescriptor.show($event, $ctrl.invoiceOut.client.id)"
class="link"> class="link">
{{$ctrl.invoiceOut.client.name}} {{$ctrl.invoiceOut.client.name}}
</span> </span>
</vn-label-value> </vn-label-value>
<vn-label-value <vn-label-value
label="Company" label="Company"
value="{{$ctrl.invoiceOut.company.code}}"> value="{{$ctrl.invoiceOut.company.code}}">
</vn-label-value> </vn-label-value>
</div> </div>
@ -53,4 +53,7 @@
</vn-descriptor-content> </vn-descriptor-content>
<vn-popup vn-id="summary"> <vn-popup vn-id="summary">
<vn-invoice-out-summary invoice-out="$ctrl.invoiceOut"></vn-invoice-out-summary> <vn-invoice-out-summary invoice-out="$ctrl.invoiceOut"></vn-invoice-out-summary>
</vn-popup> </vn-popup>
<vn-client-descriptor-popover
vn-id="clientDescriptor">
</vn-client-descriptor-popover>

View File

@ -59,17 +59,10 @@ module.exports = Self => {
} }
const writeStream = fs.createWriteStream(filePath); const writeStream = fs.createWriteStream(filePath);
writeStream.on('open', () => { writeStream.on('open', () => response.pipe(writeStream));
response.pipe(writeStream); writeStream.on('error', async error =>
}); await errorHandler(image.itemFk, error, filePath));
writeStream.on('finish', writeStream.end());
writeStream.on('error', async error => {
await errorHandler(image.itemFk, error, filePath);
});
writeStream.on('finish', async function() {
writeStream.end();
});
writeStream.on('close', async function() { writeStream.on('close', async function() {
try { try {

View File

@ -1,10 +1,11 @@
SELECT SELECT
io.amount, io2.amount,
io.ref, io2.ref,
io.issued, io2.issued,
ict.description ict.description
FROM invoiceOut io FROM invoiceOut io
JOIN invoiceCorrection ic ON ic.correctingFk = io.id 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 LEFT JOIN ticket t ON t.refFk = io.ref
WHERE io.ref = ? JOIN invoiceCorrectionType ict ON ict.id = ic.invoiceCorrectionTypeFk
WHERE io.ref = ?