diff --git a/app/Export/CSV/PaymentExport.php b/app/Export/CSV/PaymentExport.php
index ef9a4479bca2..7f77563f9b92 100644
--- a/app/Export/CSV/PaymentExport.php
+++ b/app/Export/CSV/PaymentExport.php
@@ -67,14 +67,12 @@ class PaymentExport extends BaseExport
$headerdisplay = $this->buildHeader();
- nlog($headerdisplay);
-
$header = collect($this->input['report_keys'])->map(function ($key, $value) use ($headerdisplay) {
return ['identifier' => $key, 'display_value' => $headerdisplay[$value]];
})->toArray();
nlog($header);
-
+
$report = $query->cursor()
->map(function ($resource) {
$row = $this->buildRow($resource);
diff --git a/app/Jobs/Mail/NinjaMailerObject.php b/app/Jobs/Mail/NinjaMailerObject.php
index 1d973cb90275..44eea91cc5e1 100644
--- a/app/Jobs/Mail/NinjaMailerObject.php
+++ b/app/Jobs/Mail/NinjaMailerObject.php
@@ -32,12 +32,12 @@ class NinjaMailerObject
/* Variable for cascading notifications */
public $entity_string = false;
- /* @var bool | App\Models\InvoiceInvitation | app\Models\QuoteInvitation | app\Models\CreditInvitation | app\Models\RecurringInvoiceInvitation | app\Models\PurchaseOrderInvitation $invitation*/
+ /* @var bool | App\Models\InvoiceInvitation | App\Models\QuoteInvitation | App\Models\CreditInvitation | App\Models\RecurringInvoiceInvitation | App\Models\PurchaseOrderInvitation $invitation*/
public $invitation = false;
public $template = false;
- /* @var bool | App\Models\Invoice | app\Models\Quote | app\Models\Credit | app\Models\RecurringInvoice | app\Models\PurchaseOrder $invitation*/
+ /* @var bool | App\Models\Invoice | App\Models\Quote | App\Models\Credit | App\Models\RecurringInvoice | App\Models\PurchaseOrder | App\Models\Payment $entity*/
public $entity = false;
public $reminder_template = '';
diff --git a/app/Listeners/User/UpdateUserLastLogin.php b/app/Listeners/User/UpdateUserLastLogin.php
index 9fc383db207f..94e20512eefc 100644
--- a/app/Listeners/User/UpdateUserLastLogin.php
+++ b/app/Listeners/User/UpdateUserLastLogin.php
@@ -55,7 +55,7 @@ class UpdateUserLastLogin implements ShouldQueue
$key = "user_logged_in_{$user->id}{$event->company->db}";
- if ($user->ip != $ip && is_null(Cache::get($key))) {
+ if ($user->ip != $ip && is_null(Cache::get($key)) && $user->user_logged_in_notification) {
$nmo = new NinjaMailerObject;
$nmo->mailable = new UserLoggedIn($user, $user->account->companies->first(), $ip);
$nmo->company = $user->account->companies->first();
@@ -69,6 +69,7 @@ class UpdateUserLastLogin implements ShouldQueue
Cache::put($key, true, 60 * 24);
$arr = json_encode(['ip' => $ip]);
+ $arr = ctrans('texts.new_login_detected'). " {$ip}";
SystemLogger::dispatch(
$arr,
diff --git a/app/Mail/TemplateEmail.php b/app/Mail/TemplateEmail.php
index 984029cefe26..63794936e5c8 100644
--- a/app/Mail/TemplateEmail.php
+++ b/app/Mail/TemplateEmail.php
@@ -108,12 +108,15 @@ class TemplateEmail extends Mailable
if (strlen($settings->bcc_email) > 1) {
if (Ninja::isHosted()) {
- $bccs = explode(',', str_replace(' ', '', $settings->bcc_email));
- $this->bcc(array_slice($bccs, 0, 2));
- //$this->bcc(reset($bccs)); //remove whitespace if any has been inserted.
+
+ if($company->account->isPaid()) {
+ $bccs = explode(',', str_replace(' ', '', $settings->bcc_email));
+ $this->bcc(array_slice($bccs, 0, 5));
+ }
+
} else {
$this->bcc(explode(',', str_replace(' ', '', $settings->bcc_email)));
- }//remove whitespace if any has been inserted.
+ }
}
$this->subject(str_replace("
", "", $this->build_email->getSubject()))
diff --git a/app/Mail/VendorTemplateEmail.php b/app/Mail/VendorTemplateEmail.php
index 2ac0987b8045..bdfb818b0091 100644
--- a/app/Mail/VendorTemplateEmail.php
+++ b/app/Mail/VendorTemplateEmail.php
@@ -11,10 +11,11 @@
namespace App\Mail;
+use App\Utils\Ninja;
use App\Models\VendorContact;
-use App\Services\PdfMaker\Designs\Utilities\DesignHelpers;
-use App\Utils\VendorHtmlEngine;
use Illuminate\Mail\Mailable;
+use App\Utils\VendorHtmlEngine;
+use App\Services\PdfMaker\Designs\Utilities\DesignHelpers;
class VendorTemplateEmail extends Mailable
{
@@ -102,8 +103,19 @@ class VendorTemplateEmail extends Mailable
$this->from(config('mail.from.address'), $email_from_name);
if (strlen($settings->bcc_email) > 1) {
- $this->bcc(explode(',', str_replace(' ', '', $settings->bcc_email)));
- }//remove whitespace if any has been inserted.
+
+ if (Ninja::isHosted()) {
+
+ if($this->company->account->isPaid()) {
+ $bccs = explode(',', str_replace(' ', '', $settings->bcc_email));
+ $this->bcc(array_slice($bccs, 0, 5));
+ }
+
+ } else {
+ $this->bcc(explode(',', str_replace(' ', '', $settings->bcc_email)));
+ }
+
+ }
$this->subject($this->build_email->getSubject())
->text('email.template.text', [
diff --git a/app/Models/User.php b/app/Models/User.php
index 22e5130d0df1..aec9b0e787d5 100644
--- a/app/Models/User.php
+++ b/app/Models/User.php
@@ -73,7 +73,8 @@ use Illuminate\Foundation\Auth\User as Authenticatable;
* @property int|null $deleted_at
* @property string|null $oauth_user_refresh_token
* @property string|null $last_confirmed_email_address
- * @property int $has_password
+ * @property bool $has_password
+ * @property bool $user_logged_in_notification
* @property Carbon|null $oauth_user_token_expiry
* @property string|null $sms_verification_code
* @property bool $verified_phone_number
@@ -140,6 +141,7 @@ class User extends Authenticatable implements MustVerifyEmail
*
*/
protected $fillable = [
+ 'user_logged_in_notification',
'first_name',
'last_name',
'email',
diff --git a/app/Services/Email/Email.php b/app/Services/Email/Email.php
index 6fada767e07b..c539d075d445 100644
--- a/app/Services/Email/Email.php
+++ b/app/Services/Email/Email.php
@@ -140,7 +140,7 @@ class Email implements ShouldQueue
$this->email_object->client_id ? $this->email_object->settings = $this->email_object->client->getMergedSettings() : $this->email_object->settings = $this->company->settings;
- $this->email_object->client_id ? nlog("client settings") : nlog("company settings ");
+ // $this->email_object->client_id ? nlog("client settings") : nlog("company settings ");
$this->email_object->whitelabel = $this->company->account->isPaid() ? true : false;
@@ -418,6 +418,9 @@ class Email implements ShouldQueue
return true;
}
+ if($address_object->name == " " || $address_object->name == "") {
+ return true;
+ }
}
diff --git a/app/Services/Email/EmailDefaults.php b/app/Services/Email/EmailDefaults.php
index 401060b6c7b4..1f78facaa1e5 100644
--- a/app/Services/Email/EmailDefaults.php
+++ b/app/Services/Email/EmailDefaults.php
@@ -255,8 +255,8 @@ class EmailDefaults
if (strlen($this->email->email_object->settings->bcc_email) > 1) {
if (Ninja::isHosted() && $this->email->company->account->isPaid()) {
- $bccs = array_slice(explode(',', str_replace(' ', '', $this->email->email_object->settings->bcc_email)), 0, 2);
- } elseif (Ninja::isSelfHost()) {
+ $bccs = array_slice(explode(',', str_replace(' ', '', $this->email->email_object->settings->bcc_email)), 0, 5);
+ } else {
$bccs = (explode(',', str_replace(' ', '', $this->email->email_object->settings->bcc_email)));
}
}
diff --git a/app/Transformers/UserTransformer.php b/app/Transformers/UserTransformer.php
index ffe029fbb0fe..0971c7dc2b02 100644
--- a/app/Transformers/UserTransformer.php
+++ b/app/Transformers/UserTransformer.php
@@ -64,6 +64,7 @@ class UserTransformer extends EntityTransformer
'oauth_user_token' => empty($user->oauth_user_token) ? '' : '***',
'verified_phone_number' => (bool) $user->verified_phone_number,
'language_id' => (string) $user->language_id ?? '',
+ 'user_logged_in_notification' => (bool) $user->user_logged_in_notification,
];
}
diff --git a/database/migrations/2023_10_18_061415_add_user_notification_suppression.php b/database/migrations/2023_10_18_061415_add_user_notification_suppression.php
new file mode 100644
index 000000000000..4c01624a02ac
--- /dev/null
+++ b/database/migrations/2023_10_18_061415_add_user_notification_suppression.php
@@ -0,0 +1,43 @@
+boolean('user_logged_in_notification')->default(true);
+ });
+
+
+ $cur = Currency::find(120);
+
+ if(!$cur) {
+ $cur = new \App\Models\Currency();
+ $cur->id = 120;
+ $cur->code = 'TOP';
+ $cur->name = "Tongan Pa'anga";
+ $cur->symbol = 'T$';
+ $cur->thousand_separator = ',';
+ $cur->decimal_separator = '.';
+ $cur->precision = 2;
+ $cur->save();
+ }
+
+ }
+
+ /**
+ * Reverse the migrations.
+ */
+ public function down(): void
+ {
+ //
+ }
+};
diff --git a/database/seeders/CurrenciesSeeder.php b/database/seeders/CurrenciesSeeder.php
index b2c8b35af751..e6976622ee86 100644
--- a/database/seeders/CurrenciesSeeder.php
+++ b/database/seeders/CurrenciesSeeder.php
@@ -142,6 +142,7 @@ class CurrenciesSeeder extends Seeder
['id' => 117, 'name' => 'Gold Troy Ounce', 'code' => 'XAU', 'symbol' => 'XAU', 'precision' => '3', 'thousand_separator' => ',', 'decimal_separator' => '.'],
['id' => 118, 'name' => 'Nicaraguan Córdoba', 'code' => 'NIO', 'symbol' => 'C$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
['id' => 119, 'name' => 'Malagasy ariary', 'code' => 'MGA', 'symbol' => 'Ar', 'precision' => '0', 'thousand_separator' => ',', 'decimal_separator' => '.'],
+ ['id' => 120, 'name' => "Tongan Pa anga", 'code' => 'TOP', 'symbol' => 'T$', 'precision' => '2', 'thousand_separator' => ',', 'decimal_separator' => '.'],
];
foreach ($currencies as $currency) {
diff --git a/lang/en/texts.php b/lang/en/texts.php
index 5fe2741906a1..c7bdffb4bd50 100644
--- a/lang/en/texts.php
+++ b/lang/en/texts.php
@@ -2402,7 +2402,10 @@ $LANG = array(
'currency_libyan_dinar' => 'Libyan Dinar',
'currency_silver_troy_ounce' => 'Silver Troy Ounce',
'currency_gold_troy_ounce' => 'Gold Troy Ounce',
-
+ 'currency_nicaraguan_córdoba' => 'Nicaraguan Córdoba',
+ 'currency_malagasy_ariary' => 'Malagasy ariary',
+ "currency_tongan_pa_anga" => "Tongan Pa'anga",
+
'review_app_help' => 'We hope you\'re enjoying using the app.
If you\'d consider :link we\'d greatly appreciate it!',
'writing_a_review' => 'writing a review',
diff --git a/resources/views/portal/ninja2020/invoices/payment.blade.php b/resources/views/portal/ninja2020/invoices/payment.blade.php
index 8d5df833d326..a0d786ff4610 100644
--- a/resources/views/portal/ninja2020/invoices/payment.blade.php
+++ b/resources/views/portal/ninja2020/invoices/payment.blade.php
@@ -64,7 +64,7 @@
{{ ctrans('texts.public_notes') }}