Tranportkosten berechnen mit unterschiedlichen MwSt

beta20

Top Contributor
Hallo,

ich würde gerne Kosten für den Transport in Brutto berechnen, für verschiedene MwSt.

Ich habe dazu eine Klasse "NetworkRequestItem", welches meine Artikel sind...
- ID
- tax (zB 7% oder 19%)
- priceNet (Nettopreis)
- priceGross (Bruttopreis)

Nun möchte ich von einer Liste: List<NetworkRequestItem> list die unterschiedlichen Anteile bekommen.
Mir schwebt sowas vor mit dieser Methode:

public double calculateTransportCost(double transportCostNet, List<NetworkRequestItem> list)
...

Wie errechne ich nun aber den Anteil der jeweiligen MwSt?
Auch unter der Prämisse, dass es nicht nur 7% und 19% geben kann.

Hat jemand eine Idee?
 
Suchst du so etwas?
Java:
public enum TaxClass{
    STANDARD(0.19),
    REDUCED(0.07);
    
    private double percentage;
    
    public TaxClass(double percentage){
        this.percentage = percentage;
    }
    
    public double getPercentage(){
        return percentage;
    }
}

Das ist eine Enumeration. Du kannst später ohne Weiteres einfach weitere Einträge hinzufügen, neben STADARD und REDUCED vielleicht noch HEAVY(0.25), wenn die Regierung tiefer in unsere Tasche greifen will. Oder wenn sich der Normale Steuersatz von 19% auf 25% ändert mußt du nur den Wert in der Klammer angeben. Du kannst Enumerationen in gleicher Weise auch noch um andere Eigenschaften erweitern. In deiner Klasse NetworkRequestItem kannst du das wie folgt verwenden:

Java:
public class NetworkRequestItem{
    private TaxClass tc;
    
    //...
    
    public double getTaxPercantage(){
        return tc.getPercentage();
    }
}


Wie errechne ich nun aber den Anteil der jeweiligen MwSt?
Du meinst jetzt aber nicht sowas wie:
Gesamtpreis sei 5,50€, Steuersatz 19% -> 5,50/1,19 -> 4,62€ für den Händler, 0,88€ für den Staat?
 
Leider nicht so ganz....

NetworkRequestItem hat ja bereits "tax".... Das ist quasi nur die Position im Warenkorb.
Der MwSt wird bereits davor schon von den Stammdaten des Artikels gezogen.

Der MwSt - Satz (ob 19, 7, 0... oder vllt. mal 25%) kommt aus den Stammdaten dann direkt.
Also:
Ich füge einen Artikel in den Warenkorb hinu. Ein neues Objekt (NetworkRequestItem) wird erstellt, mit dem Nettopreis, Bruttopreis und MwSt. des Artikels aus den Stammdaten...

Was ich also brauche ist der Anteil der MwSt im "Warenkorb" also meiner Liste List<NetworkRequestItem> list....
- Ich müsste quasi erst über alle Positionen gehen, welche MwSt es überhaupt gibt. Diese wiederum müsste ich in eine Liste packen.
- Also ich müsste die Anzahl an Artikel mit MwSt 19% bekommen, die Anzahl der Artikel mit 7% usw.

Vllt so irgendwie? (Glaube das double, double) stimmt aber nicht?
Map<double, double> hashMap = networkRequestItemList.stream()
.collect(Collectors.groupingBy((NetworkRequestItem n) -> n.getTax()));

- Anschließend müsste ich dann auf die 5 EUR Transportkosten (Netto) die Bruttokosten der verschiedenen MwSt daraufaddieren, die ich davor errechnet habe...

Beim roten happert es noch...
 
Vielleicht:
Java:
HashMap<Double, ArrayList<Double>> prices;

//Der Key der HashMap enthält den Steuersatz, 7%, 19%, ...
//Der Value der HashMap, also die ArrayList, enthält die Preise, die mit diesem Steuersatz verrechent werden.

Nachher mußt du nur noch über die HashMap iterieren und kannst alle Preise in der ArrayList mit dem jeweiligen Steuersatz verrechnen. Nicht gerade elegant, aber naja...
 
eher so, oder?

Java:
        Map<Double, List<NetworkRequestItem>> hashMap = networkRequestItemList.stream()
                .collect(Collectors.groupingBy(n -> n.getTax()));

        for (Double taxValue : hashMap.keySet()) {
            List<NetworkRequestItem> list = hashMap.get(taxValue);
        }


Mir ist aber dann immer noch nicht klar, wie ich die Verhältnisse berechne...
 
Suchst du das?
Java:
double sumArticlesA, sumArticlesB, sumArticlesC;

//...

double mainSum = sumArticlesA + sumArticlesB + sumArticlesC;

double partOfA = sumArticlesA / mainSum;
double partOfB = sumArticlesB / mainSum;
//...
 
Beispiel: CD kostet 20€ inkl. MwSt., Buch 10€ inkl. Mwst., Versandkosten sind 5€ Da die CD wertmäßig 2/3 des Warenkorbs umfasst, würde auf 3,33€ 19% Umsatzsteuer anfallen, auf 1,67€ 7%.

Ja, wie gesagt... wie bekomme ich die Anteile bzw. dann letztenendes den Bruttopreis?
Ich denke diese Informationen (Parameter benötige ich für die Funktion):

public double calculateTransportCost(double transportCostNet, List<NetworkRequestItem> list)

NetworkRequestItem enthält:
- tax (19% etc.)
- priceNet (Nettopreis)
- priceGross (Bruttopreis)

Also sowas wie der nachfolgende Code - aber wie errechne ich nun die Anteile?
Java:
    private double calculateSumPriceGrossForTransport(double transportCostNet,
            List<NetworkRequestItem> networkRequestItemList) {

        Map<Double, List<NetworkRequestItem>> hashMap = networkRequestItemList.stream()
                .collect(Collectors.groupingBy(n -> n.getTax()));

        double totalCost = 0.0;

        for (Double taxValue : hashMap.keySet()) {
            List<NetworkRequestItem> list = hashMap.get(taxValue);
            double totalForCurrentTax = list.stream().mapToDouble(NetworkRequestItem::getPriceGross).sum();
        }

        return 0;
    }
 
Stimmt das so?

Java:
    private double calculateSumPriceGrossForTransport(double transportCostNet,
            List<NetworkRequestItem> networkRequestItemList) {

        Map<Double, List<NetworkRequestItem>> hashMap = networkRequestItemList.stream()
                .collect(Collectors.groupingBy(n -> n.getTax()));

        double totalGrossValue = networkRequestItemList.stream().mapToDouble(NetworkRequestItem::getPriceGross).sum();
        
        double totalTransportTax = 0.0;

        for (Double taxValue : hashMap.keySet()) {

            List<NetworkRequestItem> list = hashMap.get(taxValue);
            
            double totalForCurrentTax = list.stream().mapToDouble(NetworkRequestItem::getPriceGross).sum();
            double percentageValue = totalForCurrentTax / totalGrossValue;
            double valueFromPercentage = ((transportCostNet / 100) * percentageValue) * 100;
            totalTransportTax = totalTransportTax + (valueFromPercentage + (1 + (taxValue / 100)));   
        }

        return transportCostNet + totalTransportTax;
    }
 

Neue Themen


Zurück
Oben