Advertisement
raks13

Untitled

Feb 24th, 2014
361
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  3. <xsl:output method="xml" encoding="utf-8" indent="yes" />
  4.  
  5. <xsl:template name="css">
  6.     <style>
  7.         <xsl:attribute name="type">
  8.             <xsl:text>text/css</xsl:text>
  9.         </xsl:attribute>
  10.         <xsl:text>table{border-collapse: collapse;font-size: 11px;font-family: Arial;border-spacing: 0px;}caption{text-align:left;}td,th{border: 1px solid black;}.date{width:100px;white-space:nowrap;}.number{text-align:right;}#footer{font-size:11px;}#signature{font-size:11px;}</xsl:text>
  11.        
  12.     </style>
  13. </xsl:template>
  14.  
  15. <xsl:template name="header">
  16.     <xsl:param name="title" />
  17.     <xsl:param name="name" />
  18.     <xsl:param name="surname" />
  19.     <xsl:param name="text" />
  20.    
  21.     <p><xsl:value-of select="$title" /><xsl:text> </xsl:text> <xsl:value-of select="$name" /><xsl:text> </xsl:text> <xsl:value-of select="$surname" /><xsl:text>,</xsl:text></p><!-- mettre maj a la premiere lettre -->
  22.    
  23.     <p>Veuillez trouver ci-dessous <xsl:value-of select="$text" /></p>
  24.    
  25. </xsl:template>
  26.  
  27. <xsl:template name="footer">
  28.    
  29.     <div id="footer">
  30.     <p><xsl:text>Cet email vous est envoy&#233; automatiquement par le syst&#232;me de prestations ICTCG.</xsl:text></p>
  31.     <p><xsl:text>En cas de question, n'h&#233;sitez pas &#224; nous contacter.</xsl:text></p>
  32.     </div>
  33.    
  34. </xsl:template>
  35.  
  36. <xsl:template name="signature">
  37.     <div id="signature">
  38.     <p>---</p>
  39.     <p>ICTCG s.a / GWEB sprl</p>
  40.     <p>http://www.ictcg.com / http://www.gweb.be</p>
  41.     <p>+352.27.86.21.00 / +32.4.345.05.42</p>
  42.     </div>
  43.    
  44. </xsl:template>
  45.  
  46. </xsl:stylesheet>
  47.  
  48. ------
  49.  
  50. <?xml version="1.0" encoding="UTF-8"?>
  51. <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  52.     xmlns:xs="http://www.w3.org/2001/XMLSchema">
  53. <xsl:import href="generate-mail-template.xsl" />
  54. <xsl:output method="xml" encoding="utf-8" indent="yes" />
  55.  
  56. <!-- take a list of event and calculate the global amount -->
  57. <xsl:template name="sum">
  58.     <xsl:param name="events" />
  59.     <xsl:param name="sum" select="0" />
  60.    
  61.     <xsl:variable name="curr" select="$events[1]" />
  62.    
  63.     <xsl:choose>
  64.         <!-- If there's at least one event on the list, we calculate its duration and give it the the sum variable -->
  65.         <!-- and call this template until there's no more event on the list -->
  66.         <xsl:when test="$curr">
  67.             <xsl:variable name="start" select="$curr/start/datetime" />
  68.             <xsl:variable name="end" select="$curr/end/datetime" />
  69.             <xsl:variable name="starthour" select="hours-from-dateTime($start)" />
  70.             <xsl:variable name="endhour" select="hours-from-dateTime($end)" />
  71.            
  72.             <xsl:variable name="eventduration" select="$sum + ($endhour - $starthour)" />
  73.            
  74.             <xsl:call-template name="sum">
  75.                 <xsl:with-param name="events" select="$events[position() &gt; 1]" />
  76.                 <xsl:with-param name="sum" select="$eventduration" />
  77.             </xsl:call-template>
  78.         </xsl:when>
  79.         <!-- If there's no more event we return the calculated sum -->
  80.         <xsl:otherwise>
  81.             <xsl:value-of select="$sum" />
  82.         </xsl:otherwise>
  83.     </xsl:choose>
  84. </xsl:template>
  85.  
  86. <!-- called template in generate-main -->
  87. <xsl:template name="leaves">
  88.     <leaves>
  89.         <!-- to be detected by the servlet, mails must be in an 'emails' node -->
  90.         <emails>
  91.         <email>
  92.             <head>
  93.                 <subject><xsl:text>ICTCG - </xsl:text><xsl:value-of select="/workfile/query/@year" /><xsl:text>-</xsl:text><xsl:value-of select="/workfile/query/@month" /><xsl:text> - Timesheet - Leaves</xsl:text></subject>
  94.                 <from><xsl:value-of select="/workfile/query/parameter[@name='sender-mail']/@value" /></from>
  95.                 <recipient><xsl:value-of select="/workfile/query/customer[@internal='true']/email[@type='production']/@address" /></recipient>
  96.                 <cc><xsl:value-of select="/workfile/query/customer[@internal='true']/email[@type='production']/@cc" /></cc>
  97.             </head>
  98.             <body>
  99.                 <xsl:attribute name="type">
  100.                     <xsl:text>text/xhtml</xsl:text>
  101.                 </xsl:attribute>
  102.                 <html>
  103.                     <head>
  104.                         <xsl:call-template name="css" />
  105.                     </head>
  106.                     <body>
  107.                         <!-- call the template header to write the header of mail body (see generate-mail-template.xsl) -->
  108.                         <xsl:variable name="text">
  109.                             <xsl:text>le tableau journalier des absences, ainsi que le tableau r&#233;capitulatif pour le mois:</xsl:text>
  110.                         </xsl:variable>
  111.                         <xsl:call-template name="header">
  112.                             <xsl:with-param name="title" select="/workfile/query/customer[@internal='true']/email[@type='admin']/@title" />
  113.                             <xsl:with-param name="name" select="/workfile/query/customer[@internal='true']/email[@type='admin']/@name" />
  114.                             <xsl:with-param name="surname" select="/workfile/query/customer[@internal='true']/email[@type='admin']/@surname" />
  115.                             <xsl:with-param name="text" select="$text" />
  116.                         </xsl:call-template>
  117.                        
  118.                         <!-- table for the daily recap -->
  119.                         <table>
  120.                             <caption><i>R&#233;capitulatif journalier</i></caption>
  121.                             <tr>
  122.                                 <th>Date</th>
  123.                                 <th>Jour</th>
  124.                                 <th>Consultant</th>
  125.                                 <th>Client</th>
  126.                                 <th>Type</th>
  127.                                 <th class="number">Dur&#00E9;e (h)</th>
  128.                             </tr>
  129.                            
  130.                             <!-- to sort correctly by date, first, we write in several tr the recap -->
  131.                             <!-- then we apply a template to sort correctly this result -->
  132.                             <xsl:variable name="vPass1">
  133.                             <unsortedLines>
  134.                             <!-- for each customer where is considered like internal and where their task has an amount of hours bigger than 0 -->
  135.                             <xsl:for-each select="/workfile/timesheet/customers/customer[@id=/workfile/query/customer[@internal='true']/@id]/task[@hours &gt; 0]">
  136.                             <xsl:for-each select="consultant">
  137.                                 <xsl:variable name="customer" select="../.." />
  138.                                 <xsl:variable name="task" select=".." />
  139.                                 <xsl:variable name="consultant" select="." />
  140.                                 <!-- we're going to calculate the amount of hours for a task considered all events for this day -->
  141.                                 <xsl:for-each select="/workfile/calendar-list/calendar[@id=$consultant/@calendar-id]
  142.                                                         /items/event[upper-case(summary)=$task/@code]">
  143.                                     <xsl:variable name="position" select="position()" />
  144.                                     <xsl:variable name="startDate" select="substring-before(start/datetime,'T')" />
  145.                                     <xsl:variable name="task-code" select="summary" />
  146.                                     <!-- 'previousevents' is used to know if this event is the first of the day for a task -->
  147.                                     <!-- if it's not, we've already calculate the amount of this task for this day and show it on the table -->
  148.                                     <xsl:variable name="previousevents" select="preceding-sibling::event[$startDate=substring-before(start/datetime,'T')
  149.                                                                                             and upper-case(summary)=$task-code
  150.                                                                                             and position() &lt; $position]" />
  151.                                     <xsl:variable name="events" select="/workfile/calendar-list/calendar[@id=$consultant/@calendar-id]
  152.                                                                                     /items/event[upper-case(summary)=$task/@code
  153.                                                                                     and substring-before(start/datetime,'T')=$startDate]" />
  154.                                     <xsl:variable name="result">
  155.                                         <xsl:call-template name="sum">
  156.                                             <xsl:with-param name="events" select="$events" />
  157.                                         </xsl:call-template>
  158.                                     </xsl:variable>
  159.                                     <xsl:if test="not($previousevents or $previousevents='')">
  160.                                         <xsl:if test="$result &gt; 0">
  161.                                         <tr>
  162.                                             <td class="startdate"><xsl:value-of select="$startDate" /></td>
  163.                                             <td><xsl:value-of select="custom-elements/day-of-week[@lang='FR']" /></td>
  164.                                             <td><xsl:value-of select="$consultant/@code" /></td>
  165.                                             <td><xsl:value-of select="$customer/@id" /></td>
  166.                                             <td><xsl:value-of select="upper-case(summary)" /></td>
  167.                                             <td style="text-align:right;"><xsl:value-of select="format-number($result, '#.00')" /></td>
  168.                                         </tr>
  169.                                         </xsl:if>
  170.                                     </xsl:if>
  171.                                 </xsl:for-each>
  172.                             </xsl:for-each>
  173.                             </xsl:for-each>
  174.                             </unsortedLines>
  175.                             </xsl:variable>
  176.                             <!-- we call the sorting template -->
  177.                             <!-- and transform the result in 'unsortedLines -->
  178.                             <xsl:apply-templates select="$vPass1/*" />
  179.                            
  180.                         </table>
  181.                         <p></p>
  182.                         <!-- recap for the month -->
  183.                         <table>
  184.                             <xsl:attribute name="border">
  185.                                 <xsl:text>1</xsl:text>
  186.                             </xsl:attribute>
  187.                             <caption><i>R&#233;sum&#233; du mois</i></caption>
  188.                             <tr>
  189.                                 <th>Client</th>
  190.                                 <th>Consultant</th>
  191.                                 <th>Type</th>
  192.                                 <th class="number">Dur&#233;e (h)</th>
  193.                             </tr>
  194.                            
  195.                             <!-- for each customer where is considered like internal and where their task has an amount of hours bigger than 0 -->
  196.                             <xsl:for-each select="/workfile/timesheet/customers/customer[@id=/workfile/query/customer[@internal='true']/@id]
  197.                                                     /task[@hours &gt; 0]">
  198.                                 <xsl:variable name="taskcodetwo" select="./@code" />
  199.                                 <xsl:for-each select="consultant">
  200.                                 <xsl:variable name="cons" select="." />
  201.                                 <xsl:variable name="event-list" select="/workfile/calendar-list/calendar[@id=$cons/@calendar-id]/items
  202.                                                                             /event[upper-case(summary)=$taskcodetwo]" />
  203.                                     <xsl:variable name="total">
  204.                                         <xsl:call-template name="sum">
  205.                                             <xsl:with-param name="events" select="$event-list" />
  206.                                         </xsl:call-template>
  207.                                     </xsl:variable>
  208.                                 <!-- we only show table line for tasks bigger than 0 -->
  209.                                 <xsl:if test="$total &gt; 0">
  210.                                 <tr>
  211.                                     <td><xsl:value-of select="../../@id" /></td>
  212.                                     <td><xsl:value-of select="@code" /></td>
  213.                                     <td><xsl:value-of select="../@code" /></td>
  214.                                     <td class="number"><xsl:value-of select="format-number($total, '#.00')" /></td>
  215.                                 </tr>
  216.                                 </xsl:if>
  217.                                 </xsl:for-each>
  218.                             </xsl:for-each>
  219.                         </table>
  220.                         <p></p>
  221.                         <xsl:call-template name="footer" />
  222.                         <xsl:call-template name="signature" />
  223.                            
  224.                     </body>
  225.                 </html>
  226.             </body>
  227.         </email>
  228.         </emails>
  229.     </leaves>
  230.  
  231. </xsl:template>
  232.  
  233. <!-- sorting template -->
  234. <xsl:template match="unsortedLines">
  235.     <xsl:perform-sort select="*">
  236.         <xsl:sort select="day-from-date(xs:date(td[@class='startdate']))" />
  237.     </xsl:perform-sort>
  238. </xsl:template>
  239.  
  240. </xsl:stylesheet>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement