package org.multibit.mbm.api.response.hal.item;
import com.google.common.base.Optional;
import com.theoryinpractise.halbuilder.ResourceFactory;
import com.theoryinpractise.halbuilder.spi.Resource;
import org.multibit.mbm.api.response.hal.BaseBridge;
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 {@link org.multibit.mbm.core.model.Item}:</p>
* <ul>
* <li>Creates representations of a PurchaseOrderItem for a Supplier</li>
* </ul>
*
* @since 0.0.1
*/
public class SupplierPurchaseOrderItemBridge extends BaseBridge<PurchaseOrderItem> {
private final PublicItemBridge publicItemBridge;
/**
* @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 SupplierPurchaseOrderItemBridge(UriInfo uriInfo, Optional<User> principal) {
super(uriInfo, principal);
publicItemBridge = new PublicItemBridge(uriInfo, principal);
}
public Resource toResource(PurchaseOrderItem purchaseOrderItem) {
ResourceAsserts.assertNotNull(purchaseOrderItem, "purchaseOrderItem");
ResourceAsserts.assertNotNull(purchaseOrderItem.getItem().getId(),"id");
// Create the Customer Item resource
Resource publicItemResource = publicItemBridge.toResource(purchaseOrderItem.getItem());
// Create the wrapping PurchaseOrderItem resource
ResourceFactory resourceFactory = getResourceFactory();
return resourceFactory.newResource("/purchase-order/item/" + purchaseOrderItem.getItem().getSKU())
.withProperty("supplier_sku", purchaseOrderItem.getSupplierSKU())
.withProperty("supplier_gtin", purchaseOrderItem.getSupplierGTIN())
.withProperty("batch_reference", purchaseOrderItem.getBatchReference())
.withProperty("quantity", purchaseOrderItem.getQuantity())
.withProperty("price_subtotal", purchaseOrderItem.getPriceSubtotal().getAmount().toPlainString())
.withProperty("tax_subtotal", purchaseOrderItem.getTaxSubtotal().getAmount().toPlainString())
.withProperty("purchase_order_item_subtotal", purchaseOrderItem.getPurchaseOrderItemSubtotal().getAmount().toPlainString())
.withSubresource("item", publicItemResource);
}
}