Compare commits
1081 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 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,94 @@
|
||||
# CI to Local Workflow Guide
|
||||
|
||||
This document describes how the GitLab CI pipeline in this repository translates to local commands that can be run on your machine. It also contains helper scripts and environment variables used by the CI.
|
||||
|
||||
## Environment Variables
|
||||
All variables listed below are interpolated in the CI templates. When running locally you can set them in a PowerShell profile or via `dotnet` arguments.
|
||||
|
||||
| Variable | Description | Typical value |
|
||||
|----------|--------------|---------------|
|
||||
| `SOL_NAME` | Solution name to restore | **MP-STATS.sln** |
|
||||
| `PROJ_PATH` | Directory containing the main project | **MP.Stats** |
|
||||
| `APP_NAME` | Main project file name (without `.csproj`) | **MP.Stats** |
|
||||
| `NUGET_PATH` | NuGet credential file | **`C:\\Users\\samuele.steamw\AppData\Roaming\NuGet\Credentials.config`** |
|
||||
| `NEXUS_PATH` | Nexus host URL | **https://nexus.steamware.net** |
|
||||
| `DEST` | Artifacts output folder | **bin\publish** |
|
||||
| `VERS_MAIN`, `VERS_MAIN_APP`, `VERSSUB` | Version strings used in packaging | **1.0.0** /
|
||||
| `NEXUS_PASSWD` | Nexus password (secure via CI secret) | *Secret* |
|
||||
|
||||
## Build Pipeline (`buildjob`) – Local Equivalent
|
||||
|
||||
The CI first restores NuGet packages and then builds the solution for the selected `APP_NAME`.
|
||||
|
||||
```powershell
|
||||
# 1. Restore
|
||||
#$env:SOL_NAME.sln is resolved by the .nuget-fix script
|
||||
# In PowerShell: dotnet restore "MP-STATS.sln"
|
||||
|
||||
# 2. Build
|
||||
# $env:APP_NAME/$env:APP_NAME.csproj points to the project file
|
||||
# In PowerShell: dotnet build "MP.Stats/MP.Stats.csproj"
|
||||
```
|
||||
|
||||
### Helper: `.nuget-fix`
|
||||
The `.nuget-fix` PowerShell script removes any stale NuGet sources that conflict with the Nexus proxy and re‑adds the latest proxy source with credentials. Ensure this script runs *before* `dotnet restore`.
|
||||
|
||||
## Deploy Pipeline (`deployjob`) – Local Equivalent
|
||||
|
||||
Deployment in CI rebuilds the project, publishes it, hashes the output, and uploads it to Nexus. The same steps can be executed locally.
|
||||
|
||||
```powershell
|
||||
# 1. Rebuild (same as Build)
|
||||
# dotnet build "MP.Stats/MP.Stats.csproj"
|
||||
|
||||
# 2. Publish to a local folder
|
||||
# The `dotnet publish` command mimics the CI publish step. The `-c Release` ensures a Release build.
|
||||
# In PowerShell:
|
||||
# dotnet publish "MP.Stats/MP.Stats.csproj" -c Release -o publish
|
||||
|
||||
# 3. Create hashes (MD5 & SHA1)
|
||||
# The .hashBuild template generates .md5 and .sha1 files alongside the ZIP. A simple replacement can be
|
||||
# 1. Zip the folder: `Compress-Archive -Path publish -DestinationPath $(APP_NAME).zip`
|
||||
# 2. Generate hashes:
|
||||
# (Get-FileHash -Algorithm MD5 "$(APP_NAME).zip").Hash | Out-File "$(APP_NAME).md5"
|
||||
# (Get-FileHash -Algorithm SHA1 "$(APP_NAME).zip").Hash | Out-File "$(APP_NAME).sha1"
|
||||
|
||||
# 4. Upload to Nexus (requires `curl`)
|
||||
# Example curl command (CI uses `nexus-curl` script):
|
||||
# $curl -u $(NUGET_USER):$(NEXUS_PASSWD) "$(NEXUS_PATH)/repository/$(APP_NAME)" -T "$(APP_NAME).zip"
|
||||
```
|
||||
|
||||
## Installer & Release
|
||||
The **installer** template copies the published artifacts to a staging folder and optionally creates installers. The **release** template bumps version numbers, updates the `nuspec`, generates a changelog, and pushes the packages to Nexus.
|
||||
|
||||
Generally these steps are CI‑only, but you can repeat the same `dotnet pack` / `nuget push` commands locally if needed.
|
||||
|
||||
## Common Issues & Fixes
|
||||
|
||||
* _NuGet authentication errors_: Run `.nuget-fix` to reset the sources.
|
||||
* _Missing SDK_: Verify `dotnet --list-sdks` includes at least one SDK.
|
||||
* _Hashes not matching_: Ensure the ZIP file is identical to the one CI produced (same path, no hidden files).
|
||||
|
||||
## Quick Start
|
||||
```powershell
|
||||
# Restore
|
||||
.\.nuget-fix
|
||||
|
||||
# Build
|
||||
|
||||
dotnet restore "MP-STATS.sln"
|
||||
dotnet build "MP.Stats/MP.Stats.csproj"
|
||||
|
||||
# Publish & run
|
||||
|
||||
dotnet publish "MP.Stats/MP.Stats.csproj" -c Release -o publish
|
||||
dotnet run --project "MP.Stats/MP.Stats.csproj"
|
||||
|
||||
# For hot‑reload during development
|
||||
|
||||
dotnet watch run --project "MP.Stats/MP.Stats.csproj"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
Feel free to adjust paths or environment variable names if your local setup differs.
|
||||
+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="10.0.7" />
|
||||
<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,32 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
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)
|
||||
{
|
||||
var lines = new List<string>();
|
||||
IEnumerable<PropertyDescriptor> props = TypeDescriptor.GetProperties(typeof(T)).OfType<PropertyDescriptor>();
|
||||
var header = string.Join(";", props.ToList().Select(x => x.Name));
|
||||
lines.Add(header);
|
||||
var valueLines = reportData.Select(row => string.Join(separator, header.Split(separator).Select(a => row.GetType().GetProperty(a).GetValue(row, null))));
|
||||
//var valueLines = reportData.Select(row => string.Join(";", header.Split(';').Select(a => row.GetType().GetProperty(a).GetValue(row, null))));
|
||||
lines.AddRange(valueLines);
|
||||
await Task.Run(() => File.WriteAllLines(path, lines.ToArray()));
|
||||
}
|
||||
}
|
||||
}
|
||||
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
|
||||
|
||||
+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
|
||||
|
||||
@@ -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
|
||||
|
||||
+28
-20
@@ -1,13 +1,24 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk.Web">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework>net8.0</TargetFramework>
|
||||
<Nullable>enable</Nullable>
|
||||
<Version>6.16.2409.408</Version>
|
||||
<Version>8.16.2604.2718</Version>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<RootNamespace>MP_TAB3</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="Controllers\**" />
|
||||
<Compile Remove="Data\**" />
|
||||
<Content Remove="Controllers\**" />
|
||||
<Content Remove="Data\**" />
|
||||
<EmbeddedResource Remove="Controllers\**" />
|
||||
<EmbeddedResource Remove="Data\**" />
|
||||
<None Remove="Controllers\**" />
|
||||
<None Remove="Data\**" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Compile Remove="Components\MseSampler.razor.cs" />
|
||||
</ItemGroup>
|
||||
@@ -25,29 +36,26 @@
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="EgwCoreLib.Razor" Version="1.5.2408.2710" />
|
||||
<PackageReference Include="EgwCoreLib.Utils" Version="1.5.2408.2710" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components" Version="6.0.33" />
|
||||
<PackageReference Include="NLog" Version="5.3.3" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="5.3.12" />
|
||||
<PackageReference Include="StackExchange.Redis" Version="2.8.0" />
|
||||
<PackageReference Include="System.Text.Encodings.Web" Version="6.0.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Controllers\" />
|
||||
<Folder Include="Data\" />
|
||||
<PackageReference Include="EgwCoreLib.Razor" />
|
||||
<PackageReference Include="EgwCoreLib.Utils" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Components" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Http.Connections.Common" />
|
||||
<PackageReference Include="NLog" />
|
||||
<PackageReference Include="NLog.Targets.OpenTelemetryProtocol" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" />
|
||||
<PackageReference Include="OpenTelemetry.Exporter.Console" />
|
||||
<PackageReference Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" />
|
||||
<PackageReference Include="OpenTelemetry.Extensions.Hosting" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.AspNetCore" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.SqlClient" />
|
||||
<PackageReference Include="OpenTelemetry.Instrumentation.StackExchangeRedis" />
|
||||
<PackageReference Include="StackExchange.Redis" />
|
||||
<PackageReference Include="System.Text.Encodings.Web" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Include="compilerconfig.json" />
|
||||
<None Include="Properties\PublishProfiles\IIS01.pubxml.user" />
|
||||
<None Include="wwwroot\css\fonts\lato-v17-latin-regular.svg" />
|
||||
<None Include="wwwroot\css\fonts\lato-v17-latin-regular.woff2" />
|
||||
<None Include="wwwroot\css\fonts\roboto-condensed-v19-latin-regular.svg" />
|
||||
<None Include="wwwroot\css\fonts\roboto-condensed-v19-latin-regular.woff2" />
|
||||
<None Include="wwwroot\css\fonts\roboto-v27-latin-regular.svg" />
|
||||
<None Include="wwwroot\css\fonts\roboto-v27-latin-regular.woff2" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using MP.Data.DatabaseModels;
|
||||
using MP.Data.DbModels;
|
||||
using MP.Data;
|
||||
using MP.Data.Services;
|
||||
using Newtonsoft.Json;
|
||||
using NLog.Fluent;
|
||||
using MP_TAB3.Components;
|
||||
|
||||
namespace MP_TAB3.Pages
|
||||
{
|
||||
@@ -17,12 +17,7 @@ namespace MP_TAB3.Pages
|
||||
/// <summary>
|
||||
/// Dato di dettaglio MSE per macchina
|
||||
/// </summary>
|
||||
public MappaStatoExpl? CurrMSE { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Macchina selezionata
|
||||
/// </summary>
|
||||
public string IdxMacc { get; set; } = "";
|
||||
public MappaStatoExplModel? CurrMSE { get; set; } = null;
|
||||
|
||||
[Inject]
|
||||
public MessageService MsgServ { get; set; } = null!;
|
||||
@@ -42,11 +37,33 @@ namespace MP_TAB3.Pages
|
||||
IdxMacc = "";
|
||||
CurrMSE = null;
|
||||
TDFeeder.dataPipe.EA_NewMessage -= DataPipe_EA_NewMessage;
|
||||
TDFeeder.blinkPipe.EA_NewMessage -= BlinkPipe_EA_NewMessage;
|
||||
}
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Protected Fields
|
||||
|
||||
/// <summary>
|
||||
/// IdxMacchinaSub (tavola)
|
||||
/// </summary>
|
||||
protected string IdxMaccSubSel = "";
|
||||
|
||||
#endregion Protected Fields
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
/// <summary>
|
||||
/// Macchina selezionata
|
||||
/// </summary>
|
||||
protected string IdxMacc { get; set; } = "";
|
||||
|
||||
protected bool IsManual { get; set; } = false;
|
||||
|
||||
[Inject]
|
||||
protected SharedMemService MStor { get; set; } = null!;
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
/// <summary>
|
||||
@@ -57,7 +74,6 @@ namespace MP_TAB3.Pages
|
||||
{
|
||||
await base.OnInitializedAsync();
|
||||
TDFeeder.dataPipe.EA_NewMessage += DataPipe_EA_NewMessage;
|
||||
TDFeeder.blinkPipe.EA_NewMessage += BlinkPipe_EA_NewMessage;
|
||||
}
|
||||
|
||||
protected override async Task OnParametersSetAsync()
|
||||
@@ -70,7 +86,7 @@ namespace MP_TAB3.Pages
|
||||
/// </summary>
|
||||
/// <param name="ListMSE"></param>
|
||||
/// <returns></returns>
|
||||
protected async Task RefreshData(List<MappaStatoExpl> ListMSE)
|
||||
protected async Task RefreshData(List<MappaStatoExplModel> ListMSE)
|
||||
{
|
||||
// se vecchio salvo sul browser...
|
||||
if (DateTime.Now.Subtract(lastSave).TotalSeconds > 5)
|
||||
@@ -117,8 +133,29 @@ namespace MP_TAB3.Pages
|
||||
{
|
||||
CurrMSE = await MsgServ.GetMachineMse(IdxMacc);
|
||||
}
|
||||
if (!string.IsNullOrEmpty(IdxMacc) && MStor.DictMacchManual.ContainsKey(IdxMacc))
|
||||
{
|
||||
IsManual = MStor.DictMacchManual[IdxMacc];
|
||||
}
|
||||
else
|
||||
{
|
||||
IsManual = false;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Selezione macchina SUB
|
||||
/// </summary>
|
||||
/// <param name="selIdxMacc"></param>
|
||||
protected void SetMacc(string selIdxMacc)
|
||||
{
|
||||
IdxMaccSubSel = selIdxMacc;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Variabile caricamento
|
||||
/// </summary>
|
||||
protected bool IsLoading = false;
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
@@ -134,34 +171,6 @@ namespace MP_TAB3.Pages
|
||||
|
||||
#region Private Methods
|
||||
|
||||
/// <summary>
|
||||
/// Ricezione evento blink
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void BlinkPipe_EA_NewMessage(object? sender, EventArgs e)
|
||||
{
|
||||
PubSubEventArgs currArgs = (PubSubEventArgs)e;
|
||||
// conversione on-the-fly List<string> --> allarmi
|
||||
if (!string.IsNullOrEmpty(currArgs.newMessage))
|
||||
{
|
||||
try
|
||||
{
|
||||
var dataRaw = JsonConvert.DeserializeObject<string>(currArgs.newMessage);
|
||||
if (dataRaw != null)
|
||||
{
|
||||
bool.TryParse($"{dataRaw}", out doBlink);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{ }
|
||||
InvokeAsync(() =>
|
||||
{
|
||||
StateHasChanged();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Ricevuto nuovi dati da mostrare!
|
||||
/// </summary>
|
||||
@@ -176,7 +185,7 @@ namespace MP_TAB3.Pages
|
||||
{
|
||||
try
|
||||
{
|
||||
List<MappaStatoExpl>? dataList = JsonConvert.DeserializeObject<List<MappaStatoExpl>>(currArgs.newMessage);
|
||||
List<MappaStatoExplModel>? dataList = JsonConvert.DeserializeObject<List<MappaStatoExplModel>>(currArgs.newMessage);
|
||||
if (dataList != null)
|
||||
{
|
||||
InvokeAsync(() => RefreshData(dataList));
|
||||
|
||||
@@ -2,22 +2,12 @@ namespace MP_TAB3.Pages
|
||||
{
|
||||
public partial class Controls
|
||||
{
|
||||
#region Public Methods
|
||||
|
||||
|
||||
#endregion Public Methods
|
||||
|
||||
#region Protected Properties
|
||||
|
||||
|
||||
#endregion Protected Properties
|
||||
|
||||
#region Protected Methods
|
||||
|
||||
protected async Task ForceReload()
|
||||
{
|
||||
IsLoading = true;
|
||||
await Task.Delay(50);
|
||||
await Task.Delay(5);
|
||||
IsLoading = false;
|
||||
}
|
||||
|
||||
@@ -27,25 +17,6 @@ namespace MP_TAB3.Pages
|
||||
await ReloadData();
|
||||
}
|
||||
|
||||
protected void SetMacc(string selIdxMacc)
|
||||
{
|
||||
IdxMaccSubSel = selIdxMacc;
|
||||
}
|
||||
|
||||
#endregion Protected Methods
|
||||
|
||||
#region Private Fields
|
||||
|
||||
private string IdxMaccSubSel = "";
|
||||
|
||||
private bool IsLoading = false;
|
||||
|
||||
#endregion Private Fields
|
||||
|
||||
#region Private Methods
|
||||
|
||||
|
||||
|
||||
#endregion Private Methods
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user