Subversion Repositories SmartDukaan

Rev

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