mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2026-01-29 08:37:22 +00:00
Compare commits
8 Commits
develop-20
...
develop-20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5f8d7049b5 | ||
|
|
7e80f78f2e | ||
|
|
ad922745c4 | ||
|
|
40abe74dc1 | ||
|
|
e5d2c4d163 | ||
|
|
2851053900 | ||
|
|
b2f6ce1277 | ||
|
|
340b0661ba |
24
.ci/php-cs-fixer/composer.lock
generated
24
.ci/php-cs-fixer/composer.lock
generated
@@ -1640,16 +1640,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v8.0.4",
|
||||
"version": "v8.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "42e48eb02e07d5f3771d194d67da117eb824c8c1"
|
||||
"reference": "8bd576e97c67d45941365bf824e18dc8538e6eb0"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/42e48eb02e07d5f3771d194d67da117eb824c8c1",
|
||||
"reference": "42e48eb02e07d5f3771d194d67da117eb824c8c1",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/8bd576e97c67d45941365bf824e18dc8538e6eb0",
|
||||
"reference": "8bd576e97c67d45941365bf824e18dc8538e6eb0",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -1684,7 +1684,7 @@
|
||||
"description": "Finds files and directories via an intuitive fluent interface",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/finder/tree/v8.0.4"
|
||||
"source": "https://github.com/symfony/finder/tree/v8.0.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -1704,7 +1704,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-12T12:37:40+00:00"
|
||||
"time": "2026-01-26T15:08:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/options-resolver",
|
||||
@@ -2358,16 +2358,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v8.0.4",
|
||||
"version": "v8.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/process.git",
|
||||
"reference": "10df72602d88c0a3fa685b822976a052611dd607"
|
||||
"reference": "b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/10df72602d88c0a3fa685b822976a052611dd607",
|
||||
"reference": "10df72602d88c0a3fa685b822976a052611dd607",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674",
|
||||
"reference": "b5f3aa6762e33fd95efbaa2ec4f4bc9fdd16d674",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -2399,7 +2399,7 @@
|
||||
"description": "Executes commands in sub-processes",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/process/tree/v8.0.4"
|
||||
"source": "https://github.com/symfony/process/tree/v8.0.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -2419,7 +2419,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-23T11:07:10+00:00"
|
||||
"time": "2026-01-26T15:08:38+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/service-contracts",
|
||||
|
||||
@@ -4,6 +4,7 @@ Over time, many people have contributed to Firefly III. Their efforts are not al
|
||||
Please find below all the people who contributed to the Firefly III code. Their names are mentioned in the year of their first contribution.
|
||||
|
||||
## 2026
|
||||
- Nick Huang
|
||||
- mateuszkulapl
|
||||
- Gianluca Martino
|
||||
- embedded
|
||||
|
||||
@@ -114,7 +114,7 @@ class SubscriptionEnrichment implements EnrichmentInterface
|
||||
$amounts['pc_amount_min'] = Steam::bcround($item->native_amount_min, $this->primaryCurrency->decimal_places);
|
||||
$amounts['pc_amount_max'] = Steam::bcround($item->native_amount_max, $this->primaryCurrency->decimal_places);
|
||||
$amounts['pc_average'] = Steam::bcround(
|
||||
bcdiv(bcadd($item->native_amount_min, $item->native_amount_max), '2'),
|
||||
bcdiv(bcadd($item->native_amount_min ?? '0', $item->native_amount_max ?? '0'), '2'),
|
||||
$this->primaryCurrency->decimal_places
|
||||
);
|
||||
}
|
||||
|
||||
114
composer.lock
generated
114
composer.lock
generated
@@ -6428,16 +6428,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/cache",
|
||||
"version": "v8.0.4",
|
||||
"version": "v8.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/cache.git",
|
||||
"reference": "5d3fcada5e1b80157cfdfd1f9dbbd63f95ef6f13"
|
||||
"reference": "92e9960386c7e01f58198038c199d522959a843c"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/cache/zipball/5d3fcada5e1b80157cfdfd1f9dbbd63f95ef6f13",
|
||||
"reference": "5d3fcada5e1b80157cfdfd1f9dbbd63f95ef6f13",
|
||||
"url": "https://api.github.com/repos/symfony/cache/zipball/92e9960386c7e01f58198038c199d522959a843c",
|
||||
"reference": "92e9960386c7e01f58198038c199d522959a843c",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -6504,7 +6504,7 @@
|
||||
"psr6"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/cache/tree/v8.0.4"
|
||||
"source": "https://github.com/symfony/cache/tree/v8.0.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -6524,7 +6524,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-23T12:59:31+00:00"
|
||||
"time": "2026-01-27T16:18:07+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/cache-contracts",
|
||||
@@ -7225,16 +7225,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/finder",
|
||||
"version": "v7.4.4",
|
||||
"version": "v7.4.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/finder.git",
|
||||
"reference": "01b24a145bbeaa7141e75887ec904c34a6728a5f"
|
||||
"reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/01b24a145bbeaa7141e75887ec904c34a6728a5f",
|
||||
"reference": "01b24a145bbeaa7141e75887ec904c34a6728a5f",
|
||||
"url": "https://api.github.com/repos/symfony/finder/zipball/ad4daa7c38668dcb031e63bc99ea9bd42196a2cb",
|
||||
"reference": "ad4daa7c38668dcb031e63bc99ea9bd42196a2cb",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -7269,7 +7269,7 @@
|
||||
"description": "Finds files and directories via an intuitive fluent interface",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/finder/tree/v7.4.4"
|
||||
"source": "https://github.com/symfony/finder/tree/v7.4.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -7289,20 +7289,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-12T12:19:02+00:00"
|
||||
"time": "2026-01-26T15:07:59+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-client",
|
||||
"version": "v8.0.4",
|
||||
"version": "v8.0.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-client.git",
|
||||
"reference": "ee9cc4a32fd1cb202b052ba9905a3c873363a465"
|
||||
"reference": "f9fdd372473e66469c6d32a4ed12efcffdea38c4"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-client/zipball/ee9cc4a32fd1cb202b052ba9905a3c873363a465",
|
||||
"reference": "ee9cc4a32fd1cb202b052ba9905a3c873363a465",
|
||||
"url": "https://api.github.com/repos/symfony/http-client/zipball/f9fdd372473e66469c6d32a4ed12efcffdea38c4",
|
||||
"reference": "f9fdd372473e66469c6d32a4ed12efcffdea38c4",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -7365,7 +7365,7 @@
|
||||
"http"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/http-client/tree/v8.0.4"
|
||||
"source": "https://github.com/symfony/http-client/tree/v8.0.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -7385,7 +7385,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-23T16:34:51+00:00"
|
||||
"time": "2026-01-27T16:18:07+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-client-contracts",
|
||||
@@ -7467,16 +7467,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-foundation",
|
||||
"version": "v7.4.4",
|
||||
"version": "v7.4.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-foundation.git",
|
||||
"reference": "977a554a34cf8edc95ca351fbecb1bb1ad05cc94"
|
||||
"reference": "446d0db2b1f21575f1284b74533e425096abdfb6"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/977a554a34cf8edc95ca351fbecb1bb1ad05cc94",
|
||||
"reference": "977a554a34cf8edc95ca351fbecb1bb1ad05cc94",
|
||||
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/446d0db2b1f21575f1284b74533e425096abdfb6",
|
||||
"reference": "446d0db2b1f21575f1284b74533e425096abdfb6",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -7525,7 +7525,7 @@
|
||||
"description": "Defines an object-oriented layer for the HTTP specification",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/http-foundation/tree/v7.4.4"
|
||||
"source": "https://github.com/symfony/http-foundation/tree/v7.4.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -7545,20 +7545,20 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-09T12:14:21+00:00"
|
||||
"time": "2026-01-27T16:16:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/http-kernel",
|
||||
"version": "v7.4.4",
|
||||
"version": "v7.4.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/http-kernel.git",
|
||||
"reference": "48b067768859f7b68acf41dfb857a5a4be00acdd"
|
||||
"reference": "229eda477017f92bd2ce7615d06222ec0c19e82a"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/48b067768859f7b68acf41dfb857a5a4be00acdd",
|
||||
"reference": "48b067768859f7b68acf41dfb857a5a4be00acdd",
|
||||
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/229eda477017f92bd2ce7615d06222ec0c19e82a",
|
||||
"reference": "229eda477017f92bd2ce7615d06222ec0c19e82a",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -7644,7 +7644,7 @@
|
||||
"description": "Provides a structured process for converting a Request into a Response",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/http-kernel/tree/v7.4.4"
|
||||
"source": "https://github.com/symfony/http-kernel/tree/v7.4.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -7664,7 +7664,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-24T22:13:01+00:00"
|
||||
"time": "2026-01-28T10:33:42+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/mailer",
|
||||
@@ -7822,16 +7822,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/mime",
|
||||
"version": "v7.4.4",
|
||||
"version": "v7.4.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/mime.git",
|
||||
"reference": "40945014c0a9471ccfe19673c54738fa19367a3c"
|
||||
"reference": "b18c7e6e9eee1e19958138df10412f3c4c316148"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/mime/zipball/40945014c0a9471ccfe19673c54738fa19367a3c",
|
||||
"reference": "40945014c0a9471ccfe19673c54738fa19367a3c",
|
||||
"url": "https://api.github.com/repos/symfony/mime/zipball/b18c7e6e9eee1e19958138df10412f3c4c316148",
|
||||
"reference": "b18c7e6e9eee1e19958138df10412f3c4c316148",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -7842,15 +7842,15 @@
|
||||
},
|
||||
"conflict": {
|
||||
"egulias/email-validator": "~3.0.0",
|
||||
"phpdocumentor/reflection-docblock": "<3.2.2",
|
||||
"phpdocumentor/type-resolver": "<1.4.0",
|
||||
"phpdocumentor/reflection-docblock": "<5.2|>=6",
|
||||
"phpdocumentor/type-resolver": "<1.5.1",
|
||||
"symfony/mailer": "<6.4",
|
||||
"symfony/serializer": "<6.4.3|>7.0,<7.0.3"
|
||||
},
|
||||
"require-dev": {
|
||||
"egulias/email-validator": "^2.1.10|^3.1|^4",
|
||||
"league/html-to-markdown": "^5.0",
|
||||
"phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0",
|
||||
"phpdocumentor/reflection-docblock": "^5.2",
|
||||
"symfony/dependency-injection": "^6.4|^7.0|^8.0",
|
||||
"symfony/process": "^6.4|^7.0|^8.0",
|
||||
"symfony/property-access": "^6.4|^7.0|^8.0",
|
||||
@@ -7887,7 +7887,7 @@
|
||||
"mime-type"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/mime/tree/v7.4.4"
|
||||
"source": "https://github.com/symfony/mime/tree/v7.4.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -7907,7 +7907,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-08T16:12:55+00:00"
|
||||
"time": "2026-01-27T08:59:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/options-resolver",
|
||||
@@ -8811,16 +8811,16 @@
|
||||
},
|
||||
{
|
||||
"name": "symfony/process",
|
||||
"version": "v7.4.4",
|
||||
"version": "v7.4.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/process.git",
|
||||
"reference": "626f07a53f4b4e2f00e11824cc29f928d797783b"
|
||||
"reference": "608476f4604102976d687c483ac63a79ba18cc97"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/626f07a53f4b4e2f00e11824cc29f928d797783b",
|
||||
"reference": "626f07a53f4b4e2f00e11824cc29f928d797783b",
|
||||
"url": "https://api.github.com/repos/symfony/process/zipball/608476f4604102976d687c483ac63a79ba18cc97",
|
||||
"reference": "608476f4604102976d687c483ac63a79ba18cc97",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -8852,7 +8852,7 @@
|
||||
"description": "Executes commands in sub-processes",
|
||||
"homepage": "https://symfony.com",
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/process/tree/v7.4.4"
|
||||
"source": "https://github.com/symfony/process/tree/v7.4.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -8872,7 +8872,7 @@
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-20T09:23:51+00:00"
|
||||
"time": "2026-01-26T15:07:59+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/psr-http-message-bridge",
|
||||
@@ -11198,16 +11198,16 @@
|
||||
},
|
||||
{
|
||||
"name": "php-debugbar/php-debugbar",
|
||||
"version": "v3.2.3",
|
||||
"version": "v3.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/php-debugbar/php-debugbar.git",
|
||||
"reference": "0c61c6023742c76bc3678100ed6bc52dc4c8d434"
|
||||
"reference": "e22287890107602af6a113dc7975b3d77c542e5f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/0c61c6023742c76bc3678100ed6bc52dc4c8d434",
|
||||
"reference": "0c61c6023742c76bc3678100ed6bc52dc4c8d434",
|
||||
"url": "https://api.github.com/repos/php-debugbar/php-debugbar/zipball/e22287890107602af6a113dc7975b3d77c542e5f",
|
||||
"reference": "e22287890107602af6a113dc7975b3d77c542e5f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -11284,7 +11284,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/php-debugbar/php-debugbar/issues",
|
||||
"source": "https://github.com/php-debugbar/php-debugbar/tree/v3.2.3"
|
||||
"source": "https://github.com/php-debugbar/php-debugbar/tree/v3.3.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -11296,7 +11296,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-27T10:26:33+00:00"
|
||||
"time": "2026-01-28T12:57:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "php-debugbar/symfony-bridge",
|
||||
@@ -12001,16 +12001,16 @@
|
||||
},
|
||||
{
|
||||
"name": "rector/rector",
|
||||
"version": "2.3.4",
|
||||
"version": "2.3.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/rectorphp/rector.git",
|
||||
"reference": "9227d7a24b0f23ae941057509364f948d5da9ab2"
|
||||
"reference": "9442f4037de6a5347ae157fe8e6c7cda9d909070"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/rectorphp/rector/zipball/9227d7a24b0f23ae941057509364f948d5da9ab2",
|
||||
"reference": "9227d7a24b0f23ae941057509364f948d5da9ab2",
|
||||
"url": "https://api.github.com/repos/rectorphp/rector/zipball/9442f4037de6a5347ae157fe8e6c7cda9d909070",
|
||||
"reference": "9442f4037de6a5347ae157fe8e6c7cda9d909070",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@@ -12049,7 +12049,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/rectorphp/rector/issues",
|
||||
"source": "https://github.com/rectorphp/rector/tree/2.3.4"
|
||||
"source": "https://github.com/rectorphp/rector/tree/2.3.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -12057,7 +12057,7 @@
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2026-01-21T14:49:03+00:00"
|
||||
"time": "2026-01-28T15:22:48+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/cli-parser",
|
||||
|
||||
@@ -79,7 +79,7 @@ return [
|
||||
// see cer.php for exchange rates feature flag.
|
||||
],
|
||||
'version' => 'develop/2026-01-28',
|
||||
'build_time' => 1769573193,
|
||||
'build_time' => 1769628267,
|
||||
'api_version' => '2.1.0', // field is no longer used.
|
||||
'db_version' => 28, // field is no longer used.
|
||||
|
||||
|
||||
@@ -76,17 +76,14 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('account_types')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'account_types',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('type', 50);
|
||||
Schema::create('account_types', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('type', 50);
|
||||
|
||||
// type must be unique.
|
||||
$table->unique(['type']);
|
||||
}
|
||||
);
|
||||
// type must be unique.
|
||||
$table->unique(['type']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'account_types', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -98,20 +95,17 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('transaction_currencies')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'transaction_currencies',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('code', 3);
|
||||
$table->string('name', 255);
|
||||
$table->string('symbol', 12);
|
||||
Schema::create('transaction_currencies', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('code', 3);
|
||||
$table->string('name', 255);
|
||||
$table->string('symbol', 12);
|
||||
|
||||
// code must be unique.
|
||||
$table->unique(['code']);
|
||||
}
|
||||
);
|
||||
// code must be unique.
|
||||
$table->unique(['code']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'transaction_currencies', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -123,18 +117,15 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('transaction_types')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'transaction_types',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('type', 50);
|
||||
Schema::create('transaction_types', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('type', 50);
|
||||
|
||||
// type must be unique.
|
||||
$table->unique(['type']);
|
||||
}
|
||||
);
|
||||
// type must be unique.
|
||||
$table->unique(['type']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'transaction_types', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -146,21 +137,18 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('jobs')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'jobs',
|
||||
static function (Blueprint $table): void {
|
||||
// straight from Laravel
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue');
|
||||
$table->longText('payload');
|
||||
$table->tinyInteger('attempts')->unsigned();
|
||||
$table->tinyInteger('reserved')->unsigned();
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
$table->index(['queue', 'reserved', 'reserved_at']);
|
||||
}
|
||||
);
|
||||
Schema::create('jobs', static function (Blueprint $table): void {
|
||||
// straight from Laravel
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue');
|
||||
$table->longText('payload');
|
||||
$table->tinyInteger('attempts')->unsigned();
|
||||
$table->tinyInteger('reserved')->unsigned();
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
$table->index(['queue', 'reserved', 'reserved_at']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'jobs', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -172,15 +160,12 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('password_resets')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'password_resets',
|
||||
static function (Blueprint $table): void {
|
||||
// straight from laravel
|
||||
$table->string('email')->index();
|
||||
$table->string('token')->index();
|
||||
$table->timestamp('created_at')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('password_resets', static function (Blueprint $table): void {
|
||||
// straight from laravel
|
||||
$table->string('email')->index();
|
||||
$table->string('token')->index();
|
||||
$table->timestamp('created_at')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'password_resets', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -192,16 +177,13 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('permissions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'permissions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('name')->unique();
|
||||
$table->string('display_name')->nullable();
|
||||
$table->string('description')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('permissions', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('name')->unique();
|
||||
$table->string('display_name')->nullable();
|
||||
$table->string('description')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'permissions', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -213,16 +195,13 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('roles')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'roles',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('name')->unique();
|
||||
$table->string('display_name')->nullable();
|
||||
$table->string('description')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('roles', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('name')->unique();
|
||||
$table->string('display_name')->nullable();
|
||||
$table->string('description')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'roles', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -234,18 +213,15 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('permission_role')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'permission_role',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('permission_id')->unsigned();
|
||||
$table->integer('role_id')->unsigned();
|
||||
Schema::create('permission_role', static function (Blueprint $table): void {
|
||||
$table->integer('permission_id')->unsigned();
|
||||
$table->integer('role_id')->unsigned();
|
||||
|
||||
$table->foreign('permission_id')->references('id')->on('permissions')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('role_id')->references('id')->on('roles')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('permission_id')->references('id')->on('permissions')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('role_id')->references('id')->on('roles')->onUpdate('cascade')->onDelete('cascade');
|
||||
|
||||
$table->primary(['permission_id', 'role_id']);
|
||||
}
|
||||
);
|
||||
$table->primary(['permission_id', 'role_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'permission_role', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -257,17 +233,14 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('sessions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'sessions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('id')->unique();
|
||||
$table->integer('user_id')->nullable();
|
||||
$table->string('ip_address', 45)->nullable();
|
||||
$table->text('user_agent')->nullable();
|
||||
$table->text('payload');
|
||||
$table->integer('last_activity');
|
||||
}
|
||||
);
|
||||
Schema::create('sessions', static function (Blueprint $table): void {
|
||||
$table->string('id')->unique();
|
||||
$table->integer('user_id')->nullable();
|
||||
$table->string('ip_address', 45)->nullable();
|
||||
$table->text('user_agent')->nullable();
|
||||
$table->text('payload');
|
||||
$table->integer('last_activity');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'sessions', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -279,16 +252,13 @@ class CreateSupportTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('configuration')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'configuration',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('name', 50);
|
||||
$table->text('data');
|
||||
}
|
||||
);
|
||||
Schema::create('configuration', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('name', 50);
|
||||
$table->text('data');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'configuration', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
|
||||
@@ -53,19 +53,16 @@ class CreateUsersTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('users')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('email', 255);
|
||||
$table->string('password', 60);
|
||||
$table->string('remember_token', 100)->nullable();
|
||||
$table->string('reset', 32)->nullable();
|
||||
$table->tinyInteger('blocked', false, true)->default('0');
|
||||
$table->string('blocked_code', 25)->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('users', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->string('email', 255);
|
||||
$table->string('password', 60);
|
||||
$table->string('remember_token', 100)->nullable();
|
||||
$table->string('reset', 32)->nullable();
|
||||
$table->tinyInteger('blocked', false, true)->default('0');
|
||||
$table->string('blocked_code', 25)->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'users', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
|
||||
@@ -95,23 +95,20 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('accounts')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'accounts',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('account_type_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->decimal('virtual_balance', 32, 12)->nullable();
|
||||
$table->string('iban', 255)->nullable();
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('encrypted')->default(0);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('account_type_id')->references('id')->on('account_types')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('accounts', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('account_type_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->decimal('virtual_balance', 32, 12)->nullable();
|
||||
$table->string('iban', 255)->nullable();
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('encrypted')->default(0);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('account_type_id')->references('id')->on('account_types')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'accounts', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -120,17 +117,14 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('account_meta')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'account_meta',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('account_id', false, true);
|
||||
$table->string('name');
|
||||
$table->text('data');
|
||||
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('account_meta', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('account_id', false, true);
|
||||
$table->string('name');
|
||||
$table->text('data');
|
||||
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'account_meta', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -142,23 +136,20 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('piggy_banks')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'piggy_banks',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('account_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->decimal('targetamount', 32, 12);
|
||||
$table->date('startdate')->nullable();
|
||||
$table->date('targetdate')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(0);
|
||||
$table->boolean('encrypted')->default(1);
|
||||
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('piggy_banks', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('account_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->decimal('targetamount', 32, 12);
|
||||
$table->date('startdate')->nullable();
|
||||
$table->date('targetdate')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(0);
|
||||
$table->boolean('encrypted')->default(1);
|
||||
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'piggy_banks', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -167,18 +158,15 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('piggy_bank_repetitions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'piggy_bank_repetitions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('piggy_bank_id', false, true);
|
||||
$table->date('startdate')->nullable();
|
||||
$table->date('targetdate')->nullable();
|
||||
$table->decimal('currentamount', 32, 12);
|
||||
$table->foreign('piggy_bank_id')->references('id')->on('piggy_banks')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('piggy_bank_repetitions', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('piggy_bank_id', false, true);
|
||||
$table->date('startdate')->nullable();
|
||||
$table->date('targetdate')->nullable();
|
||||
$table->decimal('currentamount', 32, 12);
|
||||
$table->foreign('piggy_bank_id')->references('id')->on('piggy_banks')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'piggy_bank_repetitions', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -190,28 +178,25 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('attachments')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'attachments',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('attachable_id', false, true);
|
||||
$table->string('attachable_type', 255);
|
||||
$table->string('md5', 128);
|
||||
$table->string('filename', 1024);
|
||||
$table->string('title', 1024)->nullable();
|
||||
$table->text('description')->nullable();
|
||||
$table->text('notes')->nullable();
|
||||
$table->string('mime', 1024);
|
||||
$table->integer('size', false, true);
|
||||
$table->boolean('uploaded')->default(1);
|
||||
Schema::create('attachments', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('attachable_id', false, true);
|
||||
$table->string('attachable_type', 255);
|
||||
$table->string('md5', 128);
|
||||
$table->string('filename', 1024);
|
||||
$table->string('title', 1024)->nullable();
|
||||
$table->text('description')->nullable();
|
||||
$table->text('notes')->nullable();
|
||||
$table->string('mime', 1024);
|
||||
$table->integer('size', false, true);
|
||||
$table->boolean('uploaded')->default(1);
|
||||
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'attachments', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -223,29 +208,26 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('bills')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->string('match', 1024);
|
||||
$table->decimal('amount_min', 32, 12);
|
||||
$table->decimal('amount_max', 32, 12);
|
||||
$table->date('date');
|
||||
$table->string('repeat_freq', 30);
|
||||
$table->smallInteger('skip', false, true)->default(0);
|
||||
$table->boolean('automatch')->default(1);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('name_encrypted')->default(0);
|
||||
$table->boolean('match_encrypted')->default(0);
|
||||
Schema::create('bills', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->string('match', 1024);
|
||||
$table->decimal('amount_min', 32, 12);
|
||||
$table->decimal('amount_max', 32, 12);
|
||||
$table->date('date');
|
||||
$table->string('repeat_freq', 30);
|
||||
$table->smallInteger('skip', false, true)->default(0);
|
||||
$table->boolean('automatch')->default(1);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('name_encrypted')->default(0);
|
||||
$table->boolean('match_encrypted')->default(0);
|
||||
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'bills', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -257,19 +239,16 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('budgets')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'budgets',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('encrypted')->default(0);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('budgets', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('encrypted')->default(0);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'budgets', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -277,19 +256,16 @@ class CreateMainTables extends Migration
|
||||
}
|
||||
if (!Schema::hasTable('budget_limits')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->date('startdate');
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->string('repeat_freq', 30)->nullable();
|
||||
$table->boolean('repeats')->default(0);
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('budget_limits', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->date('startdate');
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->string('repeat_freq', 30)->nullable();
|
||||
$table->boolean('repeats')->default(0);
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'budget_limits', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -301,20 +277,17 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('categories')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'categories',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->boolean('encrypted')->default(0);
|
||||
Schema::create('categories', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->boolean('encrypted')->default(0);
|
||||
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'categories', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -326,18 +299,15 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('preferences')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'preferences',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->text('data');
|
||||
Schema::create('preferences', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('name', 1024);
|
||||
$table->text('data');
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'preferences', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -349,18 +319,15 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('role_user')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'role_user',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('role_id', false, true);
|
||||
Schema::create('role_user', static function (Blueprint $table): void {
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('role_id', false, true);
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('role_id')->references('id')->on('roles')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('role_id')->references('id')->on('roles')->onUpdate('cascade')->onDelete('cascade');
|
||||
|
||||
$table->primary(['user_id', 'role_id']);
|
||||
}
|
||||
);
|
||||
$table->primary(['user_id', 'role_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'role_user', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -375,22 +342,19 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('rule_groups')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'rule_groups',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('title', 255);
|
||||
$table->text('description')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
Schema::create('rule_groups', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('title', 255);
|
||||
$table->text('description')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'rule_groups', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -398,27 +362,24 @@ class CreateMainTables extends Migration
|
||||
}
|
||||
if (!Schema::hasTable('rules')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'rules',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('rule_group_id', false, true);
|
||||
$table->string('title', 255);
|
||||
$table->text('description')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('stop_processing')->default(0);
|
||||
Schema::create('rules', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('rule_group_id', false, true);
|
||||
$table->string('title', 255);
|
||||
$table->text('description')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('stop_processing')->default(0);
|
||||
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
|
||||
// link rule group id to rule group table
|
||||
$table->foreign('rule_group_id')->references('id')->on('rule_groups')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link rule group id to rule group table
|
||||
$table->foreign('rule_group_id')->references('id')->on('rule_groups')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'rules', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -426,24 +387,21 @@ class CreateMainTables extends Migration
|
||||
}
|
||||
if (!Schema::hasTable('rule_actions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'rule_actions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('rule_id', false, true);
|
||||
Schema::create('rule_actions', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('rule_id', false, true);
|
||||
|
||||
$table->string('action_type', 50);
|
||||
$table->string('action_value', 255);
|
||||
$table->string('action_type', 50);
|
||||
$table->string('action_value', 255);
|
||||
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('stop_processing')->default(0);
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('stop_processing')->default(0);
|
||||
|
||||
// link rule id to rules table
|
||||
$table->foreign('rule_id')->references('id')->on('rules')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link rule id to rules table
|
||||
$table->foreign('rule_id')->references('id')->on('rules')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'rule_actions', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -451,24 +409,21 @@ class CreateMainTables extends Migration
|
||||
}
|
||||
if (!Schema::hasTable('rule_triggers')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'rule_triggers',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('rule_id', false, true);
|
||||
Schema::create('rule_triggers', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('rule_id', false, true);
|
||||
|
||||
$table->string('trigger_type', 50);
|
||||
$table->string('trigger_value', 255);
|
||||
$table->string('trigger_type', 50);
|
||||
$table->string('trigger_value', 255);
|
||||
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('stop_processing')->default(0);
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->boolean('active')->default(1);
|
||||
$table->boolean('stop_processing')->default(0);
|
||||
|
||||
// link rule id to rules table
|
||||
$table->foreign('rule_id')->references('id')->on('rules')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link rule id to rules table
|
||||
$table->foreign('rule_id')->references('id')->on('rules')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'rule_triggers', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -480,26 +435,23 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('tags')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'tags',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
Schema::create('tags', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
|
||||
$table->string('tag', 1024);
|
||||
$table->string('tagMode', 1024);
|
||||
$table->date('date')->nullable();
|
||||
$table->text('description')->nullable();
|
||||
$table->decimal('latitude', 12, 8)->nullable();
|
||||
$table->decimal('longitude', 12, 8)->nullable();
|
||||
$table->smallInteger('zoomLevel', false, true)->nullable();
|
||||
$table->string('tag', 1024);
|
||||
$table->string('tagMode', 1024);
|
||||
$table->date('date')->nullable();
|
||||
$table->text('description')->nullable();
|
||||
$table->decimal('latitude', 12, 8)->nullable();
|
||||
$table->decimal('longitude', 12, 8)->nullable();
|
||||
$table->smallInteger('zoomLevel', false, true)->nullable();
|
||||
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
// link user id to users table
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'tags', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -515,31 +467,28 @@ class CreateMainTables extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('transaction_journals')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'transaction_journals',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('transaction_type_id', false, true);
|
||||
$table->integer('bill_id', false, true)->nullable();
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->string('description', 1024);
|
||||
$table->date('date');
|
||||
$table->date('interest_date')->nullable();
|
||||
$table->date('book_date')->nullable();
|
||||
$table->date('process_date')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->integer('tag_count', false, true);
|
||||
$table->boolean('encrypted')->default(1);
|
||||
$table->boolean('completed')->default(1);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('transaction_type_id')->references('id')->on('transaction_types')->onDelete('cascade');
|
||||
$table->foreign('bill_id')->references('id')->on('bills')->onDelete('set null');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('transaction_journals', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('transaction_type_id', false, true);
|
||||
$table->integer('bill_id', false, true)->nullable();
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->string('description', 1024);
|
||||
$table->date('date');
|
||||
$table->date('interest_date')->nullable();
|
||||
$table->date('book_date')->nullable();
|
||||
$table->date('process_date')->nullable();
|
||||
$table->integer('order', false, true)->default(0);
|
||||
$table->integer('tag_count', false, true);
|
||||
$table->boolean('encrypted')->default(1);
|
||||
$table->boolean('completed')->default(1);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('transaction_type_id')->references('id')->on('transaction_types')->onDelete('cascade');
|
||||
$table->foreign('bill_id')->references('id')->on('bills')->onDelete('set null');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'transaction_journals', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -548,18 +497,15 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('journal_meta')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'journal_meta',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->string('name', 255);
|
||||
$table->text('data');
|
||||
$table->string('hash', 64);
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('journal_meta', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->string('name', 255);
|
||||
$table->text('data');
|
||||
$table->string('hash', 64);
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'journal_meta', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -568,19 +514,16 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('tag_transaction_journal')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'tag_transaction_journal',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('tag_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
Schema::create('tag_transaction_journal', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('tag_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
|
||||
// unique combi:
|
||||
$table->unique(['tag_id', 'transaction_journal_id']);
|
||||
}
|
||||
);
|
||||
// unique combi:
|
||||
$table->unique(['tag_id', 'transaction_journal_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'tag_transaction_journal', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -589,16 +532,13 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('budget_transaction_journal')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'budget_transaction_journal',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('budget_transaction_journal', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'budget_transaction_journal', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -607,16 +547,13 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('category_transaction_journal')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'category_transaction_journal',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('category_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('category_transaction_journal', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('category_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'category_transaction_journal', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -625,20 +562,17 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('piggy_bank_events')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'piggy_bank_events',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('piggy_bank_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true)->nullable();
|
||||
$table->date('date');
|
||||
$table->decimal('amount', 32, 12);
|
||||
Schema::create('piggy_bank_events', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('piggy_bank_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true)->nullable();
|
||||
$table->date('date');
|
||||
$table->decimal('amount', 32, 12);
|
||||
|
||||
$table->foreign('piggy_bank_id')->references('id')->on('piggy_banks')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
$table->foreign('piggy_bank_id')->references('id')->on('piggy_banks')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('set null');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'piggy_bank_events', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -647,21 +581,18 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('transactions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('account_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->string('description', 1024)->nullable();
|
||||
$table->decimal('amount', 32, 12);
|
||||
Schema::create('transactions', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('account_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
$table->string('description', 1024)->nullable();
|
||||
$table->decimal('amount', 32, 12);
|
||||
|
||||
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('account_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'transactions', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -670,17 +601,14 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('budget_transaction')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'budget_transaction',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->integer('transaction_id', false, true);
|
||||
Schema::create('budget_transaction', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->integer('transaction_id', false, true);
|
||||
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
$table->foreign('transaction_id')->references('id')->on('transactions')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
$table->foreign('transaction_id')->references('id')->on('transactions')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'budget_transaction', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -689,17 +617,14 @@ class CreateMainTables extends Migration
|
||||
|
||||
if (!Schema::hasTable('category_transaction')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'category_transaction',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('category_id', false, true);
|
||||
$table->integer('transaction_id', false, true);
|
||||
Schema::create('category_transaction', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('category_id', false, true);
|
||||
$table->integer('transaction_id', false, true);
|
||||
|
||||
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
|
||||
$table->foreign('transaction_id')->references('id')->on('transactions')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('category_id')->references('id')->on('categories')->onDelete('cascade');
|
||||
$table->foreign('transaction_id')->references('id')->on('transactions')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'category_transaction', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
|
||||
@@ -33,12 +33,16 @@ class ChangesFor3101 extends Migration
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @SuppressWarnings("PHPMD.ShortMethodName")
|
||||
*/
|
||||
public function up(): void {}
|
||||
public function up(): void
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,7 +39,9 @@ class FixNullables extends Migration
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
@@ -50,12 +52,9 @@ class FixNullables extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('rule_groups', 'description')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'rule_groups',
|
||||
static function (Blueprint $table): void {
|
||||
$table->text('description')->nullable()->change();
|
||||
}
|
||||
);
|
||||
Schema::table('rule_groups', static function (Blueprint $table): void {
|
||||
$table->text('description')->nullable()->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_UPDATE_ERROR, 'rule_groups', $e->getMessage()));
|
||||
app('log')->error(self::COLUMN_ALREADY_EXISTS);
|
||||
@@ -64,12 +63,9 @@ class FixNullables extends Migration
|
||||
|
||||
if (!Schema::hasColumn('rules', 'description')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'rules',
|
||||
static function (Blueprint $table): void {
|
||||
$table->text('description')->nullable()->change();
|
||||
}
|
||||
);
|
||||
Schema::table('rules', static function (Blueprint $table): void {
|
||||
$table->text('description')->nullable()->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_UPDATE_ERROR, 'rules', $e->getMessage()));
|
||||
app('log')->error(self::COLUMN_ALREADY_EXISTS);
|
||||
|
||||
@@ -40,12 +40,9 @@ class ExpandTransactionsTable extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('transactions', 'identifier')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('identifier');
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->dropColumn('identifier');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column "identifier": %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -62,12 +59,9 @@ class ExpandTransactionsTable extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('transactions', 'identifier')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->smallInteger('identifier', false, true)->default(0);
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->smallInteger('identifier', false, true)->default(0);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -50,21 +50,20 @@ class ChangesForV410 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('notes')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'notes',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('noteable_id', false, true);
|
||||
$table->string('noteable_type');
|
||||
$table->string('title')->nullable();
|
||||
$table->text('text')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('notes', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('noteable_id', false, true);
|
||||
$table->string('noteable_type');
|
||||
$table->string('title')->nullable();
|
||||
$table->text('text')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "notes": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,12 +40,9 @@ class ChangesForV420 extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('journal_meta', 'deleted_at')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'journal_meta',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropSoftDeletes();
|
||||
}
|
||||
);
|
||||
Schema::table('journal_meta', static function (Blueprint $table): void {
|
||||
$table->dropSoftDeletes();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -62,12 +59,9 @@ class ChangesForV420 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('journal_meta', 'deleted_at')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'journal_meta',
|
||||
static function (Blueprint $table): void {
|
||||
$table->softDeletes();
|
||||
}
|
||||
);
|
||||
Schema::table('journal_meta', static function (Blueprint $table): void {
|
||||
$table->softDeletes();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -50,25 +50,24 @@ class ChangesForV430 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('available_budgets')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'available_budgets',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->date('start_date');
|
||||
$table->date('end_date');
|
||||
Schema::create('available_budgets', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->date('start_date');
|
||||
$table->date('end_date');
|
||||
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "available_budgets": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,12 +41,9 @@ class ChangesForV431 extends Migration
|
||||
// reinstate "repeats" and "repeat_freq".
|
||||
if (!Schema::hasColumn('budget_limits', 'repeat_freq')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('repeat_freq', 30)->nullable();
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->string('repeat_freq', 30)->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -54,12 +51,9 @@ class ChangesForV431 extends Migration
|
||||
}
|
||||
if (!Schema::hasColumn('budget_limits', 'repeats')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->boolean('repeats')->default(0);
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->boolean('repeats')->default(0);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -68,12 +62,9 @@ class ChangesForV431 extends Migration
|
||||
// change field "start_date" to "startdate"
|
||||
if (Schema::hasColumn('budget_limits', 'start_date') && !Schema::hasColumn('budget_limits', 'startdate')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->renameColumn('start_date', 'startdate');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->renameColumn('start_date', 'startdate');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -83,12 +74,9 @@ class ChangesForV431 extends Migration
|
||||
// remove date field "end_date"
|
||||
if (Schema::hasColumn('budget_limits', 'end_date')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('end_date');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->dropColumn('end_date');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -97,12 +85,9 @@ class ChangesForV431 extends Migration
|
||||
// remove decimal places
|
||||
if (Schema::hasColumn('transaction_currencies', 'decimal_places')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_currencies',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('decimal_places');
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_currencies', static function (Blueprint $table): void {
|
||||
$table->dropColumn('decimal_places');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -120,12 +105,9 @@ class ChangesForV431 extends Migration
|
||||
// add decimal places to "transaction currencies".
|
||||
if (!Schema::hasColumn('transaction_currencies', 'decimal_places')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_currencies',
|
||||
static function (Blueprint $table): void {
|
||||
$table->smallInteger('decimal_places', false, true)->default(2);
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_currencies', static function (Blueprint $table): void {
|
||||
$table->smallInteger('decimal_places', false, true)->default(2);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -135,12 +117,9 @@ class ChangesForV431 extends Migration
|
||||
// change field "startdate" to "start_date"
|
||||
if (Schema::hasColumn('budget_limits', 'startdate') && !Schema::hasColumn('budget_limits', 'start_date')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->renameColumn('startdate', 'start_date');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->renameColumn('startdate', 'start_date');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -150,12 +129,9 @@ class ChangesForV431 extends Migration
|
||||
// add date field "end_date" after "start_date"
|
||||
if (!Schema::hasColumn('budget_limits', 'end_date')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->date('end_date')->nullable()->after('start_date');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->date('end_date')->nullable()->after('start_date');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -165,12 +141,9 @@ class ChangesForV431 extends Migration
|
||||
// drop "repeats" and "repeat_freq".
|
||||
if (Schema::hasColumn('budget_limits', 'repeats')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('repeats');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->dropColumn('repeats');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -178,12 +151,9 @@ class ChangesForV431 extends Migration
|
||||
}
|
||||
if (Schema::hasColumn('budget_limits', 'repeat_freq')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('repeat_freq');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->dropColumn('repeat_freq');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -41,18 +41,15 @@ class ChangesForV440 extends Migration
|
||||
Schema::dropIfExists('currency_exchange_rates');
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'transaction_currency_id')) {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('transactions_transaction_currency_id_foreign');
|
||||
}
|
||||
$table->dropColumn('transaction_currency_id');
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'transaction_currency_id')) {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('transactions_transaction_currency_id_foreign');
|
||||
}
|
||||
$table->dropColumn('transaction_currency_id');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -68,40 +65,36 @@ class ChangesForV440 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('currency_exchange_rates')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'currency_exchange_rates',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('from_currency_id', false, true);
|
||||
$table->integer('to_currency_id', false, true);
|
||||
$table->date('date');
|
||||
$table->decimal('rate', 32, 12);
|
||||
$table->decimal('user_rate', 32, 12)->nullable();
|
||||
Schema::create('currency_exchange_rates', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('from_currency_id', false, true);
|
||||
$table->integer('to_currency_id', false, true);
|
||||
$table->date('date');
|
||||
$table->decimal('rate', 32, 12);
|
||||
$table->decimal('user_rate', 32, 12)->nullable();
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('from_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('to_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('from_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('to_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "notifications": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!Schema::hasColumn('transactions', 'transaction_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'transaction_currency_id')) {
|
||||
$table->integer('transaction_currency_id', false, true)->after('description')->nullable();
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'transaction_currency_id')) {
|
||||
$table->integer('transaction_currency_id', false, true)->after('description')->nullable();
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -41,12 +41,9 @@ class ChangesForV450 extends Migration
|
||||
// split up for sqlite compatibility
|
||||
if (Schema::hasColumn('transactions', 'foreign_amount')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('foreign_amount');
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->dropColumn('foreign_amount');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -54,27 +51,21 @@ class ChangesForV450 extends Migration
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('transactions_foreign_currency_id_foreign');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('transactions_foreign_currency_id_foreign');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
if (Schema::hasColumn('transactions', 'foreign_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('foreign_currency_id');
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->dropColumn('foreign_currency_id');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -92,12 +83,9 @@ class ChangesForV450 extends Migration
|
||||
// add "foreign_amount" to transactions
|
||||
if (!Schema::hasColumn('transactions', 'foreign_amount')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->decimal('foreign_amount', 32, 12)->nullable()->after('amount');
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->decimal('foreign_amount', 32, 12)->nullable()->after('amount');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -107,13 +95,10 @@ class ChangesForV450 extends Migration
|
||||
// add foreign transaction currency id to transactions (is nullable):
|
||||
if (!Schema::hasColumn('transactions', 'foreign_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('foreign_currency_id', false, true)->default(null)->after('foreign_amount')->nullable();
|
||||
$table->foreign('foreign_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->integer('foreign_currency_id', false, true)->default(null)->after('foreign_amount')->nullable();
|
||||
$table->foreign('foreign_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -51,48 +51,46 @@ class ChangesForV470 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('link_types')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'link_types',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('name');
|
||||
$table->string('outward');
|
||||
$table->string('inward');
|
||||
$table->boolean('editable');
|
||||
Schema::create('link_types', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('name');
|
||||
$table->string('outward');
|
||||
$table->string('inward');
|
||||
$table->boolean('editable');
|
||||
|
||||
$table->unique(['name', 'outward', 'inward']);
|
||||
}
|
||||
);
|
||||
$table->unique(['name', 'outward', 'inward']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "link_types": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('journal_links')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'journal_links',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('link_type_id', false, true);
|
||||
$table->integer('source_id', false, true);
|
||||
$table->integer('destination_id', false, true);
|
||||
$table->text('comment')->nullable();
|
||||
Schema::create('journal_links', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->integer('link_type_id', false, true);
|
||||
$table->integer('source_id', false, true);
|
||||
$table->integer('destination_id', false, true);
|
||||
$table->text('comment')->nullable();
|
||||
|
||||
$table->foreign('link_type_id')->references('id')->on('link_types')->onDelete('cascade');
|
||||
$table->foreign('source_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
$table->foreign('destination_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
$table->foreign('link_type_id')->references('id')->on('link_types')->onDelete('cascade');
|
||||
$table->foreign('source_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
$table->foreign('destination_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
|
||||
$table->unique(['link_type_id', 'source_id', 'destination_id']);
|
||||
}
|
||||
);
|
||||
$table->unique(['link_type_id', 'source_id', 'destination_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "journal_links": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,12 +40,9 @@ class ChangesForV470a extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('transactions', 'reconciled')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('reconciled');
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->dropColumn('reconciled');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -62,12 +59,9 @@ class ChangesForV470a extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('transactions', 'reconciled')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->boolean('reconciled')->after('deleted_at')->default(0);
|
||||
}
|
||||
);
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
$table->boolean('reconciled')->after('deleted_at')->default(0);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -51,20 +51,19 @@ class CreateOauthAuthCodesTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('oauth_auth_codes')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'oauth_auth_codes',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('id', 100)->primary();
|
||||
$table->integer('user_id');
|
||||
$table->integer('client_id');
|
||||
$table->text('scopes')->nullable();
|
||||
$table->boolean('revoked');
|
||||
$table->dateTime('expires_at')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('oauth_auth_codes', static function (Blueprint $table): void {
|
||||
$table->string('id', 100)->primary();
|
||||
$table->integer('user_id');
|
||||
$table->integer('client_id');
|
||||
$table->text('scopes')->nullable();
|
||||
$table->boolean('revoked');
|
||||
$table->dateTime('expires_at')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "oauth_auth_codes": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,22 +51,21 @@ class CreateOauthAccessTokensTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('oauth_access_tokens')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'oauth_access_tokens',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('id', 100)->primary();
|
||||
$table->integer('user_id')->index()->nullable();
|
||||
$table->integer('client_id');
|
||||
$table->string('name')->nullable();
|
||||
$table->text('scopes')->nullable();
|
||||
$table->boolean('revoked');
|
||||
$table->timestamps();
|
||||
$table->dateTime('expires_at')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('oauth_access_tokens', static function (Blueprint $table): void {
|
||||
$table->string('id', 100)->primary();
|
||||
$table->integer('user_id')->index()->nullable();
|
||||
$table->integer('client_id');
|
||||
$table->string('name')->nullable();
|
||||
$table->text('scopes')->nullable();
|
||||
$table->boolean('revoked');
|
||||
$table->timestamps();
|
||||
$table->dateTime('expires_at')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "oauth_access_tokens": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,18 +51,17 @@ class CreateOauthRefreshTokensTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('oauth_refresh_tokens')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'oauth_refresh_tokens',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('id', 100)->primary();
|
||||
$table->string('access_token_id', 100)->index();
|
||||
$table->boolean('revoked');
|
||||
$table->dateTime('expires_at')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::create('oauth_refresh_tokens', static function (Blueprint $table): void {
|
||||
$table->string('id', 100)->primary();
|
||||
$table->string('access_token_id', 100)->index();
|
||||
$table->boolean('revoked');
|
||||
$table->dateTime('expires_at')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "oauth_refresh_tokens": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,23 +51,22 @@ class CreateOauthClientsTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('oauth_clients')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'oauth_clients',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('user_id')->index()->nullable();
|
||||
$table->string('name');
|
||||
$table->string('secret', 100);
|
||||
$table->text('redirect');
|
||||
$table->boolean('personal_access_client');
|
||||
$table->boolean('password_client');
|
||||
$table->boolean('revoked');
|
||||
$table->timestamps();
|
||||
}
|
||||
);
|
||||
Schema::create('oauth_clients', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('user_id')->index()->nullable();
|
||||
$table->string('name');
|
||||
$table->string('secret', 100);
|
||||
$table->text('redirect');
|
||||
$table->boolean('personal_access_client');
|
||||
$table->boolean('password_client');
|
||||
$table->boolean('revoked');
|
||||
$table->timestamps();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "oauth_clients": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,17 +51,16 @@ class CreateOauthPersonalAccessClientsTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('oauth_personal_access_clients')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'oauth_personal_access_clients',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('client_id')->index();
|
||||
$table->timestamps();
|
||||
}
|
||||
);
|
||||
Schema::create('oauth_personal_access_clients', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('client_id')->index();
|
||||
$table->timestamps();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "oauth_personal_access_clients": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,12 +41,9 @@ class ChangesForV472 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('attachments', 'notes')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'attachments',
|
||||
static function (Blueprint $table): void {
|
||||
$table->text('notes')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::table('attachments', static function (Blueprint $table): void {
|
||||
$table->text('notes')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -55,12 +52,9 @@ class ChangesForV472 extends Migration
|
||||
|
||||
if (Schema::hasColumn('transactions', 'order')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budgets',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('order');
|
||||
}
|
||||
);
|
||||
Schema::table('budgets', static function (Blueprint $table): void {
|
||||
$table->dropColumn('order');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -77,12 +71,9 @@ class ChangesForV472 extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('attachments', 'notes')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'attachments',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('notes');
|
||||
}
|
||||
);
|
||||
Schema::table('attachments', static function (Blueprint $table): void {
|
||||
$table->dropColumn('notes');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -91,12 +82,9 @@ class ChangesForV472 extends Migration
|
||||
|
||||
if (!Schema::hasColumn('budgets', 'order')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budgets',
|
||||
static function (Blueprint $table): void {
|
||||
$table->mediumInteger('order', false, true)->default(0);
|
||||
}
|
||||
);
|
||||
Schema::table('budgets', static function (Blueprint $table): void {
|
||||
$table->mediumInteger('order', false, true)->default(0);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -41,16 +41,13 @@ class ChangesForV473 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('bills', 'transaction_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('bills_transaction_currency_id_foreign');
|
||||
}
|
||||
$table->dropColumn('transaction_currency_id');
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('bills_transaction_currency_id_foreign');
|
||||
}
|
||||
);
|
||||
$table->dropColumn('transaction_currency_id');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -59,12 +56,9 @@ class ChangesForV473 extends Migration
|
||||
|
||||
if (!Schema::hasColumn('rules', 'strict')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'rules',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('strict');
|
||||
}
|
||||
);
|
||||
Schema::table('rules', static function (Blueprint $table): void {
|
||||
$table->dropColumn('strict');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -81,13 +75,10 @@ class ChangesForV473 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('bills', 'transaction_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('transaction_currency_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
$table->integer('transaction_currency_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -95,12 +86,9 @@ class ChangesForV473 extends Migration
|
||||
}
|
||||
if (!Schema::hasColumn('rules', 'strict')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'rules',
|
||||
static function (Blueprint $table): void {
|
||||
$table->boolean('strict')->default(true);
|
||||
}
|
||||
);
|
||||
Schema::table('rules', static function (Blueprint $table): void {
|
||||
$table->boolean('strict')->default(true);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -34,12 +34,16 @@ class ChangesForV474 extends Migration
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @SuppressWarnings("PHPMD.ShortMethodName")
|
||||
*/
|
||||
public function up(): void {}
|
||||
public function up(): void
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
@@ -56,130 +56,125 @@ class ChangesForV475 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('recurrences')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'recurrences',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('transaction_type_id', false, true);
|
||||
Schema::create('recurrences', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->integer('transaction_type_id', false, true);
|
||||
|
||||
$table->string('title', 1024);
|
||||
$table->text('description');
|
||||
$table->string('title', 1024);
|
||||
$table->text('description');
|
||||
|
||||
$table->date('first_date');
|
||||
$table->date('repeat_until')->nullable();
|
||||
$table->date('latest_date')->nullable();
|
||||
$table->smallInteger('repetitions', false, true);
|
||||
$table->date('first_date');
|
||||
$table->date('repeat_until')->nullable();
|
||||
$table->date('latest_date')->nullable();
|
||||
$table->smallInteger('repetitions', false, true);
|
||||
|
||||
$table->boolean('apply_rules')->default(true);
|
||||
$table->boolean('active')->default(true);
|
||||
$table->boolean('apply_rules')->default(true);
|
||||
$table->boolean('active')->default(true);
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('transaction_type_id')->references('id')->on('transaction_types')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('transaction_type_id')->references('id')->on('transaction_types')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "recurrences": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!Schema::hasTable('recurrences_transactions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'recurrences_transactions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('recurrence_id', false, true);
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->integer('foreign_currency_id', false, true)->nullable();
|
||||
$table->integer('source_id', false, true);
|
||||
$table->integer('destination_id', false, true);
|
||||
Schema::create('recurrences_transactions', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('recurrence_id', false, true);
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->integer('foreign_currency_id', false, true)->nullable();
|
||||
$table->integer('source_id', false, true);
|
||||
$table->integer('destination_id', false, true);
|
||||
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->decimal('foreign_amount', 32, 12)->nullable();
|
||||
$table->string('description', 1024);
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->decimal('foreign_amount', 32, 12)->nullable();
|
||||
$table->string('description', 1024);
|
||||
|
||||
$table->foreign('recurrence_id')->references('id')->on('recurrences')->onDelete('cascade');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('foreign_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
$table->foreign('source_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
$table->foreign('destination_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('recurrence_id')->references('id')->on('recurrences')->onDelete('cascade');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('foreign_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
$table->foreign('source_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
$table->foreign('destination_id')->references('id')->on('accounts')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "recurrences_transactions": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('recurrences_repetitions')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'recurrences_repetitions',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('recurrence_id', false, true);
|
||||
$table->string('repetition_type', 50);
|
||||
$table->string('repetition_moment', 50);
|
||||
$table->smallInteger('repetition_skip', false, true);
|
||||
$table->smallInteger('weekend', false, true);
|
||||
Schema::create('recurrences_repetitions', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('recurrence_id', false, true);
|
||||
$table->string('repetition_type', 50);
|
||||
$table->string('repetition_moment', 50);
|
||||
$table->smallInteger('repetition_skip', false, true);
|
||||
$table->smallInteger('weekend', false, true);
|
||||
|
||||
$table->foreign('recurrence_id')->references('id')->on('recurrences')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('recurrence_id')->references('id')->on('recurrences')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "recurrences_repetitions": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('recurrences_meta')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'recurrences_meta',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('recurrence_id', false, true);
|
||||
Schema::create('recurrences_meta', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('recurrence_id', false, true);
|
||||
|
||||
$table->string('name', 50);
|
||||
$table->text('value');
|
||||
$table->string('name', 50);
|
||||
$table->text('value');
|
||||
|
||||
$table->foreign('recurrence_id')->references('id')->on('recurrences')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('recurrence_id')->references('id')->on('recurrences')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "recurrences_meta": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('rt_meta')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'rt_meta',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('rt_id', false, true);
|
||||
Schema::create('rt_meta', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('rt_id', false, true);
|
||||
|
||||
$table->string('name', 50);
|
||||
$table->text('value');
|
||||
$table->string('name', 50);
|
||||
$table->text('value');
|
||||
|
||||
$table->foreign('rt_id')->references('id')->on('recurrences_transactions')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('rt_id')->references('id')->on('recurrences_transactions')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "rt_meta": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,17 +41,14 @@ class ChangesForV477 extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('budget_limits', 'transaction_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('budget_limits_transaction_currency_id_foreign');
|
||||
}
|
||||
|
||||
$table->dropColumn(['transaction_currency_id']);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('budget_limits_transaction_currency_id_foreign');
|
||||
}
|
||||
);
|
||||
|
||||
$table->dropColumn(['transaction_currency_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -68,13 +65,10 @@ class ChangesForV477 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('budget_limits', 'transaction_currency_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('transaction_currency_id', false, true)->nullable()->after('budget_id');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->integer('transaction_currency_id', false, true)->nullable()->after('budget_id');
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('set null');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -41,12 +41,9 @@ class ChangesForV479 extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('transaction_currencies', 'enabled')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_currencies',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn(['enabled']);
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_currencies', static function (Blueprint $table): void {
|
||||
$table->dropColumn(['enabled']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -63,12 +60,9 @@ class ChangesForV479 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('transaction_currencies', 'enabled')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_currencies',
|
||||
static function (Blueprint $table): void {
|
||||
$table->boolean('enabled')->default(0)->after('deleted_at');
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_currencies', static function (Blueprint $table): void {
|
||||
$table->boolean('enabled')->default(0)->after('deleted_at');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -52,43 +52,41 @@ class ChangesForV4710 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('transaction_groups')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'transaction_groups',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('title', 1024)->nullable();
|
||||
Schema::create('transaction_groups', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('title', 1024)->nullable();
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "transaction_groups": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('group_journals')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'group_journals',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('transaction_group_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
Schema::create('group_journals', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('transaction_group_id', false, true);
|
||||
$table->integer('transaction_journal_id', false, true);
|
||||
|
||||
$table->foreign('transaction_group_id')->references('id')->on('transaction_groups')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
$table->foreign('transaction_group_id')->references('id')->on('transaction_groups')->onDelete('cascade');
|
||||
$table->foreign('transaction_journal_id')->references('id')->on('transaction_journals')->onDelete('cascade');
|
||||
|
||||
// unique combi:
|
||||
$table->unique(['transaction_group_id', 'transaction_journal_id'], 'unique_in_group');
|
||||
}
|
||||
);
|
||||
// unique combi:
|
||||
$table->unique(['transaction_group_id', 'transaction_journal_id'], 'unique_in_group');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "group_journals": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +37,9 @@ class ChangesForV4711 extends Migration
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
@@ -55,24 +57,18 @@ class ChangesForV4711 extends Migration
|
||||
* nice.
|
||||
*/
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_journals',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dateTime('date')->change();
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_journals', static function (Blueprint $table): void {
|
||||
$table->dateTime('date')->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'preferences',
|
||||
static function (Blueprint $table): void {
|
||||
$table->text('data')->nullable()->change();
|
||||
}
|
||||
);
|
||||
Schema::table('preferences', static function (Blueprint $table): void {
|
||||
$table->text('data')->nullable()->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -37,7 +37,9 @@ class ChangesForV4712 extends Migration
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
@@ -55,12 +57,9 @@ class ChangesForV4712 extends Migration
|
||||
* nice.
|
||||
*/
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_journals',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dateTime('date')->change();
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_journals', static function (Blueprint $table): void {
|
||||
$table->dateTime('date')->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -41,12 +41,9 @@ class FixLdapConfiguration extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('users', 'objectguid')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn(['objectguid']);
|
||||
}
|
||||
);
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
$table->dropColumn(['objectguid']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -67,12 +64,9 @@ class FixLdapConfiguration extends Migration
|
||||
*/
|
||||
if (!Schema::hasColumn('users', 'objectguid')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
$table->uuid('objectguid')->nullable()->after('id');
|
||||
}
|
||||
);
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
$table->uuid('objectguid')->nullable()->after('id');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -42,28 +42,27 @@ class ChangesForV480 extends Migration
|
||||
// remove group ID
|
||||
if (Schema::hasColumn('transaction_journals', 'transaction_group_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_journals',
|
||||
static function (Blueprint $table): void {
|
||||
// drop transaction_group_id + foreign key.
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
try {
|
||||
$table->dropForeign('transaction_journals_transaction_group_id_foreign');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop foreign ID: %s', $e->getMessage()));
|
||||
app('log')->error('If the foreign ID does not exist (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
}
|
||||
|
||||
Schema::table('transaction_journals', static function (Blueprint $table): void {
|
||||
// drop transaction_group_id + foreign key.
|
||||
// cannot drop foreign keys in SQLite:
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
try {
|
||||
$table->dropColumn('transaction_group_id');
|
||||
$table->dropForeign('transaction_journals_transaction_group_id_foreign');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column: %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
app('log')->error(sprintf('Could not drop foreign ID: %s', $e->getMessage()));
|
||||
app('log')->error(
|
||||
'If the foreign ID does not exist (see error), this is not an problem. Otherwise, please open a GitHub discussion.'
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
try {
|
||||
$table->dropColumn('transaction_group_id');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column: %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -73,17 +72,14 @@ class ChangesForV480 extends Migration
|
||||
// remove 'stop processing' column
|
||||
if (Schema::hasColumn('rule_groups', 'stop_processing')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'rule_groups',
|
||||
static function (Blueprint $table): void {
|
||||
try {
|
||||
$table->dropColumn('stop_processing');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column: %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
Schema::table('rule_groups', static function (Blueprint $table): void {
|
||||
try {
|
||||
$table->dropColumn('stop_processing');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column: %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -93,17 +89,14 @@ class ChangesForV480 extends Migration
|
||||
// remove 'mfa_secret' column
|
||||
if (Schema::hasColumn('users', 'mfa_secret')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
try {
|
||||
$table->dropColumn('mfa_secret');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column: %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
try {
|
||||
$table->dropColumn('mfa_secret');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not drop column: %s', $e->getMessage()));
|
||||
app('log')->error('If the column does not exist, this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -121,27 +114,22 @@ class ChangesForV480 extends Migration
|
||||
// add currency_id
|
||||
if (!Schema::hasColumn('transaction_journals', 'transaction_group_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_journals',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('transaction_currency_id', false, true)->nullable()->change();
|
||||
Schema::table('transaction_journals', static function (Blueprint $table): void {
|
||||
$table->integer('transaction_currency_id', false, true)->nullable()->change();
|
||||
|
||||
// add column "group_id" after "transaction_type_id"
|
||||
$table->integer('transaction_group_id', false, true)
|
||||
->nullable()->default(null)->after('transaction_type_id')
|
||||
;
|
||||
// add column "group_id" after "transaction_type_id"
|
||||
$table->integer('transaction_group_id', false, true)->nullable()->default(null)->after('transaction_type_id');
|
||||
|
||||
// add foreign key for "transaction_group_id"
|
||||
try {
|
||||
$table->foreign('transaction_group_id')->references('id')->on('transaction_groups')->onDelete('cascade');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create foreign index: %s', $e->getMessage()));
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
// add foreign key for "transaction_group_id"
|
||||
try {
|
||||
$table->foreign('transaction_group_id')->references('id')->on('transaction_groups')->onDelete('cascade');
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create foreign index: %s', $e->getMessage()));
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -151,12 +139,9 @@ class ChangesForV480 extends Migration
|
||||
// add 'stop processing' column
|
||||
if (!Schema::hasColumn('rule_groups', 'stop_processing')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'rule_groups',
|
||||
static function (Blueprint $table): void {
|
||||
$table->boolean('stop_processing')->default(false);
|
||||
}
|
||||
);
|
||||
Schema::table('rule_groups', static function (Blueprint $table): void {
|
||||
$table->boolean('stop_processing')->default(false);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -166,12 +151,9 @@ class ChangesForV480 extends Migration
|
||||
// add 'mfa_secret' column
|
||||
if (!Schema::hasColumn('users', 'mfa_secret')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('mfa_secret', 50)->nullable();
|
||||
}
|
||||
);
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
$table->string('mfa_secret', 50)->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -51,24 +51,23 @@ class MakeLocationsTable extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('locations')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'locations',
|
||||
static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
Schema::create('locations', static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
|
||||
$table->integer('locatable_id', false, true);
|
||||
$table->string('locatable_type', 255);
|
||||
$table->integer('locatable_id', false, true);
|
||||
$table->string('locatable_type', 255);
|
||||
|
||||
$table->decimal('latitude', 12, 8)->nullable();
|
||||
$table->decimal('longitude', 12, 8)->nullable();
|
||||
$table->smallInteger('zoom_level', false, true)->nullable();
|
||||
}
|
||||
);
|
||||
$table->decimal('latitude', 12, 8)->nullable();
|
||||
$table->decimal('longitude', 12, 8)->nullable();
|
||||
$table->smallInteger('zoom_level', false, true)->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "locations": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,25 +52,24 @@ class ChangesForV520 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('auto_budgets')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'auto_budgets',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->tinyInteger('auto_budget_type', false, true)->default(1);
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->string('period', 50);
|
||||
Schema::create('auto_budgets', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('budget_id', false, true);
|
||||
$table->integer('transaction_currency_id', false, true);
|
||||
$table->tinyInteger('auto_budget_type', false, true)->default(1);
|
||||
$table->decimal('amount', 32, 12);
|
||||
$table->string('period', 50);
|
||||
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('transaction_currency_id')->references('id')->on('transaction_currencies')->onDelete('cascade');
|
||||
$table->foreign('budget_id')->references('id')->on('budgets')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "auto_budgets": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -52,37 +52,35 @@ class ChangesForV530 extends Migration
|
||||
{
|
||||
if (!Schema::hasTable('object_groups')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'object_groups',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('user_id', false, true);
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('title', 255);
|
||||
$table->mediumInteger('order', false, true)->default(0);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('object_groups', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('user_id', false, true);
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->string('title', 255);
|
||||
$table->mediumInteger('order', false, true)->default(0);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "object_groups": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('object_groupables')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'object_groupables',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('object_group_id');
|
||||
$table->integer('object_groupable_id', false, true);
|
||||
$table->string('object_groupable_type', 255);
|
||||
}
|
||||
);
|
||||
Schema::create('object_groupables', static function (Blueprint $table): void {
|
||||
$table->integer('object_group_id');
|
||||
$table->integer('object_groupable_id', false, true);
|
||||
$table->string('object_groupable_type', 255);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "object_groupables": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -41,12 +41,9 @@ class ChangesForV530a extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('bills', 'order')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('order');
|
||||
}
|
||||
);
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
$table->dropColumn('order');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -63,12 +60,9 @@ class ChangesForV530a extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('bills', 'order')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('order', false, true)->default(0);
|
||||
}
|
||||
);
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
$table->integer('order', false, true)->default(0);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -41,12 +41,9 @@ class ChangesForV540 extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('oauth_clients', 'provider')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'oauth_clients',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('provider');
|
||||
}
|
||||
);
|
||||
Schema::table('oauth_clients', static function (Blueprint $table): void {
|
||||
$table->dropColumn('provider');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -55,12 +52,9 @@ class ChangesForV540 extends Migration
|
||||
|
||||
if (Schema::hasColumn('accounts', 'order')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'accounts',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('order');
|
||||
}
|
||||
);
|
||||
Schema::table('accounts', static function (Blueprint $table): void {
|
||||
$table->dropColumn('order');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -69,12 +63,9 @@ class ChangesForV540 extends Migration
|
||||
// in two steps for sqlite
|
||||
if (Schema::hasColumn('bills', 'end_date')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('end_date');
|
||||
}
|
||||
);
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
$table->dropColumn('end_date');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -82,12 +73,9 @@ class ChangesForV540 extends Migration
|
||||
}
|
||||
if (Schema::hasColumn('bills', 'extension_date')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('extension_date');
|
||||
}
|
||||
);
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
$table->dropColumn('extension_date');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -104,12 +92,9 @@ class ChangesForV540 extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('accounts', 'order')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'accounts',
|
||||
static function (Blueprint $table): void {
|
||||
$table->integer('order', false, true)->default(0);
|
||||
}
|
||||
);
|
||||
Schema::table('accounts', static function (Blueprint $table): void {
|
||||
$table->integer('order', false, true)->default(0);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -118,12 +103,9 @@ class ChangesForV540 extends Migration
|
||||
|
||||
if (!Schema::hasColumn('oauth_clients', 'provider')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'oauth_clients',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('provider')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::table('oauth_clients', static function (Blueprint $table): void {
|
||||
$table->string('provider')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -132,13 +114,10 @@ class ChangesForV540 extends Migration
|
||||
|
||||
if (!Schema::hasColumn('bills', 'end_date') && !Schema::hasColumn('bills', 'extension_date')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'bills',
|
||||
static function (Blueprint $table): void {
|
||||
$table->date('end_date')->nullable()->after('date');
|
||||
$table->date('extension_date')->nullable()->after('end_date');
|
||||
}
|
||||
);
|
||||
Schema::table('bills', static function (Blueprint $table): void {
|
||||
$table->date('end_date')->nullable()->after('date');
|
||||
$table->date('extension_date')->nullable()->after('end_date');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -147,12 +126,9 @@ class ChangesForV540 extends Migration
|
||||
|
||||
// make column nullable:
|
||||
try {
|
||||
Schema::table(
|
||||
'oauth_clients',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('secret', 100)->nullable()->change();
|
||||
}
|
||||
);
|
||||
Schema::table('oauth_clients', static function (Blueprint $table): void {
|
||||
$table->string('secret', 100)->nullable()->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -42,39 +42,35 @@ class ChangesForV550 extends Migration
|
||||
|
||||
if (!Schema::hasTable('jobs')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'jobs',
|
||||
static function (Blueprint $table): void {
|
||||
// straight from Laravel (this is the OLD table)
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue');
|
||||
$table->longText('payload');
|
||||
$table->tinyInteger('attempts')->unsigned();
|
||||
$table->tinyInteger('reserved')->unsigned();
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
$table->index(['queue', 'reserved', 'reserved_at']);
|
||||
}
|
||||
);
|
||||
Schema::create('jobs', static function (Blueprint $table): void {
|
||||
// straight from Laravel (this is the OLD table)
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue');
|
||||
$table->longText('payload');
|
||||
$table->tinyInteger('attempts')->unsigned();
|
||||
$table->tinyInteger('reserved')->unsigned();
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
$table->index(['queue', 'reserved', 'reserved_at']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "jobs": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// expand budget / transaction journal table.
|
||||
if (Schema::hasColumn('budget_transaction_journal', 'budget_limit_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_transaction_journal',
|
||||
static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('budget_id_foreign');
|
||||
}
|
||||
$table->dropColumn('budget_limit_id');
|
||||
Schema::table('budget_transaction_journal', static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('budget_id_foreign');
|
||||
}
|
||||
);
|
||||
$table->dropColumn('budget_limit_id');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -88,12 +84,9 @@ class ChangesForV550 extends Migration
|
||||
// in two steps for sqlite
|
||||
if (Schema::hasColumn('budget_limits', 'period')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('period');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->dropColumn('period');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -101,12 +94,9 @@ class ChangesForV550 extends Migration
|
||||
}
|
||||
if (Schema::hasColumn('budget_limits', 'generated')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn('generated');
|
||||
}
|
||||
);
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
$table->dropColumn('generated');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -133,21 +123,20 @@ class ChangesForV550 extends Migration
|
||||
// this is the NEW table
|
||||
if (!Schema::hasTable('jobs')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'jobs',
|
||||
static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue')->index();
|
||||
$table->longText('payload');
|
||||
$table->unsignedTinyInteger('attempts');
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
}
|
||||
);
|
||||
Schema::create('jobs', static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('queue')->index();
|
||||
$table->longText('payload');
|
||||
$table->unsignedTinyInteger('attempts');
|
||||
$table->unsignedInteger('reserved_at')->nullable();
|
||||
$table->unsignedInteger('available_at');
|
||||
$table->unsignedInteger('created_at');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "jobs": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
// drop failed jobs table.
|
||||
@@ -156,36 +145,32 @@ class ChangesForV550 extends Migration
|
||||
// create new failed_jobs table.
|
||||
if (!Schema::hasTable('failed_jobs')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'failed_jobs',
|
||||
static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('uuid')->unique();
|
||||
$table->text('connection');
|
||||
$table->text('queue');
|
||||
$table->longText('payload');
|
||||
$table->longText('exception');
|
||||
$table->timestamp('failed_at')->useCurrent();
|
||||
}
|
||||
);
|
||||
Schema::create('failed_jobs', static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->string('uuid')->unique();
|
||||
$table->text('connection');
|
||||
$table->text('queue');
|
||||
$table->longText('payload');
|
||||
$table->longText('exception');
|
||||
$table->timestamp('failed_at')->useCurrent();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "failed_jobs": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// update budget / transaction journal table.
|
||||
if (!Schema::hasColumn('budget_transaction_journal', 'budget_limit_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_transaction_journal',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('budget_transaction_journal', 'budget_limit_id')) {
|
||||
$table->integer('budget_limit_id', false, true)->nullable()->default(null)->after('budget_id');
|
||||
$table->foreign('budget_limit_id', 'budget_id_foreign')->references('id')->on('budget_limits')->onDelete('set null');
|
||||
}
|
||||
Schema::table('budget_transaction_journal', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('budget_transaction_journal', 'budget_limit_id')) {
|
||||
$table->integer('budget_limit_id', false, true)->nullable()->default(null)->after('budget_id');
|
||||
$table->foreign('budget_limit_id', 'budget_id_foreign')->references('id')->on('budget_limits')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -196,17 +181,14 @@ class ChangesForV550 extends Migration
|
||||
// I swear I dropped & recreated this field 15 times already.
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'budget_limits',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('budget_limits', 'period')) {
|
||||
$table->string('period', 12)->nullable();
|
||||
}
|
||||
if (!Schema::hasColumn('budget_limits', 'generated')) {
|
||||
$table->boolean('generated')->default(false);
|
||||
}
|
||||
Schema::table('budget_limits', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('budget_limits', 'period')) {
|
||||
$table->string('period', 12)->nullable();
|
||||
}
|
||||
);
|
||||
if (!Schema::hasColumn('budget_limits', 'generated')) {
|
||||
$table->boolean('generated')->default(false);
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -215,74 +197,71 @@ class ChangesForV550 extends Migration
|
||||
// new webhooks table
|
||||
if (!Schema::hasTable('webhooks')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'webhooks',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('title', 255)->index();
|
||||
$table->string('secret', 32)->index();
|
||||
$table->boolean('active')->default(true);
|
||||
$table->unsignedSmallInteger('trigger');
|
||||
$table->unsignedSmallInteger('response');
|
||||
$table->unsignedSmallInteger('delivery');
|
||||
$table->string('url', 1024);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
Schema::create('webhooks', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->string('title', 255)->index();
|
||||
$table->string('secret', 32)->index();
|
||||
$table->boolean('active')->default(true);
|
||||
$table->unsignedSmallInteger('trigger');
|
||||
$table->unsignedSmallInteger('response');
|
||||
$table->unsignedSmallInteger('delivery');
|
||||
$table->string('url', 1024);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "webhooks": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// new webhook_messages table
|
||||
if (!Schema::hasTable('webhook_messages')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'webhook_messages',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->boolean('sent')->default(false);
|
||||
$table->boolean('errored')->default(false);
|
||||
Schema::create('webhook_messages', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->boolean('sent')->default(false);
|
||||
$table->boolean('errored')->default(false);
|
||||
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->string('uuid', 64);
|
||||
$table->longText('message');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->string('uuid', 64);
|
||||
$table->longText('message');
|
||||
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "webhook_messages": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!Schema::hasTable('webhook_attempts')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'webhook_attempts',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('webhook_message_id', false, true);
|
||||
$table->unsignedSmallInteger('status_code')->default(0);
|
||||
Schema::create('webhook_attempts', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('webhook_message_id', false, true);
|
||||
$table->unsignedSmallInteger('status_code')->default(0);
|
||||
|
||||
$table->longText('logs')->nullable();
|
||||
$table->longText('response')->nullable();
|
||||
$table->longText('logs')->nullable();
|
||||
$table->longText('response')->nullable();
|
||||
|
||||
$table->foreign('webhook_message_id')->references('id')->on('webhook_messages')->onDelete('cascade');
|
||||
}
|
||||
);
|
||||
$table->foreign('webhook_message_id')->references('id')->on('webhook_messages')->onDelete('cascade');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "webhook_attempts": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,17 +39,14 @@ class ChangesForV550b2 extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'recurrences_transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('type_foreign');
|
||||
}
|
||||
if (Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||
$table->dropColumn('transaction_type_id');
|
||||
}
|
||||
Schema::table('recurrences_transactions', static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('type_foreign');
|
||||
}
|
||||
);
|
||||
if (Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||
$table->dropColumn('transaction_type_id');
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -67,15 +64,12 @@ class ChangesForV550b2 extends Migration
|
||||
// expand recurrence transaction table
|
||||
if (!Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'recurrences_transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||
$table->integer('transaction_type_id', false, true)->nullable()->after('transaction_currency_id');
|
||||
$table->foreign('transaction_type_id', 'type_foreign')->references('id')->on('transaction_types')->onDelete('set null');
|
||||
}
|
||||
Schema::table('recurrences_transactions', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('recurrences_transactions', 'transaction_type_id')) {
|
||||
$table->integer('transaction_type_id', false, true)->nullable()->after('transaction_currency_id');
|
||||
$table->foreign('transaction_type_id', 'type_foreign')->references('id')->on('transaction_types')->onDelete('set null');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -36,12 +36,9 @@ class AddLdapColumnsToUsersTable extends Migration
|
||||
{
|
||||
if (Schema::hasColumn('users', 'domain')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
$table->dropColumn(['domain']);
|
||||
}
|
||||
);
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
$table->dropColumn(['domain']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -58,12 +55,9 @@ class AddLdapColumnsToUsersTable extends Migration
|
||||
{
|
||||
if (!Schema::hasColumn('users', 'domain')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('domain')->nullable();
|
||||
}
|
||||
);
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
$table->string('domain')->nullable();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -35,7 +35,9 @@ class ExtendCurrencyInfo extends Migration
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
@@ -45,13 +47,10 @@ class ExtendCurrencyInfo extends Migration
|
||||
public function up(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'transaction_currencies',
|
||||
static function (Blueprint $table): void {
|
||||
$table->string('code', 51)->change();
|
||||
$table->string('symbol', 51)->change();
|
||||
}
|
||||
);
|
||||
Schema::table('transaction_currencies', static function (Blueprint $table): void {
|
||||
$table->string('code', 51)->change();
|
||||
$table->string('symbol', 51)->change();
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -32,24 +32,23 @@ use Illuminate\Support\Facades\Schema;
|
||||
*/
|
||||
class UserGroups extends Migration
|
||||
{
|
||||
private array $tables
|
||||
= [
|
||||
'accounts',
|
||||
'attachments',
|
||||
'available_budgets',
|
||||
'bills',
|
||||
'budgets',
|
||||
'categories',
|
||||
'recurrences',
|
||||
'object_groups',
|
||||
'preferences',
|
||||
'rule_groups',
|
||||
'rules',
|
||||
'tags',
|
||||
'transaction_groups',
|
||||
'transaction_journals',
|
||||
'webhooks',
|
||||
];
|
||||
private array $tables = [
|
||||
'accounts',
|
||||
'attachments',
|
||||
'available_budgets',
|
||||
'bills',
|
||||
'budgets',
|
||||
'categories',
|
||||
'recurrences',
|
||||
'object_groups',
|
||||
'preferences',
|
||||
'rule_groups',
|
||||
'rules',
|
||||
'tags',
|
||||
'transaction_groups',
|
||||
'transaction_journals',
|
||||
'webhooks'
|
||||
];
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
@@ -61,17 +60,14 @@ class UserGroups extends Migration
|
||||
foreach ($this->tables as $tableName) {
|
||||
if (Schema::hasColumn($tableName, 'user_group_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
$tableName,
|
||||
static function (Blueprint $table) use ($tableName): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign(sprintf('%s_to_ugi', $tableName));
|
||||
}
|
||||
if (Schema::hasColumn($tableName, 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
Schema::table($tableName, static function (Blueprint $table) use ($tableName): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign(sprintf('%s_to_ugi', $tableName));
|
||||
}
|
||||
);
|
||||
if (Schema::hasColumn($tableName, 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -81,17 +77,14 @@ class UserGroups extends Migration
|
||||
|
||||
if (Schema::hasColumn('users', 'user_group_id')) {
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('type_user_group_id');
|
||||
}
|
||||
if (Schema::hasColumn('users', 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('type_user_group_id');
|
||||
}
|
||||
);
|
||||
if (Schema::hasColumn('users', 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -117,76 +110,68 @@ class UserGroups extends Migration
|
||||
*/
|
||||
if (!Schema::hasTable('user_groups')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'user_groups',
|
||||
static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
Schema::create('user_groups', static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
|
||||
$table->string('title', 255);
|
||||
$table->unique('title');
|
||||
}
|
||||
);
|
||||
$table->string('title', 255);
|
||||
$table->unique('title');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "user_groups": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!Schema::hasTable('user_roles')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'user_roles',
|
||||
static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
Schema::create('user_roles', static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
|
||||
$table->string('title', 255);
|
||||
$table->unique('title');
|
||||
}
|
||||
);
|
||||
$table->string('title', 255);
|
||||
$table->unique('title');
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "user_roles": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
if (!Schema::hasTable('group_memberships')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'group_memberships',
|
||||
static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->bigInteger('user_group_id', false, true);
|
||||
$table->bigInteger('user_role_id', false, true);
|
||||
Schema::create('group_memberships', static function (Blueprint $table): void {
|
||||
$table->bigIncrements('id');
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
$table->integer('user_id', false, true);
|
||||
$table->bigInteger('user_group_id', false, true);
|
||||
$table->bigInteger('user_role_id', false, true);
|
||||
|
||||
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('user_group_id')->references('id')->on('user_groups')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('user_role_id')->references('id')->on('user_roles')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->unique(['user_id', 'user_group_id', 'user_role_id']);
|
||||
}
|
||||
);
|
||||
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('user_group_id')->references('id')->on('user_groups')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->foreign('user_role_id')->references('id')->on('user_roles')->onUpdate('cascade')->onDelete('cascade');
|
||||
$table->unique(['user_id', 'user_group_id', 'user_role_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "group_memberships": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'users',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('users', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable();
|
||||
$table->foreign('user_group_id', 'type_user_group_id')->references('id')->on('user_groups')->onDelete('set null')->onUpdate(
|
||||
'cascade'
|
||||
);
|
||||
}
|
||||
Schema::table('users', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('users', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable();
|
||||
$table->foreign('user_group_id', 'type_user_group_id')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -196,17 +181,17 @@ class UserGroups extends Migration
|
||||
/** @var string $tableName */
|
||||
foreach ($this->tables as $tableName) {
|
||||
try {
|
||||
Schema::table(
|
||||
$tableName,
|
||||
static function (Blueprint $table) use ($tableName): void {
|
||||
if (!Schema::hasColumn($tableName, 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('user_group_id', sprintf('%s_to_ugi', $tableName))->references('id')->on('user_groups')->onDelete(
|
||||
'set null'
|
||||
)->onUpdate('cascade');
|
||||
}
|
||||
Schema::table($tableName, static function (Blueprint $table) use ($tableName): void {
|
||||
if (!Schema::hasColumn($tableName, 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table
|
||||
->foreign('user_group_id', sprintf('%s_to_ugi', $tableName))
|
||||
->references('id')
|
||||
->on('user_groups')
|
||||
->onDelete('set null')
|
||||
->onUpdate('cascade');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -60,7 +60,9 @@ class CreateLocalPersonalAccessTokensTable extends Migration
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "personal_access_tokens": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
@@ -36,15 +36,12 @@ return new class () extends Migration {
|
||||
public function up(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'currency_exchange_rates',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('currency_exchange_rates', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('user_group_id', 'cer_to_ugi')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
||||
}
|
||||
Schema::table('currency_exchange_rates', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('currency_exchange_rates', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('user_group_id', 'cer_to_ugi')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -57,17 +54,14 @@ return new class () extends Migration {
|
||||
public function down(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'currency_exchange_rates',
|
||||
static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('cer_to_ugi');
|
||||
}
|
||||
if (Schema::hasColumn('currency_exchange_rates', 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
Schema::table('currency_exchange_rates', static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign('cer_to_ugi');
|
||||
}
|
||||
);
|
||||
if (Schema::hasColumn('currency_exchange_rates', 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -27,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
@@ -47,7 +47,9 @@ return new class () extends Migration {
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "notifications": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
@@ -49,7 +49,9 @@ return new class () extends Migration {
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "invited_users": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
@@ -54,7 +54,9 @@ return new class () extends Migration {
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "audit_log_entries": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
@@ -36,17 +36,17 @@ return new class () extends Migration {
|
||||
public function up(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'object_groups',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('object_groups', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('user_group_id', sprintf('%s_to_ugi', 'object_groups'))->references('id')->on('user_groups')->onDelete(
|
||||
'set null'
|
||||
)->onUpdate('cascade');
|
||||
}
|
||||
Schema::table('object_groups', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('object_groups', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table
|
||||
->foreign('user_group_id', sprintf('%s_to_ugi', 'object_groups'))
|
||||
->references('id')
|
||||
->on('user_groups')
|
||||
->onDelete('set null')
|
||||
->onUpdate('cascade');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -59,17 +59,14 @@ return new class () extends Migration {
|
||||
public function down(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'object_groups',
|
||||
static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign(sprintf('%s_to_ugi', 'object_groups'));
|
||||
}
|
||||
if (Schema::hasColumn('object_groups', 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
Schema::table('object_groups', static function (Blueprint $table): void {
|
||||
if ('sqlite' !== config('database.default')) {
|
||||
$table->dropForeign(sprintf('%s_to_ugi', 'object_groups'));
|
||||
}
|
||||
);
|
||||
if (Schema::hasColumn('object_groups', 'user_group_id')) {
|
||||
$table->dropColumn('user_group_id');
|
||||
}
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -27,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* @SuppressWarnings("PHPMD.ShortMethodName")
|
||||
* Run the migrations.
|
||||
@@ -49,7 +49,9 @@ return new class () extends Migration {
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "transaction_currency_user": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +70,9 @@ return new class () extends Migration {
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not create table "transaction_currency_user_group": %s', $e->getMessage()));
|
||||
app('log')->error('If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.');
|
||||
app('log')->error(
|
||||
'If this table exists already (see the error message), this is not a problem. Other errors? Please open a discussion on GitHub.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_03_03_174645_add_indices.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -28,7 +27,7 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
private const string QUERY_ERROR = 'Could not execute query (table "%s", field "%s"): %s';
|
||||
private const string EXPL = 'If the index already exists (see error), or if MySQL can\'t do it, this is not an problem. Otherwise, please open a GitHub discussion.';
|
||||
|
||||
@@ -46,19 +45,24 @@ return new class () extends Migration {
|
||||
'category_transaction_journal' => ['transaction_journal_id'],
|
||||
'categories' => ['user_id', 'user_group_id'],
|
||||
'transaction_groups' => ['user_id', 'user_group_id'],
|
||||
'transaction_journals' => ['user_id', 'user_group_id', 'date', 'transaction_group_id', 'transaction_type_id', 'transaction_currency_id', 'bill_id'],
|
||||
'transactions' => ['account_id', 'transaction_journal_id', 'transaction_currency_id', 'foreign_currency_id'],
|
||||
'transaction_journals' => [
|
||||
'user_id',
|
||||
'user_group_id',
|
||||
'date',
|
||||
'transaction_group_id',
|
||||
'transaction_type_id',
|
||||
'transaction_currency_id',
|
||||
'bill_id'
|
||||
],
|
||||
'transactions' => ['account_id', 'transaction_journal_id', 'transaction_currency_id', 'foreign_currency_id']
|
||||
];
|
||||
|
||||
foreach ($set as $table => $fields) {
|
||||
foreach ($fields as $field) {
|
||||
try {
|
||||
Schema::table(
|
||||
$table,
|
||||
static function (Blueprint $blueprint) use ($field): void {
|
||||
$blueprint->index($field);
|
||||
}
|
||||
);
|
||||
Schema::table($table, static function (Blueprint $blueprint) use ($field): void {
|
||||
$blueprint->index($field);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::QUERY_ERROR, $table, $field, $e->getMessage()));
|
||||
app('log')->error(self::EXPL);
|
||||
@@ -70,5 +74,7 @@ return new class () extends Migration {
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_04_01_174351_expand_preferences_table.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -28,22 +27,19 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'preferences',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('preferences', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('user_group_id', 'preferences_to_ugi')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
||||
}
|
||||
Schema::table('preferences', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('preferences', 'user_group_id')) {
|
||||
$table->bigInteger('user_group_id', false, true)->nullable()->after('user_id');
|
||||
$table->foreign('user_group_id', 'preferences_to_ugi')->references('id')->on('user_groups')->onDelete('set null')->onUpdate('cascade');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -53,5 +49,7 @@ return new class () extends Migration {
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_05_12_060551_create_account_balance_table.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -27,7 +26,7 @@ use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_07_28_145631_add_running_balance.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -28,49 +27,40 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
public function up(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'balance_before')) {
|
||||
$table->decimal('balance_before', 32, 12)->nullable()->after('amount');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'balance_before')) {
|
||||
$table->decimal('balance_before', 32, 12)->nullable()->after('amount');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'balance_after')) {
|
||||
$table->decimal('balance_after', 32, 12)->nullable()->after('balance_before');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'balance_after')) {
|
||||
$table->decimal('balance_after', 32, 12)->nullable()->after('balance_before');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'balance_dirty')) {
|
||||
$table->boolean('balance_dirty')->default(true)->after('balance_after');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (!Schema::hasColumn('transactions', 'balance_dirty')) {
|
||||
$table->boolean('balance_dirty')->default(true)->after('balance_after');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
@@ -83,42 +73,33 @@ return new class () extends Migration {
|
||||
public function down(): void
|
||||
{
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'balance_before')) {
|
||||
$table->dropColumn('balance_before');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'balance_before')) {
|
||||
$table->dropColumn('balance_before');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'balance_after')) {
|
||||
$table->dropColumn('balance_after');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'balance_after')) {
|
||||
$table->dropColumn('balance_after');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
}
|
||||
|
||||
try {
|
||||
Schema::table(
|
||||
'transactions',
|
||||
static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'balance_dirty')) {
|
||||
$table->dropColumn('balance_dirty');
|
||||
}
|
||||
Schema::table('transactions', static function (Blueprint $table): void {
|
||||
if (Schema::hasColumn('transactions', 'balance_dirty')) {
|
||||
$table->dropColumn('balance_dirty');
|
||||
}
|
||||
);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not execute query: %s', $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_11_05_062108_add_date_tz_columns.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -28,24 +27,24 @@ use Illuminate\Database\QueryException;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
private array $tables;
|
||||
|
||||
public function __construct()
|
||||
{
|
||||
$this->tables = [
|
||||
'account_balances' => ['date'], // done
|
||||
'available_budgets' => ['start_date', 'end_date'], // done
|
||||
'bills' => ['date', 'end_date', 'extension_date'], // done
|
||||
'budget_limits' => ['start_date', 'end_date'], // done
|
||||
'account_balances' => ['date'], // done
|
||||
'available_budgets' => ['start_date', 'end_date'], // done
|
||||
'bills' => ['date', 'end_date', 'extension_date'], // done
|
||||
'budget_limits' => ['start_date', 'end_date'], // done
|
||||
'currency_exchange_rates' => ['date'], // done
|
||||
'invited_users' => ['expires'],
|
||||
'piggy_bank_events' => ['date'],
|
||||
'piggy_bank_repetitions' => ['startdate', 'targetdate'],
|
||||
'piggy_banks' => ['startdate', 'targetdate'], // done
|
||||
'recurrences' => ['first_date', 'repeat_until', 'latest_date'],
|
||||
'tags' => ['date'],
|
||||
'transaction_journals' => ['date'],
|
||||
'invited_users' => ['expires'],
|
||||
'piggy_bank_events' => ['date'],
|
||||
'piggy_bank_repetitions' => ['startdate', 'targetdate'],
|
||||
'piggy_banks' => ['startdate', 'targetdate'], // done
|
||||
'recurrences' => ['first_date', 'repeat_until', 'latest_date'],
|
||||
'tags' => ['date'],
|
||||
'transaction_journals' => ['date']
|
||||
];
|
||||
}
|
||||
|
||||
@@ -60,15 +59,14 @@ return new class () extends Migration {
|
||||
$newColumn = sprintf('%s_tz', $column);
|
||||
if (Schema::hasColumn($table, $column) && !Schema::hasColumn($table, $newColumn)) {
|
||||
try {
|
||||
Schema::table(
|
||||
$table,
|
||||
static function (Blueprint $table) use ($column, $newColumn): void {
|
||||
$table->string($newColumn, 50)->nullable()->after($column);
|
||||
}
|
||||
);
|
||||
Schema::table($table, static function (Blueprint $table) use ($column, $newColumn): void {
|
||||
$table->string($newColumn, 50)->nullable()->after($column);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf('Could not add column "%s" to table "%s" query: %s', $newColumn, $table, $e->getMessage()));
|
||||
app('log')->error('If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.');
|
||||
app('log')->error(
|
||||
'If the column or index already exists (see error), this is not an problem. Otherwise, please open a GitHub discussion.'
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -78,5 +76,7 @@ return new class () extends Migration {
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void {}
|
||||
public function down(): void
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_11_30_075826_multi_piggy.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -28,7 +27,7 @@ use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
return new class() extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
@@ -114,7 +113,6 @@ return new class () extends Migration {
|
||||
$table->unique(['account_id', 'piggy_bank_id'], 'unique_piggy_save');
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -161,7 +159,6 @@ return new class () extends Migration {
|
||||
|
||||
protected static function hasForeign(string $table, string $column): bool
|
||||
{
|
||||
|
||||
$foreignKeysDefinitions = Schema::getForeignKeys($table);
|
||||
foreach ($foreignKeysDefinitions as $foreignKeyDefinition) {
|
||||
if ($foreignKeyDefinition['name'] === $column) {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2024_12_19_061003_add_native_amount_column.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org.
|
||||
@@ -27,21 +26,19 @@ use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class () extends Migration {
|
||||
private array $tables
|
||||
= [
|
||||
// !!! this array is also in PreferencesEventHandler + RecalculateNativeAmountsCommand
|
||||
'accounts' => ['native_virtual_balance'], // works.
|
||||
'account_piggy_bank' => ['native_current_amount'], // works
|
||||
'auto_budgets' => ['native_amount'], // works
|
||||
'available_budgets' => ['native_amount'], // works
|
||||
'bills' => ['native_amount_min', 'native_amount_max'], // works
|
||||
'budget_limits' => ['native_amount'], // works
|
||||
'piggy_bank_events' => ['native_amount'], // works
|
||||
'piggy_banks' => ['native_target_amount'], // works
|
||||
'transactions' => ['native_amount', 'native_foreign_amount'], // works
|
||||
|
||||
];
|
||||
return new class() extends Migration {
|
||||
private array $tables = [
|
||||
// !!! this array is also in PreferencesEventHandler + RecalculateNativeAmountsCommand
|
||||
'accounts' => ['native_virtual_balance'], // works.
|
||||
'account_piggy_bank' => ['native_current_amount'], // works
|
||||
'auto_budgets' => ['native_amount'], // works
|
||||
'available_budgets' => ['native_amount'], // works
|
||||
'bills' => ['native_amount_min', 'native_amount_max'], // works
|
||||
'budget_limits' => ['native_amount'], // works
|
||||
'piggy_bank_events' => ['native_amount'], // works
|
||||
'piggy_banks' => ['native_target_amount'], // works
|
||||
'transactions' => ['native_amount', 'native_foreign_amount'] // works
|
||||
];
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2025_07_10_065736_rename_tag_mode.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
<?php
|
||||
|
||||
|
||||
/*
|
||||
* 2025_08_19_180459_create_webhook_details_tables.php
|
||||
* Copyright (c) 2025 james@firefly-iii.org
|
||||
@@ -66,42 +65,35 @@ return new class extends Migration {
|
||||
// webhook_webhook_trigger
|
||||
if (!Schema::hasTable('webhook_webhook_trigger')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'webhook_webhook_trigger',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->bigInteger('webhook_trigger_id', false, true);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
$table->foreign('webhook_trigger_id','link_to_trigger')->references('id')->on('webhook_triggers')->onDelete('cascade');
|
||||
Schema::create('webhook_webhook_trigger', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->bigInteger('webhook_trigger_id', false, true);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
$table->foreign('webhook_trigger_id', 'link_to_trigger')->references('id')->on('webhook_triggers')->onDelete('cascade');
|
||||
|
||||
// unique combi:
|
||||
$table->unique(['webhook_id', 'webhook_trigger_id']);
|
||||
}
|
||||
);
|
||||
// unique combi:
|
||||
$table->unique(['webhook_id', 'webhook_trigger_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'webhook_webhook_trigger', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// webhook_webhook_response
|
||||
if (!Schema::hasTable('webhook_webhook_response')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'webhook_webhook_response',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->bigInteger('webhook_response_id', false, true);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
$table->foreign('webhook_response_id','link_to_response')->references('id')->on('webhook_responses')->onDelete('cascade');
|
||||
Schema::create('webhook_webhook_response', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->bigInteger('webhook_response_id', false, true);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
$table->foreign('webhook_response_id', 'link_to_response')->references('id')->on('webhook_responses')->onDelete('cascade');
|
||||
|
||||
// unique combi:
|
||||
$table->unique(['webhook_id', 'webhook_response_id']);
|
||||
}
|
||||
);
|
||||
// unique combi:
|
||||
$table->unique(['webhook_id', 'webhook_response_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'webhook_webhook_response', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
@@ -111,25 +103,21 @@ return new class extends Migration {
|
||||
// webhook_webhook_delivery
|
||||
if (!Schema::hasTable('webhook_webhook_delivery')) {
|
||||
try {
|
||||
Schema::create(
|
||||
'webhook_webhook_delivery',
|
||||
static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->bigInteger('webhook_delivery_id', false, true);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
$table->foreign('webhook_delivery_id','link_to_delivery')->references('id')->on('webhook_deliveries')->onDelete('cascade');
|
||||
Schema::create('webhook_webhook_delivery', static function (Blueprint $table): void {
|
||||
$table->increments('id');
|
||||
$table->integer('webhook_id', false, true);
|
||||
$table->bigInteger('webhook_delivery_id', false, true);
|
||||
$table->foreign('webhook_id')->references('id')->on('webhooks')->onDelete('cascade');
|
||||
$table->foreign('webhook_delivery_id', 'link_to_delivery')->references('id')->on('webhook_deliveries')->onDelete('cascade');
|
||||
|
||||
// unique combi:
|
||||
$table->unique(['webhook_id', 'webhook_delivery_id']);
|
||||
}
|
||||
);
|
||||
// unique combi:
|
||||
$table->unique(['webhook_id', 'webhook_delivery_id']);
|
||||
});
|
||||
} catch (QueryException $e) {
|
||||
app('log')->error(sprintf(self::TABLE_ERROR, 'webhook_webhook_delivery', $e->getMessage()));
|
||||
app('log')->error(self::TABLE_ALREADY_EXISTS);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,8 +4,7 @@ use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
return new class extends Migration
|
||||
{
|
||||
return new class extends Migration {
|
||||
/**
|
||||
* Run the migrations.
|
||||
*/
|
||||
|
||||
32
database/migrations/2026_01_28_201901_migrations_01_2026.php
Normal file
32
database/migrations/2026_01_28_201901_migrations_01_2026.php
Normal file
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
/**
|
||||
* Fixes #11620
|
||||
*/
|
||||
return new class extends Migration {
|
||||
public function up(): void
|
||||
{
|
||||
Schema::table('transactions', static function (Blueprint $blueprint): void {
|
||||
$blueprint->index(['transaction_journal_id', 'amount'], 'idx_tx_journal_amount');
|
||||
});
|
||||
|
||||
Schema::table('tag_transaction_journal', static function (Blueprint $blueprint): void {
|
||||
$blueprint->index(['transaction_journal_id', 'tag_id'], 'idx_ttj_journal_tag');
|
||||
});
|
||||
Schema::table('transaction_journals', static function (Blueprint $blueprint): void {
|
||||
$blueprint->index(['deleted_at'], 'idx_tj_deleted');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*/
|
||||
public function down(): void
|
||||
{
|
||||
//
|
||||
}
|
||||
};
|
||||
@@ -86,6 +86,7 @@ class TransactionCurrencySeeder extends Seeder
|
||||
$currencies[] = ['code' => 'KZT', 'name' => 'Kazakhstani tenge', 'symbol' => '₸', 'decimal_places' => 2];
|
||||
$currencies[] = ['code' => 'SAR', 'name' => 'Saudi Riyal', 'symbol' => 'SAR', 'decimal_places' => 2];
|
||||
$currencies[] = ['code' => 'RSD', 'name' => 'Serbian Dinar', 'symbol' => 'RSD', 'decimal_places' => 2];
|
||||
$currencies[] = ['code' => 'TWD', 'name' => 'New Taiwan Dollar', 'symbol' => 'NT$', 'decimal_places' => 0];
|
||||
|
||||
foreach ($currencies as $currency) {
|
||||
if (null === TransactionCurrency::where('code', $currency['code'])->first()) {
|
||||
|
||||
@@ -4,7 +4,7 @@ php-version = "8.4.0"
|
||||
|
||||
[source]
|
||||
workspace = "."
|
||||
paths = ["app/", "database/factories/", "database/seeders/", "tests/", "resources/lang/en_US"]
|
||||
paths = ["app/", "database/factories/", "database/migrations/", "database/seeders/", "tests/", "resources/lang/en_US"]
|
||||
includes = ["vendor"]
|
||||
excludes = []
|
||||
|
||||
|
||||
12
package-lock.json
generated
12
package-lock.json
generated
@@ -3232,9 +3232,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/node": {
|
||||
"version": "25.0.10",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.10.tgz",
|
||||
"integrity": "sha512-zWW5KPngR/yvakJgGOmZ5vTBemDoSqF3AcV/LrO5u5wTWyEAVVh+IT39G4gtyAkh3CtTZs8aX/yRM82OfzHJRg==",
|
||||
"version": "25.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz",
|
||||
"integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
@@ -4131,9 +4131,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/baseline-browser-mapping": {
|
||||
"version": "2.9.18",
|
||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.18.tgz",
|
||||
"integrity": "sha512-e23vBV1ZLfjb9apvfPk4rHVu2ry6RIr2Wfs+O324okSidrX7pTAnEJPCh/O5BtRlr7QtZI7ktOP3vsqr7Z5XoA==",
|
||||
"version": "2.9.19",
|
||||
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz",
|
||||
"integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"bin": {
|
||||
|
||||
Reference in New Issue
Block a user