2333 lines
102 KiB
Groovy
2333 lines
102 KiB
Groovy
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")
|
||
}
|
||
|