use of org.activityinfo.shared.command.Month in project activityinfo by bedatadriven.
the class ItemDetail method create.
static ItemDetail create(RenderContext ctx, Map.Entry<String, Object> entry) {
ItemDetail d = new ItemDetail();
Map<String, Object> state = ctx.getState();
SchemaDTO schema = ctx.getSchema();
String key = entry.getKey();
final Object oldValue = state.get(key);
final Object newValue = entry.getValue();
state.put(key, newValue);
final StringBuilder sb = new StringBuilder();
// basic
if (key.equals("date1")) {
addValues(sb, I18N.CONSTANTS.startDate(), oldValue, newValue);
} else if (key.equals("date2")) {
addValues(sb, I18N.CONSTANTS.endDate(), oldValue, newValue);
} else if (key.equals("comments")) {
addValues(sb, I18N.CONSTANTS.comments(), oldValue, newValue);
} else if (key.equals("locationId")) {
// schema loookups
String oldName = null;
if (oldValue != null) {
oldName = ctx.getLocation(toInt(oldValue)).getName();
}
String newName = ctx.getLocation(toInt(newValue)).getName();
addValues(sb, I18N.CONSTANTS.location(), oldName, newName);
} else if (key.equals("projectId")) {
String oldName = null;
if (oldValue != null) {
oldName = schema.getProjectById(toInt(oldValue)).getName();
}
String newName = schema.getProjectById(toInt(newValue)).getName();
addValues(sb, I18N.CONSTANTS.project(), oldName, newName);
} else if (key.equals("partnerId")) {
String oldName = null;
if (oldValue != null) {
oldName = schema.getPartnerById(toInt(oldValue)).getName();
}
String newName = schema.getPartnerById(toInt(newValue)).getName();
addValues(sb, I18N.CONSTANTS.partner(), oldName, newName);
} else if (key.startsWith(IndicatorDTO.PROPERTY_PREFIX)) {
// custom
int id = IndicatorDTO.indicatorIdForPropertyName(key);
IndicatorDTO dto = schema.getIndicatorById(id);
String name = dto.getName();
Month m = IndicatorDTO.monthForPropertyName(key);
if (m != null) {
name = I18N.MESSAGES.siteHistoryIndicatorName(name, m.toLocalDate().atMidnightInMyTimezone());
}
addValues(sb, name, oldValue, newValue, dto.getUnits());
} else if (key.startsWith(AttributeDTO.PROPERTY_PREFIX)) {
int id = AttributeDTO.idForPropertyName(key);
AttributeDTO dto = schema.getAttributeById(id);
if (Boolean.parseBoolean(newValue.toString())) {
sb.append(I18N.MESSAGES.siteHistoryAttrAdd(dto.getName()));
} else {
sb.append(I18N.MESSAGES.siteHistoryAttrRemove(dto.getName()));
}
} else {
// fallback
addValues(sb, key, oldValue, newValue);
}
d.stringValue = sb.toString();
return d;
}
use of org.activityinfo.shared.command.Month in project activityinfo by bedatadriven.
the class GetMonthlyReportsHandler method execute.
@Override
public CommandResult execute(GetMonthlyReports cmd, User user) throws CommandException {
List<ReportingPeriod> periods = em.createQuery("select p from ReportingPeriod p where p.site.id = ?1").setParameter(1, cmd.getSiteId()).getResultList();
List<Indicator> indicators = em.createQuery("select i from Indicator i where i.activity.id =" + "(select s.activity.id from Site s where s.id = ?1)").setParameter(1, cmd.getSiteId()).getResultList();
List<IndicatorRowDTO> list = new ArrayList<IndicatorRowDTO>();
for (Indicator indicator : indicators) {
IndicatorRowDTO dto = new IndicatorRowDTO();
dto.setIndicatorId(indicator.getId());
dto.setSiteId(cmd.getSiteId());
dto.setIndicatorName(indicator.getName());
for (ReportingPeriod period : periods) {
Month month = HandlerUtil.monthFromRange(period.getDate1(), period.getDate2());
if (month != null && month.compareTo(cmd.getStartMonth()) >= 0 && month.compareTo(cmd.getEndMonth()) <= 0) {
for (IndicatorValue value : period.getIndicatorValues()) {
if (value.getIndicator().getId() == indicator.getId()) {
dto.setValue(month, value.getValue());
}
}
}
}
list.add(dto);
}
return new MonthlyReportResult(list);
}
use of org.activityinfo.shared.command.Month in project activityinfo by bedatadriven.
the class UpdateMonthlyReportsHandler method execute.
@Override
public CommandResult execute(UpdateMonthlyReports cmd, User user) throws CommandException {
Site site = em.find(Site.class, cmd.getSiteId());
if (site == null) {
throw new CommandException(cmd, "site " + cmd.getSiteId() + " not found for user " + user.getEmail());
}
Map<Month, ReportingPeriod> periods = Maps.newHashMap();
Map<String, Object> siteHistoryChangeMap = createChangeMap();
for (ReportingPeriod period : site.getReportingPeriods()) {
periods.put(HandlerUtil.monthFromRange(period.getDate1(), period.getDate2()), period);
}
for (UpdateMonthlyReports.Change change : cmd.getChanges()) {
ReportingPeriod period = periods.get(change.getMonth());
if (period == null) {
period = new ReportingPeriod(site);
period.setId(keyGenerator.generateInt());
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, change.getMonth().getYear());
calendar.set(Calendar.MONTH, change.getMonth().getMonth() - 1);
calendar.set(Calendar.DATE, 1);
period.setDate1(calendar.getTime());
calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE));
period.setDate2(calendar.getTime());
em.persist(period);
periods.put(change.getMonth(), period);
}
updateIndicatorValue(em, period, change.getIndicatorId(), change.getValue(), false);
siteHistoryChangeMap.put(IndicatorDTO.getPropertyName(change.getIndicatorId(), change.getMonth()), change.getValue());
}
siteHistoryProcessor.persistHistory(site, user, ChangeType.UPDATE, siteHistoryChangeMap);
return new VoidResult();
}
use of org.activityinfo.shared.command.Month in project activityinfo by bedatadriven.
the class MonthlyReportsTest method testGetReportsWhenEmpty.
@Test
public void testGetReportsWhenEmpty() throws Exception {
GetMonthlyReports cmd = new GetMonthlyReports(7);
cmd.setStartMonth(new Month(2009, 1));
cmd.setEndMonth(new Month(2009, 2));
MonthlyReportResult result = execute(cmd);
Assert.assertEquals(1, result.getData().size());
}
use of org.activityinfo.shared.command.Month in project activityinfo by bedatadriven.
the class MonthlyReportsTest method testMonthCompare.
@Test
public void testMonthCompare() throws Exception {
Month feb = new Month(2009, 2);
Month maxMonth = new Month(2009, 2);
Assert.assertEquals(0, maxMonth.compareTo(feb));
}
Aggregations