Skip to content

Commit f3958ed

Browse files
feat/working sponsor
1 parent 64dc180 commit f3958ed

File tree

7 files changed

+359
-95
lines changed

7 files changed

+359
-95
lines changed

app/Http/Controllers/SponsorController.php

Lines changed: 45 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -32,49 +32,74 @@ public function createGold()
3232

3333
public function updateSponsorBronze(Request $request)
3434
{
35-
$sponsorships = Sponsorship::where('name', 'Bronze')->first();
36-
foreach ($request->apartments as $apartment) {
37-
$apartment = Apartment::find($apartment);
38-
$apartment->sponsorships()->attach($sponsorships);
39-
}
4035

41-
$superId = Auth::user()->id;
42-
$apartments = Apartment::where('user_id', $superId)->with('sponsorships')->get();
43-
return view('apartments.index', compact('apartments', 'superId'));
36+
// gestiamo il pagamento con braintree
37+
$payment = new PaymentController();
38+
$response = $payment->checkout($request);
39+
if ($response->getStatusCode() != 200) {
40+
return redirect()->back()->with('error', 'Errore durante il pagamento');
41+
} else {
42+
$sponsorships = Sponsorship::where('name', 'Bronze')->first();
43+
$decodedApartments = json_decode($request->apartments, true);
44+
foreach ($decodedApartments as $apartment) {
45+
$apartment = Apartment::find($apartment['id']);
46+
$apartment->sponsorships()->attach($sponsorships);
47+
}
48+
49+
$superId = Auth::user()->id;
50+
$apartments = Apartment::where('user_id', $superId)->with('sponsorships')->get();
51+
$successPayment = 'Pagamento effettuato!';
52+
return view('apartments.index', compact('apartments', 'superId', 'successPayment'));
53+
}
4454
}
4555

4656
public function updateSponsorSilver(Request $request)
4757
{
48-
$sponsorships = Sponsorship::where('name', 'Silver')->first();
49-
foreach ($request->apartments as $apartment) {
58+
$payment = new PaymentController();
59+
$response = $payment->checkout($request);
60+
if ($response->getStatusCode() != 200) {
61+
return redirect()->back()->with('error', 'Errore durante il pagamento');
62+
} else {
63+
$sponsorships = Sponsorship::where('name', 'Silver')->first();
64+
foreach ($request->apartments as $apartment) {
5065
$apartment = Apartment::find($apartment);
51-
$apartment->sponsorships()->attach($sponsorships);
52-
}
66+
$apartment->sponsorships()->attach($sponsorships);
67+
}
5368

54-
$superId = Auth::user()->id;
55-
$apartments = Apartment::where('user_id', $superId)->with('sponsorships')->get();
56-
return view('apartments.index', compact('apartments', 'superId'));
69+
$superId = Auth::user()->id;
70+
$apartments = Apartment::where('user_id', $superId)->with('sponsorships')->get();
71+
$successPayment = 'Pagamento effettuato!';
72+
return view('apartments.index', compact('apartments', 'superId', 'successPayment'));
73+
}
5774
}
5875

5976
public function updateSponsorGold(Request $request)
6077
{
61-
$sponsorships = Sponsorship::where('name', 'Gold')->first();
62-
foreach ($request->apartments as $apartment) {
78+
$payment = new PaymentController();
79+
$response = $payment->checkout($request);
80+
if ($response->getStatusCode() != 200) {
81+
return redirect()->back()->with('error', 'Errore durante il pagamento');
82+
} else {
83+
$sponsorships = Sponsorship::where('name', 'Gold')->first();
84+
foreach ($request->apartments as $apartment) {
6385
$apartment = Apartment::find($apartment);
6486
$apartment->sponsorships()->attach($sponsorships);
6587
}
6688

6789
$superId = Auth::user()->id;
68-
$apartments = Apartment::where('user_id', $superId)->with('sponsorships')->get();
69-
return view('apartments.index', compact('apartments', 'superId'));
90+
$apartments = Apartment::where('user_id', $superId)->with('sponsorships')->get();
91+
$successPayment = 'Pagamento effettuato!';
92+
return view('apartments.index', compact('apartments', 'superId', 'successPayment'));
93+
}
7094
}
7195

7296
public function showPaymentPage(Request $request)
7397
{
7498
// Recupera gli appartamenti selezionati e il prezzo totale dalla richiesta
7599
$selectedApartments = Apartment::whereIn('id', $request->input('apartments', []))->get();
76100
$totalPrice = $request->input('totalPrice', 0);
101+
$sponsorshipType = $request->input('sponsorshipType', 'Bronze');
77102

78-
return view('sponsors.payment', compact('selectedApartments', 'totalPrice'));
103+
return view('sponsors.payment', compact('selectedApartments', 'totalPrice', 'sponsorshipType'));
79104
}
80105
}

resources/views/apartments/index.blade.php

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,14 @@
1414
<div class="text-yellow-500 text-3xl font-bold border-b-4 border-yellow-500 pb-4 mb-6">
1515
{{ __("Accesso eseguito!") }}
1616
</div>
17-
17+
@if (isset($successPayment))
18+
<p class="text-white text-2xl font-bold">
19+
{{ $successPayment }}
20+
agli appartamenti selezionati!
21+
</p>
22+
@endif
1823
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8">
24+
1925
@foreach ($apartments as $apartment)
2026
<div class="w-full mx-auto bg-neutral-900 shadow-lg rounded-2xl overflow-hidden transform transition-all ease-in-out duration-500 cursor-pointer hover:scale-105 hover:shadow-2xl relative group">
2127
<div class="absolute inset-0 bg-gradient-to-r from-[#013E49] to-[#004D73] opacity-0 group-hover:opacity-100 transition-opacity duration-500 ease-in-out rounded-2xl"></div>
@@ -57,11 +63,11 @@
5763
<a href="{{ route('apartments.edit', $apartment->id) }}" class="border-2 border-yellow-400 bg-transparent text-white px-5 py-3 rounded-full font-semibold hover:bg-yellow-500 transition-all ease-in-out duration-500">
5864
Modifica
5965
</a>
60-
66+
6167
<button class="open-modal border-2 border-red-600 bg-transparent text-white px-5 py-3 rounded-full font-semibold hover:bg-red-900 transition-all ease-in-out duration-500" data-apartment-id="{{ $apartment->id }}">
6268
Cancella
6369
</button>
64-
70+
6571
<form action="{{ route('apartments.destroy', $apartment->id) }}" method="POST" class="inline">
6672
@csrf
6773
@method('DELETE')
@@ -86,9 +92,9 @@
8692
</div>
8793

8894
@endforeach
89-
95+
9096
</div>
91-
97+
9298
<script>
9399
// Logica conferma cancellazione
94100
document.querySelectorAll(".deleteButton").forEach(function(button) {

resources/views/apartments/show.blade.php

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,64 @@
4242
<br>
4343

4444
<!-- Informazioni sulle sponsorizzazioni -->
45-
<!-- Sponsorizzazione Attiva/Inattiva -->
46-
@if($apartment->sponsorships->where('name', 'Bronze')->first())
47-
<p class="mt-4 text-sm font-bold text-green-400">Stato: Attivo</p>
48-
@else
49-
<p class="mt-4 text-sm font-bold text-red-500">Stato: Inattivo</p>
50-
@endif
45+
<div class="mt-6 space-y-4">
46+
<h3 class="text-xl font-bold text-white mb-4">Sponsorizzazioni</h3>
47+
<div class="flex flex-wrap gap-4">
48+
@if($apartment->sponsorships->where('name', 'Bronze')->first())
49+
<div class="flex items-center px-6 py-3 bg-gradient-to-r from-yellow-700 to-yellow-900 rounded-xl shadow-lg border-2 border-yellow-600 transform hover:scale-105 transition-all duration-300">
50+
<i class="fas fa-medal text-yellow-700 text-2xl mr-3"></i>
51+
<div>
52+
<span class="text-lg font-bold text-yellow-500">Bronze</span>
53+
<span class="ml-2 text-sm text-green-400 font-semibold">• Attivo</span>
54+
</div>
55+
</div>
56+
@else
57+
<div class="flex items-center px-6 py-3 bg-neutral-800 rounded-xl shadow-md opacity-50">
58+
<i class="fas fa-medal text-yellow-700 text-2xl mr-3"></i>
59+
<div>
60+
<span class="text-lg font-bold text-yellow-700">Bronze</span>
61+
<span class="ml-2 text-sm text-red-500 font-semibold">• Inattivo</span>
62+
</div>
63+
</div>
64+
@endif
65+
66+
@if($apartment->sponsorships->where('name', 'Silver')->first())
67+
<div class="flex items-center px-6 py-3 bg-gradient-to-r from-gray-400 to-gray-600 rounded-xl shadow-lg border-2 border-gray-300 transform hover:scale-105 transition-all duration-300">
68+
<i class="fas fa-medal text-gray-300 text-2xl mr-3"></i>
69+
<div>
70+
<span class="text-lg font-bold text-gray-200">Silver</span>
71+
<span class="ml-2 text-sm text-green-400 font-semibold">• Attivo</span>
72+
</div>
73+
</div>
74+
@else
75+
<div class="flex items-center px-6 py-3 bg-neutral-800 rounded-xl shadow-md opacity-50">
76+
<i class="fas fa-medal text-gray-400 text-2xl mr-3"></i>
77+
<div>
78+
<span class="text-lg font-bold text-gray-400">Silver</span>
79+
<span class="ml-2 text-sm text-red-500 font-semibold">• Inattivo</span>
80+
</div>
81+
</div>
82+
@endif
83+
84+
@if($apartment->sponsorships->where('name', 'Gold')->first())
85+
<div class="flex items-center px-6 py-3 bg-gradient-to-r from-yellow-500 to-yellow-700 rounded-xl shadow-lg border-2 border-yellow-400 transform hover:scale-105 transition-all duration-300">
86+
<i class="fas fa-crown text-yellow-500 text-2xl mr-3"></i>
87+
<div>
88+
<span class="text-lg font-bold text-yellow-500">Gold</span>
89+
<span class="ml-2 text-sm text-green-400 font-semibold">• Attivo</span>
90+
</div>
91+
</div>
92+
@else
93+
<div class="flex items-center px-6 py-3 bg-neutral-800 rounded-xl shadow-md opacity-50">
94+
<i class="fas fa-crown text-yellow-400 text-2xl mr-3"></i>
95+
<div>
96+
<span class="text-lg font-bold text-yellow-300">Gold</span>
97+
<span class="ml-2 text-sm text-red-500 font-semibold">• Inattivo</span>
98+
</div>
99+
</div>
100+
@endif
101+
</div>
102+
</div>
51103
</div>
52104

53105
<!-- Immagini aggiuntive dell'appartamento -->

resources/views/sponsors/createBronze.blade.php

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
<div class="flex items-center justify-center min-h-screen bg-gradient-to-r from-neutral-900 via-[#003441] to-neutral-900 py-12 px-4">
55
<div class="max-w-5xl mx-auto bg-gradient-to-r from-neutral-900 via-[#003441] to-neutral-900 p-10 rounded-3xl shadow-xl">
66
<h2 class="text-4xl font-extrabold text-gray-100 mb-8 text-center border-b-4 border-yellow-700 pb-4">Seleziona Appartamenti per il Piano Bronze</h2>
7-
<form action="{{ route('updateSponsorBronze') }}" method="POST">
8-
@csrf
7+
98
<div class="grid grid-cols-1 md:grid-cols-2 gap-8 mb-10">
109
<!-- Foreach degli appartamenti -->
1110

@@ -35,11 +34,16 @@
3534

3635
<div class="flex justify-between items-center mt-8">
3736
<p class="text-2xl font-bold text-white">Prezzo Totale: <span id="totalPrice">0,00 €</span></p>
38-
<button type="button" onclick="proceedToPayment()" class="px-8 py-4 bg-gradient-to-t from-yellow-600 to-yellow-800 text-white rounded-full shadow-lg hover:bg-yellow-500 focus:outline-none focus:ring-4 focus:ring-yellow-400 transition-all ease-in-out duration-300 transform hover:scale-105 h-14 opacity-100">
39-
Procedi al Pagamento
40-
</button>
37+
<div class="flex flex-col items-end gap-2">
38+
<p id="alertMessage" class="text-red-500 text-sm">
39+
Seleziona almeno un appartamento
40+
</p>
41+
<button type="button" onclick="proceedToPayment()" id="proceedButton" disabled
42+
class="px-8 py-4 bg-gradient-to-t from-yellow-600 to-yellow-800 text-white rounded-full shadow-lg hover:bg-yellow-500 focus:outline-none focus:ring-4 focus:ring-yellow-400 transition-all ease-in-out duration-300 transform hover:scale-105 h-14 opacity-50">
43+
Procedi al Pagamento
44+
</button>
45+
</div>
4146
</div>
42-
</form>
4347
</div>
4448
</div>
4549

@@ -50,12 +54,31 @@
5054
5155
</style>
5256
<script>
57+
const proceedButton = document.getElementById('proceedButton');
58+
59+
/**
60+
* Calcola il totale e gestisce lo stato del bottone
61+
*/
5362
function calculateTotal() {
5463
const checkboxes = document.querySelectorAll('input[name="apartments[]"]:checked');
5564
const totalPriceElement = document.getElementById('totalPrice');
65+
const alertMessage = document.getElementById('alertMessage');
5666
const pricePerApartment = 2.99;
5767
let total = checkboxes.length * pricePerApartment;
5868
totalPriceElement.textContent = total.toFixed(2) + '';
69+
70+
// abilita/disabilita bottone
71+
if (checkboxes.length > 0) {
72+
proceedButton.disabled = false;
73+
proceedButton.classList.remove('opacity-50');
74+
proceedButton.classList.add('opacity-100');
75+
alertMessage.classList.add('hidden');
76+
} else {
77+
proceedButton.disabled = true;
78+
proceedButton.classList.add('opacity-50');
79+
proceedButton.classList.remove('opacity-100');
80+
alertMessage.classList.remove('hidden');
81+
}
5982
}
6083
6184
function proceedToPayment() {

0 commit comments

Comments
 (0)