Seite 1 von 1

Rechnungen erstellen (eventuell als PDF)

Verfasst: Mo 2. Nov 2020, 14:52
von staebners
Hallo, Stefan
Der Ordersprinter läuft jetzt seit ziemlich genau 1 Monat völlig ohne Probleme - so hatte ich das nicht zu hoffen gewagt - beide Daumen hoch :D

Eine Anforderung habe ich noch nicht erfüllen können:
Neben der Erstellung von Bewirtungsbelegen gibt es auch häufiger die Notwendigkeit eine Rechnung zu schreiben.
Da wäre es natürlich super das ginge gleich über die Kassensoftware.

Kann man eine Rechnung mit Standardtext einrichten, die dann auf einem Din-a4 Drucker herauskommt?
Alternativ - kann mann eventuell an irgendeiner Stelle einfach über copy und Paste eine solche Rechnung erstellen?

Gruß, Gerd

Re: Rechnungen erstellen (eventuell als PDF)

Verfasst: Do 25. Feb 2021, 22:22
von thomas_eburg
Also eine "fertige" Lösung habe ich da auch nicht.
Aber die gleiche Anforderung wurde an mich auch schon gestellt.
(ich habe die Installation für Bekannte gemacht, die ein Hotel betreiben)
Sollte es demnächst wieder mit dem Betrieb losgehen, werde ich die hier vorgestellte
2. Lösung mit Libre Office vielleicht mal umsetzen ... möchte aber nichts versprechen.
Zwei Ansätze ... 1. Text des Bons kopieren ... 2. Libre Office Base Datenbank ... Bericht
1. Eine schon fertige Rechnung / Bon in der Ansicht aufrufen, den Inhalt komplett markieren,
kopieren und Beispielsweise einfügen als "Unformatierten Text" in ein Word Dokument
bezw. z.B. Libre Office Writer.
Je nach Bonvorlage ... also der Anordnung von einzelnen Teilen des Bons, kann man
aus diesem Text mit geringen Formatierungsänderungen eine Rechnung als normales
Textdokument erstellen, bei Libre Office auch Export als PDF kein Problem.
Wenn man ein "fertiges" Layout mit Kopf und allem vorbereitet hat, und nur den
fehlenden Teil des Bons einfügt ... geht das sehr schnell.
Ist aber sicher nur in EInzelfällen sinnvoll ... z.B. wenn "mal" eine Rechnung für eine
Firma gebraucht wird.
Wenn man häufig Rechnungen benötigt, und ein wenig Zeit investiert, wäre folgende
Lösung denkbar - setzt aber schon einiges an PC Wissen voraus :
- Libre Office Base nutzen ... die Datenbank von Libre Office (kostenlos)
- zuvor einen Benutzer für die Datenbank des Ordersprinters anlegen, der NUR LESERECHTE hat
- mit Libre Office ... neue Datenbank ... MYSQL ... den Benutzer mit LESERECHTEN ...
- jetzt wirds knifflig ... man muß eine recht komplexe Abfrage auf mehrere Tabellen erstellen
da die Daten für die Bondrucke in Tabellen wie bill ... queue ... erst zusammengestellt werden müssen.
- dann müßte man mit diesen Abfragedaten einen Bericht gestalten
- Ergebnis ... nach viel viel Arbeit : Rechnungs bezw. Bonnummer eingeben ... Bericht erstellen ...
VERMUTLICH gibt es einen viel einfacheren Weg ... ich kann hier aber NOCH keine Lösung anbieten.
Thomas

Re: Rechnungen erstellen (eventuell als PDF)

Verfasst: Do 25. Feb 2021, 22:57
von pichel
Hallo,

die Anfrage ist schon mehrfach an mich gestellt worden und technisch ist das gar nicht so schwierig. Mit der Möglichkeit, Artikelbestellungen auf Gäste auszustellen (Zahlungsweg "Gast"), ist die Lösung auch schon in greifbarer Nähe (man muss nur noch die Artikel eines Gastes in eine hübsche Rechnung gießen). Ich habe allerdings im Moment das Problem, dass ich nicht so ganz sicher bin, wie ich das rechtskonform im Rahmen der Kassensichv umsetze und zwar so, dass es demnächst absolut keine Missverständnisse gibt, was nun Rechnung oder Kassenbon ist bzw. wann denn nun der Geldeingang zu verbuchen ist. Wenn also die Rechnung in der Gastansicht als DIN A4 gedruckt wird, darf ja nicht später noch ein Bon mit anderem Layout auf dem Bondrucker über die gleiche Artikelliste rauskommen. Alles lösbare Herausforderungen, aber tatsächlich habe ich das wegen der rechtlichen Unsicherheiten erst mal nach hinten geschoben.

@Thomas: Dein Ansatz würde natürlich technisch funktionieren. Du fragst nach der SQL-Anweisung, die kannst du dir aus der Methode getBillProductsInCumulatedOrder() von bill.php und caseOfSqlUnitSelection() aus communUtils.php holen:

Code: Alles auswählen

$unit = "CASE ";
		foreach(CommonUtils::$g_units_arr as $aUnit) {
			if (($aUnit["value"] > 1) && ($aUnit["value"] < 8)) {
				$unit .=  " WHEN Q.unit='" . $aUnit["value"] . "' THEN CONCAT(REPLACE(unitamount,'.','$decpoint'),'" . $aUnit["text"] . "',' ') "; 
			}
		}
		$unit .= " ELSE '' ";
		$unit .= "END";


		$sql = "select CONCAT($unit,productname) as productname,price,round(Q.price / (1.0 + Q.tax/100.0),2) as netto,(count(Q.productname) * price) as total,"
                        . "ROUND((count(Q.productname) * (Q.price / (1.0 + Q.tax/100.0))),2) as totalnetto,"
                        . "%pricelevel%.name as pricelevelname,togo,count(Q.productname) as count,%prodtype%.kind as kind,GROUP_CONCAT(Q.id) as queueids ";
		$sql .= " FROM %queue% Q,%pricelevel%,%billproducts%,%prodtype%,%products% where %billproducts%.billid=? AND %billproducts%.queueid=Q.id ";
		$sql .= " AND Q.pricelevel = %pricelevel%.id AND Q.productid = %products%.id AND %products%.category = %prodtype%.id ";
		$sql .= " GROUP BY kind, CONCAT($unit,productname),price,pricelevelname,togo ";
		$sql .= " ORDER BY kind, CONCAT($unit,productname),price,pricelevelname,togo ";

		if ($printExtras == 1) {
			$sql = "SELECT 
				CONCAT($unit,productname) as productname,
				price,
                                round(Q.price / (1.0 + Q.tax/100.0),2) as netto,
				(count(Q.productname) * price) as total,
                                ROUND((count(Q.productname) * (Q.price / (1.0 + Q.tax/100.0))),2) as totalnetto,
				PL.name as pricelevelname,
				togo,
				count(Q.productname) as count,
				PT.kind as kind,
				GROUP_CONCAT(Q.id) as queueids,
				(
				    SELECT GROUP_CONCAT(CONCAT(amount,'-',extraid) ORDER BY extraid)
				    FROM
					%queueextras% QE
				    WHERE
					Q.id=QE.queueid
				) as concatstr
			     FROM
				%queue% Q,
				%pricelevel% PL,
				%billproducts% BP,
				%prodtype% PT,
				%products% P
			     WHERE
			       BP.billid=? AND 
			       BP.queueid=Q.id AND 
			       Q.pricelevel = PL.id AND 
			       Q.productid = P.id AND 
			       P.category = PT.id 
			     GROUP BY 
				kind,
				CONCAT($unit,productname),
				price,
                                round(Q.price / (1.0 + Q.tax/100.0),2),
				pricelevelname,
				togo,
				concatstr 
			    ORDER BY kind, CONCAT($unit,productname),price,pricelevelname,togo 
			";
		}
Die in Prozentzeichen eingefassten Tabellennamen stehen für die Tabellennamen mit Präfix, wie er bei der Installation gewählt wurde. Du kannst dir also die Daten mit der SQL-Abfrage rausholen, aber statt der Lösung mit LibreOffice würde ich einen html-Export erstellen, der bei gut gewähltem Layout auch problemlos gedruckt werden kann.

ABER: Dir fehlt die Information über den Gast, auf den die Rechnung ausgestellt werden soll. Und außerdem kann es sein, dass ich den Source-Code mit zukünftigen Versionen beliebig verändere.

Deswegen: der bessere Weg ist die Behandlung beim Zahlungsweg "Gast". Orientiere dich an "Report über alle unbezahlten Rechnungen" in der Gästeansicht - oder warte, bis ich das eingebaut habe (was aber wie eben gesagt noch etwas dauern kann).

Gruß,

Stefan

Re: Rechnungen erstellen (eventuell als PDF)

Verfasst: Fr 26. Feb 2021, 06:57
von thomas_eburg
Hallo
@Stefan : Vielen Dank für die wieder mal SUPERSCHNELLE Antwort.
In der heutigen Zeit sicher eine Seltenheit - kann ich nur so sagen.
Du erwähnst die rechtlichen Unsicherheiten ... Kassensichv ... JA KLAR.
Die ist halt vielleicht im Alltag manchmal schwer umzusetzen.
Kurz ein Beispiel wie es in dem von mir "betreuten" Hotel vorkommt.
Derzeit ja nur Monteure ... teils aus unterschiedlichen Ländern ... die 2 oder 3
Übernachtungen machen ... fast nichts "verzehren", und dann fragt die Bedienung,
ob ein Kassenbon reicht. JA ... also Kassenbon ... eigentlich alles erledigt.
(Zimmer ... Übernachtungen ... als Artikel angelegt)
DANN ... ruft der Monteur teils Tage danach an, oder die Firma, und will plötzlich
eine richtige Rechnung - vermutlich ist das NICHT Rechtssicher ... weiss ich nicht.
Da ist dann der Tagesabschluss schon gemacht ... und dann setzt sich jemand
im Hotel hin und schreibt im Büro von Hand eine Rechnung.
Abgesehen von den Sprachbarrieren : dem Kunden kann man nur schwer plausibel
machen, das dies in Deutschland Rechtlich schwierig ist.
ABER : ich will ja, das der Gast ... die Firma wiederkommt ... ZWICKMÜHLE ?
Nochmals vielen Dank für deine Antwort. Und die Infos, die ich sicher brauchen kann.
WENN ... ich eine "Lösung" habe, werde ich mich hier nochmal melden.
ABER ... diese Lösung wird vermutlich NICHT Rechtskonform sein ... und dauern ...
(dank Corona hat das Hotel sicher noch einige Zeit keinen "Regelbetrieb")
Thomas