diff --git a/VERSION.txt b/VERSION.txt
index 877f4135a4..a1e321b45a 100644
--- a/VERSION.txt
+++ b/VERSION.txt
@@ -1 +1 @@
-5.11.32
\ No newline at end of file
+5.11.33
\ No newline at end of file
diff --git a/app/Http/Controllers/ClientGatewayTokenController.php b/app/Http/Controllers/ClientGatewayTokenController.php
index d14234223a..afcd360f65 100644
--- a/app/Http/Controllers/ClientGatewayTokenController.php
+++ b/app/Http/Controllers/ClientGatewayTokenController.php
@@ -417,6 +417,18 @@ class ClientGatewayTokenController extends BaseController
{
$this->client_gateway_token_repo->delete($client_gateway_token);
+ if($client_gateway_token->is_default) {
+ $cgt = ClientGatewayToken::where('client_id', $client_gateway_token->client_id)
+ ->where('company_gateway_id', $client_gateway_token->company_gateway_id)
+ ->first();
+
+ if($cgt){
+ $cgt->is_default = true;
+ $cgt->save();
+ }
+
+ }
+
return $this->itemResponse($client_gateway_token->fresh());
}
diff --git a/app/Jobs/Inventory/AdjustProductInventory.php b/app/Jobs/Inventory/AdjustProductInventory.php
index fbf38a2ba7..11617b2bee 100644
--- a/app/Jobs/Inventory/AdjustProductInventory.php
+++ b/app/Jobs/Inventory/AdjustProductInventory.php
@@ -69,7 +69,6 @@ class AdjustProductInventory implements ShouldQueue
if ($p) {
$p->in_stock_quantity += $i->quantity;
-
$p->saveQuietly();
}
});
diff --git a/app/Jobs/Ledger/ClientLedgerBalanceUpdate.php b/app/Jobs/Ledger/ClientLedgerBalanceUpdate.php
index 628344fe16..2f3677d765 100644
--- a/app/Jobs/Ledger/ClientLedgerBalanceUpdate.php
+++ b/app/Jobs/Ledger/ClientLedgerBalanceUpdate.php
@@ -62,7 +62,6 @@ class ClientLedgerBalanceUpdate implements ShouldQueue
->where('client_id', $company_ledger->client_id)
->where('company_id', $company_ledger->company_id)
->whereNotNull('balance')
- // ->where('balance', '!=', 0)
->orderBy('id', 'DESC')
->first();
diff --git a/app/Services/Invoice/InvoiceService.php b/app/Services/Invoice/InvoiceService.php
index 6b6238f7d4..b0f0ea2673 100644
--- a/app/Services/Invoice/InvoiceService.php
+++ b/app/Services/Invoice/InvoiceService.php
@@ -243,7 +243,7 @@ class InvoiceService
public function markDeleted()
{
- $this->removeUnpaidGatewayFees();
+ // $this->removeUnpaidGatewayFees();
$this->invoice = (new MarkInvoiceDeleted($this->invoice))->run();
diff --git a/app/Services/Invoice/MarkInvoiceDeleted.php b/app/Services/Invoice/MarkInvoiceDeleted.php
index 3160f7af53..bbb8deb5e0 100644
--- a/app/Services/Invoice/MarkInvoiceDeleted.php
+++ b/app/Services/Invoice/MarkInvoiceDeleted.php
@@ -64,10 +64,16 @@ class MarkInvoiceDeleted extends AbstractService
private function adjustPaidToDateAndBalance()
{
+ $ba = $this->balance_adjustment * -1;
+ $aa = $this->adjustment_amount * -1;
+ $cb = $this->invoice->client->balance;
+
+ nlog("APB => {$this->invoice->number} - BA={$ba} - AA={$aa} - CB={$cb}");
+
$this->invoice
->client
->service()
- ->updateBalanceAndPaidToDate($this->balance_adjustment * -1, $this->adjustment_amount * -1)
+ ->updateBalanceAndPaidToDate($ba, $aa)
->save();
return $this;
@@ -132,6 +138,18 @@ class MarkInvoiceDeleted extends AbstractService
$this->balance_adjustment = $this->invoice->balance;
+ $pre_count = count((array)$this->invoice->line_items);
+
+ $items = collect((array)$this->invoice->line_items)
+ ->filter(function ($item) {
+ return $item->type_id != '3';
+ })->toArray();
+
+ if(count($items) < $pre_count) {
+ $this->invoice->line_items = array_values($items);
+ $this->invoice = $this->invoice->calc()->getInvoice();
+ }
+
return $this;
}
diff --git a/app/Services/Ledger/LedgerService.php b/app/Services/Ledger/LedgerService.php
index 565650b8ff..5fdf44d64c 100644
--- a/app/Services/Ledger/LedgerService.php
+++ b/app/Services/Ledger/LedgerService.php
@@ -57,7 +57,7 @@ class LedgerService
$this->entity->company_ledger()->save($company_ledger);
- ClientLedgerBalanceUpdate::dispatch($this->entity->company, $this->entity->client)->delay(rand(3, 7));
+ ClientLedgerBalanceUpdate::dispatch($this->entity->company, $this->entity->client);
return $this;
}
@@ -73,7 +73,7 @@ class LedgerService
$this->entity->company_ledger()->save($company_ledger);
- ClientLedgerBalanceUpdate::dispatch($this->entity->company, $this->entity->client)->delay(rand(1, 3));
+ ClientLedgerBalanceUpdate::dispatch($this->entity->company, $this->entity->client);
return $this;
}
@@ -89,7 +89,7 @@ class LedgerService
$this->entity->company_ledger()->save($company_ledger);
- ClientLedgerBalanceUpdate::dispatch($this->entity->company, $this->entity->client)->delay(rand(1, 3));
+ ClientLedgerBalanceUpdate::dispatch($this->entity->company, $this->entity->client);
return $this;
}
diff --git a/app/Services/Pdf/PdfBuilder.php b/app/Services/Pdf/PdfBuilder.php
index 4d15cd9061..3fcad4dd63 100644
--- a/app/Services/Pdf/PdfBuilder.php
+++ b/app/Services/Pdf/PdfBuilder.php
@@ -1993,34 +1993,44 @@ class PdfBuilder
return $element;
}
+ private function isMarkdown(string $content): bool
+ {
+ $content = str_ireplace('
', "\n", $content);
+
+ $markdownPatterns = [
+ '/^\s*#{1,6}\s/m', // Headers
+ '/^\s*[-+*]\s/m', // Lists
+ '/\[.*?\]\(.*?\)/', // Links
+ '/!\[.*?\]\(.*?\)/', // Images
+ '/\*\*.*?\*\*/', // Bold
+ '/\*.*?\*/', // Italic
+ '/__.*?__/', // Bold
+ '/_.*?_/', // Italic
+ '/`.*?`/', // Inline code
+ '/^\s*>/m', // Blockquotes
+ '/^\s*```/m', // Code blocks
+ ];
+
+ // Check if any pattern matches the text
+ foreach ($markdownPatterns as $pattern) {
+ if (preg_match($pattern, $content)) {
+ return true;
+ }
+ }
+
+ return false;
+
+ }
+
public function createElementContent($element, $children): self
{
foreach ($children as $child) {
$contains_html = false;
- $contains_markdown = false;
+
$child['content'] = $child['content'] ?? '';
- $lines = explode("\n", $child['content']);
- $contains_markdown = false;
-
- foreach ($lines as $line) {
- $trimmed = ltrim($line);
- if (empty($trimmed)) {
- continue;
- }
-
- $first_char = substr($trimmed, 0, 1);
-
- if (in_array($first_char, ['#', '>', '-', '+', '*', '_', '`', '[']) || // Markdown characters
- str_contains($trimmed, '**') // Bold (special case)
- ) {
- $contains_markdown = true;
- break;
- }
- }
-
- if ($this->service->company->markdown_enabled && $contains_markdown && $child['element'] !== 'script') {
+ if ($this->service->company->markdown_enabled && $this->isMarkdown($child['content']) && $child['element'] !== 'script') {
$child['content'] = str_ireplace('
', "\r", $child['content']);
$child['content'] = $this->commonmark->convert($child['content']); //@phpstan-ignore-line
}
diff --git a/app/Services/PdfMaker/PdfMakerUtilities.php b/app/Services/PdfMaker/PdfMakerUtilities.php
index 5b833369d1..be3b7b62e3 100644
--- a/app/Services/PdfMaker/PdfMakerUtilities.php
+++ b/app/Services/PdfMaker/PdfMakerUtilities.php
@@ -87,34 +87,43 @@ trait PdfMakerUtilities
return $element;
}
+
+ private function isMarkdown(string $content): bool
+ {
+ $content = str_ireplace('
', "\n", $content);
+
+ $markdownPatterns = [
+ '/^\s*#{1,6}\s/m', // Headers
+ '/^\s*[-+*]\s/m', // Lists
+ '/\[.*?\]\(.*?\)/', // Links
+ '/!\[.*?\]\(.*?\)/', // Images
+ '/\*\*.*?\*\*/', // Bold
+ '/\*.*?\*/', // Italic
+ '/__.*?__/', // Bold
+ '/_.*?_/', // Italic
+ '/`.*?`/', // Inline code
+ '/^\s*>/m', // Blockquotes
+ '/^\s*```/m', // Code blocks
+ ];
+
+ // Check if any pattern matches the text
+ foreach ($markdownPatterns as $pattern) {
+ if (preg_match($pattern, $content)) {
+ return true;
+ }
+ }
+
+ return false;
+
+ }
+
public function createElementContent($element, $children)
{
foreach ($children as $child) {
$contains_html = false;
- $contains_markdown = false;
$child['content'] = $child['content'] ?? '';
- $lines = explode("\n", $child['content']);
- $contains_markdown = false;
-
- foreach ($lines as $line) {
- $trimmed = ltrim($line);
- if (empty($trimmed)) {
- continue;
- }
-
- $first_char = substr($trimmed, 0, 1);
-
- if (
- in_array($first_char, ['#', '>', '-', '+', '*', '_', '`', '[']) || // Markdown characters
- str_contains($trimmed, '**') // Bold (special case)
- ) {
- $contains_markdown = true;
- break;
- }
- }
-
- if (isset($this->data['process_markdown']) && $this->data['process_markdown'] && $contains_markdown &&$child['element'] !== 'script') {
+ if (isset($this->data['process_markdown']) && $this->data['process_markdown'] && $this->isMarkdown($child['content']) && $child['element'] !== 'script') {
$child['content'] = str_replace('
', "\r", $child['content']);
$child['content'] = $this->commonmark->convert($child['content']); //@phpstan-ignore-line
}
diff --git a/composer.json b/composer.json
index 0305b939d9..03562a728e 100644
--- a/composer.json
+++ b/composer.json
@@ -37,7 +37,7 @@
"ext-json": "*",
"ext-libxml": "*",
"ext-simplexml": "*",
- "afosto/yaac": "^1.4",
+ "afosto/yaac": "^1.5",
"asm/php-ansible": "dev-main",
"authorizenet/authorizenet": "^2.0",
"awobaz/compoships": "^2.1",
diff --git a/composer.lock b/composer.lock
index e5a9c79cc9..8ce7f6b00d 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "0fd554859df6ddb888c01b8ea86ac68b",
+ "content-hash": "a8c8a77c6cc5e0b0c046923603c2110a",
"packages": [
{
"name": "adrienrn/php-mimetyper",
@@ -1400,6 +1400,85 @@
],
"time": "2025-01-08T16:17:16+00:00"
},
+ {
+ "name": "composer/pcre",
+ "version": "3.3.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/composer/pcre.git",
+ "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
+ "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.4 || ^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan": "<1.11.10"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.12 || ^2",
+ "phpstan/phpstan-strict-rules": "^1 || ^2",
+ "phpunit/phpunit": "^8 || ^9"
+ },
+ "type": "library",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ },
+ "branch-alias": {
+ "dev-main": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Composer\\Pcre\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jordi Boggiano",
+ "email": "j.boggiano@seld.be",
+ "homepage": "http://seld.be"
+ }
+ ],
+ "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
+ "keywords": [
+ "PCRE",
+ "preg",
+ "regex",
+ "regular expression"
+ ],
+ "support": {
+ "issues": "https://github.com/composer/pcre/issues",
+ "source": "https://github.com/composer/pcre/tree/3.3.2"
+ },
+ "funding": [
+ {
+ "url": "https://packagist.com",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/composer",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/composer/composer",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-11-12T16:29:46+00:00"
+ },
{
"name": "dasprid/enum",
"version": "1.0.6",
@@ -2953,16 +3032,16 @@
},
{
"name": "google/apiclient-services",
- "version": "v0.391.0",
+ "version": "v0.392.0",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-api-php-client-services.git",
- "reference": "911ebf7a6b570780fb994c007344cf3da4187de6"
+ "reference": "a74c2790865bd1f06c0a49460ef1c0edb0be0e7e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/911ebf7a6b570780fb994c007344cf3da4187de6",
- "reference": "911ebf7a6b570780fb994c007344cf3da4187de6",
+ "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/a74c2790865bd1f06c0a49460ef1c0edb0be0e7e",
+ "reference": "a74c2790865bd1f06c0a49460ef1c0edb0be0e7e",
"shasum": ""
},
"require": {
@@ -2991,9 +3070,9 @@
],
"support": {
"issues": "https://github.com/googleapis/google-api-php-client-services/issues",
- "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.391.0"
+ "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.392.0"
},
- "time": "2025-01-20T01:04:13+00:00"
+ "time": "2025-01-27T01:10:20+00:00"
},
{
"name": "google/auth",
@@ -6903,31 +6982,32 @@
},
{
"name": "maennchen/zipstream-php",
- "version": "3.1.1",
+ "version": "3.1.2",
"source": {
"type": "git",
"url": "https://github.com/maennchen/ZipStream-PHP.git",
- "reference": "6187e9cc4493da94b9b63eb2315821552015fca9"
+ "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/6187e9cc4493da94b9b63eb2315821552015fca9",
- "reference": "6187e9cc4493da94b9b63eb2315821552015fca9",
+ "url": "https://api.github.com/repos/maennchen/ZipStream-PHP/zipball/aeadcf5c412332eb426c0f9b4485f6accba2a99f",
+ "reference": "aeadcf5c412332eb426c0f9b4485f6accba2a99f",
"shasum": ""
},
"require": {
"ext-mbstring": "*",
"ext-zlib": "*",
- "php-64bit": "^8.1"
+ "php-64bit": "^8.2"
},
"require-dev": {
+ "brianium/paratest": "^7.7",
"ext-zip": "*",
"friendsofphp/php-cs-fixer": "^3.16",
"guzzlehttp/guzzle": "^7.5",
"mikey179/vfsstream": "^1.6",
"php-coveralls/php-coveralls": "^2.5",
- "phpunit/phpunit": "^10.0",
- "vimeo/psalm": "^5.0"
+ "phpunit/phpunit": "^11.0",
+ "vimeo/psalm": "^6.0"
},
"suggest": {
"guzzlehttp/psr7": "^2.4",
@@ -6968,7 +7048,7 @@
],
"support": {
"issues": "https://github.com/maennchen/ZipStream-PHP/issues",
- "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.1"
+ "source": "https://github.com/maennchen/ZipStream-PHP/tree/3.1.2"
},
"funding": [
{
@@ -6976,7 +7056,7 @@
"type": "github"
}
],
- "time": "2024-10-10T12:33:01+00:00"
+ "time": "2025-01-27T12:07:53+00:00"
},
{
"name": "mailgun/mailgun-php",
@@ -9459,19 +9539,20 @@
},
{
"name": "phpoffice/phpspreadsheet",
- "version": "2.3.6",
+ "version": "2.3.7",
"source": {
"type": "git",
"url": "https://github.com/PHPOffice/PhpSpreadsheet.git",
- "reference": "098b848ee6688cb9a252d9ce97889defc517ee88"
+ "reference": "cf357183b1d17a3862e8e4b9b056a556654dcae6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/098b848ee6688cb9a252d9ce97889defc517ee88",
- "reference": "098b848ee6688cb9a252d9ce97889defc517ee88",
+ "url": "https://api.github.com/repos/PHPOffice/PhpSpreadsheet/zipball/cf357183b1d17a3862e8e4b9b056a556654dcae6",
+ "reference": "cf357183b1d17a3862e8e4b9b056a556654dcae6",
"shasum": ""
},
"require": {
+ "composer/pcre": "^3.2",
"ext-ctype": "*",
"ext-dom": "*",
"ext-fileinfo": "*",
@@ -9557,9 +9638,9 @@
],
"support": {
"issues": "https://github.com/PHPOffice/PhpSpreadsheet/issues",
- "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/2.3.6"
+ "source": "https://github.com/PHPOffice/PhpSpreadsheet/tree/2.3.7"
},
- "time": "2025-01-12T03:22:26+00:00"
+ "time": "2025-01-26T04:53:06+00:00"
},
{
"name": "phpoption/phpoption",
@@ -17498,85 +17579,6 @@
],
"time": "2024-11-25T16:11:06+00:00"
},
- {
- "name": "composer/pcre",
- "version": "3.3.2",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/pcre.git",
- "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
- "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e",
- "shasum": ""
- },
- "require": {
- "php": "^7.4 || ^8.0"
- },
- "conflict": {
- "phpstan/phpstan": "<1.11.10"
- },
- "require-dev": {
- "phpstan/phpstan": "^1.12 || ^2",
- "phpstan/phpstan-strict-rules": "^1 || ^2",
- "phpunit/phpunit": "^8 || ^9"
- },
- "type": "library",
- "extra": {
- "phpstan": {
- "includes": [
- "extension.neon"
- ]
- },
- "branch-alias": {
- "dev-main": "3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\Pcre\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- }
- ],
- "description": "PCRE wrapping library that offers type-safe preg_* replacements.",
- "keywords": [
- "PCRE",
- "preg",
- "regex",
- "regular expression"
- ],
- "support": {
- "issues": "https://github.com/composer/pcre/issues",
- "source": "https://github.com/composer/pcre/tree/3.3.2"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2024-11-12T16:29:46+00:00"
- },
{
"name": "composer/semver",
"version": "3.4.3",
@@ -17905,16 +17907,16 @@
},
{
"name": "friendsofphp/php-cs-fixer",
- "version": "v3.68.1",
+ "version": "v3.68.3",
"source": {
"type": "git",
"url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git",
- "reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff"
+ "reference": "85fd31cced824749a732e697acdd1a3d657312f0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b9db2b2ea3cdba7201067acee46f984ef2397cff",
- "reference": "b9db2b2ea3cdba7201067acee46f984ef2397cff",
+ "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/85fd31cced824749a732e697acdd1a3d657312f0",
+ "reference": "85fd31cced824749a732e697acdd1a3d657312f0",
"shasum": ""
},
"require": {
@@ -17996,7 +17998,7 @@
],
"support": {
"issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues",
- "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.68.1"
+ "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.68.3"
},
"funding": [
{
@@ -18004,7 +18006,7 @@
"type": "github"
}
],
- "time": "2025-01-17T09:20:36+00:00"
+ "time": "2025-01-27T16:37:32+00:00"
},
{
"name": "hamcrest/hamcrest-php",
diff --git a/config/ninja.php b/config/ninja.php
index cfb9898b4a..c22dc54c99 100644
--- a/config/ninja.php
+++ b/config/ninja.php
@@ -17,8 +17,8 @@ return [
'require_https' => env('REQUIRE_HTTPS', true),
'app_url' => rtrim(env('APP_URL', ''), '/'),
'app_domain' => env('APP_DOMAIN', 'invoicing.co'),
- 'app_version' => env('APP_VERSION', '5.11.32'),
- 'app_tag' => env('APP_TAG', '5.11.32'),
+ 'app_version' => env('APP_VERSION', '5.11.33'),
+ 'app_tag' => env('APP_TAG', '5.11.33'),
'minimum_client_version' => '5.0.16',
'terms_version' => '1.0.1',
'api_secret' => env('API_SECRET', false),
diff --git a/database/migrations/2023_12_10_110951_inbound_mail_parsing.php b/database/migrations/2023_12_10_110951_inbound_mail_parsing.php
index 7bbed2aab7..9a58a93d11 100644
--- a/database/migrations/2023_12_10_110951_inbound_mail_parsing.php
+++ b/database/migrations/2023_12_10_110951_inbound_mail_parsing.php
@@ -10,16 +10,49 @@ return new class extends Migration {
*/
public function up(): void
{
+ // Schema::table('companies', function (Blueprint $table) {
+ // $table->boolean("expense_mailbox_active")->default(false);
+ // $table->string("expense_mailbox")->nullable();
+ // $table->boolean("inbound_mailbox_allow_company_users")->default(false);
+ // $table->boolean("inbound_mailbox_allow_vendors")->default(false);
+ // $table->boolean("inbound_mailbox_allow_clients")->default(false);
+ // $table->boolean("inbound_mailbox_allow_unknown")->default(false);
+ // $table->text("inbound_mailbox_whitelist")->nullable();
+ // $table->text("inbound_mailbox_blacklist")->nullable();
+ // });
+
+
Schema::table('companies', function (Blueprint $table) {
- $table->boolean("expense_mailbox_active")->default(false);
- $table->string("expense_mailbox")->nullable();
- $table->boolean("inbound_mailbox_allow_company_users")->default(false);
- $table->boolean("inbound_mailbox_allow_vendors")->default(false);
- $table->boolean("inbound_mailbox_allow_clients")->default(false);
- $table->boolean("inbound_mailbox_allow_unknown")->default(false);
- $table->text("inbound_mailbox_whitelist")->nullable();
- $table->text("inbound_mailbox_blacklist")->nullable();
+ if (!Schema::hasColumn('companies', 'expense_mailbox_active')) {
+ $table->boolean("expense_mailbox_active")->default(false);
+ }
+ if (!Schema::hasColumn('companies', 'expense_mailbox')) {
+ $table->string("expense_mailbox")->nullable();
+ }
+ if (!Schema::hasColumn('companies', 'inbound_mailbox_allow_company_users')) {
+ $table->boolean("inbound_mailbox_allow_company_users")->default(false);
+ }
+ if (!Schema::hasColumn('companies', 'inbound_mailbox_allow_vendors')) {
+ $table->boolean("inbound_mailbox_allow_vendors")->default(false);
+ }
+ if (!Schema::hasColumn('companies', 'inbound_mailbox_allow_clients')) {
+ $table->boolean("inbound_mailbox_allow_clients")->default(false);
+ }
+ if (!Schema::hasColumn('companies', 'inbound_mailbox_allow_unknown')) {
+ $table->boolean("inbound_mailbox_allow_unknown")->default(false);
+ }
+ if (!Schema::hasColumn('companies', 'inbound_mailbox_whitelist')) {
+ $table->text("inbound_mailbox_whitelist")->nullable();
+ }
+ if (!Schema::hasColumn('companies', 'inbound_mailbox_blacklist')) {
+ $table->text("inbound_mailbox_blacklist")->nullable();
+ }
});
+
+
+
+
+
}
/**
diff --git a/phpstan.neon b/phpstan.neon
index 88abf4d150..fe758af094 100644
--- a/phpstan.neon
+++ b/phpstan.neon
@@ -6,6 +6,7 @@ parameters:
level: 5
paths:
- app
+ - vendor/invoiceninja/admin-api
- Modules
excludePaths:
analyseAndScan: