Melhorar documentação de addItemAttachment
klzns opened this issue · 14 comments
Gostaria de saber as dificuldades enfrentadas com o uso do método de addItemAttachment para melhorar nossa documentação.
Poderiam descrever o cenário para reproduzir o problema que estão tendo? Talvez possa esclarecer as dúvidas e com isso as próximas pessoas não passem pela mesma dificuldade.
Ao usar o addItemAttachment
estou recebendo um erro 404 com a mensagem O nome do anexo é inválido. No cadastro do SKU esse anexo já esta associado, como resolver esse erro?
Eu adiciono 10 itens de um SKU no carrinho, logo abaixo desse SKU existe o campo do serviço para que eu possa digitar a informação, quando insiro o valor no campo, o carrinho duplica a linha, sendo a primeira um SKU sem nada no campo de serviço e com 9 unidades e a segunda linha o mesmo SKU, com o campo serviço preenchido e com apenas 1 unidade.
Como faço com que esse serviço seja aplicado as 10 unidades sem duplicar as linhas?
@caljp13
Quanto ao primeiro, poderia adicionar esse item ao carrinho e colocar aqui o orderForm?
Quanto ao segundo comentário, isso é hoje uma limitação da API. Coincidentemente, essas semanas estamos discutindo em mudar esse comportamento para que isso seja possível. Aviso aqui, quando decidirmos isso.
Bom dia Breno,
2 coisas que eu acho que poderiam melhorar,
- Na documentação, colocar uma descrição os códigos de retorno (erro)
- No meu caso, quando eu tenho o mesmo produto (sku) a assinatura da função addItemAttachment(itemIndex, attachmentName, content) não é clara o suficiente para que o desenvolvedor saiba para qual dos itens do carrinho o anexo está sendo inserido. Creio que teria que ter uma assinatura assim:
addItemAttachment(item, itemIndex, attachmentName, content);
@lucasdall o que seria o primeiro parametro?
Segue método que estou tentando executar no checkout:
vtexjs.checkout.addItemAttachment(0, 'Configurações', {Largura: '10'})
O SKU possui esses dois anexos:
http://www.evernote.com/l/Agq_59LAOIBC4JlC4DsKU_ZntcJ4Q6rKx98/
Conteúdo do OrderForm:
{
"orderFormId": "bcc81937fb764bc39be9f63bbea37a6d",
"salesChannel": "1",
"loggedIn": false,
"isCheckedIn": false,
"storeId": null,
"allowManualPrice": false,
"canEditData": true,
"userProfileId": null,
"userType": null,
"ignoreProfileData": false,
"value": 1600,
"messages": [],
"items": [{
"uniqueId": "12E809239EA74BA7AA4D31B9CE0B60B4",
"id": "20",
"productId": "8",
"refId": "SKU-Demo",
"name": "Cortina Demo Cadastro SKU Demo",
"skuName": "SKU Demo",
"modalType": null,
"priceValidUntil": null,
"tax": 0,
"price": 1600,
"listPrice": 1800,
"manualPrice": null,
"sellingPrice": 1600,
"rewardValue": 0,
"isGift": false,
"additionalInfo": {
"brandName": "COLUMBIA by HUNTER DOUGLAS",
"brandId": "2000003",
"offeringInfo": null,
"offeringType": null,
"offeringTypeId": null
},
"preSaleDate": null,
"productCategoryIds": "/10/",
"productCategories": {
"10": "CORTINAS JAMIL"
},
"defaultPicker": null,
"handlerSequence": 0,
"handling": false,
"quantity": 1,
"seller": "1",
"imageUrl": "http://lojavivaonline.vteximg.com.br/arquivos/ids/155398-55-55/rolo03.jpg",
"detailUrl": "/cortina-demo-cadastro/p",
"components": [],
"bundleItems": [],
"attachments": [],
"itemAttachment": {
"name": null,
"content": {}
},
"attachmentOfferings": [{
"name": "Identificação",
"required": true,
"schema": {
"Ambiente": {
"maximumNumberOfCharacters": 10,
"domain": []
},
"Descrição": {
"maximumNumberOfCharacters": 20,
"domain": []
},
"ID": {
"maximumNumberOfCharacters": 2,
"domain": []
}
}
}],
"offerings": [],
"priceTags": [],
"availability": "available",
"measurementUnit": "un",
"unitMultiplier": 1
}],
"selectableGifts": [],
"products": [],
"totalizers": [{
"id": "Items",
"name": "Total dos Itens",
"value": 1600
}],
"shippingData": {
"attachmentId": "shippingData",
"address": null,
"logisticsInfo": [{
"itemIndex": 0,
"selectedSla": null,
"slas": [],
"shipsTo": ["BRA"],
"itemId": "20"
}],
"availableAddresses": []
},
"clientProfileData": {
"attachmentId": "clientProfileData",
"email": null,
"firstName": null,
"lastName": null,
"document": null,
"documentType": "cpf",
"phone": null,
"corporateName": null,
"tradeName": null,
"corporateDocument": null,
"stateInscription": null,
"corporatePhone": null,
"isCorporate": false
},
"paymentData": {
"installmentOptions": [{
"paymentSystem": "201",
"bin": null,
"paymentName": null,
"paymentGroupName": null,
"value": 1600,
"installments": [{
"count": 1,
"hasInterestRate": false,
"interestRate": 0,
"value": 1600,
"total": 1600,
"sellerMerchantInstallments": [{
"id": "LOJAVIVAONLINE",
"count": 1,
"hasInterestRate": false,
"interestRate": 0,
"value": 1600,
"total": 1600
}]
}]
}],
"paymentSystems": [{
"id": 201,
"name": "Promissória Exemplo",
"groupName": "custom201PaymentGroupPaymentGroup",
"validator": {
"regex": null,
"mask": null,
"cardCodeRegex": null,
"cardCodeMask": null,
"weights": null,
"useCvv": false,
"useExpirationDate": false,
"useCardHolderName": false,
"useBillingAddress": false
},
"stringId": "201",
"template": "custom201PaymentGroupPaymentGroup-template",
"requiresDocument": false,
"isCustom": true,
"description": "Exemplo de meio de pagamento customizado, para finalização de compra e aceite de pedido na VTEX",
"requiresAuthentication": true,
"dueDate": "2016-08-03T13:32:04.9603873Z"
}],
"payments": [],
"giftCards": [],
"giftCardMessages": [],
"availableAccounts": []
},
"marketingData": null,
"sellers": [{
"id": "1",
"name": "lojavivaonline",
"logo": ""
}],
"clientPreferencesData": {
"attachmentId": "clientPreferencesData",
"locale": "pt-BR",
"optinNewsLetter": false
},
"storePreferencesData": {
"countryCode": "BRA",
"checkToSavePersonDataByDefault": true,
"templateOptions": {
"toggleCorporate": false
},
"timeZone": "E. South America Standard Time",
"currencyCode": "BRL",
"currencyLocale": 1046,
"currencySymbol": "R$",
"currencyFormatInfo": {
"currencyDecimalDigits": 2,
"currencyDecimalSeparator": ",",
"currencyGroupSeparator": ".",
"currencyGroupSize": 3,
"startsWithCurrencySymbol": true
}
},
"giftRegistryData": null,
"openTextField": null,
"ratesAndBenefitsData": {
"attachmentId": "ratesAndBenefitsData",
"rateAndBenefitsIdentifiers": [],
"teaser": []
}
}
@BrenoC, o primeiro parametro seria o objeto item do orderForm.
Por exemplo, supondo que eu tenha 3 skus no carrinho. O primeiro sku tem quantidade 3, o segundo quantidade 2 e o terceiro quantidade 1.
Teríamos o item assim:
- orderForm.items[0] e itemIndex = 0 (primeiro sku, posição 1)
- orderForm.items[0] e itemIndex = 1 (primeiro sku, posição 2)
- orderForm.items[0] e itemIndex = 2 (primeiro sku, posição 3)
- orderForm.items[1] e itemIndex = 0 (segundo sku, posição 1)
- orderForm.items[1] e itemIndex = 1 (segundo sku, posição 2)
- orderForm.items[2] e itemIndex = 0 (segundo sku, posição 1)
@lucasdall @caljp13 Poderiam ver o #18 e comentarem o que acham?
@lucasdall o itemIndex tem seu indice com base em todo o carrinho e não com base nos skus, por isso que só utilizamos ele nos parâmetros. O vtexjs é só uma camada mais amigável para a API do Checkout. O que você sugere teria que mudar a API do Checkout e, hoje, não é isso que estamos buscando.
Boa tarde, @BrenoC e @lucasdall ! Na verdade, mundo ideal seria adicionar o item ao carrinho com um parâmetro opcional de enviar o anexo junto. Isso melhoraria demais nossas vidas.
@alexandreTrino você fala pela URL de adicionar ao carrinho?
@BrenoC se eu não entendi errado o que falou o @alexandreTrino, seria a possibilidade de adicionar itens ao carrinho enviando um JSON e não chamando a URL /checkout/cart/add
, assim nesse JSON já seria possível adicionar um SKU junto com os dados de serviço
Exatamente, @caljp13! Nós escreveríamos, por exemplo @BrenoC :
item = { id: 11221, quantity: 2, seller: 1, attachments: [ { index:0, attachmentName: "nome-1" content: "content-1" }, { index:1, attachmentName: "nome-1" content: "content-1" } ] }; myItems.push(item); vtexjs.checkout.getOrderForm().done(function(order){ return vtexjs.checkout.addToCart(myItems).done(function(){ console.log("adicionou ao carrinho!"); });
O que acham? resumiria mais o código e evitaria alguns bugs por aí, talvez.
@caljp13 @alexandreTrino
Vi que o método addToCart não retorna informações necessárias para poder fazer algo como:
var item = {
id: 26,
quantity: 1,
seller: 1
};
vtexjs.checkout.addToCart([item], null, 1)
.then(function(orderForm) {
var itemIndex = 0; // Não temos certeza do index do item que acabamos de adicionar
var attachmentName = 'Customizacao';
var attachment = { Nome: 'Teste' };
return vtexjs.checkout.addItemAttachment(itemIndex, attachmentName, attachment);
})
.then(function(orderForm) {
console.log(orderForm);
});
Estou conversando com o time da API para retornar algo que torne isso possível. Algo como:
var item = {
id: 26,
quantity: 1,
seller: 1
};
vtexjs.checkout.addToCart([item], null, 1)
.then(function(orderForm) {
var addedItemsIndex = orderForm.addedItemsIndex; // Propriedade que teria um array com indices dos items adicionados no carrinho
var itemIndex = addedItemsIndex[0];
var attachmentName = 'Customizacao';
var attachment = { Nome: 'Teste' };
return vtexjs.checkout.addItemAttachment(itemIndex, attachmentName, attachment);
})
.then(function(orderForm) {
console.log(orderForm);
});