Ajout numéro SIREN/SIRET pour un client

This commit is contained in:
Jean-Christophe Engel 2024-01-11 20:41:19 +01:00
parent 438e9c6116
commit b6bb4fd80d
12 changed files with 65 additions and 6 deletions

View File

@ -1,3 +1,5 @@
0.8.5
- Ajout numéro SIREN/SIRET pour les clients
0.8.4 0.8.4
- Correction bug si identité définie par plusieurs champs - Correction bug si identité définie par plusieurs champs
- Correction bug oubli choix receveur - Correction bug oubli choix receveur

View File

@ -26,6 +26,7 @@ $form->runIf(f('save') && !$form->hasErrors(),
'adresse' => f('adresse'), 'adresse' => f('adresse'),
'code_postal' => f('code_postal'), 'code_postal' => f('code_postal'),
'ville' => f('ville'), 'ville' => f('ville'),
'siret' => f('siret'),
'telephone' => f('telephone'), 'telephone' => f('telephone'),
'email' => f('email') 'email' => f('email')
]); ]);

View File

@ -16,6 +16,7 @@ $form->runIf(f('add') && !$form->hasErrors(),
'adresse' => f('adresse'), 'adresse' => f('adresse'),
'code_postal' => f('code_postal'), 'code_postal' => f('code_postal'),
'ville' => f('ville'), 'ville' => f('ville'),
'siret' => f('siret'),
'telephone' => f('telephone'), 'telephone' => f('telephone'),
'email' => f('email') 'email' => f('email')
]); ]);

View File

@ -92,7 +92,7 @@ if ($f->type_facture != CERFA)
'<b>'.$config->get('org_name')."</b><br>". '<b>'.$config->get('org_name')."</b><br>".
$adresse ."<br>". $adresse ."<br>".
(($t = $plugin->getConfig('rna_asso'))?"RNA : $t<br>":''). (($t = $plugin->getConfig('rna_asso'))?"RNA : $t<br>":'').
(($t = $plugin->getConfig('siret_asso'))?"SIRET : $t<br>":''). (($t = $plugin->getConfig('siret_asso'))?"SIRET : " . implode(' ', str_split($t, 3)) . "<br>":'').
(($t = $config->get('email_asso'))?"Email : $t<br>":''). (($t = $config->get('email_asso'))?"Email : $t<br>":'').
(($t = $config->get('site_asso'))?"Site web : $t<br>":''); (($t = $config->get('site_asso'))?"Site web : $t<br>":'');
@ -101,6 +101,7 @@ if ($f->type_facture != CERFA)
'<b>'.$c->nom.'</b><br>'. '<b>'.$c->nom.'</b><br>'.
$c->adresse."<br>". $c->adresse."<br>".
$c->code_postal.' '.$c->ville."<br>". $c->code_postal.' '.$c->ville."<br>".
(($t = $c->siret)?"SIREN/SIRET : " . implode(' ', str_split($t, 3)) . "<br>":'').
(($t = $c->email)?"Email : $t<br>":''). (($t = $c->email)?"Email : $t<br>":'').
(($t = $c->telephone)?"Tel : $t<br>":''); (($t = $c->telephone)?"Tel : $t<br>":'');

View File

@ -21,7 +21,7 @@ CREATE TABLE IF NOT EXISTS plugin_facturation_clients (
adresse TEXT NOT NULL, adresse TEXT NOT NULL,
code_postal TEXT NOT NULL, code_postal TEXT NOT NULL,
ville TEXT NOT NULL, ville TEXT NOT NULL,
-- date_creation INTEGER NOT NULL, siret TEXT NOT NULL,
date_creation TEXT NOT NULL DEFAULT CURRENT_DATE CHECK (date(date_creation) IS NOT NULL AND date(date_creation) = date_creation), -- Date d\'inscription date_creation TEXT NOT NULL DEFAULT CURRENT_DATE CHECK (date(date_creation) IS NOT NULL AND date(date_creation) = date_creation), -- Date d\'inscription
telephone TEXT, telephone TEXT,
email TEXT email TEXT

View File

@ -15,6 +15,7 @@ class Client
'adresse', 'adresse',
'code_postal', 'code_postal',
'ville', 'ville',
'siret',
'telephone', 'telephone',
'email' 'email'
]; ];
@ -55,6 +56,10 @@ class Client
throw new UserException('Le code postal est erroné.'); throw new UserException('Le code postal est erroné.');
} }
} }
elseif ($key == "siret")
{
$data[$key] = str_replace(' ', '', $data[$key]);
}
elseif ($key == "telephone") elseif ($key == "telephone")
{ {
$data[$key] = Utils::normalizePhoneNumber($data[$key]); $data[$key] = Utils::normalizePhoneNumber($data[$key]);
@ -84,7 +89,7 @@ class Client
if($this->config['unique_client_name'] && isset($data['nom']) && $db->test('plugin_facturation_clients', 'nom = ? COLLATE NOCASE', $data['nom'])) if($this->config['unique_client_name'] && isset($data['nom']) && $db->test('plugin_facturation_clients', 'nom = ? COLLATE NOCASE', $data['nom']))
{ {
throw new UserException('La valeur du champ nom est déjà utilisée, hors ce champ doit être unique à chaque client.'); throw new UserException('La valeur du champ nom est déjà utilisée, or ce champ doit être unique à chaque client.');
} }
$db->insert('plugin_facturation_clients', $data); $db->insert('plugin_facturation_clients', $data);
@ -122,6 +127,9 @@ class Client
'ville' => [ 'ville' => [
'label' => 'Ville', 'label' => 'Ville',
], ],
'siret' => [
'label' => 'Siret',
],
'telephone' => [ 'telephone' => [
'label' => 'Téléphone', 'label' => 'Téléphone',
], ],
@ -150,7 +158,7 @@ class Client
if($this->config['unique_client_name'] && isset($data['nom']) && $db->test('plugin_facturation_clients', 'nom = ? COLLATE NOCASE AND id != ?', $data['nom'], (int)$id)) if($this->config['unique_client_name'] && isset($data['nom']) && $db->test('plugin_facturation_clients', 'nom = ? COLLATE NOCASE AND id != ?', $data['nom'], (int)$id))
{ {
throw new UserException('La valeur du champ nom est déjà utilisée, hors ce champ doit être unique à chaque client.'); throw new UserException('La valeur du champ nom est déjà utilisée, or ce champ doit être unique à chaque client.');
} }
return $db->update('plugin_facturation_clients', $data, $db->where('id', (int)$id)); return $db->update('plugin_facturation_clients', $data, $db->where('id', (int)$id));

View File

@ -432,7 +432,7 @@ class Facture
if(isset($data['numero']) && $db->test('plugin_facturation_factures', 'numero = ? COLLATE NOCASE AND id != ?', $data['numero'], (int)$id)) if(isset($data['numero']) && $db->test('plugin_facturation_factures', 'numero = ? COLLATE NOCASE AND id != ?', $data['numero'], (int)$id))
{ {
throw new UserException('Un document avec ce numéro existe déjà, hors le numéro doit être unique.'); throw new UserException('Un document avec ce numéro existe déjà, or le numéro doit être unique.');
} }
return $db->update('plugin_facturation_factures', $data, $db->where('id', (int)$id)); return $db->update('plugin_facturation_factures', $data, $db->where('id', (int)$id));
} }

View File

@ -2,7 +2,7 @@ name="Facturation"
description="Permet d'éditer des factures, devis et reçus à ses membres ainsi qu'à une base de clients supplémentaire." description="Permet d'éditer des factures, devis et reçus à ses membres ainsi qu'à une base de clients supplémentaire."
author="zou ; adapté par jce" author="zou ; adapté par jce"
url="https://git.roflcopter.fr/lesanges/paheko-plugin-facturation" url="https://git.roflcopter.fr/lesanges/paheko-plugin-facturation"
version="0.8.3" version="0.8.5"
menu=true menu=true
restrict_section="accounting" restrict_section="accounting"
restrict_level="read" restrict_level="read"

View File

@ -18,6 +18,12 @@
<dt>Code postal</dt> <dt>Code postal</dt>
<dd>{$client.code_postal|escape|rtrim|nl2br}</dd> <dd>{$client.code_postal|escape|rtrim|nl2br}</dd>
<dt>SIREN/SIRET</dt>
<?php
$siret = implode(' ', str_split($client->siret, 3));
?>
<dd>{$siret|escape|trim}</dd>
<dt>Adresse électronique</dt> <dt>Adresse électronique</dt>
<dd> <dd>
{if empty($client.email)} {if empty($client.email)}

View File

@ -11,6 +11,7 @@
{input type="text" name="adresse" label="Adresse" required=true source=$client} {input type="text" name="adresse" label="Adresse" required=true source=$client}
{input type="text" name="code_postal" label="Code postal" required=true source=$client} {input type="text" name="code_postal" label="Code postal" required=true source=$client}
{input type="text" name="ville" label="Ville" required=true source=$client} {input type="text" name="ville" label="Ville" required=true source=$client}
{input type="text" name="siret" label="SIREN/SIRET" required=true source=$client}
{input type="tel" name="telephone" label="Téléphone" source=$client} {input type="tel" name="telephone" label="Téléphone" source=$client}
{input type="email" name="email" label="Adresse e-mail" source=$client} {input type="email" name="email" label="Adresse e-mail" source=$client}
</dl> </dl>

View File

@ -13,6 +13,9 @@
{if $key == 'id' || $key == 'nom'} {if $key == 'id' || $key == 'nom'}
<?php continue; ?> <?php continue; ?>
{/if} {/if}
{if $key == 'siret'}
<?php $value = implode(' ', str_split($value, 3)); ?>
{/if}
<td>{$value}</td> <td>{$value}</td>
{/foreach} {/foreach}
<td class="actions"> <td class="actions">
@ -52,6 +55,7 @@
{input type="text" name="adresse" label="Adresse" required=true} {input type="text" name="adresse" label="Adresse" required=true}
{input type="text" name="code_postal" label="Code postal" required=true} {input type="text" name="code_postal" label="Code postal" required=true}
{input type="text" name="ville" label="Ville" required=true} {input type="text" name="ville" label="Ville" required=true}
{input type="text" name="siret" label="SIREN/SIRET" required=true}
{input type="tel" name="telephone" label="Téléphone"} {input type="tel" name="telephone" label="Téléphone"}
{input type="email" name="email" label="Adresse e-mail"} {input type="email" name="email" label="Adresse e-mail"}
</dl> </dl>

View File

@ -209,3 +209,38 @@ if (version_compare($old_version, '0.8.1', '<'))
{ {
$plugin->unregisterSignal('menu.item'); $plugin->unregisterSignal('menu.item');
} }
// 0.8.5 Ajout champs SIREN/SIRET à la table clients
if (version_compare($old_version, '0.8.5', '<'))
{
$db->exec(<<<EOT
CREATE TABLE IF NOT EXISTS plugin_facturation_clients_tmp
(
id INTEGER PRIMARY KEY,
nom TEXT NOT NULL,
adresse TEXT NOT NULL,
code_postal TEXT NOT NULL,
ville TEXT NOT NULL,
siret TEXT NOT NULL,
date_creation TEXT NOT NULL DEFAULT CURRENT_DATE CHECK (date(date_creation) IS NOT NULL AND date(date_creation) = date_creation),
telephone TEXT,
email TEXT
);
EOT
);
// copier les clients dans la table temporaire en ajoutant un siret fictif
$sql = 'SELECT * FROM plugin_facturation_clients';
foreach ($db->iterate($sql) as $client)
{
$client->siret = "";
$db->insert('plugin_facturation_clients_tmp', $client);
}
// remplacer l'ancienne table par la nouvelle
$db->exec(<<<EOT
DROP TABLE plugin_facturation_clients;
ALTER TABLE plugin_facturation_clients_tmp RENAME TO plugin_facturation_clients;
EOT
);
}