Subversion Repositories SmartDukaan

Rev

Rev 2526 | Rev 2588 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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

import in.shop2020.hotspot.dashbaord.client.event.AcceptOrderEvent;
import in.shop2020.hotspot.dashbaord.client.event.NostockOrderEvent;
import in.shop2020.hotspot.dashbaord.client.event.FlagOrderEvent;
import in.shop2020.hotspot.dashbaord.client.event.RequestPickupEvent;
import in.shop2020.hotspot.dashbaord.shared.actions.DetailsMask;
import in.shop2020.hotspot.dashbaord.shared.actions.Order;

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

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
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.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ResizeComposite;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;

public class OrderDetails extends ResizeComposite{
        
        public interface Listener{
                void onClick();
        }
        
        interface OrderDetailsUiBinder extends UiBinder<Widget, OrderDetails>{ }
        
        interface SelectionStyle extends CssResource{
                String blueLabel();
                String greenLabel();
        }

        private static final OrderDetailsUiBinder binder = GWT.create(OrderDetailsUiBinder.class);
        
        @UiField FlexTable header;
        @UiField FlexTable table;
        @UiField HorizontalPanel orderDetails;
        @UiField VerticalPanel orderDetails1;
        @UiField VerticalPanel orderDetails2;
        @UiField VerticalPanel orderDetails3;
        @UiField VerticalPanel orderDetails4;
        @UiField VerticalPanel orderDetails5;
        @UiField SelectionStyle selectionStyle;
        
        
        private final EventBus eventbus;
        private Order order;
        private Order transaction;
        
        //Buttons for the Warehouse Executive 
        private Button acceptOrder = new Button();
        private Button rejectOrder = new Button();
        private Button notAvailable= new Button();
        private Button addBillingInfo= new Button();
        private Button printInvoice = new Button();
        private Button acceptDOA = new Button();
        private Button validateDOA = new Button();
        
        //Buttons for the Admin
        private Button flagOrder = new Button();
        private Button requestPickup = new Button();
        private Button authorizePickup = new Button();
        private Button refundOrder = new Button();
        private Button reshipOrder = new Button();      
        
        private String user;
        private DetailsMask mask;
        private long warehouseID;
        private boolean isAdmin;
        
        public OrderDetails(EventBus eventbus, Order order, Order order2, DetailsMask mask, String user, long warehouseID, boolean isAdmin){
                this.eventbus = eventbus;
                this.order = order;
                this.transaction = order2;
                this.mask = mask;
                this.user = user;
                this.warehouseID = warehouseID;
                this.isAdmin = isAdmin;
                
                initWidget(binder.createAndBindUi(this));
                initTableForWE();
                if(this.isAdmin){
                        initTableForAdmin();
                }
                loadOrderDetails();
        }
        
        private void initTableForWE() {
                header.getColumnFormatter().setWidth(0, "128px");
            header.getColumnFormatter().setWidth(1, "128px");
            header.getColumnFormatter().setWidth(2, "128px");
            header.getColumnFormatter().setWidth(3, "128px");
            header.getColumnFormatter().setWidth(4, "128px");
            header.getColumnFormatter().setWidth(5, "128px");
            header.getColumnFormatter().setWidth(6, "256px");
            
            acceptOrder.setText("Accept");
            notAvailable.setText("Out Of Stock");
            addBillingInfo.setText("Bill");
            printInvoice.setText("Print Invoice");
            acceptDOA.setText("Accept DOA");
            validateDOA.setText("Validate DOA");
            
            header.setWidget(0, 0, acceptOrder);
            header.setWidget(0, 1, notAvailable);
            header.setWidget(0, 2, addBillingInfo);
            header.setWidget(0, 3, printInvoice);
            header.setWidget(0, 4, acceptDOA);
            header.setWidget(0, 5, validateDOA);
            
            registerButtonHandlersForWE();
                implementMaskForWE();
        }
        
        private void registerButtonHandlersForWE(){
                acceptOrder.addClickHandler(new ClickHandler() {
                        
                        @Override
                        public void onClick(ClickEvent event) {
                                if(acceptOrder.isEnabled())
                                        eventbus.fireEvent(new AcceptOrderEvent(order));
                        }
                });

                notAvailable.addClickHandler(new ClickHandler() {
                        
                        @Override
                        public void onClick(ClickEvent event) {
                                if(notAvailable.isEnabled())
                                        eventbus.fireEvent(new NostockOrderEvent(order));
                        }
                });

                addBillingInfo.addClickHandler(new ClickHandler() {
                        
                        @Override
                        public void onClick(ClickEvent event) {
                                if(!addBillingInfo.isEnabled())
                                        return;
                                BillingInfoBox box = new BillingInfoBox(eventbus, order, user);
                                box.center();                           
                        }
                });

                printInvoice.addClickHandler(new ClickHandler() {
                        
                        @Override
                        public void onClick(ClickEvent event) {
                                if(!printInvoice.isEnabled())
                                        return;
                                if(order.getJacketNumber()==0){
                                        JacketInfoBox box = new JacketInfoBox(eventbus, order);
                                        //box.clean();
                                        box.center();
                                }else{
                                        String invoiceGenerationUrl = "http://" + Window.Location.getHost() + "/Support/invoice/";
                                        invoiceGenerationUrl = invoiceGenerationUrl + order.getOrderId();
                                        Window.open(invoiceGenerationUrl, "newWindowName", "window features.");
                                }
                        }
                });
        }

        private void implementMaskForWE(){
                switch(mask){
                case NEW:
                        maskButtonsForWE(true, true, true, false, false, false, false);
                        break;
                case ACCEPT:
                        maskButtonsForWE(false, false, false, false, true, false, false);
                        break;
                case REJECT:
                        maskButtonsForWE(false, false, false, false, false, false, false);
                        break;
                case BILL:
                        maskButtonsForWE(false, false, false, true, false, false, false);
                        break;
                case SHIP:
                        maskButtonsForWE(false, false, false, false, false, false, false);
                        break;
                case NO_STOCK:
                        maskButtonsForWE(true, true, false, false, false, false, false);
                        break;
                case DOA_AWAITED:
                        maskButtonsForWE(false, false, false, false, false, true, false);
                        break;
                case DOA_RETURNED:
                        maskButtonsForWE(false, false, false, false, false, false, true);
                        break;
                default:
                        maskButtonsForWE(false, false, false, false, false, false, false); //Unknown state, let's disallow any untoward actions.
                        break;
                }
        }
        
        private void maskButtonsForWE(boolean accept, boolean reject, boolean notavailable, boolean printInv, boolean billing, boolean acceptdoa, boolean validatedoa){
                acceptOrder.setEnabled(accept);
                notAvailable.setEnabled(notavailable);
                printInvoice.setEnabled(printInv);
                addBillingInfo.setEnabled(billing);
                acceptDOA.setEnabled(acceptdoa);
                validateDOA.setEnabled(validatedoa);
                rejectOrder.setEnabled(reject);
        }

        private void initTableForAdmin() {
                header.getColumnFormatter().setWidth(0, "128px");
            header.getColumnFormatter().setWidth(1, "128px");
            header.getColumnFormatter().setWidth(2, "128px");
            header.getColumnFormatter().setWidth(3, "128px");
            header.getColumnFormatter().setWidth(4, "128px");
            header.getColumnFormatter().setWidth(5, "128px");
            header.getColumnFormatter().setWidth(6, "256px");
            
            if(transaction.isDoaFlag()){
                flagOrder.setText("Unflag");
            } else {
                flagOrder.setText("Flag");
            }
            
            requestPickup.setText("Request Pick-up No");
            authorizePickup.setText("Authorize Pick-up");
            reshipOrder.setText("Reship");
            refundOrder.setText("Refund");
            
            header.setWidget(1, 0, flagOrder);
            header.setWidget(1, 1, requestPickup);
            header.setWidget(1, 2, authorizePickup);
            header.setWidget(1, 3, reshipOrder);
            header.setWidget(1, 6, refundOrder);
            
            registerButtonHandlersForAdmin();
                implementMaskForAdmin();
        }
        
        private void registerButtonHandlersForAdmin(){
                flagOrder.addClickHandler(new ClickHandler() {
                        
                        @Override
                        public void onClick(ClickEvent event) {
                                if(flagOrder.isEnabled()){
                                        eventbus.fireEvent(new FlagOrderEvent(order));
                                }
                        }
                });
                
                requestPickup.addClickHandler(new ClickHandler() {
                        
                        @Override
                        public void onClick(ClickEvent event) {
                                if(requestPickup.isEnabled()){
                                        GWT.log("Raising a pickup request for: " + order.getOrderId());
                                        eventbus.fireEvent(new RequestPickupEvent(order));
                                }
                        }
                });
                
                authorizePickup.addClickHandler(new ClickHandler() {
                        
                        @Override
                        public void onClick(ClickEvent event) {
                                if(!authorizePickup.isEnabled())
                                        return;
                                PickupAuthorizationInfoBox box = new PickupAuthorizationInfoBox(eventbus, order);
                                box.center();
                        }
                });
                
                refundOrder.addClickHandler(new ClickHandler() {
                        
                        @Override
                        public void onClick(ClickEvent event) {
                                if(rejectOrder.isEnabled()){
                                        RejectReasonBox box = new RejectReasonBox(eventbus, order);
                                        //box.clear();
                                        box.center();   
                                }
                        }
                });
        }
        
        private void implementMaskForAdmin(){
                switch(mask){
                case NO_STOCK:
                        maskButtonsForAdmin(false, false, false, false, true);
                        break;
                case DELIVERED:
                        maskButtonsForAdmin(true, true, false, false, false);   //Allow the OM to flag and request pickup.
                        break;
                case DOA_PICKUP_REQUESTED:
                        maskButtonsForAdmin(true, true, true, false, false);    //Allow the OM to either re-request a pickup no. or authorize pickup by entering one
                        break;
                case SALES_RETURNED:
                        maskButtonsForAdmin(false, false, false, true, true);   //Allow the OM to either reship the order or refund it
                        break;
                default:
                        maskButtonsForAdmin(false, false, false, false, false); //Unknown state. Let's not allow any untoward actions.
                        break;
                }
        }
        
        private void maskButtonsForAdmin(boolean flag, boolean reqPickup, boolean authPickup, boolean reship, boolean refund){
                flagOrder.setEnabled(flag);
                requestPickup.setEnabled(reqPickup);
                authorizePickup.setEnabled(authPickup);
                reshipOrder.setEnabled(reship);
                refundOrder.setEnabled(refund);
        }
        
        private void loadOrderDetails(){
                orderDetails1.add(getHorizontalPanel("PRODUCT GROUP: ", transaction.getProductGroup()));
                orderDetails1.add(getHorizontalPanel("BRAND:         ", transaction.getBrand()));
                orderDetails1.add(getHorizontalPanel("MODEL:         ", getModelDisplayName(transaction)));
                orderDetails1.add(getHorizontalPanel("Item ID:       ", transaction.getItemId()+""));
                orderDetails1.add(getHorizontalPanel("EXTRA INFO:    ", transaction.getExtraInfo()));
                
                orderDetails2.add(getHorizontalPanel("NAME:          ", transaction.getCustomerName()));
                orderDetails2.add(getHorizontalPanel("ADDRESS:       ", getDisplayAddress(transaction)));
                orderDetails2.add(getHorizontalPanel("MOBILE NUMBER: ", transaction.getCustomerMobileNumber()));
                
                orderDetails3.add(getHorizontalPanel("TOTAL WEIGHT:      ", transaction.getTotalWeight()+""));
                orderDetails3.add(getHorizontalPanel("TOTAL AMOUNT(Rs):  ", transaction.getTotalAmount()+""));
                
                orderDetails4.add(getHorizontalPanel("AIRWAY BILL NO:  ", transaction.getAirwayBillNo()));
                orderDetails4.add(getHorizontalPanel("INVOICE NUMBER:  ", transaction.getInvoiceNumber()));
                orderDetails4.add(getHorizontalPanel("JACKET NUMBER:   ", transaction.getJacketNumber() + ""));
                orderDetails4.add(getHorizontalPanel("BILLED BY:       ", transaction.getBilledBy()));          
        }

        private HorizontalPanel getHorizontalPanel(String labelText, String valueText) {
                HorizontalPanel hpanel = new HorizontalPanel();
                hpanel.setSpacing(5);
                hpanel.add(new Label(labelText));
                hpanel.add(new Label(valueText));
                hpanel.setCellWidth(hpanel.getWidget(0), "128px");
                hpanel.setCellWidth(hpanel.getWidget(1), "128px");
                hpanel.getWidget(0).setStyleName(selectionStyle.blueLabel());
                hpanel.getWidget(1).setStyleName(selectionStyle.greenLabel());
                return hpanel;
        }
        
        private String getModelDisplayName(Order order){
                String modelName = "";
                if(order.getModelName()!=null)
                        modelName = order.getModelName() + " ";
                if(order.getModelNumber()!=null)
                        modelName = modelName + order.getModelNumber();
                if(order.getColor()!=null)
                        modelName = modelName + " (" + order.getColor() + ")";
                return modelName;
        }
        
        private String getDisplayAddress(Order order){
                StringBuilder displayAddress = new StringBuilder();
                displayAddress.append(order.getCustomerAddress1() + "\n");
                displayAddress.append(order.getCustomerAddress2() + "\n");
                displayAddress.append(order.getCustomerCity() + "\n");
                displayAddress.append(order.getCustomerState() + "   PIN - " +  order.getCustomerPincode());
                return displayAddress.toString();
        }
}