Subversion Repositories SmartDukaan

Rev

Rev 35912 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
30859 tejbeer 1
package com.spice.profitmandi.dao.entity.transaction;
2
 
32681 amit.gupta 3
import com.spice.profitmandi.dao.model.DailyStatementModel;
4
 
35876 amit 5
import static com.spice.profitmandi.common.model.ProfitMandiConstants.TOTAL_CREDIT_PERIOD_DAYS;
6
 
32681 amit.gupta 7
import javax.persistence.*;
30859 tejbeer 8
import java.math.BigDecimal;
33528 amit.gupta 9
import java.time.LocalDate;
30859 tejbeer 10
import java.time.LocalDateTime;
33528 amit.gupta 11
import java.time.temporal.ChronoUnit;
30859 tejbeer 12
import java.util.List;
32681 amit.gupta 13
import java.util.Objects;
30859 tejbeer 14
 
15
@Entity
32074 tejbeer 16
@Table(name = "transaction.loan")
33827 ranu 17
@NamedQueries({
34709 amit.gupta 18
        @NamedQuery(name = "Loan.getLoansCountWithFofoID", query = "select new com.spice.profitmandi.dao.model.LoanCountByFofoIdModel(" +
19
                " cast(fofoId as int), count(id))" +
20
                " from Loan " +
21
                " where fofoId in (:fofoIds) " +
22
                " group by fofoId "),
34212 ranu 23
 
35864 amit 24
        @NamedQuery(name = "Loan.getLoansForSettlement", query = "SELECT l FROM Loan l join UserWallet  uw on uw.userId=l.fofoId WHERE uw.amount > 0 and l.limitBlock = false and l.settledOn is null"),
35320 ranu 25
        @NamedQuery(name = "Loan.getStateWiseLoan", query = "SELECT l FROM Loan l join FofoStore  fs on fs.id=l.fofoId join AST ast on ast.id = fs.astId join State st on st.id= ast.stateId WHERE st.name = :stateName and  l.pendingAmount > 0 and l.settledOn is null"),
34453 amit.gupta 26
 
34709 amit.gupta 27
        @NamedQuery(name = "Loan.getDueLoansByFofoId", query = "SELECT new com.spice.profitmandi.dao.model.loan.TotalLoanAmountDueModel(ls.loanId, l.pendingAmount, SUM(ls.amount)) " +
28
                "FROM Loan l JOIN LoanStatement ls on ls.loanId=l.id " +
29
                "WHERE l.fofoId = :fofoId AND l.pendingAmount > 0 " +
30
                "GROUP BY ls.loanId")
33827 ranu 31
})
32
 
30859 tejbeer 33
public class Loan {
34
 
34709 amit.gupta 35
    @Id
36
    @Column(name = "id", unique = true, updatable = false)
37
    @GeneratedValue(strategy = GenerationType.IDENTITY)
38
    private int id;
30859 tejbeer 39
 
34709 amit.gupta 40
    @Column(name = "fofo_id")
41
    private int fofoId;
30859 tejbeer 42
 
34709 amit.gupta 43
    @Column(name = "interest_rate")
44
    private BigDecimal interestRate;
30859 tejbeer 45
 
34709 amit.gupta 46
    @Column(name = "intial_amount")
47
    private BigDecimal intialAmount;
30859 tejbeer 48
 
34709 amit.gupta 49
    @Column(name = "pending_amount")
50
    private BigDecimal pendingAmount;
30859 tejbeer 51
 
34709 amit.gupta 52
    @Column(name = "created_on")
53
    private LocalDateTime createdOn;
30859 tejbeer 54
 
34709 amit.gupta 55
    @Column(name = "settled_on")
56
    private LocalDateTime settledOn;
32681 amit.gupta 57
 
34709 amit.gupta 58
    @Column(name = "due_date")
59
    private LocalDateTime dueDate;
30859 tejbeer 60
 
34709 amit.gupta 61
    @Column(name = "interest_accured")
62
    private BigDecimal interestAccrued;
30859 tejbeer 63
 
34709 amit.gupta 64
    @Column(name = "interest_paid")
65
    private BigDecimal interestPaid;
30859 tejbeer 66
 
34709 amit.gupta 67
    @Column(name = "free_days")
68
    private int freeDays;
30859 tejbeer 69
 
34709 amit.gupta 70
    @Column(name = "cd_free_days")
71
    private int cdFreeDays;
30929 tejbeer 72
 
31159 tejbeer 73
 
34709 amit.gupta 74
    @Column(name = "invoiceNumber")
75
    private String invoiceNumber;
33528 amit.gupta 76
 
35912 amit 77
    @Column(name = "overdue_rate")
78
    private BigDecimal overdueRate;
79
 
80
    @Column(name = "penalty_rate")
81
    private BigDecimal penaltyRate;
82
 
35864 amit 83
    @Column(name = "limit_block")
84
    private boolean limitBlock;
85
 
36557 amit 86
    @Column(name = "description")
87
    private String description;
88
 
89
    @Column(name = "is_flagship")
90
    private boolean flagship;
91
 
92
    @Column(name = "flagship_deadline")
93
    private LocalDateTime flagshipDeadline;
94
 
34709 amit.gupta 95
    @Transient
96
    private boolean loanStatus;
33528 amit.gupta 97
 
34709 amit.gupta 98
    @Transient
99
    private BigDecimal totalPending;
100
    @Transient
101
    private List<DailyStatementModel> dailyStatementModel;
33528 amit.gupta 102
 
34709 amit.gupta 103
    public long getDays() {
104
        return ChronoUnit.DAYS.between(this.getCreatedOn().toLocalDate(), this.settledOn == null ? LocalDateTime.now() : this.getSettledOn()) + 1;
105
    }
33528 amit.gupta 106
 
34709 amit.gupta 107
    public boolean isDue() {
34895 amit 108
        return this.canBeSettled() && !this.getDueDate().toLocalDate().isBefore(LocalDate.now());
34709 amit.gupta 109
    }
30859 tejbeer 110
 
35876 amit 111
    public LocalDate getPenaltyDate() {
112
        return this.getCreatedOn().toLocalDate().plusDays(TOTAL_CREDIT_PERIOD_DAYS - 1);
113
    }
114
 
34709 amit.gupta 115
    public boolean isOverdue() {
34895 amit 116
        return this.canBeSettled() && this.getDueDate().toLocalDate().isBefore(LocalDate.now()) &&
35876 amit 117
                !this.getPenaltyDate().isBefore(LocalDate.now());
34709 amit.gupta 118
    }
30859 tejbeer 119
 
34709 amit.gupta 120
    public boolean isDefault() {
34892 amit 121
        return canBeSettled() && this.isDefault(LocalDate.now());
34709 amit.gupta 122
    }
30859 tejbeer 123
 
34709 amit.gupta 124
    public boolean isDefault(LocalDate onDate) {
35876 amit 125
        return this.getSettledOn() == null && this.getPenaltyDate().isBefore(onDate);
34709 amit.gupta 126
    }
31159 tejbeer 127
 
34709 amit.gupta 128
    public boolean canBeSettled() {
35864 amit 129
        return !this.limitBlock && this.settledOn == null && (this.getCdFreeDays() == 0 || this.getDays() > this.getCdFreeDays());
34709 amit.gupta 130
    }
31159 tejbeer 131
 
34709 amit.gupta 132
    public int getId() {
133
        return id;
134
    }
30859 tejbeer 135
 
34709 amit.gupta 136
    public void setId(int id) {
137
        this.id = id;
138
    }
30859 tejbeer 139
 
34709 amit.gupta 140
    public BigDecimal getTotalPending() {
141
        return totalPending;
142
    }
30859 tejbeer 143
 
34709 amit.gupta 144
    public void setTotalPending(BigDecimal totalPending) {
145
        this.totalPending = totalPending;
146
    }
30859 tejbeer 147
 
34709 amit.gupta 148
    public int getFofoId() {
149
        return fofoId;
150
    }
30859 tejbeer 151
 
34709 amit.gupta 152
    public void setFofoId(int fofoId) {
153
        this.fofoId = fofoId;
154
    }
30859 tejbeer 155
 
34709 amit.gupta 156
    public BigDecimal getInterestRate() {
157
        return interestRate;
158
    }
30859 tejbeer 159
 
34709 amit.gupta 160
    public void setInterestRate(BigDecimal interestRate) {
161
        this.interestRate = interestRate;
162
    }
30859 tejbeer 163
 
34709 amit.gupta 164
    public BigDecimal getIntialAmount() {
165
        return intialAmount;
166
    }
30859 tejbeer 167
 
34709 amit.gupta 168
    public void setIntialAmount(BigDecimal intialAmount) {
169
        this.intialAmount = intialAmount;
170
    }
30859 tejbeer 171
 
34709 amit.gupta 172
    public BigDecimal getPendingAmount() {
173
        return pendingAmount;
174
    }
30859 tejbeer 175
 
34709 amit.gupta 176
    public void setPendingAmount(BigDecimal pendingAmount) {
177
        this.pendingAmount = pendingAmount;
178
    }
30859 tejbeer 179
 
34709 amit.gupta 180
    public LocalDateTime getCreatedOn() {
181
        return createdOn;
182
    }
30859 tejbeer 183
 
34709 amit.gupta 184
    public void setCreatedOn(LocalDateTime createdOn) {
185
        this.createdOn = createdOn;
186
    }
30859 tejbeer 187
 
34709 amit.gupta 188
    public LocalDateTime getDueDate() {
189
        return dueDate;
190
    }
30859 tejbeer 191
 
34709 amit.gupta 192
    public void setDueDate(LocalDateTime dueDate) {
193
        this.dueDate = dueDate;
194
    }
30859 tejbeer 195
 
34709 amit.gupta 196
    public BigDecimal getInterestAccrued() {
197
        return interestAccrued;
198
    }
30859 tejbeer 199
 
34709 amit.gupta 200
    public void setInterestAccrued(BigDecimal interestAccrued) {
201
        this.interestAccrued = interestAccrued;
202
    }
30859 tejbeer 203
 
34709 amit.gupta 204
    public BigDecimal getInterestPaid() {
205
        return interestPaid;
206
    }
30859 tejbeer 207
 
34709 amit.gupta 208
    public void setInterestPaid(BigDecimal interestPaid) {
209
        this.interestPaid = interestPaid;
210
    }
30859 tejbeer 211
 
34709 amit.gupta 212
    public int getFreeDays() {
213
        return freeDays;
214
    }
33696 amit.gupta 215
 
34709 amit.gupta 216
    public void setFreeDays(int freeDays) {
217
        this.freeDays = freeDays;
218
    }
32681 amit.gupta 219
 
34709 amit.gupta 220
    public List<DailyStatementModel> getDailyStatementModel() {
221
        return dailyStatementModel;
222
    }
32681 amit.gupta 223
 
34709 amit.gupta 224
    public void setDailyStatementModel(List<DailyStatementModel> dailyStatementModel) {
225
        this.dailyStatementModel = dailyStatementModel;
226
    }
32681 amit.gupta 227
 
34709 amit.gupta 228
    public boolean isLimit() {
35864 amit 229
        return this.limitBlock;
34709 amit.gupta 230
    }
32681 amit.gupta 231
 
35864 amit 232
    public boolean isLimitBlock() {
233
        return limitBlock;
234
    }
235
 
236
    public void setLimitBlock(boolean limitBlock) {
237
        this.limitBlock = limitBlock;
238
    }
239
 
34709 amit.gupta 240
    public String getInvoiceNumber() {
241
        return invoiceNumber;
242
    }
32681 amit.gupta 243
 
34709 amit.gupta 244
    public void setInvoiceNumber(String invoiceNumber) {
245
        this.invoiceNumber = invoiceNumber;
246
    }
30929 tejbeer 247
 
36557 amit 248
    public String getDescription() {
249
        return description;
250
    }
251
 
252
    public void setDescription(String description) {
253
        this.description = description;
254
    }
255
 
256
    public boolean isFlagship() {
257
        return flagship;
258
    }
259
 
260
    public void setFlagship(boolean flagship) {
261
        this.flagship = flagship;
262
    }
263
 
264
    public LocalDateTime getFlagshipDeadline() {
265
        return flagshipDeadline;
266
    }
267
 
268
    public void setFlagshipDeadline(LocalDateTime flagshipDeadline) {
269
        this.flagshipDeadline = flagshipDeadline;
270
    }
271
 
34709 amit.gupta 272
    @Override
273
    public String toString() {
274
        return "Loan{" +
275
                "id=" + id +
276
                ", fofoId=" + fofoId +
277
                ", interestRate=" + interestRate +
278
                ", intialAmount=" + intialAmount +
279
                ", pendingAmount=" + pendingAmount +
280
                ", createdOn=" + createdOn +
281
                ", settledOn=" + settledOn +
282
                ", dueDate=" + dueDate +
283
                ", interestAccrued=" + interestAccrued +
284
                ", interestPaid=" + interestPaid +
285
                ", freeDays=" + freeDays +
35912 amit 286
                ", overdueRate=" + overdueRate +
287
                ", penaltyRate=" + penaltyRate +
35864 amit 288
                ", limitBlock=" + limitBlock +
36557 amit 289
                ", description='" + description + '\'' +
290
                ", flagship=" + flagship +
291
                ", flagshipDeadline=" + flagshipDeadline +
34709 amit.gupta 292
                ", loanStatus=" + loanStatus +
293
                ", totalPending=" + totalPending +
294
                ", dailyStatementModel=" + dailyStatementModel +
295
                '}';
296
    }
30929 tejbeer 297
 
34709 amit.gupta 298
    @Override
299
    public boolean equals(Object o) {
300
        if (this == o) return true;
301
        if (o == null || getClass() != o.getClass()) return false;
302
        Loan loan = (Loan) o;
35912 amit 303
        return id == loan.id && fofoId == loan.fofoId && freeDays == loan.freeDays && limitBlock == loan.limitBlock && loanStatus == loan.loanStatus && Objects.equals(interestRate, loan.interestRate) && Objects.equals(overdueRate, loan.overdueRate) && Objects.equals(penaltyRate, loan.penaltyRate) && Objects.equals(intialAmount, loan.intialAmount) && Objects.equals(pendingAmount, loan.pendingAmount) && Objects.equals(createdOn, loan.createdOn) && Objects.equals(settledOn, loan.settledOn) && Objects.equals(dueDate, loan.dueDate) && Objects.equals(interestAccrued, loan.interestAccrued) && Objects.equals(interestPaid, loan.interestPaid) && Objects.equals(totalPending, loan.totalPending) && Objects.equals(dailyStatementModel, loan.dailyStatementModel);
34709 amit.gupta 304
    }
305
 
306
    @Override
307
    public int hashCode() {
35912 amit 308
        return Objects.hash(id, fofoId, interestRate, overdueRate, penaltyRate, intialAmount, pendingAmount, createdOn, settledOn, dueDate, interestAccrued, interestPaid, freeDays, limitBlock, loanStatus, totalPending, dailyStatementModel);
34709 amit.gupta 309
    }
310
 
311
    public LocalDateTime getSettledOn() {
312
        return settledOn;
313
    }
314
 
315
    public void setSettledOn(LocalDateTime settledOn) {
316
        this.settledOn = settledOn;
317
    }
318
 
319
    public boolean isLoanStatus() {
320
        return loanStatus;
321
    }
322
 
323
    public void setLoanStatus(boolean loanStatus) {
324
        this.loanStatus = loanStatus;
325
    }
326
 
327
    public int getCdFreeDays() {
328
        return cdFreeDays;
329
    }
330
 
331
    public void setCdFreeDays(int cdFreeDays) {
332
        this.cdFreeDays = cdFreeDays;
333
    }
35316 ranu 334
 
35912 amit 335
    public BigDecimal getOverdueRate() {
336
        return overdueRate;
337
    }
338
 
339
    public void setOverdueRate(BigDecimal overdueRate) {
340
        this.overdueRate = overdueRate;
341
    }
342
 
343
    public BigDecimal getPenaltyRate() {
344
        return penaltyRate;
345
    }
346
 
347
    public void setPenaltyRate(BigDecimal penaltyRate) {
348
        this.penaltyRate = penaltyRate;
349
    }
350
 
35316 ranu 351
    public long getLoanAgeInDays() {
352
        return ChronoUnit.DAYS.between(this.getCreatedOn().toLocalDate(), LocalDate.now());
353
    }
354
 
30859 tejbeer 355
}