Subversion Repositories SmartDukaan

Rev

Rev 2126 | Rev 2427 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2105 ankur.sing 1
package in.shop2020.catalog.dashboard.client;
2
 
2126 ankur.sing 3
import in.shop2020.catalog.dashboard.shared.Item;
4
import in.shop2020.catalog.dashboard.shared.Utils;
5
 
2105 ankur.sing 6
import com.google.gwt.core.client.GWT;
7
import com.google.gwt.event.dom.client.ClickEvent;
2359 ankur.sing 8
import com.google.gwt.event.dom.client.ClickHandler;
2105 ankur.sing 9
import com.google.gwt.uibinder.client.UiBinder;
10
import com.google.gwt.uibinder.client.UiField;
11
import com.google.gwt.uibinder.client.UiHandler;
2126 ankur.sing 12
import com.google.gwt.user.client.Window;
13
import com.google.gwt.user.client.rpc.AsyncCallback;
2105 ankur.sing 14
import com.google.gwt.user.client.ui.Button;
2359 ankur.sing 15
import com.google.gwt.user.client.ui.DialogBox;
16
import com.google.gwt.user.client.ui.HorizontalPanel;
17
import com.google.gwt.user.client.ui.RadioButton;
2105 ankur.sing 18
import com.google.gwt.user.client.ui.ResizeComposite;
2359 ankur.sing 19
import com.google.gwt.user.client.ui.VerticalPanel;
2105 ankur.sing 20
import com.google.gwt.user.client.ui.Widget;
21
 
22
public class ItemActions extends ResizeComposite{
23
 
24
    interface ItemActionsUiBinder extends UiBinder<Widget, ItemActions> {}
25
    private static ItemActionsUiBinder uiBinder = GWT.create(ItemActionsUiBinder.class);
2126 ankur.sing 26
    private final CatalogServiceAsync catalogService = GWT.create(CatalogService.class);
2105 ankur.sing 27
 
2126 ankur.sing 28
    private ItemDetails itemDetails;
2105 ankur.sing 29
 
2359 ankur.sing 30
    @UiField Button addItem, updateItem, pushItemToProd, phaseoutItem, activateItem, markAliveItem, pauseItem;
31
    @UiField Button markRisky, unmarkRisky;
32
    @UiField Button generateMasterSheet;
2105 ankur.sing 33
 
34
    public ItemActions(){
35
        initWidget(uiBinder.createAndBindUi(this));
36
    }
37
 
2126 ankur.sing 38
    @UiHandler("updateItem")
39
    void updateItem(ClickEvent event) {
40
        itemDetails.updateItem();
41
    }
42
 
2105 ankur.sing 43
    @UiHandler("addItem")
44
    void addItem(ClickEvent event) {
2126 ankur.sing 45
        ItemForm itemForm = new ItemForm();
46
        itemForm.center();
47
        itemForm.show();
2105 ankur.sing 48
    }
49
 
50
    @UiHandler("phaseoutItem")
51
    void phaseoutItem(ClickEvent event) {
2126 ankur.sing 52
        final long itemId = validateStatusChange(Utils.PHASED_OUT);
53
        if(itemId <= 0) {
54
            return;
55
        }
56
        catalogService.phaseoutItem(itemId, new AsyncCallback<Void>() {
57
            @Override
58
            public void onSuccess(Void result) {
59
                Window.alert("Item marked as PHASED OUT");
60
            }
61
            @Override
62
            public void onFailure(Throwable caught) {
63
                Window.alert("Error while marking item " + itemId + " PHASED OUT");
64
            }
65
        });
2105 ankur.sing 66
    }
67
 
68
    @UiHandler("activateItem")
69
    void activateItem(ClickEvent event) {
2126 ankur.sing 70
        final long itemId = validateStatusChange(Utils.ACTIVE);
71
        if(itemId <= 0) {
72
            return;
73
        }
74
        catalogService.activateItem(itemId, new AsyncCallback<Void>() {
75
            @Override
76
            public void onSuccess(Void result) {
77
                Window.alert("Item marked as ACTIVE");
78
            }
79
            @Override
80
            public void onFailure(Throwable caught) {
81
                Window.alert("Error while marking item " + itemId + " ACTIVE");
82
            }
83
        });
2105 ankur.sing 84
    }
85
 
2126 ankur.sing 86
    @UiHandler("pauseItem")
87
    void pauseItem(ClickEvent event) {
88
        final long itemId = validateStatusChange(Utils.PAUSED);
89
        if(itemId <= 0) {
90
            return;
91
        }
92
        catalogService.pauseItem(itemId, new AsyncCallback<Void>() {
93
            @Override
94
            public void onSuccess(Void result) {
95
                Window.alert("Item marked as PAUSED");
96
            }
97
            @Override
98
            public void onFailure(Throwable caught) {
99
                Window.alert("Error while marking item " + itemId + " PAUSED");
100
            }
101
        });
2105 ankur.sing 102
    }
2126 ankur.sing 103
 
104
    @UiHandler("markAliveItem")
105
    void markAsAlive(ClickEvent event) {
106
        final long itemId = validateStatusChange(Utils.IN_PROCESS);
107
        if(itemId <= 0) {
108
            return;
109
        }
110
        catalogService.markInProcess(itemId, new AsyncCallback<Void>() {
111
            @Override
112
            public void onSuccess(Void result) {
113
                Window.alert("Item marked as IN PROCESS");
114
            }
115
            @Override
116
            public void onFailure(Throwable caught) {
117
                Window.alert("Error while marking item " + itemId + " IN PROCESS");
118
            }
119
        });
2105 ankur.sing 120
    }
2126 ankur.sing 121
 
2359 ankur.sing 122
    @UiHandler("pushItemToProd")
123
    void pushItemToProduction(ClickEvent event) {
124
        if(itemDetails.getItem() == null) {
125
            Window.alert("Please select an item to update");
126
            return;
127
        }
128
        AuthenticateDialog authDialog = new AuthenticateDialog(itemDetails.getItem());
129
        authDialog.show();
130
    }
131
 
132
    @UiHandler("markRisky")
133
    void markRisky(ClickEvent event) {
134
        changeRiskyFlag(true);
135
    }
136
 
137
    @UiHandler("unmarkRisky")
138
    void unmarkRisky(ClickEvent event) {
139
        changeRiskyFlag(false);
140
    }
141
 
142
    @UiHandler("generateMasterSheet")
143
    void generateMasterSheet(ClickEvent event)  {
144
        createDialog();
145
    }
146
 
147
    private void createDialog() {
148
        VerticalPanel vp = new VerticalPanel();
149
        final DialogBox db = new DialogBox();
150
        db.setText("Master Sheet Download");
151
        final RadioButton handsetsRB = new RadioButton("vendorCategory", "Handsets");
152
        final RadioButton accRB = new RadioButton("vendorCategory", "Accessories");
153
        handsetsRB.setValue(true);
154
        HorizontalPanel hpRB = new HorizontalPanel();
155
        hpRB.add(handsetsRB);
156
        hpRB.add(accRB);
157
 
158
        vp.add(hpRB);
159
 
160
        Button submitButton = new Button("OK");
161
        Button cancelButton = new Button("Cancel");
162
        HorizontalPanel hpButtons = new HorizontalPanel();
163
        hpButtons.setSpacing(5);
164
        hpButtons.add(submitButton);
165
        hpButtons.add(cancelButton);
166
 
167
        vp.add(hpRB);
168
        vp.add(hpButtons);
169
        db.add(vp);
170
        submitButton.addClickHandler(new ClickHandler() {
171
            @Override
172
            public void onClick(ClickEvent event) {
173
                String vendorCategory;
174
                if(handsetsRB.getValue()) {
175
                    vendorCategory = "Handsets";
176
                } else {
177
                    vendorCategory = "Accessories";
178
                }
179
                String link = GWT.getHostPageBaseURL() + "mastersheet/download?vendorCategory=" + vendorCategory;
180
                Window.open(link, "_self", "Master Sheet Download");
181
                db.hide();
182
            }
183
        });
184
        cancelButton.addClickHandler(new ClickHandler() {
185
            @Override
186
            public void onClick(ClickEvent event) {
187
                db.hide();
188
            }
189
        });
190
        db.center();
191
        db.setAnimationEnabled(true);
192
        db.show();
193
    }
194
 
195
    private void changeRiskyFlag(boolean risky) {
196
        Item item = itemDetails.getItem();
197
        if(item == null) {
198
            Window.alert("Please select an item to mark/unmark as risky");
199
            return;
200
        }
201
        if(risky && item.isRisky()) {
202
            Window.alert("Item already marked as risky");
203
            return;
204
        }
205
        if(!risky && !item.isRisky()) {
206
            Window.alert("Item not marked as risky");
207
            return;
208
        }
209
        catalogService.changeItemRiskyFlag(item.getId(), risky, new AsyncCallback<Boolean>() {
210
            @Override
211
            public void onSuccess(Boolean result) {
212
                if(result) {
213
                    Window.alert("Done!");
214
                } else {
215
                    Window.alert("Error while marking/unmarking risky flag on staging/production server.");
216
                }
217
            }
218
            @Override
219
            public void onFailure(Throwable caught) {
220
                Window.alert("Error");
221
            }
222
        });
223
    }
224
 
2126 ankur.sing 225
    public void setItemDetails(ItemDetails itemDetails) {
226
        this.itemDetails = itemDetails;
2105 ankur.sing 227
    }
228
 
2126 ankur.sing 229
    private long validateStatusChange(int toStatus) {
230
        final Item item = itemDetails.getItem();
231
        if(item == null) {
232
            Window.alert(getAlertString(toStatus)[0]);
233
            return -1;
234
        }
235
        if(!Utils.validateStatusChange(item.getItemStatusValue(), toStatus)) {
236
            Window.alert(getAlertString(toStatus)[1]);
237
            return -1;
238
        }
239
        return item.getId();
240
    }
241
 
242
    private String[] getAlertString(int toStatus) {
243
        String[] alertStr = {"", ""};
244
        switch(toStatus) {
245
        case Utils.PAUSED: {
246
            alertStr[0] = "Please select an ACTIVE item to mark PAUSED";
247
            alertStr[1] = "Cannot mark this item as PAUSED";
248
            break;
249
        }
250
        case Utils.IN_PROCESS: {
251
            alertStr[0] = "Please select a PHASED OUT item to mark IN PROCESS";
252
            alertStr[1] = "Cannot mark this item as IN PROCESS";
253
            break;
254
        }
255
        case Utils.ACTIVE: {
256
            alertStr[0] = "Please select a PAUSED item to mark ACTIVE";
257
            alertStr[1] = "Cannot mark this item as ACTIVE";
258
            break;
259
        }
260
        case Utils.PHASED_OUT: {
261
            alertStr[0] = "Please select an item to mark PHASED OUT";
262
            alertStr[1] = "Cannot mark this item as PHASED OUT";
263
            break;
264
        }
265
        }
266
        return alertStr;
267
    }
2105 ankur.sing 268
}
2126 ankur.sing 269