diff --git a/app/Http/Controllers/ClientPortal/RecurringInvoiceController.php b/app/Http/Controllers/ClientPortal/RecurringInvoiceController.php index d407fea397db..51a77f2e90be 100644 --- a/app/Http/Controllers/ClientPortal/RecurringInvoiceController.php +++ b/app/Http/Controllers/ClientPortal/RecurringInvoiceController.php @@ -12,6 +12,7 @@ namespace App\Http\Controllers\ClientPortal; use App\Http\Controllers\Controller; +use App\Http\Requests\ClientPortal\ShowRecurringInvoiceRequest; use App\Models\RecurringInvoice; use App\Utils\Traits\MakesHash; use Illuminate\Http\Request; @@ -46,7 +47,7 @@ class RecurringInvoiceController extends Controller if (request()->ajax()) { return DataTables::of($invoices)->addColumn('action', function ($invoice) { - return ''.ctrans('texts.view').''; + return ''.ctrans('texts.view').''; })->addColumn('frequency_id', function ($invoice) { return RecurringInvoice::frequencyForKey($invoice->frequency_id); }) @@ -71,10 +72,14 @@ class RecurringInvoiceController extends Controller * * @return \Illuminate\Http\Response */ - public function show(RecurringInvoice $invoice) + public function show(ShowRecurringInvoiceRequest $request, RecurringInvoice $recurring_invoice) { - + $data = [ + 'invoice' => $recurring_invoice->load('invoices'), + ]; + + return view('portal.default.recurring_invoices.show', $data); } diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 3c987fa792c3..39f21d3ea48f 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -105,6 +105,7 @@ class Kernel extends HttpKernel 'contact_token_auth' => \App\Http\Middleware\ContactTokenAuth::class, 'contact_db' => \App\Http\Middleware\ContactSetDb::class, 'domain_db' => \App\Http\Middleware\SetDomainNameDb::class, + 'password_protected' => \App\Http\Middleware\PasswordProtection::class, 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, ]; } diff --git a/app/Http/Middleware/PasswordProtection.php b/app/Http/Middleware/PasswordProtection.php new file mode 100644 index 000000000000..d2bbc9ca6ced --- /dev/null +++ b/app/Http/Middleware/PasswordProtection.php @@ -0,0 +1,62 @@ + 'Invalid Password', + 'errors' => [] + ]; + + if( $request->header('X-API-PASSWORD') ) + { + + if(!Hash::check($request->header('X-API-PASSWORD'), auth()->user()->password)) + return response()->json($error, 403); + + } + elseif (Cache::get(auth()->user()->email."_logged_in")) { + return $next($request); + } + else { + + $error = [ + 'message' => 'Access denied', + 'errors' => [] + ]; + return response()->json($error, 412); + + } + + Cache::add(auth()->user()->email."_logged_in", 'logged_in', now()->addMinutes(5)); + + return $next($request); + } + + +} diff --git a/app/Http/Requests/ClientPortal/ShowRecurringInvoiceRequest.php b/app/Http/Requests/ClientPortal/ShowRecurringInvoiceRequest.php new file mode 100644 index 000000000000..92aee323e93d --- /dev/null +++ b/app/Http/Requests/ClientPortal/ShowRecurringInvoiceRequest.php @@ -0,0 +1,30 @@ +user()->client->id === $this->recurring_invoice->client_id; + } + +} \ No newline at end of file diff --git a/app/Listeners/Invoice/CreateInvoicePdf.php b/app/Listeners/Invoice/CreateInvoicePdf.php index 14d44e754ef0..04f1f1c37767 100644 --- a/app/Listeners/Invoice/CreateInvoicePdf.php +++ b/app/Listeners/Invoice/CreateInvoicePdf.php @@ -121,7 +121,7 @@ class CreateInvoicePdf implements ShouldQueue $data['__env'] = app(\Illuminate\View\Factory::class); $php = Blade::compileString($string); -//Log::error($php); + $obLevel = ob_get_level(); ob_start(); extract($data, EXTR_SKIP); diff --git a/app/Models/BaseModel.php b/app/Models/BaseModel.php index 6949830b95e4..ee0a769d2411 100644 --- a/app/Models/BaseModel.php +++ b/app/Models/BaseModel.php @@ -107,12 +107,9 @@ class BaseModel extends Model /* Does Setting Exist @ client level */ if(isset($this->getSettings()->{$key})) { - //Log::error('harvesting client settings for key = '. $key . ' and it has the value = '. $this->getSettings()->{$key}); - //Log::error(print_r($this->getSettings(),1)); return $this->getSettings()->{$key}; } else { - //Log::error(print_r(new CompanySettings($this->company->settings),1)); return (new CompanySettings($this->company->settings))->{$key}; } @@ -123,13 +120,13 @@ class BaseModel extends Model { switch ($entity) { case Client::class: - // Log::error('saving client settings'); + $this->settings = $settings; $this->save(); $this->fresh(); break; case Company::class: - // Log::error('saving company settings'); + $this->company->settings = $settings; $this->company->save(); break; diff --git a/app/Models/Client.php b/app/Models/Client.php index 7ef86434774a..47d3bcb1c9eb 100644 --- a/app/Models/Client.php +++ b/app/Models/Client.php @@ -222,8 +222,6 @@ class Client extends BaseModel } /*Company Settings*/ - // \Log::error($setting); - // \Log::error(print_r($this->company->settings,1)); if((property_exists($this->company->settings, $setting) != false ) && (isset($this->company->settings->{$setting}) !== false) ){ return $this->company->settings->{$setting}; } diff --git a/app/Models/Gateway.php b/app/Models/Gateway.php index 05138a55ed98..46369d1615e1 100644 --- a/app/Models/Gateway.php +++ b/app/Models/Gateway.php @@ -24,6 +24,7 @@ class Gateway extends StaticModel 'visible' => 'boolean', 'updated_at' => 'timestamp', 'created_at' => 'timestamp', + 'default_gateway_type_id' => 'string', 'fields' => 'json', ]; diff --git a/app/Models/PaymentTerm.php b/app/Models/PaymentTerm.php index b74fbccd0431..3afff9fae155 100644 --- a/app/Models/PaymentTerm.php +++ b/app/Models/PaymentTerm.php @@ -37,7 +37,6 @@ class PaymentTerm extends BaseModel public static function getCompanyTerms() { - //Log::error('getting company terms'); $default_terms = collect(config('ninja.payment_terms')); $terms = self::scope()->get(); diff --git a/app/Models/RecurringInvoice.php b/app/Models/RecurringInvoice.php index 30239bc29bb1..082287946993 100644 --- a/app/Models/RecurringInvoice.php +++ b/app/Models/RecurringInvoice.php @@ -110,6 +110,11 @@ class RecurringInvoice extends BaseModel return $this->belongsTo(User::class); } + public function invoices() + { + return $this->hasMany(Invoice::class, "id", "recurring_invoice_id"); + } + public function invitations() { $this->morphMany(RecurringInvoiceInvitation::class); diff --git a/app/Providers/MultiDatabaseUserProvider.php b/app/Providers/MultiDatabaseUserProvider.php index c25ee5f79919..422fb365a520 100644 --- a/app/Providers/MultiDatabaseUserProvider.php +++ b/app/Providers/MultiDatabaseUserProvider.php @@ -155,7 +155,6 @@ class MultiDatabaseUserProvider implements UserProvider */ public function validateCredentials(UserContract $user, array $credentials) { - //Log::error('validateCredentials'); $plain = $credentials['password']; diff --git a/app/Repositories/ActivityRepository.php b/app/Repositories/ActivityRepository.php index 49057695e2d1..5d6867e495b6 100644 --- a/app/Repositories/ActivityRepository.php +++ b/app/Repositories/ActivityRepository.php @@ -33,8 +33,6 @@ class ActivityRepository extends BaseRepository $activity->is_system = app()->runningInConsole(); $activity->ip = request()->getClientIp(); -//Log::error($activity); -//Log::error($entity); foreach($fields as $key => $value) { diff --git a/app/Utils/Traits/GeneratesCounter.php b/app/Utils/Traits/GeneratesCounter.php index c2548f980815..d96661fb42fe 100644 --- a/app/Utils/Traits/GeneratesCounter.php +++ b/app/Utils/Traits/GeneratesCounter.php @@ -373,9 +373,6 @@ trait GeneratesCounter $search[] = '{$id_number}'; $replace[] = $client->id_number; -//Log::error($search); -//Log::error($replace); -//Log::error($pattern); return str_replace($search, $replace, $pattern); diff --git a/app/Utils/Traits/SettingsSaver.php b/app/Utils/Traits/SettingsSaver.php index 52345c211522..87b7adb408be 100644 --- a/app/Utils/Traits/SettingsSaver.php +++ b/app/Utils/Traits/SettingsSaver.php @@ -176,8 +176,4 @@ trait SettingsSaver } } -// \Log::error('popping '.$key.' '.$value.' '.$settings->{$key}.' off the stack'); -// \Log::error('popping '.$key.' '.$value.' '.$settings->{$key}.' off the stack'); -// s\Log::error("integer testing {$key} - {$value} - ".$settings->{$key}); - } \ No newline at end of file diff --git a/database/migrations/2014_10_13_000000_create_users_table.php b/database/migrations/2014_10_13_000000_create_users_table.php index fa72f6e30c4c..29b958af7e3f 100644 --- a/database/migrations/2014_10_13_000000_create_users_table.php +++ b/database/migrations/2014_10_13_000000_create_users_table.php @@ -88,6 +88,7 @@ class CreateUsersTable extends Migration $table->boolean('is_offsite')->default(false); $table->boolean('is_secure')->default(false); $table->text('fields')->nullable(); + $table->unsignedInteger('default_gateway_type_id')->default(1); $table->timestamps(6); }); diff --git a/resources/views/portal/default/recurring_invoices/show.blade.php b/resources/views/portal/default/recurring_invoices/show.blade.php new file mode 100644 index 000000000000..f21e0087ed67 --- /dev/null +++ b/resources/views/portal/default/recurring_invoices/show.blade.php @@ -0,0 +1,43 @@ +@extends('portal.default.layouts.master') +@section('header') +@stop +@section('body') +
+
+
+
+
+
+ {{ ctrans('texts.recurring_invoice')}} +
+
+ + + + + + + +
{{ctrans('texts.start_date')}}{!! $invoice->start_date !!}
{{ctrans('texts.next_send_date')}}{!! $invoice->next_send_date !!}
{{ctrans('texts.frequency')}}{!! App\Models\RecurringInvoice::frequencyForKey($invoice->frequency_id) !!}
{{ctrans('texts.cycles_remaining')}}{!! $invoice->remaining_cycles !!}
{{ctrans('texts.amount')}}{!! $invoice->amount !!}
+ + + @foreach($invoice->invoices as $inv) + {{ $inv->id }} - {{ $inv->amount }} + @endforeach +
+
+
+
+
+
+
+ + +@endsection +@push('css') +@endpush +@push('scripts') +@endpush +@section('footer') +@endsection + diff --git a/routes/api.php b/routes/api.php index cc642c25feed..e31e10271a0c 100644 --- a/routes/api.php +++ b/routes/api.php @@ -68,9 +68,9 @@ Route::group(['middleware' => ['api_db','api_secret_check','token_auth'], 'prefi Route::post('payments/bulk', 'PaymentController@bulk')->name('payments.bulk'); - Route::resource('users', 'UserController'); // name = (users. index / create / show / update / destroy / edit + Route::resource('users', 'UserController')->middleware('password_protected'); // name = (users. index / create / show / update / destroy / edit - Route::post('users/bulk', 'UserController@bulk')->name('users.bulk'); + Route::post('users/bulk', 'UserController@bulk')->name('users.bulk')->middleware('password_protected'); Route::resource('companies', 'CompanyController'); // name = (companies. index / create / show / update / destroy / edit diff --git a/routes/client.php b/routes/client.php index ea00b342979b..dafa9a68e4bd 100644 --- a/routes/client.php +++ b/routes/client.php @@ -22,6 +22,7 @@ Route::group(['middleware' => ['auth:contact'], 'prefix' => 'client', 'as' => 'c Route::get('invoices/{invoice_invitation}', 'ClientPortal\InvoiceController@show')->name('invoice.show_invitation'); Route::get('recurring_invoices', 'ClientPortal\RecurringInvoiceController@index')->name('recurring_invoices.index'); + Route::get('recurring_invoices/{recurring_invoice}', 'ClientPortal\RecurringInvoiceController@show')->name('recurring_invoices.show'); Route::get('payments', 'ClientPortal\PaymentController@index')->name('payments.index'); Route::get('payments/{payment}', 'ClientPortal\PaymentController@show')->name('payments.show'); diff --git a/tests/Integration/MarkInvoicePaidTest.php b/tests/Integration/MarkInvoicePaidTest.php index d0688803935f..26e564caed7e 100644 --- a/tests/Integration/MarkInvoicePaidTest.php +++ b/tests/Integration/MarkInvoicePaidTest.php @@ -46,12 +46,10 @@ class MarkInvoicePaidTest extends TestCase $this->assertEquals(1, count($invoice->payments)); foreach($invoice->payments as $payment) { - //Log::error($payment); $this->assertEquals($this->invoice->amount, $payment->amount); } //events are not firing which makes this impossible to control. - // $this->assertEquals(Invoice::STATUS_PAID, $invoice->status_id); $this->assertEquals(0.00, $invoice->balance); diff --git a/tests/Integration/UploadLogoTest.php b/tests/Integration/UploadLogoTest.php index d988b494f9c2..3d142b5c6abf 100644 --- a/tests/Integration/UploadLogoTest.php +++ b/tests/Integration/UploadLogoTest.php @@ -110,7 +110,6 @@ class UploadLogoTest extends TestCase $response->assertStatus(200); - //Log::error(print_r($response->json(),1)); } } \ No newline at end of file