Compare commits
587 Commits
use-tcpdf-
...
v8.3.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
925d48640d | ||
|
|
5216dd75bf | ||
|
|
028b4e7b79 | ||
|
|
b8b45d2d81 | ||
|
|
4b2b2cb68e | ||
|
|
625a46a2c2 | ||
|
|
be4ace293e | ||
|
|
ebc1e27c22 | ||
|
|
764b363bbc | ||
|
|
357e85d358 | ||
|
|
9da9166442 | ||
|
|
8ea339f0ef | ||
|
|
89b36ba63f | ||
|
|
1d3dfa1fa4 | ||
|
|
ca567eec8a | ||
|
|
75cfcb83aa | ||
|
|
41da31c379 | ||
|
|
e81f63f46b | ||
|
|
ade03e4827 | ||
|
|
63a4d1ad33 | ||
|
|
33a4c88c3a | ||
|
|
f04d6f37e5 | ||
|
|
1f79776b8f | ||
|
|
11e5f851f0 | ||
|
|
4ca1db8a1b | ||
|
|
14b829aa30 | ||
|
|
384652b3df | ||
|
|
469069b471 | ||
|
|
9db65c6ae9 | ||
|
|
1346e33e99 | ||
|
|
ab9cc447aa | ||
|
|
fe9e0444b4 | ||
|
|
a18957dbe9 | ||
|
|
13d5b724ee | ||
|
|
c7d8203da9 | ||
|
|
96b5c1d8e1 | ||
|
|
882ee80424 | ||
|
|
e977771fe4 | ||
|
|
4339e4552e | ||
|
|
9bca5912d9 | ||
|
|
b54d222943 | ||
|
|
23756ba1c7 | ||
|
|
e4e613550a | ||
|
|
d1207444db | ||
|
|
0bad75b263 | ||
|
|
74b98083e2 | ||
|
|
9034b5ec11 | ||
|
|
927f557672 | ||
|
|
86fb089901 | ||
|
|
630ea05e17 | ||
|
|
7df5196083 | ||
|
|
01f7b5d709 | ||
|
|
07227887f6 | ||
|
|
ec47ee3573 | ||
|
|
13d3b103f1 | ||
|
|
7062962cc8 | ||
|
|
fde447846a | ||
|
|
319cb1bd1e | ||
|
|
58cda5ae6d | ||
|
|
251a3db880 | ||
|
|
30b6dcd767 | ||
|
|
05f6622912 | ||
|
|
36183ac19d | ||
|
|
f6a823e0a8 | ||
|
|
312353551d | ||
|
|
4bdfd0e115 | ||
|
|
fd5c9cee38 | ||
|
|
84bf71802c | ||
|
|
786b20708e | ||
|
|
35739c2eef | ||
|
|
1914a71623 | ||
|
|
dcc53886d9 | ||
|
|
21ef87ef09 | ||
|
|
0e957cad84 | ||
|
|
b67f808da9 | ||
|
|
ad69447b53 | ||
|
|
b4614df88c | ||
|
|
7171247cdc | ||
|
|
6d0084f108 | ||
|
|
29359f42ae | ||
|
|
cf875bf872 | ||
|
|
13c0d335d3 | ||
|
|
ceb33409b5 | ||
|
|
83597d4a8b | ||
|
|
81eefc5448 | ||
|
|
082bc3ece4 | ||
|
|
b2406b61fb | ||
|
|
15698d7694 | ||
|
|
990cd82f97 | ||
|
|
c87829b3e8 | ||
|
|
6799c41d65 | ||
|
|
80c059be58 | ||
|
|
aa3f896538 | ||
|
|
85c728f313 | ||
|
|
d8c17a8a5e | ||
|
|
850939367c | ||
|
|
bf4fef9bf7 | ||
|
|
d5175961a4 | ||
|
|
ba3fb8cd66 | ||
|
|
e7e1d6a232 | ||
|
|
712345f3a0 | ||
|
|
54c9bc3dcb | ||
|
|
e796c0da4a | ||
|
|
cf8ff0f43e | ||
|
|
e67ce23a7c | ||
|
|
d9fb7dc754 | ||
|
|
a66bb95a81 | ||
|
|
2249dad9d7 | ||
|
|
c66fa33b2e | ||
|
|
5c4fa630ae | ||
|
|
56eebb9db4 | ||
|
|
ede74ad24e | ||
|
|
d9773f107e | ||
|
|
27542a8f91 | ||
|
|
5dc07b94aa | ||
|
|
e09112f46a | ||
|
|
d7acf721ae | ||
|
|
50a17a82b6 | ||
|
|
eff5232828 | ||
|
|
7eb032d646 | ||
|
|
3eb29b1cdb | ||
|
|
e065f22f8e | ||
|
|
c1b4ba1f85 | ||
|
|
eeaec471f0 | ||
|
|
0d3c8678d8 | ||
|
|
bbddf5f95b | ||
|
|
3b8c8b3af9 | ||
|
|
84753aa13f | ||
|
|
90b84451d8 | ||
|
|
54c8ae41cc | ||
|
|
7d32b1a724 | ||
|
|
69ffd63ca6 | ||
|
|
4857c19eb6 | ||
|
|
d535e23da0 | ||
|
|
30e02544ab | ||
|
|
ee53925bd2 | ||
|
|
c9961f63b4 | ||
|
|
40495b8a17 | ||
|
|
6bc9a82a7a | ||
|
|
09e843a800 | ||
|
|
6504ee37bd | ||
|
|
082bff2fa8 | ||
|
|
ab7bd86336 | ||
|
|
eada0b0bb5 | ||
|
|
f221f9f22a | ||
|
|
6731e44a0d | ||
|
|
acc37045e4 | ||
|
|
a7c5899c16 | ||
|
|
80b02635a9 | ||
|
|
f90de5ec67 | ||
|
|
9a3e046530 | ||
|
|
7f56e461fe | ||
|
|
1da37e0d38 | ||
|
|
0004d4936c | ||
|
|
7a6fdc4e0a | ||
|
|
2eb727bd0c | ||
|
|
57af507170 | ||
|
|
e37f87465c | ||
|
|
324070f345 | ||
|
|
e1aa843b6d | ||
|
|
e652a7fd61 | ||
|
|
2397bfbad0 | ||
|
|
7e2bc8e452 | ||
|
|
00e8fd0483 | ||
|
|
6d8bf2c665 | ||
|
|
77b79dbd95 | ||
|
|
72466f1aab | ||
|
|
dafc6c5136 | ||
|
|
6901deccbf | ||
|
|
5a9c906eb9 | ||
|
|
b95b60b49e | ||
|
|
14408ef18f | ||
|
|
c790147a5c | ||
|
|
6b87c90e02 | ||
|
|
80c39c5ef3 | ||
|
|
2b4d5222eb | ||
|
|
9604ecebad | ||
|
|
9a3e84d84c | ||
|
|
0d67970a45 | ||
|
|
913b9f0c40 | ||
|
|
610a5745f0 | ||
|
|
dff12324c6 | ||
|
|
f340390fc8 | ||
|
|
643960c829 | ||
|
|
be81e74921 | ||
|
|
1737018325 | ||
|
|
2bee8729e4 | ||
|
|
484d5ba76e | ||
|
|
798685d0b8 | ||
|
|
cb7654ae90 | ||
|
|
039564e74c | ||
|
|
e164595a0f | ||
|
|
d29e09a3ff | ||
|
|
00c394345a | ||
|
|
dffcb62fa1 | ||
|
|
8c668b72b7 | ||
|
|
b54ecd4da0 | ||
|
|
87a7e3501b | ||
|
|
daefec3013 | ||
|
|
183a9742c4 | ||
|
|
04b83f8176 | ||
|
|
335ab3f064 | ||
|
|
7dd493da35 | ||
|
|
560bd6da92 | ||
|
|
a5824ccc5f | ||
|
|
830a7964a4 | ||
|
|
b1359c3277 | ||
|
|
0ba8f5cc5a | ||
|
|
6fb9e2c38e | ||
|
|
eebc2ab8be | ||
|
|
b65b3151ee | ||
|
|
13a0f49f5f | ||
|
|
199eefafa1 | ||
|
|
c5b58f9ecc | ||
|
|
6b68fe4de6 | ||
|
|
3461bbfdb3 | ||
|
|
4298aad008 | ||
|
|
823c67400d | ||
|
|
3160d1064d | ||
|
|
918426a2fa | ||
|
|
c076b37c9b | ||
|
|
7c58bfa282 | ||
|
|
0caaba156d | ||
|
|
c22575812d | ||
|
|
0ede4da816 | ||
|
|
98e23ff92e | ||
|
|
00a17cd55e | ||
|
|
c7bdad649a | ||
|
|
18c2508d2f | ||
|
|
4dcfd8b353 | ||
|
|
726116574d | ||
|
|
27f02014ca | ||
|
|
f80f1acaa7 | ||
|
|
39d5ffeceb | ||
|
|
48ba7eed3e | ||
|
|
f39afe5a65 | ||
|
|
7612ee6b08 | ||
|
|
2ed2b0101a | ||
|
|
5ca9d31964 | ||
|
|
2fcd8cd261 | ||
|
|
0ffa47a2c6 | ||
|
|
9caa240fdb | ||
|
|
3ffb73a516 | ||
|
|
cc1132be87 | ||
|
|
1c31f126ef | ||
|
|
d8eaf2676f | ||
|
|
e203d4dee3 | ||
|
|
b47d773e13 | ||
|
|
a8d0a4a95d | ||
|
|
3fb0804cef | ||
|
|
6811ebcd52 | ||
|
|
4fe7bfb851 | ||
|
|
fb60985d03 | ||
|
|
8f575923cf | ||
|
|
0ecfd02649 | ||
|
|
420aaf4f61 | ||
|
|
0c35f213e1 | ||
|
|
f68813af13 | ||
|
|
37a90d0ce9 | ||
|
|
02f1291e8f | ||
|
|
92e4f6b5d9 | ||
|
|
7b7738fbcc | ||
|
|
3101212c49 | ||
|
|
3f0ac103a1 | ||
|
|
59bd6ca360 | ||
|
|
22fe9a786e | ||
|
|
31197604a3 | ||
|
|
d2ee8de9ac | ||
|
|
03d3fb6a5f | ||
|
|
f42a2d7457 | ||
|
|
d29619b67c | ||
|
|
f5235cb835 | ||
|
|
ee830e0cb4 | ||
|
|
0cd3be003d | ||
|
|
c93e35ec77 | ||
|
|
9538a76232 | ||
|
|
05876bb124 | ||
|
|
8bcd5a6d2a | ||
|
|
a36afbcb25 | ||
|
|
ebd8d085cf | ||
|
|
505148b024 | ||
|
|
e87e924ac2 | ||
|
|
90f261bab6 | ||
|
|
f7dfb09a4d | ||
|
|
3135917127 | ||
|
|
52afa3d36d | ||
|
|
242aa60e04 | ||
|
|
7a3c2c27ff | ||
|
|
5d124360c2 | ||
|
|
365d7448d5 | ||
|
|
9a0102c723 | ||
|
|
2f77f2cb2b | ||
|
|
528e3a2106 | ||
|
|
032a664d4c | ||
|
|
aac1864c9b | ||
|
|
e3477f3306 | ||
|
|
6620a4f87b | ||
|
|
c0e9dff5bf | ||
|
|
2d961c435a | ||
|
|
7c95f03166 | ||
|
|
31e5c13b50 | ||
|
|
4a9fe4f981 | ||
|
|
4fcc5587ee | ||
|
|
6ca49a20ce | ||
|
|
28f293fdc1 | ||
|
|
b3e7619adc | ||
|
|
6e56d56137 | ||
|
|
2528f6a07b | ||
|
|
423d07c919 | ||
|
|
cc608de4bf | ||
|
|
f999a68608 | ||
|
|
db78a9f18f | ||
|
|
816039f48e | ||
|
|
ae240bae6d | ||
|
|
9e30c69e6d | ||
|
|
43c7de9049 | ||
|
|
7e51c5db81 | ||
|
|
0ee3c45e7b | ||
|
|
981e69929c | ||
|
|
1eae5d12fc | ||
|
|
8863208333 | ||
|
|
5f38a74a72 | ||
|
|
fe15dacb1f | ||
|
|
c2d44cf2f2 | ||
|
|
7f1bdb6f34 | ||
|
|
b0305e12d2 | ||
|
|
58f76b5c99 | ||
|
|
7c4ee632cf | ||
|
|
b6b0f716eb | ||
|
|
bd0e04ed15 | ||
|
|
8599981d44 | ||
|
|
6fc6e95c67 | ||
|
|
43b585bde8 | ||
|
|
710f89291f | ||
|
|
4c6249eb9e | ||
|
|
016900bad8 | ||
|
|
2e8ae33761 | ||
|
|
0d325060da | ||
|
|
1a6e98e18f | ||
|
|
97e34595f6 | ||
|
|
a179d5234b | ||
|
|
64c6121fdb | ||
|
|
08d8954a85 | ||
|
|
4f20955d0d | ||
|
|
3a703c8bcf | ||
|
|
ccbffa086b | ||
|
|
07ee4be840 | ||
|
|
4cc9b2d312 | ||
|
|
24dddae1d1 | ||
|
|
ad0165d085 | ||
|
|
39dc38c5d1 | ||
|
|
046ce19dbb | ||
|
|
33263f5a93 | ||
|
|
8ef8e76300 | ||
|
|
73cfdae9e7 | ||
|
|
54a3e41281 | ||
|
|
d59ba6da84 | ||
|
|
1b28b06934 | ||
|
|
ff3e69a56c | ||
|
|
6b975a5fb4 | ||
|
|
3a02b15124 | ||
|
|
5f73d81935 | ||
|
|
002b5c0f6f | ||
|
|
8086842570 | ||
|
|
51f2d5a664 | ||
|
|
b74b76de75 | ||
|
|
a1b1498106 | ||
|
|
1158851ea7 | ||
|
|
e1ab9e959e | ||
|
|
2bbac3ae9d | ||
|
|
e889b1d5e5 | ||
|
|
233bf856f4 | ||
|
|
bca843e06c | ||
|
|
30a79a1278 | ||
|
|
0f92dee2c4 | ||
|
|
f04efede15 | ||
|
|
f0dfdf6720 | ||
|
|
e26d731382 | ||
|
|
d684d3e559 | ||
|
|
47c54cb998 | ||
|
|
592cb2b3ec | ||
|
|
f5a7871a2e | ||
|
|
ec411fa0db | ||
|
|
a850a9bb83 | ||
|
|
479b7a3f94 | ||
|
|
f7cfee77c9 | ||
|
|
65a8126a13 | ||
|
|
a39bc102d5 | ||
|
|
81d930c4d2 | ||
|
|
6839623061 | ||
|
|
7de2809d42 | ||
|
|
98ec6b6886 | ||
|
|
04827f00cc | ||
|
|
660bfc6578 | ||
|
|
1152cd5537 | ||
|
|
f30e8497b2 | ||
|
|
06495bc45d | ||
|
|
26067916b3 | ||
|
|
c36ee4852b | ||
|
|
2cb992ad44 | ||
|
|
083b7be6c0 | ||
|
|
e24854558f | ||
|
|
e4314cf426 | ||
|
|
4106e4e45c | ||
|
|
05f143db2b | ||
|
|
64aeaeeeea | ||
|
|
61db37ab0d | ||
|
|
f9c4d921e7 | ||
|
|
ca099df573 | ||
|
|
28b584b8bc | ||
|
|
70449e694d | ||
|
|
8395ea552d | ||
|
|
dc66452633 | ||
|
|
53ce44ac91 | ||
|
|
c7c3243bbc | ||
|
|
8bdd77d33d | ||
|
|
acd7d0db3a | ||
|
|
2bfadb8a3c | ||
|
|
0912e4af7b | ||
|
|
5aa5c48018 | ||
|
|
8cdd998f79 | ||
|
|
050d4d6b25 | ||
|
|
366cd11238 | ||
|
|
58d6443331 | ||
|
|
101b8afb56 | ||
|
|
5df5c47945 | ||
|
|
a04740ba86 | ||
|
|
425ad93ac5 | ||
|
|
8a44144c20 | ||
|
|
ee82c70582 | ||
|
|
c87e8e606b | ||
|
|
37a50dd953 | ||
|
|
a2669a3084 | ||
|
|
77da22f4dd | ||
|
|
7830ffe202 | ||
|
|
1c9e20d59f | ||
|
|
320edac286 | ||
|
|
d49878371d | ||
|
|
d2575a5d9b | ||
|
|
ea6cf72580 | ||
|
|
2118155b37 | ||
|
|
ba4f5bb71f | ||
|
|
d5a74a5a8b | ||
|
|
23be1df360 | ||
|
|
b5c1a1da4c | ||
|
|
c11e784f51 | ||
|
|
06f51c8f9c | ||
|
|
181bcbbda6 | ||
|
|
d008ead6a4 | ||
|
|
75924be958 | ||
|
|
b1a6e3f8a2 | ||
|
|
06712a6041 | ||
|
|
62b16339a9 | ||
|
|
9a2f1a36ba | ||
|
|
95cc4d3a73 | ||
|
|
497eeeb2e0 | ||
|
|
4be21ca249 | ||
|
|
e8598e214e | ||
|
|
54b1d65e3c | ||
|
|
f7648496d3 | ||
|
|
59a57c7197 | ||
|
|
5659b26827 | ||
|
|
ee4443aaf0 | ||
|
|
839dcad358 | ||
|
|
d67933ab49 | ||
|
|
0eb3f6b952 | ||
|
|
68b0f80fce | ||
|
|
93489529a3 | ||
|
|
511be74e74 | ||
|
|
bdee067803 | ||
|
|
32156cace3 | ||
|
|
30688114be | ||
|
|
34088bcc17 | ||
|
|
07835766cc | ||
|
|
251851ec6a | ||
|
|
049a669186 | ||
|
|
d29f13bae9 | ||
|
|
c758355df9 | ||
|
|
79d97a83af | ||
|
|
85bd47c240 | ||
|
|
473ead9616 | ||
|
|
cf2850933c | ||
|
|
ff2564c57a | ||
|
|
91d3848246 | ||
|
|
c031f0b45e | ||
|
|
fdbb9568ae | ||
|
|
d817883459 | ||
|
|
12255979ac | ||
|
|
366b61850b | ||
|
|
89be6bd183 | ||
|
|
e120331a2c | ||
|
|
cb8a212d96 | ||
|
|
7aec431ac5 | ||
|
|
d19681dea1 | ||
|
|
bf2299daf8 | ||
|
|
164930d0dd | ||
|
|
387dbac809 | ||
|
|
3b661e5a99 | ||
|
|
90c1c0e655 | ||
|
|
21d8e7695b | ||
|
|
1acc452cfe | ||
|
|
1375e1feee | ||
|
|
2187adf59a | ||
|
|
0dcb315d9d | ||
|
|
327ccbd0c9 | ||
|
|
f571d400e6 | ||
|
|
293aa52335 | ||
|
|
ca178ae9a7 | ||
|
|
d0c810e418 | ||
|
|
d496d2caeb | ||
|
|
e70b75c350 | ||
|
|
a50befeda5 | ||
|
|
e2616e8039 | ||
|
|
904266debe | ||
|
|
72d5783795 | ||
|
|
d699fb1473 | ||
|
|
fab1a6c33a | ||
|
|
be73c30194 | ||
|
|
451646fe4f | ||
|
|
decc919991 | ||
|
|
e0b4005921 | ||
|
|
3ef36e7534 | ||
|
|
1949e1e1e9 | ||
|
|
3358382358 | ||
|
|
3eca3ecd75 | ||
|
|
140c6b91b0 | ||
|
|
a5315ec240 | ||
|
|
93f1656e0b | ||
|
|
f1d006c236 | ||
|
|
b0b5a96694 | ||
|
|
7dbe9a85f4 | ||
|
|
d2c39528d5 | ||
|
|
0420543c94 | ||
|
|
aae0db902b | ||
|
|
88dae7cef7 | ||
|
|
e5cb17e934 | ||
|
|
9d609805f2 | ||
|
|
e2b9ca8254 | ||
|
|
e16a2fe8af | ||
|
|
22d61a533d | ||
|
|
af408bb45f | ||
|
|
24bfbc06f0 | ||
|
|
5eb9f353b5 | ||
|
|
473ce15f47 | ||
|
|
eb9cfbaed6 | ||
|
|
faeb037ff9 | ||
|
|
07602f697d | ||
|
|
11abb0fdb1 | ||
|
|
deeb2fa543 | ||
|
|
ef8d5ff11e | ||
|
|
91f3e07b83 | ||
|
|
c29bdbdacb | ||
|
|
a20d104d2f | ||
|
|
a61dd8ac17 | ||
|
|
7ee9a690ea | ||
|
|
5ba94c6c41 | ||
|
|
9fa855c837 | ||
|
|
9251007574 | ||
|
|
cc73b984cb | ||
|
|
548ef97c32 | ||
|
|
ed8a486726 | ||
|
|
1ab0911fc8 | ||
|
|
bdbaea7294 | ||
|
|
5cfd1f6fb2 | ||
|
|
5eda67381f | ||
|
|
2c8b8bfaf2 | ||
|
|
8f3159751a | ||
|
|
4b05e55b29 | ||
|
|
3d3c13fcd0 | ||
|
|
88e1d8a8cf | ||
|
|
e007db34e2 | ||
|
|
f9f06d2c02 | ||
|
|
234f7d00c8 | ||
|
|
9924553da5 | ||
|
|
df38d7e3ed | ||
|
|
44dd061619 | ||
|
|
7603a932b1 | ||
|
|
138e7acc13 | ||
|
|
e863d3e7e5 | ||
|
|
c8e401f5ed | ||
|
|
3ba20a8e28 | ||
|
|
ebae63752f | ||
|
|
8bc73901cf | ||
|
|
b4f70d9244 | ||
|
|
21e9f2bba3 | ||
|
|
881f4e3d6a | ||
|
|
b141945add |
@@ -3206,7 +3206,8 @@
|
|||||||
"avatar_url": "https://avatars.githubusercontent.com/u/3755203?v=4",
|
"avatar_url": "https://avatars.githubusercontent.com/u/3755203?v=4",
|
||||||
"profile": "https://github.com/swift2512",
|
"profile": "https://github.com/swift2512",
|
||||||
"contributions": [
|
"contributions": [
|
||||||
"bug"
|
"bug",
|
||||||
|
"code"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
105
.github/ISSUE_TEMPLATE/Bug-Report.yml
vendored
Normal file
105
.github/ISSUE_TEMPLATE/Bug-Report.yml
vendored
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
name: Bug Report
|
||||||
|
description: File a bug report.
|
||||||
|
title: "[Bug]: "
|
||||||
|
projects: ["grokability/snipe-it"]
|
||||||
|
type: bug
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to fill out this bug report! Most issues are documented in the [Snipe-IT repository's issues](https://github.com/grokability/snipe-it/issues) or in the official [Common Issues section of the Documentation](https://snipe-it.readme.io/docs/common-issues#/) and are due to the following:
|
||||||
|
|
||||||
|
- `.env` misconfiguration
|
||||||
|
- [Server Permissions](https://snipe-it.readme.io/docs/debugging-permissions#/)
|
||||||
|
- [Database Migrations](https://snipe-it.readme.io/docs/database-issues#run-migrations)
|
||||||
|
|
||||||
|
Please make sure you've checked these resources before submitting a new issue. If you find an existing issue, please add your context to it instead of opening a new issue. If your issue is more of a question, consider [opening a new discussion](https://github.com/grokability/snipe-it/discussions) or [pop by our Discord](https://discord.gg/yZFtShAcKk) instead of creating an issue.
|
||||||
|
|
||||||
|
**Please write your bug report in English.** You can use tools like [DeepL](https://www.deepl.com) or [Google Translate](https://translate.google.com/) to translate if necessary.
|
||||||
|
|
||||||
|
**If you choose to upload screenshots or videos (which we always encourage), please make sure they do not contain any sensitive information.**
|
||||||
|
- type: input
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: Snipe-IT Version
|
||||||
|
description: What version of Snipe-IT are you seeing this issue on? You can find the version number in the footer of any page in Snipe-IT.
|
||||||
|
placeholder: ex. v8.3.1 - build 19577 (master)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
id: db-version
|
||||||
|
attributes:
|
||||||
|
label: MySQL/MariaDB version
|
||||||
|
description: What database are you using, and what version?
|
||||||
|
placeholder: ex. MySQL 5.7
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: install-method
|
||||||
|
attributes:
|
||||||
|
label: How did you install Snipe-IT?
|
||||||
|
options:
|
||||||
|
- Git install
|
||||||
|
- Manual install (downloading zip/tar.gz)
|
||||||
|
- Docker
|
||||||
|
- install.sh
|
||||||
|
- Hosted by Grokability
|
||||||
|
- Other
|
||||||
|
- Not sure
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: what-happened
|
||||||
|
attributes:
|
||||||
|
label: What happened?
|
||||||
|
description: Also tell us, what did you expect to happen?
|
||||||
|
placeholder: Tell us what you see! (Be nice!)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
id: browsers
|
||||||
|
attributes:
|
||||||
|
label: What browsers are you seeing the problem on?
|
||||||
|
multiple: true
|
||||||
|
options:
|
||||||
|
- Firefox
|
||||||
|
- Chrome
|
||||||
|
- Safari
|
||||||
|
- Microsoft Edge
|
||||||
|
- Other
|
||||||
|
- type: textarea
|
||||||
|
id: server-logs
|
||||||
|
attributes:
|
||||||
|
label: Application log output
|
||||||
|
description: Please copy and paste any relevant log output from `storage/logs/laravel.log`. This will be automatically formatted into code, so no need for backticks.
|
||||||
|
render: shell
|
||||||
|
- type: textarea
|
||||||
|
id: browser-logs
|
||||||
|
attributes:
|
||||||
|
label: Browser console output
|
||||||
|
description: Please copy and paste any relevant log output from your browser console. This will be automatically formatted into code, so no need for backticks.
|
||||||
|
render: shell
|
||||||
|
- type: checkboxes
|
||||||
|
id: common-issues
|
||||||
|
attributes:
|
||||||
|
label: Common Issues
|
||||||
|
description: Please make sure you have done the following before submitting your issue.
|
||||||
|
options:
|
||||||
|
- label: I have searched this repo for existing issues related to my issue (including closed issues)
|
||||||
|
required: true
|
||||||
|
- label: My APP_URL is set correctly in my .env file (including http or https and no trailing slash)
|
||||||
|
required: true
|
||||||
|
- label: I have searched the official Snipe-IT documentation and have checked the Common Issues documentation (where applicable)
|
||||||
|
required: true
|
||||||
|
- label: I have run database migrations (where applicable).
|
||||||
|
required: true
|
||||||
|
- label: I have attached screenshots and/or videos of the issue (where applicable)
|
||||||
|
required: true
|
||||||
|
- type: checkboxes
|
||||||
|
id: terms
|
||||||
|
attributes:
|
||||||
|
label: Code of Conduct
|
||||||
|
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/grokability/snipe-it/blob/master/CODE_OF_CONDUCT.md).
|
||||||
|
options:
|
||||||
|
- label: I agree to follow this project's Code of Conduct
|
||||||
|
required: true
|
||||||
38
.github/ISSUE_TEMPLATE/Feature-Request.yml
vendored
Normal file
38
.github/ISSUE_TEMPLATE/Feature-Request.yml
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
name: Feature Request
|
||||||
|
description: Request a new feature.
|
||||||
|
title: "[Feature]: "
|
||||||
|
projects: ["grokability/snipe-it"]
|
||||||
|
type: feature
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Thanks for taking the time to fill out this feature request! Please make sure to search the existing issues in this repository to see if your feature has already been requested, and feel free to add your context to any existing requests.
|
||||||
|
|
||||||
|
**Please write your issue in English.** You can use tools like [DeepL](https://www.deepl.com) or [Google Translate](https://translate.google.com/) to translate if necessary.
|
||||||
|
|
||||||
|
**If you choose to upload screenshots or videos (which we always encourage), please make sure they do not contain any sensitive information.**
|
||||||
|
- type: input
|
||||||
|
id: version
|
||||||
|
attributes:
|
||||||
|
label: Snipe-IT Version
|
||||||
|
description: What version of Snipe-IT are you currently running? You can find the version number in the footer of any page in Snipe-IT.
|
||||||
|
placeholder: ex. v8.3.1 - build 19577 (master)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
id: feature-description
|
||||||
|
attributes:
|
||||||
|
label: How can we help?
|
||||||
|
description: Let us know in detail what feature you'd like to see added. While we can't promise to implement every feature request, we do read every one and take them into consideration when planning future releases.
|
||||||
|
placeholder: Tell us what you'd like to see in Snipe-IT! (Be nice!)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: checkboxes
|
||||||
|
id: terms
|
||||||
|
attributes:
|
||||||
|
label: Code of Conduct
|
||||||
|
description: By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/grokability/snipe-it/blob/master/CODE_OF_CONDUCT.md).
|
||||||
|
options:
|
||||||
|
- label: I agree to follow this project's Code of Conduct
|
||||||
|
required: true
|
||||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@@ -11,7 +11,7 @@ jobs:
|
|||||||
issues: write
|
issues: write
|
||||||
# pull-requests: write
|
# pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v9
|
- uses: actions/stale@v10
|
||||||
with:
|
with:
|
||||||
debug-only: true
|
debug-only: true
|
||||||
ascending: true
|
ascending: true
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ Thanks goes to all of these wonderful people ([emoji key](https://github.com/ken
|
|||||||
| [<img src="https://avatars.githubusercontent.com/u/2565989?v=4" width="110px;"/><br /><sub>coach1988</sub>](https://github.com/coach1988)<br />[💻](https://github.com/snipe/snipe-it/commits?author=coach1988 "Code") | [<img src="https://avatars.githubusercontent.com/u/11910225?v=4" width="110px;"/><br /><sub>MrM</sub>](https://github.com/mauro-miatello)<br />[💻](https://github.com/snipe/snipe-it/commits?author=mauro-miatello "Code") | [<img src="https://avatars.githubusercontent.com/u/60405354?v=4" width="110px;"/><br /><sub>koiakoia</sub>](https://github.com/koiakoia)<br />[💻](https://github.com/snipe/snipe-it/commits?author=koiakoia "Code") | [<img src="https://avatars.githubusercontent.com/u/5323832?v=4" width="110px;"/><br /><sub>Mustafa Online</sub>](https://github.com/mustafa-online)<br />[💻](https://github.com/snipe/snipe-it/commits?author=mustafa-online "Code") | [<img src="https://avatars.githubusercontent.com/u/104601439?v=4" width="110px;"/><br /><sub>franceslui</sub>](https://github.com/franceslui)<br />[💻](https://github.com/snipe/snipe-it/commits?author=franceslui "Code") | [<img src="https://avatars.githubusercontent.com/u/125313163?v=4" width="110px;"/><br /><sub>Q4kK</sub>](https://github.com/Q4kK)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Q4kK "Code") | [<img src="https://avatars.githubusercontent.com/u/55590532?v=4" width="110px;"/><br /><sub>squintfox</sub>](https://github.com/squintfox)<br />[💻](https://github.com/snipe/snipe-it/commits?author=squintfox "Code") |
|
| [<img src="https://avatars.githubusercontent.com/u/2565989?v=4" width="110px;"/><br /><sub>coach1988</sub>](https://github.com/coach1988)<br />[💻](https://github.com/snipe/snipe-it/commits?author=coach1988 "Code") | [<img src="https://avatars.githubusercontent.com/u/11910225?v=4" width="110px;"/><br /><sub>MrM</sub>](https://github.com/mauro-miatello)<br />[💻](https://github.com/snipe/snipe-it/commits?author=mauro-miatello "Code") | [<img src="https://avatars.githubusercontent.com/u/60405354?v=4" width="110px;"/><br /><sub>koiakoia</sub>](https://github.com/koiakoia)<br />[💻](https://github.com/snipe/snipe-it/commits?author=koiakoia "Code") | [<img src="https://avatars.githubusercontent.com/u/5323832?v=4" width="110px;"/><br /><sub>Mustafa Online</sub>](https://github.com/mustafa-online)<br />[💻](https://github.com/snipe/snipe-it/commits?author=mustafa-online "Code") | [<img src="https://avatars.githubusercontent.com/u/104601439?v=4" width="110px;"/><br /><sub>franceslui</sub>](https://github.com/franceslui)<br />[💻](https://github.com/snipe/snipe-it/commits?author=franceslui "Code") | [<img src="https://avatars.githubusercontent.com/u/125313163?v=4" width="110px;"/><br /><sub>Q4kK</sub>](https://github.com/Q4kK)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Q4kK "Code") | [<img src="https://avatars.githubusercontent.com/u/55590532?v=4" width="110px;"/><br /><sub>squintfox</sub>](https://github.com/squintfox)<br />[💻](https://github.com/snipe/snipe-it/commits?author=squintfox "Code") |
|
||||||
| [<img src="https://avatars.githubusercontent.com/u/1380084?v=4" width="110px;"/><br /><sub>Jeff Clay</sub>](https://github.com/jeffclay)<br />[💻](https://github.com/snipe/snipe-it/commits?author=jeffclay "Code") | [<img src="https://avatars.githubusercontent.com/u/52716446?v=4" width="110px;"/><br /><sub>Phil J R</sub>](https://github.com/PP-JN-RL)<br />[💻](https://github.com/snipe/snipe-it/commits?author=PP-JN-RL "Code") | [<img src="https://avatars.githubusercontent.com/u/1496725?v=4" width="110px;"/><br /><sub>i_virus</sub>](https://www.corelight.com/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=chandanchowdhury "Code") | [<img src="https://avatars.githubusercontent.com/u/1020541?v=4" width="110px;"/><br /><sub>Paul Grime</sub>](https://github.com/gitgrimbo)<br />[💻](https://github.com/snipe/snipe-it/commits?author=gitgrimbo "Code") | [<img src="https://avatars.githubusercontent.com/u/922815?v=4" width="110px;"/><br /><sub>Lee Porte</sub>](https://leeporte.co.uk)<br />[💻](https://github.com/snipe/snipe-it/commits?author=LeePorte "Code") | [<img src="https://avatars.githubusercontent.com/u/23613427?v=4" width="110px;"/><br /><sub>BRYAN </sub>](https://github.com/bryanlopezinc)<br />[💻](https://github.com/snipe/snipe-it/commits?author=bryanlopezinc "Code") [⚠️](https://github.com/snipe/snipe-it/commits?author=bryanlopezinc "Tests") | [<img src="https://avatars.githubusercontent.com/u/64061710?v=4" width="110px;"/><br /><sub>U-H-T</sub>](https://github.com/U-H-T)<br />[💻](https://github.com/snipe/snipe-it/commits?author=U-H-T "Code") |
|
| [<img src="https://avatars.githubusercontent.com/u/1380084?v=4" width="110px;"/><br /><sub>Jeff Clay</sub>](https://github.com/jeffclay)<br />[💻](https://github.com/snipe/snipe-it/commits?author=jeffclay "Code") | [<img src="https://avatars.githubusercontent.com/u/52716446?v=4" width="110px;"/><br /><sub>Phil J R</sub>](https://github.com/PP-JN-RL)<br />[💻](https://github.com/snipe/snipe-it/commits?author=PP-JN-RL "Code") | [<img src="https://avatars.githubusercontent.com/u/1496725?v=4" width="110px;"/><br /><sub>i_virus</sub>](https://www.corelight.com/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=chandanchowdhury "Code") | [<img src="https://avatars.githubusercontent.com/u/1020541?v=4" width="110px;"/><br /><sub>Paul Grime</sub>](https://github.com/gitgrimbo)<br />[💻](https://github.com/snipe/snipe-it/commits?author=gitgrimbo "Code") | [<img src="https://avatars.githubusercontent.com/u/922815?v=4" width="110px;"/><br /><sub>Lee Porte</sub>](https://leeporte.co.uk)<br />[💻](https://github.com/snipe/snipe-it/commits?author=LeePorte "Code") | [<img src="https://avatars.githubusercontent.com/u/23613427?v=4" width="110px;"/><br /><sub>BRYAN </sub>](https://github.com/bryanlopezinc)<br />[💻](https://github.com/snipe/snipe-it/commits?author=bryanlopezinc "Code") [⚠️](https://github.com/snipe/snipe-it/commits?author=bryanlopezinc "Tests") | [<img src="https://avatars.githubusercontent.com/u/64061710?v=4" width="110px;"/><br /><sub>U-H-T</sub>](https://github.com/U-H-T)<br />[💻](https://github.com/snipe/snipe-it/commits?author=U-H-T "Code") |
|
||||||
| [<img src="https://avatars.githubusercontent.com/u/5395363?v=4" width="110px;"/><br /><sub>Matt Tyree</sub>](https://github.com/Tyree)<br />[📖](https://github.com/snipe/snipe-it/commits?author=Tyree "Documentation") | [<img src="https://avatars.githubusercontent.com/u/292081?v=4" width="110px;"/><br /><sub>Florent Bervas</sub>](http://spoontux.net)<br />[💻](https://github.com/snipe/snipe-it/commits?author=FlorentDotMe "Code") | [<img src="https://avatars.githubusercontent.com/u/4498077?v=4" width="110px;"/><br /><sub>Daniel Albertsen</sub>](https://ditscheri.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=dbakan "Code") | [<img src="https://avatars.githubusercontent.com/u/100710244?v=4" width="110px;"/><br /><sub>r-xyz</sub>](https://github.com/r-xyz)<br />[💻](https://github.com/snipe/snipe-it/commits?author=r-xyz "Code") | [<img src="https://avatars.githubusercontent.com/u/47491036?v=4" width="110px;"/><br /><sub>Steven Mainor</sub>](https://github.com/DrekiDegga)<br />[💻](https://github.com/snipe/snipe-it/commits?author=DrekiDegga "Code") | [<img src="https://avatars.githubusercontent.com/u/65785975?v=4" width="110px;"/><br /><sub>arne-kroeger</sub>](https://github.com/arne-kroeger)<br />[💻](https://github.com/snipe/snipe-it/commits?author=arne-kroeger "Code") | [<img src="https://avatars.githubusercontent.com/u/167117705?v=4" width="110px;"/><br /><sub>Glukose1</sub>](https://github.com/Glukose1)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Glukose1 "Code") |
|
| [<img src="https://avatars.githubusercontent.com/u/5395363?v=4" width="110px;"/><br /><sub>Matt Tyree</sub>](https://github.com/Tyree)<br />[📖](https://github.com/snipe/snipe-it/commits?author=Tyree "Documentation") | [<img src="https://avatars.githubusercontent.com/u/292081?v=4" width="110px;"/><br /><sub>Florent Bervas</sub>](http://spoontux.net)<br />[💻](https://github.com/snipe/snipe-it/commits?author=FlorentDotMe "Code") | [<img src="https://avatars.githubusercontent.com/u/4498077?v=4" width="110px;"/><br /><sub>Daniel Albertsen</sub>](https://ditscheri.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=dbakan "Code") | [<img src="https://avatars.githubusercontent.com/u/100710244?v=4" width="110px;"/><br /><sub>r-xyz</sub>](https://github.com/r-xyz)<br />[💻](https://github.com/snipe/snipe-it/commits?author=r-xyz "Code") | [<img src="https://avatars.githubusercontent.com/u/47491036?v=4" width="110px;"/><br /><sub>Steven Mainor</sub>](https://github.com/DrekiDegga)<br />[💻](https://github.com/snipe/snipe-it/commits?author=DrekiDegga "Code") | [<img src="https://avatars.githubusercontent.com/u/65785975?v=4" width="110px;"/><br /><sub>arne-kroeger</sub>](https://github.com/arne-kroeger)<br />[💻](https://github.com/snipe/snipe-it/commits?author=arne-kroeger "Code") | [<img src="https://avatars.githubusercontent.com/u/167117705?v=4" width="110px;"/><br /><sub>Glukose1</sub>](https://github.com/Glukose1)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Glukose1 "Code") |
|
||||||
| [<img src="https://avatars.githubusercontent.com/u/1197791?v=4" width="110px;"/><br /><sub>Scarzy</sub>](https://github.com/Scarzy)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Scarzy "Code") | [<img src="https://avatars.githubusercontent.com/u/37372069?v=4" width="110px;"/><br /><sub>setpill</sub>](https://github.com/setpill)<br />[💻](https://github.com/snipe/snipe-it/commits?author=setpill "Code") | [<img src="https://avatars.githubusercontent.com/u/3755203?v=4" width="110px;"/><br /><sub>swift2512</sub>](https://github.com/swift2512)<br />[🐛](https://github.com/snipe/snipe-it/issues?q=author%3Aswift2512 "Bug reports") | [<img src="https://avatars.githubusercontent.com/u/6136439?v=4" width="110px;"/><br /><sub>Darren Rainey</sub>](https://darrenraineys.co.uk)<br />[💻](https://github.com/snipe/snipe-it/commits?author=DarrenRainey "Code") | [<img src="https://avatars.githubusercontent.com/u/133033121?v=4" width="110px;"/><br /><sub>maciej-poleszczyk</sub>](https://github.com/maciej-poleszczyk)<br />[💻](https://github.com/snipe/snipe-it/commits?author=maciej-poleszczyk "Code") | [<img src="https://avatars.githubusercontent.com/u/143394709?v=4" width="110px;"/><br /><sub>Sebastian Groß</sub>](https://github.com/sgross-emlix)<br />[💻](https://github.com/snipe/snipe-it/commits?author=sgross-emlix "Code") | [<img src="https://avatars.githubusercontent.com/u/41107778?v=4" width="110px;"/><br /><sub>Anouar Touati</sub>](https://github.com/AnouarTouati)<br />[💻](https://github.com/snipe/snipe-it/commits?author=AnouarTouati "Code") |
|
| [<img src="https://avatars.githubusercontent.com/u/1197791?v=4" width="110px;"/><br /><sub>Scarzy</sub>](https://github.com/Scarzy)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Scarzy "Code") | [<img src="https://avatars.githubusercontent.com/u/37372069?v=4" width="110px;"/><br /><sub>setpill</sub>](https://github.com/setpill)<br />[💻](https://github.com/snipe/snipe-it/commits?author=setpill "Code") | [<img src="https://avatars.githubusercontent.com/u/3755203?v=4" width="110px;"/><br /><sub>swift2512</sub>](https://github.com/swift2512)<br />[🐛](https://github.com/snipe/snipe-it/issues?q=author%3Aswift2512 "Bug reports") [💻](https://github.com/snipe/snipe-it/commits?author=swift2512 "Code") | [<img src="https://avatars.githubusercontent.com/u/6136439?v=4" width="110px;"/><br /><sub>Darren Rainey</sub>](https://darrenraineys.co.uk)<br />[💻](https://github.com/snipe/snipe-it/commits?author=DarrenRainey "Code") | [<img src="https://avatars.githubusercontent.com/u/133033121?v=4" width="110px;"/><br /><sub>maciej-poleszczyk</sub>](https://github.com/maciej-poleszczyk)<br />[💻](https://github.com/snipe/snipe-it/commits?author=maciej-poleszczyk "Code") | [<img src="https://avatars.githubusercontent.com/u/143394709?v=4" width="110px;"/><br /><sub>Sebastian Groß</sub>](https://github.com/sgross-emlix)<br />[💻](https://github.com/snipe/snipe-it/commits?author=sgross-emlix "Code") | [<img src="https://avatars.githubusercontent.com/u/41107778?v=4" width="110px;"/><br /><sub>Anouar Touati</sub>](https://github.com/AnouarTouati)<br />[💻](https://github.com/snipe/snipe-it/commits?author=AnouarTouati "Code") |
|
||||||
| [<img src="https://avatars.githubusercontent.com/u/25596663?v=4" width="110px;"/><br /><sub>aHVzY2g</sub>](https://github.com/aHVzY2g)<br />[💻](https://github.com/snipe/snipe-it/commits?author=aHVzY2g "Code") | [<img src="https://avatars.githubusercontent.com/u/13408130?v=4" width="110px;"/><br /><sub>林博仁 Buo-ren Lin</sub>](https://brlin.me)<br />[💻](https://github.com/snipe/snipe-it/commits?author=brlin-tw "Code") | [<img src="https://avatars.githubusercontent.com/u/18550946?v=4" width="110px;"/><br /><sub>Adugna Gizaw</sub>](https://orbalia.pythonanywhere.com/)<br />[🌍](#translation-addex12 "Translation") | [<img src="https://avatars.githubusercontent.com/u/760989?v=4" width="110px;"/><br /><sub>Jesse Ostrander</sub>](https://github.com/jostrander)<br />[💻](https://github.com/snipe/snipe-it/commits?author=jostrander "Code") | [<img src="https://avatars.githubusercontent.com/u/31522486?v=4" width="110px;"/><br /><sub>James M</sub>](https://github.com/azmcnutt)<br />[💻](https://github.com/snipe/snipe-it/commits?author=azmcnutt "Code") | [<img src="https://avatars.githubusercontent.com/u/5183146?v=4" width="110px;"/><br /><sub>Fiala06</sub>](https://github.com/Fiala06)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Fiala06 "Code") | [<img src="https://avatars.githubusercontent.com/u/28693782?v=4" width="110px;"/><br /><sub>Nathan Taylor</sub>](https://github.com/ntaylor-86)<br />[💻](https://github.com/snipe/snipe-it/commits?author=ntaylor-86 "Code") |
|
| [<img src="https://avatars.githubusercontent.com/u/25596663?v=4" width="110px;"/><br /><sub>aHVzY2g</sub>](https://github.com/aHVzY2g)<br />[💻](https://github.com/snipe/snipe-it/commits?author=aHVzY2g "Code") | [<img src="https://avatars.githubusercontent.com/u/13408130?v=4" width="110px;"/><br /><sub>林博仁 Buo-ren Lin</sub>](https://brlin.me)<br />[💻](https://github.com/snipe/snipe-it/commits?author=brlin-tw "Code") | [<img src="https://avatars.githubusercontent.com/u/18550946?v=4" width="110px;"/><br /><sub>Adugna Gizaw</sub>](https://orbalia.pythonanywhere.com/)<br />[🌍](#translation-addex12 "Translation") | [<img src="https://avatars.githubusercontent.com/u/760989?v=4" width="110px;"/><br /><sub>Jesse Ostrander</sub>](https://github.com/jostrander)<br />[💻](https://github.com/snipe/snipe-it/commits?author=jostrander "Code") | [<img src="https://avatars.githubusercontent.com/u/31522486?v=4" width="110px;"/><br /><sub>James M</sub>](https://github.com/azmcnutt)<br />[💻](https://github.com/snipe/snipe-it/commits?author=azmcnutt "Code") | [<img src="https://avatars.githubusercontent.com/u/5183146?v=4" width="110px;"/><br /><sub>Fiala06</sub>](https://github.com/Fiala06)<br />[💻](https://github.com/snipe/snipe-it/commits?author=Fiala06 "Code") | [<img src="https://avatars.githubusercontent.com/u/28693782?v=4" width="110px;"/><br /><sub>Nathan Taylor</sub>](https://github.com/ntaylor-86)<br />[💻](https://github.com/snipe/snipe-it/commits?author=ntaylor-86 "Code") |
|
||||||
| [<img src="https://avatars.githubusercontent.com/u/16699443?v=4" width="110px;"/><br /><sub>fvollmer</sub>](https://github.com/fvollmer)<br />[💻](https://github.com/snipe/snipe-it/commits?author=fvollmer "Code") | [<img src="https://avatars.githubusercontent.com/u/109086466?v=4" width="110px;"/><br /><sub>36864</sub>](https://github.com/36864)<br />[💻](https://github.com/snipe/snipe-it/commits?author=36864 "Code") | [<img src="https://avatars.githubusercontent.com/u/365751?v=4" width="110px;"/><br /><sub>Daniel O'Connor</sub>](http://clockwerx.blogspot.com/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=CloCkWeRX "Code") | [<img src="https://avatars.githubusercontent.com/u/102852568?v=4" width="110px;"/><br /><sub>BeatSpark</sub>](https://github.com/BeatSpark)<br />[💻](https://github.com/snipe/snipe-it/commits?author=BeatSpark "Code") | [<img src="https://avatars.githubusercontent.com/u/59203607?v=4" width="110px;"/><br /><sub>mrdahbi</sub>](https://github.com/mrdahbi)<br />[💻](https://github.com/snipe/snipe-it/commits?author=mrdahbi "Code") | [<img src="https://avatars.githubusercontent.com/u/6661332?v=4" width="110px;"/><br /><sub>Fabian Schmid</sub>](http://sr.solutions)<br />[💻](https://github.com/snipe/snipe-it/commits?author=chfsx "Code") | [<img src="https://avatars.githubusercontent.com/u/1288116?v=4" width="110px;"/><br /><sub>Chris Olin</sub>](https://www.chrisolin.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=realchrisolin "Code") |
|
| [<img src="https://avatars.githubusercontent.com/u/16699443?v=4" width="110px;"/><br /><sub>fvollmer</sub>](https://github.com/fvollmer)<br />[💻](https://github.com/snipe/snipe-it/commits?author=fvollmer "Code") | [<img src="https://avatars.githubusercontent.com/u/109086466?v=4" width="110px;"/><br /><sub>36864</sub>](https://github.com/36864)<br />[💻](https://github.com/snipe/snipe-it/commits?author=36864 "Code") | [<img src="https://avatars.githubusercontent.com/u/365751?v=4" width="110px;"/><br /><sub>Daniel O'Connor</sub>](http://clockwerx.blogspot.com/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=CloCkWeRX "Code") | [<img src="https://avatars.githubusercontent.com/u/102852568?v=4" width="110px;"/><br /><sub>BeatSpark</sub>](https://github.com/BeatSpark)<br />[💻](https://github.com/snipe/snipe-it/commits?author=BeatSpark "Code") | [<img src="https://avatars.githubusercontent.com/u/59203607?v=4" width="110px;"/><br /><sub>mrdahbi</sub>](https://github.com/mrdahbi)<br />[💻](https://github.com/snipe/snipe-it/commits?author=mrdahbi "Code") | [<img src="https://avatars.githubusercontent.com/u/6661332?v=4" width="110px;"/><br /><sub>Fabian Schmid</sub>](http://sr.solutions)<br />[💻](https://github.com/snipe/snipe-it/commits?author=chfsx "Code") | [<img src="https://avatars.githubusercontent.com/u/1288116?v=4" width="110px;"/><br /><sub>Chris Olin</sub>](https://www.chrisolin.com)<br />[💻](https://github.com/snipe/snipe-it/commits?author=realchrisolin "Code") |
|
||||||
| [<img src="https://avatars.githubusercontent.com/u/3803132?v=4" width="110px;"/><br /><sub>Dan</sub>](https://github.com/mnemonicly)<br />[💻](https://github.com/snipe/snipe-it/commits?author=mnemonicly "Code") | [<img src="https://avatars.githubusercontent.com/u/43917728?v=4" width="110px;"/><br /><sub>Nebel</sub>](https://github.com/NebelKreis)<br />[💻](https://github.com/snipe/snipe-it/commits?author=NebelKreis "Code") | [<img src="https://avatars.githubusercontent.com/u/132433803?v=4" width="110px;"/><br /><sub>test1337ahp</sub>](https://github.com/test1337ahp)<br />[💻](https://github.com/snipe/snipe-it/commits?author=test1337ahp "Code") | [<img src="https://avatars.githubusercontent.com/u/1916566?v=4" width="110px;"/><br /><sub>Jonathon Reinhart</sub>](https://github.com/JonathonReinhart)<br />[💻](https://github.com/snipe/snipe-it/commits?author=JonathonReinhart "Code") | [<img src="https://avatars.githubusercontent.com/u/484742?v=4" width="110px;"/><br /><sub>aranar-pro</sub>](https://github.com/aranar-pro)<br />[💻](https://github.com/snipe/snipe-it/commits?author=aranar-pro "Code") | [<img src="https://avatars.githubusercontent.com/u/27019397?v=4" width="110px;"/><br /><sub>Phil</sub>](https://github.com/phil-flip)<br />[💻](https://github.com/snipe/snipe-it/commits?author=phil-flip "Code") | [<img src="https://avatars.githubusercontent.com/u/6473460?v=4" width="110px;"/><br /><sub>Steffy Fort</sub>](https://fe80.fr/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=fe80 "Code") |
|
| [<img src="https://avatars.githubusercontent.com/u/3803132?v=4" width="110px;"/><br /><sub>Dan</sub>](https://github.com/mnemonicly)<br />[💻](https://github.com/snipe/snipe-it/commits?author=mnemonicly "Code") | [<img src="https://avatars.githubusercontent.com/u/43917728?v=4" width="110px;"/><br /><sub>Nebel</sub>](https://github.com/NebelKreis)<br />[💻](https://github.com/snipe/snipe-it/commits?author=NebelKreis "Code") | [<img src="https://avatars.githubusercontent.com/u/132433803?v=4" width="110px;"/><br /><sub>test1337ahp</sub>](https://github.com/test1337ahp)<br />[💻](https://github.com/snipe/snipe-it/commits?author=test1337ahp "Code") | [<img src="https://avatars.githubusercontent.com/u/1916566?v=4" width="110px;"/><br /><sub>Jonathon Reinhart</sub>](https://github.com/JonathonReinhart)<br />[💻](https://github.com/snipe/snipe-it/commits?author=JonathonReinhart "Code") | [<img src="https://avatars.githubusercontent.com/u/484742?v=4" width="110px;"/><br /><sub>aranar-pro</sub>](https://github.com/aranar-pro)<br />[💻](https://github.com/snipe/snipe-it/commits?author=aranar-pro "Code") | [<img src="https://avatars.githubusercontent.com/u/27019397?v=4" width="110px;"/><br /><sub>Phil</sub>](https://github.com/phil-flip)<br />[💻](https://github.com/snipe/snipe-it/commits?author=phil-flip "Code") | [<img src="https://avatars.githubusercontent.com/u/6473460?v=4" width="110px;"/><br /><sub>Steffy Fort</sub>](https://fe80.fr/)<br />[💻](https://github.com/snipe/snipe-it/commits?author=fe80 "Code") |
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Console\Commands;
|
namespace App\Console\Commands;
|
||||||
|
|
||||||
|
use App\Helpers\Helper;
|
||||||
use App\Mail\ExpiringAssetsMail;
|
use App\Mail\ExpiringAssetsMail;
|
||||||
use App\Mail\ExpiringLicenseMail;
|
use App\Mail\ExpiringLicenseMail;
|
||||||
use App\Models\Asset;
|
use App\Models\Asset;
|
||||||
@@ -52,19 +53,35 @@ class SendExpirationAlerts extends Command
|
|||||||
->filter(fn($item) => !empty($item))
|
->filter(fn($item) => !empty($item))
|
||||||
->all();
|
->all();
|
||||||
// Expiring Assets
|
// Expiring Assets
|
||||||
$assets = Asset::getExpiringWarrantee($alert_interval);
|
$assets = Asset::getExpiringWarrantyOrEol($alert_interval);
|
||||||
|
|
||||||
if ($assets->count() > 0) {
|
if ($assets->count() > 0) {
|
||||||
$this->info(trans_choice('mail.assets_warrantee_alert', $assets->count(), ['count' => $assets->count(), 'threshold' => $alert_interval]));
|
|
||||||
Mail::to($recipients)->send(new ExpiringAssetsMail($assets, $alert_interval));
|
Mail::to($recipients)->send(new ExpiringAssetsMail($assets, $alert_interval));
|
||||||
|
|
||||||
|
$this->table(
|
||||||
|
['ID', 'Tag', 'Model', 'Model Number', 'EOL', 'EOL Months', 'Warranty Expires', 'Warranty Months'],
|
||||||
|
$assets->map(fn($item) => ['ID' => $item->id, 'Tag' => $item->asset_tag, 'Model' => $item->model->name, 'Model Number' => $item->model->model_number, 'EOL' => $item->asset_eol_date, 'EOL Months' => $item->model->eol, 'Warranty Expires' => $item->warranty_expires, 'Warranty Months' => $item->warranty_months])
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Expiring licenses
|
// Expiring licenses
|
||||||
$licenses = License::getExpiringLicenses($alert_interval);
|
$licenses = License::getExpiringLicenses($alert_interval);
|
||||||
if ($licenses->count() > 0) {
|
if ($licenses->count() > 0) {
|
||||||
$this->info(trans_choice('mail.license_expiring_alert', $licenses->count(), ['count' => $licenses->count(), 'threshold' => $alert_interval]));
|
|
||||||
Mail::to($recipients)->send(new ExpiringLicenseMail($licenses, $alert_interval));
|
Mail::to($recipients)->send(new ExpiringLicenseMail($licenses, $alert_interval));
|
||||||
|
|
||||||
|
$this->table(
|
||||||
|
['ID', 'Name', 'Expires', 'Termination Date'],
|
||||||
|
$licenses->map(fn($item) => ['ID' => $item->id, 'Name' => $item->name, 'Expires' => $item->expiration_date, 'Termination Date' => $item->termination_date])
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Send a message even if the count is 0
|
||||||
|
$this->info(trans_choice('mail.assets_warrantee_alert', $assets->count(), ['count' => $assets->count(), 'threshold' => $alert_interval]));
|
||||||
|
$this->info(trans_choice('mail.license_expiring_alert', $licenses->count(), ['count' => $licenses->count(), 'threshold' => $alert_interval]));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if ($settings->alert_email == '') {
|
if ($settings->alert_email == '') {
|
||||||
$this->error('Could not send email. No alert email configured in settings');
|
$this->error('Could not send email. No alert email configured in settings');
|
||||||
|
|||||||
@@ -95,7 +95,7 @@ class Helper
|
|||||||
$Parsedown->setSafeMode(true);
|
$Parsedown->setSafeMode(true);
|
||||||
|
|
||||||
if ($str) {
|
if ($str) {
|
||||||
return $Parsedown->text($str);
|
return $Parsedown->text(strip_tags($str));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ class Helper
|
|||||||
$Parsedown->setSafeMode(true);
|
$Parsedown->setSafeMode(true);
|
||||||
|
|
||||||
if ($str) {
|
if ($str) {
|
||||||
return $Parsedown->line($str);
|
return $Parsedown->line(strip_tags($str));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -435,6 +435,34 @@ class Helper
|
|||||||
return $colors[$index];
|
return $colors[$index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check if a string has any RTL characters
|
||||||
|
* @param $value
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function hasRtl($string) {
|
||||||
|
$rtlChar = '/[\x{0590}-\x{083F}]|[\x{08A0}-\x{08FF}]|[\x{FB1D}-\x{FDFF}]|[\x{FE70}-\x{FEFF}]/u';
|
||||||
|
return preg_match($rtlChar, $string) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// is chinese, japanese or korean language
|
||||||
|
public static function isCjk($string) {
|
||||||
|
return Helper::isChinese($string) || Helper::isJapanese($string) || Helper::isKorean($string);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function isChinese($string) {
|
||||||
|
return preg_match("/\p{Han}+/u", $string);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function isJapanese($string) {
|
||||||
|
return preg_match('/[\x{4E00}-\x{9FBF}\x{3040}-\x{309F}\x{30A0}-\x{30FF}]/u', $string);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static function isKorean($string) {
|
||||||
|
return preg_match('/[\x{3130}-\x{318F}\x{AC00}-\x{D7AF}]/u', $string);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Increases or decreases the brightness of a color by a percentage of the current brightness.
|
* Increases or decreases the brightness of a color by a percentage of the current brightness.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -8,33 +8,23 @@ use App\Events\ItemAccepted;
|
|||||||
use App\Events\ItemDeclined;
|
use App\Events\ItemDeclined;
|
||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use App\Mail\CheckoutAcceptanceResponseMail;
|
use App\Mail\CheckoutAcceptanceResponseMail;
|
||||||
use App\Models\Actionlog;
|
|
||||||
use App\Models\Asset;
|
|
||||||
use App\Models\CheckoutAcceptance;
|
use App\Models\CheckoutAcceptance;
|
||||||
use App\Models\Company;
|
use App\Models\Company;
|
||||||
use App\Models\Contracts\Acceptable;
|
use App\Models\Contracts\Acceptable;
|
||||||
use App\Models\Setting;
|
use App\Models\Setting;
|
||||||
use App\Models\User;
|
use App\Models\User;
|
||||||
use App\Models\AssetModel;
|
|
||||||
use App\Models\Accessory;
|
|
||||||
use App\Models\License;
|
|
||||||
use App\Models\Component;
|
|
||||||
use App\Models\Consumable;
|
|
||||||
use App\Notifications\AcceptanceAssetAcceptedNotification;
|
use App\Notifications\AcceptanceAssetAcceptedNotification;
|
||||||
use App\Notifications\AcceptanceAssetAcceptedToUserNotification;
|
use App\Notifications\AcceptanceAssetAcceptedToUserNotification;
|
||||||
use App\Notifications\AcceptanceAssetDeclinedNotification;
|
use App\Notifications\AcceptanceAssetDeclinedNotification;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Facades\Auth;
|
|
||||||
use Illuminate\Support\Facades\Mail;
|
use Illuminate\Support\Facades\Mail;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use App\Http\Controllers\SettingsController;
|
|
||||||
use Barryvdh\DomPDF\Facade\Pdf;
|
|
||||||
use Carbon\Carbon;
|
|
||||||
use \Illuminate\Contracts\View\View;
|
use \Illuminate\Contracts\View\View;
|
||||||
use \Illuminate\Http\RedirectResponse;
|
use \Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
|
use App\Helpers\Helper;
|
||||||
|
|
||||||
class AcceptanceController extends Controller
|
class AcceptanceController extends Controller
|
||||||
{
|
{
|
||||||
@@ -85,6 +75,11 @@ class AcceptanceController extends Controller
|
|||||||
public function store(Request $request, $id) : RedirectResponse
|
public function store(Request $request, $id) : RedirectResponse
|
||||||
{
|
{
|
||||||
$acceptance = CheckoutAcceptance::find($id);
|
$acceptance = CheckoutAcceptance::find($id);
|
||||||
|
$assigned_user = User::find($acceptance->assigned_to_id);
|
||||||
|
$settings = Setting::getSettings();
|
||||||
|
$path_logo = '';
|
||||||
|
$sig_filename='';
|
||||||
|
|
||||||
|
|
||||||
if (is_null($acceptance)) {
|
if (is_null($acceptance)) {
|
||||||
return redirect()->route('account.accept')->with('error', trans('admin/hardware/message.does_not_exist'));
|
return redirect()->route('account.accept')->with('error', trans('admin/hardware/message.does_not_exist'));
|
||||||
@@ -107,140 +102,75 @@ class AcceptanceController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the signature and save it
|
* Check for the signature directory
|
||||||
*/
|
*/
|
||||||
if (! Storage::exists('private_uploads/signatures')) {
|
if (! Storage::exists('private_uploads/signatures')) {
|
||||||
Storage::makeDirectory('private_uploads/signatures', 775);
|
Storage::makeDirectory('private_uploads/signatures', 775);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check for the eula-pdfs directory
|
||||||
|
*/
|
||||||
|
if (! Storage::exists('private_uploads/eula-pdfs')) {
|
||||||
|
Storage::makeDirectory('private_uploads/eula-pdfs', 775);
|
||||||
|
}
|
||||||
|
|
||||||
$item = $acceptance->checkoutable_type::find($acceptance->checkoutable_id);
|
$item = $acceptance->checkoutable_type::find($acceptance->checkoutable_id);
|
||||||
$display_model = '';
|
|
||||||
$pdf_view_route = '';
|
|
||||||
$pdf_filename = 'accepted-eula-'.date('Y-m-d-h-i-s').'.pdf';
|
|
||||||
$sig_filename='';
|
// If signatures are required, make sure we have one
|
||||||
|
if (Setting::getSettings()->require_accept_signature == '1') {
|
||||||
|
|
||||||
|
// The item was accepted, check for a signature
|
||||||
|
if ($request->filled('signature_output')) {
|
||||||
|
$sig_filename = 'siglog-' . Str::uuid() . '-' . date('Y-m-d-his') . '.png';
|
||||||
|
$data_uri = $request->input('signature_output');
|
||||||
|
$encoded_image = explode(',', $data_uri);
|
||||||
|
$decoded_image = base64_decode($encoded_image[1]);
|
||||||
|
Storage::put('private_uploads/signatures/' . $sig_filename, (string)$decoded_image);
|
||||||
|
|
||||||
|
// No image data is present, kick them back.
|
||||||
|
// This mostly only applies to users on super-duper crapola browsers *cough* IE *cough*
|
||||||
|
} else {
|
||||||
|
return redirect()->back()->with('error', trans('general.shitty_browser'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Get the data array ready for the notifications and PDF generation
|
||||||
|
$data = [
|
||||||
|
'item_tag' => $item->asset_tag,
|
||||||
|
'item_name' => $item->name, // this handles licenses seats, which don't have a 'name' field
|
||||||
|
'item_model' => $item->model?->name,
|
||||||
|
'item_serial' => $item->serial,
|
||||||
|
'item_status' => $item->assetstatus?->name,
|
||||||
|
'eula' => $item->getEula(),
|
||||||
|
'note' => $request->input('note'),
|
||||||
|
'check_out_date' => Helper::getFormattedDateObject($acceptance->created_at, 'datetime', false),
|
||||||
|
'accepted_date' => Helper::getFormattedDateObject(now()->format('Y-m-d H:i:s'), 'datetime', false),
|
||||||
|
'declined_date' => Helper::getFormattedDateObject(now()->format('Y-m-d H:i:s'), 'datetime', false),
|
||||||
|
'assigned_to' => $assigned_user->display_name,
|
||||||
|
'site_name' => $settings->site_name,
|
||||||
|
'company_name' => $item->company?->name?? $settings->site_name,
|
||||||
|
'signature' => ($sig_filename) ? storage_path() . '/private_uploads/signatures/' . $sig_filename : null,
|
||||||
|
'logo' => ($settings->acceptance_pdf_logo) ? public_path() . '/uploads/' . $settings->acceptance_pdf_logo : null,
|
||||||
|
'date_settings' => $settings->date_display_format,
|
||||||
|
'admin' => auth()->user()->present()?->fullName,
|
||||||
|
'qty' => $acceptance->qty ?? 1,
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
if ($request->input('asset_acceptance') == 'accepted') {
|
if ($request->input('asset_acceptance') == 'accepted') {
|
||||||
|
|
||||||
/**
|
|
||||||
* Check for the eula-pdfs directory
|
|
||||||
*/
|
|
||||||
if (! Storage::exists('private_uploads/eula-pdfs')) {
|
|
||||||
Storage::makeDirectory('private_uploads/eula-pdfs', 775);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Setting::getSettings()->require_accept_signature == '1') {
|
$pdf_filename = 'accepted-'.$acceptance->checkoutable_id.'-'.$acceptance->display_checkoutable_type.'-eula-'.date('Y-m-d-h-i-s').'.pdf';
|
||||||
|
|
||||||
// Check if the signature directory exists, if not create it
|
|
||||||
if (!Storage::exists('private_uploads/signatures')) {
|
|
||||||
Storage::makeDirectory('private_uploads/signatures', 775);
|
|
||||||
}
|
|
||||||
|
|
||||||
// The item was accepted, check for a signature
|
// Generate the PDF content
|
||||||
if ($request->filled('signature_output')) {
|
$pdf_content = $acceptance->generateAcceptancePdf($data, $acceptance);
|
||||||
$sig_filename = 'siglog-' . Str::uuid() . '-' . date('Y-m-d-his') . '.png';
|
Storage::put('private_uploads/eula-pdfs/' .$pdf_filename, $pdf_content);
|
||||||
$data_uri = $request->input('signature_output');
|
|
||||||
$encoded_image = explode(',', $data_uri);
|
|
||||||
$decoded_image = base64_decode($encoded_image[1]);
|
|
||||||
Storage::put('private_uploads/signatures/' . $sig_filename, (string)$decoded_image);
|
|
||||||
|
|
||||||
// No image data is present, kick them back.
|
|
||||||
// This mostly only applies to users on super-duper crapola browsers *cough* IE *cough*
|
|
||||||
} else {
|
|
||||||
return redirect()->back()->with('error', trans('general.shitty_browser'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
$assigned_user = User::find($acceptance->assigned_to_id);
|
|
||||||
// this is horrible
|
|
||||||
switch($acceptance->checkoutable_type){
|
|
||||||
case 'App\Models\Asset':
|
|
||||||
$pdf_view_route ='account.accept.accept-asset-eula';
|
|
||||||
$asset_model = AssetModel::find($item->model_id);
|
|
||||||
if (!$asset_model) {
|
|
||||||
return redirect()->back()->with('error', trans('admin/models/message.does_not_exist'));
|
|
||||||
}
|
|
||||||
$display_model = $asset_model->name;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'App\Models\Accessory':
|
|
||||||
$pdf_view_route ='account.accept.accept-accessory-eula';
|
|
||||||
$accessory = Accessory::find($item->id);
|
|
||||||
$display_model = $accessory->name;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'App\Models\LicenseSeat':
|
|
||||||
$pdf_view_route ='account.accept.accept-license-eula';
|
|
||||||
$license = License::find($item->license_id);
|
|
||||||
$display_model = $license->name;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'App\Models\Component':
|
|
||||||
$pdf_view_route ='account.accept.accept-component-eula';
|
|
||||||
$component = Component::find($item->id);
|
|
||||||
$display_model = $component->name;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'App\Models\Consumable':
|
|
||||||
$pdf_view_route ='account.accept.accept-consumable-eula';
|
|
||||||
$consumable = Consumable::find($item->id);
|
|
||||||
$display_model = $consumable->name;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
// if ($acceptance->checkoutable_type == 'App\Models\Asset') {
|
|
||||||
// $pdf_view_route ='account.accept.accept-asset-eula';
|
|
||||||
// $asset_model = AssetModel::find($item->model_id);
|
|
||||||
// $display_model = $asset_model->name;
|
|
||||||
// $assigned_to = User::find($item->assigned_to)->present()->fullName;
|
|
||||||
//
|
|
||||||
// } elseif ($acceptance->checkoutable_type== 'App\Models\Accessory') {
|
|
||||||
// $pdf_view_route ='account.accept.accept-accessory-eula';
|
|
||||||
// $accessory = Accessory::find($item->id);
|
|
||||||
// $display_model = $accessory->name;
|
|
||||||
// $assigned_to = User::find($item->assignedTo);
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gather the data for the PDF. We fire this whether there is a signature required or not,
|
|
||||||
* since we want the moment-in-time proof of what the EULA was when they accepted it.
|
|
||||||
*/
|
|
||||||
$branding_settings = SettingsController::getPDFBranding();
|
|
||||||
|
|
||||||
$path_logo = "";
|
|
||||||
|
|
||||||
// Check for the PDF logo path and use that, otherwise use the regular logo path
|
|
||||||
if (!is_null($branding_settings->acceptance_pdf_logo)) {
|
|
||||||
$path_logo = public_path() . '/uploads/' . $branding_settings->acceptance_pdf_logo;
|
|
||||||
} elseif (!is_null($branding_settings->logo)) {
|
|
||||||
$path_logo = public_path() . '/uploads/' . $branding_settings->logo;
|
|
||||||
}
|
|
||||||
|
|
||||||
$data = [
|
|
||||||
'item_tag' => $item->asset_tag,
|
|
||||||
'item_model' => $display_model,
|
|
||||||
'item_serial' => $item->serial,
|
|
||||||
'item_status' => $item->assetstatus?->name,
|
|
||||||
'eula' => $item->getEula(),
|
|
||||||
'note' => $request->input('note'),
|
|
||||||
'check_out_date' => Carbon::parse($acceptance->created_at)->format('Y-m-d'),
|
|
||||||
'accepted_date' => Carbon::parse($acceptance->accepted_at)->format('Y-m-d'),
|
|
||||||
'assigned_to' => $assigned_user->present()->fullName,
|
|
||||||
'company_name' => $branding_settings->site_name,
|
|
||||||
'signature' => ($sig_filename) ? storage_path() . '/private_uploads/signatures/' . $sig_filename : null,
|
|
||||||
'logo' => $path_logo,
|
|
||||||
'date_settings' => $branding_settings->date_display_format,
|
|
||||||
'admin' => auth()->user()->present()?->fullName,
|
|
||||||
];
|
|
||||||
|
|
||||||
if ($pdf_view_route!='') {
|
|
||||||
Log::debug($pdf_filename.' is the filename, and the route was specified.');
|
|
||||||
$pdf = Pdf::loadView($pdf_view_route, $data);
|
|
||||||
Storage::put('private_uploads/eula-pdfs/' .$pdf_filename, $pdf->output());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Log the acceptance
|
||||||
$acceptance->accept($sig_filename, $item->getEula(), $pdf_filename, $request->input('note'));
|
$acceptance->accept($sig_filename, $item->getEula(), $pdf_filename, $request->input('note'));
|
||||||
|
|
||||||
// Send the PDF to the signing user
|
// Send the PDF to the signing user
|
||||||
@@ -248,9 +178,8 @@ class AcceptanceController extends Controller
|
|||||||
|
|
||||||
// Add the attachment for the signing user into the $data array
|
// Add the attachment for the signing user into the $data array
|
||||||
$data['file'] = $pdf_filename;
|
$data['file'] = $pdf_filename;
|
||||||
$locale = $assigned_user->locale;
|
|
||||||
try {
|
try {
|
||||||
$assigned_user->notify((new AcceptanceAssetAcceptedToUserNotification($data))->locale($locale));
|
$assigned_user->notify((new AcceptanceAssetAcceptedToUserNotification($data))->locale($assigned_user->locale));
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
Log::warning($e);
|
Log::warning($e);
|
||||||
}
|
}
|
||||||
@@ -264,95 +193,21 @@ class AcceptanceController extends Controller
|
|||||||
|
|
||||||
$return_msg = trans('admin/users/message.accepted');
|
$return_msg = trans('admin/users/message.accepted');
|
||||||
|
|
||||||
|
// Item was declined
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
/**
|
for ($i = 0; $i < ($acceptance->qty ?? 1); $i++) {
|
||||||
* Check for the eula-pdfs directory
|
$acceptance->decline($sig_filename, $request->input('note'));
|
||||||
*/
|
|
||||||
if (! Storage::exists('private_uploads/eula-pdfs')) {
|
|
||||||
Storage::makeDirectory('private_uploads/eula-pdfs', 775);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Setting::getSettings()->require_accept_signature == '1') {
|
|
||||||
|
|
||||||
// Check if the signature directory exists, if not create it
|
|
||||||
if (!Storage::exists('private_uploads/signatures')) {
|
|
||||||
Storage::makeDirectory('private_uploads/signatures', 775);
|
|
||||||
}
|
|
||||||
|
|
||||||
// The item was accepted, check for a signature
|
|
||||||
if ($request->filled('signature_output')) {
|
|
||||||
$sig_filename = 'siglog-' . Str::uuid() . '-' . date('Y-m-d-his') . '.png';
|
|
||||||
$data_uri = $request->input('signature_output');
|
|
||||||
$encoded_image = explode(',', $data_uri);
|
|
||||||
$decoded_image = base64_decode($encoded_image[1]);
|
|
||||||
Storage::put('private_uploads/signatures/' . $sig_filename, (string)$decoded_image);
|
|
||||||
|
|
||||||
// No image data is present, kick them back.
|
|
||||||
// This mostly only applies to users on super-duper crapola browsers *cough* IE *cough*
|
|
||||||
} else {
|
|
||||||
return redirect()->back()->with('error', trans('general.shitty_browser'));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Format the data to send the declined notification
|
|
||||||
$branding_settings = SettingsController::getPDFBranding();
|
|
||||||
|
|
||||||
// This is the most horriblest
|
|
||||||
switch($acceptance->checkoutable_type){
|
|
||||||
case 'App\Models\Asset':
|
|
||||||
$asset_model = AssetModel::find($item->model_id);
|
|
||||||
$display_model = $asset_model->name;
|
|
||||||
$assigned_to = User::find($acceptance->assigned_to_id)->present()->fullName;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'App\Models\Accessory':
|
|
||||||
$accessory = Accessory::find($item->id);
|
|
||||||
$display_model = $accessory->name;
|
|
||||||
$assigned_to = User::find($acceptance->assigned_to_id)->present()->fullName;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'App\Models\LicenseSeat':
|
|
||||||
$assigned_to = User::find($acceptance->assigned_to_id)->present()->fullName;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'App\Models\Component':
|
|
||||||
$assigned_to = User::find($acceptance->assigned_to_id)->present()->fullName;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'App\Models\Consumable':
|
|
||||||
$consumable = Consumable::find($item->id);
|
|
||||||
$display_model = $consumable->name;
|
|
||||||
$assigned_to = User::find($acceptance->assigned_to_id)->present()->fullName;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
$data = [
|
|
||||||
'item_tag' => $item->asset_tag,
|
|
||||||
'item_model' => $display_model,
|
|
||||||
'item_serial' => $item->serial,
|
|
||||||
'item_status' => $item->assetstatus?->name,
|
|
||||||
'note' => $request->input('note'),
|
|
||||||
'declined_date' => Carbon::parse($acceptance->declined_at)->format('Y-m-d'),
|
|
||||||
'signature' => ($sig_filename) ? storage_path() . '/private_uploads/signatures/' . $sig_filename : null,
|
|
||||||
'assigned_to' => $assigned_to,
|
|
||||||
'company_name' => $branding_settings->site_name,
|
|
||||||
'date_settings' => $branding_settings->date_display_format,
|
|
||||||
];
|
|
||||||
|
|
||||||
if ($pdf_view_route!='') {
|
|
||||||
Log::debug($pdf_filename.' is the filename, and the route was specified.');
|
|
||||||
$pdf = Pdf::loadView($pdf_view_route, $data);
|
|
||||||
Storage::put('private_uploads/eula-pdfs/' .$pdf_filename, $pdf->output());
|
|
||||||
}
|
|
||||||
|
|
||||||
$acceptance->decline($sig_filename, $request->input('note'));
|
|
||||||
$acceptance->notify(new AcceptanceAssetDeclinedNotification($data));
|
$acceptance->notify(new AcceptanceAssetDeclinedNotification($data));
|
||||||
Log::debug('New event acceptance.');
|
Log::debug('New event acceptance.');
|
||||||
event(new CheckoutDeclined($acceptance));
|
event(new CheckoutDeclined($acceptance));
|
||||||
$return_msg = trans('admin/users/message.declined');
|
$return_msg = trans('admin/users/message.declined');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Send an email notification if one is requested
|
||||||
if ($acceptance->alert_on_response_id) {
|
if ($acceptance->alert_on_response_id) {
|
||||||
try {
|
try {
|
||||||
$recipient = User::find($acceptance->alert_on_response_id);
|
$recipient = User::find($acceptance->alert_on_response_id);
|
||||||
@@ -371,9 +226,10 @@ class AcceptanceController extends Controller
|
|||||||
Log::warning($e);
|
Log::warning($e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return redirect()->to('account/accept')->with('success', $return_msg);
|
return redirect()->to('account/accept')->with('success', $return_msg);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,11 +3,13 @@
|
|||||||
namespace App\Http\Controllers;
|
namespace App\Http\Controllers;
|
||||||
|
|
||||||
use App\Helpers\Helper;
|
use App\Helpers\Helper;
|
||||||
|
use App\Models\Actionlog;
|
||||||
use Illuminate\Http\RedirectResponse;
|
use Illuminate\Http\RedirectResponse;
|
||||||
use Illuminate\Support\Facades\Log;
|
use Illuminate\Support\Facades\Log;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use \Illuminate\Http\Response;
|
|
||||||
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
use Symfony\Component\HttpFoundation\BinaryFileResponse;
|
||||||
|
use \Illuminate\Http\Response;
|
||||||
|
|
||||||
class ActionlogController extends Controller
|
class ActionlogController extends Controller
|
||||||
{
|
{
|
||||||
public function displaySig($filename) : RedirectResponse | Response | bool
|
public function displaySig($filename) : RedirectResponse | Response | bool
|
||||||
@@ -39,17 +41,29 @@ class ActionlogController extends Controller
|
|||||||
|
|
||||||
public function getStoredEula($filename) : Response | BinaryFileResponse | RedirectResponse
|
public function getStoredEula($filename) : Response | BinaryFileResponse | RedirectResponse
|
||||||
{
|
{
|
||||||
$this->authorize('view', \App\Models\Asset::class);
|
|
||||||
|
|
||||||
if (config('filesystems.default') == 's3_private') {
|
if ($actionlog = Actionlog::where('filename', $filename)->with('user')->with('target')->firstOrFail()) {
|
||||||
return redirect()->away(Storage::disk('s3_private')->temporaryUrl('private_uploads/eula-pdfs/'.$filename, now()->addMinutes(5)));
|
|
||||||
|
$this->authorize('view', $actionlog->target);
|
||||||
|
$this->authorize('view', $actionlog->user);
|
||||||
|
|
||||||
|
|
||||||
|
if (config('filesystems.default') == 's3_private') {
|
||||||
|
return redirect()->away(Storage::disk('s3_private')->temporaryUrl('private_uploads/eula-pdfs/' . $filename, now()->addMinutes(5)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Storage::exists('private_uploads/eula-pdfs/' . $filename)) {
|
||||||
|
|
||||||
|
if (request()->input('inline') == 'true') {
|
||||||
|
return response()->file(config('app.private_uploads') . '/eula-pdfs/' . $filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->download(config('app.private_uploads') . '/eula-pdfs/' . $filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
return redirect()->back()->with('error', trans('general.file_does_not_exist'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Storage::exists('private_uploads/eula-pdfs/'.$filename)) {
|
return redirect()->back()->with('error', trans('general.record_not_found'));
|
||||||
return response()->download(config('app.private_uploads').'/eula-pdfs/'.$filename);
|
|
||||||
}
|
|
||||||
|
|
||||||
return redirect()->back()->with('error', trans('general.file_does_not_exist'));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1290,9 +1290,19 @@ class AssetsController extends Controller
|
|||||||
|
|
||||||
public function assignedAssets(Request $request, Asset $asset) : JsonResponse | array
|
public function assignedAssets(Request $request, Asset $asset) : JsonResponse | array
|
||||||
{
|
{
|
||||||
|
$this->authorize('view', Asset::class);
|
||||||
|
$this->authorize('view', $asset);
|
||||||
|
|
||||||
return [];
|
$query = Asset::where([
|
||||||
// to do
|
'assigned_to' => $asset->id,
|
||||||
|
'assigned_type' => Asset::class,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$total = $query->count();
|
||||||
|
|
||||||
|
$assets = $query->applyOffsetAndLimit($total)->get();
|
||||||
|
|
||||||
|
return (new AssetsTransformer)->transformAssets($assets, $total);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function assignedAccessories(Request $request, Asset $asset) : JsonResponse | array
|
public function assignedAccessories(Request $request, Asset $asset) : JsonResponse | array
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ class CategoriesController extends Controller
|
|||||||
'consumables_count',
|
'consumables_count',
|
||||||
'components_count',
|
'components_count',
|
||||||
'licenses_count',
|
'licenses_count',
|
||||||
|
'created_at',
|
||||||
|
'updated_at',
|
||||||
'image',
|
'image',
|
||||||
'notes',
|
'notes',
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -26,6 +26,12 @@ class LicensesController extends Controller
|
|||||||
|
|
||||||
$licenses = License::with('company', 'manufacturer', 'supplier','category', 'adminuser')->withCount('freeSeats as free_seats_count');
|
$licenses = License::with('company', 'manufacturer', 'supplier','category', 'adminuser')->withCount('freeSeats as free_seats_count');
|
||||||
|
|
||||||
|
if ($request->input('status')=='inactive') {
|
||||||
|
$licenses->ExpiredLicenses();
|
||||||
|
} else {
|
||||||
|
$licenses->ActiveLicenses();
|
||||||
|
}
|
||||||
|
|
||||||
if ($request->filled('company_id')) {
|
if ($request->filled('company_id')) {
|
||||||
$licenses->where('licenses.company_id', '=', $request->input('company_id'));
|
$licenses->where('licenses.company_id', '=', $request->input('company_id'));
|
||||||
}
|
}
|
||||||
@@ -94,6 +100,8 @@ class LicensesController extends Controller
|
|||||||
$licenses->onlyTrashed();
|
$licenses->onlyTrashed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Make sure the offset and limit are actually integers and do not exceed system limits
|
// Make sure the offset and limit are actually integers and do not exceed system limits
|
||||||
$offset = ($request->input('offset') > $licenses->count()) ? $licenses->count() : app('api_offset_value');
|
$offset = ($request->input('offset') > $licenses->count()) ? $licenses->count() : app('api_offset_value');
|
||||||
$limit = app('api_limit_value');
|
$limit = app('api_limit_value');
|
||||||
|
|||||||
@@ -37,10 +37,14 @@ class LocationsController extends Controller
|
|||||||
'address',
|
'address',
|
||||||
'address2',
|
'address2',
|
||||||
'assets_count',
|
'assets_count',
|
||||||
'assets_count',
|
'assigned_assets_count',
|
||||||
|
'rtd_assets_count',
|
||||||
|
'accessories_count',
|
||||||
'assigned_accessories_count',
|
'assigned_accessories_count',
|
||||||
'assigned_assets_count',
|
'components_count',
|
||||||
'assigned_assets_count',
|
'consumables_count',
|
||||||
|
'users_count',
|
||||||
|
'children_count',
|
||||||
'city',
|
'city',
|
||||||
'country',
|
'country',
|
||||||
'created_at',
|
'created_at',
|
||||||
@@ -54,7 +58,6 @@ class LocationsController extends Controller
|
|||||||
'rtd_assets_count',
|
'rtd_assets_count',
|
||||||
'state',
|
'state',
|
||||||
'updated_at',
|
'updated_at',
|
||||||
'users_count',
|
|
||||||
'zip',
|
'zip',
|
||||||
'notes',
|
'notes',
|
||||||
];
|
];
|
||||||
@@ -79,8 +82,9 @@ class LocationsController extends Controller
|
|||||||
'locations.currency',
|
'locations.currency',
|
||||||
'locations.company_id',
|
'locations.company_id',
|
||||||
'locations.notes',
|
'locations.notes',
|
||||||
|
'locations.created_by',
|
||||||
|
'locations.deleted_at',
|
||||||
])
|
])
|
||||||
->withCount('assignedAssets as assigned_assets_count')
|
|
||||||
->withCount('assignedAssets as assigned_assets_count')
|
->withCount('assignedAssets as assigned_assets_count')
|
||||||
->withCount('assets as assets_count')
|
->withCount('assets as assets_count')
|
||||||
->withCount('assignedAccessories as assigned_accessories_count')
|
->withCount('assignedAccessories as assigned_accessories_count')
|
||||||
@@ -88,6 +92,8 @@ class LocationsController extends Controller
|
|||||||
->withCount('rtd_assets as rtd_assets_count')
|
->withCount('rtd_assets as rtd_assets_count')
|
||||||
->withCount('children as children_count')
|
->withCount('children as children_count')
|
||||||
->withCount('users as users_count')
|
->withCount('users as users_count')
|
||||||
|
->withCount('consumables as consumables_count')
|
||||||
|
->withCount('components as components_count')
|
||||||
->with('adminuser');
|
->with('adminuser');
|
||||||
|
|
||||||
// Only scope locations if the setting is enabled
|
// Only scope locations if the setting is enabled
|
||||||
@@ -131,6 +137,14 @@ class LocationsController extends Controller
|
|||||||
$locations->where('locations.company_id', '=', $request->input('company_id'));
|
$locations->where('locations.company_id', '=', $request->input('company_id'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($request->filled('parent_id')) {
|
||||||
|
$locations->where('locations.parent_id', '=', $request->input('parent_id'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($request->input('status') == 'deleted') {
|
||||||
|
$locations->onlyTrashed();
|
||||||
|
}
|
||||||
|
|
||||||
// Make sure the offset and limit are actually integers and do not exceed system limits
|
// Make sure the offset and limit are actually integers and do not exceed system limits
|
||||||
$offset = ($request->input('offset') > $locations->count()) ? $locations->count() : app('api_offset_value');
|
$offset = ($request->input('offset') > $locations->count()) ? $locations->count() : app('api_offset_value');
|
||||||
$limit = app('api_limit_value');
|
$limit = app('api_limit_value');
|
||||||
@@ -224,8 +238,13 @@ class LocationsController extends Controller
|
|||||||
])
|
])
|
||||||
->withCount('assignedAssets as assigned_assets_count')
|
->withCount('assignedAssets as assigned_assets_count')
|
||||||
->withCount('assets as assets_count')
|
->withCount('assets as assets_count')
|
||||||
|
->withCount('assignedAccessories as assigned_accessories_count')
|
||||||
|
->withCount('accessories as accessories_count')
|
||||||
->withCount('rtd_assets as rtd_assets_count')
|
->withCount('rtd_assets as rtd_assets_count')
|
||||||
|
->withCount('children as children_count')
|
||||||
->withCount('users as users_count')
|
->withCount('users as users_count')
|
||||||
|
->withCount('consumables as consumables_count')
|
||||||
|
->withCount('components as components_count')
|
||||||
->findOrFail($id);
|
->findOrFail($id);
|
||||||
|
|
||||||
return (new LocationsTransformer)->transformLocation($location);
|
return (new LocationsTransformer)->transformLocation($location);
|
||||||
@@ -320,11 +339,15 @@ class LocationsController extends Controller
|
|||||||
{
|
{
|
||||||
$this->authorize('delete', Location::class);
|
$this->authorize('delete', Location::class);
|
||||||
$location = Location::withCount('assignedAssets as assigned_assets_count')
|
$location = Location::withCount('assignedAssets as assigned_assets_count')
|
||||||
|
->withCount('assignedAssets as assigned_assets_count')
|
||||||
->withCount('assets as assets_count')
|
->withCount('assets as assets_count')
|
||||||
|
->withCount('assignedAccessories as assigned_accessories_count')
|
||||||
|
->withCount('accessories as accessories_count')
|
||||||
->withCount('rtd_assets as rtd_assets_count')
|
->withCount('rtd_assets as rtd_assets_count')
|
||||||
->withCount('children as children_count')
|
->withCount('children as children_count')
|
||||||
->withCount('users as users_count')
|
->withCount('users as users_count')
|
||||||
->withCount('accessories as accessories_count')
|
->withCount('consumables as consumables_count')
|
||||||
|
->withCount('components as components_count')
|
||||||
->findOrFail($id);
|
->findOrFail($id);
|
||||||
|
|
||||||
if (! $location->isDeletable()) {
|
if (! $location->isDeletable()) {
|
||||||
|
|||||||
@@ -102,13 +102,15 @@ class ComponentCheckoutController extends Controller
|
|||||||
return redirect()->route('components.checkout.show', $componentId)->with('error', trans('general.error_user_company'));
|
return redirect()->route('components.checkout.show', $componentId)->with('error', trans('general.error_user_company'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$component->checkout_qty = $request->input('assigned_qty');
|
||||||
|
|
||||||
// Update the component data
|
// Update the component data
|
||||||
$component->asset_id = $request->input('asset_id');
|
$component->asset_id = $request->input('asset_id');
|
||||||
$component->assets()->attach($component->id, [
|
$component->assets()->attach($component->id, [
|
||||||
'component_id' => $component->id,
|
'component_id' => $component->id,
|
||||||
'created_by' => auth()->user()->id,
|
'created_by' => auth()->user()->id,
|
||||||
'created_at' => date('Y-m-d H:i:s'),
|
'created_at' => date('Y-m-d H:i:s'),
|
||||||
'assigned_qty' => $request->input('assigned_qty'),
|
'assigned_qty' => $component->checkout_qty,
|
||||||
'asset_id' => $request->input('asset_id'),
|
'asset_id' => $request->input('asset_id'),
|
||||||
'note' => $request->input('note'),
|
'note' => $request->input('note'),
|
||||||
]);
|
]);
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ class LicenseCheckoutController extends Controller
|
|||||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
||||||
* @since [v1.0]
|
* @since [v1.0]
|
||||||
* @param $id
|
* @param $id
|
||||||
* @return \Illuminate\Contracts\View\View
|
* @return \Illuminate\Contracts\View\View |\Illuminate\Http\RedirectResponse
|
||||||
* @throws \Illuminate\Auth\Access\AuthorizationException
|
* @throws \Illuminate\Auth\Access\AuthorizationException
|
||||||
*/
|
*/
|
||||||
public function create(License $license)
|
public function create(License $license)
|
||||||
@@ -39,6 +39,11 @@ class LicenseCheckoutController extends Controller
|
|||||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkout.not_enough_seats'));
|
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkout.not_enough_seats'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Make sure the license is expired or terminated
|
||||||
|
if ($license->isInactive()) {
|
||||||
|
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkout.license_is_inactive'));
|
||||||
|
}
|
||||||
|
|
||||||
// We don't currently allow checking out licenses to locations, so we'll reset that to user if needed
|
// We don't currently allow checking out licenses to locations, so we'll reset that to user if needed
|
||||||
if (session()->get('checkout_to_type') == 'location') {
|
if (session()->get('checkout_to_type') == 'location') {
|
||||||
session()->put(['checkout_to_type' => 'user']);
|
session()->put(['checkout_to_type' => 'user']);
|
||||||
@@ -70,8 +75,19 @@ class LicenseCheckoutController extends Controller
|
|||||||
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.not_found'));
|
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.not_found'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
$this->authorize('checkout', $license);
|
$this->authorize('checkout', $license);
|
||||||
|
|
||||||
|
// Make sure there is at least one available to checkout
|
||||||
|
if ($license->availCount()->count() < 1) {
|
||||||
|
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkout.not_enough_seats'));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure the license is expired or terminated
|
||||||
|
if ($license->isInactive()) {
|
||||||
|
return redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkout.license_is_inactive'));
|
||||||
|
}
|
||||||
|
|
||||||
$licenseSeat = $this->findLicenseSeatToCheckout($license, $seatId);
|
$licenseSeat = $this->findLicenseSeatToCheckout($license, $seatId);
|
||||||
$licenseSeat->created_by = auth()->id();
|
$licenseSeat->created_by = auth()->id();
|
||||||
$licenseSeat->notes = $request->input('notes');
|
$licenseSeat->notes = $request->input('notes');
|
||||||
@@ -114,6 +130,7 @@ class LicenseCheckoutController extends Controller
|
|||||||
throw new \Illuminate\Http\Exceptions\HttpResponseException(redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkout.not_enough_seats')));
|
throw new \Illuminate\Http\Exceptions\HttpResponseException(redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkout.not_enough_seats')));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (! $licenseSeat->license->is($license)) {
|
if (! $licenseSeat->license->is($license)) {
|
||||||
throw new \Illuminate\Http\Exceptions\HttpResponseException(redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkout.mismatch')));
|
throw new \Illuminate\Http\Exceptions\HttpResponseException(redirect()->route('licenses.index')->with('error', trans('admin/licenses/message.checkout.mismatch')));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -256,6 +256,9 @@ class LicensesController extends Controller
|
|||||||
else {
|
else {
|
||||||
$checkedout_seats_count = ($total_seats_count - $available_seats_count);
|
$checkedout_seats_count = ($total_seats_count - $available_seats_count);
|
||||||
}
|
}
|
||||||
|
if($license->isInactive()){
|
||||||
|
session()->flash('warning', (trans('admin/licenses/message.checkout.license_is_inactive')));
|
||||||
|
}
|
||||||
|
|
||||||
$this->authorize('view', $license);
|
$this->authorize('view', $license);
|
||||||
return view('licenses.view', compact('license'))
|
return view('licenses.view', compact('license'))
|
||||||
|
|||||||
@@ -189,30 +189,36 @@ class LocationsController extends Controller
|
|||||||
{
|
{
|
||||||
$this->authorize('delete', Location::class);
|
$this->authorize('delete', Location::class);
|
||||||
|
|
||||||
if (is_null($location = Location::find($locationId))) {
|
$location = Location::withCount('assignedAssets as assigned_assets_count')
|
||||||
|
->withCount('assets as assets_count')
|
||||||
|
->withCount('assignedAccessories as assigned_accessories_count')
|
||||||
|
->withCount('accessories as accessories_count')
|
||||||
|
->withCount('rtd_assets as rtd_assets_count')
|
||||||
|
->withCount('children as children_count')
|
||||||
|
->withCount('users as users_count')
|
||||||
|
->withCount('consumables as consumables_count')
|
||||||
|
->withCount('components as components_count')
|
||||||
|
->find($locationId);
|
||||||
|
|
||||||
|
if (!$location) {
|
||||||
return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.does_not_exist'));
|
return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.does_not_exist'));
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($location->users()->count() > 0) {
|
if ($location->isDeletable()) {
|
||||||
return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_users'));
|
|
||||||
} elseif ($location->children()->count() > 0) {
|
|
||||||
return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_child_loc'));
|
|
||||||
} elseif ($location->assets()->count() > 0) {
|
|
||||||
return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_assets'));
|
|
||||||
} elseif ($location->assignedassets()->count() > 0) {
|
|
||||||
return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_assets'));
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($location->image) {
|
if ($location->image) {
|
||||||
try {
|
try {
|
||||||
Storage::disk('public')->delete('locations/'.$location->image);
|
Storage::disk('public')->delete('locations/'.$location->image);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
Log::error($e);
|
Log::error($e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
$location->delete();
|
||||||
|
return redirect()->to(route('locations.index'))->with('success', trans('admin/locations/message.delete.success'));
|
||||||
|
} else {
|
||||||
|
return redirect()->to(route('locations.index'))->with('error', trans('admin/locations/message.assoc_users'));
|
||||||
}
|
}
|
||||||
$location->delete();
|
|
||||||
|
|
||||||
return redirect()->to(route('locations.index'))->with('success', trans('admin/locations/message.delete.success'));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -247,23 +253,41 @@ class LocationsController extends Controller
|
|||||||
$this->authorize('view', Location::class);
|
$this->authorize('view', Location::class);
|
||||||
|
|
||||||
if ($location = Location::where('id', $id)->first()) {
|
if ($location = Location::where('id', $id)->first()) {
|
||||||
$parent = Location::where('id', $location->parent_id)->first();
|
|
||||||
$manager = User::where('id', $location->manager_id)->first();
|
|
||||||
$company = Company::where('id', $location->company_id)->first();
|
|
||||||
$users = User::where('location_id', $id)->with('company', 'department', 'location')->get();
|
|
||||||
$assets = Asset::where('assigned_to', $id)->where('assigned_type', Location::class)->with('model', 'model.category')->get();
|
|
||||||
return view('locations/print')
|
return view('locations/print')
|
||||||
->with('assets', $assets)
|
->with('assigned', false)
|
||||||
->with('users',$users)
|
->with('assets', $location->assets)
|
||||||
|
->with('assignedAssets', $location->assignedAssets)
|
||||||
|
->with('accessories', $location->accessories)
|
||||||
|
->with('assignedAccessories', $location->assignedAccessories)
|
||||||
|
->with('users',$location->users)
|
||||||
->with('location', $location)
|
->with('location', $location)
|
||||||
->with('parent', $parent)
|
->with('consumables', $location->consumables)
|
||||||
->with('manager', $manager)
|
->with('components', $location->components)
|
||||||
->with('company', $company);
|
->with('children', $location->children);
|
||||||
}
|
}
|
||||||
|
|
||||||
return redirect()->route('locations.index')->with('error', trans('admin/locations/message.does_not_exist'));
|
return redirect()->route('locations.index')->with('error', trans('admin/locations/message.does_not_exist'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function print_all_assigned($id) : View | RedirectResponse
|
||||||
|
{
|
||||||
|
$this->authorize('view', Location::class);
|
||||||
|
if ($location = Location::where('id', $id)->first()) {
|
||||||
|
return view('locations/print')
|
||||||
|
->with('assigned', true)
|
||||||
|
->with('assets', $location->assets)
|
||||||
|
->with('assignedAssets', $location->assignedAssets)
|
||||||
|
->with('accessories', $location->accessories)
|
||||||
|
->with('assignedAccessories', $location->assignedAccessories)
|
||||||
|
->with('users',$location->users)
|
||||||
|
->with('location', $location)
|
||||||
|
->with('consumables', $location->consumables)
|
||||||
|
->with('components', $location->components)
|
||||||
|
->with('children', $location->children);
|
||||||
|
}
|
||||||
|
return redirect()->route('locations.index')->with('error', trans('admin/locations/message.does_not_exist'));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a view that presents a form to clone a location.
|
* Returns a view that presents a form to clone a location.
|
||||||
@@ -321,33 +345,12 @@ class LocationsController extends Controller
|
|||||||
return redirect()->route('locations.index')->with('success', trans('admin/locations/message.restore.success'));
|
return redirect()->route('locations.index')->with('success', trans('admin/locations/message.restore.success'));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check validation
|
|
||||||
return redirect()->back()->with('error', trans('general.could_not_restore', ['item_type' => trans('general.location'), 'error' => $location->getErrors()->first()]));
|
return redirect()->back()->with('error', trans('general.could_not_restore', ['item_type' => trans('general.location'), 'error' => $location->getErrors()->first()]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return redirect()->back()->with('error', trans('admin/models/message.does_not_exist'));
|
return redirect()->back()->with('error', trans('admin/models/message.does_not_exist'));
|
||||||
|
|
||||||
}
|
}
|
||||||
public function print_all_assigned($id) : View | RedirectResponse
|
|
||||||
{
|
|
||||||
$this->authorize('view', Location::class);
|
|
||||||
if ($location = Location::where('id', $id)->first()) {
|
|
||||||
$parent = Location::where('id', $location->parent_id)->first();
|
|
||||||
$manager = User::where('id', $location->manager_id)->first();
|
|
||||||
$company = Company::where('id', $location->company_id)->first();
|
|
||||||
$users = User::where('location_id', $id)->with('company', 'department', 'location')->get();
|
|
||||||
$assets = Asset::where('location_id', $id)->with('model', 'model.category')->get();
|
|
||||||
return view('locations/print')
|
|
||||||
->with('assets', $assets)
|
|
||||||
->with('users',$users)
|
|
||||||
->with('location', $location)
|
|
||||||
->with('parent', $parent)
|
|
||||||
->with('manager', $manager)
|
|
||||||
->with('company', $company);
|
|
||||||
}
|
|
||||||
return redirect()->route('locations.index')->with('error', trans('admin/locations/message.does_not_exist'));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a view that allows the user to bulk delete locations
|
* Returns a view that allows the user to bulk delete locations
|
||||||
@@ -366,8 +369,12 @@ class LocationsController extends Controller
|
|||||||
$locations = Location::whereIn('id', $locations_raw_array)
|
$locations = Location::whereIn('id', $locations_raw_array)
|
||||||
->withCount('assignedAssets as assigned_assets_count')
|
->withCount('assignedAssets as assigned_assets_count')
|
||||||
->withCount('assets as assets_count')
|
->withCount('assets as assets_count')
|
||||||
|
->withCount('assignedAccessories as assigned_accessories_count')
|
||||||
|
->withCount('accessories as accessories_count')
|
||||||
->withCount('rtd_assets as rtd_assets_count')
|
->withCount('rtd_assets as rtd_assets_count')
|
||||||
->withCount('children as children_count')
|
->withCount('children as children_count')
|
||||||
|
->withCount('consumables as consumables_count')
|
||||||
|
->withCount('components as components_count')
|
||||||
->withCount('users as users_count')->get();
|
->withCount('users as users_count')->get();
|
||||||
|
|
||||||
$valid_count = 0;
|
$valid_count = 0;
|
||||||
@@ -400,9 +407,13 @@ class LocationsController extends Controller
|
|||||||
$locations = Location::whereIn('id', $locations_raw_array)
|
$locations = Location::whereIn('id', $locations_raw_array)
|
||||||
->withCount('assignedAssets as assigned_assets_count')
|
->withCount('assignedAssets as assigned_assets_count')
|
||||||
->withCount('assets as assets_count')
|
->withCount('assets as assets_count')
|
||||||
|
->withCount('assignedAccessories as assigned_accessories_count')
|
||||||
|
->withCount('accessories as accessories_count')
|
||||||
->withCount('rtd_assets as rtd_assets_count')
|
->withCount('rtd_assets as rtd_assets_count')
|
||||||
->withCount('children as children_count')
|
->withCount('children as children_count')
|
||||||
->withCount('users as users_count')->get();
|
->withCount('users as users_count')
|
||||||
|
->withCount('consumables as consumables_count')
|
||||||
|
->withCount('components as components_count')->get();
|
||||||
|
|
||||||
$success_count = 0;
|
$success_count = 0;
|
||||||
$error_count = 0;
|
$error_count = 0;
|
||||||
|
|||||||
@@ -274,22 +274,18 @@ class ReportsController extends Controller
|
|||||||
$target_name = '';
|
$target_name = '';
|
||||||
|
|
||||||
if ($actionlog->target) {
|
if ($actionlog->target) {
|
||||||
if ($actionlog->targetType() == 'user') {
|
$target_name = $actionlog->target->display_name;
|
||||||
$target_name = $actionlog->target->display_name;
|
|
||||||
} else {
|
|
||||||
$target_name = $actionlog->target->getDisplayNameAttribute();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if($actionlog->item){
|
if ($actionlog->item){
|
||||||
$item_name = e($actionlog->item->getDisplayNameAttribute());
|
$item_name = e($actionlog->item->display_name);
|
||||||
} else {
|
} else {
|
||||||
$item_name = '';
|
$item_name = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$row = [
|
$row = [
|
||||||
$actionlog->created_at,
|
$actionlog->created_at,
|
||||||
($actionlog->adminuser) ? e($actionlog->adminuser->display_name) : '',
|
($actionlog->adminuser) ? $actionlog->adminuser->display_name : '',
|
||||||
$actionlog->present()->actionType(),
|
$actionlog->present()->actionType(),
|
||||||
e($actionlog->itemType()),
|
e($actionlog->itemType()),
|
||||||
($actionlog->itemType() == 'user') ? $actionlog->filename : $item_name,
|
($actionlog->itemType() == 'user') ? $actionlog->filename : $item_name,
|
||||||
@@ -298,10 +294,10 @@ class ReportsController extends Controller
|
|||||||
(($actionlog->item) && ($actionlog->item->model)) ? $actionlog->item->model->model_number : null,
|
(($actionlog->item) && ($actionlog->item->model)) ? $actionlog->item->model->model_number : null,
|
||||||
$target_name,
|
$target_name,
|
||||||
($actionlog->note) ? e($actionlog->note) : '',
|
($actionlog->note) ? e($actionlog->note) : '',
|
||||||
$actionlog->log_meta,
|
|
||||||
$actionlog->remote_ip,
|
$actionlog->remote_ip,
|
||||||
$actionlog->user_agent,
|
$actionlog->user_agent,
|
||||||
$actionlog->action_source,
|
$actionlog->action_source,
|
||||||
|
$actionlog->log_meta,
|
||||||
];
|
];
|
||||||
fputcsv($handle, $row);
|
fputcsv($handle, $row);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,10 +34,7 @@ class AssetCountForSidebar
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$total_assets = Asset::count();
|
$total_assets = Asset::AssetsForShow()->count();
|
||||||
if ($settings->show_archived_in_list != '1') {
|
|
||||||
$total_assets -= Asset::Archived()->count();
|
|
||||||
}
|
|
||||||
view()->share('total_assets', $total_assets);
|
view()->share('total_assets', $total_assets);
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
Log::debug($e);
|
Log::debug($e);
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ class AccessoriesTransformer
|
|||||||
'qty' => ($accessory->qty) ? (int) $accessory->qty : null,
|
'qty' => ($accessory->qty) ? (int) $accessory->qty : null,
|
||||||
'purchase_date' => ($accessory->purchase_date) ? Helper::getFormattedDateObject($accessory->purchase_date, 'date') : null,
|
'purchase_date' => ($accessory->purchase_date) ? Helper::getFormattedDateObject($accessory->purchase_date, 'date') : null,
|
||||||
'purchase_cost' => Helper::formatCurrencyOutput($accessory->purchase_cost),
|
'purchase_cost' => Helper::formatCurrencyOutput($accessory->purchase_cost),
|
||||||
|
'total_cost' => Helper::formatCurrencyOutput($accessory->totalCostSum()),
|
||||||
'order_number' => ($accessory->order_number) ? e($accessory->order_number) : null,
|
'order_number' => ($accessory->order_number) ? e($accessory->order_number) : null,
|
||||||
'min_qty' => ($accessory->min_amt) ? (int) $accessory->min_amt : null, // Legacy - should phase out - replaced by below, for the bootstrap table formatter
|
'min_qty' => ($accessory->min_amt) ? (int) $accessory->min_amt : null, // Legacy - should phase out - replaced by below, for the bootstrap table formatter
|
||||||
'min_amt' => ($accessory->min_amt) ? (int) $accessory->min_amt : null,
|
'min_amt' => ($accessory->min_amt) ? (int) $accessory->min_amt : null,
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ class ActionlogsTransformer
|
|||||||
[
|
[
|
||||||
'url' => $actionlog->uploads_file_url(),
|
'url' => $actionlog->uploads_file_url(),
|
||||||
'filename' => $actionlog->filename,
|
'filename' => $actionlog->filename,
|
||||||
'inlineable' => StorageHelper::allowSafeInline($actionlog->uploads_file_url()),
|
'inlineable' => StorageHelper::allowSafeInline($actionlog->uploads_file_path()),
|
||||||
'exists_on_disk' => Storage::exists($actionlog->uploads_file_path()) ? true : false,
|
'exists_on_disk' => Storage::exists($actionlog->uploads_file_path()) ? true : false,
|
||||||
] : null,
|
] : null,
|
||||||
|
|
||||||
@@ -155,7 +155,7 @@ class ActionlogsTransformer
|
|||||||
'id' => (int) $actionlog->item->id,
|
'id' => (int) $actionlog->item->id,
|
||||||
'name' => e($actionlog->item->display_name) ?? null,
|
'name' => e($actionlog->item->display_name) ?? null,
|
||||||
'type' => e($actionlog->itemType()),
|
'type' => e($actionlog->itemType()),
|
||||||
'serial' =>e($actionlog->item->serial) ? e($actionlog->item->serial) : null
|
'serial' => e($actionlog->item->serial) ? e($actionlog->item->serial) : null
|
||||||
] : null,
|
] : null,
|
||||||
'location' => ($actionlog->location) ? [
|
'location' => ($actionlog->location) ? [
|
||||||
'id' => (int) $actionlog->location->id,
|
'id' => (int) $actionlog->location->id,
|
||||||
@@ -168,7 +168,7 @@ class ActionlogsTransformer
|
|||||||
'action_type' => $actionlog->present()->actionType(),
|
'action_type' => $actionlog->present()->actionType(),
|
||||||
'admin' => ($actionlog->adminuser) ? [
|
'admin' => ($actionlog->adminuser) ? [
|
||||||
'id' => (int) $actionlog->adminuser->id,
|
'id' => (int) $actionlog->adminuser->id,
|
||||||
'name' => e($actionlog->adminuser->display_name),
|
'name' => e($actionlog->adminuser->display_name) ?? null,
|
||||||
'first_name'=> e($actionlog->adminuser->first_name),
|
'first_name'=> e($actionlog->adminuser->first_name),
|
||||||
'last_name'=> e($actionlog->adminuser->last_name)
|
'last_name'=> e($actionlog->adminuser->last_name)
|
||||||
] : null,
|
] : null,
|
||||||
@@ -180,7 +180,7 @@ class ActionlogsTransformer
|
|||||||
] : null,
|
] : null,
|
||||||
'target' => ($actionlog->target) ? [
|
'target' => ($actionlog->target) ? [
|
||||||
'id' => (int) $actionlog->target->id,
|
'id' => (int) $actionlog->target->id,
|
||||||
'name' => ($actionlog->target->display_name) ?? null,
|
'name' => e($actionlog->target->display_name) ?? null,
|
||||||
'type' => e($actionlog->targetType()),
|
'type' => e($actionlog->targetType()),
|
||||||
] : null,
|
] : null,
|
||||||
|
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class ComponentsTransformer
|
|||||||
'order_number' => e($component->order_number),
|
'order_number' => e($component->order_number),
|
||||||
'purchase_date' => Helper::getFormattedDateObject($component->purchase_date, 'date'),
|
'purchase_date' => Helper::getFormattedDateObject($component->purchase_date, 'date'),
|
||||||
'purchase_cost' => Helper::formatCurrencyOutput($component->purchase_cost),
|
'purchase_cost' => Helper::formatCurrencyOutput($component->purchase_cost),
|
||||||
|
'total_cost' => Helper::formatCurrencyOutput($component->totalCostSum()),
|
||||||
'remaining' => (int) $component->numRemaining(),
|
'remaining' => (int) $component->numRemaining(),
|
||||||
'company' => ($component->company) ? [
|
'company' => ($component->company) ? [
|
||||||
'id' => (int) $component->company->id,
|
'id' => (int) $component->company->id,
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ class ConsumablesTransformer
|
|||||||
'remaining' => $consumable->numRemaining(),
|
'remaining' => $consumable->numRemaining(),
|
||||||
'order_number' => e($consumable->order_number),
|
'order_number' => e($consumable->order_number),
|
||||||
'purchase_cost' => Helper::formatCurrencyOutput($consumable->purchase_cost),
|
'purchase_cost' => Helper::formatCurrencyOutput($consumable->purchase_cost),
|
||||||
|
'total_cost' => Helper::formatCurrencyOutput($consumable->totalCostSum()),
|
||||||
'purchase_date' => Helper::getFormattedDateObject($consumable->purchase_date, 'date'),
|
'purchase_date' => Helper::getFormattedDateObject($consumable->purchase_date, 'date'),
|
||||||
'qty' => (int) $consumable->qty,
|
'qty' => (int) $consumable->qty,
|
||||||
'notes' => ($consumable->notes) ? Helper::parseEscapedMarkedownInline($consumable->notes) : null,
|
'notes' => ($consumable->notes) ? Helper::parseEscapedMarkedownInline($consumable->notes) : null,
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ class LicenseSeatsTransformer
|
|||||||
'reassignable' => (bool) $seat->license->reassignable,
|
'reassignable' => (bool) $seat->license->reassignable,
|
||||||
'notes' => e($seat->notes),
|
'notes' => e($seat->notes),
|
||||||
'user_can_checkout' => (($seat->assigned_to == '') && ($seat->asset_id == '')),
|
'user_can_checkout' => (($seat->assigned_to == '') && ($seat->asset_id == '')),
|
||||||
'disabled' => $seat->unreassignable_seat,
|
'disabled' => $seat->unreassignable_seat || $seat->license->isInactive(),
|
||||||
];
|
];
|
||||||
|
|
||||||
$permissions_array['available_actions'] = [
|
$permissions_array['available_actions'] = [
|
||||||
|
|||||||
@@ -31,11 +31,11 @@ class LicensesTransformer
|
|||||||
'purchase_order' => ($license->purchase_order) ? e($license->purchase_order) : null,
|
'purchase_order' => ($license->purchase_order) ? e($license->purchase_order) : null,
|
||||||
'purchase_date' => Helper::getFormattedDateObject($license->purchase_date, 'date'),
|
'purchase_date' => Helper::getFormattedDateObject($license->purchase_date, 'date'),
|
||||||
'termination_date' => Helper::getFormattedDateObject($license->termination_date, 'date'),
|
'termination_date' => Helper::getFormattedDateObject($license->termination_date, 'date'),
|
||||||
|
'expiration_date' => Helper::getFormattedDateObject($license->expiration_date, 'date'),
|
||||||
'depreciation' => ($license->depreciation) ? ['id' => (int) $license->depreciation->id,'name'=> e($license->depreciation->name)] : null,
|
'depreciation' => ($license->depreciation) ? ['id' => (int) $license->depreciation->id,'name'=> e($license->depreciation->name)] : null,
|
||||||
'purchase_cost' => Helper::formatCurrencyOutput($license->purchase_cost),
|
'purchase_cost' => Helper::formatCurrencyOutput($license->purchase_cost),
|
||||||
'purchase_cost_numeric' => $license->purchase_cost,
|
'purchase_cost_numeric' => $license->purchase_cost,
|
||||||
'notes' => Helper::parseEscapedMarkedownInline($license->notes),
|
'notes' => Helper::parseEscapedMarkedownInline($license->notes),
|
||||||
'expiration_date' => Helper::getFormattedDateObject($license->expiration_date, 'date'),
|
|
||||||
'seats' => (int) $license->seats,
|
'seats' => (int) $license->seats,
|
||||||
'free_seats_count' => (int) $license->free_seats_count - License::unReassignableCount($license),
|
'free_seats_count' => (int) $license->free_seats_count - License::unReassignableCount($license),
|
||||||
'remaining' => (int) $license->free_seats_count,
|
'remaining' => (int) $license->free_seats_count,
|
||||||
@@ -54,7 +54,7 @@ class LicensesTransformer
|
|||||||
'updated_at' => Helper::getFormattedDateObject($license->updated_at, 'datetime'),
|
'updated_at' => Helper::getFormattedDateObject($license->updated_at, 'datetime'),
|
||||||
'deleted_at' => Helper::getFormattedDateObject($license->deleted_at, 'datetime'),
|
'deleted_at' => Helper::getFormattedDateObject($license->deleted_at, 'datetime'),
|
||||||
'user_can_checkout' => (bool) ($license->free_seats_count > 0),
|
'user_can_checkout' => (bool) ($license->free_seats_count > 0),
|
||||||
|
'disabled' => $license->isInactive(),
|
||||||
];
|
];
|
||||||
|
|
||||||
$permissions_array['available_actions'] = [
|
$permissions_array['available_actions'] = [
|
||||||
|
|||||||
@@ -53,6 +53,9 @@ class LocationsTransformer
|
|||||||
'assets_count' => (int) $location->assets_count,
|
'assets_count' => (int) $location->assets_count,
|
||||||
'rtd_assets_count' => (int) $location->rtd_assets_count,
|
'rtd_assets_count' => (int) $location->rtd_assets_count,
|
||||||
'users_count' => (int) $location->users_count,
|
'users_count' => (int) $location->users_count,
|
||||||
|
'consumables_count' => (int) $location->consumables_count,
|
||||||
|
'components_count' => (int) $location->components_count,
|
||||||
|
'children_count' => (int) $location->children_count,
|
||||||
'currency' => ($location->currency) ? e($location->currency) : null,
|
'currency' => ($location->currency) ? e($location->currency) : null,
|
||||||
'ldap_ou' => ($location->ldap_ou) ? e($location->ldap_ou) : null,
|
'ldap_ou' => ($location->ldap_ou) ? e($location->ldap_ou) : null,
|
||||||
'notes' => Helper::parseEscapedMarkedownInline($location->notes),
|
'notes' => Helper::parseEscapedMarkedownInline($location->notes),
|
||||||
@@ -76,12 +79,13 @@ class LocationsTransformer
|
|||||||
];
|
];
|
||||||
|
|
||||||
$permissions_array['available_actions'] = [
|
$permissions_array['available_actions'] = [
|
||||||
'update' => Gate::allows('update', Location::class) ? true : false,
|
'update' => (Gate::allows('update', Location::class) && ($location->deleted_at == '')),
|
||||||
'delete' => $location->isDeletable(),
|
'delete' => $location->isDeletable(),
|
||||||
'bulk_selectable' => [
|
'bulk_selectable' => [
|
||||||
'delete' => $location->isDeletable()
|
'delete' => $location->isDeletable()
|
||||||
],
|
],
|
||||||
'clone' => (Gate::allows('create', Location::class) && ($location->deleted_at == '')),
|
'clone' => (Gate::allows('create', Location::class) && ($location->deleted_at == '')),
|
||||||
|
'restore' => (Gate::allows('create', Location::class) && ($location->deleted_at != '')),
|
||||||
];
|
];
|
||||||
|
|
||||||
$array += $permissions_array;
|
$array += $permissions_array;
|
||||||
|
|||||||
@@ -96,8 +96,8 @@ class CheckoutableListener
|
|||||||
|
|
||||||
if (!empty($to)) {
|
if (!empty($to)) {
|
||||||
try {
|
try {
|
||||||
Mail::to(array_flatten($to))->send($mailable->locale($notifiable->locale));
|
$toMail = (clone $mailable)->locale($notifiable->locale);
|
||||||
Mail::to(array_flatten($cc))->send($mailable->locale(Setting::getSettings()->locale));
|
Mail::to(array_flatten($to))->send($toMail);
|
||||||
Log::info('Checkout Mail sent to checkout target');
|
Log::info('Checkout Mail sent to checkout target');
|
||||||
} catch (ClientException $e) {
|
} catch (ClientException $e) {
|
||||||
Log::debug("Exception caught during checkout email: " . $e->getMessage());
|
Log::debug("Exception caught during checkout email: " . $e->getMessage());
|
||||||
@@ -105,6 +105,16 @@ class CheckoutableListener
|
|||||||
Log::debug("Exception caught during checkout email: " . $e->getMessage());
|
Log::debug("Exception caught during checkout email: " . $e->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (!empty($cc)) {
|
||||||
|
try {
|
||||||
|
$ccMail = (clone $mailable)->locale(Setting::getSettings()->locale);
|
||||||
|
Mail::to(array_flatten($cc))->send($ccMail);
|
||||||
|
} catch (ClientException $e) {
|
||||||
|
Log::debug("Exception caught during checkout email: " . $e->getMessage());
|
||||||
|
} catch (Exception $e) {
|
||||||
|
Log::debug("Exception caught during checkout email: " . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($shouldSendWebhookNotification) {
|
if ($shouldSendWebhookNotification) {
|
||||||
@@ -179,16 +189,26 @@ class CheckoutableListener
|
|||||||
|
|
||||||
[$to, $cc] = $this->generateEmailRecipients($shouldSendEmailToUser, $shouldSendEmailToAlertAddress, $notifiable);
|
[$to, $cc] = $this->generateEmailRecipients($shouldSendEmailToUser, $shouldSendEmailToAlertAddress, $notifiable);
|
||||||
|
|
||||||
try {
|
if (!empty($to)) {
|
||||||
if (!empty($to)) {
|
try {
|
||||||
Mail::to(array_flatten($to))->send($mailable->locale($notifiable->locale));
|
$toMail = (clone $mailable)->locale($notifiable->locale);
|
||||||
Mail::to(array_flatten($cc))->send($mailable->locale(Setting::getSettings()->locale));
|
Mail::to(array_flatten($to))->send($toMail);
|
||||||
Log::info('Checkin Mail sent to CC addresses');
|
Log::info('Checkin Mail sent to checkin target');
|
||||||
|
} catch (ClientException $e) {
|
||||||
|
Log::debug("Exception caught during checkin email: " . $e->getMessage());
|
||||||
|
} catch (Exception $e) {
|
||||||
|
Log::debug("Exception caught during checkin email: " . $e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!empty($cc)) {
|
||||||
|
try {
|
||||||
|
$ccMail = (clone $mailable)->locale(Setting::getSettings()->locale);
|
||||||
|
Mail::to(array_flatten($cc))->send($ccMail);
|
||||||
|
} catch (ClientException $e) {
|
||||||
|
Log::debug("Exception caught during checkin email: " . $e->getMessage());
|
||||||
|
} catch (Exception $e) {
|
||||||
|
Log::debug("Exception caught during checkin email: " . $e->getMessage());
|
||||||
}
|
}
|
||||||
} catch (ClientException $e) {
|
|
||||||
Log::debug("Exception caught during checkin email: " . $e->getMessage());
|
|
||||||
} catch (Exception $e) {
|
|
||||||
Log::debug("Exception caught during checkin email: " . $e->getMessage());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,6 +262,12 @@ class CheckoutableListener
|
|||||||
$acceptance->checkoutable()->associate($event->checkoutable);
|
$acceptance->checkoutable()->associate($event->checkoutable);
|
||||||
$acceptance->assignedTo()->associate($event->checkedOutTo);
|
$acceptance->assignedTo()->associate($event->checkedOutTo);
|
||||||
|
|
||||||
|
$acceptance->qty = 1;
|
||||||
|
|
||||||
|
if (isset($event->checkoutable->checkout_qty)) {
|
||||||
|
$acceptance->qty = $event->checkoutable->checkout_qty;
|
||||||
|
}
|
||||||
|
|
||||||
$category = $this->getCategoryFromCheckoutable($event->checkoutable);
|
$category = $this->getCategoryFromCheckoutable($event->checkoutable);
|
||||||
|
|
||||||
if ($category?->alert_on_response) {
|
if ($category?->alert_on_response) {
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ class CheckoutAccessoryMail extends Mailable
|
|||||||
|
|
||||||
return new Envelope(
|
return new Envelope(
|
||||||
from: $from,
|
from: $from,
|
||||||
subject: trans('mail.Accessory_Checkout_Notification'),
|
subject: trans_choice('mail.Accessory_Checkout_Notification', $this->checkout_qty),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,17 +83,19 @@ class CheckoutAccessoryMail extends Mailable
|
|||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function introductionLine(): string
|
private function introductionLine(): string
|
||||||
{
|
{
|
||||||
if ($this->target instanceof Location) {
|
if ($this->target instanceof Location) {
|
||||||
return trans('mail.new_item_checked_location', ['location' => $this->target->name ]);
|
return trans_choice('mail.new_item_checked_location', $this->checkout_qty, ['location' => $this->target->name]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->requiresAcceptance()) {
|
if ($this->requiresAcceptance()) {
|
||||||
return trans('mail.new_item_checked_with_acceptance');
|
return trans_choice('mail.new_item_checked_with_acceptance', $this->checkout_qty);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->requiresAcceptance()) {
|
if (!$this->requiresAcceptance()) {
|
||||||
return trans('mail.new_item_checked');
|
return trans_choice('mail.new_item_checked', $this->checkout_qty);
|
||||||
}
|
}
|
||||||
|
|
||||||
// we shouldn't get here but let's send a default message just in case
|
// we shouldn't get here but let's send a default message just in case
|
||||||
|
|||||||
@@ -138,14 +138,15 @@ class CheckoutAssetMail extends Mailable
|
|||||||
private function introductionLine(): string
|
private function introductionLine(): string
|
||||||
{
|
{
|
||||||
if ($this->firstTimeSending && $this->target instanceof Location) {
|
if ($this->firstTimeSending && $this->target instanceof Location) {
|
||||||
return trans('mail.new_item_checked_location', ['location' => $this->target->name ]);
|
return trans_choice('mail.new_item_checked_location', 1, ['location' => $this->target->name]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->firstTimeSending && $this->requiresAcceptance()) {
|
if ($this->firstTimeSending && $this->requiresAcceptance()) {
|
||||||
return trans('mail.new_item_checked_with_acceptance');
|
return trans_choice('mail.new_item_checked_with_acceptance', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($this->firstTimeSending && !$this->requiresAcceptance()) {
|
if ($this->firstTimeSending && !$this->requiresAcceptance()) {
|
||||||
return trans('mail.new_item_checked');
|
return trans_choice('mail.new_item_checked', 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->firstTimeSending && $this->requiresAcceptance()) {
|
if (!$this->firstTimeSending && $this->requiresAcceptance()) {
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ class CheckoutComponentMail extends Mailable
|
|||||||
$this->note = $note;
|
$this->note = $note;
|
||||||
$this->target = $checkedOutTo;
|
$this->target = $checkedOutTo;
|
||||||
$this->acceptance = $acceptance;
|
$this->acceptance = $acceptance;
|
||||||
$this->qty = $component->assets->first()?->pivot?->assigned_qty;
|
$this->qty = $component->checkout_qty;
|
||||||
|
|
||||||
$this->settings = Setting::getSettings();
|
$this->settings = Setting::getSettings();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -309,27 +309,6 @@ class Accessory extends SnipeModel
|
|||||||
return $this->category->require_acceptance ?? false;
|
return $this->category->require_acceptance ?? false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks for a category-specific EULA, and if that doesn't exist,
|
|
||||||
* checks for a settings level EULA
|
|
||||||
*
|
|
||||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
||||||
* @since [v3.0]
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getEula()
|
|
||||||
{
|
|
||||||
|
|
||||||
if ($this->category->eula_text) {
|
|
||||||
return Helper::parseEscapedMarkedown($this->category->eula_text);
|
|
||||||
} elseif ((Setting::getSettings()->default_eula_text) && ($this->category->use_default_eula == '1')) {
|
|
||||||
return Helper::parseEscapedMarkedown(Setting::getSettings()->default_eula_text);
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check how many items within an accessory are checked out
|
* Check how many items within an accessory are checked out
|
||||||
*
|
*
|
||||||
@@ -378,6 +357,10 @@ class Accessory extends SnipeModel
|
|||||||
|
|
||||||
$accessory_checkout->limit(1)->delete();
|
$accessory_checkout->limit(1)->delete();
|
||||||
}
|
}
|
||||||
|
public function totalCostSum() {
|
||||||
|
|
||||||
|
return $this->purchase_cost !== null ? $this->qty * $this->purchase_cost : null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* -----------------------------------------------
|
* -----------------------------------------------
|
||||||
|
|||||||
@@ -161,7 +161,6 @@ class Asset extends Depreciable
|
|||||||
'eol_explicit',
|
'eol_explicit',
|
||||||
'last_audit_date',
|
'last_audit_date',
|
||||||
'next_audit_date',
|
'next_audit_date',
|
||||||
'asset_eol_date',
|
|
||||||
'last_checkin',
|
'last_checkin',
|
||||||
'last_checkout',
|
'last_checkout',
|
||||||
];
|
];
|
||||||
@@ -824,21 +823,26 @@ class Asset extends Depreciable
|
|||||||
* @since [v2.0]
|
* @since [v2.0]
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*/
|
*/
|
||||||
public static function getExpiringWarrantee($days = 30)
|
public static function getExpiringWarrantyOrEol($days = 30)
|
||||||
{
|
{
|
||||||
$days = (is_null($days)) ? 30 : $days;
|
|
||||||
|
return self::where('archived', '=', '0')
|
||||||
return self::where('archived', '=', '0') // this can stay for right now, as `archived` defaults to 0 at the db level, but should probably be replaced with assetstatus->archived?
|
|
||||||
->whereNotNull('warranty_months')
|
|
||||||
->whereNotNull('purchase_date')
|
|
||||||
->whereNull('deleted_at')
|
|
||||||
->NotArchived()
|
->NotArchived()
|
||||||
->whereRaw(
|
->whereNull('deleted_at')
|
||||||
'DATE_ADD(`purchase_date`, INTERVAL `warranty_months` MONTH) <= DATE_ADD(NOW(), INTERVAL '
|
->where(function ($query) use ($days) {
|
||||||
. $days
|
// Check for manual asset EOL first
|
||||||
. ' DAY) AND DATE_ADD(`purchase_date`, INTERVAL `warranty_months` MONTH) > NOW()'
|
$query->where(function ($query) use ($days) {
|
||||||
)
|
$query->whereNotNull('asset_eol_date')
|
||||||
->orderByRaw('DATE_ADD(`purchase_date`,INTERVAL `warranty_months` MONTH)')
|
->whereBetween('asset_eol_date', [Carbon::now(), Carbon::now()->addDays($days)]);
|
||||||
|
// Otherwise use the warranty months + purchase date + threshold
|
||||||
|
})->orWhere(function ($query) use ($days) {
|
||||||
|
$query->whereNotNull('purchase_date')
|
||||||
|
->whereNotNull('warranty_months')
|
||||||
|
->whereBetween('purchase_date', [Carbon::now(), Carbon::now()->addMonths('assets.warranty_months')->addDays($days)]);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
->orderBy('asset_eol_date', 'ASC')
|
||||||
|
->orderBy('purchase_date', 'ASC')
|
||||||
->get();
|
->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1019,31 +1023,6 @@ class Asset extends Depreciable
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks for a category-specific EULA, and if that doesn't exist,
|
|
||||||
* checks for a settings level EULA
|
|
||||||
*
|
|
||||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
||||||
* @since [v4.0]
|
|
||||||
* @return string | false
|
|
||||||
*/
|
|
||||||
public function getEula()
|
|
||||||
{
|
|
||||||
|
|
||||||
if (($this->model) && ($this->model->category)) {
|
|
||||||
if (($this->model->category->eula_text) && ($this->model->category->use_default_eula == 0)) {
|
|
||||||
return Helper::parseEscapedMarkedown($this->model->category->eula_text);
|
|
||||||
} elseif ($this->model->category->use_default_eula == 1) {
|
|
||||||
return Helper::parseEscapedMarkedown(Setting::getSettings()->default_eula_text);
|
|
||||||
} else {
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
public function getComponentCost()
|
public function getComponentCost()
|
||||||
{
|
{
|
||||||
$cost = 0;
|
$cost = 0;
|
||||||
@@ -1893,6 +1872,30 @@ class Asset extends Depreciable
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($fieldname == 'jobtitle') {
|
||||||
|
$query->where(function ($query) use ($search_val) {
|
||||||
|
if (is_array($search_val)) {
|
||||||
|
$query->whereHasMorph(
|
||||||
|
'assignedTo',
|
||||||
|
[User::class],
|
||||||
|
function ($query) use ($search_val) {
|
||||||
|
$query->whereIn('users.jobtitle', $search_val);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
$query->whereHasMorph(
|
||||||
|
'assignedTo',
|
||||||
|
[User::class],
|
||||||
|
function ($query) use ($search_val) {
|
||||||
|
$query->where(function ($query) use ($search_val) {
|
||||||
|
$query->where('users.jobtitle', 'LIKE', '%' . $search_val . '%');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* THIS CLUNKY BIT IS VERY IMPORTANT
|
* THIS CLUNKY BIT IS VERY IMPORTANT
|
||||||
@@ -1917,7 +1920,7 @@ class Asset extends Depreciable
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (($fieldname!='category') && ($fieldname!='model_number') && ($fieldname!='rtd_location') && ($fieldname!='location') && ($fieldname!='supplier')
|
if (($fieldname!='category') && ($fieldname!='model_number') && ($fieldname!='rtd_location') && ($fieldname!='location') && ($fieldname!='supplier')
|
||||||
&& ($fieldname!='status_label') && ($fieldname!='assigned_to') && ($fieldname!='model') && ($fieldname!='company') && ($fieldname!='manufacturer')
|
&& ($fieldname!='status_label') && ($fieldname!='assigned_to') && ($fieldname!='model') && ($fieldname!='jobtitle') && ($fieldname!='company') && ($fieldname!='manufacturer')
|
||||||
) {
|
) {
|
||||||
$query->where('assets.'.$fieldname, 'LIKE', '%' . $search_val . '%');
|
$query->where('assets.'.$fieldname, 'LIKE', '%' . $search_val . '%');
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,11 +2,14 @@
|
|||||||
|
|
||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
|
use App\Helpers\Helper;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
use Illuminate\Notifications\Notifiable;
|
use Illuminate\Notifications\Notifiable;
|
||||||
|
use TCPDF;
|
||||||
|
|
||||||
class CheckoutAcceptance extends Model
|
class CheckoutAcceptance extends Model
|
||||||
{
|
{
|
||||||
@@ -129,8 +132,7 @@ class CheckoutAcceptance extends Model
|
|||||||
/**
|
/**
|
||||||
* Filter checkout acceptences by the user
|
* Filter checkout acceptences by the user
|
||||||
*
|
*
|
||||||
* @param Illuminate\Database\Eloquent\Builder $query
|
* @param User $user
|
||||||
* @param User $user
|
|
||||||
* @return \Illuminate\Database\Eloquent\Builder
|
* @return \Illuminate\Database\Eloquent\Builder
|
||||||
*/
|
*/
|
||||||
public function scopeForUser(Builder $query, User $user)
|
public function scopeForUser(Builder $query, User $user)
|
||||||
@@ -141,11 +143,111 @@ class CheckoutAcceptance extends Model
|
|||||||
/**
|
/**
|
||||||
* Filter to only get pending acceptances
|
* Filter to only get pending acceptances
|
||||||
*
|
*
|
||||||
* @param Illuminate\Database\Eloquent\Builder $query
|
|
||||||
* @return \Illuminate\Database\Eloquent\Builder
|
* @return \Illuminate\Database\Eloquent\Builder
|
||||||
*/
|
*/
|
||||||
public function scopePending(Builder $query)
|
public function scopePending(Builder $query)
|
||||||
{
|
{
|
||||||
return $query->whereNull('accepted_at')->whereNull('declined_at');
|
return $query->whereNull('accepted_at')->whereNull('declined_at');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function scopeDeclined(Builder $query)
|
||||||
|
{
|
||||||
|
return $query->whereNull('accepted_at')->whereNotNull('declined_at');
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function displayCheckoutableType(): Attribute
|
||||||
|
{
|
||||||
|
return Attribute:: make(
|
||||||
|
get: fn(mixed $value) => strtolower(str_replace('App\Models\\', '', $this->checkoutable_type)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function generateAcceptancePdf($data, $pdf_filename) {
|
||||||
|
|
||||||
|
// set some language dependent data:
|
||||||
|
$lg = Array();
|
||||||
|
$lg['a_meta_charset'] = 'UTF-8';
|
||||||
|
$lg['w_page'] = 'page';
|
||||||
|
|
||||||
|
$pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false);
|
||||||
|
$pdf->setRTL(false);
|
||||||
|
$pdf->setLanguageArray($lg);
|
||||||
|
$pdf->SetFontSubsetting(true);
|
||||||
|
$pdf->SetCreator('Snipe-IT Asset Management System');
|
||||||
|
$pdf->SetAuthor($data['assigned_to']);
|
||||||
|
$pdf->SetTitle('Asset Acceptance: '.$data['item_tag']);
|
||||||
|
$pdf->SetSubject('Asset Acceptance: '.$data['item_tag']);
|
||||||
|
$pdf->SetKeywords('Snipe-IT, assets, acceptance, eula, tos');
|
||||||
|
$pdf->SetFont('dejavusans', '', 8, '', true);
|
||||||
|
$pdf->SetPrintHeader(false);
|
||||||
|
$pdf->SetPrintFooter(false);
|
||||||
|
|
||||||
|
$pdf->AddPage();
|
||||||
|
if ($data['logo'] != null) {
|
||||||
|
$pdf->writeHTML('<img src="'.$data['logo'].'">', true, 0, true, 0, '');
|
||||||
|
} else {
|
||||||
|
$pdf->writeHTML('<h3>'.$data['site_name'].'</h3><br /><br />', true, 0, true, 0, 'C');
|
||||||
|
}
|
||||||
|
|
||||||
|
$pdf->Ln();
|
||||||
|
$pdf->writeHTML(trans('general.date') . ': ' . Helper::getFormattedDateObject(now(), 'datetime', false), true, 0, true, 0, '');
|
||||||
|
|
||||||
|
if ($data['company_name'] != null) {
|
||||||
|
$pdf->writeHTML(trans('general.company') . ': ' . e($data['company_name']), true, 0, true, 0, '');
|
||||||
|
}
|
||||||
|
if ($data['item_tag'] != null) {
|
||||||
|
$pdf->writeHTML(trans('general.asset_tag') . ': ' . e($data['item_tag']), true, 0, true, 0, '');
|
||||||
|
}
|
||||||
|
if ($data['item_name'] != null) {
|
||||||
|
$pdf->writeHTML(trans('general.name') . ': ' . e($data['item_name']), true, 0, true, 0, '');
|
||||||
|
}
|
||||||
|
if ($data['item_model'] != null) {
|
||||||
|
$pdf->writeHTML(trans('general.asset_model') . ': ' . e($data['item_model']), true, 0, true, 0, '');
|
||||||
|
}
|
||||||
|
if ($data['item_serial'] != null) {
|
||||||
|
$pdf->writeHTML(trans('admin/hardware/form.serial').': '.e($data['item_serial']), true, 0, true, 0, '');
|
||||||
|
}
|
||||||
|
if (($data['qty'] != null) && ($data['qty'] > 1)) {
|
||||||
|
$pdf->writeHTML(trans('general.qty').': '.e($data['qty']), true, 0, true, 0, '');
|
||||||
|
}
|
||||||
|
$pdf->writeHTML(trans('general.assignee').': '.e($data['assigned_to']), true, 0, true, 0, '');
|
||||||
|
$pdf->Ln();
|
||||||
|
$pdf->writeHTML('<hr>', true, 0, true, 0, '');
|
||||||
|
|
||||||
|
|
||||||
|
// Break the EULA into lines based on newlines, and check each line for RTL or CJK characters
|
||||||
|
$eula_lines = preg_split("/\r\n|\n|\r/", $data['eula']);
|
||||||
|
|
||||||
|
foreach ($eula_lines as $eula_line) {
|
||||||
|
Helper::hasRtl($eula_line) ? $pdf->setRTL(true) : $pdf->setRTL(false);
|
||||||
|
Helper::isCjk($eula_line) ? $pdf->SetFont('cid0cs', '', 9) : $pdf->SetFont('dejavusans', '', 8, '', true);
|
||||||
|
|
||||||
|
$pdf->writeHTML(Helper::parseEscapedMarkedown($eula_line), true, 0, true, 0, '');
|
||||||
|
}
|
||||||
|
$pdf->Ln();
|
||||||
|
$pdf->Ln();
|
||||||
|
$pdf->setRTL(false);
|
||||||
|
$pdf->Ln();
|
||||||
|
|
||||||
|
if ($data['signature'] != null) {
|
||||||
|
$pdf->writeHTML('<img src="'.$data['signature'].'">', true, 0, true, 0, '');
|
||||||
|
$pdf->writeHTML('<hr>', true, 0, true, 0, '');
|
||||||
|
$pdf->writeHTML(e($data['assigned_to']), true, 0, true, 0, 'C');
|
||||||
|
$pdf->Ln();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($data['note'] != null) {
|
||||||
|
Helper::isCjk($data['note']) ? $pdf->SetFont('cid0cs', '', 9) : $pdf->SetFont('dejavusans', '', 8, '', true);
|
||||||
|
$pdf->writeHTML(trans('general.notes') . ': ' . e($data['note']), true, 0, true, 0, '');
|
||||||
|
$pdf->Ln();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$pdf->writeHTML(trans('general.assigned_date').': '.e($data['check_out_date']), true, 0, true, 0, '');
|
||||||
|
$pdf->writeHTML(trans('general.accepted_date').': '.e($data['accepted_date']), true, 0, true, 0, '');
|
||||||
|
|
||||||
|
return $pdf->Output($pdf_filename, 'S');
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -217,24 +217,6 @@ class Component extends SnipeModel
|
|||||||
return $this->category->require_acceptance;
|
return $this->category->require_acceptance;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks for a category-specific EULA, and if that doesn't exist,
|
|
||||||
* checks for a settings level EULA
|
|
||||||
*
|
|
||||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
||||||
* @since [v4.0]
|
|
||||||
* @return string | false
|
|
||||||
*/
|
|
||||||
public function getEula()
|
|
||||||
{
|
|
||||||
if ($this->category->eula_text) {
|
|
||||||
return Helper::parseEscapedMarkedown($this->category->eula_text);
|
|
||||||
} elseif ((Setting::getSettings()->default_eula_text) && ($this->category->use_default_eula == '1')) {
|
|
||||||
return Helper::parseEscapedMarkedown(Setting::getSettings()->default_eula_text);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Establishes the component -> action logs relationship
|
* Establishes the component -> action logs relationship
|
||||||
@@ -306,7 +288,10 @@ class Component extends SnipeModel
|
|||||||
return $this->qty - $this->numCheckedOut();
|
return $this->qty - $this->numCheckedOut();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function totalCostSum() {
|
||||||
|
|
||||||
|
return $this->purchase_cost !== null ? $this->qty * $this->purchase_cost : null;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* -----------------------------------------------
|
* -----------------------------------------------
|
||||||
* BEGIN MUTATORS
|
* BEGIN MUTATORS
|
||||||
|
|||||||
@@ -285,25 +285,6 @@ class Consumable extends SnipeModel
|
|||||||
return $this->category->require_acceptance;
|
return $this->category->require_acceptance;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks for a category-specific EULA, and if that doesn't exist,
|
|
||||||
* checks for a settings level EULA
|
|
||||||
*
|
|
||||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
||||||
* @since [v4.0]
|
|
||||||
* @return string | false
|
|
||||||
*/
|
|
||||||
public function getEula()
|
|
||||||
{
|
|
||||||
if ($this->category->eula_text) {
|
|
||||||
return Helper::parseEscapedMarkedown($this->category->eula_text);
|
|
||||||
} elseif ((Setting::getSettings()->default_eula_text) && ($this->category->use_default_eula == '1')) {
|
|
||||||
return Helper::parseEscapedMarkedown(Setting::getSettings()->default_eula_text);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check how many items within a consumable are checked out
|
* Check how many items within a consumable are checked out
|
||||||
*
|
*
|
||||||
@@ -331,7 +312,10 @@ class Consumable extends SnipeModel
|
|||||||
|
|
||||||
return $remaining;
|
return $remaining;
|
||||||
}
|
}
|
||||||
|
public function totalCostSum() {
|
||||||
|
|
||||||
|
return $this->purchase_cost !== null ? $this->qty * $this->purchase_cost : null;
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* -----------------------------------------------
|
* -----------------------------------------------
|
||||||
* BEGIN MUTATORS
|
* BEGIN MUTATORS
|
||||||
|
|||||||
@@ -78,6 +78,13 @@ class Ldap extends Model
|
|||||||
if (env('LDAPTLS_CACERT')) {
|
if (env('LDAPTLS_CACERT')) {
|
||||||
putenv('LDAPTLS_CACERT='.env('LDAPTLS_CACERT'));
|
putenv('LDAPTLS_CACERT='.env('LDAPTLS_CACERT'));
|
||||||
}
|
}
|
||||||
|
// You _were_ allowed to do this *after* the ldap_connect() in some versions of PHP, but it's not how they want
|
||||||
|
// you to anymore, and it seems to not work at all in later PHP versions.
|
||||||
|
if (Setting::getSettings()->ldap_client_tls_cert && Setting::getSettings()->ldap_client_tls_key) {
|
||||||
|
ldap_set_option(null, LDAP_OPT_X_TLS_CERTFILE, Setting::get_client_side_cert_path());
|
||||||
|
ldap_set_option(null, LDAP_OPT_X_TLS_KEYFILE, Setting::get_client_side_key_path());
|
||||||
|
}
|
||||||
|
|
||||||
$connection = @ldap_connect($ldap_host);
|
$connection = @ldap_connect($ldap_host);
|
||||||
|
|
||||||
if (! $connection) {
|
if (! $connection) {
|
||||||
@@ -89,11 +96,6 @@ class Ldap extends Model
|
|||||||
ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, $ldap_version);
|
ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION, $ldap_version);
|
||||||
ldap_set_option($connection, LDAP_OPT_NETWORK_TIMEOUT, 20);
|
ldap_set_option($connection, LDAP_OPT_NETWORK_TIMEOUT, 20);
|
||||||
|
|
||||||
if (Setting::getSettings()->ldap_client_tls_cert && Setting::getSettings()->ldap_client_tls_key) {
|
|
||||||
ldap_set_option(null, LDAP_OPT_X_TLS_CERTFILE, Setting::get_client_side_cert_path());
|
|
||||||
ldap_set_option(null, LDAP_OPT_X_TLS_KEYFILE, Setting::get_client_side_key_path());
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($ldap_use_tls=='1') {
|
if ($ldap_use_tls=='1') {
|
||||||
ldap_start_tls($connection);
|
ldap_start_tls($connection);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ use Illuminate\Support\Facades\DB;
|
|||||||
use Illuminate\Support\Facades\Session;
|
use Illuminate\Support\Facades\Session;
|
||||||
use Watson\Validating\ValidatingTrait;
|
use Watson\Validating\ValidatingTrait;
|
||||||
|
|
||||||
|
|
||||||
class License extends Depreciable
|
class License extends Depreciable
|
||||||
{
|
{
|
||||||
use HasFactory;
|
use HasFactory;
|
||||||
@@ -296,6 +297,38 @@ class License extends Depreciable
|
|||||||
}
|
}
|
||||||
$this->attributes['termination_date'] = $value;
|
$this->attributes['termination_date'] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function isInactive(): bool
|
||||||
|
{
|
||||||
|
$day = now()->startOfDay();
|
||||||
|
|
||||||
|
$expired = $this->expiration_date && $this->asDateTime($this->expiration_date)->startofDay()->lessThanOrEqualTo($day);
|
||||||
|
|
||||||
|
$terminated = $this->termination_date && $this->asDateTime($this->termination_date)->startofDay()->lessThanOrEqualTo($day);
|
||||||
|
|
||||||
|
|
||||||
|
return $this->isExpired() || $this->isTerminated();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isExpired(): bool
|
||||||
|
{
|
||||||
|
$day = now()->startOfDay();
|
||||||
|
|
||||||
|
$expired = $this->expiration_date && $this->asDateTime($this->expiration_date)->startofDay()->lessThanOrEqualTo($day);
|
||||||
|
|
||||||
|
return $expired;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function isTerminated(): bool
|
||||||
|
{
|
||||||
|
$day = now()->startOfDay();
|
||||||
|
|
||||||
|
$terminated = $this->termination_date && $this->asDateTime($this->termination_date)->startofDay()->lessThanOrEqualTo($day);
|
||||||
|
|
||||||
|
|
||||||
|
return $terminated;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets free_seat_count attribute
|
* Sets free_seat_count attribute
|
||||||
*
|
*
|
||||||
@@ -375,27 +408,6 @@ class License extends Depreciable
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks for a category-specific EULA, and if that doesn't exist,
|
|
||||||
* checks for a settings level EULA
|
|
||||||
*
|
|
||||||
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
||||||
* @since [v4.0]
|
|
||||||
* @return string | false
|
|
||||||
*/
|
|
||||||
public function getEula()
|
|
||||||
{
|
|
||||||
if ($this->category) {
|
|
||||||
if ($this->category->eula_text) {
|
|
||||||
return Helper::parseEscapedMarkedown($this->category->eula_text);
|
|
||||||
} elseif ($this->category->use_default_eula == '1') {
|
|
||||||
return Helper::parseEscapedMarkedown(Setting::getSettings()->default_eula_text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Establishes the license -> assigned user relationship
|
* Establishes the license -> assigned user relationship
|
||||||
@@ -596,7 +608,7 @@ class License extends Depreciable
|
|||||||
{
|
{
|
||||||
$count = 0;
|
$count = 0;
|
||||||
if (!$license->reassignable) {
|
if (!$license->reassignable) {
|
||||||
$count = licenseSeat::query()->where('unreassignable_seat', '=', true)
|
$count = LicenseSeat::query()->where('unreassignable_seat', '=', true)
|
||||||
->where('license_id', '=', $license->id)
|
->where('license_id', '=', $license->id)
|
||||||
->count();
|
->count();
|
||||||
}
|
}
|
||||||
@@ -695,26 +707,80 @@ class License extends Depreciable
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns expiring licenses
|
* Returns expiring licenses.
|
||||||
*
|
*
|
||||||
* @todo should refactor. I don't like get() in model methods
|
* This checks if:
|
||||||
|
*
|
||||||
|
* 1) The license has not been deleted
|
||||||
|
* 2) The expiration date is between now and the number of days specified
|
||||||
|
* 3) There is an expiration date set and the termination date has not passed
|
||||||
|
* 4) The license termination date is null or has not passed
|
||||||
*
|
*
|
||||||
* @author A. Gianotto <snipe@snipe.net>
|
* @author A. Gianotto <snipe@snipe.net>
|
||||||
* @since [v1.0]
|
* @since [v1.0]
|
||||||
* @return \Illuminate\Database\Eloquent\Relations\Relation
|
* @return \Illuminate\Database\Eloquent\Relations\Relation
|
||||||
|
* @see \App\Console\Commands\SendExpiringLicenseNotifications
|
||||||
*/
|
*/
|
||||||
public static function getExpiringLicenses($days = 60)
|
public static function getExpiringLicenses($days = 60)
|
||||||
{
|
{
|
||||||
$days = (is_null($days)) ? 60 : $days;
|
|
||||||
|
|
||||||
return self::whereNotNull('expiration_date')
|
return self::whereNull('licenses.deleted_at')
|
||||||
->whereNull('deleted_at')
|
|
||||||
->whereRaw('DATE_SUB(`expiration_date`,INTERVAL '.$days.' DAY) <= DATE(NOW()) ')
|
// The termination date is null or within range
|
||||||
->where('expiration_date', '>', date('Y-m-d'))
|
->where(function ($query) use ($days) {
|
||||||
|
$query->whereNull('termination_date')
|
||||||
|
->orWhereBetween('termination_date', [Carbon::now(), Carbon::now()->addDays($days)]);
|
||||||
|
})
|
||||||
|
->where(function ($query) use ($days) {
|
||||||
|
$query->whereNotNull('expiration_date')
|
||||||
|
// Handle expired licenses without termination dates
|
||||||
|
->where(function ($query) use ($days) {
|
||||||
|
$query->whereNull('termination_date')
|
||||||
|
->whereBetween('expiration_date', [Carbon::now(), Carbon::now()->addDays($days)]);
|
||||||
|
})
|
||||||
|
|
||||||
|
// Handle expired licenses with termination dates in the future
|
||||||
|
->orWhere(function ($query) use ($days) {
|
||||||
|
$query->whereBetween('termination_date', [Carbon::now(), Carbon::now()->addDays($days)]);
|
||||||
|
});
|
||||||
|
})
|
||||||
->orderBy('expiration_date', 'ASC')
|
->orderBy('expiration_date', 'ASC')
|
||||||
|
->orderBy('termination_date', 'ASC')
|
||||||
->get();
|
->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function scopeActiveLicenses($query)
|
||||||
|
{
|
||||||
|
|
||||||
|
return $query->whereNull('licenses.deleted_at')
|
||||||
|
|
||||||
|
// The termination date is null or within range
|
||||||
|
->where(function ($query) {
|
||||||
|
$query->whereNull('termination_date')
|
||||||
|
->orWhereDate('termination_date', '>', [Carbon::now()]);
|
||||||
|
})
|
||||||
|
->where(function ($query) {
|
||||||
|
$query->whereNull('expiration_date')
|
||||||
|
->orWhereDate('expiration_date', '>', [Carbon::now()]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function scopeExpiredLicenses($query)
|
||||||
|
{
|
||||||
|
|
||||||
|
return $query->whereNull('licenses.deleted_at')
|
||||||
|
|
||||||
|
// The termination date is null or within range
|
||||||
|
->where(function ($query) {
|
||||||
|
$query->whereNull('termination_date')
|
||||||
|
->orWhereDate('termination_date', '<=', [Carbon::now()]);
|
||||||
|
})
|
||||||
|
->orWhere(function ($query) {
|
||||||
|
$query->whereNull('expiration_date')
|
||||||
|
->orWhereDate('expiration_date', '<=', [Carbon::now()]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query builder scope to order on manufacturer
|
* Query builder scope to order on manufacturer
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ use App\Models\Traits\CompanyableChildTrait;
|
|||||||
use App\Notifications\CheckinLicenseNotification;
|
use App\Notifications\CheckinLicenseNotification;
|
||||||
use App\Notifications\CheckoutLicenseNotification;
|
use App\Notifications\CheckoutLicenseNotification;
|
||||||
use App\Presenters\Presentable;
|
use App\Presenters\Presentable;
|
||||||
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||||
use Illuminate\Database\Eloquent\SoftDeletes;
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
||||||
|
|
||||||
@@ -64,6 +65,21 @@ class LicenseSeat extends SnipeModel implements ICompanyableChild
|
|||||||
return $this->license->getEula();
|
return $this->license->getEula();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected function name(): Attribute
|
||||||
|
{
|
||||||
|
return Attribute:: make(
|
||||||
|
get: fn(mixed $value) => $this->license->name,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function displayName(): Attribute
|
||||||
|
{
|
||||||
|
return Attribute:: make(
|
||||||
|
get: fn(mixed $value) => $this->license->name,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Establishes the seat -> license relationship
|
* Establishes the seat -> license relationship
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ class Location extends SnipeModel
|
|||||||
'company_id' => 'integer',
|
'company_id' => 'integer',
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Whether the model should inject its identifier to the unique
|
* Whether the model should inject its identifier to the unique
|
||||||
* validation rules before attempting validation. If this property
|
* validation rules before attempting validation. If this property
|
||||||
@@ -113,13 +114,19 @@ class Location extends SnipeModel
|
|||||||
{
|
{
|
||||||
|
|
||||||
return Gate::allows('delete', $this)
|
return Gate::allows('delete', $this)
|
||||||
&& ($this->assets_count == 0)
|
&& ($this->deleted_at == '')
|
||||||
&& ($this->assigned_assets_count == 0)
|
&& (($this->assets_count ?? $this->assets()->count()) === 0)
|
||||||
&& ($this->children_count == 0)
|
&& (($this->assigned_assets_count ?? $this->assignedAssets()->count()) === 0)
|
||||||
&& ($this->accessories_count == 0)
|
&& (($this->accessories_count ?? $this->accessories()->count()) === 0)
|
||||||
&& ($this->users_count == 0);
|
&& (($this->assigned_accessories_count ?? $this->assignedAccessories()->count()) === 0)
|
||||||
|
&& (($this->children_count ?? $this->children()->count()) === 0)
|
||||||
|
&& (($this->components_count ?? $this->components()->count()) === 0)
|
||||||
|
&& (($this->consumables_count ?? $this->consumables()->count()) === 0)
|
||||||
|
&& (($this->rtd_assets_count ?? $this->rtd_assets()->count()) === 0)
|
||||||
|
&& (($this->users_count ?? $this->users()->count()) === 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Establishes the user -> location relationship
|
* Establishes the user -> location relationship
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -3,8 +3,10 @@
|
|||||||
namespace App\Models;
|
namespace App\Models;
|
||||||
|
|
||||||
use App\Helpers\Helper;
|
use App\Helpers\Helper;
|
||||||
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Database\Eloquent\Casts\Attribute;
|
use Illuminate\Database\Eloquent\Casts\Attribute;
|
||||||
use Illuminate\Database\Eloquent\Model;
|
use Illuminate\Database\Eloquent\Model;
|
||||||
|
use Illuminate\Support\Facades\Request;
|
||||||
|
|
||||||
class SnipeModel extends Model
|
class SnipeModel extends Model
|
||||||
{
|
{
|
||||||
@@ -156,6 +158,20 @@ class SnipeModel extends Model
|
|||||||
$this->attributes['status_id'] = $value;
|
$this->attributes['status_id'] = $value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies offset (from request) and limit to query.
|
||||||
|
*
|
||||||
|
* @param Builder $query
|
||||||
|
* @param int $total
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function scopeApplyOffsetAndLimit(Builder $query, int $total)
|
||||||
|
{
|
||||||
|
$offset = (Request::input('offset') > $total) ? $total : app('api_offset_value');
|
||||||
|
$limit = app('api_limit_value');
|
||||||
|
|
||||||
|
$query->skip($offset)->take($limit);
|
||||||
|
}
|
||||||
|
|
||||||
protected function displayName(): Attribute
|
protected function displayName(): Attribute
|
||||||
{
|
{
|
||||||
@@ -164,5 +180,27 @@ class SnipeModel extends Model
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getEula()
|
||||||
|
{
|
||||||
|
|
||||||
|
// This is - for now - only for assets, where the asset model is the thing tied to the category
|
||||||
|
if (($this->model) && ($this->model->category)) {
|
||||||
|
if (($this->model->category->eula_text) && ($this->model->category->use_default_eula == 0)) {
|
||||||
|
return $this->model->category->eula_text;
|
||||||
|
} elseif ($this->model->category->use_default_eula == 1) {
|
||||||
|
return Setting::getSettings()->default_eula_text;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// For everything else, just check the category for EULA info
|
||||||
|
} elseif (($this->category) && ($this->category->eula_text)) {
|
||||||
|
return $this->category->eula_text;
|
||||||
|
} elseif ((Setting::getSettings()->default_eula_text) && (($this->category) && ($this->category->use_default_eula == '1'))) {
|
||||||
|
return Setting::getSettings()->default_eula_text;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
namespace App\Notifications;
|
namespace App\Notifications;
|
||||||
|
|
||||||
|
use AllowDynamicProperties;
|
||||||
use App\Helpers\Helper;
|
use App\Helpers\Helper;
|
||||||
use App\Models\Setting;
|
use App\Models\Setting;
|
||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
@@ -10,7 +11,7 @@ use Illuminate\Notifications\Messages\MailMessage;
|
|||||||
use Illuminate\Notifications\Messages\SlackMessage;
|
use Illuminate\Notifications\Messages\SlackMessage;
|
||||||
use Illuminate\Notifications\Notification;
|
use Illuminate\Notifications\Notification;
|
||||||
|
|
||||||
class AcceptanceAssetAcceptedNotification extends Notification
|
#[AllowDynamicProperties] class AcceptanceAssetAcceptedNotification extends Notification
|
||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
|
|
||||||
@@ -22,15 +23,18 @@ class AcceptanceAssetAcceptedNotification extends Notification
|
|||||||
public function __construct($params)
|
public function __construct($params)
|
||||||
{
|
{
|
||||||
$this->item_tag = $params['item_tag'];
|
$this->item_tag = $params['item_tag'];
|
||||||
|
$this->item_name = $params['item_name'];
|
||||||
$this->item_model = $params['item_model'];
|
$this->item_model = $params['item_model'];
|
||||||
$this->item_serial = $params['item_serial'];
|
$this->item_serial = $params['item_serial'];
|
||||||
$this->item_status = $params['item_status'];
|
$this->item_status = $params['item_status'];
|
||||||
$this->accepted_date = Helper::getFormattedDateObject($params['accepted_date'], 'date', false);
|
$this->accepted_date = Helper::getFormattedDateObject($params['accepted_date'], 'datetime', false);
|
||||||
$this->assigned_to = $params['assigned_to'];
|
$this->assigned_to = $params['assigned_to'];
|
||||||
$this->note = $params['note'];
|
|
||||||
$this->company_name = $params['company_name'];
|
$this->company_name = $params['company_name'];
|
||||||
$this->admin = $params['admin'] ?? null;
|
|
||||||
$this->settings = Setting::getSettings();
|
$this->settings = Setting::getSettings();
|
||||||
|
$this->file = $params['file'] ?? null;
|
||||||
|
$this->qty = $params['qty'] ?? null;
|
||||||
|
$this->note = $params['note'] ?? null;
|
||||||
|
$this->admin = $params['admin'] ?? null;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,6 +69,7 @@ class AcceptanceAssetAcceptedNotification extends Notification
|
|||||||
$message = (new MailMessage)->markdown('notifications.markdown.asset-acceptance',
|
$message = (new MailMessage)->markdown('notifications.markdown.asset-acceptance',
|
||||||
[
|
[
|
||||||
'item_tag' => $this->item_tag,
|
'item_tag' => $this->item_tag,
|
||||||
|
'item_name' => $this->item_name,
|
||||||
'item_model' => $this->item_model,
|
'item_model' => $this->item_model,
|
||||||
'item_serial' => $this->item_serial,
|
'item_serial' => $this->item_serial,
|
||||||
'item_status' => $this->item_status,
|
'item_status' => $this->item_status,
|
||||||
@@ -72,8 +77,9 @@ class AcceptanceAssetAcceptedNotification extends Notification
|
|||||||
'accepted_date' => $this->accepted_date,
|
'accepted_date' => $this->accepted_date,
|
||||||
'assigned_to' => $this->assigned_to,
|
'assigned_to' => $this->assigned_to,
|
||||||
'company_name' => $this->company_name,
|
'company_name' => $this->company_name,
|
||||||
'intro_text' => trans('mail.acceptance_asset_accepted'),
|
|
||||||
'admin' => $this->admin,
|
'admin' => $this->admin,
|
||||||
|
'qty' => $this->qty,
|
||||||
|
'intro_text' => trans('mail.acceptance_asset_accepted'),
|
||||||
])
|
])
|
||||||
->subject(trans('mail.acceptance_asset_accepted'));
|
->subject(trans('mail.acceptance_asset_accepted'));
|
||||||
|
|
||||||
|
|||||||
@@ -2,13 +2,14 @@
|
|||||||
|
|
||||||
namespace App\Notifications;
|
namespace App\Notifications;
|
||||||
|
|
||||||
|
use AllowDynamicProperties;
|
||||||
use App\Helpers\Helper;
|
use App\Helpers\Helper;
|
||||||
use App\Models\Setting;
|
use App\Models\Setting;
|
||||||
use Illuminate\Bus\Queueable;
|
use Illuminate\Bus\Queueable;
|
||||||
use Illuminate\Notifications\Messages\MailMessage;
|
use Illuminate\Notifications\Messages\MailMessage;
|
||||||
use Illuminate\Notifications\Notification;
|
use Illuminate\Notifications\Notification;
|
||||||
|
|
||||||
class AcceptanceAssetAcceptedToUserNotification extends Notification
|
#[AllowDynamicProperties] class AcceptanceAssetAcceptedToUserNotification extends Notification
|
||||||
{
|
{
|
||||||
use Queueable;
|
use Queueable;
|
||||||
|
|
||||||
@@ -20,16 +21,18 @@ class AcceptanceAssetAcceptedToUserNotification extends Notification
|
|||||||
public function __construct($params)
|
public function __construct($params)
|
||||||
{
|
{
|
||||||
$this->item_tag = $params['item_tag'];
|
$this->item_tag = $params['item_tag'];
|
||||||
|
$this->item_name = $params['item_name'];
|
||||||
$this->item_model = $params['item_model'];
|
$this->item_model = $params['item_model'];
|
||||||
$this->item_serial = $params['item_serial'];
|
$this->item_serial = $params['item_serial'];
|
||||||
$this->item_status = $params['item_status'];
|
$this->item_status = $params['item_status'];
|
||||||
$this->accepted_date = Helper::getFormattedDateObject($params['accepted_date'], 'date', false);
|
$this->accepted_date = Helper::getFormattedDateObject($params['accepted_date'], 'datetime', false);
|
||||||
$this->assigned_to = $params['assigned_to'];
|
$this->assigned_to = $params['assigned_to'];
|
||||||
$this->note = $params['note'];
|
$this->note = $params['note'] ?? null;
|
||||||
$this->company_name = $params['company_name'];
|
$this->company_name = $params['company_name'];
|
||||||
$this->settings = Setting::getSettings();
|
$this->settings = Setting::getSettings();
|
||||||
$this->file = $params['file'] ?? null;
|
$this->file = $params['file'] ?? null;
|
||||||
|
$this->qty = $params['qty'] ?? null;
|
||||||
|
$this->admin = $params['admin'] ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -59,6 +62,7 @@ class AcceptanceAssetAcceptedToUserNotification extends Notification
|
|||||||
$message = (new MailMessage)->markdown('notifications.markdown.asset-acceptance',
|
$message = (new MailMessage)->markdown('notifications.markdown.asset-acceptance',
|
||||||
[
|
[
|
||||||
'item_tag' => $this->item_tag,
|
'item_tag' => $this->item_tag,
|
||||||
|
'item_name' => $this->item_name,
|
||||||
'item_model' => $this->item_model,
|
'item_model' => $this->item_model,
|
||||||
'item_serial' => $this->item_serial,
|
'item_serial' => $this->item_serial,
|
||||||
'item_status' => $this->item_status,
|
'item_status' => $this->item_status,
|
||||||
@@ -66,10 +70,12 @@ class AcceptanceAssetAcceptedToUserNotification extends Notification
|
|||||||
'accepted_date' => $this->accepted_date,
|
'accepted_date' => $this->accepted_date,
|
||||||
'assigned_to' => $this->assigned_to,
|
'assigned_to' => $this->assigned_to,
|
||||||
'company_name' => $this->company_name,
|
'company_name' => $this->company_name,
|
||||||
'intro_text' => trans('mail.acceptance_asset_accepted_to_user', ['site_name' => $this->company_name ?? $this->settings->site_name]),
|
'admin' => $this->admin,
|
||||||
|
'qty' => $this->qty,
|
||||||
|
'intro_text' => trans_choice('mail.acceptance_asset_accepted_to_user', $this->qty, ['qty' => $this->qty, 'site_name' => $this->settings->site_name]),
|
||||||
])
|
])
|
||||||
->attach($pdf_path)
|
->attach($pdf_path)
|
||||||
->subject(trans('mail.acceptance_asset_accepted_to_user', ['site_name' => $this->settings->site_name]));
|
->subject(trans_choice('mail.acceptance_asset_accepted_to_user', $this->qty, ['qty' => $this->qty, 'site_name' => $this->settings->site_name]));
|
||||||
|
|
||||||
return $message;
|
return $message;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ class AcceptanceAssetDeclinedNotification extends Notification
|
|||||||
$this->assigned_to = $params['assigned_to'];
|
$this->assigned_to = $params['assigned_to'];
|
||||||
$this->company_name = $params['company_name'];
|
$this->company_name = $params['company_name'];
|
||||||
$this->settings = Setting::getSettings();
|
$this->settings = Setting::getSettings();
|
||||||
|
$this->qty = $params['qty'] ?? null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -69,6 +70,7 @@ class AcceptanceAssetDeclinedNotification extends Notification
|
|||||||
'declined_date' => $this->declined_date,
|
'declined_date' => $this->declined_date,
|
||||||
'assigned_to' => $this->assigned_to,
|
'assigned_to' => $this->assigned_to,
|
||||||
'company_name' => $this->company_name,
|
'company_name' => $this->company_name,
|
||||||
|
'qty' => $this->qty,
|
||||||
'intro_text' => trans('mail.acceptance_asset_declined'),
|
'intro_text' => trans('mail.acceptance_asset_declined'),
|
||||||
])
|
])
|
||||||
->subject(trans('mail.acceptance_asset_declined'));
|
->subject(trans('mail.acceptance_asset_declined'));
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ use NotificationChannels\MicrosoftTeams\MicrosoftTeamsMessage;
|
|||||||
->from(($this->settings->webhook_botname) ? $this->settings->webhook_botname : 'Snipe-Bot')
|
->from(($this->settings->webhook_botname) ? $this->settings->webhook_botname : 'Snipe-Bot')
|
||||||
->to($channel)
|
->to($channel)
|
||||||
->attachment(function ($attachment) {
|
->attachment(function ($attachment) {
|
||||||
$item = $this->params['item'];
|
$item = $this->params['item'] ?? null;
|
||||||
$admin_user = $this->params['admin'];
|
$admin_user = $this->params['admin'];
|
||||||
$fields = [
|
$fields = [
|
||||||
'By' => '<'.$admin_user->present()->viewUrl().'|'.$admin_user->display_name.'>',
|
'By' => '<'.$admin_user->present()->viewUrl().'|'.$admin_user->display_name.'>',
|
||||||
|
|||||||
@@ -120,7 +120,13 @@ class AccessoryPresenter extends Presenter
|
|||||||
'field' => 'purchase_cost',
|
'field' => 'purchase_cost',
|
||||||
'searchable' => true,
|
'searchable' => true,
|
||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
'title' => trans('general.purchase_cost'),
|
'title' => trans('general.unit_cost'),
|
||||||
|
'class' => 'text-right text-padding-number-cell',
|
||||||
|
], [
|
||||||
|
'field' => 'total_cost',
|
||||||
|
'searchable' => true,
|
||||||
|
'sortable' => true,
|
||||||
|
'title' => trans('general.total_cost'),
|
||||||
'footerFormatter' => 'sumFormatterQuantity',
|
'footerFormatter' => 'sumFormatterQuantity',
|
||||||
'class' => 'text-right text-padding-number-cell',
|
'class' => 'text-right text-padding-number-cell',
|
||||||
], [
|
], [
|
||||||
|
|||||||
@@ -79,6 +79,25 @@ class ComponentPresenter extends Presenter
|
|||||||
'title' => trans('general.manufacturer'),
|
'title' => trans('general.manufacturer'),
|
||||||
'visible' => false,
|
'visible' => false,
|
||||||
'formatter' => 'manufacturersLinkObjFormatter',
|
'formatter' => 'manufacturersLinkObjFormatter',
|
||||||
|
], [
|
||||||
|
'field' => 'location',
|
||||||
|
'searchable' => true,
|
||||||
|
'sortable' => true,
|
||||||
|
'title' => trans('general.location'),
|
||||||
|
'formatter' => 'locationsLinkObjFormatter',
|
||||||
|
], [
|
||||||
|
'field' => 'order_number',
|
||||||
|
'searchable' => true,
|
||||||
|
'sortable' => true,
|
||||||
|
'title' => trans('general.order_number'),
|
||||||
|
'visible' => true,
|
||||||
|
], [
|
||||||
|
'field' => 'purchase_date',
|
||||||
|
'searchable' => true,
|
||||||
|
'sortable' => true,
|
||||||
|
'title' => trans('general.purchase_date'),
|
||||||
|
'visible' => true,
|
||||||
|
'formatter' => 'dateDisplayFormatter',
|
||||||
], [
|
], [
|
||||||
'field' => 'min_amt',
|
'field' => 'min_amt',
|
||||||
'searchable' => false,
|
'searchable' => false,
|
||||||
@@ -103,33 +122,20 @@ class ComponentPresenter extends Presenter
|
|||||||
'visible' => true,
|
'visible' => true,
|
||||||
'class' => 'text-right text-padding-number-cell',
|
'class' => 'text-right text-padding-number-cell',
|
||||||
'footerFormatter' => 'qtySumFormatter',
|
'footerFormatter' => 'qtySumFormatter',
|
||||||
], [
|
|
||||||
'field' => 'location',
|
|
||||||
'searchable' => true,
|
|
||||||
'sortable' => true,
|
|
||||||
'title' => trans('general.location'),
|
|
||||||
'formatter' => 'locationsLinkObjFormatter',
|
|
||||||
], [
|
|
||||||
'field' => 'order_number',
|
|
||||||
'searchable' => true,
|
|
||||||
'sortable' => true,
|
|
||||||
'title' => trans('general.order_number'),
|
|
||||||
'visible' => true,
|
|
||||||
], [
|
|
||||||
'field' => 'purchase_date',
|
|
||||||
'searchable' => true,
|
|
||||||
'sortable' => true,
|
|
||||||
'title' => trans('general.purchase_date'),
|
|
||||||
'visible' => true,
|
|
||||||
'formatter' => 'dateDisplayFormatter',
|
|
||||||
], [
|
], [
|
||||||
'field' => 'purchase_cost',
|
'field' => 'purchase_cost',
|
||||||
'searchable' => true,
|
'searchable' => true,
|
||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
'title' => trans('general.purchase_cost'),
|
'title' => trans('general.unit_cost'),
|
||||||
'visible' => true,
|
'visible' => true,
|
||||||
'footerFormatter' => 'sumFormatterQuantity',
|
|
||||||
'class' => 'text-right',
|
'class' => 'text-right',
|
||||||
|
], [
|
||||||
|
'field' => 'total_cost',
|
||||||
|
'searchable' => true,
|
||||||
|
'sortable' => true,
|
||||||
|
'title' => trans('general.total_cost'),
|
||||||
|
'footerFormatter' => 'sumFormatterQuantity',
|
||||||
|
'class' => 'text-right text-padding-number-cell',
|
||||||
], [
|
], [
|
||||||
'field' => 'notes',
|
'field' => 'notes',
|
||||||
'searchable' => true,
|
'searchable' => true,
|
||||||
|
|||||||
@@ -67,35 +67,6 @@ class ConsumablePresenter extends Presenter
|
|||||||
'searchable' => true,
|
'searchable' => true,
|
||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
'title' => trans('general.model_no'),
|
'title' => trans('general.model_no'),
|
||||||
], [
|
|
||||||
'field' => 'item_no',
|
|
||||||
'searchable' => true,
|
|
||||||
'sortable' => true,
|
|
||||||
'title' => trans('admin/consumables/general.item_no'),
|
|
||||||
], [
|
|
||||||
'field' => 'qty',
|
|
||||||
'searchable' => false,
|
|
||||||
'sortable' => true,
|
|
||||||
'title' => trans('admin/components/general.total'),
|
|
||||||
'visible' => true,
|
|
||||||
'class' => 'text-right text-padding-number-cell',
|
|
||||||
'footerFormatter' => 'qtySumFormatter',
|
|
||||||
], [
|
|
||||||
'field' => 'remaining',
|
|
||||||
'searchable' => false,
|
|
||||||
'sortable' => true,
|
|
||||||
'title' => trans('admin/components/general.remaining'),
|
|
||||||
'visible' => true,
|
|
||||||
'class' => 'text-right text-padding-number-cell',
|
|
||||||
'footerFormatter' => 'qtySumFormatter',
|
|
||||||
], [
|
|
||||||
'field' => 'min_amt',
|
|
||||||
'searchable' => false,
|
|
||||||
'sortable' => true,
|
|
||||||
'title' => trans('general.min_amt'),
|
|
||||||
'visible' => true,
|
|
||||||
'formatter' => 'minAmtFormatter',
|
|
||||||
'class' => 'text-right text-padding-number-cell',
|
|
||||||
], [
|
], [
|
||||||
'field' => 'location',
|
'field' => 'location',
|
||||||
'searchable' => true,
|
'searchable' => true,
|
||||||
@@ -103,6 +74,12 @@ class ConsumablePresenter extends Presenter
|
|||||||
'title' => trans('general.location'),
|
'title' => trans('general.location'),
|
||||||
'formatter' => 'locationsLinkObjFormatter',
|
'formatter' => 'locationsLinkObjFormatter',
|
||||||
], [
|
], [
|
||||||
|
'field' => 'item_no',
|
||||||
|
'searchable' => true,
|
||||||
|
'sortable' => true,
|
||||||
|
'title' => trans('admin/consumables/general.item_no'),
|
||||||
|
], [
|
||||||
|
|
||||||
'field' => 'manufacturer',
|
'field' => 'manufacturer',
|
||||||
'searchable' => true,
|
'searchable' => true,
|
||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
@@ -122,12 +99,42 @@ class ConsumablePresenter extends Presenter
|
|||||||
'title' => trans('general.purchase_date'),
|
'title' => trans('general.purchase_date'),
|
||||||
'visible' => true,
|
'visible' => true,
|
||||||
'formatter' => 'dateDisplayFormatter',
|
'formatter' => 'dateDisplayFormatter',
|
||||||
|
], [
|
||||||
|
'field' => 'min_amt',
|
||||||
|
'searchable' => false,
|
||||||
|
'sortable' => true,
|
||||||
|
'title' => trans('general.min_amt'),
|
||||||
|
'visible' => true,
|
||||||
|
'formatter' => 'minAmtFormatter',
|
||||||
|
'class' => 'text-right text-padding-number-cell',
|
||||||
|
], [
|
||||||
|
'field' => 'qty',
|
||||||
|
'searchable' => false,
|
||||||
|
'sortable' => true,
|
||||||
|
'title' => trans('admin/components/general.total'),
|
||||||
|
'visible' => true,
|
||||||
|
'class' => 'text-right text-padding-number-cell',
|
||||||
|
'footerFormatter' => 'qtySumFormatter',
|
||||||
|
], [
|
||||||
|
'field' => 'remaining',
|
||||||
|
'searchable' => false,
|
||||||
|
'sortable' => true,
|
||||||
|
'title' => trans('admin/components/general.remaining'),
|
||||||
|
'visible' => true,
|
||||||
|
'class' => 'text-right text-padding-number-cell',
|
||||||
|
'footerFormatter' => 'qtySumFormatter',
|
||||||
], [
|
], [
|
||||||
'field' => 'purchase_cost',
|
'field' => 'purchase_cost',
|
||||||
'searchable' => true,
|
'searchable' => true,
|
||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
'title' => trans('general.purchase_cost'),
|
'title' => trans('general.unit_cost'),
|
||||||
'visible' => true,
|
'visible' => true,
|
||||||
|
'class' => 'text-right text-padding-number-cell',
|
||||||
|
], [
|
||||||
|
'field' => 'total_cost',
|
||||||
|
'searchable' => true,
|
||||||
|
'sortable' => true,
|
||||||
|
'title' => trans('general.total_cost'),
|
||||||
'footerFormatter' => 'sumFormatterQuantity',
|
'footerFormatter' => 'sumFormatterQuantity',
|
||||||
'class' => 'text-right text-padding-number-cell',
|
'class' => 'text-right text-padding-number-cell',
|
||||||
], [
|
], [
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ class LicensePresenter extends Presenter
|
|||||||
'switchable' => false,
|
'switchable' => false,
|
||||||
'title' => trans('general.checkin').'/'.trans('general.checkout'),
|
'title' => trans('general.checkin').'/'.trans('general.checkout'),
|
||||||
'visible' => true,
|
'visible' => true,
|
||||||
'formatter' => 'licensesInOutFormatter',
|
'formatter' => 'licenseInOutFormatter',
|
||||||
'printIgnore' => true,
|
'printIgnore' => true,
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -61,6 +61,15 @@ class LocationPresenter extends Presenter
|
|||||||
'title' => trans('admin/locations/table.parent'),
|
'title' => trans('admin/locations/table.parent'),
|
||||||
'visible' => true,
|
'visible' => true,
|
||||||
'formatter' => 'locationsLinkObjFormatter',
|
'formatter' => 'locationsLinkObjFormatter',
|
||||||
|
], [
|
||||||
|
'field' => 'users_count',
|
||||||
|
'searchable' => false,
|
||||||
|
'sortable' => true,
|
||||||
|
'switchable' => true,
|
||||||
|
'title' => trans('general.people'),
|
||||||
|
'titleTooltip' => trans('general.people'),
|
||||||
|
'visible' => true,
|
||||||
|
'class' => 'css-house-user',
|
||||||
], [
|
], [
|
||||||
'field' => 'assets_count',
|
'field' => 'assets_count',
|
||||||
'searchable' => false,
|
'searchable' => false,
|
||||||
@@ -98,7 +107,7 @@ class LocationPresenter extends Presenter
|
|||||||
'titleTooltip' => trans('general.accessories'),
|
'titleTooltip' => trans('general.accessories'),
|
||||||
'visible' => true,
|
'visible' => true,
|
||||||
'class' => 'css-accessory',
|
'class' => 'css-accessory',
|
||||||
], [
|
],[
|
||||||
'field' => 'assigned_accessories_count',
|
'field' => 'assigned_accessories_count',
|
||||||
'searchable' => false,
|
'searchable' => false,
|
||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
@@ -108,14 +117,34 @@ class LocationPresenter extends Presenter
|
|||||||
'visible' => true,
|
'visible' => true,
|
||||||
'class' => 'css-accessory-alt',
|
'class' => 'css-accessory-alt',
|
||||||
], [
|
], [
|
||||||
'field' => 'users_count',
|
'field' => 'components_count',
|
||||||
'searchable' => false,
|
'searchable' => false,
|
||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
'switchable' => true,
|
'switchable' => true,
|
||||||
'title' => trans('general.people'),
|
'title' => trans('general.components'),
|
||||||
'titleTooltip' => trans('general.people'),
|
'titleTooltip' => trans('general.components'),
|
||||||
'visible' => true,
|
'visible' => true,
|
||||||
'class' => 'css-house-user',
|
'class' => 'css-component',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'field' => 'consumables_count',
|
||||||
|
'searchable' => false,
|
||||||
|
'sortable' => true,
|
||||||
|
'switchable' => true,
|
||||||
|
'title' => trans('general.consumables'),
|
||||||
|
'titleTooltip' => trans('general.consumables'),
|
||||||
|
'visible' => true,
|
||||||
|
'class' => 'css-consumable',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'field' => 'children_count',
|
||||||
|
'searchable' => false,
|
||||||
|
'sortable' => true,
|
||||||
|
'switchable' => true,
|
||||||
|
'title' => trans('general.child_locations'),
|
||||||
|
'titleTooltip' => trans('general.child_locations'),
|
||||||
|
'visible' => true,
|
||||||
|
'class' => 'css-child-locations',
|
||||||
], [
|
], [
|
||||||
'field' => 'currency',
|
'field' => 'currency',
|
||||||
'searchable' => true,
|
'searchable' => true,
|
||||||
|
|||||||
@@ -60,18 +60,14 @@ class UserPresenter extends Presenter
|
|||||||
'title' => trans('admin/users/table.name'),
|
'title' => trans('admin/users/table.name'),
|
||||||
'visible' => true,
|
'visible' => true,
|
||||||
'formatter' => 'usersLinkFormatter',
|
'formatter' => 'usersLinkFormatter',
|
||||||
],
|
], [
|
||||||
|
|
||||||
[
|
|
||||||
'field' => 'first_name',
|
'field' => 'first_name',
|
||||||
'searchable' => true,
|
'searchable' => true,
|
||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
'title' => trans('general.first_name'),
|
'title' => trans('general.first_name'),
|
||||||
'visible' => false,
|
'visible' => false,
|
||||||
'formatter' => 'usersLinkFormatter',
|
'formatter' => 'usersLinkFormatter',
|
||||||
],
|
], [
|
||||||
|
|
||||||
[
|
|
||||||
'field' => 'last_name',
|
'field' => 'last_name',
|
||||||
'searchable' => true,
|
'searchable' => true,
|
||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
@@ -85,7 +81,23 @@ class UserPresenter extends Presenter
|
|||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
'switchable' => false,
|
'switchable' => false,
|
||||||
'title' => trans('admin/users/table.display_name'),
|
'title' => trans('admin/users/table.display_name'),
|
||||||
|
'visible' => false,
|
||||||
|
], [
|
||||||
|
'field' => 'username',
|
||||||
|
'searchable' => true,
|
||||||
|
'sortable' => true,
|
||||||
|
'switchable' => false,
|
||||||
|
'title' => trans('admin/users/table.username'),
|
||||||
'visible' => true,
|
'visible' => true,
|
||||||
|
'formatter' => 'usernameRoleLinkFormatter',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'field' => 'employee_num',
|
||||||
|
'searchable' => true,
|
||||||
|
'sortable' => true,
|
||||||
|
'switchable' => true,
|
||||||
|
'title' => trans('general.employee_number'),
|
||||||
|
'visible' => false,
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'field' => 'jobtitle',
|
'field' => 'jobtitle',
|
||||||
@@ -129,7 +141,7 @@ class UserPresenter extends Presenter
|
|||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
'switchable' => true,
|
'switchable' => true,
|
||||||
'title' => trans('admin/users/table.phone'),
|
'title' => trans('admin/users/table.phone'),
|
||||||
'visible' => true,
|
'visible' => false,
|
||||||
'formatter' => 'phoneFormatter',
|
'formatter' => 'phoneFormatter',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@@ -190,24 +202,7 @@ class UserPresenter extends Presenter
|
|||||||
'title' => trans('general.zip'),
|
'title' => trans('general.zip'),
|
||||||
'visible' => false,
|
'visible' => false,
|
||||||
],
|
],
|
||||||
[
|
|
||||||
'field' => 'username',
|
|
||||||
'searchable' => true,
|
|
||||||
'sortable' => true,
|
|
||||||
'switchable' => false,
|
|
||||||
'title' => trans('admin/users/table.username'),
|
|
||||||
'visible' => true,
|
|
||||||
'formatter' => 'usernameRoleLinkFormatter',
|
|
||||||
],
|
|
||||||
|
|
||||||
[
|
|
||||||
'field' => 'employee_num',
|
|
||||||
'searchable' => true,
|
|
||||||
'sortable' => true,
|
|
||||||
'switchable' => true,
|
|
||||||
'title' => trans('general.employee_number'),
|
|
||||||
'visible' => false,
|
|
||||||
],
|
|
||||||
[
|
[
|
||||||
'field' => 'locale',
|
'field' => 'locale',
|
||||||
'searchable' => true,
|
'searchable' => true,
|
||||||
@@ -231,7 +226,7 @@ class UserPresenter extends Presenter
|
|||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
'switchable' => true,
|
'switchable' => true,
|
||||||
'title' => trans('admin/users/general.department_manager'),
|
'title' => trans('admin/users/general.department_manager'),
|
||||||
'visible' => true,
|
'visible' => false,
|
||||||
'formatter' => 'usersLinkObjFormatter',
|
'formatter' => 'usersLinkObjFormatter',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@@ -248,7 +243,7 @@ class UserPresenter extends Presenter
|
|||||||
'searchable' => true,
|
'searchable' => true,
|
||||||
'sortable' => true,
|
'sortable' => true,
|
||||||
'title' => trans('admin/users/table.manager'),
|
'title' => trans('admin/users/table.manager'),
|
||||||
'visible' => true,
|
'visible' => false,
|
||||||
'formatter' => 'usersLinkObjFormatter',
|
'formatter' => 'usersLinkObjFormatter',
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
|||||||
@@ -349,10 +349,19 @@ class BreadcrumbsServiceProvider extends ServiceProvider
|
|||||||
/**
|
/**
|
||||||
* Licenses Breadcrumbs
|
* Licenses Breadcrumbs
|
||||||
*/
|
*/
|
||||||
Breadcrumbs::for('licenses.index', fn (Trail $trail) =>
|
if ((request()->is('licenses*')) && (request()->status=='inactive')) {
|
||||||
$trail->parent('home', route('home'))
|
Breadcrumbs::for('licenses.index', fn (Trail $trail) =>
|
||||||
->push(trans('general.licenses'), route('licenses.index'))
|
$trail->parent('home', route('home'))
|
||||||
);
|
->push(trans('general.licenses'), route('licenses.index'))
|
||||||
|
->push(trans('general.show_inactive'), route('licenses.index'))
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
Breadcrumbs::for('licenses.index', fn (Trail $trail) =>
|
||||||
|
$trail->parent('home', route('home'))
|
||||||
|
->push(trans('general.licenses'), route('licenses.index'))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Breadcrumbs::for('licenses.create', fn (Trail $trail) =>
|
Breadcrumbs::for('licenses.create', fn (Trail $trail) =>
|
||||||
$trail->parent('licenses.index', route('licenses.index'))
|
$trail->parent('licenses.index', route('licenses.index'))
|
||||||
|
|||||||
@@ -32,11 +32,11 @@
|
|||||||
"arietimmerman/laravel-scim-server": "dev-laravel_11_compatibility",
|
"arietimmerman/laravel-scim-server": "dev-laravel_11_compatibility",
|
||||||
"bacon/bacon-qr-code": "^2.0",
|
"bacon/bacon-qr-code": "^2.0",
|
||||||
"barryvdh/laravel-debugbar": "^3.13",
|
"barryvdh/laravel-debugbar": "^3.13",
|
||||||
"barryvdh/laravel-dompdf": "^2.0",
|
|
||||||
"doctrine/cache": "^1.10",
|
"doctrine/cache": "^1.10",
|
||||||
"doctrine/dbal": "^3.1",
|
"doctrine/dbal": "^3.1",
|
||||||
"doctrine/instantiator": "^1.3",
|
"doctrine/instantiator": "^1.3",
|
||||||
"eduardokum/laravel-mail-auto-embed": "^2.0",
|
"eduardokum/laravel-mail-auto-embed": "^2.0",
|
||||||
|
"elibyy/tcpdf-laravel": "^11.5",
|
||||||
"enshrined/svg-sanitize": "^0.22.0",
|
"enshrined/svg-sanitize": "^0.22.0",
|
||||||
"erusev/parsedown": "^1.7",
|
"erusev/parsedown": "^1.7",
|
||||||
"fakerphp/faker": "^1.24",
|
"fakerphp/faker": "^1.24",
|
||||||
@@ -73,6 +73,7 @@
|
|||||||
"spatie/laravel-ignition": "^2.0",
|
"spatie/laravel-ignition": "^2.0",
|
||||||
"tabuna/breadcrumbs": "^4.2",
|
"tabuna/breadcrumbs": "^4.2",
|
||||||
"tecnickcom/tc-lib-barcode": "^1.15",
|
"tecnickcom/tc-lib-barcode": "^1.15",
|
||||||
|
"tecnickcom/tc-lib-pdf-font": "^2.6",
|
||||||
"tecnickcom/tcpdf": "^6.5",
|
"tecnickcom/tcpdf": "^6.5",
|
||||||
"unicodeveloper/laravel-password": "^1.0",
|
"unicodeveloper/laravel-password": "^1.0",
|
||||||
"watson/validating": "^8.1"
|
"watson/validating": "^8.1"
|
||||||
|
|||||||
822
composer.lock
generated
822
composer.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -300,7 +300,6 @@ return [
|
|||||||
App\Providers\SnipeTranslationServiceProvider::class, //we REPLACE the default Laravel translator with our own
|
App\Providers\SnipeTranslationServiceProvider::class, //we REPLACE the default Laravel translator with our own
|
||||||
Illuminate\Validation\ValidationServiceProvider::class,
|
Illuminate\Validation\ValidationServiceProvider::class,
|
||||||
Illuminate\View\ViewServiceProvider::class,
|
Illuminate\View\ViewServiceProvider::class,
|
||||||
Barryvdh\DomPDF\ServiceProvider::class,
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Package Service Providers...
|
* Package Service Providers...
|
||||||
@@ -315,6 +314,8 @@ return [
|
|||||||
Unicodeveloper\DumbPassword\DumbPasswordServiceProvider::class,
|
Unicodeveloper\DumbPassword\DumbPasswordServiceProvider::class,
|
||||||
Eduardokum\LaravelMailAutoEmbed\ServiceProvider::class,
|
Eduardokum\LaravelMailAutoEmbed\ServiceProvider::class,
|
||||||
Laravel\Socialite\SocialiteServiceProvider::class,
|
Laravel\Socialite\SocialiteServiceProvider::class,
|
||||||
|
Elibyy\TCPDF\ServiceProvider::class,
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Application Service Providers...
|
* Application Service Providers...
|
||||||
@@ -371,7 +372,7 @@ return [
|
|||||||
'Mail' => Illuminate\Support\Facades\Mail::class,
|
'Mail' => Illuminate\Support\Facades\Mail::class,
|
||||||
'Notification' => Illuminate\Support\Facades\Notification::class,
|
'Notification' => Illuminate\Support\Facades\Notification::class,
|
||||||
'Password' => Illuminate\Support\Facades\Password::class,
|
'Password' => Illuminate\Support\Facades\Password::class,
|
||||||
'PDF' => Barryvdh\DomPDF\Facade::class,
|
'PDF' => Elibyy\TCPDF\Facades\TCPDF::class,
|
||||||
'Queue' => Illuminate\Support\Facades\Queue::class,
|
'Queue' => Illuminate\Support\Facades\Queue::class,
|
||||||
'Redirect' => Illuminate\Support\Facades\Redirect::class,
|
'Redirect' => Illuminate\Support\Facades\Redirect::class,
|
||||||
'Redis' => Illuminate\Support\Facades\Redis::class,
|
'Redis' => Illuminate\Support\Facades\Redis::class,
|
||||||
|
|||||||
17
config/pdf.php
Normal file
17
config/pdf.php
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
return [
|
||||||
|
'mode' => 'utf-8',
|
||||||
|
'format' => 'A4',
|
||||||
|
'author' => '',
|
||||||
|
'subject' => '',
|
||||||
|
'keywords' => '',
|
||||||
|
'creator' => 'Snipe-IT',
|
||||||
|
'display_mode' => 'fullpage',
|
||||||
|
'tempDir' => base_path('../temp/'),
|
||||||
|
'pdf_a' => false,
|
||||||
|
'pdf_a_auto' => false,
|
||||||
|
'icc_profile_path' => '',
|
||||||
|
'defaultCssFile' => false,
|
||||||
|
'pdfWrapper' => 'misterspelik\LaravelPdf\Wrapper\PdfWrapper',
|
||||||
|
];
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
<?php
|
<?php
|
||||||
return array (
|
return array (
|
||||||
'app_version' => 'v8.3.1',
|
'app_version' => 'v8.3.2',
|
||||||
'full_app_version' => 'v8.3.1 - build 19577-g7dd493da3',
|
'full_app_version' => 'v8.3.2 - build 19905-g028b4e7b7',
|
||||||
'build_version' => '19577',
|
'build_version' => '19905',
|
||||||
'prerelease_version' => '',
|
'prerelease_version' => '',
|
||||||
'hash_version' => 'g7dd493da3',
|
'hash_version' => 'g028b4e7b7',
|
||||||
'full_hash' => 'v8.3.1-15-g7dd493da3',
|
'full_hash' => 'v8.3.2-319-g028b4e7b7',
|
||||||
'branch' => 'develop',
|
'branch' => 'master',
|
||||||
);
|
);
|
||||||
@@ -33,9 +33,9 @@ class LicenseFactory extends Factory
|
|||||||
'seats' => $this->faker->numberBetween(1, 10),
|
'seats' => $this->faker->numberBetween(1, 10),
|
||||||
'purchase_date' => $this->faker->dateTimeBetween('-1 years', 'now', date_default_timezone_get())->format('Y-m-d'),
|
'purchase_date' => $this->faker->dateTimeBetween('-1 years', 'now', date_default_timezone_get())->format('Y-m-d'),
|
||||||
'order_number' => $this->faker->numberBetween(1000000, 50000000),
|
'order_number' => $this->faker->numberBetween(1000000, 50000000),
|
||||||
'expiration_date' => $this->faker->dateTimeBetween('now', '+3 years', date_default_timezone_get())->format('Y-m-d H:i:s'),
|
'expiration_date' => null,
|
||||||
'reassignable' => $this->faker->boolean(),
|
'reassignable' => $this->faker->boolean(),
|
||||||
'termination_date' => $this->faker->dateTimeBetween('-1 years', 'now', date_default_timezone_get())->format('Y-m-d H:i:s'),
|
'termination_date' => null,
|
||||||
'supplier_id' => Supplier::factory(),
|
'supplier_id' => Supplier::factory(),
|
||||||
'category_id' => Category::factory(),
|
'category_id' => Category::factory(),
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration {
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::whenTableDoesntHaveColumn('checkout_acceptances', 'qty', function () {
|
||||||
|
Schema::table('checkout_acceptances', function (Blueprint $table) {
|
||||||
|
$table->unsignedInteger('qty')->nullable()->after('assigned_to_id')->default(null);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::whenTableHasColumn('checkout_acceptances', 'qty', function () {
|
||||||
|
Schema::table('checkout_acceptances', function (Blueprint $table) {
|
||||||
|
$table->dropColumn('qty');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Database\Schema\Blueprint;
|
||||||
|
use Illuminate\Support\Facades\Schema;
|
||||||
|
|
||||||
|
return new class extends Migration
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Run the migrations.
|
||||||
|
*/
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
Schema::table('users', function (Blueprint $table) {
|
||||||
|
// We are doing 'deleted_at' *first* here because that way this index can do double-duty -
|
||||||
|
// handling queries for 'all undeleted users' as well as 'users who are deleted in this location'
|
||||||
|
// and 'users who are not-deleted in this location'
|
||||||
|
$table->index(['deleted_at','location_id']);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reverse the migrations.
|
||||||
|
*/
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
Schema::table('users', function (Blueprint $table) {
|
||||||
|
$table->dropIndex(['deleted_at','location_id']);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -21,11 +21,11 @@ class SettingsSeeder extends Seeder
|
|||||||
$settings->header_color = null;
|
$settings->header_color = null;
|
||||||
$settings->label2_2d_type = 'QRCODE';
|
$settings->label2_2d_type = 'QRCODE';
|
||||||
$settings->default_currency = 'USD';
|
$settings->default_currency = 'USD';
|
||||||
$settings->brand = 3;
|
$settings->brand = 2;
|
||||||
$settings->ldap_enabled = 0;
|
$settings->ldap_enabled = 0;
|
||||||
$settings->full_multiple_companies_support = 0;
|
$settings->full_multiple_companies_support = 0;
|
||||||
$settings->label2_1d_type = 'C128';
|
$settings->label2_1d_type = 'C128';
|
||||||
$settings->skin = '';
|
$settings->skin = 'blue';
|
||||||
$settings->email_domain = 'example.org';
|
$settings->email_domain = 'example.org';
|
||||||
$settings->email_format = 'filastname';
|
$settings->email_format = 'filastname';
|
||||||
$settings->username_format = 'filastname';
|
$settings->username_format = 'filastname';
|
||||||
@@ -41,6 +41,8 @@ class SettingsSeeder extends Seeder
|
|||||||
|
|
||||||
if ($user = User::where('username', '=', 'admin')->first()) {
|
if ($user = User::where('username', '=', 'admin')->first()) {
|
||||||
$user->locale = 'en-US';
|
$user->locale = 'en-US';
|
||||||
|
$user->enable_sound = 1;
|
||||||
|
$user->enable_confetti = 1;
|
||||||
$user->save();
|
$user->save();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
24422
public/css/dist/all.css
vendored
24422
public/css/dist/all.css
vendored
File diff suppressed because one or more lines are too long
391
public/css/dist/bootstrap-table.css
vendored
391
public/css/dist/bootstrap-table.css
vendored
File diff suppressed because one or more lines are too long
136
public/css/dist/signature-pad.min.css
vendored
136
public/css/dist/signature-pad.min.css
vendored
@@ -1,135 +1 @@
|
|||||||
|
#signature-pad{padding-top:250px;margin:auto}.m-signature-pad{position:relative;font-size:10px;width:100%;height:300px;border:1px solid #e8e8e8;background-color:#fff;box-shadow:0 1px 4px rgba(0,0,0,.27),0 0 40px rgba(0,0,0,.08) inset;border-radius:4px}.m-signature-pad:after,.m-signature-pad:before{position:absolute;z-index:-1;content:"";width:40%;height:10px;left:20px;bottom:10px;background:0 0;-webkit-transform:skew(-3deg) rotate(-3deg);-moz-transform:skew(-3deg) rotate(-3deg);-ms-transform:skew(-3deg) rotate(-3deg);-o-transform:skew(-3deg) rotate(-3deg);transform:skew(-3deg) rotate(-3deg);box-shadow:0 8px 12px rgba(0,0,0,.4)}.m-signature-pad:after{left:auto;right:20px;-webkit-transform:skew(3deg) rotate(3deg);-moz-transform:skew(3deg) rotate(3deg);-ms-transform:skew(3deg) rotate(3deg);-o-transform:skew(3deg) rotate(3deg);transform:skew(3deg) rotate(3deg)}.m-signature-pad--body{position:absolute;top:20px;bottom:60px;border:1px solid #f4f4f4;background-color:#fff}.m-signature-pad--body canvas{position:absolute;left:0;top:0;width:100%;height:100%;border-radius:4px;box-shadow:0 0 5px rgba(0,0,0,.02) inset}.m-signature-pad--footer{position:absolute;left:20px;right:20px;bottom:20px;height:40px}.m-signature-pad--footer .description{color:#c3c3c3;text-align:center;font-size:1.2em;margin-top:1.8em}.m-signature-pad--footer .button{position:absolute;bottom:0}.m-signature-pad--footer .button.clear{left:0}.m-signature-pad--footer .button.save{right:0}@media screen and (max-width:1024px){.m-signature-pad{top:0;left:0;right:0;bottom:0;width:auto;height:auto;min-width:250px;min-height:140px;margin:5%}}@media screen and (min-device-width:768px) and (max-device-width:1024px){.m-signature-pad{margin:10%}}@media screen and (max-height:320px){.m-signature-pad--body{left:0;right:0;top:0;bottom:32px}.m-signature-pad--footer{left:20px;right:20px;bottom:4px;height:28px}.m-signature-pad--footer .description{font-size:1em;margin-top:1em}}
|
||||||
#signature-pad {
|
|
||||||
padding-top: 250px;
|
|
||||||
margin: auto;
|
|
||||||
}
|
|
||||||
.m-signature-pad {
|
|
||||||
|
|
||||||
position: relative;
|
|
||||||
font-size: 10px;
|
|
||||||
width: 100%;
|
|
||||||
height: 300px;
|
|
||||||
border: 1px solid #e8e8e8;
|
|
||||||
background-color: #fff;
|
|
||||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.27), 0 0 40px rgba(0, 0, 0, 0.08) inset;
|
|
||||||
border-radius: 4px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-signature-pad:before, .m-signature-pad:after {
|
|
||||||
position: absolute;
|
|
||||||
z-index: -1;
|
|
||||||
content: "";
|
|
||||||
width: 40%;
|
|
||||||
height: 10px;
|
|
||||||
left: 20px;
|
|
||||||
bottom: 10px;
|
|
||||||
background: transparent;
|
|
||||||
-webkit-transform: skew(-3deg) rotate(-3deg);
|
|
||||||
-moz-transform: skew(-3deg) rotate(-3deg);
|
|
||||||
-ms-transform: skew(-3deg) rotate(-3deg);
|
|
||||||
-o-transform: skew(-3deg) rotate(-3deg);
|
|
||||||
transform: skew(-3deg) rotate(-3deg);
|
|
||||||
box-shadow: 0 8px 12px rgba(0, 0, 0, 0.4);
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-signature-pad:after {
|
|
||||||
left: auto;
|
|
||||||
right: 20px;
|
|
||||||
-webkit-transform: skew(3deg) rotate(3deg);
|
|
||||||
-moz-transform: skew(3deg) rotate(3deg);
|
|
||||||
-ms-transform: skew(3deg) rotate(3deg);
|
|
||||||
-o-transform: skew(3deg) rotate(3deg);
|
|
||||||
transform: skew(3deg) rotate(3deg);
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-signature-pad--body {
|
|
||||||
position: absolute;
|
|
||||||
top: 20px;
|
|
||||||
bottom: 60px;
|
|
||||||
border: 1px solid #f4f4f4;
|
|
||||||
background-color: white;
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-signature-pad--body
|
|
||||||
canvas {
|
|
||||||
position: absolute;
|
|
||||||
left: 0;
|
|
||||||
top: 0;
|
|
||||||
width: 100%;
|
|
||||||
height: 100%;
|
|
||||||
border-radius: 4px;
|
|
||||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.02) inset;
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-signature-pad--footer {
|
|
||||||
position: absolute;
|
|
||||||
left: 20px;
|
|
||||||
right: 20px;
|
|
||||||
bottom: 20px;
|
|
||||||
height: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-signature-pad--footer
|
|
||||||
.description {
|
|
||||||
color: #C3C3C3;
|
|
||||||
text-align: center;
|
|
||||||
font-size: 1.2em;
|
|
||||||
margin-top: 1.8em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-signature-pad--footer
|
|
||||||
.button {
|
|
||||||
position: absolute;
|
|
||||||
bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-signature-pad--footer
|
|
||||||
.button.clear {
|
|
||||||
left: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.m-signature-pad--footer
|
|
||||||
.button.save {
|
|
||||||
right: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-width: 1024px) {
|
|
||||||
.m-signature-pad {
|
|
||||||
top: 0;
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
bottom: 0;
|
|
||||||
width: auto;
|
|
||||||
height: auto;
|
|
||||||
min-width: 250px;
|
|
||||||
min-height: 140px;
|
|
||||||
margin: 5%;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (min-device-width: 768px) and (max-device-width: 1024px) {
|
|
||||||
.m-signature-pad {
|
|
||||||
margin: 10%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media screen and (max-height: 320px) {
|
|
||||||
.m-signature-pad--body {
|
|
||||||
left: 0;
|
|
||||||
right: 0;
|
|
||||||
top: 0;
|
|
||||||
bottom: 32px;
|
|
||||||
}
|
|
||||||
.m-signature-pad--footer {
|
|
||||||
left: 20px;
|
|
||||||
right: 20px;
|
|
||||||
bottom: 4px;
|
|
||||||
height: 28px;
|
|
||||||
}
|
|
||||||
.m-signature-pad--footer
|
|
||||||
.description {
|
|
||||||
font-size: 1em;
|
|
||||||
margin-top: 1em;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
5474
public/css/dist/skins/_all-skins.css
vendored
5474
public/css/dist/skins/_all-skins.css
vendored
File diff suppressed because one or more lines are too long
2
public/css/dist/skins/_all-skins.css.map
vendored
2
public/css/dist/skins/_all-skins.css.map
vendored
File diff suppressed because one or more lines are too long
5476
public/css/dist/skins/_all-skins.min.css
vendored
5476
public/css/dist/skins/_all-skins.min.css
vendored
File diff suppressed because one or more lines are too long
560
public/css/dist/skins/skin-black-dark.css
vendored
560
public/css/dist/skins/skin-black-dark.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
562
public/css/dist/skins/skin-black-dark.min.css
vendored
562
public/css/dist/skins/skin-black-dark.min.css
vendored
File diff suppressed because one or more lines are too long
220
public/css/dist/skins/skin-black.css
vendored
220
public/css/dist/skins/skin-black.css
vendored
@@ -1,221 +1,3 @@
|
|||||||
/*
|
.skin-black .main-header .navbar{background-color:#111}.skin-black .main-header .navbar .nav>li>a{color:#fff}.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav>.active>a,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-black .main-header .navbar .sidebar-toggle{color:#fff}.skin-black .main-header .navbar .sidebar-toggle:hover{background-color:#040404}@media (max-width:767px){.skin-black .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-black .main-header .navbar .dropdown-menu li a{color:#333}.skin-black .main-header .navbar .dropdown-menu li a:hover{background:#040404}}.skin-black .main-header li.user-header{background-color:#111}.skin-black .content-header{background:transparent}.skin-black .left-side,.skin-black .main-sidebar,.skin-black .wrapper{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#111;color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .treeview-menu>li>a{color:#8aa4af}.skin-black .treeview-menu>li.active>a,.skin-black .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-black .sidebar-form .btn,.skin-black .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-black .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-black .sidebar-form input[type=text]:focus,.skin-black .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-black.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn,.btn:hover{color:#000}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#505156;border-color:#fff;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#111;border-color:#1f1f21;color:#fff}.btn.btn-white:hover,.btn.btn-white:link,.btn.btn-white:visited,.btn:hover.btn-white:hover,.btn:hover.btn-white:link,.btn:hover.btn-white:visited{color:#fff}a{color:var(--link)}a:hover{color:var(--hover-link)}a:visited{color:var(--visited-link)}.text-primary{color:#000}:root{--button-default:#000;--button-primary:#000;--button-hover:#000;--header:#111;--text-main:#bbb;--text-sub:#9b9b9b;--link:#black;--visited-link:#111;--hover-link:#999;--nav-link:#fff;--light-link:#fff}.btn-danger.btn-sm.disabled,a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}.far fa-life-ring{color:var(--link)}.sidebar-toggle-mobile{color:#fff!important}.skin-black .main-header .navbar .nav>li>a{text-decoration:none}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#111}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
|
||||||
* Skin: Black
|
|
||||||
* ----------
|
|
||||||
*/
|
|
||||||
.skin-black .main-header .navbar {
|
|
||||||
background-color: #111;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .nav > li > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .nav > li > a:hover,
|
|
||||||
.skin-black .main-header .navbar .nav > li > a:active,
|
|
||||||
.skin-black .main-header .navbar .nav > li > a:focus,
|
|
||||||
.skin-black .main-header .navbar .nav .open > a,
|
|
||||||
.skin-black .main-header .navbar .nav .open > a:hover,
|
|
||||||
.skin-black .main-header .navbar .nav .open > a:focus,
|
|
||||||
.skin-black .main-header .navbar .nav > .active > a {
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
color: #f6f6f6;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
color: #f6f6f6;
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
background-color: #040404;
|
|
||||||
}
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
.skin-black .main-header .navbar .dropdown-menu li.divider {
|
|
||||||
background-color: rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .dropdown-menu li a {
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .dropdown-menu li a:hover {
|
|
||||||
background: #040404;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.skin-black .main-header li.user-header {
|
|
||||||
background-color: #111;
|
|
||||||
}
|
|
||||||
.skin-black .content-header {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
.skin-black .wrapper,
|
|
||||||
.skin-black .main-sidebar,
|
|
||||||
.skin-black .left-side {
|
|
||||||
background-color: #222d32;
|
|
||||||
}
|
|
||||||
.skin-black .user-panel > .info,
|
|
||||||
.skin-black .user-panel > .info > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-menu > li.header {
|
|
||||||
color: #4b646f;
|
|
||||||
background: #1a2226;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-menu > li > a {
|
|
||||||
border-left: 3px solid transparent;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-menu > li:hover > a,
|
|
||||||
.skin-black .sidebar-menu > li.active > a {
|
|
||||||
color: #fff;
|
|
||||||
background: #1e282c;
|
|
||||||
border-left-color: #111;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-menu > li > .treeview-menu {
|
|
||||||
margin: 0 1px;
|
|
||||||
background: #2c3b41;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar a {
|
|
||||||
color: #b8c7ce;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.skin-black .treeview-menu > li > a {
|
|
||||||
color: #8aa4af;
|
|
||||||
}
|
|
||||||
.skin-black .treeview-menu > li.active > a,
|
|
||||||
.skin-black .treeview-menu > li > a:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-form {
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid #374850;
|
|
||||||
margin: 10px 10px;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-form input[type="text"],
|
|
||||||
.skin-black .sidebar-form .btn {
|
|
||||||
box-shadow: none;
|
|
||||||
background-color: #374850;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
height: 35px;
|
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-form input[type="text"] {
|
|
||||||
color: #666;
|
|
||||||
border-top-left-radius: 2px;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
border-bottom-left-radius: 2px;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-form input[type="text"]:focus,
|
|
||||||
.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
background-color: #fff;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
border-left-color: #fff;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-form .btn {
|
|
||||||
color: #999;
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 2px;
|
|
||||||
border-bottom-right-radius: 2px;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
.skin-black.layout-top-nav .main-header > .logo .logo-variant {
|
|
||||||
background-color: none;
|
|
||||||
}
|
|
||||||
.btn,
|
|
||||||
.btn:hover {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
.btn.btn-primary,
|
|
||||||
.btn:hover.btn-primary,
|
|
||||||
.btn .btn-primary:link,
|
|
||||||
.btn:hover .btn-primary:link {
|
|
||||||
background-color: #505156;
|
|
||||||
border-color: #FFF;
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
.btna.btn-primary:hover,
|
|
||||||
.btn:hovera.btn-primary:hover {
|
|
||||||
background-color: #111;
|
|
||||||
border-color: #1f1f21;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:link,
|
|
||||||
.btn:hover.btn-white:link {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:hover,
|
|
||||||
.btn:hover.btn-white:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:visited,
|
|
||||||
.btn:hover.btn-white:visited {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: var(--hover-link);
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: var(--visited-link);
|
|
||||||
}
|
|
||||||
.text-primary {
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
:root {
|
|
||||||
--button-default: #000000;
|
|
||||||
--button-primary: #000000;
|
|
||||||
--button-hover: #000000;
|
|
||||||
--header: #111;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--text-main: #BBB;
|
|
||||||
--text-sub: #9b9b9b;
|
|
||||||
--link: #black;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--visited-link: #111;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--hover-link: #999999;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--nav-link: #FFF;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--light-link: #fff;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
}
|
|
||||||
a.btn-info:link,
|
|
||||||
a.btn-warning:link,
|
|
||||||
a.btn-danger:link {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
a.btn-info:visited,
|
|
||||||
a.btn-warning:visited,
|
|
||||||
a.btn-danger:visited {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
.btn-danger.btn-sm.disabled {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
.far fa-life-ring {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
.sidebar-toggle-mobile {
|
|
||||||
color: #FFF !important;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .nav > li > a,
|
|
||||||
.skin-black .main-header .navbar .nav > li > a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
|
||||||
background-color: #111;
|
|
||||||
}
|
|
||||||
.search-highlight,
|
|
||||||
.search-highlight:hover {
|
|
||||||
background-color: #e9d15b;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*# sourceMappingURL=skin-black.css.map*/
|
/*# sourceMappingURL=skin-black.css.map*/
|
||||||
2
public/css/dist/skins/skin-black.css.map
vendored
2
public/css/dist/skins/skin-black.css.map
vendored
File diff suppressed because one or more lines are too long
222
public/css/dist/skins/skin-black.min.css
vendored
222
public/css/dist/skins/skin-black.min.css
vendored
@@ -1,221 +1 @@
|
|||||||
/*
|
.skin-black .main-header .navbar{background-color:#111}.skin-black .main-header .navbar .nav>li>a{color:#fff}.skin-black .main-header .navbar .nav .open>a,.skin-black .main-header .navbar .nav .open>a:focus,.skin-black .main-header .navbar .nav .open>a:hover,.skin-black .main-header .navbar .nav>.active>a,.skin-black .main-header .navbar .nav>li>a:active,.skin-black .main-header .navbar .nav>li>a:focus,.skin-black .main-header .navbar .nav>li>a:hover,.skin-black .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-black .main-header .navbar .sidebar-toggle{color:#fff}.skin-black .main-header .navbar .sidebar-toggle:hover{background-color:#040404}@media (max-width:767px){.skin-black .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-black .main-header .navbar .dropdown-menu li a{color:#333}.skin-black .main-header .navbar .dropdown-menu li a:hover{background:#040404}}.skin-black .main-header li.user-header{background-color:#111}.skin-black .content-header{background:0 0}.skin-black .left-side,.skin-black .main-sidebar,.skin-black .wrapper{background-color:#222d32}.skin-black .user-panel>.info,.skin-black .user-panel>.info>a{color:#fff}.skin-black .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-black .sidebar-menu>li>a{border-left:3px solid transparent}.skin-black .sidebar-menu>li.active>a,.skin-black .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#111;color:#fff}.skin-black .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-black .sidebar a{color:#b8c7ce}.skin-black .sidebar a:hover{text-decoration:none}.skin-black .treeview-menu>li>a{color:#8aa4af}.skin-black .treeview-menu>li.active>a,.skin-black .treeview-menu>li>a:hover{color:#fff}.skin-black .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-black .sidebar-form .btn,.skin-black .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-black .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-black .sidebar-form input[type=text]:focus,.skin-black .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-black .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-black .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-black.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn,.btn:hover{color:#000}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#505156;border-color:#fff;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#111;border-color:#1f1f21;color:#fff}.btn.btn-white:hover,.btn.btn-white:link,.btn.btn-white:visited,.btn:hover.btn-white:hover,.btn:hover.btn-white:link,.btn:hover.btn-white:visited{color:#fff}a{color:var(--link)}a:hover{color:var(--hover-link)}a:visited{color:var(--visited-link)}.text-primary{color:#000}:root{--button-default:#000;--button-primary:#000;--button-hover:#000;--header:#111;--text-main:#bbb;--text-sub:#9b9b9b;--link:#black;--visited-link:#111;--hover-link:#999;--nav-link:#fff;--light-link:#fff}.btn-danger.btn-sm.disabled,a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}.far fa-life-ring{color:var(--link)}.sidebar-toggle-mobile{color:#fff!important}.skin-black .main-header .navbar .nav>li>a{text-decoration:none}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#111}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
|
||||||
* Skin: Black
|
|
||||||
* ----------
|
|
||||||
*/
|
|
||||||
.skin-black .main-header .navbar {
|
|
||||||
background-color: #111;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .nav > li > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .nav > li > a:hover,
|
|
||||||
.skin-black .main-header .navbar .nav > li > a:active,
|
|
||||||
.skin-black .main-header .navbar .nav > li > a:focus,
|
|
||||||
.skin-black .main-header .navbar .nav .open > a,
|
|
||||||
.skin-black .main-header .navbar .nav .open > a:hover,
|
|
||||||
.skin-black .main-header .navbar .nav .open > a:focus,
|
|
||||||
.skin-black .main-header .navbar .nav > .active > a {
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
color: #f6f6f6;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
color: #f6f6f6;
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
background-color: #040404;
|
|
||||||
}
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
.skin-black .main-header .navbar .dropdown-menu li.divider {
|
|
||||||
background-color: rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .dropdown-menu li a {
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .dropdown-menu li a:hover {
|
|
||||||
background: #040404;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.skin-black .main-header li.user-header {
|
|
||||||
background-color: #111;
|
|
||||||
}
|
|
||||||
.skin-black .content-header {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
.skin-black .wrapper,
|
|
||||||
.skin-black .main-sidebar,
|
|
||||||
.skin-black .left-side {
|
|
||||||
background-color: #222d32;
|
|
||||||
}
|
|
||||||
.skin-black .user-panel > .info,
|
|
||||||
.skin-black .user-panel > .info > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-menu > li.header {
|
|
||||||
color: #4b646f;
|
|
||||||
background: #1a2226;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-menu > li > a {
|
|
||||||
border-left: 3px solid transparent;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-menu > li:hover > a,
|
|
||||||
.skin-black .sidebar-menu > li.active > a {
|
|
||||||
color: #fff;
|
|
||||||
background: #1e282c;
|
|
||||||
border-left-color: #111;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-menu > li > .treeview-menu {
|
|
||||||
margin: 0 1px;
|
|
||||||
background: #2c3b41;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar a {
|
|
||||||
color: #b8c7ce;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.skin-black .treeview-menu > li > a {
|
|
||||||
color: #8aa4af;
|
|
||||||
}
|
|
||||||
.skin-black .treeview-menu > li.active > a,
|
|
||||||
.skin-black .treeview-menu > li > a:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-form {
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid #374850;
|
|
||||||
margin: 10px 10px;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-form input[type="text"],
|
|
||||||
.skin-black .sidebar-form .btn {
|
|
||||||
box-shadow: none;
|
|
||||||
background-color: #374850;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
height: 35px;
|
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-form input[type="text"] {
|
|
||||||
color: #666;
|
|
||||||
border-top-left-radius: 2px;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
border-bottom-left-radius: 2px;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-form input[type="text"]:focus,
|
|
||||||
.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
background-color: #fff;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
border-left-color: #fff;
|
|
||||||
}
|
|
||||||
.skin-black .sidebar-form .btn {
|
|
||||||
color: #999;
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 2px;
|
|
||||||
border-bottom-right-radius: 2px;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
.skin-black.layout-top-nav .main-header > .logo .logo-variant {
|
|
||||||
background-color: none;
|
|
||||||
}
|
|
||||||
.btn,
|
|
||||||
.btn:hover {
|
|
||||||
color: #000;
|
|
||||||
}
|
|
||||||
.btn.btn-primary,
|
|
||||||
.btn:hover.btn-primary,
|
|
||||||
.btn .btn-primary:link,
|
|
||||||
.btn:hover .btn-primary:link {
|
|
||||||
background-color: #505156;
|
|
||||||
border-color: #FFF;
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
.btna.btn-primary:hover,
|
|
||||||
.btn:hovera.btn-primary:hover {
|
|
||||||
background-color: #111;
|
|
||||||
border-color: #1f1f21;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:link,
|
|
||||||
.btn:hover.btn-white:link {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:hover,
|
|
||||||
.btn:hover.btn-white:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:visited,
|
|
||||||
.btn:hover.btn-white:visited {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: var(--hover-link);
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: var(--visited-link);
|
|
||||||
}
|
|
||||||
.text-primary {
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
:root {
|
|
||||||
--button-default: #000000;
|
|
||||||
--button-primary: #000000;
|
|
||||||
--button-hover: #000000;
|
|
||||||
--header: #111;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--text-main: #BBB;
|
|
||||||
--text-sub: #9b9b9b;
|
|
||||||
--link: #black;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--visited-link: #111;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--hover-link: #999999;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--nav-link: #FFF;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--light-link: #fff;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
}
|
|
||||||
a.btn-info:link,
|
|
||||||
a.btn-warning:link,
|
|
||||||
a.btn-danger:link {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
a.btn-info:visited,
|
|
||||||
a.btn-warning:visited,
|
|
||||||
a.btn-danger:visited {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
.btn-danger.btn-sm.disabled {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
.far fa-life-ring {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
.sidebar-toggle-mobile {
|
|
||||||
color: #FFF !important;
|
|
||||||
}
|
|
||||||
.skin-black .main-header .navbar .nav > li > a,
|
|
||||||
.skin-black .main-header .navbar .nav > li > a {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
|
||||||
background-color: #111;
|
|
||||||
}
|
|
||||||
.search-highlight,
|
|
||||||
.search-highlight:hover {
|
|
||||||
background-color: #e9d15b;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*# sourceMappingURL=skin-black.css.map*/
|
|
||||||
|
|||||||
540
public/css/dist/skins/skin-blue-dark.css
vendored
540
public/css/dist/skins/skin-blue-dark.css
vendored
File diff suppressed because one or more lines are too long
2
public/css/dist/skins/skin-blue-dark.css.map
vendored
2
public/css/dist/skins/skin-blue-dark.css.map
vendored
File diff suppressed because one or more lines are too long
542
public/css/dist/skins/skin-blue-dark.min.css
vendored
542
public/css/dist/skins/skin-blue-dark.min.css
vendored
File diff suppressed because one or more lines are too long
252
public/css/dist/skins/skin-blue.css
vendored
252
public/css/dist/skins/skin-blue.css
vendored
@@ -1,253 +1,3 @@
|
|||||||
/*
|
.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav>.active>a,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#333}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:transparent}.skin-blue .left-side,.skin-blue .main-sidebar,.skin-blue .wrapper{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#3c8dbc;color:#fff}.skin-blue .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-blue .sidebar-form .btn,.skin-blue .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-blue .sidebar-form input[type=text]:focus,.skin-blue .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-blue.layout-top-nav .main-header>.logo .logo-variant{background-color:unset}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary,btn-sm .btn-primary:link,btn-sm.btn-primary{background-color:#307095;border-color:#23536f;color:#fff!important}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover,btn-sma.btn-primary:hover{background-color:#23536f;border-color:#23536f;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link,btn-sm.btn-white:link{background-color:#307095;color:#fff}.btn.btn-white:hover,.btn.btn-white:visited,.btn:hover.btn-white:hover,.btn:hover.btn-white:visited,btn-sm.btn-white:hover,btn-sm.btn-white:visited{background-color:#173648;color:#fff}.btn-danger,.btn-danger:link,.btn-danger:visited,.btn-warning,.btn-warning:link,.btn-warning:visited,a.btn-danger:hover,a.btn-warning:hover{color:#fff}.btn-default:link,.btn-default:visited,a.btn-default:hover{color:#505156}:root{--button-default:#505156;--button-primary:#1d455b;--button-hover:#173648;--header:#3c8dbc;--text-main:#bbb;--text-sub:#9b9b9b;--link:#296282;--visited-link:#5fa4cc;--hover-link:#86bad8;--nav-link:#fff;--light-link:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}a:link{color:var(--link)}a:visited{color:var(--visited-link)}a:hover{color:var(--hover-link)}.text-primary{color:#23536f}.far fa-life-ring{color:var(--link)}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc}.search-highlight,.search-highlight:hover{background-color:#e9d15b}a.settings_button:hover,a.settings_button:link,a.settings_button:visited{color:#3c8dbc}a.label.label-default:link{color:#307095}a.label.label-default:visited{color:#23536f}a.label.label-default:hover{background-color:#bbb;color:#296282}
|
||||||
* Skin: Blue
|
|
||||||
* ----------
|
|
||||||
*/
|
|
||||||
.skin-blue .main-header .navbar {
|
|
||||||
background-color: #3c8dbc;
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .nav > li > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .nav > li > a:hover,
|
|
||||||
.skin-blue .main-header .navbar .nav > li > a:active,
|
|
||||||
.skin-blue .main-header .navbar .nav > li > a:focus,
|
|
||||||
.skin-blue .main-header .navbar .nav .open > a,
|
|
||||||
.skin-blue .main-header .navbar .nav .open > a:hover,
|
|
||||||
.skin-blue .main-header .navbar .nav .open > a:focus,
|
|
||||||
.skin-blue .main-header .navbar .nav > .active > a {
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
color: #f6f6f6;
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
color: #f6f6f6;
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
background-color: #367fa9;
|
|
||||||
}
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
.skin-blue .main-header .navbar .dropdown-menu li.divider {
|
|
||||||
background-color: rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .dropdown-menu li a {
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .dropdown-menu li a:hover {
|
|
||||||
background: #367fa9;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.skin-blue .main-header li.user-header {
|
|
||||||
background-color: #3c8dbc;
|
|
||||||
}
|
|
||||||
.skin-blue .content-header {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
.skin-blue .wrapper,
|
|
||||||
.skin-blue .main-sidebar,
|
|
||||||
.skin-blue .left-side {
|
|
||||||
background-color: #222d32;
|
|
||||||
}
|
|
||||||
.skin-blue .user-panel > .info,
|
|
||||||
.skin-blue .user-panel > .info > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-menu > li.header {
|
|
||||||
color: #4b646f;
|
|
||||||
background: #1a2226;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-menu > li > a {
|
|
||||||
border-left: 3px solid transparent;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-menu > li:hover > a,
|
|
||||||
.skin-blue .sidebar-menu > li.active > a {
|
|
||||||
color: #fff;
|
|
||||||
background: #1e282c;
|
|
||||||
border-left-color: #3c8dbc;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-menu > li > .treeview-menu {
|
|
||||||
margin: 0 1px;
|
|
||||||
background: #2c3b41;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar a {
|
|
||||||
color: #b8c7ce;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.skin-blue .treeview-menu > li > a {
|
|
||||||
color: #8aa4af;
|
|
||||||
}
|
|
||||||
.skin-blue .treeview-menu > li.active > a,
|
|
||||||
.skin-blue .treeview-menu > li > a:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-form {
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid #374850;
|
|
||||||
margin: 10px 10px;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-form input[type="text"],
|
|
||||||
.skin-blue .sidebar-form .btn {
|
|
||||||
box-shadow: none;
|
|
||||||
background-color: #374850;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
height: 35px;
|
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-form input[type="text"] {
|
|
||||||
color: #666;
|
|
||||||
border-top-left-radius: 2px;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
border-bottom-left-radius: 2px;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-form input[type="text"]:focus,
|
|
||||||
.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
background-color: #fff;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
border-left-color: #fff;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-form .btn {
|
|
||||||
color: #999;
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 2px;
|
|
||||||
border-bottom-right-radius: 2px;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
.skin-blue.layout-top-nav .main-header > .logo .logo-variant {
|
|
||||||
background-color: unset;
|
|
||||||
}
|
|
||||||
.btn.btn-primary,
|
|
||||||
btn-sm.btn-primary,
|
|
||||||
.btn:hover.btn-primary,
|
|
||||||
.btn .btn-primary:link,
|
|
||||||
btn-sm .btn-primary:link,
|
|
||||||
.btn:hover .btn-primary:link {
|
|
||||||
background-color: #307095;
|
|
||||||
border-color: #23536f;
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
.btna.btn-primary:hover,
|
|
||||||
btn-sma.btn-primary:hover,
|
|
||||||
.btn:hovera.btn-primary:hover {
|
|
||||||
background-color: #23536f;
|
|
||||||
border-color: #23536f;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:link,
|
|
||||||
btn-sm.btn-white:link,
|
|
||||||
.btn:hover.btn-white:link {
|
|
||||||
background-color: #307095;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:hover,
|
|
||||||
btn-sm.btn-white:hover,
|
|
||||||
.btn:hover.btn-white:hover {
|
|
||||||
background-color: #173648;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:visited,
|
|
||||||
btn-sm.btn-white:visited,
|
|
||||||
.btn:hover.btn-white:visited {
|
|
||||||
background-color: #173648;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn-warning,
|
|
||||||
.btn-warning:link,
|
|
||||||
a.btn-warning:hover,
|
|
||||||
.btn-warning:link,
|
|
||||||
.btn-warning:visited,
|
|
||||||
.btn-danger,
|
|
||||||
.btn-danger:link,
|
|
||||||
a.btn-danger:hover,
|
|
||||||
.btn-danger:link,
|
|
||||||
.btn-danger:visited {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn-default:link,
|
|
||||||
a.btn-default:hover,
|
|
||||||
.btn-default:visited {
|
|
||||||
color: #505156;
|
|
||||||
}
|
|
||||||
:root {
|
|
||||||
--button-default: #505156;
|
|
||||||
--button-primary: #1d455b;
|
|
||||||
--button-hover: #173648;
|
|
||||||
--header: #3c8dbc;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--text-main: #BBB;
|
|
||||||
--text-sub: #9b9b9b;
|
|
||||||
--link: #296282;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--visited-link: #5fa4cc;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--hover-link: #86bad8;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--nav-link: #FFF;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--light-link: #fff;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
}
|
|
||||||
a.btn-info:link,
|
|
||||||
a.btn-warning:link,
|
|
||||||
a.btn-danger:link {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
a.btn-info:visited,
|
|
||||||
a.btn-warning:visited,
|
|
||||||
a.btn-danger:visited {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
a:link {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: var(--visited-link);
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: var(--hover-link);
|
|
||||||
}
|
|
||||||
.text-primary {
|
|
||||||
color: #23536f;
|
|
||||||
}
|
|
||||||
.far fa-life-ring {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
.fixed-table-container tbody .selected td {
|
|
||||||
background-color: #fff8af;
|
|
||||||
}
|
|
||||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
|
||||||
background-color: #3c8dbc;
|
|
||||||
}
|
|
||||||
.search-highlight,
|
|
||||||
.search-highlight:hover {
|
|
||||||
background-color: #e9d15b;
|
|
||||||
}
|
|
||||||
a.settings_button:link,
|
|
||||||
a.settings_button:visited,
|
|
||||||
a.settings_button:hover {
|
|
||||||
color: #3c8dbc;
|
|
||||||
}
|
|
||||||
a.label.label-default:link {
|
|
||||||
color: #307095;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
}
|
|
||||||
a.label.label-default:visited {
|
|
||||||
color: #23536f;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
}
|
|
||||||
a.label.label-default:hover {
|
|
||||||
background-color: #BBB;
|
|
||||||
color: #296282;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*# sourceMappingURL=skin-blue.css.map*/
|
/*# sourceMappingURL=skin-blue.css.map*/
|
||||||
2
public/css/dist/skins/skin-blue.css.map
vendored
2
public/css/dist/skins/skin-blue.css.map
vendored
File diff suppressed because one or more lines are too long
254
public/css/dist/skins/skin-blue.min.css
vendored
254
public/css/dist/skins/skin-blue.min.css
vendored
@@ -1,253 +1 @@
|
|||||||
/*
|
.skin-blue .main-header .navbar{background-color:#3c8dbc}.skin-blue .main-header .navbar .nav>li>a{color:#fff}.skin-blue .main-header .navbar .nav .open>a,.skin-blue .main-header .navbar .nav .open>a:focus,.skin-blue .main-header .navbar .nav .open>a:hover,.skin-blue .main-header .navbar .nav>.active>a,.skin-blue .main-header .navbar .nav>li>a:active,.skin-blue .main-header .navbar .nav>li>a:focus,.skin-blue .main-header .navbar .nav>li>a:hover,.skin-blue .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-blue .main-header .navbar .sidebar-toggle{color:#fff}.skin-blue .main-header .navbar .sidebar-toggle:hover{background-color:#367fa9}@media (max-width:767px){.skin-blue .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-blue .main-header .navbar .dropdown-menu li a{color:#333}.skin-blue .main-header .navbar .dropdown-menu li a:hover{background:#367fa9}}.skin-blue .main-header li.user-header{background-color:#3c8dbc}.skin-blue .content-header{background:0 0}.skin-blue .left-side,.skin-blue .main-sidebar,.skin-blue .wrapper{background-color:#222d32}.skin-blue .user-panel>.info,.skin-blue .user-panel>.info>a{color:#fff}.skin-blue .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-blue .sidebar-menu>li>a{border-left:3px solid transparent}.skin-blue .sidebar-menu>li.active>a,.skin-blue .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#3c8dbc;color:#fff}.skin-blue .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-blue .sidebar a{color:#b8c7ce}.skin-blue .sidebar a:hover{text-decoration:none}.skin-blue .treeview-menu>li>a{color:#8aa4af}.skin-blue .treeview-menu>li.active>a,.skin-blue .treeview-menu>li>a:hover{color:#fff}.skin-blue .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-blue .sidebar-form .btn,.skin-blue .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-blue .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-blue .sidebar-form input[type=text]:focus,.skin-blue .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-blue .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-blue .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-blue.layout-top-nav .main-header>.logo .logo-variant{background-color:unset}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary,btn-sm .btn-primary:link,btn-sm.btn-primary{background-color:#307095;border-color:#23536f;color:#fff!important}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover,btn-sma.btn-primary:hover{background-color:#23536f;border-color:#23536f;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link,btn-sm.btn-white:link{background-color:#307095;color:#fff}.btn.btn-white:hover,.btn.btn-white:visited,.btn:hover.btn-white:hover,.btn:hover.btn-white:visited,btn-sm.btn-white:hover,btn-sm.btn-white:visited{background-color:#173648;color:#fff}.btn-danger,.btn-danger:link,.btn-danger:visited,.btn-warning,.btn-warning:link,.btn-warning:visited,a.btn-danger:hover,a.btn-warning:hover{color:#fff}.btn-default:link,.btn-default:visited,a.btn-default:hover{color:#505156}:root{--button-default:#505156;--button-primary:#1d455b;--button-hover:#173648;--header:#3c8dbc;--text-main:#bbb;--text-sub:#9b9b9b;--link:#296282;--visited-link:#5fa4cc;--hover-link:#86bad8;--nav-link:#fff;--light-link:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}a:link{color:var(--link)}a:visited{color:var(--visited-link)}a:hover{color:var(--hover-link)}.text-primary{color:#23536f}.far fa-life-ring{color:var(--link)}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#3c8dbc}.search-highlight,.search-highlight:hover{background-color:#e9d15b}a.settings_button:hover,a.settings_button:link,a.settings_button:visited{color:#3c8dbc}a.label.label-default:link{color:#307095}a.label.label-default:visited{color:#23536f}a.label.label-default:hover{background-color:#bbb;color:#296282}
|
||||||
* Skin: Blue
|
|
||||||
* ----------
|
|
||||||
*/
|
|
||||||
.skin-blue .main-header .navbar {
|
|
||||||
background-color: #3c8dbc;
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .nav > li > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .nav > li > a:hover,
|
|
||||||
.skin-blue .main-header .navbar .nav > li > a:active,
|
|
||||||
.skin-blue .main-header .navbar .nav > li > a:focus,
|
|
||||||
.skin-blue .main-header .navbar .nav .open > a,
|
|
||||||
.skin-blue .main-header .navbar .nav .open > a:hover,
|
|
||||||
.skin-blue .main-header .navbar .nav .open > a:focus,
|
|
||||||
.skin-blue .main-header .navbar .nav > .active > a {
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
color: #f6f6f6;
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
color: #f6f6f6;
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
background-color: #367fa9;
|
|
||||||
}
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
.skin-blue .main-header .navbar .dropdown-menu li.divider {
|
|
||||||
background-color: rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .dropdown-menu li a {
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
.skin-blue .main-header .navbar .dropdown-menu li a:hover {
|
|
||||||
background: #367fa9;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.skin-blue .main-header li.user-header {
|
|
||||||
background-color: #3c8dbc;
|
|
||||||
}
|
|
||||||
.skin-blue .content-header {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
.skin-blue .wrapper,
|
|
||||||
.skin-blue .main-sidebar,
|
|
||||||
.skin-blue .left-side {
|
|
||||||
background-color: #222d32;
|
|
||||||
}
|
|
||||||
.skin-blue .user-panel > .info,
|
|
||||||
.skin-blue .user-panel > .info > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-menu > li.header {
|
|
||||||
color: #4b646f;
|
|
||||||
background: #1a2226;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-menu > li > a {
|
|
||||||
border-left: 3px solid transparent;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-menu > li:hover > a,
|
|
||||||
.skin-blue .sidebar-menu > li.active > a {
|
|
||||||
color: #fff;
|
|
||||||
background: #1e282c;
|
|
||||||
border-left-color: #3c8dbc;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-menu > li > .treeview-menu {
|
|
||||||
margin: 0 1px;
|
|
||||||
background: #2c3b41;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar a {
|
|
||||||
color: #b8c7ce;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.skin-blue .treeview-menu > li > a {
|
|
||||||
color: #8aa4af;
|
|
||||||
}
|
|
||||||
.skin-blue .treeview-menu > li.active > a,
|
|
||||||
.skin-blue .treeview-menu > li > a:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-form {
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid #374850;
|
|
||||||
margin: 10px 10px;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-form input[type="text"],
|
|
||||||
.skin-blue .sidebar-form .btn {
|
|
||||||
box-shadow: none;
|
|
||||||
background-color: #374850;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
height: 35px;
|
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-form input[type="text"] {
|
|
||||||
color: #666;
|
|
||||||
border-top-left-radius: 2px;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
border-bottom-left-radius: 2px;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-form input[type="text"]:focus,
|
|
||||||
.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
background-color: #fff;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
border-left-color: #fff;
|
|
||||||
}
|
|
||||||
.skin-blue .sidebar-form .btn {
|
|
||||||
color: #999;
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 2px;
|
|
||||||
border-bottom-right-radius: 2px;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
.skin-blue.layout-top-nav .main-header > .logo .logo-variant {
|
|
||||||
background-color: unset;
|
|
||||||
}
|
|
||||||
.btn.btn-primary,
|
|
||||||
btn-sm.btn-primary,
|
|
||||||
.btn:hover.btn-primary,
|
|
||||||
.btn .btn-primary:link,
|
|
||||||
btn-sm .btn-primary:link,
|
|
||||||
.btn:hover .btn-primary:link {
|
|
||||||
background-color: #307095;
|
|
||||||
border-color: #23536f;
|
|
||||||
color: #fff !important;
|
|
||||||
}
|
|
||||||
.btna.btn-primary:hover,
|
|
||||||
btn-sma.btn-primary:hover,
|
|
||||||
.btn:hovera.btn-primary:hover {
|
|
||||||
background-color: #23536f;
|
|
||||||
border-color: #23536f;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:link,
|
|
||||||
btn-sm.btn-white:link,
|
|
||||||
.btn:hover.btn-white:link {
|
|
||||||
background-color: #307095;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:hover,
|
|
||||||
btn-sm.btn-white:hover,
|
|
||||||
.btn:hover.btn-white:hover {
|
|
||||||
background-color: #173648;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:visited,
|
|
||||||
btn-sm.btn-white:visited,
|
|
||||||
.btn:hover.btn-white:visited {
|
|
||||||
background-color: #173648;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn-warning,
|
|
||||||
.btn-warning:link,
|
|
||||||
a.btn-warning:hover,
|
|
||||||
.btn-warning:link,
|
|
||||||
.btn-warning:visited,
|
|
||||||
.btn-danger,
|
|
||||||
.btn-danger:link,
|
|
||||||
a.btn-danger:hover,
|
|
||||||
.btn-danger:link,
|
|
||||||
.btn-danger:visited {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn-default:link,
|
|
||||||
a.btn-default:hover,
|
|
||||||
.btn-default:visited {
|
|
||||||
color: #505156;
|
|
||||||
}
|
|
||||||
:root {
|
|
||||||
--button-default: #505156;
|
|
||||||
--button-primary: #1d455b;
|
|
||||||
--button-hover: #173648;
|
|
||||||
--header: #3c8dbc;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--text-main: #BBB;
|
|
||||||
--text-sub: #9b9b9b;
|
|
||||||
--link: #296282;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--visited-link: #5fa4cc;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--hover-link: #86bad8;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--nav-link: #FFF;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--light-link: #fff;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
}
|
|
||||||
a.btn-info:link,
|
|
||||||
a.btn-warning:link,
|
|
||||||
a.btn-danger:link {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
a.btn-info:visited,
|
|
||||||
a.btn-warning:visited,
|
|
||||||
a.btn-danger:visited {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
a:link {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: var(--visited-link);
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: var(--hover-link);
|
|
||||||
}
|
|
||||||
.text-primary {
|
|
||||||
color: #23536f;
|
|
||||||
}
|
|
||||||
.far fa-life-ring {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
.fixed-table-container tbody .selected td {
|
|
||||||
background-color: #fff8af;
|
|
||||||
}
|
|
||||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
|
||||||
background-color: #3c8dbc;
|
|
||||||
}
|
|
||||||
.search-highlight,
|
|
||||||
.search-highlight:hover {
|
|
||||||
background-color: #e9d15b;
|
|
||||||
}
|
|
||||||
a.settings_button:link,
|
|
||||||
a.settings_button:visited,
|
|
||||||
a.settings_button:hover {
|
|
||||||
color: #3c8dbc;
|
|
||||||
}
|
|
||||||
a.label.label-default:link {
|
|
||||||
color: #307095;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
}
|
|
||||||
a.label.label-default:visited {
|
|
||||||
color: #23536f;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
}
|
|
||||||
a.label.label-default:hover {
|
|
||||||
background-color: #BBB;
|
|
||||||
color: #296282;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*# sourceMappingURL=skin-blue.css.map*/
|
|
||||||
|
|||||||
228
public/css/dist/skins/skin-contrast.css
vendored
228
public/css/dist/skins/skin-contrast.css
vendored
@@ -1,229 +1,3 @@
|
|||||||
/*
|
.skin-contrast .main-header .navbar{background-color:#001f3f}.skin-contrast .main-header .navbar .nav>li>a{color:#fff}.skin-contrast .main-header .navbar .nav .open>a,.skin-contrast .main-header .navbar .nav .open>a:focus,.skin-contrast .main-header .navbar .nav .open>a:hover,.skin-contrast .main-header .navbar .nav>.active>a,.skin-contrast .main-header .navbar .nav>li>a:active,.skin-contrast .main-header .navbar .nav>li>a:focus,.skin-contrast .main-header .navbar .nav>li>a:hover,.skin-contrast .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-contrast .main-header .navbar .sidebar-toggle{color:#fff}.skin-contrast .main-header .navbar .sidebar-toggle:hover{background-color:#001226}@media (max-width:767px){.skin-contrast .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-contrast .main-header .navbar .dropdown-menu li a{color:#fff}.skin-contrast .main-header .navbar .dropdown-menu li a:hover{background:#001226}}.skin-contrast .main-header li.user-header{background-color:#001f3f}.skin-contrast .content-header{background:transparent}.skin-contrast .left-side,.skin-contrast .main-sidebar,.skin-contrast .wrapper{background-color:#222d32}.skin-contrast .user-panel>.info,.skin-contrast .user-panel>.info>a{color:#fff}.skin-contrast .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-contrast .sidebar-menu>li>a{border-left:3px solid transparent}.skin-contrast .sidebar-menu>li.active>a,.skin-contrast .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#001f3f;color:#fff}.skin-contrast .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-contrast .sidebar a{color:#b8c7ce}.skin-contrast .sidebar a:hover{text-decoration:none}.skin-contrast .treeview-menu>li>a{color:#8aa4af}.skin-contrast .treeview-menu>li.active>a,.skin-contrast .treeview-menu>li>a:hover{color:#fff}.skin-contrast .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-contrast .sidebar-form .btn,.skin-contrast .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-contrast .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-contrast .sidebar-form input[type=text]:focus,.skin-contrast .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-contrast .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-contrast .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-contrast.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#00060c;border-color:#000;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#000;border-color:#000;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#00060c;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#000;color:#fff}a.btn.btn-link.text-left{border:1px solid #000;color:#001f3f}a,a.btn.btn-link.text-left:hover,a:hover{color:#001f3f}a:hover{text-decoration:underline}a:visited{color:#001f3f}a.btn:hover{color:#fff;text-decoration:underline}.text-primary{color:#000}.skin-contrast .treeview-menu>li>a{color:#fff}.bg-teal{background-color:#1b6a6a!important}.bg-orange{background-color:#995400!important}.bg-purple{background-color:#3a3767!important}.bg-maroon{background-color:#7d1038!important}.pagination>li>a{color:#00060c!important}.pagination>.active>a{background-color:#001f3f;color:#fff!important}btn-success{background-color:#000d07}input::-webkit-input-placeholder{color:#b5bbc8!important}input::-moz-placeholder{color:#b5bbc8!important}input::-ms-input-placeholder{color:#b5bbc8!important}.select2-default,.select2-selection__placeholder{color:#37383c!important}.callout.callout-info{background-color:#23536f!important}.fixed-table-container tbody .selected td{background-color:#fff8af}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
|
||||||
* Skin: Contrast
|
|
||||||
* ----------
|
|
||||||
*/
|
|
||||||
.skin-contrast .main-header .navbar {
|
|
||||||
background-color: #001F3F;
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .nav > li > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .nav > li > a:hover,
|
|
||||||
.skin-contrast .main-header .navbar .nav > li > a:active,
|
|
||||||
.skin-contrast .main-header .navbar .nav > li > a:focus,
|
|
||||||
.skin-contrast .main-header .navbar .nav .open > a,
|
|
||||||
.skin-contrast .main-header .navbar .nav .open > a:hover,
|
|
||||||
.skin-contrast .main-header .navbar .nav .open > a:focus,
|
|
||||||
.skin-contrast .main-header .navbar .nav > .active > a {
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
color: #f6f6f6;
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
color: #f6f6f6;
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
background-color: #001226;
|
|
||||||
}
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
.skin-contrast .main-header .navbar .dropdown-menu li.divider {
|
|
||||||
background-color: rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .dropdown-menu li a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .dropdown-menu li a:hover {
|
|
||||||
background: #001226;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header li.user-header {
|
|
||||||
background-color: #001F3F;
|
|
||||||
}
|
|
||||||
.skin-contrast .content-header {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
.skin-contrast .wrapper,
|
|
||||||
.skin-contrast .main-sidebar,
|
|
||||||
.skin-contrast .left-side {
|
|
||||||
background-color: #222d32;
|
|
||||||
}
|
|
||||||
.skin-contrast .user-panel > .info,
|
|
||||||
.skin-contrast .user-panel > .info > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-menu > li.header {
|
|
||||||
color: #4b646f;
|
|
||||||
background: #1a2226;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-menu > li > a {
|
|
||||||
border-left: 3px solid transparent;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-menu > li:hover > a,
|
|
||||||
.skin-contrast .sidebar-menu > li.active > a {
|
|
||||||
color: #fff;
|
|
||||||
background: #1e282c;
|
|
||||||
border-left-color: #001F3F;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-menu > li > .treeview-menu {
|
|
||||||
margin: 0 1px;
|
|
||||||
background: #2c3b41;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar a {
|
|
||||||
color: #b8c7ce;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.skin-contrast .treeview-menu > li > a {
|
|
||||||
color: #8aa4af;
|
|
||||||
}
|
|
||||||
.skin-contrast .treeview-menu > li.active > a,
|
|
||||||
.skin-contrast .treeview-menu > li > a:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-form {
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid #374850;
|
|
||||||
margin: 10px 10px;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-form input[type="text"],
|
|
||||||
.skin-contrast .sidebar-form .btn {
|
|
||||||
box-shadow: none;
|
|
||||||
background-color: #374850;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
height: 35px;
|
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-form input[type="text"] {
|
|
||||||
color: #666;
|
|
||||||
border-top-left-radius: 2px;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
border-bottom-left-radius: 2px;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-form input[type="text"]:focus,
|
|
||||||
.skin-contrast .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
background-color: #fff;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
border-left-color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-form .btn {
|
|
||||||
color: #999;
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 2px;
|
|
||||||
border-bottom-right-radius: 2px;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
.skin-contrast.layout-top-nav .main-header > .logo .logo-variant {
|
|
||||||
background-color: none;
|
|
||||||
}
|
|
||||||
.btn.btn-primary,
|
|
||||||
.btn:hover.btn-primary,
|
|
||||||
.btn .btn-primary:link,
|
|
||||||
.btn:hover .btn-primary:link {
|
|
||||||
background-color: #00060c;
|
|
||||||
border-color: #000000;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btna.btn-primary:hover,
|
|
||||||
.btn:hovera.btn-primary:hover {
|
|
||||||
background-color: #000000;
|
|
||||||
border-color: #000000;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:link,
|
|
||||||
.btn:hover.btn-white:link {
|
|
||||||
background-color: #00060c;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:hover,
|
|
||||||
.btn:hover.btn-white:hover {
|
|
||||||
background-color: #000000;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
a.btn.btn-link.text-left {
|
|
||||||
color: #001F3F;
|
|
||||||
border: 1px solid #000;
|
|
||||||
}
|
|
||||||
a.btn.btn-link.text-left:hover {
|
|
||||||
color: #001F3F;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: #001F3F;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: #001F3F;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: #001F3F;
|
|
||||||
}
|
|
||||||
a.btn:hover {
|
|
||||||
color: #fff;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
.text-primary {
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
.skin-contrast .treeview-menu > li > a {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
.bg-teal {
|
|
||||||
background-color: #1b6a6a !important;
|
|
||||||
}
|
|
||||||
.bg-orange {
|
|
||||||
background-color: #995400 !important;
|
|
||||||
}
|
|
||||||
.bg-purple {
|
|
||||||
background-color: #3a3767 !important;
|
|
||||||
}
|
|
||||||
.bg-maroon {
|
|
||||||
background-color: #7d1038 !important;
|
|
||||||
}
|
|
||||||
.pagination > li > a {
|
|
||||||
color: #00060c !important;
|
|
||||||
}
|
|
||||||
.pagination > .active > a {
|
|
||||||
background-color: #001F3F;
|
|
||||||
color: #FFF !important;
|
|
||||||
}
|
|
||||||
btn-success {
|
|
||||||
background-color: #000d07;
|
|
||||||
}
|
|
||||||
input::-webkit-input-placeholder {
|
|
||||||
/* Chrome/Opera/Safari */
|
|
||||||
color: #b5bbc8 !important;
|
|
||||||
}
|
|
||||||
input::-moz-placeholder {
|
|
||||||
/* Firefox 19+ */
|
|
||||||
color: #b5bbc8 !important;
|
|
||||||
}
|
|
||||||
input::-ms-input-placeholder {
|
|
||||||
/* IE 10+ */
|
|
||||||
color: #b5bbc8 !important;
|
|
||||||
}
|
|
||||||
.select2-default,
|
|
||||||
.select2-selection__placeholder {
|
|
||||||
color: #37383c !important;
|
|
||||||
}
|
|
||||||
.callout.callout-info {
|
|
||||||
background-color: #23536f !important;
|
|
||||||
}
|
|
||||||
.fixed-table-container tbody .selected td {
|
|
||||||
background-color: #fff8af;
|
|
||||||
}
|
|
||||||
.search-highlight,
|
|
||||||
.search-highlight:hover {
|
|
||||||
background-color: #e9d15b;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*# sourceMappingURL=skin-contrast.css.map*/
|
/*# sourceMappingURL=skin-contrast.css.map*/
|
||||||
2
public/css/dist/skins/skin-contrast.css.map
vendored
2
public/css/dist/skins/skin-contrast.css.map
vendored
File diff suppressed because one or more lines are too long
230
public/css/dist/skins/skin-contrast.min.css
vendored
230
public/css/dist/skins/skin-contrast.min.css
vendored
@@ -1,229 +1 @@
|
|||||||
/*
|
.skin-contrast .main-header .navbar{background-color:#001f3f}.skin-contrast .main-header .navbar .nav>li>a{color:#fff}.skin-contrast .main-header .navbar .nav .open>a,.skin-contrast .main-header .navbar .nav .open>a:focus,.skin-contrast .main-header .navbar .nav .open>a:hover,.skin-contrast .main-header .navbar .nav>.active>a,.skin-contrast .main-header .navbar .nav>li>a:active,.skin-contrast .main-header .navbar .nav>li>a:focus,.skin-contrast .main-header .navbar .nav>li>a:hover,.skin-contrast .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-contrast .main-header .navbar .sidebar-toggle{color:#fff}.skin-contrast .main-header .navbar .sidebar-toggle:hover{background-color:#001226}@media (max-width:767px){.skin-contrast .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-contrast .main-header .navbar .dropdown-menu li a{color:#fff}.skin-contrast .main-header .navbar .dropdown-menu li a:hover{background:#001226}}.skin-contrast .main-header li.user-header{background-color:#001f3f}.skin-contrast .content-header{background:0 0}.skin-contrast .left-side,.skin-contrast .main-sidebar,.skin-contrast .wrapper{background-color:#222d32}.skin-contrast .user-panel>.info,.skin-contrast .user-panel>.info>a{color:#fff}.skin-contrast .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-contrast .sidebar-menu>li>a{border-left:3px solid transparent}.skin-contrast .sidebar-menu>li.active>a,.skin-contrast .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#001f3f;color:#fff}.skin-contrast .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-contrast .sidebar a{color:#b8c7ce}.skin-contrast .sidebar a:hover{text-decoration:none}.skin-contrast .treeview-menu>li>a{color:#8aa4af}.skin-contrast .treeview-menu>li.active>a,.skin-contrast .treeview-menu>li>a:hover{color:#fff}.skin-contrast .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-contrast .sidebar-form .btn,.skin-contrast .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-contrast .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-contrast .sidebar-form input[type=text]:focus,.skin-contrast .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-contrast .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-contrast .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-contrast.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#00060c;border-color:#000;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#000;border-color:#000;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#00060c;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#000;color:#fff}a.btn.btn-link.text-left{border:1px solid #000;color:#001f3f}a,a.btn.btn-link.text-left:hover,a:hover{color:#001f3f}a:hover{text-decoration:underline}a:visited{color:#001f3f}a.btn:hover{color:#fff;text-decoration:underline}.text-primary{color:#000}.skin-contrast .treeview-menu>li>a{color:#fff}.bg-teal{background-color:#1b6a6a!important}.bg-orange{background-color:#995400!important}.bg-purple{background-color:#3a3767!important}.bg-maroon{background-color:#7d1038!important}.pagination>li>a{color:#00060c!important}.pagination>.active>a{background-color:#001f3f;color:#fff!important}btn-success{background-color:#000d07}input::-webkit-input-placeholder{color:#b5bbc8!important}input::-moz-placeholder{color:#b5bbc8!important}input::-ms-input-placeholder{color:#b5bbc8!important}.select2-default,.select2-selection__placeholder{color:#37383c!important}.callout.callout-info{background-color:#23536f!important}.fixed-table-container tbody .selected td{background-color:#fff8af}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
|
||||||
* Skin: Contrast
|
|
||||||
* ----------
|
|
||||||
*/
|
|
||||||
.skin-contrast .main-header .navbar {
|
|
||||||
background-color: #001F3F;
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .nav > li > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .nav > li > a:hover,
|
|
||||||
.skin-contrast .main-header .navbar .nav > li > a:active,
|
|
||||||
.skin-contrast .main-header .navbar .nav > li > a:focus,
|
|
||||||
.skin-contrast .main-header .navbar .nav .open > a,
|
|
||||||
.skin-contrast .main-header .navbar .nav .open > a:hover,
|
|
||||||
.skin-contrast .main-header .navbar .nav .open > a:focus,
|
|
||||||
.skin-contrast .main-header .navbar .nav > .active > a {
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
color: #f6f6f6;
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
color: #f6f6f6;
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
background-color: #001226;
|
|
||||||
}
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
.skin-contrast .main-header .navbar .dropdown-menu li.divider {
|
|
||||||
background-color: rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .dropdown-menu li a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header .navbar .dropdown-menu li a:hover {
|
|
||||||
background: #001226;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.skin-contrast .main-header li.user-header {
|
|
||||||
background-color: #001F3F;
|
|
||||||
}
|
|
||||||
.skin-contrast .content-header {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
.skin-contrast .wrapper,
|
|
||||||
.skin-contrast .main-sidebar,
|
|
||||||
.skin-contrast .left-side {
|
|
||||||
background-color: #222d32;
|
|
||||||
}
|
|
||||||
.skin-contrast .user-panel > .info,
|
|
||||||
.skin-contrast .user-panel > .info > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-menu > li.header {
|
|
||||||
color: #4b646f;
|
|
||||||
background: #1a2226;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-menu > li > a {
|
|
||||||
border-left: 3px solid transparent;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-menu > li:hover > a,
|
|
||||||
.skin-contrast .sidebar-menu > li.active > a {
|
|
||||||
color: #fff;
|
|
||||||
background: #1e282c;
|
|
||||||
border-left-color: #001F3F;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-menu > li > .treeview-menu {
|
|
||||||
margin: 0 1px;
|
|
||||||
background: #2c3b41;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar a {
|
|
||||||
color: #b8c7ce;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.skin-contrast .treeview-menu > li > a {
|
|
||||||
color: #8aa4af;
|
|
||||||
}
|
|
||||||
.skin-contrast .treeview-menu > li.active > a,
|
|
||||||
.skin-contrast .treeview-menu > li > a:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-form {
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid #374850;
|
|
||||||
margin: 10px 10px;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-form input[type="text"],
|
|
||||||
.skin-contrast .sidebar-form .btn {
|
|
||||||
box-shadow: none;
|
|
||||||
background-color: #374850;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
height: 35px;
|
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-form input[type="text"] {
|
|
||||||
color: #666;
|
|
||||||
border-top-left-radius: 2px;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
border-bottom-left-radius: 2px;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-form input[type="text"]:focus,
|
|
||||||
.skin-contrast .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
background-color: #fff;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
border-left-color: #fff;
|
|
||||||
}
|
|
||||||
.skin-contrast .sidebar-form .btn {
|
|
||||||
color: #999;
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 2px;
|
|
||||||
border-bottom-right-radius: 2px;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
.skin-contrast.layout-top-nav .main-header > .logo .logo-variant {
|
|
||||||
background-color: none;
|
|
||||||
}
|
|
||||||
.btn.btn-primary,
|
|
||||||
.btn:hover.btn-primary,
|
|
||||||
.btn .btn-primary:link,
|
|
||||||
.btn:hover .btn-primary:link {
|
|
||||||
background-color: #00060c;
|
|
||||||
border-color: #000000;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btna.btn-primary:hover,
|
|
||||||
.btn:hovera.btn-primary:hover {
|
|
||||||
background-color: #000000;
|
|
||||||
border-color: #000000;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:link,
|
|
||||||
.btn:hover.btn-white:link {
|
|
||||||
background-color: #00060c;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:hover,
|
|
||||||
.btn:hover.btn-white:hover {
|
|
||||||
background-color: #000000;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
a.btn.btn-link.text-left {
|
|
||||||
color: #001F3F;
|
|
||||||
border: 1px solid #000;
|
|
||||||
}
|
|
||||||
a.btn.btn-link.text-left:hover {
|
|
||||||
color: #001F3F;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: #001F3F;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: #001F3F;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: #001F3F;
|
|
||||||
}
|
|
||||||
a.btn:hover {
|
|
||||||
color: #fff;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
.text-primary {
|
|
||||||
color: #000000;
|
|
||||||
}
|
|
||||||
.skin-contrast .treeview-menu > li > a {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
.bg-teal {
|
|
||||||
background-color: #1b6a6a !important;
|
|
||||||
}
|
|
||||||
.bg-orange {
|
|
||||||
background-color: #995400 !important;
|
|
||||||
}
|
|
||||||
.bg-purple {
|
|
||||||
background-color: #3a3767 !important;
|
|
||||||
}
|
|
||||||
.bg-maroon {
|
|
||||||
background-color: #7d1038 !important;
|
|
||||||
}
|
|
||||||
.pagination > li > a {
|
|
||||||
color: #00060c !important;
|
|
||||||
}
|
|
||||||
.pagination > .active > a {
|
|
||||||
background-color: #001F3F;
|
|
||||||
color: #FFF !important;
|
|
||||||
}
|
|
||||||
btn-success {
|
|
||||||
background-color: #000d07;
|
|
||||||
}
|
|
||||||
input::-webkit-input-placeholder {
|
|
||||||
/* Chrome/Opera/Safari */
|
|
||||||
color: #b5bbc8 !important;
|
|
||||||
}
|
|
||||||
input::-moz-placeholder {
|
|
||||||
/* Firefox 19+ */
|
|
||||||
color: #b5bbc8 !important;
|
|
||||||
}
|
|
||||||
input::-ms-input-placeholder {
|
|
||||||
/* IE 10+ */
|
|
||||||
color: #b5bbc8 !important;
|
|
||||||
}
|
|
||||||
.select2-default,
|
|
||||||
.select2-selection__placeholder {
|
|
||||||
color: #37383c !important;
|
|
||||||
}
|
|
||||||
.callout.callout-info {
|
|
||||||
background-color: #23536f !important;
|
|
||||||
}
|
|
||||||
.fixed-table-container tbody .selected td {
|
|
||||||
background-color: #fff8af;
|
|
||||||
}
|
|
||||||
.search-highlight,
|
|
||||||
.search-highlight:hover {
|
|
||||||
background-color: #e9d15b;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*# sourceMappingURL=skin-contrast.css.map*/
|
|
||||||
|
|||||||
527
public/css/dist/skins/skin-green-dark.css
vendored
527
public/css/dist/skins/skin-green-dark.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
529
public/css/dist/skins/skin-green-dark.min.css
vendored
529
public/css/dist/skins/skin-green-dark.min.css
vendored
File diff suppressed because one or more lines are too long
212
public/css/dist/skins/skin-green.css
vendored
212
public/css/dist/skins/skin-green.css
vendored
@@ -1,213 +1,3 @@
|
|||||||
/*
|
:root{--background:#222;--back-main:#333;--back-sub:#3d4144;--back-sub-alt:rgba(0,0,0,.36);--button-default:#005a31;--button-primary:#002715;--button-hover:#000d07;--header:#00a65a;--text-main:#bbb;--text-sub:#9b9b9b;--link:#00a65a;--visited-link:#00f383;--hover-link:#0dff90}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav>.active>a,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#333}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:transparent}.skin-green .left-side,.skin-green .main-sidebar,.skin-green .wrapper{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#00a65a;color:#fff}.skin-green .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .treeview-menu>li>a{color:#8aa4af}.skin-green .treeview-menu>li.active>a,.skin-green .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-green .sidebar-form .btn,.skin-green .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-green .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-green .sidebar-form input[type=text]:focus,.skin-green .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-green.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#00733e;border-color:#004023;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#004023;border-color:#004023;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#00733e;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#000d07;color:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}a:link{color:var(--link)}a:visited{color:var(--visited-link)}a{color:#00a65a}a:hover{color:#004023}a:visited{color:#00a65a}.text-primary{color:#004023}.far fa-life-ring{color:var(--link)}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#00a65a}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
|
||||||
* Skin: Green
|
|
||||||
* ----------
|
|
||||||
*/
|
|
||||||
:root {
|
|
||||||
--background: #222;
|
|
||||||
--back-main: #333;
|
|
||||||
--back-sub: #3d4144;
|
|
||||||
--back-sub-alt: rgba(0, 0, 0, 0.36);
|
|
||||||
--button-default: #005a31;
|
|
||||||
--button-primary: #002715;
|
|
||||||
--button-hover: #000d07;
|
|
||||||
--header: #00a65a;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--text-main: #BBB;
|
|
||||||
--text-sub: #9b9b9b;
|
|
||||||
--link: #00a65a;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--visited-link: #00f383;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--hover-link: #0dff90;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar {
|
|
||||||
background-color: #00a65a;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .nav > li > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .nav > li > a:hover,
|
|
||||||
.skin-green .main-header .navbar .nav > li > a:active,
|
|
||||||
.skin-green .main-header .navbar .nav > li > a:focus,
|
|
||||||
.skin-green .main-header .navbar .nav .open > a,
|
|
||||||
.skin-green .main-header .navbar .nav .open > a:hover,
|
|
||||||
.skin-green .main-header .navbar .nav .open > a:focus,
|
|
||||||
.skin-green .main-header .navbar .nav > .active > a {
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
color: #f6f6f6;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
color: #f6f6f6;
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
background-color: #008d4c;
|
|
||||||
}
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
.skin-green .main-header .navbar .dropdown-menu li.divider {
|
|
||||||
background-color: rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .dropdown-menu li a {
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .dropdown-menu li a:hover {
|
|
||||||
background: #008d4c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.skin-green .main-header li.user-header {
|
|
||||||
background-color: #00a65a;
|
|
||||||
}
|
|
||||||
.skin-green .content-header {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
.skin-green .wrapper,
|
|
||||||
.skin-green .main-sidebar,
|
|
||||||
.skin-green .left-side {
|
|
||||||
background-color: #222d32;
|
|
||||||
}
|
|
||||||
.skin-green .user-panel > .info,
|
|
||||||
.skin-green .user-panel > .info > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-menu > li.header {
|
|
||||||
color: #4b646f;
|
|
||||||
background: #1a2226;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-menu > li > a {
|
|
||||||
border-left: 3px solid transparent;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-menu > li:hover > a,
|
|
||||||
.skin-green .sidebar-menu > li.active > a {
|
|
||||||
color: #fff;
|
|
||||||
background: #1e282c;
|
|
||||||
border-left-color: #00a65a;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-menu > li > .treeview-menu {
|
|
||||||
margin: 0 1px;
|
|
||||||
background: #2c3b41;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar a {
|
|
||||||
color: #b8c7ce;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.skin-green .treeview-menu > li > a {
|
|
||||||
color: #8aa4af;
|
|
||||||
}
|
|
||||||
.skin-green .treeview-menu > li.active > a,
|
|
||||||
.skin-green .treeview-menu > li > a:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-form {
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid #374850;
|
|
||||||
margin: 10px 10px;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-form input[type="text"],
|
|
||||||
.skin-green .sidebar-form .btn {
|
|
||||||
box-shadow: none;
|
|
||||||
background-color: #374850;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
height: 35px;
|
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-form input[type="text"] {
|
|
||||||
color: #666;
|
|
||||||
border-top-left-radius: 2px;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
border-bottom-left-radius: 2px;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-form input[type="text"]:focus,
|
|
||||||
.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
background-color: #fff;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
border-left-color: #fff;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-form .btn {
|
|
||||||
color: #999;
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 2px;
|
|
||||||
border-bottom-right-radius: 2px;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
.skin-green.layout-top-nav .main-header > .logo .logo-variant {
|
|
||||||
background-color: none;
|
|
||||||
}
|
|
||||||
.btn.btn-primary,
|
|
||||||
.btn:hover.btn-primary,
|
|
||||||
.btn .btn-primary:link,
|
|
||||||
.btn:hover .btn-primary:link {
|
|
||||||
background-color: #00733e;
|
|
||||||
border-color: #004023;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btna.btn-primary:hover,
|
|
||||||
.btn:hovera.btn-primary:hover {
|
|
||||||
background-color: #004023;
|
|
||||||
border-color: #004023;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:link,
|
|
||||||
.btn:hover.btn-white:link {
|
|
||||||
background-color: #00733e;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:hover,
|
|
||||||
.btn:hover.btn-white:hover {
|
|
||||||
background-color: #000d07;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
a.btn-info:link,
|
|
||||||
a.btn-warning:link,
|
|
||||||
a.btn-danger:link {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
a.btn-info:visited,
|
|
||||||
a.btn-warning:visited,
|
|
||||||
a.btn-danger:visited {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
a:link {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: var(--visited-link);
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: #00a65a;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: #004023;
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: #00a65a;
|
|
||||||
}
|
|
||||||
.text-primary {
|
|
||||||
color: #004023;
|
|
||||||
}
|
|
||||||
.far fa-life-ring {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
.fixed-table-container tbody .selected td {
|
|
||||||
background-color: #fff8af;
|
|
||||||
}
|
|
||||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
|
||||||
background-color: #00a65a;
|
|
||||||
}
|
|
||||||
.search-highlight,
|
|
||||||
.search-highlight:hover {
|
|
||||||
background-color: #e9d15b;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*# sourceMappingURL=skin-green.css.map*/
|
/*# sourceMappingURL=skin-green.css.map*/
|
||||||
2
public/css/dist/skins/skin-green.css.map
vendored
2
public/css/dist/skins/skin-green.css.map
vendored
File diff suppressed because one or more lines are too long
214
public/css/dist/skins/skin-green.min.css
vendored
214
public/css/dist/skins/skin-green.min.css
vendored
@@ -1,213 +1 @@
|
|||||||
/*
|
:root{--background:#222;--back-main:#333;--back-sub:#3d4144;--back-sub-alt:rgba(0,0,0,.36);--button-default:#005a31;--button-primary:#002715;--button-hover:#000d07;--header:#00a65a;--text-main:#bbb;--text-sub:#9b9b9b;--link:#00a65a;--visited-link:#00f383;--hover-link:#0dff90}.skin-green .main-header .navbar{background-color:#00a65a}.skin-green .main-header .navbar .nav>li>a{color:#fff}.skin-green .main-header .navbar .nav .open>a,.skin-green .main-header .navbar .nav .open>a:focus,.skin-green .main-header .navbar .nav .open>a:hover,.skin-green .main-header .navbar .nav>.active>a,.skin-green .main-header .navbar .nav>li>a:active,.skin-green .main-header .navbar .nav>li>a:focus,.skin-green .main-header .navbar .nav>li>a:hover,.skin-green .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-green .main-header .navbar .sidebar-toggle{color:#fff}.skin-green .main-header .navbar .sidebar-toggle:hover{background-color:#008d4c}@media (max-width:767px){.skin-green .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-green .main-header .navbar .dropdown-menu li a{color:#333}.skin-green .main-header .navbar .dropdown-menu li a:hover{background:#008d4c}}.skin-green .main-header li.user-header{background-color:#00a65a}.skin-green .content-header{background:0 0}.skin-green .left-side,.skin-green .main-sidebar,.skin-green .wrapper{background-color:#222d32}.skin-green .user-panel>.info,.skin-green .user-panel>.info>a{color:#fff}.skin-green .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-green .sidebar-menu>li>a{border-left:3px solid transparent}.skin-green .sidebar-menu>li.active>a,.skin-green .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#00a65a;color:#fff}.skin-green .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-green .sidebar a{color:#b8c7ce}.skin-green .sidebar a:hover{text-decoration:none}.skin-green .treeview-menu>li>a{color:#8aa4af}.skin-green .treeview-menu>li.active>a,.skin-green .treeview-menu>li>a:hover{color:#fff}.skin-green .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-green .sidebar-form .btn,.skin-green .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-green .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-green .sidebar-form input[type=text]:focus,.skin-green .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-green .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-green .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-green.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#00733e;border-color:#004023;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#004023;border-color:#004023;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#00733e;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#000d07;color:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}a:link{color:var(--link)}a:visited{color:var(--visited-link)}a{color:#00a65a}a:hover{color:#004023}a:visited{color:#00a65a}.text-primary{color:#004023}.far fa-life-ring{color:var(--link)}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#00a65a}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
|
||||||
* Skin: Green
|
|
||||||
* ----------
|
|
||||||
*/
|
|
||||||
:root {
|
|
||||||
--background: #222;
|
|
||||||
--back-main: #333;
|
|
||||||
--back-sub: #3d4144;
|
|
||||||
--back-sub-alt: rgba(0, 0, 0, 0.36);
|
|
||||||
--button-default: #005a31;
|
|
||||||
--button-primary: #002715;
|
|
||||||
--button-hover: #000d07;
|
|
||||||
--header: #00a65a;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--text-main: #BBB;
|
|
||||||
--text-sub: #9b9b9b;
|
|
||||||
--link: #00a65a;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--visited-link: #00f383;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--hover-link: #0dff90;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar {
|
|
||||||
background-color: #00a65a;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .nav > li > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .nav > li > a:hover,
|
|
||||||
.skin-green .main-header .navbar .nav > li > a:active,
|
|
||||||
.skin-green .main-header .navbar .nav > li > a:focus,
|
|
||||||
.skin-green .main-header .navbar .nav .open > a,
|
|
||||||
.skin-green .main-header .navbar .nav .open > a:hover,
|
|
||||||
.skin-green .main-header .navbar .nav .open > a:focus,
|
|
||||||
.skin-green .main-header .navbar .nav > .active > a {
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
color: #f6f6f6;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
color: #f6f6f6;
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
background-color: #008d4c;
|
|
||||||
}
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
.skin-green .main-header .navbar .dropdown-menu li.divider {
|
|
||||||
background-color: rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .dropdown-menu li a {
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
.skin-green .main-header .navbar .dropdown-menu li a:hover {
|
|
||||||
background: #008d4c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.skin-green .main-header li.user-header {
|
|
||||||
background-color: #00a65a;
|
|
||||||
}
|
|
||||||
.skin-green .content-header {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
.skin-green .wrapper,
|
|
||||||
.skin-green .main-sidebar,
|
|
||||||
.skin-green .left-side {
|
|
||||||
background-color: #222d32;
|
|
||||||
}
|
|
||||||
.skin-green .user-panel > .info,
|
|
||||||
.skin-green .user-panel > .info > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-menu > li.header {
|
|
||||||
color: #4b646f;
|
|
||||||
background: #1a2226;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-menu > li > a {
|
|
||||||
border-left: 3px solid transparent;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-menu > li:hover > a,
|
|
||||||
.skin-green .sidebar-menu > li.active > a {
|
|
||||||
color: #fff;
|
|
||||||
background: #1e282c;
|
|
||||||
border-left-color: #00a65a;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-menu > li > .treeview-menu {
|
|
||||||
margin: 0 1px;
|
|
||||||
background: #2c3b41;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar a {
|
|
||||||
color: #b8c7ce;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.skin-green .treeview-menu > li > a {
|
|
||||||
color: #8aa4af;
|
|
||||||
}
|
|
||||||
.skin-green .treeview-menu > li.active > a,
|
|
||||||
.skin-green .treeview-menu > li > a:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-form {
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid #374850;
|
|
||||||
margin: 10px 10px;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-form input[type="text"],
|
|
||||||
.skin-green .sidebar-form .btn {
|
|
||||||
box-shadow: none;
|
|
||||||
background-color: #374850;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
height: 35px;
|
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-form input[type="text"] {
|
|
||||||
color: #666;
|
|
||||||
border-top-left-radius: 2px;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
border-bottom-left-radius: 2px;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-form input[type="text"]:focus,
|
|
||||||
.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
background-color: #fff;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
border-left-color: #fff;
|
|
||||||
}
|
|
||||||
.skin-green .sidebar-form .btn {
|
|
||||||
color: #999;
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 2px;
|
|
||||||
border-bottom-right-radius: 2px;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
.skin-green.layout-top-nav .main-header > .logo .logo-variant {
|
|
||||||
background-color: none;
|
|
||||||
}
|
|
||||||
.btn.btn-primary,
|
|
||||||
.btn:hover.btn-primary,
|
|
||||||
.btn .btn-primary:link,
|
|
||||||
.btn:hover .btn-primary:link {
|
|
||||||
background-color: #00733e;
|
|
||||||
border-color: #004023;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btna.btn-primary:hover,
|
|
||||||
.btn:hovera.btn-primary:hover {
|
|
||||||
background-color: #004023;
|
|
||||||
border-color: #004023;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:link,
|
|
||||||
.btn:hover.btn-white:link {
|
|
||||||
background-color: #00733e;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:hover,
|
|
||||||
.btn:hover.btn-white:hover {
|
|
||||||
background-color: #000d07;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
a.btn-info:link,
|
|
||||||
a.btn-warning:link,
|
|
||||||
a.btn-danger:link {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
a.btn-info:visited,
|
|
||||||
a.btn-warning:visited,
|
|
||||||
a.btn-danger:visited {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
a:link {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: var(--visited-link);
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: #00a65a;
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: #004023;
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: #00a65a;
|
|
||||||
}
|
|
||||||
.text-primary {
|
|
||||||
color: #004023;
|
|
||||||
}
|
|
||||||
.far fa-life-ring {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
.fixed-table-container tbody .selected td {
|
|
||||||
background-color: #fff8af;
|
|
||||||
}
|
|
||||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
|
||||||
background-color: #00a65a;
|
|
||||||
}
|
|
||||||
.search-highlight,
|
|
||||||
.search-highlight:hover {
|
|
||||||
background-color: #e9d15b;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*# sourceMappingURL=skin-green.css.map*/
|
|
||||||
|
|||||||
528
public/css/dist/skins/skin-orange-dark.css
vendored
528
public/css/dist/skins/skin-orange-dark.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
530
public/css/dist/skins/skin-orange-dark.min.css
vendored
530
public/css/dist/skins/skin-orange-dark.min.css
vendored
File diff suppressed because one or more lines are too long
207
public/css/dist/skins/skin-orange.css
vendored
207
public/css/dist/skins/skin-orange.css
vendored
@@ -1,208 +1,3 @@
|
|||||||
/*
|
.skin-orange .main-header .navbar{background-color:#ff8c00}.skin-orange .main-header .navbar .nav>li>a{color:#fff}.skin-orange .main-header .navbar .nav .open>a,.skin-orange .main-header .navbar .nav .open>a:focus,.skin-orange .main-header .navbar .nav .open>a:hover,.skin-orange .main-header .navbar .nav>.active>a,.skin-orange .main-header .navbar .nav>li>a:active,.skin-orange .main-header .navbar .nav>li>a:focus,.skin-orange .main-header .navbar .nav>li>a:hover,.skin-orange .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-orange .main-header .navbar .sidebar-toggle{color:#fff}.skin-orange .main-header .navbar .sidebar-toggle:hover{background-color:#e67e00}@media (max-width:767px){.skin-orange .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-orange .main-header .navbar .dropdown-menu li a{color:#333}.skin-orange .main-header .navbar .dropdown-menu li a:hover{background:#e67e00}}.skin-orange .main-header li.user-header{background-color:#ff8c00}.skin-orange .content-header{background:transparent}.skin-orange .left-side,.skin-orange .main-sidebar,.skin-orange .wrapper{background-color:#222d32}.skin-orange .user-panel>.info,.skin-orange .user-panel>.info>a{color:#fff}.skin-orange .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-orange .sidebar-menu>li>a{border-left:3px solid transparent}.skin-orange .sidebar-menu>li.active>a,.skin-orange .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#ff8c00;color:#fff}.skin-orange .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-orange .sidebar a{color:#b8c7ce}.skin-orange .sidebar a:hover{text-decoration:none}.skin-orange .treeview-menu>li>a{color:#8aa4af}.skin-orange .treeview-menu>li.active>a,.skin-orange .treeview-menu>li>a:hover{color:#fff}.skin-orange .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-orange .sidebar-form .btn,.skin-orange .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-orange .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-orange .sidebar-form input[type=text]:focus,.skin-orange .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-orange .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-orange .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-orange.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#cc7000;border-color:#995400;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#995400;border-color:#995400;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#cc7000;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#663800;color:#fff}a{color:var(--link)}a:hover{color:var(--hover-link)}a:visited{color:var(--visited-link)}.text-primary{color:#995400}:root{--button-default:#b36200;--button-primary:#804600;--button-hover:#663800;--header:#ff8c00;--text-main:#bbb;--text-sub:#9b9b9b;--link:#ff8c00;--visited-link:#ffa333;--hover-link:#ffaf4d;--nav-link:#fff;--light-link:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}.far fa-life-ring{color:var(--link)}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ff8c00}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
|
||||||
* Skin: Orange
|
|
||||||
* ----------
|
|
||||||
*/
|
|
||||||
.skin-orange .main-header .navbar {
|
|
||||||
background-color: #FF8C00;
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .nav > li > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .nav > li > a:hover,
|
|
||||||
.skin-orange .main-header .navbar .nav > li > a:active,
|
|
||||||
.skin-orange .main-header .navbar .nav > li > a:focus,
|
|
||||||
.skin-orange .main-header .navbar .nav .open > a,
|
|
||||||
.skin-orange .main-header .navbar .nav .open > a:hover,
|
|
||||||
.skin-orange .main-header .navbar .nav .open > a:focus,
|
|
||||||
.skin-orange .main-header .navbar .nav > .active > a {
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
color: #f6f6f6;
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
color: #f6f6f6;
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
background-color: #e67e00;
|
|
||||||
}
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
.skin-orange .main-header .navbar .dropdown-menu li.divider {
|
|
||||||
background-color: rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .dropdown-menu li a {
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .dropdown-menu li a:hover {
|
|
||||||
background: #e67e00;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.skin-orange .main-header li.user-header {
|
|
||||||
background-color: #FF8C00;
|
|
||||||
}
|
|
||||||
.skin-orange .content-header {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
.skin-orange .wrapper,
|
|
||||||
.skin-orange .main-sidebar,
|
|
||||||
.skin-orange .left-side {
|
|
||||||
background-color: #222d32;
|
|
||||||
}
|
|
||||||
.skin-orange .user-panel > .info,
|
|
||||||
.skin-orange .user-panel > .info > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-menu > li.header {
|
|
||||||
color: #4b646f;
|
|
||||||
background: #1a2226;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-menu > li > a {
|
|
||||||
border-left: 3px solid transparent;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-menu > li:hover > a,
|
|
||||||
.skin-orange .sidebar-menu > li.active > a {
|
|
||||||
color: #fff;
|
|
||||||
background: #1e282c;
|
|
||||||
border-left-color: #FF8C00;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-menu > li > .treeview-menu {
|
|
||||||
margin: 0 1px;
|
|
||||||
background: #2c3b41;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar a {
|
|
||||||
color: #b8c7ce;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.skin-orange .treeview-menu > li > a {
|
|
||||||
color: #8aa4af;
|
|
||||||
}
|
|
||||||
.skin-orange .treeview-menu > li.active > a,
|
|
||||||
.skin-orange .treeview-menu > li > a:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-form {
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid #374850;
|
|
||||||
margin: 10px 10px;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-form input[type="text"],
|
|
||||||
.skin-orange .sidebar-form .btn {
|
|
||||||
box-shadow: none;
|
|
||||||
background-color: #374850;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
height: 35px;
|
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-form input[type="text"] {
|
|
||||||
color: #666;
|
|
||||||
border-top-left-radius: 2px;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
border-bottom-left-radius: 2px;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-form input[type="text"]:focus,
|
|
||||||
.skin-orange .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
background-color: #fff;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
border-left-color: #fff;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-form .btn {
|
|
||||||
color: #999;
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 2px;
|
|
||||||
border-bottom-right-radius: 2px;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
.skin-orange.layout-top-nav .main-header > .logo .logo-variant {
|
|
||||||
background-color: none;
|
|
||||||
}
|
|
||||||
.btn.btn-primary,
|
|
||||||
.btn:hover.btn-primary,
|
|
||||||
.btn .btn-primary:link,
|
|
||||||
.btn:hover .btn-primary:link {
|
|
||||||
background-color: #cc7000;
|
|
||||||
border-color: #995400;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btna.btn-primary:hover,
|
|
||||||
.btn:hovera.btn-primary:hover {
|
|
||||||
background-color: #995400;
|
|
||||||
border-color: #995400;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:link,
|
|
||||||
.btn:hover.btn-white:link {
|
|
||||||
background-color: #cc7000;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:hover,
|
|
||||||
.btn:hover.btn-white:hover {
|
|
||||||
background-color: #663800;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: var(--hover-link);
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: var(--visited-link);
|
|
||||||
}
|
|
||||||
.text-primary {
|
|
||||||
color: #995400;
|
|
||||||
}
|
|
||||||
:root {
|
|
||||||
--button-default: #b36200;
|
|
||||||
--button-primary: #804600;
|
|
||||||
--button-hover: #663800;
|
|
||||||
--header: #FF8C00;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--text-main: #BBB;
|
|
||||||
--text-sub: #9b9b9b;
|
|
||||||
--link: #FF8C00;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--visited-link: #ffa333;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--hover-link: #ffaf4d;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--nav-link: #FFF;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--light-link: #fff;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
}
|
|
||||||
a.btn-info:link,
|
|
||||||
a.btn-warning:link,
|
|
||||||
a.btn-danger:link {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
a.btn-info:visited,
|
|
||||||
a.btn-warning:visited,
|
|
||||||
a.btn-danger:visited {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
.far fa-life-ring {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
.fixed-table-container tbody .selected td {
|
|
||||||
background-color: #fff8af;
|
|
||||||
}
|
|
||||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
|
||||||
background-color: #FF8C00;
|
|
||||||
}
|
|
||||||
.search-highlight,
|
|
||||||
.search-highlight:hover {
|
|
||||||
background-color: #e9d15b;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*# sourceMappingURL=skin-orange.css.map*/
|
/*# sourceMappingURL=skin-orange.css.map*/
|
||||||
2
public/css/dist/skins/skin-orange.css.map
vendored
2
public/css/dist/skins/skin-orange.css.map
vendored
File diff suppressed because one or more lines are too long
209
public/css/dist/skins/skin-orange.min.css
vendored
209
public/css/dist/skins/skin-orange.min.css
vendored
@@ -1,208 +1 @@
|
|||||||
/*
|
.skin-orange .main-header .navbar{background-color:#ff8c00}.skin-orange .main-header .navbar .nav>li>a{color:#fff}.skin-orange .main-header .navbar .nav .open>a,.skin-orange .main-header .navbar .nav .open>a:focus,.skin-orange .main-header .navbar .nav .open>a:hover,.skin-orange .main-header .navbar .nav>.active>a,.skin-orange .main-header .navbar .nav>li>a:active,.skin-orange .main-header .navbar .nav>li>a:focus,.skin-orange .main-header .navbar .nav>li>a:hover,.skin-orange .main-header .navbar .sidebar-toggle:hover{background:rgba(0,0,0,.1);color:#f6f6f6}.skin-orange .main-header .navbar .sidebar-toggle{color:#fff}.skin-orange .main-header .navbar .sidebar-toggle:hover{background-color:#e67e00}@media (max-width:767px){.skin-orange .main-header .navbar .dropdown-menu li.divider{background-color:hsla(0,0%,100%,.1)}.skin-orange .main-header .navbar .dropdown-menu li a{color:#333}.skin-orange .main-header .navbar .dropdown-menu li a:hover{background:#e67e00}}.skin-orange .main-header li.user-header{background-color:#ff8c00}.skin-orange .content-header{background:0 0}.skin-orange .left-side,.skin-orange .main-sidebar,.skin-orange .wrapper{background-color:#222d32}.skin-orange .user-panel>.info,.skin-orange .user-panel>.info>a{color:#fff}.skin-orange .sidebar-menu>li.header{background:#1a2226;color:#4b646f}.skin-orange .sidebar-menu>li>a{border-left:3px solid transparent}.skin-orange .sidebar-menu>li.active>a,.skin-orange .sidebar-menu>li:hover>a{background:#1e282c;border-left-color:#ff8c00;color:#fff}.skin-orange .sidebar-menu>li>.treeview-menu{background:#2c3b41;margin:0 1px}.skin-orange .sidebar a{color:#b8c7ce}.skin-orange .sidebar a:hover{text-decoration:none}.skin-orange .treeview-menu>li>a{color:#8aa4af}.skin-orange .treeview-menu>li.active>a,.skin-orange .treeview-menu>li>a:hover{color:#fff}.skin-orange .sidebar-form{border:1px solid #374850;border-radius:3px;margin:10px}.skin-orange .sidebar-form .btn,.skin-orange .sidebar-form input[type=text]{background-color:#374850;border:1px solid transparent;box-shadow:none;height:35px;transition:all .3s ease-in-out}.skin-orange .sidebar-form input[type=text]{border-bottom-left-radius:2px;border-bottom-right-radius:0;border-top-left-radius:2px;border-top-right-radius:0;color:#666}.skin-orange .sidebar-form input[type=text]:focus,.skin-orange .sidebar-form input[type=text]:focus+.input-group-btn .btn{background-color:#fff;color:#666}.skin-orange .sidebar-form input[type=text]:focus+.input-group-btn .btn{border-left-color:#fff}.skin-orange .sidebar-form .btn{border-bottom-left-radius:0;border-bottom-right-radius:2px;border-top-left-radius:0;border-top-right-radius:2px;color:#999}.skin-orange.layout-top-nav .main-header>.logo .logo-variant{background-color:none}.btn .btn-primary:link,.btn.btn-primary,.btn:hover .btn-primary:link,.btn:hover.btn-primary{background-color:#cc7000;border-color:#995400;color:#fff}.btn:hovera.btn-primary:hover,.btna.btn-primary:hover{background-color:#995400;border-color:#995400;color:#fff}.btn.btn-white:link,.btn:hover.btn-white:link{background-color:#cc7000;color:#fff}.btn.btn-white:hover,.btn:hover.btn-white:hover{background-color:#663800;color:#fff}a{color:var(--link)}a:hover{color:var(--hover-link)}a:visited{color:var(--visited-link)}.text-primary{color:#995400}:root{--button-default:#b36200;--button-primary:#804600;--button-hover:#663800;--header:#ff8c00;--text-main:#bbb;--text-sub:#9b9b9b;--link:#ff8c00;--visited-link:#ffa333;--hover-link:#ffaf4d;--nav-link:#fff;--light-link:#fff}a.btn-danger:link,a.btn-danger:visited,a.btn-info:link,a.btn-info:visited,a.btn-warning:link,a.btn-warning:visited{color:#fff}.far fa-life-ring{color:var(--link)}.fixed-table-container tbody .selected td{background-color:#fff8af}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#ff8c00}.search-highlight,.search-highlight:hover{background-color:#e9d15b}
|
||||||
* Skin: Orange
|
|
||||||
* ----------
|
|
||||||
*/
|
|
||||||
.skin-orange .main-header .navbar {
|
|
||||||
background-color: #FF8C00;
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .nav > li > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .nav > li > a:hover,
|
|
||||||
.skin-orange .main-header .navbar .nav > li > a:active,
|
|
||||||
.skin-orange .main-header .navbar .nav > li > a:focus,
|
|
||||||
.skin-orange .main-header .navbar .nav .open > a,
|
|
||||||
.skin-orange .main-header .navbar .nav .open > a:hover,
|
|
||||||
.skin-orange .main-header .navbar .nav .open > a:focus,
|
|
||||||
.skin-orange .main-header .navbar .nav > .active > a {
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
color: #f6f6f6;
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
color: #f6f6f6;
|
|
||||||
background: rgba(0, 0, 0, 0.1);
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .sidebar-toggle {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .sidebar-toggle:hover {
|
|
||||||
background-color: #e67e00;
|
|
||||||
}
|
|
||||||
@media (max-width: 767px) {
|
|
||||||
.skin-orange .main-header .navbar .dropdown-menu li.divider {
|
|
||||||
background-color: rgba(255, 255, 255, 0.1);
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .dropdown-menu li a {
|
|
||||||
color: #333;
|
|
||||||
}
|
|
||||||
.skin-orange .main-header .navbar .dropdown-menu li a:hover {
|
|
||||||
background: #e67e00;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.skin-orange .main-header li.user-header {
|
|
||||||
background-color: #FF8C00;
|
|
||||||
}
|
|
||||||
.skin-orange .content-header {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
.skin-orange .wrapper,
|
|
||||||
.skin-orange .main-sidebar,
|
|
||||||
.skin-orange .left-side {
|
|
||||||
background-color: #222d32;
|
|
||||||
}
|
|
||||||
.skin-orange .user-panel > .info,
|
|
||||||
.skin-orange .user-panel > .info > a {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-menu > li.header {
|
|
||||||
color: #4b646f;
|
|
||||||
background: #1a2226;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-menu > li > a {
|
|
||||||
border-left: 3px solid transparent;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-menu > li:hover > a,
|
|
||||||
.skin-orange .sidebar-menu > li.active > a {
|
|
||||||
color: #fff;
|
|
||||||
background: #1e282c;
|
|
||||||
border-left-color: #FF8C00;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-menu > li > .treeview-menu {
|
|
||||||
margin: 0 1px;
|
|
||||||
background: #2c3b41;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar a {
|
|
||||||
color: #b8c7ce;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar a:hover {
|
|
||||||
text-decoration: none;
|
|
||||||
}
|
|
||||||
.skin-orange .treeview-menu > li > a {
|
|
||||||
color: #8aa4af;
|
|
||||||
}
|
|
||||||
.skin-orange .treeview-menu > li.active > a,
|
|
||||||
.skin-orange .treeview-menu > li > a:hover {
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-form {
|
|
||||||
border-radius: 3px;
|
|
||||||
border: 1px solid #374850;
|
|
||||||
margin: 10px 10px;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-form input[type="text"],
|
|
||||||
.skin-orange .sidebar-form .btn {
|
|
||||||
box-shadow: none;
|
|
||||||
background-color: #374850;
|
|
||||||
border: 1px solid transparent;
|
|
||||||
height: 35px;
|
|
||||||
transition: all 0.3s ease-in-out;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-form input[type="text"] {
|
|
||||||
color: #666;
|
|
||||||
border-top-left-radius: 2px;
|
|
||||||
border-top-right-radius: 0;
|
|
||||||
border-bottom-right-radius: 0;
|
|
||||||
border-bottom-left-radius: 2px;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-form input[type="text"]:focus,
|
|
||||||
.skin-orange .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
background-color: #fff;
|
|
||||||
color: #666;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
|
|
||||||
border-left-color: #fff;
|
|
||||||
}
|
|
||||||
.skin-orange .sidebar-form .btn {
|
|
||||||
color: #999;
|
|
||||||
border-top-left-radius: 0;
|
|
||||||
border-top-right-radius: 2px;
|
|
||||||
border-bottom-right-radius: 2px;
|
|
||||||
border-bottom-left-radius: 0;
|
|
||||||
}
|
|
||||||
.skin-orange.layout-top-nav .main-header > .logo .logo-variant {
|
|
||||||
background-color: none;
|
|
||||||
}
|
|
||||||
.btn.btn-primary,
|
|
||||||
.btn:hover.btn-primary,
|
|
||||||
.btn .btn-primary:link,
|
|
||||||
.btn:hover .btn-primary:link {
|
|
||||||
background-color: #cc7000;
|
|
||||||
border-color: #995400;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btna.btn-primary:hover,
|
|
||||||
.btn:hovera.btn-primary:hover {
|
|
||||||
background-color: #995400;
|
|
||||||
border-color: #995400;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:link,
|
|
||||||
.btn:hover.btn-white:link {
|
|
||||||
background-color: #cc7000;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
.btn.btn-white:hover,
|
|
||||||
.btn:hover.btn-white:hover {
|
|
||||||
background-color: #663800;
|
|
||||||
color: #fff;
|
|
||||||
}
|
|
||||||
a {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
a:hover {
|
|
||||||
color: var(--hover-link);
|
|
||||||
}
|
|
||||||
a:visited {
|
|
||||||
color: var(--visited-link);
|
|
||||||
}
|
|
||||||
.text-primary {
|
|
||||||
color: #995400;
|
|
||||||
}
|
|
||||||
:root {
|
|
||||||
--button-default: #b36200;
|
|
||||||
--button-primary: #804600;
|
|
||||||
--button-hover: #663800;
|
|
||||||
--header: #FF8C00;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--text-main: #BBB;
|
|
||||||
--text-sub: #9b9b9b;
|
|
||||||
--link: #FF8C00;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--visited-link: #ffa333;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--hover-link: #ffaf4d;
|
|
||||||
/* Use same as Header picker, lighten by 70% */
|
|
||||||
--nav-link: #FFF;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
--light-link: #fff;
|
|
||||||
/* Use same as Header picker */
|
|
||||||
}
|
|
||||||
a.btn-info:link,
|
|
||||||
a.btn-warning:link,
|
|
||||||
a.btn-danger:link {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
a.btn-info:visited,
|
|
||||||
a.btn-warning:visited,
|
|
||||||
a.btn-danger:visited {
|
|
||||||
color: #FFF;
|
|
||||||
}
|
|
||||||
.far fa-life-ring {
|
|
||||||
color: var(--link);
|
|
||||||
}
|
|
||||||
.fixed-table-container tbody .selected td {
|
|
||||||
background-color: #fff8af;
|
|
||||||
}
|
|
||||||
.select2-container--default .select2-selection--multiple .select2-selection__choice {
|
|
||||||
background-color: #FF8C00;
|
|
||||||
}
|
|
||||||
.search-highlight,
|
|
||||||
.search-highlight:hover {
|
|
||||||
background-color: #e9d15b;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*# sourceMappingURL=skin-orange.css.map*/
|
|
||||||
|
|||||||
538
public/css/dist/skins/skin-purple-dark.css
vendored
538
public/css/dist/skins/skin-purple-dark.css
vendored
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user