Subversion Repositories SmartDukaan

Rev

Rev 34892 | Rev 35316 | Go to most recent revision | 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
 
5
import javax.persistence.*;
30859 tejbeer 6
import java.math.BigDecimal;
33528 amit.gupta 7
import java.time.LocalDate;
30859 tejbeer 8
import java.time.LocalDateTime;
33528 amit.gupta 9
import java.time.temporal.ChronoUnit;
30859 tejbeer 10
import java.util.List;
32681 amit.gupta 11
import java.util.Objects;
30859 tejbeer 12
 
13
@Entity
32074 tejbeer 14
@Table(name = "transaction.loan")
33827 ranu 15
@NamedQueries({
34709 amit.gupta 16
        @NamedQuery(name = "Loan.getLoansCountWithFofoID", query = "select new com.spice.profitmandi.dao.model.LoanCountByFofoIdModel(" +
17
                " cast(fofoId as int), count(id))" +
18
                " from Loan " +
19
                " where fofoId in (:fofoIds) " +
20
                " group by fofoId "),
34212 ranu 21
 
34709 amit.gupta 22
        @NamedQuery(name = "Loan.findBlockedLoans", query = "SELECT l FROM Loan l WHERE l.freeDays > 364"),
34765 amit.gupta 23
        @NamedQuery(name = "Loan.getLoansForSettlement", query = "SELECT l FROM Loan l join UserWallet  uw on uw.userId=l.fofoId WHERE uw.amount > 0 and l.freeDays < 365 and l.settledOn is null"),
34453 amit.gupta 24
 
34709 amit.gupta 25
        @NamedQuery(name = "Loan.getDueLoansByFofoId", query = "SELECT new com.spice.profitmandi.dao.model.loan.TotalLoanAmountDueModel(ls.loanId, l.pendingAmount, SUM(ls.amount)) " +
26
                "FROM Loan l JOIN LoanStatement ls on ls.loanId=l.id " +
27
                "WHERE l.fofoId = :fofoId AND l.pendingAmount > 0 " +
28
                "GROUP BY ls.loanId")
33827 ranu 29
})
30
 
30859 tejbeer 31
public class Loan {
32
 
34709 amit.gupta 33
    @Id
34
    @Column(name = "id", unique = true, updatable = false)
35
    @GeneratedValue(strategy = GenerationType.IDENTITY)
36
    private int id;
30859 tejbeer 37
 
34709 amit.gupta 38
    @Column(name = "fofo_id")
39
    private int fofoId;
30859 tejbeer 40
 
34709 amit.gupta 41
    @Column(name = "interest_rate")
42
    private BigDecimal interestRate;
30859 tejbeer 43
 
34709 amit.gupta 44
    @Column(name = "intial_amount")
45
    private BigDecimal intialAmount;
30859 tejbeer 46
 
34709 amit.gupta 47
    @Column(name = "pending_amount")
48
    private BigDecimal pendingAmount;
30859 tejbeer 49
 
34709 amit.gupta 50
    @Column(name = "created_on")
51
    private LocalDateTime createdOn;
30859 tejbeer 52
 
34709 amit.gupta 53
    @Column(name = "settled_on")
54
    private LocalDateTime settledOn;
32681 amit.gupta 55
 
34709 amit.gupta 56
    @Column(name = "due_date")
57
    private LocalDateTime dueDate;
30859 tejbeer 58
 
34709 amit.gupta 59
    @Column(name = "interest_accured")
60
    private BigDecimal interestAccrued;
30859 tejbeer 61
 
34709 amit.gupta 62
    @Column(name = "interest_paid")
63
    private BigDecimal interestPaid;
30859 tejbeer 64
 
34709 amit.gupta 65
    @Column(name = "free_days")
66
    private int freeDays;
30859 tejbeer 67
 
34709 amit.gupta 68
    @Column(name = "cd_free_days")
69
    private int cdFreeDays;
30929 tejbeer 70
 
31159 tejbeer 71
 
34709 amit.gupta 72
    @Column(name = "invoiceNumber")
73
    private String invoiceNumber;
33528 amit.gupta 74
 
34709 amit.gupta 75
    @Transient
76
    private boolean loanStatus;
33528 amit.gupta 77
 
34709 amit.gupta 78
    @Transient
79
    private BigDecimal totalPending;
80
    @Transient
81
    private List<DailyStatementModel> dailyStatementModel;
33528 amit.gupta 82
 
34709 amit.gupta 83
    public long getDays() {
84
        return ChronoUnit.DAYS.between(this.getCreatedOn().toLocalDate(), this.settledOn == null ? LocalDateTime.now() : this.getSettledOn()) + 1;
85
    }
33528 amit.gupta 86
 
34709 amit.gupta 87
    public boolean isDue() {
34895 amit 88
        return this.canBeSettled() && !this.getDueDate().toLocalDate().isBefore(LocalDate.now());
34709 amit.gupta 89
    }
30859 tejbeer 90
 
34709 amit.gupta 91
    public boolean isOverdue() {
34895 amit 92
        return this.canBeSettled() && this.getDueDate().toLocalDate().isBefore(LocalDate.now()) &&
34709 amit.gupta 93
                !this.getDueDate().plusDays(15).toLocalDate().isBefore(LocalDate.now());
94
    }
30859 tejbeer 95
 
34709 amit.gupta 96
    public boolean isDefault() {
34892 amit 97
        return canBeSettled() && this.isDefault(LocalDate.now());
34709 amit.gupta 98
    }
30859 tejbeer 99
 
34709 amit.gupta 100
    public boolean isDefault(LocalDate onDate) {
101
        return this.getSettledOn() == null && this.getDueDate().plusDays(15).toLocalDate().isBefore(onDate);
102
    }
31159 tejbeer 103
 
34709 amit.gupta 104
    public boolean canBeSettled() {
105
        return this.getFreeDays() < 365 && this.settledOn == null && (this.getCdFreeDays() == 0 || this.getDays() > this.getCdFreeDays());
106
    }
31159 tejbeer 107
 
34709 amit.gupta 108
    public int getId() {
109
        return id;
110
    }
30859 tejbeer 111
 
34709 amit.gupta 112
    public void setId(int id) {
113
        this.id = id;
114
    }
30859 tejbeer 115
 
34709 amit.gupta 116
    public BigDecimal getTotalPending() {
117
        return totalPending;
118
    }
30859 tejbeer 119
 
34709 amit.gupta 120
    public void setTotalPending(BigDecimal totalPending) {
121
        this.totalPending = totalPending;
122
    }
30859 tejbeer 123
 
34709 amit.gupta 124
    public int getFofoId() {
125
        return fofoId;
126
    }
30859 tejbeer 127
 
34709 amit.gupta 128
    public void setFofoId(int fofoId) {
129
        this.fofoId = fofoId;
130
    }
30859 tejbeer 131
 
34709 amit.gupta 132
    public BigDecimal getInterestRate() {
133
        return interestRate;
134
    }
30859 tejbeer 135
 
34709 amit.gupta 136
    public void setInterestRate(BigDecimal interestRate) {
137
        this.interestRate = interestRate;
138
    }
30859 tejbeer 139
 
34709 amit.gupta 140
    public BigDecimal getIntialAmount() {
141
        return intialAmount;
142
    }
30859 tejbeer 143
 
34709 amit.gupta 144
    public void setIntialAmount(BigDecimal intialAmount) {
145
        this.intialAmount = intialAmount;
146
    }
30859 tejbeer 147
 
34709 amit.gupta 148
    public BigDecimal getPendingAmount() {
149
        return pendingAmount;
150
    }
30859 tejbeer 151
 
34709 amit.gupta 152
    public void setPendingAmount(BigDecimal pendingAmount) {
153
        this.pendingAmount = pendingAmount;
154
    }
30859 tejbeer 155
 
34709 amit.gupta 156
    public LocalDateTime getCreatedOn() {
157
        return createdOn;
158
    }
30859 tejbeer 159
 
34709 amit.gupta 160
    public void setCreatedOn(LocalDateTime createdOn) {
161
        this.createdOn = createdOn;
162
    }
30859 tejbeer 163
 
34709 amit.gupta 164
    public LocalDateTime getDueDate() {
165
        return dueDate;
166
    }
30859 tejbeer 167
 
34709 amit.gupta 168
    public void setDueDate(LocalDateTime dueDate) {
169
        this.dueDate = dueDate;
170
    }
30859 tejbeer 171
 
34709 amit.gupta 172
    public BigDecimal getInterestAccrued() {
173
        return interestAccrued;
174
    }
30859 tejbeer 175
 
34709 amit.gupta 176
    public void setInterestAccrued(BigDecimal interestAccrued) {
177
        this.interestAccrued = interestAccrued;
178
    }
30859 tejbeer 179
 
34709 amit.gupta 180
    public BigDecimal getInterestPaid() {
181
        return interestPaid;
182
    }
30859 tejbeer 183
 
34709 amit.gupta 184
    public void setInterestPaid(BigDecimal interestPaid) {
185
        this.interestPaid = interestPaid;
186
    }
30859 tejbeer 187
 
34709 amit.gupta 188
    public int getFreeDays() {
189
        return freeDays;
190
    }
33696 amit.gupta 191
 
34709 amit.gupta 192
    public void setFreeDays(int freeDays) {
193
        this.freeDays = freeDays;
194
    }
32681 amit.gupta 195
 
34709 amit.gupta 196
    public List<DailyStatementModel> getDailyStatementModel() {
197
        return dailyStatementModel;
198
    }
32681 amit.gupta 199
 
34709 amit.gupta 200
    public void setDailyStatementModel(List<DailyStatementModel> dailyStatementModel) {
201
        this.dailyStatementModel = dailyStatementModel;
202
    }
32681 amit.gupta 203
 
34709 amit.gupta 204
    public boolean isLimit() {
205
        return this.getFreeDays() >= 365;
206
    }
32681 amit.gupta 207
 
34709 amit.gupta 208
    public String getInvoiceNumber() {
209
        return invoiceNumber;
210
    }
32681 amit.gupta 211
 
34709 amit.gupta 212
    public void setInvoiceNumber(String invoiceNumber) {
213
        this.invoiceNumber = invoiceNumber;
214
    }
30929 tejbeer 215
 
34709 amit.gupta 216
    @Override
217
    public String toString() {
218
        return "Loan{" +
219
                "id=" + id +
220
                ", fofoId=" + fofoId +
221
                ", interestRate=" + interestRate +
222
                ", intialAmount=" + intialAmount +
223
                ", pendingAmount=" + pendingAmount +
224
                ", createdOn=" + createdOn +
225
                ", settledOn=" + settledOn +
226
                ", dueDate=" + dueDate +
227
                ", interestAccrued=" + interestAccrued +
228
                ", interestPaid=" + interestPaid +
229
                ", freeDays=" + freeDays +
230
                ", loanStatus=" + loanStatus +
231
                ", totalPending=" + totalPending +
232
                ", dailyStatementModel=" + dailyStatementModel +
233
                '}';
234
    }
30929 tejbeer 235
 
34709 amit.gupta 236
    @Override
237
    public boolean equals(Object o) {
238
        if (this == o) return true;
239
        if (o == null || getClass() != o.getClass()) return false;
240
        Loan loan = (Loan) o;
241
        return id == loan.id && fofoId == loan.fofoId && freeDays == loan.freeDays && loanStatus == loan.loanStatus && Objects.equals(interestRate, loan.interestRate) && 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);
242
    }
243
 
244
    @Override
245
    public int hashCode() {
246
        return Objects.hash(id, fofoId, interestRate, intialAmount, pendingAmount, createdOn, settledOn, dueDate, interestAccrued, interestPaid, freeDays, loanStatus, totalPending, dailyStatementModel);
247
    }
248
 
249
    public LocalDateTime getSettledOn() {
250
        return settledOn;
251
    }
252
 
253
    public void setSettledOn(LocalDateTime settledOn) {
254
        this.settledOn = settledOn;
255
    }
256
 
257
    public boolean isLoanStatus() {
258
        return loanStatus;
259
    }
260
 
261
    public void setLoanStatus(boolean loanStatus) {
262
        this.loanStatus = loanStatus;
263
    }
264
 
265
    public int getCdFreeDays() {
266
        return cdFreeDays;
267
    }
268
 
269
    public void setCdFreeDays(int cdFreeDays) {
270
        this.cdFreeDays = cdFreeDays;
271
    }
30859 tejbeer 272
}