package forms.cartForm;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import io.sphere.client.model.Money;
import io.sphere.client.shop.model.*;
import play.libs.Json;
import java.math.BigDecimal;
import static utils.ViewHelper.*;
public class ListCart {
public ListCart() {
}
public static ObjectNode getJson(String snapshot) {
ObjectNode json = Json.newObject();
json.put("snapshot", snapshot);
return json;
}
public static ObjectNode getJson(Cart cart) {
ObjectNode json = Json.newObject();
if (cart.getTotalQuantity() < 1) return json;
// Total price
json.put("totalPrice", printPriceAmount(getPrice(cart)));
json.put("currency", printPriceCurrency(cart.getCurrency().getCurrencyCode()));
json.put("currencyCode", cart.getCurrency().getCurrencyCode());
if (cart.getShippingAddress() != null) {
// Shipping price
if (cart.getShippingInfo() != null) {
ShippingInfo shipping = cart.getShippingInfo();
json.put("shippingPrice", printPriceAmount(getPrice(shipping)));
}
// Tax portions
ArrayNode taxPortions = json.putArray("taxPortion");
for (TaxPortion tax: cart.getTaxedPrice().getTaxPortions()) {
ObjectNode taxPortion = Json.newObject();
taxPortion.put("included", true);
taxPortion.put("rate", String.valueOf(getPercentage(tax.getRate())));
taxPortion.put("amount", printPriceAmount(tax.getAmount()));
taxPortion.put("currency", printPriceCurrency(tax.getAmount().getCurrencyCode()));
taxPortions.add(taxPortion);
}
}
// Total items price
ArrayNode list = json.putArray("item");
Money totalItemPrice = new Money(BigDecimal.ZERO, cart.getCurrency().getCurrencyCode());
for (LineItem item : cart.getLineItems()) {
list.add(getJson(item));
totalItemPrice = totalItemPrice.plus(getPrice(item));
}
// Total
json.put("totalItemPrice", printPriceAmount(totalItemPrice));
// Custom line items
if(cart.getCustomLineItems().size() > 0) {
ArrayNode customLineItemList = json.putArray("customLineItems");
for (CustomLineItem item : cart.getCustomLineItems()) {
customLineItemList.add(getJson(item));
}
}
return json;
}
public static ObjectNode getJson(LineItem item) {
ObjectNode json = Json.newObject();
json.put("itemId", item.getId());
json.put("productId", item.getProductId());
json.put("productName", item.getProductName());
json.put("variantId", item.getVariant().getId());
json.put("quantity", item.getQuantity());
json.put("currency", printPriceCurrency(item.getTotalPrice().getCurrencyCode()));
json.put("price", printPriceAmount(getPrice(item.getPrice().getValue(), item.getTaxRate())));
json.put("totalPrice", printPriceAmount(getPrice(item)));
// Attributes
ArrayNode attributes = json.putArray("attribute");
for (Attribute attr : item.getVariant().getAttributes()) {
ObjectNode attribute = Json.newObject();
attribute.put("name", attr.getName());
attribute.put("value", attr.getValue().toString());
attributes.add(attribute);
}
// Images
ObjectNode images = Json.newObject();
images.put("thumbnail", item.getVariant().getFeaturedImage().getSize(ImageSize.THUMBNAIL).getUrl());
images.put("small", item.getVariant().getFeaturedImage().getSize(ImageSize.SMALL).getUrl());
images.put("medium", item.getVariant().getFeaturedImage().getSize(ImageSize.MEDIUM).getUrl());
images.put("large", item.getVariant().getFeaturedImage().getSize(ImageSize.LARGE).getUrl());
images.put("original", item.getVariant().getFeaturedImage().getSize(ImageSize.ORIGINAL).getUrl());
json.put("image", images);
return json;
}
public static ObjectNode getJson(CustomLineItem item) {
ObjectNode json = Json.newObject();
json.put("itemId", item.getId());
json.put("name", item.getName().get());
json.put("money", printPriceAmount(getPrice(item)));
json.put("currency", printPriceCurrency(item.getMoney().getCurrencyCode()));
json.put("slug", item.getSlug());
json.put("quantity", item.getQuantity());
json.put("taxCategory", item.getTaxCategory().getTypeId());
return json;
}
}