diff --git a/app/DataMapper/FeesAndLimits.php b/app/DataMapper/FeesAndLimits.php index ecb51cc0130f..922a6cb486c1 100644 --- a/app/DataMapper/FeesAndLimits.php +++ b/app/DataMapper/FeesAndLimits.php @@ -37,9 +37,12 @@ class FeesAndLimits public $adjust_fee_percent = false; + public $is_enabled = true; + //public $gateway_type_id = 1; public static $casts = [ + 'is_enabled' => 'bool', 'gateway_type_id' => 'int', 'min_limit' => 'float', 'max_limit' => 'float', diff --git a/app/Http/Controllers/GroupSettingController.php b/app/Http/Controllers/GroupSettingController.php index 1f79f7838dc8..8f7f828270e0 100644 --- a/app/Http/Controllers/GroupSettingController.php +++ b/app/Http/Controllers/GroupSettingController.php @@ -22,6 +22,7 @@ use App\Models\GroupSetting; use App\Repositories\GroupSettingRepository; use App\Transformers\GroupSettingTransformer; use App\Utils\Traits\MakesHash; +use App\Utils\Traits\SavesDocuments; use App\Utils\Traits\Uploadable; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Http\Request; @@ -32,6 +33,7 @@ class GroupSettingController extends BaseController use DispatchesJobs; use Uploadable; use MakesHash; + use SavesDocuments; protected $entity_type = GroupSetting::class; @@ -357,6 +359,9 @@ class GroupSettingController extends BaseController $this->uploadLogo($request->file('company_logo'), $group_setting->company, $group_setting); + if ($request->has('documents')) + $this->saveDocuments($request->input('documents'), $group_setting, false); + return $this->itemResponse($group_setting); } diff --git a/app/Jobs/Util/ReminderJob.php b/app/Jobs/Util/ReminderJob.php index ea72979d617d..f6f53f176229 100644 --- a/app/Jobs/Util/ReminderJob.php +++ b/app/Jobs/Util/ReminderJob.php @@ -58,7 +58,7 @@ class ReminderJob implements ShouldQueue Invoice::where('next_send_date', Carbon::today()->format('Y-m-d'))->with('invitations')->cursor()->each(function ($invoice) { if ($invoice->isPayable()) { $reminder_template = $invoice->calculateTemplate('invoice'); - $invoice->service()->touchReminder($this->reminder_template)->save(); + $invoice->service()->touchReminder($reminder_template)->save(); $invoice->invitations->each(function ($invitation) use ($invoice, $reminder_template) { EmailEntity::dispatch($invitation, $invitation->company, $reminder_template); diff --git a/app/Models/ClientContact.php b/app/Models/ClientContact.php index bb759a8738a1..83907c39532c 100644 --- a/app/Models/ClientContact.php +++ b/app/Models/ClientContact.php @@ -87,6 +87,12 @@ class ClientContact extends Authenticatable implements HasLocalePreference 'client_id', ]; + /* Changing the username to id allows us to login() a contact that doesn't have an email address set*/ + public function username() + { + return 'id'; + } + public function getEntityType() { return self::class; diff --git a/app/Models/GroupSetting.php b/app/Models/GroupSetting.php index 14d4178a37fe..b94fffbbfd3b 100644 --- a/app/Models/GroupSetting.php +++ b/app/Models/GroupSetting.php @@ -51,6 +51,11 @@ class GroupSetting extends StaticModel return $this->hasMany(Client::class, 'id', 'group_settings_id'); } + public function documents() + { + return $this->morphMany(Document::class, 'documentable'); + } + /** * Retrieve the model for a bound value. * diff --git a/app/Repositories/BaseRepository.php b/app/Repositories/BaseRepository.php index 6fce805e8390..b6fa2b9e66cb 100644 --- a/app/Repositories/BaseRepository.php +++ b/app/Repositories/BaseRepository.php @@ -202,10 +202,6 @@ class BaseRepository /* Model now persisted, now lets do some child tasks */ - /* If client currency differs from the company default currency, then insert the client exchange rate on the model.*/ - if($client->currency()->id != (int) $model->company->settings->currency_id) - $model->exchange_rate = $client->currency()->exchange_rate; - /* Save any documents */ if (array_key_exists('documents', $data)) $this->saveDocuments($data['documents'], $model); diff --git a/app/Repositories/ClientContactRepository.php b/app/Repositories/ClientContactRepository.php index b53de62ed3fa..ea574f52061c 100644 --- a/app/Repositories/ClientContactRepository.php +++ b/app/Repositories/ClientContactRepository.php @@ -76,6 +76,7 @@ class ClientContactRepository extends BaseRepository $new_contact->client_id = $client->id; $new_contact->contact_key = Str::random(40); $new_contact->is_primary = true; + $new_contact->confirmed = true; $new_contact->save(); } } diff --git a/app/Services/Credit/CreditService.php b/app/Services/Credit/CreditService.php index b7cc91d13888..a1739b825de4 100644 --- a/app/Services/Credit/CreditService.php +++ b/app/Services/Credit/CreditService.php @@ -102,17 +102,21 @@ class CreditService { $settings = $this->credit->client->getMergedSettings(); - if (! $this->credit->design_id) { + if (! $this->credit->design_id) $this->credit->design_id = $this->decodePrimaryKey($settings->credit_design_id); - } - - if (!isset($this->credit->footer)) { + + if (!isset($this->credit->footer)) $this->credit->footer = $settings->credit_footer; - } - if (!isset($this->credit->terms)) { + if (!isset($this->credit->terms)) $this->credit->terms = $settings->credit_terms; - } + + /* If client currency differs from the company default currency, then insert the client exchange rate on the model.*/ + if(!isset($this->credit->exchange_rate) && $this->credit->client->currency()->id != (int) $this->credit->company->settings->currency_id) + $this->credit->exchange_rate = $this->credit->client->currency()->exchange_rate; + + if (!isset($this->credit->public_notes)) + $this->credit->public_notes = $this->credit->client->public_notes; return $this; diff --git a/app/Services/Invoice/InvoiceService.php b/app/Services/Invoice/InvoiceService.php index 7b9fc1a13b3c..5b14d4f8f3c6 100644 --- a/app/Services/Invoice/InvoiceService.php +++ b/app/Services/Invoice/InvoiceService.php @@ -364,18 +364,22 @@ class InvoiceService { $settings = $this->invoice->client->getMergedSettings(); - if (! $this->invoice->design_id) { + if (! $this->invoice->design_id) $this->invoice->design_id = $this->decodePrimaryKey($settings->invoice_design_id); - } - - if (!isset($this->invoice->footer)) { - $this->invoice->footer = $settings->invoice_footer; - } - - if (!isset($this->invoice->terms)) { - $this->invoice->terms = $settings->invoice_terms; - } + if (!isset($this->invoice->footer)) + $this->invoice->footer = $settings->invoice_footer; + + if (!isset($this->invoice->terms)) + $this->invoice->terms = $settings->invoice_terms; + + if (!isset($this->invoice->public_notes)) + $this->invoice->public_notes = $this->invoice->client->public_notes; + + /* If client currency differs from the company default currency, then insert the client exchange rate on the model.*/ + if(!isset($this->invoice->exchange_rate) && $this->invoice->client->currency()->id != (int) $this->invoice->company->settings->currency_id) + $this->invoice->exchange_rate = $this->invoice->client->currency()->exchange_rate; + return $this; } diff --git a/app/Services/Quote/QuoteService.php b/app/Services/Quote/QuoteService.php index 92ac2731175a..4feefda7b944 100644 --- a/app/Services/Quote/QuoteService.php +++ b/app/Services/Quote/QuoteService.php @@ -159,18 +159,21 @@ class QuoteService { $settings = $this->quote->client->getMergedSettings(); - if (! $this->quote->design_id) { + if (! $this->quote->design_id) $this->quote->design_id = $this->decodePrimaryKey($settings->quote_design_id); - } - if (!isset($this->quote->footer)) { + if (!isset($this->quote->footer)) $this->quote->footer = $settings->quote_footer; - } - - if (!isset($this->quote->terms)) { + + if (!isset($this->quote->terms)) $this->quote->terms = $settings->quote_terms; - } + + /* If client currency differs from the company default currency, then insert the client exchange rate on the model.*/ + if(!isset($this->quote->exchange_rate) && $this->quote->client->currency()->id != (int) $this->quote->company->settings->currency_id) + $this->quote->exchange_rate = $this->quote->client->currency()->exchange_rate; + if (!isset($this->quote->public_notes)) + $this->quote->public_notes = $this->quote->client->public_notes; return $this; } diff --git a/app/Transformers/AccountTransformer.php b/app/Transformers/AccountTransformer.php index 10fd3a54df18..6475834ddc85 100644 --- a/app/Transformers/AccountTransformer.php +++ b/app/Transformers/AccountTransformer.php @@ -75,6 +75,7 @@ class AccountTransformer extends EntityTransformer 'archived_at' => (int) $account->deleted_at, 'report_errors' => (bool) $account->report_errors, 'debug_enabled' => (bool) config('ninja.debug_enabled'), + 'is_docker' => (bool) config('ninja.is_docker'), ]; } diff --git a/config/ninja.php b/config/ninja.php index f569136aec69..36b6ad857d41 100644 --- a/config/ninja.php +++ b/config/ninja.php @@ -33,7 +33,7 @@ return [ 'phantomjs_secret' => env('PHANTOMJS_SECRET', false), 'phantomjs_pdf_generation' => env('PHANTOMJS_PDF_GENERATION', true), 'trusted_proxies' => env('TRUSTED_PROXIES', false), - + 'is_docker' => env('IS_DOCKER', false), 'sentry_dsn' => env('SENTRY_LARAVEL_DSN', 'https://9b4e15e575214354a7d666489783904a@sentry.invoicing.co/6'), 'environment' => env('NINJA_ENVIRONMENT', 'selfhost'), // 'hosted', 'development', 'selfhost', 'reseller'