diff --git a/app/Events/Design/DesignWasCreated.php b/app/Events/Design/DesignWasCreated.php index b44e8fcd90a2..6ed1669144ce 100644 --- a/app/Events/Design/DesignWasCreated.php +++ b/app/Events/Design/DesignWasCreated.php @@ -9,9 +9,9 @@ * @license https://opensource.org/licenses/AAL */ -namespace App\Events\Client; +namespace App\Events\Design; -use App\Models\Client; +use App\Models\Design; use Illuminate\Queue\SerializesModels; /** diff --git a/app/Events/Design/DesignWasDeleted.php b/app/Events/Design/DesignWasDeleted.php index 653a40f47836..93602e8248ff 100644 --- a/app/Events/Design/DesignWasDeleted.php +++ b/app/Events/Design/DesignWasDeleted.php @@ -9,9 +9,9 @@ * @license https://opensource.org/licenses/AAL */ -namespace App\Events\Client; +namespace App\Events\Design; -use App\Models\Client; +use App\Models\Design; use Illuminate\Queue\SerializesModels; /** @@ -45,5 +45,5 @@ class DesignWasDeleted { return new PrivateChannel('channel-name'); } -} + } diff --git a/app/Events/Design/DesignWasRestored.php b/app/Events/Design/DesignWasRestored.php index 1b71ecf93233..c9f66c882319 100644 --- a/app/Events/Design/DesignWasRestored.php +++ b/app/Events/Design/DesignWasRestored.php @@ -9,9 +9,9 @@ * @license https://opensource.org/licenses/AAL */ -namespace App\Events\Client; +namespace App\Events\Design; -use App\Models\Client; +use App\Models\Design; use Illuminate\Queue\SerializesModels; /** diff --git a/app/Events/Design/DesignWasUpdated.php b/app/Events/Design/DesignWasUpdated.php index f90d8c76b4e3..04c7c6b62ed8 100644 --- a/app/Events/Design/DesignWasUpdated.php +++ b/app/Events/Design/DesignWasUpdated.php @@ -9,9 +9,9 @@ * @license https://opensource.org/licenses/AAL */ -namespace App\Events\Client; +namespace App\Events\Design; -use App\Models\Client; +use App\Models\Design; use Illuminate\Queue\SerializesModels; /** @@ -45,5 +45,5 @@ class DesignWasUpdated { return new PrivateChannel('channel-name'); } -} + } diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 7a9425d72010..aafe25931921 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -64,22 +64,22 @@ class Handler extends ExceptionHandler if (app()->bound('sentry') && $this->shouldReport($exception)) { - // app('sentry')->configureScope(function (Scope $scope): void { + app('sentry')->configureScope(function (Scope $scope): void { - // if (auth()->guard('contact') && auth()->guard('contact')->user() && auth()->guard('contact')->user()->company->account->report_errors) { - // $scope->setUser([ - // 'id' => auth()->guard('contact')->user()->company->account->key, - // 'email' => "anonymous@example.com", - // 'name' => "Anonymous User", - // ]); - // } elseif (auth()->guard('user') && auth()->guard('user')->user() && auth()->user()->company() && auth()->user()->company()->account->report_errors) { - // $scope->setUser([ - // 'id' => auth()->user()->account->key, - // 'email' => "anonymous@example.com", - // 'name' => "Anonymous User", - // ]); - // } - // }); + if (auth()->guard('contact') && auth()->guard('contact')->user() && auth()->guard('contact')->user()->company->account->report_errors) { + $scope->setUser([ + 'id' => auth()->guard('contact')->user()->company->account->key, + 'email' => "anonymous@example.com", + 'name' => "Anonymous User", + ]); + } elseif (auth()->guard('user') && auth()->guard('user')->user() && auth()->user()->company() && auth()->user()->company()->account->report_errors) { + $scope->setUser([ + 'id' => auth()->user()->account->key, + 'email' => "anonymous@example.com", + 'name' => "Anonymous User", + ]); + } + }); app('sentry')->captureException($exception); } diff --git a/app/Http/Requests/Client/StoreClientRequest.php b/app/Http/Requests/Client/StoreClientRequest.php index 3c84212f3a6a..01cbd3449740 100644 --- a/app/Http/Requests/Client/StoreClientRequest.php +++ b/app/Http/Requests/Client/StoreClientRequest.php @@ -38,6 +38,16 @@ class StoreClientRequest extends Request public function rules() { + if ($this->input('documents') && is_array($this->input('documents'))) { + $documents = count($this->input('documents')); + + foreach (range(0, $documents) as $index) { + $rules['documents.' . $index] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + } elseif ($this->input('documents')) { + $rules['documents'] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + /* Ensure we have a client name, and that all emails are unique*/ //$rules['name'] = 'required|min:1'; $rules['id_number'] = 'unique:clients,id_number,' . $this->id . ',id,company_id,' . $this->company_id; diff --git a/app/Http/Requests/Client/UpdateClientRequest.php b/app/Http/Requests/Client/UpdateClientRequest.php index 44bec2a6a809..d3fa7c6825dc 100644 --- a/app/Http/Requests/Client/UpdateClientRequest.php +++ b/app/Http/Requests/Client/UpdateClientRequest.php @@ -41,6 +41,16 @@ class UpdateClientRequest extends Request { /* Ensure we have a client name, and that all emails are unique*/ + if ($this->input('documents') && is_array($this->input('documents'))) { + $documents = count($this->input('documents')); + + foreach (range(0, $documents) as $index) { + $rules['documents.' . $index] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + } elseif ($this->input('documents')) { + $rules['documents'] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + $rules['company_logo'] = 'mimes:jpeg,jpg,png,gif|max:10000'; $rules['industry_id'] = 'integer|nullable'; $rules['size_id'] = 'integer|nullable'; diff --git a/app/Http/Requests/Payment/StorePaymentRequest.php b/app/Http/Requests/Payment/StorePaymentRequest.php index a46f5c68f802..f7a4fad3b3ef 100644 --- a/app/Http/Requests/Payment/StorePaymentRequest.php +++ b/app/Http/Requests/Payment/StorePaymentRequest.php @@ -98,6 +98,17 @@ class StorePaymentRequest extends Request 'number' => 'nullable', ]; + + if ($this->input('documents') && is_array($this->input('documents'))) { + $documents = count($this->input('documents')); + + foreach (range(0, $documents) as $index) { + $rules['documents.' . $index] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + } elseif ($this->input('documents')) { + $rules['documents'] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + return $rules; } } diff --git a/app/Http/Requests/Payment/UpdatePaymentRequest.php b/app/Http/Requests/Payment/UpdatePaymentRequest.php index 7abe8aeebd65..b2fc986213b1 100644 --- a/app/Http/Requests/Payment/UpdatePaymentRequest.php +++ b/app/Http/Requests/Payment/UpdatePaymentRequest.php @@ -36,11 +36,24 @@ class UpdatePaymentRequest extends Request public function rules() {//min:1 removed, 'required' - return [ + $rules = [ 'invoices' => ['array',new PaymentAppliedValidAmount,new ValidCreditsPresentRule], 'invoices.*.invoice_id' => 'distinct', 'documents' => 'mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx', ]; + + if ($this->input('documents') && is_array($this->input('documents'))) { + $documents = count($this->input('documents')); + + foreach (range(0, $documents) as $index) { + $rules['documents.' . $index] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + } elseif ($this->input('documents')) { + $rules['documents'] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + + + return $rules; } protected function prepareForValidation() diff --git a/app/Http/Requests/Product/StoreProductRequest.php b/app/Http/Requests/Product/StoreProductRequest.php index b14607066404..68fa7b67acb2 100644 --- a/app/Http/Requests/Product/StoreProductRequest.php +++ b/app/Http/Requests/Product/StoreProductRequest.php @@ -29,12 +29,23 @@ class StoreProductRequest extends Request public function rules() { - return [ - //'product_key' => 'required|unique:products,product_key,null,null,company_id,'.auth()->user()->companyId(), - 'cost' => 'numeric', - 'price' => 'numeric', - 'quantity' => 'numeric', - ]; + + if ($this->input('documents') && is_array($this->input('documents'))) { + $documents = count($this->input('documents')); + + foreach (range(0, $documents) as $index) { + $rules['documents.' . $index] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + } elseif ($this->input('documents')) { + $rules['documents'] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + + $rules['cost'] = 'numeric'; + $rules['price'] = 'numeric'; + $rules['quantity'] = 'numeric'; + + return $rules; + } protected function prepareForValidation() diff --git a/app/Http/Requests/Product/UpdateProductRequest.php b/app/Http/Requests/Product/UpdateProductRequest.php index 3d67b871e5a8..fc6a6ba3ef6d 100644 --- a/app/Http/Requests/Product/UpdateProductRequest.php +++ b/app/Http/Requests/Product/UpdateProductRequest.php @@ -32,12 +32,23 @@ class UpdateProductRequest extends Request public function rules() { - return [ - //'product_key' => 'unique:products,product_key,'.$this->product->id.',id,company_id,'.auth()->user()->companyId(), - 'cost' => 'numeric', - 'price' => 'numeric', - 'quantity' => 'numeric', - ]; + + if ($this->input('documents') && is_array($this->input('documents'))) { + $documents = count($this->input('documents')); + + foreach (range(0, $documents) as $index) { + $rules['documents.' . $index] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + } elseif ($this->input('documents')) { + $rules['documents'] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + + $rules['cost'] = 'numeric'; + $rules['price'] = 'numeric'; + $rules['quantity'] = 'numeric'; + + return $rules; + } diff --git a/app/Http/Requests/Quote/StoreQuoteRequest.php b/app/Http/Requests/Quote/StoreQuoteRequest.php index 8386ed5ac12a..eb5ed87c7682 100644 --- a/app/Http/Requests/Quote/StoreQuoteRequest.php +++ b/app/Http/Requests/Quote/StoreQuoteRequest.php @@ -75,9 +75,21 @@ class StoreQuoteRequest extends Request public function rules() { - return [ - 'documents' => 'mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx', - 'client_id' => 'required|exists:clients,id,company_id,'.auth()->user()->company()->id, - ]; + $rules = []; + + $rules['client_id'] = 'required|exists:clients,id,company_id,'.auth()->user()->company()->id; + + if ($this->input('documents') && is_array($this->input('documents'))) { + $documents = count($this->input('documents')); + + foreach (range(0, $documents) as $index) { + $rules['documents.' . $index] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + } elseif ($this->input('documents')) { + $rules['documents'] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + + return $rules; + } } diff --git a/app/Http/Requests/Quote/UpdateQuoteRequest.php b/app/Http/Requests/Quote/UpdateQuoteRequest.php index 82c17ffb61c0..a770ea2588f9 100644 --- a/app/Http/Requests/Quote/UpdateQuoteRequest.php +++ b/app/Http/Requests/Quote/UpdateQuoteRequest.php @@ -38,9 +38,19 @@ class UpdateQuoteRequest extends Request public function rules() { - return [ - 'documents' => 'mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx', - ]; + $rules = []; + + if ($this->input('documents') && is_array($this->input('documents'))) { + $documents = count($this->input('documents')); + + foreach (range(0, $documents) as $index) { + $rules['documents.' . $index] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + } elseif ($this->input('documents')) { + $rules['documents'] = 'file|mimes:png,ai,svg,jpeg,tiff,pdf,gif,psd,txt,doc,xls,ppt,xlsx,docx,pptx|max:20000'; + } + + return $rules; } protected function prepareForValidation() diff --git a/app/Jobs/Util/UploadFile.php b/app/Jobs/Util/UploadFile.php index ac9168e21b55..ce8d500dcd02 100644 --- a/app/Jobs/Util/UploadFile.php +++ b/app/Jobs/Util/UploadFile.php @@ -94,8 +94,8 @@ class UploadFile implements ShouldQueue $document->disk = $this->disk; $document->hash = $this->file->hashName(); $document->size = $this->file->getSize(); - $document->width = isset($width) ?? null; - $document->height = isset($height) ?? null; + $document->width = isset($width) ? $width : null; + $document->height = isset($height) ? $height : null; // $preview_path = $this->encodePrimaryKey($this->company->id); // $document->preview = $this->generatePreview($preview_path); diff --git a/app/Repositories/ClientRepository.php b/app/Repositories/ClientRepository.php index be461b6f1141..72cdf83b0605 100644 --- a/app/Repositories/ClientRepository.php +++ b/app/Repositories/ClientRepository.php @@ -15,6 +15,7 @@ use App\Factory\ClientFactory; use App\Models\Client; use App\Repositories\ClientContactRepository; use App\Utils\Traits\GeneratesCounter; +use App\Utils\Traits\SavesDocuments; use Illuminate\Http\Request; /** @@ -23,6 +24,8 @@ use Illuminate\Http\Request; class ClientRepository extends BaseRepository { use GeneratesCounter; + use SavesDocuments; + /** * @var ClientContactRepository */ @@ -75,6 +78,9 @@ class ClientRepository extends BaseRepository $data['name'] = $client->present()->name(); } + if (array_key_exists('documents', $data)) { + $this->saveDocuments($data['documents'], $client); + } return $client; } diff --git a/app/Repositories/PaymentRepository.php b/app/Repositories/PaymentRepository.php index 2237f992fb86..245c02795a96 100644 --- a/app/Repositories/PaymentRepository.php +++ b/app/Repositories/PaymentRepository.php @@ -21,6 +21,7 @@ use App\Models\Invoice; use App\Models\Payment; use App\Repositories\CreditRepository; use App\Utils\Traits\MakesHash; +use App\Utils\Traits\SavesDocuments; use Illuminate\Http\Request; use Illuminate\Support\Carbon; @@ -30,6 +31,7 @@ use Illuminate\Support\Carbon; class PaymentRepository extends BaseRepository { use MakesHash; + use SavesDocuments; protected $credit_repo; @@ -89,6 +91,9 @@ class PaymentRepository extends BaseRepository $payment->status_id = Payment::STATUS_COMPLETED; $payment->save(); + if (array_key_exists('documents', $data)) { + $this->saveDocuments($data['documents'], $payment); + } /*Ensure payment number generated*/ if (!$payment->number || strlen($payment->number) == 0) { diff --git a/app/Repositories/ProductRepository.php b/app/Repositories/ProductRepository.php index 8ed886fc6f7f..744694330baa 100644 --- a/app/Repositories/ProductRepository.php +++ b/app/Repositories/ProductRepository.php @@ -12,6 +12,7 @@ namespace App\Repositories; use App\Models\Product; +use App\Utils\Traits\SavesDocuments; use Illuminate\Http\Request; /** @@ -19,6 +20,8 @@ use Illuminate\Http\Request; */ class ProductRepository extends BaseRepository { + use SavesDocuments; + public function getClassName() { return Product::class; @@ -34,6 +37,10 @@ class ProductRepository extends BaseRepository $product->fill($data); $product->save(); + if (array_key_exists('documents', $data)) { + $this->saveDocuments($data['documents'], $product); + } + return $product; } } diff --git a/app/Transformers/DocumentTransformer.php b/app/Transformers/DocumentTransformer.php index ca3435c58f30..6f34407b08e4 100644 --- a/app/Transformers/DocumentTransformer.php +++ b/app/Transformers/DocumentTransformer.php @@ -37,7 +37,7 @@ class DocumentTransformer extends EntityTransformer 'assigned_user_id' => $this->encodePrimaryKey($document->assigned_user_id), 'project_id' => $this->encodePrimaryKey($document->project_id), 'vendor_id' => $this->encodePrimaryKey($document->vendor_id), - 'url' => (string) $document->url ?: '', + 'url' => (string) $document->generateUrl() ?: '', 'preview' => (string) $document->preview ?: '', 'name' => (string) $document->name, 'type' => (string) $document->type, diff --git a/config/beacon.php b/config/beacon.php index e84902dd71e4..9a36b523987b 100644 --- a/config/beacon.php +++ b/config/beacon.php @@ -5,7 +5,7 @@ return [ /** * Enable or disable the beacon */ - 'enabled' => true, + 'enabled' => env('BEACON_ENABLED', false), /** * The API endpoint for logs