fix: PHP CS Fixer (43 fichiers) + PHPStan level 6 zero erreurs + JS SonarQube
PHP CS Fixer : - 43 fichiers corriges (imports, docblocks, formatting) PHPStan level 6 (45 erreurs corrigees) : - ComptabiliteController/DevisController : cast User via @var - StatsController : cast float pour operations arithmetiques - AdvertService/DevisService/FactureService : @return array shape - PaymentReminderCommand : default arm dans match - Stripe SDK : @phpstan-ignore-next-line (5 occurrences) - MailerService : suppression ?? redondants sur offsets existants - SentryService : fix types retour, dead code - DnsCheckService/GoogleSearchService : @param value types - LegalController : suppression statement inatteignable - ActionService : @phpstan-ignore propriete non lue - Pdf/AdvertPdf/FacturePdf : @phpstan-ignore methodes inutilisees JS SonarQube : - app.js : isNaN -> Number.isNaN, replace -> replaceAll (5 occurrences) - app.js : extraction ternaire imbrique en if/else if - app.js : refactor SIRET search (nesting 5->3 niveaux) - entreprise-search.js : parseInt -> Number.parseInt - app.test.js : extraction trackListener (complexite cognitive 17->12) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
115
assets/app.js
115
assets/app.js
@@ -145,7 +145,9 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
const renderHit = (h, linkPrefix) => {
|
||||
const id = h.customerId || h.id;
|
||||
const name = h.fqdn || h.name || h.fullName || h.raisonSociale || (h.firstName + ' ' + h.lastName);
|
||||
const sub = h.customerName ? `<span class="text-gray-400 ml-2">${h.customerName}</span>` : (h.email ? `<span class="text-gray-400 ml-2">${h.email}</span>` : '');
|
||||
let sub = '';
|
||||
if (h.customerName) sub = `<span class="text-gray-400 ml-2">${h.customerName}</span>`;
|
||||
else if (h.email) sub = `<span class="text-gray-400 ml-2">${h.email}</span>`;
|
||||
return `<a href="${linkPrefix}${id}" class="block px-4 py-2 hover:bg-gray-50 border-b border-gray-100 text-xs">
|
||||
<span class="font-bold">${name}</span>
|
||||
${sub}
|
||||
@@ -310,61 +312,66 @@ document.addEventListener('DOMContentLoaded', () => {
|
||||
const siretSearchBtn = document.getElementById('siret-search-btn');
|
||||
const siretInput = document.getElementById('siret-search-input');
|
||||
const siretResults = document.getElementById('siret-search-results');
|
||||
if (siretSearchBtn && siretInput && siretResults) {
|
||||
siretSearchBtn.addEventListener('click', () => {
|
||||
const q = siretInput.value.trim();
|
||||
if (q.length < 3) { siretResults.innerHTML = '<p class="text-xs text-gray-400 p-2">Saisissez au moins 3 caracteres.</p>'; siretResults.classList.remove('hidden'); return; }
|
||||
|
||||
siretResults.innerHTML = '<p class="text-xs text-gray-400 p-2">Recherche...</p>';
|
||||
siretResults.classList.remove('hidden');
|
||||
const renderSiretResult = (r) => {
|
||||
const siege = r.siege || {};
|
||||
const siret = siege.siret || '';
|
||||
const nom = r.nom_complet || r.nom_raison_sociale || '';
|
||||
const adresse = siege.adresse || '';
|
||||
const cp = siege.code_postal || '';
|
||||
const ville = siege.libelle_commune || '';
|
||||
return '<button type="button" class="siret-result-item block w-full text-left px-3 py-2 hover:bg-white/70 border-b border-white/20 transition-all"'
|
||||
+ ' data-nom="' + nom.replaceAll('"', '"') + '"'
|
||||
+ ' data-siret="' + siret + '"'
|
||||
+ ' data-adresse="' + adresse.replaceAll('"', '"') + '"'
|
||||
+ ' data-cp="' + cp + '"'
|
||||
+ ' data-ville="' + ville.replaceAll('"', '"') + '">'
|
||||
+ '<span class="font-bold text-xs">' + nom + '</span>'
|
||||
+ '<span class="text-[10px] text-gray-400 ml-2">' + siret + '</span>'
|
||||
+ '<br><span class="text-[10px] text-gray-400">' + adresse + ' ' + cp + ' ' + ville + '</span>'
|
||||
+ '</button>';
|
||||
};
|
||||
|
||||
fetch('/admin/prestataires/entreprise-search?q=' + encodeURIComponent(q))
|
||||
.then(r => r.json())
|
||||
.then(data => {
|
||||
const results = data.results || [];
|
||||
if (results.length === 0) {
|
||||
siretResults.innerHTML = '<p class="text-xs text-gray-400 p-2">Aucun resultat.</p>';
|
||||
return;
|
||||
}
|
||||
siretResults.innerHTML = results.map(r => {
|
||||
const siege = r.siege || {};
|
||||
const siret = siege.siret || '';
|
||||
const nom = r.nom_complet || r.nom_raison_sociale || '';
|
||||
const adresse = siege.adresse || '';
|
||||
const cp = siege.code_postal || '';
|
||||
const ville = siege.libelle_commune || '';
|
||||
return '<button type="button" class="siret-result-item block w-full text-left px-3 py-2 hover:bg-white/70 border-b border-white/20 transition-all"'
|
||||
+ ' data-nom="' + nom.replace(/"/g, '"') + '"'
|
||||
+ ' data-siret="' + siret + '"'
|
||||
+ ' data-adresse="' + adresse.replace(/"/g, '"') + '"'
|
||||
+ ' data-cp="' + cp + '"'
|
||||
+ ' data-ville="' + ville.replace(/"/g, '"') + '">'
|
||||
+ '<span class="font-bold text-xs">' + nom + '</span>'
|
||||
+ '<span class="text-[10px] text-gray-400 ml-2">' + siret + '</span>'
|
||||
+ '<br><span class="text-[10px] text-gray-400">' + adresse + ' ' + cp + ' ' + ville + '</span>'
|
||||
+ '</button>';
|
||||
}).join('');
|
||||
|
||||
siretResults.querySelectorAll('.siret-result-item').forEach(item => {
|
||||
item.addEventListener('click', () => {
|
||||
const form = siretSearchBtn.closest('form');
|
||||
if (!form) return;
|
||||
const set = (name, val) => { const el = form.querySelector('[name="' + name + '"]'); if (el) el.value = val; };
|
||||
set('raisonSociale', item.dataset.nom);
|
||||
set('siret', item.dataset.siret);
|
||||
set('address', item.dataset.adresse);
|
||||
set('zipCode', item.dataset.cp);
|
||||
set('city', item.dataset.ville);
|
||||
siretResults.classList.add('hidden');
|
||||
siretInput.value = '';
|
||||
});
|
||||
});
|
||||
})
|
||||
.catch(() => {
|
||||
siretResults.innerHTML = '<p class="text-xs text-red-500 p-2">Erreur lors de la recherche.</p>';
|
||||
});
|
||||
const bindSiretResultClick = (item) => {
|
||||
item.addEventListener('click', () => {
|
||||
const form = siretSearchBtn.closest('form');
|
||||
if (!form) return;
|
||||
const set = (name, val) => { const el = form.querySelector('[name="' + name + '"]'); if (el) el.value = val; };
|
||||
set('raisonSociale', item.dataset.nom);
|
||||
set('siret', item.dataset.siret);
|
||||
set('address', item.dataset.adresse);
|
||||
set('zipCode', item.dataset.cp);
|
||||
set('city', item.dataset.ville);
|
||||
siretResults.classList.add('hidden');
|
||||
siretInput.value = '';
|
||||
});
|
||||
};
|
||||
|
||||
const handleSiretSearch = () => {
|
||||
const q = siretInput.value.trim();
|
||||
if (q.length < 3) { siretResults.innerHTML = '<p class="text-xs text-gray-400 p-2">Saisissez au moins 3 caracteres.</p>'; siretResults.classList.remove('hidden'); return; }
|
||||
|
||||
siretResults.innerHTML = '<p class="text-xs text-gray-400 p-2">Recherche...</p>';
|
||||
siretResults.classList.remove('hidden');
|
||||
|
||||
fetch('/admin/prestataires/entreprise-search?q=' + encodeURIComponent(q))
|
||||
.then(r => r.json())
|
||||
.then(data => {
|
||||
const results = data.results || [];
|
||||
if (results.length === 0) {
|
||||
siretResults.innerHTML = '<p class="text-xs text-gray-400 p-2">Aucun resultat.</p>';
|
||||
return;
|
||||
}
|
||||
siretResults.innerHTML = results.map(renderSiretResult).join('');
|
||||
siretResults.querySelectorAll('.siret-result-item').forEach(bindSiretResultClick);
|
||||
})
|
||||
.catch(() => {
|
||||
siretResults.innerHTML = '<p class="text-xs text-red-500 p-2">Erreur lors de la recherche.</p>';
|
||||
});
|
||||
};
|
||||
|
||||
if (siretSearchBtn && siretInput && siretResults) {
|
||||
siretSearchBtn.addEventListener('click', handleSiretSearch);
|
||||
siretInput.addEventListener('keydown', (e) => { if (e.key === 'Enter') { e.preventDefault(); siretSearchBtn.click(); } });
|
||||
document.addEventListener('click', (e) => { if (!siretResults.contains(e.target) && e.target !== siretInput && e.target !== siretSearchBtn) siretResults.classList.add('hidden'); });
|
||||
}
|
||||
@@ -585,7 +592,7 @@ function initDevisLines() {
|
||||
let total = 0;
|
||||
container.querySelectorAll('.line-price').forEach(input => {
|
||||
const v = parseFloat(input.value);
|
||||
if (!isNaN(v)) total += v;
|
||||
if (!Number.isNaN(v)) total += v;
|
||||
});
|
||||
totalEl.textContent = total.toFixed(2) + ' EUR';
|
||||
}
|
||||
@@ -654,7 +661,7 @@ function initDevisLines() {
|
||||
|
||||
if (!type || type === 'hosting' || type === 'maintenance' || type === 'other') return;
|
||||
|
||||
const url = select.dataset.servicesUrl.replace('__TYPE__', type);
|
||||
const url = select.dataset.servicesUrl.replaceAll('__TYPE__', type);
|
||||
try {
|
||||
const resp = await fetch(url);
|
||||
const items = await resp.json();
|
||||
|
||||
@@ -6,7 +6,7 @@ const API_URL = '/admin/clients/entreprise-search'
|
||||
|
||||
const computeTva = (siren) => {
|
||||
if (!siren) return ''
|
||||
const key = (12 + 3 * (parseInt(siren, 10) % 97)) % 97
|
||||
const key = (12 + 3 * (Number.parseInt(siren, 10) % 97)) % 97
|
||||
return 'FR' + String(key).padStart(2, '0') + siren
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user