package com.jcommerce.gwt.client.panels.order;
import java.util.Iterator;
import java.util.List;
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.MessageBoxEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.HorizontalPanel;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.extjs.gxt.ui.client.widget.button.Button;
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.i18n.client.Messages;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
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.IAdminUser;
import com.jcommerce.gwt.client.model.IAreaRegion;
import com.jcommerce.gwt.client.model.IGoods;
import com.jcommerce.gwt.client.model.IOrderGoods;
import com.jcommerce.gwt.client.model.IOrderInfo;
import com.jcommerce.gwt.client.model.IPayment;
import com.jcommerce.gwt.client.model.IShipping;
import com.jcommerce.gwt.client.model.IShippingArea;
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.CreateService;
import com.jcommerce.gwt.client.service.Criteria;
import com.jcommerce.gwt.client.service.DeleteService;
import com.jcommerce.gwt.client.service.ListService;
import com.jcommerce.gwt.client.service.ReadService;
import com.jcommerce.gwt.client.service.RemoteService;
import com.jcommerce.gwt.client.service.UpdateService;
import com.jcommerce.gwt.client.service.WaitService;
public class MergeOrderPanel extends ContentWidget {
public static interface Constants {
String MergeOrder_confirmMerge();
String MergeOrder_mainOrder();
String MergeOrder_merge();
String MergeOrder_select();
String MergeOrder_selectOrder();
String MergeOrder_subOrder();
String MergeOrder_title();
String MergeOrder_differentUsers();
String MergeOrder_sameOrder();
String MergeOrder_success();
String MergeOrder_fail();
}
public interface MergeOrderMessage extends Messages {
String MergeOrder_wrongOrder(String orderSn);
}
public static class State extends PageState {
public String getPageClassName() {
return MergeOrderPanel.class.getName();
}
public String getMenuDisplayName() {
return Resources.constants.MergeOrder_title();
}
}
private static final boolean instanceOf = false;
public State getCurState() {
return (State)curState;
}
private static MergeOrderPanel instance;
private MergeOrderPanel() {
super();
curState = new State();
}
public static MergeOrderPanel getInstance(){
if(instance == null) {
instance = new MergeOrderPanel();
}
return instance;
}
ListBox mainOrderList = new ListBox();
ListBox subOrderList = new ListBox();
TextField<String> mainOrderField = new TextField<String>();
TextField<String> subOrderField = new TextField<String>();
BeanObject mainOrder = null;
BeanObject subOrder = null;
protected void onRender(Element parent, int index) {
super.onRender(parent, index);
HorizontalPanel mainOrderPanel = new HorizontalPanel();
mainOrderPanel.setHorizontalAlign(HorizontalAlignment.CENTER);
Label mainOrderLabel = new Label(Resources.constants.MergeOrder_mainOrder() + ":");
mainOrderLabel.setWidth("70");
mainOrderPanel.add(mainOrderLabel);
mainOrderPanel.add(mainOrderField);
mainOrderPanel.add(mainOrderList);
mainOrderList.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
if(mainOrderList.getSelectedIndex() > 0)
mainOrderField.setValue(mainOrderList.getValue(mainOrderList.getSelectedIndex()));
}
});
add(mainOrderPanel);
HorizontalPanel subOrderPanel = new HorizontalPanel();
subOrderPanel.setHorizontalAlign(HorizontalAlignment.CENTER);
Label subOrderLabel = new Label(Resources.constants.MergeOrder_subOrder() + ":");
subOrderLabel.setWidth("70");
subOrderPanel.add(subOrderLabel);
subOrderPanel.add(subOrderField);
subOrderPanel.add(subOrderList);
subOrderList.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
if(subOrderList.getSelectedIndex() > 0)
subOrderField.setValue(subOrderList.getValue(subOrderList.getSelectedIndex()));
}
});
add(subOrderPanel);
HorizontalPanel buttonPanel = new HorizontalPanel();
buttonPanel.setHorizontalAlign(HorizontalAlignment.CENTER);
Button btnSearch = new Button(Resources.constants.MergeOrder_merge());
buttonPanel.add(btnSearch);
btnSearch.addSelectionListener(new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
MessageBox.confirm(Resources.constants.MergeOrder_confirmMerge(), Resources.constants.MergeOrder_confirmMerge(), new com.extjs.gxt.ui.client.event.Listener<MessageBoxEvent>() {
public void handleEvent(MessageBoxEvent ce) {
Button btn = ce.getButtonClicked();
if ( btn.getItemId().equals("yes")){
merge();
}
}
});
}
});
add(buttonPanel);
}
protected void merge() {
if(getOrder()) {
new WaitService(new WaitService.Job() {
public boolean isReady() {
if(isReady < 2) {
return false;
}
else {
isReady = 0;
return true;
}
}
public void run() {
if(mainOrder == null) {
Window.alert(Resources.messages.MergeOrder_wrongOrder(mainOrderField.getValue()));
}
else if(subOrder == null) {
Window.alert(Resources.messages.MergeOrder_wrongOrder(subOrderField.getValue()));
}
else {
String mainOrderUser = mainOrder.get(IOrderInfo.USER_ID);
String subOrderUser = subOrder.get(IOrderInfo.USER_ID);
if(!mainOrderUser.equals(subOrderUser))
Window.alert(Resources.constants.MergeOrder_differentUsers());
else
mergeOrder();
}
}
});
}
}
String shippingCodFee = null;
List<String> regionIdList;
//合并订单
protected void mergeOrder() {
new RemoteService().getSpecialService().mergeOrder((String)subOrder.get(IOrderInfo.ID), (String)mainOrder.get(IOrderInfo.ID), new AsyncCallback<Boolean>(){
public void onFailure(Throwable caught) {
}
public void onSuccess(Boolean result) {
if(result) {
Window.alert(Resources.constants.MergeOrder_success());
refresh();
}
else {
Window.alert(Resources.constants.MergeOrder_fail());
refresh();
}
}
});
}
int isReady = 0;
private boolean getOrder() {
mainOrder = null;
subOrder = null;
String mainOrderSN = mainOrderField.getValue();
String subOrderSN = subOrderField.getValue();
if(mainOrderSN == null || subOrderSN == null) {
Window.alert(Resources.constants.MergeOrder_selectOrder());
return false;
}
else if(mainOrderSN.equals(subOrderSN)) {
Window.alert(Resources.constants.MergeOrder_sameOrder());
return false;
}
else {
Criteria criteria = new Criteria();
criteria.addCondition(new Condition(IOrderInfo.ORDER_SN, Condition.EQUALS, mainOrderSN));
new ListService().listBeans(ModelNames.ORDER, criteria, new ListService.Listener() {
public void onSuccess(List<BeanObject> beans) {
for(Iterator<BeanObject> it = beans.iterator(); it.hasNext();) {
BeanObject order = it.next();
mainOrder = order;
}
isReady++;
}
});
criteria.removeAll();
criteria.addCondition(new Condition(IOrderInfo.ORDER_SN, Condition.EQUALS, subOrderSN));
new ListService().listBeans(ModelNames.ORDER, criteria, new ListService.Listener() {
public void onSuccess(List<BeanObject> beans) {
for(Iterator<BeanObject> it = beans.iterator(); it.hasNext();) {
BeanObject order = it.next();
subOrder = order;
}
isReady++;
}
});
return true;
}
}
public void refresh() {
//获得可合并订单,可合并订单的条件,未付款&&未配送&&(未确认||已确认)
Criteria criteria = new Criteria();
Condition unPayed = new Condition(IOrderInfo.PAY_STATUS, Condition.EQUALS, "0");
Condition unShipped = new Condition(IOrderInfo.SHIPPING_STATUS, Condition.EQUALS, "0");
Condition unConfirmed = new Condition(IOrderInfo.ORDER_STATUS, Condition.EQUALS, "0");
Condition confirmed = new Condition(IOrderInfo.ORDER_STATUS, Condition.EQUALS, "1");
criteria.addCondition(unPayed);
criteria.addCondition(unShipped);
criteria.addCondition(confirmed);
mainOrderList.clear();
subOrderList.clear();
mainOrderList.addItem(Resources.constants.MergeOrder_select(), "0");
subOrderList.addItem(Resources.constants.MergeOrder_select(), "0");
mainOrderField.clear();
subOrderField.clear();
populateOrderList(criteria);
criteria.removeCondition(confirmed);
criteria.addCondition(unConfirmed);
populateOrderList(criteria);
}
private void populateOrderList(Criteria criteria) {
new ListService().listBeans(ModelNames.ORDER, criteria,
new ListService.Listener() {
public synchronized void onSuccess(List<BeanObject> result) {
for (Iterator<BeanObject> it = result.iterator(); it.hasNext();) {
final BeanObject order = it.next();
String userId = order.getString(IOrderInfo.USER_ID);
new ReadService().getBean(ModelNames.USER, userId, new ReadService.Listener() {
public void onSuccess(BeanObject bean) {
mainOrderList.addItem(order.getString(IOrderInfo.ORDER_SN) + "[" + bean.get(IUser.NAME) + "]",
order.getString(IOrderInfo.ORDER_SN));
subOrderList.addItem(order.getString(IOrderInfo.ORDER_SN) + "[" + bean.get(IUser.NAME) + "]",
order.getString(IOrderInfo.ORDER_SN));
}
});
}
}
});
}
@Override
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.MergeOrder_title();
}
}