File: /var/www/vhost/disk-apps/comfama.sports-crowd.com/app/Http/Controllers/MembershipController.php
<?php
namespace App\Http\Controllers;
use App\Core\Membership\Application\MembershipService;
use App\Core\Payment\Application\PaymentTransactionService;
use App\Http\Requests\Memberships\MembershipStoreRequest;
use App\Http\Requests\Memberships\MembershipUpdateRequest;
use App\Models\Membership;
use App\PaymentTransaction;
use Illuminate\Http\Request;
class MembershipController extends Controller
{
private $membershipService;
private $paymentTransactionService;
public function __construct() {
$this->membershipService = new MembershipService();
$this->paymentTransactionService = new PaymentTransactionService();
}
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('memberships.list');
}
public function listMemberships(Request $request)
{
$page = ($request->start / $request->length) + 1;
$request->merge(['page' => $page]);
$orderBy = $request->columns[$request->order[0]['column']]['name'];
$orderDirection = $request->order[0]['dir'];
$response = Membership::orderBy($orderBy, $orderDirection)
->when($request->search['value'], function ($query) use ($request) {
foreach ($request->columns as $column) {
if (filter_var($column['searchable'], FILTER_VALIDATE_BOOLEAN)) {
$query->orWhere($column['name'], 'like', '%' . $request->search['value'] . '%');
}
}
})
->paginate();
return response()->json($response);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('memberships.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(MembershipStoreRequest $request)
{
$membership = Membership::create($request->validated());
if (!empty($request->tags)) {
$membership->tags()->sync($request->tags);
}
return $membership;
}
/**
* Display the specified resource.
*
* @param \App\Membership $membership
* @return \Illuminate\Http\Response
*/
public function show(Membership $membership)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Membership $membership
* @return \Illuminate\Http\Response
*/
public function edit(Membership $membership)
{
return view('memberships.edit', compact('membership'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Membership $membership
* @return \Illuminate\Http\Response
*/
public function update(MembershipUpdateRequest $request, Membership $membership)
{
$membership->update($request->validated());
if (!empty($request->tags)) {
$membership->tags()->sync($request->tags);
}
$membership->load('tags');
return $membership;
}
/**
* Remove the specified resource from storage.
*
* @param \App\Membership $membership
* @return \Illuminate\Http\Response
*/
public function destroy(Membership $membership)
{
//
}
public function dashboard()
{
return view('memberships.dashboard');
}
public function listMembershipDashboard(Request $request)
{
return $this->membershipService->queryDashboard($request);
}
public function validatePayment(Request $request, PaymentTransaction $paymentTransaction)
{
$this->paymentTransactionService->validatePayment($paymentTransaction);
return response()->json($paymentTransaction);
}
public function activeToogle(Request $request, Membership $membership)
{
$membership->active = !$membership->active;
$membership->save();
return $membership;
}
public function downloadReport(Request $request)
{
$reportData = $this->membershipService->queryDownloadReport($request);
$data = array_map(function ($row) {
$row['is_renewal'] = $row['is_renewal'] ? 'Renovación' : 'Nueva';
$row['auto_renew'] = $row['auto_renew'] ? 'Si' : 'No';
return $row;
}, $reportData->toArray());
return response()->json(['data' => $data]);
}
}