Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Melhorar documentação de addItemAttachment #16

Closed
klzns opened this issue Jul 26, 2016 · 14 comments
Closed

Melhorar documentação de addItemAttachment #16

klzns opened this issue Jul 26, 2016 · 14 comments

Comments

@klzns
Copy link
Contributor

klzns commented Jul 26, 2016

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.

@cvscarlos
Copy link

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?

@cvscarlos
Copy link

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?

@klzns
Copy link
Contributor Author

klzns commented Jul 27, 2016

@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.

@klzns
Copy link
Contributor Author

klzns commented Jul 27, 2016

Criei uma issue para o segundo item: #17

@lucasdall
Copy link

Bom dia Breno,

2 coisas que eu acho que poderiam melhorar,

  1. Na documentação, colocar uma descrição os códigos de retorno (erro)
  2. 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);

@klzns
Copy link
Contributor Author

klzns commented Jul 27, 2016

@lucasdall o que seria o primeiro parametro?

@cvscarlos
Copy link

@BrenoC

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": []
    }
}

@lucasdall
Copy link

@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)

klzns added a commit that referenced this issue Jul 27, 2016
@klzns
Copy link
Contributor Author

klzns commented Jul 27, 2016

@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.

@alexandreTrino
Copy link

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.

@klzns
Copy link
Contributor Author

klzns commented Jul 27, 2016

@alexandreTrino você fala pela URL de adicionar ao carrinho?

@cvscarlos
Copy link

cvscarlos commented Jul 27, 2016

@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

@alexandreTrino
Copy link

alexandreTrino commented Jul 27, 2016

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.

@klzns
Copy link
Contributor Author

klzns commented Jul 27, 2016

@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);
  });

@klzns klzns closed this as completed in #18 Sep 1, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants