|
@@ -3,15 +3,19 @@
|
|
namespace App\Http\Controllers\API;
|
|
namespace App\Http\Controllers\API;
|
|
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use App\Http\Controllers\Controller;
|
|
|
|
+use App\Http\Requests\API\Task\BatchCreateItemRules;
|
|
|
|
+use App\Http\Requests\API\Task\BatchCreateRequest;
|
|
use App\Http\Requests\API\Task\CreateOrUpdateRequest;
|
|
use App\Http\Requests\API\Task\CreateOrUpdateRequest;
|
|
use App\Http\Resources\API\TaskDetailResource;
|
|
use App\Http\Resources\API\TaskDetailResource;
|
|
use App\Http\Resources\API\TaskResource;
|
|
use App\Http\Resources\API\TaskResource;
|
|
use App\Models\CustomField;
|
|
use App\Models\CustomField;
|
|
use App\Models\NamingRule;
|
|
use App\Models\NamingRule;
|
|
|
|
+use App\Models\Project;
|
|
use App\Models\Task;
|
|
use App\Models\Task;
|
|
use App\Repositories\CustomFieldRepository;
|
|
use App\Repositories\CustomFieldRepository;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Auth;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
+use Illuminate\Support\Facades\Validator;
|
|
|
|
|
|
class TaskController extends Controller
|
|
class TaskController extends Controller
|
|
{
|
|
{
|
|
@@ -93,4 +97,57 @@ class TaskController extends Controller
|
|
|
|
|
|
return $this->noContent();
|
|
return $this->noContent();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ public function batchStore(BatchCreateRequest $request, CustomFieldRepository $customFieldRepo)
|
|
|
|
+ {
|
|
|
|
+ $project = Project::query()->find($request->project_id);
|
|
|
|
+
|
|
|
|
+ $parsedItems = [];
|
|
|
|
+ $previousItem = [];
|
|
|
|
+ foreach ($request->items as $index => $item) {
|
|
|
|
+ if ($index == 0) {
|
|
|
|
+ $newItem = $item;
|
|
|
|
+ } else {
|
|
|
|
+ $newItem = [];
|
|
|
|
+ foreach ($item as $k => $v) {
|
|
|
|
+ $newItem[$k] = $v == "ditto" ? data_get($previousItem, $k) : $v;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $previousItem = $newItem;
|
|
|
|
+ $parsedItems[] = $newItem;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ $itemRules = new BatchCreateItemRules();
|
|
|
|
+ foreach ($parsedItems as $index => $item) {
|
|
|
|
+ $rules = $itemRules->rules($item);
|
|
|
|
+
|
|
|
|
+ try {
|
|
|
|
+ $validator = Validator::make($item, $rules);
|
|
|
|
+ if ($validator->fails()) {
|
|
|
|
+ return $this->badRequest(sprintf("line: %d, %s", $index + 1, $validator->errors()->first()));
|
|
|
|
+ }
|
|
|
|
+ } catch (\Exception $e) {
|
|
|
|
+ return $this->badRequest(sprintf("line: %d, %s", $index + 1, $e->getMessage()));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ foreach ($parsedItems as $item) {
|
|
|
|
+ $namingRuleId = data_get($item, "naming_rule_id", 0);
|
|
|
|
+ if ($namingRuleId > 0) {
|
|
|
|
+ $keys = $customFieldRepo->keysByGroup($namingRuleId);
|
|
|
|
+ $item['naming_rules'] = collect($item)->only($keys)->toArray();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ Task::query()->create([
|
|
|
|
+ ...$item,
|
|
|
|
+ 'project_id' => $project->id,
|
|
|
|
+ 'parent_id' => 0,
|
|
|
|
+ 'company_id' => Auth::user()->company_id,
|
|
|
|
+ 'created_by' => Auth::id(),
|
|
|
|
+ ]);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return $this->noContent();
|
|
|
|
+ }
|
|
}
|
|
}
|