Compare commits
683 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7a57fd73e5 | |||
| 41b3f5b5c8 | |||
| fbbe24f197 | |||
| 9b0495453d | |||
| fe765b3c9c | |||
| 740967e4f2 | |||
| cffd87c5a3 | |||
| c8526a6be0 | |||
| abd0acbe9d | |||
| 3719f9a5a8 | |||
| f9dc5766a7 | |||
| c6b6ccc814 | |||
| bd7a043ab0 | |||
| 611da2ffbd | |||
| 911e9092f9 | |||
| 06c9076c2f | |||
| b8fa5abadf | |||
| dac2747c01 | |||
| db44430870 | |||
| c12139e624 | |||
| a2f6d8f72e | |||
| 39f82e546f | |||
| 6e6661a72b | |||
| d79e2a0864 | |||
| 0110cd3c55 | |||
| 3b359d7c6e | |||
| 3da5c15249 | |||
| fcec12f3b2 | |||
| 924c23b5ae | |||
| d70aa42cc9 | |||
| aecc98b8a3 | |||
| 2c54c93859 | |||
| b6b0a5ac58 | |||
| 2291dda425 | |||
| b402a68bc2 | |||
| 97ecdba262 | |||
| 8c2ee9e96c | |||
| e05baf1df4 | |||
| 141bba490f | |||
| 416be43061 | |||
| 2c89d05156 | |||
| 680b189709 | |||
| 29d5682956 | |||
| 32604f0715 | |||
| d1fc48d82e | |||
| 650f86406d | |||
| 9b353ae0d8 | |||
| cbcc43828e | |||
| c59122a125 | |||
| 6a08ee1597 | |||
| 7bd5ddc516 | |||
| ed05a32f0b | |||
| 780226a612 | |||
| ca37c63649 | |||
| c3e4b579d3 | |||
| 217caf3002 | |||
| c870933125 | |||
| 3698b107d6 | |||
| 703fd9ba8f | |||
| 9107784746 | |||
| b1776a2816 | |||
| 9f993fa16c | |||
| 7555b97f80 | |||
| 784238f2de | |||
| 0d76ea5050 | |||
| 3199dfd1d8 | |||
| ceac5a59ff | |||
| 309ce7d0bd | |||
| 129e45c817 | |||
| e8f3b27141 | |||
| 2eb64b3105 | |||
| c48ae56e2f | |||
| 8d5033c4e5 | |||
| fd78fd8d24 | |||
| 1f6874f0af | |||
| fdde048f11 | |||
| 8fd50e9524 | |||
| f836f88e38 | |||
| 775239e2ed | |||
| 16d1875157 | |||
| af6d9b462b | |||
| bfeb4560ca | |||
| 194e43d206 | |||
| 13830b5c09 | |||
| 855a155178 | |||
| 3975555503 | |||
| b1d6d4da37 | |||
| be402a9d7d | |||
| 00aba507f7 | |||
| 0cadab8fc6 | |||
| cc14eee161 | |||
| 9d4f7193ae | |||
| 2f62925d85 | |||
| f40d4dfbf4 | |||
| fd9f6f615f | |||
| c7618bd31e | |||
| 4e831a6396 | |||
| 0492fad3ab | |||
| 1db2a84dcb | |||
| 913e7f7803 | |||
| da10a9a2aa | |||
| cf7ef5e8b0 | |||
| 3f08258bf0 | |||
| f7ce7060eb | |||
| 6e13da6293 | |||
| dd2b9e15a6 | |||
| 49e898fd26 | |||
| 1927f131aa | |||
| d3bcf727fb | |||
| a4a29be868 | |||
| 2e7fd02f42 | |||
| 1d9bf26194 | |||
| 7a813b2a45 | |||
| da6770c9d9 | |||
| 7dd2b3d580 | |||
| e5b80ab423 | |||
| 27efae93ac | |||
| 960be7c5ae | |||
| 0b5f83fc56 | |||
| 89564b3d2a | |||
| 610392777b | |||
| e916fdcc89 | |||
| 70f7f65394 | |||
| 9904f664be | |||
| 8892feea62 | |||
| 41c257829e | |||
| cf649fcd12 | |||
| 4ac79f5e12 | |||
| c7b0ecfac8 | |||
| 7b0fd2c8f4 | |||
| a2bd4250cf | |||
| d47198086f | |||
| 89f7f50901 | |||
| 8339dd3db2 | |||
| e63d62d2c8 | |||
| 45c4624d5f | |||
| a27a98f4b3 | |||
| 70a7a11324 | |||
| e8f11919f7 | |||
| 1d976ff926 | |||
| 4a086cecfd | |||
| 890ef1eb1d | |||
| 94e8b5f783 | |||
| 21bb2f8b44 | |||
| aae7d4523f | |||
| f7cc9036ea | |||
| 26ede441a4 | |||
| afac18ea1b | |||
| da187ff07a | |||
| 9849bbec70 | |||
| 3aaed2600e | |||
| 8e316611c0 | |||
| 0a97135578 | |||
| 1bed711f0e | |||
| 1f1c1cb546 | |||
| f2e7af498e | |||
| afdb958955 | |||
| 06966d52bf | |||
| 723a6260f5 | |||
| a98a0a2f77 | |||
| 59e755c5df | |||
| 55b2fce876 | |||
| 1fadabaf2f | |||
| 33178adeed | |||
| 46fb12f5dc | |||
| 12e6a721f0 | |||
| 0cbc9d266e | |||
| 7dd50eddfa | |||
| c1642e3fe9 | |||
| 2036402742 | |||
| e9e62fbfaf | |||
| e49cfb4bde | |||
| db8ea88207 | |||
| 729795364b | |||
| ee46b223c9 | |||
| e7d7cc6fc2 | |||
| 23bde13665 | |||
| 3dfbd8a4f0 | |||
| 80fb7a4c13 | |||
| b8ef6dfba4 | |||
| a57a465147 | |||
| e14ebd0daa | |||
| 676bedc9be | |||
| 6b85bbfe65 | |||
| b629fd36a0 | |||
| 260abfc2d7 | |||
| eb7017d5cb | |||
| 4e86b590d4 | |||
| 95af577353 | |||
| c4ba69b4b6 | |||
| 67e0e14a12 | |||
| 4b59a6cb5a | |||
| 229432af5e | |||
| 43efe4e80b | |||
| 286df911c0 | |||
| 54d95c510b | |||
| 61a4b03aba | |||
| bebd569490 | |||
| 470b543910 | |||
| 07171498a9 | |||
| 2dbeb1aeb5 | |||
| 4fcf70872f | |||
| ac7b5da711 | |||
| 1fc83443db | |||
| c17bbe9dfe | |||
| 59617083c9 | |||
| d167f31af0 | |||
| 1343c09cd7 | |||
| 8e6621f332 | |||
| 34b14f67c6 | |||
| 5574ea89bb | |||
| d780f0f3cf | |||
| 03f5af29f2 | |||
| a531ea34bb | |||
| aa72b9c107 | |||
| 176469294b | |||
| afd94ff52a | |||
| b2c2c1ee15 | |||
| b004a7448b | |||
| c5e5930c1b | |||
| ed2d7310f8 | |||
| 547de2b9e3 | |||
| 58abd15d93 | |||
| dd60976d51 | |||
| 07b045007b | |||
| 1f7e0a2893 | |||
| 1159cdeab2 | |||
| 7f3ceea77b | |||
| 1d89b78315 | |||
| 463469e7c7 | |||
| c839f0cbc8 | |||
| a832346bfb | |||
| 3d77666ad1 | |||
| 6ad7a9bb70 | |||
| 7fa9e49880 | |||
| e2e070d5e1 | |||
| 9f4fca4238 | |||
| b366dec983 | |||
| e91c1942f8 | |||
| 6f6b74b82c | |||
| 315f02905a | |||
| 738e253375 | |||
| 358cd1eaf9 | |||
| e4284d20f3 | |||
| f7874ec106 | |||
| ad802cfead | |||
| 41838f1e89 | |||
| 8624931a88 | |||
| 8840e57ae7 | |||
| 16cb4f6d05 | |||
| aa304375a6 | |||
| b22789aa59 | |||
| f93e140ce1 | |||
| de238f1551 | |||
| 4247904f19 | |||
| 75852bdb8b | |||
| 5cc1e7d3fe | |||
| a98f4883be | |||
| d5a709a836 | |||
| 4243270e7d | |||
| b576fce1f7 | |||
| d7313543ef | |||
| 2636474120 | |||
| 0c3b55a8b5 | |||
| d7dd35a2f2 | |||
| 0c8e3809f2 | |||
| 4538bca29f | |||
| eeda4366a3 | |||
| fc31a828bc | |||
| 88e10516a9 | |||
| 481b905331 | |||
| 959df613ae | |||
| c476eda868 | |||
| b3249dcf48 | |||
| 242e6ff030 | |||
| f026f886ae | |||
| 936d7dab1b | |||
| 38d774eb6a | |||
| d363a0deec | |||
| 3ebbd030e7 | |||
| 7ae226635f | |||
| afbe23c214 | |||
| 7f91f6e349 | |||
| 6db7001dd5 | |||
| 9a763db2d9 | |||
| 99a591c970 | |||
| 9540db424a | |||
| 84d81184fa | |||
| 3c0cc94652 | |||
| 5dcc795aa2 | |||
| daff0dbccb | |||
| 145cf1093c | |||
| e3c1a9f80c | |||
| 66991ea663 | |||
| e253d611b4 | |||
| 7e76d8858e | |||
| dc265ba2a8 | |||
| eb00acddfd | |||
| 449ad4f86b | |||
| 77bff707fa | |||
| 183f8ae1bf | |||
| 3c730c691b | |||
| b20fecc2de | |||
| 03e294b6d0 | |||
| 85ba7c3a15 | |||
| 889fa6b74d | |||
| 4082957c85 | |||
| 24edf81b27 | |||
| 03818adc14 | |||
| b195934a4a | |||
| 82a80b9ac8 | |||
| 7c7edcd191 | |||
| 794dc5998a | |||
| a2aa05fcf9 | |||
| 8f68bdb318 | |||
| 239f438a98 | |||
| 41127bf5dd | |||
| 64bff852bd | |||
| d0a8dda14f | |||
| cc5bec07ea | |||
| e560cc2ee2 | |||
| 37d4a0105e | |||
| c74c89a171 | |||
| 3bb296db78 | |||
| 305c22f72d | |||
| 9f81792e70 | |||
| 57e21193c9 | |||
| ce9d728c2d | |||
| 6bc2128c3e | |||
| 78835a8b1f | |||
| 39da217a9e | |||
| 948c443829 | |||
| 1a3bf10753 | |||
| 7876ae462c | |||
| 8fbc77a844 | |||
| 87c493bf12 | |||
| 8c30c5d879 | |||
| d8df6a0982 | |||
| d6382fb4a3 | |||
| 9772039c4f | |||
| ad6cec080c | |||
| 028cde8738 | |||
| 20f94ce418 | |||
| cced7a93a5 | |||
| 6430f7a4a7 | |||
| 1fff9f6048 | |||
| 85a9f1b71f | |||
| dfa0ddb49f | |||
| 480fd78c51 | |||
| 0c9018289b | |||
| 65bf156da1 | |||
| a8624a736d | |||
| c1ae844308 | |||
| bb450e6bb6 | |||
| 20eb2df9be | |||
| 1e38ced885 | |||
| fe2fb63007 | |||
| b79841d481 | |||
| e4ad1011da | |||
| de8180ec70 | |||
| 80145c699e | |||
| f99cafc101 | |||
| 4014f5e15b | |||
| fdb31ac19e | |||
| 9184dd5303 | |||
| 26e081a2cb | |||
| 66a198a175 | |||
| 7aba5f3a84 | |||
| 78dcdb4dce | |||
| 3fdafe30c1 | |||
| 39022c9766 | |||
| e3a9145459 | |||
| 8d48fddac4 | |||
| 8b5de894df | |||
| 5781a01311 | |||
| de1adf227b | |||
| 5e7bfe314a | |||
| 08ce08db62 | |||
| 56504e07c9 | |||
| a901a648af | |||
| a099d16714 | |||
| 464c83599b | |||
| c78355e39a | |||
| bc7c456f99 | |||
| 4f07818a2d | |||
| 979212b2ed | |||
| b32e3a3475 | |||
| 67e18cb110 | |||
| 28304556a9 | |||
| 6a5777816c | |||
| 2b2e6a8829 | |||
| 5701b4d38e | |||
| 23866bce26 | |||
| ac5dd0dbf9 | |||
| 0f0dab556d | |||
| 6dea227c3e | |||
| cf3619d766 | |||
| 59b739c1c4 | |||
| 59963b88f5 | |||
| 7d67b6a9ae | |||
| e944b2d1c3 | |||
| 442db4b5c8 | |||
| 991a364a3d | |||
| eaf077f807 | |||
| fbb55c14d6 | |||
| e4bee3d372 | |||
| 42694f2e9f | |||
| 2835905398 | |||
| f9c7022bcc | |||
| 60d05e1ae1 | |||
| b918ea88cc | |||
| e8c8509ed3 | |||
| 42e101291e | |||
| 00bcae7feb | |||
| 6d96d6cba4 | |||
| e3f0815012 | |||
| f154692dad | |||
| b4e79592c4 | |||
| e779bf52d1 | |||
| d62d6ebf05 | |||
| e4277b47e8 | |||
| fd9e8b712b | |||
| 0de1d45492 | |||
| fdee3ee93e | |||
| ef045c61ca | |||
| 212800b074 | |||
| 6d1197a144 | |||
| 8ba55b4bf2 | |||
| 4f1f21287c | |||
| 878a163d11 | |||
| dea23bef45 | |||
| d12d1f161f | |||
| 7afcd09651 | |||
| 4375d66d09 | |||
| e2bb6cf6c6 | |||
| 2e11a68c0d | |||
| 27fe904970 | |||
| 130a041be0 | |||
| a7a2f5f974 | |||
| e47146faee | |||
| d1d6fe26a6 | |||
| 3df0550b19 | |||
| 6eb296303f | |||
| 5a2ca33d0f | |||
| 215c21891b | |||
| 4c37dcf5bb | |||
| 2457003deb | |||
| 5ee4eb5871 | |||
| c253000af1 | |||
| f0d9ba89df | |||
| 05219e69c4 | |||
| c3439b41b8 | |||
| e479575825 | |||
| 0282169703 | |||
| 0da0998e44 | |||
| 60d3af7bb7 | |||
| 8ddf035a9b | |||
| 0f5b8b5a90 | |||
| 69a5c99396 | |||
| 3aa3d67675 | |||
| cf46e322b9 | |||
| 3a3c021a6a | |||
| 4b3267649a | |||
| 1c4190bf22 | |||
| 3e2bd02ce5 | |||
| 2f83f2aa52 | |||
| 914b1cb628 | |||
| 6dae07be7d | |||
| c683c1c57e | |||
| 775a38880e | |||
| 9d949a5b89 | |||
| 01c2968388 | |||
| 41b711740a | |||
| 0d0589800a | |||
| 2f0f2c5002 | |||
| abfb5bcd2e | |||
| 5ff84d80b4 | |||
| e29ab6b0d6 | |||
| 89df6fc6da | |||
| 78a45d72d7 | |||
| 55309bfaef | |||
| 0c842fc772 | |||
| 5210d7621e | |||
| 919df7ed56 | |||
| de62db5e18 | |||
| 24b0d83387 | |||
| dec3f290d0 | |||
| 190b4cd010 | |||
| d732b60a38 | |||
| ba94a57e08 | |||
| 1fcd36e4ac | |||
| 31362f3e07 | |||
| 0fbccef759 | |||
| 2659521dc9 | |||
| 0f489b34b5 | |||
| 0642b4b830 | |||
| 8b77be9da3 | |||
| 56345b5743 | |||
| f09ee24975 | |||
| aed7036595 | |||
| 9fbb9746bc | |||
| 0154f240f3 | |||
| a7abea692d | |||
| f04b3f9b09 | |||
| 2841eadc91 | |||
| 616af831a7 | |||
| 1e730078c1 | |||
| 0132360e49 | |||
| 1c2a409e6a | |||
| 15e1774a13 | |||
| 16b49c25e1 | |||
| c61adc7041 | |||
| 6524ac3678 | |||
| c8842a85ee | |||
| 7255a8bb0c | |||
| 7e5f32c9d8 | |||
| e1724cf25f | |||
| 2d10931d6c | |||
| 4a5066054b | |||
| 84ffc1a728 | |||
| 74429d9075 | |||
| e714def74a | |||
| a9e169261c | |||
| 665ffa6571 | |||
| 8335f10f8c | |||
| 518680f23c | |||
| 38c36699a7 | |||
| f363e742e6 | |||
| 1edce0a4fa | |||
| 7da7907fbd | |||
| 32a0f6eb92 | |||
| 1301119c9a | |||
| c7f2dc83db | |||
| 3664e75c47 | |||
| 674348b5a5 | |||
| 1b423f5b54 | |||
| 7d5810b656 | |||
| d4af197b0e | |||
| be685467eb | |||
| 7a0b3a7350 | |||
| 55f544829d | |||
| bb7ce83c48 | |||
| a8cb5c1e7d | |||
| 269f73205a | |||
| 8147e64c48 | |||
| d321dcf20b | |||
| 59e72cd1c2 | |||
| d67fe22b8d | |||
| b2847811ef | |||
| b7f050aa3b | |||
| cc67569425 | |||
| 7657d8680e | |||
| 26927907cf | |||
| e406dd02ed | |||
| c90ea92a4e | |||
| c28feb56a8 | |||
| 78f1c0f11f | |||
| 95f8e9fbe8 | |||
| 1befbfee6f | |||
| 9316b2bed0 | |||
| 58ce44c935 | |||
| c59c5e35f8 | |||
| 90da6ba364 | |||
| 0f190e094d | |||
| 0c63dac5e7 | |||
| 3a86c53b49 | |||
| a5292d4b71 | |||
| cd7a7fa3d2 | |||
| 255a492db6 | |||
| 6cff270d3d | |||
| 1fb2878772 | |||
| 84e130d6aa | |||
| edfa064fd4 | |||
| 3caded990a | |||
| 3bca2566d7 | |||
| 1aa4841868 | |||
| fc1e8a4e4e | |||
| bf3cb73070 | |||
| d77e763f86 | |||
| 8ef3d00f22 | |||
| 5266c22890 | |||
| 26540b1aac | |||
| 39a3b93537 | |||
| ba13101f64 | |||
| ce55b7ab2f | |||
| 28a9f90a72 | |||
| f2a2ccdab4 | |||
| f2e1ec0928 | |||
| 17ca66f4a2 | |||
| a43f075ff0 | |||
| c87d4ad801 | |||
| d94cc1f17d | |||
| f30285eaea | |||
| 20d35953f1 | |||
| 537630bae4 | |||
| 85d6b062f3 | |||
| 74a9a176e9 | |||
| 94f8c61720 | |||
| 75b9b70a86 | |||
| 2e585f9cd2 | |||
| edddf6ae80 | |||
| ea0f2c5f34 | |||
| 826d3ccae8 | |||
| fd7d4eb3f2 | |||
| e8e0c7bfe4 | |||
| ccdda7b8e8 | |||
| 9abafba180 | |||
| 2ed47a6089 | |||
| 818d1769b8 | |||
| bf6674f6a0 | |||
| ee08586279 | |||
| ef75880398 | |||
| 221ae62ea5 | |||
| 40c59e664b | |||
| 61e3381b24 | |||
| 3dfa1e1ea7 | |||
| c0fab2f425 | |||
| ffdd437e47 | |||
| 76825441b9 | |||
| 8e83206556 | |||
| 2aa357f315 | |||
| df59e7f699 | |||
| d0216d76f8 | |||
| ec10526d69 | |||
| 49b746a811 | |||
| 1013580236 | |||
| 98d9a2e6f9 | |||
| e4217af1ec | |||
| 3d4607ebd3 | |||
| 2be1d64de3 | |||
| 16ec68e0b6 | |||
| 3ce9500d75 | |||
| c699452473 | |||
| d943408f44 | |||
| a7aee2fe1c | |||
| 32f3740eda | |||
| f42540fedf | |||
| f25b90ee27 | |||
| fdef266089 | |||
| c4375f9fbc | |||
| d0189fb076 | |||
| e4517a8782 | |||
| 19604480bb | |||
| 704d66b6f3 | |||
| 6315c343a7 | |||
| 766b4b901f | |||
| f671c89b14 | |||
| 03bd1498e8 | |||
| f743bacd0f | |||
| 309158352e | |||
| 2540ac09ec | |||
| af2decea9d | |||
| 9ea8316d74 | |||
| 123caf42c2 | |||
| 5997dd9387 | |||
| 9cf03e2e60 | |||
| 212f09dd31 | |||
| 8334e7b863 | |||
| a80d67c1ff | |||
| 7c95f4231e | |||
| 496a768013 | |||
| 7415a5898f | |||
| f1486bfee3 | |||
| bc8521043b | |||
| 3597d71230 | |||
| d92e2eaebc | |||
| 8cdea8a384 | |||
| 4457c7aec0 | |||
| 95279f885b | |||
| 75644eb894 | |||
| 2d7a348ab7 | |||
| 139dd13392 | |||
| 2f52369d07 | |||
| aab52d0850 | |||
| 71febc1c81 | |||
| 68d8b10b22 | |||
| 0d2333203a | |||
| 3881e2e83e | |||
| 51eeee09d7 | |||
| c487beeaca | |||
| f463cd6c8d | |||
| 5e7a4e8193 | |||
| c8870ddcab |
@@ -7,6 +7,7 @@ composer.phar
|
||||
/app/database/*.sqlite
|
||||
/app/storage/meta/services.json
|
||||
/app/config/*/mail.php
|
||||
/app/config/*/session.php
|
||||
/app/config/*/database.php
|
||||
/app/config/*/app.php
|
||||
public/packages/*
|
||||
@@ -24,3 +25,10 @@ public/uploads/logo.png
|
||||
public/assets/.siteflow
|
||||
app/config/local/session.php
|
||||
.couscous
|
||||
tests/_support/_generated/*
|
||||
tests/_data/scenarios
|
||||
nbproject/*
|
||||
app/config/local/ldap.php
|
||||
app/storage/dumps/*
|
||||
app/config/packages/schickling/backup/config.php
|
||||
app/config/app.backup.php
|
||||
|
||||
+25
-13
@@ -1,6 +1,7 @@
|
||||
addons:
|
||||
hosts:
|
||||
- AlisonMBP
|
||||
hosts:
|
||||
- localhost
|
||||
sudo: false
|
||||
|
||||
# see http://about.travis-ci.org/docs/user/languages/php/ for more hints
|
||||
language: php
|
||||
@@ -13,28 +14,39 @@ php:
|
||||
|
||||
# optionally specify a list of environments, for example to test different RDBMS
|
||||
env:
|
||||
- DB=mysql
|
||||
- DB=mysql APP_ENV=travis-ci
|
||||
|
||||
# execute any number of scripts before the test run, custom env's are available as variables
|
||||
before_script:
|
||||
- if [[ "$DB" == "mysql" ]]; then mysql -e "create database IF NOT EXISTS snipeit_laravel;" -utravis; fi
|
||||
- hostname
|
||||
- if [[ "$DB" == "mysql" ]]; then mysql -e "create database IF NOT EXISTS snipeit_unit;" -utravis; fi
|
||||
- curl -s http://getcomposer.org/installer | php
|
||||
- cp app/config/testing/app.example.php app/config/testing/app.php
|
||||
- cp app/config/testing/database.example.php app/config/testing/database.php
|
||||
- cp app/config/testing/mail.example.php app/config/testing/mail.php
|
||||
- cp app/config/travis-ci/app.example.php app/config/travis-ci/app.php
|
||||
- cp app/config/travis-ci/database.example.php app/config/travis-ci/database.php
|
||||
- cp app/config/travis-ci/mail.example.php app/config/travis-ci/mail.php
|
||||
- composer self-update
|
||||
- composer install --prefer-source --no-interaction
|
||||
- php artisan key:generate --env=testing
|
||||
- php artisan migrate:install --env=testing --no-interaction -vvv
|
||||
- php artisan migrate --package cartalyst/sentry --env=testing --no-interaction -vvv
|
||||
- php artisan migrate --env=testing --no-interaction -vvv
|
||||
- php artisan db:seed --env=testing --no-interaction -vvv
|
||||
- php artisan key:generate
|
||||
- php artisan migrate:install --no-interaction -vvv
|
||||
- php artisan migrate --package cartalyst/sentry --no-interaction -vvv
|
||||
- php artisan migrate --no-interaction -vvv
|
||||
- php artisan db:seed --no-interaction -vvv
|
||||
- ./vendor/bin/codecept build
|
||||
- APP_ENV=travis-ci php artisan serve --port=8007 &
|
||||
- sleep 5
|
||||
|
||||
# omitting "script:" will default to phpunit
|
||||
# use the $DB env variable to determine the phpunit.xml to use
|
||||
script: phpunit
|
||||
script: ./vendor/bin/codecept run --env travis-ci -vvv
|
||||
|
||||
# configure notifications (email, IRC, campfire etc)
|
||||
notifications:
|
||||
email: false
|
||||
slack:
|
||||
secure: vv9we1RxB9RsrMbomSdq6D7vz/okobw87pEkgIZjB+hj1QpQ2by90gsPsOa+NgsJEFaEP7e4KlT6SH8kK+zhbmuKaUd3d1//XdcancE22LZXi6tkiB5yuR/Jhhb1LLDqyGJTB4D92hMnnCPiUjpxNA3r437ttNeYRdYIEEP3drA=
|
||||
webhooks:
|
||||
urls:
|
||||
- https://webhooks.gitter.im/e/5e136eb0c1965f3918d0
|
||||
on_success: change # options: [always|never|change] default: always
|
||||
on_failure: change # options: [always|never|change] default: always
|
||||
on_start: false # default: false
|
||||
|
||||
+886
-325
File diff suppressed because it is too large
Load Diff
+4
-23
@@ -4,6 +4,8 @@ MAINTAINER Brady Wetherington <uberbrady@gmail.com>
|
||||
RUN apt-get update && apt-get install -y \
|
||||
apache2-bin \
|
||||
libapache2-mod-php5 \
|
||||
php5-curl \
|
||||
php5-ldap \
|
||||
php5-mysql \
|
||||
php5-mcrypt \
|
||||
php5-gd \
|
||||
@@ -38,29 +40,8 @@ WORKDIR /var/www/html
|
||||
#Patch bootstrap file
|
||||
RUN patch -p1 < /tmp/app_start.patch
|
||||
|
||||
#DB create?
|
||||
# mysqladmin -u root create snipeit_laravel
|
||||
|
||||
#DB create user, grant access to new DB?
|
||||
# grant all privileges on snipeit_laravel.* TO snipeit;
|
||||
|
||||
#DB config file init? (NEVER overwrite!)
|
||||
#RUN cp -n /var/www/html/app/config/production/database.example.php /var/www/html/app/config/production/database.php
|
||||
COPY docker/database.php /var/www/html/app/config/production/database.php
|
||||
|
||||
COPY docker/mail.php /var/www/html/app/config/production/mail.php
|
||||
|
||||
#change DB file user
|
||||
#RUN sed -i s/travis/snipe_it/ /var/www/html/app/config/production/database.php
|
||||
|
||||
#init app config file (DO NOT overwrite!)
|
||||
RUN cp -n /var/www/html/app/config/production/app.example.php /var/www/html/app/config/production/app.php
|
||||
|
||||
# Change default hostname to blank...I guess?
|
||||
RUN sed -i s%http://staging.yourserver.com%% /var/www/html/app/config/production/app.php
|
||||
|
||||
# turn off the toolbar
|
||||
RUN sed -i 's%\x27debug\x27 => true%\x27debug\x27 => false%' /var/www/html/app/config/production/app.php
|
||||
#copy all configuration files
|
||||
COPY docker/*.php /var/www/html/app/config/production/
|
||||
|
||||
RUN chown -R docker /var/www/html
|
||||
|
||||
|
||||
@@ -25,6 +25,8 @@ Please see the [requirements documentation](http://docs.snipeitapp.com/requireme
|
||||
|
||||
To deploy on Ubuntu using Ansible and Vagrant, check out the [Snipe-IT Installation scripts](https://github.com/GR360RY/snipeit-ansible) created by [@GR360RY](https://github.com/GR360RY/).
|
||||
|
||||
To deploy on a fresh Ubuntu / CentOS install that will be dedicated to Snipe-It, run the "install.sh". Make sure to chmod +x install.sh and run as sudo on Ubuntu systems (or equivalent on CentOS.)
|
||||
|
||||
-----
|
||||
### Bug Reports & Feature Requests
|
||||
|
||||
|
||||
+38
-10
@@ -18,7 +18,7 @@ class AppCommand extends Command
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = '';
|
||||
protected $description = 'This command kicks off your database table creation and migration, and creates your first admin user.';
|
||||
|
||||
/**
|
||||
* Holds the user information.
|
||||
@@ -28,7 +28,7 @@ class AppCommand extends Command
|
||||
protected $userData = array(
|
||||
'first_name' => null,
|
||||
'last_name' => null,
|
||||
'email' => null,
|
||||
'username' => null,
|
||||
'password' => null
|
||||
);
|
||||
|
||||
@@ -66,6 +66,7 @@ class AppCommand extends Command
|
||||
// Let's ask the user some questions, shall we?
|
||||
$this->askUserFirstName();
|
||||
$this->askUserLastName();
|
||||
$this->askUserUsername();
|
||||
$this->askUserEmail();
|
||||
$this->askUserPassword();
|
||||
|
||||
@@ -89,10 +90,10 @@ class AppCommand extends Command
|
||||
$this->call('migrate:install');
|
||||
|
||||
// Run the Sentry Migrations
|
||||
$this->call('migrate', array('--package' => 'cartalyst/sentry'));
|
||||
$this->call('migrate', array('--package' => 'cartalyst/sentry','--force'=>true));
|
||||
|
||||
// Run the Migrations
|
||||
$this->call('migrate');
|
||||
$this->call('migrate', array('--force'=>true));
|
||||
|
||||
// Create the default user and default groups.
|
||||
$this->sentryRunner();
|
||||
@@ -162,7 +163,7 @@ class AppCommand extends Command
|
||||
}
|
||||
|
||||
/**
|
||||
* Asks the user for the user email address.
|
||||
* Asks the user for the username address.
|
||||
*
|
||||
* @return void
|
||||
* @todo Use the Laravel Validator
|
||||
@@ -171,7 +172,7 @@ class AppCommand extends Command
|
||||
{
|
||||
do {
|
||||
// Ask the user to input the email address
|
||||
$email = $this->ask('Please enter your user email: ');
|
||||
$email = $this->ask('Please enter your email: ');
|
||||
|
||||
// Check if email is valid
|
||||
if ($email == '') {
|
||||
@@ -185,6 +186,32 @@ class AppCommand extends Command
|
||||
while ( ! $email);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Asks the user for the username address.
|
||||
*
|
||||
* @return void
|
||||
* @todo Use the Laravel Validator
|
||||
*/
|
||||
protected function askUserUsername()
|
||||
{
|
||||
do {
|
||||
// Ask the user to input the username
|
||||
$username = $this->ask('Please enter your username: ');
|
||||
|
||||
// Check if username is valid
|
||||
if ($username == '') {
|
||||
// Return an error message
|
||||
$this->error('Username is invalid. Please try again.');
|
||||
}
|
||||
|
||||
// Store the username address
|
||||
$this->userData['username'] = $username;
|
||||
}
|
||||
while ( ! $username);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Asks the user for the user password.
|
||||
*
|
||||
@@ -197,7 +224,7 @@ class AppCommand extends Command
|
||||
// Ask the user to input the user password
|
||||
$password = $this->ask('Please enter your user password (at least 8 characters): ');
|
||||
|
||||
// Check if email is valid
|
||||
// Check if password is valid
|
||||
if ($password == '') {
|
||||
// Return an error message
|
||||
$this->error('Password is invalid. Please try again.');
|
||||
@@ -217,9 +244,9 @@ class AppCommand extends Command
|
||||
protected function askUserDummyData()
|
||||
{
|
||||
// Ask the user to input the user password
|
||||
$dummydata = $this->ask('Do you want to seed your database with dummy data? y/n (default is yes): ');
|
||||
$dummydata = $this->ask('Do you want to seed your database with dummy data? Y/n (default is yes): ');
|
||||
|
||||
$this->dummyData = ( strstr($dummydata, 'y' ) || empty($dummydata) ) ? true : false;
|
||||
$this->dummyData = ( strstr($dummydata, 'Y' ) || empty($dummydata) ) ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -329,7 +356,7 @@ class AppCommand extends Command
|
||||
$user = Sentry::getUserProvider()->create($data);
|
||||
|
||||
// Associate the Admin group to this user
|
||||
$group = Sentry::getGroupProvider()->findById(1);
|
||||
$group = Sentry::findGroupByName('Admin');
|
||||
$user->addGroup($group);
|
||||
|
||||
// Show the success message
|
||||
@@ -350,6 +377,7 @@ class AppCommand extends Command
|
||||
'first_name' => 'John',
|
||||
'last_name' => 'Doe',
|
||||
'email' => 'john.doe@example.com',
|
||||
'username' => 'john.doe@example.com',
|
||||
'password' => substr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', mt_rand(1,10))),1,10),
|
||||
'notes' => 'Generated on install',
|
||||
'activated' => 1,
|
||||
|
||||
@@ -5,21 +5,21 @@ use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use League\Csv\Reader;
|
||||
|
||||
class ImportCommand extends Command {
|
||||
class AssetImportCommand extends Command {
|
||||
|
||||
/**
|
||||
* The console command name.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $name = 'import:csv';
|
||||
protected $name = 'asset-import:csv';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Import from CSV';
|
||||
protected $description = 'Import Assets from CSV';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
@@ -42,9 +42,9 @@ class ImportCommand extends Command {
|
||||
|
||||
|
||||
if (!$this->option('testrun')=='true') {
|
||||
$this->comment('======= Importing '.$filename.' =========');
|
||||
$this->comment('======= Importing Assets from '.$filename.' =========');
|
||||
} else {
|
||||
$this->comment('====== TEST ONLY Import for '.$filename.' ====');
|
||||
$this->comment('====== TEST ONLY Asset Import for '.$filename.' ====');
|
||||
$this->comment('============== NO DATA WILL BE WRITTEN ==============');
|
||||
}
|
||||
|
||||
@@ -63,66 +63,77 @@ class ImportCommand extends Command {
|
||||
|
||||
// Let's just map some of these entries to more user friendly words
|
||||
|
||||
// User's name
|
||||
if (array_key_exists('0',$row)) {
|
||||
$user_name = $row[0];
|
||||
$user_name = trim($row[0]);
|
||||
} else {
|
||||
$user_name = '';
|
||||
}
|
||||
|
||||
// User's email
|
||||
if (array_key_exists('1',$row)) {
|
||||
$user_email = $row[1];
|
||||
$user_email = trim($row[1]);
|
||||
} else {
|
||||
$user_email = '';
|
||||
}
|
||||
|
||||
// Asset Category
|
||||
if (array_key_exists('2',$row)) {
|
||||
$user_asset_category = $row[2];
|
||||
$user_asset_category = trim($row[2]);
|
||||
} else {
|
||||
$user_asset_category = '';
|
||||
}
|
||||
|
||||
// Asset Name
|
||||
if (array_key_exists('3',$row)) {
|
||||
$user_asset_name = $row[3];
|
||||
$user_asset_name = trim($row[3]);
|
||||
} else {
|
||||
$user_asset_name = '';
|
||||
}
|
||||
|
||||
// Asset Manufacturer
|
||||
if (array_key_exists('4',$row)) {
|
||||
$user_asset_mfgr = $row[4];
|
||||
$user_asset_mfgr = trim($row[4]);
|
||||
} else {
|
||||
$user_asset_mfgr = '';
|
||||
}
|
||||
|
||||
// Asset model number
|
||||
if (array_key_exists('5',$row)) {
|
||||
$user_asset_modelno = $row[5];
|
||||
$user_asset_modelno = trim($row[5]);
|
||||
} else {
|
||||
$user_asset_modelno = '';
|
||||
}
|
||||
|
||||
// Asset serial number
|
||||
if (array_key_exists('6',$row)) {
|
||||
$user_asset_serial = $row[6];
|
||||
$user_asset_serial = trim($row[6]);
|
||||
} else {
|
||||
$user_asset_serial = '';
|
||||
}
|
||||
|
||||
// Asset tag
|
||||
if (array_key_exists('7',$row)) {
|
||||
$user_asset_tag = $row[7];
|
||||
$user_asset_tag = trim($row[7]);
|
||||
} else {
|
||||
$user_asset_tag = '';
|
||||
}
|
||||
|
||||
// Asset location
|
||||
if (array_key_exists('8',$row)) {
|
||||
$user_asset_location = $row[8];
|
||||
$user_asset_location = trim($row[8]);
|
||||
} else {
|
||||
$user_asset_location = '';
|
||||
}
|
||||
|
||||
// Asset notes
|
||||
if (array_key_exists('9',$row)) {
|
||||
$user_asset_notes = $row[9];
|
||||
$user_asset_notes = trim($row[9]);
|
||||
} else {
|
||||
$user_asset_notes = '';
|
||||
}
|
||||
|
||||
// Asset purchase date
|
||||
if (array_key_exists('10',$row)) {
|
||||
if ($row[10]!='') {
|
||||
$user_asset_purchase_date = date("Y-m-d 00:00:01", strtotime($row[10]));
|
||||
@@ -133,20 +144,35 @@ class ImportCommand extends Command {
|
||||
$user_asset_purchase_date = '';
|
||||
}
|
||||
|
||||
// Asset purchase cost
|
||||
if (array_key_exists('11',$row)) {
|
||||
if ($row[11]!='') {
|
||||
$user_asset_purchase_cost = trim($row[11]);
|
||||
} else {
|
||||
$user_asset_purchase_cost = '';
|
||||
}
|
||||
} else {
|
||||
$user_asset_purchase_cost = '';
|
||||
}
|
||||
|
||||
// A number was given instead of a name
|
||||
if (is_numeric($user_name)) {
|
||||
$this->comment('User '.$user_name.' is not a name - assume this user already exists');
|
||||
// No name was given
|
||||
$user_username = '';
|
||||
|
||||
// No name was given
|
||||
} elseif ($user_name=='') {
|
||||
$this->comment('No user data provided - skipping user creation, just adding asset');
|
||||
$first_name = '';
|
||||
$last_name = '';
|
||||
$user_username = '';
|
||||
|
||||
} else {
|
||||
|
||||
$name = explode(" ", $user_name);
|
||||
$first_name = $name[0];
|
||||
$email_last_name = '';
|
||||
$email_prefix = $first_name;
|
||||
|
||||
if (!array_key_exists(1, $name)) {
|
||||
$last_name='';
|
||||
@@ -171,6 +197,9 @@ class ImportCommand extends Command {
|
||||
|
||||
}
|
||||
|
||||
|
||||
$user_username = $email_prefix;
|
||||
|
||||
// Generate an email based on their name if no email address is given
|
||||
if ($user_email=='') {
|
||||
if ($first_name=='Unknown') {
|
||||
@@ -179,14 +208,12 @@ class ImportCommand extends Command {
|
||||
$email = strtolower($email_prefix).'@'.$this->option('domain');
|
||||
$user_email = str_replace("'",'',$email);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
$this->comment('Full Name: '.$user_name);
|
||||
$this->comment('First Name: '.$first_name);
|
||||
$this->comment('Last Name: '.$last_name);
|
||||
$this->comment('Username: '.$user_username);
|
||||
$this->comment('Email: '.$user_email);
|
||||
$this->comment('Category Name: '.$user_asset_category);
|
||||
$this->comment('Item: '.$user_asset_name);
|
||||
@@ -196,26 +223,28 @@ class ImportCommand extends Command {
|
||||
$this->comment('Asset Tag: '.$user_asset_tag);
|
||||
$this->comment('Location: '.$user_asset_location);
|
||||
$this->comment('Purchase Date: '.$user_asset_purchase_date);
|
||||
$this->comment('Purchase Cost: '.$user_asset_purchase_cost);
|
||||
$this->comment('Notes: '.$user_asset_notes);
|
||||
|
||||
$this->comment('------------- Action Summary ----------------');
|
||||
|
||||
if ($user_email!='') {
|
||||
if ($user = User::where('email', $user_email)->first()) {
|
||||
$this->comment('User '.$user_email.' already exists');
|
||||
if ($user_username!='') {
|
||||
if ($user = User::where('username', $user_username)->whereNotNull('username')->first()) {
|
||||
$this->comment('User '.$user_username.' already exists');
|
||||
} else {
|
||||
// Create the user
|
||||
$user = Sentry::createUser(array(
|
||||
'first_name' => $first_name,
|
||||
'last_name' => $last_name,
|
||||
'email' => $user_email,
|
||||
'username' => $user_username,
|
||||
'password' => substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 10),
|
||||
'activated' => true,
|
||||
'permissions' => array(
|
||||
'admin' => 0,
|
||||
'user' => 1,
|
||||
),
|
||||
'notes' => 'Imported user'
|
||||
'notes' => 'User imported through asset importer'
|
||||
));
|
||||
|
||||
// Find the group using the group id
|
||||
@@ -311,6 +340,16 @@ class ImportCommand extends Command {
|
||||
|
||||
$asset = new Asset();
|
||||
$asset->name = e($user_asset_name);
|
||||
if ($user_asset_purchase_date!='') {
|
||||
$asset->purchase_date = $user_asset_purchase_date;
|
||||
} else {
|
||||
$asset->purchase_date = NULL;
|
||||
}
|
||||
if ($user_asset_purchase_cost!='') {
|
||||
$asset->purchase_cost = ParseFloat(e($user_asset_purchase_cost));
|
||||
} else {
|
||||
$asset->purchase_cost = 0.00;
|
||||
}
|
||||
$asset->serial = e($user_asset_serial);
|
||||
$asset->asset_tag = e($user_asset_tag);
|
||||
$asset->model_id = $asset_model->id;
|
||||
@@ -0,0 +1,381 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use League\Csv\Reader;
|
||||
|
||||
class LicenseImportCommand extends Command {
|
||||
|
||||
/**
|
||||
* The console command name.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $name = 'license-import:csv';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'Import Licenses from CSV';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function fire()
|
||||
{
|
||||
$filename = $this->argument('filename');
|
||||
|
||||
|
||||
if (!$this->option('testrun')=='true') {
|
||||
$this->comment('======= Importing Licenses from '.$filename.' =========');
|
||||
} else {
|
||||
$this->comment('====== TEST ONLY License Import for '.$filename.' ====');
|
||||
$this->comment('============== NO DATA WILL BE WRITTEN ==============');
|
||||
}
|
||||
|
||||
if (! ini_get("auto_detect_line_endings")) {
|
||||
ini_set("auto_detect_line_endings", '1');
|
||||
}
|
||||
|
||||
$csv = Reader::createFromPath($this->argument('filename'));
|
||||
$csv->setNewline("\r\n");
|
||||
$csv->setOffset(1);
|
||||
$duplicates = '';
|
||||
|
||||
// Loop through the records
|
||||
$nbInsert = $csv->each(function ($row) use ($duplicates) {
|
||||
$status_id = 1;
|
||||
|
||||
// Let's just map some of these entries to more user friendly words
|
||||
|
||||
if (array_key_exists('0',$row)) {
|
||||
$user_name = trim($row[0]);
|
||||
} else {
|
||||
$user_name = '';
|
||||
}
|
||||
|
||||
if (array_key_exists('1',$row)) {
|
||||
$user_email = trim($row[1]);
|
||||
} else {
|
||||
$user_email = '';
|
||||
}
|
||||
|
||||
if (array_key_exists('2',$row)) {
|
||||
$user_username = trim($row[2]);
|
||||
} else {
|
||||
$user_username = '';
|
||||
}
|
||||
|
||||
if (array_key_exists('3',$row)) {
|
||||
$user_license_name = trim($row[3]);
|
||||
} else {
|
||||
$user_license_name = '';
|
||||
}
|
||||
|
||||
if (array_key_exists('4',$row)) {
|
||||
$user_license_serial = trim($row[4]);
|
||||
} else {
|
||||
$user_license_serial = '';
|
||||
}
|
||||
|
||||
if (array_key_exists('5',$row)) {
|
||||
$user_licensed_to_name = trim($row[5]);
|
||||
} else {
|
||||
$user_licensed_to_name = '';
|
||||
}
|
||||
|
||||
if (array_key_exists('6',$row)) {
|
||||
$user_licensed_to_email = trim($row[6]);
|
||||
} else {
|
||||
$user_licensed_to_email = '';
|
||||
}
|
||||
|
||||
if (array_key_exists('7',$row)) {
|
||||
$user_license_seats = trim($row[7]);
|
||||
} else {
|
||||
$user_license_seats = '';
|
||||
}
|
||||
|
||||
if (array_key_exists('8',$row)) {
|
||||
$user_license_reassignable = trim($row[8]);
|
||||
if ($user_license_reassignable!='') {
|
||||
if ((strtolower($user_license_reassignable)=='yes') || (strtolower($user_license_reassignable)=='true') || ($user_license_reassignable=='1')) {
|
||||
$user_license_reassignable = 1;
|
||||
}
|
||||
} else {
|
||||
$user_license_reassignable = 0;
|
||||
}
|
||||
} else {
|
||||
$user_license_reassignable = 0;
|
||||
}
|
||||
|
||||
if (array_key_exists('9',$row)) {
|
||||
$user_license_supplier = trim($row[9]);
|
||||
} else {
|
||||
$user_license_supplier = '';
|
||||
}
|
||||
|
||||
if (array_key_exists('10',$row)) {
|
||||
$user_license_maintained = trim($row[10]);
|
||||
|
||||
if ($user_license_maintained!='') {
|
||||
if ((strtolower($user_license_maintained)=='yes') || (strtolower($user_license_maintained)=='true') || ($user_license_maintained=='1')) {
|
||||
$user_license_maintained = 1;
|
||||
}
|
||||
} else {
|
||||
$user_license_maintained = 0;
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
$user_license_maintained = '';
|
||||
}
|
||||
|
||||
if (array_key_exists('11',$row)) {
|
||||
$user_license_notes = trim($row[11]);
|
||||
} else {
|
||||
$user_license_notes = '';
|
||||
}
|
||||
|
||||
if (array_key_exists('12',$row)) {
|
||||
if ($row[12]!='') {
|
||||
$user_license_purchase_date = date("Y-m-d 00:00:01", strtotime($row[12]));
|
||||
} else {
|
||||
$user_license_purchase_date = '';
|
||||
}
|
||||
} else {
|
||||
$user_license_purchase_date = 0;
|
||||
}
|
||||
|
||||
// A number was given instead of a name
|
||||
if (is_numeric($user_name)) {
|
||||
$this->comment('User '.$user_name.' is not a name - assume this user already exists');
|
||||
$user_username = '';
|
||||
// No name was given
|
||||
|
||||
} elseif ($user_name=='') {
|
||||
$this->comment('No user data provided - skipping user creation, just adding license');
|
||||
$first_name = '';
|
||||
$last_name = '';
|
||||
$user_username = '';
|
||||
|
||||
} else {
|
||||
|
||||
$name = explode(" ", $user_name);
|
||||
$first_name = $name[0];
|
||||
$email_last_name = '';
|
||||
$email_prefix = $first_name;
|
||||
|
||||
if (!array_key_exists(1, $name)) {
|
||||
$last_name='';
|
||||
$email_last_name = $last_name;
|
||||
$email_prefix = $first_name;
|
||||
} else {
|
||||
$last_name = str_replace($first_name,'',$user_name);
|
||||
|
||||
if ($this->option('email_format')=='filastname') {
|
||||
$email_last_name.=str_replace(' ','',$last_name);
|
||||
$email_prefix = $first_name[0].$email_last_name;
|
||||
|
||||
} elseif ($this->option('email_format')=='firstname.lastname') {
|
||||
$email_last_name.=str_replace(' ','',$last_name);
|
||||
$email_prefix = $first_name.'.'.$email_last_name;
|
||||
|
||||
} elseif ($this->option('email_format')=='firstname') {
|
||||
$email_last_name.=str_replace(' ','',$last_name);
|
||||
$email_prefix = $first_name;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
$user_username = $email_prefix;
|
||||
|
||||
// Generate an email based on their name if no email address is given
|
||||
if ($user_email=='') {
|
||||
if ($first_name=='Unknown') {
|
||||
$status_id = 7;
|
||||
}
|
||||
$email = strtolower($email_prefix).'@'.$this->option('domain');
|
||||
$user_email = str_replace("'",'',$email);
|
||||
}
|
||||
}
|
||||
|
||||
$this->comment('Full Name: '.$user_name);
|
||||
$this->comment('First Name: '.$first_name);
|
||||
$this->comment('Last Name: '.$last_name);
|
||||
$this->comment('Username: '.$user_username);
|
||||
$this->comment('Email: '.$user_email);
|
||||
$this->comment('License Name: '.$user_license_name);
|
||||
$this->comment('Serial No: '.$user_license_serial);
|
||||
$this->comment('Licensed To Name: '.$user_licensed_to_name);
|
||||
$this->comment('Licensed To Email: '.$user_licensed_to_email);
|
||||
$this->comment('Seats: '.$user_license_seats);
|
||||
$this->comment('Reassignable: '.$user_license_reassignable);
|
||||
$this->comment('Supplier: '.$user_license_supplier);
|
||||
$this->comment('Maintained: '.$user_license_maintained);
|
||||
$this->comment('Notes: '.$user_license_notes);
|
||||
$this->comment('Purchase Date: '.$user_license_purchase_date);
|
||||
|
||||
$this->comment('------------- Action Summary ----------------');
|
||||
|
||||
if ($user_username!='') {
|
||||
if ($user = User::where('username', $user_username)->whereNotNull('username')->first()) {
|
||||
$this->comment('User '.$user_username.' already exists');
|
||||
} else {
|
||||
// Create the user
|
||||
$user = Sentry::createUser(array(
|
||||
'first_name' => $first_name,
|
||||
'last_name' => $last_name,
|
||||
'email' => $user_email,
|
||||
'username' => $user_username,
|
||||
'password' => substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 10),
|
||||
'activated' => true,
|
||||
'permissions' => array(
|
||||
'admin' => 0,
|
||||
'user' => 1,
|
||||
),
|
||||
'notes' => 'User importerd through license importer'
|
||||
));
|
||||
|
||||
// Find the group using the group id
|
||||
$userGroup = Sentry::findGroupById(3);
|
||||
|
||||
// Assign the group to the user
|
||||
$user->addGroup($userGroup);
|
||||
$this->comment('User '.$first_name.' created');
|
||||
}
|
||||
} else {
|
||||
$user = new User;
|
||||
$user->user_id = NULL;
|
||||
}
|
||||
|
||||
|
||||
// Check for the supplier match and create it if it doesn't exist
|
||||
if ($supplier = Supplier::where('name', $user_license_supplier)->first()) {
|
||||
$this->comment('Supplier '.$user_license_supplier.' already exists');
|
||||
} else {
|
||||
$supplier = new Supplier();
|
||||
$supplier->name = e($user_license_supplier);
|
||||
$supplier->user_id = 1;
|
||||
|
||||
if ($supplier->save()) {
|
||||
$this->comment('Supplier '.$user_license_supplier.' was created');
|
||||
} else {
|
||||
$this->comment('Something went wrong! Supplier '.$user_license_supplier.' was NOT created');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Add the license
|
||||
$license = new License();
|
||||
$license->name = e($user_license_name);
|
||||
if ($user_license_purchase_date!='') {
|
||||
$license->purchase_date = $user_license_purchase_date;
|
||||
} else {
|
||||
$license->purchase_date = NULL;
|
||||
}
|
||||
$license->serial = e($user_license_serial);
|
||||
$license->seats = e($user_license_seats);
|
||||
$license->supplier_id = $supplier->id;
|
||||
$license->user_id = 1;
|
||||
if ($user_license_purchase_date!='') {
|
||||
$license->purchase_date = $user_license_purchase_date;
|
||||
} else {
|
||||
$license->purchase_date = NULL;
|
||||
}
|
||||
$license->license_name = $user_licensed_to_name;
|
||||
$license->license_email = $user_licensed_to_email;
|
||||
$license->notes = e($user_license_notes);
|
||||
|
||||
if ($license->save()) {
|
||||
$this->comment('License '.$user_license_name.' with serial number '.$user_license_serial.' was created');
|
||||
|
||||
|
||||
$license_seat_created = 0;
|
||||
|
||||
for ($x = 0; $x < $user_license_seats; $x++) {
|
||||
// Create the license seat entries
|
||||
$license_seat = new LicenseSeat();
|
||||
$license_seat->license_id = $license->id;
|
||||
|
||||
// Only assign the first seat to the user
|
||||
if ($x==0) {
|
||||
$license_seat->assigned_to = $user->id;
|
||||
} else {
|
||||
$license_seat->assigned_to = NULL;
|
||||
}
|
||||
|
||||
if ($license_seat->save()) {
|
||||
$license_seat_created++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($license_seat_created > 0) {
|
||||
$this->comment($license_seat_created.' seats were created');
|
||||
} else {
|
||||
$this->comment('Something went wrong! NO seats for '.$user_license_name.' were created');
|
||||
}
|
||||
|
||||
|
||||
|
||||
} else {
|
||||
$this->comment('Something went wrong! License '.$user_license_name.' was NOT created');
|
||||
}
|
||||
|
||||
|
||||
$this->comment('=====================================');
|
||||
|
||||
return true;
|
||||
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the console command arguments.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getArguments()
|
||||
{
|
||||
return array(
|
||||
array('filename', InputArgument::REQUIRED, 'File for the CSV import.'),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Get the console command options.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getOptions()
|
||||
{
|
||||
return array(
|
||||
array('domain', null, InputOption::VALUE_REQUIRED, 'Email domain for generated email addresses.', null),
|
||||
array('email_format', null, InputOption::VALUE_REQUIRED, 'The format of the email addresses that should be generated. Options are firstname.lastname, firstname, filastname', null),
|
||||
array('testrun', null, InputOption::VALUE_REQUIRED, 'Test the output without writing to the database or not.', null),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -37,58 +37,94 @@ class SendExpirationAlerts extends Command {
|
||||
*/
|
||||
public function fire()
|
||||
{
|
||||
$expiring_assets = Asset::getExpiringWarrantee(60);
|
||||
|
||||
$data['count'] = count($expiring_assets);
|
||||
$data['email_content'] ='';
|
||||
|
||||
|
||||
|
||||
// Expiring Assets
|
||||
$expiring_assets = Asset::getExpiringWarrantee(60);
|
||||
$this->info(count($expiring_assets).' expiring assets');
|
||||
|
||||
$asset_data['count'] = count($expiring_assets);
|
||||
$asset_data['email_content'] ='';
|
||||
$now = date("Y-m-d");
|
||||
|
||||
|
||||
foreach ($expiring_assets as $asset) {
|
||||
$now = date("Y-m-d");
|
||||
|
||||
$expires = $asset->warrantee_expires();
|
||||
$difference = round(abs(strtotime($expires) - strtotime($now))/86400);
|
||||
|
||||
|
||||
if ($difference > 30) {
|
||||
$data['email_content'] .= '<tr style="background-color: #fcffa3;">';
|
||||
$asset_data['email_content'] .= '<tr style="background-color: #fcffa3;">';
|
||||
} else {
|
||||
$data['email_content'] .= '<tr style="background-color:#d9534f;">';
|
||||
$asset_data['email_content'] .= '<tr style="background-color:#d9534f;">';
|
||||
}
|
||||
$data['email_content'] .= '<td><a href="'.Config::get('app.url').'/hardware/'.$asset->id.'/view">';
|
||||
$data['email_content'] .= $asset->name.'</a></td><td>'.$asset->asset_tag.'</td>';
|
||||
$data['email_content'] .= '<td>'.$asset->warrantee_expires().'</td>';
|
||||
$data['email_content'] .= '<td>'.$difference.' days</td>';
|
||||
$data['email_content'] .= '</tr>';
|
||||
$asset_data['email_content'] .= '<td><a href="'.Config::get('app.url').'/hardware/'.$asset->id.'/view">';
|
||||
$asset_data['email_content'] .= $asset->showAssetName().'</a></td><td>'.$asset->asset_tag.'</td>';
|
||||
$asset_data['email_content'] .= '<td>'.$asset->warrantee_expires().'</td>';
|
||||
$asset_data['email_content'] .= '<td>'.$difference.' days</td>';
|
||||
$asset_data['email_content'] .= '</tr>';
|
||||
}
|
||||
|
||||
if ((Setting::getSettings()->alert_email!='') && (Setting::getSettings()->alerts_enabled==1)){
|
||||
|
||||
// Expiring licenses
|
||||
$expiring_licenses = License::getExpiringLicenses(60);
|
||||
$this->info(count($expiring_licenses).' expiring licenses');
|
||||
|
||||
|
||||
$license_data['count'] = count($expiring_licenses);
|
||||
$license_data['email_content'] = '';
|
||||
|
||||
foreach ($expiring_licenses as $license) {
|
||||
$expires = $license->expiration_date;
|
||||
$difference = round(abs(strtotime($expires) - strtotime($now))/86400);
|
||||
|
||||
if ($difference > 30) {
|
||||
$license_data['email_content'] .= '<tr style="background-color: #fcffa3;">';
|
||||
} else {
|
||||
$license_data['email_content'] .= '<tr style="background-color:#d9534f;">';
|
||||
}
|
||||
$license_data['email_content'] .= '<td><a href="'.Config::get('app.url').'/admin/licenses/'.$license->id.'/view">';
|
||||
$license_data['email_content'] .= $license->name.'</a></td>';
|
||||
$license_data['email_content'] .= '<td>'.$license->expiration_date.'</td>';
|
||||
$license_data['email_content'] .= '<td>'.$difference.' days</td>';
|
||||
$license_data['email_content'] .= '</tr>';
|
||||
}
|
||||
|
||||
if ((Setting::getSettings()->alert_email!='') && (Setting::getSettings()->alerts_enabled==1)) {
|
||||
|
||||
|
||||
if (count($expiring_assets) > 0) {
|
||||
|
||||
Mail::send('emails.expiring-report', $data, function ($m) {
|
||||
Mail::send('emails.expiring-assets-report', $asset_data, function ($m) {
|
||||
$m->to(Setting::getSettings()->alert_email, Setting::getSettings()->site_name);
|
||||
$m->subject('Expiring Assets Report');
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (count($expiring_licenses) > 0) {
|
||||
Mail::send('emails.expiring-licenses-report', $license_data, function ($m) {
|
||||
$m->to(Setting::getSettings()->alert_email, Setting::getSettings()->site_name);
|
||||
$m->subject('Expiring Licenses Report');
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
|
||||
if (Setting::getSettings()->alert_email=='') {
|
||||
echo "Could not send email. No alert email configured in settings. \n";
|
||||
} elseif (Setting::getSettings()->alerts_enabled!=1) {
|
||||
echo "Alerts are disabled in the settings. No mail will be sent. \n";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
|
||||
class SystemBackup extends Command {
|
||||
|
||||
/**
|
||||
* The console command name.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $name = 'snipeit:backup';
|
||||
|
||||
/**
|
||||
* The console command description.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $description = 'This command creates a database dump and zips up all of the uploaded files in the upload directories.';
|
||||
|
||||
/**
|
||||
* Create a new command instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute the console command.
|
||||
*
|
||||
* @return mixed
|
||||
*/
|
||||
public function fire()
|
||||
{
|
||||
//
|
||||
$files['avatars'] = glob(public_path().'/uploads/avatars/*');
|
||||
$files['models'] = glob(public_path().'/uploads/models/*');
|
||||
$files['suppliers'] = glob(public_path().'/uploads/suppliers/*');
|
||||
$files['private_uploads'] = glob(app_path().'/private_uploads/*');
|
||||
$base_filename = date('Ymdgis');
|
||||
$zip_file = app_path().'/storage/dumps/'.$base_filename.'-backup.zip';
|
||||
$db_dump = Config::get('backup::path').$base_filename.'-db.sql';
|
||||
$this->call('db:backup', array('filename' => $db_dump));
|
||||
|
||||
Zipper::make($zip_file)
|
||||
->folder('avatars')->add($files['avatars'])
|
||||
->folder('models')->add($files['models'])
|
||||
->folder('suppliers')->add($files['suppliers'])
|
||||
->folder('private_uploads')->add($files['private_uploads'])
|
||||
->folder('database')->add($db_dump)->close();
|
||||
|
||||
$this->info('Backup file created at '.$zip_file);
|
||||
$this->info('Removing SQL dump at '.$db_dump);
|
||||
unlink($db_dump);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
+5
-4
@@ -43,7 +43,7 @@ return array(
|
||||
*/
|
||||
|
||||
'cipher' => MCRYPT_RIJNDAEL_256,
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Prevent Password changes
|
||||
@@ -101,8 +101,10 @@ return array(
|
||||
'Barryvdh\Debugbar\ServiceProvider',
|
||||
'Cartalyst\Sentry\SentryServiceProvider',
|
||||
'Chumper\Datatable\DatatableServiceProvider',
|
||||
'Dinesh\Barcode\BarcodeServiceProvider',
|
||||
'Maknz\Slack\SlackServiceProvider',
|
||||
'Schickling\Backup\BackupServiceProvider',
|
||||
'Chumper\Zipper\ZipperServiceProvider',
|
||||
'Fideloper\Proxy\ProxyServiceProvider',
|
||||
|
||||
),
|
||||
|
||||
@@ -174,9 +176,8 @@ return array(
|
||||
'Validator' => 'Illuminate\Support\Facades\Validator',
|
||||
'View' => 'Illuminate\Support\Facades\View',
|
||||
'Reader' => 'League\Csv\Reader',
|
||||
'DNS1D' => 'Dinesh\Barcode\Facades\DNS1DFacade',
|
||||
'DNS2D' => 'Dinesh\Barcode\Facades\DNS2DFacade',
|
||||
'Slack' => 'Maknz\Slack\Facades\Slack',
|
||||
'Zipper' => 'Chumper\Zipper\Zipper',
|
||||
|
||||
),
|
||||
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| URL
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| URL for the LDAP server. This should start with ldap://, for example:
|
||||
| ldap://ldap.yourserver.com
|
||||
|
|
||||
*/
|
||||
'url' => "",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Username
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Username to use to connect authenticate to LDAP, for example:
|
||||
| cn=read-only-admin,dc=example,dc=com
|
||||
|
|
||||
*/
|
||||
'username' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Password to use when authenticating to LDAP.
|
||||
|
|
||||
*/
|
||||
'password' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Basedn
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The base where the search for users will be executed, for example:
|
||||
| dc=example,dc=com
|
||||
|
|
||||
*/
|
||||
'basedn' => "",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Filter
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The search filter for the LDAP query. This probably does not have to be
|
||||
| changed.
|
||||
|
|
||||
*/
|
||||
'filter' => "&(cn=*)",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP field names that will be retrieved to create a user.
|
||||
|
|
||||
| Using the username as an example:
|
||||
| If I set 'result.username' => 'my-org-username', the code will connect to
|
||||
| LDAP as follows (where $results[$i] represents a row in the LDAP query:
|
||||
| $username-to-insert-in-snipe-it = $results[$i]["my-org-username"][0]
|
||||
|
|
||||
| Note: all these fields are required.
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The search filter for the LDAP query.
|
||||
|
|
||||
*/
|
||||
'result.username' => "",
|
||||
'result.last.name' => "",
|
||||
'result.first.name' => "",
|
||||
|
||||
/*
|
||||
| These fields are optional as not all LDAP directories will have it. If yours
|
||||
| does not have them, just leave these blank and the extra check will
|
||||
| be omitted.
|
||||
*/
|
||||
'result.active.flag' => "",
|
||||
'result.emp.num' => "",
|
||||
'result.email' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP filter query for authentication
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The LDAP query that we want to execute when authenticating a user. This
|
||||
| should not have to be changed.
|
||||
|
|
||||
*/
|
||||
'authentication.filter.query' => "uid=",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP Version
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Version of LDAP you are using.
|
||||
|
|
||||
*/
|
||||
'version' => 3,
|
||||
|
||||
|
||||
);
|
||||
@@ -46,7 +46,7 @@ return array(
|
||||
|
|
||||
*/
|
||||
|
||||
'hasher' => 'native',
|
||||
'hasher' => 'bcrypt',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -134,7 +134,7 @@ return array(
|
||||
|
|
||||
*/
|
||||
|
||||
'login_attribute' => 'email',
|
||||
'login_attribute' => 'username',
|
||||
|
||||
),
|
||||
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
return array(
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Trusted Proxies
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Set an array of trusted proxies, so Laravel knows to grab the client's
|
||||
| information via the X-Forwarded-* headers.
|
||||
|
|
||||
| To trust all proxies, use the value '*':
|
||||
|
|
||||
| 'proxies' => '*'
|
||||
|
|
||||
|
|
||||
| To trust only specific proxies (recommended), set an array of those
|
||||
| proxies' IP addresses:
|
||||
|
|
||||
| 'proxies' => array('192.168.1.1', '192.168.1.2')
|
||||
|
|
||||
|
|
||||
| Or use CIDR notation:
|
||||
|
|
||||
| 'proxies' => array('192.168.12.0/23')
|
||||
|
|
||||
*/
|
||||
|
||||
'proxies' => '*',
|
||||
|
||||
);
|
||||
@@ -0,0 +1,15 @@
|
||||
<?php
|
||||
return array(
|
||||
'path' => 'app/storage/dumps/',
|
||||
|
||||
'mysql' => array(
|
||||
'dump_command_path' => '',
|
||||
'restore_command_path' => '',
|
||||
),
|
||||
|
||||
's3' => array(
|
||||
'path' => ''
|
||||
),
|
||||
|
||||
'compress' => false,
|
||||
);
|
||||
@@ -1,3 +1,4 @@
|
||||
app.php
|
||||
mail.php
|
||||
database.php
|
||||
ldap.php
|
||||
@@ -26,7 +26,7 @@ return array(
|
||||
|
|
||||
*/
|
||||
|
||||
'url' => 'http://production.yourserver.com',
|
||||
'url' => 'https://production.yourserver.com',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| URL
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| URL for the LDAP server. This should start with ldap://, for example:
|
||||
| ldap://ldap.yourserver.com
|
||||
|
|
||||
*/
|
||||
'url' => "",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Username
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Username to use to connect authenticate to LDAP, for example:
|
||||
| cn=read-only-admin,dc=example,dc=com
|
||||
|
|
||||
*/
|
||||
'username' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Password to use when authenticating to LDAP.
|
||||
|
|
||||
*/
|
||||
'password' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Basedn
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The base where the search for users will be executed, for example:
|
||||
| dc=example,dc=com
|
||||
|
|
||||
*/
|
||||
'basedn' => "",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Filter
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The search filter for the LDAP query. This probably does not have to be
|
||||
| changed.
|
||||
|
|
||||
*/
|
||||
'filter' => "&(cn=*)",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP field names that will be retrieved to create a user.
|
||||
|
|
||||
| Using the username as an example:
|
||||
| If I set 'result.username' => 'my-org-username', the code will connect to
|
||||
| LDAP as follows (where $results[$i] represents a row in the LDAP query:
|
||||
| $username-to-insert-in-snipe-it = $results[$i]["my-org-username"][0]
|
||||
|
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The search filter for the LDAP query.
|
||||
| Note: all these fields are required, and they should all be lowercase.
|
||||
|
|
||||
*/
|
||||
'result.username' => "",
|
||||
'result.last.name' => "",
|
||||
'result.first.name' => "",
|
||||
|
||||
/*
|
||||
| These fields are optional as not all LDAP directories will have it. If yours
|
||||
| does not have them, just leave these blank and the extra check will
|
||||
| be omitted.
|
||||
*/
|
||||
'result.active.flag' => "",
|
||||
'result.emp.num' => "",
|
||||
'result.email' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP filter query for authentication
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The LDAP query that we want to execute when authenticating a user. This
|
||||
| should not have to be changed.
|
||||
|
|
||||
*/
|
||||
'authentication.filter.query' => "uid=",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP Version
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Version of LDAP you are using.
|
||||
|
|
||||
*/
|
||||
'version' => 3,
|
||||
|
||||
|
||||
);
|
||||
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| URL
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| URL for the LDAP server. This should start with ldap://, for example:
|
||||
| ldap://ldap.yourserver.com
|
||||
|
|
||||
*/
|
||||
'url' => "",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Username
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Username to use to connect authenticate to LDAP, for example:
|
||||
| cn=read-only-admin,dc=example,dc=com
|
||||
|
|
||||
*/
|
||||
'username' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Password to use when authenticating to LDAP.
|
||||
|
|
||||
*/
|
||||
'password' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Basedn
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The base where the search for users will be executed, for example:
|
||||
| dc=example,dc=com
|
||||
|
|
||||
*/
|
||||
'basedn' => "",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Filter
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The search filter for the LDAP query. This probably does not have to be
|
||||
| changed.
|
||||
|
|
||||
*/
|
||||
'filter' => "&(cn=*)",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP field names that will be retrieved to create a user.
|
||||
|
|
||||
| Using the username as an example:
|
||||
| If I set 'result.username' => 'my-org-username', the code will connect to
|
||||
| LDAP as follows (where $results[$i] represents a row in the LDAP query:
|
||||
| $username-to-insert-in-snipe-it = $results[$i]["my-org-username"][0]
|
||||
|
|
||||
| Note: all these fields are required.
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The search filter for the LDAP query.
|
||||
|
|
||||
*/
|
||||
'result.username' => "",
|
||||
'result.last.name' => "",
|
||||
'result.first.name' => "",
|
||||
|
||||
/*
|
||||
| These fields are optional as not all LDAP directories will have it. If yours
|
||||
| does not have them, just leave these blank and the extra check will
|
||||
| be omitted.
|
||||
*/
|
||||
'result.active.flag' => "",
|
||||
'result.emp.num' => "",
|
||||
'result.email' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP filter query for authentication
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The LDAP query that we want to execute when authenticating a user. This
|
||||
| should not have to be changed.
|
||||
|
|
||||
*/
|
||||
'authentication.filter.query' => "uid=",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP Version
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Version of LDAP you are using.
|
||||
|
|
||||
*/
|
||||
'version' => 3,
|
||||
|
||||
|
||||
);
|
||||
@@ -26,7 +26,7 @@ return array(
|
||||
|
|
||||
*/
|
||||
|
||||
'url' => 'http://staging.yourserver.com',
|
||||
'url' => 'http://snipe-it.dev',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
@@ -40,6 +40,6 @@ return array(
|
||||
| Run a php artisan key:generate --env=staging to create a random one
|
||||
*/
|
||||
|
||||
'key' => 'Change_this_key_or_snipe_will_get_ya',
|
||||
'key' => '8YHfiO4EyWBewqrpGHDA4Iuom2ZIahXQ',
|
||||
|
||||
);
|
||||
|
||||
@@ -54,7 +54,7 @@ return array(
|
||||
'mysql' => array(
|
||||
'driver' => 'mysql',
|
||||
'host' => 'localhost',
|
||||
'database' => 'snipeit_laravel',
|
||||
'database' => 'snipeit_unit',
|
||||
'username' => 'travis',
|
||||
'password' => '',
|
||||
'charset' => 'utf8',
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| URL
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| URL for the LDAP server. This should start with ldap://, for example:
|
||||
| ldap://ldap.yourserver.com
|
||||
|
|
||||
*/
|
||||
'url' => "",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Username
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Username to use to connect authenticate to LDAP, for example:
|
||||
| cn=read-only-admin,dc=example,dc=com
|
||||
|
|
||||
*/
|
||||
'username' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Password to use when authenticating to LDAP.
|
||||
|
|
||||
*/
|
||||
'password' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Basedn
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The base where the search for users will be executed, for example:
|
||||
| dc=example,dc=com
|
||||
|
|
||||
*/
|
||||
'basedn' => "",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Filter
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The search filter for the LDAP query. This probably does not have to be
|
||||
| changed.
|
||||
|
|
||||
*/
|
||||
'filter' => "&(cn=*)",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP field names that will be retrieved to create a user.
|
||||
|
|
||||
| Using the username as an example:
|
||||
| If I set 'result.username' => 'my-org-username', the code will connect to
|
||||
| LDAP as follows (where $results[$i] represents a row in the LDAP query:
|
||||
| $username-to-insert-in-snipe-it = $results[$i]["my-org-username"][0]
|
||||
|
|
||||
| Note: all these fields are required.
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The search filter for the LDAP query.
|
||||
|
|
||||
*/
|
||||
'result.username' => "",
|
||||
'result.last.name' => "",
|
||||
'result.first.name' => "",
|
||||
|
||||
/*
|
||||
| These fields are optional as not all LDAP directories will have it. If yours
|
||||
| does not have them, just leave these blank and the extra check will
|
||||
| be omitted.
|
||||
*/
|
||||
'result.active.flag' => "",
|
||||
'result.emp.num' => "",
|
||||
'result.email' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP filter query for authentication
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The LDAP query that we want to execute when authenticating a user. This
|
||||
| should not have to be changed.
|
||||
|
|
||||
*/
|
||||
'authentication.filter.query' => "uid=",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP Version
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Version of LDAP you are using.
|
||||
|
|
||||
*/
|
||||
'version' => 3,
|
||||
|
||||
|
||||
);
|
||||
Executable
+45
@@ -0,0 +1,45 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application Debug Mode
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When your application is in debug mode, detailed error messages with
|
||||
| stack traces will be shown on every error that occurs within your
|
||||
| application. If disabled, a simple generic error page is shown.
|
||||
|
|
||||
*/
|
||||
|
||||
'debug' => true,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Application URL
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This URL is used by the console to properly generate URLs when using
|
||||
| the Artisan command line tool. You should set this to the root of
|
||||
| your application so that it is used when running Artisan tasks.
|
||||
|
|
||||
*/
|
||||
|
||||
'url' => 'http://localhost:8007',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Encryption Key
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This key is used by the Illuminate encrypter service and should be set
|
||||
| to a random, 32 character string, otherwise these encrypted strings
|
||||
| will not be safe. Please do this before deploying an application!
|
||||
|
|
||||
| Run a php artisan key:generate --env=staging to create a random one
|
||||
*/
|
||||
|
||||
'key' => '8YHfiO4EyWBewqrpGHDA4Iuom2ZIahXQ',
|
||||
|
||||
);
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Cache Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This option controls the default cache "driver" that will be used when
|
||||
| using the Caching library. Of course, you may use other drivers any
|
||||
| time you wish. This is the default when another is not specified.
|
||||
|
|
||||
| Supported: "file", "database", "apc", "memcached", "redis", "array"
|
||||
|
|
||||
*/
|
||||
|
||||
'driver' => 'array',
|
||||
|
||||
);
|
||||
Executable
+103
@@ -0,0 +1,103 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| PDO Fetch Style
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| By default, database results will be returned as instances of the PHP
|
||||
| stdClass object; however, you may desire to retrieve records in an
|
||||
| array format for simplicity. Here you can tweak the fetch style.
|
||||
|
|
||||
*/
|
||||
|
||||
'fetch' => PDO::FETCH_CLASS,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Default Database Connection Name
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify which of the database connections below you wish
|
||||
| to use as your default connection for all database work. Of course
|
||||
| you may use many connections at once using the Database library.
|
||||
|
|
||||
*/
|
||||
|
||||
'default' => 'mysql',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Database Connections
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here are each of the database connections setup for your application.
|
||||
| Of course, examples of configuring each database platform that is
|
||||
| supported by Laravel is shown below to make development simple.
|
||||
|
|
||||
|
|
||||
| All database work in Laravel is done through the PHP PDO facilities
|
||||
| so make sure you have the driver for your particular database of
|
||||
| choice installed on your machine before you begin development.
|
||||
|
|
||||
*/
|
||||
|
||||
'connections' => array(
|
||||
'sqlite' => array(
|
||||
'driver' => 'sqlite',
|
||||
'database' => ':memory:',
|
||||
'prefix' => ''
|
||||
),
|
||||
|
||||
'mysql' => array(
|
||||
'driver' => 'mysql',
|
||||
'host' => 'localhost',
|
||||
'database' => 'snipeit_unit',
|
||||
'username' => 'travis',
|
||||
'password' => '',
|
||||
'charset' => 'utf8',
|
||||
'collation' => 'utf8_unicode_ci',
|
||||
'prefix' => '',
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Migration Repository Table
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This table keeps track of all the migrations that have already run for
|
||||
| your application. Using this information, we can determine which of
|
||||
| the migrations on disk have not actually be run in the databases.
|
||||
|
|
||||
*/
|
||||
|
||||
'migrations' => 'migrations',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Redis Databases
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Redis is an open source, fast, and advanced key-value store that also
|
||||
| provides a richer set of commands than a typical key-value systems
|
||||
| such as APC or Memcached. Laravel makes it easy to dig right in.
|
||||
|
|
||||
*/
|
||||
|
||||
'redis' => array(
|
||||
|
||||
'cluster' => true,
|
||||
|
||||
'default' => array(
|
||||
'host' => '127.0.0.1',
|
||||
'port' => 6379,
|
||||
'database' => 0,
|
||||
),
|
||||
|
||||
),
|
||||
|
||||
);
|
||||
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| URL
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| URL for the LDAP server. This should start with ldap://, for example:
|
||||
| ldap://ldap.yourserver.com
|
||||
|
|
||||
*/
|
||||
'url' => "",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Username
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Username to use to connect authenticate to LDAP, for example:
|
||||
| cn=read-only-admin,dc=example,dc=com
|
||||
|
|
||||
*/
|
||||
'username' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Password
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Password to use when authenticating to LDAP.
|
||||
|
|
||||
*/
|
||||
'password' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Basedn
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The base where the search for users will be executed, for example:
|
||||
| dc=example,dc=com
|
||||
|
|
||||
*/
|
||||
'basedn' => "",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Filter
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The search filter for the LDAP query. This probably does not have to be
|
||||
| changed.
|
||||
|
|
||||
*/
|
||||
'filter' => "&(cn=*)",
|
||||
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP field names that will be retrieved to create a user.
|
||||
|
|
||||
| Using the username as an example:
|
||||
| If I set 'result.username' => 'my-org-username', the code will connect to
|
||||
| LDAP as follows (where $results[$i] represents a row in the LDAP query:
|
||||
| $username-to-insert-in-snipe-it = $results[$i]["my-org-username"][0]
|
||||
|
|
||||
| Note: all these fields are required.
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The search filter for the LDAP query.
|
||||
|
|
||||
*/
|
||||
'result.username' => "",
|
||||
'result.last.name' => "",
|
||||
'result.first.name' => "",
|
||||
|
||||
/*
|
||||
| These fields are optional as not all LDAP directories will have it. If yours
|
||||
| does not have them, just leave these blank and the extra check will
|
||||
| be omitted.
|
||||
*/
|
||||
'result.active.flag' => "",
|
||||
'result.emp.num' => "",
|
||||
'result.email' => "",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP filter query for authentication
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| The LDAP query that we want to execute when authenticating a user. This
|
||||
| should not have to be changed.
|
||||
|
|
||||
*/
|
||||
'authentication.filter.query' => "uid=",
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| LDAP Version
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Version of LDAP you are using.
|
||||
|
|
||||
*/
|
||||
'version' => 3,
|
||||
|
||||
|
||||
);
|
||||
Executable
+124
@@ -0,0 +1,124 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Mail Driver
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Laravel supports both SMTP and PHP's "mail" function as drivers for the
|
||||
| sending of e-mail. You may specify which one you're using throughout
|
||||
| your application here. By default, Laravel is setup for SMTP mail.
|
||||
|
|
||||
| Supported: "smtp", "mail", "sendmail"
|
||||
|
|
||||
*/
|
||||
|
||||
'driver' => 'smtp',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SMTP Host Address
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may provide the host address of the SMTP server used by your
|
||||
| applications. A default option is provided that is compatible with
|
||||
| the Postmark mail service, which will provide reliable delivery.
|
||||
|
|
||||
*/
|
||||
|
||||
'host' => 'smtp.mandrillapp.com',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SMTP Host Port
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| This is the SMTP port used by your application to delivery e-mails to
|
||||
| users of your application. Like the host we have set this value to
|
||||
| stay compatible with the Postmark e-mail application by default.
|
||||
|
|
||||
*/
|
||||
|
||||
'port' => 587,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Global "From" Address
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| You may wish for all e-mails sent by your application to be sent from
|
||||
| the same address. Here, you may specify a name and address that is
|
||||
| used globally for all e-mails that are sent by your application.
|
||||
|
|
||||
*/
|
||||
|
||||
'from' => array('address' => null, 'name' => null),
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| E-Mail Encryption Protocol
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may specify the encryption protocol that should be used when
|
||||
| the application send e-mail messages. A sensible default using the
|
||||
| transport layer security protocol should provide great security.
|
||||
|
|
||||
*/
|
||||
|
||||
'encryption' => 'tls',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SMTP Server Username
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| If your SMTP server requires a username for authentication, you should
|
||||
| set it here. This will get used to authenticate with your server on
|
||||
| connection. You may also set the "password" value below this one.
|
||||
|
|
||||
*/
|
||||
|
||||
'username' => null,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| SMTP Server Password
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| Here you may set the password required by your SMTP server to send out
|
||||
| messages from your application. This will be given to the server on
|
||||
| connection so that the application will be able to send messages.
|
||||
|
|
||||
*/
|
||||
|
||||
'password' => null,
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Sendmail System Path
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When using the "sendmail" driver to send e-mails, we will need to know
|
||||
| the path to where Sendmail lives on this server. A default path has
|
||||
| been provided here, which will work well on most of your systems.
|
||||
|
|
||||
*/
|
||||
|
||||
'sendmail' => '/usr/sbin/sendmail -bs',
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| Mail "Pretend"
|
||||
|--------------------------------------------------------------------------
|
||||
|
|
||||
| When this option is enabled, e-mail will not actually be sent over the
|
||||
| web and will instead be written to your application's logs files so
|
||||
| you may inspect the message. This is great for local development.
|
||||
|
|
||||
*/
|
||||
|
||||
'pretend' => true,
|
||||
|
||||
);
|
||||
@@ -1,5 +1,5 @@
|
||||
<?php
|
||||
return array (
|
||||
'app_version' => 'v1.2.8-26',
|
||||
'hash_version' => 'v1.2.8-26-gf5d4eb5',
|
||||
'app_version' => 'v2.0-125',
|
||||
'hash_version' => 'v2.0-125-g9b04954',
|
||||
);
|
||||
@@ -18,6 +18,50 @@ class AuthController extends BaseController
|
||||
return View::make('frontend.auth.signin');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Authenticates a user to LDAP
|
||||
*
|
||||
* @return true if the username and/or password provided are valid
|
||||
* false if the username and/or password provided are invalid
|
||||
*
|
||||
*/
|
||||
function ldap($username, $password) {
|
||||
|
||||
$ldaphost = Config::get('ldap.url');
|
||||
$ldaprdn = Config::get('ldap.username');
|
||||
$ldappass = Config::get('ldap.password');
|
||||
$baseDn = Config::get('ldap.basedn');
|
||||
$filterQuery = Config::get('ldap.authentication.filter.query') . $username;
|
||||
$ldapversion = Config::get('ldap.version');
|
||||
|
||||
// Connecting to LDAP
|
||||
$connection = ldap_connect($ldaphost) or die("Could not connect to {$ldaphost}");
|
||||
// Needed for AD
|
||||
ldap_set_option($connection, LDAP_OPT_REFERRALS, 0);
|
||||
ldap_set_option($connection, LDAP_OPT_PROTOCOL_VERSION,$ldapversion);
|
||||
|
||||
try {
|
||||
if ($connection) {
|
||||
// binding to ldap server
|
||||
$ldapbind = ldap_bind($connection, $ldaprdn, $ldappass);
|
||||
if ( ($results = @ldap_search($connection, $baseDn, $filterQuery)) !==false ) {
|
||||
$entry = ldap_first_entry($connection, $results);
|
||||
if ( ($userDn = @ldap_get_dn($connection, $entry)) !== false ) {
|
||||
if( ($isBound = ldap_bind($connection, $userDn, $password)) == "true") {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception $e) {
|
||||
LOG::error($e->getMessage());
|
||||
}
|
||||
ldap_close($connection);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Account sign in form processing.
|
||||
*
|
||||
@@ -27,7 +71,7 @@ class AuthController extends BaseController
|
||||
{
|
||||
// Declare the rules for the form validation
|
||||
$rules = array(
|
||||
'email' => 'required|email',
|
||||
'username' => 'required',
|
||||
'password' => 'required',
|
||||
);
|
||||
|
||||
@@ -41,8 +85,39 @@ class AuthController extends BaseController
|
||||
}
|
||||
|
||||
try {
|
||||
// Try to log the user in
|
||||
Sentry::authenticate(Input::only('email', 'password'), Input::get('remember-me', 0));
|
||||
|
||||
/**
|
||||
* =================================================================
|
||||
* Hack in LDAP authentication
|
||||
*/
|
||||
|
||||
// Try to get the user from the database.
|
||||
$user = (array) DB::table('users')->where('username', Input::get('username'))->first();
|
||||
|
||||
if ($user && strpos($user["notes"],'LDAP') !== false) {
|
||||
LOG::debug("Authenticating user against LDAP.");
|
||||
if( $this->ldap(Input::get('username'), Input::get('password')) ) {
|
||||
LOG::debug("valid login");
|
||||
$pass = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 10);
|
||||
$user = Sentry::findUserByLogin( Input::get('username') );
|
||||
$user->password = $pass;
|
||||
$user->save();
|
||||
$credentials = array(
|
||||
'username' => Input::get('username'),
|
||||
'password' => $pass,
|
||||
);
|
||||
Sentry::authenticate($credentials, Input::get('remember-me', 0));
|
||||
}
|
||||
else {
|
||||
throw new Cartalyst\Sentry\Users\UserNotFoundException();
|
||||
}
|
||||
}
|
||||
/* ============================================================== */
|
||||
else {
|
||||
LOG::debug("Authenticating user against database.");
|
||||
// Try to log the user in
|
||||
Sentry::authenticate(Input::only('username', 'password'), Input::get('remember-me', 0));
|
||||
}
|
||||
|
||||
// Get the page we were before
|
||||
$redirect = Session::get('loginRedirect', 'account');
|
||||
@@ -53,91 +128,19 @@ class AuthController extends BaseController
|
||||
// Redirect to the users page
|
||||
return Redirect::to($redirect)->with('success', Lang::get('auth/message.signin.success'));
|
||||
} catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
|
||||
$this->messageBag->add('email', Lang::get('auth/message.account_not_found'));
|
||||
$this->messageBag->add('username', Lang::get('auth/message.account_not_found'));
|
||||
} catch (Cartalyst\Sentry\Users\UserNotActivatedException $e) {
|
||||
$this->messageBag->add('email', Lang::get('auth/message.account_not_activated'));
|
||||
$this->messageBag->add('username', Lang::get('auth/message.account_not_activated'));
|
||||
} catch (Cartalyst\Sentry\Throttling\UserSuspendedException $e) {
|
||||
$this->messageBag->add('email', Lang::get('auth/message.account_suspended'));
|
||||
$this->messageBag->add('username', Lang::get('auth/message.account_suspended'));
|
||||
} catch (Cartalyst\Sentry\Throttling\UserBannedException $e) {
|
||||
$this->messageBag->add('email', Lang::get('auth/message.account_banned'));
|
||||
$this->messageBag->add('username', Lang::get('auth/message.account_banned'));
|
||||
}
|
||||
|
||||
// Ooops.. something went wrong
|
||||
return Redirect::back()->withInput()->withErrors($this->messageBag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Account sign up.
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
public function getSignup()
|
||||
{
|
||||
// Is the user logged in?
|
||||
if (Sentry::check()) {
|
||||
return Redirect::route('account');
|
||||
}
|
||||
|
||||
// Show the page
|
||||
return View::make('frontend.auth.signup');
|
||||
}
|
||||
|
||||
/**
|
||||
* Account sign up form processing.
|
||||
*
|
||||
* @return Redirect
|
||||
*/
|
||||
public function postSignup()
|
||||
{
|
||||
// Declare the rules for the form validation
|
||||
$rules = array(
|
||||
'first_name' => 'required|min:2',
|
||||
'last_name' => 'required|min:2',
|
||||
'email' => 'required|email|unique:users',
|
||||
'email_confirm' => 'required|email|same:email',
|
||||
'password' => 'required|between:10,32',
|
||||
'password_confirm' => 'required|same:password',
|
||||
);
|
||||
|
||||
// Create a new validator instance from our validation rules
|
||||
$validator = Validator::make(Input::all(), $rules);
|
||||
|
||||
// If validation fails, we'll exit the operation now.
|
||||
if ($validator->fails()) {
|
||||
// Ooops.. something went wrong
|
||||
return Redirect::back()->withInput()->withErrors($validator);
|
||||
}
|
||||
|
||||
try {
|
||||
// Register the user
|
||||
$user = Sentry::register(array(
|
||||
'first_name' => Input::get('first_name'),
|
||||
'last_name' => Input::get('last_name'),
|
||||
'email' => Input::get('email'),
|
||||
'password' => Input::get('password'),
|
||||
));
|
||||
|
||||
// Data to be used on the email view
|
||||
$data = array(
|
||||
'user' => $user,
|
||||
'activationUrl' => URL::route('activate', $user->getActivationCode()),
|
||||
);
|
||||
|
||||
// Send the activation code through email
|
||||
Mail::send('emails.register-activate', $data, function ($m) use ($user) {
|
||||
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
|
||||
$m->subject('Welcome ' . $user->first_name);
|
||||
});
|
||||
|
||||
// Redirect to the register page
|
||||
return Redirect::back()->with('success', Lang::get('auth/message.signup.success'));
|
||||
} catch (Cartalyst\Sentry\Users\UserExistsException $e) {
|
||||
$this->messageBag->add('email', Lang::get('auth/message.account_already_exists'));
|
||||
}
|
||||
|
||||
// Ooops.. something went wrong
|
||||
return Redirect::back()->withInput()->withErrors($this->messageBag);
|
||||
}
|
||||
|
||||
/**
|
||||
* User account activation page.
|
||||
@@ -192,7 +195,7 @@ class AuthController extends BaseController
|
||||
{
|
||||
// Declare the rules for the validator
|
||||
$rules = array(
|
||||
'email' => 'required|email',
|
||||
'username' => 'required',
|
||||
);
|
||||
|
||||
// Create a new validator instance from our dynamic rules
|
||||
@@ -206,22 +209,33 @@ class AuthController extends BaseController
|
||||
|
||||
try {
|
||||
// Get the user password recovery code
|
||||
$user = Sentry::getUserProvider()->findByLogin(Input::get('email'));
|
||||
if (!$user = Sentry::getUserProvider()->findByLogin(Input::get('username'))) {
|
||||
$user = User::where('email','=',Input::get('username'));
|
||||
}
|
||||
|
||||
// Data to be used on the email view
|
||||
$reset = $user->getResetPasswordCode();
|
||||
|
||||
// Data to be used on the username view
|
||||
$data = array(
|
||||
'user' => $user,
|
||||
'forgotPasswordUrl' => URL::route('forgot-password-confirm', $user->getResetPasswordCode()),
|
||||
'forgotPasswordUrl' => URL::route('forgot-password-confirm', $reset),
|
||||
);
|
||||
|
||||
// Send the activation code through email
|
||||
Mail::send('emails.forgot-password', $data, function ($m) use ($user) {
|
||||
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
|
||||
$m->subject('Account Password Recovery');
|
||||
});
|
||||
$user->reset_password_code = $reset;
|
||||
$user->save();
|
||||
|
||||
|
||||
if ($user->email) {
|
||||
// Send the activation code through username
|
||||
Mail::send('emails.forgot-password', $data, function ($m) use ($user) {
|
||||
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
|
||||
$m->subject('Account Password Recovery');
|
||||
});
|
||||
}
|
||||
|
||||
} catch (Cartalyst\Sentry\Users\UserNotFoundException $e) {
|
||||
// Even though the email was not found, we will pretend
|
||||
// we have sent the password reset code through email,
|
||||
// Even though the username was not found, we will pretend
|
||||
// we have sent the password reset code through username,
|
||||
// this is a security measure against hackers.
|
||||
}
|
||||
|
||||
@@ -237,12 +251,13 @@ class AuthController extends BaseController
|
||||
*/
|
||||
public function getForgotPasswordConfirm($passwordResetCode = null)
|
||||
{
|
||||
|
||||
try {
|
||||
// Find the user using the password reset code
|
||||
$user = Sentry::getUserProvider()->findByResetPasswordCode($passwordResetCode);
|
||||
} catch(Cartalyst\Sentry\Users\UserNotFoundException $e) {
|
||||
// Redirect to the forgot password page
|
||||
return Redirect::route('forgot-password')->with('error', Lang::get('auth/message.account_not_found'));
|
||||
//return Redirect::route('forgot-password')->with('error', Lang::get('auth/message.account_not_found'));
|
||||
}
|
||||
|
||||
// Show the page
|
||||
|
||||
@@ -12,6 +12,9 @@ use Actionlog;
|
||||
use Lang;
|
||||
use Accessory;
|
||||
use DB;
|
||||
use Slack;
|
||||
use Setting;
|
||||
use Config;
|
||||
|
||||
class ViewAssetsController extends AuthorizedController
|
||||
{
|
||||
@@ -47,117 +50,183 @@ class ViewAssetsController extends AuthorizedController
|
||||
|
||||
public function getRequestAsset($assetId = null) {
|
||||
|
||||
// Check if the asset exists
|
||||
if (is_null($asset = Asset::find($assetId))) {
|
||||
$user = Sentry::getUser();
|
||||
|
||||
// Check if the asset exists and is requestable
|
||||
if (is_null($asset = Asset::RequestableAssets()->find($assetId))) {
|
||||
// Redirect to the asset management page
|
||||
return Redirect::to('frontend/account/view-assets')->with('error', Lang::get('admin/hardware/message.does_not_exist'));
|
||||
return Redirect::route('requestable-assets')->with('error', Lang::get('admin/hardware/message.does_not_exist_or_not_requestable'));
|
||||
} else {
|
||||
|
||||
$logaction = new Actionlog();
|
||||
$logaction->asset_id = $asset->id;
|
||||
$logaction->asset_type = 'hardware';
|
||||
$logaction->created_at = date("Y-m-d h:i:s");
|
||||
|
||||
return View::make('frontend/account/view-assets', compact('asset'));
|
||||
if ($user->location_id) {
|
||||
$logaction->location_id = $user->location_id;
|
||||
}
|
||||
$logaction->user_id = Sentry::getUser()->id;
|
||||
$log = $logaction->logaction('requested');
|
||||
|
||||
$settings = Setting::getSettings();
|
||||
|
||||
if ($settings->slack_endpoint) {
|
||||
|
||||
|
||||
$slack_settings = [
|
||||
'username' => $settings->botname,
|
||||
'channel' => $settings->slack_channel,
|
||||
'link_names' => true
|
||||
];
|
||||
|
||||
$client = new \Maknz\Slack\Client($settings->slack_endpoint,$slack_settings);
|
||||
|
||||
try {
|
||||
$client->attach([
|
||||
'color' => 'good',
|
||||
'fields' => [
|
||||
[
|
||||
'title' => 'REQUESTED:',
|
||||
'value' => strtoupper($logaction->asset_type).' asset <'.Config::get('app.url').'/hardware/'.$asset->id.'/view'.'|'.$asset->showAssetName().'> requested by <'.Config::get('app.url').'/hardware/'.$asset->id.'/view'.'|'.Sentry::getUser()->fullName().'>.'
|
||||
]
|
||||
|
||||
]
|
||||
])->send('Asset Requested');
|
||||
|
||||
} catch (Exception $e) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return Redirect::route('requestable-assets')->with('success')->with('success', Lang::get('admin/hardware/message.requests.success'));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Get the acceptance screen
|
||||
public function getAcceptAsset($logID = null) {
|
||||
|
||||
|
||||
if (is_null($findlog = Actionlog::find($logID))) {
|
||||
// Redirect to the asset management page
|
||||
return Redirect::to('account')->with('error', Lang::get('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
|
||||
// Asset
|
||||
if (($findlog->asset_id!='') && ($findlog->asset_type=='hardware')) {
|
||||
$item = Asset::find($findlog->asset_id);
|
||||
|
||||
// software
|
||||
} elseif (($findlog->asset_id!='') && ($findlog->asset_type=='software')) {
|
||||
|
||||
// software
|
||||
} elseif (($findlog->asset_id!='') && ($findlog->asset_type=='software')) {
|
||||
$item = License::find($findlog->asset_id);
|
||||
// accessories
|
||||
// accessories
|
||||
} elseif ($findlog->accessory_id!='') {
|
||||
$item = Accessory::find($findlog->accessory_id);
|
||||
$item = Accessory::find($findlog->accessory_id);
|
||||
}
|
||||
|
||||
|
||||
// Check if the asset exists
|
||||
if (is_null($item)) {
|
||||
// Redirect to the asset management page
|
||||
return Redirect::to('account')->with('error', Lang::get('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
return View::make('frontend/account/accept-asset', compact('item'))->with('findlog', $findlog);
|
||||
|
||||
|
||||
|
||||
|
||||
return View::make('frontend/account/accept-asset', compact('item'))->with('findlog', $findlog);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Save the acceptance
|
||||
public function postAcceptAsset($logID = null) {
|
||||
|
||||
|
||||
|
||||
|
||||
// Check if the asset exists
|
||||
if (is_null($findlog = Actionlog::find($logID))) {
|
||||
// Redirect to the asset management page
|
||||
return Redirect::to('account/view-assets')->with('error', Lang::get('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if ($findlog->accepted_id!='') {
|
||||
// Redirect to the asset management page
|
||||
return Redirect::to('account/view-assets')->with('error', Lang::get('admin/users/message.error.asset_already_accepted'));
|
||||
}
|
||||
|
||||
|
||||
if (!Input::has('asset_acceptance')) {
|
||||
return Redirect::to('account/view-assets')->with('error', Lang::get('admin/users/message.error.accept_or_decline'));
|
||||
}
|
||||
|
||||
$user = Sentry::getUser();
|
||||
$logaction = new Actionlog();
|
||||
|
||||
|
||||
if (Input::get('asset_acceptance')=='accepted') {
|
||||
$logaction_msg = 'accepted';
|
||||
$accepted="accepted";
|
||||
$return_msg = Lang::get('admin/users/message.accepted');
|
||||
} else {
|
||||
$logaction_msg = 'declined';
|
||||
$accepted="rejected";
|
||||
$return_msg = Lang::get('admin/users/message.declined');
|
||||
}
|
||||
|
||||
// Asset
|
||||
if (($findlog->asset_id!='') && ($findlog->asset_type=='hardware')) {
|
||||
$logaction->asset_id = $findlog->asset_id;
|
||||
$logaction->accessory_id = NULL;
|
||||
$logaction->asset_type = 'hardware';
|
||||
|
||||
// software
|
||||
} elseif (($findlog->asset_id!='') && ($findlog->asset_type=='software')) {
|
||||
|
||||
if (Input::get('asset_acceptance')!='accepted') {
|
||||
DB::table('assets')
|
||||
->where('id', $findlog->asset_id)
|
||||
->update(array('assigned_to' => null));
|
||||
}
|
||||
|
||||
|
||||
// software
|
||||
} elseif (($findlog->asset_id!='') && ($findlog->asset_type=='software')) {
|
||||
$logaction->asset_id = $findlog->asset_id;
|
||||
$logaction->accessory_id = NULL;
|
||||
$logaction->asset_type = 'software';
|
||||
|
||||
// accessories
|
||||
|
||||
// accessories
|
||||
} elseif ($findlog->accessory_id!='') {
|
||||
$logaction->asset_id = NULL;
|
||||
$logaction->accessory_id = $findlog->accessory_id;
|
||||
$logaction->asset_type = 'accessory';
|
||||
$logaction->asset_type = 'accessory';
|
||||
}
|
||||
|
||||
|
||||
$logaction->checkedout_to = $findlog->checkedout_to;
|
||||
|
||||
|
||||
$logaction->note = e(Input::get('note'));
|
||||
$logaction->user_id = $user->id;
|
||||
$logaction->accepted_at = date("Y-m-d h:i:s");
|
||||
$log = $logaction->logaction('accepted');
|
||||
|
||||
|
||||
$log = $logaction->logaction($logaction_msg);
|
||||
|
||||
$update_checkout = DB::table('asset_logs')
|
||||
->where('id',$findlog->id)
|
||||
->update(array('accepted_id' => $logaction->id));
|
||||
|
||||
$affected_asset=$logaction->assetlog;
|
||||
$affected_asset->accepted=$accepted;
|
||||
$affected_asset->save();
|
||||
|
||||
if ($update_checkout ) {
|
||||
return Redirect::to('account/view-assets')->with('success', 'You have successfully accept this asset.');
|
||||
|
||||
return Redirect::to('account/view-assets')->with('success', $return_msg);
|
||||
|
||||
} else {
|
||||
return Redirect::to('account/view-assets')->with('error', 'Something went wrong ');
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -218,7 +218,7 @@ class AccessoriesController extends AdminController
|
||||
}
|
||||
|
||||
// Get the dropdown of users and then pass it to the checkout view
|
||||
$users_list = array('' => 'Select a User') + DB::table('users')->select(DB::raw('concat(last_name,", ",first_name) as full_name, id'))->whereNull('deleted_at')->orderBy('last_name', 'asc')->orderBy('first_name', 'asc')->lists('full_name', 'id');
|
||||
$users_list = array('' => 'Select a User') + DB::table('users')->select(DB::raw('concat(last_name,", ",first_name," (",username,")") as full_name, id'))->whereNull('deleted_at')->orderBy('last_name', 'asc')->orderBy('first_name', 'asc')->lists('full_name', 'id');
|
||||
|
||||
return View::make('backend/accessories/checkout', compact('accessory'))->with('users_list',$users_list);
|
||||
|
||||
@@ -274,20 +274,20 @@ class AccessoriesController extends AdminController
|
||||
$logaction->location_id = $user->location_id;
|
||||
$logaction->user_id = Sentry::getUser()->id;
|
||||
$logaction->note = e(Input::get('note'));
|
||||
|
||||
|
||||
$settings = Setting::getSettings();
|
||||
|
||||
|
||||
if ($settings->slack_endpoint) {
|
||||
|
||||
|
||||
|
||||
$slack_settings = [
|
||||
'username' => $settings->botname,
|
||||
'channel' => $settings->slack_channel,
|
||||
'link_names' => true
|
||||
];
|
||||
|
||||
|
||||
$client = new \Maknz\Slack\Client($settings->slack_endpoint,$slack_settings);
|
||||
|
||||
|
||||
try {
|
||||
$client->attach([
|
||||
'color' => 'good',
|
||||
@@ -301,13 +301,13 @@ class AccessoriesController extends AdminController
|
||||
'value' => e($logaction->note)
|
||||
],
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
]
|
||||
])->send('Accessory Checked Out');
|
||||
|
||||
|
||||
} catch (Exception $e) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -322,6 +322,10 @@ class AccessoriesController extends AdminController
|
||||
$data['eula'] = $accessory->getEula();
|
||||
$data['first_name'] = $user->first_name;
|
||||
$data['item_name'] = $accessory->name;
|
||||
$data['checkout_date'] = $logaction->created_at;
|
||||
$data['item_tag'] = '';
|
||||
$data['expected_checkin'] = '';
|
||||
$data['note'] = $logaction->note;
|
||||
$data['require_acceptance'] = $accessory->requireAcceptance();
|
||||
|
||||
|
||||
@@ -390,20 +394,20 @@ class AccessoriesController extends AdminController
|
||||
$logaction->asset_type = 'accessory';
|
||||
$logaction->user_id = $admin_user->id;
|
||||
$logaction->note = e(Input::get('note'));
|
||||
|
||||
|
||||
$settings = Setting::getSettings();
|
||||
|
||||
|
||||
if ($settings->slack_endpoint) {
|
||||
|
||||
|
||||
|
||||
|
||||
$slack_settings = [
|
||||
'username' => $settings->botname,
|
||||
'channel' => $settings->slack_channel,
|
||||
'link_names' => true
|
||||
];
|
||||
|
||||
|
||||
$client = new \Maknz\Slack\Client($settings->slack_endpoint,$slack_settings);
|
||||
|
||||
|
||||
try {
|
||||
$client->attach([
|
||||
'color' => 'good',
|
||||
@@ -416,18 +420,37 @@ class AccessoriesController extends AdminController
|
||||
'title' => 'Note:',
|
||||
'value' => e($logaction->note)
|
||||
],
|
||||
|
||||
|
||||
]
|
||||
])->send('Accessory Checked In');
|
||||
|
||||
|
||||
} catch (Exception $e) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$log = $logaction->logaction('checkin from');
|
||||
|
||||
if(!is_null($accessory_user->assigned_to)) {
|
||||
$user = User::find($accessory_user->assigned_to);
|
||||
}
|
||||
|
||||
$data['log_id'] = $logaction->id;
|
||||
$data['first_name'] = $user->first_name;
|
||||
$data['item_name'] = $accessory->name;
|
||||
$data['checkin_date'] = $logaction->created_at;
|
||||
$data['item_tag'] = '';
|
||||
$data['note'] = $logaction->note;
|
||||
|
||||
if (($accessory->checkin_email()=='1')) {
|
||||
|
||||
Mail::send('emails.checkin-asset', $data, function ($m) use ($user) {
|
||||
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
|
||||
$m->subject('Confirm Accessory Checkin');
|
||||
});
|
||||
}
|
||||
|
||||
if ($backto=='user') {
|
||||
return Redirect::to("admin/users/".$return_to.'/view')->with('success', Lang::get('admin/accessories/message.checkin.success'));
|
||||
|
||||
@@ -0,0 +1,464 @@
|
||||
<?php
|
||||
|
||||
namespace Controllers\Admin;
|
||||
|
||||
use AdminController;
|
||||
use AssetMaintenance;
|
||||
use Carbon\Carbon;
|
||||
use Datatable;
|
||||
use DB;
|
||||
use Input;
|
||||
use Lang;
|
||||
use Log;
|
||||
use Mail;
|
||||
use Redirect;
|
||||
use Response;
|
||||
use Sentry;
|
||||
use Slack;
|
||||
use Str;
|
||||
use Supplier;
|
||||
use TCPDF;
|
||||
use Validator;
|
||||
use View;
|
||||
|
||||
class AssetMaintenancesController extends AdminController
|
||||
{
|
||||
|
||||
/**
|
||||
* getIndex
|
||||
*
|
||||
* @return mixed
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
public function getIndex()
|
||||
{
|
||||
|
||||
return View::make( 'backend/asset_maintenances/index' );
|
||||
}
|
||||
|
||||
/**
|
||||
* getDatatable
|
||||
* Gets the datatable for the index page
|
||||
*
|
||||
* @return mixed
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
public function getDatatable()
|
||||
{
|
||||
|
||||
$assetMaintenances = AssetMaintenance::orderBy( 'created_at', 'DESC' )
|
||||
->get();
|
||||
|
||||
$actions = new \Chumper\Datatable\Columns\FunctionColumn( 'actions', function ( $assetMaintenances ) {
|
||||
|
||||
return '<a href="' . route( 'update/asset_maintenance', $assetMaintenances->id )
|
||||
. '" class="btn btn-warning btn-sm" style="margin-right:5px;"><i class="fa fa-pencil icon-white"></i></a><a data-html="false" class="btn delete-asset btn-danger btn-sm" data-toggle="modal" href="'
|
||||
. route( 'delete/asset_maintenance', $assetMaintenances->id ) . '" data-content="'
|
||||
. Lang::get( 'admin/asset_maintenances/message.delete.confirm' ) . '" data-title="'
|
||||
. Lang::get( 'general.delete' ) . ' ' . htmlspecialchars( $assetMaintenances->title )
|
||||
. '?" onClick="return false;"><i class="fa fa-trash icon-white"></i></a>';
|
||||
} );
|
||||
|
||||
return Datatable::collection( $assetMaintenances )
|
||||
->addColumn( 'asset', function ( $assetMaintenances ) {
|
||||
|
||||
return link_to( '/hardware/' . $assetMaintenances->asset_id . '/view',
|
||||
mb_strimwidth( $assetMaintenances->asset->name, 0, 50, "..." ) );
|
||||
} )
|
||||
->addColumn( 'supplier', function ( $assetMaintenances ) {
|
||||
|
||||
return link_to( '/admin/settings/suppliers/' . $assetMaintenances->supplier_id
|
||||
. '/view',
|
||||
mb_strimwidth( $assetMaintenances->supplier->name, 0, 50, "..." ) );
|
||||
} )
|
||||
->addColumn( 'asset_maintenance_type', function ( $assetMaintenances ) {
|
||||
|
||||
return $assetMaintenances->asset_maintenance_type;
|
||||
} )
|
||||
->addColumn( 'title', function ( $assetMaintenances ) {
|
||||
|
||||
return link_to( '/admin/asset_maintenances/' . $assetMaintenances->id . '/view',
|
||||
mb_strimwidth( $assetMaintenances->title, 0, 50, "..." ) );
|
||||
} )
|
||||
->addColumn( 'start_date', function ( $assetMaintenances ) {
|
||||
|
||||
return $assetMaintenances->start_date;
|
||||
} )
|
||||
->addColumn( 'completion_date', function ( $assetMaintenances ) {
|
||||
|
||||
return $assetMaintenances->completion_date;
|
||||
} )
|
||||
->addColumn( 'asset_maintenance_time', function ( $assetMaintenances ) {
|
||||
|
||||
if (is_null( $assetMaintenances->asset_maintenance_time )) {
|
||||
$assetMaintenances->asset_maintenance_time = Carbon::now()
|
||||
->diffInDays( Carbon::parse( $assetMaintenances->start_date ) );
|
||||
}
|
||||
|
||||
return intval( $assetMaintenances->asset_maintenance_time );
|
||||
} )
|
||||
->addColumn( 'cost', function ( $assetMaintenances ) {
|
||||
|
||||
return sprintf( Lang::get( 'general.currency' ) . '%01.2f', $assetMaintenances->cost );
|
||||
} )
|
||||
->addColumn( $actions )
|
||||
->searchColumns( 'asset', 'supplier', 'asset_maintenance_type', 'title', 'start_date',
|
||||
'completion_date', 'asset_maintenance_time', 'cost', 'actions' )
|
||||
->orderColumns( 'asset', 'supplier', 'asset_maintenance_type', 'title', 'start_date',
|
||||
'completion_date', 'asset_maintenance_time', 'cost', 'actions' )
|
||||
->make();
|
||||
}
|
||||
|
||||
/**
|
||||
* getCreate
|
||||
*
|
||||
* @param null $assetId
|
||||
*
|
||||
* @return mixed
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
public function getCreate( $assetId = null )
|
||||
{
|
||||
|
||||
// Prepare Asset Maintenance Type List
|
||||
$assetMaintenanceType = [
|
||||
'' => 'Select an asset maintenance type',
|
||||
] + AssetMaintenance::getImprovementOptions();
|
||||
// Mark the selected asset, if it came in
|
||||
$selectedAsset = $assetId;
|
||||
// Get the possible assets using a left join to get a list of assets and some other helpful info
|
||||
$asset = DB::table( 'assets' )
|
||||
->leftJoin( 'users', 'users.id', '=', 'assets.assigned_to' )
|
||||
->leftJoin( 'models', 'assets.model_id', '=', 'models.id' )
|
||||
->select( 'assets.id', 'assets.name', 'first_name', 'last_name', 'asset_tag',
|
||||
DB::raw( 'concat(first_name," ",last_name) as full_name, assets.id as id, models.name as modelname' ) )
|
||||
->whereNull( 'assets.deleted_at' )
|
||||
->get();
|
||||
$asset_array = json_decode( json_encode( $asset ), true );
|
||||
$asset_element[ '' ] = 'Please select an asset';
|
||||
// Build a list out of the data results
|
||||
for ($x = 0; $x < count( $asset_array ); $x++) {
|
||||
|
||||
if ($asset_array[ $x ][ 'full_name' ] != '') {
|
||||
$full_name = ' (' . $asset_array[ $x ][ 'full_name' ] . ') ' . $asset_array[ $x ][ 'modelname' ];
|
||||
} else {
|
||||
$full_name = ' (Unassigned) ' . $asset_array[ $x ][ 'modelname' ];
|
||||
}
|
||||
$asset_element[ $asset_array[ $x ][ 'id' ] ] =
|
||||
$asset_array[ $x ][ 'asset_tag' ] . ' - ' . $asset_array[ $x ][ 'name' ] . $full_name;
|
||||
}
|
||||
// Get Supplier List
|
||||
$supplier_list = [ '' => 'Select Supplier' ] + Supplier::orderBy( 'name', 'asc' )
|
||||
->lists( 'name', 'id' );
|
||||
|
||||
// Render the view
|
||||
return View::make( 'backend/asset_maintenances/edit' )
|
||||
->with( 'asset_list', $asset_element )
|
||||
->with( 'selectedAsset', $selectedAsset )
|
||||
->with( 'supplier_list', $supplier_list )
|
||||
->with( 'assetMaintenanceType', $assetMaintenanceType )
|
||||
->with( 'assetMaintenance', new AssetMaintenance );
|
||||
}
|
||||
|
||||
/**
|
||||
* postCreate
|
||||
*
|
||||
* @return mixed
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
public function postCreate()
|
||||
{
|
||||
|
||||
// get the POST data
|
||||
$new = Input::all();
|
||||
|
||||
// create a new model instance
|
||||
$assetMaintenance = new AssetMaintenance();
|
||||
|
||||
// attempt validation
|
||||
if ($assetMaintenance->validate( $new )) {
|
||||
|
||||
if (e( Input::get( 'supplier_id' ) ) == '') {
|
||||
$assetMaintenance->supplier_id = null;
|
||||
} else {
|
||||
$assetMaintenance->supplier_id = e( Input::get( 'supplier_id' ) );
|
||||
}
|
||||
|
||||
if (e( Input::get( 'is_warranty' ) ) == '') {
|
||||
$assetMaintenance->is_warranty = 0;
|
||||
} else {
|
||||
$assetMaintenance->is_warranty = e( Input::get( 'is_warranty' ) );
|
||||
}
|
||||
|
||||
if (e( Input::get( 'cost' ) ) == '') {
|
||||
$assetMaintenance->cost = '';
|
||||
} else {
|
||||
$assetMaintenance->cost = ParseFloat( e( Input::get( 'cost' ) ) );
|
||||
}
|
||||
|
||||
if (e( Input::get( 'notes' ) ) == '') {
|
||||
$assetMaintenance->notes = null;
|
||||
} else {
|
||||
$assetMaintenance->notes = e( Input::get( 'notes' ) );
|
||||
}
|
||||
|
||||
// Save the asset maintenance data
|
||||
$assetMaintenance->asset_id = e( Input::get( 'asset_id' ) );
|
||||
$assetMaintenance->asset_maintenance_type = e( Input::get( 'asset_maintenance_type' ) );
|
||||
$assetMaintenance->title = e( Input::get( 'title' ) );
|
||||
$assetMaintenance->start_date = e( Input::get( 'start_date' ) );
|
||||
$assetMaintenance->completion_date = e( Input::get( 'completion_date' ) );
|
||||
|
||||
if (( $assetMaintenance->completion_date == "" )
|
||||
|| ( $assetMaintenance->completion_date == "0000-00-00" )
|
||||
) {
|
||||
$assetMaintenance->completion_date = null;
|
||||
}
|
||||
|
||||
// Was the asset maintenance created?
|
||||
if ($assetMaintenance->save()) {
|
||||
|
||||
// Redirect to the new asset maintenance page
|
||||
return Redirect::to( "admin/asset_maintenances" )
|
||||
->with( 'success', Lang::get( 'admin/asset_maintenances/message.create.success' ) );
|
||||
}
|
||||
} else {
|
||||
// failure
|
||||
$errors = $assetMaintenance->errors();
|
||||
|
||||
return Redirect::back()
|
||||
->withInput()
|
||||
->withErrors( $errors );
|
||||
}
|
||||
|
||||
// Redirect to the asset maintenance create page
|
||||
return Redirect::to( 'admin/asset_maintenances/edit' )
|
||||
->with( 'error', Lang::get( 'admin/asset_maintenances/message.create.error' ) )
|
||||
->with( 'assetMaintenance', new AssetMaintenance );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* getEdit
|
||||
*
|
||||
* @param null $assetMaintenanceId
|
||||
*
|
||||
* @return mixed
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
public function getEdit( $assetMaintenanceId = null )
|
||||
{
|
||||
|
||||
// Check if the asset maintenance exists
|
||||
if (is_null( $assetMaintenance = AssetMaintenance::find( $assetMaintenanceId ) )) {
|
||||
// Redirect to the improvement management page
|
||||
return Redirect::to( 'admin/asset_maintenances' )
|
||||
->with( 'error', Lang::get( 'admin/asset_maintenances/message.not_found' ) );
|
||||
}
|
||||
|
||||
if ($assetMaintenance->completion_date == '0000-00-00') {
|
||||
$assetMaintenance->completion_date = null;
|
||||
}
|
||||
|
||||
if ($assetMaintenance->start_date == '0000-00-00') {
|
||||
$assetMaintenance->start_date = null;
|
||||
}
|
||||
|
||||
if ($assetMaintenance->cost == '0.00') {
|
||||
$assetMaintenance->cost = null;
|
||||
}
|
||||
|
||||
// Prepare Improvement Type List
|
||||
$assetMaintenanceType = [
|
||||
'' => 'Select an improvement type',
|
||||
] + AssetMaintenance::getImprovementOptions();
|
||||
|
||||
// Get the possible assets using a left join to get a list of assets and some other helpful info
|
||||
$asset = DB::table( 'assets' )
|
||||
->leftJoin( 'users', 'users.id', '=', 'assets.assigned_to' )
|
||||
->leftJoin( 'models', 'assets.model_id', '=', 'models.id' )
|
||||
->select( 'assets.id', 'assets.name', 'first_name', 'last_name', 'asset_tag',
|
||||
DB::raw( 'concat(first_name," ",last_name) as full_name, assets.id as id, models.name as modelname' ) )
|
||||
->whereNull( 'assets.deleted_at' )
|
||||
->get();
|
||||
$asset_array = json_decode( json_encode( $asset ), true );
|
||||
$asset_element[ '' ] = 'Please select an asset';
|
||||
// Build a list out of the data results
|
||||
for ($x = 0; $x < count( $asset_array ); $x++) {
|
||||
|
||||
if ($asset_array[ $x ][ 'full_name' ] != '') {
|
||||
$full_name = ' (' . $asset_array[ $x ][ 'full_name' ] . ') ' . $asset_array[ $x ][ 'modelname' ];
|
||||
} else {
|
||||
$full_name = ' (Unassigned) ' . $asset_array[ $x ][ 'modelname' ];
|
||||
}
|
||||
$asset_element[ $asset_array[ $x ][ 'id' ] ] =
|
||||
$asset_array[ $x ][ 'asset_tag' ] . ' - ' . $asset_array[ $x ][ 'name' ] . $full_name;
|
||||
}
|
||||
// Get Supplier List
|
||||
$supplier_list = [ '' => 'Select Supplier' ] + Supplier::orderBy( 'name', 'asc' )
|
||||
->lists( 'name', 'id' );
|
||||
|
||||
// Render the view
|
||||
return View::make( 'backend/asset_maintenances/edit' )
|
||||
->with( 'asset_list', $asset_element )
|
||||
->with( 'selectedAsset', null )
|
||||
->with( 'supplier_list', $supplier_list )
|
||||
->with( 'assetMaintenanceType', $assetMaintenanceType )
|
||||
->with( 'assetMaintenance', $assetMaintenance );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* postEdit
|
||||
*
|
||||
* @param null $assetMaintenanceId
|
||||
*
|
||||
* @return mixed
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
public function postEdit( $assetMaintenanceId = null )
|
||||
{
|
||||
|
||||
// get the POST data
|
||||
$new = Input::all();
|
||||
|
||||
// Check if the asset maintenance exists
|
||||
if (is_null( $assetMaintenance = AssetMaintenance::find( $assetMaintenanceId ) )) {
|
||||
// Redirect to the asset maintenance management page
|
||||
return Redirect::to( 'admin/asset_maintenances' )
|
||||
->with( 'error', Lang::get( 'admin/asset_maintenances/message.not_found' ) );
|
||||
}
|
||||
|
||||
// attempt validation
|
||||
if ($assetMaintenance->validate( $new )) {
|
||||
|
||||
if (e( Input::get( 'supplier_id' ) ) == '') {
|
||||
$assetMaintenance->supplier_id = null;
|
||||
} else {
|
||||
$assetMaintenance->supplier_id = e( Input::get( 'supplier_id' ) );
|
||||
}
|
||||
|
||||
if (e( Input::get( 'is_warranty' ) ) == '') {
|
||||
$assetMaintenance->is_warranty = 0;
|
||||
} else {
|
||||
$assetMaintenance->is_warranty = e( Input::get( 'is_warranty' ) );
|
||||
}
|
||||
|
||||
if (e( Input::get( 'cost' ) ) == '') {
|
||||
$assetMaintenance->cost = '';
|
||||
} else {
|
||||
$assetMaintenance->cost = ParseFloat( e( Input::get( 'cost' ) ) );
|
||||
}
|
||||
|
||||
if (e( Input::get( 'notes' ) ) == '') {
|
||||
$assetMaintenance->notes = null;
|
||||
} else {
|
||||
$assetMaintenance->notes = e( Input::get( 'notes' ) );
|
||||
}
|
||||
|
||||
// Save the asset maintenance data
|
||||
$assetMaintenance->asset_id = e( Input::get( 'asset_id' ) );
|
||||
$assetMaintenance->asset_maintenance_type = e( Input::get( 'asset_maintenance_type' ) );
|
||||
$assetMaintenance->title = e( Input::get( 'title' ) );
|
||||
$assetMaintenance->start_date = e( Input::get( 'start_date' ) );
|
||||
$assetMaintenance->completion_date = e( Input::get( 'completion_date' ) );
|
||||
|
||||
if (( $assetMaintenance->completion_date == "" )
|
||||
|| ( $assetMaintenance->completion_date == "0000-00-00" )
|
||||
) {
|
||||
$assetMaintenance->completion_date = null;
|
||||
if (( $assetMaintenance->asset_maintenance_time !== 0 )
|
||||
|| ( !is_null( $assetMaintenance->asset_maintenance_time ) )
|
||||
) {
|
||||
$assetMaintenance->asset_maintenance_time = null;
|
||||
}
|
||||
}
|
||||
|
||||
if (( $assetMaintenance->completion_date !== "" )
|
||||
&& ( $assetMaintenance->completion_date !== "0000-00-00" )
|
||||
&& ( $assetMaintenance->start_date !== "" )
|
||||
&& ( $assetMaintenance->start_date !== "0000-00-00" )
|
||||
) {
|
||||
$startDate = Carbon::parse( $assetMaintenance->start_date );
|
||||
$completionDate = Carbon::parse( $assetMaintenance->completion_date );
|
||||
$assetMaintenance->asset_maintenance_time = $completionDate->diffInDays( $startDate );
|
||||
}
|
||||
|
||||
// Was the asset maintenance created?
|
||||
if ($assetMaintenance->save()) {
|
||||
|
||||
// Redirect to the new asset maintenance page
|
||||
return Redirect::to( "admin/asset_maintenances" )
|
||||
->with( 'success', Lang::get( 'admin/asset_maintenances/message.create.success' ) );
|
||||
}
|
||||
} else {
|
||||
// failure
|
||||
$errors = $assetMaintenance->errors();
|
||||
|
||||
return Redirect::back()
|
||||
->withInput()
|
||||
->withErrors( $errors );
|
||||
}
|
||||
|
||||
// Redirect to the improvement create page
|
||||
return Redirect::to( 'admin/asset_maintenances/edit' )
|
||||
->with( 'error', Lang::get( 'admin/asset_maintenances/message.create.error' ) )
|
||||
->with( 'assetMaintenance', $assetMaintenance );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* getDelete
|
||||
*
|
||||
* @param $assetMaintenanceId
|
||||
*
|
||||
* @return mixed
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
public function getDelete( $assetMaintenanceId )
|
||||
{
|
||||
|
||||
// Check if the asset maintenance exists
|
||||
if (is_null( $assetMaintenance = AssetMaintenance::find( $assetMaintenanceId ) )) {
|
||||
// Redirect to the asset maintenance management page
|
||||
return Redirect::to( 'admin/asset_maintenances' )
|
||||
->with( 'error', Lang::get( 'admin/asset_maintenances/message.not_found' ) );
|
||||
}
|
||||
// Delete the asset maintenance
|
||||
$assetMaintenance->delete();
|
||||
|
||||
// Redirect to the asset_maintenance management page
|
||||
return Redirect::to( 'admin/asset_maintenances' )
|
||||
->with( 'success', Lang::get( 'admin/asset_maintenances/message.delete.success' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
* getView
|
||||
*
|
||||
* @param $assetMaintenanceId
|
||||
*
|
||||
* @return mixed
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
public function getView( $assetMaintenanceId )
|
||||
{
|
||||
|
||||
// Check if the asset maintenance exists
|
||||
if (is_null( $assetMaintenance = AssetMaintenance::find( $assetMaintenanceId ) )) {
|
||||
// Redirect to the asset maintenance management page
|
||||
return Redirect::to( 'admin/asset_maintenances' )
|
||||
->with( 'error', Lang::get( 'admin/asset_maintenances/message.not_found' ) );
|
||||
}
|
||||
|
||||
return View::make( 'backend/asset_maintenances/view')->with('assetMaintenance', $assetMaintenance);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,6 +5,7 @@ use Input;
|
||||
use Lang;
|
||||
use Asset;
|
||||
use Supplier;
|
||||
use AssetMaintenance;
|
||||
use Statuslabel;
|
||||
use User;
|
||||
use Setting;
|
||||
@@ -21,15 +22,16 @@ use Response;
|
||||
use Config;
|
||||
use Location;
|
||||
use Log;
|
||||
use DNS2D;
|
||||
use Mail;
|
||||
use Datatable;
|
||||
use TCPDF;
|
||||
use Slack;
|
||||
use Manufacturer; //for embedded-create
|
||||
|
||||
class AssetsController extends AdminController
|
||||
{
|
||||
protected $qrCodeDimensions = array( 'height' => 3.5, 'width' => 3.5);
|
||||
protected $barCodeDimensions = array( 'height' => 2, 'width' => 22);
|
||||
|
||||
/**
|
||||
* Show a list of all the assets.
|
||||
@@ -42,8 +44,6 @@ class AssetsController extends AdminController
|
||||
return View::make('backend/hardware/index');
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Asset create.
|
||||
*
|
||||
@@ -53,29 +53,15 @@ class AssetsController extends AdminController
|
||||
*/
|
||||
public function getCreate($model_id = null)
|
||||
{
|
||||
|
||||
/*
|
||||
// Grab the dropdown list of models
|
||||
//$model_list = array('' => 'Select a Model') + Model::orderBy('name', 'asc')->lists('name'.' '. 'modelno', 'id');
|
||||
|
||||
$model_list = Model::select(DB::raw('concat(manufacturers.name," ",name) as name, id'))->orderBy('name', 'asc')->with('manufacturer')->lists('name', 'id');
|
||||
//$model_list = array('' => Lang::get('general.select_model'));
|
||||
*/
|
||||
|
||||
$model_list = array('' => Lang::get('general.select_model')) + DB::table('models')
|
||||
->select(DB::raw('concat(name," / ",modelno) as name, id'))->orderBy('name', 'asc')
|
||||
->orderBy('modelno', 'asc')
|
||||
->whereNull('deleted_at')
|
||||
->lists('name', 'id');
|
||||
|
||||
|
||||
$supplier_list = array('' => Lang::get('general.select_supplier')) + Supplier::orderBy('name', 'asc')->lists('name', 'id');
|
||||
$assigned_to = array('' => Lang::get('general.select_user')) + DB::table('users')->select(DB::raw('concat(first_name," ",last_name) as full_name, id'))->whereNull('deleted_at')->lists('full_name', 'id');
|
||||
$location_list = array('' => Lang::get('general.select_location')) + Location::orderBy('name', 'asc')->lists('name', 'id');
|
||||
|
||||
|
||||
// Grab the dropdown list of status
|
||||
$statuslabel_list = array('' => Lang::get('general.select_statuslabel')) + Statuslabel::orderBy('name', 'asc')->lists('name', 'id');
|
||||
// Grab the dropdown lists
|
||||
$model_list = modelList();
|
||||
$statuslabel_list = statusLabelList();
|
||||
$location_list = locationsList();
|
||||
$manufacturer_list = manufacturerList();
|
||||
$category_list = categoryList();
|
||||
$supplier_list = suppliersList();
|
||||
$assigned_to = usersList();
|
||||
$statuslabel_types = statusTypeList();
|
||||
|
||||
$view = View::make('backend/hardware/edit');
|
||||
$view->with('supplier_list',$supplier_list);
|
||||
@@ -84,6 +70,9 @@ class AssetsController extends AdminController
|
||||
$view->with('assigned_to',$assigned_to);
|
||||
$view->with('location_list',$location_list);
|
||||
$view->with('asset',new Asset);
|
||||
$view->with('manufacturer',$manufacturer_list);
|
||||
$view->with('category',$category_list);
|
||||
$view->with('statuslabel_types',$statuslabel_types);
|
||||
|
||||
if (!is_null($model_id)) {
|
||||
$selected_model = Model::find($model_id);
|
||||
@@ -215,19 +204,25 @@ class AssetsController extends AdminController
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
// Grab the dropdown lists
|
||||
$model_list = modelList();
|
||||
$statuslabel_list = statusLabelList();
|
||||
$location_list = locationsList();
|
||||
$manufacturer_list = manufacturerList();
|
||||
$category_list = categoryList();
|
||||
$supplier_list = suppliersList();
|
||||
$assigned_to = usersList();
|
||||
$statuslabel_types = statusTypeList();
|
||||
|
||||
// Grab the dropdown list of models
|
||||
$model_list = array('' => Lang::get('general.select_model')) + DB::table('models')
|
||||
->select(DB::raw('concat(name," / ",modelno) as name, id'))->orderBy('name', 'asc')
|
||||
->orderBy('modelno', 'asc')
|
||||
->lists('name', 'id');
|
||||
$supplier_list = array('' => Lang::get('general.select_supplier')) + Supplier::orderBy('name', 'asc')->lists('name', 'id');
|
||||
$location_list = array('' => Lang::get('general.select_location')) + Location::orderBy('name', 'asc')->lists('name', 'id');
|
||||
|
||||
// Grab the dropdown list of status
|
||||
$statuslabel_list = Statuslabel::orderBy('name', 'asc')->lists('name', 'id');
|
||||
|
||||
return View::make('backend/hardware/edit', compact('asset'))->with('model_list',$model_list)->with('supplier_list',$supplier_list)->with('location_list',$location_list)->with('statuslabel_list',$statuslabel_list);
|
||||
return View::make('backend/hardware/edit', compact('asset'))
|
||||
->with('model_list',$model_list)
|
||||
->with('supplier_list',$supplier_list)
|
||||
->with('location_list',$location_list)
|
||||
->with('statuslabel_list',$statuslabel_list)
|
||||
->with('assigned_to',$assigned_to)
|
||||
->with('manufacturer',$manufacturer_list)
|
||||
->with('statuslabel_types',$statuslabel_types)
|
||||
->with('category',$category_list);
|
||||
}
|
||||
|
||||
|
||||
@@ -339,7 +334,7 @@ class AssetsController extends AdminController
|
||||
// Check if the asset exists
|
||||
if (is_null($asset = Asset::find($assetId))) {
|
||||
// Redirect to the asset management page with error
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.not_found'));
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
if (isset($asset->assigneduser->id) && ($asset->assigneduser->id!=0)) {
|
||||
@@ -371,11 +366,11 @@ class AssetsController extends AdminController
|
||||
// Check if the asset exists
|
||||
if (is_null($asset = Asset::find($assetId))) {
|
||||
// Redirect to the asset management page with error
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.not_found'));
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
// Get the dropdown of users and then pass it to the checkout view
|
||||
$users_list = array('' => Lang::get('general.select_user')) + DB::table('users')->select(DB::raw('concat(last_name,", ",first_name) as full_name, id'))->whereNull('deleted_at')->orderBy('last_name', 'asc')->orderBy('first_name', 'asc')->lists('full_name', 'id');
|
||||
$users_list = usersList();
|
||||
|
||||
return View::make('backend/hardware/checkout', compact('asset'))->with('users_list',$users_list);
|
||||
|
||||
@@ -386,113 +381,51 @@ class AssetsController extends AdminController
|
||||
**/
|
||||
public function postCheckout($assetId)
|
||||
{
|
||||
|
||||
// Check if the asset exists
|
||||
if (is_null($asset = Asset::find($assetId))) {
|
||||
// Redirect to the asset management page with error
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.not_found'));
|
||||
if (!$asset = Asset::find($assetId)) {
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$assigned_to = e(Input::get('assigned_to'));
|
||||
|
||||
|
||||
|
||||
// Declare the rules for the form validation
|
||||
$rules = array(
|
||||
'assigned_to' => 'required|min:1',
|
||||
'checkout_at' => 'required|date',
|
||||
'note' => 'alpha_space',
|
||||
);
|
||||
|
||||
// Create a new validator instance from our validation rules
|
||||
$validator = Validator::make(Input::all(), $rules);
|
||||
|
||||
// If validation fails, we'll exit the operation now.
|
||||
if ($validator->fails()) {
|
||||
// Ooops.. something went wrong
|
||||
return Redirect::back()->withInput()->withErrors($validator);
|
||||
}
|
||||
|
||||
|
||||
// Check if the user exists
|
||||
if (is_null($user = User::find($assigned_to))) {
|
||||
// Redirect to the asset management page with error
|
||||
if (!$user = User::find(e(Input::get('assigned_to')))) {
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.user_does_not_exist'));
|
||||
}
|
||||
|
||||
// Update the asset data
|
||||
$asset->assigned_to = e(Input::get('assigned_to'));
|
||||
|
||||
// Was the asset updated?
|
||||
if($asset->save()) {
|
||||
$logaction = new Actionlog();
|
||||
|
||||
if (Input::has('checkout_at')) {
|
||||
if (Input::get('checkout_at')!= date("Y-m-d")){
|
||||
$logaction->created_at = e(Input::get('checkout_at')).' 00:00:00';
|
||||
}
|
||||
}
|
||||
if (!$admin = Sentry::getUser()) {
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.admin_user_does_not_exist'));
|
||||
}
|
||||
|
||||
|
||||
if (Input::get('checkout_at')!= date("Y-m-d")){
|
||||
$checkout_at = e(Input::get('checkout_at')).' 00:00:00';
|
||||
} else {
|
||||
$checkout_at = date("Y-m-d h:i:s");
|
||||
}
|
||||
|
||||
$logaction->asset_id = $asset->id;
|
||||
$logaction->checkedout_to = $asset->assigned_to;
|
||||
$logaction->asset_type = 'hardware';
|
||||
$logaction->location_id = $user->location_id;
|
||||
$logaction->user_id = Sentry::getUser()->id;
|
||||
$logaction->note = e(Input::get('note'));
|
||||
$log = $logaction->logaction('checkout');
|
||||
|
||||
$data['log_id'] = $logaction->id;
|
||||
$data['eula'] = $asset->getEula();
|
||||
$data['first_name'] = $user->first_name;
|
||||
$data['item_name'] = $asset->showAssetName();
|
||||
$data['require_acceptance'] = $asset->requireAcceptance();
|
||||
|
||||
$settings = Setting::getSettings();
|
||||
|
||||
if ($settings->slack_endpoint) {
|
||||
|
||||
|
||||
$slack_settings = [
|
||||
'username' => $settings->botname,
|
||||
'channel' => $settings->slack_channel,
|
||||
'link_names' => true
|
||||
];
|
||||
|
||||
$client = new \Maknz\Slack\Client($settings->slack_endpoint,$slack_settings);
|
||||
|
||||
try {
|
||||
$client->attach([
|
||||
'color' => 'good',
|
||||
'fields' => [
|
||||
[
|
||||
'title' => 'Checked Out:',
|
||||
'value' => strtoupper($logaction->asset_type).' asset <'.Config::get('app.url').'/hardware/'.$asset->id.'/view'.'|'.$asset->showAssetName().'> checked out to <'.Config::get('app.url').'/admin/users/'.$user->id.'/view|'.$user->fullName().'> by <'.Config::get('app.url').'/hardware/'.$asset->id.'/view'.'|'.Sentry::getUser()->fullName().'>.'
|
||||
],
|
||||
[
|
||||
'title' => 'Note:',
|
||||
'value' => e($logaction->note)
|
||||
],
|
||||
|
||||
|
||||
|
||||
]
|
||||
])->send('Asset Checked Out');
|
||||
|
||||
} catch (Exception $e) {
|
||||
|
||||
}
|
||||
|
||||
if (Input::has('expected_checkin')) {
|
||||
if (Input::get('expected_checkin')!= date("Y-m-d")){
|
||||
$expected_checkin = e(Input::get('expected_checkin')).' 00:00:00';
|
||||
}
|
||||
} else {
|
||||
$expected_checkin = null;
|
||||
}
|
||||
|
||||
|
||||
if (($asset->requireAcceptance()=='1') || ($asset->getEula())) {
|
||||
|
||||
Mail::send('emails.accept-asset', $data, function ($m) use ($user) {
|
||||
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
|
||||
$m->subject('Confirm asset delivery');
|
||||
});
|
||||
}
|
||||
|
||||
if ($asset->checkOutToUser($user, $admin, $checkout_at, $expected_checkin, e(Input::get('note')), e(Input::get('name')))) {
|
||||
// Redirect to the new asset page
|
||||
return Redirect::to("hardware")->with('success', Lang::get('admin/hardware/message.checkout.success'));
|
||||
}
|
||||
@@ -513,7 +446,7 @@ class AssetsController extends AdminController
|
||||
// Check if the asset exists
|
||||
if (is_null($asset = Asset::find($assetId))) {
|
||||
// Redirect to the asset management page with error
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.not_found'));
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
return View::make('backend/hardware/checkin', compact('asset'))->with('backto', $backto);
|
||||
@@ -531,11 +464,15 @@ class AssetsController extends AdminController
|
||||
// Check if the asset exists
|
||||
if (is_null($asset = Asset::find($assetId))) {
|
||||
// Redirect to the asset management page with error
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.not_found'));
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
// Check for a valid user to checkout fa-random
|
||||
// This will need to be tweaked for checkout to location
|
||||
if (!is_null($asset->assigned_to)) {
|
||||
$user = User::find($asset->assigned_to);
|
||||
} else {
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.already_checked_in'));
|
||||
}
|
||||
|
||||
// This is just used for the redirect
|
||||
@@ -546,6 +483,7 @@ class AssetsController extends AdminController
|
||||
|
||||
// Update the asset data to null, since it's being checked in
|
||||
$asset->assigned_to = NULL;
|
||||
$asset->accepted = NULL;
|
||||
|
||||
|
||||
// Was the asset updated?
|
||||
@@ -571,7 +509,6 @@ class AssetsController extends AdminController
|
||||
|
||||
if ($settings->slack_endpoint) {
|
||||
|
||||
|
||||
$slack_settings = [
|
||||
'username' => $settings->botname,
|
||||
'channel' => $settings->slack_channel,
|
||||
@@ -602,6 +539,20 @@ class AssetsController extends AdminController
|
||||
|
||||
}
|
||||
|
||||
$data['log_id'] = $logaction->id;
|
||||
$data['first_name'] = $user->first_name;
|
||||
$data['item_name'] = $asset->showAssetName();
|
||||
$data['checkin_date'] = $logaction->created_at;
|
||||
$data['item_tag'] = $asset->asset_tag;
|
||||
$data['note'] = $logaction->note;
|
||||
|
||||
if ((($asset->checkin_email()=='1')) && ($user) && (!Config::get('app.lock_passwords'))) {
|
||||
Mail::send('emails.checkin-asset', $data, function ($m) use ($user) {
|
||||
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
|
||||
$m->subject('Confirm Asset Checkin');
|
||||
});
|
||||
}
|
||||
|
||||
if ($backto=='user') {
|
||||
return Redirect::to("admin/users/".$return_to.'/view')->with('success', Lang::get('admin/hardware/message.checkin.success'));
|
||||
} else {
|
||||
@@ -657,26 +608,15 @@ class AssetsController extends AdminController
|
||||
|
||||
if ($settings->qr_code == '1') {
|
||||
$asset = Asset::find($assetId);
|
||||
$size = barcodeDimensions($settings->barcode_type);
|
||||
|
||||
if (isset($asset->id,$asset->asset_tag)) {
|
||||
|
||||
$content = DNS2D::getBarcodePNG(route('view/hardware', $asset->id), $settings->barcode_type,
|
||||
$this->qrCodeDimensions['height'],$this->qrCodeDimensions['width']);
|
||||
|
||||
$img = imagecreatefromstring(base64_decode($content));
|
||||
imagepng($img);
|
||||
imagedestroy($img);
|
||||
|
||||
$content_disposition = sprintf('attachment;filename=qr_code_%s.png', preg_replace('/\W/', '', $asset->asset_tag));
|
||||
$response = Response::make($content, 200);
|
||||
$response->header('Content-Type', 'image/png');
|
||||
$response->header('Content-Disposition', $content_disposition);
|
||||
return $response;
|
||||
$barcode = new \Com\Tecnick\Barcode\Barcode();
|
||||
$barcode_obj = $barcode->getBarcodeObj($settings->barcode_type, route('view/hardware', $asset->id), $size['height'], $size['width'], 'black', array(-2, -2, -2, -2));
|
||||
return $barcode_obj->getPngData();
|
||||
}
|
||||
}
|
||||
|
||||
$response = Response::make('', 404);
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -693,17 +633,15 @@ class AssetsController extends AdminController
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
// Grab the dropdown list of models
|
||||
$model_list = array('' => Lang::get('general.select_model')) + Model::lists('name', 'id');
|
||||
|
||||
// Grab the dropdown list of status
|
||||
$statuslabel_list = Statuslabel::lists('name', 'id');
|
||||
|
||||
$location_list = array('' => Lang::get('general.select_location')) + Location::lists('name', 'id');
|
||||
|
||||
// get depreciation list
|
||||
$supplier_list = array('' => Lang::get('general.select_supplier')) + Supplier::orderBy('name', 'asc')->lists('name', 'id');
|
||||
$assigned_to = array('' => Lang::get('general.select_user')) + DB::table('users')->select(DB::raw('concat(first_name," ",last_name) as full_name, id'))->whereNull('deleted_at')->lists('full_name', 'id');
|
||||
// Grab the dropdown lists
|
||||
$model_list = modelList();
|
||||
$statuslabel_list = statusLabelList();
|
||||
$location_list = locationsList();
|
||||
$manufacturer_list = manufacturerList();
|
||||
$category_list = categoryList();
|
||||
$supplier_list = suppliersList();
|
||||
$assigned_to = usersList();
|
||||
$statuslabel_types = statusTypeList();
|
||||
|
||||
$asset = clone $asset_to_clone;
|
||||
$asset->id = null;
|
||||
@@ -711,7 +649,16 @@ class AssetsController extends AdminController
|
||||
$asset->serial = '';
|
||||
$asset->assigned_to = '';
|
||||
$asset->mac_address = '';
|
||||
return View::make('backend/hardware/edit')->with('supplier_list',$supplier_list)->with('model_list',$model_list)->with('statuslabel_list',$statuslabel_list)->with('assigned_to',$assigned_to)->with('asset',$asset)->with('location_list',$location_list);
|
||||
return View::make('backend/hardware/edit')
|
||||
->with('supplier_list',$supplier_list)
|
||||
->with('model_list',$model_list)
|
||||
->with('statuslabel_list',$statuslabel_list)
|
||||
->with('statuslabel_types',$statuslabel_types)
|
||||
->with('assigned_to',$assigned_to)
|
||||
->with('asset',$asset)
|
||||
->with('location_list',$location_list)
|
||||
->with('manufacturer',$manufacturer_list)
|
||||
->with('category',$category_list);
|
||||
|
||||
}
|
||||
|
||||
@@ -734,7 +681,7 @@ class AssetsController extends AdminController
|
||||
return Redirect::route('hardware')->with('success', $success);
|
||||
|
||||
} else {
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.not_found'));
|
||||
return Redirect::to('hardware')->with('error', Lang::get('admin/hardware/message.does_not_exist'));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -795,7 +742,7 @@ class AssetsController extends AdminController
|
||||
}
|
||||
|
||||
} else {
|
||||
return Redirect::back()->with('success', Lang::get('admin/hardware/message.upload.nofiles'));
|
||||
return Redirect::back()->with('error', Lang::get('admin/hardware/message.upload.nofiles'));
|
||||
}
|
||||
|
||||
|
||||
@@ -911,10 +858,10 @@ class AssetsController extends AdminController
|
||||
$assets = Input::get('edit_asset');
|
||||
|
||||
$supplier_list = array('' => '') + Supplier::orderBy('name', 'asc')->lists('name', 'id');
|
||||
$statuslabel_list = array('' => '') + Statuslabel::lists('name', 'id');
|
||||
$location_list = array('' => '') + Location::lists('name', 'id');
|
||||
$statuslabel_list = array('' => '') + Statuslabel::lists('name', 'id');
|
||||
$location_list = array('' => '') + Location::lists('name', 'id');
|
||||
|
||||
return View::make('backend/hardware/bulk')->with('assets',$assets)->with('supplier_list',$supplier_list)->with('statuslabel_list',$statuslabel_list)->with('location_list',$location_list);
|
||||
return View::make('backend/hardware/bulk')->with('assets',$assets)->with('supplier_list',$supplier_list)->with('statuslabel_list',$statuslabel_list)->with('location_list',$location_list);
|
||||
|
||||
|
||||
}
|
||||
@@ -941,7 +888,7 @@ class AssetsController extends AdminController
|
||||
|
||||
$assets = Input::get('bulk_edit');
|
||||
|
||||
if ( (Input::has('purchase_date')) || (Input::has('rtd_location_id')) || (Input::has('status_id')) ) {
|
||||
if ( (Input::has('purchase_date')) || (Input::has('purchase_cost')) || (Input::has('supplier_id')) || (Input::has('order_number')) || (Input::has('warranty_months')) || (Input::has('rtd_location_id')) || (Input::has('requestable')) || (Input::has('status_id')) ) {
|
||||
|
||||
foreach ($assets as $key => $value) {
|
||||
|
||||
@@ -951,6 +898,22 @@ class AssetsController extends AdminController
|
||||
$update_array['purchase_date'] = e(Input::get('purchase_date'));
|
||||
}
|
||||
|
||||
if (Input::has('purchase_cost')) {
|
||||
$update_array['purchase_cost'] = e(Input::get('purchase_cost'));
|
||||
}
|
||||
|
||||
if (Input::has('supplier_id')) {
|
||||
$update_array['supplier_id'] = e(Input::get('supplier_id'));
|
||||
}
|
||||
|
||||
if (Input::has('order_number')) {
|
||||
$update_array['order_number'] = e(Input::get('order_number'));
|
||||
}
|
||||
|
||||
if (Input::has('warranty_months')) {
|
||||
$update_array['warranty_months'] = e(Input::get('warranty_months'));
|
||||
}
|
||||
|
||||
if (Input::has('rtd_location_id')) {
|
||||
$update_array['rtd_location_id'] = e(Input::get('rtd_location_id'));
|
||||
}
|
||||
@@ -959,6 +922,12 @@ class AssetsController extends AdminController
|
||||
$update_array['status_id'] = e(Input::get('status_id'));
|
||||
}
|
||||
|
||||
if (Input::get('requestable')=='1') {
|
||||
$update_array['requestable'] = 1;
|
||||
} else {
|
||||
$update_array['requestable'] = 0;
|
||||
}
|
||||
|
||||
|
||||
if (DB::table('assets')
|
||||
->where('id', $key)
|
||||
@@ -998,63 +967,72 @@ class AssetsController extends AdminController
|
||||
public function getDatatable($status = null)
|
||||
{
|
||||
|
||||
$assets = Asset::with('model','assigneduser','assigneduser.userloc','assetstatus','defaultLoc','assetlog','model','model.category')->Hardware()->select(array('id', 'name','model_id','assigned_to','asset_tag','serial','status_id','purchase_date','deleted_at','rtd_location_id','notes','order_number'));
|
||||
$assets = Asset::with('model','assigneduser','assigneduser.userloc','assetstatus','defaultLoc','assetlog','model','model.category')->Hardware()->select(array('id', 'name','model_id','assigned_to','asset_tag','serial','status_id','purchase_date','deleted_at','rtd_location_id','notes','order_number','mac_address','warranty_months'));
|
||||
|
||||
|
||||
switch ($status) {
|
||||
case 'Pending':
|
||||
$assets->Pending();
|
||||
break;
|
||||
case 'RTD':
|
||||
$assets->RTD();
|
||||
break;
|
||||
case 'Undeployable':
|
||||
$assets->Undeployable();
|
||||
break;
|
||||
case 'Archived':
|
||||
$assets->Archived();
|
||||
break;
|
||||
case 'Requestable':
|
||||
$assets->RequestableAssets();
|
||||
break;
|
||||
case 'Deployed':
|
||||
$assets->Deployed();
|
||||
break;
|
||||
case 'Deleted':
|
||||
$assets->withTrashed()->Deleted();
|
||||
break;
|
||||
}
|
||||
switch ($status) {
|
||||
case 'Deleted':
|
||||
$assets->withTrashed()->Deleted();
|
||||
break;
|
||||
case 'Pending':
|
||||
$assets->Pending();
|
||||
break;
|
||||
case 'RTD':
|
||||
$assets->RTD();
|
||||
break;
|
||||
case 'Undeployable':
|
||||
$assets->Undeployable();
|
||||
break;
|
||||
case 'Archived':
|
||||
$assets->Archived();
|
||||
break;
|
||||
case 'Requestable':
|
||||
$assets->RequestableAssets();
|
||||
break;
|
||||
case 'Deployed':
|
||||
$assets->Deployed();
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (Input::has('order_number')) {
|
||||
$assets->where('order_number','=',e(Input::get('order_number')));
|
||||
}
|
||||
|
||||
$assets = $assets->orderBy('asset_tag', 'ASC')->get();
|
||||
|
||||
|
||||
$assets = $assets->orderBy('asset_tag', 'ASC')->get();
|
||||
$actions = new \Chumper\Datatable\Columns\FunctionColumn('actions', function ($assets)
|
||||
{
|
||||
if ($assets->deleted_at=='') {
|
||||
return '<div style=" white-space: nowrap;"><a href="'.route('clone/hardware', $assets->id).'" class="btn btn-info btn-sm" title="Clone asset"><i class="fa fa-files-o"></i></a> <a href="'.route('update/hardware', $assets->id).'" class="btn btn-warning btn-sm"><i class="fa fa-pencil icon-white"></i></a> <a data-html="false" class="btn delete-asset btn-danger btn-sm" data-toggle="modal" href="'.route('delete/hardware', $assets->id).'" data-content="'.Lang::get('admin/hardware/message.delete.confirm').'" data-title="'.Lang::get('general.delete').' '.htmlspecialchars($assets->asset_tag).'?" onClick="return false;"><i class="fa fa-trash icon-white"></i></a></div>';
|
||||
} elseif ($assets->deleted_at!='') {
|
||||
return '<a href="'.route('restore/hardware', $assets->id).'" class="btn btn-warning btn-sm"><i class="fa fa-recycle icon-white"></i></a>';
|
||||
}
|
||||
|
||||
|
||||
$actions = new \Chumper\Datatable\Columns\FunctionColumn('actions', function ($assets)
|
||||
{
|
||||
if ($assets->deleted_at=='') {
|
||||
return '<a href="'.route('update/hardware', $assets->id).'" class="btn btn-warning btn-sm"><i class="fa fa-pencil icon-white"></i></a> <a data-html="false" class="btn delete-asset btn-danger btn-sm" data-toggle="modal" href="'.route('delete/hardware', $assets->id).'" data-content="'.Lang::get('admin/hardware/message.delete.confirm').'" data-title="'.Lang::get('general.delete').' '.htmlspecialchars($assets->asset_tag).'?" onClick="return false;"><i class="fa fa-trash icon-white"></i></a>';
|
||||
} elseif ($assets->model->deleted_at=='') {
|
||||
return '<a href="'.route('restore/hardware', $assets->id).'" class="btn btn-warning btn-sm"><i class="fa fa-recycle icon-white"></i></a>';
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
$inout = new \Chumper\Datatable\Columns\FunctionColumn('inout', function ($assets)
|
||||
{
|
||||
if ($assets->assetstatus->deployable != 0) {
|
||||
if (($assets->assigned_to !='') && ($assets->assigned_to > 0)) {
|
||||
return '<a href="'.route('checkin/hardware', $assets->id).'" class="btn btn-primary btn-sm">'.Lang::get('general.checkin').'</a>';
|
||||
} else {
|
||||
return '<a href="'.route('checkout/hardware', $assets->id).'" class="btn btn-info btn-sm">'.Lang::get('general.checkout').'</a>';
|
||||
|
||||
if ($assets->assetstatus) {
|
||||
|
||||
if ($assets->assetstatus->deployable != 0) {
|
||||
if (($assets->assigned_to !='') && ($assets->assigned_to > 0)) {
|
||||
return '<a href="'.route('checkin/hardware', $assets->id).'" class="btn btn-primary btn-sm">'.Lang::get('general.checkin').'</a>';
|
||||
} else {
|
||||
return '<a href="'.route('checkout/hardware', $assets->id).'" class="btn btn-info btn-sm">'.Lang::get('general.checkout').'</a>';
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
return Datatable::collection($assets)
|
||||
->addColumn('',function($assets)
|
||||
{
|
||||
return '<input type="checkbox" name="edit_asset['.$assets->id.']" class="one_required">';
|
||||
return '<div class="text-center"><input type="checkbox" name="edit_asset['.$assets->id.']" class="one_required"></div>';
|
||||
})
|
||||
->addColumn('name',function($assets)
|
||||
{
|
||||
@@ -1065,7 +1043,7 @@ class AssetsController extends AdminController
|
||||
return '<a title="'.$assets->asset_tag.'" href="hardware/'.$assets->id.'/view">'.$assets->asset_tag.'</a>';
|
||||
})
|
||||
|
||||
->showColumns('serial')
|
||||
->showColumns('serial')
|
||||
|
||||
->addColumn('model',function($assets)
|
||||
{
|
||||
@@ -1076,13 +1054,16 @@ class AssetsController extends AdminController
|
||||
}
|
||||
})
|
||||
|
||||
->addColumn('status',function($assets)
|
||||
{
|
||||
if ($assets->assigned_to!='') {
|
||||
return link_to('../admin/users/'.$assets->assigned_to.'/view', $assets->assigneduser->fullName());
|
||||
} else {
|
||||
return $assets->assetstatus->name;
|
||||
}
|
||||
->addColumn('status',function($assets)
|
||||
{
|
||||
if ($assets->assigned_to!='') {
|
||||
return link_to(Config::get('app.url').'/admin/users/'.$assets->assigned_to.'/view', $assets->assigneduser->fullName());
|
||||
} else {
|
||||
if ($assets->assetstatus) {
|
||||
return $assets->assetstatus->name;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
->addColumn('location',function($assets)
|
||||
@@ -1101,35 +1082,40 @@ class AssetsController extends AdminController
|
||||
return 'No category';
|
||||
}
|
||||
|
||||
})
|
||||
})
|
||||
|
||||
->addColumn('eol',function($assets)
|
||||
{
|
||||
return $assets->eol_date();
|
||||
})
|
||||
->addColumn('eol',function($assets)
|
||||
{
|
||||
return $assets->eol_date();
|
||||
})
|
||||
|
||||
->addColumn('notes',function($assets)
|
||||
{
|
||||
return $assets->notes;
|
||||
})
|
||||
->addColumn('notes',function($assets)
|
||||
{
|
||||
return $assets->notes;
|
||||
})
|
||||
->addColumn('mac_address',function($assets)
|
||||
{
|
||||
return $assets->mac_address;
|
||||
})
|
||||
|
||||
->addColumn('order_number',function($assets)
|
||||
{
|
||||
return $assets->order_number;
|
||||
})
|
||||
->addColumn('order_number',function($assets)
|
||||
{
|
||||
return '<a href="../hardware/?order_number='.$assets->order_number.'">'.$assets->order_number.'';
|
||||
})
|
||||
|
||||
->addColumn('checkout_date',function($assets)
|
||||
{
|
||||
if (($assets->assigned_to!='') && ($assets->assetlog->first())) {
|
||||
return $assets->assetlog->first()->created_at->format('Y-m-d');
|
||||
}
|
||||
|
||||
})
|
||||
->addColumn($inout)
|
||||
->addColumn($actions)
|
||||
->searchColumns('name', 'asset_tag', 'serial', 'model', 'status','location','eol','checkout_date', 'inout','category','notes','order_number')
|
||||
->orderColumns('name', 'asset_tag', 'serial', 'model', 'status','location','eol','checkout_date', 'inout','notes','order_number')
|
||||
->make();
|
||||
->addColumn('checkout_date',function($assets)
|
||||
{
|
||||
if (($assets->assigned_to!='') && ($assets->assetlog->first())) {
|
||||
return $assets->assetlog->first()->created_at->format('Y-m-d');
|
||||
}
|
||||
|
||||
})
|
||||
->addColumn($inout)
|
||||
->addColumn($actions)
|
||||
->searchColumns('name', 'asset_tag', 'serial', 'model', 'status','location','eol','checkout_date', 'inout','category','notes','order_number','mac_address')
|
||||
->orderColumns('name', 'asset_tag', 'serial', 'model', 'status','location','eol','notes','order_number','checkout_date', 'inout','mac_address')
|
||||
->make();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ class CategoriesController extends AdminController
|
||||
public function getCreate()
|
||||
{
|
||||
// Show the page
|
||||
$category_types= array('' => '', 'asset' => 'Asset', 'accessory' => 'Accessory');
|
||||
$category_types= categoryTypeList();
|
||||
return View::make('backend/categories/edit')->with('category',new Category)
|
||||
->with('category_types',$category_types);
|
||||
}
|
||||
@@ -66,8 +66,9 @@ class CategoriesController extends AdminController
|
||||
$category->name = e(Input::get('name'));
|
||||
$category->category_type = e(Input::get('category_type'));
|
||||
$category->eula_text = e(Input::get('eula_text'));
|
||||
$category->use_default_eula = e(Input::get('use_default_eula', '0'));
|
||||
$category->require_acceptance = e(Input::get('require_acceptance', '0'));
|
||||
$category->use_default_eula = e(Input::get('use_default_eula', '0'));
|
||||
$category->require_acceptance = e(Input::get('require_acceptance', '0'));
|
||||
$category->checkin_email = e(Input::get('checkin_email', '0'));
|
||||
$category->user_id = Sentry::getId();
|
||||
|
||||
// Was the asset created?
|
||||
@@ -101,8 +102,8 @@ class CategoriesController extends AdminController
|
||||
//$category_options = array('' => 'Top Level') + Category::lists('name', 'id');
|
||||
|
||||
$category_options = array('' => 'Top Level') + DB::table('categories')->where('id', '!=', $categoryId)->lists('name', 'id');
|
||||
$category_types= array('' => '', 'asset' => 'Asset', 'accessory' => 'Accessory');
|
||||
|
||||
$category_types= array('' => '', 'asset' => 'Asset', 'accessory' => 'Accessory', 'consumable' => 'Consumable');
|
||||
|
||||
return View::make('backend/categories/edit', compact('category'))
|
||||
->with('category_options',$category_options)
|
||||
->with('category_types',$category_types);
|
||||
@@ -143,8 +144,9 @@ class CategoriesController extends AdminController
|
||||
$category->name = e(Input::get('name'));
|
||||
$category->category_type = e(Input::get('category_type'));
|
||||
$category->eula_text = e(Input::get('eula_text'));
|
||||
$category->use_default_eula = e(Input::get('use_default_eula', '0'));
|
||||
$category->require_acceptance = e(Input::get('require_acceptance', '0'));
|
||||
$category->use_default_eula = e(Input::get('use_default_eula', '0'));
|
||||
$category->require_acceptance = e(Input::get('require_acceptance', '0'));
|
||||
$category->checkin_email = e(Input::get('checkin_email', '0'));
|
||||
|
||||
// Was the asset created?
|
||||
if($category->save()) {
|
||||
@@ -241,13 +243,13 @@ class CategoriesController extends AdminController
|
||||
->orderColumns('name','category_type','count','acceptance','eula','actions')
|
||||
->make();
|
||||
}
|
||||
|
||||
|
||||
public function getDataView($categoryID) {
|
||||
$category = Category::find($categoryID);
|
||||
$categoryassets = $category->assets;
|
||||
|
||||
$actions = new \Chumper\Datatable\Columns\FunctionColumn('actions', function ($categoryassets)
|
||||
{
|
||||
$actions = new \Chumper\Datatable\Columns\FunctionColumn('actions', function ($categoryassets)
|
||||
{
|
||||
if (($categoryassets->assigned_to !='') && ($categoryassets->assigned_to > 0)) {
|
||||
return '<a href="'.route('checkin/hardware', $categoryassets->id).'" class="btn btn-primary btn-sm">'.Lang::get('general.checkin').'</a>';
|
||||
} else {
|
||||
|
||||
@@ -0,0 +1,394 @@
|
||||
<?php namespace Controllers\Admin;
|
||||
|
||||
use AdminController;
|
||||
use Input;
|
||||
use Lang;
|
||||
use Redirect;
|
||||
use Setting;
|
||||
use DB;
|
||||
use Sentry;
|
||||
use Consumable;
|
||||
use Str;
|
||||
use Validator;
|
||||
use View;
|
||||
use User;
|
||||
use Actionlog;
|
||||
use Mail;
|
||||
use Datatable;
|
||||
use Slack;
|
||||
use Config;
|
||||
|
||||
class ConsumablesController extends AdminController
|
||||
{
|
||||
/**
|
||||
* Show a list of all the consumables.
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
|
||||
public function getIndex()
|
||||
{
|
||||
return View::make('backend/consumables/index');
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Consumable create.
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
public function getCreate()
|
||||
{
|
||||
// Show the page
|
||||
$category_list = array('' => '') + DB::table('categories')->where('category_type','=','consumable')->whereNull('deleted_at')->orderBy('name','ASC')->lists('name', 'id');
|
||||
return View::make('backend/consumables/edit')->with('consumable',new Consumable)->with('category_list',$category_list);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Consumable create form processing.
|
||||
*
|
||||
* @return Redirect
|
||||
*/
|
||||
public function postCreate()
|
||||
{
|
||||
|
||||
// create a new model instance
|
||||
$consumable = new Consumable();
|
||||
|
||||
$validator = Validator::make(Input::all(), $consumable->rules);
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
// The given data did not pass validation
|
||||
return Redirect::back()->withInput()->withErrors($validator->messages());
|
||||
}
|
||||
else{
|
||||
|
||||
// Update the consumable data
|
||||
$consumable->name = e(Input::get('name'));
|
||||
$consumable->category_id = e(Input::get('category_id'));
|
||||
$consumable->qty = e(Input::get('qty'));
|
||||
$consumable->user_id = Sentry::getId();
|
||||
|
||||
// Was the consumable created?
|
||||
if($consumable->save()) {
|
||||
// Redirect to the new consumable page
|
||||
return Redirect::to("admin/consumables")->with('success', Lang::get('admin/consumables/message.create.success'));
|
||||
}
|
||||
}
|
||||
|
||||
// Redirect to the consumable create page
|
||||
return Redirect::to('admin/consumables/create')->with('error', Lang::get('admin/consumables/message.create.error'));
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Consumable update.
|
||||
*
|
||||
* @param int $consumableId
|
||||
* @return View
|
||||
*/
|
||||
public function getEdit($consumableId = null)
|
||||
{
|
||||
// Check if the consumable exists
|
||||
if (is_null($consumable = Consumable::find($consumableId))) {
|
||||
// Redirect to the blogs management page
|
||||
return Redirect::to('admin/consumables')->with('error', Lang::get('admin/consumables/message.does_not_exist'));
|
||||
}
|
||||
|
||||
$category_list = array('' => '') + DB::table('categories')->where('category_type','=','consumable')->whereNull('deleted_at')->orderBy('name','ASC')->lists('name', 'id');
|
||||
return View::make('backend/consumables/edit', compact('consumable'))->with('category_list',$category_list);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Consumable update form processing page.
|
||||
*
|
||||
* @param int $consumableId
|
||||
* @return Redirect
|
||||
*/
|
||||
public function postEdit($consumableId = null)
|
||||
{
|
||||
// Check if the blog post exists
|
||||
if (is_null($consumable = Consumable::find($consumableId))) {
|
||||
// Redirect to the blogs management page
|
||||
return Redirect::to('admin/consumables')->with('error', Lang::get('admin/consumables/message.does_not_exist'));
|
||||
}
|
||||
|
||||
|
||||
// get the POST data
|
||||
$new = Input::all();
|
||||
|
||||
// attempt validation
|
||||
$validator = Validator::make(Input::all(), $consumable->validationRules($consumableId));
|
||||
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
// The given data did not pass validation
|
||||
return Redirect::back()->withInput()->withErrors($validator->messages());
|
||||
}
|
||||
// attempt validation
|
||||
else {
|
||||
|
||||
// Update the consumable data
|
||||
$consumable->name = e(Input::get('name'));
|
||||
$consumable->category_id = e(Input::get('category_id'));
|
||||
$consumable->qty = e(Input::get('qty'));
|
||||
|
||||
// Was the consumable created?
|
||||
if($consumable->save()) {
|
||||
// Redirect to the new consumable page
|
||||
return Redirect::to("admin/consumables")->with('success', Lang::get('admin/consumables/message.update.success'));
|
||||
}
|
||||
}
|
||||
|
||||
// Redirect to the consumable management page
|
||||
return Redirect::to("admin/consumables/$consumableID/edit")->with('error', Lang::get('admin/consumables/message.update.error'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the given consumable.
|
||||
*
|
||||
* @param int $consumableId
|
||||
* @return Redirect
|
||||
*/
|
||||
public function getDelete($consumableId)
|
||||
{
|
||||
// Check if the blog post exists
|
||||
if (is_null($consumable = Consumable::find($consumableId))) {
|
||||
// Redirect to the blogs management page
|
||||
return Redirect::to('admin/consumables')->with('error', Lang::get('admin/consumables/message.not_found'));
|
||||
}
|
||||
|
||||
|
||||
if ($consumable->hasUsers() > 0) {
|
||||
return Redirect::to('admin/consumables')->with('error', Lang::get('admin/consumables/message.assoc_users', array('count'=> $consumable->hasUsers())));
|
||||
} else {
|
||||
$consumable->delete();
|
||||
|
||||
// Redirect to the locations management page
|
||||
return Redirect::to('admin/consumables')->with('success', Lang::get('admin/consumables/message.delete.success'));
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Get the consumable information to present to the consumable view page
|
||||
*
|
||||
* @param int $consumableId
|
||||
* @return View
|
||||
**/
|
||||
public function getView($consumableID = null)
|
||||
{
|
||||
$consumable = Consumable::find($consumableID);
|
||||
|
||||
if (isset($consumable->id)) {
|
||||
return View::make('backend/consumables/view', compact('consumable'));
|
||||
} else {
|
||||
// Prepare the error message
|
||||
$error = Lang::get('admin/consumables/message.does_not_exist', compact('id'));
|
||||
|
||||
// Redirect to the user management page
|
||||
return Redirect::route('consumables')->with('error', $error);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Check out the consumable to a person
|
||||
**/
|
||||
public function getCheckout($consumableId)
|
||||
{
|
||||
// Check if the consumable exists
|
||||
if (is_null($consumable = Consumable::find($consumableId))) {
|
||||
// Redirect to the consumable management page with error
|
||||
return Redirect::to('consumables')->with('error', Lang::get('admin/consumables/message.not_found'));
|
||||
}
|
||||
|
||||
// Get the dropdown of users and then pass it to the checkout view
|
||||
$users_list = array('' => 'Select a User') + DB::table('users')->select(DB::raw('concat(last_name,", ",first_name," (",username,")") as full_name, id'))->whereNull('deleted_at')->orderBy('last_name', 'asc')->orderBy('first_name', 'asc')->lists('full_name', 'id');
|
||||
|
||||
return View::make('backend/consumables/checkout', compact('consumable'))->with('users_list',$users_list);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Check out the consumable to a person
|
||||
**/
|
||||
public function postCheckout($consumableId)
|
||||
{
|
||||
// Check if the consumable exists
|
||||
if (is_null($consumable = Consumable::find($consumableId))) {
|
||||
// Redirect to the consumable management page with error
|
||||
return Redirect::to('consumables')->with('error', Lang::get('admin/consumables/message.not_found'));
|
||||
}
|
||||
|
||||
$admin_user = Sentry::getUser();
|
||||
$assigned_to = e(Input::get('assigned_to'));
|
||||
|
||||
|
||||
// Declare the rules for the form validation
|
||||
$rules = array(
|
||||
'assigned_to' => 'required|min:1'
|
||||
);
|
||||
|
||||
// Create a new validator instance from our validation rules
|
||||
$validator = Validator::make(Input::all(), $rules);
|
||||
|
||||
// If validation fails, we'll exit the operation now.
|
||||
if ($validator->fails()) {
|
||||
// Ooops.. something went wrong
|
||||
return Redirect::back()->withInput()->withErrors($validator);
|
||||
}
|
||||
|
||||
|
||||
// Check if the user exists
|
||||
if (is_null($user = User::find($assigned_to))) {
|
||||
// Redirect to the consumable management page with error
|
||||
return Redirect::to('admin/consumables')->with('error', Lang::get('admin/consumables/message.user_does_not_exist'));
|
||||
}
|
||||
|
||||
// Update the consumable data
|
||||
$consumable->assigned_to = e(Input::get('assigned_to'));
|
||||
|
||||
$consumable->users()->attach($consumable->id, array(
|
||||
'consumable_id' => $consumable->id,
|
||||
'assigned_to' => e(Input::get('assigned_to'))));
|
||||
|
||||
$logaction = new Actionlog();
|
||||
$logaction->consumable_id = $consumable->id;
|
||||
$logaction->checkedout_to = $consumable->assigned_to;
|
||||
$logaction->asset_type = 'consumable';
|
||||
$logaction->location_id = $user->location_id;
|
||||
$logaction->user_id = Sentry::getUser()->id;
|
||||
$logaction->note = e(Input::get('note'));
|
||||
|
||||
$settings = Setting::getSettings();
|
||||
|
||||
if ($settings->slack_endpoint) {
|
||||
|
||||
|
||||
$slack_settings = [
|
||||
'username' => $settings->botname,
|
||||
'channel' => $settings->slack_channel,
|
||||
'link_names' => true
|
||||
];
|
||||
|
||||
$client = new \Maknz\Slack\Client($settings->slack_endpoint,$slack_settings);
|
||||
|
||||
try {
|
||||
$client->attach([
|
||||
'color' => 'good',
|
||||
'fields' => [
|
||||
[
|
||||
'title' => 'Checked Out:',
|
||||
'value' => strtoupper($logaction->asset_type).' <'.Config::get('app.url').'/admin/consumables/'.$consumable->id.'/view'.'|'.$consumable->name.'> checked out to <'.Config::get('app.url').'/admin/users/'.$user->id.'/view|'.$user->fullName().'> by <'.Config::get('app.url').'/admin/users/'.$admin_user->id.'/view'.'|'.$admin_user->fullName().'>.'
|
||||
],
|
||||
[
|
||||
'title' => 'Note:',
|
||||
'value' => e($logaction->note)
|
||||
],
|
||||
|
||||
|
||||
|
||||
]
|
||||
])->send('Consumable Checked Out');
|
||||
|
||||
} catch (Exception $e) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
$log = $logaction->logaction('checkout');
|
||||
|
||||
$consumable_user = DB::table('consumables_users')->where('assigned_to','=',$consumable->assigned_to)->where('consumable_id','=',$consumable->id)->first();
|
||||
|
||||
$data['log_id'] = $logaction->id;
|
||||
$data['eula'] = $consumable->getEula();
|
||||
$data['first_name'] = $user->first_name;
|
||||
$data['item_name'] = $consumable->name;
|
||||
$data['checkout_date'] = $logaction->created_at;
|
||||
$data['item_tag'] = '';
|
||||
$data['expected_checkin'] = '';
|
||||
$data['note'] = $logaction->note;
|
||||
$data['require_acceptance'] = $consumable->requireAcceptance();
|
||||
|
||||
|
||||
if (($consumable->requireAcceptance()=='1') || ($consumable->getEula())) {
|
||||
|
||||
Mail::send('emails.accept-asset', $data, function ($m) use ($user) {
|
||||
$m->to($user->email, $user->first_name . ' ' . $user->last_name);
|
||||
$m->subject('Confirm consumable delivery');
|
||||
});
|
||||
}
|
||||
|
||||
// Redirect to the new consumable page
|
||||
return Redirect::to("admin/consumables")->with('success', Lang::get('admin/consumables/message.checkout.success'));
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function getDatatable()
|
||||
{
|
||||
$consumables = Consumable::select(array('id','name','qty'))
|
||||
->whereNull('deleted_at')
|
||||
->orderBy('created_at', 'DESC');
|
||||
|
||||
$consumables = $consumables->get();
|
||||
|
||||
$actions = new \Chumper\Datatable\Columns\FunctionColumn('actions',function($consumables)
|
||||
{
|
||||
return '<a href="'.route('checkout/consumable', $consumables->id).'" style="margin-right:5px;" class="btn btn-info btn-sm" '.(($consumables->numRemaining() > 0 ) ? '' : ' disabled').'>'.Lang::get('general.checkout').'</a><a href="'.route('update/consumable', $consumables->id).'" class="btn btn-warning btn-sm" style="margin-right:5px;"><i class="fa fa-pencil icon-white"></i></a><a data-html="false" class="btn delete-asset btn-danger btn-sm" data-toggle="modal" href="'.route('delete/consumable', $consumables->id).'" data-content="'.Lang::get('admin/consumables/message.delete.confirm').'" data-title="'.Lang::get('general.delete').' '.htmlspecialchars($consumables->name).'?" onClick="return false;"><i class="fa fa-trash icon-white"></i></a>';
|
||||
});
|
||||
|
||||
return Datatable::collection($consumables)
|
||||
->addColumn('name',function($consumables)
|
||||
{
|
||||
return link_to('admin/consumables/'.$consumables->id.'/view', $consumables->name);
|
||||
})
|
||||
->addColumn('qty',function($consumables)
|
||||
{
|
||||
return $consumables->qty;
|
||||
})
|
||||
->addColumn('numRemaining',function($consumables)
|
||||
{
|
||||
return $consumables->numRemaining();
|
||||
})
|
||||
->addColumn($actions)
|
||||
->searchColumns('name','qty','numRemaining','actions')
|
||||
->orderColumns('name','qty','numRemaining','actions')
|
||||
->make();
|
||||
}
|
||||
|
||||
public function getDataView($consumableID)
|
||||
{
|
||||
$consumable = Consumable::find($consumableID);
|
||||
$consumable_users = $consumable->users;
|
||||
|
||||
|
||||
return Datatable::collection($consumable_users)
|
||||
->addColumn('name',function($consumable_users)
|
||||
{
|
||||
return link_to('/admin/users/'.$consumable_users->id.'/view', $consumable_users->fullName());
|
||||
})
|
||||
->make();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -15,56 +15,56 @@ class DashboardController extends AdminController
|
||||
public function getIndex()
|
||||
{
|
||||
// Show the page
|
||||
|
||||
$recent_activity = Actionlog::orderBy('created_at','DESC')->take(7)->get();
|
||||
|
||||
|
||||
$recent_activity = Actionlog::orderBy('created_at','DESC')->with('accessorylog','consumablelog','licenselog','assetlog','adminlog','userlog')->take(7)->get();
|
||||
|
||||
|
||||
$asset_stats['total'] = Asset::Hardware()->count();
|
||||
|
||||
|
||||
$asset_stats['rtd']['total'] = Asset::Hardware()->RTD()->count();
|
||||
|
||||
|
||||
if ($asset_stats['rtd']['total'] > 0) {
|
||||
$asset_stats['rtd']['percent'] = round(($asset_stats['rtd']['total']/$asset_stats['total']) * 100);
|
||||
} else {
|
||||
$asset_stats['rtd']['percent'] = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$asset_stats['pending']['total'] = Asset::Hardware()->Pending()->count();
|
||||
|
||||
|
||||
if ($asset_stats['pending']['total'] > 0) {
|
||||
$asset_stats['pending']['percent'] = round(($asset_stats['pending']['total']/$asset_stats['total']) * 100);
|
||||
} else {
|
||||
$asset_stats['pending']['percent'] = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$asset_stats['deployed']['total'] = Asset::Hardware()->Deployed()->count();
|
||||
|
||||
|
||||
if ($asset_stats['deployed']['total'] > 0) {
|
||||
$asset_stats['deployed']['percent'] = round(($asset_stats['deployed']['total']/$asset_stats['total']) * 100);
|
||||
} else {
|
||||
$asset_stats['deployed']['percent'] = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$asset_stats['undeployable']['total'] = Asset::Hardware()->Undeployable()->count();
|
||||
|
||||
|
||||
if ($asset_stats['undeployable']['total'] > 0) {
|
||||
$asset_stats['undeployable']['percent'] = round(($asset_stats['undeployable']['total']/$asset_stats['total']) * 100);
|
||||
} else {
|
||||
$asset_stats['undeployable']['percent'] = 0;
|
||||
}
|
||||
|
||||
|
||||
$asset_stats['archived']['total'] = Asset::Hardware()->Archived()->count();
|
||||
|
||||
|
||||
if ($asset_stats['archived']['total'] > 0) {
|
||||
$asset_stats['archived']['percent'] = round(($asset_stats['archived']['total']/$asset_stats['total']) * 100);
|
||||
} else {
|
||||
$asset_stats['archived']['percent'] = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
return View::make('backend/dashboard')->with('asset_stats',$asset_stats)->with('recent_activity',$recent_activity);
|
||||
}
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ class GroupsController extends AdminController
|
||||
// Was the group created?
|
||||
if ($group = Sentry::getGroupProvider()->create($inputs)) {
|
||||
// Redirect to the new group page
|
||||
return Redirect::route('update/group', $group->id)->with('success', Lang::get('admin/groups/message.success.create'));
|
||||
return Redirect::route('groups')->with('success', Lang::get('admin/groups/message.success.create'));
|
||||
}
|
||||
|
||||
// Redirect to the new group page
|
||||
@@ -163,7 +163,7 @@ class GroupsController extends AdminController
|
||||
|
||||
if (!Config::get('app.lock_passwords')) {
|
||||
|
||||
try {
|
||||
try {
|
||||
// Update the group data
|
||||
$group->name = Input::get('name');
|
||||
$group->permissions = Input::get('permissions');
|
||||
@@ -196,18 +196,22 @@ class GroupsController extends AdminController
|
||||
*/
|
||||
public function getDelete($id = null)
|
||||
{
|
||||
try {
|
||||
// Get group information
|
||||
$group = Sentry::getGroupProvider()->findById($id);
|
||||
if (!Config::get('app.lock_passwords')) {
|
||||
try {
|
||||
// Get group information
|
||||
$group = Sentry::getGroupProvider()->findById($id);
|
||||
|
||||
// Delete the group
|
||||
$group->delete();
|
||||
// Delete the group
|
||||
$group->delete();
|
||||
|
||||
// Redirect to the group management page
|
||||
return Redirect::route('groups')->with('success', Lang::get('admin/groups/message.success.delete'));
|
||||
} catch (GroupNotFoundException $e) {
|
||||
// Redirect to the group management page
|
||||
return Redirect::route('groups')->with('error', Lang::get('admin/groups/message.group_not_found', compact('id')));
|
||||
// Redirect to the group management page
|
||||
return Redirect::route('groups')->with('success', Lang::get('admin/groups/message.success.delete'));
|
||||
} catch (GroupNotFoundException $e) {
|
||||
// Redirect to the group management page
|
||||
return Redirect::route('groups')->with('error', Lang::get('admin/groups/message.group_not_found', compact('id')));
|
||||
}
|
||||
} else {
|
||||
return Redirect::route('groups')->with('error', Lang::get('general.feature_disabled'));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -101,6 +101,12 @@ class LicensesController extends AdminController
|
||||
$license->maintained = e(Input::get('maintained'));
|
||||
}
|
||||
|
||||
if ( e(Input::get('reassignable')) == '') {
|
||||
$license->reassignable = 0;
|
||||
} else {
|
||||
$license->reassignable = e(Input::get('reassignable'));
|
||||
}
|
||||
|
||||
if ( e(Input::get('purchase_order')) == '') {
|
||||
$license->purchase_order = '';
|
||||
} else {
|
||||
@@ -135,7 +141,7 @@ class LicensesController extends AdminController
|
||||
|
||||
// Was the license created?
|
||||
if($license->save()) {
|
||||
|
||||
|
||||
$insertedId = $license->id;
|
||||
// Save the license seat data
|
||||
for ($x=0; $x<$license->seats; $x++) {
|
||||
@@ -408,7 +414,7 @@ class LicensesController extends AdminController
|
||||
}
|
||||
|
||||
// Get the dropdown of users and then pass it to the checkout view
|
||||
$users_list = array('' => 'Select a User') + DB::table('users')->select(DB::raw('concat(last_name,", ",first_name) as full_name, id'))->whereNull('deleted_at')->orderBy('last_name', 'asc')->orderBy('first_name', 'asc')->lists('full_name', 'id');
|
||||
$users_list = array('' => 'Select a User') + DB::table('users')->select(DB::raw('concat(last_name,", ",first_name," (",username,")") as full_name, id'))->whereNull('deleted_at')->orderBy('last_name', 'asc')->orderBy('first_name', 'asc')->lists('full_name', 'id');
|
||||
|
||||
|
||||
// Left join to get a list of assets and some other helpful info
|
||||
@@ -524,7 +530,7 @@ class LicensesController extends AdminController
|
||||
$logaction->asset_id = $licenseseat->license_id;
|
||||
|
||||
|
||||
$license = License::find($licenseseat->license_id);
|
||||
$license = License::find($licenseseat->license_id);
|
||||
$settings = Setting::getSettings();
|
||||
|
||||
|
||||
@@ -533,23 +539,23 @@ class LicensesController extends AdminController
|
||||
$logaction->checkedout_to = NULL;
|
||||
$slack_msg = strtoupper($logaction->asset_type).' license <'.Config::get('app.url').'/admin/licenses/'.$license->id.'/view'.'|'.$license->name.'> checked out to <'.Config::get('app.url').'/hardware/'.$is_asset_id->id.'/view|'.$is_asset_id->showAssetName().'> by <'.Config::get('app.url').'/admin/users/'.$user->id.'/view'.'|'.$user->fullName().'>.';
|
||||
} else {
|
||||
$logaction->checkedout_to = e(Input::get('assigned_to'));
|
||||
$logaction->checkedout_to = e(Input::get('assigned_to'));
|
||||
$slack_msg = strtoupper($logaction->asset_type).' license <'.Config::get('app.url').'/admin/licenses/'.$license->id.'/view'.'|'.$license->name.'> checked out to <'.Config::get('app.url').'/admin/users/'.$is_assigned_to->id.'/view|'.$is_assigned_to->fullName().'> by <'.Config::get('app.url').'/admin/users/'.$user->id.'/view'.'|'.$user->fullName().'>.';
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if ($settings->slack_endpoint) {
|
||||
|
||||
|
||||
|
||||
$slack_settings = [
|
||||
'username' => $settings->botname,
|
||||
'channel' => $settings->slack_channel,
|
||||
'link_names' => true
|
||||
];
|
||||
|
||||
|
||||
$client = new \Maknz\Slack\Client($settings->slack_endpoint,$slack_settings);
|
||||
|
||||
|
||||
try {
|
||||
$client->attach([
|
||||
'color' => 'good',
|
||||
@@ -563,13 +569,13 @@ class LicensesController extends AdminController
|
||||
'value' => e($logaction->note)
|
||||
],
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
]
|
||||
])->send('License Checked Out');
|
||||
|
||||
|
||||
} catch (Exception $e) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -612,7 +618,7 @@ class LicensesController extends AdminController
|
||||
// Redirect to the asset management page with error
|
||||
return Redirect::to('admin/licenses')->with('error', Lang::get('admin/licenses/message.not_found'));
|
||||
}
|
||||
|
||||
|
||||
$license = License::find($licenseseat->license_id);
|
||||
|
||||
if(!$license->reassignable) {
|
||||
@@ -620,7 +626,7 @@ class LicensesController extends AdminController
|
||||
Session::flash('error', 'License not reassignable.');
|
||||
return Redirect::back()->withInput();
|
||||
}
|
||||
|
||||
|
||||
// Declare the rules for the form validation
|
||||
$rules = array(
|
||||
'note' => 'alpha_space',
|
||||
@@ -642,7 +648,7 @@ class LicensesController extends AdminController
|
||||
// Update the asset data
|
||||
$licenseseat->assigned_to = NULL;
|
||||
$licenseseat->asset_id = NULL;
|
||||
|
||||
|
||||
$user = Sentry::getUser();
|
||||
|
||||
// Was the asset updated?
|
||||
@@ -652,20 +658,20 @@ class LicensesController extends AdminController
|
||||
$logaction->asset_type = 'software';
|
||||
$logaction->note = e(Input::get('note'));
|
||||
$logaction->user_id = $user->id;
|
||||
|
||||
|
||||
$settings = Setting::getSettings();
|
||||
|
||||
|
||||
if ($settings->slack_endpoint) {
|
||||
|
||||
|
||||
|
||||
$slack_settings = [
|
||||
'username' => $settings->botname,
|
||||
'channel' => $settings->slack_channel,
|
||||
'link_names' => true
|
||||
];
|
||||
|
||||
|
||||
$client = new \Maknz\Slack\Client($settings->slack_endpoint,$slack_settings);
|
||||
|
||||
|
||||
try {
|
||||
$client->attach([
|
||||
'color' => 'good',
|
||||
@@ -678,20 +684,20 @@ class LicensesController extends AdminController
|
||||
'title' => 'Note:',
|
||||
'value' => e($logaction->note)
|
||||
],
|
||||
|
||||
|
||||
]
|
||||
])->send('License Checked In');
|
||||
|
||||
|
||||
} catch (Exception $e) {
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
$log = $logaction->logaction('checkin from');
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if ($backto=='user') {
|
||||
return Redirect::to("admin/users/".$return_to.'/view')->with('success', Lang::get('admin/licenses/message.checkin.success'));
|
||||
@@ -805,7 +811,7 @@ class LicensesController extends AdminController
|
||||
}
|
||||
|
||||
} else {
|
||||
return Redirect::back()->with('success', Lang::get('admin/licenses/message.upload.nofiles'));
|
||||
return Redirect::back()->with('error', Lang::get('admin/licenses/message.upload.nofiles'));
|
||||
}
|
||||
|
||||
|
||||
@@ -884,7 +890,7 @@ class LicensesController extends AdminController
|
||||
$licenses = License::orderBy('created_at', 'DESC')->get();
|
||||
|
||||
$actions = new \Chumper\Datatable\Columns\FunctionColumn('actions', function($licenses) {
|
||||
return '<a href="'.route('update/license', $licenses->id).'" class="btn btn-warning btn-sm" style="margin-right:5px;"><i class="fa fa-pencil icon-white"></i></a><a data-html="false" class="btn delete-asset btn-danger btn-sm" data-toggle="modal" href="'.route('delete/license', $licenses->id).'" data-content="'.Lang::get('admin/licenses/message.delete.confirm').'" data-title="'.Lang::get('general.delete').' '.htmlspecialchars($licenses->name).'?" onClick="return false;"><i class="fa fa-trash icon-white"></i></a>';
|
||||
return '<span style="white-space: nowrap;"><a href="'.route('freecheckout/license', $licenses->id).'" class="btn btn-primary btn-sm" style="margin-right:5px;" '.(($licenses->remaincount() > 0) ? '' : 'disabled').'>'.Lang::get('general.checkout').'</a> <a href="'.route('clone/license', $licenses->id).'" class="btn btn-info btn-sm" style="margin-right:5px;" title="Clone asset"><i class="fa fa-files-o"></i></a><a href="'.route('update/license', $licenses->id).'" class="btn btn-warning btn-sm" style="margin-right:5px;"><i class="fa fa-pencil icon-white"></i></a><a data-html="false" class="btn delete-asset btn-danger btn-sm" data-toggle="modal" href="'.route('delete/license', $licenses->id).'" data-content="'.Lang::get('admin/licenses/message.delete.confirm').'" data-title="'.Lang::get('general.delete').' '.htmlspecialchars($licenses->name).'?" onClick="return false;"><i class="fa fa-trash icon-white"></i></a></span>';
|
||||
});
|
||||
|
||||
return Datatable::collection($licenses)
|
||||
@@ -903,9 +909,22 @@ class LicensesController extends AdminController
|
||||
->addColumn('purchase_date', function($licenses) {
|
||||
return $licenses->purchase_date;
|
||||
})
|
||||
->addColumn('notes', function($licenses) {
|
||||
return $licenses->notes;
|
||||
})
|
||||
->addColumn($actions)
|
||||
->searchColumns('name','serial','totalSeats','remaining','purchase_date','actions')
|
||||
->orderColumns('name','serial','totalSeats','remaining','purchase_date','actions')
|
||||
->searchColumns('name','serial','totalSeats','remaining','purchase_date','actions','notes')
|
||||
->orderColumns('name','serial','totalSeats','remaining','purchase_date','actions','notes')
|
||||
->make();
|
||||
}
|
||||
|
||||
public function getFreeLicense($licenseId) {
|
||||
// Check if the asset exists
|
||||
if (is_null($license = License::find($licenseId))) {
|
||||
// Redirect to the asset management page with error
|
||||
return Redirect::to('admin/licenses')->with('error', Lang::get('admin/licenses/message.not_found'));
|
||||
}
|
||||
$seatId = $license->freeSeat($licenseId);
|
||||
return Redirect::to('admin/licenses/'.$seatId.'/checkout');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,8 @@ use Str;
|
||||
use Validator;
|
||||
use View;
|
||||
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
|
||||
class LocationsController extends AdminController
|
||||
{
|
||||
/**
|
||||
@@ -23,7 +25,7 @@ class LocationsController extends AdminController
|
||||
public function getIndex()
|
||||
{
|
||||
// Grab all the locations
|
||||
$locations = Location::orderBy('created_at', 'DESC')->get();
|
||||
$locations = Location::orderBy('created_at', 'DESC')->with('parent','assets','assignedassets')->get();
|
||||
|
||||
// Show the page
|
||||
return View::make('backend/locations/index', compact('locations'));
|
||||
@@ -37,9 +39,15 @@ class LocationsController extends AdminController
|
||||
*/
|
||||
public function getCreate()
|
||||
{
|
||||
// Show the page
|
||||
$location_options = array('0' => 'Top Level') + Location::lists('name', 'id');
|
||||
return View::make('backend/locations/edit')->with('location_options',$location_options)->with('location',new Location);
|
||||
$locations = Location::orderBy('name','ASC')->get();
|
||||
|
||||
$location_options_array = Location::getLocationHierarchy($locations);
|
||||
$location_options = Location::flattenLocationsArray($location_options_array);
|
||||
$location_options = array('' => 'Top Level') + $location_options;
|
||||
|
||||
return View::make('backend/locations/edit')
|
||||
->with('location_options',$location_options)
|
||||
->with('location',new Location);
|
||||
}
|
||||
|
||||
|
||||
@@ -62,12 +70,18 @@ class LocationsController extends AdminController
|
||||
|
||||
// Save the location data
|
||||
$location->name = e(Input::get('name'));
|
||||
if (Input::get('parent_id')=='') {
|
||||
$location->parent_id = null;
|
||||
} else {
|
||||
$location->parent_id = e(Input::get('parent_id'));
|
||||
}
|
||||
$location->currency = Input::get('currency','$');
|
||||
$location->address = e(Input::get('address'));
|
||||
$location->address2 = e(Input::get('address2'));
|
||||
$location->city = e(Input::get('city'));
|
||||
$location->state = e(Input::get('state'));
|
||||
$location->country = e(Input::get('country'));
|
||||
$location->zip = e(Input::get('zip'));
|
||||
$location->zip = e(Input::get('zip'));
|
||||
$location->user_id = Sentry::getId();
|
||||
|
||||
// Was the asset created?
|
||||
@@ -86,6 +100,52 @@ class LocationsController extends AdminController
|
||||
|
||||
}
|
||||
|
||||
public function store()
|
||||
{
|
||||
$new = Input::all();
|
||||
|
||||
$new['currency']=Setting::first()->default_currency;
|
||||
|
||||
// create a new location instance
|
||||
$location = new Location();
|
||||
|
||||
// attempt validation
|
||||
if ($location->validate($new)) {
|
||||
|
||||
// Save the location data
|
||||
$location->name = e(Input::get('name'));
|
||||
// if (Input::get('parent_id')=='') {
|
||||
// $location->parent_id = null;
|
||||
// } else {
|
||||
// $location->parent_id = e(Input::get('parent_id'));
|
||||
// }
|
||||
$location->currency = Setting::first()->default_currency; //e(Input::get('currency'));
|
||||
$location->address = ''; //e(Input::get('address'));
|
||||
// $location->address2 = e(Input::get('address2'));
|
||||
$location->city = e(Input::get('city'));
|
||||
$location->state = '';//e(Input::get('state'));
|
||||
$location->country = e(Input::get('country'));
|
||||
// $location->zip = e(Input::get('zip'));
|
||||
$location->user_id = Sentry::getId();
|
||||
|
||||
// Was the asset created?
|
||||
if($location->save()) {
|
||||
// Redirect to the new location page
|
||||
return JsonResponse::create($location);
|
||||
//return Redirect::to("admin/settings/locations")->with('success', Lang::get('admin/locations/message.create.success'));
|
||||
} else {
|
||||
return JsonResponse::create(["error" => "Couldn't save Location"],500);
|
||||
}
|
||||
} else {
|
||||
// failure
|
||||
$errors = $location->errors();
|
||||
return JsonResponse::create(["error" => "Failed validation: ".print_r($errors->all('<li>:message</li>'),true)],500);
|
||||
}
|
||||
|
||||
// Redirect to the location create page
|
||||
return Redirect::to('admin/settings/locations/create')->with('error', Lang::get('admin/locations/message.create.error'));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Location update.
|
||||
@@ -97,14 +157,15 @@ class LocationsController extends AdminController
|
||||
{
|
||||
// Check if the location exists
|
||||
if (is_null($location = Location::find($locationId))) {
|
||||
// Redirect to the blogs management page
|
||||
return Redirect::to('admin/settings/locations')->with('error', Lang::get('admin/locations/message.does_not_exist'));
|
||||
}
|
||||
|
||||
// Show the page
|
||||
//$location_options = array('' => 'Top Level') + Location::lists('name', 'id');
|
||||
$locations = Location::orderBy('name','ASC')->get();
|
||||
$location_options_array = Location::getLocationHierarchy($locations);
|
||||
$location_options = Location::flattenLocationsArray($location_options_array);
|
||||
$location_options = array('' => 'Top Level') + $location_options;
|
||||
|
||||
$location_options = array('' => 'Top Level') + DB::table('locations')->where('id', '!=', $locationId)->lists('name', 'id');
|
||||
return View::make('backend/locations/edit', compact('location'))->with('location_options',$location_options);
|
||||
}
|
||||
|
||||
@@ -128,27 +189,33 @@ class LocationsController extends AdminController
|
||||
|
||||
if ($validator->fails())
|
||||
{
|
||||
// The given data did not pass validation
|
||||
// The given data did not pass validation
|
||||
return Redirect::back()->withInput()->withErrors($validator->messages());
|
||||
}
|
||||
// attempt validation
|
||||
else {
|
||||
|
||||
// Update the location data
|
||||
$location->name = e(Input::get('name'));
|
||||
$location->name = e(Input::get('name'));
|
||||
if (Input::get('parent_id')=='') {
|
||||
$location->parent_id = null;
|
||||
} else {
|
||||
$location->parent_id = e(Input::get('parent_id',''));
|
||||
}
|
||||
$location->currency = Input::get('currency','$');
|
||||
$location->address = e(Input::get('address'));
|
||||
$location->address2 = e(Input::get('address2'));
|
||||
$location->city = e(Input::get('city'));
|
||||
$location->state = e(Input::get('state'));
|
||||
$location->country = e(Input::get('country'));
|
||||
$location->zip = e(Input::get('zip'));
|
||||
$location->country = e(Input::get('country'));
|
||||
$location->zip = e(Input::get('zip'));
|
||||
|
||||
// Was the asset created?
|
||||
if($location->save()) {
|
||||
// Redirect to the saved location page
|
||||
return Redirect::to("admin/settings/locations/")->with('success', Lang::get('admin/locations/message.update.success'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Redirect to the location management page
|
||||
return Redirect::to("admin/settings/locations/$locationId/edit")->with('error', Lang::get('admin/locations/message.update.error'));
|
||||
@@ -170,15 +237,16 @@ class LocationsController extends AdminController
|
||||
}
|
||||
|
||||
|
||||
if ($location->has_users() > 0) {
|
||||
|
||||
// Redirect to the asset management page
|
||||
if ($location->users->count() > 0) {
|
||||
return Redirect::to('admin/settings/locations')->with('error', Lang::get('admin/locations/message.assoc_users'));
|
||||
} elseif ($location->childLocations->count() > 0) {
|
||||
return Redirect::to('admin/settings/locations')->with('error', Lang::get('admin/locations/message.assoc_child_loc'));
|
||||
} elseif ($location->assets->count() > 0) {
|
||||
return Redirect::to('admin/settings/locations')->with('error', Lang::get('admin/locations/message.assoc_assets'));
|
||||
} elseif ($location->assignedassets->count() > 0) {
|
||||
return Redirect::to('admin/settings/locations')->with('error', Lang::get('admin/locations/message.assoc_assets'));
|
||||
} else {
|
||||
|
||||
$location->delete();
|
||||
|
||||
// Redirect to the locations management page
|
||||
return Redirect::to('admin/settings/locations')->with('success', Lang::get('admin/locations/message.delete.success'));
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,9 @@ use Validator;
|
||||
use View;
|
||||
use Datatable;
|
||||
|
||||
//use Symfony\Component\HttpFoundation\Response;
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
|
||||
class ModelsController extends AdminController
|
||||
{
|
||||
/**
|
||||
@@ -37,9 +40,9 @@ class ModelsController extends AdminController
|
||||
public function getCreate()
|
||||
{
|
||||
// Show the page
|
||||
$depreciation_list = array('' => 'Do Not Depreciate') + Depreciation::lists('name', 'id');
|
||||
$manufacturer_list = array('' => 'Select One') + Manufacturer::lists('name', 'id');
|
||||
$category_list = array('' => '') + DB::table('categories')->whereNull('deleted_at')->lists('name', 'id');
|
||||
$depreciation_list = depreciationList();
|
||||
$manufacturer_list = manufacturerList();
|
||||
$category_list = categoryList();
|
||||
$view = View::make('backend/models/edit');
|
||||
$view->with('category_list',$category_list);
|
||||
$view->with('depreciation_list',$depreciation_list);
|
||||
@@ -57,14 +60,40 @@ class ModelsController extends AdminController
|
||||
public function postCreate()
|
||||
{
|
||||
|
||||
// get the POST data
|
||||
$new = Input::all();
|
||||
|
||||
// Create a new manufacturer
|
||||
$model = new Model;
|
||||
|
||||
|
||||
$validator = Validator::make(
|
||||
// Validator data goes here
|
||||
array(
|
||||
'unique_fields' => array(Input::get('name'), Input::get('modelno'), Input::get('manufacturer_id'))
|
||||
),
|
||||
// Validator rules go here
|
||||
array(
|
||||
'unique_fields' => 'unique_multiple:models,name,modelno,manufacturer_id'
|
||||
)
|
||||
);
|
||||
|
||||
// attempt validation
|
||||
if ($model->validate($new)) {
|
||||
if ($validator->fails())
|
||||
{
|
||||
// The given data did not pass validation
|
||||
return Redirect::back()->withInput()->with('error', Lang::get('admin/models/message.create.duplicate_set'));;
|
||||
}
|
||||
|
||||
|
||||
|
||||
$validator = Validator::make(Input::all(), $model->validationRules());
|
||||
|
||||
// attempt validation
|
||||
if ($validator->fails())
|
||||
{
|
||||
// The given data did not pass validation
|
||||
return Redirect::back()->withInput()->withErrors($validator->messages());
|
||||
}
|
||||
// attempt validation
|
||||
else {
|
||||
|
||||
if ( e(Input::get('depreciation_id')) == '') {
|
||||
$model->depreciation_id = 0;
|
||||
@@ -72,7 +101,7 @@ class ModelsController extends AdminController
|
||||
$model->depreciation_id = e(Input::get('depreciation_id'));
|
||||
}
|
||||
|
||||
if ( e(Input::get('eol')) == '') {
|
||||
if ( e(Input::get('eol')) == '') {
|
||||
$model->eol = 0;
|
||||
} else {
|
||||
$model->eol = e(Input::get('eol'));
|
||||
@@ -103,10 +132,6 @@ class ModelsController extends AdminController
|
||||
// Redirect to the new model page
|
||||
return Redirect::to("hardware/models")->with('success', Lang::get('admin/models/message.create.success'));
|
||||
}
|
||||
} else {
|
||||
// failure
|
||||
$errors = $model->errors();
|
||||
return Redirect::back()->withInput()->withErrors($errors);
|
||||
}
|
||||
|
||||
// Redirect to the model create page
|
||||
@@ -114,6 +139,36 @@ class ModelsController extends AdminController
|
||||
|
||||
}
|
||||
|
||||
public function store()
|
||||
{
|
||||
//COPYPASTA!!!! FIXME
|
||||
$model = new Model;
|
||||
|
||||
$settings=Input::all();
|
||||
$settings['eol']=0;
|
||||
//
|
||||
|
||||
$validator = Validator::make($settings, $model->validationRules());
|
||||
if ($validator->fails())
|
||||
{
|
||||
// The given data did not pass validation
|
||||
return JsonResponse::create(["error" => "Failed validation: ".print_r($validator->messages()->all('<li>:message</li>'),true)],500);
|
||||
} else {
|
||||
$model->name=e(Input::get('name'));
|
||||
$model->manufacturer_id = e(Input::get('manufacturer_id'));
|
||||
$model->category_id = e(Input::get('category_id'));
|
||||
$model->modelno = e(Input::get('modelno'));
|
||||
$model->user_id = Sentry::getUser()->id;
|
||||
$model->eol=0;
|
||||
|
||||
if($model->save()) {
|
||||
return JsonResponse::create($model);
|
||||
} else {
|
||||
return JsonResponse::create(["error" => "Couldn't save Model"],500);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Model update.
|
||||
*
|
||||
@@ -130,7 +185,7 @@ class ModelsController extends AdminController
|
||||
|
||||
$depreciation_list = array('' => 'Do Not Depreciate') + Depreciation::lists('name', 'id');
|
||||
$manufacturer_list = array('' => 'Select One') + Manufacturer::lists('name', 'id');
|
||||
$category_list = array('' => '') + DB::table('categories')->lists('name', 'id');
|
||||
$category_list = array('' => '') + DB::table('categories')->whereNull('deleted_at')->lists('name', 'id');
|
||||
$view = View::make('backend/models/edit', compact('model'));
|
||||
$view->with('category_list',$category_list);
|
||||
$view->with('depreciation_list',$depreciation_list);
|
||||
|
||||
@@ -1,19 +1,76 @@
|
||||
<?php namespace Controllers\Admin;
|
||||
|
||||
use AdminController;
|
||||
use Input;
|
||||
use Lang;
|
||||
use License;
|
||||
use Asset;
|
||||
use User;
|
||||
use View;
|
||||
use Location;
|
||||
use Redirect;
|
||||
use Response;
|
||||
use Accessory;
|
||||
use Actionlog;
|
||||
use AdminController;
|
||||
use Asset;
|
||||
use AssetMaintenance;
|
||||
use Carbon\Carbon;
|
||||
use Category;
|
||||
use Illuminate\Support\Facades\Lang;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Response;
|
||||
use Illuminate\Support\Facades\View;
|
||||
use Input;
|
||||
use League\Csv\Reader;
|
||||
use License;
|
||||
use Location;
|
||||
use Model;
|
||||
use Redirect;
|
||||
use Setting;
|
||||
use User;
|
||||
|
||||
class ReportsController extends AdminController
|
||||
{
|
||||
|
||||
/**
|
||||
* Show Report for Accessories
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
public function getAccessoryReport()
|
||||
{
|
||||
$accessories = Accessory::orderBy('created_at', 'DESC')->get();
|
||||
return View::make('backend/reports/accessories', compact('accessories'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Export Accessories Report as CSV
|
||||
*
|
||||
* @return file download
|
||||
*/
|
||||
public function exportAccessoryReport()
|
||||
{
|
||||
$accessories = Accessory::orderBy('created_at', 'DESC')->get();
|
||||
$rows = array();
|
||||
$header = array(
|
||||
Lang::get('admin/accessories/table.title'),
|
||||
Lang::get('admin/accessories/general.accessory_category'),
|
||||
Lang::get('admin/accessories/general.total'),
|
||||
Lang::get('admin/accessories/general.remaining')
|
||||
);
|
||||
$header = array_map('trim', $header);
|
||||
$rows[] = implode($header, ', ');
|
||||
|
||||
// Row per accessory
|
||||
foreach ($accessories as $accessory) {
|
||||
$row = array();
|
||||
$row[] = $accessory->accessory_name;
|
||||
$row[] = $accessory->accessory_category;
|
||||
$row[] = $accessory->total;
|
||||
$row[] = $accessory->remaining;
|
||||
|
||||
$rows[] = implode($row, ',');
|
||||
}
|
||||
|
||||
$csv = implode($rows, "\n");
|
||||
$response = Response::make($csv, 200);
|
||||
$response->header('Content-Type', 'text/csv');
|
||||
$response->header('Content-disposition', 'attachment;filename=report.csv');
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show Asset Report
|
||||
*
|
||||
@@ -21,9 +78,14 @@ class ReportsController extends AdminController
|
||||
*/
|
||||
public function getAssetsReport()
|
||||
{
|
||||
|
||||
// Grab all the assets
|
||||
$assets = Asset::with('model','assigneduser.userLoc','assetstatus','defaultLoc','assetlog','supplier','model.manufacturer')->orderBy('created_at', 'DESC')->get();
|
||||
return View::make('backend/reports/asset', compact('assets'));
|
||||
$assets = Asset::with( 'model', 'assigneduser.userLoc', 'assetstatus', 'defaultLoc', 'assetlog', 'supplier',
|
||||
'model.manufacturer' )
|
||||
->orderBy( 'created_at', 'DESC' )
|
||||
->get();
|
||||
|
||||
return View::make( 'backend/reports/asset', compact( 'assets' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -33,41 +95,44 @@ class ReportsController extends AdminController
|
||||
*/
|
||||
public function exportAssetReport()
|
||||
{
|
||||
// Grab all the assets
|
||||
$assets = Asset::orderBy('created_at', 'DESC')->get();
|
||||
|
||||
$rows = array();
|
||||
// Grab all the assets
|
||||
$assets = Asset::orderBy( 'created_at', 'DESC' )
|
||||
->get();
|
||||
|
||||
$rows = [ ];
|
||||
|
||||
// Create the header row
|
||||
$header = array(
|
||||
Lang::get('admin/hardware/table.asset_tag'),
|
||||
Lang::get('admin/hardware/form.manufacturer'),
|
||||
Lang::get('admin/hardware/form.model'),
|
||||
Lang::get('general.model_no'),
|
||||
Lang::get('general.name'),
|
||||
Lang::get('admin/hardware/table.serial'),
|
||||
Lang::get('general.status'),
|
||||
Lang::get('admin/hardware/table.purchase_date'),
|
||||
Lang::get('admin/hardware/table.purchase_cost'),
|
||||
Lang::get('admin/hardware/form.order'),
|
||||
Lang::get('admin/hardware/form.supplier'),
|
||||
Lang::get('admin/hardware/table.checkoutto'),
|
||||
Lang::get('admin/hardware/table.location')
|
||||
);
|
||||
$header = array_map('trim', $header);
|
||||
$rows[] = implode($header, ',');
|
||||
$header = [
|
||||
Lang::get( 'admin/hardware/table.asset_tag' ),
|
||||
Lang::get( 'admin/hardware/form.manufacturer' ),
|
||||
Lang::get( 'admin/hardware/form.model' ),
|
||||
Lang::get( 'general.model_no' ),
|
||||
Lang::get( 'general.name' ),
|
||||
Lang::get( 'admin/hardware/table.serial' ),
|
||||
Lang::get( 'general.status' ),
|
||||
Lang::get( 'admin/hardware/table.purchase_date' ),
|
||||
Lang::get( 'admin/hardware/table.purchase_cost' ),
|
||||
Lang::get( 'admin/hardware/form.order' ),
|
||||
Lang::get( 'admin/hardware/form.supplier' ),
|
||||
Lang::get( 'admin/hardware/table.checkoutto' ),
|
||||
Lang::get( 'admin/hardware/table.location' ),
|
||||
Lang::get( 'general.notes' ),
|
||||
];
|
||||
$header = array_map( 'trim', $header );
|
||||
$rows[] = implode( $header, ',' );
|
||||
|
||||
// Create a row per asset
|
||||
foreach ($assets as $asset) {
|
||||
$row = array();
|
||||
$row = [ ];
|
||||
$row[] = $asset->asset_tag;
|
||||
if ($asset->model->manufacturer) {
|
||||
$row[] = $asset->model->manufacturer->name;
|
||||
} else {
|
||||
$row[] = '';
|
||||
}
|
||||
$row[] = '"'.$asset->model->name.'"';
|
||||
$row[] = '"'.$asset->model->modelno.'"';
|
||||
$row[] = '"' . $asset->model->name . '"';
|
||||
$row[] = '"' . $asset->model->modelno . '"';
|
||||
$row[] = $asset->name;
|
||||
$row[] = $asset->serial;
|
||||
if ($asset->assetstatus) {
|
||||
@@ -76,7 +141,7 @@ class ReportsController extends AdminController
|
||||
$row[] = '';
|
||||
}
|
||||
$row[] = $asset->purchase_date;
|
||||
$row[] = '"'.number_format($asset->purchase_cost).'"';
|
||||
$row[] = '"' . number_format( $asset->purchase_cost ) . '"';
|
||||
if ($asset->order_number) {
|
||||
$row[] = $asset->order_number;
|
||||
} else {
|
||||
@@ -89,21 +154,21 @@ class ReportsController extends AdminController
|
||||
}
|
||||
|
||||
if ($asset->assigned_to > 0) {
|
||||
$user = User::find($asset->assigned_to);
|
||||
$user = User::find( $asset->assigned_to );
|
||||
$row[] = $user->fullName();
|
||||
} else {
|
||||
$row[] = ''; // Empty string if unassigned
|
||||
}
|
||||
|
||||
if (($asset->assigned_to > 0) && ($asset->assigneduser->location_id > 0)) {
|
||||
$location = Location::find($asset->assigneduser->location_id);
|
||||
if (( $asset->assigned_to > 0 ) && ( $asset->assigneduser->location_id > 0 )) {
|
||||
$location = Location::find( $asset->assigneduser->location_id );
|
||||
if ($location->name) {
|
||||
$row[] = $location->name;
|
||||
} else {
|
||||
$row[] = '';
|
||||
}
|
||||
} elseif ($asset->rtd_location_id) {
|
||||
$location = Location::find($asset->rtd_location_id);
|
||||
$location = Location::find( $asset->rtd_location_id );
|
||||
if ($location->name) {
|
||||
$row[] = $location->name;
|
||||
} else {
|
||||
@@ -113,14 +178,20 @@ class ReportsController extends AdminController
|
||||
$row[] = ''; // Empty string if location is not set
|
||||
}
|
||||
|
||||
$rows[] = implode($row, ',');
|
||||
if ($asset->notes) {
|
||||
$row[] = '"' . $asset->notes . '"';
|
||||
} else {
|
||||
$row[] = '';
|
||||
}
|
||||
|
||||
$rows[] = implode( $row, ',' );
|
||||
}
|
||||
|
||||
// spit out a csv
|
||||
$csv = implode($rows, "\n");
|
||||
$response = Response::make($csv, 200);
|
||||
$response->header('Content-Type', 'text/csv');
|
||||
$response->header('Content-disposition', 'attachment;filename=report.csv');
|
||||
$csv = implode( $rows, "\n" );
|
||||
$response = Response::make( $csv, 200 );
|
||||
$response->header( 'Content-Type', 'text/csv' );
|
||||
$response->header( 'Content-disposition', 'attachment;filename=report.csv' );
|
||||
|
||||
return $response;
|
||||
}
|
||||
@@ -132,9 +203,13 @@ class ReportsController extends AdminController
|
||||
*/
|
||||
public function getDeprecationReport()
|
||||
{
|
||||
|
||||
// Grab all the assets
|
||||
$assets = Asset::with('model','assigneduser','assetstatus','defaultLoc','assetlog')->orderBy('created_at', 'DESC')->get();
|
||||
return View::make('backend/reports/depreciation', compact('assets'));
|
||||
$assets = Asset::with( 'model', 'assigneduser', 'assetstatus', 'defaultLoc', 'assetlog' )
|
||||
->orderBy( 'created_at', 'DESC' )
|
||||
->get();
|
||||
|
||||
return View::make( 'backend/reports/depreciation', compact( 'assets' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -144,45 +219,51 @@ class ReportsController extends AdminController
|
||||
*/
|
||||
public function exportDeprecationReport()
|
||||
{
|
||||
// Grab all the assets
|
||||
$assets = Asset::with('model','assigneduser','assetstatus','defaultLoc','assetlog')->orderBy('created_at', 'DESC')->get();
|
||||
|
||||
$rows = array();
|
||||
// Grab all the assets
|
||||
$assets = Asset::with( 'model', 'assigneduser', 'assetstatus', 'defaultLoc', 'assetlog' )
|
||||
->orderBy( 'created_at', 'DESC' )
|
||||
->get();
|
||||
|
||||
$csv = \League\Csv\Writer::createFromFileObject( new \SplTempFileObject() );
|
||||
$csv->setOutputBOM( Reader::BOM_UTF16_BE );
|
||||
|
||||
$rows = [ ];
|
||||
|
||||
// Create the header row
|
||||
$header = array(
|
||||
Lang::get('admin/hardware/table.asset_tag'),
|
||||
Lang::get('admin/hardware/table.title'),
|
||||
Lang::get('admin/hardware/table.serial'),
|
||||
Lang::get('admin/hardware/table.checkoutto'),
|
||||
Lang::get('admin/hardware/table.location'),
|
||||
Lang::get('admin/hardware/table.purchase_date'),
|
||||
Lang::get('admin/hardware/table.purchase_cost'),
|
||||
Lang::get('admin/hardware/table.book_value'),
|
||||
Lang::get('admin/hardware/table.diff')
|
||||
);
|
||||
$header = array_map('trim', $header);
|
||||
$rows[] = implode($header, ',');
|
||||
$header = [
|
||||
Lang::get( 'admin/hardware/table.asset_tag' ),
|
||||
Lang::get( 'admin/hardware/table.title' ),
|
||||
Lang::get( 'admin/hardware/table.serial' ),
|
||||
Lang::get( 'admin/hardware/table.checkoutto' ),
|
||||
Lang::get( 'admin/hardware/table.location' ),
|
||||
Lang::get( 'admin/hardware/table.purchase_date' ),
|
||||
Lang::get( 'admin/hardware/table.purchase_cost' ),
|
||||
Lang::get( 'admin/hardware/table.book_value' ),
|
||||
Lang::get( 'admin/hardware/table.diff' )
|
||||
];
|
||||
|
||||
//we insert the CSV header
|
||||
$csv->insertOne( $header );
|
||||
|
||||
// Create a row per asset
|
||||
foreach ($assets as $asset) {
|
||||
$row = array();
|
||||
$row = [ ];
|
||||
$row[] = $asset->asset_tag;
|
||||
$row[] = $asset->name;
|
||||
$row[] = $asset->serial;
|
||||
|
||||
|
||||
if ($asset->assigned_to > 0) {
|
||||
$user = User::find($asset->assigned_to);
|
||||
$row[] = $user->fullName();
|
||||
} else {
|
||||
$user = User::find( $asset->assigned_to );
|
||||
$row[] = $user->fullName();
|
||||
} else {
|
||||
$row[] = ''; // Empty string if unassigned
|
||||
}
|
||||
|
||||
if (($asset->assigned_to > 0) && ($asset->assigneduser->location_id > 0)) {
|
||||
$location = Location::find($asset->assigneduser->location_id);
|
||||
if (( $asset->assigned_to > 0 ) && ( $asset->assigneduser->location_id > 0 )) {
|
||||
$location = Location::find( $asset->assigneduser->location_id );
|
||||
if ($location->city) {
|
||||
$row[] = '"'.$location->city . ', ' . $location->state.'"';
|
||||
$row[] = $location->city . ', ' . $location->state;
|
||||
} elseif ($location->name) {
|
||||
$row[] = $location->name;
|
||||
} else {
|
||||
@@ -192,47 +273,45 @@ class ReportsController extends AdminController
|
||||
$row[] = ''; // Empty string if location is not set
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if ($asset->assetloc) {
|
||||
$currency = $asset->assetloc->currency;
|
||||
} else {
|
||||
$currency = Setting::first()->default_currency;
|
||||
}
|
||||
|
||||
$row[] = $asset->purchase_date;
|
||||
$row[] = '"'.Lang::get('general.currency').number_format($asset->purchase_cost).'"';
|
||||
$row[] = '"'.Lang::get('general.currency').number_format($asset->getDepreciatedValue()).'"';
|
||||
$row[] = '"-'.Lang::get('general.currency').number_format(($asset->purchase_cost - $asset->getDepreciatedValue())).'"';
|
||||
$rows[] = implode($row, ',');
|
||||
$row[] = $currency . number_format( $asset->purchase_cost );
|
||||
$row[] = $currency . number_format( $asset->getDepreciatedValue() );
|
||||
$row[] = $currency . number_format( ( $asset->purchase_cost - $asset->getDepreciatedValue() ) );
|
||||
$csv->insertOne( $row );
|
||||
}
|
||||
|
||||
// spit out a csv
|
||||
$csv = implode($rows, "\n");
|
||||
$csv->output( 'depreciation-report-' . date( 'Y-m-d' ) . '.csv' );
|
||||
die;
|
||||
|
||||
$response = Response::make($csv, 200);
|
||||
$response->header('Content-Type', 'text/csv');
|
||||
$response->header('Content-disposition', 'attachment;filename=report.csv');
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
/**
|
||||
* Show Report for Activity
|
||||
*
|
||||
* @return View
|
||||
*/
|
||||
|
||||
public function getActivityReport()
|
||||
public function getActivityReport()
|
||||
{
|
||||
$log_actions = Actionlog::orderBy('created_at', 'DESC')
|
||||
->with('adminlog')
|
||||
->with('accessorylog')
|
||||
->with('assetlog')
|
||||
->with('licenselog')
|
||||
->with('userlog')
|
||||
->orderBy('created_at','DESC')
|
||||
->get();
|
||||
return View::make('backend/reports/activity', compact('log_actions'));
|
||||
|
||||
$log_actions = Actionlog::orderBy( 'created_at', 'DESC' )
|
||||
->with( 'adminlog' )
|
||||
->with( 'accessorylog' )
|
||||
->with( 'assetlog' )
|
||||
->with( 'licenselog' )
|
||||
->with( 'userlog' )
|
||||
->orderBy( 'created_at', 'DESC' )
|
||||
->get();
|
||||
|
||||
return View::make( 'backend/reports/activity', compact( 'log_actions' ) );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Show Report for Licenses
|
||||
*
|
||||
@@ -240,8 +319,11 @@ class ReportsController extends AdminController
|
||||
*/
|
||||
public function getLicenseReport()
|
||||
{
|
||||
$licenses = License::orderBy('created_at', 'DESC')->get();
|
||||
return View::make('backend/reports/licenses', compact('licenses'));
|
||||
|
||||
$licenses = License::orderBy( 'created_at', 'DESC' )
|
||||
->get();
|
||||
|
||||
return View::make( 'backend/reports/licenses', compact( 'licenses' ) );
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -251,170 +333,161 @@ class ReportsController extends AdminController
|
||||
*/
|
||||
public function exportLicenseReport()
|
||||
{
|
||||
$licenses = License::orderBy('created_at', 'DESC')->get();
|
||||
$rows = array();
|
||||
$header = array(
|
||||
Lang::get('admin/licenses/table.title'),
|
||||
Lang::get('admin/licenses/table.serial'),
|
||||
Lang::get('admin/licenses/form.seats'),
|
||||
Lang::get('admin/licenses/form.remaining_seats'),
|
||||
Lang::get('admin/licenses/form.expiration'),
|
||||
Lang::get('admin/licenses/form.date'),
|
||||
Lang::get('admin/licenses/form.cost')
|
||||
);
|
||||
|
||||
$header = array_map('trim', $header);
|
||||
$rows[] = implode($header, ', ');
|
||||
$licenses = License::orderBy( 'created_at', 'DESC' )
|
||||
->get();
|
||||
$rows = [ ];
|
||||
$header = [
|
||||
Lang::get( 'admin/licenses/table.title' ),
|
||||
Lang::get( 'admin/licenses/table.serial' ),
|
||||
Lang::get( 'admin/licenses/form.seats' ),
|
||||
Lang::get( 'admin/licenses/form.remaining_seats' ),
|
||||
Lang::get( 'admin/licenses/form.expiration' ),
|
||||
Lang::get( 'admin/licenses/form.date' ),
|
||||
Lang::get( 'admin/licenses/form.cost' )
|
||||
];
|
||||
|
||||
$header = array_map( 'trim', $header );
|
||||
$rows[] = implode( $header, ', ' );
|
||||
|
||||
// Row per license
|
||||
foreach ($licenses as $license) {
|
||||
$row = array();
|
||||
$row = [ ];
|
||||
$row[] = $license->name;
|
||||
$row[] = $license->serial;
|
||||
$row[] = $license->seats;
|
||||
$row[] = $license->remaincount();
|
||||
$row[] = $license->expiration_date;
|
||||
$row[] = $license->purchase_date;
|
||||
$row[] = '"'.number_format($license->purchase_cost).'"';
|
||||
$row[] = '"' . number_format( $license->purchase_cost ) . '"';
|
||||
|
||||
$rows[] = implode($row, ',');
|
||||
$rows[] = implode( $row, ',' );
|
||||
}
|
||||
|
||||
$csv = implode($rows, "\n");
|
||||
$response = Response::make($csv, 200);
|
||||
$response->header('Content-Type', 'text/csv');
|
||||
$response->header('Content-disposition', 'attachment;filename=report.csv');
|
||||
$csv = implode( $rows, "\n" );
|
||||
$response = Response::make( $csv, 200 );
|
||||
$response->header( 'Content-Type', 'text/csv' );
|
||||
$response->header( 'Content-disposition', 'attachment;filename=report.csv' );
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
public function getCustomReport()
|
||||
{
|
||||
return View::make('backend/reports/custom');
|
||||
|
||||
return View::make( 'backend/reports/custom' );
|
||||
}
|
||||
|
||||
public function postCustom()
|
||||
{
|
||||
$assets = Asset::orderBy('created_at', 'DESC')->get();
|
||||
$rows = array();
|
||||
$header = array();
|
||||
|
||||
if (e(Input::get('asset_name')) == '1')
|
||||
{
|
||||
$assets = Asset::orderBy( 'created_at', 'DESC' )
|
||||
->get();
|
||||
$rows = [ ];
|
||||
$header = [ ];
|
||||
|
||||
if (e( Input::get( 'asset_name' ) ) == '1') {
|
||||
$header[] = 'Asset Name';
|
||||
}
|
||||
if (e(Input::get('asset_tag')) == '1')
|
||||
{
|
||||
if (e( Input::get( 'asset_tag' ) ) == '1') {
|
||||
$header[] = 'Asset Tag';
|
||||
}
|
||||
if (e(Input::get('manufacturer')) == '1')
|
||||
{
|
||||
if (e( Input::get( 'manufacturer' ) ) == '1') {
|
||||
$header[] = 'Manufacturer';
|
||||
}
|
||||
if (e(Input::get('model')) == '1')
|
||||
{
|
||||
if (e( Input::get( 'model' ) ) == '1') {
|
||||
$header[] = 'Model';
|
||||
$header[] = 'Model Number';
|
||||
}
|
||||
if (e(Input::get('serial')) == '1')
|
||||
{
|
||||
if (e( Input::get( 'serial' ) ) == '1') {
|
||||
$header[] = 'Serial';
|
||||
}
|
||||
if (e(Input::get('purchase_date')) == '1')
|
||||
{
|
||||
if (e( Input::get( 'purchase_date' ) ) == '1') {
|
||||
$header[] = 'Purchase Date';
|
||||
}
|
||||
if ((e(Input::get('purchase_cost')) == '1') && (e(Input::get('depreciation')) == '0'))
|
||||
{
|
||||
if (( e( Input::get( 'purchase_cost' ) ) == '1' ) && ( e( Input::get( 'depreciation' ) ) == '0' )) {
|
||||
$header[] = 'Purchase Cost';
|
||||
}
|
||||
if (e(Input::get('order')) == '1')
|
||||
{
|
||||
if (e( Input::get( 'order' ) ) == '1') {
|
||||
$header[] = 'Order Number';
|
||||
}
|
||||
if (e(Input::get('supplier')) == '1')
|
||||
{
|
||||
if (e( Input::get( 'supplier' ) ) == '1') {
|
||||
$header[] = 'Supplier';
|
||||
}
|
||||
if (e(Input::get('location')) == '1')
|
||||
{
|
||||
if (e( Input::get( 'location' ) ) == '1') {
|
||||
$header[] = 'Location';
|
||||
}
|
||||
if (e(Input::get('assigned_to')) == '1')
|
||||
{
|
||||
if (e( Input::get( 'assigned_to' ) ) == '1') {
|
||||
$header[] = 'Assigned To';
|
||||
}
|
||||
if (e(Input::get('status')) == '1')
|
||||
{
|
||||
if (e( Input::get( 'status' ) ) == '1') {
|
||||
$header[] = 'Status';
|
||||
}
|
||||
if (e(Input::get('warranty')) == '1')
|
||||
{
|
||||
if (e( Input::get( 'warranty' ) ) == '1') {
|
||||
$header[] = 'Warranty';
|
||||
$header[] = 'Warranty Expires';
|
||||
}
|
||||
if (e(Input::get('depreciation')) == '1')
|
||||
{
|
||||
if (e( Input::get( 'depreciation' ) ) == '1') {
|
||||
$header[] = 'Purchase Cost';
|
||||
$header[] = 'Value';
|
||||
$header[] = 'Diff';
|
||||
}
|
||||
|
||||
$header = array_map('trim', $header);
|
||||
$rows[] = implode($header, ',');
|
||||
$header = array_map( 'trim', $header );
|
||||
$rows[] = implode( $header, ',' );
|
||||
|
||||
foreach($assets as $asset) {
|
||||
$row = array();
|
||||
if (e(Input::get('asset_name')) == '1') {
|
||||
foreach ($assets as $asset) {
|
||||
$row = [ ];
|
||||
if (e( Input::get( 'asset_name' ) ) == '1') {
|
||||
$row[] = $asset->name;
|
||||
}
|
||||
if (e(Input::get('asset_tag')) == '1') {
|
||||
if (e( Input::get( 'asset_tag' ) ) == '1') {
|
||||
$row[] = $asset->asset_tag;
|
||||
}
|
||||
if (e(Input::get('manufacturer')) == '1') {
|
||||
if (e( Input::get( 'manufacturer' ) ) == '1') {
|
||||
if ($asset->model->manufacturer) {
|
||||
$row[] = $asset->model->manufacturer->name;
|
||||
} else {
|
||||
$row[] = '';
|
||||
}
|
||||
}
|
||||
if (e(Input::get('model')) == '1') {
|
||||
$row[] = '"'.$asset->model->name.'"';
|
||||
$row[] = '"'.$asset->model->modelno.'"';
|
||||
if (e( Input::get( 'model' ) ) == '1') {
|
||||
$row[] = '"' . $asset->model->name . '"';
|
||||
$row[] = '"' . $asset->model->modelno . '"';
|
||||
}
|
||||
if (e(Input::get('serial')) == '1') {
|
||||
if (e( Input::get( 'serial' ) ) == '1') {
|
||||
$row[] = $asset->serial;
|
||||
}
|
||||
if (e(Input::get('purchase_date')) == '1') {
|
||||
if (e( Input::get( 'purchase_date' ) ) == '1') {
|
||||
$row[] = $asset->purchase_date;
|
||||
}
|
||||
if (e(Input::get('purchase_cost')) == '1') {
|
||||
$row[] = '"'.number_format($asset->purchase_cost).'"';
|
||||
if (e( Input::get( 'purchase_cost' ) ) == '1') {
|
||||
$row[] = '"' . number_format( $asset->purchase_cost ) . '"';
|
||||
}
|
||||
if (e(Input::get('order')) == '1') {
|
||||
if (e( Input::get( 'order' ) ) == '1') {
|
||||
if ($asset->order_number) {
|
||||
$row[] = $asset->order_number;
|
||||
} else {
|
||||
$row[] = '';
|
||||
}
|
||||
}
|
||||
if (e(Input::get('supplier')) == '1') {
|
||||
if (e( Input::get( 'supplier' ) ) == '1') {
|
||||
if ($asset->supplier_id) {
|
||||
$row[] = $asset->supplier->name;
|
||||
} else {
|
||||
$row[] = '';
|
||||
}
|
||||
}
|
||||
if (e(Input::get('location')) == '1') {
|
||||
if (($asset->assigned_to > 0) && ($asset->assigneduser->location_id > 0)) {
|
||||
$location = Location::find($asset->assigneduser->location_id);
|
||||
if (e( Input::get( 'location' ) ) == '1') {
|
||||
if (( $asset->assigned_to > 0 ) && ( $asset->assigneduser->location_id > 0 )) {
|
||||
$location = Location::find( $asset->assigneduser->location_id );
|
||||
if ($location->name) {
|
||||
$row[] = $location->name;
|
||||
} else {
|
||||
$row[] = '';
|
||||
}
|
||||
} elseif ($asset->rtd_location_id) {
|
||||
$location = Location::find($asset->rtd_location_id);
|
||||
$location = Location::find( $asset->rtd_location_id );
|
||||
if ($location->name) {
|
||||
$row[] = $location->name;
|
||||
} else {
|
||||
@@ -424,26 +497,26 @@ class ReportsController extends AdminController
|
||||
$row[] = ''; // Empty string if location is not set
|
||||
}
|
||||
}
|
||||
if (e(Input::get('assigned_to')) == '1') {
|
||||
if (e( Input::get( 'assigned_to' ) ) == '1') {
|
||||
if ($asset->assigned_to > 0) {
|
||||
$user = User::find($asset->assigned_to);
|
||||
$user = User::find( $asset->assigned_to );
|
||||
$row[] = $user->fullName();
|
||||
} else {
|
||||
$row[] = ''; // Empty string if unassigned
|
||||
}
|
||||
}
|
||||
if (e(Input::get('status')) == '1') {
|
||||
if (($asset->status_id == '0') && ($asset->assigned_to == '0')) {
|
||||
$row[] = Lang::get('general.ready_to_deploy');
|
||||
} elseif (($asset->status_id == '') && ($asset->assigned_to == '0')) {
|
||||
$row[] = Lang::get('general.pending');
|
||||
if (e( Input::get( 'status' ) ) == '1') {
|
||||
if (( $asset->status_id == '0' ) && ( $asset->assigned_to == '0' )) {
|
||||
$row[] = Lang::get( 'general.ready_to_deploy' );
|
||||
} elseif (( $asset->status_id == '' ) && ( $asset->assigned_to == '0' )) {
|
||||
$row[] = Lang::get( 'general.pending' );
|
||||
} elseif ($asset->assetstatus) {
|
||||
$row[] = $asset->assetstatus->name;
|
||||
} else {
|
||||
$row[] = '';
|
||||
}
|
||||
}
|
||||
if (e(Input::get('warranty')) == '1') {
|
||||
if (e( Input::get( 'warranty' ) ) == '1') {
|
||||
if ($asset->warranty_months) {
|
||||
$row[] = $asset->warranty_months;
|
||||
$row[] = $asset->warrantee_expires();
|
||||
@@ -452,24 +525,249 @@ class ReportsController extends AdminController
|
||||
$row[] = '';
|
||||
}
|
||||
}
|
||||
if (e(Input::get('depreciation')) == '1') {
|
||||
if (e( Input::get( 'depreciation' ) ) == '1') {
|
||||
$depreciation = $asset->getDepreciatedValue();
|
||||
$row[] = '"'.number_format($asset->purchase_cost).'"';
|
||||
$row[] = '"'.number_format($depreciation).'"';
|
||||
$row[] = '"'.number_format($asset->purchase_cost - $depreciation).'"';
|
||||
$row[] = '"' . number_format( $asset->purchase_cost ) . '"';
|
||||
$row[] = '"' . number_format( $depreciation ) . '"';
|
||||
$row[] = '"' . number_format( $asset->purchase_cost - $depreciation ) . '"';
|
||||
}
|
||||
$rows[] = implode($row, ',');
|
||||
$rows[] = implode( $row, ',' );
|
||||
}
|
||||
|
||||
// spit out a csv
|
||||
if (array_filter($rows)) {
|
||||
$csv = implode($rows, "\n");
|
||||
$response = Response::make($csv, 200);
|
||||
$response->header('Content-Type', 'text/csv');
|
||||
$response->header('Content-disposition', 'attachment;filename=report.csv');
|
||||
if (array_filter( $rows )) {
|
||||
$csv = implode( $rows, "\n" );
|
||||
$response = Response::make( $csv, 200 );
|
||||
$response->header( 'Content-Type', 'text/csv' );
|
||||
$response->header( 'Content-disposition', 'attachment;filename=report.csv' );
|
||||
|
||||
return $response;
|
||||
} else {
|
||||
return Redirect::to("reports/custom")->with('error', Lang::get('admin/reports/message.error'));
|
||||
return Redirect::to( "reports/custom" )
|
||||
->with( 'error', Lang::get( 'admin/reports/message.error' ) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* getImprovementsReport
|
||||
*
|
||||
* @return mixed
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
public function getAssetMaintenancesReport()
|
||||
{
|
||||
|
||||
// Grab all the improvements
|
||||
$assetMaintenances = \AssetMaintenance::with( 'asset', 'supplier' )
|
||||
->orderBy( 'created_at', 'DESC' )
|
||||
->get();
|
||||
|
||||
return View::make( 'backend/reports/asset_maintenances', compact( 'assetMaintenances' ) );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* exportImprovementsReport
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
public function exportAssetMaintenancesReport()
|
||||
{
|
||||
|
||||
// Grab all the improvements
|
||||
$assetMaintenances = AssetMaintenance::with( 'asset', 'supplier' )
|
||||
->orderBy( 'created_at', 'DESC' )
|
||||
->get();
|
||||
|
||||
$rows = [ ];
|
||||
|
||||
$header = [
|
||||
Lang::get( 'admin/asset_maintenances/table.asset_name' ),
|
||||
Lang::get( 'admin/asset_maintenances/table.supplier_name' ),
|
||||
Lang::get( 'admin/asset_maintenances/form.asset_maintenance_type' ),
|
||||
Lang::get( 'admin/asset_maintenances/form.title' ),
|
||||
Lang::get( 'admin/asset_maintenances/form.start_date' ),
|
||||
Lang::get( 'admin/asset_maintenances/form.completion_date' ),
|
||||
Lang::get( 'admin/asset_maintenances/form.asset_maintenance_time' ),
|
||||
Lang::get( 'admin/asset_maintenances/form.cost' )
|
||||
];
|
||||
|
||||
$header = array_map( 'trim', $header );
|
||||
$rows[] = implode( $header, ',' );
|
||||
|
||||
foreach ($assetMaintenances as $assetMaintenance) {
|
||||
$row = [ ];
|
||||
$row[] = str_replace( ',', '', $assetMaintenance->asset->name );
|
||||
$row[] = str_replace( ',', '', $assetMaintenance->supplier->name );
|
||||
$row[] = $assetMaintenance->improvement_type;
|
||||
$row[] = $assetMaintenance->title;
|
||||
$row[] = $assetMaintenance->start_date;
|
||||
$row[] = $assetMaintenance->completion_date;
|
||||
if (is_null( $assetMaintenance->asset_maintenance_time )) {
|
||||
$improvementTime = intval( Carbon::now()
|
||||
->diffInDays( Carbon::parse( $assetMaintenance->start_date ) ) );
|
||||
} else {
|
||||
$improvementTime = intval( $assetMaintenance->asset_maintenance_time );
|
||||
}
|
||||
$row[] = $improvementTime;
|
||||
$row[] = Lang::get( 'general.currency' ) . number_format( $assetMaintenance->cost, 2 );
|
||||
$rows[] = implode( $row, ',' );
|
||||
}
|
||||
|
||||
// spit out a csv
|
||||
$csv = implode( $rows, "\n" );
|
||||
$response = Response::make( $csv, 200 );
|
||||
$response->header( 'Content-Type', 'text/csv' );
|
||||
$response->header( 'Content-disposition', 'attachment;filename=report.csv' );
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* getAssetAcceptanceReport
|
||||
*
|
||||
* @return mixed
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
public function getAssetAcceptanceReport()
|
||||
{
|
||||
|
||||
$assetsForReport = Asset::notYetAccepted()
|
||||
->get();
|
||||
|
||||
return View::make( 'backend/reports/unaccepted_assets', compact( 'assetsForReport' ) );
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* exportAssetAcceptanceReport
|
||||
*
|
||||
* @return \Illuminate\Http\Response
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
public function exportAssetAcceptanceReport()
|
||||
{
|
||||
|
||||
// Grab all the improvements
|
||||
$assetsForReport = Actionlog::whereIn( 'id', $this->getAssetsNotAcceptedYet() )
|
||||
->get();
|
||||
|
||||
$rows = [ ];
|
||||
|
||||
$header = [
|
||||
Lang::get( 'general.category' ),
|
||||
Lang::get( 'admin/hardware/form.model' ),
|
||||
Lang::get( 'admin/hardware/form.name' ),
|
||||
Lang::get( 'admin/hardware/table.asset_tag' ),
|
||||
Lang::get( 'admin/hardware/table.checkoutto' ),
|
||||
];
|
||||
|
||||
$header = array_map( 'trim', $header );
|
||||
$rows[] = implode( $header, ',' );
|
||||
|
||||
foreach ($assetsForReport as $assetItem) {
|
||||
$row = [ ];
|
||||
$row[] = str_replace( ',', '', $assetItem->assetlog->model->category->name );
|
||||
$row[] = str_replace( ',', '', $assetItem->assetlog->model->name );
|
||||
$row[] = str_replace( ',', '', $assetItem->assetlog->showAssetName() );
|
||||
$row[] = str_replace( ',', '', $assetItem->assetlog->asset_tag );
|
||||
$row[] = str_replace( ',', '', $assetItem->assetlog->assigneduser->fullName() );
|
||||
$rows[] = implode( $row, ',' );
|
||||
}
|
||||
|
||||
// spit out a csv
|
||||
$csv = implode( $rows, "\n" );
|
||||
$response = Response::make( $csv, 200 );
|
||||
$response->header( 'Content-Type', 'text/csv' );
|
||||
$response->header( 'Content-disposition', 'attachment;filename=report.csv' );
|
||||
|
||||
return $response;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* getCheckedOutAssetsRequiringAcceptance
|
||||
*
|
||||
* @param $modelsInCategoriesThatRequireAcceptance
|
||||
*
|
||||
* @return array
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
protected function getCheckedOutAssetsRequiringAcceptance( $modelsInCategoriesThatRequireAcceptance )
|
||||
{
|
||||
|
||||
return array_pluck( Asset::deployed()
|
||||
->inModelList( $modelsInCategoriesThatRequireAcceptance )
|
||||
->select( 'id' )
|
||||
->get()
|
||||
->toArray(), 'id' );
|
||||
}
|
||||
|
||||
/**
|
||||
* getModelsInCategoriesThatRequireAcceptance
|
||||
*
|
||||
* @param $assetCategoriesRequiringAcceptance
|
||||
*
|
||||
* @return array
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
protected function getModelsInCategoriesThatRequireAcceptance( $assetCategoriesRequiringAcceptance )
|
||||
{
|
||||
|
||||
return array_pluck( Model::inCategory( $assetCategoriesRequiringAcceptance )
|
||||
->select( 'id' )
|
||||
->get()
|
||||
->toArray(), 'id' );
|
||||
}
|
||||
|
||||
/**
|
||||
* getCategoriesThatRequireAcceptance
|
||||
*
|
||||
* @return array
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
protected function getCategoriesThatRequireAcceptance()
|
||||
{
|
||||
|
||||
return array_pluck( Category::requiresAcceptance()
|
||||
->select( 'id' )
|
||||
->get()
|
||||
->toArray(), 'id' );
|
||||
}
|
||||
|
||||
/**
|
||||
* getAssetsCheckedOutRequiringAcceptance
|
||||
*
|
||||
* @return array
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
protected function getAssetsCheckedOutRequiringAcceptance()
|
||||
{
|
||||
|
||||
return $this->getCheckedOutAssetsRequiringAcceptance(
|
||||
$this->getModelsInCategoriesThatRequireAcceptance( $this->getCategoriesThatRequireAcceptance() )
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* getAssetsNotAcceptedYet
|
||||
*
|
||||
* @return array
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
protected function getAssetsNotAcceptedYet()
|
||||
{
|
||||
|
||||
return Asset::unaccepted();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,8 @@ use Validator;
|
||||
use View;
|
||||
use Image;
|
||||
use Config;
|
||||
use Response;
|
||||
use Artisan;
|
||||
|
||||
class SettingsController extends AdminController
|
||||
{
|
||||
@@ -69,8 +71,10 @@ class SettingsController extends AdminController
|
||||
"per_page" => 'required|min:1|numeric',
|
||||
"qr_text" => 'min:1|max:31',
|
||||
"logo" => 'mimes:jpeg,bmp,png,gif',
|
||||
"custom_css" => 'alpha_space',
|
||||
"alert_email" => 'email',
|
||||
"slack_endpoint" => 'url',
|
||||
"default_currency" => 'required',
|
||||
"slack_channel" => 'regex:/(?<!\w)#\w+/',
|
||||
"slack_botname" => 'alpha_dash',
|
||||
);
|
||||
@@ -111,12 +115,14 @@ class SettingsController extends AdminController
|
||||
|
||||
if (Config::get('app.lock_passwords')==false) {
|
||||
$setting->site_name = e(Input::get('site_name'));
|
||||
$setting->custom_css = e(Input::get('custom_css'));
|
||||
}
|
||||
|
||||
$setting->per_page = e(Input::get('per_page'));
|
||||
$setting->qr_code = e(Input::get('qr_code', '0'));
|
||||
$setting->barcode_type = e(Input::get('barcode_type'));
|
||||
$setting->load_remote = e(Input::get('load_remote', '0'));
|
||||
$setting->default_currency = Input::get('default_currency', '$');
|
||||
$setting->qr_text = e(Input::get('qr_text'));
|
||||
$setting->auto_increment_prefix = e(Input::get('auto_increment_prefix'));
|
||||
$setting->auto_increment_assets = e(Input::get('auto_increment_assets', '0'));
|
||||
@@ -141,6 +147,110 @@ class SettingsController extends AdminController
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generate the backup page
|
||||
*
|
||||
* @return View
|
||||
**/
|
||||
|
||||
public function getBackups()
|
||||
{
|
||||
$path = Config::get('backup::path');
|
||||
$files = array();
|
||||
|
||||
if ($handle = opendir($path)) {
|
||||
|
||||
/* This is the correct way to loop over the directory. */
|
||||
while (false !== ($entry = readdir($handle))) {
|
||||
clearstatcache();
|
||||
if (substr(strrchr($entry,'.'),1)=='zip') {
|
||||
$files[] = array(
|
||||
'filename' => $entry,
|
||||
'filesize' => Setting::fileSizeConvert(filesize(Config::get('backup::path').$entry)),
|
||||
'modified' => filemtime(Config::get('backup::path').$entry)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
closedir($handle);
|
||||
$files = array_reverse($files);
|
||||
}
|
||||
|
||||
|
||||
return View::make('backend/settings/backups', compact('path','files'));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Generate the backup page
|
||||
*
|
||||
* @return View
|
||||
**/
|
||||
|
||||
public function postBackups()
|
||||
{
|
||||
if (!Config::get('app.lock_passwords')) {
|
||||
Artisan::call('snipe:backup');
|
||||
return Redirect::to("admin/settings/backups")->with('success', Lang::get('admin/settings/message.backup.generated'));
|
||||
} else {
|
||||
Artisan::call('snipe:backup');
|
||||
return Redirect::to("admin/settings/backups")->with('error', Lang::get('general.feature_disabled'));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Download the dump file
|
||||
*
|
||||
* @param int $assetId
|
||||
* @return View
|
||||
**/
|
||||
public function downloadFile($filename = null)
|
||||
{
|
||||
if (!Config::get('app.lock_passwords')) {
|
||||
$file = Config::get('backup::path').'/'.$filename;
|
||||
if (file_exists($file)) {
|
||||
return Response::download($file);
|
||||
} else {
|
||||
|
||||
// Redirect to the backup page
|
||||
return Redirect::route('settings/backups')->with('error', Lang::get('admin/settings/message.backup.file_not_found'));
|
||||
}
|
||||
} else {
|
||||
// Redirect to the backup page
|
||||
return Redirect::route('settings/backups')->with('error', Lang::get('general.feature_disabled'));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Download the dump file
|
||||
*
|
||||
* @param int $assetId
|
||||
* @return View
|
||||
**/
|
||||
public function deleteFile($filename = null)
|
||||
{
|
||||
|
||||
if (!Config::get('app.lock_passwords')) {
|
||||
|
||||
$file = Config::get('backup::path').'/'.$filename;
|
||||
if (file_exists($file)) {
|
||||
unlink($file);
|
||||
return Redirect::route('settings/backups')->with('success', Lang::get('admin/settings/message.backup.file_deleted'));
|
||||
} else {
|
||||
return Redirect::route('settings/backups')->with('error', Lang::get('admin/settings/message.backup.file_not_found'));
|
||||
}
|
||||
} else {
|
||||
return Redirect::route('settings/backups')->with('error', Lang::get('general.feature_disabled'));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -12,6 +12,8 @@ use Str;
|
||||
use Validator;
|
||||
use View;
|
||||
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
|
||||
class StatuslabelsController extends AdminController
|
||||
{
|
||||
/**
|
||||
@@ -40,8 +42,7 @@ class StatuslabelsController extends AdminController
|
||||
// Show the page
|
||||
$statuslabel = new Statuslabel;
|
||||
$use_statuslabel_type = $statuslabel->getStatuslabelType();
|
||||
|
||||
$statuslabel_types = array('' => Lang::get('admin/hardware/form.select_statustype')) + array('undeployable' => Lang::get('admin/hardware/general.undeployable')) + array('pending' => Lang::get('admin/hardware/general.pending')) + array('archived' => Lang::get('admin/hardware/general.archived')) + array('deployable' => Lang::get('admin/hardware/general.deployable'));
|
||||
$statuslabel_types = statusTypeList();
|
||||
|
||||
return View::make('backend/statuslabels/edit', compact('statuslabel_types','statuslabel'))->with('use_statuslabel_type',$use_statuslabel_type);
|
||||
}
|
||||
@@ -90,6 +91,44 @@ class StatuslabelsController extends AdminController
|
||||
|
||||
}
|
||||
|
||||
public function store()
|
||||
{
|
||||
// get the POST data
|
||||
$new = Input::all();
|
||||
|
||||
$new['statuslabel_types']="deployable";
|
||||
|
||||
// create a new model instance
|
||||
$statuslabel = new Statuslabel();
|
||||
$statustype = Statuslabel::getStatuslabelTypesForDB(Input::get('statuslabel_types'));
|
||||
|
||||
// attempt validation
|
||||
if ($statuslabel->validate($new)) {
|
||||
|
||||
//$statustype = Statuslabel::getStatuslabelTypesForDB(Input::get('statuslabel_types'));
|
||||
|
||||
// Save the Statuslabel data
|
||||
$statuslabel->name = e(Input::get('name'));
|
||||
$statuslabel->user_id = Sentry::getId();
|
||||
$statuslabel->notes = '';
|
||||
$statuslabel->deployable = $statustype['deployable'];
|
||||
$statuslabel->pending = $statustype['pending'];
|
||||
$statuslabel->archived = $statustype['archived'];
|
||||
|
||||
// Was the asset created?
|
||||
if($statuslabel->save()) {
|
||||
// Redirect to the new Statuslabel page
|
||||
return JsonResponse::create($statuslabel);
|
||||
} else {
|
||||
return JsonResponse::create(["error" => "Couldn't save Statuslabel"],500);
|
||||
}
|
||||
} else {
|
||||
// failure
|
||||
$errors = $statuslabel->errors();
|
||||
return JsonResponse::create(["error" => "Failed validation: ".print_r($errors->all('<li>:message</li>'),true)],500);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Statuslabel update.
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
use AdminController;
|
||||
use Image;
|
||||
use AssetMaintenance;
|
||||
use Input;
|
||||
use Lang;
|
||||
use Supplier;
|
||||
@@ -12,6 +13,9 @@ use Str;
|
||||
use Validator;
|
||||
use View;
|
||||
|
||||
use Symfony\Component\HttpFoundation\JsonResponse;
|
||||
|
||||
|
||||
class SuppliersController extends AdminController
|
||||
{
|
||||
/**
|
||||
@@ -99,6 +103,26 @@ class SuppliersController extends AdminController
|
||||
return Redirect::to('admin/settings/suppliers/create')->with('error', Lang::get('admin/suppliers/message.create.error'));
|
||||
|
||||
}
|
||||
|
||||
public function store()
|
||||
{
|
||||
$supplier=new Supplier;
|
||||
$new=Input::all();
|
||||
$validator = Validator::make($new, $supplier->validationRules());
|
||||
if($validator->fails()) {
|
||||
return JsonResponse::create(["error" => "Failed validation: ".print_r($validator->messages()->all('<li>:message</li>'),true)],500);
|
||||
} else {
|
||||
//$supplier->fill($new);
|
||||
$supplier->name=$new['name'];
|
||||
$supplier->user_id = Sentry::getId();
|
||||
|
||||
if($supplier->save()) {
|
||||
return JsonResponse::create($supplier);
|
||||
} else {
|
||||
return JsonResponse::create(["error" => "Couldn't save Supplier"]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Supplier update.
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -17,13 +17,13 @@ class AddAccessoriesTable extends Migration {
|
||||
$table->increments('id');
|
||||
$table->string('name')->nullable()->default(NULL);
|
||||
$table->integer('category_id')->nullable()->default(NULL);
|
||||
$table->integer('user_id')->nullable()->default(NULL);
|
||||
$table->integer('qty')->default(0);
|
||||
$table->boolean('requestable')->default(0);
|
||||
$table->integer('user_id')->nullable()->default(NULL);
|
||||
$table->integer('qty')->default(0);
|
||||
$table->boolean('requestable')->default(0);
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
});
|
||||
|
||||
|
||||
Schema::table('asset_logs', function ($table) {
|
||||
$table->integer('accessory_id')->nullable()->default(NULL);
|
||||
});
|
||||
@@ -39,7 +39,7 @@ class AddAccessoriesTable extends Migration {
|
||||
{
|
||||
//
|
||||
Schema::drop('accessories');
|
||||
|
||||
|
||||
Schema::table('asset_logs', function ($table) {
|
||||
$table->dropColumn('accessory_id');
|
||||
});
|
||||
|
||||
@@ -13,18 +13,18 @@ class UpdateAcceptedAtToAcceptanceId extends Migration {
|
||||
public function up()
|
||||
{
|
||||
//
|
||||
|
||||
|
||||
Schema::table('asset_logs', function ($table) {
|
||||
$table->integer('accepted_id')->nullable()->default(NULL);
|
||||
});
|
||||
|
||||
|
||||
$results = DB::select('select invitation.id AS invitation_id, acceptance.id AS acceptance_id FROM asset_logs invitation INNER JOIN asset_logs acceptance ON (invitation.checkedout_to=acceptance.checkedout_to AND invitation.asset_id=acceptance.asset_id) WHERE invitation.action_type="checkout" AND acceptance.action_type="accepted"');
|
||||
|
||||
|
||||
|
||||
|
||||
foreach ($results as $result) {
|
||||
$update = DB::update('update asset_logs set accepted_id=? where id=?', [$result->acceptance_id, $result->invitation_id]);
|
||||
$update = DB::update('update asset_logs set accepted_id=? where id=?', [$result->acceptance_id, $result->invitation_id]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -38,7 +38,7 @@ class UpdateAcceptedAtToAcceptanceId extends Migration {
|
||||
Schema::table('asset_logs', function ($table) {
|
||||
$table->dropColumn('accepted_id');
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddParentIdToLocationsTable extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('locations', function(Blueprint $table)
|
||||
{
|
||||
//
|
||||
$table->integer('parent_id')->nullable()->default(NULL);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('locations', function(Blueprint $table)
|
||||
{
|
||||
//
|
||||
$table->dropColumn('parent_id');
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,29 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class FixDefaultForUserNotes extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
DB::statement('ALTER TABLE `'.DB::getTablePrefix().'users` MODIFY `notes` varchar(255) DEFAULT NULL;');
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
DB::statement('ALTER TABLE `'.DB::getTablePrefix().'users` MODIFY `notes` varchar(255);');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class CreateConsumables extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
//
|
||||
Schema::create('consumables', function ($table) {
|
||||
$table->increments('id');
|
||||
$table->string('name')->nullable()->default(NULL);
|
||||
$table->integer('category_id')->nullable()->default(NULL);
|
||||
$table->integer('location_id')->nullable()->default(NULL);
|
||||
$table->integer('user_id')->nullable()->default(NULL);
|
||||
$table->integer('qty')->default(0);
|
||||
$table->boolean('requestable')->default(0);
|
||||
$table->timestamps();
|
||||
$table->softDeletes();
|
||||
});
|
||||
|
||||
Schema::table('asset_logs', function ($table) {
|
||||
$table->integer('consumable_id')->nullable()->default(NULL);
|
||||
});
|
||||
|
||||
Schema::create('consumables_users', function ($table) {
|
||||
$table->increments('id');
|
||||
$table->integer('user_id')->nullable()->default(NULL);
|
||||
$table->integer('consumable_id')->nullable()->default(NULL);
|
||||
$table->integer('assigned_to')->nullable()->default(NULL);
|
||||
$table->timestamps();
|
||||
});
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
Schema::drop('consumables');
|
||||
|
||||
Schema::table('asset_logs', function ($table) {
|
||||
$table->dropColumn('consumable_id');
|
||||
});
|
||||
|
||||
Schema::drop('consumables_users');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class MoveEmailToUsername extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
//
|
||||
DB::update('UPDATE `'.DB::getTablePrefix().'users` SET `username`=`email`');
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
//DB::statement('ALTER TABLE `users` MODIFY `notes` varchar(255);');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class MakeEmailNullable extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
|
||||
DB::statement('ALTER TABLE `'.DB::getTablePrefix().'users` MODIFY `email` varchar(255) DEFAULT NULL;');
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
DB::statement('ALTER TABLE `'.DB::getTablePrefix().'users` MODIFY `email` varchar(255) NOT NULL;');
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Lang;
|
||||
|
||||
class CreateAssetMaintenancesTable extends Migration
|
||||
{
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
|
||||
Schema::create( 'asset_maintenances', function ( Blueprint $table ) {
|
||||
|
||||
$table->increments( 'id' );
|
||||
$table->integer( 'asset_id' )
|
||||
->unsigned();
|
||||
$table->integer( 'supplier_id' )
|
||||
->unsigned();
|
||||
$table->enum( 'asset_maintenance_type', $this->getEnumFields() );
|
||||
$table->string( 'title', 100 );
|
||||
$table->boolean( 'is_warranty' );
|
||||
$table->date( 'start_date' );
|
||||
$table->date( 'completion_date' )
|
||||
->nullable();
|
||||
$table->integer( 'asset_maintenance_time' )
|
||||
->nullable();
|
||||
$table->longText( 'notes' )
|
||||
->nullable();
|
||||
$table->decimal( 'cost', 10, 2 )
|
||||
->nullable();
|
||||
$table->dateTime( 'deleted_at' )
|
||||
->nullable();
|
||||
$table->timestamps();
|
||||
} );
|
||||
}
|
||||
|
||||
protected function getEnumFields()
|
||||
{
|
||||
|
||||
return [
|
||||
Lang::get( 'admin/asset_maintenances/general.maintenance' ),
|
||||
Lang::get( 'admin/asset_maintenances/general.repair' ),
|
||||
Lang::get( 'admin/asset_maintenances/general.upgrade' )
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
|
||||
Schema::dropIfExists( 'asset_maintenances' );
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddCurrencyToSettingsAndLocations extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
|
||||
Schema::table('settings', function(Blueprint $table)
|
||||
{
|
||||
$table->string('default_currency',10)->nullable()->default(NULL);
|
||||
});
|
||||
|
||||
DB::update('UPDATE `'.DB::getTablePrefix().'settings` SET `default_currency`="'. Lang::get('general.currency').'"');
|
||||
|
||||
Schema::table('locations', function(Blueprint $table)
|
||||
{
|
||||
$table->string('currency',10)->nullable()->default(NULL);
|
||||
});
|
||||
|
||||
DB::update('UPDATE `'.DB::getTablePrefix().'locations` SET `currency`="'. Lang::get('general.currency').'"');
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
Schema::table('settings', function(Blueprint $table)
|
||||
{
|
||||
//
|
||||
$table->dropColumn('default_currency');
|
||||
});
|
||||
|
||||
Schema::table('locations', function(Blueprint $table)
|
||||
{
|
||||
//
|
||||
$table->dropColumn('currency');
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddExpectedCheckinDateToAssetLogs extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
|
||||
Schema::table('asset_logs', function ($table) {
|
||||
$table->date('expected_checkin')->nullable()->default(NULL);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
|
||||
Schema::table('asset_logs', function(Blueprint $table)
|
||||
{
|
||||
$table->dropColumn('expected_checkin');
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddCheckinEmailToCategoryTable extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('categories', function ($table) {
|
||||
$table->boolean('checkin_email')->default(0);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('categories', function ($table) {
|
||||
$table->dropColumn('checkin_email');
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class RemoveEmailUniqueConstraint extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('users', function(Blueprint $table)
|
||||
{
|
||||
$table->dropUnique('users_email_unique');
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,214 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddThreadIdToAssetLogsTable extends Migration
|
||||
{
|
||||
|
||||
/**
|
||||
* currentAssetId
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $currentAssetId = null;
|
||||
|
||||
/**
|
||||
* currentAssetLogId
|
||||
*
|
||||
* @var int
|
||||
*/
|
||||
protected $currentAssetLogId = null;
|
||||
|
||||
/**
|
||||
* assetLogs
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $assetLogs = null;
|
||||
|
||||
/**
|
||||
* startOfCurrentThread
|
||||
*
|
||||
* @var bool
|
||||
*/
|
||||
protected $startOfCurrentThread = true;
|
||||
|
||||
/**
|
||||
* threadStartingActionTypes
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $threadStartingActionTypes = [ 'checkout', 'requested' ];
|
||||
|
||||
/**
|
||||
* threadFinalActionTypes
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
protected $threadFinalActionTypes = [ 'checkin from' ];
|
||||
|
||||
/**
|
||||
* actionlog
|
||||
*
|
||||
* @var \Actionlog
|
||||
*/
|
||||
private $actionlog;
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
|
||||
if (!Schema::hasColumn('asset_logs', 'thread_id')) {
|
||||
|
||||
Schema::table( 'asset_logs', function ( Blueprint $table ) {
|
||||
|
||||
$table->integer( 'thread_id' )
|
||||
->nullable()
|
||||
->default( null );
|
||||
$table->index( 'thread_id' );
|
||||
} );
|
||||
}
|
||||
|
||||
$this->actionlog = new Actionlog();
|
||||
$this->assetLogs = $this->actionlog->getListingOfActionLogsChronologicalOrder();
|
||||
|
||||
foreach ($this->assetLogs as $assetLog) {
|
||||
|
||||
if ($this->hasAssetChanged( $assetLog )) {
|
||||
$this->resetCurrentAssetInformation( $assetLog );
|
||||
}
|
||||
|
||||
if ($this->hasBegunNewChain( $assetLog )) {
|
||||
$this->startOfCurrentThread = false;
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->updateAssetLogWithThreadInformation( $assetLog );
|
||||
|
||||
if ($this->hasReachedEndOfChain( $assetLog )
|
||||
) {
|
||||
$this->clearCurrentAssetInformation();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
|
||||
Schema::table( 'asset_logs', function ( Blueprint $table ) {
|
||||
|
||||
$table->dropIndex( 'thread_id' );
|
||||
$table->dropColumn( 'thread_id' );
|
||||
} );
|
||||
}
|
||||
|
||||
/**
|
||||
* hasAssetChanged
|
||||
*
|
||||
* @param $assetLog
|
||||
*
|
||||
* @return bool
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
protected function hasAssetChanged( $assetLog )
|
||||
{
|
||||
|
||||
return $assetLog->asset_id !== $this->currentAssetId;
|
||||
}
|
||||
|
||||
/**
|
||||
* resetCurrentAssetInformation
|
||||
*
|
||||
* @param $assetLog
|
||||
*
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
protected function resetCurrentAssetInformation( $assetLog )
|
||||
{
|
||||
|
||||
$this->currentAssetId = $assetLog->asset_id;
|
||||
$this->currentAssetLogId = $assetLog->id;
|
||||
$this->startOfCurrentThread = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* hasReachedEndOfChain
|
||||
*
|
||||
* @param $assetLog
|
||||
*
|
||||
* @return bool
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
protected function hasReachedEndOfChain( $assetLog )
|
||||
{
|
||||
|
||||
return in_array( $assetLog->action_type, $this->threadFinalActionTypes )
|
||||
&& $this->startOfCurrentThread == false;
|
||||
}
|
||||
|
||||
/**
|
||||
* clearCurrentAssetInformation
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
protected function clearCurrentAssetInformation()
|
||||
{
|
||||
|
||||
$this->startOfCurrentThread = true;
|
||||
$this->currentAssetLogId = null;
|
||||
$this->currentAssetId = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* updateAssetLogWithThreadInformation
|
||||
*
|
||||
* @param $assetLog
|
||||
*
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
protected function updateAssetLogWithThreadInformation( $assetLog )
|
||||
{
|
||||
|
||||
$loadedAssetLog = Actionlog::find( $assetLog->id );
|
||||
|
||||
$loadedAssetLog->thread_id = $this->currentAssetLogId;
|
||||
|
||||
$loadedAssetLog->update();
|
||||
|
||||
unset( $loadedAssetLog );
|
||||
}
|
||||
|
||||
/**
|
||||
* hasBegunNewChain
|
||||
*
|
||||
* @param $assetLog
|
||||
*
|
||||
* @return bool
|
||||
* @author Vincent Sposato <vincent.sposato@gmail.com>
|
||||
* @version v1.0
|
||||
*/
|
||||
protected function hasBegunNewChain( $assetLog )
|
||||
{
|
||||
|
||||
return in_array( $assetLog->action_type, $this->threadStartingActionTypes )
|
||||
&& $this->startOfCurrentThread == true;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddAcceptedToAssets extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('assets', function(Blueprint $table)
|
||||
{
|
||||
$table->enum('accepted',["pending","accepted","rejected"])->nullable();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('assets', function(Blueprint $table)
|
||||
{
|
||||
$table->dropColumn('accepted');
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class AddCustomCssToSettings extends Migration {
|
||||
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::table('settings', function(Blueprint $table)
|
||||
{
|
||||
$table->text('custom_css')->nullable()->default(NULL);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::table('settings', function(Blueprint $table)
|
||||
{
|
||||
$table->dropColumn('custom_css');
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
class AccessoriesSeeder extends Seeder
|
||||
{
|
||||
public function run()
|
||||
{
|
||||
|
||||
|
||||
// Initialize empty array
|
||||
$accessory = array();
|
||||
|
||||
$date = new DateTime;
|
||||
|
||||
|
||||
$accessory[] = array(
|
||||
'name' => 'Cisco Desktop Phone',
|
||||
'category_id' => 4,
|
||||
'qty' => '20',
|
||||
'requestable' => '0',
|
||||
'user_id' => 1,
|
||||
);
|
||||
|
||||
$accessory[] = array(
|
||||
'name' => 'ASUS 23-inch',
|
||||
'category_id' => 5,
|
||||
'qty' => '20',
|
||||
'requestable' => '0',
|
||||
'user_id' => 1,
|
||||
);
|
||||
|
||||
|
||||
|
||||
// Delete all the old data
|
||||
DB::table('accessories')->truncate();
|
||||
|
||||
// Insert the new posts
|
||||
Accessory::insert($accessory);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
class AssetMaintenancesSeeder extends Seeder
|
||||
{
|
||||
public function run()
|
||||
{
|
||||
|
||||
|
||||
// Initialize empty array
|
||||
$asset_maintenances = array();
|
||||
|
||||
$date = new DateTime;
|
||||
|
||||
|
||||
$asset_maintenances[] = array(
|
||||
'asset_id' => 1,
|
||||
'supplier_id' => 1,
|
||||
'asset_maintenance_type' => 'Maintenance',
|
||||
'title' => 'Test Maintenance',
|
||||
'start_date' => $date->modify('-10 day'),
|
||||
'cost' => '200.99',
|
||||
'created_at' => $date->modify('-10 day'),
|
||||
'updated_at' => $date->modify('-3 day'),
|
||||
);
|
||||
|
||||
|
||||
|
||||
// Delete all the old data
|
||||
DB::table('asset_maintenances')->truncate();
|
||||
|
||||
// Insert the new posts
|
||||
AssetMaintenance::insert($asset_maintenances);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -15,6 +15,7 @@ class AssetsSeeder extends Seeder
|
||||
'name' => 'Shanen MBP',
|
||||
'asset_tag' => 'NNY2878796',
|
||||
'model_id' => 1,
|
||||
'supplier_id' => 1,
|
||||
'serial' => 'WS90585666669',
|
||||
'purchase_date' => '2013-10-02',
|
||||
'purchase_cost' => '2435.99',
|
||||
@@ -38,6 +39,7 @@ class AssetsSeeder extends Seeder
|
||||
'name' => 'Michael MBP',
|
||||
'asset_tag' => 'NNY28633396',
|
||||
'model_id' => 1,
|
||||
'supplier_id' => 1,
|
||||
'serial' => 'WS905823226669',
|
||||
'purchase_date' => '2013-10-02',
|
||||
'purchase_cost' => '2435.99',
|
||||
@@ -62,6 +64,7 @@ class AssetsSeeder extends Seeder
|
||||
'name' => 'Alison MBP',
|
||||
'asset_tag' => 'NNY287958796',
|
||||
'model_id' => 1,
|
||||
'supplier_id' => 1,
|
||||
'serial' => 'WS905869046069',
|
||||
'purchase_date' => '2013-10-02',
|
||||
'purchase_cost' => '2435.99',
|
||||
@@ -72,7 +75,7 @@ class AssetsSeeder extends Seeder
|
||||
'assigned_to' => NULL,
|
||||
'physical' => 1,
|
||||
'archived' => 0,
|
||||
'status_id' => 2,
|
||||
'status_id' => 2,
|
||||
'notes' => '',
|
||||
'deleted_at' => NULL,
|
||||
'archived' => '0',
|
||||
@@ -85,6 +88,7 @@ class AssetsSeeder extends Seeder
|
||||
'name' => 'Brady MBP',
|
||||
'asset_tag' => 'NNY78795566',
|
||||
'model_id' => 2,
|
||||
'supplier_id' => 2,
|
||||
'serial' => 'WS9078686069',
|
||||
'purchase_date' => '2012-01-02',
|
||||
'purchase_cost' => '1999.99',
|
||||
@@ -108,6 +112,7 @@ class AssetsSeeder extends Seeder
|
||||
'name' => 'Deborah MBP',
|
||||
'asset_tag' => 'NNY65756756775',
|
||||
'model_id' => 2,
|
||||
'supplier_id' => 2,
|
||||
'serial' => 'WS9078686069',
|
||||
'purchase_date' => '2012-01-02',
|
||||
'purchase_cost' => '699.99',
|
||||
@@ -132,6 +137,7 @@ class AssetsSeeder extends Seeder
|
||||
'name' => 'Sara MBP',
|
||||
'asset_tag' => 'NNY6897856775',
|
||||
'model_id' => 2,
|
||||
'supplier_id' => 2,
|
||||
'serial' => 'WS87897998Q',
|
||||
'purchase_date' => '2012-01-02',
|
||||
'purchase_cost' => '1999.99',
|
||||
@@ -139,7 +145,7 @@ class AssetsSeeder extends Seeder
|
||||
'created_at' => $date->modify('-10 day'),
|
||||
'updated_at' => $date->modify('-3 day'),
|
||||
'user_id' => 2,
|
||||
'assigned_to' => 2,
|
||||
'assigned_to' => 1,
|
||||
'physical' => 1,
|
||||
'archived' => 0,
|
||||
'status_id' => 1,
|
||||
@@ -155,6 +161,7 @@ class AssetsSeeder extends Seeder
|
||||
'name' => 'Ben MBP',
|
||||
'asset_tag' => 'NNY67567775',
|
||||
'model_id' => 2,
|
||||
'supplier_id' => 2,
|
||||
'serial' => 'WS89080890',
|
||||
'purchase_date' => '2012-01-02',
|
||||
'purchase_cost' => '1999.99',
|
||||
@@ -162,10 +169,10 @@ class AssetsSeeder extends Seeder
|
||||
'created_at' => $date->modify('-10 day'),
|
||||
'updated_at' => $date->modify('-3 day'),
|
||||
'user_id' => 2,
|
||||
'assigned_to' => 2,
|
||||
'assigned_to' => 1,
|
||||
'physical' => 1,
|
||||
'archived' => 0,
|
||||
'status_id' => 1,
|
||||
'status_id' => 1,
|
||||
'notes' => '',
|
||||
'deleted_at' => NULL,
|
||||
'archived' => '0',
|
||||
@@ -178,6 +185,7 @@ class AssetsSeeder extends Seeder
|
||||
'name' => 'Broken Laptop',
|
||||
'asset_tag' => 'NNY6756756775',
|
||||
'model_id' => 2,
|
||||
'supplier_id' => 2,
|
||||
'serial' => 'WS89080890',
|
||||
'purchase_date' => '2012-01-02',
|
||||
'purchase_cost' => '1999.99',
|
||||
@@ -201,6 +209,7 @@ class AssetsSeeder extends Seeder
|
||||
'name' => 'Maybe Broke-Ass Laptop',
|
||||
'asset_tag' => 'NNY6755667775',
|
||||
'model_id' => 2,
|
||||
'supplier_id' => 1,
|
||||
'serial' => 'WS45689080890',
|
||||
'purchase_date' => '2012-01-02',
|
||||
'purchase_cost' => '1999.99',
|
||||
@@ -211,7 +220,7 @@ class AssetsSeeder extends Seeder
|
||||
'assigned_to' => NULL,
|
||||
'physical' => 1,
|
||||
'archived' => 0,
|
||||
'status_id' => '2',
|
||||
'status_id' => '2',
|
||||
'notes' => '',
|
||||
'deleted_at' => NULL,
|
||||
'archived' => '0',
|
||||
@@ -224,6 +233,7 @@ class AssetsSeeder extends Seeder
|
||||
'name' => 'Completely Facacta Laptop',
|
||||
'asset_tag' => 'NNY6564567775',
|
||||
'model_id' => 2,
|
||||
'supplier_id' => 2,
|
||||
'serial' => 'WS99689080890',
|
||||
'purchase_date' => '2012-01-02',
|
||||
'purchase_cost' => '1999.99',
|
||||
@@ -234,7 +244,7 @@ class AssetsSeeder extends Seeder
|
||||
'assigned_to' => NULL,
|
||||
'physical' => 1,
|
||||
'archived' => 1,
|
||||
'status_id' => '4',
|
||||
'status_id' => '2',
|
||||
'notes' => '',
|
||||
'deleted_at' => NULL,
|
||||
'archived' => '0',
|
||||
@@ -247,6 +257,7 @@ class AssetsSeeder extends Seeder
|
||||
'name' => 'Borked Laptop',
|
||||
'asset_tag' => 'NNY656456778975',
|
||||
'model_id' => 2,
|
||||
'supplier_id' => 1,
|
||||
'serial' => 'WS99689080890',
|
||||
'purchase_date' => '2012-01-02',
|
||||
'purchase_cost' => '1999.99',
|
||||
@@ -257,7 +268,7 @@ class AssetsSeeder extends Seeder
|
||||
'assigned_to' => NULL,
|
||||
'physical' => 1,
|
||||
'archived' => 1,
|
||||
'status_id' => '3',
|
||||
'status_id' => '2',
|
||||
'notes' => '',
|
||||
'deleted_at' => NULL,
|
||||
'archived' => '0',
|
||||
@@ -270,6 +281,7 @@ class AssetsSeeder extends Seeder
|
||||
'name' => 'Noah MBP',
|
||||
'asset_tag' => 'NNY98056775',
|
||||
'model_id' => 2,
|
||||
'supplier_id' => 1,
|
||||
'serial' => 'WS909098888',
|
||||
'purchase_date' => '2011-12-20',
|
||||
'purchase_cost' => '699.99',
|
||||
|
||||
@@ -16,6 +16,7 @@ class CategoriesSeeder extends Seeder
|
||||
'require_acceptance' => 0,
|
||||
'deleted_at' => NULL,
|
||||
'eula_text' => NULL,
|
||||
'category_type' => 'asset',
|
||||
);
|
||||
|
||||
$date = new DateTime;
|
||||
@@ -28,6 +29,7 @@ class CategoriesSeeder extends Seeder
|
||||
'require_acceptance' => 0,
|
||||
'deleted_at' => NULL,
|
||||
'eula_text' => NULL,
|
||||
'category_type' => 'asset',
|
||||
);
|
||||
|
||||
$date = new DateTime;
|
||||
@@ -40,6 +42,7 @@ class CategoriesSeeder extends Seeder
|
||||
'require_acceptance' => 0,
|
||||
'deleted_at' => NULL,
|
||||
'eula_text' => NULL,
|
||||
'category_type' => 'asset',
|
||||
);
|
||||
|
||||
$date = new DateTime;
|
||||
@@ -52,6 +55,7 @@ class CategoriesSeeder extends Seeder
|
||||
'require_acceptance' => 0,
|
||||
'deleted_at' => NULL,
|
||||
'eula_text' => NULL,
|
||||
'category_type' => 'accessory',
|
||||
);
|
||||
|
||||
$date = new DateTime;
|
||||
@@ -64,6 +68,20 @@ class CategoriesSeeder extends Seeder
|
||||
'require_acceptance' => 0,
|
||||
'deleted_at' => NULL,
|
||||
'eula_text' => NULL,
|
||||
'category_type' => 'accessory',
|
||||
);
|
||||
|
||||
$date = new DateTime;
|
||||
$category[] = array(
|
||||
'name' => 'Printer Ink',
|
||||
'created_at' => $date->modify('-10 day'),
|
||||
'updated_at' => $date->modify('-3 day'),
|
||||
'user_id' => 1,
|
||||
'use_default_eula' => 0,
|
||||
'require_acceptance' => 0,
|
||||
'deleted_at' => NULL,
|
||||
'eula_text' => NULL,
|
||||
'category_type' => 'consumable',
|
||||
);
|
||||
|
||||
|
||||
|
||||
@@ -22,6 +22,9 @@ class DatabaseSeeder extends Seeder
|
||||
$this->call('LicensesSeeder');
|
||||
$this->call('LicenseSeatsSeeder');
|
||||
$this->call('ActionlogSeeder');
|
||||
$this->call('AccessoriesSeeder');
|
||||
$this->call('AssetMaintenancesSeeder');
|
||||
$this->call('SuppliersSeeder');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
<?php
|
||||
class SuppliersSeeder extends Seeder
|
||||
{
|
||||
public function run()
|
||||
{
|
||||
|
||||
|
||||
// Initialize empty array
|
||||
$supplier = array();
|
||||
|
||||
$date = new DateTime;
|
||||
|
||||
|
||||
$supplier[] = array(
|
||||
'name' => 'New Egg',
|
||||
'created_at' => $date->modify('-10 day'),
|
||||
'updated_at' => $date->modify('-3 day'),
|
||||
);
|
||||
|
||||
$supplier[] = array(
|
||||
'name' => 'Microsoft',
|
||||
'created_at' => $date->modify('-10 day'),
|
||||
'updated_at' => $date->modify('-3 day'),
|
||||
);
|
||||
|
||||
|
||||
|
||||
// Delete all the old data
|
||||
DB::table('suppliers')->truncate();
|
||||
|
||||
// Insert the new posts
|
||||
Supplier::insert($supplier);
|
||||
}
|
||||
|
||||
}
|
||||
+93
-10
@@ -1,18 +1,101 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
/*
|
||||
* To change this license header, choose License Headers in Project Properties.
|
||||
* To change this template file, choose Tools | Templates
|
||||
* and open the template in the editor.
|
||||
*/
|
||||
function ParseFloat($floatString){
|
||||
|
||||
function ParseFloat($floatString){
|
||||
|
||||
// use comma for thousands until local info is property used
|
||||
$LocaleInfo = localeconv();
|
||||
//$thousands = isset($LocaleInfo["mon_thousands_sep"]) ? $LocaleInfo["mon_thousands_sep"] : ",";
|
||||
//$floatString = str_replace($LocaleInfo["mon_thousands_sep"] , "", $floatString);
|
||||
//$floatString = str_replace($LocaleInfo["decimal_point"] , ".", $floatString);
|
||||
$floatString = str_replace("," , "", $floatString);
|
||||
$floatString = str_replace($LocaleInfo["decimal_point"] , ".", $floatString);
|
||||
return floatval($floatString);
|
||||
}
|
||||
$floatString = str_replace("," , "", $floatString);
|
||||
$floatString = str_replace($LocaleInfo["decimal_point"] , ".", $floatString);
|
||||
return floatval($floatString);
|
||||
}
|
||||
|
||||
function modelList() {
|
||||
$model_list = array('' => Lang::get('general.select_model')) + DB::table('models')
|
||||
->select(DB::raw('IF (modelno="" OR modelno IS NULL,name,concat(name, " / ",modelno)) as name, id'))
|
||||
->orderBy('name', 'asc')
|
||||
->whereNull('deleted_at')
|
||||
->lists('name', 'id');
|
||||
return $model_list;
|
||||
}
|
||||
|
||||
function categoryList() {
|
||||
$category_list = array('' => '') + DB::table('categories')
|
||||
->whereNull('deleted_at')
|
||||
->orderBy('name', 'asc')
|
||||
->lists('name', 'id');
|
||||
return $category_list;
|
||||
}
|
||||
|
||||
function suppliersList() {
|
||||
$supplier_list = array('' => Lang::get('general.select_supplier')) + Supplier::orderBy('name', 'asc')
|
||||
->orderBy('name', 'asc')
|
||||
->lists('name', 'id');
|
||||
return $supplier_list;
|
||||
}
|
||||
|
||||
function statusLabelList() {
|
||||
$statuslabel_list = Statuslabel::orderBy('name', 'asc')
|
||||
->lists('name', 'id');
|
||||
return $statuslabel_list;
|
||||
}
|
||||
|
||||
function locationsList() {
|
||||
$location_list = array('' => Lang::get('general.select_location')) + Location::orderBy('name', 'asc')
|
||||
->lists('name', 'id');
|
||||
return $location_list;
|
||||
}
|
||||
|
||||
function manufacturerList() {
|
||||
$manufacturer_list = array('' => 'Select One') + Manufacturer::orderBy('name', 'asc')
|
||||
->lists('name', 'id');
|
||||
return $manufacturer_list;
|
||||
}
|
||||
|
||||
function statusTypeList() {
|
||||
$statuslabel_types = array('' => Lang::get('admin/hardware/form.select_statustype')) + array('undeployable' => Lang::get('admin/hardware/general.undeployable')) + array('pending' => Lang::get('admin/hardware/general.pending')) + array('archived' => Lang::get('admin/hardware/general.archived')) + array('deployable' => Lang::get('admin/hardware/general.deployable'));
|
||||
return $statuslabel_types;
|
||||
}
|
||||
|
||||
function managerList() {
|
||||
$manager_list = array('' => '') + DB::table('users')
|
||||
->select(DB::raw('concat(last_name,", ",first_name," (",username,")") as full_name, id'))
|
||||
->whereNull('deleted_at', 'and')
|
||||
->orderBy('last_name', 'asc')
|
||||
->orderBy('first_name', 'asc')
|
||||
->lists('full_name', 'id');
|
||||
return $manager_list;
|
||||
}
|
||||
|
||||
function depreciationList() {
|
||||
$depreciation_list = array('' => 'Do Not Depreciate') + Depreciation::orderBy('name', 'asc')->lists('name', 'id');
|
||||
return $depreciation_list;
|
||||
}
|
||||
|
||||
function categoryTypeList() {
|
||||
$category_types= array('' => '','accessory' => 'Accessory', 'asset' => 'Asset', 'consumable' => 'Consumable');
|
||||
return $category_types;
|
||||
}
|
||||
|
||||
function usersList() {
|
||||
$users_list = array('' => Lang::get('general.select_user')) + DB::table('users')->select(DB::raw('concat(last_name,", ",first_name," (",username,")") as full_name, id'))->whereNull('deleted_at')->orderBy('last_name', 'asc')->orderBy('first_name', 'asc')->lists('full_name', 'id');
|
||||
return $users_list;
|
||||
}
|
||||
|
||||
function barcodeDimensions ($barcode_type = 'QRCODE') {
|
||||
if ($barcode_type == 'C128') {
|
||||
$size['height'] = '-1';
|
||||
$size['width'] = '-10';
|
||||
} elseif ($barcode_type == 'PDF417') {
|
||||
$size['height'] = '-3';
|
||||
$size['width'] = '-10';
|
||||
} else {
|
||||
$size['height'] = '-3';
|
||||
$size['width'] = '-3';
|
||||
}
|
||||
return $size;
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'dl_csv' => 'Download CSV',
|
||||
'eula_text' => 'اتفاقية ترخيص المستخدم',
|
||||
'id' => 'رقم المعرف',
|
||||
'require_acceptance' => 'القبول',
|
||||
'title' => 'اسم الملحق',
|
||||
|
||||
|
||||
);
|
||||
|
||||
@@ -5,6 +5,7 @@ return array(
|
||||
'undeployable' => '<strong>Warning: </strong> This asset has been marked as currently undeployable.
|
||||
If this status has changed, please update the asset status.',
|
||||
'does_not_exist' => 'Asset does not exist.',
|
||||
'does_not_exist_or_not_requestable' => 'Nice try. That asset does not exist or is not requestable.',
|
||||
'assoc_users' => 'This asset is currently checked out to a user and cannot be deleted. Please check the asset in first, and then try deleting again. ',
|
||||
|
||||
'create' => array(
|
||||
@@ -22,7 +23,7 @@ return array(
|
||||
'error' => 'Asset was not restored, please try again',
|
||||
'success' => 'Asset restored successfully.'
|
||||
),
|
||||
|
||||
|
||||
'deletefile' => array(
|
||||
'error' => 'File not deleted. Please try again.',
|
||||
'success' => 'File successfully deleted.',
|
||||
@@ -31,7 +32,7 @@ return array(
|
||||
'upload' => array(
|
||||
'error' => 'File(s) not uploaded. Please try again.',
|
||||
'success' => 'File(s) successfully uploaded.',
|
||||
'nofiles' => 'You did not select any files for upload',
|
||||
'nofiles' => 'You did not select any files for upload, or the file you are trying to upload is too large',
|
||||
'invalidfiles' => 'One or more of your files is too large or is a filetype that is not allowed. Allowed filetypes are png, gif, jpg, doc, docx, pdf, and txt.',
|
||||
),
|
||||
|
||||
|
||||
@@ -18,5 +18,6 @@ return array(
|
||||
'serial' => 'Serial',
|
||||
'status' => 'Status',
|
||||
'title' => 'Asset ',
|
||||
'days_without_acceptance' => 'Days Without Acceptance'
|
||||
|
||||
);
|
||||
|
||||
@@ -22,7 +22,7 @@ return array(
|
||||
'upload' => array(
|
||||
'error' => 'File(s) not uploaded. Please try again.',
|
||||
'success' => 'File(s) successfully uploaded.',
|
||||
'nofiles' => 'You did not select any files for upload',
|
||||
'nofiles' => 'You did not select any files for upload, or the file you are trying to upload is too large',
|
||||
'invalidfiles' => 'One or more of your files is too large or is a filetype that is not allowed. Allowed filetypes are png, gif, jpg, doc, docx, pdf, and txt.',
|
||||
),
|
||||
|
||||
|
||||
@@ -4,6 +4,8 @@ return array(
|
||||
|
||||
'does_not_exist' => 'Location does not exist.',
|
||||
'assoc_users' => 'This location is currently associated with at least one user and cannot be deleted. Please update your users to no longer reference this location and try again. ',
|
||||
'assoc_assets' => 'This location is currently associated with at least one asset and cannot be deleted. Please update your assets to no longer reference this location and try again. ',
|
||||
'assoc_child_loc' => 'This location is currently the parent of at least one child location and cannot be deleted. Please update your locations to no longer reference this location and try again. ',
|
||||
|
||||
|
||||
'create' => array(
|
||||
|
||||
@@ -8,7 +8,8 @@ return array(
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Model was not created, please try again.',
|
||||
'success' => 'Model created successfully.'
|
||||
'success' => 'Model created successfully.',
|
||||
'duplicate_set' => 'An asset model with that name, manufacturer and model number already exists.',
|
||||
),
|
||||
|
||||
'update' => array(
|
||||
@@ -21,7 +22,7 @@ return array(
|
||||
'error' => 'There was an issue deleting the model. Please try again.',
|
||||
'success' => 'The model was deleted successfully.'
|
||||
),
|
||||
|
||||
|
||||
'restore' => array(
|
||||
'error' => 'Model was not restored, please try again',
|
||||
'success' => 'Model restored successfully.'
|
||||
|
||||
@@ -10,6 +10,8 @@ return array(
|
||||
'backups' => 'Backups',
|
||||
'barcode_type' => 'Barcode Type',
|
||||
'barcode_settings' => 'Barcode Settings',
|
||||
'custom_css' => 'Custom CSS',
|
||||
'custom_css_help' => 'Enter any custom CSS overrides you would like to use. Do not include the <style></style> tags.',
|
||||
'default_currency' => 'Default Currency',
|
||||
'default_eula_text' => 'Default EULA',
|
||||
'default_eula_help_text' => 'You can also associate custom EULAs to specific asset categories.',
|
||||
@@ -20,6 +22,7 @@ return array(
|
||||
'eula_settings' => 'EULA Settings',
|
||||
'eula_markdown' => 'This EULA allows <a href="https://help.github.com/articles/github-flavored-markdown/">Github flavored markdown</a>.',
|
||||
'general_settings' => 'General Settings',
|
||||
'generate_backup' => 'Generate Backup',
|
||||
'header_color' => 'Header Color',
|
||||
'info' => 'These settings let you customize certain aspects of your installation.',
|
||||
'laravel' => 'Laravel Version',
|
||||
|
||||
@@ -4,8 +4,14 @@ return array(
|
||||
|
||||
|
||||
'update' => array(
|
||||
'error' => 'An error has occurred while updating. ',
|
||||
'success' => 'Settings updated successfully.'
|
||||
'error' => 'An error has occurred while updating. ',
|
||||
'success' => 'Settings updated successfully.'
|
||||
),
|
||||
'backup' => array(
|
||||
'delete_confirm' => 'Are you sure you would like to delete this backup file? This action cannot be undone. ',
|
||||
'file_deleted' => 'The backup file was successfully deleted. ',
|
||||
'generated' => 'A new backup file was successfully created.',
|
||||
'file_not_found' => 'That backup file could not be found on the server.',
|
||||
),
|
||||
|
||||
);
|
||||
|
||||
@@ -10,6 +10,8 @@ return array(
|
||||
'filetype_info' => 'Allowed filetypes are png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, and rar.',
|
||||
'history_user' => 'الأرشيف الخاص بـ :name',
|
||||
'last_login' => 'آخر دخول للمستخدم',
|
||||
'ldap_config_text' => 'LDAP configuration settings can be found in the app/config folder in a file called ldap.php. The selected location will be set for all imported users. You will need to have at least one location set to use this feature.',
|
||||
'ldap_text' => 'Connect to LDAP and create users. Passwords will be auto-generated.',
|
||||
'software_user' => 'البرامج المسجلة لـ :name',
|
||||
'view_user' => 'عرض المستخدم :name',
|
||||
'usercsv' => 'ملف CSV',
|
||||
|
||||
@@ -10,6 +10,7 @@ return array(
|
||||
'user_password_required' => 'كلمة السر مطلوبة.',
|
||||
'insufficient_permissions' => 'صلاحيات غير كافية.',
|
||||
'user_deleted_warning' => 'تم حذف المستخدم. سيكون عليك استعادة هذا المستخدم للتعديل عليه او تسليمه اجهزة جديدة.',
|
||||
'ldap_not_configured' => 'LDAP integration has not been configured for this installation.',
|
||||
|
||||
|
||||
'success' => array(
|
||||
@@ -32,6 +33,10 @@ return array(
|
||||
'import' => 'حدث خطأ أثناء استيراد المستخدمين. حاول مرة أخرى.',
|
||||
'asset_already_accepted' => 'هذا الجهاز تم قبوله مسبقاً.',
|
||||
'accept_or_decline' => 'You must either accept or decline this asset.',
|
||||
'ldap_could_not_connect' => 'Could not connect to the LDAP server. Please check your LDAP server configuration in the LDAP config file. <br>Error from LDAP Server:',
|
||||
'ldap_could_not_bind' => 'Could not bind to the LDAP server. Please check your LDAP server configuration in the LDAP config file. <br>Error from LDAP Server: ',
|
||||
'ldap_could_not_search' => 'Could not search the LDAP server. Please check your LDAP server configuration in the LDAP config file. <br>Error from LDAP Server:',
|
||||
'ldap_could_not_get_entries' => 'Could not get entries from the LDAP server. Please check your LDAP server configuration in the LDAP config file. <br>Error from LDAP Server:',
|
||||
),
|
||||
|
||||
'deletefile' => array(
|
||||
|
||||
@@ -8,6 +8,7 @@ return array(
|
||||
'delete' => 'حذف',
|
||||
'edit' => 'تعديل',
|
||||
'restore' => 'إستعادة',
|
||||
'request' => 'Request',
|
||||
'submit' => 'إرسال',
|
||||
'upload' => 'Upload',
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
return [
|
||||
'accessories' => 'Accessories',
|
||||
'accessory' => 'Accessory',
|
||||
'accessory_report' => 'Accessory Report',
|
||||
'action' => 'Action',
|
||||
'activity_report' => 'Activity Report',
|
||||
'address' => 'العنوان',
|
||||
@@ -59,6 +60,7 @@
|
||||
'id' => 'الرقم',
|
||||
'image_delete' => 'حذف الصورة',
|
||||
'image_upload' => 'رفع صورة',
|
||||
'import' => 'Import',
|
||||
'asset_maintenance' => 'Asset Maintenance',
|
||||
'asset_maintenance_report' => 'Asset Maintenance Report',
|
||||
'asset_maintenances' => 'Asset Maintenances',
|
||||
@@ -100,6 +102,7 @@
|
||||
'ready_to_deploy' => 'جاهزة للتوزيع',
|
||||
'recent_activity' => 'Recent Activity',
|
||||
'reports' => 'التقارير',
|
||||
'requested' => 'Requested',
|
||||
'save' => 'حفظ',
|
||||
'select' => 'Select',
|
||||
'search' => 'Search',
|
||||
@@ -128,6 +131,7 @@
|
||||
'user' => 'المستخدم',
|
||||
'accepted' => 'accepted',
|
||||
'declined' => 'declined',
|
||||
'unaccepted_asset_report' => 'Unaccepted Assets',
|
||||
'users' => 'Users',
|
||||
'viewassets' => 'عرض الأصول المسجلة',
|
||||
'website' => 'الموقع',
|
||||
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'about_accessories_title' => 'Относно аксесоарите',
|
||||
'about_accessories_text' => 'Аксесоарите са всички неща, които се изписват на потребителите, но нямат сериен номер (или няма нужда да бъдат конкретно проследявани). Например, това са мишки, клавиатури и др.',
|
||||
'accessory_category' => 'Категория аксесоари',
|
||||
'accessory_name' => 'Аксесоар',
|
||||
'create' => 'Създаване на аксесоар',
|
||||
'eula_text' => 'EULA на категорията',
|
||||
'eula_text_help' => 'Това поле позволява да задавате различни EULA за всеки тип активи. Ако имате обща EULA за всички активи, можете да използвате кутийката по-долу за да използвате една обща по подразбиране.',
|
||||
'require_acceptance' => 'Задължаване на потребителите да потвърждават приемането на активи от тази категория.',
|
||||
'no_default_eula' => 'Няма EULA по подразбиране. Добавете я в Настройки.',
|
||||
'qty' => 'Количество',
|
||||
'total' => 'Oбщо',
|
||||
'remaining' => 'Наличност',
|
||||
'update' => 'Обновяване на аксесоар',
|
||||
'use_default_eula' => 'Използване на <a href="#" data-toggle="modal" data-target="#eulaModal">EULA по подразбиране</a>.',
|
||||
'use_default_eula_disabled' => '<del>Използване на EULA по подразбиране</del> Няма EULA по подразбиране. Добавете я в Настройки.',
|
||||
|
||||
);
|
||||
Executable
+37
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'does_not_exist' => 'Няма такава категория.',
|
||||
'assoc_users' => 'От този аксесоар са предадени :count броя на потребителите. Моля впишете обратно нови или върнати и опитайте отново.',
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Категорията не беше създадена. Моля опитайте отново.',
|
||||
'success' => 'Категорията е създадена.'
|
||||
),
|
||||
|
||||
'update' => array(
|
||||
'error' => 'Категорията не беше обновена. Моля опитайте отново.',
|
||||
'success' => 'Категорията е обновена.'
|
||||
),
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Сигурни ли сте, че желаете изтриване на категорията?',
|
||||
'error' => 'Проблем при изтриване на категорията. Моля опитайте отново.',
|
||||
'success' => 'Категорията бе изтрита успешно.'
|
||||
),
|
||||
|
||||
'checkout' => array(
|
||||
'error' => 'Аксесоарът не беше изписан. Моля опитайте отново.',
|
||||
'success' => 'Аксесоарът изписан успешно.',
|
||||
'user_does_not_exist' => 'Невалиден потребител. Моля опитайте отново.'
|
||||
),
|
||||
|
||||
'checkin' => array(
|
||||
'error' => 'Аксесоарът не беше вписан. Моля опитайте отново.',
|
||||
'success' => 'Аксесоарът вписан успешно.',
|
||||
'user_does_not_exist' => 'Невалиден потребител. Моля опитайте отново.'
|
||||
)
|
||||
|
||||
|
||||
);
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'dl_csv' => 'Сваляне на CSV',
|
||||
'eula_text' => 'EULA',
|
||||
'id' => 'ID',
|
||||
'require_acceptance' => 'Утвърждаване',
|
||||
'title' => 'Аксесоар',
|
||||
|
||||
|
||||
);
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'asset_maintenance_type' => 'Тип на поддръжка на актив',
|
||||
'title' => 'Заглавие',
|
||||
'start_date' => 'Начална дата',
|
||||
'completion_date' => 'Крайна дата',
|
||||
'cost' => 'Стойност',
|
||||
'is_warranty' => 'Подобрение на гаранцията',
|
||||
'asset_maintenance_time' => 'Време за поддръжка на актив (в дни)',
|
||||
'notes' => 'Бележки',
|
||||
'update' => 'Редакция на поддръжка на актив',
|
||||
'create' => 'Създаване на поддръжка на актив'
|
||||
];
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'asset_maintenances' => 'Поддръжка на активи',
|
||||
'edit' => 'Редакция на поддръжка на актив',
|
||||
'delete' => 'Изтриване на поддръжка на актив',
|
||||
'view' => 'Преглед на поддръжка на актив',
|
||||
'repair' => 'Ремонт',
|
||||
'maintenance' => 'Поддръжка',
|
||||
'upgrade' => 'Upgrade'
|
||||
];
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'not_found' => 'Поддръжката на актив, която търсите не бе открита!',
|
||||
'delete' => [
|
||||
'confirm' => 'Потвърдете изтриването на поддръжката на актив.',
|
||||
'error' => 'Проблем при изтриването на поддръжка на актив. Моля опитайте отново.',
|
||||
'success' => 'Поддръжката на актив изтрита успешно.'
|
||||
],
|
||||
'create' => [
|
||||
'error' => 'Поддръжката на актив не бе създадена. Моля опитайте отново.',
|
||||
'success' => 'Поддръжката на актив създадена успешно.'
|
||||
],
|
||||
'asset_maintenance_incomplete' => 'Все още неприключила',
|
||||
'warranty' => 'Гаранция',
|
||||
'not_warranty' => 'Без гаранция',
|
||||
];
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
return [
|
||||
'title' => 'Поддръжка на активи',
|
||||
'asset_name' => 'Актив',
|
||||
'supplier_name' => 'Доставчик',
|
||||
'is_warranty' => 'Гаранция',
|
||||
'dl_csv' => 'Сваляне на CSV'
|
||||
];
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'about_asset_categories' => 'Относно категориите на активи',
|
||||
'about_categories' => 'Категориите помагат организирането на активите. Примерни категории могат да бъдат "Стационарни PC", "Лаптопи", "Мобилни телефони", "Таблети" и т.н., но можете да използвате всяка категория, имаща смисъл за организацията Ви.',
|
||||
'asset_categories' => 'Категории на активи',
|
||||
'category_name' => 'Име на категория',
|
||||
'checkin_email' => 'Изпращане на email до потребителя при вписване на активи.',
|
||||
'clone' => 'Копиране на категория',
|
||||
'create' => 'Създаване на категория',
|
||||
'edit' => 'Редакция на категория',
|
||||
'eula_text' => 'Категория EULA',
|
||||
'eula_text_help' => 'Това поле позволява да задавате различни EULA за всеки тип активи. Ако имате обща EULA за всички активи, можете да използвате кутийката по-долу за да използвате една обща по подразбиране.',
|
||||
'require_acceptance' => 'Задължаване на потребителите да потвърждават приемането на активи от тази категория.',
|
||||
'required_acceptance' => 'Потребителят ще получи email с връзка за потвърждаване получаването на актива.',
|
||||
'required_eula' => 'Потребителят ще получи копие на EULA.',
|
||||
'no_default_eula' => 'Няма EULA по подразбиране. Добавете я в Настройки.',
|
||||
'update' => 'Обновяване на категория',
|
||||
'use_default_eula' => 'Използване на <a href="#" data-toggle="modal" data-target="#eulaModal">EULA по подразбиране</a>.',
|
||||
'use_default_eula_disabled' => '<del>Използване на EULA по подразбиране</del> Няма EULA по подразбиране. Добавете я в Настройки.',
|
||||
|
||||
);
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'does_not_exist' => 'Категорията не съществува.',
|
||||
'assoc_users' => 'Тази категория е асоциирана с поне един модел и не може да бъде изтрита. Моля обновете връзките с моделите и опитайте отново.',
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Категорията не беше създадена. Моля опитайте отново.',
|
||||
'success' => 'Категорията е създадена.'
|
||||
),
|
||||
|
||||
'update' => array(
|
||||
'error' => 'Категорията не беше обновена. Моля опитайте отново',
|
||||
'success' => 'Категорията е обновена успешно.'
|
||||
),
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Желаете ли да изтриете тази категория?',
|
||||
'error' => 'Проблем при изтриване на категорията. Моля опитайте отново.',
|
||||
'success' => 'Категорията бе изтрита успешно.'
|
||||
)
|
||||
|
||||
);
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'eula_text' => 'EULA',
|
||||
'id' => 'ID',
|
||||
'parent' => 'Горна категория',
|
||||
'require_acceptance' => 'Утвърждаване',
|
||||
'title' => 'Категория на актива',
|
||||
|
||||
);
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'about_consumables_title' => 'Относно консумативите',
|
||||
'about_consumables_text' => 'Консумативите са всички неща, купувани във времето. Например тонер за принтер или хартия.',
|
||||
'consumable_name' => 'Консуматив',
|
||||
'create' => 'Създаване на консуматив',
|
||||
'remaining' => 'Остава',
|
||||
'total' => 'Oбщо',
|
||||
'update' => 'Обновяване на консуматив',
|
||||
);
|
||||
Executable
+36
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'does_not_exist' => 'Консуматива не съществува.',
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Консумативът не беше създаден. Моля опитайте отново.',
|
||||
'success' => 'Консумативът създаден успешно.'
|
||||
),
|
||||
|
||||
'update' => array(
|
||||
'error' => 'Консумативът не беше обновен. Моля опитайте отново.',
|
||||
'success' => 'Консумативът обновен успешно.'
|
||||
),
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Сигурни ли сте, че желаете да изтриете аксесоара?',
|
||||
'error' => 'Проблем при изтриването на консуматива. Моля опитайте отново.',
|
||||
'success' => 'Аксесоарът беше изтрит успешно.'
|
||||
),
|
||||
|
||||
'checkout' => array(
|
||||
'error' => 'Консумативът не беше изписан. Моля опитайте отново.',
|
||||
'success' => 'Консумативът изписан успешно.',
|
||||
'user_does_not_exist' => 'Невалиден потребител. Моля опитайте отново.'
|
||||
),
|
||||
|
||||
'checkin' => array(
|
||||
'error' => 'Консумативът не беше вписан. Моля опитайте отново.',
|
||||
'success' => 'Консумативът вписан успешно.',
|
||||
'user_does_not_exist' => 'Невалиден потребител. Моля опитайте отново.'
|
||||
)
|
||||
|
||||
|
||||
);
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'title' => 'Консуматив',
|
||||
);
|
||||
Executable
+12
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'about_asset_depreciations' => 'Относно амортизацията на активи',
|
||||
'about_depreciations' => 'Тук можете да конфигурирате линейна амортизация на активи във времето.',
|
||||
'asset_depreciations' => 'Амортизация на активи',
|
||||
'create_depreciation' => 'Създаване на амортизация',
|
||||
'depreciation_name' => 'Амортизация',
|
||||
'number_of_months' => 'Брой месеци',
|
||||
'update_depreciation' => 'Обновяване на амортизация',
|
||||
|
||||
);
|
||||
Executable
+25
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'does_not_exist' => 'Амортизацията не съществува.',
|
||||
'assoc_users' => 'Тази амортизация е асоциирана с един или повече модели и не може да бъде изтрита. Моля изтрийте моделите и опитайте отново.',
|
||||
|
||||
|
||||
'create' => array(
|
||||
'error' => 'Класът на амортизация не беше създаден. Моля опитайте отново.',
|
||||
'success' => 'Класът на амортизация създаден успешно.'
|
||||
),
|
||||
|
||||
'update' => array(
|
||||
'error' => 'Класът на амортизация не беше обновен. Моля опитайте отново.',
|
||||
'success' => 'Класът на амортизация обновен успешно.'
|
||||
),
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Сигурни ли сте, че желаете изтриване на класът на амортизация?',
|
||||
'error' => 'Проблем при изтриването на класа на амортизация. Моля опитайте отново.',
|
||||
'success' => 'Класът на амортизация изтрит успешно.'
|
||||
)
|
||||
|
||||
);
|
||||
Executable
+10
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'id' => 'ID',
|
||||
'months' => 'Месеци',
|
||||
'term' => 'Срок',
|
||||
'title' => 'Име',
|
||||
|
||||
);
|
||||
Executable
+22
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'group_exists' => 'Групата вече съществува!',
|
||||
'group_not_found' => 'Групата [:id] не съществува.',
|
||||
'group_name_required' => 'Полето име е задължително',
|
||||
|
||||
'success' => array(
|
||||
'create' => 'Групата създадена успешно.',
|
||||
'update' => 'Групата обновена успешно.',
|
||||
'delete' => 'Групата изтрита успешно.',
|
||||
),
|
||||
|
||||
'delete' => array(
|
||||
'confirm' => 'Сигурни ли сте, че желаете да изтриете групата?',
|
||||
'create' => 'Проблем при създаване на групата. Моля опитайте отново.',
|
||||
'update' => 'Проблем при обновяването на групата. Моля опитайте отново.',
|
||||
'delete' => 'Проблем при изтриване на групата. Моля опитайте отново.',
|
||||
),
|
||||
|
||||
);
|
||||
Executable
+9
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'id' => 'ID',
|
||||
'name' => 'Име',
|
||||
'users' => 'Брой потребители',
|
||||
|
||||
);
|
||||
Executable
+13
@@ -0,0 +1,13 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'group_management' => 'Управление на групи',
|
||||
'create_group' => 'Нова група',
|
||||
'edit_group' => 'Редакция на група',
|
||||
'group_name' => 'Име на група',
|
||||
'group_admin' => 'Администратор на група',
|
||||
'allow' => 'Разрешаване',
|
||||
'deny' => 'Отказ',
|
||||
|
||||
);
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
|
||||
'bulk_update' => 'Масово обновяване на активи',
|
||||
'bulk_update_help' => 'Тук можете да обновите множество активи едновременно. Попълнете единствено полетата, които желаете да промените. Всички празни полета няма да бъдат променени.',
|
||||
'bulk_update_warn' => 'Ще бъдат променени записите за :asset_count актива.',
|
||||
'checkedout_to' => 'Изписано на',
|
||||
'checkout_date' => 'Дата на изписване',
|
||||
'checkin_date' => 'Дата на вписване',
|
||||
'checkout_to' => 'Изпиши на',
|
||||
'cost' => 'Стойност на закупуване',
|
||||
'create' => 'Създаване на актив',
|
||||
'date' => 'Дата на закупуване',
|
||||
'depreciates_on' => 'Амортизира се на',
|
||||
'depreciation' => 'Амортизация',
|
||||
'default_location' => 'Местоположение по подразбиране',
|
||||
'eol_date' => 'EOL дата',
|
||||
'eol_rate' => 'EOL съотношение',
|
||||
'expected_checkin' => 'Очаквана дата на вписване',
|
||||
'expires' => 'Изтича',
|
||||
'fully_depreciated' => 'Напълно амортизиран',
|
||||
'help_checkout' => 'Ако желаете да присвоите актив на момента, изберете "Готово за предаване" от списъка по-горе.',
|
||||
'mac_address' => 'MAC адрес',
|
||||
'manufacturer' => 'Производител',
|
||||
'model' => 'Модел',
|
||||
'months' => 'месеца',
|
||||
'name' => 'Име на актив',
|
||||
'notes' => 'Бележки',
|
||||
'order' => 'Номер на поръчка',
|
||||
'qr' => 'QR код',
|
||||
'requestable' => 'Потребителите могат да изписват актива',
|
||||
'select_statustype' => 'Избиране на тип на статуса',
|
||||
'serial' => 'Сериен номер',
|
||||
'status' => 'Статус',
|
||||
'supplier' => 'Доставчик',
|
||||
'tag' => 'Инвентарен номер',
|
||||
'update' => 'Обновяване на актив',
|
||||
'warranty' => 'Гаранция',
|
||||
'years' => 'години',
|
||||
)
|
||||
;
|
||||
Executable
+19
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
return array(
|
||||
'archived' => 'Архивиран',
|
||||
'asset' => 'Актив',
|
||||
'checkin' => 'Връщане на актив',
|
||||
'checkout' => 'Изписване на актив към потребител',
|
||||
'clone' => 'Копиране на актив',
|
||||
'deployable' => 'Може да бъде предоставен',
|
||||
'deleted' => 'Активът беше изтрит. <a href="/hardware/:asset_id/restore">Възстановяване</a>.',
|
||||
'edit' => 'Редакция на актив',
|
||||
'filetype_info' => 'Позволените типове файлове са png, gif, jpg, jpeg, doc, docx, pdf, txt, zip, и rar.',
|
||||
'model_deleted' => 'Моделът актив беше изтрит.Необходимо е да възстановите моделът, преди да възстановите актива.<br/> <a href="/hardware/models/:model_id/restore">Възстановяване на модел</a>.',
|
||||
'requestable' => 'Може да бъде изискван',
|
||||
'restore' => 'Възстановяване на актив',
|
||||
'pending' => 'Предстоящ',
|
||||
'undeployable' => 'Не може да бъде предоставян',
|
||||
'view' => 'Преглед на актив',
|
||||
);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user