diff --git a/app/Http/Controllers/CreditController.php b/app/Http/Controllers/CreditController.php index 346dda1ee391..74b46011fea4 100644 --- a/app/Http/Controllers/CreditController.php +++ b/app/Http/Controllers/CreditController.php @@ -14,6 +14,7 @@ use App\Http\Requests\Credit\EditCreditRequest; use App\Http\Requests\Credit\ShowCreditRequest; use App\Http\Requests\Credit\StoreCreditRequest; use App\Http\Requests\Credit\UpdateCreditRequest; +use App\Http\Requests\Credit\UploadCreditRequest; use App\Jobs\Entity\EmailEntity; use App\Jobs\Invoice\EmailCredit; use App\Models\Client; @@ -24,6 +25,7 @@ use App\Transformers\CreditTransformer; use App\Utils\Ninja; use App\Utils\TempFile; use App\Utils\Traits\MakesHash; +use App\Utils\Traits\SavesDocuments; use Illuminate\Http\Response; /** @@ -32,7 +34,8 @@ use Illuminate\Http\Response; class CreditController extends BaseController { use MakesHash; - + use SavesDocuments; + protected $entity_type = Credit::class; protected $entity_transformer = CreditTransformer::class; @@ -576,4 +579,66 @@ class CreditController extends BaseController return response()->download($file_path); } + + /** + * Update the specified resource in storage. + * + * @param UploadCreditRequest $request + * @param Credit $client + * @return Response + * + * + * + * @OA\Put( + * path="/api/v1/credits/{id}/upload", + * operationId="uploadCredits", + * tags={"credits"}, + * summary="Uploads a document to a credit", + * description="Handles the uploading of a document to a credit", + * @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 Credit Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the Credit 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/Credit"), + * ), + * @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(UploadCreditRequest $request, Credit $credit) + { + + if ($request->has('documents')) + $this->saveDocuments($request->file('documents'), $credit); + + return $this->itemResponse($credit->fresh()); + + } + } diff --git a/app/Http/Requests/Credit/UploadCreditRequest.php b/app/Http/Requests/Credit/UploadCreditRequest.php new file mode 100644 index 000000000000..d50a8ddc70dc --- /dev/null +++ b/app/Http/Requests/Credit/UploadCreditRequest.php @@ -0,0 +1,39 @@ +user()->can('edit', $this->credit); + } + + 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 f21f23c56c75..c54b9c6ffae3 100644 --- a/routes/api.php +++ b/routes/api.php @@ -47,6 +47,7 @@ Route::group(['middleware' => ['api_db', 'token_auth', 'locale'], 'prefix' => 'a Route::post('invoices/bulk', 'InvoiceController@bulk')->name('invoices.bulk'); Route::resource('credits', 'CreditController'); // name = (credits. index / create / show / update / destroy / edit + Route::put('credits/{credit}/upload', 'CreditController@upload')->name('credits.upload'); Route::get('credits/{credit}/{action}', 'CreditController@action')->name('credits.action');