package com.biomed.client.ui.schedule;
import java.util.Date;
import java.util.List;
import javax.inject.Inject;
import com.biomed.client.activity.ViewScheduleActivity;
import com.biomed.client.ui.renderers.ClientDTORenderer;
import com.biomed.client.ui.renderers.ScheduleTimeRenderer;
import com.biomed.client.ui.renderers.UserDTORenderer;
import com.biomed.client.ui.renderers.WorkorderReasonDTORenderer;
import com.biomed.client.ui.renderers.WorkorderStatusDTORenderer;
import com.biomed.shared.api.dto.ClientDTO;
import com.biomed.shared.api.dto.ScheduleTime;
import com.biomed.shared.api.dto.UserDTO;
import com.biomed.shared.api.dto.WorkorderReasonDTO;
import com.biomed.shared.api.dto.WorkorderStatusDTO;
import com.github.gwtbootstrap.client.ui.Button;
import com.github.gwtbootstrap.client.ui.TextBox;
import com.github.gwtbootstrap.client.ui.ValueListBox;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.LIElement;
import com.google.gwt.dom.client.NodeList;
import com.google.gwt.dom.client.UListElement;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.HasClickHandlers;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.EventListener;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.HasConstrainedValue;
import com.google.gwt.user.client.ui.HasValue;
import com.google.gwt.user.datepicker.client.DateBox;
import com.google.gwt.user.datepicker.client.DateBox.Format;
import com.google.gwt.user.datepicker.client.DatePicker;
public class ScheduleSidebarPanel extends Composite implements Schedule.Sidebar {
public interface Templates extends SafeHtmlTemplates {
@Template("
{0}")
SafeHtml techItem(String name, int techId);
}
interface Binder extends UiBinder {
}
@UiField
LIElement scheduleItem;
@UiField
LIElement techsItem;
@UiField
LIElement reportsItem;
@UiField
Anchor techsButton;
@UiField
Anchor scheduleButton;
@UiField
HTMLPanel techs;
@UiField
HTMLPanel schedule;
@UiField
HTMLPanel reports;
@UiField
UListElement userListPanel;
@UiField
DatePicker datePicker;
@UiField(provided = true)
ValueListBox startTimePicker;
@UiField(provided = true)
ValueListBox endTimePicker;
@UiField(provided = true)
ValueListBox techPicker;
@UiField(provided = true)
ValueListBox reportTechPicker;
@UiField(provided = true)
ValueListBox clientPicker;
@UiField(provided = true)
ValueListBox workorderStatusField;
@UiField(provided = true)
ValueListBox reasonPicker;
@UiField
Button saveButton;
@UiField
Button sendReport;
@UiField DateBox jobDateField;
@UiField DateBox reportDateField;
@UiField TextBox requestedByField;
@UiField TextBox remarksField;
private final Templates templates;
public ViewScheduleActivity activity;
@Inject
public ScheduleSidebarPanel(Binder binder, Templates templates) {
this.templates = templates;
startTimePicker = new ValueListBox(new ScheduleTimeRenderer(null));
endTimePicker = new ValueListBox(new ScheduleTimeRenderer(null));
techPicker = new ValueListBox(new UserDTORenderer("Please select ..."));
reportTechPicker = new ValueListBox(new UserDTORenderer("Please select ..."));
clientPicker = new ValueListBox(new ClientDTORenderer("Please select ..."));
workorderStatusField = new ValueListBox(new WorkorderStatusDTORenderer(null));
reasonPicker = new ValueListBox(new WorkorderReasonDTORenderer(null));
initWidget(binder.createAndBindUi(this));
schedule.setVisible(false);
reports.setVisible(false);
Format format = new DateBox.DefaultFormat(DateTimeFormat.getShortDateFormat());
jobDateField.setFormat(format);
jobDateField.setValue(new Date());
reportDateField.setFormat(format);
reportDateField.setValue(new Date());
datePicker.setValue(new Date(), false);
}
public void setTechList(final List techs) {
techPicker.setAcceptableValues(techs);
reportTechPicker.setAcceptableValues(techs);
SafeHtmlBuilder builder = new SafeHtmlBuilder();
builder.append(templates.techItem("- All Techs -", 0));
for (final UserDTO t : techs) {
builder.append(templates.techItem(t.getDisplayName(), t.getId()));
}
userListPanel.setInnerSafeHtml(builder.toSafeHtml());
NodeList elements = userListPanel.getElementsByTagName("a");
for (int i = 0; i < elements.getLength(); i++) {
final com.google.gwt.user.client.Element anchor = elements.getItem(i).cast();
DOM.setEventListener(anchor, new EventListener() {
@Override
public void onBrowserEvent(Event event) {
Element target = event.getCurrentTarget();
int techId = Integer.parseInt(target.getAttribute("data"));
activity.setTechId(techId);
if (techId == 0) {
techPicker.setValue(null);
}
for (UserDTO tech : techs) {
if (tech.getId() == techId) {
techPicker.setValue(tech);
break;
}
}
}
});
DOM.sinkEvents(anchor, Event.ONCLICK);
}
}
@UiHandler("datePicker")
void onDatePickerValueChanged(ValueChangeEvent event) {
activity.setDate(event.getValue());
jobDateField.setValue(event.getValue(), false);
}
@UiHandler("jobDateField")
void onJobDateFieldValueChanged(ValueChangeEvent event) {
activity.setDate(event.getValue());
datePicker.setValue(event.getValue(), false);
}
@UiHandler("techsButton")
void onTechsButtonClicked(ClickEvent event) {
techsItem.setClassName("clicked");
scheduleItem.setClassName("");
reportsItem.setClassName("");
techs.setVisible(true);
schedule.setVisible(false);
reports.setVisible(false);
}
@UiHandler("scheduleButton")
void onScheduleButtonClicked(ClickEvent event) {
techsItem.setClassName("");
scheduleItem.setClassName("clicked");
reportsItem.setClassName("");
techs.setVisible(false);
schedule.setVisible(true);
reports.setVisible(false);
}
@UiHandler("reportButton")
void onReportButtonClicked(ClickEvent event) {
techsItem.setClassName("");
scheduleItem.setClassName("");
reportsItem.setClassName("clicked");
techs.setVisible(false);
schedule.setVisible(false);
reports.setVisible(true);
}
@UiHandler("techPicker")
void onTechPickerValueChanged(ValueChangeEvent event) {
if (event.getValue() != null) {
activity.setTechId(event.getValue().getId());
} else {
activity.setTechId(0);
}
}
@UiHandler("sendReport")
void onSendReportButtonClicked(ClickEvent event) {
activity.sendReport();
}
public HasValue getJobDateField() {
return jobDateField;
}
public HasValue getReportDateField() {
return reportDateField;
}
public HasConstrainedValue getStartTimeField() {
return startTimePicker;
}
public HasConstrainedValue getEndTimeField() {
return endTimePicker;
}
public HasConstrainedValue getClientField() {
return clientPicker;
}
public HasConstrainedValue getTechField() {
return techPicker;
}
public HasConstrainedValue getReportTechField() {
return reportTechPicker;
}
public HasConstrainedValue getWorkorderStatusField() {
return workorderStatusField;
}
public HasConstrainedValue getReasonField() {
return reasonPicker;
}
public HasValue getRequestedByField() {
return requestedByField;
}
public HasValue getRemarksField() {
return remarksField;
}
public HasClickHandlers getSaveButton() {
return saveButton;
}
}