Compare commits
1182 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 561c073489 | |||
| 8c6bf075fb | |||
| 217836099c | |||
| febe1d0132 | |||
| fab32124d8 | |||
| 9055eaf73c | |||
| d804074121 | |||
| 328f7adc06 | |||
| 843435ad3b | |||
| 0a6133a0c9 | |||
| 05313c123c | |||
| 712bc5e380 | |||
| 537ebec330 | |||
| fa46fe89e5 | |||
| a34dd4cc79 | |||
| 5c20387e1d | |||
| 3ea4b77827 | |||
| d2e82d7209 | |||
| 213eb35be1 | |||
| 7c9e601010 | |||
| bd2b35b2e6 | |||
| b19f21fdff | |||
| 4e632ff9f4 | |||
| 8e7d08e4c9 | |||
| 2f4cead6e1 | |||
| e65822ceb5 | |||
| 18aa123672 | |||
| 79024ddcac | |||
| 26e8ca0370 | |||
| 1b06aec692 | |||
| ff78941795 | |||
| 6af40d9cae | |||
| 7de0f88b9e | |||
| af264a8922 | |||
| bd2bd32d30 | |||
| 823af36971 | |||
| 582004c605 | |||
| 75e91dbc79 | |||
| f697e2413a | |||
| 15fe664418 | |||
| b0be426c62 | |||
| 116d7395c9 | |||
| ff36dadadc | |||
| 3660306c52 | |||
| 37044040c4 | |||
| 6b49cb29fe | |||
| e0d0f7b493 | |||
| 53910dcd62 | |||
| 8d9c450ed9 | |||
| 2f4bb9c1b8 | |||
| c45dab1c31 | |||
| 47326e6535 | |||
| b8fd2c992f | |||
| 4daaf6ffd0 | |||
| 7be59894e4 | |||
| 3f4a64e833 | |||
| f3b02436ee | |||
| a1447c38c3 | |||
| e424218b01 | |||
| 9df2a7853f | |||
| 92703f6bbd | |||
| d731187d62 | |||
| 2854f2f6ce | |||
| 5165a2cabb | |||
| b946e40608 | |||
| 25c38f5bcb | |||
| e4d56be0af | |||
| ce59a00d02 | |||
| 31682e57da | |||
| 195f975c6a | |||
| 0476b78d09 | |||
| 74083fac93 | |||
| 966209f573 | |||
| 6ab59ec1e5 | |||
| 3210225c1b | |||
| 102dffcc65 | |||
| 44c19a2c5f | |||
| 47a952c204 | |||
| 2fce840ed9 | |||
| d8bc1379be | |||
| 15605f2a00 | |||
| 0526a81e8e | |||
| e30e980833 | |||
| fcf3bc8400 | |||
| 9d513edab4 | |||
| 8580acdb0c | |||
| e2e9111860 | |||
| 38b8f37d30 | |||
| 13d42d9565 | |||
| 9537691756 | |||
| e328c4e6f1 | |||
| 1eb5185240 | |||
| 9e4594f8b4 | |||
| 20a16471a9 | |||
| 8c995d4c44 | |||
| 1cefa18895 | |||
| a94e40a6aa | |||
| 40694e5766 | |||
| 8461398ff8 | |||
| d20f256736 | |||
| 8d1e61ec8b | |||
| 7034a288d0 | |||
| b4718437fc | |||
| 844e19f11f | |||
| 4c1d8df918 | |||
| c24b7b26c1 | |||
| 43d3138740 | |||
| 926f8ae710 | |||
| 77f79ba891 | |||
| d9924accf7 | |||
| a937fd78f3 | |||
| a7ff46ca99 | |||
| 7c2d470551 | |||
| 8ca120716c | |||
| 5fdc6fcf4e | |||
| 0de18419a4 | |||
| 0b48f1ecef | |||
| e3169ff880 | |||
| f788162d26 | |||
| 6e8852e7e0 | |||
| c3dbfc717b | |||
| a28365ae03 | |||
| 60dd0cb403 | |||
| 2a55db5082 | |||
| 5cecdaed9e | |||
| 1f3f2632cd | |||
| d4f5207d39 | |||
| bd7aeeebe1 | |||
| 6e39fe1c7f | |||
| f09f819138 | |||
| 067c5e692b | |||
| e7012dd5f7 | |||
| 47782c1845 | |||
| 9b61bba0d3 | |||
| 763a5da061 | |||
| 417c778d8c | |||
| facd8c0856 | |||
| 351cde50a7 | |||
| 7f8a9e01c0 | |||
| 8dd5a31ad4 | |||
| c0e70bd07f | |||
| 7ae537516b | |||
| 3f79e67735 | |||
| 9c1adee62a | |||
| 46e97f586b | |||
| ec3c5e65e6 | |||
| d9728dc706 | |||
| 9b1a5a8772 | |||
| a8eef823ff | |||
| 9242bcf7e2 | |||
| 0209dbfc4c | |||
| 46f8377acb | |||
| f95e7c441b | |||
| 0f54b832e7 | |||
| b3cc5c71d9 | |||
| 79b052b221 | |||
| bb7839f74b | |||
| 2162a0b3fc | |||
| 5dab9100da | |||
| 0e6abf4f28 | |||
| 2f108ebdd3 | |||
| 7ca5637fe4 | |||
| 5e258917c4 | |||
| 3924b735df | |||
| ed77856a12 | |||
| 974a804d72 | |||
| 243dcf00a5 | |||
| e495131b7e | |||
| 8b02b0da12 | |||
| a75cb19ea7 | |||
| 8755630ab1 | |||
| 564ee415be | |||
| aad546ed72 | |||
| 75e4b539a9 | |||
| c4aa1a2990 | |||
| ef3084af91 | |||
| e66e4f898f | |||
| 523bf78d33 | |||
| 7fe91d59d7 | |||
| f621c3613f | |||
| 6886569864 | |||
| 7b706e7fc1 | |||
| 1ecef8e09f | |||
| 492648a592 | |||
| 0063498f43 | |||
| 4d7f527230 | |||
| 081a8fcb69 | |||
| 3e9d0237aa | |||
| 533007d72e | |||
| 035dd8351d | |||
| 9e67df84a1 | |||
| bfd843cfde | |||
| 8860f5687c | |||
| 628efdc4e1 | |||
| 42db8abf15 | |||
| 28304f99cf | |||
| f15fb309d1 | |||
| 9d43691710 | |||
| 5733be8968 | |||
| 379b35cfe0 | |||
| 35be37224f | |||
| af92a64383 | |||
| 9b74b25348 | |||
| 143185a286 | |||
| 80a5d40897 | |||
| d2ec5b15d4 | |||
| d9ede3aae3 | |||
| cf1a090792 | |||
| f74ae7a72c | |||
| fc02d0967f | |||
| 0901c3a7ca | |||
| 98ad3532df | |||
| 7dae6650c2 | |||
| fe4754921e | |||
| 5c6cb02f63 | |||
| b60d3fa96e | |||
| 6da2cd998d | |||
| 2941475270 | |||
| a0af9b831f | |||
| 9a2faa48b5 | |||
| 5e67402330 | |||
| 2666aaa808 | |||
| 36890d34c1 | |||
| 4f4b8ddc77 | |||
| 1e91bde9fc | |||
| a9769dd78c | |||
| 1cf7a61e74 | |||
| 7a01793bfd | |||
| f421c00593 | |||
| 3c1fdb92a2 | |||
| 24b2405429 | |||
| 36645d162a | |||
| 3cb955fcb7 | |||
| e8ea4c5815 | |||
| 0c7726a6e7 | |||
| f6312363b2 | |||
| 760a91b3a3 | |||
| 226cac656f | |||
| fa6fad0a57 | |||
| dd13704423 | |||
| 56ff3267cf | |||
| 80ce35aadb | |||
| 93a699989b | |||
| 8811f87281 | |||
| 34023c807f | |||
| 586a5b24d1 | |||
| cd9f7c5da5 | |||
| ce24ab98a8 | |||
| 41bdd059d1 | |||
| 4ddb34cf19 | |||
| 3633d9c292 | |||
| b9b7e30e41 | |||
| 1d7b17b2d2 | |||
| 9f6643247a | |||
| a82bb52cb2 | |||
| 91f433e41c | |||
| 2d77838a01 | |||
| 8c307dee5c | |||
| dd0854a6ef | |||
| 50987d15fb | |||
| 59798f47ce | |||
| 389fa5df04 | |||
| d7a66d69cb | |||
| 7e0f73d9d2 | |||
| 4c117d274a | |||
| d470352dcd | |||
| d91f224179 | |||
| 950c2ed87b | |||
| 9e2ed83a7a | |||
| 9e0cfefce9 | |||
| 1a8e28a3a5 | |||
| b475391189 | |||
| 20f52a0cfc | |||
| e3c1c6baef | |||
| dcb2ddd341 | |||
| b6a1879543 | |||
| 09d6b85bd4 | |||
| 52351c2ca7 | |||
| 9fe1506dd3 | |||
| 7837564f08 | |||
| 72168fe1de | |||
| 1dc0f5e31e | |||
| 8b1ecb4775 | |||
| 0167cc9142 | |||
| 59b49084f9 | |||
| eba119cb47 | |||
| 767bb155f6 | |||
| 74ead47e3f | |||
| cf060cc387 | |||
| c0552e87a8 | |||
| 8e53e21189 | |||
| 058fb40e57 | |||
| 9e4b044761 | |||
| 6b5db421ad | |||
| 359ffc4676 | |||
| 486add5955 | |||
| 5885d88aff | |||
| a4c9419180 | |||
| b9199f0e37 | |||
| 5e4555dcdf | |||
| bc37f08a11 | |||
| dbf5e4fee8 | |||
| 663f02d9b7 | |||
| 3eca7da2e9 | |||
| ac5ccc3a13 | |||
| c4f2392a5a | |||
| 8cc9abcaa4 | |||
| 82ec12ed36 | |||
| 8cf048fb4e | |||
| 875b0109f3 | |||
| 6d2d1603af | |||
| b0e960be84 | |||
| 7a4d5cbe2f | |||
| 69db4bed94 | |||
| a0eeac59f0 | |||
| 257ddbf775 | |||
| 707e7d8f31 | |||
| 0e4efcd209 | |||
| 37a73ee2fe | |||
| 3bbb952b49 | |||
| 5ef5a9fd12 | |||
| bf1973e425 | |||
| 1e969171a8 | |||
| 84bd09a01c | |||
| e5178e19fc | |||
| 732449f516 | |||
| 6a2bd0465c | |||
| 53bf6ba5b3 | |||
| a6d49bae99 | |||
| 1b48ee24fa | |||
| 683b326194 | |||
| ea6da9e282 | |||
| be960f9e3f | |||
| 840dbd0125 | |||
| 39e2832b93 | |||
| 4a7b41dde7 | |||
| 7e32367791 | |||
| 9fc55c2743 | |||
| 145399b6d2 | |||
| aac43ec24d | |||
| dc07d77e20 | |||
| 66cbbc4ee9 | |||
| 8e7cfe3150 | |||
| 7b8352f65d | |||
| c1460e25e9 | |||
| 55f42ed03c | |||
| ac48bc5a21 | |||
| 76d3d6f9e6 | |||
| 3c36c24ddb | |||
| c4df2bf0ce | |||
| 255f9556ee | |||
| 7762e8e5d6 | |||
| c54f491bdd | |||
| d6bc7e313a | |||
| d37618feb5 | |||
| 7812b04369 | |||
| 899fbb9ab9 | |||
| 4eff768b53 | |||
| dc1bac2237 | |||
| d08f8eaa7e | |||
| 98cbf96077 | |||
| 2b8a5313cd | |||
| 43fd04e289 | |||
| 6fbe53b8b9 | |||
| 844d22ddf3 | |||
| bf79ae7477 | |||
| 3ced78bcad | |||
| 3d61c0924b | |||
| b2dec4d903 | |||
| b2433a9775 | |||
| efd7fab27c | |||
| f612eb7cdd | |||
| 0a0255e24d | |||
| b664ad784e | |||
| 819e6e02f7 | |||
| d160f7e4f2 | |||
| bb4d10daa0 | |||
| 09204750c9 | |||
| 936feccec9 | |||
| f1320c971f | |||
| e47b2df5d2 | |||
| 7ad6468969 | |||
| c329437700 | |||
| d83353bc82 | |||
| 1122b57f4c | |||
| 0b5d00e4b8 | |||
| ccb807d8fc | |||
| 7f825f2a09 | |||
| d6d7b9ff61 | |||
| 2279ac009b | |||
| 8bb31472df | |||
| b4291bad33 | |||
| ec787f5d45 | |||
| 4fbc11438b | |||
| 421a9d769e | |||
| 98a11dfaf5 | |||
| fe6f0f0e7c | |||
| 3b3d611962 | |||
| 5da5639f48 | |||
| f8d5d1820c | |||
| 22ff20584c | |||
| 7728907b67 | |||
| 831ab1de20 | |||
| 1cdac18192 | |||
| db4f5d7d15 | |||
| 5cb4230156 | |||
| 6d575da0b7 | |||
| f86db5ff41 | |||
| 9966a8335c | |||
| 05b771badb | |||
| 45acc78dc9 | |||
| 4676f96889 | |||
| 5d23e63512 | |||
| ee5fe87802 | |||
| 6e9bad7247 | |||
| 76737c5f85 | |||
| bf57560b30 | |||
| 2d6cdb1a89 | |||
| 7014e5d685 | |||
| f7e0dc87fd | |||
| 3dcbfdac63 | |||
| d3c22d1b03 | |||
| f94a105443 | |||
| f7bb550189 | |||
| 0c6e2f5c99 | |||
| 45cb6b9f59 | |||
| 31e786b9fd | |||
| 1660919521 | |||
| 9c0dc1ef19 | |||
| fb12ccc028 | |||
| 80b87cad63 | |||
| bf2d937f48 | |||
| 566350bc28 | |||
| 246776f1a1 | |||
| b62596fe6f | |||
| 8373cbc790 | |||
| 0981d2a887 | |||
| 64ed5cffb2 | |||
| 8134102fbc | |||
| 4a287e9138 | |||
| 1d78a73def | |||
| 7b275a693b | |||
| 59f3642477 | |||
| 6e3a64049a | |||
| 7cf9b7c355 | |||
| 0a0c8b557d | |||
| 7a2ae4c2cd | |||
| 95ffa4356b | |||
| 6a839bb4a4 | |||
| c72f200cfc | |||
| 1881e6743a | |||
| 9eb40dcca1 | |||
| c2091623c7 | |||
| 0a2fd52dec | |||
| c4a521c81e | |||
| 4890692531 | |||
| 5f9dd15b82 | |||
| ce3b0df7fe | |||
| eedb0334f5 | |||
| 93c2f8ea0c | |||
| 7802babd0e | |||
| c1eb6d8aa3 | |||
| bf2dbfcc65 | |||
| 259dd14062 | |||
| f9565c09fb | |||
| e70d2b1915 | |||
| e8999cfb8f | |||
| 4f6edcae47 | |||
| 39e7a38001 | |||
| 3ea3193ba4 | |||
| e0cd9baf37 | |||
| 16df1b04b3 | |||
| cefaee00da | |||
| 0232114d18 | |||
| b70830265e | |||
| 398a09f3ec | |||
| eb521cae22 | |||
| f4e35dffbd | |||
| e9c45da195 | |||
| f0c30514ad | |||
| 778fc73c24 | |||
| 932e6477d3 | |||
| 0422946069 | |||
| f3e62c82dd | |||
| 32d370fbd3 | |||
| 808e2a0b15 | |||
| 9cef93a3e7 | |||
| ba0882d4b3 | |||
| 8a06e7bc83 | |||
| 58bfb72a9f | |||
| a4bb632c22 | |||
| 4c37be68fb | |||
| 50ddc7eecd | |||
| 503a69ed01 | |||
| c6cb0c487f | |||
| 25a6e195f0 | |||
| 90e4e18ce5 | |||
| b970eb06a9 | |||
| 5dc4582118 | |||
| fb77bedb4c | |||
| 3d0791c4cb | |||
| af535fd526 | |||
| 067363a1cb | |||
| acd014d01d | |||
| 80bb8214eb | |||
| dafbdc452f | |||
| 25413a22c0 | |||
| cf7e669397 | |||
| 459e499863 | |||
| 89dc659401 | |||
| 2fcbe4c158 | |||
| 8e36976860 | |||
| b4fd22c2e5 | |||
| 85a27def5d | |||
| a4b580f4bd | |||
| 6ff1da7c66 | |||
| 789dce59fe | |||
| 960d55ab18 | |||
| 2deb5238b2 | |||
| b18b770725 | |||
| f747844332 | |||
| 798645cb8d | |||
| d85ccdc683 | |||
| ce3f50910c | |||
| e6162fa099 | |||
| 1b2794c6bb | |||
| b1aec45832 | |||
| c1e0fff1b1 | |||
| 11d90e4194 | |||
| 9f4cae384a | |||
| d9ec5c22c5 | |||
| b0d92a13fa | |||
| 72e6f4a31a | |||
| 4cac30bc26 | |||
| 8b0f3db2bf | |||
| bc3851bfa2 | |||
| a88f9d888f | |||
| 63cc08f21d | |||
| a526e72817 | |||
| 9233f64868 | |||
| d8f97dce09 | |||
| 5dcb7c570b | |||
| f84935a7a1 | |||
| 7725573738 | |||
| d332431012 | |||
| 38ee9913b1 | |||
| 60588509c6 | |||
| 1769ba2b51 | |||
| c3c3423cd3 | |||
| 10de735c30 | |||
| bc68c1578d | |||
| 95e9e54921 | |||
| 92a9e17d0a | |||
| 6f889ec557 | |||
| dd7a2e9359 | |||
| f62380d008 | |||
| 2f45acb487 | |||
| 03d5aee48d | |||
| 3d37dc5771 | |||
| 4e42e8e03a | |||
| a9ac59cee4 | |||
| d1f3de4419 | |||
| 89f2906ffc | |||
| 87c9f15de4 | |||
| 430f243e18 | |||
| 2da9e293d9 | |||
| e20648591d | |||
| 83aec0d814 | |||
| 2b0f11cfbd | |||
| 3d9f02d7d7 | |||
| f912572404 | |||
| 7cc8959b21 | |||
| cba5a35a61 | |||
| 452e5500c5 | |||
| c17125afde | |||
| 9c2c1b4dc8 | |||
| a65ece8f2d | |||
| 814de375ff | |||
| d45dd62401 | |||
| f618891a47 | |||
| 7f67bc1a39 | |||
| 3acf4e3bcc | |||
| 593ea04ad9 | |||
| 1211ea8ac9 | |||
| 5a361c0bb3 | |||
| fc864a9b00 | |||
| 90b5681603 | |||
| 0829144478 | |||
| 4f841a09ad | |||
| cd0927c281 | |||
| 1a483b827d | |||
| da597729a0 | |||
| 73b7c28db2 | |||
| 1f4b48ac8c | |||
| 22668e8a8f | |||
| 4662e48d65 | |||
| 37dad87c2a | |||
| 658aeaed52 | |||
| 48e09805d9 | |||
| c06e995e45 | |||
| 8a7642f238 | |||
| bdb2886c36 | |||
| 41ef6bc4ae | |||
| b4a4246713 | |||
| acb6d78a0f | |||
| a84c68ca17 | |||
| 6890b57b44 | |||
| 6f244c453c | |||
| f73c62c3df | |||
| 237a770067 | |||
| 33ff2cb49d | |||
| af7998273d | |||
| 58bd716057 | |||
| 20e6e4b77e | |||
| bc383bd82a | |||
| baa248e5ad | |||
| 10f20ee29a | |||
| 0306fdc72b | |||
| 2d83e27d89 | |||
| 1ec3aa58d4 | |||
| 37e4db9dcd | |||
| a79c5e87d8 | |||
| 387a3a9a54 | |||
| 79f9adea19 | |||
| bac4b1c29a | |||
| e4f304bac6 | |||
| ef1e27c0c4 | |||
| 3ebfdaeded | |||
| 8c0e3deb02 | |||
| 9f36bfbbb5 | |||
| 790ea09c2e | |||
| 23e4998948 | |||
| 5b79a15a3f | |||
| c1bf40a38c | |||
| 6e9795f1c0 | |||
| 019af7b3d9 | |||
| f7cdb29a4e | |||
| 7b2a51c87f | |||
| f291017645 | |||
| 9b65b068fc | |||
| 5019dfca60 | |||
| cbb86cebd3 | |||
| ced2cd90a3 | |||
| ea66ab89c5 | |||
| 4acdd09ad3 | |||
| b130acdf25 | |||
| 42044beae2 | |||
| 63c4ce6ad8 | |||
| eb38ede510 | |||
| 961a6d2533 | |||
| a798c9ddaf | |||
| 4053db453f | |||
| 47353bdbf8 | |||
| 2754a4a634 | |||
| aedaf7e0ec | |||
| 961d707a6d | |||
| 8de959ba5c | |||
| 45aac2c576 | |||
| 5edbe0e41b | |||
| 6e638bf5ae | |||
| c6ad8a8f43 | |||
| 7157ba1c10 | |||
| d8d2651892 | |||
| e3b2627551 | |||
| 99a2aae3ed | |||
| d6ea2ee79a | |||
| 24e10a35b4 | |||
| b6727a64f5 | |||
| 3b61a228eb | |||
| e09933cae5 | |||
| f941e6f940 | |||
| 70038a082e | |||
| da54e538cf | |||
| 69880f958d | |||
| f9ef530fe0 | |||
| e107d909de | |||
| 05d37e218d | |||
| 0381c9a5ef | |||
| 5cc3ca11e6 | |||
| b657e01129 | |||
| cb3e30a56c | |||
| 61e2bcab96 | |||
| 9d2041848c | |||
| d37ed44106 | |||
| 236ebb6fb0 | |||
| 38e5327ca0 | |||
| 94ba39f025 | |||
| 71fc5a81d4 | |||
| 2747e11231 | |||
| 29079a578f | |||
| fffd86cb30 | |||
| 0ef3f8b84b | |||
| 167aa2d98a | |||
| 31d8269399 | |||
| 4d43230a0b | |||
| 70d3e50baf | |||
| da4613bf8c | |||
| de68e33118 | |||
| 878c241eec | |||
| 72aeca2f13 | |||
| 78673138c2 | |||
| fd314caa86 | |||
| fe32fcd95a | |||
| e83ae513a8 | |||
| cbd4a90d01 | |||
| af92264847 | |||
| bf94c59bef | |||
| b70133272f | |||
| 55f6abdd1b | |||
| 959d0f8f5a | |||
| 078101ccb4 | |||
| 4b2a9dbd3e | |||
| afc3e4039c | |||
| 389f3a4289 | |||
| beb7ebd509 | |||
| 3b44311f6a | |||
| f5508bc5c3 | |||
| 2cf23d1000 | |||
| f6864e7c2e | |||
| 5e76d56abe | |||
| 97852fc5bf | |||
| 000543148a | |||
| d627b4c766 | |||
| 0d4b9c9089 | |||
| 8e0407ae1b | |||
| e07b1d3ad2 | |||
| af6009eb82 | |||
| 44c98a29d9 | |||
| d344b49ff0 | |||
| 62fb0e38b3 | |||
| 4049a29407 | |||
| ef3dad095d | |||
| 18f60cda6d | |||
| 0d4e4046a6 | |||
| 28c4adff0d | |||
| cfb94906c5 | |||
| de16144059 | |||
| 20eb1c2b62 | |||
| 18b7449149 | |||
| 9cbcc5feac | |||
| 64d452e41e | |||
| 3269e991dc | |||
| c67fa2b2d2 | |||
| d3dd1427a6 | |||
| 1a659333d6 | |||
| 9482f06ee8 | |||
| 0a4a756a6c | |||
| e127246219 | |||
| 7ad945d84b | |||
| 14b9232d65 | |||
| b57eac8bb6 | |||
| 20185dcc59 | |||
| 605ffedbf6 | |||
| 0ad38a5bf4 | |||
| 74aea484f8 | |||
| 8a94f6ed2d | |||
| a95447e355 | |||
| 7e91f23ddb | |||
| e5c53e0c56 | |||
| ebe4fe51b1 | |||
| 69f9c789a5 | |||
| 4ef29573f5 | |||
| 7ca436fd80 | |||
| d429a9770f | |||
| bb1823bdf8 | |||
| af938f958c | |||
| 928e724f5d | |||
| a88a6db9d9 | |||
| d673a6f455 | |||
| 183845d94f | |||
| cc95d7f5b4 | |||
| 665c401eca | |||
| ba0700c9d2 | |||
| 62b2d33c15 | |||
| 6e5d9ed16f | |||
| d7f106acb2 | |||
| e723c9b8c1 | |||
| 21542a8492 | |||
| b5840ebed8 | |||
| 593fec01f9 | |||
| 221df16a99 | |||
| 6f1049c667 | |||
| c6e17f32b8 | |||
| 3f7c42f31e | |||
| 75aa41d365 | |||
| c6b838d389 | |||
| 231177614b | |||
| db0a44b126 | |||
| 1a55cbe5ee | |||
| 05f0e41cb1 | |||
| 2d5ad4234c | |||
| 02247f73cf | |||
| 258cbf105b | |||
| 306e83b6d6 | |||
| 4d26ad9d4d | |||
| 879ba50542 | |||
| c39831ca5e | |||
| 07ed5c7632 | |||
| 2c70f3e164 | |||
| a6e7cc6239 | |||
| db42ab3655 | |||
| 32b3789efc | |||
| 2f900e9d9c | |||
| 583df34487 | |||
| f4b5870f06 | |||
| f56a4928c6 | |||
| e8c88b20d4 | |||
| 6eb88851c4 | |||
| 417e40c87b | |||
| 8c1f2be1f1 | |||
| 8e2d7871f9 | |||
| 6fc9a883d7 | |||
| 087e6318f6 | |||
| 7d077b6576 | |||
| ed45a5c351 | |||
| 7390a01a12 | |||
| 26c6900c79 | |||
| 3d4c3017da | |||
| 4388c6e540 | |||
| 16cfc2bfd5 | |||
| 5cbc26981b | |||
| 36ed3d46ee | |||
| 0dde1e871c | |||
| d9b11f6f3f | |||
| cf53bfcada | |||
| 5fedb42c96 | |||
| a95810710e | |||
| 8a0fb121ae | |||
| 7ceb6ecab3 | |||
| 8acd0ec5be | |||
| 5e21087eca | |||
| 3f881e208a | |||
| c708c98867 | |||
| 0b5e3d966f | |||
| 7fdfbba0de | |||
| 084dc503d2 | |||
| 390677ff2a | |||
| 61f6e94c26 | |||
| e7dcefb069 | |||
| 32d872c0eb | |||
| fab446a312 | |||
| 2bd73d4601 | |||
| 681977ce83 | |||
| 35ce8e8066 | |||
| 62edd61246 | |||
| c5c95056c2 | |||
| 3618581955 | |||
| 4cc77d52e0 | |||
| 813ee7e591 | |||
| 851e2a8b35 | |||
| 8c44154ed5 | |||
| f722f99bb0 | |||
| 8c490c4555 | |||
| 7cfcdaf7f9 | |||
| 36ecac7d5e | |||
| 808ccb6d5c | |||
| 6e2e267c42 | |||
| 7238b73b14 | |||
| cebe4b13a2 | |||
| d4526ffdb5 | |||
| e3f22ad128 | |||
| c208878f6c | |||
| 7fd7710e9d | |||
| 79948d67d7 | |||
| f8e01399ca | |||
| e57f664f24 | |||
| be7d31b049 | |||
| aab394efce | |||
| f64d6cb76d | |||
| 6c73b51a88 | |||
| ce0f963b9d | |||
| 606a3cf253 | |||
| 3ce03226b7 | |||
| 86293e28ad | |||
| 1219888cad | |||
| 39728fa2fc | |||
| 699157d7c7 | |||
| 26a70244de | |||
| 0c854ff472 | |||
| 1c50b03a71 | |||
| 609d03ce9b | |||
| 4c0f591de9 | |||
| 69c010a9af | |||
| 86c5657d51 | |||
| c1e006c5d1 | |||
| 1d629e802b | |||
| 049ac1f991 | |||
| d467cd1f73 | |||
| 60f55b58af | |||
| e85a253e6e | |||
| c9f054adab | |||
| 8904f179b8 | |||
| 7a18068078 | |||
| d69303ef03 | |||
| c0fec71b5d | |||
| fb3795e38a | |||
| 69dbf46a70 | |||
| e95fc39300 | |||
| 6605028499 | |||
| 5d6a72c7cd | |||
| e9eaab2577 | |||
| 33c2221acb | |||
| a7d7dfe44e | |||
| 47be99a78b | |||
| e079f683f3 | |||
| 6380550300 | |||
| 28992a0310 | |||
| bce9892a16 | |||
| 0b643557ba | |||
| 8f39806669 | |||
| d1bd15569e | |||
| d9c5e8ccce | |||
| 713dc9f191 | |||
| d6a27be92e | |||
| 488947216e | |||
| 90804af90b | |||
| ab185a5173 | |||
| 7d00b5f850 | |||
| 3411cb15a4 | |||
| b3864d21e3 | |||
| 3ecea06832 | |||
| 456104ef3e | |||
| 4085feb8db | |||
| e43c7a5990 | |||
| b1508cdc1a | |||
| cb8f5fe531 | |||
| 08a33a3e7b | |||
| 63e6285c5e | |||
| 31431308ae | |||
| b7d5ad5d81 | |||
| 872c026dca | |||
| 8f8e1f1153 | |||
| 16c2767c09 | |||
| 4e5910b0be | |||
| a12d82a3e8 | |||
| 757555962b | |||
| c5f2bff11d | |||
| 4464c90ad4 | |||
| fe0b2496e7 | |||
| 5dc51b41f7 | |||
| 090f875806 | |||
| 293644ac72 | |||
| 3fad6d7428 | |||
| ce8a10b5b8 | |||
| 91d7c8598f | |||
| 0daa2de23b | |||
| 281050a55a | |||
| 5dd304157f | |||
| d07747368a | |||
| e2d1a3f63e | |||
| 5bbb674ac5 | |||
| 574bd7c57c | |||
| 29b6757e53 | |||
| 4fac41e084 | |||
| 77834c0268 | |||
| 1295c593ac | |||
| 51d8d563b8 | |||
| 3586a8438c | |||
| 6ca217d76e | |||
| a77d77fcfa | |||
| 7c20a7ee8c | |||
| 8a808856de | |||
| 6b90cd6769 | |||
| 90742a5815 | |||
| 3db816c41d | |||
| dc9ee5bff1 | |||
| 6e49457b88 | |||
| f6496fe162 | |||
| 6931f499b1 | |||
| 68dd1c3859 | |||
| 620572e250 | |||
| 9467a57c5f | |||
| 09c12b4cd4 | |||
| 88edbe763b | |||
| 57c41c7a60 | |||
| bd08659e8c | |||
| 50d65eebaa | |||
| f33a17c156 | |||
| 506bc83006 | |||
| 4711d122d9 | |||
| 30e7ad2c5a | |||
| 8f7ebec2c0 | |||
| f037786163 | |||
| d1f9dc03ab | |||
| 37424d3ed0 | |||
| 6f6c134890 | |||
| 66f154902b | |||
| a18d91fabb | |||
| c800484a5f | |||
| 5fc45f056a | |||
| 6765e70a76 | |||
| 1db1760be4 | |||
| b456894669 | |||
| cc941b265c | |||
| 1b475ddeee | |||
| 39df2e6e11 | |||
| eb009e35b3 | |||
| df32e85aab | |||
| 750745209f | |||
| 8621c5b5cb | |||
| 70f4f8ce8b | |||
| 9bb4e1e9a9 | |||
| c018d096ec | |||
| 6c109f3a45 | |||
| 3db6e458af | |||
| 14529e9ad7 | |||
| 60fcf7aa8d | |||
| 3be139fe0a | |||
| f430dddc82 | |||
| e1f84a7f4f | |||
| 344b2d94df | |||
| f63c290a58 | |||
| 1052fe8295 | |||
| 01d4cd6255 | |||
| bc21756af5 | |||
| 25aa82adaa | |||
| 90523ad0ab | |||
| ff6878dbd7 | |||
| ce9b41e8c1 | |||
| 4023c58c35 | |||
| 5d876b61d1 | |||
| dfde08a4ea | |||
| 674cf286b0 | |||
| d8ccf06912 | |||
| b3f2029fff | |||
| 538e347923 | |||
| 95c36a8f3d | |||
| 7d48f67f02 | |||
| b8b3a58b52 | |||
| 0aad875551 | |||
| 2d89f401dc | |||
| b32bafda51 | |||
| 256851a0ce | |||
| 43aae08d1e | |||
| 5bef1602cb | |||
| d2a77e9dd0 | |||
| 77653d02c2 | |||
| 8b46d7abc8 | |||
| 27f627aa67 | |||
| 5fe1e9ea8f | |||
| 5885e8a2cf | |||
| a668ed9cbd | |||
| f2a6521229 | |||
| 53ef92a1d4 | |||
| a40ed4496e | |||
| 4c57bc1efb | |||
| 24b8def4ee | |||
| fb012082f4 | |||
| 87ceb0a1bb | |||
| b1cefb4f3d | |||
| 352ba1949b | |||
| a8353a4769 | |||
| 08c03bf6b3 | |||
| 4401907b10 | |||
| 9eb3ef6645 | |||
| a9f2af1025 | |||
| 4d71642dde | |||
| d14aa1ad8e | |||
| 9718217201 | |||
| f9881673b1 | |||
| 499bdd7348 | |||
| 69e7f41940 | |||
| 4d0600d5ac | |||
| 357e505e87 | |||
| dc53265634 | |||
| bea9ca5cc0 | |||
| 4a41fdbc38 | |||
| 0327d8617a | |||
| bd8212fdba | |||
| d05d2e7ae8 | |||
| faee11aab2 | |||
| 62ba7f2aa7 | |||
| f65e914093 | |||
| ec24aa68c1 | |||
| 82e35f1b70 | |||
| 9bba40c80e | |||
| 800cbaaec4 | |||
| 605d2a16b7 | |||
| d61b015c87 | |||
| c56d25139d | |||
| 62fd1d0ab2 | |||
| c2d70d515f | |||
| a00ed182e0 | |||
| 380f386f91 | |||
| 3e65a0dc7b | |||
| 882c68ff27 | |||
| 76d8628b2a | |||
| a0da9dedab | |||
| ec35191b70 | |||
| d2c4b7a763 | |||
| d7612af6a4 | |||
| 695f6e9152 | |||
| 0870c45137 | |||
| ee2a3e6354 | |||
| 8d0870477b | |||
| a66c0fdadf | |||
| d1f694da1b | |||
| 9f8910d48e | |||
| f331967417 | |||
| 37e54bc587 | |||
| c5e433a642 | |||
| fc5ec8d92a | |||
| 2c5f9d9329 | |||
| 2346c67f3a | |||
| d48ba9deb0 | |||
| d4c48ee62f | |||
| f71517425d | |||
| a329bb4c5b | |||
| 0b1273c61f | |||
| be0f1076db | |||
| 5caad8c1d7 | |||
| e974be99c5 | |||
| f44c32d501 | |||
| 1b6d28f2eb | |||
| a2a63e283d | |||
| 6ca41ed720 | |||
| ffec555e85 | |||
| 880df2a180 | |||
| 9d6f692b4d | |||
| 5bd120c4fa | |||
| 7a9da8eedf | |||
| 27b88b3d62 | |||
| d3c95a9fe1 | |||
| e4fd85c9cb | |||
| b3b81de6a8 | |||
| 4ee2ef1eb9 | |||
| 645bc8d695 | |||
| b4275d84c8 | |||
| 18c58522a2 | |||
| 417aaa9d28 | |||
| 84d8ea5d97 | |||
| 1e1d29d187 | |||
| 15dc9b4334 | |||
| 042c57c18c | |||
| 72c3df8172 | |||
| d9fa23b17b | |||
| 76b84f24d3 | |||
| f92d2f7f27 | |||
| 5cea4857dd | |||
| 9fad86eb17 | |||
| 3623e0059f | |||
| 13682c04a6 | |||
| 90a3d685b4 | |||
| be16c2ec56 | |||
| 9613a7f2a1 | |||
| 40ae593144 | |||
| 3228b95ef7 | |||
| 9ed2faf476 | |||
| 35e9be2b76 | |||
| 60f983df9b | |||
| ea2f942f94 | |||
| d4708c4bc8 | |||
| 101ac61b14 | |||
| bc1364c129 | |||
| 6f46ba5232 | |||
| 6c3cf425f2 | |||
| cd1cdb13fc | |||
| 92771d3257 | |||
| d9064b6605 | |||
| eb2e10ff02 | |||
| bcac3259d0 | |||
| acc12b187f | |||
| 522b13ad83 | |||
| f8a3298e36 | |||
| a5774e2bb3 | |||
| b8e5197bc7 | |||
| 76708b49fb | |||
| 7d2dd68344 | |||
| 7ce1a7b54e | |||
| d8c8d8dbb9 | |||
| a559357005 | |||
| 4381525430 | |||
| f200f11774 | |||
| af78e7cbab | |||
| 541e5ed046 | |||
| 6806f7ffe5 | |||
| e6179601fb | |||
| 9007a4df85 | |||
| 7b5c7afd54 | |||
| 806b4918cb | |||
| ec87d291ad | |||
| dc8879d7c6 |
+124
-10
@@ -5,6 +5,7 @@ variables:
|
||||
APP_NAME: 'MP.Stats'
|
||||
SOL_NAME: 'MP-STATS'
|
||||
NUGET_PATH: 'C:\Tools\nuget.exe'
|
||||
DEST: 'install'
|
||||
|
||||
# nota: cer creazione rules: https://docs.gitlab.com/ee/ci/jobs/job_control.html#common-if-clauses-for-rules
|
||||
|
||||
@@ -41,6 +42,20 @@ variables:
|
||||
echo "Situazione sorgenti FINALE:"
|
||||
dotnet nuget list source
|
||||
|
||||
|
||||
# helper x fix appsettings config nei casi installer / office
|
||||
.appsettings-fix: &appsettings-fix
|
||||
- |
|
||||
echo "esecuzione FIX appsettings.json"
|
||||
$srcFile="$env:APP_NAME/appsettings.Production-install.json"
|
||||
$dstFile="$env:APP_NAME/appsettings.Production.json"
|
||||
if (($env:DEST -ne 'install')) {
|
||||
$srcFile="$env:APP_NAME/appsettings.Production-office.json"
|
||||
}
|
||||
echo "Copy-Item -Path $srcFile -Destination $dstFile -force"
|
||||
Copy-Item -Path $srcFile -Destination $dstFile -force
|
||||
echo "Completata copia file appsettings.json corretto"
|
||||
|
||||
# helper creazione hash files x IIS
|
||||
.hashBuild: &hashBuild
|
||||
- |
|
||||
@@ -77,6 +92,7 @@ variables:
|
||||
}
|
||||
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file "$env:APP_NAME\Resources\manifest.xml" https://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/LAST/manifest.xml
|
||||
mCurl -v -u GitLab:$NEXUS_PASSWD --upload-file "$env:APP_NAME\Resources\ChangeLog.html" https://nexus.steamware.net/repository/SWS/$env:NEXUS_PATH/$version/LAST/ChangeLog.html
|
||||
|
||||
# helper x fix version number
|
||||
.version-fix: &version-fix
|
||||
- |
|
||||
@@ -184,7 +200,7 @@ MON:build:
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: MP.Mon
|
||||
APP_NAME: MP.MON
|
||||
SOL_NAME: MP-MON
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == 'develop'
|
||||
@@ -269,6 +285,24 @@ IOC:build:
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
|
||||
RIOC:build:
|
||||
stage: build
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: MP.RIOC
|
||||
SOL_NAME: MP-RIOC
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == 'develop'
|
||||
- if: $CI_COMMIT_BRANCH == 'master'
|
||||
- if: $CI_COMMIT_BRANCH =~ /^feature\/IOC.+/
|
||||
when: always
|
||||
before_script:
|
||||
- *nuget-fix
|
||||
- dotnet restore "$env:SOL_NAME.sln"
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
|
||||
TAB3:build:
|
||||
stage: build
|
||||
tags:
|
||||
@@ -334,8 +368,6 @@ LAND:SDK:deploy:
|
||||
- '& "$env:NUGET_PATH" setapikey $NUGET_API_KEY -source http://nexus.steamware.net/repository/nuget-hosted'
|
||||
- '& "$env:NUGET_PATH" push *$env:NUM_DEB.nupkg -Source http://nexus.steamware.net/repository/nuget-hosted'
|
||||
|
||||
|
||||
|
||||
PROG:IIS01:deploy:
|
||||
stage: deploy
|
||||
tags:
|
||||
@@ -379,7 +411,7 @@ MON:IIS01:deploy:
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: MP.Mon
|
||||
APP_NAME: MP.MON
|
||||
SOL_NAME: MP-MON
|
||||
before_script:
|
||||
- *nuget-fix
|
||||
@@ -469,6 +501,25 @@ IOC:IIS01:deploy:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
- dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
|
||||
|
||||
RIOC:IIS01:deploy:
|
||||
stage: deploy
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: MP.RIOC
|
||||
SOL_NAME: MP-RIOC
|
||||
before_script:
|
||||
- *nuget-fix
|
||||
- dotnet restore "$env:SOL_NAME.sln"
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == 'develop'
|
||||
- if: $CI_COMMIT_BRANCH =~ /^feature\/IOC.+/
|
||||
when: always
|
||||
needs: ["RIOC:build"]
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
- dotnet publish -p:PublishProfile=IIS01.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
|
||||
|
||||
TAB3:IIS01:deploy:
|
||||
stage: deploy
|
||||
tags:
|
||||
@@ -516,11 +567,14 @@ PROG:IIS03:deploy:
|
||||
variables:
|
||||
APP_NAME: MP.Prog
|
||||
SOL_NAME: MP-PROG
|
||||
DEST: office.egalware.com
|
||||
before_script:
|
||||
- *nuget-fix
|
||||
- dotnet restore "$env:SOL_NAME.sln"
|
||||
- *appsettings-fix
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == 'master'
|
||||
- if: $CI_COMMIT_BRANCH == 'develop'
|
||||
needs: ["PROG:build"]
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
@@ -550,7 +604,7 @@ MON:IIS03:deploy:
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: MP.Mon
|
||||
APP_NAME: MP.MON
|
||||
SOL_NAME: MP-MON
|
||||
before_script:
|
||||
- *nuget-fix
|
||||
@@ -635,6 +689,24 @@ IOC:IIS03:deploy:
|
||||
- dotnet publish -p:PublishProfile=IIS03.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
|
||||
- dotnet publish -p:PublishProfile=IIS04.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
|
||||
|
||||
RIOC:IIS03:deploy:
|
||||
stage: deploy
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: MP.RIOC
|
||||
SOL_NAME: MP-RIOC
|
||||
before_script:
|
||||
- *nuget-fix
|
||||
- dotnet restore "$env:SOL_NAME.sln"
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == 'master'
|
||||
needs: ["RIOC:build"]
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
- dotnet publish -p:PublishProfile=IIS03.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
|
||||
- dotnet publish -p:PublishProfile=IIS04.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
|
||||
|
||||
TAB3:IIS03:deploy:
|
||||
stage: deploy
|
||||
tags:
|
||||
@@ -647,7 +719,7 @@ TAB3:IIS03:deploy:
|
||||
- dotnet restore "$env:SOL_NAME.sln"
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == 'master'
|
||||
needs: ["IOC:build"]
|
||||
needs: ["TAB3:build"]
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
- dotnet publish -p:PublishProfile=IIS03.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release -p:username=jenkins -p:Password=$IIS_PWD -p:AllowUntrustedCertificate=true -p:verbosity=quiet $env:APP_NAME/$env:APP_NAME.csproj
|
||||
@@ -727,7 +799,7 @@ MON:installer:
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: MP.Mon
|
||||
APP_NAME: MP.MON
|
||||
SOL_NAME: MP-MON
|
||||
NEXUS_PATH: MP-MON
|
||||
before_script:
|
||||
@@ -854,6 +926,28 @@ IOC:installer:
|
||||
- *hashBuild
|
||||
- *nexusUpload
|
||||
|
||||
RIOC:installer:
|
||||
stage: installer
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: MP.RIOC
|
||||
SOL_NAME: MP-RIOC
|
||||
NEXUS_PATH: MP-RIOC
|
||||
before_script:
|
||||
- *nuget-fix
|
||||
- dotnet restore "$env:SOL_NAME.sln"
|
||||
rules:
|
||||
- if: $CI_COMMIT_BRANCH == 'master'
|
||||
- if: $CI_COMMIT_BRANCH == 'develop'
|
||||
needs: ["IOC:build"]
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
- dotnet publish -p:PublishProfile=IISProfile.pubxml -p:RunCodeAnalysis=false -p:Configuration=Release $env:APP_NAME/$env:APP_NAME.csproj -o:publish -p:verbosity=quiet
|
||||
# qui il deploy su nexus...
|
||||
- *hashBuild
|
||||
- *nexusUpload
|
||||
|
||||
# --------------------------------
|
||||
# RELEASE (tags only + sdk)
|
||||
# --------------------------------
|
||||
@@ -878,7 +972,6 @@ LAND:release:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
- dotnet publish -c Release -o ./publish $env:APP_NAME/$env:APP_NAME.csproj -p:verbosity=quiet
|
||||
|
||||
|
||||
LAND:SDK:release:
|
||||
stage: release
|
||||
tags:
|
||||
@@ -948,7 +1041,7 @@ MON:release:
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: MP.Mon
|
||||
APP_NAME: MP.MON
|
||||
SOL_NAME: MP-MON
|
||||
NEXUS_PATH: MP-MON
|
||||
before_script:
|
||||
@@ -962,7 +1055,7 @@ MON:release:
|
||||
- publish/
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
- dotnet publish -c Release -o ./publish $env:APP_NAME/$env:APP_NAME.csproj -p:verbosity=quiet
|
||||
- dotnet publish -c Release -o ./publish $env:APP_NAME.csproj -p:verbosity=quiet
|
||||
|
||||
SPEC:release:
|
||||
stage: release
|
||||
@@ -1048,3 +1141,24 @@ IOC:release:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
- dotnet publish -c Release -o ./publish $env:APP_NAME/$env:APP_NAME.csproj -p:verbosity=quiet
|
||||
|
||||
RIOC:release:
|
||||
stage: release
|
||||
tags:
|
||||
- win
|
||||
variables:
|
||||
APP_NAME: MP.RIOC
|
||||
SOL_NAME: MP-RIOC
|
||||
NEXUS_PATH: MP-RIOC
|
||||
before_script:
|
||||
- *nuget-fix
|
||||
- dotnet restore "$env:SOL_NAME.sln"
|
||||
rules:
|
||||
- if: $CI_COMMIT_TAG
|
||||
needs: ["IOC:build"]
|
||||
artifacts:
|
||||
paths:
|
||||
- publish/
|
||||
script:
|
||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||
- dotnet publish -c Release -o ./publish $env:APP_NAME/$env:APP_NAME.csproj -p:verbosity=quiet
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -10,7 +10,7 @@
|
||||
"request": "launch",
|
||||
"preLaunchTask": "build",
|
||||
// If you have changed target frameworks, make sure to update the program path.
|
||||
"program": "${workspaceFolder}/MP.Stats/bin/Debug/net6.0/MP.Stats.dll",
|
||||
"program": "${workspaceFolder}/MP.Stats/bin/Debug/net8.0/MP.Stats.dll",
|
||||
"args": [],
|
||||
"cwd": "${workspaceFolder}/MP.Stats",
|
||||
"stopAtEntry": false,
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
# MAPO-CORE Agent Instructions
|
||||
|
||||
## Core Context
|
||||
- **Primary Goal**: Optimization and refactoring of the `MP-SPEC.sln` solution, focusing on migrating legacy Redis/DB caching to `FusionCache` (Memory + Redis + DB) in `MP.SPEC\Data\MpDataService.cs`.
|
||||
- **Language**: C# (primary), PowerShell (scripts).
|
||||
- **Documentation/Comments**: MUST be in **Italiano**.
|
||||
- **Code Style**: Maintain existing region organization (`#region Public Methods`, etc.).
|
||||
- **Reference Docs**: See `Refactor_Plan.md` for the current migration status and detailed strategy.
|
||||
|
||||
## Development Workflow
|
||||
- **Build & Verification**:
|
||||
- Use `./build_all_par.ps1 --agent` to build all solutions silently.
|
||||
- Always verify that changes do not leave partial traces of old classes that break compilation.
|
||||
- **Refactoring Strategy (`MpDataService.cs`)**:
|
||||
- Use `GetOrFetchAsync<T>(string operationName, string cacheKey, Func<Task<T>> fetchFunc, TimeSpan expiration, params string[] tags)` as the standard for all data access.
|
||||
- Target methods currently using manual `redisDb.StringGetAsync` / `StringSetAsync` patterns.
|
||||
- **Testing**:
|
||||
- Check the codebase for existing testing patterns before proposing new ones.
|
||||
|
||||
## Architecture Notes
|
||||
- **Multi-Layer Caching**: The system is transitioning from a dual-layer (Redis + DB) to a triple-layer approach via `IFusionCache`.
|
||||
- **Service Responsibility**: `MpDataService` is the central hub for data access, interacting with `MpSpecController` (EFCore) and `MpMongoController` (MongoDB).
|
||||
- **Key Management**: Cache keys are heavily managed via `Utils.redis...` constants. Use these to prevent key mismatches.
|
||||
|
||||
BIN
Binary file not shown.
+1
-1
@@ -89,7 +89,7 @@ ExecuteLog "7z x ""$SourceDir\$ZipFile"" "
|
||||
|
||||
# step 3 : replica applicazione
|
||||
Write-Host "START copy step"
|
||||
ExecuteLog "robocopy '$utilDir\publish\net6.0\' '$DestDir' /MIR /Z /LOG:'$logMirror'"
|
||||
ExecuteLog "robocopy '$utilDir\publish\net8.0\' '$DestDir' /MIR /Z /LOG:'$logMirror'"
|
||||
Write-Host "END copy step"
|
||||
|
||||
# step 4 : riavvio pool
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
<Project>
|
||||
<PropertyGroup>
|
||||
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
|
||||
<CentralPackageTransitivePinningEnabled>false</CentralPackageTransitivePinningEnabled>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageVersion Include="Blazored.LocalStorage" Version="4.5.0" />
|
||||
<PackageVersion Include="Blazored.SessionStorage" Version="2.4.0" />
|
||||
<PackageVersion Include="DiffMatchPatch" Version="1.0.3" />
|
||||
<PackageVersion Include="EgwCoreLib.Razor" Version="1.5.2605.511" />
|
||||
<PackageVersion Include="EgwCoreLib.Utils" Version="1.5.2605.511" />
|
||||
<PackageVersion Include="MailKit" Version="4.16.0" />
|
||||
<PackageVersion Include="Majorsoft.Blazor.Components.Debounce" Version="1.5.0" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authentication.Negotiate" Version="8.0.25" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Authorization" Version="8.0.25" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Components" Version="8.0.25" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Components.Web" Version="8.0.25" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.25" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Server" Version="8.0.25" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.Http.Connections.Common" Version="8.0.25" />
|
||||
<PackageVersion Include="Microsoft.AspNetCore.WebUtilities" Version="8.0.25" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="6.0.36" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.36" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.36" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.36" />
|
||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.36" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="8.0.25" />
|
||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="6.0.1" />
|
||||
<PackageVersion Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.17" />
|
||||
<PackageVersion Include="MongoDB.Driver" Version="2.19.0" />
|
||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
|
||||
<PackageVersion Include="NLog" Version="6.1.3" />
|
||||
<PackageVersion Include="NLog.Targets.OpenTelemetryProtocol" Version="1.2.6" />
|
||||
<PackageVersion Include="NLog.Web.AspNetCore" Version="6.1.3" />
|
||||
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.15.3" />
|
||||
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.3" />
|
||||
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.15.3" />
|
||||
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.2" />
|
||||
<PackageVersion Include="OpenTelemetry.Instrumentation.SqlClient" Version="1.15.2" />
|
||||
<PackageVersion Include="OpenTelemetry.Instrumentation.StackExchangeRedis" Version="1.15.0-beta.1" />
|
||||
<PackageVersion Include="Snappier" Version="1.3.1" />
|
||||
<PackageVersion Include="System.Text.Encodings.Web" Version="8.0.0" />
|
||||
<PackageVersion Include="RestSharp" Version="112.0.0" />
|
||||
<PackageVersion Include="SharpZipLib" Version="1.4.2" />
|
||||
<PackageVersion Include="StackExchange.Redis" Version="2.12.14" />
|
||||
<PackageVersion Include="System.Data.SqlClient" Version="4.8.6" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.9.0" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.Swagger" Version="6.9.0" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.9.0" />
|
||||
<PackageVersion Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.9.0" />
|
||||
<PackageVersion Include="YamlDotNet" Version="16.1.0" />
|
||||
<PackageVersion Include="Yarp.ReverseProxy" Version="2.3.0" />
|
||||
<PackageVersion Include="ZiggyCreatures.FusionCache" Version="2.6.0" />
|
||||
<PackageVersion Include="ZiggyCreatures.FusionCache.Backplane.StackExchangeRedis" Version="2.6.0" />
|
||||
<PackageVersion Include="ZiggyCreatures.FusionCache.Serialization.NewtonsoftJson" Version="2.6.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
using System.Reflection;
|
||||
|
||||
namespace Egw.Core
|
||||
{
|
||||
public class Utils
|
||||
{
|
||||
/// <summary>
|
||||
/// Effettua salvataggio in file di un generico oggetto in formato CSV
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="reportData"></param>
|
||||
/// <param name="path"></param>
|
||||
/// <param name="separator">Separatore da impiegare</param>
|
||||
/// <returns></returns>
|
||||
public static async Task SaveToCsv<T>(List<T> reportData, string path, char separator)
|
||||
{
|
||||
// 1. Recuperiamo le proprietà del tipo T una sola volta (Risolve i problemi di performance)
|
||||
PropertyInfo[] properties = typeof(T).GetProperties();
|
||||
|
||||
var lines = new List<string>();
|
||||
|
||||
// 2. Creiamo l'header usando il separatore corretto (Risolve il bug del ";" fisso)
|
||||
var header = string.Join(separator, properties.Select(p => p.Name));
|
||||
lines.Add(header);
|
||||
|
||||
// 3. Estraiamo i valori gestendo i possibili null (Risolve il tuo warning)
|
||||
var valueLines = reportData
|
||||
.Where(row => row != null)
|
||||
.Select(row => string.Join(separator, properties.Select(p => p.GetValue(row)?.ToString() ?? string.Empty)));
|
||||
|
||||
lines.AddRange(valueLines);
|
||||
|
||||
// 4. Utilizziamo il metodo di scrittura asincrono nativo di .NET
|
||||
await File.WriteAllLinesAsync(path, lines);
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"_type":"export","__export_format":4,"__export_date":"2024-10-23T15:45:49.150Z","__export_source":"insomnia.desktop.app:v2023.5.8","resources":[{"_id":"req_bb23a3e0a78f44999350ddcefebaaf82","parentId":"wrk_0d1a3f6f42fe486dacbeeea3026c648b","modified":1729691634502,"created":1729691518776,"url":"{{ _.BASE_URL }}/api/Health","name":"Health","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1680616613017,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"wrk_0d1a3f6f42fe486dacbeeea3026c648b","parentId":null,"modified":1729691518738,"created":1729691518738,"name":"MAPO-PROG","description":"","scope":"collection","_type":"workspace"},{"_id":"req_2b3ff677e75040ed9dfe30463fb5d408","parentId":"fld_cf0e8b6c31334d67bc421487d31a5540","modified":1729691689274,"created":1729691666872,"url":"{{ _.BASE_URL }}/api/FileChange","name":"FileChange Health","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1729691677997,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"fld_cf0e8b6c31334d67bc421487d31a5540","parentId":"wrk_0d1a3f6f42fe486dacbeeea3026c648b","modified":1729691675552,"created":1729691673364,"name":"FileChange","description":"","environment":{},"environmentPropertyOrder":null,"metaSortKey":-1680616270148.125,"_type":"request_group"},{"_id":"req_8fa584b2405b4c3588e1da50c6c02cbc","parentId":"fld_cf0e8b6c31334d67bc421487d31a5540","modified":1729691870054,"created":1729691818717,"url":"{{ _.BASE_URL }}/api/FileChange/approve/ALL?numDayPrev=7","name":"FileChange AutoSave","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1726323968489,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_b28dbcb90b9f4a30ae621f46ca80abf1","parentId":"fld_cf0e8b6c31334d67bc421487d31a5540","modified":1729698051601,"created":1729698043734,"url":"{{ _.BASE_URL }}/api/FileChange/check/ALL?numDayPrev=0","name":"FileChange CheckAll","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1724640113735,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"env_f533a867e5e74bc7a712974eb5185fe2","parentId":"wrk_0d1a3f6f42fe486dacbeeea3026c648b","modified":1729691518740,"created":1729691518740,"name":"Base Environment","data":{},"dataPropertyOrder":{},"color":null,"isPrivate":false,"metaSortKey":1680615228640,"_type":"environment"},{"_id":"jar_52975036fdb946749a04bf8b105649dc","parentId":"wrk_0d1a3f6f42fe486dacbeeea3026c648b","modified":1729691518752,"created":1729691518752,"name":"Default Jar","cookies":[],"_type":"cookie_jar"},{"_id":"spc_034d8153209c43289ef94bb511a381e4","parentId":"wrk_0d1a3f6f42fe486dacbeeea3026c648b","modified":1729691518782,"created":1729691518757,"fileName":"MAPO-PROG","contents":"","contentType":"yaml","_type":"api_spec"},{"_id":"env_6acd2ea246a54f2fa42dfa7191704e4f","parentId":"env_f533a867e5e74bc7a712974eb5185fe2","modified":1729691571662,"created":1729691518742,"name":"DEV","data":{"BASE_URL":"https://localhost:5001"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#ff0000","isPrivate":false,"metaSortKey":1680615301619,"_type":"environment"},{"_id":"env_add3f929a9774e949eaacdfef9669698","parentId":"env_f533a867e5e74bc7a712974eb5185fe2","modified":1729691576277,"created":1729691518746,"name":"IIS01","data":{"BASE_URL":"https://iis01.egalware.com/MP/PROG"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#6600ff","isPrivate":false,"metaSortKey":1680615328099,"_type":"environment"},{"_id":"env_78f831742ec84968878b6bb3e2dbbee3","parentId":"env_f533a867e5e74bc7a712974eb5185fe2","modified":1729691592437,"created":1729691579006,"name":"PROD","data":{"BASE_URL":"https://iis01.egalware.com/MP/PROG"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#6600ff","isPrivate":false,"metaSortKey":1692979703520,"_type":"environment"}]}
|
||||
@@ -1 +1 @@
|
||||
{"_type":"export","__export_format":4,"__export_date":"2023-04-04T15:23:33.215Z","__export_source":"insomnia.desktop.app:v2023.1.0","resources":[{"_id":"req_cd57cb8728854cd5a7d026b9aba60047","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680616613886,"created":1680616613017,"url":"https://localhost:7212/api/Recipe/GetRecipe?idxPODL=1656","name":"New Request","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1680616613017,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","parentId":null,"modified":1680615228636,"created":1680615228636,"name":"MAPO-SPEC","description":"","scope":"collection","_type":"workspace"},{"_id":"req_4d233d6fb970485ea929bdffdcfae05a","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680621773464,"created":1680615246346,"url":"{{ _.BASE_URL }}/api/Recipe/GetRecipe?idxPODL=1656","name":"GET RECIPE (calc)","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1680615241541.5,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_278d5f0a6555457e88ad2e58cfdaae23","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680621754168,"created":1680615436433,"url":"{{ BASE_URL }}/api/RecipeArchive/GetFile?idxMacc=SIMUL_02&fileName=10002.xml","name":"GET FILE (from archive)","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1679846511868.4375,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"env_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680615377532,"created":1680615228640,"name":"Base Environment","data":{},"dataPropertyOrder":{},"color":null,"isPrivate":false,"metaSortKey":1680615228640,"_type":"environment"},{"_id":"jar_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680615228642,"created":1680615228642,"name":"Default Jar","cookies":[],"_type":"cookie_jar"},{"_id":"spc_b61936e963e34a759001c6a22ad8da60","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680615228637,"created":1680615228637,"fileName":"MAPO-SPEC","contents":"","contentType":"yaml","_type":"api_spec"},{"_id":"env_2757d8ba1b17435987847d0499e9369e","parentId":"env_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","modified":1680616993850,"created":1680615301619,"name":"DEV","data":{"BASE_URL":"https://localhost:7212"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#ff0000","isPrivate":false,"metaSortKey":1680615301619,"_type":"environment"},{"_id":"env_f5b6aef3c2b444aab04c9056404d63f9","parentId":"env_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","modified":1680616996428,"created":1680615328099,"name":"IIS01","data":{"BASE_URL":"https://iis01.egalware.com/MP/SPEC"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#6600ff","isPrivate":false,"metaSortKey":1680615328099,"_type":"environment"}]}
|
||||
{"_type":"export","__export_format":4,"__export_date":"2024-10-23T15:46:09.187Z","__export_source":"insomnia.desktop.app:v2023.5.8","resources":[{"_id":"req_cd57cb8728854cd5a7d026b9aba60047","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680616613886,"created":1680616613017,"url":"https://localhost:7212/api/Recipe/GetRecipe?idxPODL=1656","name":"New Request","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1680616613017,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","parentId":null,"modified":1680615228636,"created":1680615228636,"name":"MAPO-SPEC","description":"","scope":"collection","_type":"workspace"},{"_id":"req_4d233d6fb970485ea929bdffdcfae05a","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680621773464,"created":1680615246346,"url":"{{ _.BASE_URL }}/api/Recipe/GetRecipe?idxPODL=1656","name":"GET RECIPE (calc)","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1680615241541.5,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"req_278d5f0a6555457e88ad2e58cfdaae23","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680621754168,"created":1680615436433,"url":"{{ BASE_URL }}/api/RecipeArchive/GetFile?idxMacc=SIMUL_02&fileName=10002.xml","name":"GET FILE (from archive)","description":"","method":"GET","body":{},"parameters":[],"headers":[],"authentication":{},"metaSortKey":-1679846511868.4375,"isPrivate":false,"settingStoreCookies":true,"settingSendCookies":true,"settingDisableRenderRequestBody":false,"settingEncodeUrl":true,"settingRebuildPath":true,"settingFollowRedirects":"global","_type":"request"},{"_id":"env_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680615377532,"created":1680615228640,"name":"Base Environment","data":{},"dataPropertyOrder":{},"color":null,"isPrivate":false,"metaSortKey":1680615228640,"_type":"environment"},{"_id":"jar_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680615228642,"created":1680615228642,"name":"Default Jar","cookies":[],"_type":"cookie_jar"},{"_id":"spc_b61936e963e34a759001c6a22ad8da60","parentId":"wrk_86debe1a96ca41cdbfb53ed71a9d6d84","modified":1680615228637,"created":1680615228637,"fileName":"MAPO-SPEC","contents":"","contentType":"yaml","_type":"api_spec"},{"_id":"env_2757d8ba1b17435987847d0499e9369e","parentId":"env_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","modified":1680616993850,"created":1680615301619,"name":"DEV","data":{"BASE_URL":"https://localhost:7212"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#ff0000","isPrivate":false,"metaSortKey":1680615301619,"_type":"environment"},{"_id":"env_f5b6aef3c2b444aab04c9056404d63f9","parentId":"env_ea1cd34b6839260f9a1edf3546f3c605bb6f3a2c","modified":1680616996428,"created":1680615328099,"name":"IIS01","data":{"BASE_URL":"https://iis01.egalware.com/MP/SPEC"},"dataPropertyOrder":{"&":["BASE_URL"]},"color":"#6600ff","isPrivate":false,"metaSortKey":1680615328099,"_type":"environment"}]}
|
||||
@@ -1,15 +1,15 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
||||
<PackageReference Include="NLog" Version="5.3.3" />
|
||||
<PackageReference Include="YamlDotNet" Version="16.1.0" />
|
||||
<PackageReference Include="Newtonsoft.Json" />
|
||||
<PackageReference Include="NLog" />
|
||||
<PackageReference Include="YamlDotNet" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -3,6 +3,7 @@ using YamlDotNet.Serialization.NamingConventions;
|
||||
using YamlDotNet.Serialization;
|
||||
using static IobConf.Core.EnumConf;
|
||||
using NLog;
|
||||
using System.Runtime.CompilerServices;
|
||||
|
||||
// <Auto-Generated>
|
||||
// This is here so CodeMaid doesn't reorganize this document
|
||||
@@ -23,6 +24,63 @@ namespace IobConf.Core
|
||||
Log = LogManager.GetCurrentClassLogger();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Init classe configurazione da file
|
||||
/// </summary>
|
||||
public IobConfTree(string confFilePath)
|
||||
{
|
||||
Log = LogManager.GetCurrentClassLogger();
|
||||
if (File.Exists(confFilePath))
|
||||
{
|
||||
IobConfTree newConfObj = new IobConfTree();
|
||||
// verifico TIPO file...
|
||||
string fileExt = Path.GetExtension(confFilePath);
|
||||
string fileName = Path.GetFileName(confFilePath);
|
||||
string rawData = File.ReadAllText(confFilePath);
|
||||
if (!string.IsNullOrEmpty(rawData))
|
||||
{
|
||||
// leggo in base al tipo...
|
||||
switch (fileExt)
|
||||
{
|
||||
case "yaml":
|
||||
case "yml":
|
||||
var deserializer = new DeserializerBuilder()
|
||||
.WithNamingConvention(CamelCaseNamingConvention.Instance)
|
||||
.Build();
|
||||
try
|
||||
{
|
||||
newConfObj = deserializer.Deserialize<IobConfTree>(rawData);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
//lgError($"Eccezione in LoadFromYaml{Environment.NewLine}{exc}");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (newConfObj != null)
|
||||
{
|
||||
// ora copio in oggetto corrente...
|
||||
CncData = newConfObj.CncData;
|
||||
CodIOB = newConfObj.CodIOB;
|
||||
ConfFileName = fileName;
|
||||
Customer = newConfObj.Customer;
|
||||
GeneralCom = newConfObj.GeneralCom;
|
||||
InputDataProc = newConfObj.InputDataProc;
|
||||
IobManConf = newConfObj.IobManConf;
|
||||
IobType = newConfObj.IobType;
|
||||
Model = newConfObj.Model;
|
||||
OptPar = newConfObj.OptPar;
|
||||
ReleaseVers = newConfObj.ReleaseVers;
|
||||
ServerMES = newConfObj.ServerMES;
|
||||
TempoCiclo = newConfObj.TempoCiclo;
|
||||
Vendor = newConfObj.Vendor;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Restituisce un oggetto di conf leggendo INI ed effettuando conversione
|
||||
/// </summary>
|
||||
@@ -80,7 +138,7 @@ namespace IobConf.Core
|
||||
newConfObj.ServerMES.Transport = MpIp.StartsWith("https://") ? "https" : "http";
|
||||
newConfObj.ServerMES.IpAddr = MpIp.Replace($"{newConfObj.ServerMES.Transport}://", ""); // tolgo http/https...
|
||||
}
|
||||
|
||||
|
||||
// Altro (versione, ...)
|
||||
newConfObj.ReleaseVers = $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Version}";
|
||||
newConfObj.IobManConf.MinDeltaSec = fIni.ReadInteger("IOB", "MinDeltaSec", 6);
|
||||
@@ -114,6 +172,35 @@ namespace IobConf.Core
|
||||
return newConfObj;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Restituisce un oggetto di conf deserializzando lo Yaml relativo
|
||||
/// </summary>
|
||||
/// <param name="yamlFilePath"></param>
|
||||
/// <returns></returns>
|
||||
public static IobConfTree LoadFromYaml(string yamlFilePath)
|
||||
{
|
||||
IobConfTree newConfObj = new IobConfTree();
|
||||
if (File.Exists(yamlFilePath))
|
||||
{
|
||||
string rawData = File.ReadAllText(yamlFilePath);
|
||||
if (!string.IsNullOrEmpty(rawData))
|
||||
{
|
||||
var deserializer = new DeserializerBuilder()
|
||||
.WithNamingConvention(CamelCaseNamingConvention.Instance)
|
||||
.Build();
|
||||
try
|
||||
{
|
||||
newConfObj = deserializer.Deserialize<IobConfTree>(rawData);
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
//lgError($"Eccezione in LoadFromYaml{Environment.NewLine}{exc}");
|
||||
}
|
||||
}
|
||||
}
|
||||
return newConfObj;
|
||||
}
|
||||
|
||||
#region Logging
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
</PropertyGroup>
|
||||
@@ -13,7 +13,7 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.12" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -22,6 +22,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
<UserName>jenkins</UserName>
|
||||
<_SavePWD>true</_SavePWD>
|
||||
<_TargetId>IISWebDeploy</_TargetId>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -22,6 +22,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
<UserName>jenkins</UserName>
|
||||
<_SavePWD>true</_SavePWD>
|
||||
<_TargetId>IISWebDeploy</_TargetId>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
@@ -22,6 +22,6 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
|
||||
<UserName>jenkins</UserName>
|
||||
<_SavePWD>true</_SavePWD>
|
||||
<_TargetId>IISWebDeploy</_TargetId>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
+12
@@ -14,6 +14,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.INVE", "MP.INVE\MP.INVE.
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Egw.Core", "Egw.Core\Egw.Core.csproj", "{84B1B205-AAC2-451C-914E-992CE8BA5B58}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{F26867FD-E419-41C5-9AAE-29F40C050EB5}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{5728AB68-0D7A-49B7-904A-987AC81B5D69}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -32,6 +36,14 @@ Global
|
||||
{84B1B205-AAC2-451C-914E-992CE8BA5B58}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{84B1B205-AAC2-451C-914E-992CE8BA5B58}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{84B1B205-AAC2-451C-914E-992CE8BA5B58}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F26867FD-E419-41C5-9AAE-29F40C050EB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F26867FD-E419-41C5-9AAE-29F40C050EB5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F26867FD-E419-41C5-9AAE-29F40C050EB5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F26867FD-E419-41C5-9AAE-29F40C050EB5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5728AB68-0D7A-49B7-904A-987AC81B5D69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5728AB68-0D7A-49B7-904A-987AC81B5D69}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5728AB68-0D7A-49B7-904A-987AC81B5D69}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5728AB68-0D7A-49B7-904A-987AC81B5D69}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
+16
-2
@@ -1,12 +1,18 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.4.33205.214
|
||||
# Visual Studio Version 18
|
||||
VisualStudioVersion = 18.4.11620.152
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.csproj", "{A0C7A1E7-6E5F-41BA-8ED0-C4A6C581C1B3}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.IOC", "MP.IOC\MP.IOC.csproj", "{B9F508BF-8503-4C25-B9BA-0FAC411C44C5}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{7D32419E-3C7C-48F7-B9CA-DB86CDBDBE95}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{DA5DA9DD-ED47-47F9-930F-EA423E9D9DD9}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution", "Solution", "{331E8AB2-F712-4F91-8D72-F8A90AA9FFC2}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -21,6 +27,14 @@ Global
|
||||
{B9F508BF-8503-4C25-B9BA-0FAC411C44C5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B9F508BF-8503-4C25-B9BA-0FAC411C44C5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B9F508BF-8503-4C25-B9BA-0FAC411C44C5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7D32419E-3C7C-48F7-B9CA-DB86CDBDBE95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7D32419E-3C7C-48F7-B9CA-DB86CDBDBE95}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7D32419E-3C7C-48F7-B9CA-DB86CDBDBE95}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7D32419E-3C7C-48F7-B9CA-DB86CDBDBE95}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DA5DA9DD-ED47-47F9-930F-EA423E9D9DD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DA5DA9DD-ED47-47F9-930F-EA423E9D9DD9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DA5DA9DD-ED47-47F9-930F-EA423E9D9DD9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DA5DA9DD-ED47-47F9-930F-EA423E9D9DD9}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
+31
@@ -9,24 +9,55 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.AppAuth", "MP.AppAuth\MP
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Egw.Core", "Egw.Core\Egw.Core.csproj", "{D3D348EF-1313-43DF-94FB-28CD38B68212}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.csproj", "{EE871AE5-9B5E-493E-8E59-F77234979AD7}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{8BBD39D5-9390-4EBA-979B-954DC8FFC850}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{DE935A48-5E0F-4AD4-953F-8820565BF616}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug_LiManDebug|Any CPU = Debug_LiManDebug|Any CPU
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{D949AB45-9B65-4594-A97E-182BC3831707}.Debug_LiManDebug|Any CPU.ActiveCfg = Debug_LiManDebug|Any CPU
|
||||
{D949AB45-9B65-4594-A97E-182BC3831707}.Debug_LiManDebug|Any CPU.Build.0 = Debug_LiManDebug|Any CPU
|
||||
{D949AB45-9B65-4594-A97E-182BC3831707}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D949AB45-9B65-4594-A97E-182BC3831707}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D949AB45-9B65-4594-A97E-182BC3831707}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D949AB45-9B65-4594-A97E-182BC3831707}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{E8B1E617-87BC-4638-A8B6-04EEBA3B8F47}.Debug_LiManDebug|Any CPU.ActiveCfg = Debug_LiManDebug|Any CPU
|
||||
{E8B1E617-87BC-4638-A8B6-04EEBA3B8F47}.Debug_LiManDebug|Any CPU.Build.0 = Debug_LiManDebug|Any CPU
|
||||
{E8B1E617-87BC-4638-A8B6-04EEBA3B8F47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{E8B1E617-87BC-4638-A8B6-04EEBA3B8F47}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E8B1E617-87BC-4638-A8B6-04EEBA3B8F47}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E8B1E617-87BC-4638-A8B6-04EEBA3B8F47}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D3D348EF-1313-43DF-94FB-28CD38B68212}.Debug_LiManDebug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D3D348EF-1313-43DF-94FB-28CD38B68212}.Debug_LiManDebug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D3D348EF-1313-43DF-94FB-28CD38B68212}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D3D348EF-1313-43DF-94FB-28CD38B68212}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D3D348EF-1313-43DF-94FB-28CD38B68212}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D3D348EF-1313-43DF-94FB-28CD38B68212}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{EE871AE5-9B5E-493E-8E59-F77234979AD7}.Debug_LiManDebug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EE871AE5-9B5E-493E-8E59-F77234979AD7}.Debug_LiManDebug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EE871AE5-9B5E-493E-8E59-F77234979AD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EE871AE5-9B5E-493E-8E59-F77234979AD7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EE871AE5-9B5E-493E-8E59-F77234979AD7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EE871AE5-9B5E-493E-8E59-F77234979AD7}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{8BBD39D5-9390-4EBA-979B-954DC8FFC850}.Debug_LiManDebug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8BBD39D5-9390-4EBA-979B-954DC8FFC850}.Debug_LiManDebug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8BBD39D5-9390-4EBA-979B-954DC8FFC850}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{8BBD39D5-9390-4EBA-979B-954DC8FFC850}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{8BBD39D5-9390-4EBA-979B-954DC8FFC850}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{8BBD39D5-9390-4EBA-979B-954DC8FFC850}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{DE935A48-5E0F-4AD4-953F-8820565BF616}.Debug_LiManDebug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DE935A48-5E0F-4AD4-953F-8820565BF616}.Debug_LiManDebug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DE935A48-5E0F-4AD4-953F-8820565BF616}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{DE935A48-5E0F-4AD4-953F-8820565BF616}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{DE935A48-5E0F-4AD4-953F-8820565BF616}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{DE935A48-5E0F-4AD4-953F-8820565BF616}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
+23
-5
@@ -5,7 +5,13 @@ VisualStudioVersion = 17.0.32126.317
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.csproj", "{10BA8450-301D-49C7-8E1E-21B7469C225C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Mon", "MP.Mon\MP.Mon.csproj", "{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}"
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.MON", "MP.MON\MP.MON.csproj", "{82FD7CF4-42A2-499C-88FC-46502D166F70}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{4F652F76-AC46-444D-B808-40102F2F05C0}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{3447D4AF-13C2-47BB-8C5F-74299A46D063}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.MON.Client", "MP.MON.Client\MP.MON.Client.csproj", "{7038E415-3F9B-A8C6-C92F-32185AD31DBC}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
@@ -17,10 +23,22 @@ Global
|
||||
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7780FA7A-3597-4098-81C1-DC9AD6AE7A98}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{82FD7CF4-42A2-499C-88FC-46502D166F70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{82FD7CF4-42A2-499C-88FC-46502D166F70}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{82FD7CF4-42A2-499C-88FC-46502D166F70}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{82FD7CF4-42A2-499C-88FC-46502D166F70}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{4F652F76-AC46-444D-B808-40102F2F05C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{4F652F76-AC46-444D-B808-40102F2F05C0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{4F652F76-AC46-444D-B808-40102F2F05C0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{4F652F76-AC46-444D-B808-40102F2F05C0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3447D4AF-13C2-47BB-8C5F-74299A46D063}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3447D4AF-13C2-47BB-8C5F-74299A46D063}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3447D4AF-13C2-47BB-8C5F-74299A46D063}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3447D4AF-13C2-47BB-8C5F-74299A46D063}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{7038E415-3F9B-A8C6-C92F-32185AD31DBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{7038E415-3F9B-A8C6-C92F-32185AD31DBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{7038E415-3F9B-A8C6-C92F-32185AD31DBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{7038E415-3F9B-A8C6-C92F-32185AD31DBC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
+14
-2
@@ -1,12 +1,16 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.31229.75
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.11.35327.3
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Prog", "MP.Prog\MP.Prog.csproj", "{3223DDE4-564E-4D58-8A94-E368B9778C67}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.FileData", "MP.FileData\MP.FileData.csproj", "{48693321-1FA6-4DBB-A730-B8EF3E0B68D2}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{EF0CF5FC-2451-4184-AAA4-B17236DEE41B}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Egw.Core", "Egw.Core\Egw.Core.csproj", "{3EE72B27-C44F-40F5-B4E8-E43ECA6F39B1}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -21,6 +25,14 @@ Global
|
||||
{48693321-1FA6-4DBB-A730-B8EF3E0B68D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{48693321-1FA6-4DBB-A730-B8EF3E0B68D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{48693321-1FA6-4DBB-A730-B8EF3E0B68D2}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{EF0CF5FC-2451-4184-AAA4-B17236DEE41B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{EF0CF5FC-2451-4184-AAA4-B17236DEE41B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{EF0CF5FC-2451-4184-AAA4-B17236DEE41B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{EF0CF5FC-2451-4184-AAA4-B17236DEE41B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3EE72B27-C44F-40F5-B4E8-E43ECA6F39B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3EE72B27-C44F-40F5-B4E8-E43ECA6F39B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3EE72B27-C44F-40F5-B4E8-E43ECA6F39B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3EE72B27-C44F-40F5-B4E8-E43ECA6F39B1}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
+37
@@ -0,0 +1,37 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 18
|
||||
VisualStudioVersion = 18.5.11723.231 stable
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.RIOC", "MP.RIOC\MP.RIOC.csproj", "{89885A8B-EB0E-814D-11D5-0B19D3E0B45F}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{9F25E500-62F6-E0D9-D94E-E8DF589C4F97}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Data", "MP.Data\MP.Data.csproj", "{327FAC24-FF59-3DEF-C9BA-574CE61AE1E5}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{89885A8B-EB0E-814D-11D5-0B19D3E0B45F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{89885A8B-EB0E-814D-11D5-0B19D3E0B45F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{89885A8B-EB0E-814D-11D5-0B19D3E0B45F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{89885A8B-EB0E-814D-11D5-0B19D3E0B45F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9F25E500-62F6-E0D9-D94E-E8DF589C4F97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9F25E500-62F6-E0D9-D94E-E8DF589C4F97}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9F25E500-62F6-E0D9-D94E-E8DF589C4F97}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9F25E500-62F6-E0D9-D94E-E8DF589C4F97}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{327FAC24-FF59-3DEF-C9BA-574CE61AE1E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{327FAC24-FF59-3DEF-C9BA-574CE61AE1E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{327FAC24-FF59-3DEF-C9BA-574CE61AE1E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{327FAC24-FF59-3DEF-C9BA-574CE61AE1E5}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {AEB0B74D-1A03-4D0C-B6B0-8928D097A975}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
@@ -0,0 +1,5 @@
|
||||
<Solution>
|
||||
<Project Path="MP.Core/MP.Core.csproj" />
|
||||
<Project Path="MP.Data/MP.Data.csproj" />
|
||||
<Project Path="MP.RIOC/MP.RIOC.csproj" />
|
||||
</Solution>
|
||||
+26
-2
@@ -1,7 +1,7 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.32126.317
|
||||
# Visual Studio Version 18
|
||||
VisualStudioVersion = 18.3.11520.95
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.csproj", "{10BA8450-301D-49C7-8E1E-21B7469C225C}"
|
||||
EndProject
|
||||
@@ -12,6 +12,14 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
|
||||
.editorconfig = .editorconfig
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{15231E76-5A27-4D4E-982C-17A886A9EEB8}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{1887A0C0-679E-4535-90D4-60DAA428D019}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.AppAuth", "MP.AppAuth\MP.AppAuth.csproj", "{5D73F0E2-7D1E-09BA-DB9D-EEC7A88766EE}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Egw.Core", "Egw.Core\Egw.Core.csproj", "{A46276E0-9BFD-EABB-C49C-9B42ED4CA5CA}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -26,6 +34,22 @@ Global
|
||||
{C777A098-6F91-45AF-A85E-0AD08CBCAC52}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{C777A098-6F91-45AF-A85E-0AD08CBCAC52}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{C777A098-6F91-45AF-A85E-0AD08CBCAC52}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{15231E76-5A27-4D4E-982C-17A886A9EEB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{15231E76-5A27-4D4E-982C-17A886A9EEB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{15231E76-5A27-4D4E-982C-17A886A9EEB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{15231E76-5A27-4D4E-982C-17A886A9EEB8}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{1887A0C0-679E-4535-90D4-60DAA428D019}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{1887A0C0-679E-4535-90D4-60DAA428D019}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{1887A0C0-679E-4535-90D4-60DAA428D019}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{1887A0C0-679E-4535-90D4-60DAA428D019}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{5D73F0E2-7D1E-09BA-DB9D-EEC7A88766EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{5D73F0E2-7D1E-09BA-DB9D-EEC7A88766EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{5D73F0E2-7D1E-09BA-DB9D-EEC7A88766EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{5D73F0E2-7D1E-09BA-DB9D-EEC7A88766EE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{A46276E0-9BFD-EABB-C49C-9B42ED4CA5CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{A46276E0-9BFD-EABB-C49C-9B42ED4CA5CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{A46276E0-9BFD-EABB-C49C-9B42ED4CA5CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{A46276E0-9BFD-EABB-C49C-9B42ED4CA5CA}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
+20
-2
@@ -1,12 +1,18 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.32126.317
|
||||
# Visual Studio Version 18
|
||||
VisualStudioVersion = 18.5.11723.231 stable
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Stats", "MP.Stats\MP.Stats.csproj", "{D9901B50-E61C-400C-B62C-FA060CF72C29}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.csproj", "{10BA8450-301D-49C7-8E1E-21B7469C225C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{D334DE4B-1F54-4F30-899B-9ECB79C9F527}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Egw.Core", "Egw.Core\Egw.Core.csproj", "{BC94E319-A622-497C-BEE1-BB3D77170A6D}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{3E74B94B-82B6-434B-AADA-875845ED193B}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -21,6 +27,18 @@ Global
|
||||
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D334DE4B-1F54-4F30-899B-9ECB79C9F527}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D334DE4B-1F54-4F30-899B-9ECB79C9F527}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D334DE4B-1F54-4F30-899B-9ECB79C9F527}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D334DE4B-1F54-4F30-899B-9ECB79C9F527}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{BC94E319-A622-497C-BEE1-BB3D77170A6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{BC94E319-A622-497C-BEE1-BB3D77170A6D}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{BC94E319-A622-497C-BEE1-BB3D77170A6D}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{BC94E319-A622-497C-BEE1-BB3D77170A6D}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{3E74B94B-82B6-434B-AADA-875845ED193B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{3E74B94B-82B6-434B-AADA-875845ED193B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{3E74B94B-82B6-434B-AADA-875845ED193B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{3E74B94B-82B6-434B-AADA-875845ED193B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
-37
@@ -1,37 +0,0 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.0.32126.317
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP.Data", "MP.Data\MP.Data.csproj", "{10BA8450-301D-49C7-8E1E-21B7469C225C}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP-TAB", "MP-TAB\MP-TAB\MP-TAB.csproj", "{9141D627-EE10-4BF6-9A2C-AAC6845E185F}"
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP-TAB.Client", "MP-TAB\MP-TAB.Client\MP-TAB.Client.csproj", "{28559808-58F2-424B-B65C-062AA59839EC}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{10BA8450-301D-49C7-8E1E-21B7469C225C}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{9141D627-EE10-4BF6-9A2C-AAC6845E185F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{9141D627-EE10-4BF6-9A2C-AAC6845E185F}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{9141D627-EE10-4BF6-9A2C-AAC6845E185F}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{9141D627-EE10-4BF6-9A2C-AAC6845E185F}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{28559808-58F2-424B-B65C-062AA59839EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{28559808-58F2-424B-B65C-062AA59839EC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{28559808-58F2-424B-B65C-062AA59839EC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{28559808-58F2-424B-B65C-062AA59839EC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {632D11D1-088B-4795-97E5-048534002558}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
+12
@@ -12,6 +12,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MP-TAB3", "MP-TAB3\MP-TAB3.csproj", "{E7A7C262-7807-4503-949D-5A6FE3DF4400}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.Core", "MP.Core\MP.Core.csproj", "{286528F4-7753-4615-96A7-1F558EE5563B}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MP.TaskMan", "MP.TaskMan\MP.TaskMan.csproj", "{D87FBE3B-F95F-47AD-8874-184500CEEC85}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -26,6 +30,14 @@ Global
|
||||
{E7A7C262-7807-4503-949D-5A6FE3DF4400}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{E7A7C262-7807-4503-949D-5A6FE3DF4400}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{E7A7C262-7807-4503-949D-5A6FE3DF4400}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{286528F4-7753-4615-96A7-1F558EE5563B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{286528F4-7753-4615-96A7-1F558EE5563B}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{286528F4-7753-4615-96A7-1F558EE5563B}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{286528F4-7753-4615-96A7-1F558EE5563B}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{D87FBE3B-F95F-47AD-8874-184500CEEC85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D87FBE3B-F95F-47AD-8874-184500CEEC85}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D87FBE3B-F95F-47AD-8874-184500CEEC85}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D87FBE3B-F95F-47AD-8874-184500CEEC85}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
{
|
||||
"version": 1,
|
||||
"isRoot": true,
|
||||
"tools": {}
|
||||
"tools": {
|
||||
"dotnet-ef": {
|
||||
"version": "8.0.10",
|
||||
"commands": [
|
||||
"dotnet-ef"
|
||||
],
|
||||
"rollForward": false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -49,7 +49,7 @@ else
|
||||
}
|
||||
</div>
|
||||
<div class="px-1">
|
||||
@if (item.ReqNotify != 0)
|
||||
@if (item.ReqNotify != 0 || item.Duration > alarmMinDuration)
|
||||
{
|
||||
<button class="btn btn-sm btn-primary py-0" @onclick="() => SendNotify(item)">Invia <i class="fa fa-envelope" aria-hidden="true"></i></button>
|
||||
}
|
||||
@@ -65,7 +65,13 @@ else
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td>
|
||||
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
|
||||
}
|
||||
@@ -2,7 +2,7 @@ using global::Microsoft.AspNetCore.Components;
|
||||
using Microsoft.JSInterop;
|
||||
using MongoDB.Driver.Linq;
|
||||
using MP.Data;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using NLog;
|
||||
using System.Text;
|
||||
@@ -15,7 +15,7 @@ namespace MP_TAB3.Components
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
@@ -102,7 +102,8 @@ namespace MP_TAB3.Components
|
||||
DateTime inizio = fine.AddDays(-8);
|
||||
CurrPeriodo = new Periodo(inizio, fine);
|
||||
}
|
||||
var rawDest = config.GetValue<string>("AlarmDest");
|
||||
// gestione conf allarmi
|
||||
var rawDest = config.GetValue<string>("OptConf:AlarmDest");
|
||||
if (!string.IsNullOrEmpty(rawDest))
|
||||
{
|
||||
AlarmsDest = rawDest.Split(",").ToList();
|
||||
@@ -111,6 +112,7 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
AlarmsDest = new List<string>() { "samuele@steamware.net" };
|
||||
}
|
||||
alarmMinDuration = config.GetValue<decimal>("OptConf:AlarmMinDuration");
|
||||
}
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
@@ -210,13 +212,18 @@ namespace MP_TAB3.Components
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
/// <summary>
|
||||
/// durata minima allarmi x abilitare invio email di notifica
|
||||
/// </summary>
|
||||
private decimal alarmMinDuration = 1;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private Periodo CurrPeriodo { get; set; } = new Periodo();
|
||||
private string IdxMaccSel { get; set; } = "";
|
||||
private MappaStatoExpl? lastRecMSE { get; set; } = null;
|
||||
private MappaStatoExplModel? lastRecMSE { get; set; } = null;
|
||||
|
||||
#endregion Private Properties
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
@if (ShowInsFermata)
|
||||
{
|
||||
<button class="btn w-100 btn-lg flashingRed mb-2 p-3 fs-2" @onclick="@GoToFermate"><i class="fa fa-lg fa-exclamation-triangle"></i> DICHIARARE FERMO <i class="fa fa-lg fa-exclamation-triangle"></i></button>
|
||||
<button class="btn w-100 btn-lg flashingRed mb-2 p-2 fs-3" @onclick="@GoToFermate"><i class="fa fa-lg fa-exclamation-triangle"></i> DICHIARARE FERMO <i class="fa fa-lg fa-exclamation-triangle"></i></button>
|
||||
}
|
||||
@if (ShowReqControls)
|
||||
{
|
||||
<button class="btn w-100 btn-lg flashingPurple mb-2 p-3 fs-2" @onclick="GoToControls"><i class="fa fa-lg fa-flask"></i> EFFETTUARE CONTROLLO<i class="fa fa-lg fa-flask"></i></button>
|
||||
<button class="btn w-100 btn-lg flashingPurple mb-2 p-2 fs-3" @onclick="GoToControls"><i class="fa fa-lg fa-flask"></i> EFFETTUARE CONTROLLO<i class="fa fa-lg fa-flask"></i></button>
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using MP_TAB3.Shared;
|
||||
|
||||
@@ -10,7 +10,7 @@ namespace MP_TAB3.Components
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
@@ -121,12 +121,9 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
if (RecMSE != null)
|
||||
{
|
||||
if (MServ.LastIdxMacchina != RecMSE.IdxMacchina)
|
||||
{
|
||||
ShowInsFermata = CheckShowInsFermata;
|
||||
ShowReqControls = await CheckShowReqControls();
|
||||
MServ.LastIdxMacchina = RecMSE.IdxMacchina;
|
||||
}
|
||||
ShowInsFermata = CheckShowInsFermata;
|
||||
ShowReqControls = await CheckShowReqControls();
|
||||
MServ.LastIdxMacchina = RecMSE.IdxMacchina;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<div class="top-row d-flex justify-content-between text-light">
|
||||
<div class="top-row d-flex justify-content-between text-light @CssReload">
|
||||
<div class="col-4 d-flex">
|
||||
<div class="pe-1">
|
||||
<button class="btn btn-sm @ResetClass" @onclick="() => ForceReload()" title="Update"><i class="fa-solid fa-rotate"></i></button>
|
||||
@@ -9,20 +9,26 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-center d-flex justify-content-center px-0">
|
||||
<div class="btn btn-outline-info p-1 text-decoration-none text-light" @onclick="()=>backToSM()">
|
||||
<div class="btn btn-outline-info py-1 px-2 text-decoration-none text-light" @onclick="()=>backToSM()">
|
||||
<i class="fa-solid fa-house"></i>
|
||||
MapoTAB3
|
||||
<img src="images/LogoSteamware.png" style="height: 1.3rem" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-end">
|
||||
@if (!HideMenu)
|
||||
{
|
||||
<div class="row w-100 slideMen">
|
||||
<div class="p-0">
|
||||
<SlideMenu MenuItems="@CurrMenuItems"></SlideMenu>
|
||||
<div class="d-flex flex-row-reverse">
|
||||
@if (!HideMenu)
|
||||
{
|
||||
<div class="px-1 slideMen">
|
||||
<span class="p-0">
|
||||
<SlideMenu MenuItems="@CurrMenuItems"></SlideMenu>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
@if (IsReloading)
|
||||
{
|
||||
<div class="px-1 text-nowrap">Reloading User Data...</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.DTO;
|
||||
using MP.Data.Services;
|
||||
using MP_TAB3.Pages;
|
||||
@@ -14,7 +14,7 @@ namespace MP_TAB3.Components
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public List<LinkMenu> CurrMenuItems { get; set; } = new List<LinkMenu>();
|
||||
public List<LinkMenuModel> CurrMenuItems { get; set; } = new List<LinkMenuModel>();
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<bool> EA_ReloadMStor { get; set; }
|
||||
@@ -71,20 +71,28 @@ namespace MP_TAB3.Components
|
||||
|
||||
protected async Task backToSM()
|
||||
{
|
||||
await Task.Delay(1);
|
||||
if (!NavMan.Uri.Contains("reg-new-device"))
|
||||
{
|
||||
await MsgServ.IdxMaccSet("");
|
||||
NavMan.NavigateTo("status-map", true);
|
||||
NavMan.NavigateTo("status-map", false);
|
||||
}
|
||||
}
|
||||
|
||||
private bool IsReloading = false;
|
||||
|
||||
private string CssReload
|
||||
{
|
||||
get => IsReloading ? "bg-primary bg-gradient" : "";
|
||||
}
|
||||
|
||||
protected async Task ForceReload()
|
||||
{
|
||||
Stopwatch sw = new Stopwatch();
|
||||
sw.Start();
|
||||
Log.Info("Start ForceReload");
|
||||
IsReloading = true;
|
||||
ResetClass = "btn-warning";
|
||||
MsgServ.IsReloading = true;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
var currToken = await MsgServ.GetCurrOperDtoLSAsync();
|
||||
var lastOpr = await MsgServ.GetLastMatrOprAsync();
|
||||
@@ -102,14 +110,15 @@ namespace MP_TAB3.Components
|
||||
await EA_ReloadMStor.InvokeAsync(true);
|
||||
// calcolo tempo esecuzione
|
||||
sw.Stop();
|
||||
int delta = 500 - (int)sw.ElapsedMilliseconds;
|
||||
delta = delta > 0 ? delta : 50;
|
||||
int delta = 150 - (int)sw.ElapsedMilliseconds;
|
||||
delta = delta > 0 ? delta : 10;
|
||||
await Task.Delay(delta);
|
||||
ResetClass = "btn-primary";
|
||||
// await InvokeAsync(StateHasChanged);
|
||||
MsgServ.IsReloading = false;
|
||||
IsReloading = false;
|
||||
Log.Info($"ForceReload completed in {sw.Elapsed.TotalMilliseconds}ms");
|
||||
// ricarica pagina!
|
||||
NavMan.NavigateTo("status-map");
|
||||
NavMan.NavigateTo("status-map", true);
|
||||
}
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
@@ -160,7 +169,7 @@ namespace MP_TAB3.Components
|
||||
protected async Task RefreshScadLogIn(string decodValue)
|
||||
{
|
||||
bool done = false;
|
||||
// solo se non è logout!!!
|
||||
// solo se non � logout!!!
|
||||
if (!NavMan.Uri.Contains("logout"))
|
||||
{
|
||||
if (listT2H == null || listT2H.Count == 0)
|
||||
@@ -177,14 +186,23 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
if (done && !string.IsNullOrEmpty(LastOpenedPage))
|
||||
{
|
||||
// se è nelle pagine "T2H" lascio proseguire...
|
||||
// se � nelle pagine "T2H" lascio proseguire...
|
||||
if (listT2H != null && listT2H.Find(x => x.NavigateUrl == LastOpenedPage) != null)
|
||||
{
|
||||
NavMan.NavigateTo(LastOpenedPage);
|
||||
}
|
||||
else if (!string.IsNullOrEmpty(CurrMacc))
|
||||
{
|
||||
NavMan.NavigateTo(LastOpenedPage);
|
||||
var machMse = await MsgServ.GetMachineMse(CurrMacc);
|
||||
if (machMse == null)
|
||||
{
|
||||
await MsgServ.IdxMaccSet("");
|
||||
NavMan.NavigateTo("status-map");
|
||||
}
|
||||
else
|
||||
{
|
||||
NavMan.NavigateTo(LastOpenedPage);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -199,7 +217,7 @@ namespace MP_TAB3.Components
|
||||
#region Private Fields
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
private List<LinkMenu> listT2H = new List<LinkMenu>();
|
||||
private List<LinkMenuModel> listT2H = new List<LinkMenuModel>();
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
@@ -19,7 +19,7 @@ namespace MP_TAB3.Components
|
||||
public EventCallback<DateTime> E_DateSel { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
[Parameter]
|
||||
public string Title { get; set; } = "NA";
|
||||
@@ -90,7 +90,7 @@ namespace MP_TAB3.Components
|
||||
// elimino vecchio se c'�...
|
||||
await TabServ.EvListDelete(IdxMacc, DateSel, idxTipoCommento);
|
||||
// inserisco
|
||||
await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.barcode);
|
||||
await TabServ.EvListInsert(newRec, MP.Core.Objects.Enums.tipoInputEvento.barcode);
|
||||
// reset
|
||||
DoReset();
|
||||
ToggleCtrl();
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
{
|
||||
@if (RecMSE != null && RecMSE.IdxOdl > 0)
|
||||
{
|
||||
<button class="btn btn-primary btn-lg text-light w-100 mb-1 fs-2 text-uppercase" @onclick="ToggleBtn">
|
||||
<i class="fa fa-wrench"></i> @ConfTitle
|
||||
<button class="btn @btnCss btn-lg text-light w-100 mb-1 fs-2 text-uppercase" @onclick="ToggleBtn">
|
||||
<i class="fa fa-wrench pe-1"></i> @ConfTitle <i class="fa @faCss ps-1"></i>
|
||||
</button>
|
||||
}
|
||||
else
|
||||
@@ -71,7 +71,6 @@
|
||||
<div class="bg-secondary p-1 mb-1">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
|
||||
<table class="table table-dark table-sm table-striped">
|
||||
<thead>
|
||||
<tr class="text-start1">
|
||||
@@ -124,11 +123,15 @@
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td>
|
||||
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="cad-footer">
|
||||
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,12 +1,12 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using NLog;
|
||||
using static EgwCoreLib.Utils.DtUtils;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class ControlsMan
|
||||
public partial class ControlsMan : IDisposable
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
@@ -17,12 +17,18 @@ namespace MP_TAB3.Components
|
||||
public EventCallback<bool> E_Updated { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
ListComplete.Clear();
|
||||
ListPaged.Clear();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Aggiorno valori produzione alla data richiesta...
|
||||
/// </summary>
|
||||
@@ -33,7 +39,7 @@ namespace MP_TAB3.Components
|
||||
await Task.Delay(1);
|
||||
if (!string.IsNullOrEmpty(IdxMaccSel))
|
||||
{
|
||||
ListComplete = await TabDServ.RegControlliFilt(IdxMaccSel, IdxOdl, CurrPeriodo.Inizio, CurrPeriodo.Fine, false);
|
||||
ListComplete = await TabDServ.RegControlliFiltAsync(IdxMaccSel, IdxOdl, CurrPeriodo.Inizio, CurrPeriodo.Fine, false);
|
||||
TotalCount = ListComplete.Count;
|
||||
// esegue paginazione
|
||||
UpdateTable();
|
||||
@@ -46,6 +52,11 @@ namespace MP_TAB3.Components
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected string btnCss
|
||||
{
|
||||
get => showInsert ? "bt-dark text-primary border-primary border-2" : "btn-primary";
|
||||
}
|
||||
|
||||
protected string ConfTitle
|
||||
{
|
||||
get => showInsert ? "Nascondi Controllo" : "Registra Controllo";
|
||||
@@ -53,6 +64,11 @@ namespace MP_TAB3.Components
|
||||
|
||||
protected bool enableControlli { get; set; } = true;
|
||||
|
||||
protected string faCss
|
||||
{
|
||||
get => showInsert ? "fa-chevron-up" : "fa-chevron-down";
|
||||
}
|
||||
|
||||
protected List<RegistroControlliModel> ListComplete { get; set; } = new List<RegistroControlliModel>();
|
||||
|
||||
protected List<RegistroControlliModel> ListPaged { get; set; } = new List<RegistroControlliModel>();
|
||||
@@ -70,6 +86,26 @@ namespace MP_TAB3.Components
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
/// Restituisce il codice IdxMacchina dell'impianto PARENT (se multi) altrimenti la stessa macchina...
|
||||
/// </summary>
|
||||
protected string getIdxMaccParent()
|
||||
{
|
||||
string answ = IdxMaccSel;
|
||||
// se fosse multi controllo
|
||||
if (isMulti)
|
||||
{
|
||||
// verifico se SIA una tavola (ha char "#")
|
||||
int iSharp = IdxMaccSel.IndexOf('#');
|
||||
if (iSharp > 0)
|
||||
{
|
||||
// sistemo nome
|
||||
answ = IdxMaccSel.Substring(0, iSharp);
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await Task.Delay(1);
|
||||
@@ -77,7 +113,7 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
enableControlli = SMServ.GetConfBool("enableControlli");
|
||||
IdxMaccSel = RecMSE.IdxMacchina;
|
||||
bool isMulti = SMServ.DictMacchMulti[IdxMaccSel] == 1;
|
||||
isMulti = SMServ.DictMacchMulti[IdxMaccSel] == 1;
|
||||
if (isMulti)
|
||||
{
|
||||
var idxMSel = MServ.UserPrefGet(IdxMaccSel);
|
||||
@@ -102,6 +138,17 @@ namespace MP_TAB3.Components
|
||||
showNote = false;
|
||||
await doUpdate();
|
||||
await E_Updated.InvokeAsync(false);
|
||||
if (isMulti)
|
||||
{
|
||||
await E_MachSel.InvokeAsync(idxMaccAltraTav);
|
||||
await Task.Delay(100);
|
||||
}
|
||||
else
|
||||
{
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
}
|
||||
await E_MachSel.InvokeAsync(IdxMaccSel);
|
||||
Log.Info("Registrazione SaveKo x controllo pezzo");
|
||||
isProcessing = false;
|
||||
}
|
||||
|
||||
@@ -119,6 +166,17 @@ namespace MP_TAB3.Components
|
||||
showNote = false;
|
||||
await doUpdate();
|
||||
await E_Updated.InvokeAsync(true);
|
||||
if (isMulti)
|
||||
{
|
||||
await E_MachSel.InvokeAsync(idxMaccAltraTav);
|
||||
await Task.Delay(100);
|
||||
}
|
||||
else
|
||||
{
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
}
|
||||
await E_MachSel.InvokeAsync(IdxMaccSel);
|
||||
Log.Info("Registrazione SaveOk x controllo pezzo");
|
||||
isProcessing = false;
|
||||
}
|
||||
|
||||
@@ -134,8 +192,8 @@ namespace MP_TAB3.Components
|
||||
await Task.Delay(1);
|
||||
IdxMaccSel = selIdxMacc;
|
||||
await doUpdate();
|
||||
isProcessing = false;
|
||||
await Task.Delay(1);
|
||||
isProcessing = false;
|
||||
await E_MachSel.InvokeAsync(selIdxMacc);
|
||||
}
|
||||
|
||||
@@ -188,7 +246,7 @@ namespace MP_TAB3.Components
|
||||
#region Private Fields
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private bool isMulti = false;
|
||||
private bool isProcessing = false;
|
||||
|
||||
private string noteKo = "";
|
||||
@@ -211,8 +269,48 @@ namespace MP_TAB3.Components
|
||||
|
||||
private Periodo CurrPeriodo { get; set; } = new Periodo();
|
||||
|
||||
private string IdxMaccSel { get; set; } = "";
|
||||
private string IdxMaccAltra { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Restituisce il codice IdxMacchina dell'altra tavola (se multi) altrimenti la stessa macchina...
|
||||
/// </summary>
|
||||
private string idxMaccAltraTav
|
||||
{
|
||||
get
|
||||
{
|
||||
string answ = "";
|
||||
if (RecMSE != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
// verifico se SIA una tavola (ha char "#")
|
||||
int iSharp = IdxMaccMain.IndexOf('#');
|
||||
if (iSharp > 0)
|
||||
{
|
||||
// ora verifico SE ALTRA TAVOLA ha ODL...
|
||||
string nomeTav = IdxMaccMain.Substring(iSharp);
|
||||
string altraTav = nomeTav.Substring(0, nomeTav.Length - 1);
|
||||
altraTav += nomeTav.EndsWith("1") ? "2" : "1";
|
||||
// sistemo nome
|
||||
answ = IdxMaccMain.Replace(nomeTav, altraTav);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Macchina selezionata MAIN
|
||||
/// </summary>
|
||||
private string IdxMaccMain
|
||||
{
|
||||
get => RecMSE != null ? RecMSE.IdxMacchina : "";
|
||||
}
|
||||
|
||||
private string IdxMaccSel { get; set; } = "";
|
||||
private int IdxOdl { get; set; } = 0;
|
||||
|
||||
private string selMessage
|
||||
|
||||
@@ -0,0 +1,207 @@
|
||||
@if (showKitDetail)
|
||||
{
|
||||
<MP_TAB3.Components.ProdKIT.KitDetailModal ListTK="@ListKitTemplate" ListPODL="@ListPOdlKit" EC_Close="() => KitToggleDetail(null, 0)"></MP_TAB3.Components.ProdKIT.KitDetailModal>
|
||||
}
|
||||
<div class="col-12 my-1">
|
||||
<div class="card">
|
||||
<div class="card-header @cssDetailOdl d-flex justify-content-between">
|
||||
<div>
|
||||
<h4>@titleOdlDetail</h4>
|
||||
</div>
|
||||
@if (IdxPOdlSel == 0)
|
||||
{
|
||||
<div class="d-flex text-end">
|
||||
<div class="form-check form-switch px-2">
|
||||
<label class="form-check-label">@txtShowXDL</label>
|
||||
<input class="form-check-input" type="checkbox" @bind="@showPOdlData">
|
||||
</div>
|
||||
@if (!InAttr && ShowClose)
|
||||
{
|
||||
<div>
|
||||
<button class="btn btn-dark w-100" @onclick="ToggleOdlDetail"><i class="fa-solid fa-chevron-up"></i> @txtBtnOdlDetail</button>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
@if (!showPOdlData)
|
||||
{
|
||||
<b>ODL:</b>
|
||||
}
|
||||
else
|
||||
{
|
||||
<b>P.ODL:</b>
|
||||
}
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@if (CurrOdl != null && !showPOdlData)
|
||||
{
|
||||
@CurrOdl.IdxOdl
|
||||
}
|
||||
else
|
||||
{
|
||||
@CurrPodl.IdxPromessa
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
Rif:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@if (CurrOdl != null && !showPOdlData)
|
||||
{
|
||||
@CurrOdl.KeyRichiesta
|
||||
}
|
||||
else
|
||||
{
|
||||
@CurrPodl.KeyRichiesta
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
Cod:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@if (CurrOdl != null && !showPOdlData)
|
||||
{
|
||||
@CurrOdl.CodArticolo
|
||||
}
|
||||
else
|
||||
{
|
||||
@CurrPodl.CodArticolo
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row border-top border-bottom border-secondary">
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
Articolo:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
|
||||
@if (CurrOdl != null && !showPOdlData)
|
||||
{
|
||||
@if (CheckIsKit(CurrOdl.CodArticolo))
|
||||
{
|
||||
<button class="mx-1 btn btn-sm btn-outline-dark small" @onclick="() => KitToggleDetail(CurrOdl.CodArticolo, 0)" title="Mostra dettaglio"><i class="fa-solid fa-search"></i></button>
|
||||
}
|
||||
@CurrOdl.DescArticolo
|
||||
}
|
||||
else
|
||||
{
|
||||
@if (CheckIsKit(CurrPodl.CodArticolo))
|
||||
{
|
||||
<button class="mx-1 btn btn-sm btn-outline-dark small" @onclick="() => KitToggleDetail(CurrPodl.CodArticolo, CurrPodl.IdxPromessa)" title="Mostra dettaglio"><i class="fa-solid fa-search"></i></button>
|
||||
}
|
||||
@CurrPodl.DescArticolo
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
Pezzi:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@if (CurrOdl != null && !showPOdlData)
|
||||
{
|
||||
@CurrOdl.NumPezzi.ToString("N0")
|
||||
}
|
||||
else
|
||||
{
|
||||
@CurrPodl.NumPezzi.ToString("N0")
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
TCiclo:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@if (CurrOdl != null && !showPOdlData && CurrOdl.Tcassegnato > 0)
|
||||
{
|
||||
@CurrOdl.Tcassegnato.ToString("N2")
|
||||
}
|
||||
else
|
||||
{
|
||||
@CurrPodl.Tcassegnato.ToString("N2")
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
Pz/pallet:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@if (CurrOdl != null && !showPOdlData)
|
||||
{
|
||||
@CurrOdl.PzPallet
|
||||
}
|
||||
else
|
||||
{
|
||||
@CurrPodl.PzPallet
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<div class="row">
|
||||
<div class="col text-start fw-bold">
|
||||
@if (CurrOdl != null && !showPOdlData)
|
||||
{
|
||||
@CurrOdl.Nome
|
||||
}
|
||||
else
|
||||
{
|
||||
@CurrPodl.Nome
|
||||
}
|
||||
</div>
|
||||
<div class="col d-flex justify-content-between">
|
||||
@if (!showPOdlData)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="px-0 small">
|
||||
Priorita:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@CurrPodl.Priorita
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="col d-flex justify-content-between">
|
||||
@if (CurrOdl != null && !showPOdlData)
|
||||
{
|
||||
<div class="px-0 small">
|
||||
Inizio:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@($"{CurrOdl.DataInizio:ddd yyyy.MM.dd HH:mm:ss}")
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="px-0 small">
|
||||
Data:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@($"{CurrPodl.DueDate:yyyy.MM.dd}")
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -0,0 +1,156 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using System;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class CurrOdlDetail
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public ODLExpModel CurrOdl { get; set; } = null!;
|
||||
|
||||
[Parameter]
|
||||
public PODLExpModel CurrPodl { get; set; } = null!;
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<bool> EC_ToggleOdlDetail { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<bool> EC_TogglePOdl { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public bool ForceCloseOdl { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public int IdxPOdlSel { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public bool InAttr { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public bool ShowClose { get; set; } = true;
|
||||
|
||||
[Parameter]
|
||||
public bool ShowOdlDetail { get; set; }
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
[Inject]
|
||||
protected MessageService MsgServ { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected SharedMemService SMServ { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected TabDataService TDService { get; set; } = null!;
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
/// Verifica se sia un articolo di tipo "KIT" x mostrare show dettaglio
|
||||
/// </summary>
|
||||
/// <param name="CodArticolo"></param>
|
||||
/// <returns></returns>
|
||||
protected bool CheckIsKit(string CodArticolo)
|
||||
{
|
||||
bool answ = false;
|
||||
if (ListArtKit != null && ListArtKit.Count > 0)
|
||||
{
|
||||
answ = ListArtKit.Count(x => x.CodArticolo == CodArticolo) > 0;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
protected void KitToggleDetail(string? selCodArt, int idxPOdl)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(selCodArt))
|
||||
{
|
||||
ListKitTemplate = TDService.TemplateKitFilt(selCodArt, "");
|
||||
}
|
||||
else
|
||||
{
|
||||
ListKitTemplate = null;
|
||||
}
|
||||
if (idxPOdl>0)
|
||||
{
|
||||
ListPOdlKit = TDService.POdlListByKitParent(idxPOdl);
|
||||
}
|
||||
else
|
||||
{
|
||||
ListPOdlKit = null;
|
||||
}
|
||||
showKitDetail = !showKitDetail;
|
||||
}
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
// carico elenco KIT
|
||||
ListArtKit = TDService.ArticoliGetByTipo("KIT", "*");
|
||||
}
|
||||
|
||||
protected async Task ToggleOdlDetail()
|
||||
{
|
||||
await EC_ToggleOdlDetail.InvokeAsync(true);
|
||||
}
|
||||
|
||||
protected string Traduci(string lemma)
|
||||
{
|
||||
return SMServ.Traduci($"{baseLang}_{lemma}".ToUpper());
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Elenco articoli tipo KIT
|
||||
/// </summary>
|
||||
private List<AnagArticoliModel>? ListArtKit;
|
||||
|
||||
private List<TemplateKitModel>? ListKitTemplate = null;
|
||||
private List<PODLExpModel>? ListPOdlKit;
|
||||
|
||||
private bool showKitDetail = false;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private string baseLang
|
||||
{
|
||||
get => MsgServ.UserPrefGet("Lang");
|
||||
}
|
||||
|
||||
private string cssDetailOdl
|
||||
{
|
||||
get => IdxPOdlSel > 0 ? "bg-info text-light" : "bg-warning";
|
||||
}
|
||||
|
||||
private bool showPOdlData { get; set; } = true;
|
||||
|
||||
private string titleOdlDetail
|
||||
{
|
||||
get => IdxPOdlSel > 0 ? "Verifica parametri attrezzaggio NUOVO PODL" : InAttr ? "Parametri PODL in Attrezzaggio" : "Parametri PODL Corrente";
|
||||
}
|
||||
|
||||
private string txtBtnOdlDetail
|
||||
{
|
||||
get => ShowOdlDetail ? "Nascondi Dettaglio PODL" : "MOSTRA Dettaglio ODL Corrente";
|
||||
}
|
||||
|
||||
private string txtShowXDL
|
||||
{
|
||||
get => showPOdlData ? "PODL" : "ODL";
|
||||
}
|
||||
|
||||
#endregion Private Properties
|
||||
}
|
||||
}
|
||||
@@ -2,10 +2,10 @@
|
||||
<div class="p-0">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<button class="btn btn-lg bg-info text-dark w-100" @onclick="ToggleCtrl">
|
||||
<i class="fa-solid fa-comments"></i>
|
||||
|
||||
<button class="btn btn-lg @btnCss text-light w-100" @onclick="ToggleCtrl">
|
||||
<i class="fa-solid fa-comments pe-1"></i>
|
||||
<span class="fs-4 fw-bold">@Title</span>
|
||||
<i class="fa @faCss ps-1"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
@@ -28,12 +28,17 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected string btnCss
|
||||
{
|
||||
get => ShowDetail ? "bt-dark text-primary border-primary border-2" : "btn-primary";
|
||||
}
|
||||
|
||||
protected string BtnCss
|
||||
{
|
||||
get => IsNewRec ? "btn btn-success" : "btn btn-primary";
|
||||
@@ -56,6 +61,11 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
protected string faCss
|
||||
{
|
||||
get => ShowDetail ? "fa-chevron-up" : "fa-chevron-down";
|
||||
}
|
||||
|
||||
protected List<AnagTagsModel> ListComplete { get; set; } = new List<AnagTagsModel>();
|
||||
|
||||
[Inject]
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
<button class="btn btn-primary" @onclick="()=>SetEdit(item)"><i class="fa-solid fa-pen"></i></button>
|
||||
<button class="btn btn-primary" @onclick="() => SetEdit(item)"><i class="fa-solid fa-pen"></i></button>
|
||||
</td>
|
||||
<td>
|
||||
<i class="@item.CssClass" aria-hidden="true"></i>
|
||||
@@ -64,11 +64,15 @@
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,5 +1,5 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using NLog;
|
||||
using Org.BouncyCastle.Asn1.IsisMtt.X509;
|
||||
@@ -15,7 +15,7 @@ namespace MP_TAB3.Components
|
||||
public EventCallback<string> E_MachSel { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
<div class="card text-dark textCondens">
|
||||
<div class="card-header bg-info text-light">
|
||||
<h4>@Title</h4>
|
||||
<h4>@FixTxt(Title)</h4>
|
||||
</div>
|
||||
<div class="card-body py-1">
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<p>
|
||||
<b>@Subtitle</b>
|
||||
<b>@FixTxt(Subtitle)</b>
|
||||
</p>
|
||||
@Message
|
||||
@FixTxt(Message)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -16,5 +16,14 @@ namespace MP_TAB3.Components
|
||||
public string Title { get; set; } = "";
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected MarkupString FixTxt(string origText)
|
||||
{
|
||||
return new MarkupString(origText);
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,9 @@
|
||||
|
||||
<button class="btn btn-warning w-100" @onclick="toggleFixOdl"><i class="fa fa-check"></i> @txtBtnFixOdl</button>
|
||||
<button class="btn @btnCss w-100" @onclick="toggleFixOdl">
|
||||
<i class="fa fa-check pe-1"></i>
|
||||
<span class="fs-4 fw-bold">@txtBtnFixOdl</span>
|
||||
<i class="fa @faCss ps-1"></i>
|
||||
</button>
|
||||
@if (showFixOdl)
|
||||
{
|
||||
<div class="row">
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
@@ -8,6 +8,9 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<bool> E_RefreshData { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string IdxMaccCurr { get; set; } = "";
|
||||
|
||||
@@ -24,11 +27,18 @@ namespace MP_TAB3.Components
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected List<ODLModel> ListComplete { get; set; } = new List<ODLModel>();
|
||||
protected List<ODLModel> ListPaged { get; set; } = new List<ODLModel>();
|
||||
protected string btnCss
|
||||
{
|
||||
get => showFixOdl ? "bg-dark border-warning border-2 text-light" : "btn-warning";
|
||||
}
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<bool> E_RefreshData { get; set; }
|
||||
protected string faCss
|
||||
{
|
||||
get => showFixOdl ? "fa-chevron-up" : "fa-chevron-down";
|
||||
}
|
||||
|
||||
protected List<ODLExpModel> ListComplete { get; set; } = new List<ODLExpModel>();
|
||||
protected List<ODLExpModel> ListPaged { get; set; } = new List<ODLExpModel>();
|
||||
|
||||
[Inject]
|
||||
protected MessageService MServ { get; set; } = null!;
|
||||
|
||||
@@ -0,0 +1,283 @@
|
||||
<div class="row my-1 mx-0 rounded-3" style="background-color: #34495E; ">
|
||||
<div class="col-12 px-1">
|
||||
<CalendarMonth DtRif="@dtCurr" MainCss="table table-dark table-borderless" DateSelected="DisplayDate" MonthChanged="ReloadMonth" DateCheck="@DateCheck" DateCheckBlock="@DateCFF" SingleWeek="@showDetail" SelDayCss="selDate rounded-top p-2" HeadStyle="color: #E67E22"></CalendarMonth>
|
||||
</div>
|
||||
@if (showDetail)
|
||||
{
|
||||
<div class="col-12 px-1 bg-gradient py-2">
|
||||
@if (EditRecord == null)
|
||||
{
|
||||
<div class="row">
|
||||
@if (DayMinTot < 1440)
|
||||
{
|
||||
<div class="col-3 my-2 pe-1">
|
||||
<button class="btn btn-success w-100" @onclick="() => AddNew(true)" title="Inserisci produzione"><i class="fa-solid fa-plus"></i> Prod</button>
|
||||
</div>
|
||||
<div class="col-3 my-2 px-1">
|
||||
<button class="btn btn-warning w-100" @onclick="() => AddNew(false)" title="Inserisci Fermata"><i class="fa-solid fa-plus"></i> Fermata</button>
|
||||
</div>
|
||||
<div class="col-3 my-2 px-1">
|
||||
<button class="btn btn-secondary w-100" @onclick="() => FixMissing()" title="Riempi periodi mancanti"><i class="fa-solid fa-fill-drip"></i> Spenta</button>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
@if (DayImportRatio != 1)
|
||||
{
|
||||
<div class="col-3 my-2 pe-1">
|
||||
@if (Math.Abs(DayMinTot * 60 - 1440 * 60) < 2)
|
||||
{
|
||||
<button class="btn btn-success w-100 px-0" @onclick="() => FreezeDay()" title="Conferma giornata"><i class="fa-solid fa-stamp"></i> Conferma</button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="btn btn-secondary w-100 px-0 disabled" title="Conferma non permessa per copertura errata gioranta"><i class="fa-solid fa-stamp"></i> Errore Durata</button>
|
||||
}
|
||||
</div>
|
||||
<div class="col-6 my-2 px-1">
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="col-6 col-md-5 col-lg-3 my-2">
|
||||
<div class="rounded-3 py-2 px-3 text-center bg-dark w-100 bg-gradient"><i class="fa-solid fa-square-check text-success"></i> Conferma OK</div>
|
||||
</div>
|
||||
<div class="col-3 col-md-4 col-lg-6 my-2 px-1">
|
||||
</div>
|
||||
}
|
||||
}
|
||||
<div class="col-3 my-2 ps-1">
|
||||
<button class="btn btn-outline-light w-100 px-0" @onclick="@CloseDet"><i class="fa-solid fa-xmark"></i> Close</button>
|
||||
</div>
|
||||
</div>
|
||||
@if (SeqStatus != null && SeqStatus.Count() > 0)
|
||||
{
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="d-flex justify-content-between fs-4">
|
||||
<div class="px-1">Prod: @($"{DayMinLav:N1}") min (@($"{DayOee:P1}"))</div>
|
||||
<div class="px-1">Copert: @($"{DayMinTot:N0}") min</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<div class="progress" style="min-height: 3.5rem;">
|
||||
@foreach (var item in SeqStatus)
|
||||
{
|
||||
<div class="progress-bar @item.CssBlock" style="width: @PercWidth(item.ValuePerc);">
|
||||
@if (item.HasError)
|
||||
{
|
||||
<div class="bg-danger text-warning" title="Error!!!">@item.Title</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div>@item.Title</div>
|
||||
}
|
||||
<small>@($"{item.Value:N0}min")</small>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="row mx-0 bg-dark bg-gradient">
|
||||
<div class="col-6 mt-2">
|
||||
<button class="btn btn-warning w-100" @onclick="() => DoCancel()"><i class="fa-solid fa-ban"></i> Cancel</button>
|
||||
</div>
|
||||
<div class="col-6 mt-2">
|
||||
@if (EditRecord.IsWork && (!string.IsNullOrEmpty(EditRecord.CodArticolo) && EditRecord.PzBuoni > 0 && EditRecord.TCiclo > 0) || (!EditRecord.IsWork && EditRecord.MinProd > 0))
|
||||
{
|
||||
<button class="btn btn-success w-100" @onclick="() => DoSave()"><i class="fa-solid fa-floppy-disk"></i> Save</button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="btn btn-secondary disabled w-100"><i class="fa-solid fa-floppy-disk"></i> Save</button>
|
||||
}
|
||||
</div>
|
||||
<div class="col-12 my-2">
|
||||
@if (EditRecord.IsWork)
|
||||
{
|
||||
@if (doSearchArt)
|
||||
{
|
||||
<dialog class="modal fade show" tabindex="-1" style="display:block; background-color: rgba(10,10,10,.6);" aria-modal="true" role="dialog">
|
||||
<div class="modal-dialog modal-xl">
|
||||
<div class="modal-content p-2">
|
||||
<div class="modal-title d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
<h3>Selezione Articoli da ricerca</h3>
|
||||
</div>
|
||||
<div class="px-0">
|
||||
<button class="btn btn-outline-dark" @onclick="() => SearchArtToggle()"><i class="fa-solid fa-xmark"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<SelectCodArt SearchMinChar="3" E_CodArt="SetArtSelected"></SelectCodArt>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
}
|
||||
<div class="row">
|
||||
<div class="col-6 col-lg-3 my-2">
|
||||
<div class="form-floating">
|
||||
<input type="text" class="form-control" @bind="@EditRecord.KeyRichiesta"></input>
|
||||
<label>Commessa</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 col-lg-3 my-2">
|
||||
<div class="input-group">
|
||||
<div class="form-floating">
|
||||
<input type="text" class="form-control" @bind="@EditRecord.CodArticolo"></input>
|
||||
<label>Articolo</label>
|
||||
</div>
|
||||
<button class="btn btn-success" @onclick="() => SearchArtToggle()"><i class="fa-brands fa-searchengin fa-2x"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 col-lg-2 my-2 pe-0">
|
||||
<div class="form-floating">
|
||||
@if (enableEditTime)
|
||||
{
|
||||
<input type="time" class="form-control" @bind="@EditRecord.InizioStato"></input>
|
||||
}
|
||||
else
|
||||
{
|
||||
<input type="time" class="form-control disabled text-secondary" @bind="@EditRecord.InizioStato" disabled></input>
|
||||
}
|
||||
<label>Inizio</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 col-lg-2 my-2">
|
||||
<div class="form-floating">
|
||||
<input type="number" class="form-control" @bind="@EditRecord.PzBuoni" step="1"></input>
|
||||
<label>Pezzi</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 col-lg-2 my-2 ps-0">
|
||||
<div class="form-floating">
|
||||
<select @bind="@EditRecord.TCiclo" class="form-select">
|
||||
@foreach (var item in ListTCiclo)
|
||||
{
|
||||
<option value="@item.Key">@item.Value</option>
|
||||
}
|
||||
</select>
|
||||
<label>T.Ciclo</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="form-floating">
|
||||
<select @bind="@EditRecord.IdxTipoEv" class="form-select">
|
||||
@foreach (var item in ListEvents)
|
||||
{
|
||||
<option value="@item.value">@item.label</option>
|
||||
}
|
||||
</select>
|
||||
<label>Tipo Fermata</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 my-2">
|
||||
<div class="form-floating">
|
||||
@if (enableEditTime)
|
||||
{
|
||||
<input type="time" class="form-control" @bind="@EditRecord.InizioStato"></input>
|
||||
}
|
||||
else
|
||||
{
|
||||
<input type="time" class="form-control disabled" @bind="@EditRecord.InizioStato" disabled></input>
|
||||
}
|
||||
<label>Inizio</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 my-2">
|
||||
<div class="form-floating">
|
||||
<input type="number" id="minProd" name="minProd" class="form-control" @bind="@EditRecord.MinProd" step="0.1" placeholder="0.0" min="0" max="1440"></input>
|
||||
<label>Durata (min)</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="col-12 px-1">
|
||||
<table class="table table-dark table-sm table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>Macc</th>
|
||||
<th>Stato</th>
|
||||
<th>Art.</th>
|
||||
<th>Ora</th>
|
||||
<th class="text-end">Pezzi</th>
|
||||
<th class="text-end">T.Ciclo</th>
|
||||
<th class="text-end">Minuti</th>
|
||||
<th class="text-end"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (ListDay == null)
|
||||
{
|
||||
<tr>
|
||||
<td colspan="9">
|
||||
<div class="alert alert-info fs-6">Nessun dato disponibile</div>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var item in ListDay)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
@if (item.Imported == null)
|
||||
{
|
||||
<button class="btn btn-sm btn-primary" @onclick="() => DoEdit(item)"><i class="fa-solid fa-pen"></i></button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="btn btn-sm btn-secondary disabled"><i class="fa-solid fa-pen"></i></button>
|
||||
}
|
||||
</td>
|
||||
<td>@item.IdxMacchina</td>
|
||||
<td>@(EvDescript(item.IdxTipoEv))</td>
|
||||
<td>
|
||||
<div>@item.CodArticolo</div>
|
||||
@if (!string.IsNullOrEmpty(item.KeyRichiesta))
|
||||
{
|
||||
<small>@item.KeyRichiesta</small>
|
||||
}
|
||||
</td>
|
||||
<td title="@($"{item.InizioStato:yyyy.MM.dd HH:mm:ss} --> {item.FineStato:yyyy.MM.dd HH:mm:ss}")">@($"{item.InizioStato:HH:mm}")</td>
|
||||
<td class="text-end">@item.PzBuoni</td>
|
||||
<td class="text-end">@($"{item.TCiclo:f2}")</td>
|
||||
<td class="text-end">@($"{item.MinProd:f2}")</td>
|
||||
<td class="text-end">
|
||||
@if (item.Imported == null)
|
||||
{
|
||||
<button class="btn btn-sm btn-danger" @onclick="() => DoDelete(item)"><i class="fa-solid fa-trash-can"></i></button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="btn btn-sm btn-secondary disabled"><i class="fa-solid fa-trash-can"></i></button>
|
||||
|
||||
}
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
@if (showProgress)
|
||||
{
|
||||
<ProgressDisplay RefreshInterval="100" Title="@progressTitle" MaxVal="100" CurrVal="@currVal" NextVal="@nextVal" ExpTimeMSec="@expTimeMsec" DisplaySize="ProgressDisplay.ModalSize.Medium"></ProgressDisplay>
|
||||
}
|
||||
@@ -0,0 +1,618 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.JSInterop;
|
||||
using MP.Core.DTO;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using MP_TAB3.Pages;
|
||||
using NLog;
|
||||
using System.Globalization;
|
||||
using System.Net.Security;
|
||||
using static MP_TAB3.Components.ProdAdvDispl;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class InsManual
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExplModel? RecMSE
|
||||
{
|
||||
get => currRecMSE;
|
||||
set
|
||||
{
|
||||
// salvo SOLO SE non sono in conferma
|
||||
if (!confProdActive)
|
||||
{
|
||||
currRecMSE = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected DateTime dtCurr
|
||||
{
|
||||
get => selDtCurr;
|
||||
set
|
||||
{
|
||||
if (selDtCurr != value)
|
||||
{
|
||||
selDtCurr = value;
|
||||
dtMonthStart = new DateTime(value.Year, value.Month, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[Inject]
|
||||
protected IJSRuntime JSRuntime { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected MessageService MServ { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected TabDataService TabDServ { get; set; } = null!;
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected void AddNew(bool isWork)
|
||||
{
|
||||
if (RecMSE != null)
|
||||
{
|
||||
string idxMacc = RecMSE.IdxMacchina;
|
||||
DateTime startPeriod = dtCurr.Date;
|
||||
if (ListDay != null)
|
||||
{
|
||||
var lastRec = ListDay.LastOrDefault();
|
||||
if (lastRec != null && lastRec.FineStato.HasValue)
|
||||
{
|
||||
startPeriod = lastRec.FineStato.Value;
|
||||
}
|
||||
else
|
||||
{
|
||||
startPeriod = dtCurr.Date.AddHours(6);
|
||||
}
|
||||
enableEditTime = ListDay.Count == 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
enableEditTime = true;
|
||||
}
|
||||
// evento da richiesta: default lavora/spenta
|
||||
int idxTipo = isWork ? 1 : 12;
|
||||
// creazione nuovo record ed aggiunta in coda agli esistenti...
|
||||
EditRecord = new InsManualiModel()
|
||||
{
|
||||
IdxMacchina = idxMacc,
|
||||
InizioStato = startPeriod,
|
||||
IdxTipoEv = idxTipo,
|
||||
MatrOpr = MServ.MatrOpr
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Annulla editing
|
||||
/// </summary>
|
||||
/// <param name="selRec"></param>
|
||||
protected void DoCancel()
|
||||
{
|
||||
doSearchArt = false;
|
||||
EditRecord = null;
|
||||
ReloadData();
|
||||
RecalcDayData(dtCurr);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// impossta record x eliminazione
|
||||
/// </summary>
|
||||
/// <param name="selRec"></param>
|
||||
protected async Task DoDelete(InsManualiModel selRec)
|
||||
{
|
||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler eliminare il record tipo {selRec.IdxTipoEv} | {selRec.InizioStato:yyyy.MM.dd HH:mm} per {selRec.MinProd:N2} min?"))
|
||||
return;
|
||||
// esegue eliminazione del record...
|
||||
await TabDServ.InsManDelete(selRec);
|
||||
|
||||
doSearchArt = false;
|
||||
EditRecord = null;
|
||||
|
||||
// rileggo i dati...
|
||||
ReloadData();
|
||||
RecalcDayData(dtCurr);
|
||||
|
||||
if (!IsTimeInfoOk(dtCurr, true))
|
||||
{
|
||||
int numChange = await DoRecalcDay();
|
||||
}
|
||||
|
||||
// rileggo i dati...
|
||||
ReloadData();
|
||||
RecalcDayData(dtCurr);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// imposta record x editing
|
||||
/// </summary>
|
||||
/// <param name="selRec"></param>
|
||||
protected void DoEdit(InsManualiModel? selRec)
|
||||
{
|
||||
doSearchArt = false;
|
||||
if (selRec == null)
|
||||
{
|
||||
enableEditTime = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
enableEditTime = true;
|
||||
if (ListDay != null && ListDay.Count > 0)
|
||||
{
|
||||
var firstRec = ListDay.FirstOrDefault();
|
||||
if (firstRec != null)
|
||||
{
|
||||
enableEditTime = selRec.InizioStato <= firstRec.InizioStato;
|
||||
}
|
||||
}
|
||||
// altrimenti è vuoto x cui è libero
|
||||
else
|
||||
{
|
||||
enableEditTime = true;
|
||||
}
|
||||
}
|
||||
EditRecord = selRec;
|
||||
}
|
||||
|
||||
protected async Task DoSave()
|
||||
{
|
||||
doSearchArt = false;
|
||||
// solo se ho record...
|
||||
if (EditRecord != null)
|
||||
{
|
||||
// sistemo i dati...
|
||||
var dayElap = EditRecord.InizioStato.Subtract(EditRecord.InizioStato.Date);
|
||||
EditRecord.MatrOpr = MServ.MatrOpr;
|
||||
EditRecord.InizioStato = dtCurr.Date.Add(dayElap);
|
||||
// imposto altri campi secondo il TIPO di record...
|
||||
if (EditRecord.IsWork)
|
||||
{
|
||||
// controllo min pezzi a 1
|
||||
EditRecord.PzBuoni = EditRecord.PzBuoni > 0 ? EditRecord.PzBuoni : 1;
|
||||
// calcolo durata
|
||||
EditRecord.MinProd = EditRecord.TCiclo * EditRecord.PzBuoni;
|
||||
}
|
||||
else
|
||||
{
|
||||
EditRecord.CodArticolo = "ND";
|
||||
EditRecord.PzBuoni = 0;
|
||||
EditRecord.TCiclo = 0;
|
||||
}
|
||||
EditRecord.FineStato = EditRecord.InizioStato.AddMinutes((double)EditRecord.MinProd);
|
||||
// lancio salvataggio sul DB
|
||||
await TabDServ.InsManUpsert(EditRecord);
|
||||
// rileggo i dati...
|
||||
ReloadData();
|
||||
if (!IsTimeInfoOk(dtCurr, false))
|
||||
{
|
||||
int numChange = await DoRecalcDay();
|
||||
}
|
||||
// rileggo i dati...
|
||||
ReloadData();
|
||||
RecalcDayData(dtCurr);
|
||||
EditRecord = null;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// traduzione evento da lista...
|
||||
/// </summary>
|
||||
/// <param name="idxTipoEv"></param>
|
||||
/// <returns></returns>
|
||||
protected string EvDescript(int idxTipoEv)
|
||||
{
|
||||
string answ = "-";
|
||||
if (ListEvents != null)
|
||||
{
|
||||
var rSel = ListEvents.FirstOrDefault(x => x.value == idxTipoEv);
|
||||
if (rSel != null)
|
||||
{
|
||||
answ = rSel.label;
|
||||
}
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
protected async Task FixMissing()
|
||||
{
|
||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler riempire i periodi mancanti?"))
|
||||
return;
|
||||
|
||||
// filtra dati odierni x tab editabile...
|
||||
if (ListPeriod != null && ListPeriod.Count > 0)
|
||||
{
|
||||
// chiamo insert con eventi spenta (12) HardCoded...
|
||||
int numAdd = await TabDServ.InsManFillMissing(dtCurr, ListDay, 12, MServ.MatrOpr);
|
||||
// rileggo i dati...
|
||||
ReloadData();
|
||||
RecalcDayData(dtCurr);
|
||||
}
|
||||
}
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
if (RecMSE != null && RecMSE.IdxMacchina != idxMacc)
|
||||
{
|
||||
idxMacc = RecMSE.IdxMacchina;
|
||||
ReloadData();
|
||||
}
|
||||
await Task.Delay(1);
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private int currVal = 0;
|
||||
private Dictionary<DateTime, string> DateCFF = new Dictionary<DateTime, string>();
|
||||
|
||||
/// <summary>
|
||||
/// Lista date + css associato x display calendario
|
||||
/// </summary>
|
||||
private Dictionary<DateTime, string> DateCheck = new Dictionary<DateTime, string>();
|
||||
|
||||
/// <summary>
|
||||
/// % record importati
|
||||
/// </summary>
|
||||
private double DayImportRatio = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Minuti lavorati (da sequencer)
|
||||
/// </summary>
|
||||
private double DayMinLav = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Minuti caricati (da sequencer)
|
||||
/// </summary>
|
||||
private double DayMinTot = 0;
|
||||
|
||||
/// <summary>
|
||||
/// OEE giornaliero (ore lav / 24h)
|
||||
/// </summary>
|
||||
private double DayOee = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Boolear controllo visualizzazione ricerca articoli
|
||||
/// </summary>
|
||||
private bool doSearchArt = false;
|
||||
|
||||
private DateTime dtMonthStart = new DateTime(2000, 1, 1);
|
||||
private InsManualiModel? EditRecord = null;
|
||||
|
||||
/// <summary>
|
||||
/// Abilitazione edit DataOra inizio (solo x primo record, poi devono essere consecutivi...
|
||||
/// </summary>
|
||||
private bool enableEditTime = false;
|
||||
|
||||
private int expTimeMsec = 1000;
|
||||
private string idxMacc = "";
|
||||
private int nextVal = 0;
|
||||
private string progressTitle = "Approvazione Giornata";
|
||||
private List<ManualStatusDTO> SeqStatus = new List<ManualStatusDTO>();
|
||||
|
||||
private bool showProgress = false;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private bool confProdActive { get; set; } = false;
|
||||
|
||||
private MappaStatoExplModel? currRecMSE { get; set; } = null;
|
||||
private List<InsManualiModel>? ListDay { get; set; } = new List<InsManualiModel>();
|
||||
|
||||
private List<InsManDayDto>? ListDTO { get; set; } = new List<InsManDayDto>();
|
||||
|
||||
/// <summary>
|
||||
/// Eventi inseribili come fermate
|
||||
/// </summary>
|
||||
private List<vSelEventiBCodeModel> ListEvents { get; set; } = new List<vSelEventiBCodeModel>();
|
||||
|
||||
private List<InsManualiModel>? ListPeriod { get; set; } = new List<InsManualiModel>();
|
||||
|
||||
/// <summary>
|
||||
/// Eventi inseribili come fermate
|
||||
/// </summary>
|
||||
private Dictionary<decimal, string> ListTCiclo { get; set; } = new Dictionary<decimal, string>();
|
||||
|
||||
//
|
||||
private DateTime selDtCurr { get; set; } = DateTime.Today;
|
||||
|
||||
private bool showDetail { get; set; } = false;
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private void CloseDet()
|
||||
{
|
||||
showDetail = false;
|
||||
}
|
||||
|
||||
private void DisplayDate(DateTime dtSel)
|
||||
{
|
||||
dtCurr = dtSel;
|
||||
showDetail = true;
|
||||
RecalcDayData(dtSel);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ricalcolo dati giornalieri
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async Task<int> DoRecalcDay()
|
||||
{
|
||||
int numChange = 0;
|
||||
// prendo i dati odierni, e uno x uno ciclo e sistemo...
|
||||
DateTime lastDate = dtCurr.Date;
|
||||
List<InsManualiModel> ListChange = new List<InsManualiModel>();
|
||||
if (ListDay != null && ListDay.Count > 0)
|
||||
{
|
||||
foreach (var item in ListDay)
|
||||
{
|
||||
bool isFirst = lastDate.TimeOfDay == new TimeSpan(0);
|
||||
if ((item.InizioStato < lastDate && isFirst) || (item.InizioStato != lastDate && !isFirst))
|
||||
{
|
||||
item.InizioStato = lastDate;
|
||||
}
|
||||
// controllo se la data fine � ok...
|
||||
if (!item.FineStato.HasValue || Math.Abs(item.InizioStato.AddMinutes((double)item.MinProd).Subtract(item.FineStato.Value).TotalMinutes) > 1)
|
||||
{
|
||||
item.FineStato = item.InizioStato.AddMinutes((double)item.MinProd);
|
||||
item.MatrOpr = MServ.MatrOpr;
|
||||
numChange++;
|
||||
ListChange.Add(item);
|
||||
}
|
||||
lastDate = item.FineStato.Value;
|
||||
}
|
||||
// salvo tutto
|
||||
await TabDServ.InsManUpsert(ListChange);
|
||||
}
|
||||
return numChange;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Congela la definizione giornaliera di produzione
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async Task FreezeDay()
|
||||
{
|
||||
if (dtCurr.Date >= DateTime.Today)
|
||||
{
|
||||
await JSRuntime.InvokeVoidAsync("alert", $"Impossibile procedere con conferma: la giornata non si è ancora conclusa.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Sicuro di voler confermare gli eventi della giornata? i valori non saranno più modificabili."))
|
||||
return;
|
||||
|
||||
// esegue stored
|
||||
showProgress = true;
|
||||
await Task.Delay(10);
|
||||
bool fatto = false;
|
||||
progressTitle = "Registrazione conferma giornaliera";
|
||||
currVal = 0;
|
||||
nextVal = 90;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
if (RecMSE != null)
|
||||
{
|
||||
await Task.Delay(10);
|
||||
await InvokeAsync(StateHasChanged);
|
||||
await Task.Delay(10);
|
||||
fatto = await TabDServ.InsManFreezeDay(RecMSE.IdxMacchina, dtCurr);
|
||||
currVal = 90;
|
||||
nextVal = 100;
|
||||
progressTitle = "Ricalcolo Giornata";
|
||||
await InvokeAsync(StateHasChanged);
|
||||
EditRecord = null;
|
||||
ReloadData();
|
||||
RecalcDayData(dtCurr);
|
||||
showProgress = false;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
private bool IsTimeInfoOk(DateTime reqDate, bool reloadDay)
|
||||
{
|
||||
bool allOk = false;
|
||||
List<InsManualiModel> myListDay = new List<InsManualiModel>();
|
||||
if (ListDTO != null)
|
||||
{
|
||||
var dayDto = ListDTO.FirstOrDefault(x => x.DataRif == reqDate.Date);
|
||||
if (dayDto != null && ListDay != null && ListPeriod != null)
|
||||
{
|
||||
// se listDay vuoto forzo reload...
|
||||
if (ListDay.Count == 0)
|
||||
{
|
||||
reloadDay = true;
|
||||
}
|
||||
if (reloadDay)
|
||||
{
|
||||
// calcolo eventi giorno
|
||||
myListDay = ListPeriod
|
||||
.Where(x => x.InizioStato.Date == reqDate)
|
||||
.OrderBy(x => x.InizioStato)
|
||||
.ThenBy(x => x.IdxInsMan)
|
||||
.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
myListDay = ListDay;
|
||||
}
|
||||
|
||||
var firstRec = myListDay.OrderBy(x => x.InizioStato).FirstOrDefault();
|
||||
var lastRec = myListDay.OrderByDescending(x => x.InizioStato).FirstOrDefault();
|
||||
var deltaMins = lastRec!.FineStato!.Value.Subtract(firstRec!.InizioStato).TotalMinutes;
|
||||
allOk = Math.Abs(deltaMins - (double)dayDto.MinProdTot) < 1;
|
||||
}
|
||||
}
|
||||
return allOk;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Restitusice la % formattata in invariant con "." e senza spazi prima della %
|
||||
/// </summary>
|
||||
/// <param name="value"></param>
|
||||
/// <returns></returns>
|
||||
private string PercWidth(double value)
|
||||
{
|
||||
return value.ToString("P2", CultureInfo.InvariantCulture).Replace(" ", "");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ricalcola dati giornalieri
|
||||
/// </summary>
|
||||
/// <param name="dtSel"></param>
|
||||
private void RecalcDayData(DateTime dtSel)
|
||||
{
|
||||
ListDay = new List<InsManualiModel>();
|
||||
SeqStatus = new List<ManualStatusDTO>();
|
||||
DayMinLav = 0;
|
||||
DayMinTot = 0;
|
||||
DayImportRatio = 0;
|
||||
// filtra dati odierni x tab editabile...
|
||||
if (ListPeriod != null && ListPeriod.Count > 0)
|
||||
{
|
||||
// calcolo eventi giorno
|
||||
ListDay = ListPeriod
|
||||
.Where(x => x.InizioStato.Date == dtSel)
|
||||
.OrderBy(x => x.InizioStato)
|
||||
.ThenBy(x => x.IdxInsMan)
|
||||
.ToList();
|
||||
|
||||
// ora calcolo il sequencer x mostrare dettaglio orario...
|
||||
SeqStatus = TabDServ.InsManSeqDayStatus(dtCurr, ListDay);
|
||||
|
||||
// calcolo min lavorati odierni
|
||||
DayMinLav = 0;
|
||||
var recLav = SeqStatus.FirstOrDefault(x => x.IdxTipo == 1);
|
||||
if (recLav != null)
|
||||
{
|
||||
DayMinLav = recLav.Value;
|
||||
DayOee = recLav.ValuePerc;
|
||||
}
|
||||
// minuti totali come record day...
|
||||
DayMinTot = (double)ListDay.Sum(x => x.MinProd);
|
||||
if (dtSel.Date == dtCurr.Date && ListDTO != null)
|
||||
{
|
||||
var dayDto = ListDTO.FirstOrDefault(x => x.DataRif == dtSel.Date);
|
||||
if (dayDto != null)
|
||||
{
|
||||
DayImportRatio = dayDto.RatioImport;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ReloadData()
|
||||
{
|
||||
// rileggo dati periodo...
|
||||
ListDTO = new List<InsManDayDto>();
|
||||
DateTime oggi = DateTime.Today;
|
||||
if (RecMSE != null)
|
||||
{
|
||||
string IdxMacc = RecMSE.IdxMacchina;
|
||||
// valori selezionabili x TCiclo
|
||||
var rawListTCiclo = TabDServ.ListValuesFilt("InsManuali", IdxMacc);
|
||||
ListTCiclo = new Dictionary<decimal, string>();
|
||||
foreach (var item in rawListTCiclo)
|
||||
{
|
||||
string sKey = item.value.Replace(",", ".");
|
||||
decimal chiave = 0;
|
||||
if (decimal.TryParse(sKey, NumberStyles.Any, CultureInfo.InvariantCulture, out chiave))
|
||||
{
|
||||
ListTCiclo.Add(chiave, item.label);
|
||||
}
|
||||
}
|
||||
// eventi fermate
|
||||
var eventsAll = TabDServ.AnagEventiGetByMacch(IdxMacc);
|
||||
if (eventsAll != null)
|
||||
{
|
||||
ListEvents = eventsAll.Where(x => x.EventoTablet).ToList();
|
||||
}
|
||||
|
||||
DateTime MeseStart = new DateTime(dtCurr.Year, dtCurr.Month, 1);
|
||||
DateTime MeseEnd = MeseStart.AddMonths(1);
|
||||
ListPeriod = TabDServ.InsManFilt(IdxMacc, MeseStart, MeseEnd);
|
||||
ListDTO = TabDServ.InsManDayDto(ListPeriod);
|
||||
DateCheck = new Dictionary<DateTime, string>();
|
||||
DateCFF = new Dictionary<DateTime, string>();
|
||||
string cssImport = "bg-success text-light rounded-circle p-2";
|
||||
string cssOkDay = "bg-success bg-opacity-50 text-light rounded-circle p-2";
|
||||
string cssPartDay = "bg-info bg-opacity-25 text-light rounded-circle p-2";
|
||||
string cssHasData = "bg-warning text-light rounded-circle p-2";
|
||||
string cssToday = " border border-info rounded-circle p-2";
|
||||
if (ListDTO != null)
|
||||
{
|
||||
string currCss = "";
|
||||
foreach (var item in ListDTO)
|
||||
{
|
||||
currCss = "";
|
||||
// controllo minuti dichiarati...
|
||||
if (item.RatioImport == 1)
|
||||
{
|
||||
currCss = cssImport;
|
||||
}
|
||||
else if (IsTimeInfoOk(item.DataRif.Date, true))
|
||||
{
|
||||
currCss = item.MinProdTot < 1440 ? cssPartDay : cssOkDay;
|
||||
}
|
||||
else
|
||||
{
|
||||
currCss = item.MinProdTot == 0 ? "" : cssHasData;
|
||||
}
|
||||
DateCheck.Add(item.DataRif, currCss);
|
||||
}
|
||||
}
|
||||
// aggiungo comunque oggi...
|
||||
if (!DateCheck.ContainsKey(oggi))
|
||||
{
|
||||
DateCheck.Add(oggi, cssToday);
|
||||
}
|
||||
else
|
||||
{
|
||||
DateCheck[oggi] += cssToday;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ReloadMonth(DateTime dtSel)
|
||||
{
|
||||
dtCurr = dtSel;
|
||||
ReloadData();
|
||||
await Task.Delay(1);
|
||||
}
|
||||
|
||||
private void SearchArtToggle()
|
||||
{
|
||||
doSearchArt = !doSearchArt;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Salva selezione articolo
|
||||
/// </summary>
|
||||
/// <param name="codArt"></param>
|
||||
private void SetArtSelected(string codArt)
|
||||
{
|
||||
if (EditRecord != null)
|
||||
{
|
||||
EditRecord.CodArticolo = codArt;
|
||||
doSearchArt = false;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
}
|
||||
}
|
||||
@@ -1,54 +1,134 @@
|
||||
<div class="d-flex justify-content-between flex-wrap mt-2">
|
||||
<div class="col-6 flex-fill ">
|
||||
<div class="p-2 h-100">
|
||||
<div class="cardObj p-2 h-100">
|
||||
<div class="fs-6 text-secondary">Iob Type</div>
|
||||
<div class="d-flex justify-content-center flex-wrap align-items-center">
|
||||
@if(infosIob.iType == MP.Data.Objects.Enums.IobType.rPi)
|
||||
{
|
||||
<img src="images/linuxLogo.png" style="height: 7em; width: 7em;" />
|
||||
}
|
||||
else if (infosIob.iType == MP.Data.Objects.Enums.IobType.WIN)
|
||||
{
|
||||
<img src="images/winLogo.png" style="height: 7em; width: 7em;" />
|
||||
}
|
||||
else if (infosIob.iType == MP.Data.Objects.Enums.IobType.ND)
|
||||
{
|
||||
<img src="images/pythonLogo.png" style="height: 7em; width: 7em;" />
|
||||
}
|
||||
|
||||
<div class="d-flex justify-content-between flex-wrap align-items-centermt-2">
|
||||
<div class="col-12 col-lg-6 flex-fill ">
|
||||
<div class="p-2">
|
||||
<div class="cardObj w-100 p-2">
|
||||
<div class="d-flex justify-content-between mb-3 border-bottom border-secondary">
|
||||
<div class="px-0">
|
||||
<div class="fs-5 text-secondary">IOB Data</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between my-2">
|
||||
<div class="px-0">
|
||||
@{
|
||||
string imgUrl = "images/pythonLogo.png";
|
||||
if (IobInfo.iType == MP.Core.Objects.Enums.IobType.rPi)
|
||||
{
|
||||
imgUrl = "images/linuxLogo.png";
|
||||
}
|
||||
else if (IobInfo.iType == MP.Core.Objects.Enums.IobType.WIN)
|
||||
{
|
||||
imgUrl = "images/winLogo.png";
|
||||
}
|
||||
}
|
||||
<img src="@imgUrl" style="height: 3em; width: 3em;" />
|
||||
</div>
|
||||
<div class="px-0 text-end">
|
||||
<div class="fs-5 fw-bold">@IobInfo.name</div>
|
||||
<div class="fs-5 fw-bold">@idxMacch</div>
|
||||
</div>
|
||||
</div>
|
||||
@if (!string.IsNullOrEmpty(MacIobConf("IobType")))
|
||||
{
|
||||
<div class="d-flex justify-content-between my-0">
|
||||
<div class="px-0">
|
||||
Type:
|
||||
</div>
|
||||
<div class="px-0 text-end">
|
||||
<div class="fs-5 fw-bold">@MacIobConf("IobType")</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<div class="d-flex justify-content-between my-0">
|
||||
<div class="px-0">
|
||||
IP addr:
|
||||
</div>
|
||||
<div class="px-0 text-end">
|
||||
<div class="fs-6 fw-bold">@IobInfo.IP</div>
|
||||
</div>
|
||||
</div>
|
||||
@if (!string.IsNullOrEmpty(MacIobConf("IobVersion")))
|
||||
{
|
||||
<div class="d-flex justify-content-between my-0">
|
||||
<div class="px-0">
|
||||
Vers:
|
||||
</div>
|
||||
<div class="px-0 text-end">
|
||||
<div class="fs-6 fw-bold">@MacIobConf("IobVersion")</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Abs Counter:
|
||||
</div>
|
||||
<div class="px-0 text-end">
|
||||
@{
|
||||
string icnCol = IobInfo.CNC_Counter ? "fa-solid fa-thumbs-up text-success" : "fa-solid fa-thumbs-down text-secondary";
|
||||
}
|
||||
<i class="@icnCol"></i>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 h-100 flex-fill ">
|
||||
<div class="col-12 col-lg-6 h-100 flex-fill ">
|
||||
<div class="p-2">
|
||||
<div class="cardObj w-100 p-2">
|
||||
<div class="fs-6 text-secondary">Machine Cod</div>
|
||||
<div class="fs-4 fw-bold">@idxMacch</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-2">
|
||||
<div class="cardObj w-100 p-2">
|
||||
<div class="fs-6 text-secondary">Iob Address</div>
|
||||
<div class="fs-4 fw-bold">@infosIob.IP</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between flex-wrap align-items-centermt-2">
|
||||
<div class="col-6 flex-fill ">
|
||||
<div class="p-2">
|
||||
<div class="cardObj w-100 p-2">
|
||||
<div class="fs-6 text-secondary">Iob Name</div>
|
||||
<div class="fs-4 fw-bold">@infosIob.name</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 h-100 flex-fill ">
|
||||
<div class="p-2">
|
||||
<div class="cardObj w-100 p-2">
|
||||
<div class="fs-6 text-secondary">CNC Absolute counter</div>
|
||||
<div class="fs-4 fw-bold">@infosIob.CNC_Counter</div>
|
||||
<div class="d-flex justify-content-between mb-1 border-bottom border-secondary">
|
||||
<div class="px-0">
|
||||
<div class="fs-5 text-secondary">Machine Data</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between mt-2">
|
||||
<div class="px-0 fs-1">
|
||||
<i class="fa-solid fa-industry"></i>
|
||||
</div>
|
||||
<div class="px-0 text-end">
|
||||
<div class="fs-5 fw-bold">@MacIobConf("Vendor")</div>
|
||||
<div class="fs-5 fw-bold">@MacIobConf("Model")</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between my-0">
|
||||
<div class="px-0">
|
||||
IP Addr:
|
||||
</div>
|
||||
<div class="px-0 text-end">
|
||||
<div class="fs-5 fw-bold">@MacIobConf("MachIp")</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between my-0">
|
||||
<div class="px-0">
|
||||
Port:
|
||||
</div>
|
||||
<div class="px-0 text-end">
|
||||
<div class="fs-5 fw-bold">@MacIobConf("MachPort")</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="accordion" id="AccordGrp">
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header" id="headingOne">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
|
||||
Show All Opt.Params
|
||||
</button>
|
||||
</h2>
|
||||
<div id="collapseOne" class="accordion-collapse collapse" aria-labelledby="headingOne" data-bs-parent="#AccordGrp">
|
||||
<div class="accordion-body">
|
||||
<ul class="list-group list-group-sm">
|
||||
@foreach (var item in MachineData)
|
||||
{
|
||||
<li class="list-group-item list-group-item-dark">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="px-0">@item.Key</div>
|
||||
<div class="px-0 fw-bold">@item.Value</div>
|
||||
</div>
|
||||
</li>
|
||||
}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using MP.Data.Objects;
|
||||
using MP.Core.Objects;
|
||||
using MP.Data.Services;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
@@ -15,7 +15,9 @@ namespace MP_TAB3.Components
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected IOB_data infosIob { get; set; } = new IOB_data();
|
||||
protected IOB_data IobInfo { get; set; } = new IOB_data();
|
||||
|
||||
protected Dictionary<string, string> MachineData { get; set; } = new Dictionary<string, string>();
|
||||
|
||||
[Inject]
|
||||
protected TabDataService TabSrv { get; set; } = null!;
|
||||
@@ -26,7 +28,18 @@ namespace MP_TAB3.Components
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
infosIob = await TabSrv.IobInfo(idxMacch);
|
||||
IobInfo = await TabSrv.IobInfoAsync(idxMacch);
|
||||
MachineData = TabSrv.MachIobConf(idxMacch);
|
||||
}
|
||||
|
||||
public string MacIobConf(string kReq)
|
||||
{
|
||||
string answ = "-";
|
||||
if (MachineData.ContainsKey(kReq))
|
||||
{
|
||||
answ = MachineData[kReq];
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using Microsoft.JSInterop;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using System.Data;
|
||||
using System.Reflection.Metadata;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
{
|
||||
<div class="input-group">
|
||||
<span class="input-group-text" id="basic-addon1"><i class="fa-solid fa-building"></i></span>
|
||||
<select class="form-select form-select-sm" @bind="@IdxMaccSel">
|
||||
<select class="form-select form-select-sm" value="@idxMaccSel" @onchange="OnSelectionChanged">
|
||||
@if (ListMacchine == null)
|
||||
{
|
||||
<option value="" disabled>No record found</option>
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using MP_TAB3.Shared;
|
||||
using System;
|
||||
using NLog;
|
||||
using System.Reflection.Metadata;
|
||||
using static MongoDB.Driver.WriteConcern;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class MachSel
|
||||
public partial class MachSel : IDisposable
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
@@ -15,39 +15,20 @@ namespace MP_TAB3.Components
|
||||
public EventCallback<string> E_MachSel { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Protected Properties
|
||||
#region Public Methods
|
||||
|
||||
protected string IdxMaccSel
|
||||
public void Dispose()
|
||||
{
|
||||
get => idxMaccSel;
|
||||
set
|
||||
{
|
||||
if (idxMaccSel != value)
|
||||
{
|
||||
idxMaccSel = value;
|
||||
MsgServ.UserPrefSet(idxMaccCurr, value);
|
||||
E_MachSel.InvokeAsync(value).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
TDataService.DataInvalidated -= TDataService_DataInvalidated;
|
||||
}
|
||||
private string idxMaccSel { get; set; } = "";
|
||||
|
||||
[Inject]
|
||||
protected MessageService MsgServ { get; set; } = null!;
|
||||
#endregion Public Methods
|
||||
|
||||
protected Dictionary<string, string>? ListMacchine { get; set; } = null;
|
||||
|
||||
[Inject]
|
||||
protected SharedMemService SMServ { get; set; } = null!;
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
#region Protected Properties
|
||||
|
||||
protected string idxMaccCurr
|
||||
{
|
||||
@@ -62,59 +43,136 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
protected string IdxMaccSel
|
||||
{
|
||||
// inizilamente riporto machcina corrente da MSE
|
||||
if (RecMSE == null)
|
||||
get => idxMaccSel;
|
||||
set
|
||||
{
|
||||
IdxMaccSel = "";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(idxMaccSel))
|
||||
if (idxMaccSel != value)
|
||||
{
|
||||
// verifico se la macchina sia configurata tra le MSFD...
|
||||
if (SMServ.DictMacchMulti.ContainsKey(RecMSE.IdxMacchina))
|
||||
{
|
||||
isMulti = SMServ.DictMacchMulti[RecMSE.IdxMacchina] == 1;
|
||||
}
|
||||
if (isMulti)
|
||||
{
|
||||
|
||||
var listMulti = await TDataService.VMSFDGetAll();
|
||||
ListMacchine = listMulti
|
||||
.Where(x => x.IdxMacchina.Contains($"{RecMSE.IdxMacchina}#"))
|
||||
.ToDictionary(x => x.IdxMacchina, x => x.CodMaccArticolo);
|
||||
|
||||
if (ListMacchine.Count > 0)
|
||||
{
|
||||
// cerco se ho in storage la macchina selezionata...
|
||||
var idxMSel = MsgServ.UserPrefGet(idxMaccCurr);
|
||||
if (!string.IsNullOrEmpty(idxMSel))
|
||||
{
|
||||
IdxMaccSel = idxMSel;
|
||||
}
|
||||
else
|
||||
{
|
||||
IdxMaccSel = ListMacchine.FirstOrDefault().Key;
|
||||
}
|
||||
}
|
||||
}
|
||||
idxMaccSel = value;
|
||||
MsgServ.UserPrefSet(idxMaccCurr, value);
|
||||
}
|
||||
}
|
||||
await Task.Delay(1);
|
||||
}
|
||||
|
||||
protected Dictionary<string, string>? ListMacchine { get; set; } = null;
|
||||
|
||||
[Inject]
|
||||
protected MessageService MsgServ { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected SharedMemService SMServ { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected TabDataService TDataService { get; set; } = null!;
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
//base.OnInitialized();
|
||||
firstInit = true;
|
||||
TDataService.DataInvalidated += TDataService_DataInvalidated;
|
||||
}
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
// inizilamente riporto macchina corrente da MSE
|
||||
if (RecMSE == null)
|
||||
{
|
||||
IdxMaccSel = "";
|
||||
Log.Error("Impossibile selezionare: recMSE � nullo");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (string.IsNullOrEmpty(idxMaccSel))
|
||||
{
|
||||
await ReloadSelector(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
Log.Error($"Errore in MachSel.OnParametersSetAsync{Environment.NewLine}{exc}");
|
||||
}
|
||||
await Task.Delay(1);
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private bool firstInit = true;
|
||||
|
||||
private bool isMulti = false;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private string idxMaccSel { get; set; } = "";
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private async Task OnSelectionChanged(ChangeEventArgs e)
|
||||
{
|
||||
var newValue = e.Value?.ToString();
|
||||
if (newValue != idxMaccSel)
|
||||
{
|
||||
IdxMaccSel = newValue;
|
||||
await E_MachSel.InvokeAsync(newValue);
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ReloadSelector(bool doReload)
|
||||
{
|
||||
if (RecMSE != null && firstInit)
|
||||
{
|
||||
firstInit = false;
|
||||
// verifico se la macchina sia configurata tra le MSFD...
|
||||
if (SMServ.DictMacchMulti.ContainsKey(RecMSE.IdxMacchina))
|
||||
{
|
||||
isMulti = SMServ.DictMacchMulti[RecMSE.IdxMacchina] == 1;
|
||||
}
|
||||
if (isMulti)
|
||||
{
|
||||
var listMulti = await TDataService.VMSFDGetAll(doReload);
|
||||
ListMacchine = listMulti
|
||||
.Where(x => x.IdxMacchina.Contains($"{RecMSE.IdxMacchina}#"))
|
||||
.ToDictionary(x => x.IdxMacchina, x => x.CodMaccArticolo);
|
||||
|
||||
if (ListMacchine.Count > 0)
|
||||
{
|
||||
// cerco se ho in storage la macchina selezionata...
|
||||
var idxMSel = MsgServ.UserPrefGet(idxMaccCurr);
|
||||
if (!string.IsNullOrEmpty(idxMSel))
|
||||
{
|
||||
IdxMaccSel = idxMSel;
|
||||
await E_MachSel.InvokeAsync(idxMSel);
|
||||
}
|
||||
else
|
||||
{
|
||||
IdxMaccSel = ListMacchine.FirstOrDefault().Key;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async void TDataService_DataInvalidated(object? sender, EventArgs e)
|
||||
{
|
||||
await ReloadSelector(true);
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
}
|
||||
}
|
||||
@@ -1,286 +1,361 @@
|
||||
@if (isLoading)
|
||||
@if (isLoading || CRecMSE == null)
|
||||
{
|
||||
<div class="card text-white mapBlock shadow bg-secondary p-0 m-0">
|
||||
<div class="card-body">
|
||||
<div class="placeholder-glow">
|
||||
<span class="placeholder col-4"></span>
|
||||
<span class="placeholder col-7 mb-1"></span>
|
||||
<span class="placeholder col-12 mb-1 pholderHeight"></span>
|
||||
<span class="placeholder col-12 mb-1"></span>
|
||||
<span class="placeholder col-3 mb-1"></span>
|
||||
<span class="placeholder col-8"></span>
|
||||
<span class="placeholder col-3"></span>
|
||||
<span class="placeholder col-7 mb-1"></span>
|
||||
<span class="placeholder col-3"></span>
|
||||
<span class="placeholder col-8 mb-1"></span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
@if (RecMSE == null)
|
||||
@if (FullMode)
|
||||
{
|
||||
<div class="card text-white mapBlock shadow bg-secondary p-0 m-0">
|
||||
<div class="card-body">
|
||||
<div class="alert alert-info w-100 fs-3">No data</div>
|
||||
<div class="placeholder-glow">
|
||||
<span class="placeholder col-4"></span>
|
||||
<span class="placeholder col-7 mb-1"></span>
|
||||
<span class="placeholder col-12 mb-1 pholderHeight"></span>
|
||||
<span class="placeholder col-12 mb-1"></span>
|
||||
<span class="placeholder col-3 mb-1"></span>
|
||||
<span class="placeholder col-8"></span>
|
||||
<span class="placeholder col-3"></span>
|
||||
<span class="placeholder col-7 mb-1"></span>
|
||||
<span class="placeholder col-3"></span>
|
||||
<span class="placeholder col-8 mb-1"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<PlaceholderStatusMap></PlaceholderStatusMap>
|
||||
}
|
||||
else
|
||||
{
|
||||
@if (FullMode)
|
||||
<PlaceholderDetail></PlaceholderDetail>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@if (FullMode)
|
||||
{
|
||||
if (Width > 640)
|
||||
{
|
||||
if (Width > 640)
|
||||
{
|
||||
<div class="card bg-dark @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
|
||||
<img src="@ImgUrlMacc(RecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@RecMSE.CodMacchina">
|
||||
<div class="bg-black">
|
||||
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
|
||||
<div class="labelTop px-2 w-100">
|
||||
<div class="text-center fs-2 fw-bold">
|
||||
@RecMSE.Nome
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body rounded-bottom-4 p-0 bg-dark">
|
||||
<div class="@RecMSE.Semaforo py-0 px-1">
|
||||
<div class="d-flex justify-content-between fs-5">
|
||||
<div class="px-0 @cssClassTextDescr">
|
||||
<span>@RecMSE.DescrizioneStato </span>
|
||||
</div>
|
||||
<div class="px-0">
|
||||
<b>@(FormatDurata(RecMSE.Durata))</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-around">
|
||||
<div class="text-center text-success d-flex justify-content-between">
|
||||
<div>
|
||||
<i class="fa-regular fa-circle-check"></i> @($" {RecMSE.PezziConf}")
|
||||
</div>
|
||||
<div class="text-danger">
|
||||
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
|
||||
{
|
||||
@($"(- {datiProdAct.PzConfScarto})")
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center text-warning ">
|
||||
<div>
|
||||
<i class="fa-solid fa-layer-group"></i> @($" {RecMSE.PezziProd}")
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="col-4">
|
||||
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz rich" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-8 py-1" style="line-height: 1.6rem;">
|
||||
<div class="text-center text-light d-flex justify-content-between">
|
||||
<div class="px-1"><span>ART:</span></div>
|
||||
<div class="px-1">@($"{RecMSE.CodArticolo}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">ODL:</div>
|
||||
<div class="px-1">@($"ODL{RecMSE.IdxOdl:00000000}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">PODL:</div>
|
||||
<div class="px-1">@($"PODL{RecMSE.IdxPOdl:00000000}")</div>
|
||||
</div>
|
||||
<div class="card bg-dark @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
|
||||
<img src="@ImgUrlMacc(CRecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@CRecMSE.CodMacchina">
|
||||
<div class="bg-black">
|
||||
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
|
||||
<div class="labelTop px-2 w-100">
|
||||
<div class="text-center fs-2 fw-bold">
|
||||
@CRecMSE.Nome
|
||||
@if(isManual)
|
||||
{
|
||||
<i class="ps-1 text-light fs-3 fa-solid fa-puzzle-piece"></i>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="card bg-dark shadow @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
|
||||
<img src="@ImgUrlMacc(RecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@RecMSE.CodMacchina">
|
||||
<div class="bg-black">
|
||||
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
|
||||
<div class="labelTop px-2 py-0 w-100">
|
||||
<div class="text-center fs-2 fw-bold">
|
||||
@RecMSE.Nome
|
||||
</div>
|
||||
<div class="card-body rounded-bottom-4 p-0 bg-dark">
|
||||
<div class="@CRecMSE.Semaforo py-0 px-1">
|
||||
<div class="d-flex justify-content-between fs-5">
|
||||
<div class="px-0 @cssClassTextDescr">
|
||||
<span>@CRecMSE.DescrizioneStato </span>
|
||||
</div>
|
||||
<div class="px-0">
|
||||
<b>@(FormatDurata(CRecMSE.Durata))</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-body rounded-bottom-4 p-0 bg-dark">
|
||||
<div class="@RecMSE.Semaforo py-0 px-1">
|
||||
<div class="d-flex justify-content-between fs-5">
|
||||
<div class="px-0 @cssClassTextDescr">
|
||||
<span>@RecMSE.DescrizioneStato</span>
|
||||
</div>
|
||||
<div class="px-0">
|
||||
<b>
|
||||
@(FormatDurata(RecMSE.Durata))
|
||||
</b>
|
||||
</div>
|
||||
<div class="d-flex justify-content-around">
|
||||
<div class="text-center text-success d-flex justify-content-between">
|
||||
<div>
|
||||
<i class="fa-regular fa-circle-check"></i> @($" {CRecMSE.PezziConf}")
|
||||
</div>
|
||||
<div class="text-danger">
|
||||
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
|
||||
{
|
||||
@($"(- {datiProdAct.PzConfScarto})")
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-around">
|
||||
<div class="text-center text-success d-flex justify-content-between">
|
||||
<div>
|
||||
<i class="fa-regular fa-circle-check"></i> @($" {RecMSE.PezziConf}")
|
||||
</div>
|
||||
<div class="text-danger">
|
||||
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
|
||||
{
|
||||
@($"(- {datiProdAct.PzConfScarto})")
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center text-warning ">
|
||||
<div>
|
||||
<i class="fa-solid fa-layer-group"></i> @($" {RecMSE.PezziProd}")
|
||||
</div>
|
||||
<div class="text-center text-warning ">
|
||||
<div>
|
||||
<i class="fa-solid fa-layer-group"></i> @($" {CRecMSE.PezziProd}")
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="col-5">
|
||||
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz rich" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="col-4">
|
||||
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz rich" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-8 py-1" style="line-height: 1.6rem;">
|
||||
<div class="text-center text-light d-flex justify-content-between">
|
||||
<div class="px-1"><span>ART:</span></div>
|
||||
<div class="px-1">@($"{CRecMSE.CodArticolo}")</div>
|
||||
</div>
|
||||
<div class="col-7 small py-2" style="line-height: 1.6rem; font-size:0.9rem;">
|
||||
|
||||
<div class="text-center text-light d-flex justify-content-between">
|
||||
<div class="px-1"><span>ART:</span></div>
|
||||
<div class="px-1">@($"{RecMSE.CodArticolo}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">ODL:</div>
|
||||
<div class="px-1">@($"ODL{RecMSE.IdxOdl:00000000}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">PODL:</div>
|
||||
<div class="px-1">@($"PODL{RecMSE.IdxPOdl:00000000}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">ODL:</div>
|
||||
<div class="px-1">@($"{CRecMSE.IdxOdl:000000}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-1">PODL:</div>
|
||||
<div class="px-1">@($"{CRecMSE.IdxPOdl:000000}")</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="cardObj px-3 py-1 text-sizer">
|
||||
<div class="text-center d-flex justify-content-between align-items-center ">
|
||||
<div class="col-4 fs-4">
|
||||
<div class="lh-1">
|
||||
<div class="text-end text-success d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Confermati
|
||||
@* <i class="fa-regular fa-circle-check"></i> *@
|
||||
</div>
|
||||
<div class="px-0">
|
||||
@($"{RecMSE.PezziConf}")
|
||||
</div>
|
||||
</div>
|
||||
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
|
||||
{
|
||||
<div class="text-end text-danger d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Scarto
|
||||
</div>
|
||||
<div class="px-0">
|
||||
@($"- {datiProdAct.PzConfScarto}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<div class="text-end text-warning d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Prodotti
|
||||
@* <i class="fa-solid fa-layer-group"></i> *@
|
||||
</div>
|
||||
<div class="px-0">@($"{RecMSE.PezziProd}")</div>
|
||||
</div>
|
||||
@if (RecMSE.extraVal > 0)
|
||||
{
|
||||
<div class="text-end text-primary d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Extra
|
||||
@* <i class="fa-brands fa-stack-overflow"></i> *@
|
||||
</div>
|
||||
<div class="px-0">@($"{RecMSE.extraVal}")</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4" style="max-height: 8rem; max-width: 6rem;">
|
||||
<h4 class="text-center mb-0 fw-bold">
|
||||
@RecMSE.Nome
|
||||
</h4>
|
||||
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz prod" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-4 d-flex flex-wrap justify-content-center align-items-center lh-1">
|
||||
<div class="w-100">
|
||||
@if (!string.IsNullOrEmpty(IdxMacchSub))
|
||||
{
|
||||
<div class="text-warning border border-warning rounded-3 small px-2 py-1 mb-1">
|
||||
@IdxMacchSub
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="w-100 fs-4">
|
||||
<div class="text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-0">ART</div>
|
||||
<div class="px-0">@RecMSE.CodArticolo</div>
|
||||
</div>
|
||||
<div class="text-end text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-0">ODL</div>
|
||||
<div class="px-0">@RecMSE.IdxOdl</div>
|
||||
</div>
|
||||
<div class="text-end text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-0">PODL:</div>
|
||||
<div class="px-0">@RecMSE.IdxPOdl</div>
|
||||
<div class="card bg-dark shadow @cssClassBorder @cssClassOverlay rounded-4" @onclick="ShowDetail">
|
||||
<img src="@ImgUrlMacc(CRecMSE.Url)" class="card-img-top imgFitToSize rounded-top-4" alt="@CRecMSE.CodMacchina">
|
||||
<div class="bg-black">
|
||||
<div class="card-img-overlay p-0 d-flex flex-row-reverse align-items-start">
|
||||
<div class="labelTop px-2 py-0 w-100">
|
||||
<div class="text-center fs-2 fw-bold">
|
||||
@CRecMSE.Nome
|
||||
@if (isManual)
|
||||
{
|
||||
<i class="ps-1 text-light fs-3 fa-solid fa-puzzle-piece"></i>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between mt-1">
|
||||
<div class="col mb-2 px-2 py-2 @RecMSE.Semaforo rounded" @onclick="ShowDetail">
|
||||
<div class="d-flex justify-content-center">
|
||||
<div class="p-0 mr-auto me-1">
|
||||
@RecMSE.DescrizioneStato
|
||||
<div class="card-body rounded-bottom-4 p-0 bg-dark">
|
||||
<div class="@CRecMSE.Semaforo py-0 px-1">
|
||||
<div class="d-flex justify-content-between fs-5">
|
||||
<div class="px-0 @cssClassTextDescr">
|
||||
<span>@CRecMSE.DescrizioneStato</span>
|
||||
</div>
|
||||
<div class="p-0">
|
||||
<b>@(FormatDurata(RecMSE.Durata))</b>
|
||||
<div class="px-0">
|
||||
<b>
|
||||
@(FormatDurata(CRecMSE.Durata))
|
||||
</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if (enableDisegno)
|
||||
{
|
||||
<div class="col-2">
|
||||
<div class="px-1 w-100">
|
||||
<button class="btn btn-info py-2 w-100" @onclick="ToggleDraw"><i class="fa-regular fa-file-pdf"></i></button>
|
||||
<div class="d-flex justify-content-around">
|
||||
<div class="text-center text-success d-flex justify-content-between">
|
||||
<div>
|
||||
<i class="fa-regular fa-circle-check"></i> @($" {CRecMSE.PezziConf}")
|
||||
</div>
|
||||
<div class="text-danger">
|
||||
@if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
|
||||
{
|
||||
@($"(- {datiProdAct.PzConfScarto})")
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<div class="text-center text-warning ">
|
||||
<div>
|
||||
<i class="fa-solid fa-layer-group"></i> @($" {CRecMSE.PezziProd}")
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="col-5 px-0">
|
||||
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz rich" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-7 small py-1 px-0">
|
||||
<div class="text-center text-light d-flex justify-content-between">
|
||||
<div class="px-1 small">ART:</div>
|
||||
<div class="px-1">@($"{CRecMSE.CodArticolo}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between lh-sm">
|
||||
<div class="px-1 small">ODL:</div>
|
||||
<div class="px-1">@($"{CRecMSE.IdxOdl:000000}")</div>
|
||||
</div>
|
||||
<div class="text-center text-light d-flex justify-content-between lh-sm">
|
||||
<div class="px-1 small">PODL:</div>
|
||||
<div class="px-1">@($"{CRecMSE.IdxPOdl:000000}")</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@if (enableDisegno && showDraw && RecMSE != null)
|
||||
{
|
||||
string docUrl = string.IsNullOrEmpty(RecMSE.Disegno) ? $"disegni/{RecMSE.CodArticolo}.pdf" : $"disegni/{RecMSE.Disegno}.pdf";
|
||||
<div class="bg-light p-1">
|
||||
<PdfDisplay Width="100%" PdfUrl="@docUrl" HeightList="@heightList"></PdfDisplay>
|
||||
</div>
|
||||
else
|
||||
{
|
||||
<div class="cardObj px-3 py-1 text-sizer">
|
||||
<div class="text-center d-flex justify-content-between align-items-center row">
|
||||
<div class="col-12">
|
||||
<h4 class="text-center mb-0 fw-bold">
|
||||
@CRecMSE.Nome
|
||||
@if (isManual)
|
||||
{
|
||||
<i class="ps-1 text-light fs-3 fa-solid fa-puzzle-piece"></i>
|
||||
}
|
||||
</h4>
|
||||
</div>
|
||||
<div class="col-4 fs-4">
|
||||
<div class="lh-1">
|
||||
<div class="text-end text-light fw-bold d-flex justify-content-between border-bottom border-secondary">
|
||||
<div class="px-0">
|
||||
Cicli Prod
|
||||
</div>
|
||||
<div class="px-0 fs-4">
|
||||
@if (datiProdAct != null)
|
||||
{
|
||||
@($"{datiProdAct.PzTotODL}")
|
||||
}
|
||||
else
|
||||
{
|
||||
@($"{CRecMSE.PezziProd}")
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@if (datiProdAct != null)
|
||||
{
|
||||
@if (datiProdAct.Pz2RecTot > 0)
|
||||
{
|
||||
<div class="fs-5 text-end text-warning d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Da Conferm.
|
||||
</div>
|
||||
<div class="px-0 fs-5">
|
||||
@($"{datiProdAct.Pz2RecTot}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="fs-5 text-end text-secondary d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Da Conferm.
|
||||
</div>
|
||||
<div class="px-0 fs-5">
|
||||
@($"{datiProdAct.Pz2RecTot}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (NumScartiConf > 0)
|
||||
{
|
||||
<div class="fs-5 text-end text-danger d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Scarti Versati
|
||||
</div>
|
||||
<div class="px-0 fs-5">
|
||||
@($"{NumScartiConf}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="fs-5 text-end text-secondary d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Scarti Versati
|
||||
</div>
|
||||
<div class="px-0 fs-5">
|
||||
@($"{NumScartiConf}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (datiProdAct.PzConfRilav > 0)
|
||||
{
|
||||
<div class="fs-5 text-end text-info d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Rilav Versati
|
||||
</div>
|
||||
<div class="px-0 fs-5">
|
||||
@($"{datiProdAct.PzConfRilav}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="fs-5 text-end text-secondary d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Rilav Versati
|
||||
</div>
|
||||
<div class="px-0 fs-5">
|
||||
@($"{datiProdAct.PzConfRilav}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
<div class="text-end text-success d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Buoni Vers.
|
||||
</div>
|
||||
<div class="px-0 fs-5">
|
||||
@($"{datiProdAct.PzConfBuoni}")
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (CRecMSE.extraVal > 0 && showQtaExtra)
|
||||
{
|
||||
<div class="text-end text-primary d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
Extra
|
||||
</div>
|
||||
<div class="px-0 fs-5">@($"{CRecMSE.extraVal}")</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4" style="max-height: 8rem; max-width: 7rem;">
|
||||
<EgwCoreLib.Razor.CircleGaugeMulti Titolo="@($"{currMaxVal}")" Testo="#pz prod" maxVal="@currMaxVal" ListInner="@innerCircleVals" ListOuter="@outerCircleVals" ShowCircleBtn="true"></EgwCoreLib.Razor.CircleGaugeMulti>
|
||||
</div>
|
||||
<div class="col-4 d-flex flex-wrap justify-content-center align-items-center lh-1">
|
||||
<div class="w-100">
|
||||
@if (!string.IsNullOrEmpty(IdxMacchSub))
|
||||
{
|
||||
<div class="text-warning border border-warning rounded-3 small px-2 py-1 mb-1">
|
||||
@IdxMacchSub
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="w-100 fs-4">
|
||||
<div class="text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-0">ART</div>
|
||||
<div class="px-0">@CRecMSE.CodArticolo</div>
|
||||
</div>
|
||||
<div class="text-end text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-0">ODL</div>
|
||||
<div class="px-0">@($"{CRecMSE.IdxOdl:000000}")</div>
|
||||
</div>
|
||||
<div class="text-end text-light d-flex justify-content-between small lh-sm">
|
||||
<div class="px-0">PODL:</div>
|
||||
<div class="px-0">@($"{CRecMSE.IdxPOdl:000000}")</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex justify-content-between mt-2 px-0 mx-0">
|
||||
<div class="col-3">
|
||||
<div class="px-0 w-100">
|
||||
@if (showPodl)
|
||||
{
|
||||
<button class="btn btn-outline-warning py-2 w-100" @onclick="TogglePOdl" title="Hide ODL Data">ODL <i class="fa-solid fa-file-invoice"></i> <i class="fa-solid fa-chevron-up"></i></button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="btn btn-warning py-2 w-100 @isDisabled(showDraw)" @onclick="TogglePOdl" title="Show ODL Data">ODL <i class="fa-solid fa-file-invoice"></i> <i class="fa-solid fa-chevron-down"></i></button>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col mb-2 mx-1 py-2 @CRecMSE.Semaforo rounded" @onclick="ShowDetail">
|
||||
<div class="d-flex justify-content-center">
|
||||
<div class="p-0 mr-auto me-1">
|
||||
@CRecMSE.DescrizioneStato
|
||||
</div>
|
||||
<div class="p-0">
|
||||
<b>@(FormatDurata(CRecMSE.Durata))</b>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if (enableDisegno)
|
||||
{
|
||||
<div class="col-3">
|
||||
<div class="px-0 w-100">
|
||||
@if (showDraw)
|
||||
{
|
||||
<button class="btn btn-outline-info py-2 w-100" @onclick="ToggleDraw" title="Show/Hide Drawing Data"><i class="fa-regular fa-file-pdf"></i> <i class="fa-solid fa-chevron-up"></i></button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="btn btn-info py-2 w-100 @isDisabled(showPodl)" @onclick="ToggleDraw" title="Show/Hide Drawing Data"><i class="fa-regular fa-file-pdf"></i> <i class="fa-solid fa-chevron-down"></i></button>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="col-3">
|
||||
<div class="px-0 w-100">
|
||||
<button class="btn btn-secondary py-2 w-100 disabled" title="Show/Hide Drawing Data"><i class="fa-regular fa-file-pdf"></i> <i class="fa-solid fa-chevron-down"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@if (enableDisegno && showDraw)
|
||||
{
|
||||
string docUrl = string.IsNullOrEmpty(CRecMSE.Disegno) ? $"disegni/{CRecMSE.CodArticolo}.pdf" : $"disegni/{CRecMSE.Disegno}.pdf";
|
||||
<div class="bg-light p-1">
|
||||
<PdfDisplay Width="100%" PdfUrl="@docUrl" HeightList="@heightList"></PdfDisplay>
|
||||
</div>
|
||||
}
|
||||
@if (showPodl)
|
||||
{
|
||||
<CurrOdlDetail CurrOdl="@currOdl" CurrPodl="@currPodl" IdxPOdlSel="0" ShowOdlDetail="@showOdlDetail" ForceCloseOdl="@forceCloseOdl" InAttr="@inAttr" EC_ToggleOdlDetail="TogglePOdl" ShowClose="false"></CurrOdlDetail>
|
||||
}
|
||||
}
|
||||
@@ -1,23 +1,22 @@
|
||||
using EgwCoreLib.Razor;
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using Microsoft.EntityFrameworkCore.SqlServer.Query.Internal;
|
||||
using Microsoft.JSInterop;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using NLog;
|
||||
using System;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class MachineBlock
|
||||
public partial class MachineBlock : IDisposable
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
public string currIpv4 { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public bool doBlink { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// True quando in status map, false altrimenti
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public bool FullMode { get; set; } = true;
|
||||
|
||||
@@ -28,13 +27,13 @@ namespace MP_TAB3.Components
|
||||
public string IdxMacchSub { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public int keepAliveMin { get; set; } = 5;
|
||||
public int KeepAliveMin { get; set; } = 5;
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
[Parameter]
|
||||
public bool showCard { get; set; }
|
||||
public bool ShowCard { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public int Width { get; set; } = 0;
|
||||
@@ -67,6 +66,15 @@ namespace MP_TAB3.Components
|
||||
return answ;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
innerCircleVals.Clear();
|
||||
outerCircleVals.Clear();
|
||||
datiProdAct = null;
|
||||
LastRecMSE = null;
|
||||
TabDServ.DataInvalidated -= TabDServ_DataInvalidated;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// url completo immagine
|
||||
/// </summary>
|
||||
@@ -78,7 +86,7 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
url = "Steamware.png";
|
||||
}
|
||||
string fullPath = Path.Combine(imgBasePath, url);
|
||||
string fullPath = $"{imgBasePath}/{url}";
|
||||
return fullPath;
|
||||
}
|
||||
|
||||
@@ -87,15 +95,10 @@ namespace MP_TAB3.Components
|
||||
#region Protected Fields
|
||||
|
||||
protected string baseCss = "sem";
|
||||
|
||||
protected int currMaxVal = 1000;
|
||||
|
||||
protected int currMaxVal = 888;
|
||||
protected List<CircleGaugeMulti.CircSegm> innerCircleVals = new List<CircleGaugeMulti.CircSegm>();
|
||||
|
||||
protected int kaFactor = 60 / 2;
|
||||
|
||||
protected int maxVal = 1000;
|
||||
|
||||
protected int maxVal = 999;
|
||||
protected List<CircleGaugeMulti.CircSegm> outerCircleVals = new List<CircleGaugeMulti.CircSegm>();
|
||||
|
||||
#endregion Protected Fields
|
||||
@@ -185,13 +188,13 @@ namespace MP_TAB3.Components
|
||||
get
|
||||
{
|
||||
ProdAdvDispl.ProdCounter answ = new ProdAdvDispl.ProdCounter();
|
||||
if (RecMSE != null)
|
||||
if (CRecMSE != null)
|
||||
{
|
||||
answ = new ProdAdvDispl.ProdCounter()
|
||||
{
|
||||
numPzConf = (int)RecMSE.PezziConf,
|
||||
numPzOrd = (int)RecMSE.NumPezzi,
|
||||
numPzProd = (int)RecMSE.PezziProd
|
||||
numPzConf = (int)CRecMSE.PezziConf,
|
||||
numPzOrd = (int)CRecMSE.NumPezzi,
|
||||
numPzProd = (int)CRecMSE.PezziProd
|
||||
};
|
||||
}
|
||||
return answ;
|
||||
@@ -199,7 +202,7 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dati produzioen rilevati
|
||||
/// Dati produzione rilevati
|
||||
/// </summary>
|
||||
protected StatoProdModel? datiProdAct { get; set; } = null;
|
||||
|
||||
@@ -209,12 +212,23 @@ namespace MP_TAB3.Components
|
||||
[Inject]
|
||||
protected MessageService MServ { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected SharedMemService MStor { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager NavMan { get; set; } = null!;
|
||||
|
||||
protected int NumScartiConf
|
||||
{
|
||||
get => datiProdAct != null ? datiProdAct.PzConfScarto - datiProdAct.PzConfRilav : 0;
|
||||
}
|
||||
|
||||
[Inject]
|
||||
protected StatusData SDService { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected SharedMemService SMServ { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected TabDataService TabDServ { get; set; } = null!;
|
||||
|
||||
@@ -222,6 +236,11 @@ namespace MP_TAB3.Components
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected string isDisabled(bool testCond)
|
||||
{
|
||||
return testCond ? $"disabled" : "";
|
||||
}
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
if (firstRender)
|
||||
@@ -235,73 +254,90 @@ namespace MP_TAB3.Components
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
TabDServ.DataInvalidated += TabDServ_DataInvalidated;
|
||||
isLoading = true;
|
||||
// salvo i parametri precedenti x calcolare variazioni...
|
||||
saveParams();
|
||||
// abilitazione disegni...
|
||||
TabDServ.ConfigGetVal("enableDisegno", ref enableDisegno);
|
||||
// se configurata uso cartella virtuale... altrimenti cartella processo
|
||||
var sImgBasePath = config.GetValue<string>("ServerConf:ImgBasePath") ?? (config.GetValue<string>("OptConf:ImgBasePath") ?? "");
|
||||
if (!string.IsNullOrEmpty(sImgBasePath))
|
||||
{
|
||||
imgBasePath = sImgBasePath;
|
||||
}
|
||||
else
|
||||
{
|
||||
imgBasePath = $"{Environment.CurrentDirectory}/images/";
|
||||
}
|
||||
await Task.Delay(1);
|
||||
TabDServ.ConfigGetVal("TAB_ShowQtaExtra", ref showQtaExtra);
|
||||
await ReloadXDL(true);
|
||||
await loadDetails();
|
||||
detailLoaded = true;
|
||||
}
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
DateTime adesso = DateTime.Now;
|
||||
isLoading = RecMSE == null;
|
||||
// controllo SE ho variazioni così rileggo
|
||||
if (RecMSE != null)
|
||||
// controllo variazione parametri...
|
||||
string lastIMS = LastIdxMacchSub;
|
||||
if (paramsChanged())
|
||||
{
|
||||
if (SDService.MachNumPzGet(RecMSE.IdxMacchina) != RecMSE.PezziProd)
|
||||
saveParams();
|
||||
isLoading = RecMSE == null;
|
||||
// controllo SE ho variazioni cos� rileggo
|
||||
if (!string.IsNullOrEmpty(IdxMacchSub) && RecMSE != null)
|
||||
{
|
||||
datiProdAct = await TabDServ.StatoProdMacchina(RecMSE.IdxMacchina, adesso);
|
||||
SDService.MachProdStSet(RecMSE.IdxMacchina, datiProdAct);
|
||||
SDService.MachNumPzSet(RecMSE.IdxMacchina, RecMSE.PezziProd);
|
||||
// solo se cambia macchina forzo da DB
|
||||
bool doForce = lastIMS != IdxMacchSub;
|
||||
RecMSESub = TabDServ.MseGetSub(RecMSE.IdxMacchina, IdxMacchSub, doForce);
|
||||
}
|
||||
else
|
||||
{
|
||||
datiProdAct = SDService.MachProdStGet(RecMSE.IdxMacchina);
|
||||
RecMSESub = RecMSE;
|
||||
}
|
||||
}
|
||||
if (!string.IsNullOrEmpty(IdxMacchSub) && RecMSE != null)
|
||||
{
|
||||
RecMSE = TabDServ.MseGetSub(RecMSE.IdxMacchina, IdxMacchSub, true);
|
||||
// carico dettagli
|
||||
await loadDetails();
|
||||
}
|
||||
setGaugeVals();
|
||||
}
|
||||
|
||||
protected void setGaugeVals()
|
||||
{
|
||||
if (RecMSE != null)
|
||||
// se � una doppio pallet uso dati MSE
|
||||
if (string.IsNullOrEmpty(IdxMacchSub) && isMulti)
|
||||
{
|
||||
innerCircleVals.Clear();
|
||||
outerCircleVals.Clear();
|
||||
currMaxVal = int.Parse(RecMSE.NumPezzi.ToString()!);
|
||||
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#FFC107", Value = RecMSE.PezziProd });
|
||||
if (RecMSE.PezziConf > 0)
|
||||
if (CRecMSE != null)
|
||||
{
|
||||
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#198754", Value = RecMSE.PezziConf });
|
||||
innerCircleVals.Clear();
|
||||
outerCircleVals.Clear();
|
||||
currMaxVal = CRecMSE.NumPezzi;
|
||||
// int.Parse(CRecMSE.NumPezzi.ToString()!);
|
||||
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#FFC107", Value = CRecMSE.PezziProd });
|
||||
if (CRecMSE.PezziConf > 0)
|
||||
{
|
||||
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#198754", Value = CRecMSE.PezziConf });
|
||||
// se ho scarti aggiungo all'inizio
|
||||
if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
|
||||
{
|
||||
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#CD1916", Value = datiProdAct.PzConfScarto });
|
||||
}
|
||||
}
|
||||
if (CRecMSE.extraVal > 0)
|
||||
{
|
||||
outerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#1367FD", Value = CRecMSE.extraVal });
|
||||
}
|
||||
}
|
||||
}
|
||||
// altrimenti da dati produzione
|
||||
else
|
||||
{
|
||||
if (datiProdAct != null)
|
||||
{
|
||||
innerCircleVals.Clear();
|
||||
outerCircleVals.Clear();
|
||||
currMaxVal = datiProdAct.PzRichODL;
|
||||
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#FFC107", Value = datiProdAct.PzTotODL });
|
||||
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#198754", Value = datiProdAct.PzConfAll });
|
||||
// se ho scarti aggiungo all'inizio
|
||||
if (datiProdAct != null && datiProdAct.PzConfScarto > 0)
|
||||
if (datiProdAct.PzConfScarto > 0)
|
||||
{
|
||||
innerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#CD1916", Value = datiProdAct.PzConfScarto });
|
||||
}
|
||||
if (CRecMSE != null && CRecMSE.extraVal > 0)
|
||||
{
|
||||
outerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#1367FD", Value = CRecMSE.extraVal });
|
||||
}
|
||||
}
|
||||
if (RecMSE.extraVal > 0)
|
||||
{
|
||||
outerCircleVals.Add(new CircleGaugeMulti.CircSegm() { Color = "#1367FD", Value = RecMSE.extraVal });
|
||||
}
|
||||
//Log.Trace($"MBlock | {RecMSE.IdxMacchina} | 03");
|
||||
}
|
||||
else
|
||||
{
|
||||
Log.Info("MBlock NO DATA");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -309,76 +345,294 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
// salvo idxMacch
|
||||
await MServ.IdxMaccSet(RecMSE!.IdxMacchina);
|
||||
// salvo se sia manuale...
|
||||
|
||||
await MServ.LastOpenedPageSet("machine-detail");
|
||||
// navigo!
|
||||
NavMan.NavigateTo($"machine-detail");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Toggle visibilità button
|
||||
/// </summary>
|
||||
protected void ToggleDraw()
|
||||
{
|
||||
showDraw = !showDraw;
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
|
||||
private bool detailLoaded = false;
|
||||
private bool enableDisegno = false;
|
||||
private string imgBasePath = "";
|
||||
private bool forceCloseOdl = true;
|
||||
private int IdxOdl = 0;
|
||||
private int IdxOdlAltra = 0;
|
||||
private bool inAttr = false;
|
||||
private bool isLoading = false;
|
||||
private bool isManual = false;
|
||||
private bool isMulti = false;
|
||||
private bool LastFullMode = true;
|
||||
private string LastIdxMacchSub = "";
|
||||
private int LastKeepAliveMin = 5;
|
||||
private MappaStatoExplModel? LastRecMSE = null;
|
||||
private bool LastShowCard = true;
|
||||
private bool showOdlDetail = false;
|
||||
private bool showPodl = false;
|
||||
private bool showQtaExtra = false;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
/// <summary>
|
||||
/// Info correnti secondo tipo selezione
|
||||
/// </summary>
|
||||
private MappaStatoExplModel? CRecMSE
|
||||
{
|
||||
get
|
||||
{
|
||||
MappaStatoExplModel? answ = RecMSE;
|
||||
if (!string.IsNullOrEmpty(IdxMacchSub))
|
||||
{
|
||||
answ = RecMSESub;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
private ODLExpModel currOdl { get; set; } = new ODLExpModel();
|
||||
|
||||
private PODLExpModel currPodl { get; set; } = new PODLExpModel();
|
||||
|
||||
private Dictionary<string, string> heightList { get; set; } = new Dictionary<string, string>() { { "200", "200px" }, { "400", "400px" }, { "600", "600px" }, { "800", "800px" }, { "1000", "1000px" } };
|
||||
|
||||
/// <summary>
|
||||
/// Restituisce il codice IdxMacchina dell'altra tavola (se multi) altrimenti la stessa macchina...
|
||||
/// </summary>
|
||||
private string idxMaccAltraTav
|
||||
{
|
||||
get
|
||||
{
|
||||
string answ = "";
|
||||
if (CRecMSE != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
// verifico se SIA una tavola (ha char "#")
|
||||
int iSharp = IdxMaccMain.IndexOf('#');
|
||||
if (iSharp > 0)
|
||||
{
|
||||
// ora verifico SE ALTRA TAVOLA ha ODL...
|
||||
string nomeTav = IdxMaccMain.Substring(iSharp);
|
||||
string altraTav = nomeTav.Substring(0, nomeTav.Length - 1);
|
||||
altraTav += nomeTav.EndsWith("1") ? "2" : "1";
|
||||
// sistemo nome
|
||||
answ = IdxMaccMain.Replace(nomeTav, altraTav);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Macchina corrente (main oppure sub)
|
||||
/// </summary>
|
||||
private string IdxMaccCur
|
||||
{
|
||||
get => string.IsNullOrEmpty(IdxMacchSub) ? IdxMaccMain : IdxMacchSub;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Macchina selezionata MAIN
|
||||
/// </summary>
|
||||
private string IdxMaccMain
|
||||
{
|
||||
get => CRecMSE != null ? CRecMSE.IdxMacchina : "";
|
||||
}
|
||||
|
||||
private string imgBasePath
|
||||
{
|
||||
get => MStor.baseUrlImages;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Boolean Mobile vs Desktop
|
||||
/// </summary>
|
||||
private bool isMobile { get; set; }
|
||||
|
||||
private MappaStatoExplModel? RecMSESub { get; set; } = null;
|
||||
|
||||
private bool showDraw { get; set; } = false;
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private string cssComStatus(string semaforo, DateTime? lastUpdateN)
|
||||
/// <summary>
|
||||
/// Rilettura dettagli
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async Task loadDetails()
|
||||
{
|
||||
DateTime lastUpdate = lastUpdateN.HasValue ? (DateTime)lastUpdateN : DateTime.Now.AddHours(-1);
|
||||
string answ = cssStatus(semaforo);
|
||||
if (DateTime.Now.Subtract(lastUpdate).TotalSeconds > (keepAliveMin * kaFactor))
|
||||
// verifico di non essere in reloading e di avere dati...
|
||||
if (!MServ.IsReloading && CRecMSE != null)
|
||||
{
|
||||
answ = $"{baseCss}Ro";
|
||||
// blink se secondo pari...
|
||||
DateTime adesso = DateTime.Now;
|
||||
int resto = 0;
|
||||
Math.DivRem(adesso.Second, 2, out resto);
|
||||
if (resto == 0)
|
||||
bool doForce = false;
|
||||
if (SDService.MachNumPzGet(IdxMaccCur) != CRecMSE.PezziProd || SDService.MachProdStGet(IdxMaccCur).IdxOdl != CRecMSE.IdxOdl || (datiProdAct != null && datiProdAct.PzTotODL != CRecMSE.PezziProd))
|
||||
{
|
||||
answ += "_b";
|
||||
datiProdAct = await TabDServ.StatoProdMacchinaAsync(IdxMaccCur, DateTime.Now);
|
||||
SDService.MachProdStSet(IdxMaccCur, datiProdAct);
|
||||
SDService.MachNumPzSet(IdxMaccCur, CRecMSE.PezziProd);
|
||||
doForce = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
datiProdAct = SDService.MachProdStGet(IdxMaccCur);
|
||||
}
|
||||
// fix multi
|
||||
if (SMServ.DictMacchMulti.ContainsKey(IdxMaccMain))
|
||||
{
|
||||
isMulti = SMServ.DictMacchMulti[IdxMaccMain] == 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
isMulti = false;
|
||||
}
|
||||
// fix manual
|
||||
if (SMServ.DictMacchManual.ContainsKey(IdxMaccMain))
|
||||
{
|
||||
isManual = SMServ.DictMacchManual[IdxMaccMain];
|
||||
}
|
||||
else
|
||||
{
|
||||
isManual = false;
|
||||
}
|
||||
// verificare
|
||||
if (!FullMode || !detailLoaded || doForce)
|
||||
{
|
||||
await ReloadXDL(true);
|
||||
}
|
||||
}
|
||||
|
||||
return answ;
|
||||
}
|
||||
|
||||
private string cssStatus(string codSemaforo)
|
||||
/// <summary>
|
||||
/// Verifica variazione parametri
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private bool paramsChanged()
|
||||
{
|
||||
// se vuoto --> mostra nero!
|
||||
if (string.IsNullOrEmpty(codSemaforo))
|
||||
{
|
||||
codSemaforo = "sNe";
|
||||
}
|
||||
if (LastFullMode != FullMode)
|
||||
return true;
|
||||
if (LastKeepAliveMin != KeepAliveMin)
|
||||
return true;
|
||||
if (LastShowCard != ShowCard)
|
||||
return true;
|
||||
if (LastIdxMacchSub != IdxMacchSub)
|
||||
return true;
|
||||
if (LastRecMSE == null && RecMSE != null)
|
||||
return true;
|
||||
if (LastRecMSE != null && RecMSE == null)
|
||||
return true;
|
||||
if (LastRecMSE != null && !LastRecMSE.MostlyEquals(RecMSE))
|
||||
return true;
|
||||
|
||||
string codColore = codSemaforo.Substring(1, 2);
|
||||
string answ = $"{baseCss}{codColore}";
|
||||
return answ;
|
||||
return false;
|
||||
}
|
||||
|
||||
private async Task ReloadXDL(bool reloadFromOdl)
|
||||
{
|
||||
if (CRecMSE != null)
|
||||
{
|
||||
int currIdxPOdl = CRecMSE.IdxPOdl ?? 0;
|
||||
if (CRecMSE != null)
|
||||
{
|
||||
if (reloadFromOdl)
|
||||
{
|
||||
currIdxPOdl = CRecMSE.IdxPOdl ?? 0;
|
||||
}
|
||||
// se ho PODL valido...
|
||||
if (currIdxPOdl > 0)
|
||||
{
|
||||
currPodl = await TabDServ.PODLExp_getByKey(currIdxPOdl);
|
||||
}
|
||||
else
|
||||
{
|
||||
currPodl = new PODLExpModel()
|
||||
{
|
||||
IdxOdl = CRecMSE.IdxOdl ?? 0,
|
||||
KeyRichiesta = "-",
|
||||
CodArticolo = CRecMSE.CodArticolo,
|
||||
DescArticolo = CRecMSE.CodArticolo,
|
||||
NumPezzi = CRecMSE.NumPezzi,
|
||||
Tcassegnato = CRecMSE.TCAssegnato
|
||||
};
|
||||
}
|
||||
}
|
||||
// update a runtime dati ODL se assegnato
|
||||
if (currPodl.IdxOdl > 0)
|
||||
{
|
||||
currOdl = await TabDServ.OdlByIdx(currPodl.IdxOdl, false);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(IdxMaccMain))
|
||||
{
|
||||
await updateIdxOdl();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void saveParams()
|
||||
{
|
||||
LastIdxMacchSub = IdxMacchSub;
|
||||
LastRecMSE = RecMSE;
|
||||
LastFullMode = FullMode;
|
||||
LastShowCard = ShowCard;
|
||||
LastKeepAliveMin = KeepAliveMin;
|
||||
}
|
||||
|
||||
private async void TabDServ_DataInvalidated(object? sender, EventArgs e)
|
||||
{
|
||||
ReloadEventArgs rea = (ReloadEventArgs)e;
|
||||
if (rea.ReloadMessage == IdxMaccCur)
|
||||
{
|
||||
// se riceve evento relativo a questo impianto --> ricarico dati prod...
|
||||
detailLoaded = false;
|
||||
Log.Info("TabDServ_DataInvalidated: Reload Data");
|
||||
// carico dettagli
|
||||
await loadDetails();
|
||||
setGaugeVals();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Toggle visibilit� button
|
||||
/// </summary>
|
||||
private void ToggleDraw()
|
||||
{
|
||||
showDraw = !showDraw;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Toggle visibilit� blocco PODL
|
||||
/// </summary>
|
||||
private void TogglePOdl()
|
||||
{
|
||||
showPodl = !showPodl;
|
||||
}
|
||||
|
||||
private async Task updateIdxOdl()
|
||||
{
|
||||
if (CRecMSE != null)
|
||||
{
|
||||
// sistemo idxOdl...
|
||||
var tabOdl = await TabDServ.OdlCurrByMacc(IdxMaccMain, false);
|
||||
IdxOdl = tabOdl.IdxOdl;
|
||||
if (isMulti)
|
||||
{
|
||||
if (!string.IsNullOrEmpty(idxMaccAltraTav))
|
||||
{
|
||||
var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, false);
|
||||
IdxOdlAltra = tabOdlAltra.IdxOdl;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
|
||||
@@ -136,18 +136,11 @@
|
||||
height: 10rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
.pholderHeight {
|
||||
height: 7rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
@media (max-width: 640.98px) {
|
||||
@media (max-width: 639.98px) {
|
||||
.imgFitToSize {
|
||||
height: 7.5rem;
|
||||
}
|
||||
.card-body {
|
||||
background-color: transparent;
|
||||
}
|
||||
.pholderHeight {
|
||||
height: 5rem;
|
||||
}
|
||||
}
|
||||
@@ -152,7 +152,6 @@
|
||||
--bs-shadow-rgb: var(--bs-dark-rgb);
|
||||
}
|
||||
|
||||
|
||||
.card-body {
|
||||
background-color: currentColor;
|
||||
background-image: linear-gradient(121deg, rgba(255, 255, 255, 0.20) -0.71%, rgba(255, 255, 255, 0.05) 97.66%);
|
||||
@@ -163,21 +162,13 @@
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.pholderHeight {
|
||||
height: 7rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
@media (max-width: 640.98px){
|
||||
@media (max-width: 639.98px){
|
||||
.imgFitToSize{
|
||||
height: 7.5rem;
|
||||
}
|
||||
.card-body{
|
||||
background-color: transparent;
|
||||
}
|
||||
.pholderHeight {
|
||||
height: 5rem;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
.mapBlock{font-family:'Open Sans Condensed',sans-serif;color:#fff;background-image:linear-gradient(#111,#000);min-width:8em;}.text-sizer{font-size:1.1rem;}.labelTop{padding:.1em;width:auto;min-height:0;top:0;left:auto;bottom:auto;color:#fff;background:#2200de;background:rgba(33,36,39,.75);border-radius:15px 15px 0 0;}.scroll-left{height:1.5em;overflow:hidden;position:relative;width:70%;white-space:nowrap;}.scroll-left span{position:absolute;width:100%;height:100%;margin:0;line-height:1.5em;-moz-transform:translateX(0%);-webkit-transform:translateX(0%);transform:translateX(0%);-moz-animation:scroll-left 8s ease infinite;-webkit-animation:scroll-left 8s ease infinite;animation:scroll-left 8s ease infinite;}@keyframes scroll-left{0%{transform:translateX(0%);}30%{transform:translateX(0%);}80%{transform:translateX(-50%);}}.sVe{text-align:left;background:#198754;color:#fff;}.sGi{text-align:left;background:#ffc107;background:rgba(255,220,0,.6);color:#fff;}.sRo{text-align:left;background-color:#e2001a;background:rgba(240,0,10,.6);color:#fff;}.sBl{text-align:left;background:#3690ff;background:rgba(0,80,255,.6);color:#fff;}.sGr{text-align:left;background-color:#bcbcbc;background:rgba(180,180,180,.6);color:#fff;}.shadow{--bs-shadow-rgb:0,0,0;box-shadow:0 .5rem 1rem rgba(var(--bs-shadow-rgb),.15)!important;}.shadow-sm{--bs-shadow-rgb:0,0,0;box-shadow:0 .125rem .25rem rgba(var(--bs-shadow-rgb),.075)!important;}.shadow-lg{--bs-shadow-rgb:0,0,0;box-shadow:0 1rem 3rem rgba(var(--bs-shadow-rgb),.175)!important;}.shadow-none{box-shadow:none!important;}.shadow-primary{--bs-shadow-rgb:var(--bs-primary-rgb);}.shadow-secondary{--bs-shadow-rgb:var(--bs-secondary-rgb);}.shadow-success{--bs-shadow-rgb:var(--bs-success-rgb);}.shadow-info{--bs-shadow-rgb:var(--bs-info-rgb);}.shadow-warning{--bs-shadow-rgb:var(--bs-warning-rgb);}.shadow-danger{--bs-shadow-rgb:var(--bs-danger-rgb);}.shadow-light{--bs-shadow-rgb:var(--bs-light-rgb);}.shadow-dark{--bs-shadow-rgb:var(--bs-dark-rgb);}.card-body{background-color:currentColor;background-image:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);}.imgFitToSize{height:10rem;object-fit:cover;}.pholderHeight{height:7rem;object-fit:cover;}@media(max-width:640.98px){.imgFitToSize{height:7.5rem;}.card-body{background-color:transparent;}.pholderHeight{height:5rem;}}
|
||||
.mapBlock{font-family:'Open Sans Condensed',sans-serif;color:#fff;background-image:linear-gradient(#111,#000);min-width:8em;}.text-sizer{font-size:1.1rem;}.labelTop{padding:.1em;width:auto;min-height:0;top:0;left:auto;bottom:auto;color:#fff;background:#2200de;background:rgba(33,36,39,.75);border-radius:15px 15px 0 0;}.scroll-left{height:1.5em;overflow:hidden;position:relative;width:70%;white-space:nowrap;}.scroll-left span{position:absolute;width:100%;height:100%;margin:0;line-height:1.5em;-moz-transform:translateX(0%);-webkit-transform:translateX(0%);transform:translateX(0%);-moz-animation:scroll-left 8s ease infinite;-webkit-animation:scroll-left 8s ease infinite;animation:scroll-left 8s ease infinite;}@keyframes scroll-left{0%{transform:translateX(0%);}30%{transform:translateX(0%);}80%{transform:translateX(-50%);}}.sVe{text-align:left;background:#198754;color:#fff;}.sGi{text-align:left;background:#ffc107;background:rgba(255,220,0,.6);color:#fff;}.sRo{text-align:left;background-color:#e2001a;background:rgba(240,0,10,.6);color:#fff;}.sBl{text-align:left;background:#3690ff;background:rgba(0,80,255,.6);color:#fff;}.sGr{text-align:left;background-color:#bcbcbc;background:rgba(180,180,180,.6);color:#fff;}.shadow{--bs-shadow-rgb:0,0,0;box-shadow:0 .5rem 1rem rgba(var(--bs-shadow-rgb),.15)!important;}.shadow-sm{--bs-shadow-rgb:0,0,0;box-shadow:0 .125rem .25rem rgba(var(--bs-shadow-rgb),.075)!important;}.shadow-lg{--bs-shadow-rgb:0,0,0;box-shadow:0 1rem 3rem rgba(var(--bs-shadow-rgb),.175)!important;}.shadow-none{box-shadow:none!important;}.shadow-primary{--bs-shadow-rgb:var(--bs-primary-rgb);}.shadow-secondary{--bs-shadow-rgb:var(--bs-secondary-rgb);}.shadow-success{--bs-shadow-rgb:var(--bs-success-rgb);}.shadow-info{--bs-shadow-rgb:var(--bs-info-rgb);}.shadow-warning{--bs-shadow-rgb:var(--bs-warning-rgb);}.shadow-danger{--bs-shadow-rgb:var(--bs-danger-rgb);}.shadow-light{--bs-shadow-rgb:var(--bs-light-rgb);}.shadow-dark{--bs-shadow-rgb:var(--bs-dark-rgb);}.card-body{background-color:currentColor;background-image:linear-gradient(121deg,rgba(255,255,255,.2) -.71%,rgba(255,255,255,.05) 97.66%);}.imgFitToSize{height:10rem;object-fit:cover;}@media(max-width:639.98px){.imgFitToSize{height:7.5rem;}.card-body{background-color:transparent;}}
|
||||
@@ -1,5 +1,5 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
@@ -14,17 +14,8 @@ namespace MP_TAB3.Components
|
||||
[Parameter]
|
||||
public string IdxMacchina { get; set; } = "";
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Protected Fields
|
||||
|
||||
protected bool isProcessing = false;
|
||||
|
||||
#endregion Protected Fields
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected int IdxOdlSel
|
||||
[Parameter]
|
||||
public int IdxOdlSel
|
||||
{
|
||||
get => idxOdlSel;
|
||||
set
|
||||
@@ -37,6 +28,18 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Protected Fields
|
||||
|
||||
protected bool isProcessing = false;
|
||||
|
||||
#endregion Protected Fields
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
|
||||
|
||||
protected List<vSelOdlModel> ListODL { get; set; } = new();
|
||||
|
||||
protected int NumRec
|
||||
|
||||
@@ -15,7 +15,7 @@ using MP_TAB3;
|
||||
using MP_TAB3.Shared;
|
||||
using MP_TAB3.Components;
|
||||
using MP.Data;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.DTO;
|
||||
using MP.Data.Services;
|
||||
using Newtonsoft.Json;
|
||||
@@ -55,7 +55,7 @@ namespace MP_TAB3.Components
|
||||
public EventCallback<bool> E_Updated { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
[Parameter]
|
||||
public string Title { get; set; } = "NA";
|
||||
@@ -141,7 +141,7 @@ namespace MP_TAB3.Components
|
||||
if (!string.IsNullOrEmpty(UserComment))
|
||||
{
|
||||
// inserisco
|
||||
await TabServ.EvListInsert(newRec, MP.Data.Objects.Enums.tipoInputEvento.commento);
|
||||
await TabServ.EvListInsert(newRec, MP.Core.Objects.Enums.tipoInputEvento.commento);
|
||||
}
|
||||
// reset
|
||||
await E_relData.InvokeAsync(true);
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using Microsoft.JSInterop;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.DTO;
|
||||
using MP.Data.Services;
|
||||
using NLog.LayoutRenderers.Wrappers;
|
||||
@@ -9,15 +9,28 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class NotesMan
|
||||
{
|
||||
#region Private Fields
|
||||
|
||||
private int durataMinCurr = 5;
|
||||
|
||||
private int durataMinLast = 0;
|
||||
|
||||
private int numGiorniCurr = 3;
|
||||
|
||||
private int numGiorniLast = 0;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected CommentiModel? currComm { get; set; } = null;
|
||||
protected EventListModel? currEv { get; set; } = null;
|
||||
|
||||
protected int DurataMin
|
||||
@@ -43,11 +56,6 @@ namespace MP_TAB3.Components
|
||||
[Inject]
|
||||
protected MessageService MsgServ { get; set; } = null!;
|
||||
|
||||
#if false
|
||||
[Inject]
|
||||
protected NavigationManager NavMan { get; set; } = null!;
|
||||
#endif
|
||||
|
||||
protected int NumGiorni
|
||||
{
|
||||
get => numGiorniCurr;
|
||||
@@ -88,27 +96,6 @@ namespace MP_TAB3.Components
|
||||
await ReloadData();
|
||||
}
|
||||
|
||||
protected async Task reloadAfterDelOrUpd(bool rel)
|
||||
{
|
||||
if (rel)
|
||||
{
|
||||
await ReloadData();
|
||||
currComm = null;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
||||
|
||||
protected CommentiModel? currComm { get; set; } = null;
|
||||
|
||||
protected async Task setCurrComm(CommentiModel _CurrComm)
|
||||
{
|
||||
await Task.Delay(1);
|
||||
if(_CurrComm != null)
|
||||
{
|
||||
currComm = _CurrComm;
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task EditRec(CommentiModel currRec)
|
||||
{
|
||||
await Task.Delay(1);
|
||||
@@ -129,20 +116,27 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task reloadAfterDelOrUpd(bool rel)
|
||||
{
|
||||
if (rel)
|
||||
{
|
||||
await ReloadData();
|
||||
currComm = null;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task setCurrComm(CommentiModel _CurrComm)
|
||||
{
|
||||
await Task.Delay(1);
|
||||
if (_CurrComm != null)
|
||||
{
|
||||
currComm = _CurrComm;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private int durataMinCurr = 5;
|
||||
|
||||
private int durataMinLast = 0;
|
||||
|
||||
private int numGiorniCurr = 3;
|
||||
|
||||
private int numGiorniLast = 0;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private async Task DoUpdate(bool forceReload)
|
||||
|
||||
+36
-170
@@ -1,7 +1,6 @@
|
||||
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<MachSel RecMSE="RecMSE" E_MachSel="SetMacc"></MachSel>
|
||||
<ShowProcessing IsProcessing="@isProcessing"></ShowProcessing>
|
||||
</div>
|
||||
@if (isProcessing)
|
||||
@@ -11,6 +10,9 @@
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="col-12">
|
||||
<MachSel RecMSE="RecMSE" E_MachSel="SetMacc"></MachSel>
|
||||
</div>
|
||||
@if (isSlave)
|
||||
{
|
||||
<div class="col-12 my-2">
|
||||
@@ -52,9 +54,18 @@
|
||||
<div class="px-2">
|
||||
Pezzi NC: <b>@numPz2Conf</b>
|
||||
</div>
|
||||
<div class="px-2">
|
||||
Scarti NC: <b>@numSca2Conf</b>
|
||||
</div>
|
||||
@if (numSca2Conf > 0)
|
||||
{
|
||||
<div class="px-2">
|
||||
Scarti NC: <b>@numSca2Conf</b>
|
||||
</div>
|
||||
}
|
||||
@if (numRil2Conf > 0)
|
||||
{
|
||||
<div class="px-2">
|
||||
Cicli Rilav NC: <b>@numRil2Conf</b>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</button>
|
||||
@@ -65,6 +76,18 @@
|
||||
<FixOdl IdxMaccCurr="@IdxMaccSel" E_RefreshData="refreshAfterFixOdl"></FixOdl>
|
||||
</div>
|
||||
}
|
||||
|
||||
@* @if (!inAttr && !showOdlDetail)
|
||||
{
|
||||
<div class="col-12 my-1">
|
||||
<button class="btn btn-lg btn-warning w-100" disabled="@inAttr" @onclick="ToggleOdlDetail"><i class="fa-solid fa-chevron-down"></i> @txtBtnOdlDetail</button>
|
||||
</div>
|
||||
} *@
|
||||
|
||||
if (showOdlDetail || inAttr)
|
||||
{
|
||||
<CurrOdlDetail CurrOdl="@currOdl" CurrPodl="@currPodl" IdxPOdlSel="@IdxPOdlSel" ShowOdlDetail="@showOdlDetail" ForceCloseOdl="@forceCloseOdl" InAttr="@inAttr" EC_ToggleOdlDetail="ToggleOdlDetail"></CurrOdlDetail>
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -95,173 +118,9 @@
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (!inAttr && !showOdlDetail)
|
||||
{
|
||||
<div class="col-12 my-1">
|
||||
<button class="btn btn-lg btn-warning w-100" disabled="@inAttr" @onclick="ToggleOdlDetail"><i class="fa-solid fa-chevron-down"></i> @txtBtnOdlDetail</button>
|
||||
</div>
|
||||
}
|
||||
|
||||
@if (showOdlDetail || inAttr)
|
||||
{
|
||||
<div class="col-12 my-1">
|
||||
<div class="card">
|
||||
<div class="card-header @cssDetailOdl d-flex justify-content-between">
|
||||
<div>
|
||||
<h4>@titleOdlDetail</h4>
|
||||
</div>
|
||||
@if (idxPOdlSel == 0)
|
||||
{
|
||||
<div class="d-flex text-end">
|
||||
<div class="form-check form-switch px-2">
|
||||
<label class="form-check-label">@txtShowXDL</label>
|
||||
<input class="form-check-input" type="checkbox" @bind="@showPOdlData">
|
||||
</div>
|
||||
@if (!inAttr)
|
||||
{
|
||||
<div>
|
||||
<button class="btn btn-dark w-100" @onclick="ToggleOdlDetail"><i class="fa-solid fa-chevron-up"></i> @txtBtnOdlDetail</button>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="card-body">
|
||||
<div class="row">
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
@if (!showPOdlData)
|
||||
{
|
||||
<b>ODL:</b>
|
||||
}
|
||||
else
|
||||
{
|
||||
<b>P.ODL:</b>
|
||||
}
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@if (currOdl != null && !showPOdlData)
|
||||
{
|
||||
@currOdl.IdxOdl
|
||||
}
|
||||
else
|
||||
{
|
||||
@currPodl.IdxPromessa
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
Rif:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@currPodl.KeyRichiesta
|
||||
</div>
|
||||
</div>
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
Cod:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@currPodl.CodArticolo
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row border-top border-bottom border-secondary">
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
Articolo:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@currPodl.DescArticolo
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
Pezzi:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@currPodl.NumPezzi.ToString("N0")
|
||||
</div>
|
||||
</div>
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
TCiclo:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@if (currOdl != null && currOdl.Tcassegnato > 0 && !showPOdlData)
|
||||
{
|
||||
@currOdl.Tcassegnato.ToString("N2")
|
||||
}
|
||||
else
|
||||
{
|
||||
@currPodl.Tcassegnato.ToString("N2")
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col d-flex justify-content-between">
|
||||
<div class="px-0 small">
|
||||
Pz/pallet:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@if (currOdl != null && !showPOdlData)
|
||||
{
|
||||
@currOdl.PzPallet
|
||||
}
|
||||
else
|
||||
{
|
||||
@currPodl.PzPallet
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-footer">
|
||||
<div class="row">
|
||||
<div class="col text-start fw-bold">
|
||||
@if (currOdl != null && !showPOdlData)
|
||||
{
|
||||
@currOdl.Nome
|
||||
}
|
||||
else
|
||||
{
|
||||
@currPodl.Nome
|
||||
}
|
||||
</div>
|
||||
<div class="col d-flex justify-content-between">
|
||||
@if (!showPOdlData)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="px-0 small">
|
||||
Priorita:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@currPodl.Priorita
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
<div class="col d-flex justify-content-between">
|
||||
@if (!showPOdlData)
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="px-0 small">
|
||||
Data:
|
||||
</div>
|
||||
<div class="px-0 text-end fw-bold">
|
||||
@($"{currPodl.DueDate:yyyy.MM.dd}")
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<CurrOdlDetail CurrOdl="@currOdl" CurrPodl="@currPodl" IdxPOdlSel="@IdxPOdlSel" ShowOdlDetail="@showOdlDetail" ForceCloseOdl="@forceCloseOdl" InAttr="@inAttr" EC_ToggleOdlDetail="ToggleOdlDetail"></CurrOdlDetail>
|
||||
}
|
||||
|
||||
@if (!inAttr && !showSplitOdlRiattr)
|
||||
@@ -331,7 +190,14 @@
|
||||
{
|
||||
<div class="col-12 col-md-6 my-2">
|
||||
<div class="form-check form-switch fs-3">
|
||||
<input class="form-check-input" type="checkbox" @bind="@forceCloseOdl">
|
||||
@if (enableSplitODL)
|
||||
{
|
||||
<input class="form-check-input" type="checkbox" @bind="@forceCloseOdl">
|
||||
}
|
||||
else
|
||||
{
|
||||
<input class="form-check-input" type="checkbox" @bind="@forceCloseOdl" disabled>
|
||||
}
|
||||
<label class="form-check-label">@txtForceCloseOdl</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
+286
-139
@@ -1,12 +1,12 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using Microsoft.JSInterop;
|
||||
using MP.Core.Objects;
|
||||
using MP.Data;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.Objects;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using NLog;
|
||||
using System.Text;
|
||||
using static MP.Data.Objects.Enums;
|
||||
using static MP.Core.Objects.Enums;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
{
|
||||
@@ -21,16 +21,16 @@ namespace MP_TAB3.Components
|
||||
/// Post update restituisco nuova lista dati
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public EventCallback<List<MappaStatoExpl>> E_Updated { get; set; }
|
||||
public EventCallback<List<MappaStatoExplModel>> E_Updated { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE
|
||||
public MappaStatoExplModel? RecMSE
|
||||
{
|
||||
get => currRecMSE;
|
||||
set
|
||||
{
|
||||
// salvo SOLO SE non sono in conferma
|
||||
if (!setupActive)
|
||||
if (!setupActive && !isProcessing)
|
||||
{
|
||||
currRecMSE = value;
|
||||
}
|
||||
@@ -102,9 +102,6 @@ namespace MP_TAB3.Components
|
||||
[Inject]
|
||||
protected MailService MailServ { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected StatusData SDService { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected MessageService MsgServ { get; set; } = null!;
|
||||
|
||||
@@ -119,6 +116,9 @@ namespace MP_TAB3.Components
|
||||
get => IdxOdl > 0;
|
||||
}
|
||||
|
||||
[Inject]
|
||||
protected StatusData SDService { get; set; } = null!;
|
||||
|
||||
protected string SearchPodl
|
||||
{
|
||||
get => searchPodl;
|
||||
@@ -195,10 +195,6 @@ namespace MP_TAB3.Components
|
||||
|
||||
protected async Task CheckAttr()
|
||||
{
|
||||
#if false
|
||||
// rileggo ODL
|
||||
await updateIdxOdl();
|
||||
#endif
|
||||
// verifico attrezzaggio su macchina corrente o se multi su parent
|
||||
string idxMacc2check = isMulti ? IdxMaccParent : IdxMaccSel;
|
||||
StatoMacchineModel rigaStato = TabDServ.StatoMacchina(idxMacc2check);
|
||||
@@ -260,11 +256,11 @@ namespace MP_TAB3.Components
|
||||
return;
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
// preparo gestione progress display
|
||||
MaxVal = 10;
|
||||
isProcessing = true;
|
||||
int currStep = 0;
|
||||
await advStep(currStep);
|
||||
|
||||
@@ -281,29 +277,30 @@ namespace MP_TAB3.Components
|
||||
await advStep(currStep++);
|
||||
|
||||
// processo x macchina selezionata
|
||||
await TabDServ.OdlFineProd(idxODLCurr, IdxMaccSel);
|
||||
await TabDServ.OdlFineProd(idxODLCurr, IdxMaccSel, DateTime.Now);
|
||||
await Task.Delay(50);
|
||||
await advStep(currStep++);
|
||||
|
||||
string evText = "Registrata ANNULLAMENTO ATTREZZAGGIO per ODL {0}";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine(String.Format(evText, idxODLCurr));
|
||||
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLCurr);
|
||||
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLCurr, DateTime.Now);
|
||||
await advStep(currStep++);
|
||||
|
||||
// resetta PODL e rimuove ODL x poi TOGLIERE info di setup su macchina corrente
|
||||
await TabDServ.OdlClearSetup(idxODLCurr, IdxMaccSel);
|
||||
await advStep(currStep++);
|
||||
|
||||
|
||||
// se è multi processo ANCHE x altra tavola...
|
||||
if (isMulti)
|
||||
{
|
||||
sb.AppendLine("---");
|
||||
var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true);
|
||||
int idxOdlAltra = tabOdlAltra.IdxOdl;
|
||||
await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav);
|
||||
await Task.Delay(50);
|
||||
await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav, DateTime.Now);
|
||||
sb.AppendLine(String.Format(evText, idxOdlAltra));
|
||||
await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra);
|
||||
await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra, DateTime.Now);
|
||||
|
||||
// resetta PODL e rimuove ODL x poi TOGLIERE info di setup su macchina corrente
|
||||
await TabDServ.OdlClearSetup(idxOdlAltra, idxMaccAltraTav);
|
||||
@@ -311,7 +308,6 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
await advStep(currStep++);
|
||||
|
||||
|
||||
// se è master --> chiamo update child!
|
||||
if (isMaster)
|
||||
{
|
||||
@@ -333,6 +329,18 @@ namespace MP_TAB3.Components
|
||||
await RefreshData();
|
||||
await CheckAttr();
|
||||
await advStep(currStep++);
|
||||
await FlushMpIoOdlCache();
|
||||
// notifica...
|
||||
if (isMulti)
|
||||
{
|
||||
await E_MachSel.InvokeAsync(idxMaccAltraTav);
|
||||
await Task.Delay(delayUpd);
|
||||
}
|
||||
else
|
||||
{
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
}
|
||||
await E_MachSel.InvokeAsync(IdxMaccSel);
|
||||
isProcessing = false;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
@@ -348,12 +356,12 @@ namespace MP_TAB3.Components
|
||||
return;
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
MaxVal = 3;
|
||||
int currStep = 0;
|
||||
await advStep(currStep);
|
||||
isProcessing = true;
|
||||
// chiamo stored x riprendere ODL (toglie data chiusura...)
|
||||
var rowRes = await TabDServ.OdlReopenOdlMacc(IdxMaccSel);
|
||||
if (rowRes != null && rowRes.IdxOdl > 0)
|
||||
@@ -373,8 +381,21 @@ namespace MP_TAB3.Components
|
||||
await RefreshData();
|
||||
await CheckAttr();
|
||||
await advStep(currStep++);
|
||||
await FlushMpIoOdlCache();
|
||||
// notifica...
|
||||
if (isMulti)
|
||||
{
|
||||
await E_MachSel.InvokeAsync(idxMaccAltraTav);
|
||||
await Task.Delay(delayUpd);
|
||||
}
|
||||
else
|
||||
{
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
}
|
||||
await E_MachSel.InvokeAsync(IdxMaccSel);
|
||||
// chiudo update...
|
||||
isProcessing = false;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -388,12 +409,12 @@ namespace MP_TAB3.Components
|
||||
return;
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
MaxVal = 3;
|
||||
int currStep = 0;
|
||||
await advStep(currStep);
|
||||
isProcessing = true;
|
||||
// se ho ODL su altra macchina...
|
||||
if (IdxOdlAltra > 0)
|
||||
{
|
||||
@@ -413,8 +434,21 @@ namespace MP_TAB3.Components
|
||||
await RefreshData();
|
||||
await CheckAttr();
|
||||
await advStep(currStep++);
|
||||
await FlushMpIoOdlCache();
|
||||
// notifica...
|
||||
if (isMulti)
|
||||
{
|
||||
await E_MachSel.InvokeAsync(idxMaccAltraTav);
|
||||
await Task.Delay(delayUpd);
|
||||
}
|
||||
else
|
||||
{
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
}
|
||||
await E_MachSel.InvokeAsync(IdxMaccSel);
|
||||
// chiudo update...
|
||||
isProcessing = false;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -429,11 +463,14 @@ namespace MP_TAB3.Components
|
||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"PODL: {currPodl.IdxPromessa}{Environment.NewLine}Art: [{currPodl.CodArticolo}] {currPodl.DescArticolo}{Environment.NewLine}Pezzi: {currPodl.NumPezzi} * TCiclo: {tcRichAttr:N3}min{Environment.NewLine}Tempo stimato: {stima}{Environment.NewLine}{Environment.NewLine}Confermi la chiusura della fase di attrezzaggio?"))
|
||||
return;
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
// preparo gestione progress display
|
||||
MaxVal = 8;
|
||||
int currStep = 0;
|
||||
await advStep(currStep);
|
||||
isProcessing = true;
|
||||
await confermaProdOdl(true);
|
||||
await advStep(currStep++);
|
||||
// se vedesse TCRich a zero lo reimposta a quello assegnato...
|
||||
@@ -464,7 +501,7 @@ namespace MP_TAB3.Components
|
||||
string evText = "Registrata inizio produzione per ODL {0}";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine(String.Format(evText, idxODLStart));
|
||||
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLStart);
|
||||
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLStart, DateTime.Now);
|
||||
// indico INIZIO SETUP su REDIS come EXE della macchina...
|
||||
string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.stopSetup, $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODLStart}");
|
||||
@@ -476,7 +513,7 @@ namespace MP_TAB3.Components
|
||||
var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true);
|
||||
int idxOdlAltra = tabOdlAltra.IdxOdl;
|
||||
sb.AppendLine(String.Format(evText, idxOdlAltra));
|
||||
await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra);
|
||||
await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra, DateTime.Now);
|
||||
// invio su seconda tavola
|
||||
TabDServ.addTask4Machine(idxMaccAltraTav, taskType.stopSetup, $"TS:{ts}|MATR: {MatrOpr}| Master Machine: {IdxMaccSel}");
|
||||
}
|
||||
@@ -493,7 +530,7 @@ namespace MP_TAB3.Components
|
||||
// invio chiusura attrezzaggio
|
||||
ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
|
||||
string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODLStart}";
|
||||
await processaEvento(machine.IdxMacchinaSlave, idxEvento, sb.ToString(), idxODLStart);
|
||||
await processaEvento(machine.IdxMacchinaSlave, idxEvento, sb.ToString(), idxODLStart, DateTime.Now);
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.fixStopSetup, outData);
|
||||
}
|
||||
|
||||
@@ -521,6 +558,18 @@ namespace MP_TAB3.Components
|
||||
await RefreshData();
|
||||
await CheckAttr();
|
||||
await advStep(currStep++);
|
||||
await FlushMpIoOdlCache();
|
||||
// notifica...
|
||||
if (isMulti)
|
||||
{
|
||||
await E_MachSel.InvokeAsync(idxMaccAltraTav);
|
||||
await Task.Delay(delayUpd);
|
||||
}
|
||||
else
|
||||
{
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
}
|
||||
await E_MachSel.InvokeAsync(IdxMaccSel);
|
||||
// chiudo update...
|
||||
isProcessing = false;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
@@ -540,12 +589,15 @@ namespace MP_TAB3.Components
|
||||
|
||||
/***************************************************
|
||||
* comprende gestione machineSlave x fix ODL master --> slave
|
||||
*
|
||||
***************************************************/
|
||||
|
||||
// preparo gestione progress display
|
||||
MaxVal = 11;
|
||||
MaxVal = 10;
|
||||
int currStep = 0;
|
||||
// elimino dati status...
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
SDService.MachProdStRem(IdxMaccParent);
|
||||
|
||||
if (isMulti)
|
||||
{
|
||||
@@ -559,7 +611,6 @@ namespace MP_TAB3.Components
|
||||
{ }
|
||||
}
|
||||
await advStep(currStep);
|
||||
isProcessing = true;
|
||||
DateTime adesso = DateTime.Now;
|
||||
await advStep(currStep++);
|
||||
// proseguo
|
||||
@@ -623,49 +674,13 @@ namespace MP_TAB3.Components
|
||||
string evText = "Registrato inizio attrezzaggio per ODL {0}";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine(String.Format(evText, idxODL_curr));
|
||||
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODL_curr);
|
||||
DateTime dtEvAttr = DateTime.Now;
|
||||
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODL_curr, dtEvAttr);
|
||||
await advStep(currStep++);
|
||||
// indico INIZIO SETUP su REDIS come EXE della macchina...
|
||||
string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
|
||||
string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODL_curr}";
|
||||
// aggiungo articolo, commessa, richiesta pezzi...
|
||||
try
|
||||
{
|
||||
var datiODL = await TabDServ.OdlCurrByMacc(IdxMaccSel, true);
|
||||
string setArtVal = $"{datiODL.CodArticolo}";
|
||||
string setPzCommVal = $"{datiODL.NumPezzi}";
|
||||
string setCommVal = $"ODL{datiODL.IdxOdl:00000000}";
|
||||
// FIXME TODO: scrivere come sotto? testare valvital x linea LASCO
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.startSetup, outData);
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.setArt, setArtVal);
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.setComm, setCommVal);
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.setPzComm, setPzCommVal);
|
||||
TabDServ.MachineParamUpdate(IdxMaccSel, "setArt", setArtVal);
|
||||
TabDServ.MachineParamUpdate(IdxMaccSel, "setComm", setCommVal);
|
||||
TabDServ.MachineParamUpdate(IdxMaccSel, "setPzComm", setPzCommVal);
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.setParameter, "ForceUpdate");
|
||||
await advStep(currStep++);
|
||||
// li aggiungo ANCHE sui PLC slave se ci sono...
|
||||
if (isMaster)
|
||||
{
|
||||
// calcolo gli slave...
|
||||
var slaveList = SMServ.ListM2S
|
||||
.Where(x => x.IdxMacchina.Equals(IdxMaccSel, StringComparison.InvariantCultureIgnoreCase))
|
||||
.ToList();
|
||||
foreach (var machine in slaveList)
|
||||
{
|
||||
outData = $"TS:{ts}|MATR:{MatrOpr}|Master Machine: {IdxMaccSel}";
|
||||
// invio chiusura attrezzaggio
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.startSetup, outData);
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setArt, setArtVal);
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setComm, setCommVal);
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setPzComm, setPzCommVal);
|
||||
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "setArt", setArtVal);
|
||||
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "setComm", setCommVal);
|
||||
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "setPzComm", setPzCommVal);
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setParameter, "ForceUpdate");
|
||||
}
|
||||
}
|
||||
await DoSendTaskOdl(idxODL_curr);
|
||||
await advStep(currStep++);
|
||||
}
|
||||
catch (Exception exc)
|
||||
@@ -693,10 +708,12 @@ namespace MP_TAB3.Components
|
||||
if (idxOdlAltra > 0)
|
||||
{
|
||||
sb.AppendLine("---");
|
||||
await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav);
|
||||
await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav, dtEvAttr);
|
||||
//await Task.Delay(50);
|
||||
evText = $"Registrato inizio attrezzaggio per ODL {idxOdlAltra} (setup seconda tavola)";
|
||||
sb.AppendLine(evText);
|
||||
await processaEvento(idxMaccAltraTav, idxEvento, evText, idxOdlAltra);
|
||||
// attrezzo con ritardo
|
||||
await processaEvento(idxMaccAltraTav, idxEvento, evText, idxOdlAltra, dtEvAttr.AddMilliseconds(50));
|
||||
}
|
||||
lblOut = sb.ToString().Replace("---", "<br/>");
|
||||
}
|
||||
@@ -728,11 +745,23 @@ namespace MP_TAB3.Components
|
||||
await TabDServ.FlushOdlCache();
|
||||
IdxPOdlSel = 0;
|
||||
RecMSE = null;
|
||||
await FlushMpIoOdlCache();
|
||||
await InvokeAsync(StateHasChanged);
|
||||
await RefreshData();
|
||||
await CheckAttr();
|
||||
inAttr = true;
|
||||
tcRichAttr = tmpTCR;
|
||||
// notifica...
|
||||
if (isMulti)
|
||||
{
|
||||
await E_MachSel.InvokeAsync(idxMaccAltraTav);
|
||||
await Task.Delay(delayUpd);
|
||||
}
|
||||
else
|
||||
{
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
}
|
||||
await E_MachSel.InvokeAsync(IdxMaccSel);
|
||||
isProcessing = false;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
@@ -763,7 +792,7 @@ namespace MP_TAB3.Components
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
{
|
||||
if (!setupActive)
|
||||
if (!setupActive && !isProcessing)
|
||||
{
|
||||
if (RecMSE != null && !RecMSE.MostlyEquals(lastRecMSE))
|
||||
{
|
||||
@@ -782,7 +811,7 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
IdxMaccParent = getIdxMaccParent();
|
||||
checkAll();
|
||||
// verifica stato inAttr
|
||||
// verifica stato InAttr
|
||||
await CheckAttr();
|
||||
//salvo lastRec...
|
||||
lastRecMSE = RecMSE;
|
||||
@@ -790,26 +819,30 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
// verifica conferma produzione
|
||||
datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccSel, DateTime.Now);
|
||||
checkConfProd();
|
||||
datiProdAct = await TabDServ.StatoProdMacchinaAsync(IdxMaccSel, DateTime.Now);
|
||||
await checkConfProd();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Chiusura produzione ODL corrente
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected async Task ProdEnd()
|
||||
{
|
||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Confermi fine produzione?"))
|
||||
return;
|
||||
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
// preparo gestione progress display
|
||||
MaxVal = 7;
|
||||
isProcessing = true;
|
||||
int currStep = 0;
|
||||
await advStep(currStep);
|
||||
// leggo idxOdl da ultimo odl attivo x macchina
|
||||
var currOdl = await TabDServ.OdlCurrByMacc(IdxMaccSel, false);
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
int idxODLCurr = currOdl.IdxOdl;
|
||||
int idxEvento = 7;
|
||||
// !!!HARD CODED confermo prod vecchio ODL
|
||||
@@ -824,11 +857,12 @@ namespace MP_TAB3.Components
|
||||
try
|
||||
{
|
||||
// processo x macchina selezionata
|
||||
await TabDServ.OdlFineProd(idxODLCurr, IdxMaccSel);
|
||||
await TabDServ.OdlFineProd(idxODLCurr, IdxMaccSel, DateTime.Now);
|
||||
await Task.Delay(50);
|
||||
string evText = "Registrata fine produzione per ODL {0}";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine(String.Format(evText, idxODLCurr));
|
||||
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLCurr);
|
||||
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLCurr, DateTime.Now);
|
||||
await advStep(currStep++);
|
||||
// se è multi processo ANCHE x altra tavola...
|
||||
if (isMulti)
|
||||
@@ -836,9 +870,10 @@ namespace MP_TAB3.Components
|
||||
sb.AppendLine("---");
|
||||
var tabOdlAltra = await TabDServ.OdlCurrByMacc(idxMaccAltraTav, true);
|
||||
int idxOdlAltra = tabOdlAltra.IdxOdl;
|
||||
await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav);
|
||||
await TabDServ.OdlFineProd(idxOdlAltra, idxMaccAltraTav, DateTime.Now);
|
||||
await Task.Delay(50);
|
||||
sb.AppendLine(String.Format(evText, idxOdlAltra));
|
||||
await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra);
|
||||
await processaEvento(idxMaccAltraTav, idxEvento, String.Format(evText, idxOdlAltra), idxOdlAltra, DateTime.Now);
|
||||
}
|
||||
await advStep(currStep++);
|
||||
// se è master --> chiamo update child!
|
||||
@@ -866,7 +901,7 @@ namespace MP_TAB3.Components
|
||||
// effettuo split su nuovo ODL
|
||||
await TabDServ.OdlSplit(idxODLCurr, MatrOpr, IdxMaccSel, currOdl.Tcassegnato, PzPallet, $"Fine Produzione, Sospensione ODL {idxODLCurr}, generato residuo con pari TCiclo: {currOdl.Tcassegnato}", false, 0);
|
||||
// processo chiusura setup
|
||||
await processaEvento(IdxMaccSel, idxEvento, $"Registrata fine produzione per ODL {idxODLCurr}, nuovo ODL per quantità residua", idxODLCurr);
|
||||
await processaEvento(IdxMaccSel, idxEvento, $"Registrata fine produzione per ODL {idxODLCurr}, nuovo ODL per quantità residua", idxODLCurr, DateTime.Now);
|
||||
|
||||
await advStep(currStep++);
|
||||
// se è multi processo ANCHE x altra tavola...
|
||||
@@ -877,7 +912,7 @@ namespace MP_TAB3.Components
|
||||
// effettuo split su nuovo ODL
|
||||
await TabDServ.OdlSplit(idxOdlAltra, MatrOpr, idxMaccAltraTav, tabOdlAltra.Tcassegnato, PzPallet, $"Fine Produzione, Sospensione ODL {idxOdlAltra}, generato residuo con pari TCiclo: {tabOdlAltra.Tcassegnato}", false, 0);
|
||||
// processo chiusura setup
|
||||
await processaEvento(idxMaccAltraTav, idxEvento, $"Registrata fine produzione per ODL {idxOdlAltra}, nuovo ODL per quantità residua", idxOdlAltra);
|
||||
await processaEvento(idxMaccAltraTav, idxEvento, $"Registrata fine produzione per ODL {idxOdlAltra}, nuovo ODL per quantità residua", idxOdlAltra, DateTime.Now);
|
||||
}
|
||||
await advStep(currStep++);
|
||||
// se è master --> chiamo update child!
|
||||
@@ -895,7 +930,22 @@ namespace MP_TAB3.Components
|
||||
NavMan.NavigateTo($"machine-detail");
|
||||
}
|
||||
}
|
||||
// aggiunto esplicita endProd
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.endProd, "");
|
||||
if (isMaster)
|
||||
{
|
||||
// calcolo gli slave...
|
||||
var slaveList = SMServ.ListM2S
|
||||
.Where(x => x.IdxMacchina.Equals(IdxMaccSel, StringComparison.InvariantCultureIgnoreCase))
|
||||
.ToList();
|
||||
foreach (var machine in slaveList)
|
||||
{
|
||||
// invio task x end produzione...
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.endProd, "");
|
||||
}
|
||||
}
|
||||
await advStep(currStep++);
|
||||
await FlushMpIoOdlCache();
|
||||
// faccio refresh e riporto
|
||||
IdxPOdlSel = 0;
|
||||
RecMSE = null;
|
||||
@@ -908,6 +958,17 @@ namespace MP_TAB3.Components
|
||||
await RefreshData();
|
||||
await CheckAttr();
|
||||
await advStep(currStep++);
|
||||
// notifica...
|
||||
if (isMulti)
|
||||
{
|
||||
await E_MachSel.InvokeAsync(idxMaccAltraTav);
|
||||
await Task.Delay(delayUpd);
|
||||
}
|
||||
else
|
||||
{
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
}
|
||||
await E_MachSel.InvokeAsync(IdxMaccSel);
|
||||
isProcessing = false;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
@@ -964,6 +1025,9 @@ namespace MP_TAB3.Components
|
||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Confermi invio FIX chiusura attrezzaggio ad impianto?"))
|
||||
return;
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
|
||||
string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{IdxOdl}";
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.fixStopSetup, outData);
|
||||
@@ -1041,16 +1105,23 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Esegue split ODL corrente
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
protected async Task SplitOdl()
|
||||
{
|
||||
if (!await JSRuntime.InvokeAsync<bool>("confirm", $"Confermi richiesta riattrezzaggio ODL, con conseguente chiusura ODL corrente + split nuovo ODL con TC {tcRichAttr:N3}?"))
|
||||
return;
|
||||
|
||||
// prima di tutto svuoto dati prod
|
||||
isProcessing = true;
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
|
||||
// preparo gestione progress display
|
||||
MaxVal = 9;
|
||||
MaxVal = 10;
|
||||
int currStep = 0;
|
||||
await advStep(currStep);
|
||||
isProcessing = true;
|
||||
|
||||
// se vedesse TCRich a zero lo reimposta a quello assegnato...
|
||||
if (tcRichAttr == 0)
|
||||
@@ -1081,7 +1152,7 @@ namespace MP_TAB3.Components
|
||||
string evText = "Registrato Riattrezzaggio ODL (old :{0})";
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.AppendLine(String.Format(evText, idxODLSplit));
|
||||
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLSplit);
|
||||
await processaEvento(IdxMaccSel, idxEvento, sb.ToString(), idxODLSplit, DateTime.Now);
|
||||
await advStep(currStep++);
|
||||
// update buttons...
|
||||
checkAll();
|
||||
@@ -1096,6 +1167,23 @@ namespace MP_TAB3.Components
|
||||
await advStep(currStep++);
|
||||
showSplitOdlRiattr = false;
|
||||
await ReloadXDL(true);
|
||||
// invio richiesta reset NUOVO ODL...
|
||||
if (IdxOdl > 0)
|
||||
{
|
||||
await DoSendTaskOdl(IdxOdl);
|
||||
}
|
||||
await advStep(currStep++);
|
||||
// notifica...
|
||||
if (isMulti)
|
||||
{
|
||||
await E_MachSel.InvokeAsync(idxMaccAltraTav);
|
||||
await Task.Delay(delayUpd);
|
||||
}
|
||||
else
|
||||
{
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
}
|
||||
await E_MachSel.InvokeAsync(IdxMaccSel);
|
||||
// chiudo update...
|
||||
isProcessing = false;
|
||||
await InvokeAsync(StateHasChanged);
|
||||
@@ -1121,13 +1209,15 @@ namespace MP_TAB3.Components
|
||||
#region Private Fields
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private bool approvTCEnabled = false;
|
||||
|
||||
private bool confRett = true;
|
||||
|
||||
private double currVal = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Tempo di delay x simulare cambio idxMaccSub
|
||||
/// </summary>
|
||||
private int delayUpd = 1000;
|
||||
|
||||
private List<string> emailAdmDest = new List<string>();
|
||||
|
||||
private bool enableAnnullaSetup = false;
|
||||
@@ -1196,17 +1286,6 @@ namespace MP_TAB3.Components
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private string baseLang
|
||||
{
|
||||
get => MsgServ.UserPrefGet("Lang");
|
||||
}
|
||||
|
||||
private bool cancelSetupEnabled
|
||||
{
|
||||
//get => inAttr && enableSchedaTecnica && enableAnnullaSetup;
|
||||
get => inAttr && enableAnnullaSetup;
|
||||
}
|
||||
|
||||
private bool annullaSetupVisible
|
||||
{
|
||||
get
|
||||
@@ -1224,7 +1303,7 @@ namespace MP_TAB3.Components
|
||||
// var pUpd = Task.Run(async () =>
|
||||
// {
|
||||
// // controllo ANCHE che la tav correntemente selezionata NON abbia pezzi da confermare
|
||||
// datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccSel, adesso);
|
||||
// datiProdAct = await TabDServ.StatoProdMacchinaAsync(IdxMaccMain, adesso);
|
||||
// answ = datiProdAct.PzConfBuoni == 0 && datiProdAct.Pz2RecScarto == 0;
|
||||
// });
|
||||
// pUpd.Wait();
|
||||
@@ -1233,16 +1312,22 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
private string cssDetailOdl
|
||||
private string baseLang
|
||||
{
|
||||
get => IdxPOdlSel > 0 ? "bg-info text-light" : "bg-warning";
|
||||
get => MsgServ.UserPrefGet("Lang");
|
||||
}
|
||||
|
||||
private bool cancelSetupEnabled
|
||||
{
|
||||
//get => InAttr && enableSchedaTecnica && enableAnnullaSetup;
|
||||
get => inAttr && enableAnnullaSetup;
|
||||
}
|
||||
|
||||
private ODLExpModel currOdl { get; set; } = new ODLExpModel();
|
||||
|
||||
private PODLExpModel currPodl { get; set; } = new PODLExpModel();
|
||||
|
||||
private MappaStatoExpl? currRecMSE { get; set; } = null;
|
||||
private MappaStatoExplModel? currRecMSE { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Verifica se l'ALTRA macchina NON abbia ODL valido (== 0)
|
||||
@@ -1286,7 +1371,7 @@ namespace MP_TAB3.Components
|
||||
|
||||
private bool isLoading { get; set; } = false;
|
||||
|
||||
private MappaStatoExpl? lastRecMSE { get; set; } = null;
|
||||
private MappaStatoExplModel? lastRecMSE { get; set; } = null;
|
||||
|
||||
private string lblWarnBody
|
||||
{
|
||||
@@ -1322,6 +1407,19 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
private int numRil2Conf
|
||||
{
|
||||
get
|
||||
{
|
||||
int answ = -1;
|
||||
if (datiProdAct != null)
|
||||
{
|
||||
answ = datiProdAct.Pz2RecRilav;
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
private int numSca2Conf
|
||||
{
|
||||
get
|
||||
@@ -1372,8 +1470,8 @@ namespace MP_TAB3.Components
|
||||
catch
|
||||
{ }
|
||||
|
||||
// ora verifico SE E SOLO SE è ANCORA in attrezzaggio ora verifico SE ALTRA
|
||||
// TAVOLA ha ODL...
|
||||
// ora verifico SE E SOLO SE è ANCORA in attrezzaggio ora verifico SE
|
||||
// ALTRA TAVOLA ha ODL...
|
||||
if (dtChiusura.AddMinutes(gPeriodReopenOdlTav) > adesso)
|
||||
{
|
||||
answ = showReopenOdlTav;
|
||||
@@ -1416,11 +1514,6 @@ namespace MP_TAB3.Components
|
||||
|
||||
private decimal tcRichAttr { get; set; } = 0;
|
||||
|
||||
private string titleOdlDetail
|
||||
{
|
||||
get => IdxPOdlSel > 0 ? "Verifica parametri attrezzaggio NUOVO PODL" : inAttr ? "Parametri PODL in Attrezzaggio" : "Parametri PODL Corrente";
|
||||
}
|
||||
|
||||
private string txtBtnOdlDetail
|
||||
{
|
||||
get => showOdlDetail ? "Nascondi Dettaglio PODL" : "MOSTRA Dettaglio ODL Corrente";
|
||||
@@ -1431,11 +1524,6 @@ namespace MP_TAB3.Components
|
||||
get => forceCloseOdl ? Traduci("ForceCloseODL") : Traduci("SplitCurrODL");
|
||||
}
|
||||
|
||||
private string txtShowXDL
|
||||
{
|
||||
get => showPOdlData ? "PODL" : "ODL";
|
||||
}
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Private Methods
|
||||
@@ -1455,13 +1543,20 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
private void checkConfProd()
|
||||
private async Task checkConfProd()
|
||||
{
|
||||
// calcolo conferma prod...
|
||||
needConfProd = RecMSE != null && datiProdAct != null;
|
||||
if (datiProdAct != null)
|
||||
{
|
||||
needConfProd = (datiProdAct.Pz2RecTot > 0 || datiProdAct.Pz2RecScarto != 0) && !isSlave;
|
||||
needConfProd = (datiProdAct.Pz2RecTot > 0 || datiProdAct.Pz2RecScarto > 0 || datiProdAct.Pz2RecRilav > 0) && !isSlave;
|
||||
// se è multi controllo anche altra tavola...
|
||||
if (isMulti && !needConfProd)
|
||||
{
|
||||
// verifica conferma produzione
|
||||
var datiProdAltra = await TabDServ.StatoProdMacchinaAsync(idxMaccAltraTav, DateTime.Now);
|
||||
needConfProd = (datiProdAltra.Pz2RecTot > 0 || datiProdAltra.Pz2RecScarto > 0 || datiProdAltra.Pz2RecRilav > 0) && !isSlave;
|
||||
}
|
||||
if (needConfProd)
|
||||
{
|
||||
StateHasChanged();
|
||||
@@ -1496,15 +1591,10 @@ namespace MP_TAB3.Components
|
||||
else // se NON sono in setup verifico se ho pz da confermare
|
||||
{
|
||||
// recupero pz da confermare
|
||||
datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccSel, adesso);
|
||||
#if false
|
||||
var rawData = await TabDServ.PezziProdMacchina(IdxMaccSel);
|
||||
prodMacchina = rawData.FirstOrDefault() ?? new PzProdModel();
|
||||
#endif
|
||||
checkConfProd();
|
||||
#if false
|
||||
if (prodMacchina.pezziNonConfermati > 0)
|
||||
#endif
|
||||
datiProdAct = await TabDServ.StatoProdMacchinaAsync(IdxMaccSel, adesso);
|
||||
|
||||
await checkConfProd();
|
||||
|
||||
if (datiProdAct.Pz2RecTot > 0)
|
||||
{
|
||||
// confermo produzione ZERO pezzi (in setup)
|
||||
@@ -1512,16 +1602,10 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
// confermo al netto dei pezzi lasciati...
|
||||
fatto = TabDServ.ConfermaProdMacchinaFull(IdxMaccSel, modoConfProd, datiProdAct.Pz2RecTot, 0, 0, adesso, MatrOpr);
|
||||
#if false
|
||||
fatto = TabDServ.ConfermaProdMacchinaFull(IdxMaccSel, modoConfProd, prodMacchina.pezziNonConfermati, 0, 0, adesso, MatrOpr);
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
fatto = TabDServ.ConfermaProdMacchina(IdxMaccSel, modoConfProd, datiProdAct.Pz2RecTot, 0, adesso, MatrOpr);
|
||||
#if false
|
||||
fatto = TabDServ.ConfermaProdMacchina(IdxMaccSel, modoConfProd, prodMacchina.pezziNonConfermati, 0, adesso, MatrOpr);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1564,6 +1648,57 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Invio set informazioni x segnalare setupODL
|
||||
/// </summary>
|
||||
/// <param name="idxODL_curr"></param>
|
||||
/// <returns></returns>
|
||||
private async Task DoSendTaskOdl(int idxODL_curr)
|
||||
{
|
||||
// indico INIZIO SETUP su REDIS come EXE della macchina...
|
||||
string ts = string.Format("{0:yyMMdd}T{0:HHmmss.fff}Z", DateTime.Now);
|
||||
string outData = $"TS:{ts}|MATR:{MatrOpr}|ODL:{idxODL_curr}";
|
||||
var datiODL = await TabDServ.OdlCurrByMacc(IdxMaccSel, true);
|
||||
string setArtVal = $"{datiODL.CodArticolo}";
|
||||
string setPzCommVal = $"{datiODL.NumPezzi}";
|
||||
string setCommVal = $"ODL{datiODL.IdxOdl:00000000}";
|
||||
// FIXME TODO: scrivere come sotto? testare valvital x linea LASCO
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.startSetup, outData);
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.setArt, setArtVal);
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.setComm, setCommVal);
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.setPzComm, setPzCommVal);
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.forceResetPzCount, "0");
|
||||
TabDServ.MachineParamUpdate(IdxMaccSel, "setArt", setArtVal);
|
||||
TabDServ.MachineParamUpdate(IdxMaccSel, "setComm", setCommVal);
|
||||
TabDServ.MachineParamUpdate(IdxMaccSel, "setPzComm", setPzCommVal);
|
||||
TabDServ.MachineParamUpdate(IdxMaccSel, "forceResetPzCount", "0");
|
||||
TabDServ.addTask4Machine(IdxMaccSel, taskType.setParameter, "ForceUpdate");
|
||||
//await advStep(currStep++);
|
||||
// li aggiungo ANCHE sui PLC slave se ci sono...
|
||||
if (isMaster)
|
||||
{
|
||||
// calcolo gli slave...
|
||||
var slaveList = SMServ.ListM2S
|
||||
.Where(x => x.IdxMacchina.Equals(IdxMaccSel, StringComparison.InvariantCultureIgnoreCase))
|
||||
.ToList();
|
||||
foreach (var machine in slaveList)
|
||||
{
|
||||
outData = $"TS:{ts}|MATR:{MatrOpr}|Master Machine:{IdxMaccSel}";
|
||||
// invio chiusura attrezzaggio
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.startSetup, outData);
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setArt, setArtVal);
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setComm, setCommVal);
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setPzComm, setPzCommVal);
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.forceResetPzCount, "0");
|
||||
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "setArt", setArtVal);
|
||||
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "setComm", setCommVal);
|
||||
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "setPzComm", setPzCommVal);
|
||||
TabDServ.MachineParamUpdate(machine.IdxMacchinaSlave, "forceResetPzCount", "0");
|
||||
TabDServ.addTask4Machine(machine.IdxMacchinaSlave, taskType.setParameter, "ForceUpdate");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void fixTcNotePzPallet(bool reloadFromOdl)
|
||||
{
|
||||
if (tcRichAttr == 0 || string.IsNullOrEmpty(noteAttr) || PzPallet == 0)
|
||||
@@ -1574,6 +1709,19 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Flush cache relativa a MP-IO x dati ODL
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async Task FlushMpIoOdlCache()
|
||||
{
|
||||
// svuoto dalla cache REDIS del server IO...
|
||||
await TabDServ.ResetIoCache("CurrODL");
|
||||
await TabDServ.ResetIoCache("CurrOdlRow");
|
||||
await TabDServ.ResetIoCache("CurrStatoMacc");
|
||||
await TabDServ.ResetIoCache("DtMac");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// processa evento richiesto
|
||||
/// </summary>
|
||||
@@ -1581,11 +1729,10 @@ namespace MP_TAB3.Components
|
||||
/// <param name="idxEvento"></param>
|
||||
/// <param name="userMsg"></param>
|
||||
/// <param name="idxODL"></param>
|
||||
private async Task processaEvento(string idxMaccCurr, int idxEvento, string userMsg, int idxODL)
|
||||
private async Task processaEvento(string idxMaccCurr, int idxEvento, string userMsg, int idxODL, DateTime adesso)
|
||||
{
|
||||
inputComandoMapo inCmd;
|
||||
inputComandoMapo inCmd2;
|
||||
DateTime adesso = DateTime.Now;
|
||||
var rigaStato = TabDServ.StatoMacchina(idxMaccCurr);
|
||||
// processo evento...
|
||||
EventListModel newRec = new EventListModel()
|
||||
@@ -1638,9 +1785,9 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
if (!string.IsNullOrEmpty(IdxMaccSel))
|
||||
{
|
||||
//2024.04.11 passo macchina selezionata SE multi... era "IdxMaccParent"
|
||||
// 2024.04.11 passo macchina selezionata SE multi... era "IdxMaccParent"
|
||||
ListODLAll = await TabDServ.VSOdlGetUnused(IdxMaccSel, ShowAll, numDayOdl);
|
||||
//ListODLAll = await TabDServ.VSOdlGetUnused(IdxMaccParent, ShowAll, numDayOdl);
|
||||
// ListODLAll = await TabDServ.VSOdlGetUnused(IdxMaccParent, ShowAll, numDayOdl);
|
||||
if (string.IsNullOrEmpty(SearchPodl))
|
||||
{
|
||||
ListODL = ListODLAll;
|
||||
@@ -1655,8 +1802,8 @@ namespace MP_TAB3.Components
|
||||
if (!isMulti || (isMulti && IdxMaccSel.IndexOf("#") > 0))
|
||||
{
|
||||
var rawData = await TabDServ.PezziProdMacchina(IdxMaccSel);
|
||||
datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccSel, DateTime.Now);
|
||||
checkConfProd();
|
||||
datiProdAct = await TabDServ.StatoProdMacchinaAsync(IdxMaccSel, DateTime.Now);
|
||||
await checkConfProd();
|
||||
Log.Trace("OdlMan.ReloadData | check checkConfProd done");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
<td>
|
||||
<div class="row">
|
||||
<div class="col text-start">
|
||||
<div class="fw-bold text-uppercase">
|
||||
<div class="text-uppercase fw-bold">
|
||||
@item.description
|
||||
</div>
|
||||
<div class="smaller lh-sm">
|
||||
@@ -66,17 +66,33 @@
|
||||
</div>
|
||||
}
|
||||
<div class="col-12">
|
||||
<div class="fw-bold">
|
||||
@item.value
|
||||
<div class="">
|
||||
<span class="fw-bold">@item.value</span>
|
||||
@if (!string.IsNullOrEmpty(item.UM))
|
||||
{
|
||||
<span class="small"> (@item.UM)</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" runat="server" id="divRequest" visible='<%# !string.IsNullOrEmpty(Eval("reqValue").ToString()) %>'>
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="fw-bold text-primary small text-nowrap">
|
||||
<i class="fa fa-hand-o-right" aria-hidden="true"></i>
|
||||
@item.reqValue
|
||||
</div>
|
||||
@if (!string.IsNullOrEmpty(item.reqValue))
|
||||
{
|
||||
<div class="fw-bold text-primary small text-nowrap">
|
||||
<i class="fa-solid fa-angles-right"></i>
|
||||
@item.reqValue
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!string.IsNullOrEmpty(item.value))
|
||||
{
|
||||
<div class="fw-bold text-success small text-nowrap">
|
||||
<i class="fa-solid fa-circle-check small"></i>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
@@ -114,12 +130,12 @@
|
||||
{
|
||||
@if (isSelected(item.uid))
|
||||
{
|
||||
@* <div class="col-12">
|
||||
<div class="input-group">
|
||||
<button class="btn btn-success" @onclick="() => DoSave()"><i class="fa-solid fa-check"></i></button>
|
||||
<button class="btn btn-danger" @onclick="() => ResetReq()"><i class="fa-solid fa-ban"></i></button>
|
||||
</div>
|
||||
</div> *@
|
||||
@* <div class="col-12">
|
||||
<div class="input-group">
|
||||
<button class="btn btn-success" @onclick="() => DoSave()"><i class="fa-solid fa-check"></i></button>
|
||||
<button class="btn btn-danger" @onclick="() => ResetReq()"><i class="fa-solid fa-ban"></i></button>
|
||||
</div>
|
||||
</div> *@
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DTO;
|
||||
using MP.Core.DTO;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using NLog;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class ParamsMan : IDisposable
|
||||
public partial class ParamsMan : ComponentBase, IDisposable
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
@@ -159,7 +159,7 @@ namespace MP_TAB3.Components
|
||||
|
||||
private ObjItemDTO? currItem { get; set; } = null;
|
||||
private string IdxMaccSel { get; set; } = "";
|
||||
private MappaStatoExpl? lastRecMSE { get; set; } = null;
|
||||
private MappaStatoExplModel? lastRecMSE { get; set; } = null;
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
<div class="card shadow bg-dark p-0 m-0">
|
||||
<div class="card-body rounded rounded-3 py-2 px-3">
|
||||
<div class="row">
|
||||
<div class="col-12 placeholder-glow text-center mb-1">
|
||||
<span class="placeholder col-3 fs-1 bg-light"></span>
|
||||
</div>
|
||||
<div class="col-4 placeholder-glow my-1">
|
||||
<span class="placeholder text-light col-12"></span>
|
||||
<span class="placeholder text-warning placeholder-sm col-9"></span>
|
||||
<span class="placeholder text-warning placeholder-sm col-2"></span>
|
||||
<span class="placeholder text-success placeholder-sm col-9"></span>
|
||||
<span class="placeholder text-success placeholder-sm col-2"></span>
|
||||
<span class="placeholder text-primary placeholder-sm col-9"></span>
|
||||
<span class="placeholder text-primary placeholder-sm col-2"></span>
|
||||
</div>
|
||||
<div class="col-4 placeholder-glow text-center py-2 my-1">
|
||||
<span class="placeholder col-6 bg-secondary rounded-circle h-100"></span>
|
||||
</div>
|
||||
<div class="col-4 placeholder-glow my-1">
|
||||
<span class="placeholder col-12"></span>
|
||||
<span class="placeholder text-light col-9"></span>
|
||||
<span class="placeholder text-light col-2"></span>
|
||||
<span class="placeholder text-light col-9"></span>
|
||||
<span class="placeholder text-light col-2"></span>
|
||||
<span class="placeholder text-light col-9"></span>
|
||||
<span class="placeholder text-light col-2"></span>
|
||||
</div>
|
||||
<div class="col-12 placeholder-glow text-center my-1">
|
||||
<span class="placeholder placeholder-lg fs-1 col-2 bg-warning"></span>
|
||||
<span class="placeholder placeholder-lg fs-1 col-7 bg-primary"></span>
|
||||
<span class="placeholder placeholder-lg fs-1 col-2 bg-info"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,4 @@
|
||||
.pholderHeight {
|
||||
height: 5rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
|
||||
.pholderHeight {
|
||||
height: 5rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
.pholderHeight{height:5rem;object-fit:cover;}
|
||||
@@ -0,0 +1,31 @@
|
||||
<div class="cardObj card shadow bg-dark border border-3 border-secondary p-0 rounded rounded-4">
|
||||
<div class="card-body p-0">
|
||||
<div class="row">
|
||||
<div class="col-12 placeholder-glow text-center my-0 lh-lg">
|
||||
<span class="placeholder col-12 fs-1 bg-secondary"></span>
|
||||
</div>
|
||||
<div class="col-12 placeholder-glow text-center my-0">
|
||||
<span class="placeholder col-12 fs-3 bg-light pholderHeight"></span>
|
||||
</div>
|
||||
<div class="col-12 placeholder-glow text-center">
|
||||
<span class="placeholder col-12 fs-2 bg-success"></span>
|
||||
</div>
|
||||
<div class="col-12 placeholder-glow text-center my-0">
|
||||
<span class="placeholder placeholder-lg col-4 bg-success"></span>
|
||||
<span class="placeholder placeholder-lg col-3 bg-danger"></span>
|
||||
<span class="placeholder placeholder-lg col-4 bg-warning"></span>
|
||||
</div>
|
||||
<div class="col-4 p-2 placeholder-glow text-center mb-1">
|
||||
<span class="placeholder col-12 bg-success fs-1 h-100 rounded-circle my-1 mx-2"></span>
|
||||
</div>
|
||||
<div class="col-8 placeholder-glow mb-1">
|
||||
<span class="placeholder small text-light col-9"></span>
|
||||
<span class="placeholder small text-light col-2"></span>
|
||||
<span class="placeholder small text-light col-9"></span>
|
||||
<span class="placeholder small text-light col-2"></span>
|
||||
<span class="placeholder small text-light col-9"></span>
|
||||
<span class="placeholder small text-light col-2"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,29 @@
|
||||
.pholderHeight {
|
||||
height: 5.1rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
@media (min-width: 430px) {
|
||||
.pholderHeight {
|
||||
height: 6rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 600px) {
|
||||
.pholderHeight {
|
||||
height: 5.2rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.pholderHeight {
|
||||
height: 7.8rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 800px) {
|
||||
.pholderHeight {
|
||||
height: 8.5rem;
|
||||
}
|
||||
}
|
||||
@media (min-width: 1025px) {
|
||||
.pholderHeight {
|
||||
height: 7.3rem;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
|
||||
.pholderHeight {
|
||||
height: 5.1rem;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
@media (min-width: 430px) {
|
||||
.pholderHeight {
|
||||
height: 6.0rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 600px) {
|
||||
.pholderHeight {
|
||||
height: 5.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 768px) {
|
||||
.pholderHeight {
|
||||
height: 7.8rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 800px) {
|
||||
.pholderHeight {
|
||||
height: 8.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (min-width: 1025px) {
|
||||
.pholderHeight {
|
||||
height: 7.3rem;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
.pholderHeight{height:5.1rem;object-fit:cover;}@media(min-width:430px){.pholderHeight{height:6rem;}}@media(min-width:600px){.pholderHeight{height:5.2rem;}}@media(min-width:768px){.pholderHeight{height:7.8rem;}}@media(min-width:800px){.pholderHeight{height:8.5rem;}}@media(min-width:1025px){.pholderHeight{height:7.3rem;}}
|
||||
@@ -1,5 +1,5 @@
|
||||
<div class="textCondens mb-1">
|
||||
<a runat="server" href="@navUrl" target="_blank" class="btn btn-lg btn-primary w-100 py-2 px-4">MAG <i class="fa-solid fa-print"></i></a>
|
||||
<a runat="server" href="@navUrl" target="_blank" class="btn btn-lg btn-info w-100 py-2 px-4">MAG <i class="fa-solid fa-print"></i></a>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
@@ -9,7 +9,7 @@ namespace MP_TAB3.Components
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
@@ -59,7 +59,7 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
await FixQtyUdc();
|
||||
var currUrl = NavMan.Uri;
|
||||
string baseUrl = config.GetValue<string>("ServerConf:BaseUrlTab") ?? (config.GetValue<string>("OptConf:BaseUrlTab") ?? "");
|
||||
string baseUrl = config.GetValue<string>("SpecialConf:AppUrl") ?? (config.GetValue<string>("OptConf:AppUrl") ?? "");
|
||||
string UrlTabJumpMag = SMServ.GetConf("UrlTabJumpMag");
|
||||
if (string.IsNullOrEmpty(UrlTabJumpMag))
|
||||
{
|
||||
|
||||
@@ -0,0 +1,141 @@
|
||||
<MachSel RecMSE="RecMSE" E_MachSel="SetMacc"></MachSel>
|
||||
|
||||
<ShowProcessing Message="Caricamento" IsProcessing="@isProcessing"></ShowProcessing>
|
||||
|
||||
<div class="cardObj p-2 mt-2">
|
||||
<div class="mb-1 fs-6">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<h2>Tipo Selezione</h2>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="form-check form-switch fs-3">
|
||||
<input class="form-check-input" type="checkbox" @bind="@UseOdl">
|
||||
<label class="form-check-label">@selMessage</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@if (useOdl)
|
||||
{
|
||||
<MachineSelOdl IdxMacchina="@IdxMaccSel" E_OdlSel="SetOdl" IdxOdlSel="@IdxOdl"></MachineSelOdl>
|
||||
}
|
||||
else
|
||||
{
|
||||
<EgwCoreLib.Razor.PeriodoSel CurrPeriodo="CurrPeriodo" E_PeriodoSel="SetPeriodo"></EgwCoreLib.Razor.PeriodoSel>
|
||||
}
|
||||
</div>
|
||||
<div class="bg-secondary p-1 mb-1">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<table class="table table-dark table-sm table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="row">
|
||||
<div class="col-4">
|
||||
Art/ODL
|
||||
</div>
|
||||
<div class="col-4 text-end text-nowrap">
|
||||
<div class="row">
|
||||
<div class="col px-0"># Buoni</div>
|
||||
<div class="col px-0"># Scarto</div>
|
||||
@if (ShowRilav)
|
||||
{
|
||||
<div class="col px-0"># Rilav</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-end">Operatore</div>
|
||||
</th>
|
||||
@* <th>Art/ODL</th>
|
||||
<th class="text-end"># Buoni</th>
|
||||
<th class="text-end"># Scarto</th>
|
||||
@if (ShowRilav)
|
||||
{
|
||||
<th class="text-end"># Rilav</th>
|
||||
}
|
||||
<th class="text-end">Operatore</th> *@
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var item in ListPaged)
|
||||
{
|
||||
var actOdl = ActiveOdl(item.DataTo);
|
||||
<tr>
|
||||
<td class="row">
|
||||
<div class="col-4 text-nowrap">
|
||||
<div>Art: <b>@actOdl.CodArticolo</b></div>
|
||||
<div>ODL: <b>@($"ODL{actOdl.IdxOdl:000000000}")</b></div>
|
||||
|
||||
</div>
|
||||
<div class="col-4 text-end text-nowrap">
|
||||
<div class="row">
|
||||
<div class="col fs-4 fw-bold">@item.PezziConf</div>
|
||||
<div class="col fs-4 fw-bold">@item.PezziScar</div>
|
||||
@if (ShowRilav)
|
||||
{
|
||||
<div class="col fs-4 fw-bold">@item.PezziDaRilav</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 text-end">
|
||||
<div>@($"{item.DataOraConf:ddd yyyy-MM-dd HH:mm:ss}")</div>
|
||||
<div><b>@OperDto(item.MatrApp)</b> <i class="fa fa-user" aria-hidden="true"></i></div>
|
||||
|
||||
</div>
|
||||
@if (ShowExtCode || ShowArtDescr)
|
||||
{
|
||||
<div class="col-12 col-sm-6">
|
||||
@if (ShowExtCode)
|
||||
{
|
||||
<div class="px-1">@item.CommessaEsterna</div>
|
||||
}
|
||||
</div>
|
||||
<div class="col-12 col-sm-6 text-end">
|
||||
@if (ShowArtDescr)
|
||||
{
|
||||
<div class="px-0 ps-1 d-flex flex-row-reverse">
|
||||
<div class="text-truncate small" style="max-width: 15rem;" title="@actOdl.DescArticolo">@actOdl.DescArticolo</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
</td>
|
||||
@* <td class="text-nowrap">
|
||||
<div>Art: <b>@actOdl.CodArticolo</b></div>
|
||||
<div>ODL: <b>@($"ODL{actOdl.IdxOdl:000000000}")</b></div>
|
||||
@if (ShowExtCode)
|
||||
{
|
||||
<div class="px-1">@item.CommessaEsterna</div>
|
||||
}
|
||||
</td>
|
||||
<td class="fs-4 fw-bold text-end">@item.PezziConf</td>
|
||||
<td class="fs-4 fw-bold text-end">@item.PezziScar</td>
|
||||
@if (ShowRilav)
|
||||
{
|
||||
<td class="fs-4 fw-bold text-end">@item.PezziDaRilav</td>
|
||||
}
|
||||
<td class="text-end">
|
||||
<div>@($"{item.DataOraConf:ddd yyyy-MM-dd HH:mm:ss}")</div>
|
||||
<div><b>@OperDto(item.MatrApp)</b> <i class="fa fa-user" aria-hidden="true"></i></div>
|
||||
@if (ShowArtDescr)
|
||||
{
|
||||
<div class="px-0 ps-1 d-flex flex-row-reverse">
|
||||
<div class="text-truncate small" style="max-width: 12rem;" title="@actOdl.DescArticolo">@actOdl.DescArticolo</div>
|
||||
</div>
|
||||
}
|
||||
</td> *@
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td colspan="5">
|
||||
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SetPage" numRecordChanged="SetNumRec"></EgwCoreLib.Razor.DataPager>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,389 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using NLog;
|
||||
using static EgwCoreLib.Utils.DtUtils;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class ProdConfMan : IDisposable
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<string> E_MachSel { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<bool> E_Updated { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public string IdxMacchSub { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
ListComplete.Clear();
|
||||
ListPaged.Clear();
|
||||
ListaOdl.Clear();
|
||||
ListaOper.Clear();
|
||||
DictOpr.Clear();
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected List<ElencoConfermeProdModel> ListComplete { get; set; } = new List<ElencoConfermeProdModel>();
|
||||
|
||||
protected List<ElencoConfermeProdModel> ListPaged { get; set; } = new List<ElencoConfermeProdModel>();
|
||||
|
||||
[Inject]
|
||||
protected MessageService MServ { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected SharedMemService SMServ { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected TabDataService TabDServ { get; set; } = null!;
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
await Task.Delay(1);
|
||||
InitConfig();
|
||||
await ReloadBaseList();
|
||||
if (RecMSE != null)
|
||||
{
|
||||
IdxMaccSel = RecMSE.IdxMacchina;
|
||||
isMulti = SMServ.DictMacchMulti[IdxMaccSel] == 1;
|
||||
if (isMulti)
|
||||
{
|
||||
var idxMSel = MServ.UserPrefGet(IdxMaccSel);
|
||||
if (!string.IsNullOrEmpty(idxMSel))
|
||||
{
|
||||
IdxMaccSel = idxMSel;
|
||||
}
|
||||
}
|
||||
await setupPeriodo();
|
||||
await ReloadData();
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task SetMacc(string selIdxMacc)
|
||||
{
|
||||
isProcessing = true;
|
||||
await Task.Delay(1);
|
||||
IdxMaccSel = selIdxMacc;
|
||||
await ReloadData();
|
||||
await Task.Delay(1);
|
||||
isProcessing = false;
|
||||
await E_MachSel.InvokeAsync(selIdxMacc);
|
||||
}
|
||||
|
||||
protected void SetNumRec(int newNum)
|
||||
{
|
||||
NumRecPage = newNum;
|
||||
UpdateTable();
|
||||
}
|
||||
|
||||
protected async Task SetOdl(int selIdxOdl)
|
||||
{
|
||||
isProcessing = true;
|
||||
IdxOdl = selIdxOdl;
|
||||
// se ho odl --> imposto periodo
|
||||
if (IdxOdl > 0)
|
||||
{
|
||||
var recOdl = GetOdl(IdxOdl);
|
||||
if (recOdl != null && recOdl.IdxOdl == IdxOdl)
|
||||
{
|
||||
DateTime fine = DateTime.Today.AddDays(1);
|
||||
DateTime inizio = fine.AddMonths(-1);
|
||||
CurrPeriodo = new Periodo(recOdl.DataInizio ?? inizio.AddDays(-1), recOdl.DataFine ?? fine);
|
||||
}
|
||||
}
|
||||
// altrimenti reset..
|
||||
else
|
||||
{
|
||||
await setupPeriodo();
|
||||
}
|
||||
await ReloadData();
|
||||
isProcessing = false;
|
||||
//await Task.Delay(1);
|
||||
}
|
||||
|
||||
protected void SetPage(int newNum)
|
||||
{
|
||||
PageNum = newNum;
|
||||
UpdateTable();
|
||||
}
|
||||
|
||||
protected async Task SetPeriodo(Periodo newPeriodo)
|
||||
{
|
||||
CurrPeriodo = newPeriodo;
|
||||
await ReloadData();
|
||||
}
|
||||
|
||||
protected void UpdateTable()
|
||||
{
|
||||
// esegue paginazione
|
||||
if (TotalCount > NumRecPage)
|
||||
{
|
||||
ListPaged = ListComplete
|
||||
.OrderByDescending(x => x.DataTo)
|
||||
.Skip((PageNum - 1) * NumRecPage)
|
||||
.Take(NumRecPage)
|
||||
.ToList();
|
||||
}
|
||||
else
|
||||
{
|
||||
ListPaged = ListComplete
|
||||
.OrderByDescending(x => x.DataTo)
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private Dictionary<int, string> DictOpr = new Dictionary<int, string>();
|
||||
|
||||
private bool isMulti = false;
|
||||
|
||||
private bool isProcessing = false;
|
||||
|
||||
private List<ODLExpModel> ListaOdl = new List<ODLExpModel>();
|
||||
|
||||
private List<AnagOperatoriModel> ListaOper = new List<AnagOperatoriModel>();
|
||||
|
||||
private int NumRecPage = 10;
|
||||
|
||||
private int PageNum = 1;
|
||||
|
||||
/// <summary>
|
||||
/// Indica se mostrare descrizione articolo su 3° riga
|
||||
/// </summary>
|
||||
private bool ShowArtDescr = false;
|
||||
|
||||
/// <summary>
|
||||
/// Indica se mostrare CodExt (commessa) su 3° riga
|
||||
/// </summary>
|
||||
private bool ShowExtCode = false;
|
||||
|
||||
/// <summary>
|
||||
/// Indica se partire da ultimo ODL x definire ultimo periodo...
|
||||
/// </summary>
|
||||
private bool ShowLastOdl = false;
|
||||
|
||||
/// <summary>
|
||||
/// Indica se mostrare rilavorati in conferma produzione
|
||||
/// </summary>
|
||||
private bool ShowRilav = false;
|
||||
|
||||
private int TotalCount = 0;
|
||||
|
||||
private bool useOdl = false;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private Periodo CurrPeriodo { get; set; } = new Periodo();
|
||||
|
||||
private string IdxMaccAltra { get; set; } = "";
|
||||
|
||||
/// <summary>
|
||||
/// Restituisce il codice IdxMacchina dell'altra tavola (se multi) altrimenti la stessa macchina...
|
||||
/// </summary>
|
||||
private string idxMaccAltraTav
|
||||
{
|
||||
get
|
||||
{
|
||||
string answ = "";
|
||||
if (RecMSE != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
// verifico se SIA una tavola (ha char "#")
|
||||
int iSharp = IdxMaccMain.IndexOf('#');
|
||||
if (iSharp > 0)
|
||||
{
|
||||
// ora verifico SE ALTRA TAVOLA ha ODL...
|
||||
string nomeTav = IdxMaccMain.Substring(iSharp);
|
||||
string altraTav = nomeTav.Substring(0, nomeTav.Length - 1);
|
||||
altraTav += nomeTav.EndsWith("1") ? "2" : "1";
|
||||
// sistemo nome
|
||||
answ = IdxMaccMain.Replace(nomeTav, altraTav);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Macchina selezionata MAIN
|
||||
/// </summary>
|
||||
private string IdxMaccMain
|
||||
{
|
||||
get => RecMSE != null ? RecMSE.IdxMacchina : "";
|
||||
}
|
||||
|
||||
private string IdxMaccSel { get; set; } = "";
|
||||
|
||||
private int IdxOdl { get; set; } = 0;
|
||||
|
||||
private string selMessage
|
||||
{
|
||||
get => useOdl ? "Periodo da ODL" : "Periodo Libero";
|
||||
}
|
||||
|
||||
private bool UseOdl
|
||||
{
|
||||
get => useOdl;
|
||||
set
|
||||
{
|
||||
useOdl = value;
|
||||
if (!value)
|
||||
{
|
||||
IdxOdl = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Private Methods
|
||||
|
||||
private ODLExpModel ActiveOdl(DateTime dtRif)
|
||||
{
|
||||
var recOdl = ListaOdl
|
||||
.Where(x => x.DataInizio <= dtRif && (x.DataFine >= dtRif || x.DataFine == null))
|
||||
.OrderByDescending(x => x.DataInizio)
|
||||
.FirstOrDefault();
|
||||
return recOdl ?? new ODLExpModel();
|
||||
}
|
||||
|
||||
private ODLExpModel GetOdl(int idxOdl)
|
||||
{
|
||||
var recOdl = ListaOdl
|
||||
.Where(x => x.IdxOdl == idxOdl)
|
||||
.FirstOrDefault();
|
||||
return recOdl ?? new ODLExpModel();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Init da valori configurazione
|
||||
/// </summary>
|
||||
private void InitConfig()
|
||||
{
|
||||
TabDServ.ConfigGetVal("TAB_confProdPeriodLastODL", ref ShowLastOdl);
|
||||
TabDServ.ConfigGetVal("TAB_confProdShowRilav", ref ShowRilav);
|
||||
TabDServ.ConfigGetVal("TAB_confProdShowArtDescr", ref ShowArtDescr);
|
||||
TabDServ.ConfigGetVal("TAB_confProdShowExtCode", ref ShowExtCode);
|
||||
}
|
||||
|
||||
private string OperDto(int matr)
|
||||
{
|
||||
string answ = $"[{matr}]";
|
||||
// cerco in dizionario
|
||||
if (DictOpr.ContainsKey(matr))
|
||||
{
|
||||
answ = DictOpr[matr];
|
||||
}
|
||||
else
|
||||
{
|
||||
// altrimenti cerco da lista e inserisco in dizionario
|
||||
var recOpr = ListaOper.Where(x => x.MatrOpr == matr).FirstOrDefault();
|
||||
if (recOpr != null)
|
||||
{
|
||||
answ = $"{recOpr.Cognome} {recOpr.Nome}";
|
||||
}
|
||||
DictOpr.Add(matr, answ);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Rileggo anagrafiche di base
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private async Task ReloadBaseList()
|
||||
{
|
||||
ListaOper = await TabDServ.ElencoOperatori();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Aggiorno valori produzione alla data richiesta...
|
||||
/// </summary>
|
||||
/// <param name="newDate"></param>
|
||||
private async Task ReloadData()
|
||||
{
|
||||
isProcessing = true;
|
||||
await Task.Delay(1);
|
||||
DateTime dtEnd = DateTime.Today.AddDays(1);
|
||||
DateTime dtStart = dtEnd.AddMonths(-3);
|
||||
if (!string.IsNullOrEmpty(IdxMaccSel))
|
||||
{
|
||||
ListaOdl = await TabDServ.OdlListByMaccPeriodo(IdxMaccSel, dtStart, dtEnd);
|
||||
// se vuoto prendo 1 anno...
|
||||
int maxTry = 3;
|
||||
while (ListaOdl.Count < 1 && maxTry > 0)
|
||||
{
|
||||
dtStart = dtStart.AddMonths(-3);
|
||||
ListaOdl = await TabDServ.OdlListByMaccPeriodo(IdxMaccSel, dtStart, dtEnd);
|
||||
maxTry--;
|
||||
}
|
||||
ListComplete = await TabDServ.ElencoConfProdFiltAsync(IdxMaccSel, CurrPeriodo.Inizio, CurrPeriodo.Fine);
|
||||
TotalCount = ListComplete.Count;
|
||||
// esegue paginazione
|
||||
UpdateTable();
|
||||
}
|
||||
isProcessing = false;
|
||||
}
|
||||
|
||||
private async Task setupPeriodo()
|
||||
{
|
||||
bool doSet = true;
|
||||
if (ShowLastOdl)
|
||||
{
|
||||
UseOdl = true;
|
||||
var LastODL = await TabDServ.VSOdlGetLastByMacc(IdxMaccSel, 1);
|
||||
if (LastODL != null)
|
||||
{
|
||||
var recOdl = LastODL
|
||||
.Where(x => x.value > 0)
|
||||
.FirstOrDefault();
|
||||
if (recOdl != null)
|
||||
{
|
||||
var idxOdlLast = recOdl.value;
|
||||
await SetOdl(idxOdlLast);
|
||||
doSet = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
// controllo di nuovo se impostare priodo
|
||||
if (doSet)
|
||||
{
|
||||
DateTime fine = DateTime.Today.AddDays(1);
|
||||
DateTime inizio = fine.AddMonths(-1);
|
||||
CurrPeriodo = new Periodo(inizio, fine);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion Private Methods
|
||||
}
|
||||
}
|
||||
@@ -1,21 +1,21 @@
|
||||
|
||||
|
||||
<div class="col-12 mt-1">
|
||||
<div class="mt-1">
|
||||
<MachSel RecMSE="RecMSE" E_MachSel="SetMacc"></MachSel>
|
||||
</div>
|
||||
<div class="col-12 mt-3">
|
||||
<div class="mt-2">
|
||||
<div class="row">
|
||||
@if (enableMagPrint)
|
||||
{
|
||||
<div class="col-6 pe-1">
|
||||
<div class="col-6 pe-2">
|
||||
<PrintMag RecMSE="RecMSE"></PrintMag>
|
||||
</div>
|
||||
}
|
||||
@if (odlOk)
|
||||
{
|
||||
<div class="@ConfCssWidth ps-1">
|
||||
<button class="btn btn-lg @ConfBg py-2 px-2 text-nowrap text-truncate" style="width: 100%" @onclick="()=>ToggleConfProd()">
|
||||
<i class="fa-solid fa-check pe-1"></i><span>@ConfTitle</span>
|
||||
<div class="@ConfCssWidth">
|
||||
<button class="btn btn-lg @ConfBg py-2 px-2 text-nowrap text-truncate" style="width: 100%" @onclick="() => ToggleConfProd()">
|
||||
<span>@ConfTitle</span><i class="fa-solid @ConfTitleIcon ps-1"></i>
|
||||
</button>
|
||||
</div>
|
||||
}
|
||||
@@ -26,153 +26,273 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@if (confProdActive)
|
||||
@if (showConfirmResult)
|
||||
{
|
||||
<div class="cardBg p-2 mt-2">
|
||||
<div class="d-flex justify-content-between">
|
||||
<div class="border border-info border-2 rounded-3 my-2 p-2">
|
||||
<div class="row">
|
||||
<div class="col-6">
|
||||
<div class="p-1">
|
||||
<div class="ps-1 fw-bold" style="font-size: 1.3rem;">Pz Prodotti CONFERMATI</div>
|
||||
<div class="rounded">
|
||||
<input class="form-control border-0 fw-bold" style="font-size: 1.5rem; background-color: #fff3cd; color: #000" aria-label="Floating label select example" @bind="numPzProdotti2Rec" @onblur="() => setConfirmBtn(true)" @onfocus="() => setConfirmBtn(false)" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="p-1">
|
||||
@if (enablePzProdLasciati)
|
||||
<b>Conferma Produzione</b> effettuata alle @($"{lastConfProd:HH:mm:ss}")
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="d-flex justify-content-between lh-sm text-success">
|
||||
@if (lastPzBuoni > 0)
|
||||
{
|
||||
<div class="ps-1 fw-bold" style="font-size: 1.3rem;">Pz Prodotti LASCIATI</div>
|
||||
<div class="bg-secondary rounded">
|
||||
<input class="form-control text-light bg-secondary border-0" style="font-size: 1.5rem;" aria-label="Floating label select example" @bind="numPzLasciati" @onblur="() => setConfirmBtn(true)" @onfocus="() => setConfirmBtn(false)" />
|
||||
</div>
|
||||
<span>Pz Buoni</span>
|
||||
<span class="fw-bold">@lastPzBuoni</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<label class="btn btn-dark text-light btn-lg w-100" Visible="false"> </label>
|
||||
<span class="text-secondary">Pz Buoni</span>
|
||||
<span class="text-secondary">@lastPzBuoni</span>
|
||||
}
|
||||
</div>
|
||||
<div class="d-flex justify-content-between lh-sm text-danger">
|
||||
@if (lastPzScarto > 0)
|
||||
{
|
||||
<span>Pz scarto</span>
|
||||
<span>@lastPzScarto</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="text-secondary">Pz scarto</span>
|
||||
<span class="text-secondary">@lastPzScarto</span>
|
||||
}
|
||||
</div>
|
||||
<div class="d-flex justify-content-between lh-sm text-info">
|
||||
@if (lastPzRilav > 0)
|
||||
{
|
||||
<span>Cicli Rilav.</span>
|
||||
<span>@lastPzRilav</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="text-secondary">Cicli Rilav.</span>
|
||||
<span class="text-secondary">@lastPzRilav</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div style="display: flex; flex-direction: column; justify-content: space-between; height: 100%;">
|
||||
<div class="p-1" style="font-size: 1.5rem">
|
||||
<div class="d-flex justify-content-between">
|
||||
<span class="text-success">Pz Buoni</span>
|
||||
<span>@lblPz2RecBuoni</span>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
|
||||
@if (confProdActive)
|
||||
{
|
||||
<div class="cardBg bg-dark bg-gradient p-2 mt-2 border border-success border-2">
|
||||
<div class="d-flex justify-content-between">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<div class="col-12">
|
||||
<LoadingData Title="Processing Dati Conferma" DisplayMode="LoadingData.SpinMode.BounceLine" DisplaySize="LoadingData.CtrlSize.Large"></LoadingData>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="col-6">
|
||||
<div class="p-1">
|
||||
<div class="ps-1 fw-bold" style="font-size: 1.3rem;">Pz CONFERMATI <small>(prod. tot.)</small></div>
|
||||
<div class="rounded">
|
||||
<input class="form-control border-0 fw-bold" style="font-size: 1.5rem; background-color: #fff3cd; color: #000" aria-label="Floating label select example" @bind="numPzProdotti2Rec" @onblur="() => setConfirmBtn(true)" @onfocus="() => setConfirmBtn(false)" />
|
||||
</div>
|
||||
<div class="d-flex justify-content-between">
|
||||
<span class="text-danger">Pz scarto</span>
|
||||
<span>@lblPz2RecScarto</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center h-100 d-flex flex-column align-items-center flex-nowrap justify-content-end">
|
||||
@($"{dtReqUpdate:HH:mm:ss} | {dtReqUpdate:ddd yyyy.MM.dd}")
|
||||
</div>
|
||||
<div class="p-1">
|
||||
@if (showConfirm && lblPz2RecBuoni >= 0)
|
||||
@if (enablePzProdLasciati)
|
||||
{
|
||||
<button class="btn btn-success text-light btn-lg w-100 h-100" @onclick="SalvaConfPz"><i class="fa-regular fa-floppy-disk"></i></button>
|
||||
}
|
||||
else if (showConfirm && lblPz2RecBuoni < 0 && !chkPzBuoniNeg)
|
||||
{
|
||||
<button class="btn btn-success text-light btn-lg w-100 h-100" @onclick="SalvaConfPz"><i class="fa-regular fa-floppy-disk"></i></button>
|
||||
}
|
||||
else if (showConfirm && lblPz2RecBuoni < 0 && chkPzBuoniNeg)
|
||||
{
|
||||
<div class="btn btn-danger btn-lg text-light fw-bold text-center w-100 h-100">Pezzi buoni negativi!</div>
|
||||
<div class="ps-1 fw-bold" style="font-size: 1.3rem;">Pz LASCIATI <small>(prodotti)</small></div>
|
||||
<div class="bg-secondary rounded">
|
||||
<input class="form-control text-light bg-secondary border-0" style="font-size: 1.5rem;" aria-label="Floating label select example" @bind="numPzLasciati" @onblur="() => setConfirmBtn(true)" @onfocus="() => setConfirmBtn(false)" />
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<btn class="btn btn-info btn-lg w-100 h-100" disabled>Completare le modifiche!</btn>
|
||||
<label class="btn btn-dark text-light btn-lg w-100" Visible="false"> </label>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div style="display: flex; flex-direction: column; justify-content: space-between; height: 100%;">
|
||||
<div class="p-1" style="font-size: 1.4rem">
|
||||
<div class="d-flex justify-content-between lh-sm text-success">
|
||||
@if (lblPz2RecBuoni > 0)
|
||||
{
|
||||
<span>Pz Buoni</span>
|
||||
<span class="fw-bold">@lblPz2RecBuoni</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="text-secondary">Pz Buoni</span>
|
||||
<span class="text-secondary">@lblPz2RecBuoni</span>
|
||||
}
|
||||
</div>
|
||||
<div class="d-flex justify-content-between lh-sm text-danger">
|
||||
@if (lblPz2RecScarto > 0)
|
||||
{
|
||||
<span>Pz scarto</span>
|
||||
<span>@lblPz2RecScarto</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="text-secondary">Pz scarto</span>
|
||||
<span class="text-secondary">@lblPz2RecScarto</span>
|
||||
}
|
||||
</div>
|
||||
<div class="d-flex justify-content-between lh-sm text-info">
|
||||
@if (lblCicliRilavorati > 0)
|
||||
{
|
||||
<span>Cicli Rilav.</span>
|
||||
<span>@lblCicliRilavorati</span>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="text-secondary">Cicli Rilav.</span>
|
||||
<span class="text-secondary">@lblCicliRilavorati</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-center h-100 d-flex flex-column align-items-center flex-nowrap justify-content-end">
|
||||
@($"{dtReqUpdate:HH:mm:ss} | {dtReqUpdate:ddd yyyy.MM.dd}")
|
||||
</div>
|
||||
<div class="p-1">
|
||||
@if (showConfirm && lblPz2RecBuoni >= 0)
|
||||
{
|
||||
<button class="btn btn-success text-light btn-lg w-100 h-100" @onclick="SalvaConfPz"><i class="fa-regular fa-floppy-disk"></i></button>
|
||||
}
|
||||
else if (showConfirm && lblPz2RecBuoni < 0 && !chkPzBuoniNeg)
|
||||
{
|
||||
<button class="btn btn-success text-light btn-lg w-100 h-100" @onclick="SalvaConfPz"><i class="fa-regular fa-floppy-disk"></i></button>
|
||||
}
|
||||
else if (showConfirm && lblPz2RecBuoni < 0 && chkPzBuoniNeg)
|
||||
{
|
||||
<div class="btn btn-danger btn-lg text-light fw-bold text-center w-100 h-100">Pezzi buoni negativi!</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<btn class="btn btn-info btn-lg w-100 h-100" disabled>Completare le modifiche!</btn>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
}
|
||||
<div class="row textCondens mt-2 px-2">
|
||||
<div class="col-12 py-0 text-start text-uppercase lh-1 fw-bold">
|
||||
Dati Globali ODL
|
||||
</div>
|
||||
<div class="col-6 col-sm-3 p-1">
|
||||
<div class="text-center h-100 px-2 shadows" style=" background-color: #fff3cd; border-radius: .5rem;">
|
||||
<div class="text-truncate lh-sm pt-1">
|
||||
<span class="text-dark small">[A] NUOVI Pz.Prod</span>
|
||||
</div>
|
||||
<div class="text-dark d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-spinner span"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="fw-bold fs-2">@numPzProdotti2Rec</span>
|
||||
}
|
||||
|
||||
<div class="col-12">
|
||||
<div class="row textCondens mt-2 px-2">
|
||||
<div class="col-12 py-0 text-start text-uppercase lh-1 fw-bold">
|
||||
Dati Globali ODL
|
||||
</div>
|
||||
<div class="col-6 col-sm p-1">
|
||||
<div class="text-center text-light h-100 px-2 border border-light" style=" background-color: #363636; border-radius: .5rem;">
|
||||
<div class="text-truncate lh-sm pt-1">
|
||||
<span class="small">Cicli Prod <b>(ABCD)</b></span>
|
||||
</div>
|
||||
<div class="d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-circle-notch fa-spin fs-1 py-1"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="fw-bold fs-2">@numPzProdotti</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 col-sm-3 p-1">
|
||||
<div class="text-center h-100 px-2" style=" background-color: #cff4fc; border-radius: .5rem;">
|
||||
<div class="text-truncate lh-sm pt-1">
|
||||
<span class="text-dark small">Pz Prodotti TOT [A+B+C]</span>
|
||||
</div>
|
||||
<div class="text-dark d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-spinner span"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="fw-bold fs-2">@numPzProdotti</span>
|
||||
}
|
||||
<div class="col-6 col-sm p-1">
|
||||
<div class="text-center h-100 px-2 shadows" style=" background-color: #fff3cd; border-radius: .5rem;">
|
||||
<div class="text-truncate lh-sm pt-1">
|
||||
<span class="text-dark small"><b>[A]</b> Da Conf.</span>
|
||||
</div>
|
||||
<div class="text-dark d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-circle-notch fa-spin fs-1 py-1"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="fw-bold fs-2">@numPzProdotti2Rec</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 col-sm-3 p-1">
|
||||
<div class="text-center h-100 px-2" style=" background-color: #f8d7da; border-radius: .5rem;">
|
||||
<div class="text-truncate lh-sm pt-1">
|
||||
<span class="text-dark small">[B] Scarti VERS.</span>
|
||||
</div>
|
||||
<div class="text-dark d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-spinner span"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="fw-bold fs-2">@numPzScaConf</span>
|
||||
}
|
||||
<div class="col-6 col-sm p-1">
|
||||
<div class="text-center h-100 px-2" style=" background-color: #f8abcd; border-radius: .5rem;">
|
||||
<div class="text-truncate lh-sm pt-1">
|
||||
<span class="text-dark small"><b>[B]</b> Scarti Vers.</span>
|
||||
</div>
|
||||
<div class="text-dark d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-circle-notch fa-spin fs-1 py-1"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="fw-bold fs-2">@numPzScaConf</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-6 col-sm-3 p-1">
|
||||
<div class="text-center h-100 px-2" style=" background-color: #d1e7dd; border-radius: .5rem;">
|
||||
<div class="text-truncate lh-sm pt-1">
|
||||
<span class="text-dark small">[C] Pz Buoni VERS.</span>
|
||||
<div class="col-6 col-sm p-1">
|
||||
<div class="text-center h-100 px-2" style=" background-color: #cff4fc; border-radius: .5rem;">
|
||||
<div class="text-truncate lh-sm pt-1">
|
||||
<span class="text-dark small"><b>[C]</b> Rilav Vers.</span>
|
||||
</div>
|
||||
<div class="text-dark d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-circle-notch fa-spin fs-1 py-1"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="fw-bold fs-2">@numPzRilavConf</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
<div class="text-dark d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-spinner span"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="fw-bold fs-2">@numPzBuoniConf</span>
|
||||
}
|
||||
</div>
|
||||
<div class="col-6 col-sm p-1">
|
||||
<div class="text-center h-100 px-2" style=" background-color: #d1e7dd; border-radius: .5rem;">
|
||||
<div class="text-truncate lh-sm pt-1">
|
||||
<span class="text-dark small"><b>[D]</b> Buoni Vers.</span>
|
||||
</div>
|
||||
<div class="text-dark d-flex align-items-center text-center justify-content-center">
|
||||
@if (isProcessing)
|
||||
{
|
||||
<i class="fa-solid fa-circle-notch fa-spin fs-1 py-1"></i>
|
||||
}
|
||||
else
|
||||
{
|
||||
<span class="fw-bold fs-2">@numPzBuoniConf</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if (!confProdActive)
|
||||
{
|
||||
<div class="row textCondens mt-1 py-1">
|
||||
<div class="col-6 pe-1">
|
||||
<a class="btn btn-lg btn-info w-100 py-2 px-1 " style="min-width: 6rem;" href="scrap"><i class="fa fa-bug"></i> Reg. SCARTI</a>
|
||||
<div class="col-12">
|
||||
<div class="row textCondens mt-1 py-1">
|
||||
<div class="col-6 pe-1">
|
||||
<a class="btn btn-lg btn-primary w-100 py-2 px-1 " style="min-width: 6rem;" href="scrap"><i class="fa fa-bug pe-1"></i>SCARTI</a>
|
||||
</div>
|
||||
<div class=" col-6 ps-1">
|
||||
<a class="btn btn-lg btn-primary w-100 py-2 px-1" style="min-width: 6rem;" href="controls"><i class="fa fa-wrench pe-1"></i>CONTROLLI</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class=" col-6 ps-1">
|
||||
<a class="btn btn-lg btn-primary w-100 py-2 px-1" style="min-width: 6rem;" href="controls"><i class="fa fa-wrench"></i> Reg. CONTROLLI</a>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="col-12">
|
||||
<div class="row textCondens mt-1 py-1">
|
||||
<div class="col-6 pe-1">
|
||||
<a class="btn btn-lg btn-secondary w-100 py-2 px-1 disabled" style="min-width: 6rem;"><i class="fa fa-bug pe-1"></i> SCARTI</a>
|
||||
</div>
|
||||
<div class=" col-6 ps-1">
|
||||
<a class="btn btn-lg btn-secondary w-100 py-2 px-1 disabled" style="min-width: 6rem;"><i class="fa fa-wrench pe-1"></i> CONTROLLI</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
@@ -184,7 +304,9 @@
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
<ShowProcessing IsProcessing="@isProcessing"></ShowProcessing>
|
||||
|
||||
@if (!confProdActive)
|
||||
{
|
||||
<div style="font-size: 1.1rem;">
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using NLog;
|
||||
using NLog.Fluent;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class ProdConfirm
|
||||
public partial class ProdConfirm : IDisposable
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
@@ -29,10 +28,10 @@ namespace MP_TAB3.Components
|
||||
/// Post update restituisco nuova lista dati
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public EventCallback<List<MappaStatoExpl>> E_Updated { get; set; }
|
||||
public EventCallback<List<MappaStatoExplModel>> E_Updated { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE
|
||||
public MappaStatoExplModel? RecMSE
|
||||
{
|
||||
get => currRecMSE;
|
||||
set
|
||||
@@ -47,11 +46,22 @@ namespace MP_TAB3.Components
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Public Methods
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
datiProdAct = null;
|
||||
confTimer.Elapsed -= ConfTimer_Elapsed;
|
||||
confTimer.Close();
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected string ConfBg
|
||||
{
|
||||
get => confProdActive ? "bg-warning text-dark" : "bg-success text-light";
|
||||
get => confProdActive ? "bg-dark text-success border border-success" : "bg-success text-light";
|
||||
}
|
||||
|
||||
protected string ConfCssWidth
|
||||
@@ -64,13 +74,17 @@ namespace MP_TAB3.Components
|
||||
get => confProdActive ? "Nascondi conferma" : "Mostra conferma";
|
||||
}
|
||||
|
||||
protected string ConfTitleIcon
|
||||
{
|
||||
get => confProdActive ? "fa-chevron-up" : "fa-chevron-down";
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Dati produzione rilevati
|
||||
/// </summary>
|
||||
protected StatoProdModel? datiProdAct { get; set; } = null;
|
||||
|
||||
protected DateTime dtFine { get; set; } = DateTime.Today.AddMonths(-1);
|
||||
|
||||
protected DateTime dtInizio { get; set; } = DateTime.Today.AddMonths(-2);
|
||||
|
||||
/// <summary>
|
||||
@@ -101,6 +115,11 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
protected int lblCicliRilavorati
|
||||
{
|
||||
get => numPzRilav2Rec;
|
||||
}
|
||||
|
||||
protected int lblPz2RecBuoni
|
||||
{
|
||||
get => numPzConfermati - numPzLasciati;
|
||||
@@ -108,14 +127,13 @@ namespace MP_TAB3.Components
|
||||
|
||||
protected int lblPz2RecScarto
|
||||
{
|
||||
get => numPzScarto2Rec;
|
||||
get => numPzScarto2Rec - numPzRilav2Rec;
|
||||
}
|
||||
|
||||
[Inject]
|
||||
protected MessageService MsgServ { get; set; } = null!;
|
||||
|
||||
protected int numPz2Rec { get; set; } = 0;
|
||||
|
||||
protected int numPzBuoniConf { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
@@ -142,11 +160,10 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
|
||||
protected int numPzProdotti { get; set; } = 0;
|
||||
|
||||
protected int numPzProdotti2Rec { get; set; } = 0;
|
||||
|
||||
protected int numPzRilav2Rec { get; set; } = 0;
|
||||
protected int numPzRilavConf { get; set; } = 0;
|
||||
protected int numPzScaConf { get; set; } = 0;
|
||||
|
||||
protected int numPzScarto2Rec { get; set; } = 0;
|
||||
|
||||
/// <summary>
|
||||
@@ -156,29 +173,33 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
get
|
||||
{
|
||||
bool answ = (RecMSE != null && RecMSE.IdxOdl > 0);
|
||||
if (isMulti && (!answ && RecMSE != null && IdxMaccSel != RecMSE?.IdxMacchina))
|
||||
bool answ = false;
|
||||
if (RecMSE != null)
|
||||
{
|
||||
int idxOdlSel = 0;
|
||||
try
|
||||
answ = (RecMSE.IdxOdl > 0);
|
||||
if (isMulti && (RecMSE != null && IdxMaccSel != RecMSE?.IdxMacchina))
|
||||
{
|
||||
var pUpd = Task.Run(async () =>
|
||||
int idxOdlSel = 0;
|
||||
try
|
||||
{
|
||||
var tabOdlSel = await TabDServ.OdlCurrByMacc(IdxMaccSel, true);
|
||||
idxOdlSel = tabOdlSel.IdxOdl;
|
||||
});
|
||||
pUpd.Wait();
|
||||
answ = idxOdlSel > 0;
|
||||
var pUpd = Task.Run(async () =>
|
||||
{
|
||||
var tabOdlSel = await TabDServ.OdlCurrByMacc(IdxMaccSel, true);
|
||||
idxOdlSel = tabOdlSel.IdxOdl;
|
||||
});
|
||||
pUpd.Wait();
|
||||
answ = idxOdlSel > 0;
|
||||
}
|
||||
catch (Exception exc)
|
||||
{
|
||||
Log.Error($"Errore Durante recupero idxOdlSel {Environment.NewLine}{exc}");
|
||||
}
|
||||
}
|
||||
catch (Exception exc)
|
||||
else
|
||||
{
|
||||
Log.Error($"Errore Durante recupero idxOdlSel {Environment.NewLine}{exc}");
|
||||
answ = (RecMSE != null && RecMSE.IdxOdl > 0);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
answ = (RecMSE != null && RecMSE.IdxOdl > 0);
|
||||
}
|
||||
return answ;
|
||||
}
|
||||
}
|
||||
@@ -204,13 +225,15 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
isProcessing = true;
|
||||
await Task.Delay(1);
|
||||
datiProdAct = await TabDServ.StatoProdMacchina(IdxMaccSel, dtReqUpdate);
|
||||
datiProdAct = await TabDServ.StatoProdMacchinaAsync(IdxMaccSel, dtReqUpdate);
|
||||
// aggiorno visualizzazione...
|
||||
numPzProdotti = datiProdAct.PzTotODL;
|
||||
numPz2Rec = datiProdAct.Pz2RecTot;
|
||||
numPzScaConf = datiProdAct.PzConfScarto;
|
||||
numPzBuoniConf = datiProdAct.PzConfBuoni;
|
||||
numPzRilavConf = datiProdAct.PzConfRilav;
|
||||
numPzScaConf = datiProdAct.PzConfScarto - datiProdAct.PzConfRilav;
|
||||
numPzProdotti2Rec = datiProdAct.Pz2RecTot;
|
||||
numPzRilav2Rec = datiProdAct.Pz2RecRilav;
|
||||
numPzScarto2Rec = datiProdAct.Pz2RecScarto;
|
||||
dtInizio = RecMSE?.DataInizioOdl ?? DateTime.Today.AddMonths(-2);
|
||||
dtFine = dtReqUpdate;
|
||||
@@ -225,6 +248,11 @@ namespace MP_TAB3.Components
|
||||
confRett = SMServ.GetConfBool("confRett");
|
||||
enableMagPrint = SMServ.GetConfBool("enableMagPrint");
|
||||
modoConfProd = SMServ.GetConfInt("modoConfProd");
|
||||
tOutConfProd = SMServ.GetConfInt("TAB_TimeOutConfProd");
|
||||
// petto periodo a 100ms x controllare scadenze
|
||||
confTimer = new System.Timers.Timer(100);
|
||||
//confTimer = new System.Timers.Timer(tOutConfProd);
|
||||
confTimer.Elapsed += ConfTimer_Elapsed;
|
||||
}
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
@@ -237,21 +265,24 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
numPzLasciati = 0;
|
||||
}
|
||||
// verifico se la macchina sia configurata tra le MSFD...
|
||||
if (SMServ.DictMacchMulti.ContainsKey(RecMSE.IdxMacchina))
|
||||
if (!confDone)
|
||||
{
|
||||
isMulti = SMServ.DictMacchMulti[RecMSE.IdxMacchina] == 1;
|
||||
}
|
||||
IdxMaccSel = RecMSE.IdxMacchina;
|
||||
if (isMulti)
|
||||
{
|
||||
var idxMSel = MsgServ.UserPrefGet(IdxMaccSel);
|
||||
if (!string.IsNullOrEmpty(idxMSel))
|
||||
// verifico se la macchina sia configurata tra le MSFD...
|
||||
if (SMServ.DictMacchMulti.ContainsKey(RecMSE.IdxMacchina))
|
||||
{
|
||||
IdxMaccSel = idxMSel;
|
||||
isMulti = SMServ.DictMacchMulti[RecMSE.IdxMacchina] == 1;
|
||||
}
|
||||
IdxMaccSel = RecMSE.IdxMacchina;
|
||||
if (isMulti)
|
||||
{
|
||||
var idxMSel = MsgServ.UserPrefGet(IdxMaccSel);
|
||||
if (!string.IsNullOrEmpty(idxMSel))
|
||||
{
|
||||
IdxMaccSel = idxMSel;
|
||||
}
|
||||
}
|
||||
}
|
||||
//salvo lastRec...
|
||||
// salvo lastRec...
|
||||
lastRecMSE = RecMSE;
|
||||
dtReqUpdate = DateTime.Now.AddMilliseconds(100);
|
||||
await DoUpdate();
|
||||
@@ -261,9 +292,12 @@ namespace MP_TAB3.Components
|
||||
protected async Task SalvaConfPz()
|
||||
{
|
||||
isProcessing = true;
|
||||
await Task.Delay(10);
|
||||
// effettua conferma con conf da DB del tipo (giorni / turni / periodo
|
||||
bool fatto = effettuaConfermaProd();
|
||||
await TabDServ.FlushCache("StatoProd");
|
||||
await TabDServ.FlushCache("ODL");
|
||||
await TabDServ.FlushCache("ElConfProd");
|
||||
// refresh tabella dati tablet...
|
||||
await TabDServ.RicalcMse(IdxMaccSel, 0);
|
||||
// rileggo e salvo..
|
||||
@@ -277,6 +311,11 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
// mostro output
|
||||
lblOut = $"Confermata produzione {numPzConfermati - numPzLasciati} pezzi (+{numPzLasciati} pz lasciati, +{numPzScarto2Rec} pz scarto) |{dtReqUpdate:HH:mm:ss} | {dtReqUpdate:ddd yyyy.MM.dd}";
|
||||
// salvo ultimi valori conferma...
|
||||
lastPzBuoni = numPzConfermati - numPzLasciati;
|
||||
lastPzRilav = numPzRilav2Rec;
|
||||
lastPzScarto = numPzScarto2Rec;
|
||||
lastConfProd = DateTime.Now;
|
||||
// cambio button conferma...
|
||||
confProdActive = false;
|
||||
numPzLasciati = 0;
|
||||
@@ -284,8 +323,13 @@ namespace MP_TAB3.Components
|
||||
// azzero cache pezzi conf
|
||||
SDService.MachNumPzSet(IdxMaccSel, -1);
|
||||
await DoUpdate();
|
||||
await Task.Delay(1);
|
||||
await RefreshData();
|
||||
// imposto visualizzazione conferma effettuata
|
||||
showConfirmResult = true;
|
||||
// imposto timeout display + avvio timer x nascondere...
|
||||
scadConfPezzi = dtReqUpdate.AddMilliseconds(tOutConfProd);
|
||||
confTimer.Start();
|
||||
TabDServ.NotifyDataInvalidated(IdxMaccSel);
|
||||
isProcessing = false;
|
||||
}
|
||||
|
||||
@@ -326,24 +370,57 @@ namespace MP_TAB3.Components
|
||||
#region Private Fields
|
||||
|
||||
private static Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
private bool chkPzBuoniNeg = false;
|
||||
|
||||
private bool confDone = false;
|
||||
|
||||
private bool confRett = false;
|
||||
|
||||
/// <summary>
|
||||
/// Timer 3 sec x mostrare conferma
|
||||
/// </summary>
|
||||
private System.Timers.Timer confTimer = new System.Timers.Timer(3000);
|
||||
|
||||
private bool enableMagPrint = false;
|
||||
|
||||
private bool enablePzProdLasciati = false;
|
||||
|
||||
private bool isMulti = false;
|
||||
|
||||
private bool isSlave = false;
|
||||
|
||||
private DateTime lastConfProd = DateTime.Now;
|
||||
|
||||
private int lastPzBuoni = 0;
|
||||
|
||||
private int lastPzRilav = 0;
|
||||
|
||||
private int lastPzScarto = 0;
|
||||
|
||||
private string lblOut = "";
|
||||
|
||||
private int modoConfProd = 0;
|
||||
|
||||
private DateTime scadConfPezzi = DateTime.Today;
|
||||
private bool showConfirmResult = false;
|
||||
private int tOutConfProd = 2000;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private bool confProdActive { get; set; } = false;
|
||||
private MappaStatoExpl? currRecMSE { get; set; } = null;
|
||||
|
||||
private MappaStatoExplModel? currRecMSE { get; set; } = null;
|
||||
|
||||
private DateTime dtReqUpdate { get; set; } = DateTime.Now;
|
||||
|
||||
private string IdxMaccSel { get; set; } = "";
|
||||
|
||||
private bool isProcessing { get; set; } = false;
|
||||
private MappaStatoExpl? lastRecMSE { get; set; } = null;
|
||||
|
||||
private MappaStatoExplModel? lastRecMSE { get; set; } = null;
|
||||
|
||||
private int MatrOpr
|
||||
{
|
||||
@@ -358,6 +435,26 @@ namespace MP_TAB3.Components
|
||||
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
/// Timer visualizzazione esito conferma pezzi: deve nascondere...
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ConfTimer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
|
||||
{
|
||||
DateTime adesso = DateTime.Now;
|
||||
// controllo se sia ascaduto il periodo di display
|
||||
if (adesso > scadConfPezzi)
|
||||
{
|
||||
confTimer.Stop();
|
||||
showConfirmResult = false;
|
||||
// resetto
|
||||
lastPzBuoni = 0;
|
||||
lastPzRilav = 0;
|
||||
lastPzScarto = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Registra conferma produzione in modalita nuova (con rettifica pezzi lasciati) o legacy
|
||||
/// (con anticipo periodo)
|
||||
@@ -379,7 +476,7 @@ namespace MP_TAB3.Components
|
||||
|
||||
private async Task RefreshData()
|
||||
{
|
||||
List<MappaStatoExpl> ListMSE = await SDService.MseGetAll(true);
|
||||
List<MappaStatoExplModel> ListMSE = await SDService.MseGetAll(true);
|
||||
await MsgServ.SaveMse(ListMSE);
|
||||
await E_Updated.InvokeAsync(ListMSE);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,140 @@
|
||||
<dialog class="modal fade show" tabindex="-1" style="display:block; background-color: rgba(10,10,10,.6);" aria-modal="true" role="dialog">
|
||||
<div class="modal-dialog shadow shadow-lg">
|
||||
<div class="modal-content p-2">
|
||||
<div class="modal-title d-flex justify-content-between">
|
||||
<div class="px-0">
|
||||
<h3>Dettaglio KIT</h3>
|
||||
</div>
|
||||
<div class="px-0">
|
||||
<button class="btn btn-outline-dark" @onclick="() => ReqClose()"><i class="fa-solid fa-xmark"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-body px-1">
|
||||
@if (ListTK == null && ListPODL == null)
|
||||
{
|
||||
<LoadingData></LoadingData>
|
||||
}
|
||||
else if (numIstKit == 0)
|
||||
{
|
||||
<div class="alert alert-warning text-center display-4">
|
||||
Nessun record trovato
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ListPODL != null)
|
||||
{
|
||||
<div class="text-center">
|
||||
<h4>PODL KIT → Ordini</h4>
|
||||
</div>
|
||||
<table class="table table-sm table-striped">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><i class="fa-solid fa-key"></i> PODL</th>
|
||||
<th><i class="fa-solid fa-object-group"></i> Cod Ord</th>
|
||||
<th><i class="fa-solid fa-sitemap"></i> Cod Art</th>
|
||||
<th class="text-end"><i class="fa-solid fa-hashtag"></i> Qty</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@foreach (var record in ListPODL)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
<div>@record.IdxPromessa</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>@record.KeyRichiesta</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>@record.CodArticolo</div>
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<div>@record.NumPezzi</div>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
<div class="modal-footer d-flex justify-content-between px-0">
|
||||
@if (numTempKit == 0)
|
||||
{
|
||||
<div class="alert alert-warning text-center display-4">
|
||||
Nessun record trovato
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
<div class="text-center">
|
||||
<b>Template KIT</b>
|
||||
</div>
|
||||
<table class="table table-success table-sm opacity-75 table-striped small">
|
||||
<thead>
|
||||
<tr>
|
||||
<th><i class="fa-solid fa-sitemap"></i> Cod Kit (Parent)</th>
|
||||
<th><i class="fa-solid fa-file"></i> Articolo (Child)</th>
|
||||
<th class="text-end"><i class="fa-solid fa-hashtag"></i> Art/Kit Qty</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@if (ListTK == null)
|
||||
{
|
||||
<tr>
|
||||
<td colspan="3">
|
||||
<div class="alert alert-info fs-6">Nessun dato disponibile</div>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var record in ListTK)
|
||||
{
|
||||
<tr>
|
||||
<td>
|
||||
@record.CodArtParent
|
||||
</td>
|
||||
<td>
|
||||
@record.CodArtChild
|
||||
</td>
|
||||
<td class="text-end">
|
||||
<div>@record.Qty</div>
|
||||
</td>
|
||||
</tr>
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
</table>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</dialog>
|
||||
|
||||
@code {
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<bool> EC_Close { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public List<PODLExpModel>? ListPODL { get; set; } = null;
|
||||
|
||||
[Parameter]
|
||||
public List<TemplateKitModel>? ListTK { get; set; } = null;
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
numTempKit = ListTK != null ? ListTK.Count() : 0;
|
||||
numIstKit = ListPODL != null ? ListPODL.Count() : 0;
|
||||
}
|
||||
|
||||
protected async void ReqClose()
|
||||
{
|
||||
await EC_Close.InvokeAsync(true);
|
||||
}
|
||||
|
||||
private int numTempKit = 0;
|
||||
private int numIstKit = 0;
|
||||
}
|
||||
@@ -1,16 +1,20 @@
|
||||
|
||||
<div class="row mt-2">
|
||||
<div class="col-6">
|
||||
<div class="d-flex justify-content-between mt-2">
|
||||
<div class="px-2 flex-grow-1">
|
||||
<h4>Piano Produzione - PODL</h4>
|
||||
<MachSel RecMSE="RecMSE" E_MachSel="SetMacc"></MachSel>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<div class="px-2">
|
||||
<h4> </h4>
|
||||
<div class="form-check form-switch fs-6">
|
||||
<input class="form-check-input" type="checkbox" @bind="@OnlyDirect">
|
||||
<label class="form-check-label">Solo Assegnazione Diretta</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<ShowProcessing Message="Caricamento" IsProcessing="@isProcessing"></ShowProcessing>
|
||||
</div>
|
||||
@if (isProcessing)
|
||||
{
|
||||
<EgwCoreLib.Razor.LoadingData></EgwCoreLib.Razor.LoadingData>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
@@ -9,7 +9,13 @@ namespace MP_TAB3.Components
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
[Parameter]
|
||||
public string IdxMacchSub { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<string> E_MachSel { get; set; }
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
@@ -76,11 +82,12 @@ namespace MP_TAB3.Components
|
||||
protected async Task SetMacc(string selIdxMacc)
|
||||
{
|
||||
isProcessing = true;
|
||||
await Task.Delay(10);
|
||||
await Task.Delay(1);
|
||||
IdxMaccSel = selIdxMacc;
|
||||
await Task.Delay(1);
|
||||
await doUpdate();
|
||||
isProcessing = false;
|
||||
await Task.Delay(10);
|
||||
await E_MachSel.InvokeAsync(selIdxMacc);
|
||||
}
|
||||
|
||||
protected string TCMinSec(object _TC)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
{
|
||||
@@ -8,7 +8,7 @@ namespace MP_TAB3.Components
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
<div class="fs-6">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<button class="btn btn-lg bg-info w-100" @onclick="ToggleCtrl">
|
||||
<i class="fa-solid fa-bug"></i>
|
||||
|
||||
<span class="fw-bold" style="font-size: 1rem;">@Title</span>
|
||||
<button class="btn btn-lg @btnCss w-100" @onclick="ToggleCtrl">
|
||||
<i class="fa-solid fa-bug pe-1"></i>
|
||||
<span class="fs-4 fw-bold">@Title</span>
|
||||
<i class="fa @faCss ps-1"></i>
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
@@ -13,12 +13,17 @@ namespace MP_TAB3.Components
|
||||
public EventCallback<bool> E_Updated { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected string btnCss
|
||||
{
|
||||
get => ShowDetail ? "bt-dark border-primary border-2" : "btn-primary";
|
||||
}
|
||||
|
||||
protected DateTime DateSel
|
||||
{
|
||||
get => dateSel.Round(TimeSpan.FromSeconds(1));
|
||||
@@ -32,6 +37,12 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
|
||||
protected string errMsg { get; set; } = "";
|
||||
|
||||
protected string faCss
|
||||
{
|
||||
get => ShowDetail ? "fa-chevron-up" : "fa-chevron-down";
|
||||
}
|
||||
|
||||
protected List<vSelCauScartoModel> listCauScarto { get; set; } = new List<vSelCauScartoModel>();
|
||||
|
||||
[Inject]
|
||||
@@ -52,6 +63,9 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
[Inject]
|
||||
protected StatusData SDService { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected SharedMemService SMServ { get; set; } = null!;
|
||||
|
||||
@@ -105,6 +119,8 @@ namespace MP_TAB3.Components
|
||||
{
|
||||
// reset
|
||||
DoReset();
|
||||
// prima di tutto svuoto dati prod
|
||||
SDService.MachProdStRem(IdxMaccSel);
|
||||
errMsg = "";
|
||||
await E_Updated.InvokeAsync(true);
|
||||
await ReloadData();
|
||||
@@ -174,7 +190,7 @@ namespace MP_TAB3.Components
|
||||
|
||||
private int numPz { get; set; } = 1;
|
||||
|
||||
private bool ShowDetail { get; set; } = true;
|
||||
private bool ShowDetail { get; set; } = false;
|
||||
|
||||
private string userComment { get; set; } = "";
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.JSInterop;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using NLog;
|
||||
|
||||
|
||||
@@ -84,13 +84,13 @@
|
||||
<sub class="pe-1">×</sub>
|
||||
@if (item.KitSplit)
|
||||
{
|
||||
<button class="btn btn-info" @onclick="()=>ShowKitDetail(item)" title="KIT esploso" style="max-width: 2.5rem;display: flex;justify-content: center;min-height: 2.375rem;align-items: center;">
|
||||
<button class="btn btn-info" @onclick="() => ShowKitDetail(item)" title="KIT esploso" style="max-width: 2.5rem;display: flex;justify-content: center;min-height: 2.375rem;align-items: center;">
|
||||
<i class="fa-solid fa-box-open"></i>
|
||||
</button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="btn btn-secondary" @onclick="()=>ShowKitDetail(item)" title="KIT non esploso">
|
||||
<button class="btn btn-secondary" @onclick="() => ShowKitDetail(item)" title="KIT non esploso">
|
||||
<i class="fa-solid fa-box"></i>
|
||||
</button>
|
||||
}
|
||||
@@ -136,11 +136,15 @@
|
||||
}
|
||||
}
|
||||
</tbody>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<td>
|
||||
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
|
||||
</td>
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<EgwCoreLib.Razor.DataPager currPage="@PageNum" PageSize="@NumRecPage" totalCount="@TotalCount" numPageChanged="SavePage" numRecordChanged="SaveNumRec"></EgwCoreLib.Razor.DataPager>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,5 +1,5 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
using NLog;
|
||||
using static EgwCoreLib.Utils.DtUtils;
|
||||
@@ -14,7 +14,10 @@ namespace MP_TAB3.Components
|
||||
public EventCallback<string> E_MachSel { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public string IdxMacchSub { get; set; } = "";
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
@@ -115,7 +118,6 @@ namespace MP_TAB3.Components
|
||||
IdxMaccSel = selIdxMacc;
|
||||
await ReloadData();
|
||||
isProcessing = false;
|
||||
await Task.Delay(1);
|
||||
await E_MachSel.InvokeAsync(selIdxMacc);
|
||||
}
|
||||
|
||||
|
||||
@@ -54,14 +54,6 @@ namespace MP_TAB3.Components
|
||||
[Parameter]
|
||||
public timeControlMode modoControllo { get; set; } = timeControlMode.testo;
|
||||
|
||||
#if false
|
||||
/// <summary>
|
||||
/// modalit� controllo tempo
|
||||
/// </summary>
|
||||
[Parameter]
|
||||
public timeMode modoTempo { get; set; } = timeMode.MC;
|
||||
#endif
|
||||
|
||||
/// <summary>
|
||||
/// Valore tempo (centesimale)
|
||||
/// </summary>
|
||||
@@ -88,15 +80,12 @@ namespace MP_TAB3.Components
|
||||
[Inject]
|
||||
protected MessageService MsgServ { get; set; } = null!;
|
||||
|
||||
/// <summary>
|
||||
/// tempo selezionato in formato Minuti Secondi
|
||||
/// </summary>
|
||||
protected DateTime selTempoMS
|
||||
protected int selMin
|
||||
{
|
||||
get => DateTime.Today.Add(TempoMS);
|
||||
get => TempoMS.Minutes;
|
||||
set
|
||||
{
|
||||
TempoMS = value.Subtract(value.Date);
|
||||
TempoMS = new TimeSpan(selOre, value, selSec);
|
||||
E_TCRich.InvokeAsync(TempoMC);
|
||||
}
|
||||
}
|
||||
@@ -110,15 +99,7 @@ namespace MP_TAB3.Components
|
||||
E_TCRich.InvokeAsync(TempoMC);
|
||||
}
|
||||
}
|
||||
protected int selMin
|
||||
{
|
||||
get => TempoMS.Minutes;
|
||||
set
|
||||
{
|
||||
TempoMS = new TimeSpan(selOre,value, selSec);
|
||||
E_TCRich.InvokeAsync(TempoMC);
|
||||
}
|
||||
}
|
||||
|
||||
protected int selSec
|
||||
{
|
||||
get => TempoMS.Seconds;
|
||||
@@ -129,6 +110,19 @@ namespace MP_TAB3.Components
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// tempo selezionato in formato Minuti Secondi
|
||||
/// </summary>
|
||||
protected DateTime selTempoMS
|
||||
{
|
||||
get => DateTime.Today.Add(TempoMS);
|
||||
set
|
||||
{
|
||||
TempoMS = value.Subtract(value.Date);
|
||||
E_TCRich.InvokeAsync(TempoMC);
|
||||
}
|
||||
}
|
||||
|
||||
protected bool ShowMS { get; set; } = true;
|
||||
|
||||
[Inject]
|
||||
@@ -162,48 +156,6 @@ namespace MP_TAB3.Components
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
/// conversione da tempo minuti centesimali a minuti/secondi
|
||||
/// </summary>
|
||||
/// <param name="valore"></param>
|
||||
/// <returns></returns>
|
||||
protected TimeSpan minCent2Sec(decimal valore)
|
||||
{
|
||||
TimeSpan answ = TimeSpan.FromSeconds(Math.Round((double)(valore * 60)));
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// conversione da tempo minuti/secondi a minuti centesimali
|
||||
/// </summary>
|
||||
/// <param name="valore"></param>
|
||||
/// <returns></returns>
|
||||
protected decimal minSec2Cent(TimeSpan valore)
|
||||
{
|
||||
decimal answ = 0;
|
||||
decimal.TryParse($"{Math.Floor(valore.TotalMinutes) + (double)valore.Seconds / 60}", out answ);
|
||||
return answ;
|
||||
}
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
//baseLang = SMServ.GetConf("baseLang");
|
||||
}
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
showControls();
|
||||
}
|
||||
|
||||
protected string Traduci(string lemma)
|
||||
{
|
||||
return SMServ.Traduci($"{baseLang}_{lemma}".ToUpper());
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private string _baseLang { get; set; } = "IT";
|
||||
@@ -278,6 +230,48 @@ namespace MP_TAB3.Components
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
/// conversione da tempo minuti centesimali a minuti/secondi
|
||||
/// </summary>
|
||||
/// <param name="valore"></param>
|
||||
/// <returns></returns>
|
||||
protected TimeSpan minCent2Sec(decimal valore)
|
||||
{
|
||||
TimeSpan answ = TimeSpan.FromSeconds(Math.Round((double)(valore * 60)));
|
||||
return answ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// conversione da tempo minuti/secondi a minuti centesimali
|
||||
/// </summary>
|
||||
/// <param name="valore"></param>
|
||||
/// <returns></returns>
|
||||
protected decimal minSec2Cent(TimeSpan valore)
|
||||
{
|
||||
decimal answ = 0;
|
||||
decimal.TryParse($"{Math.Floor(valore.TotalMinutes) + (double)valore.Seconds / 60}", out answ);
|
||||
return answ;
|
||||
}
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
//baseLang = SMServ.GetConf("baseLang");
|
||||
}
|
||||
|
||||
protected override void OnParametersSet()
|
||||
{
|
||||
showControls();
|
||||
}
|
||||
|
||||
protected string Traduci(string lemma)
|
||||
{
|
||||
return SMServ.Traduci($"{baseLang}_{lemma}".ToUpper());
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
<div class="row">
|
||||
<div class="col-12 col-lg-6 col-xl-4 mb-2">
|
||||
<div class="row">
|
||||
<div class="col-8 col-md-9 pe-0">
|
||||
<div class="form-floating small">
|
||||
<input type="text" class="form-control" @bind="SearchVal">
|
||||
<label><i class="fa-solid fa-magnifying-glass"></i> Articolo (3+ char)</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-4 col-md-3 ps-0">
|
||||
<div class="form-floating small">
|
||||
<input type="number" class="form-control text-end" @bind="Num2Displ">
|
||||
<label># Displ</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-12 col-lg-6 col-xl-8 mb-2">
|
||||
<div class="form-floating">
|
||||
<select class="form-select form-select-sm" disabled="@ListArtDisabled" @bind="@CodArtSel">
|
||||
<option value="" selected>-- Nessuno --</option>
|
||||
@if (ListArticoli == null)
|
||||
{
|
||||
<option value="" disabled>No record found</option>
|
||||
}
|
||||
else
|
||||
{
|
||||
@foreach (var item in ListArticoli)
|
||||
{
|
||||
<option value="@item.Key">@item.Value</option>
|
||||
}
|
||||
}
|
||||
</select>
|
||||
<label for="floatingSelect">Selezione Articolo (@DisplayCount / <b>@TotalCount</b>)</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,140 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using MP.Data.Services;
|
||||
using NLog;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
{
|
||||
public partial class SelectCodArt
|
||||
{
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public EventCallback<string> E_CodArt { get; set; }
|
||||
|
||||
[Parameter]
|
||||
public int SearchMinChar { get; set; }
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
protected string CodArtSel
|
||||
{
|
||||
get => codArtSel;
|
||||
set
|
||||
{
|
||||
if (codArtSel != value)
|
||||
{
|
||||
codArtSel = value;
|
||||
E_CodArt.InvokeAsync(CodArtSel).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected int DisplayCount { get; set; } = 0;
|
||||
|
||||
protected bool ListArtDisabled { get => string.IsNullOrEmpty(SearchVal) || SearchVal.Length < SearchMinChar; }
|
||||
|
||||
protected Dictionary<string, string>? ListArticoli { get; set; } = null;
|
||||
|
||||
protected Dictionary<string, string> ListArticoliAll { get; set; } = new Dictionary<string, string>();
|
||||
|
||||
[Inject]
|
||||
protected ListSelectDataSrv MDataService { get; set; } = null!;
|
||||
|
||||
protected int Num2Displ
|
||||
{
|
||||
get => num2Displ;
|
||||
set
|
||||
{
|
||||
if (num2Displ != value)
|
||||
{
|
||||
num2Displ = value;
|
||||
FiltArticoli();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected string SearchVal
|
||||
{
|
||||
get => searchVal;
|
||||
set
|
||||
{
|
||||
if (searchVal != value)
|
||||
{
|
||||
searchVal = value;
|
||||
var pUpd = Task.Run(async () =>
|
||||
{
|
||||
await ReloadArticoli();
|
||||
});
|
||||
pUpd.Wait();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected int TotalCount { get; set; } = 0;
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected void FiltArticoli()
|
||||
{
|
||||
bool done = false;
|
||||
if (!ListArtDisabled)
|
||||
{
|
||||
if (ListArticoliAll != null)
|
||||
{
|
||||
TotalCount = ListArticoliAll.Count;
|
||||
ListArticoli = ListArticoliAll.Take(Num2Displ).ToDictionary(x => x.Key, x => x.Value);
|
||||
DisplayCount = ListArticoli.Count;
|
||||
done = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!done)
|
||||
{
|
||||
TotalCount = 0;
|
||||
ListArticoli = new Dictionary<string, string>();
|
||||
DisplayCount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task GetArticoli()
|
||||
{
|
||||
if (!ListArtDisabled)
|
||||
{
|
||||
Log.Debug("START GetArticoli");
|
||||
var rawData = await MDataService.ArticoliGetSearch(10000,"*", "*", searchVal);
|
||||
// trasformo!
|
||||
if (rawData != null)
|
||||
{
|
||||
ListArticoliAll = rawData.ToDictionary(x => x.CodArticolo, x => $"{x.CodArticolo} | {x.DescArticolo} | {x.Disegno}");
|
||||
}
|
||||
Log.Debug("END GetArticoli");
|
||||
}
|
||||
}
|
||||
|
||||
protected async Task ReloadArticoli()
|
||||
{
|
||||
await GetArticoli();
|
||||
FiltArticoli();
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Properties
|
||||
|
||||
private string codArtSel { get; set; } = "";
|
||||
private int num2Displ { get; set; } = 20;
|
||||
private string searchVal { get; set; } = "";
|
||||
|
||||
#endregion Private Properties
|
||||
}
|
||||
}
|
||||
@@ -28,7 +28,15 @@
|
||||
<div class="list-group">
|
||||
@foreach (var item in MenuItems)
|
||||
{
|
||||
<button class="p-2 list-group-item list-group-item-action @cssActive(item.NavigateUrl) link-underline link-underline-opacity-0 link-underline-opacity-75-hover" @onclick="() => SetPage(item.NavigateUrl)" data-bs-dismiss="offcanvas"><i class="fa fa-lg @item.icona pe-2"></i> @item.Testo</button>
|
||||
@* if (IsManual && item.ordine > 20) *@
|
||||
if (IsManual && item.Ordine > 40)
|
||||
{
|
||||
<button class="p-2 list-group-item list-group-item-action @cssActive(item.NavigateUrl) link-underline link-underline-opacity-0 link-underline-opacity-75-hover disabled" data-bs-dismiss="offcanvas"><i class="fa fa-lg @item.Icona pe-2"></i> @item.Testo</button>
|
||||
}
|
||||
else
|
||||
{
|
||||
<button class="p-2 list-group-item list-group-item-action @cssActive(item.NavigateUrl) link-underline link-underline-opacity-0 link-underline-opacity-75-hover" @onclick="() => SetPage(item.NavigateUrl)" data-bs-dismiss="offcanvas"><i class="fa fa-lg @item.Icona pe-2"></i> @item.Testo</button>
|
||||
}
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
@@ -51,6 +59,9 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="my-5">
|
||||
<a href="force-reset" type="button" class="btn btn-danger w-100" aria-label="Reset">Reset Cache</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
@@ -9,7 +9,7 @@ namespace MP_TAB3.Components
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public List<LinkMenu> MenuItems { get; set; } = new List<LinkMenu>();
|
||||
public List<LinkMenuModel> MenuItems { get; set; } = new List<LinkMenuModel>();
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
@@ -18,6 +18,9 @@ namespace MP_TAB3.Components
|
||||
[Inject]
|
||||
protected MessageService MsgServ { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected SharedMemService MStor { get; set; } = null!;
|
||||
|
||||
[Inject]
|
||||
protected NavigationManager navManager { get; set; } = null!;
|
||||
|
||||
@@ -30,6 +33,19 @@ namespace MP_TAB3.Components
|
||||
return navManager.Uri.Contains(currUri) ? "bg-dark text-light" : "";
|
||||
}
|
||||
|
||||
protected override async Task OnAfterRenderAsync(bool firstRender)
|
||||
{
|
||||
idxMaccSel = await MsgServ.IdxMaccGet();
|
||||
if (!string.IsNullOrEmpty(idxMaccSel) && MStor.DictMacchManual.ContainsKey(idxMaccSel))
|
||||
{
|
||||
IsManual = MStor.DictMacchManual[idxMaccSel];
|
||||
}
|
||||
else
|
||||
{
|
||||
IsManual = false;
|
||||
}
|
||||
}
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
var rawVers = typeof(Program).Assembly.GetName().Version;
|
||||
@@ -51,6 +67,8 @@ namespace MP_TAB3.Components
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private string idxMaccSel = "";
|
||||
private bool IsManual = false;
|
||||
private Version version = null!;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
@@ -137,7 +137,7 @@ namespace MP_TAB3.Components
|
||||
if (!ListArtDisabled)
|
||||
{
|
||||
Log.Debug("START GetArticoli");
|
||||
var rawData = await MDataService.ArticoliGetSearch(10000, "*", searchVal);
|
||||
var rawData = await MDataService.ArticoliGetSearch(10000,"*", "*", searchVal);
|
||||
// trasformo!
|
||||
if (rawData != null)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.JSInterop;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
@@ -10,7 +10,7 @@ namespace MP_TAB3.Components
|
||||
#region Public Properties
|
||||
|
||||
[Parameter]
|
||||
public MappaStatoExpl? RecMSE { get; set; } = null;
|
||||
public MappaStatoExplModel? RecMSE { get; set; } = null;
|
||||
|
||||
#endregion Public Properties
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace MP_TAB3.Components
|
||||
|
||||
private string IdxMaccSel { get; set; } = "";
|
||||
private int IdxOdl { get; set; } = 0;
|
||||
private MappaStatoExpl? lastRecMSE { get; set; } = null;
|
||||
private MappaStatoExplModel? lastRecMSE { get; set; } = null;
|
||||
|
||||
#endregion Private Properties
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ using MP_TAB3;
|
||||
using MP_TAB3.Shared;
|
||||
using MP_TAB3.Components;
|
||||
using MP.Data;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.DTO;
|
||||
using MP.Data.Services;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.Objects;
|
||||
using MP.Core.Objects;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using global::Microsoft.AspNetCore.Components;
|
||||
using Microsoft.JSInterop;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.Objects;
|
||||
using MP.Core.Objects;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data.Services;
|
||||
|
||||
namespace MP_TAB3.Components
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user