Subversion Repositories SmartDukaan

Rev

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