Files
pleno-vue/src/composables/useDraftTransactionCustomer.js
T

70 lines
2.5 KiB
JavaScript

import { computed, ref } from "vue";
import { SessionUser } from "@/components/session/token/SessionUser.vue";
const toPositiveInteger = (value) => {
const parsedValue = Number.parseInt(String(value ?? ""), 10);
return Number.isInteger(parsedValue) && parsedValue > 0 ? parsedValue : null;
};
const fallbackDraftTransactionCustomerNumber = ref(null);
let draftTransactionCustomerConfigRequest = null;
const resolveConfiguredDraftTransactionCustomerNumber = () => {
return (
toPositiveInteger(SessionUser.runtimeConfig.economic.transactionDraftCustomerNumber.value) ??
fallbackDraftTransactionCustomerNumber.value
);
};
export const ensureDraftTransactionCustomerLoaded = async () => {
if (resolveConfiguredDraftTransactionCustomerNumber() !== null) {
return resolveConfiguredDraftTransactionCustomerNumber();
}
if (!SessionUser.canAccessSuperUser || !SessionUser.canAccessSuperUser()) {
return null;
}
if (!draftTransactionCustomerConfigRequest) {
draftTransactionCustomerConfigRequest = SessionUser.superUser.modules.economic.config.transactionDraftCustomerNumber
.get()
.then((response) => {
const configEntries = Array.isArray(response?.data?.data) ? response.data.data : [];
const configEntry = configEntries.find(
(entry) => entry?.variable === "transactionDraftCustomerNumber"
);
fallbackDraftTransactionCustomerNumber.value = toPositiveInteger(configEntry?.value);
return fallbackDraftTransactionCustomerNumber.value;
})
.catch(() => null)
.finally(() => {
draftTransactionCustomerConfigRequest = null;
});
}
return draftTransactionCustomerConfigRequest;
};
export const getDraftTransactionCustomerNumber = () => {
return resolveConfiguredDraftTransactionCustomerNumber();
};
export const isDraftTransactionCustomer = (customerNumber) => {
const configuredCustomerNumber = getDraftTransactionCustomerNumber();
return configuredCustomerNumber !== null && configuredCustomerNumber === toPositiveInteger(customerNumber);
};
export const useDraftTransactionCustomer = () => {
void ensureDraftTransactionCustomerLoaded();
const draftTransactionCustomerNumber = computed(() => getDraftTransactionCustomerNumber());
const hasDraftTransactionCustomer = computed(() => draftTransactionCustomerNumber.value !== null);
return {
draftTransactionCustomerNumber,
hasDraftTransactionCustomer,
isDraftTransactionCustomer,
ensureDraftTransactionCustomerLoaded,
};
};