Blame | Last modification | View Log | RSS feed
package com.spice.profitmandi.dao.entity.fofo;import com.spice.profitmandi.dao.convertor.LocalDateTimeAttributeConverter;import com.spice.profitmandi.dao.enumuration.pinelabs.PinelabsRefundStatus;import javax.persistence.*;import java.io.Serializable;import java.math.BigDecimal;import java.time.LocalDateTime;/*** Entity representing refund transactions for Pinelabs orders.** @author Pinelabs Integration Team* @since 1.0*/@Entity@Table(name = "pinelabs_refunds", schema = "fofo")public class PinelabsRefund implements Serializable {private static final long serialVersionUID = 1L;@Id@Column(name = "id")@GeneratedValue(strategy = GenerationType.IDENTITY)private Long id;/*** Reference to Pinelabs order*/@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "pinelabs_order_id", nullable = false)private PinelabsOrder pinelabsOrder;/*** Refund ID from Pinelabs API*/@Column(name = "pinelabs_refund_id", nullable = false, unique = true, length = 100)private String pinelabsRefundId;/*** Refund amount*/@Column(name = "refund_amount", nullable = false, precision = 12, scale = 2)private BigDecimal refundAmount;/*** Reason for refund*/@Column(name = "refund_reason", length = 500)private String refundReason;/*** Refund status*/@Column(name = "refund_status", nullable = false, length = 50)@Enumerated(EnumType.STRING)private PinelabsRefundStatus refundStatus = PinelabsRefundStatus.PENDING;/*** Bank reference number for refund*/@Column(name = "refund_reference", length = 100)private String refundReference;/*** Refund initiated timestamp*/@Convert(converter = LocalDateTimeAttributeConverter.class)@Column(name = "create_timestamp", nullable = false, updatable = false)private LocalDateTime createTimestamp = LocalDateTime.now();/*** Last update timestamp*/@Convert(converter = LocalDateTimeAttributeConverter.class)@Column(name = "update_timestamp", nullable = false)private LocalDateTime updateTimestamp = LocalDateTime.now();/*** When refund was processed by bank*/@Convert(converter = LocalDateTimeAttributeConverter.class)@Column(name = "processed_timestamp")private LocalDateTime processedTimestamp;/*** Default constructor*/public PinelabsRefund() {}/*** Constructor with essential fields** @param pinelabsOrder The order to refund* @param pinelabsRefundId Refund ID from Pinelabs* @param refundAmount Amount to refund*/public PinelabsRefund(PinelabsOrder pinelabsOrder, String pinelabsRefundId, BigDecimal refundAmount) {this.pinelabsOrder = pinelabsOrder;this.pinelabsRefundId = pinelabsRefundId;this.refundAmount = refundAmount;}// ==================== Getters and Setters ====================public Long getId() {return id;}public void setId(Long id) {this.id = id;}public PinelabsOrder getPinelabsOrder() {return pinelabsOrder;}public void setPinelabsOrder(PinelabsOrder pinelabsOrder) {this.pinelabsOrder = pinelabsOrder;}public String getPinelabsRefundId() {return pinelabsRefundId;}public void setPinelabsRefundId(String pinelabsRefundId) {this.pinelabsRefundId = pinelabsRefundId;}public BigDecimal getRefundAmount() {return refundAmount;}public void setRefundAmount(BigDecimal refundAmount) {this.refundAmount = refundAmount;}public String getRefundReason() {return refundReason;}public void setRefundReason(String refundReason) {this.refundReason = refundReason;}public PinelabsRefundStatus getRefundStatus() {return refundStatus;}public void setRefundStatus(PinelabsRefundStatus refundStatus) {this.refundStatus = refundStatus;}public String getRefundReference() {return refundReference;}public void setRefundReference(String refundReference) {this.refundReference = refundReference;}public LocalDateTime getCreateTimestamp() {return createTimestamp;}public void setCreateTimestamp(LocalDateTime createTimestamp) {this.createTimestamp = createTimestamp;}public LocalDateTime getUpdateTimestamp() {return updateTimestamp;}public void setUpdateTimestamp(LocalDateTime updateTimestamp) {this.updateTimestamp = updateTimestamp;}public LocalDateTime getProcessedTimestamp() {return processedTimestamp;}public void setProcessedTimestamp(LocalDateTime processedTimestamp) {this.processedTimestamp = processedTimestamp;}// ==================== Helper Methods ====================/*** Check if refund is completed** @return true if refund is successful*/public boolean isCompleted() {return refundStatus == PinelabsRefundStatus.SUCCESS;}/*** Check if refund failed** @return true if refund failed*/public boolean isFailed() {return refundStatus == PinelabsRefundStatus.FAILED;}/*** Mark refund as successful** @param reference Bank reference number*/public void markAsSuccessful(String reference) {this.refundStatus = PinelabsRefundStatus.SUCCESS;this.refundReference = reference;this.processedTimestamp = LocalDateTime.now();}/*** Mark refund as failed*/public void markAsFailed() {this.refundStatus = PinelabsRefundStatus.FAILED;this.processedTimestamp = LocalDateTime.now();}// ==================== Object Methods ====================@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + ((id == null) ? 0 : id.hashCode());result = prime * result + ((pinelabsRefundId == null) ? 0 : pinelabsRefundId.hashCode());return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;PinelabsRefund other = (PinelabsRefund) obj;if (id == null) {if (other.id != null)return false;} else if (!id.equals(other.id))return false;if (pinelabsRefundId == null) {if (other.pinelabsRefundId != null)return false;} else if (!pinelabsRefundId.equals(other.pinelabsRefundId))return false;return true;}@Overridepublic String toString() {return "PinelabsRefund [id=" + id + ", pinelabsRefundId=" + pinelabsRefundId + ", refundAmount="+ refundAmount + ", refundReason=" + refundReason + ", refundStatus=" + refundStatus+ ", refundReference=" + refundReference + ", createTimestamp=" + createTimestamp+ ", processedTimestamp=" + processedTimestamp + "]";}}