Update.php
1 <?php 2 3 namespace App\Http\Livewire\InboxFiles; 4 5 use App\Enums\InboxFileTypeEnum; 6 use App\Http\Services\AutoRequirementService; 7 use App\Http\Services\DossierService; 8 use App\Http\Services\ValidationService; 9 use App\Http\Services\ValidationTypeService; 10 use App\Models\InboxFile; 11 use App\Models\ValidationType; 12 use App\Rules\ValidateDossierCodeExists; 13 use Illuminate\Support\Facades\DB; 14 use Livewire\Component; 15 use Livewire\WithFileUploads; 16 use WireUi\Traits\Actions; 17 18 class Update extends Component 19 { 20 use Actions, WithFileUploads; 21 22 public int $entityId; // InboxFile ID 23 public InboxFile $inboxFile; 24 public string $code = ''; 25 public ?int $type = null; 26 public ?int $validationTypeId = null; 27 28 public function rules() 29 { 30 return [ 31 'code' => [ 32 'required', 33 'string', 34 new ValidateDossierCodeExists(), 35 ], 36 'type' => 'required', 37 'validationTypeId' => 'required', 38 ]; 39 } 40 41 public function mount($entityId) 42 { 43 $this->entityId = $entityId; 44 $this->inboxFile = InboxFile::findOrFail($entityId); 45 46 $this->code = $this->inboxFile->dossier->code ?? ''; 47 $this->type = $this->inboxFile->type; 48 $this->validationTypeId = $this->inboxFile->validation->validation_type_id ?? null; 49 } 50 51 public function getDossierProperty() 52 { 53 return DossierService::findByCode($this->code); 54 } 55 56 public function getTypesProperty() 57 { 58 return InboxFileTypeEnum::valueLangArray(); 59 } 60 61 public function getValidationTypesProperty() 62 { 63 $dossier = DossierService::findByCode($this->code); 64 if (!$dossier) { 65 return []; 66 } 67 return ValidationTypeService::getValidationTypesSelect($dossier); 68 } 69 70 public function validationSelectIsDisabled() 71 { 72 return $this->validationTypes->isEmpty(); 73 } 74 75 public function updated($propertyName) 76 { 77 $this->validateOnly($propertyName); 78 $this->forgetComputed(); 79 } 80 81 public function updateConfirm() 82 { 83 if ($this->modifiesTheValidation()) { 84 $this->confirmNewValidation(); 85 } else { 86 $this->update(); 87 } 88 } 89 90 public function update() 91 { 92 $this->validate(); 93 DB::beginTransaction(); 94 95 try { 96 $this->inboxFile->dossier_id = $this->dossier->id; 97 $this->inboxFile->type = $this->type; 98 $this->inboxFile->save(); 99 $this->updateValidation(); 100 } catch (\Exception $e) { 101 logger($e->getMessage()); 102 $this->notification()->error(__('inbox-files.notifications.update.error.message')); 103 return; 104 } 105 106 DB::commit(); 107 108 $this->emitUp('closePanel'); 109 $this->emitTo(View::class, 'refresh'); 110 $this->emitTo(Validate::class, 'refresh'); 111 $this->emitTo(View::class, 'forgetRequirements'); 112 113 $this->notification()->success( 114 __('inbox-files.notifications.update.success.title'), 115 __('inbox-files.notifications.update.success.message') 116 ); 117 } 118 119 public function updateValidation() 120 { 121 if (!$this->modifiesTheValidation()) { 122 return; 123 } 124 125 if ($this->validationTypeId) { 126 $validationType = ValidationType::find($this->validationTypeId); 127 $validation = ValidationService::createNewValidation($validationType, $this->dossier->id); 128 } 129 130 $this->inboxFile->validation_id = $validation->id ?? null; 131 $this->inboxFile->save(); 132 133 if ($this->inboxFile->validation) { 134 AutoRequirementService::run($this->inboxFile->validation); 135 } 136 } 137 138 public function modifiesTheValidation() 139 { 140 return $this->validationTypeId !== ($this->inboxFile->validation->validation_type_id ?? null); 141 } 142 143 public function confirmNewValidation() 144 { 145 $this->dialog()->confirm([ 146 'title' => __('inbox-files.validations.select.confirm.title'), 147 'description' => __('inbox-files.validations.select.confirm.description'), 148 'method' => 'update' 149 ]); 150 } 151 152 public function render() 153 { 154 return view('livewire.inbox-files.update'); 155 } 156 }