Subversion Repositories SmartDukaan

Rev

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