Bug mise Ă  jour - Invalid default value for `posting_date`

Bonjour Ă  tous,

Je viens de tenter une mise à jour de Dokos 3.26 → 3.36 et j’ai l’erreur suivante :

Updating DocTypes for erpnext       : [======                                  ] 16%Failed to alter schema using query: ALTER TABLE `tabPurchase Invoice` MODIFY `conversion_rate` decimal(21,9) not null default 0, MODIFY `total_taxes_and_charges` decimal(21,9) not null default 0, MODIFY `discount_amount` decimal(21,9) not null default 0, MODIFY `base_discount_amount` decimal(21,9) not null default 0, MODIFY `base_rounding_adjustment` decimal(21,9) not null default 0, MODIFY `taxes_and_charges_added` decimal(21,9) not null default 0, MODIFY `additional_discount_percentage` decimal(21,9) not null default 0, MODIFY `base_taxes_and_charges_deducted` decimal(21,9) not null default 0, MODIFY `per_received` decimal(21,9) not null default 0, MODIFY `base_grand_total` decimal(21,9) not null default 0, MODIFY `taxes_and_charges_deducted` decimal(21,9) not null default 0, MODIFY `rounding_adjustment` decimal(21,9) not null default 0, MODIFY `base_rounded_total` decimal(21,9) not null default 0, MODIFY `base_total_taxes_and_charges` decimal(21,9) not null default 0, MODIFY `posting_date` date default 'null', MODIFY `base_taxes_and_charges_added` decimal(21,9) not null default 0, MODIFY `grand_total` decimal(21,9) not null default 0, MODIFY `outstanding_amount` decimal(21,9) not null default 0, MODIFY `base_tax_withholding_net_total` decimal(21,9) not null default 0, MODIFY `set_posting_time` int(1) not null default 1, MODIFY `rounded_total` decimal(21,9) not null default 0, MODIFY `total_net_weight` decimal(21,9) not null default 0, MODIFY `total_advance` decimal(21,9) not null default 0, MODIFY `unreconciled_amount` decimal(21,9) not null default 0, MODIFY `paid_amount` decimal(21,9) not null default 0, MODIFY `base_total` decimal(21,9) not null default 0, MODIFY `write_off_amount` decimal(21,9) not null default 0, MODIFY `net_total` decimal(21,9) not null default 0, MODIFY `total` decimal(21,9) not null default 0, MODIFY `total_qty` decimal(21,9) not null default 0, MODIFY `base_paid_amount` decimal(21,9) not null default 0, MODIFY `base_net_total` decimal(21,9) not null default 0, MODIFY `plc_conversion_rate` decimal(21,9) not null default 0, MODIFY `base_write_off_amount` decimal(21,9) not null default 0


There was an issue while migrating the DocType: Purchase Invoice

Le traceback précise : Invalid default value for ‹ posting_date ›

J’en déduis que c’est la partie de la requête MODIFY posting_date date default ‹ null › qui fait planter, mais aucune idée pour résoudre.

J’ai essayé de reboot la machine dans le doute mais sans succès.

Je peux poster le traceback entier si besoin.
Autres infos système :

  • Ubuntu 22.04.1 LTS
  • Node v16.18.1
  • Python 3.10.6
  • pip 22.3.1
  • Yarn 1.22.10
  • bench 2.5.3

J’ai réussi à remettre notre Dokos disponible avec bench update --build et maintenant il indique que la version actuelle est 3.36 alors que la maj s’est mal déroulée, je ne sais pas si c’était une bonne idée…

Un peu d’aide serait bienvenue si quelqu’un à déjà rencontré un problème similaire :innocent:

Merci beaucoup,
Danny

Bonjour Danny,

Je suis en train de voir quel peut être le problème…

  • Quelle commande as-tu utilisĂ© pour mettre Ă  jour Dokos ? (bench update ?)
  • Est-ce que la commande bench migrate fonctionne ou alors renvoie-t-elle la mĂŞme erreur ?
  • As-tu configurĂ© des personnalisations sur les Factures d’Achat ?

Mon hypothèse est qu’il y a une personnalisation incorrecte sur les Factures d’Achat.

Tu peux faire la liste avec la commande suivante, à exécuter dans bench console :

frappe.get_list("Property Setter", {"name": ("like", "Purchase Invoice%date%")}, ["name", "property", "property_type", "value", "default_value"])

Ou sinon depuis l’interface graphique si elle fonctionne (Propriété Personnalisée dans la barre de recherche).

Hello Corentin, merci pour la réponse rapide.
J’ai bien utilisé bench update
Je viens de tester bench migrate et j’ai le soucis au même endroit, même erreur.
(pymysql.err.OperationalError: (1067, "Invalid default value for 'posting_date'")

On a très probablement des personnalisations par contre je n’ai pas la personne sous la main pour confirmer ce qui a été personnalisé.

Voici le résultat de ta dernière demande :

In [1]: frappe.get_list("Property Setter", {"name": ("like", "Purchase Invoice%date%")}, ["name", "property", "property_type", "value", "default_value"])
   ...:
Out[1]:
[{'name': 'Purchase Invoice-due_date-print_hide',
  'property': 'print_hide',
  'property_type': 'Check',
  'value': '1',
  'default_value': None},
 {'name': 'Purchase Invoice-posting_date-default',
  'property': 'default',
  'property_type': 'Text',
  'value': 'null',
  'default_value': None},
 {'name': 'Purchase Invoice-posting_date-description',
  'property': 'description',
  'property_type': 'Text',
  'value': 'Date de la facture',
  'default_value': None},
 {'name': 'Purchase Invoice-bill_date-default',
  'property': 'default',
  'property_type': 'Text',
  'value': 'Today',
  'default_value': None},
 {'name': 'Purchase Invoice-bill_date-description',
  'property': 'description',
  'property_type': 'Text',
  'value': 'Date de saisie de la facture',
  'default_value': None},
 {'name': 'Purchase Invoice-posting_date-in_list_view',
  'property': 'in_list_view',
  'property_type': 'Check',
  'value': '1',
  'default_value': None}]

Merci pour ton aide !

Ah eh bien voici la propriété personnalisée coupable :

Tout d’abord, on va faire la liste des propriétés incorrectes s’il y en a d’autres :

frappe.get_list("Property Setter", {"value": "null"}, ["name"], as_list=True)

Ensuite, je te propose d’aller dans l’interface graphique et de supprimer cette propriété personnalisée : l’URL est https://<dokos.exemple.fr>/app/property-setter/Purchase Invoice-posting_date-default.

1 « J'aime »

La propriété en question a été supprimée.
Et je n’ai rien dans l’output de ta seconde commande !

Est-ce que ça veut dire que je peux reprendre bench update ?

Oui c’est bon !

Corentin

Super, tout fonctionne ! Désolé si la question des personnalisations de document revient souvent, je vais tâcher de faire attention et de dépister tout ça avec les outils que tu m’a donné.

Un grand merci :blush:

Superbe ! Ravi d’avoir pu t’aider :smile:

Aussi je t’ai dit de supprimer la propriété personnalisée mais je pense quelle servait à quelque chose, tu peux la recréer en copiant collant le texte suivant n’importe où dans Dokos :

{
 "is_system_generated":0,
 "doctype_or_field":"DocField",
 "doc_type":"Purchase Invoice",
 "field_name":"posting_date",
 "property":"default",
 "property_type":"Text",
 "value":"",
 "doctype":"Property Setter"
}

Ces Propriétés Personnalisées sont créées depuis l’interface graphique, et je pense qu’il y a eu un bug à un moment donné pour qu’un « null » typique du JavaScript se retrouve dans la base de donnée. Je vais voir pour éviter que ça ne se reproduise.

1 « J'aime »