diff --git a/app/Abstracts/Export.php b/app/Abstracts/Export.php
index 068d3c2f3..b9b27bfee 100644
--- a/app/Abstracts/Export.php
+++ b/app/Abstracts/Export.php
@@ -15,9 +15,10 @@ use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithTitle;
+use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
use PhpOffice\PhpSpreadsheet\Shared\Date as ExcelDate;
-abstract class Export implements FromCollection, HasLocalePreference, ShouldAutoSize, ShouldQueue, WithHeadings, WithMapping, WithTitle
+abstract class Export implements FromCollection, HasLocalePreference, ShouldAutoSize, ShouldQueue, WithHeadings, WithMapping, WithTitle, WithStrictNullComparison
{
use Exportable;
diff --git a/app/Abstracts/Import.php b/app/Abstracts/Import.php
index eb05b9ab0..54003fc60 100644
--- a/app/Abstracts/Import.php
+++ b/app/Abstracts/Import.php
@@ -57,7 +57,7 @@ abstract class Import implements HasLocalePreference, ShouldQueue, SkipsEmptyRow
$row['reconciled'] = (int) $row['reconciled'];
}
- $date_fields = ['paid_at', 'invoiced_at', 'billed_at', 'due_at', 'issued_at', 'created_at', 'transferred_at'];
+ $date_fields = ['paid_at', 'invoiced_at', 'billed_at', 'due_at', 'issued_at', 'transferred_at'];
foreach ($date_fields as $date_field) {
if (!isset($row[$date_field])) {
continue;
diff --git a/app/Events/Common/DatesFormating.php b/app/Events/Common/DatesFormating.php
new file mode 100644
index 000000000..7108e5885
--- /dev/null
+++ b/app/Events/Common/DatesFormating.php
@@ -0,0 +1,23 @@
+columns = $columns;
+ $this->request = $request;
+ }
+}
diff --git a/app/Http/Controllers/Modules/Tiles.php b/app/Http/Controllers/Modules/Tiles.php
index 8af4e94de..e43325209 100644
--- a/app/Http/Controllers/Modules/Tiles.php
+++ b/app/Http/Controllers/Modules/Tiles.php
@@ -194,20 +194,19 @@ class Tiles extends Controller
case 'paid':
$response = $this->getPaidModules($data);
- $last_page = $response->last_page;
+ $last_page = ! empty($response) ? $response->last_page : 1;
$modules = $this->prepareModules($response);
break;
case 'new':
$response = $this->getNewModules($data);
- $last_page = $response->last_page;
+ $last_page = ! empty($response) ? $response->last_page : 1;
$modules = $this->prepareModules($response);
-
break;
case 'free':
$response = $this->getFreeModules($data);
- $last_page = $response->last_page;
+ $last_page = ! empty($response) ? $response->last_page : 1;
$modules = $this->prepareModules($response);
break;
case 'search':
@@ -215,7 +214,7 @@ class Tiles extends Controller
$response = $this->getSearchModules($data);
- $last_page = $response->last_page;
+ $last_page = ! empty($response) ? $response->last_page : 1;
$modules = $this->prepareModules($response);
break;
}
diff --git a/app/Http/Middleware/DateFormat.php b/app/Http/Middleware/DateFormat.php
index 409cf3e18..f5d32e5bd 100644
--- a/app/Http/Middleware/DateFormat.php
+++ b/app/Http/Middleware/DateFormat.php
@@ -2,6 +2,7 @@
namespace App\Http\Middleware;
+use App\Events\Common\DatesFormating;
use Closure;
use Date;
@@ -10,15 +11,29 @@ class DateFormat
/**
* Handle an incoming request.
*
- * @param \Illuminate\Http\Request $request
- * @param \Closure $next
+ * @param \Illuminate\Http\Request $request
+ * @param \Closure $next
+ *
* @return mixed
*/
public function handle($request, Closure $next)
{
if (($request->method() == 'POST') || ($request->method() == 'PATCH')) {
- // todo fire event
- $fields = ['paid_at', 'due_at', 'issued_at', 'started_at', 'ended_at', 'expire_at', 'recurring_started_at', 'recurring_limit_date'];
+ $columns = new \stdClass();
+ $columns->fields = [
+ 'paid_at',
+ 'due_at',
+ 'issued_at',
+ 'started_at',
+ 'ended_at',
+ 'expire_at',
+ 'recurring_started_at',
+ 'recurring_limit_date',
+ ];
+
+ event(new DatesFormating($columns, $request));
+
+ $fields = $columns->fields;
foreach ($fields as $field) {
$date = $request->get($field);
@@ -28,7 +43,7 @@ class DateFormat
}
if (Date::parse($date)->format('H:i:s') == '00:00:00') {
- $new_date = Date::parse($date)->format('Y-m-d') . ' ' . Date::now()->format('H:i:s');
+ $new_date = Date::parse($date)->format('Y-m-d') . ' ' . Date::now()->format('H:i:s');
} else {
$new_date = Date::parse($date)->toDateTimeString();
}
diff --git a/database/migrations/2023_06_22_000000_core_v3016.php b/database/migrations/2023_06_22_000000_core_v3016.php
new file mode 100644
index 000000000..1f19dc6fa
--- /dev/null
+++ b/database/migrations/2023_06_22_000000_core_v3016.php
@@ -0,0 +1,52 @@
+getDoctrineSchemaManager()->listTableDetails($connection->getTablePrefix() . 'settings');
+
+ if ($d_table->hasIndex('settings_company_id_key_unique')) {
+ $table->dropUnique('settings_company_id_key_unique');
+ } else {
+ $table->dropUnique(['company_id', 'key']);
+ }
+
+ $table->unique(['company_id', 'key', 'deleted_at']);
+ });
+ }
+
+ /**
+ * Reverse the migrations.
+ *
+ * @return void
+ */
+ public function down()
+ {
+ // Settings
+ Schema::table('settings', function (Blueprint $table) {
+ $connection = Schema::getConnection();
+ $d_table = $connection->getDoctrineSchemaManager()->listTableDetails($connection->getTablePrefix() . 'settings');
+
+ if ($d_table->hasIndex('settings_company_id_key_deleted_at_unique')) {
+ $table->dropUnique('settings_company_id_key_deleted_at_unique');
+ } else {
+ $table->dropUnique(['company_id', 'key', 'deleted_at']);
+ }
+
+ $table->unique(['company_id', 'key']);
+ });
+ }
+};
diff --git a/public/img/wizard-rocket.gif b/public/img/wizard-rocket.gif
new file mode 100644
index 000000000..2fa14a4fe
Binary files /dev/null and b/public/img/wizard-rocket.gif differ
diff --git a/resources/assets/js/components/NotificationPlugin/Notification.vue b/resources/assets/js/components/NotificationPlugin/Notification.vue
index 429595845..8a2186e77 100644
--- a/resources/assets/js/components/NotificationPlugin/Notification.vue
+++ b/resources/assets/js/components/NotificationPlugin/Notification.vue
@@ -220,6 +220,8 @@
let styles = {};
+ styles.zIndex = 100;
+
if (this.verticalAlign === 'top') {
styles.top = `${pixels}px`;
} else {
diff --git a/resources/lang/en-GB/general.php b/resources/lang/en-GB/general.php
index 21be355d0..8da1074d6 100644
--- a/resources/lang/en-GB/general.php
+++ b/resources/lang/en-GB/general.php
@@ -231,6 +231,7 @@ return [
'validation_error' => 'Validation error',
'dismiss' => 'Dismiss',
'size' => 'Size',
+ 'media' => 'Media',
'card' => [
'cards' => 'Card|Cards',
diff --git a/resources/views/components/documents/form/line-item.blade.php b/resources/views/components/documents/form/line-item.blade.php
index e968d7cfd..61f9c24d9 100644
--- a/resources/views/components/documents/form/line-item.blade.php
+++ b/resources/views/components/documents/form/line-item.blade.php
@@ -231,7 +231,7 @@
:class="[{'btn-outline-primary' : row.discount_type !== 'fixed'}, {'bg-white rounded-lg' : row.discount_type === 'fixed'}]"
@click="onChangeLineDiscountType(index, 'fixed')"
>
- {{ $currency->symbol }}
+ {{ ($currency) ? $currency->symbol : '$' }}