diff --git a/app/Http/Controllers/ClientController.php b/app/Http/Controllers/ClientController.php index 158688ba5544..010682e2a178 100644 --- a/app/Http/Controllers/ClientController.php +++ b/app/Http/Controllers/ClientController.php @@ -11,36 +11,37 @@ namespace App\Http\Controllers; -use App\Events\Client\ClientWasCreated; -use App\Events\Client\ClientWasUpdated; -use App\Factory\ClientFactory; -use App\Filters\ClientFilters; -use App\Http\Requests\Client\BulkClientRequest; -use App\Http\Requests\Client\CreateClientRequest; -use App\Http\Requests\Client\DestroyClientRequest; -use App\Http\Requests\Client\EditClientRequest; -use App\Http\Requests\Client\PurgeClientRequest; -use App\Http\Requests\Client\ReactivateClientEmailRequest; -use App\Http\Requests\Client\ShowClientRequest; -use App\Http\Requests\Client\StoreClientRequest; -use App\Http\Requests\Client\UpdateClientRequest; -use App\Http\Requests\Client\UploadClientRequest; -use App\Jobs\Client\UpdateTaxData; -use App\Jobs\PostMark\ProcessPostmarkWebhook; -use App\Models\Account; +use App\Utils\Ninja; use App\Models\Client; +use App\Models\Account; use App\Models\Company; use App\Models\SystemLog; -use App\Repositories\ClientRepository; -use App\Transformers\ClientTransformer; -use App\Utils\Ninja; -use App\Utils\Traits\BulkOptions; -use App\Utils\Traits\MakesHash; -use App\Utils\Traits\SavesDocuments; -use App\Utils\Traits\Uploadable; -use Illuminate\Http\Response; -use Illuminate\Support\Facades\Storage; use Postmark\PostmarkClient; +use Illuminate\Http\Response; +use App\Factory\ClientFactory; +use App\Filters\ClientFilters; +use App\Utils\Traits\MakesHash; +use App\Utils\Traits\Uploadable; +use App\Utils\Traits\BulkOptions; +use App\Jobs\Client\UpdateTaxData; +use App\Utils\Traits\SavesDocuments; +use App\Repositories\ClientRepository; +use App\Events\Client\ClientWasCreated; +use App\Events\Client\ClientWasUpdated; +use App\Transformers\ClientTransformer; +use Illuminate\Support\Facades\Storage; +use App\Services\Template\TemplateAction; +use App\Jobs\PostMark\ProcessPostmarkWebhook; +use App\Http\Requests\Client\BulkClientRequest; +use App\Http\Requests\Client\EditClientRequest; +use App\Http\Requests\Client\ShowClientRequest; +use App\Http\Requests\Client\PurgeClientRequest; +use App\Http\Requests\Client\StoreClientRequest; +use App\Http\Requests\Client\CreateClientRequest; +use App\Http\Requests\Client\UpdateClientRequest; +use App\Http\Requests\Client\UploadClientRequest; +use App\Http\Requests\Client\DestroyClientRequest; +use App\Http\Requests\Client\ReactivateClientEmailRequest; /** * Class ClientController. @@ -217,12 +218,31 @@ class ClientController extends BaseController $clients = Client::withTrashed() ->company() ->whereIn('id', $request->ids) - ->cursor() - ->each(function ($client) use ($action, $user) { - if ($user->can('edit', $client)) { - $this->client_repo->{$action}($client); - } - }); + ->get(); + + if($action == 'template' && $user->can('view', $clients->first())) { + + $hash_or_response = $request->boolean('send_email') ? 'email sent' : \Illuminate\Support\Str::uuid(); + + TemplateAction::dispatch( + $clients->pluck('id')->toArray(), + $request->template_id, + Client::class, + $user->id, + $user->company(), + $user->company()->db, + $hash_or_response, + $request->boolean('send_email') + ); + + return response()->json(['message' => $hash_or_response], 200); + } + + $clients->each(function ($client) use ($action, $user) { + if ($user->can('edit', $client)) { + $this->client_repo->{$action}($client); + } + }); return $this->listResponse(Client::query()->withTrashed()->company()->whereIn('id', $request->ids)); } diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index 5977aae8f3d3..0468bc5eefad 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -523,7 +523,7 @@ class PaymentController extends BaseController TemplateAction::dispatch( $payments->pluck('id')->toArray(), $request->template_id, - PurchaseOrder::class, + Payment::class, $user->id, $user->company(), $user->company()->db, diff --git a/app/Http/Controllers/ProjectController.php b/app/Http/Controllers/ProjectController.php index 085e7b1d7d6c..26cb944affea 100644 --- a/app/Http/Controllers/ProjectController.php +++ b/app/Http/Controllers/ProjectController.php @@ -11,23 +11,25 @@ namespace App\Http\Controllers; +use App\Models\Account; +use App\Models\Project; +use Illuminate\Http\Response; use App\Factory\ProjectFactory; use App\Filters\ProjectFilters; -use App\Http\Requests\Project\CreateProjectRequest; -use App\Http\Requests\Project\DestroyProjectRequest; +use App\Utils\Traits\MakesHash; +use App\Utils\Traits\SavesDocuments; +use App\Utils\Traits\GeneratesCounter; +use App\Repositories\ProjectRepository; +use App\Transformers\ProjectTransformer; +use App\Services\Template\TemplateAction; use App\Http\Requests\Project\EditProjectRequest; use App\Http\Requests\Project\ShowProjectRequest; use App\Http\Requests\Project\StoreProjectRequest; +use App\Http\Requests\Project\CreateProjectRequest; use App\Http\Requests\Project\UpdateProjectRequest; use App\Http\Requests\Project\UploadProjectRequest; -use App\Models\Account; -use App\Models\Project; -use App\Repositories\ProjectRepository; -use App\Transformers\ProjectTransformer; -use App\Utils\Traits\GeneratesCounter; -use App\Utils\Traits\MakesHash; -use App\Utils\Traits\SavesDocuments; -use Illuminate\Http\Response; +use App\Http\Requests\Project\DestroyProjectRequest; +use App\Http\Requests\PrTaskoject\BulkProjectRequest; /** * Class ProjectController. @@ -490,18 +492,36 @@ class ProjectController extends BaseController * ), * ) */ - public function bulk() + public function bulk(BulkProjectRequest $request) { /** @var \App\Models\User $user */ $user = auth()->user(); - $action = request()->input('action'); + $action = $request->input('action'); - $ids = request()->input('ids'); + $ids = $request->input('ids'); - $projects = Project::withTrashed()->find($this->transformKeys($ids)); + $projects = Project::withTrashed()->whereIn('id', $this->transformKeys($ids))->company()->get(); - $projects->each(function ($project, $key) use ($action, $user) { + if($action == 'template' && $user->can('view', $projects->first())) { + + $hash_or_response = $request->boolean('send_email') ? 'email sent' : \Illuminate\Support\Str::uuid(); + + TemplateAction::dispatch( + $projects->pluck('id')->toArray(), + $request->template_id, + Project::class, + $user->id, + $user->company(), + $user->company()->db, + $hash_or_response, + $request->boolean('send_email') + ); + + return response()->json(['message' => $hash_or_response], 200); + } + + $projects->each(function ($project) use ($action, $user) { if ($user->can('edit', $project)) { $this->project_repo->{$action}($project); } diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index a66c64424f6c..3195b81a72df 100644 --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -11,29 +11,31 @@ namespace App\Http\Controllers; -use App\Events\Task\TaskWasCreated; -use App\Events\Task\TaskWasUpdated; +use App\Models\Task; +use App\Utils\Ninja; +use App\Models\Account; +use App\Models\TaskStatus; use App\Factory\TaskFactory; use App\Filters\TaskFilters; -use App\Http\Requests\Task\CreateTaskRequest; -use App\Http\Requests\Task\DestroyTaskRequest; +use Illuminate\Http\Response; +use App\Utils\Traits\MakesHash; +use App\Utils\Traits\Uploadable; +use App\Utils\Traits\BulkOptions; +use App\Events\Task\TaskWasCreated; +use App\Events\Task\TaskWasUpdated; +use App\Repositories\TaskRepository; +use App\Utils\Traits\SavesDocuments; +use App\Transformers\TaskTransformer; +use App\Services\Template\TemplateAction; +use App\Http\Requests\Task\BulkTaskRequest; use App\Http\Requests\Task\EditTaskRequest; use App\Http\Requests\Task\ShowTaskRequest; use App\Http\Requests\Task\SortTaskRequest; use App\Http\Requests\Task\StoreTaskRequest; +use App\Http\Requests\Task\CreateTaskRequest; use App\Http\Requests\Task\UpdateTaskRequest; use App\Http\Requests\Task\UploadTaskRequest; -use App\Models\Account; -use App\Models\Task; -use App\Models\TaskStatus; -use App\Repositories\TaskRepository; -use App\Transformers\TaskTransformer; -use App\Utils\Ninja; -use App\Utils\Traits\BulkOptions; -use App\Utils\Traits\MakesHash; -use App\Utils\Traits\SavesDocuments; -use App\Utils\Traits\Uploadable; -use Illuminate\Http\Response; +use App\Http\Requests\Task\DestroyTaskRequest; /** * Class TaskController. @@ -497,16 +499,36 @@ class TaskController extends BaseController * ), * ) */ - public function bulk() + public function bulk(BulkTaskRequest $request) { - $action = request()->input('action'); + /** @var \App\Models\User $user */ + $user = auth()->user(); - $ids = request()->input('ids'); - $tasks = Task::withTrashed()->find($this->transformKeys($ids)); + $action = $request->input('action'); - $tasks->each(function ($task, $key) use ($action) { - /** @var \App\Models\User $user */ - $user = auth()->user(); + $ids = $request->input('ids'); + + $tasks = Task::withTrashed()->whereIn('id', $this->transformKeys($ids))->company()->get(); + + if($action == 'template' && $user->can('view', $tasks->first())) { + + $hash_or_response = request()->boolean('send_email') ? 'email sent' : \Illuminate\Support\Str::uuid(); + + TemplateAction::dispatch( + $tasks->pluck('id')->toArray(), + $request->template_id, + Task::class, + $user->id, + $user->company(), + $user->company()->db, + $hash_or_response, + $request->boolean('send_email') + ); + + return response()->json(['message' => $hash_or_response], 200); + } + + $tasks->each(function ($task, $key) use ($action, $user) { if ($user->can('edit', $task)) { $this->task_repo->{$action}($task); } diff --git a/app/Http/Requests/Client/BulkClientRequest.php b/app/Http/Requests/Client/BulkClientRequest.php index c18ac8fa3d10..bbe68db5e076 100644 --- a/app/Http/Requests/Client/BulkClientRequest.php +++ b/app/Http/Requests/Client/BulkClientRequest.php @@ -35,9 +35,13 @@ class BulkClientRequest extends Request $user = auth()->user(); return [ + 'action' => 'required|string|in:archive,restore,delete,template', 'ids' => ['required','bail','array',Rule::exists('clients', 'id')->where('company_id', $user->company()->id)], - 'action' => 'in:archive,restore,delete' + 'template' => 'sometimes|string', + 'template_id' => 'sometimes|string', + 'send_email' => 'sometimes|bool' ]; + } public function prepareForValidation() diff --git a/app/Http/Requests/Project/BulkProjectRequest.php b/app/Http/Requests/Project/BulkProjectRequest.php new file mode 100644 index 000000000000..0813e429353e --- /dev/null +++ b/app/Http/Requests/Project/BulkProjectRequest.php @@ -0,0 +1,45 @@ + 'required|string', + 'ids' => 'required|array', + 'template' => 'sometimes|string', + 'template_id' => 'sometimes|string', + 'send_email' => 'sometimes|bool' + ]; + + } +} diff --git a/app/Http/Requests/Task/BulkTaskRequest.php b/app/Http/Requests/Task/BulkTaskRequest.php index bba4fe941da6..6f58db8d3090 100644 --- a/app/Http/Requests/Task/BulkTaskRequest.php +++ b/app/Http/Requests/Task/BulkTaskRequest.php @@ -12,12 +12,9 @@ namespace App\Http\Requests\Task; use App\Http\Requests\Request; -use App\Models\Task; -use App\Utils\Traits\BulkOptions; class BulkTaskRequest extends Request { - use BulkOptions; /** * Determine if the user is authorized to make this request. @@ -26,7 +23,7 @@ class BulkTaskRequest extends Request */ public function authorize() { - return auth()->user()->can(auth()->user()->isAdmin(), Task::class); + return true; } /** @@ -36,13 +33,14 @@ class BulkTaskRequest extends Request */ public function rules() { - $rules = $this->getGlobalRules(); + + return [ + 'action' => 'required|string', + 'ids' => 'required|array', + 'template' => 'sometimes|string', + 'template_id' => 'sometimes|string', + 'send_email' => 'sometimes|bool' + ]; - /* We don't require IDs on bulk storing. */ - if ($this->action !== self::$STORE_METHOD) { - $rules['ids'] = ['required']; - } - - return $rules; } }