package net.conselldemallorca.helium.webapp.v3.controller;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import net.conselldemallorca.helium.v3.core.api.dto.ReassignacioDto;
import net.conselldemallorca.helium.v3.core.api.service.AdminService;
import net.conselldemallorca.helium.v3.core.api.service.TascaService;
import net.conselldemallorca.helium.webapp.v3.command.ReassignacioUsuarisCommand;
import net.conselldemallorca.helium.webapp.v3.helper.MissatgesHelper;
import net.conselldemallorca.helium.webapp.v3.helper.ObjectTypeEditorHelper;
import net.conselldemallorca.helium.webapp.v3.helper.ReassignacioUsuarisValidatorHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
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.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;
/**
* Controlador per la reassignació de tasques entre usuaris.
*
* @author Limit Tecnologies <limit@limit.es>
*/
@Controller
@RequestMapping("/v3/expedient")
public class ReassignacioUsuarisController extends BaseExpedientController {
@Autowired
private AdminService adminService;
@Autowired
private TascaService tascaService;
@ModelAttribute("command")
public ReassignacioUsuarisCommand populateCommand(
@RequestParam(value = "id", required = false) Long id) {
ReassignacioUsuarisCommand command = new ReassignacioUsuarisCommand();
if (id != null) {
ReassignacioDto reassignacio = adminService.findReassignacioById(id);
command.setId(reassignacio.getId());
command.setUsuariOrigen(reassignacio.getUsuariOrigen());
command.setUsuariDesti(reassignacio.getUsuariDesti());
command.setDataInici(reassignacio.getDataInici());
command.setDataFi(reassignacio.getDataFi());
command.setDataCancelacio(reassignacio.getDataCancelacio());
command.setTipusExpedientId(reassignacio.getTipusExpedientId());
}
return command;
}
@RequestMapping(value = "/{expedientId}/tasca/{tascaId}/reassignarUsuaris", method = RequestMethod.GET)
public String formGet(HttpServletRequest request,
@PathVariable Long expedientId,
@PathVariable String tascaId,
Model model) {
List<ReassignacioDto> reassignacions = adminService.llistaReassignacions();
model.addAttribute("llistat", reassignacions);
model.addAttribute("expedientId", expedientId);
model.addAttribute(
"tasca",
tascaService.findAmbIdPerExpedient(
tascaId,
expedientId));
return "v3/expedient/tasca/reassignarUsuaris";
}
@RequestMapping(value = "/{expedientId}/tasca/{tascaId}/reassignarUsuaris", method = RequestMethod.POST)
public String formPost(HttpServletRequest request,
@PathVariable Long expedientId,
@PathVariable String tascaId,
@ModelAttribute("command") ReassignacioUsuarisCommand command,
Model model,
BindingResult result,
SessionStatus status) {
(new ReassignacioUsuarisValidatorHelper()).validate(command, result);
if (result.hasErrors()) {
return "v3/expedient/tasca/reassignarUsuaris";
}
try {
if (command.getId() == null) {
adminService.createReassignacio(
command.getUsuariOrigen(),
command.getUsuariDesti(),
command.getDataInici(),
command.getDataFi(),
command.getDataCancelacio(),
command.getTipusExpedientId());
} else {
adminService.updateReassignacio(
command.getId(),
command.getUsuariOrigen(),
command.getUsuariDesti(),
command.getDataInici(),
command.getDataFi(),
command.getDataCancelacio(),
command.getTipusExpedientId());
}
MissatgesHelper.success(request, getMessage(request, "info.reassignacio.produit") );
status.setComplete();
} catch (Exception ex) {
MissatgesHelper.error(request, getMessage(request, "error.proces.peticio"));
logger.error("No s'ha pogut guardar el registre", ex);
return "v3/expedient/tasca/reassignarUsuaris";
}
return "redirect:/v3/expedient/"+expedientId;
}
@RequestMapping(value = "/{expedientId}/tasca/{tascaId}/reassignarCancelar", method = RequestMethod.POST)
public String deleteAction(
HttpServletRequest request,
@RequestParam(value = "id", required = true) Long id) {
adminService.deleteReassignacio(id);
MissatgesHelper.success(request, getMessage(request, "info.reassignacio.cancelat") );
return "v3/expedient/tasca/reassignarUsuaris";
}
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(
Date.class,
new CustomDateEditor(new SimpleDateFormat("dd/MM/yyyy"), true));
binder.registerCustomEditor(
Object.class,
new ObjectTypeEditorHelper());
}
private static final Log logger = LogFactory.getLog(ReassignacioUsuarisController.class);
}