Files
d.velop/Hermes/CMC/CreateFolder.groovy

2333 lines
102 KiB
Groovy
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import com.dvelop.d3.server.Document
import com.dvelop.d3.server.DocumentType
import com.dvelop.d3.server.core.D3Interface
import com.dvelop.d3.server.User
import org.json.simple.JSONObject
import org.json.simple.JSONValue
import org.json.simple.JSONArray
import java.util.Calendar;
import java.text.SimpleDateFormat
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
import java.io.OutputStream
import java.time.*
import groovy.sql.*
import groovy.time.TimeCategory;
import groovy.transform.Field
/*
* Beschreibung:
*
* Benoetigte Bibliotheken (siehe classpath-Datei):
* + json-simple-1.1.1.jar (fuer JSON Verarbeitung)
* + ojdbc8.jar (für DB Zugriff)
*/
// Enthaelt alle zur verfuegung stehenden Partner aus der CSV Datei
@Field Map partnerMap
// IDP ID fuer den Fall das kein Benutzer fuer einen Vertrag gefunden werden kann
@Field String fallbackIDPUser = "8d53812a-fc57-49da-8ce2-4c0f22744893"//"3231e568-d85b-49ca-8be5-3016353d941e"
@Field List IDP_User
// Filter um die auszulesenden Vertraege einzugrenzen
//@Field String SQLQueryFilter = "" //" WHERE V.VT_NUMMER IN ('LCM-17179','LCM-16205')"
//Alle Testvertraege
@Field String SQLQueryFilter = " WHERE V.VT_NUMMER IN ('LCM-15111','LCM-15112','LCM-15113','LCM-15114','LCM-15115')"
//,'LCM-15116','LCM-15117','LCM-15118','LCM-15119','LCM-15120','LCM-15122','LCM-15124','LCM-15125','LCM-15127','LCM-15128','LCM-15129','LCM-15130','LCM-15131','LCM-15132','LCM-15134','LCM-15135','LCM-15136','LCM-15137','LCM-15138','LCM-15139','LCM-15140','LCM-15141','LCM-15142','LCM-15143','LCM-15144','LCM-15145','LCM-15146','LCM-15147','LCM-15148','LCM-15149','LCM-15150','LCM-15151','LCM-15152','LCM-15153','LCM-15154','LCM-15155','LCM-15156','LCM-15157','LCM-15158','LCM-15159','LCM-15161','LCM-15163','LCM-15165','LCM-15166','LCM-15167','LCM-15168','LCM-15169','LCM-15170','LCM-15171','LCM-15172','LCM-15173','LCM-15174','LCM-15175','LCM-15176','LCM-15178','LCM-15179','LCM-15180','LCM-15181','LCM-15182','LCM-15183','LCM-15184','LCM-15186','LCM-15187','LCM-15188','LCM-15189','LCM-15190','LCM-15191','LCM-15193','LCM-15194','LCM-15195','LCM-15196','LCM-15197','LCM-15198','LCM-15199','LCM-15200','LCM-15201','LCM-15202','LCM-15203','LCM-15204','LCM-15205','LCM-15206','LCM-15207','LCM-15208','LCM-15209','LCM-15210','LCM-15211','LCM-15212','LCM-15213','LCM-15214','LCM-15215','LCM-15216','LCM-15217','LCM-15218','LCM-15220','LCM-15221','LCM-15222','LCM-15223','LCM-15224','LCM-15225','LCM-15226','LCM-15227','LCM-15228','LCM-15229','LCM-15230','LCM-15231','LCM-15232','LCM-15233','LCM-15234','LCM-15235','LCM-15236','LCM-15237','LCM-15238','LCM-15239','LCM-15240','LCM-15241','LCM-15242','LCM-15243','LCM-15244','LCM-15245','LCM-15246','LCM-15247','LCM-15248','LCM-15249','LCM-15250','LCM-15251','LCM-15252','LCM-15253','LCM-15254','LCM-15255','LCM-15256','LCM-15257','LCM-15258','LCM-15259','LCM-15260','LCM-15261','LCM-15263','LCM-15264','LCM-15265','LCM-15266','LCM-15267','LCM-15268','LCM-15269','LCM-15270','LCM-15271','LCM-15273','LCM-15274','LCM-15275','LCM-15276','LCM-15277','LCM-15278','LCM-15279','LCM-15280','LCM-15281','LCM-15282','LCM-15283','LCM-15284','LCM-15285','LCM-15286','LCM-15287','LCM-15288','LCM-15289','LCM-15290','LCM-15291','LCM-15292','LCM-15293','LCM-15294','LCM-15295','LCM-15296','LCM-15298','LCM-15300','LCM-15301','LCM-15302','LCM-15303','LCM-15304','LCM-15305','LCM-15306','LCM-15307','LCM-15308','LCM-15309','LCM-15310','LCM-15311','LCM-15312','LCM-15313','LCM-15314','LCM-15315','LCM-15316','LCM-15317','LCM-15318','LCM-15319','LCM-15320','LCM-15321','LCM-15322','LCM-15323','LCM-15324','LCM-15325','LCM-16121','LCM-16122','LCM-16123','LCM-16124','LCM-16125','LCM-16126','LCM-16127','LCM-16128','LCM-16129','LCM-16130','LCM-16131','LCM-16132','LCM-16133','LCM-16134','LCM-16135','LCM-16136','LCM-16137','LCM-16138','LCM-16139','LCM-16140','LCM-16141','LCM-16142','LCM-16143','LCM-16144','LCM-16145','LCM-16146','LCM-16148','LCM-16149','LCM-16150','LCM-16151','LCM-16152','LCM-16153','LCM-16154','LCM-16155','LCM-16156','LCM-16157','LCM-16158','LCM-16159','LCM-16160','LCM-16161','LCM-16162','LCM-16163','LCM-16164','LCM-16165','LCM-16166','LCM-16167','LCM-16168','LCM-16170','LCM-16171','LCM-16172','LCM-16173','LCM-16174','LCM-16175','LCM-16176','LCM-16177','LCM-16178','LCM-16179','LCM-16180','LCM-16181','LCM-16182','LCM-16183','LCM-16185','LCM-16186','LCM-16188','LCM-16189','LCM-16191','LCM-16192','LCM-16193','LCM-16194','LCM-16195','LCM-16197','LCM-16198','LCM-16199','LCM-16201','LCM-16202','LCM-16203','LCM-16204','LCM-16205','LCM-16206','LCM-16207','LCM-16208','LCM-16209','LCM-16210','LCM-16211','LCM-16212','LCM-16214','LCM-16215','LCM-16216','LCM-16217','LCM-16218','LCM-16219','LCM-16220','LCM-16221','LCM-16222','LCM-16223','LCM-16224','LCM-16225','LCM-16226','LCM-16227','LCM-16228','LCM-16229','LCM-16230','LCM-16231','LCM-16232','LCM-16233','LCM-16234','LCM-16236','LCM-16237','LCM-16238','LCM-16239','LCM-16240','LCM-16241','LCM-16242','LCM-16243','LCM-16244','LCM-16245','LCM-16246','LCM-16247','LCM-16248','LCM-16249','LCM-16250','LCM-16252','LCM-16253','LCM-16254','LCM-16255','LCM-16256','LCM-16257','LCM-16258','LCM-16259','LCM-16260','LCM-16261','LCM-16262','LCM-16263','LCM-16264','LCM-16266','LCM-16267','LCM-16268','LCM-16269','LCM-16270','LCM-16271','LCM-16272','LCM-16273','LCM-16274','LCM-16275','LCM-16277','LCM-16278','LCM-16279','LCM-16280','LCM-16281','LCM-16282','LCM-16283','LCM-16284','LCM-16285','LCM-16286','LCM-16287','LCM-16288','LCM-16290','LCM-16291','LCM-16293','LCM-16294','LCM-16295','LCM-16296','LCM-16297','LCM-16298','LCM-16299','LCM-16300','LCM-16301','LCM-16302','LCM-16303','LCM-16306','LCM-16308','LCM-16309','LCM-16310','LCM-16311','LCM-16312','LCM-16313','LCM-16314','LCM-16315','LCM-16316','LCM-16317','LCM-16319','LCM-16320','LCM-16321','LCM-16322','LCM-16323','LCM-16324','LCM-16325','LCM-16326','LCM-16327','LCM-16328','LCM-16329','LCM-16330','LCM-16331','LCM-16332','LCM-16334','LCM-16335','LCM-16337','LCM-16338','LCM-16339','LCM-16340','LCM-17001','LCM-17002','LCM-17003','LCM-17004','LCM-17005','LCM-17006','LCM-17007','LCM-17008','LCM-17010','LCM-17011','LCM-17012','LCM-17013','LCM-17041','LCM-17043','LCM-17044','LCM-17045','LCM-17046','LCM-17047','LCM-17048','LCM-17049','LCM-17050','LCM-17051','LCM-17052','LCM-17053','LCM-17054','LCM-17055','LCM-17056','LCM-17058','LCM-17059','LCM-17060','LCM-17061','LCM-17062','LCM-17063','LCM-17064','LCM-17065','LCM-17066','LCM-17067','LCM-17068','LCM-17069','LCM-17070','LCM-17071','LCM-17072','LCM-17073','LCM-17074','LCM-17075','LCM-17076','LCM-17077','LCM-17078','LCM-17079','LCM-17082','LCM-17083','LCM-17088','LCM-17089','LCM-17090','LCM-17091','LCM-17092','LCM-17093','LCM-17094','LCM-17095','LCM-17096','LCM-17097','LCM-17098','LCM-17099','LCM-17100','LCM-17101','LCM-17102','LCM-17103','LCM-17104','LCM-17105','LCM-17106','LCM-17107','LCM-17108','LCM-17109','LCM-17110','LCM-17111','LCM-17112','LCM-17113','LCM-17114','LCM-17115','LCM-17116','LCM-17117','LCM-17118','LCM-17119','LCM-17120','LCM-17122','LCM-17123','LCM-17124','LCM-17125','LCM-17126','LCM-17127','LCM-17128','LCM-17129','LCM-17130','LCM-17131','LCM-17135','LCM-17136','LCM-17138','LCM-17139','LCM-17140','LCM-17141','LCM-17142','LCM-17143','LCM-17144','LCM-17145','LCM-17146','LCM-17147','LCM-17148','LCM-17149','LCM-17150','LCM-17151','LCM-17152','LCM-17153','LCM-17154','LCM-17155','LCM-17156','LCM-17158','LCM-17159','LCM-17160','LCM-17161','LCM-17162','LCM-17163','LCM-17164','LCM-17165','LCM-17166','LCM-17167','LCM-17168','LCM-17169','LCM-17170','LCM-17171','LCM-17172','LCM-17173','LCM-17174','LCM-17176','LCM-17177','LCM-17178','LCM-17179','LCM-17180','LCM-17181','LCM-17182','LCM-17183','LCM-17185','LCM-17186','LCM-17188','LCM-17190','LCM-17191','LCM-17192','LCM-17193','LCM-17194','LCM-17195','LCM-17196','LCM-17197','LCM-17199','LCM-17200','LCM-17201','LCM-17202','LCM-17203','LCM-17204','LCM-17205','LCM-17206','LCM-17207','LCM-17208','LCM-17209','LCM-17210','LCM-17211','LCM-17212','LCM-17213','LCM-17214','LCM-17215','LCM-17216','LCM-17217','LCM-17218','LCM-17219','LCM-17220','LCM-17221','LCM-17224','LCM-17225','LCM-17226','LCM-17227','LCM-17228','LCM-17229','LCM-17230','LCM-17231','LCM-17232','LCM-17233','LCM-17234','LCM-17235','LCM-17236','LCM-17237','LCM-17239','LCM-17240','LCM-17241','LCM-17242','LCM-17243','LCM-17244','LCM-17245','LCM-17246','LCM-17248','LCM-17249','LCM-17250','LCM-17251','LCM-18002','LCM-18003','LCM-18004','LCM-18005','LCM-18006','LCM-18007','LCM-18008','LCM-18009','LCM-18010','LCM-18011','LCM-18012','LCM-18013','LCM-18015','LCM-18017','LCM-18018','LCM-18019','LCM-18020','LCM-18021','LCM-18022','LCM-18023','LCM-18024','LCM-18025','LCM-18026','LCM-18028','LCM-18030','LCM-18031','LCM-18032','LCM-18033','LCM-18034','LCM-18035','LCM-18037','LCM-18039','LCM-18040','LCM-18041','LCM-18042','LCM-18043','LCM-18044','LCM-18045','LCM-18046','LCM-18049','LCM-18050','LCM-18051','LCM-18052','LCM-18053','LCM-18054','LCM-18055','LCM-18056','LCM-18057','LCM-18058','LCM-18059','LCM-18060','LCM-18061','LCM-18062','LCM-18063','LCM-18065','LCM-18066','LCM-18067','LCM-18068','LCM-18069','LCM-18070','LCM-18072','LCM-18074','LCM-18075','LCM-18076','LCM-18077','LCM-18078','LCM-18079','LCM-18080','LCM-18081','LCM-18082','LCM-18083','LCM-18084','LCM-18085','LCM-18086','LCM-18087','LCM-18088','LCM-18089','LCM-18090','LCM-18091','LCM-18092','LCM-18093','LCM-18094','LCM-18095','LCM-18096','LCM-18097','LCM-18098','LCM-18099','LCM-18100','LCM-18101','LCM-18102','LCM-18103','LCM-18105','LCM-18106','LCM-18107','LCM-18108','LCM-18109','LCM-18110','LCM-18111','LCM-18112','LCM-18113','LCM-18114','LCM-18115','LCM-18116','LCM-18118','LCM-18119','LCM-18120','LCM-18121','LCM-18122','LCM-18123','LCM-18125','LCM-18126','LCM-18127','LCM-18130','LCM-18131','LCM-18132','LCM-18133','LCM-18134','LCM-18135','LCM-18136','LCM-18137','LCM-18138','LCM-18139','LCM-18140','LCM-18141','LCM-18142','LCM-18143','LCM-18144','LCM-18145','LCM-18146','LCM-18147','LCM-18149','LCM-18150','LCM-18151','LCM-18152','LCM-18153','LCM-18154','LCM-18155','LCM-18156','LCM-18157','LCM-18158','LCM-18159','LCM-18160','LCM-18161','LCM-18162','LCM-18163','LCM-18164','LCM-18165','LCM-18166','LCM-18167','LCM-18168','LCM-18169','LCM-18170','LCM-18171','LCM-18172','LCM-18173','LCM-18174','LCM-18175','LCM-18176','LCM-18177','LCM-18178','LCM-18179','LCM-18180','LCM-18181','LCM-18182','LCM-18183','LCM-18184','LCM-18185','LCM-18186','LCM-18187','LCM-18188','LCM-18189','LCM-18190','LCM-18191','LCM-18192','LCM-18193','LCM-18194','LCM-18195','LCM-18197','LCM-18198','LCM-18199','LCM-18200','LCM-18201','LCM-18202','LCM-18208','LCM-18209','LCM-18210','LCM-18211','LCM-18212','LCM-18213','LCM-18214','LCM-18215','LCM-18216','LCM-18217','LCM-18218','LCM-18219','LCM-18220','LCM-18221','LCM-18222','LCM-18223','LCM-18224','LCM-20001','LCM-20002','LCM-20003','LCM-20004','LCM-20005','LCM-20006','LCM-20007','LCM-20008','LCM-20009','LCM-20010','LCM-20011','LCM-20012','LCM-20014','LCM-20015','LCM-20016','LCM-20017','LCM-20018','LCM-20019','LCM-20020','LCM-20021','LCM-20022','LCM-20023','LCM-20024','LCM-20026','LCM-20027','LCM-20028','LCM-20030','LCM-20032','LCM-20033','LCM-20034','LCM-20035','LCM-20036','LCM-20037','LCM-20038','LCM-20039','LCM-20040','LCM-20041','LCM-20042','LCM-20043','LCM-20044','LCM-20045','LCM-20046','LCM-20047','LCM-20049','LCM-20050','LCM-20051','LCM-20052','LCM-20053','LCM-20055','LCM-20056','LCM-20057','LCM-20058','LCM-20059','LCM-20060','LCM-20061','LCM-20062','LCM-20063','LCM-20064','LCM-20065','LCM-20066','LCM-20067','LCM-20068','LCM-20070','LCM-20072','LCM-20073','LCM-20074','LCM-20075','LCM-20076','LCM-20077','LCM-20078','LCM-20079','LCM-20080','LCM-20081','LCM-20082','LCM-20083','LCM-20084','LCM-20085','LCM-20086','LCM-20087','LCM-20088','LCM-20089','LCM-20090','LCM-20091','LCM-20092','LCM-20093','LCM-20094','LCM-20095','LCM-20096','LCM-20097','LCM-20098','LCM-20099','LCM-20100','LCM-20101','LCM-20102','LCM-20103','LCM-20104','LCM-20105','LCM-20106','LCM-20107','LCM-20108','LCM-20109','LCM-20110','LCM-20112','LCM-20115','LCM-20116','LCM-20117','LCM-20118','LCM-20119','LCM-20120','LCM-20121','LCM-20122','LCM-20123','LCM-20125','LCM-20126','LCM-20127','LCM-20128','LCM-20130','LCM-20131','LCM-20132','LCM-20133','LCM-20134','LCM-20135','LCM-20136','LCM-20137','LCM-20138','LCM-20139','LCM-20140','LCM-20141','LCM-20142','LCM-20143','LCM-20145','LCM-20146','LCM-20147','LCM-20149','LCM-20151','LCM-20152','LCM-20153','LCM-20154','LCM-20155','LCM-20156','LCM-20157','LCM-20158','LCM-20159','LCM-20161','LCM-20162','LCM-20163','LCM-20164','LCM-20165','LCM-20166','LCM-20167','LCM-20168','LCM-20170','LCM-20171','LCM-20174','LCM-20175','LCM-20176','LCM-20177','LCM-20178','LCM-20179','LCM-20180','LCM-20181','LCM-20182','LCM-20183','LCM-20184','LCM-20185','LCM-20186','LCM-20187','LCM-20188','LCM-20189','LCM-20190','LCM-20191','LCM-20193','LCM-20195','LCM-20196','LCM-20197','LCM-20198','LCM-20199','LCM-20200','LCM-20201','LCM-20202','LCM-20203','LCM-20204','LCM-20205','LCM-20206','LCM-20207','LCM-20208','LCM-20209','LCM-20210','LCM-20213','LCM-20214','LCM-20215','LCM-20216','LCM-20217','LCM-20218','LCM-20219','LCM-20220','LCM-20221','LCM-20222','LCM-20223','LCM-20224') OR V.VT_NUMMER IN ('LCM-21584','LCM-21575','LCM-21484','LCM-20494','LCM-19451','LCM-10472','LCM-21345','LCM-21554','LCM-21686','LCM-20999','LCM-20998','LCM-20988','LCM-13220','LCM-14141','LCM-14170','LCM-14174','LCM-14176','LCM-14177','LCM-14178','LCM-14179','LCM-14180','LCM-16395','LCM-16397','LCM-16399','LCM-16400','LCM-16401','LCM-16402','LCM-16403','LCM-16404','LCM-16406','LCM-16407','LCM-16446','LCM-16450','LCM-16451','LCM-16452','LCM-16453','LCM-16454','LCM-16455','LCM-17358','LCM-21240','LCM-21295','LCM-21573','LCM-13705','LCM-16712','LCM-15120','LCM-16052','LCM-12301','LCM-18970','LCM-19305','LCM-18489','LCN-20835','LCM-10008','LCM-10009','LCM-10010','LCM-10011','LCM-10012','LCM-10014','LCM-10015','LCM-10016','LCM-10017','LCM-10018','LCM-10019','LCM-10020','LCM-10022','LCM-10023','LCM-10024','LCM-10025','LCM-10026','LCM-10027','LCM-10028','LCM-10029','LCM-10030','LCM-10031','LCM-10032','LCM-10033','LCM-10034','LCM-10035','LCM-10036','LCM-10037','LCM-10038','LCM-10039','LCM-10040','LCM-10041','LCM-10042','LCM-10043','LCM-10044','LCM-10045','LCM-10046','LCM-10047','LCM-10048','LCM-10049','LCM-10050','LCM-10051','LCM-10052','LCM-10053','LCM-10054','LCM-10055','LCM-10056','LCM-10057','LCM-10058','LCM-10059','LCM-10060','LCM-10061','LCM-10062','LCM-10063','LCM-10064','LCM-10065','LCM-10066','LCM-10067','LCM-10068','LCM-10069','LCM-10070','LCM-10071','LCM-10073','LCM-10074','LCM-10075','LCM-10076','LCM-10077','LCM-10078','LCM-10079','LCM-10080','LCM-10081','LCM-10082','LCM-10083','LCM-10084','LCM-10085','LCM-10086','LCM-10087','LCM-10088','LCM-10089','LCM-10090','LCM-10091','LCM-10092','LCM-10093','LCM-10094','LCM-10095','LCM-10096','LCM-10097','LCM-10098','LCM-10099','LCM-10100','LCM-10101','LCM-10102','LCM-10103','LCM-10104','LCM-10105','LCM-10106','LCM-10107','LCM-10108','LCM-10109','LCM-10110','LCM-15001','LCM-15002','LCM-15003','LCM-15004','LCM-15005','LCM-15006','LCM-15007','LCM-15008','LCM-15009','LCM-15010','LCM-15011','LCM-15013','LCM-15014','LCM-15015','LCM-15017','LCM-15018','LCM-15019','LCM-15020','LCM-15021','LCM-15022','LCM-15023','LCM-15024','LCM-15025','LCM-15026','LCM-15027','LCM-15028','LCM-15030','LCM-15031','LCM-15032','LCM-15033','LCM-15034','LCM-15035','LCM-15036','LCM-15037','LCM-15038','LCM-15039','LCM-15041','LCM-15042','LCM-15043','LCM-15044','LCM-15045','LCM-15046','LCM-15047','LCM-15048','LCM-15049','LCM-15050','LCM-15051','LCM-15052','LCM-15053','LCM-15054','LCM-15055','LCM-15056','LCM-15057','LCM-15058','LCM-15059','LCM-15060','LCM-15061','LCM-15062','LCM-15063','LCM-15064','LCM-15065','LCM-15067','LCM-15068','LCM-15069','LCM-15070','LCM-15071','LCM-15072','LCM-15073','LCM-15074','LCM-15075','LCM-15076','LCM-15077','LCM-15079','LCM-15080','LCM-15081','LCM-15082','LCM-15083','LCM-15084','LCM-15085','LCM-15086','LCM-15087','LCM-15088','LCM-15089','LCM-15090','LCM-15091','LCM-15092','LCM-15093','LCM-15094','LCM-15095','LCM-15096','LCM-15097','LCM-15099','LCM-15100','LCM-15101','LCM-15102','LCM-15103','LCM-15104','LCM-15105','LCM-15106','LCM-15107','LCM-16001','LCM-16002','LCM-16003','LCM-16004','LCM-16005','LCM-16006','LCM-16007','LCM-16008','LCM-16009','LCM-16010','LCM-16011','LCM-16012','LCM-16013','LCM-16014','LCM-16015','LCM-16016','LCM-16017','LCM-16018','LCM-16019','LCM-16020','LCM-16021','LCM-16022','LCM-16023','LCM-16024','LCM-16025','LCM-16026','LCM-16027','LCM-16028','LCM-16029','LCM-16030','LCM-16031','LCM-16032','LCM-16033','LCM-16034','LCM-16035','LCM-16036','LCM-16037','LCM-16038','LCM-16039','LCM-16041','LCM-16042','LCM-16043','LCM-16044','LCM-16045','LCM-16047','LCM-16048','LCM-16049','LCM-16050','LCM-16051','LCM-16052','LCM-16054','LCM-16055','LCM-16056','LCM-16058','LCM-16060','LCM-16061','LCM-16062','LCM-16063','LCM-16064','LCM-16065','LCM-16066','LCM-16067','LCM-16068','LCM-16069','LCM-16071','LCM-16072','LCM-16073','LCM-16074','LCM-16075','LCM-16076','LCM-16077','LCM-16079','LCM-16080','LCM-16082','LCM-16085','LCM-16086','LCM-16087','LCM-16088','LCM-16089','LCM-16090','LCM-16091','LCM-16092','LCM-16093','LCM-16094','LCM-16095','LCM-16096','LCM-16097','LCM-16098','LCM-16099','LCM-16100','LCM-16102','LCM-16103','LCM-16104','LCM-16105','LCM-16106','LCM-16107','LCM-16109','LCM-16110','LCM-16111','LCM-16112','LCM-19001','LCM-19002','LCM-19003','LCM-19004','LCM-19005','LCM-19006','LCM-19007','LCM-19008','LCM-19009','LCM-19010','LCM-19011','LCM-19012','LCM-19013','LCM-19014','LCM-19015','LCM-19016','LCM-19017','LCM-19018','LCM-19019','LCM-19020','LCM-19021','LCM-19022','LCM-19023','LCM-19024','LCM-19025','LCM-19026','LCM-19027','LCM-19028','LCM-19029','LCM-19030','LCM-19033','LCM-19034','LCM-19035','LCM-19036','LCM-19037','LCM-19038','LCM-19039','LCM-19040','LCM-19041','LCM-19043','LCM-19044','LCM-19045','LCM-19046','LCM-19047','LCM-19048','LCM-19049','LCM-19050','LCM-19051','LCM-19052','LCM-19053','LCM-19054','LCM-19055','LCM-19056','LCM-19057','LCM-19058','LCM-19059','LCM-19060','LCM-19061','LCM-19062','LCM-19063','LCM-19065','LCM-19066','LCM-19067','LCM-19068','LCM-19069','LCM-19070','LCM-19071','LCM-19072','LCM-19073','LCM-19074','LCM-19076','LCM-19077','LCM-19078','LCM-19079','LCM-19081','LCM-19082','LCM-19083','LCM-19084','LCM-19085','LCM-19087','LCM-19088','LCM-19089','LCM-19090','LCM-19091','LCM-19092','LCM-19093','LCM-19094','LCM-19095','LCM-19097','LCM-19098','LCM-19099','LCM-19100','LCM-19101','LCM-19102','LCM-19103','LCM-19104','LCM-19106','LCM-19107','LCM-19108','LCM-19109','LCM-21001','LCM-21002','LCM-21003','LCM-21005','LCM-21006','LCM-21007','LCM-21008','LCM-21009','LCM-21010','LCM-21011','LCM-21013','LCM-21014','LCM-21016','LCM-21017','LCM-21018','LCM-21019','LCM-21020','LCM-21025','LCM-21026','LCM-21027','LCM-21028','LCM-21029','LCM-21030','LCM-21031','LCM-21032','LCM-21033','LCM-21034','LCM-21035','LCM-21036','LCM-21037','LCM-21039','LCM-21040','LCM-21041','LCM-21042','LCM-21043','LCM-21044','LCM-21045','LCM-21046','LCM-21051','LCM-21053','LCM-21054','LCM-21055','LCM-21056','LCM-21057','LCM-21058','LCM-21059','LCM-21060','LCM-21061','LCM-21062','LCM-21063','LCM-21067','LCM-21081','LCM-21083','LCM-21086','LCM-21087','LCM-21088','LCM-21089','LCM-21090','LCM-21091','LCM-21092','LCM-21095','LCM-21096','LCM-21097','LCM-21099','LCM-21100','LCM-21101','LCM-21102','LCM-21109','LCM-21111','LCM-21112','LCM-21113','LCM-21117','LCM-21118','LCM-21119','LCM-21122','LCM-21123','LCM-21124','LCM-21127','LCM-21129','LCM-21131','LCM-21132','LCM-21134','LCM-21135','LCM-21136','LCM-21137','LCM-21139','LCM-21140','LCM-21141','LCM-21142','LCM-21143','LCM-21144','LCM-21145','LCM-21148','LCM-21149','LCM-21150','LCM-21151','LCM-21152','LCM-21153','LCM-21154','LCM-21155','LCM-21490','LCM-21435','LCM-21442')"
@Field String baseUri = "https://d3.dev.otc.hlg.de"
@Field String repo_id = "d1564eeb-4686-525b-b789-6c264014825c"
// Dieser Benutzer legt die Vertraege im System an. Der API Key muss im Vorfeld im Identity Provider angelegt werden.
// Der Benutzer muss auf die Dokumentart Einzelvertrag/Rahmenvertrag schreibend berechtigt sein
@Field String apiKeyUser = "QkSq/0aXYN4/PUiLHrN/Rz7Q1TphBRO1z/khSj9dF/y4EVPcOdSiJc9Y1sdQ6er/YCFOUBC9VnFSJztr4RZSMQkqR4ccnXW8Q2jkSgsMxIQ=&_z_A0V5ayCSke2KhoCt7spaf51D1gKkv7GEL68yClMR1LitCKgBRs6h2IfHiGS9jcWUSClEjKReHWqw7IhHWUV8hewtyrYwk"
public class constanten
{
// Logging
static String logDirPath = "./log/"
static File logFile = new File(logDirPath + System.currentTimeMillis() + "Vertragsmigration.log")
static File logFileDLCMN = new File(logDirPath + System.currentTimeMillis() + "DefectLCM_Number.txt")
static File logFileDLCMNTerms = new File(logDirPath + System.currentTimeMillis() + "DefectLCM_Number.txt")
}
public class PartnerData
{
String LCMNumber
String LCMPartnerName
String partnerNumber
String partnerAdress
def PartnerData()
{}
def PartnerData(def partnerNum, def partnerAdr, def LCMNum, def LCMName)
{
this.partnerNumber = partnerNum
this.partnerAdress = partnerAdr
this.LCMNumber = LCMNum
this.LCMPartnerName = LCMName
}
def getPartnerNumber ()
{
return this.partnerNumber;
}
def getPartnerAdress ()
{
return this.partnerAdress;
}
def getLCMNumber ()
{
return this.LCMNumber;
}
def getLCMName ()
{
return this.LCMPartnerName;
}
}
D3Interface d3 = getProperty("d3")
d3.log.info("Auslesen der Partnerstammdaten");
partnerMap = readCSVPartnerFile(d3);
d3.log.info("Auslesen der berechtigten DCM User");
IDP_User = getDCMJustifiedUsers(d3)
d3.log.info("Start Vertragsuebername");
log("Start Vertragsuebername");
getContract(d3)
d3.log.info("Ende Vertragsuebername");
log("Ende Vertragsuebername");
/* Anlage eines Vertrags per Rest Call gegen die CMC Applikation
*
*/
def boolean createContract (D3Interface d3, def id_Number, String JsonVertrag)
{
d3.log.info("Start createContract");
if(JsonVertrag == "" || JsonVertrag == null)
{
throw new Exception ("Fehler: Keine Vertragsdaten vorhanden");
}
try
{
// Anlegen eines Vertrags
URL url = new URL(baseUri+"/dbscase/rest/file/contract");
HttpURLConnection httpPost = (HttpURLConnection) url.openConnection();
try
{
httpPost.setRequestMethod("POST");
httpPost.setRequestProperty ("Authorization", "Bearer ${apiKeyUser}");
httpPost.setRequestProperty("Accept", "application/json")
httpPost.setRequestProperty("Content-Type", "application/json")
httpPost.setRequestProperty("x-dv-cm-repo-id", repo_id)
httpPost.setDoOutput(true);
httpPost.getOutputStream().write(JsonVertrag.getBytes("UTF-8"));
int getRC = httpPost.getResponseCode();
if(getRC == HttpURLConnection.HTTP_OK)
{
String response = httpPost.getInputStream().getText();
JSONObject jObjectresponse = (JSONObject) JSONValue.parse(response);
JSONObject jObjectMasterData = (JSONObject) jObjectresponse.get("masterData");
def jObjectinternalNumber = jObjectMasterData.get("internalNumber");
def jResponsibles = jObjectMasterData.get("responsibles");
def newRepString = ""
jResponsibles.each
{
if(newRepString != "")
{
newRepString = newRepString + it.get("id") + ","
}
else
{
newRepString = it.get("id")
}
}
jResponsibles = newRepString
def jContractTyp = jObjectMasterData.get("type");
d3.log.info("-------Informationen aus neuem Vertrag-----------");
d3.log.info("Vertragstyp: " + jContractTyp);
d3.log.info("Interne Vertragsnummer: " + jObjectinternalNumber);
d3.log.info("Verantwortliche: " + jResponsibles);
JSONObject jObjectPeriod = (JSONObject) jObjectresponse.get("period");
def jDurationType = jObjectPeriod.get("durationType");
d3.log.info("Laufzeittyp: " + jDurationType);
d3.log.info("Frist ID: " + id_Number);
def jStatus = jObjectMasterData.get("status");
d3.log.info("-------------------------------------------------");
log("Vertrag wurde erfolgreich angelegt: $jObjectinternalNumber --- LCM Nummer: LCM-$id_Number")
httpPost.disconnect();
try
{
if(jStatus == "Aktiv" && jDurationType != null )
{
handleTermInformation(d3, jObjectinternalNumber, jResponsibles, jDurationType, jContractTyp, id_Number, jStatus);
//handleOtherTermInformation(d3, jObjectinternalNumber, jResponsibles, jDurationType, jContractTyp, id_Number, jStatus); //-> Die Sonderfristen werden nicht benoetigt
handleProlongationTermInformation(d3, jObjectinternalNumber, jResponsibles, jDurationType, jContractTyp, id_Number, jStatus);
}
else
{
d3.log.info("Der Vertrag " + jObjectinternalNumber + " ist beendet oder hat keine Laufzeit. Somit wird keine Frist übernommen.")
log("Der Vertrag " + jObjectinternalNumber + " ist beendet oder hat keine Laufzeit. Somit wird keine Frist übernommen.")
}
}
catch(Exception ex)
{
d3.log.error("Fehler bei der Erstellung der Fristen eines Vertrags.")
}
}
else
{
String header = httpPost.getHeaderField("CM_ExceptionCause");
log("ERROR: Bei Anlage eines Vertrags: " + getRC + " --- Grund: " + header)
logDefectLCMNumber("LCM-" + id_Number);
d3.log.error("ERROR | - createContract = Fehler bei Anlage eines Vertrags : " + getRC + " --- Grund: " + header + " - " + JsonVertrag);
}
return true;
}
catch(Exception e)
{
d3.log.error("ERROR: " + e);
logDefectLCMNumber("LCM-" + id_Number);
log("ERROR: Bei Anlage eines Vertrags: " + e)
return false;
}
finally
{
if(httpPost != null) {
httpPost.disconnect();
}
}
}
catch (Exception ex)
{
d3.log.error("ERROR | Create Contract = " + ex );
logDefectLCMNumber("LCM-" + id_Number);
log("ERROR: Bei Anlage eines Vertrags: " + ex)
return false;
}
}
/* Anlage eines Vertrags per Rest Call gegen die CMC Applikation
* Hier wird nur die Kommunikation mit der terms App durchgefuehrt.
* Es wird davon ausgegangen, dass man das JSON File korrekt angeliefert bekommt.
*/
def boolean createTerm (D3Interface d3, String JsonTerm, def internalContractNumber, def Termtyp)
{
if(JsonTerm == "" || JsonTerm == null)
{
throw new Exception("Es wurde keine Frist zur Analge übergeben.")
}
d3.log.info("Start createTerm");
try
{
URL url = new URL(baseUri+"/terms/rest/terms");
HttpURLConnection httpPut = (HttpURLConnection) url.openConnection();
try
{
httpPut.setRequestMethod("PUT");
d3.log.info("setRequestMethod")
httpPut.setRequestProperty ("Authorization", "Bearer ${apiKeyUser}");
httpPut.setRequestProperty("Accept", "application/json")
httpPut.setRequestProperty("Content-Type", "application/json")
httpPut.setRequestProperty("x-dv-cm-repo-id", repo_id)
httpPut.setDoOutput(true);
httpPut.getOutputStream().write(JsonTerm.getBytes("UTF-8"));
int getRC = httpPut.getResponseCode();
if(getRC == HttpURLConnection.HTTP_OK)
{
String response = httpPut.getInputStream().getText();
JSONObject jObjectresponse = (JSONObject) JSONValue.parse(response);
def jDescription = jObjectresponse.get("description");
def jVertragsID = jObjectresponse.get("objectId");
//log("Die Frist $jDescription wurde für den Vertrag $jVertragsID angelegt.");
httpPut.disconnect();
return true;
} else {
d3.log.error("ERROR | - createTerm = Fehler bei Anlage einer Frist : " + getRC + " : " + JsonTerm);
log("ERROR: Bei Anlage einer Frist: " + getRC)
}
return true;
}
catch(Exception e)
{
d3.log.error("ERROR: " + e);
log("ERROR: Bei Anlage einer Frist: " + e)
logDefectTermsLCMNumber(Termtyp + ": " + internalContractNumber + " - ")
return false;
}
finally
{
if(httpPut != null) {
httpPut.disconnect();
}
}
}
catch (Exception ex)
{
d3.log.error("ERROR | Create Term = " + ex);
log("ERROR: Bei Anlage einer Frist: " + ex)
return false;
}
}
/*
* Holt die Verantwortlichen eines Vertrags.
*/
def getResponsiblesForContract (D3Interface d3, def LCM_Number)
{
d3.log.info("Start getResponsiblesForContract");
def lDBUser = "US_DEVELOP_RO"
def lDBPasssword = "US_DEVELOP_RO"
def UserNames = "";
def lSQLConnection;
d3.log.info("Beginne mit Auslesen der verantwortlichen User");
try
{
lSQLConnection = Sql.newInstance( "jdbc:oracle:thin:@//olxdedevoradb01.dev.otc.hlg.de:1521/SD011A", lDBUser, lDBPasssword, "oracle.jdbc.driver.OracleDriver" );
def sqlQuery =
"SELECT LISTAGG(P.NAME || ', ' || P.VORNAME, '|') WITHIN GROUP (ORDER BY P.NAME) AS ALLNAMES FROM LCM.TBL_VERTRAG V FULL OUTER JOIN LCM.tbl_vertrag_ansprech VAN on V.id = VAN.fk_tbl_vertrag FULL OUTER JOIN LCM.tbl_int_person P on VAN.fk_tbl_person = p.id WHERE V.VT_NUMMER = '" + LCM_Number + "' GROUP BY V.VT_NUMMER ORDER BY V.VT_NUMMER ASC"
lSQLConnection.eachRow(sqlQuery)
{ it ->
if(it.ALLNAMES != " , " || it.ALLNAMES != ", " || it.ALLNAMES != ", ")
{
UserNames = it.ALLNAMES
}
}
return UserNames;
d3.log.info("Abschluss Auslesen der verantwortlichen User.");
}
catch(Exception e)
{
d3.log.error("Fehler beim Auslesen der verantwortlichen User:" + e);
}
finally
{
if(lSQLConnection != null)
{
lSQLConnection.close();
}
}
d3.log.info("Ende getResponsiblesForContract");
}
/*def handleOtherTermInformation (D3Interface d3, def internalContractNumber, def Responsibles, def DurationType, def ContractTyp, def id_Number, def status)
{
d3.log.info("Start handleOtherTermInformation");
def lDBUser = "US_DEVELOP_RO"
def lDBPasssword = "US_DEVELOP_RO"
def createdJson;
def lSQLConnection;
d3.log.info("Beginne mit Auslesen der sonstigen Fristen");
try
{
lSQLConnection = Sql.newInstance( "jdbc:oracle:thin:@//olxdedevoradb01.dev.otc.hlg.de:1521/SD011A", lDBUser, lDBPasssword, "oracle.jdbc.driver.OracleDriver" );
def sqlQuery = "SELECT fk_ref_frist_art, bemerkung, beginn AS STICHTAG, jahre, monate, tage, automverlaengerung_jn, verljahre, verlmonate FROM LCM.TBL_Vertrag_Frist WHERE FK_TBL_VERTRAG = '" + id_Number + "'"
lSQLConnection.eachRow(sqlQuery)
{ it ->
def OtherJson = defineOtherTerm(d3, it, internalContractNumber, Responsibles, DurationType, ContractTyp, status);
if(OtherJson != "" && OtherJson != null)
{
createTerm (d3, OtherJson)
}
}
d3.log.info("Abschluss Anlage von Prolongationen.");
}
catch(Exception e)
{
d3.log.error("Fehler beim Erstellen von Sonstigen Fristen:" + e);
}
finally
{
if(lSQLConnection != null)
{
lSQLConnection.close();
}
}
d3.log.info("Ende handleOtherTermInformation");
return createdJson;
}*/
//Die Funktion halt moegliche Prolongationen aus der DB Tabelle,
//verarbeitet diese in eine Json Datei und übergibt diese an die
//Funktion zur Anlage einer Frist.
def handleProlongationTermInformation (D3Interface d3, def internalContractNumber, def Responsibles, def DurationType, def ContractTyp, def id_Number, def status)
{
d3.log.info("Start handleProlongationTermInformation");
def lDBUser = "US_DEVELOP_RO"
def lDBPasssword = "US_DEVELOP_RO"
def createdJson;
def lSQLConnection;
d3.log.info("Beginne mit Auslesen der Prolongationen");
try
{
lSQLConnection = Sql.newInstance( "jdbc:oracle:thin:@//olxdedevoradb01.dev.otc.hlg.de:1521/SD011A", lDBUser, lDBPasssword, "oracle.jdbc.driver.OracleDriver" );
def sqlQuery = "SELECT V.ID,VLZ.FK_TBL_VERTRAG, VO.FK_TBL_VERTRAG_LAUFZEIT, VO.NUMMER, VO.OPTIONSENDE, VO.FRISTDATUM, VO.BEMERKUNG, VO.VERLAENGERUNGSFRIST_JN, VO.OPTION_AUSUEBEN_JN FROM LCM.TBL_VERTRAG_OPTION VO JOIN LCM.TBL_VERTRAG_LAUFZEIT VLZ ON VO.FK_TBL_VERTRAG_LAUFZEIT = VLZ.ID JOIN LCM.TBL_VERTRAG V ON VLZ.FK_TBL_VERTRAG = V.ID WHERE V.ID = '" + id_Number + "' ORDER BY VO.NUMMER ASC"
lSQLConnection.eachRow(sqlQuery)
{ it ->
def prolongationsJson = ""
prolongationsJson = defineProlongationTerm(d3, it, internalContractNumber, Responsibles, DurationType, ContractTyp, status);
if(prolongationsJson != "" && prolongationsJson != null)
{
createTerm (d3, prolongationsJson, internalContractNumber, "Prolongation")
}
}
d3.log.info("Abschluss Anlage von Prolongationen.");
}
catch(Exception e)
{
d3.log.error("Fehler beim Erstellen von Prolongationen:" + e);
}
finally
{
if(lSQLConnection != null)
{
lSQLConnection.close();
}
}
d3.log.info("Ende handleProlongationTermInformation");
return createdJson;
}
/* Erzeugt eine Sonstige Frist
*
*/
/*def defineOtherTerm (D3Interface d3, def it, String InternalNumber, def Responsibles, def DurationType, def ContractTyp, def status)
{
d3.log.info("Start defineOtherTerm");
def fristart = it.fk_ref_frist_art
def bemerkung = it.bemerkung
def description = ""
if(fristart == "1000")
{
description = "Projekt"
}
else if(fristart == "1001")
{
description = "Gewährleistung"
}
else if(fristart == "1002")
{
description = "Sonderkündigung"
}
else
{
description = "Sonstiges"
}
description = description + " " + (it.bemerkung != null) ? it.bemerkung : ""
if(description.length() < 250)
{
d3.log.warn("Der Text in Fristbeschreibung wird auf 250 Zeichen gekürzt." );
description = description.take(250);
}
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS" );
sdf.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
def stichtagDatum = sdf.format( it.STICHTAG ) ;
def years = it.jahre ?: 0;
def yearsInDays = 365 * years;
def months = it.monate ?: 0;
def monthInDays = 31 * months
def days = it.tage ?: 0
def daysSum = days + monthInDays + yearsInDays
try
{
def reminderDate = ""
if(status == "Aktiv")
{
reminderDate = dateCalculate(d3, stichtagDatum, "yyyy-MM-dd'T'HH:mm:ss.SSS", Calendar.DATE, -29)
}
SimpleDateFormat startsdf = new SimpleDateFormat( "yyyy-MM-dd'T'00:00:00.000" );
def deadline = startsdf.format( it.STICHTAG );
def sonstigeFrist = """{\"termType\":\"OTHER\",\"timeZone\":\"Europe/Berlin\",\"description\":\"$description\",\"caseOrContractType\":\"$ContractTyp\",\"docTypeId\":1,\"remindUser\":true,\"reminderUser\":[\"$Responsibles\"],\"reminderDate\":\"$reminderDate\",\"escalateOn\":\"\",\"interval\":{\"count\":$daysSum,\"countUnit\":\"Day\",\"timepoint\":\"TargetDate\",\"targetDateInitial\":\"$stichtagDatum\",\"rhythmCount\":0,\"targetDateCurrent\":\"$stichtagDatum\"},\"end\":{\"end\":\"$stichtagDatum\",\"deadline\":\"$deadline\"},\"_links\":{\"reminder\":{\"href\":\"/dbscase/rest/termsCallback/reminder\"},\"escalation\":{\"href\":\"/dbscase/rest/termsCallback/escalation\"},\"updated_end\":{\"href\":\"/dbscase/rest/termsCallback/updated_end\"}},\"appId\":\"dbscase\",\"objectId\":\"$InternalNumber\"}"""
d3.log.info("Ende defineOtherTerm");
return sonstigeFrist;
}
catch(Exception e)
{
d3.log.error("Fehler beim Berechnung der Sonstigen Frist: " + e)
}
}*/
//Erzeugt einen JSON String, welcher einer Prolongation entspricht.
def defineProlongationTerm(D3Interface d3, def it, String InternalNumber, def Responsibles, def DurationType, def ContractTyp, def status)
{
d3.log.info("Start defineProlongationTerm");
def description = "Prolongation" + it.NUMMER
def prolongationsFrist;
def option = it.OPTIONSENDE
def frist = it.FRISTDATUM
if(option != null && option != "" && frist != null && frist != "")
{
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS" );
def optionsDatum = sdf.format( option ) ;
def FristDatum = sdf.format(frist);
try
{
Date optionsDatumPar = sdf.parse(optionsDatum);
Date FristDateumPar = sdf.parse(FristDatum);
def differenceInDays = use(groovy.time.TimeCategory){
def duration=(optionsDatumPar - FristDateumPar).days;
return duration;
}
def targetDateInitial = sdf.format( option );
SimpleDateFormat startsdf = new SimpleDateFormat( "yyyy-MM-dd'T'00:00:00.000" );
def deadline = startsdf.format( frist );
def reminderDate = ""
if(status == "Aktiv")
{
reminderDate = dateCalculate(d3, deadline, "yyyy-MM-dd'T'HH:mm:ss.SSS", Calendar.DATE, -29)
}
prolongationsFrist = """{\"termType\":\"OTHER\",\"timeZone\":\"Europe/Berlin\",\"description\":\"$description\",\"caseOrContractType\":\"$ContractTyp\",\"docTypeId\":1,\"remindUser\":true,\"reminderUser\":[\"$Responsibles\"],\"reminderDate\":\"$reminderDate\",\"escalateOn\":\"\",\"interval\":{\"count\":$differenceInDays,\"countUnit\":\"Day\",\"timepoint\":\"TargetDate\",\"targetDateInitial\":\"$targetDateInitial\",\"rhythmCount\":0,\"targetDateCurrent\":\"$targetDateInitial\"},\"end\":{\"end\":\"$targetDateInitial\",\"deadline\":\"$deadline\"},\"_links\":{\"reminder\":{\"href\":\"/dbscase/rest/termsCallback/reminder\"},\"escalation\":{\"href\":\"/dbscase/rest/termsCallback/escalation\"},\"updated_end\":{\"href\":\"/dbscase/rest/termsCallback/updated_end\"}},\"appId\":\"dbscase\",\"objectId\":\"$InternalNumber\"}"""
d3.log.info("Ende defineProlongationTerm");
return prolongationsFrist;
}
catch(Exception e)
{
d3.log.error("Fehler beim Berechnung der Prolongationsdaten: " + e)
}
}
else if(option != null && option != "" && (frist == null || frist == ""))
{
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS" );
sdf.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
def optionsDatum = sdf.format( option ) ;
try
{
def reminderDate = ""
if(status == "Aktiv, aber gekündigt")
{
reminderDate = dateCalculate(d3, optionsDatum, "yyyy-MM-dd'T'HH:mm:ss.SSS", Calendar.DATE, -29)
}
SimpleDateFormat startsdf = new SimpleDateFormat( "yyyy-MM-dd'T'00:00:00.000" );
def deadline = startsdf.format( option );
prolongationsFrist = """{\"termType\":\"OTHER\",\"timeZone\":\"Europe/Berlin\",\"description\":\"$description\",\"caseOrContractType\":\"$ContractTyp\",\"docTypeId\":1,\"remindUser\":true,\"reminderUser\":[\"$Responsibles\"],\"reminderDate\":\"$reminderDate\",\"escalateOn\":\"\",\"interval\":{\"count\":0,\"countUnit\":\"Day\",\"timepoint\":\"TargetDate\",\"targetDateInitial\":\"$optionsDatum\",\"rhythmCount\":0,\"targetDateCurrent\":\"$optionsDatum\"},\"end\":{\"end\":\"$optionsDatum\",\"deadline\":\"$deadline\"},\"_links\":{\"reminder\":{\"href\":\"/dbscase/rest/termsCallback/reminder\"},\"escalation\":{\"href\":\"/dbscase/rest/termsCallback/escalation\"},\"updated_end\":{\"href\":\"/dbscase/rest/termsCallback/updated_end\"}},\"appId\":\"dbscase\",\"objectId\":\"$InternalNumber\"}"""
d3.log.info("Ende defineProlongationTerm");
return prolongationsFrist;
}
catch(Exception e)
{
d3.log.error("Fehler beim Berechnung der Prolongationsdaten: " + e)
}
}
}
def handleTermInformation (D3Interface d3, def internalContractNumber, def Responsibles, def DurationType, def ContractTyp, def id_Number, def status)
{
d3.log.info("Start handleTermInformation");
def lDBUser = "US_DEVELOP_RO"
def lDBPasssword = "US_DEVELOP_RO"
def createdJson;
def lSQLConnection;
try
{
lSQLConnection = Sql.newInstance( "jdbc:oracle:thin:@//olxdedevoradb01.dev.otc.hlg.de:1521/SD011A", lDBUser, lDBPasssword, "oracle.jdbc.driver.OracleDriver" );
def sqlQuery = "SELECT VL.FK_TBL_VERTRAG, VL.befristet_jn, VL.kuendigungsfrist_jn, VL.kuendigung_zum_monate, VL.kuendigung_zum_tage, VL.kuendigungsdatum, VL.fk_ref_kuendigung_zum, VL.bemerkung, VL.naechstes_kuendigungsdatum, VL.naechstes_Vertragsende, VL.mindestlaufzeit_jn, VL.ende_mindestlaufzeit, VL.vertragsende_datum, VL.verlaengerung_jn, VL.verlaengerung_jahre, VL.verlaengerung_monate, VT.FK_REF_VERTRAGSSTATUS FROM LCM.TBL_VERTRAG_LAUFZEIT VL FULL OUTER JOIN LCM.TBL_VERTRAG VT ON VT.ID = VL.FK_TBL_VERTRAG WHERE VL.FK_TBL_VERTRAG = '" + id_Number +"'"
lSQLConnection.eachRow(sqlQuery)
{ it ->
checkAndCreateWhichTermMustBeCreated(d3, it, internalContractNumber, Responsibles, DurationType, ContractTyp, status);
}
}
catch(Exception e)
{
d3.log.error("Fehler beim Erstellen von Fristen:" + e);
}
finally
{
if(lSQLConnection != null)
{
lSQLConnection.close();
}
}
return createdJson;
d3.log.info("Ende handleTermInformation");
}
def checkAndCreateWhichTermMustBeCreated(D3Interface d3, def it, String internalContractNumber, def Responsibles, def DurationType, def ContractTyp, def status)
{
d3.log.info("Start checkAndCreateWhichTermMustBeCreated");
//Ueberpruefen ob Kuendigungsfrist angelegt werden muss
def kuendigungsfrist = it.kuendigungsfrist_jn
def mindestvertragslaufzeit = it.mindestlaufzeit_jn
def verlaengerungsfristEnt = it.verlaengerung_jn
def kuen_Ref = it.fk_ref_kuendigung_zum
def befristet = it.befristet_jn
def vertragsende = it.vertragsende_datum
def naechstes_Vertragsende = it.naechstes_Vertragsende
def endeMindestvertragslaufzeit = it.ende_mindestlaufzeit
//Einmal ein Kuendigung wenn befristet nein + Mindestvertragslaufzeit gesetzt und naechste mögliches Vertragsende = Ende Mindestvertragslaufzeit ist. Es darf keine verlaengerungsoption da sein.
//-> Dann ein Jederzeit Kuendigung mit Mindestvertragslaufzeit.
if((kuendigungsfrist == 0 || kuendigungsfrist == null) && kuen_Ref != null ) // -1 ist schon gekündigt und darf somit nicht mehr angelegt werden
{
// Erstelle Kuendigung
d3.log.info("Erstelle Kuendigung...")
def TerminationTerm = ""
TerminationTerm = defineTerminationTerm(d3, it, internalContractNumber, Responsibles, DurationType, ContractTyp, status)
if(TerminationTerm != "" && TerminationTerm != null)
{
createTerm (d3, TerminationTerm, internalContractNumber, "Kuendigung")
}
}
else if(mindestvertragslaufzeit == -1 && (endeMindestvertragslaufzeit != null && endeMindestvertragslaufzeit != ""))
{
d3.log.info("Erstelle Kuendigung nur zur Abbildung einer Mindestvertragslaufzeit...")
def EveryTerminationTerm = ""
EveryTerminationTerm = defineEveryTerminationTerm(d3, it, internalContractNumber, Responsibles, DurationType, ContractTyp)
d3.log.error("Weiter")
if(EveryTerminationTerm != "" && EveryTerminationTerm != null)
{
createTerm (d3, EveryTerminationTerm, internalContractNumber, "Kuendigung")
}
}
else if (kuendigungsfrist == -1)
{
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Erstelle Kuendigung
d3.log.info("Erstelle Kuendigung...")
def TerminationTerm = ""
TerminationTerm = defineTerminationTerm(d3, it, internalContractNumber, Responsibles, DurationType, ContractTyp, status)
if(TerminationTerm != "" && TerminationTerm != null)
{
createTerm (d3, TerminationTerm, internalContractNumber, "Kuendigung")
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
}
else
{
d3.log.info("Keine Kuendigung...")
}
//Ueberpruefen ob Verlaengerung erstellt werden soll
if(verlaengerungsfristEnt == -1 && (befristet != 0 || (befristet == 0 && (vertragsende != null || naechstes_Vertragsende!= null))))
{
// Erstelle Verlaengerung
d3.log.warn("Erstelle Verlaengerung...")
def ExtendTerm = ""
ExtendTerm = defineExtendTerm(d3, it, internalContractNumber, Responsibles, DurationType, ContractTyp, status)
d3.log.warn("Json Verlaengerung: " + ExtendTerm)
if(ExtendTerm != null && ExtendTerm != "")
{
createTerm (d3, ExtendTerm, internalContractNumber , "Verlaengerung")
}
}
else
{
d3.log.warn("Keine Verlaengerung...")
}
d3.log.info("Ende checkWhichTermMustBeCreated");
}
//Erzeugt einen JSON String, welcher zur Anlage einer Kuendigungsfrist mit Mindestvertragslaufzeit genutzt wird.
def defineEveryTerminationTerm(D3Interface d3, def it, String InternalNumber, def Responsibles, def DurationType, def ContractTyp)
{
def timepoint = it.fk_ref_kuendigung_zum;
if(timepoint == 4 || timepoint == "" || timepoint == null)
{
SimpleDateFormat sdfEndDay = new SimpleDateFormat( "yyyy-MM-dd'T'23:59:59.SSS'Z'" );
sdfEndDay.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
def ende_min = sdfEndDay.format( it.ende_mindestlaufzeit );
//mindestvertragslaufzeit identifizieren
def mindestvertragslaufzeitDateKu = dateCalculate(d3, ende_min, "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.DATE, -1)
jederzeitKuendigungsfrist = """{\"termType\":\"NOTICE\",\"timeZone\":\"Europe/Berlin\",\"description\":\"Mindestvertragslaufzeit\",\"repetition\":\"Anytime\",\"activeMinimumTerm\":true,\"minimumDuration\":\"$mindestvertragslaufzeitDateKu\",\"caseOrContractType\":\"$ContractTyp\",\"docTypeId\":1,\"remindUser\":false,\"reminderUser\":[\"$Responsibles\"],\"interval\":{\"rhythmCount\":0},\"end\":{},\"_links\":{\"reminder\":{\"href\":\"/dbscase/rest/termsCallback/reminder\"},\"escalation\":{\"href\":\"/dbscase/rest/termsCallback/escalation\"},\"updated_end\":{\"href\":\"/dbscase/rest/termsCallback/updated_end\"}},\"appId\":\"dbscase\",\"objectId\":\"$InternalNumber\"}"""
return jederzeitKuendigungsfrist;
}
else
{
d3.log.error("Kündigungsfrist jederzeit ist in sich nicht konsistent. ")
}
}
//Erzeugt einen JSON String, welcher zur Anlage einer Kuendigungsfrist genutzt wird.
def defineTerminationTerm(D3Interface d3, def it, String InternalNumber, def Responsibles, def DurationType, def ContractTyp, def status)
{
def kuendigungsfrist = it.kuendigungsfrist_jn
def mindestvertragslaufzeit = it.mindestlaufzeit_jn
def description = "Kündigung"
def reminderUser = Responsibles
def activeMinimumTermPhrase = "\"activeMinimumTerm\":false,"
if(mindestvertragslaufzeit == -1) // Kuendigung mit Mindestvertragslaufzeit
{
SimpleDateFormat sdfEndDay = new SimpleDateFormat( "yyyy-MM-dd'T'23:59:59.SSS'Z'" );
sdfEndDay.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
def ende_min = sdfEndDay.format( it.ende_mindestlaufzeit );
d3.log.info("ende_mindestlaufzeit: " + ende_min)
//mindestvertragslaufzeit identifizieren
def mindestvertragslaufzeitDate = dateCalculate(d3, ende_min, "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.DATE, -1)
activeMinimumTermPhrase = "\"minimumDuration\":\"$mindestvertragslaufzeitDate\",\"activeMinimumTerm\":true,"
}
// Kuendigung ohne Mindestvertragslaufzeit
def referenz = it.fk_ref_kuendigung_zum
def timepoint = ""
if(referenz == 1)
{
timepoint = "EndOfYear"
}
else if (referenz == 2)
{
timepoint = "EndOfMonth"
}
else if (referenz == 3)
{
timepoint = "EndOfQuarter"
}
else if (referenz == 4) //ToDo: Jederzeit -> Muss nochmal bedacht werden
{
d3.log.info("Der Zeitpunkt ist Jederzeit und wird in dieser Kuendigungsfrist anders verarbeitet.")
}
else if (referenz == 5)
{
if(DurationType == "Undetermined")
{
timepoint = "TargetDate"
}
else
{
timepoint = "EndOfContract"
}
}
else if (referenz == 6)
{
timepoint = "EndOfHalfYear"
}
//Berechnung aus Count und CountUnit
def kuendigung_zum_tage = it.kuendigung_zum_tage
def kuendigung_zum_monate = it.kuendigung_zum_monate
def count = ""
def countUnit = ""
if(kuendigung_zum_tage == null && kuendigung_zum_monate != null) // Kuendigung in Monaten
{
count = kuendigung_zum_monate
countUnit = "Month"
}
else if(kuendigung_zum_tage != null && kuendigung_zum_monate == null) // Kuendigung in Tagen
{
count = kuendigung_zum_tage
countUnit = "Day"
}
else if(kuendigung_zum_tage != null && kuendigung_zum_monate != null) //Sonderfall: Sowohl Tage als auch Monate vorhanden
{
def day = kuendigung_zum_tage
def month = kuendigung_zum_monate
def monthInDays = 31 * month;
def newDays = day + monthInDays
d3.log.info("Umrechnung des Anzahl da sowohl in Monaten als auch Tagen gerechnet wurde. Vorher: Monate: $month -- Tage: $day || Nachher: Tage: $newDays")
count = newDays
countUnit = "Day"
}
else if(kuendigungsfrist == -1 && (it.kuendigungsdatum != null && it.kuendigungsdatum != "") && (it.vertragsende_datum != null && it.vertragsende_datum != "") )
{
d3.log.info("Es wird eine Differenz Kuendigungsfrist gearbeitet")
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS" );
def kuenDatum = sdf.format( it.kuendigungsdatum ) ;
def VEndDatum = sdf.format(it.vertragsende_datum);
try
{
Date kuenDatumPar = sdf.parse(kuenDatum);
Date VEndDatumPar = sdf.parse(VEndDatum);
def differenceInDays = use(groovy.time.TimeCategory){
def duration=(VEndDatumPar - kuenDatumPar).days;
return duration;
}
count = differenceInDays
countUnit = "Day"
}
catch(Exception ex)
{
d3.log.error("Fehler beim Berechnen der Differenz fuer die Frist.")
}
}
SimpleDateFormat sdfEndDay = new SimpleDateFormat( "yyyy-MM-dd'T'23:59:59.SSS'Z'" );
sdfEndDay.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
//Vertragsende pruefen
def end = sdfEndDay.format( it.naechstes_Vertragsende );
//Ueberpruefen
def reminderDate = ""
def deadline
if(status == "Aktiv") // Wenn der Vertrag Aktiv, aber gekuendigt ist, soll er nicht mehr benachrichtigen oder eskalieren.
{
if(it.naechstes_kuendigungsdatum != null )
{
deadline = sdfEndDay.format( it.naechstes_kuendigungsdatum);
def naechstes_kuendigungsdatumFor = sdfEndDay.format( it.naechstes_kuendigungsdatum );
reminderDate = dateCalculate(d3, naechstes_kuendigungsdatumFor, "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.DATE, -29)
}
else if(it.naechstes_Vertragsende != null && (it.KUENDIGUNGSDATUM == null || it.KUENDIGUNGSDATUM == ""))
{
deadline = sdfEndDay.format( it.naechstes_Vertragsende );
int cur_count = count *-1
if(countUnit == "Day")
{
reminderDate = dateCalculate(d3, end, "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.DATE, cur_count)
}
else if(countUnit == "Month")
{
reminderDate = dateCalculate(d3, end, "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.MONTH, cur_count)
}
}
else if(it.KUENDIGUNGSDATUM == null != null )
{
deadline = sdfEndDay.format( it.KUENDIGUNGSDATUM );
int cur_count = count *-1
if(countUnit == "Day")
{
reminderDate = dateCalculate(d3, end, "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.DATE, cur_count)
}
else if(countUnit == "Month")
{
reminderDate = dateCalculate(d3, end, "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.MONTH, cur_count)
}
}
}
if(timepoint == "TargetDate")
{
kuendigungFrist =""" {\"termType\":\"NOTICE\",\"timeZone\":\"Europe/Berlin\",\"description\":\"$description\",\"repetition\":\"Term\",$activeMinimumTermPhrase\"caseOrContractType\":\"$ContractTyp\",\"docTypeId\":1,\"remindUser\":true,\"reminderUser\":[\"$Responsibles\"],\"reminderDate\":\"$reminderDate\",\"escalateOn\":\"\",\"interval\":{\"count\":$count,\"countUnit\":\"$countUnit\",\"timepoint\":\"TargetDate\",\"targetDateInitial\":\"$end\",\"rhythmCount\":0,\"targetDateCurrent\":\"$end\"},\"end\":{\"end\":\"$end\",\"deadline\":\"$deadline\"},\"_links\":{\"reminder\":{\"href\":\"/dbscase/rest/termsCallback/reminder\"},\"escalation\":{\"href\":\"/dbscase/rest/termsCallback/escalation\"},\"updated_end\":{\"href\":\"/dbscase/rest/termsCallback/updated_end\"}},\"appId\":\"dbscase\",\"objectId\":\"$InternalNumber\"}"""
return kuendigungFrist;
}
else
{
kuendigungFrist =""" {\"termType\":\"NOTICE\",\"timeZone\":\"Europe/Berlin\",\"description\":\"$description\",\"repetition\":\"Term\",$activeMinimumTermPhrase\"caseOrContractType\":\"$ContractTyp\",\"docTypeId\":1,\"remindUser\":true,\"reminderUser\":[\"$Responsibles\"],\"reminderDate\":\"$reminderDate\",\"escalateOn\":\"\",\"interval\":{\"count\":$count,\"countUnit\":\"$countUnit\",\"timepoint\":\"$timepoint\",\"rhythmCount\":0},\"end\":{\"end\":\"$end\",\"deadline\":\"$deadline\"},\"_links\":{\"reminder\":{\"href\":\"/dbscase/rest/termsCallback/reminder\"},\"escalation\":{\"href\":\"/dbscase/rest/termsCallback/escalation\"},\"updated_end\":{\"href\":\"/dbscase/rest/termsCallback/updated_end\"}},\"appId\":\"dbscase\",\"objectId\":\"$InternalNumber\"}"""
return kuendigungFrist;
}
}
//Erzeugt einen JSON String, welcher zur Anlage einer Verlaengerungsfrist genutzt wird.
def defineExtendTerm(D3Interface d3, def it, String InternalNumber, def Responsibles, def DurationType, def ContractTyp, def status)
{
if(DurationType == "End_Date") // Befristete Vertrage -> somit sind alle Fristtypen erlaubt
{
def vertragsende_datum = it.vertragsende_datum
def naechstes_Vertragsende = it.naechstes_Vertragsende
def vertrag_Status = it.FK_REF_VERTRAGSSTATUS
//Pruefung ob eine Verlängerungsfrist erstellt werden soll. Wenn der Vertrags noch aktiv ist soll eine Verlaengerung erstellt werden.
if(vertrag_Status == 1)
{
def verlaengerungsfristEnt = it.verlaengerung_jn
if(verlaengerungsfristEnt == -1)
{
def description = "Rollierende Verlängerung"
def renewalUnitCount
def renewalUnit
def repetition = "Rolling"
def autoExecution = true
def startpoint
def deadline
def reminderDate
def remindUser = true
SimpleDateFormat sdfEndDay = new SimpleDateFormat( "yyyy-MM-dd'T'23:59:59.SSS'Z'" );
sdfEndDay.setTimeZone( TimeZone.getTimeZone( "UTC" ) );
// Wenn die Daten nicht gleich sind, wurde der Vertrag schon verlaengert und man muss das naechste Vertragsende als Vertragsende definieren.
if(vertragsende_datum != naechstes_Vertragsende )
{
nextContractEnd = sdfEndDay.format( it.naechstes_Vertragsende );
deadline = dateCalculate(d3, sdfEndDay.format( it.naechstes_Vertragsende ), "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.DATE, -1)
// Wenn der Vertrag schon gekuendigt wurde, aber der Vertrag aktuell noch Bestand hat, muss eine Frist erstellt werden. Diese darf aber nicht erinnern.
if(status == "Aktiv")
{
reminderDate = dateCalculate(d3, sdfEndDay.format( it.naechstes_Vertragsende ), "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.DATE, -29)
remindUser = false
}
def verlaengerung_Jahr = it.verlaengerung_jahre
def verlaengerung_Monate = it.verlaengerung_monate
if(verlaengerung_Jahr != null && verlaengerung_Monate == null)
{
renewalUnitCount = verlaengerung_Jahr
int removeTime = renewalUnitCount * -1
renewalUnit = "Year"
startpoint = dateCalculate(d3, sdfEndDay.format( it.naechstes_Vertragsende ), "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.YEAR, removeTime);
}
else if(verlaengerung_Jahr == null && verlaengerung_Monate != null)
{
renewalUnitCount = verlaengerung_Monate
int removeTime = renewalUnitCount * -1
renewalUnit = "Month"
startpoint = dateCalculate(d3, sdfEndDay.format( it.naechstes_Vertragsende ), "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.MONTH, removeTime);
}
}
else
{
nextContractEnd = sdfEndDay.format( it.vertragsende_datum );
deadline = dateCalculate(d3, sdfEndDay.format( it.vertragsende_datum ), "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.DATE, -1)
// Wenn der Vertrag schon gekuendigt wurde, aber der Vertrag aktuell noch Bestand hat, muss eine Frist erstellt werden. Diese darf aber nicht erinnern.
if(status == "Aktiv")
{
reminderDate = dateCalculate(d3, sdfEndDay.format( it.vertragsende_datum ), "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.DATE, -29)
remindUser = false
}
def verlaengerung_Jahr = it.verlaengerung_jahre
def verlaengerung_Monate = it.verlaengerung_monate
if(verlaengerung_Jahr != null && verlaengerung_Monate == null)
{
renewalUnitCount = verlaengerung_Jahr
int removeTime = renewalUnitCount * -1
renewalUnit = "Year"
startpoint = dateCalculate(d3, sdfEndDay.format( it.vertragsende_datum ), "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.YEAR, removeTime);
}
else if(verlaengerung_Jahr == null && verlaengerung_Monate != null)
{
renewalUnitCount = verlaengerung_Monate
int removeTime = renewalUnitCount * -1
renewalUnit = "Month"
startpoint = dateCalculate(d3, sdfEndDay.format( it.vertragsende_datum ), "yyyy-MM-dd'T'23:59:59.SSS'Z'", Calendar.MONTH, removeTime);
}
}
// Es wird als Stichtag immer ein Tag vor Vertragende gewaehlt.
verlaengerungsfrist = """{\"termType\":\"RENEWAL\",\"timeZone\":\"Europe/Berlin\",\"description\":\"$description\",\"remindUser\":$remindUser,\"reminderUser\":[\"$Responsibles\"],\"reminderDate\":\"$reminderDate\",\"escalateOn\":\"\",\"interval\":{\"count\":1,\"countUnit\":\"Day\",\"timepoint\":\"EndOfContract\"},\"renewalUnitCount\":$renewalUnitCount,\"renewalUnit\":\"$renewalUnit\",\"end\":{\"deadline\":\"$deadline\",\"end\":\"$nextContractEnd\"},\"originalEndDate\":null,\"startTimepoint\":\"$startpoint\",\"caseOrContractType\":\"$ContractTyp\",\"docTypeId\":1,\"repetition\":\"$repetition\",\"autoExecute\":$autoExecution,\"numberOfExecutions\":0,\"_links\":{\"renewal\":{\"href\":\"/dbscase/rest/termsCallback/renew\"},\"reminder\":{\"href\":\"/dbscase/rest/termsCallback/reminder\"},\"escalation\":{\"href\":\"/dbscase/rest/termsCallback/escalation\"},\"updated_end\":{\"href\":\"/dbscase/rest/termsCallback/updated_end\"}},\"appId\":\"dbscase\",\"objectId\":\"$InternalNumber\"}"""
return verlaengerungsfrist;
}
else
{
d3.log.info("Es gibt keine Verlangerung die Angelegt werden konnte, da die Kombination der Fristdaten fachlich nicht korrekt ist.")
}
}
else
{
d3.log.warn("Es wird einen Verlaengerung angelegt. Das ursprüngliche Vertragsende entspricht nicht dem naechsten Vertragsende.")
}
}
}
/*
* Addiert oder subtrahierte eine Anzahl von Tagen auf eine Datum drauf/ab.
*/
def dateCalculate(def d3, String dateString, String dateFormat, def einheit, int days)
{
d3.log.info("Start dateCalculate")
Calendar cal = Calendar.getInstance();
SimpleDateFormat s = new SimpleDateFormat(dateFormat);
try
{
cal.setTime(s.parse(dateString));
}
catch (Exception e)
{
d3.log.error("Fehler:" + e.printStackTrace());
}
cal.add(einheit, days);
def retValue = s.format(cal.getTime());
d3.log.info("Ende dateCalculate")
return retValue
}
def getContract (D3Interface d3)
{
d3.log.info("Start getContract");
def lDBUser = "US_DEVELOP_RO"
def lDBPasssword = "US_DEVELOP_RO"
def lSQLConnection;
try
{
lSQLConnection = Sql.newInstance( "jdbc:oracle:thin:@//olxdedevoradb01.dev.otc.hlg.de:1521/SD011A", lDBUser, lDBPasssword, "oracle.jdbc.driver.OracleDriver" );
String SQL_Statement = "SELECT V.ID, V.VT_NUMMER, V.BEZEICHNUNG, VL.VERTRAGSBEGINN, VL.befristet_jn, VL.vertragsende_datum, VL.naechstes_vertragsende, VL.KUENDIGUNGSDATUM, V.FK_REF_VERTRAGSSTATUS, V.FK_REF_VERTRAGSTYP, VAB.ABTEILUNG, VA.VERTRAGSART_0, DVA.FK_REF_ATT_KONZERNVERTR, DVA.FK_REF_ATT_L1, DVA.FK_REF_ATT_KONZERNVERRE, V.STANDARDVERTRAG_JN, DVA.FK_REF_ATT_HVDHAFTUNG_JN, DVA.HVDHAFT_TEXT, V.BEMERKUNG, V.ANGELEGTAM, V.VERTRAULICH_JN, DVA.TS1, DVA.AKTENZEICHEN, LISTAGG(VTP.FK_TBL_Person, '|') WITHIN GROUP (ORDER BY VTP.FK_REF_VP_FUNKTION) as PartnerNumbers, LISTAGG(VTP.FK_REF_VP_FUNKTION, '|') WITHIN GROUP (ORDER BY VTP.FK_REF_VP_FUNKTION) as PartnerRolle, VRE.FK_TBL_VERTRAG_RAHMEN, AOK.GEKUENDIGT_ZUM, VL.verlaengerung_jn, VL.BEMERKUNG AS FRISTBEMERKUNG FROM LCM.TBL_VERTRAG V FULL OUTER JOIN LCM.TBL_VERTRAG_LAUFZEIT VL ON V.ID = VL.FK_TBL_VERTRAG FULL OUTER JOIN LCM.REF_ABTEILUNG VAB ON V.FK_REF_ABTEILUNG = vab.id FULL OUTER JOIN LCM.REF_VERTRAGSART VA ON V.FK_REF_VERTRAGSART = va.id FULL OUTER JOIN LCMDESIGNER.tbl_vertrag_attribute DVA ON v.id = dva.fk_tbl_vertrag FULL OUTER JOIN LCM.tbl_vertrag_ansprech VAN on V.id = VAN.fk_tbl_vertrag FULL OUTER JOIN LCM.TBL_VERTRAG_PARTNER VTP on VTP.fk_tbl_Vertrag = v.id FULL OUTER JOIN LCM.TBL_VERTRAG_RAHMEN_EINZEL VRE ON V.ID = VRE.FK_TBL_VERTRAG_EINZEL FULL OUTER JOIN LCM.TBL_VERTRAG_AO_KUENDIGUNG AOK ON V.ID = AOK.fk_tbl_vertrag $SQLQueryFilter Group BY v.ID, V.VT_NUMMER, V.BEZEICHNUNG, VL.VERTRAGSBEGINN, VL.befristet_jn, VL.vertragsende_datum, VL.naechstes_vertragsende, VL.KUENDIGUNGSDATUM, V.FK_REF_VERTRAGSSTATUS, V.FK_REF_VERTRAGSTYP, VAB.ABTEILUNG, VA.VERTRAGSART_0, DVA.FK_REF_ATT_KONZERNVERTR, DVA.FK_REF_ATT_L1, DVA.FK_REF_ATT_KONZERNVERRE, V.STANDARDVERTRAG_JN, DVA.FK_REF_ATT_HVDHAFTUNG_JN, DVA.HVDHAFT_TEXT, V.BEMERKUNG, V.ANGELEGTAM, V.VERTRAULICH_JN, DVA.TS1, DVA.AKTENZEICHEN, VRE.FK_TBL_VERTRAG_RAHMEN, AOK.GEKUENDIGT_ZUM, VL.verlaengerung_jn, VL.BEMERKUNG Order by V.FK_REF_VERTRAGSTYP desc, v.id asc"
lSQLConnection.eachRow(SQL_Statement)
{ it ->
d3.log.info("--------------------------------------------");
def ID_Number = it.ID;
def vertragsJson = defineJsonVertragObject(d3, it);
if(vertragsJson != null)
{
//d3.log.info("Aktuelles Json Vertrag Nummer: " + ID_Number + " JSON file:" + vertragsJson);
createContract (d3, ID_Number, vertragsJson);
}
else
{
d3.log.error("Fehler bei der Erstellung der Vertragsdaten für die Schnittstelle: $ID_Number")
}
}
}
catch(Exception e)
{
d3.log.error("Fehler:" + e);
}
finally
{
if(lSQLConnection != null)
{
lSQLConnection.close();
}
}
d3.log.info("Ende getContract");
}
def mapOrganisationUnit (def d3, def orgUnit)
{
if(orgUnit == "HG-SK (KAM, BS, CM)")
{
return "HG-SK"// pruef
}
else if(orgUnit == "HE-IT")
{
return "HE-IT"
}
else if(orgUnit == "HG-SK-SA (Regional Sales)")
{
return ""// fehlt
}
else if(orgUnit == "HG-RF (Real Estate & Facility Mgmt.)")
{
return "HG-RF"// pruef
}
else if(orgUnit == "HG-GAM Nord")
{
return "HG-GAM"
}
else if(orgUnit == "HG-FC (Finance & Controlling)")
{
return "HG-FC"// pruefen
}
else if(orgUnit == "HG-IT")
{
return "HG-IT"// pruefen
}
else if(orgUnit == "HG-CP (Central Procurement & Fleet Mgmt.)")
{
return "HG-CP"
}
else if(orgUnit == "HG-HL-SE (Corp. Security)")
{
return "HG-HL-SE"// pruef
}
else if(orgUnit == "HG-CE-MA (Marketing)")
{
return "HG-CE-MA"// pruefen
}
else if(orgUnit == "HG-OS (Operations Development)")
{
return ""// fehlt
}
else if(orgUnit == "pM primeMail")
{
return ""// fehlt
}
else if(orgUnit == "HG Dummy")
{
return ""// fehlt
}
else if(orgUnit == "SCS (Suppliers)")
{
return ""// fehlt
}
else if(orgUnit == "HG-HL-HR (Human Resources)")
{
return "HG-HL-HR"// pruef
}
else if(orgUnit == "HG-GHV")
{
return ""// Fehlt
}
else if(orgUnit == "Hermes BorderGuru (HBG)")
{
return ""// Fehlt
}
else if(orgUnit == "HInt")
{
return "Hint"// pruef
}
else if(orgUnit == "Hermes AUT Hermes Logistik")
{
return ""// fehlt
}
else if(orgUnit == "HTK Hermes Technischer Kundendienst")
{
return ""// fehlt
}
else if(orgUnit == "HE-CO")
{
return "HE-CO"// pruef
}
else if(orgUnit == "HE-GM")
{
return ""// fehlt
}
else if(orgUnit == "HG-HL-CR (Compliance & Respons.)")
{
return ""// fehlt
}
else if(orgUnit == "HE-GHV")
{
return ""// fehlt
}
else if(orgUnit == "Otto")
{
return "Otto"// pruef
}
else if(orgUnit == "HG-SCS-DE (Supply Chain Solution / Germany)")
{
return ""// fehlt
}
else if(orgUnit == "HG-CS (Customer Service)")
{
return "HG-CS"
}
else if(orgUnit == "HG-SK-SM (SAM Konzern)")
{
return ""// fehlt
}
else if(orgUnit == "HG-CE-DS (Dig. Chann. & Services)")
{
return "HG-CE-DS"// pruefen
}
else if(orgUnit == "HG-SK-SM (SAM+Amazon)")
{
return ""// fehlt
}
else if(orgUnit == "2. HTS")
{
return ""// fehlt
}
else if(orgUnit == "HF Hermes Fulfilment")
{
return ""// fehlt
}
else if(orgUnit == "HG-CO (Corp. Communications)")
{
return "HG-CO"// pruefen
}
else if(orgUnit == "HG-CE-PP (Product/Partnermgmt.)")
{
return ""// fehlt
}
else if(orgUnit == "HG-CE-PM (POS Mgmt.)")
{
return ""// fehlt
}
else if(orgUnit == "Legal - Musterverträge ")
{
return ""// fehlt
}
else if(orgUnit == "HG-HL-LE (Legal)")
{
return "HG-HL-LE"// pruef
}
else if(orgUnit == "LieferFactory GmbH")
{
return ""// fehlt
}
else if(orgUnit == "Hermes RUS - Hermes B2C Russia")
{
return ""// fehlt
}
else if(orgUnit == "HE-SI")
{
return ""// fehlt
}
else if(orgUnit == "Hermes MD")
{
return ""// fehlt
}
else if(orgUnit == "HG-SCS-BD (Business Development)")
{
return ""// fehlt
}
else if(orgUnit == "Hermes UK Hermes Parcelnet")
{
return ""// fehlt
}
else if(orgUnit == "HG-SC (Strategy & Cons.)")
{
return "HG-SC"// pruef
}
else if(orgUnit == "Hermes ITA Hermes ITALIA")
{
return ""// fehlt
}
else if(orgUnit == "HG-HL-LE-DP (Data Privacy)")
{
return "HG-HL-LE"// Pruefen
}
else if(orgUnit == "Zitra GmbH")
{
return ""// fehlt
}
else if(orgUnit == "HNT Hermes NexTec")
{
return ""// fehlt
}
else if(orgUnit == "ParcelLock GmbH")
{
return ""// fehlt
}
else if(orgUnit == "HG-HL-IA (Internal Audit)")
{
return ""// fehlt
}
//Ab hier keine Eintraege als Altdaten vorhanden
else if(orgUnit == "Hermes NexTec LLC")
{
return ""// fehlt
}
else if(orgUnit == "HG Greater China")
{
return ""// fehlt
}
else if(orgUnit == "HG-GHV")
{
return ""// fehlt
}
else if(orgUnit == "HGS BVG")
{
return ""// fehlt
}
else if(orgUnit == "Prüfinstitut Hansecontrol GmbH")
{
return ""// fehlt
}
else if(orgUnit == "Send&Store GmbH")
{
return ""// fehlt
}
else
{
d3.log.error("Es konnte keine Organisationseinheit anhand der Daten des Altvertrags gefunden werden.");
return ""
}
}
def defineJsonVertragObject (D3Interface d3, def it )
{
d3.log.info("Start defineJsonVertragObject: " + it.VT_NUMMER)
try
{
def jsonSlurper = new JsonSlurper()
def Vertragsbezeichnung = it.BEZEICHNUNG;
if(Vertragsbezeichnung != null && Vertragsbezeichnung != "")
{
Vertragsbezeichnung = Vertragsbezeichnung.replaceAll('\n','|').replaceAll('\r','').replaceAll("\"","'").replaceAll('\t','');
if(Vertragsbezeichnung.length() > 250)
{
d3.log.warn("Der Text in der Vertragsbezeichnung wird auf 250 zeichen gekürzt" );
log("Der Text in der Vertragsbezeichnung wird auf 250 zeichen gekuerzt");
Vertragsbezeichnung = Vertragsbezeichnung.take(250);
}
}
def LCM_Vertragsnummer = it.VT_NUMMER;
def Vertragstyp = ""
if(it.VERTRAGSART_0 == "" && it.VERTRAGSART_0 == null)
{
throw new Exception("Vertragstyp ist ein Pflichtfeld und darf nicht leer sein.")
}
else
{
if(it.VERTRAGSART_0 == "Gesellschaftsvertrag")
{
Vertragstyp = Gesellschaft;
d3.log.info("Der Vertragstyp wird von Gesellschaftsvertrag auf Gesellschaft geaendert.")
}
Vertragstyp = it.VERTRAGSART_0;
}
def vertragsstatus = it.FK_REF_VERTRAGSSTATUS;
if(vertragsstatus == 1)
{
Vertragsstatus = "Aktiv";
}
else if(vertragsstatus == 3)
{
Vertragsstatus = "beendet";
}
else if(vertragsstatus == 1001)
{
Vertragsstatus = "Aktiv, aber gekündigt";
}
else
{
throw new Exception("Vertragsstatus ist ein Pflichtfeld und darf nicht leer sein.")
}
//Organisationseinheit = it.ABTEILUNG;
//TODO: Einmal einkommentieren
def mappedOrgValue = "HG-CE-IT"//mapOrganisationUnit (d3, it.ABTEILUNG);
def Organisationseinheit
if(mappedOrgValue != "")
{
Organisationseinheit = mappedOrgValue
}
else
{
Organisationseinheit = "LCM-Migration" // Fuer eine spaetere Bereinigung
}
def allRecipientes = getResponsiblesForContract (d3, it.VT_NUMMER)
d3.log.info("Verantwortliche: " + allRecipientes);
def allRecipientesString
def allTechnicalRecipientesString = ""
def allRecipientesList = new ArrayList();
if(allRecipientes != "")
{
if(allRecipientes.contains("|"))
{
//mehrere Verantwortliche
def NameArray = allRecipientes?.tokenize( '|' )
for(def currentName : NameArray)
{
//Fachlicher Ansprechpartner schreiben
if(allTechnicalRecipientesString == "")
{
if(currentName != "" && currentName != null)
{
allTechnicalRecipientesString = currentName
}
else
{
d3.log.warn("Der fachliche Verantwortliche wird nicht geschrieben, da der Name leer ist.")
}
}
else
{
if(currentName != "" && currentName != null)
{
allTechnicalRecipientesString = allTechnicalRecipientesString + "," + currentName ;
}
else
{
d3.log.warn("Der fachliche Verantwortliche wird nicht geschrieben, da der Name leer ist.")
}
}
//IDP User schreiben
def IDPId_User = getCurrentUser(d3, currentName); // Erste Pruefung anhand des Eintrags
if(IDPId_User != "" && IDPId_User != null)
{
if(IDP_User.contains(IDPId_User))
{
if(!allRecipientesList.contains(IDPId_User))
{
allRecipientesList.add(IDPId_User)
}
else
{
d3.log.info("Der Benutzer " + currentName + " ist als Empfaenger schon vorhanden. Jeder kann nur einmal Empfaenger sein.")
}
}
else
{
d3.log.warn("Der Benutzer " + currentName +" wurde gefunden, besitzt aber keine DCM Lizenz. Somit wird der Benuzter nicht gesetzt.")
}
}
else
{
d3.log.warn("Der Benutzer " + currentName + " wird nicht im d.3 Identity Provider gefunden.")
}
}
}
else
{
// nur ein Verantwortlicher
allTechnicalRecipientesString = allRecipientes;
def IDPId_User = getCurrentUser(d3, allRecipientes); // Erste Pruefung anhand des Eintrags
if(IDPId_User != "" && IDPId_User != null)
{
if(IDP_User.contains(IDPId_User))
{
if(!allRecipientesList.contains(IDPId_User))
{
allRecipientesList.add(IDPId_User)
}
else
{
d3.log.info("Der Benutzer " + allRecipientes + " ist als Empfaenger schon vorhanden. Jeder kann nur einmal Empfaenger sein.")
}
}
else
{
d3.log.warn("Der Benutzer " + allRecipientes +" wurde gefunden, besitzt aber keine DCM Lizenz. Somit wird der Benuzter nicht gesetzt.")
}
}
else
{
d3.log.warn("Der Benutzer " + allRecipientes + " wird nicht im d.3 Identity Provider gefunden.")
}
}
}
if(allRecipientesList.size() <= 0 )
{
d3.log.warn("Kein Vertragsverantwortlicher vorhanden. Es wird ein Verantwortlichen aus der Organistion gesetzt");
def userNameFromJunction = getJunctionUser(d3, Organisationseinheit);
if(userNameFromJunction != "")
{
if(IDP_User.contains(userNameFromJunction))
{
if(!allRecipientesList.contains(userNameFromJunction))
{
allRecipientesList.add(userNameFromJunction)
}
else
{
d3.log.warn("Der Benutzer ist schon in der Empfaengerliste vorhanden. Dies kann an dem Verwenden eines Defaults liegen.")
}
}
else
{
d3.log.warn("Der Fallback Benutzer der Organisationseinheit" + Organisationseinheit + " wird nicht im d.3 Identity Provider gefunden.")
}
}
//------------------------------------------------------------------------------
if(allRecipientesList.size() <= 0 )
{
d3.log.warn("Es konnte bisher aus den Vertragsverantwortlichen kein Benutzer identifiziert werden. Es wird nun ein Default Wert gesetzt.");
allRecipientesList.add(fallbackIDPUser)
}
}
allRecipientesString = allRecipientesList.join(",")
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
def Vertragsverantwortlich = allRecipientesString
def FachlicherAnsprechpartner = allTechnicalRecipientesString;
def PartnerId = ""
def PartnerRolle = ""
String oldPartnerNumber = it.PartnerNumbers;
d3.log.info("oldPartnerNumber: " + oldPartnerNumber)
String oldPartnerRolles = it.PartnerRolle;
d3.log.info("oldPartnerRolles: " + oldPartnerRolles)
def PartnerNumberArray = oldPartnerNumber?.tokenize('|')
def PartnerRolleArray = oldPartnerRolles?.tokenize('|')
def setDefaultPartner = false
if(PartnerRolleArray == null || PartnerRolleArray == "" )
{
setDefaultPartner = true
}
int i = 0
for(String currentPartnerNumber : PartnerNumberArray)
{
def createRole = true
def partnerRoll = ""
if(setDefaultPartner)
{
partnerRoll = "1003"
d3.log.error("Die Partnerrolle konnte nicht eindeutig ermittelt werden. Somit einmal den Partner " + currentPartnerNumber + " pruefen.")
log("Die Partnerrolle konnte nicht eindeutig ermittelt werden. Somit einmal den Partner " + currentPartnerNumber + " pruefen.")
}
else
{
partnerRoll = PartnerRolleArray[i];
}
d3.log.info("Aktuelle Partner Rolle: " + partnerRoll)
def currentPartnerRoll = ""
if(partnerRoll == "1002")
{
currentPartnerRoll = "Externer Partner"
}
else if(partnerRoll == "1003")
{
currentPartnerRoll = "Hermes-Vertragseigner"
}
d3.log.info("Uebersetze Partner Rolle: " + currentPartnerRoll)
if(currentPartnerNumber != null && currentPartnerNumber != "")
{
d3.log.info("Partnernummer zur Pruefung: " + currentPartnerNumber)
if(partnerMap.containsKey(currentPartnerNumber))
{
PartnerData currentPartner = partnerMap.get(currentPartnerNumber)
def partnerIDComarch = currentPartner*.getPartnerNumber();
def LCM_NUMxy = currentPartner*.getLCMNumber();
d3.log.info("partnerIDComarch aus Java Partner Object: " + partnerIDComarch + " LCM Nummer: " + LCM_NUMxy)
if(partnerIDComarch[0] != null && partnerIDComarch[0] != "" && partnerIDComarch[0] != "#NV (#NV)")
{
if(PartnerId == "")
{
PartnerId = partnerIDComarch[0]
}
else
{
PartnerId = PartnerId + "\",\"" + partnerIDComarch[0]
}
}
else
{
d3.log.warn("Es konnte kein Comarch Partner gefunden werden.")
def newD3PartnerID = createPartnerFolder(d3, currentPartner )
if(newD3PartnerID != "" && newD3PartnerID != null)
{
if(PartnerId == "")
{
PartnerId = newD3PartnerID
}
else
{
PartnerId = PartnerId + "\",\"" + newD3PartnerID
}
partnerMap.put(currentPartnerNumber, new PartnerData(newD3PartnerID, "" ,"", "" ))
}
else
{
d3.log.error("Es konnte kein d.3 Partner erstellt werden.")
}
}
}
else
{
d3.log.warn("Key $currentPartnerNumber nicht enthalten.")
createRole = false
log("Der Vertrag enthält einen Partner der im LCM nicht mehr vorhanden ist und somit nicht gemappt oder neu angelegt werden kann");
}
}
if(createRole)
{
if(PartnerRolle == "")
{
PartnerRolle = currentPartnerRoll
}
else
{
PartnerRolle = PartnerRolle + "\",\"" + currentPartnerRoll
}
}
i++
}
def Ansprechpartner = ""
def Ablageort = it.TS1 == null ? "" : it.TS1;
def Vertragswert = "" // Kein Vertragswert
String LCM_Rahmenvertragsnummer = it.FK_TBL_VERTRAG_RAHMEN
def Rahmenvertragsnummer = ""
if(LCM_Rahmenvertragsnummer != null && LCM_Rahmenvertragsnummer !="")
{
Rahmenvertragsnummer = getDCMRahmenvertragsnummer(d3, LCM_Rahmenvertragsnummer)
}
def Bemerk = it.BEMERKUNG
if(Bemerk != null && Bemerk != "")
{
Bemerk = Bemerk.replaceAll('\n','|').replaceAll('\r','').replaceAll('\t','').replaceAll("\"","'").replaceAll(":","\\:");
}
else
{
Bemerk = ""
}
def FristBemerkung = "Bemerkung der Fristen: "
if(it.FRISTBEMERKUNG != null && it.FRISTBEMERKUNG != "")
{
FristBemerkung = FristBemerkung + " " + it.FRISTBEMERKUNG
FristBemerkung = FristBemerkung.replaceAll('\n','|').replaceAll('\r','').replaceAll('\t','').replaceAll("\"","'").replaceAll(":","\\:");
if(Bemerk != null && Bemerk != "")
{
Bemerk = Bemerk + " - " + FristBemerkung
}
else
{
Bemerk = FristBemerkung
}
}
def ZusaetlicheErlaeuterung = Bemerk;
def Vertraulich = ""
def vertraulichkeitsstufe = it.VERTRAULICH_JN;
if(vertraulichkeitsstufe == -1)
{
Vertraulich = "Ja";
}
else if(vertraulichkeitsstufe == 0)
{
Vertraulich = "Nein";
}
def Standardvertrag = ""
def standardv = it.STANDARDVERTRAG_JN;
if(standardv == -1)
{
//Standardvertrag = "Ja, unverändert";
Standardvertrag = "Ja";
}
else if(standardv == 0)
{
Standardvertrag = "Nein";
}
else if(standardv == null)
{
d3.log.warn("Standardvertrag war vorher leer-> Nein" );
Standardvertrag = "Nein";
}
def Standardhaftung = ""
def stanHaft = it.FK_REF_ATT_HVDHAFTUNG_JN
if(stanHaft == 1000)
{
Standardhaftung = "Ja"
}
else if(stanHaft == 1001)
{
Standardhaftung = "Nein"
}
else if(stanHaft == 1002)
{
Standardhaftung = "Nicht relevant"
}
else if(stanHaft == null)
{
d3.log.info("Standardhaftung ist leer" );
}
def AbweichendeHaftungsvereinbarung = ""
def abweichende_haftungsver = it.HVDHAFT_TEXT;
if(abweichende_haftungsver != null && abweichende_haftungsver != "" )
{
abweichende_haftungsver = abweichende_haftungsver.replaceAll('\n',' | ').replaceAll('\r',' ').replaceAll('\t','').replaceAll("\"","'").replaceAll(":","\\:");
if(abweichende_haftungsver.length() > 250)
{
d3.log.warn("Der Text in den abweichenden Haftungsvereinbarungen wird auf 250 zeichen gekürzt" );
log("Der Text in den abweichenden Haftungsvereinbarungen wird auf 250 zeichen gekürzt");
AbweichendeHaftungsvereinbarung = abweichende_haftungsver.take(245);
}
else
{
AbweichendeHaftungsvereinbarung = abweichende_haftungsver;
}
}
def Konzernvertrag = ""
def konzernv = it.FK_REF_ATT_KONZERNVERTR;
if(konzernv == 1000)
{
Konzernvertrag = "Ja"
}
else if(konzernv == 1001)
{
Konzernvertrag = "Nein"
}
else if(konzernv == null)
{
d3.log.warn("Konzernvertrag war vorher leer: Nein" );
Konzernvertrag = "Nein"
}
def Konzernverrechnung = ""
def konzernverr = it.FK_REF_ATT_KONZERNVERRE;
if(konzernverr == 1000)
{
Konzernverrechnung = "Ja";
}
else if(konzernverr == 1001)
{
Konzernverrechnung = "Nein";
}
else if(konzernverr == null)
{
d3.log.warn("Konzernverrechnung war vorher leer->ddf8: Nein" );
Konzernverrechnung = "Nein";
}
def aktenzeichen = it.AKTENZEICHEN == null ? "" : it.AKTENZEICHEN;
def Dublette = ""
def dubl = it.FK_REF_ATT_L1;
if(dubl == 1000)
{
Dublette = "Ja"
}
else if(dubl == 1001)
{
Dublette = "Nein"
}
else if(dubl == null)
{
d3.log.warn("Dublette war vorher leer->ddf7: Nein" );
Dublette = "Nein"
}
//Laufzeit
def checkLaufzeit = it.VERTRAGSBEGINN
def periodValue = ""
if(checkLaufzeit != null && checkLaufzeit != "")
{
//Definition welcher Laufzeittyp
d3.log.info("Definition der Laufzeiten" );
SimpleDateFormat sdfStartDay = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
SimpleDateFormat sdfEndDay = new SimpleDateFormat( "yyyy-MM-dd'T'21:59:59.999'Z'" );
SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" );
sdfStartDay.setTimeZone( TimeZone.getTimeZone( "Europe/Berlin+1" ) );
def Vertragsbeginn = sdfStartDay.format( it.VERTRAGSBEGINN );
def Unterzeichnet = ""//sdf.format( it.ANGELEGTAM );Muss raus, da es hierbei falsche Werte inkl. unpassneder Interpretationen gibt. Somit besser leer
def Kuendigungsdatum = null
if(it.GEKUENDIGT_ZUM != null)
{
Kuendigungsdatum = sdf.format( it.GEKUENDIGT_ZUM );
}
//Wenn keine Verlaengerungsoption oder Prolongation vorhanden ist, soll trotzdem ein unbefristeter Vertrag gesetzt werden -> Das ist eine weitere Option und erweitert die bisherige Logik
def befristet = it.befristet_jn
def verlaengerungsoption = it.verlaengerung_jn
if(befristet == -1 || (befristet == 0 && ( it.vertragsende_datum != null || it.naechstes_vertragsende != null) && verlaengerungsoption == -1 ))
{
//urspruengliches Vertragsende
d3.log.info("Der Vertrag ist befristet")
def Vertragsende = ""
def n_Vertragsende = ""
if(it.vertragsende_datum != null && it.vertragsende_datum != "")
{
Vertragsende = sdfEndDay.format( it.vertragsende_datum );
}
if(it.naechstes_vertragsende != null && it.naechstes_vertragsende != "")
{
n_Vertragsende = sdfEndDay.format( it.naechstes_vertragsende );
}
if(Vertragsende != "" && n_Vertragsende != "")
{
def dateTime1 = (Date)sdf.parse(Vertragsende);
def dateTime2 = (Date)sdf.parse(n_Vertragsende);
if(Vertragsstatus == "Aktiv" && dateTime2 > dateTime1)
{
d3.log.warn("Das naechste Vertragsende $n_Vertragsende ist groesser als das Vertragsende. Somit wird das naechste Vertragsende gesetzt.")
Vertragsende = sdfEndDay.format( it.naechstes_vertragsende );
}
else
{
d3.log.info("Das urspruengliche Vertragsende $Vertragsende wird gesetzt")
}
}
else if(Vertragsende == "" && n_Vertragsende != "") // Es ist aktuell nur ein neues Vertragsende gesetzt. Somit wird dieses zum Vertragende
{
d3.log.warn("Es ist nur das naechste Vertragsende $n_Vertragsende vorhanden. Somit wird dies als Vertragsende gesetzt.")
Vertragsende = sdfEndDay.format( it.naechstes_vertragsende );
}
if(Vertragsstatus != "Aktiv" && Kuendigungsdatum != null)
{
periodValue = """\"timeZone\":\"Europe/Berlin\",\"durationType\":\"End_Date\",\"start\":\"$Vertragsbeginn\",\"signing\":\"$Unterzeichnet\",\"end\":\"$Vertragsende\",\"terminationDate\":\"$Kuendigungsdatum\",\"durationCount\":0,\"terminatedByUser\":null"""
}
else
{
periodValue = """\"timeZone\":\"Europe/Berlin\",\"durationType\":\"End_Date\",\"start\":\"$Vertragsbeginn\",\"signing\":\"$Unterzeichnet\",\"end\":\"$Vertragsende\",\"durationCount\":0"""
}
}
else if(befristet == 0)
{
d3.log.info("Der Vertrag ist unbefristet")
if(Vertragsstatus != "Aktiv" && Kuendigungsdatum != null)
{
periodValue = """\"timeZone\":\"Europe/Berlin\",\"durationType\":\"Undetermined\",\"start\":\"$Vertragsbeginn\",\"signing\":\"$Unterzeichnet\",\"terminationDate\":\"$Kuendigungsdatum\",\"durationCount\":0,\"terminatedByUser\":null"""
}
else
{
periodValue = """\"timeZone\":\"Europe/Berlin\",\"durationType\":\"Undetermined\",\"start\":\"$Vertragsbeginn\",\"signing\":\"$Unterzeichnet\",\"durationCount\":0"""
}
}
else
{
d3.log.error("Es sind keine Informationen ($befristet) zu einer Befristung vorhanden. Somit kann keine Laufzeit erfasst werden.");
}
}
else
{
d3.log.info("Der Vertrag " + LCM_Vertragsnummer + " hat keine Laufzeitinformationen. Somit werden auch keine Fristen angelegt")
}
def IsRahmenvertrag = ""
def typ = it.FK_REF_VERTRAGSTYP;
if(typ == 1)
{
IsRahmenvertrag = ""
}
else if(typ == 2)
{
IsRahmenvertrag = ",\"frame\":true"
}
//Erstelltes Json zur Vertragsanlage
def jsonString = """{\"masterData\":{\"description\":\"$Vertragsbezeichnung\",\"externalNumber\":\"$LCM_Vertragsnummer\",\"type\":\"$Vertragstyp\",\"status\":\"$Vertragsstatus\",\"responsibles\":[\"$Vertragsverantwortlich\"],\"partnerIds\":[\"$PartnerId\"],\"roles\":[\"$PartnerRolle\"],\"contactPersons\":[\"$Ansprechpartner\"],\"contactPersons\":[null],\"orgaUnit\":\"$Organisationseinheit\",\"storageLocation\":\"$Ablageort\",\"contractValue\":\"$Vertragswert\",\"blanketAgreement\":\"$Rahmenvertragsnummer\" $IsRahmenvertrag},\"additionalExplanation\":{\"text\":\"$ZusaetlicheErlaeuterung\"},\"advMasterData\":{\"additionalSingleValueData\":{\"7\":\"$Dublette\",\"8\":\"$Konzernverrechnung\",\"10\":\"$AbweichendeHaftungsvereinbarung\",\"13\":\"$Vertraulich\",\"14\":\"$Konzernvertrag\",\"16\":\"$aktenzeichen\",\"17\":\"$Standardvertrag\",\"18\":\"$Standardhaftung\"},\"additionalMultiValueData\":{\"67\":[\"$FachlicherAnsprechpartner\"]}},\"period\":{$periodValue}}"""
// Ende Mapping
def output = jsonSlurper.parseText(jsonString);
d3.log.info("Ende defineJsonVertragObject")
return jsonString;
}
catch(Exception e)
{
d3.log.error("Fehler beim Mapping: " + e)
return null;
}
return null;
}
def getJunctionUser (D3Interface d3, def orgUnit)
{
switch(orgUnit)
{
case ("HG-CO-RN-HAM") :
return "862be782-6a87-4744-8aad-39e26ddabb7f"
break;
case ("HG-CO-RN-HAJ") :
return "32d53587-e712-479e-b25b-2ee8f8d48ebd"
break;
case ("HG-CO-RN-CGN") :
return "9bdcf060-4163-4dc5-917a-01ee73234f60"
break;
case ("HG-CO-RN-DN") :
return "526b2090-3cba-45a7-a051-4a5a34b65d5d"
break;
case ("HG-CO-RN-LP") :
return "22427e58-d6c6-4d93-b00c-0f06280013e8"
break;
case ("HG-CO-RO-BER") :
return "4164e368-76dd-4bde-a057-b0353e6d8ca5"
break;
case ("HG-CO-RO-KSF") :
return "985a91a1-9e06-457b-b9a7-cbb892c047db"
break;
case ("HG-CO-RO-LEJ") :
return "ad768a67-40f7-4d17-9f3c-97c690de2892"
break;
case ("HG-CO-RS-MNZ") :
return "a534ad43-2d60-4701-a3cd-1708c3f667b7"
break;
case ("HG-CO-RS-STR") :
return "27c952e4-3133-4e53-834b-3d4cf36f7e24"
break;
case ("HG-CO-RS-NUE") :
return "d798eb24-a0fd-4845-b64b-c77768c0aa51"
break;
case ("HG-CO-RS-MUC") :
return "2fd06165-1210-4314-b091-327fca671b98"
break;
case ("HG-CO-OC") :
return "526b2090-3cba-45a7-a051-4a5a34b65d5d"
break;
case ("HG-CS-SK-SM") :
return "aa59deae-fc48-4586-9d3e-65c8c0d1c5e0"
break;
case ("HG-CS-SK-KM") :
return "937d314f-ac45-4eb0-a90c-c872b39e6a90"
break;
case ("HG-CS-SK-CP") :
return "f27fba0c-acec-4d8a-8a08-2026cafe4cad"
break;
case ("HG-CS-SK-CX") :
return "aa59deae-fc48-4586-9d3e-65c8c0d1c5e0"
break;
case ("HG-CS-SK-CM") :
return "6907c7c1-c925-4bfc-94d2-65c8de214361"
break;
case ("HG-CS-CE-MA") :
return "1d3aab5d-8ec4-4eb4-b78a-1b131ca241dc"
break;
case ("HG-CS-CE-DS") :
return "d7e9f70a-8e8d-42f7-951d-cd9cf8cea118"
break;
case ("HG-CS-CE-PP") :
return "ccf4bd83-fffd-4732-acff-012f656cbb51"
break;
case ("HG-CS-CE-PM") :
return "05f37d5f-aa4e-4ab7-a6b3-add2db506cb4"
break;
case ("HG-CS-CE-LC") :
return "1d3aab5d-8ec4-4eb4-b78a-1b131ca241dc"
break;
case ("HG-CS-CC") :
return "543da15c-b8fe-47cc-8a04-3f11ef79c3ee"
break;
case ("HG-CS-CL") :
return "552653d5-36fb-4672-9617-06eda4b7f215"
break;
case ("HG-CS-SD") :
return "8dfb06c2-ca92-499d-a036-adb96cb1fa54"
break;
case ("HG-CF-CU") :
return "750580d3-7e8e-400f-a234-9cf168792ea1"
break;
case ("HG-CF-FC-GL ") :
return "2e330088-7ea7-4476-9ce4-45ecd15d37c7"
break;
case ("HG-CF-FC-SU") :
return "19834214-2177-4144-9e9c-ffdba6d6ce02"
break;
case ("HG-CF-FC-CC") :
return "e415b7cb-ca4d-47cb-81bb-2525ba1a3b09"
break;
case ("HG-CF-HL-HS") :
return "be9d6b45-61ef-46bf-8f1d-40481e016d43"
break;
case ("HG-CF-HL-LE-DP") :
return "563796d6-b15a-4568-88ca-87342fb75247"
break;
case ("HG-CF-HL-SE") :
return "41950f64-a3b2-4896-9590-4368913f29f8"
break;
case ("HG-CF-CP") :
return "4b94205a-f3ac-4341-96c9-866c8e97868c"
break;
case ("HG-CF-RF") :
return "a9666e7b-25c1-4584-ab28-cadd772ddef7"
break;
case ("HG-CF-ST") :
return "750580d3-7e8e-400f-a234-9cf168792ea1"
break;
case ("HG-CE-IT-CS") :
return "d98ebf9f-e30b-4e37-9aba-a5a7282a3a85"
break;
case ("HG-CE-IT-BI") :
return "7703506a-f988-4921-9d8d-97f4dac6a95d"
break;
case ("HG-CE-IT-SO") :
return "ce638d93-9e9a-47b9-bc62-5b090cf18311"
break;
case ("HG-CE-IT-GO") :
return "01130ca3-4c51-45e3-bf10-0eb917323a63"
break;
case ("HG-CE-IT-PS") :
return "5bc3455e-7c40-4e1a-b209-6335dac99d78"
break;
case ("HG-CE-IT-IB") :
return "f3c4e4c3-3c65-44f9-8905-4a93c785227a"
break;
case ("HG-CE-CO") :
return "275fcbd8-678e-47cd-ab19-5ccd4aa5590b"
break;
case ("HG-CE-SC") :
return "687c9ded-3854-4437-a6c7-83da3150a859"
break;
case ("HG-CO-TOM-LDD") :
return "7762e472-b3a0-4d93-9979-52624a53b91a"
break;
case ("HG-CO-TOM-ND") :
return "8156fabf-8fe9-4773-8a05-1f7b6be009ce"
break;
case ("HG-CO-TOM-QY") :
return "b3895d2a-555a-43d1-b7c6-f23601999fff"
break;
case ("HG-CO-TOM-LMD") :
return "559662d0-2fe2-443b-abd9-7d3477b73c0a"
break;
case ("HINT-HBG") :
return "d75c2d8c-b332-4f37-999a-d786d36c60f0"
break;
case ("HG-HINT-SCS") :
return "59d04ed9-18d8-4f3d-b17e-9e5cb7d58a15"
break;
case ("HG-FC") :
return "e415b7cb-ca4d-47cb-81bb-2525ba1a3b09"
break;
case ("2. HTS") :
return "22427e58-d6c6-4d93-b00c-0f06280013e8"
break;
case ("H-AUT") :
return "d75c2d8c-b332-4f37-999a-d786d36c60f0"
break;
case ("HE") :
return "59d04ed9-18d8-4f3d-b17e-9e5cb7d58a15"
break;
case ("HE-GHV") :
return "4f5d24bd-982d-4401-861d-b803e7aefcd8"
break;
case ("HE-GM") :
return "59d04ed9-18d8-4f3d-b17e-9e5cb7d58a15"
break;
case ("HE-IT") :
return "4f5d24bd-982d-4401-861d-b803e7aefcd8"
break;
case ("Hermes Asia") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("Hermes Italia") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("Hermes MD") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("Hermes Russia") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("Hermes Shanghai") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("Hermes UK, Parcelnet") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("HE-SI") :
return "59d04ed9-18d8-4f3d-b17e-9e5cb7d58a15"
break;
case ("HF") :
return "3433ecab-e5b6-4af3-93a5-c50111862e84"
break;
case ("HG Dummy") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("HG Greater China") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("HG-GAM Nord") :
return "862be782-6a87-4744-8aad-39e26ddabb7f"
break;
case ("HG-GF-CEO") :
return "f453670f-5bce-4529-a6d6-3e617cad2d39"
break;
case ("HG-GF-CF") :
return "830296c8-394f-45c0-825a-817c5e27acbf"
break;
case ("HG-GF-CO") :
return "3e8ecf52-4d21-4973-99d9-34467437722a"
break;
case ("HG-GF-CS") :
return "82cd9354-e7c0-4389-ba2b-ce02c9194bcb"
break;
case ("HG-GF-HINT") :
return "d75c2d8c-b332-4f37-999a-d786d36c60f0"
break;
case ("HG-GHV") :
return "4f5d24bd-982d-4401-861d-b803e7aefcd8"
break;
case ("HG-OS (Operations Development)") :
return "559662d0-2fe2-443b-abd9-7d3477b73c0a"
break;
case ("HGS BVG") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("HG-SCS-BD (Business Development)") :
return "59d04ed9-18d8-4f3d-b17e-9e5cb7d58a15"
break;
case ("HG-SCS-DE (Supply Chain Solution / Germany)") :
return "59d04ed9-18d8-4f3d-b17e-9e5cb7d58a15"
break;
case ("HG-SK-SM (SAM+Amazon)") :
return "aa59deae-fc48-4586-9d3e-65c8c0d1c5e0"
break;
case ("HINT-HBG") :
return "59d04ed9-18d8-4f3d-b17e-9e5cb7d58a15"
break;
case ("HINT-IT") :
return "59d04ed9-18d8-4f3d-b17e-9e5cb7d58a15"
break;
case ("HINT-SCS") :
return "59d04ed9-18d8-4f3d-b17e-9e5cb7d58a15"
break;
case ("HNT") :
return "3433ecab-e5b6-4af3-93a5-c50111862e84"
break;
case ("HTK Hermes Technischer Kundendienst ") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("Legal - Musterverträge") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("LIEF") :
return "229e9ca8-3af6-42d0-b4a2-5488afd4ba27"
break;
case ("Otto") :
return "563796d6-b15a-4568-88ca-87342fb75247"
break;
case ("PL") :
return "3433ecab-e5b6-4af3-93a5-c50111862e84"
break;
case ("pM primeMail") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("Prüfinstitut Hansecontrol GmbH") :
return "3433ecab-e5b6-4af3-93a5-c50111862e84"
break;
case ("Send&Store GmbH") :
return "a4a6e8d3-1601-4cdb-97a7-1c731102a9bf"
break;
case ("Zitra GmbH") :
return "3433ecab-e5b6-4af3-93a5-c50111862e84"
break;
default:
d3.log.warn("Es konnte keine Organisationseinheit gefunden werden.")
return ""
break;
}
return "";
}
//Default Benutzer muss noch umgestellt werden.
def getCurrentUser (D3Interface d3, def name)
{
//Default IDP Id wenn es einen Benutzer in den Vertraegen gibt die nicht in der IDP gefunden werdne
def IDP_ID = ""
String API_KEY = "QkSq/0aXYN4/PUiLHrN/Rz7Q1TphBRO1z/khSj9dF/y4EVPcOdSiJc9Y1sdQ6er/YCFOUBC9VnFSJztr4RZSMQkqR4ccnXW8Q2jkSgsMxIQ=&_z_A0V5ayCSke2KhoCt7spaf51D1gKkv7GEL68yClMR1LitCKgBRs6h2IfHiGS9jcWUSClEjKReHWqw7IhHWUV8hewtyrYwk";
String baseUrl = "https://d3.dev.otc.hlg.de";
try {
//Auslesen der IDP Benutzer IDs
//def displayname = userShouldChanged(d3, name)
def displayname = name
def getUserIdUrl = new URL(baseUrl + "/identityprovider/scim/users?filter=DisplayName eq $displayname").openConnection();
getUserIdUrl.setRequestProperty("Authorization", "Bearer " + API_KEY);
getUserIdUrl.setRequestProperty("Accept", "application/json");
int getRC = getUserIdUrl.getResponseCode();
if(getRC == HttpURLConnection.HTTP_OK)
{
def response = getUserIdUrl.getInputStream().getText();
JSONObject jObjectLinks = (JSONObject) JSONValue.parse(response);
IDP_ID = jObjectLinks.get("id");
d3.log.info("IDP ID " + IDP_ID + " zu Name " + displayname + " ermittelt.")
}
}catch(Exception e) {
d3.log.error("###-> Returnwert Fehler Ermittlung IDPId " + e.getMessage())
}
return IDP_ID;
}
/** Erstellt einen neuen d.3 Partner um diesen in d.cm zu verwenden.
*
*/
def createPartnerFolder(D3Interface d3, PartnerData currentPartner)
{
d3.log.info("Erstellung Vertragspartner in d.cm");
def newPartner = d3.archive.newDocument();
newPartner.type = "A1LE4";
newPartner.status = Document.DocStatus.DOC_STAT_RELEASE;
//Generische Daten Dokumentarten
newPartner.field[2] = ""
newPartner.field[3] = ""
newPartner.field[4] = ""
newPartner.field[5] = ""
def currentPartnerNumber = currentPartner*.getLCMName()
def partnerName = currentPartner.getLCMName();
d3.log.info("currentPartnerNumber: " + currentPartnerNumber[0]);
def newPartnerNumber = (String) getNewPartnerNumber(d3);
while (newPartnerNumber.length() < 8)
{
newPartnerNumber = "0"+newPartnerNumber;
}
def newPartnerNumberWithPrafix = "DCM" + newPartnerNumber
//Partner ID
newPartner.field[6] = newPartnerNumberWithPrafix;
//Partner Name
newPartner.field[7] = currentPartnerNumber[0]
//Ansprechpartner Liste
newPartner.field[60][1] = ""
//Vorgangstyp des Partners
newPartner.field[64][1] = "CONTRACT"
//E-Mail
newPartner.field[65][1] = ""
//Postanschrift
newPartner.field[66][1] = currentPartner.getPartnerAdress()[0];
//Telefon
newPartner.field[67][1] = ""
try
{
def generatedPartner = d3.archive.importDocument(newPartner);
return partnerName + " (" + newPartnerNumberWithPrafix + ")";
}
catch(Exception ex)
{
d3.log.error("Fehler bei Partnererstellung: " +ex)
return ""
}
d3.log.info("Erstellung der Partnerakte abgeschlossen");
}
/* Holt eine Vertragsnummer intern eines Rahmenvertrags bei Anlage eines
* Einzelvertrags, sofern eine Verknuepfung zu einem Rahmenvertrag vorhanden
* ist.
*/
def getDCMRahmenvertragsnummer(D3Interface d3, String LCM_Rahmenvertragsnummer)
{
def LCM_Nummer = "LCM-" + LCM_Rahmenvertragsnummer
d3.log.info("Start getDCMRahmenvertragsnummer $LCM_Nummer")
String query = "SELECT dok_dat_feld_11 AS VertragsIntern FROM firmen_spezifisch WHERE kue_dokuart = ? AND dok_dat_feld_12 = ?";
GroovyRowResult resultRow = d3.sql.firstRow(query, ["A1LE2", LCM_Nummer]);
d3.log.info("resultRow: " + resultRow)
int number = 0;
if(resultRow != null && resultRow.containsKey("VertragsIntern" ) && resultRow.getProperty("VertragsIntern") != null) {
String VertInt = resultRow.getProperty("VertragsIntern");
return VertInt
}
d3.log.info("Ende getDCMRahmenvertragsnummer")
return ""
}
/** Funktion liesst eine bereitgestellte CSV Datei ein und setzt deren Werte formatiert in einer Map
*
*/
def readCSVPartnerFile(D3Interface d3)
{
def file = new File("D:\\d3\\d3server.prg\\ext_groovy\\Mapping_Partnerdaten.csv")
Map m1 = [:]
file.splitEachLine(";") {fields ->
//0 - LCM Nummer
//1 - Comarch Nummer
//2 - LCM Name
//3 - Comarch Name
//4 - LCM PLZ
//5 - LCM Ort
//6 - LCM Strasse
String name = fields[3]
name = name.replaceAll('\n','|').replaceAll('\r','').replaceAll("\"","'").replaceAll('\t','');
String DCM_name = fields[2]
DCM_name = DCM_name.replaceAll('\n','|').replaceAll('\r','').replaceAll("\"","'").replaceAll('\t','');
m1.put((String)fields[0], new PartnerData(name + " (" + fields[1] + ")", fields[6] + " , " + fields[4] + " " + fields[5] ,(String)fields[0], DCM_name ))
}
return m1
}
def getDCMJustifiedUsers(D3Interface d3)
{
d3.log.info("Start getDCMJustifiedUsers")
List IDP_IDs = new ArrayList();
String query = "SELECT [id] FROM [dbsCase_idp_entities] WHERE id_type = 'USER'";
def resultRows = d3.sql.executeAndGet( query );
resultRows?.each{ IDP_IDs.add(it.id) }
d3.log.info("Ende getDCMJustifiedUsers")
return IDP_IDs
}
def getNewPartnerNumber(D3Interface d3)
{
d3.log.info("Start getNewPartnerNumber")
def prefix = "DCM"
String query = "select max( dok_dat_feld_6 ) as docNumberCount from firmen_spezifisch where kue_dokuart = ? and (dok_dat_feld_6 like ?)";
d3.log.info("query: " + query)
GroovyRowResult resultRow = d3.sql.firstRow(query, ["A1LE4", (prefix + "%")]);
d3.log.info("resultRow: " + resultRow)
int number = 0;
if(resultRow != null && resultRow.containsKey("docNumberCount" ) && resultRow.getProperty("docNumberCount") != null) {
Integer result = Integer.parseInt(resultRow.getProperty("docNumberCount").substring( prefix.length()));
d3.log.info("result: " + result)
number = result != null ? result : 0;
d3.log.info("number: " + number)
}
number++;
d3.log.info("Ende getNewPartnerNumber")
return number
}
void logDefectTermsLCMNumber(String message) {
String messageWithTimestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(System.currentTimeMillis())) + " : ${message}"
if(!constanten.logFileDLCMNTerms.exists()) {
// check if directory exists
// check if directory "Log" exists
File logDir = new File(constanten.logDirPath)
if(!logDir.exists() || !logDir.isDirectory()) {
// create directory for log files
logDir.mkdirs()
}
constanten.logFileDLCMNTerms.createNewFile()
}
constanten.logFileDLCMNTerms.append(message + "\n")
}
void logDefectLCMNumber(String message) {
String messageWithTimestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(System.currentTimeMillis())) + " : ${message}"
if(!constanten.logFileDLCMN.exists()) {
// check if directory exists
// check if directory "Log" exists
File logDir = new File(constanten.logDirPath)
if(!logDir.exists() || !logDir.isDirectory()) {
// create directory for log files
logDir.mkdirs()
}
constanten.logFileDLCMN.createNewFile()
}
constanten.logFileDLCMN.append(",'" + message + "'")
}
/**
* Function to log given message to log file and to console
* @param message
*/
void log(String message) {
String messageWithTimestamp = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS").format(new Date(System.currentTimeMillis())) + " : ${message}"
if(!constanten.logFile.exists()) {
// check if directory exists
// check if directory "Log" exists
File logDir = new File(constanten.logDirPath)
if(!logDir.exists() || !logDir.isDirectory()) {
// create directory for log files
logDir.mkdirs()
}
constanten.logFile.createNewFile()
}
constanten.logFile.append(messageWithTimestamp + "\n")
}