mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-11-03 22:07:33 -05:00 
			
		
		
		
	Update v5-dev branch
This commit is contained in:
		
						commit
						25bfe755c4
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -35,3 +35,4 @@ nbproject
 | 
				
			|||||||
public/test.pdf
 | 
					public/test.pdf
 | 
				
			||||||
public/storage/test.pdf
 | 
					public/storage/test.pdf
 | 
				
			||||||
/Modules
 | 
					/Modules
 | 
				
			||||||
 | 
					_ide_helper_models.php
 | 
				
			||||||
@ -114,12 +114,33 @@ class CreateSingleAccount extends Command
 | 
				
			|||||||
            'portal_domain' => 'http://ninja.test:8000',
 | 
					            'portal_domain' => 'http://ninja.test:8000',
 | 
				
			||||||
            'track_inventory' => true
 | 
					            'track_inventory' => true
 | 
				
			||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
 | 
					        $faker = \Faker\Factory::create();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $settings = $company->settings;
 | 
					        $settings = $company->settings;
 | 
				
			||||||
        $settings->invoice_terms = 'Default company invoice terms';
 | 
					        $settings->invoice_terms = 'Default company invoice terms';
 | 
				
			||||||
        $settings->quote_terms = 'Default company quote terms';
 | 
					        $settings->quote_terms = 'Default company quote terms';
 | 
				
			||||||
        $settings->invoice_footer = 'Default invoice footer';
 | 
					        $settings->invoice_footer = 'Default invoice footer';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $settings->company_logo = 'https://pdf.invoicing.co/favicon-v2.png';
 | 
				
			||||||
 | 
					        $settings->name = $faker->name();
 | 
				
			||||||
 | 
					        $settings->email = $faker->safeEmail();
 | 
				
			||||||
 | 
					        $settings->phone = $faker->phoneNumber();
 | 
				
			||||||
 | 
					        $settings->website = $faker->url();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $settings->address1 = $faker->streetName();
 | 
				
			||||||
 | 
					        $settings->address2 = $faker->streetAddress();
 | 
				
			||||||
 | 
					        $settings->city = $faker->city();
 | 
				
			||||||
 | 
					        $settings->state = $faker->state();
 | 
				
			||||||
 | 
					        $settings->postal_code = $faker->postcode();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $settings->country_id = '840';
 | 
				
			||||||
 | 
					        $settings->vat_number = 'vat number';
 | 
				
			||||||
 | 
					        $settings->id_number = 'id number';
 | 
				
			||||||
 | 
					        $settings->use_credits_payment = 'always';
 | 
				
			||||||
 | 
					        $settings->timezone_id = '1';
 | 
				
			||||||
 | 
					        $settings->entity_send_time = 0;
 | 
				
			||||||
 | 
					        $settings->name = $faker->name();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $company->settings = $settings;
 | 
					        $company->settings = $settings;
 | 
				
			||||||
        $company->client_registration_fields = ClientRegistrationFields::generate();
 | 
					        $company->client_registration_fields = ClientRegistrationFields::generate();
 | 
				
			||||||
        $company->save();
 | 
					        $company->save();
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										65
									
								
								app/Filters/SchedulerFilters.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								app/Filters/SchedulerFilters.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,65 @@
 | 
				
			|||||||
 | 
					<?php
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * Invoice Ninja (https://invoiceninja.com).
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @link https://github.com/invoiceninja/invoiceninja source repository
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @copyright Copyright (c) 2023. Invoice Ninja LLC (https://invoiceninja.com)
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @license https://www.elastic.co/licensing/elastic-license
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Filters;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Illuminate\Database\Eloquent\Builder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * SchedulerFilters.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					class SchedulerFilters 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.'%');
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (!is_array($sort_col) || count($sort_col) != 2) {
 | 
				
			||||||
 | 
					            return $this->builder;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return $this->builder->orderBy($sort_col[0], $sort_col[1]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Filters the query by the users company ID.
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return Builder
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function entityFilter(): Builder
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return $this->builder->company();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -12,21 +12,24 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace App\Http\Controllers\ClientPortal;
 | 
					namespace App\Http\Controllers\ClientPortal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use App\Factory\PaymentFactory;
 | 
					 | 
				
			||||||
use App\Http\Controllers\Controller;
 | 
					 | 
				
			||||||
use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest;
 | 
					 | 
				
			||||||
use App\Models\CompanyGateway;
 | 
					 | 
				
			||||||
use App\Models\Invoice;
 | 
					use App\Models\Invoice;
 | 
				
			||||||
use App\Models\Payment;
 | 
					use App\Models\Payment;
 | 
				
			||||||
 | 
					use Illuminate\View\View;
 | 
				
			||||||
 | 
					use App\Models\GatewayType;
 | 
				
			||||||
use App\Models\PaymentHash;
 | 
					use App\Models\PaymentHash;
 | 
				
			||||||
 | 
					use App\Models\PaymentType;
 | 
				
			||||||
 | 
					use Illuminate\Http\Request;
 | 
				
			||||||
 | 
					use App\Models\CompanyGateway;
 | 
				
			||||||
 | 
					use App\Factory\PaymentFactory;
 | 
				
			||||||
 | 
					use App\Utils\Traits\MakesHash;
 | 
				
			||||||
 | 
					use App\Utils\Traits\MakesDates;
 | 
				
			||||||
 | 
					use App\Http\Controllers\Controller;
 | 
				
			||||||
 | 
					use Illuminate\Http\RedirectResponse;
 | 
				
			||||||
 | 
					use Illuminate\Contracts\View\Factory;
 | 
				
			||||||
 | 
					use App\PaymentDrivers\Stripe\BankTransfer;
 | 
				
			||||||
use App\Services\ClientPortal\InstantPayment;
 | 
					use App\Services\ClientPortal\InstantPayment;
 | 
				
			||||||
use App\Services\Subscription\SubscriptionService;
 | 
					use App\Services\Subscription\SubscriptionService;
 | 
				
			||||||
use App\Utils\Traits\MakesDates;
 | 
					use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest;
 | 
				
			||||||
use App\Utils\Traits\MakesHash;
 | 
					 | 
				
			||||||
use Illuminate\Contracts\View\Factory;
 | 
					 | 
				
			||||||
use Illuminate\Http\RedirectResponse;
 | 
					 | 
				
			||||||
use Illuminate\Http\Request;
 | 
					 | 
				
			||||||
use Illuminate\View\View;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * Class PaymentController.
 | 
					 * Class PaymentController.
 | 
				
			||||||
@ -56,9 +59,35 @@ class PaymentController extends Controller
 | 
				
			|||||||
    public function show(Request $request, Payment $payment)
 | 
					    public function show(Request $request, Payment $payment)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $payment->load('invoices');
 | 
					        $payment->load('invoices');
 | 
				
			||||||
 | 
					        $bank_details = false;
 | 
				
			||||||
 | 
					        $payment_intent = false;
 | 
				
			||||||
 | 
					        $data = false;
 | 
				
			||||||
 | 
					        $gateway = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if($payment->gateway_type_id == GatewayType::DIRECT_DEBIT && $payment->type_id == PaymentType::DIRECT_DEBIT){
 | 
				
			||||||
 | 
					           
 | 
				
			||||||
 | 
					            if (method_exists($payment->company_gateway->driver($payment->client), 'getPaymentIntent')) {
 | 
				
			||||||
 | 
					                $stripe = $payment->company_gateway->driver($payment->client);
 | 
				
			||||||
 | 
					                $payment_intent = $stripe->getPaymentIntent($payment->transaction_reference);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                $bt = new BankTransfer($stripe);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                match($payment->currency->code){
 | 
				
			||||||
 | 
					                    'MXN' => $data = $bt->formatDataforMx($payment_intent),
 | 
				
			||||||
 | 
					                    'EUR' => $data = $bt->formatDataforEur($payment_intent),
 | 
				
			||||||
 | 
					                    'JPY' => $data = $bt->formatDataforJp($payment_intent),
 | 
				
			||||||
 | 
					                    'GBP' => $data = $bt->formatDataforUk($payment_intent),
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                $gateway = $stripe;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        return $this->render('payments.show', [
 | 
					        return $this->render('payments.show', [
 | 
				
			||||||
            'payment' => $payment,
 | 
					            'payment' => $payment,
 | 
				
			||||||
 | 
					            'bank_details' => $payment_intent ? $data : false,
 | 
				
			||||||
 | 
					            'currency' => strtolower($payment->currency->code),
 | 
				
			||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -12,7 +12,8 @@
 | 
				
			|||||||
namespace App\Http\Controllers;
 | 
					namespace App\Http\Controllers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use App\Factory\SchedulerFactory;
 | 
					use App\Factory\SchedulerFactory;
 | 
				
			||||||
use App\Http\Requests\Task\DestroySchedulerRequest;
 | 
					use App\Filters\SchedulerFilters;
 | 
				
			||||||
 | 
					use App\Http\Requests\TaskScheduler\DestroySchedulerRequest;
 | 
				
			||||||
use App\Http\Requests\TaskScheduler\CreateSchedulerRequest;
 | 
					use App\Http\Requests\TaskScheduler\CreateSchedulerRequest;
 | 
				
			||||||
use App\Http\Requests\TaskScheduler\ShowSchedulerRequest;
 | 
					use App\Http\Requests\TaskScheduler\ShowSchedulerRequest;
 | 
				
			||||||
use App\Http\Requests\TaskScheduler\StoreSchedulerRequest;
 | 
					use App\Http\Requests\TaskScheduler\StoreSchedulerRequest;
 | 
				
			||||||
@ -58,9 +59,9 @@ class TaskSchedulerController extends BaseController
 | 
				
			|||||||
     *       ),
 | 
					     *       ),
 | 
				
			||||||
     *     )
 | 
					     *     )
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public function index()
 | 
					    public function index(SchedulerFilters $filters)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $schedulers = Scheduler::where('company_id', auth()->user()->company()->id);
 | 
					        $schedulers = Scheduler::filter($filters);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $this->listResponse($schedulers);
 | 
					        return $this->listResponse($schedulers);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -29,8 +29,15 @@ class UploadBankIntegrationRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
 | 
				
			|||||||
@ -29,8 +29,15 @@ class UploadBankTransactionRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
 | 
				
			|||||||
@ -38,14 +38,15 @@ class StoreClientRequest extends Request
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public function rules()
 | 
					    public function rules()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (isset($this->number)) {
 | 
					        if (isset($this->number)) {
 | 
				
			||||||
 | 
				
			|||||||
@ -38,14 +38,15 @@ class UpdateClientRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        /* Ensure we have a client name, and that all emails are unique*/
 | 
					        /* Ensure we have a client name, and that all emails are unique*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $rules['company_logo'] = 'mimes:jpeg,jpg,png,gif|max:10000';
 | 
					        $rules['company_logo'] = 'mimes:jpeg,jpg,png,gif|max:10000';
 | 
				
			||||||
 | 
				
			|||||||
@ -29,8 +29,15 @@ class UploadClientRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
 | 
				
			|||||||
@ -29,8 +29,15 @@ class UploadCompanyRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
 | 
				
			|||||||
@ -43,14 +43,15 @@ class StoreCreditRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id;
 | 
					        $rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id;
 | 
				
			||||||
 | 
				
			|||||||
@ -41,15 +41,16 @@ class UpdateCreditRequest extends Request
 | 
				
			|||||||
    public function rules()
 | 
					    public function rules()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->number) {
 | 
					        if ($this->number) {
 | 
				
			||||||
 | 
				
			|||||||
@ -29,8 +29,15 @@ class UploadCreditRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
 | 
				
			|||||||
@ -46,6 +46,9 @@ class UpdateExpenseRequest extends Request
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $rules['category_id'] = 'bail|sometimes|nullable|exists:expense_categories,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
 | 
					        $rules['category_id'] = 'bail|sometimes|nullable|exists:expense_categories,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
 | 
				
			||||||
 | 
					        $rules['transaction_id'] = 'bail|sometimes|nullable|exists:bank_transactions,id,company_id,'.auth()->user()->company()->id;
 | 
				
			||||||
 | 
					        $rules['invoice_id'] = 'bail|sometimes|nullable|exists:invoices,id,company_id,'.auth()->user()->company()->id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $this->globalRules($rules);
 | 
					        return $this->globalRules($rules);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -29,8 +29,15 @@ class UploadExpenseRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
 | 
				
			|||||||
@ -29,10 +29,17 @@ class UploadGroupSettingRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -37,24 +37,15 @@ class StoreInvoiceRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if ($this->input('file') && is_array($this->input('file'))) {
 | 
					 | 
				
			||||||
            $documents = count($this->input('file'));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					 | 
				
			||||||
                $rules['file.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        } elseif ($this->input('file')) {
 | 
					 | 
				
			||||||
            $rules['file'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
 | 
					        $rules['client_id'] = 'bail|required|exists:clients,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
 | 
				
			||||||
 | 
				
			|||||||
@ -39,14 +39,15 @@ class UpdateInvoiceRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $rules['id'] = new LockedInvoiceRule($this->invoice);
 | 
					        $rules['id'] = new LockedInvoiceRule($this->invoice);
 | 
				
			||||||
 | 
				
			|||||||
@ -29,14 +29,22 @@ class UploadInvoiceRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('file')) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
            $rules['file'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function prepareForValidation()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -113,16 +113,17 @@ class StorePaymentRequest extends Request
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -38,23 +38,23 @@ class UpdatePaymentRequest extends Request
 | 
				
			|||||||
        $rules = [
 | 
					        $rules = [
 | 
				
			||||||
            'invoices' => ['array', new PaymentAppliedValidAmount, new ValidCreditsPresentRule($this->all())],
 | 
					            'invoices' => ['array', new PaymentAppliedValidAmount, new ValidCreditsPresentRule($this->all())],
 | 
				
			||||||
            'invoices.*.invoice_id' => 'distinct',
 | 
					            'invoices.*.invoice_id' => 'distinct',
 | 
				
			||||||
            'documents' => 'mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx',
 | 
					 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->number) {
 | 
					        if ($this->number) {
 | 
				
			||||||
            $rules['number'] = Rule::unique('payments')->where('company_id', auth()->user()->company()->id)->ignore($this->payment->id);
 | 
					            $rules['number'] = Rule::unique('payments')->where('company_id', auth()->user()->company()->id)->ignore($this->payment->id);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -29,8 +29,15 @@ class UploadPaymentRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
 | 
				
			|||||||
@ -28,14 +28,15 @@ class StoreProductRequest extends Request
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public function rules()
 | 
					    public function rules()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $rules['cost'] = 'sometimes|numeric';
 | 
					        $rules['cost'] = 'sometimes|numeric';
 | 
				
			||||||
 | 
				
			|||||||
@ -31,16 +31,17 @@ class UpdateProductRequest extends Request
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    public function rules()
 | 
					    public function rules()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        $rules['cost'] = 'numeric';
 | 
					        $rules['cost'] = 'numeric';
 | 
				
			||||||
        $rules['price'] = 'numeric';
 | 
					        $rules['price'] = 'numeric';
 | 
				
			||||||
        $rules['quantity'] = 'numeric';
 | 
					        $rules['quantity'] = 'numeric';
 | 
				
			||||||
 | 
				
			|||||||
@ -28,9 +28,15 @@ class UploadProductRequest extends Request
 | 
				
			|||||||
    public function rules()
 | 
					    public function rules()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace App\Http\Requests\Project;
 | 
					namespace App\Http\Requests\Project;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Models\Project;
 | 
				
			||||||
use App\Http\Requests\Request;
 | 
					use App\Http\Requests\Request;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CreateProjectRequest extends Request
 | 
					class CreateProjectRequest extends Request
 | 
				
			||||||
@ -22,6 +23,7 @@ class CreateProjectRequest extends Request
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function authorize() : bool
 | 
					    public function authorize() : bool
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return auth()->user()->isAdmin();
 | 
					        return auth()->user()->can('create', Project::class);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -22,6 +22,6 @@ class DestroyProjectRequest extends Request
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function authorize() : bool
 | 
					    public function authorize() : bool
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return auth()->user()->isAdmin();
 | 
					        return auth()->user()->can('edit', $this->project);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -22,7 +22,7 @@ class EditProjectRequest extends Request
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function authorize() : bool
 | 
					    public function authorize() : bool
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return auth()->user()->isAdmin();
 | 
					        return auth()->user()->can('edit', $this->project);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -22,7 +22,9 @@ class ShowProjectRequest extends Request
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function authorize() : bool
 | 
					    public function authorize() : bool
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return auth()->user()->isAdmin();
 | 
					        // return auth()->user()->isAdmin();
 | 
				
			||||||
 | 
					        return auth()->user()->can('view', $this->project);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
 | 
				
			|||||||
@ -42,6 +42,17 @@ class StoreProjectRequest extends Request
 | 
				
			|||||||
            $rules['number'] = Rule::unique('projects')->where('company_id', auth()->user()->company()->id);
 | 
					            $rules['number'] = Rule::unique('projects')->where('company_id', auth()->user()->company()->id);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        return $this->globalRules($rules);
 | 
					        return $this->globalRules($rules);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -37,6 +37,17 @@ class UpdateProjectRequest extends Request
 | 
				
			|||||||
            $rules['number'] = Rule::unique('projects')->where('company_id', auth()->user()->company()->id)->ignore($this->project->id);
 | 
					            $rules['number'] = Rule::unique('projects')->where('company_id', auth()->user()->company()->id)->ignore($this->project->id);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $this->globalRules($rules);
 | 
					        return $this->globalRules($rules);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -29,8 +29,15 @@ class UploadProjectRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
 | 
				
			|||||||
@ -47,6 +47,17 @@ class StorePurchaseOrderRequest extends Request
 | 
				
			|||||||
        $rules['is_amount_discount'] = ['boolean'];
 | 
					        $rules['is_amount_discount'] = ['boolean'];
 | 
				
			||||||
        $rules['line_items'] = 'array';
 | 
					        $rules['line_items'] = 'array';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -50,6 +50,17 @@ class UpdatePurchaseOrderRequest extends Request
 | 
				
			|||||||
        $rules['discount'] = 'sometimes|numeric';
 | 
					        $rules['discount'] = 'sometimes|numeric';
 | 
				
			||||||
        $rules['is_amount_discount'] = ['boolean'];
 | 
					        $rules['is_amount_discount'] = ['boolean'];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -29,10 +29,17 @@ class UploadPurchaseOrderRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -39,16 +39,17 @@ class StoreQuoteRequest extends Request
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        $rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id;
 | 
					        $rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        $rules['number'] = ['nullable', Rule::unique('quotes')->where('company_id', auth()->user()->company()->id)];
 | 
					        $rules['number'] = ['nullable', Rule::unique('quotes')->where('company_id', auth()->user()->company()->id)];
 | 
				
			||||||
        $rules['discount'] = 'sometimes|numeric';
 | 
					        $rules['discount'] = 'sometimes|numeric';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -37,16 +37,18 @@ class UpdateQuoteRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        if ($this->number) {
 | 
					        if ($this->number) {
 | 
				
			||||||
            $rules['number'] = Rule::unique('quotes')->where('company_id', auth()->user()->company()->id)->ignore($this->quote->id);
 | 
					            $rules['number'] = Rule::unique('quotes')->where('company_id', auth()->user()->company()->id)->ignore($this->quote->id);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -28,9 +28,16 @@ class UploadQuoteRequest extends Request
 | 
				
			|||||||
    public function rules()
 | 
					    public function rules()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
 | 
				
			|||||||
@ -48,6 +48,17 @@ class StoreRecurringExpenseRequest extends Request
 | 
				
			|||||||
        $rules['tax_amount2'] = 'numeric';
 | 
					        $rules['tax_amount2'] = 'numeric';
 | 
				
			||||||
        $rules['tax_amount3'] = 'numeric';
 | 
					        $rules['tax_amount3'] = 'numeric';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $this->globalRules($rules);
 | 
					        return $this->globalRules($rules);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -48,6 +48,17 @@ class UpdateRecurringExpenseRequest extends Request
 | 
				
			|||||||
        $rules['tax_amount3'] = 'numeric';
 | 
					        $rules['tax_amount3'] = 'numeric';
 | 
				
			||||||
        $rules['category_id'] = 'bail|nullable|sometimes|exists:expense_categories,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
 | 
					        $rules['category_id'] = 'bail|nullable|sometimes|exists:expense_categories,id,company_id,'.auth()->user()->company()->id.',is_deleted,0';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $this->globalRules($rules);
 | 
					        return $this->globalRules($rules);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -29,8 +29,15 @@ class UploadRecurringExpenseRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
 | 
				
			|||||||
@ -38,14 +38,15 @@ class StoreRecurringInvoiceRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id;
 | 
					        $rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id;
 | 
				
			||||||
 | 
				
			|||||||
@ -38,14 +38,15 @@ class UpdateRecurringInvoiceRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->number) {
 | 
					        if ($this->number) {
 | 
				
			||||||
 | 
				
			|||||||
@ -29,10 +29,17 @@ class UploadRecurringInvoiceRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -36,15 +36,16 @@ class StoreRecurringQuoteRequest extends Request
 | 
				
			|||||||
    public function rules()
 | 
					    public function rules()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id;
 | 
					        $rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id;
 | 
				
			||||||
 | 
				
			|||||||
@ -37,16 +37,17 @@ class UpdateRecurringQuoteRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents') && is_array($this->input('documents'))) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $documents = count($this->input('documents'));
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            foreach (range(0, $documents) as $index) {
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
                $rules['documents.'.$index] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
            }
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
        } elseif ($this->input('documents')) {
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        if ($this->number) {
 | 
					        if ($this->number) {
 | 
				
			||||||
            $rules['number'] = Rule::unique('recurring_quotes')->where('company_id', auth()->user()->company()->id)->ignore($this->recurring_quote->id);
 | 
					            $rules['number'] = Rule::unique('recurring_quotes')->where('company_id', auth()->user()->company()->id)->ignore($this->recurring_quote->id);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -29,10 +29,17 @@ class UploadRecurringQuoteRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -20,6 +20,7 @@ class Request extends FormRequest
 | 
				
			|||||||
    use MakesHash;
 | 
					    use MakesHash;
 | 
				
			||||||
    use RuntimeFormRequest;
 | 
					    use RuntimeFormRequest;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    protected $file_validation = 'sometimes|file|mimes:png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000';
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Get the validation rules that apply to the request.
 | 
					     * Get the validation rules that apply to the request.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
@ -124,6 +125,10 @@ class Request extends FormRequest
 | 
				
			|||||||
            $input['company_gateway_id'] = $this->decodePrimaryKey($input['company_gateway_id']);
 | 
					            $input['company_gateway_id'] = $this->decodePrimaryKey($input['company_gateway_id']);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (array_key_exists('transaction_id', $input) && is_string($input['transaction_id'])) {
 | 
				
			||||||
 | 
					            $input['transaction_id'] = $this->decodePrimaryKey($input['transaction_id']);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (array_key_exists('category_id', $input) && is_string($input['category_id'])) {
 | 
					        if (array_key_exists('category_id', $input) && is_string($input['category_id'])) {
 | 
				
			||||||
            $input['category_id'] = $this->decodePrimaryKey($input['category_id']);
 | 
					            $input['category_id'] = $this->decodePrimaryKey($input['category_id']);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
				
			|||||||
@ -58,6 +58,17 @@ class StoreTaskRequest extends Request
 | 
				
			|||||||
                $fail('Please correct overlapping values');
 | 
					                $fail('Please correct overlapping values');
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }];
 | 
					        }];
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $this->globalRules($rules);
 | 
					        return $this->globalRules($rules);
 | 
				
			||||||
 | 
				
			|||||||
@ -30,7 +30,6 @@ class UpdateTaskRequest extends Request
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function authorize() : bool
 | 
					    public function authorize() : bool
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        nlog("oioi");
 | 
					 | 
				
			||||||
        //prevent locked tasks from updating
 | 
					        //prevent locked tasks from updating
 | 
				
			||||||
        if ($this->task->invoice_id && $this->task->company->invoice_task_lock) {
 | 
					        if ($this->task->invoice_id && $this->task->company->invoice_task_lock) {
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
@ -67,6 +66,17 @@ class UpdateTaskRequest extends Request
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }];
 | 
					        }];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $this->globalRules($rules);
 | 
					        return $this->globalRules($rules);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -22,6 +22,6 @@ class DestroySchedulerRequest extends Request
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    public function authorize() : bool
 | 
					    public function authorize() : bool
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        return auth()->user()->isAdmin();
 | 
					        return auth()->user()->isAdmin() && $this->task_scheduler->company_id == auth()->user()->company()->id;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										10
									
								
								app/Http/Requests/Vendor/StoreVendorRequest.php
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										10
									
								
								app/Http/Requests/Vendor/StoreVendorRequest.php
									
									
									
									
										vendored
									
									
								
							@ -47,6 +47,16 @@ class StoreVendorRequest extends Request
 | 
				
			|||||||
        
 | 
					        
 | 
				
			||||||
        $rules['currency_id'] = 'bail|required|exists:currencies,id';
 | 
					        $rules['currency_id'] = 'bail|required|exists:currencies,id';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										11
									
								
								app/Http/Requests/Vendor/UpdateVendorRequest.php
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								app/Http/Requests/Vendor/UpdateVendorRequest.php
									
									
									
									
										vendored
									
									
								
							@ -44,6 +44,17 @@ class UpdateVendorRequest extends Request
 | 
				
			|||||||
        $rules['contacts.*.email'] = 'nullable|distinct';
 | 
					        $rules['contacts.*.email'] = 'nullable|distinct';
 | 
				
			||||||
        $rules['currency_id'] = 'bail|sometimes|exists:currencies,id';
 | 
					        $rules['currency_id'] = 'bail|sometimes|exists:currencies,id';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										11
									
								
								app/Http/Requests/Vendor/UploadVendorRequest.php
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										11
									
								
								app/Http/Requests/Vendor/UploadVendorRequest.php
									
									
									
									
										vendored
									
									
								
							@ -29,8 +29,15 @@ class UploadVendorRequest extends Request
 | 
				
			|||||||
    {
 | 
					    {
 | 
				
			||||||
        $rules = [];
 | 
					        $rules = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->input('documents')) {
 | 
					        if($this->file('documents') && is_array($this->file('documents')))
 | 
				
			||||||
            $rules['documents'] = 'file|mimes:csv,png,ai,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000';
 | 
					            $rules['documents.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        elseif($this->file('documents'))
 | 
				
			||||||
 | 
					            $rules['documents'] = $this->file_validation;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if ($this->file('file') && is_array($this->file('file'))) {
 | 
				
			||||||
 | 
					            $rules['file.*'] = $this->file_validation;
 | 
				
			||||||
 | 
					        } elseif ($this->file('file')) {
 | 
				
			||||||
 | 
					            $rules['file'] = $this->file_validation;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return $rules;
 | 
					        return $rules;
 | 
				
			||||||
 | 
				
			|||||||
@ -32,7 +32,8 @@ use Illuminate\Database\Eloquent\SoftDeletes;
 | 
				
			|||||||
class Scheduler extends BaseModel
 | 
					class Scheduler extends BaseModel
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    use SoftDeletes;
 | 
					    use SoftDeletes;
 | 
				
			||||||
 | 
					    use Filterable;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
    protected $fillable = [
 | 
					    protected $fillable = [
 | 
				
			||||||
        'name',
 | 
					        'name',
 | 
				
			||||||
        'frequency_id',
 | 
					        'frequency_id',
 | 
				
			||||||
 | 
				
			|||||||
@ -12,16 +12,17 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
namespace App\PaymentDrivers\Stripe;
 | 
					namespace App\PaymentDrivers\Stripe;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use App\Models\Payment;
 | 
					 | 
				
			||||||
use App\Models\SystemLog;
 | 
					 | 
				
			||||||
use Stripe\PaymentIntent;
 | 
					 | 
				
			||||||
use App\Models\GatewayType;
 | 
					 | 
				
			||||||
use App\Models\PaymentType;
 | 
					 | 
				
			||||||
use App\Jobs\Util\SystemLogger;
 | 
					 | 
				
			||||||
use App\Utils\Traits\MakesHash;
 | 
					 | 
				
			||||||
use App\Exceptions\PaymentFailed;
 | 
					use App\Exceptions\PaymentFailed;
 | 
				
			||||||
use App\PaymentDrivers\StripePaymentDriver;
 | 
					 | 
				
			||||||
use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest;
 | 
					use App\Http\Requests\ClientPortal\Payments\PaymentResponseRequest;
 | 
				
			||||||
 | 
					use App\Jobs\Util\SystemLogger;
 | 
				
			||||||
 | 
					use App\Models\GatewayType;
 | 
				
			||||||
 | 
					use App\Models\Payment;
 | 
				
			||||||
 | 
					use App\Models\PaymentType;
 | 
				
			||||||
 | 
					use App\Models\SystemLog;
 | 
				
			||||||
 | 
					use App\PaymentDrivers\StripePaymentDriver;
 | 
				
			||||||
 | 
					use App\Utils\Number;
 | 
				
			||||||
 | 
					use App\Utils\Traits\MakesHash;
 | 
				
			||||||
 | 
					use Stripe\PaymentIntent;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class BankTransfer
 | 
					class BankTransfer
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -68,7 +69,7 @@ class BankTransfer
 | 
				
			|||||||
        $data['return_url'] = $this->buildReturnUrl();
 | 
					        $data['return_url'] = $this->buildReturnUrl();
 | 
				
			||||||
        $data['gateway'] = $this->stripe;
 | 
					        $data['gateway'] = $this->stripe;
 | 
				
			||||||
        $data['client_secret'] = $intent ? $intent->client_secret : false;
 | 
					        $data['client_secret'] = $intent ? $intent->client_secret : false;
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        return render('gateways.stripe.bank_transfer.pay', $data);
 | 
					        return render('gateways.stripe.bank_transfer.pay', $data);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
@ -79,14 +80,12 @@ class BankTransfer
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    private function resolveBankType()
 | 
					    private function resolveBankType()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
					        return match ($this->stripe->client->currency()->code) {
 | 
				
			||||||
        return match($this->stripe->client->currency()->code){
 | 
					 | 
				
			||||||
            'GBP' =>  ['type' => 'gb_bank_transfer'],
 | 
					            'GBP' =>  ['type' => 'gb_bank_transfer'],
 | 
				
			||||||
            'EUR' => ['type' => 'eu_bank_transfer', 'eu_bank_transfer' => ['country' => $this->stripe->client->country->iso_3166_2]],
 | 
					            'EUR' => ['type' => 'eu_bank_transfer', 'eu_bank_transfer' => ['country' => $this->stripe->client->country->iso_3166_2]],
 | 
				
			||||||
            'JPY' => ['type' => 'jp_bank_transfer'],
 | 
					            'JPY' => ['type' => 'jp_bank_transfer'],
 | 
				
			||||||
            'MXN' => ['type' =>'mx_bank_transfer'],
 | 
					            'MXN' => ['type' =>'mx_bank_transfer'],
 | 
				
			||||||
        };
 | 
					        };
 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@ -103,59 +102,145 @@ class BankTransfer
 | 
				
			|||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * paymentResponse
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param  mixed $request
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public function paymentResponse(PaymentResponseRequest $request)
 | 
					    public function paymentResponse(PaymentResponseRequest $request)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        $this->stripe->init();
 | 
					        $this->stripe->init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $this->stripe->setPaymentHash($request->getPaymentHash());
 | 
					        $this->stripe->setPaymentHash($request->getPaymentHash());
 | 
				
			||||||
        $this->stripe->client = $this->stripe->payment_hash->fee_invoice->client;
 | 
					        $this->stripe->client = $this->stripe->payment_hash->fee_invoice->client;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if($request->payment_intent){
 | 
					        if ($request->payment_intent) {
 | 
				
			||||||
 | 
					 | 
				
			||||||
            $pi = \Stripe\PaymentIntent::retrieve(
 | 
					            $pi = \Stripe\PaymentIntent::retrieve(
 | 
				
			||||||
                $request->payment_intent,
 | 
					                $request->payment_intent,
 | 
				
			||||||
                $this->stripe->stripe_connect_auth
 | 
					                $this->stripe->stripe_connect_auth
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (in_array($pi->status, ['succeeded', 'processing'])) {
 | 
					            if (in_array($pi->status, ['succeeded', 'processing'])) {
 | 
				
			||||||
                return $this->processSuccesfulRedirect($pi);
 | 
					                $payment = $this->processSuccesfulRedirect($pi);
 | 
				
			||||||
 | 
					                redirect()->route('client.payments.show', ['payment' => $this->stripe->encodePrimaryKey($payment->id)]);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            /*  Create a pending payment */
 | 
					            /*  Create a pending payment */
 | 
				
			||||||
            if($pi->status == 'requires_action') {
 | 
					            if ($pi->status == 'requires_action' && $pi->next_action->type == 'display_bank_transfer_instructions') {
 | 
				
			||||||
 | 
					                match ($pi->next_action->display_bank_transfer_instructions->currency) {
 | 
				
			||||||
 | 
					                    'mxn' => $data['bank_details'] = $this->formatDataforMx($pi),
 | 
				
			||||||
 | 
					                    'gbp' => $data['bank_details'] = $this->formatDataforUk($pi),
 | 
				
			||||||
 | 
					                    'eur' => $data['bank_details'] = $this->formatDataforEur($pi),
 | 
				
			||||||
 | 
					                    'jpy' => $data['bank_details'] = $this->formatDataforJp($pi),
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                $payment = $this->processSuccesfulRedirect($pi);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                $data = [
 | 
					                return render('gateways.stripe.bank_transfer.bank_details_container', $data);
 | 
				
			||||||
                    'payment_method' => $pi->payment_method,
 | 
					            }
 | 
				
			||||||
                    'payment_type' => PaymentType::DIRECT_DEBIT,
 | 
					
 | 
				
			||||||
                    'amount' => $this->stripe->convertFromStripeAmount($this->stripe->payment_hash->data->stripe_amount, $this->stripe->client->currency()->precision, $this->stripe->client->currency()),
 | 
					            return $this->processUnsuccesfulRedirect();
 | 
				
			||||||
                    'transaction_reference' => $pi->id,
 | 
					        }
 | 
				
			||||||
                    'gateway_type_id' => GatewayType::DIRECT_DEBIT,
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * formatDataForUk
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param  PaymentIntent $pi
 | 
				
			||||||
 | 
					     * @return array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function formatDataForUk(PaymentIntent $pi): array
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return  [
 | 
				
			||||||
 | 
					                    'amount' => Number::formatMoney($this->stripe->convertFromStripeAmount($pi->next_action->display_bank_transfer_instructions->amount_remaining, $this->stripe->client->currency()->precision, $this->stripe->client->currency()), $this->stripe->client),
 | 
				
			||||||
 | 
					                    'account_holder_name' => $pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->sort_code->account_holder_name,
 | 
				
			||||||
 | 
					                    'account_number' => $pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->sort_code->account_number,
 | 
				
			||||||
 | 
					                    'sort_code' => $pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->sort_code->sort_code,
 | 
				
			||||||
 | 
					                    'reference' => $pi->next_action->display_bank_transfer_instructions->reference,
 | 
				
			||||||
 | 
					                    'description' => $pi->description,
 | 
				
			||||||
 | 
					                    'gateway'   => $this->stripe->company_gateway,
 | 
				
			||||||
 | 
					                    'currency' => $pi->next_action->display_bank_transfer_instructions->currency,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                ];
 | 
					                ];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * formatDataforMx
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param  PaymentIntent $pi
 | 
				
			||||||
 | 
					     * @return array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function formatDataforMx(PaymentIntent $pi): array
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return  [
 | 
				
			||||||
 | 
					                    'amount' => Number::formatMoney($this->stripe->convertFromStripeAmount($pi->next_action->display_bank_transfer_instructions->amount_remaining, $this->stripe->client->currency()->precision, $this->stripe->client->currency()), $this->stripe->client),
 | 
				
			||||||
 | 
					                    'account_holder_name' => $pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->spei->bank_name,
 | 
				
			||||||
 | 
					                    'account_number' => $pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->spei->bank_code,
 | 
				
			||||||
 | 
					                    'sort_code' => $pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->spei->clabe,
 | 
				
			||||||
 | 
					                    'reference' => $pi->next_action->display_bank_transfer_instructions->reference,
 | 
				
			||||||
 | 
					                    'description' => $pi->description,
 | 
				
			||||||
 | 
					                    'gateway'   => $this->stripe->company_gateway,
 | 
				
			||||||
 | 
					                    'currency' => $pi->next_action->display_bank_transfer_instructions->currency,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                $payment = $this->stripe->createPayment($data, Payment::STATUS_PENDING);
 | 
					                ];
 | 
				
			||||||
 | 
					 | 
				
			||||||
                SystemLogger::dispatch(
 | 
					 | 
				
			||||||
                    ['response' => $this->stripe->payment_hash->data, 'data' => $data],
 | 
					 | 
				
			||||||
                    SystemLog::CATEGORY_GATEWAY_RESPONSE,
 | 
					 | 
				
			||||||
                    SystemLog::EVENT_GATEWAY_SUCCESS,
 | 
					 | 
				
			||||||
                    SystemLog::TYPE_STRIPE,
 | 
					 | 
				
			||||||
                    $this->stripe->client,
 | 
					 | 
				
			||||||
                    $this->stripe->client->company,
 | 
					 | 
				
			||||||
                );
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                return redirect($pi->next_action->display_bank_transfer_instructions->hosted_instructions_url);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return $this->processUnsuccesfulRedirect();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function processSuccesfulRedirect($payment_intent)
 | 
					    
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * formatDataforEur
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param  mixed $pi
 | 
				
			||||||
 | 
					     * @return array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function formatDataforEur(PaymentIntent $pi): array
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return  [
 | 
				
			||||||
 | 
					                    'amount' => Number::formatMoney($this->stripe->convertFromStripeAmount($pi->next_action->display_bank_transfer_instructions->amount_remaining, $this->stripe->client->currency()->precision, $this->stripe->client->currency()), $this->stripe->client),
 | 
				
			||||||
 | 
					                    'account_holder_name' => $pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->iban->account_holder_name,
 | 
				
			||||||
 | 
					                    'account_number' => $pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->iban->iban,
 | 
				
			||||||
 | 
					                    'sort_code' => $pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->iban->bic,
 | 
				
			||||||
 | 
					                    'reference' => $pi->next_action->display_bank_transfer_instructions->reference,
 | 
				
			||||||
 | 
					                    'description' => $pi->description,
 | 
				
			||||||
 | 
					                    'gateway'   => $this->stripe->company_gateway,
 | 
				
			||||||
 | 
					                    'currency' => $pi->next_action->display_bank_transfer_instructions->currency,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param PaymentIntent $pi
 | 
				
			||||||
 | 
					     * @return array
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function formatDataforJp(PaymentIntent $pi): array
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        return  [
 | 
				
			||||||
 | 
					                    'amount' => Number::formatMoney($this->stripe->convertFromStripeAmount($pi->next_action->display_bank_transfer_instructions->amount_remaining, $this->stripe->client->currency()->precision, $this->stripe->client->currency()), $this->stripe->client),
 | 
				
			||||||
 | 
					                    'account_holder_name' => $pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->zengin->account_holder_name,
 | 
				
			||||||
 | 
					                    'account_number' => $pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->zengin->account_number,
 | 
				
			||||||
 | 
					                    'account_type' =>$pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->zengin->account_type,
 | 
				
			||||||
 | 
					                    'bank_code' =>$pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->zengin->bank_code,
 | 
				
			||||||
 | 
					                    'bank_name' =>$pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->zengin->bank_name,
 | 
				
			||||||
 | 
					                    'branch_code' =>$pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->zengin->branch_code,
 | 
				
			||||||
 | 
					                    'branch_name' =>$pi->next_action->display_bank_transfer_instructions->financial_addresses[0]->zengin->branch_name,
 | 
				
			||||||
 | 
					                    'reference' => $pi->next_action->display_bank_transfer_instructions->reference,
 | 
				
			||||||
 | 
					                    'description' => $pi->description,
 | 
				
			||||||
 | 
					                    'gateway'   => $this->stripe->company_gateway,
 | 
				
			||||||
 | 
					                    'currency' => $pi->next_action->display_bank_transfer_instructions->currency,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                ];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * processSuccesfulRedirect
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param  PaymentIntent $payment_intent
 | 
				
			||||||
 | 
					     * @return Payment
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function processSuccesfulRedirect(PaymentIntent $payment_intent): Payment
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $this->stripe->init();
 | 
					        $this->stripe->init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -168,7 +253,7 @@ class BankTransfer
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        ];
 | 
					        ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $payment = $this->stripe->createPayment($data, $payment_intent->status == 'processing' ? Payment::STATUS_PENDING : Payment::STATUS_COMPLETED);
 | 
					        $payment = $this->stripe->createPayment($data, $payment_intent->status == 'succeeded' ?  Payment::STATUS_COMPLETED : Payment::STATUS_PENDING);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        SystemLogger::dispatch(
 | 
					        SystemLogger::dispatch(
 | 
				
			||||||
            ['response' => $this->stripe->payment_hash->data, 'data' => $data],
 | 
					            ['response' => $this->stripe->payment_hash->data, 'data' => $data],
 | 
				
			||||||
@ -179,9 +264,14 @@ class BankTransfer
 | 
				
			|||||||
            $this->stripe->client->company,
 | 
					            $this->stripe->client->company,
 | 
				
			||||||
        );
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return redirect()->route('client.payments.show', ['payment' => $this->stripe->encodePrimaryKey($payment->id)]);
 | 
					        return  $payment;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * processUnsuccesfulRedirect
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @return void
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public function processUnsuccesfulRedirect()
 | 
					    public function processUnsuccesfulRedirect()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        $server_response = $this->stripe->payment_hash->data;
 | 
					        $server_response = $this->stripe->payment_hash->data;
 | 
				
			||||||
@ -204,6 +294,4 @@ class BankTransfer
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        throw new PaymentFailed('Failed to process the payment.', 500);
 | 
					        throw new PaymentFailed('Failed to process the payment.', 500);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
				
			|||||||
@ -52,7 +52,6 @@ use App\PaymentDrivers\Stripe\PRZELEWY24;
 | 
				
			|||||||
use App\PaymentDrivers\Stripe\BankTransfer;
 | 
					use App\PaymentDrivers\Stripe\BankTransfer;
 | 
				
			||||||
use App\PaymentDrivers\Stripe\Connect\Verify;
 | 
					use App\PaymentDrivers\Stripe\Connect\Verify;
 | 
				
			||||||
use App\PaymentDrivers\Stripe\ImportCustomers;
 | 
					use App\PaymentDrivers\Stripe\ImportCustomers;
 | 
				
			||||||
use App\PaymentDrivers\Stripe\UpdatePaymentMethods;
 | 
					 | 
				
			||||||
use App\Http\Requests\Payments\PaymentWebhookRequest;
 | 
					use App\Http\Requests\Payments\PaymentWebhookRequest;
 | 
				
			||||||
use Laracasts\Presenter\Exceptions\PresenterException;
 | 
					use Laracasts\Presenter\Exceptions\PresenterException;
 | 
				
			||||||
use App\PaymentDrivers\Stripe\Jobs\PaymentIntentWebhook;
 | 
					use App\PaymentDrivers\Stripe\Jobs\PaymentIntentWebhook;
 | 
				
			||||||
@ -155,7 +154,7 @@ class StripePaymentDriver extends BaseDriver
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if ($this->client
 | 
					        if ($this->client
 | 
				
			||||||
            && isset($this->client->country)
 | 
					            && isset($this->client->country)
 | 
				
			||||||
            && in_array($this->client->country->iso_3166_3, ['USA'])
 | 
					            && (in_array($this->client->country->iso_3166_3, ['USA']) || ($this->client->gateway_tokens()->where('gateway_type_id', GatewayType::BANK_TRANSFER)->exists()))
 | 
				
			||||||
        ) {
 | 
					        ) {
 | 
				
			||||||
            $types[] = GatewayType::BANK_TRANSFER;
 | 
					            $types[] = GatewayType::BANK_TRANSFER;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -261,7 +260,12 @@ class StripePaymentDriver extends BaseDriver
 | 
				
			|||||||
        if (
 | 
					        if (
 | 
				
			||||||
            $this->client
 | 
					            $this->client
 | 
				
			||||||
            && isset($this->client->country)
 | 
					            && isset($this->client->country)
 | 
				
			||||||
            && in_array($this->client->country->iso_3166_2, ['FR', 'IE', 'NL', 'GB', 'DE', 'ES', 'JP', 'MX'])
 | 
					            && (
 | 
				
			||||||
 | 
					                (in_array($this->client->country->iso_3166_2, ['FR', 'IE', 'NL', 'DE', 'ES']) && $this->client->currency()->code == 'EUR') ||
 | 
				
			||||||
 | 
					                ($this->client->country->iso_3166_2 == 'JP' && $this->client->currency()->code == 'JPY') ||
 | 
				
			||||||
 | 
					                ($this->client->country->iso_3166_2 == 'MX' && $this->client->currency()->code == 'MXN') ||
 | 
				
			||||||
 | 
					                ($this->client->country->iso_3166_2 == 'GB' && $this->client->currency()->code == 'GBP')
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
        ) {
 | 
					        ) {
 | 
				
			||||||
            $types[] = GatewayType::DIRECT_DEBIT;
 | 
					            $types[] = GatewayType::DIRECT_DEBIT;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -434,6 +438,17 @@ class StripePaymentDriver extends BaseDriver
 | 
				
			|||||||
        return PaymentIntent::create($data, array_merge($meta, ['idempotency_key' => uniqid("st", true)]));
 | 
					        return PaymentIntent::create($data, array_merge($meta, ['idempotency_key' => uniqid("st", true)]));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function getPaymentIntent($payment_intent_id): ?PaymentIntent
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        $this->init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					         return PaymentIntent::retrieve(
 | 
				
			||||||
 | 
					                $payment_intent_id,
 | 
				
			||||||
 | 
					                $this->stripe_connect_auth
 | 
				
			||||||
 | 
					            );
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Returns a setup intent that allows the user
 | 
					     * Returns a setup intent that allows the user
 | 
				
			||||||
     * to enter card details without initiating a transaction.
 | 
					     * to enter card details without initiating a transaction.
 | 
				
			||||||
@ -843,15 +858,6 @@ class StripePaymentDriver extends BaseDriver
 | 
				
			|||||||
        $this->client = ClientGatewayToken::where('gateway_customer_reference', $customer)->client;
 | 
					        $this->client = ClientGatewayToken::where('gateway_customer_reference', $customer)->client;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					 | 
				
			||||||
     * Pull all client payment methods and update
 | 
					 | 
				
			||||||
     * the respective tokens in the system.
 | 
					 | 
				
			||||||
     */
 | 
					 | 
				
			||||||
    public function updateAllPaymentMethods()
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
        return (new UpdatePaymentMethods($this))->run();
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Imports stripe customers and their payment methods
 | 
					     * Imports stripe customers and their payment methods
 | 
				
			||||||
     * Matches users in the system based on the $match_on_record
 | 
					     * Matches users in the system based on the $match_on_record
 | 
				
			||||||
 | 
				
			|||||||
@ -840,8 +840,8 @@ class Design extends BaseDesign
 | 
				
			|||||||
                    ['element' => 'span', 'content' => strtr(str_replace("labels", "", $_variables['values']['$entity.terms']), $_variables['labels']), 'properties' => ['data-ref' => 'total_table-terms', 'style' => 'text-align: left;']],
 | 
					                    ['element' => 'span', 'content' => strtr(str_replace("labels", "", $_variables['values']['$entity.terms']), $_variables['labels']), 'properties' => ['data-ref' => 'total_table-terms', 'style' => 'text-align: left;']],
 | 
				
			||||||
                ]],
 | 
					                ]],
 | 
				
			||||||
                ['element' => 'img', 'properties' => ['style' => 'max-width: 50%; height: auto;', 'src' => '$contact.signature', 'id' => 'contact-signature']],
 | 
					                ['element' => 'img', 'properties' => ['style' => 'max-width: 50%; height: auto;', 'src' => '$contact.signature', 'id' => 'contact-signature']],
 | 
				
			||||||
                ['element' => 'div', 'properties' => ['style' => 'margin-top: 1.5rem; display: flex; align-items: flex-start; page-break-inside: auto;'], 'elements' => [
 | 
					                ['element' => 'div', 'properties' => ['style' => 'display: flex; align-items: flex-start; page-break-inside: auto;'], 'elements' => [
 | 
				
			||||||
                    ['element' => 'img', 'properties' => ['src' => '$invoiceninja.whitelabel', 'style' => 'height: 2.5rem;', 'hidden' => $this->entity->user->account->isPaid() ? 'true' : 'false', 'id' => 'invoiceninja-whitelabel-logo']],
 | 
					                    ['element' => 'img', 'properties' => ['src' => '$invoiceninja.whitelabel', 'style' => 'height: 2.5rem; margin-top: 1.5rem;', 'hidden' => $this->entity->user->account->isPaid() ? 'true' : 'false', 'id' => 'invoiceninja-whitelabel-logo']],
 | 
				
			||||||
                ]],
 | 
					                ]],
 | 
				
			||||||
            ]],
 | 
					            ]],
 | 
				
			||||||
            ['element' => 'div', 'properties' => ['class' => 'totals-table-right-side', 'dir' => '$dir'], 'elements' => []],
 | 
					            ['element' => 'div', 'properties' => ['class' => 'totals-table-right-side', 'dir' => '$dir'], 'elements' => []],
 | 
				
			||||||
 | 
				
			|||||||
@ -152,7 +152,7 @@ class HtmlEngine
 | 
				
			|||||||
        $data['$payment_button'] = ['value' => $this->buildViewButton($this->invitation->getPaymentLink(), ctrans('texts.pay_now')), 'label' => ctrans('texts.pay_now')];
 | 
					        $data['$payment_button'] = ['value' => $this->buildViewButton($this->invitation->getPaymentLink(), ctrans('texts.pay_now')), 'label' => ctrans('texts.pay_now')];
 | 
				
			||||||
        $data['$payment_link'] = ['value' => $this->invitation->getPaymentLink(), 'label' => ctrans('texts.pay_now')];
 | 
					        $data['$payment_link'] = ['value' => $this->invitation->getPaymentLink(), 'label' => ctrans('texts.pay_now')];
 | 
				
			||||||
        $data['$payment_qrcode'] = ['value' => $this->invitation->getPaymentQrCode(), 'label' => ctrans('texts.pay_now')];
 | 
					        $data['$payment_qrcode'] = ['value' => $this->invitation->getPaymentQrCode(), 'label' => ctrans('texts.pay_now')];
 | 
				
			||||||
 | 
					        $data['$exchange_rate'] = ['value' => $this->entity->exchange_rate ?: ' ', 'label' => ctrans('texts.exchange_rate')];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if ($this->entity_string == 'invoice' || $this->entity_string == 'recurring_invoice') {
 | 
					        if ($this->entity_string == 'invoice' || $this->entity_string == 'recurring_invoice') {
 | 
				
			||||||
            $data['$entity'] = ['value' => '', 'label' => ctrans('texts.invoice')];
 | 
					            $data['$entity'] = ['value' => '', 'label' => ctrans('texts.invoice')];
 | 
				
			||||||
 | 
				
			|||||||
@ -32,6 +32,7 @@ class SystemHealth
 | 
				
			|||||||
        'mbstring',
 | 
					        'mbstring',
 | 
				
			||||||
        'xml',
 | 
					        'xml',
 | 
				
			||||||
        'bcmath',
 | 
					        'bcmath',
 | 
				
			||||||
 | 
					        'iconv',
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static $php_version = 8.1;
 | 
					    private static $php_version = 8.1;
 | 
				
			||||||
 | 
				
			|||||||
@ -117,6 +117,62 @@ class RandomDataSeeder extends Seeder
 | 
				
			|||||||
            'settings' => null,
 | 
					            'settings' => null,
 | 
				
			||||||
        ]);
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $user = User::firstOrNew([
 | 
				
			||||||
 | 
					            'email' => 'user@example.com',
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $user->password = Hash::make('password');
 | 
				
			||||||
 | 
					        $user->account_id = $account->id;
 | 
				
			||||||
 | 
					        $user->email_verified_at = now();
 | 
				
			||||||
 | 
					        $user->save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $user->companies()->attach($company->id, [
 | 
				
			||||||
 | 
					            'account_id' => $account->id,
 | 
				
			||||||
 | 
					            'is_owner' => 1,
 | 
				
			||||||
 | 
					            'is_admin' => 1,
 | 
				
			||||||
 | 
					            'is_locked' => 0,
 | 
				
			||||||
 | 
					            'notifications' => CompanySettings::notificationDefaults(),
 | 
				
			||||||
 | 
					            'permissions' => '',
 | 
				
			||||||
 | 
					            'settings' => null,
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $company_token = CompanyToken::create([
 | 
				
			||||||
 | 
					            'user_id' => $user->id,
 | 
				
			||||||
 | 
					            'company_id' => $company->id,
 | 
				
			||||||
 | 
					            'account_id' => $account->id,
 | 
				
			||||||
 | 
					            'name' => 'test token',
 | 
				
			||||||
 | 
					            'token' => \Illuminate\Support\Str::random(64),
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $user = User::firstOrNew([
 | 
				
			||||||
 | 
					            'email' => 'permissions@example.com',
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $user->password = Hash::make('password');
 | 
				
			||||||
 | 
					        $user->account_id = $account->id;
 | 
				
			||||||
 | 
					        $user->email_verified_at = now();
 | 
				
			||||||
 | 
					        $user->save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $company_token = CompanyToken::create([
 | 
				
			||||||
 | 
					            'user_id' => $user->id,
 | 
				
			||||||
 | 
					            'company_id' => $company->id,
 | 
				
			||||||
 | 
					            'account_id' => $account->id,
 | 
				
			||||||
 | 
					            'name' => 'test token',
 | 
				
			||||||
 | 
					            'token' => \Illuminate\Support\Str::random(64),
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $user->companies()->attach($company->id, [
 | 
				
			||||||
 | 
					            'account_id' => $account->id,
 | 
				
			||||||
 | 
					            'is_owner' => 0,
 | 
				
			||||||
 | 
					            'is_admin' => 0,
 | 
				
			||||||
 | 
					            'is_locked' => 0,
 | 
				
			||||||
 | 
					            'notifications' => CompanySettings::notificationDefaults(),
 | 
				
			||||||
 | 
					            'permissions' => '',
 | 
				
			||||||
 | 
					            'settings' => null,
 | 
				
			||||||
 | 
					        ]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        $client = Client::factory()->create([
 | 
					        $client = Client::factory()->create([
 | 
				
			||||||
                'user_id' => $user->id,
 | 
					                'user_id' => $user->id,
 | 
				
			||||||
                'company_id' => $company->id,
 | 
					                'company_id' => $company->id,
 | 
				
			||||||
 | 
				
			|||||||
@ -5001,6 +5001,13 @@ $LANG = array(
 | 
				
			|||||||
    'gateway_payment_text_no_invoice' => 'Payment with no invoice for amount :amount for client :client',
 | 
					    'gateway_payment_text_no_invoice' => 'Payment with no invoice for amount :amount for client :client',
 | 
				
			||||||
    'click_to_variables' => 'Client here to see all variables.',
 | 
					    'click_to_variables' => 'Client here to see all variables.',
 | 
				
			||||||
    'ship_to' => 'Ship to',
 | 
					    'ship_to' => 'Ship to',
 | 
				
			||||||
 | 
					    'stripe_direct_debit_details' => 'Please transfer into the nominated bank account above.',
 | 
				
			||||||
 | 
					    'branch_name' => 'Branch Name',
 | 
				
			||||||
 | 
					    'branch_code' => 'Branch Code',
 | 
				
			||||||
 | 
					    'bank_name' => 'Bank Name',
 | 
				
			||||||
 | 
					    'bank_code' => 'Bank Code',
 | 
				
			||||||
 | 
					    'bic' => 'BIC',
 | 
				
			||||||
 | 
					
 | 
				
			||||||
);
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										4
									
								
								public/flutter_service_worker.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								public/flutter_service_worker.js
									
									
									
									
										vendored
									
									
								
							@ -298,8 +298,8 @@ const RESOURCES = {
 | 
				
			|||||||
"assets/NOTICES": "1a34e70168d56fad075adfb4bdbb20eb",
 | 
					"assets/NOTICES": "1a34e70168d56fad075adfb4bdbb20eb",
 | 
				
			||||||
"assets/fonts/MaterialIcons-Regular.otf": "95db9098c58fd6db106f1116bae85a0b",
 | 
					"assets/fonts/MaterialIcons-Regular.otf": "95db9098c58fd6db106f1116bae85a0b",
 | 
				
			||||||
"assets/AssetManifest.json": "759f9ef9973f7e26c2a51450b55bb9fa",
 | 
					"assets/AssetManifest.json": "759f9ef9973f7e26c2a51450b55bb9fa",
 | 
				
			||||||
"/": "384d4eeaffc3b89569c9be891a7fb2fd",
 | 
					"/": "f935af908f5ebe2ec18aef350de81f6c",
 | 
				
			||||||
"main.dart.js": "13599a5a8e48bf01695e00ebafc2bbd1",
 | 
					"main.dart.js": "92c2392e1b819b43c76072ddda82f371",
 | 
				
			||||||
"icons/Icon-512.png": "0f9aff01367f0a0c69773d25ca16ef35",
 | 
					"icons/Icon-512.png": "0f9aff01367f0a0c69773d25ca16ef35",
 | 
				
			||||||
"icons/Icon-192.png": "bb1cf5f6982006952211c7c8404ffbed"
 | 
					"icons/Icon-192.png": "bb1cf5f6982006952211c7c8404ffbed"
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										287841
									
								
								public/main.dart.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										287841
									
								
								public/main.dart.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										277037
									
								
								public/main.foss.dart.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										277037
									
								
								public/main.foss.dart.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										21500
									
								
								public/main.profile.dart.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										21500
									
								
								public/main.profile.dart.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@ -0,0 +1,221 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="mt-4 overflow-hidden bg-white shadow sm:rounded-lg">
 | 
				
			||||||
 | 
					    <div class="px-4 py-5 border-b border-gray-200 sm:px-6">
 | 
				
			||||||
 | 
					        <h3 class="text-lg font-medium leading-6 text-gray-900">
 | 
				
			||||||
 | 
					            {{ ctrans('texts.bank_transfer') }}
 | 
				
			||||||
 | 
					        </h3>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="container mx-auto">
 | 
				
			||||||
 | 
					        <div class="px-4 py-5 bg-white sm:grid sm:grid-cols-3 sm:gap-4 sm:px-6">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        @if($bank_details['currency'] == 'gbp')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.sort') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['sort_code'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.account_number') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['account_number'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.account_name') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['account_holder_name'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.reference') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['reference'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.balance_due') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['amount'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.stripe_direct_debit_details') }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            @elseif($bank_details['currency'] == 'mxn')
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                Clabe
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['sort_code'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.account_number') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['account_number'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.account_name') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['account_holder_name'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.reference') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['reference'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.balance_due') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['amount'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.stripe_direct_debit_details') }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            @elseif($bank_details['currency'] == 'jpy')
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.account_number') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['account_number'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.account_name') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['account_holder_name'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.account_type') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['account_type'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.bank_name') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['bank_name'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.bank_code') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['bank_code'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.branch_name') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['branch_name'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.branch_code') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['branch_code'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.reference') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['reference'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.balance_due') }}
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ $bank_details['amount'] }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					            </dt>
 | 
				
			||||||
 | 
					            <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                {{ ctrans('texts.stripe_direct_debit_details') }}
 | 
				
			||||||
 | 
					            </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        @elseif($bank_details['currency'] == 'eur')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                    {{ ctrans('texts.account_name') }}
 | 
				
			||||||
 | 
					                </dt>
 | 
				
			||||||
 | 
					                <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                    {{ $bank_details['account_holder_name'] }}
 | 
				
			||||||
 | 
					                </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                    {{ ctrans('texts.account_number') }}
 | 
				
			||||||
 | 
					                </dt>
 | 
				
			||||||
 | 
					                <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                    {{ $bank_details['account_number'] }}
 | 
				
			||||||
 | 
					                </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                    {{ ctrans('texts.bic') }}
 | 
				
			||||||
 | 
					                </dt>
 | 
				
			||||||
 | 
					                <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                    {{ $bank_details['sort_code'] }}
 | 
				
			||||||
 | 
					                </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                    {{ ctrans('texts.reference') }}
 | 
				
			||||||
 | 
					                </dt>
 | 
				
			||||||
 | 
					                <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                    {{ $bank_details['reference'] }}
 | 
				
			||||||
 | 
					                </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                    {{ ctrans('texts.balance_due') }}
 | 
				
			||||||
 | 
					                </dt>
 | 
				
			||||||
 | 
					                <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                    {{ $bank_details['amount'] }}
 | 
				
			||||||
 | 
					                </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <dt class="text-sm font-medium leading-5 text-gray-500">
 | 
				
			||||||
 | 
					                </dt>
 | 
				
			||||||
 | 
					                <dd class="mt-1 text-sm leading-5 text-gray-900 sm:mt-0 sm:col-span-2">
 | 
				
			||||||
 | 
					                    {{ ctrans('texts.stripe_direct_debit_details') }}
 | 
				
			||||||
 | 
					                </dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            @endif
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					@extends('portal.ninja2020.layout.app')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section('meta_title', ctrans('texts.bank_transfer'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@include('portal.ninja2020.gateways.stripe.bank_transfer.bank_details')
 | 
				
			||||||
@ -17,7 +17,7 @@
 | 
				
			|||||||
    <form action="{{ route('client.payments.response') }}" method="post" id="payment-form">
 | 
					    <form action="{{ route('client.payments.response') }}" method="post" id="payment-form">
 | 
				
			||||||
        @csrf
 | 
					        @csrf
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    <div id="payment-element">
 | 
					    <div id="payment-element" style="padding:40px;">
 | 
				
			||||||
        <!-- Elements will create form elements here -->
 | 
					        <!-- Elements will create form elements here -->
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -46,19 +46,22 @@
 | 
				
			|||||||
<script>
 | 
					<script>
 | 
				
			||||||
    const options = {
 | 
					    const options = {
 | 
				
			||||||
        clientSecret: '{{ $client_secret }}',
 | 
					        clientSecret: '{{ $client_secret }}',
 | 
				
			||||||
            style: {
 | 
					        appearance : {
 | 
				
			||||||
                base: {
 | 
					            theme: 'stripe',
 | 
				
			||||||
                    padding: '10px 12px',
 | 
					            variables: {
 | 
				
			||||||
                    color: '#32325d',
 | 
					                colorPrimary: '#0570de',
 | 
				
			||||||
                    fontSize: '16px',
 | 
					                colorBackground: '#ffffff',
 | 
				
			||||||
                    '::placeholder': {
 | 
					                colorText: '#30313d',
 | 
				
			||||||
                        color: '#aab7c4'
 | 
					                colorDanger: '#df1b41',
 | 
				
			||||||
                    },
 | 
					                fontFamily: 'Ideal Sans, system-ui, sans-serif',
 | 
				
			||||||
                },
 | 
					                spacingUnit: '2px',
 | 
				
			||||||
            },
 | 
					                borderRadius: '4px',
 | 
				
			||||||
 | 
					                // See all possible variables below
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    const stripe = Stripe(document.querySelector('meta[name="stripe-publishable-key"]').getAttribute('content'));
 | 
					    const stripe = Stripe(document.querySelector('meta[name="stripe-publishable-key"]').getAttribute('content'));
 | 
				
			||||||
    const stripeConnect = document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
 | 
					    const stripeConnect = document.querySelector('meta[name="stripe-account-id"]')?.content ?? '';
 | 
				
			||||||
 | 
				
			|||||||
@ -8,7 +8,6 @@
 | 
				
			|||||||
        $token_billing_string = 'false';
 | 
					        $token_billing_string = 'false';
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
@endphp
 | 
					@endphp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@section('gateway_head')
 | 
					@section('gateway_head')
 | 
				
			||||||
 | 
				
			|||||||
@ -122,6 +122,12 @@
 | 
				
			|||||||
                    @endforeach
 | 
					                    @endforeach
 | 
				
			||||||
                </dl>
 | 
					                </dl>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					                <!-- if this is a stripe bank transfer - show the required details here: -->
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
 | 
					            @if($bank_details)
 | 
				
			||||||
 | 
					                    @include('portal.ninja2020.gateways.stripe.bank_transfer.bank_details')
 | 
				
			||||||
 | 
					                @endif
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
@endsection
 | 
					@endsection
 | 
				
			||||||
 | 
				
			|||||||
@ -54,7 +54,31 @@ class SchedulerTest extends TestCase
 | 
				
			|||||||
        );
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public function testSchedulerGet3()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        $scheduler = SchedulerFactory::create($this->company->id, $this->user->id);
 | 
				
			||||||
 | 
					        $scheduler->name = "hello";
 | 
				
			||||||
 | 
					        $scheduler->save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $scheduler = SchedulerFactory::create($this->company->id, $this->user->id);
 | 
				
			||||||
 | 
					        $scheduler->name = "goodbye";
 | 
				
			||||||
 | 
					        $scheduler->save();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $response = $this->withHeaders([
 | 
				
			||||||
 | 
					            'X-API-SECRET' => config('ninja.api_secret'),
 | 
				
			||||||
 | 
					            'X-API-TOKEN' => $this->token,
 | 
				
			||||||
 | 
					        ])->get('/api/v1/task_schedulers?filter=hello');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $response->assertStatus(200);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $arr = $response->json();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $this->assertEquals('hello', $arr['data'][0]['name']);
 | 
				
			||||||
 | 
					        $this->assertCount(1, $arr['data']);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public function testSchedulerGet2()
 | 
					    public function testSchedulerGet2()
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user