Chapitre 6. Anonymement
git git@gitlab.com:noalyss/noalyss.git
git switch stable # ou unstable
git checkout -b mon_dev1
Corriger dans mon_dev1 , faites commit
puis simplement, générer les fichiers patchs que vous enverrez par email
git format-patch stable..mon_dev1
Ces patchs seront testés et intégrés dans la branche stable et unstable , éventuellement dans la branche "pre-release",
s’il y en a une.
=== Nouvelle version
Quand la branche unstable est suffisamment mature et testée pour devenir la prochaine version, on créera à partir d’elle une branche appelée pre-release-xx où xx est le prochain numéro de version.
Tous les correctifs sur stable seront aussi intégrés sur cette branche en plus d'`unstable`.
Quand la nouvelle version sera publiée, la branche sera intégrée dans stable , re-testée et publiée.
La branche pre-release sera alors effacée.
|
Note
|
Les corrections et développement sur cette branche seront aussi portés vers unstable
|
== Convention
=== Nommage
Les fichiers dans
==== include
sont destinés à être inclus et exécuter depuis le 1er script (route)
<action>.inc.php
==== include/ajax
Appelé depuis une procédure javascript , le nom de fichier est
ajax_<action>
=== include/database
mapping table, vues et object
<table>_SQL.class.php
=== include/template
template , écran & code html
<nom_class>-<nom-fonction>.php
=== Outil
Tout doit être documenté avec Doxygen https://www.doxygen.nl/
Tous les objets SQL doivent aussi être documentés https://www.postgresql.org/docs/current/sql-comment.html
La documentation doit être au format asciidoc , ou markdown dans le répertoire doc https://asciidoctor.org/
Utilisation de phpunit ou autre système (fichiers de test avec assert() ) pour faire des tests unitaires https://phpunit.de/index.html
== Déboggage
Afin de débugger, il suffit dans le fichier noalyss/include/config.inc.php d’ajouter
define ("DEBUGNOALYSS",2);
Le niveau de déboggage est :
- 0
-
production, aucune erreur n’est affichée,
- 1
-
les erreurs et les avertissements sont affichés,
- 2
-
affichage comme le niveau 1 , mais en plus des informations sur la taille de l’écran (bande de couleur en haut), pour aider la mise au point des pages responsives , affichage des fichiers inclus, d’objets,…
Pour le niveau 2 , on utilisera la classe \Noalyss\Dbg
si on donne une valeur différente de 0 à DEBUGNOALYSS , en javascript on aura la variable
document.debug_noalyss=true, et donc on peut faire. Cependant , il vaut mieux être économe en plaçant des info de déboggage.
Il est recommandé de les supprimer après usage sauf si elles sont utiles pour aider des développements ultérieurs comme par exemple
pour indiquer quel est le fichier ou la fonction appelée.
if ( document.debug_noalyss) console.debug ('test')
/* ou */
document.debug_noalyss && console.debug ('test')
Affiche le nom du fichier inclus (à garder si possible)
\Noalyss\Dbg::echo_file(__FILE__);
Si DEBUGNOALYSS est supérieur à 1 , affiche le contenu de row dans un élément cacheable
if ( DEBUGNOALYSS>1) echo \Noalyss\Dbg::hidden_info("\$row", $row);
Si DEBUGNOALYSS est supérieur à 1, affiche l’utilisateur courant
\Noalyss\Dbg::echo_var(1,sprintf("current user is [%s]",$cn->get_value("select current_setting('noalyss.user_login')")));
\Noalyss\Dbg contient les différentes fonctions pour afficher, il existe aussi
la fonction tracedebug qui écrira dans un fichier (voir noalyss/lib/ac_common.php).
|
Note
|
l’utilisateur connecté, est sauvé dans la mémoire de la base de données et peut de ce fait être utilisé dans des triggers, voir postgresql : current_setting |
== Principe : développement en MVC
Le développement en MVC est un développement qui suit les concepts Modèle Vue Contrôle. Il en existe 2 versions. Ici, je ne parlerai que de la première.
En pratique, je crée 3 répertoires de base /html et /include et /include/template, le premier contient les « contrôles » le second les «vues» et le troisième les « modèles ».
=== Contrôle
Un contrôle est une page php, qui en fonction de l’action demandé va inclure la page «modèle» qu’il faut.
Dans noalyss, cette page est :
do.php pour toutes les demandes de pages
export.php pour toutes les impressions (PDF, CSV, …)
ajax_misc.php pour l’ajax.[1]
Exemple : la page contrôle contient
<?php
if ( !isset ($_REQUEST['do'])) exit();
$do=$_REQUEST['do'];
if ( $do == 'auteur' ) {
require_once('include/auteur.inc.php');
}
?>
L’explication est assez simple, si la page n’est pas appelée avec une variable do, donnée par un POST ou GET alors, le traitement s’arrête. Sinon en fonction de la valeur de la variable, il va inclure le fichier vue. Par habitude, mes fichiers vues ont toujours l’extension .inc.php.
Dans noalyss, le fichier do.php va chercher la vue à intégrer dans la base de données, ce qui améliore la sécurité mais aussi une grande souplesse pour les menus. Facile d’en ajouter, d’en retirer, de les renommer…
NOTE : Puisque le fichier à inclure est dans la base de données, si votre profil ne l’inclus pas, alors vous avez pas du tout accès à ce menu, cela s’étend aux impressions, il est possible d’empêcher les impressions. Les menus et profils se configurent dans [C1MENU]
=== Vue
Grâce à l’exemple vu dans Contrôle, vous avez compris ce qu’est le concept vue: c’est la présentation de votre action. Donc pour continuer l’exemple, dans le document include/auteur.inc.php, on aurait
<?php
require_once ('include/class_auteur.php');
if ( ! isset($_REQUEST['sdo']) ) exit();
$sdo=$_REQUEST['sdo'];
if ( $sdo == 'add' ) {
$auteur=new Auteur();
$auteur->display_form();
}
?>
Ici, comme dans contrôle, on vérifie qu’une action est bien demandée, si c’est la cas, on appelle un objet et on lui demande d’afficher quelque chose. Cet objet est ce qui est dans le concept MVC, un modèle. En fait, on dirait une espèce de sous-contrôle
=== Modèle
Eh oui, le dernier est donc le modèle. Ici ce sont deux classes, l’une va se charger de sauver, afficher, effacer les données et gère donc les relations avec la base de données et l’autre l’objet métier.
Le nom de ce fichier doit être
<nom de la classe>-<fonction>.php
Ce n’est pas toujours le cas, et cette réécriture se fait au fur et à mesure.
Il est vraiment fastidieux de construire une chaîne de
caractère contenant tout le code html, surtout quand on emploie aussi du
javascript et des tableaux. La solution que j’ai trouvé, je l’ai trouvé
en m’inspirant de l’idée de smarty. En fait, je crée un sous-répertoire
dans include appelé template, et dedans je mets le code HTML de ce
qui doit être affiché
<?php
class Auteur {
function display_form() {
ob_start();
include 'template/auteur-display_form.php';
$r=ob_get_contents();
$ob_clean();
return $r;
}
}
Ici on inclus le fichier, comme il est en PHP, il sera interprété par PHP, il contient surtout du code HTML et des balises PHP, on peut aussi manipuler la chaîne retournée avec les fonctions de chaînes comme str_replace, strcmp,... Ce qui donne à cette méthode encore plus de souplesse.
Il est important de respecter la règle suivante: un minimum d’HTML dans le PHP et un minimum de PHP dans l’HTML. Il faudra alors utiliser beaucoup de variables avant d’utiliser les templates, il faudra aussi résister à la tentation de mettre de l’html dans la variable, ce qui n’est pas toujours possible.
|
Attention
|
les variables sont définies en-dehors du fichier template. Les IDE avertissent que ces variables ne sont définies. il suffit d’ajouter un block commentaire pour supprimer cet avertissement |
<?php
/**
* @var $auteur string contient le nom de l'auteur
*/
|
Important
|
toutes les variables doivent être commentées, sauf les variables en une seule lettre (utilisée principalement pour les boucles). |
== La documentation
J’utilise Doxygen https://www.doxygen.nl/ afin de générer le code ce sont les TAGS brief, param… Cela me permet de générer une documentation; cette documentation me permet de développer plus vite et de mieux vérifier la qualité du code.
Voir le résultat ici https://wiki.noalyss.eu/doc/classes.html
Il est recommandé de toujours documenter les variables , les fonctions, les fichiers et les classes.
Le fichier qui va router les demandes (en général index.php ) doit contenir l’explication pour le développement [2]
<?php
// variable: $tot float total for the operation
$tot=0;
Quand une variable est héritée d’un autre fichier, à la suite d’un include ou require, afin que NetBeans (ou PhpStorm) n’indique pas une erreur.
<?php
/**
* @var $tot float total for the operation
*/
$tot=$tot+1;
== Fichiers importants
Les fichiers à inclure sont dans la table menu_ref, cette table est accèdée à travers la table profile_menu qui décrit l’interface de l’utilisateur, ce qui automatiquement empêche un utilisateur d’accèder à un menu auquel il n’a pas accès.
Le répertoire include contient les fichiers à inclure, les noms de fichiers suivent la logique suivant :
- noalyss\include/constant.php
-
contient les variables globales, les constantes, l’autoloader.
- noalyss\include/config.inc.php
-
contient le paramétrage de NOALYSS, surtout l’accès aux bases de données.
- noalyss\include\ajax
-
Action ajax, le nom de fichier commence par ajax, contient le contenu de la variable op, c’est cette variable qui va indiquer le fichier à include.[3]
- fichier à inclure
-
le nom de fichier termine par inc.php,
- fichier ORM
-
correspondant à une table NOM_TABLE dans la base de données:class_NOM_TABLE_sql.class.php,
- fichier d’object
-
le nom se termine par .class.php
- noalyss/log
-
répertoire des logs, voir fonction record_log
- noalyss\include\template
-
ici vous avez les modèles, ce sont des fichiers contenant surtout du code HTML.
En résumé :
Les contrôleurs sont do.php, export.php, ajax.php
Les modèles sont dans include/template
et les vues sont dans le répertore include
== La partie base de données
=== Les mises à jour
Depuis 2005, dans NOALYSS, il y a une table version qui contient les informations sur les patch de base
de données qui ont été appliqués. Quand le fichier do.php est exécuté,
il vérifie si DBVERSION contenu dans constant.php correspond à
la version actuelle.
<?php
/* Ficher do.php */
if (DBVERSION < dossier::get_version($cn))
{
echo '<h2 class="error" style="font-size:12px">' .
_("Attention: la version de base de donnée est supérieure à la version du programme, vous devriez
mettre à jour") . '</h2>';
}
if (DBVERSION > dossier::get_version($cn))
{
echo '<h2 class="error" style="font-size:12px">' . _("Votre base de données n'est pas à jour") . ' ';
$a = _("cliquez ici pour appliquer le patch");
$base = dirname($_SERVER['REQUEST_URI']) . '/admin/setup.php';
echo '<a hreF="' . $base . '">' . $a . '</a></h2>';
}
Dans le cas où DBVERSION n’est pas la valeur contenue dans la base de
donnée, do.php vous propose d’appliquer le patch sur vos bases de
données. Voici la fonction qui applique les patch SQL pour la base de
données. Ces fichiers sont dans noalyss/include/sql/patch.
<?php
/* fichier setup.php */
//----------------------------------------------------------------------
// Upgrade the folders
//----------------------------------------------------------------------
for ($e=0;$e < $MaxDossier;$e++) {
$db_row=Database::fetch_array($Resdossier,$e);
echo "<h3>Patching ".$db_row['dos_name'].'</h3>';
$name=$cn->format_name($db_row['dos_id'],'dos');
if ( $cn->exist_database($name)> 0 )
{
$db=new Database($db_row['dos_id'],'dos');
$db->apply_patch($db_row['dos_name']);
Dossier::synchro_admin($db_row['dos_id']);
} else
{
echo_warning(_("Dossier inexistant")." $name");
}
}
La fonction qui applique le patch est Database::apply_patch voir
class Database
Tous les patchs pour la base de données se trouve dans
/noalyss/include/sql/patch/ et sont numérotés dans l’ordre d’exécution.
Chaque patch commence par
begin;
et termine par
insert into version (val,v_description) values (..version.,'.description..');
commit;
Ainsi, si le script échoue, la mise à jour s’arrête et annule toute ce
qui a été fait dans ce script, la base de données
reste ainsi dans un état cohérent. Une fois l’erreur corrigée dans votre
base de données, ce script ainsi que ceux qui suivent seront appliqués
quand vous appelerez à nouveau noalyss/admin/setup.php (ou noalyss/html/install.php).
Le nombre dans la table version est le nombre du script moins un, exemple : le script upgrade199.sql, correspond à la 200 dans la table version
/* upgrade199.sql */
insert into version (val,v_description) values (200,'Widget and improve menu');
Pour accèder aux tables ou aux vues, pour les SQL complexes , nous créons une classe qui va hériter de Table_Data_SQL qui est dérivée de Data_SQL
et qui va nous permettre de faire la même chose en très peu de ligne de code.
Cette classe fournit entre-autres les fonctions suivantes qui peuvent être surchargée
- insert
-
pour insérer une ligne dans la base de données
- delete
-
pour insérer une ligne dans la base de données
- update
-
pour mettre à jour une ligne dans la base de données
- verify
-
à surcharger, vérifie que les données sont conformes
- setp
-
setter paramètre : nom de la colonne, valeur retourne l’objet
- getp
-
getter paramètre : nom de la colonne , retourne la valeur de cette colonne
- toString
-
affiche le contenu de l’objet
- from_array
-
transforme un tableau en un objet
- seek
-
recherche dans la table sur base d’une condition
- next
-
retourne l’objet suivant (après seek)
- check
-
contrôle des valeurs
Voici tout le code à taper par table, exemple pour la table stock_change.
Le fichier sera nommé table_sql.class.php , il sera dans un répertoire /database/ et la classe se nommera table_SQL
<?php
class Stock_Change_SQL extends Noalyss_SQL
{
// Le contructeur obligatoire
function __construct($p_id = -1)
{
// Façon dont les dates sont utilisées
$this->date_format="DD.MM.YYYY";
// Nom de la table
$this->table = "public.stock_change";
// nom de la clef primaire
$this->primary_key = "c_id";
// Structure de la table, à gauche le nom logique utilisable
// avec les getters/setters (setp/getp) et à droite le nom de la
// colonne
$this->name = array(
"id" => "c_id",
"c_comment" => "c_comment",
"c_date" => "c_date",
"tech_date"=>"tech_date",
"tech_user"=>"tech_user",
"r_id"=>"r_id"
);
// Type de données
$this->type = array(
"c_id" => "numeric",
"c_comment" => "text",
"c_date" => "date",
"tech_date"=>"date",
"tech_user"=>"text",
"r_id"=>"numeric"
);
// Les colonnes qui ne peuvent pas être changée ni par insert ni par
// update parce leurs valeurs sont données automatiquement
// exemple : la clef primaire qui est un numéro de séquence
//automatiquement donné
$this->default = array(
"c_id" => "auto",
"tech_date" => "auto"
);
global $cn;
parent::__construct($cn, $p_id);
}
}
=== Les tests unitaires
==== test-me
Les fonctions info et test_me qui sont très utiles lors des phases de déboggages. Je crée une simple page test-classe.php et j’appelle la classe; dans la fonction test_me (de la classe) je mets tout ce que je souhaite tester.
exemple :
<?php
static function test_me()
{
$cn=new Database(dossier::id());
$obj=new Periode($cn);
$obj->set_jrn(1);
$obj->display_form_periode();
}
|
Note
|
ces tests ne sont pas ajoutés à NOALYSS mais servent de base pour les scénarios ou PHPUNIT |
==== PHPUNIT
Il faut tout d’abord un fichier bootstrap qui contient le path correct
pour php ainsi que les variables comme $g_user ou $cn, l’inclusion de
noalyss/include/config.inc.php et de noalyss/include/constant.php
==== Scenario
Vous pouvez enregistrer ce que vous soumettez, il faut dans
config.inc.php, ajouter
define ('LOGINPUT',true);
Ensuite créer le fichier dans noalyss/html/authorized_debug , le contenu
n’a pas d’importance, ce fichier peut être vide.
Ensuite, aller dans votre dossier de test et faites une action (une
vente, un achat…), vous devez ouvrir le fichier test.php avec comme
paramètre le dossier (exemple
http://localhost/noalyss/html/test.php?gDossier=14) ce que vous venez
de faire a été sauvé dans le répertoire défini par $_ENV['TMP'], (sous
linux il s’agit de /tmp )avec un nom ressemblant à scenario-<nombre>.php
Vous devez d’abord copier ce fichier dans le répertoire noalyss/scenario , de préférence avec un nom plus parlant.
Si vous pointez votre browser sur noalyss/html/test.`php (après avoir créé le fichier authorized_debug) en cliquant sur le lien avec le nom de fichier vous pourrez rejouer l’action.
|
Astuce
|
Vous pouvez améliorer la description en changeant l’annotation //@description: <CODE>
|
L’objectif étant de pouvoir tester et de rejouer facilement les actions que vous avez faites. Cela permet de débogguer plus facilement en particulier les parties ajax.
= Développement de widget
== Définition
Un widget est un élément sur le tableau de bord qui affiche le suivi, des rapports, un agenda,…
== Développement
le nom code du widget , est toujours le même que celui du sous-répertoire dans noalyss/include/widget, que le nom du fichier principal et aussi, le nom de la CLASS.
|
Important
|
ce nom ne peut pas contenir d’autres caractères que des lettres et des soulignés, de préférence toujours en minuscule. |
Par exemple: le widget avec le code event (voir table widget_dashboard) est le nom du sous-répertoire de noalyss/include/widget
|
Note
|
Les widgets doivent fonctionner dans le namespace Noalyss/Widget
|
== Installation
Création d’un fichier appelé "install.php" dans le sous-répertoire noalyss/include/widget qui sera exécuté si le widget n’est pas encore dans la base de données. Quand l’utilisateur est sur le tableau de bord, qu’il clique sur "Personnaliser" puis "Ajouter", le programme va scanner le répertoire noalyss/include/widget à la recherche de fichiers install.php, il va vérifier que chaque fichier est dans la base de données ou l’insère s’il n’y est pas.
Le code du fichier install.php est simplement d’insérer le widget dans la base de données et éventuellement peut initialiser d’autres choses.
- structure table WIDGET_DASHBOARD
-
Contient tous les widgets ,
| Colonne | Type de données | Description |
|---|---|---|
wd_id |
int |
clef primaire (valeur automatique) |
wd_code |
texte |
code du widget (doit être unique , pas de souligné ou de caractères interdit, ce sera aussi le nom de la classe ) |
wd_description |
texte |
description du widget , ce qu’il fait |
wd_parameter |
int |
égal à 0, s’il n’y a pas de paramètre, à 1 s’il existe un paramètre (voir Paramètre) |
Exemple
global $cn;
$cn->exec_sql("insert into widget_dashboard (wd_code,wd_description,wd_parameter,wd_name) values ($1,$2,$3,$4)",
array (
'event'
,'Affiche les 10 actions en retards, celles à venir , les 10 prochaines factures client ou fournisseurs, ou celles en retard '
,1
,'10 actions ou factures'
)
);
== Ajax
Tous les appels Ajax appellent "html/ajax_misc.php" , la requête doit contenir :
-
la variable op : "widget"
-
la variable w : chaîne qui est le code du widget (nom du sous-répertoire de include/widget)
le fichier Ajax.php du sous-répertoire NOALYSS_INCLUDE/widget/(w)/Ajax.php sera appelé
== Application
La classe s’appelle toujours "nom-du-widget.php" , elle est dérivée de widget et doit avoir les fonctions
-
display : affichage du widget
-
input : affichage de la description et permet son activation (visible dans la box )
-
input-parameter : si des paramètres doivent être sauvées, les paramètres sont par utilisateur et par widget activés,
-
display_parameter
=== Paramètres
Certains widgets peuvent être paramétrés, et il est possible d’ajouter plusieurs fois le même widget
Exemple mini-report : choix du mini-report à afficher,
Pour cela, il faut ajouter certaines fonctions :
==== input_parameter() : création du FORM
création d’un FORM dont le DOMID sera le code widget (wd_code) suivi de "_param"
exemple pour mini_report, on utilise la fonction Widget→make_form , qui enveloppe le code transmis dans une balise FORM,
construisant ainsi le code HTML d’un FORM qui sera envoyé correctement en Ajax. Les paramètres passés seront sauvés dans
user_widget et pourront être récupérés dans un tableau associatif avec Widget→get_parameter.
function input_parameter() {
$select=new \ISelect('simple_report');
$select->value=$this->db->make_array("select fr_id, fr_label from form_definition order by 2");
$this->make_form($select->input());
}
==== display_parameter : affichage des paramètres
Les paramètres sont toujours sauvés "brut" , comme une chaîne URL par la fonction Widget→make_form(), il faut donc pouvoir l’afficher, en la travaillant avec parse_str, pour cela il faut appeler Widget→get_parameter(), le résultat doit être dans un SPAN avec la classe
"widget_param".
Exemple pour mini_report
function display_parameter() {
$aParam=$this->get_parameter();(1)
$name = $this->db->get_value("select fr_label from form_definition where fr_id=$1",[$aParam['simple_report']]);
echo " ";
echo span(_("Rapport") ." ".h($name),' class="widget_param"');
}
(1) renvoie les paramètres dans un tableau associatif
=== function display
Toujours commencer par un DIV (id=code_widget+uw_id), Widget::open_div et Widget::close_div
Puis avoir un titre et un bouton "Agrandissement", avec la fonction Widget::button_zoom ou utiliser la fonction Widget→title()
echo HtmlInput::title_box('titre du widget', uniqid(), 'custom', $this->button_zoom(), 'n');
// ou plus simplement
echo $this->title('Titre du widget');
Ce DIV doit avoir comme classe box et widget-box , le widget-box permet de numéroter les boites.
=== Exemple complet
|
Astuce
|
Toute la documentation du code source est maintenue avec Doxygen, ici on a un exemple. |
/*!
* \file
* \brief display the next invoice to be paid or late for customer or supplier
*/
namespace Noalyss\Widget;
/*!
* \class
* \brief display the next invoice to be paid or late for customer or supplier
*/
class Invoice extends Widget
{
/**
* @brief return the constant array Tiers
* @return array
*/
static function getConstantTiers() : array
{
return ['S' => _("Fournisseurs"), "C" => _("Clients")];;
}
/**
* @brief return the constant array Limit
* @return array
*/
static function getConstantLimit() :array {
return ['P' => _("Prochaines factures"), "R" => "facture en retard",'T'=>_("Aujourd'hui")];
}
/**
* @brief let choice what to display
* @return void
*/
function input_parameter()
{
$tiers = new \ISelect('tiers');
$aTiers=Invoice::getConstantTiers();
$tiers->value=[];
foreach ($aTiers as $key=>$value) {
$tiers->value[]=['value'=>$key,'label'=>$value];
}
$time_limit = new \ISelect('time_limit');
$aLimit=Invoice::getConstantLimit();
$time_limit->value=[];
foreach ($aLimit as $key=>$value) {
$time_limit->value[]=['value'=>$key,'label'=>$value];
}
$input = _("Factures ") . $tiers->input() . " " . _("échéance") . " " . $time_limit->input();
$this->make_form($input);
}
/**
* @brief display the parameter
* @return void
*/
function display_parameter()
{
$aParam = $this->get_parameter();
$aTiers =Invoice::getConstantTiers();
$aLimit = Invoice::getConstantLimit();
echo '<span class="widget_param">'.$aTiers[$aParam['tiers']] . " " . $aLimit[$aParam["time_limit"]].'</span>';
}
/**
* @brief display the widget
* @return void
* @throws \Exception
*/
function display()
{
$this->open_div();
$aParam = $this->get_parameter();
$aTiers = Invoice::getConstantTiers();
$aLimit = Invoice::getConstantLimit();
$title = $aTiers[$aParam['tiers']] . " " . $aLimit[$aParam["time_limit"]];
$this->title($title);
$acc_ledger = new \Acc_Ledger($this->db, 0);
$ledger_type = 'ACH';
if ($aParam['tiers'] == 'C') {
$ledger_type = 'VEN';
}
switch ($aParam['time_limit']) {
case 'P':
$array = $acc_ledger->get_operation_date(date('d.m.Y'), $ledger_type, '>');
break;
case 'R':
$array = $acc_ledger->get_operation_date(date('d.m.Y'), $ledger_type, '<');
break;
case 'T':
$array = $acc_ledger->get_operation_date(date('d.m.Y'), $ledger_type, '=');
break;
}
include "invoice-display.php";
$this->close_div();
}
Voir aussi "Paramètres"
= Développement d’extension (plugin)
Toute la documentation se trouve sur http://wiki.noalyss.eu/doc/; seules les classes nous intéressent. La documentation est générée à partir du code avec Doxygen. Le but de cet article n’est pas de revisiter la documentation technique mais de la mettre en oeuvre afin d’écrire une extension ou plugin.
== Installation de l’extension
Les extensions se trouvent toujours dans un sous-répertoire de
/noalyss/include/ext, pour notre plugin que nous appelerons DUMMY, le
répertoire correspondant sera /noalyss/include/ext/dummy. La première
étape est donc de décompresser le plugin dans le répertoire
/noalyss/include et vérifier si on a bien /noalyss/include/ext/DUMMY
ensuite l’activer.
Le plus simple est de retrouver le fichier dummy.php, si le chemin est
/chemin/ext/dummy/dummy.php alors /chemin/ext est l’endroit où les
plugins doivent être décompressés. Le chemin quand on ajoute le plugin
dans le menu [C1MENU] est donné dans le wiki , pour chaque plugin, on
donne le paramètre "chemin" qui est en fait le chemin à partir de /ext/
== Comment l’activer
Grâce à l’accès direct allez sur [C1MENU], puis ajoutez plugin, les champs sont les mêmes, il faut ajouter ce plugin dans le profil des utilisateurs qui doivent l’utiliser (CFGPRO)
Pour la version 6.8 et plus haut, il suffit d’aller dans C0PLG et cochez qui peut utiliser le plugin qui se trouvera dans le module "Extension". Avec [C1MENU], on peut placer l’extension dans un autre module.
=== Explication des champs
-
Label, est le nom de menu de votre extension
-
Code est utilisé pour inclure le fichier du plugin, il correspond au champs caché plugin_code
-
Fichier est le chemin complet vers l’extension
Pour notre extension, les valeurs suivantes sont données
-
Label : Mon dummy à moi
-
code : dum
-
Fichier : dummy/dummy.php
Vous sauvez, cliquer sur Extension et vous verrez apparaître un nouveau plugin appelé "Mon dummy à moi"; si vous cliquez dessus, la page ext/dummy/dummy.php sera exécutée; voyez le code du fichier noalyss/html/extension.php pour comprendre.
=== Tutoriel vidéo
=== Exemple de base
Dans les plugins de base de NOALYSS, il y a skel qui est le squelette d’un plugin. Vous pouvez l’utiliser comme base.
=== Connection à la base de données
Certaines valeurs doivent toujours être passées à chaque page, par exemple gDossier qui est l’identifiant du dossier. Pour se connecter c’est assez facile, il faut utiliser la classe Database et la classe Dossier.
Donc on écrit dans dummy.php
echo "L' identifiant de mon dossier est ".dossier::id()."<br>";
echo "Son nom réel est ".DOMAIN."dossier".dossier::id()."<br>";
echo "Son nom est ".dossier::name()."<br>";
// Je me connecte à présent à ce dossier
$cn_db=new Database(dossier::id());
// On peut aussi se connecter ainsi (développement plus récent)
$cn= Dossier::connect();
Je veux afficher toutes les fiches qui concernent le matériel à amortir, donc j’ai besoin de savoir ce que vaut son FICHE_DEF_REF:FRD_ID dans constant.php; la FICHE_TYPE_XX n’existe pas, je vois dans la table fiche_def_ref qu’il s’agit de "7 Matériel à amortir"
Pour avoir toutes les fiches,
$fiche= new Fiche($cn_db);
$aFicheMateriel=$fiche->getByDef(7);
Pour chaque fiche, je veux afficher son nom, son prix, le nombre d’années à amortir et la date d’achat. Je peux en trouver les valeurs dans la table attr_def ou le fichier constant.php,
Donc cela devient
for ($i=0; $i < count($aFicheMateriel);$i++) {
echo "<ul>
echo "<li> ";
echo "Nom";
echo $aFicheMateriel[$i]->strAttribut(ATTR_DEF_NAME);
echo "</li>";
echo "<li> ";
echo "Prix achat";
echo $aFicheMateriel[$i]->strAttribut(ATTR_DEF_PRIX_ACHAT);
echo "</li>";
echo "<li> ";
echo "Durée amortissement";
echo $aFicheMateriel[$i]->strAttribut(8);
echo "</li>";
echo "<li> ";
echo "Date de début";
echo $aFicheMateriel[$i]->strAttribut(10);
echo "</li>";
echo "</ul>
}
=== Soumettre des requêtes
Uniquement pour l’exercice, nous allons ajouter un FORM. Les données nécessaires dans le FORM sont toujours au minimum: l’id du dossier, le code du plugin.
Dans le FORM, on demandera juste à afficher le solde de chaque élément. On aura alors le code suivant, on utilisera la technique des templates
$year=new IText('year');
$str_year=$year->input();
$str_submit=HtmlInput::submit('year_left','Appliquer');
require_once('template1.php');
template1.php
<FORM METHOD="GET" ACTION="extension.php">
<?=dossier::hidden()?>
<?=HtmlInput::extension()?>
Solde pour l'année : <?=$str_year?>
<?=$str_submit?>
</form>
Puis dans le début du fichier noalyss/include/ext/dummy/dummy.php, on ajoutera un test pour savoir un FORM a été soumis et on affichera une boîte de dialogue.
$http= new HttpInput();(1)
if (isset($http->get('year_left','number'))){ (2)
alert('Vous avez demandé le nombre d\'années restantes');
}
(1) permet de retrouver des variables passées par get , post ou request (voir documentation code^)
(2) remplace $_GET['year_left'], HttpInput vérifie aussi le type de données et peut donner une valeur par défaut si cette donnée n’est pas dans $_GET
== Plugin plus avancé
Ma première extension, intégrer un fichier de client dans une catégorie de fiche, ce fichier est en CSV. Le code est simple et compréhensible, normalement on devrait avoir une meilleure gestion des erreurs, vérifier les attaques SQL Inject,… Ce code n’est là QUE pour expliquer le concept. On n’a pas utilisé plusieurs pages, ni de templates
Tout d’abord, il faut se connecter à la base de données
// se connecter au dossier courant
$cn=Dossier::connect();
Dans extension.php on vérifie la sécurité, en ajoutez une dans l’extension n’est en général pas nécessaire mais vous pourriez avoir votre propre système de sécurité si votre extension est fort complexe
En premier lieu, il est nécessaire de choisir dans quelle catégorie de fiche je veux intégrer les enregistrements. Donc on utilise un petit form
echo '<form METHOD="get" action="extension.php">';
echo dossier::hidden();
// Ceci vous permet de revenir ici (voir extension.php). Cet élément caché permet d'include cette page-ci
// Donc si votre plugin contient plusieurs pages, vous allez devoir ajouter une seconde variable pour
// inclure la page que vous voulez (voir méthode de développement de PhpCompta )
echo HtmlInput::extension();
echo "Choix de la catégorie de fiche";
$select_cat=new ISelect('fd_id');
$select_cat->value=$cn->make_array('select fd_id,fd_label from fiche_def where frd_id='.
FICHE_TYPE_CLIENT);
echo $select_cat->input();
echo HtmlInput::submit('display_prop','Afficher les propriétés');
echo '</FORM>';
Il faut remarquer 2 choses dans ce FORM, primo, on utilise les objets HtmlInput et ISelect, secundo on doit avoir absolument en variables cachées, le n° de dossier sur lequel on est connecté, le code de l’extension, qui permettra à extension.php d’include le bon fichier. On utilise ici le protocole GET puisqu’on interroge, le protocole POST est réservé aux sauvegardes, c’est une convention assez répandue. La différence, est que les requêtes GET se voient dans l’URL, les requêtes POST ne sont jamais dans l’url.
L’utilisateur soumet le FORM, donc la feuille se recharge et on arrive à cette partie du code
On choisit d’afficher les propriétés avant de confirmer l’import
if ( isset($_GET['display_prop'])){
$http=new HttpInput();
$a=new Fiche($cn);
$prop=$a->toArray($http->get('fd_id'));
foreach ($prop as $key=>$value) echo "Index : $key valeur $value <br/>";
echo '<form method="POST" action="extension.php" enctype="multipart/form-data">';
echo dossier::hidden();
echo HtmlInput::extension();
echo HtmlInput::hidden('fd_id',$http->get('fd_id');
$file=new IFile('fichier_csv');
echo $file->input();
echo HtmlInput::submit('start_import','Démarrez importation');
echo '</form>';
exit;
}
Voilà, si l’utilisateur clique sur le bouton SUBMIT, l’importation va démarrer. Dans notre exemple, on imaginera que le fichier CSV n’a que 4 champs "nom client","prenom client", "numero client","adresse client"
Le code qui suit est très simplifié.
if ( isset($_POST['start_import'])){
$http=new HttpInput();
$fd_id=$http->post('fd_id');
$tmp_file=$_FILE['fichier_csv']['tmp_name'];
if ( ! is_uploaded_file($tmp_file))
die 'Je ne peux charger ce fichier';
// on ouvre le fichier
$f=fopen($tmp_file,'r');
// On récupère les propriétés de cette catégorie de fiche
$client=new Fiche($cn);
// $array contient toutes les valeurs nécessaires à Fiche::insert,
$array=$client->toArray($http->post('fd_id'));
while ( $data=fgetcsv($f)) {
// remarque : on a éliminé les traitements d'erreur
// On remet tous les attributs (propriétés) à vide
foreach(array_keys($array) as $key) $array[$key]="";
// Nom et prénom
$array['av_text1']=$data[0].' '.$data[1];
// Numéro de client
$array['av_text30']=$data[2];
// Adresse
$array['av_text14']=$data[3];
// Quickcode
$array['av_text23']="CLI".$data[2];
$client->insert($fd_id,$array);
}
exit;
}
Voici le fichier client.txt
"Nom client1","Prénom","C1","Rue de la boite,55" "Nom client2","Prénom","C2","Rue du couvercle,55" "Nom client3","Prénom","C3","Rue de la chaussure,55" "Nom client4","Prénom","C4","Rue de la couleur,55"
Si vous vérifiez dans VW_CLIENT, vous verrez que toutes vos fiches ont été ajoutées. Dans l’exemple, il fatraitement d’erreur plus élaboré; le fait que si une fiche echoue , l’opération est annulée (Database::rollback) ou alors création d’un fichier avec les enregistrements "ratés"…
== Ajax
Afin d’utiliser des fonctions avec ajax, prototype.js devrait être utilisé.Vous devez appeler le fichier ajax.php, ce fichier dans html va simplement vérfier la sécurité et appeler le fichier ajax.php du répertoire où se trouve le plugin avec tous les arguments donnés.
Exemple
dans
dummy/javascript.js, vous avez
function show_detail(pop_id){
$('detail_invoice_content').innerHTML=loading();
showIPopup('detail_invoice');
try {
var gDossier=$('gDossier').value;
var phpsessid=$('phpsessid').value;
var code=$('code').value;
var obj={"op_id":pop_id,"gDossier":gDossier,"phpsessid":phpsessid,"code":code,'act':'detail_invoice'};
var queryString=encodeJSON(obj);
var action=new Ajax.Request ( 'ajax.php',
{
method:'get',
parameters:queryString,
onFailure:show_detail_error,
onSuccess:show_detail_success
}
);
} catch (e){alert('show_detail'+e.message);}
}
et dans dummy/ajax.php
<?php
// Met correctement la langue
set_language();
//retrouve le dossier courant et s y connecte
$gDossier=dossier::id();
$cn=new Database($gDossier);
// action
$action=(isset($_REQUEST['act']))?$_REQUEST['act']:'sh';
// Véridfie la sécurité
require_once ('class_user.php');
$User=new User(new Database());
$User->Check();
/* Suivant l action demandé, on executera tel ou tel partie de code
/* Show the document */
if ( $action == 'sh') {
/*
* Votre code
*/}
/* remove the document */
if ( $action == 'rm' ) {
/*votre code et la réponse
*/
header('Content-type: text/xml; charset=UTF-8');
header ('<?xml version="1.0" encoding="UTF-8"?>');
echo '<answer>';
echo '<ctl>detail_invoice</ctl>';
echo '<html>'.escape_xml($html).'</html>';
echo '</answer>';
}
?>
== Les données
Si votre extension nécessite de sauver ses propres données, il faut impérativement les mettres dans un schéma séparé. Prévoyez une table version, afin d’appliquer des mises à jour si nécessaire et un fichier install.php afin de créer les schémas nécessaire
exemple
create schema plugin_tva;
create table version (val integer);
== Comment faire un rapport en PDF
Si vous décidez d’ajouter un menu qui renvoit un PDF.
Tout d’abord comme dans le développement des plugins, il faut d’abord ajouter un menu dans les menu et les [menu/cfgpro[profils.
Les menus de type impression ne sont jamais affichés, ils ne servent qu’à la sécurité et commence toujours par CSV:,PDF:,… voir [C1MENU]

Le code , vous devez créér une nouvelle classe depuis la classe PDF (en mode portrait) ou la classe PDFLand en mode paysage
Exemple
require_once('class_pdf.php');
class Mon_Impression_PDF extends PDF
{
function header()
{
parent::header();
}
function export()
{
}
}
La fonction header : est ce qui est affiché comme en tête sur chaque page, La fonction footer : est ce qui est affiché comme en pied de page sur chaque page,
La fonction la plus importante est export qui remplira le listing.
Il y a peu de fonctions à connaître : Cell, export , SetFillColor…
Voici par exemple le morceau de code pour le listing dans amortissements
class Amortissement_Material_PDF extends PDF
{
function header()
{
parent::header();
$this->setFont('DejaVu', 'B', 14);
$this->Cell(190, 10, _('Amortissement : Liste de biens'), 1, 2, 'C');
$this->ln();
$this->col_size=array('qcode'=>20, 'name'=>35,'desc'=>80, 'date.purch'=>20, 'year.purch'=>20, '#amort'=>10,'amount.purch'=>30, 'amount.amort'=>30, '%'=>20, 'amount.remain'=>20,'amount.delta'=>20);
$this->setFont('DejaVu', 'B', 7);
$this->Cell($this->col_size['qcode'], 8, _('QCode'));
$this->Cell($this->col_size['name'], 8, _('Nom'));
$this->Cell($this->col_size['date.purch'], 8, _('Date achat'));
$this->Cell($this->col_size['year.purch'], 8, _('Année achat'));
$this->Cell($this->col_size['#amort'], 8, _('Nbre'), 0, 0, 'R');
$this->Cell($this->col_size['amount.purch'], 8, _('Montant'), 0, 0, 'R');
$this->Cell($this->col_size['amount.amort'], 8, _('A amortir'), 0, 0, 'R');
$this->Cell($this->col_size['amount.delta'], 8, _('A amortir'), 0, 0, 'R');
$this->Ln();
}
function export()
{
global $cn;
$this->SetFont('DejaVu', '', 7);
$ret=$cn->get_array("select * from amortissement.v_amortissement_summary where a_visible='Y' order by a_start,a_date");
bcscale(2);
for ($i=0;$i<count($ret);$i++)
{
if ($i%2==0)
{
$this->SetFillColor(220, 221, 255);
$fill=1;
}
else
{
$this->SetFillColor(0, 0, 0);
$fill=0;
}
$this->Cell($this->col_size['qcode'], 8, $ret[$i]['quick_code'], 0, 0, 'L', $fill);
$this->Cell($this->col_size['name'], 8, $ret[$i]['vw_name'], 0, 0, 'L', $fill);
$this->Cell($this->col_size['date.purch'], 8, format_date($ret[$i]['a_date']), 0, 0, 'L', $fill);
$this->Cell($this->col_size['year.purch'], 8, $ret[$i]['a_start'], 0, 0, 'C', $fill);
$this->Cell($this->col_size['#amort'], 8, round($ret[$i]['a_nb_year']), 0, 0, 'R', $fill);
$this->Cell($this->col_size['amount.purch'], 8, nb($ret[$i]['a_amount']), 0, 0, 'R', $fill);
$this->Cell($this->col_size['amount.amort'], 8, nb($ret[$i]['amort_done']), 0, 0, 'R', $fill);
$delta=bcsub($ret[$i]['a_amount'],$ret[$i]['amort_done']);
$this->Cell($this->col_size['amount.delta'], 8, nb($delta), 0, 0, 'R', $fill);
$this->Ln();
}
$this->Output('listing-amort.pdf', 'I');
}
}
Il est conseillé de travailler avec des vues plutôt qu’avec des requêtes SQL directes, plus facile de réutiliser une vue que de dupliquer à plusieurs endroits une requête SQL, surtout pour la maintenance si vous décidez de changer la requête ou la structure de la base de données, avec une vue, vous retrouverez plus vite les endroits à modifier.
Il y a des tutoriaux dans noalyss/doc/fpdf et tfpdf, vous pouvez les lire en ligne sur le site de fpdf
= Annexe
Nul besoin d’être informaticien pour nous aider, il y a beaucoup de façons de contribuer
=== Faites nous connaitre
Afin d’avoir une communauté importante, condition pour que le projet survive, il est très important de promouvoir NOALYSS, n’hésitez pas à le faire connaître.
Pour vous aider, vous pouvez distribuer ce flier https://gitlab.com/noalyss/noalyss-documentation/-/blob/main/document/Flier-1.pdf?ref_type=heads
=== Voter
Pensez à voter pour ce projet sur https://gitlab.com/noalyss
=== Les news
N’hésitez pas à parler de ce projet, soit dans votre journal soit en recopiant les annonces sur les sites de nouvelles
=== La documentation
La documentation est toujours la bienvenue, ce manuel et le wiki servent à cela, n’hésitez pas à ajouter ou corriger. Des liens intéressants sont toujours les bienvenus
https://forum.noalyss.eu Forum
https://manuel-fr.noalyss.eu manuel
https://gitlab.com/noalyss/noalyss-documentation source de ce manuel
|
Astuce
|
Il y a aussi des tuto sur Youtube, et une chaîne https://www.youtube.com/@noalyss11 |
=== Les forums, les Mailing Listes ou liste de discussion
Aidez les autres, faites des suggestions pour améliorer NOALYSS, Relevez des bogues sont aussi des contributions très appréciées.
N’hésitez pas à vous inscrire sur les Listes de discussions afin de participer ou de se mettre au courant des discussions, c’est l’endroit où on peut poser des questions, suggérer des changements, avertir de bugs…
Elles se trouvent sur http://savannah.nongnu.org/mail/?group=noalysssavannah
-
Discussion générale concerne les bugs, les idées, les demandes d’aide, les annonces …. Avant de poster votre premier email en écrivant à noalyss-generale@nongnu.org , une courte présentation est la bienvenue.
-
Message des commits contient tous les messages des commits, les changements de code, s’adresse uniquement aux développeurs mais vous permet aussi de suivre le développement.
|
Important
|
il faut être inscrit sur la liste de diffusion pour pouvoir y envoyer des messages, si on s’inscrit, le mieux est d’envoyer un message pour se présenter, 2 lignes suffisent. Pour s’abonner, suivez le lien et donner votre adresse email ainsi que votre surnom (ou nom) |
=== Développer
Développer des plugins ou des nouvelles fonctionnalités est facile, nous vous aiderons si vous en avez besoin. Mantis contient les tâches prévues ainsi que les bugs. Si vous souhaitez ajouter ou modifier quelque chose, le mieux est d’en parler avant.
=== Donation
Il est aussi possible de faire des donations pour soutenir notre travail (https://www.noalyss.eu/?page_id=532)
=== Autres
-
Traduction dans une autre langue
-
Créer des packages pour les différentes distribution Linux (Ubuntu, Debian, Mageia,…)
== Liste des Accès Directs
| Code d’Accès- AD | Usage |
|---|---|
ACCESS |
Accueil |
ACH |
Nouvel achat ou dépense |
ACHISTO |
Historique achat |
ADM |
Suivi administration, banque |
ADV |
Menu avancé |
ANC |
Module comptabilité analytique |
ANCBC2 |
Balance double croisées des imputations analytiques |
ANCBCC |
Lien entre comptabilité et Comptabilité analytique |
ANCBS |
Balance simple des imputations analytiques |
ANCGL |
Grand livre d’plan analytique |
ANCGR |
Balance par groupe |
ANCGROUP |
Groupe analytique |
ANCHOP |
Historique des imputations analytiques |
ANCIMP |
Impression compta. analytique |
ANCKEY |
Clef Analytique |
ANCODS |
OD analytique |
ANCTAB |
Tableau lié à la comptabilité |
C0ACT |
Personnalisation des actions dans le suivi |
Attributs de fiche |
|
Configuration des devises |
|
Config. modèle de document |
|
C0ETS |
Permet d’ajouter des état pour les documents utilisés dans le suivi (à faire, à suivre…) |
Configuration des journaux |
|
Configuration des menus par défaut |
|
C0OPT1 |
configure les options pour les fiches dans le suivi |
Config. des méthodes de paiement |
|
C0PCMN |
Configuration du plan comptable |
Gestion des extensions (plugins). |
|
Configuration profil des utilisateurs |
|
C0PST |
Config. poste comptable de base |
configuration de la sécurité |
|
C0TAG |
Configuration des étiquettes(tags) ou dossiers, on l’appele tag ou dossier suivant la façon dont vous utilisez cette fonctionnalité. Vous pouvez en ajouter, en supprimer ou les modifier |
Configuration de la tva, à adapter suivant vos déclarations TVA |
|
Etat des actions |
|
Configuration des menus et des extensions |
|
Fiche |
|
CARDBAL |
Balance par catégorie de fiche |
Catégorie de fiches, configuration, ajout |
|
Gestion des modèles de fiches |
|
Paramètre societe |
|
COMPTA |
Module comptabilité |
CUST |
Suivi client |
DASHBOARD |
Tableau de bord |
DIVPARM |
Paramètres divers |
EXT |
Extensions (plugins) |
FIHISTO |
Historique financier |
FIN |
Nouvel extrait bancaire |
Suivi, courrier, devis |
|
FORECAST |
Prévision |
Rapprochement bancaire |
|
FSALDO |
Solde des comptes en banques, caisse… |
GESTION |
Module gestion |
HIST |
Historique |
JSSEARCH |
Recherche |
Lettrage |
|
lettrage par poste comptable |
|
Lettrage par fiche |
|
LOGOUT |
Sortie |
MENUACH |
Menu achat |
MENUFIN |
Menu Financier |
MENUODS |
Menu opérations diverses |
MOD |
Menu |
Apparence et couleurs |
|
ODHISTO |
Historique opérations diverses |
ODS |
Nouvelle opérations diverses |
Ecriture d’ouverture et de clôture |
|
Taxe supplémentaire |
|
Impression des balances comptables |
|
Impression de bilan |
|
P0BLG |
Impression Balance âgée |
Impression des devises |
|
Impression du grand livre |
|
Impression historique |
|
P0PST |
Impression du détail d’un poste comptable |
Impression des rapprochements |
|
Impression de rapport |
|
Impression des résumés TVA |
|
Impression détail TVA |
|
PARAM |
Module paramètre |
Gestion des périodes |
|
PLANANC |
Plan analytique |
PREDOP |
Gestion des opérations prédéfinies |
PREFERENCE |
|
Menu impression |
|
REPORT |
Création de rapport |
SEARCH |
Recherche |
STOCK |
Stock |
Inventaire des stocks |
|
SUPPL |
Suivi fournisseur |
VEHISTO |
Historique des ventes |
VEN |
Nouvelle vente ou recette |
VENMENU |
Menu ventes et recettes |
Vérification de la comptabilité |
== Backup et restaure
=== Procédure de sauvegarde en ligne de commande
Faire un backup de toutes vos bases de données , dans un terminal tapez
sudo -i -u postgres pg_dumpall > noalyss_backup.dmp
Le fichier noalyss_backup.dmp est créé et doit être copié et conservé (sur un disque dur externe , une clef USB …) Dans les distributions Ubuntu ou dérivées, il se trouve dans /var/lib/postgresql/ ; qui est le répertoire "HOME" de postgresql
|
Important
|
Sauvez aussi le fichier noalyss/include/link:/config.inc.php |
=== Procédure de sauvegarde d’un dossier
-
Se connecter comme administrateur sur NOALYSS
-
Allez dans Administration → Dossier
-
Cliquer sur "Backup" en regard du dossier que vous voulez sauvegarder
-
Sauvegarder le fichier .bin en lieu sûr
==== Procédure de restauration
Restaurez votre backup ,
sudo -i -u postgres psql < noalyss_backup.dmp
Les données , les utilisateurs et les mots de passe seront comme à l’origine .
=== Procédure de restauration d’un dossier
-
Se connecter en tant qu’Administrateur
-
Aller dans Administration→Restaure
-
Donner un nom au dossier, sinon le nom du fichier .bin restauré sera utilisé
-
Cliquer sur la coche Dossier, si vous voulez utiliser les données de votre sauvegarde
-
ou cliquer sur Modèle, si seul la structure du dossier, sans les opérations, vous intéresse
-
Par le bouton "Parcourir", sélectionner votre sauvegarde .bin
-
Lancer la restauration.
note : si vous obtenez le message d’erreur suivant : "Problème lors de la restauration xx(un numéro d’ordre) Restauration :dossier yy"
-
Vérifier les log d’Apache, la taille de votre dossier n’est peut-être pas adaptée à votre configuration d’Apache.
-
Si c’est le cas, il faudra éditer php.ini
-
et augmenter les valeurs post_max_size et upload_max_filesize,
-
sauver la nouvelle configuration
-
redémarrer le serveur.
Pour plus d’informations http://www.commentcamarche.net/forum/affich-15360322-php-ini-modifier-taille-de-fichier-upload
-
Se connecter comme administrateur sur NOALYSS
-
Allez dans Administration → Dossier
-
Créez un nouveau dossier basé sur le modèle vide:
-
Aller dans Administration→Dossier→Ajout Dossier
-
En cliquant sur le combo modèle choisissez Aucun modèle (dossier vide devant être restauré manuellement).:IMPORTANT: ce dossier sera celui dans lequel on restaurera.
-
Avec pgadmin3 , restaurer le backup dans ce dossier comme dans l’étape 4 , le nom de dossier est dossierXX XX est le nombre dans la colonne de gauche
=== Problème de restauration par l’interface
Il peut arriver que vous obteniez un message d’erreur du type "Problème lors de la restauration XX Restauration :MONDOSSIER_YY" lors de la restauration par l’interface, il est conseillé de le restaurer manuellement
Si vous voulez le faire par l’interface , pour corriger : cela est vraisemblablement dû à des valeurs post_max_size (8M par défaut) et upload_max_filesize (2M par défaut) trop petites dans le fichier php.ini. Il faut les modifier en éditant le fichier en tant qu’administrateur.
Sous Ubuntu ou Linux Mint, on le trouve dans /etc/php/NumeroVersionPHP/apache2/
Il faut ensuite redémarrer le serveur :
sudo /etc/init.d/apache2 restart
ou
sudo service apache2 restart
ou encore
sudo systemctl restart apache2.service
avec systemd
== Export PDF
Pour l’export ancgl des pièces transformées en PDF et la Facturation
=== 1. ImageMagick
ImageMagick est installé , il faut faire attention d’avoir dans le fichier /etc/ImageMagick-6/policy.xml (à partir ubuntu 16.04)
Installation d’imageMagick
apt install imagemagick
<policy domain="coder" rights="read|write" pattern="EPHEMERAL" /> <policy domain="coder" rights="read|write" pattern="URL" /> <policy domain="coder" rights="read|write" pattern="HTTPS" /> <policy domain="coder" rights="read|write" pattern="MVG" /> <policy domain="coder" rights="read|write" pattern="MSL" /> <policy domain="coder" rights="read|write" pattern="TEXT" /> <policy domain="coder" rights="read|write" pattern="SHOW" /> <policy domain="coder" rights="read|write" pattern="WIN" /> <policy domain="coder" rights="read|write" pattern="PLT" /> <policy domain="path" rights="read|write" pattern="@*" /> <policy domain="coder" rights="read|write" pattern="PS" /> <policy domain="coder" rights="read|write" pattern="EPS" /> <policy domain="coder" rights="read|write" pattern="PDF" /> <policy domain="coder" rights="read|write" pattern="XPS" />
=== 2. PdfTK
(Ubuntu 18.04) Si vous utilisez pdftk , il faudra corriger la configuration, le snap empêche son exécution, Pour vérifier
type pdftk pdftk est haché (/snap/bin/pdftk)
L’erreur est
Sorry, home directories outside of /home are not currently supported. See https://forum.snapcraft.io/t/11209 for details.
Solutions :
-
vous le recompilez, (source https://www.pdflabs.com/docs/install-pdftk-on-redhat-or-centos/)
-
ou vous utilisez une autre distro plus permissive
-
ou vous activez apparmor et www-data (propriétaire du service http) doit avoir son propre "home", qui sera utilisé , dans ce cas, il faudra travailler dans /home/www-data/tmp et changer la variable $_ENV['TMP']
==== Compilation de pdftk
Ubuntu 18.04
sudo apt install default-jdk-headless ant libcommons-lang3-java libbcprov-java
git clone https://gitlab.com/pdftk-java/pdftk.git
cd pdftk
mkdir lib
ln -st lib /usr/share/java/{commons-lang3,bcprov}.jar
ant jar
cp build/jar/pdftk.jar /usr/local/bin
cat <<EOF > /usr/local/bin/pdftk
#!/bin/bash
# Start PDFTK
/usr/bin/java -cp /usr/share/java/commons-lang3.jar:/usr/share/java/bcprov.jar:/usr/local/lib/pdftk.jar com.gitlab.pdftk_java.pdftk $@
EOF
chmod a+x /usr/local/bin/pdftk
Et config.inc.php
$pdftk="/usr/local/bin/pdftk";
=== 3. Apache
Avec Systemd, apache utilise un répertoire temporaire privé et donc l’appel pour convertir les fichiers en PDF et les estampiller ne fonctionne plus.
Pour changer cela , il faut avoir dans /etc/systemd/system/multi-user.target.wants/apache2.service
PrivateTmp=false
=== 4. Conversion de document
On utilise libreOffice pour convertir des documents en PDF avec Unoconv (libreOffice)
Dans le fichier config.inc.php, on doit avoir
define ('GENERATE_PDF','YES');
define ('OFFICE','unoconv ');
Plus d’information https://docs.moodle.org/38/en/Universal_Office_Converter_(unoconv)
== Les notes de version
=== Note de version 9.3 Août 2024
Personnalisation du tableau de bord, les éléments affichables (appelés widget ) peuvent être facilement développés et sont modulables
TVA : ajout d’un code TVA alphanumérique , afin de permettre une saisie plus rapide des codes TVA
Menu Détail TVA : pour avoir le détail des opérations utilisées avec un code TVA,
Annonce : possibilité d’ajouter une annonce en créant une page nommée ads.html dans le répertoire noalyss/html
Vérification des numéros de TVA
Changement de certains code pour les "Accès Direct"
Amélioration pour la personnalisation des attributs des fiches
Amélioration pour l’activation des extensions (plugins) dans C0EXT
=== Note de version 9.2 27 février 2024
Amélioration du suivi c’est-à-dire tout les événements d’une société , suivi client, administration, document interne…
Corrections de bugs cosmétiques, apparence
Adaptation pour PHP8.1, PHP8.2 , PHP8.3
Renforcement des mots de passe
==== Suivi
Amélioration présentation,
Plusieurs fichiers peuvent être sélectionnés en une fois.
Les fichiers sont affichés avec le commentaire qui a été ajouté à ce moment
L’action peut être imprimée depuis le menu de l’explorateur internet
Depuis le détail suivi, on peut consulter le suivi.
Possibilité de sauver les recherches dans le suivi , ce qui permet de retrouver rapidement ce dont on a souvent besoin.
==== Comptabilité
Réécriture du menu de l’ouverture des comptes , AD: OPCL
Ajout de la clôture des comptes en fin d’année, (France)
Dans la balance, il y a un avertissement si le solde ne correspond pas au type de poste comptable, exemple : un actif avec un solde créditeur.
Dans opérations diverses, amélioration pour indiquer le débit / crédit
Choix du type de comptabilité : ouverture des comptes chaque année ou non, avec adaptation des impressions de bilan et balance. (AD : COMPANY)

Corrections de bugs cosmétiques, apparence. Recherche grâce au code TVA , on peut aussi le sauver dans un filtre pour retrouver facilement toutes les opérations utilisant ce code-là.
==== Configuration
===== Paramètre
Les numéros de pièces peuvent être : suggérer, automatique ou manuel.
Manuel : l’utilisateur doit lui-même décider du numéro de pièce
Automatique : la pièce est automatiquement numérotée, seul les utilisateurs qui en ont le droit peuvent la changer
Suggérer : la pièce est proposée et tous les utilisateurs peuvent la changer.

===== Sécurité
Afin d’améliorer la sécurité , il est maintenant possible de bloquer le numéro de pièces et d’empêcher le changement depuis COMPANY ou depuis la sécurité des utilisateurs dans les actions C0SEC ,

==== Renforcement des mots de passe.
Le mot de passe doit obligatoirement :
-
avoir au moins 8 caractères
-
inclure au moins 1 chiffre
-
inclure au moins 1 majuscule
-
inclure au moins 1 caractères qui ne soit ni une lettre ni un chiffre (virgule, point-virgule, souligné, plus,…)
==== Développement
===== NOALYSS
https://gitlab.com/noalyss , la branche stable peut être utilisée directement. Unstable , par contre est destiné au développement et à l’intégration des patch
===== Manuel
Utilisation d’asciidoc comme format
===== NOALYSS Extension
Pour les extensions standards, le dépôt git fonctionne aussi avec deux branches : stable pour ce qui peut être utilisé et unstable qui est destiné au développement.
==== Extension
===== Rapports avancés
Possibilité de télécharger des rapports à générer , il suffit simplement de cliquer sur Nouveau rapport , choisir l’onglet Téléchargement et sélectionner les rapports que l’on souhaite installer

===== Facturation
Vous pouvez directement transformer la facture en PDF et la télécharger

===== Amortissement
Calcul du prorata en jour (ou mois), même pour des exercices différents d’un an.
Lors de l’ajout de matériel, il est proposé de calculer le nombre de jours.

=== Note de version 9.1 26 février 2023 .1. Taxe additionnelle Possibilité d’ajouter une taxe additionnelle OTAX. Cette taxe est un peu spéciale , elle doit être calculée en plus de la TVA sur le montant hors taxe des articles, comme en Polynésie. Pour ajouter cette taxe, il faut la configurer et décider quels journaux peuvent l’exister.
Les commentaires et la description dans le suivi utilise peuvent être formatés (gras, souligné,…), ce qui améliore la présentation de vos commentaires et description dans le suivi
Dans l’historique , on peut voir quelles sont les opérations qui ont une imputation analytique.
L’exercice comptable est un texte libre, ce qui est pratique si on a des exercices à cheval sur deux années, on peut les appeler par exemple 2206-2306 , si elle commence au 1 juin 22 jusqu’au 31 mai 2023 lieu de seulement 2023.
Pour la saisie des dates, on peut utiliser les points , tirets, barres pour séparer les jours , les mois et les années, et l’année peut être donnée sur 2 décimales, cela sera corrigé automatiquement dans le champs de saisie en quittant ce champs.
Ajout des couleurs pour distinguer les différents dossiers (apparence).
Nouvelle icône outils pour chercher une fiche ou en créer une nouvelle.
Possibilité d’agrandir la zone de description et d’ajouter une note lors de saisie d’opérations comptables.
Possibilité de personnaliser le code TVA.
Journaux peuvent être configurés pour utiliser ou non les quantités lors de saisie comptable (journaux d’achat et de vente).
Transformation d’un événement en facture ou note de frais, à configurer dans C0ACT.
-
Correction incompatibilité PHP 8.1 & PHP 8.2.
-
Export en PDF d’ANCBCC (Balance croisée comptabilité et comptabilité analytique).
-
Nombre maximum de journaux 1295 pour chaque catégorie (achat , vente, opérations diverses, journal financier)
-
Mode maintenance en créant un fichier nommé dans le répertoire de « block.html » qui avertira les utilisateurs qu’ils ne peuvent pas utiliser leur dossier pour le moment, et les empêchera de se connecter.
=== Note de version 9.0 30 août 2021
-
Ajout des devises étrangères
-
Ajout des extensions spécifiques aux smartphones
-
Importante réécriture du code
-
Amélioration des tests avec PHPUNIT
-
Commentaires et texte dans le suivi avec formatage de texte
-
Possibilité d’agrandir le libellé d’une opération comptable :
-
Le résumé de l’opération pour vente et achat a été déplacé à droite
-
Les journaux peuvent être configurés pour que les opérations n’aient pas de colonne pour la quantité *Possibilité d’ajouter une note , depuis la saisie d’une opération, pour les opérations de vente , d’achat ou d’opérations diverses *Modernisation du menu contact, en cliquant sur l’e-mail , il sera proposéd’envoyer un e-mail ,pour le téléphone et le mobile, il sera proposé de choisir l’application pour passer un appel. Dans la colonne e-mail, on peut avoir plusieurs e-mails séparés par une virgule
-
Les commentaires , ainsi que les descriptions supportent maintenant la mise en forme du texte
-
Depuis l’extension TOOLS [4] , il est possible de mettre une étiquette sur plusieurs opérations en une seule fois
=== Note de version 8.1 février 2021
- Menu
-
Ouverture par défaut d’un menu choisi
- Sécurité
-
Sécurité renforcé, en utilisant une clef de session
- C0ACT
-
Ajout des liens de vidéo-conférence
=== Note de version 8.0 novembre 2020
-
Possibilité d’interdire la création d’étiquettes dans C0SEC.
-
Possibilité de regrouper les étiquettes.
-
Ajout de couleur sur les étiquettes.
-
Recherche sur les étiquettes pour les opérations et les actions .Action
-
Suivi et amélioration de la recherche.
-
Suivi à la création d’une action, on peut lui attribuer des contacts et des étiquettes.
-
Actions modulables : on peut personnaliser les actions (C0ACT) en ajoutant ou en retirant des éléments.
-
Suivi action, les ‘’autres fiches’’ peuvent avoir des options, les exporter au format CSV.
-
Possiblité d’ajouter des options aux fiches concernées (C0OPT1).
-
Possiblité d’ajouter des éléments de type date, texte, numéro et choix.
-
Possiblité de choisir les options de fiches par type de documents (C0ACT)
-
Choix des attributs pour la recherche dans CFGATCARD .Recherche de fiches
-
Possiblité de rendre une fiche active ou inactive selon son utilité.
-
Si le nombre de fiches dépasse le maximum affichable, on peut passer à la page suivante. .Opérations définies
-
Réécriture des opérations prédéfinies : présentation plus moderne, on peut modifier et en rajouter. .Sélection par plage
-
Possibilité de sélectionner plusieurs éléments en 2clics pour les cases à cocher. .Impression
-
Changement et extensions des balises
=== Note de version 7.1 septembre 2019
Création d’un module qui permet d’avoir rapidement le résumé de des codes TVA , par journal et par type de journal. Ce module permet d’avoir en un coup d’œil les totaux pour la TVA tels qu’ils devraient être dans la déclaration TVA. Si cela ne correspond pas, c’est qu’il existe des opérations enregistrées dans les opérations diverses , par exemple : les amendes TVA sont en général saisies comme une opération diverse. Ce module peut facilement être retrouvé dans l’accès direct avec son code P0TVA ou par le navigateur.
L’accent a été mis sur la comptabilité.
Effacer les détails* * Il existe un bouton pour effacer en une fois la répartition de la comptabilité analytique.
Les opérations avec une opération ont un petit symbole dans l’historique.
On peut changer les postes qui peuvent utiliser la comptabilité analytique, normalement il s’agit que des classes 6 (Charges) et 7 (Produits).
Pour aider à l’encodage des notes de crédit (Vente et Achat : COMPTA/VENMENU/VEN et COMPTA/MENUACH/ACH. Il y a un paramètre dans le paramétrage du journal ( PARAM/C0JRN) afin d’indiquer que les écritures à enregistrer sont toujours négatives dans ce journal (exemple notes de crédit). C’est seulement un avertissement et cela ne bloque pas l’encodage. Dans C0JRN.
Dans les CSV et PDF , les moyens de paiement sont indiqués , exemple ici avec la fiche BQ (Banque).
=== Note de version 7.0 mars 2018
-
La version 6.0 est sortie il y a déjà 6 ans, en janvier 2012, depuis lors énormément de choses ont changées , l’interface, les thèmes, les fonctionnalités …. Aujourd’hui , nous publions la version 7 de Noalyss , celle-ci est une version majeure , interface plus moderne, responsive, *
=== Note de version 6.9.1 janvier 2016
La structure des fichiers a changé pour pouvoir plus facilement développer et concentrer les personnalisations dans Noalyss/include/config.inc.php
-
Montants sur 4 décimales pour les achats et les ventes, les différents montants calculés (TVA, Non déductible…) sont arrondis sur 2 décimales.
-
Ajout des menus administration , mise à jour et informations systèmes
*La liste complète peut être obtenue sur le site http://bug.noalyss.eu/http://bug.noalyss.eu]
=== Note de version 6.9 novembre 2015
-
Balance âgées
-
Pense-bête partageable
-
Email de l’utilisateur
-
Sécurité nouveaux droits
-
Ajout d’événement depuis le tableau de bord
-
Ajout des derniers événements sur le tableau de bord
-
Amélioration sérieuse des thèmes
-
Zoom du pense-bête
-
Zoom du calendrier
-
Possibilité de voir votre calendrier en mode liste
-
Extourne possible à la confirmation de l’encodage d’une opération
-
Partie administration de l’application
-
P0BAL ajout du solde quand les niveaux sont utilisés
-
ergonomie apparition d’un bouton « retour haut de page »
-
Le code des fiches peut contenir des points, double-point, souligné ou trait d’union
=== Note de version 6.7.2 janvier 2014
-
Passage à CSS3 & HTML5, compatibilité avec IE 9
-
Correction impression journaux, export en CSV et PDF
-
Recherche dans la gestion sur base d’un profil
=== Note de version 6.7 novembre 2013
Dernière version de PhpCompta
-
Possibilité d’ajouter des tags aux actions. Pour mieux classer les documents et le suivi
-
Navigateur pour retrouver plus facilement le menu à utiliser
-
Favoris pour conserver les menus les plus utilisés
-
Date de paiement ajoutée aux opérations d’achat ou de vente, pour se conformer à la nouvelle méthode de calcul de la TVA
=== Note de version 6.6 juin 2013
-
Fonctionne en mode hébergé avec une seule base de données
-
Minimum de lignes à afficher par journal
-
Correction des opérations prédéfinies
-
Mise en évidence des opérations lettrées.
-
Filtrage simple de certains tableau (balance, dossier…)
-
Nouveau logo
-
Nom des documents générés contient le numéro de pièce justificative.
-
Ajout d’une description pour les catégories de fiches
-
Ajout du quickcode dans le plan comptable
-
Amélioration des longues lignes dans les PDF
-
Meilleure navigation avec la touche tabulation quand on encode des opérations
-
Avertissement plus visible en cas où la TVA calculée et celle donnée sont différentes.
-
Affichage des opérations en retard de paiement ou les actions en retard dans le tableau de bord
=== Note de version 6.5 (Juillet 2012)
-
Gestion du multidépôt,, l’historique des mouvements de dépôts, inventaires
-
Ajout Etat Document,
-
Nouveaux style d’attribut : Fiche ou sélection, permet de faire correspondre des fiches entres elles, exemple : stock et marchandises, contact et sociétés
-
Génération de document : nouveau champs disponibles sont
-
ACOMPTE : acompte déduit lorsqu’on utilise le mode de paiement lors d’un achat et d’une vente.
-
ATTRx Donne la valeur de l’attribut x de la marchandise ou du service vendu ou acheté
-
BENEFATTRx Donne la valeur de l’attribut x du mode de paiement
-
CUSTATTRx Donne la valeur de l’attribut x du client ou du fournisseur
-
Action – Gestion : possibilité de lier plusieurs autres actions et des opérations comptables, possibilité d’ajouter des commentaires, amélioration de la recherche et sécurité
-
Numéro de pièce pour les actions gestions
-
encodage des opérations financières par date d’extrait ou d’opérations
-
Export PDF : retour à la ligne si les commentaires sont trop longs
Notes :
Réécriture
complète du menu Fiche, c’était du vieux code illisible. Ce module a été
divisé en 2, l’un pour ajouter, déplacer, modifier des fiches, voir leur
liste, résumé, historique… L’autre pour configurer les catégories de
fiches.
Dans
le tableau d’accueil, on voit l’action dont la date de rappel est la
date du jour et qui appartient à l’un des profils auxquels vous avez
accès ; le tableau d’accueil montre aussi les dernières opérations,
elles sont filtrées par l’accès de l’utilisateur aux journaux.
=== Note de version 6.0 (Décembre 2011)
-
Menu complètement configurable, de ce fait, les plugins peuvent apparaître dans n’importe quel menu, sous-menu…
-
Sécurité renforcée, basée sur le profil qui est l’ensemble des menus accessibles à l’utilisateur
-
Export du Grand Livre Analytique en CSV
-
Les différents configuration de menus sont rassemblé dans des profils, le nombre de profils par dossier est illimité, ils sont configurés dans C0PROFL.
-
Accès direct vous permet d’aller directement à l’endroit que vous souhaitez en donnant le code du menu, pendant la frappe, les menus possibles apparaissent (auto-complete).
-
Compte alphanumérique, NOALYSS peut utiliser des postes comptables alphanumériques, si le poste comptable est calculé automatiquement alors par défaut NOALYSS créera un poste comptable en ajoutant le nom de la fiche à la classe de base.
-
Compte de TVA qui augmente au débit et au crédit, pour certains cas particuliers.
-
Nouveau thème dont la police est plus grande
-
Dans catégorie fiche, il est possible d’avoir les balances ou l’historique de toutes les fiches
-
Possibilité d’éditer les détails dans les journaux achats et ventes, à changer dans COMPANY
-
Comptabilité analytique : lors de l’imputation, la valeur qui reste à affecter est directement calculé.
-
A l’enregistrement de l’opération, il est présenté un résumé de l’opération qui vient d’être enregistrée.
-
Les réconciliations se font dans une fenêtre interne (avant c’était un popup)
-
Comptabilité analytique : recherche de fiche dans une fenêtre interne
-
Tri apparaissent dans certains menu (sécurité → utilisateurs (SECUSER), administration → utilisateur, …)
-
réconciliation n’utilise plus une fenêtre extérieure (popup)
-
Possibilité de changer le type d’un document dans le suivi
-
Résumé de l’opération enregistrée au lieu d’un simple lien vers le détail de l’opération
-
En cas de rapprochement, même avec plusieurs opérations, il y aura un lettrage automatique.
-
Amélioration des lettrages multiples (1 à n)
-
Mode de paiement se font dorénavant par journaux et non plus par type de journaux
=== Note de version 5.6 (mai 2011)
Nouveautés
-
Comptabilité analytique : groupe
-
Amélioration ergonomie comptabilité analytique
-
Compta analytique → financier
-
Le grand livre analytique
-
Liaison compta analytique → compta générale
-
Balance : uniquement les comptes non soldés pour les fiches et les postes comptables
-
Voir le tiers dans les historiques
Bugs corrigés
-
Problème de date en comptabilité analytique : synchro
-
CA : bug dans la balance double
-
CA Opération diverses
-
Problème export CSV historique sans le signe moins pour financier
-
Impossibilité de réinitialiser le mot de passe
=== Note de version 5.5 (1 mars 2011)
-
Date dans les détails
-
Balance avec des niveaux
-
Lettrage dans le grand livre
Bugs :
-
Export CSV de l’historique pour les financiers
-
Génération de facture
-
Moyen de paiement incorrect
-
On ne voyait que les Xiers dossiers dans l’administration
=== Note de version 5.4 (février 2011)
-
Adaptation pour les dossiers contenant plusieurs années
-
Contrepartie pour les dépenses non admises et les dépenses du gérants configurable par fiche
-
2 nouvelles sortes d’attribut : les postes et les cards, le premier pour les postes comptables et le second pour les fiches
-
Export CSV de tout historique : depuis la recherche, la liste des opérations de tous les journaux.
-
Modification d’une fiche dans un popup html
-
Depuis le détail d’une fiche, on peut en avoir la balance
-
La partie gestion, pour les clients, les fournisseurs et les administrations, il y a en plus, les balances
-
Prévisions peuvent être faites à cheval sur plusieurs années
Amélioration
Amélioration pour les dossiers contenant plusieurs années : balance, bilan, rapport et historique peuvent changer d’année, les détails des opérations permettent de changer d’exercice,…
=== Note de version 5.3 (décembre 2010)
-
Possibilité de réouvrir des périodes fermées
-
Changement de la date de l’opération dans le détail opérations
-
Ajout de commentaire possible dans le détail des opérations
-
Ajout d’une limite de dates dans les prévisions
-
Ajout de couleur dans les prévisions
-
Ajout de l’export de l’historique d’un compte ou d’une fiche, en csv ou en pdf depuis une fenêtre « pop me up »
-
Déplacement du menu période dans le menu Paramètre
-
Audit des personnes se connectant ou essayant de se connecter
-
Ajout d’un captcha (optionnel)
Améliorations
-
Traitement des fiches plus rapide
-
Apparence des montants
-
Apparence des fiches, détail et historique
-
Support Postgresql 9
=== Note de version 5.2 (août 2010)
-
modifier vos journaux de banque pour utiliser une fiche de banque
-
Les notes de frais doivent utiliser les tags commençant par BENEF_*
-
Ajout balance par catégorie de fiche
-
Quand on demande le détail d’une opération, on peut l’imprimer et voir tous les détails de cette opération si on clique sur popme up. Les détails pour les opérations analytiques ne sont visible que dans le popup.
-
En cliquant sur un numéro interne, on a le détail de l’opération mais à l’intérieur de la page et non plus dans un popup
-
Dans les détails d’opérations, on a aussi des liens vers les historiques par fiche ou par poste comptable, si on clique sur une fiche ou sur un poste comptable
-
Depuis les impressions → balances et impression → poste, on a les détails des opérations ainsi que dans impression → poste
-
Pour les balances, on peut choisir les journaux : adapté à ceux en ayant vraiment beaucoup
-
Depuis les lettrages, on peut aussi accéder aux détails d’une opération
-
Le menu Grand Livre devient le menu Historique
-
Il est possible d’ajouter des détails aux catégories de fiche ainsi que leur type c’est-à-dire soit du texte soit des nombres soit une date, soit une zone. La longueur peut-être définie mais limitée à 22 caractères, sauf les dates et les zones dont les tailles sont fixes
-
Impression - Rapprochement
-
confirmation quand effacement d’un Plan Analytique (comptabilité analytique → Plan Analytique)
-
Déplacement de fiche : les attributs manquant sont ajoutés !
-
Dans les balances, on peut choisir plusieurs journaux ou plusieurs cat. de journal. Les données sont filtrées en plus d’après la sécurité
-
Dans impression → poste, on peut filtrer les opérations suivant qu’elles sont lettrées ou non.
-
Après avoir sauvé une opération, vous pouvez avoir le détail de l’opération en cliquant sur le numéro interne qui s’affiche
-
Les journaux FIN doivent être attachés à un compte en banque et uniquement un A propos du mode de paiement : on ne change rien mais il faut que dans la doc, il est précisé qu’il faut paramétrer le moyen de paiement comme le journal FIN
-
Ajout bouton "ajoutez ligne" pour les OD en CA
-
Ajout bouton "ajoutez ligne" pour les prévisions
-
Ajout l’impression pour les lettrages par poste comptables
-
Les historiques des fiches et postes comptables (impression → poste et impression et catégorie → historique) ont un solde progressif
-
La recherche peut se faire dans plusieurs journaux à la fois
-
Les balances peuvent être faites pour plusieurs journaux ou par catégorie de journal
-
Amélioration de la vérification de la comptabilité (Avancé → Vérification)
-
La date par défaut quand on encode une nouvelle écriture, est la date de la dernière écriture du journal choisi.
-
Pour les opérations de banque, on peut choisir de numéroter chaque opération, ou de donner à chacune le même numéro d’extrait (relevé bancaire)
-
Rapprochement bancaire : dans le cas où on encode directement la méthode de paiement, on peut retrouver les opérations concernées et leur donner comme numéro de pièce le numéro d’extrait de compte (= numéro du relevé bancaire, numéro du relevé visa,numéro du relevé de la caisse)
=== Note de version 5.1 (mai 2010)
-
Plan comptable est maintenant alphanumérique, la numérotation automatique ne fonctionne pas si le poste comptable contient autre chose que des chiffres.
-
Cependant il n’est pas encore permis d’y mettre aucune chose que des chiffres Document : dans la liste des documents, on a dorénavant ceux qui en dépendent indirectement Exemple
-
Document A en relation avec Document B
-
Document C en relation avec Document B
-
Avant dans les documents liés, on ne voyait que le document B dans la liste des documents liés de A
-
Avec la nouvelle version, on voit dans la liste du document A, le document B &C
-
3.Lettrage
-
La réconciliation ou rapprochement fait correspondre une ou plusieurs opérations comptables
-
Le lettrage lui, agit à un niveau plus bas en faisant correspondre, une ligne d’opération comptable à une autre mais uniquement entre poste comptable identique.
-
Typiquement, il s’agit d’un débit qui correspond à un crédit
4 TVA : Se choisit maintenant dans un popup au lieu d’une liste select
5 Impression :
-
nouveau menu Catégorie, vous permet de visualiser par catégorie de fiche avec l’historique des opérations ou simplement le résumé.
-
nouveau (contribution) une nouvelle possibilité est d’imprimer le grand livre * nouveau : support complet de l’Unicode pour les impressions
-
Les impressions de journaux d’achat et de vente sont classés par numéro de pièces justificatives, sans tenir compte du préfixe. Dès lors la centralisation est considérée comme obsolète et sera supprimée.
6 Écriture directe (re) devient Opérations Diverses
7 Ajout du lettrage dans la plupart des impressions
8 Extension : vérification du chemin
9 Dans paramètre→journaux : amélioration de la présentation de la
numérotation des pièces justificatives.
10 Fiche : possibilité de déplacer les fiches dans une autre catégorie,
attention les attributs n’existant pas dans la catégorie cible seront
supprimés
11 Amélioration de l’esthétique
12 A cause de php 5.3, on n’utilise plus PHPSESSID mais plutôt un cookie
13 Les banques utilisent des n° de PJ, chaque opération sera donc la PJ
suivi du n° d’opération
-
exemple PJ = FIN1
-
opération 1 = FIN1001
-
opération 2 = FIN1002
-
opération 3 = FIN1003
il est préférable d’avoir un préfixe différent pour chaque banque, il
est plus facile d’utiliser un journal par compte en banque
14. Pour le pense bête, changement cosmétique
15. Opérations Diverses fonctionne comme les autres journaux : soit on
spécifie la période soit la période est déduite de la date
16. La calculatrice est dans un bouton
17. Possibilité d’avoir la date de la période ou vide pour les achat,
ventes, opérations diverses et banque, à changer dans
paramètre→société : suggérer date
=== Note de version 5.0 (janvier 2010)
-
Ajout d’une fonctionnalité d’Auto Completion : dans les champs où sont entrés le quick code d’une fiche, la recherche se fait sur le quick-code et le nom
-
Protection contre les doubles encodages dans les opérations comptables,
-
Ajout d’une recherche avancée :Pour chaque journal, dans "voir opération", il y a dorénavant une recherche avancée. La période ne doit plus être choisie dans les journaux comptable mais peut-être déduite, cela dépend d’un paramètre dans"Paramètre→Société".
-
Le module gestion ne permet plus d’encoder des factures mais est axé vers un meilleur suivi pour les clients, fournisseurs et administration.
-
Chaque action du suivi, peut contenir plusieurs documents générés, la liste des documents générés est plus complète et contient en autre bons de commande (client ou fournisseur) et bordereau de livraison
-
Calendrier
-
pour récapituler le suivi.
-
Création d’un tableau de bord plus complet.
-
Remplacement du module Budget qui n’était pas vraiment utilisable par le module Prévision.
-
Module Plugin (Extension) afin d’ajouter facilement des extensions au système.
=== Note de version 4.3 (février 2009)
La nouvelle version de NOALYSS vient de sortir, en plus de la correction de certains bugs, cette version contient une réécriture complète de la partie sécurité, un support pour les non assujetti à la TVA, ainsi que la numérotation automatique des pièces justificatives avec préfixe et évidemment un contrôle pour que le numéro de pièce soit unique. Pour la génération des documents, deux nouveaux tags sont apparus :
-
pj reprend le n° de pièce justificative
-
user reprend le nom de la personne qui a généré le document
=== Note de version 4.2 novembre 2008
1.Le mode strict : dans paramètre → société, on peut activer le mode strict ; dans ce mode-là, il n’est plus possible de créer une opération antérieure à la dernière entrée d’un journal. Ce qui implique que les opérations doivent être encodées dans l’ordre chronologique. De plus, il n’est plus possible d’effacer une opération. 2. La génération de note de frais : quand vous faites une dépense vous pourrez demander à générer une note de frais 3. Pour les factures et les dépenses, il est dorénavant possible d’indiquer directement si l’opération est payée et comment, avant de l’utiliser la première fois, il est impératif d’aller dans paramètre→divers→Moyen de paiement et de paramétrer correctement en complétant les données : journal où le paiement sera sauvegardée, la fiche de paiement par défaut ou la catégorie de fiche à utiliser)S’il n’y a pas de fiche par défaut, il faudra à chaque facture ou dépense indiquer la fiche de la catégorie indiquée.
Il existe donc aussi une nouvelle catégorie de fiche : compte Administrateur ou salarié. Ainsi que 2 nouveaux tags pour la génération de document CUST_BANQUE_NO et CUST_BANQUE_NAME. Il y a quelques exemples NOALYSS/contrib/documentâtes
|
Note
|
Les notes de version entre 2003 et 2008 ont été volontairement omises |
=== Première version 31 juillet 2003 Serveur de comptabilité entièrement web based