From 111f5018a773d0b9a9fdc20ef834d6238d63e448 Mon Sep 17 00:00:00 2001 From: vincenzofariello Date: Thu, 20 Jun 2024 10:24:11 +0200 Subject: [PATCH] DBCFX_RU_363 - Offerta Open Fiber FTTH (Business): Implement FASE3 richiesta di verifica codice sessione (N8/N9) --- .../del82/alterTableGnpCrmbDonorOut.sql | 5 +- .../schema/crm/SetEventiDBCFXRequest.xsd | 2 + .../crm/SetEventiDBCFXRequest_19062024.xsd | 42 ++++ .../crm/TIIOSetASCodMigrazioneDBCOnLine.xsd | 12 - .../TIIOSetASCodMigrazioneDBCOnLine_Del82.xsd | 69 ++++++ .../lib/Castor-DbcFX2CRM-Donor-Http.jar | Bin 43689 -> 44919 bytes .../APP-INF/lib/Castor-DbcFX2CRMReqEventi.jar | Bin 38778 -> 41171 bytes .../dao/db/hb/crm/AbstractGnpCrmDonorOut.java | 36 ++- .../gnp/dao/db/hb/crm/GnpCrmbDonorOut.hbm.xml | 3 + .../gnp/jms/QueueControllerFactory.java | 2 + .../gnp/manager/RequestManagerDonor82.java | 7 + .../src/it/valueteam/gnp/obj/CRMMap.java | 5 +- .../gnp/obj/jms/NotificationMessageIF.java | 4 + .../crm/AbstractCRMController.java | 207 ++++++++++++++---- .../systemcontroller/crm/CRMBController.java | 23 +- .../crm/CRMBFormatController.java | 50 ++++- .../dbss/DBSSFormatController.java | 8 +- .../formatcontroller/now/NowController.java | 11 +- .../crmdonor/CRM_TO_DBCFX_DONORFase2Del82.xsd | 71 ++++++ 19 files changed, 487 insertions(+), 70 deletions(-) create mode 100644 gnpdev/build/databinding/schema/crm/SetEventiDBCFXRequest_19062024.xsd create mode 100644 gnpdev/build/databinding/schema/crm/TIIOSetASCodMigrazioneDBCOnLine_Del82.xsd create mode 100644 gnpdev/wsdbcfx/wsdl/crmdonor/CRM_TO_DBCFX_DONORFase2Del82.xsd diff --git a/gnpapp/script/del82/alterTableGnpCrmbDonorOut.sql b/gnpapp/script/del82/alterTableGnpCrmbDonorOut.sql index b88040e8..742ad301 100644 --- a/gnpapp/script/del82/alterTableGnpCrmbDonorOut.sql +++ b/gnpapp/script/del82/alterTableGnpCrmbDonorOut.sql @@ -1,9 +1,12 @@ -ALTER TABLE GNP_CRMB_DONOR_OUT +ALTER TABLE ùGNP_CRMB_DONOR_OUT ADD "CODICE_RICHIESTA" NUMBER; ALTER TABLE GNP_CRMB_DONOR_OUT ADD "COR" VARCHAR2(12 BYTE); +ALTER TABLE GNP_CRMB_DONOR_OUT +ADD "COS" VARCHAR2(3 BYTE); + ALTER TABLE GNP_CRMB_DONOR_OUT ADD "CODICE_ORDINE_OLO" VARCHAR2(50 BYTE); diff --git a/gnpdev/build/databinding/schema/crm/SetEventiDBCFXRequest.xsd b/gnpdev/build/databinding/schema/crm/SetEventiDBCFXRequest.xsd index e4c55a5d..76849749 100644 --- a/gnpdev/build/databinding/schema/crm/SetEventiDBCFXRequest.xsd +++ b/gnpdev/build/databinding/schema/crm/SetEventiDBCFXRequest.xsd @@ -32,6 +32,8 @@ + + diff --git a/gnpdev/build/databinding/schema/crm/SetEventiDBCFXRequest_19062024.xsd b/gnpdev/build/databinding/schema/crm/SetEventiDBCFXRequest_19062024.xsd new file mode 100644 index 00000000..182c42ed --- /dev/null +++ b/gnpdev/build/databinding/schema/crm/SetEventiDBCFXRequest_19062024.xsd @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gnpdev/build/databinding/schema/crm/TIIOSetASCodMigrazioneDBCOnLine.xsd b/gnpdev/build/databinding/schema/crm/TIIOSetASCodMigrazioneDBCOnLine.xsd index e4562e47..cacada78 100644 --- a/gnpdev/build/databinding/schema/crm/TIIOSetASCodMigrazioneDBCOnLine.xsd +++ b/gnpdev/build/databinding/schema/crm/TIIOSetASCodMigrazioneDBCOnLine.xsd @@ -31,18 +31,6 @@ - - - - - - - - - - - - diff --git a/gnpdev/build/databinding/schema/crm/TIIOSetASCodMigrazioneDBCOnLine_Del82.xsd b/gnpdev/build/databinding/schema/crm/TIIOSetASCodMigrazioneDBCOnLine_Del82.xsd new file mode 100644 index 00000000..447e0dbb --- /dev/null +++ b/gnpdev/build/databinding/schema/crm/TIIOSetASCodMigrazioneDBCOnLine_Del82.xsd @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/gnpdev/dbcfx/ear/res/APP-INF/lib/Castor-DbcFX2CRM-Donor-Http.jar b/gnpdev/dbcfx/ear/res/APP-INF/lib/Castor-DbcFX2CRM-Donor-Http.jar index c8c5648a2fc77afccc35eab52a62b581c6ab2cba..93dab39ee4a9154bf3cc698aa4383e97f1947c44 100644 GIT binary patch delta 18749 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 GkWK*R7rMs) delta 17718 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 Z0_!|GR6U*$hY^ku4h1%))rJ0M{6F&)H~9bn delta 6867 zcmZX3cOaYH`+n@bN9|doVs9F=W~rL7)!tQ6wTjr3nlTz9s2U{{v1+tM?M=m2q@^}B zs;cc*@xGs5e{cRdSFY!}uXE1*BstH0XQCbZv`n@B3IU#|^%V5k`jvyaZ}kBA37)OX3n#VaZ&Abu86OAcCz+^~c2p{p?*Z0RW)L z001b!u;ip*{mCTI$}DYfW)sSo$Jfod`@SM@RjJb$(gKJKRJF`Vv5I6#Qib9YJB7Q) z%@7_(O%ClBsWW7)z1_q>2*B871AcyL*>?9j1GO zau1(*c`(Gi8RM#kn-*Z14&|WB5P}S{CZ+{EunDXC73Pvin*~T+@M3kzbDcRkE1taD zKz*2)5Oo=RIU;knB}MhRn_E0~f_Rn9Xspo0Y!$^ORC-M3@jwQ>`yegpyt9n3Xp#y& z8D83r&O5aA9ZfqMv#wkZl6ZWwGoCRBU9UZM<&sHfMR*G_&7KP9*+i#m-HG)b)6w>K z2tMNa6squG^H9FSg}G$eOP^yJtr$0v1}5)xEtmq!!?Es{6-?}#nOBOI&ESX7Q{38# zTjuv(g}#jwb(?XZ@1`5t^lFsNmb<@gMJ#+86g&+qE#>A`~vP2YcG3NVDbIpvfYiWZ-( zAInuU5a38SbKZYk@Vt6u<>BjRq%QhE200No;agD44}7#=bj|$~3-6lY-RDo8WSK`@ zYmuSDsU1W-K`LtCkfN$SPS#Exx;xki*sUpVl{w$!w!j*wtV}0}$(XiduJZCX@WQWz zTpKa_MGOp~-YVN;^Qs;qiKh3jBhr_>ekIfJZ+pX%hWyKOpZVY2F+- zui!nDB&$US)%nT&mPyXDY;bBDnMqsK*vtMk`In(Nxf^FyS#ze-R7C88#ckZ^*-=jmF4LxN@LlqMaLqREQQjkCl{jin%!@25K?A^xhZRDH20v*0p zp@#Sqh#A2qW)xosQ=O&@girMPrkHCu%fa=;iNtk!kz5mc&Sbevu`pL(VtBnH7zUMt z4-$+2ux-QM{@wKY<(>+Q-@91HB!2JHx4}6AEQy^9-lPYPnb*{)LZe;2_o_Ep!n<7(hFUjdh#z%!#$Y^WaRoBVX`L zd^wBct?G&N@?7*TWCk4>f$sHPNB>1iT7~a_dqt~(8W6K|3IDugOU9!cg-PbbefL)S;zoxU{e3e12YH( zFsW~4*Lq+ti|+z&T1Dhf3EbR*oDc~}yKqX$xaUqfZc-_glNHkta& zW1Om@=f&7}Oj4-k3B69-RnWFttuKhb#!{yAwWPN8#O8KYMC$SNpd!RKr5(4A?A9Zs z22rZw9_+QpKdQe*NOhpx9nlWGLG!UrglIhkU8Z?#%26xDCR4k>o}h_yTR5^)5oypa z9tc)*UT(PH2kW)3Mk`m9}^Gkn->&iQ3S8yKQ=;f;VeVd6xNG&P{)I^wG&gl9|jNM5-65 zlzNm!v8h2dbq7>oV2@{9Mx+*OCPRW20##@`OL11r#6GHk+AegXvYpVXjzVAUw&{>_ zf#8HeizFnSBJw8grXE5{)45Uu&BTtjW&_6mez(Bg{9B$dVCwFDlEGbBe7<1vgW?v^ zQESLG^vZ*+AES5Q>h9e$2yao20{!rk#sr=y1UTRwH|Rv>pN9a#i-&-s5n{rNbDN)ijx`Vq0BFJn0CXm0bDu^ZF3K4Nc{?C`?e$*Z^^`qBeVZpl$;xaDTof7ILpyhT z?AY!6X_Si_X5E1e99$g4*j(e_1Pj93YP7T}1;mQ3W95}#eJu4)276=hp`kP~m8Ge< zA3eDbork{<559I89&Fw3?9Kula_8WL3f4M6u!954q@g;V0qj^pUKP2 zICC zk}9QJp&Rc2H`<(gq?v8}ZBx=4=4v`)WLOxuiu3%oYV8_v;D)CatPf`QGI8V#XB~QM zm>2zQ>(Uo%FxJeA4>|7M{;_qELk9J?%}qa^+kZpGE~_tC44vLDBx9EoC93c|nNEVv z?u#%hLTuw%etk%S&h5j=2w3&9Kxg1DW6OhAj<} z;U4NYjIfe#+C@~TeOnJzpzIqPcp63}7J-Gmpr*x76x9>0wx(N{E;DJpJ-qiC=QAUQ zo0D5#@mT>;G;@Lv(Qz6)^j`SfD;@4mVD-~pK~;AfQDa2m2*NE@sv@e#r=cqYFL6^yrpkJf#7Rg&jq z+F8Y4c=|~v50-!6YYK^(5*j7^IgEMTY{TPO#pTTHT%aaEN|oFJ;^v~OIE>plc1b4? zkZ9ep{V-4S)g?ej!AXK!r7z}iJ*eKwGX^Ttkmjx7Cu+?2)H0hZmgwh*#LM!yF=Jhy zpBajFo)z8%t%}xy0>wm+-?r2m3UYJ1-)z=1VyNeb`9y~KDkblxLV`MK17EZCeGNGD zmQ^~%F*FSN6*Y&-?x=%{4ki9PTU2rj*!k^GyeY=j^E^;ni+0t;NO<-}x|OQ->dXoB zcBAI2ks&msyk^UDMqehoWL!P+*`cdXjJQA-8A@AOE~@ZEEV@%jcxI zDCPDQq*)%VFtfmnzN4RDWI59o$8({(v!?d>v^nxDd6_h&d+dCAn5Q%!m!oJt4y+QK zeWAr$*HoQK(AMLl5>w6BS(wpVc@f8C!Z_X;RA%9yCcw)rFU2Tychn=`kgLOdH^$S;Mz){do zJTAqPt;;EfFWW9UBS_1OP=Sws;x0Hr@Ab9u>Hv$WcrxB&t3Zw~Q>c)b(QDDQ>V8E@ z5PH)h#pmu>arR5YWX8VEdv~NlN4~?}lzqT3i!# z79LJJSDP+HUoP?{dF!L~nZgsk*h)ky{~hxza=1%eCs4=HHzTE-3?BIg+HEZ~Vo)2j zgH!bIZn8=VNv|&!T$p15Pw&*c_mIKyRBpoXHZkfw`SKWgLoVKMrei)IbM!SuxB_yp z6)@wTKP7LF$QTu#mE^I=a_j3VLwJ+Gnx%Xr$)Z}3|9-d37%->d2Bip2Ae{bDN2^4F z!#XHyC&(J|5s~gQyzqM-${b3ga1D^Td)vhfWO(+gTx+4zK>M}!F@3Sw*%w&BP;|vU zf_P!KibTb*|FuzO5P6|Y^RLt_zp+;!w^`k1^y?E9@9{nYYt6L2n<&;eeNt769oRmS z4wCJSo#|2cTbVN*D!abh?~R4(i>q9Yy21lyR)IqD%$3Ky|8jV^$t*=zS$yxVSZ+*cgF00Yh%Jf6QEsI?yU!?!T z;tHeI9LMz%)TCFH&!Z>)6DG~;^lK$<6xXm87bdycKhM968T1s3IuYL*@Ieb1 zR1}Mv5#Q?ZTk|WRpc4R5XuZ_ZR1RRXFA6&Ibgv8WCN#{0!IxG0%Bo3h83Fso+{2T8HoW4?A3~$Qnll=-Swx zhFx^gG-iQSyFJtD{|)JUgc8i^uwc+&4;o9I~NS`cmTIxCxT(kzLjV zWv1>ea~UX8x1pQtK!L7wSnUiYQ=i5tzjUSsii@d}*N{zuKOe6wY^cCTI!9pI+Ohhv zn?Or`Neu!2JGPQ_PoC&$CSp{*aTj`wv?0;CHcv94?bg9eXi!Rs8p(9&A?1%;`daR~ zIMyPbEmDOJm4N_kg>K7npT!vPSD-81?wz}Pp>@z~ijpBvg3T)TI-O!>!ycqA*R_MM^|Y#81%;QEHuG!6 z?3>V%Pt`lOg*OXnYjmBc2MkN9H!}<~E7MUdT|F8%sH8REL)`-YD9~p`aKWGxCY^2z z-$@E+h^}?(4_Y;n7Jpj{$4fUg*Pm%u?PmiQZ@EnN_jtzmgbf*z*UV+GPqPZRpiKBI z%bKUT>V+(kezp`9c{9}YH!aIcP@gxH8=$JJ{oryr&y4H=aD@ztZ_;vxY0~ypnM#9t zVs+();Boos!{h8AnYpTAyPK1Eo>|RN+hEgbnaN4dn zDg6B;3*NhEjlGJxC#?y7B)jG7!DZ5k6cYm9y({Bg+#B}=xAhQ33j>;N2PdxgIY%Zl zzt+s&M!c%T;LVb>>d$om>$c}d{SIEv+9=+c>j{}90F{OG-O+LWQSP+E(R?nH!M_^ez->R@AC$!RzNwa>u^wTR<}km-(D)W% zM9|%YC${6NP&$+ViFJ^m^ADVVaxadqZv0J$2qdd%oiBdBWglp;oK`2Y?=g>4qwXyd zYV?hm^5`kY09%pE#%4jlwK%rWyOQ+7%?31CdzSMq7S7Ky-8bZoC8ZG`-n0JzMI+E2&XG^Z0YuZ=Ej8FVUPgP-oF-)L%5=>O&e>pVCp`8gE!A{+#Z%B;fB!G z%#rMQ0q144A6MaJwH;UF-F6yhq=orOxz%dtJ^J+a?+> z6^D0-`xUnsQG3Ou$B5!x6j(Pj3||%j0DuJ8Sb`d~GDU%;LzGtCzx_9*H&k*`g_wMn zf-<)*(qmTfR)O2>r{cr43fA|92@P{?-f}EEyx)4o1sOhyv8m;129K;ry4X>AO##(M z6K1&!M>%rn1?+4`rP9H-OwyCX2X9(zRrkcu&Zmrv@s!H8+^aeG@@4O4sj8{PWLk|^ zHar+#^0%u^IyWTU@Vn{eBwT+aJ(pwH=xO5pA>Eg$HD8Pd-W*mQGRv;ctSdD{MYy$IJzO95YoTcj{y>r%s(sqYB>Z>^X0vIUh2 zD)_wSb3JdO-}xu@e0&iuOnV+63HwIN3{y-cy)@EGWx}RofQ5sUVdejD&F38C4`%=i z$)mp1DWoxBA245VCi}!G6IB!)Pwn{%%*+zG#9((aNK?Trwj1P|W6!V#|LxV1^2^FyaFJ|nVmkhn)#V!`}@9)=n<4NJK#kfXZe4~h;lEB&u2+0Ki P0)SuC0DyDUAJzW>D>?*l diff --git a/gnpdev/dbcfx/src/it/valueteam/gnp/dao/db/hb/crm/AbstractGnpCrmDonorOut.java b/gnpdev/dbcfx/src/it/valueteam/gnp/dao/db/hb/crm/AbstractGnpCrmDonorOut.java index 2c6f60f4..6dc8f676 100644 --- a/gnpdev/dbcfx/src/it/valueteam/gnp/dao/db/hb/crm/AbstractGnpCrmDonorOut.java +++ b/gnpdev/dbcfx/src/it/valueteam/gnp/dao/db/hb/crm/AbstractGnpCrmDonorOut.java @@ -11,9 +11,10 @@ public abstract class AbstractGnpCrmDonorOut implements java.io.Serializable { private String tipoChiamata; private Date dataInvio; - // DBCFX_RU_363 - Offerta Open Fiber FTTH (Business): Aggiunti 11 nuovi campi per CRMB + // DBCFX_RU_363 - Offerta Open Fiber FTTH (Del.82 Business): Aggiunti 12 nuovi campi per CRMB private Long codiceRichiesta; private String cor; + private String cos; private String codOLORecipient; private String codOrdineOLO; private String dn1; @@ -43,8 +44,30 @@ public abstract class AbstractGnpCrmDonorOut implements java.io.Serializable { this.tipoChiamata = tipoChiamata; this.dataInvio = dataInvio; } - - public Long getUniqueId() { + + public AbstractGnpCrmDonorOut(Long uniqueId, Long daScodare, String cowDonating, String dn, String codiceSessione, String tipoChiamata, Date dataInvio, Long codiceRichiesta, String cor, String cos, String codOLORecipient, String codOrdineOLO, String dn1, String dn2, String dn3, String dn4, String dn5, String dn6, String dn7) { + this.uniqueId = uniqueId; + this.daScodare = daScodare; + this.cowDonating = cowDonating; + this.dn = dn; + this.codiceSessione = codiceSessione; + this.tipoChiamata = tipoChiamata; + this.dataInvio = dataInvio; + this.codiceRichiesta = codiceRichiesta; + this.cor = cor; + this.cos = cos; + this.codOLORecipient = codOLORecipient; + this.codOrdineOLO = codOrdineOLO; + this.dn1 = dn1; + this.dn2 = dn2; + this.dn3 = dn3; + this.dn4 = dn4; + this.dn5 = dn5; + this.dn6 = dn6; + this.dn7 = dn7; + } + + public Long getUniqueId() { return this.uniqueId; } @@ -110,6 +133,13 @@ public abstract class AbstractGnpCrmDonorOut implements java.io.Serializable { this.cor = cor; } + public String getCos() { + return cos; + } + + public void setCos(String cos) { + this.cos = cos; + } public String getCodOLORecipient() { return codOLORecipient; diff --git a/gnpdev/dbcfx/src/it/valueteam/gnp/dao/db/hb/crm/GnpCrmbDonorOut.hbm.xml b/gnpdev/dbcfx/src/it/valueteam/gnp/dao/db/hb/crm/GnpCrmbDonorOut.hbm.xml index 8e21706b..e9ee861c 100644 --- a/gnpdev/dbcfx/src/it/valueteam/gnp/dao/db/hb/crm/GnpCrmbDonorOut.hbm.xml +++ b/gnpdev/dbcfx/src/it/valueteam/gnp/dao/db/hb/crm/GnpCrmbDonorOut.hbm.xml @@ -35,6 +35,9 @@ + + + diff --git a/gnpdev/dbcfx/src/it/valueteam/gnp/jms/QueueControllerFactory.java b/gnpdev/dbcfx/src/it/valueteam/gnp/jms/QueueControllerFactory.java index 55dcd737..c5783de2 100644 --- a/gnpdev/dbcfx/src/it/valueteam/gnp/jms/QueueControllerFactory.java +++ b/gnpdev/dbcfx/src/it/valueteam/gnp/jms/QueueControllerFactory.java @@ -22,6 +22,8 @@ public class QueueControllerFactory { return JNDINames.QUEUE_NAME_CRMB_IN; case NotificationMessageIF.NotificationType_CRMB_NOTIFICA_OUT: case NotificationMessageIF.NotificationType_CRMB_DONOR_OUT: + case NotificationMessageIF.NotificationType_CRMB_ESITO_VERIFICA_DONOR_OUT_82: + case NotificationMessageIF.NotificationType_CRMB_DONOR_OUT_82: return JNDINames.QUEUE_NAME_CRMB_OUT; case NotificationMessageIF.NotificationType_CRMB_VERIFICA_CS: return JNDINames.QUEUE_NAME_CRMB_OUT; diff --git a/gnpdev/dbcfx/src/it/valueteam/gnp/manager/RequestManagerDonor82.java b/gnpdev/dbcfx/src/it/valueteam/gnp/manager/RequestManagerDonor82.java index 05e4c924..493f826d 100644 --- a/gnpdev/dbcfx/src/it/valueteam/gnp/manager/RequestManagerDonor82.java +++ b/gnpdev/dbcfx/src/it/valueteam/gnp/manager/RequestManagerDonor82.java @@ -17,6 +17,7 @@ import it.valueteam.gnp.obj.ProcessMapper; import it.valueteam.gnp.obj.StatoRichiestaDon; import it.valueteam.gnp.systemcontroller.ControllerFactory; import it.valueteam.gnp.systemcontroller.SystemControllerIF; +import it.valueteam.gnp.systemcontroller.crm.CRMBController; import it.valueteam.gnp.systemcontroller.crm.SistemaCrmIF; import it.valueteam.gnp.systemcontroller.formatcontroller.dbss.DBSSController; import it.valueteam.gnp.systemcontroller.formatcontroller.now.NowController; @@ -722,6 +723,12 @@ public class RequestManagerDonor82 { dbssController.invioNotificaD82(dbssDonorOut); } + public static void callNotificaFase3CRMB(ProcessLogger log, GnpRichiesteDonor82 richiesta) throws Exception { + CRMBController controller = CRMBController.getInstance(); + GnpCrmNotifyDonorOut crmbNotifyDonorOut = controller.creaNotificaEsitoN9(richiesta); + controller.invioNotificaEsitoD82(crmbNotifyDonorOut); + } + private static boolean isUtenzaDBSS(String piattaforma) { return "D".equalsIgnoreCase(piattaforma); } diff --git a/gnpdev/dbcfx/src/it/valueteam/gnp/obj/CRMMap.java b/gnpdev/dbcfx/src/it/valueteam/gnp/obj/CRMMap.java index 66711bd3..1371b38d 100644 --- a/gnpdev/dbcfx/src/it/valueteam/gnp/obj/CRMMap.java +++ b/gnpdev/dbcfx/src/it/valueteam/gnp/obj/CRMMap.java @@ -117,7 +117,10 @@ public abstract class CRMMap { public static final String DNAGG_OK = "OK"; public static final String DNAGG_KO = "KO"; - private CRMMap() { + // DBCFX_RU_363 - Offerta Open Fiber FTTH (Business): Implement FASE 3 + public static final String TIPOEVENTO_ESITO_VERIFICA_CODICE_SESSIONE = "FASE3DEL82"; + + private CRMMap() { } public static CRMMapInfo getInfoNotifica(int tipoNotifica) throws Exception{ diff --git a/gnpdev/dbcfx/src/it/valueteam/gnp/obj/jms/NotificationMessageIF.java b/gnpdev/dbcfx/src/it/valueteam/gnp/obj/jms/NotificationMessageIF.java index 44997b7f..63ef6e81 100644 --- a/gnpdev/dbcfx/src/it/valueteam/gnp/obj/jms/NotificationMessageIF.java +++ b/gnpdev/dbcfx/src/it/valueteam/gnp/obj/jms/NotificationMessageIF.java @@ -32,10 +32,14 @@ public interface NotificationMessageIF { public static final int NotificationType_CRMB_VERIFICA_CS= 10; public static final int NotificationType_CRMB_ESITO_VERIFICA_CS= 13; public static final int NotificationType_CRMB_DONOR_OUT = 14; + // 152248 (227248) public static final int NotificationType_CRMB_ESPLETAMENTO_DONATING=65; public static final int NotificationType_CRMB_VERIFICA_CS_103 = 66; + public static final int NotificationType_CRMB_ESITO_VERIFICA_DONOR_OUT_82 = 16; + public static final int NotificationType_CRMB_DONOR_OUT_82 = 17; + public static final int SystemProvider_CRMA = SystemControllerIF.SystemProvider_CRMA; public static final int NotificationType_CRMA_ATTIVAZIONE_IN = 6; public static final int NotificationType_CRMA_NOTIFICA_OUT = 7; diff --git a/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/crm/AbstractCRMController.java b/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/crm/AbstractCRMController.java index a2d32107..9b91eabd 100644 --- a/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/crm/AbstractCRMController.java +++ b/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/crm/AbstractCRMController.java @@ -650,54 +650,55 @@ public abstract class AbstractCRMController extends SystemController implements log.write("0004", this.getVersione() + " TIPO_NOTIFICA = [" + messaggio.getNotificationType() + "]"); try { switch (notificationtype) { - case NotificationMessageIF.NotificationType_CRMB_ESPLETAMENTO_DONATING: + case NotificationMessageIF.NotificationType_CRMB_ESPLETAMENTO_DONATING: processaEspletamentoDonating(messaggio); break; - case NotificationMessageIF.NotificationType_CRMR_ATTIVAZIONE_IN: - case NotificationMessageIF.NotificationType_CRMB_ATTIVAZIONE_IN: - case NotificationMessageIF.NotificationType_CRMA_ATTIVAZIONE_IN: + case NotificationMessageIF.NotificationType_CRMR_ATTIVAZIONE_IN: + case NotificationMessageIF.NotificationType_CRMB_ATTIVAZIONE_IN: + case NotificationMessageIF.NotificationType_CRMA_ATTIVAZIONE_IN: + // acquisisce la rchiesta proveniente da CRM + // inserendo nella gnp_richiesta_rec + processaRichiesta(messaggio); + break; - // acquisisce la rchiesta proveniente da CRM - // inserendo nella gnp_richiesta_rec - processaRichiesta(messaggio); - break; - case NotificationMessageIF.NotificationType_CRMR_ESPLETAMNETO_HZ_NIP: - processaRichiestaHZ(messaggio); - break; - case NotificationMessageIF.NotificationType_CRMR_NOTIFICA_OUT: - case NotificationMessageIF.NotificationType_CRMB_NOTIFICA_OUT: - case NotificationMessageIF.NotificationType_CRMA_NOTIFICA_OUT: + case NotificationMessageIF.NotificationType_CRMR_ESPLETAMNETO_HZ_NIP: + processaRichiestaHZ(messaggio); + break; - // notifica la risposta dell'evento ricevuto - inviaNotificaCRM(messaggio); - break; + case NotificationMessageIF.NotificationType_CRMR_NOTIFICA_OUT: + case NotificationMessageIF.NotificationType_CRMB_NOTIFICA_OUT: + case NotificationMessageIF.NotificationType_CRMA_NOTIFICA_OUT: + // notifica la risposta dell'evento ricevuto + inviaNotificaCRM(messaggio); + break; - case NotificationMessageIF.NotificationType_CRMA_VERIFICA_CS: - case NotificationMessageIF.NotificationType_CRMB_VERIFICA_CS: - case NotificationMessageIF.NotificationType_CRMR_VERIFICA_CS: + case NotificationMessageIF.NotificationType_CRMA_VERIFICA_CS: + case NotificationMessageIF.NotificationType_CRMB_VERIFICA_CS: + case NotificationMessageIF.NotificationType_CRMR_VERIFICA_CS: + // crea il tracciato di verifca codice segreto donor e lo invia + inviaVerificaCS(messaggio); + break; - // crea il tracciato di verifca codice segreto donor e lo invia - inviaVerificaCS(messaggio); - break; + case NotificationMessageIF.NotificationType_CRMA_ESITO_VERIFICA_CS: + case NotificationMessageIF.NotificationType_CRMB_ESITO_VERIFICA_CS: + case NotificationMessageIF.NotificationType_CRMR_ESITO_VERIFICA_CS: + // crea il tracciato di verifca codice segreto donor e lo invia + elaboraEsitoVerificaCs(messaggio); + break; - case NotificationMessageIF.NotificationType_CRMA_ESITO_VERIFICA_CS: - case NotificationMessageIF.NotificationType_CRMB_ESITO_VERIFICA_CS: - case NotificationMessageIF.NotificationType_CRMR_ESITO_VERIFICA_CS: + case NotificationMessageIF.NotificationType_CRMB_DONOR_OUT: + case NotificationMessageIF.NotificationType_CRMR_DONOR_OUT: + inviaNotificaDonorOut(messaggio); + break; - // crea il tracciato di verifca codice segreto donor e lo invia - elaboraEsitoVerificaCs(messaggio); - break; + case NotificationMessageIF.NotificationType_CRMB_ESITO_VERIFICA_DONOR_OUT_82: + inviaNotificaEsitoDonorOut82(messaggio); + break; - case NotificationMessageIF.NotificationType_CRMB_DONOR_OUT: - case NotificationMessageIF.NotificationType_CRMR_DONOR_OUT: - inviaNotificaDonorOut(messaggio); - break; - - default: - log.write("9999", "NOTIFICATION TYPE SCONOSCIUTO" + Func.getFieldDescription(messaggio)); - - break; + default: + log.write("9999", "NOTIFICATION TYPE SCONOSCIUTO" + Func.getFieldDescription(messaggio)); + break; } // Log 0006 (N) = 'FINE TRATTAMENTO MESSAGGIO' @@ -1111,8 +1112,9 @@ public abstract class AbstractCRMController extends SystemController implements /** * Elabora le richieste di Del 35 MultiDonor (FWA ed FFTTX) * - * @param uniqueId String - * @return NotificationMessage + * @param crmInRec + * @param processo + * @throws Exception */ private void elaboraDel35MultiDonor(AbstractGnpCrmInRec crmInRec, String processo) throws Exception { log.write("9999", "START elaboraDel35MultiDonor"); @@ -2910,5 +2912,128 @@ public abstract class AbstractCRMController extends SystemController implements } return toRet; } - + + public void invioNotificaEsitoD82(GnpCrmNotifyDonorOut notifica) throws Exception { + log.write("9999", "invioNotifica - codice richiesta: " + notifica.getCodiceRichiesta() + " - tipo evento: " + notifica.getTipoEvento() + " - unique id: " + notifica.getUniqueId()); + NotificationMessage message = creaNotificaEsitoDonorOut82(notifica.getUniqueId()); + inserisciNotificaInCoda(message); + } + + public NotificationMessage creaNotificaEsitoDonorOut82(Long uniqueId) { + UniqueIdNotificationMessage messaggio = new UniqueIdNotificationMessage(); + messaggio.setUnique_id(uniqueId); + messaggio.setNotificationType(NotificationMessageIF.NotificationType_CRMB_ESITO_VERIFICA_DONOR_OUT_82); + messaggio.setSystemProvider(NotificationMessageIF.SystemProvider_CRMB); + return messaggio; + } + + /** + * DBCFX_RU_363 - Offerta Open Fiber FTTH (Business) - FASE3 Verifica del codice sessione da NOW (N8), ed uscita verso CRMB con l'esito (N9) + * Il metodo inviaNotificaDonorOut82 invia le notifiche N9 da DBCFX a CRMB tramite il metodo per le Notifiche Processo di Migrazione (Uscite) + * @param messaggio + * @throws Exception + */ + protected void inviaNotificaEsitoDonorOut82(NotificationMessage messaggio) throws Exception { + log.write("9999", "inviaNotificaEsitoDonorOut82"); + + GnpCrmNotifyDonorOutDAO dao = new GnpCrmNotifyDonorOutDAO(); + Long uniqueId = ((UniqueIdNotificationMessage) messaggio).getUnique_id(); + log.write("9999", "Ricerca GnpCrmNotifyDonorOut con UNIQUE_ID [" + uniqueId + "]"); + GnpCrmNotifyDonorOut gnpCrmNotifyDonorOut = new GnpCrmNotifyDonorOutDAO().findById(uniqueId); + + int daScodare = gnpCrmNotifyDonorOut.getDaScodare().intValue(); + switch (daScodare) { + case 0: + case 3: + // se non ci sono record da aggiornare il messaggio e' gia' stato scodato e dunque viene solamente loggato l'id_richiesta + log.write("9999", "RICHIESTA VERIFICA CODICE SESSIONE DEL.82 FASE3 GIA' SCODATA :[" + Func.getFieldDescription(gnpCrmNotifyDonorOut) + "]"); + break; + case 1: + + GnpNowD82RichiesteOutDAO nowDonorOutDAO = new GnpNowD82RichiesteOutDAO(); + GnpNowD82RichiesteOut nowDonorOut = null; + nowDonorOut = nowDonorOutDAO.findByIdRichiesta82(gnpCrmNotifyDonorOut.getCodiceRichiesta()); + + gnpCrmNotifyDonorOut.setDaScodare((long) 0); + + gnpCrmNotifyDonorOut.setDataInvioMessaggio(new java.util.Date()); + dao.merge(gnpCrmNotifyDonorOut); + + SetEventiDBCFXRequest eventReq = new SetEventiDBCFXRequest(); + Corpo corpo = new Corpo(); + + corpo.setDirectoryNumber(gnpCrmNotifyDonorOut.getDirectoryNumber()); + corpo.setCodiceRichiesta(gnpCrmNotifyDonorOut.getCodiceSessione()); + corpo.setNativoTLC(gnpCrmNotifyDonorOut.getNativoTlc()); + corpo.setTipoEvento(gnpCrmNotifyDonorOut.getTipoEvento()); + corpo.setAmbito(gnpCrmNotifyDonorOut.getAmbito()); + corpo.setIdentificativoOperatoreDonating(gnpCrmNotifyDonorOut.getIdOperatoreDonating()); + + if (!Func.isNull(gnpCrmNotifyDonorOut.getCodFiscalePartitaIva())) + corpo.setCognomeCliente(gnpCrmNotifyDonorOut.getCodFiscalePartitaIva()); + else if(!Func.isNull(gnpCrmNotifyDonorOut.getCognomeCliente())) + corpo.setCognomeCliente(gnpCrmNotifyDonorOut.getCognomeCliente()); + + // Data/ora di invio OK/KO Fase 3 + if (gnpCrmNotifyDonorOut.getDataInvioMessaggio() != null) { + corpo.setDataInvioMessaggio(new SimpleDateFormat(dimStrFormat).format(new Date())); + } + + corpo.setCodiceOrdineOLO(gnpCrmNotifyDonorOut.getCodiceOrdineOlo()); + + //Per Del.82 non gestiamo le Note provenienti da NOW, per Del.274 in assenza delle note si mappa il valore getNOW_CAMPO_NOTE_DEFAULT_SR_CRMB + //corpo.setNote(Resources.getNOW_CAMPO_NOTE_DEFAULT_SR_CRMB()); + + corpo.setFlagNP(gnpCrmNotifyDonorOut.getFlagNp()); + + // Data/ora ricezione notifica di verifica Codice Sessione (N8) preso da GnpNowD82RichiesteOut + corpo.setDataOrdine(new SimpleDateFormat(dimStrFormat).format(nowDonorOut.getDataCreazione())); + + if (gnpCrmNotifyDonorOut.getAggiuntivi() != null) { + String[] aggiuntivi = gnpCrmNotifyDonorOut.getAggiuntivi().split(";"); + ListaAggiuntivi tagDnAgg = new ListaAggiuntivi(); + for (String singleDn : aggiuntivi) { + ListaAggiuntiviItem numero = new ListaAggiuntiviItem(); + numero.setAggiuntivo(singleDn); + tagDnAgg.addListaAggiuntiviItem(numero); + } + corpo.setListaAggiuntivi(tagDnAgg); + } + + // I dati di COS, COR e COW non vengono passati a CRMB, poiche' mancano nell'interfaccia esposta a DBCFX + // corpo.setCodiceSegreto(gnpCrmNotifyDonorOut.getCodiceSegreto()); + // In corpo non abbiamo i campi per gnpCrmNotifyDonorOut.getCow() e gnpCrmNotifyDonorOut.getCor() + + corpo.setOAO(gnpCrmNotifyDonorOut.getCodiceOloRecipient()); + + // Set Esito (OK/KO) e Motivo Rifiuto in caso di KO nello scenario gnpCrmNotifyDonorOut.getTipoEvento() == "FASE3DEL82" and gnpCrmNotifyDonorOut.getAmbito() == "USCITANP_DEL82" + corpo.setEsito_Fase3(nowDonorOut.getEsito()); + corpo.setCausale_Fase3(nowDonorOut.getMotivazione()); + + eventReq.setCorpo(corpo); + String xml = CrmXAO.getXmlFromSetEvDBCFXReq(eventReq); + + log.write("9999", "xml: " + xml); + + CRMCommunicationManager crmClient; + if (CRMMap.PIATTAFORMA_B.equalsIgnoreCase(gnpCrmNotifyDonorOut.getSistComp())) { + crmClient = new CRMCommunicationManager("CRMB", "NOTIFICHE"); + } else { + crmClient = new CRMCommunicationManager("CRMR", "NOTIFICHE"); + } + String respXml = crmClient.sendFileMultipart(xml); + + SetEventiDBCFXResponse respObj = (SetEventiDBCFXResponse) XmlUtility + .getCastorXmlObjectFromXmlString(SetEventiDBCFXResponse.class, respXml, true); + String codiceEsito = respObj.getCodiceEsito(); + log.write("9999", + "codice esito: " + codiceEsito + " - id richiesta: " + gnpCrmNotifyDonorOut.getCodiceRichiesta()); + if (!codiceEsito.equals("0")) { + String descrizione = respObj.getDescrizioneEsito(); + throw new Exception("esito: " + codiceEsito + " - descrizione: " + descrizione + " - id richiesta: " + + gnpCrmNotifyDonorOut.getCodiceRichiesta()); + } + log.write("9999", "inviaNotificaEsitoDonorOut82 - FINE"); + } + } } diff --git a/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/crm/CRMBController.java b/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/crm/CRMBController.java index 3c4730b0..623fd28c 100644 --- a/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/crm/CRMBController.java +++ b/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/crm/CRMBController.java @@ -6,7 +6,6 @@ import it.telecomitalia.soa.soap.soapheader.HeaderType; import it.valueteam.gnp.dao.db.hb.*; import it.valueteam.gnp.dao.db.hb.crm.*; import it.valueteam.gnp.dao.xml.CrmXAO; -import it.valueteam.gnp.dao.xml.crm.dbcfxtocrm.respeventi.SetEventiDBCFXResponse; import it.valueteam.gnp.dao.xml.crm.donor.dbcfxtocrm.ListOfTiiosetascodmigrazionedbconline; import it.valueteam.gnp.dao.xml.crm.donor.dbcfxtocrm.SiebelMessage; import it.valueteam.gnp.dao.xml.crm.donor.dbcfxtocrm.Tibcascodmigrazionedbconline; @@ -51,13 +50,15 @@ public class CRMBController extends AbstractCRMController implements RecoveryIF private static final String versione = "1.0.0"; private static CRMBController onlyInstance; + protected GnpCrmNotifyDonorOutDAO crmbNotifyDonorOutDAO = null; + /** * Costruttore privato di default * @throws Exception */ private CRMBController() throws Exception { - + crmbNotifyDonorOutDAO = new GnpCrmNotifyDonorOutDAO(); } /** @@ -65,7 +66,6 @@ public class CRMBController extends AbstractCRMController implements RecoveryIF * @return CRMRController */ public static CRMBController getInstance() throws Exception { - if (onlyInstance == null) onlyInstance = new CRMBController(); return onlyInstance; @@ -281,7 +281,6 @@ public class CRMBController extends AbstractCRMController implements RecoveryIF GnpRichiesteDonor82DAO daoRichiesteD82 = new GnpRichiesteDonor82DAO(); richiesteD82 = daoRichiesteD82.findByCodiceSessione(crmbDonorOut.getCodiceSessione()); - if (richCsNpg35 == null) { richiesta = dao.findByCodiceSessione(crmbDonorOut.getCodiceSessione()); } @@ -289,9 +288,6 @@ public class CRMBController extends AbstractCRMController implements RecoveryIF richiestaDonNatOlo = donNatDao.findById(new Long(crmbDonorOut.getCodiceSessione())); } - // oppure e' donor ma in stato 2 - //perche' se esiste una richiesta donor ma e' gia' in uno stato piu' avanti non manda una ceppa - // 152248 - 227248 del 103 // DBCFX_RU_363 - Offerta Open Fiber FTTH (Business): esteso if richiesteD82 != null per Del.82 if ( richCsNpg35 != null || //se e' una richiesta CsNpg35 @@ -427,6 +423,7 @@ public class CRMBController extends AbstractCRMController implements RecoveryIF ListOfTiiosetascodmigrazionedbconline list = new ListOfTiiosetascodmigrazionedbconline(); Tibcascodmigrazionedbconline request = new Tibcascodmigrazionedbconline(); request.setTI_CODICE_SESSIONE(crmbDonorOut.getCodiceSessione()); + request.setTI_COS(crmbDonorOut.getCos()); request.setTI_COR(crmbDonorOut.getCor()); request.setTI_COW(crmbDonorOut.getCowDonating()); request.setTI_TIPO_CHIAMATA(crmbDonorOut.getTipoChiamata()); @@ -722,4 +719,16 @@ public class CRMBController extends AbstractCRMController implements RecoveryIF } return response; } + + public GnpCrmNotifyDonorOut creaNotificaEsitoN9(GnpRichiesteDonor82 richiesta) throws Exception { + log.write("9999", "Entro in creaNotificaEsitoN9 per richiesta " + richiesta.getIdRichiesta()); + GnpCrmNotifyDonorOut crmbNotifyDonorOut = null; + + crmbNotifyDonorOut = (new CRMBFormatController()).createNotificaCsDonor82(richiesta); + + crmbNotifyDonorOutDAO.save(crmbNotifyDonorOut); + return crmbNotifyDonorOut; + } + + } diff --git a/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/formatcontroller/crm/CRMBFormatController.java b/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/formatcontroller/crm/CRMBFormatController.java index 9b51ace7..cd698326 100644 --- a/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/formatcontroller/crm/CRMBFormatController.java +++ b/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/formatcontroller/crm/CRMBFormatController.java @@ -10,6 +10,7 @@ import it.valueteam.gnp.dao.xml.crm.dbcfxtocrm.http.*; import it.valueteam.gnp.dao.xml.crm.donor.crmtodbcfx.EsitoVerificaCS; import it.valueteam.gnp.obj.*; import it.valueteam.gnp.utility.DateUtils; +import it.valueteam.gnp.utility.Func; import it.valueteam.gnp.utility.Resources; import it.valueteam.gnp.utility.XmlUtility; import tim.infobus.data.TID; @@ -41,6 +42,9 @@ import java.util.List; */ public class CRMBFormatController extends AbstractCRMFormatController { + + protected static final String AMBITO_USCITA_82 = "USCITANP_DEL82"; + public CRMBFormatController() { } @@ -102,7 +106,7 @@ extends AbstractCRMFormatController { /** * createCrmScartInRec - * @param crmInRec GnpCrmInRec + * @param tracciato GnpCrmInRec * * @return GnpCrmScartiIn */ @@ -220,7 +224,7 @@ extends AbstractCRMFormatController { /** * executeDuplicationControl * vedi AbstractCRMFormatController - * @param uniqueId String + * @param idEsigenza String * @param tipoEvento String * @return boolean */ @@ -673,6 +677,7 @@ extends AbstractCRMFormatController { crmbDonorOut.setCodiceRichiesta(richiesta.getIdRichiesta()); crmbDonorOut.setCodiceSessione(richiesta.getCodiceSessione()); crmbDonorOut.setCor(richiesta.getCor()); + crmbDonorOut.setCos(richiesta.getCos()); crmbDonorOut.setDataInvio(new Date()); crmbDonorOut.setCodOrdineOLO(richiesta.getCodiceOrdineRecipient()); crmbDonorOut.setCodOLORecipient(richiesta.getCowRecipient()); @@ -792,6 +797,47 @@ extends AbstractCRMFormatController { return notifyOut; } + + public GnpCrmNotifyDonorOut createNotificaCsDonor82(GnpRichiesteDonor82 richiesta) throws Exception { + GnpCrmNotifyDonorOut crmbNotifyDonorOut = new GnpCrmNotifyDonorOut(); + crmbNotifyDonorOut.setDaScodare(new Long(1)); + crmbNotifyDonorOut.setAmbito(AMBITO_USCITA_82); + crmbNotifyDonorOut.setTipoEvento(CRMMap.TIPOEVENTO_ESITO_VERIFICA_CODICE_SESSIONE); + crmbNotifyDonorOut.setCodiceRichiesta(richiesta.getIdRichiesta()); + crmbNotifyDonorOut.setCodiceSessione(richiesta.getCodiceSessione()); + crmbNotifyDonorOut.setCow(richiesta.getCowDonating()); + crmbNotifyDonorOut.setDirectoryNumber(richiesta.getDn()); + crmbNotifyDonorOut.setCodiceOrdineOlo(richiesta.getCodiceOrdineRecipient()); + crmbNotifyDonorOut.setCodiceOloRecipient(richiesta.getCowRecipient()); + crmbNotifyDonorOut.setCodiceSegreto(richiesta.getCos()); + crmbNotifyDonorOut.setFlagNp("N"); + crmbNotifyDonorOut.setCor(richiesta.getCor()); + crmbNotifyDonorOut.setCodiceSegreto(richiesta.getCos()); + crmbNotifyDonorOut.setSistComp(richiesta.getCrmCompetenza()); + crmbNotifyDonorOut.setDataOrdine(richiesta.getDataRicezione()); + crmbNotifyDonorOut.setCognomeCliente(richiesta.getCognomeCliente()); + crmbNotifyDonorOut.setIdOperatoreDonor("TLC"); + crmbNotifyDonorOut.setIdOperatoreDonating("TLC"); + crmbNotifyDonorOut.setCodFiscalePartitaIva(richiesta.getCodFiscalePartitaIva()); + crmbNotifyDonorOut.setNativoTlc("Y"); + + String aggiuntivi = ""; + + if (!Func.isNull(richiesta.getDn2())) aggiuntivi += richiesta.getDn2() + ";"; + if (!Func.isNull(richiesta.getDn3())) aggiuntivi += richiesta.getDn3() + ";"; + if (!Func.isNull(richiesta.getDn4())) aggiuntivi += richiesta.getDn4() + ";"; + if (!Func.isNull(richiesta.getDn5())) aggiuntivi += richiesta.getDn5() + ";"; + if (!Func.isNull(richiesta.getDn6())) aggiuntivi += richiesta.getDn6() + ";"; + if (!Func.isNull(richiesta.getDn7())) aggiuntivi += richiesta.getDn7() + ";"; + if (!Func.isNull(richiesta.getDn8())) aggiuntivi += richiesta.getDn8() + ";"; + if (!Func.isNull(richiesta.getDn9())) aggiuntivi += richiesta.getDn9() + ";"; + if (!Func.isNull(richiesta.getDn10())) aggiuntivi += richiesta.getDn10() + ";"; + if (aggiuntivi.endsWith(";")) aggiuntivi = aggiuntivi.substring(0, aggiuntivi.length()-1); + if (!"".equals(aggiuntivi)) crmbNotifyDonorOut.setAggiuntivi(aggiuntivi); + + return crmbNotifyDonorOut; + } + } diff --git a/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/formatcontroller/dbss/DBSSFormatController.java b/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/formatcontroller/dbss/DBSSFormatController.java index 02c2a6cc..ccf8553d 100644 --- a/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/formatcontroller/dbss/DBSSFormatController.java +++ b/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/formatcontroller/dbss/DBSSFormatController.java @@ -1732,7 +1732,7 @@ public class DBSSFormatController extends FormatController { if (aggiuntivi.endsWith(";")) aggiuntivi = aggiuntivi.substring(0, aggiuntivi.length()-1); if (!aggiuntivi.equals("")) notifyOut.setAggiuntivi(aggiuntivi); - // TODO adeguamento IS NP se ci sono num metto ad Y else a N + // TODO adeguamento IS NP flag, se ci sono numerazioni metto ad "Y" altrimenti ad "N" if (nowIn.getNpDn1() != null) { notifyOut.setFlagNp("Y"); } else { @@ -1741,7 +1741,11 @@ public class DBSSFormatController extends FormatController { notifyOut.setSistComp(richiesta.getCrmCompetenza()); - if ((DBSSMap.EVENTO_ESPLETAMENTO).equals(notifyOut.getTipoEvento()) || (DBSSMap.EVENTO_ANNULLAMENTO).equals(notifyOut.getTipoEvento())) { + if ( + (DBSSMap.EVENTO_ESPLETAMENTO).equals(notifyOut.getTipoEvento()) || + (DBSSMap.EVENTO_ANNULLAMENTO).equals(notifyOut.getTipoEvento()) || + (DBSSMap.EVENTO_ESPLETAMENTO_KO).equals(notifyOut.getTipoEvento()) + ) { notifyOut.setDes(nowIn.getDataEspletamento()); } diff --git a/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/formatcontroller/now/NowController.java b/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/formatcontroller/now/NowController.java index cdbaf96a..73fd0979 100644 --- a/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/formatcontroller/now/NowController.java +++ b/gnpdev/dbcfx/src/it/valueteam/gnp/systemcontroller/formatcontroller/now/NowController.java @@ -238,7 +238,15 @@ public class NowController extends SystemController { Long idRichiesta = ((GnpNowD82RichiesteIn) ((nowDonorInDAO.findByCodiceOrdineWhs(nowDonorIn.getCodiceOrdineWhs())).get(0))).getIdRichiestaD82(); if(idRichiesta != null) { GnpRichiesteDonor82 richiesta = richDonorDAO.findById(idRichiesta); - DBSSController.getInstance().notificaDbss(richiesta, nowDonorIn); + + if(richiesta.getCrmCompetenza().equalsIgnoreCase("D")) { + DBSSController.getInstance().notificaDbss(richiesta, nowDonorIn); + } + else { // DBCFX_RU_363 - Offerta Open Fiber FTTH (Business): aggiunto else per lo scenario Business getCrmCompetenza == "B" + // invocare notifiche espletamenti (N10) verso CRMB + + } + DbcfxgoController.getInstance().inviaNotificaDbcfxgoD82(richiesta, null, null, nowDonorIn, null); } else { @@ -987,6 +995,7 @@ public class NowController extends SystemController { RequestManagerDonor82.callNotificaFase3DBSS(log, donor82, notifyDonorOutDAO, nowDonorOut); } else { //aggiungere chiamata verso CRMB + RequestManagerDonor82.callNotificaFase3CRMB(log, donor82); } } diff --git a/gnpdev/wsdbcfx/wsdl/crmdonor/CRM_TO_DBCFX_DONORFase2Del82.xsd b/gnpdev/wsdbcfx/wsdl/crmdonor/CRM_TO_DBCFX_DONORFase2Del82.xsd new file mode 100644 index 00000000..c1c30068 --- /dev/null +++ b/gnpdev/wsdbcfx/wsdl/crmdonor/CRM_TO_DBCFX_DONORFase2Del82.xsd @@ -0,0 +1,71 @@ + + + + + Esito verifica CS - CRM to DBCFX + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +