Subversion Repositories SmartDukaan

Rev

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