Add Calendar in Admin

This commit is contained in:
Mathieu Lagace
2019-08-17 18:02:09 -04:00
parent d4b3b1b47d
commit a63eafb833
19 changed files with 649 additions and 219 deletions

View File

@@ -13,6 +13,11 @@ class Booking extends Model
public function user() public function user()
{ {
return $this->belongsTo('App\User'); return $this->belongsTo('App\User');
}
public function item()
{
return $this->belongsTo('App\Item');
} }
} }

View File

@@ -72,9 +72,9 @@ class ConfigController extends Controller
$config = Config::all()->where('name',request('perm'))->first(); $config = Config::all()->where('name',request('perm'))->first();
if (request('value') == "true") { if (request('value') == "true") {
$config->state = 1; $config->data = ["true"];
} else { } else {
$config->state = 0; $config->data = ["false"];
} }
$config->save(); $config->save();

View File

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use \App\Schedule; use \App\Schedule;
use function GuzzleHttp\json_encode; use function GuzzleHttp\json_encode;
use PDF;
class ScheduleController extends Controller class ScheduleController extends Controller
{ {
@@ -76,7 +77,7 @@ class ScheduleController extends Controller
if($event->date_begin >= $start && $event->date_begin <= $end) { if($event->date_begin >= $start && $event->date_begin <= $end) {
array_push($events,$event); array_push($events,$event);
} }
if($event->date_end >= $start && $event->date_end <= $end) { else if($event->date_end >= $start && $event->date_end <= $end) {
array_push($events,$event); array_push($events,$event);
} }
} }
@@ -91,6 +92,7 @@ class ScheduleController extends Controller
'start' => $schedule->date.'T'.$schedule->data['event_begin_time'], 'start' => $schedule->date.'T'.$schedule->data['event_begin_time'],
'end' => $schedule->date.'T'.$schedule->data['event_end_time'], 'end' => $schedule->date.'T'.$schedule->data['event_end_time'],
'color' => $color, 'color' => $color,
'source' => 'schedule',
'id' => $schedule->id 'id' => $schedule->id
]; ];
array_push($jsonevents,$event); array_push($jsonevents,$event);
@@ -105,6 +107,8 @@ class ScheduleController extends Controller
'start' => $event->date_begin, 'start' => $event->date_begin,
'end' => $event->date_end, 'end' => $event->date_end,
'color' => $color, 'color' => $color,
'extraParams' => [
'db_type' => 'event'],
'id' => $event->id 'id' => $event->id
]; ];
array_push($jsonevents,$myevent); array_push($jsonevents,$myevent);
@@ -113,14 +117,30 @@ class ScheduleController extends Controller
return json_encode($jsonevents); return json_encode($jsonevents);
} }
public function loadModal($id) public function loadModal($id,$db_type)
{ {
return view('public.modal.schedule',['event' => \App\Schedule::find($id)]); if($db_type == "event")
{
$event = \App\Event::find($id);
}
else
{
$event = \App\Schedule::find($id);
}
return view('public.modal.schedule',['event' => $event]);
} }
public function loadModalFull($id) public function loadModalFull($id,$db_type)
{ {
return view('admin.schedule.modal.show',['event' => \App\Schedule::find($id)]); if($db_type == "event")
{
$event = \App\Event::find($id);
}
else
{
$event = \App\Schedule::find($id);
}
return view('admin.schedule.modal.show',['event' => $event]);
} }
public function getColor($type) public function getColor($type)
@@ -172,4 +192,11 @@ class ScheduleController extends Controller
}; };
return $color; return $color;
} }
public function printtopdf($id)
{
$event = \App\Event::find($id);
$pdf = PDF::loadView('admin.schedule.modal.show',['event' => $event]);
return $pdf->download($event->date_begin.'.pdf');
}
} }

View File

@@ -6,6 +6,7 @@
"type": "project", "type": "project",
"require": { "require": {
"php": "^7.1.3", "php": "^7.1.3",
"barryvdh/laravel-dompdf": "^0.8.4",
"fideloper/proxy": "^4.0", "fideloper/proxy": "^4.0",
"guzzlehttp/guzzle": "^6.3", "guzzlehttp/guzzle": "^6.3",
"laravel/framework": "5.6.*", "laravel/framework": "5.6.*",

245
composer.lock generated
View File

@@ -4,8 +4,64 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "b914f34bb5ca62a2b7d916629dc30d1a", "content-hash": "a92d2a9579b7e0ef7e3c8b77e8c5dcde",
"packages": [ "packages": [
{
"name": "barryvdh/laravel-dompdf",
"version": "v0.8.4",
"source": {
"type": "git",
"url": "https://github.com/barryvdh/laravel-dompdf.git",
"reference": "3fd817065e1c820b1ddace8b2bf65ca45088df4f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/barryvdh/laravel-dompdf/zipball/3fd817065e1c820b1ddace8b2bf65ca45088df4f",
"reference": "3fd817065e1c820b1ddace8b2bf65ca45088df4f",
"shasum": ""
},
"require": {
"dompdf/dompdf": "^0.8",
"illuminate/support": "5.5.x|5.6.x|5.7.x|5.8.x",
"php": ">=7"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "0.8-dev"
},
"laravel": {
"providers": [
"Barryvdh\\DomPDF\\ServiceProvider"
],
"aliases": {
"PDF": "Barryvdh\\DomPDF\\Facade"
}
}
},
"autoload": {
"psr-4": {
"Barryvdh\\DomPDF\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Barry vd. Heuvel",
"email": "barryvdh@gmail.com"
}
],
"description": "A DOMPDF Wrapper for Laravel",
"keywords": [
"dompdf",
"laravel",
"pdf"
],
"time": "2019-02-26T18:07:43+00:00"
},
{ {
"name": "dnoegel/php-xdg-base-dir", "name": "dnoegel/php-xdg-base-dir",
"version": "0.1", "version": "0.1",
@@ -168,6 +224,72 @@
], ],
"time": "2019-07-30T19:33:28+00:00" "time": "2019-07-30T19:33:28+00:00"
}, },
{
"name": "dompdf/dompdf",
"version": "v0.8.3",
"source": {
"type": "git",
"url": "https://github.com/dompdf/dompdf.git",
"reference": "75f13c700009be21a1965dc2c5b68a8708c22ba2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/dompdf/dompdf/zipball/75f13c700009be21a1965dc2c5b68a8708c22ba2",
"reference": "75f13c700009be21a1965dc2c5b68a8708c22ba2",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-mbstring": "*",
"phenx/php-font-lib": "0.5.*",
"phenx/php-svg-lib": "0.3.*",
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8|^5.5|^6.5",
"squizlabs/php_codesniffer": "2.*"
},
"suggest": {
"ext-gd": "Needed to process images",
"ext-gmagick": "Improves image processing performance",
"ext-imagick": "Improves image processing performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-develop": "0.7-dev"
}
},
"autoload": {
"psr-4": {
"Dompdf\\": "src/"
},
"classmap": [
"lib/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-2.1"
],
"authors": [
{
"name": "Fabien Ménager",
"email": "fabien.menager@gmail.com"
},
{
"name": "Brian Sweeney",
"email": "eclecticgeek@gmail.com"
},
{
"name": "Gabriel Bull",
"email": "me@gabrielbull.com"
}
],
"description": "DOMPDF is a CSS 2.1 compliant HTML to PDF converter",
"homepage": "https://github.com/dompdf/dompdf",
"time": "2018-12-14T02:40:31+00:00"
},
{ {
"name": "dragonmantank/cron-expression", "name": "dragonmantank/cron-expression",
"version": "v2.3.0", "version": "v2.3.0",
@@ -1319,6 +1441,83 @@
], ],
"time": "2018-07-02T15:55:56+00:00" "time": "2018-07-02T15:55:56+00:00"
}, },
{
"name": "phenx/php-font-lib",
"version": "0.5.1",
"source": {
"type": "git",
"url": "https://github.com/PhenX/php-font-lib.git",
"reference": "760148820110a1ae0936e5cc35851e25a938bc97"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PhenX/php-font-lib/zipball/760148820110a1ae0936e5cc35851e25a938bc97",
"reference": "760148820110a1ae0936e5cc35851e25a938bc97",
"shasum": ""
},
"require-dev": {
"phpunit/phpunit": "^4.8"
},
"type": "library",
"autoload": {
"psr-4": {
"FontLib\\": "src/FontLib"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-3.0"
],
"authors": [
{
"name": "Fabien Ménager",
"email": "fabien.menager@gmail.com"
}
],
"description": "A library to read, parse, export and make subsets of different types of font files.",
"homepage": "https://github.com/PhenX/php-font-lib",
"time": "2017-09-13T16:14:37+00:00"
},
{
"name": "phenx/php-svg-lib",
"version": "v0.3.2",
"source": {
"type": "git",
"url": "https://github.com/PhenX/php-svg-lib.git",
"reference": "ccc46ef6340d4b8a4a68047e68d8501ea961442c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/PhenX/php-svg-lib/zipball/ccc46ef6340d4b8a4a68047e68d8501ea961442c",
"reference": "ccc46ef6340d4b8a4a68047e68d8501ea961442c",
"shasum": ""
},
"require": {
"sabberworm/php-css-parser": "8.1.*"
},
"require-dev": {
"phpunit/phpunit": "~5.0"
},
"type": "library",
"autoload": {
"psr-0": {
"Svg\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-3.0"
],
"authors": [
{
"name": "Fabien Ménager",
"email": "fabien.menager@gmail.com"
}
],
"description": "A library to read, parse and export to PDF SVG files.",
"homepage": "https://github.com/PhenX/php-svg-lib",
"time": "2018-06-03T10:10:03+00:00"
},
{ {
"name": "php-http/guzzle6-adapter", "name": "php-http/guzzle6-adapter",
"version": "v1.1.1", "version": "v1.1.1",
@@ -1927,6 +2126,50 @@
], ],
"time": "2018-07-19T23:38:55+00:00" "time": "2018-07-19T23:38:55+00:00"
}, },
{
"name": "sabberworm/php-css-parser",
"version": "8.1.0",
"source": {
"type": "git",
"url": "https://github.com/sabberworm/PHP-CSS-Parser.git",
"reference": "850cbbcbe7fbb155387a151ea562897a67e242ef"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sabberworm/PHP-CSS-Parser/zipball/850cbbcbe7fbb155387a151ea562897a67e242ef",
"reference": "850cbbcbe7fbb155387a151ea562897a67e242ef",
"shasum": ""
},
"require": {
"php": ">=5.3.2"
},
"require-dev": {
"phpunit/phpunit": "*"
},
"type": "library",
"autoload": {
"psr-0": {
"Sabberworm\\CSS": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Raphael Schweikert"
}
],
"description": "Parser for CSS Files written in PHP",
"homepage": "http://www.sabberworm.com/blog/2010/6/10/php-css-parser",
"keywords": [
"css",
"parser",
"stylesheet"
],
"time": "2016-07-19T19:14:21+00:00"
},
{ {
"name": "swiftmailer/swiftmailer", "name": "swiftmailer/swiftmailer",
"version": "v6.2.1", "version": "v6.2.1",

View File

@@ -158,9 +158,11 @@ return [
Illuminate\Validation\ValidationServiceProvider::class, Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class, Illuminate\View\ViewServiceProvider::class,
/* /*
* Package Service Providers... * Package Service Providers...
*/ */
Barryvdh\DomPDF\ServiceProvider::class,
/* /*
* Application Service Providers... * Application Service Providers...
@@ -219,6 +221,7 @@ return [
'URL' => Illuminate\Support\Facades\URL::class, 'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class, 'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class, 'View' => Illuminate\Support\Facades\View::class,
'PDF' => Barryvdh\DomPDF\Facade::class,
], ],

View File

@@ -21,6 +21,8 @@ class CreateEventsTable extends Migration
$table->string('type'); $table->string('type');
$table->string('user_id'); $table->string('user_id');
$table->string('location'); $table->string('location');
$table->boolean('is_mandatory');
$table->text('desc');
$table->timestamps(); $table->timestamps();
}); });
} }

184
public/css/custom.css vendored
View File

@@ -1,87 +1,107 @@
.calendar{ .calendar {
margin-top: 50px; margin-top: 50px;
} }
.calendar-body-column { .calendar-body-column {
display: flex; display: flex;
} }
.calendar-container{
width: 14%;
height: 7.5rem;
text-align: center;
vertical-align: middle !important;
border: solid 1px #d9d9d9 !important;
padding: 0px !important;
background-color: white;
}
.calendar-date{
float: left;
margin-left: 1rem;
}
.calendar-text{
float: right;
}
.calendar-text > div {
text-align:start;
}
.calendar_event_name {
height: 3rem;
overflow: hidden;
}
@media only screen and (max-width: 800px) {
.calendar-container{
width: 100%;
}
.calendar-head{
display: none;
}
.calendar-empty{
display: none;
}
}
.btn-calendar{ .calendar-container {
padding: 36px 0; width: 14%;
height: 7.5rem; height: 7.5rem;
margin: 0px; text-align: center;
} vertical-align: middle !important;
.btn-calendar:hover{ border: solid 1px #d9d9d9 !important;
background-color: #f2f2f26e; padding: 0px !important;
} background-color: white;
.thead-dark { }
color: #fff;
background-color: #212529;
border-color: #32383e;
text-align: center;
}
.loader{
text-align: center;
}
.loader-bg{
width: 70px;
margin-top: 50px;
margin-bottom: 50px;
}
.loader-spinner {
position: absolute;
border: 16px solid #f3f3f3;
border-top: 16px solid #272c33;
border-radius: 50%;
width: 120px;
height: 120px;
animation: spin 2s linear infinite;
left: 0px;
right: 0px;
margin-left: auto;
margin-right: auto;
top: 44px;
}
@keyframes spin { .calendar-date {
0% { transform: rotate(0deg); } float: left;
100% { transform: rotate(360deg); } margin-left: 1rem;
}
.calendar-text {
float: right;
}
.calendar-text>div {
text-align: start;
}
.calendar_event_name {
height: 3rem;
overflow: hidden;
}
@media only screen and (max-width: 800px) {
.calendar-container {
width: 100%;
} }
.cs-notification:hover { .calendar-head {
background-color: #F2F2F2 !important; display: none;
color:white;
} }
.calendar-empty {
display: none;
}
}
.btn-calendar {
padding: 36px 0;
height: 7.5rem;
margin: 0px;
}
.btn-calendar:hover {
background-color: #f2f2f26e;
}
.thead-dark {
color: #fff;
background-color: #212529;
border-color: #32383e;
text-align: center;
}
.loader {
text-align: center;
}
.loader-bg {
width: 70px;
margin-top: 50px;
margin-bottom: 50px;
}
.loader-spinner {
position: absolute;
border: 16px solid #f3f3f3;
border-top: 16px solid #272c33;
border-radius: 50%;
width: 120px;
height: 120px;
animation: spin 2s linear infinite;
left: 0px;
right: 0px;
margin-left: auto;
margin-right: auto;
top: 44px;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.cs-notification:hover {
background-color: #F2F2F2 !important;
color: white;
}
.modal-lg {
max-width: 1150px !important;
}

View File

@@ -12,8 +12,7 @@ function initFullCalendar(authToken) {
}, },
events: '/api/schedule/events', events: '/api/schedule/events',
eventClick: function (info) { eventClick: function (info) {
console.log(info.event.id) $.get("/api/schedule/full/events/" + info.event.id + "/"+ info.event.extendedProps.extraParams.db_type + "/modal?api_token="+authToken, function (data) {
$.get("/api/schedule/full/events/" + info.event.id + "/modal?api_token="+authToken, function (data) {
$("#modal-content").html(data); $("#modal-content").html(data);
}); });
$('#schedulemodal').modal('toggle') $('#schedulemodal').modal('toggle')

184
resources/custom.css vendored
View File

@@ -1,87 +1,107 @@
.calendar{ .calendar {
margin-top: 50px; margin-top: 50px;
} }
.calendar-body-column { .calendar-body-column {
display: flex; display: flex;
} }
.calendar-container{
width: 14%;
height: 7.5rem;
text-align: center;
vertical-align: middle !important;
border: solid 1px #d9d9d9 !important;
padding: 0px !important;
background-color: white;
}
.calendar-date{
float: left;
margin-left: 1rem;
}
.calendar-text{
float: right;
}
.calendar-text > div {
text-align:start;
}
.calendar_event_name {
height: 3rem;
overflow: hidden;
}
@media only screen and (max-width: 800px) {
.calendar-container{
width: 100%;
}
.calendar-head{
display: none;
}
.calendar-empty{
display: none;
}
}
.btn-calendar{ .calendar-container {
padding: 36px 0; width: 14%;
height: 7.5rem; height: 7.5rem;
margin: 0px; text-align: center;
} vertical-align: middle !important;
.btn-calendar:hover{ border: solid 1px #d9d9d9 !important;
background-color: #f2f2f26e; padding: 0px !important;
} background-color: white;
.thead-dark { }
color: #fff;
background-color: #212529;
border-color: #32383e;
text-align: center;
}
.loader{
text-align: center;
}
.loader-bg{
width: 70px;
margin-top: 50px;
margin-bottom: 50px;
}
.loader-spinner {
position: absolute;
border: 16px solid #f3f3f3;
border-top: 16px solid #272c33;
border-radius: 50%;
width: 120px;
height: 120px;
animation: spin 2s linear infinite;
left: 0px;
right: 0px;
margin-left: auto;
margin-right: auto;
top: 44px;
}
@keyframes spin { .calendar-date {
0% { transform: rotate(0deg); } float: left;
100% { transform: rotate(360deg); } margin-left: 1rem;
}
.calendar-text {
float: right;
}
.calendar-text>div {
text-align: start;
}
.calendar_event_name {
height: 3rem;
overflow: hidden;
}
@media only screen and (max-width: 800px) {
.calendar-container {
width: 100%;
} }
.cs-notification:hover { .calendar-head {
background-color: #F2F2F2 !important; display: none;
color:white;
} }
.calendar-empty {
display: none;
}
}
.btn-calendar {
padding: 36px 0;
height: 7.5rem;
margin: 0px;
}
.btn-calendar:hover {
background-color: #f2f2f26e;
}
.thead-dark {
color: #fff;
background-color: #212529;
border-color: #32383e;
text-align: center;
}
.loader {
text-align: center;
}
.loader-bg {
width: 70px;
margin-top: 50px;
margin-bottom: 50px;
}
.loader-spinner {
position: absolute;
border: 16px solid #f3f3f3;
border-top: 16px solid #272c33;
border-radius: 50%;
width: 120px;
height: 120px;
animation: spin 2s linear infinite;
left: 0px;
right: 0px;
margin-left: auto;
margin-right: auto;
top: 44px;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
.cs-notification:hover {
background-color: #F2F2F2 !important;
color: white;
}
.modal-lg {
width: 80%;
}

View File

@@ -97,7 +97,7 @@
} }
</script> </script>
<div class="modal fade" id="schedulemodal" tabindex="-1" role="dialog" aria-labelledby="schedulemodal" aria-hidden="true"> <div class="modal fade" id="schedulemodal" tabindex="-1" role="dialog" aria-labelledby="schedulemodal" aria-hidden="true">
<div class="modal-dialog" role="document"> <div class="modal-dialog w-100 modal-lg mx-2 mx-lg-auto" role="document">
<div class="modal-content" id="modal-content"> <div class="modal-content" id="modal-content">
</div> </div>
</div> </div>

View File

@@ -12,14 +12,14 @@
<div class="col col-md-8"><label for="text-input" class=" form-control-label">Horaire publique</label><small class="form-text text-muted">L'horaire est t-il disponible publique sur la page d'accueil du site</small></div> <div class="col col-md-8"><label for="text-input" class=" form-control-label">Horaire publique</label><small class="form-text text-muted">L'horaire est t-il disponible publique sur la page d'accueil du site</small></div>
<div class="col col-md-4" style="margin: auto;"> <div class="col col-md-4" style="margin: auto;">
<label for="disabled-input" class=" form-control-label"></label> <label for="disabled-input" class=" form-control-label"></label>
<label class="switch switch-3d switch-primary mr-3" style="margin-left: 3rem;"><input id="is_schedule_public" name="is_schedule_public" class="switch-input" @if($configs->where('name','is_schedule_public')->first()->state == 1) checked="true" @endif type="checkbox" onchange="saveChange('is_schedule_public')"><span class="switch-label"></span><span class="switch-handle"></span></label> <label class="switch switch-3d switch-primary mr-3" style="margin-left: 3rem;"><input id="is_schedule_public" name="is_schedule_public" class="switch-input" @if(\App\Config::getData('is_schedule_public') === "true") checked="true" @endif type="checkbox" onchange="saveChange('is_schedule_public')"><span class="switch-label"></span><span class="switch-handle"></span></label>
</div> </div>
</div> </div>
<div class="col-md-6"> <div class="col-md-6">
<div class="col col-md-8"><label for="text-input" class=" form-control-label">Horaire complet</label><small class="form-text text-muted">L'horaire est t-il complet ? Si cette option est désactivé les utilisateurs ne reseverons pas de notification concernant l'horaire</small></div> <div class="col col-md-8"><label for="text-input" class=" form-control-label">Horaire complet</label><small class="form-text text-muted">L'horaire est t-il complet ? Si cette option est désactivé les utilisateurs ne reseverons pas de notification concernant l'horaire</small></div>
<div class="col col-md-4" style="margin: auto;"> <div class="col col-md-4" style="margin: auto;">
<label for="disabled-input" class=" form-control-label"></label> <label for="disabled-input" class=" form-control-label"></label>
<label class="switch switch-3d switch-primary mr-3" style="margin-left: 3rem;"><input id="is_schedule_build" name="is_schedule_build" class="switch-input" @if($configs->where('name','is_schedule_build')->first()->state == 1) checked="true" @endif type="checkbox" onchange="saveChange('is_schedule_build')"><span class="switch-label"></span><span class="switch-handle"></span></label> <label class="switch switch-3d switch-primary mr-3" style="margin-left: 3rem;"><input id="is_schedule_build" name="is_schedule_build" class="switch-input" @if(\App\Config::getData('is_schedule_build') === "true") checked="true" @endif type="checkbox" onchange="saveChange('is_schedule_build')"><span class="switch-label"></span><span class="switch-handle"></span></label>
</div> </div>
</div> </div>
</div> </div>

View File

@@ -1,5 +1,105 @@
@extends('layouts.modal.schedule.show') @extends('layouts.modal.schedule.show')
@section('content') @section('content')
Test
<div class="row">
<div class="col-md-6">
Du <strong>{{$event->date_begin}}</strong> au <strong>{{$event->date_end}}</strong><br>
<small>{{$event->location}} </small>
</div>
<div class="col-md-6 text-right">
@if ($event->is_mandatory)
<span class="badge badge-pill badge-warning">Obligatoire</span>
@else
<span class="badge badge-pill badge-info">Optionnel</span>
@endif
@if (is_int($event->type))
<span class="badge badge-pill badge-default">{{$event->type}}</span>
@else
<span class="badge badge-pill" style="background-color: {{\App\ComplementaryActivity::find($event->type)->calendar_color}}">{{\App\ComplementaryActivity::find($event->type)->name}}</span>
@endif
</div>
</div>
<div class="row mt-4">
<div class="col-md-12">
{{$event->desc}}
</div>
</div>
@if (!$event->courses->isEmpty())
<div class="row mt-4">
<div class="col-md-12">
<h4 class="title text-center">Horaire</h4>
<div class="row d-none d-md-flex">
<div class="col-md-2 m-3"></div>
@for ($p = 1; $p <= \App\Config::getData('admin_periode_nb'); $p++)
<div class="col-md m-3">
Période {{$p}} <small>{{\App\Config::all()->where('name','admin_periode_begin')->first()->data[$p]}} à {{\App\Config::all()->where('name','admin_periode_end')->first()->data[$p]}} </small>
</div>
@endfor
</div>
@for ($l = 1; $l <= \App\Config::getData('admin_level_in_schedule_nb'); $l++)
<div class="row">
<div class="col-md-2 m-3">
Niveau {{$l}}
</div>
@for ($p = 1; $p <= \App\Config::getData('admin_periode_nb'); $p++)
<div class="col-md m-3">
@foreach ($event->courses as $course)
@if ($course->periode == $p && $course->level == $l)
<div class="row">
<div class="col-sm-6 my-2">
{{$course->name}}
</div>
<div class="col-sm-6 my-2 text-sm-right">
{{\App\User::find($course->user_id)->fullname()}}
</div>
<div class="col-sm-6 my-2">
{{$course->ocom}}
</div>
<div class="col-sm-6 my-2 text-sm-right">
{{$course->location}}
</div>
<div class="col-sm-12">
<a class="btn btn-primary btn-sm btn-block" data-toggle="collapse" href="#collapse{{$l.$p}}" aria-expanded="false" aria-controls="collapse{{$l.$p}}">Réservation de materiel</a>
<div class="collapse" id="collapse{{$l.$p}}">
<div class="m-3">
@if (!$course->bookings->isEmpty())
<div class="row">
<div class="col-sm-8 p-2">
<strong>Item</strong>
</div>
<div class="col-sm-4 text-right p-2">
<strong>Quantité</strong>
</div>
<hr>
@foreach ($course->bookings as $booking)
<div class="col-sm-8 p-2">
<a href="/admin/item/{{$booking->item->id}}">{{$booking->item->name}}</a>
</div>
<div class="col-sm-4 text-right p-2">
{{$booking->amount}}
</div>
@endforeach
</div>
@else
<p class="text-center">
<strong>Aucune réservation</strong>
</p>
@endif
<hr>
<a class="btn btn-primary btn-sm btn-block mt-2" href="/admin/booking/course/{{$course->id}}" role="button">Modifier les réservation</a>
</div>
</div>
</div>
</div>
@endif
@endforeach
</div>
@endfor
</div>
@endfor
</div>
</div>
@endif
@endsection @endsection

View File

@@ -1,5 +1,5 @@
<div class="modal-header"> <div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">{{$event->data['event_name']}}</h5> <h5 class="modal-title" id="exampleModalLabel">{{$event->name}}</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span> <span aria-hidden="true">&times;</span>
</button> </button>
@@ -10,5 +10,5 @@
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> <button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
</div> </div>

View File

@@ -22,16 +22,16 @@
<i class="material-icons">airplanemode_active</i> L'escadron <i class="material-icons">airplanemode_active</i> L'escadron
</a> </a>
<div class="dropdown-menu"> <div class="dropdown-menu">
<a class="dropdown-item" href="#"> <a class="dropdown-item" href="#news">
<i class="material-icons mr-2">new_releases</i>Nouvelles <i class="material-icons mr-2">new_releases</i>Nouvelles
</a> </a>
<a class="dropdown-item" href="#"> <a class="dropdown-item" href="#activity">
<i class="material-icons mr-2">landscape</i>Nos Activitées <i class="material-icons mr-2">landscape</i>Nos Activitées
</a> </a>
<a class="dropdown-item" href="#"> <a class="dropdown-item" href="#picture">
<i class="material-icons mr-2">photo_camera</i>Photos <i class="material-icons mr-2">photo_camera</i>Photos
</a> </a>
<a class="dropdown-item" href="#"> <a class="dropdown-item" href="#calendar">
<i class="material-icons mr-2">calendar_today</i>Calendrier <i class="material-icons mr-2">calendar_today</i>Calendrier
</a> </a>
<a class="dropdown-item" href="#cta"> <a class="dropdown-item" href="#cta">

View File

@@ -65,8 +65,8 @@
events: '/api/schedule/events', events: '/api/schedule/events',
eventClick: function(info) { eventClick: function(info) {
console.log(info.event.id) console.log(info.event.id)
$.get( "/api/schedule/events/"+info.event.id+"/modal", function( data ) { $.get( "/api/schedule/events/" + info.event.id + "/"+ info.event.extendedProps.extraParams.db_type + "/modal", function( data ) {
$( "#schedulemodal" ).html( data ); $( "#modal-content" ).html( data );
}); });
$('#schedulemodal').modal('toggle') $('#schedulemodal').modal('toggle')
} }
@@ -77,24 +77,10 @@
</script> </script>
<div class="modal fade" id="schedulemodal" tabindex="-1" role="dialog" aria-labelledby="schedulemodal" aria-hidden="true"> <div class="modal fade" id="schedulemodal" tabindex="-1" role="dialog" aria-labelledby="schedulemodal" aria-hidden="true">
<div class="modal-dialog" role="document"> <div class="modal-dialog w-100 modal-lg mx-2 mx-lg-auto" role="document">
<div class="modal-content"> <div class="modal-content" id="modal-content"></div>
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div> </div>
</div>
</body> </body>
</html> </html>

View File

@@ -1,17 +1,34 @@
<div class="modal-dialog" role="document"> <div class="modal-header">
<div class="modal-content"> <h5 class="modal-title" id="exampleModalLabel">{{$event->name}}</h5>
<div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-label="Close">
<h5 class="modal-title" id="exampleModalLabel">{{$event->data['event_name']}}</h5> <span aria-hidden="true">&times;</span>
<button type="button" class="close" data-dismiss="modal" aria-label="Close"> </button>
<span aria-hidden="true">&times;</span> </div>
</button> <div class="modal-body">
<div class="row">
<div class="col-md-6">
Du <strong>{{$event->date_begin}}</strong> au <strong>{{$event->date_end}}</strong><br>
<small>{{$event->location}} </small>
</div> </div>
<div class="modal-body"> <div class="col-md-6 text-right">
{{$event->type}} @if ($event->is_mandatory)
<span class="badge badge-pill badge-warning">Obligatoire</span>
@else
<span class="badge badge-pill badge-info">Optionnel</span>
@endif
@if (is_int($event->type))
<span class="badge badge-pill badge-default">{{$event->type}}</span>
@else
<span class="badge badge-pill" style="background-color: {{\App\ComplementaryActivity::find($event->type)->calendar_color}}">{{\App\ComplementaryActivity::find($event->type)->name}}</span>
@endif
</div> </div>
<div class="modal-footer"> </div>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> <div class="row mt-4">
<button type="button" class="btn btn-primary">Save changes</button> <div class="col-md-12">
{{$event->desc}}
</div> </div>
</div> </div>
</div> </div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
</div>

View File

@@ -13,7 +13,7 @@ use Illuminate\Http\Request;
| |
*/ */
Route::get('/schedule/events','ScheduleController@apiIndex'); Route::get('/schedule/events','ScheduleController@apiIndex');
Route::get('/schedule/events/{id}/modal','ScheduleController@loadModal'); Route::get('/schedule/events/{id}/{db_type}/modal','ScheduleController@loadModal');
Route::middleware('auth:api')->group(function () { Route::middleware('auth:api')->group(function () {
Route::get('/user', function (Request $request) { Route::get('/user', function (Request $request) {
@@ -26,7 +26,7 @@ Route::middleware('auth:api')->group(function () {
Route::post('/calendar/loadDay', 'CalendarController@show'); Route::post('/calendar/loadDay', 'CalendarController@show');
Route::post('/calendar/delete', 'CalendarController@delete'); Route::post('/calendar/delete', 'CalendarController@delete');
Route::get('/schedule/full/events/{id}/modal','ScheduleController@loadModalFull'); Route::get('/schedule/full/events/{id}/{db_type}/modal','ScheduleController@loadModalFull');
/** Message Route */ /** Message Route */
Route::post('/message/delete', 'MessageController@destroy'); Route::post('/message/delete', 'MessageController@destroy');

View File

@@ -41,6 +41,8 @@ Route::middleware(['auth','admin'])->group(function () {
Route::post('/admin/calendar/add', 'CalendarController@store'); Route::post('/admin/calendar/add', 'CalendarController@store');
Route::patch('/admin/calendar/edit/{id}', ['uses' =>'CalendarController@patch']); Route::patch('/admin/calendar/edit/{id}', ['uses' =>'CalendarController@patch']);
Route::get('/admin/calendar/pdf/{id}','ScheduleController@printtopdf');
/** Statistique */ /** Statistique */
Route::get('/admin/stats/log' , 'LogController@index'); Route::get('/admin/stats/log' , 'LogController@index');
@@ -82,6 +84,11 @@ Route::middleware(['auth','admin'])->group(function () {
Route::post('/admin/inventory/add/{id}/{periode}/{niveau}' , 'InventoryController@store'); Route::post('/admin/inventory/add/{id}/{periode}/{niveau}' , 'InventoryController@store');
Route::post('/admin/inventory/remove/{id}/{periode}/{niveau}' , 'InventoryController@destroy'); Route::post('/admin/inventory/remove/{id}/{periode}/{niveau}' , 'InventoryController@destroy');
/** Booking */
Route::get('/admin/booking/{type}/{id}',function() {
return 'A faire';
});
/** Item */ /** Item */
Route::get('/admin/item/add' , 'ItemController@create'); Route::get('/admin/item/add' , 'ItemController@create');
Route::get('/admin/item/edit/{id}' , 'ItemController@edit'); Route::get('/admin/item/edit/{id}' , 'ItemController@edit');