context
Hello my problem is the following:
I would like to turn a quote into an invoice by clicking on a button but I can't implement the routes
I see the boutton but when I click on it nothing even in error log
Here are my files
/var/www/crm/custom/Espo/Modules/CDevis/Resources/routes.json
front
var/www/crm/client/custom/src/controllers/detail.js
/var/www/crm/custom/Espo/Modules/CDevis/Resources/metadata/scopes/CDevis.json
/var/www/crm/custom/Espo/Custom/Controllers/CDevis.php
Hello my problem is the following:
I would like to turn a quote into an invoice by clicking on a button but I can't implement the routes
I see the boutton but when I click on it nothing even in error log
Here are my files
/var/www/crm/custom/Espo/Modules/CDevis/Resources/routes.json
Code:
[ { "route": "/CDevis/:id/devisToFacture", "method": "post", "params": { "controller": "CDevis", "action": "devisToFacture", "id": ":id" } } ]
var/www/crm/client/custom/src/controllers/detail.js
Code:
Espo.define('custom:views/cdevis/record/detail', ['view'], function (Dep) { return Dep.extend({ setup: function () { Dep.prototype.setup.call(this); // Ajout du bouton dans le menu déroulant avec action "factureToDevis" this.menu.actions.push({ action: 'devisToFacture', label: 'Transformer en Facture', acl: 'edit', name:'devisToFacture', handler: function () { console.log('Bouton "Transformer en Facture" cliqué'); // Debug: log à chaque clic sur le bouton this.devisToFacture(); }.bind(this) }); }, // Méthode pour transformer le devis en facture devisToFacture: function () { var idDevis = this.model.id; // Debug: Vérifier l'ID du devis console.log('ID du devis récupéré: ', idDevis); // Envoyer la requête POST à l'API pour transformer le devis en facture Espo.Ajax.postRequest('CDevis/' + idDevis + '/devis-to-facture', {}) .then(function (response) { // Debug: Afficher la réponse de l'API console.log('Réponse de l\'API : ', response); if (response && response.success) { console.log('Transformation réussie, facture créée avec ID : ', response.id); Espo.Ui.notify('Le devis a été transformé en facture avec succès.'); // Rediriger vers la nouvelle facture Espo.Router.navigate('#CFacture/view/' + response.id, { trigger: true }); } else { console.error('Erreur lors de la transformation : ', response.error); Espo.Ui.error('Erreur lors de la transformation du devis : ' + (response.error || 'inconnue')); } }.bind(this)) .catch(function (error) { // Debug: Afficher les erreurs console.error('Erreur lors de la requête POST : ', error); Espo.Ui.error('Erreur lors de la requête.'); }); }, // Contrôle de la visibilité du bouton isTransformButtonVisible: function () { return !['Converted', 'Canceled'].includes(this.model.get('status')); } }); });
Code:
{ "module" : "devisToFacture" }
PHP Code:
<?php
namespace Espo\Custom\Controllers;
use Espo\Core\Api\Request;
use Espo\Core\Api\Response;
class CDevis extends \Espo\Core\Templates\Controllers\Base
{
// Méthode pour transformer un devis en facture
public function actionDevisToFacture($params)
{
$devisId = $params['id']; // ID du devis
// Récupérer le devis à partir de l'ID
$devis = $this->getEntityManager()->getEntity('CDevis', $devisId);
if (!$devis) {
return ['success' => false, 'error' => 'Devis non trouvé'];
}
// Créer une nouvelle entité de type "CFacture" avec les données du devis
$facture = $this->getEntityManager()->getEntity('CFacture');
$facture->set('account', $devis->get('account'));
$facture->set('name', $devis->get('name'));
// Ajoute d'autres champs ici si nécessaire
// Sauvegarder la facture
$this->getEntityManager()->saveEntity($facture);
// Retourner l'ID de la facture créée
return ['success' => true, 'id' => $facture->id];
}
}