mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-28 12:11:08 -04:00
Merge branch 'auto-update' into 'master'
Auto update See merge request mohit.panjvani/crater-web!29
This commit is contained in:
@ -306,8 +306,6 @@ class EstimatesController extends Controller
|
||||
public function sendEstimate(Request $request)
|
||||
{
|
||||
$estimate = Estimate::findOrFail($request->id);
|
||||
$estimate->status = Estimate::STATUS_SENT;
|
||||
$estimate->save();
|
||||
|
||||
$data['estimate'] = $estimate->toArray();
|
||||
$userId = $data['estimate']['user_id'];
|
||||
@ -330,6 +328,11 @@ class EstimatesController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
if ($estimate->status == Estimate::STATUS_DRAFT) {
|
||||
$estimate->status = Estimate::STATUS_SENT;
|
||||
$estimate->save();
|
||||
}
|
||||
|
||||
\Mail::to($email)->send(new EstimatePdf($data, $notificationEmail));
|
||||
|
||||
return response()->json([
|
||||
|
||||
@ -371,12 +371,6 @@ class InvoicesController extends Controller
|
||||
{
|
||||
$invoice = Invoice::findOrFail($request->id);
|
||||
|
||||
if ($invoice->status == Invoice::STATUS_DRAFT) {
|
||||
$invoice->status = Invoice::STATUS_SENT;
|
||||
$invoice->sent = true;
|
||||
$invoice->save();
|
||||
}
|
||||
|
||||
$data['invoice'] = $invoice->toArray();
|
||||
$userId = $data['invoice']['user_id'];
|
||||
$data['user'] = User::find($userId)->toArray();
|
||||
@ -398,6 +392,12 @@ class InvoicesController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
if ($invoice->status == Invoice::STATUS_DRAFT) {
|
||||
$invoice->status = Invoice::STATUS_SENT;
|
||||
$invoice->sent = true;
|
||||
$invoice->save();
|
||||
}
|
||||
|
||||
\Mail::to($email)->send(new invoicePdf($data, $notificationEmail));
|
||||
|
||||
return response()->json([
|
||||
|
||||
@ -12,7 +12,7 @@ class UpdateController extends Controller
|
||||
{
|
||||
set_time_limit(600); // 10 minutes
|
||||
|
||||
$json = Updater::update($request->installed, $request->version);
|
||||
$json = Updater::update($request->installed, $request->version, $request->isMinor);
|
||||
|
||||
return response()->json($json);
|
||||
}
|
||||
|
||||
@ -15,9 +15,9 @@ 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($event->old, static::VERSION, '>=')) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -21,12 +21,12 @@ class Version101 extends Listener
|
||||
*/
|
||||
public function handle(UpdateFinished $event)
|
||||
{
|
||||
// if (!$this->check($event)) {
|
||||
// return;
|
||||
// }
|
||||
if (!$this->check($event)) {
|
||||
return;
|
||||
}
|
||||
|
||||
Artisan::call('db:seed', ['--class' => 'DemoSeeder', '--force' => true]);
|
||||
|
||||
Setting::getSetting('version', self::VERSION);
|
||||
Setting::setSetting('version', self::VERSION);
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,12 +13,12 @@ class Updater
|
||||
{
|
||||
use SiteApi;
|
||||
|
||||
public static function update($installed, $version)
|
||||
public static function update($installed, $version, $isMinor)
|
||||
{
|
||||
$data = null;
|
||||
$path = null;
|
||||
|
||||
$url = '/download/'.$version;
|
||||
$url = '/download/'.$version.'?type=update';
|
||||
|
||||
$response = static::getRemote($url, ['timeout' => 100, 'track_redirects' => true]);
|
||||
|
||||
@ -40,8 +40,8 @@ class Updater
|
||||
// Create temp directory
|
||||
$path = 'temp-' . md5(mt_rand());
|
||||
$path2 = 'temp2-' . md5(mt_rand());
|
||||
$temp_path = storage_path('app/temp') . '/' . $path;
|
||||
$temp_path2 = storage_path('app/temp') . '/' . $path2;
|
||||
$temp_path = storage_path('app') . '/' . $path;
|
||||
$temp_path2 = storage_path('app') . '/' . $path2;
|
||||
|
||||
if (!File::isDirectory($temp_path)) {
|
||||
File::makeDirectory($temp_path);
|
||||
@ -78,7 +78,9 @@ class Updater
|
||||
File::deleteDirectory($temp_path2);
|
||||
|
||||
try {
|
||||
if (!$isMinor) {
|
||||
event(new UpdateFinished($installed, $version));
|
||||
}
|
||||
|
||||
return [
|
||||
'success' => true,
|
||||
|
||||
@ -668,8 +668,13 @@ export default {
|
||||
},
|
||||
update_app: {
|
||||
title: 'Update App',
|
||||
description: 'update app description',
|
||||
update: 'Update'
|
||||
description: 'You can easily update Crater by checking for a new update by clicking the button below',
|
||||
check_update: 'Check for updates',
|
||||
avail_update: 'New Update available',
|
||||
next_version: 'Next version',
|
||||
update: 'Update',
|
||||
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'
|
||||
}
|
||||
},
|
||||
wizard: {
|
||||
|
||||
@ -6,50 +6,89 @@
|
||||
<p class="page-sub-title">
|
||||
{{ $t('settings.update_app.description') }}
|
||||
</p>
|
||||
<base-button size="large" icon="sync-alt" color="theme" @click="onUpdateApp">
|
||||
<label class="input-label">Current version</label><br>
|
||||
<label class="version">1.0.0</label>
|
||||
<base-button :outline="true" size="large" color="theme" @click="checkUpdate">
|
||||
<font-awesome-icon :class="{'update': isUpdateAvail}" style="margin-right: 5px;" icon="sync-alt" />
|
||||
{{ $t('settings.update_app.check_update') }}
|
||||
</base-button>
|
||||
<hr>
|
||||
<div class="mt-4 content">
|
||||
<h3 class="page-title">{{ $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">
|
||||
{{ $t('settings.update_app.update') }}
|
||||
</base-button>
|
||||
<div v-if="isShowProgressBar" class="progress mt-4">
|
||||
<div
|
||||
:style="[{'width': progress+'%'}]"
|
||||
class="progress-bar progress-bar-striped progress-bar-animated"
|
||||
role="progressbar"
|
||||
aria-valuenow="0"
|
||||
aria-valuemin="0"
|
||||
aria-valuemax="100"
|
||||
/>
|
||||
</div>
|
||||
<!-- <div>
|
||||
<h3 class="page-title">{{ $t('settings.update_app.update_progress') }}</h3>
|
||||
<p class="page-sub-title">
|
||||
{{ $t('settings.update_app.progress_text') }}
|
||||
</p>
|
||||
<font-awesome-icon icon="spinner" class="fa-spin"/>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
|
||||
import { mapActions, mapGetters } from 'vuex'
|
||||
export default {
|
||||
data () {
|
||||
return {
|
||||
isShowProgressBar: false,
|
||||
isUpdateAvail: false,
|
||||
progress: 10,
|
||||
interval: null
|
||||
interval: null,
|
||||
description: '',
|
||||
updateData: {
|
||||
isMinor: Boolean,
|
||||
installed: '',
|
||||
version: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
},
|
||||
watch: {
|
||||
},
|
||||
mounted () {
|
||||
},
|
||||
methods: {
|
||||
onUpdateApp () {
|
||||
this.isShowProgressBar = true
|
||||
this.interval = setInterval(() => {
|
||||
if (this.progress >= 100) {
|
||||
clearInterval(this.interval)
|
||||
setTimeout(() => {
|
||||
this.isShowProgressBar = false
|
||||
}, 1000)
|
||||
async onUpdateApp () {
|
||||
const data = this.updateData
|
||||
let response = await axios.post('/api/update', data)
|
||||
console.log(response.data)
|
||||
},
|
||||
async checkUpdate () {
|
||||
let response = await axios.get('/api/check/update')
|
||||
console.log(response.data)
|
||||
if (response.data) {
|
||||
this.updateData.isMinor = response.data.is_minor
|
||||
this.updateData.version = response.data.version.version
|
||||
this.updateData.description = response.data.version.description
|
||||
}
|
||||
this.progress += 10
|
||||
}, 250)
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.update {
|
||||
transform: rotate(360deg);
|
||||
animation: rotating 1s linear infinite;
|
||||
}
|
||||
|
||||
@keyframes rotating {
|
||||
0% {
|
||||
transform: rotate(0);
|
||||
}
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
9
resources/assets/sass/pages/settings.scss
vendored
9
resources/assets/sass/pages/settings.scss
vendored
@ -150,6 +150,15 @@
|
||||
overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
.version {
|
||||
background: #EAF1FB;
|
||||
border: 1px solid #EAF1FB;
|
||||
box-sizing: border-box;
|
||||
border-radius: 5px;
|
||||
padding: 10px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
@media(max-width: $x-small-breakpoint ) {
|
||||
|
||||
Reference in New Issue
Block a user