package com.jcommerce.gwt.client.panels.order;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.form.Radio;
import com.extjs.gxt.ui.client.widget.form.RadioGroup;
import com.extjs.gxt.ui.client.widget.form.TextField;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Window;
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.form.UserForm;
import com.jcommerce.gwt.client.model.IOrderInfo;
import com.jcommerce.gwt.client.model.IUser;
import com.jcommerce.gwt.client.panels.data.ImportPanel.State;
import com.jcommerce.gwt.client.resources.Resources;
import com.jcommerce.gwt.client.service.CreateService;
import com.jcommerce.gwt.client.service.ListService;
public class OrderUserPanel extends ContentWidget{
public interface Constants {
String OrderUser_title();
String OrderUser_anonymousUser();
String OrderUser_otherUser();
String OrderUser_search();
String OrderUser_next();
String OrderUser_cancel();
String OrderUser_admin();
String OrderUser_select();
String OrderUser_selectUser();
}
private static OrderUserPanel instance = null;
@Override
protected State getCurState() {
if (curState == null ) {
curState = new State();
}
return (State)curState;
}
@Override
public String getDescription() {
return "cwBasicTextDescription";
}
@Override
public String getName() {
return Resources.constants.OrderUser_title();
}
public static OrderUserPanel getInstance(){
if (instance == null) {
instance = new OrderUserPanel();
}
return instance;
}
public static class State extends PageState {
public static final String ID = "id";
public void setId(String id){
setValue(ID, id);
}
public String getId(){
return (String)getValue(ID);
}
@Override
public String getPageClassName() {
return OrderUserPanel.class.getName();
}
@Override
public String getMenuDisplayName() {
return Resources.constants.OrderUser_title();
}
}
private Radio rAnonymousUser = null;
private Radio rOtherUser = null;
private RadioGroup rgroup = null;
private TextField<String> searchCondition = null;
private static final String SEARCH_FIELD_NAME = "searchCondition";
private Button search = null;
private ComboBox<UserForm> cbUser = null;
private ListBox lbUser = null;
private Button next = null;
private Button cancel = null;
@Override
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
VerticalPanel vp = new VerticalPanel();
vp.setSpacing(10);
rAnonymousUser = new Radio();
rAnonymousUser.setName("user");
rAnonymousUser.setBoxLabel(Resources.constants.OrderUser_anonymousUser());
vp.add(rAnonymousUser);
HorizontalPanel hp = new HorizontalPanel();
rOtherUser = new Radio();
rOtherUser.setName("user");
rOtherUser.setBoxLabel(Resources.constants.OrderUser_selectUser());
hp.add(rOtherUser);
rgroup = new RadioGroup();
rgroup.add(rAnonymousUser);
rgroup.add(rOtherUser);
rgroup.setValue(rAnonymousUser);
// searchCondition = new TextField<String>();
// searchCondition.setName(SEARCH_FIELD_NAME);
// hp.add(searchCondition);
//
// search = new Button();
// search.setText(Resources.constants.OrderUser_search());
// hp.add(search);
//
// cbUser = new ComboBox<UserForm>();
// ListStore<UserForm> store = new ListStore<UserForm>();
// cbUser.setStore(store);
//
// hp.add(cbUser);
lbUser = new ListBox();
hp.add(lbUser);
vp.add(hp);
super.add(vp);
HorizontalPanel hpButton = new HorizontalPanel();
hpButton.setHorizontalAlign(HorizontalAlignment.CENTER);
hpButton.setSpacing(10);
hpButton.setWidth("100%");
next = new Button();
next.setText(Resources.constants.OrderUser_next());
next.addSelectionListener(new SelectionListener<ButtonEvent>(){
@Override
public void componentSelected(ButtonEvent ce) {
createNewOrder();
}});
hpButton.add(next);
cancel = new Button();
cancel.setText(Resources.constants.OrderUser_cancel());
cancel.addSelectionListener(new SelectionListener<ButtonEvent>(){
@Override
public void componentSelected(ButtonEvent ce) {
gotoOrderList();
}});
hpButton.add(cancel);
super.add(hpButton);
}
@Override
public void refresh() {
lbUser.clear();
lbUser.addItem(Resources.constants.OrderUser_select(), "0");
new ListService().listBeans(ModelNames.USER, new ListService.Listener() {
public void onSuccess(List<BeanObject> beans) {
for(BeanObject bean : beans) {
lbUser.addItem((String)bean.get(IUser.NAME), (String)bean.get(IUser.ID));
}
}
});
}
private void createNewOrder(){
Map<String, Object> props = new HashMap<String, Object>();
props.put(IOrderInfo.ID, null);
props.put(IOrderInfo.ORDER_STATUS, IOrderInfo.OS_INVALID);
props.put(IOrderInfo.SHIPPING_STATUS, IOrderInfo.SS_UNSHIPPED);
props.put(IOrderInfo.PAY_STATUS, IOrderInfo.PS_UNPAYED);
props.put(IOrderInfo.REFERER, Resources.constants.OrderUser_admin());
if(rOtherUser.equals(rgroup.getValue())) {
if(lbUser.getSelectedIndex() == 0) {
Window.alert(Resources.constants.OrderUser_selectUser());
}
else {
props.put(IOrderInfo.USER_ID, lbUser.getValue(lbUser.getSelectedIndex()));
BeanObject form = new BeanObject(ModelNames.ORDER, props);
new CreateService().createOrder(form, new CreateService.Listener(){
public void onSuccess(String id) {
OrderGoodsPanel.State newState = new OrderGoodsPanel.State();
newState.setId(id);
newState.setUserId(lbUser.getValue(lbUser.getSelectedIndex()));
newState.setIsEdit(false);
newState.execute();
}
});
}
}
else {
BeanObject form = new BeanObject(ModelNames.ORDER, props);
new CreateService().createOrder(form, new CreateService.Listener(){
public void onSuccess(String id) {
OrderGoodsPanel.State newState = new OrderGoodsPanel.State();
newState.setId(id);
newState.setIsEdit(false);
newState.execute();
}
});
}
}
private void gotoOrderList(){
OrderListPanel.State newState = new OrderListPanel.State();
newState.execute();
}
}