private void commit(UpsServicePolicyDTO serviceOrder, String userEmail) throws Exception {
   byte[] report = rpService.getUPSReport(serviceOrder);
   saveReport(serviceOrder.getServiceOrderId(), report);
   sendNotification(
       userEmail + "," + serviceOrder.getReceivedByEmail(),
       report,
       serviceOrder.getServiceOrderNumber());
 }
  @RequestMapping(value = "/save.do", method = RequestMethod.POST)
  public String save(
      @ModelAttribute("serviceOrder") UpsServicePolicyDTO serviceOrder,
      @ModelAttribute(Globals.SESSION_KEY_PARAM) UserSession userSession,
      ModelMap model,
      HttpServletRequest req,
      HttpServletResponse resp)
      throws Exception {

    int idServicio = 0;
    int custId = 0;
    boolean doCommit = userSession.getUser().getBelongsToGroup().get(Globals.GROUP_SERVICE) != null;

    try {
      if (serviceOrder.getServiceOrderId() != null && serviceOrder.getServiceOrderId() > 0) {
        // Actualizar orden de servicio
        Serviceorder servicioOrderSave = new Serviceorder();
        servicioOrderSave.setServiceOrderId(serviceOrder.getServiceOrderId());
        if (serviceOrder.getClosed() != null && serviceOrder.getServiceStatusId().equals("C")) {
          servicioOrderSave.setAsignee(null);
        }
        servicioOrderSave.setClosed(serviceOrder.getClosed());
        servicioOrderSave.setIsWrong(serviceOrder.getIsWrong() ? 1 : 0);
        servicioOrderSave.setStatusId(serviceOrder.getServiceStatusId());
        if (serviceOrder.getSignReceivedBy() != null
            && !serviceOrder.getSignReceivedBy().equals("")) {
          serviceOrder.setHasPdf(1);
        }
        servicioOrderSave.setHasPdf(serviceOrder.getHasPdf());
        servicioOrderSave.setSignReceivedBy(serviceOrder.getSignReceivedBy());

        service.updateServiceOrder(
            servicioOrderSave, "UpsServiceController", userSession.getUser().getUserEmail());
        idServicio = serviceOrder.getServiceOrderId();
      } else {
        if (serviceOrder.getPolicyId() == null || serviceOrder.getPolicyId() == 0) {
          // Guardando el cliente capturado
          OpenCustomer customer = new OpenCustomer();
          customer.setCustomerName(serviceOrder.getCustomer());
          customer.setContactEmail(serviceOrder.getFinalUser());
          customer.setEquipmentTypeId("U");
          customer.setBrand(serviceOrder.getBrand());
          customer.setModel(serviceOrder.getModel());
          customer.setSerialNumber(serviceOrder.getSerialNumber());
          customer.setCapacity(serviceOrder.getCapacity());
          customer.setAddress(serviceOrder.getEquipmentAddress());
          customer.setContactName(serviceOrder.getContactName());
          customer.setPhone(serviceOrder.getContactPhone());
          customer.setProject(serviceOrder.getProject());
          customer.setOfficeId(String.valueOf(serviceOrder.getOfficeId()));
          customer.setCreated(Globals.getLocalTime());
          customer.setCreatedBy("UpsServiceController");
          customer.setCreatedByUsr(userSession.getUser().getUserEmail());
          custId = ocService.SaveOpenCustomer(customer);
        }

        // Guardando la OS
        Serviceorder servicioOrderSave = new Serviceorder();
        if (custId > 0) {
          servicioOrderSave.setOpenCustomerId(custId);
        }
        servicioOrderSave.setReceivedBy(serviceOrder.getReceivedBy());
        servicioOrderSave.setReceivedByPosition(serviceOrder.getReceivedByPosition());
        servicioOrderSave.setEmployeeListString(serviceOrder.getResponsible());
        servicioOrderSave.setServiceDate(serviceOrder.getServiceDate());
        servicioOrderSave.setServiceEndDate(serviceOrder.getServiceEndDate());
        servicioOrderSave.setServiceOrderNumber(serviceOrder.getServiceOrderNumber());
        servicioOrderSave.setServiceTypeId(serviceOrder.getServiceTypeId().toCharArray()[0]);
        servicioOrderSave.setReceivedByEmail(serviceOrder.getReceivedByEmail());
        servicioOrderSave.setIsWrong(serviceOrder.getIsWrong() ? 1 : 0);
        servicioOrderSave.setSignCreated(serviceOrder.getSignCreated());
        servicioOrderSave.setSignReceivedBy(serviceOrder.getSignReceivedBy());
        if (userSession.getUser().getBelongsToGroup().get(Globals.GROUP_COORDINATOR) != null) {
          servicioOrderSave.setStatusId("E");
        } else {
          servicioOrderSave.setStatusId("N");
        }
        servicioOrderSave.setPolicyId(serviceOrder.getPolicyId());
        servicioOrderSave.setResponsible(serviceOrder.getResponsible());
        servicioOrderSave.setTicketId(serviceOrder.getTicketId());
        if (serviceOrder.getSignReceivedBy() != "") {
          servicioOrderSave.setHasPdf(1);
        } else {
          servicioOrderSave.setHasPdf(0);
        }

        idServicio =
            service.saveServiceOrder(
                servicioOrderSave, "UpsServiceController", userSession.getUser().getUserEmail());
        serviceOrder.setServiceOrderId(idServicio);
        // Crear orden de servicio de UpsService
        service.saveUpsService(
            new UpsServiceDTO(serviceOrder),
            "UpsServiceController",
            userSession.getUser().getUserName());
      }

      if (serviceOrder.getUpsServiceId() == null
          && doCommit
          && serviceOrder.getSignReceivedBy() != null
          && !serviceOrder.getSignReceivedBy().equals("")) {
        commit(serviceOrder, userSession.getUser().getUserEmail());
      }
    } catch (Exception e) {
      Logger.Log(LogLevel.ERROR, Thread.currentThread().getStackTrace()[0].toString(), e);
      e.printStackTrace();
      model.addAttribute("errorDetails", e.getMessage() + " - " + e.getStackTrace()[0].toString());
      throw e;
    }

    return "dashboard";
  }