Public document download route

This commit is contained in:
David Bomba 2020-12-12 19:46:28 +11:00
parent f6ed7be0da
commit aa1a788d6e
3 changed files with 71 additions and 18 deletions

View File

@ -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();

View File

@ -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))

View File

@ -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 () {