package com.jcommerce.gwt.client.panels.orders;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.widget.ContentPanel;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.Info;
import com.extjs.gxt.ui.client.widget.InfoConfig;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.extjs.gxt.ui.client.widget.form.Validator;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.ChangeListener;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.jcommerce.gwt.client.ModelNames;
import com.jcommerce.gwt.client.form.BeanObject;
import com.jcommerce.gwt.client.model.IOrder;
import com.jcommerce.gwt.client.model.IRegion;
import com.jcommerce.gwt.client.model.IUserAddress;
import com.jcommerce.gwt.client.model.RegularExConstants;
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.widgets.ColumnPanel;
public class ConsigneeSettingPanel extends ContentPanel {
String userId = "";
ListBox country = new ListBox();
ListBox province = new ListBox();
ListBox city = new ListBox();
ListBox district = new ListBox();
List<BeanObject> countryList = new ArrayList<BeanObject>();
List<BeanObject> provinceList = new ArrayList<BeanObject>();
List<BeanObject> cityList = new ArrayList<BeanObject>();
List<BeanObject> districtList = new ArrayList<BeanObject>();
String userAddrStr = "";
TextField<String> consignee = new TextField<String>();
TextField<String> email = new TextField<String>();
TextField<String> address = new TextField<String>();
TextField<String> zip = new TextField<String>();
TextField<String> tel = new TextField<String>();
TextField<String> mobile = new TextField<String>();
TextField<String> sign_building = new TextField<String>();
TextField<String> best_time = new TextField<String>();
ColumnPanel contentPanel = new ColumnPanel();
BeanObject userAddInfo = null;
BeanObject order = new BeanObject(ModelNames.ORDER);
public BeanObject getOrder() {
order.setValues(contentPanel.getValues());
order.set(IOrder.REGION, district.getValue(district.getSelectedIndex()));
order.set(IOrder.ADDRESS, userAddrStr + " " + address.getValue());
return order;
}
public void setOrder(BeanObject order) {
this.order = order;
}
public BeanObject getUserAddInfo() {
return userAddInfo;
}
public ConsigneeSettingPanel() {
ContentPanel panel = new ContentPanel();
consignee.setWidth("120px");
consignee.setEnabled(true);
contentPanel.createPanel(IOrder.CONSIGNEE, "收货人:", consignee);
initialDistrictList();
HorizontalPanel districtPanel = new HorizontalPanel();
districtPanel.add(new Label(" 联系人地址: "));
districtPanel.add(country);
districtPanel.add(province);
districtPanel.add(city);
districtPanel.add(district);
contentPanel.add(districtPanel);
email.setWidth("120px");
email.setEnabled(true);
contentPanel.createPanel(IOrder.EMAIL, "电子邮件:", email);
address.setWidth("120px");
address.setEnabled(true);
contentPanel.createPanel(IOrder.ADDRESS, "地址:", address);
zip.setWidth("120px");
zip.setEnabled(true);
contentPanel.createPanel(IOrder.ZIP, "邮编:", zip);
tel.setWidth("120px");
tel.setEnabled(true);
contentPanel.createPanel(IOrder.PHONE, "电话:", tel);
mobile.setWidth("120px");
mobile.setEnabled(true);
contentPanel.createPanel(IOrder.MOBILE, "手机:", mobile);
sign_building.setWidth("120px");
sign_building.setEnabled(true);
contentPanel.createPanel(IOrder.SIGNBUILDING, "标志性建筑:", sign_building);
best_time.setWidth("120px");
best_time.setEnabled(true);
contentPanel.createPanel(IOrder.BESTTIME, "最佳送货时间:", best_time);
setValidatorToAddressField();
panel.setFrame(true);
panel.setCollapsible(true);
panel.setButtonAlign(HorizontalAlignment.CENTER);
panel.setIconStyle("icon-table");
panel.setButtonAlign(HorizontalAlignment.CENTER);
panel.add(contentPanel);
this.add(panel);
this.setHeading("设置收货人信息");
this.setSize(780, 555);
}
public void initialDistrictList()
{
country.addItem("请选择");
province.addItem("请选择");
city.addItem("请选择");
district.addItem("请选择");
addListBoxOnChangeListener(country, countryList ,province, provinceList);
addListBoxOnChangeListener(province, provinceList, city, cityList);
addListBoxOnChangeListener(city, cityList, district, districtList);
initalCounrtyListBox();
}
//add a boxchangelistener to district List so that this method can be a model called by three
//listboxs
private void addListBoxOnChangeListener(final ListBox listBox, final List<BeanObject> arrayList
, final ListBox nextLevelListBox, final List<BeanObject> nextLevelArrayList)
{
listBox.addChangeListener(new ChangeListener(){
public void onChange(Widget sender)
{
if(listBox.getSelectedIndex() != 0)
{
String countryInfo = listBox.getValue(listBox.getSelectedIndex());
BeanObject region = arrayList.get(listBox.getSelectedIndex());
nextLevelListBox.clear();
nextLevelListBox.addItem("请选择");
nextLevelArrayList.clear();
nextLevelArrayList.add(null);
Criteria criteria = new Criteria();
criteria.addCondition(new Condition(IRegion.PARENT, Condition.EQUALS,
region.getString(IRegion.ID)));
ListService listService = new ListService();
listService.listBeans(ModelNames.REGION, criteria,
new ListService.Listener()
{
public void onSuccess(List<BeanObject> beans)
{
for(int i=0; i< beans.size(); i++)
{
BeanObject regionInfo = beans.get(i);
nextLevelArrayList.add(regionInfo);
nextLevelListBox.addItem(regionInfo.getString(IRegion.NAME),
regionInfo.getString(IRegion.ID));
}
}
} );
}
else
{
return ;
}
}
});
}
//I need set the basic country info to countryListBox, when loading this panel.
public void initalCounrtyListBox()
{
countryList.add(null);
provinceList.add(null);
cityList.add(null);
districtList.add(null);
Criteria criteria = new Criteria();
criteria.addCondition(new Condition(IRegion.PARENT, Condition.ISNULL , null));
ListService listService = new ListService();
listService.listBeans(ModelNames.REGION, criteria,
new ListService.Listener()
{
public void onSuccess(List<BeanObject> beans)
{
for(int i=0; i< beans.size(); i++)
{
BeanObject countryInfo = beans.get(i);
countryList.add(countryInfo);
country.addItem(countryInfo.getString(IRegion.NAME),
countryInfo.getString(IRegion.ID));
}
}
} );
}
//intial textfields' regular express validator.
public void setValidatorToAddressField()
{
consignee.setRegex(RegularExConstants.CONSIGNEE);
consignee.getMessages().setRegexText(RegularExConstants.CONSIGNEEREGMSG);
email.setRegex(RegularExConstants.EMAIL);
email.getMessages().setRegexText(RegularExConstants.EMAILREGMSG);
zip.setRegex(RegularExConstants.ZIP);
zip.getMessages().setRegexText(RegularExConstants.ZIPREGMSG);
tel.setRegex(RegularExConstants.TEL);
tel.getMessages().setRegexText(RegularExConstants.TELREGMSG);
mobile.setRegex(RegularExConstants.MOBILE);
mobile.getMessages().setRegexText(RegularExConstants.MOBILEREGMSG);
}
public boolean validateUserAddressInfo()
{
userAddrStr = country.getItemText(country.getSelectedIndex()) + " " +
province.getItemText(province.getSelectedIndex()) + " " +
city.getItemText(city.getSelectedIndex()) + " " +
district.getItemText(district.getSelectedIndex());
if((consignee.isValid() && email.isValid() && zip.isValid())
&& (!consignee.getValue().equals("") && !email.getValue().equals("")
&& !zip.getValue().equals("") && !userAddrStr.contains("请选择")))
{
//tel or mobile must be correct.
if((tel.isValid() || mobile.isValid()) && (!tel.getValue().equals("")
|| !mobile.getValue().equals("")))
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
public Map<String, Object> getOrderUserAddressMap()
{
return contentPanel.getValues();
}
public BeanObject getUserAddressInfo()
{
if(validateUserAddressInfo())
{
userAddInfo = new BeanObject();
userAddInfo.set(IUserAddress.CONSIGNEE, consignee.getValue() + "");
userAddInfo.set(IUserAddress.EMAIL, email.getValue() + "");
userAddInfo.set(IUserAddress.ADDRESS, userAddrStr + " " + address.getValue() + " ");
userAddInfo.set(IUserAddress.ZIP, zip.getValue() + "");
userAddInfo.set(IUserAddress.PHONE, tel.getValue() + "");
userAddInfo.set(IUserAddress.MOBILE, mobile.getValue());
userAddInfo.set(IUserAddress.SIGNBUILDING, sign_building.getValue() + " ");
userAddInfo.set(IUserAddress.BESTTIME, best_time.getValue());
//insert a region bean to userAddressInof
userAddInfo.set(IUserAddress.REGION, district.getValue(district.getSelectedIndex()));
userAddInfo.set(IUserAddress.USER, userId);
order.setValues(contentPanel.getValues());
//insert a region bean to userAddressInof
order.set(IOrder.REGION, district.getValue(district.getSelectedIndex()));
}
else
{
Info.display("Error", "You should to write the correct Info");
}
return userAddInfo;
}
public void setUserId(String userId)
{
this.userId = userId;
}
public String getUserAddrStr()
{
return userAddrStr;
}
}