NameRuleController.php 4.3 KB

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