Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
26607 amit.gupta 1
package com.spice.profitmandi.web.controller;
2
 
28566 tejbeer 3
import java.io.ByteArrayInputStream;
4
import java.io.ByteArrayOutputStream;
5
import java.io.IOException;
6
import java.io.InputStream;
27025 tejbeer 7
import java.time.LocalDateTime;
26628 amit.gupta 8
import java.time.LocalTime;
27069 tejbeer 9
import java.time.format.DateTimeFormatter;
26607 amit.gupta 10
import java.util.ArrayList;
11
import java.util.Arrays;
28312 amit.gupta 12
import java.util.Comparator;
26607 amit.gupta 13
import java.util.HashMap;
14
import java.util.HashSet;
15
import java.util.List;
16
import java.util.Map;
26745 amit.gupta 17
import java.util.Optional;
26607 amit.gupta 18
import java.util.Set;
19
import java.util.stream.Collectors;
20
 
21
import javax.servlet.http.HttpServletRequest;
28334 amit.gupta 22
import javax.servlet.http.HttpServletResponse;
26607 amit.gupta 23
 
24
import org.apache.commons.lang3.StringUtils;
25
import org.apache.http.conn.HttpHostConnectException;
26
import org.apache.logging.log4j.LogManager;
27
import org.apache.logging.log4j.Logger;
28
import org.json.JSONArray;
29
import org.json.JSONObject;
30
import org.springframework.beans.factory.annotation.Autowired;
31
import org.springframework.beans.factory.annotation.Value;
28566 tejbeer 32
import org.springframework.core.io.InputStreamResource;
33
import org.springframework.http.HttpHeaders;
34
import org.springframework.http.HttpStatus;
26607 amit.gupta 35
import org.springframework.http.MediaType;
36
import org.springframework.http.ResponseEntity;
37
import org.springframework.stereotype.Controller;
38
import org.springframework.transaction.annotation.Transactional;
26923 amit.gupta 39
import org.springframework.web.bind.annotation.GetMapping;
26662 amit.gupta 40
import org.springframework.web.bind.annotation.PathVariable;
26607 amit.gupta 41
import org.springframework.web.bind.annotation.RequestBody;
42
import org.springframework.web.bind.annotation.RequestMapping;
43
import org.springframework.web.bind.annotation.RequestMethod;
44
import org.springframework.web.bind.annotation.RequestParam;
45
 
46
import com.eclipsesource.json.JsonObject;
47
import com.google.gson.Gson;
48
import com.google.gson.reflect.TypeToken;
28377 tejbeer 49
import com.spice.profitmandi.common.enumuration.MessageType;
26607 amit.gupta 50
import com.spice.profitmandi.common.enumuration.SchemeType;
51
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
26923 amit.gupta 52
import com.spice.profitmandi.common.model.CreatePendingOrderItem;
26648 amit.gupta 53
import com.spice.profitmandi.common.model.CreatePendingOrderRequest;
26651 amit.gupta 54
import com.spice.profitmandi.common.model.CustomRetailer;
28566 tejbeer 55
import com.spice.profitmandi.common.model.PdfModel;
26607 amit.gupta 56
import com.spice.profitmandi.common.model.ProfitMandiConstants;
28377 tejbeer 57
import com.spice.profitmandi.common.model.SendNotificationModel;
26607 amit.gupta 58
import com.spice.profitmandi.common.model.UserInfo;
59
import com.spice.profitmandi.common.solr.SolrService;
28304 amit.gupta 60
import com.spice.profitmandi.common.util.FormattingUtils;
28566 tejbeer 61
import com.spice.profitmandi.common.util.PdfUtils;
28405 amit.gupta 62
import com.spice.profitmandi.common.util.Utils;
26607 amit.gupta 63
import com.spice.profitmandi.common.web.client.RestClient;
64
import com.spice.profitmandi.common.web.util.ResponseSender;
65
import com.spice.profitmandi.dao.entity.catalog.Item;
66
import com.spice.profitmandi.dao.entity.catalog.TagListing;
29515 tejbeer 67
import com.spice.profitmandi.dao.entity.dtr.ScratchOffer;
28377 tejbeer 68
import com.spice.profitmandi.dao.entity.dtr.User;
26745 amit.gupta 69
import com.spice.profitmandi.dao.entity.dtr.WebListing;
28374 amit.gupta 70
import com.spice.profitmandi.dao.entity.dtr.WebOffer;
26774 amit.gupta 71
import com.spice.profitmandi.dao.entity.fofo.Customer;
26857 amit.gupta 72
import com.spice.profitmandi.dao.entity.fofo.CustomerAddress;
28566 tejbeer 73
import com.spice.profitmandi.dao.entity.fofo.FofoOrder;
74
import com.spice.profitmandi.dao.entity.fofo.FofoOrderItem;
28267 amit.gupta 75
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
26855 tejbeer 76
import com.spice.profitmandi.dao.entity.fofo.PendingOrder;
77
import com.spice.profitmandi.dao.entity.fofo.PendingOrderItem;
26715 amit.gupta 78
import com.spice.profitmandi.dao.entity.fofo.PincodePartner;
26630 amit.gupta 79
import com.spice.profitmandi.dao.enumuration.dtr.OtpType;
29515 tejbeer 80
import com.spice.profitmandi.dao.enumuration.inventory.ScratchedGift;
27045 tejbeer 81
import com.spice.profitmandi.dao.enumuration.transaction.OrderStatus;
26607 amit.gupta 82
import com.spice.profitmandi.dao.model.AddCartRequest;
83
import com.spice.profitmandi.dao.model.CartItem;
84
import com.spice.profitmandi.dao.model.CartItemResponseModel;
85
import com.spice.profitmandi.dao.model.CartResponse;
27045 tejbeer 86
import com.spice.profitmandi.dao.model.CustomerOrderDetail;
29515 tejbeer 87
import com.spice.profitmandi.dao.model.DateRangeModel;
26607 amit.gupta 88
import com.spice.profitmandi.dao.repository.catalog.ItemRepository;
89
import com.spice.profitmandi.dao.repository.catalog.TagListingRepository;
28290 tejbeer 90
import com.spice.profitmandi.dao.repository.cs.CsService;
26718 amit.gupta 91
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
29515 tejbeer 92
import com.spice.profitmandi.dao.repository.dtr.ScratchOfferRepository;
27030 amit.gupta 93
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
26745 amit.gupta 94
import com.spice.profitmandi.dao.repository.dtr.WebListingRepository;
28374 amit.gupta 95
import com.spice.profitmandi.dao.repository.dtr.WebOfferRepository;
26745 amit.gupta 96
import com.spice.profitmandi.dao.repository.dtr.WebProductListingRepository;
26607 amit.gupta 97
import com.spice.profitmandi.dao.repository.fofo.CurrentInventorySnapshotRepository;
26788 amit.gupta 98
import com.spice.profitmandi.dao.repository.fofo.CustomerAddressRepository;
26774 amit.gupta 99
import com.spice.profitmandi.dao.repository.fofo.CustomerRepository;
28566 tejbeer 100
import com.spice.profitmandi.dao.repository.fofo.FofoOrderItemRepository;
101
import com.spice.profitmandi.dao.repository.fofo.FofoOrderRepository;
26855 tejbeer 102
import com.spice.profitmandi.dao.repository.fofo.PendingOrderItemRepository;
103
import com.spice.profitmandi.dao.repository.fofo.PendingOrderRepository;
26648 amit.gupta 104
import com.spice.profitmandi.dao.repository.fofo.PendingOrderService;
26715 amit.gupta 105
import com.spice.profitmandi.dao.repository.fofo.PincodePartnerRepository;
26607 amit.gupta 106
import com.spice.profitmandi.dao.repository.inventory.ItemAvailabilityCacheRepository;
28582 amit.gupta 107
import com.spice.profitmandi.dao.repository.user.UserRepository;
26784 amit.gupta 108
import com.spice.profitmandi.service.CustomerService;
28377 tejbeer 109
import com.spice.profitmandi.service.EmailService;
110
import com.spice.profitmandi.service.NotificationService;
26607 amit.gupta 111
import com.spice.profitmandi.service.authentication.RoleManager;
26923 amit.gupta 112
import com.spice.profitmandi.service.inventory.AvailabilityModel;
26607 amit.gupta 113
import com.spice.profitmandi.service.inventory.FofoAvailabilityInfo;
114
import com.spice.profitmandi.service.inventory.FofoCatalogResponse;
26923 amit.gupta 115
import com.spice.profitmandi.service.inventory.InventoryService;
26909 amit.gupta 116
import com.spice.profitmandi.service.inventory.SaholicInventoryService;
28566 tejbeer 117
import com.spice.profitmandi.service.order.OrderService;
26683 amit.gupta 118
import com.spice.profitmandi.service.scheme.SchemeService;
26651 amit.gupta 119
import com.spice.profitmandi.service.user.RetailerService;
26630 amit.gupta 120
import com.spice.profitmandi.web.processor.OtpProcessor;
26607 amit.gupta 121
import com.spice.profitmandi.web.res.DealBrands;
122
import com.spice.profitmandi.web.res.DealObjectResponse;
123
import com.spice.profitmandi.web.res.DealsResponse;
124
import com.spice.profitmandi.web.res.ValidateCartResponse;
28322 amit.gupta 125
import com.spice.profitmandi.web.services.PartnerIndexService;
26607 amit.gupta 126
 
127
import io.swagger.annotations.ApiImplicitParam;
128
import io.swagger.annotations.ApiImplicitParams;
129
import io.swagger.annotations.ApiOperation;
130
 
131
@Controller
132
@Transactional(rollbackFor = Throwable.class)
133
public class StoreController {
134
 
135
	private static final Logger logger = LogManager.getLogger(StoreController.class);
26630 amit.gupta 136
 
26628 amit.gupta 137
	private static final LocalTime CUTOFF_TIME = LocalTime.of(15, 0);
26745 amit.gupta 138
 
139
	private static final List<Integer> TAG_IDS = Arrays.asList(4);
140
 
26788 amit.gupta 141
	@Autowired
142
	CustomerAddressRepository customerAddressRepository;
28392 tejbeer 143
 
28374 amit.gupta 144
	@Autowired
145
	WebOfferRepository webOfferRepository;
26607 amit.gupta 146
 
28315 amit.gupta 147
	@Value("${new.solr.url}")
28314 amit.gupta 148
	private String solrUrl;
28345 tejbeer 149
 
26923 amit.gupta 150
	@Autowired
28322 amit.gupta 151
	private PartnerIndexService partnerIndexService;
28345 tejbeer 152
 
28322 amit.gupta 153
	@Autowired
26923 amit.gupta 154
	InventoryService inventoryService;
27045 tejbeer 155
 
27030 amit.gupta 156
	@Autowired
157
	UserAccountRepository userAccountRepository;
26923 amit.gupta 158
 
26607 amit.gupta 159
	@Value("${python.api.host}")
160
	private String host;
26833 amit.gupta 161
 
26784 amit.gupta 162
	@Autowired
163
	CustomerService customerService;
26607 amit.gupta 164
 
165
	@Value("${python.api.port}")
166
	private int port;
26923 amit.gupta 167
 
26909 amit.gupta 168
	@Autowired
169
	private SaholicInventoryService saholicInventoryService;
26607 amit.gupta 170
 
171
	@Autowired
26715 amit.gupta 172
	private PincodePartnerRepository pincodePartnerRepository;
173
 
174
	@Autowired
26718 amit.gupta 175
	private FofoStoreRepository fofoStoreRepository;
26745 amit.gupta 176
 
26718 amit.gupta 177
	@Autowired
26651 amit.gupta 178
	private RetailerService retailerService;
26861 tejbeer 179
 
26857 amit.gupta 180
	@Autowired
181
	private PendingOrderRepository pendingOrderRepository;
26861 tejbeer 182
 
26857 amit.gupta 183
	@Autowired
184
	private PendingOrderItemRepository pendingOrderItemRepository;
26652 amit.gupta 185
 
26651 amit.gupta 186
	@Autowired
26652 amit.gupta 187
	private PendingOrderService pendingOrderService;
26648 amit.gupta 188
 
189
	@Autowired
26774 amit.gupta 190
	private CustomerRepository customerRepository;
191
 
192
	@Autowired
26607 amit.gupta 193
	private SolrService commonSolrService;
194
 
195
	@Autowired
26630 amit.gupta 196
	private OtpProcessor otpProcessor;
197
 
198
	@Autowired
26607 amit.gupta 199
	private CurrentInventorySnapshotRepository currentInventorySnapshotRepository;
200
 
26609 amit.gupta 201
	@Autowired
26607 amit.gupta 202
	private ResponseSender<?> responseSender;
203
 
204
	@Autowired
205
	private TagListingRepository tagListingRepository;
206
 
207
	@Autowired
208
	private ItemRepository itemRepository;
26701 amit.gupta 209
 
26683 amit.gupta 210
	@Autowired
211
	private SchemeService schemeService;
26607 amit.gupta 212
 
213
	@Autowired
28566 tejbeer 214
	private UserRepository userRepository;
215
 
216
	@Autowired
26607 amit.gupta 217
	private ItemAvailabilityCacheRepository itemAvailabilityCacheRepository;
218
 
219
	@Autowired
26745 amit.gupta 220
	private WebListingRepository webListingRepository;
221
 
222
	@Autowired
223
	private WebProductListingRepository webProductListingRepository;
224
 
225
	@Autowired
26607 amit.gupta 226
	private RoleManager roleManagerService;
227
 
27028 tejbeer 228
	@Autowired
28304 amit.gupta 229
	EmailService emailService;
27028 tejbeer 230
 
231
	@Autowired
28290 tejbeer 232
	CsService csService;
28339 tejbeer 233
 
28377 tejbeer 234
	@Autowired
235
	private NotificationService notificationService;
236
 
237
	@Autowired
238
	private com.spice.profitmandi.dao.repository.dtr.UserRepository dtrUserRepository;
239
 
28566 tejbeer 240
	@Autowired
241
	private FofoOrderRepository fofoOrderRepository;
242
 
243
	@Autowired
244
	private FofoOrderItemRepository fofoOrderItemRepository;
245
 
246
	@Autowired
247
	private OrderService orderService;
29515 tejbeer 248
 
249
	@Autowired
250
	private ScratchOfferRepository scratchOfferRepository;
28339 tejbeer 251
	private static final List<String> offlineOrders = Arrays.asList("EMIOD", "POD");
252
 
26607 amit.gupta 253
	List<String> filterableParams = Arrays.asList("brand");
254
 
26668 amit.gupta 255
	@RequestMapping(value = "/store/entity/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
256
	@ApiImplicitParams({
257
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
258
	@ApiOperation(value = "Get unit deal object")
259
	public ResponseEntity<?> getUnitFocoDeal(HttpServletRequest request, @PathVariable(value = "id") long id)
260
			throws ProfitMandiBusinessException {
28423 amit.gupta 261
		List<FofoCatalogResponse> dealResponses = new ArrayList<>();
26668 amit.gupta 262
		List<Integer> tagIds = Arrays.asList(4);
28423 amit.gupta 263
		FofoCatalogResponse fofoCatalogResponse = null;
26668 amit.gupta 264
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
265
		if (roleManagerService.isPartner(userInfo.getRoleIds())) {
266
			String categoryId = "(3 OR 6)";
26745 amit.gupta 267
 
26668 amit.gupta 268
			RestClient rc = new RestClient();
269
			Map<String, String> params = new HashMap<>();
270
			List<String> mandatoryQ = new ArrayList<>();
271
			String catalogString = "catalog" + id;
26607 amit.gupta 272
 
26668 amit.gupta 273
			mandatoryQ.add(String.format("+(categoryId_i:%s) +(id:%s) +{!parent which=\"id:%s\"} tagId_i:(%s)",
274
					categoryId, catalogString, catalogString, StringUtils.join(tagIds, " ")));
275
 
276
			params.put("q", StringUtils.join(mandatoryQ, " "));
277
			params.put("fl", "*, [child parentFilter=id:catalog*]");
278
			params.put("sort", "rank_i asc, create_s desc");
279
			params.put("wt", "json");
280
			String response = null;
281
			try {
28316 amit.gupta 282
				response = rc.get(SchemeType.HTTP, solrUrl, 8984, "solr/demo/select", params);
26668 amit.gupta 283
			} catch (HttpHostConnectException e) {
284
				throw new ProfitMandiBusinessException("", "", "Could not connect to host");
285
			}
286
			JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
287
			JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
28423 amit.gupta 288
			dealResponses = getCatalogResponse(docs, false, userInfo.getRetailerId());
289
			fofoCatalogResponse = dealResponses.get(0);
28467 tejbeer 290
			fofoCatalogResponse
291
					.setWebOffers(webOfferRepository.selectAllActiveOffers().get(fofoCatalogResponse.getCatalogId()));
292
 
26668 amit.gupta 293
		} else {
294
			return responseSender.badRequest(
295
					new ProfitMandiBusinessException("Retailer id", userInfo.getUserId(), "NOT_FOFO_RETAILER"));
296
		}
28423 amit.gupta 297
		return responseSender.ok(dealResponses.get(0));
26668 amit.gupta 298
	}
299
 
26607 amit.gupta 300
	private Object toDealObject(JsonObject jsonObject) {
301
		if (jsonObject.get("dealObject") != null && jsonObject.get("dealObject").asInt() == 1) {
302
			return new Gson().fromJson(jsonObject.toString(), DealObjectResponse.class);
303
		}
304
		return new Gson().fromJson(jsonObject.toString(), DealsResponse.class);
305
	}
306
 
307
	@RequestMapping(value = "/store/brands", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
308
	@ApiImplicitParams({
309
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
310
	@ApiOperation(value = "Get brand list and count for category")
311
	public ResponseEntity<?> getBrands(HttpServletRequest request,
312
			@RequestParam(value = "category_id") String category_id) throws ProfitMandiBusinessException {
313
		logger.info("Request " + request.getParameterMap());
314
		String response = null;
315
		// TODO: move to properties
316
		String uri = ProfitMandiConstants.URL_BRANDS;
317
		RestClient rc = new RestClient();
318
		Map<String, String> params = new HashMap<>();
319
		params.put("category_id", category_id);
320
		List<DealBrands> dealBrandsResponse = null;
321
		try {
322
			response = rc.get(SchemeType.HTTP, host, port, uri, params);
323
		} catch (HttpHostConnectException e) {
324
			throw new ProfitMandiBusinessException("", "", "Could not connect to host");
325
		}
326
 
327
		dealBrandsResponse = new Gson().fromJson(response, new TypeToken<List<DealBrands>>() {
328
		}.getType());
329
 
330
		return responseSender.ok(dealBrandsResponse);
331
	}
332
 
26745 amit.gupta 333
	@RequestMapping(value = "/store/listing/{listingUrl}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
334
	public ResponseEntity<?> bestSellers(HttpServletRequest request, @PathVariable String listingUrl) throws Exception {
26909 amit.gupta 335
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
28287 amit.gupta 336
		WebListing webListing = webListingRepository.selectByUrl(listingUrl);
337
		webListing.setFofoCatalogResponses(getDealResponses(userInfo, webListing));
26745 amit.gupta 338
		return responseSender.ok(webListing);
26654 amit.gupta 339
	}
340
 
26632 amit.gupta 341
	@RequestMapping(value = "/store/otp/generateOTP", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
26783 amit.gupta 342
	public ResponseEntity<?> generateOtp(HttpServletRequest request, @RequestParam String mobile) throws Exception {
26630 amit.gupta 343
 
26857 amit.gupta 344
		return responseSender.ok(otpProcessor.generateOtp(mobile, OtpType.REGISTRATION));
26630 amit.gupta 345
 
346
	}
26652 amit.gupta 347
 
26784 amit.gupta 348
	@RequestMapping(value = "/store/checkmobile/{mobile}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
26833 amit.gupta 349
	public ResponseEntity<?> checkRegistrationUsingMobile(HttpServletRequest request, @PathVariable String mobile)
350
			throws Exception {
26774 amit.gupta 351
		try {
352
			Customer customer = customerRepository.selectByMobileNumber(mobile);
26777 amit.gupta 353
			customer.setPasswordExist(StringUtils.isNotEmpty(customer.getPassword()));
26774 amit.gupta 354
			return responseSender.ok(new CustomerModel(true, customer));
355
		} catch (Exception e) {
356
			return responseSender.ok(new CustomerModel(false, null));
357
		}
358
	}
26833 amit.gupta 359
 
26784 amit.gupta 360
	@RequestMapping(value = "/store/signin", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
361
	public ResponseEntity<?> signIn(HttpServletRequest request, @RequestBody UserModel userModel) throws Exception {
26833 amit.gupta 362
		if (customerService.authenticate(userModel.getMobile(), userModel.getPassword())) {
26784 amit.gupta 363
			return responseSender.ok(true);
364
		} else {
365
			return responseSender.ok(false);
366
		}
367
	}
26923 amit.gupta 368
 
26841 amit.gupta 369
	@RequestMapping(value = "/store/resetPassword", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
26923 amit.gupta 370
	public ResponseEntity<?> resetPassword(HttpServletRequest request, @RequestBody UserModel userModel)
371
			throws Exception {
26843 amit.gupta 372
		customerService.changePassword(userModel.getMobile(), userModel.getPassword());
26841 amit.gupta 373
		return responseSender.ok(true);
374
	}
26774 amit.gupta 375
 
26857 amit.gupta 376
	@RequestMapping(value = "/store/register", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
377
	public ResponseEntity<?> register(HttpServletRequest request, @RequestBody UserModel userModel) throws Exception {
378
		Customer customer = new Customer();
379
		customer.setPassword(userModel.getPassword());
380
		customer.setEmailId(userModel.getEmail());
381
		customer.setFirstName(userModel.getFirstName());
382
		customer.setLastName(userModel.getLastName());
383
		customer.setMobileNumber(userModel.getMobile());
384
		return responseSender.ok(customerService.addCustomer(customer));
385
	}
386
 
26648 amit.gupta 387
	@RequestMapping(value = "/store/confirmOrder", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
26857 amit.gupta 388
	public ResponseEntity<?> confirmOrder(HttpServletRequest request,
26652 amit.gupta 389
			@RequestBody CreatePendingOrderRequest createPendingOrderRequest) throws Exception {
26648 amit.gupta 390
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
391
		Integer storeId = userInfo.getRetailerId();
392
		createPendingOrderRequest.setFofoId(storeId);
26923 amit.gupta 393
		List<CreatePendingOrderItem> pendingOrderItems = createPendingOrderRequest.getCreatePendingOrderItem();
394
		List<CartItem> cartItems = new ArrayList<>();
395
		pendingOrderItems.stream().forEach(x -> {
396
			CartItem ci = new CartItem();
397
			ci.setItemId(x.getItemId());
398
			ci.setQuantity(x.getQuantity());
399
			ci.setSellingPrice(x.getSellingPrice());
400
			cartItems.add(ci);
401
		});
402
		CartResponse cr = this.validateCart(storeId, cartItems);
403
		if (cr.getCartMessageChanged() > 0 || cr.getTotalAmount() != createPendingOrderRequest.getTotalAmount()) {
404
			return responseSender.badRequest("Invalid request");
405
		}
26652 amit.gupta 406
 
27028 tejbeer 407
		Map<String, String> returnMap = this.pendingOrderService.createPendingOrder(createPendingOrderRequest, cr);
408
 
28339 tejbeer 409
		PendingOrder pendingOrder = pendingOrderRepository.selectById(Integer.parseInt(returnMap.get("poId")));
410
		if (offlineOrders.contains(pendingOrder.getPayMethod())) {
411
 
412
			Map<String, Object> emailModel = pendingOrderService.sendCreateOrderMail(pendingOrder);
413
 
414
			CustomRetailer customRetailer = retailerService.getFofoRetailer(pendingOrder.getFofoId());
415
			Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
416
			String[] customerEmail = null;
28405 amit.gupta 417
			if (Utils.validateEmail(customer.getEmailId())) {
28339 tejbeer 418
				customerEmail = new String[] { customer.getEmailId() };
419
			}
28377 tejbeer 420
 
28339 tejbeer 421
			List<String> bccTo = Arrays.asList("kamini.sharma@smartdukaan.com", "tarun.verma@smartdukaan.com",
28467 tejbeer 422
					"niranjan.kala@smartdukaan.com", "sm@smartdukaan.com", "tejbeer.kaur@shop2020.in",
423
					"devkinandan.lal@smartdukaan.com", customRetailer.getEmail());
28377 tejbeer 424
 
28339 tejbeer 425
			List<String> authUserEmails = csService.getAuthUserByPartnerId(customRetailer.getPartnerId());
426
			if (authUserEmails != null) {
427
				authUserEmails = new ArrayList<>();
428
			}
429
			logger.info("authUserEmails {}", authUserEmails);
430
			authUserEmails.addAll(bccTo);
28374 amit.gupta 431
			StringBuffer itemBuffer = new StringBuffer();
432
			List<PendingOrderItem> orderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
433
			int totalItems = 0;
434
			String itemNoColor = null;
435
			float maxValue = 0;
28391 tejbeer 436
			for (PendingOrderItem orderItem : orderItems) {
437
				if (maxValue < orderItem.getSellingPrice()) {
28374 amit.gupta 438
					maxValue = orderItem.getSellingPrice();
439
					itemNoColor = itemRepository.selectById(orderItem.getItemId()).getItemDescriptionNoColor();
440
				}
441
				totalItems += orderItem.getQuantity();
442
			}
28391 tejbeer 443
			if (totalItems > 1) {
28374 amit.gupta 444
				itemBuffer.append(StringUtils.abbreviate(itemNoColor, 22));
28391 tejbeer 445
				itemBuffer.append(" +").append(totalItems - 1).append(" items");
28374 amit.gupta 446
			} else {
447
				itemBuffer.append(StringUtils.abbreviate(itemNoColor, 30));
448
			}
28400 tejbeer 449
			String message = String.format(OtpProcessor.TEMPLATE_ORDER_CREATED, pendingOrder.getId(),
450
					itemBuffer.toString(), pendingOrder.getTotalAmount());
451
			otpProcessor.sendSms(OtpProcessor.TEMPLATE_ORDER_CREATED_ID, message, customer.getMobileNumber());
28391 tejbeer 452
 
28400 tejbeer 453
			emailService.sendMailWithAttachments("Order Created with SmartDukaan", "order-confirm.vm", emailModel,
454
					customerEmail, null, bccTo.toArray(new String[0]));
455
 
28402 tejbeer 456
			List<String> emailIds = csService.getAuthUserIdByPartnerId(customRetailer.getPartnerId()).stream()
457
					.map(x -> x.getEmailId()).collect(Collectors.toList());
458
			emailIds.add("tarun.verma@smartdukaan.com");
28436 tejbeer 459
			emailIds.add("devkinandan.lal@smartdukaan.com");
28402 tejbeer 460
			emailIds.add("tejbeer.kaur@shop2020.in");
461
			List<User> user = dtrUserRepository.selectAllByEmailIds(emailIds);
28377 tejbeer 462
			List<Integer> userIds = user.stream().map(x -> x.getId()).collect(Collectors.toList());
28394 tejbeer 463
 
464
			logger.info("userIds" + userIds);
28397 tejbeer 465
			SendNotificationModel sendNotificationModel = new SendNotificationModel();
28377 tejbeer 466
			sendNotificationModel.setCampaignName("Online Order Alert");
467
			sendNotificationModel.setTitle("Online Order Update");
28391 tejbeer 468
			sendNotificationModel.setMessage(String.format(
469
					"You have new Online Order. Please check your Dashboard. In case of an activation scheme pls ensure the handset is activated, payout will be processed as per brand's activation report."));
28377 tejbeer 470
			sendNotificationModel.setType("url");
471
			sendNotificationModel.setUrl("https://app.smartdukaan.com/pages/home/notifications");
472
			sendNotificationModel.setExpiresat(LocalDateTime.now().plusDays(1));
473
			sendNotificationModel.setMessageType(MessageType.notification);
474
			int userId = userAccountRepository.selectUserIdByRetailerId(pendingOrder.getFofoId());
475
			sendNotificationModel.setUserIds(Arrays.asList(userId));
28397 tejbeer 476
			notificationService.sendNotification(sendNotificationModel);
28377 tejbeer 477
 
28394 tejbeer 478
			SendNotificationModel snm = new SendNotificationModel();
479
			snm.setCampaignName("Online Order Alert");
480
			snm.setTitle("Online Order Update");
481
			snm.setMessage(String.format("Your Partner " + customRetailer.getBusinessName()
28393 tejbeer 482
					+ " have new Online Order. Please inform your partner. In case of an activation scheme pls ensure the handset is activated, payout will be processed as per brand's activation report."));
28394 tejbeer 483
			snm.setType("url");
484
			snm.setUrl("https://app.smartdukaan.com/pages/home/notifications");
485
			snm.setExpiresat(LocalDateTime.now().plusDays(1));
486
			snm.setMessageType(MessageType.notification);
487
			snm.setUserIds(userIds);
488
			notificationService.sendNotification(snm);
28377 tejbeer 489
 
28339 tejbeer 490
		}
27028 tejbeer 491
		return responseSender.ok(returnMap);
492
 
26648 amit.gupta 493
	}
26630 amit.gupta 494
 
26857 amit.gupta 495
	@RequestMapping(value = "/store/address", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
496
	@ApiImplicitParams({
497
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
498
	@ApiOperation(value = "Get brand list and count for category")
499
	public ResponseEntity<?> getAddress(HttpServletRequest request) throws Exception {
500
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
501
		Integer storeId = userInfo.getRetailerId();
502
		CustomRetailer customRetailer = retailerService.getFofoRetailer(storeId);
503
 
504
		return responseSender.ok(customRetailer.getAddress());
505
 
506
	}
507
 
508
	@RequestMapping(value = "/store/address/{pincode}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
509
	@ApiImplicitParams({
510
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
511
	@ApiOperation(value = "Get brand list and count for category")
512
	public ResponseEntity<?> getStoresByPincode(HttpServletRequest request, @PathVariable String pincode)
513
			throws Exception {
514
		List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
28321 amit.gupta 515
		int fofoId = ProfitMandiConstants.DEFAULT_STORE;
26857 amit.gupta 516
		if (pincodePartners.size() > 0) {
28287 amit.gupta 517
			List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
28267 amit.gupta 518
			List<FofoStore> fofoStores = fofoStoreRepository.selectActivePartnersByRetailerIds(fofoIds);
28287 amit.gupta 519
			if (fofoStores.size() > 0) {
28267 amit.gupta 520
				fofoId = fofoStores.get(0).getId();
521
			}
28287 amit.gupta 522
 
26857 amit.gupta 523
		}
524
		return responseSender.ok(fofoStoreRepository.selectByRetailerId(fofoId).getCode());
525
	}
26923 amit.gupta 526
 
28566 tejbeer 527
	@RequestMapping(value = "/store/addresses", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
528
	@ApiImplicitParams({
529
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
530
	@ApiOperation(value = "Get brand list and count for category")
531
	public ResponseEntity<?> getStoresByPincod(HttpServletRequest request, @RequestParam String pincode,
532
			@RequestParam(name = "fofoCode", defaultValue = "", required = false) String fofoCode) throws Exception {
533
 
534
		List<CustomRetailer> customerRetailers = new ArrayList<>();
535
 
536
		logger.info("fofoCode" + fofoCode);
537
 
538
		if (fofoCode != null) {
539
			FofoStore fs = fofoStoreRepository.selectByStoreCode(fofoCode.toUpperCase());
540
			PincodePartner pp = pincodePartnerRepository.selectPartnerByPincode(pincode, fs.getId());
541
			if (pp != null) {
542
				return responseSender.ok(customerRetailers.add(retailerService.getFofoRetailer(pp.getFofoId())));
543
			} else {
544
 
545
				List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
546
				if (pincodePartners.size() > 0) {
547
 
548
					List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId())
549
							.collect(Collectors.toList());
550
					List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream()
551
							.filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
552
 
553
					Map<Integer, CustomRetailer> customerRetailerMap = retailerService.getFofoRetailers(activefofoIds);
554
					customerRetailers.addAll(customerRetailerMap.values());
555
 
556
				}
557
				return responseSender.ok(customerRetailers);
558
 
559
			}
560
		} else {
561
 
562
			List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
563
			if (pincodePartners.size() > 0) {
564
				List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
565
				List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream()
566
						.filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
567
 
568
				Map<Integer, CustomRetailer> customerRetailerMap = retailerService.getFofoRetailers(activefofoIds);
569
				customerRetailers.addAll(customerRetailerMap.values());
570
			}
571
 
572
			return responseSender.ok(customerRetailers);
573
 
574
		}
575
 
576
	}
577
 
28298 tejbeer 578
	@RequestMapping(value = "/store/address/detail/{pincode}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
579
	@ApiImplicitParams({
580
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
581
	@ApiOperation(value = "Get brand list and count for category")
582
	public ResponseEntity<?> getStoresDetailsByPincode(HttpServletRequest request, @PathVariable String pincode)
583
			throws Exception {
584
		List<CustomRetailer> customerRetailers = new ArrayList<>();
585
		List<PincodePartner> pincodePartners = pincodePartnerRepository.selectPartnersByPincode(pincode);
586
 
587
		if (!pincodePartners.isEmpty()) {
588
			List<Integer> fofoIds = pincodePartners.stream().map(x -> x.getFofoId()).collect(Collectors.toList());
589
			List<Integer> activefofoIds = fofoStoreRepository.selectByRetailerIds(fofoIds).stream()
590
					.filter(x -> x.isActive()).map(x -> x.getId()).collect(Collectors.toList());
591
			Map<Integer, CustomRetailer> customerRetailerMap = retailerService.getFofoRetailers(activefofoIds);
592
			customerRetailers.addAll(customerRetailerMap.values());
593
		}
594
 
595
		logger.info("customerRetailers" + customerRetailers);
596
		return responseSender.ok(customerRetailers);
597
	}
598
 
26855 tejbeer 599
	@RequestMapping(value = "/store/order", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
600
	public ResponseEntity<?> getOrderDetail(HttpServletRequest request, @RequestParam(value = "id") int id,
27049 tejbeer 601
			@RequestParam(name = "offset") int offset, @RequestParam(name = "limit") int limit) throws Exception {
26855 tejbeer 602
		List<CustomerOrderDetail> customerOrderDetails = new ArrayList<>();
27049 tejbeer 603
		List<Integer> catalogIds = new ArrayList<>();
26855 tejbeer 604
		List<PendingOrder> pendingOrders = pendingOrderRepository.selectByCustomerId(id, offset, limit);
28566 tejbeer 605
 
26855 tejbeer 606
		if (!pendingOrders.isEmpty()) {
607
			for (PendingOrder po : pendingOrders) {
608
				List<PendingOrderItem> pois = pendingOrderItemRepository.selectByOrderId(po.getId());
27049 tejbeer 609
				for (PendingOrderItem pendingOrderItem : pois) {
610
					Item item = itemRepository.selectById(pendingOrderItem.getItemId());
611
					pendingOrderItem.setItemName(item.getItemDescription());
612
					catalogIds.add(item.getCatalogItemId());
613
				}
614
 
615
				Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
616
 
26855 tejbeer 617
				for (PendingOrderItem poi : pois) {
618
 
619
					CustomerOrderDetail customerOrderDetail = new CustomerOrderDetail();
620
 
621
					Item item = itemRepository.selectById(poi.getItemId());
27049 tejbeer 622
					JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
623
					customerOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
26855 tejbeer 624
					customerOrderDetail.setBrand(item.getBrand());
625
					customerOrderDetail.setColor(item.getColor());
27056 tejbeer 626
					customerOrderDetail.setPendingOrderItemId(poi.getId());
26855 tejbeer 627
					customerOrderDetail.setId(poi.getOrderId());
628
					customerOrderDetail.setItemId(poi.getItemId());
629
					customerOrderDetail.setModelName(item.getModelName());
630
					customerOrderDetail.setModelNumber(item.getModelNumber());
631
					customerOrderDetail.setQuantity(poi.getQuantity());
27045 tejbeer 632
					customerOrderDetail.setBilledTimestamp(poi.getBilledTimestamp());
633
					customerOrderDetail.setStatus(poi.getStatus());
26855 tejbeer 634
					customerOrderDetail.setTotalPrice(poi.getSellingPrice());
635
					customerOrderDetail.setPayMethod(po.getPayMethod());
26861 tejbeer 636
					customerOrderDetail.setCreatedTimeStamp(po.getCreateTimestamp());
26855 tejbeer 637
					customerOrderDetails.add(customerOrderDetail);
638
				}
639
			}
640
		}
641
 
642
		return responseSender.ok(customerOrderDetails);
643
	}
644
 
28566 tejbeer 645
	@RequestMapping(value = "/store/invoiceOrder", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
646
	public ResponseEntity<?> getOrderInvoiceDetail(HttpServletRequest request, @RequestParam(value = "id") int id,
647
			@RequestParam(name = "offset") int offset, @RequestParam(name = "limit") int limit) throws Exception {
648
		List<CustomerOrderDetail> customerOrderDetails = new ArrayList<>();
649
		List<Integer> catalogIds = new ArrayList<>();
650
		List<FofoOrder> fofoOrders = fofoOrderRepository.selectOrderByCustomerId(id, offset, limit);
651
 
652
		if (!fofoOrders.isEmpty()) {
653
			for (FofoOrder fo : fofoOrders) {
654
				List<FofoOrderItem> fofoOrderItems = fofoOrderItemRepository.selectByOrderId(fo.getId());
655
				for (FofoOrderItem fofoOrderItem : fofoOrderItems) {
656
					Item item = itemRepository.selectById(fofoOrderItem.getItemId());
657
					fofoOrderItem.setItemName(item.getItemDescription());
658
					catalogIds.add(item.getCatalogItemId());
659
				}
660
 
661
				Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
662
				for (FofoOrderItem foi : fofoOrderItems) {
663
 
664
					CustomerOrderDetail customerOrderDetail = new CustomerOrderDetail();
665
 
666
					Item item = itemRepository.selectById(foi.getItemId());
667
					JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
668
					customerOrderDetail.setImageUrl(jsonObj.getString("imageUrl_s"));
669
					customerOrderDetail.setBrand(item.getBrand());
670
					customerOrderDetail.setColor(item.getColor());
671
					customerOrderDetail.setFofoOrderItemId(foi.getId());
672
					customerOrderDetail.setFofoOrderId(foi.getOrderId());
673
					customerOrderDetail.setItemId(foi.getItemId());
674
					customerOrderDetail.setModelName(item.getModelName());
675
					customerOrderDetail.setModelNumber(item.getModelNumber());
676
					customerOrderDetail.setQuantity(foi.getQuantity());
677
					customerOrderDetail.setTotalPrice(foi.getSellingPrice());
678
					customerOrderDetail.setCreatedTimeStamp(foi.getCreateTimestamp());
679
					customerOrderDetail.setInvoiceNumber(fo.getInvoiceNumber());
680
					customerOrderDetail.setCancelledTimestamp(fo.getCancelledTimestamp());
681
					customerOrderDetails.add(customerOrderDetail);
682
				}
683
			}
684
 
685
		}
686
		return responseSender.ok(customerOrderDetails);
687
	}
688
 
689
	@RequestMapping(value = "/store/generateInvoice", method = RequestMethod.GET)
690
	public ResponseEntity<?> generateInvoice(HttpServletRequest request,
691
			@RequestParam(name = ProfitMandiConstants.ORDER_ID) int orderId) throws ProfitMandiBusinessException {
692
		PdfModel pdfModel = null;
693
		FofoOrder fo = fofoOrderRepository.selectByOrderId(orderId);
694
		pdfModel = orderService.getInvoicePdfModel(fo.getFofoId(), orderId);
695
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
696
		PdfUtils.generateAndWrite(Arrays.asList(pdfModel), byteArrayOutputStream);
697
		try {
698
			byteArrayOutputStream.close();
699
		} catch (IOException e) {
700
			// TODO Auto-generated catch block
701
			e.printStackTrace();
702
		}
703
		final HttpHeaders headers = new HttpHeaders();
704
		headers.setContentType(MediaType.APPLICATION_PDF);
705
		// headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
706
 
707
		headers.setContentType(MediaType.parseMediaType("application/pdf"));
708
		headers.set("Content-disposition", "inline; filename=invoice-" + pdfModel.getInvoiceNumber() + ".pdf");
709
		headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
710
		headers.add("Pragma", "no-cache");
711
		headers.add("Expires", "0");
712
 
713
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
714
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
715
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
716
		return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
717
		// return responseSender.ok(new
718
		// ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(),
719
		// headers,HttpStatus.OK));
720
		/*
721
		 * ResponseEntity<byte[]> response = new
722
		 * ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(), headers,
723
		 * HttpStatus.OK); return response;
724
		 */
725
 
726
	}
727
 
26745 amit.gupta 728
	@RequestMapping(value = "/store/listing", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
26774 amit.gupta 729
	public ResponseEntity<?> getStoresListing(HttpServletRequest request) throws Exception {
26745 amit.gupta 730
		List<WebListing> webListings = webListingRepository.selectAllWebListing(Optional.of(true));
28287 amit.gupta 731
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
26745 amit.gupta 732
		for (WebListing webListing : webListings) {
28287 amit.gupta 733
			webListing.setFofoCatalogResponses(getDealResponses(userInfo, webListing));
26745 amit.gupta 734
		}
735
		return responseSender.ok(webListings);
736
	}
737
 
28287 amit.gupta 738
	private List<FofoCatalogResponse> getDealResponses(UserInfo userInfo, WebListing webListing)
739
			throws ProfitMandiBusinessException {
740
		List<Integer> webProducts = webProductListingRepository.selectAllByWebListingId(webListing.getId()).stream()
741
				.filter(x -> x.getRank() > 0).map(x -> x.getEntityId()).collect(Collectors.toList());
742
		if (webProducts.size() == 0) {
743
			return new ArrayList<>();
744
		}
745
		RestClient rc = new RestClient();
746
		Map<String, String> params = new HashMap<>();
747
		List<String> mandatoryQ = new ArrayList<>();
748
		mandatoryQ.add(String.format(
749
				"+{!parent which=\"catalogId_i:" + StringUtils.join(webProducts, " ") + "\"} tagId_i:(%s)",
750
				StringUtils.join(TAG_IDS, " ")));
751
		params.put("q", StringUtils.join(mandatoryQ, " "));
752
		params.put("fl", "*, [child parentFilter=id:catalog*]");
753
		// params.put("sort", "create_s desc");
754
		params.put("start", String.valueOf(0));
755
		params.put("rows", String.valueOf(100));
756
		params.put("wt", "json");
757
		String response = null;
758
		try {
759
			response = rc.get(SchemeType.HTTP, "50.116.10.120", 8984, "solr/demo/select", params);
760
		} catch (HttpHostConnectException e) {
761
			throw new ProfitMandiBusinessException("", "", "Could not connect to host");
762
		}
763
		JSONObject solrResponseJSONObj = new JSONObject(response).getJSONObject("response");
764
		JSONArray docs = solrResponseJSONObj.getJSONArray("docs");
765
		List<FofoCatalogResponse> dealResponse = getCatalogResponse(docs, false, userInfo.getRetailerId());
766
		return dealResponse;
767
	}
768
 
26652 amit.gupta 769
	@RequestMapping(value = "/store/cart", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
770
	@ApiImplicitParams({
26651 amit.gupta 771
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
26652 amit.gupta 772
	@ApiOperation(value = "Get brand list and count for category")
773
	public ResponseEntity<?> cart(HttpServletRequest request, @RequestBody AddCartRequest cartRequest)
774
			throws Exception {
26923 amit.gupta 775
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
776
		Integer storeId = userInfo.getRetailerId();
777
		ValidateCartResponse vc = new ValidateCartResponse(this.validateCart(storeId, cartRequest.getCartItems()),
778
				"Success", "Items added to cart successfully");
779
		return responseSender.ok(vc);
780
	}
781
 
782
	// Validate Cart for B2C Customers
783
	private CartResponse validateCart(int storeId, List<CartItem> cartItems) throws Exception {
784
		cartItems = cartItems.stream().filter(x -> x.getQuantity() > 0).collect(Collectors.toList());
785
		List<Integer> itemIds = cartItems.stream().map(x -> x.getItemId()).collect(Collectors.toList());
786
		Map<Integer, AvailabilityModel> inventoryItemAvailabilityMap = inventoryService.getStoreAndOurStock(storeId,
787
				itemIds);
26607 amit.gupta 788
		CartResponse cartResponse = new CartResponse();
26612 amit.gupta 789
		List<CartItemResponseModel> cartItemResponseModels = new ArrayList<>();
790
		cartResponse.setCartItems(cartItemResponseModels);
26607 amit.gupta 791
		Set<Integer> itemsIdsSet = new HashSet<>(itemIds);
26668 amit.gupta 792
		logger.info("Store Id {}, Item Ids {}", storeId, itemsIdsSet);
26607 amit.gupta 793
 
794
		Map<Integer, Item> itemsMap = itemRepository.selectByIds(itemsIdsSet).stream()
795
				.collect(Collectors.toMap(x -> x.getId(), x -> x));
796
 
26923 amit.gupta 797
		Map<Integer, TagListing> tagListingMap = tagListingRepository
26607 amit.gupta 798
				.selectByItemIdsAndTagIds(new HashSet<>(itemIds), new HashSet<>(Arrays.asList(4))).stream()
799
				.collect(Collectors.toMap(x -> x.getItemId(), x -> x));
800
 
801
		List<Integer> catalogIds = itemsMap.values().stream().map(x -> x.getCatalogItemId())
802
				.collect(Collectors.toList());
803
 
804
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
805
 
806
		// cartResponse.getCartItems()
26923 amit.gupta 807
		int cartMessageChanged = 0;
808
		int cartMessageOOS = 0;
809
		int totalAmount = 0;
810
		int totalQty = 0;
811
		for (CartItem cartItem : cartItems) {
26607 amit.gupta 812
			Item item = itemsMap.get(cartItem.getItemId());
26923 amit.gupta 813
			TagListing tagListing = tagListingMap.get(cartItem.getItemId());
814
			Float cashback = schemeService.getItemSchemeCashBack().get(cartItem.getItemId());
815
			cashback = cashback == null ? 0 : cashback;
816
			float itemSellingPrice = tagListing.getMop() - cashback;
26607 amit.gupta 817
			CartItemResponseModel cartItemResponseModel = new CartItemResponseModel();
26923 amit.gupta 818
			cartItemResponseModel.setSellingPrice(cartItem.getSellingPrice());
819
			if (itemSellingPrice != cartItem.getSellingPrice()) {
820
				cartItemResponseModel.setSellingPrice(itemSellingPrice);
821
				cartMessageChanged++;
822
			}
26628 amit.gupta 823
			int estimate = -2;
27025 tejbeer 824
			LocalDateTime promiseDeliveryTime = LocalDateTime.now();
26923 amit.gupta 825
			int qtyRequired = (int) cartItem.getQuantity();
826
			AvailabilityModel availabilityModel = inventoryItemAvailabilityMap.get(cartItem.getItemId());
827
			cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
828
			if (availabilityModel.getStoreAvailability() >= qtyRequired) {
829
				estimate = 0;
830
			} else if (availabilityModel.getWarehouseAvailability() >= qtyRequired) {
26628 amit.gupta 831
				estimate = 2;
26923 amit.gupta 832
			} else if (availabilityModel.getStoreAvailability() > 0) {
833
				estimate = 0;
834
				qtyRequired = availabilityModel.getStoreAvailability();
835
				cartMessageChanged++;
836
			} else if (availabilityModel.getWarehouseAvailability() > 0) {
837
				qtyRequired = availabilityModel.getWarehouseAvailability();
838
				estimate = 2;
839
				cartMessageChanged++;
26620 amit.gupta 840
			} else {
26923 amit.gupta 841
				qtyRequired = 0;
26926 amit.gupta 842
				cartMessageChanged++;
26607 amit.gupta 843
			}
26923 amit.gupta 844
			cartItemResponseModel.setQuantity(qtyRequired);
26630 amit.gupta 845
			if (estimate >= 0 && LocalTime.now().isAfter(CUTOFF_TIME)) {
26628 amit.gupta 846
				estimate = estimate + 1;
27025 tejbeer 847
				promiseDeliveryTime = promiseDeliveryTime.plusDays(3);
26628 amit.gupta 848
			}
26923 amit.gupta 849
			totalQty += qtyRequired;
850
			totalAmount += qtyRequired * itemSellingPrice;
26628 amit.gupta 851
			cartItemResponseModel.setEstimate(estimate);
26616 amit.gupta 852
			cartItemResponseModel.setTitle(item.getItemDescriptionNoColor());
26614 amit.gupta 853
			cartItemResponseModel.setItemId(cartItem.getItemId());
26615 amit.gupta 854
			cartItemResponseModel.setMinBuyQuantity(1);
26923 amit.gupta 855
			cartItemResponseModel.setQuantity(qtyRequired);
26621 amit.gupta 856
			cartItemResponseModel.setQuantityStep(1);
27025 tejbeer 857
			cartItemResponseModel.setPromiseDelivery(promiseDeliveryTime);
26923 amit.gupta 858
			cartItemResponseModel.setMaxQuantity(availabilityModel.getMaxAvailability());
26607 amit.gupta 859
			cartItemResponseModel.setCatalogItemId(item.getCatalogItemId());
860
			cartItemResponseModel.setImageUrl(contentMap.get(item.getCatalogItemId()).getString("imageUrl_s"));
861
			cartItemResponseModel.setColor(item.getColor());
26620 amit.gupta 862
			cartItemResponseModels.add(cartItemResponseModel);
26607 amit.gupta 863
		}
26923 amit.gupta 864
		cartResponse.setCartItems(cartItemResponseModels);
865
		cartResponse.setCartMessageChanged(cartMessageChanged);
866
		cartResponse.setCartMessageOOS(cartMessageOOS);
867
		int maxEstimate = cartItemResponseModels.stream().mapToInt(x -> x.getEstimate()).max().getAsInt();
868
		cartResponse.setMaxEstimate(maxEstimate);
869
		cartResponse.setTotalAmount(totalAmount);
870
		cartResponse.setTotalQty(totalQty);
26652 amit.gupta 871
 
26923 amit.gupta 872
		return cartResponse;
873
 
26648 amit.gupta 874
	}
26607 amit.gupta 875
 
27030 amit.gupta 876
	@RequestMapping(value = "/store/partnerStock", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
877
	public ResponseEntity<?> partnerStock(HttpServletRequest request,
878
			@RequestParam(value = "categoryId", required = false, defaultValue = "3") String categoryId,
879
			@RequestParam(value = "offset") String offset, @RequestParam(value = "limit") String limit,
880
			@RequestParam(value = "sort", required = false) String sort,
881
			@RequestParam(value = "brand", required = false) String brand,
882
			@RequestParam(value = "subCategoryId", required = false) int subCategoryId,
883
			@RequestParam(value = "q", required = false) String queryTerm,
28287 amit.gupta 884
			@RequestParam(required = false) String listing,
885
			@RequestParam(required = false, defaultValue = "true") boolean partnerStockOnly) throws Throwable {
27030 amit.gupta 886
		List<FofoCatalogResponse> dealResponse = new ArrayList<>();
887
		UserInfo userInfo = (UserInfo) request.getAttribute("userInfo");
28269 amit.gupta 888
		FofoStore fs = fofoStoreRepository.selectByRetailerId(userInfo.getRetailerId());
889
		sort = "w" + fs.getWarehouseId() + "_i desc";
27045 tejbeer 890
		dealResponse = this.getCatalogResponse(
28314 amit.gupta 891
				commonSolrService.getSolrDocs(queryTerm, categoryId, offset, limit, sort, brand, subCategoryId, false),
892
				false, userInfo.getRetailerId());
27030 amit.gupta 893
		return responseSender.ok(dealResponse);
894
	}
895
 
26909 amit.gupta 896
	private List<FofoCatalogResponse> getCatalogResponse(JSONArray docs, boolean hotDeal, int fofoId)
26607 amit.gupta 897
			throws ProfitMandiBusinessException {
26909 amit.gupta 898
		Map<Integer, Integer> ourItemAvailabilityMap = null;
899
		Map<Integer, Integer> partnerStockAvailabilityMap = null;
26607 amit.gupta 900
		List<FofoCatalogResponse> dealResponse = new ArrayList<>();
901
		List<Integer> tagIds = Arrays.asList(4);
902
		if (docs.length() > 0) {
903
			HashSet<Integer> itemsSet = new HashSet<>();
904
			for (int i = 0; i < docs.length(); i++) {
905
				JSONObject doc = docs.getJSONObject(i);
906
				if (doc.has("_childDocuments_")) {
907
					for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
908
						JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
909
						int itemId = childItem.getInt("itemId_i");
910
						itemsSet.add(itemId);
911
					}
912
				}
913
			}
914
			if (itemsSet.size() == 0) {
915
				return dealResponse;
916
			}
28269 amit.gupta 917
			if (fofoId > 0) {
26909 amit.gupta 918
				partnerStockAvailabilityMap = currentInventorySnapshotRepository.selectItemsStock(fofoId).stream()
919
						.collect(Collectors.toMap(x -> x.getItemId(), x -> x.getAvailability()));
920
			}
28287 amit.gupta 921
			ourItemAvailabilityMap = saholicInventoryService.getTotalAvailabilityByItemIds(new ArrayList<>(itemsSet));
26607 amit.gupta 922
		}
923
 
924
		for (int i = 0; i < docs.length(); i++) {
925
			Map<Integer, FofoAvailabilityInfo> fofoAvailabilityInfoMap = new HashMap<>();
926
			JSONObject doc = docs.getJSONObject(i);
927
			FofoCatalogResponse ffdr = new FofoCatalogResponse();
928
			ffdr.setCatalogId(doc.getInt("catalogId_i"));
929
			ffdr.setImageUrl(doc.getString("imageUrl_s"));
930
			ffdr.setTitle(doc.getString("title_s"));
28374 amit.gupta 931
			List<WebOffer> webOffers = webOfferRepository.selectAllActiveOffers().get(ffdr.getCatalogId());
28391 tejbeer 932
			if (webOffers != null && webOffers.size() > 0) {
28428 amit.gupta 933
				ffdr.setOffers(webOffers.stream().map(x -> x.getTitle()).collect(Collectors.toList()));
28374 amit.gupta 934
			}
26607 amit.gupta 935
			try {
936
				ffdr.setFeature(doc.getString("feature_s"));
937
			} catch (Exception e) {
938
				ffdr.setFeature(null);
939
			}
940
			ffdr.setBrand(doc.getJSONArray("brand_ss").getString(0));
941
			if (doc.has("_childDocuments_")) {
942
				for (int j = 0; j < doc.getJSONArray("_childDocuments_").length(); j++) {
943
					JSONObject childItem = doc.getJSONArray("_childDocuments_").getJSONObject(j);
944
					int itemId = childItem.getInt("itemId_i");
945
					float sellingPrice = (float) childItem.getDouble("sellingPrice_f");
946
					if (fofoAvailabilityInfoMap.containsKey(itemId)) {
947
						if (fofoAvailabilityInfoMap.get(itemId).getSellingPrice() > sellingPrice) {
948
							fofoAvailabilityInfoMap.get(itemId).setSellingPrice(sellingPrice);
949
							fofoAvailabilityInfoMap.get(itemId).setMop((float) childItem.getDouble("mop_f"));
950
						}
951
					} else {
952
						FofoAvailabilityInfo fdi = new FofoAvailabilityInfo();
26909 amit.gupta 953
						fdi.setSellingPrice(sellingPrice);
954
						fdi.setMrp(childItem.getDouble("mrp_f"));
26607 amit.gupta 955
						fdi.setMop((float) childItem.getDouble("mop_f"));
956
						fdi.setColor(childItem.has("color_s") ? childItem.getString("color_s") : "");
957
						fdi.setTagId(childItem.getInt("tagId_i"));
958
						fdi.setItem_id(itemId);
26909 amit.gupta 959
						Float cashBack = schemeService.getItemSchemeCashBack().get(itemId);
960
						cashBack = cashBack == null ? 0 : cashBack;
28391 tejbeer 961
						// TODO:Dont commit
962
						// fdi.setCashback(Math.min(100, fdi.getMop()));
28405 amit.gupta 963
						fdi.setCashback(cashBack);
26673 amit.gupta 964
						fdi.setMinBuyQuantity(1);
28313 amit.gupta 965
						int partnerAvailability = partnerStockAvailabilityMap.get(itemId) == null ? 0
966
								: partnerStockAvailabilityMap.get(itemId);
28287 amit.gupta 967
						int ourStockAvailability = ourItemAvailabilityMap.get(itemId) == null ? 0
968
								: Math.max(0, ourItemAvailabilityMap.get(itemId));
28313 amit.gupta 969
						fdi.setActive(partnerAvailability > 0);
28467 tejbeer 970
						// fdi.setActive(true);
28287 amit.gupta 971
						fdi.setAvailability(Math.min(5, ourStockAvailability + partnerAvailability));
26607 amit.gupta 972
						fdi.setQuantityStep(1);
28269 amit.gupta 973
						fdi.setMaxQuantity(fdi.getAvailability());
26607 amit.gupta 974
						fofoAvailabilityInfoMap.put(itemId, fdi);
975
					}
976
				}
977
			}
978
			if (fofoAvailabilityInfoMap.values().size() > 0) {
28313 amit.gupta 979
				ffdr.setItems(fofoAvailabilityInfoMap.values().stream()
980
						.sorted(Comparator.comparing(FofoAvailabilityInfo::isActive, Comparator.reverseOrder())
981
								.thenComparingInt(y -> -y.getAvailability()))
982
						.collect(Collectors.toList()));
26607 amit.gupta 983
				dealResponse.add(ffdr);
984
			}
985
		}
28314 amit.gupta 986
		return dealResponse.stream()
987
				.sorted(Comparator
988
						.comparing(FofoCatalogResponse::getItems,
989
								(s1, s2) -> (s2.get(0).isActive() ? 1 : 0) - (s1.get(0).isActive() ? 1 : 0))
990
						.thenComparing(FofoCatalogResponse::getItems,
991
								(x, y) -> y.get(0).getAvailability() - x.get(0).getAvailability()))
992
				.collect(Collectors.toList());
26607 amit.gupta 993
	}
26923 amit.gupta 994
 
995
	@GetMapping(value = "store/order-status/{pendingOrderId}")
27028 tejbeer 996
	public ResponseEntity<?> orderStatus(HttpServletRequest request, @PathVariable int pendingOrderId)
997
			throws Exception {
26923 amit.gupta 998
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderId);
999
		List<PendingOrderItem> pendingOrderItems = pendingOrderItemRepository.selectByOrderId(pendingOrder.getId());
1000
		List<Integer> catalogIds = new ArrayList<>();
27028 tejbeer 1001
		for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
26923 amit.gupta 1002
			Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1003
			pendingOrderItem.setItemName(item.getItemDescription());
1004
			catalogIds.add(item.getCatalogItemId());
1005
		}
1006
		Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
27028 tejbeer 1007
		for (PendingOrderItem pendingOrderItem : pendingOrderItems) {
26923 amit.gupta 1008
			Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1009
			JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1010
			pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1011
		}
1012
		pendingOrder.setPendingOrderItems(pendingOrderItems);
27069 tejbeer 1013
 
26923 amit.gupta 1014
		return responseSender.ok(pendingOrder);
1015
	}
1016
 
26833 amit.gupta 1017
	@RequestMapping(value = "/store/addresses/{customerId}", method = RequestMethod.GET)
1018
	public ResponseEntity<?> getAll(HttpServletRequest request, @PathVariable int customerId) throws Throwable {
27045 tejbeer 1019
		return responseSender.ok(customerAddressRepository.selectByActiveCustomerId(customerId));
26788 amit.gupta 1020
	}
26833 amit.gupta 1021
 
26857 amit.gupta 1022
	@RequestMapping(value = "/store/address", method = RequestMethod.POST)
1023
	public ResponseEntity<?> addAddress(HttpServletRequest request, @RequestBody CustomerAddress customerAddress)
1024
			throws Throwable {
1025
		customerAddressRepository.persist(customerAddress);
1026
		return responseSender.ok(customerAddress);
1027
	}
1028
 
27045 tejbeer 1029
	@RequestMapping(value = "/store/deactivateCustomerAddress", method = RequestMethod.POST)
1030
	public ResponseEntity<?> deactivateAddresss(HttpServletRequest request, @RequestParam int id) throws Throwable {
1031
		CustomerAddress cust = customerAddressRepository.selectById(id);
1032
		cust.setActive(false);
1033
		return responseSender.ok(cust);
1034
	}
1035
 
26861 tejbeer 1036
	@RequestMapping(value = "/store/updateCustomer", method = RequestMethod.POST)
1037
	public ResponseEntity<?> updateCustomerProfile(HttpServletRequest request, @RequestBody Customer customer)
1038
			throws Throwable {
1039
		Customer cust = customerRepository.selectById(customer.getId());
1040
		cust.setGender(customer.getGender());
26867 tejbeer 1041
		cust.setProfileImageId(customer.getProfileImageId());
26861 tejbeer 1042
		cust.setDob(customer.getDob());
1043
		return responseSender.ok(cust);
1044
	}
28345 tejbeer 1045
 
28322 amit.gupta 1046
	@RequestMapping(value = "/stores/{state}/{city}/{storeCode}", method = RequestMethod.GET)
28345 tejbeer 1047
	public void getStoreIndex(HttpServletResponse response, HttpServletRequest request, @PathVariable String state,
1048
			@PathVariable String city, @PathVariable String storeCode) throws Throwable {
28325 amit.gupta 1049
		logger.info("Store code {}", storeCode);
28345 tejbeer 1050
		Map<String, Integer> map = retailerService.getStoreCodeRetailerMap();
1051
		logger.info("retailer id {}", map.get(storeCode));
28336 amit.gupta 1052
		String retailerName = retailerService.getAllFofoRetailers().get(map.get(storeCode)).getBusinessName();
28322 amit.gupta 1053
		String html = partnerIndexService.getPartnerIndexHtml();
28332 amit.gupta 1054
		logger.info("html {}", html);
28327 amit.gupta 1055
		html = html.replace("Buy Mobiles and Accessories at exciting prices - SmartDukaan",
28338 amit.gupta 1056
				String.format("%s is now ONLINE. Buy Mobiles, Accessories & more | SmartDukaan", retailerName));
28334 amit.gupta 1057
		response.getWriter().write(html);
28322 amit.gupta 1058
	}
26861 tejbeer 1059
 
27048 tejbeer 1060
	@RequestMapping(value = "/cancelPendingOrderItem", method = RequestMethod.POST)
1061
	public ResponseEntity<?> cancelPendingOrderItem(HttpServletRequest request, @RequestParam int id,
27045 tejbeer 1062
 
28354 tejbeer 1063
			@RequestParam String statusDescription, @RequestParam String reason) throws Exception {
27048 tejbeer 1064
 
1065
		PendingOrderItem pendingOrderItem = pendingOrderItemRepository.selectById(id);
27057 tejbeer 1066
		PendingOrder pendingOrder = pendingOrderRepository.selectById(pendingOrderItem.getOrderId());
28304 amit.gupta 1067
		Customer customer = customerRepository.selectById(pendingOrder.getCustomerId());
27048 tejbeer 1068
		if (pendingOrderItem.getBilledTimestamp() == null) {
1069
			pendingOrderItem.setStatus(OrderStatus.CANCELLED);
28354 tejbeer 1070
			pendingOrderItem.setRemark(reason);
1071
			pendingOrderItem.setStatusDescription("cancel by self");
28304 amit.gupta 1072
			pendingOrderItem.setCancelledTimestamp(LocalDateTime.now());
27048 tejbeer 1073
			List<OrderStatus> status = pendingOrderItemRepository.selectByOrderId(pendingOrderItem.getOrderId())
1074
					.stream().map(x -> x.getStatus()).collect(Collectors.toList());
1075
 
28345 tejbeer 1076
			if (!status.contains(OrderStatus.PENDING) && !status.contains(OrderStatus.PROCESSING)
1077
					&& !status.contains(OrderStatus.BILLED) && !status.contains(OrderStatus.UNSETTLED)
1078
					&& !status.contains(OrderStatus.CLAIMED)) {
27048 tejbeer 1079
				pendingOrder.setStatus(OrderStatus.CLOSED);
1080
			}
1081
 
1082
			pendingOrderItemRepository.persist(pendingOrderItem);
28304 amit.gupta 1083
			String itemDescription = itemRepository.selectById(pendingOrderItem.getItemId()).getItemDescription();
28313 amit.gupta 1084
			otpProcessor.sendSms(OtpProcessor.SELF_CANCELLED_TEMPLATE_ID,
1085
					String.format(OtpProcessor.SELF_CANCELLED_TEMPLATE, pendingOrder.getId(),
28304 amit.gupta 1086
							StringUtils.abbreviate(itemDescription, 30),
28313 amit.gupta 1087
							FormattingUtils.format(pendingOrderItem.getCancelledTimestamp())),
28304 amit.gupta 1088
					customer.getMobileNumber());
28339 tejbeer 1089
 
1090
			List<Integer> catalogIds = new ArrayList<>();
1091
 
1092
			Item item = itemRepository.selectById(pendingOrderItem.getItemId());
1093
			pendingOrderItem.setItemName(item.getItemDescription());
1094
			catalogIds.add(item.getCatalogItemId());
1095
 
1096
			Map<Integer, JSONObject> contentMap = commonSolrService.getContentByCatalogIds(catalogIds);
1097
			JSONObject jsonObj = contentMap.get(item.getCatalogItemId());
1098
			pendingOrderItem.setImgUrl(jsonObj.getString("imageUrl_s"));
1099
			pendingOrder.setPendingOrderItems(Arrays.asList(pendingOrderItem));
1100
			CustomerAddress customerAddress = customerAddressRepository.selectById(pendingOrder.getCustomerAddressId());
1101
 
1102
			DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy h:mm a");
1103
 
1104
			Map<String, Object> emailModel = new HashMap<>();
1105
			emailModel.put("customer", customerAddress);
1106
			emailModel.put("pendingOrder", pendingOrder);
1107
			emailModel.put("date", dateTimeFormatter);
1108
 
1109
			String[] customerEmail = null;
1110
			if (customer.getEmailId() != null) {
28355 tejbeer 1111
				customerEmail = new String[] { customer.getEmailId() };
28339 tejbeer 1112
 
28355 tejbeer 1113
				List<String> bccTo = Arrays.asList("tejbeer.kaur@smartdukaan.com");
1114
 
28339 tejbeer 1115
				emailService.sendMailWithAttachments("Order Cancellation", "order-cancellation.vm", emailModel,
28355 tejbeer 1116
						customerEmail, null, bccTo.toArray(new String[0]));
28339 tejbeer 1117
 
1118
			}
27048 tejbeer 1119
		}
1120
 
1121
		return responseSender.ok(true);
1122
 
1123
	}
29515 tejbeer 1124
 
1125
	@RequestMapping(value = "/store/checkEligibilityStoreOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1126
	public ResponseEntity<?> checkEligibilityStoreOffers(HttpServletRequest request, @RequestParam(value = "id") int id)
1127
			throws Exception {
1128
 
1129
		boolean eligibility = false;
1130
 
1131
		List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerId(id);
1132
 
1133
		if (!scratchOffers.isEmpty()) {
1134
			eligibility = true;
1135
 
1136
		} else {
1137
			eligibility = false;
1138
		}
1139
 
1140
		return responseSender.ok(eligibility);
1141
	}
1142
 
1143
	@RequestMapping(value = "/store/ScratchOffers", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1144
	public ResponseEntity<?> scratchOffers(HttpServletRequest request, @RequestParam(value = "id") int id)
1145
			throws Exception {
1146
 
1147
		List<ScratchOffer> scratchOffers = scratchOfferRepository.selectBycCustomerId(id);
1148
		for (ScratchOffer so : scratchOffers) {
1149
 
1150
			if (so.getOfferName() != null) {
1151
				if (so.getOfferName().equals(ScratchedGift.OTSR)) {
1152
					so.setExpiredTimestamp(so.getCreatedTimestamp().plusDays(1));
29539 tejbeer 1153
				} else if (so.getOfferName().equals(ScratchedGift.ADTL)) {
29515 tejbeer 1154
					so.setExpiredTimestamp(so.getCreatedTimestamp().plusDays(1));
1155
				}
1156
			}
1157
			if (LocalDateTime.now().isAfter(so.getUnlockedAt())) {
1158
				so.setUnlocked(true);
1159
			} else {
1160
				so.setUnlocked(false);
1161
			}
1162
		}
1163
 
1164
		return responseSender.ok(scratchOffers);
1165
	}
1166
 
1167
	@RequestMapping(value = "/store/ScratchedOffer", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1168
	public ResponseEntity<?> scratchedOffer(HttpServletRequest request, @RequestParam(value = "id") int id)
1169
			throws Exception {
1170
 
1171
		ScratchOffer scratchOffer = scratchOfferRepository.selectById(id);
1172
		scratchOffer.setScratched(true);
1173
		scratchOffer.setScracthedAt(LocalDateTime.now());
1174
 
1175
		return responseSender.ok(true);
1176
	}
1177
 
26607 amit.gupta 1178
}