Subversion Repositories SmartDukaan

Rev

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