diff --git a/app/Console/Commands/DemoMode.php b/app/Console/Commands/DemoMode.php index d5b9a437e615..b80c6c5fd138 100644 --- a/app/Console/Commands/DemoMode.php +++ b/app/Console/Commands/DemoMode.php @@ -15,6 +15,7 @@ use App\DataMapper\CompanySettings; use App\Events\Invoice\InvoiceWasCreated; use App\Factory\InvoiceFactory; use App\Factory\InvoiceItemFactory; +use App\Factory\RecurringInvoiceFactory; use App\Helpers\Invoice\InvoiceSum; use App\Jobs\Company\CreateCompanyPaymentTerms; use App\Jobs\Company\CreateCompanyTaskStatuses; @@ -30,6 +31,7 @@ use App\Models\Expense; use App\Models\Product; use App\Models\Project; use App\Models\Quote; +use App\Models\RecurringInvoice; use App\Models\Task; use App\Models\User; use App\Models\Vendor; @@ -238,43 +240,26 @@ class DemoMode extends Command $this->info('creating entities for client #'.$client->id); $this->createInvoice($client, $u2->id); - // for($y=0; $y<($this->count); $y++){ - // $this->info("creating invoice #{$y} for client #".$client->id); - // } + $this->createRecurringInvoice($client, $u2->id); $client = $company->clients->random(); $this->createCredit($client, $u2->id); - // for($y=0; $y<($this->count); $y++){ - // $this->info("creating credit #{$y} for client #".$client->id); - // } - $client = $company->clients->random(); $this->createQuote($client, $u2->id); - // for($y=0; $y<($this->count); $y++){ - // $this->info("creating quote #{$y} for client #".$client->id); - // } - $client = $company->clients->random(); $this->createExpense($client); - //$this->info("creating expense for client #".$client->id); - $client = $company->clients->random(); $this->createVendor($client, $u2->id); - // $this->info("creating vendor for client #".$client->id); - $client = $company->clients->random(); $this->createTask($client, $u2->id); - // $this->info("creating task for client #".$client->id); - $client = $company->clients->random(); $this->createProject($client, $u2->id); - // $this->info("creating project for client #".$client->id); } } @@ -352,6 +337,7 @@ class DemoMode extends Command $vendor = Task::factory()->create([ 'user_id' => $client->user->id, 'company_id' => $client->company_id, + 'client_id' => $client->id ]); } @@ -431,6 +417,60 @@ class DemoMode extends Command event(new InvoiceWasCreated($invoice, $invoice->company, Ninja::eventVars())); } + private function createRecurringInvoice($client, $assigned_user_id = null) + { + $faker = \Faker\Factory::create(); + + $invoice = RecurringInvoiceFactory::create($client->company->id, $client->user->id); //stub the company and user_id + $invoice->client_id = $client->id; + $invoice->frequency_id = RecurringInvoice::FREQUENCY_MONTHLY; + $invoice->last_sent_date = now()->subMonth(); + $invoice->next_send_date = now()->addMonthNoOverflow(); + + if ((bool) rand(0, 1)) { + $dateable = Carbon::now()->subDays(rand(0, 90)); + } else { + $dateable = Carbon::now()->addDays(rand(0, 90)); + } + + $invoice->date = $dateable; + + $invoice->line_items = $this->buildLineItems(rand(1, 10)); + $invoice->uses_inclusive_taxes = false; + + if (rand(0, 1)) { + $invoice->tax_name1 = 'GST'; + $invoice->tax_rate1 = 10.00; + } + + if (rand(0, 1)) { + $invoice->tax_name2 = 'VAT'; + $invoice->tax_rate2 = 17.50; + } + + if (rand(0, 1)) { + $invoice->tax_name3 = 'CA Sales Tax'; + $invoice->tax_rate3 = 5; + } + + // $invoice->custom_value1 = $faker->date; + // $invoice->custom_value2 = rand(0, 1) ? 'yes' : 'no'; + + $invoice->save(); + + $invoice_calc = new InvoiceSum($invoice); + $invoice_calc->build(); + + $invoice = $invoice_calc->getInvoice(); + + if (rand(0, 1)) { + $invoice->assigned_user_id = $assigned_user_id; + } + + $invoice->save(); + + } + private function createCredit($client, $assigned_user_id = null) { $faker = \Faker\Factory::create(); diff --git a/app/Http/Controllers/ClientPortal/DocumentController.php b/app/Http/Controllers/ClientPortal/DocumentController.php index cd4489454409..be7332e4d33d 100644 --- a/app/Http/Controllers/ClientPortal/DocumentController.php +++ b/app/Http/Controllers/ClientPortal/DocumentController.php @@ -15,6 +15,7 @@ namespace App\Http\Controllers\ClientPortal; use App\Http\Controllers\Controller; use App\Http\Requests\ClientPortal\Documents\ShowDocumentRequest; use App\Http\Requests\Document\DownloadMultipleDocumentsRequest; +use App\Models\ClientContact; use App\Models\Document; use App\Utils\TempFile; use App\Utils\Traits\MakesHash; @@ -53,6 +54,17 @@ class DocumentController extends Controller return Storage::disk($document->disk)->download($document->url, $document->name); } + public function publicDownload(string $contact_key, Document $document) + { + //return failure if the contact is not associated with the document + $contact = ClientContact::where('contact_key', $contact_key)->firstOrFail(); + + if($contact->company_id == $document->company_id) + return Storage::disk($document->disk)->download($document->url, $document->name); + + return response()->json(['message' => 'Access denied']); + } + public function downloadMultiple(DownloadMultipleDocumentsRequest $request) { $documents = Document::whereIn('id', $this->transformKeys($request->file_hash)) diff --git a/routes/client.php b/routes/client.php index 46075c5e334a..b78370876d23 100644 --- a/routes/client.php +++ b/routes/client.php @@ -22,6 +22,7 @@ Route::post('view/{entity_type}/{invitation_key}/password', 'ClientPortal\Entity Route::get('tmp_pdf/{hash}', 'ClientPortal\TempRouteController@index')->name('tmp_pdf'); Route::get('client/key_login/{contact_key}', 'ClientPortal\ContactHashLoginController@login')->name('client.contact_login')->middleware(['contact_key_login']); +Route::get('documents/{contact_key}/{document}/download', 'ClientPortal\DocumentController@publicDownload')->name('documents.public_download'); //todo implement domain DB Route::group(['middleware' => ['auth:contact', 'locale', 'check_client_existence'], 'prefix' => 'client', 'as' => 'client.'], function () {