package org.activityinfo.ui.client.page.entry.form;
/*
* #%L
* ActivityInfo Server
* %%
* Copyright (C) 2009 - 2013 UNICEF
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/gpl-3.0.html>.
* #L%
*/
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.Field;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.Validator;
import org.activityinfo.i18n.shared.I18N;
import org.activityinfo.legacy.shared.model.ActivityFormDTO;
import org.activityinfo.legacy.shared.model.SiteDTO;
import org.activityinfo.legacy.shared.model.LockedPeriodSet;
import org.activityinfo.ui.client.page.entry.form.field.PartnerComboBox;
import org.activityinfo.ui.client.page.entry.form.field.ProjectComboBox;
public class ActivitySection extends FormSectionWithFormLayout<SiteDTO> {
private final ActivityFormDTO activity;
private final LockedPeriodSet locks;
private DateField dateField1;
private DateField dateField2;
private PartnerComboBox partnerCombo;
private ProjectComboBox projectCombo;
public ActivitySection(final ActivityFormDTO activity) {
super();
this.activity = activity;
this.locks = new LockedPeriodSet(activity);
getFormLayout().setLabelWidth(100);
getFormLayout().setDefaultWidth(200);
TextField<String> databaseField = new TextField<String>();
databaseField.setValue(activity.getDatabaseName());
databaseField.setFieldLabel(I18N.CONSTANTS.database());
databaseField.setReadOnly(true);
add(databaseField);
TextField<String> activityField = new TextField<String>();
activityField.setValue(activity.getName());
activityField.setFieldLabel(I18N.CONSTANTS.activity());
activityField.setReadOnly(true);
add(activityField);
partnerCombo = new PartnerComboBox(activity);
add(partnerCombo);
projectCombo = new ProjectComboBox(activity);
if (!activity.getProjects().isEmpty()) {
add(projectCombo);
}
if (activity.getReportingFrequency() == ActivityFormDTO.REPORT_ONCE) {
dateField1 = new DateField();
dateField1.setName("date1");
dateField1.setAllowBlank(false);
dateField1.setFieldLabel(I18N.CONSTANTS.startDate());
add(dateField1);
dateField2 = new DateField();
dateField2.setName("date2");
dateField2.setAllowBlank(false);
dateField2.setFieldLabel(I18N.CONSTANTS.endDate());
dateField2.setValidator(new Validator() {
@Override
public String validate(Field<?> field, String value) {
if (dateField1.getValue() != null && dateField2.getValue() != null) {
if (dateField2.getValue().before(dateField1.getValue())) {
return I18N.CONSTANTS.inconsistentDateRangeWarning();
}
if (locks.isActivityLocked(activity.getId(), dateField2.getValue())) {
return I18N.CONSTANTS.dateFallsWithinLockedPeriodWarning();
}
if (projectCombo.getValue() != null) {
int projectId = projectCombo.getValue().getId();
if (locks.isProjectLocked(projectId, dateField2.getValue())) {
return I18N.CONSTANTS.dateFallsWithinLockedPeriodWarning();
}
}
}
return null;
}
});
add(dateField2);
}
}
@Override
public boolean validate() {
boolean valid = true;
if (activity.getReportingFrequency() == ActivityFormDTO.REPORT_ONCE) {
valid &= dateField1.validate();
valid &= dateField2.validate();
}
valid &= partnerCombo.validate();
valid &= projectCombo.validate();
return valid;
}
@Override
public void updateModel(SiteDTO m) {
if (activity.getReportingFrequency() == ActivityFormDTO.REPORT_ONCE) {
m.setDate1(dateField1.getValue());
m.setDate2(dateField2.getValue());
}
m.setPartner(partnerCombo.getValue());
m.setProject(projectCombo.getValue());
}
@Override
public void updateForm(SiteDTO m, boolean isNew) {
if (activity.getReportingFrequency() == ActivityFormDTO.REPORT_ONCE) {
dateField1.setValue(m.getDate1() == null ? null : m.getDate1().atMidnightInMyTimezone());
dateField2.setValue(m.getDate2() == null ? null : m.getDate2().atMidnightInMyTimezone());
}
partnerCombo.setValue(m.getPartner());
projectCombo.setValue(m.getProject());
}
}