Subversion Repositories SmartDukaan

Rev

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