Menjual tiket "stadion besar"

10

Saya ingin (perlu) menerapkan penjualan tiket stadion.
Idenya adalah untuk membiarkan pelanggan memilih jumlah tiketnya (pembatasan yang mungkin diperlukan tetapi ini bukan masalah besar. Saya pikir saya bisa mencapai ini melalui jumlah maksimum yang diizinkan dalam kereta). Setelah itu pelanggan harus memilih tempat duduknya dari peta tempat duduk. Setelah itu proses checkout harus berjalan seperti biasa.
Adakah yang tahu ekstensi untuk ini? Saya mencari satu tetapi saya tidak menemukan satu yang sesuai dengan kebutuhan saya. Atau mungkin keterampilan google saya perlu ditingkatkan.
Jika tidak ada ekstensi, beberapa petunjuk tentang cara melakukannya akan bagus.
Ide saya sejauh ini adalah membuat produk yang disebut 'Tiket' dengan beberapa opsi khusus (sektor, baris, nomor kursi, dan mungkin yang lain).
Halaman tampilan akan dibuat khusus, sehingga opsi kustom tidak akan ditampilkan. Pemilihan tiket akan terjadi dalam sembulan atau hamparan, dan berdasarkan pilihan saya akan mensimulasikan opsi khusus saat menambahkan ke keranjang.
Peta kursi akan disimpan di sebuah meja sehingga saya bisa menandai kursi yang dipesan. Stadion selalu sama sehingga satu peta harus cukup.
Sudah sejauh ini. Sesuatu sepertinya hilang. Petunjuk apa pun akan bagus.
[EDIT]
Ada kemungkinan untuk membuat produk yang dapat dikonfigurasi dengan 3 atribut (sektor, baris, dan nomor kursi, masing-masing kombinasi dalam jumlah tersedia 1 sehingga mereka tidak akan tersedia setelah dibeli), tetapi ini berarti 30k + produk (per peristiwa). Saya sangat tidak ingin pergi ke sana. Saya menjaga ini sebagai jalan putus asa terakhir.. (Ini bukan lagi pilihan karena akan menghasilkan masalah kinerja yang sangat besar)

Marius
sumber

Jawaban:

10

Saya telah melakukan sesuatu seperti ini, dan ini adalah contoh yang dibuat-buat dan terlalu disederhanakan untuk melihat apakah Anda bahkan akan menganggap ini sebagai solusi yang layak:

Ini mirip dengan mendefinisikan sudoku grid tetapi area terbuka sudoku grid adalah kursi terbuka:

$section1 = <<<SECTION

A,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,
B,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
C,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
D,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
E,-,-,-,-,-,-,-,-,-,-,-,-

SECTION;

Bagan tempat duduk (sudoku grid) disimpan berdasarkan per-produk. Setiap acara adalah produk baru. Kisi diperbarui ketika seseorang menambahkan ke keranjang (atau pembelian, tergantung pada aturan bisnis):

$section1 = <<<SECTION

A,-,-,x,-,-,-,-,-,x,-,-,x,x,x,x,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,
B,-,-,-,-,-,-,-,-,-,-,-,-,-,x,-,-,-,-,-,-,-,-,-,-,-,-,-
C,-,-,-,-,-,x,x,x,-,x,-,x,-,-,-,-,-,-,-,-,-
D,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-,-
E,-,-,-,-,-,x,-,x,-,x,-,x

SECTION;

Untuk memisahkan ketersediaan kursi di model backend Anda, ini mudah explode:

$chart = array();

$section = trim(explode('\n', $product->getSeatingChart()));

foreach($section as $row){
    $seats = explode(',',$row);
    $rownum = array_shift($seats);
    $chart[$rownum] = $seats;
}

Kita bisa berubah $chartmenjadi boolean:

array_walk($chart,function(&$s){
    $s = $s == "-" ? true : false;
});

Periksa apakah A14 tersedia (0 diindeks, ingat):

function checkAvailability($row,$seatnum){

    return $chart[$row][$seatnum-1] == true;

}

Terbalik:

Implementasinya sangat sederhana: atribut ketersediaan tempat duduk Anda diuraikan oleh model backend. Ini pada dasarnya atribut EAV khusus. Anda juga dapat mengatur harga berdasarkan bagian. Setiap Bagian adalah SKU baru dengan harga baru. Anda dapat memblokir kursi di beberapa acara dan tidak di tempat lain. Juga, tidak perlu membawa inventaris nyata, hanya mengatur qty pada item pesanan penjualan selama checkout untuk penentuan harga.

Tingkat juga akan berfungsi, sehingga Anda mendapatkan diskon pembelian massal secara gratis; yang mungkin menjadi perhatian dengan opsi khusus.

Kelemahan:

Pemesanan kursi akan menjadi sakit kepala terbesar Anda karena Anda tidak membawa inventaris yang sebenarnya; di situlah metode ini berantakan. Aturan bisnis akan menentukan bagaimana Anda mengunci / menahan kursi selama checkout.

Philwinkle
sumber
1
+1 Woah. Jika ada yang pernah menulis "The Art of Magento Programming", ini lebih baik ada di sana sebagai contoh.
kalenjordan
Pertama-tama saya ingin mengatakan bahwa saya merasa seperti orang idiot. Tentu saja harga harus di bagian. Saya pikir harganya ada di setiap kursi. Doh !. Sejauh donwside, saya tidak melihatnya. Saya dapat memiliki meja sederhana memegang dicadangkan / kursi yang dibeli untuk setiap peristiwa dengan kolom event_id, sector, row, seat, status. Status dapat 'dicadangkan', 'dibeli', 'tidak tersedia'. Dengan cara ini mudah untuk memverifikasi seseorang memesan kursi 2 detik sebelum Anda melakukannya. Saya juga berpikir untuk membuat jenis produk baru (tiket acara) jadi saya akan yakin tidak ada masalah pada pengaturan produk. Terima kasih untuk perinciannya
Marius
Jawaban Anda cocok untuk menyatukan potongan-potongan puzzle di pikiran saya. Saya masih khawatir tentang masalah kinerja, karena menjual 30 ribu tiket dalam 4-5 hari mungkin sangat menekankan server, tetapi ini adalah masalah yang berbeda. Saya akan mencoba membuat ekstensi ini tersedia untuk komunitas setelah selesai dan jika saya mendapatkan 'lampu hijau' dari pelanggan.
Marius
30rb tiket - apakah ini stadion NASCAR? :) Saya pikir memiliki produk tiket tunggal per-bagian, per acara (acara adalah konfigurasi) akan mengurangi ukuran katalog Anda secara signifikan. Jejak db yang lebih kecil maka semoga cocok sepenuhnya ke dalam memori ...
philwinkle
1
@ philwinkle Saya mengirimi Anda email karena saya hidup di abad ke-20 dan tidak memiliki akun twitter.
Marius
2

Saya setuju bahwa produk yang dapat dikonfigurasi bukan ide bagus. Kursi benar-benar hanya petunjuk jika tersedia atau dijual dan mewakili ini dengan produk Magento terdengar seperti berlebihan.

Saya akan menyarankan modul khusus yang akan mencakup tabel catatan untuk setiap Acara, tiket kemudian akan untuk Acara ini dan setelah membuat Acara, produk sederhana akan dibuat untuk mewakili ini di toko. Anda dapat menggunakan atribut produk untuk menyimpan referensi ke acara dan opsi khusus yang terisi dari halaman tampilan ujung depan yang Anda sebutkan untuk menyimpan kursi mana yang dibeli.

Luke Collymore
sumber
Terima kasih. +1. Jawaban Anda dikombinasikan dengan yang dari philwinkle setidaknya harus membuat saya memulai ke arah yang benar.
Marius