Ir para conteúdo
Fórum Script Brasil
  • 0

Livewire: eu posso escrever "olá mundo" em qualquer lugar?


Frank K Hosaka

Pergunta

Eu tenho um código mais ou menos assim:

blade
@foreach($pendencias as $index => $pendencia)
            @if($pendencia['div1']==1)
            	<div wire:click="mostrar({{$index}})">ola mundo</div>
            @else
        		// o resto do código
				<div class="w-[110px] text-right" 
                            wire:click="mostrar({{$index}})">
                            {{ dec($pendencia['debito']) }}
                        </div>
				// o resto do código
			@endif
@endforeach

component
    function mostrar($indicador) {
        if($this->pendencias[$indicador]['div1']==0) {
            return $this->pendencias[$indicador]['div1']=1; 
        } else {
            return $this->pendencias[$indicador]['div1']=0;
        }
    }

Esse é o clássico problema do modal. Eu tenho uma lista de pendência, onde aparece o valor da pendência e o nome de quem está me cobrando, só que eu precisava do número do lançamento contábil ou o número da nota fiscal ou qual a parcela que estou pagando, tudo isso dá para colocar num modal. Mas hoje eu pensei em colocar essa informação na mesma linha onde aparece as informações. E deu certo! Esse Livewire é fantástico!

A seguir a listagem completa:

arquivo resources > views > livewire > pagar.blade.php
<div>

    @if(auth()->user()->id==1)
        <input wire:model.live="doc1" size="5" autocomplete="off" class="border-none rounded p-2 py-0">
        <input wire:model.live="doc2" size="5" autocomplete="off" class="border-none rounded p-2 py-0">
        <input type="submit" wire:click="ocultar" value="Ocultar Pendências">
    @endif

    <div class="flex bg-gray-200 mt-2">
        <div class="w-[117px] ml-3 text-center">Vencimento</div>
        <div class="w-[50px] text-right">Docto</div>
        <div class="w-[110px] text-right">Pendência</div>
        @if(auth()->user()->id==1)
            <div class="w-[10px] text-right px-2">R</div>
        @endif
        <div class="w-[336px] px-2 border">Pessoa</div>
    </div>
    
    @if(auth()->user()->id==1)
        @foreach($pendencias as $index => $pendencia)
            @if($pendencia['div1']==1)
                <div wire:click="mostrar({{$index}})" class="bg-red-200">
                    {{"Histórico: Lçto ".$pendencia['lcto']." ".$pendencia['hist']}}
                </div>
            @else
            <div class="even:bg-gray-200">
                <div class="flex">
                    <div class="w-[117px] ml-3 text-right">
                        <input type=date  
                            wire:model.live="pendencias.{{$index}}.vcto"
                            onclick=showPicker()
                            wire:change="atualizaVcto({{$pendencia['docto']}},{{$index}})"
                            class="w-[117px] bg-transparent text-gray-500 font-semibold 
                                    rounded py-0 border-none">
                    </div>
                    <div class="w-[50px] text-right">
                        <div wire:click="selecionarDocto({{$pendencia['docto']}})" class="text-right">
                                {{ $pendencia['docto'] }}
                        </div>
                    </div>
                    @if($pendencia['debito'])
                        <div class="w-[110px] text-right" 
                            wire:click="mostrar({{$index}})">
                            {{ dec($pendencia['debito']) }}
                        </div>
                    @else
                        <div class="w-[110px] text-right text-red-500"
                            wire:click="mostrar({{$index}})">
                            {{ dec($pendencia['credito']) }}
                        </div>
                    @endif
                    <div class="w-[10px] px-2">
                        <input type=checkbox {{$pendencia['restrito']==1 ? 'checked' : ''}}
                            wire:click="restritoDefinir({{$index}})">
                    </div>
                    <div class="w-[336px] px-2 truncate">
                        <a class="text-gray-500 font-semibold hover:bg-gray-200" 
                            wire:click="selecionarPessoa({{$pendencia['docto']}})">
                            <?=$pendencia['pessoa']?>
                        </a>
                    </div>
                </div>
            </div>
            @endif
        @endforeach
    @endif

    @if(auth()->user()->id!==1)
        @foreach($pendencias as $index => $pendencia)
            @if($pendencia['restrito']==0 && $pendencia['div1']==1)
                <div wire:click="mostrar({{$index}})" class="bg-red-200">
                    {{"Histórico: Lçto ".$pendencia['lcto']." ".$pendencia['hist']}}
                </div>
            @endif
            @if($pendencia['restrito']==0 && $pendencia['div1']==0)
                <div class="even:bg-gray-200">
                    <div class="flex">
                        <div class="w-[117px] ml-3 text-right">
                            <input class="w-[117px] 
                                bg-transparent text-gray-500 font-semibold 
                                rounded py-0 border-none text-center"
                                value='{{ dbr($pendencia['vcto']) }}'>
                        </div>
                        <div class="w-[50px] text-right">
                            <div class="text-right">{{ $pendencia['docto'] }}</div>
                        </div>
                        @if($pendencia['debito'])
                            <div class="w-[110px] text-right" 
                                wire:click="mostrar({{$index}})">
                                {{ dec($pendencia['debito']) }}
                            </div>
                        @else
                            <div class="w-[110px] text-right text-red-500"
                                wire:click="mostrar({{$index}})">
                                {{ dec($pendencia['credito']) }}
                            </div>
                        @endif
                        <div class="w-[346px] px-2 truncate">
                            <div class="text-gray-500 font-semibold hover:bg-gray-200">
                                <?=$pendencia['pessoa']?>
                            </div>
                        </div>
                    </div>
                </div>
            @endif
        @endforeach
    @endif

    <div class="even:bg-gray-200">
        <div class="w-[290px] text-right text-red-500 font-semibold">{{"JK ".dec($jk)}}</div>
    </div>
</div> 

arquivo app > Livewire > Pagar.php
<?php
namespace App\Livewire;
use App\Models\tbcontacorrente;
use App\Models\tbdiario;
use App\Models\tbpessoa;
use Livewire\Attributes\Layout;
use Livewire\Component;

#[Layout('components.layouts.app',['titulo'=>'Pendências'])]
class Pagar extends Component {

    public $doc1,$doc2,$histAtual,$jk,$lctoAtual,$modal=false,$pendencias=[];

    function atualizaVcto($docto,$index) {
        $vcto=$this->pendencias[$index]['vcto'];
        tbcontacorrente::where('docto',$docto)
            ->update(['vcto'=>$vcto]);
        $this->montaPendencias();
    }

    function fecharModal() {
        $this->modal=false;
    }

    function montaPendencias() {
        if(request()->input('docto')) {
            $docto=request()->input('docto');
            $codp=session('codp');
            tbcontacorrente::where('docto',$docto)->update(['codp'=>$codp]);
        }
        $this->pendencias=[];
        $contas=tbcontacorrente::where('pgto',0)->orderBy('vcto')->get();
        foreach($contas as $conta) {
            $doc=tbdiario::where('docto',$conta->docto)->first();
            $restrito=$conta->restrito;
            $vcto=$conta->vcto;
            $docto=$conta->docto;
            $lcto=$doc->lcto;
            if($doc->contad==130 || $doc->contad==211) {
                $debito=$doc->valor;
                $credito=null;
            } else {
                $debito=null;
                $credito=$doc->valor;
            }
            $hist=dbr($doc->dia)." ".$doc->hist;
            if($conta->codp) {
                $pessoa=tbpessoa::where('codp',$conta->codp)->value('pessoa');
            } else {
                $pessoa="Selecionar";
            }
            $this->pendencias[]=['vcto'=>$vcto,'docto'=>$docto,'lcto'=>$lcto,'debito'=>$debito,
                'credito'=>$credito,'hist'=>$hist,'pessoa'=>$pessoa,'restrito'=>$restrito,'div1'=>0];
        }
        $this->jk=0;
        foreach ($this->pendencias as $item) {
            if (isset($item['restrito']) && $item['restrito'] == 0) {
                $this->jk += $item['credito'];
            }
        }
    }

    function mostrar($indicador) {
        if($this->pendencias[$indicador]['div1']==0) {
            return $this->pendencias[$indicador]['div1']=1; 
        } else {
            return $this->pendencias[$indicador]['div1']=0;
        }
    }

    function mount() {
        $pendencias=tbcontacorrente::with('diario')->where('pgto',0)->get();
        foreach($pendencias as $p) {
            $eliminar=($p->diario->contad!==130);
            $eliminar+=($p->diario->contad!==211);
            $eliminar+=($p->diario->contac!==130);
            $eliminar+=($p->diario->contac!==211);
            if($eliminar==4) {
                tbcontacorrente::where('docto',$p->docto)->delete();
            }
        }
        $pendencias=tbcontacorrente::pluck('docto');
        $doc1=tbdiario::where('dia','>','2023-12-31')->where('contad',130)->pluck('docto');
        $doc2=tbdiario::where('dia','>','2023-12-31')->where('contac',130)->pluck('docto');
        $doc3=tbdiario::where('dia','>','2023-12-31')->where('contad',211)->pluck('docto');
        $doc4=tbdiario::where('dia','>','2023-12-31')->where('contac',211)->pluck('docto');
        $documentos=$doc1->merge($doc2)->merge($doc3)->merge($doc4);
        $diferenca=$documentos->diff($pendencias);
        foreach($diferenca as $d) {
            $lcto=tbdiario::where('docto',$d)->value('lcto');
            tbcontacorrente::create(['docto'=>$d,'lcto'=>$lcto,'pgto'=>0]);
        }
        $this->montaPendencias();
    }

    function ocultar() {
        if($this->doc1 !== null) {
            tbcontacorrente::where('docto',$this->doc1)
                ->update(['pgto'=>1]);
        }
        if($this->doc2 !== null) {
            tbcontacorrente::where('docto',$this->doc2)
                ->update(['pgto'=>1]);
        }
        $this->doc1=$this->doc2=null;
        $this->montaPendencias();
    }

    function restritoDefinir($indicador) { 
        $docto=$this->pendencias[$indicador]['docto'];
        $restricao=$this->pendencias[$indicador]['restrito'];
        if($restricao==0) { $restricao=1; } else { $restricao=0; }
        tbcontacorrente::where('docto',$docto)
            ->update(['restrito'=>$restricao]);
        $this->montaPendencias();
    }

    function selecionarDocto($docto) {
        if($this->doc1==null) {
            $this->doc1 = $docto;
        } else {
            if($this->doc2==null) {
                $this->doc2 = $docto;
            }
        }
    }

    function selecionarPessoa($docto) {
        session(['end'=>"pagar?docto=$docto"]);
        redirect("pessoa");
    }
}

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,5k
    • Posts
      652,3k
×
×
  • Criar Novo...