pennylane-client 0.2.0 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Gemfile.lock +1 -1
- data/README.md +26 -5
- data/lib/pennylane/resources/base.rb +4 -0
- data/lib/pennylane/resources/customer_invoices.rb +7 -0
- data/lib/pennylane/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 20da1547f714650d441632ef8e0484ed02cbcbfb7d7c2c7c96f1b7aab0a9667d
|
|
4
|
+
data.tar.gz: 21e6c36c9b7f0fa4edf1d9a53bb595c55af9914a0afd4b8b6bcf07fb50aca979
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: dff99f4f2e536e4c938e510d0b95bc32cb2c516d6dc7ff0bc9779d7a26e5e7063a956ee7eb0227ce11e35a99b977b9cfc61623e9afd7252a4d7ce67e707e0f83
|
|
7
|
+
data.tar.gz: 78aef7a7c0ea2424ae9f90b0c1e9676a664bf7129236b1f9099355fdbe7d9b22d4c6d2c70a8d2d1a817256338f647bac89b58a7f181d2672a12e766f61ab54a0
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
## [Unreleased]
|
|
2
2
|
|
|
3
|
+
### Ajouté
|
|
4
|
+
- `CustomerInvoices#mark_as_paid` marque une facture payée, sans date ni montant : Pennylane
|
|
5
|
+
importe un Factur-X acquitté comme non payé. Le marquage doit attendre que Pennylane ait lu le
|
|
6
|
+
fichier, sinon la fin de la lecture l'efface.
|
|
7
|
+
|
|
3
8
|
|
|
4
9
|
## 0.2.0
|
|
5
10
|
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -103,8 +103,9 @@ end
|
|
|
103
103
|
|
|
104
104
|
`import` accepte un chemin ou un IO ; un IO sans chemin demande `filename:`. `customer_id`,
|
|
105
105
|
facultatif, rattache la facture à un client Pennylane ; Pennylane le reprend une fois le fichier lu.
|
|
106
|
-
Sans lui, Pennylane
|
|
107
|
-
sandbox
|
|
106
|
+
Sans lui, Pennylane crée le client à partir de l'acheteur du Factur-X : nom, SIREN, numéro de TVA et
|
|
107
|
+
adresse, avec une référence externe qu'il génère. Mesuré en sandbox pour un acheteur inconnu ; pour
|
|
108
|
+
un acheteur déjà client, rien ne dit encore s'il est retrouvé ou créé une seconde fois.
|
|
108
109
|
|
|
109
110
|
Pennylane refuse un fichier déjà déposé et donne l'identifiant de la facture existante : un dépôt
|
|
110
111
|
interrompu avant sa réponse peut donc être rejoué sans risque. Mais il ne reconnaît le doublon qu'au
|
|
@@ -175,9 +176,9 @@ Deux cas méritent l'attention de l'application hôte :
|
|
|
175
176
|
- **`consistent?` faux.** Le montant d'une transaction rapprochée est celui de la transaction
|
|
176
177
|
entière : un virement qui règle plusieurs factures apparaît sur chacune pour son montant total. La
|
|
177
178
|
somme des paiements dépasse alors le montant encaissé, qui reste juste.
|
|
178
|
-
- **`marked_paid?` vrai.** « Marquer comme payée », dans Pennylane
|
|
179
|
-
enregistrer de paiement ni toucher au reste à payer. Aucune date ni aucun
|
|
180
|
-
reliquat.
|
|
179
|
+
- **`marked_paid?` vrai.** « Marquer comme payée », dans Pennylane ou par `mark_as_paid`, déclare la
|
|
180
|
+
facture payée sans enregistrer de paiement ni toucher au reste à payer. Aucune date ni aucun
|
|
181
|
+
montant n'existe pour ce reliquat.
|
|
181
182
|
|
|
182
183
|
`settlement` lit la facture si on lui passe un identifiant, puis ses transactions : un ou deux
|
|
183
184
|
appels. Après `find_many`, passez-lui les factures déjà lues.
|
|
@@ -185,6 +186,26 @@ appels. Après `find_many`, passez-lui les factures déjà lues.
|
|
|
185
186
|
`invoices.payments(id)` liste à part les paiements passés par les moyens de paiement de Pennylane
|
|
186
187
|
(Qonto, Stripe, GoCardless, lien de paiement).
|
|
187
188
|
|
|
189
|
+
## Marquer une facture payée
|
|
190
|
+
|
|
191
|
+
Pennylane importe un Factur-X comme non payé, même acquitté : il ignore le cadre de facturation
|
|
192
|
+
(BT-23 `B2`, `S2` ou `M2`), le montant déjà payé et le net à payer. Une facture réglée hors de
|
|
193
|
+
Pennylane, en ligne par carte par exemple, se marque payée après son dépôt :
|
|
194
|
+
|
|
195
|
+
```ruby
|
|
196
|
+
invoice = invoices.find(invoice_id)
|
|
197
|
+
invoices.mark_as_paid(invoice) unless invoice.schematron_validation_status == "pending" || invoice.paid?
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
Attendez que Pennylane ait fini de lire le fichier, ce que signale `schematron_validation_status`
|
|
201
|
+
en quittant `"pending"`. Mesuré en sandbox, un marquage fait plus tôt est accepté sans erreur, puis
|
|
202
|
+
effacé par la fin de la lecture : la facture repasse non payée. Le passage de suivi qui suit le
|
|
203
|
+
dépôt est le bon moment.
|
|
204
|
+
|
|
205
|
+
Le marquage n'enregistre ni date, ni montant, ni paiement : `paid?` devient vrai, le reste à payer
|
|
206
|
+
ne bouge pas, et `settlement.marked_paid?` devient vrai. `status` peut rester `"incomplete"`. Marquer
|
|
207
|
+
une facture déjà payée est sans effet.
|
|
208
|
+
|
|
188
209
|
## Rechercher
|
|
189
210
|
|
|
190
211
|
```ruby
|
|
@@ -23,6 +23,10 @@ module Pennylane
|
|
|
23
23
|
connection.post(path, body).body
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
+
def put(path, body = nil)
|
|
27
|
+
connection.put(path, body).body
|
|
28
|
+
end
|
|
29
|
+
|
|
26
30
|
def post_multipart(path, multipart)
|
|
27
31
|
response = connection.post(path) do |request|
|
|
28
32
|
request.headers["Content-Type"] = multipart.content_type
|
|
@@ -84,6 +84,13 @@ module Pennylane
|
|
|
84
84
|
Entities::Settlement.new(invoice, matched_transactions(invoice.id))
|
|
85
85
|
end
|
|
86
86
|
|
|
87
|
+
# Pennylane n'enregistre ni date, ni montant, ni paiement : le reste à payer est inchangé, et
|
|
88
|
+
# `settlement(...).marked_paid?` devient vrai.
|
|
89
|
+
def mark_as_paid(invoice_id)
|
|
90
|
+
put("customer_invoices/#{normalize_id(invoice_id)}/mark_as_paid")
|
|
91
|
+
nil
|
|
92
|
+
end
|
|
93
|
+
|
|
87
94
|
# Journal des créations, modifications et suppressions, du plus ancien au plus récent.
|
|
88
95
|
# L'API ne le conserve que quatre semaines : un `since` plus ancien est refusé en 422.
|
|
89
96
|
def changes(since: nil, limit: MAX_CHANGES_LIMIT)
|
data/lib/pennylane/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pennylane-client
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Hôtentic
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-11-12 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|