Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

HandlesDefaultSettingRecordCreation.php 1.9KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace App\Traits;
  3. use Illuminate\Database\Eloquent\Model;
  4. use Illuminate\Support\Facades\Auth;
  5. trait HandlesDefaultSettingRecordCreation
  6. {
  7. abstract protected function getRelatedEntities(): array;
  8. abstract protected function getFormModel(): string;
  9. protected function handleRecordCreation(array $data): Model
  10. {
  11. $relatedEntities = $this->getRelatedEntities();
  12. $model = $this->getFormModel();
  13. $existingRecord = $model::where('company_id', Auth::user()->currentCompany->id)
  14. ->latest()
  15. ->first();
  16. $newData = [
  17. 'company_id' => Auth::user()->currentCompany->id,
  18. 'updated_by' => Auth::id(),
  19. ];
  20. foreach ($relatedEntities as $field => $params) {
  21. [$class, $key, $type] = array_pad($params, 3, null);
  22. if ($existingRecord === null || !isset($existingRecord->{$field})) {
  23. $newData[$field] = $data[$field];
  24. continue;
  25. }
  26. if (isset($data[$field]) && $data[$field] !== $existingRecord->{$field}) {
  27. $this->updateEnabledRecord($class, $key, $existingRecord->{$field}, $type, false);
  28. $this->updateEnabledRecord($class, $key, $data[$field], $type, true);
  29. $newData[$field] = $data[$field];
  30. } else {
  31. $newData[$field] = $existingRecord->{$field};
  32. }
  33. }
  34. return $model::create($newData);
  35. }
  36. protected function updateEnabledRecord($class, $key, $value, $type = null, $enabled = true): void
  37. {
  38. $query = $class::where('company_id', Auth::user()->currentCompany->id)
  39. ->where('enabled', !$enabled);
  40. if ($type !== null) {
  41. $query = $query->where('type', $type);
  42. }
  43. $query->where($key, $value)
  44. ->update([
  45. 'enabled' => $enabled,
  46. 'updated_by' => Auth::id(),
  47. ]);
  48. }
  49. }