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];
}
}
