@RequestMapping(
      value = "/{invoiceId}/control-letters/{id}/rows/create",
      method = RequestMethod.GET)
  public String showControlLetterRowCreateForm(
      @PathVariable("invoiceId") int invoiceId, @PathVariable("id") int id, Model model) {
    ControlLetterRow controlLetterRow = new ControlLetterRow();
    // TODO: Validate id that coming from form
    controlLetterRow.setControlLetterId(id);

    List<Employee> employees = employeeService.findAll(Employee.EmployeePosition.CONDUCTOR.getId());
    List<Route> routes = routeService.findAll();

    model.addAttribute("controlLetterRow", controlLetterRow);
    model.addAttribute("routes", routes);
    model.addAttribute("employees", employees);
    model.addAttribute("invoiceId", invoiceId);

    return "controlLetterRow/edit";
  }
  @RequestMapping(value = "/{invoiceId}/control-letters/{controlLetterId}/rows/{id}")
  public String showControlLetterRow(
      @PathVariable("invoiceId") int invoiceId,
      @PathVariable("controlLetterId") int controlLetterId,
      @PathVariable("id") int id,
      Model model) {

    ControlLetterRow controlLetterRow = controlLetterRowService.find(id);
    if (controlLetterRow == null) throw new ResourceNotFoundException();
    controlLetterRow.setControlLetterId(controlLetterId);

    List<Employee> employees = employeeService.findAll(Employee.EmployeePosition.CONDUCTOR.getId());
    List<Route> routes = routeService.findAll();

    model.addAttribute("routes", routes);
    model.addAttribute("employees", employees);
    model.addAttribute("controlLetterRow", controlLetterRow);
    model.addAttribute("invoiceId", invoiceId);

    return "controlLetterRow/edit";
  }
  @RequestMapping(value = "/{invoiceId}/control-letters/{id}/rows", method = RequestMethod.POST)
  public String createOrUpdateControlLetterRow(
      @PathVariable("id") int controlLetterid,
      @PathVariable("invoiceId") int invoiceId,
      @ModelAttribute("controlLetterRow") @Validated ControlLetterRow controlLetterRow,
      BindingResult bindingResult,
      Model model,
      RedirectAttributes redirectAttributes) {

    if (!bindingResult.hasErrors())
      controlLetterRowValidator.validate(controlLetterRow, bindingResult);

    if (bindingResult.hasErrors()) {
      List<Employee> employees =
          employeeService.findAll(Employee.EmployeePosition.CONDUCTOR.getId());
      List<Route> routes = routeService.findAll();
      model.addAttribute("routes", routes);
      model.addAttribute("employees", employees);
      model.addAttribute("invoiceId", invoiceId);
      model.addAttribute("employees", employees);

      return "controlLetterRow/edit";
    }

    // TODO: Trigger
    // Якщо рядок новий, то кондуктор ще не повертав квитки, отже вважаємо, що він повернув все, що
    // отримав
    if (controlLetterRow.isNew())
      controlLetterRow.setTicketsReturned(controlLetterRow.getTicketsGiven());

    return handleSaving(
        controlLetterRow,
        controlLetterRowService,
        redirectAttributes,
        "tickets-invoices/" + invoiceId + "/control-letters/" + controlLetterid + "/rows");
  }