FactFreq ;Facturatiefrequentie ; ; Bepalen van de facturatiefrequentie ; Output D = dagelijks ; Wx;y = wekelijks dagx en y ; Vx;y = in de week van dagx en y ; Mx;y;z = maandelijks dag x, dag y en dag z ; Jx = jaarlijks dag x ; Indien x,y,... geen arbeidsdag dan eerstvolgende arbeidsdag Select(FactFreq,Rij,Kolom) New zb,R,OldFreqType,FreqType,OldFreqRef,FreqRef,FreqDatum,FreqMaand,FreqDag,FreqDagen,OldVanAf,VanAf Do STORE^vhTERMINA() Set FactFreq=$G(FactFreq),Rij=$G(Rij,10),Kolom=$G(Kolom,35) Set (OldVanAf,VanAf)=$P(FactFreq,"#",2),FactFreq=$P(FactFreq,"#") Set:FactFreq="" FactFreq="D" If $E(FactFreq)="D" Set FactFreq="D" Else If $E(FactFreq)="N" Set FactFreq="N" Else Set:$E(FactFreq,2,99)="" $E(FactFreq,2,99)=1 Set (OldFreqType,FreqType)=$E(FactFreq),(OldFreqRef,FreqRef)=$E(FactFreq,2,99) Set:VanAf FreqType=FreqType_";U" For Set FreqType=$$PI^vhPOPUP(Rij_";"_Kolom,"-1OM","Frequentie","KLANT","FACTFREQ",FreqType,,1) Quit:zb="CANC" Do Quit:FreqType="D" Quit:zb'="CANC" . If $P(FreqType,";",2)="U" Set VanAf=$S(VanAf:VanAf,1:OldVanAf) Set:'VanAf VanAf=$$CALCDATE^vhDTyp(,"A",1) . Else Set VanAf="" . Set FreqType=$P(FreqType,";") . Do:FreqType'="D" . . If FreqType=OldFreqType Set FreqRef=OldFreqRef . . Else Set FreqRef="" . . If FreqType="W" Set FreqRef=$$PI^vhPOPUP(Rij_";"_(Kolom+13),"-1OMV","Dag(en)","KLANT","FACTFREQWD",FreqRef) Quit . . If FreqType="V" Set FreqRef=$$PI^vhPOPUP(Rij_";"_(Kolom+13),"-1OMV","Dag(en)","KLANT","FACTFREQMD",FreqRef) Quit . . If FreqType="M" Set FreqRef=$$PI^vhPOPUP(Rij_";"_(Kolom+13),"-1OMV","Dag(en)","KLANT","FACTFREQMD",FreqRef) Quit . . If FreqType="J" Do Quit . . . Do STORE^vhTERMINA() . . . Set FreqMaand=$$EXTDATE^vhDTyp($$CALCDATE^vhDTyp(,"J","FD")+FreqRef-$S(FreqRef:1,1:0),"MN") . . . For Set FreqMaand=$$PI^vhPOPUP((Rij-4)_";"_(Kolom+13),"-1O","Maand","KLANT","FACTFREQJM",+FreqMaand,,1) Quit:zb="CANC" Do Quit:zb'="CANC" . . . . Set FreqDag=$$EXTDATE^vhDTyp($$CALCDATE^vhDTyp(,"J","FD")+FreqRef-$S(FreqRef:1,1:0),"DMN") . . . . Kill FreqDagen . . . . Set FreqDagen=$P(^RES("KLANT","PI","FACTFREQJM","D",FreqMaand),"`",3) . . . . For FreqDagen=1:1:FreqDagen Set FreqDagen(FreqDagen)=FreqDagen_"`Dag"_$J(FreqDagen,3) . . . . Set:FreqDag>FreqDagen FreqDag=FreqDagen . . . . Set FreqDag=$$WILD^vhPOPUP(Rij_";"_(Kolom+23),"-1O","Dag",.FreqDagen,FreqDag) . . . . Set:zb'="CANC" FreqRef=$$CONVDATE^vhDTyp(FreqDag_"-"_FreqMaand_"-"_DJ,,"DJN") . . . Do REFRESH^vhTERMINA() . If VanAf,zb'="CANC" Do . . Do STORE^vhTERMINA() . . Set VanAf=$$EXTDATE^vhDTyp(VanAf) . . Set R=$$ASKL^vhINP("KLANT","FACTFREQVANAF") . . If R="-" Set FreqType=FreqType_";U",zb="CANC",VanAf=$$INTDATE^vhDTyp(VanAf) . . Else Set VanAf=$$INTDATE^vhDTyp(R) . . Do REFRESH^vhTERMINA() . If zb="CANC",VanAf Set FreqType=FreqType_";U" Set:zb="CANC" FreqType=OldFreqType,FreqRef=OldFreqRef,VanAf=OldVanAf Set:FreqType="D" (FreqType,FreqRef)="" Set FactFreq=FreqType_FreqRef Set:VanAf FactFreq=FactFreq_"#"_VanAf Do REFRESH^vhTERMINA() Quit FactFreq ; ; Tonen van de facturatiefrequentie Display(FactFreq) New FreqType,FreqRef,VanAf Set VanAf=$P(FactFreq,"#",2),FactFreq=$P(FactFreq,"#") Set:FactFreq="" FactFreq="D" If $E(FactFreq)="D" Set FactFreq="D" Else Set:$E(FactFreq,2,99)="" $E(FactFreq,2,99)=1 Set FreqType=$E(FactFreq),FreqRef=$E(FactFreq,2,99) If FreqType="D" Set FreqRef="" Else If FreqType="N" Set FreqRef="" Else Do . Set:FreqRef="" FreqRef=1 . Set FreqRef=$TR(FreqRef,";",",") . If FreqType="W" For I=1:1:$L(FreqRef,",") Set:$P(FreqRef,",",I) $P(FreqRef,",",I)=$P("Maa\Din\Woe\Don\Vri",D,$P(FreqRef,",",I)) . If FreqType="M",FreqRef["LA" Set FreqRef=$P(FreqRef,"LA")_$P(^RES("KLANT","PI","FACTFREQMD","D","LA"),"`",2)_$P(FreqRef,"LA",2) . If FreqType="J" Set FreqRef=$$EXTDATE^vhDTyp($$CALCDATE^vhDTyp(,"J","FD")+FreqRef-$S(FreqRef:1,1:0)) Set FreqType=$P(^RES("KLANT","PI","FACTFREQ","D",FreqType),"`",2) Set FactFreq=FreqType Set:$L(FreqRef) FactFreq=FactFreq_" ("_FreqRef_")" Set:VanAf FactFreq=FactFreq_" vanaf "_$$EXTDATE^vhDTyp(VanAf) Quit FactFreq ; ZWINT Set K=$$Select($P($G(B(2)),D,3)) Set Locals("K")=K Quit ; ; Nachtelijke job om de uitgestelde bons te activeren Night New Set Q="K" Do ^cA604 Set QU="SYS" ; Verwerken van de periodieke facturatie Set KlKey=0 For Set KlKey=$O(^KKL(KlKey)) Quit:KlKey="" Do . Set R=^KKL(KlKey,0),KLNr=$P(R,D) . Set FactFreq=$$GetFactFreq(KLNr) . Quit:FactFreq="" . Quit:'$D(^KUL(KLNr,"F")) Quit:'$$IsFactDag(FactFreq) . If $E(FactFreq)="V",$D(^KFA1("F",KLNr)),-$O(^KFA1("F",KLNr,""))'<$$CALCDATE^vhDTyp(,"W","FD") Quit ; Er is deze week reeds gefactureerd . Set BONNr="" . For Set BONNr=$O(^KUL(KLNr,"F",BONNr)) Quit:BONNr="" Do . . Quit:$$ISTERUGN^FLOWBON5(BONNr) ; Dit is een terugname . . Set BRec=^KUL(KLNr,"F",BONNr,1) . . Quit:'$P(BRec,D,12) ; Deze bon is niet gemarkeerd . . Quit:$P(BRec,D,25)="T" ; Transfertorder (Halux) . . Set BulkGroep=$G(BulkGroep) Set:BulkGroep="" BulkGroep=$$NewFactGroep("PF") . . Set $P(BRec,D,38)=BulkGroep,^KUL(KLNr,"F",BONNr,1)=BRec ; Verwerken uitgestelde facturatie Kill BulkGroep Set KLNr=0 For Set KLNr=$O(^KUL(KLNr)) Quit:KLNr="" Do . Set FactFreq=$$GetFactFreq(KLNr) . Quit:$L(FactFreq) ; Deze klant wordt periodiek gefactureerd . Set BONNr="" . For Set BONNr=$O(^KUL(KLNr,"F",BONNr)) Quit:BONNr="" Do . . Quit:$$SkipBon(BONNr) . . Set BRec=^KUL(KLNr,"F",BONNr,1) . . Set BulkGroep=$G(BulkGroep) Set:BulkGroep="" BulkGroep=$$NewFactGroep("UF") . . Set $P(BRec,D,38)=BulkGroep,^KUL(KLNr,"F",BONNr,1)=BRec Quit ; ; Ophalen van de facturatiefrequentie van een klant GetFactFreq(KLNr,Horolog) New FactFreq,VanAf,FactKLNr Set FactKLNr=$$FactCust^FLOW(KLNr) Set Horolog=$G(Horolog,+$H),FactFreq=$P(^KKL(^KK1(FactKLNr),1),D,3),VanAf=$P(FactFreq,"#",2) If VanAf,VanAf'>Horolog Do ; De geldigheidsdatum is bereikt, dus de klant aanpassen . Set FactFreq=$P(FactFreq,"#") . Do MODFIELD^KLANT(FactKLNr,203,FactFreq) . Set FactFreq=$P(^KKL(^KK1(FactKLNr),1),D,3) Quit FactFreq ; ; Is vandaag een facturatiedag op basis van de facturatiefrequentie IsFactDag(FactFreq,Horolog) New I,IsFactDag,FactType,FreqRef,CalcDate,Maandag,Dag,HuidigeWeek,VanAf Set FactFreq=$G(FactFreq),VanAf=$P(FactFreq,"#",2),FactFreq=$P(FactFreq,"#") Set Horolog=$G(Horolog,+$H),IsFactDag=0 If VanAf,VanAf>Horolog Else Do . Set:FactFreq="" FactFreq="D" . If $E(FactFreq)="D" Set FactFreq="D" . Else Set:$E(FactFreq,2,99)="" $E(FactFreq,2,99)=1 . Set FactType=$E(FactFreq),FreqRef=$E(FactFreq,2,99) . If FactType="D" Set IsFactDag=1 . If FactType="W" Do . . Set Maandag=$$CALCDATE^vhDTyp(Horolog,"W","FD") . . For I=1:1:$L(FreqRef,";") Set Dag=$P(FreqRef,";",I),IsFactDag=Horolog=(Maandag-1+Dag) Quit:IsFactDag . If FactType="V" Do . . Set HuidigeWeek=$$CALCDATE^vhDTyp(Horolog,"W","FD")_D_$$CALCDATE^vhDTyp(Horolog,"W","LD") . . For I=1:1:$L(FreqRef,";") Do Quit:IsFactDag . . . Set Dag=$P(FreqRef,";",I),CalcDate=$$CALCDATE^vhDTyp(Horolog,"M","FD")+Dag-1 . . . Set IsFactDag=CalcDate'<$P(HuidigeWeek,D) Set:IsFactDag IsFactDag=CalcDate'>$P(HuidigeWeek,D,2) . If FactType="M" Do . . If ";"_FreqRef_";"[";LA;",Horolog=$$CALCDATE^vhDTyp(Horolog,"M",0,"LA") Set IsFactDag=1 Quit . . For I=1:1:$L(FreqRef,";") Do Quit:IsFactDag . . . Set Dag=$P(FreqRef,";",I),CalcDate=$$CALCDATE^vhDTyp(Horolog,"M","FD")+Dag-1 . . . Set:'$$ISARBDAG^vhRtn2(CalcDate) CalcDate=$$CALCDATE^vhDTyp(CalcDate,"A",+1) ; De bewuste dag is geen arbeidsdag dus naar eerstvolgende arbeidsdag . . . Set IsFactDag=CalcDate=Horolog . If FactType="J" Do . . Set CalcDate=$$CALCDATE^vhDTyp(Horolog,"J","FD")+FreqRef-1 . . Set:'$$ISARBDAG^vhRtn2(CalcDate) CalcDate=$$CALCDATE^vhDTyp(CalcDate,"A",+1) ; De bewuste dag is geen arbeidsdag dus naar eerstvolgende arbeidsdag . . Set IsFactDag=CalcDate=Horolog Quit IsFactDag ; ; Geef een nieuwe facturatiegroep NewFactGroep(BulkGroep) Quit ##Class(BL.Flow.Facturatie.BulkFacturatie).NewFactGroep(BulkGroep) ; ; Mag een bon opgenomen worden SkipBon(BONNr) New R,SkipBon,KLNr,ORDNr Set KLNr=$P(^KU1(BONNr,"F"),D),R=^KUL(KLNr,"F",BONNr,1) Set SkipBon='$P(R,D,12) ; Is deze bon gemarkeerd? Set:'SkipBon SkipBon=$$INTDATE^vhDTyp($P(R,D,2))>$$CALCDATE^vhDTyp(,"M","-1") ; Is de bon ouder dan 1 maand? Set:'SkipBon SkipBon="\M\P\"[(D_$P(R,D,25)_D) ; Is dit een proforma of monster Set:'SkipBon SkipBon=$$ISTERUGN^FLOWBON5(BONNr) ; Dit is een terugname Set:'SkipBon SkipBon='$P($$CALCBON^FLOWBON5(BONNr),D) ; Het bedrag van deze bon is nul Do:'SkipBon . Set ORDNr="" . For Set ORDNr=$O(^KOD(KLNr,"F",ORDNr)) Quit:ORDNr="" Set R=^KOD(KLNr,"F",ORDNr,1),SkipBon="\C\"'[(D_$P(R,D,25)_D) Quit:SkipBon ; Er zijn orders aanwezig (geen contracten) Quit SkipBon ; ; Call back voor het toevoegen van de items 'facturatiefrequentie' CBIFFQ(Item) Quit '$P(Item,"`",3) ; CBSFFQ(sSelect,sOld,sNew,sRec) New I,Nooit,VanAf,SelectOk Set SelectOk=0 For I=1:1 Quit:'$D(sY(I)) Do . Set:$P(sY(I),"`")="N" Nooit=I . Set:$P(sY(I),"`")="U" VanAf=I If $P(sRec,"`")'="U" Do . If $P(sRec,"`")'="N",$G(sX(VanAf)) Kill sX Set sX(VanAf)=1,SelectOk=1 . Else Kill sX . Set sX(sSelect)=1,SelectOk=1 Else Do . If $G(sX(Nooit)) Kill sX(VanAf) Set SelectOk=0 . Else Set SelectOk=1 Quit SelectOk ; ; Call back na de opbouw van de locals sX en sY. ; De rubriek 'vanaf' toevoegen CBAFFQ(sY) Set sY=$O(sY(""),-1)+1,sY(sY)="&S" Set sY=$O(sY(""),-1)+1,sY(sY)="U`Vanaf datum" Set:FreqType[";U" sX(sY)=1 Quit 1 ; ; Controle op ingave datum vanaf CheckVanAf(VanAf) New %TC,%INT,%EXT Do VALDATE^vhDTyp(VanAf,,$H+1) Set:%TC VanAf=%EXT Quit %TC ;