<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
	<xsl:output method="xml" indent="yes" encoding="utf-8"/>

	<xsl:decimal-format name="european" decimal-separator="," grouping-separator="."/>

	<xsl:param name="mode"/>

	<xsl:variable name="Rev">
		<!-- Revision -->
		<xsl:value-of select="substring(translate('$Revision$', '$ ', ''), 10)"/>
	</xsl:variable>

	<xsl:template match="opdracht">
		<!-- SIDB Onderhoudsopdracht 'insbou' Variant 'Basismodel010' versie 001 (releasedatum 7-7-2014) -->
		<MaintenanceInstruction>
			<!-- SIDB description - Nummer ter identificatie van een bericht. Mandatory, (C17) -->
			<!-- Voorbeeldformaat: MAR24/1@dd-mm-jjjj hh:mm:ss -->
			<MessageNumber><xsl:value-of select="melding/stdmelding/discipline/srtdiscipline/prefix"/><xsl:value-of select="melding/key"/>/<xsl:value-of select="bedrijfopdr_volgnr"/>@<xsl:value-of select="//header/dateTime"/></MessageNumber>
			<!-- SIDB - Datum waarop een bericht is aangemaakt. Mandatory, formaat CCYY-MM-DD -->
			<MessageDate><xsl:value-of select="//header/dateYear"/>-<xsl:value-of select="//header/dateMonth"/>-<xsl:value-of select="//header/dateDay"/></MessageDate>
			<!-- SIDB description - Tijdstip waarop het bericht is aangemaakt. Optional, formaat hhmm -->
			<MessageTime><xsl:value-of select="substring-after(//header/dateTime,' ')"/></MessageTime>
			<!-- SIDB - Partij die de opdracht geeft, Mandatory node -->
			<Buyer>
				<!-- SIDB - Global Location Number (GLN), een wereldwijd uniek nummer ter identificatie van een partij of lokatie. Optioneel!?!?!? N(13) -->
				<GLN><xsl:apply-templates select="melding/voor/afdeling/bedrijf/leverancier_nr"/></GLN>
				<!-- SIDB - Tekstveld met de naam van de partij of lokatie. Optioneel, C(50) -->
				<Name><xsl:value-of select="melding/voor/afdeling/bedrijf/naam"/></Name>
				<!-- SIDB - Tekstveld met de plaatsnaam van het adres van de partij of lokatie. Optioneel, C(35) -->
				<StreetAndNumber><xsl:value-of select="melding/voor/afdeling/bedrijf/bezoek_adres"/></StreetAndNumber>
				<!-- SIDB - Tekstveld met de plaatsnaam van het adres van de partij of lokatie. Optioneel, C(35) -->
				<City><xsl:value-of select="melding/voor/afdeling/bedrijf/bezoek_plaats"/></City>
				<!-- SIDB - Tekstveld met de postcode van het adres van een partij of lokatie. Optioneel, C(9) -->
				<PostalCode><xsl:value-of select="melding/voor/afdeling/bedrijf/bezoek_postcode"/></PostalCode>
				<!-- SIDB - Code van het land van het adres van de partij of lokatie. Optioneel, C(2) -->
				<!-- <Country></Country> -->
				<!-- SIDB - Gegevens over een afdeling of persoon van de partij waarmee contact kan worden opgenomen via telefoon, fax of email. Optioneel -->
					<ContactInformation>
						<!-- SIDB - Tekstveld met de naam van een persoon waarmee contact kan worden opgenomen. Optioneel, C(35) -->
						<ContactPersonName><xsl:value-of select="melding/voor/afdeling/bedrijf/contact_persoon"/></ContactPersonName>
						<!-- SIDB - Nummer waarmee via de telefoon contact kan worden opgenomen. Optioneel, C(20) -->
						<PhoneNumber><xsl:value-of select="melding/voor/afdeling/bedrijf/contact_telefoon"/></PhoneNumber>
						<!-- SIDB - Tekstveld met het elektronische adres waarmee via e-mail contact kan worden opgenomen. Optioneel, C(254) -->
						<EmailAddress><xsl:value-of select="melding/voor/afdeling/bedrijf/email"/></EmailAddress>
					</ContactInformation>
			</Buyer>
			<!-- SIDB - Partij die onderdeel is van de opdrachtgever maar elders is gevestigd, Optionele node -->
			<!-- Onbekend en daarmee nu niet relevant, laten we dus leeg -->
			<!-- <Affiliate></Affiliate> -->
			<!-- SIDB - Aannemer, Partij die opdracht gaat uitvoeren. Mandatory -->
			<Contractor>
				<!-- SIDB - Global Location Number (GLN), een wereldwijd uniek nummer ter identificatie van een partij of lokatie (hier de aannemer). Optioneel!?!?!? N(13) -->
				<GLN><xsl:apply-templates select="uitvoerende/bedrijf/leverancier_nr"/></GLN>
				<!-- SIDB - Tekstveld met de naam van de partij of lokatie. Optioneel, C(50) -->
				<Name><xsl:value-of select="uitvoerende/bedrijf/naam"/></Name>
				<!-- SIDB - Tekstveld met de plaatsnaam van het adres van de partij of lokatie. Optioneel, C(35) -->
				<StreetAndNumber><xsl:value-of select="uitvoerende/bedrijf/bezoek_adres"/></StreetAndNumber>
				<!-- SIDB - Tekstveld met de plaatsnaam van het adres van de partij of lokatie. Optioneel, C(35) -->
				<City><xsl:value-of select="uitvoerende/bedrijf/bezoek_plaats"/></City>
				<!-- SIDB - Tekstveld met de postcode van het adres van een partij of lokatie. Optioneel, C(9) -->
				<PostalCode><xsl:value-of select="uitvoerende/bedrijf/bezoek_postcode"/></PostalCode>
				<!-- SIDB - Code van het land van het adres van de partij of lokatie. Optioneel, C(2) -->
				<!-- <Country></Country> -->
			</Contractor>
			<!-- SIDB -	Niveau in het bericht waar de opdrachten worden gespecificeerd. Mandatory-->
			<InstructionData>
				<!-- SIDB -	Nummer ter identificatie van een opdracht binnen een bericht. Mandatory, C(17)-->
				<!-- Intern opdrachtnummer vanuit Broker/koppelsysteem (= Mareon), toegekend door de zender van het bericht, ontvanger vermeldt dit nummer op pakbon en/of factuur. Verplicht, C(17)-->
				<!-- Bedoeld voor system-2-system communicatie -->
				<InstructionNumber><xsl:value-of select="melding/stdmelding/discipline/srtdiscipline/prefix"/><xsl:value-of select="melding/key"/>/<xsl:value-of select="bedrijfopdr_volgnr"/></InstructionNumber>
				<!-- SIDB -	Extra nummer ter verdere identificatie van een opdracht of opdrachtonderdeel. Optioneel, C(17)-->
				<!-- Hier wordt het opdrachtnummer van Tobias (123456.1) of TobiasAX (IOR12345) neergezet. -->
				<InstructionSubNumber><xsl:value-of select="opdr_id"/></InstructionSubNumber>
				<!-- FSN#31496: Meldingnummer erbij (voor plannen Plegt-Vos) -->
				<!-- Meldingnummer in het bronsysteem, toegekend door de zender van het bronbericht, ontvanger zou bij InstructionNumber kunnen relateren aan dit InstructionSubNumber -->
				<!-- 1 Meldingnummer kan 'n' OrderNumbers hebben, vanaf de 2e order bij een call kan ontvanger ervoor kiezen om dit te koppelen aan planning, beter gezegd geen expliciet planning -->
				<!-- Oftewel shortcut in proces: indien de 1e opdracht al is ingepland bij handyman 'X', dan kan in de systeemkoppeling ervoor worden gekozen om de 2e opdracht bij hetzelfde meldingnummer op dezelfde datum/dezelfde handyman in te plannen -->
				<!-- Hiervoor bestaat (nog!) geen SidB node-->
				<!-- TIP: voorlopig kan het MAR-nummer (voor de slash) als meldingnummer worden hanteert, deze volstaat ook als kapstok voor meldingnummer -->
				<!-- <InstructionSubNumber><xsl:value-of select="melding/externnr"/></InstructionSubNumber> -->
				<!-- SIDB -	Code waarmee de opdracht nader wordt gespecificeerd. Codes zijn 500, 501, 505 en 506. Optioneel, C(3)-->
				<!-- Onbekend, hier niet ingevuld-->
				
				<!-- <InstructionType></InstructionType> -->
				<!-- SIDB -	Datum waarop de opdracht is gegeven (aangemaakt). Optioneel, CCYYMMDD -->
				<InstructionDate><xsl:value-of select="datumbegin/jaar"/>-<xsl:value-of select="datumbegin/maand"/>-<xsl:value-of select="datumbegin/dag"/></InstructionDate>
				<!-- SIDB -	Tijd waarop de opdracht is gegeven (aangemaakt). Optioneel, hh:mm:ss -->
				<InstructionTime><xsl:value-of select="datumbegin/tijd"/>:00</InstructionTime>
				<!-- SIDB -	Tekstveld met de inhoud van aanvullende informatie. Optioneel, C(70) -->
				<!-- <FreeText></FreeText> -->
				<!-- SIDB -	Gegevens waarmee gerefereerd wordt aan een contract. Optioneel -->
				<ContractReference></ContractReference>
				<!-- SIDB -	Gegevens over de te onderhouden locatie. Optioneel!?!?!? -->
				<MaintenanceLocation>
						<!-- SIDB -	Uniek nummer ter identificatie van een woningcorporatie complex. Optioneel, C(17) -->
						<!-- <ComplexNumber></ComplexNumber> -->
						<!-- SIDB -	Uniek nummer ter identificatie van een pand. Optioneel, C(17) -->
						<!-- <PremisesNumber></PremisesNumber> -->
						<!-- SIDB -	Uniek nummer ter identificatie van een vastgoedeenheid. Optioneel, C(17) -->
						<!-- <RealEstateUnitNumber></RealEstateUnitNumber>-->
						<!-- SIDB -	Tekstveld met straatnaam en huisnummer van het adres van de lokatie. Mandatory, C(35) -->
						<!-- Melding kenmerk key 2 is adres -->
						<StreetAndNumber><xsl:value-of select="melding/kenmerk[@key='2']"/></StreetAndNumber>
						<!-- SIDB -	Tekstveld met de plaatsnaam van het adres van de lokatie. Mandatory, C(35) -->
						<!-- Melding kenmerk key 4 is plaatsnaam -->
						<City><xsl:value-of select="melding/kenmerk[@key='4']"/></City>
						<!-- Postcode niet in SidB hier gedefinieerd, dus maar ff uitcommentarieren -->
						<!-- Melding kenmerk key 3 is postcode -->
						<!-- <PostalCode><xsl:value-of select="melding/kenmerk[@key='3']"/></PostalCode> -->
						<!-- SIDB: Tekstveld met de beschrijving van de ruimte waar het onderhoud moet plaats vinden, Optioneel, C(35). -->
						<!-- Melding kenmerk key 6 is objectomschrijving, hier maar voorlopig in gebruiken aan gebrek aan beter -->
						<!-- In SidB-insbou003 bestaat hiervoor veld 'Locationdescription' (onder node afleveradres) en was beter geweest -->
						<Area><xsl:value-of select="melding/kenmerk[@key='6']"/></Area>
						<!-- SIDB -	Tekstveld met de naam van de huismeester of huurder die de onderhoudsmelding heeft gedaan. Optioneel, C(35) -->
						<!-- Melding kenmerk key 1 is huurder -->
						<ContactPersonName><xsl:value-of select="melding/kenmerk[@key='1']"/></ContactPersonName>
						<!-- SIDB -	Nummer waarmee via de telefoon contact kan worden opgenomen. Optioneel, C(20) -->
						<!-- Melding kenmerk key 5 is telefoon van huurder -->
      			<PhoneNumber1><xsl:value-of select="melding/kenmerk[@key='5']"/></PhoneNumber1>
      			<!--
      			<PhoneNumber2></PhoneNumber2>
      			<EmailAddress1></EmailAddress1>
      			<EmailAddress2></EmailAddress2>
      			-->
    		</MaintenanceLocation>
    		<!-- SIDB - Gegevens over de datum, tijd of periode van levering van onderhoud. -->
		    <AppointmentDateTimeInformation>
			    <!-- Datum waarop de opdracht uitgevoerd moet worden, Optioneel, formaat CCYYMMDD -->
					<!-- <RequiredDeliveryDate></RequiredDeliveryDate> -->
					<!-- Tijdstip waarop de opdracht uitgevoerd moet worden, Optioneel, formaat hhmm -->
					<!-- <RequiredDeliveryTime></RequiredDeliveryTime> -->
					<!-- Levertijdvak, gegevens over periode waarbinnen opdracht uitgevoerd/geleverd kan worden, Optioneel -->
					<DeliveryTimeFrame>
						<!-- SIDB - Datum vanaf wanneer het onderhoud geleverd kan worden. Mandatory, formaat CCYYMMDD  -->
						<DeliveryDateEarliest><xsl:value-of select="datumbegin/jaar"/>-<xsl:value-of select="datumbegin/maand"/>-<xsl:value-of select="datumbegin/dag"/></DeliveryDateEarliest>
						<!-- Tijdstip op de vroegste leverdatum vanaf wanneer het onderhoud geleverd kan worden. Optioneel, formaat hhmm  -->
						<!-- <DeliveryTimeEarliest></DeliveryTimeEarliest> -->
						<!-- SIDB - Datum tot en met wanneer het onderhoud geleverd kan worden. Mandatory, formaat CCYYMMDD  -->
						<DeliveryDateLatest><xsl:value-of select="einddatum/jaar"/>-<xsl:value-of select="einddatum/maand"/>-<xsl:value-of select="einddatum/dag"/></DeliveryDateLatest>
						<!-- SIDB - Tijdstip op de laatste leverdatum tot wanneer het onderhoud geleverd kan worden. Optioneel, formaat hhmm  -->
						<!-- <DeliveryTimeLatest></DeliveryTimeLatest> -->
					</DeliveryTimeFrame>
		    </AppointmentDateTimeInformation>
				<!-- SIDB - Niveau in het bericht waar de onderhoudsdetails worden gespecificeerd, Optioneel -->
				<InstructionLine>
					<!-- SIDB - Regelnummer ter identificatie van een regel. Mandatory, N(6) -->
					<!-- Er is - tot nu toe - altijd 1 regelnummer binnen de opdracht, standaard dus 1 -->
		      <LineNumber>1</LineNumber>
		      <!-- SIDB - Het aantal eenheden van werk geidentificeerd door de normprijscode. Mandatory, N(15) -->
		      <Quantity>1</Quantity>
		      <!-- SIDB - Code van de meeteenheid waarin het aantal is uitgedrukt. Mandatory, C(3) -->
		      <MeasurementUnitQuantity>PCE</MeasurementUnitQuantity>
		      <!-- SIDB - Code waarmee het uit te voeren werk wordt aangegeven. Optioneel, C(17) -->
		      <!-- <NormPriceCode></NormPriceCode> -->
		      <!-- SIDB - Tekstveld met een korte nadere specificatie van de het werk geidentificeerd door de normprijscode. Optioneel, C(35) -->
		      <ShortDescription><xsl:value-of select="substring(normalize-space(omschrijving),1,35)"/></ShortDescription>
		      <!-- SIDB - Tekstveld met een lange nadere specificatie van de het werk geidentificeerd door de normprijscode.. Optioneel, C(70) -->
		      <LongDescription><xsl:value-of select="omschrijving"/></LongDescription>
		      <!-- SIDB - Voor de rest optioneel, onderstaande gegevens nog niet bekend via Mareon -->
		      
		      <!--
		      <FreeText></FreeText>
		      <PriceInformation>
		        <Price></Price>
		        <PriceBase>
		          <NumberOfUnitsInPriceBasis></NumberOfUnitsInPriceBasis>
		          <MeasureUnitPriceBasis></MeasureUnitPriceBasis>
		          <PriceBaseDescription></PriceBaseDescription>
		        </PriceBase>
		      </PriceInformation>
		      -->
		      
		    </InstructionLine>
			</InstructionData>
		</MaintenanceInstruction>
	</xsl:template>

	<xsl:template match="leverancier_nr">
		<!-- Lengte check: moet exact 13 tekens zijn. Indien anders, dan niet meesturen -->
		<xsl:if test="string-length(.) = 13">
			<xsl:value-of select="."/>
		</xsl:if>
  </xsl:template>


	<xsl:template match="facilitor">
		<xsl:apply-templates select="opdracht"/>
	</xsl:template>

	<xsl:template match="/">
		<xsl:choose>
			<xsl:when test="$mode='getExtension'">
				<xsl:element name="format">
					<xsl:element name="extension">xml</xsl:element>
				</xsl:element>
			</xsl:when>
			<xsl:otherwise>
				<xsl:apply-templates select="facilitor"/>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>

</xsl:stylesheet>
