Subversion Repositories SmartDukaan

Rev

Rev 31608 | Rev 31903 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
26588 tejbeer 1
package com.spice.profitmandi.dao.model;
2
 
30651 amit.gupta 3
import com.spice.profitmandi.common.util.FormattingUtils;
28019 amit.gupta 4
import com.spice.profitmandi.dao.enumuration.catalog.AchievementType;
29785 amit.gupta 5
import com.spice.profitmandi.dao.enumuration.catalog.AmountType;
27878 amit.gupta 6
import com.spice.profitmandi.dao.enumuration.catalog.OfferSchemeType;
7
import com.spice.profitmandi.service.offers.ItemCriteria;
8
import com.spice.profitmandi.service.offers.PartnerCriteria;
29785 amit.gupta 9
import com.spice.profitmandi.service.offers.PayoutSlab;
30651 amit.gupta 10
import org.apache.logging.log4j.LogManager;
11
import org.apache.logging.log4j.Logger;
26588 tejbeer 12
 
30651 amit.gupta 13
import java.time.LocalDateTime;
14
import java.util.List;
31190 amit.gupta 15
import java.util.Objects;
30651 amit.gupta 16
 
26588 tejbeer 17
public class CreateOfferRequest {
27360 tejbeer 18
	private int id;
27878 amit.gupta 19
	private boolean active;
29795 amit.gupta 20
	private boolean baseCriteria;
26588 tejbeer 21
	private String name;
31190 amit.gupta 22
	private boolean booster;
26588 tejbeer 23
	private LocalDateTime startDate;
24
	private LocalDateTime endDate;
31608 amit.gupta 25
	private LocalDateTime processTimestamp;
27878 amit.gupta 26
	private String offerNotes;
27
	private String terms;
27918 amit.gupta 28
	private AchievementType targetType;
29
	private AchievementType payoutType;
27878 amit.gupta 30
	private String activationBrands;
31
	private OfferSchemeType schemeType;
32
	private double sellinPercentage;
31190 amit.gupta 33
 
31608 amit.gupta 34
	private double brandShareTerms;
35
	private ItemCriteria itemCriteria;
36
	private String itemCriteriaString;
37
	private LocalDateTime createdOn;
38
	private List<TargetSlab> targetSlabs;
39
	private PartnerCriteria partnerCriteria;
40
	private String partnerCriteriaString;
41
 
42
 
31779 amit.gupta 43
	public LocalDateTime getBillingEndDate() {
44
		return this.endDate.plusDays(30);
45
	}
31608 amit.gupta 46
	public LocalDateTime getProcessTimestamp() {
47
		return processTimestamp;
48
	}
49
 
50
	public void setProcessTimestamp(LocalDateTime processTimestamp) {
51
		this.processTimestamp = processTimestamp;
52
	}
53
 
31190 amit.gupta 54
	@Override
55
	public String toString() {
56
		return "CreateOfferRequest{" +
57
				"id=" + id +
58
				", active=" + active +
59
				", baseCriteria=" + baseCriteria +
60
				", name='" + name + '\'' +
61
				", booster=" + booster +
62
				", startDate=" + startDate +
63
				", endDate=" + endDate +
31608 amit.gupta 64
				", processTimestamp=" + processTimestamp +
31190 amit.gupta 65
				", offerNotes='" + offerNotes + '\'' +
66
				", terms='" + terms + '\'' +
67
				", targetType=" + targetType +
68
				", payoutType=" + payoutType +
69
				", activationBrands='" + activationBrands + '\'' +
70
				", schemeType=" + schemeType +
71
				", sellinPercentage=" + sellinPercentage +
72
				", brandShareTerms=" + brandShareTerms +
73
				", itemCriteria=" + itemCriteria +
74
				", itemCriteriaString='" + itemCriteriaString + '\'' +
75
				", createdOn=" + createdOn +
76
				", targetSlabs=" + targetSlabs +
77
				", partnerCriteria=" + partnerCriteria +
78
				", partnerCriteriaString='" + partnerCriteriaString + '\'' +
79
				", eligibleSale=" + eligibleSale +
80
				", nextTargetSlab=" + nextTargetSlab +
81
				", currentTargetSlab=" + currentTargetSlab +
82
				", currentTarget='" + currentTarget + '\'' +
83
				", nextTarget='" + nextTarget + '\'' +
84
				'}';
85
	}
86
 
87
	@Override
88
	public boolean equals(Object o) {
89
		if (this == o) return true;
90
		if (o == null || getClass() != o.getClass()) return false;
91
		CreateOfferRequest that = (CreateOfferRequest) o;
31608 amit.gupta 92
		return id == that.id && active == that.active && baseCriteria == that.baseCriteria && booster == that.booster && Double.compare(that.sellinPercentage, sellinPercentage) == 0 && Double.compare(that.brandShareTerms, brandShareTerms) == 0 && eligibleSale == that.eligibleSale && Objects.equals(name, that.name) && Objects.equals(startDate, that.startDate) && Objects.equals(endDate, that.endDate) && Objects.equals(processTimestamp, that.processTimestamp) && Objects.equals(offerNotes, that.offerNotes) && Objects.equals(terms, that.terms) && targetType == that.targetType && payoutType == that.payoutType && Objects.equals(activationBrands, that.activationBrands) && schemeType == that.schemeType && Objects.equals(itemCriteria, that.itemCriteria) && Objects.equals(itemCriteriaString, that.itemCriteriaString) && Objects.equals(createdOn, that.createdOn) && Objects.equals(targetSlabs, that.targetSlabs) && Objects.equals(partnerCriteria, that.partnerCriteria) && Objects.equals(partnerCriteriaString, that.partnerCriteriaString) && Objects.equals(nextTargetSlab, that.nextTargetSlab) && Objects.equals(currentTargetSlab, that.currentTargetSlab) && Objects.equals(currentTarget, that.currentTarget) && Objects.equals(nextTarget, that.nextTarget);
31190 amit.gupta 93
	}
94
 
95
	@Override
96
	public int hashCode() {
31608 amit.gupta 97
		return Objects.hash(id, active, baseCriteria, name, booster, startDate, endDate, processTimestamp, offerNotes, terms, targetType, payoutType, activationBrands, schemeType, sellinPercentage, brandShareTerms, itemCriteria, itemCriteriaString, createdOn, targetSlabs, partnerCriteria, partnerCriteriaString, eligibleSale, nextTargetSlab, currentTargetSlab, currentTarget, nextTarget);
31190 amit.gupta 98
	}
99
 
29785 amit.gupta 100
	private static final Logger LOGGER = LogManager.getLogger(CreateOfferRequest.class);
101
 
27878 amit.gupta 102
	public int getEligibleSale() {
103
		return eligibleSale;
26694 tejbeer 104
	}
29785 amit.gupta 105
 
27878 amit.gupta 106
	public void setEligibleSale(int eligibleSale) {
107
		this.eligibleSale = eligibleSale;
27353 tejbeer 108
	}
109
 
31190 amit.gupta 110
	public boolean isBooster() {
111
		return booster;
112
	}
113
 
114
	public void setBooster(boolean booster) {
115
		this.booster = booster;
116
	}
117
 
118
 
29839 amit.gupta 119
	public String getAnyItemCriteriaString() {
31190 amit.gupta 120
		return this.getItemCriteriaString().replaceAll("All", "");
121
	}
122
 
29785 amit.gupta 123
	private void addAchievementPayoutString(StringBuffer sb, ItemCriteriaPayout itemCriteriaPayout,
31190 amit.gupta 124
											PayoutSlab payoutSlab) {
29785 amit.gupta 125
		this.addAchievementString(sb, itemCriteriaPayout);
126
		sb.append(", Get ");
127
		this.addPayoutString(sb, itemCriteriaPayout, payoutSlab);
128
	}
129
 
130
	private void addAchievementString(StringBuffer sb, ItemCriteriaPayout itemCriteriaPayout) {
131
		if (this.getPayoutType().equals(AchievementType.QUANTITY)) {
29839 amit.gupta 132
			sb.append(itemCriteriaPayout.getShortValue()).append(" more ");
133
			if(this.baseCriteria) {
134
				sb.append("of ").append(this.getAnyItemCriteriaString());
135
			} else {
136
				sb.append("pc(s) ");
137
			}
29785 amit.gupta 138
		} else if (this.getPayoutType().equals(AchievementType.VALUE)) {
29839 amit.gupta 139
			if(this.baseCriteria) {
140
				sb.append(this.getAnyItemCriteriaString());
141
			} else {
142
				sb.append("select models worth");
143
			}
144
			sb.append(" of Rs.").append("<span class=\"currency\">").append(itemCriteriaPayout.getShortValue())
29785 amit.gupta 145
					.append("</span>");
146
		}
147
	}
148
 
149
	private void addPayoutString(StringBuffer sb, ItemCriteriaPayout itemCriteriaPayout, PayoutSlab payoutSlab) {
150
		if (itemCriteriaPayout.getAmountType().equals(AmountType.PERCENTAGE)) {
29839 amit.gupta 151
			sb.append(payoutSlab.getPayoutAmount()).append("% of sale of select models");
29785 amit.gupta 152
		} else if (itemCriteriaPayout.getAmountType().equals(AmountType.FIXED)) {
153
			sb.append("Rs.").append("<span class=\"currency\">").append(payoutSlab.getPayoutAmount())
29839 amit.gupta 154
					.append("</span> per pc on select models");
29785 amit.gupta 155
		} else {
156
			sb.append("flat Rs.").append("<span class=\"currency\">").append(payoutSlab.getPayoutAmount())
157
					.append("</span>");
158
		}
159
	}
160
 
28028 amit.gupta 161
	public String getDashboardHtml() {
29785 amit.gupta 162
		LOGGER.info("getDahsboard html --- {}", this.getId());
163
		String activityString = null;
164
		if (this.getSchemeType().equals(OfferSchemeType.ACTIVATION)) {
165
			activityString = "Activate";
166
		} else if (this.getSchemeType().equals(OfferSchemeType.SELLIN)) {
167
			activityString = "Purchase";
168
		} else {
169
			activityString = "Sell";
170
		}
28028 amit.gupta 171
		StringBuffer sb = new StringBuffer();
29785 amit.gupta 172
		int i=0;
173
		for (ItemCriteriaPayout itemCriteriaPayout : this.getTargetSlabs().get(0).getItemCriteriaPayouts()) {
174
			LOGGER.info("itemCriteriaPayout {}", itemCriteriaPayout);
175
			PayoutSlab currentSlab = itemCriteriaPayout.getCurrentSlab();
176
			PayoutSlab nextSlab = itemCriteriaPayout.getNextSlab();
177
			if(i>0) {
178
				sb.append("<br>");
28153 amit.gupta 179
			}
29785 amit.gupta 180
			i++;
181
			if (currentSlab == null) {
182
				sb.append(activityString).append(" ");
183
				this.addAchievementPayoutString(sb, itemCriteriaPayout, nextSlab);
28028 amit.gupta 184
			} else {
29785 amit.gupta 185
				if (itemCriteriaPayout.getNextSlab() != null) {
186
					sb.append("Congratulations, you have qualified to get ");
187
					this.addPayoutString(sb, itemCriteriaPayout, currentSlab);
188
					sb.append(". ");
189
					sb.append(activityString).append(" ");
190
					this.addAchievementPayoutString(sb, itemCriteriaPayout, nextSlab);
28541 amit.gupta 191
				} else {
29785 amit.gupta 192
					sb.append("Congratulations for achieving the highest slab,");
193
					sb.append(" you have qualified to get ");
194
					this.addPayoutString(sb, itemCriteriaPayout, currentSlab);
195
					sb.append(", keep it up!!");
28541 amit.gupta 196
				}
28028 amit.gupta 197
			}
198
		}
199
		return sb.toString();
29785 amit.gupta 200
 
28028 amit.gupta 201
	}
28967 amit.gupta 202
 
29795 amit.gupta 203
 
28967 amit.gupta 204
 
29795 amit.gupta 205
	public boolean isBaseCriteria() {
206
		return baseCriteria;
28019 amit.gupta 207
	}
28967 amit.gupta 208
 
29795 amit.gupta 209
	public void setBaseCriteria(boolean baseCriteria) {
210
		this.baseCriteria = baseCriteria;
28019 amit.gupta 211
	}
212
 
29795 amit.gupta 213
 
214
 
27878 amit.gupta 215
	private int eligibleSale;
216
	private TargetSlab nextTargetSlab;
217
	private TargetSlab currentTargetSlab;
28153 amit.gupta 218
	private String currentTarget;
219
	private String nextTarget;
27353 tejbeer 220
 
28153 amit.gupta 221
	public String getCurrentTarget() {
222
		return currentTarget;
223
	}
28967 amit.gupta 224
 
28153 amit.gupta 225
	public void setCurrentTarget(String currentTarget) {
226
		this.currentTarget = currentTarget;
227
	}
28967 amit.gupta 228
 
28153 amit.gupta 229
	public String getNextTarget() {
230
		return nextTarget;
231
	}
28967 amit.gupta 232
 
28153 amit.gupta 233
	public void setNextTarget(String nextTarget) {
234
		this.nextTarget = nextTarget;
235
	}
28967 amit.gupta 236
 
27878 amit.gupta 237
	public TargetSlab getNextTargetSlab() {
238
		return nextTargetSlab;
27353 tejbeer 239
	}
28967 amit.gupta 240
 
27878 amit.gupta 241
	public void setNextTargetSlab(TargetSlab nextTargetSlab) {
242
		this.nextTargetSlab = nextTargetSlab;
26694 tejbeer 243
	}
28967 amit.gupta 244
 
27878 amit.gupta 245
	public TargetSlab getCurrentTargetSlab() {
246
		return currentTargetSlab;
26694 tejbeer 247
	}
28967 amit.gupta 248
 
27878 amit.gupta 249
	public void setCurrentTargetSlab(TargetSlab currentTargetSlab) {
250
		this.currentTargetSlab = currentTargetSlab;
26694 tejbeer 251
	}
252
 
27878 amit.gupta 253
	public boolean isActive() {
254
		return active;
26694 tejbeer 255
	}
256
 
27878 amit.gupta 257
	public void setActive(boolean active) {
258
		this.active = active;
26694 tejbeer 259
	}
260
 
27878 amit.gupta 261
	public LocalDateTime getCreatedOn() {
262
		return createdOn;
26694 tejbeer 263
	}
264
 
27918 amit.gupta 265
	public AchievementType getPayoutType() {
266
		return payoutType;
267
	}
28967 amit.gupta 268
 
27918 amit.gupta 269
	public void setPayoutType(AchievementType payoutType) {
270
		this.payoutType = payoutType;
271
	}
28967 amit.gupta 272
 
27878 amit.gupta 273
	public String getActivationBrands() {
274
		return activationBrands;
26694 tejbeer 275
	}
28967 amit.gupta 276
 
27878 amit.gupta 277
	public void setActivationBrands(String activationBrands) {
278
		this.activationBrands = activationBrands;
26674 tejbeer 279
	}
28967 amit.gupta 280
 
27878 amit.gupta 281
	public void setCreatedOn(LocalDateTime createdOn) {
282
		this.createdOn = createdOn;
283
	}
26674 tejbeer 284
 
27878 amit.gupta 285
	public String getItemCriteriaString() {
286
		return itemCriteriaString;
26674 tejbeer 287
	}
288
 
27878 amit.gupta 289
	public String getPartnerCriteriaString() {
290
		return partnerCriteriaString;
26674 tejbeer 291
	}
292
 
27878 amit.gupta 293
	public void setPartnerCriteriaString(String partnerCriteriaString) {
294
		this.partnerCriteriaString = partnerCriteriaString;
26674 tejbeer 295
	}
296
 
27878 amit.gupta 297
	public PartnerCriteria getPartnerCriteria() {
298
		return partnerCriteria;
26674 tejbeer 299
	}
300
 
27878 amit.gupta 301
	public void setPartnerCriteria(PartnerCriteria partnerCriteria) {
302
		this.partnerCriteria = partnerCriteria;
26588 tejbeer 303
	}
304
 
27878 amit.gupta 305
	public ItemCriteria getItemCriteria() {
306
		return itemCriteria;
26588 tejbeer 307
	}
308
 
27878 amit.gupta 309
	public void setItemCriteria(ItemCriteria itemCriteria) {
310
		this.itemCriteria = itemCriteria;
26588 tejbeer 311
	}
312
 
27878 amit.gupta 313
	public double getBrandShareTerms() {
314
		return brandShareTerms;
26588 tejbeer 315
	}
316
 
27878 amit.gupta 317
	public void setBrandShareTerms(double brandShareTerms) {
318
		this.brandShareTerms = brandShareTerms;
26588 tejbeer 319
	}
320
 
27878 amit.gupta 321
	public List<TargetSlab> getTargetSlabs() {
322
		return targetSlabs;
26588 tejbeer 323
	}
324
 
27878 amit.gupta 325
	public void setTargetSlabs(List<TargetSlab> targetSlabs) {
326
		this.targetSlabs = targetSlabs;
26588 tejbeer 327
	}
328
 
27878 amit.gupta 329
	public int getId() {
330
		return id;
26588 tejbeer 331
	}
332
 
27878 amit.gupta 333
	public void setId(int id) {
334
		this.id = id;
26588 tejbeer 335
	}
336
 
337
	public String getName() {
338
		return name;
339
	}
340
 
341
	public void setName(String name) {
342
		this.name = name;
343
	}
344
 
27878 amit.gupta 345
	public LocalDateTime getStartDate() {
346
		return startDate;
26588 tejbeer 347
	}
348
 
27878 amit.gupta 349
	public void setStartDate(LocalDateTime startDate) {
350
		this.startDate = startDate;
26588 tejbeer 351
	}
352
 
27878 amit.gupta 353
	public LocalDateTime getEndDate() {
354
		return endDate;
26588 tejbeer 355
	}
356
 
27878 amit.gupta 357
	public void setEndDate(LocalDateTime endDate) {
358
		this.endDate = endDate;
26588 tejbeer 359
	}
360
 
27918 amit.gupta 361
	public AchievementType getTargetType() {
27878 amit.gupta 362
		return targetType;
26588 tejbeer 363
	}
364
 
30651 amit.gupta 365
	public String getTitle() {
366
		return String.join(" ", this.getName(), ", ", "From", FormattingUtils.formatDate(this.startDate), "to", FormattingUtils.formatDate(this.endDate), String.valueOf(this.id));
367
	}
368
 
369
	public String getDescription() {
370
		return String.join(" ", this.getName() + ",", "From", FormattingUtils.formatDate(this.startDate), "to", FormattingUtils.formatDate(this.endDate));
371
	}
372
 
27918 amit.gupta 373
	public void setTargetType(AchievementType targetType) {
27878 amit.gupta 374
		this.targetType = targetType;
26588 tejbeer 375
	}
376
 
27878 amit.gupta 377
	public OfferSchemeType getSchemeType() {
378
		return schemeType;
26588 tejbeer 379
	}
380
 
27878 amit.gupta 381
	public void setSchemeType(OfferSchemeType schemeType) {
382
		this.schemeType = schemeType;
26588 tejbeer 383
	}
384
 
27878 amit.gupta 385
	public double getSellinPercentage() {
386
		return sellinPercentage;
26588 tejbeer 387
	}
388
 
27878 amit.gupta 389
	public void setSellinPercentage(double sellinPercentage) {
390
		this.sellinPercentage = sellinPercentage;
26588 tejbeer 391
	}
392
 
27878 amit.gupta 393
	public String getOfferNotes() {
394
		return offerNotes;
26588 tejbeer 395
	}
396
 
27878 amit.gupta 397
	public void setOfferNotes(String offerNotes) {
398
		this.offerNotes = offerNotes;
26588 tejbeer 399
	}
400
 
27878 amit.gupta 401
	public String getTerms() {
402
		return terms;
26588 tejbeer 403
	}
404
 
27878 amit.gupta 405
	public void setTerms(String terms) {
406
		this.terms = terms;
26588 tejbeer 407
	}
408
 
27878 amit.gupta 409
	public void setItemCriteriaString(String itemCriteriaString) {
410
		this.itemCriteriaString = itemCriteriaString;
26588 tejbeer 411
	}
412
 
30978 amit.gupta 413
	public boolean isWithinRange(LocalDateTime testDate) {
414
		return !(testDate.isBefore(startDate) || testDate.isAfter(endDate));
415
	}
26588 tejbeer 416
}