NameRuleController.php 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. namespace App\Http\Controllers\API;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\API\NamingRule\AutonameRequest;
  5. use App\Http\Requests\API\NamingRule\CombinationSettingRequest;
  6. use App\Http\Requests\API\NamingRule\CreateOrUpdateRequest;
  7. use App\Http\Resources\API\NamingRuleCombinationResource;
  8. use App\Http\Resources\API\NamingRuleResource;
  9. use App\Http\Resources\API\NamingRuleSimpleResource;
  10. use App\Models\Asset;
  11. use App\Models\CustomField;
  12. use App\Models\NamingRule;
  13. use App\Models\Project;
  14. use Illuminate\Http\Request;
  15. use Illuminate\Support\Facades\Auth;
  16. use Illuminate\Support\Facades\DB;
  17. class NameRuleController extends Controller
  18. {
  19. /**
  20. * Display a listing of the resource.
  21. */
  22. public function index(Request $request)
  23. {
  24. $pageSize=$request->get('page_size') ?? 10;
  25. $namingRules = NamingRule::allowed()->with(['company'])->filter($request->all())->paginate($pageSize);
  26. return NamingRuleResource::collection($namingRules);
  27. }
  28. /**
  29. * Store a newly created resource in storage.
  30. */
  31. public function store(CreateOrUpdateRequest $request)
  32. {
  33. $formData = $request->only(['name', 'status', 'company_id', 'global']);
  34. if (! Auth::user()->super_admin) {
  35. $formData['company_id'] = Auth::user()->company_id;
  36. unset($formData['global']);
  37. }
  38. NamingRule::create($formData);
  39. return $this->created();
  40. }
  41. /**
  42. * Display the specified resource.
  43. */
  44. public function show(string $id)
  45. {
  46. $namingRule = NamingRule::query()->allowed()->findOrFail($id);
  47. return new NamingRuleResource($namingRule);
  48. }
  49. /**
  50. * Update the specified resource in storage.
  51. */
  52. public function update(CreateOrUpdateRequest $request, string $id)
  53. {
  54. $namingRule = NamingRule::query()->allowed()->findOrFail($id);
  55. $namingRule->fill($request->only([
  56. 'name', 'status', 'global'
  57. ]));
  58. $namingRule->save();
  59. return $this->noContent();
  60. }
  61. /**
  62. * Remove the specified resource from storage.
  63. */
  64. public function destroy(string $id)
  65. {
  66. DB::transaction(function () use ($id) {
  67. $namerule = NamingRule::query()->allowed()->findOrFail($id);
  68. $namerule->delete();
  69. $customfield = CustomField::query()->where('group', $id);
  70. if (!empty($customfield)) {
  71. $customfield->delete();
  72. }
  73. });
  74. return $this->noContent();
  75. }
  76. public function enabled()
  77. {
  78. $namingRules = NamingRule::where('status', 1)->where(function ($query) {
  79. return $query->where("company_id", Auth::user()->company_id)->orWhere(function ($query){
  80. $query->where('company_id',0)->where( 'global',1);
  81. });
  82. })->select(['id', 'name'])->get();
  83. return $this->success([
  84. 'data' => $namingRules
  85. ]);
  86. }
  87. public function combinationSetting(CombinationSettingRequest $request, string $id)
  88. {
  89. $namingRule = NamingRule::query()->allowed()->findOrFail($id);
  90. $namingRule->combination_rules = $request->all();
  91. $namingRule->save();
  92. return $this->noContent();
  93. }
  94. public function combinationShow(string $id){
  95. $nameRule=NamingRule::query()->allowed()->findOrFail($id);
  96. return new NamingRuleCombinationResource($nameRule);
  97. }
  98. public function autoname(AutonameRequest $request, string $id)
  99. {
  100. $namingRule = NamingRule::query()->allowed()->findOrFail($id);
  101. if (! $namingRule->combination_rules) {
  102. return $this->badRequest("Please set naming combination rules");
  103. }
  104. $code = match ($request->code_type) {
  105. "project","container_project"=> Project::query()->find($request->code_id)?->code,
  106. "container_asset" => Asset::query()->find($request->code_id)?->code,
  107. default => ""
  108. };
  109. if (! $code) {
  110. return $this->badRequest("The supported type or selected item does not exist");
  111. }
  112. $name = $code;
  113. foreach ($namingRule->combination_rules as $rule) {
  114. if (! isset($request->fields[$rule['field']]) || !$request->fields[$rule['field']]) {
  115. return $this->badRequest(sprintf("%s field is required", $rule['field']));
  116. }
  117. $name .= $rule['link'] . $request->fields[$rule['field']];
  118. }
  119. return $this->success([
  120. 'data' => $name
  121. ]);
  122. }
  123. }