Compare commits
462 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| e7e32810d3 | |||
| 43ebea0eb9 | |||
| 99545e210a | |||
| afb912908c | |||
| ec9eb5e0db | |||
| c6ade34567 | |||
| afbb1b29cb | |||
| 7250dfd00d | |||
| 7b8e4e1b58 | |||
| 9fd74e6e82 | |||
| c21d0faad5 | |||
| 8e2bebbdf2 | |||
| 1ba9414b21 | |||
| 69998ac20e | |||
| 3251035b47 | |||
| 747b7dba50 | |||
| b95d3f461a | |||
| d6880e681f | |||
| 19b3543985 | |||
| 36ec472679 | |||
| e7a93a01cb | |||
| 80dd3f78e7 | |||
| 2f953aef74 | |||
| c367dec37e | |||
| e7147798d0 | |||
| 08b0f99620 | |||
| 532113a738 | |||
| 6674fe5429 | |||
| 79e5d4bd9d | |||
| bebaca6ef5 | |||
| 463eb23a67 | |||
| 314c18551e | |||
| 153ead851b | |||
| 3b7dab23bf | |||
| f0fcf5cafe | |||
| 5735efcdef | |||
| 13bc423cb4 | |||
| 935050d618 | |||
| 2943c4e01a | |||
| 077a9f3627 | |||
| eabc87104e | |||
| a017277711 | |||
| 9fa99793fa | |||
| e209835dce | |||
| 82a79256d4 | |||
| 9464cff197 | |||
| fb50fb26de | |||
| 19a01d258f | |||
| 7e65c8a406 | |||
| 7f957a8e05 | |||
| 17719cd668 | |||
| 822a46ab4a | |||
| 380533a4be | |||
| 51e8251953 | |||
| 6550d9cf93 | |||
| 25eb1e436f | |||
| d05465f9f3 | |||
| ef7e3552cd | |||
| fce26a59f8 | |||
| b5d7482c86 | |||
| db71237786 | |||
| da814bc858 | |||
| c67c40d81b | |||
| ea16fd59c9 | |||
| 01b7c2c7de | |||
| 91133789e7 | |||
| 7a4e50f2ad | |||
| 5c8adc9eb8 | |||
| 745c11d537 | |||
| b3c4022864 | |||
| dd36901d88 | |||
| 1f8418e724 | |||
| b3d08f012d | |||
| babbd01c52 | |||
| 23ad75e11d | |||
| a2199d4fc6 | |||
| 177504acf4 | |||
| 7c4c4432dc | |||
| 8af969a999 | |||
| 1ce1f58a4c | |||
| dfea26610d | |||
| a13563b603 | |||
| 93dea86d85 | |||
| bb358790ea | |||
| a0ab1ba5f6 | |||
| 07069ce151 | |||
| 8183de796c | |||
| 560c56353f | |||
| 652d1dee4a | |||
| d521c44646 | |||
| f3537821b1 | |||
| 4d79061eda | |||
| e621e0a74e | |||
| 9113d9f279 | |||
| 8359512015 | |||
| 1c735ea3ec | |||
| 1d43e05045 | |||
| 0ad786bc1c | |||
| 54257db9a4 | |||
| 339d3a4a85 | |||
| 5cb023e142 | |||
| 6ecbaa58ac | |||
| 857bbbcb53 | |||
| 2da9ad46ae | |||
| 9667ab1a82 | |||
| 0759cbd2f6 | |||
| 7fa3b47271 | |||
| ed74ccb839 | |||
| 38f2c73c14 | |||
| e3a5683029 | |||
| 1013463c3c | |||
| d9513297a7 | |||
| 4aac4ca825 | |||
| b3376e290e | |||
| 44a17bf44c | |||
| 828b34b487 | |||
| 891af9c1bb | |||
| 5092a6f360 | |||
| 2b4cad4234 | |||
| 6411d247b4 | |||
| 6f621a29df | |||
| 780c2f42eb | |||
| d3b2b9e329 | |||
| a8f1ff26be | |||
| f43647cd8d | |||
| 65e3b9bbbc | |||
| 8bf4afba99 | |||
| a84c50adb0 | |||
| 39363279d7 | |||
| 4db476b01f | |||
| cf2a7e8c26 | |||
| f953976c53 | |||
| 6f5f44de8e | |||
| c455a2347f | |||
| edca6ca957 | |||
| 0e7e0aaed0 | |||
| 8525d81201 | |||
| 12b85c2572 | |||
| 1cdefe6af8 | |||
| a6c743d8b6 | |||
| 59249c189a | |||
| c865420e95 | |||
| a9acd2ca69 | |||
| e416f5c3d4 | |||
| fabfeb7a08 | |||
| 1508a3dbbe | |||
| 82d9ceed85 | |||
| 22a7aa4477 | |||
| d9c59a05a5 | |||
| f4c7799859 | |||
| e8201e9099 | |||
| 879e515188 | |||
| fc3e4e7372 | |||
| 6c9e5f403f | |||
| 9a2b7fbefe | |||
| 301d597dff | |||
| aaf27bbea7 | |||
| 7521e64053 | |||
| 09fc6e601c | |||
| 46148de703 | |||
| c2d1d20730 | |||
| f28649c58a | |||
| 3acf0fd545 | |||
| 26a9feaf36 | |||
| ae81204ea6 | |||
| 6789b0403e | |||
| 653504843e | |||
| 2062754086 | |||
| 7087118de8 | |||
| d05768c7eb | |||
| 7fe2bb284b | |||
| 87f9e25692 | |||
| e7d821bb68 | |||
| 451275fbce | |||
| b024f32740 | |||
| 0dfdbb67a4 | |||
| 13e17a28ae | |||
| da7cfb9668 | |||
| 863cb3d3a9 | |||
| 0b21a06a45 | |||
| e4beba61e2 | |||
| 6d020b1201 | |||
| c7005ec513 | |||
| 593ebfce5e | |||
| 39a534b727 | |||
| 9a68a597ec | |||
| d4cf7eebd2 | |||
| 35eab707a4 | |||
| c1a427f3a9 | |||
| e2e6bc48a0 | |||
| c0b444d210 | |||
| 2b30e7e8bb | |||
| 0ff38c19a4 | |||
| ce4a42265e | |||
| acf43e8f43 | |||
| 9a111d2b8a | |||
| 0742741b91 | |||
| a66da619d8 | |||
| 412f538867 | |||
| 1f16e654ab | |||
| 46b940f9a5 | |||
| 0f9f5e0d9f | |||
| 52f1bd94ef | |||
| f3bfe84fe3 | |||
| 99f1936e87 | |||
| 29b8b2982d | |||
| 0723f607ab | |||
| 479f652514 | |||
| 9720ecf32e | |||
| 51ffd61a6c | |||
| 105e29f577 | |||
| 5ce82b0e19 | |||
| 3cfb050874 | |||
| f900437399 | |||
| 2707f9e023 | |||
| fb38958765 | |||
| bccbc9c079 | |||
| be16a428f7 | |||
| 54e707ff08 | |||
| d8388b2746 | |||
| ae21e4ba55 | |||
| 58359adc9b | |||
| 7f1a6ffc5f | |||
| f317c9fd23 | |||
| b62a5c4c13 | |||
| 4b41ed6dde | |||
| 366e6adc94 | |||
| e3fc22a553 | |||
| 2dc5d2758e | |||
| 92c83da129 | |||
| 4c21b97bc9 | |||
| 3c4b697292 | |||
| 9e75f7424f | |||
| d83bf57b0a | |||
| 29762cd69c | |||
| da13dbc417 | |||
| 328673f192 | |||
| 050e698eed | |||
| d6085b56ab | |||
| fee246f3fe | |||
| 3977b5398f | |||
| 0b04856907 | |||
| ddb9bf4347 | |||
| 4328747e3e | |||
| 7a3d9bb81c | |||
| 194208fd89 | |||
| 8d3166dbe9 | |||
| bdf4b6b8bd | |||
| 79e1d71ce4 | |||
| b45a91e194 | |||
| fccc1372ea | |||
| 24e3b63980 | |||
| bd51f368b1 | |||
| e405942d03 | |||
| 7ac353e8c6 | |||
| 2bd50a4bc6 | |||
| 19b4b8ccf0 | |||
| 266ee95b1b | |||
| f76c88d65d | |||
| 25c6ba7fd2 | |||
| 0c6c2ac78e | |||
| b0e6f410f6 | |||
| dec92ec530 | |||
| 7909d68b29 | |||
| 3eafecd756 | |||
| c7128e19a8 | |||
| d9d0ee9e28 | |||
| 3ba155eb99 | |||
| efc0f0ebb1 | |||
| db29fc6274 | |||
| fc66013385 | |||
| 33de4d3616 | |||
| f3143573be | |||
| c762b4e74b | |||
| e0d2323f5d | |||
| d039202670 | |||
| 4d58189581 | |||
| e455bb217e | |||
| 10dde714e2 | |||
| c031fe76ba | |||
| 82fc76b11f | |||
| 42b30e1941 | |||
| ed163d7af2 | |||
| e16135fbc8 | |||
| 110b473f60 | |||
| d6c32c34fd | |||
| a17a586ddb | |||
| d144d94a25 | |||
| fb9874bbf2 | |||
| 3c923ecf97 | |||
| a577ef73aa | |||
| 1a91e26889 | |||
| 45c2f9bb45 | |||
| 678c01a668 | |||
| 009dca4f75 | |||
| ac397783be | |||
| 8530434732 | |||
| a692e1edb4 | |||
| ab197081d3 | |||
| 29b9fcb3a9 | |||
| 1f2a89e6f0 | |||
| 9fe3f55843 | |||
| 1f792414ff | |||
| f1a1abd01c | |||
| 0be708298d | |||
| 30168c4b2f | |||
| 93fb00f578 | |||
| 14f0a59735 | |||
| 2fda59f6f0 | |||
| b0e1dcee8a | |||
| d8abf28daa | |||
| 2e40246d1f | |||
| 1e6efc742f | |||
| c1db6ca7af | |||
| 29765b910c | |||
| 742243a535 | |||
| 4b5c8b2252 | |||
| c80e6dbf48 | |||
| c071537424 | |||
| f91edeee5e | |||
| 190495b7db | |||
| 27f9277f6b | |||
| 7ef594326d | |||
| 53e69c0b78 | |||
| fe03d05930 | |||
| e6914a4844 | |||
| 0685c93139 | |||
| f91920790e | |||
| 2020eb6345 | |||
| e2028e0a4f | |||
| 60b054670d | |||
| 019d92c270 | |||
| e5bc914931 | |||
| ca7c964eb1 | |||
| d45bbf6584 | |||
| c736cbc801 | |||
| 946397bede | |||
| f1d4c26764 | |||
| 0e6faace39 | |||
| 12d1090540 | |||
| 869ec0ef1c | |||
| a59e256c98 | |||
| 67b8d15334 | |||
| bea6909bee | |||
| 60ecb70e38 | |||
| a154539950 | |||
| 3b3a02580e | |||
| 2a18895363 | |||
| 6cf54dc715 | |||
| 02f0150d09 | |||
| d4cfe83a9e | |||
| 23bf2f0b65 | |||
| ae68fe976d | |||
| 3f839c17f1 | |||
| 9d0c18c3b8 | |||
| 4c1d09942f | |||
| 32b5a94a51 | |||
| 17201d746f | |||
| 4cef12e37f | |||
| 0e1c22f96b | |||
| 3124f08474 | |||
| f8441f933f | |||
| e987a80d29 | |||
| c5d3ee3504 | |||
| 8c957edad8 | |||
| 84144b4beb | |||
| 151224bc56 | |||
| b2b3ed53e1 | |||
| 29112f8f48 | |||
| 320d2626fb | |||
| 00868a24c0 | |||
| db89b3d0d3 | |||
| a288ed6a5b | |||
| 9388ad6493 | |||
| ec58c870ea | |||
| 4916dd42ff | |||
| 4aa21de3b7 | |||
| 1b4c4d7cb8 | |||
| 10cecc4139 | |||
| 1cc55a6057 | |||
| 669b5b36f1 | |||
| 252f07cb29 | |||
| 07eacd022e | |||
| 72a880fb11 | |||
| 0d5e3b6698 | |||
| a205f4f77e | |||
| 40193db94f | |||
| 1d5e80df53 | |||
| 9f8ce27816 | |||
| 7b4b3294f0 | |||
| 85ea97634e | |||
| 72627f8128 | |||
| 912af1e60e | |||
| fd40a6906f | |||
| 2b97d85014 | |||
| 3081e8a908 | |||
| 0b58359db7 | |||
| d4f26def6f | |||
| 1ec15d956d | |||
| d2de5f4657 | |||
| 3b311a8ce1 | |||
| 95ed44155b | |||
| 8d9ddaa4a0 | |||
| b375148943 | |||
| 58f130e059 | |||
| 2310fa020a | |||
| 2c1bf139c9 | |||
| e3b9c6e0e7 | |||
| e73766589d | |||
| f59d4c9876 | |||
| b629b5ce1f | |||
| cb51e3f7fc | |||
| 5593ddc7fc | |||
| edaa834a9c | |||
| 490011bae5 | |||
| cc9e69efda | |||
| 7b72561b8f | |||
| 0d47f1ae7c | |||
| 35ba495030 | |||
| 274f0ed3ae | |||
| 0b3fb477dd | |||
| dc63e7677d | |||
| 66e8eae0f1 | |||
| 3964eddd45 | |||
| b1d69ba8f8 | |||
| 93ffb43953 | |||
| fc5c4f6abd | |||
| 36e3c59114 | |||
| d587ee3a45 | |||
| 99d64bdb60 | |||
| 0214ebec10 | |||
| e52d64bd08 | |||
| 349cce9462 | |||
| e5f0d7976a | |||
| 273fa4fc0c | |||
| 0813e3b2d2 | |||
| b55d30654f | |||
| ea228a9691 | |||
| a6f42b827e | |||
| 5b74509348 | |||
| 0404435ec3 | |||
| f5181dd4f3 | |||
| 870cf85e3f | |||
| 3ec1511aec | |||
| 9989c7767e | |||
| 7c5adc9012 | |||
| 0f61efdf58 | |||
| 3079068c62 | |||
| f70814d444 | |||
| afaa9a5516 | |||
| 8195f63702 | |||
| ac6695e7b0 | |||
| 2e05e8cac6 | |||
| 9e1946c636 | |||
| d560cf97d9 | |||
| 6a1e5ff3f3 | |||
| 5d656f2dce | |||
| 179d358604 | |||
| 26f64d1ecf | |||
| 8897c3cc3b | |||
| 2588ef155c | |||
| ae634079f9 |
+76
-15
@@ -11,8 +11,6 @@ variables:
|
|||||||
NUGET_PATH: 'C:\Tools\nuget.exe'
|
NUGET_PATH: 'C:\Tools\nuget.exe'
|
||||||
DEST: 'install'
|
DEST: 'install'
|
||||||
|
|
||||||
# nota: cer creazione rules: https://docs.gitlab.com/ee/ci/jobs/job_control.html#common-if-clauses-for-rules
|
|
||||||
|
|
||||||
# helper x fix pacchetti nuget da repo locale nexus.steamware.net
|
# helper x fix pacchetti nuget da repo locale nexus.steamware.net
|
||||||
.nuget-fix: &nuget-fix
|
.nuget-fix: &nuget-fix
|
||||||
- |
|
- |
|
||||||
@@ -47,19 +45,6 @@ variables:
|
|||||||
dotnet nuget list source
|
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
|
# helper creazione hash files x IIS
|
||||||
.hashBuild: &hashBuild
|
.hashBuild: &hashBuild
|
||||||
- |
|
- |
|
||||||
@@ -185,6 +170,44 @@ Lux.API:build:
|
|||||||
- echo $CI_COMMIT_BRANCH
|
- echo $CI_COMMIT_BRANCH
|
||||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||||
|
|
||||||
|
Lux.RepMan:build:
|
||||||
|
stage: build
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
|
variables:
|
||||||
|
APP_NAME: Lux.Report.Manager
|
||||||
|
SOL_NAME: Lux.Report
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == 'develop'
|
||||||
|
- if: $CI_COMMIT_BRANCH == 'main'
|
||||||
|
- if: $CI_COMMIT_BRANCH =~ /^feature\/Lux.API.+/
|
||||||
|
when: always
|
||||||
|
before_script:
|
||||||
|
- *nuget-fix
|
||||||
|
- dotnet restore "$env:SOL_NAME.sln"
|
||||||
|
script:
|
||||||
|
- echo $CI_COMMIT_BRANCH
|
||||||
|
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||||
|
|
||||||
|
Lux.RepSrv:build:
|
||||||
|
stage: build
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
|
variables:
|
||||||
|
APP_NAME: Lux.Report.Server
|
||||||
|
SOL_NAME: Lux.Report
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == 'develop'
|
||||||
|
- if: $CI_COMMIT_BRANCH == 'main'
|
||||||
|
- if: $CI_COMMIT_BRANCH =~ /^feature\/Lux.API.+/
|
||||||
|
when: always
|
||||||
|
before_script:
|
||||||
|
- *nuget-fix
|
||||||
|
- dotnet restore "$env:SOL_NAME.sln"
|
||||||
|
script:
|
||||||
|
- echo $CI_COMMIT_BRANCH
|
||||||
|
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
||||||
|
|
||||||
# --------------------------------
|
# --------------------------------
|
||||||
# DEPLOY develop (IIS01 + beta nuget)
|
# DEPLOY develop (IIS01 + beta nuget)
|
||||||
# --------------------------------
|
# --------------------------------
|
||||||
@@ -226,6 +249,44 @@ Lux.API:IIS01:deploy:
|
|||||||
- dotnet build $env:APP_NAME/$env:APP_NAME.csproj
|
- 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
|
- 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
|
||||||
|
|
||||||
|
Lux.RepMan:IIS01:deploy:
|
||||||
|
stage: deploy
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
|
variables:
|
||||||
|
APP_NAME: Lux.Report.Manager
|
||||||
|
SOL_NAME: Lux.Report
|
||||||
|
before_script:
|
||||||
|
- *nuget-fix
|
||||||
|
- dotnet restore "$env:SOL_NAME.sln"
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == 'develop'
|
||||||
|
- if: $CI_COMMIT_BRANCH =~ /^feature\/Lux.API.+/
|
||||||
|
when: always
|
||||||
|
needs: ["Lux.RepMan: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
|
||||||
|
|
||||||
|
Lux.RepSrv:IIS01:deploy:
|
||||||
|
stage: deploy
|
||||||
|
tags:
|
||||||
|
- win
|
||||||
|
variables:
|
||||||
|
APP_NAME: Lux.Report.Server
|
||||||
|
SOL_NAME: Lux.Report
|
||||||
|
before_script:
|
||||||
|
- *nuget-fix
|
||||||
|
- dotnet restore "$env:SOL_NAME.sln"
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == 'develop'
|
||||||
|
- if: $CI_COMMIT_BRANCH =~ /^feature\/Lux.API.+/
|
||||||
|
when: always
|
||||||
|
needs: ["Lux.RepSrv: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
|
||||||
|
|
||||||
EgwCoreLib.Lux.Core:SDK:deploy:
|
EgwCoreLib.Lux.Core:SDK:deploy:
|
||||||
stage: deploy
|
stage: deploy
|
||||||
tags:
|
tags:
|
||||||
|
|||||||
@@ -0,0 +1,81 @@
|
|||||||
|
# LUX - Agent Instructions
|
||||||
|
|
||||||
|
.NET 8 MES (Manufacturing Execution System) for window/door/casing production.
|
||||||
|
|
||||||
|
## Solutions & Projects
|
||||||
|
|
||||||
|
Two solutions:
|
||||||
|
|
||||||
|
**`Lux.All.sln`** - Main application (build this):
|
||||||
|
- `Lux.UI` - Blazor Server (identity-secured app), entry point
|
||||||
|
- `Lux.UI.Client` - Blazor WASM (shared client lib)
|
||||||
|
- `Lux.API` - REST API (JWD-to-SVG/Engine calls via Redis)
|
||||||
|
- `EgwCoreLib.Lux.Core` - Core domain/business library (NuGet package)
|
||||||
|
- `EgwCoreLib.Lux.Data` - EF Core data layer + migrations (NuGet package)
|
||||||
|
|
||||||
|
**`Lux.Report.sln`** - Reporting:
|
||||||
|
- `Lux.Report.Server` - Blazor Server report host
|
||||||
|
- `Lux.Report.Manager` - Blazor Server report manager
|
||||||
|
- `Lux.Report.Data` - Report domain + EF models
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
```
|
||||||
|
dotnet restore Lux.All.sln
|
||||||
|
dotnet build Lux.All.sln
|
||||||
|
dotnet run --project Lux.UI # run main app (development)
|
||||||
|
dotnet run --project Lux.API # run API
|
||||||
|
```
|
||||||
|
|
||||||
|
No test project exists. `TestDevExpress/` is a Blazor demo app, not unit tests.
|
||||||
|
|
||||||
|
Central package management: `Directory.Packages.props` controls all versions. Edit there, not in individual `.csproj` files.
|
||||||
|
|
||||||
|
## Architecture notes
|
||||||
|
|
||||||
|
- `Lux.UI` depends on both `EgwCoreLib.Lux.Core` and `EgwCoreLib.Lux.Data`
|
||||||
|
- `Lux.API` depends on Core + Data (no UI layer)
|
||||||
|
- `Lux.UI.Client` (WASM) shares `Components/` Blazor components with `Lux.UI`
|
||||||
|
- Data layer uses **both** SQL Server (Identità via `ApplicationDbContext`) e MySQL (Pomelo, via `DataLayerContext`)
|
||||||
|
- Redis is used for Engine communication channels and caching
|
||||||
|
- All projects use `<Nullable>enable</Nullable>` and `<ImplicitUsings>enable</ImplicitUsings>`
|
||||||
|
- `.pubxml` IIS publish profiles are version-controlled under `Properties/PublishProfiles/`
|
||||||
|
- Every project has a `post-build.ps1` that runs version stamping
|
||||||
|
|
||||||
|
## Migrations
|
||||||
|
|
||||||
|
- Identity migrations: `Lux.UI/Data/Migrations/` (SQL Server, `ApplicationDbContext`)
|
||||||
|
- Domain migrations: `EgwCoreLib.Lux.Data/Migrations/` (MySQL, `DataLayerContext`)
|
||||||
|
|
||||||
|
## CI/CD
|
||||||
|
|
||||||
|
GitLab CI in `.gitlab-ci.yml`. NuGet sources must be fixed before restore:
|
||||||
|
```
|
||||||
|
dotnet nuget remove source "Steamware Nexus Proxy"
|
||||||
|
dotnet nuget remove source "nexus-proxy-v3"
|
||||||
|
dotnet nuget remove source "nexus-hosted"
|
||||||
|
dotnet nuget add source https://nexus.steamware.net/repository/nuget-proxy-v3/index.json -n nexus-proxy-v3 -u nugetUser -p $NEXUS_PASSWD --store-password-in-clear-text
|
||||||
|
dotnet nuget add source https://nexus.steamware.net/repository/nuget-hosted/ -n nexus-hosted -u nugetUser -p $NEXUS_PASSWD --store-password-in-clear-text
|
||||||
|
```
|
||||||
|
|
||||||
|
## Frameworks
|
||||||
|
|
||||||
|
- Radzen.Blazor (UI components)
|
||||||
|
- DevExpress (Blazor reporting, used in Report projects + TestDevExpress)
|
||||||
|
- Newtonsoft.Json, Swashbuckle, NLog, OpenTelemetry (API + UX)
|
||||||
|
- Scrutor (DI extensions)
|
||||||
|
- **ZiggyCreatures.FusionCache** (L1 memory + L2 Redis caching, used in VocabolarioService)
|
||||||
|
|
||||||
|
## VocabolarioService (translation/i18n)
|
||||||
|
|
||||||
|
Located in `EgwCoreLib.Lux.Data\Services\Admin\`. Follows **Repository + Service** pattern:
|
||||||
|
- `VocabolarioRepository` (EF Core access via `IDbContextFactory`)
|
||||||
|
- `VocabolarioService` (Cache orchestration + domain logic)
|
||||||
|
- `VocabModel` / `LinguaModel` (EF Core entities, table: `admin_vocabolario`, `admin_lingua`)
|
||||||
|
|
||||||
|
**FusionCache** (`GetOrFetchAsync` helper): L1 Memory (1/3 of total duration) + L2 Redis (fail-safe). Tags
|
||||||
|
used for partial invalidation.
|
||||||
|
- `GetAll` e `GetById` usano 10 min expiration
|
||||||
|
- `GetByLang` e `ListLingue` usano 5 min expiration
|
||||||
|
- `Traduci()` usa 5 min L1 + 15 min fail-safe
|
||||||
|
- CRUD operations (Clone/Delete/Upsert/UpsertMany) invalidano la cache Fusion con `_cache.ClearAsync()`
|
||||||
+23
-12
@@ -8,11 +8,18 @@
|
|||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
</PackageVersion>
|
</PackageVersion>
|
||||||
<PackageVersion Include="Egw.Lux.WebWindow.Base" Version="3.1.3.916" />
|
<PackageVersion Include="DevExpress.AspNetCore.Reporting" Version="25.2.5" />
|
||||||
<PackageVersion Include="Egw.Lux.WebWindowComplex" Version="3.1.3.916" />
|
<PackageVersion Include="DevExpress.Blazor" Version="25.2.5" />
|
||||||
|
<PackageVersion Include="DevExpress.Blazor.Reporting.JSBasedControls" Version="25.2.5" />
|
||||||
|
<PackageVersion Include="DevExpress.Blazor.Reporting.Viewer" Version="25.2.5" />
|
||||||
|
<PackageVersion Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="8.0.23" />
|
||||||
|
<PackageVersion Include="Microsoft.CodeAnalysis" Version="5.3.0" />
|
||||||
|
<PackageVersion Include="Microsoft.Data.Sqlite" Version="10.0.5" />
|
||||||
|
<PackageVersion Include="Egw.Lux.WebWindow.Base" Version="3.1.8.1211" />
|
||||||
|
<PackageVersion Include="Egw.Lux.WebWindowComplex" Version="3.1.8.1211" />
|
||||||
<PackageVersion Include="Egw.Window.Data" Version="2.8.1.2611" />
|
<PackageVersion Include="Egw.Window.Data" Version="2.8.1.2611" />
|
||||||
<PackageVersion Include="EgwCoreLib.Razor" Version="1.5.2511.312" />
|
<PackageVersion Include="EgwCoreLib.Razor" Version="1.5.2606.2416" />
|
||||||
<PackageVersion Include="EgwCoreLib.Utils" Version="1.5.2511.312" />
|
<PackageVersion Include="EgwCoreLib.Utils" Version="1.5.2606.2416" />
|
||||||
<PackageVersion Include="EgwMultiEngineManager.Data" Version="3.1.1.2" />
|
<PackageVersion Include="EgwMultiEngineManager.Data" Version="3.1.1.2" />
|
||||||
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.23" />
|
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.23" />
|
||||||
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="8.0.23" />
|
<PackageVersion Include="Microsoft.AspNetCore.Components.WebAssembly.Authentication" Version="8.0.23" />
|
||||||
@@ -26,19 +33,20 @@
|
|||||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.23" />
|
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.23" />
|
||||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.23" />
|
<PackageVersion Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.23" />
|
||||||
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.23" />
|
<PackageVersion Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.23" />
|
||||||
|
<PackageVersion Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="8.0.27" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.12" />
|
<PackageVersion Include="Microsoft.Extensions.Configuration.Binder" Version="9.0.12" />
|
||||||
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.12" />
|
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="9.0.12" />
|
||||||
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
|
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
|
||||||
<PackageVersion Include="NLog" Version="6.0.7" />
|
<PackageVersion Include="NLog" Version="6.1.2" />
|
||||||
<PackageVersion Include="NLog.Targets.OpenTelemetryProtocol" Version="1.2.6" />
|
<PackageVersion Include="NLog.Targets.OpenTelemetryProtocol" Version="1.2.7" />
|
||||||
<PackageVersion Include="NLog.Web.AspNetCore" Version="6.1.0" />
|
<PackageVersion Include="NLog.Web.AspNetCore" Version="6.1.2" />
|
||||||
<PackageVersion Include="OpenTelemetry.Api" Version="1.15.0" />
|
<PackageVersion Include="OpenTelemetry.Api" Version="1.15.0" />
|
||||||
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.15.0" />
|
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.15.3" />
|
||||||
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.0" />
|
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.3" />
|
||||||
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.15.0" />
|
<PackageVersion Include="OpenTelemetry.Extensions.Hosting" Version="1.15.3" />
|
||||||
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.0" />
|
<PackageVersion Include="OpenTelemetry.Instrumentation.AspNetCore" Version="1.15.2" />
|
||||||
<PackageVersion Include="OpenTelemetry.Instrumentation.EntityFrameworkCore" Version="1.15.0-beta.1" />
|
<PackageVersion Include="OpenTelemetry.Instrumentation.EntityFrameworkCore" Version="1.15.0-beta.1" />
|
||||||
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.15.0" />
|
<PackageVersion Include="OpenTelemetry.Instrumentation.Http" Version="1.15.1" />
|
||||||
<PackageVersion Include="OpenTelemetry.Instrumentation.StackExchangeRedis" Version="1.15.0-beta.1" />
|
<PackageVersion Include="OpenTelemetry.Instrumentation.StackExchangeRedis" Version="1.15.0-beta.1" />
|
||||||
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.3" />
|
<PackageVersion Include="Pomelo.EntityFrameworkCore.MySql" Version="8.0.3" />
|
||||||
<PackageVersion Include="Radzen.Blazor" Version="8.6.5" />
|
<PackageVersion Include="Radzen.Blazor" Version="8.6.5" />
|
||||||
@@ -46,5 +54,8 @@
|
|||||||
<PackageVersion Include="Scrutor" Version="7.0.0" />
|
<PackageVersion Include="Scrutor" Version="7.0.0" />
|
||||||
<PackageVersion Include="StackExchange.Redis" Version="2.10.1" />
|
<PackageVersion Include="StackExchange.Redis" Version="2.10.1" />
|
||||||
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.6.2" />
|
<PackageVersion Include="Swashbuckle.AspNetCore" Version="6.6.2" />
|
||||||
|
<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>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
namespace EgwCoreLib.Lux.Core
|
||||||
|
{
|
||||||
|
public static class CloneExtensions
|
||||||
|
{
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clone profondo tramite serializzazione/deserializzazione di obj generici
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <param name="obj"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static T DeepClone<T>(this T obj)
|
||||||
|
{
|
||||||
|
// Configurazione serializzatore JSON per risolvere errore di loop circolare
|
||||||
|
var JSSettings = new JsonSerializerSettings()
|
||||||
|
{
|
||||||
|
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
|
||||||
|
};
|
||||||
|
var json = JsonConvert.SerializeObject(obj, JSSettings);
|
||||||
|
return JsonConvert.DeserializeObject<T>(json)!;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Comparatore statico tra entità
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T"></typeparam>
|
||||||
|
/// <param name="original"></param>
|
||||||
|
/// <param name="edited"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static bool IsChanged<T>(T original, T edited) => !EqualityComparer<T>.Default.Equals(original, edited);
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
//// <Auto-Generated>
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
//// <Auto-Generated>
|
|
||||||
//// This is here so CodeMaid doesn't reorganize this document
|
//// This is here so CodeMaid doesn't reorganize this document
|
||||||
//// </Auto-Generated>
|
//// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Core
|
namespace EgwCoreLib.Lux.Core
|
||||||
@@ -12,7 +6,7 @@ namespace EgwCoreLib.Lux.Core
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Configurazione costanti applicative
|
/// Configurazione costanti applicative
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class Constants
|
public class Const
|
||||||
{
|
{
|
||||||
|
|
||||||
// dati conf REDIS Cache
|
// dati conf REDIS Cache
|
||||||
@@ -1,12 +1,6 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core
|
|
||||||
{
|
{
|
||||||
public class DtUtils
|
public class DateTimeUtils
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Formattazione dataora fissa come HH:mm:ss
|
/// Formattazione dataora fissa come HH:mm:ss
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
namespace EgwCoreLib.Lux.Core.Dto
|
||||||
|
{
|
||||||
|
public class ParamConfigDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Nome parametro
|
||||||
|
/// </summary>
|
||||||
|
public string Name { get; set; } = "fix";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tipo parametro:
|
||||||
|
/// - fix (fisso)
|
||||||
|
/// - url (prende da URL QueryString)
|
||||||
|
/// </summary>
|
||||||
|
public string Type { get; set; } = "fix";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Per recuperare da ingresso (es URL)
|
||||||
|
/// </summary>
|
||||||
|
public string vIN { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Valore out (da passare come apram x report)
|
||||||
|
/// </summary>
|
||||||
|
public string vOUT { get; set; } = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,6 +24,8 @@
|
|||||||
<PackageReference Include="Egw.Lux.WebWindow.Base" />
|
<PackageReference Include="Egw.Lux.WebWindow.Base" />
|
||||||
<PackageReference Include="Egw.Lux.WebWindowComplex" />
|
<PackageReference Include="Egw.Lux.WebWindowComplex" />
|
||||||
<PackageReference Include="Egw.Window.Data" />
|
<PackageReference Include="Egw.Window.Data" />
|
||||||
|
<PackageReference Include="EgwCoreLib.Razor" />
|
||||||
|
<PackageReference Include="EgwCoreLib.Utils" />
|
||||||
<PackageReference Include="EgwMultiEngineManager.Data" />
|
<PackageReference Include="EgwMultiEngineManager.Data" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -4,6 +4,19 @@
|
|||||||
{
|
{
|
||||||
#region Public Enums
|
#region Public Enums
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Stato compilazione offerta
|
||||||
|
/// </summary>
|
||||||
|
public enum CompileStep
|
||||||
|
{
|
||||||
|
Draft = 0,
|
||||||
|
Header = 1,
|
||||||
|
General,
|
||||||
|
Rows,
|
||||||
|
Delivery,
|
||||||
|
FinalCheck
|
||||||
|
}
|
||||||
|
|
||||||
public enum DisplayMode
|
public enum DisplayMode
|
||||||
{
|
{
|
||||||
Standard,
|
Standard,
|
||||||
@@ -44,6 +57,27 @@
|
|||||||
JobCycle
|
JobCycle
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tipologia immagine
|
||||||
|
/// </summary>
|
||||||
|
public enum ImageType
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Non definita (da calcolare...)
|
||||||
|
/// </summary>
|
||||||
|
ND = 0,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Calcolata (es JWD, BTL)
|
||||||
|
/// </summary>
|
||||||
|
Calculated,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Fissa (tipicamente prodotto da rivendita/servizio)
|
||||||
|
/// </summary>
|
||||||
|
Fixed
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tipologia item (classe/natura articolo)
|
/// Tipologia item (classe/natura articolo)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -77,25 +111,6 @@
|
|||||||
BomAlt
|
BomAlt
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Tipologia immagine
|
|
||||||
/// </summary>
|
|
||||||
public enum ImageType
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Non definita (da calcolare...)
|
|
||||||
/// </summary>
|
|
||||||
ND = 0,
|
|
||||||
/// <summary>
|
|
||||||
/// Calcolata (es JWD, BTL)
|
|
||||||
/// </summary>
|
|
||||||
Calculated,
|
|
||||||
/// <summary>
|
|
||||||
/// Fissa (tipicamente prodotto da rivendita/servizio)
|
|
||||||
/// </summary>
|
|
||||||
Fixed
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tipologia item per Source (modalità costruzione)
|
/// Tipologia item per Source (modalità costruzione)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -147,6 +162,9 @@
|
|||||||
Lost
|
Lost
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Status ordini cliente
|
||||||
|
/// </summary>
|
||||||
public enum OrderStates
|
public enum OrderStates
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -195,6 +213,39 @@
|
|||||||
Closed
|
Closed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public enum BuyOrderStates
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Ordine acquisto creato da BOM di 1/+ ordini
|
||||||
|
/// </summary>
|
||||||
|
Created,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Richiesta quotazione fornitori
|
||||||
|
/// </summary>
|
||||||
|
Requested,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Assegnato a supplier (e inviato)
|
||||||
|
/// </summary>
|
||||||
|
Assigned,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Parzialmente ricevuto
|
||||||
|
/// </summary>
|
||||||
|
Partial,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Completato poiché ho ricevuto Merce (e DDT)
|
||||||
|
/// </summary>
|
||||||
|
Completed,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ordine chiuso (con fatturazione)
|
||||||
|
/// </summary>
|
||||||
|
Closed
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enum risultati verifica lavorabilità part (e tempo)
|
/// Enum risultati verifica lavorabilità part (e tempo)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -205,6 +256,34 @@
|
|||||||
MACHINABLE = 1,
|
MACHINABLE = 1,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tipo di code del Prod
|
||||||
|
/// </summary>
|
||||||
|
public enum ProdQueueType
|
||||||
|
{
|
||||||
|
waiting,
|
||||||
|
running,
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Modalità raggruppamento (giornalieri, orari...)
|
||||||
|
/// </summary>
|
||||||
|
public enum RuidGroupMode
|
||||||
|
{
|
||||||
|
Day,
|
||||||
|
Hour
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tipo di dati raggruppamento gestiti
|
||||||
|
/// </summary>
|
||||||
|
public enum RuidTagMode
|
||||||
|
{
|
||||||
|
Envir,
|
||||||
|
Mode
|
||||||
|
}
|
||||||
|
|
||||||
#endregion Public Enums
|
#endregion Public Enums
|
||||||
|
|
||||||
#if false
|
#if false
|
||||||
|
|||||||
@@ -1,11 +1,4 @@
|
|||||||
using NLog;
|
namespace EgwCoreLib.Lux.Core
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core
|
|
||||||
{
|
{
|
||||||
public class FileUtils
|
public class FileUtils
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
public string SearchVal { get; set; } = "";
|
public string SearchVal { get; set; } = "";
|
||||||
public string SelCodGroup { get; set; } = "";
|
public string SelCodGroup { get; set; } = "";
|
||||||
public EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS Envir { get; set; } = EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.NULL;
|
public EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS Envir { get; set; } = EgwMultiEngineManager.Data.Constants.EXECENVIRONMENTS.WINDOW;
|
||||||
public Enums.ItemClassType SelType { get; set; } = Enums.ItemClassType.ND;
|
public Enums.ItemClassType SelType { get; set; } = Enums.ItemClassType.ND;
|
||||||
public Enums.ItemSourceType SourceType { get; set; } = Enums.ItemSourceType.ND;
|
public Enums.ItemSourceType SourceType { get; set; } = Enums.ItemSourceType.ND;
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@
|
|||||||
{
|
{
|
||||||
#region Public Properties
|
#region Public Properties
|
||||||
|
|
||||||
|
public int GroupIdx { get; set; } = 0;
|
||||||
|
|
||||||
public int BarLenght { get; set; } = 10000;
|
public int BarLenght { get; set; } = 10000;
|
||||||
public Dictionary<string, double> MachineBalance { get; set; } = new Dictionary<string, double>();
|
public Dictionary<string, double> MachineBalance { get; set; } = new Dictionary<string, double>();
|
||||||
public List<string> TagList { get; set; } = new List<string>();
|
public List<string> TagList { get; set; } = new List<string>();
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
namespace EgwCoreLib.Lux.Core.Generic
|
||||||
|
{
|
||||||
|
public class EditStepDto
|
||||||
|
{
|
||||||
|
public Enums.CompileStep SrcStep { get; set; }
|
||||||
|
public bool Changed { get; set; } = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core.Generic
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.Generic
|
|
||||||
{
|
{
|
||||||
public class EventDto
|
public class EventDto
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core.Generic
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.Generic
|
|
||||||
{
|
{
|
||||||
public class GroupDetailDTO
|
public class GroupDetailDTO
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core.Generic
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.Generic
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Definizione di item raw x calcolo lavorazioni
|
/// Definizione di item raw x calcolo lavorazioni
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.Generic
|
namespace EgwCoreLib.Lux.Core.Generic
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core.Generic
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.Generic
|
|
||||||
{
|
{
|
||||||
public class TaskHistDTO
|
public class TaskHistDTO
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
global using Newtonsoft.Json;
|
||||||
|
global using NLog;
|
||||||
@@ -1,9 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Core.RestPayload;
|
using EgwCoreLib.Lux.Core.RestPayload;
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.MachineCalc
|
namespace EgwCoreLib.Lux.Core.MachineCalc
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Newtonsoft.Json;
|
namespace EgwCoreLib.Lux.Core
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Generico dizionario parametri con funzione ricerca valore (SE presente)
|
/// Generico dizionario parametri con funzione ricerca valore (SE presente)
|
||||||
@@ -77,6 +75,11 @@ namespace EgwCoreLib.Lux.Core
|
|||||||
|
|
||||||
#endregion Public Methods
|
#endregion Public Methods
|
||||||
|
|
||||||
|
public Dictionary<string, string> DictReadOnly
|
||||||
|
{
|
||||||
|
get => DictVals;
|
||||||
|
}
|
||||||
|
|
||||||
#region Private Properties
|
#region Private Properties
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -0,0 +1,60 @@
|
|||||||
|
public class ParamDictFlex<TValue>
|
||||||
|
{
|
||||||
|
private Dictionary<string, TValue> DictVals { get; set; } = new Dictionary<string, TValue>();
|
||||||
|
|
||||||
|
// Costruttore da stringa JSON (TValue è un tipo concreto serializzabile)
|
||||||
|
public ParamDictFlex(string rawVal)
|
||||||
|
{
|
||||||
|
if (string.IsNullOrWhiteSpace(rawVal))
|
||||||
|
{
|
||||||
|
DictVals = new Dictionary<string, TValue>();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
DictVals = JsonConvert.DeserializeObject<Dictionary<string, TValue>>(rawVal)
|
||||||
|
?? new Dictionary<string, TValue>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Costruttore da dizionario
|
||||||
|
public ParamDictFlex(Dictionary<string, TValue> newDict)
|
||||||
|
{
|
||||||
|
DictVals = newDict ?? new Dictionary<string, TValue>();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Versione serializzata del dizionario
|
||||||
|
public string Serialized
|
||||||
|
{
|
||||||
|
get => JsonConvert.SerializeObject(DictVals);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recupera valore; ritorna default(TValue) se la chiave non esiste
|
||||||
|
public TValue GetVal(string reqKey)
|
||||||
|
{
|
||||||
|
if (reqKey is null) throw new ArgumentNullException(nameof(reqKey));
|
||||||
|
return DictVals.TryGetValue(reqKey, out var val) ? val : default!;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Imposta valore (aggiunge o aggiorna)
|
||||||
|
public void SetVal(string key, TValue val)
|
||||||
|
{
|
||||||
|
if (key is null) throw new ArgumentNullException(nameof(key));
|
||||||
|
DictVals[key] = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rimuove chiave
|
||||||
|
public bool Remove(string key)
|
||||||
|
{
|
||||||
|
if (key is null) throw new ArgumentNullException(nameof(key));
|
||||||
|
return DictVals.Remove(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Controlla esistenza chiave
|
||||||
|
public bool ContainsKey(string key)
|
||||||
|
{
|
||||||
|
if (key is null) throw new ArgumentNullException(nameof(key));
|
||||||
|
return DictVals.ContainsKey(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Espone una copia di sola lettura del dizionario
|
||||||
|
public IReadOnlyDictionary<string, TValue> AsReadOnly() => new Dictionary<string, TValue>(DictVals);
|
||||||
|
}
|
||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core
|
|
||||||
{
|
{
|
||||||
public class PubSubEventArgs : EventArgs
|
public class PubSubEventArgs : EventArgs
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core.RestPayload
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.RestPayload
|
|
||||||
{
|
{
|
||||||
public class BomDTO
|
public class BomDTO
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.RestPayload
|
namespace EgwCoreLib.Lux.Core.RestPayload
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
using Newtonsoft.Json.Converters;
|
namespace EgwCoreLib.Lux.Core.RestPayload
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Text.Json.Serialization;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.RestPayload
|
|
||||||
{
|
{
|
||||||
public class CalcRequestDTO
|
public class CalcRequestDTO
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core.RestPayload
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.RestPayload
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Classe DTO x richieste di stima lavorazioni
|
/// Classe DTO x richieste di stima lavorazioni
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
// <Auto-Generated>
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Core.RestPayload
|
namespace EgwCoreLib.Lux.Core.RestPayload
|
||||||
|
|||||||
@@ -1,11 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core.RestPayload
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection.PortableExecutable;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.RestPayload
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Classe per deserializzazione risposta stima lavorabilità e tempi x macchina
|
/// Classe per deserializzazione risposta stima lavorabilità e tempi x macchina
|
||||||
@@ -19,6 +12,11 @@ namespace EgwCoreLib.Lux.Core.RestPayload
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string Name { get; set; } = "";
|
public string Name { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Tempo Totale
|
||||||
|
/// </summary>
|
||||||
|
public decimal Time { get; set; } = 0;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Numero di parts totali
|
/// Numero di parts totali
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core.RestPayload
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.RestPayload
|
|
||||||
{
|
{
|
||||||
public class NestingReqPayloadDTO
|
public class NestingReqPayloadDTO
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using System;
|
using static EgwCoreLib.Lux.Core.Enums;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using static EgwCoreLib.Lux.Core.Enums;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.RestPayload
|
namespace EgwCoreLib.Lux.Core.RestPayload
|
||||||
{
|
{
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
// <Auto-Generated>
|
// <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Cost
|
namespace EgwCoreLib.Lux.Core.RestPayload
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Dati di dettaglio per Tempi / Costi di uno step (
|
/// Dati di dettaglio per Tempi / Costi di uno step (
|
||||||
@@ -1,12 +1,4 @@
|
|||||||
using Newtonsoft.Json;
|
namespace EgwCoreLib.Lux.Core.RestPayload
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection.PortableExecutable;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.RestPayload
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Classe per definizione WorkLoad in dettaglio x un dato task (POR tipicamente)
|
/// Classe per definizione WorkLoad in dettaglio x un dato task (POR tipicamente)
|
||||||
@@ -27,12 +19,13 @@ namespace EgwCoreLib.Lux.Core.RestPayload
|
|||||||
machineCalcResults = JsonConvert.DeserializeObject<List<MachineCalcResultDTO>>(rawData) ?? new List<MachineCalcResultDTO>();
|
machineCalcResults = JsonConvert.DeserializeObject<List<MachineCalcResultDTO>>(rawData) ?? new List<MachineCalcResultDTO>();
|
||||||
if (!string.IsNullOrEmpty(rawData) && rawData.Count() > 2)
|
if (!string.IsNullOrEmpty(rawData) && rawData.Count() > 2)
|
||||||
{
|
{
|
||||||
// calcolo "esito sinteico" della lavorabilità (NESSUNA part UnHealthy su ogni macchina)
|
// calcolo "esito sinteitco" della lavorabilità (NESSUNA part UnHealthy su ogni macchina)
|
||||||
workable = machineCalcResults.Sum(x => x.NumPartsKo) == 0;
|
workable = machineCalcResults.Sum(x => x.NumPartsKo) == 0;
|
||||||
// lista completa...
|
// cerco la prima macchina (in caso multi macchina), da valutare se fosse suddiviso
|
||||||
var firstMachine = machineCalcResults.FirstOrDefault();
|
var firstMachine = machineCalcResults.FirstOrDefault();
|
||||||
if (firstMachine != null)
|
if (firstMachine != null)
|
||||||
{
|
{
|
||||||
|
// lista completa...
|
||||||
listComplete = firstMachine.PartList.Select(x => x.Tag).ToList();
|
listComplete = firstMachine.PartList.Select(x => x.Tag).ToList();
|
||||||
// pezzi lavorabili
|
// pezzi lavorabili
|
||||||
listWorkable = MachineCalc.Utils.IntersectTags(machineCalcResults, p => p.CalcResult == Enums.PartVerificationResult.MACHINABLE).ToList();
|
listWorkable = MachineCalc.Utils.IntersectTags(machineCalcResults, p => p.CalcResult == Enums.PartVerificationResult.MACHINABLE).ToList();
|
||||||
@@ -45,6 +38,7 @@ namespace EgwCoreLib.Lux.Core.RestPayload
|
|||||||
numKo = listUnWorkable.Count();
|
numKo = listUnWorkable.Count();
|
||||||
numOk = listWorkable.Count();
|
numOk = listWorkable.Count();
|
||||||
numOkVin = listVincolated.Count();
|
numOkVin = listVincolated.Count();
|
||||||
|
time = firstMachine.Time;
|
||||||
// se non ok verifico SE ci siano part unhealty su OGNI macchina (altrimenti è cmq lavorabile
|
// se non ok verifico SE ci siano part unhealty su OGNI macchina (altrimenti è cmq lavorabile
|
||||||
if (!workable)
|
if (!workable)
|
||||||
{
|
{
|
||||||
@@ -151,7 +145,23 @@ namespace EgwCoreLib.Lux.Core.RestPayload
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public decimal TotMaxTime
|
public decimal TotMaxTime
|
||||||
{
|
{
|
||||||
get => LoadDetail != null ? LoadDetail.Max(x => x.MaxTime) : 0;
|
get
|
||||||
|
{
|
||||||
|
decimal ans = 0;
|
||||||
|
// eventualmente decisione sul tipo di timing con una variabile esplicita (bool)?
|
||||||
|
if (time > 0)
|
||||||
|
{
|
||||||
|
ans = time;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (LoadDetail != null && LoadDetail.Count > 0)
|
||||||
|
ans = LoadDetail.Sum(x => x.MaxTime);
|
||||||
|
else
|
||||||
|
ans = 0;
|
||||||
|
}
|
||||||
|
return ans;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -185,6 +195,7 @@ namespace EgwCoreLib.Lux.Core.RestPayload
|
|||||||
private int numKo = 0;
|
private int numKo = 0;
|
||||||
private int numOk = 0;
|
private int numOk = 0;
|
||||||
private int numOkVin = 0;
|
private int numOkVin = 0;
|
||||||
|
private decimal time = 0;
|
||||||
private string uID = "";
|
private string uID = "";
|
||||||
private bool workable = false;
|
private bool workable = false;
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core.Stats
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.Stats
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Classe per trasferimento dati RT da redis
|
/// Classe per trasferimento dati RT da redis
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core.Stats
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.Stats
|
|
||||||
{
|
{
|
||||||
public class StatsRangeDto
|
public class StatsRangeDto
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Core.Stats
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Core.Stats
|
|
||||||
{
|
{
|
||||||
public class StatsRealtimeDto
|
public class StatsRealtimeDto
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.Data.DbModel.Admin;
|
namespace EgwCoreLib.Lux.Data
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data
|
|
||||||
{
|
{
|
||||||
public partial class AdminContext : DbContext
|
public partial class AdminContext : DbContext
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Core.Generic;
|
using EgwCoreLib.Lux.Core.Generic;
|
||||||
using EgwMultiEngineManager.Data;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.Controllers
|
namespace EgwCoreLib.Lux.Data.Controllers
|
||||||
{
|
{
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,15 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Config;
|
using EgwCoreLib.Lux.Data.DbModel.Admin;
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Cost;
|
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Items;
|
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Production;
|
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Sales;
|
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Stats;
|
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Stock;
|
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Task;
|
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Utils;
|
|
||||||
using Microsoft.EntityFrameworkCore;
|
|
||||||
using Microsoft.Extensions.Configuration;
|
|
||||||
using NLog;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data
|
namespace EgwCoreLib.Lux.Data
|
||||||
{
|
{
|
||||||
@@ -56,7 +45,14 @@ namespace EgwCoreLib.Lux.Data
|
|||||||
public virtual DbSet<TagsModel> DbSetTags { get; set; }
|
public virtual DbSet<TagsModel> DbSetTags { get; set; }
|
||||||
public virtual DbSet<CustomerModel> DbSetCustomer { get; set; }
|
public virtual DbSet<CustomerModel> DbSetCustomer { get; set; }
|
||||||
public virtual DbSet<DealerModel> DbSetDealer { get; set; }
|
public virtual DbSet<DealerModel> DbSetDealer { get; set; }
|
||||||
|
|
||||||
public virtual DbSet<SupplierModel> DbSetSupplier { get; set; }
|
public virtual DbSet<SupplierModel> DbSetSupplier { get; set; }
|
||||||
|
public virtual DbSet<SupplierQualifyModel> DbSetSupplierQualify { get; set; }
|
||||||
|
public virtual DbSet<BuyOrderModel> DbSetBuyOrder { get; set; }
|
||||||
|
public virtual DbSet<BuyOrderRowModel> DbSetBuyOrderRow { get; set; }
|
||||||
|
public virtual DbSet<MatReqModel> DbSetMaterialReq { get; set; }
|
||||||
|
public virtual DbSet<BuyOrderRow2MatReqModel> DbSetBuyOrdRow2MatReq { get; set; }
|
||||||
|
|
||||||
public virtual DbSet<OfferModel> DbSetOffer { get; set; }
|
public virtual DbSet<OfferModel> DbSetOffer { get; set; }
|
||||||
public virtual DbSet<OfferRowModel> DbSetOfferRow { get; set; }
|
public virtual DbSet<OfferRowModel> DbSetOfferRow { get; set; }
|
||||||
public virtual DbSet<OrderModel> DbSetOrder { get; set; }
|
public virtual DbSet<OrderModel> DbSetOrder { get; set; }
|
||||||
@@ -85,6 +81,9 @@ namespace EgwCoreLib.Lux.Data
|
|||||||
public virtual DbSet<TemplateModel> DbSetTemplate { get; set; }
|
public virtual DbSet<TemplateModel> DbSetTemplate { get; set; }
|
||||||
public virtual DbSet<TemplateRowModel> DbSetTemplateRow { get; set; }
|
public virtual DbSet<TemplateRowModel> DbSetTemplateRow { get; set; }
|
||||||
|
|
||||||
|
public virtual DbSet<LinguaModel> DbSetLingua { get; set; }
|
||||||
|
public virtual DbSet<VocabolarioModel> DbSetVocabolario { get; set; }
|
||||||
|
|
||||||
|
|
||||||
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
|
partial void OnModelCreatingPartial(ModelBuilder modelBuilder);
|
||||||
|
|
||||||
@@ -136,6 +135,13 @@ namespace EgwCoreLib.Lux.Data
|
|||||||
modelBuilder.Entity<JobStepTagModel>()
|
modelBuilder.Entity<JobStepTagModel>()
|
||||||
.HasKey(jst => new { jst.JobStepID, jst.CodTag });
|
.HasKey(jst => new { jst.JobStepID, jst.CodTag });
|
||||||
|
|
||||||
|
// area Buy
|
||||||
|
modelBuilder.Entity<SupplierQualifyModel>()
|
||||||
|
.HasKey(sq => new { sq.SupplierID, sq.CodGroup });
|
||||||
|
modelBuilder.Entity<BuyOrderRow2MatReqModel>()
|
||||||
|
.HasKey(bm => new { bm.BuyOrderRowID, bm.MatReqID });
|
||||||
|
|
||||||
|
|
||||||
modelBuilder.Entity<ProductionItem2ODLModel>()
|
modelBuilder.Entity<ProductionItem2ODLModel>()
|
||||||
.HasKey(x => new { x.ProdItemID, x.ProdODLID });
|
.HasKey(x => new { x.ProdItemID, x.ProdODLID });
|
||||||
|
|
||||||
@@ -151,6 +157,10 @@ namespace EgwCoreLib.Lux.Data
|
|||||||
.HasForeignKey(x => x.ProdODLID)
|
.HasForeignKey(x => x.ProdODLID)
|
||||||
.OnDelete(DeleteBehavior.Restrict);
|
.OnDelete(DeleteBehavior.Restrict);
|
||||||
|
|
||||||
|
|
||||||
|
modelBuilder.Entity<VocabolarioModel>()
|
||||||
|
.HasKey(jst => new { jst.Lingua, jst.Lemma });
|
||||||
|
|
||||||
// gestione dati DTX calcolati nel DB
|
// gestione dati DTX calcolati nel DB
|
||||||
#if false
|
#if false
|
||||||
modelBuilder.Entity<ProductionItemModel>()
|
modelBuilder.Entity<ProductionItemModel>()
|
||||||
|
|||||||
@@ -0,0 +1,128 @@
|
|||||||
|
using EgwCoreLib.Lux.Data.Repository.Admin;
|
||||||
|
using EgwCoreLib.Lux.Data.Repository.Report;
|
||||||
|
using EgwCoreLib.Lux.Data.Repository.Supplier;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Admin;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Catalog;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Config;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Cost;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.General;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Internal;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Items;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Job;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Production;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Report;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Sales;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Supplier;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Utils;
|
||||||
|
using EgwCoreLib.Lux.Data.Services.Warehouse;
|
||||||
|
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||||
|
|
||||||
|
namespace EgwCoreLib.Lux.Data
|
||||||
|
{
|
||||||
|
public static class DataServiceCollectionExtensions
|
||||||
|
{
|
||||||
|
public static IServiceCollection AddLuxData(this IServiceCollection services, string connectionString)
|
||||||
|
{
|
||||||
|
//// DbContextFactory: preferibile in Blazor Server e scenari concorrenti
|
||||||
|
//services.AddDbContextFactory<DataLayerContext>(options =>
|
||||||
|
// options.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)));
|
||||||
|
|
||||||
|
// servizi preliminari
|
||||||
|
//services.TryAddSingleton<IConnectionMultiplexer>(redisConn);
|
||||||
|
services.TryAddSingleton<IRedisService, RedisService>();
|
||||||
|
services.TryAddSingleton<IRedisSubscriptionManager, RedisSubscriptionManager>();
|
||||||
|
services.TryAddSingleton<IVocabolarioRepository, VocabolarioRepository>();
|
||||||
|
|
||||||
|
// Repository Scoped
|
||||||
|
services.TryAddScoped<IBuyOrderRepository, BuyOrderRepository>();
|
||||||
|
services.TryAddScoped<IConfGlassRepository, ConfGlassRepository>();
|
||||||
|
services.TryAddScoped<IConfProfileRepository, ConfProfileRepository>();
|
||||||
|
services.TryAddScoped<IConfWoodRepository, ConfWoodRepository>();
|
||||||
|
services.TryAddScoped<ICostDriverRepository, CostDriverRepository>();
|
||||||
|
services.TryAddScoped<ICustomerRepository, CustomerRepository>();
|
||||||
|
services.TryAddScoped<IDealerRepository, DealerRepository>();
|
||||||
|
services.TryAddScoped<IEnvirParamRepository, EnvirParamRepository>();
|
||||||
|
services.TryAddScoped<IGenClassRepository, GenClassRepository>();
|
||||||
|
services.TryAddScoped<IGenValRepository, GenValRepository>();
|
||||||
|
services.TryAddScoped<IItemGroupRepository, ItemGroupRepository>();
|
||||||
|
services.TryAddScoped<IItemRepository, ItemRepository>();
|
||||||
|
services.TryAddScoped<IJobStepRepository, JobStepRepository>();
|
||||||
|
services.TryAddScoped<IJobTaskRepository, JobTaskRepository>();
|
||||||
|
services.TryAddScoped<IMatReqRepository, MatReqRepository>();
|
||||||
|
services.TryAddScoped<IOfferRepository, OfferRepository>();
|
||||||
|
services.TryAddScoped<IOfferRowRepository, OfferRowRepository>();
|
||||||
|
services.TryAddScoped<IOrderRepository, OrderRepository>();
|
||||||
|
services.TryAddScoped<IOrderRowRepository, OrderRowRepository>();
|
||||||
|
services.TryAddScoped<IPhaseRepository, PhaseRepository>();
|
||||||
|
services.TryAddScoped<IProductionBatchRepository, ProductionBatchRepository>();
|
||||||
|
services.TryAddScoped<IProductionGroupRepository, ProductionGroupRepository>();
|
||||||
|
services.TryAddScoped<IProductionItemRepository, ProductionItemRepository>();
|
||||||
|
services.TryAddScoped<IProductionOdlRepository, ProductionOdlRepository>();
|
||||||
|
services.TryAddScoped<IProductionPlantRepository, ProductionPlantRepository>();
|
||||||
|
services.TryAddScoped<IResourceRepository, ResourceRepository>();
|
||||||
|
services.TryAddScoped<IReportRepository, ReportRepository>();
|
||||||
|
services.TryAddScoped<ISellingItemRepository, SellingItemRepository>();
|
||||||
|
services.TryAddScoped<IStatsAggrRepository, StatsAggrRepository>();
|
||||||
|
services.TryAddScoped<IStatsDetailRepository, StatsDetailRepository>();
|
||||||
|
services.TryAddScoped<ITagRepository, TagRepository>();
|
||||||
|
services.TryAddScoped<ITemplateRepository, TemplateRepository>();
|
||||||
|
services.TryAddScoped<ITemplateRowRepository, TemplateRowRepository>();
|
||||||
|
|
||||||
|
// Servizi Scoped
|
||||||
|
services.TryAddScoped<IBuyOrderService, BuyOrderService>();
|
||||||
|
services.TryAddScoped<IConfGlassService, ConfGlassService>();
|
||||||
|
services.TryAddScoped<IConfProfileService, ConfProfileService>();
|
||||||
|
services.TryAddScoped<IConfWoodService, ConfWoodService>();
|
||||||
|
services.TryAddScoped<ICostDriverService, CostDriverService>();
|
||||||
|
services.TryAddScoped<ICustomerService, CustomerService>();
|
||||||
|
services.TryAddScoped<IDealerService, DealerService>();
|
||||||
|
services.TryAddScoped<IEnvirParamService, EnvirParamService>();
|
||||||
|
services.TryAddScoped<IGenClassService, GenClassService>();
|
||||||
|
services.TryAddScoped<IGenValService, GenValService>();
|
||||||
|
services.TryAddScoped<IItemService, ItemService>();
|
||||||
|
services.TryAddScoped<IItemGroupService, ItemGroupService>();
|
||||||
|
services.TryAddScoped<IJobStepService, JobStepService>();
|
||||||
|
services.TryAddScoped<IJobTaskService, JobTaskService>();
|
||||||
|
services.TryAddScoped<IMatReqService, MatReqService>();
|
||||||
|
services.TryAddScoped<IOfferService, OfferService>();
|
||||||
|
services.TryAddScoped<IOfferRowService, OfferRowService>();
|
||||||
|
services.TryAddScoped<IOrderService, OrderService>();
|
||||||
|
services.TryAddScoped<IOrderRowService, OrderRowService>();
|
||||||
|
services.TryAddScoped<IPhaseService, PhaseService>();
|
||||||
|
services.TryAddScoped<IProductionGroupService, ProductionGroupService>();
|
||||||
|
services.TryAddScoped<IProductionItemService, ProductionItemService>();
|
||||||
|
services.TryAddScoped<IProductionBatchService, ProductionBatchService>();
|
||||||
|
services.TryAddScoped<IProductionOdlService, ProductionOdlService>();
|
||||||
|
services.TryAddScoped<IProductionPlantService, ProductionPlantService>();
|
||||||
|
services.TryAddScoped<IResourceService, ResourceService>();
|
||||||
|
services.TryAddScoped<IReportService, ReportService>();
|
||||||
|
services.TryAddScoped<ISellingItemService, SellingItemService>();
|
||||||
|
services.TryAddScoped<IStatsAggrService, StatsAggrService>();
|
||||||
|
services.TryAddScoped<IStatsDetailService, StatsDetailService>();
|
||||||
|
services.TryAddScoped<ITagService, TagService>();
|
||||||
|
services.TryAddScoped<ITemplateService, TemplateService>();
|
||||||
|
services.TryAddScoped<ITemplateRowService, TemplateRowService>();
|
||||||
|
|
||||||
|
// scoped user services
|
||||||
|
services.TryAddScoped<IMessageService, MessageService>();
|
||||||
|
|
||||||
|
// Facade / DataLayerService
|
||||||
|
services.TryAddScoped<IDataLayerServices, DataLayerServices>();
|
||||||
|
services.TryAddScoped<ICalcRuidService, CalcRuidService>();
|
||||||
|
//builder.Services.AddSingleton<DataLayerServices>();
|
||||||
|
//services.TryAddScoped<IDataLayerServices, DataLayerServices>();
|
||||||
|
|
||||||
|
// aggiunta servizi finali Singleton...
|
||||||
|
services.TryAddSingleton<IImageCacheService, ImageCacheService>();
|
||||||
|
services.TryAddSingleton<IConfigDataService, ConfigDataService>();
|
||||||
|
services.TryAddSingleton<ICalcRequestService, CalcRequestService>();
|
||||||
|
services.TryAddSingleton<IFileService, FileService>();
|
||||||
|
services.TryAddSingleton<IProdService, ProdService>();
|
||||||
|
services.TryAddSingleton<IVocabolarioService, VocabolarioService>();
|
||||||
|
//services.TryAddSingleton<CalcRequestService>();
|
||||||
|
|
||||||
|
|
||||||
|
return services;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,4 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
namespace EgwCoreLib.Lux.Data
|
||||||
using NLog;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data
|
|
||||||
{
|
{
|
||||||
public class DbAdmin : IDisposable
|
public class DbAdmin : IDisposable
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
namespace EgwCoreLib.Lux.Data
|
||||||
using NLog;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data
|
|
||||||
{
|
{
|
||||||
public class DbConfig
|
public class DbConfig
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
namespace EgwCoreLib.Lux.Data.DbModel.Admin
|
||||||
|
{
|
||||||
|
[Table("admin_lingua")]
|
||||||
|
public partial class LinguaModel
|
||||||
|
{
|
||||||
|
#region Public Properties
|
||||||
|
|
||||||
|
[Key]
|
||||||
|
public string Lingua { get; set; } = "ND";
|
||||||
|
public string FlagUrl { get; set; } = "";
|
||||||
|
public string Note { get; set; } = "";
|
||||||
|
|
||||||
|
#endregion Public Properties
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,11 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Data.Data.DbModel.Admin
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.Data.DbModel.Admin
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tabella dei USER di MySql
|
/// Tabella dei USER di MySql
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
namespace EgwCoreLib.Lux.Data.DbModel.Admin
|
||||||
|
{
|
||||||
|
[Table("admin_vocabolario")]
|
||||||
|
public partial class VocabolarioModel
|
||||||
|
{
|
||||||
|
|
||||||
|
public string Lingua { get; set; } = "ND";
|
||||||
|
public string Lemma { get; set; } = "";
|
||||||
|
public string Traduzione { get; set; } = "";
|
||||||
|
|
||||||
|
[ForeignKey("Lingua")]
|
||||||
|
public virtual LinguaModel LinguaNav { get; set; } = null!;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-5
@@ -1,8 +1,4 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
namespace EgwCoreLib.Lux.Data.DbModel.Catalog
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using static EgwCoreLib.Lux.Core.Enums;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Classe dei template di oggetti gestiti
|
/// Classe dei template di oggetti gestiti
|
||||||
+37
-22
@@ -1,12 +1,7 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Items;
|
// <Auto-Generated>
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using static EgwCoreLib.Lux.Core.Enums;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
namespace EgwCoreLib.Lux.Data.DbModel.Catalog
|
||||||
{
|
{
|
||||||
[Table("sales_template_row")]
|
[Table("sales_template_row")]
|
||||||
public class TemplateRowModel
|
public class TemplateRowModel
|
||||||
@@ -49,15 +44,14 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
[NotMapped]
|
[NotMapped]
|
||||||
public string TemplateRowDtx
|
public string TemplateRowDtx
|
||||||
{
|
{
|
||||||
get => $"TLR.{TemplateRowID:X12}";
|
get => CodeUid(TemplateRowID);
|
||||||
//get => $"TLR.{Inserted:yy}.{TemplateRowID:X8}";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Restituisce UID da impiegare x immagine
|
/// Restituisce URL da impiegare x immagine
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public string ImgUID
|
public string ImgUrl
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
@@ -65,7 +59,7 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
switch (ImgType)
|
switch (ImgType)
|
||||||
{
|
{
|
||||||
case ImageType.Calculated:
|
case ImageType.Calculated:
|
||||||
answ = ImgUrl(TemplateRowID);
|
answ = CodeUid(TemplateRowID);
|
||||||
break;
|
break;
|
||||||
case ImageType.Fixed:
|
case ImageType.Fixed:
|
||||||
answ = FileName;
|
answ = FileName;
|
||||||
@@ -78,14 +72,25 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
answ = ImgUrl(TemplateRowID);
|
answ = CodeUid(TemplateRowID);
|
||||||
}
|
}
|
||||||
|
answ = $"static/{answ}";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// URL Immagine calcolato
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string CodeUid(int id)
|
||||||
|
{
|
||||||
|
return $"TLR.{id:X12}";
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tipo immagine da visualizzare
|
/// Tipo immagine da visualizzare
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -199,6 +204,24 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public long FileSize { get; set; } = 0;
|
public long FileSize { get; set; } = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Definisce se sia calcolabile, dato il tipo SellingItem
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public bool CalcEnabled
|
||||||
|
{
|
||||||
|
get => ImgType == ImageType.Calculated;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Definisce presenza file
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public bool HasFile
|
||||||
|
{
|
||||||
|
get => !string.IsNullOrEmpty(FileName) && FileSize > 0 || (CalcEnabled && Envir != Constants.EXECENVIRONMENTS.WINDOW);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// BOM serializzata per la produzione dell'item
|
/// BOM serializzata per la produzione dell'item
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -281,14 +304,6 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
[ForeignKey("SellingItemID")]
|
[ForeignKey("SellingItemID")]
|
||||||
public virtual SellingItemModel? SellingItemNav { get; set; }
|
public virtual SellingItemModel? SellingItemNav { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// URL Immagine calcolato
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="id"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static string ImgUrl(int id)
|
|
||||||
{
|
|
||||||
return $"TLR.{id:X12}";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,4 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
// <Auto-Generated>
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Config
|
namespace EgwCoreLib.Lux.Data.DbModel.Config
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
using System;
|
// <Auto-Generated>
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Config
|
namespace EgwCoreLib.Lux.Data.DbModel.Config
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
using System;
|
// <Auto-Generated>
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Config
|
namespace EgwCoreLib.Lux.Data.DbModel.Config
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
using System;
|
// <Auto-Generated>
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Config
|
namespace EgwCoreLib.Lux.Data.DbModel.Config
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
using System;
|
// <Auto-Generated>
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Config
|
namespace EgwCoreLib.Lux.Data.DbModel.Config
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
using System;
|
// <Auto-Generated>
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Cost
|
namespace EgwCoreLib.Lux.Data.DbModel.Cost
|
||||||
|
|||||||
@@ -1,14 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Sales;
|
// <Auto-Generated>
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Task;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Cost
|
namespace EgwCoreLib.Lux.Data.DbModel.Cost
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Data.DbModel.Items
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Items
|
|
||||||
{ // <Auto-Generated>
|
{ // <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
|
|||||||
@@ -1,8 +1,4 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
namespace EgwCoreLib.Lux.Data.DbModel.Items
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using static EgwCoreLib.Lux.Core.Enums;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Items
|
|
||||||
{
|
{
|
||||||
// <Auto-Generated>
|
// <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Task;
|
namespace EgwCoreLib.Lux.Data.DbModel.Items
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using static EgwCoreLib.Lux.Core.Enums;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Items
|
|
||||||
{
|
{
|
||||||
// <Auto-Generated>
|
// <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
@@ -90,12 +85,54 @@ namespace EgwCoreLib.Lux.Data.DbModel.Items
|
|||||||
public ImageType ImgType { get; set; } = ImageType.ND;
|
public ImageType ImgType { get; set; } = ImageType.ND;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Restituisce UID da impiegare x immagine
|
/// URL Immagine calcolato
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="id"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static string CodeUid(int id)
|
||||||
|
{
|
||||||
|
return $"SP.{id:X12}";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Restituisce Url da impiegare x immagine
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public string ImgUID
|
public string ImgUID
|
||||||
{
|
{
|
||||||
get => ImgType == ImageType.Fixed ? FileName : ImgUrl(SellingItemID);
|
get => ImgType == ImageType.Fixed ? FileName : CodeUid(SellingItemID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Definisce se sia calcolabile, dato il tipo SellingItem
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public bool CalcEnabled
|
||||||
|
{
|
||||||
|
get => ImgType == ImageType.Calculated;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Restituisce Url immagine già calcolato (da sistemare!!!)
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public string ImgUrl
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
string answ = "empty.svg";
|
||||||
|
string fType = Envir == Constants.EXECENVIRONMENTS.WINDOW ? "svg" : "png";
|
||||||
|
if (CalcEnabled)
|
||||||
|
{
|
||||||
|
string rndImg = $"{DateTime.Now:HHmmssfff}";
|
||||||
|
answ = $"cache/{ImgUID}-{rndImg}.{fType}?env={Envir}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
answ = $"static/{ImgUID}";
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if false
|
#if false
|
||||||
@@ -126,20 +163,18 @@ namespace EgwCoreLib.Lux.Data.DbModel.Items
|
|||||||
get => false;
|
get => false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public bool HasBOM
|
||||||
|
{
|
||||||
|
get => SourceType == ItemSourceType.Jwd || SourceType == ItemSourceType.FileBTL;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Navigazione Job/Cicli
|
/// Navigazione Job/Cicli
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ForeignKey("JobID")]
|
[ForeignKey("JobID")]
|
||||||
public virtual JobTaskModel JobNav { get; set; } = null!;
|
public virtual JobTaskModel JobNav { get; set; } = null!;
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// URL Immagine calcolato
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="id"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static string ImgUrl(int id)
|
|
||||||
{
|
|
||||||
return $"SP.{id:X12}";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-11
@@ -1,16 +1,7 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Cost;
|
// <Auto-Generated>
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Task
|
namespace EgwCoreLib.Lux.Data.DbModel.Job
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Configurazione JobDriver abilitati per un Job e relativi coefficienti di conversione verso CostDriver
|
/// Configurazione JobDriver abilitati per un Job e relativi coefficienti di conversione verso CostDriver
|
||||||
+1
-10
@@ -1,13 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Cost;
|
namespace EgwCoreLib.Lux.Data.DbModel.Job
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Task
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Definizione driver di calcolo dall'Engine x la stima del CostDriver equivalente tempi/costi
|
/// Definizione driver di calcolo dall'Engine x la stima del CostDriver equivalente tempi/costi
|
||||||
+2
-6
@@ -1,11 +1,7 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Items;
|
// <Auto-Generated>
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Task
|
namespace EgwCoreLib.Lux.Data.DbModel.Job
|
||||||
{
|
{
|
||||||
[Table("task_job_step_item")]
|
[Table("task_job_step_item")]
|
||||||
public class JobStepItemModel
|
public class JobStepItemModel
|
||||||
+2
-8
@@ -1,13 +1,7 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Cost;
|
// <Auto-Generated>
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Task;
|
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Utils;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Task
|
namespace EgwCoreLib.Lux.Data.DbModel.Job
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Routing dei cicli di lavoro, con riferimento a risorse e fasi
|
/// Routing dei cicli di lavoro, con riferimento a risorse e fasi
|
||||||
+1
-9
@@ -1,12 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Utils;
|
namespace EgwCoreLib.Lux.Data.DbModel.Job
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Task
|
|
||||||
{
|
{
|
||||||
[Table("task_job_step_tag")]
|
[Table("task_job_step_tag")]
|
||||||
public class JobStepTagModel
|
public class JobStepTagModel
|
||||||
+2
-6
@@ -1,11 +1,7 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Utils;
|
// <Auto-Generated>
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Task
|
namespace EgwCoreLib.Lux.Data.DbModel.Job
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Definizione macro dei Cicli di Lavoro / Job
|
/// Definizione macro dei Cicli di Lavoro / Job
|
||||||
+1
-9
@@ -1,12 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Utils;
|
namespace EgwCoreLib.Lux.Data.DbModel.Job
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Task
|
|
||||||
{
|
{
|
||||||
[Table("task_job_task_tag")]
|
[Table("task_job_task_tag")]
|
||||||
public class JobTaskTagModel
|
public class JobTaskTagModel
|
||||||
+2
-10
@@ -1,15 +1,7 @@
|
|||||||
using System;
|
// <Auto-Generated>
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Task
|
namespace EgwCoreLib.Lux.Data.DbModel.Job
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Fase di lavorazione / ProductionStage
|
/// Fase di lavorazione / ProductionStage
|
||||||
@@ -1,7 +1,4 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
// <Auto-Generated>
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Production
|
namespace EgwCoreLib.Lux.Data.DbModel.Production
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Core.Generic;
|
using EgwCoreLib.Lux.Core.Generic;
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Sales;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using static EgwCoreLib.Lux.Core.Enums;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Production
|
namespace EgwCoreLib.Lux.Data.DbModel.Production
|
||||||
{
|
{
|
||||||
@@ -79,9 +74,29 @@ namespace EgwCoreLib.Lux.Data.DbModel.Production
|
|||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Num parts complessivamente incluse
|
/// Num parts complessivamente incluse
|
||||||
|
/// - se BarQty = 0 --> MAX
|
||||||
|
/// - se BarQty > 0 --> SUM
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[NotMapped]
|
[NotMapped]
|
||||||
public int NumParts => WorkGroupList?.Sum(x => x.Value.NumParts) ?? 0;
|
public int NumParts
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
int answ = 0;
|
||||||
|
if (WorkGroupList != null && WorkGroupList.Count > 0)
|
||||||
|
{
|
||||||
|
if (WorkGroupList?.FirstOrDefault().Value.BarQty > 0)
|
||||||
|
{
|
||||||
|
answ = WorkGroupList?.Sum(x => x.Value.NumParts) ?? 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
answ = WorkGroupList?.Max(x => x.Value.NumParts) ?? 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Tempo stimato complessivo
|
/// Tempo stimato complessivo
|
||||||
|
|||||||
@@ -1,11 +1,4 @@
|
|||||||
using System;
|
// <Auto-Generated>
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Production
|
namespace EgwCoreLib.Lux.Data.DbModel.Production
|
||||||
|
|||||||
@@ -1,8 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Sales;
|
// <Auto-Generated>
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Production
|
namespace EgwCoreLib.Lux.Data.DbModel.Production
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Cost;
|
using EgwCoreLib.Lux.Data.DbModel.Cost;
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Task;
|
using EgwCoreLib.Lux.Data.DbModel.Job;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|||||||
@@ -1,15 +1,5 @@
|
|||||||
using EgwCoreLib.Lux.Core.Generic;
|
using EgwCoreLib.Lux.Core.Generic;
|
||||||
using EgwCoreLib.Lux.Core.RestPayload;
|
using EgwCoreLib.Lux.Core.RestPayload;
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Cost;
|
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Task;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
// <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
|
|||||||
@@ -1,14 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Cost;
|
// <Auto-Generated>
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Sales;
|
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Production
|
namespace EgwCoreLib.Lux.Data.DbModel.Production
|
||||||
|
|||||||
@@ -0,0 +1,70 @@
|
|||||||
|
// <Auto-Generated>
|
||||||
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
|
// </Auto-Generated>
|
||||||
|
namespace EgwCoreLib.Lux.Data.DbModel.Report
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Classe dei report gestiti
|
||||||
|
/// </summary>
|
||||||
|
[Table("report_list")]
|
||||||
|
public class ReportModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ID del record
|
||||||
|
/// </summary>
|
||||||
|
[Key]
|
||||||
|
public int ReportID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Denominazione
|
||||||
|
/// </summary>
|
||||||
|
public string Name { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Descrizione
|
||||||
|
/// </summary>
|
||||||
|
public string Description { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Valore completo Json per recupero dati, con segnaposto con [[param_01]]
|
||||||
|
/// </summary>
|
||||||
|
public string JsonDSN { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Nome del report Active tra quelli nella folder
|
||||||
|
/// </summary>
|
||||||
|
public string ActRepFileName { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Conf dei parametri per il report
|
||||||
|
/// </summary>
|
||||||
|
public string ParamConfigRaw { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Conf relative ai file report
|
||||||
|
/// </summary>
|
||||||
|
public string FileConfDataRaw { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Elenco dei parametri da gestire x il ReportTemplate
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public List<ParamConfigDto> ParamConfig
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
List<ParamConfigDto> answ = new();
|
||||||
|
if (!string.IsNullOrEmpty(ParamConfigRaw) && ParamConfigRaw.Length > 2)
|
||||||
|
{
|
||||||
|
answ = JsonConvert.DeserializeObject<List<ParamConfigDto>>(ParamConfigRaw) ?? new();
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
string rawVal = JsonConvert.SerializeObject(value);
|
||||||
|
ParamConfigRaw = rawVal;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|
||||||
{
|
{
|
||||||
// <Auto-Generated>
|
// <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
@@ -48,6 +40,34 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string VAT { get; set; } = "";
|
public string VAT { get; set; } = "";
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public bool HasChildren
|
||||||
|
{
|
||||||
|
get => OfferNav.Any();
|
||||||
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public int NumOffers
|
||||||
|
{
|
||||||
|
get => OfferNav.Count();
|
||||||
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public int NumOrders
|
||||||
|
{
|
||||||
|
get => OrderNav.Count();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigazione alle Offerte
|
||||||
|
/// </summary>
|
||||||
|
public virtual ICollection<OfferModel> OfferNav { get; set; } = new List<OfferModel>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigazione agli Ordini
|
||||||
|
/// </summary>
|
||||||
|
public virtual ICollection<OrderModel> OrderNav { get; set; } = new List<OrderModel>();
|
||||||
|
|
||||||
#if false
|
#if false
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Navigazione al ruolo
|
/// Navigazione al ruolo
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|
||||||
{
|
{
|
||||||
// <Auto-Generated>
|
// <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
@@ -48,6 +40,34 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string VAT { get; set; } = "";
|
public string VAT { get; set; } = "";
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public bool HasChildren
|
||||||
|
{
|
||||||
|
get => OfferNav.Any();
|
||||||
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public int NumOffers
|
||||||
|
{
|
||||||
|
get => OfferNav.Count();
|
||||||
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public int NumOrders
|
||||||
|
{
|
||||||
|
get => OrderNav.Count();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigazione alle Offerte
|
||||||
|
/// </summary>
|
||||||
|
public virtual ICollection<OfferModel> OfferNav { get; set; } = new List<OfferModel>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigazione agli Ordini
|
||||||
|
/// </summary>
|
||||||
|
public virtual ICollection<OrderModel> OrderNav { get; set; } = new List<OrderModel>();
|
||||||
|
|
||||||
#if false
|
#if false
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Navigazione al ruolo
|
/// Navigazione al ruolo
|
||||||
|
|||||||
@@ -1,8 +1,4 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
// <Auto-Generated>
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using static EgwCoreLib.Lux.Core.Enums;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
||||||
@@ -69,6 +65,27 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string DictPresel { get; set; } = "";
|
public string DictPresel { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Dizionario valorizzato dei parametri attivi
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public Dictionary<string, string> DictParameter
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
Dictionary<string, string> answ = new();
|
||||||
|
if (!string.IsNullOrEmpty(DictPresel))
|
||||||
|
{
|
||||||
|
answ = JsonConvert.DeserializeObject<Dictionary<string, string>>(DictPresel) ?? new Dictionary<string, string>();
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
//set
|
||||||
|
//{
|
||||||
|
// DictPresel = JsonConvert.SerializeObject(value);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Validità Offerta
|
/// Validità Offerta
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,9 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Items;
|
// <Auto-Generated>
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using static EgwCoreLib.Lux.Core.Enums;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
||||||
@@ -50,10 +45,16 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// ID dell'articolo di vendita offerto
|
/// ID dell'articolo di vendita offerto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int SellingItemID { get; set; }
|
public int? SellingItemID { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Riferimento (opzionale9 al template da cui è derivato
|
/// Definisce se sia calcolabile, dato il tipo SellingItem
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public bool IsNote => SellingItemID == null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Riferimento (opzionale) al template da cui è derivato
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int? TemplateRowID { get; set; } = null;
|
public int? TemplateRowID { get; set; } = null;
|
||||||
|
|
||||||
@@ -64,16 +65,15 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
public bool CalcEnabled
|
public bool CalcEnabled
|
||||||
{
|
{
|
||||||
get => ImgType == ImageType.Calculated;
|
get => ImgType == ImageType.Calculated;
|
||||||
#if false
|
|
||||||
{
|
|
||||||
bool answ = false;
|
|
||||||
if (SellingItemNav != null)
|
|
||||||
{
|
|
||||||
answ = SellingItemNav.SourceType == ItemSourceType.Jwd || SellingItemNav.SourceType == ItemSourceType.FileBTL;
|
|
||||||
}
|
}
|
||||||
return answ;
|
|
||||||
}
|
/// <summary>
|
||||||
#endif
|
/// Definisce presenza file
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public bool HasFile
|
||||||
|
{
|
||||||
|
get => !string.IsNullOrEmpty(FileName) && FileSize > 0 || (CalcEnabled && Envir != Constants.EXECENVIRONMENTS.WINDOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -103,13 +103,36 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
}
|
}
|
||||||
else if (SellingItemID > 0)
|
else if (SellingItemID > 0)
|
||||||
{
|
{
|
||||||
answ = SellingItemModel.ImgUrl(SellingItemID);
|
answ = SellingItemModel.CodeUid(SellingItemID ?? 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Restituisce Url immagine già calcolato (da sistemare!!!)
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public string ImgUrl
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
string answ = "empty.svg";
|
||||||
|
string fType = Envir == Constants.EXECENVIRONMENTS.WINDOW ? "svg" : "png";
|
||||||
|
string rndImg = $"{DateTime.Now:HHmmssfff}";
|
||||||
|
if (CalcEnabled)
|
||||||
|
{
|
||||||
|
answ = $"cache/{ImgUID}-{rndImg}.{fType}?env={Envir}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
answ = $"static/{ImgUID}";
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Quantità della risorsa
|
/// Quantità della risorsa
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -296,6 +319,35 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool AwaitPrice { get; set; } = false;
|
public bool AwaitPrice { get; set; } = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Dizionario serializzato delle preselezioni (pending, da applicare)
|
||||||
|
/// </summary>
|
||||||
|
public string DictPendPresRaw { get; set; } = "";
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public bool HasPendReq
|
||||||
|
{
|
||||||
|
get => !string.IsNullOrEmpty(DictPendPresRaw) && DictPendingPresel.Count > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public Dictionary<string, string> DictPendingPresel
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
Dictionary<string, string> answ = new();
|
||||||
|
if (!string.IsNullOrEmpty(DictPendPresRaw))
|
||||||
|
{
|
||||||
|
answ = JsonConvert.DeserializeObject<Dictionary<string, string>>(DictPendPresRaw) ?? new Dictionary<string, string>();
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
//set
|
||||||
|
//{
|
||||||
|
// DictPendPresRaw = JsonConvert.SerializeObject(value);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Navigazione Offer
|
/// Navigazione Offer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,11 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Core.Generic;
|
// <Auto-Generated>
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Production;
|
|
||||||
using Newtonsoft.Json;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using static EgwCoreLib.Lux.Core.Enums;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
||||||
@@ -91,7 +84,6 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime Modified { get; set; } = DateTime.Now;
|
public DateTime Modified { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// DataOra richiesta per il completamento dell'ordine
|
/// DataOra richiesta per il completamento dell'ordine
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -107,6 +99,11 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string ConsNote { get; set; } = "";
|
public string ConsNote { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Valore serializzato info sui RawItem (es: lungh barra / qty barre)
|
||||||
|
/// </summary>
|
||||||
|
public string RawItemData { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enum stato Ordine
|
/// Enum stato Ordine
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -199,6 +196,15 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
get => (TotalCost > 0 && TotalPrice > TotalCost) ? (TotalPrice - TotalCost) / TotalPrice : 0;
|
get => (TotalCost > 0 && TotalPrice > TotalCost) ? (TotalPrice - TotalCost) / TotalPrice : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Verifica se ci siano TUTTE le righe coperte da Fabbisogni (con o senza ordine...)
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public bool AllRowsWithReq
|
||||||
|
{
|
||||||
|
get => OrderRowNav != null && !OrderRowNav.Any(x => x.MatReqNav.Count == 0);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Navigazione Customer
|
/// Navigazione Customer
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Items;
|
// <Auto-Generated>
|
||||||
using EgwCoreLib.Lux.Data.DbModel.Production;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using static EgwCoreLib.Lux.Core.Enums;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
||||||
@@ -57,10 +51,10 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// ID dell'articolo di vendita Orderto
|
/// ID dell'articolo di vendita Orderto
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int SellingItemID { get; set; }
|
public int? SellingItemID { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Riferimento (opzionale9 al template da cui è derivato
|
/// Riferimento (opzionale) al template da cui è derivato
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int? TemplateRowID { get; set; } = null;
|
public int? TemplateRowID { get; set; } = null;
|
||||||
|
|
||||||
@@ -152,16 +146,15 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
public bool CalcEnabled
|
public bool CalcEnabled
|
||||||
{
|
{
|
||||||
get => ImgType == ImageType.Calculated;
|
get => ImgType == ImageType.Calculated;
|
||||||
#if false
|
|
||||||
{
|
|
||||||
bool answ = false;
|
|
||||||
if (SellingItemNav != null)
|
|
||||||
{
|
|
||||||
answ = SellingItemNav.SourceType == ItemSourceType.Jwd || SellingItemNav.SourceType == ItemSourceType.FileBTL;
|
|
||||||
}
|
}
|
||||||
return answ;
|
|
||||||
}
|
/// <summary>
|
||||||
#endif
|
/// Definisce presenza file
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public bool HasFile
|
||||||
|
{
|
||||||
|
get => !string.IsNullOrEmpty(FileName) && FileSize > 0 || (CalcEnabled && Envir != Constants.EXECENVIRONMENTS.WINDOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -189,19 +182,42 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
if (TemplateRowID != null && TemplateRowID > 0)
|
if (TemplateRowID != null && TemplateRowID > 0)
|
||||||
{
|
{
|
||||||
//answ= $"TR.{TemplateRowID:X16}";
|
//answ= $"TR.{TemplateRowID:X16}";
|
||||||
answ = TemplateRowModel.ImgUrl(TemplateRowID ?? 0);
|
answ = TemplateRowModel.CodeUid(TemplateRowID ?? 0);
|
||||||
}
|
}
|
||||||
// altrimenti da selling item...
|
// altrimenti da selling item...
|
||||||
else if (SellingItemID > 0)
|
else if (SellingItemID > 0)
|
||||||
{
|
{
|
||||||
//answ = $"SP.{SellingItemID:X12}";
|
//answ = $"SP.{SellingItemID:X12}";
|
||||||
answ = SellingItemModel.ImgUrl(SellingItemID);
|
answ = SellingItemModel.CodeUid(SellingItemID ?? 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return answ;
|
return answ;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Restituisce Url immagine già calcolato (da sistemare!!!)
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public string ImgUrl
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
string answ = "empty.svg";
|
||||||
|
string fType = Envir == Constants.EXECENVIRONMENTS.WINDOW ? "svg" : "png";
|
||||||
|
string rndImg = $"{DateTime.Now:HHmmssfff}";
|
||||||
|
if (CalcEnabled)
|
||||||
|
{
|
||||||
|
answ = $"cache/{ImgUID}-{rndImg}.{fType}?env={Envir}";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
answ = $"static/{ImgUID}";
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Valore serializzato della composizione articolo (in formato JWD x finestra)
|
/// Valore serializzato della composizione articolo (in formato JWD x finestra)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -228,6 +244,30 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string ItemBOM { get; set; } = "";
|
public string ItemBOM { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Lista BOM deserializzata
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public List<BomItemDTO> ListBOM
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
List<BomItemDTO> answ = new();
|
||||||
|
if (!string.IsNullOrEmpty(ItemBOM) && ItemBOM.Length > 2)
|
||||||
|
{
|
||||||
|
answ = JsonConvert.DeserializeObject<List<BomItemDTO>>(ItemBOM) ?? new();
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public bool HasMatReqRow
|
||||||
|
{
|
||||||
|
get => MatReqNav != null && MatReqNav.Count > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Lista dei Job Cost Drivers calcolati dall'engine (necessari x calcolo Steps)
|
/// Lista dei Job Cost Drivers calcolati dall'engine (necessari x calcolo Steps)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -273,6 +313,11 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string ProdEstimate { get; set; } = "";
|
public string ProdEstimate { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Valore serializzato info sui RawItem (es: lungh barra / qty barre)
|
||||||
|
/// </summary>
|
||||||
|
public string RawItemData { get; set; } = "";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Validazione dati BOM (Inteso come gruppi tutti trovati/esistenti)
|
/// Validazione dati BOM (Inteso come gruppi tutti trovati/esistenti)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -317,6 +362,35 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public bool AwaitPrice { get; set; } = false;
|
public bool AwaitPrice { get; set; } = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Dizionario serializzato delle preselezioni (pending, da applicare)
|
||||||
|
/// </summary>
|
||||||
|
public string DictPendPresRaw { get; set; } = "";
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public bool HasPendReq
|
||||||
|
{
|
||||||
|
get => !string.IsNullOrEmpty(DictPendPresRaw) && DictPendingPresel.Count > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
public Dictionary<string, string> DictPendingPresel
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
Dictionary<string, string> answ = new();
|
||||||
|
if (!string.IsNullOrEmpty(DictPendPresRaw))
|
||||||
|
{
|
||||||
|
answ = JsonConvert.DeserializeObject<Dictionary<string, string>>(DictPendPresRaw) ?? new Dictionary<string, string>();
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
//set
|
||||||
|
//{
|
||||||
|
// DictPendPresRaw = JsonConvert.SerializeObject(value);
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Navigazione Order
|
/// Navigazione Order
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -339,5 +413,10 @@ namespace EgwCoreLib.Lux.Data.DbModel.Sales
|
|||||||
/// Navigazione alle righe ProdItem
|
/// Navigazione alle righe ProdItem
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public virtual ICollection<ProductionItemModel> ProdItemNav { get; set; } = new List<ProductionItemModel>();
|
public virtual ICollection<ProductionItemModel> ProdItemNav { get; set; } = new List<ProductionItemModel>();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Many-to-many verso associazione con MatReqNav
|
||||||
|
/// </summary>
|
||||||
|
public virtual ICollection<MatReqModel> MatReqNav { get; set; } = new List<MatReqModel>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
using System;
|
// <Auto-Generated>
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Stats
|
namespace EgwCoreLib.Lux.Data.DbModel.Stats
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
using System;
|
// <Auto-Generated>
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Stats
|
namespace EgwCoreLib.Lux.Data.DbModel.Stats
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Utils;
|
namespace EgwCoreLib.Lux.Data.DbModel.Stock
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Stock
|
|
||||||
{
|
{
|
||||||
// <Auto-Generated>
|
// <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
|
|||||||
@@ -1,13 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Items;
|
namespace EgwCoreLib.Lux.Data.DbModel.Stock
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Stock
|
|
||||||
{
|
{
|
||||||
// <Auto-Generated>
|
// <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
|
|||||||
@@ -0,0 +1,92 @@
|
|||||||
|
namespace EgwCoreLib.Lux.Data.DbModel.Supplier
|
||||||
|
{
|
||||||
|
// <Auto-Generated>
|
||||||
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
|
// </Auto-Generated>
|
||||||
|
|
||||||
|
[Table("buy_order")]
|
||||||
|
public class BuyOrderModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ID del record
|
||||||
|
/// </summary>
|
||||||
|
[Key]
|
||||||
|
public int BuyOrderID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Anno rif Ordine Fornitore
|
||||||
|
/// </summary>
|
||||||
|
public int RefYear { get; set; } = DateTime.Today.Year;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Numero prog Ordine nell'anno (da calcolare)
|
||||||
|
/// </summary>
|
||||||
|
public int RefNum { get; set; } = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indice revisione
|
||||||
|
/// </summary>
|
||||||
|
public int RefRev { get; set; } = 1;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Codice calcolato Ordine ANNO.NUMERO.REV
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public string BuyOrderCode
|
||||||
|
{
|
||||||
|
get => $"BO.{RefYear:00}.{RefNum:00000}.{RefRev:00}";
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Descrizione generale
|
||||||
|
/// </summary>
|
||||||
|
public string Description { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Fornitore (quandoa ssegnato, altrimenti è quotazione)
|
||||||
|
/// </summary>
|
||||||
|
public int? SupplierID { get; set; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Ordine assegnato se ho un supplier definito
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public bool Assigned => SupplierID != null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// DataOra inserimento
|
||||||
|
/// </summary>
|
||||||
|
public DateTime Inserted { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// DataOra ultima modifica
|
||||||
|
/// </summary>
|
||||||
|
public DateTime Modified { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// DataOra richiesta per il completamento dell'ordine di fornitura
|
||||||
|
/// </summary>
|
||||||
|
public DateTime DueDateReq { get; set; } = DateTime.Today.AddDays(30);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// note di consegna (opzionali)
|
||||||
|
/// </summary>
|
||||||
|
public string ConsNote { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Enum stato Ordine Acquisto
|
||||||
|
/// </summary>
|
||||||
|
public BuyOrderStates OrderState { get; set; } = BuyOrderStates.Created;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigazione Supplier
|
||||||
|
/// </summary>
|
||||||
|
[ForeignKey("SupplierID")]
|
||||||
|
public virtual SupplierModel? SupplierNav { get; set; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigazione alle righe Ordine Acquisto
|
||||||
|
/// </summary>
|
||||||
|
public virtual ICollection<BuyOrderRowModel> BuyOrderRowNav { get; set; } = new List<BuyOrderRowModel>();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
using EgwCoreLib.Lux.Data.DbModel.Warehouse;
|
||||||
|
|
||||||
|
namespace EgwCoreLib.Lux.Data.DbModel.Supplier
|
||||||
|
{
|
||||||
|
|
||||||
|
[Table("buy_order_row_2_mat_req")]
|
||||||
|
public class BuyOrderRow2MatReqModel
|
||||||
|
{
|
||||||
|
public int BuyOrderRowID { get; set; }
|
||||||
|
public int MatReqID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Quantità richiesta
|
||||||
|
/// </summary>
|
||||||
|
public double Qty { get; set; } = 0;
|
||||||
|
|
||||||
|
[ForeignKey("BuyOrderRowID")]
|
||||||
|
public virtual BuyOrderRowModel BuyOrderRowNav { get; set; } = null!;
|
||||||
|
|
||||||
|
[ForeignKey("MatReqID")]
|
||||||
|
public virtual MatReqModel MatReqNav { get; set; } = null!;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,107 @@
|
|||||||
|
namespace EgwCoreLib.Lux.Data.DbModel.Supplier
|
||||||
|
{
|
||||||
|
// <Auto-Generated>
|
||||||
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
|
// </Auto-Generated>
|
||||||
|
|
||||||
|
[Table("buy_order_row")]
|
||||||
|
public class BuyOrderRowModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ID del record
|
||||||
|
/// </summary>
|
||||||
|
[Key]
|
||||||
|
public int BuyOrderRowID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ID Ordine di acquisto di riferimento
|
||||||
|
/// </summary>
|
||||||
|
public int BuyOrderID { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Riga Ordine (per ordinamento)
|
||||||
|
/// </summary>
|
||||||
|
public int RowNum { get; set; } = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ID dell'item richiesto (se disponibile)
|
||||||
|
/// </summary>
|
||||||
|
public int? ItemID { get; set; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classificazione Item
|
||||||
|
/// </summary>
|
||||||
|
public string ClassCode { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Descrizione Item
|
||||||
|
/// </summary>
|
||||||
|
public string DescriptionCode { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Codice Item
|
||||||
|
/// </summary>
|
||||||
|
public string ItemCode { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Quantità articolo TOTALE
|
||||||
|
/// </summary>
|
||||||
|
public double TotQty
|
||||||
|
{
|
||||||
|
get => MatReqNav.Sum(x => x.Qty);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if false
|
||||||
|
/// <summary>
|
||||||
|
/// Quantità articolo TOTALE
|
||||||
|
/// </summary>
|
||||||
|
public double TotQty
|
||||||
|
{
|
||||||
|
get => DictOrderRowDetail.Sum(x => x.Value);
|
||||||
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Dizionario serializzato di RigheOrdine + Qty
|
||||||
|
/// </summary>
|
||||||
|
public string OrderRowData { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Dizionario escplicito degli OrderRow esplosi rispetto a ItemId delle BOM
|
||||||
|
/// </summary>
|
||||||
|
[NotMapped]
|
||||||
|
public Dictionary<int, double> DictOrderRowDetail
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
Dictionary<int, double> answ = new();
|
||||||
|
if (!string.IsNullOrEmpty(OrderRowData) && OrderRowData.Count() > 2)
|
||||||
|
{
|
||||||
|
answ = JsonConvert.DeserializeObject<Dictionary<int, double>>(OrderRowData) ?? new();
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
set
|
||||||
|
{
|
||||||
|
OrderRowData = JsonConvert.SerializeObject(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigazione Ordine Acquisto
|
||||||
|
/// </summary>
|
||||||
|
[ForeignKey("BuyOrderID")]
|
||||||
|
public virtual BuyOrderModel? BuyOrderNav { get; set; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigazione Item
|
||||||
|
/// </summary>
|
||||||
|
[ForeignKey("ItemID")]
|
||||||
|
public virtual ItemModel? ItemNav { get; set; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Many-to-many verso associazione con MatReq
|
||||||
|
/// </summary>
|
||||||
|
public virtual ICollection<BuyOrderRow2MatReqModel> MatReqNav { get; set; } = new List<BuyOrderRow2MatReqModel>();
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
-22
@@ -1,18 +1,10 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Data.DbModel.Supplier
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Items
|
|
||||||
{
|
{
|
||||||
// <Auto-Generated>
|
// <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
|
|
||||||
[Table("item_supplier")]
|
[Table("buy_supplier")]
|
||||||
public class SupplierModel
|
public class SupplierModel
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -21,13 +13,6 @@ namespace EgwCoreLib.Lux.Data.DbModel.Items
|
|||||||
[Key]
|
[Key]
|
||||||
public int SupplierID { get; set; }
|
public int SupplierID { get; set; }
|
||||||
|
|
||||||
#if false
|
|
||||||
/// <summary>
|
|
||||||
/// Ruolo assocaito da anagrafica esterna
|
|
||||||
/// </summary>
|
|
||||||
public int RoleID { get; set; }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Denominazione se persona giuridica
|
/// Denominazione se persona giuridica
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -48,12 +33,9 @@ namespace EgwCoreLib.Lux.Data.DbModel.Items
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public string VAT { get; set; } = "";
|
public string VAT { get; set; } = "";
|
||||||
|
|
||||||
#if false
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Navigazione al ruolo
|
/// Many-to-many with Qualifica Fornitori
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[ForeignKey("RoleID")]
|
public virtual ICollection<SupplierQualifyModel> QualifNav { get; set; } = new List<SupplierQualifyModel>();
|
||||||
public virtual RoleModel RoleNav { get; set; } = null!;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
namespace EgwCoreLib.Lux.Data.DbModel.Supplier
|
||||||
|
{
|
||||||
|
[Table("buy_supplier_qualify")]
|
||||||
|
public class SupplierQualifyModel
|
||||||
|
{
|
||||||
|
public int SupplierID { get; set; }
|
||||||
|
public string CodGroup { get; set; } = "";
|
||||||
|
|
||||||
|
[ForeignKey("SupplierID")]
|
||||||
|
public virtual SupplierModel SupplierNav { get; set; } = null!;
|
||||||
|
|
||||||
|
[ForeignKey("CodGroup")]
|
||||||
|
public virtual ItemGroupModel GroupNav { get; set; } = null!;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,12 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Data.DbModel.Utils
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Utils
|
|
||||||
{
|
{
|
||||||
// <Auto-Generated>
|
// <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
// <Auto-Generated>
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Utils
|
namespace EgwCoreLib.Lux.Data.DbModel.Utils
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
using System.ComponentModel.DataAnnotations;
|
// <Auto-Generated>
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
|
|
||||||
// <Auto-Generated>
|
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Utils
|
namespace EgwCoreLib.Lux.Data.DbModel.Utils
|
||||||
|
|||||||
@@ -1,12 +1,4 @@
|
|||||||
using System;
|
namespace EgwCoreLib.Lux.Data.DbModel.Utils
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Utils
|
|
||||||
{ // <Auto-Generated>
|
{ // <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
// </Auto-Generated>
|
// </Auto-Generated>
|
||||||
|
|||||||
@@ -1,8 +1,4 @@
|
|||||||
using EgwCoreLib.Lux.Data.DbModel.Task;
|
namespace EgwCoreLib.Lux.Data.DbModel.Utils
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
|
||||||
|
|
||||||
namespace EgwCoreLib.Lux.Data.DbModel.Utils
|
|
||||||
{
|
{
|
||||||
// <Auto-Generated>
|
// <Auto-Generated>
|
||||||
// This is here so CodeMaid doesn't reorganize this document
|
// This is here so CodeMaid doesn't reorganize this document
|
||||||
|
|||||||
@@ -0,0 +1,90 @@
|
|||||||
|
namespace EgwCoreLib.Lux.Data.DbModel.Warehouse
|
||||||
|
{
|
||||||
|
[Table("warehouse_material_req")]
|
||||||
|
public class MatReqModel
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ID del record
|
||||||
|
/// </summary>
|
||||||
|
[Key]
|
||||||
|
public int MatReqID { get; set; } = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Order cui è riferito
|
||||||
|
/// </summary>
|
||||||
|
public int? OrderID { get; set; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// OrderRow cui è riferito (vince su OrderID)
|
||||||
|
/// </summary>
|
||||||
|
public int? OrderRowID { get; set; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// DataOra inserimento
|
||||||
|
/// </summary>
|
||||||
|
public DateTime Inserted { get; set; } = DateTime.Now;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ID dell'item richiesto
|
||||||
|
/// </summary>
|
||||||
|
public int? ItemID { get; set; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Quantità richiesta per Item (complessiva)
|
||||||
|
/// </summary>
|
||||||
|
public double TotQty { get; set; } = 0;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Valore serializzato info sui RawItem (es: lungh barra / qty barre)
|
||||||
|
/// </summary>
|
||||||
|
public string RawItemData { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Cod gruppo articolo (per selezione omogenea alternative)
|
||||||
|
/// </summary>
|
||||||
|
public string CodGroup { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// CodArticolo (opzionale)
|
||||||
|
/// </summary>
|
||||||
|
public string ItemCode { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Desdcrizione item ordinato
|
||||||
|
/// </summary>
|
||||||
|
public string Description { get; set; } = "";
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Quantità Item finali relativi al fabbisogno
|
||||||
|
/// </summary>
|
||||||
|
public int NumItems { get; set; } = 1;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Indica che è stato processato: generato un ordine di acquisto
|
||||||
|
/// </summary>
|
||||||
|
public bool Processed { get; set; } = false;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigazione Item Order
|
||||||
|
/// </summary>
|
||||||
|
[ForeignKey("OrderID")]
|
||||||
|
public virtual OrderModel? OrderNav { get; set; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigazione Item OrderRow
|
||||||
|
/// </summary>
|
||||||
|
[ForeignKey("OrderRowID")]
|
||||||
|
public virtual OrderRowModel? OrderRowNav { get; set; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Navigazione Item
|
||||||
|
/// </summary>
|
||||||
|
[ForeignKey("ItemID")]
|
||||||
|
public virtual ItemModel? ItemNav { get; set; } = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Many-to-many verso associazione con BuyOrderRow
|
||||||
|
/// </summary>
|
||||||
|
public virtual ICollection<BuyOrderRow2MatReqModel> BuyOrderRowNav { get; set; } = new List<BuyOrderRow2MatReqModel>();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
global using System.ComponentModel.DataAnnotations;
|
||||||
|
global using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
global using static EgwCoreLib.Lux.Core.Enums;
|
||||||
@@ -0,0 +1,146 @@
|
|||||||
|
namespace EgwCoreLib.Lux.Data.Domains
|
||||||
|
{
|
||||||
|
public static class BomCalculator
|
||||||
|
{
|
||||||
|
#region Public Methods
|
||||||
|
|
||||||
|
public static List<BomItemDTO> GetBomList(string itemBOM)
|
||||||
|
{
|
||||||
|
List<BomItemDTO> answ = new List<BomItemDTO>();
|
||||||
|
if (!string.IsNullOrEmpty(itemBOM) && itemBOM.Length > 2)
|
||||||
|
{
|
||||||
|
var bomList = JsonConvert.DeserializeObject<List<BomItemDTO>>(itemBOM);
|
||||||
|
if (bomList != null)
|
||||||
|
{
|
||||||
|
answ = bomList;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return answ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Esegue completamento e la validazione dei dati BOM da lista articoli + gruppi,
|
||||||
|
/// validando i dati stessi
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="itemGroupList">Elenco ItemGroup da considerare</param>
|
||||||
|
/// <param name="bomGenList">Item di tipo BOM/BomAlt AMMESSI</param>
|
||||||
|
/// <param name="bomList">Lista BOM ricevuta da validare</param>
|
||||||
|
/// <param name="bomList">Lista BOM precedente da confrontare x scelta alternativi</param>
|
||||||
|
/// <param name="totCost">Costo netto componenti BOM calcolato</param>
|
||||||
|
/// <param name="totPrice">Prezzo complessivo calcolato (con aggiunta marginalità)</param>
|
||||||
|
/// <param name="totItemQty">Numero toale di item dello step BOM</param>
|
||||||
|
/// <param name="numGroupOk">Controllo coerenza calcoli sui gruppi list2upd</param>
|
||||||
|
/// <param name="numItemOk">Controllo coerenza calcoli su num list2upd</param>
|
||||||
|
public static void Validate(
|
||||||
|
List<ItemGroupModel> itemGroupList,
|
||||||
|
List<ItemModel> bomGenList,
|
||||||
|
ref List<BomItemDTO> bomList,
|
||||||
|
List<BomItemDTO>? bomListPrev,
|
||||||
|
ref double totCost,
|
||||||
|
ref double totPrice,
|
||||||
|
ref int totItemQty,
|
||||||
|
ref int numGroupOk,
|
||||||
|
ref int numItemOk)
|
||||||
|
{
|
||||||
|
double margin = 0;
|
||||||
|
// ciclo x ogni elemento della BOM, cercando x gruppo e ExtItemCode
|
||||||
|
foreach (var item in bomList)
|
||||||
|
{
|
||||||
|
// init del margine
|
||||||
|
margin = 0;
|
||||||
|
// verifico item group esistente...
|
||||||
|
if (itemGroupList.Where(x => x.CodGroup == item.ClassCode).Count() > 0)
|
||||||
|
{
|
||||||
|
numGroupOk++;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2025.09.16: se il prezzo arriva dalla BOM calcolata uso quello...
|
||||||
|
if (item.Price > 0)
|
||||||
|
{
|
||||||
|
// resetto ItemID ma NON il prezzo
|
||||||
|
item.ItemID = 0;
|
||||||
|
// conto l'item
|
||||||
|
numItemOk++;
|
||||||
|
item.PriceEff = item.Price;
|
||||||
|
// dovrei recuperare margine da BOM... da rivedere, x ora cablato 20%...
|
||||||
|
margin = 0.2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/*************************************************
|
||||||
|
* Ricerca costo item:
|
||||||
|
* - se ho un itemID --> cerco record ESATTO e sostituisco descrizioni & co...
|
||||||
|
* - se non ho itemID --> cerco dati di selezione + qtyRange
|
||||||
|
*************************************************/
|
||||||
|
ItemModel? recCost = null;
|
||||||
|
bool selExact = item.ItemID > 0;
|
||||||
|
if (selExact)
|
||||||
|
{
|
||||||
|
recCost = bomGenList
|
||||||
|
.Where(x => x.ItemID == item.ItemID)
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
recCost = bomGenList
|
||||||
|
.Where(x => x.CodGroup == item.ClassCode
|
||||||
|
&& x.ItemIDParent == 0 // voglio NON sia un record CHILD
|
||||||
|
&& x.ExtItemCode == item.ItemCode
|
||||||
|
&& item.Qty >= x.QtyMin
|
||||||
|
&& item.Qty < x.QtyMax)
|
||||||
|
.OrderByDescending(x => x.Cost)
|
||||||
|
.FirstOrDefault();
|
||||||
|
// 2025.09.24: se ho un elenco item della BOM precedente
|
||||||
|
if (bomListPrev != null && bomListPrev.Count > 0 && recCost != null)
|
||||||
|
{
|
||||||
|
// ...cerco item trovato come PARENT di altri item
|
||||||
|
var listAlt = bomGenList.Where(x => x.ItemIDParent == recCost.ItemID).ToList();
|
||||||
|
|
||||||
|
// che cerco nella nella BOM precedente...
|
||||||
|
var result = listAlt
|
||||||
|
.Join(
|
||||||
|
bomListPrev,
|
||||||
|
l1 => l1.ItemID,
|
||||||
|
l2 => l2.ItemID,
|
||||||
|
(l1, l2) => l1)
|
||||||
|
.ToList();
|
||||||
|
// nel caso ne trovassi solo 1 uso quello al posto del recCost...
|
||||||
|
if (result.Count == 1)
|
||||||
|
{
|
||||||
|
recCost = result.FirstOrDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// se trovato valorizzo!
|
||||||
|
if (recCost != null)
|
||||||
|
{
|
||||||
|
numItemOk++;
|
||||||
|
item.ItemID = recCost.ItemID;
|
||||||
|
//item.PriceEff = recCost.BomCost * (1 + recCost.Margin);
|
||||||
|
item.PriceEff = recCost.Cost;
|
||||||
|
// se selezione esatta sovrascrivo altri valori
|
||||||
|
if (selExact)
|
||||||
|
{
|
||||||
|
item.ItemCode = recCost.ExtItemCode;
|
||||||
|
//item.DescriptionCode = recCost.Name;
|
||||||
|
}
|
||||||
|
margin = recCost.Margin;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
item.ItemID = 0;
|
||||||
|
item.PriceEff = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// ...e aggiorno totale
|
||||||
|
totCost += item.TotalCost;
|
||||||
|
// e prezzo totale compreso margine
|
||||||
|
totPrice += item.TotalCost * (1 + margin);
|
||||||
|
totItemQty += item.ItemQty;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion Public Methods
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -48,8 +48,10 @@
|
|||||||
<PackageReference Include="NLog" />
|
<PackageReference Include="NLog" />
|
||||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" />
|
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" />
|
||||||
<PackageReference Include="RestSharp" />
|
<PackageReference Include="RestSharp" />
|
||||||
<PackageReference Include="Scrutor" />
|
|
||||||
<PackageReference Include="StackExchange.Redis" />
|
<PackageReference Include="StackExchange.Redis" />
|
||||||
|
<PackageReference Include="ZiggyCreatures.FusionCache" />
|
||||||
|
<PackageReference Include="ZiggyCreatures.FusionCache.Backplane.StackExchangeRedis" />
|
||||||
|
<PackageReference Include="ZiggyCreatures.FusionCache.Serialization.NewtonsoftJson" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
global using EgwCoreLib.Lux.Core.Dto;
|
||||||
|
global using EgwCoreLib.Lux.Core.RestPayload;
|
||||||
|
global using EgwCoreLib.Lux.Data.Data.DbModel.Admin;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Admin;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Catalog;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Config;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Cost;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Items;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Job;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Production;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Report;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Sales;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Stats;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Stock;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Supplier;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Utils;
|
||||||
|
global using EgwCoreLib.Lux.Data.DbModel.Warehouse;
|
||||||
|
global using Microsoft.EntityFrameworkCore;
|
||||||
|
global using Microsoft.Extensions.Configuration;
|
||||||
|
global using Newtonsoft.Json;
|
||||||
|
global using NLog;
|
||||||
+4111
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user