Skip to content

Commit

Permalink
Merge branch 'master' into aggregations
Browse files Browse the repository at this point in the history
  • Loading branch information
madbob committed Nov 9, 2024
2 parents 4fc4066 + 2f18b0e commit c31f6bf
Show file tree
Hide file tree
Showing 15 changed files with 192 additions and 136 deletions.
2 changes: 1 addition & 1 deletion code/app/BookedProduct.php
Original file line number Diff line number Diff line change
Expand Up @@ -327,7 +327,7 @@ public function getValue($type)

public function getFinalUnitPrice()
{
if ($this->delivered) {
if ($this->delivered > 0) {
return $this->final_price / $this->delivered;
}
else {
Expand Down
16 changes: 16 additions & 0 deletions code/app/Http/Controllers/Controller.php
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,20 @@ public function objhead(Request $request, $id)

abort(404);
}

/*
Controparte della funzione JS collectFilteredUsers(), questa funzione ne
deserializza il contenuto
*/
protected function collectedFilteredUsers($request)
{
$users = $request->input('users', []);

if (is_array($users)) {
return $users;
}
else {
return explode(',', $users);
}
}
}
2 changes: 1 addition & 1 deletion code/app/Http/Controllers/MovementsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -284,7 +284,7 @@ public function document(Request $request, $type, $subtype = 'none')
case 'credits':
$users = User::sorted()->topLevel()->get();

$filtered_users = $request->input('users', []);
$filtered_users = $this->collectedFilteredUsers($request);
if (!empty($filtered_users)) {
$users = $users->filter(function($u) use ($filtered_users) {
return in_array($u->id, $filtered_users);
Expand Down
109 changes: 109 additions & 0 deletions code/app/Http/Controllers/TourController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class TourController extends Controller
{
public function startTour(Request $request)
{
$user = $request->user();
$gas = $user->gas;

$steps = [];

/*
Gli identificativi dei pulsanti devono corrispondere a quelli
assegnati in MenuServiceProvider
*/

$steps[] = (object) [
'title' => _i('Benvenuto in GASdotto!'),
'content' => _i("Qui ti diamo qualche suggerimento per iniziare ad utilizzare questa nuova piattaforma..."),
];

$steps[] = (object) [
'title' => _i('I tuoi dati'),
'content' => _i("Cliccando qui accedi al pannello dei tuoi dati personali, da cui poi cambiare il tuo indirizzo email, la tua password di accesso e molto altro."),
'target' => '#menu_profile',
];

if ($user->can('users.admin', $gas)) {
$steps[] = (object) [
'title' => _i('Gli altri utenti'),
'content' => _i("Da qui consulti l'elenco degli utenti, ne modifichi i parametri, e ne puoi invitare di nuovi (o li puoi importare da un file CSV)."),
'target' => '#menu_users',
];
}

if ($user->can('supplier.add', $gas) || $user->can('supplier.modify', null)) {
$steps[] = (object) [
'title' => _i('I fornitori e i listini'),
'content' => _i("Cliccando qui puoi consultare l'elenco dei fornitori, crearne di nuovi, modificarli, e per ciascuno caricare o modificare il relativo listino."),
'target' => '#menu_suppliers',
];
}

if ($user->can('supplier.orders', null) || $user->can('supplier.shippings', null)) {
$steps[] = (object) [
'title' => _i('Gli ordini'),
'content' => _i("Da questa pagina accedi all'elenco degli ordini, da cui crearli e modificarli. Cliccando su ciascun ordine puoi trovare anche la tab 'Consegne' per tenere traccia delle consegne e generare i movimenti contabili di pagamento."),
'target' => '#menu_orders',
];
}

if ($user->can('supplier.book', null)) {
$steps[] = (object) [
'title' => _i('Le prenotazioni'),
'content' => _i("Qui trovi l'elenco degli ordini attualmente in corso, e puoi sottoporre le tue prenotazioni: clicca su ciascun ordine, e specifica la quantità desiderata per ogni prodotto."),
'target' => '#menu_bookings',
];
}

if ($user->can('movements.view', $gas) || $user->can('movements.admin', $gas)) {
$steps[] = (object) [
'title' => _i('La contabilità'),
'content' => _i("In questa pagina trovi tutti i movimenti contabili ed i relativi strumenti di amministrazione."),
'target' => '#menu_accouting',
];
}

if ($user->can('gas.config', $gas)) {
$steps[] = (object) [
'title' => _i('Tutte le configurazioni'),
'content' => _i("Cliccando qui trovi una moltitudine di parametri per personalizare il comportamento di questa istanza GASdotto."),
'target' => '#menu_config',
];
}

$steps[] = (object) [
'title' => _i('Help in linea'),
'content' => _i("Aprendo i diversi pannelli di GASdotto, accanto a molti parametri trovi una icona blu: passandoci sopra il cursore del mouse, o pigiandoci sopra con il dito usando lo smartphone, ti viene mostrato un breve testo descrittivo che te ne illustra i dettagli.") . '<br><img class="img-fluid p-2 mt-2 bg-dark" src="' . asset('images/inline_help.gif') . '">',
];

if ($user->can('users.admin', $gas)) {
$steps[] = (object) [
'title' => _i('Dubbi?'),
'content' => _i("Se hai un dubbio sull'utilizzo di GASdotto, o una segnalazione, o una richiesta, cliccando qui trovi i nostri contatti."),
'target' => '#menu_help'
];
}

return response()->json([
'dialogZ' => 2000,
'nextLabel' => '>>',
'prevLabel' => '<<',
'finishLabel' => _i('Finito'),
'steps' => $steps,
]);
}

public function finishTour(Request $request)
{
$user = $request->user();
$user->tour = true;
$user->save();
return $this->successResponse();
}
}
107 changes: 2 additions & 105 deletions code/app/Http/Controllers/UsersController.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,8 @@ class UsersController extends BackedController
{
public function __construct(UsersService $service)
{
$this->middleware('auth');

$this->commonInit([
'reference_class' => 'App\\User',
'reference_class' => User::class,
'service' => $service
]);
}
Expand Down Expand Up @@ -95,7 +93,7 @@ public function export(Request $request)
$users = $this->service->list('', true);

if ($request->input('exportables') == 'selected') {
$selected = $request->input('users', []);
$selected = $this->collectedFilteredUsers($request);
$users = $users->filter(fn($u) => in_array($u->id, $selected));
}

Expand Down Expand Up @@ -167,107 +165,6 @@ public function picture($id)
});
}

public function startTour(Request $request)
{
$user = $request->user();
$gas = $user->gas;

$steps = [];

/*
Gli identificativi dei pulsanti devono corrispondere a quelli
assegnati in MenuServiceProvider
*/

$steps[] = (object) [
'title' => _i('Benvenuto in GASdotto!'),
'content' => _i("Qui ti diamo qualche suggerimento per iniziare ad utilizzare questa nuova piattaforma..."),
];

$steps[] = (object) [
'title' => _i('I tuoi dati'),
'content' => _i("Cliccando qui accedi al pannello dei tuoi dati personali, da cui poi cambiare il tuo indirizzo email, la tua password di accesso e molto altro."),
'target' => '#menu_profile',
];

if ($user->can('users.admin', $gas)) {
$steps[] = (object) [
'title' => _i('Gli altri utenti'),
'content' => _i("Da qui consulti l'elenco degli utenti, ne modifichi i parametri, e ne puoi invitare di nuovi (o li puoi importare da un file CSV)."),
'target' => '#menu_users',
];
}

if ($user->can('supplier.add', $gas) || $user->can('supplier.modify', null)) {
$steps[] = (object) [
'title' => _i('I fornitori e i listini'),
'content' => _i("Cliccando qui puoi consultare l'elenco dei fornitori, crearne di nuovi, modificarli, e per ciascuno caricare o modificare il relativo listino."),
'target' => '#menu_suppliers',
];
}

if ($user->can('supplier.orders', null) || $user->can('supplier.shippings', null)) {
$steps[] = (object) [
'title' => _i('Gli ordini'),
'content' => _i("Da questa pagina accedi all'elenco degli ordini, da cui crearli e modificarli. Cliccando su ciascun ordine puoi trovare anche la tab 'Consegne' per tenere traccia delle consegne e generare i movimenti contabili di pagamento."),
'target' => '#menu_orders',
];
}

if ($user->can('supplier.book', null)) {
$steps[] = (object) [
'title' => _i('Le prenotazioni'),
'content' => _i("Qui trovi l'elenco degli ordini attualmente in corso, e puoi sottoporre le tue prenotazioni: clicca su ciascun ordine, e specifica la quantità desiderata per ogni prodotto."),
'target' => '#menu_bookings',
];
}

if ($user->can('movements.view', $gas) || $user->can('movements.admin', $gas)) {
$steps[] = (object) [
'title' => _i('La contabilità'),
'content' => _i("In questa pagina trovi tutti i movimenti contabili ed i relativi strumenti di amministrazione."),
'target' => '#menu_accouting',
];
}

if ($user->can('gas.config', $gas)) {
$steps[] = (object) [
'title' => _i('Tutte le configurazioni'),
'content' => _i("Cliccando qui trovi una moltitudine di parametri per personalizare il comportamento di questa istanza GASdotto."),
'target' => '#menu_config',
];
}

$steps[] = (object) [
'title' => _i('Help in linea'),
'content' => _i("Aprendo i diversi pannelli di GASdotto, accanto a molti parametri trovi una icona blu: passandoci sopra il cursore del mouse, o pigiandoci sopra con il dito usando lo smartphone, ti viene mostrato un breve testo descrittivo che te ne illustra i dettagli.") . '<br><img class="img-fluid p-2 mt-2 bg-dark" src="' . asset('images/inline_help.gif') . '">',
];

if ($user->can('users.admin', $gas)) {
$steps[] = (object) [
'title' => _i('Dubbi?'),
'content' => _i("Se hai un dubbio sull'utilizzo di GASdotto, o una segnalazione, o una richiesta, cliccando qui trovi i nostri contatti."),
'target' => '#menu_help'
];
}

return response()->json([
'dialogZ' => 2000,
'nextLabel' => '>>',
'prevLabel' => '<<',
'finishLabel' => _i('Finito'),
'steps' => $steps,
]);
}

public function finishTour(Request $request)
{
$user = $request->user();
$user->tour = true;
$user->save();
return $this->successResponse();
}

private function testInternalFunctionsAccess($requester, $target, $type)
{
$admin_editable = $requester->can('users.admin', $target->gas);
Expand Down
2 changes: 2 additions & 0 deletions code/app/Printers/Concerns/Shipping.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,8 @@ public function formatShipping($order, $fields, $status, $circles, $extra_modifi
'products' => [],
'totals' => [],
'notes' => !empty($booking->notes) ? [$booking->notes] : [],

'others' => $booking->user->morePendingBookings($order->aggregate),
];

foreach($booking->products_with_friends as $booked) {
Expand Down
18 changes: 7 additions & 11 deletions code/app/Services/NotificationsService.php
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,16 @@ public function list($start, $end)
$user = $this->ensureAuth();

$notifications_query = Notification::orderBy('start_date', 'desc')->with(['users']);
$dates_query = Date::where('type', 'internal')->where('target_type', GAS::class)->where('target_id', $user->gas->id);

if (!is_null($start)) {
$notifications_query->where('end_date', '>=', $start);
$dates_query->where('date', '>=', $start);
}

if (!is_null($end)) {
$notifications_query->where('start_date', '<=', $end);
$dates_query->where('date', '<=', $end);
}

if ($user->can('notifications.admin', $user->gas) == false) {
Expand All @@ -33,17 +36,6 @@ public function list($start, $end)
}

$notifications = $notifications_query->get();

$dates_query = Date::where('type', 'internal')->where('target_type', GAS::class)->where('target_id', $user->gas->id);

if (!is_null($start)) {
$dates_query->where('date', '>=', $start);
}

if (!is_null($end)) {
$dates_query->where('date', '<=', $end);
}

$dates = $dates_query->get();

$all = new Collection();
Expand All @@ -61,6 +53,10 @@ public function show($id)
private function syncUsers($notification, $request)
{
$users = $request['users'] ?? [];
if (is_string($users)) {
$users = explode(',', $users);
}

if (empty($users)) {
$us = User::select('id')->whereNull('parent_id')->get();
foreach ($us as $u) {
Expand Down
27 changes: 27 additions & 0 deletions code/app/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,33 @@ public function initialWelcome()
}
}

/*
Genera la notifica relativa ad altre prenotazioni (oltre a quella
dell'aggregato specificato) che devono essere ritirate dall'utente nel
corso della giornata. Viene aggiunta nel pannello delle consegne e nel
Dettaglio Consegne PDF
*/
public function morePendingBookings($aggregate)
{
$other_bookings = $this->bookings()->where('status', 'pending')->whereHas('order', function($query) use ($aggregate) {
$query->where('aggregate_id', '!=', $aggregate->id)->where('shipping', $aggregate->shipping);
})->get();

if ($other_bookings->isEmpty() == false) {
$notice = _i('Questa persona oggi deve ritirare anche altre prenotazioni:');
$notice .= '<ul>';

foreach ($other_bookings as $ob) {
$notice .= '<li>' . $ob->order->printableName() . '</li>';
}

$notice .= '</ul>';
return $notice;
}

return null;
}

/************************************************************ SluggableID */

public function getSlugID()
Expand Down
2 changes: 1 addition & 1 deletion code/public/js/gasdotto.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion code/public/js/gasdotto.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion code/public/mix-manifest.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"/js/gasdotto.js": "/js/gasdotto.js?id=fc65a5e5ac13326da076b81fe3ff6e5d",
"/js/gasdotto.js": "/js/gasdotto.js?id=e53bdd99357fa8ddc76734e84bceb05d",
"/css/gasdotto.css": "/css/gasdotto.css?id=944fde138a68e0877df0d9da8e03d933"
}
Loading

0 comments on commit c31f6bf

Please sign in to comment.