Import abonnements possible?

Bonsoir,

J’essaie d’importer des abonnements mais j’ai l’impression que cette fonctionnalitĂ© n’est pas possible.

En effet, le type de document n’est pas sĂ©lectionnable dans l’outil d’importation.
J’ai voulu essayer en utilisant l’API REST en imaginant que je pourrais parser un fichier CSV et pousser dans dokos, mais j’obtiens une erreur UnboundLocalError: local variable ‘invoice’ referenced before assignment

Peut-ĂȘtre que c’est pour ça que l’import n’est pas proposĂ© ? :thinking:

Est-ce que quelqu’un a dĂ©jĂ  rĂ©ussi une tel migration ?

Retour complet de l'API
 {
     "exception": "UnboundLocalError: local variable 'invoice' referenced before assignment",
     "exc": "[\"Traceback (most recent call last):\\n  File \\\"apps/erpnext/erpnext/accounts/doctype/subscription/subscription_transaction.py\\\", line 281, in get_simulation\\n    invoice = self.create_invoice(simulate=True)\\n  File \\\"apps/erpnext/erpnext/accounts/doctype/subscription/subscription_transaction.py\\\", line 232, in create_invoice\\n    invoice = self.set_subscription_invoicing_details(invoice)\\n  File \\\"apps/erpnext/erpnext/accounts/doctype/subscription/subscription_transaction.py\\\", line 41, in set_subscription_invoicing_details\\n    document.customer_group, document.territory = frappe.db.get_value(\\nTypeError: cannot unpack non-iterable NoneType object\\n\\nDuring handling of the above exception, another exception occurred:\\n\\nTraceback (most recent call last):\\n  File \\\"apps/frappe/frappe/app.py\\\", line 66, in application\\n    response = frappe.api.handle()\\n  File \\\"apps/frappe/frappe/api.py\\\", line 53, in handle\\n    return _RESTAPIHandler(call, doctype, name).get_response()\\n  File \\\"apps/frappe/frappe/api.py\\\", line 71, in get_response\\n    self.handle_resource()\\n  File \\\"apps/frappe/frappe/api.py\\\", line 85, in handle_resource\\n    self.handle_doctype_resource()\\n  File \\\"apps/frappe/frappe/api.py\\\", line 109, in handle_doctype_resource\\n    self.create_doc()\\n  File \\\"apps/frappe/frappe/api.py\\\", line 188, in create_doc\\n    doc = frappe.get_doc(data).insert()\\n  File \\\"apps/frappe/frappe/model/document.py\\\", line 262, in insert\\n    self.run_before_save_methods()\\n  File \\\"apps/frappe/frappe/model/document.py\\\", line 1098, in run_before_save_methods\\n    self.run_method(\\\"validate\\\")\\n  File \\\"apps/frappe/frappe/model/document.py\\\", line 964, in run_method\\n    out = Document.hook(fn)(self, *args, **kwargs)\\n  File \\\"apps/frappe/frappe/model/document.py\\\", line 1331, in composer\\n    return composed(self, method, *args, **kwargs)\\n  File \\\"apps/frappe/frappe/model/document.py\\\", line 1313, in runner\\n    add_to_return_value(self, fn(self, *args, **kwargs))\\n  File \\\"apps/frappe/frappe/model/document.py\\\", line 961, in fn\\n    return method_object(*args, **kwargs)\\n  File \\\"apps/erpnext/erpnext/accounts/doctype/subscription/subscription.py\\\", line 41, in validate\\n    self.calculate_grand_total()\\n  File \\\"apps/erpnext/erpnext/accounts/doctype/subscription/subscription.py\\\", line 76, in calculate_grand_total\\n    self.grand_total = SubscriptionInvoiceGenerator(self).get_simulation()\\n  File \\\"apps/erpnext/erpnext/accounts/doctype/subscription/subscription_transaction.py\\\", line 294, in get_simulation\\n    invoice.log_error(_(\\\"Subscription Grand Total Simulation Error\\\"))\\nUnboundLocalError: local variable 'invoice' referenced before assignment\\n\"]"
 }

Bonjour,

Les documents proposĂ©s dans l’outil d’import de donnĂ©es sont ceux pour lesquels l’import est autorisĂ©.
Il y a deux maniùres d’autoriser l’import pour un type de document:

  1. Dans la fiche du type de document: Pour les documents standards, ça doit ĂȘtre activĂ© par l’équipe de dĂ©veloppement. Pour les abonnements, ce n’était effectivement pas le cas, nous allons changer cela.

  2. Via l’outil de personnalisation de formulaire (Menu > Personnaliser depuis n’importe quel type de document).
    image
    Vous pouvez activer ou dĂ©sactiver l’import de donnĂ©es pour tous les documents, indĂ©pendamment de ce qui a Ă©tĂ© dĂ©fini dans le modĂšle de base.

Une fois activĂ©, je viens de vĂ©rifier, l’import d’abonnements fonctionne correctement.

L’erreur renvoyĂ©e par l’API indique un problĂšme lors de la simulation de la facture. Le seul problĂšme est liĂ© au fait que la gĂ©nĂ©ration d’un log d’erreur a gĂ©nĂ©rĂ© une erreur. Nous allons corriger.
Mis Ă  part cela, il doit y avoir un souci dans vos donnĂ©es. Essayez de crĂ©er un abonnement Ă  la main pour vĂ©rifier que vous avez bien indiquĂ© les bonnes donnĂ©es et que toutes les dĂ©pendances sont prĂ©sentes. Ça devrait vous permettre de comprendre ce qui pose problĂšme pour refaire un import ou un appel Ă  l’API.

Bonne journée

1 Like

Ça Ă  marchĂ©, merci !

J’ai toutefois Ă©tĂ© obligĂ© de me dĂ©connecter et reconnectĂ© sur mon compte pour qu’abonnement apparaisse dans les types de documents.

J’ai dĂ» faire quelques essais en raison de champ nĂ©cessaire qui n’ont pas Ă©tĂ© prĂ©cisĂ©s dans le modĂšle tĂ©lĂ©chargĂ© (un peu comme sur mon problĂšme d’import d’utilisateur).

Je n’ai pas retestĂ© par l’API. Je pense qu’une partie du problĂšme vient du format du JSON que j’envoie et qui ne doit pas ĂȘtre ce qu’attend Dokos pour les tables enfants.
Bref, comme j’ai pu importer par CSV sur l’interface, l’API passe au second plan du coup.

Bonjour @gde,

Quand vous faites une modification paramĂ©trage, vous pouvez cliquer sur votre avatar (en haut Ă  droite) puis sur “recharger”. Ça recharge la page et vide le cache du navigateur dans lequel sont enregistrĂ©s certains Ă©lĂ©ments de paramĂ©trage pour accĂ©lĂ©rer le fonctionnement de l’application.

Les champs obligatoires indiquĂ©s dans le modĂšle d’import sont les champs indiquĂ©s comme Ă©tant toujours obligatoires dans le modĂšle du type de document.
Cependant, pour beaucoup de document assez complexes, certains champs sont conditionnellement obligatoires, ce qui veut dire qu’il y a plus de champs obligatoires que ce qui est indiquĂ© comme tel.
C’est pour cela qu’il faut systĂ©matiquement commencer par savoir comment fonctionne le type de document qui nous intĂ©resse avant d’essayer de l’importer en masse.

Bonne journée !