Subversion Repositories SmartDukaan

Rev

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

Rev Author Line No. Line
25899 tejbeer 1
package com.spice.profitmandi.web.controller;
2
 
30487 tejbeer 3
import java.io.ByteArrayInputStream;
4
import java.io.IOException;
5
import java.io.InputStream;
30416 tejbeer 6
import java.time.LocalDate;
7
import java.time.LocalDateTime;
30433 tejbeer 8
import java.time.format.DateTimeFormatter;
30416 tejbeer 9
import java.util.ArrayList;
10
import java.util.Arrays;
11
import java.util.Comparator;
12
import java.util.HashMap;
13
import java.util.List;
14
import java.util.Map;
15
import java.util.Map.Entry;
16
import java.util.Set;
17
import java.util.stream.Collectors;
18
 
19
import javax.servlet.http.HttpServletRequest;
20
 
30433 tejbeer 21
import org.apache.commons.csv.CSVRecord;
30416 tejbeer 22
import org.apache.logging.log4j.LogManager;
23
import org.apache.logging.log4j.Logger;
24
import org.springframework.beans.factory.annotation.Autowired;
30487 tejbeer 25
import org.springframework.core.io.InputStreamResource;
30416 tejbeer 26
import org.springframework.format.annotation.DateTimeFormat;
30487 tejbeer 27
import org.springframework.http.HttpHeaders;
28
import org.springframework.http.HttpStatus;
30416 tejbeer 29
import org.springframework.http.MediaType;
30
import org.springframework.http.ResponseEntity;
31
import org.springframework.stereotype.Controller;
32
import org.springframework.transaction.annotation.Transactional;
33
import org.springframework.ui.Model;
34
import org.springframework.web.bind.annotation.RequestBody;
35
import org.springframework.web.bind.annotation.RequestMapping;
36
import org.springframework.web.bind.annotation.RequestMethod;
37
import org.springframework.web.bind.annotation.RequestParam;
30433 tejbeer 38
import org.springframework.web.bind.annotation.RequestPart;
39
import org.springframework.web.multipart.MultipartFile;
30416 tejbeer 40
 
30487 tejbeer 41
import com.mongodb.DBObject;
25899 tejbeer 42
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
30487 tejbeer 43
import com.spice.profitmandi.common.model.BrandStockPrice;
25952 tejbeer 44
import com.spice.profitmandi.common.model.CustomRetailer;
27117 tejbeer 45
import com.spice.profitmandi.common.model.ProfitMandiConstants;
30433 tejbeer 46
import com.spice.profitmandi.common.util.FileUtil;
25899 tejbeer 47
import com.spice.profitmandi.common.web.util.ResponseSender;
48
import com.spice.profitmandi.dao.entity.auth.AuthUser;
30077 tejbeer 49
import com.spice.profitmandi.dao.entity.auth.PartnerCollectionPlan;
30416 tejbeer 50
import com.spice.profitmandi.dao.entity.auth.PartnerCollectionRemark;
30077 tejbeer 51
import com.spice.profitmandi.dao.entity.auth.PartnerSecondaryPlan;
30416 tejbeer 52
import com.spice.profitmandi.dao.entity.cs.Ticket;
53
import com.spice.profitmandi.dao.entity.cs.TicketCategory;
54
import com.spice.profitmandi.dao.entity.cs.TicketSubCategory;
25899 tejbeer 55
import com.spice.profitmandi.dao.entity.dtr.User;
25952 tejbeer 56
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
28935 tejbeer 57
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
30087 tejbeer 58
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
28935 tejbeer 59
import com.spice.profitmandi.dao.entity.fofo.PartnerOnBoardingPanel;
25952 tejbeer 60
import com.spice.profitmandi.dao.entity.user.FranchiseeActivity;
61
import com.spice.profitmandi.dao.entity.user.FranchiseeVisit;
25899 tejbeer 62
import com.spice.profitmandi.dao.entity.user.Lead;
63
import com.spice.profitmandi.dao.entity.user.LeadActivity;
30416 tejbeer 64
import com.spice.profitmandi.dao.enumuration.auth.CollectionRemark;
25952 tejbeer 65
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeActivityStatus;
66
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeVisitStatus;
25899 tejbeer 67
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
28935 tejbeer 68
import com.spice.profitmandi.dao.enumuration.dtr.StoreTimeline;
30416 tejbeer 69
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
70
import com.spice.profitmandi.dao.model.OnBoardingTimelineModel;
71
import com.spice.profitmandi.dao.model.PartnerCollectionAchievementModel;
72
import com.spice.profitmandi.dao.model.PartnerCollectionPlanModel;
73
import com.spice.profitmandi.dao.model.PartnerCollectionRemarkModel;
74
import com.spice.profitmandi.dao.model.PartnerSecondaryPlanModel;
75
import com.spice.profitmandi.dao.model.PartnerTargetAchievementModel;
76
import com.spice.profitmandi.dao.model.TargetModel;
77
import com.spice.profitmandi.dao.model.TicketViewModel;
78
import com.spice.profitmandi.dao.model.UserCart;
25899 tejbeer 79
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
30104 tejbeer 80
import com.spice.profitmandi.dao.repository.auth.AuthUserPartnerMappingRepository;
30077 tejbeer 81
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionPlanRepository;
30416 tejbeer 82
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionRemarkRepository;
30077 tejbeer 83
import com.spice.profitmandi.dao.repository.auth.PartnerSecondaryPlanRepository;
25952 tejbeer 84
import com.spice.profitmandi.dao.repository.cs.CsService;
30077 tejbeer 85
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
30416 tejbeer 86
import com.spice.profitmandi.dao.repository.cs.TicketCategoryRepository;
87
import com.spice.profitmandi.dao.repository.cs.TicketRepository;
88
import com.spice.profitmandi.dao.repository.cs.TicketSubCategoryRepository;
89
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
90
import com.spice.profitmandi.dao.repository.dtr.FranchiseeActivityRepository;
91
import com.spice.profitmandi.dao.repository.dtr.FranchiseeVisitRepository;
92
import com.spice.profitmandi.dao.repository.dtr.LeadActivityRepository;
93
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
30487 tejbeer 94
import com.spice.profitmandi.dao.repository.dtr.Mongo;
30416 tejbeer 95
import com.spice.profitmandi.dao.repository.dtr.PartnerOnBoardingPanelRepository;
96
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
97
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
30087 tejbeer 98
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
30077 tejbeer 99
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
100
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
30348 tejbeer 101
import com.spice.profitmandi.service.PartnerCollectionService;
25952 tejbeer 102
import com.spice.profitmandi.service.user.RetailerService;
28935 tejbeer 103
import com.spice.profitmandi.service.user.StoreTimelineTatService;
25952 tejbeer 104
import com.spice.profitmandi.web.req.CreateFranchiseeRequest;
105
import com.spice.profitmandi.web.res.Partner;
30416 tejbeer 106
 
25899 tejbeer 107
import io.swagger.annotations.ApiImplicitParam;
108
import io.swagger.annotations.ApiImplicitParams;
109
 
110
@Controller
111
@Transactional(rollbackFor = Throwable.class)
112
public class LeadController {
113
	private static final Logger LOGGER = LogManager.getLogger(LeadController.class);
114
	@Autowired
115
	private ResponseSender<?> responseSender;
116
 
117
	@Autowired
118
	private AuthRepository authRepository;
119
 
120
	@Autowired
121
	private LeadRepository leadRepository;
122
 
123
	@Autowired
25952 tejbeer 124
	private CsService csService;
125
 
126
	@Autowired
127
	private UserRepository userRepository;
128
 
129
	@Autowired
130
	private UserAccountRepository userAccountRepository;
131
 
132
	@Autowired
133
	private com.spice.profitmandi.dao.repository.user.UserRepository userUserRepository;
134
 
135
	@Autowired
136
	private RetailerService retailerService;
137
 
138
	@Autowired
25899 tejbeer 139
	private LeadActivityRepository leadActivityRepository;
140
 
25952 tejbeer 141
	@Autowired
142
	private FranchiseeVisitRepository franchiseeVisitRepository;
143
 
144
	@Autowired
145
	private FranchiseeActivityRepository franchiseeActivityRepository;
146
 
28935 tejbeer 147
	@Autowired
148
	private PartnerOnBoardingPanelRepository partnerOnBoardingPanelRepository;
149
 
150
	@Autowired
151
	private FofoStoreRepository fofoStoreRepository;
152
 
153
	@Autowired
154
	private StoreTimelineTatService storeTimelineTatService;
155
 
30348 tejbeer 156
	@Autowired
157
	private PartnerCollectionService partnerCollectionService;
158
 
30416 tejbeer 159
	@Autowired
160
	private TicketRepository ticketRepository;
161
 
162
	@Autowired
163
	private TicketCategoryRepository ticketCategoryRepository;
164
 
165
	@Autowired
166
	private TicketSubCategoryRepository ticketSubCategoryRepository;
167
 
168
	@Autowired
169
	private PartnerCollectionRemarkRepository partnerCollectionRemarkRepository;
170
 
30487 tejbeer 171
	@Autowired
172
	private Mongo mongoClient;
173
 
174
	@Autowired
175
	private OrderRepository orderRepository;
176
 
177
	@Autowired
178
	private PositionRepository positionRepository;
179
 
180
	@Autowired
181
	private UserWalletRepository userWalletRepository;
182
 
183
	@Autowired
184
	private PartnerCollectionPlanRepository partnerCollectionPlanRepository;
185
 
186
	@Autowired
187
	private PartnerSecondaryPlanRepository partnerSecondaryPlanRepository;
188
 
189
	@Autowired
190
	private PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
191
 
192
	@Autowired
193
	private AuthUserPartnerMappingRepository authUserPartnerMappingRepository;
194
 
25899 tejbeer 195
	@RequestMapping(value = "/lead", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
196
	@ApiImplicitParams({
30294 tejbeer 197
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25899 tejbeer 198
	public ResponseEntity<?> LeadUser(HttpServletRequest request,
30294 tejbeer 199
			@RequestBody CreateRefferalRequest createRefferalRequest) throws Exception {
25899 tejbeer 200
		Lead lead = new Lead();
201
		lead.setFirstName(createRefferalRequest.getFirstName());
202
		lead.setLastName(createRefferalRequest.getLastName());
203
		lead.setLeadMobile(createRefferalRequest.getMobile());
204
		lead.setState(createRefferalRequest.getState());
205
		lead.setCity(createRefferalRequest.getCity());
206
		lead.setAddress(createRefferalRequest.getAddress());
207
		lead.setCreatedTimestamp(LocalDateTime.now());
208
		lead.setUpdatedTimestamp(LocalDateTime.now());
209
		lead.setStatus(createRefferalRequest.getStatus());
25979 tejbeer 210
		lead.setSource(createRefferalRequest.getSource());
28201 tejbeer 211
		lead.setNotinterestedReason(createRefferalRequest.getReason());
26244 tejbeer 212
		if (createRefferalRequest.getColorCheck() == true) {
213
			lead.setColor("Green");
214
		} else {
215
			lead.setColor("Yellow");
216
		}
25900 amit.gupta 217
		AuthUser authUser = authRepository.selectByGmailId(createRefferalRequest.getReffereeEmail());
218
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
219
		lead.setCreatedBy(authUserName);
220
		lead.setAuthId(authUser.getId());
25981 tejbeer 221
		lead.setAssignTo(authUser.getId());
25899 tejbeer 222
 
223
		leadRepository.persist(lead);
224
		LeadActivity leadActivity = new LeadActivity();
225
		leadActivity.setLeadId(lead.getId());
226
		leadActivity.setRemark(createRefferalRequest.getRemark());
227
 
228
		if (createRefferalRequest.getStatus().equals(LeadStatus.followUp)) {
229
			leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
26958 tejbeer 230
			leadActivity.setClosureTimestamp(createRefferalRequest.getClosureTimestamp());
27025 tejbeer 231
			lead.setClosureTimestamp(createRefferalRequest.getClosureTimestamp());
25899 tejbeer 232
		} else {
233
			leadActivity.setSchelduleTimestamp(null);
26958 tejbeer 234
			leadActivity.setClosureTimestamp(null);
27025 tejbeer 235
			lead.setClosureTimestamp(null);
25899 tejbeer 236
		}
237
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
238
		leadActivityRepository.persist(leadActivity);
239
 
240
		return responseSender.ok(true);
241
	}
242
 
243
	@RequestMapping(value = "/lead-description", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
244
	@ApiImplicitParams({
30294 tejbeer 245
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25899 tejbeer 246
	public ResponseEntity<?> leadDescription(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId,
30294 tejbeer 247
			@RequestParam(name = "status") LeadStatus status) throws ProfitMandiBusinessException {
25899 tejbeer 248
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
29434 amit.gupta 249
		List<Lead> leads = null;
30306 tejbeer 250
		LOGGER.info("emails" + status);
29434 amit.gupta 251
		if (status.equals(LeadStatus.followUp)) {
30306 tejbeer 252
 
253
			leads = leadRepository.selectLeadsScheduledBetweenDate(Arrays.asList(authUser.getId()), null, null);
254
			leads = leads.stream()
255
					.sorted(Comparator.comparing(Lead::getScheduledTimestamp,
256
							Comparator.nullsFirst(Comparator.reverseOrder())))
257
					.collect(Collectors
258
							.toList());/*
259
										 * Collections.sort(leads, (o1, o2) -> { if (o1.getScheduledTimestamp() != null
260
										 * && o2.getScheduledTimestamp() != null) { return
261
										 * o1.getScheduledTimestamp().isBefore(o2.getScheduledTimestamp()) ? -1 : 1; }
262
										 * else if (o1.getScheduledTimestamp() != null) { return 1; } else { return -1;
263
										 * } });
264
										 */
265
 
30294 tejbeer 266
		} else {
267
			leads = leadRepository.selectByAssignAuthIdAndStatus(authUser.getId(), status);
268
 
29434 amit.gupta 269
		}
25979 tejbeer 270
 
25899 tejbeer 271
		return responseSender.ok(leads);
272
 
273
	}
274
 
275
	@RequestMapping(value = "/getlead", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
276
	@ApiImplicitParams({
30294 tejbeer 277
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25899 tejbeer 278
	public ResponseEntity<?> getLead(HttpServletRequest request, @RequestParam(name = "id") int id)
279
			throws ProfitMandiBusinessException {
280
 
281
		List<LeadActivity> leadActivities = leadActivityRepository.selectBYLeadId(id);
29317 tejbeer 282
		Lead lead = leadRepository.selectById(id);
283
		lead.setLeadActivities(leadActivities);
284
		return responseSender.ok(lead);
25899 tejbeer 285
 
286
	}
287
 
25948 amit.gupta 288
	@RequestMapping(value = "/leadUpdate", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
25899 tejbeer 289
	@ApiImplicitParams({
30294 tejbeer 290
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25899 tejbeer 291
	public ResponseEntity<?> leadUpdate(HttpServletRequest request, @RequestParam(name = "id") int id,
30294 tejbeer 292
			@RequestParam(name = "status") LeadStatus status, @RequestParam(name = "colorCheck") Boolean colorCheck,
293
			@RequestParam(name = "remark") String remark, @RequestParam(name = "reason") String reason,
294
			@RequestParam(name = "schelduleTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime schelduleTimestamp,
295
			@RequestParam(name = "closureTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime closureTimestamp)
25899 tejbeer 296
			throws ProfitMandiBusinessException {
297
 
298
		Lead lead = leadRepository.selectById(id);
299
 
300
		LeadActivity leadActivity = new LeadActivity();
26250 tejbeer 301
		lead.setStatus(status);
28201 tejbeer 302
		lead.setNotinterestedReason(reason);
26250 tejbeer 303
		leadActivity.setRemark(remark);
304
		leadActivity.setLeadId(id);
305
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
306
		leadActivity.setSchelduleTimestamp(null);
26958 tejbeer 307
		leadActivity.setClosureTimestamp(null);
26250 tejbeer 308
		lead.setUpdatedTimestamp(LocalDateTime.now());
309
		if (colorCheck == true) {
310
			lead.setColor("Green");
311
		} else {
312
			lead.setColor("Yellow");
313
		}
314
		if (status == LeadStatus.followUp) {
25899 tejbeer 315
 
316
			leadActivity.setSchelduleTimestamp(schelduleTimestamp);
26958 tejbeer 317
			leadActivity.setClosureTimestamp(closureTimestamp);
27025 tejbeer 318
			lead.setClosureTimestamp(closureTimestamp);
26250 tejbeer 319
 
25899 tejbeer 320
		} else {
26250 tejbeer 321
 
25899 tejbeer 322
			leadActivity.setSchelduleTimestamp(null);
26958 tejbeer 323
			leadActivity.setClosureTimestamp(null);
27025 tejbeer 324
			lead.setClosureTimestamp(null);
26244 tejbeer 325
 
25899 tejbeer 326
		}
26250 tejbeer 327
		leadActivityRepository.persist(leadActivity);
25899 tejbeer 328
		return responseSender.ok(true);
329
 
330
	}
25952 tejbeer 331
 
27117 tejbeer 332
	@RequestMapping(value = ProfitMandiConstants.URL_NEW_LEAD, method = RequestMethod.POST)
333
	public ResponseEntity<?> newLead(HttpServletRequest request,
30294 tejbeer 334
			@RequestBody CreateRefferalRequest createRefferalRequest) throws ProfitMandiBusinessException {
27117 tejbeer 335
		LOGGER.info("requested url : " + request.getRequestURL().toString());
336
		Lead lead = new Lead();
337
		lead.setAddress(createRefferalRequest.getCity());
27625 tejbeer 338
		Long.parseLong(createRefferalRequest.getMobile());
28201 tejbeer 339
		if (createRefferalRequest.getMobile().length() != 10) {
340
			throw new ProfitMandiBusinessException("Mobile Number", createRefferalRequest.getMobile(),
341
					"Number should be of 10 digits");
27597 amit.gupta 342
		}
27117 tejbeer 343
		lead.setLeadMobile(createRefferalRequest.getMobile());
344
		lead.setCity(createRefferalRequest.getCity());
345
		lead.setState(createRefferalRequest.getState());
346
		lead.setLastName(createRefferalRequest.getLastName());
347
		if (lead.getState().equals("Uttar Pradesh")) {
29276 amit.gupta 348
			lead.setAssignTo(53);
27117 tejbeer 349
		} else if (lead.getState().equals("Haryana")) {
29276 amit.gupta 350
			lead.setAssignTo(53);
27117 tejbeer 351
		} else if (lead.getState().equals("Delhi")) {
29276 amit.gupta 352
			lead.setAssignTo(53);
27117 tejbeer 353
		} else {
28201 tejbeer 354
			// Assign to sm
27992 amit.gupta 355
			lead.setAssignTo(53);
28201 tejbeer 356
			// Assign to neha
357
			// lead.setAssignTo(1);
27117 tejbeer 358
		}
359
		lead.setAuthId(lead.getAssignTo());
360
		lead.setCreatedBy("daily-sync");
361
		lead.setSource("SD-WEB");
362
		lead.setFirstName(createRefferalRequest.getFirstName());
363
		lead.setStatus(LeadStatus.followUp);
364
		lead.setColor("yellow");
365
		lead.setCreatedTimestamp(LocalDateTime.now());
366
		lead.setUpdatedTimestamp(LocalDateTime.now());
367
		leadRepository.persist(lead);
368
 
369
		return responseSender.ok(true);
370
 
371
	}
372
 
25952 tejbeer 373
	@RequestMapping(value = "/getPartnersList", method = RequestMethod.GET)
374
	@ApiImplicitParams({
30294 tejbeer 375
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 376
	public ResponseEntity<?> getPartners(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId)
377
			throws ProfitMandiBusinessException {
378
 
25973 tejbeer 379
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
25952 tejbeer 380
 
381
		Map<String, Set<String>> storeGuyMap = csService.getAuthUserPartnerEmailMapping();
382
 
30288 tejbeer 383
		Set<String> emails = storeGuyMap.get(authUser.getEmailId());
25952 tejbeer 384
		LOGGER.info("emails" + emails);
385
		List<User> users = userRepository.selectAllByEmailIds(new ArrayList<>(emails));
386
		List<Partner> partners = new ArrayList<>();
387
		for (User user : users) {
388
 
389
			UserAccount uc = userAccountRepository.selectSaholicByUserId(user.getId());
390
			com.spice.profitmandi.dao.entity.user.User userInfo = userUserRepository.selectById(uc.getAccountKey());
391
			CustomRetailer customRetailer = retailerService.getFofoRetailer(userInfo.getId());
392
 
393
			Partner partner = new Partner();
394
			partner.setBusinessName(customRetailer.getBusinessName());
395
			partner.setPartnerId(customRetailer.getPartnerId());
396
			partner.setCartId(customRetailer.getCartId());
397
			partner.setEmail(customRetailer.getEmail());
398
			partner.setGstNumber(customRetailer.getGstNumber());
399
			partner.setDisplayName(customRetailer.getDisplayName());
400
			partner.setCity(customRetailer.getAddress().getCity());
401
			partner.setUserId(user.getId());
402
			partners.add(partner);
403
		}
404
		LOGGER.info("partners" + partners);
405
		return responseSender.ok(partners);
406
	}
407
 
408
	@RequestMapping(value = "/franchise-first-visit", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
409
	@ApiImplicitParams({
30294 tejbeer 410
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 411
	public ResponseEntity<?> FranchiseFirstVisit(HttpServletRequest request,
30294 tejbeer 412
			@RequestBody CreateFranchiseeRequest createFranchiseeRequest) throws Exception {
25952 tejbeer 413
 
414
		FranchiseeVisit franchiseeVisit = new FranchiseeVisit();
415
		franchiseeVisit.setFofoId(createFranchiseeRequest.getFofoId());
416
		CustomRetailer customRetailer = retailerService.getFofoRetailer(createFranchiseeRequest.getFofoId());
417
 
418
		franchiseeVisit.setPartnerName(customRetailer.getBusinessName());
419
		franchiseeVisit.setAgenda(createFranchiseeRequest.getAgenda());
420
		franchiseeVisit.setCreatedTimestamp(LocalDateTime.now());
421
		franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
422
		franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
30530 tejbeer 423
		franchiseeVisit.setScheduleTimestamp(createFranchiseeRequest.getFirstSchelduleTimestamp());
25952 tejbeer 424
		// change
25973 tejbeer 425
		AuthUser authUser = authRepository.selectByGmailId(createFranchiseeRequest.getCreatedBy());
25952 tejbeer 426
 
427
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
428
		franchiseeVisit.setCreatedBy(authUserName);
429
		franchiseeVisit.setAuthId(authUser.getId());
430
 
431
		franchiseeVisitRepository.persist(franchiseeVisit);
432
 
433
		return responseSender.ok(true);
434
	}
435
 
436
	@RequestMapping(value = "/franchise-visit", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
437
	@ApiImplicitParams({
30294 tejbeer 438
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 439
	public ResponseEntity<?> FranchiseVisit(HttpServletRequest request,
30294 tejbeer 440
			@RequestBody CreateFranchiseeRequest createFranchiseeRequest) throws Exception {
25952 tejbeer 441
 
442
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(createFranchiseeRequest.getId());
443
		franchiseeVisit.setFofoId(createFranchiseeRequest.getFofoId());
444
		CustomRetailer customRetailer = retailerService.getFofoRetailer(createFranchiseeRequest.getFofoId());
445
 
446
		franchiseeVisit.setPartnerName(customRetailer.getBusinessName());
447
		franchiseeVisit.setAgenda(createFranchiseeRequest.getAgenda());
448
		franchiseeVisit.setPartnerRemark(createFranchiseeRequest.getPartnerRemark());
449
		franchiseeVisit.setOutsideVisibity(createFranchiseeRequest.getOutsideVisibity());
450
		franchiseeVisit.setInstoreVisibility(createFranchiseeRequest.getInstoreVisibility());
451
		franchiseeVisit.setOutsideStock(createFranchiseeRequest.getOutsideStock());
452
		franchiseeVisit.setSystemKnowledge(createFranchiseeRequest.getSystemKnowledge());
453
		franchiseeVisit.setWorkingDevice(createFranchiseeRequest.getWorkingDevice());
454
		franchiseeVisit.setWorkingPrinter(createFranchiseeRequest.getWorkingPrinter());
455
		franchiseeVisit.setCarryBags(createFranchiseeRequest.getCarryBags());
456
		franchiseeVisit.setSmartdukaanTshirt(createFranchiseeRequest.getSmartdukaanTshirt());
457
		franchiseeVisit.setLatestDummies(createFranchiseeRequest.getLatestDummies());
458
		franchiseeVisit.setInvestment(createFranchiseeRequest.getInvestment());
459
		franchiseeVisit.setMtd(createFranchiseeRequest.getMtd());
460
		franchiseeVisit.setHygiene(createFranchiseeRequest.getHygiene());
461
		franchiseeVisit.setCreatedTimestamp(LocalDateTime.now());
462
		franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
30487 tejbeer 463
		franchiseeVisit.setInformedAboutOnline(createFranchiseeRequest.getOnline());
464
		franchiseeVisit.setPendingBilling(createFranchiseeRequest.getPendingBilling());
25952 tejbeer 465
		if (createFranchiseeRequest.getAction().equals(FranchiseeActivityStatus.FOLLOWUP)) {
466
			franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
467
		} else {
468
			franchiseeVisit.setStatus(FranchiseeVisitStatus.CLOSE);
469
		}
470
 
471
		// AuthUser authUser =
472
		// authRepository.selectByGmailId(createFranchiseeRequest.getCreatedBy());
473
		// change
25973 tejbeer 474
		AuthUser authUser = authRepository.selectByGmailId(createFranchiseeRequest.getCreatedBy());
25952 tejbeer 475
 
476
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
477
		franchiseeVisit.setCreatedBy(authUserName);
478
		franchiseeVisit.setAuthId(authUser.getId());
479
 
480
		franchiseeVisitRepository.persist(franchiseeVisit);
481
 
482
		FranchiseeActivity franchiseeActivity = new FranchiseeActivity();
483
		franchiseeActivity.setAction(createFranchiseeRequest.getAction());
484
		franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
485
		franchiseeActivity.setResolution(createFranchiseeRequest.getResolution());
486
		if (createFranchiseeRequest.getAction().equals(FranchiseeActivityStatus.FOLLOWUP)) {
487
			franchiseeActivity.setSchelduleTimestamp(createFranchiseeRequest.getSchelduleTimestamp());
488
		} else {
489
			franchiseeActivity.setSchelduleTimestamp(null);
490
		}
491
		franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
492
		franchiseeActivityRepository.persist(franchiseeActivity);
493
 
494
		franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
495
		return responseSender.ok(true);
496
	}
497
 
498
	@RequestMapping(value = "/getFranchiseVisit", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
499
	@ApiImplicitParams({
30294 tejbeer 500
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 501
	public ResponseEntity<?> getFranchiseVisit(HttpServletRequest request,
30294 tejbeer 502
			@RequestParam(name = "gmailId") String gmailId, @RequestParam(name = "status") FranchiseeVisitStatus status,
503
			@RequestParam(name = "offset", defaultValue = "0") int offset,
504
			@RequestParam(name = "limit", defaultValue = "10") int limit) throws ProfitMandiBusinessException {
25973 tejbeer 505
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
25952 tejbeer 506
 
507
		List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectByAuthIdAndStatus(authUser.getId(),
508
				status, offset, limit);
509
 
510
		for (FranchiseeVisit fv : franchiseeVisits) {
511
			if (fv.getFranchiseActivityId() != 0) {
512
				FranchiseeActivity fA = franchiseeActivityRepository.selectById(fv.getFranchiseActivityId());
513
				fv.setFranchiseeActivity(fA);
514
			}
515
		}
516
 
517
		return responseSender.ok(franchiseeVisits);
518
 
519
	}
520
 
521
	@RequestMapping(value = "/getFranchiseActivity", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
522
	@ApiImplicitParams({
30294 tejbeer 523
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 524
	public ResponseEntity<?> getFranchiseActivity(HttpServletRequest request, @RequestParam(name = "id") int id)
525
			throws ProfitMandiBusinessException {
526
 
527
		List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(id);
528
		return responseSender.ok(franchiseeActivities);
529
 
530
	}
531
 
532
	@RequestMapping(value = "/getFranchiseeInfo", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
533
	@ApiImplicitParams({
30294 tejbeer 534
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 535
	public ResponseEntity<?> getFranchiseeInfo(HttpServletRequest request, @RequestParam(name = "id") int id)
536
			throws ProfitMandiBusinessException {
537
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(id);
538
 
30487 tejbeer 539
		List<DBObject> mobileBrands = mongoClient.getAllBrandsToDisplay(3);
540
 
541
		List<String> brands = mobileBrands.stream().filter(x -> (boolean) x.get("active"))
542
				.map(x -> (String) x.get("name")).collect(Collectors.toList());
543
 
544
		franchiseeVisit.setBrands(brands);
545
 
25952 tejbeer 546
		return responseSender.ok(franchiseeVisit);
547
 
548
	}
549
 
550
	@RequestMapping(value = "/franchise-visit-update", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
551
	@ApiImplicitParams({
30294 tejbeer 552
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
25952 tejbeer 553
	public ResponseEntity<?> franchiseVisitUpdate(HttpServletRequest request, @RequestParam(name = "id") int id,
30294 tejbeer 554
			@RequestParam(name = "action") FranchiseeActivityStatus action,
555
			@RequestParam(name = "resolution") String resolution,
556
			@RequestParam(name = "schelduleTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime schelduleTimestamp)
25952 tejbeer 557
			throws ProfitMandiBusinessException {
558
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(id);
559
 
560
		FranchiseeActivity franchiseeActivity = new FranchiseeActivity();
561
 
562
		if (action == FranchiseeActivityStatus.FOLLOWUP) {
30487 tejbeer 563
 
25952 tejbeer 564
			franchiseeActivity.setSchelduleTimestamp(schelduleTimestamp);
565
			franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
566
			franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
567
			franchiseeVisitRepository.persist(franchiseeVisit);
568
 
569
		} else {
30487 tejbeer 570
 
25952 tejbeer 571
			franchiseeActivity.setSchelduleTimestamp(null);
572
			franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
573
			franchiseeVisit.setStatus(FranchiseeVisitStatus.CLOSE);
574
			franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
575
			franchiseeVisitRepository.persist(franchiseeVisit);
576
 
577
		}
578
 
30487 tejbeer 579
		franchiseeActivity.setResolution(resolution);
580
		franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
581
		franchiseeActivity.setAction(action);
582
 
583
		franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
584
		franchiseeActivityRepository.persist(franchiseeActivity);
585
 
586
		franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
587
		franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
588
		franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
589
		franchiseeVisitRepository.persist(franchiseeVisit);
590
 
25952 tejbeer 591
		return responseSender.ok(true);
592
 
593
	}
28935 tejbeer 594
 
595
	@RequestMapping(value = "/onBoardingTimelineStatus", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
596
	@ApiImplicitParams({
30294 tejbeer 597
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
28935 tejbeer 598
	public ResponseEntity<?> onBoardingTimelineStatus(HttpServletRequest request, Model model)
599
			throws ProfitMandiBusinessException {
600
		int userId = (int) request.getAttribute("userId");
601
		UserCart uc = userAccountRepository.getUserCart(userId);
602
		FofoStore fs = fofoStoreRepository.selectByRetailerId(uc.getUserId());
603
		PartnerOnBoardingPanel partnerOnBoardingPanel = partnerOnBoardingPanelRepository.selectByCode(fs.getCode());
604
		Map<StoreTimeline, OnBoardingTimelineModel> timelineStatus = null;
605
		LOGGER.info("partnerOnBoardingPanel" + partnerOnBoardingPanel);
606
		if (partnerOnBoardingPanel != null) {
607
 
608
			timelineStatus = storeTimelineTatService.getTimeline(partnerOnBoardingPanel.getId());
609
		}
610
		List<OnBoardingTimelineModel> onBoardingModel = new ArrayList<>();
611
		if (timelineStatus != null) {
612
			onBoardingModel = timelineStatus.values().stream().skip(2).map(x -> x).collect(Collectors.toList());
613
		}
614
		return responseSender.ok(onBoardingModel);
615
 
616
	}
28982 tejbeer 617
 
618
	@RequestMapping(value = "/onBoardingTimelineVisibility", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
619
	@ApiImplicitParams({
30294 tejbeer 620
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
28982 tejbeer 621
	public ResponseEntity<?> onBoardingTimelineVisibility(HttpServletRequest request, Model model)
622
			throws ProfitMandiBusinessException {
623
		int userId = (int) request.getAttribute("userId");
624
		UserCart uc = userAccountRepository.getUserCart(userId);
625
 
626
		FofoStore fs = fofoStoreRepository.selectByRetailerId(uc.getUserId());
627
		PartnerOnBoardingPanel partnerOnBoardingPanel = partnerOnBoardingPanelRepository.selectByCode(fs.getCode());
628
		boolean status = true;
629
		if (partnerOnBoardingPanel != null) {
630
 
631
			status = storeTimelineTatService.getTimelineCompleted(partnerOnBoardingPanel.getId());
632
		}
633
 
28983 tejbeer 634
		LOGGER.info("status" + status);
635
 
28982 tejbeer 636
		return responseSender.ok(status);
637
 
638
	}
30077 tejbeer 639
 
640
	@RequestMapping(value = "/getPartnerTarget", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
641
	@ApiImplicitParams({
30294 tejbeer 642
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
30077 tejbeer 643
	public ResponseEntity<?> getPartnerTarget(HttpServletRequest request,
30294 tejbeer 644
			@RequestParam(name = "gmailId") String gmailId, @RequestParam String dayValue)
30087 tejbeer 645
			throws ProfitMandiBusinessException {
30077 tejbeer 646
 
647
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
30348 tejbeer 648
		Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
649
		Set<Integer> fofoIds = storeGuyMap.get(authUser.getEmailId());
650
		List<String> brands = Arrays.asList("Vivo", "Samsung", "Oppo", "Itel", "Almost New", "Others");
30078 tejbeer 651
 
30077 tejbeer 652
		float totalPartnerTargetSecondary = 0;
653
		float totalPartnerTargetCollection = 0;
654
		float totalPartnerAchievementSecondary = 0;
655
		float totalPartnerAchievementCollection = 0;
656
		TargetModel tm = new TargetModel();
30087 tejbeer 657
		Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = new HashMap<>();
30416 tejbeer 658
		Map<Integer, Long> partnerTicketCount = ticketRepository.selectAllOpenTicketsGroupByRetailer();
659
 
660
		LOGGER.info("partnerTicketCount {}", partnerTicketCount);
661
 
30077 tejbeer 662
		List<PartnerTargetAchievementModel> ptams = new ArrayList<>();
663
 
664
		if (fofoIds.size() > 0 && fofoIds != null) {
30087 tejbeer 665
			List<Integer> fofoIdl = new ArrayList<>(fofoIds);
666
			List<Integer> fofoIdList = fofoStoreRepository.selectByRetailerIds(fofoIdl).stream()
667
					.filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
30077 tejbeer 668
 
669
			LocalDateTime startDate = LocalDate.now().atStartOfDay();
670
 
30087 tejbeer 671
			if (dayValue.equals("previous")) {
672
				startDate = LocalDate.now().minusDays(1).atStartOfDay();
30138 tejbeer 673
 
30087 tejbeer 674
			}
675
 
676
			List<PartnerDailyInvestment> partnerDailyInvestments = partnerDailyInvestmentRepository
30149 tejbeer 677
					.selectAll(fofoIdList, startDate.toLocalDate().minusDays(1));
30453 tejbeer 678
 
30087 tejbeer 679
			if (!partnerDailyInvestments.isEmpty()) {
680
				partnerDailyInvestmentMap = partnerDailyInvestments.stream()
681
						.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
682
			}
683
 
30426 tejbeer 684
			Map<Integer, CustomRetailer> customRetailerMap = retailerService.getAllFofoRetailers();
30077 tejbeer 685
 
30426 tejbeer 686
			Map<Integer, CustomRetailer> customRetailers = fofoIdList.stream().map(x -> customRetailerMap.get(x))
687
					.filter(x -> x != null).collect(Collectors.toList()).stream()
688
					.collect(Collectors.toMap(x -> x.getPartnerId(), x -> x));
689
 
30330 tejbeer 690
			Map<Integer, PartnerCollectionAchievementModel> collectionAchievementMap = userWalletRepository
691
					.getPartnerWiseCollectionAchievement(fofoIdList, startDate).stream()
30077 tejbeer 692
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
693
 
30453 tejbeer 694
			List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIdList);
30330 tejbeer 695
 
30453 tejbeer 696
			LOGGER.info("remarkIds {}", remarkIds);
697
 
698
			long todayCollectionCount = 0;
699
			if (!remarkIds.isEmpty()) {
700
				todayCollectionCount = partnerCollectionRemarkRepository
701
						.selectByAuthIdAndIds(authUser.getId(), remarkIds).stream()
702
						.filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now()))
703
						.collect(Collectors.counting());
704
 
705
			}
706
 
30348 tejbeer 707
			Map<Integer, PartnerCollectionPlanModel> foundCollectionMap = partnerCollectionService
708
					.getCollectionMap(fofoIdList, startDate);
30330 tejbeer 709
 
30077 tejbeer 710
			Map<Integer, List<PartnerSecondaryPlanModel>> partnerSecondayPlans = orderRepository
30110 tejbeer 711
					.selectPartnerSecondaryGroupByBrand(fofoIdList, startDate.toLocalDate()).stream()
30077 tejbeer 712
					.collect(Collectors.groupingBy(x -> x.getFofoId()));
713
 
714
			LOGGER.info("partnerSecondayPlans {}", partnerSecondayPlans);
715
			for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
716
				int fofoId = customRetailerEntry.getKey();
717
				CustomRetailer customRetailer = customRetailerEntry.getValue();
718
				float totalSecondaryPlan = 0;
719
				float totalSecondaryAchivement = 0;
720
 
721
				PartnerTargetAchievementModel ptam = new PartnerTargetAchievementModel();
722
				ptam.setFofoId(fofoId);
723
				ptam.setBusinessName(customRetailer.getBusinessName());
30416 tejbeer 724
				ptam.setMobile(customRetailer.getMobileNumber());
30077 tejbeer 725
 
30087 tejbeer 726
				if (partnerDailyInvestmentMap.get(fofoId) != null) {
727
					ptam.setWalletAmount(partnerDailyInvestmentMap.get(fofoId).getWalletAmount());
728
					ptam.setShortInvestment(partnerDailyInvestmentMap.get(fofoId).getShortInvestment());
729
				}
730
 
30330 tejbeer 731
				if (foundCollectionMap.get(fofoId) != null) {
732
					PartnerCollectionPlanModel collectionPlan = foundCollectionMap.get(fofoId);
733
					PartnerCollectionAchievementModel collectionAchievement = collectionAchievementMap.get(fofoId);
30416 tejbeer 734
					ptam.setRemark(collectionPlan.getRemark());
735
					ptam.setMessage(collectionPlan.getMessage());
736
					ptam.setRemarkTimestamp(collectionPlan.getRemarkTimestamp());
30330 tejbeer 737
					ptam.setRank(collectionPlan.getRank());
30137 tejbeer 738
					Integer authId = collectionPlan.getAuthId();
30330 tejbeer 739
 
30416 tejbeer 740
					Map<Integer, String> rankColorMap = ProfitMandiConstants.Rank_Color_Map;
30330 tejbeer 741
 
30416 tejbeer 742
					ptam.setCollectionColor(rankColorMap.get(collectionPlan.getRank()));
743
 
30087 tejbeer 744
					LOGGER.info("authId" + authId);
30077 tejbeer 745
 
30330 tejbeer 746
					if (collectionPlan.getTargetPlan() != null && collectionPlan.getCommittedDate() != null) {
747
						float targetCollection = 0;
30137 tejbeer 748
 
30452 tejbeer 749
						if (collectionPlan.getRank() == 2) {
750
							targetCollection = collectionPlan.getTargetPlan() - collectionPlan.getAchievementPlan();
751
						} else {
752
							targetCollection = collectionPlan.getTargetPlan();
753
						}
30330 tejbeer 754
 
30452 tejbeer 755
						if (authId != null && authId == authUser.getId()) {
756
 
757
							if (!collectionPlan.getCommittedDate().isAfter(startDate)) {
758
								totalPartnerTargetCollection += targetCollection;
30451 tejbeer 759
							}
30452 tejbeer 760
						}
30451 tejbeer 761
 
30330 tejbeer 762
						ptam.setCollectionTarget(targetCollection);
763
					}
764
					if (collectionAchievement.getAmount() != null) {
30453 tejbeer 765
						if (authId != null && authId == authUser.getId()) {
30087 tejbeer 766
 
30453 tejbeer 767
							totalPartnerAchievementCollection += collectionAchievement.getAmount();
768
						}
30330 tejbeer 769
						ptam.setCollectionAchievement(collectionAchievement.getAmount());
30087 tejbeer 770
					}
771
 
772
					if (authId != null && authId != authUser.getId()) {
773
						ptam.setAuthUser(authRepository.selectById(authId));
774
 
775
					}
776
 
30137 tejbeer 777
					if (collectionPlan.getCommittedDate() != null) {
778
 
779
						ptam.setCollectionCommitmentDate(collectionPlan.getCommittedDate().toLocalDate());
780
					}
30077 tejbeer 781
				}
782
 
30330 tejbeer 783
				// Secondary
784
 
30077 tejbeer 785
				PartnerSecondaryPlanModel otherPartnerSecondaryPlanModel = null;
30087 tejbeer 786
				Map<String, PartnerSecondaryPlanModel> secondaryModelMap = new HashMap<>();
30077 tejbeer 787
				if (partnerSecondayPlans.get(fofoId) != null) {
788
					long otherBrandSecondary = 0;
789
					for (PartnerSecondaryPlanModel pspm : partnerSecondayPlans.get(fofoId)) {
30087 tejbeer 790
						Integer authId = pspm.getAuthId();
30077 tejbeer 791
						if (!brands.contains(pspm.getBrand())) {
30087 tejbeer 792
							if (pspm.getAchievementPlan() != null) {
793
								otherBrandSecondary += pspm.getAchievementPlan();
794
							}
30077 tejbeer 795
						} else {
796
							otherPartnerSecondaryPlanModel = pspm;
797
						}
30087 tejbeer 798
						if (pspm.getTargetPlan() != null) {
799
							totalSecondaryPlan += pspm.getTargetPlan();
800
						}
801
 
802
						if (pspm.getAchievementPlan() != null) {
803
							totalSecondaryAchivement += pspm.getAchievementPlan();
804
						}
30137 tejbeer 805
 
806
						if (pspm.getCommittedDate() != null) {
807
 
808
							ptam.setSecondaryCommitmentDate(pspm.getCommittedDate().toLocalDate());
809
						}
30087 tejbeer 810
						if (authId != null && authId == authUser.getId()) {
811
 
30137 tejbeer 812
							if (pspm.getTargetPlan() != null && pspm.getCommittedDate() != null) {
30087 tejbeer 813
 
30137 tejbeer 814
								if (pspm.getCommittedDate().isEqual(startDate)) {
815
									totalPartnerTargetSecondary += pspm.getTargetPlan();
816
								}
30087 tejbeer 817
							}
818
 
819
							if (pspm.getAchievementPlan() != null) {
820
								totalPartnerAchievementSecondary += pspm.getAchievementPlan();
821
							}
822
 
823
						}
30077 tejbeer 824
					}
825
					if (otherPartnerSecondaryPlanModel != null) {
826
						otherPartnerSecondaryPlanModel.setAchievementPlan(otherBrandSecondary);
827
					}
30087 tejbeer 828
					secondaryModelMap = partnerSecondayPlans.get(fofoId).stream()
30077 tejbeer 829
							.filter(x -> brands.contains(x.getBrand()))
830
							.collect(Collectors.toMap(x -> x.getBrand(), x -> x));
831
 
832
					if (secondaryModelMap.containsKey("Others")) {
833
						PartnerSecondaryPlanModel psp = secondaryModelMap.get("Others");
834
						psp.setAchievementPlan(otherBrandSecondary);
835
					} else {
30087 tejbeer 836
						secondaryModelMap.put("Others", new PartnerSecondaryPlanModel(fofoId, "Others", (long) 0,
30137 tejbeer 837
								otherBrandSecondary, authUser.getId(), null));
30077 tejbeer 838
					}
839
					for (String brand : brands) {
840
						if (!secondaryModelMap.containsKey(brand)) {
30137 tejbeer 841
							secondaryModelMap.put(brand, new PartnerSecondaryPlanModel(fofoId, brand, (long) 0,
842
									(long) 0, authUser.getId(), null));
30077 tejbeer 843
						}
844
					}
845
 
30087 tejbeer 846
					for (Entry<String, PartnerSecondaryPlanModel> secondaryModelEntry : secondaryModelMap.entrySet()) {
847
						Integer authId = secondaryModelEntry.getValue().getAuthId();
848
						if (authId != null && authId != authUser.getId()) {
849
							secondaryModelEntry.getValue().setAuthUser(authRepository.selectById(authId));
850
							ptam.setSecondaryColor("red");
851
						}
852
 
853
					}
854
 
30077 tejbeer 855
					ptam.setPartnerSecondaryModel(secondaryModelMap);
856
					ptam.setTotalSecondaryPlan(totalSecondaryPlan);
30087 tejbeer 857
					ptam.setTotalSecondaryAchievement(totalSecondaryAchivement);
30330 tejbeer 858
					// Secondary
30077 tejbeer 859
 
30087 tejbeer 860
				} else {
861
					for (String brand : brands) {
862
						PartnerSecondaryPlanModel pspm = new PartnerSecondaryPlanModel();
863
						pspm.setAchievementPlan((long) 0);
864
						pspm.setTargetPlan((long) 0);
865
						pspm.setBrand(brand);
866
						pspm.setFofoId(fofoId);
867
						secondaryModelMap.put(brand, pspm);
868
					}
869
					ptam.setPartnerSecondaryModel(secondaryModelMap);
30077 tejbeer 870
				}
871
 
30416 tejbeer 872
				if (!partnerTicketCount.isEmpty()) {
873
					if (partnerTicketCount.get(fofoId) != null) {
874
						ptam.setTicketCount(partnerTicketCount.get(fofoId));
875
					} else {
876
						ptam.setTicketCount(0);
877
 
878
					}
879
				}
880
 
30078 tejbeer 881
				ptams.add(ptam);
882
 
30077 tejbeer 883
			}
884
 
885
			tm.setTotalPartnerTargetCollection(totalPartnerTargetCollection);
886
			tm.setTotalPartnerTargetSecondary(totalPartnerTargetSecondary);
887
			tm.setTotalPartnerSecondary(totalPartnerAchievementSecondary);
888
			tm.setTotalPartnerCollection(totalPartnerAchievementCollection);
30453 tejbeer 889
			tm.setTodayCollectionCount((int) todayCollectionCount);
30077 tejbeer 890
 
30330 tejbeer 891
			tm.setTargetAchievement(ptams.stream().sorted(Comparator.comparing(PartnerTargetAchievementModel::getRank))
30087 tejbeer 892
					.collect(Collectors.toList()));
893
 
30077 tejbeer 894
		}
895
 
896
		return responseSender.ok(tm);
897
 
898
	}
899
 
900
	@RequestMapping(value = "/target", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
901
	@ApiImplicitParams({
30294 tejbeer 902
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
30077 tejbeer 903
	public ResponseEntity<?> createPartnerTarget(HttpServletRequest request,
30294 tejbeer 904
			@RequestBody PartnerTargetAchievementModel ptam) throws ProfitMandiBusinessException {
30077 tejbeer 905
 
30089 tejbeer 906
		LOGGER.info("ptam" + ptam);
907
 
30087 tejbeer 908
		AuthUser authUser = authRepository.selectByGmailId(ptam.getCreatedBy());
30077 tejbeer 909
 
30137 tejbeer 910
		if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
911
				|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
912
			PartnerCollectionPlan partnerCollectionPlan = partnerCollectionPlanRepository
913
					.selectByLocalDate(LocalDate.now(), ptam.getFofoId(), true);
914
			LOGGER.info("pcp" + partnerCollectionPlan);
30077 tejbeer 915
 
30137 tejbeer 916
			if (partnerCollectionPlan == null) {
917
				if (ptam.getCollectionTarget() > 0) {
30087 tejbeer 918
 
30137 tejbeer 919
					partnerCollectionPlan = new PartnerCollectionPlan();
920
					partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
921
					partnerCollectionPlan.setAuthId(authUser.getId());
922
					partnerCollectionPlan.setFofoId(ptam.getFofoId());
923
					partnerCollectionPlan.setActive(true);
924
					partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
925
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
926
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
927
					partnerCollectionPlanRepository.persist(partnerCollectionPlan);
30416 tejbeer 928
 
30137 tejbeer 929
				}
30087 tejbeer 930
 
30137 tejbeer 931
			} else {
30087 tejbeer 932
 
30137 tejbeer 933
				if (partnerCollectionPlan.getCollectionPlan() != ptam.getCollectionTarget()) {
934
					float totalCollectionPlan = partnerCollectionPlan.getCollectionPlan() + 10000;
935
					if (authUser.getId() == partnerCollectionPlan.getAuthId()) {
30087 tejbeer 936
 
30185 tejbeer 937
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
938
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
939
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 940
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
941
							partnerCollectionPlan.setActive(true);
942
							partnerCollectionPlan
943
									.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
944
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
945
						} else {
946
							throw new ProfitMandiBusinessException("collection target", "",
947
									"collection target should be more than " + totalCollectionPlan);
948
						}
30087 tejbeer 949
 
950
					} else {
30137 tejbeer 951
 
30185 tejbeer 952
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
953
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
954
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 955
 
956
							partnerCollectionPlan.setActive(false);
957
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
958
							partnerCollectionPlan = new PartnerCollectionPlan();
959
							partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
960
							partnerCollectionPlan.setAuthId(authUser.getId());
961
							partnerCollectionPlan.setFofoId(ptam.getFofoId());
962
							partnerCollectionPlan.setActive(true);
963
							partnerCollectionPlan
964
									.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
965
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
966
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
967
							partnerCollectionPlanRepository.persist(partnerCollectionPlan);
968
						} else {
969
							throw new ProfitMandiBusinessException("collection target", "",
970
									"collection target should be more than " + totalCollectionPlan);
971
						}
30087 tejbeer 972
					}
973
				}
30137 tejbeer 974
 
30146 tejbeer 975
				if ((LocalDate.now().atStartOfDay().equals(ptam.getCollectionCommitmentDate().atStartOfDay())
976
						|| ptam.getCollectionCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 977
						&& partnerCollectionPlan.getCollectionPlan() == ptam.getCollectionTarget()) {
978
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
979
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
980
				}
30416 tejbeer 981
 
30087 tejbeer 982
			}
30433 tejbeer 983
 
984
			PartnerCollectionRemark pcr = new PartnerCollectionRemark();
985
			pcr.setFofoId(ptam.getFofoId());
986
			pcr.setAuthId(authUser.getId());
987
			pcr.setMessage("Collection plan for" + ptam.getCollectionCommitmentDate());
988
			pcr.setRemark(CollectionRemark.COLLECTION_PLAN);
989
			pcr.setCreateTimestamp(LocalDateTime.now());
990
			partnerCollectionRemarkRepository.persist(pcr);
30137 tejbeer 991
		} else {
992
			throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 993
					"you can't select the back date " + ptam.getCollectionCommitmentDate());
30077 tejbeer 994
		}
995
 
996
		for (Entry<String, PartnerSecondaryPlanModel> pspm : ptam.getPartnerSecondaryModel().entrySet()) {
30087 tejbeer 997
 
30137 tejbeer 998
			if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
999
					|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
1000
				PartnerSecondaryPlanModel plan = pspm.getValue();
1001
				PartnerSecondaryPlan psp = partnerSecondaryPlanRepository.selectByLocalDateBrand(plan.getBrand(),
1002
						LocalDate.now(), ptam.getFofoId(), true);
1003
				LOGGER.info("psp" + psp);
30087 tejbeer 1004
 
30137 tejbeer 1005
				if (psp == null) {
30461 tejbeer 1006
					if (plan.getTargetPlan() != null && plan.getTargetPlan() > 0) {
30087 tejbeer 1007
 
30137 tejbeer 1008
						psp = new PartnerSecondaryPlan();
1009
						psp.setAuthId(authUser.getId());
1010
						psp.setBrand(pspm.getKey());
1011
						psp.setFofoId(pspm.getValue().getFofoId());
1012
						psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
1013
						psp.setCreateTimestamp(LocalDateTime.now());
1014
						psp.setUpdatedTimestamp(LocalDateTime.now());
1015
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1016
						psp.setActive(true);
1017
						partnerSecondaryPlanRepository.persist(psp);
1018
					}
30087 tejbeer 1019
 
30137 tejbeer 1020
				} else {
1021
					if (plan.getTargetPlan() != psp.getSecondaryPlan()) {
1022
						float totalSecondaryPlan = psp.getSecondaryPlan() + 10000;
1023
						if (authUser.getId() == plan.getAuthId()) {
30185 tejbeer 1024
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
1025
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
1026
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30137 tejbeer 1027
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
1028
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1029
								psp.setUpdatedTimestamp(LocalDateTime.now());
1030
								psp.setActive(true);
1031
							} else {
1032
								throw new ProfitMandiBusinessException("secondary target", "",
1033
										"secondary target should be more than " + totalSecondaryPlan);
1034
							}
30087 tejbeer 1035
 
30137 tejbeer 1036
						} else {
30087 tejbeer 1037
 
30185 tejbeer 1038
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
1039
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
1040
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30087 tejbeer 1041
 
30137 tejbeer 1042
								psp.setUpdatedTimestamp(LocalDateTime.now());
1043
								psp.setActive(false);
1044
								psp = new PartnerSecondaryPlan();
1045
								psp.setAuthId(authUser.getId());
1046
								psp.setBrand(pspm.getKey());
1047
								psp.setFofoId(pspm.getValue().getFofoId());
1048
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
1049
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1050
								psp.setCreateTimestamp(LocalDateTime.now());
1051
								psp.setUpdatedTimestamp(LocalDateTime.now());
1052
								psp.setActive(true);
1053
								partnerSecondaryPlanRepository.persist(psp);
1054
							} else {
1055
								throw new ProfitMandiBusinessException("secondary target", "",
1056
										"secondary target should be more than " + totalSecondaryPlan);
1057
							}
30087 tejbeer 1058
						}
1059
					}
30137 tejbeer 1060
 
30146 tejbeer 1061
					if ((LocalDate.now().atStartOfDay().equals(ptam.getSecondaryCommitmentDate().atStartOfDay())
1062
							|| ptam.getSecondaryCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 1063
							&& plan.getTargetPlan() == psp.getSecondaryPlan()) {
1064
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1065
						psp.setUpdatedTimestamp(LocalDateTime.now());
1066
					}
1067
 
30087 tejbeer 1068
				}
30137 tejbeer 1069
			} else {
1070
				throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 1071
						"you can't select the back date " + ptam.getSecondaryCommitmentDate());
30077 tejbeer 1072
			}
30137 tejbeer 1073
 
30077 tejbeer 1074
		}
1075
 
1076
		return responseSender.ok(true);
30137 tejbeer 1077
 
30077 tejbeer 1078
	}
1079
 
30416 tejbeer 1080
	@RequestMapping(value = "/viewTickets", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1081
	@ApiImplicitParams({
1082
 
1083
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1084
	public ResponseEntity<?> viewTickets(HttpServletRequest request, @RequestParam int fofoId)
1085
			throws ProfitMandiBusinessException {
1086
		List<Ticket> tickets = ticketRepository.selectAllOpenTicketByRetailer(fofoId);
1087
 
1088
		List<TicketViewModel> viewList = new ArrayList<>();
1089
		for (Ticket ticket : tickets) {
1090
 
1091
			TicketViewModel ticketViewModel = new TicketViewModel();
1092
			ticketViewModel.setId(ticket.getId());
1093
			TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectById(ticket.getSubCategoryId());
1094
			TicketCategory ticketCategory = ticketCategoryRepository.selectById(ticketSubCategory.getCategoryId());
1095
 
1096
			ticketViewModel.setCategoryName(ticketCategory.getName());
1097
			ticketViewModel.setSubCategoryName(ticketSubCategory.getName());
1098
			ticketViewModel.setCreatedTimestamp(ticket.getCreateTimestamp());
1099
 
1100
			viewList.add(ticketViewModel);
1101
		}
1102
		return responseSender.ok(viewList);
1103
 
1104
	}
1105
 
1106
	@RequestMapping(value = "/viewRecentTickets", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1107
	@ApiImplicitParams({
1108
 
1109
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1110
	public ResponseEntity<?> viewRecentTickets(HttpServletRequest request, @RequestParam int fofoId)
1111
			throws ProfitMandiBusinessException {
1112
		List<TicketViewModel> viewList = ticketRepository.selectRecentClosedTicket(fofoId,
1113
				LocalDateTime.now().minusDays(20));
1114
 
1115
		return responseSender.ok(viewList);
1116
 
1117
	}
1118
 
1119
	@RequestMapping(value = "/createTicket", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1120
	@ApiImplicitParams({
1121
 
1122
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1123
	public ResponseEntity<?> createTicket(HttpServletRequest request) throws ProfitMandiBusinessException {
1124
		List<TicketCategory> ticketCategories = csService.getAllTicketCategotyFromSubCategory();
30460 tejbeer 1125
 
30416 tejbeer 1126
		return responseSender.ok(ticketCategories);
1127
	}
1128
 
1129
	@RequestMapping(value = "/getSubCategoriesByCategoryId", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1130
	@ApiImplicitParams({
1131
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1132
 
1133
	public ResponseEntity<?> getSubCategoriesByCategoryId(HttpServletRequest request,
1134
			@RequestParam(name = "categoryId", defaultValue = "0") int categoryId, Model model) {
1135
		List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAll(categoryId);
1136
		LOGGER.info(ticketSubCategories);
1137
		return responseSender.ok(ticketSubCategories);
1138
	}
1139
 
1140
	@RequestMapping(value = "/createTicket", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1141
	@ApiImplicitParams({
1142
 
1143
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1144
	public ResponseEntity<?> createTicket(HttpServletRequest request, @RequestParam(name = "categoryId") int categoryId,
1145
			@RequestParam(name = "subCategoryId") int subCategoryId, @RequestParam(name = "message") String message,
1146
			@RequestParam(name = "fofoId") int fofoId) throws Exception {
30460 tejbeer 1147
 
1148
		int id = (int) request.getAttribute("userId");
1149
 
1150
		LOGGER.info("id" + id);
1151
 
1152
		User user = userRepository.selectById(id);
1153
 
1154
		AuthUser authUser = authRepository.selectByEmailOrMobile(user.getEmailId());
1155
 
30416 tejbeer 1156
		List<Ticket> tickets = ticketRepository.selectAllResolvedMarkedTicketByCreator(fofoId);
1157
		if (tickets.size() > 3 || tickets.size() == 3) {
1158
			return responseSender.ok(false);
1159
		} else {
1160
			csService.createTicket(fofoId, categoryId, subCategoryId, message);
1161
 
30460 tejbeer 1162
			PartnerCollectionRemark pcr = new PartnerCollectionRemark();
1163
			pcr.setFofoId(fofoId);
1164
			pcr.setAuthId(authUser.getId());
1165
			pcr.setMessage("Ticket Created");
1166
			pcr.setRemark(CollectionRemark.TICKET_CREATED);
1167
			pcr.setCreateTimestamp(LocalDateTime.now());
1168
			partnerCollectionRemarkRepository.persist(pcr);
1169
 
30416 tejbeer 1170
		}
1171
		return responseSender.ok(true);
1172
	}
1173
 
1174
	@RequestMapping(value = "/getCollectionRemark", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1175
	@ApiImplicitParams({
1176
 
1177
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1178
	public ResponseEntity<?> getCollectionRemark(HttpServletRequest request) throws ProfitMandiBusinessException {
30433 tejbeer 1179
		List<CollectionRemark> remarks = Arrays.asList(CollectionRemark.values()).stream()
1180
				.filter(x -> !x.equals(CollectionRemark.COLLECTION_PLAN)).collect(Collectors.toList());
1181
		return responseSender.ok(remarks);
30416 tejbeer 1182
	}
1183
 
1184
	@RequestMapping(value = "/createPartnerColectionRemark", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1185
	@ApiImplicitParams({
1186
 
1187
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1188
	public ResponseEntity<?> createPartnerColectionRemark(HttpServletRequest request,
1189
			@RequestBody PartnerCollectionRemarkModel partnerCollectionRemarkModel)
1190
			throws ProfitMandiBusinessException {
1191
		AuthUser authUser = authRepository.selectByGmailId(partnerCollectionRemarkModel.getGmailId());
1192
 
1193
		PartnerCollectionRemark pcr = new PartnerCollectionRemark();
1194
		pcr.setFofoId(partnerCollectionRemarkModel.getFofoId());
1195
		pcr.setAuthId(authUser.getId());
1196
		pcr.setMessage(partnerCollectionRemarkModel.getMessage());
1197
		pcr.setRemark(partnerCollectionRemarkModel.getRemark());
1198
		pcr.setCreateTimestamp(LocalDateTime.now());
1199
		partnerCollectionRemarkRepository.persist(pcr);
1200
		return responseSender.ok(true);
1201
 
1202
	}
30433 tejbeer 1203
 
1204
	@RequestMapping(value = "/uploadFranchiseeVisit", method = RequestMethod.POST)
1205
	public ResponseEntity<?> readCsvFileAndSetLead(HttpServletRequest request, @RequestPart MultipartFile multipartFile)
1206
			throws Throwable {
1207
 
1208
		int id = (int) request.getAttribute("userId");
1209
 
1210
		LOGGER.info("id" + id);
1211
 
1212
		User user = userRepository.selectById(id);
1213
 
1214
		AuthUser authUser = authRepository.selectByEmailOrMobile(user.getEmailId());
1215
 
1216
		String fileName = multipartFile.getName();
1217
		String fileNames = multipartFile.getOriginalFilename();
1218
 
1219
		LOGGER.info("fileName" + fileName);
1220
		LOGGER.info("fileNames" + fileNames);
1221
 
1222
		List<CSVRecord> records = FileUtil.readFile(multipartFile);
1223
 
1224
		for (CSVRecord record : records) {
1225
			FranchiseeVisit franchiseeVisit = new FranchiseeVisit();
1226
			franchiseeVisit.setFofoId(Integer.parseInt(record.get(0)));
1227
			CustomRetailer customRetailer = retailerService.getFofoRetailer(Integer.parseInt(record.get(0)));
1228
 
1229
			franchiseeVisit.setPartnerName(customRetailer.getBusinessName());
1230
			franchiseeVisit.setAgenda(record.get(1));
1231
			franchiseeVisit.setCreatedTimestamp(LocalDateTime.now());
1232
			franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
1233
			franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
1234
 
1235
			DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
1236
			LOGGER.info(record.get(1));
1237
			LocalDate dateTime = LocalDate.parse(record.get(2), formatter);
1238
 
30530 tejbeer 1239
			franchiseeVisit.setScheduleTimestamp(dateTime.atStartOfDay());
30433 tejbeer 1240
			// change
1241
 
1242
			String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
1243
			franchiseeVisit.setCreatedBy(authUserName);
1244
			franchiseeVisit.setAuthId(authUser.getId());
1245
 
1246
			franchiseeVisitRepository.persist(franchiseeVisit);
1247
 
1248
			return responseSender.ok(true);
1249
		}
1250
 
1251
		return responseSender.ok(true);
1252
 
1253
	}
30487 tejbeer 1254
 
1255
	@RequestMapping(value = "/downloadFranchiseeVisitTemplate", method = RequestMethod.GET)
1256
	public ResponseEntity<?> downloadFranchiseeVisitTemplate(HttpServletRequest request) throws Exception {
1257
 
1258
		// ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
1259
 
1260
		List<List<?>> rows = new ArrayList<>();
1261
 
1262
		org.apache.commons.io.output.ByteArrayOutputStream byteArrayOutputStream = FileUtil
1263
				.getCSVByteStream(Arrays.asList("Partner Id", "Agenda", "Schedule Timestamp"), rows);
1264
 
1265
		try {
1266
			byteArrayOutputStream.close();
1267
		} catch (IOException e) {
1268
			// TODO Auto-generated catch block
1269
			e.printStackTrace();
1270
		}
1271
		final HttpHeaders headers = new HttpHeaders();
1272
		// headers.setContentType(TEXT_CSV_TYPE);
1273
		// headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
1274
 
1275
		headers.setContentType(MediaType.parseMediaType("application/csv"));
1276
		headers.set("Content-disposition", "inline; filename=visit-tempplate.csv");
1277
		headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
1278
		headers.add("Pragma", "no-cache");
1279
		headers.add("Expires", "0");
1280
 
1281
		headers.setContentLength(byteArrayOutputStream.toByteArray().length);
1282
		final InputStream inputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
1283
		final InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
1284
		return new ResponseEntity<>(inputStreamResource, headers, HttpStatus.OK);
1285
 
1286
	}
30077 tejbeer 1287
}