Subversion Repositories SmartDukaan

Rev

Rev 30543 | Rev 30781 | 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
 
672
		if (fofoIds.size() > 0 && fofoIds != null) {
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
 
30330 tejbeer 698
			Map<Integer, PartnerCollectionAchievementModel> collectionAchievementMap = userWalletRepository
699
					.getPartnerWiseCollectionAchievement(fofoIdList, startDate).stream()
30077 tejbeer 700
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
701
 
30453 tejbeer 702
			List<Integer> remarkIds = partnerCollectionRemarkRepository.selectMaxRemarkId(fofoIdList);
30330 tejbeer 703
 
30453 tejbeer 704
			LOGGER.info("remarkIds {}", remarkIds);
705
 
706
			long todayCollectionCount = 0;
707
			if (!remarkIds.isEmpty()) {
708
				todayCollectionCount = partnerCollectionRemarkRepository
709
						.selectByAuthIdAndIds(authUser.getId(), remarkIds).stream()
710
						.filter(x -> x.getCreateTimestamp().toLocalDate().equals(LocalDate.now()))
711
						.collect(Collectors.counting());
712
 
713
			}
714
 
30348 tejbeer 715
			Map<Integer, PartnerCollectionPlanModel> foundCollectionMap = partnerCollectionService
716
					.getCollectionMap(fofoIdList, startDate);
30330 tejbeer 717
 
30077 tejbeer 718
			Map<Integer, List<PartnerSecondaryPlanModel>> partnerSecondayPlans = orderRepository
30110 tejbeer 719
					.selectPartnerSecondaryGroupByBrand(fofoIdList, startDate.toLocalDate()).stream()
30077 tejbeer 720
					.collect(Collectors.groupingBy(x -> x.getFofoId()));
721
 
722
			LOGGER.info("partnerSecondayPlans {}", partnerSecondayPlans);
723
			for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
724
				int fofoId = customRetailerEntry.getKey();
725
				CustomRetailer customRetailer = customRetailerEntry.getValue();
726
				float totalSecondaryPlan = 0;
727
				float totalSecondaryAchivement = 0;
728
 
729
				PartnerTargetAchievementModel ptam = new PartnerTargetAchievementModel();
730
				ptam.setFofoId(fofoId);
731
				ptam.setBusinessName(customRetailer.getBusinessName());
30416 tejbeer 732
				ptam.setMobile(customRetailer.getMobileNumber());
30077 tejbeer 733
 
30087 tejbeer 734
				if (partnerDailyInvestmentMap.get(fofoId) != null) {
735
					ptam.setWalletAmount(partnerDailyInvestmentMap.get(fofoId).getWalletAmount());
736
					ptam.setShortInvestment(partnerDailyInvestmentMap.get(fofoId).getShortInvestment());
737
				}
738
 
30330 tejbeer 739
				if (foundCollectionMap.get(fofoId) != null) {
740
					PartnerCollectionPlanModel collectionPlan = foundCollectionMap.get(fofoId);
741
					PartnerCollectionAchievementModel collectionAchievement = collectionAchievementMap.get(fofoId);
30416 tejbeer 742
					ptam.setRemark(collectionPlan.getRemark());
743
					ptam.setMessage(collectionPlan.getMessage());
744
					ptam.setRemarkTimestamp(collectionPlan.getRemarkTimestamp());
30330 tejbeer 745
					ptam.setRank(collectionPlan.getRank());
30137 tejbeer 746
					Integer authId = collectionPlan.getAuthId();
30330 tejbeer 747
 
30416 tejbeer 748
					Map<Integer, String> rankColorMap = ProfitMandiConstants.Rank_Color_Map;
30330 tejbeer 749
 
30416 tejbeer 750
					ptam.setCollectionColor(rankColorMap.get(collectionPlan.getRank()));
751
 
30087 tejbeer 752
					LOGGER.info("authId" + authId);
30077 tejbeer 753
 
30330 tejbeer 754
					if (collectionPlan.getTargetPlan() != null && collectionPlan.getCommittedDate() != null) {
755
						float targetCollection = 0;
30137 tejbeer 756
 
30452 tejbeer 757
						if (collectionPlan.getRank() == 2) {
758
							targetCollection = collectionPlan.getTargetPlan() - collectionPlan.getAchievementPlan();
759
						} else {
760
							targetCollection = collectionPlan.getTargetPlan();
761
						}
30330 tejbeer 762
 
30452 tejbeer 763
						if (authId != null && authId == authUser.getId()) {
764
 
765
							if (!collectionPlan.getCommittedDate().isAfter(startDate)) {
766
								totalPartnerTargetCollection += targetCollection;
30451 tejbeer 767
							}
30452 tejbeer 768
						}
30451 tejbeer 769
 
30330 tejbeer 770
						ptam.setCollectionTarget(targetCollection);
771
					}
772
					if (collectionAchievement.getAmount() != null) {
30453 tejbeer 773
						if (authId != null && authId == authUser.getId()) {
30087 tejbeer 774
 
30453 tejbeer 775
							totalPartnerAchievementCollection += collectionAchievement.getAmount();
776
						}
30330 tejbeer 777
						ptam.setCollectionAchievement(collectionAchievement.getAmount());
30087 tejbeer 778
					}
779
 
780
					if (authId != null && authId != authUser.getId()) {
781
						ptam.setAuthUser(authRepository.selectById(authId));
782
 
783
					}
784
 
30137 tejbeer 785
					if (collectionPlan.getCommittedDate() != null) {
786
 
787
						ptam.setCollectionCommitmentDate(collectionPlan.getCommittedDate().toLocalDate());
788
					}
30077 tejbeer 789
				}
790
 
30330 tejbeer 791
				// Secondary
792
 
30077 tejbeer 793
				PartnerSecondaryPlanModel otherPartnerSecondaryPlanModel = null;
30087 tejbeer 794
				Map<String, PartnerSecondaryPlanModel> secondaryModelMap = new HashMap<>();
30077 tejbeer 795
				if (partnerSecondayPlans.get(fofoId) != null) {
796
					long otherBrandSecondary = 0;
797
					for (PartnerSecondaryPlanModel pspm : partnerSecondayPlans.get(fofoId)) {
30087 tejbeer 798
						Integer authId = pspm.getAuthId();
30077 tejbeer 799
						if (!brands.contains(pspm.getBrand())) {
30087 tejbeer 800
							if (pspm.getAchievementPlan() != null) {
801
								otherBrandSecondary += pspm.getAchievementPlan();
802
							}
30077 tejbeer 803
						} else {
804
							otherPartnerSecondaryPlanModel = pspm;
805
						}
30087 tejbeer 806
						if (pspm.getTargetPlan() != null) {
807
							totalSecondaryPlan += pspm.getTargetPlan();
808
						}
809
 
810
						if (pspm.getAchievementPlan() != null) {
811
							totalSecondaryAchivement += pspm.getAchievementPlan();
812
						}
30137 tejbeer 813
 
814
						if (pspm.getCommittedDate() != null) {
815
 
816
							ptam.setSecondaryCommitmentDate(pspm.getCommittedDate().toLocalDate());
817
						}
30087 tejbeer 818
						if (authId != null && authId == authUser.getId()) {
819
 
30137 tejbeer 820
							if (pspm.getTargetPlan() != null && pspm.getCommittedDate() != null) {
30087 tejbeer 821
 
30137 tejbeer 822
								if (pspm.getCommittedDate().isEqual(startDate)) {
823
									totalPartnerTargetSecondary += pspm.getTargetPlan();
824
								}
30087 tejbeer 825
							}
826
 
827
							if (pspm.getAchievementPlan() != null) {
828
								totalPartnerAchievementSecondary += pspm.getAchievementPlan();
829
							}
830
 
831
						}
30077 tejbeer 832
					}
833
					if (otherPartnerSecondaryPlanModel != null) {
834
						otherPartnerSecondaryPlanModel.setAchievementPlan(otherBrandSecondary);
835
					}
30087 tejbeer 836
					secondaryModelMap = partnerSecondayPlans.get(fofoId).stream()
30077 tejbeer 837
							.filter(x -> brands.contains(x.getBrand()))
838
							.collect(Collectors.toMap(x -> x.getBrand(), x -> x));
839
 
840
					if (secondaryModelMap.containsKey("Others")) {
841
						PartnerSecondaryPlanModel psp = secondaryModelMap.get("Others");
842
						psp.setAchievementPlan(otherBrandSecondary);
843
					} else {
30087 tejbeer 844
						secondaryModelMap.put("Others", new PartnerSecondaryPlanModel(fofoId, "Others", (long) 0,
30137 tejbeer 845
								otherBrandSecondary, authUser.getId(), null));
30077 tejbeer 846
					}
847
					for (String brand : brands) {
848
						if (!secondaryModelMap.containsKey(brand)) {
30137 tejbeer 849
							secondaryModelMap.put(brand, new PartnerSecondaryPlanModel(fofoId, brand, (long) 0,
850
									(long) 0, authUser.getId(), null));
30077 tejbeer 851
						}
852
					}
853
 
30087 tejbeer 854
					for (Entry<String, PartnerSecondaryPlanModel> secondaryModelEntry : secondaryModelMap.entrySet()) {
855
						Integer authId = secondaryModelEntry.getValue().getAuthId();
856
						if (authId != null && authId != authUser.getId()) {
857
							secondaryModelEntry.getValue().setAuthUser(authRepository.selectById(authId));
858
							ptam.setSecondaryColor("red");
859
						}
860
 
861
					}
862
 
30077 tejbeer 863
					ptam.setPartnerSecondaryModel(secondaryModelMap);
864
					ptam.setTotalSecondaryPlan(totalSecondaryPlan);
30087 tejbeer 865
					ptam.setTotalSecondaryAchievement(totalSecondaryAchivement);
30330 tejbeer 866
					// Secondary
30077 tejbeer 867
 
30087 tejbeer 868
				} else {
869
					for (String brand : brands) {
870
						PartnerSecondaryPlanModel pspm = new PartnerSecondaryPlanModel();
871
						pspm.setAchievementPlan((long) 0);
872
						pspm.setTargetPlan((long) 0);
873
						pspm.setBrand(brand);
874
						pspm.setFofoId(fofoId);
875
						secondaryModelMap.put(brand, pspm);
876
					}
877
					ptam.setPartnerSecondaryModel(secondaryModelMap);
30077 tejbeer 878
				}
879
 
30416 tejbeer 880
				if (!partnerTicketCount.isEmpty()) {
881
					if (partnerTicketCount.get(fofoId) != null) {
882
						ptam.setTicketCount(partnerTicketCount.get(fofoId));
883
					} else {
884
						ptam.setTicketCount(0);
885
 
886
					}
887
				}
888
 
30078 tejbeer 889
				ptams.add(ptam);
890
 
30077 tejbeer 891
			}
892
 
893
			tm.setTotalPartnerTargetCollection(totalPartnerTargetCollection);
894
			tm.setTotalPartnerTargetSecondary(totalPartnerTargetSecondary);
895
			tm.setTotalPartnerSecondary(totalPartnerAchievementSecondary);
896
			tm.setTotalPartnerCollection(totalPartnerAchievementCollection);
30453 tejbeer 897
			tm.setTodayCollectionCount((int) todayCollectionCount);
30077 tejbeer 898
 
30330 tejbeer 899
			tm.setTargetAchievement(ptams.stream().sorted(Comparator.comparing(PartnerTargetAchievementModel::getRank))
30087 tejbeer 900
					.collect(Collectors.toList()));
901
 
30077 tejbeer 902
		}
903
 
904
		return responseSender.ok(tm);
905
 
906
	}
907
 
908
	@RequestMapping(value = "/target", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
909
	@ApiImplicitParams({
30294 tejbeer 910
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
30077 tejbeer 911
	public ResponseEntity<?> createPartnerTarget(HttpServletRequest request,
30294 tejbeer 912
			@RequestBody PartnerTargetAchievementModel ptam) throws ProfitMandiBusinessException {
30077 tejbeer 913
 
30089 tejbeer 914
		LOGGER.info("ptam" + ptam);
915
 
30087 tejbeer 916
		AuthUser authUser = authRepository.selectByGmailId(ptam.getCreatedBy());
30077 tejbeer 917
 
30137 tejbeer 918
		if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
919
				|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
920
			PartnerCollectionPlan partnerCollectionPlan = partnerCollectionPlanRepository
921
					.selectByLocalDate(LocalDate.now(), ptam.getFofoId(), true);
922
			LOGGER.info("pcp" + partnerCollectionPlan);
30077 tejbeer 923
 
30137 tejbeer 924
			if (partnerCollectionPlan == null) {
925
				if (ptam.getCollectionTarget() > 0) {
30087 tejbeer 926
 
30137 tejbeer 927
					partnerCollectionPlan = new PartnerCollectionPlan();
928
					partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
929
					partnerCollectionPlan.setAuthId(authUser.getId());
930
					partnerCollectionPlan.setFofoId(ptam.getFofoId());
931
					partnerCollectionPlan.setActive(true);
932
					partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
933
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
934
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
935
					partnerCollectionPlanRepository.persist(partnerCollectionPlan);
30416 tejbeer 936
 
30137 tejbeer 937
				}
30087 tejbeer 938
 
30137 tejbeer 939
			} else {
30087 tejbeer 940
 
30137 tejbeer 941
				if (partnerCollectionPlan.getCollectionPlan() != ptam.getCollectionTarget()) {
942
					float totalCollectionPlan = partnerCollectionPlan.getCollectionPlan() + 10000;
943
					if (authUser.getId() == partnerCollectionPlan.getAuthId()) {
30087 tejbeer 944
 
30185 tejbeer 945
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
946
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
947
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 948
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
949
							partnerCollectionPlan.setActive(true);
950
							partnerCollectionPlan
951
									.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
952
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
953
						} else {
954
							throw new ProfitMandiBusinessException("collection target", "",
955
									"collection target should be more than " + totalCollectionPlan);
956
						}
30087 tejbeer 957
 
958
					} else {
30137 tejbeer 959
 
30185 tejbeer 960
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
961
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
962
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 963
 
964
							partnerCollectionPlan.setActive(false);
965
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
966
							partnerCollectionPlan = new PartnerCollectionPlan();
967
							partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
968
							partnerCollectionPlan.setAuthId(authUser.getId());
969
							partnerCollectionPlan.setFofoId(ptam.getFofoId());
970
							partnerCollectionPlan.setActive(true);
971
							partnerCollectionPlan
972
									.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
973
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
974
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
975
							partnerCollectionPlanRepository.persist(partnerCollectionPlan);
976
						} else {
977
							throw new ProfitMandiBusinessException("collection target", "",
978
									"collection target should be more than " + totalCollectionPlan);
979
						}
30087 tejbeer 980
					}
981
				}
30137 tejbeer 982
 
30146 tejbeer 983
				if ((LocalDate.now().atStartOfDay().equals(ptam.getCollectionCommitmentDate().atStartOfDay())
984
						|| ptam.getCollectionCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 985
						&& partnerCollectionPlan.getCollectionPlan() == ptam.getCollectionTarget()) {
986
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
987
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
988
				}
30416 tejbeer 989
 
30087 tejbeer 990
			}
30433 tejbeer 991
 
992
			PartnerCollectionRemark pcr = new PartnerCollectionRemark();
993
			pcr.setFofoId(ptam.getFofoId());
994
			pcr.setAuthId(authUser.getId());
995
			pcr.setMessage("Collection plan for" + ptam.getCollectionCommitmentDate());
996
			pcr.setRemark(CollectionRemark.COLLECTION_PLAN);
997
			pcr.setCreateTimestamp(LocalDateTime.now());
998
			partnerCollectionRemarkRepository.persist(pcr);
30137 tejbeer 999
		} else {
1000
			throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 1001
					"you can't select the back date " + ptam.getCollectionCommitmentDate());
30077 tejbeer 1002
		}
1003
 
1004
		for (Entry<String, PartnerSecondaryPlanModel> pspm : ptam.getPartnerSecondaryModel().entrySet()) {
30087 tejbeer 1005
 
30137 tejbeer 1006
			if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
1007
					|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
1008
				PartnerSecondaryPlanModel plan = pspm.getValue();
1009
				PartnerSecondaryPlan psp = partnerSecondaryPlanRepository.selectByLocalDateBrand(plan.getBrand(),
1010
						LocalDate.now(), ptam.getFofoId(), true);
1011
				LOGGER.info("psp" + psp);
30087 tejbeer 1012
 
30137 tejbeer 1013
				if (psp == null) {
30461 tejbeer 1014
					if (plan.getTargetPlan() != null && plan.getTargetPlan() > 0) {
30087 tejbeer 1015
 
30137 tejbeer 1016
						psp = new PartnerSecondaryPlan();
1017
						psp.setAuthId(authUser.getId());
1018
						psp.setBrand(pspm.getKey());
1019
						psp.setFofoId(pspm.getValue().getFofoId());
1020
						psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
1021
						psp.setCreateTimestamp(LocalDateTime.now());
1022
						psp.setUpdatedTimestamp(LocalDateTime.now());
1023
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1024
						psp.setActive(true);
1025
						partnerSecondaryPlanRepository.persist(psp);
1026
					}
30087 tejbeer 1027
 
30137 tejbeer 1028
				} else {
1029
					if (plan.getTargetPlan() != psp.getSecondaryPlan()) {
1030
						float totalSecondaryPlan = psp.getSecondaryPlan() + 10000;
1031
						if (authUser.getId() == plan.getAuthId()) {
30185 tejbeer 1032
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
1033
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
1034
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30137 tejbeer 1035
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
1036
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1037
								psp.setUpdatedTimestamp(LocalDateTime.now());
1038
								psp.setActive(true);
1039
							} else {
1040
								throw new ProfitMandiBusinessException("secondary target", "",
1041
										"secondary target should be more than " + totalSecondaryPlan);
1042
							}
30087 tejbeer 1043
 
30137 tejbeer 1044
						} else {
30087 tejbeer 1045
 
30185 tejbeer 1046
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
1047
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
1048
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30087 tejbeer 1049
 
30137 tejbeer 1050
								psp.setUpdatedTimestamp(LocalDateTime.now());
1051
								psp.setActive(false);
1052
								psp = new PartnerSecondaryPlan();
1053
								psp.setAuthId(authUser.getId());
1054
								psp.setBrand(pspm.getKey());
1055
								psp.setFofoId(pspm.getValue().getFofoId());
1056
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
1057
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1058
								psp.setCreateTimestamp(LocalDateTime.now());
1059
								psp.setUpdatedTimestamp(LocalDateTime.now());
1060
								psp.setActive(true);
1061
								partnerSecondaryPlanRepository.persist(psp);
1062
							} else {
1063
								throw new ProfitMandiBusinessException("secondary target", "",
1064
										"secondary target should be more than " + totalSecondaryPlan);
1065
							}
30087 tejbeer 1066
						}
1067
					}
30137 tejbeer 1068
 
30146 tejbeer 1069
					if ((LocalDate.now().atStartOfDay().equals(ptam.getSecondaryCommitmentDate().atStartOfDay())
1070
							|| ptam.getSecondaryCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 1071
							&& plan.getTargetPlan() == psp.getSecondaryPlan()) {
1072
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
1073
						psp.setUpdatedTimestamp(LocalDateTime.now());
1074
					}
1075
 
30087 tejbeer 1076
				}
30137 tejbeer 1077
			} else {
1078
				throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 1079
						"you can't select the back date " + ptam.getSecondaryCommitmentDate());
30077 tejbeer 1080
			}
30137 tejbeer 1081
 
30077 tejbeer 1082
		}
1083
 
1084
		return responseSender.ok(true);
30137 tejbeer 1085
 
30077 tejbeer 1086
	}
1087
 
30416 tejbeer 1088
	@RequestMapping(value = "/viewTickets", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1089
	@ApiImplicitParams({
1090
 
1091
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1092
	public ResponseEntity<?> viewTickets(HttpServletRequest request, @RequestParam int fofoId)
1093
			throws ProfitMandiBusinessException {
1094
		List<Ticket> tickets = ticketRepository.selectAllOpenTicketByRetailer(fofoId);
1095
 
1096
		List<TicketViewModel> viewList = new ArrayList<>();
1097
		for (Ticket ticket : tickets) {
1098
 
1099
			TicketViewModel ticketViewModel = new TicketViewModel();
1100
			ticketViewModel.setId(ticket.getId());
1101
			TicketSubCategory ticketSubCategory = ticketSubCategoryRepository.selectById(ticket.getSubCategoryId());
1102
			TicketCategory ticketCategory = ticketCategoryRepository.selectById(ticketSubCategory.getCategoryId());
1103
 
1104
			ticketViewModel.setCategoryName(ticketCategory.getName());
1105
			ticketViewModel.setSubCategoryName(ticketSubCategory.getName());
1106
			ticketViewModel.setCreatedTimestamp(ticket.getCreateTimestamp());
1107
 
1108
			viewList.add(ticketViewModel);
1109
		}
1110
		return responseSender.ok(viewList);
1111
 
1112
	}
1113
 
1114
	@RequestMapping(value = "/viewRecentTickets", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1115
	@ApiImplicitParams({
1116
 
1117
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1118
	public ResponseEntity<?> viewRecentTickets(HttpServletRequest request, @RequestParam int fofoId)
1119
			throws ProfitMandiBusinessException {
1120
		List<TicketViewModel> viewList = ticketRepository.selectRecentClosedTicket(fofoId,
1121
				LocalDateTime.now().minusDays(20));
1122
 
1123
		return responseSender.ok(viewList);
1124
 
1125
	}
1126
 
1127
	@RequestMapping(value = "/createTicket", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1128
	@ApiImplicitParams({
1129
 
1130
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1131
	public ResponseEntity<?> createTicket(HttpServletRequest request) throws ProfitMandiBusinessException {
1132
		List<TicketCategory> ticketCategories = csService.getAllTicketCategotyFromSubCategory();
30460 tejbeer 1133
 
30416 tejbeer 1134
		return responseSender.ok(ticketCategories);
1135
	}
1136
 
1137
	@RequestMapping(value = "/getSubCategoriesByCategoryId", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1138
	@ApiImplicitParams({
1139
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1140
 
1141
	public ResponseEntity<?> getSubCategoriesByCategoryId(HttpServletRequest request,
1142
			@RequestParam(name = "categoryId", defaultValue = "0") int categoryId, Model model) {
1143
		List<TicketSubCategory> ticketSubCategories = ticketSubCategoryRepository.selectAll(categoryId);
1144
		LOGGER.info(ticketSubCategories);
1145
		return responseSender.ok(ticketSubCategories);
1146
	}
1147
 
1148
	@RequestMapping(value = "/createTicket", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1149
	@ApiImplicitParams({
1150
 
1151
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1152
	public ResponseEntity<?> createTicket(HttpServletRequest request, @RequestParam(name = "categoryId") int categoryId,
1153
			@RequestParam(name = "subCategoryId") int subCategoryId, @RequestParam(name = "message") String message,
1154
			@RequestParam(name = "fofoId") int fofoId) throws Exception {
30460 tejbeer 1155
 
1156
		int id = (int) request.getAttribute("userId");
1157
 
1158
		LOGGER.info("id" + id);
1159
 
1160
		User user = userRepository.selectById(id);
1161
 
1162
		AuthUser authUser = authRepository.selectByEmailOrMobile(user.getEmailId());
1163
 
30416 tejbeer 1164
		List<Ticket> tickets = ticketRepository.selectAllResolvedMarkedTicketByCreator(fofoId);
1165
		if (tickets.size() > 3 || tickets.size() == 3) {
1166
			return responseSender.ok(false);
1167
		} else {
1168
			csService.createTicket(fofoId, categoryId, subCategoryId, message);
1169
 
30460 tejbeer 1170
			PartnerCollectionRemark pcr = new PartnerCollectionRemark();
1171
			pcr.setFofoId(fofoId);
1172
			pcr.setAuthId(authUser.getId());
1173
			pcr.setMessage("Ticket Created");
1174
			pcr.setRemark(CollectionRemark.TICKET_CREATED);
1175
			pcr.setCreateTimestamp(LocalDateTime.now());
1176
			partnerCollectionRemarkRepository.persist(pcr);
1177
 
30416 tejbeer 1178
		}
1179
		return responseSender.ok(true);
1180
	}
1181
 
1182
	@RequestMapping(value = "/getCollectionRemark", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
1183
	@ApiImplicitParams({
1184
 
1185
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1186
	public ResponseEntity<?> getCollectionRemark(HttpServletRequest request) throws ProfitMandiBusinessException {
30433 tejbeer 1187
		List<CollectionRemark> remarks = Arrays.asList(CollectionRemark.values()).stream()
1188
				.filter(x -> !x.equals(CollectionRemark.COLLECTION_PLAN)).collect(Collectors.toList());
1189
		return responseSender.ok(remarks);
30416 tejbeer 1190
	}
1191
 
1192
	@RequestMapping(value = "/createPartnerColectionRemark", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1193
	@ApiImplicitParams({
1194
 
1195
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
1196
	public ResponseEntity<?> createPartnerColectionRemark(HttpServletRequest request,
1197
			@RequestBody PartnerCollectionRemarkModel partnerCollectionRemarkModel)
1198
			throws ProfitMandiBusinessException {
1199
		AuthUser authUser = authRepository.selectByGmailId(partnerCollectionRemarkModel.getGmailId());
1200
 
1201
		PartnerCollectionRemark pcr = new PartnerCollectionRemark();
1202
		pcr.setFofoId(partnerCollectionRemarkModel.getFofoId());
1203
		pcr.setAuthId(authUser.getId());
1204
		pcr.setMessage(partnerCollectionRemarkModel.getMessage());
1205
		pcr.setRemark(partnerCollectionRemarkModel.getRemark());
1206
		pcr.setCreateTimestamp(LocalDateTime.now());
1207
		partnerCollectionRemarkRepository.persist(pcr);
1208
		return responseSender.ok(true);
1209
 
1210
	}
30433 tejbeer 1211
 
1212
	@RequestMapping(value = "/uploadFranchiseeVisit", method = RequestMethod.POST)
1213
	public ResponseEntity<?> readCsvFileAndSetLead(HttpServletRequest request, @RequestPart MultipartFile multipartFile)
1214
			throws Throwable {
1215
 
1216
		int id = (int) request.getAttribute("userId");
1217
 
1218
		LOGGER.info("id" + id);
1219
 
1220
		User user = userRepository.selectById(id);
1221
 
1222
		AuthUser authUser = authRepository.selectByEmailOrMobile(user.getEmailId());
1223
 
1224
		String fileName = multipartFile.getName();
1225
		String fileNames = multipartFile.getOriginalFilename();
1226
 
1227
		LOGGER.info("fileName" + fileName);
1228
		LOGGER.info("fileNames" + fileNames);
1229
 
1230
		List<CSVRecord> records = FileUtil.readFile(multipartFile);
1231
 
1232
		for (CSVRecord record : records) {
1233
			FranchiseeVisit franchiseeVisit = new FranchiseeVisit();
1234
			franchiseeVisit.setFofoId(Integer.parseInt(record.get(0)));
1235
			CustomRetailer customRetailer = retailerService.getFofoRetailer(Integer.parseInt(record.get(0)));
1236
 
1237
			franchiseeVisit.setPartnerName(customRetailer.getBusinessName());
1238
			franchiseeVisit.setAgenda(record.get(1));
1239
			franchiseeVisit.setCreatedTimestamp(LocalDateTime.now());
1240
			franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
1241
			franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
1242
 
1243
			DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MM-yyyy");
1244
			LOGGER.info(record.get(1));
1245
			LocalDate dateTime = LocalDate.parse(record.get(2), formatter);
1246
 
30530 tejbeer 1247
			franchiseeVisit.setScheduleTimestamp(dateTime.atStartOfDay());
30433 tejbeer 1248
			// change
1249
 
1250
			String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
1251
			franchiseeVisit.setCreatedBy(authUserName);
1252
			franchiseeVisit.setAuthId(authUser.getId());
1253
 
1254
			franchiseeVisitRepository.persist(franchiseeVisit);
1255
 
1256
			return responseSender.ok(true);
1257
		}
1258
 
1259
		return responseSender.ok(true);
1260
 
1261
	}
30487 tejbeer 1262
 
1263
	@RequestMapping(value = "/downloadFranchiseeVisitTemplate", method = RequestMethod.GET)
1264
	public ResponseEntity<?> downloadFranchiseeVisitTemplate(HttpServletRequest request) throws Exception {
1265
 
1266
		// ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
1267
 
1268
		List<List<?>> rows = new ArrayList<>();
1269
 
1270
		org.apache.commons.io.output.ByteArrayOutputStream byteArrayOutputStream = FileUtil
1271
				.getCSVByteStream(Arrays.asList("Partner Id", "Agenda", "Schedule Timestamp"), rows);
1272
 
1273
		try {
1274
			byteArrayOutputStream.close();
1275
		} catch (IOException e) {
1276
			// TODO Auto-generated catch block
1277
			e.printStackTrace();
1278
		}
1279
 
30544 tejbeer 1280
		String filename = "template.csv";
1281
		HttpHeaders headers = new HttpHeaders();
1282
		headers.add("Content-Type", "application/csv");
1283
		headers.setContentDispositionFormData(filename, filename);
30487 tejbeer 1284
 
30544 tejbeer 1285
		headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");
30487 tejbeer 1286
 
30544 tejbeer 1287
		ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(byteArrayOutputStream.toByteArray(), headers,
1288
				HttpStatus.OK);
1289
		return response;
1290
 
30487 tejbeer 1291
	}
30542 tejbeer 1292
 
1293
	@RequestMapping(value = "/markVisitAttendance", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
1294
	public ResponseEntity<?> markVisitAttendance(HttpServletRequest request, @RequestParam(name = "id") int id)
1295
			throws ProfitMandiBusinessException {
1296
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(id);
1297
 
1298
		franchiseeVisit.setVisitTimestamp(LocalDateTime.now());
1299
 
1300
		return responseSender.ok(true);
1301
 
1302
	}
30077 tejbeer 1303
}