[v4] Etendre la période de validité d'un devis

Bonjour à tous,
Nous souhaitons étendre la période de validité d’un devis expiré mais ce n’est pas comme la v3 et nous ne savons plus comment faire. Pouvez-vous nous indiquer la méthode ?
Merci d’avance.

Bonjour @oryxr,

Dans la v4 il est désormais possible de créer une commande depuis un devis expiré sans modifier la date de validité du devis:

Ca évite d’avoir à modifier un document validé.

Bonne journée

Oui, mais si on renvoi le devis au client, on aurait souhaité modifier cette date sans annuler le devis. Mais la commande n est pas encore acquise.

C’était l"approche qu’on avait mis en place dans la v3, mais objectivement je pense que ce n’est pas rigoureux: si la date de validité n’est pas la même, ce ne peut pas être le même devis, c’est un devis rectificatif.
C’est probablement acceptable en pratique ceci dit.

Dans la v4 on est reparti sur le fonctionnement d’ERPNext puisqu’ils ont ajouté la possibilité de créer une commande même si le devis expiré. Le fonctionnement jusqu’à présent étant un peu trop rigide.
Dans cette approche, toute modification d’une donnée présentée au client après la validation nécessite la création d’un nouveau devis (duplicata ou annuler/modifier) pour garder une trace des évolutions.

Si tu souhaites réintroduire le fonctionnement de la v3, tu peux ajouter les 2 scripts suivants sur ton site:

Script client

frappe.ui.form.on('Quotation', {
	refresh(frm) {
		if (frm.doc.docstatus == 1 && !["Lost", "Ordered"].includes(frm.doc.status)) {
		    frm.add_custom_button(__('Extend validity period'), () => {
				frm.trigger('extend_quotation_validity_dialog');
			});

		}
	},
	
	extend_quotation_validity_dialog(frm) {
		const dialog = new frappe.ui.Dialog({
			title: __("Extend the quotation validity"),
			fields: [{
				"fieldtype": "Date",
				"label": __("New end date"),
				"fieldname": "end_date",
				"reqd": 1,
				"default": frm.doc.valid_till
			}],
			primary_action: function() {
				const values = dialog.get_values();
				frappe.call({
					method: "extend_quotation_validity",
					args: {
					    date: values.end_date,
					    quotation: frm.doc.name
					}
				}).then(() => {
					frm.refresh();
				})
				dialog.hide();
			},
			primary_action_label: __('Extend validity')
		});

		dialog.show();
	}

})

Script serveur

quotation = frappe.get_doc("Quotation", frappe.form_dict.get("quotation"))
quotation.flags.ignore_validate_update_after_submit = True
quotation.valid_till = frappe.form_dict.get("date")
quotation.set_status()
quotation.save()
quotation.flags.ignore_validate_update_after_submit = False

Bonne fin de journée !