You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

280 lines
9.3 KiB

package com.gcc.communityHall.service.Impl;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Optional;
import java.util.Date;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.gcc.communityHall.entity.BookingDetails;
import com.gcc.communityHall.entity.BookingHistory;
import com.gcc.communityHall.entity.BookingDetails.RefundStatus;
import com.gcc.communityHall.entity.Settlement;
import com.gcc.communityHall.entity.SettlementHistory;
import com.gcc.communityHall.repository.BookingDetailsRepository;
import com.gcc.communityHall.repository.BookingHistoryRepository;
import com.gcc.communityHall.repository.SettlementHistoryRepository;
import com.gcc.communityHall.repository.SettlementRepository;
import com.gcc.communityHall.service.SettlementService;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.Optional;
import jakarta.servlet.http.HttpSession;
@Service
public class SettlementServiceImpl implements SettlementService {
// ak
@Autowired
private SettlementHistoryRepository settlementHistoryRepository;
@Autowired
SettlementRepository settlementRepository;
@Autowired
BookingDetailsRepository bookingDetailsRepository;
@Autowired
private BookingHistoryRepository bookingHistoryRepository;
@Autowired
private HttpSession session;
@Value("${file.upload.directory}")
private String UploadDirectory;
@Value("${file.fullpath}")
private String serverPath;
private final String settlementDirectory;
private final String settlementPhotoUrl;
@Autowired
SettlementServiceImpl(SettlementRepository settlementRepository,
@Value("${file.settlement.upload.directory}") String settlementDirectory,
@Value("${file.settlement.fullpath}") String settlementPhotoUrl) {
this.settlementDirectory = settlementDirectory;
this.settlementPhotoUrl = settlementPhotoUrl;
}
// @Override
// public Settlement getSettlementById(int settlementId) {
// Optional<Settlement> settlement= settlementRepository.findById(settlementId);
// if(settlement.isPresent()){
// return settlement.get();
// }
// return null;
// }
// @Override
// public Settlement getSettlementById(int settlementId) {
// return settlementRepository.findByIdWithBookingDetails(settlementId);
// }
@Override
public Settlement getSettlementById(int settlementId) {
Optional<Settlement> settlementOptional = settlementRepository.findById(settlementId);
if (settlementOptional.isPresent()) {
Settlement settlement = settlementOptional.get();
// Initialize the BookingDetails object
settlement.getBookingDetails();
// System.out.println("✅ Approved flag reset after 4 days for Settlement ID: " +
// settlementId);
return settlement;
}
return null;
}
// ak
/*
* @Override
* public Settlement getSettlementById(int settlementId) {
* Optional<Settlement> settlementOptional =
* settlementRepository.findById(settlementId);
*
* if (settlementOptional.isPresent()) {
* Settlement settlement = settlementOptional.get();
*
* // Initialize BookingDetails
* settlement.getBookingDetails();
* System.out.println("settlement.getBookingDetails(): " +
* settlement.getBookingDetails());
*
* // ✅ Auto-reset logic: if approved for 4+ days, reset flag
* if (settlement.getApprovedFlag() == 1 && settlement.getApprovedFlagDate() !=
* null) {
* long millisDiff = System.currentTimeMillis() -
* settlement.getApprovedFlagDate().getTime();
* long daysDiff = millisDiff / (1000 * 60 * 60 * 24);
* System.out.println("Approved Flag Date: " +
* settlement.getApprovedFlagDate());
* System.out.println("Current Java Date: " + new Date());
* System.out.println("Days Difference: " + daysDiff);
*
*
* if (daysDiff >= 4) {
* settlement.setApprovedFlag(0);
* settlement.setApprovedFlagDate(null);
* settlementRepository.save(settlement);
* System.out.println("✅ Approved flag reset after 4 days for Settlement ID: " +
* settlementId);
* }
* }
*
* return settlement;
* }
*
* return null;
* }
*/
@Override
public List<Settlement> getSettlementListWithWaitingRefund() {
return settlementRepository.findByBookingDetailsRefundStatus(RefundStatus.WAITING);
}
@Override
public Settlement updateSettlementStatus(int settlementId, BookingDetails.RefundStatus status, String comments) {
Optional<Settlement> settlementOptional = settlementRepository.findById(settlementId);
String adminname = (String) session.getAttribute("usertype");
if (settlementOptional.isPresent()) {
Settlement settlement = settlementOptional.get();
System.out.println("settlement@12345" + settlement);
BookingDetails bookingDetails = settlement.getBookingDetails(); // Fetch associated BookingDetails
// Update BookingDetails with new RefundStatus
// bookingDetails.setRefundStatus(status);
// If the refund status is COMPLETED, update the BookingStatus to COMPLETED
// if (status == BookingDetails.RefundStatus.COMPLETED) {
// bookingDetails.setBookingStatus(BookingDetails.BookingStatus.COMPLETED);
// }else {
// bookingDetails.setBookingStatus(BookingDetails.BookingStatus.APPROVED);
// }
// to maintain history for settlement
bookingDetailsRepository.save(bookingDetails);
//ak
//settlement histoty insert
if (settlementOptional.isPresent()) {
SettlementHistory history = new SettlementHistory();
history.setSettlementId(settlement.getSettlementId());
history.setComments(settlement.getComments());
history.setCdate(settlement.getCdate());
history.setDamageAmount(settlement.getDamageAmount());
history.setEbAmount(settlement.getEbAmount());
history.setDepositAmount(settlement.getDepositAmount());
history.setRefundedAmount(settlement.getRefundedAmount());
history.setUpdatedDate(new Date());
history.setUpdatedId(adminname);
history.setChallon(settlement.getChallon());
history.setDddate(settlement.getDddate());
history.setDdnumber(settlement.getDdnumber());
history.setBookingDetails(settlement.getBookingDetails());
history.setCollectionPending(settlement.getCollectionPending());
history.setDdamount(settlement.getDdamount());
history.setChallonnumber(settlement.getChallonnumber());
history.setCollectionStatus(settlement.getCollectionStatus());
history.setChallonamount(settlement.getChallonamount());
history.setApprovedFlag(settlement.getApprovedFlag());
history.setApprovedFlagDate(settlement.getApprovedFlagDate());
history.setShDate(new Date());
settlementHistoryRepository.save(history);
System.out.println("✅ Record inserted into SettlementHistory for Settlement ID: " + settlementId);
}
// checking ak
//settlement.setApprovedFlag(1);
//settlement.setApprovedFlagDate(new Date());
settlement.setUpdatedDate(new Date());
// Update Settlement comments
settlement.setComments(comments);
// Save and return updated Settlement
return settlementRepository.save(settlement);
}
return null;
}
// ak
@Override
public Settlement updateRejectSettlementStatus(int settlementId, BookingDetails.RefundStatus status,
String comments) {
Optional<Settlement> settlementOptional = settlementRepository.findById(settlementId);
if (settlementOptional.isPresent()) {
Settlement settlement = settlementOptional.get();
BookingDetails bookingDetails = settlement.getBookingDetails(); // Fetch associated BookingDetails
bookingDetails.setRefundStatus(status);
bookingDetailsRepository.save(bookingDetails);
// Update Settlement comments
settlement.setComments(comments);
settlement.setUpdatedDate(new Date());
// Save and return updated Settlement
return settlementRepository.save(settlement);
}
return null;
}
@Override
public Settlement settlement(Settlement settlement) {
// TODO Auto-generated method stub
return null;
}
@Override
public Settlement uploadChallonDetails(int settlementId, long ddNumber, String ddDate, long ddamount,
MultipartFile challonimage, long challonnumber, long challonamount) {
Optional<Settlement> settlementOptional = settlementRepository.findById(settlementId);
if (settlementOptional.isPresent()) {
Settlement updateSettlement = settlementOptional.get();
updateSettlement.setDdnumber(ddNumber);
updateSettlement.setDddate(ddDate);
updateSettlement.setChallonamount(challonamount);
updateSettlement.setChallonnumber(challonnumber);
updateSettlement.setDdamount(ddamount);
if (challonimage != null && !challonimage.isEmpty()) {
String fileName = settlementId + "_" + challonimage.getOriginalFilename();
String filePath = settlementDirectory + "/" + fileName;
// Save the file to the specified directory
try (FileOutputStream fos = new FileOutputStream(filePath)) {
byte[] bytes = challonimage.getBytes();
fos.write(bytes);
updateSettlement.setChallon(settlementPhotoUrl + "challonDetails/" + fileName);
} catch (Exception e) {
throw new RuntimeException("Error saving challon image", e);
}
}
return settlementRepository.save(updateSettlement);
} else {
return null;
}
}
}