From 292c7b806845730354f1daa04b05d0fc5ee59e43 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Mon, 15 Feb 2021 22:34:05 +1100 Subject: [PATCH] Invoice upload document route --- app/Http/Controllers/InvoiceController.php | 66 ++++++++++++++++++- .../Requests/Invoice/UploadInvoiceRequest.php | 39 +++++++++++ routes/api.php | 1 + 3 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 app/Http/Requests/Invoice/UploadInvoiceRequest.php diff --git a/app/Http/Controllers/InvoiceController.php b/app/Http/Controllers/InvoiceController.php index d2dae952e74f..460c018811e3 100644 --- a/app/Http/Controllers/InvoiceController.php +++ b/app/Http/Controllers/InvoiceController.php @@ -25,6 +25,7 @@ use App\Http\Requests\Invoice\EditInvoiceRequest; use App\Http\Requests\Invoice\ShowInvoiceRequest; use App\Http\Requests\Invoice\StoreInvoiceRequest; use App\Http\Requests\Invoice\UpdateInvoiceRequest; +use App\Http\Requests\Invoice\UploadInvoiceRequest; use App\Jobs\Entity\EmailEntity; use App\Jobs\Invoice\StoreInvoice; use App\Jobs\Invoice\ZipInvoices; @@ -38,6 +39,7 @@ use App\Transformers\QuoteTransformer; use App\Utils\Ninja; use App\Utils\TempFile; use App\Utils\Traits\MakesHash; +use App\Utils\Traits\SavesDocuments; use Illuminate\Http\Request; use Illuminate\Http\Response; use Illuminate\Support\Facades\File; @@ -49,7 +51,8 @@ use Illuminate\Support\Facades\Storage; class InvoiceController extends BaseController { use MakesHash; - + use SavesDocuments; + protected $entity_type = Invoice::class; protected $entity_transformer = InvoiceTransformer::class; @@ -849,4 +852,65 @@ class InvoiceController extends BaseController return response(['message' => 'Oops, something went wrong. Make sure you have symlink to storage/ in public/ directory.'], 500); } } + + /** + * Update the specified resource in storage. + * + * @param UploadInvoiceRequest $request + * @param Invoice $invoice + * @return Response + * + * + * + * @OA\Put( + * path="/api/v1/invoices/{id}/upload", + * operationId="uploadInvoice", + * tags={"invoices"}, + * summary="Uploads a document to a invoice", + * description="Handles the uploading of a document to a invoice", + * @OA\Parameter(ref="#/components/parameters/X-Api-Secret"), + * @OA\Parameter(ref="#/components/parameters/X-Api-Token"), + * @OA\Parameter(ref="#/components/parameters/X-Requested-With"), + * @OA\Parameter(ref="#/components/parameters/include"), + * @OA\Parameter( + * name="id", + * in="path", + * description="The Invoice Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the Invoice object", + * @OA\Header(header="X-MINIMUM-CLIENT-VERSION", ref="#/components/headers/X-MINIMUM-CLIENT-VERSION"), + * @OA\Header(header="X-RateLimit-Remaining", ref="#/components/headers/X-RateLimit-Remaining"), + * @OA\Header(header="X-RateLimit-Limit", ref="#/components/headers/X-RateLimit-Limit"), + * @OA\JsonContent(ref="#/components/schemas/Invoice"), + * ), + * @OA\Response( + * response=422, + * description="Validation error", + * @OA\JsonContent(ref="#/components/schemas/ValidationError"), + * + * ), + * @OA\Response( + * response="default", + * description="Unexpected Error", + * @OA\JsonContent(ref="#/components/schemas/Error"), + * ), + * ) + */ + public function upload(UploadInvoiceRequest $request, Invoice $invoice) + { + + if ($request->has('documents')) + $this->saveDocuments($request->file('documents'), $invoice); + + return $this->itemResponse($invoice->fresh()); + + } } diff --git a/app/Http/Requests/Invoice/UploadInvoiceRequest.php b/app/Http/Requests/Invoice/UploadInvoiceRequest.php new file mode 100644 index 000000000000..5a3688c80145 --- /dev/null +++ b/app/Http/Requests/Invoice/UploadInvoiceRequest.php @@ -0,0 +1,39 @@ +user()->can('edit', $this->invoice); + } + + public function rules() + { + + $rules = []; + + if($this->input('documents')) + $rules['documents'] = 'file|mimes:html,csv,png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:2000000'; + + return $rules; + + } +} diff --git a/routes/api.php b/routes/api.php index ac70201cbacf..653244096ed3 100644 --- a/routes/api.php +++ b/routes/api.php @@ -41,6 +41,7 @@ Route::group(['middleware' => ['api_db', 'token_auth', 'locale'], 'prefix' => 'a Route::get('invoices/{invoice}/delivery_note', 'InvoiceController@deliveryNote')->name('invoices.delivery_note'); Route::get('invoices/{invoice}/{action}', 'InvoiceController@action')->name('invoices.action'); + Route::put('invoices/{invoice}/upload', 'InvoiceController@upload')->name('invoices.upload'); Route::get('invoice/{invitation_key}/download', 'InvoiceController@downloadPdf')->name('invoices.downloadPdf');