/**
*
*/
package net.conselldemallorca.helium.webapp.v3.controller;
import javax.servlet.http.HttpServletRequest;
import net.conselldemallorca.helium.v3.core.api.dto.ExpedientTascaDto;
import net.conselldemallorca.helium.v3.core.api.service.ExpedientService;
import net.conselldemallorca.helium.v3.core.api.service.TascaService;
import net.conselldemallorca.helium.webapp.v3.command.ExpedientTascaReassignarCommand;
import net.conselldemallorca.helium.webapp.v3.helper.MissatgesHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
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 dels expedients
*
* @author Limit Tecnologies <limit@limit.es>
*/
@Controller
@RequestMapping("/v3/expedient")
public class ExpedientTasquesReassignarController extends BaseExpedientController {
@Autowired
private TascaService tascaService;
@Autowired
private ExpedientService expedientService;
@RequestMapping(value = "/{expedientId}/tasca/{tascaId}/reassignar", method = RequestMethod.GET)
public String tascaReassignarGet(
HttpServletRequest request,
@PathVariable Long expedientId,
@PathVariable String tascaId,
ModelMap model) {
atributsModel(
expedientId,
tascaId,
model);
return "v3/expedient/tasca/reassignar";
}
@RequestMapping(value = "/{expedientId}/tasca/{tascaId}/reassignar", method = RequestMethod.POST)
public String tascaReassignarPost(
HttpServletRequest request,
@PathVariable Long expedientId,
@PathVariable String tascaId,
@RequestParam(value = "submit", required = false) String submit,
ExpedientTascaReassignarCommand expedientTascaReassignarCommand,
BindingResult result,
SessionStatus status,
ModelMap model) {
if ("submit".equals(submit) || submit.length() == 0) {
new TascaReassignarValidator().validate(expedientTascaReassignarCommand, result);
if (result.hasErrors()) {
atributsModel(
expedientId,
tascaId,
model);
MissatgesHelper.error(request, result, getMessage(request, "error.validacio"));
return "v3/expedient/tasca/reassignar";
}
try {
expedientService.reassignarTasca(
expedientTascaReassignarCommand.getTaskId(),
expedientTascaReassignarCommand.getExpression());
MissatgesHelper.success(request, getMessage(request, "info.tasca.reassignada"));
} catch (Exception ex) {
MissatgesHelper.error(request, getMessage(request, "error.reassignar.tasca", new Object[] { expedientTascaReassignarCommand.getTaskId() } ));
atributsModel(
expedientId,
tascaId,
model);
logger.error("No s'ha pogut reassignar la tasca " + expedientTascaReassignarCommand.getTaskId(), ex);
return "v3/expedient/tasca/reassignar";
}
}
return modalUrlTancar(false);
}
private class TascaReassignarValidator implements Validator {
@SuppressWarnings({ "unchecked", "rawtypes" })
public boolean supports(Class clazz) {
return clazz.isAssignableFrom(ExpedientTascaReassignarCommand.class);
}
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, "expression", "not.blank");
}
}
private void atributsModel(
Long expedientId,
String tascaId,
ModelMap model) {
ExpedientTascaDto tasca = tascaService.findAmbIdPerExpedient(
tascaId,
expedientId);
ExpedientTascaReassignarCommand expedientTascaReassignarCommand = new ExpedientTascaReassignarCommand();
expedientTascaReassignarCommand.setTaskId(tascaId);
model.addAttribute(expedientTascaReassignarCommand);
model.addAttribute("expedientIdentificador",tasca.getExpedientIdentificador());
}
private static final Log logger = LogFactory.getLog(ExpedientTasquesReassignarController.class);
}