Proxy-klasse voor een Leveringsbon BL.Sys.FOP.Common,BL.Flow.Doc.Common,vhLib.Macro,BL.Derde.KlantSpecifiek 1 %RegisteredObject,%XML.Adaptor right LEVERINGSBON Datum van creatie van het document %Library.String Steeds "Leveringsbon" %Library.String Type van de leveringsbon: L/T/M/P (Leveringsbon/TerugnameBon/Monster/Proforma) %String %Library.String %Library.String %Library.String %Library.String %String %Library.String %Library.String %Library.String Type: Industrie of KS-klant %Library.String %Library.String %Library.String %Library.String BL.FOP.Derde.pxLevAdres BL.FOP.Derde.pxAfzenderHoofding %Library.String %String %Integer %Library.String %Library.Integer %String %String list %String %String %String BL.Flow.Proxy.pxHoutCertificaat list BL.FOP.Basis.pxTekstHTML list BL.FOP.Basis.pxTekstHTML list %Integer BL.FOP.Basis.pxAttribUnit pxLevOrd list pxLevRecuPak list pxLevRembours %String %String BL.Flow.Proxy.pxPPODfields BL.FOP.Proxy.enu.HoofdingType BL.Flow.Proxy.impl.VerkoopsvoorwaardenURLBepaler 1 APPS.common.KlantInstellingenService 1 VerkoopsvoorwaardenURLBepaler:BL.Flow.Proxy.impl.VerkoopsvoorwaardenURLBepaler,KlantInstellingenService:APPS.common.KlantInstellingenService 1 1 %Status 1 Aanmaken van een Levering-proxy object (LeveringsBon) s px=##class(BL.Flow.Proxy.pxLevering).Create(320305,0,"F","","",.status) do ProxyToXMLFile^vhLib(px,"\\notes01\shared\p v e\leveringsbon.xml","DOCS",1,1) 1 pxLevering Leveringsbon invullen BONNr:%String,blnShowRembours:%Boolean=0,FactSoort:%String="",lbPPODKeywords:%List,Opties:%String %Status 0) { #dim ProductGroepVoorTeTonenDragers As %List = $lb(##class(APPS.PM.enu.ProductGroep).Tandembox(), ##class(APPS.PM.enu.ProductGroep).Legrabox(), ##class(APPS.PM.enu.ProductGroep).TAORBOX()) Do ..BldPalletLookup(BONNr,ProductGroepVoorTeTonenDragers,.DragerLookup) ; Uit ORDW pallet informatie halen } Do flbAlgemeen ; (KLNr,KLID,Taal,BONNr,FactSoort) #dim pxOrd As BL.Flow.Proxy.pxLevOrd = "" #dim LijnObj As BL.Flow.Proxy.pxProductLijn = "" Do flbSortOrder(KLNr,FactSoort,BONNr,.Sort) #dim Netto As %Decimal = 0 #dim SortKey As %String = "" For Set SortKey=$O(Sort(SortKey)) Quit:(SortKey="") Do . Set PrevObj=$G(LijnObj) . Set PrevRec=$G(RecL) . Set RecL=Sort(SortKey) . Set LijnSoort=$P(RecL,"\",17) . If LijnSoort="KF5" Do Quit .. ;Set pxOrd="" ; Unswizzle/close previous (if any) .. Set pxOrd=$$flbAddNewOrder(RecL) .. Set LijnObj=pxOrd . Set:('$IsObject(pxOrd)) pxOrd=$$flbAddNewOrder("") ; Create Dummy order, if not yet initialized . If LijnSoort="KF6" Do ; ProductLijn .. Set LijnObj=##class(BL.Flow.Proxy.pxProductLijn).BuildFromRec("L",RecL,KLNr,Taal,blnBruto) .. Do:(MogelijkeDragersVoorKlant.Count()>0) ..AddDragerInfo(LijnObj,pxOrd.ORDERNR,RecL,.DragerLookup, MogelijkeDragersVoorKlant) ; Toevoegen van Palletinfo .. Do pxOrd.AppendLijn(LijnObj) .. Set Netto=Netto+$P(RecL,"\",9) . Else If $P(LijnSoort,"#",1)="KF11" Do ; TekstLijn ; If (LijnSoort="KF11#1") .. Set LijnObj=##class(pxTekstLijn).BuildFromRec("L",RecL,PrevObj,PrevRec) .. If LijnObj=PrevObj Quit ; TekstItem added to Previous LijnObj .. Else Do pxOrd.AppendLijn(LijnObj) . Else If $P(LijnSoort,"#",1)="KF1925" Do ; Manuele Lijn / manuele ProductLijn ; If (LijnSoort?1"KF1925#".E) .. Set LijnObj=##class(pxManueleLijn).BuildFromRec("L",RecL,KLNr,Taal,blnBruto) .. Do pxOrd.AppendLijn(LijnObj) .. Set Netto=Netto+$P(RecL,"\",9) . Else Do ; nothing .. Set LijnObj="" . ; Next LijnNr Do flbLevBonEnd ; (KLNr,BONNr,Taal,Rec,Rec3) Do flbPPODFields() ; GEEN remboursbon als : ; - er geen remboursbedrag is ; - de verzendingswijze="DI1" ; - de levbon reeds gefactureerd is Do:(blnShowRembours)&&(..REMBOURS>0)&&($TR(..VERZENDWIJZE," ")'=$$$VerzendwijzeGLS)&&(FactSoort="F") ..BuildRemboursData(BONNr,$$$False) // Lock terug afzetten Lock -^UL("SORT",BONNr) Quit $$$OK flbAddNewOrder(Rec) Set pxOrd=##class(BL.Flow.Proxy.pxLevOrd).%New() Do pxOrd.FillViaRec(Rec) Do ..ORDERS.Insert(pxOrd) Quit pxOrd flbSortOrder(KLNr,FactSoort,BONNr,Sort,CumulTBX) ; Sort via .Local Kill Sort Set Oorsprong = $P(^KUL(KLNr,FactSoort,BONNr,1),"\",53) Set OLNr=100,GroepCnt=$A("A"),(TempKlOL,TextBlock)="" For Set OLNr=$O(^KUL(KLNr,FactSoort,BONNr,OLNr)) Quit:'OLNr Do . Set RecL=^KUL(KLNr,FactSoort,BONNr,OLNr) . If ((KLNr=$$$KlantDedecker) && (Oorsprong = ##class(BL.Flow.Offerte.enu.Oorsprong).EDIBestand())) Do // Cumul van TBX-lijnen voor sommige klanten. . . Set CumulTBX=1 ; Tijdelijk TBX vast op cumul . . Set KlOLNr=$P(RecL,"\",35) Set:$P(RecL,"\",17)="KF5" GroepCnt=GroepCnt+1 . . Do:KlOLNr="" . . . If $P($P(RecL,"\",17),"#")="KF11" Set:TextBlock="" TextBlock=$P($P(RecL,"\",18),";") . . . Else If $P(RecL,"\",17)="KF5" Set KlOLNr=" " . . . Else If $P($P(RecL,"\",17),"#")="KF1925" Set KlOLNr=TempKlOL . . Set $P(KlOLNr,".")=$J($P(KlOLNr,"."),3),PRNr=$P(RecL,"\",2) . . If $G(CumulTBX),PRNr,$$ISTBX^PRODUKT2(PRNr) Do . . . If (KLNr=$$$KlantDedecker) { Set $P(RecL, "\", 5) = "" } // Referenties leegmaken . . . Set SortKey=$C(GroepCnt)_"~"_$$SORTKEY^PRODUKT(PRNr)_"~"_$P(RecL,"\",6) ; Indien prijs verschillend, dan opsplitsen . . . For I=3,9,10,16 Set $P(RecL,"\",I)=$P(RecL,"\",I)+$P($G(Sort(SortKey)),"\",I) . . . Set $P(RecL,"\",37) = ##class(TECH.ListUtils).UnieVanPieces($P(RecL,"\",37), $P($G(Sort(SortKey)),"\",37), ";") . . Else Set SortKey=$C(GroepCnt)_"~"_KlOLNr_"~"_OLNr . . Set Sort(SortKey)=RecL . . Set TempKlOL=KlOLNr . . If $P($P(RecL,"\",17),"#")="KF11",TextBlock'=$P($P(RecL,"\",18),";") Set GroepCnt=GroepCnt+1 . Else Do ; Alle andere klanten . . Set Sort(OLNr)=RecL Quit flbAlgemeen ; (KLNr,KLID,Taal,FactSoort,BONNr) #dim Rec As %String = $G(^KUL(KLNr,FactSoort,BONNr,1)) #dim Rec3 As %String = $G(^KUL(KLNr,FactSoort,BONNr,3)) #dim Taal As %String = $S(+Rec3:$P(Rec3,"\",9), 1:$P($$$KLRec(0),"\",9)) ; Ophalen Taal uit Leveringsadres, indien aanwezig, anders uit klantdata Set:(Taal="") Taal="N" #dim Munt As %String = $P(Rec,"\",18) #dim blnBruto As %Boolean = $P(Rec,"\",27) #dim BonType As %String =..CalcBonType(KLNr,BONNr,FactSoort) #dim ProfFact As %String = "" Set:($P(Rec,"\",25)?1(1"P",1"M")) ProfFact=$S($P(Rec,"\",29)["P":2, 1:1) #dim IsPlusMin As %Boolean =$$ISPLMIN^FLOWBON5(BONNr,FactSoort) #dim Rembours As %String = $$flbCalcRembours(KLNr,BONNr,FactSoort) #dim CheckSumBon As %String = "" ;$$flbCalcCheckSumBon(KLNr,BONNr,FactSoort) #dim RecuPak As %Boolean = ($D(^KUL(KLNr,FactSoort,BONNr,"VP")))&&('IsBlum)&&('IsVH)&&('IsOrgalux)&&('HeeftEigenHoofding) #dim VerzendDatum As %String = ..GeefDatumOpBonGezet(BONNr,KLNr) Set ..BONTYPE=BonType Set ..DOCDATUM=$$EXTDATE^vhLib.DataTypes($H) Set ..LEVERINGSNR=BONNr Set ..LEVERINGSDATUM=VerzendDatum Set ..CheckDigitLevNr=$$CalcCDigit6^vhRtn2(BONNr) Set ..BarCodeBONNr=BONNr If (AfzenderHoofdingDto.HeaderType = HoofdingType.HaefeleNL) || ((AfzenderHoofdingDto.HeaderType = HoofdingType.HaefeleBE) && (##class(DOM.common.impl.ProjectSettingsAPI).%New().IsActiefHaefeleBENaarEindklant())){ Set ..LEVERINGSNR="" Set ..CheckDigitLevNr="" } #dim KlantID As DOM.VKP.VanHoeckeKlantID = ##class(DOM.DomeinContext).Instance().GeefLegacyPartijAPI().GeefKlantPartijID(KLNr) Set ..KlantType=$S(##class(DOM.DomeinContext).Instance().GeefKlantTypeAPI().IsIndustriePoolKlant(KlantID):"I", 1:"K") ; Industrie klant of KS Set ..MUNT=Munt Set ..TAAL=Taal Set ..BRUTONETTO=$S(blnBruto:"B",1:"N") Set ..CodeBeloofd=$S($P(Rec,"\",16)="":"", $P(Rec,"\",23)="N":"N", '$P(Rec,"\",36):"B", 1:"") Set ..ISORGALUX=IsOrgalux Set ..ProfFact=ProfFact ; 1="Proforma", 2="Proforma volgt" Set ..IsPlusMin=IsPlusMin Set ..REMBOURS=Rembours ; 1="Te ontvangen", 2="Rembours" Set:('Rembours) ..Kontant=($P($$$KLRec(0),"\",18)="") ; Geen BetalingsVw voor klant ; LEVADRES Set pxLAdr=##class(BL.FOP.Derde.pxLevAdres).%New() Do pxLAdr.FillViaKLNr(KLNr,Rec3,Taal) Set ..LEVADRES=pxLAdr Set ..BTWNR = ##class(BL.FOP.Derde.pxAdres).BtwNrTekst($P($$$KLRec(0),"\",16)) Set ..AfzenderHoofding = AfzenderHoofdingDto.AfzenderHoofding Set ..HeaderType = AfzenderHoofdingDto.HeaderType // OPGELET: Vergeet niet ook in klasse BL.Legacy.DCPRINT2 de method IsAfdrukOpBlancoPapier aan te vullen !!! If ..HeaderType = HoofdingType.Noteborn { Set ..KlantTelefoon = $P(^KUL(KLNr,FactSoort,BONNr,3),"\",13) If ..KlantTelefoon = "" { Set ..KlantTelefoon=$P($$$KLRec(0),"\",13) } #dim Partij As DOM.PARTIJ.Partij = ##class(DOM.DomeinContext).Instance().GeefPartijAPI().GeefPartij(KlantID) #dim TaalVV As DOM.enu.Taal = Partij.GeefTaal() Do ..VoegToeVerkoopsvoorwaarden(Oorsprong,TaalVV) Set ..HeaderType = HoofdingType.Custom } ElseIf (..HeaderType = HoofdingType.HaefeleNL) || ((AfzenderHoofdingDto.HeaderType = HoofdingType.HaefeleBE) && (##class(DOM.common.impl.ProjectSettingsAPI).%New().IsActiefHaefeleBENaarEindklant())) { Set ..KlantTelefoon = "" Set ..BTWNR = "" Set ..HeaderType = HoofdingType.Custom } ElseIf ((##class(DOM.common.impl.ProjectSettingsAPI).%New().IsActiefHeinNaarEindklant()) && (..HeaderType = HoofdingType.Hein)) { Set ..KlantTelefoon = "" Set ..BTWNR = "" Set ..HeaderType = HoofdingType.Custom } ElseIf ((##class(DOM.common.impl.ProjectSettingsAPI).%New().IsActiefDuPontNaarEindklant()) && (..HeaderType = HoofdingType.Dupont)) { Set ..KlantTelefoon = "" Set ..BTWNR = "" Set ..HeaderType = HoofdingType.Custom } ElseIf ..HeaderType = HoofdingType.SFS { Set ..KlantTelefoon = ..AfzenderHoofding.TELEFOON Set ..HeaderType = HoofdingType.Custom } ElseIf ..HeaderType = HoofdingType.VanRaemdonck { Set ..KlantTelefoon = "" Set ..BTWNR = "" Set ..HeaderType = HoofdingType.Custom } ElseIf ..HeaderType = HoofdingType.CampeTonny { Set ..KlantTelefoon = "" Set ..BTWNR = "" Set ..HeaderType = HoofdingType.Custom } Else { Set ..KlantTelefoon=$P($$$KLRec(0),"\",13) Set ..CheckSumBon= "" ;CheckSumBon } Do:RecuPak ..BuildRecuPak(KLNr,BONNr,FactSoort) ; Niet voor Blum, Van Hoecke of Orgalux Quit flbLevBonEnd ; (KLNr,BONNr,Taal,Rec,Rec3) ; TotaalBedrag If 'HeeftEigenHoofding Do . If (($G(LandISOCode)="")||'$P($G(^ISO(0,"ISO.LAND",LandISOCode,0)),"\",5))&&('ProfFact) Do ; Alleen factuurwaarde bepalen voor NIET EEG-landen . . Set Pariteit=$$MUNT^vhRtn1(Munt,,12) . . Set ..TotBedragNetto=Netto*Pariteit . ; Factuur Aan . Set:(+Rec3)&&($$UPTRIMAN^vhRtn1(Naam)'=$$UPTRIMAN^vhRtn1($P(Rec3,"\",2))) ..FactuurAan=Naam ; $P(Rec3,"\",2) . ; Voorwaarden/Memo's . Do flbVoorWaarden ; (KLNr,BONNr,Taal,RecuPak) ; Opmerkingen KL Set KLRec5=$$$KLRec(5) For I=3:1:5 Do:($L($P(KLRec5,"\",I))) ..Opmerkingen.Insert($P(KLRec5,"\",I)) if ((KlantID = Klant.HaefeleBelgie) || (KlantID = Klant.HaefeleNederland) || (KlantID = Klant.HaefeleDuitsland)|| (KlantID = Klant.IHCHolland) ) { #Dim DragerIDs as %ArrayOfDataTypes Set DragerIDs = ..GeefDragerIDsVanBon(MogelijkeDragersVoorKlant,.DragerLookup) if DragerIDs.Count(){ #dim Sleutel As TECH.String = "LEV:"_ ##class(DOM.PM.enu.DragerType).Probox() Do ..Opmerkingen.Insert( ##class(Res.Vertaling).GetVertaling("DOC", Sleutel,"L", Taal,,$$$True)_" ("_DragerIDs.Count()_") : " _ ##class(TECH.ArrayUtils).ArrayKeysToPieces(DragerIDs,", ")) } } ; Verzendwijze Set ..VERZENDWIJZE=$P($P(Rec,"\",7),"#",1) Set ..VERZENDWIJZEOMS=$P($P(Rec,"\",7),"#",2) ; Tekst Set ..VoorOntvangst=0 ; Boolean ; Handtekenen op afleveringsnota i.p.v. hier. ; Gewicht Set ..Gewicht=##class(BL.FOP.Basis.pxAttribUnit).Create($P($P(Rec,"\",13),"#",3),"kg") Set ..HoutCertificaten = ##class(BL.Flow.Proxy.pxHoutCertificaat).BepaalHoutCertificatenViaBon(BONNr,FactSoort,Taal) Quit flbCalcRembours(KLNr,BONNr,FactSoort) Quit ..CalcRembours(KLNr,BONNr,FactSoort) flbCalcCheckSumBon(KLNr,BONNr,FactSoort) Set blLevDoc=##class(BL.Flow.Levering.Doc).%New() ; Instantiate() Set CheckDigitBon=blLevDoc.CheckSumBon(BONNr,FactSoort,KLNr) Set blnLevDoc="" Quit CheckDigitBon flbVoorWaarden ; (KLNr,BONNr,Taal,RecuPak) Do ..BuildVoorWaarden(KLNr,BONNr,Taal,.RecuPak,.GlasProd) Quit flbPPODFields() Quit:($G(lbPPODKeywords)=$LB()) Set Ref="BON;"_BONNr Set pxPPOD=##class(BL.Flow.Proxy.pxPPODfields).Create($$$ppodtLevBon, $G(Regio," "), $G(Taal," "), $G(KLNr," "), Ref, " ", $G(Bijlage," "), $G(DocSort," "), $G(EnvelopKey," "), ) Do:($LL($G(lbPPODKeywords))) pxPPOD.FillFromLB(lbPPODKeywords) Set ..PPODFIELDS=pxPPOD Quit ]]> LeveringBonId:%String,Klantnummer:%String 1 1 Uit ^ORDW ophalen van proxy info en bewaren in cache 1 MogelijkeDragers:%ListOfDataTypes,Lookup 1 %ArrayOfDataTypes Embedded object LevRembours invullen BONNr:%String,ToonMeldingAfdrukAX:%Boolean=1 0) Set pxLev=%this Set pxRemb=##class(pxLevRembours).%New() Set pxRemb.Rembours=pxLev.REMBOURS Set pxRemb.Taal=pxLev.TAAL Set pxRemb.Datum=$$EXTDATE^vhLib.DataTypes($H) Set pxRemb.LeveringsDatum=pxLev.LEVERINGSDATUM Set pxRemb.LeveringsNr=pxLev.LEVERINGSNR Set pxRemb.LevAdres=pxLev.LEVADRES Set pxRemb.Munt=Munt ; pxLev.MUNT If ToonMeldingAfdrukAX { Set pxRemb.MeldingIpvBedrag = "### Zie afdruk AX ###" Set pxRemb.Bedrag = "" Set pxRemb.Munt = "" } Else { Set pxRemb.Bedrag=$J(TeBet,0,2) } Set pxRemb.DocSigner="Van Hoecke NV" Set ..RemboursData=pxRemb Quit ]]> BonRec is piece-delimited string met de berekende bedragen voor de levering: [TeBet_D_Goederen_D_KontKrt_D_Btw_D_Port_D_Extra_D_Munt] BONNr:%String 0 %String Embedded object RecuPak invullen KLNr:%String,BONNr:%String,FactSoort:%String="F" Rembours bepalen voor deze bon: Geeft 0, 1 of 2 terug. 2: rembours-klant; 1: éénmalig "Te ontvangen" van Niet-rembours klant; 0:niet-rembours KLNr:%String,BONNr:%String,FactSoort:%String="F" 0 %Integer Type van de LeveringsBon bepalen Return values: L/T/M/P/ KLNr:%String,BONNr:%String,FactSoort:%String="F" %String LeveringsBon Voorwaarden ProcedureBlock doesn't allow use of $NAME(...) function KLNr:%String,BONNr:%String,Taal:%String,RecuPak:%String,GlasProd:%String 0 Is een Orgalux order ? 1 BONNr:%String 0 %Boolean Oorsprong:BL.Flow.Offerte.enu.Oorsprong,Taal:DOM.enu.Taal 1 Bon:DOM.VKP.Bon 1 %Integer