customize date formats

This commit is contained in:
Akhil Gupta
2021-07-14 06:47:16 +05:30
parent fdec3cd78e
commit 19ab2a59dd
10 changed files with 49 additions and 10 deletions

View File

@@ -8,7 +8,7 @@
</a> --> </a> -->
<h1 align="center" style="margin-bottom:0">Hammond</h1> <h1 align="center" style="margin-bottom:0">Hammond</h1>
<p align="center">Current Version - 2021.06.27</p> <p align="center">Current Version - 2021.07.14</p>
<p align="center"> <p align="center">
A self-hosted vehicle expense tracking system with support for multiple users. A self-hosted vehicle expense tracking system with support for multiple users.

View File

@@ -51,7 +51,7 @@ func udpateSettings(c *gin.Context) {
func udpateMySettings(c *gin.Context) { func udpateMySettings(c *gin.Context) {
var model models.UpdateSettingModel var model models.UpdateSettingModel
if err := c.ShouldBind(&model); err == nil { if err := c.ShouldBind(&model); err == nil {
err := service.UpdateUserSettings(c.MustGet("userId").(string), model.Currency, *model.DistanceUnit) err := service.UpdateUserSettings(c.MustGet("userId").(string), model.Currency, *model.DistanceUnit, model.DateFormat)
if err != nil { if err != nil {
c.JSON(http.StatusUnprocessableEntity, common.NewError("udpateMySettings", err)) c.JSON(http.StatusUnprocessableEntity, common.NewError("udpateMySettings", err))
return return

View File

@@ -138,6 +138,7 @@ func MigrateClarkson(connectionString string) (bool, error) {
DistanceUnit: distanceUnitMap[v.DistanceUnit], DistanceUnit: distanceUnitMap[v.DistanceUnit],
Role: role, Role: role,
Name: v.Username, Name: v.Username,
DateFormat: "MM/dd/yyyy",
} }
user.SetPassword("hammond") user.SetPassword("hammond")
err = CreateUser(&user) err = CreateUser(&user)

View File

@@ -14,6 +14,7 @@ type User struct {
Password string `json:"-"` Password string `json:"-"`
Currency string `json:"currency"` Currency string `json:"currency"`
DistanceUnit DistanceUnit `json:"distanceUnit"` DistanceUnit DistanceUnit `json:"distanceUnit"`
DateFormat string `json:"dateFormat"`
Role Role `json:"role"` Role Role `json:"role"`
Name string `json:"name"` Name string `json:"name"`
Vehicles []Vehicle `gorm:"many2many:user_vehicles;" json:"vehicles"` Vehicles []Vehicle `gorm:"many2many:user_vehicles;" json:"vehicles"`

View File

@@ -4,6 +4,7 @@ import "github.com/akhilrex/hammond/db"
type UpdateSettingModel struct { type UpdateSettingModel struct {
Currency string `json:"currency" form:"currency" query:"currency"` Currency string `json:"currency" form:"currency" query:"currency"`
DateFormat string `json:"dateFormat" form:"dateFormat" query:"dateFormat"`
DistanceUnit *db.DistanceUnit `json:"distanceUnit" form:"distanceUnit" query:"distanceUnit" ` DistanceUnit *db.DistanceUnit `json:"distanceUnit" form:"distanceUnit" query:"distanceUnit" `
} }

View File

@@ -14,7 +14,7 @@ func UpdateSettings(currency string, distanceUnit db.DistanceUnit) error {
setting.DistanceUnit = distanceUnit setting.DistanceUnit = distanceUnit
return db.UpdateSettings(setting) return db.UpdateSettings(setting)
} }
func UpdateUserSettings(userId, currency string, distanceUnit db.DistanceUnit) error { func UpdateUserSettings(userId, currency string, distanceUnit db.DistanceUnit, dateFormat string) error {
user, err := db.GetUserById(userId) user, err := db.GetUserById(userId)
if err != nil { if err != nil {
return err return err
@@ -22,6 +22,7 @@ func UpdateUserSettings(userId, currency string, distanceUnit db.DistanceUnit) e
user.Currency = currency user.Currency = currency
user.DistanceUnit = distanceUnit user.DistanceUnit = distanceUnit
user.DateFormat = dateFormat
return db.UpdateUser(user) return db.UpdateUser(user)
} }

View File

@@ -13,6 +13,7 @@ func CreateUser(userModel *models.RegisterRequest, role db.Role) error {
Role: role, Role: role,
Currency: setting.Currency, Currency: setting.Currency,
DistanceUnit: setting.DistanceUnit, DistanceUnit: setting.DistanceUnit,
DateFormat: "MM/dd/yyyy",
} }
toCreate.SetPassword(userModel.Password) toCreate.SetPassword(userModel.Password)

View File

@@ -4,6 +4,7 @@ import QuickEntryDisplay from '@components/quickEntryDisplay.vue'
import { mapState } from 'vuex' import { mapState } from 'vuex'
import axios from 'axios' import axios from 'axios'
import store from '@state/store' import store from '@state/store'
import { format } from 'date-fns'
export default { export default {
page: { page: {
@@ -61,6 +62,10 @@ export default {
} }
}, },
methods: { methods: {
formatDate(date) {
const finalFormat = this.me.dateFormat ? this.me.dateFormat : 'MM/dd/yyyy'
return format(date, finalFormat)
},
getEmptyExpense() { getEmptyExpense() {
return { return {
vehicleId: this.selectedVehicle.id, vehicleId: this.selectedVehicle.id,
@@ -172,7 +177,14 @@ export default {
</b-select> </b-select>
</b-field> </b-field>
<b-field label="Expense Date"> <b-field label="Expense Date">
<b-datepicker v-model="expenseModel.date" placeholder="Click to select..." icon="calendar" :max-date="new Date()"> </b-datepicker> <b-datepicker
v-model="expenseModel.date"
:date-formatter="formatDate"
placeholder="Click to select..."
icon="calendar"
:max-date="new Date()"
>
</b-datepicker>
</b-field> </b-field>
<b-field label="Expense Type*"> <b-field label="Expense Type*">
<b-input v-model="expenseModel.expenseType" expanded required></b-input> <b-input v-model="expenseModel.expenseType" expanded required></b-input>

View File

@@ -6,6 +6,7 @@ import store from '@state/store'
import { mapState } from 'vuex' import { mapState } from 'vuex'
import axios from 'axios' import axios from 'axios'
import { round } from 'lodash' import { round } from 'lodash'
import { format } from 'date-fns'
export default { export default {
page: { page: {
@@ -69,6 +70,10 @@ export default {
} }
}, },
methods: { methods: {
formatDate(date) {
const finalFormat = this.me.dateFormat ? this.me.dateFormat : 'MM/dd/yyyy'
return format(date, finalFormat)
},
fetchVehicleUsers() { fetchVehicleUsers() {
store store
.dispatch('vehicles/fetchUsersByVehicleId', { vehicleId: this.selectedVehicle.id }) .dispatch('vehicles/fetchUsersByVehicleId', { vehicleId: this.selectedVehicle.id })
@@ -186,7 +191,15 @@ export default {
</b-select> </b-select>
</b-field> </b-field>
<b-field label="Fillup Date"> <b-field label="Fillup Date">
<b-datepicker v-model="fillupModel.date" placeholder="Click to select..." icon="calendar" trap-focus :max-date="new Date()"> </b-datepicker> <b-datepicker
v-model="fillupModel.date"
:date-formatter="formatDate"
placeholder="Click to select..."
icon="calendar"
trap-focus
:max-date="new Date()"
>
</b-datepicker>
</b-field> </b-field>
<b-field label="Quantity*" addons> <b-field label="Quantity*" addons>
<b-input v-model.number="fillupModel.fuelQuantity" type="number" step=".001" min="0" expanded required></b-input> <b-input v-model.number="fillupModel.fuelQuantity" type="number" step=".001" min="0" expanded required></b-input>

View File

@@ -24,6 +24,7 @@ export default {
settingsModel: { settingsModel: {
currency: this.me.currency, currency: this.me.currency,
distanceUnit: this.me.distanceUnit, distanceUnit: this.me.distanceUnit,
dateFormat: this.me.dateFormat,
}, },
tryingToSave: false, tryingToSave: false,
changePassModel: { changePassModel: {
@@ -31,6 +32,7 @@ export default {
new: '', new: '',
renew: '', renew: '',
}, },
dateFormatMasters: ['dd/MM/yyyy', 'MM/dd/yyyy', 'yyyy/MM/dd'],
} }
}, },
computed: { computed: {
@@ -69,9 +71,9 @@ export default {
.catch((err) => console.log('error:', err)) .catch((err) => console.log('error:', err))
}) })
.catch((ex) => { .catch((ex) => {
let errorMessage= ex.message; let errorMessage = ex.message
if(ex.response && ex.response.data?.errors?.changePassword){ if (ex.response && ex.response.data?.errors?.changePassword) {
errorMessage=ex.response.data?.errors?.changePassword errorMessage = ex.response.data?.errors?.changePassword
} }
this.$buefy.toast.open({ this.$buefy.toast.open({
duration: 5000, duration: 5000,
@@ -134,6 +136,13 @@ export default {
</option> </option>
</b-select> </b-select>
</b-field> </b-field>
<b-field label="Date Format">
<b-select v-model.number="settingsModel.dateFormat" placeholder="Date Format" required expanded>
<option v-for="option in dateFormatMasters" :key="option" :value="option">
{{ `${option}` }}
</option>
</b-select>
</b-field>
<br /> <br />
<b-field> <b-field>
<b-button tag="input" native-type="submit" :disabled="tryingToSave" type="is-primary" value="Save" expanded> </b-button> <b-button tag="input" native-type="submit" :disabled="tryingToSave" type="is-primary" value="Save" expanded> </b-button>
@@ -172,7 +181,7 @@ export default {
<table class="table is-hoverable"> <table class="table is-hoverable">
<tr> <tr>
<td>Current Version</td> <td>Current Version</td>
<td>2021.06.27</td> <td>2021.07.14</td>
</tr> </tr>
<tr> <tr>
<td>Website</td> <td>Website</td>
@@ -202,7 +211,7 @@ export default {
</tr> </tr>
<tr> <tr>
<td>Support the developer</td> <td>Support the developer</td>
<td><a href="https://www.buymeacoffee.com/akhilrex" target="_blank" rel="noopener noreferrer">Support here</a></td> <td><a href="https://www.buymeacoffee.com/akhilrex" target="_blank" rel="noopener noreferrer">Buy him a beer!</a></td>
</tr> </tr>
</table> </table>
</div> </div>