mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-01 20:17:35 -04: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); | ||||
|     } | ||||
|  | ||||
| @ -11,6 +11,7 @@ | ||||
| 
 | ||||
| namespace App\Models; | ||||
| 
 | ||||
| use App\Models\Filterable; | ||||
| use App\Models\RecurringInvoice; | ||||
| use App\Services\Subscription\SubscriptionService; | ||||
| use Illuminate\Database\Eloquent\Factories\HasFactory; | ||||
| @ -19,7 +20,7 @@ use Illuminate\Database\Eloquent\SoftDeletes; | ||||
| 
 | ||||
| class Subscription extends BaseModel | ||||
| { | ||||
|     use HasFactory, SoftDeletes; | ||||
|     use HasFactory, SoftDeletes, Filterable; | ||||
| 
 | ||||
|     protected $hidden = [ | ||||
|         'id', | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user