'loadWarehouse', 'confirmDeleteWarehouse' => 'loadWarehouseForDeletion', ]; public function mount() { $this->loadOptions(); $this->resetForm(); } private function loadOptions() { $this->store_options = DB::table('stores') ->select('id', 'name') ->orderBy('name') ->pluck('name', 'id'); $this->workcenter_options = DB::table('store_work_centers') ->select('id', 'name') ->orderBy('name') ->pluck('name', 'id'); } public function loadWarehouse($id) { $warehouse = Warehouse::find($id); if ($warehouse) { $this->fill($warehouse->only(['id', 'store_id', 'workcenter_id', 'code', 'name', 'description', 'is_active', 'is_default'])); $this->form_title = "Editar: $warehouse->name"; $this->mode = 'edit'; $this->dispatch('on-edit-warehouse-modal'); } } public function loadWarehouseForDeletion($id) { $warehouse = Warehouse::find($id); if ($warehouse) { $this->fill($warehouse->only(['id', 'store_id', 'workcenter_id', 'code', 'name', 'description', 'is_active', 'is_default'])); $this->form_title = "Eliminar: $warehouse->name"; $this->mode = 'delete'; $this->dispatch('on-delete-warehouse-modal'); } } public function editWarehouse($id) { $warehouse = Warehouse::find($id); if ($warehouse) { $this->form_title = 'Editar: ' . $warehouse->name; $this->mode = 'edit'; $this->warehouseId = $warehouse->id; $this->store_id = $warehouse->store_id; $this->workcenter_id = $warehouse->workcenter_id; $this->code = $warehouse->code; $this->name = $warehouse->name; $this->description = $warehouse->description; $this->is_active = $warehouse->is_active; $this->is_default = $warehouse->is_default; $this->dispatch('on-edit-warehouse-modal'); } } public function confirmDeleteWarehouse($id) { $warehouse = Warehouse::find($id); if ($warehouse) { $this->form_title = 'Eliminar: ' . $warehouse->name; $this->mode = 'delete'; $this->warehouseId = $warehouse->id; $this->store_id = $warehouse->store_id; $this->workcenter_id = $warehouse->workcenter_id; $this->code = $warehouse->code; $this->name = $warehouse->name; $this->description = $warehouse->description; $this->is_active = $warehouse->is_active; $this->is_default = $warehouse->is_default; $this->dispatch('on-delete-warehouse-modal'); } } public function onSubmit() { if ($this->mode === 'delete') { return $this->delete(); } return $this->save(); } private function save() { try { $validatedData = $this->validate([ 'store_id' => 'required', 'code' => 'required|string|max:16', 'name' => 'required|string|max:96', 'description' => 'nullable|string|max:1024', ]); } catch (\Illuminate\Validation\ValidationException $e) { $this->dispatch('on-failed-validation-warehouse-modal'); $this->dispatch('warehouse-message', ['type' => 'danger', 'message' => 'Error en la validación']); throw $e; } Warehouse::updateOrCreate( ['id' => $this->warehouseId], [ 'store_id' => $validatedData['store_id'], 'workcenter_id' => $this->workcenter_id, 'code' => $validatedData['code'], 'name' => $validatedData['name'], 'description' => $validatedData['description'] ?? null, 'is_active' => (bool) $this->is_active, 'is_default' => (bool) $this->is_default, ] ); $this->dispatch('warehouse-message', ['type' => 'success', 'message' => 'Almacén guardado correctamente']); $this->dispatch('reload-warehouse-table'); $this->dispatch('close-warehouse-modal'); $this->resetForm(); } public function delete() { if ($this->warehouseId) { Warehouse::find($this->warehouseId)->delete(); $this->dispatch('warehouse-message', ['type' => 'warning', 'message' => 'Almacén eliminado']); $this->dispatch('reload-warehouse-table'); $this->dispatch('close-warehouse-modal'); $this->resetForm(); } } public function resetForm() { $this->reset(['warehouseId', 'store_id', 'workcenter_id', 'code', 'name', 'description', 'is_default', 'confirm_delete']); $this->form_title = 'Agregar almacén'; $this->mode = 'create'; $this->is_active = true; } public function render() { return view('vuexy-warehouse::livewire.stores.form'); } }