# Rechnungsmodul: Rechnungen mit Summe 0 EUR



## ramsys (30. Jan. 2014)

Ich habe hier einige Rechnungen mit mehreren Positionen, wobei die Endsumme der Rechnung dann aber 0,00 EUR beträgt. Diese Rechnungen lassen sich weder aus den wiederkehrenden Artikeln noch manuell abschließen.

Welche Möglichkeit habe ich, diese Rechnungen zu erstellen?


----------



## ramsys (31. Jan. 2014)

Wenn ich in der Datei _interface/web/billing/invoice_edit.php_ die Prüfung deaktiviere, hat das eventuell irgendwelche negativen Seiteneffekte?

Zeile 244 bis 250:

```
// Calculate the invoice amount
			$tmp = $app->db->queryOneRecord("SELECT sum(quantity*price+(quantity*price*(vat/100))) as amount FROM invoice_item WHERE invoice_id = ".$this->id);
			$invoice_amount = $tmp['amount'];
			// Don't finalize if invoice amount == 0
			if($invoice_amount == 0){
				$app->error($app->lng('error_total_equals_zero_txt'));
			}
```


----------



## Till (1. Feb. 2014)

Nein, das hat keine weiteren nebeneffekte. den Check gibt es nur damit niemand unbeabsichtigt Rechnungen abschließt bevor Einträge eingefügt worden sind.


----------



## ramsys (1. Feb. 2014)

Zitat von Till:


> den Check gibt es nur damit niemand unbeabsichtigt Rechnungen abschließt bevor Einträge eingefügt worden sind.


Okay, aber Null-Rechnungen sind ja auch durchaus üblich und zum Teil auch notwendig.


----------



## Till (1. Feb. 2014)

Also bei mir nicht und bei den anderen Kunden den Billingmoduls scheinbar auch nicht, denn bislang hatte niemand das Problem. Ich werde mal im Bugtracker vermerken dass der check umgestellt wird auf > 0 Items in der Rechnung.


----------



## ramsys (1. Feb. 2014)

Zitat von Till:


> Ich werde mal im Bugtracker vermerken dass der check umgestellt wird auf > 0 Items in der Rechnung.


Perfekt, danke! Ich werden das hier lokal schon mal so ändern


----------



## ramsys (1. Feb. 2014)

Zitat von Till:


> Ich werde mal im Bugtracker vermerken dass der check umgestellt wird auf > 0 Items in der Rechnung.


Vielleicht kann man das noch ergänzen: Eine Null-Rechnung wird gleich als bezahlt markiert. Tabelle invoice --> status_paid = y.

Hast Du auf die Schnelle eine Antwort, wo und wie diese Änderung im Code erfolgen müsste? Dann würde ich das schon vorab hier entsprechend anpassen.


----------



## Till (1. Feb. 2014)

Kann ich so auf Anhieb nicht sagen. Kommentier am Besten einfach mal den 0 eur summen check aus.


----------



## ramsys (1. Feb. 2014)

Zitat von Till:


> Kommentier am Besten einfach mal den 0 eur summen check aus.


Ich meinte auch eher den Code/Stelle, diese Rechnungen automatisch auf "bezahlt" zu setzen.


----------



## Till (1. Feb. 2014)

Am Besten da wo auch der 0 Eur check steht. z.B. mit

$app->db->query("UPDATE invoice SET status_paid = 'y' WHERE invoice_id = ".$this->id);


----------



## ramsys (1. Feb. 2014)

Danke für die Aufnahme in den Bugtracker


----------



## ramsys (3. Feb. 2014)

Wir haben das jetzt erstmal so gelöst. Hier der Diff:


```
diff --git a/interface/web/billing/invoice_edit.php b/interface/web/billing/invoice_edit.php
index 53fad0c..60d12ff 100644
--- a/interface/web/billing/invoice_edit.php
+++ b/interface/web/billing/invoice_edit.php
@@ -241,12 +241,18 @@
 		
 		if(isset($_GET['action']) && $_GET['action'] == 'finalize_invoice') {
 		
+			// Don't finalize if invoice item == 0
+			$invoice_item = $app->db->queryOneRecord("SELECT * FROM invoice_item WHERE invoice_id = ".$this->id);
+			if($invoice_item == false){
+				$app->error($app->lng('error_total_equals_zero_txt'));
+			}
+			
 			// Calculate the invoice amount
 			$tmp = $app->db->queryOneRecord("SELECT sum(quantity*price+(quantity*price*(vat/100))) as amount FROM invoice_item WHERE invoice_id = ".$this->id);
 			$invoice_amount = $tmp['amount'];
-			// Don't finalize if invoice amount == 0
+			// Update the status of the invoice
 			if($invoice_amount == 0){
-				$app->error($app->lng('error_total_equals_zero_txt'));
+				$app->db->query("UPDATE invoice SET status_paid = 'y' WHERE invoice_id = ".$this->id);
 			}
 			
 			// Get the company record
diff --git a/interface/web/billing/lib/lang/de.lng b/interface/web/billing/lib/lang/de.lng
index 34fc0a1..e327d9c 100644
--- a/interface/web/billing/lib/lang/de.lng
+++ b/interface/web/billing/lib/lang/de.lng
@@ -29,7 +29,7 @@
 $wb['Email templates'] = 'Email Vorlagen';
 $wb['Global settings'] = 'Globale Einstellungen';
 $wb['setup_fee_txt'] = 'Einmalige Einrichtungsgebühr';
-$wb['error_total_equals_zero_txt'] = 'Der Rechnungsbetrag ist 0. Sie können die Rechnung nicht abschliessen.';
+$wb['error_total_equals_zero_txt'] = 'Die Rechnung hat keine Positionen. Sie können die Rechnung nicht abschliessen.';
 $wb['proforma_invoice_txt'] = 'Proforma-Rechnung';
 $wb['invoice_draft_txt'] = 'Entwurf';
 $wb['refund_txt'] = 'Gutschrift';
```


----------



## Till (3. Feb. 2014)

Danke für den Patch!


----------



## ramsys (3. Feb. 2014)

Zitat von Till:


> Danke für den Patch!


Keine Ursache 

Gerade beim Billing-Modul haben wir noch kleinere Bugs und Verbesserungsvorschläge gefunden. Wie können wir  das effektiv zur Verfügung stellen?


----------



## Till (4. Feb. 2014)

Am besten schickst Du sie mir als patch per email. Ich kann aber nicht sagen ob wie die in allen Fällen einpflegen können, da sich bei uns im dev zeig schon sehr viel für das nächste Release geändert hat, wie z.B. SEPA Lastschrift Unterstützung.


----------



## ramsys (4. Feb. 2014)

Zitat von Till:


> da sich bei uns im dev zeig schon sehr viel für das nächste Release geändert hat, wie z.B. SEPA Lastschrift Unterstützung.


Kann man auf die Git-Version zugreifen? Das würde eventuell doppelten Aufwand vermeiden, wie z.B. hier: http://www.howtoforge.de/forum/39143-post3.html


----------

