Subversion Repositories SmartDukaan

Rev

Rev 35880 | 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
 
34709 amit.gupta 86
    @Transient
87
    private boolean loanStatus;
33528 amit.gupta 88
 
34709 amit.gupta 89
    @Transient
90
    private BigDecimal totalPending;
91
    @Transient
92
    private List<DailyStatementModel> dailyStatementModel;
33528 amit.gupta 93
 
34709 amit.gupta 94
    public long getDays() {
95
        return ChronoUnit.DAYS.between(this.getCreatedOn().toLocalDate(), this.settledOn == null ? LocalDateTime.now() : this.getSettledOn()) + 1;
96
    }
33528 amit.gupta 97
 
34709 amit.gupta 98
    public boolean isDue() {
34895 amit 99
        return this.canBeSettled() && !this.getDueDate().toLocalDate().isBefore(LocalDate.now());
34709 amit.gupta 100
    }
30859 tejbeer 101
 
35876 amit 102
    public LocalDate getPenaltyDate() {
103
        return this.getCreatedOn().toLocalDate().plusDays(TOTAL_CREDIT_PERIOD_DAYS - 1);
104
    }
105
 
34709 amit.gupta 106
    public boolean isOverdue() {
34895 amit 107
        return this.canBeSettled() && this.getDueDate().toLocalDate().isBefore(LocalDate.now()) &&
35876 amit 108
                !this.getPenaltyDate().isBefore(LocalDate.now());
34709 amit.gupta 109
    }
30859 tejbeer 110
 
34709 amit.gupta 111
    public boolean isDefault() {
34892 amit 112
        return canBeSettled() && this.isDefault(LocalDate.now());
34709 amit.gupta 113
    }
30859 tejbeer 114
 
34709 amit.gupta 115
    public boolean isDefault(LocalDate onDate) {
35876 amit 116
        return this.getSettledOn() == null && this.getPenaltyDate().isBefore(onDate);
34709 amit.gupta 117
    }
31159 tejbeer 118
 
34709 amit.gupta 119
    public boolean canBeSettled() {
35864 amit 120
        return !this.limitBlock && this.settledOn == null && (this.getCdFreeDays() == 0 || this.getDays() > this.getCdFreeDays());
34709 amit.gupta 121
    }
31159 tejbeer 122
 
34709 amit.gupta 123
    public int getId() {
124
        return id;
125
    }
30859 tejbeer 126
 
34709 amit.gupta 127
    public void setId(int id) {
128
        this.id = id;
129
    }
30859 tejbeer 130
 
34709 amit.gupta 131
    public BigDecimal getTotalPending() {
132
        return totalPending;
133
    }
30859 tejbeer 134
 
34709 amit.gupta 135
    public void setTotalPending(BigDecimal totalPending) {
136
        this.totalPending = totalPending;
137
    }
30859 tejbeer 138
 
34709 amit.gupta 139
    public int getFofoId() {
140
        return fofoId;
141
    }
30859 tejbeer 142
 
34709 amit.gupta 143
    public void setFofoId(int fofoId) {
144
        this.fofoId = fofoId;
145
    }
30859 tejbeer 146
 
34709 amit.gupta 147
    public BigDecimal getInterestRate() {
148
        return interestRate;
149
    }
30859 tejbeer 150
 
34709 amit.gupta 151
    public void setInterestRate(BigDecimal interestRate) {
152
        this.interestRate = interestRate;
153
    }
30859 tejbeer 154
 
34709 amit.gupta 155
    public BigDecimal getIntialAmount() {
156
        return intialAmount;
157
    }
30859 tejbeer 158
 
34709 amit.gupta 159
    public void setIntialAmount(BigDecimal intialAmount) {
160
        this.intialAmount = intialAmount;
161
    }
30859 tejbeer 162
 
34709 amit.gupta 163
    public BigDecimal getPendingAmount() {
164
        return pendingAmount;
165
    }
30859 tejbeer 166
 
34709 amit.gupta 167
    public void setPendingAmount(BigDecimal pendingAmount) {
168
        this.pendingAmount = pendingAmount;
169
    }
30859 tejbeer 170
 
34709 amit.gupta 171
    public LocalDateTime getCreatedOn() {
172
        return createdOn;
173
    }
30859 tejbeer 174
 
34709 amit.gupta 175
    public void setCreatedOn(LocalDateTime createdOn) {
176
        this.createdOn = createdOn;
177
    }
30859 tejbeer 178
 
34709 amit.gupta 179
    public LocalDateTime getDueDate() {
180
        return dueDate;
181
    }
30859 tejbeer 182
 
34709 amit.gupta 183
    public void setDueDate(LocalDateTime dueDate) {
184
        this.dueDate = dueDate;
185
    }
30859 tejbeer 186
 
34709 amit.gupta 187
    public BigDecimal getInterestAccrued() {
188
        return interestAccrued;
189
    }
30859 tejbeer 190
 
34709 amit.gupta 191
    public void setInterestAccrued(BigDecimal interestAccrued) {
192
        this.interestAccrued = interestAccrued;
193
    }
30859 tejbeer 194
 
34709 amit.gupta 195
    public BigDecimal getInterestPaid() {
196
        return interestPaid;
197
    }
30859 tejbeer 198
 
34709 amit.gupta 199
    public void setInterestPaid(BigDecimal interestPaid) {
200
        this.interestPaid = interestPaid;
201
    }
30859 tejbeer 202
 
34709 amit.gupta 203
    public int getFreeDays() {
204
        return freeDays;
205
    }
33696 amit.gupta 206
 
34709 amit.gupta 207
    public void setFreeDays(int freeDays) {
208
        this.freeDays = freeDays;
209
    }
32681 amit.gupta 210
 
34709 amit.gupta 211
    public List<DailyStatementModel> getDailyStatementModel() {
212
        return dailyStatementModel;
213
    }
32681 amit.gupta 214
 
34709 amit.gupta 215
    public void setDailyStatementModel(List<DailyStatementModel> dailyStatementModel) {
216
        this.dailyStatementModel = dailyStatementModel;
217
    }
32681 amit.gupta 218
 
34709 amit.gupta 219
    public boolean isLimit() {
35864 amit 220
        return this.limitBlock;
34709 amit.gupta 221
    }
32681 amit.gupta 222
 
35864 amit 223
    public boolean isLimitBlock() {
224
        return limitBlock;
225
    }
226
 
227
    public void setLimitBlock(boolean limitBlock) {
228
        this.limitBlock = limitBlock;
229
    }
230
 
34709 amit.gupta 231
    public String getInvoiceNumber() {
232
        return invoiceNumber;
233
    }
32681 amit.gupta 234
 
34709 amit.gupta 235
    public void setInvoiceNumber(String invoiceNumber) {
236
        this.invoiceNumber = invoiceNumber;
237
    }
30929 tejbeer 238
 
34709 amit.gupta 239
    @Override
240
    public String toString() {
241
        return "Loan{" +
242
                "id=" + id +
243
                ", fofoId=" + fofoId +
244
                ", interestRate=" + interestRate +
245
                ", intialAmount=" + intialAmount +
246
                ", pendingAmount=" + pendingAmount +
247
                ", createdOn=" + createdOn +
248
                ", settledOn=" + settledOn +
249
                ", dueDate=" + dueDate +
250
                ", interestAccrued=" + interestAccrued +
251
                ", interestPaid=" + interestPaid +
252
                ", freeDays=" + freeDays +
35912 amit 253
                ", overdueRate=" + overdueRate +
254
                ", penaltyRate=" + penaltyRate +
35864 amit 255
                ", limitBlock=" + limitBlock +
34709 amit.gupta 256
                ", loanStatus=" + loanStatus +
257
                ", totalPending=" + totalPending +
258
                ", dailyStatementModel=" + dailyStatementModel +
259
                '}';
260
    }
30929 tejbeer 261
 
34709 amit.gupta 262
    @Override
263
    public boolean equals(Object o) {
264
        if (this == o) return true;
265
        if (o == null || getClass() != o.getClass()) return false;
266
        Loan loan = (Loan) o;
35912 amit 267
        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 268
    }
269
 
270
    @Override
271
    public int hashCode() {
35912 amit 272
        return Objects.hash(id, fofoId, interestRate, overdueRate, penaltyRate, intialAmount, pendingAmount, createdOn, settledOn, dueDate, interestAccrued, interestPaid, freeDays, limitBlock, loanStatus, totalPending, dailyStatementModel);
34709 amit.gupta 273
    }
274
 
275
    public LocalDateTime getSettledOn() {
276
        return settledOn;
277
    }
278
 
279
    public void setSettledOn(LocalDateTime settledOn) {
280
        this.settledOn = settledOn;
281
    }
282
 
283
    public boolean isLoanStatus() {
284
        return loanStatus;
285
    }
286
 
287
    public void setLoanStatus(boolean loanStatus) {
288
        this.loanStatus = loanStatus;
289
    }
290
 
291
    public int getCdFreeDays() {
292
        return cdFreeDays;
293
    }
294
 
295
    public void setCdFreeDays(int cdFreeDays) {
296
        this.cdFreeDays = cdFreeDays;
297
    }
35316 ranu 298
 
35912 amit 299
    public BigDecimal getOverdueRate() {
300
        return overdueRate;
301
    }
302
 
303
    public void setOverdueRate(BigDecimal overdueRate) {
304
        this.overdueRate = overdueRate;
305
    }
306
 
307
    public BigDecimal getPenaltyRate() {
308
        return penaltyRate;
309
    }
310
 
311
    public void setPenaltyRate(BigDecimal penaltyRate) {
312
        this.penaltyRate = penaltyRate;
313
    }
314
 
35316 ranu 315
    public long getLoanAgeInDays() {
316
        return ChronoUnit.DAYS.between(this.getCreatedOn().toLocalDate(), LocalDate.now());
317
    }
318
 
30859 tejbeer 319
}