/**
* Copyright © 2015 Pablo Grela Palleiro (pablogp_9@hotmail.com)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.cuacfm.members.model.paymemberservice;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.cuacfm.members.model.account.Account;
import org.cuacfm.members.model.eventservice.EventService;
import org.cuacfm.members.model.exceptions.ExistTransactionIdException;
import org.cuacfm.members.model.feemember.FeeMember;
import org.cuacfm.members.model.feemember.FeeMemberRepository;
import org.cuacfm.members.model.paymember.PayMember;
import org.cuacfm.members.model.paymember.PayMemberRepository;
import org.cuacfm.members.model.util.Constants;
import org.cuacfm.members.model.util.Constants.levels;
import org.cuacfm.members.model.util.Constants.methods;
import org.cuacfm.members.model.util.Constants.states;
import org.cuacfm.members.model.util.CreatePdf;
import org.cuacfm.members.model.util.DateUtils;
import org.cuacfm.members.model.util.FileUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.MessageSource;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import com.lowagie.text.pdf.PdfPTable;
/** The Class PayMemberServiceImpl. */
@Service("payMemberService")
public class PayMemberServiceImpl implements PayMemberService {
@Autowired
private MessageSource messageSource;
@Autowired
private PayMemberRepository payMemberRepository;
@Autowired
private FeeMemberRepository feeMemberRepository;
@Autowired
private EventService eventService;
@Value("${path}${pathFeeMember}")
private String pathFeeMember;
/**
* Instantiates a new pay member service impl.
*/
public PayMemberServiceImpl() {
super();
}
@Override
public PayMember save(PayMember payMember) {
return payMemberRepository.save(payMember);
}
@Override
public PayMember update(PayMember payMember) throws ExistTransactionIdException {
Object[] arguments = { payMember.getFeeMember().getName(), payMember.getAccount().getName() };
eventService.save("payMember.successModify", null, levels.MEDIUM, arguments);
return payMemberRepository.update(payMember);
}
@Override
public void pay(PayMember payMember) {
payMember.setState(states.PAY);
payMember.setMethod(methods.CASH);
payMember.setDatePay(new Date());
payMemberRepository.update(payMember);
Object[] arguments = { payMember.getFeeMember().getName() };
eventService.save("payMember.successPay", null, levels.MEDIUM, arguments);
}
@Override
public void payPayPal(PayMember payMember, String idTxn, String idPayer, String emailPayer, String statusPay, String datePay)
throws ExistTransactionIdException {
PayMember paymentExist = payMemberRepository.findByIdTxn(idTxn);
if ((paymentExist != null) && (paymentExist.getId() != payMember.getId())) {
throw new ExistTransactionIdException(idTxn);
}
payMember.setIdTxn(idTxn);
payMember.setEmailPayer(emailPayer);
payMember.setIdPayer(idPayer);
payMember.setDatePay(DateUtils.format(datePay, DateUtils.FORMAT_PAYPAL, Locale.US));
payMember.setMethod(methods.NO_PAY);
payMember.setState(states.MANAGEMENT);
if (statusPay.contains("Completed")) {
payMember.setState(states.PAY);
payMember.setMethod(methods.PAYPAL);
}
payMemberRepository.update(payMember);
Object[] arguments = { payMember.getFeeMember().getName() };
eventService.save("userPayments.successPayPal", null, levels.MEDIUM, arguments);
}
@Override
public PayMember findById(Long id) {
return payMemberRepository.findById(id);
}
@Override
public PayMember findByIdTxn(String idTxn) {
return payMemberRepository.findByIdTxn(idTxn);
}
@Override
public List<PayMember> findByPayMemberIds(Long accountId, Long feeMemberId) {
return payMemberRepository.findByPayMemberIds(accountId, feeMemberId);
}
@Override
public List<PayMember> getPayMemberList() {
return payMemberRepository.getPayMemberList();
}
@Override
public List<PayMember> findNoPayListByAccountId(Long accountId) {
return payMemberRepository.findNoPayListByAccountId(accountId);
}
@Override
public Map<Account, List<PayMember>> getPayMemberNoPayListByDirectDebit(Date monthCharge) {
return payMemberRepository.getPayMemberNoPayListByDirectDebit(monthCharge);
}
@Override
public List<PayMember> getPayMemberListByFeeMemberId(Long feeMemberId) {
return payMemberRepository.getPayMemberListByFeeMemberId(feeMemberId);
}
@Override
public List<PayMember> getPayMemberListByAccountId(Long accountId) {
return payMemberRepository.getPayMemberListByAccountId(accountId);
}
@Override
public List<String> getUsernamesByFeeMember(Long feeMemberId) {
return payMemberRepository.getUsernamesByFeeMember(feeMemberId);
}
@Override
public ResponseEntity<byte[]> createPdfFeeMember(Long feeMemberId, String option) {
FeeMember feeMember = feeMemberRepository.findById(feeMemberId);
List<PayMember> payMembers = payMemberRepository.getPayMemberListByFeeMemberId(feeMemberId);
String fileNameFeeMember = messageSource.getMessage("fileNameFeeMember", null, Locale.getDefault()) + "_"
+ DateUtils.format(new Date(), DateUtils.FORMAT_FILE) + ".pdf";
FileUtils.createFolderIfNoExist(pathFeeMember);
String path = pathFeeMember + fileNameFeeMember;
String title;
if (option.equals(Constants.PAY)) {
title = feeMember.getName() + " - " + messageSource.getMessage("feeMember.printPayList", null, Locale.getDefault());
} else if (option.equals(Constants.NOPAY)) {
title = feeMember.getName() + " - " + messageSource.getMessage("feeMember.printNoPayList", null, Locale.getDefault());
} else {
title = feeMember.getName() + " - " + messageSource.getMessage("feeMember.printAllList", null, Locale.getDefault());
}
CreatePdf pdf = new CreatePdf();
PdfPTable table = pdf.createTablePayMembers(messageSource, option, payMembers);
pdf.createBody(path, title, table);
return CreatePdf.viewPdf(path, fileNameFeeMember);
}
}