File: /var/www/html/xfacil.desafio.com.py/app/Http/Livewire/Infos.php
<?php
namespace App\Http\Livewire;
use Livewire\Component;
use Livewire\WithPagination;
use App\Models\Info;
use App\Models\Categoriainfo;
class Infos extends Component{
use WithPagination;
protected $paginationTheme = 'bootstrap';
protected $queryString = ['search' => ['except' => '']];
public $search='';
public $info_id,$titulo,$post,$categoria_id;
public $updateMode = 0;
public function render(){
$categoria=Categoriainfo::find($this->categoria_id);
$infos = Info::where('titulo','LIKE','%'.$this->search.'%')
->where('categoria_id',$this->categoria_id)->orderBy('orden','asc')->paginate(20);
return view('livewire.infos.index',["categoria"=>$categoria,"infos"=>$infos]);
}
private function resetInputFields(){
$this->info_id = '';
$this->titulo = '';
$this->emit('post', '');
}
public function store(){
$validatedDate = $this->validate([
'titulo' => 'required',
'post' => 'required'
],
[
'titulo.required' => 'El campo Titulo es requerido',
'post.required' => 'El campo post es requerido',
]);
if($ultimoorden=Info::where('estado',1)->where('categoria_id',$this->categoria_id)->orderBy('orden','desc')->first()){
$orden=$ultimoorden->orden+1;
}else{
$orden=1;
}
$post = Info::create([
'titulo' => $this->titulo,
'post' => $this->post,
'categoria_id' => $this->categoria_id,
'orden' => $orden
]);
$this->emit('alert', ['type' => 'success', 'message' => 'Información agregada correctamente!']);
$this->resetInputFields();
}
public function edit($id){
$this->updateMode = 2;
$info = Info::find($id);
$this->info_id = $id;
$this->titulo = $info->titulo;
$this->emit('post', $info->post);
}
public function crear(){
$this->updateMode = 1;
$this->resetInputFields();
}
public function cancel(){
$this->updateMode = 0;
$this->resetInputFields();
}
public function update(){
$validatedDate = $this->validate([
'titulo' => 'required',
'post' => 'required'
],
[
'titulo.required' => 'El campo Titulo es requerido',
'post.required' => 'El campo post es requerido',
]);
if ($this->info_id) {
$info = Info::find($this->info_id);
$info->update([
'titulo' => $this->titulo,
'post' => $this->post,
]);
$this->updateMode = 0;
$this->emit('alert', ['type' => 'info', 'message' => 'Info actualizado correctamente!']);
$this->resetInputFields();
}
}
public function delete($id){
if($id){
$info = Info::find($id);
$info->delete();
$this->emit('alert', ['type' => 'error', 'message' => 'Info eliminada correctamente!']);
}
}
public function reordenar($estado,$orden){
$categoriaactual=Info::where('orden',$orden)->where('categoria_id',$this->categoria_id)->first();
if($estado=='aumentar'){
$numeracionacambiar=$categoriaactual->orden+1;
$categoriacambiar=Info::where('orden',$numeracionacambiar)->where('categoria_id',$this->categoria_id)->first();
//aumentar orden categoria actual
$categoriaactual->orden+=1;
$categoriaactual->update();
//disminuir categoria afectada
$categoriacambiar->orden-=1;
$categoriacambiar->update();
}else{
$numeracionacambiar=$categoriaactual->orden-1;
$categoriacambiar=Info::where('orden',$numeracionacambiar)->where('categoria_id',$this->categoria_id)->first();
//disminuar orden categoria actual
$categoriaactual->orden-=1;
$categoriaactual->update();
//aumentar categoria afectada
$categoriacambiar->orden+=1;
$categoriacambiar->update();
}
}
}