/**
* 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.web.payprogram;
import java.util.ArrayList;
import java.util.List;
import javax.validation.Valid;
import org.cuacfm.members.model.account.Account;
import org.cuacfm.members.model.exceptions.DatesException;
import org.cuacfm.members.model.exceptions.ExistTransactionIdException;
import org.cuacfm.members.model.payprogram.PayProgram;
import org.cuacfm.members.model.payprogramservice.PayProgramService;
import org.cuacfm.members.model.util.DateUtils;
import org.cuacfm.members.model.util.Constants.methods;
import org.cuacfm.members.model.util.Constants.states;
import org.cuacfm.members.web.support.MessageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
/** The Class PayProgramEditController. */
@Controller
public class PayProgramEditController {
private static final String PAYPROGRAM_VIEW_NAME = "payprogram/payprogramedit";
@Autowired
private PayProgramService payProgramService;
private PayProgram payProgram;
private List<String> usernames;
/** Instantiates a new payProgram Controller. */
public PayProgramEditController() {
super();
}
/**
* PayProgram.
*
* @return PayProgram
*/
@ModelAttribute("payProgram")
public PayProgram payProgram() {
return payProgram;
}
/**
* Usernames.
*
* @return the list
*/
@ModelAttribute("usernames")
public List<String> usernames() {
return usernames;
}
/**
* PayProgram.
*
* @param model the model
* @return the string
*/
@RequestMapping(value = "feeProgramList/payProgramList/payProgramEdit")
public String getPayProgram(Model model) {
if (payProgram != null) {
usernames = new ArrayList<>();
for (Account account : payProgram.getProgram().getAccounts()) {
usernames.add(account.getName() + " " + account.getSurname());
}
model.addAttribute("usernames", usernames);
PayProgramForm payProgramForm = new PayProgramForm();
payProgramForm.setAccountPayer(payProgram.getAccountPayer());
payProgramForm.setPrice(payProgram.getPrice());
payProgramForm.setState(String.valueOf(payProgram.getState()));
payProgramForm.setStateList(java.util.Arrays.asList(states.values()));
payProgramForm.setMethod(String.valueOf(payProgram.getMethod()));
payProgramForm.setMethodList(java.util.Arrays.asList(methods.values()));
payProgramForm.setIdTxn(payProgram.getIdTxn());
payProgramForm.setIdPayer(payProgram.getIdPayer());
payProgramForm.setEmailPayer(payProgram.getEmailPayer());
payProgramForm.setIdPayer(payProgram.getIdPayer());
payProgramForm.setDatePay(DateUtils.format(payProgram.getDatePay(), DateUtils.FORMAT_DISPLAY));
model.addAttribute(payProgram);
model.addAttribute(payProgramForm);
return PAYPROGRAM_VIEW_NAME;
}
// If not have payProgram, redirect to payProgramList
else {
return "redirect:/feeProgramList/payProgramList";
}
}
/**
* PayProgram.
*
* @param payProgramForm the payProgram form
* @param errors the errors
* @param ra the ra
* @return the string
* @throws DatesException the date limit exception
*/
@RequestMapping(value = "feeProgramList/payProgramList/payProgramEdit", method = RequestMethod.POST)
public String editPayProgram(@Valid @ModelAttribute PayProgramForm payProgramForm, Errors errors, RedirectAttributes ra)
throws DatesException {
if (errors.hasErrors()) {
return PAYPROGRAM_VIEW_NAME;
}
try {
payProgramService.update(payProgramForm.updatePayProgram(payProgram));
} catch (ExistTransactionIdException e) {
errors.rejectValue("idTxn", "existIdTxn.message", new Object[] { e.getIdTxn() }, "idTxn");
return PAYPROGRAM_VIEW_NAME;
}
MessageHelper.addSuccessAttribute(ra, "payProgram.successModify", payProgram.getProgram().getName());
return "redirect:/feeProgramList/payProgramList";
}
/**
* Modify PayProgram by Id.
*
* @param id the id
* @return the string destinity page
*/
@RequestMapping(value = "feeProgramList/payProgramList/payProgramEdit/{id}", method = RequestMethod.POST)
public String chargePayProgram(@PathVariable Long id) {
payProgram = payProgramService.findById(id);
return "redirect:/feeProgramList/payProgramList/payProgramEdit";
}
}