% \iffalse meta-comment
%   Droits d'auteur :
%   - Maïeul Rouquette 2011-2023
%   - Joël Gombin 2014
%   - Étienne Deparis 2023-…
%   Licence Creative Commons - Paternité - Partage des Conditions Initiales à l'identique
%   http://creativecommons.org/licenses/by-sa/2.0/fr/
% \fi
% \iffalse
%<*driver>
\ProvidesFile{facture.dtx}
\documentclass{ltxdoc}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage[frenchb]{babel}
\usepackage{hyperref}
\usepackage{csquotes}
\usepackage{metalogo}
\usepackage[mono=false,nomath]{libertinus-otf}
% Pour l'impression des changements
\makeatletter
\def\glossary@prologue{%
  \section{Historique des changements}%
}
\makeatother
\EnableCrossrefs
\RecordChanges
% Pour les renvois internes
\newcommand{\renvoi}[1]{voir section~\ref{#1} p.~\pageref{#1}}
\newcommand{\Renvoi}[1]{Voir section~\ref{#1} p.~\pageref{#1}.}
\begin{document}
\raggedbottom
\DocInput{facture.dtx}
\end{document}
%</driver>
% \fi
% \CheckSum{585}
% \changes{v1.0}{2011/09/10}{Première version.}
% \changes{v1.1}{2014/09/16}{Laisser le choix de la marge à l'utilisateur.}
% \changes{v1.1}{2014/09/16}{Possibilité de modifier la taille du tableau.}
% \changes{v1.2}{2015/01/16}{Possibilité de produire des factures sans la colonne remise.}
% \changes{v1.2.2}{2015/01/16}{Corrections de quelques problèmes d'alignement.}
% \changes{v1.3}{2023/06/30}{Modernise les scripts de construction du paquet.}
% \changes{v1.3}{2023/06/30}{Corrige la documentation à propos du code client.}
% \def\filedate{2023/06/30}
% \def\fileversion{1.3}
% \date{\filedate}
% \title{La class \textsf{facture}\thanks{Ce document correspond à la version~\fileversion de \textsf{facture} datée du \filedate.}}
% \author{Maïeul Rouquette, Joël Gombin et Étienne Deparis}
% \maketitle
% \begin{abstract}
%   Cette classe permet de rédiger factures et devis, avec ou sans TVA, en
%   calculant automatiquement les sommes.
%
%   Elle fonctionne avec \XeLaTeX{} et non pas \LaTeX{}.
%
%   Elle est sous licence Creative Commons - Paternité - Partage des
%   Conditions Initiales à
%   l'identique\footnote{\url{http://creativecommons.org/licenses/by-sa/2.0/fr/}.}.
%
%   Pour tout demande de corrections ou d'améliorations, merci d'ouvrir un
%   ticket sur Gitlab : \url{https://framagit.org/gutenberg/facture/-/issues}.
% \end{abstract}
% \tableofcontents
%
% \section{Chargement et configuration}
% \label{meta}
% \subsection{Avec ou sans TVA ?}
% \label{TVA}
%
% La classe se charge comme toutes les classes. Une option \verb|sansTVA|
% permet de produire des factures sans gestion de la TVA. Typiquement pour des
% auto-entrepreneurs. Ainsi :
%
% \begin{verbatim}
% \documentclass[sansTVA]{facture}
% \end{verbatim}
%
% Permet de générer une facture sans gestion de la TVA. À contrario,
%
% \begin{verbatim}
% \documentclass{facture}
% \end{verbatim}
%
% Permet de générer une facture avec TVA. Celle-ci est définie par défaut à
% 19,6~\%\footnote{Valeur lors de la sortie de la première version de la
% classe. Pour éviter que des factures créées avant la variation du taux mais
% recompilées après la variation ne voient leur TVA changer, ce taux restera
% fixe d'une version à l'autre de la classe.}, mais il est possible de
% modifier le taux, grâce à la commande
% \DescribeMacro{\TVAdefaut}\cmd{\TVAdefaut}\marg{taux}. Par exemple pour
% avoir un taux de 5,5~\% :
%
% \begin{verbatim}
% \TVAdefaut{5,5}
% \end{verbatim}
%
% \subsection{Avec ou sans remise ?}
% \label{remise}
%
% Une option \verb|sansremise| permet de produire des factures sans gestion
% des remises.
%
% \subsection{Information sur document}
%
% Cette classe permet de fabriquer des factures et des devis. Par défaut, elle
% fabrique des factures. La commande
% \DescribeMacro{\type}\cmd{\type}\marg{type} permet d'indiquer si on souhaite
% fabriquer une facture ou autre chose :
%
% \begin{verbatim}
% \type{Devis}
% \end{verbatim}
%
% À noter que \meta{type} peut prendre n'importe quelle valeur.
%
% Le document peut avoir un numéro, défini par la commande
% \DescribeMacro{\numero}\cmd{\numero}\marg{numero}.
%
% Le document est automatiquement daté du jour de la compilation. Toutefois on
% peut utiliser la commande \DescribeMacro{\date}\cmd{\date}\marg{JJ/MM/AAAA}
% pour spécifier une date. Il est possible d'indiquer une date limite de
% paiement via la commande
% \DescribeMacro{\datelimite}\cmd{\datelimite}\marg{nbjours}. La date limite
% est calculée en ajoutant \meta{nbjours} à la date du document.
%
% \subsection{Information sur l'émetteur}
%
% La commande \DescribeMacro{\nomemet}\cmd{\nomemet}\marg{texte} permet
% d'indiquer le nom de l'émetteur, qui apparaîtra dans l'entête. Pour indiquer
% son adresse, qui apparaîtra dans l'entête mais à droite, on utilise
% \DescribeMacro{\adresseemet}\cmd{\adresseemet}\marg{texte}. On indique les
% retours à la ligne par \verb|\\|.
%
% Il existe également une commande
% \DescribeMacro{\pied}\cmd{\pied}\marg{texte} qui provoque l'affichage de
% \meta{texte} à droite du pied de page, sur toutes les pages.
%
% \subsection{Information sur le destinataire}
% \label{dest}
%
% Le destinataire peut avoir deux adresses : une adresse de livraison et une
% de facturation. Seule la première est obligatoire. Si la seconde est
% absente, la classe considère qu'il s'agit de la même adresse. À la
% différence de l'émetteur, le nom du destinataire s'indique en même temps que
% l'adresse.
%
% L'adresse de livraison se définie via la commande
% \DescribeMacro{\dest}\cmd{\dest}\marg{adresse}, l'adresse de facturation via
% \DescribeMacro{\fact}\cmd{\fact}\marg{adresse}. Encore une fois, les
% différentes lignes de l'adresse doivent être séparées par \verb|\\|.
%
% Il est possible d'affecter un code au client, via la commande
% \DescribeMacro{\codedest}\cmd{\codedest}\marg{code}.
%
% \subsection{Affichage des méta-données}
%
% Toutes ces méta-données, à l'exception du taux de TVA et du pied de page
% sont affichées dans une zolie présentation avec la
% commande \DescribeMacro{\entete}\cmd{\entete}.
%
% \section{Insertion de texte}
%
% La classe étant dérivée de la classe \emph{article}, il est possible
% d'insérer du texte sectionnable avec les commandes de \emph{article}. Il n'y
% a pas d'endroit obligatoire pour l'afficher.
%
% \section{Insertion de la facture}
%
% Une facture est constituée de lignes indiquant les prix et quantités des
% différents produits. Chaque ligne s'appelle au sein de l'environnement
% \DescribeEnv{facture}\emph{facture}, via la commande
% \DescribeMacro{\ligne}\cmd{\ligne}\marg{produit}\oarg{quantité}\marg{prix
% unitaire HT}\oarg{remise}\oarg{taux de TVA}.
%
% \meta{produit} est le nom du produit.
% \meta{quantité} est la quantité souhaitée. Le nombre peut être entier ou
%   décimal. En l'absence de cet argument, on suppose que le produit n'est
%   présent qu'une fois.
% \meta{prix unitaire HT} n'est pas à décrire.
% \meta{remise} s'applique sur le prix total HT.
% \meta{taux de TVA}: si un produit n'a pas le même taux que celui par défaut
%   (\renvoi{TVA}), cet argument permet d'indiquer le taux. Il est exprimé en
%   pourcentage, mais sans le signe \%.
%
% Tout les nombres décimaux s'expriment en utilisant la virgule, même si
% l'usage du point fonctionne également.
%
% La commande se charge automatiquement de calculer et d'afficher le prix
% total HT, la TVA et le prix total TTC.  Le total des produits est affiché
% avec la fermeture de l'environnement \emph{facture}. Exemple (voir le
% fichier \href{exemple.pdf}{exemple.pdf} pour le résultat):
%
% \begin{verbatim}
% \begin{facture}
%   \ligne{Produit 1}[2]{25}
%   \ligne{Produit 2}{10}[2]
% \end{facture}
% \end{verbatim}
%
% Dans le cas où l'option \verb|sansTVA| (\renvoi{TVA}) a été passée lors de
% l'appel à la classe, les colonnes ne sont pas les mêmes. Exemple (voir le
% fichier \href{exemplesansTVA.pdf}{exemplesansTVA.pdf} pour le résultat):
%
% \begin{verbatim}
% \begin{facture}
%   \ligne{Produit 1}[2]{25}
%   \ligne{Produit 2}{10}[][2]
% \end{facture}
% \end{verbatim}
%
% Si l'option \verb|sansremise| a été passée lors de l'appel à la classe, le
% quatrième argument de la colonne correspond au taux de TVA.
%
% \subsection{Texte en dessous des totaux}
%
% Dans le cas d'une facture sans TVA, l'environnement \emph{facture} indique
% le texte \enquote{TVA non applicable, art. 293 B}. Il est possible de
% modifier ce texte, ou d'en ajouter un pour les documents avec TVA, en
% redéclarant la commande
% \DescribeMacro{\postTotaux}\cmd{\postTotaux}\marg{texte}.
%
% \begin{verbatim}
% \renewcommand{\postTotaux}{\hfill un joli texte}
% \end{verbatim}
%
% \section{Personnalisation}
%
% Plusieurs possibilités de personnalisation existent, en redéfinissant des
% commandes et/ou des couleurs. J'invite à lire le code pour savoir lesquels.
%
% \begin{itemize}
% \item Pour les couleurs, les traits et les mise en valeurs des textes, \renvoi{apparence}.
% \item Pour les réglages concernant les mathématiques (arrondis par exemple), \renvoi{math}.
% \item Pour les textes, \renvoi{texte}.
% \item Pour le pieds de page, \renvoi{pied}.
% \item Pour l'affichage de la TVA, \renvoi{afficheTVA}.
% \item Pour la largeur des colonnes du tableau, \renvoi{largeurCols}.
% \end{itemize}
%
% Pour personnaliser la taille du papier et celle des marges, on peut utiliser
% le package \emph{geometry}.
%
% \StopEventually{}
% \appendix%
% \section{Documentation du code}
%
% \subsection{Chargement des packages}
%
% \iffalse
%<*facture>
% \fi
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{facture}[2023/06/30 v1.3]
\LoadClass[a4paper]{article} % On se base sur la classe article
\RequirePackage{fontspec}
\RequirePackage{xunicode}
\RequirePackage{polyglossia}
\setmainlanguage{french}
\RequirePackage{numprint} % Pour gérer l'affichage des nombres
\RequirePackage{fltpoint} % Pour faire les calculs dans le tableau
\RequirePackage{tikz}     % tikz est utilisé pour tracer des boites, par exemple
\RequirePackage{graphicx} % Pour insérer des images. Utiliser le format jpg
                          % pour plus de simplicité.
\RequirePackage{fancyhdr} % Pour entête et pied de page
\RequirePackage{array}
\RequirePackage{longtable}
\RequirePackage{colortbl}
\RequirePackage{advdate}  % Pour manipuler les dates
\RequirePackage{xargs}    % Pour des arguments conditionnels
%    \end{macrocode}
%
% \subsection{Option sansTVA}
%
%    \begin{macrocode}
\newif\ifsansTVA
\DeclareOption{sansTVA}{\sansTVAtrue}
%    \end{macrocode}
%
% \subsection{Option sansremise}
%
%    \begin{macrocode}
\newif\ifsansremise
\DeclareOption{sansremise}{\sansremisetrue}
%    \end{macrocode}
%
% \subsection{Exécution des options}
%
%    \begin{macrocode}
\ProcessOptions
%    \end{macrocode}
%
% \subsection{Apparence}
% \label{apparence}
%
% On définit ici les couleurs, l'écartement des colonnes, et l'apparences des
% libellés.
%
%    \begin{macrocode}
\definecolor{entetes}{HTML}{888888}
\definecolor{encadre}{RGB}{111,111,111}
\newcommand{\libelle}[1]{\textcolor{entetes}{\textbf#1}}
\setlength{\tabcolsep}{1pt}
\newlength{\epaisseurcadre}
\setlength{\epaisseurcadre}{1.5mm}
%    \end{macrocode}
%
% \subsection{Textes}
% \label{texte}
% \subsubsection{Invariants}
%
%    \begin{macrocode}
\newcommand{\codeclient}{Code client :}
\newcommand{\datetxt}{Date:}
\newcommand{\datelimitetxt}{À payer avant:}
\newcommand{\facturation}{Facturation}
\newcommand{\facturetxt}{Facture}
\newcommand{\livraison}{Livraison}
\newcommand{\livraisonfacturation}{Livraison et Facturation}
\newcommand{\ntxt}{~n°}
\newcommand{\produit}{Produit}
\newcommand{\quantite}{Quantité}
\newcommand{\remise}{Remise}
\newcommand{\unite}{€}
%    \end{macrocode}
%
% \subsubsection{Dépend du réglage sur la TVA}
%
% \Renvoi{TVA}
%
%    \begin{macrocode}
\ifsansTVA%
  \newcommand{\tottxt}{Total}
  \newcommand{\prixtxt}{Prix}
  \newcommand{\postTotaux}{\hfill TVA non applicable, art. 293 B}
\else%
  \newcommand{\prixHT}{Prix HT}
  \newcommand{\TVAtxt}{TVA}
  \newcommand{\prixTTC}{Prix TTC}
  \newcommand{\totHTtxt}{Total HT}
  \newcommand{\totTVAtxt}{Total TVA}
  \newcommand{\totTTCtxt}{Total TTC}
  \newcommand{\postTotaux}{}
\fi
%    \end{macrocode}
%
% \subsection{Largeur des colonnes}
% \label{largeurCols}
%
% On peut redéfinir les commandes ci-dessous pour modifier la largeur des
% commandes. Attention à ne pas dépasser un total de 1\cmd{\textwidth} !
%
% Le package se charge d'ajuster automatiquement pour supprimer la marge
% intérieure.
%
% La largeur des chiffres est calculée automatiquement en fonction de la
% largeur du descriptif et de la largeur de la TVA. Il est donc fortement
% recommandé de ne modifiée que \cs{largeurDescriptif} et \cs{largeurTVA}.
%
%    \begin{macrocode}
\newcommand{\largeurDescriptif}{0.2\textwidth}
\newcommand{\largeurTVA}{0.2\textwidth}
\ifsansremise
  \newcommand{\largeurChiffresAvecTVA}{%
    \dimexpr (\textwidth-\largeurDescriptif-\largeurTVA)/4\relax}
  \newcommand{\largeurChiffres}{%
    \dimexpr (\textwidth-\largeurDescriptif)/3 \relax}
\else
  \newcommand{\largeurChiffresAvecTVA}{%
    \dimexpr (\textwidth-\largeurDescriptif-\largeurTVA)/5\relax}
  \newcommand{\largeurChiffres}{%
    \dimexpr (\textwidth-\largeurDescriptif)/4 \relax}
\fi
%    \end{macrocode}
%
% \subsection{Réglages mathématiques}
% \label{math}
%
% On régle ici les paramètres mathématiques, définissables avec le package
% \emph{numprint}.  Tout d'abord on dit qu'on veut avoir les zéros finaux.
%
%    \begin{macrocode}
\npaddmissingzero
%    \end{macrocode}
%
% Puis on dit qu'on arrondit à deux chiffres après la virgule.
%
%    \begin{macrocode}
\nprounddigits{2}
%    \end{macrocode}
%
% \subsection{Quelques réglages standards}
%
% Ici on régle la TVA par défaut et le type de document
%
%    \begin{macrocode}
\def\@TVAdefaut{19,6}
\def\@type{\facturetxt}
%    \end{macrocode}
%
% \subsection{Méta-données}
%
% Toutes ces commandes sont appelées par l'utilisateurs au tout début
% (\renvoi{meta}). La plupart stockent dans une commande commençant par @ le
% code qui est passé.
%
%    \begin{macrocode}
\renewcommand{\date}[1]{\SetDate[#1]}
\newcommand{\TVAdefaut}[1]{\def\@TVAdefaut{#1}}
\newcommand{\datelimite}[1]{\def\@datelimite{#1}}
\newcommand{\dest}[1]{\def\@dest{#1}}
\newcommand{\fact}[1]{\def\@fact{#1}}
\newcommand{\adresseemet}[1]{\def\@adresseemet{#1}}
\newcommand{\nomemet}[1]{\def\@nomemet{#1}}
\newcommand{\type}[1]{\def\@type{#1}}
\newcommand{\numero}[1]{\def\@numero{#1}}
\newcommand{\codedest}[1]{\def\@codedest{#1}}
%    \end{macrocode}
%
% \subsection{Génération de l'entête}
%
% \begin{macro}{\entete}
%   \changes{v1.2.2}{2017/04/12}{Corrections d'un bug si le numéro de facture n'est pas défini.}
%   \changes{v1.3}{2023/06/30}{Corrige un bug si code client est absent.}
%
%   On se base sur le package \emph{TikZ} pour le générer.
%
%   Tout d'abord afficher le nom et l'adresse de l'émetteur.
%
%    \begin{macrocode}
\newcommand{\entete}{
  \noindent\begin{tikzpicture}

    \noindent\node[font=\bf\Huge,text width=0.5\textwidth,text=entetes,text centered]{%
      \@nomemet%
    };

    \noindent\node(b)[xshift=0.5\textwidth,text width=0.5\textwidth,right]{%
      \@adresseemet%
    };
%    \end{macrocode}
% \iffalse} Stop Emacs syntax color being confused\fi
%
%   Ensuite déterminer la place que cela prend, puis tracer l'encadré.
%
%    \begin{macrocode}
    \coordinate[xshift=-\textwidth-\epaisseurcadre,yshift=1ex] (a) at (b.north);
    \coordinate[xshift=-\epaisseurcadre,yshift=-1ex] (c) at (b.south);
    \draw[color=encadre,line width=\epaisseurcadre] (a) rectangle  (c);
  \end{tikzpicture}
%    \end{macrocode}
%
%   Ensuite afficher le titre, avec un peu d'espace avant et après, en le
%   chassant à droite.
%
%    \begin{macrocode}
  \vspace{3ex}

  \begin{flushright}
    {\Huge\libelle{\@type}}
  \end{flushright}

  \vspace{3ex}
%    \end{macrocode}
%
%   Ensuite afficher les informations sur le destinataire. Des tests
%   permettent d'afficher ou non la livraison séparement de la facture, en
%   fonction de ce qu'a défini l'utilisateur (\renvoi{dest}).
%
%    \begin{macrocode}
  \begin{tikzpicture}
    \ifdef{\@fact}{
      \node[text width=0.33\textwidth,anchor=base]{
        \libelle{\facturation}

        \@fact
      };
    }{}

    \node[xshift=0.33\textwidth,text width=0.33\textwidth,anchor=base]{
      \ifdef{\@fact}
        {\libelle{\livraison}}
        {\libelle{\livraisonfacturation}}

      \@dest
    };
%    \end{macrocode}
%
%   On affiche finalement les dates, le numéro de la facture et le code
%   client.
%
%    \begin{macrocode}
    \node[text width=0.33\textwidth,xshift=0.66\textwidth,anchor=base]{
      \libelle{{\datetxt}} \today\\
      \ifdef{\@numero}{%
          \libelle{{\@type\ntxt}} \@numero\\
      }{}
      \ifdef{\@codedest}{%
          \libelle{{\codeclient}} \@codedest\\
      }{}
      \ifdef{\@datelimite}{%
          \AdvanceDate[\@datelimite]
          \libelle{{\datelimitetxt}} \today
      }{}
    };
  \end{tikzpicture}
} % end \entete
%    \end{macrocode}
% \end{macro}
%
% \subsection{Le tableau de facturation}
%
% On commence par définir des variables globales qui servent à stocker les
% totaux généraux.
%
%    \begin{macrocode}
\ifsansTVA
  \xdef\tot{}
\else
  \xdef\totTVA{}
  \xdef\totHT{}
  \xdef\totTTC{}
\fi
%    \end{macrocode}
%
% On définit ensuite un nouveau type de colonne, avec un alignement à droite.
%
%    \begin{macrocode}
\newcolumntype{P}[1]{>{\raggedleft}p{#1}}
%    \end{macrocode}
%
% On  définit ensuite l'environnement \emph{facture}.
%
% \begin{environment}{facture}
%   Tout d'abord on affiche l'entête, selon qu'on soit avec ou sans TVA
%
%    \begin{macrocode}
\newenvironment{facture}{%
  \setlength{\extrarowheight}{0.5ex}
  \setlength{\tabcolsep}{0.5em}
  \edef\@largeurDescriptif{\dimexpr\largeurDescriptif -2\tabcolsep\relax}
  \edef\@largeurChiffres{\dimexpr\largeurChiffres -2\tabcolsep\relax}
  \edef\@largeurTVA{\dimexpr\largeurTVA -2\tabcolsep\relax}
  \edef\@largeurChiffresAvecTVA{\dimexpr\largeurChiffresAvecTVA -2\tabcolsep\relax}
  \arrayrulecolor{encadre}
  \ifsansTVA%
    \ifsansremise%
      \begin{longtable}{%
        |p{\@largeurDescriptif}% Descriptif
        |P{\@largeurChiffres}% Qt
        |P{\@largeurChiffres}% Prix
        |P{\@largeurChiffres}|% Total
      }%
      \hline%
      \rowcolor{entetes}%
      \centering\textbf\produit &%
      \centering\textbf\quantite &%
      \centering\textbf\prixtxt &%
      \centering\textbf\tottxt%
      \tabularnewline[1ex]%
    \else%
      \begin{longtable}{%
        |p{\@largeurDescriptif}% Descriptif
        |P{\@largeurChiffres}% Qt
        |P{\@largeurChiffres}% Prix
        |P{\@largeurChiffres}% Remise
        |P{\@largeurChiffres}|% Total
      }%
      \hline%
      \rowcolor{entetes}%
      \centering\textbf\produit &%
      \centering\textbf\quantite &%
      \centering\textbf\prixtxt &%
      \centering\textbf\remise &%
      \centering\textbf\tottxt%
      \tabularnewline[1ex]%
    \fi%
  \else%
    \ifsansremise%
      \begin{longtable}{%
        |p{\@largeurDescriptif}|% Descriptif
        P{\@largeurChiffresAvecTVA}|% Qt
        P{\@largeurChiffresAvecTVA}|% HT unitaire
        P{\@largeurChiffresAvecTVA}|% Totalht
        P{\@largeurTVA}|% TVA
        P{\@largeurChiffresAvecTVA}|% Total TTC
      }%
      \hline%
      \rowcolor{entetes}
      \centering\textbf\produit &%
      \centering\textbf\quantite &%
      \centering\textbf\prixHT &%
      \centering\textbf\totHTtxt &%
      \centering\textbf\TVAtxt &%
      \textbf\prixTTC \tabularnewline[1ex]%
    \else%
      \begin{longtable}{%
        |p{\@largeurDescriptif}|% Descriptif
        P{\@largeurChiffresAvecTVA}|% Qt
        P{\@largeurChiffresAvecTVA}|% HT unitaire
        P{\@largeurChiffresAvecTVA}|% Remise
        P{\@largeurChiffresAvecTVA}|% Totalht
        P{\@largeurTVA}|% TVA
        P{\@largeurChiffresAvecTVA}|% Total TTC
      }%
      \hline%
      \rowcolor{entetes}
      \centering\textbf\produit &%
      \centering\textbf\quantite &%
      \centering\textbf\prixHT &%
      \centering\textbf\remise &%
      \centering\textbf\totHTtxt &%
      \centering\textbf\TVAtxt &%
      \textbf\prixTTC \tabularnewline[1ex]%
    \fi%
  \fi%
  \endhead%
  \endfoot%
}% end opening part of environment
%    \end{macrocode}
%
%   Le contenu du tableau est généré par les commandes \cmd{\ligne}. Lorsqu'on
%   ferme l'environnement \emph{facture}, on ferme le tableau
%
%    \begin{macrocode}
{% begin closing part of environment
\end{longtable}
%    \end{macrocode}
%
%   On affiche ensuite les totaux.
%
%    \begin{macrocode}
  \ifsansTVA%
    \noindent\hspace{0.66\textwidth}\hfill
    \libelle{\tottxt:} \numprint[\unite]{\tot}\\%
  \else%
    \noindent\hspace{0.66\textwidth}
    \libelle{\totHTtxt:}\hfill \numprint[\unite]{\totHT}\\%
    \hbox{}\hspace{0.66\textwidth}
    \libelle{\totTVAtxt:}\hfill \numprint[\unite]{\totTVA}\\%
    \hbox{}\noindent\hspace{0.66\textwidth}
    \libelle{\totTTCtxt:}\hfill \numprint[\unite]{\totTTC}\\
  \fi
  \hspace{0.66\textwidth}\postTotaux
}% end closing part of environment
%    \end{macrocode}
% \end{environment}
%
% \begin{macro}{\lignesansTVA}
%   On a besoin de définir une commande \cmd{\lignesansTVA} pour afficher le
%   contenu d'une ligne lorsqu'on n'a pas de TVA.
%
%    \begin{macrocode}
\newcommand{\lignesansTVA}[5]{
  #1 &
  #2 &
  #3 &
  \unless\ifsansremise
    #4 &
  \fi
  #5 \tabularnewline[1ex]}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\afficheTVA}
%   La commande \cmd{\afficheTVA} sert à afficher la TVA dans le tableau. En
%   ne l'indiquant pas directement dans le code de \cmd{\ligne}, on permet de
%   personnaliser plus facilement l'affichage de la TVA. \label{afficheTVA}
%
%    \begin{macrocode}
\newcommand{\afficheTVA}[1]{%
  \raggedleft{\numprint[\%]{#1}}
  \hfill $\triangleright$ \numprint[\unite]{\TVA}}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\ligne}
%   Voici maintenant la commande \cmd{\ligne}. Pour gérer les arguments
%   optionnels, on se sert du package \emph{xargs}.
%
%    \begin{macrocode}
\newcommandx{\ligne}[5][2=1,5=\@TVAdefaut,4=0,usedefault]{%
%    \end{macrocode}
%
%   On procède aux calculs grâce au package \emph{fltpoint}, on affiche les
%   résultat grâce au package \emph{numprint}.
%
%    \begin{macrocode}
  \ifsansTVA
    \fpMul{\prix}{#3}{#2}%
    \fpSub{\prix}{\prix}{#4}%
    \fpAdd{\tot}{\prix}{\tot}%
    \xdef\tot{\tot}%
    \xdef\prix{\prix}%
    % Affichage
    \lignesansTVA{#1}{#2}{%
      \numprint[\unite]{#3}%
    }{%
      \numprint[\unite]{#4}%
    }{%
      \numprint[\unite]{\prix}}%
  \else
    % Prix hors taxe
    \fpMul{\HT}{#3}{#2}%
    \unless\ifsansremise%
      \fpSub{\HT}{\HT}{#4}%
    \fi%
    \xdef\HT{\HT}%retenons
    \fpAdd{\totHT}{\totHT}{\HT}%
    \xdef\totHT{\totHT}%
    % Calcul de la TVA
    \ifsansremise%
      \fpDiv{\centieme}{#4}{100}%
    \else%
      \fpDiv{\centieme}{#5}{100}%
    \fi
    \fpMul{\TVA}{\centieme}{\HT}%
    \xdef\TVA{\TVA}%retenons
    \fpAdd{\totTVA}{\totTVA}{\TVA}%
    \xdef\totTVA{\totTVA}%
    % Prix TTC
    \fpAdd{\TTC}{\HT}{\TVA}%
    \xdef\TTC{\TTC}%
    \fpAdd{\totTTC}{\totTTC}{\TTC}%
    \xdef\totTTC{\totTTC}%
    % Affichage
    #1 &
    #2 &
    \numprint[\unite]{#3} &
    \unless\ifsansremise
      \numprint[\unite]{#4} &
    \fi
    \numprint[\unite]{\HT} &
    \afficheTVA{#5} &
    \numprint[\unite]{\TTC} \tabularnewline[1ex]%
  \fi
  \hline
}
%    \end{macrocode}
% \end{macro}
%
% \subsection{Apparence du pied}
% \label{pied}
% On se base sur le package \emph{fancyhdr} pour personnaliser le pied.
%
%    \begin{macrocode}
\AtBeginDocument{
  \pagestyle{fancy}
  \fancyhf{}
  \renewcommand{\headrule}{} % Pas de règle après l'entête
  % Indiquer le numéro de page, sauf sur la première
  \lfoot{\ifnum \value{page}>1 \thepage\fi}
  \rfoot{\@pied}
}
\newcommand{\pied}[1]{\def\@pied{#1}} % Le pied définissable par l'utilisateur
%    \end{macrocode}
% \iffalse
%</facture>
% \fi
% \PrintChanges
% \Finale
% \endinput
