70 lines
2.5 KiB
JavaScript
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,
|
|
};
|
|
};
|