Função simulateShipping vtexjs

Alguém sabe me dizer qual é a variável do orderForm que é esperado na função simulateShipping?

vtexjs.checkout.getOrderForm().then(function (data) {

         let orderform = data

         let shippingsDatasLogistcsVtex = orderform.shippingData.logisticsInfo

         let shippingsDataVtex = []

         shippingsDatasLogistcsVtex.forEach(shippingItemVtex => {

          let shippingData = 

            {

              logisticsInfo:  >>>>>>{{????????}}<<<<<<<

              selectedAddresses:  >>>>>>{{????????}}<<<<<<<

            }

          

          return shippingsDataVtex.push(shippingData)

         })

        let orderFormIdVtex = orderform.orderFormId;

        var country = "BRA";

        vtexjs.checkout.simulateShipping(shippingsDataVtex, orderFormIdVtex, country)

          

       }).done(function (result) {

        console.log(result);

      });

Boa tarde!
acho que essa função foi descontinuada, simulateShipping descontinuado · Issue #51 · vtex/vtex.js (github.com) nesse caso é melhor usar a api diretamente

1 Like

Olá!

Então, está dizendo que simulateShipping passando itens como um array que está descontinuada, será que essa també está?

Oi Gui (@marketing33), beleza?

Código abaixo ainda funciona, mas nem sabia dessa nota mencionada pelo @huandersonmachado não:

// conjunto necessário para simulacao do frete
var items = [{ 
	id: skuid,  // sku do item
	quantity: $.urlParam('qty'),
	seller: $.urlParam('seller')
}];

// O `country` deve ser a sigla de 3 letras do país
var country = localeInfo.CountryCode;

var simulate = vtexjs.checkout.simulateShipping(items, cep, country);
1 Like

Fala Andre, tudo bem? @andremiani

Obrigado mais uma vez por me ajudar… mas esse código já tentei também e não deu certo, segue abaixo meu código e a mensagem que aparece no console.

`
vtexjs.checkout

        .getOrderForm()

        .then(function (data) {

          console.log(data)

          let orderform = data

          var itemsVtex = orderform.items

          var items = []

          itemsVtex.forEach(itemvtex => {

            var item = {

              id: itemvtex.id,

              quantity: itemvtex.quantity,

              seller: "1"

            }

            return items.push(item) 

          })

          

          var postalCodeInput = $("#miniCart-V2-Spping").val();

          console.log(items)

          var postalCode = postalCodeInput;

          console.log(postalCode)

  

          var country = "BRA";



          vtexjs.checkout.simulateShipping(items, postalCode, country);

        })

        .done(function (result) {

          console.log(result);

       });

`
Mensagem no console:
vtex.js:697 Calling simulateShipping with a list of items and postal code is deprecated.
Call it with shippingData and orderFormId instead.

@marketing33 esse aqui funfou!

var DataToSend = {
'items': [{
'id': {{SkuId}},
'quantity': 1,
'seller': '1'
}],
'postalCode': {{cep}},
'country': 'BRA',
};

$.ajax({
    'type': 'POST',
    'dataType': 'json',
    'contentType': 'application/json',
    'url': '/api/checkout/pub/orderForms/simulation/?sc=1',
    'data': JSON.stringify(DataToSend),
    'success': function(ResponseData) {
       `//CUSTOM` 
        console.log(ResponseData);
    },
    'error': function(AjaxError) {
        console.log('Error')
    }
});

veja ai :wink:

1 Like

Bom dia André!

Cara funcionou, mas o objeto não retorna um valor que esteja batendo com a simulação da vtex e que aparece quando vai fazer o pagamento. Não sei se é o valor sem a cubagem, o fato é que no objeto o valor está um exemplo R$ 2,71 e no carrinho final e simulando dentro da área de administrador sai por R$ 10,26.

Como faço para pegar esse valor?
E dai teria que percorrer todos os valores e depois somar para saber o total? Não tem nenhuma propriedade que já tenha essa informação?

Bom dia, dá uma conferida se está passando o id do sku correto e a quantidade, aqui funciona perfeitamente…

Fala mister, fiz o teste aqui e pra mim bate os dois cenários:

Pelo simulador

E também consultando pela API

Captura de Tela 2021-07-16 às 11.59.44

Por qual nó que você está consultando e está vindo esses 2,71?

Boa tarde @andremiani e @huandersonmachado!

Esse é o valor de apenas um item não é? E o valor total do frete dos itens?

@marketing33 Conseguiu resolver?
Caso não, por acaso a diferença entre o admin (10,26) e a API (2,71), não seria alguma promoção? Pergunto isso, porque o simulador do admin não considera as promoções e a leitura da API considera.
Em relação ao valor total do frete no orderForm, utilize:

orderForm.totalizers.find(x=> x.id == "Shipping")
1 Like

Bom dia Galera!

Consegui resolver mas tive que somar o valor do frete de cada sku e além disso mudar o postalcode com a funçao

vtexjs.checkout.getAddressInformation(address)
.done(function(result) {
console.log(result);
});

Sendo que como uso o objeto da api para calcular o frete, ele não estava atualizando o postalcode e ai quando alterava a quantidade ou fazia qualquer alteração ele voltava a pegar o postalcode antigo.
Até o momento não encontrei erros, qualquer coisa retorno, e muito obrigado galera! @andremiani @huandersonmachado @fabio.santos

2 Likes