Subversion Repositories SmartDukaan

Rev

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