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

A lei do menor esforço [Resolvido]


Frank K Hosaka

Pergunta

Apesar do Livewire ser uma extensão do Laravel, aqui eu já considero como um novo recurso do PHP, principalmente para um programador eventual como eu que não conseguiu dominar o JavaScript e principalmente o Ajax.

Eu tenho uma rotina que dá entrada no estoque, usando o serviço da digitação. Acredito que a grande maioria dos programadores utiliza o serviço de importação do xml para dar entrada no estoque, mas eu não tenho paciência de esperar e assim eu uso uma cópia da confirmação do pedido do fornecedor.

No view, eu tenho três entradas: <input wire:model="codfornec">, <input wire:model="qt"> e <input wire:model="total">. Depois que o usuário fornece os dados, o componente procura na tabela de produtos o registro que contém o codfornec que foi digitado, e se encontrar, ele dá a entrada na tabela histórico do produto.

O problema é se o componente não conseguir encontrar, aí o componente solta a mensagem "eu não achei" e fica por isso mesmo. O usuário pode abrir uma nova guia e acertar a tabela de produtos, atualizando ou criando um novo registro. Depois ele volta na guia da entrada de produto, e digita tudo de novo.

A lei do menor esforço obriga o usuário a reclamar com o programador que não faz sentido digitar tudo de novo, coisa que já foi digitado antes. E ele tem razão. Eu não sei como resolver isso de maneira lógica, mas improvisei essa gambiarra:

Eu criei três variáveis públicas: public $codfornec2, $qt2, $total2, e eles foram definidos quando o componente não encontrar o produto, assim:

 

<?php
  // ...
  function item() {
        // ...
        $aux=tbprod::where('codforn','like',"%$codforn%")->get();
        if (count($aux) == 0) {
            $this->codforn2=$codforn;
            $this->qt2=$qt;
            $this->total2=$total;
            $this->mensagem="Não existe produto com codforn $codforn";
            $this->modal=true;
            return;
        }
  

A rotina que fecha o modal anula o conteúdo de $codforn, $qt e $total, e assim o usuário vai ver três caixas vazias que ele não quer digitar.

Eu mudei a primeira caixa de entrada: <input wire:model="codforn" wire:click="item">, e o método item no componente ficou assim:

 

<?php
// ...
    function item() {
        if($this->codforn2) {
            $codforn=$this->codforn2;
            $qt=$this->qt2;
            $total=$this->total2;
            $this->codforn2=$this->qt2=$this->total2=null;
        } else {
            if(is_null($this->codforn)) { return; }
            $codforn = $this->codforn;
            $qt = $this->qt;
            $total = deca($this->total);
        }

Essa gambiarra funciona, o problema é como lembrar o usuário de que é possível recuperar a última digitação só com um clique na primeira caixa.

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

1 resposta a esta questão

Posts Recomendados

  • 0

================= // =================

Finalmente eu achei o portal do heroicons.com, e lá achei o ícone da verificação ("check"), e coloquei no Blade assim:
 

    <div class="flex mt-2">
        <div class=w-[310px]>
            <input id="codforn" wire:model="codforn" size="3" autofocus placeholder="codforn" 
                onchange="qt.focus()" class="px-2 border-2 rounded py-0" autocomplete="off">
        </div>
        <div class="w-[210px]">
            <input id="qt" wire:model="qt" size="2"  placeholder="qt" 
            onchange="total.focus()" class="border-2 rounded py-0 text-center" autocomplete="off">
        </div>
        <div class="text-right">
            <input id="total" wire:model="total" size="2" placeholder="total"  
            class="border-2 rounded py-0 text-center" autocomplete="off"
            wire:change="item"
            onchange="codforn.focus()">
        </div>
        <flux:icon.check wire:click="item" class="ml-4" />
    </div>

O meu grande problema é que eu não encontrava espaço suficiente para colocar um botão, tentando simular um <button type=submit>, mas tem espaço para colocar um ícone.

Graças ao ícone, eu não preciso mais das variáveis $codforn2, $qt2 e $total2, eu simplesmente só vou esvaziar as variáveis $codforn, $qt e $total só depois que elas forem usadas no cadastro do histórico do produto, ou seja, se o usuário ver a mensagem de que o produto não existe, tudo o que ele digitou vai permanecer no painel de entrada de produtos, e depois dele acertar o cadastro de produto, ele só vai ter que apertar o ícone da confirmação mais uma vez.

Captura de tela 2025-05-22 112327.png

Link para o comentário
Compartilhar em outros sites

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,4k
    • Posts
      652,3k
×
×
  • Criar Novo...