[RESOLU] Possibilité de créer une réservation pour une date déjà passée

Bonjour,

Je crée un sujet dédié, car je me rends compte qu’il fini noyé dans un autre.

En résumé, est-ce qu’il serait possible de permettre aux administrateurs de créer une plage de réservation pour une heure déjà passée ? Particulièrement utile pour les découpages laser de durée indéterminée ou les multiples essais d’impression 3D.

Est-ce long à implémenter ou au contraire, cela pourrait être fait rapidement ?

Merci d’avance pour votre aide.

A+ Matthieu

@Sylvain, @sleede Question autrement formulée : Est-ce qu’il est possible de modifier la date d’une réservation en CLI ? Je crée un évenement dans le futur à la bonne heure et je change juste la date en CLI.

J’ai un problème de facturation avec plusieurs personnes, :cry: désolé d’être insistant pour trouver un workaround…

Salut,

Cela n’est pas particulièrement évident …
En fait, si tu crée l’événement dans le futur, puis que tu changes la date dans le passé … tu ne pourras plus réserver.
Si tu crée l’événement dans le futur, que tu crée la réservation puis que tu changes la date dans le passé … la facture aura déjà été créée et le changement de date ne servira à rien. Même si tu régénères les factures, ça ne changera pas les libellés.

Ta seule solution serait donc de créer un événement, faire une réservation dessus, modifier la réservation et l’élément de facture dans la base de données puis régénérer la facture PDF concerné. C’est possible mais honnêtement ce n’est pas simple et il y a des effets de bord probables. Si tu comptes faire ça souvent, il vaudrait mieux envisager de faire les développements nécessaires pour, par exemple, permettre la génération de facture « custom ».

En attendant, voilà la marche à suivre, une fois la facture générée à la mauvaise date (dans le futur) :

Attention, ceci n’est valable que pour des factures à 1 seul élément (pas de factures à plusieurs créneaux ou de factures abonnement+réservation)

En premier lieu récupérer l’identifiant DB de la facture concernée (Admin / Gérer les factures / Télécharger la facture), l’ID étant visible ici :

Puis se connecter à la console rails pour pouvoir modifier la base de données :

docker exec -it fabmanager_fabmanager_1 bash
bundle
rails c

Retrouver la ligne de la facture concernée et modifier son libellé :

# remplacer XXX par l'ID facture (4613 dans l'exemple ci-dessus)
i = Invoice.find(XXX).invoice_items[0]
# la ligne suivante affichera le libellé actuel de la ligne de facture :
i.description
# pour l'écraser :
i.description = "Bataille de Normandie - mardi 6 juin 1944"
i.save!

Retrouver la réservation associée et modifier sa date :

# remplacer XXX par l'ID facture (4613 dans l'exemple ci-dessus)
s = Invoice.find(XXX).invoiced.slots[0]
# les paramètres attendu sont dans l'ordre suivant : année, mois, jour, heure, minutes, secondes.
s.start_at = Time.new(1944, 6, 6, 6, 30, 00)
s.end_at = Time.new(1944, 6, 6, 15, 00, 00)
s.save!

Enfin régénérer la facture concernée :

# remplacer XXX par l'ID facture (4613 dans l'exemple ci-dessus)
Invoice.find(XXX).regenerate_invoice_pdf

Sur la nouvelle facture, les éléments suivants auront été modifiés :

Merci infiniment @Sylvain même si dans les cas qui me préoccupent, j’avais plusieurs lignes dans la facture.

Il faut que je planche sur le sujet.

Si tu as plusieurs lignes, il faut répéter les opérations pour chaque ligne et chaque réservation

Par contre si tu as une facture abonnement+résa, laisse tomber car il y a beaucoup trop de choses à changer pour ne pas que ça fasse de bugs, je ne saurais même pas t’en faire la liste.