Merge branch 'master' of https://gitlab.com/mohit.panjvani/crater-web into namespace-changes

This commit is contained in:
jayvirsinh_gohil
2019-11-16 16:27:34 +05:30
21 changed files with 87 additions and 200630 deletions

View File

@ -15,10 +15,10 @@ class Listener
protected function check($event)
{
// Do not apply to the same or newer versions
if (version_compare($event->old, static::VERSION, '>=')) {
return false;
if (version_compare(static::VERSION, $event->old, '>')) {
return true;
}
return true;
return false;
}
}

View File

@ -26,7 +26,7 @@ class Updater
if ($response instanceof RequestException) {
return [
'success' => false,
'errors' => 'Download Exception',
'error' => 'Download Exception',
'data' => [
'path' => $path
]
@ -85,7 +85,7 @@ class Updater
return [
'success' => true,
'errors' => false,
'error' => false,
'data' => []
];
} catch (\Exception $e) {
@ -98,7 +98,7 @@ class Updater
return [
'success' => false,
'errors' => 'Update error',
'error' => 'Update error',
'data' => []
];
}

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -374,7 +374,7 @@ import MultiSelect from 'vue-multiselect'
import { validationMixin } from 'vuelidate'
import { mapActions, mapGetters } from 'vuex'
import AddressStub from '../../../stub/address'
const { required, minLength, email, numeric, alpha, url, maxLength } = require('vuelidate/lib/validators')
const { required, minLength, email, numeric, url, maxLength } = require('vuelidate/lib/validators')
export default {
components: {
@ -421,8 +421,7 @@ export default {
formData: {
name: {
required,
minLength: minLength(3),
alpha
minLength: minLength(3)
},
email: {
email

View File

@ -142,7 +142,7 @@ export default {
required,
numeric,
minValue: minValue(0.1),
maxLength: maxLength(10)
maxLength: maxLength(20)
},
description: {
maxLength: maxLength(255)

View File

@ -672,9 +672,11 @@ export default {
check_update: 'Check for updates',
avail_update: 'New Update available',
next_version: 'Next version',
update: 'Update',
update: 'Update Now',
update_progress: 'Update in progress...',
progress_text: 'It will just take a few minutes. Please do not refresh the screen or close the window before the update finishes'
progress_text: 'It will just take a few minutes. Please do not refresh the screen or close the window before the update finishes',
update_success: 'App has been updated successfully',
latest_message: 'No update available! You are on the latest version.'
}
},
wizard: {
@ -778,17 +780,17 @@ export default {
password_length: 'Password must be {count} character long.',
qty_must_greater_than_zero: 'Quantity must be greater than zero.',
price_greater_than_zero: 'Price must be greater than zero.',
payment_greater_than_zero: 'Payment must be greater than zero.',
payment_greater_than_zero: 'Payment must be greater than zero.',
payment_greater_than_due_amount: 'Entered Payment is more than due amount of this invoice.',
quantity_maxlength: 'Quantity should not be greater than 10 digits.',
price_maxlength: 'Price should not be greater than 10 digits.',
quantity_maxlength: 'Quantity should not be greater than 20 digits.',
price_maxlength: 'Price should not be greater than 20 digits.',
price_minvalue: 'Price should be greater than 0.',
amount_maxlength: 'Amount should not be greater than 10 digits.',
amount_maxlength: 'Amount should not be greater than 20 digits.',
amount_minvalue: 'Amount should be greater than 0.',
description_maxlength: 'Description should not be greater than 255 characters.',
maximum_options_error: 'Maximum of {max} options selected. First remove a selected option to select another.',
notes_maxlength: 'Notes should not be greater than 255 characters.',
address_maxlength: 'Address should not be greater than 255 characters.',
ref_number_maxlength: 'Ref Number should not be greater than 10 digits'
ref_number_maxlength: 'Ref Number should not be greater than 255 characters.'
}
}

View File

@ -774,15 +774,15 @@ export default {
price_greater_than_zero: 'El precio debe ser mayor que cero.',
payment_greater_than_zero: 'El pago debe ser mayor que cero.',
payment_greater_than_due_amount: 'El pago ingresado es mayor al monto adeudado de esta factura.',
quantity_maxlength: 'La cantidad no debe ser mayor de 10 dígitos.',
price_maxlength: 'El precio no debe ser mayor de 10 dígitos.',
quantity_maxlength: 'La cantidad no debe ser mayor de 20 dígitos.',
price_maxlength: 'El precio no debe ser mayor de 20 dígitos.',
price_minvalue: 'El precio debe ser mayor que 0 dígitos',
amount_maxlength: 'La cantidad no debe ser mayor de 10 dígitos.',
amount_maxlength: 'La cantidad no debe ser mayor de 20 dígitos.',
amount_minvalue: 'La cantidad debe ser mayor que 0 dígitos',
description_maxlength: 'La descripción no debe tener más de 255 caracteres.',
maximum_options_error: 'Máximo de {max} opciones seleccionadas. Primero elimine una opción seleccionada para seleccionar otra.',
notes_maxlength: 'Las notas no deben tener más de 255 caracteres.',
address_maxlength: 'La dirección no debe tener más de 255 caracteres.',
ref_number_maxlength: 'El número de referencia no debe tener más de 10 dígitos.'
ref_number_maxlength: 'El número de referencia no debe tener más de 255 caracteres.'
}
}

View File

@ -777,15 +777,15 @@ export default {
price_greater_than_zero: 'Le prix doit être supérieur à zéro.',
payment_greater_than_zero: 'Le paiement doit être supérieur à zéro.',
payment_greater_than_due_amount: 'Le paiement entré est plus que le montant dû de cette facture.',
quantity_maxlength: 'La quantité ne doit pas dépasser 10 chiffres.',
price_maxlength: 'Le prix ne doit pas dépasser 10 chiffres.',
quantity_maxlength: 'La quantité ne doit pas dépasser 20 chiffres.',
price_maxlength: 'Le prix ne doit pas dépasser 20 chiffres.',
price_minvalue: 'Le prix doit être supérieur à 0 chiffre',
amount_maxlength: 'Le montant ne doit pas dépasser 10 chiffres.',
amount_maxlength: 'Le montant ne doit pas dépasser 20 chiffres.',
amount_minvalue: 'Le montant doit être supérieur à 0 chiffre',
description_maxlength: 'La description ne doit pas dépasser 255 caractères.',
maximum_options_error: 'Maximum de {max} options sélectionnées. Commencez par supprimer une option sélectionnée pour en sélectionner une autre.',
notes_maxlength: 'Les notes ne doivent pas dépasser 255 caractères.',
address_maxlength: "L'adresse ne doit pas dépasser 255 caractères.",
ref_number_maxlength: 'Le numéro de référence ne doit pas dépasser 10 chiffres.'
ref_number_maxlength: 'Le numéro de référence ne doit pas dépasser 255 caractères.'
}
}

View File

@ -141,7 +141,6 @@
v-model="newEstimate.reference_number"
:invalid="$v.newEstimate.reference_number.$error"
icon="hashtag"
type="number"
@input="$v.newEstimate.reference_number.$touch()"
/>
<div v-if="$v.newEstimate.reference_number.$error" class="text-danger">{{ $tc('validation.ref_number_maxlength') }}</div>
@ -383,7 +382,7 @@ export default {
maxLength: maxLength(255)
},
reference_number: {
maxLength: maxLength(10)
maxLength: maxLength(255)
}
},
selectedCustomer: {

View File

@ -305,12 +305,12 @@ export default {
quantity: {
required,
minValue: minValue(1),
maxLength: maxLength(10)
maxLength: maxLength(20)
},
price: {
required,
minValue: minValue(1),
maxLength: maxLength(10)
maxLength: maxLength(20)
},
discount_val: {
between: between(0, this.maxDiscount)

View File

@ -90,16 +90,16 @@
<label>{{ $t('expenses.amount') }}</label> <span class="text-danger"> * </span>
<div class="base-input">
<money
:class="{'invalid' : $v.formData.amount.$error}"
v-model="amount"
v-bind="defaultCurrencyForInput"
:class="{'invalid' : $v.formData.amount.$error}"
class="input-field"
/>
</div>
<div v-if="$v.formData.amount.$error">
<span v-if="!$v.formData.amount.required" class="text-danger">{{ $t('validation.required') }}</span>
<span v-if="!$v.formData.amount.maxLength" class="text-danger">{{ $t('validation.amount_maxlength') }}</span>
<span v-if="!$v.formData.amount.maxValue" class="text-danger">{{ $t('validation.amount_minvalue') }}</span>
<span v-if="!$v.formData.amount.required" class="text-danger">{{ $t('validation.required') }} </span>
<span v-if="!$v.formData.amount.maxLength" class="text-danger">{{ $t('validation.price_maxlength') }}</span>
<span v-if="!$v.formData.amount.minValue" class="text-danger">{{ $t('validation.price_minvalue') }}</span>
</div>
</div>
<div class="form-group col-sm-6">
@ -198,8 +198,8 @@ export default {
},
amount: {
required,
maxLength: maxLength(10),
minValue: minValue(0.1)
minValue: minValue(0.1),
maxLength: maxLength(20)
},
notes: {
maxLength: maxLength(255)

View File

@ -141,7 +141,6 @@
v-model="newInvoice.reference_number"
:invalid="$v.newInvoice.reference_number.$error"
icon="hashtag"
type="number"
@input="$v.newInvoice.reference_number.$touch()"
/>
<div v-if="$v.newInvoice.reference_number.$error" class="text-danger">{{ $tc('validation.ref_number_maxlength') }}</div>
@ -384,7 +383,7 @@ export default {
maxLength: maxLength(255)
},
reference_number: {
maxLength: maxLength(10)
maxLength: maxLength(255)
}
},
selectedCustomer: {

View File

@ -306,12 +306,12 @@ export default {
quantity: {
required,
minValue: minValue(1),
maxLength: maxLength(10)
maxLength: maxLength(20)
},
price: {
required,
minValue: minValue(1),
maxLength: maxLength(10)
maxLength: maxLength(20)
},
discount_val: {
between: between(0, this.maxDiscount)

View File

@ -92,7 +92,7 @@
<script>
import { validationMixin } from 'vuelidate'
import { mapActions, mapGetters } from 'vuex'
const { required, minLength, numeric, alpha, minValue, maxLength } = require('vuelidate/lib/validators')
const { required, minLength, numeric, minValue, maxLength } = require('vuelidate/lib/validators')
export default {
mixins: {
@ -163,7 +163,7 @@ export default {
price: {
required,
numeric,
maxLength: maxLength(10),
maxLength: maxLength(20),
minValue: minValue(0.1)
},
description: {

View File

@ -7,24 +7,24 @@
{{ $t('settings.update_app.description') }}
</p>
<label class="input-label">Current version</label><br>
<label class="version">1.0.0</label>
<base-button :outline="true" :disabled="isCheckingforUpdate" size="large" color="theme" @click="checkUpdate" >
<label class="version mb-4">{{ currentVersion }}</label>
<base-button :outline="true" :disabled="isCheckingforUpdate || isUpdating" size="large" color="theme" @click="checkUpdate" class="mb-4">
<font-awesome-icon :class="{'update': isCheckingforUpdate}" style="margin-right: 10px;" icon="sync-alt" />
{{ $t('settings.update_app.check_update') }}
</base-button>
<hr>
<div v-show="!isUpdating" v-if="isUpdateAvailable" class="mt-4 content">
<h3 class="page-title">{{ $t('settings.update_app.avail_update') }}</h3>
<h3 class="page-title mb-3">{{ $t('settings.update_app.avail_update') }}</h3>
<label class="input-label">{{ $t('settings.update_app.next_version') }}</label><br>
<label class="version">{{ updateData.version }}</label>
<p class="page-sub-title">
{{ description }}
</p>
<base-button size="large" color="theme" @click="onUpdateApp">
<base-button size="large" icon="rocket" color="theme" @click="onUpdateApp">
{{ $t('settings.update_app.update') }}
</base-button>
</div>
<div v-if="isUpdating">
<div v-if="isUpdating" class="mt-4 content">
<h3 class="page-title">{{ $t('settings.update_app.update_progress') }}</h3>
<p class="page-sub-title">
{{ $t('settings.update_app.progress_text') }}
@ -35,8 +35,8 @@
</div>
</div>
</template>
<script>
import { mapActions, mapGetters } from 'vuex'
export default {
data () {
return {
@ -47,6 +47,7 @@ export default {
progress: 10,
interval: null,
description: '',
currentVersion: '',
updateData: {
isMinor: Boolean,
installed: '',
@ -54,29 +55,49 @@ export default {
}
}
},
computed: {
},
watch: {
},
mounted () {
window.axios.get('/api/settings/app/version').then((res) => {
this.currentVersion = res.data.version
})
},
methods: {
async onUpdateApp () {
this.isUpdating = true
const data = this.updateData
let response = await axios.post('/api/update', data)
try {
this.isUpdating = true
this.updateData.installed = this.currentVersion
let res = await window.axios.post('/api/update', this.updateData)
if (res.data.success) {
this.isUpdateAvailable = false
window.toastr['success'](this.$t('settings.update_app.update_success'))
this.currentVersion = this.updateData.version
} else {
console.log(res.data)
window.toastr['error'](res.data.error)
}
} catch (e) {
console.log(e)
window.toastr['error']('Something went wrong')
}
this.isUpdating = false
this.isUpdateAvailable = false
},
async checkUpdate () {
try {
this.isCheckingforUpdate = true
let response = await axios.get('/api/check/update')
let response = await window.axios.get('/api/check/update')
this.isCheckingforUpdate = false
if (!response.data.version) {
window.toastr['warning'](this.$t('settings.update_app.latest_message'))
return
}
if (response.data) {
this.updateData.isMinor = response.data.is_minor
this.updateData.version = response.data.version
this.updateData.version = response.data.version.version
this.description = response.data.description
this.isUpdateAvailable = true
}

View File

@ -67,8 +67,8 @@ export default {
data () {
return {
loading: false,
tab: 'step_3',
step: 3
tab: 'step_1',
step: 1
}
},
created () {

View File

@ -52,7 +52,8 @@ import {
faCopy,
faPaperPlane,
faEyeSlash,
faSyncAlt
faSyncAlt,
faRocket
} from '@fortawesome/free-solid-svg-icons'
import { far } from '@fortawesome/free-regular-svg-icons'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
@ -115,7 +116,8 @@ library.add(
faEllipsisH,
faCopy,
faPaperPlane,
faSyncAlt
faSyncAlt,
faRocket
)
Vue.component('font-awesome-icon', FontAwesomeIcon)

View File

@ -1,3 +1,7 @@
.base-modal .modal-body {
overflow: visible !important;
}
.item-modal {
.card-footer {