mirror of
				https://github.com/crater-invoice/crater.git
				synced 2025-10-31 13:41:09 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			154 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			154 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | |
|   <div class="setting-main-container">
 | |
|     <div class="card setting-card">
 | |
|       <div class="page-header">
 | |
|         <h3 class="page-title">{{ $t('settings.notification.title') }}</h3>
 | |
|         <p class="page-sub-title">
 | |
|           {{ $t('settings.notification.description') }}
 | |
|         </p>
 | |
|       </div>
 | |
|       <form action="" @submit.prevent="saveEmail()">
 | |
|         <div class="form-group">
 | |
|           <label class="form-label">{{ $t('settings.notification.email') }}</label><span class="text-danger"> *</span>
 | |
|           <base-input
 | |
|             :invalid="$v.notification_email.$error"
 | |
|             v-model.trim="notification_email"
 | |
|             :placeholder="$tc('settings.notification.please_enter_email')"
 | |
|             type="text"
 | |
|             name="notification_email"
 | |
|             icon="envelope"
 | |
|             input-class="col-md-6"
 | |
|             @input="$v.notification_email.$touch()"
 | |
|           />
 | |
|           <div v-if="$v.notification_email.$error">
 | |
|             <span v-if="!$v.notification_email.required" class="text-danger">{{ $tc('validation.required') }}</span>
 | |
|             <span v-if="!$v.notification_email.email" class="text-danger"> {{ $tc('validation.email_incorrect') }} </span>
 | |
|           </div>
 | |
|           <base-button
 | |
|             :loading="isLoading"
 | |
|             :disabled="isLoading"
 | |
|             class="mt-4"
 | |
|             icon="save"
 | |
|             color="theme"
 | |
|             type="submit"
 | |
|           > {{ $tc('settings.notification.save') }} </base-button>
 | |
|         </div>
 | |
|       </form>
 | |
|       <hr>
 | |
|       <div class="flex-box mt-3 mb-4">
 | |
|         <div class="left">
 | |
|           <base-switch v-model="notify_invoice_viewed" class="btn-switch" @change="setInvoiceViewd"/>
 | |
|         </div>
 | |
|         <div class="right ml-15">
 | |
|           <p class="box-title">  {{ $t('settings.notification.invoice_viewed') }} </p>
 | |
|           <p class="box-desc">  {{ $t('settings.notification.invoice_viewed_desc') }} </p>
 | |
|         </div>
 | |
|       </div>
 | |
|       <div class="flex-box mb-2">
 | |
|         <div class="left">
 | |
|           <base-switch v-model="notify_estimate_viewed" class="btn-switch" @change="setEstimateViewd"/>
 | |
|         </div>
 | |
|         <div class="right ml-15">
 | |
|           <p class="box-title">  {{ $t('settings.notification.estimate_viewed') }} </p>
 | |
|           <p class="box-desc">  {{ $t('settings.notification.estimate_viewed_desc') }} </p>
 | |
|         </div>
 | |
|       </div>
 | |
|     </div>
 | |
|   </div>
 | |
| </template>
 | |
| <script>
 | |
| import { validationMixin } from 'vuelidate'
 | |
| const { required, email } = require('vuelidate/lib/validators')
 | |
| 
 | |
| export default {
 | |
| 
 | |
|   mixins: [validationMixin],
 | |
|   data () {
 | |
|     return {
 | |
|       isLoading: false,
 | |
|       notification_email: null,
 | |
|       notify_invoice_viewed: null,
 | |
|       notify_estimate_viewed: null
 | |
|     }
 | |
|   },
 | |
|   validations: {
 | |
|     notification_email: {
 | |
|       required,
 | |
|       email
 | |
|     }
 | |
|   },
 | |
|   mounted () {
 | |
|     this.fetchData()
 | |
|   },
 | |
|   methods: {
 | |
|     async fetchData () {
 | |
|       let response1 = await axios.get('/api/settings/get-setting?key=notify_invoice_viewed')
 | |
|       if (response1.data) {
 | |
|         let data = response1.data
 | |
|         data.notify_invoice_viewed === 'YES' ?
 | |
|           this.notify_invoice_viewed = true :
 | |
|           this.notify_invoice_viewed = null
 | |
|       }
 | |
|       let response2 = await axios.get('/api/settings/get-setting?key=notify_estimate_viewed')
 | |
|       if (response2.data) {
 | |
|         let data = response2.data
 | |
|         data.notify_estimate_viewed === 'YES' ?
 | |
|           this.notify_estimate_viewed = true :
 | |
|           this.notify_estimate_viewed = null
 | |
|       }
 | |
|       let response3 = await axios.get('/api/settings/get-setting?key=notification_email')
 | |
|       if (response3.data) {
 | |
|         this.notification_email = response3.data.notification_email
 | |
|       }
 | |
|     },
 | |
|     async saveEmail () {
 | |
|       this.$v.$touch()
 | |
|       if (this.$v.$invalid) {
 | |
|         return true
 | |
|       }
 | |
|       this.isLoading = true
 | |
|       let data = {
 | |
|         key: 'notification_email',
 | |
|         value: this.notification_email
 | |
|       }
 | |
|       let response = await axios.put('/api/settings/update-setting', data)
 | |
|       if (response.data.success) {
 | |
|         this.isLoading = false
 | |
|         window.toastr['success'](this.$tc('settings.notification.email_save_message'))
 | |
|       }
 | |
|     },
 | |
|     async setInvoiceViewd (val) {
 | |
|       this.$v.$touch()
 | |
|       if (this.$v.$invalid) {
 | |
|         this.notify_invoice_viewed = !this.notify_invoice_viewed
 | |
|         return true
 | |
|       }
 | |
|       let data = {
 | |
|         key: 'notify_invoice_viewed',
 | |
|         value: this.notify_invoice_viewed ? 'YES' : 'NO'
 | |
|       }
 | |
| 
 | |
|       let response = await axios.put('/api/settings/update-setting', data)
 | |
|       if (response.data.success) {
 | |
|         window.toastr['success'](this.$tc('general.setting_updated'))
 | |
|       }
 | |
|     },
 | |
|     async setEstimateViewd (val) {
 | |
|       this.$v.$touch()
 | |
|       if (this.$v.$invalid) {
 | |
|         this.notify_estimate_viewed = !this.notify_estimate_viewed
 | |
|         return true
 | |
|       }
 | |
|       let data = {
 | |
|         key: 'notify_estimate_viewed',
 | |
|         value: this.notify_estimate_viewed ? 'YES' : 'NO'
 | |
|       }
 | |
|       let response = await axios.put('/api/settings/update-setting', data)
 | |
|       if (response.data) {
 | |
|         window.toastr['success'](this.$tc('general.setting_updated'))
 | |
|       }
 | |
|     }
 | |
|   }
 | |
| }
 | |
| </script>
 |