From 61267af6347e1b9f9e64f084e0d6c3a664ba0b1e Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sun, 31 Jan 2021 20:09:03 +0800 Subject: [PATCH] support custom first day of week --- pkg/api/users.go | 9 +++ pkg/models/user.go | 50 ++++++++++---- pkg/services/users.go | 4 ++ src/consts/datetime.js | 32 +++++++++ src/lib/services.js | 10 +-- src/lib/utils.js | 29 ++++++--- src/locales/en.js | 24 +++++-- src/locales/zh_Hans.js | 24 +++++-- src/store/index.js | 2 + src/store/user.js | 11 +++- src/views/mobile/Home.vue | 72 ++++++++++++--------- src/views/mobile/Signup.vue | 18 +++++- src/views/mobile/statistics/Transaction.vue | 17 ++++- src/views/mobile/transactions/List.vue | 15 ++++- src/views/mobile/users/UserProfile.vue | 26 +++++++- 15 files changed, 262 insertions(+), 81 deletions(-) diff --git a/pkg/api/users.go b/pkg/api/users.go index 59cc8e58..f84c2c0b 100644 --- a/pkg/api/users.go +++ b/pkg/api/users.go @@ -50,6 +50,7 @@ func (a *UsersApi) UserRegisterHandler(c *core.Context) (interface{}, *errs.Erro Nickname: userRegisterReq.Nickname, Password: userRegisterReq.Password, DefaultCurrency: userRegisterReq.DefaultCurrency, + FirstDayOfWeek: userRegisterReq.FirstDayOfWeek, } err = a.users.CreateUser(user) @@ -158,6 +159,14 @@ func (a *UsersApi) UserUpdateProfileHandler(c *core.Context) (interface{}, *errs anythingUpdate = true } + if userUpdateReq.FirstDayOfWeek != nil && *userUpdateReq.FirstDayOfWeek != user.FirstDayOfWeek { + user.FirstDayOfWeek = *userUpdateReq.FirstDayOfWeek + userNew.FirstDayOfWeek = *userUpdateReq.FirstDayOfWeek + anythingUpdate = true + } else { + userNew.FirstDayOfWeek = models.WEEKDAY_INVALID; + } + if !anythingUpdate { return nil, errs.ErrNothingWillBeUpdated } diff --git a/pkg/models/user.go b/pkg/models/user.go index c7415aba..4b557c7a 100644 --- a/pkg/models/user.go +++ b/pkg/models/user.go @@ -10,6 +10,21 @@ const ( USER_TYPE_SUPER_ADMIN UserType = 127 ) +// WeekDay represents week day +type WeekDay byte + +// Week days +const ( + WEEKDAY_SUNDAY WeekDay = 0 + WEEKDAY_MONDAY WeekDay = 1 + WEEKDAY_TUESDAY WeekDay = 2 + WEEKDAY_WEDNESDAY WeekDay = 3 + WEEKDAY_THURSDAY WeekDay = 4 + WEEKDAY_FRIDAY WeekDay = 5 + WEEKDAY_SATURDAY WeekDay = 6 + WEEKDAY_INVALID WeekDay = 255 +) + // User represents user data stored in database type User struct { Uid int64 `xorm:"PK"` @@ -21,6 +36,7 @@ type User struct { Rands string `xorm:"VARCHAR(10) NOT NULL"` Type UserType `xorm:"TINYINT NOT NULL"` DefaultCurrency string `xorm:"VARCHAR(3) NOT NULL"` + FirstDayOfWeek WeekDay `xorm:"TINYINT NOT NULL"` IsAdmin bool `xorm:"NOT NULL"` Deleted bool `xorm:"NOT NULL"` EmailVerified bool `xorm:"NOT NULL"` @@ -32,10 +48,11 @@ type User struct { // UserBasicInfo represents a view-object of user basic info type UserBasicInfo struct { - Username string `json:"username"` - Email string `json:"email"` - Nickname string `json:"nickname"` - DefaultCurrency string `json:"defaultCurrency"` + Username string `json:"username"` + Email string `json:"email"` + Nickname string `json:"nickname"` + DefaultCurrency string `json:"defaultCurrency"` + FirstDayOfWeek WeekDay `json:"firstDayOfWeek"` } // UserLoginRequest represents all parameters of user login request @@ -46,20 +63,22 @@ type UserLoginRequest struct { // UserRegisterRequest represents all parameters of user registering request type UserRegisterRequest struct { - Username string `json:"username" binding:"required,notBlank,max=32,validUsername"` - Email string `json:"email" binding:"required,notBlank,max=100,validEmail"` - Nickname string `json:"nickname" binding:"required,notBlank,max=64"` - Password string `json:"password" binding:"required,min=6,max=128"` - DefaultCurrency string `json:"defaultCurrency" binding:"required,len=3,validCurrency"` + Username string `json:"username" binding:"required,notBlank,max=32,validUsername"` + Email string `json:"email" binding:"required,notBlank,max=100,validEmail"` + Nickname string `json:"nickname" binding:"required,notBlank,max=64"` + Password string `json:"password" binding:"required,min=6,max=128"` + DefaultCurrency string `json:"defaultCurrency" binding:"required,len=3,validCurrency"` + FirstDayOfWeek WeekDay `json:"firstDayOfWeek" binding:"min=0,max=6"` } // UserProfileUpdateRequest represents all parameters of user updating profile request type UserProfileUpdateRequest struct { - Email string `json:"email" binding:"omitempty,notBlank,max=100,validEmail"` - Nickname string `json:"nickname" binding:"omitempty,notBlank,max=64"` - Password string `json:"password" binding:"omitempty,min=6,max=128"` - OldPassword string `json:"oldPassword" binding:"omitempty,min=6,max=128"` - DefaultCurrency string `json:"defaultCurrency" binding:"required,len=3,validCurrency"` + Email string `json:"email" binding:"omitempty,notBlank,max=100,validEmail"` + Nickname string `json:"nickname" binding:"omitempty,notBlank,max=64"` + Password string `json:"password" binding:"omitempty,min=6,max=128"` + OldPassword string `json:"oldPassword" binding:"omitempty,min=6,max=128"` + DefaultCurrency string `json:"defaultCurrency" binding:"omitempty,len=3,validCurrency"` + FirstDayOfWeek *WeekDay `json:"firstDayOfWeek" binding:"omitempty,min=0,max=6"` } // UserProfileUpdateResponse represents the data returns to frontend after updating profile @@ -75,6 +94,7 @@ type UserProfileResponse struct { Nickname string `json:"nickname"` Type UserType `json:"type"` DefaultCurrency string `json:"defaultCurrency"` + FirstDayOfWeek WeekDay `json:"firstDayOfWeek"` LastLoginAt int64 `json:"lastLoginAt"` } @@ -85,6 +105,7 @@ func (u User) ToUserBasicInfo() *UserBasicInfo { Email: u.Email, Nickname: u.Nickname, DefaultCurrency: u.DefaultCurrency, + FirstDayOfWeek: u.FirstDayOfWeek, } } @@ -96,6 +117,7 @@ func (u User) ToUserProfileResponse() *UserProfileResponse { Nickname: u.Nickname, Type: u.Type, DefaultCurrency: u.DefaultCurrency, + FirstDayOfWeek: u.FirstDayOfWeek, LastLoginAt: u.LastLoginUnixTime, } } diff --git a/pkg/services/users.go b/pkg/services/users.go index f7bab034..6ebbb044 100644 --- a/pkg/services/users.go +++ b/pkg/services/users.go @@ -194,6 +194,10 @@ func (s *UserService) UpdateUser(user *models.User) (keyProfileUpdated bool, err updateCols = append(updateCols, "default_currency") } + if models.WEEKDAY_SUNDAY <= user.FirstDayOfWeek && user.FirstDayOfWeek <= models.WEEKDAY_SATURDAY { + updateCols = append(updateCols, "first_day_of_week") + } + user.UpdatedUnixTime = now updateCols = append(updateCols, "updated_unix_time") diff --git a/src/consts/datetime.js b/src/consts/datetime.js index 2710d600..510bb767 100644 --- a/src/consts/datetime.js +++ b/src/consts/datetime.js @@ -1,3 +1,34 @@ +const allWeekDays = { + Sunday: { + type: 0, + name: 'Sunday' + }, + Monday: { + type: 1, + name: 'Monday' + }, + Tuesday: { + type: 2, + name: 'Tuesday' + }, + Wednesday: { + type: 3, + name: 'Wednesday' + }, + Thursday: { + type: 4, + name: 'Thursday' + }, + Friday: { + type: 5, + name: 'Friday' + }, + Saturday: { + type: 6, + name: 'Saturday' + } +}; + const allDateRanges = { All: { type: 0, @@ -50,5 +81,6 @@ const allDateRanges = { }; export default { + allWeekDays: allWeekDays, allDateRanges: allDateRanges, }; diff --git a/src/lib/services.js b/src/lib/services.js index 4063860c..e79a6bc5 100644 --- a/src/lib/services.js +++ b/src/lib/services.js @@ -81,13 +81,14 @@ export default { } }); }, - register: ({ username, email, nickname, password, defaultCurrency }) => { + register: ({ username, email, nickname, password, defaultCurrency, firstDayOfWeek }) => { return axios.post('register.json', { username, email, nickname, password, - defaultCurrency + defaultCurrency, + firstDayOfWeek }); }, logout: () => { @@ -128,13 +129,14 @@ export default { getProfile: () => { return axios.get('v1/users/profile/get.json'); }, - updateProfile: ({ email, nickname, password, oldPassword, defaultCurrency }) => { + updateProfile: ({ email, nickname, password, oldPassword, defaultCurrency, firstDayOfWeek }) => { return axios.post('v1/users/profile/update.json', { email, nickname, password, oldPassword, - defaultCurrency + defaultCurrency, + firstDayOfWeek }); }, get2FAStatus: () => { diff --git a/src/lib/utils.js b/src/lib/utils.js index 2b873270..c74b2b77 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -110,13 +110,24 @@ function getTodayLastUnixTime() { return moment.unix(getTodayFirstUnixTime()).add(1, 'days').subtract(1, 'seconds').unix(); } -function getThisWeekFirstUnixTime() { +function getThisWeekFirstUnixTime(firstDayOfWeek) { const today = moment.unix(getTodayFirstUnixTime()); - return today.subtract(today.day(), 'days').unix(); + + if (!isNumber(firstDayOfWeek)) { + firstDayOfWeek = 0; + } + + let dayOfWeek = today.day() - firstDayOfWeek; + + if (dayOfWeek < 0) { + dayOfWeek += 7; + } + + return today.subtract(dayOfWeek, 'days').unix(); } -function getThisWeekLastUnixTime() { - return moment.unix(getThisWeekFirstUnixTime()).add(7, 'days').subtract(1, 'seconds').unix(); +function getThisWeekLastUnixTime(firstDayOfWeek) { + return moment.unix(getThisWeekFirstUnixTime(firstDayOfWeek)).add(7, 'days').subtract(1, 'seconds').unix(); } function getThisMonthFirstUnixTime() { @@ -163,7 +174,7 @@ function getShiftedDateRange(minTime, maxTime, scale) { }; } -function getDateRangeByDateType(dateType) { +function getDateRangeByDateType(dateType, firstDayOfWeek) { let maxTime = 0; let minTime = 0; @@ -183,11 +194,11 @@ function getDateRangeByDateType(dateType) { maxTime = getUnixTimeBeforeUnixTime(getTodayLastUnixTime(), 1, 'days'); minTime = getUnixTimeBeforeUnixTime(getTodayFirstUnixTime(), 29, 'days'); } else if (dateType === dateTimeConstants.allDateRanges.ThisWeek.type) { // This week - maxTime = getThisWeekLastUnixTime(); - minTime = getThisWeekFirstUnixTime(); + maxTime = getThisWeekLastUnixTime(firstDayOfWeek); + minTime = getThisWeekFirstUnixTime(firstDayOfWeek); } else if (dateType === dateTimeConstants.allDateRanges.LastWeek.type) { // Last week - maxTime = getUnixTimeBeforeUnixTime(getThisWeekLastUnixTime(), 7, 'days'); - minTime = getUnixTimeBeforeUnixTime(getThisWeekFirstUnixTime(), 7, 'days'); + maxTime = getUnixTimeBeforeUnixTime(getThisWeekLastUnixTime(firstDayOfWeek), 7, 'days'); + minTime = getUnixTimeBeforeUnixTime(getThisWeekFirstUnixTime(firstDayOfWeek), 7, 'days'); } else if (dateType === dateTimeConstants.allDateRanges.ThisMonth.type) { // This month maxTime = getThisMonthLastUnixTime(); minTime = getThisMonthFirstUnixTime(); diff --git a/src/locales/en.js b/src/locales/en.js index de80c559..ecf3c759 100644 --- a/src/locales/en.js +++ b/src/locales/en.js @@ -6,6 +6,7 @@ export default { }, 'default': { 'currency': 'USD', + 'firstDayOfWeek': 'Sunday' }, 'format': { 'date': { @@ -35,25 +36,32 @@ export default { }, 'datetime': { 'Monday': { - 'short': 'Mon' + 'short': 'Mon', + 'long': 'Monday' }, 'Tuesday': { - 'short': 'Tue' + 'short': 'Tue', + 'long': 'Tuesday' }, 'Wednesday': { - 'short': 'Wed' + 'short': 'Wed', + 'long': 'Wednesday' }, 'Thursday': { - 'short': 'Thu' + 'short': 'Thu', + 'long': 'Thursday' }, 'Friday': { - 'short': 'Fri' + 'short': 'Fri', + 'long': 'Friday' }, 'Saturday': { - 'short': 'Sat' + 'short': 'Sat', + 'long': 'Saturday' }, 'Sunday': { - 'short': 'Sun' + 'short': 'Sun', + 'long': 'Sunday' }, 'January': { 'long': 'January' @@ -420,6 +428,7 @@ export default { 'nickname': 'Nickname', 'oldPassword': 'Current Password', 'defaultCurrency': 'Default Currency', + 'firstDayOfWeek': 'First Day of Week', 'name': 'Name', 'category': 'Category', 'type': 'Type', @@ -520,6 +529,7 @@ export default { 'Nickname': 'Nickname', 'Your nickname': 'Your nickname', 'Default Currency': 'Default Currency', + 'First Day of Week': 'First Day of Week', 'Log In': 'Log In', 'Don\'t have an account?': 'Don\'t have an account?', 'Create an account': 'Create an account', diff --git a/src/locales/zh_Hans.js b/src/locales/zh_Hans.js index b6d61f1a..8784c332 100644 --- a/src/locales/zh_Hans.js +++ b/src/locales/zh_Hans.js @@ -6,6 +6,7 @@ export default { }, 'default': { 'currency': 'CNY', + 'firstDayOfWeek': 'Monday' }, 'format': { 'date': { @@ -35,25 +36,32 @@ export default { }, 'datetime': { 'Monday': { - 'short': '周一' + 'short': '周一', + 'long': '星期一' }, 'Tuesday': { - 'short': '周二' + 'short': '周二', + 'long': '星期二' }, 'Wednesday': { - 'short': '周三' + 'short': '周三', + 'long': '星期三' }, 'Thursday': { - 'short': '周四' + 'short': '周四', + 'long': '星期四' }, 'Friday': { - 'short': '周五' + 'short': '周五', + 'long': '星期五' }, 'Saturday': { - 'short': '周六' + 'short': '周六', + 'long': '星期六' }, 'Sunday': { - 'short': '周日' + 'short': '周日', + 'long': '星期日' }, 'January': { 'long': '1月' @@ -420,6 +428,7 @@ export default { 'nickname': '昵称', 'oldPassword': '当前密码', 'defaultCurrency': '默认货币', + 'firstDayOfWeek': '每周第一天', 'name': '名称', 'category': '分类', 'type': '类型', @@ -520,6 +529,7 @@ export default { 'Nickname': '昵称', 'Your nickname': '你的昵称', 'Default Currency': '默认货币', + 'First Day of Week': '每周第一天', 'Log In': '登录', 'Don\'t have an account?': '还没有账号?', 'Create an account': '创建新账号', diff --git a/src/store/index.js b/src/store/index.js index c013cf0f..f816e25b 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -64,6 +64,7 @@ import { resetState, currentUserNickname, currentUserDefaultCurrency, + currentUserFirstDayOfWeek, } from './user.js'; import { @@ -191,6 +192,7 @@ const stores = { // user currentUserNickname, currentUserDefaultCurrency, + currentUserFirstDayOfWeek, // exchange rates exchangeRatesLastUpdateDate, diff --git a/src/store/user.js b/src/store/user.js index e059c738..4618c53a 100644 --- a/src/store/user.js +++ b/src/store/user.js @@ -133,7 +133,8 @@ export function register(context, { user }) { password: user.password, email: user.email, nickname: user.nickname, - defaultCurrency: user.defaultCurrency + defaultCurrency: user.defaultCurrency, + firstDayOfWeek: user.firstDayOfWeek }).then(response => { const data = response.data; @@ -234,7 +235,8 @@ export function updateUserProfile(context, { profile, currentPassword }) { oldPassword: currentPassword, email: profile.email, nickname: profile.nickname, - defaultCurrency: profile.defaultCurrency + defaultCurrency: profile.defaultCurrency, + firstDayOfWeek: profile.firstDayOfWeek }).then(response => { const data = response.data; @@ -342,3 +344,8 @@ export function currentUserDefaultCurrency(state) { const userInfo = state.currentUserInfo || {}; return userInfo.defaultCurrency || null; } + +export function currentUserFirstDayOfWeek(state) { + const userInfo = state.currentUserInfo || {}; + return utils.isNumber(userInfo.firstDayOfWeek) ? userInfo.firstDayOfWeek : null; +} diff --git a/src/views/mobile/Home.vue b/src/views/mobile/Home.vue index 35603f91..676e4ecc 100644 --- a/src/views/mobile/Home.vue +++ b/src/views/mobile/Home.vue @@ -173,9 +173,10 @@ export default { const self = this; return { - dateRange: self.getCurrentDateRange(), loading: true, - showAmountInHomePage: this.$settings.isShowAmountInHomePage() + todayFirstUnixTime: self.$utilities.getTodayFirstUnixTime(), + todayLastUnixTime: self.$utilities.getTodayLastUnixTime(), + showAmountInHomePage: self.$settings.isShowAmountInHomePage() }; }, computed: { @@ -185,6 +186,39 @@ export default { defaultCurrency() { return this.$store.getters.currentUserDefaultCurrency || this.$t('default.currency'); }, + firstDayOfWeek() { + if (this.$utilities.isNumber(this.$store.getters.currentUserFirstDayOfWeek)) { + return this.$store.getters.currentUserFirstDayOfWeek; + } + + if (this.$constants.datetime.allWeekDays[this.$t('default.firstDayOfWeek')]) { + return this.$constants.datetime.allWeekDays[this.$t('default.firstDayOfWeek')].type; + } + + return 0; + }, + dateRange() { + const self = this; + + return { + today: { + startTime: self.todayFirstUnixTime, + endTime: self.todayLastUnixTime + }, + thisWeek: { + startTime: self.$utilities.getThisWeekFirstUnixTime(self.firstDayOfWeek), + endTime: self.$utilities.getThisWeekLastUnixTime(self.firstDayOfWeek) + }, + thisMonth: { + startTime: self.$utilities.getThisMonthFirstUnixTime(), + endTime: self.$utilities.getThisMonthLastUnixTime() + }, + thisYear: { + startTime: self.$utilities.getThisYearFirstUnixTime(), + endTime: self.$utilities.getThisYearLastUnixTime() + } + }; + }, thisMonthAmount() { if (!this.$store.state.transactionOverview || !this.$store.state.transactionOverview.thisMonth) { return { @@ -221,14 +255,16 @@ export default { onPageAfterIn() { this.showAmountInHomePage = this.$settings.isShowAmountInHomePage(); - const newDateRange = this.getCurrentDateRange(); + let dateChanged = false; - if (newDateRange.today.startTime !== this.dateRange.today.startTime || - newDateRange.today.endTime !== this.dateRange.today.endTime) { - this.dateRange = newDateRange; + if (this.todayFirstUnixTime !== this.$utilities.getTodayFirstUnixTime()) { + dateChanged = true; + + this.todayFirstUnixTime = this.$utilities.getTodayFirstUnixTime(); + this.todayLastUnixTime = this.$utilities.getTodayLastUnixTime(); } - if (this.$store.state.transactionOverviewStateInvalid && !this.loading) { + if ((dateChanged || this.$store.state.transactionOverviewStateInvalid) && !this.loading) { this.reload(null); } }, @@ -256,28 +292,6 @@ export default { toggleShowAmountInHomePage() { this.showAmountInHomePage = !this.showAmountInHomePage; this.$settings.setShowAmountInHomePage(this.showAmountInHomePage); - }, - getCurrentDateRange() { - const self = this; - - return { - today: { - startTime: self.$utilities.getTodayFirstUnixTime(), - endTime: self.$utilities.getTodayLastUnixTime() - }, - thisWeek: { - startTime: self.$utilities.getThisWeekFirstUnixTime(), - endTime: self.$utilities.getThisWeekLastUnixTime() - }, - thisMonth: { - startTime: self.$utilities.getThisMonthFirstUnixTime(), - endTime: self.$utilities.getThisMonthLastUnixTime() - }, - thisYear: { - startTime: self.$utilities.getThisYearFirstUnixTime(), - endTime: self.$utilities.getThisYearLastUnixTime() - } - }; } }, filters: { diff --git a/src/views/mobile/Signup.vue b/src/views/mobile/Signup.vue index d02c81d5..278c5a44 100644 --- a/src/views/mobile/Signup.vue +++ b/src/views/mobile/Signup.vue @@ -92,6 +92,18 @@ :value="currency.code">{{ currency.displayName }} + + + + @@ -185,7 +197,8 @@ export default { confirmPassword: '', email: '', nickname: '', - defaultCurrency: self.$t('default.currency') + defaultCurrency: self.$t('default.currency'), + firstDayOfWeek: self.$constants.datetime.allWeekDays[self.$t('default.firstDayOfWeek')] ? self.$constants.datetime.allWeekDays[self.$t('default.firstDayOfWeek')].type : 0 }, submitting: false, presetCategories: { @@ -206,6 +219,9 @@ export default { allCurrencies() { return this.$locale.getAllCurrencies(); }, + allWeekDays() { + return this.$constants.datetime.allWeekDays; + }, currentLocale: { get: function () { return this.$i18n.locale; diff --git a/src/views/mobile/statistics/Transaction.vue b/src/views/mobile/statistics/Transaction.vue index 66f1db9a..c7048e69 100644 --- a/src/views/mobile/statistics/Transaction.vue +++ b/src/views/mobile/statistics/Transaction.vue @@ -233,6 +233,17 @@ export default { return this.$store.getters.currentUserDefaultCurrency || this.$t('default.currency'); }, + firstDayOfWeek() { + if (this.$utilities.isNumber(this.$store.getters.currentUserFirstDayOfWeek)) { + return this.$store.getters.currentUserFirstDayOfWeek; + } + + if (this.$constants.datetime.allWeekDays[this.$t('default.firstDayOfWeek')]) { + return this.$constants.datetime.allWeekDays[this.$t('default.firstDayOfWeek')].type; + } + + return 0; + }, query() { return this.$store.state.transactionStatisticsFilter; }, @@ -389,7 +400,7 @@ export default { const self = this; const router = self.$f7router; - const dateRange = self.$utilities.getDateRangeByDateType(self.query.dateType); + const dateRange = self.$utilities.getDateRangeByDateType(self.query.dateType, self.firstDayOfWeek); self.$store.dispatch('initTransactionStatisticsFilter', { dateType: dateRange ? dateRange.dateType : undefined, @@ -455,7 +466,7 @@ export default { return; } - const dateRange = this.$utilities.getDateRangeByDateType(dateType); + const dateRange = this.$utilities.getDateRangeByDateType(dateType, this.firstDayOfWeek); if (!dateRange) { return; @@ -499,7 +510,7 @@ export default { } const dateRangeType = this.$constants.datetime.allDateRanges[dateRangeField]; - const dateRange = this.$utilities.getDateRangeByDateType(dateRangeType.type); + const dateRange = this.$utilities.getDateRangeByDateType(dateRangeType.type, this.firstDayOfWeek); if (dateRange && dateRange.minTime === newDateRange.minTime && dateRange.maxTime === newDateRange.maxTime) { newDateType = dateRangeType.type; diff --git a/src/views/mobile/transactions/List.vue b/src/views/mobile/transactions/List.vue index 5aea1ff1..b3fd6a60 100644 --- a/src/views/mobile/transactions/List.vue +++ b/src/views/mobile/transactions/List.vue @@ -392,6 +392,17 @@ export default { return this.$store.getters.currentUserDefaultCurrency || this.$t('default.currency'); }, + firstDayOfWeek() { + if (this.$utilities.isNumber(this.$store.getters.currentUserFirstDayOfWeek)) { + return this.$store.getters.currentUserFirstDayOfWeek; + } + + if (this.$constants.datetime.allWeekDays[this.$t('default.firstDayOfWeek')]) { + return this.$constants.datetime.allWeekDays[this.$t('default.firstDayOfWeek')].type; + } + + return 0; + }, query() { return this.$store.state.transactionsFilter; }, @@ -425,7 +436,7 @@ export default { const self = this; const query = self.$f7route.query; - let dateRange = self.$utilities.getDateRangeByDateType(query.dateType ? parseInt(query.dateType) : undefined); + let dateRange = self.$utilities.getDateRangeByDateType(query.dateType ? parseInt(query.dateType) : undefined, self.firstDayOfWeek); if (!dateRange && query.dateType === self.$constants.datetime.allDateRanges.Custom.type.toString() && @@ -535,7 +546,7 @@ export default { return; } - const dateRange = this.$utilities.getDateRangeByDateType(dateType); + const dateRange = this.$utilities.getDateRangeByDateType(dateType, this.firstDayOfWeek); if (!dateRange) { return; diff --git a/src/views/mobile/users/UserProfile.vue b/src/views/mobile/users/UserProfile.vue index b19748b6..1107f903 100644 --- a/src/views/mobile/users/UserProfile.vue +++ b/src/views/mobile/users/UserProfile.vue @@ -16,6 +16,7 @@ + @@ -74,6 +75,17 @@ + + + + @@ -99,12 +111,14 @@ export default { confirmPassword: '', email: '', nickname: '', - defaultCurrency: '' + defaultCurrency: '', + firstDayOfWeek: 0 }, oldProfile: { email: '', nickname: '', - defaultCurrency: '' + defaultCurrency: '', + firstDayOfWeek: 0 }, currentPassword: '', loading: true, @@ -116,6 +130,9 @@ export default { allCurrencies() { return this.$locale.getAllCurrencies(); }, + allWeekDays() { + return this.$constants.datetime.allWeekDays; + }, inputIsNotChanged() { return !!this.inputIsNotChangedProblemMessage; }, @@ -128,7 +145,8 @@ export default { } else if (!this.newProfile.password && !this.newProfile.confirmPassword && this.newProfile.email === this.oldProfile.email && this.newProfile.nickname === this.oldProfile.nickname && - this.newProfile.defaultCurrency === this.oldProfile.defaultCurrency) { + this.newProfile.defaultCurrency === this.oldProfile.defaultCurrency && + this.newProfile.firstDayOfWeek === this.oldProfile.firstDayOfWeek) { return 'Nothing has been modified'; } else if (!this.newProfile.password && this.newProfile.confirmPassword) { return 'Password cannot be empty'; @@ -162,10 +180,12 @@ export default { self.oldProfile.email = profile.email; self.oldProfile.nickname = profile.nickname; self.oldProfile.defaultCurrency = profile.defaultCurrency; + self.oldProfile.firstDayOfWeek = profile.firstDayOfWeek; self.newProfile.email = self.oldProfile.email self.newProfile.nickname = self.oldProfile.nickname; self.newProfile.defaultCurrency = self.oldProfile.defaultCurrency; + self.newProfile.firstDayOfWeek = self.oldProfile.firstDayOfWeek; self.loading = false; }).catch(error => {