mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-16 16:07:33 +08:00
Feature - Add support for a fiscal year period defined in user settings.
* Add "This fiscal year", "Last fiscal year" as date range options in Transaction Details to filter transactions to those periods * Add fiscal year ranges to Statistics & Trend Analysis * Add "fiscal year start date" to user profile settings, allowing the user to select any date of the calendar year as the start of the fiscal year * Add "fiscal year format" to user profile settings, allowing the user to specify how financial year date labels should appear Implementation notes: * The default fiscal year start is January 1 and the default fiscal year display format is "FY 2025" * Fiscal year start date (month number & day number) are stored together in db as a uint16, high byte & low byte respectively * February 29 is disallowed as a fiscal year start date, since it is never used as a convention in any country * Jest is added to the project as a dev dependency, for unit tests in frontend Signed-off-by: Sebastian Reategui <seb.reategui@gmail.com>
This commit is contained in:
committed by
mayswind
parent
70eea8ff33
commit
b94dc8eb83
@@ -202,6 +202,20 @@
|
||||
v-model="newProfile.firstDayOfWeek">
|
||||
</list-item-selection-popup>
|
||||
</f7-list-item>
|
||||
|
||||
<f7-list-item
|
||||
link="#"
|
||||
class="list-item-with-header-and-title list-item-no-item-after"
|
||||
:header="tt('Fiscal Year Start Date')"
|
||||
:title="currentFiscalYearStartDate"
|
||||
@click="showFiscalYearStartSheet = true"
|
||||
>
|
||||
<fiscal-year-start-selection-sheet
|
||||
v-model:show="showFiscalYearStartSheet"
|
||||
v-model="newProfile.fiscalYearStart">
|
||||
</fiscal-year-start-selection-sheet>
|
||||
</f7-list-item>
|
||||
|
||||
</f7-list>
|
||||
|
||||
<f7-list form strong inset dividers class="margin-vertical" v-if="!loading">
|
||||
@@ -284,6 +298,26 @@
|
||||
v-model="newProfile.shortTimeFormat">
|
||||
</list-item-selection-popup>
|
||||
</f7-list-item>
|
||||
|
||||
<f7-list-item
|
||||
link="#"
|
||||
class="list-item-with-header-and-title list-item-no-item-after"
|
||||
:header="tt('Fiscal Year Format')"
|
||||
:title="findDisplayNameByType(allFiscalYearFormats, newProfile.fiscalYearFormat)"
|
||||
@click="showFiscalYearFormatPopup = true"
|
||||
>
|
||||
<list-item-selection-popup value-type="item"
|
||||
key-field="type" value-field="type"
|
||||
title-field="displayName"
|
||||
:title="tt('Fiscal Year Format')"
|
||||
:enable-filter="true"
|
||||
:filter-placeholder="tt('Fiscal Year Format')"
|
||||
:filter-no-items-text="tt('No results')"
|
||||
:items="allFiscalYearFormats"
|
||||
v-model:show="showFiscalYearFormatPopup"
|
||||
v-model="newProfile.fiscalYearFormat">
|
||||
</list-item-selection-popup>
|
||||
</f7-list-item>
|
||||
</f7-list>
|
||||
|
||||
<f7-list form strong inset dividers class="margin-vertical" v-if="!loading">
|
||||
@@ -482,7 +516,7 @@ const props = defineProps<{
|
||||
f7router: Router.Router;
|
||||
}>();
|
||||
|
||||
const { tt, getAllLanguageOptions, getAllCurrencies, getCurrencyName } = useI18n();
|
||||
const { tt, getAllLanguageOptions, getAllCurrencies, getCurrencyName, formatFiscalYearStart } = useI18n();
|
||||
const { showAlert, showToast, routeBackOnError } = useI18nUIComponents();
|
||||
|
||||
const {
|
||||
@@ -499,6 +533,7 @@ const {
|
||||
allShortDateFormats,
|
||||
allLongTimeFormats,
|
||||
allShortTimeFormats,
|
||||
allFiscalYearFormats,
|
||||
allDecimalSeparators,
|
||||
allDigitGroupingSymbols,
|
||||
allDigitGroupingTypes,
|
||||
@@ -533,10 +568,12 @@ const showEditableTransactionRangePopup = ref<boolean>(false);
|
||||
const showLanguagePopup = ref<boolean>(false);
|
||||
const showDefaultCurrencyPopup = ref<boolean>(false);
|
||||
const showFirstDayOfWeekPopup = ref<boolean>(false);
|
||||
const showFiscalYearStartSheet = ref<boolean>(false);
|
||||
const showLongDateFormatPopup = ref<boolean>(false);
|
||||
const showShortDateFormatPopup = ref<boolean>(false);
|
||||
const showLongTimeFormatPopup = ref<boolean>(false);
|
||||
const showShortTimeFormatPopup = ref<boolean>(false);
|
||||
const showFiscalYearFormatPopup = ref<boolean>(false);
|
||||
const showCurrencyDisplayTypePopup = ref<boolean>(false);
|
||||
const showDigitGroupingPopup = ref<boolean>(false);
|
||||
const showDigitGroupingSymbolPopup = ref<boolean>(false);
|
||||
@@ -560,6 +597,7 @@ const currentLanguageName = computed<string>(() => {
|
||||
});
|
||||
|
||||
const currentDayOfWeekName = computed<string | null>(() => findDisplayNameByType(allWeekDays.value, newProfile.value.firstDayOfWeek));
|
||||
const currentFiscalYearStartDate = computed<string | null>( () => formatFiscalYearStart(newProfile.value.fiscalYearStart) );
|
||||
|
||||
function init(): void {
|
||||
loading.value = true;
|
||||
|
||||
Reference in New Issue
Block a user