Zahlungsbetrag darf Rechnung nicht übersteigen

InvoicePlane 1.4.6

Ich habe eine Rechnung auf die ich bereits 3 Zahlungen a 49,90 EUR gebucht habe.
Bei der Rechnung sind noch 499,10 EUR offen.
Gebe ich nun eine weitere Zahlung über 49,90 ein und klicke auf speichern, erscheint eine Fehlermeldung:

Zahlungsbetrag darf Rechnungsbetrag nicht übersteigen.

49,00 eur nimmt er auch nicht, ebensowenig wie 50 EUR. Gebe ich aber z.B. 123,00EUR ein, übernimmt er diesen.
Den kann ich dann in der Zahlungsübersicht via “Optionen -> Bearbeiten” auch erfolgreich auf 49,90 ändern.

Versuche ich eine weiter Zahlung mit 49,90 nimmt er dies wieder nicht.
Siehe Video: http://screencast-o-matic.com/watch/cDenq31XGr

wenn ich 20,10 eingebe, macht er bei mir 2,100.00 € raus… was natürlich den Rechnungsbetrag überschreitet.
Allerdings bekomme ich die Fehlermeldung nicht!

Wenn ich 20.10 eingebe, funktioniert es wie gewünscht (also Punkt, nicht Komma :slight_smile:

Das lässt sich in den Einstellungen konfigurieren.

wenn ich 21,00 eingebe, sollte nie 2100,00 daraus werden. Ob nun , oder . als Tausendtrenner festgelegt wurde oder nicht :grinning:
Allerdings habe ich, wie beschrieben, keine Fehlermeldung bekommen wie @suther , sondern in der Rechnung dann einfach ein Minus von -1900 oder so stehen gehabt (Testinstallation mit ampps und 1.4.6)

Naja doch, es macht schon einen Unterschied, da das System bei falsch gesetztem Dezimal Trennzeichen auch intern das Komma falsch gesetzt wird. Leider ist das System in der Hinsicht nicht Intelligent genug.

Du beschreibst ja auch ein ganz anderes Problem! Besser wenn du dafür nen eigenen Thread öffnest.

OK, in application/modules/payments/models/mdl_payments.php habe ich folgende Kontrollausgabe gemacht:

 public function validate_payment_amount($amount) 
    { 
        $invoice_id = $this->input->post('invoice_id'); 
        $payment_id = $this->input->post('payment_id'); 

        $invoice_balance = $this->db->where('invoice_id', $invoice_id)->get('ip_invoice_amounts')->row()->invoice_balance; 

        if ($payment_id) { 
            $payment = $this->db->where('payment_id', $payment_id)->get('ip_payments')->row(); 
            $invoice_balance = $invoice_balance + $payment->payment_amount; 
        } 
echo "$amount - $invoice_balance"; 
        if ($amount > $invoice_balance) { 
            $this->form_validation->set_message('validate_payment_amount', trans('payment_cannot_exceed_balance')); 
            return false; 
        } 

        return true; 
    } 

Das ergibt: 49,00 - 300.30
Zudem würde ein var_dump() zeigen, dass beides Strings sind.

Mit einem Type-Cast nach float, kann man das Problem lösen.
Hier die geänderte Funktion:

public function validate_payment_amount($amount)
	{
	$amount = (float)$amount;
	$invoice_id = $this->input->post('invoice_id');
	$payment_id = $this->input->post('payment_id');
	$invoice_balance = (float)$this->db->where('invoice_id', $invoice_id)->get('ip_invoice_amounts')->row()->invoice_$
	if ($payment_id)
		{
		$payment = $this->db->where('payment_id', $payment_id)->get('ip_payments')->row();
		$invoice_balance = $invoice_balance + $payment->payment_amount;
		}

	$invoice_balance = (float)$invoice_balance;
	if ($amount > $invoice_balance)
		{
		$this->form_validation->set_message('validate_payment_amount', trans('payment_cannot_exceed_balance'));
		return false;
		}

	return true;
	}