mirexS
mirexS

Reputation: 45

xml transposed mntnce bills sorted data display as html table in xslt (II)

Following xml file data: (try to keep the whole explanations/description as brief as possible)

<upkeepList>
 <upkShare month_year="03/17" post_dte="16/04/17" due="02/05/17"> 
  <OpngBlnce></OpngBlnce>
  <mnthCrrntAmnt>55</mnthCrrntAmnt>
  <Rcpt dte="10/05/17" No="5815">
    <amnt>40</amnt>
    <descrpt>"03/17-04/17" upkeep 1</descrpt>
  </Rcpt>
  <Rcpt dte="15/05/17" No="5825">
    <amnt>9</amnt>
    <descrpt>"03/17-04/17" upkeep 2</descrpt>
  </Rcpt> 
 </upkShare>
 <upkShare month_year="01/17-02/17" post_dte="17/03/17" due="03/04/17">
  <OpngBlnce></OpngBlnce>  <!-- starting from this sect. this tag can be omitted as it'a calculated field -->
  <mnthCrrntAmnt>74</mnthCrrntAmnt>
   <Rcpt dte="30/03/17" No="5783">
     <amnt>50</amnt>
     <descrpt>"01/17-02/17" upkeep</descrpt>
   </Rcpt>
  </upkShare>
 <upkShare month_year="11/16-12/16" post_dte="20/01/17" due="04/02/17"> 
  <OpngBlnce>22</OpngBlnce>
  <mnthCrrntAmnt>77</mnthCrrntAmnt> 
  <Rcpt dte="26/01/17" No="5725">
    <amnt>22</amnt>
    <descrpt>"11/16" upkeep </descrpt>
  </Rcpt>
  <Rcpt dte="26/01/17" No="5726">
    <amnt>41</amnt>
    <descrpt>"12/16" upkeep </descrpt>
  </Rcpt>
 </upkShare> 
<upkShare month_year="07/17" post_dte="16/08/17" due="31/08/17">
  <OpngBlnce></OpngBlnce>
  <mnthCrrntAmnt>54</mnthCrrntAmnt>
  <Rcpt dte="28/07/17" No="6002">
    <amnt>33</amnt>
    <descrpt>"07/17" upkeep 1</descrpt>
  </Rcpt>
  <Rcpt dte="02/08/17" No="6017">
    <amnt>12</amnt>
    <descrpt>"07/17" upkeep 2</descrpt>
  </Rcpt>
 </upkShare>
<upkShare month_year="04/17-05/17" post_dte="05/06/17" due="30/06/17">
  <OpngBlnce></OpngBlnce>
  <mnthCrrntAmnt>64</mnthCrrntAmnt>
  <Rcpt dte="14/06/17" No="5858">
    <amnt>37</amnt>
    <descrpt>"05/17" upkeep 1</descrpt>
  </Rcpt>
  <Rcpt dte="18/06/17" No="5863">
    <amnt>21</amnt>
    <descrpt>"05/17" upkeep 2</descrpt>
  </Rcpt>
 </upkShare>
 <upkShare month_year="06/17" post_dte="16/07/17" due="30/07/17">
  <OpngBlnce></OpngBlnce>
  <mnthCrrntAmnt>45</mnthCrrntAmnt>
  <Rcpt dte="28/07/17" No="5948">
    <amnt>38</amnt>
    <descrpt>"06/17" upkeep</descrpt>
  </Rcpt>
 </upkShare> 
</upkeepList>

and throgh some xslt transform like this (wrongly) one

<xsl:template match="upkeepList">
  <xsl:variable name="ukshrtbl"> <!-- ukshrtbl = upkp shrs table-->
   <tr><th>MntncPrd</th><th>PostDte</th><th>OpngBlnc</th><th>MnthlyCrrntAmnt</th><th>PymntTotlAmnt</th><th>Amount Payed</th><th>RmngPmnt</th><th>Due</th></tr>
    <xsl:call-template name="Prcss"> <!-- Prcss = Prcssing -->
        <xsl:with-param name="srtdDte" as="element()*" select="upkShare => sort((),function($shr) { replace($shr/@month_year,'([0-9]{2})/([0-9]{2})','$3$2$1')})"/>
    </xsl:call-template> 
 </xsl:variable> 
  <xsl:variable name="swpd-tble" select="mf:trsp-tbl($ukshrtbl/tr)"/> <!-- swap-table /swpd-tble -->
  <table id="dtaTbl" border="1" style="border-collapse:collapse">
    <tr><th>CrrtNbr</th>
    <xsl:for-each select="1 to count($swpd-tble[1]/*) - 1">
       <xsl:if test="position() mod 2 = 0">  <!--  smthng .. -->     
         <td rowspan="5" colspan="2" ></td> <!-- rowspan="5" --> 
        </xsl:if>
      <td>{position()}</td>  
   </xsl:for-each>
  </tr>
  <xsl:copy-of select="$swpd-tble"/> <!-- <xsl:sequence select="$swpd-tble"/> -->
    
  </table>
</xsl:template>
  <!-- funct for swapping lines with cols -->
<xsl:function name="mf:trsp-tbl" as="element(tr)*"> <xsl:param name="rows" as="element(tr)*"/>
 <xsl:for-each select="1 to count($rows[1]!*)">
  <xsl:variable name="col" select="."/>
   <tr><th>{$rows[1]/*[current()]}</th> <!-- here smwhere - thnk - colspan/rowspan logic should be placed -->
    <xsl:for-each select="2 to count($rows/*[1])">
      <td>{$rows[current()]!*[$col]}</td>
    </xsl:for-each>
   </tr>
 </xsl:for-each>
</xsl:function> 
 <xsl:template name="Prcss"><xsl:param name="srtdDte"/> <xsl:param name="sdts" select="$srtdDte[1]"/> <!-- $sdts - evrthng should be prfxd with it -->
    <xsl:param name="ob" select="if($sdts/OpngBlnce/text()) then number($sdts/OpngBlnce) else 0"/> <!-- OB -> $ob "$sdts/soldInit" -->
    <xsl:variable name="mcamnt" select="if($sdts/mnthCrrntAmnt/text()) then number($sdts/mnthCrrntAmnt) else 0"/>   
    <xsl:variable name="ptamnt" select="$ob + $mcamnt"/> <!-- ptamnt = payment total amount -->
    <xsl:variable name="apyd" select="$sdts/sum(Rcpt/number(concat('0',amnt)))"/>  <!-- apyd = amount payed (rcpts amnt sum) -->
    <xsl:variable name="cb" select="$ptamnt - $apyd"/> <!-- cb = closing balance -->
  
    <tr><td><xsl:value-of select="$sdts/@month_year"/></td>
      <td><xsl:value-of select="$sdts/@post_dte"/></td>
    <td><xsl:value-of select="$ob"/></td> 
      <td><xsl:value-of select="$sdts/mnthCrrntAmnt"/></td>
      <td><xsl:value-of select="$ptamnt"/></td> <!-- gss from here one should do the rcpts display ...-->
      <td><xsl:value-of select="$apyd"/> [-]</td>
      <td><xsl:value-of select="$cb"/></td> <!-- $cb -->
    <td><xsl:value-of select="$sdts/@due"/></td> <!-- due date - till here .. (on rcpt displaying) -->
  </tr> 
    <xsl:for-each select="$sdts//Rcpt">
      <tr> <td/> <th>Rcpt No</th><th>Rcpt Dte</th><th>Rcpt Amnt</th><th>Dscrpt</th></tr>
    <tr><td><xsl:value-of select="@No"/></td><td><xsl:value-of select="@dte"/></td>
      <td><xsl:value-of select="amnt"/></td> <td><xsl:value-of select="descrpt"/></td></tr>
  </xsl:for-each>  
    <xsl:if test="count($srtdDte) > 1">
      <xsl:call-template name="Prcss"> <xsl:with-param name="srtdDte" select="$srtdDte[position() > 1]"/>
      <xsl:with-param name="ob" select="$cb"/>
    </xsl:call-template>
   </xsl:if>   
 </xsl:template>

one need to SORTED transposed display that xml data (through xslt2/xslt3 processor) as html table like in this picture: pic1

As also mentioned through some other quite similar posts, there are a couple things on taking into account:

Upvotes: 0

Views: 114

Answers (2)

jechaviz
jechaviz

Reputation: 551

If understood well, this stylesheet does the job. I get this output (screenshot) sample_output

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  exclude-result-prefixes="xs"
  version="2.0">
    <!-- Template to format date -->
    <xsl:template name="format-date">
        <xsl:param name="d"/>
        <xsl:variable name="year" select="substring($d, 7, 2)"/>
        <xsl:variable name="month" select="substring($d, 4, 2)"/>
        <xsl:variable name="day" select="substring($d, 1, 2)"/>
        <xsl:variable name="century" select="if (xs:integer($year) > 50) then '19' else '20'"/>
        <xsl:value-of select="concat($day, '/', $month, '/', $century, $year)"/>
    </xsl:template>

    <!-- Template match for the main document -->
    <xsl:template match="/">
        <html>
            <head>
                <style>
                    table {
                        border-collapse: collapse;
                        width: 100%;
                    }
                    th, td {
                        border: 1px solid black;
                        padding: 8px;
                        text-align: center;
                    }
                </style>
            </head>
            <body>
                <table border="1">
                    <tr>
                        <th>CrrntNmbr</th>    
                        <xsl:for-each select="/upkeepList/upkShare">
                            <xsl:sort select="@month_year" data-type="text" order="ascending" />
                            <td><xsl:value-of select="position()"/></td>
                            <td/><xsl:for-each select="Rcpt"><td/></xsl:for-each>
                        </xsl:for-each>
                    </tr>
                    
                    <tr>
                        <th>MntncPrd</th> 
                        <xsl:for-each select="/upkeepList/upkShare">
                            <xsl:sort select="@month_year" data-type="text" order="ascending" />
                            <td><xsl:value-of select="@month_year"/></td>
                            <td/><xsl:for-each select="Rcpt"><td/></xsl:for-each>
                        </xsl:for-each>
                    </tr>
                    
                    <tr>
                        <th>PostDate</th>    
                        <xsl:for-each select="/upkeepList/upkShare">
                            <xsl:sort select="@month_year" data-type="text" order="ascending" />
                            <td><xsl:call-template name="format-date">
                                <xsl:with-param name="d" select="@post_dte"/>
                            </xsl:call-template>
                            </td>
                            <td/><xsl:for-each select="Rcpt"><td/></xsl:for-each>
                        </xsl:for-each>
                    </tr>
                    
                    <tr>
                        <th>OpngBlnce</th> 
                        <xsl:for-each select="/upkeepList/upkShare">
                            <xsl:sort select="@month_year" data-type="text" order="ascending" />
                            <td><xsl:value-of select="position()" /></td>
                            <td/><xsl:for-each select="Rcpt"><td/></xsl:for-each>
                        </xsl:for-each>
                    </tr>

                    <tr>
                        <th>MnthlyCrrntAmnt</th> 
                        <xsl:for-each select="/upkeepList/upkShare">
                            <xsl:sort select="@month_year" data-type="text" order="ascending" />
                            <td><xsl:value-of select="mnthCrrntAmnt"/></td>
                            <td/><xsl:for-each select="Rcpt"><td/></xsl:for-each>
                        </xsl:for-each>
                    </tr>

                    <tr>
                        <th>PymntTotlAmnt</th> 
                        <xsl:for-each select="/upkeepList/upkShare">
                            <xsl:sort select="@month_year" data-type="text" order="ascending" />
                            <td><xsl:value-of select="sum(Rcpt/amnt)"/></td>
                            <td>RcptNr</td>
                            <xsl:for-each select="Rcpt">
                                <td><xsl:value-of select="@No"/></td>
                            </xsl:for-each>
                        </xsl:for-each>
                    </tr>

                    <tr>
                        <th>Amount Payed</th> 
                        <xsl:for-each select="/upkeepList/upkShare">
                            <xsl:sort select="@month_year" data-type="text" order="ascending" />
                            <td><xsl:value-of select="sum(Rcpt/amnt)"/>[-]</td>
                            <td>RcptDte</td>
                            <xsl:for-each select="Rcpt">
                                <td><xsl:call-template name="format-date">
                                    <xsl:with-param name="d" select="@dte"/>
                                </xsl:call-template>
                                </td>
                            </xsl:for-each>
                        </xsl:for-each>
                    </tr>

                    <tr>
                        <th>RmngPmnt</th> 
                        <xsl:for-each select="/upkeepList/upkShare">
                            <xsl:sort select="@month_year" data-type="text" order="ascending" />
                            <td><xsl:value-of select="position()" /></td>
                            <td>RcptAmnt</td>
                            <xsl:for-each select="Rcpt">
                                <td><xsl:value-of select="amnt"/></td>
                            </xsl:for-each>
                        </xsl:for-each>
                    </tr>

                    <tr>
                        <th>Due</th> 
                        <xsl:for-each select="/upkeepList/upkShare">
                            <xsl:sort select="@month_year" data-type="text" order="ascending" />
                            <td><xsl:call-template name="format-date">
                                <xsl:with-param name="d" select="@due"/>
                            </xsl:call-template>
                            </td>
                            <td>Dscrpt</td>
                            <xsl:for-each select="Rcpt">
                                <td><xsl:value-of select="descrpt"/></td>
                            </xsl:for-each>
                        </xsl:for-each>
                    </tr>
                </table>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

Html Output:

<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><style>
                    table {
                        border-collapse: collapse;
                        width: 100%;
                    }
                    th, td {
                        border: 1px solid black;
                        padding: 8px;
                        text-align: center;
                    }
                </style></head>
   <body>
      <table border="1">
         <tr>
            <th>CrrntNmbr</th>
            <td>1</td>
            <td></td>
            <td></td>
            <td>2</td>
            <td></td>
            <td></td>
            <td></td>
            <td>3</td>
            <td></td>
            <td></td>
            <td></td>
            <td>4</td>
            <td></td>
            <td></td>
            <td>5</td>
            <td></td>
            <td></td>
            <td></td>
            <td>6</td>
            <td></td>
            <td></td>
            <td></td>
         </tr>
         <tr>
            <th>MntncPrd</th>
            <td>01/17-02/17</td>
            <td></td>
            <td></td>
            <td>03/17</td>
            <td></td>
            <td></td>
            <td></td>
            <td>04/17-05/17</td>
            <td></td>
            <td></td>
            <td></td>
            <td>06/17</td>
            <td></td>
            <td></td>
            <td>07/17</td>
            <td></td>
            <td></td>
            <td></td>
            <td>11/16-12/16</td>
            <td></td>
            <td></td>
            <td></td>
         </tr>
         <tr>
            <th>PostDate</th>
            <td>17/03/2017</td>
            <td></td>
            <td></td>
            <td>16/04/2017</td>
            <td></td>
            <td></td>
            <td></td>
            <td>05/06/2017</td>
            <td></td>
            <td></td>
            <td></td>
            <td>16/07/2017</td>
            <td></td>
            <td></td>
            <td>16/08/2017</td>
            <td></td>
            <td></td>
            <td></td>
            <td>20/01/2017</td>
            <td></td>
            <td></td>
            <td></td>
         </tr>
         <tr>
            <th>OpngBlnce</th>
            <td>1</td>
            <td></td>
            <td></td>
            <td>2</td>
            <td></td>
            <td></td>
            <td></td>
            <td>3</td>
            <td></td>
            <td></td>
            <td></td>
            <td>4</td>
            <td></td>
            <td></td>
            <td>5</td>
            <td></td>
            <td></td>
            <td></td>
            <td>6</td>
            <td></td>
            <td></td>
            <td></td>
         </tr>
         <tr>
            <th>MnthlyCrrntAmnt</th>
            <td>74</td>
            <td></td>
            <td></td>
            <td>55</td>
            <td></td>
            <td></td>
            <td></td>
            <td>64</td>
            <td></td>
            <td></td>
            <td></td>
            <td>45</td>
            <td></td>
            <td></td>
            <td>54</td>
            <td></td>
            <td></td>
            <td></td>
            <td>77</td>
            <td></td>
            <td></td>
            <td></td>
         </tr>
         <tr>
            <th>PymntTotlAmnt</th>
            <td>50</td>
            <td>RcptNr</td>
            <td>5783</td>
            <td>49</td>
            <td>RcptNr</td>
            <td>5815</td>
            <td>5825</td>
            <td>58</td>
            <td>RcptNr</td>
            <td>5858</td>
            <td>5863</td>
            <td>38</td>
            <td>RcptNr</td>
            <td>5948</td>
            <td>45</td>
            <td>RcptNr</td>
            <td>6002</td>
            <td>6017</td>
            <td>63</td>
            <td>RcptNr</td>
            <td>5725</td>
            <td>5726</td>
         </tr>
         <tr>
            <th>Amount Payed</th>
            <td>50[-]</td>
            <td>RcptDte</td>
            <td>30/03/2017</td>
            <td>49[-]</td>
            <td>RcptDte</td>
            <td>10/05/2017</td>
            <td>15/05/2017</td>
            <td>58[-]</td>
            <td>RcptDte</td>
            <td>14/06/2017</td>
            <td>18/06/2017</td>
            <td>38[-]</td>
            <td>RcptDte</td>
            <td>28/07/2017</td>
            <td>45[-]</td>
            <td>RcptDte</td>
            <td>28/07/2017</td>
            <td>02/08/2017</td>
            <td>63[-]</td>
            <td>RcptDte</td>
            <td>26/01/2017</td>
            <td>26/01/2017</td>
         </tr>
         <tr>
            <th>RmngPmnt</th>
            <td>1</td>
            <td>RcptAmnt</td>
            <td>50</td>
            <td>2</td>
            <td>RcptAmnt</td>
            <td>40</td>
            <td>9</td>
            <td>3</td>
            <td>RcptAmnt</td>
            <td>37</td>
            <td>21</td>
            <td>4</td>
            <td>RcptAmnt</td>
            <td>38</td>
            <td>5</td>
            <td>RcptAmnt</td>
            <td>33</td>
            <td>12</td>
            <td>6</td>
            <td>RcptAmnt</td>
            <td>22</td>
            <td>41</td>
         </tr>
         <tr>
            <th>Due</th>
            <td>03/04/2017</td>
            <td>Dscrpt</td>
            <td>"01/17-02/17" upkeep</td>
            <td>02/05/2017</td>
            <td>Dscrpt</td>
            <td>"03/17-04/17" upkeep 1</td>
            <td>"03/17-04/17" upkeep 2</td>
            <td>30/06/2017</td>
            <td>Dscrpt</td>
            <td>"05/17" upkeep 1</td>
            <td>"05/17" upkeep 2</td>
            <td>30/07/2017</td>
            <td>Dscrpt</td>
            <td>"06/17" upkeep</td>
            <td>31/08/2017</td>
            <td>Dscrpt</td>
            <td>"07/17" upkeep 1</td>
            <td>"07/17" upkeep 2</td>
            <td>04/02/2017</td>
            <td>Dscrpt</td>
            <td>"11/16" upkeep </td>
            <td>"12/16" upkeep </td>
         </tr>
      </table>
   </body>
</html>

Test: http://xsltransform.net/jyfDTGR/1

Upvotes: 0

jdweng
jdweng

Reputation: 34431

I used Powershell to create the HTML. I changed columns to make more readable.

using assembly System.Xml.Linq
$input_filename = 'c:\temp\test.xml'
$output_filename = 'c:\temp\test.html'

$doc = [System.Xml.Linq.XDocument]::Load($input_filename)
$upkShares = $doc.Descendants('upkShare')

$table = [System.Collections.ArrayList]::new()

foreach($upkShare in $upkShares)
{
   $month_year = $upkShare.Attribute('month_year').Value 
   $startMonth = [DateTime]::ParseExact($month_year.Split('-')[0], 'MM/yy', $null)
   $post_dte = $upkShare.Attribute('post_dte').Value 
   $due = $upkShare.Attribute('due').Value
   $OpngBlnce = [decimal]$upkShare.Element('OpngBlnce').Value
   if($OpngBlnce -ne '') { $balance = $OpngBlnce }
   $mnthCrrntAmnt = [decimal]$upkShare.Element('mnthCrrntAmnt').value
 #  $pymntTotalAmnt = $OpngBlnce + $mnthCrrntAmnt
   $amountPayed = 0   

   $newRow = [pscustomobject]@{
       'Start Month' = $startMonth
       'Month/Year' = ''
       'Post Date' = ''
       OpngBlnce = ''
       MnthlyCrrntAmount = ''
       PymntTotalAmnt = ''
       'Amount Payed' = ''
       RmngPmnt = ''
       Due = ''
    }
   $newPayment = $true
   foreach($rcpt in $upkShare.Elements('Rcpt'))
   {
      $newRowClone = $newRow | Select-Object -Property *;
      if($newPayment -eq $true)
      {
         $newRowClone.'Month/Year' = $month_year
         $newRowClone.'Start Month' = $startMonth
         $newRowClone.'Post Date' = $post_dte
         $newRowClone.MnthlyCrrntAmount = $mnthCrrntAmnt
         $newRowClone.Due = $due
      }
      $dte = $rcpt.Attribute('dte').Value
      $No = $rcpt.Attribute('No').Value
      $amnt = [decimal]$rcpt.Element('amnt').Value
      $descrpt = $rcpt.Element('descrpt').Value
      $amountPayed += $amnt

      $newRowClone | Add-Member -NotePropertyName RecptNr -NotePropertyValue $No;
      $newRowClone | Add-Member -NotePropertyName RecptDte -NotePropertyValue $dte;
      $newRowClone | Add-Member -NotePropertyName RecptAmnt -NotePropertyValue $amnt;
      $newRowClone | Add-Member -NotePropertyName Descrpt -NotePropertyValue $descrpt;

      $table.Add($newRowClone) | out-null 
      $newPayment = $false
   }
   $newRowClone.'Amount Payed' = $amountPayed
}
# Sort table by start Date
$table = $table | sort-Object -Property 'Start Month'

#Add Current Number to each row
$number = 0
foreach($row in $table)
{
    $recptAmnt = $row.RecptAmnt
    if($number -eq 1) {$OpngBlnce = $balance}
    if($row.MnthlyCrrntAmount -ne '')
    {
       $number += 1
       $row | Add-Member -NotePropertyName CurrntNumber -NotePropertyValue $number;
       $row.OpngBlnce = $OpngBlnce
       $pymntTotalAmnt = $OpngBlnce + $row.MnthlyCrrntAmount
       $row.PymntTotalAmnt = $pymntTotalAmnt
    }
    if($row.'Amount Payed' -ne '')
    {
       $rmngPmnt = $pymntTotalAmnt - $row.'Amount Payed'
       $row.RmngPmnt = $rmngPmnt
       $OpngBlnce = $rmngPmnt
    }    
}
$table | ConvertTo-Html | Out-File $output_filename

Here is results

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>HTML TABLE</title>
</head><body>
<table>
<colgroup><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/><col/></colgroup>
<tr><th>Start Month</th><th>Month/Year</th><th>Post Date</th><th>OpngBlnce</th><th>MnthlyCrrntAmount</th><th>PymntTotalAmnt</th><th>Amount Payed</th><th>RmngPmnt</th><th>Due</th><th>RecptNr</th><th>RecptDte</th><th>RecptAmnt</th><th>Descrpt</th><th>CurrntNumber</th></tr>
<tr><td>11/1/2016 12:00:00 AM</td><td>11/16-12/16</td><td>20/01/17</td><td>0</td><td>77</td><td>77</td><td></td><td></td><td>04/02/17</td><td>5725</td><td>26/01/17</td><td>22</td><td>&quot;11/16&quot; upkeep </td><td>1</td></tr>
<tr><td>11/1/2016 12:00:00 AM</td><td></td><td></td><td></td><td></td><td></td><td>63</td><td>14</td><td></td><td>5726</td><td>26/01/17</td><td>41</td><td>&quot;12/16&quot; upkeep </td><td></td></tr>
<tr><td>1/1/2017 12:00:00 AM</td><td>01/17-02/17</td><td>17/03/17</td><td>22</td><td>74</td><td>96</td><td>50</td><td>46</td><td>03/04/17</td><td>5783</td><td>30/03/17</td><td>50</td><td>&quot;01/17-02/17&quot; upkeep</td><td>2</td></tr>
<tr><td>3/1/2017 12:00:00 AM</td><td>03/17</td><td>16/04/17</td><td>46</td><td>55</td><td>101</td><td></td><td></td><td>02/05/17</td><td>5815</td><td>10/05/17</td><td>40</td><td>&quot;03/17-04/17&quot; upkeep 1</td><td>3</td></tr>
<tr><td>3/1/2017 12:00:00 AM</td><td></td><td></td><td></td><td></td><td></td><td>49</td><td>52</td><td></td><td>5825</td><td>15/05/17</td><td>9</td><td>&quot;03/17-04/17&quot; upkeep 2</td><td></td></tr>
<tr><td>4/1/2017 12:00:00 AM</td><td>04/17-05/17</td><td>05/06/17</td><td>52</td><td>64</td><td>116</td><td></td><td></td><td>30/06/17</td><td>5858</td><td>14/06/17</td><td>37</td><td>&quot;05/17&quot; upkeep 1</td><td>4</td></tr>
<tr><td>4/1/2017 12:00:00 AM</td><td></td><td></td><td></td><td></td><td></td><td>58</td><td>58</td><td></td><td>5863</td><td>18/06/17</td><td>21</td><td>&quot;05/17&quot; upkeep 2</td><td></td></tr>
<tr><td>6/1/2017 12:00:00 AM</td><td>06/17</td><td>16/07/17</td><td>58</td><td>45</td><td>103</td><td>38</td><td>65</td><td>30/07/17</td><td>5948</td><td>28/07/17</td><td>38</td><td>&quot;06/17&quot; upkeep</td><td>5</td></tr>
<tr><td>7/1/2017 12:00:00 AM</td><td></td><td></td><td></td><td></td><td></td><td>45</td><td>58</td><td></td><td>6017</td><td>02/08/17</td><td>12</td><td>&quot;07/17&quot; upkeep 2</td><td></td></tr>
<tr><td>7/1/2017 12:00:00 AM</td><td>07/17</td><td>16/08/17</td><td>58</td><td>54</td><td>112</td><td></td><td></td><td>31/08/17</td><td>6002</td><td>28/07/17</td><td>33</td><td>&quot;07/17&quot; upkeep 1</td><td>6</td></tr>
</table>
</body></html>

Upvotes: 0

Related Questions