feat(tpv): integrar ID de empresa en el proceso de pago y actualizar llamadas a la API
gitea/hedera-web/pipeline/pr-beta This commit looks good Details

Se agregó la validación del ID de empresa en OrdersView. Se refactorizaron los métodos de transacción TPV para usar los nuevos endpoints de la API.
This commit is contained in:
Guido 2025-04-16 11:23:26 -03:00
parent be54a93e63
commit aae4f7a48a
3 changed files with 40 additions and 17 deletions

View File

@ -13,6 +13,7 @@ import useNotify from 'src/composables/useNotify.js';
import { currency, formatDateTitle } from 'src/lib/filters.js';
import { tpvStore } from 'stores/tpv';
import { useAppStore } from 'stores/app';
import { useUserStore } from 'stores/user';
import { storeToRefs } from 'pinia';
const { t } = useI18n();
@ -26,6 +27,7 @@ const showAmountToPayDialog = ref(null);
const amountToPay = ref(null);
const orders = ref(null);
const debt = ref(0);
const userStore = useUserStore();
const tpv = tpvStore();
onMounted(async () => {
@ -57,9 +59,14 @@ const onConfirmPay = async () => {
return;
}
if (!userStore.companyId) {
notify(t('companyConfigError'), 'negative');
return;
}
const amount = amountToPay.value.toString().replace('.', ',');
amountToPay.value = parseFloat(amount);
await tpv.pay(amountToPay.value);
await tpv.pay(amountToPay.value, userStore.companyId);
};
</script>

View File

@ -1,5 +1,5 @@
import { defineStore } from 'pinia';
import { jApi } from 'boot/axios';
import { api } from 'boot/axios';
export const tpvStore = defineStore('tpv', {
actions: {
@ -8,9 +8,9 @@ export const tpvStore = defineStore('tpv', {
const status = route.query.tpvStatus;
if (!(order && status)) return null;
await jApi.execQuery('CALL myTpvTransaction_end(#order, #status)', {
order,
status
await api.post('tpvTransactions/end', {
orderId: order,
status: status
});
if (status === 'ko') {
@ -28,26 +28,32 @@ export const tpvStore = defineStore('tpv', {
},
async retryPay(order) {
const payment = await jApi.getObject(
`SELECT t.amount, m.companyFk
FROM myTpvTransaction t
JOIN tpvMerchant m ON m.id = t.merchantFk
WHERE t.id = #order`,
{ order }
const { data: transactions } = await api.get(
'clients/transactions',
{
params: {
orderFk: order
}
}
);
await this.realPay(payment.amount, payment.companyFk);
if (transactions && transactions.length > 0) {
const transaction = transactions[0];
await this.realPay(
transaction.amount * 100,
transaction.merchantFk
);
}
},
async realPay(amount, company) {
if (!isNumeric(amount) || amount <= 0) {
throw new Error('payAmountError');
}
const json = await jApi.send('tpv/transaction', {
amount: parseInt(amount),
const { data: json } = await api.post('tpvTransactions/start', {
amount: amount,
urlOk: this.makeUrl('ok'),
urlKo: this.makeUrl('ko'),
company
companyId: company
});
const postValues = json.postValues;

View File

@ -8,6 +8,7 @@ const { notify } = useNotify();
const TOKEN_MULTIMEDIA = 'tokenMultimedia';
const TOKEN = 'token';
export const useUserStore = defineStore('user', () => {
const token = ref('');
const tokenMultimedia = ref('');
@ -15,7 +16,7 @@ export const useUserStore = defineStore('user', () => {
const user = ref(null); // Usuario en uso => supplantedUser || mainUser
const supplantedUser = ref(null); // Usuario suplantado
const mainUser = ref(null); // Usuario principal logueado
const companyId = ref(null);
const keepLogin = ref(false);
const intervalId = ref(null);
const isCheckingToken = ref(false);
@ -40,6 +41,7 @@ export const useUserStore = defineStore('user', () => {
} else {
await fetchUser();
await fetchTokenConfig();
await fetchCompanyId();
await supplantInit();
startInterval();
}
@ -154,6 +156,7 @@ export const useUserStore = defineStore('user', () => {
await fetchTokenConfig();
startInterval();
await onLogin();
await fetchCompanyId();
} catch (error) {
throw new Error('Error logging in');
}
@ -283,6 +286,12 @@ export const useUserStore = defineStore('user', () => {
user.value.lang = lang;
};
const fetchCompanyId = async () => {
const { data } = await api.get('UserConfigs/getUserConfig');
companyId.value = data.companyFk;
};
const $reset = () => {
token.value = '';
tokenMultimedia.value = '';
@ -317,6 +326,7 @@ export const useUserStore = defineStore('user', () => {
tokenConfig,
isLoggedIn,
storage,
companyId,
getToken,
getTokenMultimedia,
setToken,