diff --git a/app/Http/Controllers/OpenAPI/DocumentSchema.php b/app/Http/Controllers/OpenAPI/DocumentSchema.php new file mode 100644 index 000000000000..12e0372441af --- /dev/null +++ b/app/Http/Controllers/OpenAPI/DocumentSchema.php @@ -0,0 +1,23 @@ +itemResponse($payment); } + +/** + * Update the specified resource in storage. + * + * @param UploadPaymentRequest $request + * @param Payment $payment + * @return Response + * + * + * + * @OA\Put( + * path="/api/v1/payments/{id}/upload", + * operationId="uploadPayment", + * tags={"payments"}, + * summary="Uploads a document to a payment", + * description="Handles the uploading of a document to a payment", + * @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 Payment Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the Payment 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/Payment"), + * ), + * @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(UploadPaymentRequest $request, Payment $payment) + { + + if ($request->has('documents')) + $this->saveDocuments($request->file('documents'), $payment); + + return $this->itemResponse($payment->fresh()); + + } } diff --git a/app/Http/Controllers/ProductController.php b/app/Http/Controllers/ProductController.php index fd0248c2481f..3ee844e2deeb 100644 --- a/app/Http/Controllers/ProductController.php +++ b/app/Http/Controllers/ProductController.php @@ -19,16 +19,19 @@ use App\Http\Requests\Product\EditProductRequest; use App\Http\Requests\Product\ShowProductRequest; use App\Http\Requests\Product\StoreProductRequest; use App\Http\Requests\Product\UpdateProductRequest; +use App\Http\Requests\Product\UploadProductRequest; use App\Models\Product; use App\Repositories\ProductRepository; use App\Transformers\ProductTransformer; use App\Utils\Traits\MakesHash; +use App\Utils\Traits\SavesDocuments; use Illuminate\Http\Request; use Illuminate\Http\Response; class ProductController extends BaseController { use MakesHash; + use SavesDocuments; protected $entity_type = Product::class; @@ -476,4 +479,65 @@ class ProductController extends BaseController return $this->listResponse(Product::withTrashed()->whereIn('id', $this->transformKeys($ids))); } + +/** + * Update the specified resource in storage. + * + * @param UploadProductRequest $request + * @param Product $product + * @return Response + * + * + * + * @OA\Put( + * path="/api/v1/products/{id}/upload", + * operationId="uploadProduct", + * tags={"products"}, + * summary="Uploads a document to a product", + * description="Handles the uploading of a document to a product", + * @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 Product Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the Product 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/Product"), + * ), + * @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(UploadProductRequest $request, Product $product) + { + + if ($request->has('documents')) + $this->saveDocuments($request->file('documents'), $product); + + return $this->itemResponse($product->fresh()); + + } } diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 2c8da54d3e0f..5868f1b33738 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -19,6 +19,7 @@ use App\Http\Requests\Project\EditProjectRequest; use App\Http\Requests\Project\ShowProjectRequest; use App\Http\Requests\Project\StoreProjectRequest; use App\Http\Requests\Project\UpdateProjectRequest; +use App\Http\Requests\Project\UploadProjectRequest; use App\Models\Project; use App\Repositories\ProjectRepository; use App\Transformers\ProjectTransformer; @@ -503,4 +504,65 @@ class ProjectController extends BaseController return $this->listResponse(Project::withTrashed()->whereIn('id', $this->transformKeys($ids))); } + + /** + * Update the specified resource in storage. + * + * @param UploadProductRequest $request + * @param Product $project + * @return Response + * + * + * + * @OA\Put( + * path="/api/v1/projects/{id}/upload", + * operationId="uploadProject", + * tags={"projects"}, + * summary="Uploads a document to a project", + * description="Handles the uploading of a document to a project", + * @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 Project Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the Project 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/Project"), + * ), + * @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(UploadProjectRequest $request, Product $project) + { + + if ($request->has('documents')) + $this->saveDocuments($request->file('documents'), $project); + + return $this->itemResponse($project->fresh()); + + } } diff --git a/app/Http/Controllers/QuoteController.php b/app/Http/Controllers/QuoteController.php index d80d5b244c7a..7f6cc661bc3b 100644 --- a/app/Http/Controllers/QuoteController.php +++ b/app/Http/Controllers/QuoteController.php @@ -24,6 +24,7 @@ use App\Http\Requests\Quote\EditQuoteRequest; use App\Http\Requests\Quote\ShowQuoteRequest; use App\Http\Requests\Quote\StoreQuoteRequest; use App\Http\Requests\Quote\UpdateQuoteRequest; +use App\Http\Requests\Quote\UploadQuoteRequest; use App\Jobs\Invoice\ZipInvoices; use App\Models\Client; use App\Models\Invoice; @@ -34,6 +35,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; @@ -43,6 +45,7 @@ use Illuminate\Http\Response; class QuoteController extends BaseController { use MakesHash; + use SavesDocuments; protected $entity_type = Quote::class; @@ -717,4 +720,65 @@ class QuoteController extends BaseController return response()->download($file_path); } + + /** + * Update the specified resource in storage. + * + * @param UploadQuoteRequest $request + * @param Quote $quote + * @return Response + * + * + * + * @OA\Put( + * path="/api/v1/quotes/{id}/upload", + * operationId="uploadQuote", + * tags={"quotes"}, + * summary="Uploads a document to a quote", + * description="Handles the uploading of a document to a quote", + * @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 Quote Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the Quote 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/Quote"), + * ), + * @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(UploadQuoteRequest $request, Quote $quote) + { + + if ($request->has('documents')) + $this->saveDocuments($request->file('documents'), $quote); + + return $this->itemResponse($quote->fresh()); + + } } diff --git a/app/Http/Controllers/RecurringInvoiceController.php b/app/Http/Controllers/RecurringInvoiceController.php index aae11052205a..0a9ce664d488 100644 --- a/app/Http/Controllers/RecurringInvoiceController.php +++ b/app/Http/Controllers/RecurringInvoiceController.php @@ -20,10 +20,12 @@ use App\Http\Requests\RecurringInvoice\EditRecurringInvoiceRequest; use App\Http\Requests\RecurringInvoice\ShowRecurringInvoiceRequest; use App\Http\Requests\RecurringInvoice\StoreRecurringInvoiceRequest; use App\Http\Requests\RecurringInvoice\UpdateRecurringInvoiceRequest; +use App\Http\Requests\RecurringInvoice\UploadRecurringInvoiceRequest; use App\Models\RecurringInvoice; use App\Repositories\RecurringInvoiceRepository; use App\Transformers\RecurringInvoiceTransformer; use App\Utils\Traits\MakesHash; +use App\Utils\Traits\SavesDocuments; use Illuminate\Http\Request; use Illuminate\Http\Response; @@ -33,6 +35,7 @@ use Illuminate\Http\Response; class RecurringInvoiceController extends BaseController { use MakesHash; + use SavesDocuments; protected $entity_type = RecurringInvoice::class; @@ -680,4 +683,65 @@ class RecurringInvoiceController extends BaseController break; } } + +/** + * Update the specified resource in storage. + * + * @param UploadRecurringInvoiceRequest $request + * @param RecurringInvoice $recurring_invoice + * @return Response + * + * + * + * @OA\Put( + * path="/api/v1/recurring_invoices/{id}/upload", + * operationId="uploadRecurringInvoice", + * tags={"recurring_invoices"}, + * summary="Uploads a document to a recurring_invoice", + * description="Handles the uploading of a document to a recurring_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 RecurringInvoice Hashed ID", + * example="D2J234DFA", + * required=true, + * @OA\Schema( + * type="string", + * format="string", + * ), + * ), + * @OA\Response( + * response=200, + * description="Returns the RecurringInvoice 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/RecurringInvoice"), + * ), + * @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(UploadRecurringInvoiceRequest $request, RecurringInvoice $recurring_invoice) + { + + if ($request->has('documents')) + $this->saveDocuments($request->file('documents'), $recurring_invoice); + + return $this->itemResponse($recurring_invoice->fresh()); + + } } diff --git a/app/Http/Requests/Payment/UploadPaymentRequest.php b/app/Http/Requests/Payment/UploadPaymentRequest.php new file mode 100644 index 000000000000..06d8694ef435 --- /dev/null +++ b/app/Http/Requests/Payment/UploadPaymentRequest.php @@ -0,0 +1,39 @@ +user()->can('edit', $this->payment); + } + + 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/app/Http/Requests/Product/UploadProductRequest.php b/app/Http/Requests/Product/UploadProductRequest.php new file mode 100644 index 000000000000..888c35060b83 --- /dev/null +++ b/app/Http/Requests/Product/UploadProductRequest.php @@ -0,0 +1,39 @@ +user()->can('edit', $this->product); + } + + 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/app/Http/Requests/Project/UploadProjectRequest.php b/app/Http/Requests/Project/UploadProjectRequest.php new file mode 100644 index 000000000000..a7a75c16adc8 --- /dev/null +++ b/app/Http/Requests/Project/UploadProjectRequest.php @@ -0,0 +1,39 @@ +user()->can('edit', $this->project); + } + + 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/app/Http/Requests/Quote/UploadQuoteRequest.php b/app/Http/Requests/Quote/UploadQuoteRequest.php new file mode 100644 index 000000000000..0f36e2d3bfaf --- /dev/null +++ b/app/Http/Requests/Quote/UploadQuoteRequest.php @@ -0,0 +1,39 @@ +user()->can('edit', $this->quote); + } + + 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/app/Http/Requests/RecurringInvoice/UploadRecurringInvoiceRequest.php b/app/Http/Requests/RecurringInvoice/UploadRecurringInvoiceRequest.php new file mode 100644 index 000000000000..3f6895044782 --- /dev/null +++ b/app/Http/Requests/RecurringInvoice/UploadRecurringInvoiceRequest.php @@ -0,0 +1,39 @@ +user()->can('edit', $this->recurring_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; + + } +}