How to save the data by removing the characters from Mask using Laravel 5.6?

Asked

Viewed 137 times

-1

Hi, I’m using Laravel, and I want to save the data after done a calculation. I am using the Jquery Mask plugin to facilitate user understanding. However, I have no idea how to filter Mask data to save the information. I even have a javascript function to take the data from Mask, to make a calculation. Can you get the javascript data directly from the Laravel controller? Please help me :)

The error (because it is taking the data from Mask (R$, %):

erro

Some codes:

View:

<form action="/produtos" method="POST">
                    @csrf           
                    <div class="row">
                        <div class="col-4">
                            <label>Custo 1:</label>
                            <input type="text" class="form-group" id="custo1" name="custo1" onkeyup="calcular();">
                        </div>
                        <div class="col-4">
                            <label>IPI:</label>
                            <input type="text" class="form-group" id="perc_ipi" name="perc_ipi" onkeyup="calcular();"><br><br>
                        </div>
                        <div class="col-4">
                            <label>ST:</label>
                            <input type="text" class="form-group" id="perc_st" name="perc_st" onkeyup="calcular();">
                        </div>
                        <div class="col-4">
                            <label>Outros:</label>
                            <input type="text" class="form-group" id="perc_outros" name="perc_outros" onkeyup="calcular();"><br><br>
                        </div>
                        <div class="col-4">
                            <label>Frete:</label>
                            <input type="text" class="form-group" id="perc_frete" name="perc_frete" onkeyup="calcular();">
                        </div>
                        <div class="col-4">
                            <label>FCPST:</label>
                            <input type="text" class="form-group" id="perc_fcpst" name="perc_fcpst" onkeyup="calcular();"><br><br>
                        </div>
                        <div class="col-4">
                            <label>STUF:</label>
                            <input type="text" class="form-group" id="perc_stuf" name="perc_stuf" onkeyup="calcular();">
                        </div>
                        <div class="col-4">
                            <label>Desconto:</label>
                            <input type="text" class="form-group" id="perc_desc" name="perc_desc" onkeyup="calcular();"><br><br>
                        </div>
                        <div class="col-4">
                            <label>Custo 2:</label>
                            <span type="text" class="form-group" id="custo2" name="custo2"></span><br>
                        </div>
                    </div>
                    <button class="btn btn-primary btn-block col-4" type="submit">Salvar</button>
                </form> 

JS:

//Função para retornar apenas os números
    function somenteNumero(n){
       n = n.replace(/[^\d,]/g,'')
       .replace(",", '.');
       return +n; 
    }

        //Função para calcular custo2
    function calcular() {           
        var custo1 = somenteNumero(document.getElementById('custo1').value);
        var calcIPI1 = somenteNumero(document.getElementById('perc_ipi').value);
        var calcST1 = somenteNumero(document.getElementById('perc_st').value);
        var calcOutros1 = somenteNumero(document.getElementById('perc_outros').value);
        var calcFrete1 = somenteNumero(document.getElementById('perc_frete').value);
        var calcFCPST1 = somenteNumero(document.getElementById('perc_fcpst').value);
        var calcSTUF1 = somenteNumero(document.getElementById('perc_stuf').value);
        var calcDesconto1 = somenteNumero(document.getElementById('perc_desc').value);
        var elemResult = document.getElementById("custo2");


        //Fórmulas das percentagens
        calcIPI2 = custo1 * calcIPI1 / 100 + custo1;
        calcST2 = custo1 * calcST1 / 100;
        calcOutros2 = custo1 * calcOutros1 / 100;
        calcFrete2 = custo1 * calcFrete1 / 100;
        calcFCPST2 = custo1 * calcFCPST1 / 100;
        calcSTUF2 = custo1 * calcSTUF1 / 100;

        //Gerando o custo 2.
        custo2 = calcIPI2 + calcST2 + calcOutros2 + calcFrete2 + calcFCPST2 + calcSTUF2;

        custo2 = custo2 - custo1 * calcDesconto1 / 100;

        elemResult.innerText = custo2.toLocaleString("pt-BR", { style: "currency" , currency:"BRL"});

        }

        //JQuery Maskmoney
        $(function() {
          $('#custo1').maskMoney({ prefix: 'R$  ', reverse: 'false', decimal: ',', thousands: '.', precision: 2 });
        })

        $(function() {
          $('#venda').maskMoney({ prefix: 'R$  ', reverse: 'false', decimal: ',', thousands: '.', precision: 2 });
        })

        //JQuery Mask

        $('#perc_ipi').mask('##0,00%', {reverse: true});

        $("#perc_frete").mask('##0,00%', {reverse: true});

        $("#perc_outros").mask('##0,00%', {reverse: true});

        $("#perc_st").mask('##0,00%', {reverse: true});

        $("#perc_fcpst").mask('##0,00%', {reverse: true});

        $("#perc_stuf").mask('##0,00%', {reverse: true});

        $("#perc_desc").mask('##0,00%', {reverse: true});

        $("#custo2").mask("999.999.990,00", {reverse: true});

        $("#venda").mask("999.999.990,00", {reverse: true}); 

Controller:

public function store(Request $request)
{
    $produto = new Produto();
    $produto->custo1 = $request->input('custo1');
    $produto->perc_ipi = $request->input('perc_ipi');
    $produto->perc_frete = $request->input('perc_frete');
    $produto->perc_outros = $request->input('perc_outros');
    $produto->perc_st = $request->input('perc_st');
    $produto->perc_fcpst = $request->input('perc_fcpst');
    $produto->perc_stuf = $request->input('perc_stuf');
    $produto->perc_desc = $request->input('perc_desc');
    $produto->custo2 = $request->input('custo2');

    $produto->save();
    return redirect('/produtos');
}
  • Send by ajax jquery Mask has a function that takes out Mask looks doc from it

1 answer

0

Only convert number before saving to database with function: NumberFormatter::parseCurrency()

$formatter = numfmt_create('pt_BR', NumberFormatter::CURRENCY);
 $produto->custo1 = numfmt_parse_currency($formatter, $request->input('custo1'), "BRL");

Browser other questions tagged

You are not signed in. Login or sign up in order to post.