package crmdna.inventory; import com.googlecode.objectify.Key; import com.googlecode.objectify.cmd.Query; import crmdna.client.Client; import crmdna.common.DateUtils; import crmdna.user.User; import crmdna.user.User.ClientLevelPrivilege; import java.util.List; import static crmdna.common.AssertUtils.ensure; import static crmdna.common.OfyService.ofy; public class MealCount { public static MealCountProp setCount(String client, int yyyymmdd, Integer breakfastCount, Integer lunchCount, Integer dinnerCount, String login) { Client.ensureValid(client); DateUtils.ensureFormatYYYYMMDD(yyyymmdd); ensure((breakfastCount != null) || (lunchCount != null) || (dinnerCount != null), "Either breakfastCount or lunchCount or dinnerCount should be specified"); User.ensureClientLevelPrivilege(client, login, ClientLevelPrivilege.UPDATE_MEAL_COUNT); MealCountEntity entity = ofy(client).load().type(MealCountEntity.class).id(yyyymmdd).now(); if (entity == null) { entity = new MealCountEntity(); entity.yyyymmdd = yyyymmdd; } if (breakfastCount != null) { ensure(breakfastCount >= 0, "Invalid breakfastCount [" + breakfastCount + "]"); entity.breakfastCount = breakfastCount; } if (lunchCount != null) { ensure(lunchCount >= 0, "Invalid lunchCount [" + lunchCount + "]"); entity.lunchCount = lunchCount; } if (dinnerCount != null) { ensure(dinnerCount >= 0, "Invalid dinnerCount [" + dinnerCount + "]"); entity.dinnerCount = dinnerCount; } ofy(client).save().entity(entity).now(); return entity.toProp(); } public static List<MealCountEntity> query(String client, Integer startYYYYMMDD, Integer endYYYYMMDD) { Client.ensureValid(client); ensure((startYYYYMMDD != null) || (endYYYYMMDD != null), "Both startYYYYMMDD and endYYYYMMDD are null"); if (startYYYYMMDD != null) DateUtils.ensureFormatYYYYMMDD(startYYYYMMDD); if (endYYYYMMDD != null) DateUtils.ensureFormatYYYYMMDD(endYYYYMMDD); if ((startYYYYMMDD != null) && (endYYYYMMDD != null)) { ensure(endYYYYMMDD >= startYYYYMMDD, "End date [" + endYYYYMMDD + "] is less than start date [" + startYYYYMMDD + "]"); } Query<MealCountEntity> q = ofy(client).load().type(MealCountEntity.class); if (startYYYYMMDD != null) { Key<MealCountEntity> startKey = Key.create(MealCountEntity.class, startYYYYMMDD); q = q.filterKey(">=", startKey); } if (endYYYYMMDD != null) { Key<MealCountEntity> endKey = Key.create(MealCountEntity.class, endYYYYMMDD); q = q.filterKey("<=", endKey); } q = q.orderKey(true); return q.list(); } public enum Meal { BREAKFAST, LUNCH, DINNER } }