Compare commits

...

987 Commits

Author SHA1 Message Date
dependabot[bot]
0b092fb0b6 Bump async from 2.6.2 to 2.6.4
Bumps [async](https://github.com/caolan/async) from 2.6.2 to 2.6.4.
- [Release notes](https://github.com/caolan/async/releases)
- [Changelog](https://github.com/caolan/async/blob/v2.6.4/CHANGELOG.md)
- [Commits](https://github.com/caolan/async/compare/v2.6.2...v2.6.4)

---
updated-dependencies:
- dependency-name: async
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-18 12:06:30 +00:00
3c94239da7 offset stuff 2021-08-02 02:24:39 -05:00
7e6c8224a5 offset stuff 2021-08-02 02:24:10 -05:00
8bc1289206 offset stuff 2021-08-02 02:23:47 -05:00
75390f10cd offset stuff 2021-08-02 02:21:41 -05:00
7468e63299 offset stuff 2021-08-02 02:19:36 -05:00
4c88de77a7 offset stuff 2021-08-02 02:17:45 -05:00
c7502b853c offset stuff 2021-08-02 02:14:23 -05:00
249ab13004 offset stuff 2021-08-02 02:13:59 -05:00
fce67286fd offset stuff 2021-08-02 02:11:44 -05:00
f841639ec3 offset stuff 2021-08-02 02:10:43 -05:00
c270017111 offset stuff 2021-08-02 02:09:24 -05:00
0ee317b0fc offset stuff 2021-08-02 02:08:53 -05:00
f606b9cdd5 financial outlook update 2021-08-02 02:07:22 -05:00
412b4d6794 adding more cards for more graphs for financial outlook graphing 2021-08-02 01:40:20 -05:00
c045cabcf7 financial outlook display 2021-08-02 01:38:31 -05:00
f5adc203f3 financial outlook display 2021-08-02 01:37:43 -05:00
f3362bab00 financial outlook display 2021-08-02 01:37:09 -05:00
268e2fdbee updated how require permission works 2021-08-02 01:34:33 -05:00
6d38e6fc8c updated how require permission works 2021-08-02 01:31:37 -05:00
99ff081b05 updated how require permission works 2021-08-02 01:31:11 -05:00
5b88887f53 updated how require permission works 2021-08-02 01:30:22 -05:00
669f716112 finances stuff 2021-08-01 23:52:59 -05:00
addd34cb82 finances stuff 2021-08-01 23:48:07 -05:00
c77a6e7af6 invoice changes 2021-08-01 23:44:00 -05:00
28ca917d5d invoice changes 2021-08-01 23:41:57 -05:00
1196abb0a0 invoice changes 2021-08-01 23:40:27 -05:00
68560e4e35 invoice changes 2021-08-01 23:39:30 -05:00
a4eb7b9ad3 invoice changes 2021-08-01 23:38:49 -05:00
35591ab04c invoice changes 2021-08-01 23:37:52 -05:00
339b1063c6 invoice changes 2021-08-01 23:36:03 -05:00
83592117d1 invoice details 2021-08-01 23:14:29 -05:00
ff1e396fbc added sidebar menu items for new controller 2021-07-18 01:45:08 -05:00
5471ccfa17 added new routes for finance pages 2021-07-18 01:37:28 -05:00
c0aa379d37 added financial blade and controller.
need to add routes still
2021-07-18 01:12:07 -05:00
3da0cec4a1 added moon rentals into tax performance metrics 2021-07-18 00:39:02 -05:00
bca5179cc3 added blade for showing rented moons 2021-07-18 00:32:34 -05:00
c075112810 added ability to see own or corp rented moon in the miningtaxescontroller 2021-07-16 23:17:51 -05:00
57d01028cf display rented moons in the controller 2021-07-13 02:22:45 -05:00
bef633434c rental stuff date was wrong 2021-07-12 19:26:58 -05:00
6afba02675 fix structure name 2021-07-10 23:27:10 -05:00
4ac1ef0e73 fix structure name 2021-07-10 23:25:28 -05:00
0b0faf26d2 moon rental form 2021-07-10 22:05:05 -05:00
d49695e7e8 moon rental form 2021-07-10 22:00:06 -05:00
0e96905213 moon rental form 2021-07-10 21:48:36 -05:00
57d9d4b99b moon rental form 2021-07-10 21:48:28 -05:00
f77e6874d0 moon rental form 2021-07-10 21:47:05 -05:00
daa72ff60c moon rental form 2021-07-10 21:21:49 -05:00
8bd44c10b8 moon rental form 2021-07-10 21:17:51 -05:00
f4c77eee00 moon rental form 2021-07-10 20:58:52 -05:00
5b11c5b629 moon rental form 2021-07-10 20:58:39 -05:00
2e1f28c8c5 moon rental form 2021-07-10 20:50:38 -05:00
7bc2b82837 moon rental form 2021-07-10 20:47:01 -05:00
f6f73cbb94 moon rental form 2021-07-09 19:27:22 -05:00
411b005dee moon rental pages 2021-07-09 02:13:51 -05:00
aacf2fc830 moon rental pages 2021-07-09 01:36:12 -05:00
e498a2b202 moon rental pages 2021-07-09 01:31:17 -05:00
3853a81fba moon rental pages 2021-07-09 01:27:31 -05:00
7b26a021e1 moon rental pages 2021-07-09 01:20:34 -05:00
b310799bf0 moon rental pages 2021-07-09 01:06:40 -05:00
1a44be502a working on moon rental worth 2021-07-05 22:01:10 -05:00
103a41c0ff working on moon rental worth 2021-07-05 21:52:31 -05:00
9e5e3720b5 working on moon rental worth 2021-07-05 21:51:57 -05:00
baf7c2130e working on moon rental worth 2021-07-05 21:50:58 -05:00
c889960805 working on moon rental worth 2021-07-05 21:49:55 -05:00
9462aea45f working on moon rental worth 2021-07-05 21:49:23 -05:00
f26ba1d75c working on moon rental worth 2021-07-05 21:42:20 -05:00
2d575dd86b working on moon rental worth 2021-07-05 21:41:33 -05:00
5db70758cb mining op form 2021-06-27 19:41:12 +00:00
8f2036eecc structure helper 2021-06-24 21:26:42 +09:00
083422047c store operations form 2021-06-24 11:42:53 +09:00
dda65951b3 update alliance moon rental worth 2021-06-22 20:59:50 +09:00
dbd30021f9 schedule 2021-06-22 20:53:15 +09:00
c69416ee88 schedule 2021-06-22 20:50:21 +09:00
03b0c71708 fixed send mining taxes invoices 2021-06-22 20:45:54 +09:00
d4214ee4bf command for moon rental worth 2021-06-19 02:31:15 -05:00
c70999100b test command 2021-06-19 07:00:53 +00:00
eceac30f4b modified display invoices to display the whole invoice and not only part of the invoice 2021-06-17 00:25:58 +09:00
736eb6feba mining invoice mail update 2021-06-07 23:46:01 +09:00
cd0710c428 mining operations 2021-06-07 20:06:17 +09:00
bd03a983a2 mining invoices 2021-06-07 20:00:15 +09:00
4c3896cbee invoicing 2021-06-07 19:54:34 +09:00
c362de7589 mining invoices 2021-06-07 19:32:02 +09:00
c17af03ef3 mining invoices 2021-06-07 19:09:10 +09:00
2fbf72df61 job updates and command kernel updates 2021-06-07 03:32:45 +09:00
55b0002688 job updates and command kernel updates 2021-06-07 03:31:51 +09:00
2a3a86f185 job updates and command kernel updates 2021-06-07 03:30:23 +09:00
82072f18dc after action reports 2021-06-06 00:25:07 +09:00
7bfc30e50d fixed delay time on dispatching late invoices job 2021-06-04 20:04:50 +09:00
109d70363d update to some jobs to try to keep them from failing 2021-06-04 20:03:35 +09:00
0ef8dca814 mining operations 2021-06-04 00:34:04 +09:00
9685d7ee8a mining operations 2021-06-04 00:32:52 +09:00
1dd6b73632 mining operations 2021-06-04 00:29:50 +09:00
1a591b202c mining operations 2021-06-04 00:28:12 +09:00
ddda064033 mining operations 2021-06-04 00:27:47 +09:00
48b5955e16 mining operations 2021-06-04 00:26:29 +09:00
a877e28da9 mining operations 2021-06-04 00:24:58 +09:00
f0ec279ea5 mining operations 2021-06-04 00:23:42 +09:00
254931998c mining operations 2021-06-04 00:20:42 +09:00
9ad22c03a8 mining operations 2021-06-04 00:01:23 +09:00
1210c71484 mining operations 2021-06-03 23:59:20 +09:00
bd4b5e8a83 mining operations 2021-06-03 01:28:47 +09:00
3b02745302 mining operations 2021-06-03 01:27:58 +09:00
2349f1031c fixed job issue 2021-06-03 00:52:49 +09:00
8ea29296bd fixed job issue 2021-06-03 00:41:29 +09:00
68ce69ec70 fixed job issue 2021-06-03 00:39:33 +09:00
814db0307a testing new functions 2021-06-03 00:19:22 +09:00
0aaddbe9ad testing new functions 2021-06-03 00:17:58 +09:00
5fcca05d2b testing new functions 2021-06-03 00:16:39 +09:00
8f6be2c87e testing new functions 2021-06-03 00:16:15 +09:00
8749ce8848 testing new functions 2021-06-03 00:15:49 +09:00
ac0ca03845 testing new functions 2021-06-03 00:14:54 +09:00
568928c98f testing new functions 2021-06-03 00:14:10 +09:00
8fb4b979c3 testing new functions 2021-06-03 00:13:05 +09:00
23739baa7c testing new functions 2021-06-03 00:12:13 +09:00
c7ce7a9351 testing new functions 2021-06-03 00:11:42 +09:00
74f4c21244 testing new functions 2021-06-03 00:09:11 +09:00
996ff6e6aa testing new functions 2021-06-03 00:06:50 +09:00
918d9129f4 testing new functions 2021-06-02 23:59:32 +09:00
27f782f659 added a way for mining operations to be recorded.
refactored mining tax invoice jobs with a job chain and new directory structure
added views and forms for mining operations
added navbar button for mining operations
refactored how admin dashboard controller checks for permissions versus roles
2021-06-02 01:49:24 +09:00
17b1db88c1 added yields for extra content in the admin dashboard 2021-06-01 22:12:48 +09:00
27e05fdfde added yields and hasSections 2021-06-01 22:02:38 +09:00
a07151f507 moon displays 2021-06-01 00:05:32 +09:00
94c4cf760a moon displays 2021-06-01 00:04:41 +09:00
20cc7f22dc moon displays 2021-06-01 00:03:31 +09:00
49257e4cf4 moon displays 2021-06-01 00:01:03 +09:00
bc0b3336c5 moon displays 2021-05-31 23:59:32 +09:00
fadf93b425 moon displays 2021-05-31 23:56:32 +09:00
0815b43797 moon displays 2021-05-31 23:55:12 +09:00
55185bae5b moon displays 2021-05-31 23:46:54 +09:00
4030166118 moon displays 2021-05-31 23:42:20 +09:00
f179cbedd7 moon displays 2021-05-31 23:41:30 +09:00
20bb89f388 moon displays 2021-05-31 23:37:30 +09:00
e4ccf5190b moon displays 2021-05-31 23:36:18 +09:00
38b0b8f63f moon displays 2021-05-31 23:34:56 +09:00
dedbcc6c84 moon displays 2021-05-31 23:34:01 +09:00
cef0f7632d moon displays 2021-05-31 23:32:29 +09:00
7af4457c6a moon displays 2021-05-31 23:31:35 +09:00
9e851e1a10 moon displays 2021-05-31 23:29:01 +09:00
b322f9a8a6 moon displays 2021-05-31 23:27:48 +09:00
02722c3146 moon displays 2021-05-31 23:26:25 +09:00
8405913e84 moon displays 2021-05-31 23:24:53 +09:00
5d5b23b25b moon displays 2021-05-31 23:23:54 +09:00
e3e10952a6 moon displays 2021-05-31 23:21:29 +09:00
58e2dcdcc9 moon displays 2021-05-31 23:20:58 +09:00
936fca0667 moon displays 2021-05-31 23:20:00 +09:00
e777d7e816 moon displays 2021-05-31 23:17:57 +09:00
5472c99b15 modification of user invoice detail display 2021-05-31 21:30:38 +09:00
2848102b79 admin invoices for mining tax 2021-05-31 21:29:19 +09:00
d3fae0711f admin invoices for mining tax 2021-05-31 21:28:40 +09:00
0f05abc0ae admin invoices for mining tax 2021-05-31 21:26:27 +09:00
e52071f1f8 admin invoices for mining tax 2021-05-31 21:25:09 +09:00
f65b7380dc admin invoices for mining tax 2021-05-31 21:24:21 +09:00
96f84d69e2 admin invoices for mining tax 2021-05-31 21:20:36 +09:00
8f23d0a1b0 admin invoices for mining tax 2021-05-31 21:19:40 +09:00
1058cf4a9a fixed invoice id controller 2021-05-31 21:16:00 +09:00
dae26c74ee import alliance moons 2021-05-31 21:00:24 +09:00
5a35b3f6a5 import alliance moons 2021-05-31 20:59:57 +09:00
79936f7030 import alliance moons 2021-05-31 20:59:10 +09:00
734b16d8a6 import alliance moons 2021-05-31 20:55:03 +09:00
e0940ac9bc import alliance moons 2021-05-31 20:54:21 +09:00
843e3806fb import alliance moons 2021-05-31 20:47:23 +09:00
13e99bd4a9 find moon ore in importalliancemoons.php 2021-05-31 20:35:31 +09:00
bce8363a53 test stuff 2021-05-31 20:12:23 +09:00
e536c55439 test invoice 2021-05-31 19:57:08 +09:00
d474c71c88 test invoice 2021-05-31 19:51:43 +09:00
0df5bc06fe pi controller 2021-05-31 19:25:08 +09:00
d221f9a49f pi controller 2021-05-31 19:21:45 +09:00
371e4af00f pi controller 2021-05-31 19:19:25 +09:00
27508e468c pi controller 2021-05-31 19:19:17 +09:00
20af2287c4 pi controller 2021-05-31 19:18:14 +09:00
5433bee74d pi controller 2021-05-31 19:17:26 +09:00
291d7bfeaa pi controller 2021-05-31 19:14:20 +09:00
1803ea1343 pi controller 2021-05-31 19:13:17 +09:00
014cdbcf75 pi controller 2021-05-31 19:12:18 +09:00
d91622b6d3 pi controller 2021-05-31 19:10:55 +09:00
2d96396687 added token expiry check in FetchAllianceAssets 2021-05-31 18:26:05 +09:00
27b16d7595 testing invoiceAmount 2021-05-31 18:12:34 +09:00
265923aa84 testing invoiceAmount 2021-05-31 18:11:32 +09:00
e8bbcfcfad testing invoiceAmount 2021-05-31 18:11:16 +09:00
9e963d581e testing invoiceAmount 2021-05-31 18:02:44 +09:00
6843f99a1f testing invoiceAmount 2021-05-31 18:01:12 +09:00
1c0f4392b2 testing invoiceAmount 2021-05-31 17:59:47 +09:00
8d3c122d93 testing invoiceAmount 2021-05-31 17:59:09 +09:00
e57ab1a0fb testing invoiceAmount 2021-05-31 17:58:02 +09:00
a0e6fc6157 testing invoiceAmount 2021-05-31 17:56:14 +09:00
d842e7bc02 fixed issue in ledger 2021-05-31 17:28:47 +09:00
a3dfb2bbe6 changed schedule for observers and ledgers 2021-05-31 17:25:44 +09:00
932911a746 testing moon worth job 2021-05-30 23:55:50 +09:00
3f3c169555 testing moon worth job 2021-05-30 22:47:39 +09:00
6b8123d650 testing moon worth job 2021-05-30 22:47:30 +09:00
ac885c5e3f testing moon worth job 2021-05-30 22:45:12 +09:00
8c44bdac05 testing moon worth job 2021-05-30 22:44:04 +09:00
bb65968afe testing moon worth job 2021-05-30 22:43:34 +09:00
44d3ea2468 testing moon worth job 2021-05-30 22:43:01 +09:00
3f76dd78cb testing moon worth job 2021-05-30 22:42:30 +09:00
9c1d94cdc0 testing moon worth job 2021-05-30 22:42:17 +09:00
e322ceb622 testing moon worth job 2021-05-30 22:38:45 +09:00
1a24d95d31 testing moon worth job 2021-05-30 22:37:16 +09:00
2e159063b5 job updates 2021-05-30 21:59:33 +09:00
1be8be97aa job updates 2021-05-30 21:57:45 +09:00
565693d911 updated jobs with new exception handler for jobs 2021-05-30 21:54:34 +09:00
87cfcf3dd2 foreign keys 2021-05-30 21:32:56 +09:00
45b1be2b9f foreign keys 2021-05-30 21:26:58 +09:00
bb85db9c3b modifying old tables for new formats' 2021-05-30 21:11:06 +09:00
f506f9275d foreign keys 2021-05-30 21:01:56 +09:00
973a8a7ebb foreign keys 2021-05-30 20:53:51 +09:00
86534dea29 migration cleanup and new foreign keys on existing migrations 2021-05-30 20:39:02 +09:00
353d8c5183 foreign keys for alliance moon rental tables 2021-05-30 20:04:24 +09:00
3b02dfb1c7 foreign keys for alliance moon rental tables 2021-05-30 20:03:28 +09:00
f78b9eddb9 foreign keys for alliance moon rental tables 2021-05-30 20:01:38 +09:00
30ea561714 import moons 2021-05-30 19:34:00 +09:00
db557162af import moons 2021-05-30 19:26:40 +09:00
76b19c6ff5 import moons 2021-05-30 19:12:30 +09:00
df5f29566d import moons 2021-05-30 19:07:30 +09:00
82d815adbb import moons 2021-05-30 19:06:58 +09:00
d54b735986 import moons 2021-05-30 19:06:28 +09:00
fbfb43040c import moons 2021-05-30 19:05:48 +09:00
b332ac8acf import moons 2021-05-30 19:05:06 +09:00
61a6836a67 import moons 2021-05-30 19:03:55 +09:00
5a6a1a19c4 import moons 2021-05-30 19:03:09 +09:00
120bb5edc9 import moons 2021-05-30 18:57:38 +09:00
d14bbc1d22 import moons 2021-05-30 18:56:40 +09:00
10c5a8c75c import moons 2021-05-30 18:55:49 +09:00
51da1dbbc3 import moons 2021-05-30 18:54:59 +09:00
89e4110ab0 removed unwanted migrations 2021-05-30 18:45:41 +09:00
c06beae86f alliance moon ores 2021-05-30 18:42:02 +09:00
bc59b580b0 alliance moon ores 2021-05-30 18:39:01 +09:00
e1ea9fe4f4 import moons 2021-05-30 18:11:18 +09:00
5acb0aa92c import moons 2021-05-30 18:10:42 +09:00
7c2952899b import moons 2021-05-30 18:09:41 +09:00
e925c6bed9 import moons 2021-05-30 18:09:20 +09:00
a715a7c022 import moons 2021-05-30 18:08:54 +09:00
b94c39923f import moons 2021-05-30 18:01:27 +09:00
ce5bd50939 import moons 2021-05-30 17:58:03 +09:00
ecbd6e1c6d import moons 2021-05-30 17:56:58 +09:00
debe3f8025 import moons 2021-05-30 17:53:17 +09:00
b1e4edad3b import moons 2021-05-30 17:50:54 +09:00
3ad6ed8bfa upgrade to laravel 8.x 2021-05-30 08:20:41 +00:00
41b78a0599 moon rentals again 2021-05-30 16:47:25 +09:00
f3dc18b8ac moon rentals again 2021-05-30 16:42:08 +09:00
427fc40edb moon rentals again 2021-05-30 16:41:03 +09:00
90218eafe0 moon rentals again 2021-05-30 16:40:19 +09:00
751a412185 moon rentals again 2021-05-30 16:19:12 +09:00
c3becc324b modified the mining tax invoice job 2021-05-28 18:35:54 +09:00
43ad853b60 added modify invoice framework 2021-05-25 20:53:04 +09:00
955a5581a3 new mining tax invoice job 2021-05-25 02:08:05 +09:00
f1be291c1c new mining taxes invoice job 2021-05-25 02:02:27 +09:00
aeee78a888 new mining taxes invoice job 2021-05-25 02:01:42 +09:00
98db7a3ec2 testing new mining tax 2021-05-25 01:57:39 +09:00
c0d65d55d1 testing new mining tax 2021-05-25 01:55:10 +09:00
7c14c15841 testing new mining tax 2021-05-25 01:53:06 +09:00
1c46ef4161 testing new mining tax 2021-05-25 01:52:40 +09:00
39f7fbbb99 testing new mining tax 2021-05-25 01:52:05 +09:00
da95ee481d testing new mining tax 2021-05-25 01:42:48 +09:00
8153235f1f testing new mining tax 2021-05-25 01:38:58 +09:00
00f814152d testing new mining tax 2021-05-25 01:38:11 +09:00
f28fa7d0e2 testing new mining tax 2021-05-25 01:37:24 +09:00
2361f5dc1c testing new mining tax 2021-05-25 01:26:10 +09:00
e75fd81e27 testing new mining tax 2021-05-25 01:24:00 +09:00
265336ef3d testing new mining tax 2021-05-25 01:23:21 +09:00
7c9b0caded testing new mining tax 2021-05-25 01:21:59 +09:00
a59d9bf6a9 testing new mining tax 2021-05-25 01:19:54 +09:00
657b96dadf testing new mining tax 2021-05-25 01:19:17 +09:00
c8ee950fd0 testing new mining tax 2021-05-25 01:18:44 +09:00
da7f69adae testing new mining tax 2021-05-25 01:18:02 +09:00
da4457eba6 testing new mining tax 2021-05-25 01:17:17 +09:00
b149a1f492 updated with new send mining taxes invoice job in the old job space 2021-05-25 01:05:27 +09:00
ee7e149c35 updated with new send mining taxes invoice job in the old job space 2021-05-25 01:04:55 +09:00
adee63564d updated with new send mining taxes invoice job in the old job space 2021-05-25 00:58:07 +09:00
b00a1eb082 created simplified mining tax invoice 2021-05-25 00:55:20 +09:00
56e2c3fa9c created simplified mining tax invoice 2021-05-25 00:54:52 +09:00
6ea56238a8 created simplified mining tax invoice 2021-05-25 00:54:36 +09:00
678f066a97 created simplified mining tax invoice 2021-05-25 00:53:24 +09:00
20d1c5f027 created simplified mining tax invoice 2021-05-25 00:46:29 +09:00
9a797a159d created simplified mining tax invoice 2021-05-25 00:45:07 +09:00
63a06e78e1 created simplified mining tax invoice 2021-05-25 00:42:32 +09:00
96d068307f created simplified mining tax invoice 2021-05-25 00:41:44 +09:00
1f18d21069 created simplified mining tax invoice 2021-05-25 00:40:13 +09:00
cb9fdaeb63 created simplified mining tax invoice 2021-05-25 00:39:13 +09:00
b82fbd3ce3 created simplified mining tax invoice 2021-05-25 00:37:36 +09:00
a3c07b2a84 created simplified mining tax invoice 2021-05-25 00:36:46 +09:00
772f149e81 created simplified mining tax invoice 2021-05-25 00:36:01 +09:00
75a72826fd created simplified mining tax invoice 2021-05-25 00:33:02 +09:00
ec50817657 created simplified mining tax invoice 2021-05-25 00:29:59 +09:00
d9d447bf54 created simplified mining tax invoice 2021-05-25 00:29:42 +09:00
9293564235 created simplified mining tax invoice 2021-05-25 00:29:00 +09:00
211d463288 created simplified mining tax invoice 2021-05-25 00:28:05 +09:00
c3a8393c84 created simplified mining tax invoice 2021-05-25 00:27:33 +09:00
50e69755eb created simplified mining tax invoice 2021-05-25 00:26:18 +09:00
2cf1f7ff72 created simplified mining tax invoice 2021-05-25 00:22:42 +09:00
af7c7344b4 tests 2021-05-24 23:11:29 +09:00
58258a070e tests 2021-05-24 22:23:06 +09:00
75a91c93e8 tests 2021-05-24 22:20:55 +09:00
7a46e8684f tests 2021-05-24 22:20:09 +09:00
1052c6241e tests 2021-05-24 22:13:03 +09:00
0107f24de8 tests 2021-05-24 22:12:37 +09:00
fbcd7dd957 tests 2021-05-24 22:01:00 +09:00
3e8bd39737 tests 2021-05-24 22:00:36 +09:00
e61aed425c tests 2021-05-24 21:51:04 +09:00
0847e03b27 tests 2021-05-24 21:46:57 +09:00
05626aac35 tests 2021-05-24 21:43:03 +09:00
77818e9431 tests 2021-05-24 21:36:25 +09:00
abde239ff7 tests 2021-05-24 21:30:12 +09:00
872afe444f tests 2021-05-24 21:29:37 +09:00
4bd57ccd0b tests 2021-05-24 21:28:54 +09:00
2191dadf47 tests 2021-05-24 21:28:06 +09:00
b48b118032 tests 2021-05-24 21:24:17 +09:00
8d5ba9c42e test mining taxes 2021-05-24 19:53:53 +09:00
565f51e81c process mining taxes ledgers update to disregard updating previously saved ledgers to prevent future errors 2021-05-24 18:52:23 +09:00
0872d2f61a process alliance assets 2021-05-22 00:14:10 +09:00
63a54c78e2 prevented main users from being registered as alts in a strange oddity. 2021-05-21 03:41:41 +09:00
7d31892c57 updated mail queue and invoice id for mining taxes 2021-05-19 19:50:24 +09:00
33df24e1af added Jump Bridge Fuel page to General navigation section 2021-05-19 19:09:40 +09:00
fe9547f78d process assets job fix 2021-05-19 09:10:06 +09:00
e24f431893 assets job 2021-05-19 01:23:11 +09:00
11ac571abb added assets queue 2021-05-19 01:05:17 +09:00
9c9575396b queue default to construct of job 2021-05-19 00:57:22 +09:00
817ae1a452 job kernel 2021-05-19 00:52:06 +09:00
32716cc81c issue with a job 2021-05-19 00:50:36 +09:00
e949b1d717 added queue to horizon schedule in the kernel for console commands and scheduler 2021-05-19 00:46:22 +09:00
c089beae10 horizon rebalance 2021-05-19 00:08:55 +09:00
3332d6a36c horizon rebalance 2021-05-19 00:02:12 +09:00
4f1ae7fad8 memory change for horizon 2021-05-18 23:55:40 +09:00
12970c3830 horizon back to 10 jobs each process 2021-05-18 23:53:06 +09:00
6b5f51eed7 horizon back to 10 jobs each process 2021-05-18 23:50:14 +09:00
88f46d8dec assets 2021-05-18 22:52:23 +09:00
5abbe10cf9 assets 2021-05-18 22:50:26 +09:00
ba92152daa updated composer 2021-05-18 13:47:03 +00:00
e248cd036c setting retries and timeouts for jobs' 2021-05-18 22:08:04 +09:00
f5531ac121 queue 2021-05-18 21:41:13 +09:00
13c4f5ea3a redis 2021-05-18 21:30:17 +09:00
cd96aa8377 redis 2021-05-18 21:20:08 +09:00
13f3e8e8f9 decode date in updating structures 2021-05-18 20:59:22 +09:00
8c580827b4 removed command helper junk 2021-05-18 20:48:12 +09:00
0093b8d841 horizon 2021-05-18 20:37:31 +09:00
2071021cdd FetchAllianceAssets 2021-05-18 20:18:20 +09:00
34cf203c01 migration 2021-05-18 20:06:40 +09:00
9aa8c53b23 job stuff 2021-05-18 19:56:47 +09:00
5973a5deda job stuff 2021-05-18 19:54:39 +09:00
3237e80fb4 assets and structures 2021-05-18 19:52:02 +09:00
da97d9b85c process alliance structures 2021-05-18 18:44:12 +09:00
562093f22c new stuff 2021-05-18 18:40:01 +09:00
65314bad77 more commands for artisan 2021-05-18 18:37:07 +09:00
31fbeee1cf database migrations 2021-05-18 18:35:06 +09:00
5085ef140b database migrations 2021-05-18 18:33:23 +09:00
1c4406a6eb fetchminingtaxesobservers 2021-05-18 18:28:36 +09:00
d815c15176 fetchminingtaxesobservers 2021-05-18 18:23:52 +09:00
a3a3cc1b7c fetchminingtaxesobservers 2021-05-18 18:23:37 +09:00
f266d781ac fetchminingtaxesobservers 2021-05-18 18:21:28 +09:00
f0962b0779 fetchminingtaxesobservers 2021-05-18 18:16:55 +09:00
d9cbd4ef93 fetchminingtaxesobservers 2021-05-18 18:09:42 +09:00
6c90f9f642 fetchminingtaxesobservers 2021-05-18 18:08:46 +09:00
c341d21bbe lookup helper removed from fetch mining taxes observers 2021-05-18 18:02:24 +09:00
91ebc9972c observer name fixed maybe in fetchminingtaxobservers 2021-05-18 06:26:27 +09:00
3fe6be6a57 observer name fixed maybe in fetchminingtaxobservers 2021-05-18 06:25:47 +09:00
de0071734b added backend functions for jump bridge fuel display with the new way we are doing jobs 2021-05-17 06:08:05 +09:00
a0c0186337 jump bridge rework 2021-05-15 07:12:56 +09:00
f3c317b505 invoice update 2021-05-13 04:58:15 +09:00
09d0d57630 invoice update 2021-05-13 04:58:05 +09:00
b44ebfc0b6 invoice update 2021-05-13 04:55:06 +09:00
3d054535db invoice update 2021-05-13 04:49:25 +09:00
c5b8c50923 invoice update 2021-05-13 04:47:44 +09:00
de60682f40 invoice update 2021-05-13 04:46:58 +09:00
3d5b224e20 invoice update 2021-05-13 04:36:38 +09:00
d447f6f34d send mining taxes invoice 2021-05-12 09:51:43 +09:00
44e969d24b minimum 1 job in horizon queue 2021-05-12 01:48:27 +09:00
ec933737cf send mail for mining taxes 2021-05-12 01:41:31 +09:00
97109cfd08 send mail for mining taxes 2021-05-12 01:37:40 +09:00
96507b7d7e config mining tax added to send mining taxes invoice command where necessary 2021-05-12 01:36:05 +09:00
9c5f9e3844 setup min and max processes for horizon 2021-05-12 01:13:16 +09:00
cee7f07d76 update to queues to have less queues 2021-05-12 01:05:48 +09:00
87951b5ca6 update horizon 2021-05-12 00:52:23 +09:00
6a3c69393e mining taxes update 2021-05-12 00:38:00 +09:00
b75d554cd7 update queue stuff 2021-05-12 00:29:45 +09:00
fb029dd813 invoice id number 2021-05-10 02:59:49 +09:00
bb5df086de mining tax stuff 2021-05-09 03:57:01 +09:00
a83131ba5e update alliance wallet journal page fix 2021-04-29 01:25:13 +09:00
655b1a3a94 updated job 2021-04-27 02:58:59 +09:00
976e220859 updated send mining taxes invoices 2021-04-27 02:33:17 +09:00
ae4436d3f1 added tagging to jobs 2021-04-27 00:49:49 +09:00
fdbc7ddf1b changed queue for new functionality to correct queue 2021-04-24 02:06:11 +09:00
266aa3387c alliance update wallet journal 2021-04-24 02:03:54 +09:00
adbf3297c4 modified update wallet journal job to dispatch multiple jobs 2021-04-24 02:03:01 +09:00
9aae7e44ec modified update wallet journal job to dispatch multiple jobs 2021-04-24 02:01:23 +09:00
d3d27cf251 modified update wallet journal job to dispatch multiple jobs 2021-04-24 01:59:46 +09:00
229aa84426 modified update wallet journal job to dispatch multiple jobs 2021-04-24 01:56:04 +09:00
19447c6a11 added new job for updating alliance wallet journal
created new functions in finance helper
2021-04-24 01:41:41 +09:00
bd86e1ab05 miningt axes payemnts command 2021-04-24 01:31:45 +09:00
6f97f0927c miningt axes payemnts command 2021-04-24 01:31:05 +09:00
21d1a566f3 miningt axes payemnts command 2021-04-24 01:28:53 +09:00
ec73828eea miningt axes payemnts command 2021-04-24 01:27:56 +09:00
d62b4b3790 process mining payments 2021-04-24 01:01:48 +09:00
c77b7e3821 mining tax invoices 2021-04-20 18:17:28 +09:00
9cce52b8ba payments namespaces 2021-04-19 20:38:59 +09:00
5f2ba4133d jobs 2021-04-19 19:50:50 +09:00
4539056ec5 ledgers job prefetch 2021-04-19 19:49:42 +09:00
19b837a993 jobs 2021-04-19 19:44:47 +09:00
87891ac059 jobs 2021-04-19 19:43:22 +09:00
e92c9d304d namespace 2021-04-19 19:41:19 +09:00
26c484d30c commands 2021-04-19 19:39:48 +09:00
e21fcd784c commands 2021-04-19 19:37:10 +09:00
75544ef6bb file name error 2021-04-19 19:33:03 +09:00
a084072f98 file name error 2021-04-19 19:32:22 +09:00
70fea18829 file name error 2021-04-19 19:16:29 +09:00
0b65005f9d added commands for jobs 2021-04-19 18:53:32 +09:00
54b25480e2 added missing libraries 2021-04-19 18:13:53 +09:00
86783a0b56 jobs 2021-04-13 01:23:31 +09:00
8a2efb21a0 changed schedule for late invoices to 1, and 15th of the month 2021-04-13 01:20:03 +09:00
cab5a4b2ed mining taxes invoices 2021-04-13 01:16:49 +09:00
9bd0f3a296 new way to do mining tax invoices 2021-04-12 20:06:34 +09:00
febe377eec roles selection 2021-04-11 06:39:27 +09:00
a497a8bb16 roles selection 2021-04-11 06:38:49 +09:00
b667348f5d roles selection 2021-04-11 06:36:58 +09:00
e67e90c96c roles selection 2021-04-11 06:35:09 +09:00
aff5831350 roles selection 2021-04-11 06:33:11 +09:00
dcf214b324 resources updates 2021-04-11 06:23:34 +09:00
701b449517 resources updates 2021-04-11 06:22:19 +09:00
c1782cacfe kernel update 2021-04-11 06:15:44 +09:00
b0aa5e3fec modified searched user blade 2021-04-11 06:02:31 +09:00
f06675dd2b added stuff for late invoices.
updated all jobs to not include the wording Job in the file.
2021-04-07 01:44:31 +09:00
bd8872a785 unpaid search 2021-04-02 21:01:18 +09:00
fbf48ef906 unpaid searches 2021-04-02 20:59:39 +09:00
51f7d3990f routes edits 2021-04-02 20:13:39 +09:00
cd99acb61b search unpaid 2021-04-02 20:07:23 +09:00
1884ada219 unpaid search attempt 2021-04-02 18:53:58 +09:00
3991ce3e9a updated paid payments from the wallet journal 2021-04-01 20:43:29 +09:00
eb8c84b0c5 added date due to unpaid invoices on admin page 2021-04-01 20:22:42 +09:00
c8f85b0ccd journal entries 2021-04-01 18:49:38 +09:00
a1e1ae261a journal entries 2021-04-01 18:32:48 +09:00
f9b4e9a898 moved links on unpaid invoices page 2021-03-30 21:20:21 +09:00
2fd7a805eb moved links on unpaid invoices page 2021-03-30 21:19:52 +09:00
1a443a4ab8 inspire removed from scheduled tasks 2021-03-30 21:11:30 +09:00
c5b8957253 schedule stuff 2021-03-30 20:48:24 +09:00
4b554f97ae schedule stuff 2021-03-30 20:47:48 +09:00
38176274ff connection stuff 2021-03-30 20:44:29 +09:00
3c1278db82 schedule monitor 2021-03-30 20:39:30 +09:00
0e4f9b91e5 schedule monitor 2021-03-30 20:38:28 +09:00
7a658b7bfa schedule monitor config 2021-03-30 11:36:30 +00:00
4667b31dd8 psr-4 2021-03-30 20:35:47 +09:00
39b0a8c372 schedule monitor 2021-03-30 11:31:10 +00:00
40ed5dd5a5 artisan jobs schedule 2021-03-30 19:54:26 +09:00
e6022ded9c modified schedule 2021-03-30 18:08:48 +09:00
6ad975e199 updating kernel for commands 2021-03-30 01:46:02 +09:00
59cda8d129 redis db updates 2021-03-30 01:38:46 +09:00
311aec7847 redis db updates 2021-03-30 01:37:56 +09:00
2d7e1ec7bf redis updates 2021-03-30 01:36:11 +09:00
ecd7b08b27 removed ->connection from jobs 2021-03-30 01:15:19 +09:00
e2b94eea77 vendor publish 2021-03-29 16:03:34 +00:00
04e7a78575 vendor publish 2021-03-29 16:02:41 +00:00
e232e03ef7 redis stuff 2021-03-30 00:38:32 +09:00
7f718555ac changed redis client default to phpredis rather than predis 2021-03-30 00:35:06 +09:00
b74c513271 updated redis default database 2021-03-30 00:32:30 +09:00
794f358353 updated schedule for mining tax invoices
updated process send eve mail job
updated horizon configuration
2021-03-30 00:30:17 +09:00
49aab1b97a removed some overlapping stuff from console command schedule 2021-03-29 01:28:10 +09:00
374181c82c updated config for esi.php to include new environmental variables 2021-03-26 23:18:13 +09:00
6b0f805adc added scopes for sending mails more efficiently on base login and account registration. 2021-03-26 23:14:38 +09:00
4730bea74c modified mail job 2021-03-26 23:08:57 +09:00
49b9093f1b mail update 2021-03-25 00:59:51 +09:00
906fabe23f mail update 2021-03-25 00:00:23 +09:00
d65adb904d test data 2021-03-24 22:31:11 +09:00
5f91bcb221 test data 2021-03-24 22:27:34 +09:00
b37767f30d test data 2021-03-24 22:24:46 +09:00
6613c985cd test data 2021-03-24 22:22:16 +09:00
60d511d3c1 test data 2021-03-24 22:21:53 +09:00
f12e298298 test data 2021-03-24 22:20:17 +09:00
0772488a50 new invoice testing 2021-03-24 22:04:45 +09:00
2ff1897f60 want to use the same data set for new stuff to work on. 2021-03-24 22:00:40 +09:00
bd0170e094 modified .env 2021-03-24 18:49:51 +09:00
8609b55797 modified connection name in middleware for process eve mails RL 2021-03-24 18:16:04 +09:00
31d4267d9f modified connection name in middleware for process eve mails RL 2021-03-24 18:15:44 +09:00
c176c32668 modified new mining taxes invoices to only send mail to myself 2021-03-23 19:56:49 +09:00
d3a9f33769 made a command to deal with late invoices 2021-03-23 00:22:37 +09:00
89ffa516c5 new mining tax invoices command work 2021-03-23 00:21:35 +09:00
82aa1f88b4 removed connection from mail 2021-03-22 19:35:22 +09:00
c51b1a72a9 string length in invoices 2021-03-22 19:33:49 +09:00
fa7889d7d5 testing 2021-03-22 00:43:36 +09:00
3271200312 testing 2021-03-22 00:43:05 +09:00
33719f8456 testing 2021-03-22 00:41:35 +09:00
92ea143a92 testing 2021-03-22 00:41:04 +09:00
8178af420a testing 2021-03-22 00:40:36 +09:00
c964fd1485 process ledgers 2021-03-22 00:31:06 +09:00
039fa1d44e esi update for observers 2021-03-21 22:33:32 +09:00
78c05aadd3 esi update for observers 2021-03-21 22:30:55 +09:00
6fd6db2d1d esi update for observers 2021-03-21 22:30:33 +09:00
b7600757a0 esi update for observers 2021-03-21 22:29:21 +09:00
1527201bdb esi update for observers 2021-03-21 22:28:08 +09:00
cf7848b966 esi update for observers 2021-03-21 22:27:26 +09:00
ea855611e3 esi update for observers 2021-03-21 22:26:51 +09:00
9b1140b8f9 esi update for observers 2021-03-21 22:25:58 +09:00
4298a1f53e esi update for observers 2021-03-21 22:25:29 +09:00
3623fd636b esi update for observers 2021-03-21 22:24:28 +09:00
482b65e026 esi update for observers 2021-03-21 21:56:07 +09:00
ff6fed66ef esi update for observers 2021-03-21 21:55:21 +09:00
40de3073f6 esi update for observers 2021-03-21 21:54:29 +09:00
69892f4a6e esi update for observers 2021-03-21 21:52:40 +09:00
5a68c84430 esi update for observers 2021-03-21 21:41:18 +09:00
24a76fb092 esi update for observers 2021-03-21 21:40:45 +09:00
2cd41593a5 esi update for observers 2021-03-21 21:40:25 +09:00
a2a9b31a25 esi update for observers 2021-03-21 21:39:23 +09:00
45b2269920 esi update for observers 2021-03-21 21:38:18 +09:00
4c99703290 esi update for observers 2021-03-21 21:37:29 +09:00
e39bcab748 esi update for observers 2021-03-21 21:36:43 +09:00
c2d06472e3 observer update and invoices creation 2021-03-21 21:33:34 +09:00
12cd0c7d74 personal ledgers 2021-03-21 02:34:41 +09:00
0a22ba67c5 ledger stuff for users 2021-03-21 01:25:56 +09:00
223a457f93 ledger stuff for users 2021-03-21 01:25:20 +09:00
9c773bc635 ledger stuff for users 2021-03-21 01:24:08 +09:00
d0529330e5 ledger stuff for users 2021-03-21 01:23:30 +09:00
c7bc18c9aa ledger stuff for users 2021-03-21 01:22:41 +09:00
0694940507 ledger stuff for users 2021-03-21 01:11:46 +09:00
c6b5f01c55 ledger stuff for users 2021-03-21 01:09:40 +09:00
0a0d6bc998 ledger stuff for users 2021-03-21 01:08:23 +09:00
c3df293ddf ledger stuff for users 2021-03-21 01:06:58 +09:00
71071d61ce ledger stuff for users 2021-03-21 01:06:14 +09:00
356cee060a ledger stuff for users 2021-03-21 01:04:58 +09:00
f662bb7cb2 ledger stuff for users 2021-03-21 01:03:57 +09:00
431ef40793 ledger stuff for users 2021-03-21 01:03:14 +09:00
690203d818 ledger stuff for users 2021-03-21 01:00:08 +09:00
6372a89d30 users page updated 2021-03-21 00:33:28 +09:00
ddae475a6c users page updated 2021-03-21 00:32:57 +09:00
ac617e8795 users page updated 2021-03-21 00:32:27 +09:00
fc1efa8d61 users page updated 2021-03-21 00:31:07 +09:00
c7fbb2ae0e users page updated 2021-03-21 00:29:52 +09:00
abc34b315a users page updated 2021-03-20 23:36:53 +09:00
e2289f1727 users page updated 2021-03-20 18:22:25 +09:00
1a61f7939b users page updated 2021-03-20 18:21:54 +09:00
aa7e170aaf row counts for mining tax invoices 2021-03-20 18:02:25 +09:00
da619f261e update to user's profile page 2021-03-19 21:43:31 +09:00
ded58ea79a namespace 2021-03-19 21:41:51 +09:00
2da297facd namespace 2021-03-19 21:39:45 +09:00
a253bb1aaf namespace 2021-03-19 21:38:05 +09:00
dcfbfe4801 namespace 2021-03-19 21:37:30 +09:00
cf6c601bcf namespace 2021-03-19 21:36:13 +09:00
3e24f71987 namespace 2021-03-19 21:35:45 +09:00
b68bcfec03 namespace 2021-03-19 21:34:59 +09:00
dd64010236 after action reports 2021-03-19 21:31:14 +09:00
d7d98b5195 taxes page 2021-03-18 23:02:21 +09:00
9798f8296b taxes page 2021-03-18 22:55:35 +09:00
68aafab377 taxes page 2021-03-18 22:54:05 +09:00
e4115b64ff taxes page 2021-03-18 22:51:10 +09:00
3be42738d7 payment testing 2021-03-18 21:02:23 +09:00
da08630a1f payment testing 2021-03-18 21:01:56 +09:00
001ff9e4e3 payment testing 2021-03-18 20:57:25 +09:00
a69e09efeb payment testing 2021-03-18 20:56:35 +09:00
0a4090650d payment testing 2021-03-18 20:56:12 +09:00
671da7e617 payment testing 2021-03-18 20:55:35 +09:00
3f8bcfd588 mining tax payments 2021-03-18 20:51:17 +09:00
f036aa61f7 namespace change 2021-03-18 20:47:42 +09:00
d926a0fd98 namespace change 2021-03-18 20:46:49 +09:00
21c73270fe namespace change 2021-03-18 20:46:18 +09:00
97e4eb46eb number formatting 2021-03-18 20:43:52 +09:00
ad36ee9441 added total unpaid amount to unpaid admin mining tax report 2021-03-18 20:43:00 +09:00
c6557bab38 change of invoice blade 2021-03-18 20:37:47 +09:00
30cd115050 invoices for characters 2021-03-18 20:06:40 +09:00
3dc10f41c8 invoices for characters 2021-03-18 20:05:22 +09:00
466a1750bd tweaked some jobs 2021-03-18 19:31:26 +09:00
7aee591a2c cleanup stale data in mining tax observers 2021-03-18 18:29:27 +09:00
8ee98c06c2 updated mail things 2021-03-18 18:28:13 +09:00
b91925a3f6 added retries back to mail functionality 2021-03-18 18:25:26 +09:00
c27a9c3f85 invoice stuff 2021-03-18 00:15:10 +09:00
ec9a2a2ce0 invoice stuff 2021-03-18 00:14:18 +09:00
42ba7f3036 invoice stuff 2021-03-18 00:12:10 +09:00
db11b6255b invoice stuff 2021-03-18 00:11:40 +09:00
ce99ad9cf9 invoice stuff 2021-03-18 00:08:40 +09:00
36ae8f27bb invoice stuff 2021-03-18 00:08:14 +09:00
3fcceb0649 invoice stuff 2021-03-18 00:07:40 +09:00
d607f403ec correct the invoice mail 2021-03-18 00:04:32 +09:00
4005b0f90c invoice amount for admin controller 2021-03-17 23:45:20 +09:00
87bbc1a8e4 modified catch request to release mail processing job back to the queue to be tried again. 2021-03-17 22:25:00 +09:00
79c3e3382a increased approved cost for mails 2021-03-17 22:23:34 +09:00
2e178c8b16 added reprocessing rate to process mining taxes ledgers job 2021-03-17 22:20:49 +09:00
62e159c1f2 process send eve mail job 2021-03-17 18:40:11 +09:00
2e57663f7c removed observers job from firing currently 2021-03-17 18:20:46 +09:00
403cbfb6bb added some stuff for mail releases 2021-03-16 01:42:54 +09:00
466751c13f data test 2021-03-16 01:35:23 +09:00
2d6e6e4537 data test 2021-03-16 01:33:58 +09:00
7231d54fa2 test data 2021-03-16 01:02:11 +09:00
61224e5611 updated process send eve mail job
updated test command to work on resposne codes
2021-03-16 01:00:02 +09:00
85d39b867b mining taxes invoice 2021-03-15 23:39:50 +09:00
8f30c3a42d process mining taxes ledgers job 2021-03-15 21:57:42 +09:00
011e53054d process mining taxes ledgers job 2021-03-15 21:42:13 +09:00
2972b9a301 process mining taxes ledgers job 2021-03-15 21:01:46 +09:00
e9c78c7e77 process mining taxes ledgers job 2021-03-15 21:00:46 +09:00
341117dfe9 fetch mining taxes ledger job cleanup 2021-03-15 20:56:28 +09:00
3efa2138c5 job issue'
git push
2021-03-15 20:51:47 +09:00
a5c6ad343b added job 2021-03-15 20:49:45 +09:00
f282ade0b3 modified git ignore 2021-03-15 20:48:04 +09:00
252deff4c2 commands 2021-03-15 20:47:25 +09:00
f7312a97b0 command helper 2021-03-15 20:45:19 +09:00
ade9da5be7 item price update issue 2021-03-15 20:44:27 +09:00
0c5b9aeb19 fixed invoice 2021-03-15 19:57:23 +09:00
f306ee161c fixed mining invoices 2021-03-15 19:46:25 +09:00
0ee3699b44 added jobs back in for the fetching and processing the mining ledgers
those jobs were taking extremely long times to complete, and jobs are better suited for them.
2021-03-15 19:38:06 +09:00
4c281934ff added some time functions into the mining ledger fetcher 2021-03-15 18:44:44 +09:00
507f4f8a73 added some time functions into the mining ledger fetcher 2021-03-15 18:43:18 +09:00
a158bad0bf fixed spelling mistake in routes 2021-03-15 18:28:11 +09:00
a3e9bf9aab tax helper correction 2021-03-15 00:58:34 +09:00
b23d7195c5 after action reports 2021-03-15 00:52:39 +09:00
0af6824866 updated taxes helper functions for the new model 2021-03-14 22:18:34 +09:00
d66fa052fb found error in contract checker 2021-03-14 07:22:19 +09:00
adadd7994e added to the after action report controller 2021-03-12 00:28:12 +09:00
aae582344e added after action report models 2021-03-10 23:30:28 +09:00
4db6dac439 added primary keys to all models 2021-03-10 23:29:30 +09:00
91bde37441 redirectTo when not logged in. 2021-03-10 22:48:41 +09:00
044450e448 redirectTo when not logged in. 2021-03-10 22:47:35 +09:00
56ebd398ab redirectTo when not logged in. 2021-03-10 22:46:56 +09:00
6d5eb98614 redirectTo when not logged in. 2021-03-10 22:46:26 +09:00
434179ba18 redirectTo when not logged in. 2021-03-10 22:45:54 +09:00
9e4b8deb78 redirectTo when not logged in. 2021-03-10 22:43:10 +09:00
4688af0cb4 redirectTo when not logged in. 2021-03-10 22:40:05 +09:00
d44edffa1b redirectTo when not logged in. 2021-03-10 22:36:31 +09:00
ceb7ed4949 modified git ignore 2021-03-10 22:30:04 +09:00
4b94ed2a51 modified kernel for commands 2021-03-10 22:24:55 +09:00
9feba2916a modified redirect when not logged in 2021-03-10 22:21:57 +09:00
4f15afb3ce enabled invoices and payment checking for mining taxes 2021-03-10 21:52:39 +09:00
eb54b7ba0a enabled invoices and payment checking for mining taxes 2021-03-10 21:48:48 +09:00
5895f34c39 trying to add sorting to extraction stuff 2021-03-08 22:33:26 +09:00
ad6cfcb41f trying to add sorting to extraction stuff 2021-03-08 22:32:09 +09:00
a95c052ba0 trying to add sorting to extraction stuff 2021-03-08 22:31:45 +09:00
cc5bcbb97d trying to add sorting to extraction stuff 2021-03-08 22:25:42 +09:00
94a30377f5 consolidated upcoming extractions with the mining calendar 2021-03-08 22:03:45 +09:00
46da349088 consolidated upcoming extractions with the mining calendar 2021-03-08 22:02:07 +09:00
667c7bfd49 consolidated upcoming extractions with the mining calendar 2021-03-08 22:00:34 +09:00
ebedcc903e consolidated upcoming extractions with the mining calendar 2021-03-08 21:59:19 +09:00
425e430f8b consolidated upcoming extractions with the mining calendar 2021-03-08 21:58:36 +09:00
8809c49c46 consolidated upcoming extractions with the mining calendar 2021-03-08 21:57:57 +09:00
c68b419964 consolidated upcoming extractions with the mining calendar 2021-03-08 21:56:46 +09:00
2483ca525b consolidated upcoming extractions with the mining calendar 2021-03-08 21:53:54 +09:00
7cccd77c8a added extraction calendar to dashboard 2021-03-08 21:50:58 +09:00
1ccdfdac79 added extraction calendar to main dashboard 2021-03-08 21:50:26 +09:00
fd899b1849 added extraction calendar to main dashboard 2021-03-08 21:46:31 +09:00
c37d9fb949 changed color gradient for calendar chart 2021-03-08 21:41:05 +09:00
85368ee09a modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:40:23 +09:00
2d9a3ce448 modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:39:56 +09:00
30d3a329dc modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:39:31 +09:00
8cff027f67 modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:37:50 +09:00
c42f166eb1 modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:37:19 +09:00
b8bd954b02 modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:36:33 +09:00
8945431457 modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:35:50 +09:00
d799aad4f8 modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:34:08 +09:00
18b14f48bd modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:33:30 +09:00
856bab0a92 modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:32:43 +09:00
90c0accf58 modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:30:54 +09:00
5a640c3595 modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:18:32 +09:00
41a1abc9cb modifed blade for unpaid invoices on admin dashboard 2021-03-08 21:16:42 +09:00
48dd5b81e3 modifed blade for unpaid invoices on admin dashboard 2021-03-08 20:57:25 +09:00
6aa16464f8 modifed blade for unpaid invoices on admin dashboard 2021-03-08 20:56:40 +09:00
a3558fe4ef modifed blade for unpaid invoices on admin dashboard 2021-03-08 20:55:14 +09:00
1d08027c11 modifed blade for unpaid invoices on admin dashboard 2021-03-08 19:02:59 +09:00
9f7397feea modifed blade for unpaid invoices on admin dashboard 2021-03-08 18:47:19 +09:00
d2126bff48 modifed blade for unpaid invoices on admin dashboard 2021-03-08 18:46:45 +09:00
acb66d4a66 added requests and some old commands 2021-03-08 18:43:21 +09:00
8d658aef1f fixed include in paidinvoices.blade.php 2021-03-08 18:28:04 +09:00
62b2cc1003 modified the navbar options for mining taxes on the user side to give unique icons. 2021-03-08 18:15:21 +09:00
f642c759e2 modified the navbar options for mining taxes on the user side to give unique icons. 2021-03-08 18:12:29 +09:00
350fd07efd mining taxes 2021-03-07 22:23:49 +09:00
1fbb438afa mining taxes 2021-03-07 22:23:17 +09:00
b58e9e2820 mining taxes 2021-03-07 22:22:47 +09:00
28ef697b42 mining taxes 2021-03-07 22:20:40 +09:00
7dd625edb9 mining taxes 2021-03-07 22:19:03 +09:00
fdb06996e5 mining taxes 2021-03-07 22:16:18 +09:00
36a33e86ff mining taxes 2021-03-07 22:15:43 +09:00
0c59a6527e mining tax testing 2021-03-07 22:14:42 +09:00
a1c6c4fd25 mining tax testing 2021-03-07 22:14:04 +09:00
67c8d6161a mining tax testing 2021-03-07 22:12:10 +09:00
1e55be001a mining tax testing 2021-03-07 22:11:34 +09:00
7d3bd6d5f2 mining tax testing 2021-03-07 22:11:24 +09:00
aa25ce4be3 mining tax testing 2021-03-07 22:08:46 +09:00
23111d727a mining tax testing 2021-03-07 22:03:53 +09:00
4862deac95 mining tax testing 2021-03-07 21:58:54 +09:00
e185fd7b56 mining tax testing 2021-03-07 21:58:24 +09:00
4855ac34f4 mining tax testing 2021-03-07 21:53:11 +09:00
fcf823663f mining tax testing 2021-03-07 21:41:00 +09:00
27148dae22 mining tax testing 2021-03-07 21:40:17 +09:00
1e40d8e0c9 mining tax testing 2021-03-07 21:39:28 +09:00
4c513b7625 mining tax testing 2021-03-07 21:01:53 +09:00
01f0a49bb4 mining tax testing 2021-03-07 21:00:54 +09:00
1b949fca39 mining tax testing 2021-03-07 20:58:47 +09:00
79de6a93fa mining tax testing 2021-03-07 20:57:38 +09:00
3a18237502 mining tax testing 2021-03-07 20:47:35 +09:00
8371c49e3d mining tax testing 2021-03-07 20:46:25 +09:00
e4a88303bb mining tax testing 2021-03-07 20:45:06 +09:00
c1595845f9 mining tax testing 2021-03-07 20:44:26 +09:00
0b15850c15 mining tax testing 2021-03-07 20:43:40 +09:00
75bfc0daf2 mining tax testing 2021-03-07 20:42:40 +09:00
0f6b965066 mining tax testing 2021-03-07 20:42:08 +09:00
68d04b338a mining tax testing 2021-03-07 20:41:38 +09:00
674d026e51 mining tax testing 2021-03-07 20:33:28 +09:00
137522fd02 mining tax testing 2021-03-07 20:32:53 +09:00
186c79c8d3 mining tax testing 2021-03-07 20:32:12 +09:00
e2939629d5 mining tax testing 2021-03-07 20:31:21 +09:00
25d0b8ae98 mining tax testing 2021-03-07 20:30:18 +09:00
1156107243 mining tax testing 2021-03-07 20:28:56 +09:00
460e7db116 mining taxes testing 2021-03-07 20:22:42 +09:00
b746853520 mining taxes testing 2021-03-07 20:20:10 +09:00
cd474b7e7f mining taxes testing 2021-03-07 20:18:22 +09:00
918107acab mining taxes testing 2021-03-07 20:17:31 +09:00
6dff921d5f mining taxes testing 2021-03-07 20:16:31 +09:00
9f1de2300e mining taxes testing 2021-03-07 20:15:39 +09:00
6d178b1b90 navbar issue 2021-03-07 20:14:57 +09:00
78234a9243 navbar issue 2021-03-07 20:12:44 +09:00
ea60c5561d navbar issue 2021-03-07 19:30:29 +09:00
860863c8d5 navbar issue 2021-03-07 19:29:41 +09:00
0fb6bea722 navbar fix 2021-03-07 19:26:02 +09:00
693c66cf12 updated menu bar blades 2021-03-07 07:05:41 +09:00
59868bb63a mining taxes 2021-03-07 06:20:19 +09:00
e23c97f455 added web routes for mining taxes 2021-03-07 03:35:03 +09:00
a590dc43bb created mining taxes payment command 2021-03-07 03:29:32 +09:00
5c062ebe50 views for mining taxes. next up is routes in the next update 2021-03-06 19:10:59 +09:00
3bd1b2053b mining taxes invoices 2021-02-26 01:05:12 +09:00
d050563fb9 mining taxes invoices 2021-02-26 01:00:33 +09:00
468eba7d2a mining taxes invoices 2021-02-26 01:00:19 +09:00
8ebfc9fc34 mining taxes invoices 2021-02-26 00:59:34 +09:00
77896aae9a mining taxes invoices 2021-02-26 00:58:46 +09:00
e12bfb75e9 mining taxes invoices 2021-02-26 00:58:17 +09:00
22307c120f mining taxes invoices 2021-02-26 00:57:48 +09:00
12b754a752 mining taxes invoices 2021-02-26 00:56:41 +09:00
716a71d680 mining taxes invoices 2021-02-26 00:55:21 +09:00
d98ef78771 mining taxes invoices 2021-02-26 00:52:17 +09:00
e76e7a6298 mining taxes invoices 2021-02-26 00:51:47 +09:00
225e6f74ec mining taxes invoices 2021-02-26 00:49:00 +09:00
17bd69bf7c mining taxes invoices 2021-02-26 00:48:03 +09:00
6d55eeae45 mining taxes invoices 2021-02-26 00:44:37 +09:00
523e345350 mining taxes invoices 2021-02-26 00:44:17 +09:00
ca9612d830 mining taxes invoices 2021-02-25 23:54:19 +09:00
9bfaab8ffc mining taxes invoices 2021-02-25 23:50:09 +09:00
c5cd63114d mining taxes invoices 2021-02-25 23:32:38 +09:00
e3f1e140e0 mining taxes invoices 2021-02-25 23:00:35 +09:00
84d38d3803 mining taxes invoices 2021-02-25 23:00:07 +09:00
2718b575a4 mining taxes invoices 2021-02-25 22:54:37 +09:00
1451e97f31 mining taxes invoices 2021-02-25 22:54:12 +09:00
d031305111 mining taxes invoices 2021-02-25 22:47:25 +09:00
f270cf3134 mining taxes invoices 2021-02-25 22:46:49 +09:00
16bca41d5d mining taxes invoices 2021-02-25 22:44:36 +09:00
5df56e7f4f mining taxes invoices 2021-02-25 22:44:14 +09:00
bd068037cd mining taxes invoices 2021-02-25 22:42:02 +09:00
e794ef7a05 mining taxes invoices 2021-02-25 22:38:58 +09:00
a98c1e764f mining taxes invoices 2021-02-25 21:57:53 +09:00
b4ab55fc89 mining taxes invoices 2021-02-25 21:56:34 +09:00
fdf6c6a54f mining taxes invoices 2021-02-25 21:52:35 +09:00
2d0241c8ad mining taxes invoices 2021-02-25 21:51:16 +09:00
b6853e8f3b mining taxes invoices 2021-02-25 21:49:42 +09:00
14a37e869c mining taxes invoices 2021-02-25 21:39:56 +09:00
9fc70ba03f ledger job 2021-02-23 00:41:23 +09:00
b092522d3a ledger job 2021-02-23 00:38:59 +09:00
d4b5ed3319 ledger job 2021-02-23 00:36:13 +09:00
9cdf9cebfd ledger job 2021-02-23 00:34:41 +09:00
b538a7216c ledger job 2021-02-23 00:33:49 +09:00
7be778ec01 ledger job 2021-02-23 00:31:28 +09:00
dedd050920 ledger job 2021-02-23 00:30:03 +09:00
0b03b4ee4a ledger job 2021-02-23 00:28:45 +09:00
b75a7809de ledger job 2021-02-23 00:27:52 +09:00
fc07e8d968 ledger job 2021-02-22 23:07:14 +09:00
e3c9459017 ledger job 2021-02-22 23:06:45 +09:00
cb3a6b26e9 ledger job 2021-02-22 23:05:17 +09:00
f10196abb7 ledger job 2021-02-22 23:02:08 +09:00
1743ffc14f ledger job 2021-02-22 23:01:22 +09:00
fc7dde27c4 ledger job 2021-02-22 22:56:47 +09:00
7ebc49607d ledger job 2021-02-22 22:55:50 +09:00
f62f6239c0 ledger job 2021-02-22 22:54:22 +09:00
fa9d89ebe9 ledger job 2021-02-22 22:53:08 +09:00
af06c943c7 ledger job 2021-02-22 22:52:40 +09:00
41b64ac646 ledger job 2021-02-22 22:52:09 +09:00
8e72c71071 ledger job 2021-02-22 22:49:57 +09:00
01bff58169 ledger job 2021-02-22 22:48:59 +09:00
23873033bf ledger job 2021-02-22 22:37:59 +09:00
fcb0dbc7a0 ledger job 2021-02-22 22:37:29 +09:00
896f6896e7 ledger job 2021-02-22 21:55:15 +09:00
e7c8b71ea4 ledger job 2021-02-22 21:32:25 +09:00
ed529b49df ledger job 2021-02-22 21:26:32 +09:00
1a0e956d00 ledger job 2021-02-22 21:25:41 +09:00
6bfa5873a8 ledger job 2021-02-22 21:22:23 +09:00
ff879833be mining taxes ledgers 2021-02-22 20:42:33 +09:00
525dddf52b mining taxes ledgers 2021-02-22 20:39:17 +09:00
71a567e923 fetch mining taxes ledgers job 2021-02-22 20:27:40 +09:00
f179c7e671 fetch mining taxes ledgers job 2021-02-22 19:52:59 +09:00
40a4ce6fcc fetch mining taxes ledgers job 2021-02-22 19:48:59 +09:00
c95f6835ca fetch mining taxes ledgers job 2021-02-22 19:47:57 +09:00
27a9715aa4 mining tax stuff 2021-02-22 19:29:26 +09:00
1717b464af mining tax stuff 2021-02-22 19:28:20 +09:00
7103791378 mining tax stuff 2021-02-22 19:20:56 +09:00
bb1cb4a6fc mining tax stuff 2021-02-22 19:19:47 +09:00
65bd6022ac mining tax stuff 2021-02-22 19:19:22 +09:00
7be3bfeebc mining tax stuff 2021-02-22 19:18:20 +09:00
a1e43596c2 added relationships for mining taxes 2021-02-22 19:16:23 +09:00
02db5ce9a1 added relationships for mining taxes 2021-02-22 19:09:11 +09:00
e14f9c0764 mining tax observers 2021-02-16 19:44:41 +09:00
5aafbc9ce0 mining tax observers 2021-02-16 19:30:57 +09:00
aa384fc171 mining tax observers 2021-02-16 19:30:46 +09:00
93d9b2bf98 mining tax observers 2021-02-16 19:30:08 +09:00
4cb79433c1 mining tax observers 2021-02-16 19:15:05 +09:00
3725c40d03 mining tax observers 2021-02-16 19:05:02 +09:00
a4b665f525 mining tax observers 2021-02-16 18:46:55 +09:00
5bbfaf1515 mining tax observers 2021-02-16 18:23:36 +09:00
7aaf2afc5a mining tax observers 2021-02-16 18:20:33 +09:00
8b827fe05b codebase 2021-02-16 06:10:56 +09:00
d3db43de8b codebase 2021-02-16 06:10:01 +09:00
8f64a98e2d codebase 2021-02-16 06:03:33 +09:00
f21d0dbf65 codebase 2021-02-16 05:53:51 +09:00
96c4b03481 codebase 2021-02-16 05:46:18 +09:00
3d04e3e62a codebase 2021-02-16 05:43:22 +09:00
51bb819409 admin dashboard simplification for later 2021-02-15 19:41:53 +09:00
ecb33befdd admin dashboard simplification for later 2021-02-15 19:41:09 +09:00
5844dc5b93 navbar modification for the top navbar 2021-02-15 19:39:10 +09:00
d71e05303d configuration changes 2021-02-15 19:37:05 +09:00
908197ae07 configuration changes 2021-02-15 19:35:42 +09:00
0aade82862 migration 2021-02-15 19:24:13 +09:00
fef8533ae0 migration 2021-02-15 19:22:56 +09:00
376c9f9b91 migration 2021-02-15 19:18:50 +09:00
92e7084cec migration 2021-02-15 19:17:44 +09:00
7e932123d3 migration 2021-02-15 19:16:55 +09:00
5e002d47a5 migration 2021-02-15 19:16:08 +09:00
f8a02c0933 migration 2021-02-15 19:14:13 +09:00
b94e39b53c migration 2021-02-15 19:12:02 +09:00
eaa56c31b6 migration 2021-02-15 19:10:33 +09:00
4a117c6390 migration 2021-02-15 19:09:54 +09:00
05db82f3cb migration 2021-02-15 19:08:43 +09:00
99d5ef9220 . 2021-02-15 19:03:11 +09:00
8a4615b5a8 . 2021-02-15 19:02:40 +09:00
fd20fb8725 test data 2021-02-15 19:01:51 +09:00
d521a0e593 alliance wallet journal 2021-02-15 19:00:38 +09:00
bb90a2ccc2 migration issue 2021-02-15 18:58:58 +09:00
f447bd6666 wallet entries 2021-02-15 18:53:04 +09:00
f66604ba6a wallet entries 2021-02-15 18:52:35 +09:00
ae37aa5856 cleaned up code base thoroughly 2021-02-15 17:58:12 +09:00
4955a1a66a cleaned up code base thoroughly 2021-02-15 17:25:30 +09:00
0da231827e cleaned up code base thoroughly 2021-02-15 17:23:23 +09:00
5bd545efbe cleaned up code base thoroughly 2021-02-15 17:22:43 +09:00
653c80cb87 cleaned up code base thoroughly 2021-02-15 17:21:46 +09:00
bea3cdd1a4 cleaned up code base thoroughly 2021-02-15 17:18:12 +09:00
21aa932bd4 .env issues 2021-02-14 15:20:05 +00:00
0b43349fac .env changes 2021-02-15 00:18:50 +09:00
337cf04334 socialite provider manager 2021-02-15 00:10:29 +09:00
612f0925bf socialite providers 2021-02-14 15:06:09 +00:00
4b72a59e62 invoices for mining taxes 2021-02-14 20:03:21 +09:00
8af676c32a mining taxes commands started 2021-02-14 07:14:22 +09:00
5cf8667c47 modified unused tables 2021-02-14 06:49:04 +09:00
9dd0bbc536 esi stuff 2021-02-14 01:57:27 +09:00
63c7a04998 esi stuff 2021-02-14 01:33:27 +09:00
2026ea2c00 job stuff 2021-02-14 01:01:21 +09:00
917641e469 job stuff 2021-02-14 00:49:36 +09:00
925b9739da job stuff 2021-02-14 00:46:15 +09:00
4da6e98c49 test data 2021-02-14 00:11:50 +09:00
b621e60316 test data 2021-02-14 00:07:29 +09:00
c35645df42 test data 2021-02-14 00:04:20 +09:00
f922289c03 test data 2021-02-13 17:20:51 +09:00
2ab5f7d7bd test data 2021-02-13 17:20:18 +09:00
d4cf2afd1b test data 2021-02-13 17:19:47 +09:00
86bd6cdd3b test data 2021-02-13 17:19:20 +09:00
52af89800e test data 2021-02-13 17:18:15 +09:00
830c360664 test data 2021-02-13 17:17:32 +09:00
3231c4c1aa test data 2021-02-13 17:17:14 +09:00
d1aadb1f2d token refreshment 2021-02-13 17:01:41 +09:00
3c831b6b16 token refreshment 2021-02-13 17:00:23 +09:00
a3d22ab179 token refreshment 2021-02-13 16:58:54 +09:00
5bb8853714 token refreshment 2021-02-13 16:58:11 +09:00
8e42f49d8f token refreshment 2021-02-13 16:57:36 +09:00
a550240f08 refreshing access token functionality 2021-02-13 16:55:25 +09:00
32a19cb9d6 token refreshment 2021-02-13 16:45:17 +09:00
b27dd18951 guzzle 2021-02-13 03:52:22 +09:00
2a25fcf1b3 guzzle 2021-02-13 03:40:43 +09:00
28fbf15706 guzzle 2021-02-13 03:37:45 +09:00
2a5870ce9b guzzle 2021-02-13 03:35:49 +09:00
d5eb1a1bb9 guzzle 2021-02-13 03:35:21 +09:00
9688e80a6b guzzle 2021-02-13 03:34:47 +09:00
2212d34dd1 guzzle 2021-02-13 03:34:05 +09:00
4eaab96848 guzzle 2021-02-13 03:31:37 +09:00
15988c5588 guzzle 2021-02-13 03:29:52 +09:00
81978d524f guzzle 2021-02-13 03:28:59 +09:00
4f5c0e9c81 guzzle 2021-02-13 03:28:30 +09:00
7a63f1370f guzzle 2021-02-13 03:27:59 +09:00
d54bb575ba guzzle 2021-02-13 03:27:18 +09:00
2110cbff32 guzzle 2021-02-13 03:25:31 +09:00
67af1f5b50 guzzle 2021-02-13 03:14:32 +09:00
078d32cc31 guzzle 2021-02-13 03:01:20 +09:00
6fcf9eba4a guzzle 2021-02-13 02:45:29 +09:00
6d7864751f guzzle 2021-02-13 02:44:57 +09:00
153588738d tried adding new thing to get new access token 2021-02-13 02:42:37 +09:00
e951285456 esi authentication with refresh token 2021-02-13 01:49:02 +09:00
344974362c socialite update for tokens 2021-02-12 22:26:42 +09:00
b74e28388a socialite update for tokens 2021-02-12 22:21:55 +09:00
509b0efdcd socialite update 2021-02-12 21:03:26 +09:00
7901708be7 socialite updates 2021-02-12 20:37:10 +09:00
9f7a3500dc socialite 2021-02-12 19:40:13 +09:00
2bd74359ba socialite 2021-02-12 19:21:48 +09:00
84bac3431b socialite 2021-02-12 19:16:06 +09:00
84259f2bf7 socialite 2021-02-12 19:08:51 +09:00
23b3858a89 socialite 2021-02-12 19:04:21 +09:00
9c9f6c61fe socialite 2021-02-12 19:02:46 +09:00
e8cf2810a0 socialite 2021-02-12 19:01:16 +09:00
5be7ef76bd socialite 2021-02-12 18:59:28 +09:00
8aa3d6177e socialite 2021-02-12 18:43:57 +09:00
e7f564054c socialite 2021-02-12 18:41:04 +09:00
6a6151bff8 socialite 2021-02-12 18:25:02 +09:00
0ce7d24f69 socialite 2021-02-12 18:20:57 +09:00
6e7ec0564f socialite 2021-02-12 18:07:39 +09:00
5de85508a3 socialite 2021-02-12 18:06:22 +09:00
7d7ae6ffa9 socialite 2021-02-12 18:03:48 +09:00
cfea3f4b90 socialite 2021-02-12 18:02:14 +09:00
17c31d9968 socialite 2021-02-12 18:01:14 +09:00
3de8c8b47d socialite 2021-02-12 18:00:42 +09:00
078067b6a7 socialite 2021-02-12 17:57:04 +09:00
8453b0c846 socialite 2021-02-12 16:53:04 +09:00
5a65b67245 socialite 2021-02-12 16:27:02 +09:00
6d75548144 socialite 2021-02-12 16:18:59 +09:00
cb6da0c090 socialite 2021-02-12 16:17:52 +09:00
f6c93028cc socialite 2021-02-12 16:13:42 +09:00
3d301f58c2 socialite 2021-02-12 16:09:06 +09:00
492a049797 socialite 2021-02-12 16:06:26 +09:00
3c776bc01e socialite 2021-02-12 16:05:47 +09:00
5cf77c6b18 socialite 2021-02-12 15:56:57 +09:00
e16569b26b socialite 2021-02-12 15:54:20 +09:00
d976d191cb socialite 2021-02-12 15:51:17 +09:00
6e623b5793 socialite stuff 2021-02-12 15:45:53 +09:00
a818452857 cleaned up models which are no longer utilized 2021-02-12 14:35:57 +09:00
dd5c1f4c2d updated EveOnlineOAuthProvider 2021-02-12 14:26:32 +09:00
338bd52f28 updated create new user function to update the access token in the correct table 2021-02-12 14:15:50 +09:00
97e80c0456 cleaned up some duplicate .env variables 2021-02-12 14:04:29 +09:00
f1dca60e54 cleaned up old code from Commands 2021-02-12 14:00:07 +09:00
ab8d501cb8 cleaned up moons controllers 2021-02-12 13:56:56 +09:00
849b60841d modified moons admin controller 2021-02-12 13:55:23 +09:00
1cbd2e7c87 purged wiki module 2021-02-12 13:52:14 +09:00
17239b3a35 removed unnecessary modules from views and routes 2021-02-12 13:48:57 +09:00
e88728125e login controller update 2021-02-12 05:49:33 +09:00
f8426666ee added new composer libraries 2021-02-11 20:21:58 +00:00
0a11a5d23d jwt token stuff 2021-02-12 05:20:00 +09:00
cf1876e43f oauth v2 token 2021-02-12 04:56:52 +09:00
ac5ccadc55 v2 oauth token 2021-02-12 04:39:28 +09:00
75cc0b2355 map user object testing 2021-02-12 04:34:05 +09:00
d8a198809e eve online oauth provider v2 updates 2021-02-12 04:26:04 +09:00
a4b5ba0594 modified dashboard controller 2021-02-12 04:13:02 +09:00
18fe063ef8 modified dashboard controller 2021-02-12 04:11:26 +09:00
a26db2652c adjusted migration 2021-02-12 04:07:39 +09:00
ab1730cfa3 fixed migration 2021-02-12 04:02:18 +09:00
8dbe424ad4 v2 oauth token 2021-02-12 03:54:58 +09:00
bb4736187f finance helper changes 2021-02-12 03:42:11 +09:00
62f661efa5 mining taxes stuff 2021-02-12 03:41:23 +09:00
8178327828 framework for mining taxes admin controller 2021-02-11 12:58:37 +09:00
19730208a6 mining taxes view controller start 2021-02-11 12:41:58 +09:00
90fcabc59b starting to work on the display pages 2021-02-09 21:18:01 +09:00
eabbf5ce58 added controller layouts for display pages 2021-02-07 04:27:51 +09:00
8ab88d29f3 added rate limiting to the eve mail job 2021-02-07 02:32:18 +09:00
0bb5f4cabf modified some psr-4 items 2021-02-07 02:23:08 +09:00
e8649811f2 added spatie/laravel-rate-limited-job-middleware to composer 2021-02-06 17:22:09 +00:00
df510b8680 updated psr-4 stuff 2021-02-07 02:21:10 +09:00
3ff24118a5 created mining taxes invoice job 2021-02-07 01:55:47 +09:00
d4954bc7bf CalculateMiningTaxesJob 2021-02-04 23:34:53 +09:00
416f4abd03 updated some mining ledger functions, and removed duplicate functionality 2021-01-24 21:15:46 +09:00
314dd1c931 warp bucks migration outline 2021-01-22 06:44:06 +09:00
0e6ee620cc wrote fetch mining taxes observers job 2021-01-18 01:04:17 +09:00
997e6a9cde updated several jobs. removed the task for starting and stoppinig jobs. just seems to be unnecessary data 2021-01-17 22:52:35 +09:00
23b78d709f laid out the foundation for the mining tax framework 2021-01-11 01:47:12 +09:00
46f95aa6f2 added jobs for new module, and removed old jobs no longer in use 2021-01-11 01:41:51 +09:00
672d555c78 removed the flex structure stuff from menus and programming 2021-01-11 01:35:07 +09:00
ebbfd1a327 modified kernel middleware to remove code that hasn't been used in ages. 2021-01-11 01:27:24 +09:00
8ac0157cc6 login route 2021-01-11 01:21:57 +09:00
c55a5a1ba4 no comment 2021-01-11 01:20:20 +09:00
ee8ab5c2f3 no comment 2021-01-11 01:16:57 +09:00
451119c743 table cleanup again 2021-01-11 01:12:20 +09:00
20a0aecee1 moons update command added back in as it was accidentally deleted 2021-01-11 01:07:27 +09:00
cc3ebc8af8 moved a command to its new home in the code layout 2021-01-11 00:59:01 +09:00
b6efe4e54c removed bonds stuff for now 2021-01-11 00:56:32 +09:00
b598189626 removed bonds 2021-01-11 00:53:37 +09:00
70b3162964 re-arranged the console kernel 2021-01-11 00:37:39 +09:00
66dbdef629 cleaned up GetStructuresCommand 2021-01-10 23:58:42 +09:00
c00324a03c trying to update broken route 2021-01-10 23:04:41 +09:00
2e8f2923ef changed cleanup data from services: to data: 2021-01-09 19:10:42 +09:00
3a33fa7faa cleanup 2021-01-09 19:06:44 +09:00
38823b96ce removed tracker.php file as it was removed a long time ago. 2021-01-09 18:52:43 +09:00
9efb326b5f cleanup 2021-01-09 18:46:18 +09:00
f327b14fca adding bonds 2021-01-02 20:53:49 +09:00
6d88c9b703 chart for admin dashboard 2020-12-26 20:57:36 +09:00
a5532120e9 income to alliance dashboard 2020-12-26 20:45:11 +09:00
34422925f1 income to alliance dashboard 2020-12-26 20:43:38 +09:00
70b24695f5 income to alliance dashboard 2020-12-26 20:41:46 +09:00
af05210a48 income to alliance dashboard 2020-12-26 20:40:23 +09:00
cfa01428ee income to alliance dashboard 2020-12-26 20:39:37 +09:00
d84326742f income to alliance dashboard 2020-12-26 20:36:51 +09:00
722311eb89 composer update and finished psr-4 stuff 2020-12-25 11:52:17 +00:00
f11360e5e8 psr-4 2020-12-25 20:50:09 +09:00
07b724ec55 psr-4 stuff 2020-12-25 20:48:55 +09:00
5ef8fe188b psr-4 2020-12-25 20:44:25 +09:00
fda7c64c3a psr-4 2020-12-25 20:42:36 +09:00
b7e265088a modified some stuff for psr-4 2020-12-25 20:40:01 +09:00
017f72b42e added predis and eseye back in. 2020-12-25 11:28:41 +00:00
0ddd298350 upgrade to laravel 7 and set branch to v2 2020-12-25 11:22:15 +00:00
6289 changed files with 272467 additions and 218559 deletions

22
.env
View File

@@ -2,7 +2,7 @@ APP_NAME='W4RP Services'
APP_ENV=local
APP_KEY=base64:PBOxrGFJAtwj9SDF4F0DZ1J+6MjrJmRiPZJQwRdy3XQ=
APP_DEBUG=true
APP_URL=http://localhost
APP_URL=https://services.w4rp.space
LOG_CHANNEL=daily
@@ -11,13 +11,15 @@ DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=w4rpservices2
DB_USERNAME=minerva
DB_PASSWORD=strtmage
DB_PASSWORD=FuckingShit12
BROADCAST_DRIVER=log
CACHE_DRIVER=file
CACHE_DRIVER=redis
CACHE_PREFIX=w4rpservices_cache
QUEUE_DRIVER=redis
QUEUE_CONNECTION=sync
QUEUE_CONNECTION=redis
QUEUE_PREFIX=w4rpservices_queue
SESSION_DRIVER=file
SESSION_LIFETIME=120
@@ -25,6 +27,8 @@ SESSION_LIFETIME=120
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_DATABASE=0
REDIS_CACHE_DB=1
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
@@ -33,13 +37,11 @@ MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
ESI_CLIENT_ID=e5848fea3618427a8ee0dccb6a04fc62
ESI_SECRET_KEY=TdnNGRM8RTNSifZdaIc9yHTTkYPgYEEXHRIbT6oY
ESI_CLIENT_ID=91a051aea72742068b51801042397c38
ESI_SECRET_KEY=1co6qRMoXyx1dG2iBbAZ1z6NUOoaJWyQnqEnsqoj
ESI_USERAGENT='W4RP Services'
ESI_CALLBACK_URI='http://services.w4rp.space/callback'
ESI_CALLBACK_URI=https://services.w4rp.space/callback/
ESI_PRIMARY_CHAR=93738489
ESI_ALLIANCE=99004116
EVEONLINE_CLIENT_ID=e5848fea3618427a8ee0dccb6a04fc62
EVEONLINE_CLIENT_SECRET=TdnNGRM8RTNSifZdaIc9yHTTkYPgYEEXHRIbT6oY
EVEONLINE_REDIRECT='https://services.w4rp.space/callback'
HORIZON_PREFIX=w4rpservices_horizon

4
.gitignore vendored
View File

@@ -5,5 +5,7 @@
/public/logs/*
worker.log
/public/cache/*
/.env
.env
.vscode
/storage/logs
worker.log

View File

@@ -1,96 +0,0 @@
<?php
namespace App\Console\Commands\Assets;
use Illuminate\Console\Command;
use DB;
use Log;
//Job
use App\Jobs\ProcessAssetsJob;
//Library
use App\Library\Esi\Esi;
use Commands\Library\CommandHelper;
use App\Library\Assets\AssetHelper;
use Seat\Eseye\Exceptions\RequestFailedException;
class GetAssetsCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'services:GetAssets';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Gets all of the assets of the holding corporation.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$assets = null;
$pages = 0;
//Create the command helper container
$task = new CommandHelper('GetAssets');
//Add the entry into the jobs table saying the job is starting
$task->SetStartStatus();
//Setup the esi authentication container
$config = config('esi');
//Declare some variables
$charId = $config['primary'];
$corpId = 98287666;
//ESI Scope Check
$esiHelper = new Esi();
$assetScope = $esiHelper->HaveEsiScope($config['primary'], 'esi-assets.read_corporation_assets.v1');
if($assetScope == false) {
Log::critical("Scope check for esi-assets.read_corporation_assets.v1 failed.");
return null;
}
//Get the refresh token from the database
$token = $esiHelper->GetRefreshToken($charId);
//Create the authentication container
$esi = $esiHelper->SetupEsiAuthentication($token);
try {
$assets = $esi->page(1)
->invoke('get', '/corporations/{corporation_id}/assets/', [
'corporation_id' => $corpId,
]);
} catch (RequestFailedException $e) {
Log::critical("Failed to get asset list.");
return null;
}
$pages = $assets->pages;
for($i = 1; $i <= $pages; $i++) {
ProcessAssetsJob::dispatch($charId, $corpId, $i)->onQueue('assets');
}
}
}

View File

@@ -1,89 +0,0 @@
<?php
namespace App\Console\Commands\Corps;
//Internal Library
use Illuminate\Console\Command;
use Commands\Library\CommandHelper;
//Models
use App\Models\Corporation\AllianceCorp;
use App\Models\ScheduledTask\ScheduleJob;
//Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
class GetCorpsCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'services:GetCorps';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Get corporations in alliance and store in db.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//Create the command helper container
$task = new CommandHelper('CorpJournal');
//Add the entry into the jobs table saying the job is starting
$task->SetStartStatus();
//Declare some variables
$esiHelper = new Esi;
$esi = $esiHelper->SetupEsiAuthentication();
//try the esi call to get all of the corporations in the alliance
try {
$corporations = $esi->invoke('get', '/alliances/{alliance_id}/corporations/', [
'alliance_id' => 99004116,
]);
} catch(RequestFailedException $e){
dd($e->getEsiResponse());
}
//Delete all of the entries in the AllianceCorps table
AllianceCorp::truncate();
//Foreach corporation, make entries into the database.
foreach($corporations as $corp) {
try {
$corpInfo = $esi->invoke('get', '/corporations/{corporation_id}/', [
'corporation_id' => $corp,
]);
} catch(RequestFailedException $e) {
return $e->getEsiResponse();
}
$entry = new AllianceCorp;
$entry->corporation_id = $corp;
$entry->name = $corpInfo->name;
$entry->save();
}
//Mark the job as finished
$task->SetStopStatus();
}
}

View File

@@ -7,9 +7,6 @@ use Illuminate\Console\Command;
use Carbon\Carbon;
use Log;
//Library
use Commands\Library\CommandHelper;
//Models
use App\Models\Lookups\AllianceLookup;
use App\Models\Lookups\CharacterLookup;
@@ -31,7 +28,7 @@ class CleanStaleDataCommand extends Command
*
* @var string
*/
protected $signature = 'services:CleanData';
protected $signature = 'data:CleanData';
/**
* The console command description.
@@ -57,9 +54,6 @@ class CleanStaleDataCommand extends Command
*/
public function handle()
{
$command = new CommandHelper;
$command->CleanJobStatusTable();
//Empty the item lookup table
ItemLookup::truncate();

View File

@@ -5,13 +5,10 @@ namespace App\Console\Commands\Data;
//Internal Library
use Illuminate\Console\Command;
//Library
use Commands\Library\CommandHelper;
//Models
use App\Models\Structure\Structure;
use App\Models\Structure\Service;
use App\Models\Stock\Asset;
use App\Models\Structure\Asset;
class EmptyJumpBridges extends Command
{
@@ -20,7 +17,7 @@ class EmptyJumpBridges extends Command
*
* @var string
*/
protected $signature = 'services:EmptyJumpBridges';
protected $signature = 'data:EmptyJumpBridges';
/**
* The console command description.
@@ -46,16 +43,8 @@ class EmptyJumpBridges extends Command
*/
public function handle()
{
$task = new CommandHelper('EmptyJumpBridges');
//Add entry into the table saying the job is starting
$task->SetStartStatus();
Structure::truncate();
Service::truncate();
Asset::truncate();
//Mark the job as finished
$task->SetStopStatus();
}
}

View File

@@ -0,0 +1,80 @@
<?php
namespace App\Console\Commands\Data;
//Internal Library
use Illuminate\Console\Command;
//Models
use App\Models\Corporation\AllianceCorp;
use App\Models\ScheduledTask\ScheduleJob;
//Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
class GetCorpsCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'data:GetCorps';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Get corporations in alliance and store in db.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//Declare some variables
$esiHelper = new Esi;
$esi = $esiHelper->SetupEsiAuthentication();
//try the esi call to get all of the corporations in the alliance
try {
$corporations = $esi->invoke('get', '/alliances/{alliance_id}/corporations/', [
'alliance_id' => 99004116,
]);
} catch(RequestFailedException $e){
dd($e->getEsiResponse());
}
//Delete all of the entries in the AllianceCorps table
AllianceCorp::truncate();
//Foreach corporation, make entries into the database.
foreach($corporations as $corp) {
try {
$corpInfo = $esi->invoke('get', '/corporations/{corporation_id}/', [
'corporation_id' => $corp,
]);
} catch(RequestFailedException $e) {
return $e->getEsiResponse();
}
$entry = new AllianceCorp;
$entry->corporation_id = $corp;
$entry->name = $corpInfo->name;
$entry->save();
}
}
}

View File

@@ -4,11 +4,6 @@ namespace App\Console\Commands\Data;
//Internal Library
use Illuminate\Console\Command;
use Carbon\Carbon;
use Log;
//Library
use Commands\Library\CommandHelper;
//Jobs
use App\Jobs\Commands\Moons\PurgeMoonLedgerJob;
@@ -46,11 +41,6 @@ class PurgeCorpMoonLedgers extends Command
*/
public function handle()
{
$task = new CommandHelper('PurgeCorpLedgers');
$task->SetStartStatus();
PurgeMoonLedgerJob::dispatch();
$task->SetStopStatus();
}
}

View File

@@ -0,0 +1,192 @@
<?php
namespace App\Console\Commands\Data;
//Internal Library
use Illuminate\Console\Command;
use Log;
//Libraries
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
//Models
use App\Models\User\User;
use App\Models\User\UserAlt;
use App\Models\Esi\EsiScope;
use App\Models\Esi\EsiToken;
use App\Models\User\UserPermission;
use App\Models\User\UserRole;
use App\Models\Admin\AllowedLogin;
/**
* The PurgeUsers command takes care of updating any user changes in terms of login role, as well as purging any users without at least
* the 'User' role. This command heavily relies on ESI being available. If no ESI is available, then the function does nothing, in order to prevent
* unwanted changes.
*/
class PurgeUsers extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'data:PurgeUsers';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Update and purge users from the database.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//Declare some variables
$esiHelper = new Esi;
//Setup the esi variable
$esi = $esiHelper->SetupEsiAuthentication();
//Get all of the users from the database
$users = User::all();
//Get the allowed logins
$legacy = AllowedLogin::where(['login_type' => 'Legacy'])->pluck('entity_id')->toArray();
$renter = AllowedLogin::where(['login_type' => 'Renter'])->pluck('entity_id')->toArray();
//Cycle through all of the users, and either update their role, or delete them.
foreach($users as $user) {
//Set the fail bit to false for the next user to check
$failed = false;
//Note a screen entry for when doing cli stuff
printf("Processing character with id of " . $user->character_id . "\r\n");
//Get the character information
try {
$character_info = $esi->invoke('get', '/characters/{character_id}/', [
'character_id' => $user->character_id,
]);
$corp_info = $esi->invoke('get', '/corporations/{corporation_id}/', [
'corporation_id' => $character_info->corporation_id,
]);
} catch(RequestFailedException $e) {
Log::warning('Failed to get character information in purge user command for user ' . $user->character_id);
$failed = true;
}
//If the fail bit is still false, then continue
if($failed === false) {
//Get the user's role
$role = UserRole::where(['character_id' => $user->character_id])->first();
//We don't want to modify Admin and SuperUsers. Admins and SuperUsers are removed via a different process.
if($role->role != 'Admin') {
//Check if the user is allowed to login
if(isset($corp_info->alliance_id)) {
//Warped Intentions is allowed to login
if($corp_info->alliance_id == '99004116') {
//If the alliance is Warped Intentions, then modify the role if we need to
if($role->role != 'User') {
//Upate the role of the user
UserRole::where([
'character_id' => $user->character_id,
])->update([
'role' => 'User',
]);
//Update the user type
User::where([
'character_id' => $user->character_id,
])->update([
'user_type' => 'W4RP',
]);
}
} else if(in_array($corp_info->alliance_id, $legacy)) { //Legacy Users
if($role->role != 'User') {
//Update the role of the user
UserRole::where([
'character_id' => $user->character_id,
])->update([
'role' => 'User',
]);
//Update the user type
User::where([
'character_id' => $user->character_id,
])->update([
'user_type' => 'Legacy',
]);
}
} else if(in_array($corp_info->alliance_id, $renter)) { //Renter Users
if($role->role != 'Renter') {
//Update the role of the user
UserRole::where([
'character_id' => $user->character_id,
])->update([
'role' => 'Renter',
]);
//Update the user type
User::where([
'character_id' => $user->character_id,
])->update([
'user_type' => 'Renter',
]);
}
} else {
//If the user is part of no valid login group, then delete the user.
//Delete all of the permissions first
UserPermission::where([
'character_id' => $user->character_id,
])->delete();
//Delete the user's role
UserRole::where([
'character_id' => $user->character_id,
])->delete();
//Delete any alts the user might have registered.
$altCount = UserAlt::where(['main_id' => $user->character_id])->count();
if($altCount > 0) {
UserAlt::where([
'main_id' => $user->character_id,
])->delete();
}
//Delete the user from the user table
User::where([
'character_id' => $user->character_id,
])->delete();
EsiScope::where([
'character_id' => $user->character_id,
])->delete();
EsiToken::where([
'character_id' => $user->character_id,
])->delete();
}
}
}
}
}
}
}

View File

@@ -0,0 +1,70 @@
<?php
namespace App\Console\Commands\Data;
use Illuminate\Console\Command;
use Log;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use App\Library\Helpers\LookupHelper;
use App\Library\Esi\Esi;
use App\Library\Moons\MoonCalc;
use App\Models\MoonRental\AllianceMoon;
use App\Models\MoonRental\AllianceMoonOre;
class Test extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'data:test';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Test ESI stuff.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
$mHelper = new MoonCalc;
$months = 3;
$rentalTax = 0.25;
$worth1;
$worth2;
$moons = AllianceMoon::all();
foreach($moons as $moon) {
//Declare the arrays needed
$ores = array();
$ores = AllianceMoonOre::where([
'moon_id' => $moon->moon_id,
])->get(['ore_type_id', 'quantity'])->toArray();
dd($ores);
}
}
}

View File

@@ -3,10 +3,8 @@
namespace App\Console\Commands\Eve;
use Illuminate\Console\Command;
use Log;
//Library
use Commands\Library\CommandHelper;
use App\Library\Moons\MoonCalc;
//Job
@@ -45,14 +43,12 @@ class ItemPricesUpdateCommand extends Command
*/
public function handle()
{
$task = new CommandHelper('ItemPriceUpdate');
$task->SetStartStatus();
//Declare variables
$moonHelper = new MoonCalc;
//Fetch new prices from fuzzwork.co.uk for the item pricing schemes
$moonHelper->FetchNewPrices();
//ItemPricesUpdateJob::dispatch()->onQueue('default');
$task->SetStopStatus();
return 0;
}
}

View File

@@ -0,0 +1,152 @@
<?php
//Namespace
namespace App\Console\Commands\Files;
//Internal Library
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;
use Illuminate\Http\File;
use Carbon\Carbon;
use Log;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use DB;
//Application Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
use App\Library\Moons\MoonCalc;
//Models
use App\Models\MoonRental\AllianceMoonOre;
use App\Models\MoonRental\AllianceMoon;
class ImportAllianceMoons extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'files:import:moons';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Import moons from tab-delimited text.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
///universe/moons/{moon_id}/
//Declare variables
$lookup = new LookupHelper;
$mHelper = new MoonCalc;
//Create the collection of lines for the input file.
$moons = new Collection;
//Create the file handler
$data = Storage::get('public/alliance_moons.txt');
//Split the string into separate arrays based on the line
$lines = preg_split("/\n/", $data);
//Take each line and split it again by tabs
foreach($lines as $temp) {
//Split the lines into separate arrays by tabs
$separated = preg_split("/\t/", $temp);
//Push the tabbed array into the collection
$moons->push($separated);
}
/**
* The first pass through the collection of data is to get all of the ore data
* and store it in the database. From the database moon ore, we will create a list
* of moons and store those in the database. After the list of moons are created in the
* database, the function will then update the value of all the moons.
*/
//Start working our way through all of the moons
//and saving the data to the database
foreach($moons as $moon) {
//If the first array is null then we are dealing with an ore
if($moon[0] == null) {
$moonInfo = $lookup->GetMoonInfo($moon[6]);
$solarName = $lookup->SystemIdToName($moonInfo->system_id);
$moonType = $mHelper->IsRMoonGoo($moon[1]);
if(AllianceMoon::where(['moon_id' => $moonInfo->moon_id])->count() == 0) {
//Save the moon into the database
$newMoon = new AllianceMoon;
$newMoon->moon_id = $moonInfo->moon_id;
$newMoon->name = $moonInfo->name;
$newMoon->system_id = $moonInfo->system_id;
$newMoon->system_name = $solarName;
$newMoon->moon_type = $moonType;
$newMoon->worth_amount = 0.00;
$newMoon->rented = 'No';
$newMoon->rental_amount = 0.00;
$newMoon->save();
} else {
$current = AllianceMoon::where([
'moon_id' => $moonInfo->moon_id,
])->first();
if($current->moon_type == 'R4' && ($moonType == 'R8' || $moonType == 'R16' || $moonType == 'R32' || $moonType == 'R64')) {
AllianceMoon::where([
'moon_id' => $moonInfo->moon_id,
])->update([
'moon_type' => $moonType,
]);
} else if($current->moon_type == 'R8' && ($moonType == 'R16' || $moonType == 'R32' || $moonType == 'R64')) {
AllianceMoon::where([
'moon_id' => $moonInfo->moon_id,
])->update([
'moon_type' => $moonType,
]);
} else if($current->moon_type == 'R16' && ($moonType == 'R32' || $moonType == 'R64')) {
AllianceMoon::where([
'moon_id' => $moonInfo->moon_id,
])->update([
'moon_type' => $moonType,
]);
} else if($current->moon_type == 'R32' && $moonType == 'R64') {
AllianceMoon::where([
'moon_id' => $moonInfo->moon_id,
])->update([
'moon_type' => $moonType,
]);
}
}
//Save a new entry into the database
$ore = new AllianceMoonOre;
$ore->moon_id = $moon[6];
$ore->moon_name = $moonInfo->name;
$ore->ore_type_id = $moon[3];
$ore->ore_name = $moon[1];
$ore->quantity = $moon[2];
$ore->solar_system_id = $moon[4];
$ore->planet_id = $moon[5];
$ore->save();
}
}
}
}

View File

@@ -1,78 +0,0 @@
<?php
namespace App\Console\Commands\Finances;
use Illuminate\Console\Command;
use Log;
use Commands\Library\CommandHelper;
use App\Library\Finances\Helper\FinanceHelper;
//Jobs
use App\Jobs\ProcessWalletJournalJob;
class HoldingFinancesCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'services:HoldingJournal';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Get the holding corps finances.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//Create the command helper container
$task = new CommandHelper('HoldingFinances');
//Add the entry into the jobs table saying the job is starting
$task->SetStartStatus();
//Setup the Finances container
$finance = new FinanceHelper();
//Get the esi configuration
$config = config('esi');
//Get the total pages for the journal for the holding corporation
$pages = $finance->GetJournalPageCount(1, $config['primary']);
//Dispatch a single job for each page to process
for($i = 1; $i <= $pages; $i++) {
ProcessWalletJournalJob::dispatch(1, $config['primary'], $i)->onQueue('journal');
}
//Get the total pages for the journal for the sov bills from the holding corporation
$pages = $finance->GetJournalPageCount(6, $config['primary']);
//Dispatch a job for each page to process
for($i = 1; $i <= $pages; $i++) {
ProcessWalletJournalJob::dispatch(6, $config['primary'], $i)->onQueue('journal');
}
//Mark the job as finished
$task->SetStopStatus();
}
}

View File

@@ -1,132 +0,0 @@
<?php
namespace App\Console\Commands\Finances;
use Illuminate\Console\Command;
use Log;
use Commands\Library\CommandHelper;
use App\Library\Finances\Helper\FinanceHelper;
//Jobs
use App\Jobs\ProcessWalletJournalJob;
//Models
use App\Models\Esi\EsiToken;
use App\Models\Esi\EsiScope;
//Library
use App\Library\Esi\Esi;
use App\Library\Finances\AllianceMarketTax;
use App\Library\Finances\CorpMarketTax;
use App\Library\Finances\MarketTax;
use App\Library\Finances\PlayerDonation;
use App\Library\Finances\ReprocessingTax;
use App\Library\Finances\JumpBridgeTax;
use App\Library\Finances\StructureIndustryTax;
use App\Library\Finances\OfficeFee;
use App\Library\Finances\PlanetProductionTax;
use App\Library\Finances\PISale;
use App\Library\Lookups\LookupHelper;
use App\Library\Finances\SovBillExpenses;
//Seat Stuff
use Seat\Eseye\Exceptions\RequestFailedException;
use Seat\Eseye\Cache\NullCache;
use Seat\Eseye\Configuration;
class SovBillsCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'services:SovBills';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Get the holding corps sov bills from wallet 6.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$sovBill = new SovBillExpenses;
$esiHelper = new Esi;
$finance = new FinanceHelper();
$lookup = new LookupHelper;
//Create the command helper container
$task = new CommandHelper('SovBills');
//Add the entry into the jobs table saying the job is starting
$task->SetStartStatus();
//Get the esi configuration
$config = config('esi');
//Set caching to null
$configuration = Configuration::getInstance();
$configuration->cache = NullCache::class;
$token = $esiHelper->GetRefreshToken($config['primary']);
if($token == null) {
return null;
}
//Create an ESI authentication container
$esi = $esiHelper->SetupEsiAuthentication($token);
$esi->setVersion('v4');
//Reference to see if the character is in our look up table for corporations and characters
$char = $lookup->GetCharacterInfo($config['primary']);
$corpId = $char->corporation_id;
//Get the total pages for the journal for the sov bills from the holding corporation
$pages = $finance->GetJournalPageCount(6, $config['primary']);
//Try to figure it out from the command itself.
for($i = 1; $i <= $pages; $i++) {
printf("Getting page: " . $i . "\n");
try {
$journals = $esi->page($i)
->invoke('get', '/corporations/{corporation_id}/wallets/{division}/journal/', [
'corporation_id' => $corpId,
'division' => 6,
]);
} catch(RequestFailedException $e) {
return null;
}
//Decode the wallet from json into an array
$wallet = json_decode($journals->raw, true);
dd($wallet);
foreach($wallet as $entry) {
if($entry['ref_type'] == 'infrastructure_hub_maintenance' && $entry['first_party_id'] == 98287666) {
$sovBill->InsertSovBillExpense($entry, $corpId, $division);
}
}
}
//Mark the job as finished
$task->SetStopStatus();
}
}

View File

@@ -0,0 +1,54 @@
<?php
namespace App\Console\Commands\Finances;
//Internal Library
use Illuminate\Console\Command;
use Log;
use Carbon\Carbon;
//Application Library
use App\Library\Helpers\FinanceHelper;
//Jobs
use App\Jobs\Commands\Finances\UpdateAllianceWalletJournalJob;
//Models
use App\Models\Finances\AllianceWalletJournal;
class UpdateAllianceWalletJournal extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'finances:UpdateJournals';
/**
* The console command description.
*
* @var string
*/
protected $description = "Update the holding corporation's finance journal.";
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
UpdateAllianceWalletJournalJob::dispatch()->onQueue('finances');
}
}

View File

@@ -1,129 +0,0 @@
<?php
namespace App\Console\Commands\Flex;
//Internal Library
use Illuminate\Console\Command;
use Carbon\Carbon;
//Jobs
use App\Jobs\ProcessSendEveMailJob;
//Library
use Commands\Library\CommandHelper;
//Models
use App\Models\Flex\FlexStructure;
use App\Models\Mail\SentMail;
class FlexStructureCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'services:FlexStructures';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Mail out reminder for flex structure bills';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//Create the new command helper container
$task = new CommandHelper('FlexStructureMailer');
//Add the entry into the jobs table saying the job has started
$task->SetStartStatus();
//Create other variables
$body = null;
$delay = 5;
//Get today's date
$today = Carbon::now();
$today->second = 2;
$today->minute = 0;
$today->hour = 0;
//Get the esi configuration
$config = config('esi');
//Get all of the contacts for the flex structures
$contacts = FlexStructure::select('requestor_id')->orderBy('requestor_id')->get();
//For each of the contacts, send a reminder mail about the total of the structures they are paying for
foreach($contacts as $contact) {
//Get all of the structures for requestor
$structures = FlexStructure::where([
'requestor_id' => $contact->requestor_id,
])->get();
//Totalize the total cost of everything
$totalCost = $this->TotalizeCost($structures);
//Build the body of the mail
$body = "Flex Structure Overhead Cost is due for the following structures:<br>";
foreach($structures as $structure) {
$body .= "System: " . $structure->system . " - " . $structure->structure_type . ": " . $structure->structure_cost . " ISK<br>";
}
$body .= "Total Cost: " . number_format($totalCost, 2,".", ",");
$body .= "Please remit payment to Spatial Forces by the 3rd of the month.<br>";
$body .= "Sincerely,<br>";
$body .= "Warped Intentions Leadership<br>";
//Dispatch the mail job
$subject = "Warped Intentions Flex Structures Payment Due for " . $today->englishMonth;
ProcessSendEveMailJob::dispatch($body, (int)$structure->requestor_id, 'character', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds($delay));
//Increment the delay for the mail to not hit the rate limits
$delay += 60;
//After the mail is dispatched, save the sent mail record
$this->SaveSentRecord($config['primary'], $subject, $body, (int)$structure->requestor_id, 'character');
}
//Mark the job as finished
$task->SetStopStatus();
}
private function TotalizeCost($structures) {
//Declare the total cost
$totalCost = 0.00;
foreach($structures as $structure) {
$totalCost += $structure->structure_cost;
}
return $totalCost;
}
private function SaveSentRecord($sender, $subject, $body, $recipient, $recipientType) {
$sentmail = new SentMail;
$sentmail->sender = $sender;
$sentmail->subject = $subject;
$sentmail->body = $body;
$sentmail->recipient = $recipient;
$sentmail->recipient_type = $recipientType;
$sentmail->save();
}
}

View File

@@ -1,48 +0,0 @@
<?php
namespace Commands\Library;
//Internal Libraries
use Carbon\Carbon;
//Models
use App\Models\ScheduledTask\ScheduleJob;
class CommandHelper {
private $job_name;
private $job_state;
private $system_time;
public function __construct($name) {
$this->job_name = $name;
$this->job_state = 'Starting';
$this->system_time = Carbon::now();
}
public function SetStartStatus() {
//Add an entry into the jobs table
$job = new ScheduleJob;
$job->job_name = $this->job_name;
$job->job_state = $this->job_state;
$job->system_time = $this->system_time;
$job->save();
}
public function SetStopStatus() {
//Mark the job as finished
ScheduleJob::where([
'system_time' => $this->system_time,
'job_name' => $this->job_name,
])->update([
'job_state' => 'Finished',
]);
}
public function CleanJobStatusTable() {
//Delete old jobs
ScheduleJob::where(['system_time', '<', Carbon::now()->subMonths(3)])->delete();
}
}
?>

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Console\Commands\MiningTaxes;
use Illuminate\Console\Command;
use App\Jobs\Commands\MiningTaxes\PreFetchMiningTaxesLedgers as PreFetch;
class ExecuteMiningTaxesLedgersCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'mt:ledgers';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Execute mining taxes ledgers jobs.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
PreFetch::dispatch();
return 0;
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Console\Commands\MiningTaxes;
use Illuminate\Console\Command;
use App\Jobs\Commands\MiningTaxes\FetchMiningTaxesObservers as FetchObservers;
class ExecuteMiningTaxesObserversCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'mt:observer';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Dispatch a mining tax observer job.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
FetchObservers::dispatch();
return 0;
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Console\Commands\MiningTaxes;
use Illuminate\Console\Command;
use App\Jobs\Commands\MiningTaxes\ProcessMiningTaxesPayments as PMTP;
class ExecuteProcesssMiningTaxesPaymentsCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'mt:payments';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Process Mining Taxes payments from the console.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
PMTP::dispatch();
return 0;
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Console\Commands\MiningTaxes;
use Illuminate\Console\Command;
use App\Jobs\Commands\MiningTaxes\MiningTaxesWeeklyInvoicing as SendInvoice;
class ExecuteSendMiningTaxesInvoiceCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'mt:send';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Execute send mining tax invoices.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
SendInvoice::dispatch();
return 0;
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class ExecuteSendMoonRentalInvoices extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'mr:invoice';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Execute command to send moon rental invoices job';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
return 0;
}
}

View File

@@ -0,0 +1,110 @@
<?php
namespace App\Console\Commands\MoonRental;
//Application Library
use Illuminate\Console\Command;
use Log;
use Carbon\Carbon;
//Internal Library
use App\Library\Moons\MoonCalc;
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MoonRental\AllianceMoon;
use App\Models\MoonRental\AllianceMoonOre;
//Jobs
use App\Jobs\Commands\MoonRental\UpdateAllianceMoonRentalWorth;
class ExecuteUpdateAllianceMoonRentalWorth extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'mr:worth';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Update alliance moon rental worth.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
UpdateAllianceMoonRentalWorth::dispatch();
/*
//Declare variables
$lookup = new LookupHelper;
$mHelper = new MoonCalc;
$months = 3;
$rentalTax = 0.25;
$moons = AllianceMoon::all();
foreach($moons as $moon) {
//Declare the arrays needed
$ores = array();
$worth = 0.00;
$ores = AllianceMoonOre::where([
'moon_id' => $moon->moon_id,
])->get(['ore_name', 'quantity'])->toArray();
if(sizeof($ores) == 1) {
$ores[1]["ore_name"] = null;
$ores[1]["quantity"] = 0.00;
$ores[2]["ore_name"] = null;
$ores[2]["quantity"] = 0.00;
$ores[3]["ore_name"] = null;
$ores[3]["quantity"] = 0.00;
} else if(sizeof($ores) == 2) {
$ores[2]["ore_name"] = null;
$ores[2]["quantity"] = 0.00;
$ores[3]["ore_name"] = null;
$ores[3]["quantity"] = 0.00;
} else if(sizeof($ores) == 3) {
$ores[3]["ore_name"] = null;
$ores[3]["quantity"] = 0.00;
}
//one of these two ways will work
$worth = $mHelper->MoonTotalWorth($ores[0]["ore_name"], $ores[0]["quantity"],
$ores[1]["ore_name"], $ores[1]["quantity"],
$ores[2]["ore_name"], $ores[2]["quantity"],
$ores[3]["ore_name"], $ores[3]["quantity"]);
$rentalAmount = $worth * $rentalTax * $months;
AllianceMoon::where([
'moon_id' => $moon->moon_id,
])->update([
'worth_amount' => $worth,
'rental_amount' => $rentalAmount,
]);
}
*/
return 0;
}
}

View File

@@ -1,90 +0,0 @@
<?php
namespace App\Console\Commands\Moons;
//Internal Library
use Illuminate\Console\Command;
use Carbon\Carbon;
use Log;
//Jobs
use App\Jobs\Commands\Moons\FetchMoonLedgerJob;
use App\Jobs\Commands\Moons\FetchMoonObserverJob;
//Library
use Commands\Library\CommandHelper;
//Models
use App\Models\Esi\EsiScope;
class MoonsUpdateCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'services:MoonUpdate';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Update all of the moons registered for observers and ledgers.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//Declare variables
$delay = 0;
$characters = array();
//Create the new command helper container
$task = new CommandHelper('MoonsUpdateCommand');
//Set the task start status
$task->SetStartStatus();
//Get all of the characters who have registered structures for moon ledgers
$miningChars = EsiScope::where([
'scope' => 'esi-industry.read_corporation_mining.v1',
])->get();
foreach($miningChars as $mChars) {
$universe = EsiScope::where([
'character_id' => $mChars->character_id,
'scope' => 'esi-universe.read_structures.v1',
])->first();
if($universe != null) {
array_push($characters, $universe->character_id);
}
}
//Cycle through each of the character Ids which have the correct scopes,
//and dispatch jobs accordingly.
foreach($characters as $charId) {
//Fetch all of the corp observers with the job dispatch
FetchMoonObserverJob::dispatch($charId);
//Fetch all of the corp ledgers with the job dispatch
FetchMoonLedgerJob::dispatch($charId);
}
//Set task done status
$task->SetStopStatus();
}
}

View File

@@ -1,63 +0,0 @@
<?php
namespace App\Console\Commands\RentalMoons;
//Internal Library
use Illuminate\Console\Command;
use Log;
use Carbon\Carbon;
//Library
use Commands\Library\CommandHelper;
//Jobs
use App\Jobs\Commands\RentalMoons\SendMoonRentalPaymentReminderJob;
use App\Jobs\Commands\RentalMoons\UpdateMoonRentalPaidState;
class AllianceRentalMoonInvoiceCreationCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'services:RentalInvoices';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Send out rental invoice reminders';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//Set the task as started
$task = new CommandHelper('AllianceRentalInvoice');
$task->SetStartStatus();
//Send the job for the invoice creation command
SendMoonRentalPaymentReminderJob::dispatch()->delay(Carbon::now()->addSeconds(10));
//Update the paid state for the moons
UpdateMoonRentalPaidState::dispatch()->delay(Carbon::now()->addSeconds(600));
//Set the task as stopped
$task->SetStopStatus();
}
}

View File

@@ -1,56 +0,0 @@
<?php
namespace App\Console\Commands\RentalMoons;
//Internal Library
use Illuminate\Console\Command;
use Log;
//Library
use Commands\Library\CommandHelper;
//Job
use App\Jobs\Commands\RentalMoons\UpdateMoonRentalPrice;
class AllianceRentalMoonUpdatePricingCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'services:UpdateRentalPrice';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Update alliance rental moon prices.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//Setup the task handler
$task = new CommandHelper('AllianceRentalMoonPriceUpdater');
$task->SetStartStatus();
UpdateMoonRentalPrice::dispatch();
$task->SetStopStatus();
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Console\Commands\Structures;
use Illuminate\Console\Command;
use App\Jobs\Commands\Assets\FetchAllianceAssets as FAA;
class ExecuteFetchAllianceAssetsCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'structure:assets';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Execute fetch alliance command.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
FAA::dispatch();
return 0;
}
}

View File

@@ -0,0 +1,46 @@
<?php
namespace App\Console\Commands\Structures;
use Illuminate\Console\Command;
use App\Jobs\Commands\Structures\FetchAllianceStructures as FAS;
class ExecuteFetchAllianceStructuresCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'structure:structure';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Fetch alliance structures command.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
FAS::dispatch();
return 0;
}
}

View File

@@ -1,114 +0,0 @@
<?php
namespace App\Console\Commands\Structures;
use Illuminate\Console\Command;
use Log;
//Library
use App\Library\Structures\StructureHelper;
use App\Library\Esi\Esi;
use Commands\Library\CommandHelper;
use Seat\Eseye\Exceptions\RequestFailedException;
//Job
use App\Jobs\ProcessStructureJob;
//Models
use App\Models\Esi\EsiScope;
use App\Models\Esi\EsiToken;
class GetStructuresCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'services:GetStructures';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Get the list of structures ';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//Create the command helper container
$task = new CommandHelper('GetStructures');
//Add the entry into the jobs table saying the job is starting
$task->SetStartStatus();
//Get the esi config
$config = config('esi');
//Declare some variables
$charId = $config['primary'];
$corpId = 98287666;
$sHelper = new StructureHelper($charId, $corpId);
$structures = null;
//ESI Scope Check
$esiHelper = new Esi;
$structureScope = $esiHelper->HaveEsiScope($charId, 'esi-universe.read_structures.v1');
$corpStructureScope = $esiHelper->HaveEsiScope($charId, 'esi-corporations.read_structures.v1');
//Check scopes
if($structureScope == false || $corpStructureScope == false) {
if($structureScope == false) {
Log::critical("Scope check for esi-universe.read_structures.v1 has failed.");
}
if($corpStructureScope == false) {
Log::critical("Scope check for esi-corporations.read_structures.v1 has failed.");
}
return null;
}
//Get the refresh token from the database
$token = $esiHelper->GetRefreshToken($charId);
//Create the esi authentication container
$esi = $esiHelper->SetupEsiAuthentication($token);
//Set the current page
$currentPage = 1;
//Set our default total pages, and we will refresh this later
$totalPages = 1;
//Try to get the ESI data
try {
$structures = $esi->page($currentPage)
->invoke('get', '/corporations/{corporation_id}/structures/', [
'corporation_id' => $corpId,
]);
} catch (RequestFailedException $e) {
Log::critical("Failed to get structure list.");
return null;
}
$totalPages = $structures->pages;
for($i = 1; $i <= $totalPages; $i++) {
ProcessStructureJob::dispatch($charId, $corpId, $currentPage)->onQueue('structures');
}
//Mark the job as finished
$task->SetStopStatus();
}
}

View File

@@ -1,133 +0,0 @@
<?php
namespace App\Console\Commands\SystemRental;
//Internal Library
use Illuminate\Console\Command;
use Carbon\Carbon;
//Jobs
use App\Jobs\ProcessSendEveMailJob;
//Library
use Command\Library\CommandHelper;
//Models
use App\Models\Rentals\RentalSystem;
use App\Models\Mail\SentMail;
class SystemRentalCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'services:SystemRentals';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Mail out bill for system rentals.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//Create the new command helper container
$task = new CommandHelper('SystemRentalMailer');
//Add the entry into the jobs table saying the job has started
$task->SetStartStatus();
//Create other variables
$body = null;
$delay = 30;
//Get today's date
$today = Carbon::now();
$today->second = 2;
$today->minute = 0;
$today->hour = 0;
//Get the esi configuration
$config = config('esi');
//Get all of the contacts for the system rentals
$contacts = RentalSystem::select('contact_id')->orderBy('contact_id')->get();
//For each of the contacts send a reminder mail about the total of the systems they are paying for
foreach($contacts as $contact) {
//Get all of the systems
$systems = RentalSystem::where([
'contact_id' => $contact->contact_id,
])->get();
//Totalize the total cost of all of the systems
$totalCost = $this->TotalizeCost($systems);
//Build the body of the mail
$body = "System Rental Cost is due for the following systems:<br>";
foreach($systems as $system) {
$body .= $system->system_name . "<br>";
}
//Create the rest of the email body
$body .= "Total Cost: " . number_format($totalCost, 2, ".", ",");
$body .= "Please remite payment to White Wolves Holding.<br>";
$body .= "Sincerely,<br>";
$body .= "Warped Intentions Leadership<br>";
//Fill in the subject
$subject = "Warped Intentions System Rental Bill Due";
//Dispatch the mail job
ProcessSendEveMailJob::dispatch($body, (int)$contact->contact_id, 'character', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds($delay));
//Increase the delay for the next mail job
$delay += 60;
//After the mail is dispatched, save the sent mail record
$this->SaveSentRecord($config['primary'], $subject, $body, (int)$contact->contact_id, 'character');
}
//Mark the job as finished
$task->SetStopStatus();
}
private function TotalizeCost($systems) {
//Declare the starting total cost
$totalCost = 0.00;
foreach($systems as $system) {
$totalCost += $system->rental_cost;
}
return $totalCost;
}
private function SaveSentRecord($sender, $subject, $body, $recipient, $recipientType) {
$sentmail = new SentMail;
$sentmail->sender = $sender;
$sentmail->subject = $subject;
$sentmail->body = $body;
$sentmail->recipient = $recipient;
$sentmail->recipient_type = $recipientType;
$sentmail->save();
}
}

View File

@@ -0,0 +1,42 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class TestCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'command:name';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
return 0;
}
}

View File

@@ -1,203 +0,0 @@
<?php
namespace App\Console\Commands\Users;
//Internal Library
use Illuminate\Console\Command;
use Log;
//Libraries
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Wiki\WikiHelper;
//Models
use App\Models\User\User;
use App\Models\User\UserAlt;
use App\Models\Esi\EsiScope;
use App\Models\Esi\EsiToken;
use App\Models\User\UserPermission;
use App\Models\User\UserRole;
use App\Models\Admin\AllowedLogin;
use App\Models\Doku\DokuMember;
use App\Models\Doku\DokuUser;
/**
* The PurgeUsers command takes care of updating any user changes in terms of login role, as well as purging any users without at least
* the 'User' role. This command heavily relies on ESI being available. If no ESI is available, then the function does nothing, in order to prevent
* unwanted changes.
*/
class PurgeUsers extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'services:PurgeUsers';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Update and purge users from the database.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
//Declare some variables
$esiHelper = new Esi;
//Setup the esi variable
$esi = $esiHelper->SetupEsiAuthentication();
//Get all of the users from the database
$users = User::all();
//Get the allowed logins
$legacy = AllowedLogin::where(['login_type' => 'Legacy'])->pluck('entity_id')->toArray();
$renter = AllowedLogin::where(['login_type' => 'Renter'])->pluck('entity_id')->toArray();
//Cycle through all of the users, and either update their role, or delete them.
foreach($users as $user) {
//Set the fail bit to false for the next user to check
$failed = false;
//Note a screen entry for when doing cli stuff
printf("Processing character with id of " . $user->character_id . "\r\n");
//Get the character information
try {
$character_info = $esi->invoke('get', '/characters/{character_id}/', [
'character_id' => $user->character_id,
]);
$corp_info = $esi->invoke('get', '/corporations/{corporation_id}/', [
'corporation_id' => $character_info->corporation_id,
]);
} catch(RequestFailedException $e) {
Log::warning('Failed to get character information in purge user command for user ' . $user->character_id);
$failed = true;
}
//If the fail bit is still false, then continue
if($failed === false) {
//Get the user's role
$role = UserRole::where(['character_id' => $user->character_id])->first();
//We don't want to modify Admin and SuperUsers. Admins and SuperUsers are removed via a different process.
if($role->role != 'Admin') {
//Check if the user is allowed to login
if(isset($corp_info->alliance_id)) {
//Warped Intentions is allowed to login
if($corp_info->alliance_id == '99004116') {
//If the alliance is Warped Intentions, then modify the role if we need to
if($role->role != 'User') {
//Upate the role of the user
UserRole::where([
'character_id' => $user->character_id,
])->update([
'role' => 'User',
]);
//Update the user type
User::where([
'character_id' => $user->character_id,
])->update([
'user_type' => 'W4RP',
]);
}
} else if(in_array($corp_info->alliance_id, $legacy)) { //Legacy Users
if($role->role != 'User') {
//Update the role of the user
UserRole::where([
'character_id' => $user->character_id,
])->update([
'role' => 'User',
]);
//Update the user type
User::where([
'character_id' => $user->character_id,
])->update([
'user_type' => 'Legacy',
]);
}
} else if(in_array($corp_info->alliance_id, $renter)) { //Renter Users
if($role->role != 'Renter') {
//Update the role of the user
UserRole::where([
'character_id' => $user->character_id,
])->update([
'role' => 'Renter',
]);
//Update the user type
User::where([
'character_id' => $user->character_id,
])->update([
'user_type' => 'Renter',
]);
}
} else {
//If the user is part of no valid login group, then delete the user.
//Delete all of the permissions first
UserPermission::where([
'character_id' => $user->character_id,
])->delete();
//Delete the user's role
UserRole::where([
'character_id' => $user->character_id,
])->delete();
//Delete any alts the user might have registered.
$altCount = UserAlt::where(['main_id' => $user->character_id])->count();
if($altCount > 0) {
UserAlt::where([
'main_id' => $user->character_id,
])->delete();
}
//Delete the user from the user table
User::where([
'character_id' => $user->character_id,
])->delete();
EsiScope::where([
'character_id' => $user->character_id,
])->delete();
EsiToken::where([
'character_id' => $user->character_id,
])->delete();
//Delete the user from the wiki
$wikiHelper = new WikiHelper;
//Get the uid from the wiki tables utilizing the character's name
$uid = DokuUser::where(['name' => $user->name])->first();
$wikiHelper->DeleteWikiUser($uid);
}
}
}
}
}
}
}

View File

@@ -6,8 +6,21 @@ namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
//Library
use Commands\Library\CommandHelper;
//Jobs
use App\Jobs\Commands\MiningTaxes\PreFetchMiningTaxesLedgers;
use App\Jobs\Commands\MiningTaxes\FetchMiningTaxesObservers;
use App\Jobs\Commands\MiningTaxes\ProcessMiningTaxesPayments;
use App\Jobs\Commands\MiningTaxes\Invoices\UpdateMiningTaxesLateInvoices1st;
use App\Jobs\Commands\MiningTaxes\Invoices\UpdateMiningTaxesLateInvoices15th;
use App\Jobs\Commands\MiningTaxes\MiningTaxesWeeklyInvoicing;
use App\Jobs\Commands\Finances\UpdateAllianceWalletJournalJob;
use App\Jobs\Commands\Finances\UpdateItemPrices as UpdateItemPricesJob;
use App\Jobs\Commands\Data\PurgeUsers as PurgeUsersJob;
use App\Jobs\Commands\Structures\FetchAllianceStructures;
use App\Jobs\Commands\Structures\PurgeAllianceStructures;
use App\Jobs\Commands\Assets\FetchAllianceAssets;
use App\Jobs\Commands\Assets\PurgeAllianceAssets;
use App\Jobs\Commands\MoonRental\UpdateAllianceMoonRentalWorth as UpdateAMRW;
class Kernel extends ConsoleKernel
{
@@ -17,23 +30,18 @@ class Kernel extends ConsoleKernel
* @var array
*/
protected $commands = [
Commands\Corps\GetCorpsCommand::class,
Commands\Finances\HoldingFinancesCommand::class,
Commands\Structures\GetStructuresCommand::class,
Commands\Assets\GetAssetsCommand::class,
Commands\Users\PurgeUsers::class,
Commands\Flex\FlexStructureCommand::class,
Commands\Data\EmptyJumpBridges::class,
Commands\Finances\SovBillsCommand::class,
Commands\Data\CleanStaleDataCommand::class,
Commands\Moons\MoonsUpdateCommand::class,
Commands\Data\PurgeCorpMoonLedgers::class,
Commands\Data\PurgeUsers::class,
Commands\Data\Test::class,
Commands\Eve\ItemPricesUpdateCommand::class,
/**
* Rental Moon Commands
*/
Commands\RentalMoons\AllianceRentalMoonInvoiceCreationCommand::class,
Commands\RentalMoons\AllianceRentalMoonUpdatePricingCommand::class,
Commands\Finances\UpdateAllianceWalletJournal::class,
Commands\MiningTaxes\ExecuteMiningTaxesObserversCommand::class,
Commands\MiningTaxes\ExecuteMiningTaxesLedgersCommand::class,
Commands\MiningTaxes\ExecuteSendMiningTaxesInvoiceCommand::class,
Commands\MiningTaxes\ExecuteProcesssMiningTaxesPaymentsCommand::class,
Commands\Structures\ExecuteFetchAllianceStructuresCommand::class,
Commands\Structures\ExecuteFetchAllianceAssetsCommand::class,
Commands\Files\ImportAllianceMoons::class,
Commands\MoonRental\ExecuteUpdateAllianceMoonRentalWorth::class,
];
/**
@@ -44,51 +52,74 @@ class Kernel extends ConsoleKernel
*/
protected function schedule(Schedule $schedule)
{
//Schedule Monitor Jobs
$schedule->command('schedule-monitor:sync')->dailyAt('04:56');
$schedule->command('schedule-monitor:clean')->daily();
//Horizon Graph Schedule
$schedule->command('horizon:snapshot')->everyFiveMinutes();
/**
* Rentals / Flex Schedule
* Purge Data Schedule
*/
$schedule->command('services:UpdateRentalPrice')
->dailyAt('11:00')
->withoutOverlapping();
$schedule->command('services:FlexStructures')
->monthlyOn(2, '00:01');
$schedule->job(new PurgeUsersJob)
->weekly();
/**
* Holding Corp Finance Schedule
* Finances Update Schedule
*/
$schedule->command('services:HoldingJournal')
$schedule->job(new UpdateAllianceWalletJournalJob)
->hourlyAt('45')
->withoutOverlapping();
/**
* Get Information Schedule
*/
$schedule->command('services:GetCorps')
->monthlyOn(1, '09:00');
$schedule->command('services:GetStructures')
->dailyAt('09:00');
$schedule->command('services:GetAssets')
->hourlyAt('22');
/**
* Purge Data Schedule
*/
$schedule->command('services:CleanData')
->weekly(7, '11:00');
$schedule->command('data:PurgeCorpLedgers')
->monthly();
$schedule->command('services:PurgeUsers')
->dailyAt('23:00');
/**
* Item Update Schedule
*/
$schedule->command('services:ItemPriceUpdate')
->hourlyAt('30')
$schedule->job(new UpdateItemPricesJob)
->hourlyAT('30')
->withoutOverlapping();
/**
* Mining Tax Schedule
*/
$schedule->job(new FetchMiningTaxesObservers)
->dailyAt('20:00')
->withoutOverlapping();
$schedule->job(new PreFetchMiningTaxesLedgers)
->dailyAt('22:00')
->withoutOverlapping();
$schedule->job(new MiningTaxesWeeklyInvoicing)
->weeklyOn(1, '06:00')
->withoutOverlapping();
$schedule->job(new ProcessMiningTaxesPayments)
->hourlyAt('15')
->withoutOverlapping();
$schedule->job(new UpdateMiningTaxesLateInvoices1st)
->monthlyOn(1, '16:00')
->withoutOverlapping();
$schedule->job(new UpdateMiningTaxesLateInvoices15th)
->monthlyOn(15, '16:00')
->withoutOverlapping();
$schedule->job(new UpdateAMRW)
->dailyAt('13:00')
->withoutOverlapping();
/**
* Alliance Structure and Assets Schedule
*/
$schedule->job(new FetchAllianceStructures)
->dailyAt('21:00')
->withoutOverlapping();
$schedule->job(new FetchAllianceAssets)
->hourlyAt('15')
->withoutOverlapping();
$schedule->job(new PurgeAllianceStructures)
->monthlyOn(2, '14:00')
->withoutOverlapping();
$schedule->job(new PurgeAllianceAssets)
->monthlyOn(2, '15:00')
->withoutOverlapping();
}
/**
@@ -102,4 +133,14 @@ class Kernel extends ConsoleKernel
require base_path('routes/console.php');
}
/**
* Get the timezone that should be used by default for scheduled events.
*
* @return \DateTimeZone|string|null
*/
protected function scheduleTimezone()
{
return 'UTC';
}
}

View File

@@ -2,7 +2,8 @@
namespace App\Exceptions;
use Exception;
//use Exception;
use Throwable;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
@@ -32,7 +33,7 @@ class Handler extends ExceptionHandler
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
public function report(Throwable $exception)
{
parent::report($exception);
}
@@ -44,7 +45,7 @@ class Handler extends ExceptionHandler
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
public function render($request, Throwable $exception)
{
return parent::render($request, $exception);
}

View File

@@ -0,0 +1,30 @@
<?php
namespace App\Http\Controllers\AfterActionReports;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class AfterActionReportsAdminController extends Controller
{
public function __construct() {
$this->middleware('auth');
$this->middleware('permission:fc.lead');
}
public function DeleteReport() {
}
public function DeleteComment() {
}
public function PruneReports() {
}
public function DisplayStastics() {
}
}

View File

@@ -0,0 +1,87 @@
<?php
namespace App\Http\Controllers\AfterActionReports;
//Internal Library
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Carbon\Carbon;
//Models
use App\Models\AfterActionReports\AfterActionReport;
use App\Models\AfterActionReports\AfterActionReportComment;
class AfterActionReportsController extends Controller
{
public function __contstruct() {
$this->middleware('auth');
$this->middleware('permission:fc.team');
}
public function DisplayReportForm() {
return view('reports.user.form.report');
}
public function StoreReport(Request $request) {
$this->validate($request, [
'location' => 'required',
'time' => 'required',
'comms' => 'required',
'doctrine' => 'required',
'objective' => 'required',
'result' => 'required',
'summary' => 'required',
'improvements' => 'required',
'well' => 'required',
'comments' => 'required',
]);
$report = new AfterActionReport;
$report->fc_id = auth()->user()->getId();
$report->fc_name = auth()->user()->getName();
$report->formup_time = $request->time;
$report->formup_location = $request->location;
$report->comms = $request->comms;
$report->doctrine = $request->doctrine;
$report->objective = $request->objective;
$report->objective_result = $request->result;
$report->summary = $request->summary;
$report->improvements = $request->improvements;
$report->worked_well = $request->well;
$report->additonal_comments = $request->comments;
$report->save();
return redirect('/reports/display/all')->with('success', 'Added report to the database.');
}
public function DisplayCommentForm($id) {
return view('reports.user.form.comment')->with('id', $id);
}
public function StoreComment(Request $request) {
$this->validate($request, [
'reportId' => 'required',
'comments' => 'required',
]);
$comment = new AfterActionReportComment;
$comment->report_id = $request->reportId;
$comment->character_id = auth()->user()->getId();
$comment->character_name = auth()->user()->getName();
$comment->comments = $required->comments;
$comment->save();
return redirect('/reports/display/all')->with('success', 'Added comemnt to the report.');
}
public function DisplayAllReports() {
//Grab all the reports
$reports = AfterActionReport::where('created_at', '>=', Carbon::now()->subDays(30));
$comments = AfterActionReportComment::where('created_at', '>=', Carbon::now()->subDays(30));
$reportCount = AfterActionReport::where('created_at', '>=', Carbon::now()->subDays(30))->count();
return view('reports.user.displayreports')->with('reports', $reports)
->with('comments', $comments)
->with('reportCount', $reportCount);
}
}

View File

@@ -6,13 +6,15 @@ namespace App\Http\Controllers\Auth;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Http\Request;
use Socialite;
use Auth;
use Laravel\Socialite\Contracts\Factory as Socialite;
use Laravel\Socialite\Two\User as SocialiteUser;
//Library
use Seat\Eseye\Cache\NullCache;
use Seat\Eseye\Configuration;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\User\User;
@@ -73,50 +75,80 @@ class LoginController extends Controller
*
* @return Socialite
*/
public function redirectToProvider() {
return Socialite::driver('eveonline')->redirect();
public function redirectToProvider($profile = null, Socialite $social) {
//The default scope is public data for everyone due to OAuth2 Tokens
//We also add the send mail scope in order to be able to send mails more efficiently through jobs when other scopes are required.
$scopes = ['publicData', 'esi-mail.send_mail.v1'];
//Collect any other scopes we need if we are logged in.
//If we are logged in we are linking another character to this one.
//Attempt to use the same scopes for this character as the original one
if(Auth::check()) {
$extraScopes = EsiScope::where([
'character_id' => auth()->user()->getId(),
])->get(['scope']);
//Pop each scope onto the array of scopes
foreach($extraScopes as $extra) {
array_push($scopes, $extra->scope);
}
/**
* Place the scopes in the session.
* Place the original character id in the session.
*/
session()->put('scopes', $scopes);
session()->put('orgCharacter', auth()->user()->getId());
}
return $social->driver('eveonline')
->scopes($scopes)
->redirect();
}
/**
* Get token from callback
* Redirect to the dashboard if logging in successfully.
*/
public function handleProviderCallback() {
public function handleProviderCallback(Socialite $social) {
//Get the sso user from the socialite driver
$ssoUser = Socialite::driver('eveonline')->user();
$ssoUser = $social->driver('eveonline')->user();
$scpSession = session()->pull('scopes');
//If the user was already logged in, let's do some checks to see if we are adding
//additional scopes to the user's account
if(Auth::check()) {
//If a refresh token is present, then we are doing a scope callback
//to update scopes for an access token
//If we are logged in already and the session contains the original characters, then we are creating an alt
//for the original character
if(session()->has('orgCharacter')) {
$orgCharacter = session()->pull('orgCharacter');
if(isset($ssoUser->refreshToken)) {
//See if an access token is present already
$tokenCount = EsiToken::where('character_id', $ssoUser->id)->count();
if($tokenCount > 0) {
//Update the esi token
$this->UpdateEsiToken($ssoUser);
} else {
//Save the ESI token
$this->SaveEsiToken($ssoUser);
}
//After creating the token, we need to update the table for scopes
$this->SetScopes($ssoUser->user['Scopes'], $ssoUser->id);
return redirect()->to('/dashboard')->with('success', 'Successfully updated ESI Scopes.');
} else {
$created = $this->createAlt($ssoUser);
if($created == 1) {
if($this->createAlt($ssoUser, $orgCharacter)) {
return redirect()->to('/profile')->with('success', 'Alt registered.');
} else {
return redirect()->to('/profile')->with('error', 'Alt was previously registered.');
return redirect()->to('/profile')->with('error', 'Unable to register alt or it was previously registered.');
}
} else {
if(sizeof($ssoUser->scopes) > 1) {
$tokenCount = EsiToken::where([
'character_id' => $ssoUser->id,
])->count();
if($tokenCount > 0) {
$this->UpdateEsiToken($ssoUser);
} else {
$this->SaveEsiToken($ssoUser);
}
$this->SetScopes($ssoUser->scopes, $ssoUser->id);
return redirect()->to('/dashboard')->with('success', 'Successfully updated ESI scopes.');
}
}
} else {
//If the user wasn't logged in, then create a new user
$user = $this->createOrGetUser($ssoUser);
//Login in the new user
auth()->login($user, true);
//Redirect back to the dashboard
return redirect()->to('/dashboard')->with('success', 'Successfully Logged In.');
}
}
@@ -127,12 +159,19 @@ class LoginController extends Controller
*
* @param \Laravel\Socialite\Two\User $user
*/
private function createAlt($user) {
$altCount = UserAlt::where('character_id', $user->id)->count();
if($altCount == 0) {
private function createAlt($user, $orgCharacter) {
//Check to see if the alt is already in the database
$altCount = UserAlt::where(['character_id' => $user->id])->count();
//Check to see if the new character being added is already a main character
$mainCount = User::where(['character_id' => $user->id])->count();
//If not already in the database, then add the new character
if($altCount == 0 && $mainCount == 0) {
//Create the new alt in the table
$newAlt = new UserAlt;
$newAlt->name = $user->getName();
$newAlt->main_id = auth()->user()->getId();
$newAlt->main_id = $orgCharacter;
$newAlt->character_id = $user->id;
$newAlt->avatar = $user->avatar;
$newAlt->access_token = $user->token;
@@ -140,8 +179,22 @@ class LoginController extends Controller
$newAlt->inserted_at = time();
$newAlt->expires_in = $user->expiresIn;
$newAlt->save();
//Create the entry into the EsiToken table
if(EsiToken::where(['character_id' => $user->id])->count() == 0) {
$this->SaveEsiToken($user);
} else {
$this->UpdateEsiToken($user);
}
//Create the entry into the EsiScopes table
if(sizeof($user->scopes) > 1) {
$this->SetScopes($user->scopes, $user->id);
}
//Return the successfull conclusion of the function
return 1;
} else {
//Return the unsuccessfull conclusion of the function
return 0;
}
}
@@ -152,44 +205,48 @@ class LoginController extends Controller
*
* @param \Laravel\Socialite\Two\User $user
*/
private function createOrGetUser($eve_user) {
private function createOrGetUser($eveUser) {
$authUser = null;
//Search to see if we have a matching user in the database.
//At this point we don't care about the information
$userCount = User::where('character_id', $eve_user->id)->count();
$userCount = User::where([
'character_id' => $eveUser->id,
])->count();
//If the user is found, do more checks to see what type of login we are doing
if($userCount > 0) {
//Search for user in the database
$authUser = User::where('character_id', $eve_user->id)->first();
$authUser = User::where([
'character_id' => $eveUser->id,
])->first();
//Check to see if the owner has changed
//If the owner has changed, then update their roles and permissions
if($this->OwnerHasChanged($authUser->owner_hash, $eve_user->owner_hash)) {
if($this->OwnerHasChanged($authUser->owner_hash, $eveUser->owner_hash)) {
//Get the right role for the user
$role = $this->GetRole(null, $eve_user->id);
$role = $this->GetRole(null, $eveUser->id);
//Set the role for the user
$this->SetRole($role, $eve_user->id);
$this->SetRole($role, $eveUser->id);
//Update the user information never the less.
$this->UpdateUser($eve_user, $role);
$this->UpdateUser($eveUser, $role);
//Update the user's roles and permission
$this->UpdatePermission($eve_user, $role);
$this->UpdatePermission($eveUser, $role);
}
//Return the user to the calling auth function
return $authUser;
} else {
//Get the role for the character to be stored in the database
$role = $this->GetRole(null, $eve_user->id);
$role = $this->GetRole(null, $eveUser->id);
//Create the user account
$user = $this->CreateNewUser($eve_user);
$user = $this->CreateNewUser($eveUser);
//Set the role for the user
$this->SetRole($role, $eve_user->id);
$this->SetRole($role, $eveUser->id);
//Create a user account
return $user;
@@ -199,45 +256,45 @@ class LoginController extends Controller
/**
* Update the ESI Token
*/
private function UpdateEsiToken($eve_user) {
EsiToken::where('character_id', $eve_user->id)->update([
'character_id' => $eve_user->getId(),
'access_token' => $eve_user->token,
'refresh_token' => $eve_user->refreshToken,
private function UpdateEsiToken($eveUser) {
EsiToken::where('character_id', $eveUser->id)->update([
'character_id' => $eveUser->getId(),
'access_token' => $eveUser->token,
'refresh_token' => $eveUser->refreshToken,
'inserted_at' => time(),
'expires_in' => $eve_user->expiresIn,
'expires_in' => $eveUser->expiresIn,
]);
}
/**
* Create a new ESI Token in the database
*/
private function SaveEsiToken($eve_user) {
private function SaveEsiToken($eveUser) {
$token = new EsiToken;
$token->character_id = $eve_user->id;
$token->access_token = $eve_user->token;
$token->refresh_token = $eve_user->refreshToken;
$token->character_id = $eveUser->id;
$token->access_token = $eveUser->token;
$token->refresh_token = $eveUser->refreshToken;
$token->inserted_at = time();
$token->expires_in = $eve_user->expiresIn;
$token->expires_in = $eveUser->expiresIn;
$token->save();
}
/**
* Update avatar
*/
private function UpdateAvatar($eve_user) {
User::where('character_id', $eve_user->id)->update([
'avatar' => $eve_user->avatar,
private function UpdateAvatar($eveUser) {
User::where('character_id', $eveUser->id)->update([
'avatar' => $eveUser->avatar,
]);
}
/**
* Update user permission
*/
private function UpdatePermission($eve_user, $role) {
UserPermission::where(['character_id' => $eve_user->id])->delete();
private function UpdatePermission($eveUser, $role) {
UserPermission::where(['character_id' => $eveUser->id])->delete();
$perm = new UserPermission();
$perm->character_id = $eve_user->id;
$perm->character_id = $eveUser->id;
$perm->permission = $role;
$perm->save();
}
@@ -245,10 +302,10 @@ class LoginController extends Controller
/**
* Update the user
*/
private function UpdateUser($eve_user, $role) {
User::where('character_id', $eve_user->id)->update([
'avatar' => $eve_user->avatar,
'owner_hash' => $eve_user->owner_hash,
private function UpdateUser($eveUser, $role) {
User::where('character_id', $eveUser->id)->update([
'avatar' => $eveUser->avatar,
'owner_hash' => $eveUser->owner_hash,
'role' => $role,
]);
}
@@ -256,18 +313,42 @@ class LoginController extends Controller
/**
* Create a new user account
*/
private function CreateNewUser($eve_user) {
private function CreateNewUser($eveUser) {
$user = User::create([
'name' => $eve_user->getName(),
'avatar' => $eve_user->avatar,
'owner_hash' => $eve_user->owner_hash,
'character_id' => $eve_user->getId(),
'name' => $eveUser->getName(),
'avatar' => $eveUser->avatar,
'owner_hash' => $eveUser->owner_hash,
'character_id' => $eveUser->getId(),
'inserted_at' => time(),
'expires_in' => $eve_user->expiresIn,
'access_token' => $eve_user->token,
'user_type' => $this->GetAccountType(null, $eve_user->id),
'expires_in' => $eveUser->expiresIn,
'user_type' => $this->GetAccountType(null, $eveUser->id),
]);
//Look for an existing token for the characters
$tokenFound = EsiToken::where([
'character_id' => $eveUser->id,
])->count();
if($tokenFound == 0) {
$token = new EsiToken;
$token->character_id = $eveUser->id;
$token->access_token = $eveUser->token;
$token->refresh_token = $eveUser->refreshToken;
$token->inserted_at = time();
$token->expires_in = $eveUser->expiresIn;
$token->save();
} else {
EsiToken::where([
'character_id' => $eveUser->id,
])->update([
'character_id' => $eveUser->id,
'access_token' => $eveUser->token,
'refresh_token' => $eveUser->refreshToken,
'inserted_at' => time(),
'expires_in' => $eveUser->expiresIn,
]);
}
return $user;
}
@@ -293,7 +374,6 @@ class LoginController extends Controller
private function SetScopes($scopes, $charId) {
//Delete the current scopes, so we can add new scopes into the database
EsiScope::where('character_id', $charId)->delete();
$scopes = explode(' ', $scopes);
foreach($scopes as $scope) {
$data = new EsiScope;
$data->character_id = $charId;
@@ -350,6 +430,7 @@ class LoginController extends Controller
private function GetAccountType($refreshToken, $charId) {
//Declare some variables
$esiHelper = new Esi;
$lookup = new LookupHelper;
//Instantiate a new ESI isntance
$esi = $esiHelper->SetupEsiAuthentication();
@@ -359,10 +440,10 @@ class LoginController extends Controller
$configuration->cache = NullCache::class;
//Get the character information
$character_info = $esiHelper->GetCharacterData($charId);
$character_info = $lookup->GetCharacterInfo($charId);
//Get the corporation information
$corp_info = $esiHelper->GetCorporationData($character_info->corporation_id);
$corp_info = $lookup->GetCorporationInfo($character_info->corporation_id);
if($character_info == null || $corp_info == null) {
return redirect('/')->with('error', 'Could not create user at this time.');

View File

@@ -9,7 +9,7 @@ use Log;
use DB;
//Library
use App\Library\Lookups\LookupHelper;
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\Blacklist\BlacklistEntity;

View File

@@ -8,7 +8,7 @@ use App\Http\Controllers\Controller;
use Carbon\Carbon;
//Libraries
use App\Library\Lookups\LookupHelper;
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\User\User;
@@ -16,7 +16,7 @@ use App\Models\Contracts\SupplyChainBid;
use App\Models\Contracts\SupplyChainContract;
//Jobs
use App\Jobs\ProcessSendEveMailJob;
use App\Jobs\Commands\Eve\SendEveMail;
class SupplyChainController extends Controller
{
@@ -25,7 +25,7 @@ class SupplyChainController extends Controller
*/
public function __construct() {
$this->middleware('auth');
$this->middleware('role:Renter');
$this->middleware('role:User');
}
/**
@@ -454,7 +454,7 @@ class SupplyChainController extends Controller
$body .= "Notes: " . $contract->body . "<br>";
$body .= "Delivery Date: " . $contract->delivery_date . "<br>";
$body .= "<br>Sincerely on behalf of,<br>" . $contract->issuer_name . "<br>";
ProcessSendEveMailJob::dispatch($body, 145223267, 'mailing_list', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds(30));
SendEveMail::dispatch($body, 145223267, 'mailing_list', $subject, $config['primary'])->delay(Carbon::now()->addSeconds(30));
}
/**
@@ -469,7 +469,7 @@ class SupplyChainController extends Controller
$body .= "Contract: " . $contract->title . "<br>";
$body .= "Notes: " . $contract->note . "<br>";
$body .= "<br>Sincerely on behalf of,<br>" . $contract->issuer_name;
ProcessSendEveMailJob::dispatch($body, 145223267, 'mailing_list', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds(30));
SendEveMail::dispatch($body, 145223267, 'mailing_list', $subject, $config['primary'])->delay(Carbon::now()->addSeconds(30));
}
/**

View File

@@ -1,522 +0,0 @@
<?php
namespace App\Http\Controllers\Dashboard;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use DB;
use Carbon\Carbon;
//Libraries
use App\Library\Taxes\TaxesHelper;
use App\Library\Wiki\WikiHelper;
use App\Library\Lookups\LookupHelper;
use App\Library\SRP\SRPHelper;
//Models
use App\Models\User\User;
use App\Models\User\UserRole;
use App\Models\User\UserPermission;
use App\Models\User\AvailableUserPermission;
use App\Models\User\AvailableUserRole;
use App\Models\Admin\AllowedLogin;
use App\Models\Doku\DokuGroupNames;
use App\Models\Doku\DokuMember;
use App\Models\Doku\DokuUser;
class AdminController extends Controller
{
public function __construct() {
$this->middleware('auth');
$this->middleware('role:Admin');
}
public function displayTestAdminDashboard() {
return view('admin.dashboards.testdashboard');
}
public function showJournalEntries() {
$dateInit = Carbon::now();
$date = $dateInit->subDays(30);
$journal = DB::select('SELECT amount,reason,description,date FROM `player_donation_journal` WHERE corporation_id=98287666 AND date >= DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 2 MONTH) ORDER BY date DESC');
return view('admin.dashboards.walletjournal')->with('journal', $journal);
}
public function displayUsersPaginated() {
//Declare array variables
$user = array();
$permission = array();
$userArr = array();
$permString = null;
$usersArr = User::orderBy('name', 'asc')->paginate(50);
foreach($usersArr as $user) {
$user->role = $user->getRole();
$permCount = UserPermission::where([
'character_id' => $user->character_id,
])->count();
if($permCount > 0) {
$perms = UserPermission::where([
'character_id' => $user->character_id,
])->get('permission')->toArray();
foreach($perms as $perm) {
$permString .= $perm['permission'] . ', ';
}
$user->permission = $permString;
} else {
$user->permission = 'No Permissions';
}
}
return view('admin.dashboards.userspaged')->with('usersArr', $usersArr);
}
public function searchUsers(Request $request) {
//Declare array variables
$user = array();
$permission = array();
$userArr = array();
$permString = null;
//Validate the input from the form
$this->validate($request, [
'parameter' => 'required',
]);
$usersArr = User::where('name', 'like', $request->parameter . "%")->paginate(50);
foreach($usersArr as $user) {
$user->role = $user->getRole();
$permCount = UserPermission::where([
'character_id' => $user->character_id,
])->count();
if($permCount > 0) {
$perms = UserPermission::where([
'character_id' => $user->character_id,
])->get('permission')->toArray();
foreach($perms as $perm) {
$permString .= $perm['permission'] . ', ';
}
$user->permission = $permString;
} else {
$user->permission = 'No Permissions';
}
}
return view('admin.dashboards.users.searched')->with('usersArr', $usersArr);
}
public function displayAllowedLogins() {
//Declare array variables
$entities = array();
/** Entities for allowed logins */
$legacys = AllowedLogin::where(['login_type' => 'Legacy'])->pluck('entity_name')->toArray();
$renters = AllowedLogin::where(['login_type' => 'Renter'])->pluck('entity_name')->toArray();
//Compile a list of entities by their entity_id
foreach($legacys as $legacy) {
$entities[] = $legacy;
}
foreach($renters as $renter) {
$entities[] = $renter;
}
return view('admin.dashboards.allowed_logins')->with('entities', $entities);
}
public function displayTaxes() {
//Declare variables needed for displaying items on the page
$months = 3;
$pi = array();
$industry = array();
$reprocessing = array();
$office = array();
$corpId = 98287666;
$srpActual = array();
$srpLoss = array();
/** Taxes Pane */
//Declare classes needed for displaying items on the page
$tHelper = new TaxesHelper();
$srpHelper = new SRPHelper();
//Get the dates for the tab panes
$dates = $tHelper->GetTimeFrameInMonths($months);
//Get the data for the Taxes Pane
foreach($dates as $date) {
//Get the srp actual pay out for the date range
$srpActual[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($srpHelper->GetAllianceSRPActual($date['start'], $date['end']), 2, ".", ","),
];
//Get the srp loss value for the date range
$srpLoss[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($srpHelper->GetAllianceSRPLoss($date['start'], $date['end']), 2, ".", ","),
];
//Get the pi taxes for the date range
$pis[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetPIGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the industry taxes for the date range
$industrys[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetIndustryGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the reprocessing taxes for the date range
$reprocessings[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetReprocessingGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the office taxes for the date range
$offices[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetOfficeGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the market taxes for the date range
$markets[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetAllianceMarketGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the jump gate taxes for the date range
$jumpgates[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetJumpGateGross($date['start'], $date['end']), 2, ".", ","),
];
}
return view('admin.dashboards.taxes')->with('pis', $pis)
->with('industrys', $industrys)
->with('offices', $offices)
->with('markets', $markets)
->with('jumpgates', $jumpgates)
->with('reprocessings', $reprocessings)
->with('srpActual', $srpActual)
->with('srpLoss', $srpLoss);
}
public function displayModifyUser(Request $request) {
$permissions = array();
$name = $request->user;
//Get the user information from the name
$user = User::where(['name' => $name])->first();
$perms = AvailableUserPermission::all();
foreach($perms as $p) {
$permissions[$p->permission] = $p->permission;
}
$roles = AvailableUserRole::all();
$role = $user->getRole();
//Pass the user information to the page for hidden text entries
return view('admin.user.modify')->with('user', $user)
->with('permissions', $permissions)
->with('role', $role)
->with('roles', $roles);
}
public function modifyRole(Request $request) {
$this->validate($request, [
'user' => 'required',
'role' => 'required|role!=None',
]);
UserRole::where(['character_id' => $user])->update([
'role' => $request->role,
]);
return redirect('/admin/dashboard/users')->with('success', "User: " . $user . " has been modified to a new role: " . $request->role . ".");
}
public function addPermission(Request $request) {
//Get the user and permission from the form
$character = $request->user;
$permission = $request->permission;
//Check to see if the character already has the permission
$check = UserPermission::where(['character_id' => $character, 'permission' => $permission])->get(['permission']);
if(!isset($check[0]->permission)) {
$perm = new UserPermission;
$perm->character_id = $character;
$perm->permission = $permission;
$perm->save();
return redirect('/admin/dashboard/users')->with('success', 'User udpated!');
} else {
return redirect('/admin/dashboard/users')->with('error', 'User not updated or already has the permission.');
}
}
public function removeUser(Request $request) {
//Get the user from the form to delete
$user = $request->user;
//Get the user data from the table
$data = User::where(['name' => $user])->get();
//Delete the user's ESI Scopes
DB::table('EsiScopes')->where(['character_id' => $data[0]->character_id])->delete();
//Delete the user's ESI Token
DB::table('EsiTokens')->where(['character_id' => $data[0]->character_id])->delete();
//Delete the user's role from the roles table
DB::table('user_roles')->where(['character_id' => $data[0]->character_id])->delete();
//Delete the user from the user table
DB::table('users')->where(['character_id' => $data[0]->character_id])->delete();
return redirect('/admin/dashboard/users')->with('success', 'User deleted from the site.');
}
public function addAllowedLogin(Request $request) {
//Set the parameters to validate the form
$this->validate($request, [
'allowedEntityId' => 'required',
'allowedEntityType' => 'required',
'allowedEntityName' => 'required',
'allowedLoginType' => 'required',
]);
//Check to see if the entity exists in the database already
$found = AllowedLogin::where([
'entity_type' => $request->allowedentityType,
'entity_name' => $request->allowedEntityName,
])->count();
if($found != 0) {
AllowedLogin::where([
'entity_type' => $request->allowedEntityType,
'entity_name' => $request->allowedEntityName,
])->update([
'entity_id' => $request->allowedEntityId,
'entity_type' => $request->allowedEntityType,
'entity_name' => $request->allowedEntityName,
'login_type' => $request->allowedLoginType,
]);
} else {
$login = new AllowedLogin;
$login->entity_id = $request->allowedEntityId;
$login->entity_name = $request->allowedEntityName;
$login->entity_type = $request->allowedEntityType;
$login->login_type = $request->allowedLoginType;
$login->save();
}
return redirect('/admin/dashboard')->with('success', 'Entity added to allowed login list.');
}
public function removeAllowedLogin(Request $request) {
//Set the parameters to validate the form
$this->validate($request, [
'removeAllowedLogin' => 'required',
]);
AllowedLogin::where([
'entity_name' => $request->removeAllowedLogin,
])->delete();
return redirect('/admin/dashboard')->with('success', 'Entity removed from allowed login list.');
}
/**
* Display the wiki dashboard for wiki functions
*/
public function displayWikiDashboard() {
//Declare some variables
$wikiUsers = array();
$wikiGroups = array();
$tempUsers = DokuUser::all();
$tempGroups = DokuGroupNames::all();
$wikiMembership = DokuMember::all();
//Create a list of users based on id and name for the select form
foreach($tempUsers as $temp) {
$wikiUsers[$temp->id] = $temp->name;
}
asort($wikiUsers);
foreach($tempGroups as $temp) {
$wikiGroups[$temp->id] = $temp->gname;
}
asort($wikiGroups);
return view('admin.dashboards.wiki')->with('wikiUsers', $wikiUsers)
->with('wikiGroups', $wikiGroups)
->with('wikiMembership', $wikiMembership);
}
/**
* Delete a wiki user
*/
public function deleteWikiUser(Request $request) {
$this->validate($request, [
'user' => 'required',
]);
//Declare helper variable
$wikiHelper = new WikiHelper;
$wikiHelper->DeleteWikiUser($request->user);
redirect('/admin/dashboard/wiki')->with('success', 'User: ' . $request->user . ' has been deleted.');
}
/**
* Add a group to a wiki user
*/
public function addWikiUserGroup(Request $request) {
$this->validate($request, [
'user' => 'required', //User Id number
'groupname' => 'required', //Group Id number
]);
//Declare some helper variables
$wikiHelper = new WikiHelper;
//Check to see if the user has the group we are going to add first
if($wikiHelper->UserHasGroup($request->user, $request->groupname)) {
return redirect('/admin/dashboard/wiki')->with('error', 'User already has the group.');
}
//Add the user to the wiki group
$results = $wikiHelper->AddUserToGroup($request->user, $request->groupname);
//Redirect based on the results of the add user to group function
if($results) {
return redirect('/admin/dashboard/wiki')->with('success', 'User added to group for the wiki.');
} else {
return redirect('/admin/dashboard/wiki')->with('error', 'Failed at add user to group, or user was already part of the group.');
}
}
/**
* Remove a group from a wiki user
*/
public function removeWikiUserGroup(Request $request) {
$this->validate($request, [
'user' => 'required',
'groupname' => 'required',
]);
//Declare some helper variables
$wikiHelper = new WikiHelper;
//Check to see if the user has the group we are going to remove them from
if(!$wikiHelper->UserHasGroup($request->user, $request->groupname)) {
return redirect('/admin/dashboard/wiki')->with('error', 'User does not have the group to remove.');
}
//Remove the user from the wiki group
$wikiHelper->RemoveUserFromGroup($request->user, $request->groupname);
return redirect('/admin/dashboard/wiki')->with('success', 'Removed user from group ' . $request->grouopname);
}
/**
* Remove a user from all wiki groups
*/
public function removeWikiUserAllGroups(Request $request) {
$this->validate($request, [
'user' => 'required',
]);
//Declare variable
$wikiHelper = new WikiHelper;
$wikiHelper->RemoveUserFromAllGroups($request->user);
return redirect('/admin/dashboard/wiki')->with('success', 'User successfully removed from all groups.');
}
/**
* Insert a new group for wiki user's to be added to
*/
public function insertNewWikiUserGroup(Request $request) {
$this->validate($request, [
'group' => 'required',
'description' => 'required',
]);
//Declare variable
$wikiHelper = new WikiHelper;
$wikiHelper->AddNewUserGroup($request->group, $request->description);
return redirect('/admin/dashboard/wiki')->with('success', 'Added new user group.');
}
public function purgeWikiUsers(Request $request) {
$this->validate($request, [
'admin' => 'required',
]);
//Declare helper classes
$lookup = new LookupHelper;
$wikiHelper = new WikiHelper;
//Get all of the users from the database
$users = User::all();
//Search the names and verify against the lookup table
//to find the corporation and / or alliance they belong to.
foreach($users as $user) {
//Let's look up the character in the user table by their name.
//If no name is found, then delete the user and have them start over with the wiki permissions
$count = DokuUser::where(['name' => $user->name])->count();
//If the user is found, then check if they are allowed on the wiki.
//If the the count == 0, then the user wasn't found on the wiki, so do nothing.
if($count > 0) {
//If the user is not allowed, then delete the user, otherwise, leave the user untouched
if(!$wikiHelper->AllowedUser($user->name)) {
$uid = $wikiHelper->GetUID($user->name);
$wikiHelper->DeleteWikiUser($uid);
}
}
}
//Get all of the DokuUsers and verify against the Users on the services page
$users = DokuUser::all();
//Search the names and verify against the lookup table to find the corporation / alliance the user belongs to.
foreach($users as $user) {
//Lookup the character in the user table on the services page
$count = User::where(['name' => $user->name])->count();
//If the user is found, then check if they are allowed on the wiki.
//If the count == 0, then delete the user anyways
if($count > 0 ) {
//If the user is not allowed, then delete the user, otherwise, leave them alone.
if(!$wikiHelper->AllowedUser($user->name)) {
$uid = $wikiHelper->GetUID($user->name);
$wikiHelper->DeleteWikiUser($uid);
} else {
$wikiHelper->DeleteWikiUser($user->id);
}
}
}
return redirect('/admin/dashboard/wiki')->with('success', 'Wiki has been purged.');
}
}

View File

@@ -10,13 +10,18 @@ use Khill\Lavacharts\Lavacharts;
use Illuminate\Support\Facades\Auth;
//Libraries
use App\Library\Taxes\TaxesHelper;
use App\Library\Wiki\WikiHelper;
use App\Library\Lookups\LookupHelper;
use App\Library\SRP\SRPHelper;
use App\Library\Helpers\TaxesHelper;
use App\Library\Helpers\LookupHelper;
use App\Library\Helpers\SRPHelper;
//Models
use App\Models\User\User;
use App\Models\User\UserRole;
use App\Models\User\UserPermission;
use App\Models\User\AvailableUserPermission;
use App\Models\User\AvailableUserRole;
use App\Models\Admin\AllowedLogin;
use App\Models\Finances\AllianceWalletJournal;
class AdminDashboardController extends Controller
{
@@ -35,62 +40,401 @@ class AdminDashboardController extends Controller
* Show the administration dashboard.
*/
public function displayAdminDashboard() {
if(auth()->user()->hasRole('Admin') || auth()->user()->hasPermission('moon.admin') || auth()->user()->hasPermission('srp.admin') || auth()->user()->hasPermission('contract.admin')) {
if(auth()->user()->hasRole('Admin') ||
auth()->user()->hasPermission('srp.admin') ||
auth()->user()->hasPermission('contract.admin' ||
auth()->user()->hasPermission('mining.officer'))) {
//Do nothing and continue on
} else {
redirect('/dashboard');
}
//Declare variables we will need
$tHelper = new TaxesHelper();
$srpHelper = new SRPHelper();
$days = 30;
$months = 1;
$lava = new Lavacharts;
//Get the dates for the information being requested
$dates = $tHelper->GetTimeFrameInMonths($months);
//Get the data for the sov expenses for a graph
//Setup the charts
//Setup the chart to be able the show the categories for income
/*
$iChart = $lava->DataTable();
$iChart->addStringColumn('Categories')
->addNumberColumn('ISK')
->addRow(['pi', $pi])
->addRow(['industry', $industry])
->addRow(['reprocessing', $reprocessing])
->addRow(['offices', $office])
->addRow(['industry', $industry])
->addRow(['market', $market])
->addRow(['gate', $gate])
->addRow(['iBuyback', $iBuyback])
->addRow(['renters', $renters])
->addRow(['ops', $ops]);
*/
//Setup the chart to be able to show the categories for expenses
/*
$eChart = $lava->DataTable();
$eCjart->addStringColumn('Categories')
->addNumberColumn('ISK')
->addRow(['sov', $sovBills])
->addRow(['srp', $srpActual])
->addRow(['maintenance', $maintenance])
->addRow(['wardecs', $wardecs])
->addRow(['fcs', $fcs])
->addRow(['keepstar_fuel', $keepstarFuel])
->addRow(['fortizar_fuel', $fortizarFuel])
->addRow(['astrahus_fuel', $astrahusFuel])
->addRow(['sotiyo_fuel', $sotiyoFuel])
->addRow(['azbel_fuel', $azbelFuel])
->addRow(['raitaru_fuel', $raitaruFuel])
->addRow(['beacon_fuel', $beaconFuel])
->addRow(['bridge_fuel', $bridgeFuel])
->addRow(['jammer_fuel', $jammerFuel]);
*/
return view('admin.dashboards.dashboard');
}
/**
* Display users in a paginated format
*/
public function displayUsersPaginated() {
$this->middleware('role:Admin');
//Declare array variables
$user = array();
$permission = array();
$userArr = array();
$permString = null;
$usersArr = User::orderBy('name', 'asc')->paginate(50);
foreach($usersArr as $user) {
$user->role = $user->getRole();
$permCount = UserPermission::where([
'character_id' => $user->character_id,
])->count();
if($permCount > 0) {
$perms = UserPermission::where([
'character_id' => $user->character_id,
])->get('permission')->toArray();
foreach($perms as $perm) {
$permString .= $perm['permission'] . ', ';
}
$user->permission = $permString;
} else {
$user->permission = 'No Permissions';
}
}
return view('admin.dashboards.userspaged')->with('usersArr', $usersArr);
}
/**
* Search users for a specific user
*/
public function searchUsers(Request $request) {
$this->middleware('role:Admin');
//Declare array variables
$user = array();
$permission = array();
$userArr = array();
$permString = null;
//Validate the input from the form
$this->validate($request, [
'parameter' => 'required',
]);
$usersArr = User::where('name', 'like', $request->parameter . "%")->paginate(50);
foreach($usersArr as $user) {
$user->role = $user->getRole();
$permCount = UserPermission::where([
'character_id' => $user->character_id,
])->count();
if($permCount > 0) {
$perms = UserPermission::where([
'character_id' => $user->character_id,
])->get('permission')->toArray();
foreach($perms as $perm) {
$permString .= $perm['permission'] . ', ';
}
$user->permission = $permString;
} else {
$user->permission = 'No Permissions';
}
}
return view('admin.dashboards.users.searched')->with('usersArr', $usersArr);
}
/**
* Display the allowed logins
*/
public function displayAllowedLogins() {
$this->middleware('role:Admin');
//Declare array variables
$entities = array();
/** Entities for allowed logins */
$legacys = AllowedLogin::where(['login_type' => 'Legacy'])->pluck('entity_name')->toArray();
$renters = AllowedLogin::where(['login_type' => 'Renter'])->pluck('entity_name')->toArray();
//Compile a list of entities by their entity_id
foreach($legacys as $legacy) {
$entities[] = $legacy;
}
foreach($renters as $renter) {
$entities[] = $renter;
}
return view('admin.dashboards.allowed_logins')->with('entities', $entities);
}
/**
* Display the taxes for the alliance
*
*/
public function displayTaxes() {
$this->middleware('role:Admin');
//Declare variables needed for displaying items on the page
$months = 6;
$pi = array();
$industry = array();
$reprocessing = array();
$office = array();
$corpId = 98287666;
$srpActual = array();
$srpLoss = array();
$miningTaxes = array();
$miningTaxesLate = array();
/** Taxes Pane */
//Declare classes needed for displaying items on the page
$tHelper = new TaxesHelper();
$srpHelper = new SRPHelper();
//Get the dates for the tab panes
$dates = $tHelper->GetTimeFrameInMonths($months);
//Get the data for the Taxes Pane
foreach($dates as $date) {
//Get the srp actual pay out for the date range
$srpActual[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($srpHelper->GetAllianceSRPActual($date['start'], $date['end']), 2, ".", ","),
];
//Get the srp loss value for the date range
$srpLoss[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($srpHelper->GetAllianceSRPLoss($date['start'], $date['end']), 2, ".", ","),
];
//Get the pi taxes for the date range
$pis[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetPIGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the industry taxes for the date range
$industrys[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetIndustryGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the reprocessing taxes for the date range
$reprocessings[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetReprocessingGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the office taxes for the date range
$offices[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetOfficeGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the market taxes for the date range
$markets[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetAllianceMarketGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the jump gate taxes for the date range
$jumpgates[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetJumpGateGross($date['start'], $date['end']), 2, ".", ","),
];
$miningTaxes[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetMoonMiningTaxesGross($date['start'], $date['end']), 2, ".", ","),
];
$miningTaxesLate[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetMoonMiningTaxesLateGross($date['start'], $date['end']), 2, ".", ","),
];
$moonRentalTaxes[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetMoonRentalTaxesGross($date['start'], $date['end']), 2, ".", ","),
];
}
return view('admin.dashboards.taxes')->with('pis', $pis)
->with('industrys', $industrys)
->with('offices', $offices)
->with('markets', $markets)
->with('jumpgates', $jumpgates)
->with('reprocessings', $reprocessings)
->with('srpActual', $srpActual)
->with('srpLoss', $srpLoss)
->with('miningTaxes', $miningTaxes)
->with('miningTaxesLate', $miningTaxesLate)
->with('moonRentalTaxes', $moonRentalTaxes);
}
/**
* Display the modify user form
*/
public function displayModifyUser(Request $request) {
$this->middleware('role:Admin');
$permissions = array();
$roles = array();
$name = $request->user;
//Get the user information from the name
$user = User::where(['name' => $name])->first();
$perms = AvailableUserPermission::all();
foreach($perms as $p) {
$permissions[$p->permission] = $p->permission;
}
$tempRoles = AvailableUserRole::all();
foreach($tempRoles as $tempRole) {
array_push($roles, [
$tempRole['role'] => $tempRole['role']
]);
}
$role = $user->getRole();
//Pass the user information to the page for hidden text entries
return view('admin.user.modify')->with('user', $user)
->with('permissions', $permissions)
->with('role', $role)
->with('roles', $roles);
}
/**
* Modify a user's role
*/
public function modifyRole(Request $request) {
$this->middleware('role:Admin');
$this->validate($request, [
'user' => 'required',
'role' => 'required',
]);
UserRole::where(['character_id' => $request->user])->update([
'role' => $request->role,
]);
return redirect('/admin/dashboard/users')->with('success', "User: " . $request->user . " has been modified to a new role: " . $request->role . ".");
}
public function addPermission(Request $request) {
$this->middleware('role:Admin');
//Get the user and permission from the form
$character = $request->user;
$permission = $request->permission;
//Check to see if the character already has the permission
$check = UserPermission::where(['character_id' => $character, 'permission' => $permission])->get(['permission']);
if(!isset($check[0]->permission)) {
$perm = new UserPermission;
$perm->character_id = $character;
$perm->permission = $permission;
$perm->save();
return redirect('/admin/dashboard/users')->with('success', 'User udpated!');
} else {
return redirect('/admin/dashboard/users')->with('error', 'User not updated or already has the permission.');
}
}
/**
* Delete a user to reset their permissions
*/
public function removeUser(Request $request) {
$this->middleware('role:Admin');
//Get the user from the form to delete
$user = $request->user;
//Get the user data from the table
$data = User::where(['name' => $user])->get();
//Delete the user's ESI Scopes
DB::table('EsiScopes')->where(['character_id' => $data[0]->character_id])->delete();
//Delete the user's ESI Token
DB::table('EsiTokens')->where(['character_id' => $data[0]->character_id])->delete();
//Delete the user's role from the roles table
DB::table('user_roles')->where(['character_id' => $data[0]->character_id])->delete();
//Delete the user from the user table
DB::table('users')->where(['character_id' => $data[0]->character_id])->delete();
return redirect('/admin/dashboard/users')->with('success', 'User deleted from the site.');
}
/**
* Add an entity to the allowed login table
*/
public function addAllowedLogin(Request $request) {
$this->middleware('role:Admin');
//Set the parameters to validate the form
$this->validate($request, [
'allowedEntityId' => 'required',
'allowedEntityType' => 'required',
'allowedEntityName' => 'required',
'allowedLoginType' => 'required',
]);
//Check to see if the entity exists in the database already
$found = AllowedLogin::where([
'entity_type' => $request->allowedentityType,
'entity_name' => $request->allowedEntityName,
])->count();
if($found != 0) {
AllowedLogin::where([
'entity_type' => $request->allowedEntityType,
'entity_name' => $request->allowedEntityName,
])->update([
'entity_id' => $request->allowedEntityId,
'entity_type' => $request->allowedEntityType,
'entity_name' => $request->allowedEntityName,
'login_type' => $request->allowedLoginType,
]);
} else {
$login = new AllowedLogin;
$login->entity_id = $request->allowedEntityId;
$login->entity_name = $request->allowedEntityName;
$login->entity_type = $request->allowedEntityType;
$login->login_type = $request->allowedLoginType;
$login->save();
}
return redirect('/admin/dashboard')->with('success', 'Entity added to allowed login list.');
}
/**
* Remove an entity from the allowed login table
*/
public function removeAllowedLogin(Request $request) {
$this->middleware('role:Admin');
//Set the parameters to validate the form
$this->validate($request, [
'removeAllowedLogin' => 'required',
]);
AllowedLogin::where([
'entity_name' => $request->removeAllowedLogin,
])->delete();
return redirect('/admin/dashboard')->with('success', 'Entity removed from allowed login list.');
}
/**
* Show journal entries in a table for admins from alliance wallets
*/
public function displayJournalEntries() {
$this->middleware('role:Admin');
$date = Carbon::now()->subDays(60);
$journal = AllianceWalletJournal::where('date', '>=', $date)
->where([
'corporation_id' => 98287666,
'ref_type' => 'player_donation',
])->orderByDesc('date',)->get(['amount', 'reason', 'description', 'date']);
return view('admin.dashboards.walletjournal')->with('journal', $journal);
}
}

View File

@@ -10,6 +10,10 @@ use Illuminate\Support\Facades\DB;
use Khill\Lavacharts\Lavacharts;
use Carbon\Carbon;
//Application Library
use App\Library\Esi\Esi;
use App\Library\Helpers\StructureHelper;
//Models
use App\Models\Esi\EsiScope;
use App\Models\Esi\EsiToken;
@@ -17,6 +21,8 @@ use App\Models\User\UserPermission;
use App\Models\User\UserRole;
use App\Models\SRP\SRPShip;
use App\Models\User\UserAlt;
use App\Models\MiningTax\Invoice;
use App\Models\MiningTax\Ledger;
class DashboardController extends Controller
{
@@ -28,7 +34,7 @@ class DashboardController extends Controller
public function __construct()
{
$this->middleware('auth');
$this->middleware('role:Guest');
$this->middleware('role:User');
}
/**
@@ -42,9 +48,19 @@ class DashboardController extends Controller
$open = array();
$approved = array();
$denied = array();
$ores = array();
$altCount = null;
$alts = null;
$structures = array();
$esiHelper = new Esi;
$config = config('esi');
$sHelper = new StructureHelper($config['primary'], $config['corporation']);
$lava = new Lavacharts;
/**
* Alt Counts
*/
//Get the number of the user's alt which are registered so we can process the alt's on the main dashboard page
$altCount = UserAlt::where([
'main_id' => auth()->user()->character_id,
@@ -57,6 +73,9 @@ class DashboardController extends Controller
])->get();
}
/**
* SRP Items
*/
//See if we can get all of the open SRP requests
$openCount = SRPShip::where([
'character_id' => auth()->user()->character_id,
@@ -160,8 +179,6 @@ class DashboardController extends Controller
}
//Create a chart of number of approved, denied, and open requests via a fuel gauge chart
$lava = new Lavacharts;
$adur = $lava->DataTable();
$adur->addStringColumn('Type')
@@ -184,13 +201,93 @@ class DashboardController extends Controller
],
]);
/**
* Mining Tax Items
*/
//Check for the correct scopes
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-industry.read_corporation_mining.v1')) {
return redirect('/dashboard')->with('error', 'Tell the nub Minerva to register the correct scopes for the services site.');
}
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Get the esi data for extractions
try {
$extractions = $esi->invoke('get', '/corporation/{corporation_id}/mining/extractions', [
'corporation_id' => $config['corporation'],
]);
} catch(RequestFailedException $e) {
Log::critical('Could not retrieve the extractions from ESI in DisplayExtractionCalendar in MiningTaxesController');
return redirect('/dashboard')->with('error', 'Failed to get extraction data from ESI');
}
/**
* Create a 3 month calendar for the past, current, and future extractions
*/
//Create the data tables
$calendar = $lava->DataTable();
$calendar->addDateTimeColumn('Date')
->addNumberColumn('Total');
foreach($extractions as $extraction) {
$sInfo = $sHelper->GetStructureInfo($extraction->structure_id);
array_push($structures, [
'date' => $esiHelper->DecodeDate($extraction->chunk_arrival_time),
'total' => 0,
]);
}
foreach($extractions as $extraction) {
for($i = 0; $i < sizeof($structures); $i++) {
//Create the dates in a carbon object, then only get the Y-m-d to compare.
$tempStructureDate = Carbon::createFromFormat('Y-m-d H:i:s', $structures[$i]['date'])->toDateString();
$extractionDate = Carbon::createFromFormat('Y-m-d H:i:s', $esiHelper->DecodeDate($extraction->chunk_arrival_time))->toDateString();
//check if the dates are equal then increase the total by 1
if($tempStructureDate == $extractionDate) {
$structures[$i]['total'] += 1;
}
}
}
foreach($structures as $structure) {
$calendar->addRow([
$structure['date'],
$structure['total'],
]);
}
$lava->CalendarChart('Extractions', $calendar, [
'title' => 'Upcoming Extractions',
'unusedMonthOutlineColor' => [
'stroke' => '#ECECEC',
'strokeOpacity' => 0.75,
'strokeWidth' => 1,
],
'dayOfWeekLabel' => [
'color' => '#4f5b0d',
'fontSize' => 16,
'italic' => true,
],
'noDataPattern' => [
'color' => '#DDD',
'backgroundColor' => '#11FFFF',
],
'colorAxis' => [
'values' => [0, 5],
'colors' => ['green', 'red'],
],
]);
return view('dashboard')->with('openCount', $openCount)
->with('approvedCount', $approvedCount)
->with('deniedCount', $deniedCount)
->with('open', $open)
->with('approved', $approved)
->with('denied', $denied)
->with('lava', $lava);
->with('lava', $lava)
->with('calendar', $calendar);
}
/**

View File

@@ -1,400 +0,0 @@
<?php
namespace App\Http\Controllers\Dashboard;
//Internal Library
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Carbon\Carbon;
use Khill\Lavacharts\Lavacharts;
//Libraries
use App\Library\Taxes\TaxesHelper;
use App\Library\Lookups\LookupHelper;
use App\Library\SRP\SRPHelper;
//Models
use App\Models\User\User;
use App\Models\Doku\DokuGroupNames;
use App\Models\Doku\DokuMember;
use App\Models\Doku\DokuUser;
use App\Models\SRP\SrpFleetType;
use App\Models\SRP\SRPShip;
use App\Models\SRP\SrpShipType;
use App\Models\SRP\SrpPayout;
class StatisticsController extends Controller
{
/**
* Create a new controller instance
*
* @return void
*/
public function __construct() {
$this->middleware('auth');
}
/**
* Display Jump Bridge Statistics
*/
public function displayJumpBridgeStatistics() {
$this->middleware('role:Admin');
$lava = new Lavacharts;
}
/**
* Display Taxes Statistics
*/
public function displayTaxes() {
$this->middleware('role:Admin');
//Declare variables needed for displaying items on the page
$months = 3;
$pi = array();
$industry = array();
$reprocessing = array();
$office = array();
$corpId = 98287666;
$srpActual = array();
$srpLoss = array();
/** Taxes Pane */
//Declare classes needed for displaying items on the page
$tHelper = new TaxesHelper;
$srpHelper = new SRPHelper;
//Get the dates for the tab panes
$dates = $tHelper->GetTimeFrameInMonths($months);
//Get the data for the Taxes Pane
foreach($dates as $date) {
//Get the srp actual pay out for the date range
$srpActual[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($srpHelper->GetAllianceSRPActual($date['start'], $date['end']), 2, ".", ","),
];
//Get the srp loss value for the date range
$srpLoss[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($srpHelper->GetAllianceSRPLoss($date['start'], $date['end']), 2, ".", ","),
];
//Get the pi taxes for the date range
$pis[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetPIGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the industry taxes for the date range
$industrys[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetIndustryGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the reprocessing taxes for the date range
$reprocessings[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetReprocessingGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the office taxes for the date range
$offices[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetOfficeGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the market taxes for the date range
$markets[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetAllianceMarketGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the jump gate taxes for the date range
$jumpgates[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetJumpGateGross($date['start'], $date['end']), 2, ".", ","),
];
}
return view('admin.dashboards.taxes')->with('pis', $pis)
->with('industrys', $industrys)
->with('offices', $offices)
->with('markets', $markets)
->with('jumpgates', $jumpgates)
->with('reprocessings', $reprocessings)
->with('srpActual', $srpActual)
->with('srpLoss', $srpLoss);
}
/**
* Display wiki statistics
*/
public function displayWikiStatistics() {
$this->middleware('role:Admin');
}
/**
* Display SRP Statistics
*/
public function displaySRPStatistics() {
$months = 3;
$barChartData = array();
$start = Carbon::now()->toDateTimeString();
$end = Carbon::now()->subMonths(1)->toDateTimeString();
//Declare the Lavacharts variable
$lava = new Lavacharts;
//We need a function from this library rather than recreating a new library
$srpHelper = new SRPHelper();
/**
* Pie chart for the number of approved, denied, and under review payouts currently in the system.
*/
//Get the count of open srp requests
$pieOpen = SRPShip::where([
'approved' => 'Under Review',
['created_at', '>=', $end],
])->count();
//Get the count of approved srp requests
$pieApproved = SRPShip::where([
'approved' => 'Approved',
['created_at', '>=', $end],
])->count();
//Get the count of denied srp requests
$pieDenied = SRPShip::where([
'approved' => 'Denied',
['created_at', '>=', $end],
])->count();
//Create a new datatable for the lavachart.
$srp = $lava->DataTable();
//Add string columns, number columns, and data rows for the chart
$srp->addStringColumn('ISK Value')
->addNumberColumn('ISK')
->addRow(['Approved', $pieApproved])
->addRow(['Denied', $pieDenied])
->addRow(['Under Review', $pieOpen]);
//Create the pie chart in memory with any options needed to render the chart
$lava->PieChart('SRP Stats', $srp, [
'title' => 'SRP Stats',
'is3D' => true,
]);
/**
* Gauage chart for showing number of open srp requests
*/
//Create a new datatable in the
$adur = $lava->DataTable();
//Add string columns, number columns, and data row for the chart
$adur->addStringColumn('Type')
->addNumberColumn('Value')
->addRow(['Under Review', $pieOpen]);
//Create the gauge chart with any options needed to render the chart
$lava->GaugeChart('SRP', $adur, [
'width' => 400,
'greenFrom' => 0,
'greenTo' => 20,
'yellowFrom' => 20,
'yellowTo' => 40,
'redFrom' => 40,
'redTo' => 100,
'majorTicks' => [
'Safe',
'Critical',
],
]);
/**
* Create a vertical chart of all of the cost codes for the ships being SRP'ed.
* The chart will be by cost code of ships being replaced
*/
//Declare the data table
$costCodeChart = $lava->DataTable();
//Get the approved, under review, and denied cost codes and amounts
$t1fdcApproved = SRPShip::where([
'approved' => 'Approved',
'ship_type' => 'T1FDC',
])->sum('paid_value');
$t1fdcUnderReview = SRPShip::where([
'approved' => 'Under Review',
'ship_type' => 'T1FDC',
])->sum('loss_value');
$t1fdcDenied = SRPShip::where([
'approved' => 'Denied',
'ship_type' => 'T1FDC',
])->sum('loss_value');
$t1bcApproved = SRPShip::where([
'approved' => 'Approved',
'ship_type' => 'T1BC',
])->sum('paid_value');
$t1bcUnderReview = SRPShip::where([
'approved' => 'Under Review',
'ship_type' => 'T1BC',
])->sum('loss_value');
$t1bcDenied = SRPShip::where([
'approved' => 'Denied',
'ship_type' => 'T1BC',
])->sum('loss_value');
$t2fdApproved = SRPShip::where([
'approved' => 'Approved',
'ship_type' => 'T2FD',
])->sum('paid_value');
$t2fdUnderReview = SRPShip::where([
'approved' => 'Under Review',
'ship_type' => 'T2FD',
])->sum('loss_value');
$t2fdDenied = SRPShip::where([
'approved' => 'Denied',
'ship_type' => 'T2FD',
])->sum('loss_value');
$t3dApproved = SRPShip::where([
'approved' => 'Approved',
'ship_type' => 'T3D',
])->sum('paid_value');
$t3dUnderReview = SRPShip::where([
'approved' => 'Under Review',
'ship_type' => 'T3D',
])->sum('loss_value');
$t3dDenied = SRPShip::where([
'approved' => 'Denied',
'ship_type' => 'T3D',
])->sum('loss_value');
$t1t2logiApproved = SRPShip::where([
'approved' => 'Approved',
'ship_type' => 'T1T2Logi',
])->sum('paid_value');
$t1t2logiUnderReview = SRPShip::where([
'approved' => 'Under Review',
'ship_type' => 'T1T2Logi',
])->sum('loss_value');
$t1t2logiDenied = SRPShip::where([
'approved' => 'Denied',
'ship_type' => 'T1T2Logi',
])->sum('loss_value');
$reconsApproved = SRPShip::where([
'approved' => 'Approved',
'ship_type' => 'REC',
])->sum('paid_value');
$reconsUnderReview = SRPShip::where([
'approved' => 'Under Review',
'ship_type' => 'REC',
])->sum('loss_value');
$reconsDenied = SRPShip::where([
'approved' => 'Denied',
'ship_type' => 'REC',
])->sum('loss_value');
$t2cApproved = SRPShip::where([
'approved' => 'Approved',
'ship_type' => 'T2C',
])->sum('paid_value');
$t2cUnderReview = SRPShip::where([
'approved' => 'Under Review',
'ship_type' => 'T2C',
])->sum('loss_value');
$t2cDenied = SRPShip::where([
'approved' => 'Denied',
'ship_type' => 'T2C',
])->sum('loss_value');
$t3cApproved = SRPShip::where([
'approved' => 'Approved',
'ship_type' => 'T3C',
])->sum('paid_value');
$t3cUnderReview = SRPShip::where([
'approved' => 'Under Review',
'ship_type' => 'T3C',
])->sum('loss_value');
$t3cDenied = SRPShip::where([
'approved' => 'Denied',
'ship_type' => 'T3C',
])->sum('loss_value');
$commandApproved = SRPShip::where([
'approved' => 'Approved',
'ship_type' => 'COM',
])->sum('paid_value');
$commandUnderReview = SRPShip::where([
'approved' => 'Under Review',
'ship_type' => 'COM',
])->sum('loss_value');
$commandDenied = SRPShip::where([
'approved' => 'Denied',
'ship_type' => 'COM',
])->sum('loss_value');
$interdictorApproved = SRPShip::where([
'approved' => 'Approved',
'ship_type' => 'INTD',
])->sum('paid_value');
$interdictorUnderReview = SRPShip::where([
'approved' => 'Under Review',
'ship_type' => 'INTD',
])->sum('loss_value');
$interdictorDenied = SRPShip::where([
'approved' => 'Denied',
'ship_type' => 'INTD',
])->sum('loss_value');
$t1bsApproved = SRPShip::where([
'approved' => 'Approved',
'ship_type' => 'T1BS',
])->sum('paid_value');
$t1bsUnderReview = SRPShip::where([
'approved' => 'Under Review',
'ship_type' => 'T1BS',
])->sum('loss_value');
$t1bsDenied = SRPShip::where([
'approved' => 'Denied',
'ship_type' => 'T1BS',
])->sum('loss_value');
$dksApproved = SRPShip::where([
'approved' => 'Approved',
'ship_type' => 'DKS',
])->sum('paid_value');
$dksUnderReview = SRPShip::where([
'approved' => 'Under Review',
'ship_type' => 'DKS',
])->sum('loss_value');
$dksDenied = SRPShip::where([
'approved' => 'Denied',
'ship_type' => 'DKS',
])->sum('loss_value');
//Add string column, number columns.
$costCodeChart->addStringColumn('SRP Costs')
->addNumberColumn('Approved')
->addNumberColumn('Under Review')
->addNumberColumn('Denied')
->addRow(['T1FDC', $t1fdcApproved, $t1fdcUnderReview, $t1fdcDenied])
->addRow(['T1BC', $t1bcApproved, $t1bcUnderReview, $t1bcDenied])
->addRow(['T1BS', $t1bsApproved, $t1bsUnderReview, $t1bsDenied])
->addRow(['T2FD', $t2fdApproved, $t2fdUnderReview, $t2fdDenied])
->addRow(['T2C', $t2cApproved, $t2cUnderReview, $t2cDenied])
->addRow(['T1T2Logi', $t1t2logiApproved, $t1t2logiUnderReview, $t1t2logiDenied])
->addRow(['T3D', $t3dApproved, $t3dUnderReview, $t3dDenied])
->addRow(['T3C', $t3cApproved, $t3cUnderReview, $t3cDenied])
->addRow(['RECON', $reconsApproved, $reconsUnderReview, $reconsDenied])
->addRow(['COMMAND', $commandApproved, $commandUnderReview, $commandDenied])
->addRow(['DKS', $dksApproved, $dksUnderReview, $dksDenied]);
$lava->ColumnChart('Cost Codes', $costCodeChart, [
'columns' => 4,
'title' => 'Cost Code SRP Chart',
'titleTextStyle' => [
'color' => '#eb6b2c',
'fontSize' => 14,
],
]);
return view('srp.admin.statistics')->with('lava', $lava);
}
}

View File

@@ -0,0 +1,322 @@
<?php
namespace App\Http\Controllers\Finances;
//Internal Libraries
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Carbon\Carbon;
use Log;
use Khill\Lavacharts\Lavacharts;
//Application Library
use App\Library\Helpers\TaxesHelper;
use App\Library\Helpers\LookupHelper;
use App\Library\Helpers\SRPHelper;
//Models
use App\Models\User\User;
class FinanceController extends Controller
{
//Construct
public function __construct() {
$this->middleware('auth');
$this->middleware('role:User');
$this->middleware('permission:ceo');
}
/**
* Display the finances of the alliance with cards like the admin dashboard
*/
public function displayCards() {
$months = 3;
$pi = array();
$industry = array();
$reprocessing = array();
$office = array();
$corpId = 98287666;
$srpActual = array();
$srpLoss = array();
$miningTaxes = array();
$miningTaxesLate = array();
/** Taxes Pane */
//Declare classes needed for displaying items on the page
$tHelper = new TaxesHelper();
$srpHelper = new SRPHelper();
//Get the dates for the tab panes
$dates = $tHelper->GetTimeFrameInMonths($months);
//Get the data for the Taxes Pane
foreach($dates as $date) {
//Get the srp actual pay out for the date range
$srpActual[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($srpHelper->GetAllianceSRPActual($date['start'], $date['end']), 2, ".", ","),
];
//Get the srp loss value for the date range
$srpLoss[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($srpHelper->GetAllianceSRPLoss($date['start'], $date['end']), 2, ".", ","),
];
//Get the pi taxes for the date range
$pis[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetPIGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the industry taxes for the date range
$industrys[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetIndustryGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the reprocessing taxes for the date range
$reprocessings[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetReprocessingGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the office taxes for the date range
$offices[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetOfficeGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the market taxes for the date range
$markets[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetAllianceMarketGross($date['start'], $date['end']), 2, ".", ","),
];
//Get the jump gate taxes for the date range
$jumpgates[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetJumpGateGross($date['start'], $date['end']), 2, ".", ","),
];
$miningTaxes[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetMoonMiningTaxesGross($date['start'], $date['end']), 2, ".", ","),
];
$miningTaxesLate[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetMoonMiningTaxesLateGross($date['start'], $date['end']), 2, ".", ","),
];
$moonRentalTaxes[] = [
'date' => $date['start']->toFormattedDateString(),
'gross' => number_format($tHelper->GetMoonRentalTaxesGross($date['start'], $date['end']), 2, ".", ","),
];
}
return view('finances.display.card')->with('pis', $pis)
->with('industrys', $industrys)
->with('offices', $offices)
->with('markets', $markets)
->with('jumpgates', $jumpgates)
->with('reprocessings', $reprocessings)
->with('srpActual', $srpActual)
->with('srpLoss', $srpLoss)
->with('miningTaxes', $miningTaxes)
->with('miningTaxesLate', $miningTaxesLate)
->with('moonRentalTaxes', $moonRentalTaxes);
}
/**
* Display a graph of the financial outlook of the alliance
*/
public function displayOutlook() {
$months = 12;
$income = array();
$expenses = array();
$totalPi = 0.00;
$totalIndustry = 0.00;
$totalReprocessing = 0.00;
$totalOffices = 0.00;
$totalMarket = 0.00;
$totalJumpGate = 0.00;
$totalMiningTaxes = 0.00;
$totalMoonRentals = 0.00;
$totalSrp = 0.00;
$totalCapEx = 0.00;
$totalSovExpenses = 0.00;
/**
* Declare classes needed for displaying items on the page
*/
$tHelper = new TaxesHelper();
$srpHelper = new SRPHelper();
//Get the dates to process
$dates = $tHelper->GetTimeFrameInMonths($months);
/**
* Setup the chart variables
*/
$lava = new Lavacharts;
$finances = $lava->DataTable();
$incomeStreams = $lava->DataTable();
$expenseStreams = $lava->DataTable();
$finances->addDateColumn('Month')
->addNumberColumn('Income')
->addNumberColumn('Expenses')
->addNumberColumn('Difference')
->setDateTimeFormat('Y');
/**
* Get the income and expenses data for date range
*/
foreach($dates as $date) {
/**
* Get the individual expenses.
* Will totalize later in the foreach loop
*/
$srpActual = $srpHelper->GetAllianceSRPActual($date['start'], $date['end']);
$capEx = 0.00;
$sovExpenses = 3000000000.00;
/**
* Get the individual incomes.
* Will totalize later in the foreach loop
*/
$pi = $tHelper->GetPIGross($date['start'], $date['end']);
$industry = $tHelper->GetIndustryGross($date['start'], $date['end']);
$reprocessing = $tHelper->GetReprocessingGross($date['start'], $date['end']);
$offices = $tHelper->GetOfficeGross($date['start'], $date['end']);
$market = $tHelper->GetAllianceMarketGross($date['start'], $date['end']);
$jumpgate = $tHelper->GetJumpGateGross($date['start'], $date['end']);
$miningTaxes = $tHelper->GetMoonMiningTaxesGross($date['start'], $date['end']) + $tHelper->GetMoonMiningTaxesLateGross($date['start'], $date['end']);
$moonRentals = $tHelper->GetMoonRentalTaxesGross($date['start'], $date['end']);
/**
* Totalize the expenses
*/
$expenses = (($srpActual + $capEx + $sovExpenses) / 1000000.00);
/**
* Totalize the incomes
*/
$incomes = (($pi +
$industry +
$reprocessing +
$offices +
$market +
$jumpgate +
$miningTaxes +
$moonRentals) / 1000000.00);
/**
* Get the difference between income and expenses
*/
$difference = $incomes - $expenses;
//Add the rows for the combo column chart
$finances->addRow([$date['start'], $incomes, $expenses, $difference]);
//Add up each of the income streams, then the expenses
$totalPi += $pi;
$totalIndustry += $industry;
$totalReprocessing += $reprocessing;
$totalOffices += $offices;
$totalMarket += $market;
$totalJumpGate += $jumpgate;
$totalMiningTaxes += $miningTaxes;
$totalMoonRentals += $moonRentals;
$totalSrp += $srpActual;
$totalCapEx = $capEx;
$totalSovExpenses += $sovExpenses;
}
/**
* Finish setting up the lava chart before passing it to the blade template
*/
$lava->ComboChart('Finances', $finances, [
'title' => 'Alliance Finances',
'titleTextStyle' => [
'color' => 'rgb(123, 65, 80)',
'fontSize' => 16,
],
'legend' => [
'position' => 'in',
],
'seriesType' => 'bars',
'series' => [
2 => [
'type' => 'line',
],
],
'height' => 360,
]);
/**
* Setup the 3d pie chart for income streams
*/
$incomeStreams->addStringColumn('Incomes')
->addNumberColumn('ISK')
->addRow(['PI', $totalPi])
->addRow(['Industry', $totalIndustry])
->addRow(['Reprocessing', $totalReprocessing])
->addRow(['Offices', $totalOffices])
->addRow(['Market', $totalMarket])
->addRow(['Jump Gate', $totalJumpGate])
->addRow(['Mining Taxes', $totalMiningTaxes])
->addRow(['Moon Rentals', $totalMoonRentals]);
/**
* Setup the 3d pie chart for expense streams
*/
$expenseStreams->addStringColumn('Expenses')
->addNumberColumn('ISK')
->addRow(['SRP', $totalSrp])
->addRow(['Cap Ex', $totalCapEx])
->addRow(['Sov Expenses', $totalSovExpenses]);
/**
* Setup the pie chart data for income streams
*/
$lava->PieChart('Incomes', $incomeStreams, [
'title' => 'Alliance Income Streams',
'is3D' => true,
'height' => 360,
]);
/**
* Setup the pie chart data for expenses
*/
$lava->PieChart('Expenses', $expenseStreams, [
'title' => 'Alliance Expenses',
'is3D' => true,
'height' => 360,
'slices' => [
['offset' => 0.15],
['offset' => 0.25],
],
]);
return view('finances.display.outlook')->with('lava', $lava);
}
/**
* Request an amount of ISK to fund a capital project
*/
public function requestFundingDisplay() {
}
/**
* Store the request for the capital project
*/
public function storeFundingRequest() {
}
/**
* Delete a request for the capital project
*/
public function deleteFundingRequest() {
}
}

View File

@@ -1,148 +0,0 @@
<?php
namespace App\Http\Controllers\Flex;
//Internal Library
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;
use DB;
use Carbon\Carbon;
//Models
use App\Models\Flex\FlexStructure;
//Library
use App\Library\Lookups\LookupHelper;
use App\Library\Esi\Esi;
class FlexAdminController extends Controller
{
//Constructor
public function __construct() {
$this->middleware('auth');
$this->middleware('role:Admin');
}
/**
* Function to display all active flex structures and
* the information regarding the flex structure
*/
public function displayFlexStructures() {
//Get the structures from the database
$structures = FlexStructure::all();
//Return the view with the data
return view('flex.list')->with('structures', $structures);
}
/**
* Function to display form for adding new flex structure
*/
public function displayAddFlexStructure() {
return view('flex.add');
}
/**
* Function to add new flex structure to the database
*/
public function addFlexStructure(Request $request) {
$this->validate($request, [
'requestor_name' => 'required',
'requestor_corp_name' => 'required',
'system' => 'required',
'structure_type' => 'required',
'structure_cost' => 'required',
]);
//Delcare variables and classes
$lookup = new LookupHelper;
//From the character name find the character id
$charId = $lookup->CharacterNameToId($request->requestor_name);
//From the corporation name find the corporation id
$corpId = $lookup->CorporationNameToId($request->requestor_corp_name);
//From the system name find the system id
$systemId = $lookup->SystemNameToId($request->system);
//Create the database model
$flex = new FlexStructure;
$flex->requestor_id = $charId;
$flex->requestor_name = $request->requestor_name;
$flex->requestor_corp_id = $corpId;
$flex->requestor_corp_name = $request->requestor_corp_name;
$flex->system_id = $systemId;
$flex->system = $request->system;
$flex->structure_type = $request->structure_type;
$flex->structure_cost = $request->structure_cost;
if(isset($request->paid_until)) {
$flex->paid_until = $request->paid_until;
}
$flex->save();
return redirect('/flex/display')->with('success', 'Flex Structure Added.');
}
/**
* Function to update paid until section of the flex structure in the database
*/
public function updateFlexStructure(Request $request) {
$this->validate($request, [
'paid_until' => 'required',
'requestor_id' => 'required',
'requestor_corp_id' => 'required',
'system_id' => 'required',
'structure_type' => 'required',
]);
FlexStructure::where([
'requestor_id' => $request->requestor_id,
'requestor_corp_id' => $request->requestor_corp_id,
'system_id' => $request->system_id,
'structure_type' => $request->structure_type,
])->update([
'paid_until' => $request->paid_until,
]);
return redirect('/flex/display')->with('success', 'Flex Structure Updated.');
}
/**
* Funciton to remove flex structure from the database
*/
public function removeFlexStructure(Request $request) {
$this->validate($request, [
'requestor_id' => 'required',
'requestor_corp_id' => 'required',
'system_id' => 'required',
'structure_type' => 'required',
]);
$count = FlexStructure::where([
'requestor_id' => $request->requestor_id,
'requestor_corp_id' => $request->requestor_corp_id,
'system_id' => $request->system_id,
'structure_type' => $request->structure_type,
])->count();
if($count > 0) {
FlexStructure::where([
'requestor_id' => $request->requestor_id,
'requestor_corp_id' => $request->requestor_corp_id,
'system_id' => $request->system_id,
'structure_type' => $request->structure_type,
])->delete();
return redirect('/flex/display')->with('success', 'Flex Structure Entry Removed.');
} else {
return redirect('/flex/display')->with('error', 'Could not find flex structure to delete.');
}
}
}

View File

@@ -13,11 +13,13 @@ use Auth;
use Charts;
//Library Helpers
use App\Library\Assets\AssetHelper;
use App\Library\Structures\StructureHelper;
use App\Library\Helpers\AssetHelper;
use App\Library\Helpers\StructureHelper;
//Models
use App\Models\Structure\Structure;
use App\Models\Structure\Asset;
use App\Models\Structure\Service;
class FuelController extends Controller
{

View File

@@ -1,37 +0,0 @@
<?php
namespace App\Http\Controllers\Logistics;
//Internal Libraries
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Log;
//Models
use App\Models\Logistics\AnchorStructure;
class StructureRequestAdminController extends Controller
{
public function __construct() {
$this->middleware('auth');
$this->middleware('permission:fc.team');
}
public function displayRequests() {
$reqs = AnchorStructure::all();
return view('structurerequest.display.structurerequests')->with('reqs', $reqs);
}
public function deleteRequest(Request $request) {
$this->validate($request, [
'id' => 'required',
]);
AnchorStructure::where([
'id' => $request->id,
])->delete();
return redirect('/structures/display/requests');
}
}

View File

@@ -1,83 +0,0 @@
<?php
namespace App\Http\Controllers\Logistics;
//Internal Libraries
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Log;
use Carbon\Carbon;
//Jobs
use App\Jobs\ProcessSendEveMailJob;
//Library Helpers
use App\Library\Lookups\LookupHelper;
//Models
use App\Models\Logistics\AnchorStructure;
use App\Models\User\UserPermission;
class StructureRequestController extends Controller
{
public function __construct() {
$this->middleware('auth');
$this->middleware('role:User');
}
public function displayForm() {
return view('structurerequest.requeststructure');
}
public function storeForm(Request $request) {
$this->validate($request, [
'corporation_name' => 'required',
'system' => 'required',
'structure_size' => 'required',
'structure_type' => 'required',
'requested_drop_time' => 'required',
'requester' => 'required',
]);
$lookup = new LookupHelper;
$config = config('esi');
$requesterId = $lookup->CharacterNameToId($request->requester);
$corporationId = $lookup->CorporationNameToId($request->corporation_name);
AnchorStructure::insert([
'corporation_id' => $corporationId,
'corporation_name' => $request->corporation_name,
'system' => $request->system,
'structure_size' => $request->structure_size,
'structure_type' => $request->structure_type,
'requested_drop_time' => $request->requested_drop_time,
'requester_id' => $requesterId,
'requester' => $request->requester,
]);
//Send a mail out to the FC Team
$fcTeam = UserPermission::where([
'permission' => 'fc.team',
])->get();
//Set the mail delay
$delay = 30;
foreach($fcTeam as $fc) {
$body = "Structure Anchor Request has been entered.<br>";
$body .= "Please check the W4RP Services Site for the structure information.<br>";
$body .= "<br>Sincerely,<br>";
$body .= "Warped Intentions Leadership<br>";
//Dispatch the mail job
$subject = "New Structure Anchor Request";
ProcessSendEveMailJob::dispatch($body, (int)$fc->character_id, 'character', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds($delay));
$delay += 30;
}
return redirect('/dashboard')->with('success', 'Structure request successfully submitted.');
}
}

View File

@@ -0,0 +1,308 @@
<?php
namespace App\Http\Controllers\MiningTaxes;
//Internal Library
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Log;
use Carbon\Carbon;
use Khill\Lavacharts\Lavacharts;
use Auth;
use Illuminate\Support\Str;
use Illuminate\Support\Collection;
//Application Library
use App\Library\Helpers\LookupHelper;
use App\Library\Helpers\StructureHelper;
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\MiningTax\Observer;
use App\Models\MiningTax\Ledger;
use App\Models\MiningTax\Payment;
use App\Models\Moon\ItemComposition;
use App\Models\Moon\MineralPrice;
use App\Models\Esi\EsiToken;
use App\Models\Esi\EsiScope;
use App\Models\Structure\Structure;
use App\Models\MiningTax\MiningOperation;
class MiningTaxesAdminController extends Controller
{
public function __construct() {
$this->middleware('auth');
$this->middleware('role:User');
$this->middleware('permission:mining.officer');
}
/**
* Display the form for mining operations held by the alliance
*/
public function displayMiningOperationForm() {
//Declare variables
$config = config('esi');
$lookup = new LookupHelper;
$sHelper = new StructureHelper($config['primary'], $config['corporation']);
$coll = new Collection;
$structures = new Collection;
//Get all of the structures
$athanors = $sHelper->GetStructuresByType('Athanor');
$tataras = $sHelper->GetStructuresByType('Tatara');
//Cycle through each athanor and add it to the stack
foreach($athanors as $athanor) {
$structures->push([
$athanor->structure_id => $athanor->structure_name,
]);
}
//Cycle through each tatara and add it to the stack
foreach($tataras as $tatara) {
$structures->push([
$tatara->structure_id => $tatara->structure_name,
]);
}
//Sort all of the structures
$structures->sort();
//Get the current mining operations.
$operations = MiningOperation::where([
'processed' => 'No',
])->get();
return view('miningtax.admin.display.miningops.form')->with('structures', $structures)
->with('operations', $operations);
}
/**
* Store the results from the mining operations form
*/
public function storeMiningOperationForm(Request $request) {
//Validate the data
$this->validate($request, [
'name' => 'required',
'date' => 'required',
'structure' => 'required',
]);
$config = config('esi');
$sHelper = new StructureHelper($config['primary'], $config['corporation']);
//Get the name of the structure from the database
$m = $sHelper->GetStructureInfo($request->structure);
//Save the mining operation into the database
$operation = new MiningOperation;
$operation->structure_id = $request->structure;
$operation->structure_name = $m->structure_name;
$operation->authorized_by_id = auth()->user()->getId();
$operation->authorized_by_name = auth()->user()->getName();
$operation->operation_name = $request->name;
$operation->operation_date = $request->date;
$operation->processed = 'No';
$operation->processed_on = null;
$operation->save();
return redirect('/admin/dashboard')->with('success', 'Operation added successfully.');
}
/**
* Display the page to approve corporation moon rentals
*/
public function DisplayMoonRentalRequests() {
}
/**
* Approve a moon rental from the form
*/
public function storeApproveMoonRentalRequest() {
}
/**
* Display the page to setup the form for corporations to rent a moon
*/
public function DisplayMoonRentalForm() {
}
/**
* Store the details for the form for corporations renting a specific moon
*/
public function StoreMoonRentalForm() {
}
/**
* Remove a moon from being rented from a specific corporation
*/
public function DeleteMoonRental(Request $request) {
}
/**
* Display an invoice based on it's id
*
* @var $invoiceId
*/
public function displayInvoice($invoiceId) {
$ores = array();
$moons = array();
$totalPrice = 0.00;
$config = config('esi');
$structure = new StructureHelper($config['primary'], $config['corporation']);
//Get the invoice from the database
$invoice = Invoice::where([
'invoice_id' => $invoiceId,
])->first();
//Get the line items for the ledger for the invoice
$items = Ledger::where([
'invoice_id' => $invoiceId,
])->get();
//Build the total ores table for the display page
foreach($items as $item) {
if(!isset($ores[$item['ore_name']])) {
$ores[$item['ore_name']] = 0;
}
$ores[$item['ore_name']] = $ores[$item['ore_name']] + $item['quantity'];
$totalPrice += $item['amount'];
}
//Print out the lines of the ledger line by line for another table
foreach($items as $item) {
//Get the structure info from the database or esi
$tempObserverInfo = $structure->GetStructureInfo($item['observer_id']);
if(isset($tempObserverInfo->name)) {
array_push($moons, [
'character_name' => $item['character_name'],
'observer_name' => $tempObserverInfo->name,
'type_id' => $item['type_id'],
'ore_name' => $item['ore_name'],
'quantity' => $item['quantity'],
'amount' => $item['amount'],
'tax_amount' => $item['amount'] * $config['public_mining_tax'],
]);
} else {
array_push($moons, [
'character_name' => $item['character_name'],
'observer_name' => $tempObserverInfo->structure_name,
'type_id' => $item['type_id'],
'ore_name' => $item['ore_name'],
'quantity' => $item['quantity'],
'amount' => $item['amount'],
'tax_amount' => $item['amount'] * $config['public_mining_tax'],
]);
}
}
return view('miningtax.admin.display.details.invoice')->with('ores', $ores)
->with('moons', $moons)
->with('invoice', $invoice)
->with('totalPrice', $totalPrice);
}
/**
* Display current unpaid invoices
*/
public function DisplayUnpaidInvoice() {
$invoices = Invoice::where([
'status' => 'Pending',
])->orWhere([
'status' => 'Late',
])->orWhere([
'status' => 'Deferred',
])->orderByDesc('invoice_id')->paginate(50);
$totalAmount = Invoice::where([
'status' => 'Pending',
])->orWhere([
'status' => 'Late',
])->orWhere([
'status' => 'Deferred',
])->sum('invoice_amount');
return view('miningtax.admin.display.unpaid')->with('invoices', $invoices);
}
/**
* Search unpaid invoices
*/
public function SearchUnpaidInvoice(Request $request) {
$invoices = Invoice::where('invoice_id', 'LIKE', '%' . $request->q . '%')
->where(['status' => 'Pending'])
->orWhere(['status' => 'Late'])
->orWhere(['status' => 'Deferred'])
->orderByDesc('invoice_id')
->paginate(25);
if(count($invoices) > 0) {
return view('miningtax.admin.display.unpaid')->with('invoices', $invoices);
}
return view('miningtax.admin.display.unpaid')->with('error', 'No invoices found');
}
/**
* Display page to modify an unpaid invoice
*/
public function DisplayModifyInvoice() {
}
/**
* Modify an unpaid invoice
*/
public function ProcessModifyInvoice() {
}
/**
* Mark an invoice paid
*/
public function UpdateInvoice(Request $request) {
$this->validate($request, [
'invoiceId' => 'required',
'status' => 'required',
]);
Invoice::where([
'invoice_id' => $request->invoiceId,
])->update([
'status' => $request->status,
'modified_by_id' => auth()->user()->getId(),
'modified_by_name' => auth()->user()->getName(),
]);
return redirect('/miningtax/admin/display/unpaid')->with('success', 'Invoice successfully updated.');
}
/**
* Display past paid invoices
*/
public function DisplayPaidInvoices() {
$invoices = Invoice::where([
'status' => 'Paid',
])->orWhere([
'status' => 'Paid Late',
])->paginate(50);
$totalAmount = Invoice::where([
'status' => 'Paid',
])->orWhere([
'status' => 'Paid Late',
])->sum('invoice_amount');
return view('miningtax.admin.display.paidinvoices')->with('invoices', $invoices)
->with('totalAmount', $totalAmount);
}
}

View File

@@ -0,0 +1,635 @@
<?php
namespace App\Http\Controllers\MiningTaxes;
//Internal Library
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use DB;
use Log;
use Carbon\Carbon;
use Khill\Lavacharts\Lavacharts;
use Auth;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
//Library Helpers
use App\Library\Helpers\LookupHelper;
use App\Library\Helpers\StructureHelper;
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Moons\MoonCalc;
//Models
use App\Models\Moon\ItemComposition;
use App\Models\Moon\MineralPrice;
use App\Models\MiningTax\Ledger;
use App\Models\MiningTax\Observer;
use App\Models\MiningTax\Invoice;
use App\Models\Esi\EsiToken;
use App\Models\Esi\EsiScope;
use App\Models\User\User;
use App\Models\MoonRental\AllianceMoon;
use App\Models\MoonRental\AllianceMoonOre;
use App\Models\MoonRental\AllianceMoonRental;
class MiningTaxesController extends Controller
{
/**
* Construct to deal with middleware and other items
*/
public function __construct() {
$this->middleware('auth');
$this->middleware('role:User');
}
/**
* Display the moons either the person is renting, or their corp are renting
*/
public function DisplayRentedMoons() {
$moons = array();
$lookup = new LookupHelper;
$userId = auth()->user()->getId();
$charInfo = $lookup->GetCharacterInfo(auth()->user()->getId());
$corpId = $charInfo->corporation_id;
$tempMoons = AllianceMoonRental::where([
'entity_id' => $userId,
])->orWhere([
'entity_id' => $corpId,
])->get();
//Foreach of the moons we got let's build the moon info and the ore data
foreach($tempMoons as $tempMoon) {
//Get the ores for the moon
$ores = AllianceMoonOre::where([
'moon_id' => $tempMoon->moon_id,
])->get()->toArray();
$moons->push([
'moon_id' => $tempMoon->moon_id,
'system' => $tempMoon->system_name,
'moon_name' => $tempMoon->name,
'ores' => $ores,
'worth_amount' => $tempMoon->worth_amount,
'rental_amount' => $tempMoon->rental_amount,
]);
}
return view('miningtax.user.display.rentedmoons')->with('moons', $moons)
->with('ores', $ores);
}
/**
* Display the page with the moon rental form
*/
public function DisplayMoonRentalForm(Request $request) {
$this->validate($request, [
'moon_id' => 'required',
'moon_name' => 'required',
'worth_amount' => 'required',
'rental_amount' => 'required',
]);
$moon = AllianceMoon::where([
'moon_id' => $request->moon_id,
])->first();
$ores = AllianceMoonOre::where([
'moon_id' => $request->moon_id,
])->get();
return view('miningtax.user.display.moonrentals.form')->with('moon', $moon)
->with('ores', $ores);
}
/**
* Store the information from the moon rental form
*/
public function storeMoonRentalForm(Request $request) {
$this->validate($request, [
'moon_id' => 'required',
'rental_start' => 'required',
'rental_end' => 'required',
'entity_name' => 'required',
'entity_type' => 'required',
]);
$lookup = new LookupHelper;
$entityId = null;
//From the name and type of the entity get the entity id.
if($request->entity_type == 'Character') {
$entityId = $lookup->CharacterNameToId($request->entity_name);
} else if($request->entity_type == 'Corporation') {
$entityId = $lookup->CorporationNameToId($request->entity_name);
} else if($request->entity_type == 'Alliance') {
$entityId = $lookup->AllianceNameToId($request->entity_name);
} else {
return redirect('/dashboard')->with('error', 'Moon Rental error. Please contact the site admin.');
}
//Create the next billing date from a Carbon date 3 months from the rental start
$nextBillingDate = Carbon::create($request->rental_start)->addMonths(3);
//Create the uniqid for the billing cycle.
$invoiceId = "MR" . uniqid();
//Get the moon's information from the database so we know how much to make the bill for
$moon = AllianceMoon::where([
'moon_id' => $request->moon_id,
])->first();
//Update the data on the Alliance Moon
AllianceMoon::where([
'moon_id' => $request->moon_id,
])->update([
'rented' => 'Yes',
]);
//Insert a new moon rental into the database
AllianceMoonRental::insert([
'moon_id' => $moon->moon_id,
'moon_name' => $moon->name,
'rental_amount' => $moon->rental_amount,
'rental_start' => $request->rental_start,
'rental_end' => $request->rental_end,
'next_billing_date' => $nextBillingDate,
'entity_id' => $entityId,
'entity_name' => $request->entity_name,
'entity_type' => $request->entity_type,
]);
return redirect('/dashboard')->with('success', 'Before placing a structure please send the ISK to the holding corp with the description of ' . $invoiceId);
}
public function displayAvailableMoons() {
//Declare variables
$moons = new Collection;
$mHelper = new MoonCalc;
$lookup = new LookupHelper;
$system = array();
/**
* Declare our different flavors of moon goo for the blade
*/
$r4Goo = [
'Zeolites',
'Sylvite',
'Bitumens',
'Coesite',
];
$r8Goo = [
'Cobaltite',
'Euxenite',
'Titanite',
'Scheelite',
];
$r16Goo = [
'Otavite',
'Sperrylite',
'Vanadinite',
'Chromite',
];
$r32Goo = [
'Carnotite',
'Zircon',
'Pollucite',
'Cinnabar',
];
$r64Goo = [
'Xenotime',
'Monazite',
'Loparite',
'Ytterbite',
];
//Get all of the system names from the database by plucking all the non-rented moon system names
$systems = AllianceMoon::where([
'rented' => 'No',
])->pluck('system_name')->unique()->toArray();
//Get all of the moons which are not rented
$allyMoons = AllianceMoon::where([
'rented' => 'No',
])->get();
//Cycle through all of the moons to create arrays of data
foreach($allyMoons as $moon) {
$ores = AllianceMoonOre::where([
'moon_id' => $moon->moon_id,
])->get(['ore_name', 'quantity'])->toArray();
if($moon->moon_type != 'R32' && $moon->moon_type != 'R64') {
$moons->push([
'system' => $moon->system_name,
'moon_name' => $moon->name,
'ores' => $ores,
'worth_amount' => $moon->worth_amount,
'rental_amount' => $moon->rental_amount,
'moon_id' => $moon->moon_id,
]);
}
}
return view('miningtax.user.display.moons.availablemoons')->with('moons', $moons)
->with('systems', $systems)
->with('r4Goo', $r4Goo)
->with('r8Goo', $r8Goo)
->with('r16Goo', $r16Goo)
->with('r32Goo', $r32Goo)
->with('r64Goo', $r64Goo);
}
/**
* Display all the moons in Warped Intentions Sovreignty
*/
public function displayAllMoons() {
//Declare variables
$moons = new Collection;
$mHelper = new MoonCalc;
$lookup = new LookupHelper;
$system = array();
/**
* Declare our different flavors of moon goo for the blade
*/
$r4Goo = [
'Zeolites',
'Sylvite',
'Bitumens',
'Coesite',
];
$r8Goo = [
'Cobaltite',
'Euxenite',
'Titanite',
'Scheelite',
];
$r16Goo = [
'Otavite',
'Sperrylite',
'Vanadinite',
'Chromite',
];
$r32Goo = [
'Carnotite',
'Zircon',
'Pollucite',
'Cinnabar',
];
$r64Goo = [
'Xenotime',
'Monazite',
'Loparite',
'Ytterbite',
];
$systems = [
'0-NTIS',
'1-NJLK',
'35-JWD',
'8KR9-5',
'EIMJ-M',
'F-M1FU',
'G-C8QO',
'I6M-9U',
'L5D-ZL',
'L-YMYU',
'VQE-CN',
'VR-YIQ',
'XZ-SKZ',
'Y-CWQY',
];
//Get all of the moons which are not rented
$allyMoons = AllianceMoon::all();
foreach($allyMoons as $moon) {
$ores = AllianceMoonOre::where([
'moon_id' => $moon->moon_id,
])->get(['ore_name', 'quantity'])->toArray();
$moons->push([
'system' => $moon->system_name,
'moon_name' => $moon->name,
'ores' => $ores,
]);
}
return view('miningtax.user.display.moons.allmoons')->with('moons', $moons)
->with('systems', $systems)
->with('r4Goo', $r4Goo)
->with('r8Goo', $r8Goo)
->with('r16Goo', $r16Goo)
->with('r32Goo', $r32Goo)
->with('r64Goo', $r64Goo);
}
/**
* Display an invoice based on it's id
*
* @var $invoiceId
*/
public function displayInvoice($invoiceId) {
$ores = array();
$moons = array();
$totalPrice = 0.00;
$config = config('esi');
$structure = new StructureHelper($config['primary'], $config['corporation']);
$systems = AllianceMoon::where([
'rented' => 'No',
])->pluck('system_name')->unique()->toArray();
//Get the invoice from the database
$invoice = Invoice::where([
'invoice_id' => $invoiceId,
])->first();
//Get the line items for the ledger for the invoice
$items = Ledger::where([
'invoice_id' => $invoiceId,
])->get();
//Build the total ores table for the display page
foreach($items as $item) {
if(!isset($ores[$item['ore_name']])) {
$ores[$item['ore_name']] = 0;
}
$ores[$item['ore_name']] = $ores[$item['ore_name']] + $item['quantity'];
$totalPrice += $item['amount'];
}
//Print out the lines of the ledger line by line for another table
foreach($items as $item) {
//Get the structure info from the database or esi
$tempObserverInfo = $structure->GetStructureInfo($item['observer_id']);
//Create the array for the line by line
array_push($moons, [
'character_name' => $item['character_name'],
'observer_name' => $tempObserverInfo->structure_name,
'type_id' => $item['type_id'],
'ore_name' => $item['ore_name'],
'quantity' => $item['quantity'],
'amount' => $item['amount'],
'tax_amount' => $item['amount'] * $config['public_mining_tax'],
]);
}
return view('miningtax.user.display.details.invoice')->with('ores', $ores)
->with('moons', $moons)
->with('invoice', $invoice)
->with('totalPrice', $totalPrice);
}
/**
* Display the users invoices
*/
public function DisplayInvoices() {
//Declare variables
$paidAmount = 0.00;
$unpaidAmount = 0.00;
//Get the unpaid invoices
$unpaid = Invoice::where([
'status' => 'Pending',
'character_id' => auth()->user()->getId(),
])->paginate(15);
//Get the late invoices
$late = Invoice::where([
'status' => 'Late',
'character_id' => auth()->user()->getId(),
])->paginate(10);
//Get the deferred invoices
$deferred = Invoice::where([
'status' => 'Deferred',
'character_id' => auth()->user()->getId(),
])->paginate(10);
//Get the paid invoices
$paid = Invoice::where([
'status' => 'Paid',
'character_id' => auth()->user()->getId(),
])->paginate(15);
//Total up the unpaid invoices
foreach($unpaid as $un) {
$unpaidAmount += $un->invoice_amount;
}
//Total up the paid invoices
foreach($paid as $p) {
$paidAmount += $p->invoice_amount;
}
return view('miningtax.user.display.invoices.invoices')->with('unpaid', $unpaid)
->with('late', $late)
->with('deferred', $deferred)
->with('paid', $paid)
->with('unpaidAmount', $unpaidAmount)
->with('paidAmount', $paidAmount);
}
/**
* Display all of the upcoming extractions
*/
public function DisplayUpcomingExtractions() {
//Declare variables
$structures = array();
$esiHelper = new Esi;
$config = config('esi');
$sHelper = new StructureHelper($config['primary'], $config['corporation']);
$structures = array();
$structuresCalendar = array();
$lava = new Lavacharts;
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-industry.read_corporation_mining.v1')) {
return redirect('/dashboard')->with('error', 'Tell the nub Minerva to register the correct scopes for the services site.');
}
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Get the esi data for extractions
try {
$extractions = $esi->invoke('get', '/corporation/{corporation_id}/mining/extractions/', [
'corporation_id' => $config['corporation'],
]);
} catch(RequestFailedException $e) {
Log::warning('Could not retrieve extractions from ESI in MiningTaxesController.php');
return redirect('/dashboard')->with('error', "Could not pull extractions from ESI data.");
}
//Basically get the structure info and attach it to the variable set
foreach($extractions as $ex) {
$sName = $sHelper->GetStructureInfo($ex->structure_id);
//Add the information into the structures array to go to the page to be displayed
array_push($structures, [
'structure_name' => $sName->structure_name,
'start_time' => $esiHelper->DecodeDate($ex->extraction_start_time),
'arrival_time' => $esiHelper->DecodeDate($ex->chunk_arrival_time),
'decay_time' => $esiHelper->DecodeDate($ex->natural_decay_time),
]);
}
//Sort extractions by arrival time
$structuresCollection = collect($structures);
$sorted = $structuresCollection->sortBy('arrival_time');
//Store the sorted collection back into the variable before being used again.
$structures = $sorted->all();
/**
* Create a 3 month calendar for the past, current, and future extractions
*/
//Create the data tables
$calendar = $lava->DataTable();
$calendar->addDateTimeColumn('Date')
->addNumberColumn('Total');
foreach($extractions as $extraction) {
array_push($structuresCalendar, [
'date' => $esiHelper->DecodeDate($extraction->chunk_arrival_time),
'total' => 0,
]);
}
foreach($extractions as $extraction) {
for($i = 0; $i < sizeof($structuresCalendar); $i++) {
//Create the dates in a carbon object, then only get the Y-m-d to compare.
$tempStructureDate = Carbon::createFromFormat('Y-m-d H:i:s', $structuresCalendar[$i]['date'])->toDateString();
$extractionDate = Carbon::createFromFormat('Y-m-d H:i:s', $esiHelper->DecodeDate($extraction->chunk_arrival_time))->toDateString();
//check if the dates are equal then increase the total by 1
if($tempStructureDate == $extractionDate) {
$structuresCalendar[$i]['total'] += 1;
}
}
}
foreach($structuresCalendar as $structureC) {
$calendar->addRow([
$structureC['date'],
$structureC['total'],
]);
}
$lava->CalendarChart('Extractions', $calendar, [
'title' => 'Upcoming Extractions',
'unusedMonthOutlineColor' => [
'stroke' => '#ECECEC',
'strokeOpacity' => 0.75,
'strokeWidth' => 1,
],
'dayOfWeekLabel' => [
'color' => '#4f5b0d',
'fontSize' => 16,
'italic' => true,
],
'noDataPattern' => [
'color' => '#DDD',
'backgroundColor' => '#11FFFF',
],
'colorAxis' => [
'values' => [0, 5],
'colors' => ['green', 'red'],
],
]);
//Return the view with the extractions variable for html processing
return view('miningtax.user.display.pulls.upcoming')->with('structures', $structures)
->with('lava', $lava)
->with('calendar', $calendar);
}
/**
* Display the ledger for the moons.
*/
public function DisplayMoonLedgers() {
//Declare variables
$structures = array();
$tempLedgers = array();
$miningLedgers = array();
$ledgers = array();
$esiHelper = new Esi;
$lookup = new LookupHelper;
$config = config('esi');
//Check for the esi scope
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-industry.read_corporation_mining.v1')) {
return redirect('/dashboard')->with('error', 'Tell the nub Minerva to register the ESI for the holding corp for corp mining.');
} else {
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-universe.read_structures.v1')) {
return redirect('/dashboard')->with('error', 'Tell the nub Minerva to register the ESI for the holding corp for structures.');
}
}
//Get the refresh token if scope checks have passed
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
//Setup the esi container
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Declare the structure helper after the esi container has been created
$sHelper = new StructureHelper($config['primary'], $config['corporation'], $esi);
//Get the character data from the lookup table if possible or esi
$character = $lookup->GetCharacterInfo($config['primary']);
//Get the corporation information from the character id
$corpInfo = $lookup->GetCorporationInfo($character->corporation_id);
//Get the observers from the database
$observers = Observer::all();
//Get the ledgers for each structure one at a time
foreach($observers as $obs) {
//Get the structure information
$structureInfo = $sHelper->GetStructureInfo($obs->observer_id);
//Add the name to the structures array
array_push($structures, $structureInfo->name);
/**
* Get the ledger from each observer.
* We don't care about observer type as it can only be an Athanor or Tatara
*/
$ledgers = Ledger::where([
'observer_id' => $obs->observer_id,
'character_id' => auth()->user()->getId(),
])->where('last_updated', '>=', Carbon::now()->subDays(30))->get();
if($ledgers->count() > 0) {
foreach($ledgers as $ledger) {
//Foreach ledger add it to the array
array_push($miningLedgers, [
'structure' => $structureInfo->name,
'character' => auth()->user()->getName(),
'corpTicker' => $corpInfo->ticker,
'ore' => $ledger->ore_name,
'quantity' => $ledger->quantity,
'updated' => $ledger->last_updated,
]);
}
}
}
//Return the view
return view('miningtax.user.display.details.ledger')->with('miningLedgers', $miningLedgers)
->with('structures', $structures);
}
}

View File

@@ -1,239 +0,0 @@
<?php
namespace App\Http\Controllers\Moons;
//Internal Library
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Log;
use Carbon\Carbon;
//App Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Structures\StructureHelper;
use App\Library\Lookups\LookupHelper;
//App Models
use App\Models\Esi\EsiToken;
use App\Models\Esi\EsiScope;
use App\Models\Lookups\ItemLookup;
use App\Models\MoonRentals\AllianceRentalMoon;
use App\Models\Moon\RentalMoon;
use App\Models\Moon\CorpObserversRegistered;
use App\Models\Moon\CorpMoonObserver;
class MoonLedgerController extends Controller
{
public function __construct() {
$this->middleware('auth');
$this->middleware('role:User');
}
public function displayMoonLedgerNew() {
}
public function displayMoonLedger() {
//Declare variables
$structures = array();
$miningLedgers = array();
$tempMiningLedger = array();
$tempMining = array();
$esiHelper = new Esi;
$lookup = new LookupHelper;
$response = null;
$structureInfo = null;
//Check for the esi scope
if(!$esiHelper->HaveEsiScope(auth()->user()->getId(), 'esi-industry.read_corporation_mining.v1')) {
return redirect('/dashboard')->with('error', 'Need to add scopes for esi-industry.read_corporation_mining.v1');
} else {
if(!$esiHelper->HaveEsiScope(auth()->user()->getId(), 'esi-universe.read_structures.v1')) {
return redirect('/dashboard')->with('error', 'Need to add scope for esi-universe.read_structures.v1');
}
}
//Get the refresh token if scope checks have passed
$refreshToken = $esiHelper->GetRefreshToken(auth()->user()->getId());
//Setup the esi container
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Get the character data from the lookup table if possible or esi
$character = $lookup->GetCharacterInfo(auth()->user()->getId());
//Try to get the mining observers for the corporation from esi
try {
$responses = $esi->invoke('get', '/corporation/{corporation_id}/mining/observers/', [
'corporation_id' => $character->corporation_id,
]);
} catch(RequestFailedException $e) {
//If an exception has occurred for some reason redirect back to the dashboard with an error message
return redirect('/dashboard')->with('error', 'Failed to get mining structures.');
}
//For each mining observer, let's build the array of data to show on the page
foreach($responses as $response) {
//Try to get the structure information from esi
try {
$structureInfo = $esi->invoke('get', '/universe/structures/{structure_id}/', [
'structure_id' => $response->observer_id,
]);
} catch(RequestFailedException $e) {
//If an exception has occurred, then do nothing
}
//We don't really care about the key, but it is better than just 0 through whatever number
$structures[$response->observer_id] = $structureInfo->name;
}
//For each of the structures we want to address it by it's key value pair.
//This will allow us to do some interesting things in the display.
foreach($structures as $key => $value) {
try {
$ledgers = $esi->invoke('get', '/corporation/{corporation_id}/mining/observers/{observer_id}/', [
'corporation_id' => $character->corporation_id,
'observer_id' => $key,
]);
} catch(RequestFailedException $e) {
$ledgers = null;
}
if($ledgers != null) {
foreach($ledgers as $ledger) {
//Declare a variable that will need to be cleared each time the foreach processes
$tempArray = array();
//Get the character information from the character id
$charInfo = $lookup->GetCharacterInfo($ledger->character_id);
//Get the corp ticker
$corpInfo = $lookup->GetCorporationInfo($charInfo->corporation_id);
//Get the ore name from the type id
$ore = $lookup->ItemIdToName($ledger->type_id);
//We only want to push the mining ledger entry into the array if it matches
//the date within 30 days
$sortTime = Carbon::now()->subDays(30);
$current = Carbon::createFromFormat('Y-m-d', $ledger->last_updated);
if($current->greaterThanOrEqualTo($sortTime)) {
array_push($miningLedgers, [
'structure' => $value,
'character' => $charInfo->name,
'corpTicker' => $corpInfo->ticker,
'ore' => $ore,
'quantity' => $ledger->quantity,
'updated' => $ledger->last_updated,
]);
}
}
}
}
return view('moons.ledger.displayledger')->with('miningLedgers', $miningLedgers)
->with('structures', $structures);
}
public function displayRentalMoonLedger() {
//Declare variables
$structures = array();
$miningLedgers = array();
$tempMiningLedger = array();
$tempMining = array();
$esiHelper = new Esi;
$lookup = new LookupHelper;
$response = null;
$structureInfo = null;
//Get the configuration for the main site
$config = config('esi');
//Check for the esi scope
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-industry.read_corporation_mining.v1')) {
return redirect('/dashboard')->with('error', 'Tell the nub Minerva to register the ESI for the holding corp.');
} else {
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-universe.read_structures.v1')) {
return redirect('/dashboard')->with('error', 'Tell the nub Minerva to register the ESI for the holding corp.');
}
}
//Get the refresh token if scope checks have passed
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
//Setup the esi container
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Get the character data from the lookup table if possible or esi
$character = $lookup->GetCharacterInfo($config['primary']);
//Try to get the mining observers for the corporation from esi
try {
$responses = $esi->invoke('get', '/corporation/{corporation_id}/mining/observers/', [
'corporation_id' => $character->corporation_id,
]);
} catch(RequestFailedException $e) {
//If an exception has occurred for some reason redirect back to the dashboard with an error message
return redirect('/dashboard')->with('error', 'Failed to get mining structures.');
}
//For each mining observer, let's build the array of data to show on the page
foreach($responses as $response) {
//Try to get the structure information from esi
try {
$structureInfo = $esi->invoke('get', '/universe/structures/{structure_id}/', [
'structure_id' => $response->observer_id,
]);
} catch(RequestFailedException $e) {
//If an exception has occurred, then do nothing
}
//We don't really care about the key, but it is better than just 0 through whatever number
$structures[$response->observer_id] = $structureInfo->name;
}
//For each of the structures we want to address it by it's key value pair.
//This will allow us to do some interesting things in the display.
foreach($structures as $key => $value) {
try {
$ledgers = $esi->invoke('get', '/corporation/{corporation_id}/mining/observers/{observer_id}/', [
'corporation_id' => $character->corporation_id,
'observer_id' => $key,
]);
} catch(RequestFailedException $e) {
$ledgers = null;
}
if($ledgers != null) {
foreach($ledgers as $ledger) {
//Declare a variable that will need to be cleared each time the foreach processes
$tempArray = array();
//Get the character information from the character id
$charInfo = $lookup->GetCharacterInfo($ledger->character_id);
//Get the corp ticker
$corpInfo = $lookup->GetCorporationInfo($charInfo->corporation_id);
//Get the ore name from the type id
$ore = $lookup->ItemIdToName($ledger->type_id);
//We only want to push the mining ledger entry into the array if it matches
//the date within 30 days
$sortTime = Carbon::now()->subDays(30);
$current = Carbon::createFromFormat('Y-m-d', $ledger->last_updated);
if($current->greaterThanOrEqualTo($sortTime)) {
array_push($miningLedgers, [
'structure' => $value,
'character' => $charInfo->name,
'corpTicker' => $corpInfo->ticker,
'ore' => $ore,
'quantity' => $ledger->quantity,
'updated' => $ledger->last_updated,
]);
}
}
}
}
return view('moons.ledger.rentalledger')->with('miningLedgers', $miningLedgers)
->with('structures', $structures);
}
}

View File

@@ -1,595 +0,0 @@
<?php
namespace App\Http\Controllers\Moons;
//Internal Library
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Auth;
use Carbon\Carbon;
use Log;
//Models
use App\Models\Moon\Config;
use App\Models\Moon\ItemComposition;
use App\Models\Moon\RentalMoon;
use App\Models\Moon\OrePrice;
use App\Models\Moon\Price;
use App\Models\Moon\AllianceMoon;
use App\Models\MoonRentals\AllianceRentalMoon;
use App\Models\Moon\AllianceMoonRequest;
//Library
use App\Library\Moons\MoonCalc;
use App\Library\Esi\Esi;
use App\Library\Lookups\LookupHelper;
//Jobs
use App\Jobs\ProcessSendEveMailJob;
class MoonsAdminController extends Controller
{
/**
* Variable for the class
*/
private $romans = [
'M' => 1000,
'CM' => 900,
'D' => 500,
'CD' => 400,
'C' => 100,
'XC' => 90,
'L' => 50,
'XL' => 40,
'X' => 10,
'IX' => 9,
'V' => 5,
'IV' => 4,
'I' => 1,
];
/**
* Constructor for the class
*/
public function __construct() {
$this->middleware('auth');
$this->middleware('role:Admin');
}
/**
* Function to display moon requests
*/
public function displayMoonRequests() {
$requests = AllianceMoonRequest::where([
'status' => 'Pending',
])->get();
return view('moons.admin.moonrequest')->with('requests', $requests);
}
/**
* Function to approve a moon request
*/
public function storeApprovedMoonRequest(Request $request) {
//Validate the input request
$this->validate($request, [
'id' => 'required',
'status' => 'required',
'system' => 'required',
'planet' => 'required',
'moon' => 'required',
]);
//Get the request data which holds all of the information for the request user
$moon = AllianceMoonRequest::where([
'id' => $request->id,
])->first();
//Get the configuration data to use later in the function
$config = config('esi');
//If the request is approved, then update everything.
if($request->status == 'Approved') {
//Update the alliance moon request to either approved or denied
AllianceMoonRequest::where([
'id' => $request->id,
])->update([
'status' => $request->status,
'approver_name' => auth()->user()->getName(),
'approver_id' => auth()->user()->getId(),
]);
//Update the alliance moon in the table to the correct status
AllianceMoon::where([
'System' => $request->system,
'Planet' => $request->planet,
'Moon' => $request->moon,
])->update([
'Corporation' => $moon->corporation_ticker,
'Availability' => 'Deployed',
]);
//Send an eve mail to the requestor stating they can set a moon up.
//Setup the mail body
$body = 'The moon request for ' . $request->system . ' - ' . $request->planet . ' - ' . $request->moon . ' has changed status.<br>';
$body .= 'The request has been ' . $request->status . '.<br>';
$body .= 'Please contact the FC Team should it be necessary to arrange a fleet to cover the structure drop.<br>';
$body .= 'Sincerely,<br>';
$body .= 'Warped Intentions Leadership<br>';
} else {
//If the status was Denied, then update the request, and mark the moon available again.
AllianceMoonRequest::where([
'id' => $request->id,
])->update([
'status' => $request->status,
'approver_name' => auth()->user()->getName(),
'approver_id' => auth()->user()->getId(),
]);
//Update the alliance moon in the table to the correct status
AllianceMoon::where([
'System' => (string)$request->system,
'Planet' => (string)$request->planet,
'Moon' => (string)$request->moon,
])->update([
'Availability' => 'Available',
]);
//Send an eve mail to the requestor stating they can set a moon up.
//Setup the mail body
$body = 'The moon request for ' . $moon->System . ' - ' . $moon->Planet . ' - ' . $moon->Moon . ' has changed status.<br>';
$body .= 'The request has been ' . $request->status . '.<br>';
$body .= 'Should you have questions please contact alliance leadership for further clarification.<br>';
$body .= 'Sincerely,<br>';
$body .= 'Warped Intentions Leadership<br>';
}
//Setup the mail model
ProcessSendEveMailJob::dispatch($body, (int)$moon->requestor_id, 'character', 'Warped Intentions Moon Request', $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds(30));
return redirect('/moons/admin/display/request')->with('success', 'Moon has been processed, and mail has been sent out.');
}
/**
* Function to display the ability for the admins to update moons with who is renting,
* and when it ends
*/
public function updateMoon() {
$this->middleware('role:Admin');
//Declare the variables we need
$system = null;
$planet = null;
$moon = null;
$name = null;
$spmnTemp = array();
$spmn = array();
//Get the moons and put in order by System, Planet, Moon number
$moons = AllianceRentalMoon::orderBy('System', 'ASC')
->orderBy('Planet', 'ASC')
->orderBy('Moon', 'ASC')
->get();
//Push our default value onto the stack
array_push($spmn, 'N/A');
//Form our array of strings for each system, planet, and moon combination
foreach($moons as $m) {
$temp = $m->system . " - " . $m->planet . " - " . $m->moon . " - " . $m->structure_name;
array_push($spmnTemp, $temp);
}
//From the temporary array, build the final array
foreach($spmnTemp as $key => $value) {
$spmn[$value] = $value;
}
//Pass the data to the blade display
return view('moons.admin.updatemoon')->with('spmn', $spmn);
}
/**
* Function to remove a renter from a moon
* New function based on new table. Will
* update description in a future update.
*/
public function storeMoonRemoval(Request $request) {
//Check for the correct role for the user to utilize this function
$this->middleware('role:Admin');
//Validate the request
$this->validate($request, [
'remove' => 'required',
]);
//Explode the remove request to an array of strings
$str_array = explode(" - ", $request->remove);
//Decode the value for the SPM into a system, planet, and moon
$system = $str_array[0];
$planet = $str_array[1];
$moon = $str_array[2];
//Update the moon rental
AllianceRentalMoon::where([
'system' => $system,
'planet' => $planet,
'moon' => $moon,
])->update([
'rental_type' => 'Not Rented',
'rental_until' => null,
'rental_contact_id' => 0,
'rental_contact_type' => 'Not Rented',
'paid' => 'Not Rented',
'paid_until' => null,
'alliance_use_until' => null,
]);
//Once the action is completed, redirect to the original page
return redirect('/moons/admin/display/rentals')->with('success', 'Renter removed from the moon.');
}
/**
* Function to display the moons to admins
* New function based on new table. Will
* update description in a future update.
*/
public function displayRentalMoonsAdmin() {
//Declare variables for the function
$lookupHelper = new LookupHelper;
$moonCalc = new MoonCalc;
$contactId = null;
$contactType = null;
$paid = null;
$paidUntil = null;
$corpTicker = null;
$table = array();
//Setup the carbon date using Carbon\Carbon
$lastMonth = Carbon::now()->subMonth();
$today = Carbon::now();
//Get the moon rentals from the database
$rentalMoons = AllianceRentalMoon::orderBy('system', 'asc')->get();
//For each of the moons compile different data for the view for formatting
foreach($rentalMoons as $moon) {
//Check if a current rental for the moon is on going
if(($moon->rental_type == 'In Alliance' || $moon->rental_type == 'Out of Alliance')) {
$paid = $moon->paid;
$paidUntil = new Carbon($moon->paid_until);
$paidUntil = $paidUntil->format('m-d');
//Set the rental date up
$rentalTemp = new Carbon($moon->rental_until);
$rentalEnd = $rentalTemp->format('m-d');
//Set the correct color for the table
if($rentalTemp->diffInDays(Carbon::now()) < 3 && $today->lessThan($rentalTemp)) {
$color = 'table-warning';
} else if($today->lessThan($rentalTemp)) {
$color = 'table-danger';
} else {
$color = 'table-primary';
}
//Set the contact name based on the contact type
if($moon->rental_contact_type == 'Alliance') {
$allianceInfo = $lookupHelper->GetAllianceInfo($moon->rental_contact_id);
//Set the contact name and ticker
$contact = $allianceInfo->name;
$ticker = $allianceInfo->ticker;
} else if($moon->rental_contact_type == 'Corporation') {
$corporationInfo = $lookupHelper->GetCorporationInfo($moon->rental_contact_id);
//Set the contact name and ticker
$contact = $corporationInfo->name;
$ticker = $corporationInfo->ticker;
} else if($moon->rental_contact_type == 'Character') {
$characterInfo = $lookupHelper->GetCharacterInfo($moon->rental_contact_id);
//Set the contact name
$contact = $characterInfo->name;
//Get the ticker for the character from the corporation he belongs to
$corpInfo = $lookupHelper->GetCorporationInfo($characterInfo->corporation_id);
$ticker = $corpInfo->ticker;
} else {
$contact = 'N/A';
$ticker = 'N/A';
$type = 'N/A';
$color = 'table-primary';
}
//Check if the moon is currently being utilized by the alliance
} else if($moon->rental_type == 'Alliance') {
//If the moon is in use by the alliance then the moon isn't paid for
$paid = 'No';
//Setup the rental end time as the end of the month
$rentalTemp = Carbon::now()->endOfMonth();
$rentalEnd = $rentalTemp->format('m-d');
//Set the color of the table
$color = 'table-info';
//Setup the paid time as the same as the rental end
$paidUntiltemp = $rentalTemp;
$paidUntil = $rentalEnd;
//Set the other information for the spreadsheet
$contact = 'Spatial Forces';
$renter = 'SP3C';
$ticker = 'SP3C';
$type = 'Alliance';
//The last case is the moon is not utilized by the Alliance or is not being rented
} else {
//If the moon is not being rented, or being utilized by the alliance then set paid to No
$paid = 'No';
//Setup the rental time to end as last month to show it's free
$rentalTemp = $lastMonth;
$rentalEnd = $rentalTemp->format('m-d');
//Setup the paid until as last month to show it's free
$paidUntilTemp = $lastMonth;
$paidUntil = $lastMonth->format('m-d');
//Setup the other variables with the correct information
$contact = 'None';
$renter = 'None';
$ticker = 'N/A';
$type = 'N/A';
//Set the color of the table
$color = 'table-primary';
}
//Set up the moon rental type
if($moon->rental_type == 'In Alliance') {
$type = 'IA';
//Setup the row color
if($rentalTemp->diffInDays(Carbon::now()) < 3 && $today->lessThan($rentalTemp)) {
$color = 'table-warning';
} else if($today->lessThan($rentalTemp)) {
$color = 'table-danger';
} else {
$color = 'table-primary';
}
} else if($moon->rental_type == 'Out of Alliance') {
$type = 'OOA';
//Setup the row color
if($rentalTemp->diffInDays(Carbon::now()) < 3 && $today->lessThan($rentalTemp)) {
$color = 'table-warning';
} else if($today->lessThan($rentalTemp)) {
$color = 'table-danger';
} else {
$color = 'table-primary';
}
} else if($moon->rental_type == 'Alliance') {
$type = 'W4RP';
//Set the row color
$color = 'table-info';
} else {
$type = 'N/A';
//Set the row color
$color = 'table-primary';
}
//Add the data to the html string to be passed to the view
array_push($table, [
'SPM' => $moon->system . " - " . $moon->planet . " - " . $moon->moon,
'StructureName' => $moon->structure_name,
'AlliancePrice' => $moon->alliance_rental_price,
'OutOfAlliancePrice' => $moon->out_of_alliance_rental_price,
'RentalEnd' => $rentalEnd,
'RowColor' => $color,
'Paid' => $moon->paid,
'PaidUntil' => $paidUntil,
'Contact' => $contact,
'Type' => $moon->rental_type,
'Renter' => $type,
]);
}
return view('moons.admin.adminmoon')->with('table', $table);
}
/**
* Function to store the updates from the moons.
* New function based on new table. Will update
* the description in a future update
*/
public function storeUpdateMoon(Request $request) {
//Require the site administration role
$this->middleware('role:Admin');
//Declare some variables we will need
$moonCalc = new MoonCalc;
$lookup = new LookupHelper;
$paid = false;
$system = null;
$planet = null;
$mn = null;
//Validate our request from the html form
$this->validate($request, [
'spmn' => 'required',
'contact' => 'required',
'contact_type' => 'required',
'paid_until' => 'required',
'rental_end' => 'required',
]);
//Decode the spmn
$str_array = explode(" - ", $request->spmn);
$system = $str_array[0];
$planet = $str_array[1];
$mn = $str_array[2];
$name = $str_array[3];
//Update the paid value from the request value
if($request->paid == 'Yes') {
$paid = 'Yes';
} else {
$paid = 'No';
}
//Setup the rental end and paid until variables
$rentalEnd = $request->rental_end . " 23:59:59";
$paidUntil = $request->paid_until . " 23:59:59";
//Check if the alliance is renting the moon for itself
if($request->contact_type == 'Corporation' && $request->contact == 'Spatial Forces') {
AllianceRentalMoon::where([
'system' => $str_array[0],
'planet' => $str_array[1],
'moon' => $str_array[2],
])->update([
'rental_type' => 'Alliance',
'rental_until' => $request->rental_end . " 23:59:59",
'rental_contact_id' => 98287666,
'rental_contact_type' => 'Alliance',
'paid' => 'No',
'paid_until' => null,
'alliance_use_until' => $request->rental_end . " 23:59:59",
]);
} else if($request->contact_type == 'Character') {
//Get the character id from the lookup helper
$charId = $lookup->CharacterNameToId($request->contact);
//Get the character information including the corporation from the lookup tables
$char = $lookup->GetCharacterInfo($charId);
//Get the corporation id from the lookup helper, followed by the alliance id
//so we can determine if it's in alliance or out of alliance
$corp = $lookup->GetCorporationInfo($char->corporation_id);
if($corp->alliance_id == 99004116) {
$type = 'In Alliance';
} else {
$type = 'Out of Alliance';
}
AllianceRentalMoon::where([
'system' => $str_array[0],
'planet' => $str_array[1],
'moon' => $str_array[2],
])->update([
'rental_type' => $type,
'rental_until' => $request->rental_end . " 23:59:59",
'rental_contact_id' => $charId,
'rental_contact_type' => 'Character',
'paid' => $paid,
'paid_until' => $request->paid_until . " 23:59:59",
'alliance_use_until' => null,
]);
} else if($request->contact_type == 'Corporation') {
//Get the corporation id from the lookup helper
$corpId = $lookup->CorporationNameToId($request->contact);
//Get the corporation information to determine if they are in Warped Intentions or not.
$corporation = $lookup->GetCorporationInfo($request->contact);
if($corp->alliance_id == 99004116) {
$type = 'In Alliance';
} else {
$type = 'Out of Alliance';
}
AllianceMoonRental::where([
'system' => $str_array[0],
'planet' => $str_array[1],
'moon' => $str_array[2],
])->update([
'rental_type' => $type,
'rental_until' => $request->rental_end . " 23:59:59",
'rental_contact_id' => $corpId,
'rental_contact_type' => 'Corporation',
'paid' => $paid,
'paid_until' => $request->paid_until . " 23:59:59",
'alliance_use_until' => null,
]);
}
//Redirect to the previous screen.
return redirect('/moons/admin/updatemoon')->with('success', 'Moon Rental updated.');
}
public function ImportMoonSurveyData(Request $request) {
//Declare variables
$added = 0;
$updated = 0;
$moon = null;
$newMoon = false;
$num = 0;
$planet = null;
$moonNumber = null;
foreach(explode("\n", $request->input('data')) as $row) {
$cols = explode("\t", $row);
dd($cols);
}
return redirect('/admin/dashboard')->with('success', 'Import done: ' . $added . ' moons added ' . $updated . ' moons updated.');
}
private function romanNumberToInteger($roman) {
$result = 0;
foreach($this->romans as $key => $value) {
while(strpos($roman, $key) === 0) {
$result += $value;
$roman = substr($roman, strlen($key));
}
}
return $result;
}
private function integerToRomanNumber($number) {
$returnValue = '';
while($number > 0) {
foreach($this->romans as $roman => $int) {
if($number >= $int) {
$number -= $int;
$returnValue .= $roman;
break;
}
}
}
return $returnValue;
}
private function arrayToCsv(array $rows) {
//Declare needed variable as text null
$result = '';
//Open the temp file
$fp = fopen('php://temp', 'w');
//Process the file
foreach($rows as $fields) {
fputcsv($fp, $fields, ';', '"');
}
//Go back to the beginning of the file
rewind($fp);
//Continue through the buffer until the end
while(($buffer = fgets($fp, 4096)) !== false) {
$result .= $buffer;
}
//Close the temp file
fclose($fp);
//Return the result
return $result;
}
}

View File

@@ -1,568 +0,0 @@
<?php
namespace App\Http\Controllers\Moons;
//Internal Library
use App\Http\Controllers\Controller;
use Auth;
use DB;
use Illuminate\Http\Request;
use Carbon\Carbon;
//Models
use App\Models\Moon\Config;
use App\Models\Moon\ItemComposition;
use App\Models\Moon\OrePrice;
use App\Models\Moon\Price;
use App\Models\Moon\AllianceMoon;
use App\Models\MoonRentals\AllianceRentalMoon;
use App\Models\Moon\AllianceMoonRequest;
//Library
use App\Library\Moons\MoonCalc;
use App\Library\Lookups\LookupHelper;
//Jobs
use App\Jobs\ProcessSendEveMailJob;
class MoonsController extends Controller
{
public function __construct() {
$this->middleware('auth');
$this->middleware('role:Renter');
}
public function displayRentalMoonPage() {
return view('moons.user.requestrental');
}
/**
* Function to display all alliance moons and pass data to the blade template
*/
public function displayMoons() {
//Setup variables for moons
$moons = array();
$systems = array();
//Get all of the alliance moon systems from the database
$systems = AllianceMoon::groupBy('System')->pluck('System');
//Get all of the alliance moons from the database
$moons = AllianceMoon::all();
$gasGoo = [
'Zeolites',
'Sylvite',
'Bitumens',
'Coesite',
];
$r8Goo = [
'Cobaltite',
'Euxenite',
'Titanite',
'Scheelite',
];
$r16Goo = [
'Otavite',
'Sperrylite',
'Vanadinite',
'Chromite',
];
$r32Goo = [
'Carnotite',
'Zircon',
'Pollucite',
'Cinnabar',
];
$r64Goo = [
'Xenotime',
'Monazite',
'Loparite',
'Ytterbite',
];
return view('moons.user.allmoons')->with('systems', $systems)
->with('moons', $moons)
->with('gasGoo', $gasGoo)
->with('r8Goo', $r8Goo)
->with('r16Goo', $r16Goo)
->with('r32Goo', $r32Goo)
->with('r64Goo', $r64Goo);
}
/**
* Function to display moon request form
*/
public function displayRequestAllianceMoon() {
return view('moons.user.requestmoon');
}
/**
* Function to store the moon request
*/
public function storeRequestAllianceMoon(Request $request) {
$this->validate($request, [
'system' => 'required',
'planet' => 'required',
'moon' => 'required',
]);
//Declare some necessary arrays for figuring out what region a moon resides in
$catch = [
'6X7-JO',
'A803-L',
'I8-D0G',
'WQH-4K',
'GJ0-JO',
'Q-S7ZD',
'JWZ2-V',
'J-ODE7',
'OGL8-Q',
'R-K4QY',
];
$immensea = [
'ZBP-TP',
'XVV-21',
'B9E-H6',
'JDAS-0',
'Y19P-1',
'LN-56V',
'O7-7UX',
'Y2-QUV',
'SPBS-6',
'A4B-V5',
'GXK-7F',
'78TS-Q',
'CJNF-J',
'EA-HSA',
'FYI-49',
'WYF8-8',
'NS2L-4',
'B-S347',
'AF0-V5',
'QI-S9W',
'B-A587',
'PPFB-U',
'L-5JCJ',
'4-GB14',
'REB-KR',
'QE-E1D',
'LK1K-5',
'Z-H2MA',
'B-KDOZ',
'E8-YS9',
'DY-P7Q',
];
//Declare lookup variables
$lookup = new LookupHelper;
//Get all of the information needed to create the database entry
$charId = auth()->user()->getId();
$charInfo = $lookup->GetCharacterInfo($charId);
$charName = $charInfo->name;
$corpInfo = $lookup->GetCorporationInfo($charInfo->corporation_id);
$corpId = $corpInfo->corporation_id;
$corpName = $corpInfo->name;
$corpTicker = $corpInfo->ticker;
//Declare the region variable as null for the lookup if statement
$region = null;
//Get the region the moon resides in from the system
if(in_array($request->system, $catch, true)) {
$region = 'Catch';
} else if(in_array($request->system, $immensea, true)) {
$region = 'Immensea';
} else {
//False value. Redirect back to page
return redirct('/moons/display/request')->with('error', 'Region was not found.');
}
//Check to see if the moon has been previously inputted for
$allMoons = AllianceMoon::all();
foreach($allMoons as $moon) {
if($moon->Region == $region && $moon->System == $request->system && $moon->Planet == $request->planet && $moon->Moon == $request->moon) {
if($moon->Availability != 'Available') {
return redirect('moons/display/request')->with('error', 'The moon has already been reserved by another party.');
}
break;
}
}
//Create the new object to save into the database
$moonRequest = new AllianceMoonRequest;
$moonRequest->region = $region;
$moonRequest->system = $request->system;
$moonRequest->planet = $request->planet;
$moonRequest->moon = $request->moon;
$moonRequest->corporation_id = $corpId;
$moonRequest->corporation_name = $corpName;
$moonRequest->corporation_ticker = $corpTicker;
$moonRequest->requestor_name = $charName;
$moonRequest->requestor_id = $charId;
$moonRequest->status = 'Pending';
$moonRequest->save();
//Update the current moon's status in the model AllianceMoon
AllianceMoon::where([
'Region' => $region,
'System' => $request->system,
'Planet' => $request->planet,
'Moon' => $request->moon,
])->update([
'Availability' => 'Request Pending',
]);
//Send a mail over to the site admins to approve the moon request
$config = config('esi');
$body = 'A new moon request has been entered into the services site. Please approve or deny the request within 3 business days.<br><br>';
$body .= 'Sincerely,<br>';
$body .= 'W4RP Services Site';
$subject = 'New Moon Request Available';
ProcessSendEveMailJob::dispatch($body, 92947432, 'character', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds(30));
ProcessSendEveMailJob::dispatch($body, 92626011, 'character', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds(60));
return redirect('/moons/display/request')->with('success', 'Moon request submitted.');
}
/**
* Function to display the moons and pass to the blade template
* Function description will be updated in a future release.
*/
public function displayRentalMoons() {
//Declare variables
$lastMonth = Carbon::now()->subMonth();
$today = Carbon::now();
$table = array();
$moonprice = null;
//Get the user type from the user Auth class
$type = auth()->user()->getUserType();
//Get all of the rental moons from the database
$moons = AllianceRentalMoon::orderBy('system', 'ASC')
->orderBy('planet', 'ASC')
->orderBy('moon', 'ASC')
->get();
//For each of the moons let's format the data for the display table
foreach($moons as $moon) {
$color = null;
$rentalTemp = null;
$rentalEnd = null;
//Check if someone is currently renting the moon
if($moon->rental_type == 'In Alliance' || $moon->rental_type == 'Out of Alliance') {
$rentalTemp = new Carbon($moon->rental_until);
$rentalEnd = $rentalTemp->format('m-d');
//Setup the correct color for the table
if($rentalTemp->diffInDays(Carbon::now()) < 3 && $today->lessThan($rentalTemp)) {
$color = 'table-warning';
} else if($today->lessThan($rentalTemp)) {
$color = 'table-danger';
} else {
$color = 'table-primary';
}
} else if($moon->rental_type == 'Alliance') {
$rentalTemp = Carbon::now()->endOfMonth();
$rentalEnd = $rentalTemp->format('m-d');
$color = 'table-info';
} else {
//Set the rental date for if someone is not renting the moon
$rentalTemp = $lastMonth;
$rentalEnd = $rentalTemp->format('m-d');
$color = 'table-primary';
}
//Get the price of the moon from the database based on if the person is in Warped Intentions
$userType = auth()->user()->getUserType();
if($userType == 'W4RP') {
$moonprice = $moon->alliance_rental_price;
} else {
$moonprice = $moon->out_of_alliance_rental_price;
}
//Add the data to the html array to be passed to the view
array_push($table, [
'SPM' => $moon->system . " - " . $moon->planet . " - " . $moon->moon,
'StructureName' => $moon->structure_name,
'FirstOre' => $moon->first_ore,
'FirstQuantity' => number_format($moon->first_quantity, 0, ".", ","),
'SecondOre' => $moon->second_ore,
'SecondQuantity' => number_format($moon->second_quantity, 0, ".", ","),
'ThirdOre' => $moon->third_ore,
'ThirdQuantity' => number_format($moon->third_quantity, 0, ".", ","),
'FourthOre' => $moon->fourth_ore,
'FourthQuantity' => number_format($moon->fourth_quantity, 0, ".", ","),
'Price' => number_format($moonprice, 0, ".", ","),
'Worth' => number_format($moon->moon_worth, 0, ".", ","),
'RentalEnd' => $rentalEnd,
'RowColor' => $color,
]);
}
//Pass the data to the view
return view('moons.user.moon')->with('table', $table);
}
public function displayTotalWorthForm() {
return view('moons.user.formTotalWorth');
}
public function displayTotalWorth(Request $request) {
//Setup calls to the MoonCalc class
$moonCalc = new MoonCalc();
$totalPull = 5.55 * (3600.00 * 24.00 * 30.00);
$composition = [
'Tritanium' => 0,
'Pyerite' => 0,
'Mexallon' => 0,
'Isogen' => 0,
'Nocxium' => 0,
'Zydrine' => 0,
'Megacyte' => 0,
'Atmospheric_Gases' => 0,
'Evaporite_Deposits' => 0,
'Hydrocarbons' => 0,
'Silicates' => 0,
'Cobalt' => 0,
'Scandium' => 0,
'Titanium' => 0,
'Tungsten' => 0,
'Cadmium' => 0,
'Platinum' => 0,
'Vanadium'=> 0,
'Chromium' => 0,
'Technetium' => 0,
'Hafnium' => 0,
'Caesium' => 0,
'Mercury' => 0,
'Dysprosium' => 0,
'Neodymium' => 0,
'Promethium' => 0,
'Thulium' => 0,
];
$firstOre = $request->firstOre;
if($request->firstQuantity >= 1.00) {
$firstQuantity = $request->firstQuantity / 100.00;
} else {
$firstQuantity = $request->firstQuantity;
}
$secondOre = $request->secondOre;
if($request->secondQuantity >= 1.00) {
$secondQuantity = $request->secondQuantity / 100.00;
} else {
$secondQuantity = $request->secondQuantity;
}
$thirdOre = $request->thirdOre;
if($request->thirdQuantity >= 1.00) {
$thirdQuantity = $request->thirdQuantity / 100.00;
} else {
$thirdQuantity = $request->thirdQuantity;
}
$fourthOre = $request->fourthOre;
if($request->fourthQuantity >= 1.00) {
$fourthQuantity = $request->fourthQuantity / 100.00;
} else {
$fourthQuantity = $request->fourthQuantity;
}
if($request->reprocessing >= 1.00) {
$reprocessing = $request->reprocessing / 100.00;
} else {
$reprocessing = $request->reprocessing;
}
//Set the reprocessing level for 84% if the value is null
if($request->reprocessing == null) {
$reprocessing = 0.84;
}
//Get the total percentage of the ores, and normalize it to 1.00.
$totalPercent = $firstQuantity + $secondQuantity + $thirdQuantity + $fourthQuantity;
if($totalPercent < 1.00) {
$firstQuantity = $firstQuantity / $totalPercent;
$secondQuantity = $secondQuantity / $totalPercent;
$thirdQuantity = $thirdQuantity / $totalPercent;
$fourthQuantity = $fourthQuantity / $totalPercent;
}
//Calculate the total worth of the moon
$totalWorth = $moonCalc->SpatialMoonsTotalWorth($firstOre, $firstQuantity, $secondOre, $secondQuantity,
$thirdOre, $thirdQuantity, $fourthOre, $fourthQuantity);
//Format the number to send to the blade.
$totalWorth = number_format($totalWorth, 2, ".", ",");
//Get the composition for the first ore if it is not None.
//Add the first ore composition to the final composition
if($firstOre != 'None') {
//Get the ore's composition
$firstComp = $moonCalc->GetOreComposition($firstOre);
//Get the amount of units mine-able from the moon
$mUnits = $moonCalc->CalcOreUnits($firstOre, $firstQuantity);
//Calculate the number of reprocessing units to happen from moon units
$rUnits = floor($mUnits / 100.0);
//Compile the composition of the ore
$composition['Tritanium'] += floor(($firstComp->Tritanium * $rUnits) * $reprocessing);
$composition['Pyerite'] += floor(($firstComp->Pyerite * $rUnits) * $reprocessing);
$composition['Mexallon'] += floor(($firstComp->Mexallon * $rUnits) * $reprocessing);
$composition['Isogen'] += floor(($firstComp->Isogen * $rUnits) * $reprocessing);
$composition['Nocxium'] += floor(($firstComp->Nocxium * $rUnits) * $reprocessing);
$composition['Zydrine'] += floor(($firstComp->Zydrine * $rUnits) * $reprocessing);
$composition['Megacyte'] += floor(($firstComp->Megacyte * $rUnits) * $reprocessing);
$composition['Atmospheric_Gases'] += floor(($firstComp->AtmosphericGases * $rUnits) * $reprocessing);
$composition['Evaporite_Deposits'] += floor(($firstComp->EvaporiteDeposits * $rUnits) * $reprocessing);
$composition['Hydrocarbons'] += floor(($firstComp->Hydrocarbons * $rUnits) * $reprocessing);
$composition['Silicates'] += floor(($firstComp->Silicates * $rUnits) * $reprocessing);
$composition['Cobalt'] += floor(($firstComp->Cobalt * $rUnits) * $reprocessing);
$composition['Scandium'] += floor(($firstComp->Scandium * $rUnits) * $reprocessing);
$composition['Titanium'] += floor(($firstComp->Titanium * $rUnits) * $reprocessing);
$composition['Tungsten'] += floor(($firstComp->Tungsten * $rUnits) * $reprocessing);
$composition['Cadmium'] += floor(($firstComp->Cadmium * $rUnits) * $reprocessing);
$composition['Platinum'] += floor(($firstComp->Platinium * $rUnits) * $reprocessing);
$composition['Vanadium'] += floor(($firstComp->Vanadium * $rUnits) * $reprocessing);
$composition['Chromium'] += floor(($firstComp->Chromium * $rUnits) * $reprocessing);
$composition['Technetium'] += floor(($firstComp->Technetium * $rUnits) * $reprocessing);
$composition['Hafnium'] += floor(($firstComp->Hafnium * $rUnits) * $reprocessing);
$composition['Caesium'] += floor(($firstComp->Caesium * $rUnits) * $reprocessing);
$composition['Mercury'] += floor(($firstComp->Mercury * $rUnits) * $reprocessing);
$composition['Dysprosium'] += floor(($firstComp->Dysprosium * $rUnits) * $reprocessing);
$composition['Neodymium'] += floor(($firstComp->Neodymium * $rUnits) * $reprocessing);
$composition['Promethium'] += floor(($firstComp->Promethium * $rUnits) * $reprocessing);
$composition['Thulium'] += floor(($firstComp->Thulium * $rUnits) * $reprocessing);
}
//Get the composition for the second ore if it is not None.
//Add the second ore composition to the final composition
if($secondOre != 'None') {
//Get the ore's composition
$secondComp = $moonCalc->GetOreComposition($secondOre);
//Get the amount of units mine-able from the moon
$mUnits = $moonCalc->CalcOreUnits($secondOre, $secondQuantity);
//Calculate the number of reprocessing units to happen from moon units
$rUnits = floor($mUnits / 100.0);
$composition['Tritanium'] += floor(($secondComp->Tritanium * $rUnits) * $reprocessing);
$composition['Pyerite'] += floor(($secondComp->Pyerite * $rUnits) * $reprocessing);
$composition['Mexallon'] += floor(($secondComp->Mexallon * $rUnits) * $reprocessing);
$composition['Isogen'] += floor(($secondComp->Isogen * $rUnits) * $reprocessing);
$composition['Nocxium'] += floor(($secondComp->Nocxium * $rUnits) * $reprocessing);
$composition['Zydrine'] += floor(($secondComp->Zydrine * $rUnits) * $reprocessing);
$composition['Megacyte'] += floor(($secondComp->Megacyte * $rUnits) * $reprocessing);
$composition['Atmospheric_Gases'] += floor(($secondComp->AtmosphericGases * $rUnits) * $reprocessing);
$composition['Evaporite_Deposits'] += floor(($secondComp->EvaporiteDeposits * $rUnits) * $reprocessing);
$composition['Hydrocarbons'] += floor(($secondComp->Hydrocarbons * $rUnits) * $reprocessing);
$composition['Silicates'] += floor(($secondComp->Silicates * $rUnits) * $reprocessing);
$composition['Cobalt'] += floor(($secondComp->Cobalt * $rUnits) * $reprocessing);
$composition['Scandium'] += floor(($secondComp->Scandium * $rUnits) * $reprocessing);
$composition['Titanium'] += floor(($secondComp->Titanium * $rUnits) * $reprocessing);
$composition['Tungsten'] += floor(($secondComp->Tungsten * $rUnits) * $reprocessing);
$composition['Cadmium'] += floor(($secondComp->Cadmium * $rUnits) * $reprocessing);
$composition['Platinum'] += floor(($secondComp->Platinium * $rUnits) * $reprocessing);
$composition['Vanadium'] += floor(($secondComp->Vanadium * $rUnits) * $reprocessing);
$composition['Chromium'] += floor(($secondComp->Chromium * $rUnits) * $reprocessing);
$composition['Technetium'] += floor(($secondComp->Technetium * $rUnits) * $reprocessing);
$composition['Hafnium'] += floor(($secondComp->Hafnium * $rUnits) * $reprocessing);
$composition['Caesium'] += floor(($secondComp->Caesium * $rUnits) * $reprocessing);
$composition['Mercury'] += floor(($secondComp->Mercury * $rUnits) * $reprocessing);
$composition['Dysprosium'] += floor(($secondComp->Dysprosium * $rUnits) * $reprocessing);
$composition['Neodymium'] += floor(($secondComp->Neodymium * $rUnits) * $reprocessing);
$composition['Promethium'] += floor(($secondComp->Promethium * $rUnits) * $reprocessing);
$composition['Thulium'] += floor(($secondComp->Thulium * $rUnits) * $reprocessing);
}
//Get the composition for the third ore if it is not None.
//Add the third ore composition to the final composition
if($thirdOre != 'None') {
//Get the ore's composition
$thirdComp = $moonCalc->GetOreComposition($thirdOre);
//Get the amount of units mine-able from the moon
$mUnits = $moonCalc->CalcOreUnits($thirdOre, $thirdQuantity);
//Calculate the number of reprocessing units to happen from moon units
$rUnits = floor($mUnits / 100.0);
$composition['Tritanium'] += floor(($thirdComp->Tritanium * $rUnits) * $reprocessing);
$composition['Pyerite'] += floor(($thirdComp->Pyerite * $rUnits) * $reprocessing);
$composition['Mexallon'] += floor(($thirdComp->Mexallon * $rUnits) * $reprocessing);
$composition['Isogen'] += floor(($thirdComp->Isogen * $rUnits) * $reprocessing);
$composition['Nocxium'] += floor(($thirdComp->Nocxium * $rUnits) * $reprocessing);
$composition['Zydrine'] += floor(($thirdComp->Zydrine * $rUnits) * $reprocessing);
$composition['Megacyte'] += floor(($thirdComp->Megacyte * $rUnits) * $reprocessing);
$composition['Atmospheric_Gases'] += floor(($thirdComp->AtmosphericGases * $rUnits) * $reprocessing);
$composition['Evaporite_Deposits'] += floor(($thirdComp->EvaporiteDeposits * $rUnits) * $reprocessing);
$composition['Hydrocarbons'] += floor(($thirdComp->Hydrocarbons * $rUnits) * $reprocessing);
$composition['Silicates'] += floor(($thirdComp->Silicates * $rUnits) * $reprocessing);
$composition['Cobalt'] += floor(($thirdComp->Cobalt * $rUnits) * $reprocessing);
$composition['Scandium'] += floor(($thirdComp->Scandium * $rUnits) * $reprocessing);
$composition['Titanium'] += floor(($thirdComp->Titanium * $rUnits) * $reprocessing);
$composition['Tungsten'] += floor(($thirdComp->Tungsten * $rUnits) * $reprocessing);
$composition['Cadmium'] += floor(($thirdComp->Cadmium * $rUnits) * $reprocessing);
$composition['Platinum'] += floor(($thirdComp->Platinium * $rUnits) * $reprocessing);
$composition['Vanadium'] += floor(($thirdComp->Vanadium * $rUnits) * $reprocessing);
$composition['Chromium'] += floor(($thirdComp->Chromium * $rUnits) * $reprocessing);
$composition['Technetium'] += floor(($thirdComp->Technetium * $rUnits) * $reprocessing);
$composition['Hafnium'] += floor(($thirdComp->Hafnium * $rUnits) * $reprocessing);
$composition['Caesium'] += floor(($thirdComp->Caesium * $rUnits) * $reprocessing);
$composition['Mercury'] += floor(($thirdComp->Mercury * $rUnits) * $reprocessing);
$composition['Dysprosium'] += floor(($thirdComp->Dysprosium * $rUnits) * $reprocessing);
$composition['Neodymium'] += floor(($thirdComp->Neodymium * $rUnits) * $reprocessing);
$composition['Promethium'] += floor(($thirdComp->Promethium * $rUnits) * $reprocessing);
$composition['Thulium'] += floor(($thirdComp->Thulium * $rUnits) * $reprocessing);
}
//Get the composition for the fourth ore if it is not None.
//Add the fourth ore composition to the final composition
if($fourthOre != 'None') {
//Get the ore's composition
$fourthComp = $moonCalc->GetOreComposition($fourthOre);
//Get the amount of units mine-able from the moon
$mUnits = $moonCalc->CalcOreUnits($fourthOre, $fourthQuantity);
//Calculate the number of reprocessing units to happen from moon units
$rUnits = floor($mUnits / 100.0);
$composition['Tritanium'] += floor(($fourthComp->Tritanium * $rUnits) * $reprocessing);
$composition['Pyerite'] += floor(($fourthComp->Pyerite * $rUnits) * $reprocessing);
$composition['Mexallon'] += floor(($fourthComp->Mexallon * $rUnits) * $reprocessing);
$composition['Isogen'] += floor(($fourthComp->Isogen * $rUnits) * $reprocessing);
$composition['Nocxium'] += floor(($fourthComp->Nocxium * $rUnits) * $reprocessing);
$composition['Zydrine'] += floor(($fourthComp->Zydrine * $rUnits) * $reprocessing);
$composition['Megacyte'] += floor(($fourthComp->Megacyte * $rUnits) * $reprocessing);
$composition['Atmospheric_Gases'] += floor(($fourthComp->AtmosphericGases * $rUnits) * $reprocessing);
$composition['Evaporite_Deposits'] += floor(($fourthComp->EvaporiteDeposits * $rUnits) * $reprocessing);
$composition['Hydrocarbons'] += floor(($fourthComp->Hydrocarbons * $rUnits) * $reprocessing);
$composition['Silicates'] += floor(($fourthComp->Silicates * $rUnits) * $reprocessing);
$composition['Cobalt'] += floor(($fourthComp->Cobalt * $rUnits) * $reprocessing);
$composition['Scandium'] += floor(($fourthComp->Scandium * $rUnits) * $reprocessing);
$composition['Titanium'] += floor(($fourthComp->Titanium * $rUnits) * $reprocessing);
$composition['Tungsten'] += floor(($fourthComp->Tungsten * $rUnits) * $reprocessing);
$composition['Cadmium'] += floor(($fourthComp->Cadmium * $rUnits) * $reprocessing);
$composition['Platinum'] += floor(($fourthComp->Platinium * $rUnits) * $reprocessing);
$composition['Vanadium'] += floor(($fourthComp->Vanadium * $rUnits) * $reprocessing);
$composition['Chromium'] += floor(($fourthComp->Chromium * $rUnits) * $reprocessing);
$composition['Technetium'] += floor(($fourthComp->Technetium * $rUnits) * $reprocessing);
$composition['Hafnium'] += floor(($fourthComp->Hafnium * $rUnits) * $reprocessing);
$composition['Caesium'] += floor(($fourthComp->Caesium * $rUnits) * $reprocessing);
$composition['Mercury'] += floor(($fourthComp->Mercury * $rUnits) * $reprocessing);
$composition['Dysprosium'] += floor(($fourthComp->Dysprosium * $rUnits) * $reprocessing);
$composition['Neodymium'] += floor(($fourthComp->Neodymium * $rUnits) * $reprocessing);
$composition['Promethium'] += floor(($fourthComp->Promethium * $rUnits) * $reprocessing);
$composition['Thulium'] += floor(($fourthComp->Thulium * $rUnits) * $reprocessing);
}
return view('moons.user.displayTotalWorth')->with('totalWorth', $totalWorth)
->with('composition', $composition)
->with('reprocessing', $reprocessing);
}
}

View File

@@ -1,62 +0,0 @@
<?php
namespace App\Http\Controllers\Moons;
//Internal Library
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;
use Log;
use Carbon\Carbon;
//Models
use App\Models\Moon\AllianceRentalMoon;
class RentalMoonsAdminController extends Controller
{
/**
* Construct
*/
public function __construct() {
$this->middleware('auth');
$this->middelware('role:user');
$this->middleware('permission:mining.director');
}
/**
* Function to display rental moons being used for the alliance
*/
public function displayAllianceUsageRentalMoons() {
}
/**
* Display the form for requesting new rental moon for the alliance
*/
public function displayRentalMoonForAllianceForm() {
}
/**
* Function to store when a new rental moon is requested
*/
public function storeRentalMoonForAlliance(Request $request) {
}
/**
* Function to display the form for figuring out item composition
*/
public function displayItemCompositionForm() {
}
/**
* Function to display the results of the form for figuring out item composition
*/
public function displayItemCompositionResults(Request $request) {
}
}

View File

@@ -10,7 +10,7 @@ use Khill\Lavacharts\Lavacharts;
use Carbon\Carbon;
//User Libraries
use App\Library\SRP\SRPHelper;
use App\Library\Helpers\SRPHelper;
//Models
use App\Models\SRP\SRPShip;

View File

@@ -7,7 +7,8 @@ use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;
//User Libraries
//Application Libraries
use App\Library\Helpers\SRPHelper;
//Models
use App\Models\SRP\SRPShip;

View File

@@ -1,156 +0,0 @@
<?php
namespace App\Http\Controllers\SystemRentals;
//Internal Library
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Auth;
use DB;
use Carbon\Carbon;
//Models
use App\Models\SystemRentals\RentalSystem;
//Library
use App\Library\Lookups\LookupHelper;
use App\Library\Esi\Esi;
class RentalAdminController extends Controller
{
//Constructor
public function __construct() {
$this->middleware('auth');
$this->middleware('role:Admin');
}
/**
* Function to display all active rental systems and
* the information regarding the rental systems
*/
public function displayRentalSystems() {
//Get the rental systems from the database
$rentals = RentalSystem::all();
foreach($rentals as $rental) {
//Format the rental cost
if($rental->rental_cost > 1000000000.00) {
$rental->rental_cost = $rental->rental_cost / 1000000000.00;
$rental->rental_cost = $rental->rental_cost . "B";
} else if($rental->rental_cost > 1000000.00 && $rental->rental_cost < 999999999.99) {
$rental->rental_cost = $rental->rental_cost / 1000000.00;
$rental->rental_cost = $rental->rental_cost . "M";
}
//Format the date
$rental->paid_until = Carbon::parse($rental->paid_until)->format('Y-m-d');
}
//Return the view with the data
return view('rental.list')->with('rentals', $rentals);
}
/**
* Function to display form for adding new rental system
*/
public function displayAddRentalSystem() {
return view('rental.add');
}
/**
* Function to add new rental system to the database
*/
public function addRentalSystem(Request $request) {
$this->validate($request, [
'contact_name' => 'required',
'contact_corp_name' => 'required',
'system' => 'required',
'rental_cost' => 'required',
'paid_until' => 'required',
]);
//Declare the variables and classes needed
$lookup = new LookupHelper;
//From the character name find the character id
$charId = $lookup->CharacterNameToId($request->contact_name);
//From the corporation name find the corporation id
$corpId = $lookup->CorporationNameToId($request->contact_corp_name);
//From the system name find the system id
$systemId = $lookup->SystemNameToId($request->system);
//Sanitize the bid amount
if(preg_match('(m|M|b|B)', $request->rental_cost) === 1) {
if(preg_match('(m|M)', $request->rental_cost) === 1) {
$cStringSize = strlen($request->rental_cost);
$tempCol = str_split($request->rental_cost, $cStringSize - 1);
$rentalCost = $tempCol[0];
$rentalCost = $rentalCost * 1000000.00;
} else if(preg_match('(b|B)', $request->rental_cost) === 1) {
$cStringSize = strlen($request->rental_cost);
$tempCol = str_split($request->rental_cost, $cStringSize - 1);
$rentalCost = $tempCol[0];
$rentalCost = $rentalCost * 1000000000.00;
}
} else {
$rentalCost = $request->rental_cost;
}
//Create the database model
$rental = new RentalSystem;
$rental->contact_id = $charId;
$rental->contact_name = $request->contact_name;
$rental->corporation_id = $corpId;
$rental->corporation_name = $request->contact_corp_name;
$rental->system_id = $systemId;
$rental->system_name = $request->system;
$rental->rental_cost = $rentalCost;
$rental->paid_until = $request->paid_until;
$rental->save();
return redirect('/system/rental/dashboard')->with('success', 'Rental System Added.');
}
/**
* Function to update paid until section of the rental system in the database
*/
public function updateRentalSystem(Request $request) {
$this->validate($request, [
'paid_until' => 'required',
'contact_id' => 'required',
'corporation_id' => 'required',
'system_id' => 'required',
]);
RentalSystem::where([
'contact_id' => $request->contact_id,
'corporation_id' => $request->corporation_id,
'system_id' => $request->system_id,
])->update([
'paid_until' => $request->paid_until,
]);
return redirect('/system/rental/dashboard')->with('success', 'Rental System updated.');
}
/**
* Function to remove rental system from the database
*/
public function removeRentalSystem(Request $request) {
$this->validate($request, [
'contact_id' => 'required',
'corporation_id' => 'required',
'system_id' => 'required',
]);
RentalSystem::where([
'contact_id' => $request->contact_id,
'corporation_id' => $request->corporation_id,
'system_id' => $request->system_id,
])->delete();
return redirect('/system/rental/dashboard')->with('success', 'Removed renter from database.');
}
}

View File

@@ -2,10 +2,27 @@
namespace App\Http\Controllers\Test;
//Internal Library
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Log;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
use App\Library\Lookups\LookupHelper;
//Application Library
use App\Library\Helpers\LookupHelper;
use App\Library\Esi\Esi;
use App\Library\Moons\MoonCalc;
//Models
use App\Models\MoonRental\AllianceMoon;
use App\Models\MoonRental\AllianceMoonOre;
use App\Models\MiningTax\Invoice;
use App\Models\MiningTax\Ledger;
use App\Models\MiningTax\Observer;
use App\Models\User\UserAlt;
use App\Models\User\User;
class TestController extends Controller
{
@@ -19,7 +36,331 @@ class TestController extends Controller
return view('test.char.display')->with('char', $char);
}
public function CharacterLookupTest(Request $request) {
public function DebugMiningTaxesInvoices() {
//Declare variables
$mailDelay = 15;
$mains = new Collection;
$perms = null;
$config = config('esi');
$bodies = new Collection;
/**
* This section will determine if users are mains or alts of a main.
* If they are mains, we keep the key. If they are alts of a main, then we delete
* the key from the collection.
*/
//Pluck all the users from the database of ledgers to determine if they are mains or alts.
$tempMains = Ledger::where([
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subDays(7))->pluck('character_id');
//Get the unique character ids from the ledgers in the previous statement
$tempMains = $tempMains->unique()->values()->all();
//Cycle through the array of mains, and remove any characters which are in the User Alt table,
//as those characters will be grouped with their correct main later.
for($i = 0; $i < sizeof($tempMains); $i++) {
if(UserAlt::where(['character_id' => $tempMains[$i]])->count() == 0) {
$mains->push($tempMains[$i]);
}
}
/**
* For each of the users, let's determine if there are any ledgers,
* then determine if there are any alts and ledgers associated with the alts.
*/
foreach($mains as $main) {
//Declare some variables for each run through the for loop
$ledgers = new Collection;
//Count the ledgers for the main
$mainLedgerCount = Ledger::where([
'character_id' => $main,
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subDays(7))->count();
//If there are ledgers for the main, then let's grab them
if($mainLedgerCount > 0) {
$mainLedgers = Ledger::where([
'character_id' => $main,
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subDays(7))->get();
//Cycle through the entries, and add them to the ledger to send with the invoice
foreach($mainLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => (int)$row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
//Get the alt count for the main character
$altCount = UserAlt::where(['main_id' => $main])->count();
//If more than 0 alts, grab all the alts.
if($altCount > 0) {
$alts = UserAlt::where([
'main_id' => $main,
])->get();
//Cycle through the alts, and get the ledgers, and push onto the stack
foreach($alts as $alt) {
$altLedgerCount = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subDays(7))->count();
if($altLedgerCount > 0) {
$altLedgers = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subDays(7))->get();
foreach($altLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => (int)$row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
}
}
/**
* Send the collected information over to the function to send the actual mail
*/
if($ledgers->count() > 0) {
$body = $this->CreateInvoice($main, $ledgers, $mailDelay);
$bodies->push($body);
}
}
return view('test.miningtax.invoice')->with('bodies', $bodies);
}
/**
* Create the invoice to the mail out
*
* @var charId
* @var ledgers
* @var mailDelay
*/
private function CreateInvoice($charId, Collection $ledgers, int &$mailDelay) {
$ores = array();
$characters = array();
$characterIds = array();
$totalPrice = 0.00;
$body = null;
$lookup = new LookupHelper;
$config = config('esi');
//Create an invoice id
$invoiceId = "M" . uniqid();
//Collect the total price of all of the ledgers
$totalPrice = round((float)$ledgers->sum('amount'), 2);
//Get the sum of all the ledgers
$invoiceAmount = round(((float)$ledgers->sum('amount') * (float)$config['mining_tax']), 2);
//Get the character name from the lookup table
$charName = $lookup->CharacterIdToName($charId);
//Create the date due and the invoice date
$dateDue = Carbon::now()->addDays(7);
$invoiceDate = Carbon::now();
//Set the mining tax from the config file
$numberMiningTax = number_format(((float)$config['mining_tax'] * (float)100.00), 2, ".", ",");
//Create the list of ores to put in the mail
$temp = $ledgers->toArray();
foreach($temp as $t) {
//If the key isn't set, set it to the default of 0
if(!isset($ores[$t['type_id']])) {
$ores[$t['type_id']] = (int)0;
}
//Add the quantity into the ores array
$ores[$t['type_id']] += (int)$t['quantity'];
//Create a list of character names
if(!isset($characters[$t['character_name']])) {
$characters[$t['character_name']] = $t['character_name'];
}
//Create a list of character ids
if(!isset($characterIds[$t['character_id']])) {
$characterIds[$t['character_id']] = $t['character_id'];
}
}
/**
* Create the mail body to send to the main character
*/
$body .= "Dear " . $charName . ",<br><br>";
$body .= "Mining Taxes are due for the following ores mined from alliance moons: <br>";
foreach($ores as $ore => $quantity) {
$oreName = $lookup->ItemIdToName($ore);
$body .= $oreName . ": " . number_format($quantity, 0, ".", ",") . "<br>";
}
$body .= "Total Value of Ore Mined: " . number_format($totalPrice, 2, ".", ",") . " ISK.";
$body .= "<br><br>";
$body .= "Please remit " . number_format($invoiceAmount, 2, ".", ",") . " ISK to Spatial Forces by " . $dateDue . "<br>";
$body .= "Set the reason for transfer as " . $invoiceId . "<br>";
$body .= "The mining taxes are currently set to " . $numberMiningTax . "%.<br>";
$body .= "<br><br>";
$body .= "You can also send a contract with the following ores in the contract with the reason set as: " . $invoiceId . "<br>";
foreach($ores as $ore => $quantity) {
$oreName = $lookup->ItemIdToName($ore);
$body .= $oreName . ": " . number_format(round($quantity * $config['mining_tax']), 0, ".", ",") . "<br>";
}
$body .= "<br>";
$body .= "Characters Processed: <br>";
foreach($characters as $character) {
$body .= $character . "<br>";
}
$body .= "<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
//Check if the mail body is greater than 2000 characters. If greater than 2,000 characters, then
if(strlen($body) > 2000) {
$body = "Dear " . $charName . "<br><br>";
$body .= "Total Value of Ore Mined: " . number_format($totalPrice, 2, ".", ",") . " ISK.";
$body .= "<br><br>";
$body .= "Please remit " . number_format($invoiceAmount, 2, ".", ",") . " ISK to Spatial Forces by " . $dateDue . "<br>";
$body .= "Set the reason for transfer as: " . $invoiceId . "<br>";
$body .= "The mining taxes are currently set to " . $numberMiningTax . "%.<br>";
$body .= "<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
}
/**
* Increment the mail delay for the next cycle
*/
$mailDelay += 20;
return $body;
}
public function DebugMiningObservers() {
//Declare variables
$mailDelay = 15;
$config = config('esi');
$mains = new Collection;
/**
* This section will determine if users are mains or alts of a main.
* If they are mains, we keep the key. If they are alts of a main, then we delete
* the key from the collection.
*/
//Pluck all the users from the database of ledgers to determine if they are mains or alts.
$tempMains = Ledger::where([
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subMonths(3))->pluck('character_id');
//Get the unique character ids from the ledgers in the previous statement
$tempMains = $tempMains->unique()->values()->all();
for($i = 0; $i < sizeof($tempMains); $i++) {
if(UserAlt::where(['character_id' => $tempMains[$i]])->count() == 0) {
$mains->push($tempMains[$i]);
}
}
/**
* For each of the users, let's determine if there are any ledgers,
* then determine if there are any alts and ledgers associated with the alts.
*/
foreach($mains as $main) {
//Declare some variables for each run through the for loop
$mainLedgerCount = 0;
$ledgers = new Collection;
//Count the ledgers for the main
$mainLedgerCount = Ledger::where([
'character_id' => $main,
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subMonths(3))->count();
//If there are ledgers for the main, then let's grab them
if($mainLedgerCount > 0) {
$mainLedgers = Ledger::where([
'character_id' => $main,
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subMonths(3))->get();
//Cycle through the entries, and add them to the ledger to send with the invoice
foreach($mainLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => $row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
//Get the alt count for the main character
$altCount = UserAlt::where(['main_id' => $main])->count();
//If more than 0 alts, grab all the alts.
if($altCount > 0) {
$alts = UserAlt::where([
'main_id' => $main,
])->get();
//Cycle through the alts, and get the ledgers, and push onto the stack
foreach($alts as $alt) {
$altLedgerCount = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subMonths(3))->count();
if($altLedgerCount > 0) {
$altLedgers = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'Yes',
])->where('last_updated', '>', Carbon::now()->subMonths(3))->get();
foreach($altLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => $row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
}
}
if($ledgers->count() > 0) {
var_dump($ledgers);
var_dump(round(((float)$ledgers->sum('amount') * (float)$config['mining_tax']), 2));
}
}
}
}

View File

@@ -1,152 +0,0 @@
<?php
namespace App\Http\Controllers\Wiki;
//Laravel libraries
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Auth;
//User Libraries
use App\Library\Lookups\LookupHelper;
use App\Library\Wiki\WikiHelper;
//Models
use App\Models\Doku\DokuGroupNames;
use App\Models\Doku\DokuMember;
use App\Models\Doku\DokuUser;
use App\Models\Admin\AllowedLogin;
use App\Models\User\User;
class WikiController extends Controller
{
public function __construct() {
$this->middleware('auth');
$this->middleware('role:Renter');
}
public function displayRegister() {
//make user name syntax like we want it.
$name = Auth::user()->name;
$name = strtolower($name);
$name = str_replace(' ', '_', $name);
//Check to see if the user is already registered in the database
$count = DokuUser::where([
'login' => $name,
])->count();
//If the count is greater than zero, also check the login name as a reference
if($count > 0) {
$check = DokuUser::where([
'login' => $name,
])->first();
if($check->login === $name) {
return redirect('/dashboard')->with('error', 'Already registered for the wiki!');
}
}
return view('wiki.user.register')->with('name', $name);
}
public function storeRegister(Request $request) {
$this->validate($request, [
'password' => 'required',
'password2' => 'required',
]);
$password = '';
//Check to make sure the password matches
if($request->password !== $request->password2) {
return view('/dashboard')->with('error');
} else {
$password = md5($request->password);
}
if(Auth::user()->hasRole('User')) {
$role = 1; //User role id from wiki_groupname table
$roleDescription = 'user';
} else if(Auth::user()->hasRole('Renter')) {
$role = 8; //Renter role id from wiki_groupname table
$roleDescription = 'renter';
}
//Load the model
$user = new DokuUser;
$member = new DokuMember;
//make user name syntax like we want it.
$name = Auth::user()->name;
$name = strtolower($name);
$name = str_replace(' ', '_', $name);
//Add the new user to the wiki
$user->login = $name;
$user->pass = $password;
$user->name = Auth::user()->name;
$user->save();
//Get the user from the table to get the uid
$uid = DokuUser::where([
'login' => $name,
])->first();
//Save information in the model
$member->uid = $uid->id;
$member->gid = $role;
$member->groupname = $roleDescription;
$member->save();
//Return to the dashboard view
return redirect('/dashboard')->with('success', 'Registration successful. Your username is: ' . $name);
}
public function displayChangePassword() {
$name = Auth::user()->name;
$name = strtolower($name);
$name = str_replace(' ', '_', $name);
//Get the password
$check = DokuUser::where([
'login' => $name
])->count();
if($check == 0) {
return redirect('/dashboard')->with('error', 'Login Not Found');
}
return view('wiki.user.changepassword')->with('name', $name);
}
public function changePassword(Request $request) {
$this->validate($request, [
'password' => 'required',
'password2' => 'required',
]);
//Check for a valid password
$password = '';
if($request->password !== $request->password2) {
return redirect('/wiki/changepassword')->with('error', 'Passwords did not match');
} else {
$password = md5($request->password);
}
//Get a model ready for the database
$user = new DokuUser;
//Find the username for the database through the character name in auth
$name = Auth::user()->name;
$name = strtolower($name);
$name = str_replace(' ', '_', $name);
//Update the password for the login name
DokuUser::where([
'login' => $name,
])->update([
'pass' => $password,
]);
return redirect('/dashboard')->with('success', 'Password changed successfully. Your username is: ' . $name);
}
}

View File

@@ -60,7 +60,6 @@ class Kernel extends HttpKernel
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
//'callback' => \App\Http\Middleware\Callback::class,
'role' => \App\Http\Middleware\RequireRole::class,
'permission' => \App\Http\Middleware\RequirePermission::class,
];

View File

@@ -15,7 +15,7 @@ class Authenticate extends Middleware
protected function redirectTo($request)
{
if(!$this->auth->check()){
return route('/');
return '/';
}
}
}

View File

@@ -1,121 +0,0 @@
<?php
namespace App\Http\Middleware;
//Internal Library
use Closure;
use Illuminate\Support\Facades\Auth;
use Socialite;
use DB;
//Libraries
use Seat\Eseye\Cache\NullCache;
use Seat\Eseye\Configuration;
use Seat\Eseye\Containers\EsiAuthentication;
use Seat\Eseye\Eseye;
//Models
use App\Models\User\User;
use App\Models\Esi\EsiToken;
use App\Models\Esi\EsiScope;
class Callback
{
/**
* Handle an incoming request for callback. Set to handle the request after the
* login controller does what it needs to do.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $ssoUser)
{
$response = $next($request);
if(isset($ssoUser->refreshToken)) {
//See if an access token is present for the user
$tokenCount = EsiToken::where(['character_id' => $ssoUser->id])->count();
if($tokenCount > 0) {
//Update the esi token
$this->UpdateEsiToken($ssoUser);
} else {
//Save the esi token
$this->SaveEsiToken($ssoUser);
}
//After creating or updating the token, update the table for the scopes.
$this->SetScopes($ssoUser->user['Scopes'], $ssoUser->id);
} else {
$created = $this->createAlt($ssoUser);
}
return $response;
}
/**
* Update the ESI Token
*/
private function UpdateEsiToken($eve_user) {
EsiToken::where('character_id', $eve_user->id)->update([
'character_id' => $eve_user->getId(),
'access_token' => $eve_user->token,
'refresh_token' => $eve_user->refreshToken,
'inserted_at' => time(),
'expires_in' => $eve_user->expiresIn,
]);
}
/**
* Create a new ESI Token in the database
*/
private function SaveEsiToken($eve_user) {
$token = new EsiToken;
$token->character_id = $eve_user->id;
$token->access_token = $eve_user->token;
$token->refresh_token = $eve_user->refreshToken;
$token->inserted_at = time();
$token->expires_in = $eve_user->expiresIn;
$token->save();
}
private function SetScopes($scopes, $charId) {
//Delete the current scopes, so we can add new scopes into the database
EsiScope::where('character_id', $charId)->delete();
$scopes = explode(' ', $scopes);
foreach($scopes as $scope) {
$data = new EsiScope;
$data->character_id = $charId;
$data->scope = $scope;
$data->save();
}
}
/**
* Check if an alt exists in the database, else, create and
* return the user object.
*
* @param \Laravel\Socialite\Two\User $user
*/
private function createAlt($user) {
$altCount = UserAlt::where('character_id', $user->id)->count();
if($altCount == 0) {
$newAlt = new UserAlt;
$newAlt->name = $user->getName();
$newAlt->main_id = auth()->user()->getId();
$newAlt->character_id = $user->id;
$newAlt->avatar = $user->avatar;
$newAlt->access_token = $user->token;
$newAlt->owner_hash = $user->owner_hash;
$newAlt->inserted_at = time();
$newAlt->expires_in = $user->expiresIn;
$newAlt->save();
return 1;
} else {
return 0;
}
}
}

View File

@@ -6,6 +6,7 @@ use Closure;
use DB;
use App\Models\User\UserPermission;
use App\Models\User\UserRole;
class RequirePermission
{
@@ -18,9 +19,15 @@ class RequirePermission
*/
public function handle($request, Closure $next, $permission)
{
$role = UserRole::where([
'character_id' => auth()->user()->character_id,
])->get(['role']);
if($role[0]->role != "Admin") {
$perms = UserPermission::where(['character_id' => auth()->user()->character_id, 'permission'=> $permission])->get(['permission']);
abort_unless(auth()->check() && isset($perms[0]->permission), 403, "You don't have the correct permission to be in this area.");
}
return $next($request);
}

View File

@@ -0,0 +1,10 @@
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
abstract class Request extends FormRequest
{
//
}

View File

@@ -0,0 +1,176 @@
<?php
namespace App\Jobs\Commands\Assets;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
//Application Library
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
use Seat\Eseye\Exceptions\RequestFailedException;
//Models
use App\Models\Structure\Asset;
class FetchAllianceAssets implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('assets');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$config = config('esi');
$corpId = 98287666;
$esiHelper = new Esi;
//Get the refresh token from the database
$token = $esiHelper->GetRefreshToken($config['primary']);
//Create the esi authentication container
$esi = $esiHelper->SetupEsiAuthentication($token);
//Check the esi scope
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-assets.read_corporation_assets.v1')) {
Log::critical("Scope check failed in FetchAllianceAssets for esi-assets.read_corporation_assets.v1");
}
//Set the current page
$currentPage = 1;
//Set our default pages
$totalPages = 1;
do {
if($esiHelper->TokenExpired($token)) {
$token = $esiHelper->GetRefreshToken($config['primary']);
$esi = $esiHelper->SetupAuthenticationToken($token);
}
//Attempt to get the assets
$assets = $esi->page($currentPage)
->invoke('get', '/corporations/{corporation_id}/assets/', [
'corporation_id' => $corpId,
]);
//If on the first page, then update the total number of pages
if($currentPage == 1) {
$totalPages = $assets->pages;
}
//For each asset retrieved, let's process it.
foreach($assets as $a) {
ProcessAllianceAssets::dispatch($a);
}
//Increment the current page
$currentPage++;
} while($currentPage <= $totalPages);
}
/**
* The job failed to process
* @param Exception $exception
* @return void
*/
public function failed($exception) {
if(!exception instanceof RequestFailedException) {
//If not a failure due to ESI, then log it. Otherwise,
//deduce why the exception occurred.
Log::critical($exception);
}
if ((is_object($exception->getEsiResponse()) && (stristr($exception->getEsiResponse()->error, 'Too many errors') || stristr($exception->getEsiResponse()->error, 'This software has exceeded the error limit for ESI'))) ||
(is_string($exception->getEsiResponse()) && (stristr($exception->getEsiResponse(), 'Too many errors') || stristr($exception->getEsiResponse(), 'This software has exceeded the error limit for ESI')))) {
//We have hit the error rate limiter, wait 120 seconds before releasing the job back into the queue.
Log::info('FetchAllianceAssets has hit the error rate limiter. Releasing the job back into the wild in 2 minutes.');
$this->release(120);
} else {
$errorCode = $exception->getEsiResponse()->getErrorCode();
switch($errorCode) {
case 400: //Bad Request
Log::critical("Bad request has occurred in FetchAllianceAssets. Job has been discarded");
break;
case 401: //Unauthorized Request
Log::critical("Unauthorized request has occurred in FetchAllianceAssets at " . Carbon::now()->toDateTimeString() . ".\r\nCancelling the job.");
$this->delete();
break;
case 403: //Forbidden
Log::critical("FetchAllianceAssets has incurred a forbidden error. Cancelling the job.");
$this->delete();
break;
case 420: //Error Limited
Log::warning("Error rate limit occurred in FetchAllianceAssets. Restarting job in 120 seconds.");
$this->release(120);
break;
case 500: //Internal Server Error
Log::critical("Internal Server Error for ESI in FetchAllianceAssets. Attempting a restart in 120 seconds.");
$this->release(120);
break;
case 503: //Service Unavailable
Log::critical("Service Unavailabe for ESI in FetchAllianceAssets. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 504: //Gateway Timeout
Log::critical("Gateway timeout in FetchAllianceAssets. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 201:
//Good response code
$this->delete();
break;
//If no code is given, then log and break out of switch.
default:
Log::warning("No response code received from esi call in FetchAllianceAssets.\r\n");
$this->delete();
break;
}
}
}
/**
* Tags for jobs
*
* @var array
*/
public function tags() {
return ['FetchAllianceAssets', 'AllianceStructures', 'Assets'];
}
}

View File

@@ -0,0 +1,109 @@
<?php
namespace App\Jobs\Commands\Assets;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
//Models
use App\Models\Structure\Asset;
class ProcessAllianceAssets implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
//Private variable
private $asset;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($a)
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('assets');
$this->asset = $a;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
/**
* If the asset is not in the database, then let's save it to the database,
* otherwise, we just update the old asset
*/
$count = Asset::where([
'item_id' => $this->asset->item_id,
])->count();
if($count == 0) {
$as = new Asset;
if(isset($this->asset->is_blueprint_copy)) {
$as->is_blueprint_copy = $this->asset->is_blueprint_copy;
}
$as->is_singleton = $this->asset->is_singleton;
$as->item_id = $this->asset->item_id;
$as->location_flag = $this->asset->location_flag;
$as->location_id = $this->asset->location_id;
$as->location_type = $this->asset->location_type;
$as->quantity = $this->asset->quantity;
$as->type_id = $this->asset->type_id;
$as->save();
} else {
//Update the previously found asset
Asset::where([
'item_id' => $this->asset->item_id,
])->update([
'is_singleton' => $this->asset->is_singleton,
'location_flag' => $this->asset->location_flag,
'location_id' => $this->asset->location_id,
'location_type' => $this->asset->location_type,
'quantity' => $this->asset->quantity,
'type_id' => $this->asset->type_id,
]);
if(isset($this->asset->is_blueprint_copy)) {
Asset::where([
'item_id' => $this->asset->item_id,
])->update([
'is_blueprint_copy' => $this->asset->is_blueprint_copy,
]);
}
}
}
/**
* Tags for jobs
*
* @var array
*/
public function tags() {
return ['FetchAllianceAssets', 'AllianceStructures', 'Assets'];
}
}

View File

@@ -0,0 +1,59 @@
<?php
namespace App\Jobs\Commands\Assets;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
//Jobs
use App\Jobs\Commands\Assets\FetchAllianceAssets;
//Models
use App\Models\Structure\Asset;
class PurgeAllianceAssets implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('assets');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Asset::truncate();
FetchAllianceAssets::dispatch()->delay(Carbon::now()->addSeconds(30));
}
}

View File

@@ -0,0 +1,205 @@
<?php
namespace App\Jobs\Commands\Data;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Libraries
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
//Models
use App\Models\User\User;
use App\Models\User\UserAlt;
use App\Models\Esi\EsiScope;
use App\Models\Esi\EsiToken;
use App\Models\User\UserPermission;
use App\Models\User\UserRole;
use App\Models\Admin\AllowedLogin;
class PurgeUsers implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('default');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare some variables
$esiHelper = new Esi;
//Setup the esi variable
$esi = $esiHelper->SetupEsiAuthentication();
//Get all of the users from the database
$users = User::all();
//Get the allowed logins
$legacy = AllowedLogin::where(['login_type' => 'Legacy'])->pluck('entity_id')->toArray();
$renter = AllowedLogin::where(['login_type' => 'Renter'])->pluck('entity_id')->toArray();
//Cycle through all of the users, and either update their role, or delete them.
foreach($users as $user) {
//Set the fail bit to false for the next user to check
$failed = false;
//Note a screen entry for when doing cli stuff
printf("Processing character with id of " . $user->character_id . "\r\n");
//Get the character information
try {
$character_info = $esi->invoke('get', '/characters/{character_id}/', [
'character_id' => $user->character_id,
]);
$corp_info = $esi->invoke('get', '/corporations/{corporation_id}/', [
'corporation_id' => $character_info->corporation_id,
]);
} catch(RequestFailedException $e) {
Log::warning('Failed to get character information in purge user command for user ' . $user->character_id);
$failed = true;
}
//If the fail bit is still false, then continue
if($failed === false) {
//Get the user's role
$role = UserRole::where(['character_id' => $user->character_id])->first();
//We don't want to modify Admin and SuperUsers. Admins and SuperUsers are removed via a different process.
if($role->role != 'Admin') {
//Check if the user is allowed to login
if(isset($corp_info->alliance_id)) {
//Warped Intentions is allowed to login
if($corp_info->alliance_id == '99004116') {
//If the alliance is Warped Intentions, then modify the role if we need to
if($role->role != 'User') {
//Upate the role of the user
UserRole::where([
'character_id' => $user->character_id,
])->update([
'role' => 'User',
]);
//Update the user type
User::where([
'character_id' => $user->character_id,
])->update([
'user_type' => 'W4RP',
]);
}
} else if(in_array($corp_info->alliance_id, $legacy)) { //Legacy Users
if($role->role != 'User') {
//Update the role of the user
UserRole::where([
'character_id' => $user->character_id,
])->update([
'role' => 'User',
]);
//Update the user type
User::where([
'character_id' => $user->character_id,
])->update([
'user_type' => 'Legacy',
]);
}
} else if(in_array($corp_info->alliance_id, $renter)) { //Renter Users
if($role->role != 'Renter') {
//Update the role of the user
UserRole::where([
'character_id' => $user->character_id,
])->update([
'role' => 'Renter',
]);
//Update the user type
User::where([
'character_id' => $user->character_id,
])->update([
'user_type' => 'Renter',
]);
}
} else {
//If the user is part of no valid login group, then delete the user.
//Delete all of the permissions first
UserPermission::where([
'character_id' => $user->character_id,
])->delete();
//Delete the user's role
UserRole::where([
'character_id' => $user->character_id,
])->delete();
//Delete any alts the user might have registered.
$altCount = UserAlt::where(['main_id' => $user->character_id])->count();
if($altCount > 0) {
UserAlt::where([
'main_id' => $user->character_id,
])->delete();
}
//Delete the user's esi scopes
EsiScope::where([
'character_id' => $user->character_id,
])->delete();
//Delete the user's esi token
EsiToken::where([
'character_id' => $user->character_id,
])->delete();
//Delete the user from the user table
User::where([
'character_id' => $user->character_id,
])->delete();
}
}
}
}
}
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['Data', 'PurgeUsers'];
}
}

View File

@@ -0,0 +1,64 @@
<?php
namespace App\Jobs\Commands\Eve;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
//Library
use App\Library\Moons\MoonCalc;
class ItemPricesUpdate implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('default');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$moonHelper = new MoonCalc;
$moonHelper->FetchNewPrices();
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['Eve', 'ItemPricesUpdate'];
}
}

View File

@@ -1,40 +0,0 @@
<?php
namespace App\Jobs\Commands\Eve;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
//Library
use App\Library\Moons\MoonCalc;
class ItemPricesUpdateJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$moonHelper = new MoonCalc;
$moonHelper->FetchNewPrices();
}
}

View File

@@ -0,0 +1,216 @@
<?php
namespace App\Jobs\Commands\Eve;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Spatie\RateLimitedMiddleware\RateLimited;
use Log;
use Carbon\Carbon;
//Library
use App\Library\Esi\Esi;
use Seat\Eseye\Exceptions\RequestFailedException;
use Seat\Eseye\Cache\NullCache;
use Seat\Eseye\Configuration;
//Models
use App\Models\Esi\EsiScope;
use App\Models\Esi\EsiToken;
use App\Models\Jobs\JobStatus;
use App\Models\Mail\SentMail;
use Seat\Eseye\Containers\EsiResponse;
class SendEveMail implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Retries
* With new rate limiting, we need a retry basis versus timeout basis
* @var int
*/
public $retries = 1;
private $sender;
private $body;
private $recipient;
private $recipient_type;
private $subject;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($body, $recipient, $recipient_type, $subject, $sender) {
//Set the connection
$this->connection = 'redis';
$this->onQueue('mail');
//Set the middleware for the job
$this->middleware = $this->middleware();
//Private variables
$this->body = $body;
$this->recipient = $recipient;
$this->recipient_type = $recipient_type;
$this->subject = $subject;
$this->sender = $sender;
}
/**
* Execute the job.
* Utilized by using SendEveMail::dispatch($mail);
* The model is passed into the dispatch function, then added to the queue
* for processing.
*
* @return void
*/
public function handle()
{
//Declare some variables
$esiHelper = new Esi;
$errorCode = null;
//Get the esi configuration
$config = config('esi');
//Retrieve the token for main character to send mails from
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
//Create the ESI authentication container
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Check to see if the token is valid or not
if($esiHelper->TokenExpired($refreshToken)) {
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
}
$esi->setBody([
'approved_cost' => 10000,
'body' => $this->body,
'recipients' => [[
'recipient_id' => $this->recipient,
'recipient_type' => $this->recipient_type,
]],
'subject' => $this->subject,
])->invoke('post', '/characters/{character_id}/mail/', [
'character_id'=> $this->sender,
]);
}
/**
* Middleware to only allow 4 jobs to be run per minute
* After a failed job, the job is released back into the queue for at least 1 minute x the number of times attempted
*
*/
public function middleware() {
//Allow 4 jobs per minute, and implement a rate limited backoff on failed jobs
$rateLimitedMiddleware = (new RateLimited())
->enabled()
->key('psemj')
->connectionName('default')
->allow(4)
->everySeconds(60)
->releaseAfterOneMinute()
->releaseAfterBackoff($this->attempts());
return [$rateLimitedMiddleware];
}
/*
* Determine the time at which the job should timeout.
*
*/
public function retryUntil() : \DateTime
{
return Carbon::now()->addDay();
}
/**
* The job failed to process.
*
* @param Exception $exception
* @return void
*/
public function failed($exception)
{
if(!exception instanceof RequestFailedException) {
//If not a failure due to ESI, then log it. Otherwise,
//deduce why the exception occurred.
Log::critical($exception);
}
if ((is_object($exception->getEsiResponse()) && (stristr($exception->getEsiResponse()->error, 'Too many errors') || stristr($exception->getEsiResponse()->error, 'This software has exceeded the error limit for ESI'))) ||
(is_string($exception->getEsiResponse()) && (stristr($exception->getEsiResponse(), 'Too many errors') || stristr($exception->getEsiResponse(), 'This software has exceeded the error limit for ESI')))) {
//We have hit the error rate limiter, wait 120 seconds before releasing the job back into the queue.
Log::info('SendEveMail has hit the error rate limiter. Releasing the job back into the wild in 2 minutes.');
$this->release(120);
} else {
$errorCode = $exception->getEsiResponse()->getErrorCode();
switch($errorCode) {
case 400: //Bad Request
Log::critical("Bad request has occurred in SendEveMail. Job has been discarded");
break;
case 401: //Unauthorized Request
Log::critical("Unauthorized request has occurred in SendEveMail at " . Carbon::now()->toDateTimeString() . ".\r\nCancelling the job.");
break;
case 403: //Forbidden
Log::critical("SendEveMail has incurred a forbidden error. Cancelling the job.");
break;
case 420: //Error Limited
Log::warning("Error rate limit occurred in SendEveMail. Restarting job in 120 seconds.");
$this->release(120);
break;
case 500: //Internal Server Error
Log::critical("Internal Server Error for ESI in SendEveMail. Attempting a restart in 120 seconds.");
$this->release(120);
break;
case 503: //Service Unavailable
Log::critical("Service Unavailabe for ESI in SendEveMail. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 504: //Gateway Timeout
Log::critical("Gateway timeout in SendEveMail. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 520: //Internal Error -- Mostly comes when rate limited hit
Log::warning("Rate limit hit for SendEveMail. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 201: //Good response code
$this->SaveSentRecord($this->sender, $this->subject, $this->body, $this->recipient, $this->recipient_type);
$this->delete();
break;
//If no code is given, then log and break out of switch.
default:
Log::warning("No response code received from esi call in SendEveMail.\r\n");
$this->delete();
break;
}
}
}
public function tags() {
return ['ProcessEveMails'];
}
private function SaveSentRecord($sender, $subject, $body, $recipient, $recipientType) {
$sentmail = new SentMail;
$sentmail->sender = $sender;
$sentmail->subject = $subject;
$sentmail->body = $body;
$sentmail->recipient = $recipient;
$sentmail->recipient_type = $recipientType;
$sentmail->save();
}
}

View File

@@ -0,0 +1,80 @@
<?php
namespace App\Jobs\Commands\Finances;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Application Library
use App\Library\Helpers\FinanceHelper;
//Models
use App\Models\Finances\AllianceWalletJournal;
class UpdateAllianceWalletJournalJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 1800;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('finances');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$fHelper = new FinanceHelper;
$config = config('esi');
$pages = $fHelper->GetAllianceWalletJournalPages(1, $config['primary']);
//If the number of pages received is zero there is an error in the job.
if($pages == 0) {
Log::critical('Failed to get the number of pages in the job.');
$this->delete();
}
for($i = 1; $i <= $pages; $i++) {
UpdateAllianceWalletJournalPage::dispatch(1, $config['primary'], $i)->onQueue('journal');
}
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['UpdateAllianceWalletJournal', 'Finances'];
}
}

View File

@@ -0,0 +1,226 @@
<?php
namespace App\Jobs\Commands\Finances;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Carbon\Carbon;
use Log;
//Application Library
use Seat\Eseye\Exceptions\RequestFailedException;
use Seat\Eseye\Cache\NullCache;
use Seat\Eseye\Configuration;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\Finances\AllianceWalletJournal;
class UpdateAllianceWalletJournalPage implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
private $division;
private $charId;
private $page;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($division, $charId, $page)
{
$this->connection = 'redis';
$this->onQueue('finances');
$this->division = $division;
$this->charId = $charId;
$this->page = $page;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables in the handler
$lookup = new LookupHelper;
$esiHelper = new Esi;
//Setup the esi container.
$token = $esiHelper->GetRefreshToken($this->charId);
$esi = $esiHelper->SetupEsiAuthentication($token);
//Check the scope
if(!$esiHelper->HaveEsiScope($this->charId, 'esi-wallet.read_corporation_wallets.v1')) {
Log::critical('Scope check failed for esi-wallet.read_corporation_wallets.v1 for character id: ' . $charId);
return null;
}
if($esiHelper->TokenExpired($token)) {
$token = $esiHelper->GetRefreshToken($this->charId);
$esi = $esiHelper->SetupEsiAuthentication($token);
}
//Reference the character id to the corporation id
$char = $lookup->GetCharacterInfo($this->charId);
$corpId = $char->corporation_id;
/**
* Attempt to get the data from the esi api. If it fails, we skip the page, and go onto the next page, unless
* the failed page is the first page.
*/
$journals = $esi->page($this->page)
->invoke('get', '/corporations/{corporation_id}/wallets/{division}/journal/', [
'corporation_id' => $corpId,
'division' => $this->division,
]);
//Decode the json data, and return it as an array
$wallet = json_decode($journals->raw, true);
//Foreach journal entry, add the journal entry to the table
foreach($wallet as $entry) {
//See if we find the entry id in the database already
$found = AllianceWalletJournal::where([
'id' => $entry['id'],
])->count();
if($found == 0) {
$awj = new AllianceWalletJournal;
$awj->id = $entry['id'];
$awj->corporation_id = $corpId;
$awj->division = $this->division;
if(isset($entry['amount'])) {
$awj->amount = $entry['amount'];
}
if(isset($entry['balance'])) {
$awj->balance = $entry['balance'];
}
if(isset($entry['context_id'])) {
$awj->context_id = $entry['context_id'];
}
if(isset($entry['date'])) {
$awj->date = $esiHelper->DecodeDate($entry['date']);
}
if(isset($entry['description'])) {
$awj->description = $entry['description'];
}
if(isset($entry['first_party_id'])) {
$awj->first_party_id = $entry['first_party_id'];
}
if(isset($entry['reason'])) {
$awj->reason = $entry['reason'];
}
if(isset($entry['ref_type'])) {
$awj->ref_type = $entry['ref_type'];
}
if(isset($entry['tax'])) {
$awj->tax = $entry['tax'];
}
if(isset($entry['tax_receiver_id'])) {
$awj->tax_receiver_id = $entry['tax_receiver_id'];
}
$awj->save();
}
}
//Return as completed
return 0;
}
/**
* The job failed to process
* @param Exception $exception
* @return void
*/
public function failed($exception) {
if(!exception instanceof RequestFailedException) {
//If not a failure due to ESI, then log it. Otherwise,
//deduce why the exception occurred.
Log::critical($exception);
}
if ((is_object($exception->getEsiResponse()) && (stristr($exception->getEsiResponse()->error, 'Too many errors') || stristr($exception->getEsiResponse()->error, 'This software has exceeded the error limit for ESI'))) ||
(is_string($exception->getEsiResponse()) && (stristr($exception->getEsiResponse(), 'Too many errors') || stristr($exception->getEsiResponse(), 'This software has exceeded the error limit for ESI')))) {
//We have hit the error rate limiter, wait 120 seconds before releasing the job back into the queue.
Log::info('UpdateAllianceWalletJournalPage has hit the error rate limiter. Releasing the job back into the wild in 2 minutes.');
$this->release(120);
} else {
$errorCode = $exception->getEsiResponse()->getErrorCode();
switch($errorCode) {
case 400: //Bad Request
Log::critical("Bad request has occurred in UpdateAllianceWalletJournalPage. Job has been discarded");
break;
case 401: //Unauthorized Request
Log::critical("Unauthorized request has occurred in UpdateAllianceWalletJournalPage at " . Carbon::now()->toDateTimeString() . ".\r\nCancelling the job.");
$this->delete();
break;
case 403: //Forbidden
Log::critical("UpdateAllianceWalletJournalPage has incurred a forbidden error. Cancelling the job.");
$this->delete();
break;
case 420: //Error Limited
Log::warning("Error rate limit occurred in UpdateAllianceWalletJournalPage. Restarting job in 120 seconds.");
$this->release(120);
break;
case 500: //Internal Server Error
Log::critical("Internal Server Error for ESI in UpdateAllianceWalletJournalPage. Attempting a restart in 120 seconds.");
$this->release(120);
break;
case 503: //Service Unavailable
Log::critical("Service Unavailabe for ESI in UpdateAllianceWalletJournalPage. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 504: //Gateway Timeout
Log::critical("Gateway timeout in UpdateAllianceWalletJournalPage. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 201:
//Good response code
$this->delete();
break;
//If no code is given, then log and break out of switch.
default:
Log::warning("No response code received from esi call in UpdateAllianceWalletJournalPage.\r\n");
$this->delete();
break;
}
}
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['UpdateAllianceWalletJournalPage', 'Finances'];
}
}

View File

@@ -0,0 +1,66 @@
<?php
namespace App\Jobs\Commands\Finances;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Library Functions
use App\Library\Moons\MoonCalc;
class UpdateItemPrices implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 1800;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('default');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$moonHelper = new MoonCalc;
//Fetch new prices from fuzzwork.co.uk for the item pricing schemes
$moonHelper->FetchNewPrices();
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['UpdateItemPrices', 'Finances'];
}
}

View File

@@ -0,0 +1,200 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Application Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
use App\Library\Helpers\StructureHelper;
//Models
use App\Models\MiningTax\Observer;
class FetchMiningTaxesObservers implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$config = config('esi');
$lookup = new LookupHelper;
$sHelper = new StructureHelper($config['primary'], $config['corporation']);
$esiHelper = new Esi;
//Check for the ESI scope needed.
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-industry.read_corporation_mining.v1')) {
Log::critical('Esi scopes were not found for FetchMiningTaxesObserversJob.');
print("Esi scopes not found.");
return;
}
//Check for the other ESI scope needed.
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-universe.read_structures.v1')) {
Log::critical('Esi scope esi-universe.read_structures.v1 was not found for FetchMiningTaxesObserversJob.');
print("Esi scopes not found 2");
return;
}
//Get the refresh token for the character
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
//Get the esi variable
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Invoke the call to ESI API.
$response = $esi->invoke('get', '/corporation/{corporation_id}/mining/observers/', [
'corporation_id' => $config['corporation'],
]);
//Decode the json response, but leave it as objects rather than an array
$resp = json_decode($response->raw, false);
//Run through the mining observers, and add them to the database
foreach($resp as $observer) {
//See if the observer is found in the database
$found = Observer::where([
'observer_id' => $observer->observer_id,
])->count();
//Get the observer name from esi
$structureInfo = $sHelper->GetStructureInfo($observer->observer_id);
//If found, then update the structure
if($found > 0) {
//Update the existing structure in the database
Observer::where([
'observer_id' => $observer->observer_id,
])->update([
'observer_id' => $observer->observer_id,
'observer_name' => $structureInfo->name,
'last_updated' => $observer->last_updated,
]);
} else {
//Add a new observer into the observer table
$newObs = new Observer;
$newObs->observer_id = $observer->observer_id;
$newObs->observer_type = $observer->observer_type;
$newObs->observer_name = $structureInfo->name;
$newObs->last_updated = $observer->last_updated;
$newObs->solar_system_id = $structureInfo->solar_system_id;
$newObs->solar_system_name = $lookup->SystemIdToName($structureInfo->solar_system_id);
$newObs->save();
}
}
/**
* Cleanup stale data that hasn't been updated in at least 1 week.
*/
$date = Carbon::now()->subDays(7);
Observer::where('last_updated', '<', $date)->delete();
//Return 0 saying everything is fine
return 0;
}
/**
* The job failed to process
* @param Exception $exception
* @return void
*/
public function failed($exception) {
if(!exception instanceof RequestFailedException) {
//If not a failure due to ESI, then log it. Otherwise,
//deduce why the exception occurred.
Log::critical($exception);
}
if ((is_object($exception->getEsiResponse()) && (stristr($exception->getEsiResponse()->error, 'Too many errors') || stristr($exception->getEsiResponse()->error, 'This software has exceeded the error limit for ESI'))) ||
(is_string($exception->getEsiResponse()) && (stristr($exception->getEsiResponse(), 'Too many errors') || stristr($exception->getEsiResponse(), 'This software has exceeded the error limit for ESI')))) {
//We have hit the error rate limiter, wait 120 seconds before releasing the job back into the queue.
Log::info('FetchMiningTaxesObservers has hit the error rate limiter. Releasing the job back into the wild in 2 minutes.');
$this->release(120);
} else {
$errorCode = $exception->getEsiResponse()->getErrorCode();
switch($errorCode) {
case 400: //Bad Request
Log::critical("Bad request has occurred in FetchMiningTaxesObservers. Job has been discarded");
break;
case 401: //Unauthorized Request
Log::critical("Unauthorized request has occurred in FetchMiningTaxesObservers at " . Carbon::now()->toDateTimeString() . ".\r\nCancelling the job.");
break;
case 403: //Forbidden
Log::critical("FetchMiningTaxesObservers has incurred a forbidden error. Cancelling the job.");
break;
case 420: //Error Limited
Log::warning("Error rate limit occurred in FetchMiningTaxesObservers. Restarting job in 120 seconds.");
$this->release(120);
break;
case 500: //Internal Server Error
Log::critical("Internal Server Error for ESI in FetchMiningTaxesObservers. Attempting a restart in 120 seconds.");
$this->release(120);
break;
case 503: //Service Unavailable
Log::critical("Service Unavailabe for ESI in FetchMiningTaxesObservers. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 504: //Gateway Timeout
Log::critical("Gateway timeout in FetchMiningTaxesObservers. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 201: //Good response code
$this->delete();
break;
//If no code is given, then log and break out of switch.
default:
Log::warning("No response code received from esi call in FetchMiningTaxesObservers.\r\n");
$this->delete();
break;
}
}
}
/**
* Set the tags for Horizon
*
* @var array
*/
public function tags() {
return ['FetchMiningObservers', 'MiningTaxes'];
}
}

View File

@@ -0,0 +1,103 @@
<?php
namespace App\Jobs\Commands\MiningTaxes\Invoices;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Bus;
use Carbon\Carbon;
use Log;
//Models
use App\Models\MiningTax\MiningOperation;
use App\Models\MiningTax\Ledger;
class ProcessAllianceMiningOperations implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set job parameters
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$count = MiningOperation::where([
'processed' => 'No',
])->where('operation_date', '<=', Carbon::now())
->count();
if($count > 0) {
$operations = MiningOperation::where([
'processed' => 'No',
])->where('operation_date', '<=', Carbon::now())
->get();
foreach($operations as $operation) {
$ledgers = Ledger::where([
'observer_id' => $operation->structure_id,
'invoiced' => 'No',
'last_updated' => $operation->operation_date,
])->get();
foreach($ledgers as $ledger) {
Ledger::where([
'observer_id' => $operation->structure_id,
'invoiced' => 'No',
'last_updated' => $operation->operation_date,
])->update([
'invoiced' => 'Yes',
'invoice_id' => 'MiningOp' . $operation->id,
]);
}
MiningOperation::where([
'id' => $operation->id,
])->update([
'processed' => 'Yes',
'processed_on' => Carbon::now(),
]);
}
}
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['ProcessAllianceMiningOperations', 'MiningTaxes', 'MiningOperations'];
}
}

View File

@@ -0,0 +1,320 @@
<?php
namespace App\Jobs\Commands\MiningTaxes\Invoices;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
//Application Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\MiningTax\Ledger;
use App\Models\User\UserAlt;
use App\Models\User\User;
//Jobs
use App\Jobs\Commands\Eve\SendEveMail;
class SendMiningTaxesInvoices implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$mailDelay = 15;
$mains = new Collection;
/**
* This section will determine if users are mains or alts of a main.
* If they are mains, we keep the key. If they are alts of a main, then we delete
* the key from the collection.
*/
//Pluck all the users from the database of ledgers to determine if they are mains or alts.
$tempMains = Ledger::where([
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->pluck('character_id');
//Get the unique character ids from the ledgers in the previous statement
$tempMains = $tempMains->unique()->values()->all();
//Cycle through the array of mains, and remove any characters which are in the User Alt table,
//as those characters will be grouped with their correct main later.
for($i = 0; $i < sizeof($tempMains); $i++) {
if(UserAlt::where(['character_id' => $tempMains[$i]])->count() == 0) {
$mains->push($tempMains[$i]);
}
}
/**
* For each of the users, let's determine if there are any ledgers,
* then determine if there are any alts and ledgers associated with the alts.
*/
foreach($mains as $main) {
//Declare some variables for each run through the for loop
$ledgers = new Collection;
//Count the ledgers for the main
$mainLedgerCount = Ledger::where([
'character_id' => $main,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->count();
//If there are ledgers for the main, then let's grab them
if($mainLedgerCount > 0) {
$mainLedgers = Ledger::where([
'character_id' => $main,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->get();
//Cycle through the entries, and add them to the ledger to send with the invoice
foreach($mainLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => (int)$row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
//Get the alt count for the main character
$altCount = UserAlt::where(['main_id' => $main])->count();
//If more than 0 alts, grab all the alts.
if($altCount > 0) {
$alts = UserAlt::where([
'main_id' => $main,
])->get();
//Cycle through the alts, and get the ledgers, and push onto the stack
foreach($alts as $alt) {
$altLedgerCount = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->count();
if($altLedgerCount > 0) {
$altLedgers = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->get();
foreach($altLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => (int)$row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
}
}
/**
* Send the collected information over to the function to send the actual mail
*/
if($ledgers->count() > 0) {
$this->CreateInvoice($main, $ledgers, $mailDelay);
}
}
}
/**
* Create the invoice to the mail out
*
* @var charId
* @var ledgers
* @var mailDelay
*/
private function CreateInvoice($charId, Collection $ledgers, int &$mailDelay) {
$ores = array();
$characters = array();
$characterIds = array();
$totalPrice = 0.00;
$body = null;
$lookup = new LookupHelper;
$config = config('esi');
//Create an invoice id
$invoiceId = "M" . uniqid();
//Collect the total price of all of the ledgers
$totalPrice = round((float)$ledgers->sum('amount'), 2);
//Get the sum of all the ledgers
$invoiceAmount = round(((float)$ledgers->sum('amount') * (float)$config['mining_tax']), 2);
//Get the character name from the lookup table
$charName = $lookup->CharacterIdToName($charId);
//Create the date due and the invoice date
$dateDue = Carbon::now()->addDays(7);
$invoiceDate = Carbon::now();
//Set the mining tax from the config file
$numberMiningTax = number_format(((float)$config['mining_tax'] * (float)100.00), 2, ".", ",");
//Create the list of ores to put in the mail
$temp = $ledgers->toArray();
foreach($temp as $t) {
//If the key isn't set, set it to the default of 0
if(!isset($ores[$t['type_id']])) {
$ores[$t['type_id']] = (int)0;
}
//Add the quantity into the ores array
$ores[$t['type_id']] += (int)$t['quantity'];
//Create a list of character names
if(!isset($characters[$t['character_name']])) {
$characters[$t['character_name']] = $t['character_name'];
}
//Create a list of character ids
if(!isset($characterIds[$t['character_id']])) {
$characterIds[$t['character_id']] = $t['character_id'];
}
}
/**
* Create the mail body to send to the main character
*/
$body .= "Dear " . $charName . ",<br><br>";
$body .= "Mining Taxes are due for the following ores mined from alliance moons: <br>";
foreach($ores as $ore => $quantity) {
$oreName = $lookup->ItemIdToName($ore);
$body .= $oreName . ": " . number_format($quantity, 0, ".", ",") . "<br>";
}
$body .= "Total Value of Ore Mined: " . number_format($totalPrice, 2, ".", ",") . " ISK.";
$body .= "<br><br>";
$body .= "Please remit " . number_format($invoiceAmount, 2, ".", ",") . " ISK to Spatial Forces or contract Spatial Forces the following ores:<br>";
foreach($ores as $ore => $quantity) {
$oreName = $lookup->ItemIdToName($ore);
$body .= $oreName . ": " . number_format(round($quantity * $config['mining_tax']), 0, ".", ",") . "<br>";
}
$body .= "<br>";
$body .= "The due date is " . $dateDue . "<br>";
$body .= "Set the reason for transfer as " . $invoiceId . "<br>";
$body .= "The mining taxes are currently set to " . $numberMiningTax . "%.<br>";
$body .= "<br>";
$body .= "Characters Processed: <br>";
foreach($characters as $character) {
$body .= $character . "<br>";
}
$body .= "<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
//Check if the mail body is greater than 2000 characters. If greater than 2,000 characters, then
if(strlen($body) > 2000) {
$body = "Dear " . $charName . "<br><br>";
$body .= "Total Value of Ore Mined: " . number_format($totalPrice, 2, ".", ",") . " ISK.";
$body .= "<br><br>";
$body .= "Please remit " . number_format($invoiceAmount, 2, ".", ",") . " ISK to Spatial Forces or contract 15% of the ores mined to Spatial Forces.<br>";
$body .= "The due date is " . $dateDue . "<br>";
$body .= "Set the reason for transfer as: " . $invoiceId . "<br>";
$body .= "The mining taxes are currently set to " . $numberMiningTax . "%.<br>";
$body .= "<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
}
//Mail the invoice to the character if the character is in
//Warped Intentions or Legacy
$subject = 'Warped Intentions Mining Taxes';
$sender = $config['primary'];
$recipientType = 'character';
$recipient = $charId;
//Send the Eve Mail Job to the queue to be dispatched
SendEveMail::dispatch($body, $recipient, $recipientType, $subject, $sender)->delay(Carbon::now()->addSeconds($mailDelay));
/**
* Create a new invoice model, and save it to the database
*/
$invoice = new Invoice;
$invoice->character_id = $charId;
$invoice->character_name = $charName;
$invoice->invoice_id = $invoiceId;
$invoice->invoice_amount = $invoiceAmount;
$invoice->date_issued = $invoiceDate;
$invoice->date_due = $dateDue;
$invoice->status = 'Pending';
$invoice->mail_body = $body;
$invoice->save();
/**
* Mark the invoices as paid
*/
foreach($characterIds as $char) {
Ledger::where([
'character_id' => $char,
'invoiced' => 'No',
])->update([
'invoice_id' => $invoiceId,
'invoiced' => 'Yes',
]);
}
/**
* Increment the mail delay for the next cycle
*/
$mailDelay += 20;
}
/**
* Set the tags for Horizon
*
* @var array
*/
public function tags() {
return ['MiningTaxes', 'SendMiningTaxesInvoics', 'Invoices'];
}
}

View File

@@ -0,0 +1,110 @@
<?php
namespace App\Jobs\Commands\MiningTaxes\Invoices;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Application Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\User\User;
use App\Models\User\UserAlt;
//Jobs
use App\Jobs\Commands\Eve\SendEveMail;
class UpdateMiningTaxesLateInvoices15th implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
$config = config('esi');
$mailDelay = 15;
$today = Carbon::now();
//Get all of the invoices that are still pending.
$invoices = Invoice::where([
'status' => 'Pending',
])->get();
//Cycle through the invoices, and see if they are late or not.
foreach($invoices as $invoice) {
$dueDate = Carbon::create($invoice->date_due);
if($dueDate->greaterThan($today->subDays(7))) {
//Update the invoice in the database
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Late',
]);
//Build the mail
$subject = 'Warped Intentions Mining Taxes - Invoice Late';
$sender = $config['primary'];
$recipientType = 'character';
$recipient = $invoice->character_id;
$body = "Dear " . $invoice->character_name . ",<br><br>";
$body .= "The Mining Invoice: " . $invoice->invoice_id . " is late.<br>";
$body .= "Please remite " . number_format($invoice->invoice_amount, 2, ".", ",") . "to Spatial Forces.<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
//Send a reminder to the user through eve mail about the late invoice
SendEveMail::dispatch($body, $recipient, $recipientType, $subject, $sender)->delay(Carbon::now()->addSeconds($mailDelay));
$mailDelay += 20;
}
}
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['UpdateMiningTaxesLateInvoices', 'MiningTaxes', 'Invoices'];
}
}

View File

@@ -0,0 +1,110 @@
<?php
namespace App\Jobs\Commands\MiningTaxes\Invoices;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Application Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\User\User;
use App\Models\User\UserAlt;
//Jobs
use App\Jobs\Commands\Eve\SendEveMail;
class UpdateMiningTaxesLateInvoices1st implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
$config = config('esi');
$mailDelay = 15;
$today = Carbon::now();
//Get all of the invoices that are still pending.
$invoices = Invoice::where([
'status' => 'Pending',
])->get();
//Cycle through the invoices, and see if they are late or not.
foreach($invoices as $invoice) {
$dueDate = Carbon::create($invoice->date_due);
if($dueDate->greaterThan($today->subDays(7))) {
//Update the invoice in the database
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Late',
]);
//Build the mail
$subject = 'Warped Intentions Mining Taxes - Invoice Late';
$sender = $config['primary'];
$recipientType = 'character';
$recipient = $invoice->character_id;
$body = "Dear " . $invoice->character_name . ",<br><br>";
$body .= "The Mining Invoice: " . $invoice->invoice_id . " is late.<br>";
$body .= "Please remite " . number_format($invoice->invoice_amount, 2, ".", ",") . "to Spatial Forces.<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
//Send a reminder to the user through eve mail about the late invoice
SendEveMail::dispatch($body, $recipient, $recipientType, $subject, $sender)->delay(Carbon::now()->addSeconds($mailDelay));
$mailDelay += 20;
}
}
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['UpdateMiningTaxesLateInvoices', 'MiningTaxes', 'Invoices'];
}
}

View File

@@ -0,0 +1,164 @@
<?php
namespace App\Jobs\Commands\MiningTaxes\Ledgers;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Carbon\Carbon;
//App Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Helpers\LookupHelper;
use App\Library\Moons\MoonCalc;
//Jobs
use App\Jobs\Commands\MiningTaxes\Ledgers\ProcessMiningTaxesLedgers;
//App Models
use App\Models\MiningTax\Observer;
use App\Models\MiningTax\Ledger;
use App\Models\Moon\MineralPrice;
use App\Models\Moon\ItemComposition;
use App\Models\Esi\EsiToken;
use App\Models\Esi\EsiScope;
class FetchMiningTaxesLedgers implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Job Variables
*/
private $charId;
private $corpId;
private $observerId;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($charId, $corpId, $observerId)
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('miningtaxes');
//Import the variables from the calling function
$this->charId = $charId;
$this->corpId = $corpId;
$this->observerId = $observerId;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
$mHelper = new MoonCalc;
$esiHelper = new Esi;
$pageFailed = false;
$config = config('esi');
//Check for the correct scope
if(!$esiHelper->haveEsiScope($this->charId, 'esi-industry.read_corporation_mining.v1')) {
Log::critical('Character: ' . $this->charId . ' did not have the correct esi scope in FetchMiningTaxesLedgersJob.');
return null;
}
//Get the esi token in order to pull data from esi
$refreshToken = $esiHelper->GetRefreshToken($this->charId);
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Set the current page
$currentPage = 1;
$totalPages = 1;
//Setup a do-while loop to sort through the ledgers by pages
do {
/**
* During the course of the operation, we want to ensure our token stays valid.
* If the token, expires, then we want to refresh the token through the esi helper
* library functionality.
*/
if($esiHelper->TokenExpired($refreshToken)) {
$refreshToken = $esiHelper->GetRefreshToken($this->charId);
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
}
/**
* Attempt to get the data from the esi api. If it fails, we skip the page
*/
try {
$response = $esi->page($currentPage)
->invoke('get', '/corporation/{corporation_id}/mining/observers/{observer_id}/', [
'corporation_id' => $config['corporation'],
'observer_id' => $this->observerId,
]);
} catch(RequestFailedException $e) {
Log::warning('Failed to get the mining ledger in FetchMiningTaxesLedgersCommand for observer id: ' . $this->observerId);
$pageFailed = true;
}
/**
* If the current page is the first one and the page didn't fail, then update the total pages.
* If the first page failed, just return as we aren't going to be able to get the total amount of data needed.
*/
if($currentPage == 1 && $pageFailed == false) {
$totalPages = $response->pages;
} else if($currentPage == 1 && $pageFailed == true) {
return null;
}
if($pageFailed == true) {
//If the page failed, then reset the variable, and skip the current iteration
//of creating the jobs.
$pageFailed = false;
} else {
//Decode the json response from the ledgers
$ledgers = json_decode($response->raw);
//Dispatch jobs to process each of the mining ledger entries
foreach($ledgers as $ledger) {
ProcessMiningTaxesLedgers::dispatch($ledger, $this->observerId);
}
}
//Increment the current pages
$currentPage++;
} while($currentPage <= $totalPages);
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['FetchMiningTaxesLedgers', 'MiningTaxes', 'MiningTaxesLedgers'];
}
}

View File

@@ -0,0 +1,121 @@
<?php
namespace App\Jobs\Commands\MiningTaxes\Ledgers;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Carbon\Carbon;
use Log;
//App Library
use App\Library\Helpers\LookupHelper;
use App\Library\Moons\MoonCalc;
//Models
use App\Models\MiningTax\Ledger;
use App\Models\Moon\MineralPrice;
use App\Models\Moon\ItemComposition;
class ProcessMiningTaxesLedgers implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Job Variables
*/
private $ledger;
private $observerId;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($ledger, $observerId)
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('miningtaxes');
//Import variables from the calling function
$this->ledger = $ledger;
$this->observerId = $observerId;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$lookup = new LookupHelper;
$mHelper = new MoonCalc;
$config = config('esi');
//Create a starting date for the ledger
$ledgerDate = Carbon::createFromFormat('Y-m-d', $this->ledger->last_updated);
//If the ledger is more than one day old, then process it, otherwise, we don't process it
//or add it to the database as it may still be updating.
if($ledgerDate->lessThan(Carbon::now()->subDay())) {
//Get some of the basic information we need to work with
$charName = $lookup->CharacterIdToName($this->ledger->character_id);
//Get the type name from the ledger ore
$typeName = $lookup->ItemIdToName($this->ledger->type_id);
//Get the price from the helper function
$price = $mHelper->CalculateOrePrice($this->ledger->type_id);
//Calculate the total price based on the amount
$amount = (($price * $this->ledger->quantity) * $config['refine_rate']);
$found = Ledger::where([
'character_id' => $this->ledger->character_id,
'observer_id' => $this->observerId,
'type_id' => $this->ledger->type_id,
'last_updated' => $this->ledger->last_updated,
])->count();
if($found == 0) {
$ledg = new Ledger;
$ledg->character_id = $this->ledger->character_id;
$ledg->character_name = $charName;
$ledg->observer_id = $this->observerId;
$ledg->last_updated = $this->ledger->last_updated;
$ledg->type_id = $this->ledger->type_id;
$ledg->ore_name = $typeName;
$ledg->quantity = $this->ledger->quantity;
$ledg->amount = $amount;
$ledg->save();
}
}
return 0;
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['ProcessMiningTaxesLedgers', 'MiningTaxes', 'MiningTaxesLedgers'];
}
}

View File

@@ -0,0 +1,58 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Bus;
use App\Jobs\Commands\MiningTaxes\Invoices\SendMiningTaxesInvoices;
use App\Jobs\Commands\MiningTaxes\Invoices\ProcessAllianceMiningOperations;
class MiningTaxesWeeklyInvoicing implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 1;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set job parameters
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Bus::chain([
new ProcessAllianceMiningOperations,
new SendMiningTaxesInvoices,
])->dispatch();
}
}

View File

@@ -0,0 +1,75 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Models
use App\Models\MiningTax\Observer;
//Jobs
use App\Jobs\Commands\MiningTaxes\Ledgers\FetchMiningTaxesLedgers;
class PreFetchMiningTaxesLedgers implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Get the site configuration which holds some data we need
$config = config('esi');
//Get the observers from the database
$observers = Observer::all();
//For each of the observers, send a job to fetch the mining ledger
foreach($observers as $obs) {
//Dispatch the mining taxes ledger jobs
FetchMiningTaxesLedgers::dispatch($config['primary'], $config['corporation'], $obs->observer_id);
}
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['PreFetchMiningTaxesLedgers', 'MiningTaxes', 'MiningTaxesLedgers'];
}
}

View File

@@ -0,0 +1,143 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Carbon\Carbon;
use Log;
//Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\MiningTax\Payment;
use App\Models\Finances\AllianceWalletJournal;
class ProcessMiningTaxesPayments implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare the variables we will need
$looup = new LookupHelper;
$currentTime = Carbon::now();
//Get the outstanding invoices
$outstanding = Invoice::where([
'status' => 'Pending',
])->get();
//Use the player donation journal from finances to see if the invoice_id is present
//as a reason
foreach($outstanding as $invoice) {
//See if we have a reason with the correct uniqid from the player donation journal
$found = AllianceWalletJournal::where([
'reason' => $invoice->invoice_id,
])->count();
//If we have received the invoice, then mark the invoice as paid
if($found > 0) {
//If we have the count, then grab the journal entry in order to do some things with it
$journal = AllianceWalletJournal::where([
'reason' => $invoice->invoice_id,
])->first();
//If the bill is paid on time, then update the invoice as such
if($currentTime->lessThanOrEqualTo($journal->inserted_at)) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid',
]);
}
if($currentTime->greaterThan($journal->inserted_at)) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid Late',
]);
}
} else {
$count = AllianceWalletJournal::where([
'reason' => $invoice->invoice_id,
])->count();
if($count > 0) {
//If we have the count, then grab the journal entry in order to do some things with it
$journal = AllianceWalletJournal::where([
'reason' => $invoice->invoice_id,
])->first();
//If the bill is paid on time, then update the invoice as such
if($currentTime->lessThanOrEqualTo($journal->inserted_at)) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid',
]);
}
if($currentTime->greaterThan($journal->inserted_at)) {
Invoice::where([
'invoice_id' => $invoice->invoice_id,
])->update([
'status' => 'Paid Late',
]);
}
}
}
}
//Use the contract descriptions from the esi to see if the invoice_id is present.
//If the invoice is present, then mark it off as sent in correctly
}
/**
* Set the tags for Horzion
*
* @var array
*/
public function tags() {
return ['ProcessMiningTaxesPayments', 'MiningTaxes', 'Payments'];
}
}

View File

@@ -0,0 +1,316 @@
<?php
namespace App\Jobs\Commands\MiningTaxes;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
//Application Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MiningTax\Invoice;
use App\Models\MiningTax\Ledger;
use App\Models\User\UserAlt;
use App\Models\User\User;
//Jobs
use App\Jobs\Commands\Eve\SendEveMail;
class SendMiningTaxesInvoicesOld implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$mailDelay = 15;
$mains = new Collection;
/**
* This section will determine if users are mains or alts of a main.
* If they are mains, we keep the key. If they are alts of a main, then we delete
* the key from the collection.
*/
//Pluck all the users from the database of ledgers to determine if they are mains or alts.
$tempMains = Ledger::where([
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->pluck('character_id');
//Get the unique character ids from the ledgers in the previous statement
$tempMains = $tempMains->unique()->values()->all();
//Cycle through the array of mains, and remove any characters which are in the User Alt table,
//as those characters will be grouped with their correct main later.
for($i = 0; $i < sizeof($tempMains); $i++) {
if(UserAlt::where(['character_id' => $tempMains[$i]])->count() == 0) {
$mains->push($tempMains[$i]);
}
}
/**
* For each of the users, let's determine if there are any ledgers,
* then determine if there are any alts and ledgers associated with the alts.
*/
foreach($mains as $main) {
//Declare some variables for each run through the for loop
$ledgers = new Collection;
//Count the ledgers for the main
$mainLedgerCount = Ledger::where([
'character_id' => $main,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->count();
//If there are ledgers for the main, then let's grab them
if($mainLedgerCount > 0) {
$mainLedgers = Ledger::where([
'character_id' => $main,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->get();
//Cycle through the entries, and add them to the ledger to send with the invoice
foreach($mainLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => (int)$row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
//Get the alt count for the main character
$altCount = UserAlt::where(['main_id' => $main])->count();
//If more than 0 alts, grab all the alts.
if($altCount > 0) {
$alts = UserAlt::where([
'main_id' => $main,
])->get();
//Cycle through the alts, and get the ledgers, and push onto the stack
foreach($alts as $alt) {
$altLedgerCount = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->count();
if($altLedgerCount > 0) {
$altLedgers = Ledger::where([
'character_id' => $alt->character_id,
'invoiced' => 'No',
])->where('last_updated', '>', Carbon::now()->subDays(7))->get();
foreach($altLedgers as $row) {
$ledgers->push([
'character_id' => $row->character_id,
'character_name' => $row->character_name,
'observer_id' => $row->observer_id,
'type_id' => $row->type_id,
'ore_name' => $row->ore_name,
'quantity' => (int)$row->quantity,
'amount' => (float)$row->amount,
'last_updated' => $row->last_updated,
]);
}
}
}
}
/**
* Send the collected information over to the function to send the actual mail
*/
if($ledgers->count() > 0) {
$this->CreateInvoice($main, $ledgers, $mailDelay);
}
}
}
/**
* Create the invoice to the mail out
*
* @var charId
* @var ledgers
* @var mailDelay
*/
private function CreateInvoice($charId, Collection $ledgers, int &$mailDelay) {
$ores = array();
$characters = array();
$characterIds = array();
$totalPrice = 0.00;
$body = null;
$lookup = new LookupHelper;
$config = config('esi');
//Create an invoice id
$invoiceId = "M" . uniqid();
//Get the sum of all the ledgers
$invoiceAmount = round(((float)$ledgers->sum('amount') * (float)$config['mining_tax']), 2);
//Get the character name from the lookup table
$charName = $lookup->CharacterIdToName($charId);
//Create the date due and the invoice date
$dateDue = Carbon::now()->addDays(7);
$invoiceDate = Carbon::now();
//Set the mining tax from the config file
$numberMiningTax = number_format(((float)$config['mining_tax'] * (float)100.00), 2, ".", ",");
//Create the list of ores to put in the mail
$temp = $ledgers->toArray();
foreach($temp as $t) {
//If the key isn't set, set it to the default of 0
if(!isset($ores[$t['type_id']])) {
$ores[$t['type_id']] = (int)0;
}
//Add the quantity into the ores array
$ores[$t['type_id']] += (int)$t['quantity'];
//Create a list of character names
if(!isset($characters[$t['character_name']])) {
$characters[$t['character_name']] = $t['character_name'];
}
//Create a list of character ids
if(!isset($characterIds[$t['character_id']])) {
$characterIds[$t['character_id']] = $t['character_id'];
}
}
/**
* Create the mail body to send to the main character
*/
$body .= "Dear " . $charName . ",<br><br>";
$body .= "Mining Taxes are due for the following ores mined from alliance moons: <br>";
foreach($ores as $ore => $quantity) {
$oreName = $lookup->ItemIdToName($ore);
$body .= $oreName . ": " . number_format($quantity, 0, ".", ",") . "<br>";
}
$body .= "Total Value of Ore Mined: " . number_format($totalPrice, 2, ".", ",") . " ISK.";
$body .= "<br><br>";
$body .= "Please remit " . number_format($invoiceAmount, 2, ".", ",") . " ISK to Spatial Forces by " . $dateDue . "<br>";
$body .= "Set the reason for transfer as " . $invoiceId . "<br>";
$body .= "The mining taxes are currently set to " . $numberMiningTax . "%.<br>";
$body .= "<br><br>";
$body .= "You can also send a contract with the following ores in the contract with the reason set as: " . $invoiceId . "<br>";
foreach($ores as $ore => $quantity) {
$oreName = $lookup->ItemIdToName($ore);
$body .= $oreName . ": " . number_format(round($quantity * $config['mining_tax']), 0, ".", ",") . "<br>";
}
$body .= "<br>";
$body .= "Characters Processed: <br>";
foreach($characters as $character) {
$body .= $character . "<br>";
}
$body .= "<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
//Check if the mail body is greater than 2000 characters. If greater than 2,000 characters, then
if(strlen($body) > 2000) {
$body = "Dear " . $charName . "<br><br>";
$body .= "Total Value of Ore Mined: " . number_format($totalPrice, 2, ".", ",") . " ISK.";
$body .= "<br><br>";
$body .= "Please remit " . number_format($invoiceAmount, 2, ".", ",") . " ISK to Spatial Forces by " . $dateDue . "<br>";
$body .= "Set the reason for transfer as: " . $invoiceId . "<br>";
$body .= "The mining taxes are currently set to " . $numberMiningTax . "%.<br>";
$body .= "<br>";
$body .= "<br>Sincerely,<br>Warped Intentions Leadership<br>";
}
//Mail the invoice to the character if the character is in
//Warped Intentions or Legacy
$subject = 'Warped Intentions Mining Taxes';
$sender = $config['primary'];
$recipientType = 'character';
$recipient = $charId;
//Send the Eve Mail Job to the queue to be dispatched
SendEveMail::dispatch($body, $recipient, $recipientType, $subject, $sender)->delay(Carbon::now()->addSeconds($mailDelay));
/**
* Create a new invoice model, and save it to the database
*/
$invoice = new Invoice;
$invoice->character_id = $charId;
$invoice->character_name = $charName;
$invoice->invoice_id = $invoiceId;
$invoice->invoice_amount = $invoiceAmount;
$invoice->date_issued = $invoiceDate;
$invoice->date_due = $dateDue;
$invoice->status = 'Pending';
$invoice->mail_body = $body;
$invoice->save();
/**
* Mark the invoices as paid
*/
foreach($characterIds as $char) {
Ledger::where([
'character_id' => $char,
'invoiced' => 'No',
])->update([
'invoice' => $invoiceId,
'invoiced' => 'Yes',
]);
}
/**
* Increment the mail delay for the next cycle
*/
$mailDelay += 20;
}
/**
* Set the tags for Horizon
*
* @var array
*/
public function tags() {
return ['MiningTaxes', 'SendMiningTaxesInvoics', 'Invoices'];
}
}

View File

@@ -0,0 +1,51 @@
<?php
namespace App\Jobs\Commands\MoonRental\Invoices;
//Application Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Internal Library
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MoonRental\AllianceMoon;
use App\Models\MoonRental\AllianceMoonOre;
use App\Models\MoonRental\AllianceMoonRental;
class SendMoonRentalInvoices implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('miningtaxes');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
$months = 3;
$today = Carbon::now();
$future = Carbon::now()->addMonths(3);
}
}

View File

@@ -0,0 +1,94 @@
<?php
namespace App\Jobs\Commands\MoonRental;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Log;
use Carbon\Carbon;
//Internal Library
use App\Library\Moons\MoonCalc;
use App\Library\Helpers\LookupHelper;
//Models
use App\Models\MoonRental\AllianceMoon;
use App\Models\MoonRental\AllianceMoonOre;
class UpdateAllianceMoonRentalWorth implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
$this->connection = 'redis';
$this->onQueue('default');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$lookup = new LookupHelper;
$mHelper = new MoonCalc;
$months = 3;
$rentalTax = 0.25;
$moons = AllianceMoon::all();
foreach($moons as $moon) {
//Declare the arrays needed
$ores = array();
$worth = 0.00;
$ores = AllianceMoonOre::where([
'moon_id' => $moon->moon_id,
])->get(['ore_name', 'quantity'])->toArray();
if(sizeof($ores) == 1) {
$ores[1]["ore_name"] = null;
$ores[1]["quantity"] = 0.00;
$ores[2]["ore_name"] = null;
$ores[2]["quantity"] = 0.00;
$ores[3]["ore_name"] = null;
$ores[3]["quantity"] = 0.00;
} else if(sizeof($ores) == 2) {
$ores[2]["ore_name"] = null;
$ores[2]["quantity"] = 0.00;
$ores[3]["ore_name"] = null;
$ores[3]["quantity"] = 0.00;
} else if(sizeof($ores) == 3) {
$ores[3]["ore_name"] = null;
$ores[3]["quantity"] = 0.00;
}
//one of these two ways will work
$worth = $mHelper->MoonTotalWorth($ores[0]["ore_name"], $ores[0]["quantity"],
$ores[1]["ore_name"], $ores[1]["quantity"],
$ores[2]["ore_name"], $ores[2]["quantity"],
$ores[3]["ore_name"], $ores[3]["quantity"]);
$rentalAmount = $worth * $rentalTax * $months;
AllianceMoon::where([
'moon_id' => $moon->moon_id,
])->update([
'worth_amount' => $worth,
'rental_amount' => $rentalAmount,
]);
}
}
}

View File

@@ -1,152 +0,0 @@
<?php
namespace App\Jobs\Commands\Moons;
//Internal Libraries
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
//App Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Lookups\LookupHelper;
use App\Library\Structures\StructureHelper;
//App Models
use App\Models\Moon\CorpMoonLedger;
use App\Models\Moon\CorpMoonObserver;
class FetchMoonLedgerJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Private Variables
*/
private $charId;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($charId)
{
//Set the character id
$this->charId = $charId;
//Set the connection
$this->connection = 'redis';
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare Variables
$esiHelper = new Esi;
$lookup = new LookupHelper;
$response = null;
$structureInfo = null;
//Get the configuration for the main site
$config = config('esi');
//Check for esi scope for the character
if(!$esiHelper->HaveEsiScope($this->charId, 'esi-industry.read_corporation_mining.v1') || !$esiHelper->HaveEsiScope($this->charId, 'esi-universe.read_structures.v1')) {
Log::critical('The primary character does not have the necessary scopes for FetchRentalMoonLedgerCommand.');
return;
}
//Get the refresh token if the scope checks have passed
$refreshToken = $esiHelper->GetRefreshToken($this->charId);
//Setup the esi information
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//Get the character data from the lookup table
$character = $lookup->GetCharacterInfo($this->charId);
//Get the corporation data from the lookup table
$corporation = $lookup->GetCorporationInfo($character->corporation_id);
//Setup the structure helper
$structure = new StructureHelper($this->charId, $character->corporation_id, $esi);
//Get the moon observers from the database
$observers = CorpMoonObserver::where([
'corporation_id' => $character->corporation_id,
])->get();
foreach($observers as $observer) {
//Try to get the ledger data from the esi
try {
$ledgers = $esi->invoke('get', '/corporation/{corporation_id}/mining/observers/{observer_id}/', [
'corporation_id' => $character->corporation_id,
'observer_id' => $observer->observer_id,
]);
} catch(RequestFailedException $e) {
//Log the exception
Log::critical('FetchMoonLedger job failed to get the mining ledgers.');
}
if($ledgers != null) {
foreach($ledgers as $ledger) {
//Get the ore name from the lookup table
$ore = $lookup->ItemIdToName($ledger->type_id);
//Get the character name from the lookup helper
$charInfo = $lookup->GetCharacterInfo($ledger->character_id);
//Get the corporation info from the lookup helper
$corpInfo = $lookup->GetCorporationInfo($charInfo->corporation_id);
//Get the recorded corporation information
$recordedCorpInfo = $lookup->GetCorporationInfo($ledger->recorded_corporation_id);
$entries[] = [
'corporation_id' => $corpInfo->corporation_id,
'corporation_name' => $corpInfo->name,
'character_id' => $ledger->character_id,
'character_name' => $charInfo->name,
'observer_id' => $observer->observer_id,
'observer_name' => $observer->observer_name,
'type_id' => $ledger->type_id,
'ore' => $ore,
'quantity' => $ledger->quantity,
'recorded_corporation_id' => $ledger->recorded_corporation_id,
'recorded_corporation_name' => $recordedCorpInfo->name,
'last_updated' => $ledger->last_updated,
'created_at' => $ledger->last_updated . ' 23:59:59',
'updated_at' => $ledger->last_updated . ' 23:59:59',
];
}
//Insert or ignore each entry into the database
CorpMoonLedger::insertOrIgnore($entries);
Log::info('FetchMoonLedgerJob inserted up to ' . count($entries) . 'into the database.');
}
}
}
}

View File

@@ -1,130 +0,0 @@
<?php
namespace App\Jobs\Commands\Moons;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
//App Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Lookups\LookupHelper;
use App\Library\Structures\StructureHelper;
//App Models
use App\Models\Moon\CorpMoonObserver;
class FetchMoonObserverJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Private variables
*/
private $charId;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($charId)
{
//Set the character id
$this->charId = $charId;
//Set the connection
$this->connection = 'redis';
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare some variables
$lookup = new LookupHelper;
$esiHelper = new Esi;
//Get the configuration from the main site
$config = config('esi');
//Check for the esi scope
if(!$esiHelper->HaveEsiScope($this->charId, 'esi-industry.read_corporation_mining.v1') || !$esiHelper->HaveEsiScope($this->charId, 'esi-universe.read_structures.v1')) {
Log::warning('Esi scopes were not found for Fetch Moon Observers job.');
return;
}
//Get the refresh token for the character
$refreshToken = $esiHelper->GetRefreshToken($this->charId);
//Get the esi variable
$esi = $esiHelper->SetupEsiAuthentication($refreshToken);
//With the lookup helper, get the character information
$character = $lookup->GetCharacterInfo($this->charId);
//With the lookup helper, get the corporation information
$corporation = $lookup->GetCorporationInfo($character->corporation_id);
//Delcare the structure helper since we have the necessary data
$structureHelper = new StructureHelper($this->charId, $character->corporation_id, $esi);
//Get the mining observers for the corporation's from esi
try {
$response = $esi->invoke('get', '/corporation/{corporation_id}/mining/observers/', [
'corporation_id' => $character->corporation_id,
]);
} catch(RequestFailedException $e) {
Log::critical('FetchMoonObservers failed to get the moon observers for the corporation');
return null;
}
//Run through the mining observers, and add them to the database as needed
foreach($response as $observer) {
$count = CorpMoonObserver::where(['observer_id' => $observer->observer_id])->count();
//If the observer is not found, then add it to the database
if($count == 0) {
//Get the structure information from the universe structure esi endpoint
$structureInfo = $structureHelper->GetStructureInfo($observer->observer_id);
//Create a new corp moon observer in the database
$obs = new CorpMoonObserver;
$obs->corporation_id = $character->corporation_id;
$obs->corporation_name = $corporation->name;
$obs->observer_id = $observer->observer_id;
$obs->observer_name = $structureInfo->name;
$obs->observer_owner_id = $structureInfo->owner_id;
$obs->solar_system_id = $structureInfo->solar_system_id;
$obs->observer_type = $observer->observer_type;
$obs->observer_type_id = $structureInfo->type_id;
$obs->last_updated = $observer->last_updated;
$obs->save();
} else {
CorpMoonObserver::where([
'observer_id' => $observer->observer_id,
])->update([
'last_updated' => $observer->last_updated,
]);
}
}
}
}

View File

@@ -1,58 +0,0 @@
<?php
namespace App\Jobs\Commands\Moons;
//Internal Libraries
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
use Carbon\Carbon;
//App Models
use App\Models\Moon\CorpMoonLedger;
class PurgeMoonLedgerJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the connection for the job
$this->connection = 'redis';
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$previous = Carbon::now()->subDays(60);
//Remove old ledger entries
CorpMoonLedger::where('created_at', '<', $previous)->delete();
}
}

View File

@@ -1,143 +0,0 @@
<?php
namespace App\Jobs\Commands;
//Internal Libraries
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
//App Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Lookups\LookupHelper;
//App Models
use App\Models\RentalMoonLedger;
use App\Models\RentalMoonObserver;
class FetchRentalMoonLedgerJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$esiHelper = new Esi;
$lookup = new LookupHelper;
$response = null;
$structureInfo = null;
$entries = array();
//Get the configuration for the main site
$config = config('esi');
//Check for the esi scope
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-industry.read_corporation_mining.v1') || !$esiHelper->HaveEsiScope($config['primary'], 'esi-universe.read_structures.v1')) {
Log::critical('The primary character does not have the necessary scopes for FetchRentalMoonLedgerCommand.');
return;
}
//Get the refresh token if scope checks have passed
$refreshToken = $esiHelper->GetRefreshtoken($config['primary']);
//Get the character data from the lookup table if possible or esi
$character = $lookup->GetCharacterInfo($config['primary']);
//Get all of the rental moon observers from the database
$observers = RentalMoonObserver::all();
//Dump the mining ledger table for rental moons
RentalMoonLedger::truncate();
//Foreach observer get the ledger
foreach($observers as $observer) {
//Get the observer name.
$observerInfo = Structure::where([
'structure_id' => $observer->observer_id,
])->first();
try {
$ledgers = $esi->invoke('get', '/corporation/{corporation_id}/mining/observers/{observer_id}/', [
'corporation_id' => $character->corporation_id,
'observer_id' => $observer->observer_id,
]);
} catch(RequestFailedException $e) {
//If an exception has occurred, then log it
Log::critical('FetchRentalMoonLedger command failed to get the mining ledger for observer id: ' . $observer->observer_id);
}
if($ledgers != null) {
foreach($ledgers as $ledger) {
//Get the ore name from the lookup table
$ore = $lookup->ItemIdToName($ledger->type_id);
//Get the character name from the lookup helper using the characterId
$charInfo = $lookup->GetCharacterInfo($ledger->character_id);
//Get the corporation information
$corpInfo = $lookup->GetCorporationInfo($charInfo->corporation_id);
//Get the recorded corporation information
$recordedCorpInfo = $lookup->GetCorporationInfo($ledger->recorded_corporation_id);
$entries[] = [
'corporation_id' => $corpInfo->corporation_id,
'corporation_name' => $corpInfo->name,
'character_id' => $ledger->character_id,
'character_name' => $charInfo->name,
'observer_id' => $observer->observer_id,
'observer_name' => $observerInfo->name,
'type_id' => $ledger->type_id,
'ore' => $ore,
'quantity' => $ledger->quantity,
'recorded_corporation_id' => $ledger->recorded_corporation_id,
'recorded_corporation_name' => $recordedCorpInfo->name,
'last_updated' => $ledger->last_updated,
'created_at' => $ledger->last_updated . ' 23:59:59',
'updated_at' => $ledger->last_updated . ' 23:59:59',
];
}
//Insert or ignore each of the records saved into the array through the foreach loop
RentalMoonLedger::insertOrIgnore($entries);
Log::info(
'FetchRentalMoonLedgerJob inserted up to ' .count($entires) . ' new ledger entries.'
);
}
}
}
}

View File

@@ -1,97 +0,0 @@
<?php
namespace App\Jobs\Commands;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
//App Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Lookups\LookupHelper;
//App Models
use App\Models\Moon\RentalMoonObserver;
class FetchRentalMoonObserversJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare some variables
$lookup = new LookupHelper;
$esi = new Esi;
$obss = array();
//Get the configuration for the main site
$config = config('esi');
//Check for the esi scope
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-industry.read_corporation_mining.v1') || !$esiHelper->HaveEsiScope($config['primary'], 'esi-universe.read_structures.v1')) {
Log::critical('The primary character does not have the necessary scopes for FetchRentalMoonObservers.');
return;
}
//Get the refresh token for spatial forces
$refreshToken = $esiHelper->GetRefreshToken($config['primary']);
//Get the character data from the lookup table if possible or esi
$character = $lookup->GetCharacterInfo($config['primary']);
//Get the mining observers for spatial forces from esi
try {
$responses = $esi->invoke('get', '/corporation/{corporation_id}/mining/observers/', [
'corporation_id' => $character->corporation_id,
]);
} catch(RequestFailedException $e) {
Log::critical('RentalMoonObservers failed to get the moon observers for Spatial Forces.');
}
//Run through the mining observers, and add them to the database as needed
foreach($responses as $observer) {
//Populate the array with the data, so we can do an insert or ignore after the foreach loop is completed.
$obss[] = [
'observer_id' => $observer->observer_id,
'observer_type' => $observer->observer_type,
'last_updated' => $esi->DecodeDate($observer->last_updated)
];
}
RentalMoonObserver::insertOrIgnore($obss);
}
}

View File

@@ -1,95 +0,0 @@
<?php
namespace App\Jobs\Commands\PublicContracts;
//Internal Libraries
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
use Carbon\Carbon;
//App Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Lookups\LookupHelper;
//Jobs
use App\Jobs\Commands\PublicContracts\GetPublicContractItemsJob;
//Models
use App\Models\PublicContracts\PublicContract;
use App\Models\PublicContracts\PUblicContractItem;
class GetPublicContractItemsJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Private Variables
*/
private $esi;
private $contractId;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($esi, $contract)
{
//Setup the variables
$this->esi = $esi;
$this->contractId = $contract;
//Set the connection
$this->connection = 'redis';
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Get the items from esi
$responses = $this->esi->invoke('get', '/contracts/public/items/{contract_id}/', [
'contract_id' => $this->contract,
]);
foreach($response as $resp) {
//See if the item exists
$count = PublicContractItems::where([
'record_id' => $resp->record_id,
])->count();
//If the item doesn't exist in the database, save it to the database
if($count == 0) {
$contractItem = new PublicContractItems;
if(isset($resp->is_blueprint_copy)) {
$contractItem->is_blueprint_copy = $resp->is_blueprint_copy;
}
$contractItem->is_included = $resp->is_included;
if(isset($resp->item_id)) {
$contractItem->item_id = $resp->item_id;
}
if(isset($resp->material_efficiency)) {
$contractItem->material_efficiency = $resp->material_efficiency;
}
$contractItem->quantity = $resp->quantity;
$contractItem->recorded_id = $resp->recorded_id;
if(isset($resp->runs)) {
$contractItem->runs = $resp->runs;
}
if(isset($resp->time_efficiency)) {
$contractItem->time_efficiency = $resp->time_efficiency;
}
$contractItem->type_id = $resp->type_id;
$contractItem->save();
}
}
}
}

View File

@@ -1,115 +0,0 @@
<?php
namespace App\Jobs\Commands\PublicContracts;
//Internal Libraries
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
use Carbon\Carbon;
//App Library
use Seat\Eseye\Exceptions\RequestFailedException;
use App\Library\Esi\Esi;
use App\Library\Lookups\LookupHellper;
//Models
use App\Models\PublicContracts\PublicContract;
class GetPublicContractsJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Job Variables
*/
private $esi;
private $region;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($regionId, $esi = null)
{
//Setup the esi authentication container
if($esi == null) {
$this->esi = new Esi();
} else {
$this->esi = $esi;
}
//Set the region code
$this->region = $regionId;
//Set the connection
$this->connection = 'redis';
}
/**
* Execute the job.
* The job gets all of the contracts in a region
*
* @return void
*/
public function handle()
{
$responses = $this->esi->invoke('get', '/contracts/public/{region_id}/', [
'region_id' => $this->region,
]);
foreach($response as $resp) {
$count = PublicContract::where([
'contract_id' => $resp->contract_id,
])->count();
if($count == 0) {
$pub = new PublicContract;
$pub->region_id = $this->region;
if(isset($resp->buyout)) {
$pub->buyout = $resp->buyout;
}
if(isset($resp->collateral)) {
$pub->collateral = $resp->collateral;
}
$pub->contract_id = $resp->contract_id;
$pub->date_expired = $resp->date_expired;
$pub->date_issed = $resp->date_issed;
if(isset($resp->days_to_complete)) {
$pub->days_to_complete = $resp->days_to_complete;
}
if(isset($resp->end_location_id)) {
$pub->end_location_id = $resp->end_location_id;
}
if(isset($resp->for_corporation)) {
$pub->for_corporation = $resp->for_corporation;
}
$pub->issuer_corporation_id = $resp->issuer_corporation_id;
$pub->issuer_id = $resp->issuer_id;
if(isset($resp->price)) {
$pub->price = $resp->price;
}
if(isset($resp->reward)) {
$pub->reward = $resp->reward;
}
if(isset($resp->start_location_id)) {
$pub->start_location_id = $resp->start_location_id;
}
if(isset($resp->title)) {
$pub->title = $resp->title;
}
$pub->type = $resp->type;
if(isset($resp->volume)) {
$pub->volume = $resp->volume;
}
//Save the new contract
$pub->save();
//Dispatch a job to collect the contract items
GetPublicContractItemsJob::dispatch($this->esi, $resp->contract_id);
}
}
}
}

View File

@@ -1,68 +0,0 @@
<?php
namespace App\Jobs\Commands\PublicContracts;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Carbon\Carbon;
use Log;
//Library
//Models
use App\Models\PublicContracts\PublicContract;
use App\Models\PublicContracts\PublicContractItem;
/**
* Job to purge some old data from the public contracts
*/
class PurgePublicContracts implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the connection
$this->connection = 'redis';
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Get today's date
$today = Carbon::now();
//If the date for a contract has expired, then purge it from the system
$contracts = PublicContract::all();
//Check each contract to see if it has expired
foreach($contracts as $contract) {
//If the contract has expired, then delete the contract and all of it's items
if($today->greaterThan($contract->date_expired)) {
//Delete the contract
PublicContract::where([
'id' => $contract->id,
])->delete();
//Delete the items from the contract from the other table
PublicContract::where([
'contract_id' => $contract->id,
])->delete();
}
}
}
}

View File

@@ -1,195 +0,0 @@
<?php
namespace App\Jobs\Commands\RentalMoons;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
use Carbon\Carbon;
//Library
use App\Library\Lookups\LookupHelper;
//Jobs
use App\Jobs\ProcessSendEvveMailJob;
//Models
use App\Models\MoonRentals\AllianceRentalMoon;
use App\Models\Mail\SentMail;
/**
* This job will send out a reminder about the moon rental payment being due
* when it's due based on the rental paid date versus rental date. If the paid
* date is in the future from today, then we don't need to send out a reminder.
* If the paid date is today or less, then we need to send out a reminder about
* paying for the moon rental.
*/
class SendMoonRentalPaymentReminderJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 1600;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the queue connection
$this->connection = 'redis';
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Get today's date
$today = Carbon::now();
$today->second = 1;
$today->minute = 0;
$today->hour = 0;
//Declare some other variables
$totalCost = 0.00;
$moonList = array();
$delay = 30;
$lookup = new LookupHelper;
$config = config('esi');
//Get all of the contacts from the rentals group
$contacts = AllianceMoonRental::select('rental_contact_id')->groupBy('rental_contact_id')->get();
//For each of the contacts, totalize the moon rentals, and create a reminder mail
foreach($contacts as $contact) {
//Get the moons the renter is renting, but only get the ones whose paid date is not after today.
$dues = $this->GetMoonDueList($contact->rental_contact_id);
//Get the list of moons for the mail body.
$alls = $this->GetMoonRentalList($contact->rental_contact_id);
//Totalize the cost for the moons whose rent is due
$cost = $this->TotalizeMoonCost($contact->rental_contact_id);
//For each of the rentals, build the mail body, and totalize the cost of the moon
$body = "Moon Rent is due for the following moons:<br>";
foreach($rentalsDue as $due) {
$body .= $due . "<br>";
}
//Put the price for the moons
$body .= "The price for next month's rent is " . number_format($cost, 0, ".", ",") . "<br>";
$body .= "Rental Payment is due on the 1st of the month. If the rental payment is not remitted to Spatial Forces by the 3rd of the month, the rental claim shall be forfeited.<br>";
$body .= "Rental Payment should be transferred to Spatial Forces.<br>";
$body .= "In the description of the payment please put the following transaction identification: " . $transId . "<br>";
$body .= "<br>";
$body .= $contact->contact_name . " is responsible for payment of the moons.<br>";
$body .= "The following moons are being rented:<br>";
foreach($alls as $all) {
$body .= $all . "<br>";
}
$body .= "<br>";
$body .= "Sincerely,<br>";
$body .= "Warped Intentions Leadership<br>";
//Create the subject line
$subject = "Warped Intentions Moon Rental Payment Due for " . $today->englishMonth;
//Dispatch the mail job if the contact type is a character, otherwise
//dispatch the job to the ceo of the corporation instead. If the contact is an alliance
//dispatch the job to the ceo of the holding corporation.
if($contact->contact_type == 'Character') {
ProcessSendEveMailJob::dispatch($body, (int)$contact->rental_contact_id, 'character', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds($delay));
//Increment the delay to get ready for the next mail job
$delay += 30;
} else if($contact->contact_type == 'Corporation') {
//Get the CEO of the corporation from the lookup helper
$corporation = $lookup->GetCorporationInfo($contact->rental_contact_id);
$charId = $corporation->ceo_id;
//Send out the mail
ProcessSendEveMailJob::dispatch($body, (int)$charId, 'character', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds($delay));
//Increment the delay to get ready for the next mail job
$delay += 30;
} else if($contact->contact_type == 'Alliance') {
//Get the holding corporation from the lookup helper
$alliance = $lookup->GetAllianceInfo($contact->rental_contact_id);
//Get the CEO of the corporation of the holding corp from the lookup helper
$corporation = $lookup->GetCorporationInfo($alliance->executor_corporation_id);
$charId = $corporation->ceo_id;
//Send out the mail
ProcessSendEveMailJob::dispatch($body, (int)$charId, 'character', $subject, $config['primaryh'])->onQueue('mail')->delay(Carbon::now()->addSeconds($delay));
//Increment the detaly to get ready for the next mail job
$delay += 30;
}
}
}
private function GetMoonRentalsList($contact) {
//Declare the variables
$list = array();
$moons = AllianceMoonRental::where([
'rental_contact_id' => $contact,
])->get();
foreach($moons as $moon) {
$temp = 'Rental: ' . $moon->region . ' - ' . $moon->system . ' - ' . $moon->planet . ' - ' . $moon->moon;
array_push($list, $temp);
}
//Return the list
return $list;
}
private function GetMoonDueList($contact) {
//Declare the variables
$list = array();
$moons = AllianceMoonRental::where([
'rental_contact_id' => $contact,
])->where('paid_until', '<=', $today)->get();
//Create the list
foreach($moons as $moon) {
$temp = 'Rental: ' . $moon->region . ' - ' . $moon->system . ' - ' . $moon->planet . ' - ' . $moon->moon;
array_push($list, $temp);
}
//Return the list
return $list;
}
private function TotalizeCost($rentals, $rentalType) {
//Declare the stuff we need
$totalCost = 0.00;
//Totalize the cost
foreach($rentals as $rental) {
if($rentalType = 'In Alliance') {
$totalCost += $rental->alliance_rental_price;
} else {
$totalCost += $rental->out_of_alliance_rental_price;
}
}
return $totalCost;
}
}

View File

@@ -1,153 +0,0 @@
<?php
namespace App\Jobs\Commands\RentalMoons;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Carbon\Carbon;
use Log;
//Library
use App\Library\Lookups\LookupHelper;
//Models
use App\Models\MoonRentals\AllianceRentalMoon;
//Jobs
use App\Jobs\ProcessSendEveMailJob;
class UpdateMoonRentalPaidState implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 1600;
/**
* Retries
*
* @var int
*/
public $retries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the queue connection up
$this->connection = 'redis';
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$mailDelay = 5;
//Get all of the moons from the rental database
$moons = AllianceRentalMoons::all();
//Set today's date
$today = Carbon::now();
//Get the esi configuration
$esiConfig = config('esi');
/**
* For each of the moons check the rental until date, the paid until date,
* and compare them to today's current date.
*
* If the paid date is later than the rental until date, then update the rental until
* date to match the paid date. If the paid until date is today or less, then update the
* paid column of the moon to not paid. If the moon hasn't been paid 2 weeks after the first
* of the month, then remove the renter, and send an eve mail to alliance leadership, and the renter
* denoting failure of payment has resulted in the moon rental for the current month being
* revoked.
*/
foreach($moon as $rental) {
//Setup the rental date, paid until date, and today's date as functions of Carbon library
$rentedUntil = new Carbon($rental->rental_until);
$paidUntil = new Carbon($rental->paid_until);
//If the paid date is larger than the rental date, then update the rental date
if($paidUntil->greaterThan($rentedUntil)) {
AllianceMoonRental::where([
'region' => $rental->region,
'system' => $rental->system,
'planet' => $rental->planet,
'moon' => $rental->moon,
])->update([
'rental_until' => $rental->paid_until,
]);
}
//If the paid date is today or less, then update the paid column of the moon as not paid
if($paidUntil->greaterThanOrEqualTo($today)) {
AllianceMoonRental::where([
'region' => $rental->region,
'system' => $rental->system,
'planet' => $rental->planet,
'moon' => $rental->moon,
])->update([
'paid' => 'No',
]);
}
//If the moon hasn't been paid for in two weeks, then remove the renter,
//then send the renter and w4rp leadership a mail.
if($paidUntil->greaterThanOrEqualTo($today->subWeeks(2))) {
//Declare the lookup helper as it will be needed
$lookupHelper = new LookupHelper;
//Get the character id for Minerva Arbosa and Rock Onzo
$minerva = $lookupHelper->CharacterNameToId('Minerva Arbosa');
$rock = $lookupHelper->CharacterNameToId('Rock Onzo');
//Remove the renter
AllianceMoonRental::where([
'region' => $rental->region,
'system' => $rental->system,
'planet' => $rental->planet,
'moon' => $rental->moon,
])->update([
'rental_type' => 'Not Rented',
'rental_until' => null,
'rental_contact_id' => 0,
'rental_contact_type' => null,
'paid' => 'Not Rented',
'paid_until' => null,
]);
//Send a mail over to the alliance leadership, and the former renter with
//why the moon was removed.
$subject = "W4RP Moon Rental Cancelled";
//Dispatch the mail job
ProcessSendEveMailJob::dispatch($body, (int)$rental->rental_contact_id, 'character', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds($mailDelay));
$mailDelay += 30;
if($minerva != null) {
ProcessSendEveMailJob::dispatch($body, (int)$minerva, 'character', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds($mailDelay));
$mailDelay += 30;
}
if($rock != null) {
ProcessSendEveMailJob::dispatch($body, (int)$rock, 'character', $subject, $config['primary'])->onQueue('mail')->delay(Carbon::now()->addSeconds($mailDelay));
}
}
}
}
}

View File

@@ -1,104 +0,0 @@
<?php
namespace App\Jobs\Commands\RentalMoons;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
//Library
use App\Library\Moons\MoonCalc;
//Models
use App\Models\MoonRentals\AllianceRentalMoon;
/**
* This job performs the action of updating the moon rental price once per day.
*/
class UpdateMoonRentalPrice implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3200;
/**
* Retries
*
* @var int
*/
public $retries = 1;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the connection for the job
$this->connection = 'redis';
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare the helper for moon calculations
$moonHelper = new MoonCalc;
//Get all the moons from the rental database
$moons = AllianceRentalMoon::all();
/**
* Calculate the worth of each moon along with the rental prices.
* For all of the moon calculations, the price of the mineral is averaged,
* thereby, the price of the moon worth is also averaged based on the averaging
* of the mineral price.
*/
foreach($moons as $rental) {
//Calculate the total worth of the moon
$totalWorth = $moonHelper->SpatialMoonsTotalWorth(
$rental->first_ore, $rental->first_quantity,
$rental->second_ore, $rental->second_quantity,
$rental->third_ore, $rental->third_quantity,
$rental->fourth_ore, $rental->fourth_quantity,
);
//Calculate the rental prices of the moon
$rentalPrice = $moonHelper->SpatialMoons(
$rental->first_ore, $rental->first_quantity,
$rental->second_ore, $rental->second_quantity,
$rental->third_ore, $rental->third_quantity,
$rental->fourth_ore, $rental->fourth_quantity,
);
//Update the moon in the database
AllianceRentalMoon::where([
'region' => $rental->region,
'system' => $rental->system,
'planet' => $rental->planet,
'moon' => $rental->moon,
])->update([
'moon_worth' => $totalWorth,
'alliance_rental_price' => $rentalPrice['alliance'],
'out_of_alliance_rental_price' => $rentalPrice['outofalliance'],
]);
Log::info('Alliance Rental Moon: ' . $rental->region . ' : ' . $rental->system . ' : ' . $rental->planet . ' : ' . $rental->moon . ' : ' . $rental->structure_name);
Log::info('Total Worth: ' . $totalWorth);
Log::info('Alliance Rental Price: ' . $rentalPrice['alliance']);
Log::info('Out of Alliance Rental Price: ' . $rentalPrice['outofalliance']);
}
}
}

View File

@@ -1,103 +0,0 @@
<?php
namespace App\Jobs\Commands\RentalMoons;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Log;
use Carbon\Carbon;
//Library
use App\Library\Esi\Esi;
use Seat\Eseye\Exceptions\RequestFailedException;
//Models
use App\Models\MoonRentals\AllianceRentalMoon;
use App\Models\Esi\EsiScope;
use App\Models\Esi\EsiToken;
class UpdateRentalMoonPullJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the queue connection
$this->connection = 'redis';
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Setup the configuration variable for ESI
$config = config('esi');
//Setup the esi helper variable
$esiHelper = new Esi;
//Check for the esi scope
if(!$esiHelper->HaveEsiScope($config['primary'], 'esi-industry.read_corporation_mining.v1')) {
//Send a mail to the holding toon to update the esi scopes
return null;
}
//Is this valid?
AllianceRentalMoon::update([
'next_moon_pull' => null,
]);
//Reset all table entries to clear out the next moon pull entry
$allMoons = AllianceRentalMoon::all();
//Cycle through all of the moons, and make the next moon pull null
foreach($allMoons as $moon) {
AllianceRentalMoon::where([
'system' => $moon->system,
'planet' => $moon->planet,
'moon' => $moon->moon,
])->update([
'next_moon_pull' => null,
]);
}
//Get the refresh token
$token = $esiHelper->GetRefreshToken($config['primary']);
//Setup the esi authentication container
$esi = $esiHelper->SetupEsiAuthentication($token);
try {
$responses = $esi->invoke('get', '/corporation/{corporation_id}/mining/extractions/', [
'corporation_id' => 98287666,
]);
} catch(RequestExceptionFailed $e) {
return null;
}
foreach($response as $response) {
//Get whether the structure is being used by the alliance or not.
$usage = AllianceRentalMoon::where([
'structure_id' => $response->structure_id,
'rental_type' => 'Alliance',
])->count();
if($usage > 0) {
AllianceRentalMoon::where([
'structure_id' => $response->structure_id,
])->update([
'next_moon_pull' => $response->chunk_arrival_time,
]);
}
}
}
}

View File

@@ -0,0 +1,174 @@
<?php
namespace App\Jobs\Commands\Structures;
//Internal Library
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
//Application Library
use App\Library\Esi\Esi;
use Seat\Eseye\Exception\RequestFailedException;
use App\Library\Structures\StructureHelper;
//Models
use App\Models\Structure\Structure;
use App\Models\Structure\Service;
class FetchAllianceStructures implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Timeout in seconds
*
* @var int
*/
public $timeout = 3600;
/**
* Number of job retries
*
* @var int
*/
public $tries = 3;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
//Set the connection for the job
$this->connection = 'redis';
$this->onQueue('structures');
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//Declare variables
$config = config('esi');
$corpId = 98287666;
$esiHelper = new Esi;
$structureScope = $esiHelper->HaveEsiScope($config['primary'], 'esi-universe.read_structures.v1');
$corpStructureScope = $esiHelper->HaveEsiScope($config['primary'], 'esi-corporations.read_structures.v1');
//Check scopes
if($structureScope == false || $corpStructureScope == false) {
if($structureScope == false) {
Log::critical("Scope check for esi-universe.read_structures.v1 has failed.");
}
if($corpStructureScope == false) {
Log::critical("Scope check for esi-corporations.read_structures.v1 has failed.");
}
return -1;
}
//Get the refresh token from the database
$token = $esiHelper->GetRefreshToken($config['primary']);
//Create the esi authentication container
$esi = $esiHelper->SetupEsiAuthentication($token);
//Set the current page
$currentPage = 1;
//Set our default pages
$totalPages = 1;
do {
//Attempt to get the entire page worth of structures
$structures = $esi->page($currentPage)
->invoke('get', '/corporations/{corporation_id}/structures/', [
'corporation_id' => $corpId,
]);
//If on the first page, then update the total number of pages
if($currentPage == 1) {
$totalPages = $structures->pages;
}
//For each asset retrieved, let's process it.
foreach($structures as $s) {
ProcessAllianceStructures::dispatch($s)->onQueue('structures');
}
//Increment the current page
$currentPage++;
} while($currentPage <= $totalPages);
}
/**
* The job failed to process
* @param Exception $exception
* @return void
*/
public function failed($exception) {
if(!exception instanceof RequestFailedException) {
//If not a failure due to ESI, then log it. Otherwise,
//deduce why the exception occurred.
Log::critical($exception);
}
if ((is_object($exception->getEsiResponse()) && (stristr($exception->getEsiResponse()->error, 'Too many errors') || stristr($exception->getEsiResponse()->error, 'This software has exceeded the error limit for ESI'))) ||
(is_string($exception->getEsiResponse()) && (stristr($exception->getEsiResponse(), 'Too many errors') || stristr($exception->getEsiResponse(), 'This software has exceeded the error limit for ESI')))) {
//We have hit the error rate limiter, wait 120 seconds before releasing the job back into the queue.
Log::info('FetchAllianceStructures has hit the error rate limiter. Releasing the job back into the wild in 2 minutes.');
$this->release(120);
} else {
$errorCode = $exception->getEsiResponse()->getErrorCode();
switch($errorCode) {
case 400: //Bad Request
Log::critical("Bad request has occurred in FetchAllianceStructures. Job has been discarded");
break;
case 401: //Unauthorized Request
Log::critical("Unauthorized request has occurred in FetchAllianceStructures at " . Carbon::now()->toDateTimeString() . ".\r\nCancelling the job.");
break;
case 403: //Forbidden
Log::critical("FetchAllianceStructures has incurred a forbidden error. Cancelling the job.");
break;
case 420: //Error Limited
Log::warning("Error rate limit occurred in FetchAllianceStructures. Restarting job in 120 seconds.");
$this->release(120);
break;
case 500: //Internal Server Error
Log::critical("Internal Server Error for ESI in FetchAllianceStructures. Attempting a restart in 120 seconds.");
$this->release(120);
break;
case 503: //Service Unavailable
Log::critical("Service Unavailabe for ESI in FetchAllianceStructures. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 504: //Gateway Timeout
Log::critical("Gateway timeout in FetchAllianceStructures. Releasing the job back to the queue in 30 seconds.");
$this->release(30);
break;
case 201: //Good response code
$this->delete();
break;
//If no code is given, then log and break out of switch.
default:
Log::warning("No response code received from esi call in FetchAllianceStructures.\r\n");
$this->delete();
break;
}
}
}
public function tags() {
return ['FetchAllianceStructures', 'AllianceStructures', 'Structures'];
}
}

Some files were not shown because too many files have changed in this diff Show More