Merge branch 'develop' into feature/Feature-cancellaColli
All checks were successful
IntegryManagementSystem_Multi/pipeline/head This commit looks good

This commit is contained in:
2025-03-27 16:54:39 +01:00
188 changed files with 8276 additions and 2023 deletions

2
.gitignore vendored
View File

@@ -121,3 +121,5 @@ fabric.properties
*.ckie
/ts
/temp
/docker/tomcat/conf/integry/logs.db
/docker/tomcat/conf/integry/logs.db-journal

View File

@@ -1,5 +1,5 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="Tomcat (FAST)" type="#com.intellij.j2ee.web.tomcat.TomcatRunConfigurationFactory" factoryName="Local" APPLICATION_SERVER_NAME="Tomcat" ALTERNATIVE_JRE_ENABLED="false">
<configuration default="false" name="Tomcat (FAST)" type="#com.intellij.j2ee.web.tomcat.TomcatRunConfigurationFactory" factoryName="Local" APPLICATION_SERVER_NAME="Tomcat" ALTERNATIVE_JRE_ENABLED="false" show_console_on_std_err="true" show_console_on_std_out="true">
<option name="COMMON_VM_ARGUMENTS" value="-DDISABLE_DROOLS_COMPILE=TRUE -Xms1G -Xmx6G" />
<deployment>
<artifact name="ems-engine:war exploded">

13
Dockerfile Normal file
View File

@@ -0,0 +1,13 @@
FROM tomcat:9-jre8-alpine
ENV TZ="Europe/Rome"
ENV JAVA_OPTS="-DDISABLE_DROOLS_COMPILE=TRUE -Xms512M -Xmx1G -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
ENV USERDOMAIN="STUDIO-ML"
COPY docker/tomcat/conf/integry/ems.properties /usr/local/tomcat/conf/integry/
COPY docker/tomcat/conf/integry/ems_automated_operations.json /usr/local/tomcat/conf/integry/
COPY docker/tomcat/conf/integry/ems_settings.json /usr/local/tomcat/conf/integry/
COPY ems-engine/target/ems-api.war /usr/local/tomcat/webapps/
EXPOSE 8080
EXPOSE 5005

View File

@@ -25,7 +25,7 @@ pipeline {
bat(script: 'mvn clean install -t toolchains-jenkins.xml', returnStdout: true)
archiveArtifacts(artifacts: 'ems-engine/target/*.war*', onlyIfSuccessful: true)
}
stash includes: 'ems-engine/target/*.war,docker/**,Dockerfile', name: 'docker-files'
}
}
@@ -101,6 +101,27 @@ sleep 10''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaul
}
}
stage('Docker Build') {
steps {
node('server-build') {
echo "Building Docker image"
unstash 'docker-files'
script {
def branchVersion = ""
if (env.GIT_BRANCH != "master") {
branchVersion = "-${env.GIT_BRANCH.toLowerCase().replace('/', '-')}"
}
bat "docker buildx build --platform linux/amd64,linux/arm64 --push -t \"git.studioml.it/integry/ems-api${branchVersion}:latest\" ."
//containerImageLink "git.studioml.it/integry/ems-api-${env.GIT_BRANCH.toLowerCase().replace('/', '-')}:latest}"
}
}
}
}
}
post {

11
docker-compose.yml Normal file
View File

@@ -0,0 +1,11 @@
services:
tomcat:
build: ./
restart: unless-stopped
ports:
- "8080:8080"
- "5005:5005"
volumes:
- ./docker/tomcat/conf/integry:/usr/local/tomcat/conf/integry
extra_hosts:
- host.docker.internal:host-gateway

View File

@@ -0,0 +1,13 @@
ini.path=C:/MLSetupWS
global.connection.ini.path=C:/MLSetupWS/connectDB.ini
endpoint.ws=http://localhost:8080
endpoint.brt.ws=http://10.0.0.12:9005/easyspeddews?wsdl
receipts.folder=C:/WEB_SHARE/SCONTRINI
crontime.folder=
quartz.enabled=false
cron.expr=0 0/2 * 1/1 * ? *
default.printer.name=Samsung SCX-4x24 Series PCL 6
default.database=integry
default.nodatabase.login=integry_ems_psw_system_legacy
amazon.import.enabled=false
sh.import.enabled=false

View File

@@ -0,0 +1 @@
{}

View File

@@ -0,0 +1,853 @@
{
"accessTokenExpireMinutes" : 30,
"refreshTokenExpireDays" : 14,
"defaultProfile" : "INTEGRY",
"primaryInstance" : true,
"enableTokenCaching" : false,
"systemPassword" : "?MF!jbI+&OkA",
"availableConnections" : [ {
"profileName" : "MAGGIOSRL",
"connectionType" : "MSSQL",
"dbName" : "MaggioSRL",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "AGRICOPER",
"connectionType" : "MSSQL",
"dbName" : "agricoper",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "MUCCI",
"connectionType" : "MSSQL",
"dbName" : "MUCCI",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "COAP",
"connectionType" : "MSSQL",
"dbName" : "COAP",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "RESINA_COLOR",
"connectionType" : "MSSQL",
"dbName" : "RESINACOLOR",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "ALAMBICCO",
"connectionType" : "MSSQL",
"dbName" : "alambicco",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "AURICCHIO",
"connectionType" : "MSSQL",
"dbName" : "auricchio",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "AURICCHIOSRL",
"connectionType" : "MSSQL",
"dbName" : "auricchiosrl",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "AURICCHIO_MIKI",
"connectionType" : "MSSQL",
"dbName" : "auricchio_miki",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "CARELLI",
"connectionType" : "MSSQL",
"dbName" : "carelli",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "CSGR",
"connectionType" : "MSSQL",
"dbName" : "csgr",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "CHIUSO",
"connectionType" : "MSSQL",
"dbName" : "chiuso",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "COSMAPACK",
"connectionType" : "MSSQL",
"dbName" : "cosmint",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "DAGA",
"connectionType" : "MSSQL",
"dbName" : "Daga",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "DIDONNA",
"connectionType" : "MSSQL",
"dbName" : "DIDONNA",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "DOLCE_BONTA",
"connectionType" : "MSSQL",
"dbName" : "DOLCE_BO",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "DULCIAR",
"connectionType" : "MSSQL",
"dbName" : "dulciar",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "FLORAPULIA",
"connectionType" : "MSSQL",
"dbName" : "florapulia",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "FLORAPULIASRL",
"connectionType" : "MSSQL",
"dbName" : "florapuliasrl",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "PAPARELLAD",
"connectionType" : "MSSQL",
"dbName" : "PAPARELLAD",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "PAPARELLAP",
"connectionType" : "MSSQL",
"dbName" : "PAPARELLAP",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "PAPARELLAPIETRO",
"connectionType" : "MSSQL",
"dbName" : "PAPARELLAPIETRO",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "FOLLIESGROUP",
"connectionType" : "MSSQL",
"dbName" : "folliesgroup",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "FORMAT",
"connectionType" : "MSSQL",
"dbName" : "format",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "GESTFOOD",
"connectionType" : "MSSQL",
"dbName" : "GESTFOOD",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "GIOVMAGGIO",
"connectionType" : "MSSQL",
"dbName" : "giovmaggio",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "GRAMM",
"connectionType" : "MSSQL",
"dbName" : "gramm",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "IDROTECNICA",
"connectionType" : "MSSQL",
"dbName" : "idrotecnica",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "IGOOD",
"connectionType" : "MSSQL",
"dbName" : "IGOOD",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "IME_BA",
"connectionType" : "MSSQL",
"dbName" : "IME_BA",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "IME_TE",
"connectionType" : "MSSQL",
"dbName" : "IME_TE",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "IND01",
"connectionType" : "MSSQL",
"dbName" : "ind01",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "IND02",
"connectionType" : "MSSQL",
"dbName" : "ind02",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "IND04",
"connectionType" : "MSSQL",
"dbName" : "ind04",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "IND05",
"connectionType" : "MSSQL",
"dbName" : "ind05",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "INTEGRY",
"connectionType" : "MSSQL",
"dbName" : "studioml",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "LAMONARCA",
"connectionType" : "MSSQL",
"dbName" : "lamonarca",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "LEVANPLAST",
"connectionType" : "MSSQL",
"dbName" : "levanplast",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "LICOR",
"connectionType" : "MSSQL",
"dbName" : "licor",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "MASSERIEAMICHE",
"connectionType" : "MSSQL",
"dbName" : "masserieAmiche",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "MIDEL",
"connectionType" : "MSSQL",
"dbName" : "midel",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "MURGIA",
"connectionType" : "MSSQL",
"dbName" : "MURGIA",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "NUOVAVG",
"connectionType" : "MSSQL",
"dbName" : "vgalimenti",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "OF_DEMO",
"connectionType" : "MSSQL",
"dbName" : "of_demo",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "PANIMAL",
"connectionType" : "MSSQL",
"dbName" : "panimal",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "PAPARELLAPIETRO",
"connectionType" : "MSSQL",
"dbName" : "paparellapietro",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "PAPARELLAD",
"connectionType" : "MSSQL",
"dbName" : "paparellad",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "PAPARELLAP",
"connectionType" : "MSSQL",
"dbName" : "paparellap",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "RISTO_CASH",
"connectionType" : "MSSQL",
"dbName" : "risto_cash",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "SALPAR",
"connectionType" : "MSSQL",
"dbName" : "salpar",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "MASABA",
"connectionType" : "MSSQL",
"dbName" : "masabasrl",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "SANTANTONIO",
"connectionType" : "MSSQL",
"dbName" : "SANTANTONIO",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "SARDINYA",
"connectionType" : "MSSQL",
"dbName" : "Sardinya",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "SABATO",
"connectionType" : "MSSQL",
"dbName" : "SABATO",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "SICILIANIDMSOLAP",
"connectionType" : "MSSQL",
"dbName" : "SicilianiDMSOlap",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : false
}, {
"profileName" : "SICILIANIOLAP",
"connectionType" : "MSSQL",
"dbName" : "SicilianiDMSOlap",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : false
}, {
"profileName" : "SICILIANITRAXAL",
"connectionType" : "MSSQL",
"dbName" : "scambio_traxal",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : false
}, {
"profileName" : "SMETAR",
"connectionType" : "MSSQL",
"dbName" : "smetar",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "SUIT",
"connectionType" : "MSSQL",
"dbName" : "SUIT",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "BIOSUIT",
"connectionType" : "MSSQL",
"dbName" : "BIOSUIT",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "SUIT_PUGLIA",
"connectionType" : "MSSQL",
"dbName" : "SUIT_PUGLIA",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "CARNI_SARDEGNA",
"connectionType" : "MSSQL",
"dbName" : "CARNI_SARDEGNA",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "TEMPESTA",
"connectionType" : "MSSQL",
"dbName" : "tempesta",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "TEMPESTADI",
"connectionType" : "MSSQL",
"dbName" : "tempestadi",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "TOSCA_BA",
"connectionType" : "MSSQL",
"dbName" : "tosca_ba",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "TOSCA_CE",
"connectionType" : "MSSQL",
"dbName" : "tosca_ce",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "TOSCA_CZ",
"connectionType" : "MSSQL",
"dbName" : "tosca_cz",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "TOSCA_FC",
"connectionType" : "MSSQL",
"dbName" : "tosca_fc",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "TOSCA_MI",
"connectionType" : "MSSQL",
"dbName" : "tosca_mi",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "TOSCA_RM",
"connectionType" : "MSSQL",
"dbName" : "tosca_rm",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "TOSCA_RG",
"connectionType" : "MSSQL",
"dbName" : "tosca_rg",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "TOSCA_VR",
"connectionType" : "MSSQL",
"dbName" : "tosca_vr",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "TOSCA_CLOUD",
"connectionType" : "MSSQL",
"dbName" : "tosca_cloud",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "VGALIMENTI",
"connectionType" : "MSSQL",
"dbName" : "vgalimenti",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "VINELLA",
"connectionType" : "MSSQL",
"dbName" : "VINELLA",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "LEVANPLASTSRL",
"connectionType" : "MSSQL",
"dbName" : "levanplastsrl",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "BIOLEVANTE",
"connectionType" : "MSSQL",
"dbName" : "biolevante",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "ROSSOGARGANO",
"connectionType" : "MSSQL",
"dbName" : "RossoGargano",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "Aida",
"connectionType" : "MSSQL",
"dbName" : "aida",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "ROSSOGARGANOCONT",
"connectionType" : "MSSQL",
"dbName" : "RossoGarganoCont",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.220",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "ROSSOGARGANOEXCHANGE",
"connectionType" : "MSSQL",
"dbName" : "ROSSOGARGANOEXCHANGE",
"username" : "sa",
"password" : "sZ",
"host" : "SERVERDB2019",
"encryptedDbPsw" : true,
"internalDb" : false
}, {
"profileName" : "MORGANTE",
"connectionType" : "MSSQL",
"dbName" : "morgante",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "WINACT",
"connectionType" : "MSSQL",
"dbName" : "winact",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "FRUDIS",
"connectionType" : "MSSQL",
"dbName" : "frudis",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "SAPORI_VERI",
"connectionType" : "MSSQL",
"dbName" : "SAPORI_VERI",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "DISPENSA",
"connectionType" : "MSSQL",
"dbName" : "DISPENSA",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "TWOBROTHERS",
"connectionType" : "MSSQL",
"dbName" : "twobrothers",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "MEDSOL",
"connectionType" : "MSSQL",
"dbName" : "medsol",
"username" : "SA",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "SGSRL",
"connectionType" : "MSSQL",
"dbName" : "SGSRL",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
}, {
"profileName" : "STUDIOML_HISTORY",
"connectionType" : "MSSQL",
"dbName" : "studioml_history",
"username" : "sa",
"password" : "sa",
"host" : "192.168.2.220",
"encryptedDbPsw" : false,
"internalDb" : false
}, {
"profileName" : "VETTA",
"connectionType" : "MSSQL",
"dbName" : "vetta",
"username" : "sa",
"password" : "sZ",
"host" : "192.168.2.214",
"encryptedDbPsw" : true,
"internalDb" : true
} ],
"defaultMailConfiguration" : {
"from" : "developer@integry.it",
"smtp" : "mail.studioml.it",
"port" : 1025,
"enableSSL" : false,
"username" : "mailuser",
"password" : "ZTikBVpBmZC6CVtGamTQ",
"encryptedPassword" : false
},
"loggerConfiguration" : {
"level" : "DEBUG",
"deleteDays" : 7,
"dbDeleteDays" : 0,
"dbMaxSize" : "1G"
},
"enablePermissionCheck" : false,
"minioConfiguration" : {
"host" : "192.168.2.206",
"port" : 9000,
"accessKey" : "integry_minio",
"secretKey" : "9yMd3@0.GPKf",
"enabled" : true,
"enableOldSave" : false,
"excludedEntities" : [ ]
}
}

View File

@@ -111,7 +111,7 @@
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-bom</artifactId>
<version>2.21.1</version>
<version>2.24.3</version>
<scope>import</scope>
<type>pom</type>
</dependency>
@@ -228,11 +228,11 @@
<!-- <artifactId>itext</artifactId>-->
<!-- <version>2.1.7.js8</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>net.sf.jasperreports</groupId>-->
<!-- <artifactId>jasperreports-htmlcomponent</artifactId>-->
<!-- <version>4.1.1</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>net.sf.jasperreports</groupId>-->
<!-- <artifactId>jasperreports-htmlcomponent</artifactId>-->
<!-- <version>4.1.1</version>-->
<!-- </dependency>-->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
@@ -281,61 +281,61 @@
</dependency>
<!-- SOSTITUISCONO batik-all -->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-awt-util</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-awt-util</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-bridge</artifactId>
<version>1.17</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-css</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-dom</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-ext</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-gvt</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-parser</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-svg-dom</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-transcoder</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-util</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-xml</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-css</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-dom</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-ext</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-gvt</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-parser</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-svg-dom</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-transcoder</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-util</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>org.apache.xmlgraphics</groupId>-->
<!-- <artifactId>batik-xml</artifactId>-->
<!-- <version>1.9</version>-->
<!-- </dependency>-->
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
@@ -425,6 +425,12 @@
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
@@ -496,6 +502,16 @@
<artifactId>log4j-web</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.36</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
@@ -512,7 +528,7 @@
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.39.2.0</version>
<version>3.41.2.2</version>
</dependency>
<dependency>
@@ -524,14 +540,14 @@
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-text</artifactId>
<version>1.9</version>
<version>1.10.0</version>
</dependency>
<!-- UTILS -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.0</version>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>javax</groupId>
@@ -546,12 +562,12 @@
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.5</version>
<version>3.9.0</version>
</dependency>
<dependency>
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.0</version>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.google.maps</groupId>
@@ -634,11 +650,11 @@
</dependency>
<!-- Needed for Firebase 9.4.2 -->
<!-- <dependency>-->
<!-- <groupId>com.google.auth</groupId>-->
<!-- <artifactId>google-auth-library-credentials</artifactId>-->
<!-- <version>1.28.0</version>-->
<!-- </dependency>-->
<!-- <dependency>-->
<!-- <groupId>com.google.auth</groupId>-->
<!-- <artifactId>google-auth-library-credentials</artifactId>-->
<!-- <version>1.28.0</version>-->
<!-- </dependency>-->
<!-- Video -->

View File

@@ -222,7 +222,7 @@ public class EmsController {
} else {
byte[] stream = Base64Utility.decodeBase64Zipped(encodedFile);
if (stream != null) {
printerService.print(printerName, new ByteArrayInputStream(stream), mimeType);
printerService.print(printerName, new ByteArrayInputStream(stream), mimeType, 1);
response = new ServiceRestResponse(EsitoType.OK);
} else {

View File

@@ -2,13 +2,7 @@ package it.integry.ems.devices;
import it.integry.common.var.CommonConstants;
import it.integry.ems.devices.dto.RegisterDeviceRequestDTO;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.response.ServiceRestResponse;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
@@ -17,42 +11,14 @@ import org.springframework.web.bind.annotation.*;
@RequestMapping("device")
public class DevicesController {
private final Logger logger = LogManager.getLogger();
@Autowired
private MultiDBTransactionManager multiDBTransactionManager;
@Autowired
private RequestDataDTO requestDataDTO;
@Autowired
private DevicesService devicesService;
@Deprecated
@RequestMapping(value = "register", method = RequestMethod.POST)
public @ResponseBody
ServiceRestResponse register(@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody RegisterDeviceRequestDTO registerDeviceRequestDTO) throws Exception {
public @ResponseBody ServiceRestResponse register(@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody Object registerDeviceRequestDTO) throws Exception {
DevicesService.App application = null;
switch (registerDeviceRequestDTO.getApp().toLowerCase()) {
case "wms":
application = DevicesService.App.WMS;
break;
case "wingest":
application = DevicesService.App.Wingest;
break;
case "textiles":
application = DevicesService.App.Textiles;
break;
case "agribook":
application = DevicesService.App.Agribook;
break;
}
if(application == null)
throw new Exception("Impossibile riconoscere l'applicativo");
devicesService.register(application, requestDataDTO.getDeviceId());
//TODO: To be removed
//Mantenuto solo per lasciare compatibilità con le vecchie versioni del WMS
//Non serve più per >= v1.45.00
return ServiceRestResponse.createPositiveResponse();
}

View File

@@ -1,46 +1,38 @@
package it.integry.ems.devices;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.security.service.DeviceService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ContextLoader;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
@Scope("request")
public class DevicesRequestInterceptor extends HandlerInterceptorAdapter {
public class DevicesRequestInterceptor implements HandlerInterceptor {
private final Logger logger = LogManager.getLogger();
@Autowired
private SettingsModel settingsModel;
@Autowired
private DevicesService devicesService;
@Override
public boolean preHandle(
HttpServletRequest request,
HttpServletResponse response, Object handler) {
try {
DeviceService deviceService = ContextLoader.getCurrentWebApplicationContext().getBean(DeviceService.class);
RequestDataDTO requestDataDTO = ContextLoader.getCurrentWebApplicationContext().getBean(RequestDataDTO.class);
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
if (requestDataDTO.isValidProfileDB() && requestDataDTO.isValidDeviceId()) {
devicesService.updateUsage(multiDBTransactionManager.getPrimaryConnection(), requestDataDTO.getDeviceId());
deviceService.updateUsage(requestDataDTO.getApplication(), requestDataDTO.getDeviceId());
}
return true;
} catch (Exception ex) {
ex.printStackTrace();
logger.error(ex.getMessage(), ex);
return false;
}

View File

@@ -1,72 +0,0 @@
package it.integry.ems.devices;
import it.integry.ems._context.ApplicationContextProvider;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.sync.MultiDBTransaction.Connection;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.user.UserSession;
import it.integry.ems_model.entity.StbDevices;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityLocalDate;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import org.springframework.web.context.ContextLoader;
import java.util.Date;
@Service
public class DevicesService {
public enum App {
WMS,
Wingest,
Textiles,
Agribook
}
private final Logger logger = LogManager.getLogger();
public void register(App application, String deviceId) throws Exception {
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
EntityProcessor entityProcessor = ApplicationContextProvider.getApplicationContext().getBean(EntityProcessor.class);
UserSession userSession = ContextLoader.getCurrentWebApplicationContext().getBean(UserSession.class);
if (!userSession.isAttivo()) {
throw new UsernameNotFoundException("Utente " + userSession.getUsername() + " non riconoscuto!");
}
String appName = application.name();
String selectSql = Query.format("SELECT CAST(COUNT(*) AS BIT) AS exist FROM stb_devices " +
" WHERE identification_id = {}", deviceId);
boolean exists =
UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), selectSql);
if (!exists) {
StbDevices stbDevices = new StbDevices()
.setName(appName)
.setIdentificationId(deviceId)
.setCreatedAt(new Date())
.setLastUse(new Date());
stbDevices.setOperation(OperationType.INSERT_OR_UPDATE);
entityProcessor.processEntity(stbDevices, multiDBTransactionManager);
}
}
public void updateUsage(Connection connection, String deviceId) throws Exception {
String updateSql = Query.format("UPDATE stb_devices " +
" SET last_use = {}" +
" WHERE identification_id = {}", UtilityLocalDate.getNowTime(), deviceId);
UtilityDB.executeSimpleUpdate(connection, updateSql);
}
}

View File

@@ -1,15 +0,0 @@
package it.integry.ems.devices.dto;
public class RegisterDeviceRequestDTO {
private String app;
public String getApp() {
return app;
}
public RegisterDeviceRequestDTO setApp(String app) {
this.app = app;
return this;
}
}

View File

@@ -37,7 +37,7 @@ public class RequestDataDTO {
private String requestClientIP;
private String profileDB;
private String deviceId;
private Long deviceId;
private String username;
private String password;
private boolean includeNulls = false;
@@ -55,10 +55,6 @@ public class RequestDataDTO {
profileDB = request.getHeader(CommonConstants.PROFILE_DB);
}
if (request != null && request.getHeader(EmsRestConstants.DEVICE_ID) != null) {
deviceId = request.getHeader(EmsRestConstants.DEVICE_ID);
}
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && !(authentication instanceof AnonymousAuthenticationToken)) {
readAuthenticationClaims(authentication);
@@ -107,7 +103,7 @@ public class RequestDataDTO {
}
public boolean isValidDeviceId() {
return !UtilityString.isNullOrEmpty(deviceId);
return deviceId != null;
}
public boolean isValidUsername() {
@@ -136,7 +132,7 @@ public class RequestDataDTO {
return profileDB;
}
public String getDeviceId() {
public Long getDeviceId() {
return deviceId;
}
@@ -173,10 +169,10 @@ public class RequestDataDTO {
private void readAuthenticationClaims(Authentication authentication) {
username = authentication.getName();
//final UsernamePasswordAuthenticationToken principal = (UsernamePasswordAuthenticationToken) authentication.getPrincipal();
final AuthTokenDetails authTokenDetails = (AuthTokenDetails) authentication.getDetails();
userDTO = authTokenDetails.getUserDTO();
deviceId = authTokenDetails.getDeviceId();
}
}

View File

@@ -1,5 +1,7 @@
package it.integry.ems.migration._base;
import java.util.Arrays;
public enum IntegryCustomer {
Agricoper(IntegryCustomerDB.Agricoper_Agricoper,
@@ -87,7 +89,7 @@ public enum IntegryCustomer {
Midel(IntegryCustomerDB.Midel_Midel),
Morgante(IntegryCustomerDB.Morgante_Morgante),
Querceta(IntegryCustomerDB.Querceta_MasserieAmiche),
ResinaColor(IntegryCustomerDB.ResinaColor_ResinaColor),
ResinaColor(IntegryCustomerDB.ResinaColor_ResinaColor, IntegryCustomerDB.ResinaColor_ResinaColorPasquale),
RistoCash(IntegryCustomerDB.RistoCash_RistoCash),
RossoGargano(IntegryCustomerDB.RossoGargano_RossoGargano, IntegryCustomerDB.RossoGargano_RossoGarganoCont),
Salpar(IntegryCustomerDB.Salpar_AlfaImmobiliare,
@@ -137,4 +139,13 @@ public enum IntegryCustomer {
public IntegryCustomerDB[] getValues() {
return values;
}
public static IntegryCustomer getFromDB(IntegryCustomerDB customerDB) {
if(customerDB == null)
return null;
return Arrays.stream(values()).filter(x -> Arrays.stream(x.getValues()).anyMatch(y -> y == customerDB))
.findFirst()
.orElse(null);
}
}

View File

@@ -1,5 +1,9 @@
package it.integry.ems.migration._base;
import it.integry.ems_model.utility.UtilityString;
import java.util.Arrays;
public enum IntegryCustomerDB {
Agricoper_Agricoper("agricoper"),
Agricoper_IlVisone("ilvisone"),
@@ -138,7 +142,7 @@ public enum IntegryCustomerDB {
ResinaColor_ResinaColor("resinacolor"),
ResinaColor_ResinaColorPasquale("resinacolor_pasquale"),
RistoCash_RistoCash("risto_cash"),
@@ -211,4 +215,13 @@ public enum IntegryCustomerDB {
public String getValue() {
return value;
}
public static IntegryCustomerDB parse(String value) {
if(UtilityString.isNullOrEmpty(value))
return null;
return Arrays.stream(values()).filter(x -> x.getValue().equalsIgnoreCase(value))
.findFirst()
.orElse(null);
}
}

View File

@@ -0,0 +1,23 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250217161355 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
String val = "N";
if (isCustomer(IntegryCustomer.RossoGargano))
val = "S";
createSetup("PVM","MONITORAGGIO_LINEE_V2","CAN_CREATE_UL_FROM_EAN",val,"Se impostato permette dal MES la creazione di una ul a partire dal barcode ean128","SI_NO");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,38 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems_model.utility.dto.IndexTableDTO;
import java.util.Arrays;
public class Migration_20250307115037 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("ALTER TABLE wtb_jrept_setup ADD cod_dtip VARCHAR(5)");
executeStatement("ALTER TABLE wtb_jrept_setup\n" +
"ADD CONSTRAINT wtb_jrept_setup_dtb_tipi_cod_dtip_fk FOREIGN KEY (cod_dtip)\n" +
"REFERENCES dtb_tipi(cod_dtip)");
dropIndex("wtb_jrept_setup", "wtb_jrept_setup_cod_mdep_tipo_cod_anag_uindex");
createIndex(new IndexTableDTO()
.setIndexName("idx_wtb_jrept_setup_unique")
.setTableName("wtb_jrept_setup")
.setColumnsIndex(Arrays.asList(
new IndexTableDTO.ColumnIndex("cod_mdep"),
new IndexTableDTO.ColumnIndex("tipo"),
new IndexTableDTO.ColumnIndex("cod_anag"),
new IndexTableDTO.ColumnIndex("cod_dtip")))
.setUnique(true));
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,6 +1,7 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250307174236 extends BaseMigration implements MigrationModelInterface {
@@ -10,6 +11,9 @@ public class Migration_20250307174236 extends BaseMigration implements Migration
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
createOrUpdateFunction("expodeDistCostiAll", "CREATE FUNCTION [dbo].[expodeDistCostiAll](@codProd varchar(15), \n" +
" @qtaProd numeric(20,5),\n" +
" @tipoCalc varchar(1), \n" +

View File

@@ -0,0 +1,732 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250311105226 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
createOrUpdateFunction("f_ExplodeDistProdCosti", "CREATE Function [dbo].[f_ExplodeDistProdCosti] ( @as_codPArent varchar(15), \n" +
" @as_codProd varchar(15), \n" +
" @ac_qtaProd decimal(20,5), \n" +
" @ai_idRiga integer, \n" +
" @ai_livello integer, \n" +
" @as_itemID varchar(1024), \n" +
" @as_tipoCalc varchar(1), \n" +
" @adt_data datetime,\n" +
" @as_flagIgnoraPRI varchar(1),\n" +
" @as_codProdPRI varchar(15), \n" +
" @ai_livelloPRI integer, \n" +
" @as_flagIgnoraChkLastProd varchar(1),\n" +
" @as_flagPRI varchar(1),\n" +
" @as_untMisProd varchar(3), \n" +
" @ac_rapConvProd decimal(20,10)) \n" +
"RETURNS @distinta TABLE(cod_parent varchar(15), \n" +
" cod_prod varchar(15), \n" +
" descrizione varchar(40), \n" +
" descrizione_estesa varchar(1024),\n" +
" unt_mis_prod varchar(3),\n" +
" rap_conv_prod decimal(20,10),\n" +
" qta_prod decimal(20,5), \n" +
" flag_foglia varchar(1), \n" +
" livello integer,\n" +
" item_id varchar(1024),\n" +
" costo_materiali decimal(20,5),\n" +
" costo_servizi decimal(20,5),\n" +
" costo_manodopera decimal(20,5),\n" +
" costo_manodopera_magaz decimal(20,5),\n" +
" costo_semilavorato decimal(20,5),\n" +
" tempo_lavoro decimal(20,5),\n" +
" risorse_umane decimal(20,5),\n" +
" flag_pri varchar(1),\n" +
" cod_prod_pri varchar(15), \n" +
" livello_pri integer,\n" +
" setup_time decimal(20,5),\n" +
" hr_time decimal(20,5),\n" +
" note_riga varchar(4096),\n" +
" data_ult_acq datetime,\n" +
" costo_ult_acq decimal(20,5)) AS\n" +
"BEGIN\n" +
" DECLARE \n" +
" @li_count INTEGER,\n" +
" @ls_descrizione varchar(40),\n" +
" @ls_descrizioneEstesa varchar(1024),\n" +
" @ls_untMisProd varchar(3), \n" +
" @lc_rapConvProd decimal(20,10),\n" +
" @li_flagFoglia integer,\n" +
" @li_livello integer, \n" +
" @ls_itemID varchar(1024), \n" +
" @lc_costoMateriali decimal(20,5), \n" +
" @lc_costoServizio decimal(20,5), \n" +
" @lc_costoServizioPerc decimal(20,5),\n" +
" @lc_costoManodopera decimal(20,5),\n" +
" @lc_costoManodoperaDir decimal(20,5),\n" +
" @lc_costoManodoperaMagaz decimal(20,5),\n" +
" @lc_tempoLav decimal(20,5), \n" +
" @lc_costoSemilavorato decimal(20,5),\n" +
" @li_countLavInterna integer,\n" +
" @li_countLavEsterna integer,\n" +
" @li_countLavInternaIniz integer,\n" +
" @li_countLavEsternaIniz integer,\n" +
" @lc_qtaProdDist decimal(20,5),\n" +
" @lc_rapporto decimal(20,5),\n" +
" @li_idRiga integer,\n" +
" @ls_codMate varchar(15),\n" +
" @ls_untMisMate varchar(3),\n" +
" @lc_qtaMate decimal(20,5),\n" +
" @ls_flagPRI varchar(1),\n" +
" @ls_flagPRIMate varchar(1),\n" +
" @lc_risorseUmane decimal(20,5),\n" +
" @ls_codProdPRI varchar(15),\n" +
" @li_livelloPRI integer,\n" +
" @ls_lastProdIsAcq varchar(1), \n" +
" @ls_gestione varchar(1),\n" +
" @lc_costo decimal(20,5),\n" +
" @lc_setupTime decimal(20,5),\n" +
" @lc_hrTime decimal(20,5),\n" +
" @li_hrTimePRI decimal(20,5),\n" +
" @lc_costoManodoperaPRI decimal(20,5),\n" +
" @li_lenItemID integer,\n" +
" @ls_itemIDPRI varchar(1024),\n" +
" @ls_codJfas varchar(5),\n" +
" @ls_codJfasChecked varchar(10),\n" +
" @ls_untMis varchar(3),\n" +
" @lc_rapConv decimal(20,10),\n" +
" @li_existFasiNoCheck int,\n" +
" @li_numOrd int,\n" +
" @ls_existProdEsterna varchar(1),\n" +
" @ldt_dataOrd datetime,\n" +
" @ls_elencoDocCheckCriterioProd varchar(1024),\n" +
" @ls_noteRiga varchar(4096),\n" +
" @ls_errMsg varchar(4096),\n" +
" @ldt_dataUltAcq datetime,\n" +
" @lc_costoUltAcq decimal(20,5), \n" +
" @ls_calcCostoRisorse varchar(1),\n" +
" @isMiscela bit;\n" +
" \n" +
" /*Inizializzazione variabili*/\n" +
" SELECT @li_lenItemID = 6;\n" +
" SELECT @li_livello = @ai_livello;\n" +
" SELECT @lc_costoMateriali = 0; \n" +
" SELECT @lc_costoServizio = 0; \n" +
" SELECT @lc_costoManodopera = 0;\n" +
" SELECT @lc_costoManodoperaMagaz = 0;\n" +
" SELECT @lc_costoSemilavorato = 0;\n" +
" SELECT @lc_tempoLav = 0;\n" +
" SELECT @li_countLavInterna = 0;\n" +
" SELECT @li_countLavEsterna = 0;\n" +
" SELECT @li_count = 0;\n" +
" SELECT @ls_lastProdIsAcq = 'N';\n" +
" SELECT @lc_setupTime = 0;\n" +
" SELECT @lc_hrTime = 0;\n" +
" SELECT @li_existFasiNoCheck = 0;\n" +
" SELECT @ls_existProdEsterna = 'N';\n" +
"\n" +
" /* Se il tipo calcolo è diverso da M = COSTO MEDIO, L = COSTO LISTINO allora si tratta di costo ultimo */\n" +
" IF @as_tipoCalc <> 'M' AND @as_tipoCalc <> 'L' \n" +
" SELECT @as_tipoCalc = 'U'\n" +
"\n" +
" \n" +
" /* Verifica se si tratta di una distinta base o di una materia prima*/\n" +
" SELECT @lc_qtaProdDist = round(jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod, 5),\n" +
" @li_count = count(*),\n" +
" @li_countLavEsternaIniz = sum(CASE WHEN jtb_dist_clav_dir.cod_jfas is null AND gtb_spes.tipo_calcolo = 'LAVORAZIONE' THEN 1 ELSE 0 END),\n" +
" @li_countLavInternaIniz = sum(CASE WHEN jtb_dist_clav_dir.cod_jfas is not null OR ( jtb_dist_clav_dir.cod_jfas is null and gtb_spes.tipo_calcolo = 'MANO D OPERA') THEN 1 ELSE 0 END),\n" +
" @ls_codJfas = jtb_cicl.cod_jfas\n" +
" FROM jtb_cicl LEFT OUTER JOIN jtb_dist_clav_dir ON jtb_cicl.cod_prod = jtb_dist_clav_dir.cod_prod\n" +
" LEFT OUTER join gtb_spes on jtb_dist_clav_dir.cod_jcos_dir = gtb_spes.cod_spes \n" +
" WHERE jtb_cicl.cod_prod = @as_CodProd\n" +
" GROUP BY jtb_cicl.qta_prod,\n" +
" jtb_cicl.rap_conv_prod,\n" +
" jtb_cicl.cod_jfas;\n" +
"\n" +
" SELECT @isMiscela = Cast(count(*) as BIT)\n" +
" from dbo.ParseStringIntoArray((select dbo.getGestSetup('DTB_DOCT','MOVIMENTAZIONE_OLIO','COD_MART_MISCELA')), '|')\n" +
" WHERE value_string = @as_codProd\n" +
" \n" +
" SELECT @li_countLavEsterna = @li_countLavEsternaIniz;\n" +
" SELECT @li_countLavInterna = @li_countLavInternaIniz;\n" +
" SELECT @ls_codJfasChecked = '|' + @ls_codJfas + '|';\n" +
"\n" +
" /* Acquisizione elenco documenti su cui effettuare eventualmente la verifica sul criterio \n" +
" produttivo direttamente da ordine se la distinta prevede solo lavorazione esterna*/\n" +
" SELECT @ls_elencoDocCheckCriterioProd = value\n" +
" FROM stb_gest_setup \n" +
" WHERE gest_name = 'F_EXPLODE_DIST' AND \n" +
" section = 'SETUP' AND\n" +
" key_section = 'TIPO_DOC_CHECK_CRITERIO_PROD';\n" +
"\n" +
" /* Verifica esistenza gestione risorse nel calcolo del costo di prodotto */\n" +
" SELECT @ls_calcCostoRisorse = value\n" +
" FROM stb_gest_setup \n" +
" WHERE gest_name = 'F_EXPLODE_DIST' AND \n" +
" section = 'SETUP' AND\n" +
" key_section = 'GESTISTI_RISORSE_IN_CALC_COSTO';\n" +
"\n" +
" /* Verifica esistenza fasi di cui acquisire direttamente acquisto e servizio*/\n" +
" SELECT @li_existFasiNoCheck = COUNT(*)\n" +
" FROM stb_gest_setup \n" +
" WHERE gest_name = 'F_EXPLODE_DIST' AND \n" +
" section = 'SETUP' AND\n" +
" key_section = 'FASI_DA_NON_VERIFICARE' AND\n" +
" CHARINDEX(@ls_codJfasChecked, value) <> 0; \n" +
" \n" +
" if @li_count > 0 AND @isMiscela = 0 AND IsNull(@as_codPArent, '') <> @as_codProd\n" +
" begin\n" +
" SELECT @li_flagFoglia = 0;\n" +
" if (@lc_qtaProdDist != 0 )\n" +
" SELECT @lc_rapporto = round(@ac_qtaProd / @lc_qtaProdDist, 5);\n" +
" else\n" +
" SELECT @lc_rapporto = 0;\n" +
" \n" +
" SELECT @lc_risorseUmane = 0;\n" +
" \n" +
" /**********************************************************************************\n" +
" Acquizione dati distinta base prodotto\n" +
" Se il paramentro ai_idRiga = null allora vuol dire che si tratta della distinta \n" +
" padre in tal caso i dati anagrafici dovranno essere presi direttamente dalla \n" +
" distinta padre, altrimenti dovranno essere presi dalla riga della distinta base\n" +
" **********************************************************************************/\n" +
" if @ai_idRiga is null\n" +
" begin\n" +
" SELECT @ls_flagPRI = 'N';\n" +
" SELECT @ls_itemID = '00001';\n" +
" SELECT @ls_descrizione = descrizione_prod, \n" +
" @ls_descrizioneEstesa = descrizione_estesa,\n" +
" @ls_untMisProd = unt_mis_prod, \n" +
" @lc_rapConvProd = rap_conv_prod\n" +
" FROM jtb_cicl\n" +
" WHERE cod_prod = @as_CodProd;\n" +
" end\n" +
" else\n" +
" begin\n" +
" SELECT @ls_itemID = @as_itemID + '_' + REPLICATE('0', 5 - len(CONVERT(varchar(15), @ai_idRiga))) + CONVERT(varchar(15), @ai_idRiga);\n" +
" SELECT @ls_descrizione = descrizione, \n" +
" @ls_descrizioneEstesa = descrizione_estesa,\n" +
" @ls_untMisProd = unt_mis_dist, \n" +
" @lc_rapConvProd = rap_conv_dist,\n" +
" @ls_flagPRI = flag_pri\n" +
" FROM jtb_dist_mate\n" +
" WHERE cod_prod = @as_CodParent and\n" +
" id_riga = @ai_idRiga;\n" +
" \n" +
" /*Se non restituisce nessun dato allora i dati devono essere presei da jtb_cicl e qta e rap_conv da parametri passati*/ \n" +
" if @ls_descrizione is null\n" +
" begin\n" +
" SELECT @ls_descrizione = descrizione, \n" +
" @ls_descrizioneEstesa = descrizione_estesa,\n" +
" @ls_untMisProd = @as_untMisProd, \n" +
" @lc_rapConvProd = @ac_rapConvProd,\n" +
" @ls_flagPRI = 'N'\n" +
" FROM jtb_cicl\n" +
" WHERE cod_prod = @as_CodParent;\n" +
" end\n" +
" end\n" +
" \n" +
" /**************************************************************************\n" +
" Se si tratta di una fase particolare allora viene presa in considerazione\n" +
" la lavorazione esterna direttamente \n" +
" ***************************************************************************/\n" +
" if (@li_existFasiNoCheck <> 0)\n" +
" begin\n" +
" SELECT @li_countLavEsterna = 1;\n" +
" SELECT @li_countLavInterna = 0;\n" +
" end\n" +
" \n" +
" /**********************************************************************\n" +
" Acquisizione eventuali servizi associati alla distinta (num_fase = 0), \n" +
" se c'è una lavorazioni interne allora viene privileggiata quest'ultima\n" +
" in caso contrario se c'è una lavorazione esterna viene presa questa\n" +
" **********************************************************************/\n" +
" if @li_countLavEsterna <> 0 \n" +
" begin\n" +
" if @as_flagIgnoraChkLastProd = 'N' \n" +
" begin\n" +
" SELECT @ls_gestione = ISNULL(gestione,'L'), @lc_costo = ISNULL(costo, 0)\n" +
" FROM dbo.GetCostoTipoUltLavProd(@as_codProd, @adt_data); \n" +
" if @ls_gestione = 'L'\n" +
" begin\n" +
" /*SOLO SERVIZIO DI LAVORAZIONE*/\n" +
" SELECT @lc_costoServizio = round(@lc_costo * @ac_qtaProd, 5);\n" +
" SELECT @ls_lastProdIsAcq = 'N';\n" +
" end\n" +
" else\n" +
" begin\n" +
" /*PRODOTTO ACQUISTATO*/\n" +
" SELECT @lc_costoServizio = 0;\n" +
" SELECT @lc_costoMateriali = round(@lc_costo * @ac_qtaProd, 5);\n" +
" SELECT @ls_lastProdIsAcq = 'S';\n" +
" end\n" +
" end \n" +
" else \n" +
" begin\n" +
" if (@li_countLavEsterna <> 0 and @li_countLavInterna <> 0)\n" +
" select @lc_costoServizio = dbo.f_getCostoServizi(@as_codProd, @adt_data)\n" +
" else\n" +
" select @lc_costoServizio = 0\n" +
" end\n" +
"\n" +
" /*Se il costo servizi è uguale a zero allora viene letto il costo dalla distinta se presente*/ \n" +
" IF @lc_costoServizio = 0 --AND @ls_lastProdIsAcq = 'N'\n" +
" begin\n" +
" SELECT @lc_costoServizio = round(sum(jtb_dist_clav_dir.qta_lav * jtb_dist_clav_dir.val_unt / jtb_cicl.cambio_divi_cont)/jtb_cicl.qta_prod/jtb_cicl.rap_conv_prod * @ac_qtaProd, 5) \n" +
" FROM jtb_dist_clav_dir, \n" +
" jtb_cicl, gtb_spes\n" +
" WHERE jtb_cicl.cod_prod = @as_CodProd AND\n" +
" gtb_spes.tipo_calcolo IN ('LAVORAZIONE', 'LAVORAZIONE INDI', 'MATERIALI') AND\n" +
" jtb_dist_clav_dir.num_fase = 0 AND\n" +
" jtb_dist_clav_dir.cod_prod = jtb_cicl.cod_prod AND\n" +
" jtb_dist_clav_dir.cod_jcos_dir = gtb_spes.cod_spes AND\n" +
" jtb_dist_clav_dir.flag_fase_pref = 'S' \n" +
" GROUP BY jtb_cicl.qta_prod, jtb_cicl.rap_conv_prod; \n" +
" end \n" +
"\n" +
" \n" +
" /**********************************************************************\n" +
" Se si tratta di una fase particolare perÃÆÃ² non c'è stata alcuna \n" +
" produzione esterna allora ritorna la logica iniziale della lavorazione interna\n" +
" **********************************************************************/\n" +
" if (@li_existFasiNoCheck <> 0) and @ls_lastProdIsAcq = 'N'\n" +
" begin\n" +
" SELECT @li_countLavEsterna = @li_countLavEsternaIniz;\n" +
" SELECT @li_countLavInterna = @li_countLavInternaIniz;\n" +
" end\n" +
" \n" +
" end\n" +
" /*********************************************************************************/\n" +
" /* Acquisizione eventuali attivitÃÆÃ  assoicate alla distinta (num_fae <> 0) */\n" +
" /* il costo della manodopera viene distinto tra costo di magazzino, relativo */ \n" +
" /* a prodotti realizzati a magazzino e prodotti realizzati per commessa */\n" +
" /*********************************************************************************/\n" +
" if (@li_countLavInterna <> 0) \n" +
" begin\n" +
" \n" +
" SELECT @lc_costoManodopera = CASE WHEN ISNULL(jtb_cicl.flag_tipo_prod, '') <> 'S' THEN ISNULL(sum(ISNULL(hr_time, 0)*(round(@ac_qtaProd / round(jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod, 5), 5))/ 3600 * jtb_dist_clav_dir.val_unt ),0) ELSE 0 END ,\n" +
" @lc_costoManodoperaMagaz = CASE WHEN ISNULL(jtb_cicl.flag_tipo_prod, '') = 'S' THEN ISNULL(sum(ISNULL(hr_time, 0)*(round( @ac_qtaProd / round(jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod, 5), 5))/ 3600 * jtb_dist_clav_dir.val_unt ),0) ELSE 0 END ,\n" +
" @lc_tempoLav = ISNULL(sum(ISNULL(setup_time,0) + (ISNULL(hr_time,0)*(round(@ac_qtaProd / round(jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod, 5), 5)))),0) ,\n" +
" @lc_risorseUmane = ISNULL(sum(ISNULL(hr_num, 0)),0) ,\n" +
" @lc_setupTime = sum(ISNULL(setup_time,0)) ,\n" +
" @lc_hrTime = sum(ISNULL(hr_time,0)*(round(@ac_qtaProd / round(jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod, 5), 5))) \n" +
" FROM jtb_cicl INNER JOIN jtb_dist_clav_dir ON jtb_cicl.cod_prod = jtb_dist_clav_dir.cod_prod\n" +
" WHERE jtb_dist_clav_dir.cod_prod = @as_CodProd \n" +
" AND jtb_dist_clav_dir.cod_jfas is not null\n" +
" AND jtb_dist_clav_dir.flag_fase_pref = 'S' \n" +
" GROUP BY jtb_cicl.flag_tipo_prod;\n" +
"\n" +
" /*Aggiunta manodopera come costo a valore */\n" +
" SELECT @lc_costoManodoperaDir = Isnull(round(sum(jtb_dist_clav_dir.qta_lav * jtb_dist_clav_dir.val_unt / jtb_cicl.cambio_divi_cont)/jtb_cicl.qta_prod/jtb_cicl.rap_conv_prod * @ac_qtaProd, 5) , 0) \n" +
" FROM jtb_cicl INNER JOIN jtb_dist_clav_dir ON jtb_cicl.cod_prod = jtb_dist_clav_dir.cod_prod \n" +
" INNER JOIN gtb_spes ON jtb_dist_clav_dir.cod_jcos_dir = gtb_spes.cod_spes \n" +
" WHERE jtb_dist_clav_dir.cod_prod = @as_CodProd \n" +
" AND jtb_dist_clav_dir.cod_jfas is null and gtb_spes.tipo_calcolo = 'MANO D OPERA' \n" +
" AND jtb_dist_clav_dir.flag_fase_pref = 'S' \n" +
" GROUP BY jtb_cicl.qta_prod, jtb_cicl.rap_conv_prod;\n" +
"\n" +
" SET @lc_costoManodopera = @lc_costoManodopera + @lc_costoManodoperaDir;\n" +
" \n" +
" /*\n" +
" SELECT @lc_costoManodopera = costo_mdo,\n" +
" @lc_costoManodoperaMagaz = costo_mdo_magaz,\n" +
" @lc_tempoLav = tempo_lav,\n" +
" @lc_risorseUmane = num_risorse,\n" +
" @lc_setupTime = tempo_setup,\n" +
" @lc_hrTime = tempo_uomo\n" +
" from dbo.getDatiMDODistinta(@as_CodProd, @ac_qtaProd);\n" +
" */\n" +
"\n" +
" end \n" +
"\n" +
" /*Calcolo costi a percentuale */\n" +
" SELECT @lc_costoServizioPerc = round( CASE jtb_clav_ind.tipo_calcolo \n" +
" WHEN 'M' THEN \n" +
" @lc_costoMateriali\n" +
" WHEN 'D' THEN \n" +
" @lc_costoMateriali + @lc_costoManodopera + @lc_costoServizio\n" +
" END * jtb_dist_clav_ind.perc_cost / 100, 5) \n" +
" FROM jtb_dist_clav_ind, jtb_clav_ind\n" +
" WHERE jtb_dist_clav_ind.cod_prod = @as_CodProd AND \n" +
" tipo_costo in ( 'MATERIALI', 'LAVORAZIONE','LAVORAZIONE INDI') AND \n" +
" jtb_dist_clav_ind.cod_jcos_ind = jtb_clav_ind.cod_jcos_ind\n" +
"\n" +
" IF @lc_costoServizioPerc > 0\n" +
" begin \n" +
" set @lc_costoServizio = @lc_costoServizio + @lc_costoServizioPerc\n" +
" end\n" +
" \n" +
" if @as_flagIgnoraPRI = 'S' \n" +
" SELECT @ls_flagPRI = 'N';\n" +
" \n" +
" /*Inserimento prodotto padre */\n" +
" insert into @distinta values(@as_codParent, \n" +
" @as_codProd, \n" +
" @ls_descrizione,\n" +
" @ls_descrizioneEstesa,\n" +
" @ls_untMisProd, \n" +
" @lc_rapConvProd,\n" +
" @ac_qtaProd, \n" +
" @li_flagFoglia,\n" +
" @li_livello, \n" +
" @ls_itemID, \n" +
" @lc_costoMateriali, \n" +
" @lc_costoServizio, \n" +
" @lc_costoManodopera, \n" +
" @lc_costoManodoperaMagaz,\n" +
" @lc_costoSemilavorato,\n" +
" @lc_tempoLav,\n" +
" @lc_risorseUmane, \n" +
" @ls_flagPRI,\n" +
" @as_codProdPRI, \n" +
" @ai_livelloPRI,\n" +
" @lc_setupTime, \n" +
" @lc_hrTime, \n" +
" null,\n" +
" null,\n" +
" null);\n" +
" \n" +
" if @ls_lastProdIsAcq = 'N' OR @as_flagIgnoraChkLastProd = 'S' OR (@li_countLavEsterna <> 0 and @li_countLavInterna = 0 and @ls_lastProdIsAcq = 'N')\n" +
" begin\n" +
" /*Se il semilavorato ha la sola lavorazione esterna allora è necessario acquisire il criterio \n" +
" produttivo direttamente dall'ultima produzione fatta per il semilavorato in questione se il tipo \n" +
" documento è tra quelli su cui effettare tale controllo*/\n" +
" if @li_countLavEsterna <> 0 and @li_countLavInterna = 0\n" +
" begin\n" +
" /*Acquisizione ultima produzione esterna effettuata*/\n" +
" select @li_numOrd = null;\n" +
" select TOP 1 @ls_gestione = dtb_tipi.gestione, \n" +
" @ldt_dataOrd = dtb_docr.data_ord,\n" +
" @li_numOrd = dtb_docr.num_ord\n" +
" from dtb_docr, \n" +
" dtb_tipi \n" +
" where cod_mart = @as_CodProd and\n" +
" dtb_docr.cod_dtip = dtb_tipi.cod_dtip and\n" +
" dtb_tipi.segno_qta_car = 1 and\n" +
" dtb_tipi.gestione = 'L' and\n" +
" dtb_tipi.tipo_emissione = 'DIRETTA' and\n" +
" dtb_docr.data_doc <= @adt_data and \n" +
" CHARINDEX('|' + dtb_docr.cod_dtip + '|', @ls_elencoDocCheckCriterioProd) <> 0\n" +
" order by data_doc desc, num_doc desc\n" +
" \n" +
" if @li_numOrd is not null\n" +
" begin\n" +
" /*Acquisizione criterio produttivo ultima produzione esterna */\n" +
" select @ls_existProdEsterna = 'S';\n" +
" Declare csr_righeDist Cursor LOCAL SCROLL FOR\n" +
" select ROW_NUMBER() over (partition by dtb_ordr.gestione, dtb_ordr.data_ord, dtb_ordr.num_ord order by dtb_ordr.gestione, dtb_ordr.data_ord, dtb_ordr.num_ord) * 1000 as id_riga, \n" +
" dtb_ordr.cod_mart,\n" +
" (dtb_ordr.qta_ord * dtb_ordr.rap_conv / dtb_ordt.qta_prod) * @lc_rapporto as qta,\n" +
" 'N' as flag_pri,\n" +
" unt_ord, \n" +
" rap_conv\n" +
" from dtb_ordr, \n" +
" dtb_ordt\n" +
" where dtb_ordr.gestione = @ls_gestione and\n" +
" dtb_ordr.data_ord = @ldt_dataOrd and\n" +
" dtb_ordr.num_ord = @li_numOrd and\n" +
" dtb_ordt.gestione = dtb_ordr.gestione and\n" +
" dtb_ordt.data_ord = dtb_ordr.data_ord and\n" +
" dtb_ordt.num_ord = dtb_ordr.num_ord and\n" +
" dtb_ordt.flag_annulla = 'N' and\n" +
" dtb_ordr.flag_evaso <> 'A';\n" +
" end\n" +
" end\n" +
" \n" +
" if @ls_existProdEsterna = 'N'\n" +
" begin\n" +
" /*Acquisizione righe distinte*/\n" +
" Declare csr_righeDist Cursor LOCAL SCROLL FOR\n" +
" SELECT jtb_dist_mate.id_riga,\n" +
" jtb_dist_mate.cod_mart, \n" +
" jtb_dist_mate.qta_std * jtb_dist_mate.rap_conv_dist * @lc_rapporto * (1 + jtb_dist_mate.perc_sfrido/100),\n" +
" jtb_dist_mate.flag_pri, \n" +
" jtb_dist_mate.unt_mis_dist,\n" +
" jtb_dist_mate.rap_conv_dist\n" +
" FROM jtb_dist_mate\n" +
" WHERE jtb_dist_mate.cod_prod = @as_codProd \n" +
" end\n" +
" \n" +
" OPEN csr_righeDist\n" +
" FETCH NEXT FROM csr_righeDist INTO @li_idRiga, @ls_codMate, @lc_qtaMate, @ls_flagPRIMate, @ls_untMis, @lc_rapConv\n" +
" WHILE @@FETCH_STATUS = 0\n" +
" BEGIN\n" +
" /*Solo se non si tratta di produzione inscinbile oppure si è deciso di ignnorare \n" +
" la produzione inscindibile allora il livello deve essere incrementato */\n" +
" --if @as_flagIgnoraPRI = 'S' or @ls_flagPRIMate = 'N'\n" +
" if @ls_flagPRI = 'N' or @as_flagIgnoraPRI = 'S'\n" +
" SELECT @li_livello = @ai_livello + 1;\n" +
" \n" +
" if @as_flagIgnoraPRI = 'S' or @ls_flagPRIMate = 'N'\n" +
" begin\n" +
" SELECT @ls_codProdPRI = @as_codParent; /*@as_codProd*/\n" +
" SELECT @li_livelloPRI = @ai_livello;\n" +
" end\n" +
" else\n" +
" begin\n" +
" IF @as_codProdPRI IS NOT NULL\n" +
" BEGIN\n" +
" if @as_flagPRI = 'S' AND @ls_flagPRIMate = 'S'\n" +
" begin\n" +
" SELECT @ls_codProdPRI = @as_codProdPRI;\n" +
" SELECT @li_livelloPRI = @ai_livelloPRI;\n" +
" end\n" +
" else\n" +
" begin\n" +
" SELECT @ls_codProdPRI = @as_codProd;\n" +
" SELECT @li_livelloPRI = @ai_livello;\n" +
" end\n" +
" END \n" +
" ELSE\n" +
" BEGIN\n" +
" SELECT @ls_codProdPRI = @as_codProd;\n" +
" SELECT @li_livelloPRI = @ai_livello;\n" +
" END\n" +
" end \n" +
" \n" +
" /*Invocazione funzione ricorsiva*/ \n" +
" INSERT INTO @distinta \n" +
" SELECT dist.cod_parent, \n" +
" dist.cod_prod, \n" +
" dist.descrizione, \n" +
" dist.descrizione_estesa,\n" +
" dist.unt_mis_prod,\n" +
" dist.rap_conv_prod,\n" +
" dist.qta_prod, \n" +
" dist.flag_foglia,\n" +
" dist.livello,\n" +
" dist.item_id,\n" +
" dist.costo_materiali,\n" +
" dist.costo_servizi,\n" +
" dist.costo_manodopera, \n" +
" dist.costo_manodopera_magaz,\n" +
" dist.costo_semilavorato,\n" +
" dist.tempo_lavoro, \n" +
" dist.risorse_umane,\n" +
" dist.flag_pri,\n" +
" dist.cod_prod_pri, \n" +
" dist.livello_pri,\n" +
" dist.setup_time, \n" +
" dist.hr_time,\n" +
" dist.note_riga,\n" +
" dist.data_ult_acq,\n" +
" dist.costo_ult_acq\n" +
" FROM dbo.f_explodeDistProdCosti(@as_codProd,@ls_codMate, @lc_qtaMate, @li_idRiga, @li_livello, @ls_itemID, @as_tipoCalc, @adt_data, @as_flagIgnoraPRI, @ls_codProdPRI, @li_livelloPRI, @as_flagIgnoraChkLastProd, @ls_flagPRIMate, @ls_untMis, @lc_rapConv ) dist\n" +
" \n" +
" /*Calcolo costo semilavorato*/\n" +
" SELECT @lc_costoSemilavorato = 0;\n" +
" if @as_flagPRI = 'S' AND @as_flagIgnoraPRI = 'N'\n" +
" begin\n" +
" SELECT @lc_costoSemilavorato = sum(ISNULL(costo_materiali, 0) + ISNULL(costo_servizi, 0))\n" +
" FROM @distinta\n" +
" WHERE item_id like @ls_itemID + '%' AND\n" +
" livello = @li_livello AND\n" +
" ISNULL(cod_parent,'') <> ISNULL(cod_prod, '');\n" +
" \n" +
" end\n" +
" else \n" +
" begin\n" +
" SELECT @lc_costoSemilavorato = sum(ISNULL(costo_materiali, 0) + ISNULL(costo_servizi, 0) + ISNULL(costo_manodopera, 0) + ISNULL(costo_manodopera_magaz, 0) + ISNULL(costo_semilavorato, 0))\n" +
" FROM @distinta\n" +
" WHERE item_id like @ls_itemID + '%' AND\n" +
" livello = @li_livello AND\n" +
" ISNULL(cod_parent,'') <> ISNULL(cod_prod, '');\n" +
" end \n" +
" \n" +
" /*Aggiornamento costo semilavorato*/ \n" +
" UPDATE @distinta\n" +
" SET costo_semilavorato = @lc_costoSemilavorato\n" +
" WHERE item_id = @ls_itemID AND\n" +
" livello = @li_livello -1 /*AND\n" +
" flag_pri = 'N'*/;\n" +
" IF @@ERROR <> 0 \n" +
" SELECT @ls_errMsg = ERROR_MESSAGE(); \n" +
" \n" +
" \n" +
" /* Aggiornamento codice padre materiali semilavorato inscindibile */\n" +
" if @ls_flagPRIMate = 'S' and @as_flagIgnoraPRI = 'N'\n" +
" UPDATE @distinta \n" +
" SET cod_parent = @as_codProd\n" +
" WHERE item_id like @ls_itemID + '_' + REPLICATE('0', 5 - len(CONVERT(varchar(15), @li_idRiga))) + CONVERT(varchar(15), @li_idRiga) + '_%' AND\n" +
" livello = @li_livello; \n" +
" IF @@ERROR <> 0 \n" +
" SELECT @ls_errMsg = ERROR_MESSAGE(); \n" +
" \n" +
"\n" +
" FETCH NEXT FROM csr_righeDist INTO @li_idRiga, @ls_codMate, @lc_qtaMate, @ls_flagPRIMate, @ls_untMis, @lc_rapConv\n" +
" END\n" +
" close csr_righeDist\n" +
" deallocate csr_righeDist\n" +
" \n" +
" if @as_codPArent is null and @as_flagIgnoraPRI = 'N'\n" +
" begin\n" +
" Declare csr_dist_pri Cursor LOCAL SCROLL FOR\n" +
" SELECT cod_prod_pri, \n" +
" livello_pri,\n" +
" item_id,\n" +
" sum(costo_servizi),\n" +
" sum(tempo_lavoro),\n" +
" sum(risorse_umane),\n" +
" sum(costo_manodopera),\n" +
" sum(costo_manodopera_magaz),\n" +
" sum(setup_time), \n" +
" sum(hr_time)\n" +
" FROM @distinta\n" +
" WHERE flag_pri = 'S' \n" +
" GROUP BY cod_prod_pri, \n" +
" livello_pri,\n" +
" item_id;\n" +
" \n" +
" OPEN csr_dist_pri\n" +
" FETCH NEXT FROM csr_dist_pri INTO @ls_codProdPRI, @li_livelloPRI, @ls_itemIDPRI, @lc_costoServizio, @lc_tempoLav, @lc_risorseUmane, @lc_costoManodopera, @lc_costoManodoperaMagaz, @lc_setupTime, @lc_hrTime\n" +
" WHILE @@FETCH_STATUS = 0\n" +
" BEGIN\n" +
" UPDATE @distinta\n" +
" SET costo_semilavorato = costo_semilavorato - @lc_costoManodopera,\n" +
" costo_servizi = costo_servizi + @lc_costoServizio,\n" +
" tempo_lavoro = tempo_lavoro + @lc_tempoLav, \n" +
" risorse_umane = risorse_umane + @lc_risorseUmane,\n" +
" costo_manodopera = costo_manodopera + @lc_costoManodopera,\n" +
" costo_manodopera_magaz = costo_manodopera_magaz + @lc_costoManodoperaMagaz,\n" +
" setup_time = setup_time + @lc_setupTime,\n" +
" hr_time = hr_time + @lc_hrTime\n" +
" FROM @distinta\n" +
" WHERE cod_prod = @ls_codProdPRI and\n" +
" livello = @li_livelloPRI and\n" +
" item_id like left(@ls_itemIDPRI, @li_livelloPRI * @li_lenItemID - 1) + '%';\n" +
" \n" +
" FETCH NEXT FROM csr_dist_pri INTO @ls_codProdPRI, @li_livelloPRI, @ls_itemIDPRI, @lc_costoServizio, @lc_tempoLav, @lc_risorseUmane, @lc_costoManodopera, @lc_costoManodoperaMagaz, @lc_setupTime, @lc_hrTime\n" +
" END\n" +
" close csr_dist_pri\n" +
" deallocate csr_dist_pri\n" +
" \n" +
" DELETE FROM @distinta\n" +
" WHERE flag_pri = 'S';\n" +
" end\n" +
" end\n" +
" end\n" +
" else\n" +
" begin\n" +
" /*Inizializzazione variabili*/\n" +
" SELECT @li_flagFoglia = 1;\n" +
" IF @as_tipoCalc = 'U'\n" +
" BEGIN\n" +
" SELECT @lc_costoMateriali = ISNULL(costo.costo,mtb_aart.val_ult_car) * @ac_qtaProd ,\n" +
" @ldt_dataUltAcq = costo.data_ult_car, \n" +
" @lc_costoUltAcq = costo.costo\n" +
" FROM (\n" +
" SELECT costoUlt.data_ult_car, \n" +
" costoUlt.costo\n" +
" FROM dbo.GetCostoUltArt(@as_codProd, @adt_data) costoUlt\n" +
" WHERE @isMiscela = 0\n" +
" UNION ALL\n" +
" SELECT null as data_ult_car, jtb_dist_mate.costo_unt\n" +
" FROM jtb_dist_mate\n" +
" where jtb_dist_mate.cod_mart = @as_codProd AND \n" +
" jtb_dist_mate.cod_prod = @as_codPArent AND\n" +
" @isMiscela = 1\n" +
" ) costo, \n" +
" mtb_aart\n" +
" WHERE mtb_aart.cod_mart = @as_codProd\n" +
" END \n" +
" ELSE IF @as_tipoCalc = 'M'\n" +
" BEGIN\n" +
" SELECT @lc_costoMateriali = ISNULL(costo.costoMed,0) * @ac_qtaProd ,\n" +
" @ldt_dataUltAcq = null, \n" +
" @lc_costoUltAcq = null\n" +
" FROM (\n" +
" SELECT dbo.f_GetCostoMedio(@adt_data, null, @as_codProd) costoMed) costo, \n" +
" mtb_aart\n" +
" WHERE mtb_aart.cod_mart = @as_codProd\n" +
" END \n" +
" ELSE IF @as_tipoCalc = 'L'\n" +
" BEGIN\n" +
" SELECT @lc_costoMateriali = ISNULL(costo.prz_acq,0) * @ac_qtaProd ,\n" +
" @ldt_dataUltAcq = null,\n" +
" @lc_costoUltAcq = null\n" +
" FROM ( select prz_acq from getListinoAcquisto(@adt_data, null, null, @as_codProd, 'S',null)costoList\n" +
" where flag_forn_pref = 'S') costo, \n" +
" mtb_aart\n" +
" WHERE mtb_aart.cod_mart = @as_codProd\n" +
" END\n" +
"\n" +
"\n" +
" SELECT @ls_itemID = @as_itemID + '_' + REPLICATE('0', 5 - len(CONVERT(varchar(15), @ai_idRiga))) + CONVERT(varchar(15), @ai_idRiga);\n" +
" \n" +
" /*Acquisizione dati materia prima */\n" +
" SELECT @ls_noteRiga = null;\n" +
" SELECT @ls_descrizione = descrizione, \n" +
" @ls_descrizioneEstesa = descrizione_estesa,\n" +
" @ls_untMisProd = unt_mis_dist, \n" +
" @lc_rapConvProd = rap_conv_dist, \n" +
" @ls_flagPRIMate = flag_pri,\n" +
" @ls_noteRiga = note\n" +
" FROM jtb_dist_mate\n" +
" WHERE cod_prod = @as_CodParent and\n" +
" id_riga = @ai_idRiga;\n" +
" \n" +
" /* Se non viene trovata la materia prima allora vuol dire che il padre è stata prodotto esternamente oppore \n" +
" è stato incluso in una produzione esterna e quindi bisognerÃÆÃ  acquisire le informazioni da anagrafica articolo */\n" +
" if @ls_descrizione is null\n" +
" begin\n" +
" SELECT @ls_descrizione = descrizione, \n" +
" @ls_descrizioneEstesa = descrizione_estesa,\n" +
" @ls_untMisProd = @as_untMisProd, \n" +
" @lc_rapConvProd = @ac_rapConvProd, \n" +
" @ls_flagPRIMate = 'N'\n" +
" FROM mtb_aart\n" +
" WHERE cod_mart = @as_CodProd;\n" +
" end\n" +
" \n" +
" if @as_flagIgnoraPRI = 'S' or @ls_flagPRIMate = 'N'\n" +
" begin\n" +
" SELECT @ls_flagPRI = 'N';\n" +
" SELECT @ls_codProdPRI = @as_codParent;\n" +
" SELECT @li_livelloPRI = @ai_livello;\n" +
" end\n" +
" else\n" +
" begin\n" +
" SELECT @ls_codProdPRI = @as_codProdPRI;\n" +
" SELECT @li_livelloPRI = @ai_livelloPRI;\n" +
" end \n" +
" \n" +
" /*Inserimento materia prima */ \n" +
" insert into @distinta values(@as_codParent, \n" +
" @as_codProd, \n" +
" @ls_descrizione,\n" +
" @ls_descrizioneEstesa,\n" +
" @ls_untMisProd, \n" +
" @lc_rapConvProd,\n" +
" @ac_qtaProd, \n" +
" @li_flagFoglia,\n" +
" @li_livello, \n" +
" @ls_itemID, \n" +
" @lc_costoMateriali, \n" +
" 0, \n" +
" 0, \n" +
" 0,\n" +
" 0,\n" +
" 0, \n" +
" 0,\n" +
" @ls_flagPRIMate, \n" +
" @ls_codProdPRI,\n" +
" @li_livelloPRI, \n" +
" 0,\n" +
" 0,\n" +
" @ls_noteRiga,\n" +
" @ldt_dataUltAcq,\n" +
" @lc_costoUltAcq);\n" +
" end\n" +
" return \n" +
"END ");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250311142733 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
executeStatement("ALTER TABLE dtb_doct ALTER COLUMN porto VARCHAR(80)",
"ALTER TABLE dtb_ordt ALTER COLUMN porto VARCHAR(80)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250311144116 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
executeStatement("ALTER TABLE dtb_dift ALTER COLUMN porto VARCHAR(80)",
"ALTER TABLE dtb_dif_bolle ALTER COLUMN porto VARCHAR(80)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,19 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250312095802 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("ALTER TABLE wtb_jrept_setup ADD print_duplex BIT NOT NULL DEFAULT 0");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,23 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250312101722 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
executeStatement("ALTER TABLE dtb_ordt ALTER COLUMN note_incoterms VARCHAR(40)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250313150320 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
executeStatement("UPDATE atb_forn SET flag_forfettario = 'N' WHERE flag_forfettario IS NULL",
"ALTER TABLE atb_forn ALTER COLUMN flag_forfettario VARCHAR(1) NOT NULL");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,37 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250313154415 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
updateSetupValue("w_mvalmag_disp", "SETUP", "CHECK_DISALLINEAMENTI", "S",
"Se impostato a S vuol dire che prima della valorizzazione di magazzino deve controllare se ci sono disallineamenti tra la MTB_SART e MTB_MOVI", false, null, false, false, false,
false, false, null, false, null);
executeStatement("DELETE\n" +
"FROM stb_gest_setup_depo\n" +
"WHERE gest_name = 'w_mvalmag_disp'\n" +
" AND section = 'SETUP'\n" +
" AND key_section = 'CHECK_DISALLINEAMENTI'"
);
executeStatement("DELETE\n" +
"FROM wtb_gest_setup_user\n" +
"WHERE gest_name = 'w_mvalmag_disp'\n" +
" AND section = 'SETUP'\n" +
" AND key_section = 'CHECK_DISALLINEAMENTI'"
);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,23 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250314135233 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("EXPORT_VARIAZIONE PV", "XML_DIALOGO", "EMAIL_FOR_OK", null,
"SE CONFIGURATA INIVA L'EMAIL CON LA CONFERMA DELL'AVVENTUA ESPORTAZIONE", false, null, false, false,
false, false, false, null, false, null);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,241 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250314163223 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
createOrUpdateProcedure("MRP_UpdateQtaImpProx", "CREATE Procedure [dbo].[MRP_UpdateQtaImpProx](@elencoArticoli varchar(max) = null)\n" +
"AS \n" +
"--DECLARE @elencoarticoli VARCHAR(MAX) --= 'CEB1TREORI6|CEB1LMS5|CEBB1MRCH2|CVINACBO1LEV2'\n" +
"--DROP TABLE #tmp\n" +
"\n" +
"SET NOCOUNT ON;\n" +
"DECLARE @tableart TABLE\n" +
" (\n" +
" cod_mart VARCHAR(15)\n" +
" );\n" +
"\n" +
"IF @elencoarticoli IS NOT NULL AND @elencoarticoli <> ''\n" +
" BEGIN\n" +
" INSERT INTO @tableart\n" +
" SELECT *\n" +
" FROM dbo.parsestringintoarray(@elencoarticoli, '|')\n" +
" END\n" +
"ELSE\n" +
" BEGIN\n" +
" INSERT INTO @tableart\n" +
" SELECT mtb_aart.cod_mart\n" +
" FROM mtb_aart\n" +
" INNER JOIN jtb_cicl ON mtb_aart.cod_mart = jtb_cicl.cod_mart\n" +
" WHERE mtb_aart.flag_stato = 'A'\n" +
" END;\n" +
"\n" +
"WITH imp_ordini AS (SELECT mtb_part.cod_mart,\n" +
" mtb_aart.unt_mis,\n" +
" CASE\n" +
" WHEN SUM(mtb_part.qta_imp_cli) > SUM(mtb_part.qta_esistente + mtb_part.qta_ord_for) THEN\n" +
" SUM(mtb_part.qta_imp_cli - (mtb_part.qta_esistente + mtb_part.qta_ord_for))\n" +
" ELSE 0 END AS qtadaprodurre,\n" +
" CASE\n" +
" WHEN SUM(mtb_part.qta_imp_cli) > SUM(mtb_part.qta_esistente + mtb_part.qta_ord_for) THEN\n" +
" SUM(mtb_part.qta_imp_cli - (mtb_part.qta_esistente + mtb_part.qta_ord_for)) /\n" +
" mtb_aart.qta_cnf\n" +
" ELSE 0 END AS numdaprodurre,\n" +
" SUM((mtb_part.qta_esistente + mtb_part.qta_ord_for) - mtb_part.qta_imp_cli) AS qta_disp\n" +
" \n" +
" FROM mtb_part\n" +
" INNER JOIN jtb_cicl ON mtb_part.cod_mart = jtb_cicl.cod_prod\n" +
" INNER JOIN mtb_aart ON mtb_part.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN @tableart a ON mtb_aart.cod_mart = a.cod_mart\n" +
" WHERE mtb_aart.flag_stato = 'A'\n" +
" GROUP BY mtb_part.cod_mart, mtb_aart.unt_mis, mtb_aart.qta_cnf\n" +
" HAVING SUM(mtb_part.qta_esistente + mtb_part.qta_ord_for) <> SUM(mtb_part.qta_imp_cli) \n" +
" \n" +
" \n" +
" )\n" +
" , imp_contratti AS ( SELECT c.cod_mart,\n" +
" ISNULL(SUM((qta_vend_contratto - qta_ord - qta_doc) /\n" +
" CASE WHEN c.rap_conv = 0 THEN 1 ELSE c.rap_conv END), 0) AS qtacontratto\n" +
" FROM vvw_contratti_vendita c\n" +
" INNER JOIN @tableart a ON c.cod_mart = a.cod_mart\n" +
" WHERE c.data_fine >= CAST(GETDATE() AS DATE)\n" +
" GROUP BY c.cod_mart\n" +
" HAVING ISNULL(SUM(qta_residua), 0) > 0)\n" +
" , imp_budget AS (SELECT b.cod_mart,\n" +
" SUM(qta_saldo) AS qta_bdg\n" +
" FROM ovw_budget_ordv b\n" +
" INNER JOIN @tableart a ON b.cod_mart = a.cod_mart\n" +
" WHERE CAST(GETDATE() AS DATE) BETWEEN b.data_iniz AND b.data_fine\n" +
" AND qta_saldo <> 0\n" +
" GROUP BY b.cod_mart)\n" +
" , tmp_impegni\n" +
" AS (SELECT ISNULL(ISNULL(imp_ordini.cod_mart, imp_contratti.cod_mart), imp_budget.cod_mart) AS cod_mart,\n" +
" SUM(ISNULL(imp_ordini.qtadaprodurre, 0)) AS qtadaprodurre,\n" +
" SUM(ISNULL(imp_ordini.numdaprodurre, 0)) AS numdaprodurre,\n" +
" SUM(ISNULL(imp_contratti.qtacontratto,0)) AS qtacontratto ,\n" +
" SUM(ISNULL(imp_budget.qta_bdg, 0)) AS qtabudget\n" +
" \n" +
" FROM imp_ordini\n" +
" FULL OUTER JOIN imp_contratti ON imp_ordini.cod_mart = imp_contratti.cod_mart\n" +
" FULL OUTER JOIN imp_budget ON imp_ordini.cod_mart = imp_budget.cod_mart\n" +
" \n" +
" GROUP BY ISNULL(ISNULL(imp_ordini.cod_mart, imp_contratti.cod_mart), imp_budget.cod_mart)\n" +
" HAVING SUM(ISNULL(imp_ordini.qtadaprodurre, 0)) <> 0\n" +
" OR SUM(ISNULL(imp_contratti.qtacontratto,0)) <> 0\n" +
" OR SUM(ISNULL(imp_budget.qta_bdg, 0)) <> 0)\n" +
"\n" +
"SELECT materiali.cod_mart,\n" +
" materiali.cod_prod,\n" +
" jtb_fasi.cod_mdep_lav AS cod_mdep,\n" +
" SUM(qtadaprodurre * ((materiali.qta_prod * materiali.rap_conv) /\n" +
" (jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod))) AS impegnatoprox,\n" +
" SUM(qtacontratto * ((materiali.qta_prod * materiali.rap_conv) /\n" +
" (jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod))) AS impproxcontratto,\n" +
" SUM(qtabudget * ((materiali.qta_prod * materiali.rap_conv) /\n" +
" (jtb_cicl.qta_prod * jtb_cicl.rap_conv_prod))) AS impproxbudget,\n" +
" /*\n" +
" max(case when ord.gestione = 'L' THEN max_data_cons else null end ) as data_imp_prox,\n" +
" max(case when ord.gestione = 'A' THEN max_data_cons else null end ) as data_imp_prox_contr\n" +
" */\n" +
" IsNull(max(ORD.data_imp_prox), convert(date,GetDate())) as data_imp_prox,\n" +
" IsNull(max(ORD.data_imp_prox_contr), convert(date,GetDate())) as data_imp_prox_contr\n" +
"INTO #tmp\n" +
"FROM tmp_impegni\n" +
" INNER JOIN\n" +
" (\n" +
" SELECT cod_mart, descrizione_estesa, unt_mis_prod AS unt_doc, rap_conv_prod AS rap_conv, qta_prod, cod_prod\n" +
" FROM [dbo].getmaterialidistinta(NULL, 1)\n" +
" WHERE cod_parent IS NOT NULL) materiali ON materiali.cod_prod = tmp_impegni.cod_mart\n" +
" INNER JOIN jtb_cicl ON materiali.cod_prod = jtb_cicl.cod_prod\n" +
" INNER JOIN jtb_fasi ON jtb_cicl.cod_jfas = jtb_fasi.cod_jfas \n" +
" LEFT OUTER JOIN (\n" +
" /* Modifcata da Massimo 10/07/24 la vecchia query creva quantità doppie in presenza di ordini L e A\n" +
" select cod_mart, dtb_ordt.gestione, MAX(dtb_ordr.data_cons) as max_data_cons\n" +
" from dtb_ordt inner join dtb_ordr on dtb_ordt.gestione = dtb_ordr.gestione\n" +
" and dtb_ordt.data_ord = dtb_ordr.data_ord\n" +
" and dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" where dtb_ordt.gestione <> 'V' AND\n" +
" dtb_ordt.flag_annulla = 'N' and\n" +
" dtb_ordt.flag_budget = 0 and\n" +
" dtb_ordt.flag_sospeso = 'N' and\n" +
" dtb_ordt.flag_evaso_forzato = 'N' and \n" +
" dtb_ordr.flag_evaso = 'I' \n" +
" group by cod_mart, dtb_ordt.gestione\n" +
" */\n" +
" Select isNull(ODL.cod_mart,ODA.cod_mart) as cod_mart, ODL.data_imp_prox, ODA.data_imp_prox_contr\n" +
" from \n" +
" (select cod_mart, dtb_ordt.gestione, MAX(dtb_ordr.data_cons) as data_imp_prox\n" +
" from dtb_ordt inner join dtb_ordr on dtb_ordt.gestione = dtb_ordr.gestione\n" +
" and dtb_ordt.data_ord = dtb_ordr.data_ord\n" +
" and dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" where dtb_ordt.gestione = 'L' AND\n" +
" dtb_ordt.flag_annulla = 'N' and\n" +
" dtb_ordt.flag_budget = 0 and\n" +
" dtb_ordt.flag_sospeso = 'N' and\n" +
" dtb_ordt.flag_evaso_forzato = 'N' and \n" +
" dtb_ordt.flag_evaso_prod = 'I' and\n" +
" dtb_ordr.flag_evaso = 'I' \n" +
" group by cod_mart, dtb_ordt.gestione\n" +
" )ODL full outer join\n" +
" (\n" +
" select cod_mart, dtb_ordt.gestione, MAX(dtb_ordr.data_cons) as data_imp_prox_contr\n" +
" from dtb_ordt inner join dtb_ordr on dtb_ordt.gestione = dtb_ordr.gestione\n" +
" and dtb_ordt.data_ord = dtb_ordr.data_ord\n" +
" and dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" where dtb_ordt.gestione = 'A' AND\n" +
" dtb_ordt.flag_annulla = 'N' and\n" +
" dtb_ordt.flag_budget = 0 and\n" +
" dtb_ordt.flag_sospeso = 'N' and\n" +
" dtb_ordt.flag_evaso_forzato = 'N' and \n" +
" dtb_ordr.flag_evaso = 'I' \n" +
" \n" +
" group by cod_mart, dtb_ordt.gestione)\n" +
" ODA on ODA.cod_mart = ODL.cod_mart\n" +
" ) ORD ON materiali.cod_mart = ORD.cod_mart\n" +
"GROUP BY materiali.cod_prod,\n" +
" materiali.cod_mart,\n" +
" jtb_fasi.cod_mdep_lav\n" +
" \n" +
"SELECT cod_mart,\n" +
" cod_mdep,\n" +
" SUM(impegnatoprox) AS impegnatoprox,\n" +
" SUM(impproxcontratto) AS impproxcontratto,\n" +
" SUM(impproxbudget) AS impproxbudget,\n" +
" case when data_imp_prox < convert(date, GetDate()) then convert(date, getDate()) else data_imp_prox end data_imp_prox,\n" +
" case when data_imp_prox_contr < case when data_imp_prox < convert(date, GetDate()) then convert(date, getDate()) else data_imp_prox end \n" +
" then case when data_imp_prox < convert(date, GetDate()) then convert(date, getDate()) else data_imp_prox end \n" +
" else data_imp_prox_contr end as data_imp_prox_contr\n" +
" --case when data_imp_prox_contr is null then isNull(data_imp_prox,convert(date,GetDate())) else data_imp_prox_contr end as data_imp_prox_contr\n" +
" --IIF( data_imp_prox is null or data_imp_prox < Cast(getdate() as date), Cast(getdate() as date), data_imp_prox) as data_imp_prox,\n" +
" --IIF( data_imp_prox_contr is null or isNull(data_imp_prox_contr,data_imp_prox) < Cast(getdate() as date), Cast(getdate() as date), data_imp_prox_contr) as data_imp_prox_contr \n" +
"INTO #tmpsum\n" +
"FROM #tmp\n" +
"WHERE cod_mdep IS NOT NULL\n" +
"GROUP BY cod_mart, cod_mdep,\n" +
" data_imp_prox,\n" +
" data_imp_prox_contr\n" +
"\n" +
"INSERT INTO mtb_part (cod_mart, cod_mdep, scorta_min, qta_esistente, qta_imp_cli, qta_imp_lav, qta_ord_for)\n" +
"SELECT cod_mart, cod_mdep, 0, 0, 0, 0, 0\n" +
"FROM #tmpsum t\n" +
"WHERE NOT EXISTS(SELECT * FROM mtb_part WHERE mtb_part.cod_mart = t.cod_mart AND mtb_part.cod_mdep = t.cod_mdep)\n" +
"\n" +
"IF @elencoarticoli IS NULL OR @elencoarticoli = ''\n" +
" UPDATE mtb_part SET qta_imp_prox = 0, qta_imp_prox_contr = 0, qta_imp_prox_bdg = 0, data_imp_prox = null, data_imp_prox_contr = null\n" +
"ELSE\n" +
" UPDATE mtb_part\n" +
" SET qta_imp_prox = 0,\n" +
" qta_imp_prox_contr = 0,\n" +
" qta_imp_prox_bdg = 0,\n" +
" data_imp_prox = null, \n" +
" data_imp_prox_contr = null \n" +
" WHERE cod_mart IN (SELECT cod_mart FROM #tmpsum)\n" +
"\n" +
"UPDATE mtb_part\n" +
"SET qta_imp_prox = q.impegnatoprox,\n" +
" qta_imp_prox_contr = q.impproxcontratto,\n" +
" qta_imp_prox_bdg = q.impproxbudget,\n" +
" data_imp_prox = DateAdd(day, 1, q.data_imp_prox), \n" +
" data_imp_prox_contr = DateAdd(day, 1, q.data_imp_prox_contr )\n" +
"FROM mtb_part\n" +
" INNER JOIN #tmpsum q ON mtb_part.cod_mdep = q.cod_mdep AND mtb_part.cod_mart = q.cod_mart\n" +
"\n" +
"IF EXISTS(SELECT *\n" +
" FROM #tmp\n" +
" WHERE cod_mdep IS NULL)\n" +
" BEGIN\n" +
"\n" +
"\n" +
" DECLARE @message VARCHAR(MAX), @email VARCHAR(MAX)\n" +
"\n" +
" SELECT @email = e_mail FROM stb_email WHERE flag_default = 'S';\n" +
"\n" +
" SET @message = 'Verificare i seguenti articoli: la fase non ha il deposito agganciato.' + CHAR(10) + CHAR(13)\n" +
" SELECT @message = @message +\n" +
" STUFF((SELECT ',' + cod_prod\n" +
" FROM #tmp\n" +
" WHERE cod_mdep IS NULL\n" +
" FOR XML PATH('')), 1, 1, '')\n" +
"\n" +
" EXECUTE [dbo].[sp_sendEmail] @email, 'helpdesk@integry.it', 'Errore Impegni Prossimi', @message\n" +
"\n" +
" END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250314174219 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("SI_NO", "SI_NO", "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("PVM", "ACCETTAZIONE", "VIEW_CHK_LIST", "N",
"Visualizza la lista dei colli", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,20 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250317122246 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("alter table mtb_partita_mag add partita_mag_prod varchar(20)",
"alter table mtb_partita_mag add data_prod datetime");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,23 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250317144857 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("W_VDOCU_RC", "SETUP", "STAMPA_IMMEDIATA", "N", "Se configurata la invece di visualizzare un pdf lo manda direttamente in stampa", false, "SI_NO", false, false, false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("W_VDIFF_BOLLE_DLG", "SETUP", "STAMPA_IMMEDIATA", "N", "Se configurata la invece di visualizzare un pdf lo manda direttamente in stampa", false, "SI_NO", false, false, false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
if (isCustomerDb(IntegryCustomerDB.Salpar_VgAlimenti))
updateSetupValue("W_VDIFF_BOLLE_DLG", "SETUP", "STAMPA_IMMEDIATA", "S");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250317154801 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("SI_NO", "SI_NO", "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("FATTURA_ELETTRONICA_CUSTOM", "CAUSALE", "BIO", "N",
"Se S attiva la visualizzazione della dicitura BIO nel tag Causale ", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,27 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250317155656 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomerDb(IntegryCustomerDB.Salpar_MasabaSrl))
return;
createSetup("w_mlupdsrv_config_dlg", "SETUP", "REGISTRA_INCASSI_PUDDY", "S",
"Se impostato a S, dopo la registrazione dell'ordine viene registrato l'eventuale incasso dell'agente", false, null, false, false,
false, false, false, null, false, null);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,29 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250317172421 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("SI_NO", "SI_NO", "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("PICKING", "SPEDIZIONE", "ENABLE_FAST_PICKING", "N",
"Permette di abilitare il fast picking: abilita la scansione degli SSCC direttamente nel popup di inserimento delle quantità procedendo alla chiusura UL automatica e successiva apertura di una nuova UL.", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
if(isCustomer(IntegryCustomer.RossoGargano)) {
updateSetupValue("PICKING", "SPEDIZIONE", "ENABLE_FAST_PICKING", "S");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,200 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250317184718 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
executeStatement(
"ALTER TABLE mrl_depo_art_esclusi_wms\n" +
" ADD flag_escludi_lav BIT DEFAULT 1 NOT NULL;",
"ALTER TABLE mrl_depo_art_esclusi_wms\n" +
" ADD flag_escludi_acq BIT DEFAULT 1 NOT NULL;",
"ALTER TABLE mrl_depo_art_esclusi_wms\n" +
" ADD flag_escludi_vend BIT DEFAULT 1 NOT NULL;"
);
createOrUpdateView("mvw_articoli_esclusi_wms", "CREATE VIEW dbo.mvw_articoli_esclusi_wms AS\n" +
"SELECT DISTINCT mrl_depo_art_esclusi_wms.cod_mdep,\n" +
" ma.cod_mart,\n" +
" ma.cod_mgrp,\n" +
" ma.cod_msgr,\n" +
" ma.cod_msfa,\n" +
" ma.cod_mtip,\n" +
" ma.cod_mstp,\n" +
" mrl_depo_art_esclusi_wms.flag_escludi_lav,\n" +
" mrl_depo_art_esclusi_wms.flag_escludi_acq,\n" +
" mrl_depo_art_esclusi_wms.flag_escludi_vend\n" +
"FROM mrl_depo_art_esclusi_wms\n" +
" INNER JOIN mtb_aart ma\n" +
" ON (ISNULL(mrl_depo_art_esclusi_wms.cod_mgrp, ma.cod_mgrp) = ma.cod_mgrp AND\n" +
" ISNULL(mrl_depo_art_esclusi_wms.cod_msgr, ma.cod_msgr) = ma.cod_msgr AND\n" +
" ISNULL(ISNULL(mrl_depo_art_esclusi_wms.cod_msfa, ma.cod_msfa), '') = ISNULL(ma.cod_msfa, '') AND\n" +
" ISNULL(ISNULL(mrl_depo_art_esclusi_wms.cod_mtip, ma.cod_mtip), '') = ISNULL(ma.cod_mtip, '') AND\n" +
" ISNULL(ISNULL(mrl_depo_art_esclusi_wms.cod_mstp, ma.cod_mstp), '') = ISNULL(ma.cod_mstp, '') AND\n" +
" ISNULL(mrl_depo_art_esclusi_wms.cod_mart, ma.cod_mart) = ma.cod_mart)"
);
createOrUpdateView("ovw_situazione_qta_ordini_wms_vend", "CREATE VIEW [dbo].[ovw_situazione_qta_ordini_wms_vend] AS\n" +
" /*Vista usata dal WMS per individuare gli ordini da evadere e le righe gia' caricate su un viaggio*/\n" +
"WITH custom_mtb_colr AS (SELECT mtb_colr.gestione,\n" +
" mtb_colr.data_ord,\n" +
" mtb_colr.num_ord,\n" +
" mtb_colr.riga_ord,\n" +
" SUM(qta_col) AS qta_col,\n" +
" SUM(num_cnf) AS num_cnf,\n" +
" SUM(qta_col / qta_cnf) AS cnf_col\n" +
" FROM mtb_colt,\n" +
" mtb_colr\n" +
" WHERE mtb_colr.gestione = mtb_colt.gestione\n" +
" AND mtb_colr.data_collo = mtb_colt.data_collo\n" +
" AND mtb_colr.ser_collo = mtb_colt.ser_collo\n" +
" AND mtb_colr.num_collo = mtb_colt.num_collo\n" +
" AND mtb_colt.cod_dtip IS NULL\n" +
" GROUP BY mtb_colr.gestione, mtb_colr.data_ord, mtb_colr.num_ord, mtb_colr.riga_ord),\n" +
" sit_ord_wms AS (SELECT mum.unt_mis,\n" +
" mum.cifre_dec,\n" +
" dtb_ordr.gestione,\n" +
" dtb_ordr.data_ord,\n" +
" dtb_ordr.num_ord,\n" +
" dtb_ordt.rif_ord,\n" +
" dtb_ordr.partita_mag,\n" +
" CASE dtb_ordr.gestione WHEN 'A' THEN '1' WHEN 'L' THEN '2' WHEN 'V' THEN '3' END +\n" +
" REPLACE(CONVERT(VARCHAR(10), dtb_ordr.data_ord, 105), '-', '') +\n" +
" REPLICATE('0', 5 - LEN(dtb_ordr.num_ord)) +\n" +
" CONVERT(VARCHAR(6), dtb_ordr.num_ord) AS chiave_ordine,\n" +
" dtb_ordr.unt_ord,\n" +
" dtb_ordr.cod_alis,\n" +
" dtb_ordr.cod_art_for,\n" +
" dtb_ordr.riga_ord,\n" +
" dtb_ordr.qta_ord,\n" +
" dtb_ordr.qta_cnf * dtb_ordr.rap_conv AS qta_cnf,\n" +
" dtb_ordr.descrizione,\n" +
" dtb_ordr.descrizione_estesa,\n" +
" ISNULL(SUM(mtb_colr.qta_col), 0) AS qta_col,\n" +
" CONVERT(DECIMAL(20, 5), ROUND(ISNULL(SUM(mtb_colr.cnf_col), 0), 2)) AS cnf_col,\n" +
" dtb_ordr.qta_evasa,\n" +
" SUM(dtb_ordr.qta_ord * dtb_ordr.val_unt * (1 - sconto1 / 100) * (1 - sconto2 / 100) *\n" +
" (1 - sconto3 / 100) * (1 - sconto4 / 100) * (1 - sconto5 / 100) * (1 - sconto6 / 100) *\n" +
" (1 - sconto7 / 100) * (1 - sconto8 / 100)) AS importorigaord,\n" +
" SUM(CASE\n" +
" WHEN (dtb_ordr.qta_ord > dtb_ordr.qta_evasa) AND dtb_ordr.flag_evaso = 'I' THEN\n" +
" (dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.val_unt *\n" +
" (1 - sconto1 / 100) * (1 - sconto2 / 100) * (1 - sconto3 / 100) *\n" +
" (1 - sconto4 / 100) * (1 - sconto5 / 100) * (1 - sconto6 / 100) *\n" +
" (1 - sconto7 / 100) * (1 - sconto8 / 100)\n" +
" ELSE 0 END) AS importoinevaso,\n" +
" SUM(CASE\n" +
" WHEN (dtb_ordr.qta_ord > dtb_ordr.qta_evasa) AND dtb_ordr.flag_evaso = 'I' THEN\n" +
" (dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.val_unt *\n" +
" (1 + gtb_aliq.perc_aliq / 100) * (1 - sconto1 / 100) * (1 - sconto2 / 100) *\n" +
" (1 - sconto3 / 100) * (1 - sconto4 / 100) * (1 - sconto5 / 100) *\n" +
" (1 - sconto6 / 100) * (1 - sconto7 / 100) * (1 - sconto8 / 100)\n" +
" ELSE 0 END) AS importoinevasoivato,\n" +
" CASE\n" +
" WHEN ((dtb_ordr.qta_ord * rap_conv) - ISNULL(SUM(mtb_colr.qta_col), 0) -\n" +
" dtb_ordr.qta_evasa * rap_conv) > 0 THEN (dtb_ordr.qta_ord * rap_conv -\n" +
" ISNULL(SUM(mtb_colr.qta_col), 0) -\n" +
" dtb_ordr.qta_evasa * rap_conv)\n" +
" ELSE 0 END AS qta_da_evadere,\n" +
" dtb_ordr.num_cnf,\n" +
" dtb_ordr.num_cnf_evasa AS num_cnf_evase,\n" +
" ISNULL(SUM(mtb_colr.num_cnf), 0) AS num_cnf_col,\n" +
" CASE\n" +
" WHEN dtb_ordr.num_cnf - dtb_ordr.num_cnf_evasa - ISNULL(SUM(mtb_colr.num_cnf), 0) > 0\n" +
" THEN dtb_ordr.num_cnf - dtb_ordr.num_cnf_evasa - ISNULL(SUM(mtb_colr.num_cnf), 0)\n" +
" ELSE 0 END AS num_cnf_da_evadere,\n" +
" SUM(mvw_art_depo_disp.qta_disp_xpick) AS qta_disp,\n" +
" SUM(mvw_art_depo_disp.num_disp_xpick) AS cnf_disp,\n" +
" dtb_ordr.cod_jcom,\n" +
" dtb_ordr.cod_mart,\n" +
" dtb_ordr.cod_col,\n" +
" dtb_ordr.cod_tagl,\n" +
" ISNULL(vtb_viaggi.data_ora_iniz_trasp, dtb_ordr.data_cons) AS data_cons,\n" +
" dtb_ordr.flag_evaso,\n" +
" dtb_ordr.id_viaggio,\n" +
" SUM(CASE\n" +
" WHEN sconto5 = 100 OR sconto6 = 100 OR sconto7 = 100 OR sconto8 = 100 THEN qta_ord\n" +
" ELSE 0 END) AS qta_omg\n" +
" FROM dtb_ordt,\n" +
" dtb_ordr\n" +
" LEFT OUTER JOIN custom_mtb_colr mtb_colr ON dtb_ordr.gestione = mtb_colr.gestione AND\n" +
" dtb_ordr.data_ord = mtb_colr.data_ord AND\n" +
" dtb_ordr.num_ord = mtb_colr.num_ord AND\n" +
" dtb_ordr.riga_ord = mtb_colr.riga_ord\n" +
" LEFT OUTER JOIN vtb_viaggi ON dtb_ordr.id_viaggio = vtb_viaggi.id_viaggio\n" +
" LEFT OUTER JOIN mvw_art_depo_disp ON dtb_ordr.cod_mdep = mvw_art_depo_disp.cod_mdep AND\n" +
" dtb_ordr.cod_mart = mvw_art_depo_disp.cod_mart\n" +
" LEFT OUTER JOIN gtb_aliq ON dtb_ordr.cod_aliq = gtb_aliq.cod_aliq\n" +
" INNER JOIN mtb_aart ON dtb_ordr.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN mtb_unt_mis mum ON mtb_aart.unt_mis = mum.unt_mis\n" +
" LEFT OUTER JOIN mvw_articoli_esclusi_wms\n" +
" ON dtb_ordr.cod_mart = mvw_articoli_esclusi_wms.cod_mart AND\n" +
" dtb_ordr.cod_mdep = mvw_articoli_esclusi_wms.cod_mdep AND\n" +
" mvw_articoli_esclusi_wms.flag_escludi_vend = 1\n" +
" WHERE dtb_ordt.gestione = dtb_ordr.gestione\n" +
" AND dtb_ordt.data_ord = dtb_ordr.data_ord\n" +
" AND dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" AND dtb_ordt.flag_annulla = 'N'\n" +
" AND mvw_articoli_esclusi_wms.cod_mart IS NULL\n" +
" GROUP BY dtb_ordr.gestione, dtb_ordr.data_ord, dtb_ordr.num_ord, dtb_ordt.rif_ord,\n" +
" dtb_ordr.riga_ord, dtb_ordr.unt_ord, dtb_ordr.cod_alis, dtb_ordr.cod_art_for,\n" +
" dtb_ordr.riga_ord, dtb_ordr.qta_ord, dtb_ordr.partita_mag, dtb_ordr.descrizione,\n" +
" dtb_ordr.descrizione_estesa, dtb_ordr.qta_ord, dtb_ordr.qta_evasa, dtb_ordr.rap_conv,\n" +
" dtb_ordr.num_cnf, dtb_ordr.qta_cnf, dtb_ordr.cod_jcom, dtb_ordr.cod_mart,\n" +
" dtb_ordr.cod_col, dtb_ordr.cod_tagl, dtb_ordr.data_cons, dtb_ordr.flag_evaso,\n" +
" dtb_ordr.num_cnf_evasa, vtb_viaggi.data_ora_iniz_trasp, mtb_colr.gestione,\n" +
" dtb_ordr.id_viaggio, mum.unt_mis, mum.cifre_dec)\n" +
"SELECT gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" rif_ord,\n" +
" partita_mag,\n" +
" chiave_ordine,\n" +
" unt_ord,\n" +
" cod_alis,\n" +
" cod_art_for,\n" +
" riga_ord,\n" +
" ROUND(qta_ord, cifre_dec) AS qta_ord,\n" +
" qta_cnf,\n" +
" descrizione,\n" +
" descrizione_estesa,\n" +
" qta_col,\n" +
" cnf_col,\n" +
" qta_evasa,\n" +
" importorigaord,\n" +
" importoinevaso,\n" +
" importoinevasoivato,\n" +
" qta_da_evadere,\n" +
" num_cnf,\n" +
" num_cnf_evase,\n" +
" num_cnf_col,\n" +
" num_cnf_da_evadere,\n" +
" qta_disp,\n" +
" cnf_disp,\n" +
" cod_jcom,\n" +
" cod_mart,\n" +
" cod_col,\n" +
" cod_tagl,\n" +
" data_cons,\n" +
" flag_evaso,\n" +
" id_viaggio,\n" +
" qta_omg\n" +
"FROM sit_ord_wms");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,23 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250317185215 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
executeStatement("DROP FUNCTION dbo.expodeDistCostiAll");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,198 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250318093455 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
dropDefault("mrl_depo_art_esclusi_wms", "flag_escludi_vend");
executeStatement(
"ALTER TABLE mrl_depo_art_esclusi_wms\n" +
" DROP COLUMN flag_escludi_vend;\n" +
"ALTER TABLE mrl_depo_art_esclusi_wms\n" +
" ADD flag_escludi_ven BIT DEFAULT 1 NOT NULL;"
);
createOrUpdateView("mvw_articoli_esclusi_wms", "CREATE VIEW dbo.mvw_articoli_esclusi_wms AS\n" +
"SELECT DISTINCT mrl_depo_art_esclusi_wms.cod_mdep,\n" +
" ma.cod_mart,\n" +
" ma.cod_mgrp,\n" +
" ma.cod_msgr,\n" +
" ma.cod_msfa,\n" +
" ma.cod_mtip,\n" +
" ma.cod_mstp,\n" +
" mrl_depo_art_esclusi_wms.flag_escludi_lav,\n" +
" mrl_depo_art_esclusi_wms.flag_escludi_acq,\n" +
" mrl_depo_art_esclusi_wms.flag_escludi_ven\n" +
"FROM mrl_depo_art_esclusi_wms\n" +
" INNER JOIN mtb_aart ma\n" +
" ON (ISNULL(mrl_depo_art_esclusi_wms.cod_mgrp, ma.cod_mgrp) = ma.cod_mgrp AND\n" +
" ISNULL(mrl_depo_art_esclusi_wms.cod_msgr, ma.cod_msgr) = ma.cod_msgr AND\n" +
" ISNULL(ISNULL(mrl_depo_art_esclusi_wms.cod_msfa, ma.cod_msfa), '') = ISNULL(ma.cod_msfa, '') AND\n" +
" ISNULL(ISNULL(mrl_depo_art_esclusi_wms.cod_mtip, ma.cod_mtip), '') = ISNULL(ma.cod_mtip, '') AND\n" +
" ISNULL(ISNULL(mrl_depo_art_esclusi_wms.cod_mstp, ma.cod_mstp), '') = ISNULL(ma.cod_mstp, '') AND\n" +
" ISNULL(mrl_depo_art_esclusi_wms.cod_mart, ma.cod_mart) = ma.cod_mart)"
);
createOrUpdateView("ovw_situazione_qta_ordini_wms_vend", "CREATE VIEW [dbo].[ovw_situazione_qta_ordini_wms_vend] AS\n" +
" /*Vista usata dal WMS per individuare gli ordini da evadere e le righe gia' caricate su un viaggio*/\n" +
"WITH custom_mtb_colr AS (SELECT mtb_colr.gestione,\n" +
" mtb_colr.data_ord,\n" +
" mtb_colr.num_ord,\n" +
" mtb_colr.riga_ord,\n" +
" SUM(qta_col) AS qta_col,\n" +
" SUM(num_cnf) AS num_cnf,\n" +
" SUM(qta_col / qta_cnf) AS cnf_col\n" +
" FROM mtb_colt,\n" +
" mtb_colr\n" +
" WHERE mtb_colr.gestione = mtb_colt.gestione\n" +
" AND mtb_colr.data_collo = mtb_colt.data_collo\n" +
" AND mtb_colr.ser_collo = mtb_colt.ser_collo\n" +
" AND mtb_colr.num_collo = mtb_colt.num_collo\n" +
" AND mtb_colt.cod_dtip IS NULL\n" +
" GROUP BY mtb_colr.gestione, mtb_colr.data_ord, mtb_colr.num_ord, mtb_colr.riga_ord),\n" +
" sit_ord_wms AS (SELECT mum.unt_mis,\n" +
" mum.cifre_dec,\n" +
" dtb_ordr.gestione,\n" +
" dtb_ordr.data_ord,\n" +
" dtb_ordr.num_ord,\n" +
" dtb_ordt.rif_ord,\n" +
" dtb_ordr.partita_mag,\n" +
" CASE dtb_ordr.gestione WHEN 'A' THEN '1' WHEN 'L' THEN '2' WHEN 'V' THEN '3' END +\n" +
" REPLACE(CONVERT(VARCHAR(10), dtb_ordr.data_ord, 105), '-', '') +\n" +
" REPLICATE('0', 5 - LEN(dtb_ordr.num_ord)) +\n" +
" CONVERT(VARCHAR(6), dtb_ordr.num_ord) AS chiave_ordine,\n" +
" dtb_ordr.unt_ord,\n" +
" dtb_ordr.cod_alis,\n" +
" dtb_ordr.cod_art_for,\n" +
" dtb_ordr.riga_ord,\n" +
" dtb_ordr.qta_ord,\n" +
" dtb_ordr.qta_cnf * dtb_ordr.rap_conv AS qta_cnf,\n" +
" dtb_ordr.descrizione,\n" +
" dtb_ordr.descrizione_estesa,\n" +
" ISNULL(SUM(mtb_colr.qta_col), 0) AS qta_col,\n" +
" CONVERT(DECIMAL(20, 5), ROUND(ISNULL(SUM(mtb_colr.cnf_col), 0), 2)) AS cnf_col,\n" +
" dtb_ordr.qta_evasa,\n" +
" SUM(dtb_ordr.qta_ord * dtb_ordr.val_unt * (1 - sconto1 / 100) * (1 - sconto2 / 100) *\n" +
" (1 - sconto3 / 100) * (1 - sconto4 / 100) * (1 - sconto5 / 100) * (1 - sconto6 / 100) *\n" +
" (1 - sconto7 / 100) * (1 - sconto8 / 100)) AS importorigaord,\n" +
" SUM(CASE\n" +
" WHEN (dtb_ordr.qta_ord > dtb_ordr.qta_evasa) AND dtb_ordr.flag_evaso = 'I' THEN\n" +
" (dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.val_unt *\n" +
" (1 - sconto1 / 100) * (1 - sconto2 / 100) * (1 - sconto3 / 100) *\n" +
" (1 - sconto4 / 100) * (1 - sconto5 / 100) * (1 - sconto6 / 100) *\n" +
" (1 - sconto7 / 100) * (1 - sconto8 / 100)\n" +
" ELSE 0 END) AS importoinevaso,\n" +
" SUM(CASE\n" +
" WHEN (dtb_ordr.qta_ord > dtb_ordr.qta_evasa) AND dtb_ordr.flag_evaso = 'I' THEN\n" +
" (dtb_ordr.qta_ord - dtb_ordr.qta_evasa) * dtb_ordr.val_unt *\n" +
" (1 + gtb_aliq.perc_aliq / 100) * (1 - sconto1 / 100) * (1 - sconto2 / 100) *\n" +
" (1 - sconto3 / 100) * (1 - sconto4 / 100) * (1 - sconto5 / 100) *\n" +
" (1 - sconto6 / 100) * (1 - sconto7 / 100) * (1 - sconto8 / 100)\n" +
" ELSE 0 END) AS importoinevasoivato,\n" +
" CASE\n" +
" WHEN ((dtb_ordr.qta_ord * rap_conv) - ISNULL(SUM(mtb_colr.qta_col), 0) -\n" +
" dtb_ordr.qta_evasa * rap_conv) > 0 THEN (dtb_ordr.qta_ord * rap_conv -\n" +
" ISNULL(SUM(mtb_colr.qta_col), 0) -\n" +
" dtb_ordr.qta_evasa * rap_conv)\n" +
" ELSE 0 END AS qta_da_evadere,\n" +
" dtb_ordr.num_cnf,\n" +
" dtb_ordr.num_cnf_evasa AS num_cnf_evase,\n" +
" ISNULL(SUM(mtb_colr.num_cnf), 0) AS num_cnf_col,\n" +
" CASE\n" +
" WHEN dtb_ordr.num_cnf - dtb_ordr.num_cnf_evasa - ISNULL(SUM(mtb_colr.num_cnf), 0) > 0\n" +
" THEN dtb_ordr.num_cnf - dtb_ordr.num_cnf_evasa - ISNULL(SUM(mtb_colr.num_cnf), 0)\n" +
" ELSE 0 END AS num_cnf_da_evadere,\n" +
" SUM(mvw_art_depo_disp.qta_disp_xpick) AS qta_disp,\n" +
" SUM(mvw_art_depo_disp.num_disp_xpick) AS cnf_disp,\n" +
" dtb_ordr.cod_jcom,\n" +
" dtb_ordr.cod_mart,\n" +
" dtb_ordr.cod_col,\n" +
" dtb_ordr.cod_tagl,\n" +
" ISNULL(vtb_viaggi.data_ora_iniz_trasp, dtb_ordr.data_cons) AS data_cons,\n" +
" dtb_ordr.flag_evaso,\n" +
" dtb_ordr.id_viaggio,\n" +
" SUM(CASE\n" +
" WHEN sconto5 = 100 OR sconto6 = 100 OR sconto7 = 100 OR sconto8 = 100 THEN qta_ord\n" +
" ELSE 0 END) AS qta_omg\n" +
" FROM dtb_ordt,\n" +
" dtb_ordr\n" +
" LEFT OUTER JOIN custom_mtb_colr mtb_colr ON dtb_ordr.gestione = mtb_colr.gestione AND\n" +
" dtb_ordr.data_ord = mtb_colr.data_ord AND\n" +
" dtb_ordr.num_ord = mtb_colr.num_ord AND\n" +
" dtb_ordr.riga_ord = mtb_colr.riga_ord\n" +
" LEFT OUTER JOIN vtb_viaggi ON dtb_ordr.id_viaggio = vtb_viaggi.id_viaggio\n" +
" LEFT OUTER JOIN mvw_art_depo_disp ON dtb_ordr.cod_mdep = mvw_art_depo_disp.cod_mdep AND\n" +
" dtb_ordr.cod_mart = mvw_art_depo_disp.cod_mart\n" +
" LEFT OUTER JOIN gtb_aliq ON dtb_ordr.cod_aliq = gtb_aliq.cod_aliq\n" +
" INNER JOIN mtb_aart ON dtb_ordr.cod_mart = mtb_aart.cod_mart\n" +
" INNER JOIN mtb_unt_mis mum ON mtb_aart.unt_mis = mum.unt_mis\n" +
" LEFT OUTER JOIN mvw_articoli_esclusi_wms\n" +
" ON dtb_ordr.cod_mart = mvw_articoli_esclusi_wms.cod_mart AND\n" +
" dtb_ordr.cod_mdep = mvw_articoli_esclusi_wms.cod_mdep AND\n" +
" mvw_articoli_esclusi_wms.flag_escludi_ven = 1\n" +
" WHERE dtb_ordt.gestione = dtb_ordr.gestione\n" +
" AND dtb_ordt.data_ord = dtb_ordr.data_ord\n" +
" AND dtb_ordt.num_ord = dtb_ordr.num_ord\n" +
" AND dtb_ordt.flag_annulla = 'N'\n" +
" AND mvw_articoli_esclusi_wms.cod_mart IS NULL\n" +
" GROUP BY dtb_ordr.gestione, dtb_ordr.data_ord, dtb_ordr.num_ord, dtb_ordt.rif_ord,\n" +
" dtb_ordr.riga_ord, dtb_ordr.unt_ord, dtb_ordr.cod_alis, dtb_ordr.cod_art_for,\n" +
" dtb_ordr.riga_ord, dtb_ordr.qta_ord, dtb_ordr.partita_mag, dtb_ordr.descrizione,\n" +
" dtb_ordr.descrizione_estesa, dtb_ordr.qta_ord, dtb_ordr.qta_evasa, dtb_ordr.rap_conv,\n" +
" dtb_ordr.num_cnf, dtb_ordr.qta_cnf, dtb_ordr.cod_jcom, dtb_ordr.cod_mart,\n" +
" dtb_ordr.cod_col, dtb_ordr.cod_tagl, dtb_ordr.data_cons, dtb_ordr.flag_evaso,\n" +
" dtb_ordr.num_cnf_evasa, vtb_viaggi.data_ora_iniz_trasp, mtb_colr.gestione,\n" +
" dtb_ordr.id_viaggio, mum.unt_mis, mum.cifre_dec)\n" +
"SELECT gestione,\n" +
" data_ord,\n" +
" num_ord,\n" +
" rif_ord,\n" +
" partita_mag,\n" +
" chiave_ordine,\n" +
" unt_ord,\n" +
" cod_alis,\n" +
" cod_art_for,\n" +
" riga_ord,\n" +
" ROUND(qta_ord, cifre_dec) AS qta_ord,\n" +
" qta_cnf,\n" +
" descrizione,\n" +
" descrizione_estesa,\n" +
" qta_col,\n" +
" cnf_col,\n" +
" qta_evasa,\n" +
" importorigaord,\n" +
" importoinevaso,\n" +
" importoinevasoivato,\n" +
" qta_da_evadere,\n" +
" num_cnf,\n" +
" num_cnf_evase,\n" +
" num_cnf_col,\n" +
" num_cnf_da_evadere,\n" +
" qta_disp,\n" +
" cnf_disp,\n" +
" cod_jcom,\n" +
" cod_mart,\n" +
" cod_col,\n" +
" cod_tagl,\n" +
" data_cons,\n" +
" flag_evaso,\n" +
" id_viaggio,\n" +
" qta_omg\n" +
"FROM sit_ord_wms");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,29 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250318135249 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetupQuery("SI_NO", "SI_NO", "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("DTB_DOCT", "FATTURA_PEDANE", "ATTIVA", "N",
"attivare la procedura", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
if (isCustomer(IntegryCustomer.RossoGargano)){
updateSetupValue("DTB_DOCT", "FATTURA_PEDANE", "ATTIVA", "S");
}
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,27 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250319093943 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomerDb(IntegryCustomerDB.Siciliani_DMS))
return;
createSetup("W_VORGCONS_DISP", "SETUP", "NUOVA_GESTIONE_VIEW", "N",
null, false, null, false, false,
false, false, false, null, false, null);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,28 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250319103942 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB() || !isCustomer(IntegryCustomer.Tosca))
return;
executeStatement("UPDATE mtb_sgrp SET ordinamento = 3 WHERE cod_mgrp = N'RFU' AND cod_msgr = N'RFUCP' ",
"UPDATE mtb_sgrp SET ordinamento = 2 WHERE cod_mgrp = N'TBW' AND cod_msgr = N'TBWM' ",
"UPDATE mtb_sgrp SET ordinamento = 1 WHERE cod_mgrp = N'TBW' AND cod_msgr = N'TBWW' ",
"UPDATE mtb_sgrp SET ordinamento = 4 WHERE cod_mgrp = N'RFU' AND cod_msgr = N'PLT' ",
"UPDATE mtb_sgrp SET ordinamento = 4 WHERE cod_mgrp = N'TBW' AND cod_msgr = N'PLT' ",
"UPDATE mtb_sgrp SET ordinamento = 3 WHERE cod_mgrp = N'TBW' AND cod_msgr = N'TBWCP' ",
"UPDATE mtb_sgrp SET ordinamento = 1 WHERE cod_mgrp = N'RFU' AND cod_msgr = N'RFUW' ",
"UPDATE mtb_sgrp SET ordinamento = 2 WHERE cod_mgrp = N'RFU' AND cod_msgr = N'RFUM' "
);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,31 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250319115425 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("update ctb_cut set flag_casi_particolari =0 where flag_casi_particolari is null ",
"alter table ctb_cut alter column flag_casi_particolari bit not null ",
"alter table ctb_cut ADD CONSTRAINT df_ctb_cut_flag_casi_particolari default 0 for flag_casi_particolari ",
"alter table ctb_cur add flag_luogo_attinenza bit not null default 0 ",
"alter table ctb_cur add flag_frontaliere bit not null default 0 ",
"alter table ctb_cur add tipo_rapporto varchar(2) null ",
"alter table ctb_cur add franchigia numeric(20,5) null ",
"update ctb_cur set previdenza_flag_altri_contr = CASE WHEN (previdenza_flag_altri_contr IS NULL OR previdenza_flag_altri_contr = 'N') THEN 0 ELSE 1 END ",
"alter table ctb_cur alter column previdenza_flag_altri_contr bit not null ",
"alter table ctb_cur ADD CONSTRAINT df_ctb_cur_previdenza_flag_altri_contr default 0 for previdenza_flag_altri_contr ",
"update ctb_cur set percEstero_shumacker = CASE WHEN (percEstero_shumacker IS NULL OR percEstero_shumacker = 'N') THEN 0 ELSE 1 END ",
"alter table ctb_cur alter column percEstero_shumacker bit not null ",
"alter table ctb_cur ADD CONSTRAINT df_ctb_cur_percEstero_shumacker default 0 for percEstero_shumacker ");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,23 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250319152207 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("W_GANAG_RC", "SETUP", "CALC_COD_FISC_FROM_WS", "S",
"Calcala il codice fiscale dai dati caricati nella persona fisica", false, null, false, false,
false, false, false, null, false, null);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,41 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250319152223 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomerDb(IntegryCustomerDB.TwoBrothers_TwoBrothers))
return;
updateSetupValue("W_GANAG_RC", "SETUP", "CALC_COD_FISC_FROM_WS", "N",
"Calcala il codice fiscale dai dati caricati nella persona fisica", false, null, false, false, false,
false, false, null, false, null);
executeStatement("DELETE\n" +
"FROM stb_gest_setup_depo\n" +
"WHERE gest_name = 'W_GANAG_RC'\n" +
" AND section = 'SETUP'\n" +
" AND key_section = 'CALC_COD_FISC_FROM_WS'"
);
executeStatement("DELETE\n" +
"FROM wtb_gest_setup_user\n" +
"WHERE gest_name = 'W_GANAG_RC'\n" +
" AND section = 'SETUP'\n" +
" AND key_section = 'CALC_COD_FISC_FROM_WS'"
);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,223 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250319181251 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomer(IntegryCustomer.Tosca))
return;
executeStatement("UPDATE mtb_aart SET diacod = N'80136' WHERE cod_mart LIKE N'RPC6413M' ");
//region Tabella entrate TBW
createOrUpdateView("tbw_daily_entries_vw", "create VIEW tbw_daily_entries_vw as\n" +
"WITH arts AS (SELECT cod_mart, diacod, colli_pedana\n" +
" FROM mtb_aart\n" +
" WHERE cod_mgrp = 'TBW' and flag_stato = 'A'),\n" +
" accettazioni AS (SELECT mr.cod_mart,\n" +
" a.diacod,\n" +
" mt.cod_anag,\n" +
" mr.qta_col AS qta_col,\n" +
" mt.cod_mdep,\n" +
" a.colli_pedana,\n" +
" CONVERT(DATE, mt.data_vers) AS data_accettazione\n" +
" FROM mtb_colt mt\n" +
" INNER JOIN mtb_colr mr ON mt.gestione = mr.gestione AND mt.data_collo = mr.data_collo AND\n" +
" mt.ser_collo = mr.ser_collo AND mt.num_collo = mr.num_collo\n" +
" INNER JOIN arts a ON mr.cod_mart = a.cod_mart\n" +
" WHERE mt.gestione = 'A'\n" +
" AND segno = 1)\n" +
"\n" +
"SELECT\n" +
" data_accettazione AS entry_date,\n" +
" accettazioni.cod_mart AS internal_product_code,\n" +
" accettazioni.diacod AS external_product_code,\n" +
" accettazioni.cod_anag AS internal_customer_code,\n" +
" ISNULL(gtb_anag.diacod, accettazioni.cod_anag) AS external_customer_code,\n" +
" mtb_depo.cod_mdep as internal_depot_code,\n" +
" mtb_depo_intercode.intercode as external_depot_code,\n" +
" gtb_anag.rag_soc AS customer,\n" +
" SUM(qta_col) AS accepted_qty,\n" +
" ROUND(SUM(qta_col) / accettazioni.colli_pedana ,0) AS accepted_plt_qty\n" +
"\n" +
"FROM accettazioni\n" +
" INNER JOIN gtb_anag ON accettazioni.cod_anag = gtb_anag.cod_anag\n" +
"inner join mtb_depo on accettazioni.cod_mdep = mtb_depo.cod_mdep\n" +
"inner join mtb_depo_intercode on mtb_depo.cod_mdep = mtb_depo_intercode.cod_mdep\n" +
"GROUP BY accettazioni.cod_mart, accettazioni.diacod, accettazioni.cod_anag, gtb_anag.cod_anag, gtb_anag.diacod,\n" +
" gtb_anag.rag_soc, data_accettazione, accettazioni.colli_pedana, mtb_depo_intercode.intercode, mtb_depo.cod_mdep");
//endregion
//region Tabella entrate RFU
createOrUpdateView("RFU_daily_productions_vw", "CREATE VIEW RFU_daily_productions_vw AS\n" +
"WITH arts AS (SELECT cod_mart, diacod, colli_pedana\n" +
" FROM mtb_aart\n" +
" WHERE cod_mgrp = 'RFU' and flag_stato = 'A'),\n" +
" entrate AS (SELECT mr.cod_mart,\n" +
" a.diacod,\n" +
" mt.cod_anag,\n" +
" mr.qta_col AS qta_col,\n" +
" mt.cod_mdep,\n" +
" a.colli_pedana,\n" +
" CASE WHEN mt.cod_dtip_provv IS NULL THEN 1 ELSE 0 END AS flag_selezionata,\n" +
" CONVERT(DATE, mt.data_vers) AS data_lav\n" +
" FROM mtb_colt mt\n" +
" INNER JOIN mtb_colr mr ON mt.gestione = mr.gestione AND mt.data_collo = mr.data_collo AND\n" +
" mt.ser_collo = mr.ser_collo AND mt.num_collo = mr.num_collo\n" +
" INNER JOIN arts a ON mr.cod_mart = a.cod_mart\n" +
" WHERE segno = 1\n" +
" AND mt.num_ord IS NOT NULL)\n" +
"\n" +
"SELECT data_lav AS entry_date,\n" +
" entrate.cod_mart AS internal_product_code,\n" +
" entrate.diacod AS external_product_code,\n" +
" mtb_depo.cod_mdep AS internal_depot_code,\n" +
" mtb_depo_intercode.intercode AS external_depot_code,\n" +
" SUM(qta_col) AS accepted_qty,\n" +
" ROUND(SUM(qta_col) / entrate.colli_pedana, 0) AS accepted_plt_qty\n" +
"\n" +
"FROM entrate\n" +
" INNER JOIN mtb_depo ON entrate.cod_mdep = mtb_depo.cod_mdep\n" +
" INNER JOIN mtb_depo_intercode ON mtb_depo.cod_mdep = mtb_depo_intercode.cod_mdep\n" +
"GROUP BY entrate.cod_mart, entrate.diacod , entrate.cod_anag,\n" +
" data_lav, entrate.colli_pedana, mtb_depo_intercode.intercode, mtb_depo.cod_mdep ");
//endregion
//region Tabella uscite RFU
createOrUpdateView("RFU_daily_shippings_vw", "CREATE VIEW RFU_daily_shippings_vw AS\n" +
"WITH arts AS (SELECT cod_mart, diacod, colli_pedana\n" +
" FROM mtb_aart\n" +
" WHERE cod_mgrp = 'RFU' and flag_stato = 'A'),\n" +
" uscite AS (SELECT mr.cod_mart,\n" +
" a.diacod,\n" +
" mt.cod_anag,\n" +
" dtb_ordt.cod_anag AS cod_clie,\n" +
" dtb_ordt.cod_vdes AS cod_des_clie,\n" +
" mt.rif_ord,\n" +
" mt.cod_vdes,\n" +
" mr.qta_col AS qta_col,\n" +
" mt.cod_mdep,\n" +
" a.colli_pedana,\n" +
" CASE WHEN mt.cod_dtip_provv IS NULL THEN 1 ELSE 0 END AS flag_selezionata,\n" +
" CONVERT(DATE, mt.data_vers) AS data_vend\n" +
" FROM mtb_colt mt\n" +
" INNER JOIN mtb_colr mr ON mt.gestione = mr.gestione AND mt.data_collo = mr.data_collo AND\n" +
" mt.ser_collo = mr.ser_collo AND mt.num_collo = mr.num_collo\n" +
" INNER JOIN arts a ON mr.cod_mart = a.cod_mart\n" +
" LEFT OUTER JOIN dtb_ordt ON mt.rif_ord = dtb_ordt.rif_ord AND dtb_ordt.gestione = 'V'\n" +
" WHERE segno = -1\n" +
" AND mt.gestione = 'V')\n" +
"\n" +
"SELECT rif_ord AS shipping_ref,\n" +
" data_vend AS shipping_date,\n" +
" uscite.cod_mart AS internal_product_code,\n" +
" uscite.diacod AS external_product_code,\n" +
" uscite.cod_clie AS internal_customer_code,\n" +
" anag_clie.diacod AS external_customer_code,\n" +
" anag_clie.rag_soc AS customer,\n" +
" mtb_depo.cod_mdep AS internal_depot_code,\n" +
" mtb_depo_intercode.intercode AS external_depot_code,\n" +
" SUM(qta_col) AS shipped_qty,\n" +
" ROUND(SUM(qta_col) / uscite.colli_pedana, 0) AS shipped_plt_qty\n" +
"\n" +
"FROM uscite\n" +
" INNER JOIN mtb_depo ON uscite.cod_mdep = mtb_depo.cod_mdep\n" +
" INNER JOIN mtb_depo_intercode ON mtb_depo.cod_mdep = mtb_depo_intercode.cod_mdep\n" +
" LEFT OUTER JOIN gtb_anag anag_clie ON anag_clie.cod_anag = uscite.cod_clie\n" +
"GROUP BY rif_ord, data_vend, uscite.cod_mart, uscite.diacod, uscite.cod_clie, anag_clie.diacod, mtb_depo.cod_mdep,\n" +
" mtb_depo_intercode.intercode, uscite.colli_pedana,anag_clie.rag_soc\n");
//endregion
//region Tabella trasferimenti RFU
createOrUpdateView("RFU_daily_transfers_vw", "CREATE VIEW RFU_daily_transfers_vw AS\n" +
"WITH arts AS (SELECT a.cod_mart,\n" +
" a.descrizione,\n" +
" a.diacod,\n" +
" a.colli_pedana\n" +
" FROM mtb_aart a\n" +
" WHERE a.cod_mgrp = 'RFU'),\n" +
" transfers AS (SELECT CAST(c.data_vers AS DATE) AS transfer_date,\n" +
" c.cod_mdep AS cod_mdep_arrivo,\n" +
" depo_arrivo.descrizione AS depo_arrivo,\n" +
" depo_arrivo_ic.intercode AS intercode_depo_arrivo,\n" +
" depo_partenza.cod_mdep AS cod_mdep_partenza,\n" +
" depo_partenza.descrizione AS depo_partenza,\n" +
" depo_partenza_ic.intercode AS intercode_depo_partenza,\n" +
" a.cod_mart,\n" +
" a.descrizione AS desc_articolo,\n" +
" a.diacod AS intercode_art,\n" +
" a.colli_pedana,\n" +
" r.qta_col,\n" +
" ROUND(r.qta_col / a.colli_pedana, 0) AS num_ped\n" +
" FROM mtb_colt c\n" +
" INNER JOIN mtb_depo depo_arrivo ON c.cod_mdep = depo_arrivo.cod_mdep\n" +
" INNER JOIN mtb_depo_intercode depo_arrivo_ic\n" +
" ON depo_arrivo.cod_mdep = depo_arrivo_ic.cod_mdep\n" +
" INNER JOIN vtb_dest d ON c.cod_anag = d.cod_anag AND c.cod_vdes = d.cod_vdes\n" +
" LEFT OUTER JOIN mtb_depo depo_partenza ON depo_partenza.cod_anag = d.cod_anag AND\n" +
" depo_partenza.cod_vdes = d.cod_vdes\n" +
" LEFT OUTER JOIN mtb_depo_intercode depo_partenza_ic\n" +
" ON depo_partenza.cod_mdep = depo_partenza_ic.cod_mdep\n" +
" JOIN mtb_colr r ON c.gestione = r.gestione\n" +
" AND c.data_collo = r.data_collo\n" +
" AND c.ser_collo = r.ser_collo\n" +
" AND c.num_collo = r.num_collo\n" +
" JOIN arts a ON r.cod_mart = a.cod_mart\n" +
" WHERE c.gestione = 'L'\n" +
" AND c.segno = 1\n" +
" AND (c.cod_anag <> depo_arrivo.cod_anag OR c.cod_vdes <> depo_arrivo.cod_vdes))\n" +
"SELECT t.transfer_date as transfer_date,\n" +
" t.cod_mdep_arrivo as internal_arrival_depot_code,\n" +
" t.intercode_depo_arrivo as external_arrival_depot_code,\n" +
" t.depo_arrivo as arrival_depot,\n" +
" t.cod_mdep_partenza as internal_original_depot_code,\n" +
" t.intercode_depo_partenza as external_original_depot_code,\n" +
" t.depo_partenza as original_depot,\n" +
" t.cod_mart as interal_product_code,\n" +
" t.intercode_art as exteral_product_code,\n" +
" t.desc_articolo as product,\n" +
" SUM(t.qta_col) AS transf_qty,\n" +
" SUM(t.num_ped) AS transf_qty_plt\n" +
"FROM transfers t\n" +
"GROUP BY t.transfer_date ,\n" +
" t.cod_mdep_arrivo ,\n" +
" t.depo_arrivo,\n" +
" t.intercode_depo_arrivo,\n" +
" t.cod_mdep_partenza,\n" +
" t.depo_partenza,\n" +
" t.intercode_depo_partenza,\n" +
" t.cod_mart,\n" +
" t.desc_articolo,\n" +
" t.intercode_art");
//endregion
//region Tabella giacenze
createOrUpdateView("WH_stock_vw", "CREATE VIEW WH_stock_vw AS\n" +
"SELECT mtb_aart.cod_mart as internal_product_code,\n" +
" mtb_aart.diacod as external_product_code,\n" +
" mtb_colt.cod_mdep as internal_depot_code,\n" +
" mtb_depo_intercode.intercode as external_depot_code,\n" +
" SUM(qta_col) as stock_qty,\n" +
" SUM(ROUND(qta_col / mtb_aart.colli_pedana,0)) as stock_qty_plt\n" +
"FROM mtb_colt\n" +
" JOIN mtb_colr ON mtb_colt.gestione = mtb_colr.gestione AND mtb_colt.data_collo = mtb_colr.data_collo AND\n" +
" mtb_colt.ser_collo = mtb_colr.ser_collo AND mtb_colt.num_collo = mtb_colr.num_collo\n" +
" JOIN mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart and mtb_aart.flag_stato='A' \n" +
" LEFT OUTER JOIN mtb_depo_intercode ON mtb_colt.cod_mdep = mtb_depo_intercode.cod_mdep\n" +
"\n" +
"GROUP BY mtb_aart.cod_mart, mtb_aart.diacod, mtb_colt.cod_mdep, mtb_depo_intercode.intercode");
//endregion
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,323 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
import it.integry.ems_model.entity.MtbColt;
import it.integry.ems_model.types.OperationType;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.dto.IndexTableDTO;
import java.time.LocalDate;
import java.util.ArrayList;
public class Migration_20250320121611 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomer(IntegryCustomer.Tosca))
return;
//Migration di conversione aziende a nuova mvw_sitart_udc_det_inventario
createBackupOfOldView();
dropView("mvw_sitart_udc_det_inventario");
createNewView();
}
private void createBackupOfOldView() throws Exception {
if (existsView("mvw_sitart_udc_det_inventario_old"))
return;
createOrUpdateView("mvw_sitart_udc_det_inventario_old", "CREATE VIEW [dbo].[mvw_sitart_udc_det_inventario_old] AS\n" +
"SELECT UL.gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo,\n" +
" segno,\n" +
" UL.cod_mdep,\n" +
" UL.posizione,\n" +
" mtb_depo_posizioni.priorita,\n" +
" mtb_aart.cod_mgrp AS codGruppo,\n" +
" mtb_grup.descrizione AS Gruppo,\n" +
" mtb_aart.cod_msgr AS CodSgruppo,\n" +
" mtb_sgrp.descrizione AS Sottogruppo,\n" +
" UL.cod_mart,\n" +
" diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" partita_mag,\n" +
" UL.cod_jcom,\n" +
" jtb_comt.descrizione AS commessa,\n" +
" mtb_aart.unt_mis,\n" +
" qta_col,\n" +
" num_cnf,\n" +
" UL.qta_cnf,\n" +
" UL.peso_netto_kg,\n" +
" UL.peso_lordo_kg,\n" +
" UL.cod_jfas\n" +
"FROM [mvw_sitart_udc_det] UL\n" +
" LEFT OUTER JOIN jtb_comt ON UL.cod_jcom = jtb_comt.cod_jcom\n" +
" LEFT OUTER JOIN mtb_depo_posizioni\n" +
" ON UL.cod_mdep = mtb_depo_posizioni.cod_mdep AND UL.posizione = mtb_depo_posizioni.posizione,\n" +
" mtb_aart,\n" +
" mtb_grup,\n" +
" mtb_sgrp\n" +
"WHERE UL.cod_mart = mtb_aart.cod_mart\n" +
" AND mtb_aart.cod_mgrp = mtb_grup.cod_mgrp\n" +
" AND mtb_aart.cod_mgrp = mtb_sgrp.cod_mgrp\n" +
" AND mtb_aart.cod_msgr = mtb_sgrp.cod_msgr\n" +
" AND qta_col <> 0");
}
private void createNewView() throws Exception {
if (!existsTable("stb_multiplier")) {
executeStatement("CREATE TABLE stb_multiplier\n" +
"(\n" +
" moltiplicatore INT NOT NULL\n" +
")",
"INSERT INTO stb_multiplier (moltiplicatore) VALUES (1)",
"INSERT INTO stb_multiplier (moltiplicatore) VALUES (-1)");
}
createOrUpdateView("mvw_mtb_colr_with_giacenza", "CREATE VIEW dbo.mvw_mtb_colr_with_giacenza\n" +
" WITH SCHEMABINDING\n" +
"AS\n" +
"SELECT COUNT_BIG(*) AS c,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.gestione_rif,\n" +
" mtb_colr.gestione) AS gestione,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.data_collo_rif,\n" +
" mtb_colr.data_collo) AS data_collo,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.ser_collo_rif,\n" +
" mtb_colr.ser_collo) AS ser_collo,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.num_collo_rif,\n" +
" mtb_colr.num_collo) AS num_collo,\n" +
" SUM(mtb_colr.qta_col * moltiplicatore) AS qta_col,\n" +
"\n" +
" SUM(IIF(mtb_aart.flag_qta_cnf_fissa = 'S', mtb_colr.qta_col / mtb_aart.qta_cnf, mtb_colr.num_cnf) *\n" +
" moltiplicatore) AS num_cnf,\n" +
" mtb_colr.cod_mart,\n" +
" mtb_colr.cod_col,\n" +
" mtb_colr.cod_tagl,\n" +
" mtb_colr.partita_mag,\n" +
" SUM(mtb_colr.peso_netto_kg * moltiplicatore) AS peso_netto_kg,\n" +
" SUM(mtb_colr.peso_lordo_kg * moltiplicatore) AS peso_lordo_kg,\n" +
" IIF(mtb_colr.cod_jcom = 'MAG', NULL, mtb_colr.cod_jcom) AS cod_jcom,\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" mtb_aart.unt_mis,\n" +
" mtb_aart.diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" mtb_aart.cod_mgrp,\n" +
" mtb_aart.cod_msgr,\n" +
" mtb_aart.cod_mtip,\n" +
" mtb_aart.cod_mstp,\n" +
" mtb_aart.cod_msfa,\n" +
" mtb_aart.qta_cnf AS qta_cnf_anag\n" +
"FROM dbo.mtb_colr\n" +
" INNER JOIN dbo.stb_multiplier ON moltiplicatore = 1 OR mtb_colr.num_collo_rif IS NOT NULL\n" +
" INNER JOIN dbo.mtb_aart ON mtb_colr.cod_mart = mtb_aart.cod_mart\n" +
"GROUP BY mtb_colr.cod_mart,\n" +
" mtb_colr.cod_col,\n" +
" mtb_colr.cod_tagl,\n" +
" mtb_colr.partita_mag,\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.gestione_rif, mtb_colr.gestione),\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.data_collo_rif,\n" +
" mtb_colr.data_collo),\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.ser_collo_rif,\n" +
" mtb_colr.ser_collo),\n" +
" IIF(moltiplicatore = -1 AND num_collo_rif IS NOT NULL, mtb_colr.num_collo_rif,\n" +
" mtb_colr.num_collo),\n" +
" IIF(mtb_colr.cod_jcom = 'MAG', NULL, mtb_colr.cod_jcom),\n" +
" mtb_aart.flag_qta_cnf_fissa,\n" +
" mtb_aart.unt_mis,\n" +
" mtb_aart.diacod,\n" +
" mtb_aart.descrizione_estesa,\n" +
" mtb_aart.cod_mgrp,\n" +
" mtb_aart.cod_msgr,\n" +
" mtb_aart.cod_mtip,\n" +
" mtb_aart.cod_mstp,\n" +
" mtb_aart.cod_msfa,\n" +
" mtb_aart.qta_cnf");
dropIndex("mvw_mtb_colr_with_giacenza", "IDX_CLUSTERED_mvw_mtb_colr_with_giacenza");
createIndex(new IndexTableDTO()
.setIndexName("IDX_CLUSTERED_mvw_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setUnique(true)
.setClustered(true)
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("gestione"));
add(new IndexTableDTO.ColumnIndex("data_collo"));
add(new IndexTableDTO.ColumnIndex("num_collo"));
add(new IndexTableDTO.ColumnIndex("ser_collo"));
add(new IndexTableDTO.ColumnIndex("cod_mart"));
add(new IndexTableDTO.ColumnIndex("partita_mag"));
add(new IndexTableDTO.ColumnIndex("cod_tagl"));
add(new IndexTableDTO.ColumnIndex("cod_col"));
add(new IndexTableDTO.ColumnIndex("cod_jcom"));
}}));
dropIndex("mvw_mtb_colr_with_giacenza", "IDX_mvw_qta_mtb_colr_with_giacenza");
createIndex(new IndexTableDTO()
.setIndexName("IDX_mvw_qta_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("qta_col"));
add(new IndexTableDTO.ColumnIndex("num_cnf"));
}}));
dropIndex("mvw_mtb_colr_with_giacenza", "IDX_mvw_articolo_mtb_colr_with_giacenza");
createIndex(new IndexTableDTO()
.setIndexName("IDX_mvw_articolo_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("cod_mart"));
add(new IndexTableDTO.ColumnIndex("partita_mag"));
add(new IndexTableDTO.ColumnIndex("cod_tagl"));
add(new IndexTableDTO.ColumnIndex("cod_col"));
}}));
dropIndex("mvw_mtb_colr_with_giacenza", "IDX_mvw_articolo_giac_mtb_colr_with_giacenza");
createIndex(new IndexTableDTO()
.setIndexName("IDX_mvw_articolo_giac_mtb_colr_with_giacenza")
.setTableName("mvw_mtb_colr_with_giacenza")
.setMaxDop(1)
.setSortInTempDb(true)
.setColumnsIndex(new ArrayList<IndexTableDTO.ColumnIndex>() {{
add(new IndexTableDTO.ColumnIndex("cod_mart"));
add(new IndexTableDTO.ColumnIndex("partita_mag"));
add(new IndexTableDTO.ColumnIndex("cod_tagl"));
add(new IndexTableDTO.ColumnIndex("cod_col"));
}})
.setColumnsInclude("qta_col", "num_cnf"));
executeStatement("UPDATE STATISTICS dbo.mvw_mtb_colr_with_giacenza");
createOrUpdateView("mvw_sitart_udc_det_inventario", "CREATE VIEW mvw_sitart_udc_det_inventario AS\n" +
" WITH baseMtbColr AS (SELECT c,\n" +
"\n" +
" ROUND(v.qta_col, cifre_dec) AS qta_col,\n" +
" ROUND(v.num_cnf, cifre_dec) AS num_cnf,\n" +
" IIF(flag_qta_cnf_fissa = 'S',\n" +
" v.qta_cnf_anag, v.qta_col / IIF(v.num_cnf = 0, 1, v.num_cnf)) AS qta_cnf,\n" +
" v.cod_mart,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.partita_mag,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" v.gestione,\n" +
" v.data_collo,\n" +
" v.ser_collo,\n" +
" v.num_collo,\n" +
" v.cod_jcom,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.cod_mgrp,\n" +
" mtb_grup.descrizione AS descrizione_gruppo,\n" +
" v.cod_msgr,\n" +
" mtb_sgrp.descrizione AS descrizione_sottogruppo,\n" +
" mtb_unt_mis.flag_dig,\n" +
" mtb_unt_mis.cifre_dec,\n" +
" mtb_colt.segno,\n" +
" mtb_colt.cod_mdep,\n" +
" mtb_colt.posizione,\n" +
" mtb_colt.cod_dtip,\n" +
" mtb_colt.cod_jfas,\n" +
" mtb_colt.barcode_ul,\n" +
" v.qta_cnf_anag\n" +
" FROM mvw_mtb_colr_with_giacenza v WITH (NOEXPAND)\n" +
" INNER JOIN mtb_colt\n" +
" ON v.num_collo = mtb_colt.num_collo AND v.gestione = mtb_colt.gestione AND\n" +
" v.ser_collo = mtb_colt.ser_collo AND v.data_collo = mtb_colt.data_collo\n" +
" INNER JOIN dbo.mtb_unt_mis ON v.unt_mis = mtb_unt_mis.unt_mis\n" +
"\n" +
" INNER JOIN dbo.mtb_grup ON v.cod_mgrp = mtb_grup.cod_mgrp\n" +
" INNER JOIN dbo.mtb_sgrp ON v.cod_mgrp = mtb_sgrp.cod_mgrp\n" +
" AND v.cod_msgr = mtb_sgrp.cod_msgr\n" +
" WHERE qta_col > 0\n" +
" AND (segno = 1 OR (segno = -1 AND cod_dtip IS NULL AND v.gestione = 'V'))),\n" +
" final_stock AS (SELECT v.qta_col,\n" +
" v.num_cnf,\n" +
" v.qta_cnf,\n" +
" v.gestione,\n" +
" v.data_collo,\n" +
" v.ser_collo,\n" +
" v.num_collo,\n" +
" v.cod_mdep AS cod_mdep,\n" +
" v.posizione AS posizione,\n" +
" mtb_depo_posizioni.priorita,\n" +
" v.cod_mgrp AS codGruppo,\n" +
" v.descrizione_gruppo AS Gruppo,\n" +
" v.cod_msgr AS CodSgruppo,\n" +
" v.descrizione_sottogruppo AS Sottogruppo,\n" +
" v.cod_mart,\n" +
" v.diacod,\n" +
" v.descrizione_estesa,\n" +
" v.partita_mag,\n" +
" v.cod_col,\n" +
" v.cod_tagl,\n" +
" v.cod_jcom,\n" +
" v.peso_netto_kg,\n" +
" v.peso_lordo_kg,\n" +
" v.cod_jfas,\n" +
" v.flag_qta_cnf_fissa,\n" +
" v.unt_mis,\n" +
" v.segno,\n" +
" v.barcode_ul\n" +
" FROM baseMtbColr v\n" +
"\n" +
" LEFT OUTER JOIN mtb_depo_posizioni\n" +
" ON v.cod_mdep = mtb_depo_posizioni.cod_mdep\n" +
" AND v.posizione = mtb_depo_posizioni.posizione)\n" +
"\n" +
" SELECT qta_col,\n" +
" num_cnf,\n" +
" qta_cnf,\n" +
" gestione,\n" +
" data_collo,\n" +
" ser_collo,\n" +
" num_collo,\n" +
" cod_mdep,\n" +
" posizione,\n" +
" priorita,\n" +
" codGruppo,\n" +
" Gruppo,\n" +
" CodSgruppo,\n" +
" Sottogruppo,\n" +
" cod_mart,\n" +
" diacod,\n" +
" descrizione_estesa,\n" +
" partita_mag,\n" +
" cod_col,\n" +
" cod_tagl,\n" +
" cod_jcom,\n" +
" peso_netto_kg,\n" +
" peso_lordo_kg,\n" +
" cod_jfas,\n" +
" flag_qta_cnf_fissa,\n" +
" unt_mis,\n" +
" segno,\n" +
" barcode_ul\n" +
" FROM final_stock");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,27 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250320181355 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
if (!isCustomerDb(IntegryCustomerDB.Salpar_MasabaSrl))
return;
createSetup("IMPORT_ORDINI", "PUDDY", "COD_ALIQ_IVA_OMG", "051",
"Codice aliquota iva omaggio", false, null, false, false,
false, false, false, null, false, null);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,19 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250321173745 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("PVM","SETUP","MAIN_PAGE",null,"Se impostata sovrascrive la pagina principale del portale",null,false,true);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,21 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250324103412 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("ALTER TABLE ctb_varbeni add num_cmov int",
"ALTER TABLE ctb_varbeni ADD CONSTRAINT fk_ctb_varbeni_ctb_movt FOREIGN KEY (num_cmov) REFERENCES ctb_movt (num_cmov)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,24 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250324105112 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
String value = "N";
if (isCustomer(IntegryCustomer.Carelli))
value = "S";
createSetup("PVM","ACCETTAZIONE","WARN_QTA_CHK_ZERO",value,"Richiedi conferma utente se durante l'accettazione da documento si sta accettando articoli con qta a zero","SI_NO");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,22 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250324114445 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement(
"alter table ctb_amac_manutenzioni add convalidato_da varchar(40)",
"alter table ctb_amac_manutenzioni add data_convalida DATETIME2");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,120 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250324163923 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createOrUpdateProcedure("UpdProgMaga", "CREATE PROCEDURE [dbo].[UpdProgMaga](\n" +
" @codAnag varchar(5),\n" +
" @codDtip varchar(5),\n" +
" @dataDoc dateTime,\n" +
" @serDoc varchar(2),\n" +
" @numDoc integer,\n" +
" @segno integer,\n" +
" @codAnagOld varchar(5),\n" +
" @codDtipOld varchar(5),\n" +
" @dataDocOld dateTime,\n" +
" @serDocOld varchar(2),\n" +
" @numDocOld integer,\n" +
" @operation varchar(1)) AS\n" +
"BEGIN \n" +
" \n" +
" --Le righe seguenti sono state aggiunte solo per i DB di Maggio per tracciare le variazioni/cancellazioni di movimenti\n" +
" IF OBJECT_ID (N'mtb_movi_history', N'U') IS NOT NULL and @operation in ('U','D')\n" +
" insert into mtb_movi_history select getDate(), @operation, null as userName, *\n" +
" from mtb_movi where cod_dtip = @codDtipOld and\n" +
" cod_anag = @codAnagOld and\n" +
" data_doc = @dataDocOld and\n" +
" ser_doc = @serDocOld and\n" +
" num_doc = @numDocOld \n" +
" \n" +
" SET NOCOUNT ON;\n" +
" DECLARE @ls_updOrd varchar(1), @newProcedure varchar(1), @applicationName varchar(40);\n" +
" DECLARE @numMov varchar(12)\n" +
" SELECT @ls_updOrd='S'\n" +
"\n" +
" /***DESCRIZIONE: La nuova storedProcedure non contiene tutte le logiche relative alla sostituzione\n" +
" dell'articolo nell'ordine\n" +
" */\n" +
" \n" +
" SELECT @applicationName = application_name from azienda;\n" +
" /*\n" +
" il controllo dei negativi viene disattivato prima della cancellazione del movimento vecchio per evitare che il messaggio dei negativi venga più volte*/\n" +
" exec enableChkGiacenzaNegativa\n" +
"\n" +
" SELECT @newProcedure = dbo.getGestSetup ('DATI_AZIENDA', 'PROGRESSIVI_MAG', 'NUOVA_PROCEDURA')\n" +
"\n" +
" IF @newProcedure = 'S'\n" +
" BEGIN\n" +
" \n" +
" if @segno = -1 \n" +
" BEGIN \n" +
" IF @operation = 'D'\n" +
" /*se si tratta di cancellazione il controllo dei negativi deve essere abilitato*/\n" +
" \n" +
" \n" +
" /*Solo in caso di cancellazione delete della movi altrimenti aggioniamo solo\n" +
" i progressivi dell'ordine\n" +
" */\n" +
" BEGIN\n" +
" SELECT @numMov = (SELECT DISTINCT num_mov \n" +
" FROM mtb_movi\n" +
" WHERE cod_dtip = @codDtip and\n" +
" cod_anag = @codAnag and\n" +
" data_doc = @dataDoc and\n" +
" ser_doc = @serDoc and\n" +
" num_doc = @numDoc )\n" +
" --cancellazione del documento\n" +
" DELETE FROM mtb_movi WHERE num_mov = @numMov;\n" +
" END\n" +
"\n" +
" exec dbo.UpdProgOrdini @codAnag,@codDtip,@dataDoc,@serDoc,@NumDoc, -1, @operation\n" +
" \n" +
" END\n" +
"\n" +
" else\n" +
" begin\n" +
" SELECT @numMov = (SELECT DISTINCT num_mov \n" +
" FROM mtb_movi\n" +
" WHERE cod_dtip = @codDtipOld and\n" +
" cod_anag = @codAnagOld and\n" +
" data_doc = @dataDocOld and\n" +
" ser_doc = @serDocOld and\n" +
" num_doc = @numDocOld )\n" +
"\n" +
"\n" +
" IF @numMov is not null\n" +
" BeGIN \n" +
" exec disableChkGiacenzaNegativa\n" +
" DELETE FROM mtb_movi WHERE num_mov = @numMov; \n" +
" END \n" +
" \n" +
" exec enableChkGiacenzaNegativa\n" +
" EXECUTE UpdMtbMovi @codAnag,@codDtip,@dataDoc,@serDoc,@NumDoc\n" +
"\n" +
" exec dbo.UpdProgOrdini @codAnag,@codDtip,@dataDoc,@serDoc,@NumDoc, 1, @operation \n" +
" end\n" +
"\n" +
" \n" +
" END\n" +
" ELSE\n" +
" BEGIN\n" +
" EXECUTE UpdProgMaga2 @codAnag,@codDtip,@dataDoc,@serDoc,@NumDoc,@segno,@ls_updOrd \n" +
" END\n" +
"\n" +
"END");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,26 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250324164706 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
executeStatement("alter table mtb_colr add barcode_ul_in varchar(20)",
"alter table mtb_colr add barcode_ul_out varchar(20)",
"alter table mtb_colr add posizione_in varchar(40)",
"alter table mtb_colr add posizione_out varchar(40)",
"alter table mtb_colr add cod_mdep_in varchar(5)",
"alter table mtb_colr add constraint fk_mtb_colr_mtb_mdep_in foreign key (cod_mdep_in) references mtb_depo (cod_mdep)",
"alter table mtb_colr add cod_mdep_out varchar(5)",
"alter table mtb_colr add constraint fk_mtb_colr_mtb_mdep_out foreign key (cod_mdep_out) references mtb_depo (cod_mdep)");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,19 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250325102742 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
updateSetupValue("PVM","MONITORAGGIO_LINEE_V2","CALC_DATASCAD_DA_DATA_ORD","N","Se impostata viene utilizzata la data dell'ordine invece che la data odierna per il calcolo della scadenza del lotto proposto",false,"SI_NO",false,true,false,false,false,null,false);
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,23 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250326120859 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("w_dcolli_lk", "SETUP", "CALC_PREZZI", "[_azieda.ini|w_dcolli_lk|CALC_PREZZI|N]",
"se il file vale N prende i prezzi dall'ordine altrimenti vengono ricalcolati", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -0,0 +1,31 @@
package it.integry.ems.migration.model;
import it.integry.ems.migration._base.BaseMigration;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration._base.MigrationModelInterface;
public class Migration_20250326180536 extends BaseMigration implements MigrationModelInterface {
@Override
public void up() throws Exception {
if (isHistoryDB())
return;
createSetup("w_dcolli_lk", "SETUP", "CALC_PREZZI_A", "[_azieda.ini|w_dcolli_lk|CALC_PREZZI|N]",
"se il file vale N prende i prezzi dall'ordine altrimenti vengono ricalcolati", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("w_dcolli_lk", "SETUP", "CALC_PREZZI_V", "[_azieda.ini|w_dcolli_lk|CALC_PREZZI|N]",
"se il file vale N prende i prezzi dall'ordine altrimenti vengono ricalcolati", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
createSetup("w_dcolli_lk", "SETUP", "CALC_PREZZI_L", "[_azieda.ini|w_dcolli_lk|CALC_PREZZI|N]",
"se il file vale N prende i prezzi dall'ordine altrimenti vengono ricalcolati", false, "SI_NO", false, false,
false, false, false, null, false, "SELECT 'S' UNION ALL SELECT 'N'");
deleteSetup("w_dcolli_lk", "SETUP", "CALC_PREZZI");
if (isCustomerDb(IntegryCustomerDB.Carelli_Format))
updateSetupValue("w_dcolli_lk", "SETUP", "CALC_PREZZI_V", "S");
}
@Override
public void down() throws Exception {
}
}

View File

@@ -1,12 +1,14 @@
package it.integry.ems.migration.service;
import it.integry.ems.javabeans.RequestDataDTO;
import it.integry.ems.migration.MigrationComponent;
import it.integry.ems.migration._base.IntegryCustomer;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.migration.dto.MigrationStatusDTO;
import it.integry.ems.migration.dto.MigrationStatusEnum;
import it.integry.ems.service.EntityProcessor;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.settings.SettingsController;
import it.integry.ems.sync.MultiDBTransaction.AdvancedDataSource;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityDebug;
@@ -21,7 +23,6 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Service
@Scope("request")
@@ -39,7 +40,7 @@ public class MigrationSetupService {
private EntityProcessor entityProcessor;
@Autowired
private RequestDataDTO requestDataDTO;
private SettingsController settingsController;
@Autowired
private MultiDBTransactionManager multiDBTransactionManager;
@@ -49,16 +50,15 @@ public class MigrationSetupService {
final List<MigrationStatusDTO> migrationStatuses = new ArrayList<>();
final List<AvailableConnectionsModel> databases = settingsModel.getAvailableConnections().stream()
.filter(AvailableConnectionsModel::getInternalDb)
.collect(Collectors.toList());
String historyProfileDb = settingsController.getHistoryProfileDb();
final List<AvailableConnectionsModel> databases = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, historyProfileDb);
for (AvailableConnectionsModel availableConnectionsModel : databases) {
if (availableConnectionsModel.getDbName().equalsIgnoreCase("studioml") && UtilityDebug.isDebugExecution())
if (IntegryCustomer.getFromDB(IntegryCustomerDB.parse(availableConnectionsModel.getDbName())) == IntegryCustomer.Integry &&
UtilityDebug.isDebugExecution())
continue;
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(availableConnectionsModel)) {
List<StbMigrationStatus> stbMigrationStatuses = retrieveStatuses(multiDBTransactionManager);
if (stbMigrationStatuses == null) {

View File

@@ -13,6 +13,7 @@ public class ReportTypeDTO {
private String codAnag;
private String codMdep;
private String codDtip;
private List<PairsDTO> params;
@@ -60,4 +61,13 @@ public class ReportTypeDTO {
this.codMdep = codMdep;
return this;
}
public String getCodDtip() {
return codDtip;
}
public ReportTypeDTO setCodDtip(String codDtip) {
this.codDtip = codDtip;
return this;
}
}

View File

@@ -309,7 +309,7 @@ public class LoadColliService {
.ifPresent(docr -> dtbDoct
.setDataOrd(docr.getDataOrd())
.setNumOrd(docr.getNumOrd()));
dtbDocr.stream().forEach(x->x.setFlagSezione(FlagSezione.RIGHE_COLLO.getValue()));
dtbDocr.forEach(x->x.setFlagSezione(FlagSezione.RIGHE_COLLO));
}
if (!loadColli.isSaveDoc()) {

View File

@@ -1,12 +1,17 @@
package it.integry.ems.rules.businessLogic;
import it.integry.ems._context.ApplicationContextProvider;
import it.integry.ems.service.production.MrpSetupHandlerService;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.utility.*;
import it.integry.ems_model.utility.UtilityHashMap;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.sql.*;
import java.sql.CallableStatement;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
@@ -83,46 +88,44 @@ public class StoredProcedure {
}
public static class UpdImpProx implements Runnable {
private final String profileDB;
private final String dbName;
private final List<String> listaArticoli;
private final MrpSetupHandlerService mrpSetupHandlerService;
private final SettingsModel settingsModel;
private final Logger logger = LogManager.getLogger();
public UpdImpProx(String profileDB, List<String> listaArticoli) {
this.profileDB = profileDB;
public UpdImpProx(String dbName, List<String> listaArticoli) {
this.dbName = dbName;
this.listaArticoli = listaArticoli;
this.mrpSetupHandlerService = ApplicationContextProvider.getApplicationContext().getBean(MrpSetupHandlerService.class);
this.settingsModel = ApplicationContextProvider.getApplicationContext().getBean(SettingsModel.class);
}
public void run() {
if (!mrpSetupHandlerService.isGestioneAbilitata(dbName)) {
return;
}
final String profileDb = settingsModel.getProfileDbFromDbName(dbName);
MultiDBTransactionManager multiDBTransactionManager = null;
try {
multiDBTransactionManager = new MultiDBTransactionManager(profileDB);
String sql =
"select CAST(COUNT(*) AS bit) " +
"from stb_abil " +
"where cod_opz = 'WG081' and flag_abil = 'S' ";
multiDBTransactionManager = new MultiDBTransactionManager(profileDb);
String articoli = StringUtils.join(listaArticoli, '|');
boolean mrpIsAbil = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
CallableStatement StoredProcedure = multiDBTransactionManager.getPrimaryConnection().prepareCall("{call MRP_UpdateQtaImpProx(?)}");
StoredProcedure.setString(1, articoli);
if (mrpIsAbil) {
String articoli = StringUtils.join(listaArticoli, '|');
StoredProcedure.execute();
StoredProcedure.close();
CallableStatement StoredProcedure = multiDBTransactionManager.getPrimaryConnection().prepareCall("{call MRP_UpdateQtaImpProx(?)}");
StoredProcedure.setString(1, articoli);
multiDBTransactionManager.commitAll();
multiDBTransactionManager.closeAll();
StoredProcedure.execute();
StoredProcedure.close();
multiDBTransactionManager.commitAll();
multiDBTransactionManager.closeAll();
this.logger.debug("MRP_UpdateQtaImpProx - Aggiornato impegni prossimi articoli : " + StringUtils.join(listaArticoli, ','));
} else {
multiDBTransactionManager.closeAll();
}
this.logger.debug("MRP_UpdateQtaImpProx - Aggiornato impegni prossimi articoli : " + StringUtils.join(listaArticoli, ','));
} catch (Exception e) {
//TO-DO inviare email con errore
@@ -137,7 +140,6 @@ public class StoredProcedure {
}
} catch (Exception ex) {
this.logger.error("MRP_UpdateQtaImpProx", ex);
ex.printStackTrace();
}
this.logger.error("MRP_UpdateQtaImpProx", e);
}

View File

@@ -1,24 +1,56 @@
package it.integry.ems.rules.businessLogic.enums;
public enum FlagSezione {
import com.fasterxml.jackson.annotation.JsonValue;
import it.integry.ems_model.entity._enum.IBaseEnum;
import java.util.Objects;
public enum FlagSezione implements IBaseEnum<FlagSezione> {
RIGHE_INTRA(1),
RIGHE_COLLO(2);
private Integer value;
private final Integer value;
FlagSezione(Integer value) {
this.value = value;
}
public static FlagSezione fromValue(Integer value) {
public static FlagSezione from(Object value) {
Integer castValue;
if (value instanceof Character)
castValue = Integer.parseInt(((Character) value).toString());
else if (value instanceof String)
castValue = Integer.parseInt((String) value);
else
castValue = (Integer) value;
for (FlagSezione flagSezione : FlagSezione.values()) {
if (flagSezione.value == value) {
if (Objects.equals(flagSezione.value, castValue)) {
return flagSezione;
}
}
return null;
}
@JsonValue
public Integer getValue() {
return this.value;
}
@Override
public Object get() {
return this.value;
}
@Override
public FlagSezione fromInternal(Object val) {
return from(val);
}
@Override
public String toString() {
return String.valueOf(value);
}
}

View File

@@ -32,6 +32,7 @@ import it.integry.ems.service.dto.AttachmentDTO;
import it.integry.ems.service.dto.EntityFieldDTO;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.settings.SettingsController;
import it.integry.ems.sync.MultiDBTransaction.AdvancedDataSource;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityDebug;
@@ -75,6 +76,7 @@ import java.nio.file.Files;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.zip.ZipOutputStream;
@@ -126,6 +128,9 @@ public class EmsServices {
@Autowired
private MimeTypesHandler mimetypesFileTypeMap;
@Autowired
private SettingsController settingsController;
public EntityImportResponse<List<EntityBase>> importEntity(String type, String format, ImportRequestDTO body, boolean headless) throws Exception {
logger.debug("Starting import [Type: " + type + ", Format: " + format + "]");
String gestName = "IMPORT_" + type;
@@ -186,8 +191,8 @@ public class EmsServices {
if (UtilityString.isNullOrEmpty(fileNameFilter)) {
filesList = fileInput.listFiles();
} else {
filesList = fileInput.listFiles((dir, name) -> name.startsWith(fileNameFilter) ||
name.equalsIgnoreCase(fileNameFilter));
Pattern pattern = Pattern.compile(fileNameFilter, Pattern.CASE_INSENSITIVE);
filesList = fileInput.listFiles((dir, name) -> pattern.matcher(name).matches());
}
} else if (!flagDirectory) {
filesList = new File[1];
@@ -825,7 +830,9 @@ public class EmsServices {
if (UtilityDebug.isDebugExecution() || UtilityDebug.isIntegryServer())
throw new Exception("Cannot export server info in DEBUG mode");
List<AvailableConnectionsModel> availableConnectionList = settingsModel.getAvailableConnections(true);
List<AvailableConnectionsModel> availableConnectionList =
settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, settingsController.getHistoryProfileDb());
for (AvailableConnectionsModel model : availableConnectionList) {
try {
@@ -852,10 +859,6 @@ public class EmsServices {
try {
Properties jvmProperties = System.getProperties();
// String tomcatBase = jvmProperties.getProperty("catalina.base");
// String warPath = String.format("%s/webapps/ems-api.war", tomcatBase);
// File warFile = new File(warPath);
String domainname = System.getenv("USERDOMAIN");
arguments.put("domainName", domainname);
@@ -997,9 +1000,10 @@ public class EmsServices {
List<AdvancedDataSource> db =
Stream.of(data.getActiveConnections())
data.getActiveConnections().stream()
.filter(x -> UtilityString.equalsIgnoreCase(x.getDataSource().getProfile(), x.getDataSource().getDbName()) &&
x.isInternalDb()).toList();
x.isInternalDb())
.collect(Collectors.toList());
for (AdvancedDataSource dataSource : db) {
HashMap<String, Object> resultDbInfo = UtilityDB.executeSimpleQueryOnlyFirstRow(dataSource.getConnection(), sql);

View File

@@ -25,6 +25,7 @@ import javax.print.attribute.Attribute;
import javax.print.attribute.AttributeSet;
import javax.print.attribute.HashPrintRequestAttributeSet;
import javax.print.attribute.PrintRequestAttributeSet;
import javax.print.attribute.standard.Sides;
import java.awt.print.Book;
import java.awt.print.PageFormat;
import java.awt.print.Paper;
@@ -49,37 +50,42 @@ public class PrinterService {
public void print(String printerName, InputStream is, HashPrintRequestAttributeSet attrib, String mimeType) throws Exception {
PrintService myService = configPrinter(printerName);
printFileType(myService, is, attrib, mimeType);
printFileType(myService, is, attrib, mimeType, 1);
}
public void print(String printerName, String fileName, HashPrintRequestAttributeSet attrib, String mimeType) throws Exception {
PrintService myService = configPrinter(printerName);
FileInputStream fis = new FileInputStream(fileName);
printFileType(myService, fis, attrib, mimeType);
printFileType(myService, fis, attrib, mimeType, 1);
}
public void print(String printerName, InputStream is, String mimeType) throws Exception {
public void print(String printerName, InputStream is, String mimeType, int copies) throws Exception {
PrintService myService = configPrinter(printerName);
printFileType(myService, is, new HashPrintRequestAttributeSet(), mimeType);
printFileType(myService, is, new HashPrintRequestAttributeSet(), mimeType, copies);
}
public void print(String printerName, InputStream is, String mimeType, Orientation orientation) throws Exception {
PrintService myService = configPrinter(printerName);
printFileType(myService, is, new HashPrintRequestAttributeSet(), mimeType, orientation);
printFileType(myService, is, new HashPrintRequestAttributeSet(), mimeType, orientation, 1);
}
public void print(String printerName, InputStream is, HashPrintRequestAttributeSet attr, String mimeType, Orientation orientation) throws Exception {
PrintService myService = configPrinter(printerName);
printFileType(myService, is, attr, mimeType, orientation, 1);
}
public void print(String printerName, String fileName, String mimeType) throws Exception {
PrintService myService = configPrinter(printerName);
FileInputStream fis = new FileInputStream(fileName);
printFileType(myService, fis, new HashPrintRequestAttributeSet(), mimeType);
printFileType(myService, fis, new HashPrintRequestAttributeSet(), mimeType, 1);
}
private void printFileType(PrintService myService, InputStream fis, HashPrintRequestAttributeSet attrib, String mimeType)
private void printFileType(PrintService myService, InputStream fis, HashPrintRequestAttributeSet attrib, String mimeType, int copies)
throws Exception {
printFileType(myService, fis, new HashPrintRequestAttributeSet(), mimeType, Orientation.AUTO);
printFileType(myService, fis, new HashPrintRequestAttributeSet(), mimeType, Orientation.AUTO, copies);
}
private void printFileType(PrintService myService, InputStream fis, HashPrintRequestAttributeSet attrib, String mimeType, Orientation orientation)
private void printFileType(PrintService myService, InputStream fis, HashPrintRequestAttributeSet attrib, String mimeType, Orientation orientation, int copies)
throws Exception {
if (mimeType != null && mimeType.endsWith("application/pdf")) {
try {
@@ -87,6 +93,7 @@ public class PrinterService {
PDDocument document = PDDocument.load(fis);
PrinterJob job = PrinterJob.getPrinterJob();
// job.setPageable(new PDFPageable(document,orientation));
job.setCopies(copies);
job.setPrintService(myService);
if (document.getNumberOfPages() > 0) {
@@ -111,7 +118,7 @@ public class PrinterService {
job.setPageable(new PDFPageable(document, orientation));
}
job.print();
job.print(attrib);
document.close();
} catch (Exception e) {
@@ -125,7 +132,6 @@ public class PrinterService {
printJob.print(doc, attrib);
}
fis.close();
}
@@ -235,20 +241,27 @@ public class PrinterService {
public WtbJreptSetup getSetupReportType(ReportTypeDTO reportTypeDTO) throws Exception {
return reportProcessor.getReportForReportType(reportTypeDTO);
WtbJreptSetup impostazioniStampa = reportProcessor.getReportForReportType(reportTypeDTO);
if (impostazioniStampa == null) {
logger.warn("Nessuna configurazione trovata per il tipo report {}", reportTypeDTO.getReportType().toString());
return null;
}
return impostazioniStampa;
}
public void printReportType(ReportTypeDTO reportTypeDTO) throws Exception {
WtbJreptSetup impostazioniStampa = reportProcessor.getReportForReportType(reportTypeDTO);
if (impostazioniStampa == null) {
logger.warn("Nessuna configurazione trovata per il tipo report " + reportTypeDTO.getReportType().toString());
return;
}
public byte[] printReportType(ReportTypeDTO reportTypeDTO) throws Exception {
HashPrintRequestAttributeSet attr = new HashPrintRequestAttributeSet();
WtbJreptSetup impostazioniStampa = getSetupReportType(reportTypeDTO);
if (impostazioniStampa == null) return null;
String printerName = impostazioniStampa.getPrinterName();
Integer numberOfCopies = impostazioniStampa.getPrintQuantity();
if (UtilityString.isNullOrEmpty(printerName)) {
throw new Exception("Nessuna stampante configurata per il tipo report " + reportTypeDTO.getReportType().toString());
}
byte[] bytes = reportProcessor.processReportType(reportTypeDTO);
if (bytes != null) {
Orientation orientation;
@@ -267,15 +280,20 @@ public class PrinterService {
orientation = Orientation.AUTO;
break;
}
numberOfCopies = numberOfCopies == null ? 1 : numberOfCopies;
for (int i = 0; i < numberOfCopies; i++) {
print(printerName, new ByteArrayInputStream(bytes), "application/pdf", orientation);
if (impostazioniStampa.getPrintDuplex()){
// Imposta la stampa fronte-retro (se supportata dalla stampante)
attr.add(Sides.DUPLEX);
}
} else {
throw new EmptyReportException();
numberOfCopies = numberOfCopies == null ? 1 : numberOfCopies;
for (int i = 0; i < numberOfCopies; i++) {
print(printerName, new ByteArrayInputStream(bytes), attr, "application/pdf", orientation);
}
return bytes;
}
throw new EmptyReportException();
}
}

View File

@@ -558,11 +558,13 @@ public class ReportProcessor {
" tipo = :reportType " +
" AND ((:codAnag is null and cod_anag is null) OR (:codAnag is not null and ISNULL(cod_anag,:codAnag) = :codAnag)) " +
" AND ((:codMdep is null and cod_mdep is null) OR (:codMdep is not null and ISNULL(cod_mdep,:codMdep) = :codMdep)) " +
" AND ((:codDtip is null and cod_dtip is null) OR (:codDtip is not null and ISNULL(cod_dtip,:codDtip) = :codDtip)) " +
"order by cod_anag desc, cod_mdep desc";
sql = sql
.replace(":codAnag", UtilityDB.valueToString(reportTypeDTO.getCodAnag()))
.replace(":reportType", UtilityDB.valueToString(reportTypeDTO.getReportType().getValue()))
.replace(":codMdep", UtilityDB.valueToString(reportTypeDTO.getCodMdep()));
.replace(":codDtip", UtilityDB.valueToString(reportTypeDTO.getCodDtip()))
.replace(":codMdep", UtilityDB.valueToString(reportTypeDTO.getCodMdep()))
.replace(":reportType", UtilityDB.valueToString(reportTypeDTO.getReportType().getValue()));
List<WtbJreptSetup> wtbJreptSetup = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, WtbJreptSetup.class);
return (wtbJreptSetup != null && !wtbJreptSetup.isEmpty()) ? wtbJreptSetup.get(0) : null;
}

View File

@@ -1,4 +1,4 @@
package it.integry.ems.production.dto.MRP;
package it.integry.ems.service.dto.production;
import com.fasterxml.jackson.annotation.JsonProperty;

View File

@@ -1,4 +1,4 @@
package it.integry.ems.production.dto.MRP;
package it.integry.ems.service.dto.production;
import com.fasterxml.jackson.annotation.JsonProperty;

View File

@@ -1,4 +1,4 @@
package it.integry.ems.production.dto.MRP;
package it.integry.ems.service.dto.production;
import com.fasterxml.jackson.annotation.JsonProperty;

View File

@@ -1,4 +1,4 @@
package it.integry.ems.retail.pvmRetail.dto;
package it.integry.ems.service.dto.production;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

View File

@@ -1,4 +1,4 @@
package it.integry.ems.production.dto;
package it.integry.ems.service.dto.production;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

View File

@@ -0,0 +1,266 @@
package it.integry.ems.service.production;
import com.annimon.stream.Stream;
import it.integry.ems.service.dto.production.MRPDailyConsumiDTO;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.settings.SettingsController;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.utility.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ContextLoader;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
@Component
public class MrpConsumiHandlerService {
private final Logger logger = LogManager.getLogger();
@Autowired
private SettingsModel settingsModel;
@Autowired
private SettingsController settingsController;
@Autowired
public SetupGest setupGest;
@Autowired
private MrpSetupHandlerService mrpSetupHandlerService;
private final HashMap<String, HashMap<String, Map<String, List<MRPDailyConsumiDTO>>>> consumiCachedData = new HashMap<>();
@Scheduled(fixedDelay = 1, timeUnit = TimeUnit.MINUTES, initialDelay = 60, zone = "Europe/Rome")
private void updateData() throws Exception {
String historyProfileDb = settingsController.getHistoryProfileDb();
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, historyProfileDb);
for (AvailableConnectionsModel connectionModel : availableConnections) {
boolean isEnabled = mrpSetupHandlerService.isGestioneAbilitata(connectionModel.getDbName());
if(!isEnabled) continue;
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
int timingId = UtilityTiming.startNewTiming(MrpConsumiHandlerService.class.getSimpleName() + " (" + connectionModel.getProfileName() + ")");
internalCacheConsumi(multiDBTransactionManager);
UtilityTiming.endTiming(timingId, true);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
}
private void internalCacheConsumi(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
String dbName = multiDBTransactionManager.getPrimaryDatasource().getDbName();
Map<String, List<MRPDailyConsumiDTO>> consumi = getConsumi(multiDBTransactionManager);
HashMap<String, Map<String, List<MRPDailyConsumiDTO>>> section = getSectionConsumiByDBName(consumiCachedData, dbName);
section.clear();
section.put(dbName, consumi);
}
private HashMap<String, Map<String, List<MRPDailyConsumiDTO>>> getSectionConsumiByDBName(HashMap<String, HashMap<String, Map<String, List<MRPDailyConsumiDTO>>>> inputData, String profileDb) {
if (!inputData.containsKey(profileDb))
inputData.put(profileDb, new HashMap<>());
return inputData.get(profileDb);
}
private Map<String, List<MRPDailyConsumiDTO>> getConsumi(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
final String gestName = "PVM";
final String section = "MRP";
final String keySection = "MEDIA_CONSUMI";
String mediaConsumi = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), gestName, section, keySection);
String listaDepositi = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), gestName, section, "LIST_COD_MDEP");
String whereCondDepo = null;
if (!UtilityString.isNullOrEmpty(listaDepositi))
whereCondDepo = String.format("mtb_movi.cod_mdep in ('%s')", listaDepositi.replace(",", "','"));
String codDtipMix = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), "DTB_DOCT", "MOVIMENTAZIONE_OLIO", "COD_DTIP_SCAR");
String sql =
Query.format(
"SELECT mtb_sgrp.cod_mgrp,\n" +
"mtb_sgrp.cod_msgr,\n" +
"IsNull(stb_gest_setup_det.value, %s) as tipo_media\n" +
"FROM mtb_sgrp \n" +
"Left outer join stb_gest_setup_det on gest_name = %s and\n" +
"section = %s and\n" +
"key_section = %s and\n" +
"tipo_setup = 'mtb_sgrp' and mtb_sgrp.cod_mgrp + '~'+ mtb_sgrp.cod_msgr = stb_gest_setup_det.val_col_rif ",
mediaConsumi, gestName, section, keySection);
List<HashMap<String, Object>> sottoGruppi = UtilityDB.executeSimpleQuery(multiDBTransactionManager.getPrimaryConnection(), sql);
List<Map.Entry<Object, List<HashMap<String, Object>>>> tipoMedia = Stream.of(sottoGruppi)
.groupBy(dati -> UtilityHashMap.getValueIfExists(dati, "tipo_media"))
.toList();
List<MRPDailyConsumiDTO> consumiDTO = new ArrayList<>();
for (Map.Entry<Object, List<HashMap<String, Object>>> d : tipoMedia) {
String queryconsumi;
if (d.getKey().equals("M")) {
queryconsumi = getQueryConsumiMesili(d.getValue(), d.getKey().toString(), whereCondDepo, codDtipMix);
} else if (d.getKey().equals("S")) {
queryconsumi = getQueryConsumiSettimanali(d.getValue(), d.getKey().toString(), whereCondDepo, codDtipMix);
} else {
throw new Exception(String.format("Tipo %s non contemplato", d.getKey()));
}
List<MRPDailyConsumiDTO> c = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), queryconsumi, MRPDailyConsumiDTO.class);
consumiDTO.addAll(c);
}
Map<String, List<MRPDailyConsumiDTO>> consumiArticoli = Stream.of(consumiDTO).collect(com.annimon.stream.Collectors.groupingBy(MRPDailyConsumiDTO::getCodMart));
return consumiArticoli;
}
private String getQueryConsumiMesili(List<HashMap<String, Object>> sottogruppi, String tipoMedia, String whereCondDepo, String codDtipMix) {
String whereCond = getWhereCond(sottogruppi);
LocalDate dataFine = UtilityLocalDate.getNow();
LocalDate dataIniz = dataFine.minusMonths(12);
String sql =
String.format(
"SELECT periodo.cod_mart,\n" +
"periodo.finemese AS data,\n" +
"SUM(ISNULL(qta_scar, 0)) qta,\n" +
"'%s' as tipo_media\n" +
"FROM (SELECT DISTINCT cod_mart,\n" +
" EOMONTH(date) AS finemese\n" +
" FROM [dbo].[stb_dates],\n" +
" mtb_aart\n" +
" WHERE stb_dates.date BETWEEN %s AND %s AND %s) periodo\n" +
" LEFT OUTER JOIN (" + getQueryMovimenti(dataIniz, dataFine, whereCondDepo, codDtipMix) + ") mtb_movi ON EOMONTH(data_reg) = periodo.finemese AND periodo.cod_mart = mtb_movi.cod_mart\n " +
"GROUP BY periodo.cod_mart, periodo.finemese\n" +
"ORDER BY periodo.cod_mart, periodo.finemese desc",
tipoMedia,
UtilityDB.valueToString(dataIniz),
UtilityDB.valueToString(dataFine),
whereCond);
return sql;
}
private String getQueryConsumiSettimanali(List<HashMap<String, Object>> sottogruppi, String tipoMedia, String whereCondDepo, String codDtipMix) {
String whereCond = getWhereCond(sottogruppi);
LocalDate dataFine = UtilityLocalDate.getNow();
LocalDate dataIniz = dataFine.minusWeeks(12);
dataIniz = dataIniz.minusDays(1);
String sql =
String.format(
"SELECT tempo.cod_mart,\n" +
" tempo.data,\n" +
" SUM(ISNULL(mtb_movi.qta_scar, 0)) AS qta,\n" +
" '%s' AS tipo_media\n" +
"FROM (SELECT mtb_aart.cod_mart,\n" +
" DATEPART(ISO_WEEK, date) settimana,\n" +
" MAX(DATEFROMPARTS(YEAR(date), MONTH(date), DAY(date))) AS data,\n" +
" DATEADD(DAY, -6, MAX(DATEFROMPARTS(YEAR(date), MONTH(date), DAY(date)))) AS data_min\n" +
" FROM dbo.stb_dates,\n" +
" mtb_part\n" +
" INNER JOIN mtb_aart ON mtb_part.cod_mart = mtb_aart.cod_mart\n" +
" WHERE stb_dates.date BETWEEN %s AND %s AND \n%s\n" +
" GROUP BY mtb_aart.cod_mart, DATEPART(ISO_WEEK, date)) tempo\n" +
" LEFT OUTER JOIN (" + getQueryMovimenti(dataIniz, dataFine, whereCondDepo, codDtipMix) + ") mtb_movi ON mtb_movi.data_reg BETWEEN tempo.data_min AND tempo.data\n" +
" AND mtb_movi.cod_mart = tempo.cod_mart \n" +
" LEFT OUTER JOIN dtb_tipi ON mtb_movi.cod_dtip = dtb_tipi.cod_dtip \n" +
"GROUP BY tempo.cod_mart, tempo.data\n" +
"ORDER BY tempo.cod_mart, tempo.data DESC \n",
tipoMedia,
UtilityDB.valueToString(dataIniz),
UtilityDB.valueToString(dataFine),
whereCond);
return sql;
}
private String getWhereCond(List<HashMap<String, Object>> sottogruppi) {
List<String> cond = Stream.of(sottogruppi)
.map(d -> String.format("(mtb_aart.cod_mgrp = '%s' AND mtb_aart.cod_msgr = '%s' ) ",
UtilityHashMap.getValueIfExists(d, "cod_mgrp"),
UtilityHashMap.getValueIfExists(d, "cod_msgr"))
).toList();
String whereCond =
StringUtils.join(cond, " OR ");
whereCond = "(" + whereCond + ")";
return whereCond;
}
public Map<String, List<MRPDailyConsumiDTO>> getConsumi() throws Exception {
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
String dbName = multiDBTransactionManager.getPrimaryDatasource().getDbName();
if (!mrpSetupHandlerService.isGestioneAbilitata(dbName)) {
return getConsumi(multiDBTransactionManager);
} else {
Map<String, List<MRPDailyConsumiDTO>> consumiList = getSectionConsumiByDBName(consumiCachedData, dbName).get(dbName);
if (consumiList == null)
return getConsumi(multiDBTransactionManager);
return consumiList;
}
}
private String getQueryMovimenti(LocalDate dataInizio, LocalDate dataFine, String whereCondDepo, String codDtipMix) {
String whereCondTipiDoc = "";
if (!UtilityString.isNullOrEmpty(codDtipMix)) {
whereCondTipiDoc =
" AND dtb_tipi.flag_gestione_speciale = 0\n" +
" AND dtb_tipi.cod_dtip NOT IN (SELECT value_string from dbo.ParseStringIntoArray ('" + codDtipMix + "', '|')) ";
}
String queryMovimenti =
"SELECT cod_mart, qta_scar, dtb_tipi.cod_dtip, data_reg\n" +
"FROM mtb_movi\n" +
" INNER JOIN dtb_tipi ON mtb_movi.cod_dtip = dtb_tipi.cod_dtip\n" +
"WHERE dtb_tipi.flag_cons_consumi = 1 \n" +
" AND qta_scar <> 0 \n" +
" AND data_reg BETWEEN '[dataIniz]' AND '[dataFine]'\n" +
(whereCondDepo != null ? "AND " + whereCondDepo + " \n" : "") +
whereCondTipiDoc;
if (!UtilityString.isNullOrEmpty(codDtipMix)) {
queryMovimenti =
queryMovimenti +
"UNION ALL\n" +
"SELECT cod_mart, qta_scar, lvw_movimentiposture.cod_dtip, data_reg\n" +
"FROM lvw_movimentiposture\n" +
" INNER JOIN dtb_tipi ON lvw_movimentiposture.cod_dtip = dtb_tipi.cod_dtip\n" +
"WHERE (dtb_tipi.flag_gestione_speciale = 1 OR (dtb_tipi.gestione = 'L' AND\n" +
" (dtb_tipi.segno_qta_car < 0 OR dtb_tipi.segno_qta_scar <> 0) AND\n" +
" dtb_tipi.flag_gestione_speciale = 0)) AND \n" +
" data_reg BETWEEN '[dataIniz]' AND '[dataFine]'" +
(whereCondDepo != null ? "AND " + whereCondDepo.replace("mtb_movi", "lvw_movimentiposture") + " \n" : "");
}
queryMovimenti =
queryMovimenti
.replace("'[dataIniz]'", UtilityDB.valueToString(dataInizio))
.replace("'[dataFine]'", UtilityDB.valueToString(dataFine));
return queryMovimenti;
}
}

View File

@@ -1,9 +1,7 @@
package it.integry.ems.production.service;
package it.integry.ems.service.production;
import it.integry.annotations.PostContextConstruct;
import it.integry.ems.looper.service.LooperService;
import it.integry.ems.production.dto.MRP.MRPDailySetupGruppiDTO;
import it.integry.ems.production.dto.MRP.MRPDailySetupSottogruppiDTO;
import it.integry.ems.service.dto.production.MRPDailySetupGruppiDTO;
import it.integry.ems.service.dto.production.MRPDailySetupSottogruppiDTO;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.settings.SettingsController;
@@ -14,26 +12,23 @@ import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.utility.Query;
import it.integry.ems_model.utility.UtilityDB;
import it.integry.ems_model.utility.UtilityString;
import it.integry.ems_model.utility.UtilityTiming;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.web.context.ContextLoader;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.concurrent.TimeUnit;
@Component
public class MrpSetupHandlerService {
private final Logger logger = LogManager.getLogger();
@Autowired
private LooperService looperService;
@Autowired
private SettingsModel settingsModel;
@@ -43,93 +38,96 @@ public class MrpSetupHandlerService {
@Autowired
public SetupGest setupGest;
private final HashMap<String, HashMap<String, List<MRPDailySetupSottogruppiDTO>>> setupSottogruppiCachedData = new HashMap<>();
private boolean canBeExecuted = false;
private final HashMap<String, Boolean> executionPermission = new HashMap<>();
private final HashMap<String, HashMap<String, List<MRPDailySetupSottogruppiDTO>>> setupSottogruppiCachedData = new HashMap<>();
private final HashMap<String, HashMap<String, List<MRPDailySetupGruppiDTO>>> setupGruppiCachedData = new HashMap<>();
@PostContextConstruct
public void init() {
if ( saveCache() ) {
looperService.add(() -> this.internalSottogruppoSetupCache(setupSottogruppiCachedData), 30 * 1000, MrpSetupHandlerService.class.getName());
looperService.add(() -> this.internalGruppoSetupCache(setupGruppiCachedData), 30 * 1000, MrpSetupHandlerService.class.getName());
@Scheduled(fixedDelay = 1, timeUnit = TimeUnit.HOURS, zone = "Europe/Rome")
private void refreshCronPermission() throws Exception {
canBeExecuted = !UtilityDebug.isDebugExecution() && settingsModel.isPrimaryInstance() && !UtilityDebug.isIntegryServer();
if (!canBeExecuted) return;
try {
String sql =
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM stb_abil\n" +
"WHERE cod_opz = 'WG125'\n" +
" AND flag_abil <> 'N'";
String historyProfileDb = settingsController.getHistoryProfileDb();
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, historyProfileDb);
for (AvailableConnectionsModel connectionsModel : availableConnections) {
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionsModel, false)) {
boolean isEnabled = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
executionPermission.remove(connectionsModel.getDbName());
executionPermission.put(connectionsModel.getDbName(), isEnabled);
}
}
} catch (Exception ex) {
logger.error(MrpSetupHandlerService.class.getSimpleName(), ex);
throw ex;
}
}
private boolean saveCache(){
return !UtilityDebug.isDebugExecution() && settingsModel.isPrimaryInstance();
public boolean isGestioneAbilitata(String dbName) {
if (!canBeExecuted) return false;
return executionPermission.getOrDefault(dbName, false);
}
private static boolean isGestioneAbilitata(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
String sql =
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM stb_abil\n" +
"WHERE cod_opz IN ('WG125') \n" +
" AND flag_abil <> 'N'";
boolean gestioneAbilitata = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
return gestioneAbilitata;
}
public void internalSottogruppoSetupCache(HashMap<String, HashMap<String, List<MRPDailySetupSottogruppiDTO>>> setupList) {
try {
String historyProfileDb = settingsController.getHistoryProfileDb();
Map<String, List<AvailableConnectionsModel>> databases = settingsModel.getAvailableConnections()
.stream()
.filter(AvailableConnectionsModel::getInternalDb)
.filter(x -> !historyProfileDb.equalsIgnoreCase(x.getProfileName()))
.collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName));
@Scheduled(fixedDelay = 30, timeUnit = TimeUnit.SECONDS, initialDelay = 60, zone = "Europe/Rome")
private void updateData() throws Exception {
if (!canBeExecuted) return;
for (String dbName : databases.keySet()) {
String profileName = databases.get(dbName).get(0).getProfileName();
String historyProfileDb = settingsController.getHistoryProfileDb();
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, historyProfileDb);
Date startDate = new Date();
MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileName, false);
boolean gestioneAbilitata = isGestioneAbilitata(multiDBTransactionManager);
if ( gestioneAbilitata ) {
List<MRPDailySetupSottogruppiDTO> setupSottogruppi = getSetupSottogruppi(multiDBTransactionManager);
HashMap<String, List<MRPDailySetupSottogruppiDTO>> section = getSectionSetupByDBName(setupList, dbName);
section.clear();
section.put(dbName, setupSottogruppi);
for (AvailableConnectionsModel connectionModel : availableConnections) {
boolean isEnabled = isGestioneAbilitata(connectionModel.getDbName());
if (!isEnabled) continue;
}
logger.trace(MrpSetupHandlerService.class.getSimpleName() + " - Setup: Timing " + ((new Date().getTime() - startDate.getTime()) / 1000) + " secs");
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
int timingId = UtilityTiming.startNewTiming(MrpSetupHandlerService.class.getSimpleName() + " (" + connectionModel.getProfileName() + ")");
multiDBTransactionManager.closeAll();
internalSottogruppoSetupCache(multiDBTransactionManager);
internalGruppoSetupCache(multiDBTransactionManager);
UtilityTiming.endTiming(timingId, true);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
}
private void internalSottogruppoSetupCache(MultiDBTransactionManager multiDBTransactionManager) {
try {
String dbName = multiDBTransactionManager.getPrimaryDatasource().getDbName();
List<MRPDailySetupSottogruppiDTO> setupSottogruppi = getSetupSottogruppi(multiDBTransactionManager);
HashMap<String, List<MRPDailySetupSottogruppiDTO>> section = getSectionSetupByDBName(setupSottogruppiCachedData, dbName);
section.clear();
section.put(dbName, setupSottogruppi);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
public void internalGruppoSetupCache(HashMap<String, HashMap<String, List<MRPDailySetupGruppiDTO>>> setupList) {
private void internalGruppoSetupCache(MultiDBTransactionManager multiDBTransactionManager) {
try {
String historyProfileDb = settingsController.getHistoryProfileDb();
Map<String, List<AvailableConnectionsModel>> databases = settingsModel.getAvailableConnections()
.stream()
.filter(AvailableConnectionsModel::getInternalDb)
.filter(x -> !historyProfileDb.equalsIgnoreCase(x.getProfileName()))
.collect(Collectors.groupingBy(AvailableConnectionsModel::getDbName));
for (String dbName : databases.keySet()) {
String profileName = databases.get(dbName).get(0).getProfileName();
Date startDate = new Date();
MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(profileName, false);
boolean gestioneAbilitata = isGestioneAbilitata(multiDBTransactionManager);
if ( gestioneAbilitata ) {
List<MRPDailySetupGruppiDTO> setupGruppiDTO = getSetupGruppi(multiDBTransactionManager);
HashMap<String, List<MRPDailySetupGruppiDTO>> section = getSectionSetupGruppiByDBName(setupList, dbName);
section.clear();
section.put(dbName, setupGruppiDTO);
}
logger.trace(MrpSetupHandlerService.class.getSimpleName() + " - Setup: Timing " + ((new Date().getTime() - startDate.getTime()) / 1000) + " secs");
multiDBTransactionManager.closeAll();
}
String dbName = multiDBTransactionManager.getPrimaryDatasource().getDbName();
List<MRPDailySetupGruppiDTO> setupGruppiDTO = getSetupGruppi(multiDBTransactionManager);
HashMap<String, List<MRPDailySetupGruppiDTO>> section = getSectionSetupGruppiByDBName(setupGruppiCachedData, dbName);
section.clear();
section.put(dbName, setupGruppiDTO);
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
@@ -154,9 +152,9 @@ public class MrpSetupHandlerService {
String sql =
Query.format(
"SELECT cod_mgrp, \n" +
"CAST(CASE WHEN IsNull("+ keySectionSospesi +", %s) = 'S' THEN 1 ELSE 0 END as BIT) as includi_sospesi, \n" +
"CAST(CASE WHEN IsNull("+ keySectionAggImpProx +", %s) = 'S' THEN 1 ELSE 0 END as BIT) as agg_imp_prox, \n" +
"CAST(CASE WHEN IsNull("+ keySectionIncludiBudget +", %s) = 'S' THEN 1 ELSE 0 END as BIT) as includi_budget\n" +
"CAST(CASE WHEN IsNull(" + keySectionSospesi + ", %s) = 'S' THEN 1 ELSE 0 END as BIT) as includi_sospesi, \n" +
"CAST(CASE WHEN IsNull(" + keySectionAggImpProx + ", %s) = 'S' THEN 1 ELSE 0 END as BIT) as agg_imp_prox, \n" +
"CAST(CASE WHEN IsNull(" + keySectionIncludiBudget + ", %s) = 'S' THEN 1 ELSE 0 END as BIT) as includi_budget\n" +
"FROM (\n" +
"SELECT mtb_grup.cod_mgrp, stb_gest_setup_det.key_section, stb_gest_setup_det.value \n" +
"FROM mtb_grup\n" +
@@ -167,8 +165,8 @@ public class MrpSetupHandlerService {
" mtb_grup.cod_mgrp = stb_gest_setup_det.val_col_rif) t\n" +
"PIVOT\n" +
"( max(value) \n" +
"FOR key_section IN (["+ keySectionAggImpProx +"],["+ keySectionSospesi +"],["+ keySectionIncludiBudget +"])) AS PivotTable" ,
useSosepsi, aggImpProx, includiBudget, gestName, section);
"FOR key_section IN ([" + keySectionAggImpProx + "],[" + keySectionSospesi + "],[" + keySectionIncludiBudget + "])) AS PivotTable",
useSosepsi, aggImpProx, includiBudget, gestName, section);
return UtilityDB.executeSimpleQueryDTO(conn, sql, MRPDailySetupGruppiDTO.class);
}
@@ -178,36 +176,37 @@ public class MrpSetupHandlerService {
final String section = "MRP";
final String keySectionMedia = "MEDIA_CONSUMI";
final String keySectionNum = "NUM_AVG_SAMPLES";
String mediaConsumi = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), gestName, section,keySectionMedia);
String limit = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), gestName, section,keySectionNum);
String mediaConsumi = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), gestName, section, keySectionMedia);
String limit = setupGest.getSetup(multiDBTransactionManager.getPrimaryConnection(), gestName, section, keySectionNum);
if (UtilityString.isNullOrEmpty(limit))
limit = "13";
String sql =
Query.format(
"SELECT mtb_sgrp.cod_mgrp,\n" +
" mtb_sgrp.cod_msgr,\n" +
" Cast(ISNULL(MAX(CASE WHEN key_section = '[keySectionNum]' THEN stb_gest_setup_det.value ELSE NULL END), %s) as int) AS limit,\n" +
" ISNULL(MAX(CASE WHEN key_section = '[keySectionMedia]' THEN stb_gest_setup_det.value ELSE NULL END), %S) AS tipo_media\n" +
"FROM mtb_sgrp\n" +
" LEFT OUTER JOIN stb_gest_setup_det\n" +
" ON stb_gest_setup_det.gest_name = %s AND\n" +
" stb_gest_setup_det.section = %s AND\n" +
" stb_gest_setup_det.key_section IN ('[keySectionNum]', '[keySectionMedia]') AND\n" +
" stb_gest_setup_det.tipo_setup = 'mtb_sgrp' AND\n" +
" mtb_sgrp.cod_mgrp + '~' + mtb_sgrp.cod_msgr = stb_gest_setup_det.val_col_rif\n" +
"GROUP BY mtb_sgrp.cod_mgrp,\n" +
" mtb_sgrp.cod_msgr",
limit, mediaConsumi, gestName, section)
"SELECT mtb_sgrp.cod_mgrp,\n" +
" mtb_sgrp.cod_msgr,\n" +
" Cast(ISNULL(MAX(CASE WHEN key_section = '[keySectionNum]' THEN stb_gest_setup_det.value ELSE NULL END), %s) as int) AS limit,\n" +
" ISNULL(MAX(CASE WHEN key_section = '[keySectionMedia]' THEN stb_gest_setup_det.value ELSE NULL END), %S) AS tipo_media\n" +
"FROM mtb_sgrp\n" +
" LEFT OUTER JOIN stb_gest_setup_det\n" +
" ON stb_gest_setup_det.gest_name = %s AND\n" +
" stb_gest_setup_det.section = %s AND\n" +
" stb_gest_setup_det.key_section IN ('[keySectionNum]', '[keySectionMedia]') AND\n" +
" stb_gest_setup_det.tipo_setup = 'mtb_sgrp' AND\n" +
" mtb_sgrp.cod_mgrp + '~' + mtb_sgrp.cod_msgr = stb_gest_setup_det.val_col_rif\n" +
"GROUP BY mtb_sgrp.cod_mgrp,\n" +
" mtb_sgrp.cod_msgr",
limit, mediaConsumi, gestName, section)
.replace("[keySectionNum]", keySectionNum)
.replace("[keySectionMedia]", keySectionMedia);
return UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, MRPDailySetupSottogruppiDTO.class);
}
public List<MRPDailySetupSottogruppiDTO> getSetupSottogruppi() throws Exception {
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
if (!saveCache()) {
if (!canBeExecuted) {
return getSetupSottogruppi(multiDBTransactionManager);
} else {
HashMap<String, HashMap<String, List<MRPDailySetupSottogruppiDTO>>> inputMap = setupSottogruppiCachedData;
@@ -218,10 +217,11 @@ public class MrpSetupHandlerService {
return setupList;
}
}
public List<MRPDailySetupGruppiDTO> getSetupGruppi() throws Exception {
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
if (!saveCache()) {
if (!canBeExecuted) {
return getSetupGruppi(multiDBTransactionManager);
} else {
HashMap<String, HashMap<String, List<MRPDailySetupGruppiDTO>>> inputMap = setupGruppiCachedData;
@@ -239,6 +239,7 @@ public class MrpSetupHandlerService {
return inputData.get(profileDb);
}
private HashMap<String, List<MRPDailySetupGruppiDTO>> getSectionSetupGruppiByDBName(HashMap<String, HashMap<String, List<MRPDailySetupGruppiDTO>>> inputData, String profileDb) {
if (!inputData.containsKey(profileDb))
inputData.put(profileDb, new HashMap<>());

View File

@@ -1,9 +1,9 @@
package it.integry.ems.production.service;
package it.integry.ems.service.production;
import com.annimon.stream.Stream;
import it.integry.common.var.CommonConstants;
import it.integry.ems.production.dto.OrdineLavorazioneDTO;
import it.integry.ems.retail.pvmRetail.dto.OrdineInevasoGroupMercDTO;
import it.integry.ems.service.dto.production.OrdineInevasoGroupMercDTO;
import it.integry.ems.service.dto.production.OrdineLavorazioneDTO;
import it.integry.ems.settings.Model.AvailableConnectionsModel;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.settings.SettingsController;
@@ -20,6 +20,7 @@ import org.springframework.web.context.ContextLoader;
import java.time.LocalDate;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -38,7 +39,7 @@ public class ProductionOrderDataHandlerService {
public SetupGest setupGest;
private final HashMap<String, HashMap<String, List<OrdineLavorazioneDTO>>> inevasiOrdersCachedData = new HashMap<>();
private final Map<String, Map<String, List<OrdineLavorazioneDTO>>> inevasiOrdersCachedData = new ConcurrentHashMap<>();
private boolean canBeExecuted = false;
@@ -62,7 +63,6 @@ public class ProductionOrderDataHandlerService {
for (AvailableConnectionsModel connectionsModel : availableConnections) {
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionsModel, false)) {
boolean isEnabled = UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
executionPermission.remove(connectionsModel.getDbName());
executionPermission.put(connectionsModel.getDbName(), isEnabled);
@@ -79,22 +79,17 @@ public class ProductionOrderDataHandlerService {
@Scheduled(fixedDelay = 5, timeUnit = TimeUnit.SECONDS, initialDelay = 60, zone = "Europe/Rome")
public void updateInternalCache() throws Exception {
boolean onlyInevasi = true;
HashMap<String, HashMap<String, List<OrdineLavorazioneDTO>>> orderList = inevasiOrdersCachedData;
String historyProfileDb = settingsController.getHistoryProfileDb();
final List<AvailableConnectionsModel> availableConnections = settingsModel.getAvailableConnectionsWithoutDuplicatedProfiles(true, historyProfileDb);
for (AvailableConnectionsModel connectionModel : availableConnections) {
boolean isEnabled = executionPermission.getOrDefault(connectionModel.getDbName(), false);
if (!isEnabled) continue;
try (MultiDBTransactionManager multiDBTransactionManager = new MultiDBTransactionManager(connectionModel, false)) {
boolean isEnabled = executionPermission.getOrDefault(connectionModel.getDbName(), false);
Date startDate = new Date();
if (isEnabled)
loadOrdiniProfile(multiDBTransactionManager, onlyInevasi, connectionModel.getDbName(), orderList);
logger.trace(ProductionOrderDataHandlerService.class.getSimpleName() + ": Timing " + ((new Date().getTime() - startDate.getTime()) / 1000) + " secs");
runOrdersCache(multiDBTransactionManager, onlyInevasi, connectionModel.getDbName());
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
@@ -103,14 +98,15 @@ public class ProductionOrderDataHandlerService {
}
private void loadOrdiniProfile(MultiDBTransactionManager multiDBTransactionManager, boolean onlyInevasi, String dbName, HashMap<String, HashMap<String, List<OrdineLavorazioneDTO>>> orderList) throws Exception {
List<OrdineLavorazioneDTO> ordiniLav = getOrdiniLavorazione(multiDBTransactionManager, onlyInevasi ? "I" : null, null, null, null, null);
private void runOrdersCache(MultiDBTransactionManager multiDBTransactionManager, boolean onlyInevasi, String dbName) throws Exception {
List<OrdineLavorazioneDTO> ordiniLav = retrieveOrdiniLavorazione(multiDBTransactionManager, onlyInevasi ? "I" : null, null, null, null, null);
HashMap<String, List<OrdineLavorazioneDTO>> section = getSectionByDBName(orderList, dbName);
Map<String, List<OrdineLavorazioneDTO>> section = getCachedOrdersByDBName(dbName);
section.clear();
if (ordiniLav != null)
Stream.of(ordiniLav).groupBy(OrdineLavorazioneDTO::getCodJfas)
Stream.of(ordiniLav)
.groupBy(OrdineLavorazioneDTO::getCodJfas)
.forEach(x -> {
List<OrdineLavorazioneDTO> listToUpdate = getListByCodJfas(section, x.getKey());
listToUpdate.addAll(x.getValue());
@@ -119,24 +115,189 @@ public class ProductionOrderDataHandlerService {
}
private HashMap<String, List<OrdineLavorazioneDTO>> getSectionByDBName(HashMap<String, HashMap<String, List<OrdineLavorazioneDTO>>> inputData, String profileDb) {
if (!inputData.containsKey(profileDb))
inputData.put(profileDb, new HashMap<>());
private Map<String, List<OrdineLavorazioneDTO>> getCachedOrdersByDBName(String dbName) {
if (!inevasiOrdersCachedData.containsKey(dbName))
inevasiOrdersCachedData.put(dbName, new ConcurrentHashMap<>());
return inputData.get(profileDb);
return inevasiOrdersCachedData.get(dbName);
}
private List<OrdineLavorazioneDTO> getListByCodJfas(HashMap<String, List<OrdineLavorazioneDTO>> inputData, String codJfas) {
private List<OrdineLavorazioneDTO> getListByCodJfas(Map<String, List<OrdineLavorazioneDTO>> inputData, String codJfas) {
if (!inputData.containsKey(codJfas))
inputData.put(codJfas, new ArrayList<>());
return inputData.get(codJfas);
}
private LocalDate getStartDate(LocalDate initialValue, HashMap<String, String> setupGests) {
if (initialValue == null) {
initialValue = LocalDate.now();
String days = UtilityHashMap.getValueIfExists(setupGests, "EARLIER_DATE");
initialValue = initialValue.plusDays(!UtilityString.isNullOrEmpty(days) ? Integer.parseInt(days) : -30);
}
return initialValue;
}
private LocalDate getEndDate(LocalDate initialValue, HashMap<String, String> setupGests) {
if (initialValue == null) {
final String ggMassimiOrdString = UtilityHashMap.getValueIfExists(setupGests, "GG_MASSIMI_ORD");
int ggMassimiOrd = UtilityString.isNullOrEmpty(ggMassimiOrdString) ? 14 : Integer.parseInt(ggMassimiOrdString);
initialValue = LocalDate.now().plusDays(ggMassimiOrd);
}
return initialValue;
}
private List<OrdineLavorazioneDTO> retrieveOrdiniLavorazione(MultiDBTransactionManager multiDBTransactionManager, String flagEvaso, List<String> linee, LocalDate startDate, LocalDate endDate, String codAnag) throws Exception {
int timingId = UtilityTiming.startNewTiming(ProductionOrderDataHandlerService.class.getSimpleName());
HashMap<String, String> setupGests = new HashMap<>();
if (startDate == null || endDate == null) {
setupGests = setupGest.getSetupSection(multiDBTransactionManager.getPrimaryConnection(), "MES", "SETUP");
UtilityTiming.intervalTiming(timingId, "loaded-setup");
}
startDate = getStartDate(startDate, setupGests);
endDate = getEndDate(endDate, setupGests);
if (flagEvaso != null && (!flagEvaso.equalsIgnoreCase("I") && !flagEvaso.equalsIgnoreCase("E"))) {
throw new Exception("Errore durante l'interpretazione del campo \"flagEvaso\"");
}
String query = "SELECT * FROM MES_GetWorkOrders(" +
(linee != null && linee.size() == 1 ? UtilityDB.valueToString(linee.get(0)) : "NULL") + ", " +
UtilityDB.valueToString(startDate) + " , " +
UtilityDB.valueToString(endDate) + "," +
UtilityDB.valueToString(flagEvaso) + "," +
UtilityDB.valueToString(codAnag) + ")\n" +
"ORDER BY sort";
//logger.debug("Query: " + query);
List<OrdineLavorazioneDTO> ordiniLavorazioneList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), query, OrdineLavorazioneDTO.class);
UtilityTiming.intervalTiming(timingId, "loaded-ordini");
if (ordiniLavorazioneList == null || ordiniLavorazioneList.isEmpty())
return null;
//Filter by codJfas
if (linee != null) {
linee = linee.stream()
.map(String::toLowerCase)
.collect(Collectors.toList());
final List<String> finalLinee = linee;
ordiniLavorazioneList = ordiniLavorazioneList.stream()
.filter(x -> finalLinee.contains(x.getCodJfas().toLowerCase()))
.collect(Collectors.toList());
UtilityTiming.intervalTiming(timingId, "split-linee");
if (ordiniLavorazioneList.isEmpty())
return null;
}
for (OrdineLavorazioneDTO ordineDTO : ordiniLavorazioneList) {
if (ordineDTO.getStato().equalsIgnoreCase("IN CORSO")) {
String selectColliDaEditare =
"SELECT mtb_colr.gestione, " +
" mtb_colr.data_collo, " +
" mtb_colr.ser_collo, " +
" mtb_colr.num_collo, " +
" mtb_colr.riga, " +
" mtb_colt.cod_jfas " +
"FROM mtb_colr INNER JOIN mtb_colt ON mtb_colr.gestione = mtb_colt.gestione AND " +
" mtb_colr.data_collo = mtb_colt.data_collo AND " +
" mtb_colr.ser_collo = mtb_colt.ser_collo AND " +
" mtb_colr.num_collo = mtb_colt.num_collo " +
"WHERE mtb_colr.num_etich = 1 AND " +
" mtb_colr.qta_col = 0 AND " +
" mtb_colr.num_ord = " + UtilityDB.valueToString(ordineDTO.getNumOrd()) + " AND " +
" mtb_colr.data_ord = " + UtilityDB.valueDateToString(ordineDTO.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
" mtb_colr.gestione = " + UtilityDB.valueToString(ordineDTO.getGestione()) + " AND " +
" mtb_colr.cod_mart = " + UtilityDB.valueToString(ordineDTO.getCodProd()) + " AND " +
" mtb_colr.partita_mag = " + UtilityDB.valueToString(ordineDTO.getPartitaMag());
Object result = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), selectColliDaEditare);
ordineDTO.setMtbColtToEdit(result);
if (result != null) {
// break;
}
}
}
UtilityTiming.intervalTiming(timingId, "loaded-colli-da-editare");
List<HashMap<String, Object>> orderKeys = ordiniLavorazioneList.stream()
.map(x -> new HashMap<String, Object>() {{
put("dtb_ordr.gestione", x.getGestione());
put("dtb_ordr.num_ord", x.getNumOrd());
put("dtb_ordr.data_ord", x.getDataOrd());
}})
.collect(Collectors.toList());
String sql = "SELECT DISTINCT data_ord,\n" +
" num_ord,\n" +
" gestione,\n" +
" dtb_ordr.cod_mart,\n" +
" mtb_aart.cod_mgrp,\n" +
" mtb_aart.cod_msgr\n" +
"FROM dtb_ordr\n" +
" INNER JOIN mtb_aart on dtb_ordr.cod_mart = mtb_aart.cod_mart\n" +
"WHERE dtb_ordr.flag_evaso = 'I'\n" +
" AND dtb_ordr.flag_evaso_forzato = 'N'" +
" AND (" + UtilityQuery.concatFieldListInWhereCond(orderKeys) + ")";
List<OrdineInevasoGroupMercDTO> grpMerc =
UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, OrdineInevasoGroupMercDTO.class);
UtilityTiming.intervalTiming(timingId, "loaded-order-group-merc");
if (grpMerc == null || grpMerc.isEmpty())
return ordiniLavorazioneList;
ordiniLavorazioneList.parallelStream()
.forEach(order -> {
final Map<String, List<OrdineInevasoGroupMercDTO>> groups = grpMerc.stream()
.filter(x -> Objects.equals(x.getNumOrd(), order.getNumOrd()) &&
x.getDataOrd().equals(order.getDataOrd()) &&
x.getGestione().equalsIgnoreCase(order.getGestione()))
.collect(Collectors.groupingBy(OrdineInevasoGroupMercDTO::getCodMgrp));
if (!groups.isEmpty()) {
order.setAvailableClassMerc(new ArrayList<>());
for (Map.Entry<String, List<OrdineInevasoGroupMercDTO>> entry : groups.entrySet()) {
order.getAvailableClassMerc()
.add(new OrdineLavorazioneDTO.AvailableClassMercDTO()
.setCodMgrp(entry.getKey())
.setCodMsgr(entry.getValue().stream()
.map(OrdineInevasoGroupMercDTO::getCodMsgr)
.collect(Collectors.toList())));
}
}
});
UtilityTiming.endTiming(timingId, true);
return ordiniLavorazioneList;
}
private boolean isMESEnabled(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
boolean isEnabled = executionPermission.getOrDefault(multiDBTransactionManager.getPrimaryDatasource().getDbName(), false);
return isEnabled;
}
public List<OrdineLavorazioneDTO> getOrdiniLavorazioneSync(String flagEvaso, List<String> linee, LocalDate startDate, LocalDate endDate, String codAnag) throws Exception {
MultiDBTransactionManager multiDBTransactionManager = ContextLoader.getCurrentWebApplicationContext().getBean(MultiDBTransactionManager.class);
return getOrdiniLavorazione(multiDBTransactionManager, flagEvaso, linee, startDate, endDate, codAnag);
return retrieveOrdiniLavorazione(multiDBTransactionManager, flagEvaso, linee, startDate, endDate, codAnag);
}
public List<OrdineLavorazioneDTO> getOrdiniLavorazione(String flagEvaso, List<String> linee, LocalDate startDate, LocalDate endDate, String codAnag) throws Exception {
@@ -147,24 +308,22 @@ public class ProductionOrderDataHandlerService {
|| UtilityString.isNullOrEmpty(flagEvaso)
|| !flagEvaso.equalsIgnoreCase("I")
|| !isMESEnabled(multiDBTransactionManager)) {
return getOrdiniLavorazione(multiDBTransactionManager, flagEvaso, linee, startDate, endDate, codAnag);
return retrieveOrdiniLavorazione(multiDBTransactionManager, flagEvaso, linee, startDate, endDate, codAnag);
} else {
HashMap<String, HashMap<String, List<OrdineLavorazioneDTO>>> inputMap = inevasiOrdersCachedData;
List<OrdineLavorazioneDTO> ordersList = new ArrayList<>();
List<OrdineLavorazioneDTO> ordersListToReturn = new ArrayList<>();
final Map<String, List<OrdineLavorazioneDTO>> cachedOrders = getCachedOrdersByDBName(multiDBTransactionManager.getPrimaryDatasource().getDbName());
if (linee != null) {
for (String codJfas : linee) {
ordersList.addAll(getListByCodJfas(getSectionByDBName(inputMap, multiDBTransactionManager.getPrimaryDatasource().getDbName()), codJfas));
ordersListToReturn.addAll(getListByCodJfas(cachedOrders, codJfas));
}
} else {
final HashMap<String, List<OrdineLavorazioneDTO>> ordersByCodJfas = getSectionByDBName(inputMap, multiDBTransactionManager.getPrimaryDatasource().getDbName());
for (List<OrdineLavorazioneDTO> orders : ordersByCodJfas.values()) {
ordersList.addAll(orders);
for (List<OrdineLavorazioneDTO> orders : cachedOrders.values()) {
ordersListToReturn.addAll(orders);
}
}
return ordersList.stream()
return ordersListToReturn.stream()
.filter(x -> (UtilityString.isNullOrEmpty(flagEvaso) || UtilityString.isNull(x.getFlagOrdineEvaso(), "I").equalsIgnoreCase(flagEvaso)) &&
(startDate == null || UtilityLocalDate.localDateFromDate(x.getDataOrd()).isAfter(startDate)) &&
(endDate == null || UtilityLocalDate.localDateFromDate(x.getDataOrd()).isBefore(endDate)) &&
@@ -200,149 +359,4 @@ public class ProductionOrderDataHandlerService {
.filter(x -> x.getStato().equalsIgnoreCase("IN CORSO"))
.collect(Collectors.toList());
}
private List<OrdineLavorazioneDTO> getOrdiniLavorazione(MultiDBTransactionManager multiDBTransactionManager, String flagEvaso, List<String> linee, LocalDate startDate, LocalDate endDate, String codAnag) throws Exception {
HashMap<String, String> setupGests = new HashMap<>();
if (startDate == null || endDate == null) {
setupGests = setupGest.getSetupSection(multiDBTransactionManager.getPrimaryConnection(), "MES", "SETUP");
}
if (startDate == null) {
startDate = LocalDate.now();
String days = UtilityHashMap.getValueIfExists(setupGests, "EARLIER_DATE");
startDate = startDate.plusDays(!UtilityString.isNullOrEmpty(days) ? Integer.parseInt(days) : -30);
}
if (endDate == null) {
final String ggMassimiOrdString = UtilityHashMap.getValueIfExists(setupGests, "GG_MASSIMI_ORD");
int ggMassimiOrd = UtilityString.isNullOrEmpty(ggMassimiOrdString) ? 14 : Integer.parseInt(ggMassimiOrdString);
endDate = LocalDate.now().plusDays(ggMassimiOrd);
}
if (flagEvaso != null && (!flagEvaso.equalsIgnoreCase("I") && !flagEvaso.equalsIgnoreCase("E"))) {
throw new Exception("Errore durante l'interpretazione del campo \"flagEvaso\"");
}
String query = "SELECT * FROM MES_GetWorkOrders(NULL, " +
UtilityDB.valueToString(startDate) + " , " +
UtilityDB.valueToString(endDate) + "," +
UtilityDB.valueToString(flagEvaso) + "," +
UtilityDB.valueToString(codAnag) + ")\n" +
"ORDER BY sort";
List<OrdineLavorazioneDTO> ordiniLavorazioneList = UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), query, OrdineLavorazioneDTO.class);
if (ordiniLavorazioneList != null && linee != null) {
linee = linee.stream().map(String::toLowerCase).collect(Collectors.toList());
final List<String> finalLinee = linee;
ordiniLavorazioneList = ordiniLavorazioneList.stream()
.filter(x -> finalLinee.contains(x.getCodJfas().toLowerCase()))
.collect(Collectors.toList());
}
if (ordiniLavorazioneList != null && !ordiniLavorazioneList.isEmpty()) {
for (OrdineLavorazioneDTO ordineDTO : ordiniLavorazioneList) {
if (ordineDTO.getStato().equalsIgnoreCase("IN CORSO")) {
String selectColliDaEditare =
"SELECT mtb_colr.gestione, " +
" mtb_colr.data_collo, " +
" mtb_colr.ser_collo, " +
" mtb_colr.num_collo, " +
" mtb_colr.riga, " +
" mtb_colt.cod_jfas " +
"FROM mtb_colr INNER JOIN mtb_colt ON mtb_colr.gestione = mtb_colt.gestione AND " +
" mtb_colr.data_collo = mtb_colt.data_collo AND " +
" mtb_colr.ser_collo = mtb_colt.ser_collo AND " +
" mtb_colr.num_collo = mtb_colt.num_collo " +
"WHERE mtb_colr.num_etich = 1 AND " +
" mtb_colr.qta_col = 0 AND " +
" mtb_colr.num_ord = " + UtilityDB.valueToString(ordineDTO.getNumOrd()) + " AND " +
" mtb_colr.data_ord = " + UtilityDB.valueDateToString(ordineDTO.getDataOrd(), CommonConstants.DATE_FORMAT_YMD) + " AND " +
" mtb_colr.gestione = " + UtilityDB.valueToString(ordineDTO.getGestione()) + " AND " +
" mtb_colr.cod_mart = " + UtilityDB.valueToString(ordineDTO.getCodProd()) + " AND " +
" mtb_colr.partita_mag = " + UtilityDB.valueToString(ordineDTO.getPartitaMag());
Object result = UtilityDB.executeSimpleQueryOnlyFirstRow(multiDBTransactionManager.getPrimaryConnection(), selectColliDaEditare);
ordineDTO.setMtbColtToEdit(result);
if (result != null) {
break;
}
}
}
}
if (ordiniLavorazioneList == null || ordiniLavorazioneList.isEmpty())
return null;
List<HashMap<String, Object>> orderKeys = Stream.of(ordiniLavorazioneList)
.map(x -> {
HashMap<String, Object> orderKey = new HashMap<>();
orderKey.put("dtb_ordr.gestione", x.getGestione());
orderKey.put("dtb_ordr.num_ord", x.getNumOrd());
orderKey.put("dtb_ordr.data_ord", x.getDataOrd());
return orderKey;
}).toList();
String sql = "SELECT DISTINCT data_ord,\n" +
" num_ord,\n" +
" gestione,\n" +
" dtb_ordr.cod_mart,\n" +
" mtb_aart.cod_mgrp,\n" +
" mtb_aart.cod_msgr\n" +
"FROM dtb_ordr\n" +
" INNER JOIN mtb_aart on dtb_ordr.cod_mart = mtb_aart.cod_mart\n" +
"WHERE dtb_ordr.flag_evaso = 'I'\n" +
" AND dtb_ordr.flag_evaso_forzato = 'N'" +
" AND (" + UtilityQuery.concatFieldListInWhereCond(orderKeys) + ")";
List<OrdineInevasoGroupMercDTO> grpMerc =
UtilityDB.executeSimpleQueryDTO(multiDBTransactionManager.getPrimaryConnection(), sql, OrdineInevasoGroupMercDTO.class);
if (grpMerc == null || grpMerc.isEmpty())
return ordiniLavorazioneList;
ordiniLavorazioneList.parallelStream().
forEach(order -> {
final Map<String, List<OrdineInevasoGroupMercDTO>> groups = grpMerc.stream()
.filter(x -> Objects.equals(x.getNumOrd(), order.getNumOrd()) &&
x.getDataOrd().equals(order.getDataOrd()) &&
x.getGestione().equalsIgnoreCase(order.getGestione()))
.collect(Collectors.groupingBy(OrdineInevasoGroupMercDTO::getCodMgrp));
if (!groups.isEmpty()) {
order.setAvailableClassMerc(new ArrayList<>());
for (Map.Entry<String, List<OrdineInevasoGroupMercDTO>> entry : groups.entrySet()) {
order.getAvailableClassMerc()
.add(new OrdineLavorazioneDTO.AvailableClassMercDTO()
.setCodMgrp(entry.getKey())
.setCodMsgr(entry.getValue().stream()
.map(OrdineInevasoGroupMercDTO::getCodMsgr)
.collect(Collectors.toList())));
}
}
});
return ordiniLavorazioneList;
}
private boolean isMESEnabled(MultiDBTransactionManager multiDBTransactionManager) throws Exception {
String sql =
"SELECT CAST(COUNT(*) AS BIT)\n" +
"FROM stb_abil\n" +
"WHERE cod_opz IN ('WG069', 'WG135')\n" +
" AND flag_abil <> 'N'";
return UtilityDB.executeSimpleQueryOnlyFirstRowFirstColumn(multiDBTransactionManager.getPrimaryConnection(), sql);
}
}

View File

@@ -21,8 +21,10 @@ public class SettingsHelper {
Map<String, LoggerConfig> loggers = config.getLoggers();
for (LoggerConfig loggerConfig : loggers.values()) {
loggerConfig.setLevel(settingsModel.getLoggerConfiguration().getLevelEnum());
if (loggerConfig.getName().startsWith("it.integry"))
loggerConfig.setLevel(settingsModel.getLoggerConfiguration().getLevelEnum());
}
ctx.updateLoggers();

View File

@@ -20,6 +20,7 @@ import java.util.concurrent.locks.ReentrantLock;
@Component
public class BasicConnectionPool {
private static final Logger logger = LogManager.getLogger(BasicConnectionPool.class);
private final String ExtraConnectionNamePrefix = "EMS Extra Connection #";
@Autowired
private SettingsModel settingsModel;
@@ -186,7 +187,7 @@ public class BasicConnectionPool {
int baseCount = connectionPool.get(dbName).size() + usedConnections.get(dbName).size();
int extraCount = extraConnectionCounters.get(dbName).incrementAndGet();
String connectionName = "EMS Extra Connection #" + (baseCount + extraCount);
String connectionName = ExtraConnectionNamePrefix + (baseCount + extraCount);
// Verifica se la connessione esiste già
if (activeConnectionNames.get(dbName).contains(connectionName)) {
@@ -227,9 +228,10 @@ public class BasicConnectionPool {
String connectionName = ds.getApplicationName();
String dbName = ds.getDbName();
if (connectionName.startsWith("EMS Extra Connection #")) {
if (connectionName.startsWith(ExtraConnectionNamePrefix)) {
activeConnectionNames.get(dbName).remove(connectionName);
ds.forceClose();
tryResetExtraConnectionsCounter(ds);
logger.trace("Closed extra connection: {} for database: {}", connectionName, dbName);
return true;
}
@@ -239,4 +241,12 @@ public class BasicConnectionPool {
logger.trace("Released connection: {} for database: {}", connectionName, dbName);
return removed;
}
private void tryResetExtraConnectionsCounter(DataSource ds) {
String dbName = ds.getDbName();
boolean otherExtraConnectionsOpened = activeConnectionNames.get(dbName).stream().anyMatch(x -> x.startsWith(ExtraConnectionNamePrefix));
if(!otherExtraConnectionsOpened)
extraConnectionCounters.get(dbName).set(0);
}
}

View File

@@ -93,7 +93,7 @@ public class MultiDBTransactionManager implements AutoCloseable {
}
@PreDestroy
public void Destroy() throws Exception {
public void destroy() throws Exception {
this.commitAll();
this.closeAll();
this.dbPrimary = null;
@@ -260,6 +260,10 @@ public class MultiDBTransactionManager implements AutoCloseable {
} catch (UnexpectedConnectionSwitchException e) {
logger.error("UnexpectedConnectionSwitchException: " + advancedDataSource.getProfileName(), e);
}
if(advancedDataSource.getDataSource() == dbPrimary.getDataSource())
dbPrimary = null;
}
dbDatasources.clear();
@@ -304,6 +308,8 @@ public class MultiDBTransactionManager implements AutoCloseable {
throw new Exception(String.format("Configurazione DB non trovata o dati mancanti (%s)", profileDb));
}
this.closeAll();
dataSource = connectionPool.getConnection(profileDb);
java.util.Optional<AvailableConnectionsModel> availableConnectionsModel = SettingsModel.getInstance().getAvailableConnections().stream()

View File

@@ -13,7 +13,6 @@ import java.util.concurrent.*;
@Service
public class TaskExecutorService {
@Autowired
private ExecutorService executorService;
@@ -36,6 +35,36 @@ public class TaskExecutorService {
return results;
}
public <T> T executeTask(Callable<T> tasks)
throws InterruptedException, ExecutionException, TimeoutException {
Future<T> future = executorService.submit(tasks);
T result;
try {
result = future.get(0, TimeUnit.MILLISECONDS); // timeout immediato poiché il task dovrebbe essere già completato
} catch (CancellationException e) {
throw new TimeoutException("Task cancelled due to timeout");
}
return result;
}
public <T> T executeTask(Runnable tasks)
throws InterruptedException, ExecutionException, TimeoutException {
Future<?> future = executorService.submit(tasks);
T result;
try {
result = (T) future.get(); // timeout immediato poiché il task dovrebbe essere già completato
} catch (CancellationException e) {
throw new TimeoutException("Task cancelled due to timeout");
}
return result;
}
// Metodo per eseguire task senza timeout
public <T> List<T> executeTasks(List<Callable<T>> tasks)
throws InterruptedException, ExecutionException, TimeoutException {
@@ -51,7 +80,7 @@ public class TaskExecutorService {
logger.warn("ExecutorService did not terminate in the specified time.");
List<Runnable> droppedTasks = executorService.shutdownNow();
logger.warn("ExecutorService was abruptly shut down. " +
droppedTasks.size() + " tasks will not be executed.");
droppedTasks.size() + " tasks will not be executed.");
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();

View File

@@ -132,6 +132,7 @@ public class UserCacheService {
String finalPasswordHex = UtilityHash.generateHash(password.toUpperCase());
final Optional<UserDTO> foundUser = users.stream()
.filter(x -> x.getUsername().equalsIgnoreCase(username) &&
x.isAttivo() &&
x.getPasswordHash().contentEquals(finalPasswordHex) &&
(application == null ||
(application == IntegryApplicationEnum.PVM && x.isWeb()) ||

View File

@@ -85,6 +85,8 @@ public class UserService {
entityProcessor.processEntity(stbUser, multiDBTransactionManager);
UtilityEntity.throwEntityException(stbUser);
userCacheService.invalidateCache();
return stbUser;
}

View File

@@ -892,6 +892,9 @@ public abstract class EntityBase implements Serializable, Cloneable, EntityInter
}
private void executeManage() throws Exception {
if (getOperation() == OperationType.NO_OP)
managePriorityPre();
managePriorityPre();
if (getOperation() == OperationType.NO_OP) {
// FABIO 20.1.2017: se la entity era in sincronizzazione cond altri

View File

@@ -54,7 +54,6 @@ public class EmsRestConstants {
public static final String PASSWORD = "password";
public static final String X_APP_TOKEN = "x-app-token";
public static final String DEVICE_ID = "device_id";
public static final String INCLUDE_NULLS = "include_nulls";
public static final String FILE_PROPS_NAME = "configs";
//calcoli

View File

@@ -9,6 +9,7 @@ import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.kie.api.definition.type.PropertyReactive;
import java.time.LocalDateTime;
import java.util.Date;
@PropertyReactive
@@ -63,6 +64,10 @@ public class CtbAmacManutenzioni extends EntityBase {
@SqlField(value = "manutenzione_ordinaria")
private Boolean manutenzioneOrdinaria = true;
@SqlField(value = "convalidato_da")
private String convalidatoDa;
@SqlField(value = "data_convalida")
private LocalDateTime dataConvalida;
public CtbAmacManutenzioni() {
super(logger);
@@ -198,6 +203,24 @@ public class CtbAmacManutenzioni extends EntityBase {
return this;
}
public String getConvalidatoDa() {
return convalidatoDa;
}
public CtbAmacManutenzioni setConvalidatoDa(String convalidatoDa) {
this.convalidatoDa = convalidatoDa;
return this;
}
public LocalDateTime getDataConvalida() {
return dataConvalida;
}
public CtbAmacManutenzioni setDataConvalida(LocalDateTime dataConvalida) {
this.dataConvalida = dataConvalida;
return this;
}
public enum MaintenanceStatus implements IBaseEnum<MaintenanceStatus> {
PROGRAMMATA(0), AVVIATA(1), TERMINATA(2), ANNULLATA(3);

View File

@@ -124,6 +124,9 @@ public class CtbBeni extends EntityBase {
@SqlField(value = "data_sosp_agbe")
private Date dataSospAgbe;
@SqlField(value = "residuo_alien")
private BigDecimal residuoAlien;
@EntityChild
private List<CtbVarbeni> ctbVarbeni = new ArrayList<>();
@@ -138,300 +141,324 @@ public class CtbBeni extends EntityBase {
return codBene;
}
public void setCodBene(String codBene) {
public CtbBeni setCodBene(String codBene) {
this.codBene = codBene;
return this;
}
public String getDescrizione() {
return descrizione;
}
public void setDescrizione(String descrizione) {
public CtbBeni setDescrizione(String descrizione) {
this.descrizione = descrizione;
return this;
}
public Date getDataDocAcq() {
return dataDocAcq;
}
public void setDataDocAcq(Date dataDocAcq) {
public CtbBeni setDataDocAcq(Date dataDocAcq) {
this.dataDocAcq = dataDocAcq;
return this;
}
public String getSerDocAcq() {
return serDocAcq;
}
public void setSerDocAcq(String serDocAcq) {
public CtbBeni setSerDocAcq(String serDocAcq) {
this.serDocAcq = serDocAcq;
return this;
}
public int getNumDocAcq() {
return numDocAcq;
}
public void setNumDocAcq(int numDocAcq) {
public CtbBeni setNumDocAcq(int numDocAcq) {
this.numDocAcq = numDocAcq;
return this;
}
public int getNumProtAcq() {
return numProtAcq;
}
public void setNumProtAcq(int numProtAcq) {
public CtbBeni setNumProtAcq(int numProtAcq) {
this.numProtAcq = numProtAcq;
return this;
}
public BigDecimal getValoreAcq() {
return valoreAcq;
}
public void setValoreAcq(BigDecimal valoreAcq) {
public CtbBeni setValoreAcq(BigDecimal valoreAcq) {
this.valoreAcq = valoreAcq;
return this;
}
public String getFlagNuovoUsa() {
return flagNuovoUsa;
}
public void setFlagNuovoUsa(String flagNuovoUsa) {
public CtbBeni setFlagNuovoUsa(String flagNuovoUsa) {
this.flagNuovoUsa = flagNuovoUsa;
return this;
}
public Date getDataInizAmm() {
return dataInizAmm;
}
public void setDataInizAmm(Date dataInizAmm) {
public CtbBeni setDataInizAmm(Date dataInizAmm) {
this.dataInizAmm = dataInizAmm;
return this;
}
public BigDecimal getAliqAmmNorm() {
return aliqAmmNorm;
}
public void setAliqAmmNorm(BigDecimal aliqAmmNorm) {
public CtbBeni setAliqAmmNorm(BigDecimal aliqAmmNorm) {
this.aliqAmmNorm = aliqAmmNorm;
return this;
}
public BigDecimal getAliqAmmNorm1a() {
return aliqAmmNorm1a;
}
public void setAliqAmmNorm1a(BigDecimal aliqAmmNorm1a) {
public CtbBeni setAliqAmmNorm1a(BigDecimal aliqAmmNorm1a) {
this.aliqAmmNorm1a = aliqAmmNorm1a;
return this;
}
public BigDecimal getAliqAmmAnt() {
return aliqAmmAnt;
}
public void setAliqAmmAnt(BigDecimal aliqAmmAnt) {
public CtbBeni setAliqAmmAnt(BigDecimal aliqAmmAnt) {
this.aliqAmmAnt = aliqAmmAnt;
return this;
}
public BigDecimal getAliqAmmAnt1a() {
return aliqAmmAnt1a;
}
public void setAliqAmmAnt1a(BigDecimal aliqAmmAnt1a) {
public CtbBeni setAliqAmmAnt1a(BigDecimal aliqAmmAnt1a) {
this.aliqAmmAnt1a = aliqAmmAnt1a;
return this;
}
public Integer getAnniAmmAnt() {
return anniAmmAnt;
}
public void setAnniAmmAnt(Integer anniAmmAnt) {
public CtbBeni setAnniAmmAnt(Integer anniAmmAnt) {
this.anniAmmAnt = anniAmmAnt;
return this;
}
public Date getDataDocAlie() {
return dataDocAlie;
}
public void setDataDocAlie(Date dataDocAlie) {
public CtbBeni setDataDocAlie(Date dataDocAlie) {
this.dataDocAlie = dataDocAlie;
return this;
}
public String getCodAgbe() {
return codAgbe;
}
public void setCodAgbe(String codAgbe) {
public CtbBeni setCodAgbe(String codAgbe) {
this.codAgbe = codAgbe;
return this;
}
public String getCodCatbene() {
return codCatbene;
}
public void setCodCatbene(String codCatbene) {
public CtbBeni setCodCatbene(String codCatbene) {
this.codCatbene = codCatbene;
return this;
}
public String getSerDocAlie() {
return serDocAlie;
}
public void setSerDocAlie(String serDocAlie) {
public CtbBeni setSerDocAlie(String serDocAlie) {
this.serDocAlie = serDocAlie;
return this;
}
public Integer getNumDocAlie() {
return numDocAlie;
}
public void setNumDocAlie(Integer numDocAlie) {
public CtbBeni setNumDocAlie(Integer numDocAlie) {
this.numDocAlie = numDocAlie;
return this;
}
public BigDecimal getValoreAlie() {
return valoreAlie;
}
public void setValoreAlie(BigDecimal valoreAlie) {
public CtbBeni setValoreAlie(BigDecimal valoreAlie) {
this.valoreAlie = valoreAlie;
return this;
}
public Integer getNumBeni() {
return numBeni;
}
public void setNumBeni(Integer numBeni) {
public CtbBeni setNumBeni(Integer numBeni) {
this.numBeni = numBeni;
return this;
}
public String getCodBeneRif() {
return codBeneRif;
}
public void setCodBeneRif(String codBeneRif) {
public CtbBeni setCodBeneRif(String codBeneRif) {
this.codBeneRif = codBeneRif;
return this;
}
public String getDescrizioneAlien() {
return descrizioneAlien;
}
public void setDescrizioneAlien(String descrizioneAlien) {
public CtbBeni setDescrizioneAlien(String descrizioneAlien) {
this.descrizioneAlien = descrizioneAlien;
return this;
}
public BigDecimal getPercCostoDeduc() {
return percCostoDeduc;
}
public void setPercCostoDeduc(BigDecimal percCostoDeduc) {
public CtbBeni setPercCostoDeduc(BigDecimal percCostoDeduc) {
this.percCostoDeduc = percCostoDeduc;
return this;
}
public Integer getNumCmovAcq() {
return numCmovAcq;
}
public void setNumCmovAcq(Integer numCmovAcq) {
public CtbBeni setNumCmovAcq(Integer numCmovAcq) {
this.numCmovAcq = numCmovAcq;
return this;
}
public String getCodForn() {
return codForn;
}
public void setCodForn(String codForn) {
public CtbBeni setCodForn(String codForn) {
this.codForn = codForn;
return this;
}
public String getCodJfas() {
return codJfas;
}
public void setCodJfas(String codJfas) {
public CtbBeni setCodJfas(String codJfas) {
this.codJfas = codJfas;
return this;
}
public String getCodDiviAcq() {
return codDiviAcq;
}
public void setCodDiviAcq(String codDiviAcq) {
public CtbBeni setCodDiviAcq(String codDiviAcq) {
this.codDiviAcq = codDiviAcq;
return this;
}
public BigDecimal getCambioDiviAcq() {
return cambioDiviAcq;
}
public void setCambioDiviAcq(BigDecimal cambioDiviAcq) {
public CtbBeni setCambioDiviAcq(BigDecimal cambioDiviAcq) {
this.cambioDiviAcq = cambioDiviAcq;
return this;
}
public String getCodDiviVend() {
return codDiviVend;
}
public void setCodDiviVend(String codDiviVend) {
public CtbBeni setCodDiviVend(String codDiviVend) {
this.codDiviVend = codDiviVend;
return this;
}
public BigDecimal getCambioDiviVend() {
return cambioDiviVend;
}
public void setCambioDiviVend(BigDecimal cambioDiviVend) {
public CtbBeni setCambioDiviVend(BigDecimal cambioDiviVend) {
this.cambioDiviVend = cambioDiviVend;
return this;
}
public String getNote() {
return note;
}
public void setNote(String note) {
public CtbBeni setNote(String note) {
this.note = note;
return this;
}
public Date getDataSospAgbe() {
return dataSospAgbe;
}
public void setDataSospAgbe(Date dataSospAgbe) {
public CtbBeni setDataSospAgbe(Date dataSospAgbe) {
this.dataSospAgbe = dataSospAgbe;
return this;
}
public BigDecimal getResiduoAlien() {
return residuoAlien;
}
public CtbBeni setResiduoAlien(BigDecimal residuoAlien) {
this.residuoAlien = residuoAlien;
return this;
}
public List<CtbVarbeni> getCtbVarbeni() {
return ctbVarbeni;
}
public void setCtbVarbeni(List<CtbVarbeni> ctbVarbeni) {
public CtbBeni setCtbVarbeni(List<CtbVarbeni> ctbVarbeni) {
this.ctbVarbeni = ctbVarbeni;
return this;
}
public List<CtbFondi> getCtbFondi() {
return ctbFondi;
}
public void setCtbFondi(List<CtbFondi> ctbFondi) {
public CtbBeni setCtbFondi(List<CtbFondi> ctbFondi) {
this.ctbFondi = ctbFondi;
}
@Override
protected void insertChilds() throws Exception {
for (CtbVarbeni ctbVarbeni : getCtbVarbeni()) {
ctbVarbeni.manageWithParentConnection(connection, ctbVarbeni.getOperation(), dataCompleting, entityHolder);
}
for (CtbFondi ctbFondi : getCtbFondi()) {
ctbFondi.manageWithParentConnection(connection, ctbFondi.getOperation(), dataCompleting, entityHolder);
}
}
@Override
protected void updateChilds() throws Exception {
for (CtbVarbeni ctbVarbeni : getCtbVarbeni()) {
ctbVarbeni.manageWithParentConnection(connection, ctbVarbeni.getOperation(), dataCompleting, entityHolder);
}
for (CtbFondi ctbFondi : getCtbFondi()) {
ctbFondi.manageWithParentConnection(connection, ctbFondi.getOperation(), dataCompleting, entityHolder);
}
return this;
}
@Override

View File

@@ -1,10 +1,7 @@
package it.integry.ems_model.entity;
import com.fasterxml.jackson.annotation.JsonTypeName;
import it.integry.ems_model.annotation.Master;
import it.integry.ems_model.annotation.PK;
import it.integry.ems_model.annotation.SqlField;
import it.integry.ems_model.annotation.Table;
import it.integry.ems_model.annotation.*;
import it.integry.ems_model.base.EntityBase;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -34,6 +31,7 @@ public class CtbVarbeni extends EntityBase {
private Date dataVar;
@PK
@SqlDetailId
@SqlField(value = "id_riga", nullable = false)
private Integer idRiga;
@@ -70,6 +68,15 @@ public class CtbVarbeni extends EntityBase {
@SqlField(value = "flag_amm_1a", maxLength = 1, nullable = false, defaultObjectValue = "N")
private String flagAmm1a;
@SqlField(value = "valore_vend_var")
private BigDecimal valoreVendVar;
@SqlField(value = "residuo_vend_var")
private BigDecimal residuoVendVar;
@SqlField(value = "num_cmov")
private Integer numCmov;
public CtbVarbeni() {
super(logger);
}
@@ -78,111 +85,154 @@ public class CtbVarbeni extends EntityBase {
return codBene;
}
public void setCodBene(String codBene) {
public CtbVarbeni setCodBene(String codBene) {
this.codBene = codBene;
return this;
}
public Date getDataVar() {
return dataVar;
}
public void setDataVar(Date dataVar) {
public CtbVarbeni setDataVar(Date dataVar) {
this.dataVar = dataVar;
return this;
}
public Integer getIdRiga() {
return idRiga;
}
public void setIdRiga(Integer idRiga) {
public CtbVarbeni setIdRiga(Integer idRiga) {
this.idRiga = idRiga;
return this;
}
public String getDescrizioneVar() {
return descrizioneVar;
}
public void setDescrizioneVar(String descrizioneVar) {
public CtbVarbeni setDescrizioneVar(String descrizioneVar) {
this.descrizioneVar = descrizioneVar;
return this;
}
public String getRivalutazione() {
return rivalutazione;
}
public void setRivalutazione(String rivalutazione) {
public CtbVarbeni setRivalutazione(String rivalutazione) {
this.rivalutazione = rivalutazione;
return this;
}
public String getCodAgbe() {
return codAgbe;
}
public void setCodAgbe(String codAgbe) {
public CtbVarbeni setCodAgbe(String codAgbe) {
this.codAgbe = codAgbe;
return this;
}
public BigDecimal getValoreVar() {
return valoreVar;
}
public void setValoreVar(BigDecimal valoreVar) {
public CtbVarbeni setValoreVar(BigDecimal valoreVar) {
this.valoreVar = valoreVar;
return this;
}
public String getFlagStamReg() {
return flagStamReg;
}
public void setFlagStamReg(String flagStamReg) {
public CtbVarbeni setFlagStamReg(String flagStamReg) {
this.flagStamReg = flagStamReg;
return this;
}
public Integer getNumVariazione() {
return numVariazione;
}
public void setNumVariazione(Integer numVariazione) {
public CtbVarbeni setNumVariazione(Integer numVariazione) {
this.numVariazione = numVariazione;
return this;
}
public BigDecimal getVarFondoOrd() {
return varFondoOrd;
}
public void setVarFondoOrd(BigDecimal varFondoOrd) {
public CtbVarbeni setVarFondoOrd(BigDecimal varFondoOrd) {
this.varFondoOrd = varFondoOrd;
return this;
}
public BigDecimal getVarFondoAnt() {
return varFondoAnt;
}
public void setVarFondoAnt(BigDecimal varFondoAnt) {
public CtbVarbeni setVarFondoAnt(BigDecimal varFondoAnt) {
this.varFondoAnt = varFondoAnt;
return this;
}
public String getCodDiviCont() {
return codDiviCont;
}
public void setCodDiviCont(String codDiviCont) {
public CtbVarbeni setCodDiviCont(String codDiviCont) {
this.codDiviCont = codDiviCont;
return this;
}
public BigDecimal getCambioDiviCont() {
return cambioDiviCont;
}
public void setCambioDiviCont(BigDecimal cambioDiviCont) {
public CtbVarbeni setCambioDiviCont(BigDecimal cambioDiviCont) {
this.cambioDiviCont = cambioDiviCont;
return this;
}
public String getFlagAmm1a() {
return flagAmm1a;
}
public void setFlagAmm1a(String flagAmm1a) {
public CtbVarbeni setFlagAmm1a(String flagAmm1a) {
this.flagAmm1a = flagAmm1a;
return this;
}
public BigDecimal getValoreVendVar() {
return valoreVendVar;
}
public CtbVarbeni setValoreVendVar(BigDecimal valoreVendVar) {
this.valoreVendVar = valoreVendVar;
return this;
}
public BigDecimal getResiduoVendVar() {
return residuoVendVar;
}
public CtbVarbeni setResiduoVendVar(BigDecimal residuoVendVar) {
this.residuoVendVar = residuoVendVar;
return this;
}
public Integer getNumCmov() {
return numCmov;
}
public CtbVarbeni setNumCmov(Integer numCmov) {
this.numCmov = numCmov;
return this;
}
}

View File

@@ -265,7 +265,7 @@ public class DtbDocr extends DtbBaseDocR implements EquatableEntityInterface<Dtb
/*Flag_sezione vale 1 per le righe dei riepilogo INTRa, mentre per tutte le altre righe vale null */
@SqlField(value = "flag_sezione")
private Integer flagSezione;
private FlagSezione flagSezione;
@JsonProperty(value = "pesoNetto")
private BigDecimal pesoNetto;
@@ -1169,18 +1169,15 @@ public class DtbDocr extends DtbBaseDocR implements EquatableEntityInterface<Dtb
return this;
}
public Integer getFlagSezione() {
public FlagSezione getFlagSezione() {
return flagSezione;
}
public void setFlagSezione(Integer flagSezione) {
public DtbDocr setFlagSezione(FlagSezione flagSezione) {
this.flagSezione = flagSezione;
return this;
}
// public void setFlagSezione (FlagSezione flagSezione) {
// this.setFlagSezione(flagSezione.getValue());
// }
public String getReso() {
return reso;
}

View File

@@ -214,7 +214,7 @@ public class DtbDoct extends DtbBaseDocT implements EquatableEntityInterface<Dtb
@SqlField(value = "peso", maxLength = 20)
private String peso;
@SqlField(value = "porto", maxLength = 40)
@SqlField(value = "porto", maxLength = 80)
private String porto;
@SqlField(value = "prevista_fat", maxLength = 1, nullable = false)
@@ -360,6 +360,9 @@ public class DtbDoct extends DtbBaseDocT implements EquatableEntityInterface<Dtb
@JsonProperty(value = "numCmovAutofattura")
private Integer numCmovAutofattura;
@JsonProperty
private boolean checkNumDoc = true;
private DtbTipi dtbTipi;
private VtbClie vtbClie;
@@ -1382,6 +1385,15 @@ public class DtbDoct extends DtbBaseDocT implements EquatableEntityInterface<Dtb
return this;
}
public boolean isCheckNumDoc() {
return checkNumDoc;
}
public DtbDoct setCheckNumDoc(boolean checkNumDoc) {
this.checkNumDoc = checkNumDoc;
return this;
}
public DtbTipi getDtbTipi() {
return dtbTipi;
}
@@ -1727,25 +1739,28 @@ public class DtbDoct extends DtbBaseDocT implements EquatableEntityInterface<Dtb
numDocOld = numDoc;
HashMap<String, Object> oldPk = getOldPk();
if (oldPk != null && !oldPk.isEmpty()) {
if (oldPk.containsKey("codAnag"))
codAnagOld = (String) oldPk.get("codAnag");
else if (oldPk.containsKey("codDtip"))
codDtipOld = (String) oldPk.get("codDtip");
else if (oldPk.containsKey("dataDoc")) {
Object value = oldPk.get("dataDoc");
if (value instanceof String )
dataDocOld = UtilityString.parseDate((String) oldPk.get("dataDoc"));
else
dataDocOld = (Date) value;
for (HashMap.Entry<String, Object> dati : oldPk.entrySet()) {
String fieldName = dati.getKey();
if (fieldName.equalsIgnoreCase("codAnag")) {
codAnagOld = (String) dati.getValue();
} else if (fieldName.equalsIgnoreCase("codDtip")) {
codDtipOld = (String) dati.getValue();
}else if (fieldName.equalsIgnoreCase("dataDoc")) {
Object value = dati.getValue();
if (value instanceof String )
dataDocOld = UtilityString.parseDate((String) oldPk.get("dataDoc"));
else
dataDocOld = (Date) value;
} else if (fieldName.equalsIgnoreCase("serDoc")) {
serDocOld = (String) dati.getValue();
}
else if (fieldName.equalsIgnoreCase("numDoc")) {
if (oldPk.get("numDoc") instanceof String) {
numDocOld = Integer.valueOf((String) oldPk.get("numDoc"));
} else
numDocOld = (Integer) oldPk.get("numDoc");
}
}
else if (oldPk.containsKey("serDoc"))
serDocOld = (String) oldPk.get("serDoc");
else if (oldPk.containsKey("numDoc"))
if ( oldPk.get("numDoc") instanceof String ) {
numDocOld = Integer.valueOf((String) oldPk.get("numDoc"));
} else
numDocOld = (Integer) oldPk.get("numDoc");
}
if ("DIRETTA".equals(tipoEmissione)) {
// HashMap<String, Object> datiDoc = new HashMap<>();

View File

@@ -7,7 +7,7 @@ import it.integry.common.var.CommonConstants;
import it.integry.ems._context.ApplicationContextProvider;
import it.integry.ems.rules.businessLogic.StoredProcedure;
import it.integry.ems.rules.completing.PreventRules;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.task.TaskExecutorService;
import it.integry.ems_model.annotation.*;
import it.integry.ems_model.base.EquatableEntityInterface;
import it.integry.ems_model.business_logic.ProductionBusinessLogic;
@@ -277,7 +277,7 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
@SqlField(value = "peso", maxLength = 20)
private String peso;
@SqlField(value = "porto", maxLength = 40)
@SqlField(value = "porto", maxLength = 80)
private String porto;
@SqlField(value = "qta_evasa_prod", defaultObjectValue = "0")
@@ -381,7 +381,7 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
@SqlField(value = "incoterms", maxLength = 20)
private String incoterms;
@SqlField(value = "note_incoterms", maxLength = 20)
@SqlField(value = "note_incoterms", maxLength = 40)
private String noteIncoterms;
private BigDecimal cambio;
@@ -1887,8 +1887,7 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
@Override
public void execStoredProcedure() throws Exception {
if (!UtilityString.isNullOrEmpty(gestione)) {
SettingsModel settingsModel = ApplicationContextProvider.getApplicationContext().getBean(SettingsModel.class);
String profileDB = settingsModel.getProfileDbFromDbName(connection.getCatalog());
String dbName = connection.getCatalog();
List<String> articoli = Stream.of(this.getDtbOrdr()).map(DtbOrdr::getCodMart).distinct().toList();
if (getOperation() == OperationType.DELETE_THEN_INSERT || getOperation() == OperationType.DELETE) {
String sql = "SELECT distinct cod_mart " + " FROM dtb_ordr " + " WHERE dtb_ordr.gestione = %s AND " + "dtb_ordr.data_ord = %s AND " + "dtb_ordr.num_ord = %s ";
@@ -1901,8 +1900,10 @@ public class DtbOrdt extends DtbDocOrdT implements EquatableEntityInterface<DtbO
articoli.addAll(artNew);
}
if (articoli != null && !articoli.isEmpty()) {
StoredProcedure.UpdImpProx task = new StoredProcedure.UpdImpProx(profileDB, articoli);
new Thread(task).start();
final TaskExecutorService executorService = ApplicationContextProvider.getApplicationContext().getBean(TaskExecutorService.class);
StoredProcedure.UpdImpProx task = new StoredProcedure.UpdImpProx(dbName, articoli);
executorService.executeTask(task);
}
}
}

View File

@@ -222,6 +222,9 @@ public class DtbTipi extends EntityBase {
@EntityChild
private List<DrlTipiNoteDoc> drlTipiNoteDoc= new ArrayList<>();
@EntityChild
private WtbJreptSetup wtbJreptSetup;
public DtbTipi() {
super(logger);
}
@@ -822,6 +825,15 @@ public class DtbTipi extends EntityBase {
public void setCodCcauCoan(String codCcauCoan) { this.codCcauCoan = codCcauCoan; }
public WtbJreptSetup getWtbJreptSetup() {
return wtbJreptSetup;
}
public DtbTipi setWtbJreptSetup(WtbJreptSetup wtbJreptSetup) {
this.wtbJreptSetup = wtbJreptSetup;
return this;
}
@Override
protected void deleteChilds() throws Exception {
DtbTipiAnag dtbTipiAnag = new DtbTipiAnag();
@@ -830,6 +842,8 @@ public class DtbTipi extends EntityBase {
dtbTipiCarat.deleteAllEntities(connection, this);
DrlTipiNoteDoc drlTipiNoteDoc = new DrlTipiNoteDoc();
drlTipiNoteDoc.deleteAllEntities(connection, this);
WtbJreptSetup wtbJreptSetup = new WtbJreptSetup();
wtbJreptSetup.deleteAllEntities(connection, this);
}
public enum AccontoDa {

View File

@@ -45,6 +45,15 @@ public class MrlDepoArtEsclusiWms extends EntityBase {
@SqlField(value = "cod_mart", maxLength = 15)
private String codMart;
@SqlField(value = "flag_escludi_lav", nullable = false, defaultObjectValue = "1")
private Boolean flagEscludiLav;
@SqlField(value = "flag_escludi_acq", nullable = false, defaultObjectValue = "1")
private Boolean flagEscludiAcq;
@SqlField(value = "flag_escludi_ven", nullable = false, defaultObjectValue = "1")
private Boolean flagEscludiVen;
public MrlDepoArtEsclusiWms() {
super(logger);
}
@@ -120,4 +129,31 @@ public class MrlDepoArtEsclusiWms extends EntityBase {
this.codMart = codMart;
return this;
}
public Boolean getFlagEscludiLav() {
return flagEscludiLav;
}
public MrlDepoArtEsclusiWms setFlagEscludiLav(Boolean flagEscludiLav) {
this.flagEscludiLav = flagEscludiLav;
return this;
}
public Boolean getFlagEscludiAcq() {
return flagEscludiAcq;
}
public MrlDepoArtEsclusiWms setFlagEscludiAcq(Boolean flagEscludiAcq) {
this.flagEscludiAcq = flagEscludiAcq;
return this;
}
public Boolean getFlagEscludiVen() {
return flagEscludiVen;
}
public MrlDepoArtEsclusiWms setFlagEscludiVen(Boolean flagEscludiVen) {
this.flagEscludiVen = flagEscludiVen;
return this;
}
}

View File

@@ -155,6 +155,24 @@ public class MtbColr extends EntityBase implements EquatableEntityInterface<MtbC
@SqlField(value = "system_note", maxLength = 255)
private String systemNote;
@SqlField(value = "barcode_ul_in", maxLength = 20)
private String barcodeUlIn;
@SqlField(value = "barcode_ul_out", maxLength = 20)
private String barcodeUlOut;
@SqlField(value = "cod_mdep_in", maxLength = 5)
private String codMdepIn;
@SqlField(value = "cod_mdep_out", maxLength = 5)
private String codMdepOut;
@SqlField(value = "posizione_in", maxLength = 40)
private String posizioneIn;
@SqlField(value = "posizione_out", maxLength = 40)
private String posizioneOut;
@EntityChild
MtbColrInfoProd mtbColrInfoProd;
@@ -573,6 +591,60 @@ public class MtbColr extends EntityBase implements EquatableEntityInterface<MtbC
return this;
}
public String getBarcodeUlIn() {
return barcodeUlIn;
}
public MtbColr setBarcodeUlIn(String barcodeUlIn) {
this.barcodeUlIn = barcodeUlIn;
return this;
}
public String getBarcodeUlOut() {
return barcodeUlOut;
}
public MtbColr setBarcodeUlOut(String barcodeUlOut) {
this.barcodeUlOut = barcodeUlOut;
return this;
}
public String getCodMdepIn() {
return codMdepIn;
}
public MtbColr setCodMdepIn(String codMdepIn) {
this.codMdepIn = codMdepIn;
return this;
}
public String getCodMdepOut() {
return codMdepOut;
}
public MtbColr setCodMdepOut(String codMdepOut) {
this.codMdepOut = codMdepOut;
return this;
}
public String getPosizioneIn() {
return posizioneIn;
}
public MtbColr setPosizioneIn(String posizioneIn) {
this.posizioneIn = posizioneIn;
return this;
}
public String getPosizioneOut() {
return posizioneOut;
}
public MtbColr setPosizioneOut(String posizioneOut) {
this.posizioneOut = posizioneOut;
return this;
}
public MtbColrInfoProd getMtbColrInfoProd() {
return mtbColrInfoProd;
}

View File

@@ -98,6 +98,12 @@ public class MtbPartitaMag extends EntityBase implements EquatableEntityInterfac
@SqlField(value = "nazione_prov", maxLength = 3)
private String nazioneProv;
@SqlField(value = "partita_mag_prod", maxLength = 20)
private String partitaMagProd;
@SqlField(value = "data_prod")
private Date dataProd;
@EntityChild
private List<MtbPartitaMagCarat> mtbPartitaMagCarat = new ArrayList<>();
@@ -321,6 +327,24 @@ public class MtbPartitaMag extends EntityBase implements EquatableEntityInterfac
return this;
}
public String getPartitaMagProd() {
return partitaMagProd;
}
public MtbPartitaMag setPartitaMagProd(String partitaMagProd) {
this.partitaMagProd = partitaMagProd;
return this;
}
public Date getDataProd() {
return dataProd;
}
public MtbPartitaMag setDataProd(Date dataProd) {
this.dataProd = dataProd;
return this;
}
@Override
protected void insertChilds() throws Exception {
for (MtbPartitaMagCarat mtbPartitaMagCarat : getMtbPartitaMagCarat()) {

View File

@@ -6,7 +6,7 @@ import com.fasterxml.jackson.annotation.JsonValue;
import it.integry.common.var.CommonConstants;
import it.integry.ems._context.ApplicationContextProvider;
import it.integry.ems.rules.businessLogic.StoredProcedure;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.task.TaskExecutorService;
import it.integry.ems_model.annotation.*;
import it.integry.ems_model.base.EntityBase;
import it.integry.ems_model.entity._enum.IBaseEnum;
@@ -292,11 +292,18 @@ public class VtbOfft extends EntityBase {
@Override
public void execStoredProcedure() throws Exception {
if (getStatoOfferta() == StatoOfferta.COMPLETATA) {
SettingsModel settingsModel = ApplicationContextProvider.getApplicationContext().getBean(SettingsModel.class);
String profileDB = settingsModel.getProfileDbFromDbName(connection.getCatalog());
List<String> articoli = Stream.of(this.getVtbOffr()).map(VtbOffr::getCodMart).distinct().toList();
String dbName = connection.getCatalog();
List<String> articoli = Stream.of(this.getVtbOffr())
.map(VtbOffr::getCodMart)
.distinct()
.toList();
if (getOperation() == OperationType.DELETE_THEN_INSERT) {
String sql = "SELECT distinct cod_mart " + " FROM vtb_offr " + " WHERE vtb_offr.id_offerta = %s";
String sql = "SELECT distinct cod_mart " +
" FROM vtb_offr " +
" WHERE vtb_offr.id_offerta = %s";
sql = String.format(sql, UtilityDB.valueToString(getIdOfferta()));
if (!articoli.isEmpty()) {
sql = UtilityDB.addwhereCond(sql, "vtb_offr.cod_mart in ('" + StringUtils.join(articoli, "','") + "')", true);
@@ -306,8 +313,10 @@ public class VtbOfft extends EntityBase {
articoli.addAll(artNew);
}
if (articoli != null && !articoli.isEmpty()) {
StoredProcedure.UpdImpProx task = new StoredProcedure.UpdImpProx(profileDB, articoli);
new Thread(task).start();
final TaskExecutorService executorService = ApplicationContextProvider.getApplicationContext().getBean(TaskExecutorService.class);
StoredProcedure.UpdImpProx task = new StoredProcedure.UpdImpProx(dbName, articoli);
executorService.executeTask(task);
}
}
}

View File

@@ -38,6 +38,9 @@ public class WtbJreptSetup extends EntityBase {
@SqlField(value = "cod_anag", maxLength = 5)
private String codAnag;
@SqlField(value = "cod_dtip", maxLength = 5)
private String codDtip;
@SqlField(value = "orientation", nullable = false)
private Orientation orientation;
@@ -50,6 +53,9 @@ public class WtbJreptSetup extends EntityBase {
@SqlField(value = "print_quantity", nullable = false, defaultObjectValue = "1")
private Integer printQuantity;
@SqlField(value = "print_duplex", nullable = false, defaultObjectValue = "false")
private Boolean printDuplex;
public WtbJreptSetup() {
super(logger);
}
@@ -117,6 +123,24 @@ public class WtbJreptSetup extends EntityBase {
return this;
}
public String getCodDtip() {
return codDtip;
}
public WtbJreptSetup setCodDtip(String codDtip) {
this.codDtip = codDtip;
return this;
}
public Boolean getPrintDuplex() {
return printDuplex;
}
public WtbJreptSetup setPrintDuplex(Boolean printDuplex) {
this.printDuplex = printDuplex;
return this;
}
public Orientation getOrientation() {
return orientation;
}
@@ -134,7 +158,8 @@ public class WtbJreptSetup extends EntityBase {
WMS_SPEDIZIONE_PACKING_LIST_ORD((short) 4),
STAMPA_LISTINI_VENDITA((short) 5),
STAMPA_LISTINI_VENDITA_RANGE_PEDANE((short) 6),
STAMPA_ORDINE_LAVORAZIONE((short) 7);
STAMPA_ORDINE_LAVORAZIONE((short) 7),
STAMPA_DOCUMENTI_VENDITA((short) 8);
private final short value;

View File

@@ -130,4 +130,18 @@ public class UtilityLocalDate {
if (dateToCheck == null) return fallbackValue;
return dateToCheck;
}
public static LocalDateTime addHourToLocalDate(LocalDate localDate, String hour) {
LocalDateTime localDateTime = localDate.atStartOfDay();
String[] split = hour.split(":");
int hourToAdd = 0;
int minuteToAdd = 0;
int secondToAdd = 0;
for (int i = 0; i < split.length; i++) {
if (i == 0) hourToAdd = Integer.parseInt(split[i]);
else if (i == 1) minuteToAdd = Integer.parseInt(split[i]);
else if (i == 2) secondToAdd = Integer.parseInt(split[i]);
}
return localDateTime.plusHours(hourToAdd).plusMinutes(minuteToAdd).plusSeconds(secondToAdd);
}
}

View File

@@ -0,0 +1,277 @@
package it.integry.ems_model.utility;
import groovy.lang.Tuple3;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
public class UtilityTiming {
private static final Logger logger = LogManager.getLogger(UtilityTiming.class);
private static final Map<Integer, List<Tuple3<String, String, LocalTime>>> timingsMap = new ConcurrentHashMap<>();
private static final Map<Integer, Integer> nestedTimings = new ConcurrentHashMap<>(); // parent -> child
private static final AtomicInteger idCounter = new AtomicInteger();
private static final DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss.SSS");
private static final int MAX_COMPLETED_TIMINGS = 100;
/**
* Avvia un nuovo timing e restituisce il suo ID univoco
* @param name Nome dell'istanza di timing
* @return ID univoco dell'istanza
*/
public static int startNewTiming(String name) {
cleanupIfNeeded();
int id = idCounter.incrementAndGet();
List<Tuple3<String, String, LocalTime>> timings = new ArrayList<>();
timings.add(new Tuple3<>(name, "start", LocalTime.now()));
timingsMap.put(id, timings);
return id;
}
/**
* Avvia un timing nidificato all'interno di un timing esistente
* @param parentId ID del timing padre
* @param name Nome dell'istanza di timing
* @return ID univoco dell'istanza figlio
*/
public static int startNestedTiming(int parentId, String name) {
if (!timingExists(parentId)) {
return -1;
}
int childId = startNewTiming(name);
nestedTimings.put(childId, parentId);
return childId;
}
/**
* Registra un intervallo nel timing
* @param id ID dell'istanza di timing
* @param intervalName Nome dell'intervallo
* @return Durata dall'ultimo evento registrato, o null se l'ID non esiste
*/
public static Duration intervalTiming(int id, String intervalName) {
LocalTime now = LocalTime.now();
List<Tuple3<String, String, LocalTime>> timings = timingsMap.get(id);
if (timings != null && !timings.isEmpty()) {
LocalTime lastTime = timings.get(timings.size() - 1).getV3();
Duration interval = Duration.between(lastTime, now);
timings.add(new Tuple3<>(intervalName, "interval", now));
return interval;
}
return null;
}
/**
* Termina un timing e stampa il riepilogo
* @param id ID dell'istanza di timing
* @return Durata totale del timing, o null se l'ID non esiste
*/
public static Duration endTiming(int id) {
return endTiming(id, true);
}
/**
* Termina un timing con opzione per stampare il riepilogo
* @param id ID dell'istanza di timing
* @param printSummary se true stampa il riepilogo
* @return Durata totale del timing, o null se l'ID non esiste
*/
public static Duration endTiming(int id, boolean printSummary) {
LocalTime now = LocalTime.now();
List<Tuple3<String, String, LocalTime>> timings = timingsMap.get(id);
if (timings != null && !timings.isEmpty()) {
LocalTime startTime = timings.get(0).getV3();
Duration totalDuration = Duration.between(startTime, now);
timings.add(new Tuple3<>("end", "end", now));
if (printSummary) {
logSummary(id);
}
// Se questo è un timing annidato, aggiorna anche il padre
if (nestedTimings.containsKey(id)) {
Integer parentId = nestedTimings.get(id);
intervalTiming(parentId, timings.get(0).getV1() + " completato");
nestedTimings.remove(id);
}
return totalDuration;
}
return null;
}
/**
* Stampa il riepilogo di un timing usando il logger
* @param id ID dell'istanza di timing
*/
public static void logSummary(int id) {
String summary = getSummaryAsString(id);
if (summary != null) {
logger.trace(summary);
}
}
/**
* Ottiene il riepilogo di un timing come stringa
* @param id ID dell'istanza di timing
* @return Riepilogo formattato come stringa, o null se l'ID non esiste
*/
public static String getSummaryAsString(int id) {
List<Tuple3<String, String, LocalTime>> timings = timingsMap.get(id);
if (timings == null || timings.isEmpty()) {
return "Nessun timing trovato per l'ID: " + id;
}
LocalTime startTime = timings.get(0).getV3();
LocalTime endTime = timings.get(timings.size() - 1).getV3();
StringBuilder sb = new StringBuilder();
sb.append(String.format("Riepilogo Timing per ID: %d%n", id));
sb.append(String.format("Nome timing: %s%n", timings.get(0).getV1()));
sb.append(String.format("Tempo di inizio: %s%n", startTime.format(timeFormatter)));
// Aggiunge gli intervalli
for (int i = 1; i < timings.size(); i++) {
Tuple3<String, String, LocalTime> timing = timings.get(i);
Tuple3<String, String, LocalTime> prevTiming = timings.get(i - 1);
if (timing.getV2().equals("interval")) {
Duration intervalDuration = Duration.between(prevTiming.getV3(), timing.getV3());
sb.append(String.format("Intervallo [%s] al: %s (durata: %s)%n",
timing.getV1(),
timing.getV3().format(timeFormatter),
formatDuration(intervalDuration)));
}
}
sb.append(String.format("Tempo di fine: %s%n", endTime.format(timeFormatter)));
sb.append(String.format("Durata totale: %s", formatDuration(Duration.between(startTime, endTime))));
return sb.toString();
}
/**
* Stampa il riepilogo di un timing su System.out (mantenuto per compatibilità)
* @param id ID dell'istanza di timing
*/
public static void printSummary(int id) {
System.out.println(getSummaryAsString(id));
}
/**
* Formatta una durata in un formato leggibile
* @param duration La durata da formattare
* @return Stringa formattata
*/
private static String formatDuration(Duration duration) {
long millis = duration.toMillis();
return String.format("%d.%03d sec", millis / 1000, millis % 1000);
}
/**
* Rimuove un timing dalla mappa
* @param id ID del timing da rimuovere
* @return true se il timing è stato rimosso, false altrimenti
*/
public static boolean removeTiming(int id) {
nestedTimings.remove(id);
return timingsMap.remove(id) != null;
}
/**
* Verifica se esiste un timing con l'ID specificato
* @param id ID da verificare
* @return true se esiste, false altrimenti
*/
public static boolean timingExists(int id) {
return timingsMap.containsKey(id);
}
/**
* Rimuove tutti i timing dalla mappa
*/
public static void clearAll() {
timingsMap.clear();
nestedTimings.clear();
}
/**
* Ottiene la durata di un timing senza terminarlo
* @param id ID dell'istanza di timing
* @return Durata attuale, o null se l'ID non esiste
*/
public static Duration getCurrentDuration(int id) {
List<Tuple3<String, String, LocalTime>> timings = timingsMap.get(id);
if (timings != null && !timings.isEmpty()) {
LocalTime startTime = timings.get(0).getV3();
return Duration.between(startTime, LocalTime.now());
}
return null;
}
/**
* Ottiene statistiche sui timing completati
* @return Mappa con nome timing e durata media
*/
public static Map<String, Duration> getTimingStatistics() {
Map<String, List<Duration>> durations = new HashMap<>();
timingsMap.entrySet().stream()
.filter(entry -> entry.getValue().size() > 1 &&
entry.getValue().get(entry.getValue().size() - 1).getV2().equals("end"))
.forEach(entry -> {
List<Tuple3<String, String, LocalTime>> timings = entry.getValue();
String name = timings.get(0).getV1();
LocalTime startTime = timings.get(0).getV3();
LocalTime endTime = timings.get(timings.size() - 1).getV3();
Duration duration = Duration.between(startTime, endTime);
durations.computeIfAbsent(name, k -> new ArrayList<>()).add(duration);
});
return durations.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> {
List<Duration> list = entry.getValue();
long totalMillis = list.stream().mapToLong(Duration::toMillis).sum();
return Duration.ofMillis(totalMillis / list.size());
}
));
}
/**
* Pulisce i timing completati se necessario
*/
private static void cleanupIfNeeded() {
if (timingsMap.size() > MAX_COMPLETED_TIMINGS) {
List<Integer> completedTimings = timingsMap.entrySet().stream()
.filter(entry -> {
List<Tuple3<String, String, LocalTime>> timings = entry.getValue();
return timings.size() > 1 &&
timings.get(timings.size() - 1).getV2().equals("end");
})
.map(Map.Entry::getKey)
.collect(Collectors.toList());
// Rimuove i timing completati più vecchi
if (completedTimings.size() > MAX_COMPLETED_TIMINGS / 2) {
completedTimings.stream()
.limit(completedTimings.size() - MAX_COMPLETED_TIMINGS / 2)
.forEach(id -> {
timingsMap.remove(id);
nestedTimings.remove(id);
});
}
}
}
}

View File

@@ -158,29 +158,21 @@ public class NotificationController {
ServiceRestResponse sendNotification(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody MessageDTO messageDTO) {
if (!firebaseService.isActive()) {
return ServiceRestResponse.createNegativeResponse("Servizio notifiche non attivo.");
}
Message.Builder builder = messageDTO.toBuilder();
if (messageDTO.getUserName() != null) {
builder.setTopic(firebaseService.getUserTopic(messageDTO.getUserName(), configuration));
}
ServiceRestResponse response;
try {
firebaseService.sendMessage(builder.build());
Message.Builder builder = messageDTO.toBuilder();
response = ServiceRestResponse.createPositiveResponse("Notifica inviata.");
if (messageDTO.getUserName() != null) {
builder.setTopic(firebaseService.getUserTopic(multiDBTransactionManager.getPrimaryDatasource(), messageDTO.getUserName()));
}
firebaseService.sendMessage(multiDBTransactionManager.getPrimaryDatasource(), builder.build());
return ServiceRestResponse.createPositiveResponse("Notifica inviata.");
} catch (Exception e) {
logger.error(request.getRequestURI(), e);
response = ServiceRestResponse.createNegativeResponse(e);
return ServiceRestResponse.createNegativeResponse(e);
}
return response;
}
@RequestMapping(value = EmsRestConstants.PATH_NOTIF_SEND_USER_DEVICES, method = RequestMethod.POST)
@@ -188,10 +180,6 @@ public class NotificationController {
ServiceRestResponse sendNotificationToUserDevices(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestBody MessageDTO messageDTO) {
if (!firebaseService.isActive()) {
return ServiceRestResponse.createNegativeResponse("Servizio notifiche non attivo.");
}
ServiceRestResponse response;
try {
@@ -201,7 +189,7 @@ public class NotificationController {
.setToken(device.getDeviceToken())
.build();
firebaseService.sendMessage(message);
firebaseService.sendMessage(multiDBTransactionManager.getPrimaryDatasource(), message);
} catch (FirebaseMessagingException fireEx) {
if (fireEx.getMessagingErrorCode() == MessagingErrorCode.UNREGISTERED) {
deviceTokenService.removeDeviceToken(device);
@@ -225,10 +213,6 @@ public class NotificationController {
public ServiceRestResponse sendNotificheCRM(HttpServletRequest request,
@RequestParam(CommonConstants.PROFILE_DB) String configuration,
@RequestParam int expiryMins) {
if (!firebaseService.isActive()) {
return ServiceRestResponse.createNegativeResponse("Servizio notifiche non attivo.");
}
String titoloNotificheCRM = null;
try {
titoloNotificheCRM = setupGest.getSetup("FIREBASE", "NOTIFICATION", "TITOLO_NOTIFICHE_CRM");
@@ -277,7 +261,7 @@ public class NotificationController {
.build();
try {
firebaseService.sendMessage(message);
firebaseService.sendMessage(multiDBTransactionManager.getPrimaryDatasource(), message);
} catch (FirebaseMessagingException e) {
if (e.getMessagingErrorCode() == MessagingErrorCode.UNREGISTERED) {
deviceTokenService.removeDeviceToken(userDevice);

View File

@@ -0,0 +1,7 @@
package it.integry.firebase.exception;
public class FirebaseNotReadyException extends RuntimeException {
public FirebaseNotReadyException() {
super("Firebase not ready. Please initialize it first.");
}
}

View File

@@ -55,16 +55,16 @@ public class DeviceTokenService {
String userName = UtilityHashMap.getValueIfExists(result, "user_name");
if (userName != null && !userDeviceToken.getUserName().equals(userName)) {
firebaseService.unsubscribeFromUser(userDeviceToken.getDeviceToken(), userName, multiDBTransactionManager.getPrimaryDatasource().getProfile());
firebaseService.unsubscribeFromUser(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), userName);
WtbDeviceTokenTopic deviceTokenTopic = new WtbDeviceTokenTopic();
deviceTokenTopic.setOperation(OperationType.DELETE);
deviceTokenTopic.setTopicName(firebaseService.getUserTopic(userName, multiDBTransactionManager.getPrimaryDatasource().getProfile()));
deviceTokenTopic.setTopicName(firebaseService.getUserTopic(multiDBTransactionManager.getPrimaryDatasource(), userName));
userDeviceToken.addWtbDeviceTokenTopic(deviceTokenTopic);
firebaseService.subscribeToUser(userDeviceToken.getDeviceToken(), userDeviceToken.getUserName(), multiDBTransactionManager.getPrimaryDatasource().getProfile());
firebaseService.subscribeToUser(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), userDeviceToken.getUserName());
}
this.manageSubscriptionToTopics(userDeviceToken, SubscribeOperation.SUBSCRIBE, deleteOldTopics);
@@ -93,7 +93,7 @@ public class DeviceTokenService {
entityProcessor.processEntity(userDeviceToken, multiDBTransactionManager);
firebaseService.unsubscribeFromUser(userDeviceToken.getDeviceToken(), userDeviceToken.getUserName(), multiDBTransactionManager.getPrimaryDatasource().getProfile());
firebaseService.unsubscribeFromUser(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), userDeviceToken.getUserName());
this.manageSubscriptionToTopics(userDeviceToken, SubscribeOperation.UNSUBSCRIBE);
@@ -116,7 +116,7 @@ public class DeviceTokenService {
entityProcessor.processEntity(userDeviceToken, multiDBTransactionManager);
firebaseService.unsubscribeFromUser(userDeviceToken.getDeviceToken(), userDeviceToken.getUserName(), multiDBTransactionManager.getPrimaryDatasource().getProfile());
firebaseService.unsubscribeFromUser(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), userDeviceToken.getUserName());
this.manageSubscriptionToTopics(userDeviceToken, SubscribeOperation.UNSUBSCRIBE);
@@ -207,7 +207,7 @@ public class DeviceTokenService {
}
}
final String userTopic = firebaseService.getUserTopic(userDeviceToken.getUserName(), multiDBTransactionManager.getPrimaryDatasource().getProfile());
final String userTopic = firebaseService.getUserTopic(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getUserName());
if (userDeviceToken.getTopics() == null) {
userDeviceToken.setWtbDeviceTokenTopicFromTopics(Collections.singletonList(userTopic));
@@ -218,13 +218,13 @@ public class DeviceTokenService {
switch (operation) {
case SUBSCRIBE:
for (WtbDeviceTokenTopic deviceTokenTopic : userDeviceToken.getWtbDeviceTokenTopic()) {
firebaseService.subscribeToTopic(userDeviceToken.getDeviceToken(), deviceTokenTopic.getTopicName());
firebaseService.subscribeToTopic(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), deviceTokenTopic.getTopicName());
}
break;
case UNSUBSCRIBE:
for (WtbDeviceTokenTopic deviceTokenTopic : userDeviceToken.getWtbDeviceTokenTopic()) {
firebaseService.unsubscribeFromTopic(userDeviceToken.getDeviceToken(), deviceTokenTopic.getTopicName());
firebaseService.unsubscribeFromTopic(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), deviceTokenTopic.getTopicName());
}
break;
@@ -295,7 +295,7 @@ public class DeviceTokenService {
ps.close();
firebaseService.unsubscribeFromTopic(userDeviceToken.getDeviceToken(), topic);
firebaseService.unsubscribeFromTopic(multiDBTransactionManager.getPrimaryDatasource(), userDeviceToken.getDeviceToken(), topic);
}
break;

View File

@@ -6,180 +6,192 @@ import com.google.firebase.FirebaseOptions;
import com.google.firebase.messaging.FirebaseMessaging;
import com.google.firebase.messaging.Message;
import com.google.firebase.messaging.TopicManagementResponse;
import it.integry.annotations.PostContextAutowired;
import it.integry.annotations.PostContextConstruct;
import it.integry.ems.datasource.DataSource;
import it.integry.ems.migration._base.IntegryCustomerDB;
import it.integry.ems.settings.Model.SettingsModel;
import it.integry.ems.settings.SettingsController;
import it.integry.ems.sync.MultiDBTransaction.AdvancedDataSource;
import it.integry.ems.sync.MultiDBTransaction.MultiDBTransactionManager;
import it.integry.ems.utility.UtilityDebug;
import it.integry.ems_model.service.SetupGest;
import it.integry.ems_model.utility.UtilityHashMap;
import it.integry.firebase.exception.FirebaseNotReadyException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import java.io.InputStream;
import java.net.URL;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@Service
@Scope("request")
public class FirebaseService {
public static final String NOTIF_USER_TOPIC_PREFIX = "user_";
@Autowired
private SettingsController settingsController;
@Autowired
private SettingsModel settingsModel;
@Autowired
private SetupGest setupGest;
private boolean dryRun = UtilityDebug.isDebugExecution();
@PostContextAutowired
private MultiDBTransactionManager multiDBTransactionManager;
private final HashMap<String, Boolean> initializedInstances = new HashMap<>();
private final Logger logger = LogManager.getLogger();
private boolean initialize() throws Exception {
boolean isDryRunCheckEnabled = !setupGest.getSetupBoolean("FIREBASE", "NOTIFICATION", "DISABLE_DRY_RUN_CHECK");
dryRun = UtilityDebug.isDebugExecution() && isDryRunCheckEnabled;
if (!FirebaseApp.getApps().isEmpty()) {
return true;
@PostContextConstruct(priority = 10)
private void initialize() throws Exception {
for (AdvancedDataSource advancedDataSource : multiDBTransactionManager.getActiveConnections()) {
initializedInstances.put(advancedDataSource.getDataSource().getDbName(), false);
final HashMap<String, String> setupSection = setupGest.getSetupSection(advancedDataSource.getConnection(), "FIREBASE", "NOTIFICATION");
if (!"S".equalsIgnoreCase(UtilityHashMap.getValueIfExists(setupSection, "ATTIVO")))
continue;
InputStream refreshToken;
try {
String endpoint = UtilityHashMap.getValueIfExists(setupSection, "CONFIGURATION_ENDPOINT");
URL url = new URL(endpoint);
refreshToken = url.openStream();
} catch (Exception e) {
logger.error(e);
continue;
}
if (refreshToken == null)
continue;
FirebaseOptions options;
try {
options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.fromStream(refreshToken))
.build();
} catch (Exception e) {
logger.error(e);
continue;
}
FirebaseApp.initializeApp(options, advancedDataSource.getDataSource().getDbName());
initializedInstances.put(advancedDataSource.getDataSource().getDbName(), true);
}
if (!this.isActive()) {
return false;
}
InputStream refreshToken;
try {
URL url = new URL(this.getFirebaseEndpoint());
refreshToken = url.openStream();
} catch (Exception e) {
logger.error(e);
throw e;
}
if (refreshToken == null) {
return false;
}
FirebaseOptions options;
try {
options = FirebaseOptions.builder()
.setCredentials(GoogleCredentials.fromStream(refreshToken))
.build();
} catch (Exception e) {
logger.error(e);
throw e;
}
FirebaseApp.initializeApp(options);
return true;
}
public String getFirebaseEndpoint() throws Exception {
return setupGest.getSetup("FIREBASE", "NOTIFICATION", "CONFIGURATION_ENDPOINT");
private FirebaseApp getFirebaseApp(DataSource datasource) {
return FirebaseApp.getInstance(datasource.getDbName());
}
public String sendMessage(Message message) throws Exception {
if (this.initialize()) {
return FirebaseMessaging.getInstance().send(message, this.dryRun);
private FirebaseMessaging getFirebaseMessaging(DataSource datasource) {
return FirebaseMessaging.getInstance(this.getFirebaseApp(datasource));
}
public String sendMessage(DataSource datasource, Message message) throws Exception {
if (!this.isInitialized(datasource)) {
throw new FirebaseNotReadyException();
}
return null;
return getFirebaseMessaging(datasource).send(message, this.isDryRun(datasource));
}
public TopicManagementResponse subscribeToTopic(String deviceToken, String topic) throws Exception {
if (!this.initialize()) {
return null;
public TopicManagementResponse subscribeToTopic(DataSource datasource, String deviceToken, String topic) throws Exception {
if (!this.isInitialized(datasource)) {
throw new FirebaseNotReadyException();
}
return FirebaseMessaging.getInstance().subscribeToTopic(Collections.singletonList(deviceToken), topic);
return getFirebaseMessaging(datasource).subscribeToTopic(Collections.singletonList(deviceToken), topic);
}
public TopicManagementResponse subscribeToTopic(List<String> deviceTokens, String topic) throws Exception {
if (!this.initialize()) {
return null;
public TopicManagementResponse subscribeToTopic(DataSource datasource, List<String> deviceTokens, String topic) throws Exception {
if (!this.isInitialized(datasource)) {
throw new FirebaseNotReadyException();
}
return FirebaseMessaging.getInstance().subscribeToTopic(deviceTokens, topic);
return getFirebaseMessaging(datasource).subscribeToTopic(deviceTokens, topic);
}
public void subscribeToTopics(String deviceToken, List<String> topics) throws Exception {
public void subscribeToTopics(DataSource datasource, String deviceToken, List<String> topics) throws Exception {
for (String topic : topics) {
this.subscribeToTopic(deviceToken, topic);
this.subscribeToTopic(datasource, deviceToken, topic);
}
}
public TopicManagementResponse subscribeToUser(String deviceToken, String userName, String profileDb) throws Exception {
if (!this.initialize()) {
return null;
public TopicManagementResponse subscribeToUser(DataSource datasource, String deviceToken, String userName) throws Exception {
if (!this.isInitialized(datasource)) {
throw new FirebaseNotReadyException();
}
return this.subscribeToTopic(deviceToken, getUserTopic(userName, profileDb));
return this.subscribeToTopic(datasource, deviceToken, getUserTopic(datasource, userName));
}
public TopicManagementResponse subscribeToUser(List<String> deviceTokens, String userName, String profileDb) throws Exception {
if (!this.initialize()) {
return null;
public TopicManagementResponse subscribeToUser(DataSource datasource, List<String> deviceTokens, String userName) throws Exception {
if (!this.isInitialized(datasource)) {
throw new FirebaseNotReadyException();
}
return this.subscribeToTopic(deviceTokens, getUserTopic(userName, profileDb));
return this.subscribeToTopic(datasource, deviceTokens, getUserTopic(datasource, userName));
}
public TopicManagementResponse unsubscribeFromTopic(String deviceToken, String topic) throws Exception {
if (!this.initialize()) {
return null;
public TopicManagementResponse unsubscribeFromTopic(DataSource dataSource, String deviceToken, String topic) throws Exception {
if (!this.isInitialized(dataSource))
throw new FirebaseNotReadyException();
return getFirebaseMessaging(dataSource).unsubscribeFromTopic(Collections.singletonList(deviceToken), topic);
}
public TopicManagementResponse unsubscribeFromTopic(DataSource dataSource, List<String> deviceTokens, String topic) throws Exception {
if (!this.isInitialized(dataSource)) {
throw new FirebaseNotReadyException();
}
return FirebaseMessaging.getInstance().unsubscribeFromTopic(Collections.singletonList(deviceToken), topic);
return getFirebaseMessaging(dataSource).unsubscribeFromTopic(deviceTokens, topic);
}
public TopicManagementResponse unsubscribeFromTopic(List<String> deviceTokens, String topic) throws Exception {
if (!this.initialize()) {
return null;
}
return FirebaseMessaging.getInstance().unsubscribeFromTopic(deviceTokens, topic);
}
public void unsubscribeFromTopics(String deviceToken, List<String> topics) throws Exception {
public void unsubscribeFromTopics(DataSource dataSource, String deviceToken, List<String> topics) throws Exception {
for (String topic : topics) {
this.unsubscribeFromTopic(deviceToken, topic);
this.unsubscribeFromTopic(dataSource, deviceToken, topic);
}
}
public TopicManagementResponse unsubscribeFromUser(String deviceToken, String userName, String profileDb) throws Exception {
if (!this.initialize()) {
return null;
public TopicManagementResponse unsubscribeFromUser(DataSource dataSource, String deviceToken, String userName) throws Exception {
if (!this.isInitialized(dataSource)) {
throw new FirebaseNotReadyException();
}
return this.unsubscribeFromTopic(deviceToken, getUserTopic(userName, profileDb));
return this.unsubscribeFromTopic(dataSource, deviceToken, getUserTopic(dataSource, userName));
}
public TopicManagementResponse unsubscribeFromUser(List<String> deviceTokens, String userName, String profileDb) throws Exception {
if (!this.initialize()) {
return null;
public TopicManagementResponse unsubscribeFromUser(DataSource dataSource, List<String> deviceTokens, String userName) throws Exception {
if (!this.isInitialized(dataSource)) {
throw new FirebaseNotReadyException();
}
return this.unsubscribeFromTopic(deviceTokens, getUserTopic(userName, profileDb));
return this.unsubscribeFromTopic(dataSource, deviceTokens, getUserTopic(dataSource, userName));
}
public boolean isDryRun() {
return dryRun;
private boolean isInitialized(DataSource advancedDataSource) {
String dbName = advancedDataSource.getDbName();
return initializedInstances.getOrDefault(dbName, false);
}
public void setDryRun(boolean dryRun) {
this.dryRun = dryRun;
public boolean isDryRun(DataSource advancedDataSource) {
return !IntegryCustomerDB.Integry_Studioml.getValue().equalsIgnoreCase(advancedDataSource.getDbName()) &&
(UtilityDebug.isDebugExecution() || UtilityDebug.isIntegryServer());
}
public boolean isActive() {
boolean attivo = false;
try {
attivo = setupGest.getSetupBoolean("FIREBASE", "NOTIFICATION", "ATTIVO");
} catch (Exception e) {
logger.error(e);
}
return attivo;
}
public String getUserTopic(String userName, String profileDb) {
return (NOTIF_USER_TOPIC_PREFIX + userName + "_" + profileDb).toLowerCase();
public String getUserTopic(DataSource dataSource, String userName) {
return (NOTIF_USER_TOPIC_PREFIX + userName + "_" + dataSource.getProfile()).toLowerCase();
}
}

View File

@@ -40,7 +40,7 @@ public class NotificationSenderComponent {
@Autowired
private ResponseJSONObjectMapper responseJSONObjectMapper;
@PostContextConstruct(priority = 10)
@PostContextConstruct(priority = 11)
private void init() {
if (!UtilityDebug.isDebugExecution())
looperService.add(this::sendNotifications, 15 * 60 * 1000, NotificationSenderComponent.class.getName());

View File

@@ -401,11 +401,11 @@ public class NotificationService {
builder.setToken(deviceToken);
try {
if (firebaseService.isDryRun()) {
if (firebaseService.isDryRun(multiDBTransactionManager.getPrimaryDatasource())) {
logger.debug("Invio notifica Firebase in dry run: \n" + notification);
}
firebaseService.sendMessage(builder.build());
firebaseService.sendMessage(multiDBTransactionManager.getPrimaryDatasource(), builder.build());
deviceNotification = new WtbDeviceNotification();
@@ -533,17 +533,13 @@ public class NotificationService {
}
public void sendNotification(MessageDTO messageDTO) throws Exception {
if (!firebaseService.isActive()) {
throw new Exception("Servizio notifiche non attivo.");
}
Message.Builder builder = messageDTO.toBuilder();
if (messageDTO.getUserName() != null) {
builder.setTopic(firebaseService.getUserTopic(messageDTO.getUserName(), multiDBTransactionManager.getPrimaryDatasource().getProfile()));
builder.setTopic(firebaseService.getUserTopic(multiDBTransactionManager.getPrimaryDatasource(), messageDTO.getUserName()));
}
firebaseService.sendMessage(builder.build());
firebaseService.sendMessage(multiDBTransactionManager.getPrimaryDatasource(), builder.build());
}
public void sendNotificationToUserDevices(MessageDTO messageDTO) throws Exception {
@@ -557,7 +553,7 @@ public class NotificationService {
.setToken(device.getDeviceToken())
.build();
firebaseService.sendMessage(message);
firebaseService.sendMessage(multiDBTransactionManager.getPrimaryDatasource(), message);
} catch (FirebaseMessagingException fireEx) {
if (fireEx.getMessagingErrorCode() == MessagingErrorCode.UNREGISTERED) {
deviceTokenService.removeDeviceToken(device);

Some files were not shown because too many files have changed in this diff Show More