Subversion Repositories SmartDukaan

Rev

Rev 30185 | Rev 30280 | 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
 
29434 amit.gupta 3
import java.time.LocalDate;
25899 tejbeer 4
import java.time.LocalDateTime;
29446 amit.gupta 5
import java.time.LocalTime;
25952 tejbeer 6
import java.util.ArrayList;
29434 amit.gupta 7
import java.util.Arrays;
30087 tejbeer 8
import java.util.Comparator;
9
import java.util.HashMap;
25899 tejbeer 10
import java.util.List;
25952 tejbeer 11
import java.util.Map;
30077 tejbeer 12
import java.util.Map.Entry;
25952 tejbeer 13
import java.util.Set;
28935 tejbeer 14
import java.util.stream.Collectors;
25899 tejbeer 15
 
16
import javax.servlet.http.HttpServletRequest;
17
 
18
import org.apache.logging.log4j.LogManager;
19
import org.apache.logging.log4j.Logger;
20
import org.springframework.beans.factory.annotation.Autowired;
21
import org.springframework.format.annotation.DateTimeFormat;
22
import org.springframework.http.MediaType;
23
import org.springframework.http.ResponseEntity;
24
import org.springframework.stereotype.Controller;
25
import org.springframework.transaction.annotation.Transactional;
28935 tejbeer 26
import org.springframework.ui.Model;
25899 tejbeer 27
import org.springframework.web.bind.annotation.RequestBody;
28
import org.springframework.web.bind.annotation.RequestMapping;
29
import org.springframework.web.bind.annotation.RequestMethod;
30
import org.springframework.web.bind.annotation.RequestParam;
31
 
32
import com.spice.profitmandi.common.exception.ProfitMandiBusinessException;
25952 tejbeer 33
import com.spice.profitmandi.common.model.CustomRetailer;
27117 tejbeer 34
import com.spice.profitmandi.common.model.ProfitMandiConstants;
30087 tejbeer 35
import com.spice.profitmandi.common.services.mandii.TransactionSummaryResponseOut;
25899 tejbeer 36
import com.spice.profitmandi.common.web.util.ResponseSender;
37
import com.spice.profitmandi.dao.entity.auth.AuthUser;
30077 tejbeer 38
import com.spice.profitmandi.dao.entity.auth.PartnerCollectionPlan;
39
import com.spice.profitmandi.dao.entity.auth.PartnerSecondaryPlan;
25899 tejbeer 40
import com.spice.profitmandi.dao.entity.dtr.User;
25952 tejbeer 41
import com.spice.profitmandi.dao.entity.dtr.UserAccount;
28935 tejbeer 42
import com.spice.profitmandi.dao.entity.fofo.FofoStore;
30087 tejbeer 43
import com.spice.profitmandi.dao.entity.fofo.PartnerDailyInvestment;
28935 tejbeer 44
import com.spice.profitmandi.dao.entity.fofo.PartnerOnBoardingPanel;
30110 tejbeer 45
import com.spice.profitmandi.dao.entity.transaction.Order;
25952 tejbeer 46
import com.spice.profitmandi.dao.entity.user.FranchiseeActivity;
47
import com.spice.profitmandi.dao.entity.user.FranchiseeVisit;
25899 tejbeer 48
import com.spice.profitmandi.dao.entity.user.Lead;
49
import com.spice.profitmandi.dao.entity.user.LeadActivity;
25952 tejbeer 50
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeActivityStatus;
51
import com.spice.profitmandi.dao.enumuration.dtr.FranchiseeVisitStatus;
25899 tejbeer 52
import com.spice.profitmandi.dao.enumuration.dtr.LeadStatus;
28935 tejbeer 53
import com.spice.profitmandi.dao.enumuration.dtr.StoreTimeline;
25979 tejbeer 54
import com.spice.profitmandi.dao.model.CreateRefferalRequest;
28935 tejbeer 55
import com.spice.profitmandi.dao.model.OnBoardingTimelineModel;
30077 tejbeer 56
import com.spice.profitmandi.dao.model.PartnerCollectionPlanModel;
57
import com.spice.profitmandi.dao.model.PartnerSecondaryPlanModel;
58
import com.spice.profitmandi.dao.model.PartnerTargetAchievementModel;
59
import com.spice.profitmandi.dao.model.TargetModel;
28935 tejbeer 60
import com.spice.profitmandi.dao.model.UserCart;
25899 tejbeer 61
import com.spice.profitmandi.dao.repository.auth.AuthRepository;
30104 tejbeer 62
import com.spice.profitmandi.dao.repository.auth.AuthUserPartnerMappingRepository;
30077 tejbeer 63
import com.spice.profitmandi.dao.repository.auth.PartnerCollectionPlanRepository;
64
import com.spice.profitmandi.dao.repository.auth.PartnerSecondaryPlanRepository;
25952 tejbeer 65
import com.spice.profitmandi.dao.repository.cs.CsService;
30077 tejbeer 66
import com.spice.profitmandi.dao.repository.cs.PositionRepository;
28935 tejbeer 67
import com.spice.profitmandi.dao.repository.dtr.FofoStoreRepository;
25952 tejbeer 68
import com.spice.profitmandi.dao.repository.dtr.FranchiseeActivityRepository;
69
import com.spice.profitmandi.dao.repository.dtr.FranchiseeVisitRepository;
25899 tejbeer 70
import com.spice.profitmandi.dao.repository.dtr.LeadActivityRepository;
71
import com.spice.profitmandi.dao.repository.dtr.LeadRepository;
28935 tejbeer 72
import com.spice.profitmandi.dao.repository.dtr.PartnerOnBoardingPanelRepository;
25952 tejbeer 73
import com.spice.profitmandi.dao.repository.dtr.UserAccountRepository;
25899 tejbeer 74
import com.spice.profitmandi.dao.repository.dtr.UserRepository;
30087 tejbeer 75
import com.spice.profitmandi.dao.repository.fofo.PartnerDailyInvestmentRepository;
30077 tejbeer 76
import com.spice.profitmandi.dao.repository.transaction.OrderRepository;
77
import com.spice.profitmandi.dao.repository.transaction.UserWalletRepository;
25952 tejbeer 78
import com.spice.profitmandi.service.user.RetailerService;
28935 tejbeer 79
import com.spice.profitmandi.service.user.StoreTimelineTatService;
25952 tejbeer 80
import com.spice.profitmandi.web.req.CreateFranchiseeRequest;
81
import com.spice.profitmandi.web.res.Partner;
25899 tejbeer 82
 
83
import io.swagger.annotations.ApiImplicitParam;
84
import io.swagger.annotations.ApiImplicitParams;
85
 
86
@Controller
87
@Transactional(rollbackFor = Throwable.class)
88
public class LeadController {
89
	private static final Logger LOGGER = LogManager.getLogger(LeadController.class);
90
	@Autowired
91
	private ResponseSender<?> responseSender;
92
 
93
	@Autowired
94
	private AuthRepository authRepository;
95
 
96
	@Autowired
97
	private LeadRepository leadRepository;
98
 
99
	@Autowired
25952 tejbeer 100
	private CsService csService;
101
 
102
	@Autowired
103
	private UserRepository userRepository;
104
 
105
	@Autowired
106
	private UserAccountRepository userAccountRepository;
107
 
108
	@Autowired
109
	private com.spice.profitmandi.dao.repository.user.UserRepository userUserRepository;
110
 
111
	@Autowired
112
	private RetailerService retailerService;
113
 
114
	@Autowired
25899 tejbeer 115
	private LeadActivityRepository leadActivityRepository;
116
 
25952 tejbeer 117
	@Autowired
118
	private FranchiseeVisitRepository franchiseeVisitRepository;
119
 
120
	@Autowired
121
	private FranchiseeActivityRepository franchiseeActivityRepository;
122
 
28935 tejbeer 123
	@Autowired
124
	private PartnerOnBoardingPanelRepository partnerOnBoardingPanelRepository;
125
 
126
	@Autowired
127
	private FofoStoreRepository fofoStoreRepository;
128
 
129
	@Autowired
130
	private StoreTimelineTatService storeTimelineTatService;
131
 
25899 tejbeer 132
	@RequestMapping(value = "/lead", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
133
	@ApiImplicitParams({
134
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
135
	public ResponseEntity<?> LeadUser(HttpServletRequest request,
136
			@RequestBody CreateRefferalRequest createRefferalRequest) throws Exception {
137
		Lead lead = new Lead();
138
		lead.setFirstName(createRefferalRequest.getFirstName());
139
		lead.setLastName(createRefferalRequest.getLastName());
140
		lead.setLeadMobile(createRefferalRequest.getMobile());
141
		lead.setState(createRefferalRequest.getState());
142
		lead.setCity(createRefferalRequest.getCity());
143
		lead.setAddress(createRefferalRequest.getAddress());
144
		lead.setCreatedTimestamp(LocalDateTime.now());
145
		lead.setUpdatedTimestamp(LocalDateTime.now());
146
		lead.setStatus(createRefferalRequest.getStatus());
25979 tejbeer 147
		lead.setSource(createRefferalRequest.getSource());
28201 tejbeer 148
		lead.setNotinterestedReason(createRefferalRequest.getReason());
26244 tejbeer 149
		if (createRefferalRequest.getColorCheck() == true) {
150
			lead.setColor("Green");
151
		} else {
152
			lead.setColor("Yellow");
153
		}
25900 amit.gupta 154
		AuthUser authUser = authRepository.selectByGmailId(createRefferalRequest.getReffereeEmail());
155
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
156
		lead.setCreatedBy(authUserName);
157
		lead.setAuthId(authUser.getId());
25981 tejbeer 158
		lead.setAssignTo(authUser.getId());
25899 tejbeer 159
 
160
		leadRepository.persist(lead);
161
		LeadActivity leadActivity = new LeadActivity();
162
		leadActivity.setLeadId(lead.getId());
163
		leadActivity.setRemark(createRefferalRequest.getRemark());
164
 
165
		if (createRefferalRequest.getStatus().equals(LeadStatus.followUp)) {
166
			leadActivity.setSchelduleTimestamp(createRefferalRequest.getSchelduleTimestamp());
26958 tejbeer 167
			leadActivity.setClosureTimestamp(createRefferalRequest.getClosureTimestamp());
27025 tejbeer 168
			lead.setClosureTimestamp(createRefferalRequest.getClosureTimestamp());
25899 tejbeer 169
		} else {
170
			leadActivity.setSchelduleTimestamp(null);
26958 tejbeer 171
			leadActivity.setClosureTimestamp(null);
27025 tejbeer 172
			lead.setClosureTimestamp(null);
25899 tejbeer 173
		}
174
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
175
		leadActivityRepository.persist(leadActivity);
176
 
177
		return responseSender.ok(true);
178
	}
179
 
180
	@RequestMapping(value = "/lead-description", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
181
	@ApiImplicitParams({
182
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
183
	public ResponseEntity<?> leadDescription(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId,
29331 tejbeer 184
			@RequestParam(name = "status") LeadStatus status) throws ProfitMandiBusinessException {
25899 tejbeer 185
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
29434 amit.gupta 186
		List<Lead> leads = null;
187
		if (status.equals(LeadStatus.followUp)) {
30077 tejbeer 188
			leads = leadRepository.selectLeadsScheduledBetweenDate(Arrays.asList(authUser.getId()),
189
					LocalDate.now().atStartOfDay().minusDays(30), LocalDate.now().plusDays(3).atTime(LocalTime.MAX));
29434 amit.gupta 190
		} else {
191
			leads = leadRepository.selectByAssignAuthIdAndStatus(authUser.getId(), status);
192
		}
25979 tejbeer 193
 
25899 tejbeer 194
		return responseSender.ok(leads);
195
 
196
	}
197
 
198
	@RequestMapping(value = "/getlead", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
199
	@ApiImplicitParams({
200
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
201
	public ResponseEntity<?> getLead(HttpServletRequest request, @RequestParam(name = "id") int id)
202
			throws ProfitMandiBusinessException {
203
 
204
		List<LeadActivity> leadActivities = leadActivityRepository.selectBYLeadId(id);
29317 tejbeer 205
		Lead lead = leadRepository.selectById(id);
206
		lead.setLeadActivities(leadActivities);
207
		return responseSender.ok(lead);
25899 tejbeer 208
 
209
	}
210
 
25948 amit.gupta 211
	@RequestMapping(value = "/leadUpdate", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
25899 tejbeer 212
	@ApiImplicitParams({
213
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
214
	public ResponseEntity<?> leadUpdate(HttpServletRequest request, @RequestParam(name = "id") int id,
26244 tejbeer 215
			@RequestParam(name = "status") LeadStatus status, @RequestParam(name = "colorCheck") Boolean colorCheck,
28201 tejbeer 216
			@RequestParam(name = "remark") String remark, @RequestParam(name = "reason") String reason,
26958 tejbeer 217
			@RequestParam(name = "schelduleTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime schelduleTimestamp,
218
			@RequestParam(name = "closureTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime closureTimestamp)
25899 tejbeer 219
			throws ProfitMandiBusinessException {
220
 
221
		Lead lead = leadRepository.selectById(id);
222
 
223
		LeadActivity leadActivity = new LeadActivity();
26250 tejbeer 224
		lead.setStatus(status);
28201 tejbeer 225
		lead.setNotinterestedReason(reason);
26250 tejbeer 226
		leadActivity.setRemark(remark);
227
		leadActivity.setLeadId(id);
228
		leadActivity.setCreatedTimestamp(LocalDateTime.now());
229
		leadActivity.setSchelduleTimestamp(null);
26958 tejbeer 230
		leadActivity.setClosureTimestamp(null);
26250 tejbeer 231
		lead.setUpdatedTimestamp(LocalDateTime.now());
232
		if (colorCheck == true) {
233
			lead.setColor("Green");
234
		} else {
235
			lead.setColor("Yellow");
236
		}
237
		if (status == LeadStatus.followUp) {
25899 tejbeer 238
 
239
			leadActivity.setSchelduleTimestamp(schelduleTimestamp);
26958 tejbeer 240
			leadActivity.setClosureTimestamp(closureTimestamp);
27025 tejbeer 241
			lead.setClosureTimestamp(closureTimestamp);
26250 tejbeer 242
 
25899 tejbeer 243
		} else {
26250 tejbeer 244
 
25899 tejbeer 245
			leadActivity.setSchelduleTimestamp(null);
26958 tejbeer 246
			leadActivity.setClosureTimestamp(null);
27025 tejbeer 247
			lead.setClosureTimestamp(null);
26244 tejbeer 248
 
25899 tejbeer 249
		}
26250 tejbeer 250
		leadActivityRepository.persist(leadActivity);
25899 tejbeer 251
		return responseSender.ok(true);
252
 
253
	}
25952 tejbeer 254
 
27117 tejbeer 255
	@RequestMapping(value = ProfitMandiConstants.URL_NEW_LEAD, method = RequestMethod.POST)
256
	public ResponseEntity<?> newLead(HttpServletRequest request,
27597 amit.gupta 257
			@RequestBody CreateRefferalRequest createRefferalRequest) throws ProfitMandiBusinessException {
27117 tejbeer 258
		LOGGER.info("requested url : " + request.getRequestURL().toString());
259
		Lead lead = new Lead();
260
		lead.setAddress(createRefferalRequest.getCity());
27625 tejbeer 261
		Long.parseLong(createRefferalRequest.getMobile());
28201 tejbeer 262
		if (createRefferalRequest.getMobile().length() != 10) {
263
			throw new ProfitMandiBusinessException("Mobile Number", createRefferalRequest.getMobile(),
264
					"Number should be of 10 digits");
27597 amit.gupta 265
		}
27117 tejbeer 266
		lead.setLeadMobile(createRefferalRequest.getMobile());
267
		lead.setCity(createRefferalRequest.getCity());
268
		lead.setState(createRefferalRequest.getState());
269
		lead.setLastName(createRefferalRequest.getLastName());
270
		if (lead.getState().equals("Uttar Pradesh")) {
29276 amit.gupta 271
			lead.setAssignTo(53);
27117 tejbeer 272
		} else if (lead.getState().equals("Haryana")) {
29276 amit.gupta 273
			lead.setAssignTo(53);
27117 tejbeer 274
		} else if (lead.getState().equals("Delhi")) {
29276 amit.gupta 275
			lead.setAssignTo(53);
27117 tejbeer 276
		} else {
28201 tejbeer 277
			// Assign to sm
27992 amit.gupta 278
			lead.setAssignTo(53);
28201 tejbeer 279
			// Assign to neha
280
			// lead.setAssignTo(1);
27117 tejbeer 281
		}
282
		lead.setAuthId(lead.getAssignTo());
283
		lead.setCreatedBy("daily-sync");
284
		lead.setSource("SD-WEB");
285
		lead.setFirstName(createRefferalRequest.getFirstName());
286
		lead.setStatus(LeadStatus.followUp);
287
		lead.setColor("yellow");
288
		lead.setCreatedTimestamp(LocalDateTime.now());
289
		lead.setUpdatedTimestamp(LocalDateTime.now());
290
		leadRepository.persist(lead);
291
 
292
		return responseSender.ok(true);
293
 
294
	}
295
 
25952 tejbeer 296
	@RequestMapping(value = "/getPartnersList", method = RequestMethod.GET)
297
	@ApiImplicitParams({
298
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
299
	public ResponseEntity<?> getPartners(HttpServletRequest request, @RequestParam(name = "gmailId") String gmailId)
300
			throws ProfitMandiBusinessException {
301
 
25973 tejbeer 302
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
25952 tejbeer 303
 
304
		Map<String, Set<String>> storeGuyMap = csService.getAuthUserPartnerEmailMapping();
305
 
30077 tejbeer 306
		Set<String> emails = storeGuyMap.get("ankit.bhatia@smartdukaan.com");
25952 tejbeer 307
		LOGGER.info("emails" + emails);
308
		List<User> users = userRepository.selectAllByEmailIds(new ArrayList<>(emails));
309
		List<Partner> partners = new ArrayList<>();
310
		for (User user : users) {
311
 
312
			UserAccount uc = userAccountRepository.selectSaholicByUserId(user.getId());
313
			com.spice.profitmandi.dao.entity.user.User userInfo = userUserRepository.selectById(uc.getAccountKey());
314
			CustomRetailer customRetailer = retailerService.getFofoRetailer(userInfo.getId());
315
 
316
			Partner partner = new Partner();
317
			partner.setBusinessName(customRetailer.getBusinessName());
318
			partner.setPartnerId(customRetailer.getPartnerId());
319
			partner.setCartId(customRetailer.getCartId());
320
			partner.setEmail(customRetailer.getEmail());
321
			partner.setGstNumber(customRetailer.getGstNumber());
322
			partner.setDisplayName(customRetailer.getDisplayName());
323
			partner.setCity(customRetailer.getAddress().getCity());
324
			partner.setUserId(user.getId());
325
			partners.add(partner);
326
		}
327
		LOGGER.info("partners" + partners);
328
		return responseSender.ok(partners);
329
	}
330
 
331
	@RequestMapping(value = "/franchise-first-visit", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
332
	@ApiImplicitParams({
333
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
334
	public ResponseEntity<?> FranchiseFirstVisit(HttpServletRequest request,
335
			@RequestBody CreateFranchiseeRequest createFranchiseeRequest) throws Exception {
336
 
337
		FranchiseeVisit franchiseeVisit = new FranchiseeVisit();
338
		franchiseeVisit.setFofoId(createFranchiseeRequest.getFofoId());
339
		CustomRetailer customRetailer = retailerService.getFofoRetailer(createFranchiseeRequest.getFofoId());
340
 
341
		franchiseeVisit.setPartnerName(customRetailer.getBusinessName());
342
		franchiseeVisit.setAgenda(createFranchiseeRequest.getAgenda());
343
		franchiseeVisit.setCreatedTimestamp(LocalDateTime.now());
344
		franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
345
		franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
346
		franchiseeVisit.setSchelduleTimestamp(createFranchiseeRequest.getFirstSchelduleTimestamp());
347
		// change
25973 tejbeer 348
		AuthUser authUser = authRepository.selectByGmailId(createFranchiseeRequest.getCreatedBy());
25952 tejbeer 349
 
350
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
351
		franchiseeVisit.setCreatedBy(authUserName);
352
		franchiseeVisit.setAuthId(authUser.getId());
353
 
354
		franchiseeVisitRepository.persist(franchiseeVisit);
355
 
356
		return responseSender.ok(true);
357
	}
358
 
359
	@RequestMapping(value = "/franchise-visit", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
360
	@ApiImplicitParams({
361
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
362
	public ResponseEntity<?> FranchiseVisit(HttpServletRequest request,
363
			@RequestBody CreateFranchiseeRequest createFranchiseeRequest) throws Exception {
364
 
365
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(createFranchiseeRequest.getId());
366
		franchiseeVisit.setFofoId(createFranchiseeRequest.getFofoId());
367
		CustomRetailer customRetailer = retailerService.getFofoRetailer(createFranchiseeRequest.getFofoId());
368
 
369
		franchiseeVisit.setPartnerName(customRetailer.getBusinessName());
370
		franchiseeVisit.setAgenda(createFranchiseeRequest.getAgenda());
371
		franchiseeVisit.setPartnerRemark(createFranchiseeRequest.getPartnerRemark());
372
		franchiseeVisit.setOutsideVisibity(createFranchiseeRequest.getOutsideVisibity());
373
		franchiseeVisit.setInstoreVisibility(createFranchiseeRequest.getInstoreVisibility());
374
		franchiseeVisit.setOutsideStock(createFranchiseeRequest.getOutsideStock());
375
		franchiseeVisit.setSystemKnowledge(createFranchiseeRequest.getSystemKnowledge());
376
		franchiseeVisit.setWorkingDevice(createFranchiseeRequest.getWorkingDevice());
377
		franchiseeVisit.setWorkingPrinter(createFranchiseeRequest.getWorkingPrinter());
378
		franchiseeVisit.setCarryBags(createFranchiseeRequest.getCarryBags());
379
		franchiseeVisit.setSmartdukaanTshirt(createFranchiseeRequest.getSmartdukaanTshirt());
380
		franchiseeVisit.setLatestDummies(createFranchiseeRequest.getLatestDummies());
381
		franchiseeVisit.setInvestment(createFranchiseeRequest.getInvestment());
382
		franchiseeVisit.setMtd(createFranchiseeRequest.getMtd());
383
		franchiseeVisit.setHygiene(createFranchiseeRequest.getHygiene());
384
		franchiseeVisit.setCreatedTimestamp(LocalDateTime.now());
385
		franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
386
		if (createFranchiseeRequest.getAction().equals(FranchiseeActivityStatus.FOLLOWUP)) {
387
			franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
388
		} else {
389
			franchiseeVisit.setStatus(FranchiseeVisitStatus.CLOSE);
390
		}
391
 
392
		// AuthUser authUser =
393
		// authRepository.selectByGmailId(createFranchiseeRequest.getCreatedBy());
394
		// change
25973 tejbeer 395
		AuthUser authUser = authRepository.selectByGmailId(createFranchiseeRequest.getCreatedBy());
25952 tejbeer 396
 
397
		String authUserName = authUser.getFirstName() + " " + authUser.getLastName();
398
		franchiseeVisit.setCreatedBy(authUserName);
399
		franchiseeVisit.setAuthId(authUser.getId());
400
 
401
		franchiseeVisitRepository.persist(franchiseeVisit);
402
 
403
		FranchiseeActivity franchiseeActivity = new FranchiseeActivity();
404
		franchiseeActivity.setAction(createFranchiseeRequest.getAction());
405
		franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
406
		franchiseeActivity.setResolution(createFranchiseeRequest.getResolution());
407
		if (createFranchiseeRequest.getAction().equals(FranchiseeActivityStatus.FOLLOWUP)) {
408
			franchiseeActivity.setSchelduleTimestamp(createFranchiseeRequest.getSchelduleTimestamp());
409
		} else {
410
			franchiseeActivity.setSchelduleTimestamp(null);
411
		}
412
		franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
413
		franchiseeActivityRepository.persist(franchiseeActivity);
414
 
415
		franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
416
		return responseSender.ok(true);
417
	}
418
 
419
	@RequestMapping(value = "/getFranchiseVisit", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
420
	@ApiImplicitParams({
421
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
422
	public ResponseEntity<?> getFranchiseVisit(HttpServletRequest request,
423
			@RequestParam(name = "gmailId") String gmailId, @RequestParam(name = "status") FranchiseeVisitStatus status,
424
			@RequestParam(name = "offset", defaultValue = "0") int offset,
425
			@RequestParam(name = "limit", defaultValue = "10") int limit) throws ProfitMandiBusinessException {
25973 tejbeer 426
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
25952 tejbeer 427
 
428
		List<FranchiseeVisit> franchiseeVisits = franchiseeVisitRepository.selectByAuthIdAndStatus(authUser.getId(),
429
				status, offset, limit);
430
 
431
		for (FranchiseeVisit fv : franchiseeVisits) {
432
			if (fv.getFranchiseActivityId() != 0) {
433
				FranchiseeActivity fA = franchiseeActivityRepository.selectById(fv.getFranchiseActivityId());
434
				fv.setFranchiseeActivity(fA);
435
			}
436
		}
437
 
438
		return responseSender.ok(franchiseeVisits);
439
 
440
	}
441
 
442
	@RequestMapping(value = "/getFranchiseActivity", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
443
	@ApiImplicitParams({
444
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
445
	public ResponseEntity<?> getFranchiseActivity(HttpServletRequest request, @RequestParam(name = "id") int id)
446
			throws ProfitMandiBusinessException {
447
 
448
		List<FranchiseeActivity> franchiseeActivities = franchiseeActivityRepository.selectByFranchiseeVisitId(id);
449
 
450
		return responseSender.ok(franchiseeActivities);
451
 
452
	}
453
 
454
	@RequestMapping(value = "/getFranchiseeInfo", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
455
	@ApiImplicitParams({
456
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
457
	public ResponseEntity<?> getFranchiseeInfo(HttpServletRequest request, @RequestParam(name = "id") int id)
458
			throws ProfitMandiBusinessException {
459
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(id);
460
 
461
		return responseSender.ok(franchiseeVisit);
462
 
463
	}
464
 
465
	@RequestMapping(value = "/franchise-visit-update", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
466
	@ApiImplicitParams({
467
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
468
	public ResponseEntity<?> franchiseVisitUpdate(HttpServletRequest request, @RequestParam(name = "id") int id,
469
			@RequestParam(name = "action") FranchiseeActivityStatus action,
470
			@RequestParam(name = "resolution") String resolution,
471
			@RequestParam(name = "schelduleTimestamp") @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime schelduleTimestamp)
472
			throws ProfitMandiBusinessException {
473
		FranchiseeVisit franchiseeVisit = franchiseeVisitRepository.selectById(id);
474
 
475
		FranchiseeActivity franchiseeActivity = new FranchiseeActivity();
476
 
477
		if (action == FranchiseeActivityStatus.FOLLOWUP) {
478
			franchiseeActivity.setResolution(resolution);
479
			franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
480
			franchiseeActivity.setAction(action);
481
			franchiseeActivity.setSchelduleTimestamp(schelduleTimestamp);
482
			franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
483
			franchiseeActivityRepository.persist(franchiseeActivity);
484
			franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
485
			franchiseeVisit.setStatus(FranchiseeVisitStatus.OPEN);
486
			franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
487
			franchiseeVisitRepository.persist(franchiseeVisit);
488
 
489
		} else {
490
			franchiseeActivity.setResolution(resolution);
491
			franchiseeActivity.setFranchiseeVisitd(franchiseeVisit.getId());
492
			franchiseeActivity.setAction(action);
493
			franchiseeActivity.setSchelduleTimestamp(null);
494
			franchiseeActivity.setCreatedTimestamp(LocalDateTime.now());
495
			franchiseeActivityRepository.persist(franchiseeActivity);
496
			franchiseeVisit.setFranchiseActivityId(franchiseeActivity.getId());
497
			franchiseeVisit.setStatus(FranchiseeVisitStatus.CLOSE);
498
			franchiseeVisit.setUpdatedTimestamp(LocalDateTime.now());
499
			franchiseeVisitRepository.persist(franchiseeVisit);
500
 
501
		}
502
 
503
		return responseSender.ok(true);
504
 
505
	}
28935 tejbeer 506
 
507
	@RequestMapping(value = "/onBoardingTimelineStatus", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
508
	@ApiImplicitParams({
509
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
510
	public ResponseEntity<?> onBoardingTimelineStatus(HttpServletRequest request, Model model)
511
			throws ProfitMandiBusinessException {
512
		int userId = (int) request.getAttribute("userId");
513
		UserCart uc = userAccountRepository.getUserCart(userId);
514
		FofoStore fs = fofoStoreRepository.selectByRetailerId(uc.getUserId());
515
		PartnerOnBoardingPanel partnerOnBoardingPanel = partnerOnBoardingPanelRepository.selectByCode(fs.getCode());
516
		Map<StoreTimeline, OnBoardingTimelineModel> timelineStatus = null;
517
		LOGGER.info("partnerOnBoardingPanel" + partnerOnBoardingPanel);
518
		if (partnerOnBoardingPanel != null) {
519
 
520
			timelineStatus = storeTimelineTatService.getTimeline(partnerOnBoardingPanel.getId());
521
		}
522
		List<OnBoardingTimelineModel> onBoardingModel = new ArrayList<>();
523
		if (timelineStatus != null) {
524
			onBoardingModel = timelineStatus.values().stream().skip(2).map(x -> x).collect(Collectors.toList());
525
		}
526
		return responseSender.ok(onBoardingModel);
527
 
528
	}
28982 tejbeer 529
 
530
	@RequestMapping(value = "/onBoardingTimelineVisibility", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
531
	@ApiImplicitParams({
532
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
533
	public ResponseEntity<?> onBoardingTimelineVisibility(HttpServletRequest request, Model model)
534
			throws ProfitMandiBusinessException {
535
		int userId = (int) request.getAttribute("userId");
536
		UserCart uc = userAccountRepository.getUserCart(userId);
537
 
538
		FofoStore fs = fofoStoreRepository.selectByRetailerId(uc.getUserId());
539
		PartnerOnBoardingPanel partnerOnBoardingPanel = partnerOnBoardingPanelRepository.selectByCode(fs.getCode());
540
		boolean status = true;
541
		if (partnerOnBoardingPanel != null) {
542
 
543
			status = storeTimelineTatService.getTimelineCompleted(partnerOnBoardingPanel.getId());
544
		}
545
 
28983 tejbeer 546
		LOGGER.info("status" + status);
547
 
28982 tejbeer 548
		return responseSender.ok(status);
549
 
550
	}
30077 tejbeer 551
 
552
	@Autowired
553
	private OrderRepository orderRepository;
554
 
555
	@Autowired
556
	private PositionRepository positionRepository;
557
 
558
	@Autowired
559
	private UserWalletRepository userWalletRepository;
560
 
561
	@Autowired
562
	private PartnerCollectionPlanRepository partnerCollectionPlanRepository;
563
 
564
	@Autowired
565
	private PartnerSecondaryPlanRepository partnerSecondaryPlanRepository;
566
 
30087 tejbeer 567
	@Autowired
568
	private PartnerDailyInvestmentRepository partnerDailyInvestmentRepository;
569
 
30104 tejbeer 570
	@Autowired
571
	private AuthUserPartnerMappingRepository authUserPartnerMappingRepository;
572
 
30077 tejbeer 573
	@RequestMapping(value = "/getPartnerTarget", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
574
	@ApiImplicitParams({
575
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
576
	public ResponseEntity<?> getPartnerTarget(HttpServletRequest request,
30087 tejbeer 577
			@RequestParam(name = "gmailId") String gmailId, @RequestParam String dayValue)
578
			throws ProfitMandiBusinessException {
30077 tejbeer 579
 
580
		AuthUser authUser = authRepository.selectByGmailId(gmailId);
581
 
30104 tejbeer 582
		Set<Integer> fofoIds = authUserPartnerMappingRepository.selectByAuthId(authUser.getId()).stream()
583
				.map(x -> x.getFofoId()).collect(Collectors.toSet());
30077 tejbeer 584
 
30104 tejbeer 585
		if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
586
				|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")) {
30077 tejbeer 587
 
30104 tejbeer 588
			fofoIds = fofoStoreRepository.selectAll().stream().filter(x -> !x.isInternal() && x.isActive())
589
					.map(x -> x.getId()).collect(Collectors.toSet());
30078 tejbeer 590
 
30104 tejbeer 591
		}
592
 
30174 tejbeer 593
		if (authUser.getEmailId().equals("mohit.gulati@smartdukaan.com")
594
				|| authUser.getEmailId().equals("manish.gupta@smartdukaan.com")) {
595
 
596
			Map<String, Set<Integer>> storeGuyMap = csService.getAuthUserPartnerIdMapping();
597
 
598
			fofoIds = storeGuyMap.get(authUser.getEmailId());
599
 
600
		}
601
 
30205 tejbeer 602
		List<String> brands = Arrays.asList("Vivo", "Samsung", "Oppo", "Itel", "Almost New", "Others");
30077 tejbeer 603
		float totalPartnerTargetSecondary = 0;
604
		float totalPartnerTargetCollection = 0;
605
		float totalPartnerAchievementSecondary = 0;
606
		float totalPartnerAchievementCollection = 0;
607
		TargetModel tm = new TargetModel();
30087 tejbeer 608
		Map<Integer, PartnerDailyInvestment> partnerDailyInvestmentMap = new HashMap<>();
30077 tejbeer 609
 
610
		List<PartnerTargetAchievementModel> ptams = new ArrayList<>();
611
 
612
		if (fofoIds.size() > 0 && fofoIds != null) {
30087 tejbeer 613
			List<Integer> fofoIdl = new ArrayList<>(fofoIds);
614
			List<Integer> fofoIdList = fofoStoreRepository.selectByRetailerIds(fofoIdl).stream()
615
					.filter(x -> !x.isInternal()).map(x -> x.getId()).collect(Collectors.toList());
30077 tejbeer 616
 
617
			LocalDateTime startDate = LocalDate.now().atStartOfDay();
618
 
30087 tejbeer 619
			if (dayValue.equals("previous")) {
620
				startDate = LocalDate.now().minusDays(1).atStartOfDay();
30138 tejbeer 621
 
30087 tejbeer 622
			}
623
 
624
			List<PartnerDailyInvestment> partnerDailyInvestments = partnerDailyInvestmentRepository
30149 tejbeer 625
					.selectAll(fofoIdList, startDate.toLocalDate().minusDays(1));
30087 tejbeer 626
			if (!partnerDailyInvestments.isEmpty()) {
627
				partnerDailyInvestmentMap = partnerDailyInvestments.stream()
628
						.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
629
			}
630
 
30077 tejbeer 631
			Map<Integer, CustomRetailer> customRetailers = retailerService.getFofoRetailers(fofoIdList);
632
 
633
			Map<Integer, PartnerCollectionPlanModel> collectionPlans = userWalletRepository
30137 tejbeer 634
					.getPartnerWiseTargetCollections(fofoIdList, startDate).stream()
30077 tejbeer 635
					.collect(Collectors.toMap(x -> x.getFofoId(), x -> x));
636
 
637
			LOGGER.info("collectionPlans {}", collectionPlans);
638
 
639
			Map<Integer, List<PartnerSecondaryPlanModel>> partnerSecondayPlans = orderRepository
30110 tejbeer 640
					.selectPartnerSecondaryGroupByBrand(fofoIdList, startDate.toLocalDate()).stream()
30077 tejbeer 641
					.collect(Collectors.groupingBy(x -> x.getFofoId()));
642
 
643
			LOGGER.info("partnerSecondayPlans {}", partnerSecondayPlans);
644
			for (Entry<Integer, CustomRetailer> customRetailerEntry : customRetailers.entrySet()) {
645
				int fofoId = customRetailerEntry.getKey();
646
				CustomRetailer customRetailer = customRetailerEntry.getValue();
647
				float totalSecondaryPlan = 0;
648
				float totalSecondaryAchivement = 0;
649
 
650
				PartnerTargetAchievementModel ptam = new PartnerTargetAchievementModel();
651
				ptam.setFofoId(fofoId);
652
				ptam.setBusinessName(customRetailer.getBusinessName());
653
 
30087 tejbeer 654
				if (partnerDailyInvestmentMap.get(fofoId) != null) {
655
					ptam.setWalletAmount(partnerDailyInvestmentMap.get(fofoId).getWalletAmount());
656
					ptam.setShortInvestment(partnerDailyInvestmentMap.get(fofoId).getShortInvestment());
657
				}
658
 
30077 tejbeer 659
				if (collectionPlans.get(fofoId) != null) {
30137 tejbeer 660
					PartnerCollectionPlanModel collectionPlan = collectionPlans.get(fofoId);
661
 
662
					Integer authId = collectionPlan.getAuthId();
30087 tejbeer 663
					LOGGER.info("authId" + authId);
664
					if (authId != null && authId == authUser.getId()) {
30077 tejbeer 665
 
30137 tejbeer 666
						if (collectionPlan.getTargetPlan() != null && collectionPlan.getCommittedDate() != null) {
667
 
668
							if (collectionPlan.getCommittedDate().isEqual(startDate)) {
669
								totalPartnerTargetCollection += collectionPlan.getTargetPlan();
670
							}
30087 tejbeer 671
						}
30137 tejbeer 672
						if (collectionPlan.getAchievementPlan() != null) {
673
							totalPartnerAchievementCollection += collectionPlan.getAchievementPlan();
30087 tejbeer 674
						}
675
 
676
					}
677
 
678
					if (authId != null && authId != authUser.getId()) {
679
						ptam.setAuthUser(authRepository.selectById(authId));
680
						ptam.setCollectionColor("red");
681
					}
682
					if (collectionPlans.get(fofoId).getTargetPlan() != null) {
683
 
30137 tejbeer 684
						ptam.setCollectionTarget(collectionPlan.getTargetPlan());
30087 tejbeer 685
					}
686
 
687
					if (collectionPlans.get(fofoId).getAchievementPlan() != null) {
30137 tejbeer 688
						ptam.setCollectionAchievement(collectionPlan.getAchievementPlan());
30087 tejbeer 689
					}
30137 tejbeer 690
 
691
					if (collectionPlan.getCommittedDate() != null) {
692
 
693
						ptam.setCollectionCommitmentDate(collectionPlan.getCommittedDate().toLocalDate());
694
					}
30077 tejbeer 695
				}
696
 
697
				PartnerSecondaryPlanModel otherPartnerSecondaryPlanModel = null;
30087 tejbeer 698
				Map<String, PartnerSecondaryPlanModel> secondaryModelMap = new HashMap<>();
30077 tejbeer 699
				if (partnerSecondayPlans.get(fofoId) != null) {
30087 tejbeer 700
 
30077 tejbeer 701
					long otherBrandSecondary = 0;
702
					for (PartnerSecondaryPlanModel pspm : partnerSecondayPlans.get(fofoId)) {
30087 tejbeer 703
						Integer authId = pspm.getAuthId();
30077 tejbeer 704
						if (!brands.contains(pspm.getBrand())) {
30087 tejbeer 705
							if (pspm.getAchievementPlan() != null) {
706
								otherBrandSecondary += pspm.getAchievementPlan();
707
							}
30077 tejbeer 708
						} else {
709
							otherPartnerSecondaryPlanModel = pspm;
710
						}
30087 tejbeer 711
 
712
						if (pspm.getTargetPlan() != null) {
713
							totalSecondaryPlan += pspm.getTargetPlan();
714
						}
715
 
716
						if (pspm.getAchievementPlan() != null) {
717
							totalSecondaryAchivement += pspm.getAchievementPlan();
718
						}
30137 tejbeer 719
 
720
						if (pspm.getCommittedDate() != null) {
721
 
722
							ptam.setSecondaryCommitmentDate(pspm.getCommittedDate().toLocalDate());
723
						}
30087 tejbeer 724
						if (authId != null && authId == authUser.getId()) {
725
 
30137 tejbeer 726
							if (pspm.getTargetPlan() != null && pspm.getCommittedDate() != null) {
30087 tejbeer 727
 
30137 tejbeer 728
								if (pspm.getCommittedDate().isEqual(startDate)) {
729
									totalPartnerTargetSecondary += pspm.getTargetPlan();
730
								}
30087 tejbeer 731
							}
732
 
733
							if (pspm.getAchievementPlan() != null) {
734
								totalPartnerAchievementSecondary += pspm.getAchievementPlan();
735
							}
736
 
737
						}
30077 tejbeer 738
					}
739
					if (otherPartnerSecondaryPlanModel != null) {
740
						otherPartnerSecondaryPlanModel.setAchievementPlan(otherBrandSecondary);
741
					}
30087 tejbeer 742
					secondaryModelMap = partnerSecondayPlans.get(fofoId).stream()
30077 tejbeer 743
							.filter(x -> brands.contains(x.getBrand()))
744
							.collect(Collectors.toMap(x -> x.getBrand(), x -> x));
745
 
746
					if (secondaryModelMap.containsKey("Others")) {
747
						PartnerSecondaryPlanModel psp = secondaryModelMap.get("Others");
748
						psp.setAchievementPlan(otherBrandSecondary);
749
					} else {
30087 tejbeer 750
						secondaryModelMap.put("Others", new PartnerSecondaryPlanModel(fofoId, "Others", (long) 0,
30137 tejbeer 751
								otherBrandSecondary, authUser.getId(), null));
30077 tejbeer 752
					}
753
					for (String brand : brands) {
754
						if (!secondaryModelMap.containsKey(brand)) {
30137 tejbeer 755
							secondaryModelMap.put(brand, new PartnerSecondaryPlanModel(fofoId, brand, (long) 0,
756
									(long) 0, authUser.getId(), null));
30077 tejbeer 757
						}
758
					}
759
 
30087 tejbeer 760
					for (Entry<String, PartnerSecondaryPlanModel> secondaryModelEntry : secondaryModelMap.entrySet()) {
761
						Integer authId = secondaryModelEntry.getValue().getAuthId();
762
						if (authId != null && authId != authUser.getId()) {
763
							secondaryModelEntry.getValue().setAuthUser(authRepository.selectById(authId));
764
							ptam.setSecondaryColor("red");
765
						}
766
 
767
					}
768
 
30077 tejbeer 769
					ptam.setPartnerSecondaryModel(secondaryModelMap);
770
					ptam.setTotalSecondaryPlan(totalSecondaryPlan);
30087 tejbeer 771
					ptam.setTotalSecondaryAchievement(totalSecondaryAchivement);
30077 tejbeer 772
 
30087 tejbeer 773
				} else {
774
					for (String brand : brands) {
775
						PartnerSecondaryPlanModel pspm = new PartnerSecondaryPlanModel();
776
						pspm.setAchievementPlan((long) 0);
777
						pspm.setTargetPlan((long) 0);
778
						pspm.setBrand(brand);
779
						pspm.setFofoId(fofoId);
780
						secondaryModelMap.put(brand, pspm);
781
					}
782
					ptam.setPartnerSecondaryModel(secondaryModelMap);
30077 tejbeer 783
				}
784
 
30078 tejbeer 785
				ptams.add(ptam);
786
 
30077 tejbeer 787
			}
788
 
789
			tm.setTotalPartnerTargetCollection(totalPartnerTargetCollection);
790
			tm.setTotalPartnerTargetSecondary(totalPartnerTargetSecondary);
791
			tm.setTotalPartnerSecondary(totalPartnerAchievementSecondary);
792
			tm.setTotalPartnerCollection(totalPartnerAchievementCollection);
793
 
30087 tejbeer 794
			tm.setTargetAchievement(ptams.stream()
795
					.sorted(Comparator.comparing(PartnerTargetAchievementModel::getShortInvestment).reversed())
796
					.collect(Collectors.toList()));
797
 
30077 tejbeer 798
		}
799
 
800
		return responseSender.ok(tm);
801
 
802
	}
803
 
804
	@RequestMapping(value = "/target", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
805
	@ApiImplicitParams({
806
			@ApiImplicitParam(name = "Auth-Token", value = "Auth-Token", required = true, dataType = "string", paramType = "header") })
807
	public ResponseEntity<?> createPartnerTarget(HttpServletRequest request,
808
			@RequestBody PartnerTargetAchievementModel ptam) throws ProfitMandiBusinessException {
809
 
30089 tejbeer 810
		LOGGER.info("ptam" + ptam);
811
 
30087 tejbeer 812
		AuthUser authUser = authRepository.selectByGmailId(ptam.getCreatedBy());
30077 tejbeer 813
 
30137 tejbeer 814
		if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
815
				|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
816
			PartnerCollectionPlan partnerCollectionPlan = partnerCollectionPlanRepository
817
					.selectByLocalDate(LocalDate.now(), ptam.getFofoId(), true);
818
			LOGGER.info("pcp" + partnerCollectionPlan);
30077 tejbeer 819
 
30137 tejbeer 820
			if (partnerCollectionPlan == null) {
821
				if (ptam.getCollectionTarget() > 0) {
30087 tejbeer 822
 
30137 tejbeer 823
					partnerCollectionPlan = new PartnerCollectionPlan();
824
					partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
825
					partnerCollectionPlan.setAuthId(authUser.getId());
826
					partnerCollectionPlan.setFofoId(ptam.getFofoId());
827
					partnerCollectionPlan.setActive(true);
828
					partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
829
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
830
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
831
					partnerCollectionPlanRepository.persist(partnerCollectionPlan);
832
				}
30087 tejbeer 833
 
30137 tejbeer 834
			} else {
30087 tejbeer 835
 
30137 tejbeer 836
				if (partnerCollectionPlan.getCollectionPlan() != ptam.getCollectionTarget()) {
837
					float totalCollectionPlan = partnerCollectionPlan.getCollectionPlan() + 10000;
838
					if (authUser.getId() == partnerCollectionPlan.getAuthId()) {
30087 tejbeer 839
 
30185 tejbeer 840
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
841
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
842
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 843
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
844
							partnerCollectionPlan.setActive(true);
845
							partnerCollectionPlan
846
									.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
847
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
848
						} else {
849
							throw new ProfitMandiBusinessException("collection target", "",
850
									"collection target should be more than " + totalCollectionPlan);
851
						}
30087 tejbeer 852
 
853
					} else {
30137 tejbeer 854
 
30185 tejbeer 855
						if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
856
								|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
857
								|| ptam.getCollectionTarget() >= totalCollectionPlan) {
30137 tejbeer 858
 
859
							partnerCollectionPlan.setActive(false);
860
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
861
							partnerCollectionPlan = new PartnerCollectionPlan();
862
							partnerCollectionPlan.setCreateTimestamp(LocalDateTime.now());
863
							partnerCollectionPlan.setAuthId(authUser.getId());
864
							partnerCollectionPlan.setFofoId(ptam.getFofoId());
865
							partnerCollectionPlan.setActive(true);
866
							partnerCollectionPlan
867
									.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
868
							partnerCollectionPlan.setCollectionPlan(ptam.getCollectionTarget());
869
							partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
870
							partnerCollectionPlanRepository.persist(partnerCollectionPlan);
871
						} else {
872
							throw new ProfitMandiBusinessException("collection target", "",
873
									"collection target should be more than " + totalCollectionPlan);
874
						}
30087 tejbeer 875
					}
876
				}
30137 tejbeer 877
 
30146 tejbeer 878
				if ((LocalDate.now().atStartOfDay().equals(ptam.getCollectionCommitmentDate().atStartOfDay())
879
						|| ptam.getCollectionCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 880
						&& partnerCollectionPlan.getCollectionPlan() == ptam.getCollectionTarget()) {
881
					partnerCollectionPlan.setCommitedTimestamp(ptam.getCollectionCommitmentDate().atStartOfDay());
882
					partnerCollectionPlan.setUpdatedTimestamp(LocalDateTime.now());
883
				}
30087 tejbeer 884
			}
30137 tejbeer 885
		} else {
886
			throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 887
					"you can't select the back date " + ptam.getCollectionCommitmentDate());
30077 tejbeer 888
		}
889
 
890
		for (Entry<String, PartnerSecondaryPlanModel> pspm : ptam.getPartnerSecondaryModel().entrySet()) {
30087 tejbeer 891
 
30137 tejbeer 892
			if (ptam.getCollectionCommitmentDate().isAfter(LocalDate.now())
893
					|| ptam.getCollectionCommitmentDate().isEqual(LocalDate.now())) {
894
				PartnerSecondaryPlanModel plan = pspm.getValue();
895
				PartnerSecondaryPlan psp = partnerSecondaryPlanRepository.selectByLocalDateBrand(plan.getBrand(),
896
						LocalDate.now(), ptam.getFofoId(), true);
897
				LOGGER.info("psp" + psp);
30087 tejbeer 898
 
30137 tejbeer 899
				if (psp == null) {
900
					if (plan.getTargetPlan() > 0) {
30087 tejbeer 901
 
30137 tejbeer 902
						psp = new PartnerSecondaryPlan();
903
						psp.setAuthId(authUser.getId());
904
						psp.setBrand(pspm.getKey());
905
						psp.setFofoId(pspm.getValue().getFofoId());
906
						psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
907
						psp.setCreateTimestamp(LocalDateTime.now());
908
						psp.setUpdatedTimestamp(LocalDateTime.now());
909
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
910
						psp.setActive(true);
911
						partnerSecondaryPlanRepository.persist(psp);
912
					}
30087 tejbeer 913
 
30137 tejbeer 914
				} else {
915
					if (plan.getTargetPlan() != psp.getSecondaryPlan()) {
916
						float totalSecondaryPlan = psp.getSecondaryPlan() + 10000;
917
						if (authUser.getId() == plan.getAuthId()) {
30185 tejbeer 918
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
919
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
920
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30137 tejbeer 921
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
922
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
923
								psp.setUpdatedTimestamp(LocalDateTime.now());
924
								psp.setActive(true);
925
							} else {
926
								throw new ProfitMandiBusinessException("secondary target", "",
927
										"secondary target should be more than " + totalSecondaryPlan);
928
							}
30087 tejbeer 929
 
30137 tejbeer 930
						} else {
30087 tejbeer 931
 
30185 tejbeer 932
							if (authUser.getEmailId().equals("tarun.verma@smartdukaan.com")
933
									|| authUser.getEmailId().equals("rakesh.sonawane@smartdukaan.com")
934
									|| plan.getTargetPlan() >= totalSecondaryPlan) {
30087 tejbeer 935
 
30137 tejbeer 936
								psp.setUpdatedTimestamp(LocalDateTime.now());
937
								psp.setActive(false);
938
								psp = new PartnerSecondaryPlan();
939
								psp.setAuthId(authUser.getId());
940
								psp.setBrand(pspm.getKey());
941
								psp.setFofoId(pspm.getValue().getFofoId());
942
								psp.setSecondaryPlan(pspm.getValue().getTargetPlan());
943
								psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
944
								psp.setCreateTimestamp(LocalDateTime.now());
945
								psp.setUpdatedTimestamp(LocalDateTime.now());
946
								psp.setActive(true);
947
								partnerSecondaryPlanRepository.persist(psp);
948
							} else {
949
								throw new ProfitMandiBusinessException("secondary target", "",
950
										"secondary target should be more than " + totalSecondaryPlan);
951
							}
30087 tejbeer 952
						}
953
					}
30137 tejbeer 954
 
30146 tejbeer 955
					if ((LocalDate.now().atStartOfDay().equals(ptam.getSecondaryCommitmentDate().atStartOfDay())
956
							|| ptam.getSecondaryCommitmentDate().atStartOfDay().isAfter(LocalDate.now().atStartOfDay()))
30137 tejbeer 957
							&& plan.getTargetPlan() == psp.getSecondaryPlan()) {
958
						psp.setCommitedTimestamp(ptam.getSecondaryCommitmentDate().atStartOfDay());
959
						psp.setUpdatedTimestamp(LocalDateTime.now());
960
					}
961
 
30087 tejbeer 962
				}
30137 tejbeer 963
			} else {
964
				throw new ProfitMandiBusinessException("Date", "",
30138 tejbeer 965
						"you can't select the back date " + ptam.getSecondaryCommitmentDate());
30077 tejbeer 966
			}
30137 tejbeer 967
 
30077 tejbeer 968
		}
969
 
970
		return responseSender.ok(true);
30137 tejbeer 971
 
30077 tejbeer 972
	}
973
 
974
}