Vente de billets «grand stade»

10

Je veux (besoin) de mettre en place une vente de billets de stade.
L'idée est de laisser le client choisir son nombre de billets (un plafonnement peut être nécessaire mais ce n'est pas un gros problème. Je pense que je peux y arriver grâce à la quantité maximale autorisée dans le panier). Après cela, le client doit choisir ses sièges sur une carte des sièges. Après cela, le processus de paiement devrait se dérouler comme d'habitude.
Quelqu'un connaît-il une extension pour cela? J'en ai cherché un mais je n'en ai pas trouvé pour répondre à mes besoins. Ou peut-être que mes compétences Google doivent être améliorées.
S'il n'y a pas d'extension, certains conseils sur la façon de le faire seraient formidables.
Jusqu'à présent, mon idée est de créer un produit appelé «Ticket» avec des options personnalisées (secteur, ligne, numéro de siège et peut-être d'autres).
La page d'affichage sera personnalisée, les options personnalisées ne seront donc pas affichées. La sélection des billets se fera dans une fenêtre contextuelle ou une superposition, et en fonction de la sélection, je simulerai les options personnalisées lors de l'ajout au panier.
Le plan des sièges sera conservé dans un tableau afin que je puisse marquer les sièges réservés. Le stade est toujours le même, donc une carte devrait suffire.
C'est à peu près tout. Quelque chose semble manquer. Tout pointeur serait génial.
[MODIFIER]
Il y a une possibilité de créer un produit configurable avec 3 attributs (secteur, ligne et numéro de siège, chaque combinaison en quantité disponible de 1 donc ils ne seront pas disponibles une fois qu'ils seront achetés), mais cela signifierait 30k + produits (par un événement). Je ne veux vraiment pas y aller. Je garde cela en dernier recours.. (Ce n'est plus une option car cela entraînera un problème de performance énorme)

Marius
la source

Réponses:

10

J'ai fait quelque chose comme ça, et ceci est un exemple artificiel et trop simplifié pour voir si vous considérez même que c'est une solution viable:

C'est similaire à la définition d'une grille sudoku, mais les zones ouvertes de la grille sudoku sont des sièges ouverts:

$section1 = <<<SECTION

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

SECTION;

Ce tableau des sièges (grille sudoku) est stocké par produit. Chaque événement est un nouveau produit. La grille est mise à jour lorsque quelqu'un ajoute au panier (ou achète, selon les règles métier):

$section1 = <<<SECTION

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

SECTION;

Pour séparer la disponibilité des sièges dans votre modèle backend, c'est simple explode:

$chart = array();

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

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

On peut se transformer $charten booléens:

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

Vérifiez si A14 est disponible (0 indexé, rappelez-vous):

function checkAvailability($row,$seatnum){

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

}

À l'envers:

L'implémentation est simple: votre attribut de disponibilité des sièges est analysé par un modèle backend. Il s'agit essentiellement d'un attribut EAV personnalisé. Vous pouvez également configurer la tarification en fonction des sections. Chaque section est une nouvelle référence avec un nouveau prix. Vous pouvez bloquer des sièges à certains événements et pas à d'autres. En outre, pas besoin de réaliser un véritable inventaire, ne définissez que la quantité sur le bon de commande lors de la commande pour le prix.

Les niveaux fonctionneront également, de sorte que vous bénéficiez de remises d'achat en gros gratuitement; cela peut avoir été un problème avec les options personnalisées.

Inconvénient:

La réservation de siège va être votre plus gros mal de tête parce que vous n'avez pas d'inventaire réel; c'est là que cette méthode s'effondre. Les règles commerciales détermineront comment vous verrouillez / maintenez les sièges lors du paiement.

philwinkle
la source
1
+1 Woah. Si quelqu'un écrit un "L'art de la programmation Magento", il vaut mieux être là comme exemple.
kalenjordan
Tout d'abord, je veux dire que je me sens comme un idiot. Bien sûr, le prix devrait être sur les sections. Je pense que le prix était sur chaque siège. D'oh !. En ce qui concerne le donwside, je n'en vois aucun. Je peux avoir une table simple selon les réservés / acheté des places pour chaque événement avec des colonnes event_id, sector, row, seat, status. Le statut peut être «réservé», «acheté», «non disponible». De cette façon, il semble facile de vérifier que quelqu'un a réservé un siège 2 secondes avant vous. Je pense également à créer un nouveau type de produit (ticket d'événement), donc je serai sûr qu'il n'y a pas de problème sur la configuration du produit. Merci pour les détails
Marius
Vos réponses semblent rassembler les pièces du puzzle dans mon esprit. Je suis toujours préoccupé par le problème de performances, car vendre des billets de 30 000 en 4 à 5 jours peut stresser beaucoup les serveurs, mais c'est un problème différent. J'essaierai de rendre cette extension disponible pour la communauté une fois qu'elle sera terminée et si j'obtiens le «feu vert» du client.
Marius
Billets de 30k - est-ce un stade NASCAR? :) Je pense qu'avoir un seul produit par section, par événement (les événements sont des configurations) réduira considérablement la taille de votre catalogue. Nous espérons que la plus petite empreinte de la base de données s'inscrit entièrement dans la mémoire ...
philwinkle
1
@philwinkle Je vous ai envoyé un e-mail car je vis au 20ème siècle et je n'ai pas de compte twitter.
Marius
2

Je suis d'accord que les produits configurables ne sont pas une bonne idée qu'un siège n'est vraiment qu'un pointeur vers s'il est disponible ou vendu et le représenter avec un produit Magento semble exagéré.

Je suggérerais un module personnalisé qui comprendrait un tableau des enregistrements pour chaque événement, les billets seraient alors pour cet événement et lors de la création d'un événement, un produit simple serait créé pour représenter cela dans le magasin. Vous pouvez utiliser un attribut de produit pour conserver la référence à l'événement et aux options personnalisées renseignées à partir de la page de vue frontale que vous mentionnez pour stocker le siège acheté.

Luke Collymore
la source
Merci. +1. Votre réponse combinée à celle de philwinkle devrait au moins me permettre de commencer dans la bonne direction.
Marius