package crmdna.inventory;
import crmdna.client.Client;
import crmdna.common.DateUtils;
import crmdna.common.Utils.Currency;
import crmdna.common.api.APIException;
import crmdna.common.api.APIResponse.Status;
import crmdna.group.Group;
import crmdna.hr.Department;
import crmdna.inventory.MealCount.Meal;
import crmdna.user.User.ResourceType;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
public class IshaInventoryHelper {
public static List<MealCountProp> getKitchen3DailyMealCost(String client, long groupId,
Integer startYYYYMMDD, Integer endYYYYMMDD, String login) {
Client.ensureValid(client);
String groupName = Group.safeGet(client, groupId).toProp().displayName;
if (!groupName.contains("Mahamudra"))
throw new APIException("This operation is allowed only for group Mahamudra")
.status(Status.ERROR_OPERATION_NOT_ALLOWED);
List<MealCountEntity> mealCountEntities = MealCount.query(client, startYYYYMMDD, endYYYYMMDD);
long startMS = DateUtils.toDate(startYYYYMMDD).getTime();
long endMS = DateUtils.toDate(endYYYYMMDD).getTime();
StockChangeQueryCondition qc = new StockChangeQueryCondition(groupId, startMS, endMS);
qc.includeCheckOut = true;
qc.includeCheckIn = false;
long departmentId = Department.safeGetByName(client, "kitchen3").toProp().departmentId;
qc.tags.add(ResourceType.DEPARTMENT + "||" + departmentId);
List<StockChangeProp> stockChangeProps = InventoryItem.queryStockChanges(client, qc, login);
Map<Integer, Double> yyyymmddVsBreakfastCost = new HashMap<>();
Map<Integer, Double> yyyymmddVsLunchCost = new HashMap<>();
Map<Integer, Double> yyyymmddVsDinnerCost = new HashMap<>();
Map<Integer, Currency> yyyymmddVsCcy = new HashMap<>();
for (StockChangeProp prop : stockChangeProps) {
int yyyymmdd = DateUtils.toYYYYMMDD(prop.timestamp);
if (!yyyymmddVsCcy.containsKey(prop.ccy))
yyyymmddVsCcy.put(yyyymmdd, prop.ccy);
else if (prop.ccy != yyyymmddVsCcy.get(yyyymmdd)) {
String errMessage =
"Found multiple currencies - " + prop.ccy + ", " + yyyymmddVsCcy.get(yyyymmdd)
+ " when processing checkouts for [" + yyyymmdd + "]";
throw new APIException(errMessage).status(Status.ERROR_OPERATION_NOT_ALLOWED);
}
Map<Integer, Double> map = null;
if (prop.tags.contains(ResourceType.MEAL + "||" + Meal.BREAKFAST)) {
map = yyyymmddVsBreakfastCost;
} else if (prop.tags.contains(ResourceType.MEAL + "||" + Meal.LUNCH)) {
map = yyyymmddVsLunchCost;
} else if (prop.tags.contains(ResourceType.MEAL + "||" + Meal.DINNER)) {
map = yyyymmddVsDinnerCost;
} else {
Logger logger = Logger.getLogger(IshaInventoryHelper.class.getName());
logger.warning("Found inventoryCheckOutEntity [" + prop.checkInOrOutId
+ "] with possibly invalid tags");
continue;
}
if (!map.containsKey(yyyymmdd))
map.put(yyyymmdd, 0.0);
map.put(yyyymmdd, map.get(yyyymmdd) + prop.cost);
}
List<MealCountProp> props = new ArrayList<>();
for (MealCountEntity entity : mealCountEntities) {
MealCountProp prop = entity.toProp();
int yyyymmdd = prop.yyyymmdd;
DateUtils.ensureFormatYYYYMMDD(yyyymmdd);
prop.totalBreakfastCost = 0.0;
if (yyyymmddVsBreakfastCost.containsKey(yyyymmdd))
prop.totalBreakfastCost = yyyymmddVsBreakfastCost.get(yyyymmdd);
prop.totalLunchCost = 0.0;
if (yyyymmddVsLunchCost.containsKey(yyyymmdd))
prop.totalLunchCost = yyyymmddVsLunchCost.get(yyyymmdd);
prop.totalDinnerCost = 0.0;
if (yyyymmddVsDinnerCost.containsKey(yyyymmdd))
prop.totalDinnerCost = yyyymmddVsDinnerCost.get(yyyymmdd);
props.add(prop);
}
return props;
}
}