Set exchange rates on invoices/payments when marking as paid

This commit is contained in:
David Bomba 2021-06-22 08:39:08 +10:00
parent f258ccec16
commit 823d23df24
2 changed files with 24 additions and 0 deletions

View File

@ -28,6 +28,7 @@ class CompanySettings extends BaseSettings
public $lock_invoices = 'off'; //off,when_sent,when_paid //@implemented public $lock_invoices = 'off'; //off,when_sent,when_paid //@implemented
public $enable_client_portal_tasks = false; //@ben to implement public $enable_client_portal_tasks = false; //@ben to implement
public $show_all_tasks_client_portal = 'all'; // all, uninvoiced, invoiced
public $enable_client_portal_password = false; //@implemented public $enable_client_portal_password = false; //@implemented
public $enable_client_portal = true; //@implemented public $enable_client_portal = true; //@implemented
public $enable_client_portal_dashboard = false; // @TODO There currently is no dashboard so this is pending public $enable_client_portal_dashboard = false; // @TODO There currently is no dashboard so this is pending
@ -268,6 +269,7 @@ class CompanySettings extends BaseSettings
public $hide_empty_columns_on_pdf = false; public $hide_empty_columns_on_pdf = false;
public static $casts = [ public static $casts = [
'show_all_tasks_client_portal' => 'string',
'entity_send_time' => 'int', 'entity_send_time' => 'int',
'shared_invoice_credit_counter' => 'bool', 'shared_invoice_credit_counter' => 'bool',
'reply_to_name' => 'string', 'reply_to_name' => 'string',

View File

@ -16,12 +16,14 @@ use App\Events\Payment\PaymentWasCreated;
use App\Factory\PaymentFactory; use App\Factory\PaymentFactory;
use App\Jobs\Invoice\InvoiceWorkflowSettings; use App\Jobs\Invoice\InvoiceWorkflowSettings;
use App\Jobs\Payment\EmailPayment; use App\Jobs\Payment\EmailPayment;
use App\Libraries\Currency\Conversion\CurrencyApi;
use App\Models\Invoice; use App\Models\Invoice;
use App\Models\Payment; use App\Models\Payment;
use App\Services\AbstractService; use App\Services\AbstractService;
use App\Services\Client\ClientService; use App\Services\Client\ClientService;
use App\Utils\Ninja; use App\Utils\Ninja;
use App\Utils\Traits\GeneratesCounter; use App\Utils\Traits\GeneratesCounter;
use Illuminate\Support\Carbon;
class MarkPaid extends AbstractService class MarkPaid extends AbstractService
{ {
@ -63,6 +65,8 @@ class MarkPaid extends AbstractService
/* Create a payment relationship to the invoice entity */ /* Create a payment relationship to the invoice entity */
$payment->save(); $payment->save();
$this->setExchangeRate($payment);
$payment->invoices()->attach($this->invoice->id, [ $payment->invoices()->attach($this->invoice->id, [
'amount' => $payment->amount, 'amount' => $payment->amount,
]); ]);
@ -96,4 +100,22 @@ class MarkPaid extends AbstractService
return $this->invoice; return $this->invoice;
} }
private function setExchangeRate(Payment $payment)
{
$client_currency = $payment->client->getSetting('currency_id');
$company_currency = $payment->client->company->settings->currency_id;
if ($company_currency != $client_currency) {
$exchange_rate = new CurrencyApi();
$payment->exchange_rate = $exchange_rate->exchangeRate($client_currency, $company_currency, Carbon::parse($payment->date));
$payment->exchange_currency_id = $client_currency;
$payment->save();
}
}
} }