mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2025-05-31 23:14:34 -04:00
Add late fees back into reminders
This commit is contained in:
parent
5171200dd8
commit
25459797db
@ -208,9 +208,6 @@ class PaymentController extends BaseController
|
|||||||
{
|
{
|
||||||
$payment = $this->payment_repo->save($request->all(), PaymentFactory::create(auth()->user()->company()->id, auth()->user()->id));
|
$payment = $this->payment_repo->save($request->all(), PaymentFactory::create(auth()->user()->company()->id, auth()->user()->id));
|
||||||
|
|
||||||
if($request->has('email_receipt') && $request->input('email_receipt') == 'true' && !$payment->client->getSetting('client_manual_payment_notification'))
|
|
||||||
$payment->service()->sendEmail();
|
|
||||||
|
|
||||||
return $this->itemResponse($payment);
|
return $this->itemResponse($payment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ use Illuminate\Queue\InteractsWithQueue;
|
|||||||
use Illuminate\Queue\SerializesModels;
|
use Illuminate\Queue\SerializesModels;
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
|
|
||||||
|
//@DEPRECATED
|
||||||
class SendReminders implements ShouldQueue
|
class SendReminders implements ShouldQueue
|
||||||
{
|
{
|
||||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, MakesDates, MakesReminders;
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, MakesDates, MakesReminders;
|
||||||
|
@ -11,11 +11,13 @@
|
|||||||
|
|
||||||
namespace App\Jobs\Util;
|
namespace App\Jobs\Util;
|
||||||
|
|
||||||
|
use App\DataMapper\InvoiceItem;
|
||||||
use App\Events\Invoice\InvoiceWasEmailed;
|
use App\Events\Invoice\InvoiceWasEmailed;
|
||||||
use App\Jobs\Entity\EmailEntity;
|
use App\Jobs\Entity\EmailEntity;
|
||||||
use App\Libraries\MultiDB;
|
use App\Libraries\MultiDB;
|
||||||
use App\Models\Invoice;
|
use App\Models\Invoice;
|
||||||
use App\Utils\Ninja;
|
use App\Utils\Ninja;
|
||||||
|
use App\Utils\Traits\MakesDates;
|
||||||
use App\Utils\Traits\MakesReminders;
|
use App\Utils\Traits\MakesReminders;
|
||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Contracts\Queue\ShouldQueue;
|
use Illuminate\Contracts\Queue\ShouldQueue;
|
||||||
@ -26,7 +28,7 @@ use Illuminate\Support\Carbon;
|
|||||||
|
|
||||||
class ReminderJob implements ShouldQueue
|
class ReminderJob implements ShouldQueue
|
||||||
{
|
{
|
||||||
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, MakesReminders;
|
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels, MakesReminders, MakesDates;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
@ -65,6 +67,8 @@ class ReminderJob implements ShouldQueue
|
|||||||
if ($invoice->isPayable()) {
|
if ($invoice->isPayable()) {
|
||||||
$reminder_template = $invoice->calculateTemplate('invoice');
|
$reminder_template = $invoice->calculateTemplate('invoice');
|
||||||
$invoice->service()->touchReminder($reminder_template)->save();
|
$invoice->service()->touchReminder($reminder_template)->save();
|
||||||
|
|
||||||
|
$invoice = $this->calcLateFee($invoice, $reminder_template);
|
||||||
|
|
||||||
$invoice->invitations->each(function ($invitation) use ($invoice, $reminder_template) {
|
$invoice->invitations->each(function ($invitation) use ($invoice, $reminder_template) {
|
||||||
EmailEntity::dispatch($invitation, $invitation->company, $reminder_template);
|
EmailEntity::dispatch($invitation, $invitation->company, $reminder_template);
|
||||||
@ -84,4 +88,89 @@ class ReminderJob implements ShouldQueue
|
|||||||
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calculates the late if - if any - and rebuilds the invoice
|
||||||
|
*
|
||||||
|
* @param Invoice $invoice
|
||||||
|
* @param string $template
|
||||||
|
* @return Invoice
|
||||||
|
*/
|
||||||
|
private function calcLateFee($invoice, $template) :Invoice
|
||||||
|
{
|
||||||
|
$late_fee_amount = 0;
|
||||||
|
$late_fee_percent = 0;
|
||||||
|
|
||||||
|
switch ($template) {
|
||||||
|
case 'reminder1':
|
||||||
|
$late_fee_amount = $invoice->client->getSetting('late_fee_amount1');
|
||||||
|
$late_fee_percent = $invoice->client->getSetting('late_fee_percent1');
|
||||||
|
break;
|
||||||
|
case 'reminder2':
|
||||||
|
$late_fee_amount = $invoice->client->getSetting('late_fee_amount2');
|
||||||
|
$late_fee_percent = $invoice->client->getSetting('late_fee_percent2');
|
||||||
|
break;
|
||||||
|
case 'reminder3':
|
||||||
|
$late_fee_amount = $invoice->client->getSetting('late_fee_amount3');
|
||||||
|
$late_fee_percent = $invoice->client->getSetting('late_fee_percent3');
|
||||||
|
break;
|
||||||
|
case 'endless_reminder':
|
||||||
|
$late_fee_amount = $invoice->client->getSetting('late_fee_endless_amount');
|
||||||
|
$late_fee_percent = $invoice->client->getSetting('late_fee_endless_percent');
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$late_fee_amount = 0;
|
||||||
|
$late_fee_percent = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->setLateFee($invoice, $late_fee_amount, $late_fee_percent);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies the late fee to the invoice line items
|
||||||
|
*
|
||||||
|
* @param Invoice $invoice
|
||||||
|
* @param float $amount The fee amount
|
||||||
|
* @param float $percent The fee percentage amount
|
||||||
|
*
|
||||||
|
* @return Invoice
|
||||||
|
*/
|
||||||
|
private function setLateFee($invoice, $amount, $percent) :Invoice
|
||||||
|
{
|
||||||
|
$temp_invoice_balance = $invoice->balance;
|
||||||
|
|
||||||
|
if ($amount <= 0 && $percent <= 0) {
|
||||||
|
return $invoice;
|
||||||
|
}
|
||||||
|
|
||||||
|
$fee = $amount;
|
||||||
|
|
||||||
|
if ($invoice->partial > 0) {
|
||||||
|
$fee += round($invoice->partial * $percent / 100, 2);
|
||||||
|
} else {
|
||||||
|
$fee += round($invoice->balance * $percent / 100, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
$invoice_item = new InvoiceItem;
|
||||||
|
$invoice_item->type_id = '5';
|
||||||
|
$invoice_item->product_key = trans('texts.fee');
|
||||||
|
$invoice_item->notes = ctrans('texts.late_fee_added', ['date' => $this->translateDate(now()->startOfDay(), $invoice->client->date_format(), $invoice->client->locale())]);
|
||||||
|
$invoice_item->quantity = 1;
|
||||||
|
$invoice_item->cost = $fee;
|
||||||
|
|
||||||
|
$invoice_items = $invoice->line_items;
|
||||||
|
$invoice_items[] = $invoice_item;
|
||||||
|
|
||||||
|
$invoice->line_items = $invoice_items;
|
||||||
|
|
||||||
|
/**Refresh Invoice values*/
|
||||||
|
$invoice = $invoice->calc()->getInvoice();
|
||||||
|
|
||||||
|
$invoice->client->service()->updateBalance($this->invoice->balance - $temp_invoice_balance)->save();
|
||||||
|
$invoice->ledger()->updateInvoiceBalance($this->invoice->balance - $temp_invoice_balance, "Late Fee Adjustment for invoice {$this->invoice->number}");
|
||||||
|
|
||||||
|
return $invoice;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,7 +157,7 @@ class PaymentRepository extends BaseRepository {
|
|||||||
|
|
||||||
if ( ! $is_existing_payment && ! $this->import_mode ) {
|
if ( ! $is_existing_payment && ! $this->import_mode ) {
|
||||||
|
|
||||||
if ($payment->client->getSetting('client_manual_payment_notification'))
|
if (array_key_exists('email_receipt', $data) && $data['email_receipt'] == true)
|
||||||
$payment->service()->sendEmail();
|
$payment->service()->sendEmail();
|
||||||
|
|
||||||
event( new PaymentWasCreated( $payment, $payment->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null) ) );
|
event( new PaymentWasCreated( $payment, $payment->company, Ninja::eventVars(auth()->user() ? auth()->user()->id : null) ) );
|
||||||
|
@ -49,7 +49,7 @@ class PaymentService
|
|||||||
}
|
}
|
||||||
|
|
||||||
public function sendEmail($contact = null)
|
public function sendEmail($contact = null)
|
||||||
{
|
{nlog("merp");
|
||||||
return (new SendEmail($this->payment, $contact))->run();
|
return (new SendEmail($this->payment, $contact))->run();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user