#include vhLib.Macro
#define HTML(%v) $ZCVT(%v,"O","HTML")
#define Attrib(%n,%v) $$PARAMFILL^XMLWRITE(%n,$$$HTML(%v))
#define AttribInvers(%v) $S($G(%arInvers("DItem",%v,1))=1:$$$Attrib("invers",1), 1:"")
; Prod.GAMeta.EM.Item
XMLWrite ; Parameters: DItem,DevObj,Taal,Opties,XSLURL
#define IsList(%v) $$IsList^vhLib(%v)
Do XMLBuildArrayInvers(DItem)
If (..Code?1(1"PARAM",1"PARAMFORMULE",1"PARAMOBJ")) Do
. If ..Code="PARAMOBJ" Do TAGWRITE^XMLWRITE(DevObj,"WAARDE",DItem.Get("ObjectID"),$$$Attrib("class",DItem.Get("ClassName")))
. Else Do TAGWRITE^XMLWRITE(DevObj,"WAARDE",$$xmlwFormatValue(DItem.Get("Val")),$$$Attrib("unit",""))
. Do TAGWRITE^XMLWRITE(DevObj,"PROGLABEL",DItem.Get("ProgLabel"))
. Do XMLFabrTekst("FabrTekst")
. Do XMLAddTags
Else If ..Code="KST" Do
. ; KST Niet opnemen in XML
Else Do
. Do XMLAddTags
Quit
xmlwFormatValue(ItemVal)
Quit:(ItemVal="")||('$$$IsList(.ItemVal)) ItemVal
Quit $$$LCVT(.ItemVal)
; Prod.GAMeta.EM.ItemPR
XMLWritePR ; Parameters: DItem,DevObj,Taal,Opties,XSLURL
New PRNr,Prod
Do XMLBuildArrayInvers(DItem)
Do xmlwPRBasis
Do XMLAddTags
Quit
; Prod.GAMeta.EM.ItemPR1DIM
XMLWritePR1DIM ; Parameters: DItem,DevObj,Taal,Opties,XSLURL
#define ProptPR(%v1,%v2) $$$LCase(##class(Prod.Product).GetPropViaNr(%v1,%v2))
New PRNr,Prod
Do XMLBuildArrayInvers(DItem)
Do xmlwPRBasis
Do TAGWRITE^XMLWRITE(DevObj,"DIMHF",DItem.Get("DimHF"),$$$Attrib("unit",$$$ProptPR(PRNr,"HFEenheid")),$$$AttribInvers("DimHF"))
Do WRITELN^XMLWRITE(DevObj)
Do XMLAddTags
Quit
XMLFabrGroep
#define Delim "\"
New XMLGroepen,XMLGroep,i
Set XMLGroepen=DItem.EvalTemplAuto("FabrGroep")
Set XMLGroep=$P(XMLGroepen,$$$Delim,1)
Do XMLFabrGroepAndSortTags(DevObj,XMLGroep,1)
;For i=1:1:$L(XMLGroepen,$$$Delim) Do
;. Set XMLGroep=$P(XMLGroepen,$$$Delim,i)
;. Do TAGWRITE^XMLWRITE(DevObj,"GROEP",XMLGroep,$$$Attrib("OMS",$$$UCASE($E(XMLGroep,1,99))))
;. Do XMLFabrGroepAndSortTags(DevObj,XMLGroep,1)
Quit
XMLFabrGroepAndSortTags(DevObj,pdlGroepSort,blnWithSort)
#define Delim ";"
Set XMLGroep=$P(pdlGroepSort,$$$Delim,1)
Set SortKey=$P(pdlGroepSort,$$$Delim,2) ; _DItem.Get("PRNr") ; _(DItem.Code)
Do TAGWRITE^XMLWRITE(DevObj,"GROEP",XMLGroep,$$$Attrib("OMS",$$$UCase(XMLGroep)))
Do:(blnWithSort)&&($L(SortKey)) TAGWRITE^XMLWRITE(DevObj,"SORT",SortKey)
Quit
XMLWriteExtra ; Parameters: DItem,DevObj,ParamKey
;d WL^vhDBG("XMLWriteExtra : "_ParamKey_" - "_DItem)
Do XMLFabrTekst(ParamKey)
Quit
XMLFabrTekst(ParamKey)
Quit:('DItem.Autos.IsDefined(ParamKey))
New lbTekst
Set lbTekst=DItem.EvalTemplAuto(ParamKey)
Quit:(lbTekst="")
If $$$IsList(lbTekst) Do
. Do XMLFabrGroepAndSortTags(DevObj,$LG(lbTekst,1),1)
. Do TAGWRITE^XMLWRITE(DevObj,"LANGTEKST",$LG(lbTekst,2))
. Do:($LD(lbTekst,3)) TAGWRITE^XMLWRITE(DevObj,"DIMHF",$LI(lbTekst,3),$$$AttribInvers("DimHF"))
. Do:($LD(lbTekst,4)) TAGWRITE^XMLWRITE(DevObj,"QTY",$LI(lbTekst,4),$$$AttribInvers("Qty"))
. Do:($LD(lbTekst,5)) TAGWRITE^XMLWRITE(DevObj,"MAGAZIJN",$LI(lbTekst,5))
. Do:($LD(lbTekst,6)) TAGWRITE^XMLWRITE(DevObj,"KORTTEKST",$LI(lbTekst,6))
Else Do
. ; alleen LangTekst
. Do TAGWRITE^XMLWRITE(DevObj,"LANGTEKST",lbTekst)
Do WRITELN^XMLWRITE(DevObj)
Quit
XMLAddTags
Quit:('DItem.Autos.IsDefined("XMLTags"))
New lbTags,i
Set lbTags=DItem.EvalTemplAuto("XMLTags")
Quit:(lbTags="")
For i=1:1:$LL(lbTags) Do:($LD(lbTags,i))
. Do WRITE^XMLWRITE(DevObj,$LI(lbTags,i))
. Do WRITELN^XMLWRITE(DevObj)
Quit
xmlwPRBasis
#define IsValidPR(%v) (%v?2.6N)
New KMVal
If DItem.Autos.IsDefined("FabrTekst") Do Quit
. Do XMLFabrTekst("FabrTekst")
; Else
Do XMLFabrGroep
Set PRNr=DItem.Get("PRNr")
Do TAGWRITE^XMLWRITE(DevObj,"PRNR",PRNr)
Do TAGWRITE^XMLWRITE(DevObj,"LANGTEKST",$S($$$IsValidPR(PRNr):$$xmlwBuildLangTekst, 1:"["_DItem.Label_"]"))
Do TAGWRITE^XMLWRITE(DevObj,"KORTTEKST",DItem.Get("KTekst"))
Do xmlwKORTTEKSTfmt
Do TAGWRITE^XMLWRITE(DevObj,"QTY",DItem.Get("Qty"),$$$Attrib("unit","st"),$$$AttribInvers("Qty"))
Do WRITELN^XMLWRITE(DevObj)
Quit
xmlwBuildLangTekst()
; Als FabrOms niet bestaat, dan ..GetLangTekst()
; Als FabrOms wel bestaat, dan EvalTemplAuto("FabrOms")
; FabrOms kan (lees: zal meestal) de exec "Meta.GetOmsViaKenm()" bevatten
Quit:(DItem.IsFixed("PRNr")) "### "_..GetLangTekst(PRNr,DItem,1)_" ###"
Quit:('DItem.Autos.IsDefined("FabrOms")) ..GetLangTekst(PRNr,DItem,1)
; Else: LangTekst opbouwen adh. van FabrOms ; (??? OOK indien geen product gevonden ???)
New txt
Set txt=DItem.EvalTemplAuto("FabrOms")
Quit txt
xmlwKORTTEKSTfmt
#define MarkInvers(%v) ""_%v_""
If DItem.IsFixed("PRNr") Do
. Set KTxtFmt=DItem.Get("KTekst")
. Set:($L(KTxtFmt)) KTxtFmt=$$$MarkInvers(KTxtFmt)
Else Do
. Set KTxtFmt=$$xmlwBuildKTekst(DItem)
Do:($L(KTxtFmt)) TAGWRITE^XMLWRITE(DevObj,"KORTTEKSTfmt",$$$Replace(KTxtFmt," "," "))
Quit
xmlwBuildKTekst(DItem)
Quit:(+$G(%arInvers("DItem","KTekst"))<1) ""
; Build KortTekst + apply INVERS when necessary
New KTxt,i
Set KTxt=DItem.Get("KTekst")
Quit:(KTxt="") ""
Do @("xmlwBuildINVktxt"_DItem.Label)
Set Self=""
Quit $G(KTxt)
xmlwBuildINVktxtPRBDHO
Set:($G(%arInvers("DItem","KTekst","LD"))=1) $E(KTxt,1,8)=$$$MarkInvers($E(KTxt,1,8))
Quit
xmlwBuildINVktxtPRLALI ; idem voor Links/Rechts
xmlwBuildINVktxtPRLARE
Set i=$L(KTxt)
Set:($G(%arInvers("DItem","KTekst","KL"))=1) $E(KTxt,i-3,i)=$$$MarkInvers($E(KTxt,i-3,i))
Set:($G(%arInvers("DItem","KTekst","DC"))=1) $E(KTxt,10,11)=$$$MarkInvers($E(KTxt,10,11))
Set:($G(%arInvers("DItem","KTekst","ZW"))=1) $E(KTxt,1,9)=$$$MarkInvers($E(KTxt,1,9))
Quit
xmlwBuildINVktxtPRCPLI ; idem voor Links/Rechts
xmlwBuildINVktxtPRCPRE
Set:($G(%arInvers("DItem","KTekst","DK"))=1) $E(KTxt,1,9)=$$$MarkInvers($E(KTxt,1,9))
Quit
XMLBuildArrayInvers(DItem)
#define DItemGetKenmVal(%v) DItem.MetaItem.GetKenmVal(%v,DItem.Get("PRNr"),DItem.Get("KenmGrp"))
#define IsFixedPR DItem.IsFixed("PRNr")
Quit:(DItem.Product.MetaStruct.Code'="TBX")
Kill %arInvers("DItem")
Quit:(DItem.Label="")
Quit:($TEXT(@("xmlwArrayInvers"_DItem.Label))="")
; Else: Build KortTekst + determine if INVERS must be applied
New Self,tmpAr
Set Self=DItem
Do @("xmlwArrayInvers"_DItem.Label)
Do xmlwSubNodeInversAny(.tmpAr,"KTekst")
Merge %arInvers("DItem")=tmpAr
Quit
xmlwSubNodeInversAny(tmpAr,Node) ; tmpAr als .local doorgeven
; Counts the number of TRUE conditions for this Node
; tmpAr("KTekst","KL")=1
; tmpAr("KTekst","ZW")=1
; ==> Set tmpAr("KTekst")=2
New Key,dummy
Set tmpAr(Node)=0
Set Key=""
For Set Key=$O(tmpAr(Node,Key)) Quit:(Key="") Set:($G(tmpAr(Node,Key))=1) dummy=$INCREMENT(tmpAr(Node))
Quit
; Labels via INDIRECT : xmlwArrayInvers...
xmlwArrayInversPRBDHO ; Bodem (Hout)
Set tmpAr("KTekst","LD")=($$$DItemGetKenmVal("LadeDiepte")'=500)
Set tmpAr("FabrOms","Kleur")=('$$$IsFixedPR)&&(($$$DItemGetKenmVal("Kleur")'="LG")||(DItem.Val("KB")'="LG"))
Set tmpAr("DimHF",1)=1
Quit
xmlwArrayInversPRRUGHS ; Rug (Hout)
Set tmpAr("FabrOms","Kleur")=('$$$IsFixedPR)&&($$$DItemGetKenmVal("Kleur")'="LG")
Quit
xmlwArrayInversPRRUGLI ; Rughouders
xmlwArrayInversPRRUGRE ; idem voor Links/Rechts/V1
xmlwArrayInversPRRUGV1
Set tmpAr("FabrOms","Kleur")=('$$$IsFixedPR)&&($$$DItemGetKenmVal("Kleur")'="MG")
Quit
xmlwArrayInversPRSCRHO ; Bodem (Hout)
Set tmpAr("Qty",1)=(DItem.Val("DK")'=80)
Quit
xmlwArrayInversPRLALI ; LadeZijkant
xmlwArrayInversPRLARE ; idem voor Links/Rechts
Set tmpAr("KTekst","KL")=($$$DItemGetKenmVal("Kleur")'="MG")
Set tmpAr("KTekst","ZW")=($$$DItemGetKenmVal("ZijwandHoogte")'="M")
Set tmpAr("KTekst","DC")=($$$DItemGetKenmVal("Design")?1(1"I",1"MA",1"F"))
Set tmpAr("FabrOms","Kleur" )=('$$$IsFixedPR)&&(tmpAr("KTekst","KL"))
Set tmpAr("FabrOms","Design" )=('$$$IsFixedPR)&&(tmpAr("KTekst","DC"))
Set tmpAr("FabrOms","ZijwandHoogte")=('$$$IsFixedPR)&&(tmpAr("KTekst","ZW"))
Quit
xmlwArrayInversPRCPLI ; CorpusProfielen
xmlwArrayInversPRCPRE ; idem voor Links/Rechts
Set tmpAr("KTekst","DK")=($$$DItemGetKenmVal("DraagKracht")'=30)||($$$DItemGetKenmVal("Opties")'["B")
Quit
xmlwArrayInversPRRL ; Reling
Set tmpAr("FabrOms","Kleur")=('$$$IsFixedPR)&&($$xmlwRLKleurAfwijkend($$$DItemGetKenmVal("Kleur"),DItem.Val("KL")))
Quit
xmlwArrayInversPRBSD2 ; BOXSIDE Dubbelwandig
xmlwArrayInversPRBSELI ; idem voor BOXSIDE Enkelwandig -Links/-Rechts
xmlwArrayInversPRBSERE
Set tmpAr("FabrOms","Kleur")=('$$$IsFixedPR)&&($$xmlwBSKleurAfwijkend($$$DItemGetKenmVal("Kleur"),DItem.Val("KL")))
Quit
xmlwArrayInversPRASM ; Anti-slipmatten
xmlwArrayInversPRASMROL ; Anti-slipmatten op rol
xmlwArrayInversPRASMROLSPLI ; idem bij asm voor Spoelbak
xmlwArrayInversPRASMROLSPRE
xmlwArrayInversPRTUSASMROL
Set tmpAr("FabrOms","BasisType")=1
Set tmpAr("FabrOms","Kleur")=1
Quit
xmlwArrayInversPRSRUG
Set tmpAr("FabrOms","BasisType")=1
Quit
xmlwRLKleurAfwijkend(RK,KL)
Quit:(RK="CR") (KL'="IN") ; RelingKleur Chroom komt overeen met LadeKleur Inox
Quit (RK'=KL)
xmlwBSKleurAfwijkend(KX,KL)
Quit (KX'=KL)