NameRuleController.php 4.5 KB

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