-
Godefroy de Compreignac
[LaTeX] Comment faire rapidement une facture super classe
J'ai fait mes premières factures récemment, et j'ai été complètement incapable de trouver la moindre application gratuite/libre permettant d'éditer facilement et rapidement une belle facture.
Donc comme je suis un peu kamikaze, j'ai passé des heures à m'améliorer en LaTeX en mettant au point un petit système pour éditer des jolies factures.
Pour ceux qui ne connaissent pas ou peu LaTeX, il existe de très bonnes FAQ, notamment :
Voici le code LaTeX de ma facture :\documentclass[french,11pt]{article}
\usepackage{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[a4paper]{geometry}
\usepackage{units}
\usepackage{bera}
\usepackage{graphicx}
\usepackage{fancyhdr}
\usepackage{fp}
\def\TVA{19.6} % Taux de la TVA
\def\TotalHT{0}
\def\TotalTVA{0}
\newcommand{\AjouterProduit}[3]{% Arguments : Désignation, quantité, prix unitaire HT
\FPround{\prix}{#3}{2}
\FPeval{\montant}{#2 * #3}
\FPround{\montant}{\montant}{2}
\FPadd{\TotalHT}{\TotalHT}{\montant}
\eaddto\ListeProduits{#1 & \prix & #2 & \montant \cr}
}
\newcommand{\AfficheResultat}{%
\ListeProduits
\FPeval{\TotalTVA}{\TotalHT * \TVA / 100}
\FPadd{\TotalTTC}{\TotalHT}{\TotalTVA}
\FPround{\TotalHT}{\TotalHT}{2}
\FPround{\TotalTVA}{\TotalTVA}{2}
\FPround{\TotalTTC}{\TotalTTC}{2}
\global\let\TotalHT\TotalHT
\global\let\TotalTVA\TotalTVA
\global\let\TotalTTC\TotalTTC
\cr \hline
Total HT & & & \TotalHT \cr
TVA \TVA~\% & & & \TotalTVA \cr
\hline \hline
\textbf{Total TTC} & & & \TotalTTC
}
\newcommand*\eaddto[2]{% version développée de \addto
\edef\tmp{#2}%
\expandafter\addto
\expandafter#1%
\expandafter{\tmp}%
}
\newcommand{\ListeProduits}{}
%%%%%%%%%%%%%%%%%%%%% A MODIFIER DANS LA FACTURE %%%%%%%%%%%%%%%%%%%%%
\def\FactureNum {1} % Numéro de facture
\def\FactureAcquittee {non} % Facture acquittée : oui/non
\def\FactureLieu {Paris} % Lieu de l'édition de la facture
\def\FactureObjet {facture pour te faire payer} % Objet du document
% Description de la facture
\def\FactureDescr {%
Cette facture concerne la réalisation du site web machin-truc.com, son hébergement, et la location du nom de domaine
}
% Infos Client
\def\ClientNom{M. Dupont} % Nom du client
\def\ClientAdresse{% % Adresse du client
12, rue de la Geekerie \\
75000 Paris
}
% Liste des produits facturés : Désignation, quantité, prix unitaire HT
\AjouterProduit {Réalisation du site} {1} {1600}
\AjouterProduit {Hébergement -- 1 mois} {3} {10}
\AjouterProduit {Nom de domaine -- 1 an} {1} {8}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\geometry{verbose,tmargin=4em,bmargin=8em,lmargin=6em,rmargin=6em}
\setlength{\parindent}{0pt}
\setlength{\parskip}{1ex plus 0.5ex minus 0.2ex}
\thispagestyle{fancy}
\pagestyle{fancy}
\setlength{\parindent}{0pt}
\renewcommand{\headrulewidth}{0pt}
\cfoot{
Ma Société SARL au capital de 3000 € ~--~ 34, rue du Brainfuck - 75000 Paris\newline
\small{
Telephone : +33(0)6 12 34 56 78 ~--~ Site web : www.ma-societe.com ~--~ E-mail : contact@ma-societe.com\newline
RCS Paris 512 569 485 ~--~ Code APE 6201Z ~--~ Numéro TVA : FR 56-512-569-485
}
}
\begin{document}
% Logo de la société
\includegraphics{logo.jpg}
% Nom et adresse de la société
Ma Société SARL \\
34, rue du Brainfuck \\
75000 Paris
Facture n°\FactureNum
{\addtolength{\leftskip}{10.5cm} %in ERT
\textbf{\ClientNom} \\
\ClientAdresse \\
} %in ERT
\hspace*{10.5cm}
\FactureLieu, le \today
~\\~\\
\textbf{Objet : \FactureObjet \\}
\textnormal{\FactureDescr}
~\\
\begin{center}
\begin{tabular}{lrrr}
\textbf{Désignation ~~~~~~} & \textbf{Prix unitaire} & \textbf{Quantité} & \textbf{Montant (EUR)} \\
\hline
\AfficheResultat{}
\end{tabular}
\end{center}
~\\
\ifthenelse{\equal{\FactureAcquittee}{oui}}{
Facture acquittée.
}{
À régler par chèque ou par virement bancaire :
\begin{center}
\begin{tabular}{|c c c c|}
\hline \textbf{Code banque} & \textbf{Code guichet} & \textbf{N° de Compte} & \textbf{Clé RIB} \\
59763 & 00726 & 41652387462 & 98 \\
\hline \textbf{IBAN N°} & \multicolumn{3}{|l|}{ FR59 4859 4628 7921 0289 8106 846 } \\
\hline \textbf{Code BIC} & \multicolumn{3}{|l|}{ AGRIFPRP792 } \\
\hline
\end{tabular}
\end{center}
}
\end{document}
Tout d'abord, la première fois, il faut modifier le nom de votre société, son adresse, le logo (situé dans un fichier logo.jpg qui doit être dans le même dossier), les informations de votre société en bas de page, et les informations bancaires pour les virements.Ensuite, à chaque fois qu'il faudra faire une facture, il suffira de modifier les lignes dans l'encart "A MODIFIER DANS LA FACTURE" où on définit les infos du clients, la description de la facture, et les produits vendus. Tout est expliqué dans les commentaires du code

Les sous-totaux, la TVA, et le total TTC sont calculés automatiquement. C'était bien sûr la partie la plus dure à faire... J'ai utilisé en particulier le package fp pour les calculs.
Vous trouverez dans ce targézède la source .tex de cet exemple, ainsi que le pdf compilé :
Télécharger l'exemple
2 commentaires
Zim : Gérez vos notes et todo-lists super facilement
Jusqu'à présent j'avais des notes et todo-lists dans tous les sens : fichiers txt éparpillés, mails en draft, Tasks de Gmail, bouts de papier, Basecamp...
Et puis j'ai découvert Zim par le Linux Pratique n°15, un petit logiciel qui vous permet de gérer toutes vos notes en WYSIWYG. Il est open source et compatible avec Linux, Mac OS X, et Windows.
L'avantage par rapport à un bête notepad ou à un traitement de texte évolué, c'est qu'il est très léger, qu'on peut créer différentes pages liées et avec une arborescence, et qu'on peut y ajouter des éléments du type todo-list, images, équations LaTeX...etc. Sa particularité est aussi d'enregistrer les notes au format Wiki dans des fichiers txt. Les notes sont donc très facilement exportables et modifiables sans Zim au besoin.
Les principales fonctionnalités sont :
- Arborescence des pages + historique en onglets
- Mise en page basique : gras, italique, surligné, barré, titres, liens
- Todo-list : tapez simplement "[]" pour faire apparaitre une case à cocher
- Correcteur orthographique : avec le paquet aspell
- Diagramme avec le paquet dot
- LaTeX : avec le paquet latex
- Insertion d'images (très peu pratique cependant)
- Tri d'une liste en un clic
- Export HTML
Un truc très pratique aussi, c'est la possibilité de mettre Zim dans le system tray, pour avoir toujours le logiciel ouvert avec l'icône sous la main sans encombrer la barre des tâches.
À télécharger ici : http://zim-wiki.org/downloads.html
6 commentaires
22,6 Kg de flyers EklaBlog
Un gros colis est arrivé chez moi : les 10 000 flyers EklaBlog !
Va falloir qu'on m'aide à les distribuer ^^
10 commentaires
Un bookmarklet pour consulter les infos Whois d'un site en un clic
Ayant très souvent besoin de consulter les informations Whois d'un site pour par exemple contacter le webmaster, vérifier l'hébergeur, consulter la disponibilité...etc, j'ai eu l'idée de faire deux bookmarklets pour faciliter l'usage du Whois.
J'ai choisi ici d'utiliser whois.domaintools.com, mais vous pouvez bien sûr modifier le code pour en utiliser un autre.Pour ajouter les bookmarklets à votre navigateur, glissez-déposez les liens dans vos favoris (par exemple dans la barre personnelle de Firefox) :
Le premier sert à afficher le whois de la page courante :Whois ?
Le deuxième demande un nom de domaine par une fenêtre prompt, et en donne le whois :Whois...?
Dîtes-moi si ça vous sert

aucun commentaire
Faire un backup incrémental avec un simple bash

J'ai bricolé un bash pour faire des sauvegardes incrémentales quotidiennes de l'ensemble des blogs d'EklaBlog, et j'ai décidé de vous en faire cadeau
Il n'y a rien d'exceptionnel, mais l'astuce n'est pas toujours facile à trouver sur le net, et cela évite d'installer des logiciels comme backup-manager.J'avais déjà écrit un article au sujet des backups, qui est un peu plus complet sur la description de rsync et de cron, mais il ne traitait pas des sauvegardes incrémentales.
L'avantage de ce script par rapport à certains autres que l'ont peut trouver sur l'intraweb, c'est que ce script crée un dossier par jour, et que chaque dossier de sauvegarde est totalement utilisable seul. Je dis ça car généralement, on utilise la fonction --backup de rsync qui se contente de garder les fichiers modifiés dans un autre dossier, ce qui ne permet pas de récupérer facilement la sauvegarde totale d'un jour. Au contraire, ce script crée une copie totale de chaque jour, tout en minimisant l'espace disque utilisé (Un même fichier présent dans plusieurs sauvegardes ne sera écrit qu'une seule fois sur le disque).
Ce script peut fonctionner aussi bien pour la sauvegarde des sites que pour la sauvegarde de fichiers personnels situés sur un ordinateur. Le principal, c'est que le serveur (ordinateur qui contient les données à sauvegarder) ait un serveur ssh, et que le client (ordinateur sur lequel vont être stockées les données) ait la commande rsync. Ca fonctionne sous Linux, et normalement ça devrait être pareil sur Mac.
Pour installer ssh sur le serveur (s'il n'est pas installé) :
sudo apt-get install openssh-server
Note : "sudo apt-get" fonctionne sur les machines utilisant le gestionnaire de paquets apt. Il se peut que vous ayez à en utiliser un autre, comme "yum". La commande "sudo" n'est pas nécessaire si vous êtes déjà en mode administrateur.Pour installer rsync sur le client :
sudo apt-get install rsync
Passons maintenant au script en lui même :# Source du backup
SRC=root@server:/home/dossier/a/sauvegarder
# Destination du backup
DST=/home/dossier/contenant/les/sauvegardes
# Date de la forme année-mois-jour-timestamp
# (le timestamp %s sert si on veut faire plusieurs sauvegardes dans la même journée)
DATE=`date +%Y-%m-%d-%s`
# Création du répertoire temporaire
mkdir $DST/tmp
echo "Backup commencé le "`date "+%d/%m/%Y à %T"`
echo "Starting : "`date "+%Y-%m-%d %T"` >> $DST/log
echo "Copie de la dernière sauvegarde..."
# Si une sauvegarde a déjà été faite précédemment
if test -d $DST/today ; then
# Et si le fichier contenant la date de la dernière sauvegarde existe
if test -f $DST/last_date ; then
LASTDATE=`cat $DST/last_date`
# Alors on fait un copie en hardlinks de la sauvegarde d'hier
cp -al $DST/today $DST/tmp/
# Puis on renomme la copie pour qu'elle devienne la sauvegarde d'hier
mv $DST/tmp/today $DST/$LASTDATE
fi
# Sinon, on crée le premier dossier
else
mkdir $DST/today
fi
rm -rf $DST/tmp
# On sauvegarde la date actuelle pour le prochain backup
echo $DATE > $DST/last_date
echo "Synchronisation de la sauvegarde du jour..."
# Synchronisation de la source avec le dossier du jour
rsync -az --delete --size-only $SRC/ $DST/today/
echo "Backup terminé le "`date "+%d/%m/%Y à %T"`
echo "Done : "`date "+%Y-%m-%d %T"` >> $DST/log
Et voilà, avec un fichier log en prime !
Pour ceux qui ne comprennent pas trop le fonctionnement du script, c'est en fait assez simple :
"cp -al ..." permet de faire une copie conforme d'un dossier mais en hardlinks, c'est-à-dire en dupliquant juste les noms des fichiers sur le disque dur. Un même fichier devient alors accessible depuis deux endroits différents (ou plus si on a plus d'une sauvegarde du fichier). Ensuite le rsync synchronise la source en ajoutant les nouveaux fichiers dans le dossier du jour, et en supprimant et modifiant les fichiers supprimés ou modifiés depuis la dernière sauvegarde. L'astuce, c'est que lorsque rsync modifie un fichier, il est d'abord supprimé puis réécrit, ce qui a pour effet de ne pas modifier les fichiers du même nom dans les sauvegardes antérieures.Le flag --size-only permet de ne synchroniser que les fichiers dont la taille a changé. Vous pouvez utilisez le flag -c (ou --checksum) pour vérifier plutôt la signature de chaque fichier, ce qui est plus sûr mais beaucoup plus long si votre dossier à sauvegarder est très volumineux.
Il ne reste plus qu'à automatiser l'exécution du script sur votre pc (ça se passe côté client). Nous allons ajouter une ligne d'instruction dans les tâches cron. Pour faire simple, tapez la commande :
sudo crontab -ePuis rajoutez la ligne :
0 20 * * * /bin/bash /chemin/absolu/du/bash/qu/on/vient/de/creer.sh >/dev/null 2>&1Pour plus de détails sur le cron, et surtout sur la manière de configurer ssh pour que le script puisse s'exécuter sans votre intervention qui est normlament nécessaire pour entrer le mot de passe ssh, vous pouvez consulter mon précédent article au sujet des backups.
J'espère que ce petit script pourra vous être utile. J'attends vos retours et remarques

7 commentaires
[1] 2 3 4 5 6 ...
Suivre le flux RSS des articles
Suivre le flux RSS des commentaires


Haut de page