Validation billet à une date précie

  • Posts: 60
  • Thank you received: 6
  • Hikaserial Standard Hikashop Essential
9 months 4 days ago #359157

-- HikaShop version -- : 5.0.3
-- HikaSerial version -- : 4.0.2
-- Joomla version -- : 4.4.2
-- PHP version -- : 8.1.27

Bonjour,
Je suis en cours de création d'un système de vente de places de concert.
J'arrive à peu près à mes fins avec hikaserial (d'autres fils vont suivre…) mais je bute sur le problème de la validation (consommation) à une date précise.

J'utilise Random - HikaSerial Generator plugin et j'ai fait le tour des autres générateurs, mais je ne vois pas comment limiter la consommation d'un billet à une date précise.

exemple :
- je vends un billet à 1200€ pour les Rolling Stones à Wembley, le 2 juin 2024
- je vends un billet à 1,50€ pour "Jo L'Accordéoniste" au tabac-pmu du coin, qui passe le 3 octobre 2024

j'ai donc généré 2 billets avec QR code mais le problème est que le billet pour le 3 octobre me permet d'être validé le 2 juin. (et vice-versa mais bon…)

Sauf erreur je ne vois aucun moyen de restreindre la validation à une date ou une période précise ?

Évidemment on peut changer le design des billets et la personne qui valide peut dire si le billet correspond au bon concert, mais la pratique est maintenant de présenter un QR code en plein écran sur son smartphone et donc on ne peut pas faire la différence visuellement.

Quelque chose m'a échappé ?

Merci

Please Log in or Create an account to join the conversation.

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
9 months 3 days ago #359184

Bonjour,

Via le plugin "group filter consumer" il est possible d'indiquer quel "groupe utilisateur" peut faire la consommation de "packs".
Il est ainsi possible de séparer les comptes qui peuvent (ou non) valider les billets.

Si effectivement vous souhaitez quelques chose de plus générique (et que vous avez la certitude que vous n'aurez pas deux concert le même jour), il va être nécessaire d'avoir ou nouveau plugin de filtre à la consommation.
Le plugin devant se baser sur deux champs de date pour indiquer le début et la fin de la possibilité de le valider.
Pour le côté flexible, il faudrait se baser sur des champs personnalisés de type "product", uniquement disponible dans le backend.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 60
  • Thank you received: 6
  • Hikaserial Standard Hikashop Essential
9 months 2 days ago #359217

Bonjour,

merci pour votre réponse.
Non, le plugin "group filter consumer" n'est pas la solution ici, je vous ai induit en erreur avec mon exemple farfelu.
Il s'agit d'un petit festival et il n'y aura qu'une seule et même équipe de validateurs sur toutes les dates.

Il faut que je trouve un moyen pour que les billets soient valables le jour du concert et ni avant ni après.

"Le plugin devant se baser sur deux champs de date pour indiquer le début et la fin de la possibilité de le valider."
Oui effectivement, la question est comment faire.
Une piste ?

Je n'avais pas anticipé que ça ne serait pas possible de faire ça "de base", pour ce qui concerne la vente de places pour un évènement.
Dans la majorité des cas que je peux imaginer un évènement est, par définition, quelque chose qui se passe à une date (ou période) définie.
Donc un billet qui est consommable n'importe quand me semble être plutôt l'exception

Cordialement

Please Log in or Create an account to join the conversation.

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
9 months 2 days ago #359235

Bonjour,

Le plugin "group filter consumer" peut servir de base pour la création d'un nouveau plugin de filtre lors de la consommation.
En utilisant le même trigger "onBeforeSerialConsume" :
www.hikashop.com/support/documentation/1...nbeforeserialconsume

Via l'objet $serial vous pouvez accéder au "serial_order_product_id" (et "serial_order_id").
A partir de cette donnée, vous pouvez charger les informations du produit depuis hikashop_product (avec un jointure via hikashop_order_product) ; et lire les données dans vos deux champs personnalisés.

Si la date courante n'est pas comprise entre les deux dates stockés dans le produit ayant permis de générer le serial ; alors le plugin va refuser la consommation. Le cas échéant il va laisser passer la suite des vérifications et du processus.

Pour les champs personnalisés de type "product", il est nécessaire d'avoir HikaShop essential :
www.hikashop.com/support/documentation/1...shop-field-form.html

Il existe d'autres alternative d'organisation pour aller stocker la plage de date à d'autres endroits, mais je crains que cela ne complique trop la mise en place.
Mais il est possible de stocker les dates dans la configuration du plugin de filtre, demandant alors pour chaque concert de créer le produit, le pack et le filtre.
Dans cette configuration, le développement du filtre est plus simple puisqu'il faut trouver la configuration du pack (comme le plugin "group filter") et lire les dates associés à cette configuration. Par contre je ne suis pas certain que le système interne de configuration des plugins permette d'avoir un champs date ; ce qui ne devrait pas être compliqué à rajouter de mon côté si vous choisissez cette solution.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 60
  • Thank you received: 6
  • Hikaserial Standard Hikashop Essential
8 months 2 weeks ago #359585

Bonjour,
J'ai commencé à travailler sur vos indications mais, avant même de m'attaquer au "group filter consumer" (si tant est que j'y arrive…) je m'aperçois que je ne peux pas afficher de champs personnalisés de type "product" avec "AttachSerial - HikaSerial plugin".

J'ai plusieurs champs custom indispensables à afficher sur les billets, dont la date de concert.

Une idée ?

Cordialement

Please Log in or Create an account to join the conversation.

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
8 months 2 weeks ago #359598

Bonjour,

Vous avez le champs "Product..." qui permet d'afficher n'importe quel élément de la base de donnée de la table "hikashop_product", incluant donc tous les champs personnalisés.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 60
  • Thank you received: 6
  • Hikaserial Standard Hikashop Essential
8 months 2 weeks ago #359616

Bonjour,
effectivement je n'avais pas vu que les champs custom étaient créés directement dans la table hikashop_product

j'ai un champ custom produit nommé "date_evenement" de type sélecteur de date avancé.
dans la fiche produit je choisis "jeudi 1 août 2024" avec le datepicker
ce qui est enregistré dans la table est sous la forme 20240801000000

dans le paramétrage du plugin attachserial, je veux afficher mon champ custom
je crée donc un champ "produit…" "date_evenement" avec le format "date" d-m-Y

j'obtiens : 14-06-1975 (au lieu de 01-08-2024)

c'est "normal" puisque le formatage attend une date sous la forme d'un timestamp au format 1722470400

Comment obtenir le bon formatage en partant de 20240801000000 ?

Merci

Last edit: 8 months 2 weeks ago by marcmarc.

Please Log in or Create an account to join the conversation.

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
8 months 1 week ago #359653

Bonjour,

Cela demande de rajouter un nouveau type de contenu pour le format des dates spécifiques du plugin "adv date picker".

Voici un code très rapide qui permet de faire la conversion avec le système de configuration actuel :

	case 'date':
		if(strlen((string)$d['text']) == 14) {
			$dateValue = substr((string)$d['text'],0,4) . '/' . substr((string)$d['text'],4,2) . '/' . substr((string)$d['text'],6,2);
			$d['text'] = hikashop_getTime($dateValue);
		}
		$d['text'] = hikaserial::getDate( (int)$d['text'], $format_ex );
		break;

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 60
  • Thank you received: 6
  • Hikaserial Standard Hikashop Essential
8 months 1 week ago #359712

Bonjour,
J'avais raté cette réponse.

Je ne comprend pas où je dois faire cette modif, dans quel fichier.
Dans le date picker ? Je ne trouve pas de plugin "adv date picker".

Ou alors dans le attach serial ? dans /plugins/hikaserial/attachserial/attachserial.php ?

Merci

Last edit: 8 months 1 week ago by marcmarc.

Please Log in or Create an account to join the conversation.

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
8 months 1 week ago #359764

Bonjour,

C'est dans le plugin de génération que vous utilisez, soit "attachserial" soit "pdfserial".

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.
The following user(s) said Thank You: marcmarc

Please Log in or Create an account to join the conversation.

  • Posts: 60
  • Thank you received: 6
  • Hikaserial Standard Hikashop Essential
8 months 1 week ago #359776

Merci, le formatage de date est maintenant ok.

Question subsidiaire : j'ai fait la modif directement sur le fichier /plugins/hikaserial/attachserial/attachserial.php pour tester mais sauf erreur je ne peux pas faire d'override d"un plugin ?
La solution serait donc de dupliquer le plugin et le renommer ?

Last edit: 8 months 1 week ago by marcmarc.

Please Log in or Create an account to join the conversation.

  • Posts: 26158
  • Thank you received: 4028
  • MODERATOR
8 months 1 week ago #359821

Bonjour,

La modification sera présente dans la prochaine version d'HikaSerial ; aussi bien dans le plugin "attachserial" que "pdfserial".
Ma seule interrogation est de savoir si je vais ajouter un type "advdate" ou ne garder que "date" avec la gestion du cas spécial de 14 caractères.

Cordialement,


Jerome - Obsidev.com
HikaMarket & HikaSerial developer / HikaShop core dev team.

Also helping the HikaShop support team when having some time or couldn't sleep.
By the way, do not send me private message, use the "contact us" form instead.

Please Log in or Create an account to join the conversation.

  • Posts: 60
  • Thank you received: 6
  • Hikaserial Standard Hikashop Essential
8 months 1 week ago #359823

Bonjour,
ok merci.
en attendant, j'ai dupliqué, renommé et modifié le plugin comme indiqué.
ça fonctionne parfaitement.

cordialement

Please Log in or Create an account to join the conversation.

  • Posts: 60
  • Thank you received: 6
  • Hikaserial Standard Hikashop Essential
8 months 1 week ago #359824

Bonjour,
Concernant la possibilité de limiter la validation à la seule journée du concert, c'est fait.

J'ai dupliqué le plugin "groupconsumer" et je l'ai renommé "groupdatefilterconsumer".

J'ai choisi de combiner le filtrage par groupe et par date plutôt que de faire un plugin séparé pour la date.

J'ai ajouté ceci :

// ************************ date ****************************

        $db = JFactory::getDbo();
        $prefix = $db->getPrefix();
        $query = $db->getQuery(true)
            ->select($db->quoteName('product_id'))
            ->from($db->quoteName($prefix . 'hikashop_order_product'))
            ->where($db->quoteName('order_product_id') . ' = ' . $db->quote($serial->serial_order_product_id));
        $db->setQuery($query);
        $product_id = $db->loadResult();

        $query = $db->getQuery(true)
            ->select($db->quoteName('date_evenement'))
            ->from($db->quoteName($prefix . 'hikashop_product'))
            ->where($db->quoteName('product_id') . ' = ' . $db->quote($product_id));
        $db->setQuery($query);
        $date_evenement = $db->loadResult();

        $date_part = substr($date_evenement, 0, 8);
        $timestamp_evenement = strtotime($date_part);

        $date_courante = time();
        $date_validation = strtotime(date('Y-m-d', $date_courante));

        $do = (date('Y-m-d', $timestamp_evenement) === date('Y-m-d', $date_validation));

        if (!$do) {
            echo "Ce billet doit être utilisé le " . $date_formatted = date('d-m-Y', $timestamp_evenement);
            ;
        }

et ça filtre maintenant sur le groupe ET la date du concert

Cordialement

The following user(s) said Thank You: Jerome

Please Log in or Create an account to join the conversation.

Moderators: Obsidev
Time to create page: 0.081 seconds
Powered by Kunena Forum