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/CreditController.php b/app/Http/Controllers/CreditController.php index 41094bc129bd..439c986f19e9 100644 --- a/app/Http/Controllers/CreditController.php +++ b/app/Http/Controllers/CreditController.php @@ -557,7 +557,7 @@ class CreditController extends BaseController $hash_or_response = $request->boolean('send_email') ? 'email sent' : \Illuminate\Support\Str::uuid(); TemplateAction::dispatch( - $credits->pluck('id')->toArray(), + $credits->pluck('hashed_id')->toArray(), $request->template_id, Credit::class, $user->id, @@ -570,8 +570,6 @@ class CreditController extends BaseController return response()->json(['message' => $hash_or_response], 200); } - - $credits->each(function ($credit, $key) use ($action, $user) { if ($user->can('edit', $credit)) { $this->performAction($credit, $action, true); diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index 5977aae8f3d3..d413c7029612 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -519,11 +519,11 @@ class PaymentController extends BaseController if($action == 'template' && $user->can('view', $payments->first())) { $hash_or_response = request()->boolean('send_email') ? 'email sent' : \Illuminate\Support\Str::uuid(); - +nlog($payments->pluck('hashed_id')->toArray()); TemplateAction::dispatch( - $payments->pluck('id')->toArray(), + $payments->pluck('hashed_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..79dc2c3b8a66 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\Project\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('hashed_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/PurchaseOrderController.php b/app/Http/Controllers/PurchaseOrderController.php index 528442886b22..61fa572c5bfe 100644 --- a/app/Http/Controllers/PurchaseOrderController.php +++ b/app/Http/Controllers/PurchaseOrderController.php @@ -525,15 +525,12 @@ class PurchaseOrderController extends BaseController }, 'print.pdf', ['Content-Type' => 'application/pdf']); } - - - if($action == 'template' && $user->can('view', $purchase_orders->first())) { $hash_or_response = $request->boolean('send_email') ? 'email sent' : \Illuminate\Support\Str::uuid(); TemplateAction::dispatch( - $purchase_orders->pluck('id')->toArray(), + $purchase_orders->pluck('hashed_id')->toArray(), $request->template_id, PurchaseOrder::class, $user->id, @@ -546,7 +543,6 @@ class PurchaseOrderController extends BaseController return response()->json(['message' => $hash_or_response], 200); } - /* * Send the other actions to the switch */ diff --git a/app/Http/Controllers/QuoteController.php b/app/Http/Controllers/QuoteController.php index c5c6532f0b59..b8fd4bae7fad 100644 --- a/app/Http/Controllers/QuoteController.php +++ b/app/Http/Controllers/QuoteController.php @@ -518,9 +518,9 @@ class QuoteController extends BaseController /** @var \App\Models\User $user */ $user = auth()->user(); - $action = request()->input('action'); + $action = $request->input('action'); - $ids = request()->input('ids'); + $ids = $request->input('ids'); if (Ninja::isHosted() && (stripos($action, 'email') !== false) && !$user->account->account_sms_verified) { return response(['message' => 'Please verify your account to send emails.'], 400); diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index a66c64424f6c..8aa91f55ec4e 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('hashed_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/Credit/BulkCreditRequest.php b/app/Http/Requests/Credit/BulkCreditRequest.php index fd04b4216320..a1e0c891923b 100644 --- a/app/Http/Requests/Credit/BulkCreditRequest.php +++ b/app/Http/Requests/Credit/BulkCreditRequest.php @@ -35,9 +35,15 @@ class BulkCreditRequest extends FormRequest */ public function rules() { + /** @var \App\Models\User $user */ + $user = auth()->user(); + return [ - 'ids' => ['required','bail','array',Rule::exists('credits', 'id')->where('company_id', auth()->user()->company()->id)], - 'action' => 'required|bail|in:archive,restore,delete,email,bulk_download,bulk_print,mark_paid,clone_to_credit,history,mark_sent,download,send_email' + 'ids' => ['required','bail','array',Rule::exists('credits', 'id')->where('company_id', $user->company()->id)], + 'action' => 'required|bail|in:archive,restore,delete,email,bulk_download,bulk_print,mark_paid,clone_to_credit,history,mark_sent,download,send_email,template', + 'template' => 'sometimes|string', + 'template_id' => 'sometimes|string', + 'send_email' => 'sometimes|bool' ]; } diff --git a/app/Http/Requests/Project/BulkProjectRequest.php b/app/Http/Requests/Project/BulkProjectRequest.php new file mode 100644 index 000000000000..63d677f58845 --- /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/PurchaseOrder/BulkPurchaseOrderRequest.php b/app/Http/Requests/PurchaseOrder/BulkPurchaseOrderRequest.php index 28a581ffd3d8..15a877901303 100644 --- a/app/Http/Requests/PurchaseOrder/BulkPurchaseOrderRequest.php +++ b/app/Http/Requests/PurchaseOrder/BulkPurchaseOrderRequest.php @@ -30,7 +30,10 @@ class BulkPurchaseOrderRequest extends Request { return [ 'ids' => 'required|bail|array|min:1', - 'action' => 'in:archive,restore,delete,email,bulk_download,bulk_print,mark_sent,download,send_email,add_to_inventory,expense,cancel' + 'action' => 'in:template,archive,restore,delete,email,bulk_download,bulk_print,mark_sent,download,send_email,add_to_inventory,expense,cancel', + 'template' => 'sometimes|string', + 'template_id' => 'sometimes|string', + 'send_email' => 'sometimes|bool' ]; } } diff --git a/app/Http/Requests/Quote/BulkActionQuoteRequest.php b/app/Http/Requests/Quote/BulkActionQuoteRequest.php index cb77becc069a..808322c3e471 100644 --- a/app/Http/Requests/Quote/BulkActionQuoteRequest.php +++ b/app/Http/Requests/Quote/BulkActionQuoteRequest.php @@ -31,7 +31,11 @@ class BulkActionQuoteRequest extends Request $input = $this->all(); $rules = [ - 'action' => 'sometimes|in:convert_to_invoice,convert_to_project,email,bulk_download,bulk_print,clone_to_invoice,approve,download,restore,archive,delete,send_email,mark_sent', + 'action' => 'sometimes|in:template,convert_to_invoice,convert_to_project,email,bulk_download,bulk_print,clone_to_invoice,approve,download,restore,archive,delete,send_email,mark_sent', + 'ids' => 'required|array', + 'template' => 'sometimes|string', + 'template_id' => 'sometimes|string', + 'send_email' => 'sometimes|bool' ]; if (in_array($input['action'], ['convert,convert_to_invoice'])) { 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; } } diff --git a/app/Services/Template/TemplateAction.php b/app/Services/Template/TemplateAction.php index f717aa172437..0f4e2897d0b5 100644 --- a/app/Services/Template/TemplateAction.php +++ b/app/Services/Template/TemplateAction.php @@ -103,6 +103,8 @@ class TemplateAction implements ShouldQueue ->where('company_id', $this->company->id) ->get(); + nlog($result->toArray()); + if($result->count() <= 1) { $data[$key] = collect($result); } else { diff --git a/app/Services/Template/TemplateService.php b/app/Services/Template/TemplateService.php index 6b6896cae0c6..3c631b084caf 100644 --- a/app/Services/Template/TemplateService.php +++ b/app/Services/Template/TemplateService.php @@ -120,7 +120,7 @@ class TemplateService * @return self */ public function build(array $data): self - { + {nlog($data); $this->compose() ->processData($data) ->parseNinjaBlocks()