pcguy
Goto Top

UST Betrag ausgeben

Hallo Zusammen

Ich habe eine kleine Anfängerfrage betr. UST Anteil ausgeben.
In einem File das ein Rechnungs PDF erstellt, fehlt der UST Betrag.

Im Total steht :
<?php echo $total['value']; ?>  

Nun möchte ich daraus den UST Anteil errechnen:
   <?php 	
               $total= $total['value'];  
	       $ust= $total * 0.19;

		echo $ust;   
   ?> 


Das Ergebniss ist "0" .... kann mir bitte jemand einen input geben, was da falsch läuft?

Content-ID: 1815408798

Url: https://administrator.de/contentid/1815408798

Ausgedruckt am: 24.11.2024 um 05:11 Uhr

em-pie
em-pie 02.02.2022 aktualisiert um 19:27:21 Uhr
Goto Top
Moin,

  1. Wie groß ist dein Total, eher 1.000€ oder eher 0,05 €
  2. Wenn dein Total bereits ein Brutto-wert ist, musst du $ust = ($total /1.19) * 0,19 rechnen.
  3. Welche Zahlenformate haben deine Werte. Wenn es nur Ganzzahlen sein dürfen, erklärt das ggf, deine Beobachtung. Wenn du aber Decimalzahlen mit 2 Nachkommastellen definiert hast, sollte es mit NAchkommastellen klappen.
  4. Mach zuvor mal noch ein echo $total; Nicht, dass dein $total schon den Wert 0 hat face-wink
pcguy
pcguy 02.02.2022 um 20:33:16 Uhr
Goto Top
vielen Dank!

Ich habe rausgefunden das die variable kein reiner zahlenwert sondern auch das Währungssymbol enthält.
Das heisst ich kann das auf diesem Weg nicht errechnen
godlie
godlie 02.02.2022 um 20:56:41 Uhr
Goto Top
Hallo,
du kannst sehr einfach damit rechnen, wenn du sie dir in eine "Nummer" konvertierst.

$te = '13.25 €';  
$tee = '13,25 €';  
$teee = str_replace(',','.',$tee);  
print floatval($te).' -- '.floatval($tee).' -- '.floatval($teee);  

Ausgabe:
13.25 -- 13 -- 13.25
pcguy
pcguy 02.02.2022 um 21:19:15 Uhr
Goto Top
Vielen Dank!

Das scheint eine Nummer zu gross für mich, den angepasste Code ergibt bei mir: 1 -- 0 -- 0

$te = $total;
$tee = $total['value'];  
$teee = str_replace(',','.',$tee);  
print floatval($te).' -- '.floatval($tee).' -- '.floatval($teee);  
em-pie
em-pie 02.02.2022 um 21:29:10 Uhr
Goto Top
Hast du ein € oder EUR da stehen?

Ansonsten nutze „REPLACE“ und die Währung rauszuholen, anschließend noch das Komma gegen einen Pubkt ersetzen und dann müsstest du den Text in eine Zahl konvertieren können…

Poste doch mal den konkreten Wert deines $total
pcguy
pcguy 02.02.2022 aktualisiert um 22:55:53 Uhr
Goto Top
EUR
die Ausgabe ist ein PDF, aus diesem Grund kenne ich den genauen Inhalt nicht.
razorr
razorr 02.02.2022 aktualisiert um 23:45:59 Uhr
Goto Top
Probier es doch mal damit:
$ust = (floatval(trim(str_replace("EUR", "", str_replace(",", ".",$total['value']))))/1.19)*0.19;  
Mystery-at-min
Mystery-at-min 03.02.2022 um 03:13:32 Uhr
Goto Top
hast du $total denn überhaupt deklariert?

also $total = 10; o.ä

sonst rechnet php eben $total = leer = 0 und 0*0,19 sind eben 0

welche ausgabe kommt denn bei

<?php
$total= $total['value'];
echo $total;
$ust= $total * 0.19;

echo $ust;
?>

?
SlainteMhath
SlainteMhath 03.02.2022 um 08:09:13 Uhr
Goto Top
Moin,

kleiner Tipp am Rande: Mit der Zeile
$total= $total['value'];  
knallst du dir dein Array in $total weg, weswegen bei dir auch der Code von @godlie nicht läuft wie erwartet.

Versuchs mal mit
$brutto= $total['value'];  
o.ä. dann wird's auch klappen face-smile

lg,
Slainte
pcguy
pcguy 03.02.2022 um 11:08:23 Uhr
Goto Top
Vielen Dank für eure Feedbacks!

Leider hat keinen der Vorschläge zum Ziel geführt.
Mit "explode" habe ich rausgefunden das noch mehr als EUR xxx drin steckt.
Anscheinend ist in der Variable noch viel mehr drin, jetzt erscheint class="woocommerce-PricecurrencySymbol">

Gibt es einen Weg das ich den Inhalt der Variable in textform im PDF ausgebe, damit der genaue Inhalt gezeigt wird?


Falls jemande das WP Plugin "WooCommerce PDF Invoices & Packing Slips" kennt, darin versuche ich ein eigenens Template / PDF zu optimieren.
em-pie
em-pie 03.02.2022 um 12:26:11 Uhr
Goto Top
Zitat von @pcguy:
die Ausgabe ist ein PDF, aus diesem Grund kenne ich den genauen Inhalt nicht.
Allerletzer Versuch:
Also zeigt dir ein
   echo $total['value'];  
die gesamte PDF???

Ansonsten die Ausgabe von echo $total['value']; bitte einmal exakt hier posten. Mit der reinen Zahl können wir eh nichts anfangen.
pcguy
pcguy 03.02.2022 um 13:58:39 Uhr
Goto Top
Nein Sorry, der Abschnitt sieht so aus:

<table class="totals">  
	<tfoot>
		<?php foreach ( $this->get_woocommerce_totals() as $key => $total ) : ?>
			<tr class="<?php echo $key; ?>">  
			<th class="description"><?php echo $total['label']; ?></th>  
			<td class="price"><span class="totals-price"><?php echo $total['value']; ?></span></td>  
                        </tr>
		<?php endforeach; ?>	
	</tfoot>
</table>


Das ist ein teil einer PHP Datei, die ein Rechnungspdf generiert, da ich im PDF kein Quellcode ansehen kann, weiss ich nicht was alles in der $total['value'] enthalten ist.
godlie
godlie 03.02.2022 um 14:22:24 Uhr
Goto Top
Hallo,

du könntest dir evtl. mit dem hier behelfen, sodass du die "raw" value bekommst.

<td class="price"><span class="totals-price"><?php echo '<pre>'. $total['value'] .'</pre>'; ?></span></td>  
Mystery-at-min
Mystery-at-min 03.02.2022 um 14:27:12 Uhr
Goto Top
VIelleicht packst du es aber auch einfach falsch an, was sagt denn die Doku dazu?
colinardo
Lösung colinardo 03.02.2022 aktualisiert um 16:58:12 Uhr
Goto Top
Servus.
Zitat von @Mystery-at-min:

VIelleicht packst du es aber auch einfach falsch an, was sagt denn die Doku dazu?

Richtig, er bräuchte nur mal die Optionen zu den Steuern richtig konfigurieren dann hätte sich das eigentlich erübrigt, denn da ist das alles eigentlich schon enthalten face-wink.

screenshot

screenshot

screenshot

screenshot

screenshot

Wenn man wissen will was sonst noch an Variablen und Werten im Order-Object enthalten ist fügt man einfach folgende Zeile in das Template ein
<?php echo "<pre>" . print_r($this->order,true) . "</pre>"; ?>  
Schon siehst du alle Variablen des Order-Objekts auf dem erzeugten PDF.

An den gesamt Steuersatz in der gewählten Währung kommst du mit
$this->order->cart_tax
an die Währung mit
$this->order->currency
ob in der Rechnung überhaupt eine Steuer enthalten ist, bekommst du mit
$this->order->prices_include_tax
der ist 1 wenn ja.

usw. extra manuelle Berechnung ist hier überflüssig.

Wenn man bspw. eine extra Zeile für den Mwst Betrag unter den Total-Betrag setzen will kann man das natürlich auch über ein eigenes Template wenn man muss
<table class="totals">  
	<tfoot>
		<?php foreach ( $this->get_woocommerce_totals() as $key => $total ){ ?>
			<tr class="<?php echo $key; ?>">  
				<th class="description"><?php echo $total['label']; ?></th>  
				<td class="price"><span class="totals-price"><?php echo $total['value']; ?></span></td>  
			</tr>
			<?php if ($key == "order_total" && $this->order->prices_include_tax == 1){?>  
			<tr>
				<th class="description" style="font-weight:normal;">enth. MwSt</th>  
				<td class="price"><?php echo preg_replace('/\./',',',$this->order->cart_tax) . " " . $this->order->currency; ?></td>  
			</tr>
			<?php } ?>
		<?php } ?>
	</tfoot>
</table>

Grüße Uwe
pcguy
pcguy 03.02.2022 um 20:54:41 Uhr
Goto Top
Vielen Dank Uwe, das hat mir sehr geholfen!

Das Hauptproblem war, das die Testkäufe über das POS System getätigt wurden, und da anscheinend noch ein Problem mit der UST vorhanden ist!

Nun ist die Ausgabe von " echo $total['value']" noch unschön, da hinter dem Betrag noch diesen Vermerk erscheint "(inkl. Euro 38.61 Mehrwertsteuer) ... und das auf 3 Zeihlen wegen des platzbedarfs.

Wie kann ich "echo $total['value'] " ersetzen das der Anhang nicht erscheint?

Liebe Grüsse Roland
colinardo
colinardo 03.02.2022, aktualisiert am 09.02.2022 um 11:17:43 Uhr
Goto Top
Zitat von @pcguy:
Nun ist die Ausgabe von " echo $total['value']" noch unschön, da hinter dem Betrag noch diesen Vermerk erscheint "(inkl. Euro 38.61 Mehrwertsteuer) ... und das auf 3 Zeihlen wegen des platzbedarfs.

Wie kann ich "echo $total['value'] " ersetzen das der Anhang nicht erscheint?

echo preg_replace('/.*?([\d,]+\s*[^\(]+).*/','$1',$total['value']);  
pcguy
pcguy 09.02.2022 um 10:47:01 Uhr
Goto Top
Vielen Dank!

Allerdings verändert das die Ausgabe bei mir nicht ... 1:1 wie bei "echo $total['value']"
colinardo
colinardo 09.02.2022 aktualisiert um 10:53:52 Uhr
Goto Top
Zitat von @pcguy:
Allerdings verändert das die Ausgabe bei mir nicht ... 1:1 wie bei "echo $total['value']"
? Klappt hier problemlos
pcguy
pcguy 09.02.2022 um 11:06:06 Uhr
Goto Top
Komisch .... hast du das identisch?
<tfoot>
		<?php foreach ( $this->get_woocommerce_totals() as $key => $total ) : ?>
			<tr class="<?php echo $key; ?>">  
			<th class="description"><?php echo $total['label']; ?></th>  
			<td class="price"><span class="totals-price">  
				<?php 
				//echo $total['value'];  
				echo preg_replace('/.*?([\d,]+ €).*/','$1',$total['value']);  
				?>
				</span></td>
                        </tr>

		<?php if ($key == "order_total" && $this->order->prices_include_tax == 1){?>  
			<tr>
				<th class="description" style="font-weight:normal;">inkl. UST.</th>  
				<td class="price"><?php echo preg_replace('/\./',',', $this->order->currency . " " . $this->order->cart_tax); ?></td>  
			</tr>
			<?php } ?>
		
										
			<?php endforeach; ?>	
		</tfoot>
colinardo
colinardo 09.02.2022 aktualisiert um 11:19:43 Uhr
Goto Top
Zitat von @pcguy:

Komisch .... hast du das identisch?
Der Regex is fehlerhaft, kopiere ihn nochmal.
pcguy
pcguy 09.02.2022 um 13:57:05 Uhr
Goto Top
ok:
echo preg_replace('/.*?([\d,]+\s*[^\(]+).*/','$1',$total['value']);  

Ergebnis=> 67;HF 90.00

HF wird von CHF kommen, aber die 67 .... keine ahnung face-confused
colinardo
colinardo 09.02.2022 aktualisiert um 14:02:19 Uhr
Goto Top
Wie sieht denn bei dir der gesamte String vorher überhaupt aus, ich war hier von Deutschland ausgegangen.
pcguy
pcguy 09.02.2022 um 15:30:53 Uhr
Goto Top
Vielen Dank an alle, ich habe den Rest nun selber hinbekommen face-smile

echo preg_replace('/\./','.', $this->order->currency . " " . $this->order->total);  


@bordadmin
Falls jemand mitliest .... eine Funktion "schenk mir ein Bier / Kaffee" währe top face-wink
colinardo
colinardo 09.02.2022 aktualisiert um 16:03:21 Uhr
Goto Top
Zitat von @pcguy:

Vielen Dank an alle, ich habe den Rest nun selber hinbekommen face-smile

echo preg_replace('/\./','.', $this->order->currency . " " . $this->order->total);  

Achtung das führt zu falschen Zwischensummen wenn es mehrere gibt!
@bordadmin
Falls jemand mitliest .... eine Funktion "schenk mir ein Bier / Kaffee" währe top face-wink
Kein Problem ... face-smile
pcguy
pcguy 09.02.2022 aktualisiert um 15:53:09 Uhr
Goto Top
=> Sind jetzt beides dieselben Beträge, ich glaube zuvor war das auch so


Biergeld ist raus face-smile

Ich dachte eigendlich an eine Schicke funktion "Buy me a Beer" ..... aber so passt es auch face-wink