Files
cheerstothe_season_2.0/app/Exports/ReportExports.php
sayaliparab 57c4820219 ReportExcel
2024-07-15 19:11:04 +05:30

184 lines
5.7 KiB
PHP

<?php
namespace App\Exports;
use App\Models\IamPrincipal;
use App\Models\RedeemRestaurant;
use App\Models\Subscriptions;
use App\Models\ReferralUsers;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
class ReportExports implements FromView
{
protected $reportType;
protected $states;
protected $startDate;
protected $endDate;
protected $restaurants;
public function __construct($reportType, $states, $startDate, $endDate, $restaurants = [])
{
$this->reportType = $reportType;
$this->states = $states;
$this->startDate = $startDate;
$this->endDate = $endDate;
$this->restaurants = $restaurants;
}
public function view(): View
{
$data = collect();
if ($this->reportType === 'Total Subscribed') {
$query = Subscriptions::query();
if (!empty($this->states)) {
$query->whereHas('iamPrincipal', function ($q) {
$q->whereIn('state_xid', $this->states);
});
}
if ($this->startDate) {
$query->whereDate('created_at', '>=', $this->startDate);
}
if ($this->endDate) {
$query->whereDate('created_at', '<=', $this->endDate);
}
$data = $query->get();
// dd($data);
} elseif ($this->reportType === 'Total Users') {
$query = IamPrincipal::query()->where('principal_type_xid',3);
if (!empty($this->states)) {
$query->whereIn('state_xid', $this->states);
}
if ($this->startDate) {
$query->whereDate('created_at', '>=', $this->startDate);
}
if ($this->endDate) {
$query->whereDate('created_at', '<=', $this->endDate);
}
$data = $query->get();
} elseif ($this->reportType === 'Redemptions') {
$query = RedeemRestaurant::with(['restaurant', 'customer'])->where('is_redeem', 0);
if (!empty($this->states)) {
$query->whereHas('customer', function ($q) {
$q->whereIn('state_xid', $this->states);
});
}
if ($this->startDate) {
$query->whereDate('created_at', '>=', $this->startDate);
}
if ($this->endDate) {
$query->whereDate('created_at', '<=', $this->endDate);
}
$data = $query->get();
} elseif ($this->reportType === 'Redemptions for Specific Restaurants') {
$query = RedeemRestaurant::with('restaurant', 'customer');
if (!empty($this->restaurants)) {
$query->whereIn('manage_restaurants_xid', $this->restaurants);
}
if ($this->startDate) {
$query->whereDate('created_at', '>=', $this->startDate);
}
if ($this->endDate) {
$query->whereDate('created_at', '<=', $this->endDate);
}
$data = $query->get();
} elseif ($this->reportType === 'Subscriptions Cancelled') {
$query = Subscriptions::query()->where('is_cancelled_subscription', 1);
if (!empty($this->states)) {
$query->whereHas('iamPrincipal', function ($q) {
$q->whereIn('state_xid', $this->states);
});
}
if ($this->startDate) {
$query->whereDate('created_at', '>=', $this->startDate);
}
if ($this->endDate) {
$query->whereDate('created_at', '<=', $this->endDate);
}
$data = $query->get();
}
elseif ($this->reportType === 'Subscriptions Cancelled') {
$query = Subscriptions::with('iamPrincipal')->where('is_cancelled_subscription', 1);
if (!empty($this->states)) {
$query->whereHas('iamPrincipal', function ($q) {
$q->whereIn('state_xid', $this->states);
});
}
if ($this->startDate) {
$query->whereDate('created_at', '>=', $this->startDate);
}
if ($this->endDate) {
$query->whereDate('created_at', '<=', $this->endDate);
}
$data = $query->get();
}
elseif ($this->reportType === 'Referrals Made') {
$query = ReferralUsers::query()
->with(['referredUser', 'referredUser.state'])
->whereHas('referredUser', function ($query) {
$query->whereIn('state_xid', $this->states);
});
if (!empty($this->startDate)) {
$query->whereDate('referred_date_time', '>=', $this->startDate);
}
if (!empty($this->endDate)) {
$query->whereDate('referred_date_time', '<=', $this->endDate);
}
$data = $query->get();
}
elseif ($this->reportType === 'Referees Joined') {
$query = ReferralUsers::query()
->with(['refeersUser', 'refeersUser.state'])
->whereHas('refeersUser', function ($query) {
$query->whereIn('state_xid', $this->states);
});
if (!empty($this->startDate)) {
$query->whereDate('referred_date_time', '>=', $this->startDate);
}
if (!empty($this->endDate)) {
$query->whereDate('referred_date_time', '<=', $this->endDate);
}
$data = $query->get();
}
return view('exports.report', [
'data' => $data,
'reportType' => $this->reportType
]);
}
}