package com.jcommerce.gwt.client.panels.order;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.DateField;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.jcommerce.gwt.client.ContentWidget;
import com.jcommerce.gwt.client.ModelNames;
import com.jcommerce.gwt.client.PageState;
import com.jcommerce.gwt.client.form.BeanObject;
import com.jcommerce.gwt.client.model.IOrderInfo;
import com.jcommerce.gwt.client.model.IPayment;
import com.jcommerce.gwt.client.model.IRegion;
import com.jcommerce.gwt.client.model.IShipping;
import com.jcommerce.gwt.client.model.IUser;
import com.jcommerce.gwt.client.resources.Resources;
import com.jcommerce.gwt.client.service.Condition;
import com.jcommerce.gwt.client.service.Criteria;
import com.jcommerce.gwt.client.service.ListService;
import com.jcommerce.gwt.client.service.RegionService;
public class SearchOrderPanel extends ContentWidget {
public static interface Constants {
String SearchOrder_address();
String SearchOrder_addTime();
String SearchOrder_buyer();
String SearchOrder_email();
String SearchOrder_orderState();
String SearchOrder_payManner();
String SearchOrder_payState();
String SearchOrder_phone();
String SearchOrder_region();
String SearchOrder_reset();
String SearchOrder_search();
String SearchOrder_select();
String SearchOrder_shipManner();
String SearchOrder_shipState();
String SearchOrder_tel();
String SearchOrder_title();
String SearchOrder_zipcode();
}
public static class State extends PageState {
public String getPageClassName() {
return SearchOrderPanel.class.getName();
}
public String getMenuDisplayName() {
return Resources.constants.SearchOrder_title();
}
}
private static final boolean instanceOf = false;
@Override
public State getCurState() {
if (curState == null ) {
curState = new State();
}
return (State)curState;
}
private static SearchOrderPanel instance;
private SearchOrderPanel() {
super();
}
public static SearchOrderPanel getInstance(){
if(instance == null) {
instance = new SearchOrderPanel();
}
return instance;
}
ListBox countryList = new ListBox();
ListBox provinceList = new ListBox();
ListBox cityList = new ListBox();
ListBox districtList = new ListBox();
ListBox shipMannerList = new ListBox();
ListBox payMannerList = new ListBox();
ListBox orderStateList = new ListBox();
ListBox payStateList = new ListBox();
ListBox shipStateList = new ListBox();
TextField<String> orderSnField = new TextField<String>();
TextField<String> emailField = new TextField<String>();
TextField<String> buyerField = new TextField<String>();
TextField<String> consigneeField = new TextField<String>();
TextField<String> addressField = new TextField<String>();
TextField<String> zipcodeField = new TextField<String>();
TextField<String> phoneField = new TextField<String>();
TextField<String> telField = new TextField<String>();
DateField fromDateField = new DateField();
DateField toDateField = new DateField();
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
HorizontalPanel snPanel = new HorizontalPanel();
Label snLabel = new Label(Resources.constants.OrderList_orderSN() + ":");
snLabel.setWidth("70");
snPanel.add(snLabel);
snPanel.add(orderSnField);
add(snPanel);
HorizontalPanel emailPanel = new HorizontalPanel();
Label emailLabel = new Label(Resources.constants.SearchOrder_email() + ":");
emailLabel.setWidth("70");
emailPanel.add(emailLabel);
emailPanel.add(emailField);
add(emailPanel);
HorizontalPanel bsPanel = new HorizontalPanel();
HorizontalPanel buyerPanel = new HorizontalPanel();
Label buyerLabel = new Label(Resources.constants.SearchOrder_buyer() + ":");
buyerLabel.setWidth("70");
buyerPanel.add(buyerLabel);
buyerPanel.add(buyerField);
buyerPanel.setWidth("500");
bsPanel.add(buyerPanel);
HorizontalPanel consigneePanel = new HorizontalPanel();
Label consigneeLabel = new Label(Resources.constants.OrderList_consignee() + ":");
consigneeLabel.setWidth("70");
consigneePanel.add(consigneeLabel);
consigneePanel.add(consigneeField);
bsPanel.add(consigneePanel);
add(bsPanel);
HorizontalPanel azPanel = new HorizontalPanel();
HorizontalPanel addressPanel = new HorizontalPanel();
Label addressLabel = new Label(Resources.constants.SearchOrder_address() + ":");
addressLabel.setWidth("70");
addressPanel.add(addressLabel);
addressPanel.add(addressField);
addressPanel.setWidth("500");
azPanel.add(addressPanel);
HorizontalPanel zipcodePanel = new HorizontalPanel();
Label zipcodeLabel = new Label(Resources.constants.SearchOrder_zipcode() + ":");
zipcodeLabel.setWidth("70");
zipcodePanel.add(zipcodeLabel);
zipcodePanel.add(zipcodeField);
azPanel.add(zipcodePanel);
add(azPanel);
HorizontalPanel ptPanel = new HorizontalPanel();
HorizontalPanel phonePanel = new HorizontalPanel();
Label phoneLabel = new Label(Resources.constants.SearchOrder_phone() + ":");
phoneLabel.setWidth("70");
phonePanel.add(phoneLabel);
phonePanel.add(phoneField);
phonePanel.setWidth("500");
ptPanel.add(phonePanel);
HorizontalPanel telPanel = new HorizontalPanel();
Label telLabel = new Label(Resources.constants.SearchOrder_tel() + ":");
telLabel.setWidth("70");
telPanel.add(telLabel);
telPanel.add(telField);
ptPanel.add(telPanel);
add(ptPanel);
HorizontalPanel regionPanel = new HorizontalPanel();
Label regionLabel = new Label(Resources.constants.SearchOrder_region() + ":");
regionLabel.setWidth("70");
regionPanel.add(regionLabel);
regionPanel.add(countryList);
countryList.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
String countryId = countryList.getValue(countryList.getSelectedIndex());
if(countryId.equals("0")) {
provinceList.setSelectedIndex(0);
cityList.setSelectedIndex(0);
districtList.setSelectedIndex(0);
}
else
populateRegionList(provinceList,"1",countryId);
}
});
regionPanel.add(provinceList);
provinceList.addItem(Resources.constants.SearchOrder_select(), "0");
provinceList.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
String provinceId = provinceList.getValue(provinceList.getSelectedIndex());
if(provinceId.equals("0")) {
cityList.setSelectedIndex(0);
districtList.setSelectedIndex(0);
}
else
populateRegionList(cityList,"2",provinceId);
}
});
regionPanel.add(cityList);
cityList.addItem(Resources.constants.SearchOrder_select(), "0");
cityList.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
String cityId = cityList.getValue(cityList.getSelectedIndex());
if(cityId.equals("0"))
districtList.setSelectedIndex(0);
else
populateRegionList(districtList,"3",cityId);
}
});
regionPanel.add(districtList);
districtList.addItem(Resources.constants.SearchOrder_select(), "0");
add(regionPanel);
HorizontalPanel spPanel = new HorizontalPanel();
HorizontalPanel shipMannerPanel = new HorizontalPanel();
Label shipMannerLabel = new Label(Resources.constants.SearchOrder_shipManner() + ":");
shipMannerLabel.setWidth("70");
shipMannerPanel.add(shipMannerLabel);
shipMannerPanel.add(shipMannerList);
shipMannerPanel.setWidth("500");
spPanel.add(shipMannerPanel);
HorizontalPanel payMannerPanel = new HorizontalPanel();
Label payMannerLabel = new Label(Resources.constants.SearchOrder_payManner() + ":");
payMannerLabel.setWidth("70");
payMannerPanel.add(payMannerLabel);
payMannerPanel.add(payMannerList);
spPanel.add(payMannerPanel);
add(spPanel);
HorizontalPanel addTimePanel = new HorizontalPanel();
Label addTimeLabel = new Label(Resources.constants.SearchOrder_addTime() + ":");
addTimeLabel.setWidth("70");
addTimePanel.add(addTimeLabel);
addTimePanel.add(fromDateField);
addTimePanel.add(new Label("~"));
addTimePanel.add(toDateField);
add(addTimePanel);
HorizontalPanel statePanel = new HorizontalPanel();
Label orderStateLabel = new Label(Resources.constants.SearchOrder_orderState() + ":");
orderStateLabel.setWidth("70");
Label payStateLabel = new Label(Resources.constants.SearchOrder_payState() + ":");
payStateLabel.setWidth("70");
Label shipStateLabel = new Label(Resources.constants.SearchOrder_shipState() + ":");
shipStateLabel.setWidth("70");
statePanel.add(orderStateLabel);
statePanel.add(orderStateList);
orderStateList.addItem(Resources.constants.SearchOrder_select());
orderStateList.addItem(Resources.constants.OrderStatus_OS_UNCONFIRMED(), "0");
orderStateList.addItem(Resources.constants.OrderStatus_OS_CONFIRMED(), "1");
orderStateList.addItem(Resources.constants.OrderStatus_OS_CANCELED(), "2");
orderStateList.addItem(Resources.constants.OrderStatus_OS_INVALID(), "3");
orderStateList.addItem(Resources.constants.OrderStatus_OS_RETURNED(), "4");
statePanel.add(payStateLabel);
statePanel.add(payStateList);
payStateList.addItem(Resources.constants.SearchOrder_select());
payStateList.addItem(Resources.constants.OrderStatus_PS_UNPAYED(), "0");
payStateList.addItem(Resources.constants.OrderStatus_PS_PAYING(), "1");
payStateList.addItem(Resources.constants.OrderStatus_PS_PAYED(), "2");
statePanel.add(shipStateLabel);
statePanel.add(shipStateList);
shipStateList.addItem(Resources.constants.SearchOrder_select());
shipStateList.addItem(Resources.constants.OrderStatus_SS_UNSHIPPED(), "0");
shipStateList.addItem(Resources.constants.OrderStatus_SS_SHIPPED(), "1");
shipStateList.addItem(Resources.constants.OrderStatus_SS_RECEIVED(), "2");
shipStateList.addItem(Resources.constants.OrderStatus_SS_PREPARING(), "3");
add(statePanel);
HorizontalPanel buttonPanel = new HorizontalPanel();
Button btnSearch = new Button(Resources.constants.SearchOrder_search());
Button btnReset = new Button(Resources.constants.SearchOrder_reset());
buttonPanel.add(btnSearch);
btnSearch.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
search();
}
});
buttonPanel.add(btnReset);
btnReset.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
reset();
}
});
add(buttonPanel);
}
protected void search() {
String buyer = buyerField.getValue();
if(buyer != null) {
Criteria criteria = new Criteria();
criteria.addCondition(new Condition(IUser.NAME, Condition.EQUALS, buyer));
new ListService().listBeans(ModelNames.USER, criteria,
new ListService.Listener() {
public synchronized void onSuccess(List<BeanObject> result) {
String userId = null;
for (Iterator<BeanObject> it = result.iterator(); it
.hasNext();) {
BeanObject user = it.next();
userId = user.getString(IUser.ID);
}
List<String> condition = getValue();
if(userId != null)
condition.add(IOrderInfo.USER_ID + ":" + userId);
OrderListPanel.State newState = new OrderListPanel.State();
newState.setCondition(condition);
newState.execute();
}
});
}
else {
List<String> condition = getValue();
OrderListPanel.State newState = new OrderListPanel.State();
newState.setCondition(condition);
newState.execute();
}
}
private List<String> getValue() {
List<String> condition = new ArrayList<String>();
if(orderSnField.getValue() != null)
condition.add(IOrderInfo.ORDER_SN + ":" + orderSnField.getValue());
if(emailField.getValue() != null)
condition.add(IOrderInfo.EMAIL + ":" + emailField.getValue());
if(consigneeField.getValue() != null)
condition.add(IOrderInfo.CONSIGNEE + ":" + consigneeField.getValue());
if(addressField.getValue() != null)
condition.add(IOrderInfo.ADDRESS + ":" + addressField.getValue());
if(zipcodeField.getValue() != null)
condition.add(IOrderInfo.ZIPCODE + ":" + zipcodeField.getValue());
if(telField.getValue() != null)
condition.add(IOrderInfo.MOBILE + ":" + telField.getValue());
if(phoneField.getValue() != null)
condition.add(IOrderInfo.TEL + ":" + phoneField.getValue());
String regionID = districtList.getValue(districtList.getSelectedIndex());
if (regionID == null && cityList.getSelectedIndex() > 0) {
regionID = cityList.getValue(districtList.getSelectedIndex());
}
if (regionID == null && provinceList.getSelectedIndex() > 0) {
regionID = provinceList.getValue(districtList.getSelectedIndex());
}
if (regionID == null && countryList.getSelectedIndex() > 0) {
regionID = countryList.getValue(districtList.getSelectedIndex());
}
if(regionID != null)
condition.add(IOrderInfo.REGION+ ":" + regionID);
if(payMannerList.getSelectedIndex() > 0)
condition.add(IOrderInfo.PAY_ID + ":" + payMannerList.getValue(payMannerList.getSelectedIndex()));
if(shipMannerList.getSelectedIndex() > 0)
condition.add(IOrderInfo.SHIPPING_ID + ":" + shipMannerList.getValue(shipMannerList.getSelectedIndex()));
if(orderStateList.getSelectedIndex() > 0)
condition.add(IOrderInfo.ORDER_STATUS + ":" + orderStateList.getValue(orderStateList.getSelectedIndex()));
if(payStateList.getSelectedIndex() > 0)
condition.add(IOrderInfo.PAY_STATUS + ":" + payStateList.getValue(payStateList.getSelectedIndex()));
if(shipStateList.getSelectedIndex() > 0)
condition.add(IOrderInfo.SHIPPING_STATUS + ":" + shipStateList.getValue(shipStateList.getSelectedIndex()));
//为日期加上时间
if(fromDateField.isDirty()) {
Date now = new Date();
int hours = now.getHours();
int minute = now.getMinutes();
int second = now.getSeconds();
Date fromDate = fromDateField.getValue();
fromDate.setHours(hours);
fromDate.setMinutes(minute);
fromDate.setSeconds(second);
condition.add("fromDate" + ":" + String.valueOf(fromDate.getTime()));
}
if(toDateField.isDirty()) {
Date now = new Date();
int hours = now.getHours();
int minute = now.getMinutes();
int second = now.getSeconds();
Date toDate = toDateField.getValue();
toDate.setHours(hours);
toDate.setMinutes(minute);
toDate.setSeconds(second);
condition.add("toDate" + ":" + String.valueOf(toDate.getTime()));
}
return condition;
}
public void refresh() {
payMannerList.clear();
payMannerList.addItem(Resources.constants.SearchOrder_select(), "0");
new ListService().listBeans(ModelNames.PAYMENT,
new ListService.Listener() {
public synchronized void onSuccess(List<BeanObject> result) {
for (Iterator<BeanObject> it = result.iterator(); it
.hasNext();) {
BeanObject payment = it.next();
payMannerList.addItem(payment.getString(IPayment.NAME),
payment.getString(IPayment.ID));
}
}
});
shipMannerList.clear();
shipMannerList.addItem(Resources.constants.SearchOrder_select(), "0");
new ListService().listBeans(ModelNames.SHIPPING,
new ListService.Listener() {
public synchronized void onSuccess(List<BeanObject> result) {
for (Iterator<BeanObject> it = result.iterator(); it
.hasNext();) {
BeanObject shipping = it.next();
shipMannerList.addItem(shipping.getString(IShipping.NAME),
shipping.getString(IShipping.ID));
}
}
});
populateRegionList(countryList,"0",null);
reset();
}
private void reset() {
countryList.setSelectedIndex(0);
provinceList.clear();
provinceList.addItem(Resources.constants.SearchOrder_select(), "0");
cityList.clear();
cityList.addItem(Resources.constants.SearchOrder_select(), "0");
districtList.clear();
districtList.addItem(Resources.constants.SearchOrder_select(), "0");
shipMannerList.setSelectedIndex(0);
payMannerList.setSelectedIndex(0);
orderStateList.setSelectedIndex(0);
payStateList.setSelectedIndex(0);
shipStateList.setSelectedIndex(0);
orderSnField.setValue("");
emailField.setValue("");
buyerField.setValue("");
consigneeField.setValue("");
addressField.setValue("");
zipcodeField.setValue("");
phoneField.setValue("");
telField.setValue("");
fromDateField.clear();
toDateField.clear();
}
private void populateRegionList(final ListBox regionList, String regionType, String parentId) {
regionList.clear();
regionList.addItem(Resources.constants.SearchOrder_select(), "0");
new RegionService().getRegionChildList(parentId, new RegionService.Listener() {
public synchronized void onSuccess(List<BeanObject> result) {
for (Iterator<BeanObject> it = result.iterator(); it.hasNext();) {
BeanObject province = it.next();
regionList.addItem(province.getString(IRegion.NAME), province.getString(IRegion.ID));
}
}
});
}
public String getDescription() {
return "cwBasicTextDescription";
}
public Button getShortCutButton() {
Button buttonOrderList = new Button(Resources.constants.OrderList_title());
buttonOrderList.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
onButtonListClicked();
}
});
return buttonOrderList;
}
public void onButtonListClicked() {
OrderListPanel.State newState = new OrderListPanel.State();
newState.execute();
}
@Override
public String getName() {
return Resources.constants.SearchOrder_title();
}
}