At what stage do we compute the approximations and details while performing a DWT?
This expression is more a discretization of a continuous wavelet transform than an actual DWT (discrete wavelet transform), provided $\psi$ is a genuine wavelet. It only computes the wavelet coefficient $c_{j,k}$ associated to a specific shifted and dilated continuous wavelet $\psi_{j,k}(t)$. This yields a frame-like wavelet decomposition, if you picture all possible $c_{j,k}$. A frame is a kind of overcomplete basis satisfying some bounds; in other words, more projection vectors than the dimension of the space, still ensuring a certain stability.

It is not a discrete wavelet transform per se, since time is still continuous. This is a bit like Fourier series. Approximations and details for DWT are more classically obtained from a direct discrete scheme. From a discrete signal $x[n]$, at one single level, it is possible to build two downsampled sequences:


$a(n) = (h_0\ast x)\downarrow(2)[n]$ (approximation)
$d(n) = (h_1\ast x)\downarrow(2)[n]$ (details)


with $h_0$  and $h_1$ complementary (low-pass and high-pass) filters, such that one can recover $x$ from half-length sequences  $a(n)$ and  $b(n)$ only. Coefficients for $h_0$  and $h_1$  can be obtained from certain wavelet shapes only. Passing the signal in a filter before downsampling reduces aliasing artifacts, while preserving invertibility.

Approximations and details (discrete wavelets and wavelet packets) can be obtained by iterating the above at different levels. 
Stationary wavelets are a version of DWT without subsampling (but generally the same wavelets). They often behave better in case of higher noise,for denoising, or model mismatch in adaptive filtering (some details in A Primal-Dual Proximal Algorithm for Sparse Template-Based Adaptive Filtering: Application to Seismic Multiple Removal).