public function products($do = '', $id = '')
 {
     $this->data['heading'] = 'Administrasi: Produk';
     switch ($do) {
         case 'form':
             if (post('submit')) {
                 $data = [User::primary() => User::current('id'), 'tgl_input' => date('Y-m-d'), 'id_kategori' => post('kategori'), 'nama' => post('nama'), 'gambar' => post('gambar'), 'tgl_masuk' => formatTanggal(post('tgl_masuk'), 'Y-m-d'), 'stok' => post('stok'), 'harga' => post('harga'), 'berat' => post('berat'), 'diskon' => post('diskon') ?: 0, 'keterangan' => post('keterangan', false)];
                 try {
                     $upload = new Upload('gambar');
                     $data['gambar'] = $upload->doUpload();
                 } catch (Exception $e) {
                     setAlert('error', $e->getMessage());
                     return redirect($this->uri->path());
                 }
                 if (Product::save($data, $id)) {
                     if ($id) {
                         setAlert('success', 'Berhasil memperbarui data produk <b>' . $data['nama'] . '</b>');
                     } else {
                         setAlert('success', 'Berhasil menambahkan produk <b>' . $data['nama'] . '</b>');
                     }
                     return redirect('admin-shop/products');
                 }
                 setAlert('error', 'Terjadi kesalahan dalam penyimpanan produk <b>' . $data['nama'] . '</b>');
                 return redirect($this->uri->path());
             }
             if ($id) {
                 $this->data['data'] = Product::show($id)->fetchOne();
             }
             return $this->render('product-form', $this->data);
             break;
         case 'delete':
             if (Product::del($id)) {
                 setAlert('success', 'Produk berhasil terhapus');
             } else {
                 setAlert('error', 'Terjadi kesalahan dalam penghapusan produk');
             }
             return redirect('admin-shop/products');
             break;
         default:
             $this->data['data'] = Product::show([], get('sort'));
             return $this->render('product-table', $this->data);
             break;
     }
 }