mirror of
https://github.com/crater-invoice/crater.git
synced 2025-10-28 04:01:10 -04:00
Merge branch 'master' of gitlab.com:mohit.panjvani/crater-web
This commit is contained in:
@ -105,13 +105,6 @@ class CompanyController extends Controller
|
|||||||
['key' => 'december-november', 'value' => '12-11'],
|
['key' => 'december-november', 'value' => '12-11'],
|
||||||
];
|
];
|
||||||
|
|
||||||
$languages = [
|
|
||||||
"en" => "English",
|
|
||||||
"de" => "German",
|
|
||||||
"fr" => "French",
|
|
||||||
"es" => "Spanish"
|
|
||||||
];
|
|
||||||
|
|
||||||
$language = CompanySetting::getSetting('language', $request->header('company'));
|
$language = CompanySetting::getSetting('language', $request->header('company'));
|
||||||
$carbon_date_format = CompanySetting::getSetting('carbon_date_format', $request->header('company'));
|
$carbon_date_format = CompanySetting::getSetting('carbon_date_format', $request->header('company'));
|
||||||
$moment_date_format = CompanySetting::getSetting('moment_date_format', $request->header('company'));
|
$moment_date_format = CompanySetting::getSetting('moment_date_format', $request->header('company'));
|
||||||
@ -121,7 +114,6 @@ class CompanyController extends Controller
|
|||||||
|
|
||||||
$languages = [
|
$languages = [
|
||||||
["code"=>"en", "name" => "English"],
|
["code"=>"en", "name" => "English"],
|
||||||
["code"=>"de", "name" => "German"],
|
|
||||||
["code"=>"fr", "name" => "French"],
|
["code"=>"fr", "name" => "French"],
|
||||||
["code"=>"es", "name" => "Spanish"]
|
["code"=>"es", "name" => "Spanish"]
|
||||||
];
|
];
|
||||||
|
|||||||
@ -55,6 +55,7 @@ class ItemsController extends Controller
|
|||||||
|
|
||||||
if ($request->has('taxes')) {
|
if ($request->has('taxes')) {
|
||||||
foreach ($request->taxes as $tax) {
|
foreach ($request->taxes as $tax) {
|
||||||
|
$tax['company_id'] = $request->header('company');
|
||||||
$item->taxes()->create($tax);
|
$item->taxes()->create($tax);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -75,12 +76,16 @@ class ItemsController extends Controller
|
|||||||
$item->price = $request->price;
|
$item->price = $request->price;
|
||||||
$item->save();
|
$item->save();
|
||||||
|
|
||||||
|
$oldTaxes = $item->taxes->toArray();
|
||||||
|
|
||||||
|
foreach ($oldTaxes as $oldTax) {
|
||||||
|
Tax::destroy($oldTax['id']);
|
||||||
|
}
|
||||||
|
|
||||||
if ($request->has('taxes')) {
|
if ($request->has('taxes')) {
|
||||||
foreach ($request->taxes as $tax) {
|
foreach ($request->taxes as $tax) {
|
||||||
$item->taxes()->updateOrCreate(
|
$tax['company_id'] = $request->header('company');
|
||||||
['tax_type_id' => $tax['tax_type_id']],
|
$item->taxes()->create($tax);
|
||||||
['amount' => $tax['amount'], 'percent' => $tax['percent'], 'name' => $tax['name']]
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -38,7 +38,8 @@ class OnboardingController extends Controller
|
|||||||
$time_zones = TimeZones::get_list();
|
$time_zones = TimeZones::get_list();
|
||||||
$languages = [
|
$languages = [
|
||||||
["code"=>"en", "name" => "English"],
|
["code"=>"en", "name" => "English"],
|
||||||
["code"=>"de", "name" => "German"],
|
["code"=>"fr", "name" => "French"],
|
||||||
|
["code"=>"es", "name" => "Spanish"]
|
||||||
];
|
];
|
||||||
$fiscal_years = [
|
$fiscal_years = [
|
||||||
['key' => 'january-december' , 'value' => '1-12'],
|
['key' => 'january-december' , 'value' => '1-12'],
|
||||||
|
|||||||
@ -1,32 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Crater\Listeners\Updates\V10;
|
|
||||||
|
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
|
||||||
use Illuminate\Queue\InteractsWithQueue;
|
|
||||||
use Crater\Listeners\Updates\Listener;
|
|
||||||
use Crater\Events\UpdateFinished;
|
|
||||||
use Illuminate\Support\Facades\Artisan;
|
|
||||||
use Crater\Setting;
|
|
||||||
|
|
||||||
class Version101 extends Listener
|
|
||||||
{
|
|
||||||
const VERSION = '1.0.1';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle the event.
|
|
||||||
*
|
|
||||||
* @param object $event
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function handle(UpdateFinished $event)
|
|
||||||
{
|
|
||||||
if (!$this->check($event)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Artisan::call('db:seed', ['--class' => 'DemoSeeder', '--force' => true]);
|
|
||||||
|
|
||||||
Setting::setSetting('version', self::VERSION);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -5,7 +5,6 @@ use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvi
|
|||||||
use Illuminate\Auth\Events\Registered;
|
use Illuminate\Auth\Events\Registered;
|
||||||
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
|
||||||
use Crater\Events\UpdateFinished;
|
use Crater\Events\UpdateFinished;
|
||||||
use Crater\Listeners\Updates\V10\Version101;
|
|
||||||
|
|
||||||
class EventServiceProvider extends ServiceProvider
|
class EventServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
@ -16,7 +15,6 @@ class EventServiceProvider extends ServiceProvider
|
|||||||
*/
|
*/
|
||||||
protected $listen = [
|
protected $listen = [
|
||||||
UpdateFinished::class=> [
|
UpdateFinished::class=> [
|
||||||
Version101::class,
|
|
||||||
],
|
],
|
||||||
Registered::class => [
|
Registered::class => [
|
||||||
SendEmailVerificationNotification::class,
|
SendEmailVerificationNotification::class,
|
||||||
|
|||||||
@ -11,7 +11,7 @@ trait SiteApi
|
|||||||
|
|
||||||
protected static function getRemote($url, $data = array())
|
protected static function getRemote($url, $data = array())
|
||||||
{
|
{
|
||||||
$base = 'http://crater-main.test/';
|
$base = 'https://craterapp.com/';
|
||||||
|
|
||||||
$client = new Client(['verify' => false, 'base_uri' => $base]);
|
$client = new Client(['verify' => false, 'base_uri' => $base]);
|
||||||
|
|
||||||
|
|||||||
@ -48,36 +48,37 @@ class Updater
|
|||||||
File::makeDirectory($temp_path2);
|
File::makeDirectory($temp_path2);
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = $temp_path . '/upload.zip';
|
|
||||||
|
|
||||||
// Add content to the Zip file
|
|
||||||
$uploaded = is_int(file_put_contents($file, $data)) ? true : false;
|
|
||||||
|
|
||||||
if (!$uploaded) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unzip the file
|
|
||||||
$zip = new ZipArchive();
|
|
||||||
|
|
||||||
if ($zip->open($file)) {
|
|
||||||
$zip->extractTo($temp_path2);
|
|
||||||
}
|
|
||||||
|
|
||||||
$zip->close();
|
|
||||||
|
|
||||||
// Delete zip file
|
|
||||||
File::delete($file);
|
|
||||||
|
|
||||||
if (!File::copyDirectory($temp_path2.'/crater', base_path())) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete temp directory
|
|
||||||
File::deleteDirectory($temp_path);
|
|
||||||
File::deleteDirectory($temp_path2);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
$file = $temp_path . '/upload.zip';
|
||||||
|
|
||||||
|
// Add content to the Zip file
|
||||||
|
$uploaded = is_int(file_put_contents($file, $data)) ? true : false;
|
||||||
|
|
||||||
|
if (!$uploaded) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unzip the file
|
||||||
|
$zip = new ZipArchive();
|
||||||
|
|
||||||
|
if ($zip->open($file)) {
|
||||||
|
$zip->extractTo($temp_path2);
|
||||||
|
}
|
||||||
|
|
||||||
|
$zip->close();
|
||||||
|
|
||||||
|
// Delete zip file
|
||||||
|
File::delete($file);
|
||||||
|
|
||||||
|
if (!File::copyDirectory($temp_path2.'/Crater', base_path())) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete temp directory
|
||||||
|
File::deleteDirectory($temp_path);
|
||||||
|
File::deleteDirectory($temp_path2);
|
||||||
|
|
||||||
if (!$isMinor) {
|
if (!$isMinor) {
|
||||||
event(new UpdateFinished($installed, $version));
|
event(new UpdateFinished($installed, $version));
|
||||||
}
|
}
|
||||||
@ -88,6 +89,13 @@ class Updater
|
|||||||
'data' => []
|
'data' => []
|
||||||
];
|
];
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
|
|
||||||
|
if (File::isDirectory($temp_path)) {
|
||||||
|
// Delete temp directory
|
||||||
|
File::deleteDirectory($temp_path);
|
||||||
|
File::deleteDirectory($temp_path2);
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'success' => false,
|
'success' => false,
|
||||||
'error' => 'Update error',
|
'error' => 'Update error',
|
||||||
|
|||||||
@ -27,6 +27,7 @@
|
|||||||
:upload-handler="cropperHandler"
|
:upload-handler="cropperHandler"
|
||||||
trigger="#pick-avatar"
|
trigger="#pick-avatar"
|
||||||
@changed="setFileObject"
|
@changed="setFileObject"
|
||||||
|
@error="hadleUploadError"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -177,14 +178,14 @@ export default {
|
|||||||
},
|
},
|
||||||
isFetchingData: false,
|
isFetchingData: false,
|
||||||
formData: {
|
formData: {
|
||||||
name: '',
|
name: null,
|
||||||
logo: null,
|
logo: '',
|
||||||
email: '',
|
email: '',
|
||||||
phone: null,
|
phone: '',
|
||||||
zip: null,
|
zip: '',
|
||||||
address_street_1: null,
|
address_street_1: '',
|
||||||
address_street_2: null,
|
address_street_2: '',
|
||||||
website: null,
|
website: '',
|
||||||
country_id: null,
|
country_id: null,
|
||||||
state_id: '',
|
state_id: '',
|
||||||
city_id: ''
|
city_id: ''
|
||||||
@ -286,6 +287,9 @@ export default {
|
|||||||
setFileObject (file) {
|
setFileObject (file) {
|
||||||
this.fileObject = file
|
this.fileObject = file
|
||||||
},
|
},
|
||||||
|
hadleUploadError (message, type, xhr) {
|
||||||
|
window.toastr['error']('Oops! Something went wrong...')
|
||||||
|
},
|
||||||
async setInitialData () {
|
async setInitialData () {
|
||||||
let response = await this.loadData()
|
let response = await this.loadData()
|
||||||
this.isFetchingData = true
|
this.isFetchingData = true
|
||||||
@ -314,15 +318,23 @@ export default {
|
|||||||
data.append('country_id', this.formData.country_id)
|
data.append('country_id', this.formData.country_id)
|
||||||
data.append('zip', this.formData.zip)
|
data.append('zip', this.formData.zip)
|
||||||
data.append('phone', this.formData.phone)
|
data.append('phone', this.formData.phone)
|
||||||
if (this.fileObject) {
|
|
||||||
data.append('logo', this.fileObject)
|
|
||||||
}
|
|
||||||
let response = await this.editCompany(data)
|
let response = await this.editCompany(data)
|
||||||
if (response.data.success) {
|
if (response.data.success) {
|
||||||
|
this.isLoading = false
|
||||||
|
if (this.fileObject && this.previewLogo) {
|
||||||
|
let logoData = new FormData()
|
||||||
|
logoData.append('company_logo', JSON.stringify({
|
||||||
|
name: this.fileObject.name,
|
||||||
|
data: this.previewLogo
|
||||||
|
}))
|
||||||
|
await axios.post('/api/settings/company/upload-logo', logoData)
|
||||||
|
}
|
||||||
this.isLoading = false
|
this.isLoading = false
|
||||||
window.toastr['success'](this.$t('settings.company_info.updated_message'))
|
window.toastr['success'](this.$t('settings.company_info.updated_message'))
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
this.isLoading = false
|
||||||
window.toastr['error'](response.data.error)
|
window.toastr['error'](response.data.error)
|
||||||
return true
|
return true
|
||||||
},
|
},
|
||||||
|
|||||||
@ -22,6 +22,7 @@
|
|||||||
:upload-handler="cropperHandler"
|
:upload-handler="cropperHandler"
|
||||||
trigger="#pick-avatar"
|
trigger="#pick-avatar"
|
||||||
@changed="setFileObject"
|
@changed="setFileObject"
|
||||||
|
@error="hadleUploadError"
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div class="row">
|
<div class="row">
|
||||||
@ -256,30 +257,33 @@ export default {
|
|||||||
setFileObject (file) {
|
setFileObject (file) {
|
||||||
this.fileObject = file
|
this.fileObject = file
|
||||||
},
|
},
|
||||||
|
hadleUploadError (message, type, xhr) {
|
||||||
|
window.toastr['error']('Oops! Something went wrong...')
|
||||||
|
},
|
||||||
async next () {
|
async next () {
|
||||||
this.$v.companyData.$touch()
|
this.$v.companyData.$touch()
|
||||||
if (this.$v.companyData.$invalid) {
|
if (this.$v.companyData.$invalid) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
this.loading = true
|
this.loading = true
|
||||||
let data = new FormData()
|
let response = await window.axios.post('/api/admin/onboarding/company', this.companyData)
|
||||||
data.append('logo', this.fileObject)
|
|
||||||
data.append('name', this.companyData.name)
|
|
||||||
data.append('address_street_1', this.companyData.address_street_1)
|
|
||||||
data.append('address_street_2', this.companyData.address_street_2)
|
|
||||||
data.append('city_id', this.companyData.city_id)
|
|
||||||
data.append('state_id', this.companyData.state_id)
|
|
||||||
data.append('country_id', this.companyData.country_id)
|
|
||||||
data.append('zip', this.companyData.zip)
|
|
||||||
data.append('phone', this.companyData.phone)
|
|
||||||
|
|
||||||
let response = await window.axios.post('/api/admin/onboarding/company', data, {
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'multipart/form-data'
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
if (response.data) {
|
if (response.data) {
|
||||||
|
if (this.fileObject && this.previewLogo) {
|
||||||
|
let logoData = new FormData()
|
||||||
|
logoData.append('company_logo', JSON.stringify({
|
||||||
|
name: this.fileObject.name,
|
||||||
|
data: this.previewLogo
|
||||||
|
}))
|
||||||
|
|
||||||
|
await axios.post('/api/admin/onboarding/company/upload-logo', logoData, {
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'multipart/form-data',
|
||||||
|
'company': response.data.user.company.id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
this.$emit('next')
|
this.$emit('next')
|
||||||
this.loading = false
|
this.loading = false
|
||||||
}
|
}
|
||||||
|
|||||||
5
resources/assets/sass/base.scss
vendored
5
resources/assets/sass/base.scss
vendored
@ -115,3 +115,8 @@ code, .code {
|
|||||||
.swal-icon--custom {
|
.swal-icon--custom {
|
||||||
height: 70px !important;
|
height: 70px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.avatar-cropper-btn:hover {
|
||||||
|
background-color: $ls-color-primary !important;
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
|||||||
@ -101,6 +101,11 @@ Route::group(['middleware' => 'redirect-if-installed'], function () {
|
|||||||
'uses' => 'OnboardingController@adminCompany'
|
'uses' => 'OnboardingController@adminCompany'
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
Route::post('/admin/onboarding/company/upload-logo', [
|
||||||
|
'as' => 'upload.admin.company.logo',
|
||||||
|
'uses' => 'CompanyController@uploadCompanyLogo'
|
||||||
|
]);
|
||||||
|
|
||||||
Route::post('/admin/onboarding/settings', [
|
Route::post('/admin/onboarding/settings', [
|
||||||
'as' => 'admin.settings',
|
'as' => 'admin.settings',
|
||||||
'uses' => 'OnboardingController@companySettings'
|
'uses' => 'OnboardingController@companySettings'
|
||||||
|
|||||||
Reference in New Issue
Block a user