merge master

This commit is contained in:
Jay_Makwana
2019-11-13 18:53:05 +05:30
14 changed files with 88 additions and 108 deletions

View File

@ -1,27 +0,0 @@
{
"authHost": "http://crater-vue.test",
"authEndpoint": "/broadcasting/auth",
"clients": [],
"database": "redis",
"databaseConfig": {
"redis": {},
"sqlite": {
"databasePath": "/database/laravel-echo-server.sqlite"
}
},
"devMode": true,
"host": null,
"port": "6001",
"protocol": "http",
"socketio": {},
"sslCertPath": "",
"sslKeyPath": "",
"sslCertChainPath": "",
"sslPassphrase": "",
"apiOriginAllow": {
"allowCors": false,
"allowOrigin": "",
"allowMethods": "",
"allowHeaders": ""
}
}

View File

@ -1,37 +0,0 @@
0 info it worked if it ends with ok
1 verbose cli [ 'C:\\Program Files\\nodejs\\node.exe',
1 verbose cli 'C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js',
1 verbose cli 'run',
1 verbose cli 'watch' ]
2 info using npm@3.10.10
3 info using node@v6.11.2
4 verbose run-script [ 'prewatch', 'watch', 'postwatch' ]
5 info lifecycle @~prewatch: @
6 silly lifecycle @~prewatch: no script for prewatch, continuing
7 info lifecycle @~watch: @
8 verbose lifecycle @~watch: unsafe-perm in lifecycle true
9 verbose lifecycle @~watch: PATH: C:\Program Files\nodejs\node_modules\npm\bin\node-gyp-bin;C:\laragon2\www\crater-vue\node_modules\.bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\laragon2\bin\php\php-7.2.5-Win32-VC15-x86;C:\ProgramData\ComposerSetup\bin;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\laragon2\bin\yarn\bin;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\Java\jdk-10.0.1\bin;C:\Users\bytefury\AppData\Roaming\Composer\vendor\bin;C:\laragon\www\wp\node_modules\.bin;C:\laragon\www\Laravel\node_modules\webpack\bin;C:\Users\bytefury\AppData\Roaming\npm;C:\Program Files\Microsoft VS Code\bin;C:\Users\bytefury\AppData\Local\Microsoft\WindowsApps;
10 verbose lifecycle @~watch: CWD: C:\laragon2\www\crater-vue
11 silly lifecycle @~watch: Args: [ '/d /s /c',
11 silly lifecycle 'cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js' ]
12 verbose stack Error: kill ENOSYS
12 verbose stack at exports._errnoException (util.js:1020:11)
12 verbose stack at process.kill (internal/process.js:190:13)
12 verbose stack at process.listener (C:\Program Files\nodejs\node_modules\npm\node_modules\npmlog\node_modules\gauge\node_modules\signal-exit\index.js:86:15)
12 verbose stack at emitNone (events.js:91:20)
12 verbose stack at process.emit (events.js:185:7)
12 verbose stack at processEmit (C:\Program Files\nodejs\node_modules\npm\node_modules\npmlog\node_modules\gauge\node_modules\signal-exit\index.js:146:32)
12 verbose stack at processEmit (C:\Program Files\nodejs\node_modules\npm\node_modules\npm-registry-client\node_modules\npmlog\node_modules\gauge\node_modules\signal-exit\index.js:146:32)
12 verbose stack at Signal.wrap.onsignal (internal/process.js:217:44)
13 verbose cwd C:\laragon2\www\crater-vue
14 error Windows_NT 10.0.17134
15 error argv "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "run" "watch"
16 error node v6.11.2
17 error npm v3.10.10
18 error code ENOSYS
19 error errno ENOSYS
20 error syscall kill
21 error kill ENOSYS
22 error If you need help, you may report this error at:
22 error <https://github.com/npm/npm/issues>
23 verbose exit [ 1, true ]

View File

@ -307,7 +307,9 @@ export default {
send_invoice: 'Send Invoice', send_invoice: 'Send Invoice',
invoice_template: 'Invoice Template', invoice_template: 'Invoice Template',
template: 'Template', template: 'Template',
mark_as_sent: 'Mark as Sent', mark_as_sent: 'Mark as sent',
invoice_mark_as_sent: 'This invoice will be marked as sent',
confirm_send: 'This invoice will be sent via email to the customer',
invoice_date: 'Invoice Date', invoice_date: 'Invoice Date',
record_payment: 'Record Payment', record_payment: 'Record Payment',
add_new_invoice: 'Add New Invoice', add_new_invoice: 'Add New Invoice',
@ -751,6 +753,7 @@ export default {
invalid_url: 'Invalid url (ex: http://www.crater.com)', invalid_url: 'Invalid url (ex: http://www.crater.com)',
required: 'Field is required', required: 'Field is required',
email_incorrect: 'Incorrect Email.', email_incorrect: 'Incorrect Email.',
email_already_taken: 'The email has already been taken.',
email_does_not_exist: "User with given email doesn't exist", email_does_not_exist: "User with given email doesn't exist",
send_reset_link: 'Send Reset Link', send_reset_link: 'Send Reset Link',
not_yet: 'Not yet? Send it again', not_yet: 'Not yet? Send it again',
@ -767,9 +770,9 @@ export default {
payment_greater_than_due_amount: 'Entered Payment is more than due amount of this invoice.', 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.', quantity_maxlength: 'Quantity should not be greater than 10 digits.',
price_maxlength: 'Price should not be greater than 10 digits.', price_maxlength: 'Price should not be greater than 10 digits.',
price_minvalue: 'Price should be greater than 0 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 10 digits.',
amount_minvalue: 'Amount should be greater than 0 digits', amount_minvalue: 'Amount should be greater than 0.',
description_maxlength: 'Description should not be greater than 255 characters.', 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.', 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.', notes_maxlength: 'Notes should not be greater than 255 characters.',

View File

@ -312,6 +312,8 @@ export default {
invoice_template: 'Plantilla de factura', invoice_template: 'Plantilla de factura',
template: 'Modelo', template: 'Modelo',
mark_as_sent: 'Marcar como enviado', mark_as_sent: 'Marcar como enviado',
invoice_mark_as_sent: 'Esta factura se marcará como enviada',
confirm_send: 'Estas facturas se enviarán por correo electrónico al cliente.',
invoice_date: 'Fecha de la factura', invoice_date: 'Fecha de la factura',
record_payment: 'Registro de pago', record_payment: 'Registro de pago',
add_new_invoice: 'Añadir nueva factura', add_new_invoice: 'Añadir nueva factura',

View File

@ -312,6 +312,8 @@ export default {
invoice_template: 'Modèle de facture', invoice_template: 'Modèle de facture',
template: 'Modèle', template: 'Modèle',
mark_as_sent: 'Marquer comme envoyé', mark_as_sent: 'Marquer comme envoyé',
invoice_mark_as_sent: 'Cette facture sera marquée comme envoyé',
confirm_send: 'Cette facture sera envoyée par courrier électronique au client.',
invoice_date: 'Date de facturation', invoice_date: 'Date de facturation',
record_payment: 'Record de paiement', record_payment: 'Record de paiement',
add_new_invoice: 'Ajouter une nouvelle facture', add_new_invoice: 'Ajouter une nouvelle facture',

View File

@ -12,10 +12,15 @@
focus focus
type="email" type="email"
name="email" name="email"
@input="$v.loginData.email.$touch()"
/> />
<div v-if="$v.loginData.email.$error"> <div v-if="$v.loginData.email.$error">
<span v-if="!$v.loginData.email.required" class="text-danger">{{ $tc('validation.required') }}</span> <span v-if="!$v.loginData.email.required" class="text-danger">
<span v-if="!$v.loginData.email.email" class="text-danger"> {{ $tc('validation.email_incorrect') }} </span> {{ $tc('validation.required') }}
</span>
<span v-if="!$v.loginData.email.email" class="text-danger">
{{ $tc('validation.email_incorrect') }}
</span>
</div> </div>
</div> </div>
<div class="form-group"> <div class="form-group">
@ -25,8 +30,10 @@
:invalid="$v.loginData.password.$error" :invalid="$v.loginData.password.$error"
type="password" type="password"
name="password" name="password"
show-password
@input="$v.loginData.password.$touch()"
/> />
<div v-if="$v.loginData.email.$error"> <div v-if="$v.loginData.password.$error">
<span v-if="!$v.loginData.password.required" class="text-danger">{{ $tc('validation.required') }}</span> <span v-if="!$v.loginData.password.required" class="text-danger">{{ $tc('validation.required') }}</span>
<span v-if="!$v.loginData.password.minLength" class="text-danger"> {{ $tc('validation.password_min_length', $v.loginData.password.$params.minLength.min, {count: $v.loginData.password.$params.minLength.min}) }} </span> <span v-if="!$v.loginData.password.minLength" class="text-danger"> {{ $tc('validation.password_min_length', $v.loginData.password.$params.minLength.min, {count: $v.loginData.password.$params.minLength.min}) }} </span>
</div> </div>

View File

@ -219,7 +219,7 @@
</div> </div>
</div> </div>
<hr> <!-- second row complete --> <hr> <!-- second row complete -->
<div class="row same-address-checkbox-container"> <div class="same-address-checkbox-container">
<div class="p-1"> <div class="p-1">
<base-button ref="sameAddress" icon="copy" color="theme" class="btn-sm" @click="copyAddress(true)"> <base-button ref="sameAddress" icon="copy" color="theme" class="btn-sm" @click="copyAddress(true)">
{{ $t('customers.copy_billing_address') }} {{ $t('customers.copy_billing_address') }}
@ -624,17 +624,20 @@ export default {
this.isLoading = true this.isLoading = true
this.formData.currency_id = this.currency.id this.formData.currency_id = this.currency.id
} }
try {
let response = await this.addCustomer(this.formData) let response = await this.addCustomer(this.formData)
if (response.data.success) { if (response.data.success) {
window.toastr['success'](this.$t('customers.created_message')) window.toastr['success'](this.$t('customers.created_message'))
this.$router.push('/admin/customers') this.$router.push('/admin/customers')
this.isLoading = false this.isLoading = false
return true return true
} }
} catch (err) {
window.toastr['error'](response.data.error) if (err.response.data.errors.email) {
this.isLoading = false
window.toastr['error'](this.$t('validation.email_already_taken'))
}
}
} }
}, },
async fetchBillingState () { async fetchBillingState () {

View File

@ -247,13 +247,13 @@
{{ $t('invoices.view') }} {{ $t('invoices.view') }}
</router-link> </router-link>
</v-dropdown-item> </v-dropdown-item>
<v-dropdown-item> <v-dropdown-item v-if="row.status == 'DRAFT'">
<a class="dropdown-item" href="#" @click="sendInvoice(row.id)" > <a class="dropdown-item" href="#" @click="sendInvoice(row.id)" >
<font-awesome-icon icon="paper-plane" class="dropdown-item-icon" /> <font-awesome-icon icon="paper-plane" class="dropdown-item-icon" />
{{ $t('invoices.send_invoice') }} {{ $t('invoices.send_invoice') }}
</a> </a>
</v-dropdown-item> </v-dropdown-item>
<v-dropdown-item v-if="row.status === 'DRAFT'"> <v-dropdown-item v-if="row.status == 'DRAFT'">
<a class="dropdown-item" href="#" @click="sentInvoice(row.id)"> <a class="dropdown-item" href="#" @click="sentInvoice(row.id)">
<font-awesome-icon icon="check-circle" class="dropdown-item-icon" /> <font-awesome-icon icon="check-circle" class="dropdown-item-icon" />
{{ $t('invoices.mark_as_sent') }} {{ $t('invoices.mark_as_sent') }}
@ -384,6 +384,14 @@ export default {
'fetchCustomers' 'fetchCustomers'
]), ]),
async sendInvoice (id) { async sendInvoice (id) {
swal({
title: this.$t('general.are_you_sure'),
text: this.$t('invoices.confirm_send'),
icon: '/assets/icon/paper-plane-solid.svg',
buttons: true,
dangerMode: true
}).then(async (Send_Invoice) => {
if (Send_Invoice) {
const data = { const data = {
id: id id: id
} }
@ -392,8 +400,18 @@ export default {
if (response.data) { if (response.data) {
window.toastr['success'](this.$tc('invoices.send_invoice')) window.toastr['success'](this.$tc('invoices.send_invoice'))
} }
}
})
}, },
async sentInvoice (id) { async sentInvoice (id) {
swal({
title: this.$t('general.are_you_sure'),
text: this.$t('invoices.invoice_mark_as_sent'),
icon: '/assets/icon/check-circle-solid.svg',
buttons: true,
dangerMode: true
}).then(async (MarkAsSend_Invoice) => {
if (MarkAsSend_Invoice) {
const data = { const data = {
id: id id: id
} }
@ -402,6 +420,8 @@ export default {
if (response.data) { if (response.data) {
window.toastr['success'](this.$tc('invoices.mark_as_sent')) window.toastr['success'](this.$tc('invoices.mark_as_sent'))
} }
}
})
}, },
getStatus (val) { getStatus (val) {
this.filters.status = { this.filters.status = {

View File

@ -8,7 +8,7 @@
</p> </p>
</div> </div>
<form action="" @submit.prevent="saveEmailConfig()"> <form action="" @submit.prevent="saveEmailConfig()">
<div class="row my-2 mt-5"> <div class="row">
<div class="col-md-6 my-2"> <div class="col-md-6 my-2">
<label class="form-label">{{ $t('settings.mail.driver') }}</label> <label class="form-label">{{ $t('settings.mail.driver') }}</label>
<span class="text-danger"> *</span> <span class="text-danger"> *</span>
@ -116,12 +116,12 @@
</div> </div>
<base-button <base-button
:loading="loading" :loading="loading"
class="pull-right mt-5" class="pull-right mt-4"
icon="save" icon="save"
color="theme" color="theme"
type="submit" type="submit"
> >
{{ $t('wizard.save_cont') }} {{ $t('general.save') }}
</base-button> </base-button>
</form> </form>
</div> </div>

View File

@ -43,6 +43,9 @@
type="password" type="password"
@input="$v.formData.password.$touch()" @input="$v.formData.password.$touch()"
/> />
<div v-if="$v.formData.password.$error">
<span v-if="!$v.formData.password.minLength" class="text-danger"> {{ $tc('validation.password_min_length', $v.formData.password.$params.minLength.min, {count: $v.formData.password.$params.minLength.min}) }} </span>
</div>
</div> </div>
<div class="col-md-6 mb-4 form-group"> <div class="col-md-6 mb-4 form-group">
<label class="input-label">{{ $tc('settings.account_settings.confirm_password') }}</label> <label class="input-label">{{ $tc('settings.account_settings.confirm_password') }}</label>
@ -78,7 +81,7 @@
<script> <script>
import { validationMixin } from 'vuelidate' import { validationMixin } from 'vuelidate'
import { mapActions } from 'vuex' import { mapActions } from 'vuex'
const { required, requiredIf, sameAs, email } = require('vuelidate/lib/validators') const { required, requiredIf, sameAs, email, minLength } = require('vuelidate/lib/validators')
export default { export default {
mixins: [validationMixin], mixins: [validationMixin],
@ -103,6 +106,7 @@ export default {
email email
}, },
password: { password: {
minLength: minLength(8)
}, },
confirm_password: { confirm_password: {
required: requiredIf('isRequired'), required: requiredIf('isRequired'),

View File

@ -45,6 +45,7 @@
/> />
<div v-if="$v.profileData.password.$error"> <div v-if="$v.profileData.password.$error">
<span v-if="!$v.profileData.password.required" class="text-danger">{{ $tc('validation.required') }}</span> <span v-if="!$v.profileData.password.required" class="text-danger">{{ $tc('validation.required') }}</span>
<span v-if="!$v.profileData.password.minLength" class="text-danger"> {{ $tc('validation.password_min_length', $v.profileData.password.$params.minLength.min, {count: $v.profileData.password.$params.minLength.min}) }} </span>
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
@ -106,7 +107,8 @@ export default {
required required
}, },
password: { password: {
required required,
minLength: minLength(8)
}, },
confirm_password: { confirm_password: {
required: requiredIf('isRequired'), required: requiredIf('isRequired'),

View File

@ -111,6 +111,7 @@ code, .code {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.swal-icon--custom { .swal-icon--custom {
height: 50px !important; height: 70px !important;
} }

View File

@ -27,8 +27,6 @@
.same-address-checkbox-container { .same-address-checkbox-container {
display: flex; display: flex;
justify-content: flex-end;
padding-left: 12px;
margin-bottom: 1.5rem; margin-bottom: 1.5rem;
align-items: center; align-items: center;
justify-content: flex-end; justify-content: flex-end;
@ -97,7 +95,6 @@
.same-address-checkbox-container { .same-address-checkbox-container {
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
padding-left: 15px;
margin-bottom: 0rem; margin-bottom: 0rem;
} }

View File

@ -98,6 +98,9 @@
border-radius: 50%; border-radius: 50%;
height: 21px; height: 21px;
width: 21px; width: 21px;
display: flex;
align-items: center;
justify-content: center;
.icon-check { .icon-check {
font-style: normal; font-style: normal;