Subversion Repositories SmartDukaan

Rev

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