Do ##class(APPS.common.KlantKost.impl.TransportKostCalculator).%New().BerekenKostenPerKlant(2011,8) 1 APPS.common.KlantKost.impl.KostCalculator 0 Jaar:%Integer,Maand:%Integer = 0){ /// Verzendwijze controleren : Bulk of Los If (Bon.GeefVerzendwijze() = ##class(DOM.OV.enu.VerzendWijze).Expediteur()) { Set Datum = Factuur.GeefFactuurDatum() /// Dit is voor Nord Inox /// Onderscheid maken tussen klanten waar kosten per rit Set FactorRit = ..GeefFactorWaardeRitTransport(Klant,Datum) /// Per rit If (FactorRit '= -1){ Do ArrayMetVervoerRefPerRit.SetAt(Datum,Datum) } } ////////////////////////////// /// Bulk /// /// OD, OD1, OD2, OD3, OD5 /// ////////////////////////////// /// 1.89 % op kolom TotVerkoop via KlantBeoordeling. If (TransportAPI.IsBulkTransport(Bon.GeefVerzendwijze())) { Set Datum = Factuur.GeefFactuurDatum() /// Onderscheid maken tussen klanten waar kosten per rit worden gemaakt of per (pallet/colli) Set FactorRit = ..GeefFactorWaardeRitTransport(Klant,Datum) /// Per rit If (FactorRit '= -1){ Do ArrayMetVervoerRefPerRit.SetAt(Datum,Datum) }Else{ Set BedragTotaalVerkoop = TotaalVerkoopViaBulkOpDag.GetAt(Datum) + Bon.GeefTotaalVerkoopPrijs() Do TotaalVerkoopViaBulkOpDag.SetAt(BedragTotaalVerkoop,Datum) } } ////////////////////////////// /// Los /// /// DI2, DI3 /// ////////////////////////////// /// Indien er transport deze kost toevoegen ElseIf (TransportAPI.IsLosTransport(Bon.GeefVerzendwijze())) { Set TransportLink = $p($g(^KUL(Klant.GeefNummer(),"G",Bon.GeefBonNr(),1)),"\",8) If (TransportLink '= ""){ Set VervoerRef = $Piece(TransportLink,";",1) Set GroepRef = $Piece(TransportLink,";",2) Set Transport = TransportAPI.GeefTransport(VervoerRef,GroepRef) Set Datum = ##class(TECH.DateTime).TimestampToDate(Transport.GeefOphaalTimeStamp()) /// Onderscheid maken tussen klanten waar kosten per rit worden gemaakt of per (pallet/colli) Set FactorRit = ..GeefFactorWaardeRitTransport(Klant,Datum) /// Per rit If (FactorRit '= -1){ Do ArrayMetVervoerRefPerRit.SetAt(Datum,VervoerRef) } /// Per pallet / Colli Else{ If ('AantalPerTransporteurPerTypePerDag.IsDefined(Transport.GeefTransporteur())) { Do AantalPerTransporteurPerTypePerDag.SetAt(##class(%ArrayOfObjects).%New(),Transport.GeefTransporteur()) } Set AantalPerTypePerDag = AantalPerTransporteurPerTypePerDag.GetAt(Transport.GeefTransporteur()) /// Alle verpakkingseenheden overlopen Set VerpakkingEenheidIt = Transport.GeefVerkpakkingEenheidIterator() While VerpakkingEenheidIt.HasNext() { Set VerpakkingEenheid = VerpakkingEenheidIt.Next() Set AantalPerDag = AantalPerTypePerDag.GetAt(VerpakkingEenheid.GeefType()) If ('$IsObject(AantalPerDag)){ Set AantalPerDag = ##class(%ArrayOfObjects).%New() } Set AantalPerVerzendwijze = AantalPerDag.GetAt(Bon.GeefVerzendwijze()) If ('$IsObject(AantalPerVerzendwijze)) { Set AantalPerVerzendwijze = ##class(%ArrayOfDataTypes).%New() } Set AantalPerVerpakkingEenheid = (AantalPerVerzendwijze.GetAt(Bon.GeefVerzendwijze()) + VerpakkingEenheid.GeefAantal()) Do AantalPerVerzendwijze.SetAt(AantalPerVerpakkingEenheid,Bon.GeefVerzendwijze()) Do AantalPerDag.SetAt(AantalPerVerzendwijze,Datum) Do AantalPerTypePerDag.SetAt(AantalPerDag,VerpakkingEenheid.GeefType()) } Do AantalPerTransporteurPerTypePerDag.SetAt(AantalPerTypePerDag,Transport.GeefTransporteur()) } } } } } } /// BULK TRANSPORT Set Datum = TotaalVerkoopViaBulkOpDag.Next("") While (Datum '= ""){ Set TotaalVerkoop = TotaalVerkoopViaBulkOpDag.GetAt(Datum) Do ..MaakBulkTransportKostItem(Klant,Datum,TotaalVerkoop) Set Datum = TotaalVerkoopViaBulkOpDag.Next(Datum) } /// RIT TRANSPORT Set VervoerRef = ArrayMetVervoerRefPerRit.Next("") While (VervoerRef '= "") { Set Datum = ArrayMetVervoerRefPerRit.GetAt(VervoerRef) Do ..MaakRitTransportKostItem(Klant,Datum,VervoerRef) Set VervoerRef = ArrayMetVervoerRefPerRit.Next(VervoerRef) } /// LOS TRANSPORT /// Alle transporteurs overlopen Set Transporteur = AantalPerTransporteurPerTypePerDag.Next("") While (Transporteur '= ""){ /// Alle types verpakkingEenheid overlopen Set AantalPerTypePerDag = AantalPerTransporteurPerTypePerDag.GetAt(Transporteur) Set VerpakkingEenheidType = AantalPerTypePerDag.Next("") While (VerpakkingEenheidType '= ""){ /// Alle dagen overlopen en wegschrijven per dag in een KostItem Set AantalPerDag = AantalPerTypePerDag.GetAt(VerpakkingEenheidType) Set Datum = AantalPerDag.Next("") While (Datum '= ""){ /// Alle verzendwijzen overlopen voor deze dag. Set AantalPerVerzendwijze = AantalPerDag.GetAt(Datum) Set Verzendwijze = AantalPerVerzendwijze.Next("") While (Verzendwijze '= ""){ Set Aantal = AantalPerVerzendwijze.GetAt(Verzendwijze) Do ..MaakLosTransportKostItem(Klant,Transporteur,VerpakkingEenheidType,Datum,Verzendwijze,Aantal) Set Verzendwijze = AantalPerVerzendwijze.Next(Verzendwijze) } Set Datum = AantalPerDag.Next(Datum) } Set VerpakkingEenheidType = AantalPerTypePerDag.Next(VerpakkingEenheidType) } Set Transporteur = AantalPerTransporteurPerTypePerDag.Next(Transporteur) } GoTo Volgende CatchBerekeningFaalt Set Exception = ##class(TECH.ExceptionHandler).Catch() Do ##class(vhLib.Logger).%New("TransportKostCalculator").Warning("Berekeningen","KlantID: "_Klant.GeefNummer()_" "_$C(13,10)_Exception.ToString()) Volgende } ]]> Klant:DOM.CRM.Klant,Transporteur:DOM.TRANSP.enu.Transporteur,VerpakkingEenheidType:DOM.TRANSP.enu.VerpakkingEenheidType,Datum:%Date,Verzendwijze:DOM.OV.enu.VerzendWijze,Aantal:%Integer 1 Klant:DOM.CRM.Klant,Datum:%Date,TotaalVerkoopOpDag:%Float 1 0){ Set Factor = ..GeefFactorBulkTransport(Datum) Set Kost = TotaalVerkoopOpDag * Factor Set KostItem = ##class(APPS.common.KlantKost.impl.data.BulkTransportKostItem).%New(Datum,Klant.GeefNummer(),Kost,TotaalVerkoopOpDag) Set Status = KostItem.%Save() If ($SYSTEM.Status.IsError(Status)){ Set Bericht = "Failed to save "_KostItem.%ClassName(1)_": " Set Bericht = Bericht_": Klant"_Klant.GeefNaam()_",Datum:"_Datum_",TotaalVerkoopOpDag"_TotaalVerkoopOpDag Do ##class(TECH.ExceptionHandler).Throw(##class(TECH.Exceptions.SaveFailedException).%New(Bericht,Status)) } } ]]> Klant:DOM.CRM.Klant,Datum:%Date,VervoerRef:%String 1 Land:DOM.common.Land,Transporteur:DOM.TRANSP.enu.Transporteur,VerpakkingEenheidType:DOM.TRANSP.enu.VerpakkingEenheidType Klant:DOM.CRM.Klant,Land:DOM.common.Land,Transporteur:DOM.TRANSP.enu.Transporteur,VerpakkingEenheidType:DOM.TRANSP.enu.VerpakkingEenheidType Klant:DOM.CRM.Klant Verwijderen van de kosten van dat specifiek jaar en maand voor alle klanten. Jaar:%Integer,Maand:%Integer Factor waarde opzoeken voor specifiek land FactorNaam : Colli / Pallet / Rit FactorNaam:%String,Datum:%Date %Float Factor waarde opzoeken voor specifiek land FactorNaam : Colli / Pallet / Rit FactorNaam:%String,Datum:%Date %Float FactorWaarde voor Bulk via TTC opzoeken Datum:%Date %Float Klant:DOM.CRM.Klant,Datum:%Date %Float