https://dev.entrouvert.org/https://dev.entrouvert.org/favicon.ico?15861920342022-09-29T16:05:40ZRedmine Entr’ouvertLingo - Development #69728: Modèle facture, ligne de facturehttps://dev.entrouvert.org/issues/69728?journal_id=4108342022-09-29T16:05:40ZEmmanuel Cazenaveecazenave@entrouvert.com
<ul></ul><p>Emmanuel Cazenave a écrit :</p>
<blockquote>
<p>Facture :</p>
<ul>
<li>un numéro de facture (on prend la primary key ou une colonne en plus dédiée ?)</li>
</ul>
</blockquote>
<p>Il va falloir faire autrement :</p>
<ul>
<li>pas de trous dans la numérotation des factures en réglementation française (<a class="external" href="https://www.obat.fr/blog/numerotation-des-factures/">https://www.obat.fr/blog/numerotation-des-factures/</a>)</li>
<li>du coup les séquences postgres pas adaptées : "Thus, PostgreSQL sequence objects cannot be used to obtain “gapless” sequences." (<a class="external" href="https://www.postgresql.org/docs/current/functions-sequence.html">https://www.postgresql.org/docs/current/functions-sequence.html</a>)</li>
</ul>
<p><a class="external" href="https://www.cybertec-postgresql.com/en/gaps-in-sequences-postgresql/">https://www.cybertec-postgresql.com/en/gaps-in-sequences-postgresql/</a> une piste ? (j'ai lu en diagonale). Je vais mettre ce problème mettre de coté, on demandera à notre DBA.</p> Lingo - Development #69728: Modèle facture, ligne de facturehttps://dev.entrouvert.org/issues/69728?journal_id=4108352022-09-29T16:06:49ZEmmanuel Cazenaveecazenave@entrouvert.com
<ul></ul><p>Emmanuel Cazenave a écrit :</p>
<blockquote>
<p><del>Il va falloir faire autrement</del></p>
</blockquote>
<p>On ne peut pas se reposer sur la clé primaire.</p> Lingo - Development #69728: Modèle facture, ligne de facturehttps://dev.entrouvert.org/issues/69728?journal_id=4108372022-09-29T17:22:08ZBenjamin Dauvergne
<ul></ul><p>Le plus simple c'est de créer un modèle <code>Counter</code>, et de faire :<br /><pre>
class Counter(model):
name = CharField(max_length=128, primary_key=True)
value = PositiveIntegerField(default=0)
def get_count(name):
with transaction.atomic(savepoint=False):
created, counter = Counter.objects.get_or_create(name=name)
if not created:
counter = Counter.objects.select_for_update().get(pk=counter.pk)
counter.value += 1
counter.save()
return counter.value
</pre><br /><del>ça suppose un index d'unicité sur name</del> et ça s'utiliserait ainsi :<br /><pre>
invoice.number = get_count(f'invoice-{now().year}') # compteur de l'année de la facture
</pre></p> Lingo - Development #69728: Modèle facture, ligne de facturehttps://dev.entrouvert.org/issues/69728?journal_id=4108382022-09-29T17:32:33ZBenjamin Dauvergne
<ul></ul><p>Plutôt qu'un nom le compteur peut-être relié à un objet parent des factures, la régie ou mieux l'année comptable elle même relié à la régie (je pense que ce serait fait comme ça dans un ERP classique).</p>
<pre>
class AccountingYear(Model):
regie = ForeignKey(Regie)
year = PositiveInteger()
value = PositiveInteger(default=0)
class Meta:
unique_together = (('regie', 'year'),)
</pre> Lingo - Development #69728: Modèle facture, ligne de facturehttps://dev.entrouvert.org/issues/69728?journal_id=4239372022-11-21T15:54:11ZLauréline Guérin
<ul><li><strong>Lié à</strong> <i><a class="issue tracker-2 status-5 priority-4 priority-default closed" href="/issues/71528">Development #71528</a>: facturation: générer des lignes de facturation sur un cas "simple" (prestation d'un enfant pour une période)</i> ajouté</li></ul> Lingo - Development #69728: Modèle facture, ligne de facturehttps://dev.entrouvert.org/issues/69728?journal_id=4441182023-02-14T09:50:06ZLauréline Guérin
<ul><li><strong>Statut</strong> changé de <i>Nouveau</i> à <i>Fermé</i></li><li><strong>Assigné à</strong> changé de <i>Emmanuel Cazenave</i> à <i>Lauréline Guérin</i></li></ul><p>(implémenté dans d'autres tickets)</p> Lingo - Development #69728: Modèle facture, ligne de facturehttps://dev.entrouvert.org/issues/69728?journal_id=4441192023-02-14T09:50:19ZLauréline Guérin
<ul><li><strong>Assigné à</strong> <del><i>Lauréline Guérin</i></del> supprimé</li></ul>