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-Key: 1815408798

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

Printed on: April 19, 2024 at 21:04 o'clock

Member: em-pie
em-pie Feb 02, 2022 updated at 18:27:21 (UTC)
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
Member: pcguy
pcguy Feb 02, 2022 at 19:33:16 (UTC)
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
Member: godlie
godlie Feb 02, 2022 at 19:56:41 (UTC)
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
Member: pcguy
pcguy Feb 02, 2022 at 20:19:15 (UTC)
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);  
Member: em-pie
em-pie Feb 02, 2022 at 20:29:10 (UTC)
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
Member: pcguy
pcguy Feb 02, 2022 updated at 21:55:53 (UTC)
Goto Top
EUR
die Ausgabe ist ein PDF, aus diesem Grund kenne ich den genauen Inhalt nicht.
Member: razorr
razorr Feb 02, 2022 updated at 22:45:59 (UTC)
Goto Top
Probier es doch mal damit:
$ust = (floatval(trim(str_replace("EUR", "", str_replace(",", ".",$total['value']))))/1.19)*0.19;  
Member: Mystery-at-min
Mystery-at-min Feb 03, 2022 at 02:13:32 (UTC)
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;
?>

?
Member: SlainteMhath
SlainteMhath Feb 03, 2022 at 07:09:13 (UTC)
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
Member: pcguy
pcguy Feb 03, 2022 at 10:08:23 (UTC)
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.
Member: em-pie
em-pie Feb 03, 2022 at 11:26:11 (UTC)
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.
Member: pcguy
pcguy Feb 03, 2022 at 12:58:39 (UTC)
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.
Member: godlie
godlie Feb 03, 2022 at 13:22:24 (UTC)
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>  
Member: Mystery-at-min
Mystery-at-min Feb 03, 2022 at 13:27:12 (UTC)
Goto Top
VIelleicht packst du es aber auch einfach falsch an, was sagt denn die Doku dazu?
Member: colinardo
Solution colinardo Feb 03, 2022 updated at 15:58:12 (UTC)
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
Member: pcguy
pcguy Feb 03, 2022 at 19:54:41 (UTC)
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
Member: colinardo
colinardo Feb 03, 2022, updated at Feb 09, 2022 at 10:17:43 (UTC)
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']);  
Member: pcguy
pcguy Feb 09, 2022 at 09:47:01 (UTC)
Goto Top
Vielen Dank!

Allerdings verändert das die Ausgabe bei mir nicht ... 1:1 wie bei "echo $total['value']"
Member: colinardo
colinardo Feb 09, 2022 updated at 09:53:52 (UTC)
Goto Top
Zitat von @pcguy:
Allerdings verändert das die Ausgabe bei mir nicht ... 1:1 wie bei "echo $total['value']"
? Klappt hier problemlos
Member: pcguy
pcguy Feb 09, 2022 at 10:06:06 (UTC)
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>
Member: colinardo
colinardo Feb 09, 2022 updated at 10:19:43 (UTC)
Goto Top
Zitat von @pcguy:

Komisch .... hast du das identisch?
Der Regex is fehlerhaft, kopiere ihn nochmal.
Member: pcguy
pcguy Feb 09, 2022 at 12:57:05 (UTC)
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
Member: colinardo
colinardo Feb 09, 2022 updated at 13:02:19 (UTC)
Goto Top
Wie sieht denn bei dir der gesamte String vorher überhaupt aus, ich war hier von Deutschland ausgegangen.
Member: pcguy
pcguy Feb 09, 2022 at 14:30:53 (UTC)
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
Member: colinardo
colinardo Feb 09, 2022 updated at 15:03:21 (UTC)
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
Member: pcguy
pcguy Feb 09, 2022 updated at 14:53:09 (UTC)
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