package org.multibit.mbm.api.response.hal.purchaseorder; import com.google.common.base.Optional; import com.theoryinpractise.halbuilder.spi.Resource; import com.xeiam.xchange.currency.MoneyUtils; import org.joda.money.BigMoney; import org.multibit.mbm.api.response.hal.BaseBridge; import org.multibit.mbm.api.response.hal.item.SupplierPurchaseOrderItemBridge; import org.multibit.mbm.core.model.PurchaseOrder; import org.multibit.mbm.core.model.PurchaseOrderItem; import org.multibit.mbm.core.model.User; import org.multibit.mbm.resources.ResourceAsserts; import javax.ws.rs.core.UriInfo; /** * <p>Bridge to provide the following to Suppliers:</p> * <ul> * <li>Creates {@link com.theoryinpractise.halbuilder.spi.Resource} representations of a PurchaseOrder</li> * </ul> * * @since 0.0.1 */ public class SupplierPurchaseOrderBridge extends BaseBridge<PurchaseOrder> { private final SupplierPurchaseOrderItemBridge supplierPurchaseOrderItemBridge; /** * @param uriInfo The {@link javax.ws.rs.core.UriInfo} containing the originating request information * @param principal An optional {@link org.multibit.mbm.core.model.User} to provide a security principal */ public SupplierPurchaseOrderBridge(UriInfo uriInfo, Optional<User> principal) { super(uriInfo, principal); supplierPurchaseOrderItemBridge = new SupplierPurchaseOrderItemBridge(uriInfo, principal); } public Resource toResource(PurchaseOrder purchaseOrder) { ResourceAsserts.assertNotNull(purchaseOrder, "purchaseOrder"); ResourceAsserts.assertNotNull(purchaseOrder.getId(),"id"); // Do not reveal the ID to non-admins String basePath = "/purchaseOrder"; // TODO Integrate with Presets and PurchaseOrderItem String currencySymbol = "Ƀ"; // or £ or € String currencyCode = "BTC"; // Calculate the value of the purchaseOrder items // TODO Allow for currency conversion BigMoney purchaseOrderTotal = MoneyUtils.parseBitcoin("BTC 0.0000"); BigMoney taxTotal = MoneyUtils.parseBitcoin("BTC 0.0000"); for (PurchaseOrderItem purchaseOrderItem: purchaseOrder.getPurchaseOrderItems()) { purchaseOrderTotal = purchaseOrderTotal.plus(purchaseOrderItem.getPriceSubtotal()); taxTotal = taxTotal.plus(purchaseOrderItem.getTaxSubtotal()); } // Create top-level resource Resource purchaseOrderResource = getResourceFactory() .newResource(basePath) // Do not reveal the supplier to non-admins .withLink("/supplier", "supplier") .withProperty("currency_symbol", currencySymbol) .withProperty("currency_code", currencyCode) .withProperty("price_total", purchaseOrderTotal.getAmount().toPlainString()) .withProperty("tax_total", taxTotal.getAmount().toPlainString()) .withProperty("item_total", purchaseOrder.getItemTotal()) .withProperty("quantity_total", purchaseOrder.getQuantityTotal()) // End of build ; // Create sub-resources based on items for (PurchaseOrderItem purchaseOrderItem : purchaseOrder.getPurchaseOrderItems()) { Resource publicPurchaseOrderItemResource = supplierPurchaseOrderItemBridge.toResource(purchaseOrderItem); purchaseOrderResource.withSubresource("purchaseOrderItems", publicPurchaseOrderItemResource); } return purchaseOrderResource; } }