Wizard files added

This commit is contained in:
cuneytsenturk 2018-10-23 18:47:55 +03:00
parent 82a9b7dc8c
commit 97f43a0930
33 changed files with 1335 additions and 15 deletions

View File

@ -79,6 +79,11 @@ class Login extends Controller
return redirect($path); return redirect($path);
} }
// Check wizard
if (!setting('general.wizard', false)) {
return redirect('wizard');
}
return redirect('/'); return redirect('/');
} }

View File

@ -0,0 +1,73 @@
<?php
namespace App\Http\Controllers\Wizard;
use Illuminate\Routing\Controller;
use App\Models\Common\Company;
class Companies extends Controller
{
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function edit()
{
if (setting(setting('general.wizard', false))) {
return redirect('/');
}
$company = Company::find(session('company_id'));
$company->setSettings();
return view('wizard.companies.edit', compact('company', 'currencies'));
}
/**
* Update the specified resource in storage.
*
* @param Company $company
* @param Request $request
*
* @return Response
*/
public function update(Company $company, Request $request)
{
// Update company
$company->update($request->input());
// Get the company settings
setting()->forgetAll();
setting()->setExtraColumns(['company_id' => $company->id]);
setting()->load(true);
// Update settings
setting()->set('general.company_name', $request->get('company_name'));
setting()->set('general.company_email', $request->get('company_email'));
setting()->set('general.company_address', $request->get('company_address'));
if ($request->file('company_logo')) {
$company_logo = $this->getMedia($request->file('company_logo'), 'settings', $company->id);
if ($company_logo) {
$company->attachMedia($company_logo, 'company_logo');
setting()->set('general.company_logo', $company_logo->id);
}
}
setting()->set('general.default_payment_method', 'offlinepayment.cash.1');
setting()->set('general.default_currency', $request->get('default_currency'));
setting()->save();
// Redirect
$message = trans('messages.success.updated', ['type' => trans_choice('general.companies', 1)]);
flash($message)->success();
return redirect('common/companies');
}
}

View File

@ -0,0 +1,96 @@
<?php
namespace App\Http\Controllers\Wizard;
use Akaunting\Money\Currency as MoneyCurrency;
use App\Http\Controllers\Controller;
use App\Http\Requests\Setting\Currency as Request;
use App\Models\Banking\Account;
use App\Models\Setting\Currency;
class Currencies extends Controller
{
/**
* Show the form for editing the specified resource.
*
* @param Currency $currency
*
* @return Response
*/
public function edit(Currency $currency)
{
// Get current currencies
$current = Currency::pluck('code')->toArray();
// Prepare codes
$codes = array();
$currencies = MoneyCurrency::getCurrencies();
foreach ($currencies as $key => $item) {
// Don't show if already available
if (($key != $currency->code) && in_array($key, $current)) {
continue;
}
$codes[$key] = $key;
}
// Set default currency
$currency->default_currency = ($currency->code == setting('general.default_currency')) ? 1 : 0;
return view('settings.currencies.edit', compact('currency', 'codes'));
}
/**
* Update the specified resource in storage.
*
* @param Currency $currency
* @param Request $request
*
* @return Response
*/
public function update(Currency $currency, Request $request)
{
// Check if we can disable or change the code
if (!$request['enabled'] || ($currency->code != $request['code'])) {
$relationships = $this->countRelationships($currency, [
'accounts' => 'accounts',
'customers' => 'customers',
'invoices' => 'invoices',
'revenues' => 'revenues',
'bills' => 'bills',
'payments' => 'payments',
]);
if ($currency->code == setting('general.default_currency')) {
$relationships[] = strtolower(trans_choice('general.companies', 1));
}
}
if (empty($relationships)) {
// Force the rate to be 1 for default currency
if ($request['default_currency']) {
$request['rate'] = '1';
}
$currency->update($request->all());
// Update default currency setting
if ($request['default_currency']) {
setting()->set('general.default_currency', $request['code']);
setting()->save();
}
$message = trans('messages.success.updated', ['type' => trans_choice('general.currencies', 1)]);
flash($message)->success();
return redirect('settings/currencies');
} else {
$message = trans('messages.warning.disabled', ['name' => $currency->name, 'text' => implode(', ', $relationships)]);
flash($message)->warning();
return redirect('settings/currencies/' . $currency->id . '/edit');
}
}
}

View File

@ -0,0 +1,73 @@
<?php
namespace App\Http\Controllers\Wizard;
use Illuminate\Routing\Controller;
use App\Models\Common\Company;
class Finish extends Controller
{
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function edit()
{
if (setting(setting('general.wizard', false))) {
return redirect('/');
}
$company = Company::find(session('company_id'));
$company->setSettings();
return view('wizard.companies.edit', compact('company', 'currencies'));
}
/**
* Update the specified resource in storage.
*
* @param Company $company
* @param Request $request
*
* @return Response
*/
public function update(Company $company, Request $request)
{
// Update company
$company->update($request->input());
// Get the company settings
setting()->forgetAll();
setting()->setExtraColumns(['company_id' => $company->id]);
setting()->load(true);
// Update settings
setting()->set('general.company_name', $request->get('company_name'));
setting()->set('general.company_email', $request->get('company_email'));
setting()->set('general.company_address', $request->get('company_address'));
if ($request->file('company_logo')) {
$company_logo = $this->getMedia($request->file('company_logo'), 'settings', $company->id);
if ($company_logo) {
$company->attachMedia($company_logo, 'company_logo');
setting()->set('general.company_logo', $company_logo->id);
}
}
setting()->set('general.default_payment_method', 'offlinepayment.cash.1');
setting()->set('general.default_currency', $request->get('default_currency'));
setting()->save();
// Redirect
$message = trans('messages.success.updated', ['type' => trans_choice('general.companies', 1)]);
flash($message)->success();
return redirect('common/companies');
}
}

View File

@ -0,0 +1,125 @@
<?php
namespace App\Http\Controllers\Wizard;
use App\Http\Controllers\Controller;
use App\Http\Requests\Setting\Tax as Request;
use App\Models\Setting\Tax;
class Taxes extends Controller
{
/**
* Store a newly created resource in storage.
*
* @param Request $request
*
* @return Response
*/
public function store(Request $request)
{
Tax::create($request->all());
$message = trans('messages.success.added', ['type' => trans_choice('general.tax_rates', 1)]);
flash($message)->success();
return redirect('settings/taxes');
}
/**
* Show the form for editing the specified resource.
*
* @param Tax $tax
*
* @return Response
*/
public function edit(Tax $tax)
{
return view('settings.taxes.edit', compact('tax'));
}
/**
* Update the specified resource in storage.
*
* @param Tax $tax
* @param Request $request
*
* @return Response
*/
public function update(Tax $tax, Request $request)
{
$relationships = $this->countRelationships($tax, [
'items' => 'items',
'invoice_items' => 'invoices',
'bill_items' => 'bills',
]);
if (empty($relationships) || $request['enabled']) {
$tax->update($request->all());
$message = trans('messages.success.updated', ['type' => trans_choice('general.tax_rates', 1)]);
flash($message)->success();
return redirect('settings/taxes');
} else {
$message = trans('messages.warning.disabled', ['name' => $tax->name, 'text' => implode(', ', $relationships)]);
flash($message)->warning();
return redirect('settings/taxes/' . $tax->id . '/edit');
}
}
/**
* Enable the specified resource.
*
* @param Tax $tax
*
* @return Response
*/
public function enable(Tax $tax)
{
$tax->enabled = 1;
$tax->save();
$message = trans('messages.success.enabled', ['type' => trans_choice('general.tax_rates', 1)]);
flash($message)->success();
return redirect()->route('taxes.index');
}
/**
* Disable the specified resource.
*
* @param Tax $tax
*
* @return Response
*/
public function disable(Tax $tax)
{
$relationships = $this->countRelationships($tax, [
'items' => 'items',
'invoice_items' => 'invoices',
'bill_items' => 'bills',
]);
if (empty($relationships)) {
$tax->enabled = 0;
$tax->save();
$message = trans('messages.success.disabled', ['type' => trans_choice('general.tax_rates', 1)]);
flash($message)->success();
} else {
$message = trans('messages.warning.disabled', ['name' => $tax->name, 'text' => implode(', ', $relationships)]);
flash($message)->warning();
return redirect()->route('taxes.index');
}
return redirect()->route('taxes.index');
}
}

View File

@ -41,6 +41,13 @@ class Kernel extends HttpKernel
'company.currencies', 'company.currencies',
], ],
'wizard' => [
'web',
'language',
'auth',
'permission:read-admin-panel',
],
'admin' => [ 'admin' => [
'web', 'web',
'language', 'language',

View File

@ -31,7 +31,7 @@ class ViewComposerServiceProvider extends ServiceProvider
// Add notifications to header // Add notifications to header
View::composer( View::composer(
['partials.admin.header', 'partials.customer.header'], 'App\Http\ViewComposers\Header' ['partials.wizard.header', 'partials.admin.header', 'partials.customer.header'], 'App\Http\ViewComposers\Header'
); );
// Add limits to index // Add limits to index

View File

@ -157,7 +157,7 @@ class Installer
try { try {
DB::connection('install_test')->getPdo(); DB::connection('install_test')->getPdo();
} catch (\Exception $e) {; } catch (\Exception $e) {
return false; return false;
} }

45
public/css/app.css vendored
View File

@ -773,3 +773,48 @@ input[type="number"] {
#items .select2-search__field { #items .select2-search__field {
padding-left: 15px; padding-left: 15px;
} }
.stepwizard-step p {
margin-top: 0px;
color:#666;
}
.stepwizard-row {
display: table-row;
}
.stepwizard {
display: table;
width: 100%;
position: relative;
}
.stepwizard-step button[disabled] {
/*opacity: 1 !important;
filter: alpha(opacity=100) !important;*/
}
.stepwizard .btn.disabled, .stepwizard .btn[disabled], .stepwizard fieldset[disabled] .btn {
opacity:1 !important;
color:#bbb;
}
.stepwizard-row:before {
top: 14px;
bottom: 0;
position: absolute;
content:" ";
width: 100%;
height: 1px;
background-color: #ccc;
z-index: 0;
}
.stepwizard-step {
display: table-cell;
text-align: center;
position: relative;
}
.btn-circle {
width: 30px;
height: 30px;
text-align: center;
padding: 6px 0;
font-size: 12px;
line-height: 1.428571429;
border-radius: 15px;
}

4
public/js/app.js vendored
View File

@ -198,7 +198,9 @@ $(document).ready(function () {
return true; return true;
}); });
$('.input-group-invoice-text select').select2(); if (document.getElementsByClassName('input-group-invoice-text').length) {
$('.input-group-invoice-text select').select2();
}
}); });
function confirmDelete(form_id, title, message, button_cancel, button_delete) { function confirmDelete(form_id, title, message, button_cancel, button_delete) {

View File

@ -0,0 +1,18 @@
<html lang="{{ setting('general.default_locale') }}">
@include('partials.wizard.head')
<body class="hold-transition {{ setting('general.admin_theme', 'skin-green-light') }} sidebar-mini fixed">
@stack('body_start')
<!-- Site wrapper -->
<div class="wrapper">
@include('partials.wizard.header')
@include('partials.wizard.content')
@include('partials.wizard.footer')
</div>
@stack('body_end')
</body>
</html>

View File

@ -0,0 +1,39 @@
@stack('content_start')
<!-- Content Wrapper. Contains page content -->
<div class="content-wrapper no-margin" style="">
@stack('content_wrapper_start')
<!-- Content Header (Page header) -->
<section class="content-header content-center">
@stack('content_header_start')
<h1>
@yield('title')
@yield('new_button')
</h1>
@stack('content_header_end')
</section>
<!-- Main content -->
<section class="content content-center">
@include('flash::message')
@stack('content_content_start')
@yield('content')
@stack('content_content_end')
</section>
<!-- /.content -->
@stack('content_wrapper_end')
</div>
<!-- /.content-wrapper -->
<script type="text/javascript">
$('div.alert').not('.alert-important').delay(3000).fadeOut(350);
</script>
@stack('content_end')

View File

@ -0,0 +1,10 @@
@stack('footer_start')
<footer class="main-footer">
<div class="pull-right hidden-xs">
<b>{{ trans('footer.version') }}</b> {{ version('short') }}
</div>
<strong>{{ trans('footer.powered') }}</strong>: <a href="{{ trans('footer.link') }}" target="_blank">{{ trans('footer.software') }}</a>
</footer>
@stack('footer_end')

View File

@ -0,0 +1,67 @@
<head>
@stack('head_start')
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<!-- Tell the browser to be responsive to screen width -->
<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
<title>@yield('title') - @setting('general.company_name')</title>
<!-- Bootstrap 3.3.6 -->
<link rel="stylesheet" href="{{ asset('vendor/almasaeed2010/adminlte/bootstrap/css/bootstrap.min.css') }}">
<!-- Font Awesome -->
<link rel="stylesheet" href="{{ asset('public/css/font-awesome.min.css') }}">
<!-- Ionicons -->
<link rel="stylesheet" href="{{ asset('public/css/ionicons.min.css') }}">
<!-- Theme style -->
<link rel="stylesheet" href="{{ asset('vendor/almasaeed2010/adminlte/dist/css/AdminLTE.min.css') }}">
<!-- AdminLTE Skins -->
@if (setting('general.admin_theme', 'skin-green-light') == 'skin-green-light')
<link rel="stylesheet" href="{{ asset('vendor/almasaeed2010/adminlte/dist/css/skins/skin-green-light.min.css') }}">
@else
<link rel="stylesheet" href="{{ asset('vendor/almasaeed2010/adminlte/dist/css/skins/skin-black.min.css') }}">
<link rel="stylesheet" href="{{ asset('public/css/skin-black.css?v=' . version('short')) }}">
@endif
<!-- Select2 -->
<link rel="stylesheet" href="{{ asset('vendor/almasaeed2010/adminlte/plugins/select2/select2.min.css') }}">
<!-- App style -->
<link rel="stylesheet" href="{{ asset('public/css/app.css?v=' . version('short')) }}">
<link rel="stylesheet" href="{{ asset('public/css/akaunting-green.css?v=' . version('short')) }}">
<link rel="shortcut icon" href="{{ asset('public/img/favicon.ico') }}">
@stack('css')
@stack('stylesheet')
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<!-- jQuery 2.2.3 -->
<script src="{{ asset('vendor/almasaeed2010/adminlte/plugins/jQuery/jquery-2.2.3.min.js') }}"></script>
<!-- Bootstrap 3.3.6 -->
<script src="{{ asset('vendor/almasaeed2010/adminlte/bootstrap/js/bootstrap.min.js') }}"></script>
<!-- SlimScroll -->
<script src="{{ asset('vendor/almasaeed2010/adminlte/plugins/slimScroll/jquery.slimscroll.min.js') }}"></script>
<!-- FastClick -->
<script src="{{ asset('vendor/almasaeed2010/adminlte/plugins/fastclick/fastclick.js') }}"></script>
<!-- AdminLTE App -->
<script src="{{ asset('vendor/almasaeed2010/adminlte/dist/js/app.min.js') }}"></script>
<!-- Select2 -->
<script src="{{ asset('vendor/almasaeed2010/adminlte/plugins/select2/select2.min.js') }}"></script>
<!-- Mask Money -->
<script src="{{ asset('public/js/jquery/jquery.maskMoney.js') }}"></script>
<script src="{{ asset('public/js/app.js?v=' . version('short')) }}"></script>
@stack('js')
@stack('scripts')
@stack('head_end')
</head>

View File

@ -0,0 +1,85 @@
@stack('header_start')
<header class="main-header">
<!-- Logo -->
<a href="{{ url('/') }}" class="logo">
@if (setting('general.admin_theme', 'skin-green-light') == 'skin-green-light')
<!-- mini logo for sidebar mini 50x50 pixels -->
<span class="logo-mini"><img src="{{ asset('public/img/akaunting-logo-white.png') }}" class="logo-image-mini" width="25" alt="Akaunting Logo"></span>
<!-- logo for regular state and mobile devices -->
<span class="logo-lg"><img src="{{ asset('public/img/akaunting-logo-white.png') }}" class="logo-image-lg" width="25" alt="Akaunting Logo"> <b>Akaunting</b></span>
@else
<!-- mini logo for sidebar mini 50x50 pixels -->
<span class="logo-mini"><img src="{{ asset('public/img/akaunting-logo-green.png') }}" class="logo-image-mini" width="25" alt="Akaunting Logo"></span>
<!-- logo for regular state and mobile devices -->
<span class="logo-lg"><img src="{{ asset('public/img/akaunting-logo-green.png') }}" class="logo-image-lg" width="25" alt="Akaunting Logo"> <b>Akaunting</b></span>
@endif
</a>
<!-- Header Navbar: style can be found in header.less -->
<nav class="navbar navbar-static-top">
@stack('header_navbar_left')
<div class="navbar-custom-menu">
<ul class="nav navbar-nav">
@stack('header_navbar_right')
<!-- Updates: style can be found in dropdown.less -->
<li class="hidden-xs">
<a href="{{ url(trans('header.docs_link')) }}" target="_blank" title="{{ trans('general.help') }}">
<i class="fa fa-life-ring"></i>
</a>
</li>
<!-- User Account: style can be found in dropdown.less -->
<li class="dropdown user user-menu">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
@if ($user->picture)
@if (setting('general.use_gravatar', '0') == '1')
<img src="{{ $user->picture }}" class="user-image" alt="User Image">
@else
<img src="{{ Storage::url($user->picture->id) }}" class="user-image" alt="User Image">
@endif
@else
<i class="fa fa-user-o"></i>
@endif
@if (!empty($user->name))
<span class="hidden-xs">{{ $user->name }}</span>
@endif
</a>
<ul class="dropdown-menu">
<!-- User image -->
<li class="user-header">
@if ($user->picture)
@if (setting('general.use_gravatar', '0') == '1')
<img src="{{ $user->picture }}" class="img-circle" alt="User Image">
@else
<img src="{{ Storage::url($user->picture->id) }}" class="img-circle" alt="User Image">
@endif
@else
<i class="fa fa-4 fa-user-o" style="color: #fff; font-size: 7em;"></i>
@endif
<p>
@if (!empty($user->name))
{{ $user->name }}
@endif
<small>{{ trans('header.last_login', ['time' => $user->last_logged_in_at]) }}</small>
</p>
</li>
<!-- Menu Footer-->
<li class="user-footer">
@permission('read-auth-profile')
<div class="pull-left">
<a href="{{ url('auth/users/' . $user->id . '/edit') }}" class="btn btn-default btn-flat">{{ trans('auth.profile') }}</a>
</div>
@endpermission
<div class="pull-right">
<a href="{{ url('auth/logout') }}" class="btn btn-default btn-flat">{{ trans('auth.logout') }}</a>
</div>
</li>
</ul>
</li>
</ul>
</div>
</nav>
</header>
@stack('header_end')

View File

@ -0,0 +1,16 @@
@stack('pagination_start')
@if ($items->firstItem())
<div class="pull-left" style="margin-top: 7px;">
<small>{{ trans('pagination.showing', ['first' => $items->firstItem(), 'last' => $items->lastItem(), 'total' => $items->total(), 'type' => strtolower(trans_choice('general.' . $type, 2))]) }}</small>
</div>
<div class="pull-right">
{!! $items->appends(request()->except('page'))->links() !!}
</div>
@else
<div class="pull-left">
<small>{{ trans('general.no_records') }}</small>
</div>
@endif
@stack('pagination_end')

View File

@ -39,6 +39,8 @@
{{ Form::textareaGroup('company_address', trans('settings.company.address')) }} {{ Form::textareaGroup('company_address', trans('settings.company.address')) }}
{{ Form::fileGroup('company_logo', trans('settings.company.logo')) }} {{ Form::fileGroup('company_logo', trans('settings.company.logo')) }}
{!! Form::hidden('wizard', null, ['id' => 'wizard']) !!}
</div> </div>
<div class="tab-pane tab-margin" id="localisation"> <div class="tab-pane tab-margin" id="localisation">

View File

@ -0,0 +1,160 @@
@extends('layouts.wizard')
@section('title', trans('general.wizard'))
@section('content')
<!-- Default box -->
<div class="box box-success">
{!! Form::model($company, ['method' => 'PATCH', 'files' => true, 'url' => ['wizard/companies', $company->id], 'role' => 'form', 'class' => 'form-loading-button']) !!}
<div class="box-header">
<div class="stepwizard">
<div class="stepwizard-row setup-panel">
<div class="stepwizard-step col-xs-3">
<a href="#step-1" type="button" class="btn btn-success btn-circle">1</a>
<p><small>{{ trans_choice('general.companies', 1) }}</small></p>
</div>
<div class="stepwizard-step col-xs-3">
<a href="#step-2" type="button" class="btn btn-default btn-circle" disabled="disabled">2</a>
<p><small>{{ trans_choice('general.currencies', 2) }}</small></p>
</div>
<div class="stepwizard-step col-xs-3">
<a href="#step-3" type="button" class="btn btn-default btn-circle" disabled="disabled">3</a>
<p><small>{{ trans_choice('general.taxes', 2) }}</small></p>
</div>
<div class="stepwizard-step col-xs-3">
<a href="#step-4" type="button" class="btn btn-default btn-circle" disabled="disabled">4</a>
<p><small>{{ trans_choice('general.companies', 1) }}</small></p>
</div>
</div>
</div>
</div>
<div class="box-body">
<div class="col-md-12 {!! (!setting('general.api_token', null)) ?: 'hidden' !!}">
<div class="form-group required {{ $errors->has('api_token') ? 'has-error' : ''}}">
{!! Form::label('sale_price', trans('modules.api_token'), ['class' => 'control-label']) !!}
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key"></i></span>
{!! Form::text('api_token', setting('general.api_token', null), ['class' => 'form-control', 'required' => 'required', 'placeholder' => trans('general.form.enter', ['field' => trans('modules.api_token')])]) !!}
</div>
{!! $errors->first('api_token', '<p class="help-block">:message</p>') !!}
</div>
<p>
{!! trans('modules.token_link') !!}
</p>
</div>
{{ Form::textGroup('company_tax_number', trans('general.tax_number'), 'percent', []) }}
{{ Form::textGroup('company_phone', trans('settings.company.phone'), 'phone', []) }}
{{ Form::textareaGroup('company_address', trans('settings.company.address')) }}
{{ Form::fileGroup('company_logo', trans('settings.company.logo')) }}
</div>
<!-- /.box-body -->
<div class="box-footer">
{{ Form::saveButtons('wizard/companies') }}
{!! Form::button('<span class="fa fa-share"></span> &nbsp;' . trans('general.skip'), ['type' => 'button', 'class' => 'btn btn-default pull-right', 'data-loading-text' => trans('general.loading')]) !!}
</div>
<!-- /.box-footer -->
{!! Form::close() !!}
</div>
@endsection
@push('js')
<script src="{{ asset('public/js/bootstrap-fancyfile.js') }}"></script>
@endpush
@push('css')
<link rel="stylesheet" href="{{ asset('public/css/bootstrap-fancyfile.css') }}">
@endpush
@push('scripts')
<script type="text/javascript">
var text_yes = '{{ trans('general.yes') }}';
var text_no = '{{ trans('general.no') }}';
$(document).ready(function () {
var navListItems = $('div.setup-panel div a'),
allWells = $('.setup-content'),
allNextBtn = $('.nextBtn');
allWells.hide();
navListItems.click(function (e) {
e.preventDefault();
var $target = $($(this).attr('href')),
$item = $(this);
if (!$item.hasClass('disabled')) {
navListItems.removeClass('btn-success').addClass('btn-default');
$item.addClass('btn-success');
allWells.hide();
$target.show();
$target.find('input:eq(0)').focus();
}
});
allNextBtn.click(function () {
var curStep = $(this).closest(".setup-content"),
curStepBtn = curStep.attr("id"),
nextStepWizard = $('div.setup-panel div a[href="#' + curStepBtn + '"]').parent().next().children("a"),
curInputs = curStep.find("input[type='text'],input[type='url']"),
isValid = true;
$(".form-group").removeClass("has-error");
for (var i = 0; i < curInputs.length; i++) {
if (!curInputs[i].validity.valid) {
isValid = false;
$(curInputs[i]).closest(".form-group").addClass("has-error");
}
}
if (isValid) nextStepWizard.removeAttr('disabled').trigger('click');
});
$('div.setup-panel div a.btn-success').trigger('click');
});
$(document).ready(function() {
$('#company_logo').fancyfile({
text : '{{ trans('general.form.select.file') }}',
style : 'btn-default',
@if($company->company_logo)
placeholder : '{{ $company->company_logo->basename }}',
@else
placeholder : '{{ trans('general.form.no_file_selected') }}',
@endif
});
@if($company->company_logo)
company_logo_html = '<span class="company_logo">';
company_logo_html += ' <a href="{{ url('uploads/' . $company['company_logo']->id . '/download') }}">';
company_logo_html += ' <span id="download-company_logo" class="text-primary">';
company_logo_html += ' <i class="fa fa-file-{{ $company->company_logo->aggregate_type }}-o"></i> {{ $company->company_logo->basename }}';
company_logo_html += ' </span>';
company_logo_html += ' </a>';
company_logo_html += ' {!! Form::open(['id' => 'company_logo-' . $company->company_logo->id, 'method' => 'DELETE', 'url' => [url('uploads/' . $company->company_logo->id)], 'style' => 'display:inline']) !!}';
company_logo_html += ' <a id="remove-company_logo" href="javascript:void();">';
company_logo_html += ' <span class="text-danger"><i class="fa fa fa-times"></i></span>';
company_logo_html += ' </a>';
company_logo_html += ' <input type="hidden" name="page" value="setting" />';
company_logo_html += ' <input type="hidden" name="key" value="general.company_logo" />';
company_logo_html += ' <input type="hidden" name="value" value="{{ $company->company_logo->id }}" />';
company_logo_html += ' {!! Form::close() !!}';
company_logo_html += '</span>';
$('#company .fancy-file .fake-file').append(company_logo_html);
$(document).on('click', '#remove-company_logo', function (e) {
confirmDelete("#company_logo-{!! $company->company_logo->id !!}", "{!! trans('general.attachment') !!}", "{!! trans('general.delete_confirm', ['name' => '<strong>' . $company->company_logo->basename . '</strong>', 'type' => strtolower(trans('general.attachment'))]) !!}", "{!! trans('general.cancel') !!}", "{!! trans('general.delete') !!}");
});
@endif
});
</script>
@endpush

View File

@ -0,0 +1,160 @@
@extends('layouts.wizard')
@section('title', trans('general.wizard'))
@section('content')
<!-- Default box -->
<div class="box box-success">
{!! Form::model($company, ['method' => 'PATCH', 'files' => true, 'url' => ['wizard/companies', $company->id], 'role' => 'form', 'class' => 'form-loading-button']) !!}
<div class="box-header">
<div class="stepwizard">
<div class="stepwizard-row setup-panel">
<div class="stepwizard-step col-xs-3">
<a href="#step-1" type="button" class="btn btn-success btn-circle">1</a>
<p><small>{{ trans_choice('general.companies', 1) }}</small></p>
</div>
<div class="stepwizard-step col-xs-3">
<a href="#step-2" type="button" class="btn btn-default btn-circle" disabled="disabled">2</a>
<p><small>{{ trans_choice('general.currencies', 2) }}</small></p>
</div>
<div class="stepwizard-step col-xs-3">
<a href="#step-3" type="button" class="btn btn-default btn-circle" disabled="disabled">3</a>
<p><small>{{ trans_choice('general.taxes', 2) }}</small></p>
</div>
<div class="stepwizard-step col-xs-3">
<a href="#step-4" type="button" class="btn btn-default btn-circle" disabled="disabled">4</a>
<p><small>{{ trans_choice('general.companies', 1) }}</small></p>
</div>
</div>
</div>
</div>
<div class="box-body">
<div class="col-md-12 {!! (!setting('general.api_token', null)) ?: 'hidden' !!}">
<div class="form-group required {{ $errors->has('api_token') ? 'has-error' : ''}}">
{!! Form::label('sale_price', trans('modules.api_token'), ['class' => 'control-label']) !!}
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key"></i></span>
{!! Form::text('api_token', setting('general.api_token', null), ['class' => 'form-control', 'required' => 'required', 'placeholder' => trans('general.form.enter', ['field' => trans('modules.api_token')])]) !!}
</div>
{!! $errors->first('api_token', '<p class="help-block">:message</p>') !!}
</div>
<p>
{!! trans('modules.token_link') !!}
</p>
</div>
{{ Form::textGroup('company_tax_number', trans('general.tax_number'), 'percent', []) }}
{{ Form::textGroup('company_phone', trans('settings.company.phone'), 'phone', []) }}
{{ Form::textareaGroup('company_address', trans('settings.company.address')) }}
{{ Form::fileGroup('company_logo', trans('settings.company.logo')) }}
</div>
<!-- /.box-body -->
<div class="box-footer">
{{ Form::saveButtons('wizard/companies') }}
{!! Form::button('<span class="fa fa-share"></span> &nbsp;' . trans('general.skip'), ['type' => 'button', 'class' => 'btn btn-default pull-right', 'data-loading-text' => trans('general.loading')]) !!}
</div>
<!-- /.box-footer -->
{!! Form::close() !!}
</div>
@endsection
@push('js')
<script src="{{ asset('public/js/bootstrap-fancyfile.js') }}"></script>
@endpush
@push('css')
<link rel="stylesheet" href="{{ asset('public/css/bootstrap-fancyfile.css') }}">
@endpush
@push('scripts')
<script type="text/javascript">
var text_yes = '{{ trans('general.yes') }}';
var text_no = '{{ trans('general.no') }}';
$(document).ready(function () {
var navListItems = $('div.setup-panel div a'),
allWells = $('.setup-content'),
allNextBtn = $('.nextBtn');
allWells.hide();
navListItems.click(function (e) {
e.preventDefault();
var $target = $($(this).attr('href')),
$item = $(this);
if (!$item.hasClass('disabled')) {
navListItems.removeClass('btn-success').addClass('btn-default');
$item.addClass('btn-success');
allWells.hide();
$target.show();
$target.find('input:eq(0)').focus();
}
});
allNextBtn.click(function () {
var curStep = $(this).closest(".setup-content"),
curStepBtn = curStep.attr("id"),
nextStepWizard = $('div.setup-panel div a[href="#' + curStepBtn + '"]').parent().next().children("a"),
curInputs = curStep.find("input[type='text'],input[type='url']"),
isValid = true;
$(".form-group").removeClass("has-error");
for (var i = 0; i < curInputs.length; i++) {
if (!curInputs[i].validity.valid) {
isValid = false;
$(curInputs[i]).closest(".form-group").addClass("has-error");
}
}
if (isValid) nextStepWizard.removeAttr('disabled').trigger('click');
});
$('div.setup-panel div a.btn-success').trigger('click');
});
$(document).ready(function() {
$('#company_logo').fancyfile({
text : '{{ trans('general.form.select.file') }}',
style : 'btn-default',
@if($company->company_logo)
placeholder : '{{ $company->company_logo->basename }}',
@else
placeholder : '{{ trans('general.form.no_file_selected') }}',
@endif
});
@if($company->company_logo)
company_logo_html = '<span class="company_logo">';
company_logo_html += ' <a href="{{ url('uploads/' . $company['company_logo']->id . '/download') }}">';
company_logo_html += ' <span id="download-company_logo" class="text-primary">';
company_logo_html += ' <i class="fa fa-file-{{ $company->company_logo->aggregate_type }}-o"></i> {{ $company->company_logo->basename }}';
company_logo_html += ' </span>';
company_logo_html += ' </a>';
company_logo_html += ' {!! Form::open(['id' => 'company_logo-' . $company->company_logo->id, 'method' => 'DELETE', 'url' => [url('uploads/' . $company->company_logo->id)], 'style' => 'display:inline']) !!}';
company_logo_html += ' <a id="remove-company_logo" href="javascript:void();">';
company_logo_html += ' <span class="text-danger"><i class="fa fa fa-times"></i></span>';
company_logo_html += ' </a>';
company_logo_html += ' <input type="hidden" name="page" value="setting" />';
company_logo_html += ' <input type="hidden" name="key" value="general.company_logo" />';
company_logo_html += ' <input type="hidden" name="value" value="{{ $company->company_logo->id }}" />';
company_logo_html += ' {!! Form::close() !!}';
company_logo_html += '</span>';
$('#company .fancy-file .fake-file').append(company_logo_html);
$(document).on('click', '#remove-company_logo', function (e) {
confirmDelete("#company_logo-{!! $company->company_logo->id !!}", "{!! trans('general.attachment') !!}", "{!! trans('general.delete_confirm', ['name' => '<strong>' . $company->company_logo->basename . '</strong>', 'type' => strtolower(trans('general.attachment'))]) !!}", "{!! trans('general.cancel') !!}", "{!! trans('general.delete') !!}");
});
@endif
});
</script>
@endpush

View File

@ -0,0 +1,160 @@
@extends('layouts.wizard')
@section('title', trans('general.wizard'))
@section('content')
<!-- Default box -->
<div class="box box-success">
{!! Form::model($company, ['method' => 'PATCH', 'files' => true, 'url' => ['wizard/companies', $company->id], 'role' => 'form', 'class' => 'form-loading-button']) !!}
<div class="box-header">
<div class="stepwizard">
<div class="stepwizard-row setup-panel">
<div class="stepwizard-step col-xs-3">
<a href="#step-1" type="button" class="btn btn-success btn-circle">1</a>
<p><small>{{ trans_choice('general.companies', 1) }}</small></p>
</div>
<div class="stepwizard-step col-xs-3">
<a href="#step-2" type="button" class="btn btn-default btn-circle" disabled="disabled">2</a>
<p><small>{{ trans_choice('general.currencies', 2) }}</small></p>
</div>
<div class="stepwizard-step col-xs-3">
<a href="#step-3" type="button" class="btn btn-default btn-circle" disabled="disabled">3</a>
<p><small>{{ trans_choice('general.taxes', 2) }}</small></p>
</div>
<div class="stepwizard-step col-xs-3">
<a href="#step-4" type="button" class="btn btn-default btn-circle" disabled="disabled">4</a>
<p><small>{{ trans_choice('general.companies', 1) }}</small></p>
</div>
</div>
</div>
</div>
<div class="box-body">
<div class="col-md-12 {!! (!setting('general.api_token', null)) ?: 'hidden' !!}">
<div class="form-group required {{ $errors->has('api_token') ? 'has-error' : ''}}">
{!! Form::label('sale_price', trans('modules.api_token'), ['class' => 'control-label']) !!}
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key"></i></span>
{!! Form::text('api_token', setting('general.api_token', null), ['class' => 'form-control', 'required' => 'required', 'placeholder' => trans('general.form.enter', ['field' => trans('modules.api_token')])]) !!}
</div>
{!! $errors->first('api_token', '<p class="help-block">:message</p>') !!}
</div>
<p>
{!! trans('modules.token_link') !!}
</p>
</div>
{{ Form::textGroup('company_tax_number', trans('general.tax_number'), 'percent', []) }}
{{ Form::textGroup('company_phone', trans('settings.company.phone'), 'phone', []) }}
{{ Form::textareaGroup('company_address', trans('settings.company.address')) }}
{{ Form::fileGroup('company_logo', trans('settings.company.logo')) }}
</div>
<!-- /.box-body -->
<div class="box-footer">
{{ Form::saveButtons('wizard/companies') }}
{!! Form::button('<span class="fa fa-share"></span> &nbsp;' . trans('general.skip'), ['type' => 'button', 'class' => 'btn btn-default pull-right', 'data-loading-text' => trans('general.loading')]) !!}
</div>
<!-- /.box-footer -->
{!! Form::close() !!}
</div>
@endsection
@push('js')
<script src="{{ asset('public/js/bootstrap-fancyfile.js') }}"></script>
@endpush
@push('css')
<link rel="stylesheet" href="{{ asset('public/css/bootstrap-fancyfile.css') }}">
@endpush
@push('scripts')
<script type="text/javascript">
var text_yes = '{{ trans('general.yes') }}';
var text_no = '{{ trans('general.no') }}';
$(document).ready(function () {
var navListItems = $('div.setup-panel div a'),
allWells = $('.setup-content'),
allNextBtn = $('.nextBtn');
allWells.hide();
navListItems.click(function (e) {
e.preventDefault();
var $target = $($(this).attr('href')),
$item = $(this);
if (!$item.hasClass('disabled')) {
navListItems.removeClass('btn-success').addClass('btn-default');
$item.addClass('btn-success');
allWells.hide();
$target.show();
$target.find('input:eq(0)').focus();
}
});
allNextBtn.click(function () {
var curStep = $(this).closest(".setup-content"),
curStepBtn = curStep.attr("id"),
nextStepWizard = $('div.setup-panel div a[href="#' + curStepBtn + '"]').parent().next().children("a"),
curInputs = curStep.find("input[type='text'],input[type='url']"),
isValid = true;
$(".form-group").removeClass("has-error");
for (var i = 0; i < curInputs.length; i++) {
if (!curInputs[i].validity.valid) {
isValid = false;
$(curInputs[i]).closest(".form-group").addClass("has-error");
}
}
if (isValid) nextStepWizard.removeAttr('disabled').trigger('click');
});
$('div.setup-panel div a.btn-success').trigger('click');
});
$(document).ready(function() {
$('#company_logo').fancyfile({
text : '{{ trans('general.form.select.file') }}',
style : 'btn-default',
@if($company->company_logo)
placeholder : '{{ $company->company_logo->basename }}',
@else
placeholder : '{{ trans('general.form.no_file_selected') }}',
@endif
});
@if($company->company_logo)
company_logo_html = '<span class="company_logo">';
company_logo_html += ' <a href="{{ url('uploads/' . $company['company_logo']->id . '/download') }}">';
company_logo_html += ' <span id="download-company_logo" class="text-primary">';
company_logo_html += ' <i class="fa fa-file-{{ $company->company_logo->aggregate_type }}-o"></i> {{ $company->company_logo->basename }}';
company_logo_html += ' </span>';
company_logo_html += ' </a>';
company_logo_html += ' {!! Form::open(['id' => 'company_logo-' . $company->company_logo->id, 'method' => 'DELETE', 'url' => [url('uploads/' . $company->company_logo->id)], 'style' => 'display:inline']) !!}';
company_logo_html += ' <a id="remove-company_logo" href="javascript:void();">';
company_logo_html += ' <span class="text-danger"><i class="fa fa fa-times"></i></span>';
company_logo_html += ' </a>';
company_logo_html += ' <input type="hidden" name="page" value="setting" />';
company_logo_html += ' <input type="hidden" name="key" value="general.company_logo" />';
company_logo_html += ' <input type="hidden" name="value" value="{{ $company->company_logo->id }}" />';
company_logo_html += ' {!! Form::close() !!}';
company_logo_html += '</span>';
$('#company .fancy-file .fake-file').append(company_logo_html);
$(document).on('click', '#remove-company_logo', function (e) {
confirmDelete("#company_logo-{!! $company->company_logo->id !!}", "{!! trans('general.attachment') !!}", "{!! trans('general.delete_confirm', ['name' => '<strong>' . $company->company_logo->basename . '</strong>', 'type' => strtolower(trans('general.attachment'))]) !!}", "{!! trans('general.cancel') !!}", "{!! trans('general.delete') !!}");
});
@endif
});
</script>
@endpush

View File

@ -0,0 +1,160 @@
@extends('layouts.wizard')
@section('title', trans('general.wizard'))
@section('content')
<!-- Default box -->
<div class="box box-success">
{!! Form::model($company, ['method' => 'PATCH', 'files' => true, 'url' => ['wizard/companies', $company->id], 'role' => 'form', 'class' => 'form-loading-button']) !!}
<div class="box-header">
<div class="stepwizard">
<div class="stepwizard-row setup-panel">
<div class="stepwizard-step col-xs-3">
<a href="#step-1" type="button" class="btn btn-success btn-circle">1</a>
<p><small>{{ trans_choice('general.companies', 1) }}</small></p>
</div>
<div class="stepwizard-step col-xs-3">
<a href="#step-2" type="button" class="btn btn-default btn-circle" disabled="disabled">2</a>
<p><small>{{ trans_choice('general.currencies', 2) }}</small></p>
</div>
<div class="stepwizard-step col-xs-3">
<a href="#step-3" type="button" class="btn btn-default btn-circle" disabled="disabled">3</a>
<p><small>{{ trans_choice('general.taxes', 2) }}</small></p>
</div>
<div class="stepwizard-step col-xs-3">
<a href="#step-4" type="button" class="btn btn-default btn-circle" disabled="disabled">4</a>
<p><small>{{ trans_choice('general.companies', 1) }}</small></p>
</div>
</div>
</div>
</div>
<div class="box-body">
<div class="col-md-12 {!! (!setting('general.api_token', null)) ?: 'hidden' !!}">
<div class="form-group required {{ $errors->has('api_token') ? 'has-error' : ''}}">
{!! Form::label('sale_price', trans('modules.api_token'), ['class' => 'control-label']) !!}
<div class="input-group">
<span class="input-group-addon"><i class="fa fa-key"></i></span>
{!! Form::text('api_token', setting('general.api_token', null), ['class' => 'form-control', 'required' => 'required', 'placeholder' => trans('general.form.enter', ['field' => trans('modules.api_token')])]) !!}
</div>
{!! $errors->first('api_token', '<p class="help-block">:message</p>') !!}
</div>
<p>
{!! trans('modules.token_link') !!}
</p>
</div>
{{ Form::textGroup('company_tax_number', trans('general.tax_number'), 'percent', []) }}
{{ Form::textGroup('company_phone', trans('settings.company.phone'), 'phone', []) }}
{{ Form::textareaGroup('company_address', trans('settings.company.address')) }}
{{ Form::fileGroup('company_logo', trans('settings.company.logo')) }}
</div>
<!-- /.box-body -->
<div class="box-footer">
{{ Form::saveButtons('wizard/companies') }}
{!! Form::button('<span class="fa fa-share"></span> &nbsp;' . trans('general.skip'), ['type' => 'button', 'class' => 'btn btn-default pull-right', 'data-loading-text' => trans('general.loading')]) !!}
</div>
<!-- /.box-footer -->
{!! Form::close() !!}
</div>
@endsection
@push('js')
<script src="{{ asset('public/js/bootstrap-fancyfile.js') }}"></script>
@endpush
@push('css')
<link rel="stylesheet" href="{{ asset('public/css/bootstrap-fancyfile.css') }}">
@endpush
@push('scripts')
<script type="text/javascript">
var text_yes = '{{ trans('general.yes') }}';
var text_no = '{{ trans('general.no') }}';
$(document).ready(function () {
var navListItems = $('div.setup-panel div a'),
allWells = $('.setup-content'),
allNextBtn = $('.nextBtn');
allWells.hide();
navListItems.click(function (e) {
e.preventDefault();
var $target = $($(this).attr('href')),
$item = $(this);
if (!$item.hasClass('disabled')) {
navListItems.removeClass('btn-success').addClass('btn-default');
$item.addClass('btn-success');
allWells.hide();
$target.show();
$target.find('input:eq(0)').focus();
}
});
allNextBtn.click(function () {
var curStep = $(this).closest(".setup-content"),
curStepBtn = curStep.attr("id"),
nextStepWizard = $('div.setup-panel div a[href="#' + curStepBtn + '"]').parent().next().children("a"),
curInputs = curStep.find("input[type='text'],input[type='url']"),
isValid = true;
$(".form-group").removeClass("has-error");
for (var i = 0; i < curInputs.length; i++) {
if (!curInputs[i].validity.valid) {
isValid = false;
$(curInputs[i]).closest(".form-group").addClass("has-error");
}
}
if (isValid) nextStepWizard.removeAttr('disabled').trigger('click');
});
$('div.setup-panel div a.btn-success').trigger('click');
});
$(document).ready(function() {
$('#company_logo').fancyfile({
text : '{{ trans('general.form.select.file') }}',
style : 'btn-default',
@if($company->company_logo)
placeholder : '{{ $company->company_logo->basename }}',
@else
placeholder : '{{ trans('general.form.no_file_selected') }}',
@endif
});
@if($company->company_logo)
company_logo_html = '<span class="company_logo">';
company_logo_html += ' <a href="{{ url('uploads/' . $company['company_logo']->id . '/download') }}">';
company_logo_html += ' <span id="download-company_logo" class="text-primary">';
company_logo_html += ' <i class="fa fa-file-{{ $company->company_logo->aggregate_type }}-o"></i> {{ $company->company_logo->basename }}';
company_logo_html += ' </span>';
company_logo_html += ' </a>';
company_logo_html += ' {!! Form::open(['id' => 'company_logo-' . $company->company_logo->id, 'method' => 'DELETE', 'url' => [url('uploads/' . $company->company_logo->id)], 'style' => 'display:inline']) !!}';
company_logo_html += ' <a id="remove-company_logo" href="javascript:void();">';
company_logo_html += ' <span class="text-danger"><i class="fa fa fa-times"></i></span>';
company_logo_html += ' </a>';
company_logo_html += ' <input type="hidden" name="page" value="setting" />';
company_logo_html += ' <input type="hidden" name="key" value="general.company_logo" />';
company_logo_html += ' <input type="hidden" name="value" value="{{ $company->company_logo->id }}" />';
company_logo_html += ' {!! Form::close() !!}';
company_logo_html += '</span>';
$('#company .fancy-file .fake-file').append(company_logo_html);
$(document).on('click', '#remove-company_logo', function (e) {
confirmDelete("#company_logo-{!! $company->company_logo->id !!}", "{!! trans('general.attachment') !!}", "{!! trans('general.delete_confirm', ['name' => '<strong>' . $company->company_logo->basename . '</strong>', 'type' => strtolower(trans('general.attachment'))]) !!}", "{!! trans('general.cancel') !!}", "{!! trans('general.delete') !!}");
});
@endif
});
</script>
@endpush

View File

@ -7,6 +7,23 @@ Route::group(['middleware' => 'language'], function () {
Route::get('{id}/download', 'Common\Uploads@download'); Route::get('{id}/download', 'Common\Uploads@download');
}); });
Route::group(['middleware' => 'permission:read-admin-panel'], function () {
Route::group(['prefix' => 'wizard'], function () {
Route::get('/', 'Wizard\Companies@edit');
Route::get('companies', 'Wizard\Companies@edit');
Route::post('companies', 'Wizard\Companies@update');
Route::get('currencies', 'Wizard\Currencies@create');
Route::post('language', 'Wizard\Currencies@store');
Route::get('taxes', 'Wizard\Taxes@create');
Route::post('taxes', 'Wizard\Taxes@store');
Route::get('finish', 'Wizard\Finish@create');
Route::post('finish', 'Wizard\Finish@store');
});
});
Route::group(['middleware' => ['adminmenu', 'permission:read-admin-panel']], function () { Route::group(['middleware' => ['adminmenu', 'permission:read-admin-panel']], function () {
Route::get('/', 'Common\Dashboard@index'); Route::get('/', 'Common\Dashboard@index');