Current File : /home/getxxhzo/app.genicards.com/app/Livewire/CashPaymentTable.php
<?php

namespace App\Livewire;

use App\Models\Plan;
use App\Models\User;
use App\Models\Subscription;
use Illuminate\Database\Eloquent\Builder;
use Rappasoft\LaravelLivewireTables\Views\Column;

class CashPaymentTable extends LivewireTableComponent
{
    protected $model = Subscription::class;

    public function configure(): void
    {
        $this->setPrimaryKey('id');
        $this->setPageName('cash-payment-table');
        $this->setDefaultSort('created_at', 'desc');
        $this->setColumnSelectStatus(false);
        $this->setQueryStringStatus(false);
        $this->resetPage('cash-payment-table');

        $this->setTdAttributes(function (Column $column) {
            if ($column->isField('status')) {
                return [
                    'class' => 'text-center',
                ];
            }
            return [];
        });

        $this->setThAttributes(function (Column $column) {
            if ($column->isField('status')) {
                return [
                    'class' => 'text-center',
                ];
            }
            if ($column->isField('plan_amount')) {
                return [
                    'class' => 'plan-amount',
                ];
            }

            if ($column->isField('payable_amount')) {
                return [
                    'class' => 'plan-amount px-10',
                ];
            }

            if ($column->isField('starts_at')) {
                return [
                    'class' => 'date-align',
                ];
            }

            if ($column->isField('ends_at')) {
                return [
                    'class' => 'date-align',
                ];
            }

            if ($column->isField('status')) {
                return [
                    'class' => 'text-center',
                ];
            }

            if ($column->isField('status')) {
                return [
                    'class' => 'd-flex justify-content-center',
                ];
            }

            return [];
        });
    }

    public function columns(): array
    {
        return [
            Column::make(__('messages.vcard.user_name'), 'tenant.user.first_name')
                ->searchable(function (Builder $query, $value) {
                    return $query->whereHas('tenant.user', function ($q) use ($value) {
                        $q->whereRaw("TRIM(CONCAT(first_name,' ',last_name,' ')) like '%{$value}%'");
                    });
                })->sortable(function (Builder $query, $direction) {
                    return $query->orderBy(
                        User::select('first_name')
                            ->whereColumn('subscriptions.tenant_id', 'users.tenant_id'),
                        $direction
                    );
                }),
            Column::make(__('messages.subscription.plan_name'), 'plan.name')
                ->searchable()
                ->sortable(function (Builder $query, $direction) {
                    return $query->orderBy(
                        Plan::select('name')
                            ->whereColumn('subscriptions.plan_id', 'plans.id'),
                        $direction
                    );
                }),
            Column::make(__('messages.subscription.plan_price'), 'plan_amount')
                ->sortable()->view('sadmin.planPyment.columns.plan_price'),
            Column::make(__('messages.subscription.payable_amount'), 'payable_amount')
                ->sortable()->view('sadmin.planPyment.columns.payable_amount'),
            Column::make(__('messages.subscription.start_date'), 'starts_at')
                ->sortable()->view('sadmin.planPyment.columns.start_date'),
            Column::make(__('messages.subscription.end_date'), 'ends_at')
                ->sortable()->view('sadmin.planPyment.columns.end_date'),
            Column::make(__('messages.mail.attachment'), 'id')->view('sadmin.planPyment.columns.attachment'),
            Column::make(__('messages.mail.notes'), 'notes')->view('sadmin.planPyment.columns.notes'),
            Column::make(__('messages.common.status'), 'status')->view('sadmin.planPyment.columns.status'),
            Column::make('payment_type','payment_type')->hideIf(1),
            Column::make('tenant_id','tenant_id')->hideIf(1),
            Column::make('created_at','created_at')->hideIf(1),
        ];
    }
    public function builder(): Builder
    {
        return Subscription::with(['tenant.user', 'plan.currency'])->whereNotNull('payment_type')->select('subscriptions.*');
    }
    public function placeholder()
    {
        return view('lazy_loading.without-listing-skelecton');
    }
}