Subversion Repositories SmartDukaan

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
35406 amit 1
package com.spice.profitmandi.dao.entity.fofo;
2
 
3
import com.spice.profitmandi.dao.convertor.LocalDateTimeAttributeConverter;
4
import com.spice.profitmandi.dao.enumuration.pinelabs.PinelabsRefundStatus;
5
 
6
import javax.persistence.*;
7
import java.io.Serializable;
8
import java.math.BigDecimal;
9
import java.time.LocalDateTime;
10
 
11
/**
12
 * Entity representing refund transactions for Pinelabs orders.
13
 *
14
 * @author Pinelabs Integration Team
15
 * @since 1.0
16
 */
17
@Entity
18
@Table(name = "pinelabs_refunds", schema = "fofo")
19
public class PinelabsRefund implements Serializable {
20
 
21
    private static final long serialVersionUID = 1L;
22
 
23
    @Id
24
    @Column(name = "id")
25
    @GeneratedValue(strategy = GenerationType.IDENTITY)
26
    private Long id;
27
 
28
    /**
29
     * Reference to Pinelabs order
30
     */
31
    @ManyToOne(fetch = FetchType.LAZY)
32
    @JoinColumn(name = "pinelabs_order_id", nullable = false)
33
    private PinelabsOrder pinelabsOrder;
34
 
35
    /**
36
     * Refund ID from Pinelabs API
37
     */
38
    @Column(name = "pinelabs_refund_id", nullable = false, unique = true, length = 100)
39
    private String pinelabsRefundId;
40
 
41
    /**
42
     * Refund amount
43
     */
44
    @Column(name = "refund_amount", nullable = false, precision = 12, scale = 2)
45
    private BigDecimal refundAmount;
46
 
47
    /**
48
     * Reason for refund
49
     */
50
    @Column(name = "refund_reason", length = 500)
51
    private String refundReason;
52
 
53
    /**
54
     * Refund status
55
     */
56
    @Column(name = "refund_status", nullable = false, length = 50)
57
    @Enumerated(EnumType.STRING)
58
    private PinelabsRefundStatus refundStatus = PinelabsRefundStatus.PENDING;
59
 
60
    /**
61
     * Bank reference number for refund
62
     */
63
    @Column(name = "refund_reference", length = 100)
64
    private String refundReference;
65
 
66
    /**
67
     * Refund initiated timestamp
68
     */
69
    @Convert(converter = LocalDateTimeAttributeConverter.class)
70
    @Column(name = "create_timestamp", nullable = false, updatable = false)
71
    private LocalDateTime createTimestamp = LocalDateTime.now();
72
 
73
    /**
74
     * Last update timestamp
75
     */
76
    @Convert(converter = LocalDateTimeAttributeConverter.class)
77
    @Column(name = "update_timestamp", nullable = false)
78
    private LocalDateTime updateTimestamp = LocalDateTime.now();
79
 
80
    /**
81
     * When refund was processed by bank
82
     */
83
    @Convert(converter = LocalDateTimeAttributeConverter.class)
84
    @Column(name = "processed_timestamp")
85
    private LocalDateTime processedTimestamp;
86
 
87
    /**
88
     * Default constructor
89
     */
90
    public PinelabsRefund() {
91
    }
92
 
93
    /**
94
     * Constructor with essential fields
95
     *
96
     * @param pinelabsOrder    The order to refund
97
     * @param pinelabsRefundId Refund ID from Pinelabs
98
     * @param refundAmount     Amount to refund
99
     */
100
    public PinelabsRefund(PinelabsOrder pinelabsOrder, String pinelabsRefundId, BigDecimal refundAmount) {
101
        this.pinelabsOrder = pinelabsOrder;
102
        this.pinelabsRefundId = pinelabsRefundId;
103
        this.refundAmount = refundAmount;
104
    }
105
 
106
    // ==================== Getters and Setters ====================
107
 
108
    public Long getId() {
109
        return id;
110
    }
111
 
112
    public void setId(Long id) {
113
        this.id = id;
114
    }
115
 
116
    public PinelabsOrder getPinelabsOrder() {
117
        return pinelabsOrder;
118
    }
119
 
120
    public void setPinelabsOrder(PinelabsOrder pinelabsOrder) {
121
        this.pinelabsOrder = pinelabsOrder;
122
    }
123
 
124
    public String getPinelabsRefundId() {
125
        return pinelabsRefundId;
126
    }
127
 
128
    public void setPinelabsRefundId(String pinelabsRefundId) {
129
        this.pinelabsRefundId = pinelabsRefundId;
130
    }
131
 
132
    public BigDecimal getRefundAmount() {
133
        return refundAmount;
134
    }
135
 
136
    public void setRefundAmount(BigDecimal refundAmount) {
137
        this.refundAmount = refundAmount;
138
    }
139
 
140
    public String getRefundReason() {
141
        return refundReason;
142
    }
143
 
144
    public void setRefundReason(String refundReason) {
145
        this.refundReason = refundReason;
146
    }
147
 
148
    public PinelabsRefundStatus getRefundStatus() {
149
        return refundStatus;
150
    }
151
 
152
    public void setRefundStatus(PinelabsRefundStatus refundStatus) {
153
        this.refundStatus = refundStatus;
154
    }
155
 
156
    public String getRefundReference() {
157
        return refundReference;
158
    }
159
 
160
    public void setRefundReference(String refundReference) {
161
        this.refundReference = refundReference;
162
    }
163
 
164
    public LocalDateTime getCreateTimestamp() {
165
        return createTimestamp;
166
    }
167
 
168
    public void setCreateTimestamp(LocalDateTime createTimestamp) {
169
        this.createTimestamp = createTimestamp;
170
    }
171
 
172
    public LocalDateTime getUpdateTimestamp() {
173
        return updateTimestamp;
174
    }
175
 
176
    public void setUpdateTimestamp(LocalDateTime updateTimestamp) {
177
        this.updateTimestamp = updateTimestamp;
178
    }
179
 
180
    public LocalDateTime getProcessedTimestamp() {
181
        return processedTimestamp;
182
    }
183
 
184
    public void setProcessedTimestamp(LocalDateTime processedTimestamp) {
185
        this.processedTimestamp = processedTimestamp;
186
    }
187
 
188
    // ==================== Helper Methods ====================
189
 
190
    /**
191
     * Check if refund is completed
192
     *
193
     * @return true if refund is successful
194
     */
195
    public boolean isCompleted() {
196
        return refundStatus == PinelabsRefundStatus.SUCCESS;
197
    }
198
 
199
    /**
200
     * Check if refund failed
201
     *
202
     * @return true if refund failed
203
     */
204
    public boolean isFailed() {
205
        return refundStatus == PinelabsRefundStatus.FAILED;
206
    }
207
 
208
    /**
209
     * Mark refund as successful
210
     *
211
     * @param reference Bank reference number
212
     */
213
    public void markAsSuccessful(String reference) {
214
        this.refundStatus = PinelabsRefundStatus.SUCCESS;
215
        this.refundReference = reference;
216
        this.processedTimestamp = LocalDateTime.now();
217
    }
218
 
219
    /**
220
     * Mark refund as failed
221
     */
222
    public void markAsFailed() {
223
        this.refundStatus = PinelabsRefundStatus.FAILED;
224
        this.processedTimestamp = LocalDateTime.now();
225
    }
226
 
227
    // ==================== Object Methods ====================
228
 
229
    @Override
230
    public int hashCode() {
231
        final int prime = 31;
232
        int result = 1;
233
        result = prime * result + ((id == null) ? 0 : id.hashCode());
234
        result = prime * result + ((pinelabsRefundId == null) ? 0 : pinelabsRefundId.hashCode());
235
        return result;
236
    }
237
 
238
    @Override
239
    public boolean equals(Object obj) {
240
        if (this == obj)
241
            return true;
242
        if (obj == null)
243
            return false;
244
        if (getClass() != obj.getClass())
245
            return false;
246
        PinelabsRefund other = (PinelabsRefund) obj;
247
        if (id == null) {
248
            if (other.id != null)
249
                return false;
250
        } else if (!id.equals(other.id))
251
            return false;
252
        if (pinelabsRefundId == null) {
253
            if (other.pinelabsRefundId != null)
254
                return false;
255
        } else if (!pinelabsRefundId.equals(other.pinelabsRefundId))
256
            return false;
257
        return true;
258
    }
259
 
260
    @Override
261
    public String toString() {
262
        return "PinelabsRefund [id=" + id + ", pinelabsRefundId=" + pinelabsRefundId + ", refundAmount="
263
                + refundAmount + ", refundReason=" + refundReason + ", refundStatus=" + refundStatus
264
                + ", refundReference=" + refundReference + ", createTimestamp=" + createTimestamp
265
                + ", processedTimestamp=" + processedTimestamp + "]";
266
    }
267
}