Subversion Repositories SmartDukaan

Rev

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