docs: @Override
    public final void process(final Map<String, Object> pRqVs,
      final IRequestData pRqDt) throws Exception {
      TradingSettings ts = (TradingSettings) pRqVs.get("tradSet");
      String itemTypeStr = pRqDt.getParameter("itemType");
      Long itemId = Long.valueOf(pRqDt.getParameter("itemId"));
      Cart cart = this.srvCart.getShoppingCart(pRqVs, pRqDt, false, false);
      OnlineBuyer buyr;
      if (cart != null) {
        buyr = cart.getBuyer();
        if (cart.getTot().compareTo(BigDecimal.ZERO) == 0) {
          pRqDt.setAttribute("cart", null);
        } else {
          AccSettings as = (AccSettings) pRqVs.get("accSet");
          Currency curr = (Currency) pRqVs.get("wscurr");
          if (!cart.getCurr().getItsId().equals(curr.getItsId())) {
            cart.setCurr(curr);
            List<CurrRate> currRates = (List<CurrRate>) pRqVs.get("currRates");
            for (CurrRate cr: currRates) {
              if (cr.getCurr().getItsId().equals(cart.getCurr().getItsId())) {
                cart.setExcRt(cr.getRate());
                break;
              }
            }
            this.srvCart.handleCurrencyChanged(pRqVs, cart, as, ts);
          }
          if (pRqDt.getAttribute("txRules") == null) {
            TaxDestination txRules = this.srvCart
              .revealTaxRules(pRqVs, cart, as);
            pRqDt.setAttribute("txRules", txRules);
          }
          for (CartLn ci : cart.getItems()) {
            if (!ci.getDisab() && ci.getItId().equals(itemId)
              && ci.getItTyp().toString().equals(itemTypeStr)) {
              pRqDt.setAttribute("cartItem", ci);
              break;
            }
          }
        }
      } else {
        buyr = this.buySr.getBuyr(pRqVs, pRqDt);
        if (buyr == null) {
          buyr = this.buySr.createBuyr(pRqVs, pRqDt);
        }
      }
      if (EShopItemType.GOODS.toString().equals(itemTypeStr)) {
        processGoods(pRqVs, pRqDt, ts, buyr, itemId);
      } else if (EShopItemType.SERVICE.toString().equals(itemTypeStr)) {
        processService(pRqVs, pRqDt, ts, buyr, itemId);
      } else if (EShopItemType.SEGOODS.toString().equals(itemTypeStr)) {
        processSeGoods(pRqVs, pRqDt, ts, buyr, itemId);
      } else if (EShopItemType.SEGOODS.toString().equals(itemTypeStr)) {
        processSeGoods(pRqVs, pRqDt, ts, buyr, itemId);
      } else if (EShopItemType.SESERVICE.toString().equals(itemTypeStr)) {
        procSeSrv(pRqVs, pRqDt, ts, buyr, itemId);
      } else {
        throw new Exception(
          "Detail page not yet implemented for item type: " + itemTypeStr);
      }
    }