From bba0d4b0f8f50530765843697c082acb17efce1f Mon Sep 17 00:00:00 2001 From: Roberto Guido Date: Mon, 6 May 2024 17:52:10 +0200 Subject: [PATCH] aggiustamenti in filtri gruppi per esportazione documenti degli ordini --- code/app/Aggregate.php | 18 ++- code/app/Formatters/User.php | 2 +- code/app/Group.php | 55 ------- code/app/Helpers/CirclesFilter.php | 138 ++++++++++++++++++ .../app/Http/Controllers/GroupsController.php | 30 ++++ code/app/Models/Concerns/InCircles.php | 16 ++ code/app/Printers/Aggregate.php | 12 +- code/app/Printers/Concerns/Shipping.php | 2 +- code/app/Printers/Concerns/Summary.php | 12 +- code/app/Printers/Order.php | 21 ++- code/app/Services/CirclesService.php | 4 +- code/app/Services/UsersService.php | 2 +- code/app/User.php | 11 +- code/resources/views/booking/list.blade.php | 11 +- .../commons/selectshippingexport.blade.php | 57 +++++--- code/resources/views/delivery/edit.blade.php | 38 ++--- .../documents/order_shipping_pdf.blade.php | 19 +-- code/resources/views/gas/extras.blade.php | 2 + code/resources/views/groups/matrix.blade.php | 43 ++++++ .../views/order/partials/groups.blade.php | 2 +- code/resources/views/user/edit.blade.php | 5 +- code/routes/web.php | 2 + 22 files changed, 355 insertions(+), 147 deletions(-) create mode 100644 code/app/Helpers/CirclesFilter.php create mode 100644 code/resources/views/groups/matrix.blade.php diff --git a/code/app/Aggregate.php b/code/app/Aggregate.php index 54eef75a..fd5f559e 100644 --- a/code/app/Aggregate.php +++ b/code/app/Aggregate.php @@ -75,16 +75,30 @@ public function getCirclesAttribute() public function circlesByGroup(): array { $ret = []; + $user_groups = []; foreach($this->circles as $circle) { if (isset($ret[$circle->group->id]) == false) { $ret[$circle->group->id] = (object) [ 'group' => $circle->group, - 'circles' => [], + 'circles' => new Collection(), ]; } - $ret[$circle->group->id]->circles[] = $circle; + $ret[$circle->group->id]->circles->push($circle); + + if ($circle->group->context == 'user') { + $user_groups[] = $circle->group->id; + } + } + + $user_groups = array_unique($user_groups); + $extra_groups = Group::where('context', 'user')->whereNotIn('id', $user_groups)->get(); + foreach($extra_groups as $extra) { + $ret[$extra->id] = (object) [ + 'group' => $extra, + 'circles' => $extra->circles, + ]; } return $ret; diff --git a/code/app/Formatters/User.php b/code/app/Formatters/User.php index dba8f1d4..5c53e7cb 100644 --- a/code/app/Formatters/User.php +++ b/code/app/Formatters/User.php @@ -39,7 +39,7 @@ private static function columnsByFeatures($ret) 'name' => _i('Gruppo %s', [$group->name]), 'checked' => true, 'format' => function($obj, $context) use ($group) { - return join(' - ', $obj->circlesByGroup($group)->circles); + return join(' - ', array_map(fn($c) => $c->printableName(), $obj->circlesByGroup($group)->circles)); }, ]; } diff --git a/code/app/Group.php b/code/app/Group.php index be28fbab..5d419d5c 100644 --- a/code/app/Group.php +++ b/code/app/Group.php @@ -29,59 +29,4 @@ public function circles(): HasMany { return $this->hasMany(Circle::class); } - - private static function sortByUserName($bookings) - { - usort($bookings, function($a, $b) { - return $a->user->printableName() <=> $b->user->printableName(); - }); - - return $bookings; - } - - private static function sortByCircle($bookings) - { - usort($bookings, function($a, $b) { - return $a->circles_sorting <=> $b->circles_sorting; - }); - - return $bookings; - } - - public static function sortBookings($bookings, $circles) - { - $actual_circles = Circle::whereIn('id', $circles)->with('group')->get(); - - if ($actual_circles->isEmpty()) { - $tmp_bookings = $bookings; - } - else { - $tmp_bookings = []; - - foreach($bookings as $booking) { - $mycircles = $booking->involvedCircles(); - $valid = true; - - foreach($circles as $required_circle) { - if (is_null($mycircles->firstWhere('id', $required_circle->id))) { - $valid = false; - break; - } - } - - if ($valid) { - $tmp_bookings[] = $booking; - } - } - } - - if (in_array('all_by_name', $circles)) { - $bookings = self::sortByUserName($tmp_bookings); - } - else { - $bookings = self::sortByCircle($tmp_bookings); - } - - return $bookings; - } } diff --git a/code/app/Helpers/CirclesFilter.php b/code/app/Helpers/CirclesFilter.php new file mode 100644 index 00000000..59d11f52 --- /dev/null +++ b/code/app/Helpers/CirclesFilter.php @@ -0,0 +1,138 @@ +circles = []; + + $all = $aggregate->circlesByGroup(); + if (empty($all) == false) { + $selected = null; + + foreach($all as $group_id => $circles) { + $this->groups[$group_id] = []; + + $key = sprintf('circles_%s', $group_id); + $selected = $request[$key] ?? 'all_by_name'; + + if ($selected != 'all_by_name' && $selected != 'all_by_place') { + $circle = Circle::find($selected); + if ($circle) { + $this->circles[] = $circle; + $this->groups[$group_id][] = $circle; + } + } + } + + if (count($all) > 1) { + $this->mode = $request['circles_master_sorting'] ?? 'all_by_name'; + } + else { + $this->mode = $selected == 'all_by_place' ? 'all_by_place' : 'all_by_name'; + } + } + else { + $this->mode = 'all_by_name'; + } + } + + public function getMode() + { + return $this->mode; + } + + public function combinations() + { + if ($this->mode == 'all_by_place') { + $result = [[]]; + + foreach($this->groups as $key => $circles) { + $append = []; + + foreach($result as $product) { + foreach($circles as $item) { + $product[$key] = $item; + $append[] = $product; + } + } + + $result = $append; + } + + return $result; + } + else { + throw new \Exception("La combinazione di gruppi non dovrebbe essere usata se non quando si ordina per cerchie", 1); + } + } + + private function sortByUserName($bookings) + { + usort($bookings, function($a, $b) { + return $a->user->printableName() <=> $b->user->printableName(); + }); + + return $bookings; + } + + private function sortByCircle($bookings) + { + usort($bookings, function($a, $b) { + return $a->circles_sorting <=> $b->circles_sorting; + }); + + return $bookings; + } + + public function sortBookings($bookings) + { + $actual_circles = $this->circles; + + if (empty($this->circles)) { + $tmp_bookings = $bookings; + } + else { + $tmp_bookings = []; + + foreach($bookings as $booking) { + $mycircles = $booking->involvedCircles(); + $valid = true; + + foreach($this->circles as $required_circle) { + if (is_null($mycircles->firstWhere('id', $required_circle->id))) { + $valid = false; + break; + } + } + + if ($valid) { + $tmp_bookings[] = $booking; + } + } + } + + if ($this->mode == 'all_by_place') { + $bookings = $this->sortByCircle($tmp_bookings); + } + else { + $bookings = $this->sortByUserName($tmp_bookings); + } + + return $bookings; + } +} diff --git a/code/app/Http/Controllers/GroupsController.php b/code/app/Http/Controllers/GroupsController.php index 1515e68f..e806c056 100644 --- a/code/app/Http/Controllers/GroupsController.php +++ b/code/app/Http/Controllers/GroupsController.php @@ -6,6 +6,9 @@ use App\Services\GroupsService; +use App\User; +use App\Group; + class GroupsController extends BackedController { public function __construct(GroupsService $service) @@ -25,4 +28,31 @@ public function show($id) return view('groups.edit', ['group' => $g]); }); } + + /* + Mostra la griglia di assegnazione massiva dei Gruppi con context = User + */ + public function matrix() + { + $this->ensureAuth(['gas.config' => 'gas']); + return view('groups.matrix'); + } + + /* + Per salvare le modifiche sulla griglia di assegnazione massiva + */ + public function saveMatrix(Request $request) + { + $this->ensureAuth(['gas.config' => 'gas']); + + $users = $request->input('users', []); + $users = User::topLevel()->whereIn('id', $users)->get(); + + $request = $request->all(); + foreach($users as $user) { + $user->readCircles($request); + } + + return $this->successResponse(); + } } diff --git a/code/app/Models/Concerns/InCircles.php b/code/app/Models/Concerns/InCircles.php index 2dfbd54b..9e9fed73 100644 --- a/code/app/Models/Concerns/InCircles.php +++ b/code/app/Models/Concerns/InCircles.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Relations\BelongsToMany; use App\Circle; +use App\Group; trait InCircles { @@ -59,5 +60,20 @@ public function circlesByGroup($group = null) return $ret; } + public function readCircles($request) + { + $groups = $request['groups'] ?? []; + $groups = Group::whereIn('id', $groups)->get(); + + $circles = []; + + foreach($groups as $group) { + $key = sprintf('circles__%s__%s', $this->id, $group->id); + $circles = array_merge($circles, $request[$key] ?? []); + } + + $this->circles()->sync($circles); + } + public abstract function eligibleGroups(); } diff --git a/code/app/Printers/Aggregate.php b/code/app/Printers/Aggregate.php index 783fc07a..47ac0734 100644 --- a/code/app/Printers/Aggregate.php +++ b/code/app/Printers/Aggregate.php @@ -4,11 +4,11 @@ use Illuminate\Support\Str; use Illuminate\Support\Arr; - -use App; +use Illuminate\Support\Facades\App; use PDF; use ezcArchive; +use App\Helpers\CirclesFilter; use App\Printers\Concerns\Orders; use App\Printers\Components\Document; use App\Printers\Components\Header; @@ -27,7 +27,7 @@ protected function handleShipping($obj, $request) $fields = splitFields($required_fields); $status = $request['status'] ?? 'pending'; - $circles = $request['circles'] ?? ['all_by_name']; + $circles = new CirclesFilter($obj, $request); $temp_data = []; foreach($obj->orders as $order) { @@ -79,7 +79,7 @@ protected function handleShipping($obj, $request) $all_gas = (App::make('GlobalScopeHub')->enabled() == false); usort($data->contents, function($a, $b) use ($circles, $all_gas) { - if (in_array('all_by_place', $circles) && $a->circles_sorting != $b->circles_sorting) { + if ($circles->getMode() == 'all_by_place' && $a->circles_sorting != $b->circles_sorting) { return $a->circles_sorting <=> $b->circles_sorting; } @@ -172,7 +172,7 @@ protected function handleSummary($obj, $request) else { $required_fields = $request['fields'] ?? []; $status = $request['status']; - $circles = $request['circles'] ?? ['no']; + $circles = new CirclesFilter($obj, $request); $document = new Document($subtype); @@ -217,7 +217,7 @@ private function orderTopBookingsByShipping($aggregate, $circles, $status = null $bookings = $bookings->where('status', $status); } - return Group::sortBookings($bookings, $circles); + return $circles->sortBookings($bookings); } private function formatTableRows($aggregate, $circles, $status, $fields, &$all_products) diff --git a/code/app/Printers/Concerns/Shipping.php b/code/app/Printers/Concerns/Shipping.php index 90c3bbf7..90003840 100644 --- a/code/app/Printers/Concerns/Shipping.php +++ b/code/app/Printers/Concerns/Shipping.php @@ -76,7 +76,7 @@ public function formatShipping($order, $fields, $status, $circles, $extra_modifi $internal_offsets = $this->offsetsByStatus($status); $bookings = $order->topLevelBookings(null); - $bookings = Group::sortBookings($bookings, $circles); + $bookings = $circles->sortBookings($bookings); $listed_products = []; $modifiers = $order->involvedModifiers(true); diff --git a/code/app/Printers/Concerns/Summary.php b/code/app/Printers/Concerns/Summary.php index 849ec6c8..d6656aea 100644 --- a/code/app/Printers/Concerns/Summary.php +++ b/code/app/Printers/Concerns/Summary.php @@ -88,15 +88,11 @@ private function formatSummaryShipping($order, $fields, $status, $circles, $extr protected function formatSummary($order, $document, $fields, $status, $circles, $extra_modifiers) { - /* - TODO: FIXARE QUESTO - */ - if ($shipping_place && $shipping_place == 'all_by_place') { - $places = Delivery::orderBy('name', 'asc')->get(); - foreach($places as $place) { - $table = $this->formatSummaryShipping($order, $fields, $status, $place->id, $extra_modifiers); + if (in_array('all_by_place', $circles)) { + foreach($order->circles as $circle) { + $table = $this->formatSummaryShipping($order, $fields, $status, [$circle->id], $extra_modifiers); if ($table) { - $document->append(new Header($place->printableName())); + $document->append(new Header($circle->printableName())); $document->append($table); } } diff --git a/code/app/Printers/Order.php b/code/app/Printers/Order.php index cfdfa05f..55292052 100644 --- a/code/app/Printers/Order.php +++ b/code/app/Printers/Order.php @@ -2,10 +2,11 @@ namespace App\Printers; -use Auth; +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Mail; use PDF; -use Mail; +use App\Helpers\CirclesFilter; use App\Printers\Concerns\Orders; use App\Formatters\User as UserFormatter; use App\Notifications\GenericOrderShipping; @@ -20,12 +21,6 @@ class Order extends Printer { use Orders; - private function orderTopBookingsByShipping($order, $circles, $status = null) - { - $bookings = $order->topLevelBookings($status); - return Group::sortBookings($bookings, $circles); - } - private function sendDocumentMail($request, $temp_file_path) { $recipient_mails = $request['recipient_mail_value'] ?? []; @@ -50,7 +45,7 @@ protected function handleShipping($obj, $request) $extra_modifiers = $request['extra_modifiers'] ?? 0; $required_fields = $request['fields'] ?? []; $fields = splitFields($required_fields); - $circles = $request['circles'] ?? ['all_by_name']; + $circles = new CirclesFilter($obj->aggregate, $request); $data = $this->formatShipping($obj, $fields, $status, $circles, $extra_modifiers); @@ -158,7 +153,7 @@ protected function handleSummary($obj, $request) $required_fields = $this->autoGuessFields($obj); } - $circles = $request['circles'] ?? ['no']; + $circles = new CirclesFilter($obj->aggregate, $request); $document = new Document($subtype); @@ -185,7 +180,9 @@ protected function handleSummary($obj, $request) private function formatTableRows($order, $circles, $status, $fields, &$all_products) { - $bookings = $this->orderTopBookingsByShipping($order, $circles, $status == 'saved' ? 'saved' : null); + $bookings = $order->topLevelBookings($status == 'saved' ? 'saved' : null); + $bookings = $circles->sortBookings($bookings); + list($get_total, $get_function) = $this->bookingsRules($status); $data = []; @@ -211,7 +208,7 @@ protected function handleTable($obj, $request) $send_mail = isset($request['send_mail']); $status = $request['status'] ?? 'pending'; $include_missing = $request['include_missing'] ?? 'no'; - $circles = $request['circles'] ?? ['no']; + $circles = new CirclesFilter($obj->aggregate, $request); $required_fields = $request['fields'] ?? []; $fields = splitFields($required_fields); diff --git a/code/app/Services/CirclesService.php b/code/app/Services/CirclesService.php index 4c1de380..d0f7e48b 100644 --- a/code/app/Services/CirclesService.php +++ b/code/app/Services/CirclesService.php @@ -40,7 +40,7 @@ public function store(array $request) if ($was_first) { if ($group->context == 'user') { - foreach(User::all() as $user) { + foreach(User::topLevel()->get() as $user) { $user->circles()->attach($c->id); } } @@ -81,7 +81,7 @@ public function destroy($id) $new_default->is_default = true; $new_default->save(); - $users = User::whereHas('circles', function($query) use ($c) { + $users = User::topLevel()->whereHas('circles', function($query) use ($c) { $query->where('circles.id', $c->id); })->get(); diff --git a/code/app/Services/UsersService.php b/code/app/Services/UsersService.php index b51c28d9..08aeb9ca 100644 --- a/code/app/Services/UsersService.php +++ b/code/app/Services/UsersService.php @@ -245,7 +245,7 @@ public function update($id, array $request) $this->readRID($user, $request); $user->save(); - $user->circles()->sync($request['circles'] ?? []); + $user->readCircles($request); handleFileUpload($request, $user, 'picture'); $user->updateContacts($request); diff --git a/code/app/User.php b/code/app/User.php index c6bba412..55ab9498 100644 --- a/code/app/User.php +++ b/code/app/User.php @@ -84,10 +84,12 @@ public function suppliers(): BelongsToMany public function scopeFilterEnabled($query) { $user = Auth::user(); - if ($user->can('users.admin', $user->gas)) + if ($user->can('users.admin', $user->gas)) { return $query->withTrashed(); - else + } + else { return $query; + } } public function scopeSorted($query) @@ -95,6 +97,11 @@ public function scopeSorted($query) return $query->orderBy('lastname', 'asc')->orderBy('firstname', 'asc'); } + public function scopeTopLevel($query) + { + return $query->whereNull('parent_id'); + } + public function getPaymentMethodAttribute() { return $this->innerCache('payment_method', function($obj) { diff --git a/code/resources/views/booking/list.blade.php b/code/resources/views/booking/list.blade.php index cf01e569..a129ade8 100644 --- a/code/resources/views/booking/list.blade.php +++ b/code/resources/views/booking/list.blade.php @@ -78,7 +78,16 @@ - @foreach($aggregate->bookings as $booking) + @php + + $bookings = $aggregate->bookings; + usort($bookings, function($a, $b) { + return $a->user->printableName() <=> $b->user->printableName(); + }); + + @endphp + + @foreach($bookings as $booking) {{ $booking->user->printableName() }} {{ printableDate($booking->created_at) }} diff --git a/code/resources/views/commons/selectshippingexport.blade.php b/code/resources/views/commons/selectshippingexport.blade.php index 1e253566..b705fafe 100644 --- a/code/resources/views/commons/selectshippingexport.blade.php +++ b/code/resources/views/commons/selectshippingexport.blade.php @@ -8,34 +8,49 @@ if (empty($all) == false) { $options = []; - foreach($included_metaplace as $imp) { - switch($imp) { - case 'no': - $options['all_by_name'] = _i('Tutti'); - break; - case 'all_by_name': - $options['all_by_name'] = _i('Tutti (ordinati per utente)'); - break; - case 'all_by_place': - $options['all_by_place'] = _i('Tutti (ordinati per cerchia)'); - break; - } - } - /* Se ho più di un raggruppamento possibile, piazzo la selezione per l'ordinamento (per utente o per Circle) a parte e vale per l'intera selezione */ if (count($all) > 1) { + foreach($included_metaplace as $imp) { + switch($imp) { + case 'no': + $options['all_by_name'] = _i('Tutti'); + break; + case 'all_by_name': + $options['all_by_name'] = _i('Utente'); + break; + case 'all_by_place': + $options['all_by_place'] = _i('Gruppi/Cerchi'); + break; + } + } + $actual_groups[_i('Ordina per')] = (object) [ + 'id' => 'master_sorting', 'options' => $options, 'help' => '', ]; - $global_options = [-1 => _i('Tutti')]; + $global_options = ['all_by_name' => _i('Tutti')]; } else { + foreach($included_metaplace as $imp) { + switch($imp) { + case 'no': + $options['all_by_name'] = _i('Tutti'); + break; + case 'all_by_name': + $options['all_by_name'] = _i('Tutti (ordinati per utente)'); + break; + case 'all_by_place': + $options['all_by_place'] = _i('Tutti (ordinati per cerchia)'); + break; + } + } + $global_options = $options; } @@ -60,12 +75,18 @@ $test_no_shipping = count($test_no_shipping); if ($test_no_shipping > 0) { - $shipping_warning = _i('Attenzione: %d utenti non hanno una cerchia assegnata', [$test_no_shipping]); + $shipping_warning = _i('Attenzione: %d utenti non hanno una cerchia assegnata per il gruppo %s', [$test_no_shipping, $meta->group->printableName()]); } } + $actual_circles = []; + foreach($meta->circles as $cir) { + $actual_circles[$cir->id] = $cir->printableName(); + } + $actual_groups[$meta->group->name] = (object) [ - 'options' => array_merge($global_options, array_map(fn($c) => $c->name, $meta->circles)), + 'id' => $meta->group->id, + 'options' => array_merge($global_options, $actual_circles), 'help' => $shipping_warning, ]; } @@ -74,5 +95,5 @@ @endphp @foreach($actual_groups as $label => $meta) - + @endforeach diff --git a/code/resources/views/delivery/edit.blade.php b/code/resources/views/delivery/edit.blade.php index 2de66ad6..71be2f9a 100644 --- a/code/resources/views/delivery/edit.blade.php +++ b/code/resources/views/delivery/edit.blade.php @@ -50,25 +50,25 @@ userBooking($user->id); - - $existing = ($existing || $o->exists || $o->friends_bookings->isEmpty() == false); - - if ($o->status == 'pending') { - $now_delivered = 0; - $mods = []; - } - else if ($o->status == 'saved') { - $now_delivered = $o->getValue('effective', true); - $mods = $o->applyModifiers($master_summary, false); - } - else { - $now_delivered = $o->getValue('effective', true); - $mods = $o->applyModifiers($master_summary, true); - } - - $tot_delivered[$o->id] = $now_delivered; - $tot_amount += $now_delivered; + $o = $order->userBooking($user->id); + + $existing = ($existing || $o->exists || $o->friends_bookings->isEmpty() == false); + + if ($o->status == 'pending') { + $now_delivered = 0; + $mods = []; + } + else if ($o->status == 'saved') { + $now_delivered = $o->getValue('effective', true); + $mods = $o->applyModifiers($master_summary, false); + } + else { + $now_delivered = $o->getValue('effective', true); + $mods = $o->applyModifiers($master_summary, true); + } + + $tot_delivered[$o->id] = $now_delivered; + $tot_amount += $now_delivered; ?> diff --git a/code/resources/views/documents/order_shipping_pdf.blade.php b/code/resources/views/documents/order_shipping_pdf.blade.php index e87510b7..5ed859f9 100644 --- a/code/resources/views/documents/order_shipping_pdf.blade.php +++ b/code/resources/views/documents/order_shipping_pdf.blade.php @@ -66,19 +66,6 @@ @endif - @php - - $place = null; - if (isset($shipping_place) && $shipping_place && $shipping_place != 'all_by_name' && $shipping_place != 'all_by_place') { - $place = App\Delivery::find($shipping_place); - } - - @endphp - - @if($place) -

{{ sprintf('%s - %s', _i('Luogo di Consegna'), $place->name) }}

- @endif -


@@ -104,9 +91,9 @@ ?> @foreach($data->contents as $d) - @if($shipping_place == 'all_by_place' && $previous_shipping != $d->shipping_sorting) -

{{ sprintf('%s - %s', _i('Luogo di Consegna'), $d->shipping_sorting) }}

- shipping_sorting ?> + @if($circles->getMode() == 'all_by_place' && $previous_shipping != $d->circles_sorting) +

{{ $d->circles_sorting }}

+ circles_sorting ?> @endif @if($preferred_style == 'breakup') diff --git a/code/resources/views/gas/extras.blade.php b/code/resources/views/gas/extras.blade.php index 70352475..6355e552 100644 --- a/code/resources/views/gas/extras.blade.php +++ b/code/resources/views/gas/extras.blade.php @@ -8,6 +8,8 @@ 'typename_readable' => _i('Gruppo'), 'targeturl' => 'groups' ]) + +
diff --git a/code/resources/views/groups/matrix.blade.php b/code/resources/views/groups/matrix.blade.php new file mode 100644 index 00000000..2e1c0779 --- /dev/null +++ b/code/resources/views/groups/matrix.blade.php @@ -0,0 +1,43 @@ +sorted()->get(); +$groups = App\Group::orderBy('name', 'asc')->where('context', 'user')->get(); + +?> + + + + + + + + + + @foreach($groups as $group) + + @endforeach + + + + @foreach($users as $user) + + + + @foreach($groups as $group) + + @endforeach + + + @endforeach + +
{{ _i('Nome') }} + + {{ $group->printableName() }} +
+ + {{ $user->printableName() }} + + +
+
+
diff --git a/code/resources/views/order/partials/groups.blade.php b/code/resources/views/order/partials/groups.blade.php index fd53f07c..8a3575bf 100644 --- a/code/resources/views/order/partials/groups.blade.php +++ b/code/resources/views/order/partials/groups.blade.php @@ -36,7 +36,7 @@ @endif @if($selectable->isEmpty() == false) - + @endif @if($info_groups->isEmpty() == false) diff --git a/code/resources/views/user/edit.blade.php b/code/resources/views/user/edit.blade.php index 8142d1ef..1b93fe89 100644 --- a/code/resources/views/user/edit.blade.php +++ b/code/resources/views/user/edit.blade.php @@ -123,9 +123,10 @@ @foreach($user->eligibleGroups() as $ug) @if($admin_editable || $ug->user_selectable) - + + @else - + @endif @endforeach @endif diff --git a/code/routes/web.php b/code/routes/web.php index 9017c5e4..031f8993 100644 --- a/code/routes/web.php +++ b/code/routes/web.php @@ -146,6 +146,8 @@ Route::get('booking/{aggregate_id}/user/{user_id}/document', 'BookingUserController@document'); Route::get('booking/{id}/header', 'BookingController@objhead')->name('booking.objhead'); + Route::get('groups/matrix', 'GroupsController@matrix')->name('groups.matrix'); + Route::post('groups/matrix/save', 'GroupsController@saveMatrix')->name('groups.matrix.save'); Route::get('groups/{id}/header', 'GroupsController@objhead')->name('groups.objhead'); Route::get('circles/{id}/header', 'CirclesController@objhead')->name('circles.objhead');