<?xml version="1.1" encoding="ISO-8859-1"?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp "&#160;">
]>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:java="xalan://xml.apache.org/xalan/java" xmlns="http://www.xemelios.org/namespaces#cg-1.0" xmlns:n="http://www.xemelios.org/namespaces#cg-1.0" xmlns:added="http://projets.admisource.gouv.fr/xemelios/namespaces#added" xmlns:ano="http://projets.admisource.gouv.fr/xemelios/namespaces#anomally" exclude-result-prefixes="java" version="2.0">

    <xsl:output standalone="yes" method="xml" indent="yes"/>

    <xsl:output encoding="ISO-8859-1"/>
    <xsl:output version="1.0"/>

    <xsl:param name="language" select="'fr'"/>
    
    <xsl:param name="CodeBudget"/>
    <xsl:param name="LibelleBudget"/>
    <xsl:param name="CodeCollectivite"/>
    <xsl:param name="LibelleCollectivite"/>

    <xsl:template match="/*[position()=1]">
        <xsl:choose>
            <xsl:when test="local-name(.) = 'CompteGestion'">
                <CompteGestion xmlns="http://www.xemelios.org/namespaces#cg-1.0" xmlns:n="http://www.xemelios.org/namespaces#cg-1.0" xmlns:added="http://projets.admisource.gouv.fr/xemelios/namespaces#added">
                    <xsl:for-each select="./*">
                        <xsl:call-template name="writeElement">
                            <xsl:with-param name="el" select="."/>
                        </xsl:call-template>
                    </xsl:for-each>
                </CompteGestion>
            </xsl:when>
        </xsl:choose>
    </xsl:template>
    
    <xsl:template name="writeElement">
        <xsl:param name="el"/>
        <!--xsl:choose>
            <xsl:when test="starts-with(name($el),'Date')">
                <xsl:variable name="formatted"><xsl:call-template name="format-date"><xsl:with-param name="texte" select="$el/@V"/></xsl:call-template></xsl:variable>
                <xsl:element name="{name($el)}">
                    <xsl:attribute name="V" select="$formatted"/>
                </xsl:element>
            </xsl:when>
            <xsl:otherwise-->
                <xsl:element name="{name($el)}">
                    <xsl:for-each select="$el/@*">
                        <xsl:choose>
                            <xsl:when test="string-length(.) eq 0"/>
                            <!--xsl:when test="starts-with(name(.),'Date')">
                                <xsl:variable name="formatted"><xsl:call-template name="format-date"><xsl:with-param name="texte" select="."/></xsl:call-template></xsl:variable>
                                <xsl:attribute name="{name(.)}" select="$formatted"/>
                            </xsl:when-->
                            <xsl:otherwise><xsl:copy-of select="."/>
                                <!--xsl:attribute name="{name(.)}">
                                    <xsl:value-of select="."/>
                                </xsl:attribute-->
                            </xsl:otherwise>
                        </xsl:choose>
                    </xsl:for-each>
                    <!-- ajouts Attributs -->
                    <xsl:choose>
                        <!-- Ajouts SiretBA et BudgetBA si budget annexe -->
                        <xsl:when test="contains('|PageLivreAuxiliaire|PageSolde|PageFichesBudgetaires|PageDeveloppementSoldes|',concat('|',name($el),'|'))">
                            <xsl:attribute name="BudgetBA" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added"><xsl:value-of select="//Collectivite/@BudgetBA"/></xsl:attribute>
                            <xsl:attribute name="SiretBA" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added"><xsl:value-of select="//Collectivite/@SiretBA"/></xsl:attribute>
                        </xsl:when>                                                
                        <xsl:when test="contains('|Collectivite|',concat('|',name($el),'|'))">
                            <xsl:if test="not(@CodeBudget)"><xsl:attribute name="CodeBudget" select="$CodeBudget"/></xsl:if>
                        </xsl:when>
                        <xsl:when test="contains('|LigneAccueil|Infos|LigneCompteResultat|LigneCompteResultatSynthetique|LigneConsommationCredits|LigneDeveloppementSoldes|LigneEtatOperationComptesTiers|LigneEtatRealisationOperations|LigneFichesBudgetaires|LigneLivreAuxiliaire|LigneResultatBudgetaire|LigneResultatExecutionsBudgets|LigneSP_BilanActif|LigneSP_BilanPassif|LigneSP_BilanSynthetique|LignePresentationCroisee|LigneAffectationResultats|LigneResultatsExploitationConsolide|LigneTableauAmortissement|LigneGB_PrevisionRealisationBudgetaire|LigneRenseignementsAnnexesBalance|LigneBalanceValeursInactives|LigneTableauFondsRoulement|LigneTableauFondsRoulementTresorerie|LigneVariationTableauFondsRoulementTresorerie|LigneCreanceTableauFondsRoulementTresorerie|LigneDetteFinanciere|LigneEtatRestesRecouvrer|',concat('|',name($el),'|'))">
                            <xsl:attribute name="generated-id" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">
                                <xsl:value-of select="generate-id()"/>
                            </xsl:attribute>
                            <xsl:choose>
                                <xsl:when test="contains('|LigneFichesBudgetaires|',concat('|',name($el),'|'))">
                                    <xsl:attribute name="TypePiece" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">
                                        <xsl:choose>
                                            <xsl:when test="contains($el/parent::node()/EnteteFichesBudgetaires/@SectionNatureOperation[1],'RECETTE')">Titre</xsl:when>
                                            <xsl:when test="contains($el/parent::node()/EnteteFichesBudgetaires/@SectionNatureOperation[1],'DEPENSE')">Mandat</xsl:when>
                                        </xsl:choose>
                                    </xsl:attribute>
                                    <xsl:attribute name="TypeBordereau" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">
                                        <xsl:choose>
                                            <xsl:when test="string-length($el/@MtEmis) > 0">01</xsl:when>
                                            <xsl:when test="string-length($el/@MtAnn) > 0">02</xsl:when>
                                        </xsl:choose>
                                    </xsl:attribute>
                                    <xsl:if test="not(contains(@NumeroTypePiece,'Total'))">
                                        <xsl:variable name="id.pce.decoupe" select="tokenize($el/@NumeroTypePiece,' ')"/>
                                        <xsl:attribute name="NumPiece" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">
                                            <xsl:value-of select="$id.pce.decoupe[count($id.pce.decoupe)]"/>
                                        </xsl:attribute>
                                    </xsl:if>
                                    <xsl:choose>
                                        <xsl:when test="contains(lower-case($el/@NumeroTypePiece),'total') or $el/@NumeroTypePiece=''">
                                            <xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">1</xsl:attribute>
                                        </xsl:when>
                                        <xsl:otherwise>
                                            <xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">0</xsl:attribute>
                                        </xsl:otherwise>
                                    </xsl:choose>
                                </xsl:when>                                
                                <xsl:when test="contains('|LigneEtatOperationComptesTiers|',concat('|',name($el),'|'))">
                                    <xsl:choose>
                                        <xsl:when test="contains(lower-case($el/@NumCompte),'total') or $el/@NumCompte=''">
                                            <xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">1</xsl:attribute>
                                        </xsl:when>
                                        <xsl:otherwise>
                                            <xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">0</xsl:attribute>
                                        </xsl:otherwise>
                                    </xsl:choose>
                                </xsl:when>
                                <xsl:when test="contains('|LigneEtatRealisationOperations|',concat('|',name($el),'|'))">
                                    <xsl:choose>
                                        <xsl:when test="contains(lower-case($el/@IntituleArticleChapitre),'total') or contains(lower-case($el/@NumeroArticleChapitre),'total')">
                                            <xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">1</xsl:attribute>
                                        </xsl:when>
                                        <xsl:otherwise>
                                            <xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">0</xsl:attribute>
                                        </xsl:otherwise>
                                    </xsl:choose>
                                    <xsl:attribute name="Section" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added"><xsl:choose><xsl:when test="contains(upper-case($el/parent::node()/n:EnteteEtatRealisationOperations/@Section),'FONCTIONNEMENT') or contains(upper-case($el/parent::node()/n:EnteteConsommationCredits/@TypeSection),'EXPLOITATION')">FONC</xsl:when><xsl:otherwise>INV</xsl:otherwise></xsl:choose></xsl:attribute>
                                    <xsl:attribute name="Sens" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added"><xsl:choose><xsl:when test="contains(upper-case($el/parent::node()/n:EnteteEtatRealisationOperations/@DepRec),'PENSES')">DEP</xsl:when><xsl:otherwise>REC</xsl:otherwise></xsl:choose></xsl:attribute>
                                </xsl:when>
                                <xsl:when test="contains('|LigneLivreAuxiliaire|',concat('|',name($el),'|'))">
                                    <xsl:if test="(contains(lower-case($el/@TypeNumeroPiece),'total') and contains(lower-case($el/@TypeNumeroPiece),'reporter')) or contains(replace(lower-case($el/@TypeNumeroPiece),'é','e'),'anterieurs') or $el/@TypeNumeroPiece=''"><xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">1</xsl:attribute></xsl:if>
                                </xsl:when>
                                <xsl:when test="contains('|LigneBalanceValeursInactives|',concat('|',name($el),'|')) and string-length($el/@NumCompte) eq 0">
                                    <xsl:attribute name="empty" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">1</xsl:attribute>
                                </xsl:when>
                                <xsl:when test="contains('|LigneConsommationCredits|',concat('|',name($el),'|'))">
                                    <xsl:attribute name="Section" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added"><xsl:choose><xsl:when test="contains(upper-case($el/parent::node()/n:EnteteConsommationCredits/@TypeSection),'FONCTIONNEMENT') or contains(upper-case($el/parent::node()/n:EnteteConsommationCredits/@TypeSection),'EXPLOITATION')">FONC</xsl:when><xsl:otherwise>INV</xsl:otherwise></xsl:choose></xsl:attribute>
                                    <xsl:attribute name="Sens" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added"><xsl:choose><xsl:when test="contains(upper-case($el/parent::node()/n:EnteteConsommationCredits/@Sens),'DEP')">DEP</xsl:when><xsl:otherwise>REC</xsl:otherwise></xsl:choose></xsl:attribute>
                                </xsl:when>
                                <xsl:when test="contains('|LigneGB_PrevisionRealisationBudgetaire|',concat('|',name($el),'|')) and //n:Entete/n:Infos/n:CompteGestion/@V='CG21'">
                                    <xsl:choose>
                                        <xsl:when test="contains(lower-case(@LibTitre1),'titre') or contains(lower-case(@NumCompte),'titre')  or contains(lower-case(@LibTitre1),'total')">
                                            <xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">1</xsl:attribute>
                                            <xsl:if test="not(@LibelleCompteRubrique)"><xsl:attribute name="LibelleCompteRubrique" select="concat(normalize-space(@LibTitre1),'',normalize-space(@LibTitre2))"/></xsl:if>
                                        </xsl:when>
                                        <xsl:otherwise>
                                            <xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">0</xsl:attribute>
                                            <xsl:choose>
                                                <xsl:when test="not(@LibelleCompteRubrique)">
                                                    <xsl:choose>
                                                        <xsl:when test="matches(@LibTitre1,'[0-9]{2,}.*:')">
                                                            <xsl:attribute name="LibelleCompteRubrique" select="normalize-space(@LibTitre2)"/>
                                                        </xsl:when>
                                                        <xsl:otherwise>
                                                            <xsl:attribute name="LibelleCompteRubrique" select="concat(normalize-space(@LibTitre1),'',normalize-space(@LibTitre2))"/>    
                                                        </xsl:otherwise>
                                                    </xsl:choose>
                                                </xsl:when>
                                            </xsl:choose>
                                            
                                            <xsl:if test="exists(@LibTitre1) and matches(@LibTitre1,'[0-9]{2,}.*:')"><xsl:attribute name="NumCompte" select="replace(tokenize(@LibTitre1,':')[1],' ','')"/></xsl:if>
                                        </xsl:otherwise>
                                    </xsl:choose>
                                </xsl:when>
                            </xsl:choose>                            
                        </xsl:when>
                        <xsl:when test="contains('|LigneSolde|',concat('|',name($el),'|'))">
                            <xsl:choose>
                                <xsl:when test="string-length($el/@Tiers)!=0 or string-length($el/@ObjetPiece)!=0">
                                    <xsl:variable name="numPiecePricipale" select="$el/@NumPiece"/>
                                    <xsl:variable name="position" select="$el/position()"/>
                                    
                                    <xsl:variable name="diligences">
                                        <xsl:copy-of select="$el"/>
                                        <xsl:copy-of select="$el/following-sibling::node()[@Parent=$numPiecePricipale]"/>
                                    </xsl:variable>
                                    
                                    <xsl:variable name="nb.diligences" select="count($diligences//n:LigneSolde)"/>
                                    
                                    <xsl:variable name="diligence.first" select="$diligences//n:LigneSolde[(number($nb.diligences)-2)]"/>
                                    <xsl:variable name="diligence.last-1" select="$diligences//n:LigneSolde[(number($nb.diligences)-1)]"/>
                                    <xsl:variable name="diligence.last" select="$diligences//n:LigneSolde[number($nb.diligences)]"/>
                                    
                                    <xsl:if test="$nb.diligences >= 1">
                                        <xsl:variable name="this.diligence" select="$diligence.first/@Diligence"/>
                                        <xsl:attribute name="Diligence" select="$this.diligence"/>
                                        <xsl:attribute name="DateDiligence"><xsl:call-template name="date.in.string"><xsl:with-param name="chaine" select="$this.diligence"/></xsl:call-template></xsl:attribute>
                                    </xsl:if>
                                    <xsl:if test="$nb.diligences >= 2">
                                        <xsl:variable name="this.diligence" select="$diligence.last-1/@Diligence"/>
                                        <xsl:attribute name="Diligence2" select="$this.diligence"/>
                                        <xsl:attribute name="DateDiligence2"><xsl:call-template name="date.in.string"><xsl:with-param name="chaine" select="$this.diligence"/></xsl:call-template></xsl:attribute>
                                    </xsl:if>
                                    <xsl:if test="$nb.diligences >= 3">
                                        <xsl:variable name="this.diligence" select="$diligence.last/@Diligence"/>
                                        <xsl:attribute name="Diligence3" select="$this.diligence"/>
                                        <xsl:attribute name="DateDiligence3"><xsl:call-template name="date.in.string"><xsl:with-param name="chaine" select="$this.diligence"/></xsl:call-template></xsl:attribute>
                                    </xsl:if>
                                    
                                    <xsl:attribute name="NumPiece"><xsl:value-of select="tokenize(replace($el/@NumPiece,' ',''),'DatePEC-')[1]"/></xsl:attribute>
                                    <!--xsl:attribute name="DPEC"><xsl:call-template name="iso-date"><xsl:with-param name="datebrute" select="tokenize(replace($el/@NumPiece,' ',''),'DatePEC-')[2]"/></xsl:call-template></xsl:attribute-->
                                    <xsl:choose>
                                        <xsl:when test="contains(lower-case($el/@Tiers),'total') or $el/@Tiers=''">
                                            <xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">1</xsl:attribute>
                                        </xsl:when>
                                        <xsl:otherwise>
                                            <xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">0</xsl:attribute>
                                        </xsl:otherwise>
                                    </xsl:choose>
                                    <xsl:attribute name="generated-id" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">
                                        <xsl:value-of select="generate-id()"/>
                                    </xsl:attribute>
                                </xsl:when>
                                <xsl:otherwise>
                                    <xsl:attribute name="hidden" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">1</xsl:attribute>
                                </xsl:otherwise>
                            </xsl:choose>
                        </xsl:when>
                        <xsl:when test="contains('|LigneBalanceGenerale|',concat('|',name($el),'|'))">
                            <xsl:attribute name="generated-id" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">
                                <xsl:value-of select="generate-id()"/>
                            </xsl:attribute>
                            <xsl:choose>
                                <xsl:when test="string-length($el/@NumCompte)=0">
                                    <xsl:attribute name="NumCompte"><xsl:value-of select="tokenize($el/@LibelleReglementaire,'compte ')[2]"/></xsl:attribute>
                                </xsl:when>
                            </xsl:choose>   
                            <xsl:choose>
                                <xsl:when test="contains(lower-case($el/@LibelleReglementaire),'total')">
                                    <xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">1</xsl:attribute>
                                </xsl:when>
                                <xsl:otherwise>
                                    <xsl:attribute name="isNotShowResultat" namespace="http://projets.admisource.gouv.fr/xemelios/namespaces#added">0</xsl:attribute>
                                </xsl:otherwise>
                            </xsl:choose>
                        </xsl:when>
                        <!--xsl:when test="contains('|LignePresentationCroisee|',concat('|',name($el),'|'))">
                            <xsl:variable name="fonction" select="$el/preceding-sibling::node()[name()='LigneEntetePresentationCroisee']"/>
                        </xsl:when-->
                        <xsl:when test="contains('|EnteteFichesBudgetaires|',concat('|',name($el),'|'))">
                            <xsl:choose>
                                <xsl:when test="contains($el/@SectionNatureOperation,'RECETTE')"><xsl:attribute name="CodRD">R</xsl:attribute></xsl:when>
                                <xsl:when test="contains($el/@SectionNatureOperation,'DEPENSE')"><xsl:attribute name="CodRD">D</xsl:attribute></xsl:when>
                            </xsl:choose>
                            <!--xsl:attribute name="CodRD"><xsl:value-of select="normalize-space(distinct-values($el/parent::node()/n:LigneFichesBudgetaires[string-length(@CodRD)>0]/@CodRD)[1])"/></xsl:attribute-->
                        </xsl:when>                        
                        <!--xsl:when test="contains('|Tresorerie|',concat('|',name($el),'|'))">
                            <xsl:variable name="codique"><xsl:choose>
                                <xsl:when test="string-length(@Code) = 5"><xsl:value-of select="concat('0',@Code)"/></xsl:when>
                                <xsl:otherwise><xsl:value-of select="@Code"/></xsl:otherwise>
                            </xsl:choose>
                            </xsl:variable>
                            <xsl:attribute name="Codique" select="$codique"/>
                            <xsl:attribute name="Dept" select="substring($el/$codique,0,3)"/>
                        </xsl:when-->                        
                    </xsl:choose>
                    <!-- recursion -->
                    <xsl:for-each select="$el/*">
                        <xsl:call-template name="writeElement">
                            <xsl:with-param name="el" select="."/>
                        </xsl:call-template>
                    </xsl:for-each>
                </xsl:element>
            <!--/xsl:otherwise>
        </xsl:choose-->
        
    </xsl:template>
    
    <xsl:template name="iso-date">
        <xsl:param name="datebrute"/>
        <xsl:param name="separator">/</xsl:param>
        <xsl:variable name="date.tokenize" select="tokenize($datebrute,'/')"/>
        <xsl:choose>
            <xsl:when test="string-length($datebrute)=10 and not(contains($datebrute,'..'))">        
                <xsl:value-of select="$date.tokenize[3]"/>
                <xsl:value-of select="$separator"/>
                <xsl:value-of select="$date.tokenize[2]"/>
                <xsl:value-of select="$separator"/>
                <xsl:value-of select="$date.tokenize[1]"/>
            </xsl:when>
            <xsl:when test="string-length($datebrute)=8 and not(contains($datebrute,'..'))">
                <xsl:choose>
                    <xsl:when test="number($date.tokenize[3])>74">19<xsl:value-of select="$date.tokenize[3]"/></xsl:when>
                    <xsl:otherwise>20<xsl:value-of select="$date.tokenize[3]"/></xsl:otherwise>
                </xsl:choose>                
                <xsl:value-of select="$separator"/>
                <xsl:value-of select="$date.tokenize[2]"/>
                <xsl:value-of select="$separator"/>
                <xsl:value-of select="$date.tokenize[1]"/>
            </xsl:when>
            <xsl:when test="string-length($datebrute)>0 and contains($datebrute,'..')">
                <xsl:value-of select="$datebrute"/>
            </xsl:when>
        </xsl:choose>
    </xsl:template>
    
    <xsl:template name="date.in.string">
        <xsl:param name="chaine"/>
        <xsl:if test="string-length(normalize-space($chaine)) > 0">
            
            <xsl:variable name="date" select="tokenize(normalize-space($chaine),'/')"/>
            <xsl:variable name="day" select="substring($date[1],string-length($date[1])-1,2)"/>
            
            <xsl:call-template name="iso-date">
                <xsl:with-param name="datebrute"><xsl:value-of select="$day"/>/<xsl:value-of select="$date[2]"/>/<xsl:value-of select="normalize-space(replace($date[3],'-',''))"/></xsl:with-param>
                <xsl:with-param name="separator">-</xsl:with-param>
            </xsl:call-template>
        </xsl:if>
    </xsl:template>
    
    <!--xsl:template name="format-date"-->
        <!-- 01/01/2007 vers 2007-01-01 -->
        <!--xsl:param name="texte"/>
        <xsl:choose>
            <xsl:when test="string-length($texte) eq 0"/>
            <xsl:when test="string-length($texte) eq 4"><xsl:value-of select="$texte"/>-01-01</xsl:when>
            <xsl:when test="string-length($texte) eq 10">
                <xsl:variable name="elements" select="tokenize($texte,'/')"/>
                <xsl:value-of select="concat($elements[3],'-',$elements[2],'-',$elements[1])"/>
            </xsl:when>
            <xsl:otherwise><xsl:value-of select="$texte"/></xsl:otherwise>
        </xsl:choose>
        
        </xsl:template-->
   
</xsl:stylesheet>
