package crmdna.inventory; import crmdna.client.Client; import crmdna.common.Utils; import crmdna.common.api.APIException; import crmdna.common.api.APIResponse; import crmdna.sequence.Sequence; import crmdna.user.User; import java.util.ArrayList; import java.util.List; import static crmdna.common.OfyService.ofy; public class InventoryLocation { public static InventoryLocationProp create(String client, String displayName, String address, String login) { InventoryLocationEntity entity = new InventoryLocationEntity(); User.ensureClientLevelPrivilege(client, login, User.ClientLevelPrivilege.UPDATE_INVENTORY_ITEM_TYPE); entity.inventoryLocationId = Sequence.getNext(client, Sequence.SequenceType.INVENTORY_LOCATION); entity.displayName = displayName; entity.name = Utils.removeSpaceUnderscoreBracketAndHyphen(displayName); entity.address = address; ofy(client).save().entity(entity).now(); return entity.toProp(); } public static List<InventoryLocationProp> getAll(String client, Boolean populateItemCount, String login) { Client.ensureValid(client); List<InventoryLocationEntity> entities = ofy(client).load().type(InventoryLocationEntity.class).list(); List<InventoryLocationProp> props = new ArrayList<>(); for (InventoryLocationEntity entity : entities) { InventoryLocationProp prop = entity.toProp(); if ((populateItemCount != null) && populateItemCount) { List<InventoryItemProp> itemProps = InventoryItem.query(client, new InventoryItemQueryCondition(), login); for (InventoryItemProp itemProp : itemProps) { PackagedInventoryItemQueryCondition qc = new PackagedInventoryItemQueryCondition(); qc.locationId = prop.inventoryLocationId; qc.inventoryItemIds.add(itemProp.inventoryItemId); prop.inventoryItemVsCount.put(itemProp.inventoryItemId, PackagedInventoryItem.queryKeys(client, qc).list().size()); } } props.add(prop); } return props; } public static InventoryLocationEntity safeGet(String client, long inventoryLocationId) { Client.ensureValid(client); InventoryLocationEntity entity = ofy(client).load().type(InventoryLocationEntity.class).id(inventoryLocationId).now(); if (null == entity) throw new APIException().status(APIResponse.Status.ERROR_RESOURCE_NOT_FOUND).message( "Packaged Inventory item id [" + inventoryLocationId + "] does not exist"); return entity; } }