Announcement

Collapse
No announcement yet.

Editing routes

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Editing routes

    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
    Code:
    [
        {
            "route": "/CDevis/:id/devisToFacture",
            "method": "post",
            "params": {
                "controller": "CDevis",
                "action": "devisToFacture",
                "id": ":id"
            }
        
        }
    ]​
    front
    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'));
            }
        });
    });
    ​
    /var/www/crm/custom/Espo/Modules/CDevis/Resources/metadata/scopes/CDevis.json
    Code:
    {
        "module" : "devisToFacture"
    }​
    /var/www/crm/custom/Espo/Custom/Controllers/CDevis.php
    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];
        }
    }
Working...
X