package crmdna.inventory; import crmdna.client.Client; import crmdna.common.UnitUtils.ReportingUnit; import crmdna.common.Utils; import crmdna.common.Utils.Currency; import crmdna.hr.Department; import crmdna.hr.DepartmentEntity; import crmdna.inventory.InventoryItemCore.CheckInOrOut; import crmdna.user.User.ResourceType; import java.io.Serializable; import java.util.*; import static crmdna.common.AssertUtils.ensureNoNullElement; import static crmdna.common.AssertUtils.ensureNotNull; public class StockChangeProp implements Comparable<StockChangeProp>, Serializable { private static final long serialVersionUID = 1L; public Date timestamp; public long inventoryItemId; public String login; public Set<String> tags = new HashSet<>(); public String comment; public CheckInOrOut checkInOrOut; public long checkInOrOutId; public String inventoryItem; public ReportingUnit reportingUnit; public double changeInReportingUnit; public double cost; public Currency ccy; public long departmentId; public String department; public static String toCSV(List<StockChangeProp> props) { ensureNoNullElement(props); StringBuilder builder = new StringBuilder(); builder .append("Timestamp,Login,Item,Check In/Out,Change,Unit,Cost,Ccy,Department,Item ID,Check In/Out ID,Comment\n"); for (StockChangeProp prop : props) { builder.append(prop.timestamp).append(","); builder.append(prop.login).append(","); builder.append(prop.inventoryItem).append(","); builder.append(prop.checkInOrOut).append(","); builder.append(prop.changeInReportingUnit).append(","); builder.append(prop.reportingUnit).append(","); builder.append(prop.cost).append(","); builder.append(prop.ccy).append(","); builder.append(prop.department != null ? prop.department : "").append(","); builder.append(prop.inventoryItemId).append(","); builder.append(prop.checkInOrOutId).append(","); builder.append(prop.comment != null ? prop.comment : "").append(","); builder.append("\n"); } return builder.toString(); } public static void populateDepartment(String client, List<StockChangeProp> stockChangeProps) { Client.ensureValid(client); ensureNotNull(stockChangeProps, "stockChangeProps is null"); Set<Long> departmentIds = new HashSet<>(); for (StockChangeProp stockChangeProp : stockChangeProps) { if (stockChangeProp.tags == null) continue; for (String tag : stockChangeProp.tags) { if (tag.contains(ResourceType.DEPARTMENT.toString())) { String[] strings = tag.split("||"); if (strings.length >= 2) { if (Utils.canParseAsLong(strings[1])) { stockChangeProp.departmentId = Utils.safeParseAsInt(strings[1]); departmentIds.add(stockChangeProp.departmentId); } } } } } Map<Long, DepartmentEntity> map = Department.get(client, departmentIds); for (StockChangeProp stockChangeProp : stockChangeProps) { if (stockChangeProp.departmentId == 0) continue; if (!map.containsKey(stockChangeProp.departmentId)) { stockChangeProp.department = "NA"; continue; } stockChangeProp.department = map.get(stockChangeProp.departmentId).toProp().displayName; } } @Override public int compareTo(StockChangeProp o) { // default to be sorted in descending order return o.timestamp.compareTo(timestamp); } }