@Override
  public Pay createPay(Pay pay) {

    Pay result = new Pay();
    Pay currentPay = pay;

    MapSqlParameterSource params = new MapSqlParameterSource();

    String sqlUpdate =
        "insert into pays (time, demand_id, manufacturer, storno, summ, user, numDoc, client)"
            + " Values (:time, :demand_id, :manufacturer, :storno, :summ, :user, :NumDoc, :client)";
    if (currentPay.getId() > 0) { // В БД есть такой элемент
      sqlUpdate =
          "update pays set time=:time, demand_id=:demand_id, manufacturer=:manufacturer, storno=:storno"
              + ", summ=:summ, user=:user, numDoc=:NumDoc, client=:client  where id=:id";
      params.addValue("id", currentPay.getId());
    }

    params.addValue("time", pay.getTime());
    params.addValue("demand_id", pay.getDemand_id());
    params.addValue(
        "user",
        (((User) pay.getUser()).getId() == 0
            ? Service.ID_CUSTOMER
            : ((User) pay.getUser()).getId()));
    params.addValue("manufacturer", ((Manufacturer) pay.getManufacturer()).getId());
    params.addValue("storno", (pay.isStorno() ? 1 : 0));
    params.addValue("summ", (pay.isStorno() ? -1 : 1) * pay.getSumm());
    params.addValue("NumDoc", pay.getNumDoc());
    params.addValue("client", ((Client) pay.getClient()).getId());

    KeyHolder keyHolder = new GeneratedKeyHolder();

    jdbcTemplate.update(sqlUpdate, params, keyHolder);

    try {
      if (keyHolder.getKey() != null) {
        result = getPayById(keyHolder.getKey().intValue());
      }

    } catch (EmptyResultDataAccessException e) {
      result = new Pay();
    }

    return result;
  }