mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-04 08:17:32 -05:00 
			
		
		
		
	Add subscription filters
This commit is contained in:
		
							parent
							
								
									263e08bf04
								
							
						
					
					
						commit
						dc4e0b9c96
					
				
							
								
								
									
										129
									
								
								app/Filters/SubscriptionFilters.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										129
									
								
								app/Filters/SubscriptionFilters.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,129 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Invoice Ninja (https://invoiceninja.com).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @link https://github.com/invoiceninja/invoiceninja source repository
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @copyright Copyright (c) 2022. Invoice Ninja LLC (https://invoiceninja.com)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @license https://www.elastic.co/licensing/elastic-license
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Filters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Models\User;
 | 
				
			||||||
 | 
					use App\Models\Webhook;
 | 
				
			||||||
 | 
					use Illuminate\Database\Eloquent\Builder;
 | 
				
			||||||
 | 
					use Illuminate\Support\Facades\DB;
 | 
				
			||||||
 | 
					use Illuminate\Support\Facades\Gate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * SubscriptionFilters.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class SubscriptionFilters extends QueryFilters
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Filter based on search text.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param string query filter
 | 
				
			||||||
 | 
					     * @return Builder
 | 
				
			||||||
 | 
					     * @deprecated
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function filter(string $filter = '') : Builder
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (strlen($filter) == 0) {
 | 
				
			||||||
 | 
					            return $this->builder;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return  $this->builder->where(function ($query) use ($filter) {
 | 
				
			||||||
 | 
					            $query->where('name', 'like', '%'.$filter.'%');
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Filters the list based on the status
 | 
				
			||||||
 | 
					     * archived, active, deleted.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param string filter
 | 
				
			||||||
 | 
					     * @return Builder
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function status(string $filter = '') : Builder
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        if (strlen($filter) == 0) {
 | 
				
			||||||
 | 
					            return $this->builder;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $table = 'subscriptions';
 | 
				
			||||||
 | 
					        $filters = explode(',', $filter);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $this->builder->where(function ($query) use ($filters, $table) {
 | 
				
			||||||
 | 
					            $query->whereNull($table.'.id');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (in_array(parent::STATUS_ACTIVE, $filters)) {
 | 
				
			||||||
 | 
					                $query->orWhereNull($table.'.deleted_at');
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (in_array(parent::STATUS_ARCHIVED, $filters)) {
 | 
				
			||||||
 | 
					                $query->orWhere(function ($query) use ($table) {
 | 
				
			||||||
 | 
					                    $query->whereNotNull($table.'.deleted_at');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    if (! in_array($table, ['users'])) {
 | 
				
			||||||
 | 
					                        $query->where($table.'.is_deleted', '=', 0);
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (in_array(parent::STATUS_DELETED, $filters)) {
 | 
				
			||||||
 | 
					                $query->orWhere($table.'.is_deleted', '=', 1);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Sorts the list based on $sort.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param string sort formatted as column|asc
 | 
				
			||||||
 | 
					     * @return Builder
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function sort(string $sort) : Builder
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $sort_col = explode('|', $sort);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $this->builder->orderBy($sort_col[0], $sort_col[1]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Returns the base query.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param int company_id
 | 
				
			||||||
 | 
					     * @param User $user
 | 
				
			||||||
 | 
					     * @return Builder
 | 
				
			||||||
 | 
					     * @deprecated
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function baseQuery(int $company_id, User $user) : Builder
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $query = DB::table('subscriptions')
 | 
				
			||||||
 | 
					            ->join('companies', 'companies.id', '=', 'subscriptions.company_id')
 | 
				
			||||||
 | 
					            ->where('subscriptions.company_id', '=', $company_id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        /*
 | 
				
			||||||
 | 
					         * If the user does not have permissions to view all invoices
 | 
				
			||||||
 | 
					         * limit the user to only the invoices they have created
 | 
				
			||||||
 | 
					         */
 | 
				
			||||||
 | 
					        if (Gate::denies('view-list', Webhook::class)) {
 | 
				
			||||||
 | 
					            $query->where('subscriptions.user_id', '=', $user->id);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $query;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Filters the query by the users company ID.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return Illuminate\Database\Query\Builder
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function entityFilter()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return $this->builder->company();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -80,9 +80,9 @@ class SubscriptionController extends BaseController
 | 
				
			|||||||
     *       ),
 | 
					     *       ),
 | 
				
			||||||
     *     )
 | 
					     *     )
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function index(): \Illuminate\Http\Response
 | 
					    public function index(SubscriptionFilters $filters): \Illuminate\Http\Response
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $subscriptions = Subscription::query()->company();
 | 
					        $subscriptions = Subscription::filter($filters);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $this->listResponse($subscriptions);
 | 
					        return $this->listResponse($subscriptions);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace App\Models;
 | 
					namespace App\Models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Models\Filterable;
 | 
				
			||||||
use App\Models\RecurringInvoice;
 | 
					use App\Models\RecurringInvoice;
 | 
				
			||||||
use App\Services\Subscription\SubscriptionService;
 | 
					use App\Services\Subscription\SubscriptionService;
 | 
				
			||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
 | 
					use Illuminate\Database\Eloquent\Factories\HasFactory;
 | 
				
			||||||
@ -19,7 +20,7 @@ use Illuminate\Database\Eloquent\SoftDeletes;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class Subscription extends BaseModel
 | 
					class Subscription extends BaseModel
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    use HasFactory, SoftDeletes;
 | 
					    use HasFactory, SoftDeletes, Filterable;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    protected $hidden = [
 | 
					    protected $hidden = [
 | 
				
			||||||
        'id',
 | 
					        'id',
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user