Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
493 rajveer 1
package in.shop2020.hotspot.dashbaord.server;
2
 
3
import in.shop2020.hotspot.dashbaord.shared.actions.Order;
4
import in.shop2020.hotspot.dashbaord.shared.actions.OrderType;
2697 chandransh 5
import in.shop2020.hotspot.dashbaord.shared.actions.ReturnOrder;
914 chandransh 6
import in.shop2020.model.v1.order.LineItem;
493 rajveer 7
import in.shop2020.model.v1.order.OrderStatus;
8
import in.shop2020.model.v1.order.TransactionService.Client;
3132 rajveer 9
import in.shop2020.thrift.clients.TransactionClient;
493 rajveer 10
 
11
import java.util.ArrayList;
12
import java.util.Date;
13
import java.util.List;
14
 
2449 chandransh 15
/**
16
 * This class is a facade to the Transaction service and should be used to
4133 chandransh 17
 * access all order specific data which requires some kind of transformation.
2449 chandransh 18
 * 
19
 * @author Chandranshu
20
 * 
21
 */
493 rajveer 22
public class TransactionUtils {
2449 chandransh 23
	/**
24
	 * The human user is concerned only with a consolidated view of actionable
25
	 * orders. Orders with different statuses in the database can be part of the
26
	 * same consolidated view. This method uses a mapping of <i>type</i> to
27
	 * <i>status</i> to get all such orders and return them as order beans.
28
	 * 
29
	 * @param type
30
	 *            The type of orders to return.
4133 chandransh 31
	 * @param offset
32
	 *            Offset to start from
33
	 * @param limit
34
	 *            No. of orders to return
2449 chandransh 35
	 * @param warehouseId
36
	 *            The warehouse for which the orders should be queried.
37
	 * @return A list of orders of the given type to be fulfilled from the given
38
	 *         warehouse
39
	 */
4133 chandransh 40
	public static List<Order> getOrders(OrderType type, long offset, long limit, long warehouseId){
2449 chandransh 41
		List<OrderStatus> statuses = getStatuses(type);
493 rajveer 42
 
43
		List<Order> orders = new ArrayList<Order>();
44
		try{
4133 chandransh 45
			TransactionClient txnClient = new TransactionClient();
46
			Client client = txnClient.getClient();
493 rajveer 47
 
48
			List<in.shop2020.model.v1.order.Order> t_orders = new ArrayList<in.shop2020.model.v1.order.Order>();
4133 chandransh 49
			t_orders.addAll(client.getOrdersInBatch(statuses, offset, limit, warehouseId));
493 rajveer 50
 
51
			for (in.shop2020.model.v1.order.Order t_order: t_orders){
671 chandransh 52
				Order o = getOrderFromThriftOrder(t_order);
493 rajveer 53
				orders.add(o);
54
			}
55
		}catch(Exception e){
2449 chandransh 56
			e.printStackTrace();
493 rajveer 57
		}
58
		return orders;
59
	}
60
 
2449 chandransh 61
	/**
4133 chandransh 62
	 * Wrapper around the method of same name in the transaction service. This
63
	 * method uses a mapping of <i>type</i> to <i>status</i> to get the count of
64
	 * all orders with a given status.
65
	 * 
66
	 * @param type
67
	 *            The type of orders to return.
68
	 * @param warehouseId
69
	 *            The warehouse for which the orders should be queried.
70
	 * @return The count of orders of the given type assigned to the given
71
	 *         warehouse.
72
	 */
73
	public static int getOrderCount(OrderType type, long warehouseId){
74
		List<OrderStatus> statuses = getStatuses(type);
75
 
76
		int count = 0;
77
		try{
78
			TransactionClient txnClient = new TransactionClient();
79
			Client client = txnClient.getClient();
80
			count += client.getOrderCount(statuses, warehouseId);
81
		}catch(Exception e){
82
			e.printStackTrace();
83
		}
84
		return count;
85
	}
86
 
87
	/**
2449 chandransh 88
	 * Calls the same method of the transaction service and returns the status
89
	 * returned. Catches all exceptions that are raised and returns false in
90
	 * that case.
91
	 * 
92
	 * @param warehouseId
93
	 *            The warehouse for which the orders should be marked as
94
	 *            manifested.
95
	 * @param providerId
96
	 *            The provider for which the orders should be marked as
97
	 *            manifested.
3065 chandransh 98
	 * @param cod
99
	 *             Whether cod orders have to be marked as manifested
2449 chandransh 100
	 * @return True if everything goes fine, false otherwise.
101
	 */
3065 chandransh 102
	public static boolean markOrdersAsManifested(long warehouseId, String providerId, boolean cod){
760 chandransh 103
		try {
104
			long provider_id = Long.parseLong(providerId);
3132 rajveer 105
			TransactionClient client = new TransactionClient();
760 chandransh 106
			Client c = client.getClient();
3065 chandransh 107
			return c.markOrdersAsManifested(warehouseId, provider_id, cod);
760 chandransh 108
		}catch(Exception e){
109
			e.printStackTrace();
110
			return false;
111
		}
112
	}
2449 chandransh 113
 
671 chandransh 114
	/**
2449 chandransh 115
	 * 
671 chandransh 116
	 * @param t_order
2449 chandransh 117
	 *            A thrift order object with line items.
118
	 * @return an Order bean which can be used for rendering on the client side.
671 chandransh 119
	 */
120
	public static Order getOrderFromThriftOrder(in.shop2020.model.v1.order.Order t_order) {
914 chandransh 121
		LineItem lineItem = t_order.getLineitems().get(0);
3553 chandransh 122
 
123
		String delayReason = null;
124
		if(t_order.getDelayReason() != null)
125
		    delayReason = t_order.getDelayReason().name(); 
126
 
966 chandransh 127
		Order order = new Order(t_order.getId(),
128
				t_order.getCustomer_id(),
129
				t_order.getCustomer_name(),
130
				t_order.getCustomer_mobilenumber(),
131
				t_order.getCustomer_pincode(),
132
				t_order.getCustomer_address1(),
133
				t_order.getCustomer_address2(),
134
				t_order.getCustomer_city(),
135
				t_order.getCustomer_state(),
136
				t_order.getCustomer_email(),
137
				t_order.getCreated_timestamp(),
4004 chandransh 138
				t_order.getShipping_timestamp(),
139
				t_order.getVerification_timestamp(),
966 chandransh 140
				t_order.getExpected_delivery_time(),
3994 chandransh 141
				t_order.getPromised_delivery_time(),
4004 chandransh 142
				t_order.getExpected_shipping_time(),
966 chandransh 143
				t_order.getStatus().getValue(),
144
				t_order.getStatusDescription(),
145
				lineItem.getItem_id(),
146
				lineItem.getProductGroup(),
147
				lineItem.getBrand(),
148
				lineItem.getModel_name(),
149
				lineItem.getModel_number(),
150
				lineItem.getColor(),
151
				lineItem.getExtra_info(),
4172 rajveer 152
				lineItem.getDealText(),
2782 chandransh 153
				t_order.getTotal_amount(),
154
				t_order.getTotal_weight(),
155
				t_order.getAirwaybill_no(),
156
				t_order.getBilled_by(),
157
				t_order.getInvoice_number(),
158
				t_order.getJacket_number(),
159
				lineItem.getItem_number(),
160
				lineItem.getImei_number(),
3065 chandransh 161
				t_order.getBatchNo(),
162
				t_order.getSerialNo(),
2509 chandransh 163
				t_order.isDoaFlag(),
3065 chandransh 164
				t_order.getPickupRequestNo(),
3553 chandransh 165
				t_order.isCod(),
166
				delayReason);
966 chandransh 167
		return order;
671 chandransh 168
	}
169
 
2449 chandransh 170
	/**
2697 chandransh 171
	 * Queries the transction server to get the list of all return orders that
172
	 * have to be processed.
173
	 * 
174
	 * @return A list of all return orders to be processed.
175
	 */
176
	public static List<ReturnOrder> getReturnOrders(long warehouseId){
177
		List<ReturnOrder> retOrders = new ArrayList<ReturnOrder>();
178
		try{
3132 rajveer 179
			TransactionClient client = new TransactionClient();
2697 chandransh 180
			Client c = client.getClient();
181
			List<in.shop2020.model.v1.order.ReturnOrder> tRetOrders =  c.getReturnOrders(warehouseId, 0L, new Date().getTime());
182
			for(in.shop2020.model.v1.order.ReturnOrder retOrder : tRetOrders){
183
				retOrders.add(getReturnOrderFromThriftRO(retOrder));
184
			}
185
		}catch(Exception e){
186
			e.printStackTrace();
187
		}
188
		return retOrders;
189
	}
190
 
2700 chandransh 191
	public static ReturnOrder getReturnOrderFromThriftRO(in.shop2020.model.v1.order.ReturnOrder tRetOrder){
192
		ReturnOrder retOrder = new ReturnOrder(tRetOrder.getOrderId(),
193
				tRetOrder.getWarehouseId(),
194
				tRetOrder.getItemId(),
195
				tRetOrder.getProductGroup(),
196
				tRetOrder.getBrand(),
197
				tRetOrder.getModelName(),
198
				tRetOrder.getModelNumber(),
199
				tRetOrder.getColor(),
200
				tRetOrder.getInvoiceNumber(),
201
				tRetOrder.getJacketNumber(),
202
				tRetOrder.getTotalPrice(),
203
				tRetOrder.getTransferPrice(),
204
				false,
205
				tRetOrder.getCreatedAt());
2697 chandransh 206
		return retOrder;
207
	}
208
 
209
	/**
2449 chandransh 210
	 * This method maps a given type to a list of statuses.
211
	 * 
212
	 * @param type
213
	 *            The type of orders to fetch.
214
	 * @return The list of Thrift statuses associated with a particular order
215
	 *         type.
216
	 */
4361 rajveer 217
	public static List<OrderStatus> getStatuses(OrderType type) {
2449 chandransh 218
		List<OrderStatus> statuses = new ArrayList<OrderStatus>();
219
 
220
		switch (type) {
221
		case ACCEPTED:
222
			statuses.add(OrderStatus.ACCEPTED);
223
			break;
224
 
4361 rajveer 225
		case ALL_PENDING:
226
			statuses.add(OrderStatus.SUBMITTED_FOR_PROCESSING);
227
			statuses.add(OrderStatus.INVENTORY_LOW);
228
			statuses.add(OrderStatus.LOW_INV_PO_RAISED);
229
			statuses.add(OrderStatus.LOW_INV_REVERSAL_IN_PROCESS);
230
			statuses.add(OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT);
2449 chandransh 231
			break;
232
 
233
		case NEW:
234
			statuses.add(OrderStatus.SUBMITTED_FOR_PROCESSING);
235
			break;
236
 
237
		case BILLED:
238
			statuses.add(OrderStatus.BILLED);
239
			break;
240
 
4308 rajveer 241
		case LOW_INVENTORY:
2449 chandransh 242
			statuses.add(OrderStatus.INVENTORY_LOW);
243
			break;
4248 rajveer 244
 
4308 rajveer 245
		case PO_RAISED:
246
			statuses.add(OrderStatus.LOW_INV_PO_RAISED);
247
			break;
248
 
249
		case REVERSAL_INITIATED:
250
			statuses.add(OrderStatus.LOW_INV_REVERSAL_IN_PROCESS);
251
			break;
252
 
253
		case NOT_AVAILABLE:
254
			statuses.add(OrderStatus.LOW_INV_NOT_AVAILABLE_AT_HOTSPOT);
255
			break;
256
 
4248 rajveer 257
		case CANCEL_CONFIRMED:
258
			statuses.add(OrderStatus.CANCEL_REQUEST_CONFIRMED);
259
			break;
2449 chandransh 260
 
261
		case REJECTED:
262
			statuses.add(OrderStatus.REJECTED);
263
			break;
264
 
265
		case SHIPPED:
266
			statuses.add(OrderStatus.SHIPPED_FROM_WH);
267
			statuses.add(OrderStatus.SHIPPED_TO_LOGST);
268
			break;
269
 
270
		case DELIVERED:
271
			statuses.add(OrderStatus.DELIVERY_SUCCESS);
2509 chandransh 272
			statuses.add(OrderStatus.DOA_PICKUP_REQUESTED);
2449 chandransh 273
			break;
2610 chandransh 274
 
275
		case DOA_AWAITED:
276
			statuses.add(OrderStatus.DOA_RETURN_AUTHORIZED);
277
			statuses.add(OrderStatus.DOA_RETURN_IN_TRANSIT);
278
			statuses.add(OrderStatus.DOA_RECEIVED);
279
			break;
2449 chandransh 280
 
2509 chandransh 281
		case SALES_RETURN_AWAITED:
282
			statuses.add(OrderStatus.SALES_RETURN_IN_TRANSIT);
283
			break;
284
 
2610 chandransh 285
		case DOA_RETURNED:
286
			statuses.add(OrderStatus.DOA_CERT_VALID);
287
			break;
288
 
2509 chandransh 289
		case SALES_RETURNED:
2610 chandransh 290
			statuses.add(OrderStatus.SALES_RET_RECEIVED);
291
			statuses.add(OrderStatus.DOA_CERT_INVALID);
2509 chandransh 292
			break;
293
 
2628 chandransh 294
		case RESHIPPED:
295
			statuses.add(OrderStatus.SALES_RET_RESHIPPED);
296
			statuses.add(OrderStatus.DOA_INVALID_RESHIPPED);
297
			statuses.add(OrderStatus.DOA_RESHIPPED);
298
			break;
299
 
300
		case REFUNDED:
3196 chandransh 301
		    statuses.add(OrderStatus.CANCELED);
2628 chandransh 302
			statuses.add(OrderStatus.SALES_RET_REFUNDED);
303
			statuses.add(OrderStatus.DOA_INVALID_REFUNDED);
304
			statuses.add(OrderStatus.DOA_VALID_REFUNDED);
305
			statuses.add(OrderStatus.REFUNDED);
306
			break;
2509 chandransh 307
 
3065 chandransh 308
		case VERIFICATION_PENDING:
309
		    statuses.add(OrderStatus.INIT);
310
		    break;
2449 chandransh 311
		default:
312
			break;
313
		}
314
		return statuses;
315
	}
493 rajveer 316
}