Subversion Repositories SmartDukaan

Rev

Rev 19060 | Blame | Compare with Previous | Last modification | View Log | RSS feed

package in.shop2020.hotspot.dashbaord.client.inbox;

import in.shop2020.hotspot.dashbaord.client.event.LoadOrderDetailsEvent;
import in.shop2020.hotspot.dashbaord.client.event.LoadOrderListEvent;
import in.shop2020.hotspot.dashbaord.shared.actions.OrderAlert;
import in.shop2020.hotspot.dashbaord.shared.actions.Order;
import in.shop2020.hotspot.dashbaord.shared.actions.OrderType;

import java.util.Date;
import java.util.List;

import org.enunes.gwt.mvp.client.EventBus;

import com.google.gwt.cell.client.CheckboxCell;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.cellview.client.Column;
import com.google.gwt.user.cellview.client.DataGrid;
import com.google.gwt.user.cellview.client.RowStyles;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.TextColumn;
import com.google.gwt.user.client.ui.ResizeComposite;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.view.client.AsyncDataProvider;
import com.google.gwt.view.client.HasData;
import com.google.gwt.view.client.Range;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SingleSelectionModel;

public class OrderList extends ResizeComposite {
        
        interface OrderListUiBinder extends UiBinder<Widget, OrderList>{}
        
        interface SelectionStyle extends CssResource {
                String selectedRow();
                String fatalRow();
                String criticalRow();
                String badInventory();
                String todayShippingInStockRow();
                String todayShippingNotInStockRow();
                String laterShippingRow();
        }
        //add gin here
        private static final OrderListUiBinder binder = GWT.create(OrderListUiBinder.class);
        
        @UiField DataGrid<Order> table;
    // Create paging controls.
    @UiField SimplePager pager = new SimplePager();
        @UiField SelectionStyle selectionStyle;
        

        Column<Order, Boolean> checkboxColumn = new Column<Order, Boolean>(new CheckboxCell(true, false)) {
                @Override
                public Boolean getValue(Order order) {
                        return table.getSelectionModel().isSelected(order);
                }
        };
    
        private TextColumn<Order> transactionIdColumn = new TextColumn<Order>() {
        @Override
        public String getValue(Order order) {
                return "" + order.getTransactionId();
        }
    };
    
    private TextColumn<Order> promisedShippingDateColumn = new TextColumn<Order>() {
        @Override
        public String getValue(Order order) {
            return getDisplayableDate(new Date(order.getPromisedShippingTime()))+"";
        }
    };
    
    private TextColumn<Order> paymentModeColumn = new TextColumn<Order>() {
        @Override
        public String getValue(Order order) {
            return order.isCod() ? "COD" : "Prepaid";
        }
    };
    
    private TextColumn<Order> orderFromColumn = new TextColumn<Order>() {
        @Override
        public String getValue(Order order) {
            return order.getSource();
        }
    };
    
    private TextColumn<Order> idColumn = new TextColumn<Order>() {
        @Override
        public String getValue(Order order) {
            return "" + order.getOrderId();
        }
    };
    
    private TextColumn<Order> productDescriptionColumn = new TextColumn<Order>() {
        @Override
        public String getValue(Order order) {
                StringBuilder productDescription = new StringBuilder(order.getProductGroup());
                        if(order.getBrand()!=null)
                                productDescription.append(" " + order.getBrand());
                        if(order.getModelNumber()!=null)
                                productDescription.append(" " + order.getModelNumber());
                        if(order.getModelName()!=null)
                                productDescription.append(" " + order.getModelName());
                        if(order.getColor()!=null)
                                productDescription.append(" " + order.getColor());              
                        if(order.getDealText()!=null)
                                        productDescription.append(" (" + order.getDealText() + ")");
                        if(order.getQuantity() > 1)
                                productDescription.append(" (" + order.getQuantity() + ")");
            return productDescription.toString();
        }
    };
    
    private TextColumn<Order> creationDateColumn = new TextColumn<Order>() {
        @Override
        public String getValue(Order order) {
            return getDisplayableDate(new Date(order.getCreatedOn()))+"";
        }
    };
    
//    private TextColumn<Order> promisedDeliveryDateColumn = new TextColumn<Order>() {
//        @Override
//        public String getValue(Order order) {
//            return getDisplayableDate(new Date(order.getPromisedDeliveryTime()))+"";
//        }
//    };
//    
//    private TextColumn<Order> expectedDeliveryDateColumn = new TextColumn<Order>() {
//        @Override
//        public String getValue(Order order) {
//            return getDisplayableDate(new Date(order.getExpectedDeliveryTime()))+"";
//        }
//    };
    
    private TextColumn<Order> statusMessageColumn = new TextColumn<Order>() {
        @Override
        public String getValue(Order order) {
            return order.getStatusMessage();
        }
    };
    
    AsyncDataProvider<Order> asyncDataProvider = new AsyncDataProvider<Order>() {

                @Override
                protected void onRangeChanged(HasData<Order> display) {
            Range range = display.getVisibleRange();
            int newStart = range.getStart();
                        // This is to prevent the recursive firing of onRangeChanged events.
                        // Every time fresh data is pushed into the DataProvider, this
                        // method is called. This, in turn, fires an event to refresh the
                        // data. If the start of the new range is same as that of the
                        // currently loaded data, there is no point in proceeding further.
            GWT.log(this + "Current start: " + start + ", New start:" + newStart);
            if(newStart == start)
                return;
            int limit = range.getLength();
            
            eventbus.fireEvent(new LoadOrderListEvent(orderType, newStart, limit));
                }
        
    };
    
        private final EventBus eventbus;
        private final OrderType orderType;
        private final List<Order> orders;
        private int count;
        private final int start;
        
        public OrderList(EventBus eventbus, OrderType orderType, List<Order> orders, int start, int count){
                this.orders = orders;
                this.eventbus = eventbus;
                this.orderType = orderType;
                this.start = start;
                this.count = count;
                initWidget(binder.createAndBindUi(this));
                initTable();
        }
        
        private void initTable(){
                
                //Add custom styles to show in case we want to alert the user
                table.setRowStyles(new RowStyles<Order>(){

                        @Override
                        public String getStyleNames(Order order, int rowIndex) {
                                if(order==null)
                                        return "";
                                OrderAlert alert = order.getAlert();
                                String style = "";
                            switch(alert){
                            case DELIVERY_TIME_EXCEEDED:
                            case SHIPPING_TIME_EXCEEDED:
                            case VERIFICATION_DELAYED_TOO_MUCH:
                            case ACCEPTANCE_DELAYED_TOO_MUCH:
                            case ORDER_NOT_CONNECTED_FOR_TOO_LONG:
                                style = selectionStyle.fatalRow();
                                break;
                            case ACCEPTANCE_DELAYED:
                            case VERIFICATION_DELAYED:
                            case ORDER_NOT_CONNECTED:
                                style = selectionStyle.criticalRow();
                            break;
                            case TODAY_SHIPPING_IN_STOCK:
                                style = selectionStyle.todayShippingInStockRow();
                                break;
                            case TODAY_SHIPPING_NOT_IN_STOCK:
                                style = selectionStyle.todayShippingNotInStockRow();
                                break;
                            case LATER_SHIPPING_IN_STOCK:
                                style = selectionStyle.laterShippingRow();
                                break;
                            case WARNING:
                            case NONE:
                            }
                            if(order.getProductCondition()==1) {
                                style = selectionStyle.badInventory();
                            }
                                return style;
                        }
                });
                
                  
              
        // Add the columns.
            table.addColumn(checkboxColumn,"");
        table.addColumn(promisedShippingDateColumn, "Promised Shipping");
        table.addColumn(transactionIdColumn, "Txn Id");
        table.addColumn(paymentModeColumn, "Type");
        table.addColumn(orderFromColumn, "Source");
        table.addColumn(idColumn, "Order Id");
        table.addColumn(productDescriptionColumn, "Product Description");
        table.addColumn(creationDateColumn, "Creation Date");
//        table.addColumn(promisedDeliveryDateColumn, "Promised Delivery");
//        table.addColumn(expectedDeliveryDateColumn, "Expected Delivery");
        table.addColumn(statusMessageColumn, "Current Status");

        //Set the widths
        table.setWidth("100%");
        table.setColumnWidth(checkboxColumn, 30, Unit.PX);
        table.setColumnWidth(promisedShippingDateColumn, 120.0, Unit.PX);
        table.setColumnWidth(transactionIdColumn, 70.0, Unit.PX);
        table.setColumnWidth(paymentModeColumn, 50.0, Unit.PX);
        table.setColumnWidth(idColumn, 70.0, Unit.PX);
        table.setColumnWidth(orderFromColumn, 70.0, Unit.PX);
        table.setColumnWidth(productDescriptionColumn, 230.0, Unit.PX);
        table.setColumnWidth(creationDateColumn, 120.0, Unit.PX);
//        table.setColumnWidth(promisedDeliveryDateColumn, 140.0, Unit.PX);
//        table.setColumnWidth(expectedDeliveryDateColumn, 140.0, Unit.PX);
        table.setColumnWidth(statusMessageColumn, 160.0, Unit.PX);
        
        table.setRowCount(count, true);
        table.setVisibleRange(start, orders.size());
                
        // Connect the table to the data provider.
        asyncDataProvider.addDataDisplay(table);
        
        //Add paging support
        pager.setDisplay(table);
        
        // Initialize the data
                asyncDataProvider.updateRowCount(count, true);
                asyncDataProvider.updateRowData(start, orders);
                
        // Add a selection model to handle item selection.
        final SingleSelectionModel<Order> selectionModel = new SingleSelectionModel<Order>();
        table.setSelectionModel(selectionModel);
        selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() {
            
            @Override
            public void onSelectionChange(SelectionChangeEvent event) {
                Order selectedOrder = selectionModel.getSelectedObject();
                eventbus.fireEvent(new LoadOrderDetailsEvent(selectedOrder));
            }
        });
    
        }
        
        private String getDisplayableDate(Date date){
                String dateString = date.toString();
                dateString = dateString.substring(0, dateString.lastIndexOf(" "));
                dateString = dateString.substring(0, dateString.lastIndexOf(" "));
                return dateString;              
        }
}