Subversion Repositories SmartDukaan

Rev

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