Merge branch 'beta' into taro/outstanding-balance
This commit is contained in:
commit
92ea2a58f7
|
@ -53,6 +53,12 @@ const search = async () => {
|
|||
return;
|
||||
}
|
||||
|
||||
if (props.searchFn) {
|
||||
const data = await props.searchFn(searchTerm.value);
|
||||
emit('onSearch', data);
|
||||
return;
|
||||
}
|
||||
|
||||
if (props.url) {
|
||||
const params = {
|
||||
filter: props.filter,
|
||||
|
|
|
@ -45,6 +45,8 @@ async function fetch({
|
|||
});
|
||||
}
|
||||
|
||||
params.filter = params.filter || {};
|
||||
|
||||
if (params.filter?.where || exprFilter) {
|
||||
params.filter.where = { ...params.filter.where, ...exprFilter };
|
||||
}
|
||||
|
|
|
@ -14,7 +14,6 @@ import { storeToRefs } from 'pinia';
|
|||
import { useUserStore } from 'stores/user';
|
||||
|
||||
const router = useRouter();
|
||||
const jApi = inject('jApi');
|
||||
const api = inject('api');
|
||||
const { notify } = useNotify();
|
||||
const { t } = useI18n();
|
||||
|
@ -26,32 +25,30 @@ const fetchAddressesRef = ref(null);
|
|||
|
||||
const addresses = ref([]);
|
||||
const defaultAddress = ref(null);
|
||||
const clientId = ref(null);
|
||||
|
||||
const goToAddressDetails = (id = 0) =>
|
||||
router.push({ name: 'addressDetails', params: { id } });
|
||||
|
||||
const getDefaultAddress = async () => {
|
||||
try {
|
||||
const [address] = await jApi.query(
|
||||
'SELECT id, defaultAddressFk FROM myClient c'
|
||||
);
|
||||
defaultAddress.value = address.defaultAddressFk;
|
||||
clientId.value = address.id;
|
||||
const filter = { fields: ['defaultAddressFk'] };
|
||||
const { data } = await api.get(`Clients/${userStore?.userId}`, {
|
||||
params: { filter: JSON.stringify(filter) }
|
||||
});
|
||||
defaultAddress.value = data.defaultAddressFk;
|
||||
} catch (error) {
|
||||
console.error('Error getting default address:', error);
|
||||
}
|
||||
};
|
||||
|
||||
const changeDefaultAddress = async () => {
|
||||
if (!clientId.value) return;
|
||||
await jApi.execQuery(
|
||||
`UPDATE myClient
|
||||
SET defaultAddressFk = #defaultAddress
|
||||
WHERE id = #id;`,
|
||||
const changeDefaultAddress = async address => {
|
||||
if (!userStore?.userId) return;
|
||||
|
||||
await api.patch(
|
||||
`/Clients/${userStore?.user?.id}/updateAddress/${address.id}`,
|
||||
{
|
||||
defaultAddress: defaultAddress.value,
|
||||
id: clientId.value
|
||||
...address,
|
||||
defaultAddressFk: defaultAddress.value
|
||||
}
|
||||
);
|
||||
notify(t('defaultAddressModified'), 'positive');
|
||||
|
@ -129,7 +126,7 @@ onMounted(async () => {
|
|||
v-model="defaultAddress"
|
||||
:val="address.id"
|
||||
class="q-mr-sm"
|
||||
@update:model-value="changeDefaultAddress"
|
||||
@update:model-value="changeDefaultAddress(address)"
|
||||
/>
|
||||
</template>
|
||||
<template #content>
|
||||
|
|
|
@ -7,8 +7,7 @@ import VnList from 'src/components/ui/VnList.vue';
|
|||
|
||||
import { formatDateTitle } from 'src/lib/filters.js';
|
||||
|
||||
const jApi = inject('jApi');
|
||||
|
||||
const api = inject('api');
|
||||
const route = useRoute();
|
||||
|
||||
const accessLogs = ref([]);
|
||||
|
@ -17,15 +16,32 @@ const user = ref(null);
|
|||
const getUser = async () => {
|
||||
try {
|
||||
if (!route.params.id) return;
|
||||
const [data] = await jApi.query(
|
||||
`SELECT u.id, u.name user, u.nickname, u.email, c.phone, r.name role
|
||||
FROM account.user u
|
||||
JOIN account.role r ON r.id = u.role
|
||||
LEFT JOIN vn.client c ON c.id = u.id
|
||||
WHERE u.id = #user`,
|
||||
{ user: route.params.id }
|
||||
);
|
||||
user.value = data;
|
||||
|
||||
const filter = {
|
||||
where: { id: route.params.id },
|
||||
include: [
|
||||
{
|
||||
relation: 'role',
|
||||
scope: {
|
||||
fields: ['name']
|
||||
}
|
||||
},
|
||||
{
|
||||
relation: 'worker',
|
||||
scope: {
|
||||
fields: ['phone']
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
const { data } = await api.get('VnUsers/preview', {
|
||||
params: {
|
||||
filter: JSON.stringify(filter)
|
||||
}
|
||||
});
|
||||
|
||||
if (!data || !data.length) return;
|
||||
user.value = data[0];
|
||||
} catch (error) {
|
||||
console.error('Error getting user:', error);
|
||||
}
|
||||
|
@ -33,16 +49,12 @@ const getUser = async () => {
|
|||
|
||||
const getAccessLogs = async () => {
|
||||
try {
|
||||
accessLogs.value = await jApi.query(
|
||||
`SELECT u.stamp, a.platform, a.browser, a.version, a.javascript, a.cookies
|
||||
FROM visitUser u
|
||||
JOIN visitAccess c ON c.id = u.accessFk
|
||||
JOIN visitAgent a ON a.id = c.agentFk
|
||||
WHERE u.userFk = #user
|
||||
ORDER BY u.stamp DESC
|
||||
LIMIT 8`,
|
||||
{ user: route.params.id }
|
||||
);
|
||||
const { data } = await api.get('visitUsers/getUserVisits', {
|
||||
params: {
|
||||
userId: route.params.id
|
||||
}
|
||||
});
|
||||
accessLogs.value = data;
|
||||
} catch (error) {
|
||||
console.error('Error getting access logs:', error);
|
||||
}
|
||||
|
@ -68,9 +80,9 @@ onMounted(async () => {
|
|||
{{ user?.nickname }}
|
||||
</span>
|
||||
<span>#{{ user?.id }} - {{ user.user }} </span>
|
||||
<span>{{ user?.role }} </span>
|
||||
<span>{{ user?.role?.name }} </span>
|
||||
<span>{{ user?.email }} </span>
|
||||
<span>{{ user?.phone }} </span>
|
||||
<span>{{ user?.worker?.phone }} </span>
|
||||
</template>
|
||||
</CardList>
|
||||
<VnList :rows="accessLogs">
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -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>
|
||||
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
import { defineStore } from 'pinia';
|
||||
import { jApi } from 'boot/axios';
|
||||
import { api } from 'boot/axios';
|
||||
|
||||
export const tpvStore = defineStore('tpv', {
|
||||
actions: {
|
||||
async check(route) {
|
||||
const order = route.query.tpvOrder;
|
||||
const orderId = route.query.tpvOrder;
|
||||
const status = route.query.tpvStatus;
|
||||
if (!(order && status)) return null;
|
||||
if (!(orderId && status)) return null;
|
||||
|
||||
await jApi.execQuery('CALL myTpvTransaction_end(#order, #status)', {
|
||||
order,
|
||||
await api.post('tpvTransactions/end', {
|
||||
orderId,
|
||||
status
|
||||
});
|
||||
|
||||
if (status === 'ko') {
|
||||
const retry = confirm('retryPayQuestion');
|
||||
if (retry) {
|
||||
this.retryPay(order);
|
||||
this.retryPay(orderId);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,27 +27,33 @@ export const tpvStore = defineStore('tpv', {
|
|||
await this.realPay(amount * 100, company);
|
||||
},
|
||||
|
||||
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 }
|
||||
async retryPay(orderId) {
|
||||
const { data: transactions } = await api.get(
|
||||
'clients/transactions',
|
||||
{
|
||||
params: {
|
||||
orderFk: orderId
|
||||
}
|
||||
}
|
||||
);
|
||||
await this.realPay(payment.amount, payment.companyFk);
|
||||
if (transactions && transactions.length > 0) {
|
||||
const [transaction] = transactions;
|
||||
await this.realPay(
|
||||
transaction.amount * 100,
|
||||
transaction.merchantFk
|
||||
);
|
||||
}
|
||||
},
|
||||
|
||||
async realPay(amount, company) {
|
||||
async realPay(amount, companyId) {
|
||||
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,
|
||||
companyId,
|
||||
urlOk: this.makeUrl('ok'),
|
||||
urlKo: this.makeUrl('ko'),
|
||||
company
|
||||
urlKo: this.makeUrl('ko')
|
||||
});
|
||||
|
||||
const postValues = json.postValues;
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue