· 8 years ago · Feb 01, 2018, 12:12 PM
1CREATE OR REPLACE PACKAGE BODY SYSADM.Contract
2IS
3/*
4** %Z% %W%, %I%, %E%
5**
6** References:
7** HLD dab/05785_2.rtf Procedure ChangeStateServices
8** HLD dab/05785_5.rtf Procedure Finish_Request
9** Finish_Activate
10** Finish_Deactivate
11** Finish_ServiceControl
12** Finish_ChangeSubscription
13** HLD dab/05785_6.rtf Procedure Cancel_Request
14** Cancel_Activate
15** Cancel_Deactivate
16** Cancel_ServiceControl
17** Cancel_ChangeSubscription
18** HLD dab/05785_7.rtf Procedure ChangeStateContract
19**
20** HLD dab/10619_2.rtf Procedure Finish_Activate
21** Finish_Deactivate
22** Finish_ServiceControl
23** Finish_ChangeSubscription
24** HLD dab/10619_3.rtf Procedure Cancel_Activate
25** Cancel_Deactivate
26** Cancel_ServiceControl
27** Cancel_ChangeSubscription
28** HLD dab/10619_4.rtf Procedure ChangeStateServices
29** HLD dab/10619_5.rtf Procedure ChangeStateMultipleServices
30** HLD ca/24096_1.rtf Market independent enhancement
31** HLD dab/23406.rtf Split billing
32** HLD dab/23566.rtf Time dependent taxation
33** HLD dab/23099.rtf Selling goods
34** HLD plsql/23397.rtf Redesign of proration of free units of measurement
35** HLD 27472_11.rtf PBX interface
36** HLD 27469.rtf Support for Closed User Group Services
37** HLD 44216.rtf Redesign of activation / deactivation of MSISDN's
38** HLD 56399_plsql Procedures Finish_DN_Replace
39** Finish_DN_and_Port_Replace
40** Cancel_DN_Replace
41** Cancel_DN_and_Port_Replace
42** HLD 53402.rtf Provisioning of complex services
43** Procedures/Functions RequestMarketType
44** Cancel_Request
45** Finish_Request
46** Cancel_ChangeSubscription
47** Finish_ChangeSubscription
48** Finish_ServiceControl
49** Cancel_ServiceControl
50** Drop Functions RequestCommand
51** RequestSubscriptionType
52** RequestItem
53** RequestReplaceItem
54** HLD 56399_plsql Procedures Cancel_Request
55** Finish_Request
56** HLD 52832_plsql New Procedures - Change_Domain_Status
57** - Remove_Unique_Value
58** - Upd_Response_Val_Fr_Switch
59** Defect 67266/d
60** Defect 71979
61** Defect 323570/d_plsql and 323570/d_cms
62**
63** Author: Joerg Werner, LH Specifications GmbH
64**
65** Overview:
66**
67** This package contains body for serval contract actions
68** like finish a request or change the state of a subscription.
69**
70**
71** Major Modifications (when, who, what)
72**
73** 04/96 - JWE - initial version (Header and ChangeState* procedures)
74** 05/96 - JWE - Finish/Cancel Activate
75** 06/96 - JWE - support of MDSRRTAB.REQUEST_UPDATE
76** 07/96 - JWE - CopyService* procedures
77** 08/96 - JWE - Ermes support, two retention functions are now public
78** 11/96 - MMA - Def 20591 check whether the MSISDNID is not null
79** Funct/Proc: IdOfDirectoryNumber,
80** RetentionDirectoryNumber,
81** Cancel_DN_Replace
82** 01/97 - JWE - Handling of Bearer Capabilities (CONTR_SERVICES_CAP)
83** Procedure CopyServicesDNChange removed
84** 03/97 - MJF - Def 23986 DN retention for deactivated services
85** Funct/Proc: RetentionDNofContract
86** Cancel_Deactivate
87** 06/97 - JWE - Market independent enhancement and
88** Directory Number driven markets
89** 06/97 - ISC - New columns in table CONTR_SERVICES
90** 06/97 - JWE - RetentionAllowed procedure
91** 07/97 - ISC - New columns in table CONTR_SERVICES
92** 08/97 - ISC - InsertRateplanHist procedure
93** 09/97 - MJF - Def 30983/d don't activate deactive services when
94** reactivating a suspended contract
95** Funct/Proc: ChangeStateServices
96** 10/97 - ISC - Def 30793 Wrong value in column CS_STAT_CHNG after
97** tariff model change
98** 11/97 - RHA - Feature 32228: Additionally set CO_TIMM_MODIFIED = 'X'
99** in Procedures Finish_Request / Cancel_Request
100** 01/98 - JWE - Feature 27472: PBX Interface
101** 02/98 - PEI - Feature 24300: Support Leased Lines Market: increasing
102** port free capacity (by 1) in RetentionPort
103** 02/98 - JWE - Feature 27469: Closed User Group Services
104** 05/98 - MMA - Def 31196/d and others: NMT Maintenance, use new NMT package
105** 07/98 - ULB - Def 26679/d: CA: Status changes not correct / AddStatusString
106** reworked; Finish_Activate updated for new AddStatusString
107** parameter
108** 07/98 - ULB - Def 40037/d: CA: AMSISDN isn't transmitt to VMD on contract activation
109** ChangeStateServices changed
110** 07/98 - MBE - Def 42568/d: CA: always transmitt LEC Code
111** 08/98 - MBE - Feature 44216 CA: Redesign of activation / deactivation of MSISDN's
112** 09/98 - ULB - Def 46609: CA: Wrong service status requested when contract status changes
113** 03/99 - NIJ - defect 52633: error on suspended contracts
114** 03/99 - SAHM - defect 56326 y2k problem
115** 04/99 - HEM - Defect 57621 CA: Cancel all pending requests when susp./deact. a contract
116** 07/99 - MMA - Feature 55992 CA: Flexible service parameters - remove calls to CS_SPARAM1 and CS_PENDING_PARAMS
117** 08/99 - ULB - Feature 56399 CA: Change SIM over different HLRs
118** 08/99 - ISC - Feature 53402 PLSQL: Provisioning of complex services
119** 08/99 - ISC - Defect 59013/d CS_ADV_CHARGE error for mass change of rate plan
120** 10/99 - ISC - Defect 67220/d: CA: truncated time stamp in contract history after activation
121** 10/99 - ISC - Defect 67641/d: PLSQL COMMON: enter onhold contracts without timestamp
122** 10/99 - PSO - Feature 53402: Column MDSRRTAB.REC_VERSION is dropped.
123** 11/99 - NGCF - Feature 52832: New Procedures ( Change_Domain_Status, Remove_Unique_Value, Upd_Response_Val_Fr_Switch)
124** 11/99 - NGCF - Defect 69366_plsql : Call Change_domain_status and Remove_unique_value only if action id is 2,5,11.
125** 12/99 - PSO - Defect 69702 : UPD_RESPONSE_VAL_FR_SWITCH
126** New column in GMD_RESONSE_DETAIL, read into cursor record
127** 12/99 - NGCF - Defect 70610: UPD_RESPONSE_VAL_FR_SWITCH -
128** Should update into PARAMETER_VALUE correctly based on the DataType (String, Number,Date)
129** 12/99 - KSA - Defect 69773: Spelling mistake in PROCEDURE Cancel_ChangeSubscription
130** "ELSIF pionActionId = 6002" is replaced by "ELSIF pionActionId = 6003"
131** 06/00 - WPa - Defect 80442: Replace Port_Number by Port_ID and Directory_Number by DN_ID in Data1 and Data2 strings
132** Modified function "IdOfDirectoryNumber" (and related calls) and removed function "IdOfOPortNumber"
133** 11/00 - KJB - Defect 75916: Removed CS_ADV_CHARGE_CURRENCY from insert in CopyServices(). See also defect 59013/d.
134** 01/01 - MOG - Defect 84080: Cancel request for SN act. deletes MSISDN from service
135** 02/01 - HIA - Feature 84834: Alternate Line
136** 03/04 - #UMTS# Feature 82630 UMTS user-profile
137** 10/04 - #VPN# Feature 53406 VPN virtual private network
138** 05/24 - #UMTS# Feature 82630 UMTS user-profile-change (Finish_ChangeUsuerProfile and Cancel_ChangeUserProfile)
139** 05/28 - #NUBMERPORT# Feature 81481 NUMBERING PORTABILITY
140** 06/05 - Feature 202820_1 Support RatePlan Change involving prepaid rate plans
141** 06/30 - Reddy -Merging R_DUBLIN_USA and R_DUBLIN_W
142** 07/01 - jstory - Feature 202820_3 Preactivated Prepaid - add DoPrepayEDR procedure
143** 07/01 - AAi - Unnecessary pianProfiles parameter has been removed from the procedure
144** CopyServicesTMChange specification (the defect 206265)
145** 07/01 - js -Defect 206608/w - Activation of SIS number and Kcode for NMT fails
146** 07/01 - ak -Defect 207585 - Reformatting package without any logic changes
147** 07/01 - ak -Defect 203433 - PLSQL:EFFECTIVE_DATE
148 Add two private PROCEDUREs GetEffectiveDate() and GetActionDate().
149 Update date related columns to reference either one of these
150 two new private PROCEDUREs.
151** 08/01 - ak -Defect 203433-1 - PLSQL:EFFECTIVE_DATE
152 Update parameters passed to PROCEDURE RetentionDNofContract()
153** 08/13 - ak -Defect 207912 CA: delete onhold contract not possible - FK_COCAOV_CONTALL
154** Update FUNCTIONs GetEffectiveDate() and GetActionDate().
155** Return SYSDATE if a REQUEST is not found.
156** 08/28 - PSG - Defect 209208
157** All rows in PR_SERV_STATUS_HIST table are updated in FINISH_ACTIVATE
158** procedure. The update in this procedure is modified.
159** 08/28 - js -PN 209320 - Because of features 83597 and 81478_2, a request is needed for a service even though
160 the service will not change its status, e.g., from 'A' to 'D'. CA does not insert a new row into the
161 PR_SERV_STATUS_HIST, but only the REQUEST_ID is updated so that CA can know what and whether a pending
162 request exists for each service.
163 During a rateplan change, not only is the SP changed, but also the network element for an active service
164 can change when the rateplan change is from prepay to postpay or vice versa. Since the network element
165 for a service is treated as a parameter, this RP change logic can only expressed using both
166 PR_SERV_STATUS_HIST and PR_SERV_SPCODE_HIST tables. In this case, CA updates the PR_SERV_STATUS_HIST
167 table when initiating a request. Cancel_ChangeTM will null it out.
168*****************************************************************************************************
169 ** PN00219003 17-MAY-2002 R.Puntke
170 ** The information from 209320 is not true.
171 ** For a new status of a service a new entry in table PR_SERV_STATUS_HIST is created.
172 ** Finishing this request updates this entry with settting VALID_FROM_DATE
173 ** Canceling this request deletes this entry from table PR_SERV_STATUS_HIST.
174 **************************************************************************************
175** 09/05 Reddy Removing column "CBB_DATE". 210295_fix_1.sql script removed the column from CONTR_VAS table.
176** Refer PN #210350 for more details.
177** 09/20 - PSG PN# 211233.
178** CONTR_DEVICES.PORT_ID is null for ISDN contracts. The IF condition is added to check for the
179** not null value of the port in Finish_Deactivate procedure.
180** 09/20 - PSG PN# 211127
181** Finish_Port_Replacement procedure is modified to break the link betweem port and storage medium
182** for AMPS contracts. The procedure checks for the market type by checking SCNETTYPE = StorageMediumDriven
183** and breaks the link for AMP contracts while retaining the link for GSM contracts.
184** 10/18 - AAi PN 213467 is fixed. Changes in Cancel_DN_Replace introduced with 201959_plsql are adapted for multiple DNs
185** 10/22 - PSG PN 213898 Modify procedure Finish_ChangeMainFlag. Update CONTR_SERVCIES_CAP SET CS_ACTIV_DATE = piodEffectiveDate
186** 10/23 - PSG PN 213615 Modify procedure CopyServices for mass change of rate plan.
187** 10/22 - PSG PN 205410 Modify procedure Finish_ChangeSubscription. If the action id is 6004 then Finish_DN_And_Port_Replace
188** should be called only once instead of twice.
189** 10/30 - PSG PN 214421-2. Modify Finish_ChangeTM procedure to update PR_SERV_SPCODE_HIST.VALID_FROM_DATE
190** 10/31 - PSG PN 214067 Modify Finish_ServiceControl procedure. If a directory number is added to an active service,
191** a new row is inserted into CONTR_SERVICES_CAP table by CA but no new row is inserted in PR_SERV_STATUS_HIST
192** table. Procedure should update CS_ACTIVE_DATE in CONTR_SERVICES_CAP table after finishing the rquest.
193** 10/31 - aku PN 215073 - PL/SQL package finish deactivation request failing
194** Since the link between PORT and STORAGE_MEDIUM is broken for Pre-activated
195** prepay contract in AMPS market, Storage Medium information should be retrieved from
196** CONTR_DEVICES to STORAGE_MEDIUM instead.
197** The SELECT statement is updated in PROCEDURE Finish_Deactivate() before calling
198** PROCEDURE RetentionStorageMedium() in processing deactivation.
199** Also, add plcode as one of the criteria to retrieve storage medium information
200** in PROCEDURE DoPrepayEDR().
201** 10/31 - jstory PN 214455_1 Multiple rateplan changes in one day requires insert, not update, of RATEPLAN_HIST
202** 10/31 - jstory PN 215079 - Deactivation of dummy prepaid preactivated contract occurs after activation of takeover contract
203** 11/08 - jstory PN 215163 - Adjust activation time in case of contract takeover
204** 11/09 - Reddy PN 215520 - replaced PS.SNCODE = PSH.CO_ID with AND PS.SNCODE = PSH.SNCODE
205** 11/12 - PSG PN 215886. Contract.Finish_ServiceControl not adapted for 82630. Modified the procedure to populate
206** PROFILE_ID while inserting into CONTR_VAS table.
207** 11/15 - aku PN 215163 - Update the changes to adjust activation time in case of contract takeover
208** Instead of hardcoded 'BYPASS' for SWITCH_ID when deactivating a contract,
209** a join tables SELECT is added to retrieve the right SWITCH_ID
210** 11/21 - aku PN 209864_1 Finding SM_ID from PORT should not be applied to AMPS market since the
211** link betwen PORT and STORAGE_MEDIUM is broken for AMPS market.
212** Update PROCEDURE Finish_ChangeSubscription() for ACTION_ID = 6002.
213** 23-NOV-2001 - PN 00216669 Engelhardt Peter Wrong insert in PR_SERV_STATUS_HIST.REASON
214** For services without request_id, the handovered parameter for reason should be inserted.
215**
216** Note: It seems that this package becomes larger and larger. I suggest
217** that this package is splitted into two packages. The new package
218** should contain all retention specific procedures and
219** functions. (6/96 JWE)
220**
221** 26-NOV-2001 - PN 00216091 Rainer Puntke, ChangeStateServices: No entry in the table PR_SERV_STATUS_HIST.VALID_FROM_DATE for status A
222** 27-Nov-2001 - PN 00214421_2-1 jstory: update PR_SERV_SPCODE_HIST.VALID_FROM_DATE with the GMD effective date
223** 11/29 - PSG - PN 215748_plsql: GMDCOM : RDR-only requests and future dated requests. Modified procedure Finish_Request.
224** Added if condition for calling AssertOldestRequest procedure.
225** 30-NOV-2001 - PN 00214943 Rainer Puntke, ChangeStateMultipleServices: No entry in the table PR_SERV_STATUS_HIST.VALID_FROM_DATE
226** 30-NOV-2001 - PN 216896 aku: Set PRM_VALUE_ID to NULL while reset port mode to free in PROCEDURE RetentionPort()
227** 12/05 - PSG - PN 217426. No update of PROFILE_SERVICE.STATUS_HISTNO for VAS. Modified Finish_Activate procedure cursor.
228** 12/13 - PSG - PN 215748_plsql_1: GMDCOM : RDR-only requests and future dated requests. The code in defect 215748_plsql is
229** rolled back and a new condition to check for the rating requests is added in Finish_Request procedure.
230** 01/07 - PSG - PN 218534. Parameter value not changable after cancel request. The procedure cancel_activate is modified to null
231** out request_id from parameter_value table once the request is cancelled.
232** 01/07 - PSG - PN 215145. Doesn't fill PARAMETER_VALUE.REQUEST_ID for rating. Modified ChangeStateContract procedure to
233** update PARAMETER_VALUE table.
234** 08-JAN-2002 - PN00214067-1 A.Billo Finish_ServiceControl amended for activation, deletion of single DN of one service
235** 11-JAN-2002 - PN00218997, Andreas Billo, inish_ServiceControl amended for tarif model change
236** 11-JAN-2002 - PSG - PN 218996. CA/PLSQL SQL error in Finish_Request for gmd actions. Modified Finish_ServiceControl
237** procedure on similar logic as in 214067-1 for action id 13003.
238** 11-JAN-2002 - PN 219089, Andreas Billo, . CAS/PLSQL SQL error in Finish_Request for gmd actions. Modified Finish_ServiceControl
239** 11-JAN-2002 - PN 219085, Andreas Billo, . CAS/PLSQL SQL error in Finish_Request for gmd actions. Modified Finish_ServiceControl
240** 16-JAN-2002 - PSG - PN 218996_2. CA/PLSQL error in Finish_Request for GM actions. Modified Finish_ServiceControl procedure.
241** Major chnages done as per Bert Lindemann's suggestion.
242** 30-JAN-2002 - VOV - PN 219179 CA: 'Change Service Parameter' request changes activation date of service !!
243** 13-FEB-2002 - Schachni - defect 00214218 PLSQL: Service parameter not deleted when GMD request has been
244** 28-FEB-2002 - PSG -PN 218996-3 Modified Finish_ServiceControl procedure. Uncommented part of the code that handles GMD action 16.
245** 18-MAR-2002 - PN 209810-3 aku: CA: Wrong entries (LDC / LEC) and inconsistent dates after Contract Takeover
246 Update PROCEDURE Finish_Activate()
247** 21Mar-2002 - PN00221458 Device change didnt works, related contract was not handled R.Wieja
248** 09-APR-2002 - PN00222838 Changes in Finish_Activate for contract_takeover
249** 11-APR-2002 - PN 00221696 Vovkodav PLSQL: DIRNUM not activated after profile change
250** 16-APR-2002 - PN 00222864-2 Andreas Billo: For TM-SP change (ActionID=55) the Finish_ServiceCOtrol must be called in FinishRequest too.
251** 04/02 - HSZ - add PrintBodyVersion
252** 21-APR-2002 - PN 00222063 Vovkodav PLSQL: Redesign of PR_SERV_STATUS_HIST.REQUEST_ID handling
253** 04/02 - IAL - Defect 00222071 : CTH: Should not insert into RATEPLAN_HIST for 'on hold' contracts
254** 05-JUN-02 - PN00225006, Andreas Billo, change of Finish_DN_Replace, Reteion aeven for BlockDirNums
255** 24-JUN-2002 - PN 00225481 IAL PLSQL: Wrong update of CONTR_SERVICES_CAP for DN change
256** 06-SEP-2002 .defect 00222869_PLSQL KW PLSQL: The status of non network services in future not correctly when Takeover#
257** 12-SEP-2002 lobemeier defect 224525/d PLSQL: If Pending Activation GMD request for a Service having directory numbers is deleted the
258** 26-SEP-2002 KW defect 00228856/d PLSQL: When change a parameter to a service.
259** 05-NOV-2002 KW defect 00229846 PLSQL: REQUESTS.CANCEL doesn't update directory number
260 assiged directory number is still shown in service table.
261** 19-NOV-2002 RS PN 00231226 CA : Wrong PR_SERV_SPCODE_HIST.VALID_FROM_DATE during SP change
262** 21-NOV-2002 RS PN 00231226_plsql : Wrong PR_SERV_SPCODE_HIST.VALID_FROM_DATE during Contract actions
263** 04-DEC-2002 RS PN 00231769 CA : Wrong format in CONTRACT_HISTORY.CH_VALIDFROM
264** 30-DEC-2002 RS PN 00232835 CA : Duplicate in PR_SERV_SPCODE_HIST
265** 30-DEC-2002 KW defect 00228668/d CA: Cancel Request does not delete request in table PARAMETER_VALUE
266** 03-JAN-2003 RS PN 00231853 CA : Request id of activation is attached to non network services (pr_serv_statu
267** 09-JAN-2003 KW defect 00227242/d CA: Wrong display of main MSISDN in the Contracts screen
268** 10-JAN-2003 KW defect 00231459/d CA: RATEPLAN_HIST.REQUEST_ID is missing after rateplan change
269** 03-MAR-2003 KW defect 00232426/d CA: Finish_Request does not correctly update PROFILE_SERVICE.STATUS.HISTNO
270** 06-MAR-2003 OUL PN 00234478 CA: Problem with contract activation in future
271** 25-MAR-2003 - PN 00235633 Engelhardt Peter / R.Puntke PLSQL: Servicepointer profile tables are wrong by I-Mode service (STATUS_HISTNO)
272** 31-MAR-2003 KW defect 00234740 CA: Wrong behaviour of non network services during contract suspension
273** 08-APR-2003 OUL defect 223154 CA: Closed User Group
274** 24-OCT-2003 ASC PN 00240721: Prepaid/Postpaid Convergence
275** 07-NOV-2003 ASC PN 00244151: PLSQL: FINISH_REQUEST procedure does not fill CONTR_TARIFF_OPTIONS.VALID_FROM
276** 09-DEC-2003 ASC PN 00244893_plsql: PLSQL: FINISH_REQUEST procedure does not consider profile change (Action ID 40)
277** 06-JAN-2004 - PN 00245189 lobemeier CA: Service parameters are not deleted during GMD request cancel.
278** 05-FEB-2004 lobemeier PN 245733 CA : Prevent CS_Active date = NULL and CS_Deactive_date not NULL for resource retention in Contr_services_cap.
279** 11-FEB-2004 lobemeier pn 247526 EI: Cange for EIR specific Action IDs of GMD requests.
280** 18-FEB-2003 DL PN 245307 CA: Canceling of GMD Action_ID = 16 changing Tarif Model of contract must not be permitted.
281** 24-FEB-2004 OUL PN 243952: due to the redesign happened with this defect fixes 238818, 240667, 232896%, 235938, 235633 was removed
282** 08-MAR-2004 dl PN 248556 CA: RATEPLAN_HIST.userlastmod is not filled with the user who issued the GMD request.
283** 12-MAR-2004 lobemeier PN 248756: Match CMS and CA contract template creation logic.
284** 11-MAY-2004 lobemeier PN 245919/d: Cerate RATEPLAN_HIST entries for a Contract takeover if orgigin Contract is reactivated.
285** 20-Sep-2004 H.Wang PN 253215/d: Packages contract and prepay not compilable
286** the source code was removed completelly (not commented out) for best readablity of procedure.
287** 09-Nov-2004 U.Schaefer 00250230_plsql/d: migrated fix from BSCS8 for ESN change in AMPS market
288** 12-Nov-2004 U.Schaefer 00256362: new action ids (48,49) for agreements. Adapt finish_request
289** 11-FEB-2005 - 00254374/d - added CheckRequestToCancel Procedure
290** 13-APR-2005 U.Schaefer 260926: allow canceling of rate plan request ID=16, disabling fix 245307, since cancel permission is implemented with 254374/d
291** 31-Dec-2006 U.Schaefer 00260533_1_plsql/d: finish requests for individual micro cells
292** 09-Aug-2006 U.Schaefer 00276466/d: delete DELETE_FLAG for contracted service in case of canceled rateplan or service package change.
293** 04-Jun-2009 U.Schaefer 326229/d: update STORAGE_MEDIUM.BUSINESS_UNIT_ID to null if SIM status = 'f'
294** 14-Oct-2009 pachopok 323570/d_cms: in FinishPendingContract, Finish_Activate and Finish_Deactivate, CONTRACT_ALL.CH_VALIDFROM is set to
295 value returned from GetEffectiveDate(MDSRRTAB.REQUEST%TYPE)
296** 09-Nov-2009 oseboldf 337157: Finish_Deactivate: RetentionStorageMedium was not called due to missing null value condition
297** 08-Jan-2010 U.Schaefer 00341416_plsql: changed handling for valid from date in takeover case: take valid from date from request. see 00341416_gmd
298**
299*/
300
301/*------------------------- Package Constants --------------------------*/
302cosMarkPending CONSTANT CONTRACT_HISTORY.ch_pending%TYPE := 'X';
303cosStatusActivate CONSTANT CONTRACT_HISTORY.ch_status%TYPE := 'a';
304cosStatusDeactivate CONSTANT CONTRACT_HISTORY.ch_status%TYPE := 'd';
305cosStatusSuspension CONSTANT CONTRACT_HISTORY.ch_status%TYPE := 's';
306cosStatusParameter CONSTANT CONTRACT_HISTORY.ch_status%TYPE := 'p';
307cosStatusPending CONSTANT CONTRACT_HISTORY.ch_status%TYPE := 'p';
308cosStatusOnHold CONSTANT CONTRACT_HISTORY.ch_status%TYPE := 'o';
309cosStatusDelimiter CONSTANT VARCHAR2(1) := '|';
310cosStatusReserve CONSTANT PORT.port_status%TYPE := 'r';
311cosStatusFree CONSTANT PORT.port_status%TYPE := 'f';
312cosStatusDeassign CONSTANT PORT.port_status%TYPE := 'd';
313
314--#UMTS# 82630
315conInitialActivation CONSTANT NUMBER := 0;
316
317--#UMTS#
318
319-- SAHM defect 56326
320-- cosDateMask CONSTANT VARCHAR2(6) := 'YYMMDD';
321cosDateMask CONSTANT VARCHAR2(6) := 'RRMMDD';
322
323-- 56326
324conMaxStatusStrlen CONSTANT NUMBER := 240;
325
326-- Subscription Codes of GSMCCS (Change mobile subscription)
327cosGmdSubscriptionDN CONSTANT VARCHAR2(1) := '1'; -- directory number
328
329-- cosGmdSubscriptionSM CONSTANT VARCHAR2(1) := '2'; -- storage medium
330cosGmdSubscriptionPort CONSTANT VARCHAR2(1) := '3'; -- port
331cosGmdSubscriptionCarrier CONSTANT VARCHAR2(1) := '4'; -- pici code
332
333-- Note: GMD_Subscription_SM is not longer supported
334/*
335** Status values in the MDSRRTAB
336*/
337conGMD_REQUEST_POSTPONED CONSTANT NUMBER := 0; -- OUL PN 341996
338-- request processing postponed
339conGMD_REQUEST_ERROR CONSTANT NUMBER := 1;
340-- if an error has occured
341conGMD_REQUEST_INSERTED CONSTANT NUMBER := 2;
342-- after API (via SQL Windows Include: gmdapi.apl)
343conGMD_REQUEST_CONVERTED CONSTANT NUMBER := 3;
344-- after ActionRoutine 1 (converted to EDIFACT)
345--conGMD_REQUEST_VENDOR_PROCESSING CONSTANT NUMBER := 4;
346conGMD_REQUEST_SENT_TO_VMD CONSTANT NUMBER := 4;
347-- after ActionRoutine 2 (sent to VMD)
348conGMD_REQUEST_RESPONSE_ISSUED CONSTANT NUMBER := 5;
349-- after ActionRoutine 3 (converted from EDIFACT)
350conGMD_REQUEST_IN_DATABASE CONSTANT NUMBER := 6;
351-- after ActionRoutine 7 (check for VMD/HLR retry)
352conGMD_REQUEST_NOTIFY_FAILED CONSTANT NUMBER := 7;
353-- after ActionRoutine 5 (user notification failed)
354conGMD_REQUEST_NOTIFY_OK CONSTANT NUMBER := 8;
355-- after ActionRoutine 5 (user notification succesful)
356conGMD_REQUEST_CANCELED CONSTANT NUMBER := 9;
357-- if request was canceled
358conGMD_REQUEST_QUEUED CONSTANT NUMBER := 10;
359-- if the request is currently queued in the RQS
360conGMD_REQUEST_FAILED CONSTANT NUMBER := 11;
361-- after the VMD/HLR retry counter is reached and the request was failed
362conGMD_REQUEST_FAILED_IN_GMD CONSTANT NUMBER := 12;
363-- after the VMD/HLR retry counter is reached and the request was failed
364conEquipmentDriven CONSTANT NUMBER := 1; -- e.g. NMT
365conPortDriven CONSTANT NUMBER := 2; -- e.g. ERMES
366conStorMedDriven CONSTANT NUMBER := 3; -- e.g. GSM, CCA (Calling card), AMPS
367conServiceDriven CONSTANT NUMBER := 4; -- e.g. ISD (Isdn)
368conNonNetworkClasses CONSTANT NUMBER := 5; /*Defect 232675 vovkodav*/
369-- Begin PN00265252
370conNoMarket CONSTANT NUMBER := 6; -- if the market is not defined
371
372SQL_RESOURCE_BUSY CONSTANT NUMBER := -54 ; /*OUL 341996*/
373
374-- End PN00265252
375/*------------------------- Package Globals ----------------------------*/
376geoApplicationError EXCEPTION;
377gosErrorText VARCHAR2(2000) := NULL;
378gobCancellingMainRequest BOOLEAN := TRUE; -- PN 296713, MCH
379
380
381/*------------------------- Private Modules ----------------------------*/
382/* begin defect 203433 */
383/*
384** =====================================================================
385**
386** Function: GetActionDate
387**
388** Purpose: This funtions returns the actual action date that the
389** request sent to VMD from MDSRRTAB.ACTION_DATE.
390**
391** =====================================================================
392*/
393FUNCTION GetActionDate(
394 pionRequest IN MDSRRTAB.REQUEST%TYPE)
395RETURN DATE IS
396 CURSOR cMDSRRTAB IS
397 SELECT ACTION_DATE FROM MDSRRTAB M
398 WHERE REQUEST = pionRequest;
399 piodActionDate DATE;
400BEGIN
401 OPEN cMDSRRTAB;
402 FETCH cMDSRRTAB INTO piodActionDate;
403 IF cMDSRRTAB%NOTFOUND THEN
404 /* begin defect 207912 */
405 --gosErrorText := 'Request: ' || pionRequest || ' does not exit!';
406 --RAISE geoApplicationError;
407 piodActionDate := SYSDATE;
408 /* end defect 207912 */
409 END IF;
410 RETURN piodActionDate;
411END GetActionDate;
412/* end defect 203433 */
413/*
414** =====================================================================
415**
416** Function: GetEffectiveDate
417**
418** Purpose: This funtions returns the actual effective date of the
419** provisioned service from GMD_RESPONSE.EFFECTIVE_DATE.
420**
421** =====================================================================
422*/
423FUNCTION GetEffectiveDate(
424 pionRequest IN MDSRRTAB.REQUEST%TYPE)
425RETURN DATE IS
426 CURSOR cGMDResponse IS
427 SELECT EFFECTIVE_DATE FROM GMD_RESPONSE G
428 WHERE REQUEST = pionRequest
429 AND RESPONSE_SEQNO = (SELECT MAX(SUB.RESPONSE_SEQNO) FROM GMD_RESPONSE SUB
430 WHERE SUB.REQUEST = G.REQUEST AND RESPONSE_RESULT IN ('SUCCESS','WARNING'));
431 piodEffectiveDate DATE;
432BEGIN
433 OPEN cGMDResponse;
434 FETCH cGMDResponse INTO piodEffectiveDate;
435 IF cGMDResponse%NOTFOUND THEN
436 piodEffectiveDate := SYSDATE;
437 END IF;
438
439 CLOSE cGMDResponse;
440
441 RETURN piodEffectiveDate;
442
443END GetEffectiveDate;
444
445/*
446** =====================================================================
447**
448** Procedure: Finish_ContractTakeover
449** #00385791
450** =====================================================================
451*/
452 PROCEDURE Finish_ContractTakeover
453 (
454 pionRequest IN mdsrrtab.request%TYPE,
455 pionContractId IN mdsrrtab.co_id%TYPE
456 )
457 IS
458 lonContractId_new mdsrrtab.co_id%TYPE;
459 lonCounter number;
460 lodEffectiveDate date;
461 BEGIN
462
463 lodEffectiveDate := GetEffectiveDate( pionRequest );
464
465 BEGIN
466 select CO_ID
467 into lonContractId_new
468 from MDSRRTAB
469 where PARENT_REQUEST = pionRequest;
470
471 EXCEPTION
472 WHEN NO_DATA_FOUND THEN
473 gosErrorText := SQLERRM;
474 RAISE_APPLICATION_ERROR( -20001,
475 'Package Contract.Finish_ContractTakeover: ' ||
476 'Request: ' || pionRequest ||' ' ||
477 'No record found in MDSRRTAB for the new contract.' ||' ' ||
478 gosErrorText );
479 END;
480
481
482 select COUNT(*)
483 into lonCounter
484 from PURCHASED_BUNDLE_CO_TAKEOVER
485 where CO_ID_NEW = pionContractId;
486
487
488 IF (lonCounter = 0)
489 THEN
490 -- 1. takeover
491 insert into PURCHASED_BUNDLE_CO_TAKEOVER (CO_ID_OLD, CO_ID_NEW, EFFECTIVE_DATE) values (NULL, pionContractId, lodEffectiveDate);
492 END IF;
493
494 insert into PURCHASED_BUNDLE_CO_TAKEOVER (CO_ID_OLD, CO_ID_NEW, EFFECTIVE_DATE) values (pionContractId, lonContractId_new, lodEffectiveDate);
495
496 END Finish_ContractTakeover;
497
498
499
500-- FEATURE 240721
501PROCEDURE DoContrTariffOptions
502
503(
504 pionRequest IN MDSRRTAB.REQUEST%TYPE,
505 pionContractID IN CONTRACT_ALL.CO_ID%TYPE,
506 piocDbActionType IN CHAR,
507 piobMustExist IN BOOLEAN
508)
509IS
510
511 CURSOR locContrTariffOptions
512 IS
513 SELECT 1
514 FROM CONTR_TARIFF_OPTIONS
515 WHERE REQUEST_ID = pionRequest
516 AND CO_ID = pionContractID
517
518 FOR UPDATE OF VALID_FROM;
519
520 lonDummy NUMBER;
521 lodEffectiveDate DATE;
522
523BEGIN
524
525 OPEN locContrTariffOptions;
526 FETCH locContrTariffOptions INTO lonDummy;
527
528 IF locContrTariffOptions%NOTFOUND AND piobMustExist = TRUE THEN
529 gosErrorText := 'At least one entry in table CONTR_TARIFF_OPTIONS ' ||
530 'having REQUEST_ID = ' || pionRequest || ' must exist !';
531 RAISE geoApplicationError;
532
533 ELSE
534
535 IF piocDbActionType = 'D' THEN
536
537 DELETE FROM CONTR_TARIFF_OPTIONS
538 WHERE REQUEST_ID = pionRequest
539 AND CO_ID = pionContractID;
540
541 ELSIF piocDbActionType = 'U' THEN
542
543 lodEffectiveDate := GetEffectiveDate( pionRequest );
544
545 UPDATE CONTR_TARIFF_OPTIONS
546 SET VALID_FROM = lodEffectiveDate
547 WHERE REQUEST_ID = pionRequest
548 AND CO_ID = pionContractID;
549 -- USC#00256346 reset the entry, keep the data, but remove reference to request
550 ELSIF piocDbActionType = 'R' THEN
551
552 UPDATE CONTR_TARIFF_OPTIONS
553 SET REQUEST_ID = NULL
554 WHERE REQUEST_ID = pionRequest
555 AND CO_ID = pionContractID;
556 -- USC#00256346 end
557
558 ELSE
559
560 gosErrorText := 'PROCEDURE DoContrTariffOptions was called with invalid value ' ||
561 '( ' || piocDbActionType || ' ) for parameter piocDbActionType. ' ||
562 'Valid values are D, U and R.';
563 RAISE geoApplicationError;
564
565 END IF;
566
567 END IF;
568
569END DoContrTariffOptions;
570
571
572/*
573** =====================================================================
574**
575** Function: GetIdOfMarketType
576**
577** Purpose: This funtions returns the (internal) market ID
578** of a market type (see table MPDSCTAB.SCNETTYPE).
579**
580** =====================================================================
581*/
582FUNCTION GetIdofMarketType(
583 piosNetType IN VARCHAR2)
584RETURN NUMBER IS
585 lonResult NUMBER := NULL;
586BEGIN
587 IF piosNetType IS NOT NULL THEN
588 IF piosNetType = 'P' THEN
589 lonResult := conPortDriven;
590 ELSIF piosNetType = 'S' THEN
591 lonResult := conStorMedDriven;
592 ELSIF piosNetType = 'E' THEN
593 lonResult := conEquipmentDriven;
594 ELSIF piosNetType = 'D' THEN
595 lonResult := conServiceDriven;
596 /*Defect 232675 vovkodav*/
597 ELSIF piosNetType = 'X' THEN
598 lonResult := conNonNetworkClasses;
599 END IF;
600 -- Begin PN00265252
601 ELSE
602 lonResult := conNoMarket;
603 -- End PN00265252
604 END IF;
605 RETURN lonResult;
606END GetIdOfMarketType;
607
608/*
609** =====================================================================
610**
611** Function: GetPortMarketType
612**
613** Purpose: This funtions returns the (internal) market ID
614** of a market type where the pors belongs.
615**
616** PN00286470_plsql/d AV
617** =====================================================================
618*/
619FUNCTION GetPortMarketType(
620 pionPortId IN PORT.PORT_ID%TYPE)
621RETURN NUMBER IS
622 losScnettype VARCHAR2(1) := NULL;
623 lonResult NUMBER := NULL;
624BEGIN
625 SELECT MSC.SCNETTYPE
626 INTO losScnettype
627 FROM PORT, RES_PORT_STRUCTURE RPS, MPDSCTAB MSC
628 WHERE PORT.PORT_NPCODE=RPS.PORT_NPCODE AND
629 RPS.SCCODE=MSC.SCCODE AND
630 PORT.PORT_ID=pionPortId;
631
632 IF losScnettype IS NOT NULL THEN
633 lonResult := GetIdofMarketType(losScnettype);
634 END IF;
635 RETURN lonResult;
636END GetPortMarketType;
637
638/*
639** =====================================================================
640**
641** Function: ValidStatusChange
642**
643** Purpose: This function checks if a status change is valid.
644** The state diagramm is:
645** FIXME: drop if package PREPAY is removed from the database.
646** =====================================================================
647*/
648FUNCTION ValidStatusChange(
649 piosCurrent IN VARCHAR2,
650 piosRequested IN VARCHAR2)
651RETURN VARCHAR2 IS
652 piosCurrentState VARCHAR2(1) := SUBSTR( piosCurrent, -1);
653 piosRequestedState VARCHAR2(1) := SUBSTR( piosRequested, -1);
654 losResult VARCHAR2(1) := NULL;
655BEGIN
656 IF piosCurrentState = cosStatusOnHold THEN
657 IF piosRequestedState IN ( cosStatusActivate ) THEN
658 losResult := piosRequestedState;
659 END IF;
660 ELSIF piosCurrentState = cosStatusActivate THEN
661 IF piosRequestedState IN ( cosStatusSuspension,
662 cosStatusDeactivate, cosStatusPending) THEN
663 losResult := piosRequestedState;
664 END IF;
665 ELSIF piosCurrentState = cosStatusSuspension THEN
666 IF piosRequestedState IN ( cosStatusActivate, cosStatusDeactivate ) THEN
667 losResult := piosRequestedState;
668 END IF;
669 ELSIF piosCurrentState = cosStatusDeactivate THEN
670 IF piosRequestedState IN ( cosStatusActivate ) THEN
671 losResult := piosRequestedState;
672 END IF;
673 ELSIF piosCurrentState IS NULL THEN
674 IF piosRequestedState IN ( cosStatusActivate, cosStatusOnHold ) THEN
675 losResult := piosRequestedState;
676 END IF;
677 END IF;
678 RETURN losResult;
679END ValidStatusChange;
680
681
682/*
683** =====================================================================
684** Returns the minimum contract time.
685** The minimum contract time is configured for each rate plan.
686**
687** see RATEPLAN_CONTRACT_END_DATE
688**
689** F280461 CWLEE
690** =====================================================================
691*/
692FUNCTION GetMinimumContractTime(
693 pionContractId IN CONTRACT_ALL.CO_ID%TYPE,
694 piodtEffectiveDate IN CONTRACT_ALL.CO_ACTIVATED%TYPE)
695RETURN DATE IS
696
697 --
698 CURSOR locRatePlanContractEndDate
699 (ponContractId IN CONTRACT_ALL.CO_ID%TYPE,
700 podtEffectiveDate IN CONTRACT_ALL.CO_ACTIVATED%TYPE)
701 IS
702 SELECT DECODE(RC.YEAR,null,0,RC.YEAR), DECODE(RC.MONTH,null,0,RC.MONTH),
703 DECODE(RC.WEEK,null,0,RC.WEEK), DECODE(RC.DAY,null,0,RC.DAY)
704 FROM RATEPLAN_CONTRACT_END_DATE RC, CONTRACT_ALL CO
705 WHERE CO.CO_ID = ponContractId
706 AND CO.TMCODE = RC.TMCODE
707 AND RC.VALID_FROM <= podtEffectiveDate
708 ORDER BY RC.VALID_FROM DESC;
709
710
711 CURSOR locContractAll
712 (ponContractId IN CONTRACT_ALL.CO_ID%TYPE,
713 podtEffectiveDate IN CONTRACT_ALL.CO_ACTIVATED%TYPE,
714 ponYear IN RATEPLAN_CONTRACT_END_DATE.YEAR%TYPE,
715 ponMonth IN RATEPLAN_CONTRACT_END_DATE.MONTH%TYPE,
716 ponDays IN RATEPLAN_CONTRACT_END_DATE.DAY%TYPE)
717 IS
718 SELECT TRUNC(ADD_MONTHS(podtEffectiveDate,(ponYear*12)+ponMonth)+ponDays)
719 FROM CONTRACT_ALL
720 WHERE CO_ID = ponContractId;
721
722 lonYear RATEPLAN_CONTRACT_END_DATE.YEAR%TYPE;
723 lonMonth RATEPLAN_CONTRACT_END_DATE.MONTH%TYPE;
724 lonWeek RATEPLAN_CONTRACT_END_DATE.WEEK%TYPE;
725 lonDay RATEPLAN_CONTRACT_END_DATE.DAY%TYPE;
726 lonDays RATEPLAN_CONTRACT_END_DATE.DAY%TYPE;
727
728 lodtMinimumTime CONTRACT_ALL.EARLIEST_END_DATE%TYPE := null;
729
730BEGIN
731
732 OPEN locRatePlanContractEndDate(pionContractId, piodtEffectiveDate);
733 FETCH locRatePlanContractEndDate INTO lonYear, lonMonth, lonWeek, lonDay;
734 IF locRatePlanContractEndDate%FOUND
735 THEN
736 -- calculate the days
737 lonDays := (lonWeek*7)+lonDay;
738 OPEN locContractAll(pionContractId, piodtEffectiveDate, lonYear, lonMonth, lonDays);
739 FETCH locContractAll INTO lodtMinimumTime;
740 CLOSE locContractAll;
741
742 END IF;
743 CLOSE locRatePlanContractEndDate;
744
745 RETURN lodtMinimumTime;
746
747END GetMinimumContractTime;
748
749/*
750** =====================================================================
751** Moves executed concurrent request to the history table and
752** deletes from the concurrent request table.
753** F276491 CWLEE
754** =====================================================================
755*/
756PROCEDURE MoveToConCurrentRequestHistory(
757 pionSeqNo IN CONCURRENT_REQUEST.SEQNO%TYPE)
758IS
759BEGIN
760 INSERT INTO CONCURRENT_REQUEST_HISTORY
761 ( SEQNO, CUSTOMER_ID, CO_ID,
762 CREATION_DATE, CREATION_USER, PROCESS,
763 ACTION_ID, COMMAND, DATA1,
764 DATA2, DATA3, GMD_REQUEST_ID,
765 GMD_STATUS, VALID_FROM, RETENTION_MODES,
766 RS_ID, PROFILE_ID, SNCODE,
767 STATUS, REC_VERSION, MOD_DATE,
768 MOD_USER)
769 SELECT
770 SEQNO, CUSTOMER_ID, CO_ID,
771 CREATION_DATE, CREATION_USER, PROCESS,
772 ACTION_ID, COMMAND, DATA1,
773 DATA2, DATA3, GMD_REQUEST_ID,
774 GMD_STATUS, VALID_FROM, RETENTION_MODES,
775 RS_ID, PROFILE_ID, SNCODE,
776 STATUS, 0, SYSDATE,
777 USER FROM CONCURRENT_REQUEST
778 WHERE SEQNO = pionSeqNo;
779
780 DELETE FROM CONCURRENT_REQUEST WHERE SEQNO = pionSeqNo;
781
782END MoveToConCurrentRequestHistory;
783
784/*
785** =====================================================================
786** Main procedure to handle concurrent requests.
787**
788** F276491 CWLEE
789** =====================================================================
790*/
791PROCEDURE HandleConCurrentRequest(
792 pionRequest IN MDSRRTAB.REQUEST%TYPE,
793 pionContractId IN MDSRRTAB.CO_ID%TYPE,
794 pionActionId IN MDSRRTAB.ACTION_ID%TYPE)
795IS
796 lonSeqNo CONCURRENT_REQUEST.SEQNO%TYPE;
797 losProcess CONCURRENT_REQUEST.PROCESS%TYPE;
798 lonSncode CONCURRENT_REQUEST.SNCODE%TYPE;
799 lonActionId CONCURRENT_REQUEST.ACTION_ID%TYPE;
800 losCommand CONCURRENT_REQUEST.COMMAND%TYPE;
801
802 losSysDate VARCHAR2(30);
803
804 --
805 --
806 CURSOR locConCurrentRequest
807 IS
808 SELECT SEQNO, PROCESS, SNCODE, ACTION_ID, COMMAND
809 FROM CONCURRENT_REQUEST
810 WHERE GMD_REQUEST_ID = pionRequest
811 AND CO_ID = pionContractId
812 AND STATUS = 1;
813
814 isConcurrentRequest boolean := false;
815
816 CURSOR locConCurrentRequestCancelled
817 IS
818 SELECT SEQNO
819 FROM CONCURRENT_REQUEST
820 WHERE STATUS = 2;
821
822 --
823 --
824 CURSOR locConCurrentOppositeRequestI
825 (posProcess CONCURRENT_REQUEST.PROCESS%TYPE,
826 ponSeqNo CONCURRENT_REQUEST.SEQNO%TYPE,
827 ponActionId CONCURRENT_REQUEST.ACTION_ID%TYPE,
828 ponContractId CONCURRENT_REQUEST.CO_ID%TYPE,
829 ponSncode CONCURRENT_REQUEST.SNCODE%TYPE,
830 posCommand CONCURRENT_REQUEST.COMMAND%TYPE,
831 posSysDate VARCHAR2)
832 IS
833 SELECT a.SEQNO
834 FROM CONCURRENT_REQUEST a, CONCURR_REQ_OPPOSITE_ACTION b
835 WHERE a.action_id = b.pred_action_id
836 AND b.succ_action_id = ponActionId
837 AND NVL(a.process, posSysDate) = NVL(posProcess, posSysDate)
838 AND a.seqno <> ponSeqNo
839 AND a.status = 1
840 AND a.co_id = ponContractId
841 AND a.sncode = ponSncode
842 AND NVL(a.COMMAND, posSysDate) = DECODE(posCommand,'DEACTIVATED','ACTIVATED','ACTIVATED', posSysDate,'NONE','NONE', posSysDate);
843
844
845 CURSOR locConCurrentOppositeRequestII
846 (posProcess CONCURRENT_REQUEST.PROCESS%TYPE,
847 ponSeqNo CONCURRENT_REQUEST.SEQNO%TYPE,
848 ponActionId CONCURRENT_REQUEST.ACTION_ID%TYPE,
849 ponContractId CONCURRENT_REQUEST.CO_ID%TYPE,
850 posCommand CONCURRENT_REQUEST.COMMAND%TYPE,
851 posSysDate VARCHAR2)
852 IS
853 SELECT a.SEQNO
854 FROM CONCURRENT_REQUEST a, CONCURR_REQ_OPPOSITE_ACTION b
855 WHERE a.action_id = b.pred_action_id
856 AND b.succ_action_id = ponActionId
857 AND NVL(a.process, posSysDate) = NVL(posProcess, posSysDate)
858 AND a.seqno <> ponSeqNo
859 AND a.status = 1
860 AND a.co_id = ponContractId
861 AND NVL(a.COMMAND, posSysDate) = DECODE(posCommand,'DEACTIVATED','ACTIVATED','ACTIVATED', posSysDate,'NONE','NONE', posSysDate);
862
863 lonPredSeqNo CONCURRENT_REQUEST.SEQNO%TYPE;
864 isPredecessorRequest boolean := false;
865
866 --
867 --
868 CURSOR locConCurrentExecutedRequest
869 (ponContractId CONCURRENT_REQUEST.CO_ID%TYPE)
870 IS
871 SELECT SEQNO, PROCESS, SNCODE, ACTION_ID, COMMAND
872 FROM CONCURRENT_REQUEST
873 WHERE STATUS = 1
874 AND CO_ID = ponContractId;
875
876-- PN 00340608
877 CURSOR locConCurrentExecRequForDeact
878 (ponContractId CONCURRENT_REQUEST.CO_ID%TYPE)
879 IS
880 SELECT SEQNO, PROCESS, SNCODE, ACTION_ID, COMMAND
881 FROM CONCURRENT_REQUEST
882 WHERE STATUS IN (0,1)
883 AND CO_ID = ponContractId;
884
885
886 CURSOR locConCurrentExecRequForSnMod
887 (posProcess CONCURRENT_REQUEST.PROCESS%TYPE,
888 ponSeqNo CONCURRENT_REQUEST.SEQNO%TYPE,
889 ponActionId CONCURRENT_REQUEST.ACTION_ID%TYPE,
890 ponContractId CONCURRENT_REQUEST.CO_ID%TYPE,
891 ponSncode CONCURRENT_REQUEST.SNCODE%TYPE,
892 posCommand CONCURRENT_REQUEST.COMMAND%TYPE,
893 posSysDate VARCHAR2)
894 IS
895 SELECT a.SEQNO
896 FROM CONCURRENT_REQUEST a, CONCURR_REQ_OPPOSITE_ACTION b
897 WHERE a.action_id = b.pred_action_id
898 AND a.action_id = b.succ_action_id
899 AND a.action_id = ponActionId
900 AND NVL(a.process, posSysDate) <> NVL(posProcess, posSysDate)
901 AND a.seqno < ponSeqNo
902 AND a.status = 1
903 AND a.co_id = ponContractId
904 AND a.sncode = ponSncode
905 AND NVL(a.command, posSysDate) = b.succ_command
906 AND a.gmd_request_id IS NOT NULL;
907
908 lonCount INTEGER := 0;
909 lanExecutedRequest tannumberarray;
910BEGIN
911
912 -- This timestamp will be used in the above SQL statements to alternate null values (see parameter posProcess or posCommand)
913 losSysDate := TO_CHAR(SYSDATE, 'YYYY:MM:DD:HH24:MI:SS');
914
915 ----------------------------------------
916 -- move cancelled requests to the history
917 ----------------------------------------
918 OPEN locConCurrentRequestCancelled;
919 LOOP
920 FETCH locConCurrentRequestCancelled INTO lonSeqNo;
921 EXIT WHEN locConCurrentRequestCancelled%NOTFOUND;
922 MoveToConCurrentRequestHistory(lonSeqNo);
923 END LOOP;
924 CLOSE locConCurrentRequestCancelled;
925
926 ------------------------------
927 -- read the concurrent request
928 ------------------------------
929 OPEN locConCurrentRequest;
930 FETCH locConCurrentRequest INTO lonSeqNo, losProcess, lonSncode, lonActionId, losCommand;
931 IF locConCurrentRequest%FOUND
932 THEN
933 isConcurrentRequest := true;
934 END IF;
935 CLOSE locConCurrentRequest;
936
937 IF isConcurrentRequest
938 THEN
939 -------------------------------------------
940 -- copy to concurrent request history table
941 -------------------------------------------
942 IF lonSncode IS NULL
943 THEN
944 OPEN locConCurrentOppositeRequestII(losProcess, lonSeqNo, lonActionId, pionContractId, losCommand, losSysDate);
945 FETCH locConCurrentOppositeRequestII INTO lonPredSeqNo;
946 IF locConCurrentOppositeRequestII%FOUND
947 THEN
948 -- first the predecessor request
949 MoveToConCurrentRequestHistory(lonPredSeqNo);
950 -- second the successor request
951 MoveToConCurrentRequestHistory(lonSeqNo);
952 END IF;
953 CLOSE locConCurrentOppositeRequestII;
954 ELSE
955 OPEN locConCurrentOppositeRequestI(losProcess, lonSeqNo, lonActionId, pionContractId, lonSncode, losCommand, losSysDate);
956 FETCH locConCurrentOppositeRequestI INTO lonPredSeqNo;
957 IF locConCurrentOppositeRequestI%FOUND
958 THEN
959 -- first the predecessor request
960 MoveToConCurrentRequestHistory(lonPredSeqNo);
961 -- second the successor request
962 MoveToConCurrentRequestHistory(lonSeqNo);
963 END IF;
964 CLOSE locConCurrentOppositeRequestI;
965 END IF;
966
967
968 END IF; -- IF isConcurrentRequest
969
970 ---------------------------------------
971 -- copy executed request to the history
972 ---------------------------------------
973 FOR executedConCurrentRequest IN locConCurrentExecutedRequest(pionContractId)
974 LOOP
975
976 IF executedConCurrentRequest.SNCODE IS NULL
977 THEN
978 OPEN locConCurrentOppositeRequestII(executedConCurrentRequest.PROCESS,
979 executedConCurrentRequest.SEQNO,
980 executedConCurrentRequest.ACTION_ID,
981 pionContractId,
982 executedConCurrentRequest.COMMAND,
983 losSysDate);
984 FETCH locConCurrentOppositeRequestII INTO lonPredSeqNo;
985 IF locConCurrentOppositeRequestII%FOUND
986 THEN
987 lonCount := lonCount+1;
988 lanExecutedRequest(lonCount) := lonPredSeqNo;
989 lonCount := lonCount+1;
990 lanExecutedRequest(lonCount) := executedConCurrentRequest.SEQNO;
991 END IF;
992 CLOSE locConCurrentOppositeRequestII;
993
994 ELSE
995 OPEN locConCurrentOppositeRequestI(executedConCurrentRequest.PROCESS,
996 executedConCurrentRequest.SEQNO,
997 executedConCurrentRequest.ACTION_ID,
998 pionContractId,
999 executedConCurrentRequest.SNCODE,
1000 executedConCurrentRequest.COMMAND,
1001 losSysDate);
1002 FETCH locConCurrentOppositeRequestI INTO lonPredSeqNo;
1003 IF locConCurrentOppositeRequestI%FOUND
1004 THEN
1005 lonCount := lonCount+1;
1006 lanExecutedRequest(lonCount) := lonPredSeqNo;
1007 lonCount := lonCount+1;
1008 lanExecutedRequest(lonCount) := executedConCurrentRequest.SEQNO;
1009 END IF;
1010 CLOSE locConCurrentOppositeRequestI;
1011 END IF;
1012 END LOOP;
1013
1014 IF lonCount > 0
1015 THEN
1016 FOR i IN 1..lonCount
1017 LOOP
1018 MoveToConCurrentRequestHistory(lanExecutedRequest(i));
1019 END LOOP;
1020
1021 END IF;
1022
1023 ---------------------------------------------
1024 -- special handling for contract deactivation
1025 -- copy executed request to the history
1026 ---------------------------------------------
1027 IF (pionActionId IN (2, 5, 59, 15002, 3))
1028 THEN
1029 --FOR executedConCurrentRequest IN locConCurrentExecutedRequest(pionContractId) PN 00340608
1030 FOR executedConCurrentRequest IN locConCurrentExecRequForDeact(pionContractId)
1031 LOOP
1032 OPEN locConCurrentOppositeRequestII(executedConCurrentRequest.PROCESS,
1033 executedConCurrentRequest.SEQNO,
1034 executedConCurrentRequest.ACTION_ID,
1035 pionContractId,
1036 executedConCurrentRequest.COMMAND,
1037 losSysDate);
1038 FETCH locConCurrentOppositeRequestII INTO lonPredSeqNo;
1039 IF locConCurrentOppositeRequestII%NOTFOUND
1040 THEN
1041 MoveToConCurrentRequestHistory(executedConCurrentRequest.SEQNO);
1042 END IF;
1043 CLOSE locConCurrentOppositeRequestII;
1044 END LOOP;
1045 END IF;
1046
1047
1048
1049 -------------------------------------------------------
1050 -- special handling for barring service modificatiom
1051 -- copy executed request to the history
1052 -------------------------------------------------------
1053 IF (pionActionId IN (10))
1054 THEN
1055 IF isConcurrentRequest
1056 THEN
1057 OPEN locConCurrentExecRequForSnMod(losProcess, lonSeqNo, lonActionId, pionContractId, lonSncode, losCommand, losSysDate);
1058 FETCH locConCurrentExecRequForSnMod INTO lonPredSeqNo;
1059 IF locConCurrentExecRequForSnMod%FOUND
1060 THEN
1061 MoveToConCurrentRequestHistory(lonPredSeqNo);
1062 END IF;
1063 CLOSE locConCurrentExecRequForSnMod;
1064 END IF; -- IF isConcurrentRequest
1065 END IF;
1066
1067END HandleConCurrentRequest;
1068
1069
1070/*
1071** =====================================================================
1072** Cancel conconrrent request and reset all requests to unexecuted
1073** which are cancelled automatically with this concurrent request.
1074**
1075** F276491 CWLEE
1076** =====================================================================
1077*/
1078PROCEDURE CancelConcurrentRequest(
1079 pionRequest IN MDSRRTAB.REQUEST%TYPE,
1080 pionContractId IN MDSRRTAB.CO_ID%TYPE)
1081
1082IS
1083 lonSeqNo CONCURRENT_REQUEST.SEQNO%TYPE;
1084 lonSncode CONCURRENT_REQUEST.SNCODE%TYPE;
1085 lonActionId CONCURRENT_REQUEST.ACTION_ID%TYPE;
1086 lodtModDate CONCURRENT_REQUEST.MOD_DATE%TYPE;
1087
1088 --
1089 --
1090 CURSOR locConCurrentRequest
1091 IS
1092 SELECT SEQNO, SNCODE, ACTION_ID, MOD_DATE
1093 FROM CONCURRENT_REQUEST
1094 WHERE GMD_REQUEST_ID = pionRequest
1095 AND CO_ID = pionContractId
1096 AND STATUS = 1;
1097
1098 isConcurrentRequest boolean := false;
1099
1100BEGIN
1101
1102 OPEN locConCurrentRequest;
1103 FETCH locConCurrentRequest INTO lonSeqNo, lonSncode, lonActionId, lodtModDate;
1104 IF locConCurrentRequest%FOUND
1105 THEN
1106 isConcurrentRequest := true;
1107 END IF;
1108 CLOSE locConCurrentRequest;
1109
1110 IF isConcurrentRequest
1111 THEN
1112 /* reset all concurrent requests to unexecuted that were automatically cancelled because of the concurrent request associated with the GMD request to cancel */
1113 UPDATE CONCURRENT_REQUEST
1114 SET STATUS = 0
1115 WHERE STATUS = 2
1116 AND trunc(MOD_DATE) = trunc(lodtModDate)
1117 AND CO_ID = pionContractId
1118 AND GMD_REQUEST_ID <> pionRequest;
1119 /* cancel also the concurrent request associated with the GMD request that shall be cancelled */
1120 UPDATE CONCURRENT_REQUEST
1121 SET STATUS = 2
1122 WHERE GMD_REQUEST_ID = pionRequest;
1123
1124 IF lonActionId IN (10) THEN
1125 MoveToConCurrentRequestHistory(lonSeqNo);
1126 END IF;
1127
1128 END IF;
1129
1130END CancelConcurrentRequest;
1131
1132/*
1133 ** =====================================================================
1134 **
1135 ** Function: HandlePendingScheduledJobs
1136 **
1137 ** Purpose: This funtion sets the state of related scheduled jobs from on-hold to active
1138 **
1139 ** =====================================================================
1140 */
1141 PROCEDURE HandlePendingScheduledJob
1142 (
1143 pionContractId IN mdsrrtab.co_id%TYPE,
1144 pionTransactionId IN SCHEDULED_JOB.TRANSACTION_ID%TYPE
1145 )
1146 IS
1147
1148 BEGIN
1149 -- records are activated in SCHEDULED_JOB
1150 update SCHEDULED_JOB set JOB_STATUS = 'a' where CONTRACT_ID = pionContractId and TRANSACTION_ID = pionTransactionId;
1151
1152 END HandlePendingScheduledJob;
1153
1154 /*
1155 ** =====================================================================
1156 **
1157 ** Function: CancelPendingScheduledJob
1158 **
1159 ** Purpose: This funtion deletes the state of related scheduled jobs from on-hold to active
1160 **
1161 ** =====================================================================
1162 */
1163 PROCEDURE CancelPendingScheduledJob
1164 (
1165 pionRequest IN mdsrrtab.request%TYPE,
1166 piosUser IN mdsrrtab.userid%TYPE,
1167 pionContractId IN mdsrrtab.co_id%TYPE,
1168 pionTransactionId IN SCHEDULED_JOB.TRANSACTION_ID%TYPE
1169 )
1170 IS
1171 losLongDescription TICKLER_RECORDS.LONG_DESCRIPTION%TYPE;
1172
1173
1174 CURSOR locPendingScheduledJob IS
1175 select
1176 CUSTOMER_ID, CONTRACT_ID, LABEL1, SHORT_DESCRIPTION
1177 from SCHEDULED_JOB SJ, SCHEDULED_JOB_TYPE SJT
1178 where SJ.JOB_TYPE_ID = SJT.JOB_TYPE_ID and
1179 SJ.CONTRACT_ID = pionContractId and SJ.TRANSACTION_ID = pionTransactionId and SJ.JOB_STATUS = 'h';
1180
1181 BEGIN
1182
1183 -- records are copied to the SCHEDULED_JOB_HISTORY
1184 insert into SCHEDULED_JOB_HISTORY (
1185 JOB_ID, VERSION, CUSTOMER_ID, CONTRACT_ID, CP_ID,
1186 BUSINESS_UNIT_ID, DEALER_ID, JOB_TYPE_ID, JOB_STATUS, REMARK,
1187 ERROR, LABEL1, LABEL2, LABEL3, RECURRING_PERIOD,
1188 ENTRY_DATE, JOB_EXECUTION_ID, JOB_EXECUTION_DATE, INITIATOR, LAST_MOD_DATE,
1189 LAST_MOD_USER, INPUT, JOB_CODE, DESCRIPTION, PROCESS, TRANSACTION_ID
1190 )
1191 select
1192 JOB_ID, 1, CUSTOMER_ID, CONTRACT_ID, CP_ID,
1193 BUSINESS_UNIT_ID, DEALER_ID, JOB_TYPE_ID, JOB_STATUS, REMARK,
1194 ERROR, LABEL1, LABEL2, LABEL3, RECURRING_PERIOD,
1195 ENTRY_DATE, JOB_EXECUTION_ID, JOB_EXECUTION_DATE, INITIATOR, LAST_MOD_DATE,
1196 LAST_MOD_USER, INPUT, JOB_CODE, DESCRIPTION, PROCESS, TRANSACTION_ID
1197 from SCHEDULED_JOB
1198 where CONTRACT_ID = pionContractId and TRANSACTION_ID = pionTransactionId and JOB_STATUS = 'h';
1199
1200
1201 -- a tickler shall be written that the scheduled job was canceled due to the cancelation of the request
1202 FOR xcrPendingScheduledJob IN locPendingScheduledJob LOOP
1203
1204 losLongDescription := 'Scheduled job was canceled due to the cancelation of the request ' || pionRequest || '. ' ||
1205 'Scheduled job type with public key: ' || xcrPendingScheduledJob.SHORT_DESCRIPTION || '. ' ||
1206 'Containing offer with public key: ' || xcrPendingScheduledJob.LABEL1;
1207
1208 Tickler.AddNewTickler(
1209 xcrPendingScheduledJob.CUSTOMER_ID, -- Customer ID
1210 xcrPendingScheduledJob.CONTRACT_ID, -- Contract ID
1211 'NOTE', -- The status of this tickler
1212 3, -- The priority of the tickler
1213 null, -- Follow up user
1214 'CC CANCEL CS BUNDLE', -- A short description
1215 losLongDescription, -- A long description
1216 piosUser, -- The User
1217 'SYSTEM'); -- The tickler code
1218
1219 END LOOP;
1220
1221
1222 -- records are deleted in SCHEDULED_JOB
1223 delete from SCHEDULED_JOB
1224 where CONTRACT_ID = pionContractId and TRANSACTION_ID = pionTransactionId and JOB_STATUS = 'h';
1225
1226 END CancelPendingScheduledJob;
1227
1228
1229-- FEATURE 276992 / PN 00293425 AV
1230/*
1231** =====================================================================
1232**
1233** Function: Finish_ChangeAdvanceAccCharge
1234**
1235** Purpose: This funtions ....
1236**
1237** =====================================================================
1238*/
1239PROCEDURE Finish_ChangeAdvanceAccCharge (
1240 pionRequest IN mdsrrtab.request%TYPE
1241)
1242IS
1243 lonResult INTEGER;
1244BEGIN
1245
1246 lonResult := NULL;
1247
1248END Finish_ChangeAdvanceAccCharge;
1249
1250
1251/*
1252** =====================================================================
1253**
1254** Function: Cancel_ChangeAdvanceAccCharge
1255**
1256** Purpose: This funtions ....
1257**
1258** =====================================================================
1259*/
1260PROCEDURE Cancel_ChangeAdvanceAccCharge (
1261 pionRequest IN mdsrrtab.request%TYPE
1262)
1263IS
1264 lonResult INTEGER;
1265BEGIN
1266
1267 lonResult := NULL;
1268
1269END Cancel_ChangeAdvanceAccCharge;
1270-- FEATURE 276992 / PN 00293425 AV
1271
1272
1273-- FEATURE 283543 USC
1274/*
1275** =====================================================================
1276**
1277** Function: Finish_ChangeIVRLanguage
1278**
1279** Purpose: This funtion finishes request with action id 68, used for the
1280** change of the IVR language.
1281**
1282** =====================================================================
1283*/
1284PROCEDURE Finish_ChangeIVRLanguage (
1285 pionContractId IN CONTRACT_HISTORY.co_id%TYPE )
1286IS
1287 CURSOR locContractPendingIVR IS
1288 SELECT PENDING_LANGUAGE
1289 FROM CONTRACT_ALL
1290 WHERE CO_ID = pionContractId
1291 FOR UPDATE OF PENDING_LANGUAGE, CONTRACT_LANGUAGE, REC_VERSION
1292 NOWAIT;
1293 lonIVLanguageCode CONTRACT_ALL.PENDING_LANGUAGE%TYPE;
1294BEGIN
1295 OPEN locContractPendingIVR;
1296 FETCH locContractPendingIVR INTO lonIVLanguageCode;
1297
1298 -- check if the language is pending at all
1299 IF lonIVLanguageCode IS NULL THEN
1300 CLOSE locContractPendingIVR;
1301 gosErrorText := 'Finish_ChangeIVRLanguage: PENDING_LANGUAGE IS NULL';
1302 RAISE geoApplicationError;
1303 END IF;
1304 -- Update Contract with new contract language, remove pending language
1305 UPDATE CONTRACT_ALL
1306 SET CONTRACT_LANGUAGE = lonIVLanguageCode,
1307 PENDING_LANGUAGE = NULL,
1308 REC_VERSION = REC_VERSION + 1
1309 WHERE CO_ID = pionContractId;
1310
1311 CLOSE locContractPendingIVR;
1312END Finish_ChangeIVRLanguage;
1313
1314/*
1315** =====================================================================
1316**
1317** Function: Cancel_ChangeIVRLanguage
1318**
1319** Purpose: This funtion cancels the request for a IVR language change.
1320**
1321** =====================================================================
1322*/
1323PROCEDURE Cancel_ChangeIVRLanguage (
1324 pionContractId IN CONTRACT_HISTORY.co_id%TYPE )
1325IS
1326CURSOR locContractPendingIVR IS
1327 SELECT PENDING_LANGUAGE
1328 FROM CONTRACT_ALL
1329 WHERE CO_ID = pionContractId
1330 FOR UPDATE OF PENDING_LANGUAGE, REC_VERSION NOWAIT;
1331 lonIVLanguageCode CONTRACT_ALL.PENDING_LANGUAGE%TYPE;
1332
1333BEGIN
1334 OPEN locContractPendingIVR;
1335 FETCH locContractPendingIVR INTO lonIVLanguageCode;
1336 IF lonIVLanguageCode IS NULL THEN
1337 CLOSE locContractPendingIVR;
1338 gosErrorText := 'Cancel_ChangeIVRLanguage: PENDING_LANGUAGE IS NULL';
1339 RAISE geoApplicationError;
1340 END IF;
1341
1342 UPDATE CONTRACT_ALL
1343 SET PENDING_LANGUAGE = NULL,
1344 REC_VERSION = REC_VERSION + 1
1345 WHERE CO_ID = pionContractId;
1346 CLOSE locContractPendingIVR;
1347
1348END Cancel_ChangeIVRLanguage;
1349
1350/*
1351** =====================================================================
1352**
1353** Function: Finish_ChangeLifeCycle
1354**
1355** Purpose: This funtion finishes request with action id 63, used for the
1356** change of the life cycle dates.
1357**
1358** =====================================================================
1359*/
1360PROCEDURE Finish_ChangeLifeCycle (
1361 pionRequest IN mdsrrtab.request%TYPE,
1362 pionContractId IN CONTRACT_HISTORY.co_id%TYPE )
1363IS
1364 piodEffectiveDate DATE;
1365BEGIN
1366 piodEffectiveDate := GetEffectiveDate(pionRequest);
1367
1368 -- Update Contract with new contract language, remove pending language
1369 UPDATE PREPAID_LC_ATTR_HIST
1370 SET VALID_FROM = piodEffectiveDate
1371 WHERE CO_ID = pionContractId AND REQUEST=pionRequest;
1372 -- check if at least one entry was updated
1373 IF SQL%ROWCOUNT=0 THEN
1374 gosErrorText := 'Finish_ChangeLifeCycle: no pending entry found in PREPAID_LC_ATTR_HIST';
1375 RAISE geoApplicationError;
1376 end if;
1377 -- update the charge start date, if this is the life cycle activation request
1378 UPDATE CONTRACT_ALL
1379 SET CHARGE_START_DATE = piodEffectiveDate
1380 WHERE CO_ID = pionContractID AND CHARGE_START_DATE IS NULL
1381 AND CONTRACT_TYPE_ID NOT IN (SELECT CT.CONTRACT_TYPE_ID FROM CONTRACT_TYPE CT WHERE CT.SHNAME ='NOPAS');
1382
1383END Finish_ChangeLifeCycle;
1384
1385-- FEATURE 283543 USC
1386/*
1387** =====================================================================
1388**
1389** Function: RetentionDirNumAllowed
1390**
1391** Purpose: This function checks if retention
1392** is allowed for a specified directory number
1393**
1394** Return: 0 - Retention not possible
1395** 1 - Retention possible
1396** =====================================================================
1397*/
1398FUNCTION RetentionDirNumAllowed(
1399 pionDnId IN DIRECTORY_NUMBER.dn_id%TYPE)
1400RETURN INTEGER IS
1401 CURSOR locDirNum IS
1402 -- SELECT mpdsctab.dirnum_active, directory_number.block_ind
1403 SELECT RES_DIRNUM_STRUCTURE.dirnum_active_flag, DIRECTORY_NUMBER.block_ind
1404 -- FROM directory_number, mpdpltab, mpdsctab
1405 FROM DIRECTORY_NUMBER, MPDPLTAB, RES_DIRNUM_STRUCTURE
1406 WHERE DIRECTORY_NUMBER.dn_id = pionDnId
1407 AND DIRECTORY_NUMBER.plcode = MPDPLTAB.plcode
1408 -- AND mpdpltab.sccode = mpdsctab.sccode;
1409 AND MPDPLTAB.sccode = RES_DIRNUM_STRUCTURE.sccode;
1410 lcrDirNum locDirNum%ROWTYPE;
1411 lonResult INTEGER := conRetentionNotPossible;
1412 lonActiveContracts INTEGER;
1413BEGIN
1414 OPEN locDirNum;
1415 FETCH locDirNum
1416 INTO lcrDirNum;
1417 IF locDirNum%FOUND THEN
1418 -- check if market supports active resources
1419 -- IF lcrDirNum.dirnum_active = 'X' AND lcrDirNum.block_ind != 'Y'
1420 IF lcrDirNum.dirnum_active_flag = 'X' AND lcrDirNum.block_ind != 'Y' THEN
1421 SELECT COUNT(*)
1422 INTO lonActiveContracts
1423 FROM CONTR_SERVICES_CAP
1424 WHERE dn_id = pionDnId
1425 AND cs_deactiv_date IS NULL;
1426 -- Retention possible if this dn is not active in other contracts
1427 IF lonActiveContracts = 0 THEN
1428 lonResult := conRetentionPossible;
1429 END IF;
1430 ELSE -- block directory number or market supports no active dns
1431 lonResult := conRetentionPossible;
1432 END IF;
1433 ELSE -- DirNum not found
1434 gosErrorText := 'RetentionDirNumAllowed: ' ||
1435 'Unkown DNID (' || pionDnId || ')';
1436 RAISE geoApplicationError;
1437 END IF;
1438 CLOSE locDirNum;
1439 RETURN lonResult;
1440END RetentionDirNumAllowed;
1441/*
1442** =====================================================================
1443**
1444** Function: RetentionPortAllowed
1445**
1446** Purpose: This function checks if retention
1447** is allowed for a specified port number
1448**
1449** Return: 0 - Retention not possible
1450** 1 - Retention possible
1451** =====================================================================
1452*/
1453FUNCTION RetentionPortAllowed(
1454 pionPortId IN PORT.port_id%TYPE)
1455RETURN INTEGER IS
1456 CURSOR locPort IS
1457 -- SELECT mpdsctab.port_active,
1458 SELECT RES_PORT_STRUCTURE.port_active_flag,
1459 MPDSCTAB.sc_mkt_struct,
1460 MPDSCTAB.scnettype
1461 -- FROM port, mpdpltab, mpdsctab
1462 FROM PORT, MPDPLTAB, MPDSCTAB, RES_PORT_STRUCTURE
1463 WHERE PORT.port_id = pionPortId
1464 AND PORT.plcode = MPDPLTAB.plcode
1465 AND MPDPLTAB.sccode = MPDSCTAB.sccode
1466 AND MPDSCTAB.sccode = RES_PORT_STRUCTURE.sccode;
1467 lcrPort locPort%ROWTYPE;
1468 lonResult INTEGER := conRetentionNotPossible;
1469 lonActiveContracts INTEGER;
1470 lonMarketId INTEGER; -- internal Id of market type
1471BEGIN
1472 OPEN locPort;
1473 FETCH locPort
1474 INTO lcrPort;
1475 IF locPort%FOUND THEN
1476 -- check if market supports active resources
1477 -- and is not ermes like
1478 -- IF lcrPort.port_active = 'X' AND lcrPort.sc_mkt_struct != 'E'
1479 IF lcrPort.port_active_flag = 'X' AND lcrPort.sc_mkt_struct != 'E' THEN
1480 lonMarketId := GetIdOfMarketType( lcrPort.scnettype);
1481 IF lonMarketId = conServiceDriven THEN
1482 SELECT COUNT(*)
1483 INTO lonActiveContracts
1484 FROM CONTR_SERVICES_PORT
1485 WHERE port_id = pionPortId
1486 AND ( csp_status != 'R' OR csp_status IS NULL );
1487 ELSE
1488 SELECT COUNT(*)
1489 INTO lonActiveContracts
1490 FROM CONTR_DEVICES
1491 WHERE port_id = pionPortId
1492 AND cd_deactiv_date IS NULL;
1493 END IF;
1494 -- Retention possible if this port is not active in other contracts
1495 IF lonActiveContracts = 0 THEN
1496 lonResult := conRetentionPossible;
1497 END IF;
1498 ELSE
1499 lonResult := conRetentionPossible;
1500 END IF;
1501 ELSE
1502 gosErrorText := 'RetentionPortAllowed: ' ||
1503 'Unkown PortId (' || pionPortId || ')';
1504 RAISE geoApplicationError;
1505 END IF;
1506 CLOSE locPort;
1507 RETURN lonResult;
1508END RetentionPortAllowed;
1509/*
1510** =====================================================================
1511**
1512** Function: RetentionStorMedAllowed
1513**
1514** Purpose: This function checks if retention
1515** is allowed for a specified storage medium number
1516**
1517** Return: 0 - Retention not possible
1518** 1 - Retention possible
1519** =====================================================================
1520*/
1521FUNCTION RetentionStorMedAllowed(
1522 pionSMId IN STORAGE_MEDIUM.sm_id%TYPE)
1523RETURN INTEGER IS
1524 CURSOR locStorMed IS
1525 SELECT MPDSCTAB.stormed_active
1526 FROM STORAGE_MEDIUM, MPDPLTAB, MPDSCTAB
1527 WHERE STORAGE_MEDIUM.sm_id = pionSMId
1528 AND STORAGE_MEDIUM.plcode = MPDPLTAB.plcode
1529 AND MPDPLTAB.sccode = MPDSCTAB.sccode;
1530 lcrStorMed locStorMed%ROWTYPE;
1531 lonResult INTEGER := conRetentionNotPossible;
1532 lonActiveContracts INTEGER;
1533BEGIN
1534 OPEN locStorMed;
1535 FETCH locStorMed
1536 INTO lcrStorMed;
1537 IF locStorMed%FOUND THEN
1538 -- check if market supports active resources
1539 IF lcrStorMed.stormed_active = 'X' THEN
1540 SELECT COUNT(*)
1541 INTO lonActiveContracts
1542 FROM CONTR_DEVICES, PORT
1543 WHERE PORT.sm_id = pionSmId
1544 AND PORT.port_id = CONTR_DEVICES.port_id
1545 AND CONTR_DEVICES.cd_deactiv_date IS NULL;
1546 -- Retention possible if this sm is not active in other contracts
1547 IF lonActiveContracts = 0 THEN
1548 lonResult := conRetentionPossible;
1549 END IF;
1550 ELSE
1551 lonResult := conRetentionPossible;
1552 END IF;
1553 ELSE
1554 gosErrorText := 'RetentionStorMed: ' ||
1555 'Unkown SMID (' || pionSMId || ')';
1556 RAISE geoApplicationError;
1557 END IF;
1558 CLOSE locStorMed;
1559 RETURN lonResult;
1560END RetentionStorMedAllowed;
1561/*
1562** =====================================================================
1563**
1564** Procedure: SetBlockNumberStatus
1565**
1566** Purpose: set the status of block directory numbers
1567**
1568** =====================================================================
1569*/
1570PROCEDURE SetBlockNumberStatus(
1571 pionDnId IN DIRECTORY_NUMBER.dn_id%TYPE)
1572IS
1573 CURSOR locDirNumBlock IS -- Does a free block exist?
1574 SELECT 1
1575 FROM DIRECTORY_NUMBER_BLOCK
1576 WHERE DN_ID = pionDnId
1577 AND DNB_STATUS = 'f'
1578 AND DNB_REQUESTED_STATUS IS NULL
1579 AND ROWNUM = 1;
1580 lcrDirNumBlock locDirNumBlock%ROWTYPE; -- dummy into variable
1581BEGIN
1582 OPEN locDirNumBlock;
1583 FETCH locDirNumBlock
1584 INTO lcrDirNumBlock;
1585 IF locDirNumBlock%FOUND THEN
1586 UPDATE DIRECTORY_NUMBER
1587 SET DEALER_ID = DECODE( EXTERNAL_IND, 'Y', NULL, DEALER_ID),
1588 DN_ASSIGN_DATE = DECODE( EXTERNAL_IND, 'Y', NULL, DN_ASSIGN_DATE),
1589 DN_STATUS = DECODE( EXTERNAL_IND, 'Y', 'f', 'r'),
1590 DN_STATUS_MOD_DATE = SYSDATE,
1591 DN_MODDATE = SYSDATE,
1592 REC_VERSION = REC_VERSION + 1
1593 WHERE DN_ID = pionDnID
1594 AND DN_STATUS = 'a';
1595 ELSE
1596 UPDATE DIRECTORY_NUMBER
1597 SET DN_STATUS = 'a',
1598 DN_STATUS_MOD_DATE = SYSDATE,
1599 DN_MODDATE = SYSDATE,
1600 REC_VERSION = REC_VERSION + 1
1601 WHERE DN_ID = pionDnID
1602 AND DN_STATUS != 'a';
1603 END IF;
1604 CLOSE locDirNumBlock;
1605END SetBlockNumberStatus;
1606/*
1607** =====================================================================
1608**
1609** Procedure: Cancel_BlockNumberSplitting
1610**
1611** Purpose: Cancel new entries from block number splitting
1612**
1613** =====================================================================
1614*/
1615PROCEDURE Cancel_BlockNumberSplitting(
1616 pionDnId IN DIRECTORY_NUMBER_BLOCK.dn_id%TYPE,
1617 pionRequest IN DIRECTORY_NUMBER_BLOCK.dnb_request%TYPE)
1618IS
1619BEGIN
1620 DELETE FROM DIRECTORY_NUMBER_BLOCK
1621 WHERE DN_ID = pionDnID
1622 AND DNB_REQUEST = pionRequest
1623 AND DNB_STATUS IS NULL;
1624 UPDATE DIRECTORY_NUMBER_BLOCK
1625 SET DNB_REQUESTED_STATUS = NULL,
1626 STATUS_MOD_DATE = SYSDATE,
1627 REC_VERSION = REC_VERSION + 1
1628 WHERE DN_ID = pionDnID
1629 AND DNB_REQUEST = pionRequest
1630 AND DNB_REQUESTED_STATUS IS NOT NULL;
1631 SetBlockNumberStatus( pionDnId );
1632END Cancel_BlockNumberSplitting;
1633/*
1634** =====================================================================
1635**
1636** Procedure: Finish_BlockNumberSplitting
1637**
1638** Purpose: set the status of number blocks after splitting
1639**
1640** =====================================================================
1641*/
1642PROCEDURE Finish_BlockNumberSplitting(
1643 pionDnId IN DIRECTORY_NUMBER_BLOCK.dn_id%TYPE,
1644 pionRequest IN DIRECTORY_NUMBER_BLOCK.dnb_request%TYPE)
1645IS
1646 /* begin defect 203433 */
1647 piodEffectiveDate DATE;
1648BEGIN
1649 piodEffectiveDate := GetEffectiveDate(pionRequest);
1650 /* end defect 203433 */
1651 -- update status in directory_number_block
1652 UPDATE DIRECTORY_NUMBER_BLOCK
1653 SET DNB_STATUS = DNB_REQUESTED_STATUS,
1654 DNB_REQUESTED_STATUS = NULL,
1655 /* begin defect 203433 */
1656 --STATUS_MOD_DATE = SYSDATE,
1657 STATUS_MOD_DATE = piodEffectiveDate,
1658 /* end defect 203433 */
1659 REC_VERSION = REC_VERSION + 1
1660 WHERE DN_ID = pionDnID
1661 AND DNB_REQUEST = pionRequest
1662 AND DNB_REQUESTED_STATUS IS NOT NULL;
1663 SetBlockNumberStatus( pionDnId );
1664END Finish_BlockNumberSplitting;
1665/*
1666** =====================================================================
1667**
1668** Procedure: CancelPendingContract
1669**
1670** =====================================================================
1671*/
1672PROCEDURE CancelPendingContract(
1673pionContractId IN NUMBER) IS
1674BEGIN
1675 DELETE FROM CONTRACT_HISTORY
1676 WHERE CO_ID = pionContractId
1677 AND CH_PENDING = cosMarkPending;
1678 IF SQL%ROWCOUNT != 1 THEN
1679 gosErrorText := 'Contract has not exactly one pending ' ||
1680 'entry in CONTRACT_HISTORY';
1681 RAISE geoApplicationError;
1682 END IF;
1683END CancelPendingContract;
1684/*
1685** =====================================================================
1686**
1687** Procedure: FinishPendingContract
1688**
1689** =====================================================================
1690*/
1691PROCEDURE FinishPendingContract(
1692 pionContractId IN NUMBER,
1693 pionRequest IN NUMBER)
1694IS
1695lodtEffectiveDate DATE;
1696BEGIN
1697 lodtEffectiveDate := GetEffectiveDate(pionRequest);
1698
1699 UPDATE CONTRACT_ALL
1700 SET CH_STATUS = (SELECT CH_STATUS FROM CONTRACT_HISTORY WHERE CO_ID = pionContractID AND CH_PENDING = cosMarkPending), CH_STATUS_VALIDFROM=lodtEffectiveDate
1701 WHERE CO_ID = pionContractID;
1702
1703 UPDATE CONTRACT_HISTORY
1704 SET CH_PENDING = NULL,
1705 CH_VALIDFROM = lodtEffectiveDate,
1706 REC_VERSION = REC_VERSION + 1
1707 WHERE CO_ID = pionContractID
1708 AND CH_PENDING = cosMarkPending;
1709 IF SQL%ROWCOUNT != 1 THEN
1710 gosErrorText := 'Contract has not exactly one pending ' ||
1711 'entry in CONTRACT_HISTORY';
1712 RAISE geoApplicationError;
1713 END IF;
1714END FinishPendingContract;
1715
1716/*
1717** =====================================================================
1718**
1719** Procedure: RetentionStorageMedium
1720**
1721** =====================================================================
1722*/
1723PROCEDURE RetentionStorageMedium(
1724 pionSMId IN STORAGE_MEDIUM.SM_ID%TYPE,
1725 piosRetentionMode VARCHAR2 DEFAULT NULL,
1726 /* begin defect 203433 */
1727 pionRequest IN CONTRACT_HISTORY.request%TYPE DEFAULT NULL)
1728IS
1729 /* begin defect 203433 */
1730 piodEffectiveDate DATE;
1731BEGIN
1732 piodEffectiveDate := GetEffectiveDate(pionRequest);
1733 /* end defect 203433 */
1734 IF RetentionStorMedAllowed( pionSMID ) = conRetentionPossible THEN
1735 IF piosRetentionMode IS NULL THEN
1736 UPDATE STORAGE_MEDIUM
1737 SET SM_STATUS = SM_STATUS_REQU,
1738 /* begin defect 203433 */
1739 --SM_STATUS_MOD_DATE = SYSDATE,
1740 SM_STATUS_MOD_DATE = piodEffectiveDate,
1741 /* end defect 203433 */
1742 DEALER_ID = DECODE( SM_STATUS_REQU, 'f', NULL, DEALER_ID),
1743 BUSINESS_UNIT_ID = DECODE( SM_STATUS_REQU, 'f', NULL, BUSINESS_UNIT_ID), -- 326229/d
1744 SM_STATUS_REQU = NULL,
1745 SM_MODDATE = SYSDATE,
1746 REC_VERSION = REC_VERSION + 1
1747 WHERE SM_ID = pionSMId
1748 AND SM_STATUS_REQU IS NOT NULL;
1749 ELSE
1750 UPDATE STORAGE_MEDIUM
1751 SET SM_STATUS = piosRetentionMode,
1752 /* begin defect 203433 */
1753 --SM_STATUS_MOD_DATE = SYSDATE,
1754 SM_STATUS_MOD_DATE = piodEffectiveDate,
1755 /* end defect 203433 */
1756 DEALER_ID = DECODE( piosRetentionMode, 'f', NULL, DEALER_ID),
1757 BUSINESS_UNIT_ID = DECODE( SM_STATUS_REQU, 'f', NULL, BUSINESS_UNIT_ID), -- 326229/d
1758 SM_MODDATE = SYSDATE,
1759 REC_VERSION = REC_VERSION + 1
1760 WHERE SM_ID = pionSMId;
1761 END IF;
1762 ELSE -- retention not allowed
1763 UPDATE STORAGE_MEDIUM
1764 SET SM_STATUS_REQU = NULL,
1765 SM_MODDATE = SYSDATE,
1766 REC_VERSION = REC_VERSION + 1
1767 WHERE SM_ID = pionSMId
1768 AND SM_STATUS_REQU IS NOT NULL;
1769 END IF; -- RetentionPossible?
1770END RetentionStorageMedium;
1771/*
1772** =====================================================================
1773**
1774** Procedure: RetentionPort
1775**
1776** =====================================================================
1777*/
1778PROCEDURE RetentionPort(
1779 pionPortId IN PORT.PORT_ID%TYPE,
1780 piosRetentionMode VARCHAR2 DEFAULT NULL,
1781 /* begin defect 203433 */
1782 pionRequest IN CONTRACT_HISTORY.request%TYPE DEFAULT NULL)
1783 /* end defect 203433 */
1784IS
1785 /*
1786 ** Usally we want only ports where the requested status
1787 ** (PORT.PORT_STATUS_REQU) is not null.
1788 ** If the second argument is not null PORT.PORT_STATUS_REQU is
1789 ** "overwritten" in the following select.
1790 */
1791 CURSOR locPort IS
1792 SELECT SM_ID,
1793 DECODE(piosRetentionMode, NULL, PORT_STATUS_REQU,
1794 piosRetentionMode) PORT_STATUS_REQU,
1795 PORT_CHANNELS,
1796 PORT_CHANNELS_EXCL,
1797 CAPACITY
1798 FROM PORT
1799 WHERE PORT_ID = pionPortId
1800 AND (PORT_STATUS_REQU IS NOT NULL
1801 OR piosRetentionMode IS NOT NULL)
1802 FOR UPDATE;
1803 /*
1804 ** The varibale is set to TRUE if the loop was entered. If
1805 ** no ports are selected an error occurs.
1806 */
1807 lobPortFound BOOLEAN := FALSE;
1808 /*
1809 ** the following two variables are used for Ermes
1810 ** These variables will contain the values of the channel
1811 ** bit fields.
1812 */
1813 lonChannel NUMBER := NULL;
1814 lonChannelExcl NUMBER := NULL;
1815 /*feature 201959_plsql begin*/
1816 losPortOwner VARCHAR2(2);
1817 loiSmId INTEGER;
1818 /*201959_plsql end*/
1819 /* begin defect 203433 */
1820 piodEffectiveDate DATE;
1821 /* end defect 203433 */
1822BEGIN
1823 /*feature 201959_plsql begin*/
1824 SELECT HL.PORT_OWNER, P.SM_ID
1825 INTO losPortOwner, loiSmId
1826 FROM MPDHLTAB HL, PORT P
1827 WHERE HL.HLCODE = P.HLCODE
1828 AND P.PORT_ID = pionPortID;
1829 IF losPortOwner IN ('DN', 'NW') THEN
1830 loiSmId := NULL;
1831 END IF;
1832 /*201959_plsql end*/
1833 IF RetentionPortAllowed( pionPortID ) = conRetentionPossible THEN
1834 FOR xcrPort IN locPort LOOP
1835 lobPortFound := TRUE;
1836 /*
1837 ** Check if this is an Ermes Port (RIC) and
1838 ** get the current channels values
1839 */
1840 IF xcrPort.PORT_CHANNELS IS NOT NULL
1841 AND xcrPort.PORT_CHANNELS > 0 THEN
1842 Ermes.GetCurrentChannel(pionPortID,lonChannel,lonChannelExcl);
1843 END IF;
1844 /*
1845 ** If some of the (ermes) channels are still in use,
1846 ** only the fields port_channel and port_channel_excl are
1847 ** updated.
1848 */
1849 IF lonChannel IS NOT NULL AND lonChannel > 0 THEN
1850 UPDATE PORT
1851 SET PORT_CHANNELS = lonChannel,
1852 PORT_CHANNELS_EXCL = lonChannelExcl,
1853 PORT_MODDATE = SYSDATE,
1854 PORT_STATUS_REQU = NULL,
1855 /* Begin PN00286470_plsql/d */
1856 --avoid any increment when the available_capacity has reached its capacity limit and
1857 -- increment won't be performed when available_capacity and capacity are null
1858 --AVAILABLE_CAPACITY = DECODE(CAPACITY, NULL, NULL, AVAILABLE_CAPACITY + 1),
1859 AVAILABLE_CAPACITY = DECODE(CAPACITY, AVAILABLE_CAPACITY, AVAILABLE_CAPACITY, AVAILABLE_CAPACITY + 1),
1860 /* End PN00286470_plsql/d */
1861 REC_VERSION = REC_VERSION + 1
1862 WHERE CURRENT OF locPort;
1863 ELSIF xcrPort.PORT_STATUS_REQU = cosStatusFree THEN
1864 /* begin defect 203433 */
1865 piodEffectiveDate := GetEffectiveDate(pionRequest);
1866 /* end defect 203433 */
1867 UPDATE PORT
1868 SET PORT_STATUS = cosStatusFree,
1869 PORT_STATUS_REQU = NULL,
1870 /* begin defect 203433 */
1871 --PORT_STATUSMODDAT = SYSDATE,
1872 PORT_STATUSMODDAT = piodEffectiveDate,
1873 /* end defect 203433 */
1874 DEALER_ID = NULL,
1875 PORT_ASSIGN_DATE = NULL,
1876 PORT_ACTIV_DATE = NULL,
1877 PORT_DEACTIV_DATE = NULL,
1878 PORT_CHANNELS = NULL,
1879 PORT_CHANNELS_EXCL = NULL,
1880 PORT_MODDATE = SYSDATE,
1881 /* Begin PN00286470_plsql/d */
1882 --avoid any increment when the available_capacity has reached its capacity limit and
1883 -- increment won't be performed when available_capacity and capacity are null
1884 --AVAILABLE_CAPACITY = DECODE(CAPACITY, NULL, NULL, AVAILABLE_CAPACITY + 1),
1885 AVAILABLE_CAPACITY = DECODE(CAPACITY, AVAILABLE_CAPACITY, AVAILABLE_CAPACITY, AVAILABLE_CAPACITY + 1),
1886 /* End PN00286470_plsql/d */
1887 REC_VERSION = REC_VERSION + 1,
1888 /* begin defect 216896 */
1889 PRM_VALUE_ID = NULL
1890 /* end defect 216896 */
1891 /* begin PN: 247950 */
1892 ,BUSINESS_UNIT_ID = NULL
1893 /* end PN: 247950 */
1894 WHERE CURRENT OF locPort;
1895 ELSIF xcrPort.PORT_STATUS_REQU = cosStatusReserve THEN
1896 /* begin defect 203433 */
1897 piodEffectiveDate := GetEffectiveDate(pionRequest);
1898 /* end defect 203433 */
1899 UPDATE PORT
1900 SET PORT_STATUS = cosStatusReserve,
1901 /* begin defect 203433 */
1902 --PORT_STATUSMODDAT = SYSDATE,
1903 PORT_STATUSMODDAT = piodEffectiveDate,
1904 /* end defect 203433 */
1905 PORT_STATUS_REQU = NULL,
1906 PORT_ACTIV_DATE = NULL,
1907 PORT_DEACTIV_DATE = NULL,
1908 PORT_CHANNELS = NULL,
1909 PORT_CHANNELS_EXCL = NULL,
1910 PORT_MODDATE = SYSDATE,
1911 /* Begin PN00286470_plsql/d */
1912 --avoid any increment when the available_capacity has reached its capacity limit and
1913 -- increment won't be performed when available_capacity and capacity are null
1914 --AVAILABLE_CAPACITY = DECODE(CAPACITY, NULL, NULL, AVAILABLE_CAPACITY + 1),
1915 AVAILABLE_CAPACITY = DECODE(CAPACITY, AVAILABLE_CAPACITY, AVAILABLE_CAPACITY, AVAILABLE_CAPACITY + 1),
1916 /* End PN00286470_plsql/d */
1917 REC_VERSION = REC_VERSION + 1
1918 WHERE CURRENT OF locPort;
1919 ELSIF xcrPort.PORT_STATUS_REQU = cosStatusDeassign THEN
1920 /* begin defect 203433 */
1921 piodEffectiveDate := GetEffectiveDate(pionRequest);
1922 /* end defect 203433 */
1923 UPDATE PORT
1924 SET PORT_STATUS = cosStatusDeassign,
1925 /* begin defect 203433 */
1926 --PORT_STATUSMODDAT = SYSDATE,
1927 PORT_STATUSMODDAT = piodEffectiveDate,
1928 /* begin defect 203433 */
1929 PORT_STATUS_REQU = NULL,
1930 PORT_CHANNELS = NULL,
1931 PORT_CHANNELS_EXCL = NULL,
1932 PORT_ACTIV_DATE = NULL,
1933 /* begin defect 203433 */
1934 --PORT_DEACTIV_DATE = SYSDATE,
1935 PORT_DEACTIV_DATE = piodEffectiveDate,
1936 /* end defect 203433 */
1937 PORT_MODDATE = SYSDATE,
1938 /* Begin PN00286470_plsql/d */
1939 --avoid any increment when the available_capacity has reached its capacity limit and
1940 -- increment won't be performed when available_capacity and capacity are null
1941 --AVAILABLE_CAPACITY = DECODE(CAPACITY, NULL, NULL, AVAILABLE_CAPACITY + 1),
1942 AVAILABLE_CAPACITY = DECODE(CAPACITY, AVAILABLE_CAPACITY, AVAILABLE_CAPACITY, AVAILABLE_CAPACITY + 1),
1943 /* End PN00286470_plsql/d */
1944 REC_VERSION = REC_VERSION + 1
1945 WHERE CURRENT OF locPort;
1946 ELSE
1947 /* begin defect 203433 */
1948 piodEffectiveDate := GetEffectiveDate(pionRequest);
1949 /* end defect 203433 */
1950 UPDATE PORT
1951 SET PORT_STATUS = xcrPort.PORT_STATUS_REQU,
1952 PORT_STATUS_REQU = NULL,
1953 /* begin defect 203433 */
1954 --PORT_STATUSMODDAT = SYSDATE,
1955 PORT_STATUSMODDAT = piodEffectiveDate,
1956 /* end defect 203433 */
1957 PORT_MODDATE = SYSDATE,
1958 /* Begin PN00286470_plsql/d */
1959 --avoid any increment when the available_capacity has reached its capacity limit and
1960 -- increment won't be performed when available_capacity and capacity are null
1961 --AVAILABLE_CAPACITY = DECODE(CAPACITY, NULL, NULL, AVAILABLE_CAPACITY + 1),
1962 AVAILABLE_CAPACITY = DECODE(CAPACITY, AVAILABLE_CAPACITY, AVAILABLE_CAPACITY, AVAILABLE_CAPACITY + 1),
1963 /* End PN00286470_plsql/d */
1964 REC_VERSION = REC_VERSION + 1
1965 WHERE CURRENT OF locPort;
1966 END IF;
1967 -- If market is not PORT driven STORAGE_MEDIUM
1968 -- must be updated
1969 IF xcrPort.SM_ID IS NOT NULL /*feature 201959_plsql begin */AND losPortOwner = 'SM' /*201959_plsql end*/THEN
1970 /* begin defect 203433 */
1971 --RetentionStorageMedium( xcrPort.SM_ID, piosRetentionMode);
1972 RetentionStorageMedium( xcrPort.SM_ID, piosRetentionMode, pionRequest);
1973 /* end defect 203433 */
1974 END IF;
1975 END LOOP;
1976 /*
1977 ** Updating free capacity should be done if PORT.CAPACITY is not
1978 ** Null and greater than 0
1979 */
1980 ELSE -- RetentionPortAllowed( pionPortID ) != conRetentionPossible
1981 FOR xcrPort IN locPort LOOP
1982 lobPortFound := TRUE;
1983 IF xcrPort.CAPACITY IS NOT NULL AND xcrPort.CAPACITY > 0 THEN
1984 UPDATE PORT
1985 SET PORT_MODDATE = SYSDATE,
1986 PORT_STATUS_REQU = NULL,
1987 /* Begin PN00286470_plsql */
1988 --avoid any increment when the available_capacity has reached its capacity limit and
1989 -- increment won't be performed when available_capacity and capacity are null
1990 --AVAILABLE_CAPACITY = AVAILABLE_CAPACITY + 1,
1991 AVAILABLE_CAPACITY = DECODE(CAPACITY, AVAILABLE_CAPACITY, AVAILABLE_CAPACITY, AVAILABLE_CAPACITY + 1),
1992 /* End PN00286470_plsql */
1993 REC_VERSION = REC_VERSION + 1
1994 WHERE CURRENT OF locPort;
1995 ELSE
1996 UPDATE PORT
1997 SET PORT_MODDATE = SYSDATE,
1998 PORT_STATUS_REQU = NULL,
1999 REC_VERSION = REC_VERSION + 1
2000 WHERE CURRENT OF locPort;
2001 END IF;
2002 END LOOP;
2003 END IF;
2004 IF lobPortFound = FALSE THEN
2005 gosErrorText := 'RetentionPort: No ports found for this ' ||
2006 'contract. May be PORT_STATUS_REQU is NULL';
2007 RAISE geoApplicationError;
2008 END IF;
2009EXCEPTION
2010WHEN OTHERS THEN
2011 IF gosErrorText IS NULL THEN
2012 gosErrorText := SQLERRM;
2013 END IF;
2014 RAISE_APPLICATION_ERROR( -20001,
2015 'Package Contract.RetentionPort: ' ||
2016 'Port ID: ' || pionPortId ||' ' ||
2017 gosErrorText );
2018END RetentionPort;
2019/*
2020** =====================================================================
2021**
2022** Procedure: RetentionDirectoryNumber
2023**
2024** =====================================================================
2025*/
2026PROCEDURE RetentionDirectoryNumber(
2027 pionDirectoryId IN DIRECTORY_NUMBER.DN_ID%TYPE,
2028 piosRetentionMode VARCHAR2 DEFAULT NULL,
2029 pionBlockId DIRECTORY_NUMBER_BLOCK.DN_BLOCK_ID%TYPE DEFAULT NULL,
2030 /* begin defect 203433 */
2031 pionRequest IN CONTRACT_HISTORY.request%TYPE DEFAULT NULL)
2032 /* end defect 203433 */
2033IS
2034 CURSOR locDirN IS
2035 SELECT
2036 DN_STATUS_REQU
2037 , DEALER_ID
2038 , DN_ASSIGN_DATE
2039 , REC_VERSION
2040 FROM DIRECTORY_NUMBER
2041 WHERE DN_ID = pionDirectoryId
2042 AND DN_STATUS_REQU IS NOT NULL
2043 FOR UPDATE;
2044 /*81481_2 #NUMBERPORT# MAT 28-MAY-2001 BEGIN*/
2045 /*PN 238110:vov Add DN_STATUS_REQU */
2046 CURSOR curDnStatus IS
2047 SELECT DN_STATUS,DN_STATUS_REQU
2048 FROM DIRECTORY_NUMBER
2049 WHERE DN_ID=pionDirectoryId;
2050 recDnStatus curDnStatus%ROWTYPE;
2051 /*81481_2 #NUMBERPORT# MAT 28-MAY-2001 END*/
2052 lonWhichPorting NUMBER(38);
2053 lonReturnStatus NUMBER(38);
2054 /* begin defect 203433 */
2055 piodEffectiveDate DATE;
2056 /* end defect 203433 */
2057BEGIN
2058 -- DBMS_OUTPUT.put_line('--> RetentionDirectoryNumber: ' ||
2059 -- ' DirNum ID: ' || pionDirectoryId ||
2060 -- ' piosRetentionMode: ' || piosRetentionMode ||
2061 -- ' pionBlockId: ' || pionBlockId );
2062 IF pionDirectoryId IS NOT NULL THEN
2063 /*81481_2 #NUMBERPORT# MAT 28-MAY-2001 BEGIN*/
2064 /*if the number was a ported one*/
2065 IF NOT curDnStatus%ISOPEN THEN
2066 OPEN curDnStatus;
2067 END IF;
2068 FETCH curDnStatus INTO recDnStatus;
2069
2070 /*DEFECT 00205876 MAT 22-JUN-2001 BEGIN
2071 IF recDnStatus.dn_status in ('PI','PO') THEN
2072 IF recDnStatus.dn_status='PO' THEN
2073 DEFECT 00205876 MAT 22-JUN-2001 End*/
2074 /*PN 238110:vov Add DN_STATUS_REQU NOT IN ('o')*/
2075 IF (recDnStatus.dn_status IN ('c','o') AND recDnStatus.DN_STATUS_REQU NOT IN ('o') )THEN
2076 IF recDnStatus.dn_status='o' THEN
2077 /*if dn_status='PO' then the number has been deactivated for export therefore*/
2078 /*we only set dn_status_requ=null*/
2079 UPDATE DIRECTORY_NUMBER
2080 SET DN_STATUS_REQU = NULL
2081 WHERE DN_ID=pionDirectoryId;
2082 ELSE
2083 /*number has been deactivated either for an import request*/
2084 /*or number is an imported one and the relating service/contract has been deactivated'
2085 /*to differ we check if there is a linked request for this contract if so its a import request*/
2086 /*else its a deactivation of a imported number*/
2087 DECLARE
2088 CURSOR curLinkedRequest IS
2089 SELECT REQUEST
2090 FROM MDSRRTAB
2091 WHERE NOT PARENT_REQUEST IS NULL
2092 AND REQUEST_UPDATE IS NULL
2093 AND CO_ID IN (SELECT CO_ID FROM CONTR_SERVICES_CAP
2094 WHERE NOT CS_ACTIV_DATE IS NULL
2095 AND CS_DEACTIV_DATE IS NULL
2096 AND DN_ID=pionDirectoryId);
2097 recLinkedRequest curLinkedRequest%ROWTYPE;
2098 BEGIN
2099 IF NOT curLinkedRequest%ISOPEN THEN
2100 OPEN curLinkedRequest;
2101 END IF;
2102 FETCH curLinkedRequest INTO recLinkedRequest;
2103 IF curLinkedRequest%ROWCOUNT>0 THEN
2104 /*request is a linked one therefore its an import request*/
2105 UPDATE DIRECTORY_NUMBER
2106 SET DN_STATUS_REQU = NULL
2107 WHERE DN_ID=pionDirectoryId;
2108 ELSE
2109
2110 -- AVAVAV112233
2111 -- begin 00269321/d, AV
2112 piodEffectiveDate := GetEffectiveDate(pionRequest);
2113
2114 IF recDnStatus.dn_status='c' AND recDnStatus.dn_status_requ='o' THEN
2115 UPDATE DIRECTORY_NUMBER
2116 SET DN_STATUS = 'o', DN_STATUS_REQU = NULL,
2117 DN_STATUS_MOD_DATE = piodEffectiveDate
2118 WHERE DN_ID=pionDirectoryId;
2119 ELSE
2120 UPDATE DIRECTORY_NUMBER
2121 SET DN_STATUS = DN_STATUS_REQU, DN_STATUS_REQU = NULL,
2122 DN_STATUS_MOD_DATE = piodEffectiveDate
2123 WHERE DN_ID=pionDirectoryId;
2124 END IF;
2125
2126 END IF;
2127 IF curLinkedRequest%ISOPEN THEN
2128 CLOSE curLinkedRequest;
2129 END IF;
2130 END;
2131 END IF;
2132 ELSE
2133 /*81481_2 #NUMBERPORT# MAT 28-MAY-2001 END*/
2134 IF pionBlockId IS NULL THEN
2135 IF RetentionDirNumAllowed( pionDirectoryId ) = conRetentionPossible THEN
2136 IF piosRetentionMode IS NULL THEN
2137 FOR lcrDirN IN locDirN LOOP
2138 IF lcrDirN.DN_STATUS_REQU = 'f' THEN
2139 /* begin defect 203433 */
2140 piodEffectiveDate := GetEffectiveDate(pionRequest);
2141 /* end defect 203433 */
2142 UPDATE DIRECTORY_NUMBER
2143 SET DN_STATUS = 'f'
2144 /* begin defect 203433 */
2145 --, DN_STATUS_MOD_DATE = SYSDATE
2146 , DN_STATUS_MOD_DATE = piodEffectiveDate
2147 /* end defect 203433 */
2148 , DEALER_ID = NULL
2149 , DN_ASSIGN_DATE = NULL
2150 , DN_STATUS_REQU = NULL
2151 , DN_MODDATE = SYSDATE
2152 , REC_VERSION = lcrDirN.REC_VERSION + 1
2153 /* begin PN: 247950 */
2154 ,BUSINESS_UNIT_ID = NULL
2155 /* end PN: 247950 */
2156 WHERE CURRENT OF locDirN;
2157 ELSE
2158 /* begin defect 203433 */
2159 piodEffectiveDate := GetEffectiveDate(pionRequest);
2160 /* end defect 203433 */
2161 UPDATE DIRECTORY_NUMBER
2162 SET DN_STATUS = lcrDirN.DN_STATUS_REQU
2163 /* begin defect 203433 */
2164 --, DN_STATUS_MOD_DATE = SYSDATE
2165 , DN_STATUS_MOD_DATE = piodEffectiveDate
2166 /* end defect 203433 */
2167 , DN_STATUS_REQU = NULL
2168 , DN_MODDATE = SYSDATE
2169 , REC_VERSION = lcrDirN.REC_VERSION + 1
2170 WHERE CURRENT OF locDirN;
2171 END IF;
2172 END LOOP;
2173 ELSE
2174 IF piosRetentionMode = 'f' THEN
2175 /* begin defect 203433 */
2176 piodEffectiveDate := GetEffectiveDate(pionRequest);
2177 /* end defect 203433 */
2178 UPDATE DIRECTORY_NUMBER
2179 SET DN_STATUS = 'f',
2180 /* begin defect 203433 */
2181 --DN_STATUS_MOD_DATE = SYSDATE,
2182 DN_STATUS_MOD_DATE = piodEffectiveDate,
2183 /* end defect 203433 */
2184 DEALER_ID = NULL,
2185 DN_ASSIGN_DATE = NULL,
2186 DN_MODDATE = SYSDATE,
2187 REC_VERSION = REC_VERSION + 1
2188 /* begin PN: 247950 */
2189 ,BUSINESS_UNIT_ID = NULL
2190 /* end PN: 247950 */
2191 WHERE DN_ID = pionDirectoryId;
2192 ELSE
2193 /* begin defect 203433 */
2194 piodEffectiveDate := GetEffectiveDate(pionRequest);
2195 /* end defect 203433 */
2196 UPDATE DIRECTORY_NUMBER
2197 SET DN_STATUS = piosRetentionMode,
2198 /* begin defect 203433 */
2199 --DN_STATUS_MOD_DATE = SYSDATE,
2200 DN_STATUS_MOD_DATE = piodEffectiveDate,
2201 /* end defect 203433 */
2202 DN_MODDATE = SYSDATE,
2203 REC_VERSION = REC_VERSION + 1
2204 WHERE DN_ID = pionDirectoryId;
2205 END IF;
2206 END IF;
2207 ELSE -- Retention is not allowed
2208 UPDATE DIRECTORY_NUMBER
2209 SET DN_STATUS_REQU = NULL,
2210 DN_MODDATE = SYSDATE,
2211 REC_VERSION = REC_VERSION + 1
2212 WHERE DN_ID = pionDirectoryId
2213 AND DN_STATUS_REQU IS NOT NULL;
2214 END IF; -- RetentionAllowed?
2215 ELSE -- pionBlockId IS NOT NULL
2216 IF piosRetentionMode IS NULL THEN
2217 /* begin defect 203433 */
2218 piodEffectiveDate := GetEffectiveDate(pionRequest);
2219 /* end defect 203433 */
2220 UPDATE DIRECTORY_NUMBER_BLOCK
2221 SET DNB_STATUS = DNB_REQUESTED_STATUS,
2222 DNB_REQUESTED_STATUS = NULL,
2223 /* begin defect 203433 */
2224 --STATUS_MOD_DATE = SYSDATE,
2225 STATUS_MOD_DATE = piodEffectiveDate,
2226 /* end defect 203433 */
2227 REC_VERSION = REC_VERSION + 1
2228 WHERE DN_ID = pionDirectoryId
2229 AND DN_BLOCK_ID = pionBlockId
2230 AND DNB_REQUESTED_STATUS IS NOT NULL;
2231 SetBlockNumberStatus( pionDirectoryId );
2232 ELSE
2233 /* begin defect 203433 */
2234 piodEffectiveDate := GetEffectiveDate(pionRequest);
2235 /* end defect 203433 */
2236 UPDATE DIRECTORY_NUMBER_BLOCK
2237 SET DNB_STATUS = 'f',
2238 /* begin defect 203433 */
2239 --STATUS_MOD_DATE = SYSDATE,
2240 STATUS_MOD_DATE = piodEffectiveDate,
2241 /* end defect 203433 */
2242 REC_VERSION = REC_VERSION + 1
2243 WHERE DN_ID = pionDirectoryId
2244 AND DN_BLOCK_ID = pionBlockId;
2245 IF piosRetentionMode = 'f' THEN
2246 UPDATE DIRECTORY_NUMBER
2247 SET DN_STATUS = 'f',
2248 /* begin defect 203433 */
2249 --DN_STATUS_MOD_DATE = SYSDATE,
2250 DN_STATUS_MOD_DATE = piodEffectiveDate,
2251 /* end defect 203433 */
2252 DEALER_ID = NULL,
2253 DN_ASSIGN_DATE = NULL,
2254 DN_MODDATE = SYSDATE,
2255 REC_VERSION = REC_VERSION + 1
2256 /* begin PN: 247950 */
2257 ,BUSINESS_UNIT_ID = NULL
2258 /* end PN: 247950 */
2259 WHERE DN_ID = pionDirectoryId
2260 AND DN_STATUS = 'a';
2261 ELSE
2262 /* begin defect 203433 */
2263 piodEffectiveDate := GetEffectiveDate(pionRequest);
2264 /* end defect 203433 */
2265 UPDATE DIRECTORY_NUMBER
2266 SET DN_STATUS = piosRetentionMode,
2267 /* begin defect 203433 */
2268 --DN_STATUS_MOD_DATE = SYSDATE,
2269 DN_STATUS_MOD_DATE = piodEffectiveDate,
2270 /* end defect 203433 */
2271 DN_MODDATE = SYSDATE,
2272 REC_VERSION = REC_VERSION + 1
2273 WHERE DN_ID = pionDirectoryId
2274 AND DN_STATUS = 'a';
2275 END IF;
2276 END IF;
2277 END IF; -- pionBlockId is/is not NULL
2278 END IF; -- pionDirectoryId IS NOT NULL
2279 /*81481_2 #NUMBERPORT# MAT 28-MAY-2001 BEGIN*/
2280 END IF;
2281 IF curDnStatus%ISOPEN THEN
2282 CLOSE curDnStatus;
2283 END IF;
2284 /*81481_2 #NUMBERPORT# MAT 28-MAY-2001 END*/
2285EXCEPTION
2286WHEN OTHERS THEN
2287 IF gosErrorText IS NULL THEN
2288 gosErrorText := SQLERRM;
2289 END IF;
2290 RAISE_APPLICATION_ERROR( -20001,
2291 'Package Contract.RetentionDirectoryNumber: ' ||
2292 'Directory Number ID: ' || pionDirectoryId ||' ' ||
2293 'Number Block ID: ' || pionBlockId ||' ' ||
2294 gosErrorText );
2295END RetentionDirectoryNumber;
2296/*
2297** =====================================================================
2298**
2299** Procedure: RetentionPortsOfContract
2300**
2301** =====================================================================
2302*/
2303PROCEDURE RetentionPortsOfContract (
2304 pionContractId IN CONTRACT_ALL.CO_ID%TYPE,
2305 pionServiceCode IN NUMBER DEFAULT NULL,
2306 /* begin defect 203433 */
2307 pionRequest IN CONTRACT_HISTORY.request%TYPE DEFAULT NULL)
2308 /* end defect 203433 */
2309IS
2310 CURSOR locServPort IS
2311 SELECT CSP.PORT_ID
2312 FROM CONTR_SERVICES_PORT CSP
2313 WHERE CSP.CO_ID = pionContractId
2314 AND CSP.SNCODE = DECODE(pionServiceCode,NULL,
2315 CSP.SNCODE,pionServiceCode)
2316 AND (CSP.CSP_STATUS != 'R' OR CSP.CSP_STATUS IS NULL)
2317 AND CSP.CSP_SEQNO NOT IN ( SELECT CSP_SEQNO_PRE
2318 FROM CONTR_SERVICES_PORT
2319 WHERE CO_ID = CSP.CO_ID
2320 AND SNCODE = CSP.SNCODE
2321 AND CSP_SEQNO_PRE IS NOT NULL )
2322 FOR UPDATE;
2323 /* begin defect 203433 */
2324 piodEffectiveDate DATE;
2325 /* end defect 203433 */
2326 /* begin PN00286470_plsql/d */
2327 losMarketType VARCHAR2(1) := NULL;
2328 /* end PN00286470_plsql/d */
2329BEGIN
2330 piodEffectiveDate := GetEffectiveDate(pionRequest);
2331 FOR xcrServPort IN locServPort LOOP
2332 UPDATE CONTR_SERVICES_PORT
2333 SET CSP_DEACTIVE_DATE = DECODE(CSP_DEACTIVE_DATE, NULL,
2334 /* begin defect 203433 */
2335 --SYSDATE, CSP_DEACTIVE_DATE),
2336 piodEffectiveDate, CSP_DEACTIVE_DATE),
2337 /* end defect 203433 */
2338 CSP_STATUS = 'R',
2339 REC_VERSION = REC_VERSION + 1
2340 WHERE CURRENT OF locServPort;
2341
2342 /* Begin PN00286470_plsql/d */
2343 --RetentionPort(xcrServPort.PORT_ID);
2344 losMarketType := GetPortMarketType(xcrServPort.PORT_ID);
2345 IF losMarketType = conServiceDriven THEN
2346 RetentionPort(xcrServPort.PORT_ID, cosStatusReserve);
2347 ELSE
2348 RetentionPort(xcrServPort.PORT_ID);
2349 END IF;
2350 /* End PN00286470_plsql/d */
2351
2352 END LOOP; -- ServicesPort
2353END RetentionPortsOfContract;
2354/*
2355** =====================================================================
2356**
2357** Function: IdOfPortNumber
2358**
2359** =====================================================================
2360*/
2361-- FUNCTION IdOfPortNumber ( Function not needed anymore, because PortIDs are provided directly
2362-- piosPortNumber IN port.port_num%TYPE, (instead of PortNumbers)
2363-- pionPlcode IN port.plcode%TYPE) Function removed with defect 80442 by WPa)
2364-- RETURN NUMBER
2365-- IS
2366-- lonPortId port.port_id%Type := NULL;
2367-- BEGIN
2368-- IF piosPortNumber IS NOT NULL
2369-- THEN
2370-- SELECT PORT_ID
2371-- INTO lonPortID
2372-- FROM PORT
2373-- WHERE PORT_NUM = piosPortNumber
2374-- AND PLCODE = pionPlcode;
2375-- END IF;
2376-- RETURN lonPortId;
2377-- EXCEPTION
2378-- WHEN OTHERS
2379-- THEN
2380-- gosErrorText := 'IdOfPortNumber: ' ||
2381-- piosPortNumber || ' is invalid';
2382-- RAISE geoApplicationError;
2383-- END IdOfPortNumber;
2384/*
2385** =====================================================================
2386**
2387** Function: IdOfDirectoryNumber
2388**
2389** =====================================================================
2390*/
2391FUNCTION IdOfDirectoryNumber (
2392 piosDirectoryNumber IN DIRECTORY_NUMBER.dn_num%TYPE,
2393 -- pionPlcode IN directory_number.plcode%TYPE) -- Start Defect 80442 WPa 03-JUL-2000 Add new parameters
2394 pionPlcode IN DIRECTORY_NUMBER.plcode%TYPE,
2395 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
2396 pionRequest IN CONTRACT_HISTORY.request%TYPE) -- End Defect 80442 WPa 03-JUL-2000
2397RETURN NUMBER IS
2398 lonDnId DIRECTORY_NUMBER.dn_id%TYPE := NULL;
2399 --- 53406 #VPN# begin --->
2400 --- define cursor to fetch more than one entry
2401 CURSOR locDNs(pionContractId CONTR_SERVICES_CAP.CO_ID%TYPE
2402 ,pionRequest CONTR_SERVICES_CAP.CS_REQUEST%TYPE
2403 ,pionPlcode DIRECTORY_NUMBER.PLCODE%TYPE
2404 ,piosDirectoryNumber DIRECTORY_NUMBER.DN_NUM%TYPE ) IS
2405 SELECT DN.DN_ID
2406 FROM CONTR_SERVICES_CAP CSC, DIRECTORY_NUMBER DN
2407 WHERE CSC.CO_ID = pionContractId
2408 AND CSC.CS_REQUEST = pionRequest
2409 AND CSC.DN_ID = DN.DN_ID
2410 AND DN.PLCODE = pionPlcode
2411 AND DN.DN_NUM = piosDirectoryNumber;
2412 --- 53406 #VPN# end <---
2413BEGIN
2414 IF piosDirectoryNumber IS NOT NULL THEN
2415 -- SELECT DN_ID Start Defect 80442 WPa 03-JUL-2000
2416 -- INTO lonDNID DN_ID cannot be determined from DN_NUM anymore without
2417 -- FROM DIRECTORY_NUMBER numbering plan information
2418 -- WHERE DN_NUM = piosDirectoryNumber
2419 -- AND PLCODE = pionPlcode;
2420 --- 53406 #VPN# begin --->
2421 --- for a VPN service (VPN_Access) it is possible to have more than one identically DN_IDs
2422 --- in the table CONTR_SERVICES_CAP
2423 -- SELECT DN.DN_ID
2424 -- INTO lonDNID
2425 -- FROM CONTR_SERVICES_CAP CSC, DIRECTORY_NUMBER DN
2426 -- WHERE CSC.CO_ID = pionContractId
2427 -- AND CSC.CS_REQUEST = pionRequest
2428 -- AND CSC.DN_ID = DN.DN_ID
2429 -- AND DN.PLCODE = pionPlcode
2430 -- AND DN.DN_NUM = piosDirectoryNumber; -- End Defect 80442 WPa 03-JUL-2000
2431
2432 OPEN locDNs(pionContractId,pionRequest,pionPlcode,piosDirectoryNumber);
2433 LOOP
2434 FETCH locDNs
2435 INTO lonDnId;
2436 EXIT WHEN locDNs%NOTFOUND;
2437 IF lonDnId IS NOT NULL THEN
2438 EXIT;
2439 END IF;
2440 END LOOP; --- of cursor locDNs
2441 CLOSE locDNs;
2442 --- 53406 #VPN# end <---
2443 END IF;
2444 RETURN lonDnId;
2445EXCEPTION
2446WHEN OTHERS THEN
2447 gosErrorText := 'IdOfDirectoryNumber: ' ||
2448 piosDirectoryNumber || ' is invalid';
2449 RAISE geoApplicationError;
2450END IdOfDirectoryNumber;
2451/*
2452** =====================================================================
2453**
2454** Procedure: RetentionDNofContract
2455**
2456** Purpose: Perform retention for all assigned Services or a single
2457** service
2458** #UMTS# 82630
2459** =====================================================================
2460*/
2461PROCEDURE RetentionDNofContract(
2462 pionContractId IN PROFILE_SERVICE.CO_ID%TYPE,
2463 pionSNCode IN PROFILE_SERVICE.SNCODE%TYPE DEFAULT NULL,
2464 pionProfileID IN PROFILE_SERVICE.PROFILE_ID%TYPE DEFAULT NULL,
2465 /* begin defect 203433 */
2466 pionRequest IN CONTRACT_HISTORY.request%TYPE DEFAULT NULL)
2467 /* end defect 203433 */
2468IS
2469 CURSOR locBearer IS
2470 SELECT DN_ID, DN_BLOCK_ID, CS_ACTIV_DATE, -- activ date added OUL 00249898
2471 -- AVAVAV112233
2472 -- begin 00269321/d, AV
2473 CO_ID, SNCODE, SEQNO
2474 -- end 00269321/d
2475 FROM CONTR_SERVICES_CAP CSC
2476 WHERE CO_ID = pionContractId
2477 AND SNCODE = DECODE( pionSNCODE, NULL, SNCODE, pionSNCODE )
2478 AND PROFILE_ID = DECODE( pionProfileID, NULL, PROFILE_ID, pionProfileID )
2479 AND CS_DEACTIV_DATE IS NULL
2480 FOR UPDATE;
2481 -- if pionSNCODE IS NULL the where clause is ... AND SNCODE = SNCODE
2482 -- otherwise ... AND SNCODE = pionSNCODE
2483 -- this works because in DECODE expressions ORACLE considers two
2484 -- NULLs to be equivalent.
2485 /* begin defect 203433 */
2486 piodEffectiveDate DATE;
2487 /* end defect 203433 */
2488
2489
2490
2491 -- AVAVAV112233
2492 -- begin 00269321/d, AV
2493 lonCounter NUMBER := 1;
2494 lonMaxCounter NUMBER := NULL;
2495 lanDN_ID tanNumberArray;
2496 lanDN_BLOCK_ID tanNumberArray;
2497 lanCO_ID tanNumberArray;
2498 lanSNCODE tanNumberArray;
2499 lanSEQNO tanNumberArray;
2500 lanCS_ACTIV_DATE tanNumberArray;
2501 -- end 00269321/d
2502
2503
2504
2505BEGIN
2506 IF pionContractId IS NULL THEN
2507 gosErrorText := 'RetentionDNofContract: Contract Id is NULL';
2508 RAISE geoApplicationError;
2509 END IF;
2510
2511
2512 piodEffectiveDate := GetEffectiveDate(pionRequest); /* 203433 */
2513
2514
2515
2516
2517
2518
2519 -- AVAVAV112233
2520 -- begin 00269321/d, AV
2521
2522 -- !!! A cursor with "FOR UPDATE" and a commit in the loop is not allowed !!!
2523
2524 -- FOR xcrBearer IN locBearer
2525 -- LOOP
2526 -- IF xcrBearer.CS_ACTIV_DATE IS NOT NULL THEN
2527 -- UPDATE CONTR_SERVICES_CAP
2528 -- SET CS_DEACTIV_DATE = piodEffectiveDate,
2529 -- BCCODE = DECODE(PENDING_BCCODE, NULL, BCCODE, PENDING_BCCODE),
2530 -- PENDING_BCCODE = NULL,
2531 -- REC_VERSION = REC_VERSION + 1
2532 -- WHERE CURRENT OF locBearer;
2533 -- END IF;
2534 -- RetentionDirectoryNumber(xcrBearer.DN_ID,
2535 -- NULL /* retention Mode */,
2536 -- xcrBearer.DN_BLOCK_ID, pionRequest);
2537 -- END LOOP; -- Services
2538
2539
2540 FOR xcrBearer IN locBearer
2541 LOOP
2542 lanDN_ID(lonCounter) := xcrBearer.DN_ID;
2543
2544 IF xcrBearer.CS_ACTIV_DATE IS NOT NULL THEN
2545 lanCS_ACTIV_DATE(lonCounter) := 1;
2546 ELSE
2547 lanCS_ACTIV_DATE(lonCounter) := 0;
2548 END IF;
2549
2550
2551 IF xcrBearer.DN_BLOCK_ID IS NOT NULL
2552 THEN
2553 lanDN_BLOCK_ID(lonCounter) := xcrBearer.DN_BLOCK_ID;
2554 ELSE
2555 lanDN_BLOCK_ID(lonCounter) := -1;
2556 END IF;
2557
2558 lanCO_ID(lonCounter) := xcrBearer.CO_ID;
2559 lanSNCODE(lonCounter) := xcrBearer.SNCODE;
2560 lanSEQNO(lonCounter) := xcrBearer.SEQNO;
2561
2562 lonCounter := lonCounter + 1;
2563 END LOOP; -- Services
2564
2565
2566 lonMaxCounter := lonCounter - 1;
2567 lonCounter := 1;
2568
2569 WHILE lonCounter <= lonMaxCounter
2570 LOOP
2571
2572 IF lanCS_ACTIV_DATE(lonCounter) != 0 THEN
2573 UPDATE CONTR_SERVICES_CAP
2574 SET CS_DEACTIV_DATE = piodEffectiveDate,
2575 BCCODE = DECODE(PENDING_BCCODE, NULL, BCCODE, PENDING_BCCODE),
2576 PENDING_BCCODE = NULL,
2577 REC_VERSION = REC_VERSION + 1
2578 WHERE CO_ID = lanCO_ID(lonCounter) AND SNCODE = lanSNCODE(lonCounter) AND SEQNO = lanSEQNO(lonCounter);
2579 END IF;
2580
2581
2582 IF lanDN_BLOCK_ID(lonCounter) != -1
2583 THEN
2584 RetentionDirectoryNumber(lanDN_ID(lonCounter), NULL /* retention Mode */, lanDN_BLOCK_ID(lonCounter), pionRequest);
2585 ELSE
2586 RetentionDirectoryNumber(lanDN_ID(lonCounter), NULL /* retention Mode */, NULL, pionRequest);
2587 END IF;
2588
2589 lonCounter := lonCounter + 1;
2590 END LOOP;
2591 -- end PN 00269321
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603END RetentionDNofContract;
2604/*
2605** =====================================================================
2606**
2607** Procedure: Cancel_DN_Replace
2608**
2609** DBMS_Output statements shall remain until unit test of 56399 is ready !
2610** #UMTS# 82630
2611** =====================================================================
2612*/
2613PROCEDURE Cancel_DN_Replace (
2614 pionRequest IN CONTRACT_HISTORY.request%TYPE,
2615 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
2616 pionOldDNId IN DIRECTORY_NUMBER.dn_id%TYPE, -- NULL if many DNs are changed (change SIM over different HLR)
2617 pionNewDNId IN DIRECTORY_NUMBER.dn_id%TYPE) -- NULL if many DNs are changed (change SIM over different HLR)
2618IS
2619 -- Cursor for Contr_services_cap to get dn_block_id
2620 -- selects two records, new dn first !
2621 CURSOR locServicesCap IS
2622 SELECT DN_BLOCK_ID
2623 FROM CONTR_SERVICES_CAP
2624 WHERE CO_ID = pionContractId
2625 AND CS_REQUEST = pionRequest
2626 AND CS_STATUS IS NULL
2627 AND CS_ACTIV_DATE IS NULL;
2628 lcrServicesCap locServicesCap%ROWTYPE;
2629 -- Cursor for Directory_number to get external_id
2630 CURSOR locNewDNs IS
2631 SELECT DIRECTORY_NUMBER.DN_ID
2632 ,DIRECTORY_NUMBER.EXTERNAL_IND
2633 FROM DIRECTORY_NUMBER
2634 ,CONTR_SERVICES_CAP
2635 WHERE CONTR_SERVICES_CAP.CO_ID = pionContractId
2636 AND CONTR_SERVICES_CAP.CS_REQUEST = pionRequest
2637 AND CONTR_SERVICES_CAP.CS_STATUS IS NULL
2638 AND CONTR_SERVICES_CAP.CS_ACTIV_DATE IS NULL
2639 AND CONTR_SERVICES_CAP.DN_ID = DIRECTORY_NUMBER.DN_ID;
2640 lcrNewDNs locNewDNs%ROWTYPE;
2641 -- Feature 201959_plsql begin
2642 losPortOwner VARCHAR2(2);
2643 -- 201959_plsql end
2644
2645 PROCEDURE ClearContrDevices(pionDNID IN DIRECTORY_NUMBER.dn_id%TYPE) IS
2646 BEGIN
2647 SELECT PORT_OWNER INTO losPortOwner
2648 FROM DIRECTORY_NUMBER DN, MPDHLTAB HL
2649 WHERE DN.DN_ID = pionDNID
2650 AND HL.HLCODE = DN.HLCODE;
2651 IF losPortOwner = 'DN' THEN
2652 DELETE FROM CONTR_DEVICES
2653 WHERE CO_ID = pionContractId
2654 AND DN_ID = pionDNID;
2655 END IF;
2656 END ClearContrDevices;
2657
2658BEGIN
2659 DBMS_OUTPUT.put_line('--> Cancel_DN_Replace: ' ||
2660 ' Request: ' || pionRequest ||
2661 ' ContractId: ' || pionContractId ||
2662 ' OldMsisdnID: ' || pionOldDNId ||
2663 ' NewMsisdnID: ' || pionNewDNId);
2664 /*IF pionOldDNId IS NOT NULL #UMTS# THEN
2665 -- simple exchange of old and new DN --> update CONTR_SERVICES
2666 UPDATE CONTR_SERVICES
2667 SET CS_PENDING_STATE = NULL
2668 ,REC_VERSION = REC_VERSION + 1
2669 WHERE CO_ID = pionContractId
2670 AND CS_REQUEST = pionRequest -- only network services
2671 AND CS_PENDING_STATE IS NOT NULL;
2672 IF SQL%ROWCOUNT = 0 THEN
2673 gosErrorText := 'Cancel_DN_Replace: no pending services';
2674 RAISE geoApplicationError;
2675 END IF;
2676 END IF; */
2677 -- Retention of new DNs
2678 IF pionNewDNId IS NULL THEN
2679 OPEN locNewDNs;
2680 FETCH locNewDNs INTO lcrNewDNs;
2681 IF locNewDNs%NOTFOUND THEN
2682 gosErrorText := 'Cancel_DN_Replace: no new Dirnums found in CONTR_SERVICES_CAP';
2683 RAISE geoApplicationError;
2684 END IF;
2685 CLOSE locNewDNs;
2686 FOR xcrNewDNs IN locNewDNs LOOP
2687 IF xcrNewDNs.EXTERNAL_IND = 'Y' THEN
2688 /* begin defect 203433 */
2689 --RetentionDirectoryNumber(xcrNewDNs.DN_ID,'f');
2690 RetentionDirectoryNumber(xcrNewDNs.DN_ID,'f',NULL,pionRequest);
2691 /* end defect 203433 */
2692 ELSE
2693 /* begin defect 203433 */
2694 --RetentionDirectoryNumber(xcrNewDNs.DN_ID,'r');
2695 RetentionDirectoryNumber(xcrNewDNs.DN_ID,'r',NULL,pionRequest);
2696 /* end defect 203433 */
2697 END IF;
2698 END LOOP;
2699 ELSE
2700 -- exchange only one DN
2701 -- (this procedure can only change one BLOCK DN)
2702 OPEN locServicesCap;
2703 FETCH locServicesCap
2704 INTO lcrServicesCap;
2705 IF lcrServicesCap.DN_BLOCK_ID IS NOT NULL THEN
2706 -- Old directory with different constant part
2707 IF pionOldDNId != pionNewDNId THEN
2708 UPDATE DIRECTORY_NUMBER_BLOCK
2709 SET DNB_REQUESTED_STATUS = NULL,
2710 STATUS_MOD_DATE = SYSDATE,
2711 REC_VERSION = REC_VERSION + 1
2712 WHERE DN_ID = pionOldDNId
2713 AND DN_BLOCK_ID = lcrServicesCap.DN_BLOCK_ID
2714 AND DNB_REQUESTED_STATUS IS NOT NULL;
2715 END IF;
2716 Cancel_BlockNumberSplitting(pionNewDNId, pionRequest);
2717
2718 -- begin KW defect 00229846
2719 -- Retention of new DNs
2720 ELSE
2721 OPEN locNewDNs;
2722 FETCH locNewDNs INTO lcrNewDNs;
2723 IF locNewDNs%NOTFOUND
2724 THEN
2725 gosErrorText := 'Cancel_DN_Replace: no new Dirnums found in CONTR_SERVICES_CAP';
2726 RAISE geoApplicationError;
2727 END IF;
2728 CLOSE locNewDNs;
2729 FOR xcrNewDNs IN locNewDNs
2730 LOOP
2731 IF xcrNewDNs.EXTERNAL_IND = 'Y'
2732 THEN
2733 RetentionDirectoryNumber(xcrNewDNs.DN_ID,'f',NULL,pionRequest);
2734 ELSE
2735 RetentionDirectoryNumber(xcrNewDNs.DN_ID,'r',NULL,pionRequest);
2736 END IF;
2737 END LOOP;
2738 -- end KW defect 00229846
2739 END IF;
2740 CLOSE locServicesCap;
2741 END IF;
2742 -- Update old DNs
2743 IF pionOldDNId IS NOT NULL THEN
2744 UPDATE DIRECTORY_NUMBER
2745 SET DN_STATUS_REQU = NULL,
2746 DN_MODDATE = SYSDATE,
2747 REC_VERSION = REC_VERSION + 1
2748 WHERE DN_ID = pionOldDNId
2749 AND DN_STATUS_REQU IS NOT NULL;
2750 ELSE
2751 UPDATE DIRECTORY_NUMBER DNR
2752 SET DNR.DN_STATUS_REQU = NULL,
2753 DNR.DN_MODDATE = SYSDATE,
2754 DNR.REC_VERSION = REC_VERSION + 1
2755 WHERE EXISTS (SELECT CSC.DN_ID FROM CONTR_SERVICES_CAP CSC
2756 WHERE CSC.DN_ID = DNR.DN_ID
2757 AND CSC.CS_STATUS IS NOT NULL
2758 AND CSC.CS_REQUEST = pionRequest );
2759 END IF;
2760
2761 -- Delete all new DNs in CONTR_SERVICES_CAP
2762 -- (WHERE clause must be equal to WHERE clause of CURSOR locNewDirNums!)
2763 DELETE
2764 FROM CONTR_SERVICES_CAP
2765 WHERE CO_ID = pionContractId
2766 AND CS_REQUEST = pionRequest
2767 AND CS_STATUS IS NULL
2768 AND CS_ACTIV_DATE IS NULL;
2769 -- Feature 201959_plsql begin
2770 IF pionNewDNID IS NOT NULL -- defect 213467
2771 THEN
2772 ClearContrDevices(pionNewDNID);
2773 ELSE
2774 FOR xcrNewDNs IN locNewDNs LOOP
2775 ClearContrDevices(xcrNewDNs.DN_ID);
2776 END LOOP;
2777 END IF;
2778 -- 201959_plsql end
2779END Cancel_DN_Replace;
2780/*
2781** =====================================================================
2782**
2783** Procedure: Cancel_Port_Replacement
2784**
2785** =====================================================================
2786*/
2787PROCEDURE Cancel_Port_Replacement (
2788 pionRequest IN CONTRACT_HISTORY.request%TYPE,
2789 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
2790 pionReqMar IN NUMBER,
2791 pionOldPortID IN PORT.port_id%TYPE,
2792 pionNewPortID IN PORT.port_id%TYPE)
2793IS
2794 CURSOR locDevices IS
2795 SELECT PORT_ID, CD_PENDING_STATE, DN_ID -- F402782 added DN_ID
2796 FROM CONTR_DEVICES
2797 WHERE CO_ID = pionContractId
2798 AND CD_PENDING_STATE IS NOT NULL ORDER BY CD_SEQNO
2799 FOR UPDATE;
2800 /*
2801 ** For every device one of the counter is incremented.
2802 ** At the end we'll check if the counters are equal and
2803 ** that at least one exchage had happend.
2804 */
2805 lonCounterActivate NUMBER := 0;
2806 lonCounterDeactivate NUMBER := 0;
2807 CURSOR locPort IS
2808 SELECT EXTERNAL_IND
2809 FROM PORT
2810 WHERE PORT_ID = pionNewPortID;
2811 lcrPort locPort%ROWTYPE;
2812 -- Def 31196/d
2813 CURSOR locPortOld IS
2814 SELECT PORT_ID, DN_ID, SM_ID, PORT_SM_REQU, EXTERNAL_IND
2815 FROM PORT
2816 WHERE PORT_ID = pionOldPortID
2817 FOR UPDATE;
2818 lcrPortOld locPortOld%ROWTYPE;
2819 CURSOR locPortNew IS
2820 SELECT PORT_ID, DN_ID, SM_ID, PORT_SM_REQU, EXTERNAL_IND
2821 FROM PORT
2822 WHERE PORT_ID = pionNewPortID
2823 FOR UPDATE;
2824 lcrPortNew locPortNew%ROWTYPE;
2825 losPortOwner VARCHAR2(2);
2826 locDN_STATUS_REQUold DIRECTORY_NUMBER.DN_STATUS_REQU%TYPE := NULL;
2827 lonDnIdOld DIRECTORY_NUMBER.dn_id%TYPE := NULL;
2828 /* locDN_STATUS_REQUold, lonDnIdOld new with F402782 */
2829BEGIN
2830 SELECT PORT_OWNER
2831 INTO losPortOwner
2832 FROM MPDHLTAB HL, PORT P
2833 WHERE P.HLCODE = HL.HLCODE
2834 AND P.PORT_ID = TO_NUMBER(pionNewPortID);
2835
2836 IF pionReqMar = conServiceDriven THEN
2837 /* #UMTS# 82630 removed todo ?
2838 UPDATE CONTR_SERVICES
2839 SET CS_PENDING_STATE = NULL,
2840 REC_VERSION = REC_VERSION + 1
2841 WHERE CO_ID = pionContractID
2842 AND CS_REQUEST = pionRequest
2843 AND CS_PENDING_STATE IS NOT NULL; */
2844 DELETE FROM CONTR_SERVICES_PORT
2845 WHERE CO_ID = pionContractID
2846 AND CSP_REQUEST = pionRequest
2847 AND CSP_STATUS IS NULL;
2848 UPDATE PORT
2849 SET PORT_STATUS_REQU = NULL,
2850 PORT_MODDATE = SYSDATE,
2851 REC_VERSION = REC_VERSION + 1
2852 WHERE PORT_ID = pionOldPortID;
2853 OPEN locPort;
2854 FETCH locPort
2855 INTO lcrPort;
2856 IF locPort%FOUND THEN
2857 IF lcrPort.EXTERNAL_IND = 'Y' THEN
2858 /* begin defect 203433 */
2859 --RetentionPort( pionNewPortID, 'f' );
2860 RetentionPort( pionNewPortID, 'f', pionRequest );
2861 /* end defect 203433 */
2862 ELSE
2863 /* begin defect 203433 */
2864 --RetentionPort( pionNewPortID, 'r' );
2865 RetentionPort( pionNewPortID, 'r', pionRequest );
2866 /* end defect 203433 */
2867 END IF;
2868 END IF;
2869 CLOSE locPort;
2870 ELSE -- market is not service driven
2871 FOR xcrDevice IN locDevices LOOP
2872 IF xcrDevice.CD_PENDING_STATE = cosStatusDeactivate THEN
2873 /*
2874 ** Deactivate section
2875 */
2876 lonCounterDeactivate := lonCounterDeactivate + 1;
2877 UPDATE CONTR_DEVICES
2878 SET CD_PENDING_STATE = NULL,
2879 /*Defect 205655 begin*/
2880 CD_RS_ID = NULL,
2881 /*205655 end*/
2882 REC_VERSION = REC_VERSION + 1
2883 WHERE CURRENT OF locDevices;
2884 /* Def 31196/d comment section actions will be done in cosStatusActivate section
2885 ** To see old code please check out older version of contract.spp
2886 */
2887 -- Def 31196/d add pionReqMar != conEquipmentDriven
2888 IF xcrDevice.PORT_ID IS NOT NULL
2889 AND pionReqMar != conEquipmentDriven THEN
2890 UPDATE PORT
2891 SET PORT_STATUS_REQU = NULL,
2892 PORT_MODDATE = SYSDATE,
2893 REC_VERSION = REC_VERSION + 1
2894 WHERE PORT_ID = xcrDevice.Port_ID
2895 AND PORT_STATUS_REQU IS NOT NULL;
2896
2897 /* F402782: Consider phantom MSISDN */
2898 SELECT DN_ID INTO lonDnIdOld FROM CONTR_DEVICES
2899 WHERE PORT_ID = pionOldPortID AND CO_ID = pionContractId;
2900
2901 IF lonDnIdOld IS NOT NULL AND pionReqMar = conStorMedDriven THEN
2902 SELECT DN_STATUS_REQU INTO locDN_STATUS_REQUold
2903 FROM DIRECTORY_NUMBER WHERE DN_ID = lonDnIdOld FOR UPDATE;
2904
2905 IF locDN_STATUS_REQUold IS NOT NULL THEN
2906 UPDATE DIRECTORY_NUMBER SET DN_STATUS_REQU = NULL
2907 WHERE DN_ID = lonDnIdOld;
2908 END IF;
2909 END IF;
2910 /* F402782 - end */
2911
2912 END IF;
2913 -- Def 31196/d add pionReqMar != conEquipmentDriven
2914 /* This block was replaced with new code by 201959 feature
2915 IF pionReqMar != conEquipmentDriven
2916 AND pionReqMar != conPortDriven
2917 AND xcrDevice.PORT_ID IS NOT NULL THEN
2918 UPDATE STORAGE_MEDIUM
2919 SET SM_STATUS_REQU = NULL,
2920 REC_VERSION = REC_VERSION + 1
2921 WHERE SM_STATUS_REQU IS NOT NULL
2922 AND SM_ID = ( SELECT SM_ID
2923 FROM PORT
2924 WHERE PORT_ID = xcrDevice.PORT_ID);
2925 END IF;
2926 */
2927 -- Feature 201959_plsql Begin
2928 IF losPortOwner = 'DN'
2929 AND pionReqMar = conStorMedDriven
2930 AND xcrDevice.PORT_ID IS NOT NULL THEN
2931 UPDATE STORAGE_MEDIUM
2932 SET SM_STATUS_REQU = NULL, REC_VERSION = REC_VERSION + 1
2933 WHERE SM_STATUS_REQU IS NOT NULL
2934 AND SM_ID = ( SELECT SM_ID FROM PORT WHERE PORT_ID = xcrDevice.PORT_ID);
2935 END IF;
2936 -- 201959_plsql end
2937 ELSIF xcrDevice.CD_PENDING_STATE = cosStatusActivate THEN
2938 /*
2939 ** Activate section
2940 */
2941 lonCounterActivate := lonCounterActivate + 1;
2942
2943 -- F402782 - end Reset status of phantom DN
2944 IF xcrDevice.DN_ID IS NOT NULL AND pionReqMar = conStorMedDriven THEN
2945 UPDATE DIRECTORY_NUMBER SET DN_STATUS_REQU = null,
2946 DN_STATUS = 'f'
2947 WHERE DN_ID = xcrDevice.DN_ID;
2948 END IF;
2949 -- F402782 - begin
2950
2951 DELETE FROM CONTR_DEVICES
2952 WHERE CURRENT OF locDevices;
2953 IF pionReqMar = conEquipmentDriven THEN -- NMT
2954 -- Def 31196/d begin
2955 IF xcrDevice.PORT_ID != pionOldPortID THEN -- dirnum change for NMT
2956 -- update new port and dirnum
2957 OPEN locPortNew;
2958 FETCH locPortNew INTO lcrPortNew;
2959 IF locPortNew%FOUND THEN
2960 UPDATE PORT
2961 SET PORT_SM_REQU = NULL,
2962 PORT_MODDATE = SYSDATE,
2963 REC_VERSION = REC_VERSION + 1
2964 WHERE CURRENT OF locPortNew;
2965 IF lcrPortNew.EXTERNAL_IND = 'Y' THEN
2966 /* begin defect 203433 */
2967 --RetentionPort( lcrPortNew.PORT_ID, 'f' );
2968 RetentionPort( lcrPortNew.PORT_ID, 'f', pionRequest );
2969 /* end defect 203433 */
2970 ELSE
2971 /* begin defect 203433 */
2972 --RetentionPort( lcrPortNew.PORT_ID, 'r' );
2973 RetentionPort( lcrPortNew.PORT_ID, 'r', pionRequest );
2974 /* end defect 203433 */
2975 END IF;
2976 END IF; -- %FOUND
2977 -- update old port and dirnum, reset pending state flag
2978 OPEN locPortOld;
2979 FETCH locPortOld INTO lcrPortOld;
2980 IF locPortOld%FOUND THEN
2981 UPDATE PORT
2982 SET PORT_STATUS_REQU = NULL,
2983 PORT_MODDATE = SYSDATE,
2984 REC_VERSION = REC_VERSION + 1
2985 WHERE CURRENT OF locPortOld;
2986 IF lcrPortOld.DN_ID IS NOT NULL
2987 AND lcrPortNew.DN_ID IS NOT NULL THEN
2988 Cancel_DN_Replace(pionRequest,
2989 pionContractId,
2990 lcrPortOld.DN_ID,
2991 lcrPortNew.DN_ID );
2992 END IF;
2993 END IF; -- locPortOld%FOUND
2994 CLOSE locPortNew;
2995 CLOSE locPortOld;
2996 ELSE -- xcrDevice.PORT_ID != pionOldPortID
2997 -- ESN (SIM) change
2998 OPEN locPortOld;
2999 FETCH locPortOld INTO lcrPortOld;
3000 IF locPortOld%FOUND THEN
3001 -- clear pending state of old ESN
3002 IF lcrPortOld.SM_ID IS NOT NULL THEN
3003 UPDATE STORAGE_MEDIUM
3004 SET SM_STATUS_REQU = NULL,
3005 SM_MODDATE = SYSDATE,
3006 REC_VERSION = REC_VERSION + 1
3007 WHERE SM_ID = lcrPortOld.SM_ID;
3008 END IF; -- lcrPortOld.SM_ID IS NOT NULL
3009 -- reset new ESN
3010 IF lcrPortOld.PORT_SM_REQU IS NOT NULL THEN
3011 IF lcrPortOld.EXTERNAL_IND = 'Y' THEN
3012 /* begin defect 203433 */
3013 --RetentionStorageMedium( lcrPortOld.PORT_SM_REQU, 'f' );
3014 RetentionStorageMedium( lcrPortOld.PORT_SM_REQU, 'f', pionRequest );
3015 /* end defect 203433 */
3016 ELSE
3017 /* begin defect 203433 */
3018 --RetentionStorageMedium( lcrPortOld.PORT_SM_REQU, 'r' );
3019 RetentionStorageMedium( lcrPortOld.PORT_SM_REQU, 'r', pionRequest );
3020 /* end defect 203433 */
3021 END IF;
3022 END IF; -- lcrPortOld.PORT_SM_REQU IS NOT NULL
3023 -- update old port
3024 UPDATE PORT
3025 SET PORT_SM_REQU = NULL,
3026 PORT_STATUS_REQU = NULL,
3027 PORT_MODDATE = SYSDATE,
3028 REC_VERSION = REC_VERSION + 1
3029 WHERE CURRENT OF locPortOld;
3030 END IF; -- locPortOld%FOUND
3031 CLOSE locPortOld;
3032 END IF; -- xcrDevice.PORT_ID != pionOldPortID
3033 -- Def 31196/d end
3034 ELSE -- port and storage medium driven markets
3035 OPEN locPort;
3036 FETCH locPort
3037 INTO lcrPort;
3038 IF locPort%FOUND THEN
3039 IF lcrPort.EXTERNAL_IND = 'Y' THEN
3040 /* begin defect 203433 */
3041 --RetentionPort( pionNewPortID, 'f' );
3042 RetentionPort( pionNewPortID, 'f', pionRequest );
3043 /* end defect 203433 */
3044 ELSE
3045 /* begin defect 203433 */
3046 --RetentionPort( pionNewPortID, 'r' );
3047 RetentionPort( pionNewPortID, 'r', pionRequest );
3048 /* end defect 203433 */
3049 END IF;
3050 END IF;
3051 CLOSE locPort;
3052 END IF;
3053 ELSE
3054 /*
3055 ** No valid status!
3056 */
3057 gosErrorText := 'Cancel_ChangeSubscription: ' ||
3058 'Illegal status ' ||
3059 xcrDevice.CD_PENDING_STATE;
3060 RAISE geoApplicationError;
3061 END IF; -- xcrDevice.CD_PENDING_STATE = cosStatusActivate
3062 END LOOP; -- Devices
3063 IF lonCounterActivate = 0 THEN
3064 gosErrorText := 'Cancel_ChangeSubscription: ' ||
3065 'No device activated (Subscription type is port)';
3066 RAISE geoApplicationError;
3067 END IF;
3068 IF lonCounterActivate != lonCounterDeactivate THEN
3069 gosErrorText := 'Cancel_ChangeSubscription: ' ||
3070 '#Activate ('|| lonCounterActivate||') is not equal ' ||
3071 '#Deactivate ('|| lonCounterDeactivate ||'). ' ||
3072 'Subscription type is port)';
3073 RAISE geoApplicationError;
3074 END IF;
3075 -- Def 31196/d remove CS_SPARAM1 = CS_PENDING_PARAM
3076 /* #UMTS# 82630 removed todo?
3077 UPDATE CONTR_SERVICES
3078 SET CS_PENDING_STATE = NULL,
3079 REC_VERSION = REC_VERSION + 1
3080 WHERE CO_ID = pionContractId
3081 AND CS_REQUEST = pionRequest -- only network services
3082 AND CS_PENDING_STATE IS NOT NULL; */
3083 UPDATE CONTR_SERVICES_CAP
3084 SET PENDING_BCCODE = NULL,
3085 REC_VERSION = REC_VERSION + 1
3086 WHERE CO_ID = pionContractId
3087 AND CS_REQUEST = pionRequest
3088 AND PENDING_BCCODE IS NOT NULL;
3089 END IF; -- check if market is service driven
3090END Cancel_Port_Replacement;
3091
3092/*
3093** =====================================================================
3094**
3095** Procedure: Cancel_Port_Add introduced with feature 402782
3096**
3097** =====================================================================
3098*/
3099PROCEDURE Cancel_Port_Add (
3100 pionRequest IN CONTRACT_HISTORY.request%TYPE,
3101 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
3102 pionReqMar IN NUMBER,
3103-- pionOldPortID IN PORT.port_id%TYPE,
3104 pionNewPortID IN PORT.port_id%TYPE)
3105IS
3106 CURSOR locDevices IS
3107 SELECT PORT_ID, CD_PENDING_STATE, DN_ID
3108 FROM CONTR_DEVICES
3109 WHERE CO_ID = pionContractId
3110 AND CD_PENDING_STATE IS NOT NULL ORDER BY CD_SEQNO
3111 FOR UPDATE;
3112 /*
3113 ** For every device the counter is incremented.
3114 */
3115 lonCounterActivate NUMBER := 0;
3116-- lonCounterDeactivate NUMBER := 0;
3117 CURSOR locPort IS
3118 SELECT EXTERNAL_IND
3119 FROM PORT
3120 WHERE PORT_ID = pionNewPortID;
3121 lcrPort locPort%ROWTYPE;
3122
3123 CURSOR locPortNew IS
3124 SELECT PORT_ID, DN_ID, SM_ID, PORT_SM_REQU, EXTERNAL_IND
3125 FROM PORT
3126 WHERE PORT_ID = pionNewPortID
3127 FOR UPDATE;
3128 lcrPortNew locPortNew%ROWTYPE;
3129 losPortOwner VARCHAR2(2);
3130BEGIN
3131 SELECT PORT_OWNER
3132 INTO losPortOwner
3133 FROM MPDHLTAB HL, PORT P
3134 WHERE P.HLCODE = HL.HLCODE
3135 AND P.PORT_ID = TO_NUMBER(pionNewPortID);
3136
3137-- IF pionReqMar = conServiceDriven THEN
3138 /* Market is GSM */
3139
3140-- ELSE -- market is not service driven
3141 FOR xcrDevice IN locDevices LOOP
3142 -- IF xcrDevice.CD_PENDING_STATE = cosStatusDeactivate THEN
3143 /*
3144 ** Deactivate section
3145 */
3146 -- ELSIF xcrDevice.CD_PENDING_STATE = cosStatusActivate THEN
3147 IF xcrDevice.CD_PENDING_STATE = cosStatusActivate THEN
3148 /*
3149 ** Activate section
3150 */
3151 lonCounterActivate := lonCounterActivate + 1;
3152 -- Begin PN 402782 Reset status of phantom DN
3153 IF xcrDevice.DN_ID IS NOT NULL AND pionReqMar = conStorMedDriven THEN
3154
3155 UPDATE DIRECTORY_NUMBER SET DN_STATUS_REQU = null,
3156 DN_STATUS = 'f'
3157 WHERE DN_ID = xcrDevice.DN_ID;
3158
3159 END IF;
3160 -- End PN 402782
3161 DELETE FROM CONTR_DEVICES
3162 WHERE CURRENT OF locDevices;
3163 -- IF pionReqMar = conEquipmentDriven THEN -- NMT
3164 /* Market is GSM */
3165 -- ELSE -- port and storage medium driven markets
3166 OPEN locPort;
3167 FETCH locPort
3168 INTO lcrPort;
3169 IF locPort%FOUND THEN
3170 IF lcrPort.EXTERNAL_IND = 'Y' THEN
3171
3172 RetentionPort( pionNewPortID, 'f', pionRequest );
3173
3174 ELSE
3175
3176 RetentionPort( pionNewPortID, 'r', pionRequest );
3177
3178 END IF;
3179 END IF;
3180 CLOSE locPort;
3181-- END IF;
3182 ELSE
3183 /*
3184 ** No valid status!
3185 */
3186 gosErrorText := 'Cancel_ChangeSubscription: ' ||
3187 'Illegal status ' ||
3188 xcrDevice.CD_PENDING_STATE;
3189 RAISE geoApplicationError;
3190 END IF; -- xcrDevice.CD_PENDING_STATE = cosStatusActivate
3191 END LOOP; -- Devices
3192 IF lonCounterActivate = 0 THEN
3193 gosErrorText := 'Cancel_ChangeSubscription: ' ||
3194 'No device activated (Subscription type is port)';
3195 RAISE geoApplicationError;
3196 END IF;
3197 -- Def 31196/d remove CS_SPARAM1 = CS_PENDING_PARAM
3198
3199 UPDATE CONTR_SERVICES_CAP
3200 SET PENDING_BCCODE = NULL,
3201 REC_VERSION = REC_VERSION + 1
3202 WHERE CO_ID = pionContractId
3203 AND CS_REQUEST = pionRequest
3204 AND PENDING_BCCODE IS NOT NULL;
3205 -- END IF; -- check if market is service driven
3206
3207 DELETE FROM PARAMETER_VALUE
3208 WHERE REQUEST_ID = pionRequest;
3209
3210END Cancel_Port_Add;
3211/*
3212** =====================================================================
3213**
3214** Procedure: Cancel_Port_Remove introduced with feature 402782
3215**
3216** =====================================================================
3217*/
3218PROCEDURE Cancel_Port_Remove (
3219 pionRequest IN CONTRACT_HISTORY.request%TYPE,
3220 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
3221 pionReqMar IN NUMBER,
3222-- pionNewPortID IN PORT.port_id%TYPE)
3223 pionOldPortID IN PORT.port_id%TYPE)
3224
3225IS
3226 CURSOR locDevices IS
3227 SELECT PORT_ID, CD_PENDING_STATE, DN_ID, ORIGINAL_PORT_ID -- F402782
3228 FROM CONTR_DEVICES
3229 WHERE CO_ID = pionContractId
3230 AND CD_PENDING_STATE IS NOT NULL ORDER BY CD_SEQNO
3231 FOR UPDATE;
3232 /*
3233 ** For every device the counter is incremented.
3234 */
3235-- lonCounterActivate NUMBER := 0;
3236 lonCounterDeactivate NUMBER := 0;
3237/* CURSOR locPort IS
3238 SELECT EXTERNAL_IND
3239 FROM PORT
3240 WHERE PORT_ID = pionNewPortID;
3241 lcrPort locPort%ROWTYPE; */
3242
3243 CURSOR locPortOld IS
3244 SELECT PORT_ID, DN_ID, SM_ID, PORT_SM_REQU, EXTERNAL_IND
3245 FROM PORT
3246 WHERE PORT_ID = pionOldPortID
3247 FOR UPDATE;
3248 lcrPortOld locPortOld%ROWTYPE;
3249/* CURSOR locPortNew IS
3250 SELECT PORT_ID, DN_ID, SM_ID, PORT_SM_REQU, EXTERNAL_IND
3251 FROM PORT
3252 WHERE PORT_ID = pionNewPortID
3253 FOR UPDATE;
3254 lcrPortNew locPortNew%ROWTYPE; */
3255 losPortOwner VARCHAR2(2);
3256BEGIN
3257/*
3258 SELECT PORT_OWNER
3259 INTO losPortOwner
3260 FROM MPDHLTAB HL, PORT P
3261 WHERE P.HLCODE = HL.HLCODE
3262 AND P.PORT_ID = TO_NUMBER(pionNewPortID); */
3263
3264-- IF pionReqMar = conServiceDriven THEN
3265 /* Market is GSM */
3266-- ELSE -- market is not service driven
3267 FOR xcrDevice IN locDevices LOOP
3268 IF xcrDevice.CD_PENDING_STATE = cosStatusDeactivate THEN
3269 /*
3270 ** Deactivate section
3271 */
3272 lonCounterDeactivate := lonCounterDeactivate + 1;
3273 UPDATE CONTR_DEVICES
3274 SET CD_PENDING_STATE = NULL,
3275 /*Defect 205655 begin*/
3276 CD_RS_ID = NULL,
3277 /*205655 end*/
3278 REC_VERSION = REC_VERSION + 1
3279 WHERE CURRENT OF locDevices;
3280
3281 -- Begin F402782
3282 IF xcrDevice.ORIGINAL_PORT_ID IS NOT NULL THEN
3283 UPDATE CONTR_DEVICES
3284 SET CD_STATUS = 'R'
3285 WHERE CURRENT OF locDevices;
3286 ELSE
3287 UPDATE CONTR_DEVICES
3288 SET CD_STATUS = 'O'
3289 WHERE CURRENT OF locDevices;
3290 END IF;
3291 -- End F402782
3292
3293 /* Remove requested status for phantom MSISDN */
3294 IF xcrDevice.DN_ID IS NOT NULL THEN
3295 UPDATE DIRECTORY_NUMBER
3296 SET DN_STATUS_REQU = NULL
3297 WHERE DN_ID = xcrDevice.DN_ID;
3298 END IF;
3299
3300
3301 /* Def 31196/d comment section actions will be done in cosStatusActivate section
3302 ** To see old code please check out older version of contract.spp
3303 */
3304 -- Def 31196/d add pionReqMar != conEquipmentDriven
3305 IF xcrDevice.PORT_ID IS NOT NULL
3306 AND pionReqMar != conEquipmentDriven THEN
3307 UPDATE PORT
3308 SET PORT_STATUS_REQU = NULL,
3309 PORT_MODDATE = SYSDATE,
3310 REC_VERSION = REC_VERSION + 1
3311 WHERE PORT_ID = xcrDevice.Port_ID
3312 AND PORT_STATUS_REQU IS NOT NULL;
3313 END IF;
3314 -- Def 31196/d add pionReqMar != conEquipmentDriven
3315 /* This block was replaced with new code by 201959 feature
3316 IF pionReqMar != conEquipmentDriven
3317 AND pionReqMar != conPortDriven
3318 AND xcrDevice.PORT_ID IS NOT NULL THEN
3319 UPDATE STORAGE_MEDIUM
3320 SET SM_STATUS_REQU = NULL,
3321 REC_VERSION = REC_VERSION + 1
3322 WHERE SM_STATUS_REQU IS NOT NULL
3323 AND SM_ID = ( SELECT SM_ID
3324 FROM PORT
3325 WHERE PORT_ID = xcrDevice.PORT_ID);
3326 END IF;
3327 */
3328 -- Feature 201959_plsql Begin
3329 IF losPortOwner = 'DN'
3330 AND pionReqMar = conStorMedDriven
3331 AND xcrDevice.PORT_ID IS NOT NULL THEN
3332 UPDATE STORAGE_MEDIUM
3333 SET SM_STATUS_REQU = NULL, REC_VERSION = REC_VERSION + 1
3334 WHERE SM_STATUS_REQU IS NOT NULL
3335 AND SM_ID = ( SELECT SM_ID FROM PORT WHERE PORT_ID = xcrDevice.PORT_ID);
3336 END IF;
3337
3338 ELSE
3339 /*
3340 ** No valid status!
3341 */
3342 gosErrorText := 'Cancel_ChangeSubscription: ' ||
3343 'Illegal status ' ||
3344 xcrDevice.CD_PENDING_STATE;
3345 RAISE geoApplicationError;
3346 END IF; -- xcrDevice.CD_PENDING_STATE = cosStatusActivate
3347 END LOOP; -- Devices
3348
3349
3350 UPDATE CONTR_SERVICES_CAP
3351 SET PENDING_BCCODE = NULL,
3352 REC_VERSION = REC_VERSION + 1
3353 WHERE CO_ID = pionContractId
3354 AND CS_REQUEST = pionRequest
3355 AND PENDING_BCCODE IS NOT NULL;
3356-- END IF; -- check if market is service driven
3357
3358 DELETE FROM PARAMETER_VALUE
3359 WHERE REQUEST_ID = pionRequest;
3360
3361END Cancel_Port_Remove;
3362
3363/* feature 201959_plsql begin
3364** =====================================================================
3365**
3366** Procedure: Cancel_SM_Replace
3367**
3368** =====================================================================
3369*/
3370PROCEDURE Cancel_SM_Replace (
3371 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
3372 piosData1 IN MDSRRTAB.data_1%TYPE,/*PN 00250230_plsql/d:usc*/
3373 piosData2 IN MDSRRTAB.data_2%TYPE /*PN 00250230_plsql/d:usc*/
3374 ) IS
3375 loiSMID INTEGER;
3376BEGIN
3377 SELECT P.SM_ID INTO loiSMID FROM CURR_CO_DEVICE CD, PORT P
3378 WHERE P.PORT_ID = CD.PORT_ID AND CD.CO_ID = pionContractId;
3379 UPDATE STORAGE_MEDIUM
3380 SET SM_STATUS_REQU = NULL,
3381 SM_MODDATE = SYSDATE,
3382 REC_VERSION = REC_VERSION + 1
3383 WHERE SM_ID = loiSMID;
3384
3385 /*Begin 00250230_plsql/d:usc*/
3386 UPDATE STORAGE_MEDIUM
3387 SET SM_STATUS_REQU = NULL,
3388 SM_MODDATE = SYSDATE,
3389 REC_VERSION = REC_VERSION + 1
3390 WHERE SM_SERIALNUM = piosData1;
3391
3392 UPDATE STORAGE_MEDIUM
3393 SET SM_STATUS_REQU = NULL,
3394 SM_STATUS = cosStatusFree,
3395 DEALER_ID = NULL,
3396 SM_MODDATE = SYSDATE,
3397 REC_VERSION = REC_VERSION + 1
3398 WHERE SM_SERIALNUM =piosData2;
3399 /*End PN 00250230_plsql/d:usc*/
3400
3401END Cancel_SM_Replace;
3402/* 201959_plsql end */
3403/*
3404** =====================================================================
3405**
3406** Procedure: Cancel_DN_and_Port_Replace
3407**
3408** =====================================================================
3409*/
3410PROCEDURE Cancel_DN_and_Port_Replace (
3411 pionRequest IN CONTRACT_HISTORY.request%TYPE,
3412 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
3413 pionReqMar IN NUMBER, -- This procedure works storage medium driven markets only!
3414 pionOldPortID IN PORT.port_id%TYPE,
3415 pionNewPortID IN PORT.port_id%TYPE)
3416IS
3417BEGIN
3418 -- DBMS_OUTPUT.put_line('--> Cancel_DN_and_Port_Replace: ' ||
3419 -- ' Request: ' || pionRequest ||
3420 -- ' ContractId: ' || pionContractId ||
3421 -- ' Market: ' || pionReqMar ||
3422 -- ' Old Port ID: ' || pionOldPortID ||
3423 -- ' New Port ID: ' || pionNewPortID);
3424 -- Check that market is storage medium driven
3425 IF pionReqMar != conStorMedDriven THEN
3426 gosErrorText := 'Cancel_DN_and_Port_Replace: pionReqMar: Invalid market type';
3427 RAISE geoApplicationError;
3428 END IF;
3429 -- Cancel Replace Port (SIM card)
3430 Cancel_Port_Replacement( pionRequest,
3431 pionContractId,
3432 pionReqMar,
3433 pionOldPortID,
3434 pionNewPortID);
3435 -- Cancel Replace 0..n Directory Numbers
3436 Cancel_DN_Replace(pionRequest,
3437 pionContractId,
3438 NULL,
3439 NULL);
3440END Cancel_DN_and_Port_Replace;
3441/*
3442** =====================================================================
3443**
3444** Procedure: Cancel_ChangeTM
3445**
3446** Purpose: Cancels the RatePlan Change request with updates to the
3447** contract and deletion of contract and service package history
3448** =====================================================================
3449*/
3450PROCEDURE Cancel_ChangeTM (
3451 pionRequest IN CONTRACT_HISTORY.request%TYPE,
3452 pionContractId IN CONTRACT_HISTORY.co_id%TYPE )
3453IS
3454 CURSOR locContractPendingTM IS
3455 SELECT PENDING_TMCODE
3456 FROM CONTRACT_ALL
3457 WHERE CO_ID = pionContractId
3458 FOR UPDATE OF PENDING_TMCODE, REC_VERSION NOWAIT;
3459 lonPendingTMCode CONTRACT_ALL.PENDING_TMCODE%TYPE;
3460 lodTMCodeDate CONTRACT_ALL.TMCODE_DATE%TYPE;
3461
3462 losData3 MDSRRTAB.DATA_3%TYPE;
3463BEGIN
3464 OPEN locContractPendingTM;
3465 FETCH locContractPendingTM INTO lonPendingTMCode;
3466 IF lonPendingTMCode IS NULL THEN
3467 CLOSE locContractPendingTM;
3468 gosErrorText := 'Cancel_ChangeTM: PendingTMCode IS NULL';
3469 RAISE geoApplicationError;
3470 END IF;
3471
3472-- PN00219003, R.Puntke, 17-MAY-2002 BEGIN mod.
3473-- Cancel_ChangeTM must delete the row with the REQUEST_ID in PR_SERV_STATUS_HIST
3474
3475 -- PN 209320 - Cancel_ChangeTM must null out the REQUEST_ID in PR_SERV_STATUS_HIST */
3476 -- UPDATE PR_SERV_STATUS_HIST
3477 -- SET REQUEST_ID = NULL,
3478 -- REC_VERSION = REC_VERSION + 1
3479 -- WHERE CO_ID = pionContractId
3480 -- AND REQUEST_ID = pionRequest;
3481 -- end PN209320
3482
3483 DELETE FROM PR_SERV_STATUS_HIST
3484 WHERE CO_ID = pionContractId
3485 AND REQUEST_ID = pionRequest
3486 AND VALID_FROM_DATE IS NULL;
3487-- end PN00219003
3488
3489 DELETE FROM PR_SERV_SPCODE_HIST
3490 WHERE CO_ID = pionContractId
3491 AND REQUEST_ID = pionRequest;
3492
3493-- reset the DELETE flag in case a deactived service becomes visible in the old rateplan again
3494 UPDATE PROFILE_SERVICE P SET p.DELETE_FLAG=NULL WHERE P.CO_ID= pionContractId AND P.DELETE_FLAG ='X' AND
3495 EXISTS (SELECT R.SNCODE FROM CURR_MPULKTMB R, CONTRACT_ALL C,PR_SERV_SPCODE_HIST H WHERE C.CO_ID=P.CO_ID AND R.TMCODE=C.TMCODE
3496 -- PN00293978/d, AV added AND R.SNCODE=P.SNCODE otherwise even those entries are updated, that are not in the current rate plan
3497 AND H.CO_ID= C.CO_ID AND P.SNCODE= H.SNCODE AND P.PROFILE_ID = H.PROFILE_ID AND H.HISTNO= P.SPCODE_HISTNO AND H.SPCODE=R.SPCODE AND R.SNCODE=P.SNCODE);
3498
3499-- 00345335 set the DELETE flag in case a core service activated during rate plan change isn't visible in the old rateplan again
3500-- the activation request is a child request of the rate plan change request and therefore it is canceled before the rate plan change request.
3501 UPDATE PROFILE_SERVICE P SET p.DELETE_FLAG='X' WHERE P.CO_ID= pionContractId AND P.DELETE_FLAG is NULL AND
3502 NOT EXISTS (SELECT R.SNCODE FROM CURR_MPULKTMB R, CONTRACT_ALL C,PR_SERV_SPCODE_HIST H WHERE C.CO_ID=P.CO_ID AND R.TMCODE=C.TMCODE
3503 AND H.CO_ID= C.CO_ID AND P.SNCODE= H.SNCODE AND P.PROFILE_ID = H.PROFILE_ID AND H.HISTNO= P.SPCODE_HISTNO AND H.SPCODE=R.SPCODE AND R.SNCODE=P.SNCODE);
3504
3505
3506 DELETE FROM RATEPLAN_HIST
3507 WHERE CO_ID = pionContractId
3508 AND REQUEST_ID = pionRequest;
3509
3510 UPDATE CONTRACT_ALL
3511 SET PENDING_TMCODE = NULL,
3512 REC_VERSION = REC_VERSION + 1
3513 WHERE CO_ID = pionContractId;
3514
3515
3516 -- re-activate the prepaid profile
3517 SELECT DATA_3 INTO losData3 FROM MDSRRTAB WHERE REQUEST = pionRequest;
3518 IF losData3 = 'D' THEN
3519 UPDATE CONTR_PREPAID_LC_PROFILE SET DELETED_IND = NULL WHERE CO_ID = pionContractId;
3520 END IF;
3521
3522 CLOSE locContractPendingTM;
3523END Cancel_ChangeTM;
3524
3525/*
3526** =========================================================================
3527**
3528** Procedure: Cancel_Rating_Option
3529** FEATURE 287342 OH
3530**
3531** Purpose: Cancels the pending addition or modification of a rating option.
3532** =========================================================================
3533*/
3534PROCEDURE Cancel_Rating_Option (
3535 pionRequest IN CONTR_RATING_OPTION.request_id%TYPE)
3536IS
3537BEGIN
3538 DELETE FROM CONTR_RATING_OPTION
3539 WHERE REQUEST_ID = pionRequest
3540 AND PENDING_FLAG='X';
3541END Cancel_Rating_Option;
3542
3543/*
3544** =====================================================================
3545**
3546** Procedure: Cancel_ChangeSP
3547**
3548** Purpose: Cancels the Service Pack Change request with updates to the
3549** contract and deletion of contract and service package history
3550** =====================================================================
3551*/
3552PROCEDURE Cancel_ChangeSP (
3553 pionRequest IN CONTRACT_HISTORY.request%TYPE,
3554 pionContractId IN CONTRACT_HISTORY.co_id%TYPE )
3555IS
3556BEGIN
3557
3558 DELETE FROM PR_SERV_STATUS_HIST
3559 WHERE CO_ID = pionContractId
3560 AND REQUEST_ID = pionRequest
3561 AND VALID_FROM_DATE IS NULL;
3562
3563 -- reset the DELETE flag in case a deactived service becomes visible in the old rateplan again
3564 UPDATE PROFILE_SERVICE P SET p.DELETE_FLAG=NULL WHERE P.CO_ID= pionContractId AND P.DELETE_FLAG ='X' AND
3565 EXISTS (SELECT R.SNCODE FROM CURR_MPULKTMB R, CONTRACT_ALL C,PR_SERV_SPCODE_HIST H
3566 WHERE C.CO_ID=P.CO_ID AND R.TMCODE=C.TMCODE AND H.CO_ID= P.CO_ID AND P.SNCODE= H.SNCODE
3567 AND P.PROFILE_ID = H.PROFILE_ID AND H.HISTNO= P.SPCODE_HISTNO AND H.SPCODE=R.SPCODE AND H.SNCODE= R.SNCODE
3568 AND EXISTS (SELECT 1 FROM PR_SERV_SPCODE_HIST O WHERE O.CO_ID= H.CO_ID AND O.SNCODE= H.SNCODE
3569 AND O.PROFILE_ID= H.PROFILE_ID AND O.REQUEST_ID = pionRequest AND O.HISTNO<>H.HISTNO));
3570
3571 DELETE FROM PR_SERV_SPCODE_HIST
3572 WHERE CO_ID = pionContractId
3573 AND REQUEST_ID = pionRequest
3574 AND VALID_FROM_DATE IS NULL;
3575
3576
3577
3578END Cancel_ChangeSP;
3579
3580/*
3581** =====================================================================
3582**
3583** Procedure: Cancel_ChangeSubscription
3584** #UMTS# 82630
3585** =====================================================================
3586*/
3587PROCEDURE Cancel_ChangeSubscription (
3588 pionRequest IN CONTRACT_HISTORY.request%TYPE,
3589 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
3590 pionPlcode IN MPDPLTAB.plcode%TYPE,
3591 pionReqMar IN NUMBER,
3592 pionActionId IN NUMBER,
3593 piosData1 IN MDSRRTAB.data_1%TYPE,
3594 piosData2 IN MDSRRTAB.data_2%TYPE)
3595IS
3596 /* 15-Mar-2001 HirschA begin feature 84834 */
3597 losCoLinkType CONTRACT_ALL.CO_REL_TYPE%TYPE;
3598 lonFetchMainCoId CONTRACT_RELATION.MAIN_CO_ID%TYPE;
3599 CURSOR locGetLinkedALContracts IS
3600 SELECT MAIN_CO_ID, REL_CO_ID
3601 FROM CONTRACT_RELATION
3602 WHERE (MAIN_CO_ID = pionContractId
3603 OR MAIN_CO_ID = (SELECT MAIN_CO_ID
3604 FROM CONTRACT_RELATION
3605 WHERE REL_CO_ID = pionContractId
3606 AND COR_DEACTIVE_DATE IS NULL))
3607 AND COR_DEACTIVE_DATE IS NULL;
3608 CURSOR locContractLinkType IS
3609 SELECT CO_REL_TYPE
3610 FROM CONTRACT_ALL
3611 WHERE CO_ID = pionContractId;
3612 /* end feature 84834 */
3613 -- Feature 201959_plsql begin
3614 losPortOwner VARCHAR2(2);
3615 -- 201959_plsql end
3616
3617 losScslPrefix VARCHAR2(3);/*PN 250230_plsql/d:usc*/
3618BEGIN
3619 DBMS_OUTPUT.put_line('--> Cancel_ChangeSubscription: ' ||
3620 ' Request: ' || pionRequest ||
3621 ' ContractId: ' || pionContractId ||
3622 ' Plcode: ' || pionPlcode ||
3623 ' Market: ' || pionReqMar ||
3624 ' ActionId: ' || pionActionId ||
3625 ' OldSubscription: ' || piosData1 ||
3626 ' NewSubscription: ' || piosData2);
3627 IF pionReqMar IS NULL THEN
3628 gosErrorText := 'Cancel_ChangeSubscription: Market IS NULL';
3629 RAISE geoApplicationError;
3630 END IF;
3631 IF pionActionId IS NULL THEN
3632 gosErrorText := 'Cancel_ChangeSubscription: Action identifier IS NULL';
3633 RAISE geoApplicationError;
3634 END IF;
3635 /* 15-Mar-2001 HirschA begin feature 84834 */
3636 /*Alternate Line: Get contract type (Regular='', Main='M', AL='R') */
3637 OPEN locContractLinkType;
3638 FETCH locContractLinkType
3639 INTO losCoLinkType;
3640 CLOSE locContractLinkType;
3641 /* end feature 84834 */
3642
3643 SELECT SCSLPREFIX INTO losScslPrefix FROM MPDSCTAB SC, CONTRACT_ALL CA
3644 WHERE SC.SCCODE = CA.SCCODE AND CA.CO_ID = pionContractId; -- introduced with feature 402782
3645
3646 IF pionActionId = 6001 THEN
3647 Cancel_DN_Replace(pionRequest,
3648 pionContractId,
3649 -- IdOfDirectoryNumber( piosData1, pionPlcode ), Start Defect 80442 WPa 03-JUL-2000
3650 -- IdOfDirectoryNumber( piosData2, pionPlcode ));
3651 IdOfDirectoryNumber( piosData1, pionPlcode, pionContractId, pionRequest ),
3652 IdOfDirectoryNumber( piosData2, pionPlcode, pionContractId, pionRequest )); -- End Defect 80442 WPa 03-JUL-2000
3653 ELSIF pionActionId = 7 THEN
3654 UPDATE CONTRACT_ALL
3655 SET PENDING_CONTRACT_ID_LEC = NULL,
3656 PENDING_CONTRACT_ID_LDC = NULL,
3657 REC_VERSION = REC_VERSION + 1
3658 WHERE CO_ID = pionContractId
3659 AND CO_REQUEST = pionRequest;
3660 IF SQL%ROWCOUNT = 0 THEN
3661 gosErrorText :=
3662 'Cancel_ChangeSubscription: no pending eccode lec or ldc for ' ||
3663 'Contract ' || pionContractID || ' and ' ||
3664 'Request ' || pionRequest ;
3665 RAISE geoApplicationError;
3666 END IF;
3667 /* #UMTS# */
3668 DELETE FROM PR_SERV_STATUS_HIST
3669 WHERE CO_ID = pionContractId
3670 AND REQUEST_ID = pionRequest -- only network services
3671 AND VALID_FROM_DATE IS NULL;
3672 /* #UMTS# */
3673 UPDATE CONTR_SERVICES_CAP
3674 SET PENDING_BCCODE = NULL,
3675 REC_VERSION = REC_VERSION + 1
3676 WHERE CO_ID = pionContractId
3677 AND CS_REQUEST = pionRequest
3678 AND PENDING_BCCODE IS NOT NULL;
3679 ELSIF pionActionId = 6003 THEN
3680 /* 15-Mar-2001 HirschA begin feature 84834 */
3681 IF losCoLinkType IS NULL THEN -- regular contract THEN
3682 /* end feature 84834 */
3683 Cancel_Port_Replacement( pionRequest,
3684 pionContractId,
3685 pionReqMar,
3686 -- IdOfPortNumber( piosData1, pionPlcode ), Begin Defect 80442 WPa
3687 -- IdOfPortNumber( piosData2, pionPlcode )); piosData1, piosData2 contain already PortIDs
3688 TO_NUMBER(piosData1),
3689 TO_NUMBER(piosData2)); -- End Defect 80442 WPa
3690 /* 15-Mar-2001 HirschA begin feature 84834 */
3691 ELSE
3692 FOR xcDepCont IN locGetLinkedALContracts LOOP
3693 -- first loop over all linked AL contracts
3694 Cancel_Port_Replacement( pionRequest,
3695 xcDepCont.REL_CO_ID,
3696 pionReqMar,
3697 TO_NUMBER(piosData1),
3698 TO_NUMBER(piosData2));
3699 -- get the Main contract's ID
3700 lonFetchMainCoId := xcDepCont.MAIN_CO_ID;
3701 END LOOP;
3702 -- now process the corresponding Main contract
3703 Cancel_Port_Replacement( pionRequest,
3704 lonFetchMainCoId,
3705 pionReqMar,
3706 TO_NUMBER(piosData1),
3707 TO_NUMBER(piosData2));
3708 END IF;
3709 /* end feature 84834 */
3710 ELSIF pionActionId = 6004 THEN
3711 Cancel_DN_and_Port_Replace( pionRequest,
3712 pionContractId,
3713 pionReqMar,
3714 -- IdOfPortNumber( piosData1, pionPlcode ), Begin Defect 80442 WPa
3715 -- IdOfPortNumber( piosData2, pionPlcode )); piosData1, piosData2 contain already PortIDs
3716 TO_NUMBER(piosData1),
3717 TO_NUMBER(piosData2)); -- End Defect 80442 WPa
3718 ELSIF pionActionId = 16 THEN
3719 Cancel_ChangeTM ( pionRequest, pionContractId );
3720 ELSIF pionActionId = 39 THEN -- OUL 260533
3721 Cancel_ChangeSP ( pionRequest, pionContractId );
3722 /* Feature 201959_plsql begin*/
3723 ELSIF pionActionId = 6002 THEN
3724 /*Begin PN 00250230_plsql/d:usc*/
3725 /* SELECT PORT_OWNER
3726 INTO losPortOwner
3727 FROM MPDHLTAB HL, PORT P
3728 WHERE P.HLCODE = HL.HLCODE
3729 AND P.PORT_ID = TO_NUMBER(piosData2);
3730 IF losPortOwner = 'DN' THEN
3731 Cancel_SM_Replace( pionContractId );
3732 END IF; */
3733 /*201959_plsql end*/
3734 -- Begin 273403_plsql, AV
3735 -- SELECT SCSLPREFIX INTO losScslPrefix FROM MPDSCTAB SC, CONTRACT_ALL CA
3736 -- WHERE SC.SCCODE = CA.SCCODE AND CA.CO_ID = pionContractId;
3737 -- IF losScslPrefix != 'AMP' THEN
3738 SELECT PORT_OWNER INTO losPortOwner FROM MPDHLTAB HL, CURR_CO_DEVICE CD
3739 WHERE CD.HLCODE = HL.HLCODE AND CD.CO_ID = pionContractId;
3740 IF losPortOwner = 'SM' THEN
3741 -- End 273403_plsql
3742 SELECT PORT_OWNER
3743 INTO losPortOwner
3744 FROM MPDHLTAB HL, PORT P
3745 WHERE P.HLCODE = HL.HLCODE AND P.PORT_ID = TO_NUMBER(piosData2);
3746 IF losPortOwner = 'DN' THEN
3747 Cancel_SM_Replace( pionContractId,piosData1,piosData2);
3748 END IF;
3749 ELSE
3750 DELETE FROM CONTR_DEVICES
3751 WHERE CO_ID = pionContractId
3752 AND CD_SM_NUM = piosData2;
3753 UPDATE CONTR_DEVICES
3754 SET CD_PENDING_STATE = NULL,
3755 CD_RS_ID = NULL,
3756 REC_VERSION = REC_VERSION + 1
3757 WHERE CO_ID = pionContractId
3758 AND CD_SM_NUM = piosData1;
3759 SELECT PORT_OWNER
3760 INTO losPortOwner
3761 FROM MPDHLTAB HL, PORT P
3762 WHERE P.HLCODE = HL.HLCODE
3763 AND P.PORT_ID = (SELECT PORT_ID FROM CURR_CO_DEVICE
3764 WHERE CO_ID =pionContractId
3765 AND CD_SM_NUM=piosData1);
3766 IF (losPortOwner = 'DN') OR (losPortOwner = 'NW')THEN
3767 Cancel_SM_Replace( pionContractId,piosData1,piosData2);
3768 END IF;
3769 END IF;
3770 /*End PN 00250230_plsql/d:usc*/
3771
3772 -- F402782 - Begin
3773 ELSIF ((pionActionId = 13003) AND (losScslPrefix = 'GSM')) THEN
3774
3775 IF losCoLinkType IS NULL THEN -- regular contract THEN
3776
3777 Cancel_Port_Add( pionRequest,
3778 pionContractId,
3779 pionReqMar,
3780 TO_NUMBER(piosData1));
3781
3782 ELSE
3783 FOR xcDepCont IN locGetLinkedALContracts LOOP
3784 -- first loop over all linked AL contracts
3785 Cancel_Port_Add( pionRequest,
3786 xcDepCont.REL_CO_ID,
3787 pionReqMar,
3788 TO_NUMBER(piosData1));
3789 -- get the Main contract's ID
3790 lonFetchMainCoId := xcDepCont.MAIN_CO_ID;
3791 END LOOP;
3792 -- now process the corresponding Main contract
3793 Cancel_Port_Add( pionRequest,
3794 lonFetchMainCoId,
3795 pionReqMar,
3796 TO_NUMBER(piosData1));
3797 END IF;
3798 ELSIF ((pionActionId = 14003) AND (losScslPrefix = 'GSM')) THEN
3799
3800 IF losCoLinkType IS NULL THEN -- regular contract THEN
3801
3802 Cancel_Port_Remove( pionRequest,
3803 pionContractId,
3804 pionReqMar,
3805 TO_NUMBER(piosData1));
3806
3807 ELSE
3808 FOR xcDepCont IN locGetLinkedALContracts LOOP
3809 -- first loop over all linked AL contracts
3810 Cancel_Port_Remove( pionRequest,
3811 xcDepCont.REL_CO_ID,
3812 pionReqMar,
3813 TO_NUMBER(piosData1));
3814 -- get the Main contract's ID
3815 lonFetchMainCoId := xcDepCont.MAIN_CO_ID;
3816 END LOOP;
3817 -- now process the corresponding Main contract
3818 Cancel_Port_Remove( pionRequest,
3819 lonFetchMainCoId,
3820 pionReqMar,
3821 TO_NUMBER(piosData1));
3822 END IF;
3823 -- F402782 - End
3824
3825 ELSE -- unkown status
3826 gosErrorText := 'Cancel_ChangeSubscription: ' ||
3827 'Unkown Action Identifier (' ||
3828 pionActionId || ') ';
3829 RAISE geoApplicationError;
3830 END IF;
3831END Cancel_ChangeSubscription;
3832/*
3833** =====================================================================
3834**
3835** Procedure: Cancel_ServiceControl
3836** #UMTS# 82630
3837** =====================================================================
3838*/
3839PROCEDURE Cancel_ServiceControl (
3840 pionRequest IN CONTRACT_HISTORY.request%TYPE,
3841 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
3842 pionActionId IN NUMBER)
3843IS
3844 -- Cursor for all assigned Services
3845 CURSOR locServices IS
3846 SELECT SNCODE, PROFILE_ID, TRANSACTIONNO
3847 FROM PR_SERV_STATUS_HIST
3848 WHERE CO_ID = pionContractId
3849 AND REQUEST_ID = pionRequest
3850 FOR UPDATE;
3851
3852 -- Cursor for all assigned Services identified by the current transaction number
3853 lonTransactionNumber PR_SERV_STATUS_HIST.TRANSACTIONNO%TYPE;
3854 lonLastStatusHistNo PROFILE_SERVICE.STATUS_HISTNO%TYPE;
3855 lonLastSPCodeHistNo PROFILE_SERVICE.SPCODE_HISTNO%TYPE;
3856 lonParentRequest MDSRRTAB.Parent_Request%TYPE;
3857
3858 CURSOR locServicesByTransNo IS
3859 SELECT SNCODE, PROFILE_ID, TRANSACTIONNO
3860 FROM PR_SERV_STATUS_HIST
3861 WHERE CO_ID = pionContractId
3862 AND TRANSACTIONNO = lonTransactionNumber
3863 FOR UPDATE;
3864
3865 -- Cursor for all Contr_services_cap/directory_number
3866 CURSOR locServicesCap( pconSncode IN MPUSNTAB.SNCODE%TYPE,
3867 pconProfileID IN PROFILE_SERVICE.PROFILE_ID%TYPE ) IS
3868 SELECT CSC.DN_ID,
3869 CSC.DN_BLOCK_ID,
3870 CSC.CS_ACTIV_DATE,
3871 DN.EXTERNAL_IND,
3872 DN.DN_STATUS_REQU /* PN 238082 :vov*/
3873 FROM CONTR_SERVICES_CAP CSC, DIRECTORY_NUMBER DN
3874 WHERE CSC.CO_ID = pionContractId
3875 AND CSC.CS_REQUEST = pionRequest -- only network services
3876 AND CSC.SNCODE = pconSncode
3877 AND CSC.PROFILE_ID = pconProfileID
3878 AND dn.DN_ID = CSC.DN_ID;
3879
3880 /*Begin defect 222063:vovkodav */
3881 CURSOR locDirectoNumb IS
3882 SELECT CSC.DN_ID,
3883 CSC.DN_BLOCK_ID,
3884 CSC.CS_ACTIV_DATE,
3885 CSC.ADDITIONAL_FLAG,
3886 DN.EXTERNAL_IND,
3887 CSC.SNCODE,
3888 CSC.PROFILE_ID
3889 FROM CONTR_SERVICES_CAP CSC, DIRECTORY_NUMBER DN
3890 WHERE CSC.CO_ID = pionContractId
3891 AND CSC.CS_REQUEST = pionRequest
3892 AND DN.DN_ID = CSC.DN_ID;
3893
3894
3895 CURSOR locCUG IS
3896 SELECT SNCODE,PROFILE_ID
3897 FROM CONTR_SERVICES_CUG
3898 WHERE CO_ID=pionContractId
3899 AND CUG_REQUEST=pionRequest;
3900 /*End defect 222063:vovkodav */
3901 /*
3902 ** The varibale is set to TRUE if the loop was entered. If
3903 ** no services are selected an error occur.
3904 */
3905 lobServicesFound BOOLEAN := FALSE;
3906
3907 /* begin defect 264608 AV */
3908 lonSncode PROFILE_SERVICE.SNCODE%TYPE;
3909 lonProfileId PROFILE_SERVICE.PROFILE_ID%TYPE;
3910 lonLastAttribHistNo PROFILE_SERVICE.ATTRIB_HISTNO%TYPE;
3911
3912 CURSOR locGetServData IS
3913 SELECT SNCODE, PROFILE_ID
3914 FROM PR_SERV_ATTRIB_HIST
3915 WHERE REQUEST_ID=pionRequest;
3916
3917 CURSOR locGetLastAttrHistNo IS
3918 SELECT MAX(SERVICE_ATTRIB_HISTNO) FROM PR_SERV_ATTRIB_HIST
3919 WHERE CO_ID=pionContractId
3920 AND PROFILE_ID=lonProfileId
3921 AND SNCODE=lonSncode;
3922 /* end 264608 */
3923
3924BEGIN
3925 DBMS_OUTPUT.put_line('--> Cancel_ServiceControl: Request: ' ||
3926 pionRequest || ' ContractId: ' || pionContractId );
3927
3928 -- FEATURE 240721
3929 -- Delete service attribute entry in case request is cancelled
3930 /* begin defect 264608 AV */
3931 /* Get the SNCODE and PROFILE_ID of the affected services */
3932 OPEN locGetServData;
3933 LOOP
3934 FETCH locGetServData INTO lonSncode,lonProfileId;
3935 IF locGetServData%FOUND THEN
3936 DELETE FROM PR_SERV_ATTRIB_HIST
3937 WHERE CO_ID = pionContractId
3938 AND PROFILE_ID = lonProfileId
3939 AND SNCODE = lonSncode
3940 AND REQUEST_ID = pionRequest
3941 AND VALID_FROM IS NULL;
3942
3943 /* After removing the entry from PR_SERV_ATTIB_HIST, PROFILE_SERVICE.ATTRIB_HISTNO should be updated */
3944
3945 OPEN locGetLastAttrHistNo;
3946 FETCH locGetLastAttrHistNo INTO lonLastAttribHistNo;
3947
3948 IF lonLastAttribHistNo IS NOT NULL THEN
3949 /* update with the previous attrib hist no */
3950 UPDATE PROFILE_SERVICE SET ATTRIB_HISTNO = lonLastAttribHistNo
3951 WHERE CO_ID = pionContractId
3952 AND PROFILE_ID = lonProfileId
3953 AND SNCODE = lonSncode;
3954 ELSE
3955 /* no previous attrib hist no, update with null */
3956 UPDATE PROFILE_SERVICE SET ATTRIB_HISTNO = NULL
3957 WHERE CO_ID = pionContractId
3958 AND PROFILE_ID = lonProfileId
3959 AND SNCODE = lonSncode;
3960 END IF;
3961
3962 CLOSE locGetLastAttrHistNo;
3963 ELSE
3964 EXIT;
3965 END IF;
3966 END LOOP;
3967
3968 CLOSE locGetServData;
3969 /* end 264608 */
3970
3971 FOR xcrService IN locServices LOOP -- this loop is entered only one time
3972 lobServicesFound := TRUE;
3973 lonTransactionNumber := xcrService.TRANSACTIONNO;
3974
3975 DELETE FROM PR_SERV_STATUS_HIST
3976 WHERE CURRENT OF locServices;
3977
3978 -- Feature 276992 CWLEE
3979 DELETE FROM PROFILE_SERVICE_ADV_CHARGE
3980 WHERE REQUEST_ID = pionRequest
3981 AND PENDING_FLAG IS NOT NULL
3982 AND CO_ID = pionContractId
3983 AND PROFILE_ID = xcrService.PROFILE_ID
3984 AND SNCODE = xcrService.SNCODE;
3985
3986 -- during rateplan or service package change an re-activation might happen with service package change, that must be considered for the canceling as well
3987 IF pionActionId IN (8) THEN
3988 DELETE FROM PR_SERV_SPCODE_HIST
3989 WHERE REQUEST_ID = pionRequest
3990 AND CO_ID = pionContractId
3991 AND PROFILE_ID = xcrService.PROFILE_ID
3992 AND SNCODE = xcrService.SNCODE;
3993 END IF;
3994
3995 Cug.Cancel_Service_Request(pionRequest, pionContractId,
3996 xcrService.SNCODE, pionActionId,xcrService.Profile_ID);
3997 FOR xcrServicesCap IN locServicesCap( xcrService.SNCODE,
3998 xcrService.Profile_ID ) LOOP -- this loop is entered only one time
3999 IF xcrServicesCap.CS_ACTIV_DATE IS NULL THEN
4000 /* Start Defect 84080 MOG 16-01-2001*/
4001 /* DELETE FROM CONTR_SERVICES_CAP
4002 WHERE CO_ID = pionContractId
4003 AND CS_REQUEST = pionRequest
4004 AND SNCODE = xcrService.SNCODE
4005 AND CS_ACTIV_DATE IS NULL; */
4006 /* Begin lobemeier defect 224525/d
4007 UPDATE CONTR_SERVICES_CAP
4008 SET CS_REQUEST = NULL,
4009 REC_VERSION = REC_VERSION + 1
4010 WHERE CO_ID = pionContractId
4011 AND CS_REQUEST = pionRequest
4012 AND SNCODE = xcrService.SNCODE
4013 AND CS_ACTIV_DATE IS NULL; */
4014
4015 -- defecet 00230693 KW
4016 --IF pionActionId = 8
4017 IF pionActionId = 13001
4018 -- end defect 00230693 KW
4019 THEN
4020
4021 DELETE FROM CONTR_SERVICES_CAP
4022 WHERE CO_ID = pionContractId
4023 AND CS_REQUEST = pionRequest
4024 AND SNCODE = xcrService.SNCODE
4025 AND CS_ACTIV_DATE IS NULL;
4026
4027 ELSE
4028
4029 UPDATE CONTR_SERVICES_CAP
4030 SET CS_REQUEST = NULL,
4031 REC_VERSION = REC_VERSION + 1
4032 WHERE CO_ID = pionContractId
4033 AND CS_REQUEST = pionRequest
4034 AND SNCODE = xcrService.SNCODE
4035 AND CS_ACTIV_DATE IS NULL;
4036
4037 END IF;
4038 /* End lobemeier defect 224525/d */
4039
4040 /* End Defect 84080 MOG 16-01-2001 */
4041 IF xcrServicesCap.DN_BLOCK_ID IS NOT NULL THEN
4042 Cancel_BlockNumberSplitting(xcrServicesCap.DN_ID, pionRequest);
4043 ELSE
4044 --defect 00230693 KW
4045 IF pionActionId NOT IN (8) THEN
4046 --defect 00230693 KW
4047 IF xcrServicesCap.EXTERNAL_IND = 'Y' THEN
4048 /* begin defect 203433 */
4049 --RetentionDirectoryNumber(xcrServicesCap.DN_ID, 'f');
4050 RetentionDirectoryNumber(xcrServicesCap.DN_ID, 'f', NULL, pionRequest);
4051 /* end defect 203433 */
4052 ELSE
4053 /* begin defect 203433 */
4054 --RetentionDirectoryNumber(xcrServicesCap.DN_ID, 'r');
4055 RetentionDirectoryNumber(xcrServicesCap.DN_ID, 'r', NULL, pionRequest);
4056 /* end defect 203433 */
4057 END IF; -- check External_IND
4058 --defect 00230693 KW
4059 END IF;
4060 --defect 00230693 KW
4061 END IF; -- DN_BLOCK_ID
4062 ELSE
4063 /*Begin PN 238082 :vov*/
4064 IF xcrServicesCap.DN_STATUS_REQU = 'o' THEN
4065
4066 DELETE FROM DN_PORTED_IN_OUT WHERE DN_ID = xcrServicesCap.DN_ID;
4067
4068 -- Feature 280461 keep the history
4069 --DELETE FROM PORTING_REQUEST_HISTORY WHERE DN_ID = xcrServicesCap.DN_ID;
4070
4071 END IF;
4072 /*End PN 238082 :vov*/
4073 UPDATE CONTR_SERVICES_CAP
4074 SET PENDING_BCCODE = NULL,
4075 REC_VERSION = REC_VERSION + 1
4076 WHERE CO_ID= pionContractID
4077 AND CS_REQUEST = pionRequest
4078 AND SNCODE = xcrService.SNCODE
4079 AND PENDING_BCCODE IS NOT NULL;
4080 UPDATE DIRECTORY_NUMBER
4081 SET DN_STATUS_REQU = NULL,
4082 DN_MODDATE = SYSDATE,
4083 REC_VERSION = REC_VERSION + 1
4084 WHERE DN_ID = xcrServicesCap.DN_ID
4085 AND DN_STATUS_REQU IS NOT NULL;
4086 END IF; -- CS_ACTIV_DATE
4087 END LOOP; -- ServicesCap
4088 END LOOP; -- Services
4089
4090 --Begin defect 222063:vovkodav
4091
4092 FOR xcrDnNumb IN locDirectoNumb
4093 LOOP
4094 lobServicesFound := TRUE;
4095 IF pionActionId IN (13001)
4096 THEN
4097 DELETE FROM CONTR_SERVICES_CAP
4098 WHERE CO_ID = pionContractId
4099 AND CS_REQUEST = pionRequest
4100 AND SNCODE = xcrDnNumb.SNCODE
4101 AND PROFILE_ID=xcrDnNumb.PROFILE_ID
4102 AND CS_ACTIV_DATE IS NULL;
4103
4104 IF xcrDnNumb.DN_BLOCK_ID IS NOT NULL THEN
4105 Cancel_BlockNumberSplitting(xcrDnNumb.DN_ID, pionRequest);
4106 ELSE
4107 IF xcrDnNumb.EXTERNAL_IND = 'Y' THEN
4108 RetentionDirectoryNumber(xcrDnNumb.DN_ID, 'f', NULL, pionRequest);
4109 ELSE
4110 RetentionDirectoryNumber(xcrDnNumb.DN_ID, 'r', NULL, pionRequest);
4111 END IF;
4112 END IF;
4113
4114 --Update additional flag
4115 IF xcrDnNumb.ADDITIONAL_FLAG IS NOT NULL AND xcrDnNumb.ADDITIONAL_FLAG = 'N' THEN
4116 UPDATE CONTR_SERVICES_CAP
4117 SET ADDITIONAL_FLAG = NULL
4118 WHERE CO_ID = pionContractId
4119 AND ADDITIONAL_FLAG = 'O';
4120 END IF;
4121
4122 ELSE
4123 IF pionActionId IN (14001,12)
4124
4125 THEN
4126 UPDATE CONTR_SERVICES_CAP
4127 SET PENDING_BCCODE = NULL,
4128 REC_VERSION = REC_VERSION + 1
4129 WHERE CO_ID= pionContractID
4130 AND CS_REQUEST = pionRequest
4131 AND SNCODE = xcrDnNumb.SNCODE
4132 AND PENDING_BCCODE IS NOT NULL;
4133
4134 UPDATE DIRECTORY_NUMBER
4135 SET DN_STATUS_REQU = NULL,
4136 DN_MODDATE = SYSDATE,
4137 REC_VERSION = REC_VERSION + 1
4138 WHERE DN_ID = xcrDnNumb.DN_ID
4139 AND DN_STATUS_REQU IS NOT NULL;
4140
4141 END IF ;
4142 END IF ;
4143 END LOOP;
4144
4145 /* lobemeier PN 245189
4146 The request ID must not be nulled at this point
4147 -- PN 00228668/d KW/ENU start
4148 IF pionActionId = 8 THEN -- canceling register service request
4149 UPDATE PARAMETER_VALUE
4150 SET REQUEST_ID = NULL
4151 WHERE REQUEST_ID = pionRequest;
4152 END IF;
4153
4154 -- PN 00228668/d KW/ENU end
4155 */
4156
4157 IF pionActionId IN (10,11,22,24)
4158 THEN
4159 lobServicesFound := TRUE;
4160 END IF;
4161
4162 IF pionActionId IN (21,23)
4163 THEN
4164 FOR xcrCUG IN locCUG LOOP
4165 Cug.Cancel_Service_Request(pionRequest, pionContractId,
4166 xcrCUG.SNCODE, pionActionId,xcrCUG.Profile_ID);
4167 lobServicesFound := TRUE;
4168 END LOOP;
4169 END IF;
4170 --End defect 222063:vovkodav
4171
4172 IF lobServicesFound = TRUE THEN
4173 -- cancel new parameter
4174 Prm.Cancel_ServiceControl(pionRequest, pionContractId, pionActionId);
4175
4176 /* Begin lobemeier PN 245189 */
4177 IF pionActionId = 8 THEN -- canceling register service request
4178 UPDATE PARAMETER_VALUE
4179 SET REQUEST_ID = NULL
4180 WHERE REQUEST_ID = pionRequest;
4181 END IF;
4182 /* Begin lobemeier PN 245189 */
4183 END IF;
4184
4185 /*PN 00411578*/
4186 SELECT PARENT_REQUEST INTO lonParentRequest FROM MDSRRTAB WHERE REQUEST = pionRequest;
4187
4188 /* Begin PN 397508
4189 Finally, in case of rateplan or service package change this loop is entered
4190 to remove all remaining history entries identified by the transaction number */
4191 IF (pionActionId IN (8) AND lonParentRequest > 0 ) THEN
4192 FOR xcrService IN locServicesByTransNo LOOP
4193 DELETE FROM PR_SERV_STATUS_HIST
4194 WHERE CURRENT OF locServicesByTransNo;
4195
4196 /* during rateplan or service package change an re-activation might happen
4197 with service package change, that must be considered for the canceling as well */
4198 DELETE FROM PR_SERV_SPCODE_HIST
4199 WHERE TRANSACTIONNO = xcrService.TRANSACTIONNO
4200 AND CO_ID = pionContractId
4201 AND PROFILE_ID = xcrService.PROFILE_ID
4202 AND SNCODE = xcrService.SNCODE;
4203
4204 /* After removing the entries from PR_SERV_SPCODE_HIST and PR_SERV_STATUS_HIST,
4205 update STATUS_HSITNO and SPCODE_HISTNO in PROFILE_SERVICE with the previous
4206 STATUS and SPCODE hist no if there exists any previous history entry*/
4207 SELECT MAX(HISTNO)
4208 INTO lonLastStatusHistNo
4209 FROM PR_SERV_STATUS_HIST
4210 WHERE CO_ID = pionContractId
4211 AND PROFILE_ID = xcrService.PROFILE_ID
4212 AND SNCODE = xcrService.SNCODE;
4213
4214 IF lonLastStatusHistNo IS NOT NULL THEN
4215 /* update with the previous status hist no */
4216 UPDATE PROFILE_SERVICE
4217 SET STATUS_HISTNO = lonLastStatusHistNo
4218 WHERE CO_ID = pionContractId
4219 AND PROFILE_ID = xcrService.PROFILE_ID
4220 AND SNCODE = xcrService.SNCODE;
4221 END IF;
4222
4223 SELECT MAX(HISTNO)
4224 INTO lonLastSPCodeHistNo
4225 FROM PR_SERV_SPCODE_HIST
4226 WHERE CO_ID=pionContractId
4227 AND PROFILE_ID=xcrService.PROFILE_ID
4228 AND SNCODE=xcrService.SNCODE;
4229
4230 IF lonLastSPCodeHistNo IS NOT NULL THEN
4231 /* update with the previous SPCODE hist no */
4232 UPDATE PROFILE_SERVICE
4233 SET SPCODE_HISTNO = lonLastSPCodeHistNo
4234 WHERE CO_ID = pionContractId
4235 AND PROFILE_ID = xcrService.PROFILE_ID
4236 AND SNCODE = xcrService.SNCODE;
4237 END IF;
4238
4239 /* if no previous history entries exist then the service entries in PROFILE_SERVICE
4240 as well as the related entries in PR_SERV_ATTRIB_HIST_NNP and PARAMETER_VALUE
4241 can be removed, too. */
4242 IF lonLastStatusHistNo IS NULL AND lonLastSPCodeHistNo IS NULL THEN
4243
4244 /* remove all foreign key references before deleting PROFILE_SERVICE entry*/
4245 DELETE CONTR_SERVICES_BSG
4246 WHERE CO_ID = pionContractId
4247 AND PROFILE_ID = xcrService.PROFILE_ID
4248 AND SNCODE = xcrService.SNCODE;
4249
4250 DELETE CONTR_SERVICES_PORT
4251 WHERE CO_ID = pionContractId
4252 AND PROFILE_ID = xcrService.PROFILE_ID
4253 AND SNCODE = xcrService.SNCODE;
4254
4255 DELETE CONTR_SERVICES_CAP
4256 WHERE CO_ID = pionContractId
4257 AND PROFILE_ID = xcrService.PROFILE_ID
4258 AND SNCODE = xcrService.SNCODE;
4259
4260 DELETE CONTR_SERVICES_CUG
4261 WHERE CO_ID = pionContractId
4262 AND PROFILE_ID = xcrService.PROFILE_ID
4263 AND SNCODE = xcrService.SNCODE;
4264
4265 DELETE FUP_ACCOUNT_EXP
4266 WHERE CO_ID = pionContractId
4267 AND PROFILE_ID = xcrService.PROFILE_ID
4268 AND SNCODE = xcrService.SNCODE;
4269
4270 DELETE PROFILE_CHANGE_HIST
4271 WHERE CO_ID = pionContractId
4272 AND ( PROFILE_PARENT = xcrService.PROFILE_ID OR PROFILE_CHILD = xcrService.PROFILE_ID)
4273 AND SNCODE = xcrService.SNCODE;
4274
4275 DELETE PROFILE_SERVICE_ADV_CHARGE
4276 WHERE CO_ID = pionContractId
4277 AND PROFILE_ID = xcrService.PROFILE_ID
4278 AND SNCODE = xcrService.SNCODE;
4279
4280 DELETE PR_SERV_IND_CHARGE_HIST
4281 WHERE CO_ID = pionContractId
4282 AND PROFILE_ID = xcrService.PROFILE_ID
4283 AND SNCODE = xcrService.SNCODE;
4284
4285 DELETE PR_SERV_ATTRIB_HIST
4286 WHERE CO_ID = pionContractId
4287 AND PROFILE_ID = xcrService.PROFILE_ID
4288 AND SNCODE = xcrService.SNCODE;
4289
4290 DELETE PR_SERV_OVWACCFEE_HIST
4291 WHERE CO_ID = pionContractId
4292 AND PROFILE_ID = xcrService.PROFILE_ID
4293 AND SNCODE = xcrService.SNCODE;
4294
4295 /* remove not provisioned service attribues if there any exists */
4296 DELETE PR_SERV_ATTRIB_HIST_NNP
4297 WHERE CO_ID = pionContractId
4298 AND PROFILE_ID = xcrService.PROFILE_ID
4299 AND SNCODE = xcrService.SNCODE;
4300
4301 /* remove parameter values if there any exists */
4302 DELETE PARAMETER_VALUE
4303 WHERE CO_ID = pionContractId
4304 AND PROFILE_ID = xcrService.PROFILE_ID
4305 AND SNCODE = xcrService.SNCODE;
4306
4307 /* remove values from CONTR_VAS if there any exist */
4308 DELETE FROM CONTR_VAS
4309 WHERE CO_ID = pionContractId
4310 AND PROFILE_ID = xcrService.PROFILE_ID
4311 AND SNCODE = xcrService.SNCODE;
4312
4313 /* no previous status and SPCODE history numbers found,
4314 thus remove from PROFILE_SERVICE and CONTRACT_SERVICE */
4315 DELETE PROFILE_SERVICE
4316 WHERE CO_ID = pionContractId
4317 AND PROFILE_ID = xcrService.PROFILE_ID
4318 AND SNCODE = xcrService.SNCODE;
4319
4320 -- remove service also from table CONTRACT_SERVICE, but only if
4321 -- there doesn't exist another PROFILE_SERVICE entry for a different PROFILE_ID
4322 DELETE CONTRACT_SERVICE
4323 WHERE CO_ID = pionContractId
4324 AND SNCODE = xcrService.SNCODE
4325 AND NOT EXISTS ( SELECT 1
4326 FROM PROFILE_SERVICE
4327 WHERE CO_ID=pionContractId
4328 AND SNCODE=xcrService.SNCODE );
4329 END IF;
4330
4331 END LOOP; -- Services identified by the transaction number
4332 END IF; -- pionActionId IN (8)
4333 /* End PN 397508 */
4334
4335 IF lobServicesFound = FALSE THEN
4336 gosErrorText := 'Cancel_ServiceControl: ' ||
4337 'No services found for this contract. ' ||
4338 'May be this is not the latest request ' ||
4339 'or the pending state is NULL';
4340 RAISE geoApplicationError;
4341 END IF;
4342END Cancel_ServiceControl;
4343
4344/* Feature 82630, 21-May-2001 -- BEGIN
4345** Beginning of the procedures; Finish_ChangeUserProfile and Cancel_ChangeUserProfile */
4346/*
4347** =====================================================================
4348**
4349** Procedure: Finish_ChangeUserProfile
4350** #UMTS# 82630
4351** Sidal Barengi -- 21.May.2001
4352**
4353** =====================================================================
4354*/
4355PROCEDURE Finish_ChangeUserProfile (
4356 pionRequest IN CONTRACT_HISTORY.REQUEST%TYPE,
4357 pionContractId IN CONTRACT_HISTORY.CO_ID%TYPE,
4358 pionPlcode IN MPDPLTAB.PLCODE%TYPE,
4359 pionReqMar IN NUMBER,
4360 pionActionId IN NUMBER,
4361 piosData1 IN VARCHAR2,
4362 piosData2 IN VARCHAR2)
4363IS
4364 lonSnCode PROFILE_CHANGE_HIST.SNCODE%TYPE;
4365 lonOldProfile PROFILE_CHANGE_HIST.PROFILE_PARENT%TYPE;
4366 lonNewProfile PROFILE_CHANGE_HIST.PROFILE_CHILD%TYPE;
4367 lonHistNo NUMBER;
4368 /* User profile change may occur for more than one service; so, each service in this request is retrieved */
4369 CURSOR locGetModifiedServices IS
4370 SELECT SNCODE, PROFILE_PARENT, PROFILE_CHILD
4371 FROM PROFILE_CHANGE_HIST
4372 WHERE CO_ID = pionContractId
4373 AND REQUEST_ID = pionRequest;
4374 /* begin defect 203433 */
4375 piodEffectiveDate DATE;
4376 /* end defect 203433 */
4377BEGIN
4378 /*
4379 DBMS_OUTPUT.put_line('--> Finish_ChangeUserProfile : ' ||
4380 ' Request: ' || pionRequest ||
4381 ' ContractId: ' || pionContractId ||
4382 ' Plcode: ' || pionPlcode ||
4383 ' Market: ' || pionReqMar ||
4384 ' ActionId: ' || pionActionId ||
4385 ' OldSubscription: ' || piosData1 ||
4386 ' NewSubscription: ' || piosData2);
4387 */
4388 IF pionReqMar IS NULL THEN
4389 gosErrorText := 'Finish_ChangeUserProfile: Market IS NULL';
4390 RAISE geoApplicationError;
4391 END IF;
4392 IF pionActionId IS NULL THEN
4393 gosErrorText := 'Finish_ChangeUserProfile: Action identifier IS NULL';
4394 RAISE geoApplicationError;
4395 END IF;
4396 IF pionActionId != 40 THEN -- unkown ActionID
4397 gosErrorText := 'Finish_ChangeUserProfile: Unkown Action Identifier (' || pionActionId || ')';
4398 RAISE geoApplicationError;
4399 END IF;
4400 OPEN locGetModifiedServices;
4401 LOOP
4402 FETCH locGetModifiedServices
4403 INTO lonSnCode, lonOldProfile, lonNewProfile;
4404 EXIT WHEN locGetModifiedServices%NOTFOUND;
4405 /* Update CONTR_SERVICES_CAP table for Deactivation.
4406 The correct record is the one with the highest sequence for the old profile.
4407 DeactivationDate of the old profile should be set today */
4408 /* begin defect 203433 */
4409 piodEffectiveDate := GetEffectiveDate(pionRequest);
4410 /* end defect 203433 */
4411
4412/* begin defect 384438/d */
4413
4414-- UPDATE CONTR_SERVICES_CAP
4415-- SET CS_REQUEST = pionRequest,
4416-- /* begin defect 203433 */
4417-- --CS_DEACTIV_DATE = SYSDATE,
4418-- CS_DEACTIV_DATE = piodEffectiveDate,
4419-- /* end defect 203433 */
4420-- REC_VERSION = REC_VERSION+1
4421-- WHERE CO_ID = pionContractId
4422-- AND SNCODE = lonSnCode
4423-- AND PROFILE_ID = lonOldProfile
4424-- AND SEQNO = ( SELECT MAX(SEQNO)
4425-- FROM CONTR_SERVICES_CAP
4426-- WHERE CO_ID = pionContractId
4427-- AND SNCODE = lonSnCode
4428-- AND PROFILE_ID = lonOldProfile ) ;
4429--
4430-- /*Begin defect 221696:vovkodav*/ /*This update needed at time only for CAS site*/
4431--
4432-- UPDATE CONTR_SERVICES_CAP
4433-- SET CS_ACTIV_DATE = piodEffectiveDate,
4434-- CS_STATUS = (SELECT CS_STATUS FROM CONTR_SERVICES_CAP
4435-- WHERE CO_ID = pionContractId
4436-- AND SNCODE = lonSnCode
4437-- AND PROFILE_ID = lonOldProfile
4438-- AND CS_REQUEST = pionRequest ),
4439-- REC_VERSION = REC_VERSION+1
4440-- WHERE CO_ID = pionContractId
4441-- AND SNCODE = lonSnCode
4442-- AND PROFILE_ID = lonNewProfile
4443-- AND CS_REQUEST = pionRequest ;
4444
4445 UPDATE CONTR_SERVICES_CAP
4446 SET CS_ACTIV_DATE = piodEffectiveDate,
4447 CS_STATUS = (SELECT CS_STATUS FROM CONTR_SERVICES_CAP
4448 WHERE CO_ID = pionContractId
4449 AND SNCODE = lonSnCode
4450 AND PROFILE_ID = lonOldProfile
4451 AND CS_REQUEST = pionRequest ),
4452 REC_VERSION = REC_VERSION+1
4453 WHERE CO_ID = pionContractId
4454 AND SNCODE = lonSnCode
4455 AND PROFILE_ID = lonNewProfile
4456 AND CS_REQUEST = pionRequest ;
4457
4458 UPDATE CONTR_SERVICES_CAP
4459 SET CS_REQUEST = pionRequest,
4460 CS_DEACTIV_DATE = piodEffectiveDate,
4461 REC_VERSION = REC_VERSION+1
4462 WHERE CO_ID = pionContractId
4463 AND SNCODE = lonSnCode
4464 AND PROFILE_ID = lonOldProfile
4465 AND SEQNO = ( SELECT SEQNO
4466 FROM CONTR_SERVICES_CAP
4467 WHERE CO_ID = pionContractId
4468 AND SNCODE = lonSnCode
4469 AND PROFILE_ID = lonOldProfile
4470 AND CS_ACTIV_DATE IS NOT NULL
4471 AND CS_DEACTIV_DATE IS NULL ) ;
4472
4473 UPDATE CONTR_SERVICES_CAP
4474 SET CS_ACTIV_DATE = piodEffectiveDate,
4475 CS_DEACTIV_DATE = piodEffectiveDate,
4476 REC_VERSION = REC_VERSION+1
4477 WHERE CO_ID = pionContractId
4478 AND SNCODE = lonSnCode
4479 AND PROFILE_ID = lonOldProfile
4480 AND CS_REQUEST = pionRequest
4481 AND CS_ACTIV_DATE IS NULL
4482 AND CS_DEACTIV_DATE IS NULL;
4483
4484/* end defect 384438/d */
4485
4486 /*End defect 221696:vovkodav*/
4487 /* To finish the request completely,
4488 -- PROFILE_SERVICES.STATUS_HISTNO should be updated with PR_SERV_STATUS_HISTNO.HISTNO value
4489 -- PR_SERV_STATUS_HISTNO.VALID_FROM_DATE should be updated with SYSDATE for the deactivation of the old profile
4490 -- PR_SERV_STATUS_HISTNO.VALID_FROM_DATE should be updated with SYSDATE for the activation of the new profile
4491 */
4492 /* The PR_SERV_STATUS_HISTNO.HISTNO of the new profile with STATUS = 'A' will be used
4493 to update in PROFILE_SERVICE.STATUS_HISTNO */
4494 SELECT HISTNO
4495 INTO lonHistNo
4496 FROM PR_SERV_STATUS_HIST
4497 WHERE CO_ID = pionContractId
4498 AND SNCODE = lonSnCode
4499 AND PROFILE_ID = lonNewProfile
4500 AND REQUEST_ID = pionRequest /* Defect 00206020-1 (CA: change profile (active - deactive) not possible) -- 20.June.2001, BAS*/
4501 AND STATUS = 'A';
4502 UPDATE PROFILE_SERVICE
4503 SET STATUS_HISTNO = lonHistNo
4504 WHERE CO_ID = pionContractId
4505 AND SNCODE = lonSnCode
4506 AND PROFILE_ID = lonNewProfile;
4507 /* The PR_SERV_STATUS_HISTNO.HISTNO of the old profile with STATUS = 'D' will be used
4508 to update in PROFILE_SERVICE.STATUS_HISTNO */
4509 SELECT HISTNO
4510 INTO lonHistNo
4511 FROM PR_SERV_STATUS_HIST
4512 WHERE CO_ID = pionContractId
4513 AND SNCODE = lonSnCode
4514 AND PROFILE_ID = lonOldProfile
4515 AND REQUEST_ID = pionRequest /* Defect 00206020-1 (CA: change profile (active - deactive) not possible) -- 20.June.2001, BAS*/
4516 AND STATUS = 'D';
4517 UPDATE PROFILE_SERVICE
4518 SET STATUS_HISTNO = lonHistNo
4519 WHERE CO_ID = pionContractId
4520 AND SNCODE = lonSnCode
4521 AND PROFILE_ID = lonOldProfile;
4522 /* The PR_SERV_STATUS_HISTNO.VALID_FROM_DATE is updated with SYSDATE.
4523 This update is done for the deactivation of the old profile and for the activation of the new profile */
4524 UPDATE PR_SERV_STATUS_HIST
4525 SET VALID_FROM_DATE = piodEffectiveDate -- PN 214421_2-1
4526 WHERE CO_ID = pionContractId
4527 AND SNCODE = lonSnCode
4528 AND PROFILE_ID = lonOldProfile
4529 AND REQUEST_ID = pionRequest
4530 AND STATUS = 'D';
4531 -- Update the VALID_FROM_DATE for the activation of the new profile
4532 UPDATE PR_SERV_STATUS_HIST
4533 SET VALID_FROM_DATE = piodEffectiveDate -- PN 214421_2-1
4534 WHERE CO_ID = pionContractId
4535 AND SNCODE = lonSnCode
4536 AND PROFILE_ID = lonNewProfile
4537 AND REQUEST_ID = pionRequest
4538 AND STATUS = 'A';
4539 /* The PR_SERV_SPCODE_HISTNO.VALID_FROM_DATE is updated with SYSDATE.
4540 This update is done for the activation of the new profile */
4541 UPDATE PR_SERV_SPCODE_HIST
4542 SET VALID_FROM_DATE = piodEffectiveDate -- PN 214421_2-1
4543 WHERE CO_ID = pionContractId
4544 AND SNCODE = lonSnCode
4545 AND PROFILE_ID = lonNewProfile
4546 AND REQUEST_ID = pionRequest;
4547
4548 -- FEATURE 240721
4549 UPDATE PR_SERV_ATTRIB_HIST
4550 SET VALID_FROM = piodEffectiveDate
4551 WHERE CO_ID = pionContractId
4552 AND PROFILE_ID = lonNewProfile
4553 AND SNCODE = lonSnCode
4554 AND REQUEST_ID = pionRequest;
4555
4556 END LOOP;
4557 CLOSE locGetModifiedServices;
4558END Finish_ChangeUserProfile;
4559
4560/*
4561** =============================================================================
4562**
4563** Procedure: Cancel_ChangeUserProfile
4564** #UMTS# 82630
4565** 21-May-2001, Sidal Barengi
4566**
4567** When user profile change request is canceled then,
4568** all the inserts and updates should be taken back from profile related tables
4569** =============================================================================
4570*/
4571PROCEDURE Cancel_ChangeUserProfile (
4572 pionRequest IN CONTRACT_HISTORY.REQUEST%TYPE,
4573 pionContractId IN CONTRACT_HISTORY.CO_ID%TYPE,
4574 pionPlcode IN MPDPLTAB.PLCODE%TYPE,
4575 pionReqMar IN NUMBER,
4576 pionActionId IN NUMBER,
4577 piosData1 IN MDSRRTAB.DATA_1%TYPE,
4578 piosData2 IN MDSRRTAB.DATA_2%TYPE)
4579IS
4580 lonSnCode PROFILE_CHANGE_HIST.SNCODE%TYPE;
4581 lonOldProfile PROFILE_CHANGE_HIST.PROFILE_PARENT%TYPE;
4582 lonNewProfile PROFILE_CHANGE_HIST.PROFILE_CHILD%TYPE;
4583 lonCUG_ID NUMBER;
4584 lonBSG_ID NUMBER;
4585 lonRecordCount NUMBER;
4586
4587 /* begin defect 264608 AV */
4588 lonAttrSncode PROFILE_SERVICE.SNCODE%TYPE;
4589 lonAttrProfileId PROFILE_SERVICE.PROFILE_ID%TYPE;
4590 lonLastAttribHistNo PROFILE_SERVICE.ATTRIB_HISTNO%TYPE;
4591
4592 CURSOR locGetServData IS
4593 SELECT SNCODE, PROFILE_ID
4594 FROM PR_SERV_ATTRIB_HIST
4595 WHERE REQUEST_ID=pionRequest;
4596
4597 CURSOR locGetLastAttrHistNo IS
4598 SELECT MAX(SERVICE_ATTRIB_HISTNO) FROM PR_SERV_ATTRIB_HIST
4599 WHERE CO_ID=pionContractId
4600 AND PROFILE_ID=lonAttrProfileId
4601 AND SNCODE=lonAttrSncode;
4602 /* end 264608 */
4603
4604BEGIN
4605 /*
4606 DBMS_OUTPUT.put_line('--> Cancel_ChangeUserProfile : ' ||
4607 ' Request: ' || pionRequest ||
4608 ' ContractId: ' || pionContractId ||
4609 ' Plcode: ' || pionPlcode ||
4610 ' Market: ' || pionReqMar ||
4611 ' ActionId: ' || pionActionId ||
4612 ' OldSubscription: ' || piosData1 ||
4613 ' NewSubscription: ' || piosData2);
4614 */
4615 /* First retrieve service code, old and new profile IDs for the request that is required to cancel */
4616 SELECT SNCODE, PROFILE_PARENT, PROFILE_CHILD
4617 INTO lonSnCode, lonOldProfile, lonNewProfile
4618 FROM PROFILE_CHANGE_HIST
4619 WHERE CO_ID = pionContractId
4620 AND REQUEST_ID = pionRequest;
4621 -- Retrieve the CUG_ID for the new profile, it will be used later on
4622 SELECT COUNT(*)
4623 INTO lonRecordCount
4624 FROM CONTR_SERVICES_CUG
4625 WHERE CO_ID = pionContractId
4626 AND SNCODE = lonSnCode
4627 AND PROFILE_ID = lonNewProfile
4628 AND CUG_INDEX = ( SELECT MAX(CUG_INDEX)
4629 FROM CONTR_SERVICES_CUG
4630 WHERE CO_ID = pionContractId
4631 AND SNCODE = lonSnCode
4632 AND PROFILE_ID = lonNewProfile );
4633 IF lonRecordCount != 0 THEN
4634 SELECT CUG_ID
4635 INTO lonCUG_ID
4636 FROM CONTR_SERVICES_CUG
4637 WHERE CO_ID = pionContractId
4638 AND SNCODE = lonSnCode
4639 AND PROFILE_ID = lonNewProfile
4640 AND CUG_INDEX = (SELECT MAX(CUG_INDEX)
4641 FROM CONTR_SERVICES_CUG
4642 WHERE CO_ID = pionContractId
4643 AND SNCODE = lonSnCode
4644 AND PROFILE_ID = lonNewProfile );
4645 ELSE
4646 lonCUG_ID := -1 ;
4647 END IF;
4648 -- Retrieve the BSG_ID for the new profile, it will be used later on
4649 SELECT COUNT(*)
4650 INTO lonRecordCount
4651 FROM CONTR_SERVICES_BSG
4652 WHERE CO_ID = pionContractId
4653 AND SNCODE = lonSnCode
4654 AND PROFILE_ID = lonNewProfile
4655 AND BSG_SEQNO = (SELECT MAX(BSG_SEQNO)
4656 FROM CONTR_SERVICES_BSG
4657 WHERE CO_ID = pionContractId
4658 AND SNCODE = lonSnCode
4659 AND PROFILE_ID = lonNewProfile );
4660 IF lonRecordCount != 0 THEN
4661 SELECT BSG_ID
4662 INTO lonBSG_ID
4663 FROM CONTR_SERVICES_BSG
4664 WHERE CO_ID = pionContractId
4665 AND SNCODE = lonSnCode
4666 AND PROFILE_ID = lonNewProfile
4667 AND BSG_SEQNO = ( SELECT MAX(BSG_SEQNO)
4668 FROM CONTR_SERVICES_BSG
4669 WHERE CO_ID = pionContractId
4670 AND SNCODE = lonSnCode
4671 AND PROFILE_ID = lonNewProfile );
4672 ELSE
4673 lonBSG_ID := -1 ;
4674 END IF;
4675 -- New Profile is deleted from PROFILE_SERVICE_CHARGE_RESP table
4676 --DELETE PROFILE_SERVICE_CHARGE_RESP
4677 --WHERE CO_ID = pionContractId
4678 -- AND SNCODE = lonSnCode
4679 -- AND PROFILE_ID = lonNewProfile;
4680 -- New Profile is deleted from CONTR_SERVICES_CAP table
4681 DELETE FROM CONTR_SERVICES_CAP
4682 WHERE CO_ID = pionContractId
4683 AND SNCODE = lonSnCode
4684 AND PROFILE_ID = lonNewProfile
4685 AND CS_REQUEST = pionRequest;
4686 -- Old Profile's deactivation date and request number are set back to NULL in CONTR_SERVICES_CAP table
4687 UPDATE CONTR_SERVICES_CAP
4688 SET CS_DEACTIV_DATE = NULL,
4689 CS_REQUEST = NULL
4690 WHERE CO_ID = pionContractId
4691 AND SNCODE = lonSnCode
4692 AND PROFILE_ID = lonOldProfile
4693 AND CS_REQUEST = pionRequest;
4694 -- New Profile is deleted from CONTR_VAS table
4695 DELETE FROM CONTR_VAS
4696 WHERE CO_ID = pionContractId
4697 AND SNCODE = lonSnCode
4698 AND PROFILE_ID = lonNewProfile
4699 AND SEQNO = ( SELECT MAX(SEQNO)
4700 FROM CONTR_VAS
4701 WHERE CO_ID = pionContractId
4702 AND SNCODE = lonSnCode
4703 AND PROFILE_ID = lonNewProfile );
4704 -- New Profile is deleted from PROFILE_SERVICE_ADV_CHARGE table
4705 DELETE PROFILE_SERVICE_ADV_CHARGE
4706 WHERE CO_ID = pionContractId
4707 AND SNCODE = lonSnCode
4708 AND PROFILE_ID = lonNewProfile;
4709 -- New Profile is deleted from CONTR_SERVICES_CUG table
4710 DELETE FROM CONTR_SERVICES_CUG
4711 WHERE CO_ID = pionContractId
4712 AND SNCODE = lonSnCode
4713 AND PROFILE_ID = lonNewProfile
4714 AND CUG_INDEX = ( SELECT MAX(CUG_INDEX)
4715 FROM CONTR_SERVICES_CUG
4716 WHERE CO_ID = pionContractId
4717 AND SNCODE = lonSnCode
4718 AND PROFILE_ID = lonNewProfile );
4719 -- New Profile is deleted from CONTR_SERVICES_BSG table
4720 DELETE FROM CONTR_SERVICES_BSG
4721 WHERE CO_ID = pionContractId
4722 AND SNCODE = lonSnCode
4723 AND PROFILE_ID = lonNewProfile
4724 AND BSG_SEQNO = ( SELECT MAX(BSG_SEQNO)
4725 FROM CONTR_SERVICES_BSG
4726 WHERE CO_ID = pionContractId
4727 AND SNCODE = lonSnCode
4728 AND PROFILE_ID = lonNewProfile );
4729 -- New Profile is deleted from CONTR_BASIC_SERVICES_CUG table
4730 -- What if only one of them is -1 and the other is not ?
4731 IF (lonCUG_ID != -1) AND (lonBSG_ID != -1) THEN
4732 DELETE FROM CONTR_BASIC_SERVICES_CUG
4733 WHERE CO_ID = pionContractId
4734 AND SNCODE = lonSnCode
4735 AND PROFILE_ID = lonNewProfile
4736 AND CUG_ID = lonCUG_ID
4737 AND BSG_ID = lonBSG_ID
4738 AND BSGLIST_SEQNO = ( SELECT MAX(BSG_SEQNO)
4739 FROM CONTR_SERVICES_BSG
4740 WHERE CO_ID = pionContractId
4741 AND SNCODE = lonSnCode
4742 AND PROFILE_ID = lonNewProfile
4743 AND CUG_ID = lonCUG_ID
4744 AND BSG_ID = lonBSG_ID );
4745 END IF;
4746 -- New Profile is deleted from CONTR_SERVICES_PORT table
4747 DELETE FROM CONTR_SERVICES_PORT
4748 WHERE CO_ID = pionContractId
4749 AND SNCODE = lonSnCode
4750 AND PROFILE_ID = lonNewProfile
4751 AND CSP_REQUEST = pionRequest
4752 AND CSP_SEQNO = ( SELECT MAX(CSP_SEQNO)
4753 FROM CONTR_SERVICES_PORT
4754 WHERE CO_ID = pionContractId
4755 AND SNCODE = lonSnCode
4756 AND PROFILE_ID = lonNewProfile );
4757 -- New Profile is deleted from PROFILE_CHANGE_HIST table
4758 DELETE FROM PROFILE_CHANGE_HIST
4759 WHERE CO_ID = pionContractId
4760 AND SNCODE = lonSnCode
4761 AND REQUEST_ID = pionRequest;
4762 -- New Profile is deleted from PR_SERV_SPCODE_HIST table
4763 DELETE FROM PR_SERV_SPCODE_HIST
4764 WHERE CO_ID = pionContractId
4765 AND SNCODE = lonSnCode
4766 AND PROFILE_ID = lonNewProfile
4767 AND REQUEST_ID = pionRequest;
4768 -- New Profile is deleted from PR_SERV_STATUS_HIST table
4769 DELETE FROM PR_SERV_STATUS_HIST
4770 WHERE CO_ID = pionContractId
4771 AND SNCODE = lonSnCode
4772 AND PROFILE_ID = lonNewProfile
4773 AND REQUEST_ID = pionRequest
4774 AND VALID_FROM_DATE IS NULL;
4775 -- New Profile is deleted from PR_SERV_STATUS_HIST table for the ON_HOLD status
4776 DELETE FROM PR_SERV_STATUS_HIST
4777 WHERE CO_ID = pionContractId
4778 AND SNCODE = lonSnCode
4779 AND PROFILE_ID = lonNewProfile
4780 AND STATUS = 'O';
4781 -- Old Profile related data is deleted from PR_SERV_STATUS_HIST
4782 DELETE FROM PR_SERV_STATUS_HIST
4783 WHERE CO_ID = pionContractId
4784 AND SNCODE = lonSnCode
4785 AND PROFILE_ID = lonOldProfile
4786 AND REQUEST_ID = pionRequest
4787 AND VALID_FROM_DATE IS NULL;
4788
4789 -- FEATURE 240721
4790 -- Delete service attribute entry in case request is cancelled
4791 /* begin defect 264608 AV */
4792 /* Get the SNCODE and PROFILE_ID of the affected services */
4793 OPEN locGetServData;
4794 LOOP
4795 FETCH locGetServData INTO lonAttrSncode,lonAttrProfileId;
4796 IF locGetServData%FOUND THEN
4797 DELETE FROM PR_SERV_ATTRIB_HIST
4798 WHERE CO_ID = pionContractId
4799 AND PROFILE_ID = lonAttrProfileId
4800 AND SNCODE = lonAttrSncode
4801 AND REQUEST_ID = pionRequest
4802 AND VALID_FROM IS NULL;
4803
4804 /* After removing the entry from PR_SERV_ATTIB_HIST, PROFILE_SERVICE.ATTRIB_HISTNO should be updated */
4805
4806 OPEN locGetLastAttrHistNo;
4807 FETCH locGetLastAttrHistNo INTO lonLastAttribHistNo;
4808
4809 IF lonLastAttribHistNo IS NOT NULL THEN
4810 /* update with the previous attrib hist no */
4811 UPDATE PROFILE_SERVICE SET ATTRIB_HISTNO = lonLastAttribHistNo
4812 WHERE CO_ID = pionContractId
4813 AND PROFILE_ID = lonAttrProfileId
4814 AND SNCODE = lonAttrSncode;
4815 ELSE
4816 /* no previous attrib hist no, update with null */
4817 UPDATE PROFILE_SERVICE SET ATTRIB_HISTNO = NULL
4818 WHERE CO_ID = pionContractId
4819 AND PROFILE_ID = lonAttrProfileId
4820 AND SNCODE = lonAttrSncode;
4821 END IF;
4822
4823 CLOSE locGetLastAttrHistNo;
4824 ELSE
4825 EXIT;
4826 END IF;
4827 END LOOP;
4828
4829 CLOSE locGetServData;
4830 /* end 264608 */
4831
4832 -- Delete references from CONTR_VAS table
4833 DELETE FROM CONTR_VAS
4834 WHERE CO_ID = pionContractId
4835 AND SNCODE = lonSnCode
4836 AND PROFILE_ID = lonNewProfile
4837 AND PROFILE_ID NOT IN (SELECT PROFILE_ID
4838 FROM PR_SERV_STATUS_HIST
4839 WHERE CO_ID = pionContractId
4840 AND SNCODE = lonSnCode );
4841
4842 -- New Profile will be deleted from PROFILE_SERVICE table
4843 DELETE FROM PROFILE_SERVICE
4844 WHERE CO_ID = pionContractId
4845 AND SNCODE = lonSnCode
4846 AND PROFILE_ID = lonNewProfile
4847 AND PROFILE_ID NOT IN (SELECT PROFILE_ID
4848 FROM PR_SERV_STATUS_HIST
4849 WHERE CO_ID = pionContractId
4850 AND SNCODE = lonSnCode );
4851END Cancel_ChangeUserProfile;
4852/* Feature 82630, 21-May-2001 -- END
4853** End of the procedures; Finish_ChangeUserProfile and Cancel_ChangeUserProfile
4854*/
4855
4856/*OUL PN 341996 begin*/
4857PROCEDURE DeleteLinkedCRHRequest(pionRequest IN MDSRRTAB.request%TYPE, pionWorkerPid IN CRH_REQUEST.WORKER_PID%TYPE)
4858IS
4859 lCrhRequest CRH_REQUEST.request_id%TYPE := 0;
4860 lCrhWorkerPid CRH_REQUEST.WORKER_PID%TYPE := 0;
4861 lCrhStatus CRH_REQUEST.STATUS%TYPE := 0;
4862BEGIN
4863
4864 IF pionWorkerPid = 0 THEN -- only if called from CMS
4865 --- CRH is very fast. To avoid the case that ballcne will be cleared for cancelled request
4866 -- it must be locked before deleted.
4867 BEGIN
4868 SELECT REQUEST_ID, WORKER_PID, STATUS
4869 INTO lCrhRequest, lCrhWorkerPid, lCrhStatus
4870 FROM CRH_REQUEST
4871 WHERE GMD_REQUEST_ID = pionRequest
4872 FOR UPDATE OF WORKER_PID, STATUS NOWAIT
4873 ;
4874 EXCEPTION
4875 WHEN NO_DATA_FOUND THEN
4876 -- do nothing
4877 lCrhRequest := 0;
4878 WHEN OTHERS THEN
4879 IF SQLCODE = SQL_RESOURCE_BUSY THEN
4880 gosErrorText := 'Linked CRH Request is already in processing ' ||
4881 'GMD REQUEST_ID = ' || pionRequest || '! ' || SQLERRM;
4882 RAISE geoApplicationError;
4883 ELSE
4884 gosErrorText := SQLERRM;
4885 RAISE geoApplicationError;
4886 END IF;
4887
4888 END;
4889
4890 -- check history table
4891 IF (lCrhRequest = 0) THEN -- check history table
4892 BEGIN
4893 SELECT REQUEST_ID, WORKER_PID, STATUS
4894 INTO lCrhRequest, lCrhWorkerPid,lCrhStatus
4895 FROM CRH_REQUEST_HISTORY
4896 WHERE GMD_REQUEST_ID = pionRequest;
4897 EXCEPTION
4898 WHEN NO_DATA_FOUND THEN
4899 -- do nothing
4900 lCrhRequest := 0;
4901 END;
4902 END IF;
4903 IF (lCrhRequest = 0) THEN
4904 -- do nothing
4905 lCrhRequest := 0;
4906 ELSIF (lCrhRequest > 0 AND lCrhWorkerPid = 0 AND lCrhStatus = 2) THEN --CRH request exists and/or not processed
4907 DELETE FROM CRH_BA_DETAILS
4908 WHERE REQUEST_ID = lCrhRequest;
4909
4910 DELETE FROM CRH_REQUEST
4911 WHERE REQUEST_ID = lCrhRequest;
4912 ELSE
4913 gosErrorText := 'Linked CRH Request is already in processing ' ||
4914 'GMD REQUEST_ID = ' || pionRequest || '!';
4915 RAISE geoApplicationError;
4916 END IF;
4917 END IF; --worker PID
4918END DeleteLinkedCRHRequest;
4919/*OUL PN 341996 end*/
4920
4921/*
4922** =====================================================================
4923**
4924** Procedure: Cancel_Deactivate
4925** #UMTS# 82630
4926** =====================================================================
4927*/
4928PROCEDURE Cancel_Deactivate (
4929 pionRequest IN CONTRACT_HISTORY.request%TYPE,
4930 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
4931 pionWorkerPid IN CRH_REQUEST.WORKER_PID%TYPE) -- OUL 341996
4932IS
4933 -- Cursor to get the current pending status
4934 CURSOR locStatus IS
4935 SELECT CH_STATUS
4936 FROM CONTRACT_HISTORY
4937 WHERE CO_ID = pionContractId
4938 AND REQUEST = pionRequest
4939 AND CH_PENDING = cosMarkPending
4940 FOR UPDATE;
4941 -- Cursor for all assigned devices
4942 CURSOR locDevices IS
4943 SELECT PORT_ID
4944 FROM CONTR_DEVICES
4945 WHERE CO_ID = pionContractId
4946 AND CD_PENDING_STATE = cosStatusDeactivate
4947 FOR UPDATE;
4948 -- Cursor for all storage mediums of a port
4949 CURSOR locPorts (pconPortId IN PORT.PORT_ID%TYPE) IS
4950 SELECT SM_ID
4951 FROM PORT
4952 WHERE PORT_ID = pconPortId
4953 AND PORT_STATUS_REQU IS NOT NULL
4954 FOR UPDATE;
4955 -- Cursor for all directory numbers
4956 /*Begin PN 238082 :vov*/
4957 /*CURSOR locDirectoryNum IS
4958 SELECT DN_ID, DN_BLOCK_ID
4959 FROM CONTR_SERVICES_CAP
4960 WHERE CO_ID = pionContractId
4961 AND CS_REQUEST = pionRequest;
4962 */
4963 CURSOR locDirectoryNum IS
4964 SELECT CSC.DN_ID, CSC.DN_BLOCK_ID ,DN.DN_STATUS_REQU
4965 FROM CONTR_SERVICES_CAP CSC , DIRECTORY_NUMBER DN
4966 WHERE CSC.CO_ID = pionContractId
4967 AND CSC.CS_REQUEST = pionRequest
4968 AND CSC.DN_ID=DN.DN_ID;
4969 /*End PN 238082:vov*/
4970
4971 /* Begin PN 00231853 : RS */
4972 CURSOR locProfileService IS
4973 SELECT SNCODE, PROFILE_ID, STATUS_HISTNO
4974 FROM PROFILE_SERVICE
4975 WHERE CO_ID = pionContractID
4976 FOR UPDATE;
4977 xcrProfileServices locProfileService %ROWTYPE;
4978 /* End PN 00231853 : RS */
4979 -- Pending status from CONTRACT_HISTORY
4980 losStatus CONTRACT_HISTORY.ch_status%TYPE := NULL;
4981BEGIN
4982 DBMS_OUTPUT.put_line('--> Cancel_Deactivate: Request: ' ||
4983 pionRequest || ' ContractId: ' || pionContractId );
4984 /*
4985 ** Get the status of the pending entry.
4986 ** If no pending entry exists raise an error!
4987 */
4988 OPEN locStatus;
4989 FETCH locStatus
4990 INTO losStatus;
4991 IF locStatus%FOUND THEN
4992 DELETE FROM CONTRACT_HISTORY
4993 WHERE CURRENT OF locStatus;
4994 ELSE
4995 gosErrorText := 'Cancel_Deactivate: ' ||
4996 'No Pending entry in CONTRACT_HISTORY';
4997 RAISE geoApplicationError;
4998 END IF;
4999 CLOSE locStatus;
5000
5001 DELETE FROM PR_SERV_STATUS_HIST
5002 WHERE CO_ID = pionContractID
5003 AND Request_ID = pionRequest
5004 AND VALID_FROM_DATE IS NULL;
5005
5006 /* Begin PN 00231853 : RS */
5007 FOR xcrProfileServices IN locProfileService LOOP
5008 -- OUL PN 234478
5009 -- due to removing of the fix 231853 the DELTE statement is not required
5010 /*DELETE FROM PR_SERV_STATUS_HIST
5011 WHERE CO_ID = pionContractID
5012 AND SNCODE = xcrProfileServices.SNCODE
5013 AND PROFILE_ID = xcrProfileServices.PROFILE_ID
5014 AND HISTNO = xcrProfileServices.STATUS_HISTNO
5015 AND STATUS = 'D' ; */
5016
5017 UPDATE PROFILE_SERVICE
5018 SET STATUS_HISTNO = (SELECT MAX(HISTNO)
5019 FROM PR_SERV_STATUS_HIST
5020 WHERE CO_ID = pionContractID
5021 AND SNCODE = xcrProfileServices.SNCODE
5022 AND PROFILE_ID = xcrProfileServices.PROFILE_ID)
5023 WHERE CO_ID = pionContractId
5024 AND SNCODE = xcrProfileServices.SNCODE
5025 AND PROFILE_ID = xcrProfileServices.PROFILE_ID;
5026 END LOOP;
5027 /* End PN 00231853 : RS */
5028
5029 /*
5030 ** Note: It is not possible to use Contract.MaxSeqNoOfService(CO_ID)
5031 ** instead of the subselect. If this function is used the
5032 ** error ORA-40901 "table is mutating, function may not see it"
5033 ** occurs.
5034 */
5035 UPDATE CONTR_SERVICES_CAP
5036 SET PENDING_BCCODE = NULL,
5037 REC_VERSION = REC_VERSION + 1
5038 WHERE CO_ID = pionContractID
5039 AND PENDING_BCCODE IS NOT NULL;
5040 IF losStatus = cosStatusDeactivate THEN
5041
5042 DeleteLinkedCRHRequest(pionRequest,pionWorkerPid); /*OUL PN 341996*/
5043
5044 /*
5045 ** The requested status for DN, PORT and SM can be
5046 ** (r)release, (f)ree and (d)eactive Therefore we compare
5047 ** *_STATUS_REQU with NULL and not 'd'!
5048 */
5049 FOR xcrDnum IN locDirectoryNum LOOP
5050 IF xcrDnum.DN_BLOCK_ID IS NULL THEN
5051 /*Begin PN 238082:vov*/
5052 IF xcrDnum.DN_STATUS_REQU ='o' THEN
5053
5054 DELETE FROM DN_PORTED_IN_OUT WHERE DN_ID = xcrDnum.DN_ID;
5055
5056 -- Feature 280461 keep the history
5057 --DELETE FROM PORTING_REQUEST_HISTORY WHERE DN_ID = xcrDnum.DN_ID;
5058
5059 END IF;
5060 /*End PN 238082:vov*/
5061 UPDATE DIRECTORY_NUMBER
5062 SET DN_STATUS_REQU = NULL,
5063 DN_MODDATE = SYSDATE,
5064 REC_VERSION = REC_VERSION + 1
5065 WHERE DN_ID = xcrDnum.DN_ID
5066 AND DN_STATUS_REQU IS NOT NULL;
5067 ELSE
5068 UPDATE DIRECTORY_NUMBER_BLOCK
5069 SET DNB_REQUESTED_STATUS = NULL,
5070 REC_VERSION = REC_VERSION + 1
5071 WHERE DN_ID = xcrDnum.DN_ID
5072 AND DN_BLOCK_ID = xcrDnum.DN_BLOCK_ID
5073 AND DNB_REQUESTED_STATUS IS NOT NULL;
5074 END IF;
5075 END LOOP;
5076 FOR xcrDevice IN locDevices LOOP
5077 UPDATE CONTR_DEVICES
5078 SET CD_PENDING_STATE = NULL,
5079 REC_VERSION = REC_VERSION + 1
5080 WHERE CURRENT OF locDevices;
5081 IF xcrDevice.PORT_ID IS NOT NULL THEN -- reset pending status
5082 FOR xcrPort IN locPorts( xcrDevice.PORT_ID ) LOOP -- of course this loop is only entery one time!
5083 UPDATE PORT
5084 SET PORT_STATUS_REQU = NULL,
5085 PORT_MODDATE = SYSDATE,
5086 REC_VERSION = REC_VERSION + 1
5087 WHERE CURRENT OF locPorts;
5088 IF xcrPort.SM_ID IS NOT NULL THEN
5089 UPDATE STORAGE_MEDIUM
5090 SET SM_STATUS_REQU = NULL,
5091 REC_VERSION = REC_VERSION + 1
5092 WHERE SM_ID = xcrPort.SM_ID
5093 AND SM_STATUS_REQU IS NOT NULL;
5094 END IF;
5095 END LOOP; -- Ports
5096 ELSE
5097 UPDATE PORT
5098 SET PORT_STATUS_REQU = NULL,
5099 PORT_MODDATE = SYSDATE,
5100 REC_VERSION = REC_VERSION + 1
5101 WHERE PORT_ID IN (SELECT PORT_ID
5102 FROM CONTR_SERVICES_PORT
5103 WHERE CO_ID = pionContractId
5104 AND CSP_REQUEST = pionRequest)
5105 AND PORT_STATUS_REQU IS NOT NULL;
5106 END IF; -- PORT_ID IS NOT NULL
5107 END LOOP; -- Devices
5108 END IF; -- requested status is deactivate
5109END Cancel_Deactivate;
5110/*
5111** =====================================================================
5112**
5113** Procedure: Cancel_Activate
5114** #UMTS# 82630
5115** =====================================================================
5116*/
5117PROCEDURE Cancel_Activate (
5118 pionRequest IN CONTRACT_HISTORY.request%TYPE,
5119 pionContractId IN CONTRACT_HISTORY.co_id%TYPE)
5120IS
5121/* Begin PN 00231853 : RS */
5122 CURSOR locProfileService IS
5123 SELECT SNCODE, PROFILE_ID, STATUS_HISTNO
5124 FROM PROFILE_SERVICE
5125 WHERE CO_ID = pionContractID
5126 FOR UPDATE;
5127 xcrProfileServices locProfileService %ROWTYPE;
5128/* End PN 00231853 : RS */
5129
5130BEGIN
5131 DBMS_OUTPUT.put_line('--> Cancel_Activate: Request: ' || pionRequest ||
5132 ' ContractId: ' || pionContractId );
5133 /*
5134 ** Note: CS_SPARAM1, CS_PENDING_PARAM and CS_PENDING_BCCODE are not
5135 ** changed, because the contract is still 'on hold'.
5136 */
5137 DELETE FROM PR_SERV_STATUS_HIST
5138 WHERE CO_ID = pionContractID
5139 AND REQUEST_ID = pionRequest
5140 AND VALID_FROM_DATE IS NULL;
5141
5142 -- PN 00283404/d, AV
5143 UPDATE PR_SERV_ATTRIB_HIST
5144 SET REQUEST_ID = NULL,
5145 REC_VERSION = REC_VERSION + 1
5146 WHERE CO_ID = pionContractId
5147 AND REQUEST_ID = pionRequest
5148 AND VALID_FROM IS NULL;
5149 -- PN 00283404/d, AV
5150
5151 /* Begin PN 00231853 : RS */
5152 FOR xcrProfileServices IN locProfileService LOOP
5153 -- OUL PN 234478
5154 -- due to removing of the fix 231853 the DELTE statement is not required
5155 /*DELETE FROM PR_SERV_STATUS_HIST
5156 WHERE CO_ID = pionContractID
5157 AND SNCODE = xcrProfileServices.SNCODE
5158 AND PROFILE_ID = xcrProfileServices.PROFILE_ID
5159 AND HISTNO = xcrProfileServices.STATUS_HISTNO
5160 AND STATUS = 'A' ; */
5161
5162 UPDATE PROFILE_SERVICE
5163 SET STATUS_HISTNO = (SELECT MAX(HISTNO)
5164 FROM PR_SERV_STATUS_HIST
5165 WHERE CO_ID = pionContractID
5166 AND SNCODE = xcrProfileServices.SNCODE
5167 AND PROFILE_ID = xcrProfileServices.PROFILE_ID)
5168 WHERE CO_ID = pionContractId
5169 AND SNCODE = xcrProfileServices.SNCODE
5170 AND PROFILE_ID = xcrProfileServices.PROFILE_ID;
5171 END LOOP;
5172 /* End PN 00231853 : RS */
5173
5174 UPDATE CONTR_SERVICES_CAP
5175 SET REC_VERSION = REC_VERSION + 1
5176 WHERE CO_ID = pionContractId
5177 AND CS_REQUEST = pionRequest;
5178 CancelPendingContract(pionContractId);
5179
5180 UPDATE CONTR_DEVICES
5181 SET CD_PENDING_STATE = NULL,
5182 CD_ACTIV_DATE = NULL, -- F402782
5183 REC_VERSION = REC_VERSION + 1
5184 WHERE CO_ID = pionContractID
5185 AND ( (CD_PENDING_STATE = cosStatusActivate) OR
5186 (RUNNING_NUMBER > -1) ); -- F402782
5187
5188 /* Begin Defect: 83127: the Error massage has been removed
5189 IF SQL%ROWCOUNT = 0
5190 THEN
5191 gosErrorText := 'Contract ' || pionContractID ||
5192 ' has no pending entry with status ' ||
5193 cosStatusActivate || ' in CONTRACT_DEVICES';
5194 RAISE geoApplicationError;
5195 END IF;
5196 */
5197 UPDATE CONTR_SERVICES_PORT
5198 SET CSP_REQUEST = NULL,
5199 REC_VERSION = REC_VERSION + 1
5200 WHERE CO_ID = pionContractID
5201 AND CSP_REQUEST = pionRequest;
5202 Cug.Cancel_Activate( pionRequest, pionContractID );
5203
5204 /*defect 218534 begin*/
5205 UPDATE PARAMETER_VALUE SET REQUEST_ID = NULL
5206 WHERE PRM_VALUE_ID IN ( SELECT PRM_VALUE_ID FROM PROFILE_SERVICE WHERE CO_ID = pionContractID AND PRM_VALUE_ID IS NOT NULL)
5207 AND REQUEST_ID = pionRequest;
5208 /*defect 218534 end*/
5209
5210END Cancel_Activate;
5211/*
5212** =====================================================================
5213**
5214** Procedure: Finish_DN_Replace
5215** *** ULB: DBMS_Output statements shall be deleted after unit test of 56399 ***
5216** #UMTS# 82630
5217** =====================================================================
5218*/
5219PROCEDURE Finish_DN_Replace (
5220 pionRequest IN CONTRACT_HISTORY.request%TYPE,
5221 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
5222 pionReqMar IN NUMBER,
5223 pionOldDNId IN DIRECTORY_NUMBER.dn_id%TYPE, -- NULL if 0..n DN are exchanged (Change SIM Over HLR)
5224 -- NULL: no update of table CONTR_SERVICES (done by Finish_Port_Replace)
5225 pionNewDNId IN DIRECTORY_NUMBER.dn_id%TYPE) -- NULL if 0..n DN are exchanged (Change SIM Over HLR)
5226IS
5227 -- Cursor to check if other pending requests exist.
5228 -- Since it is possible that a Service Control request
5229 -- exists (e.g. assign new DN to Service) CS_STATUS is
5230 -- checked in the where clause.
5231 CURSOR locPendReq IS
5232 SELECT COUNT(*)
5233 FROM CONTR_SERVICES_CAP
5234 WHERE CO_ID = pionContractId
5235 AND CS_ACTIV_DATE IS NULL
5236 AND CS_DEACTIV_DATE IS NULL
5237 AND CS_STATUS IS NULL
5238 AND CS_REQUEST != pionRequest;
5239 lonPendRequests NUMBER; -- into variable for above cursor
5240 CURSOR locServicesCap IS
5241 SELECT DN_BLOCK_ID
5242 FROM CONTR_SERVICES_CAP
5243 WHERE CO_ID = pionContractId
5244 AND CS_REQUEST = pionRequest
5245 AND CS_DEACTIV_DATE IS NOT NULL;
5246 lcrServicesCap locServicesCap%ROWTYPE;
5247 -- Cursor for OLD DNs
5248 CURSOR locOldDNs IS
5249 SELECT DN_ID
5250 FROM CONTR_SERVICES_CAP
5251 WHERE CO_ID = pionContractId
5252 AND CS_REQUEST = pionRequest
5253 AND CS_DEACTIV_DATE IS NOT NULL;
5254 lcrOldDNs locOldDNs%ROWTYPE;
5255
5256 /* begin defect 00225481 IAL */
5257 pidEffectiveDate DATE;
5258 /* end defect 00225481 IAL */
5259
5260BEGIN
5261 /* begin defect 00225481 IAL */
5262 pidEffectiveDate := GetEffectiveDate(pionRequest);
5263 /* end defect 00225481 IAL */
5264 -- Update old DNs in CONTR_SERVICES_CAP
5265 UPDATE CONTR_SERVICES_CAP
5266 SET CS_DEACTIV_DATE = pidEffectiveDate, --SET CS_DEACTIV_DATE = SYSDATE, >>>Defect 00225481 IAL
5267 REC_VERSION = REC_VERSION + 1
5268 WHERE CO_ID = pionContractId
5269 AND CS_STATUS IS NOT NULL
5270 AND CS_REQUEST = pionRequest
5271 AND SEQNO IN (SELECT SEQNO_PRE FROM CONTR_SERVICES_CAP WHERE CO_ID = pionContractId--add KW 00281206_plsql
5272 AND SEQNO_PRE IS NOT NULL);--add KW 00281206_plsql
5273 IF SQL%ROWCOUNT = 0 THEN
5274 gosErrorText := 'Finish_DN_Replace: no entry in CONTR_SERVICES_CAP.';
5275 RAISE geoApplicationError;
5276 END IF;
5277 -- Update new DNs in CONTR_SERVICES_CAP
5278 UPDATE CONTR_SERVICES_CAP
5279 SET CS_ACTIV_DATE = pidEffectiveDate, --SET CS_ACTIV_DATE = SYSDATE, >>>Defect 00225481 IAL
5280 BCCODE = DECODE(PENDING_BCCODE, NULL, BCCODE, PENDING_BCCODE), -- OUL 273452
5281 PENDING_BCCODE = NULL, -- OUL 273452
5282 CS_STATUS = 'R', -- Replacement
5283 REC_VERSION = REC_VERSION + 1
5284 WHERE CO_ID = pionContractId
5285 AND CS_STATUS IS NULL
5286 AND CS_ACTIV_DATE IS NULL
5287 AND CS_REQUEST = pionRequest;
5288 IF SQL%ROWCOUNT = 0 THEN
5289 gosErrorText := 'Finish_DN_Replace: ' ||
5290 'no entry in CONTR_SERVICES_CAP found';
5291 RAISE geoApplicationError;
5292 END IF;
5293 -- Handling Block Numbers and Retention of old Dns
5294 IF pionOldDNId IS NOT NULL THEN
5295 -- BEGIN 53406 #VPN# ANGER: Update VPN Access
5296 UPDATE CONTR_SERVICES_CAP
5297 SET public_number_dn_id = pionNewDNId,
5298 rec_version = rec_version + 1
5299 WHERE public_number_dn_id = pionOldDNId;
5300 -- END 53406 #VPN# ANGER
5301 OPEN locServicesCap;
5302 FETCH locServicesCap
5303 INTO lcrServicesCap;
5304 IF locServicesCap%NOTFOUND THEN
5305 gosErrorText := 'Finish_DN_Replace: ' ||
5306 'CONTR_SERVICES_CAP entry not found ';
5307 RAISE geoApplicationError;
5308 END IF;
5309 CLOSE locServicesCap;
5310 IF lcrServicesCap.DN_BLOCK_ID IS NULL THEN
5311 /* begin defect 203433 */
5312 --RetentionDirectoryNumber(pionOldDNId);
5313 RetentionDirectoryNumber(pionOldDNId,NULL,NULL,pionRequest);
5314 /* end defect 203433 */
5315 ELSE
5316 -- New block number with different constant part
5317 /* PN00225006, 05-JUN-02, Andreas Billo *
5318 * retention even if constant part is the same!!
5319 IF pionOldDNId != pionNewDNId THEN
5320 */
5321 /* begin defect 203433 */
5322 --RetentionDirectoryNumber(pionOldDNId, NULL, lcrServicesCap.DN_BLOCK_ID);
5323 RetentionDirectoryNumber(pionOldDNId, NULL, lcrServicesCap.DN_BLOCK_ID, pionRequest);
5324 /* end defect 203433 */
5325 /* END IF; PN00225006, 05-JUN-02, Andreas Billo */
5326 Finish_BlockNumberSplitting(pionNewDNId, pionRequest);
5327 END IF;
5328 ELSE
5329 FOR xcrOldDNs IN locOldDNs LOOP
5330 /* begin defect 203433 */
5331 --RetentionDirectoryNumber(xcrOldDNs.DN_ID);
5332 RetentionDirectoryNumber(xcrOldDNs.DN_ID,NULL,NULL,pionRequest);
5333 /* end defect 203433 */
5334 END LOOP;
5335 END IF;
5336END Finish_DN_Replace;
5337/*
5338** =====================================================================
5339**
5340** Procedure: Finish_Port_Replacement
5341** #UMTS# 82630
5342** =====================================================================
5343*/
5344PROCEDURE Finish_Port_Replacement (
5345 pionRequest IN CONTRACT_HISTORY.request%TYPE,
5346 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
5347 pionReqMar IN NUMBER,
5348 pionOldPortID IN PORT.port_id%TYPE,
5349 pionnewPortID IN PORT.port_id%TYPE)
5350IS
5351 CURSOR locDevices IS
5352 SELECT PORT_ID, CD_PENDING_STATE, DN_ID, RUNNING_NUMBER -- F402782: Added DN_ID, RUNNING_NUMBER
5353 FROM CONTR_DEVICES
5354 WHERE CO_ID = pionContractId
5355 AND CD_PENDING_STATE IS NOT NULL ORDER BY CD_SEQNO
5356 FOR UPDATE;
5357 --def 204819 ALA begin
5358 CURSOR locCONTRACT_RELATION
5359 IS
5360 SELECT REL_CO_ID
5361 FROM CONTRACT_RELATION
5362 WHERE REL_CO_ID = pionContractId;
5363
5364 lonREL_CO_ID locCONTRACT_RELATION %ROWTYPE;
5365 --def 204819 ALA end
5366 /*
5367 ** For every device one of the counter is incremented.
5368 ** At the end we'll check if the counters are equal and
5369 ** that at least one exchange has happend.
5370 */
5371 lonCounterActivate NUMBER := 0;
5372 lonCounterDeactivate NUMBER := 0;
5373 -- def 31196/d
5374 lonPortIdOld CONTR_DEVICES.port_id%TYPE := NULL;
5375 lonSmIdOld STORAGE_MEDIUM.sm_id%TYPE := NULL;
5376 lonDnId DIRECTORY_NUMBER.dn_id%TYPE := NULL;
5377 lonDnIdOld DIRECTORY_NUMBER.dn_id%TYPE := NULL;
5378 piodEffectiveDate DATE;
5379 losPortOwner VARCHAR2(2);
5380 -- f402782 begin
5381 locDN_STATUS_REQUold DIRECTORY_NUMBER.DN_STATUS_REQU%TYPE := NULL;
5382 lonRunning_Number CONTR_DEVICES.running_number%TYPE := NULL;
5383 -- f402782 end
5384BEGIN
5385 /* begin defect 203433 */
5386 piodEffectiveDate := GetEffectiveDate(pionRequest);
5387 /* end defect 203433 */
5388 IF pionReqMar = conServiceDriven THEN
5389 UPDATE CONTR_SERVICES_PORT
5390 /* begin defect 203433 */
5391 --SET CSP_DEACTIVE_DATE = SYSDATE,
5392 SET CSP_DEACTIVE_DATE = piodEffectiveDate,
5393 /* end defect 203433 */
5394 CSP_STATUS = 'R',
5395 REC_VERSION = REC_VERSION + 1
5396 WHERE CO_ID = pionContractID
5397 AND CSP_REQUEST = pionRequest
5398 AND PORT_ID = pionOldPortID;
5399 UPDATE CONTR_SERVICES_PORT
5400 /* begin defect 203433 */
5401 --SET CSP_ACTIVE_DATE = SYSDATE,
5402 SET CSP_ACTIVE_DATE = piodEffectiveDate,
5403 /* end defect 203433 */
5404 CSP_STATUS = 'A',
5405 REC_VERSION = REC_VERSION + 1
5406 WHERE CO_ID = pionContractID
5407 AND CSP_REQUEST = pionRequest
5408 AND PORT_ID = pionNewPortID;
5409 /* begin defect 203433 */
5410 RetentionPort( pionOldPortID, NULL, pionRequest );
5411 /* end defect 203433 */
5412 ELSE
5413 FOR xcrDevice IN locDevices LOOP
5414 IF xcrDevice.CD_PENDING_STATE = cosStatusDeactivate THEN
5415 /*
5416 ** Deactivate section
5417 */
5418 lonCounterDeactivate := lonCounterDeactivate + 1;
5419 lonRunning_Number := xcrDevice.RUNNING_NUMBER; -- F402782
5420
5421 UPDATE CONTR_DEVICES
5422 /* begin defect 203433 */
5423 --SET CD_DEACTIV_DATE = SYSDATE,
5424 SET CD_DEACTIV_DATE = piodEffectiveDate,
5425 /* end defect 203433 */
5426 CD_PENDING_STATE = NULL,
5427 REC_VERSION = REC_VERSION + 1
5428 WHERE CURRENT OF locDevices;
5429 lonPortIdOld := xcrDevice.PORT_ID;
5430 /* begin defect 211127 */
5431 IF pionReqMar = conStorMedDriven THEN
5432
5433 /* PN 402782 : Consider phantom MSISDN - Begin */
5434 IF lonRunning_Number IS NOT NULL THEN
5435 SELECT DN_ID INTO lonDnIdOld FROM CONTR_DEVICES
5436 WHERE PORT_ID = pionOldPortID AND CO_ID = pionContractId
5437 AND RUNNING_NUMBER > -1;
5438 END IF;
5439
5440 IF lonDnIdOld IS NOT NULL THEN
5441 SELECT DN_STATUS_REQU INTO locDN_STATUS_REQUold
5442 FROM DIRECTORY_NUMBER WHERE DN_ID = lonDnIdOld FOR UPDATE;
5443
5444 IF locDN_STATUS_REQUold IS NOT NULL THEN
5445 UPDATE DIRECTORY_NUMBER SET DN_STATUS_REQU = null,
5446 DN_STATUS = locDN_STATUS_REQUold
5447 WHERE DN_ID = lonDnIdOld;
5448 END IF;
5449 END IF;
5450 /* PN 402782 - end */
5451
5452 SELECT DISTINCT PORT_OWNER
5453 INTO losPortOwner
5454 FROM MPDHLTAB HL, CURR_CO_DEVICE CD
5455 WHERE CD.HLCODE = HL.HLCODE
5456 AND CD.CO_ID = pionContractId;
5457
5458 IF losPortOwner IS NULL OR losPortOwner != 'SM' THEN
5459 UPDATE PORT SET SM_ID = NULL WHERE PORT_ID = lonPortIdOld;
5460 END IF;
5461 END IF;
5462
5463 /* end defect 211127 */
5464 IF pionReqMar = conEquipmentDriven THEN -- NMT
5465 -- Begin Def 31196/d set old port id, don't do other actions on the port
5466 -- They will be done in cosStatusActivate section !
5467 -- get old dirnum and old ESN (SIM)
5468 SELECT DN_ID, SM_ID
5469 INTO lonDnIdOld, lonSmIdOld
5470 FROM PORT
5471 WHERE PORT_ID = xcrDevice.PORT_ID;
5472 /* Def 31196/d comment this section
5473 ** to see old code please check out older version of contract.spp
5474 */ -- end Def 31196/d
5475 ELSE -- pionReqMar != conEquipmentDriven
5476 IF xcrDevice.PORT_ID IS NOT NULL THEN
5477 --def 204819 ALA begin
5478 OPEN locCONTRACT_RELATION;
5479 FETCH locCONTRACT_RELATION INTO lonREL_CO_ID;
5480 IF locCONTRACT_RELATION %NOTFOUND THEN
5481 /* begin defect 203433 */
5482 --RetentionPort(xcrDevice.PORT_ID);
5483 RetentionPort(xcrDevice.PORT_ID, NULL, pionRequest);
5484 /* end defect 203433 */
5485 END IF;
5486 CLOSE locCONTRACT_RELATION;
5487 --def 204819 ALA end
5488 END IF;
5489 END IF;
5490 ELSIF xcrDevice.CD_PENDING_STATE = cosStatusActivate THEN
5491 /*
5492 ** Activate section
5493 */
5494 lonCounterActivate := lonCounterActivate + 1;
5495 UPDATE CONTR_DEVICES
5496 /* begin defect 203433 */
5497 --SET CD_ACTIV_DATE = SYSDATE,
5498 SET CD_ACTIV_DATE = piodEffectiveDate,
5499 --CD_VALIDFROM = SYSDATE,
5500 CD_VALIDFROM = piodEffectiveDate,
5501 /* end defect 203433 */
5502 CD_PENDING_STATE = NULL,
5503 REC_VERSION = REC_VERSION + 1
5504 WHERE CURRENT OF locDevices;
5505
5506 ELSE
5507 /*
5508 ** No valid status!
5509 */
5510 gosErrorText := 'Finish_Port_Replacement: ' ||
5511 'Illegal status ' ||
5512 xcrDevice.CD_PENDING_STATE;
5513 RAISE geoApplicationError;
5514 END IF; -- xcrDevice.CD_PENDING_STATE = cosStatusActivate
5515 END LOOP; -- Devices
5516
5517 -- Begin feature 402782
5518 IF lonRunning_Number IS NOT NULL THEN
5519 -- Set RUNNING_NUMBER = -1 for the SIM to be removed
5520 UPDATE CONTR_DEVICES set RUNNING_NUMBER = -1
5521 WHERE RUNNING_NUMBER = lonRunning_Number
5522 AND CO_ID = pionContractId;
5523 -- Set old RUNNING_NUMBER for new SIM
5524 UPDATE CONTR_DEVICES set RUNNING_NUMBER = lonRunning_Number
5525 WHERE ORIGINAL_PORT_ID = pionOldPortID
5526 AND CO_ID = pionContractId;
5527 END IF; -- lonRunning_Number IS NOT NULL
5528 -- End PN 402782
5529
5530 IF lonCounterActivate = 0 THEN
5531 gosErrorText := 'Finish_Port_Replacement: No device activated';
5532 RAISE geoApplicationError;
5533 END IF;
5534 IF lonCounterActivate != lonCounterDeactivate THEN
5535 gosErrorText := 'Finish_Port_Replacement: ' ||
5536 '#Activate ('|| lonCounterActivate||') is not equal ' ||
5537 '#Deactivate ('|| lonCounterDeactivate ||'). ';
5538 RAISE geoApplicationError;
5539 END IF;
5540 /* 3UMTS# removed
5541 UPDATE CONTR_SERVICES
5542 SET CS_PENDING_STATE = NULL,
5543 REC_VERSION = REC_VERSION + 1
5544 WHERE CO_ID = pionContractId
5545 AND CS_REQUEST = pionRequest -- only network services
5546 AND CS_PENDING_STATE IS NOT NULL;
5547 */
5548 UPDATE CONTR_SERVICES_CAP
5549 SET PENDING_BCCODE = NULL,
5550 REC_VERSION = REC_VERSION + 1
5551 WHERE CO_ID = pionContractId
5552 AND CS_REQUEST = pionRequest
5553 AND PENDING_BCCODE IS NOT NULL;
5554 END IF; -- check if market is service driven
5555END Finish_Port_Replacement;
5556
5557/*
5558** =====================================================================
5559**
5560** Procedure: Finish_Port_Remove
5561** Feature 402782
5562** =====================================================================
5563*/
5564PROCEDURE Finish_Port_Remove (
5565 pionRequest IN CONTRACT_HISTORY.request%TYPE,
5566 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
5567 pionReqMar IN NUMBER,
5568 pionOldPortID IN PORT.port_id%TYPE)
5569IS
5570 CURSOR locDevices IS
5571 SELECT PORT_ID, CD_PENDING_STATE, DN_ID, RUNNING_NUMBER -- F402782: Added DN_ID and RUNNING_NUMBER
5572 FROM CONTR_DEVICES
5573 WHERE CO_ID = pionContractId
5574 AND PORT_ID = pionOldPortID
5575 AND CD_PENDING_STATE IS NOT NULL ORDER BY CD_SEQNO
5576 FOR UPDATE;
5577
5578 CURSOR locCONTRACT_RELATION
5579 IS
5580 SELECT REL_CO_ID
5581 FROM CONTRACT_RELATION
5582 WHERE REL_CO_ID = pionContractId;
5583
5584 lonREL_CO_ID locCONTRACT_RELATION %ROWTYPE;
5585
5586 /*
5587 ** For every device the counter is incremented.
5588 */
5589 lonCounterDeactivate NUMBER := 0;
5590
5591 lonPortIdOld CONTR_DEVICES.port_id%TYPE := NULL;
5592 lonSmIdOld STORAGE_MEDIUM.sm_id%TYPE := NULL;
5593 lonDnId DIRECTORY_NUMBER.dn_id%TYPE := NULL;
5594 lonDnIdOld DIRECTORY_NUMBER.dn_id%TYPE := NULL;
5595 locDn_status DIRECTORY_NUMBER.dn_status%TYPE := NULL;
5596 locDn_status_requ DIRECTORY_NUMBER.dn_status_requ%TYPE := NULL;
5597 lonRunning_Number CONTR_DEVICES.running_number%TYPE := NULL; -- New with Feature 402782
5598
5599 piodEffectiveDate DATE;
5600 losScslPrefix VARCHAR2(3);
5601BEGIN
5602
5603 piodEffectiveDate := GetEffectiveDate(pionRequest);
5604
5605-- IF pionReqMar = conServiceDriven THEN
5606 /* Market is GSM */
5607
5608 -- ELSE
5609 FOR xcrDevice IN locDevices LOOP
5610 IF xcrDevice.CD_PENDING_STATE = cosStatusDeactivate THEN
5611 /*
5612 ** Deactivate section
5613 */
5614 lonCounterDeactivate := lonCounterDeactivate + 1;
5615 lonRunning_Number := xcrDevice.RUNNING_NUMBER; -- New with Feature 402782
5616
5617 IF xcrDevice.DN_ID IS NOT NULL THEN
5618 SELECT DN_STATUS_REQU, DN_STATUS
5619 INTO locDn_status_requ, locDn_status
5620 FROM DIRECTORY_NUMBER
5621 WHERE DN_ID = xcrDevice.DN_ID
5622 FOR UPDATE;
5623
5624 IF locDn_status_requ IS NOT NULL THEN
5625 UPDATE DIRECTORY_NUMBER
5626 SET DN_STATUS = locDn_status_requ,
5627 DN_STATUS_REQU = NULL
5628 WHERE DN_ID = xcrDevice.DN_ID;
5629 END IF;
5630 END IF;
5631
5632
5633 UPDATE CONTR_DEVICES
5634
5635 SET CD_DEACTIV_DATE = piodEffectiveDate,
5636 /* Delete reference to phantom MSISDN */
5637 DN_ID = NULL,
5638 CD_PENDING_STATE = NULL,
5639 REC_VERSION = REC_VERSION + 1
5640 WHERE CURRENT OF locDevices;
5641 lonPortIdOld := xcrDevice.PORT_ID;
5642
5643 UPDATE PARAMETER_VALUE
5644 SET PRM_VALID_FROM = sysdate
5645 WHERE REQUEST_ID = pionRequest;
5646
5647 -- IF pionReqMar = conEquipmentDriven THEN -- NMT
5648 /* market is GSM */
5649 -- ELSE
5650 IF xcrDevice.PORT_ID IS NOT NULL THEN
5651
5652 OPEN locCONTRACT_RELATION;
5653 FETCH locCONTRACT_RELATION INTO lonREL_CO_ID;
5654 IF locCONTRACT_RELATION %NOTFOUND THEN
5655
5656 RetentionPort(xcrDevice.PORT_ID, NULL, pionRequest);
5657
5658 END IF;
5659 CLOSE locCONTRACT_RELATION;
5660
5661 END IF;
5662 -- END IF;
5663 ELSE
5664 /*
5665 ** No valid status!
5666 */
5667 gosErrorText := 'Finish_Port_Remove: ' ||
5668 'Illegal status ' ||
5669 xcrDevice.CD_PENDING_STATE;
5670 RAISE geoApplicationError;
5671 END IF; -- xcrDevice.CD_PENDING_STATE = cosStatusActivate
5672 END LOOP; -- Devices
5673
5674 -- Begin feature 402782
5675 IF lonRunning_Number IS NOT NULL THEN
5676 -- Set RUNNING_NUMBER = -1 for the SIM to be removed
5677 UPDATE CONTR_DEVICES set RUNNING_NUMBER = -1
5678 WHERE RUNNING_NUMBER = lonRunning_Number
5679 AND CO_ID = pionContractId;
5680 -- Reorder RUNNING_NUMBER values in order to fill the gap
5681 UPDATE CONTR_DEVICES set RUNNING_NUMBER = RUNNING_NUMBER -1
5682 WHERE RUNNING_NUMBER > lonRunning_Number
5683 AND CO_ID = pionContractId;
5684 END IF; -- lonRunning_Number IS NOT NULL
5685 -- End feature 402782
5686
5687 UPDATE CONTR_SERVICES_CAP
5688 SET PENDING_BCCODE = NULL,
5689 REC_VERSION = REC_VERSION + 1
5690 WHERE CO_ID = pionContractId
5691 AND CS_REQUEST = pionRequest
5692 AND PENDING_BCCODE IS NOT NULL;
5693 -- END IF; -- check if market is service driven
5694END Finish_Port_Remove;
5695
5696/*
5697** =====================================================================
5698**
5699** Procedure: Finish_Port_Add
5700** Feature 402782
5701** =====================================================================
5702*/
5703PROCEDURE Finish_Port_Add (
5704 pionRequest IN CONTRACT_HISTORY.request%TYPE,
5705 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
5706 pionReqMar IN NUMBER,
5707 pionnewPortID IN PORT.port_id%TYPE)
5708IS
5709 CURSOR locDevices IS
5710 SELECT PORT_ID, CD_PENDING_STATE
5711 FROM CONTR_DEVICES
5712 WHERE CO_ID = pionContractId
5713 AND PORT_ID = pionnewPortID
5714 AND CD_PENDING_STATE IS NOT NULL ORDER BY CD_SEQNO
5715 FOR UPDATE;
5716
5717 CURSOR locCONTRACT_RELATION
5718 IS
5719 SELECT REL_CO_ID
5720 FROM CONTRACT_RELATION
5721 WHERE REL_CO_ID = pionContractId;
5722
5723 lonREL_CO_ID locCONTRACT_RELATION %ROWTYPE;
5724
5725 /*
5726 ** For every device the counter is incremented.
5727 */
5728 lonCounterActivate NUMBER := 0;
5729
5730 lonPortIdOld CONTR_DEVICES.port_id%TYPE := NULL;
5731 lonSmIdOld STORAGE_MEDIUM.sm_id%TYPE := NULL;
5732 lonDnId DIRECTORY_NUMBER.dn_id%TYPE := NULL;
5733 lonDnIdOld DIRECTORY_NUMBER.dn_id%TYPE := NULL;
5734
5735 piodEffectiveDate DATE;
5736
5737 losScslPrefix VARCHAR2(3);
5738
5739BEGIN
5740
5741 piodEffectiveDate := GetEffectiveDate(pionRequest);
5742
5743 -- IF pionReqMar = conServiceDriven THEN
5744 /* Market is GSM */
5745-- ELSE
5746 FOR xcrDevice IN locDevices LOOP
5747 IF xcrDevice.CD_PENDING_STATE = cosStatusActivate THEN
5748 /*
5749 ** Activate section
5750 */
5751 lonCounterActivate := lonCounterActivate + 1;
5752 UPDATE CONTR_DEVICES
5753
5754 SET CD_ACTIV_DATE = piodEffectiveDate,
5755
5756 CD_VALIDFROM = piodEffectiveDate,
5757
5758 CD_PENDING_STATE = NULL,
5759 REC_VERSION = REC_VERSION + 1
5760 WHERE CURRENT OF locDevices;
5761
5762 UPDATE PARAMETER_VALUE
5763 SET PRM_VALID_FROM = sysdate
5764 WHERE REQUEST_ID = pionRequest;
5765
5766 IF pionReqMar = conEquipmentDriven THEN -- NMT
5767 UPDATE PORT
5768 SET SM_ID = PORT_SM_REQU,
5769 PORT_SM_REQU = NULL,
5770 REC_VERSION = REC_VERSION + 1
5771 WHERE PORT_ID = xcrDevice.PORT_ID AND
5772 PORT_SM_REQU IS NOT NULL;
5773 -- dirnum change if port old != port current
5774 IF xcrDevice.PORT_ID != lonPortIdOld THEN -- dirnum change for NMT
5775 -- get new dirnum
5776 SELECT DN_ID
5777 INTO lonDnId
5778 FROM PORT
5779 WHERE PORT_ID = xcrDevice.PORT_ID;
5780 -- break link to current ESN, this avoid also ESN(SIM) retention because the function RetentionPort
5781 -- does the ESN retention
5782 IF lonPortIdOld IS NOT NULL THEN
5783 UPDATE PORT
5784 SET SM_ID = NULL
5785 WHERE PORT_ID = lonPortIdOld;
5786
5787 RetentionPort(lonPortIdOld, NULL, pionRequest);
5788
5789 END IF; -- lonPortIdOld IS NOT NULL
5790 -- finish dirnum replacement
5791 IF lonDnId IS NOT NULL THEN
5792 Finish_DN_Replace(pionRequest, pionContractId, pionReqMar, lonDnIdOld, lonDnId);
5793 END IF;
5794 ELSE -- xcrDevice.PORT_ID != lonPortIdOld
5795 -- ESN (SIM) change
5796
5797
5798 RetentionStorageMedium(lonSmIdOld, NULL, pionRequest);
5799
5800 -- update SIS and kCode
5801 Nmt.UpdateResources( pionRequest, pionContractId );
5802 END IF; -- xcrDevice.PORT_ID != lonPortIdOld
5803 END IF; -- pionReqMar = conEquipmentDriven
5804 ELSE
5805 /*
5806 ** No valid status!
5807 */
5808 gosErrorText := 'Finish_Port_Add: ' ||
5809 'Illegal status ' ||
5810 xcrDevice.CD_PENDING_STATE;
5811 RAISE geoApplicationError;
5812 END IF; -- xcrDevice.CD_PENDING_STATE = cosStatusActivate
5813 END LOOP; -- Devices
5814 IF lonCounterActivate = 0 THEN
5815 gosErrorText := 'Finish_Port_Add: No device activated';
5816 RAISE geoApplicationError;
5817 END IF;
5818
5819 UPDATE CONTR_SERVICES_CAP
5820 SET PENDING_BCCODE = NULL,
5821 REC_VERSION = REC_VERSION + 1
5822 WHERE CO_ID = pionContractId
5823 AND CS_REQUEST = pionRequest
5824 AND PENDING_BCCODE IS NOT NULL;
5825 -- END IF; -- check if market is service driven
5826END Finish_Port_Add;
5827
5828/*
5829** =====================================================================
5830**
5831** Procedure: Finish_DN_and_Port_Replace
5832**
5833** =====================================================================
5834*/
5835PROCEDURE Finish_DN_and_Port_Replace (
5836 pionRequest IN CONTRACT_HISTORY.request%TYPE,
5837 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
5838 pionReqMar IN NUMBER, -- This procedure works for GSM markets only!
5839 pionOldPortID IN PORT.port_id%TYPE,
5840 pionNewPortID IN PORT.port_id%TYPE)
5841IS
5842BEGIN
5843 -- Check that market is GSM
5844 IF pionReqMar != conStorMedDriven THEN
5845 gosErrorText := 'Finish_DN_and_Port_Replace: pionReqMar: Invalid market type';
5846 RAISE geoApplicationError;
5847 END IF;
5848 -- Replace Port (SIM card)
5849 Finish_Port_Replacement( pionRequest,
5850 pionContractId,
5851 pionReqMar,
5852 pionOldPortID,
5853 pionNewPortID);
5854 -- Replace Directory Number
5855 Finish_DN_Replace(pionRequest,
5856 pionContractId,
5857 pionReqMar,
5858 NULL,
5859 NULL);
5860END Finish_DN_and_Port_Replace;
5861/*
5862** =====================================================================
5863**
5864** Procedure: Finish_ChangeTM
5865**
5866** Purpose: Completes the RatePlan Change request with updates to the
5867** contract and services for the contract
5868** =====================================================================
5869*/
5870PROCEDURE Finish_ChangeTM (
5871 pionRequest IN CONTRACT_HISTORY.request%TYPE,
5872 pionContractId IN CONTRACT_HISTORY.co_id%TYPE )
5873IS
5874 CURSOR locContractPendingTM IS
5875 SELECT PENDING_TMCODE
5876 FROM CONTRACT_ALL
5877 WHERE CO_ID = pionContractId
5878 FOR UPDATE OF PENDING_TMCODE, TMCODE, TMCODE_DATE, REC_VERSION
5879 NOWAIT;
5880 lonPendingTMCode CONTRACT_ALL.PENDING_TMCODE%TYPE;
5881 lodTMCodeDate CONTRACT_ALL.TMCODE_DATE%TYPE;
5882
5883 CURSOR locPrSpcodeHist IS
5884 SELECT PROFILE_ID, CO_ID, SNCODE, HISTNO
5885 FROM PR_SERV_SPCODE_HIST
5886 WHERE CO_ID = pionContractId
5887 AND REQUEST_ID = pionRequest;
5888 lonRatingCounter NUMBER;
5889 piodEffectiveDate DATE; -- PN 214421_2-1
5890BEGIN
5891 piodEffectiveDate := GetEffectiveDate(pionRequest); -- PN 214421_2-1
5892
5893 OPEN locContractPendingTM;
5894 FETCH locContractPendingTM INTO lonPendingTMCode;
5895
5896 IF lonPendingTMCode IS NULL THEN
5897 -- 00366574_plsql in case the rate plan change is part of a takeover rating provisioning is switched off, since the rate plan change was already provisioned with the contract takeover activation
5898 -- in this case there is no pending TMCODE and the contract is already in the final state, but only the network must be informed.
5899 SELECT COUNT(*) INTO lonRatingCounter FROM MDSRRTAB RR WHERE RR.REQUEST = pionRequest AND RR.RATING_FLAG='N';
5900 IF lonRatingCounter = 0 THEN
5901 CLOSE locContractPendingTM;
5902 gosErrorText := 'Finish_ChangeTM: PendingTMCode IS NULL';
5903 RAISE geoApplicationError;
5904 ELSE
5905 CLOSE locContractPendingTM;
5906 RETURN;
5907 END IF;
5908 END IF;
5909
5910 -- Update ProfileService with changed service packages
5911 FOR xcr IN locPrSpcodeHist LOOP
5912 UPDATE PROFILE_SERVICE
5913 SET SPCODE_HISTNO = xcr.HISTNO,
5914 REC_VERSION = REC_VERSION + 1
5915 WHERE PROFILE_ID = xcr.PROFILE_ID
5916 AND CO_ID = xcr.CO_ID
5917 AND SNCODE = xcr.SNCODE;
5918 END LOOP;
5919
5920 -- Get the version date of the Tariff Model
5921 SELECT MAX(VSDATE) INTO lodTMCodeDate
5922 FROM RATEPLAN_VERSION
5923 WHERE TMCODE = lonPendingTMCode
5924 AND STATUS = 'P'
5925 AND VSDATE <= SYSDATE;
5926
5927 -- Update Contract with new Tariff Model
5928 UPDATE CONTRACT_ALL
5929 SET TMCODE = lonPendingTMCode,
5930 TMCODE_DATE = lodTMCodeDate,
5931 PENDING_TMCODE = NULL,
5932 REC_VERSION = REC_VERSION + 1
5933 WHERE CO_ID = pionContractId;
5934
5935 -- PN 214455_1 - Insert new tariff model into RATEPLAN_HIST
5936 InsertRatePlanHist(pionContractId,pionRequest);/*Defect 229253 add pionRequest as parameter*/
5937
5938 CLOSE locContractPendingTM;
5939
5940 -- Begin defect 214421-2
5941 UPDATE PR_SERV_SPCODE_HIST SET VALID_FROM_DATE = piodEffectiveDate -- PN 214421_2-1
5942 WHERE CO_ID = pionContractId AND REQUEST_ID = pionRequest;
5943 -- End defect 214421-2
5944
5945 -- PN 00413794 - The CUG resource has to be deactivated for CUG service which is not present in new RP.
5946 Cug.Finish_Deactivate( pionRequest, pionContractId );
5947
5948END Finish_ChangeTM;
5949
5950/*
5951** ==========================================================================
5952**
5953** Procedure: Finish_Rating_Option
5954** FEATURE 287342 OH
5955** Purpose: Completes addition and modification of rating option to contract.
5956** ==========================================================================
5957*/
5958PROCEDURE Finish_Rating_Option (
5959 pionRequest IN CONTR_RATING_OPTION.request_id%TYPE
5960)
5961IS
5962BEGIN
5963 UPDATE CONTR_RATING_OPTION SET PENDING_FLAG=NULL, REC_VERSION = REC_VERSION + 1
5964 WHERE REQUEST_ID = pionRequest
5965 AND PENDING_FLAG='X';
5966
5967END Finish_RATING_OPTION;
5968
5969/*
5970** =====================================================================
5971**
5972** Procedure: Finish_ChangeSP
5973**
5974** Purpose: Completes the Servie Package Change request with updates to the
5975** contract and services for the contract
5976** =====================================================================
5977*/
5978PROCEDURE Finish_ChangeSP (
5979 pionRequest IN CONTRACT_HISTORY.request%TYPE,
5980 pionContractId IN CONTRACT_HISTORY.co_id%TYPE )
5981IS
5982 CURSOR locPrSpcodeHist IS
5983 SELECT PROFILE_ID, CO_ID, SNCODE, HISTNO
5984 FROM PR_SERV_SPCODE_HIST
5985 WHERE CO_ID = pionContractId
5986 AND REQUEST_ID = pionRequest;
5987
5988 piodEffectiveDate DATE; -- PN 214421_2-1
5989BEGIN
5990 piodEffectiveDate := GetEffectiveDate(pionRequest);
5991
5992 -- Update ProfileService with changed service packages
5993 FOR xcr IN locPrSpcodeHist LOOP
5994 UPDATE PROFILE_SERVICE
5995 SET SPCODE_HISTNO = xcr.HISTNO,
5996 REC_VERSION = REC_VERSION + 1
5997 WHERE PROFILE_ID = xcr.PROFILE_ID
5998 AND CO_ID = xcr.CO_ID
5999 AND SNCODE = xcr.SNCODE;
6000 END LOOP;
6001
6002 UPDATE PR_SERV_SPCODE_HIST SET VALID_FROM_DATE = piodEffectiveDate
6003 WHERE CO_ID = pionContractId AND REQUEST_ID = pionRequest
6004 AND VALID_FROM_DATE IS NULL;
6005
6006END Finish_ChangeSP;
6007
6008/*
6009** =====================================================================
6010**
6011** Procedure: Finish_ChangeSubscription
6012** #UMTS# 82630
6013** =====================================================================
6014*/
6015PROCEDURE Finish_ChangeSubscription (
6016 pionRequest IN CONTRACT_HISTORY.request%TYPE,
6017 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
6018 pionPlcode IN MPDPLTAB.plcode%TYPE,
6019 pionReqMar IN NUMBER,
6020 pionActionId IN NUMBER,
6021 piosData1 IN VARCHAR2,
6022 piosData2 IN VARCHAR2)
6023IS
6024 /* 22-Feb-2001 HirschA begin feature 84834 */
6025 losCoLinkType CONTRACT_ALL.CO_REL_TYPE%TYPE;
6026 lonFetchMainCoId CONTRACT_RELATION.MAIN_CO_ID%TYPE;
6027 CURSOR locGetLinkedALContracts IS
6028 SELECT MAIN_CO_ID, REL_CO_ID
6029 FROM CONTRACT_RELATION
6030 WHERE (MAIN_CO_ID = pionContractId
6031 OR MAIN_CO_ID = (SELECT MAIN_CO_ID
6032 FROM CONTRACT_RELATION
6033 WHERE REL_CO_ID = pionContractId
6034 AND COR_DEACTIVE_DATE IS NULL))
6035 AND COR_DEACTIVE_DATE IS NULL;
6036 CURSOR locContractLinkType IS
6037 SELECT CO_REL_TYPE
6038 FROM CONTRACT_ALL
6039 WHERE CO_ID = pionContractId;
6040 /* end feature 84834 */
6041 -- Feature 201959_plsql Begin
6042 loiSMID INTEGER;
6043 -- 201959_plsql end
6044 --222574:vov
6045 loiOldPortID NUMBER;
6046 loiNewPortID NUMBER;
6047 --222574:vov
6048 piodEffectiveDate DATE; -- PN 00250230_plsql/d:usc
6049 -- Begin 273403_plsql, AV
6050 losScslPrefix VARCHAR2(3);-- PN 00250230_plsql/d:usc
6051 losPortOwner VARCHAR2(2);
6052 -- End 273403_plsql
6053BEGIN
6054 -- DBMS_OUTPUT.put_line('--> Finish_ChangeSubscription: ' ||
6055 -- ' Request: ' || pionRequest ||
6056 -- ' ContractId: ' || pionContractId ||
6057 -- ' Plcode: ' || pionPlcode ||
6058 -- ' Market: ' || pionReqMar ||
6059 -- ' ActionId: ' || pionActionId ||
6060 -- ' OldSubscription: ' || piosData1 ||
6061 -- ' NewSubscription: ' || piosData2);
6062 IF pionReqMar IS NULL THEN
6063 gosErrorText := 'Finish_ChangeSubscription: Market IS NULL';
6064 RAISE geoApplicationError;
6065 END IF;
6066 IF pionActionId IS NULL THEN
6067 gosErrorText := 'Finish_ChangeSubscription: Action identifier IS NULL';
6068 RAISE geoApplicationError;
6069 END IF;
6070 /* 22-Feb-2001 HirschA begin feature 84834 */
6071 /*Alternate Line: Get contract type (Regular='', Main='M', AL='R') */
6072 OPEN locContractLinkType;
6073 FETCH locContractLinkType
6074 INTO losCoLinkType;
6075 CLOSE locContractLinkType;
6076 /* end feature 84834 */
6077
6078 SELECT SCSLPREFIX INTO losScslPrefix FROM MPDSCTAB SC, CONTRACT_ALL CA
6079 WHERE SC.SCCODE = CA.SCCODE AND CA.CO_ID = pionContractId; -- Introduced with feature 402782
6080
6081 IF pionActionId = 6001 THEN
6082 Finish_DN_Replace(pionRequest,
6083 pionContractId,
6084 pionReqMar,
6085 -- IdOfDirectoryNumber( piosData1, pionPlcode ), Start Defect 80442 WPa 03-JUL-2000
6086 -- IdOfDirectoryNumber( piosData2, pionPlcode ));
6087 IdOfDirectoryNumber( piosData1, pionPlcode, pionContractId, pionRequest ),
6088 IdOfDirectoryNumber( piosData2, pionPlcode, pionContractId, pionRequest )); -- End Defect 80442
6089 ELSIF pionActionId = 7 THEN
6090 UPDATE CONTRACT_ALL
6091 SET CONTRACT_ID_LEC = PENDING_CONTRACT_ID_LEC,
6092 PENDING_CONTRACT_ID_LEC = NULL,
6093 CONTRACT_ID_LDC = PENDING_CONTRACT_ID_LDC,
6094 PENDING_CONTRACT_ID_LDC = NULL,
6095 REC_VERSION = REC_VERSION + 1
6096 WHERE CO_ID = pionContractId;
6097 IF SQL%ROWCOUNT = 0 THEN
6098 gosErrorText :=
6099 'Finish_ChangeSubscription: no pending eccode lec or ldc for ' ||
6100 'Contract ' || pionContractID || ' and ' ||
6101 'Request ' || pionRequest ;
6102 RAISE geoApplicationError;
6103 END IF;
6104
6105 /* UMTS removed UPDATE CONTR_SERVICES
6106 SET CS_PENDING_STATE = NULL,
6107 REC_VERSION = REC_VERSION + 1
6108 WHERE CO_ID = pionContractId
6109 AND CS_REQUEST = pionRequest -- only network services
6110 AND CS_PENDING_STATE IS NOT NULL; */
6111
6112 UPDATE CONTR_SERVICES_CAP
6113 SET PENDING_BCCODE = NULL,
6114 REC_VERSION = REC_VERSION + 1
6115 WHERE CO_ID = pionContractId
6116 AND CS_REQUEST = pionRequest
6117 AND PENDING_BCCODE IS NOT NULL;
6118
6119 -- PN00221458 Changes for DEVICE replace for AL case
6120 -- the whole part of 204886_plsql was included with this PN
6121 -- R.Wieja 19-03-2002 begin
6122 -- F204886_plsql, Andreas Billo, 28-SEP-2001
6123 ELSIF pionActionID = 6002 THEN
6124
6125 -- DBMS_OUTPUT.put_line('--> Finish_ChangeSubscription: losCoLinkType inside ' || losCoLinkType );
6126
6127 /*Defect 230008 vovkodav Remove TO_NUMBER(piosData1/2) as reason column SM_SERIALNUM
6128 was define VARCHAR2 in the STORAGE_MEDIUM table*/
6129 /*Begin PN 00250230_plsql/d:usc*/
6130 -- Begin 273403_plsql, AV
6131 -- SELECT SCSLPREFIX INTO losScslPrefix FROM MPDSCTAB SC, CONTRACT_ALL CA
6132 -- WHERE SC.SCCODE = CA.SCCODE AND CA.CO_ID = pionContractId;
6133 -- IF losScslPrefix != 'AMP' THEN
6134 SELECT PORT_OWNER INTO losPortOwner FROM MPDHLTAB HL, CURR_CO_DEVICE CD
6135 WHERE CD.HLCODE = HL.HLCODE AND CD.CO_ID = pionContractId;
6136 IF losPortOwner = 'SM' THEN
6137 -- End 273403_plsql
6138 /*End PN 00250230_plsql/d:usc*/
6139
6140 SELECT P.PORT_ID
6141 INTO loiOldPortID
6142 FROM STORAGE_MEDIUM SM, PORT P
6143 WHERE SM.SM_SERIALNUM = piosData1 /*Defect 230008 vovkodav*/
6144 AND P.SM_ID = SM.SM_ID;
6145
6146 SELECT P.PORT_ID
6147 INTO loiNewPortID
6148 FROM STORAGE_MEDIUM SM, PORT P
6149 WHERE SM.SM_SERIALNUM = piosData2 /*Defect 230008 vovkodav*/
6150 AND P.SM_ID = SM.SM_ID;
6151
6152 IF losCoLinkType IS NULL THEN
6153
6154 Finish_Port_Replacement( pionRequest,
6155 pionContractId,
6156 pionReqMar,
6157 TO_NUMBER(loiOldPortID),
6158 TO_NUMBER(loiNewPortID));
6159
6160
6161 ELSIF losCoLinkType = 'M' THEN
6162
6163 FOR xcDepCont IN locGetLinkedALContracts LOOP
6164 -- first loop over all linked AL contracts
6165 Finish_Port_Replacement( pionRequest,
6166 xcDepCont.REL_CO_ID,
6167 pionReqMar,
6168 TO_NUMBER(loiOldPortID),
6169 TO_NUMBER(loiNewPortID));
6170
6171 END LOOP;
6172
6173 -- now process the corresponding Main contract
6174 Finish_Port_Replacement( pionRequest,
6175 pionContractId,
6176 pionReqMar,
6177 TO_NUMBER(loiOldPortID),
6178 TO_NUMBER(loiNewPortID));
6179
6180 ELSE
6181
6182 gosErrorText := 'SIM change not possible for related contract';
6183
6184 RAISE geoApplicationError;
6185
6186 END IF;
6187 /*Begin PN 00250230_plsql/d:usc*/
6188 ELSE
6189 piodEffectiveDate := GetEffectiveDate(pionRequest);
6190 SELECT SM_ID INTO loiSMID
6191 FROM STORAGE_MEDIUM
6192 WHERE PLCODE = pionPlcode
6193 AND SM_SERIALNUM = piosData1;
6194
6195 RetentionStorageMedium(loiSMID, NULL, pionRequest);
6196
6197 UPDATE CONTR_DEVICES
6198 SET CD_DEACTIV_DATE = piodEffectiveDate,
6199 CD_PENDING_STATE = NULL,
6200 REC_VERSION = REC_VERSION + 1
6201 WHERE CO_ID = pionContractId AND CD_SM_NUM = piosData1
6202 AND CD_DEACTIV_DATE IS NULL AND CD_ACTIV_DATE IS NOT NULL;
6203
6204 UPDATE CONTR_DEVICES
6205 SET CD_ACTIV_DATE = piodEffectiveDate,
6206 CD_VALIDFROM = piodEffectiveDate,
6207 CD_PENDING_STATE = NULL,
6208 REC_VERSION = REC_VERSION + 1
6209 WHERE CO_ID = pionContractId AND CD_SM_NUM = piosData2
6210 AND CD_DEACTIV_DATE IS NULL AND CD_ACTIV_DATE IS NULL;
6211 END IF;
6212 /*End PN 00250230_plsql/d:usc*/
6213
6214 -- < F204886_plsql, Andreas Billo, 28-SEP-2001
6215 -- PN00221458 Changes for DEVICE replace for AL case
6216 -- R.Wieja 19-03-2002 end
6217
6218 ELSIF pionActionId = 6003 THEN
6219 /* 02-Mar-2001 HirschA begn feature 84834 -> even device replacements are impacted by AL */
6220 IF losCoLinkType IS NULL THEN -- regular contract THEN
6221 /* end feature 84834 */
6222 Finish_Port_Replacement( pionRequest,
6223 pionContractId,
6224 pionReqMar,
6225 -- IdOfPortNumber( piosData1, pionPlcode ), Begin Defect 80442 WPa
6226 -- IdOfPortNumber( piosData2, pionPlcode )); piosData1, piosData2 contain already PortIDs
6227 TO_NUMBER(piosData1),
6228 TO_NUMBER(piosData2)); -- End Defect 80442 WPa
6229 /* 02-Mar-2001 HirschA begin feature 84834 */
6230 ELSE
6231 FOR xcDepCont IN locGetLinkedALContracts LOOP
6232 -- first loop over all linked AL contracts
6233 Finish_Port_Replacement( pionRequest,
6234 xcDepCont.REL_CO_ID,
6235 pionReqMar,
6236 TO_NUMBER(piosData1),
6237 TO_NUMBER(piosData2));
6238 -- get the Main contract's ID
6239 lonFetchMainCoId := xcDepCont.MAIN_CO_ID;
6240 END LOOP;
6241 -- now process the corresponding Main contract
6242 Finish_Port_Replacement( pionRequest,
6243 lonFetchMainCoId,
6244 pionReqMar,
6245 TO_NUMBER(piosData1),
6246 TO_NUMBER(piosData2));
6247 END IF;
6248 /* end feature 84834 */
6249 ELSIF pionActionId = 6004 THEN
6250 -- Begin defect 205410
6251 /*Finish_DN_and_Port_Replace( pionRequest,
6252 pionContractId,
6253 pionReqMar,
6254 -- IdOfPortNumber( piosData1, pionPlcode ), Begin Defect 80442 WPa
6255 -- IdOfPortNumber( piosData2, pionPlcode )); piosData1, piosData2 contain already PortIDs
6256 TO_NUMBER(piosData1),
6257 TO_NUMBER(piosData2)); -- End Defect 80442 WPa
6258 End Defect 205410 */
6259 --def 204819 ALA begin
6260 -- -> even device replacements are impacted by AL */
6261 IF losCoLinkType IS NULL THEN -- regular contract
6262 Finish_DN_and_Port_Replace(pionRequest,
6263 pionContractId,
6264 pionReqMar,
6265 -- IdOfPortNumber( piosData1, pionPlcode ), Begin Defect 80442 WPa
6266 -- IdOfPortNumber( piosData2, pionPlcode )); piosData1, piosData2 contain already PortIDs
6267 TO_NUMBER(piosData1),
6268 TO_NUMBER(piosData2)); -- End Defect 80442 WPa
6269 ELSE
6270 FOR xcDepCont IN locGetLinkedALContracts LOOP
6271 -- first loop over all linked AL contracts
6272 Finish_DN_and_Port_Replace( pionRequest,
6273 xcDepCont.REL_CO_ID,
6274 pionReqMar,
6275 TO_NUMBER(piosData1),
6276 TO_NUMBER(piosData2));
6277 -- get the Main contract's ID
6278 lonFetchMainCoId := xcDepCont.MAIN_CO_ID;
6279 END LOOP;
6280 -- now process the corresponding Main contract
6281 Finish_DN_and_Port_Replace( pionRequest,
6282 lonFetchMainCoId,
6283 pionReqMar,
6284 TO_NUMBER(piosData1),
6285 TO_NUMBER(piosData2));
6286 END IF;
6287 --def 204819 ALA end
6288 ELSIF pionActionID = 16 THEN
6289 Finish_ChangeTM (pionRequest,
6290 pionContractId );
6291 ELSIF pionActionID = 39 THEN
6292 Finish_ChangeSP (pionRequest, pionContractId );
6293 -- Feature 201959_plsql Begin
6294 ELSIF pionActionID = 6002 THEN
6295 /* begin defect 209864_1 */
6296 SELECT SM_ID
6297 INTO loiSMID
6298 FROM STORAGE_MEDIUM
6299 WHERE PLCODE = pionPlcode
6300 AND SM_SERIALNUM = piosData1; /*Defect 230008 vovkodav*/
6301 /* end defect 209864_1 */
6302 /* begin defect 203433 */
6303 --RetentionStorageMedium(loiSMID);
6304 RetentionStorageMedium(loiSMID, NULL, pionRequest);
6305 /* end defect 203433 */
6306 -- 201959_plsql end
6307
6308 -- Begin Feature 402782
6309 ELSIF ((pionActionId = 13003) AND (losScslPrefix = 'GSM' )) THEN
6310 /* ******** Add a new SIM / Port to the contract ********* */
6311 IF losCoLinkType IS NULL THEN -- regular contract THEN
6312 /* end feature 84834 */
6313 Finish_Port_Add( pionRequest,
6314 pionContractId,
6315 pionReqMar,
6316 TO_NUMBER(piosData1));
6317 /* 02-Mar-2001 HirschA begin feature 84834 */
6318 ELSE
6319 FOR xcDepCont IN locGetLinkedALContracts LOOP
6320 -- first loop over all linked AL contracts
6321 Finish_Port_Add( pionRequest,
6322 xcDepCont.REL_CO_ID,
6323 pionReqMar,
6324 TO_NUMBER(piosData1));
6325 -- get the Main contract's ID
6326 lonFetchMainCoId := xcDepCont.MAIN_CO_ID;
6327 END LOOP;
6328 -- now process the corresponding Main contract
6329 Finish_Port_Add( pionRequest,
6330 lonFetchMainCoId,
6331 pionReqMar,
6332 TO_NUMBER(piosData1));
6333 END IF;
6334
6335 ELSIF ((pionActionId = 14003) AND (losScslPrefix = 'GSM' )) THEN
6336 /* ******** Remove a SIM / Port from the contract ********* */
6337 IF losCoLinkType IS NULL THEN -- regular contract THEN
6338 /* feature 84834 */
6339 Finish_Port_Remove( pionRequest,
6340 pionContractId,
6341 pionReqMar,
6342 TO_NUMBER(piosData1));
6343 /* 02-Mar-2001 HirschA begin feature 84834 */
6344 ELSE
6345 FOR xcDepCont IN locGetLinkedALContracts LOOP
6346 -- first loop over all linked AL contracts
6347 Finish_Port_Remove( pionRequest,
6348 xcDepCont.REL_CO_ID,
6349 pionReqMar,
6350 TO_NUMBER(piosData1));
6351 -- get the Main contract's ID
6352 lonFetchMainCoId := xcDepCont.MAIN_CO_ID;
6353 END LOOP;
6354 -- now process the corresponding Main contract
6355 Finish_Port_Remove( pionRequest,
6356 lonFetchMainCoId,
6357 pionReqMar,
6358 TO_NUMBER(piosData1));
6359 END IF;
6360 /* end feature 84834 */
6361 -- End Feature 402782
6362 ELSE -- unkown status
6363 gosErrorText := 'Finish_ChangeSubscription: ' ||
6364 'Unkown Action Identifier (' ||
6365 pionActionId || '! ';
6366 RAISE geoApplicationError;
6367 END IF;
6368END Finish_ChangeSubscription;
6369
6370
6371
6372
6373
6374
6375
6376/*
6377** =====================================================================
6378**
6379** Procedure: Finish_ChangeMicroCell
6380** #USC#00260533_1_plsql/d
6381** =====================================================================
6382*/
6383PROCEDURE Finish_ChangeMicroCell (
6384 pionRequest IN CONTRACT_HISTORY.request%TYPE,
6385 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
6386 pionActionId IN NUMBER,
6387 piosData1 IN VARCHAR2)
6388IS
6389
6390 losChargingEngine VARCHAR2(5);
6391
6392 lHasLinkedRequest INTEGER :=0;
6393BEGIN
6394
6395 SELECT ce.shdes INTO losChargingEngine FROM contract_all co, rateplan rp, charging_engine ce
6396 WHERE co.tmcode = rp.tmcode AND rp.charging_engine_code = ce.charging_engine_code and co.co_id = pionContractId;
6397
6398
6399 IF losChargingEngine = 'CS' THEN -- charging system contract
6400
6401 UPDATE FAF_ELEMENTS
6402 SET DESTINATION = PENDING_DESTINATION, PENDING_DESTINATION = NULL
6403 WHERE IMC_PENDING_FLAG = cosMarkPending AND CO_ID = pionContractId
6404 AND REQUEST_ID = pionRequest AND PENDING_DESTINATION IS NOT NULL;
6405
6406 UPDATE FAF_ELEMENTS
6407 SET NPCODE = PENDING_NPCODE, PENDING_NPCODE = NULL
6408 WHERE IMC_PENDING_FLAG = cosMarkPending AND CO_ID = pionContractId
6409 AND REQUEST_ID = pionRequest AND PENDING_NPCODE IS NOT NULL;
6410
6411 UPDATE FAF_ELEMENTS
6412 SET FAF_INDICATOR_ID = PENDING_FAF_INDICATOR_ID, PENDING_FAF_INDICATOR_ID = NULL
6413 WHERE IMC_PENDING_FLAG = cosMarkPending AND CO_ID = pionContractId
6414 AND REQUEST_ID = pionRequest AND PENDING_FAF_INDICATOR_ID IS NOT NULL;
6415
6416 UPDATE FAF_ELEMENTS
6417 SET IMC_PENDING_FLAG = NULL
6418 WHERE IMC_PENDING_FLAG = cosMarkPending AND CO_ID = pionContractId
6419 AND REQUEST_ID = pionRequest;
6420
6421 ELSE -- BSCS contract
6422
6423 BEGIN
6424 SELECT 1 INTO lHasLinkedRequest FROM MDSRRTAB MR
6425 WHERE MR.REQUEST = pionRequest AND
6426 EXISTS (SELECT MR1.REQUEST
6427 FROM MDSRRTAB MR1, GMD_ACTION GA
6428 WHERE MR1.PARENT_REQUEST IN (MR.REQUEST,MR.PARENT_REQUEST)
6429 AND MR1.REQUEST != MR.REQUEST
6430 AND MR1.STATUS NOT IN (7,9,8)
6431 AND MR1.ACTION_ID = GA.ACTION_ID
6432 AND GA.MO_LEVEL = 'MICRO_CELL') ;
6433 EXCEPTION
6434 WHEN NO_DATA_FOUND THEN
6435 lHasLinkedRequest := 0;
6436 END;
6437
6438 IF lHasLinkedRequest = 0 THEN
6439 UPDATE MPUFFTAB
6440 SET IMC_PENDING = NULL
6441 WHERE FFCODE = TO_NUMBER(piosData1)
6442 AND IMC_PENDING = cosMarkPending;
6443 IF SQL%ROWCOUNT > 1 THEN
6444 gosErrorText := 'Micro cell has not exactly one pending ' ||
6445 'entry in MPUFFTAB';
6446 RAISE geoApplicationError;
6447 END IF;
6448 END IF; --lHasLinkedRequest
6449
6450 END IF;
6451
6452END Finish_ChangeMicroCell;
6453
6454/*
6455** =====================================================================
6456**
6457** Procedure: Cancel_ChangeMicroCell
6458**
6459** Feature 00328790_plsql AV
6460** =====================================================================*/
6461PROCEDURE Cancel_ChangeMicroCell (
6462 pionRequest IN CONTRACT_HISTORY.request%TYPE,
6463 pionContractId IN CONTRACT_HISTORY.co_id%TYPE)
6464
6465IS
6466
6467 losChargingEngine VARCHAR2(5);
6468
6469BEGIN
6470
6471 SELECT ce.shdes INTO losChargingEngine FROM contract_all co, rateplan rp, charging_engine ce
6472 WHERE co.tmcode = rp.tmcode AND rp.charging_engine_code = ce.charging_engine_code and co.co_id = pionContractId;
6473
6474 IF losChargingEngine = 'CS' THEN -- charging system contract
6475
6476 UPDATE FAF_ELEMENTS
6477 SET IMC_PENDING_FLAG = NULL, PENDING_DESTINATION = NULL,
6478 PENDING_NPCODE = NULL, PENDING_FAF_INDICATOR_ID = NULL
6479 WHERE IMC_PENDING_FLAG = cosMarkPending AND CO_ID = pionContractId
6480 AND REQUEST_ID = pionRequest;
6481
6482 END IF;
6483
6484END Cancel_ChangeMicroCell;
6485
6486/*
6487** =====================================================================
6488**
6489** Procedure: Cancel_AddMicroCell
6490**
6491** Feature 00328790_plsql AV
6492** =====================================================================*/
6493PROCEDURE Cancel_AddMicroCell (
6494 pionRequest IN CONTRACT_HISTORY.request%TYPE,
6495 pionContractId IN CONTRACT_HISTORY.co_id%TYPE)
6496
6497IS
6498
6499 losChargingEngine VARCHAR2(5);
6500
6501BEGIN
6502
6503 SELECT ce.shdes INTO losChargingEngine FROM contract_all co, rateplan rp, charging_engine ce
6504 WHERE co.tmcode = rp.tmcode AND rp.charging_engine_code = ce.charging_engine_code and co.co_id = pionContractId;
6505
6506 IF losChargingEngine = 'CS' THEN -- charging system contract
6507
6508 DELETE from FAF_ELEMENTS
6509 WHERE IMC_PENDING_FLAG = cosMarkPending AND CO_ID = pionContractId
6510 AND REQUEST_ID = pionRequest;
6511
6512 END IF;
6513
6514END Cancel_AddMicroCell;
6515
6516/*
6517** =====================================================================
6518**
6519** Procedure: Finish_DeleteMicroCell
6520**
6521** Feature 00328790_plsql AV
6522** =====================================================================*/
6523PROCEDURE Finish_DeleteMicroCell (
6524 pionRequest IN CONTRACT_HISTORY.request%TYPE,
6525 pionContractId IN CONTRACT_HISTORY.co_id%TYPE)
6526
6527IS
6528
6529 losChargingEngine VARCHAR2(5);
6530
6531BEGIN
6532
6533 SELECT ce.shdes INTO losChargingEngine FROM contract_all co, rateplan rp, charging_engine ce
6534 WHERE co.tmcode = rp.tmcode AND rp.charging_engine_code = ce.charging_engine_code and co.co_id = pionContractId;
6535
6536 IF losChargingEngine = 'CS' THEN -- charging system contract
6537
6538 DELETE from FAF_ELEMENTS
6539 WHERE IMC_PENDING_FLAG = cosMarkPending AND CO_ID = pionContractId
6540 AND REQUEST_ID = pionRequest;
6541
6542 END IF;
6543
6544END Finish_DeleteMicroCell;
6545
6546/*
6547** =====================================================================
6548**
6549** Procedure: Cancel_DeleteMicroCell
6550**
6551** Feature 00328790_plsql AV
6552** =====================================================================*/
6553PROCEDURE Cancel_DeleteMicroCell (
6554 pionRequest IN CONTRACT_HISTORY.request%TYPE,
6555 pionContractId IN CONTRACT_HISTORY.co_id%TYPE)
6556
6557IS
6558
6559 losChargingEngine VARCHAR2(5);
6560
6561BEGIN
6562
6563 SELECT ce.shdes INTO losChargingEngine FROM contract_all co, rateplan rp, charging_engine ce
6564 WHERE co.tmcode = rp.tmcode AND rp.charging_engine_code = ce.charging_engine_code and co.co_id = pionContractId;
6565
6566 IF losChargingEngine = 'CS' THEN -- charging system contract
6567
6568 UPDATE FAF_ELEMENTS
6569 SET IMC_PENDING_FLAG = NULL
6570 WHERE IMC_PENDING_FLAG = cosMarkPending AND CO_ID = pionContractId
6571 AND REQUEST_ID = pionRequest;
6572
6573 END IF;
6574
6575END Cancel_DeleteMicroCell;
6576
6577
6578/*
6579** =====================================================================
6580**
6581** Procedure: Finish_SetPromoPlanDate
6582**
6583** =====================================================================
6584*/
6585PROCEDURE Finish_SetPromoPlanDate (
6586 pionRequest IN CONTRACT_HISTORY.request%TYPE,
6587 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
6588 pionReqMar IN NUMBER)
6589
6590 IS
6591BEGIN
6592
6593 UPDATE CONTRACT_PROMOTION_PLAN
6594 SET ACTIVE_FROM = PENDING_ACTIVE_FROM, PENDING_ACTIVE_FROM = NULL,
6595 ACTIVE_UNTIL = PENDING_ACTIVE_UNTIL, PENDING_ACTIVE_UNTIL = NULL
6596 WHERE CO_ID = pionContractId AND REQUEST_ID = pionRequest AND
6597 PENDING_ACTIVE_FROM IS NOT NULL AND PENDING_ACTIVE_UNTIL IS NOT NULL;
6598
6599 UPDATE CONTRACT_PROMOTION_PLAN
6600 SET ACTIVE_FROM = PENDING_ACTIVE_FROM, PENDING_ACTIVE_FROM = NULL
6601 WHERE CO_ID = pionContractId AND REQUEST_ID = pionRequest AND
6602 PENDING_ACTIVE_FROM IS NOT NULL;
6603
6604 UPDATE CONTRACT_PROMOTION_PLAN
6605 SET ACTIVE_UNTIL = PENDING_ACTIVE_UNTIL, PENDING_ACTIVE_UNTIL = NULL
6606 WHERE CO_ID = pionContractId AND REQUEST_ID = pionRequest AND
6607 PENDING_ACTIVE_UNTIL IS NOT NULL;
6608
6609 UPDATE CONTRACT_PROMOTION_PLAN
6610 SET PROMOTION_PLAN_ID = PENDING_PROMOTION_PLAN_ID, PENDING_PROMOTION_PLAN_ID = NULL
6611 WHERE CO_ID = pionContractId AND REQUEST_ID = pionRequest AND
6612 PENDING_PROMOTION_PLAN_ID IS NOT NULL;
6613
6614 UPDATE CONTRACT_PROMOTION_PLAN
6615 SET DELETED_FLAG = PENDING_DELETED_FLAG, PENDING_DELETED_FLAG = NULL
6616 WHERE CO_ID = pionContractId AND REQUEST_ID = pionRequest AND
6617 PENDING_DELETED_FLAG IS NOT NULL;
6618
6619END Finish_SetPromoPlanDate;
6620
6621/*
6622** =====================================================================
6623**
6624** Procedure: Cancel_SetPromoPlanDate
6625**
6626** Feature 00328790_plsql AV
6627** =====================================================================
6628*/
6629PROCEDURE Cancel_SetPromoPlanDate (
6630 pionRequest IN CONTRACT_HISTORY.request%TYPE,
6631 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
6632 pionReqMar IN NUMBER)
6633IS
6634BEGIN
6635
6636 -- Delete new rows
6637 DELETE FROM CONTRACT_PROMOTION_PLAN
6638 WHERE CO_ID = pionContractId AND REQUEST_ID = pionRequest AND
6639 PROMOTION_PLAN_ID IS NULL;
6640
6641 -- Update existing rows
6642 UPDATE CONTRACT_PROMOTION_PLAN
6643 SET PENDING_ACTIVE_FROM = NULL , PENDING_ACTIVE_UNTIL = NULL , PENDING_PROMOTION_PLAN_ID = NULL , PENDING_DELETED_FLAG = NULL
6644 WHERE CO_ID = pionContractId AND REQUEST_ID = pionRequest;
6645
6646END Cancel_SetPromoPlanDate;
6647
6648/*
6649** =====================================================================
6650**
6651** Procedure: Finish_ChangeExpiryDate
6652**
6653** Feature 00328790_plsql AV
6654** =====================================================================
6655*/
6656PROCEDURE Finish_ChangeExpiryDate (
6657 pionRequest IN CONTRACT_HISTORY.request%TYPE,
6658 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
6659 pionReqMar IN NUMBER)
6660
6661 IS
6662 lonNewRowSEQNO PREPAID_LC_ATTR_HIST.SEQNO%TYPE;
6663 lodtValid_FromDate PREPAID_LC_ATTR_HIST.VALID_FROM%TYPE;
6664
6665BEGIN
6666 -- Find new row
6667 SELECT max(SEQNO) INTO lonNewRowSEQNO
6668 FROM PREPAID_LC_ATTR_HIST
6669 WHERE CO_ID = pionContractId
6670 AND VALID_FROM IS NULL;
6671
6672 SELECT VALID_FROM INTO lodtValid_FromDate
6673 FROM PREPAID_LC_ATTR_HIST
6674 WHERE CO_ID = pionContractId
6675 AND SEQNO = lonNewRowSEQNO;
6676
6677 IF lodtValid_FromDate IS NULL THEN
6678 UPDATE PREPAID_LC_ATTR_HIST
6679 SET VALID_FROM = sysdate
6680 WHERE CO_ID = pionContractId
6681 AND SEQNO = lonNewRowSEQNO;
6682 END IF;
6683
6684END Finish_ChangeExpiryDate;
6685
6686/*
6687** =====================================================================
6688**
6689** Procedure: Cancel_ChangeExpiryDate
6690**
6691** Feature 00328790_plsql AV
6692** =====================================================================
6693*/
6694PROCEDURE Cancel_ChangeExpiryDate (
6695 pionRequest IN CONTRACT_HISTORY.request%TYPE,
6696 pionContractId IN CONTRACT_HISTORY.co_id%TYPE )
6697
6698 IS
6699 lonNewRowSEQNO PREPAID_LC_ATTR_HIST.SEQNO%TYPE;
6700 lodtValid_FromDate PREPAID_LC_ATTR_HIST.VALID_FROM%TYPE;
6701
6702BEGIN
6703
6704 -- Find new row
6705 SELECT max(SEQNO) INTO lonNewRowSEQNO
6706 FROM PREPAID_LC_ATTR_HIST
6707 WHERE CO_ID = pionContractId
6708 AND VALID_FROM IS NULL;
6709
6710 SELECT VALID_FROM into lodtValid_FromDate
6711 FROM PREPAID_LC_ATTR_HIST
6712 WHERE CO_ID = pionContractId
6713 AND SEQNO = lonNewRowSEQNO;
6714
6715 IF lodtValid_FromDate IS NULL THEN
6716 DELETE FROM PREPAID_LC_ATTR_HIST -- Delete new row
6717 WHERE CO_ID = pionContractId
6718 AND SEQNO = lonNewRowSEQNO;
6719 END IF;
6720
6721END Cancel_ChangeExpiryDate;
6722
6723/*
6724** =====================================================================
6725**
6726** Procedure: DuplicateServPortEntry
6727** #UMTS# 82630
6728** =====================================================================
6729*/
6730PROCEDURE DuplicateServPortEntry(
6731 pionContractId IN CONTR_SERVICES_PORT.co_id%TYPE,
6732 pionrequest IN CONTR_SERVICES_PORT.csp_request%TYPE,
6733 pionSncode IN CONTR_SERVICES_PORT.sncode%TYPE,
6734 pionSeqNo IN CONTR_SERVICES_PORT.csp_seqno%TYPE,
6735 pionProfileID IN CONTR_SERVICES_PORT.Profile_ID%TYPE)
6736IS
6737 /*
6738 ** the following Cursor is only necessary, because with some
6739 ** Oracle versions it is not possible to calculate the max seqno
6740 ** in the from clause :-(
6741 */
6742 CURSOR locMaxSeqno IS
6743 SELECT MAX(csp_seqno) max_seqno
6744 FROM CONTR_SERVICES_PORT
6745 WHERE co_id = pionContractID
6746 AND sncode = pionSncode
6747 AND profile_ID = pionProfileID;
6748 lorMaxSeqNo locMaxSeqNo%ROWTYPE;
6749 /* begin defect 203433 */
6750 piodActionDate DATE;
6751 /* end defect 203433 */
6752BEGIN
6753 OPEN locMaxSeqNo;
6754 FETCH locMaxSeqNo
6755 INTO lorMaxSeqNo;
6756 /* begin defect 203433 */
6757 piodActionDate := GetActionDate(pionRequest);
6758 /* end defect 203433 */
6759 IF locMaxSeqNo%FOUND THEN
6760 INSERT INTO CONTR_SERVICES_PORT (
6761 CO_ID,
6762 SNCODE,
6763 CSP_SEQNO,
6764 CSP_SEQNO_PRE,
6765 PORT_ID,
6766 ----------
6767 CSP_STATUS,
6768 CSP_REQUEST,
6769 CSP_ACTIVE_DATE,
6770 CSP_DEACTIVE_DATE,
6771 REC_VERSION,
6772 PROFILE_ID)
6773 SELECT
6774 CO_ID,
6775 SNCODE,
6776 lorMaxSeqNo.max_seqno + 1,
6777 NULL, -- CSP_SEQNO_PRE !
6778 PORT_ID,
6779 ----------
6780 'A',
6781 CSP_REQUEST,
6782 /* begin defect 203433 */
6783 --SYSDATE,
6784 piodActionDate,
6785 /* end defect 203433 */
6786 NULL,
6787 1,
6788 PROFILE_ID
6789 FROM CONTR_SERVICES_PORT CSP
6790 WHERE CO_ID = pionContractId
6791 AND SNCODE = pionSncode
6792 AND PROFILE_ID = pionProfileID
6793 AND CSP_SEQNO = pionSeqNo
6794 AND CSP_REQUEST = pionRequest;
6795 -- Remove old entry
6796 UPDATE CONTR_SERVICES_PORT
6797 SET CSP_STATUS = 'R',
6798 REC_VERSION = REC_VERSION + 1
6799 WHERE CO_ID = pionContractId
6800 AND SNCODE = pionSncode
6801 AND PROFILE_ID = pionProfileID
6802 AND CSP_SEQNO = pionSeqNo
6803 AND CSP_REQUEST = pionRequest;
6804 END IF;
6805 CLOSE locMaxSeqNo;
6806EXCEPTION
6807WHEN OTHERS THEN
6808 gosErrorText := 'Duplicate CONTR_SERVICES_PORT failed. ' ||
6809 'sncode=' || pionSncode || ' ' ||
6810 SQLERRM;
6811 RAISE geoApplicationError;
6812END DuplicateServPortEntry;
6813/*
6814** =====================================================================
6815**
6816** Procedure: DuplicateContrVasEntry
6817** #UMTS# 82630
6818** =====================================================================
6819*/
6820PROCEDURE DuplicateContrVasEntry(
6821 pionContractId IN CONTR_VAS.co_id%TYPE,
6822 pionSncode IN CONTR_VAS.sncode%TYPE,
6823 pionAmount IN INTEGER,
6824 pionProfileID IN CONTR_VAS.PROFILE_ID%TYPE,
6825 /* begin defect 203433 */
6826 pionRequest IN CONTRACT_HISTORY.request%TYPE)
6827 /* end defect 203433 */
6828IS
6829 /* begin defect 203433 */
6830 piodEffectiveDate DATE;
6831BEGIN
6832 piodEffectiveDate := GetEffectiveDate(pionRequest);
6833 /* end defect 203433 */
6834 -- Feat 55992 remove parameter string
6835 INSERT INTO CONTR_VAS (
6836 CO_ID,
6837 SEQNO,
6838 SNCODE,
6839 QUANTITY,
6840 ----------
6841 VALIDFROM,
6842 -- CBB_DATE, --Reddy -- PN #210350
6843 REC_VERSION,
6844 PROFILE_ID)
6845 SELECT
6846 CO_ID,
6847 SEQNO + 1,
6848 SNCODE,
6849 GREATEST(QUANTITY + pionAmount, 0),
6850 ----------
6851 /* begin defect 203433 */
6852 --SYSDATE,
6853 piodEffectiveDate,
6854 /* end defect 203433 */
6855 -- NULL, --Reddy -- PN #210350
6856 1,
6857 PROFILE_ID
6858 FROM CONTR_VAS CV
6859 WHERE CO_ID = pionContractId
6860 AND SNCODE = pionSncode
6861 AND PROFILE_ID = pionProfileID
6862 AND SEQNO = ( SELECT MAX(SEQNO)
6863 FROM CONTR_VAS
6864 WHERE CO_ID = CV.CO_ID
6865 AND SNCODE = CV.SNCODE
6866 AND PROFILE_ID = CV.PROFILE_ID );
6867EXCEPTION
6868WHEN OTHERS THEN
6869 gosErrorText := 'Insert into CONTR_VAS failed. ' ||
6870 'sncode=' || pionSncode || ' ' ||
6871 SQLERRM;
6872 RAISE geoApplicationError;
6873END DuplicateContrVasEntry;
6874/*
6875** =====================================================================
6876**
6877** Procedure: Finish_ServiceControl
6878** Modified: 12-Nov-1999 Feature 52832 Added a new parameter piosData1
6879** #UMTS# 82630
6880** =====================================================================
6881*/
6882PROCEDURE Finish_ServiceControl (
6883 pionRequest IN CONTRACT_HISTORY.request%TYPE,
6884 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
6885 pionReqMar IN NUMBER,
6886 pionActionId IN NUMBER,
6887 piosData1 IN MDSRRTAB.data_1%TYPE ) -- 52832
6888IS
6889 -- Cursor for all assigned Services
6890 CURSOR locServices IS
6891 SELECT SNCODE,
6892 PROFILE_ID,
6893 LOWER(STATUS) AS STATUS,
6894 REASON,
6895 HISTNO,
6896 VALID_FROM_DATE
6897 FROM PR_SERV_STATUS_HIST
6898 WHERE CO_ID = pionContractId
6899 AND REQUEST_ID = pionRequest
6900 AND LOWER(STATUS) != cosStatusParameter
6901 FOR UPDATE;
6902
6903 -- FEATURE 240721
6904 CURSOR locServAttrib IS
6905 SELECT SNCODE,
6906 PROFILE_ID,
6907 SERVICE_ATTRIB_HISTNO,
6908 REQUEST_ID
6909 FROM PR_SERV_ATTRIB_HIST
6910 WHERE CO_ID = pionContractId
6911 AND REQUEST_ID = pionRequest
6912 FOR UPDATE;
6913
6914 /* Cursor for all Services of current contract */
6915 CURSOR locAllServices IS
6916 SELECT SNCODE,
6917 PROFILE_ID
6918 FROM PROFILE_SERVICE
6919 WHERE CO_ID = pionContractId
6920 FOR UPDATE;
6921 lonLastRowCount NUMBER := 0;
6922
6923 /* On servicepackage changing, the active services of the
6924 old service package should be deactivated, but it is
6925 not neccessary to set the seqno to max(seqno) of the
6926 contract. So the 'where clause' will be replaced
6927 by max(seqno) of CO_ID and SNCODE
6928 */
6929 CURSOR locServicesCAP (pconSncode NUMBER, pconProfileID NUMBER ) IS
6930 SELECT DN_ID, DN_BLOCK_ID,ADDITIONAL_FLAG, SEQNO
6931 FROM CONTR_SERVICES_CAP
6932 WHERE CO_ID = pionContractId
6933 AND SNCODE = pconSncode
6934 AND PROFILE_ID = pconProfileID
6935 AND CS_REQUEST = pionRequest;
6936 CURSOR locServicesPort (pconSncode NUMBER, pconProfileID NUMBER ) IS
6937 SELECT PORT_ID, CSP_SEQNO, CSP_STATUS
6938 FROM CONTR_SERVICES_PORT
6939 WHERE CO_ID = pionContractId
6940 AND SNCODE = pconSncode
6941 AND PROFILE_ID = pconProfileID
6942 AND CSP_REQUEST = pionRequest;
6943
6944 CURSOR locServicesExportCAP (pconSncode NUMBER, pconProfileID NUMBER ) IS
6945 SELECT DN.DN_STATUS_REQU
6946 FROM CONTR_SERVICES_CAP CSC, DIRECTORY_NUMBER DN
6947 WHERE DN.DN_ID = CSC.DN_ID
6948 AND CSC.CO_ID = pionContractId
6949 AND CSC.CS_REQUEST= pionRequest
6950 AND CSC.SNCODE = pconSncode
6951 AND CSC.PROFILE_ID = pconProfileID
6952 AND CSC.CS_DEACTIV_DATE IS NULL;
6953
6954 CURSOR locServiceSPCODE (pconSncode NUMBER, pconProfileID NUMBER ) IS
6955 SELECT HISTNO
6956 FROM PR_SERV_SPCODE_HIST
6957 WHERE CO_ID = pionContractId
6958 AND SNCODE = pconSncode
6959 AND PROFILE_ID = pconProfileID
6960 AND REQUEST_ID = pionRequest
6961 FOR UPDATE;
6962
6963
6964 /*
6965 ** The following variable is set to TRUE, if the loop was entered. If
6966 ** no services are selected an error occur.
6967 */
6968 lobServicesFound BOOLEAN := FALSE;
6969 lobDNumFound BOOLEAN := FALSE; -- TRUE, if a directory number was found
6970 lonPortsFound NUMBER := 0; -- Number of ports to be activated
6971 lonMaxSeqno NUMBER := 0; -- Test for service package change
6972 lonRowCount NUMBER := 0; /* PN00214067, Andreas Billo, 04-JAN-2002, added := 0 */
6973 lonSeqCSC CONTR_SERVICES_CAP.SEQNO%TYPE;
6974 lonDN_ID CONTR_SERVICES_CAP.DN_ID%TYPE;
6975
6976 lonDNB_ID CONTR_SERVICES_CAP.DN_ID%TYPE; -- * PN00214067-1, Andreas Billo, 08-JAN-2002 */
6977
6978 losOnlineCharging VARCHAR2(30) := NULL; -- PN09397791/d JAR
6979
6980 CURSOR locVPN_Access (pionCoID CONTR_SERVICES_CAP.CO_ID% TYPE,
6981 pionSnCode CONTR_SERVICES_CAP.SNCODE% TYPE,
6982 pionRequest CONTR_SERVICES_CAP.CS_REQUEST% TYPE) IS
6983 SELECT DN_ID
6984 FROM CONTR_SERVICES_CAP
6985 WHERE CO_ID =pionCoID
6986 AND SNCODE = pionSnCode
6987 AND CS_REQUEST = pionRequest;
6988
6989 piodEffectiveDate DATE;
6990 piodActionDate DATE;
6991BEGIN
6992 piodEffectiveDate := GetEffectiveDate(pionRequest);
6993 piodActionDate := GetActionDate(pionRequest);
6994 DBMS_OUTPUT.put_line('--> Finish_ServiceControl: Request: ' ||
6995 pionRequest || ' ContractId: ' || pionContractId );
6996 Prm.Finish_ServiceControl(pionRequest, pionContractId, pionActionId);
6997 IF pionActionId = 11 THEN
6998 lonRowCount := 1;
6999 END IF;
7000 IF pionActionId IN (10,24) THEN
7001 -- We don't know, if a parameter was changed.
7002 -- => Any problem should be raised within Prm.Finish_ServiceControl()
7003 -- => Otherwise the parameter change request is processed successfully.
7004 lobServicesFound := TRUE;
7005 lonRowCount := 1;
7006 END IF;
7007
7008 -- FEATURE 240721
7009 FOR xcrServAttrib IN locServAttrib LOOP
7010
7011 UPDATE PROFILE_SERVICE
7012 SET ATTRIB_HISTNO = xcrServAttrib.SERVICE_ATTRIB_HISTNO,
7013 REC_VERSION = REC_VERSION + 1
7014 WHERE CO_ID = pionContractId
7015 AND PROFILE_ID = xcrServAttrib.PROFILE_ID
7016 AND SNCODE = xcrServAttrib.SNCODE;
7017
7018 UPDATE PR_SERV_ATTRIB_HIST
7019 SET VALID_FROM = piodEffectiveDate,
7020 REC_VERSION = REC_VERSION + 1
7021 WHERE CO_ID = pionContractId
7022 AND PROFILE_ID = xcrServAttrib.PROFILE_ID
7023 AND SNCODE = xcrServAttrib.SNCODE
7024 AND REQUEST_ID = xcrServAttrib.REQUEST_ID;
7025
7026 END LOOP;
7027
7028 FOR xcrService IN locServices LOOP
7029 lobServicesFound := TRUE;
7030 lonRowCount := locServices%RowCount;
7031 IF xcrService.STATUS = cosStatusActivate THEN -- register Service
7032 IF xcrService.REASON = conInitialActivation THEN -- first registration
7033
7034 IF xcrService.VALID_FROM_DATE IS NULL
7035 THEN
7036 UPDATE PR_SERV_STATUS_HIST
7037 SET VALID_FROM_DATE = piodEffectiveDate,
7038 REC_VERSION = REC_VERSION + 1
7039 WHERE CURRENT OF locServices;
7040 END IF;
7041
7042 SELECT GMDEXT_TASK INTO losOnlineCharging FROM MDSRRTAB WHERE REQUEST = pionRequest; -- PN397791/d JAR
7043
7044 IF losOnlineCharging IS NOT NULL THEN -- PN397791/d
7045
7046 UPDATE PROFILE_SERVICE
7047 SET STATUS_HISTNO = xcrService.HISTNO,
7048 DATE_BILLED = piodEffectiveDate, -- Feature 276992
7049 REC_VERSION = REC_VERSION + 1,
7050 ADV_CHARGE_PRD = DECODE(ADV_CHARGE_PRD,0,ADV_CHARGE_PRD,
7051 -1,ADV_CHARGE_PRD,
7052 NULL,ADV_CHARGE_PRD,
7053 ADV_CHARGE_PRD-1) -- Feature 276992
7054 WHERE CO_ID = pionContractId
7055 AND SNCODE = xcrService.SNCODE
7056 AND PROFILE_ID = xcrService.PROFILE_ID;
7057 ELSE -- PN 398955, MCH
7058 UPDATE PROFILE_SERVICE
7059 SET STATUS_HISTNO = xcrService.HISTNO,
7060 REC_VERSION = REC_VERSION + 1
7061 WHERE CO_ID = pionContractId
7062 AND SNCODE = xcrService.SNCODE
7063 AND PROFILE_ID = xcrService.PROFILE_ID;
7064 END IF; -- PN397791/d
7065
7066
7067 UPDATE PROFILE_SERVICE_ADV_CHARGE -- Feature 276992
7068 SET PENDING_FLAG = NULL
7069 WHERE CO_ID = pionContractId
7070 AND SNCODE = xcrService.SNCODE
7071 AND PROFILE_ID = xcrService.PROFILE_ID;
7072
7073 UPDATE CONTR_SERVICES_CAP
7074 --SET CS_ACTIV_DATE = SYSDATE,
7075 SET CS_ACTIV_DATE = piodActionDate,
7076 BCCODE = DECODE(PENDING_BCCODE, NULL, BCCODE, PENDING_BCCODE), -- OUL 272051 PENDING_BCCODE,
7077 PENDING_BCCODE = NULL,
7078 REC_VERSION = REC_VERSION + 1
7079 WHERE CO_ID = pionContractId
7080 AND SNCODE = xcrService.SNCODE
7081 AND PROFILE_ID = xcrService.PROFILE_ID
7082 AND CS_ACTIV_DATE IS NULL
7083 AND CS_REQUEST = pionRequest;
7084 /*
7085 ** This error check is not possible because of services
7086 ** without assigned directory numbers!
7087 IF SQL%ROWCOUNT = 0 THEN
7088 gosErrorText := 'Finish_ServiceControl: ' ||
7089 'no entry in CONTR_SERVICES_CAP found';
7090 RAISE geoApplicationError;
7091 END IF;
7092 **
7093 */
7094 UPDATE CONTR_SERVICES_PORT
7095 SET CSP_ACTIVE_DATE = piodActionDate,
7096 CSP_STATUS = 'A',
7097 REC_VERSION = REC_VERSION + 1
7098 WHERE CO_ID = pionContractId
7099 AND SNCODE = xcrService.SNCODE
7100 AND PROFILE_ID = xcrService.PROFILE_ID
7101 AND CSP_REQUEST = pionRequest;
7102 IF SQL%ROWCOUNT > 0 THEN
7103 lonPortsFound := SQL%ROWCOUNT;
7104 -- insert entry
7105 BEGIN
7106 INSERT INTO CONTR_VAS( CO_ID, SNCODE, QUANTITY,
7107 VALIDFROM, SEQNO,
7108 PROFILE_ID)
7109 SELECT pionContractId, xcrService.SNCODE, lonPortsFound,
7110 piodEffectiveDate, NVL(MAX(SEQNO), 0)+1,
7111 xcrService.PROFILE_ID
7112 FROM CONTR_VAS
7113 WHERE CO_ID = pionContractId
7114 AND SNCODE = xcrService.SNCODE
7115 AND PROFILE_ID = xcrService.PROFILE_ID;
7116 EXCEPTION
7117 WHEN OTHERS THEN
7118 RAISE_APPLICATION_ERROR(
7119 -20001,
7120 'Package Contract: Insert into CONTR_VAS failed. Error: ' ||
7121 SQLERRM);
7122 END;
7123 END IF;
7124
7125 IF pionActionId = 12 THEN
7126 SELECT SEQNO, DN_ID
7127 INTO lonSeqCSC, lonDN_ID
7128 FROM CONTR_SERVICES_CAP
7129 WHERE CO_ID = pionContractId
7130 AND SNCODE = xcrService.SNCODE
7131 AND PROFILE_ID = xcrService.PROFILE_ID
7132 AND CS_REQUEST = pionRequest;
7133
7134 UPDATE CONTR_SERVICES_CAP
7135 SET CS_DEACTIV_DATE = piodActionDate,
7136 PENDING_BCCODE = NULL,
7137 REC_VERSION = REC_VERSION + 1
7138 WHERE CO_ID = pionContractId
7139 AND PROFILE_ID = xcrService.PROFILE_ID
7140 AND SNCODE = xcrService.SNCODE
7141 AND DN_ID = lonDN_ID
7142 AND SEQNO = lonSeqCSC - 1;
7143 END IF;
7144 Cug.Finish_Service_Request(pionRequest, pionContractId, xcrService.SNCODE, 21,xcrService.Profile_ID);
7145 -- Feature 52832 Begin (Defect 70610)
7146 -- update value generated from switch
7147 UPD_RESPONSE_VAL_FR_SWITCH (pionRequest, pionContractId );
7148 -- Feature 52832 End
7149 ELSE -- Reactivation
7150
7151 -- Begin defect 219179:vov Add IF.. for the check date
7152 IF xcrService.VALID_FROM_DATE IS NULL
7153 THEN
7154 UPDATE PR_SERV_STATUS_HIST
7155 SET VALID_FROM_DATE = piodEffectiveDate
7156 WHERE CURRENT OF locServices;
7157 END IF;
7158
7159 Cug.Finish_Service_Request(pionRequest, pionContractId, xcrService.SNCODE, 21, xcrService.Profile_ID); /*OUL PN 291179*/
7160
7161 UPDATE PROFILE_SERVICE
7162 SET STATUS_HISTNO = xcrService.HISTNO
7163 WHERE CO_ID = pionContractId
7164 AND SNCODE = xcrService.SNCODE
7165 AND PROFILE_ID = xcrService.PROFILE_ID;
7166
7167 UPDATE CONTR_SERVICES_CAP
7168 SET BCCODE = DECODE(PENDING_BCCODE, NULL, BCCODE, PENDING_BCCODE), -- OUL 272051 PENDING_BCCODE,
7169 PENDING_BCCODE = NULL,
7170 REC_VERSION = REC_VERSION + 1
7171 WHERE CO_ID = pionContractId
7172 AND SNCODE = xcrService.SNCODE
7173 AND PROFILE_ID = xcrService.PROFILE_ID
7174 AND CS_REQUEST = pionRequest;
7175
7176 IF pionActionId IN (8)
7177 THEN
7178 UPDATE CONTR_SERVICES_CAP
7179 SET CS_ACTIV_DATE = piodActionDate
7180 WHERE CO_ID = pionContractId
7181 AND SNCODE = xcrService.SNCODE
7182 AND PROFILE_ID = xcrService.PROFILE_ID
7183 AND CS_REQUEST = pionRequest
7184 AND CS_ACTIV_DATE IS NULL;
7185 -- during rate plan or service package change deactivated services can be reactivated in a new service package. Hence the service package history must be updated as well.
7186 FOR xcrServicesSPCODE IN locServiceSPCODE (xcrService.SNCODE,xcrService.PROFILE_ID ) LOOP
7187 UPDATE PROFILE_SERVICE
7188 SET SPCODE_HISTNO = xcrServicesSPCODE.HISTNO
7189 WHERE CO_ID = pionContractId
7190 AND PROFILE_ID = xcrService.PROFILE_ID
7191 AND SNCODE = xcrService.SNCODE;
7192
7193 UPDATE PR_SERV_SPCODE_HIST SET VALID_FROM_DATE = piodEffectiveDate
7194 WHERE CURRENT OF locServiceSPCODE;
7195 END LOOP;
7196 END IF;
7197
7198 END IF;
7199
7200
7201 UPDATE CONTR_SERVICES_CAP
7202 SET PENDING_BCCODE = NULL,
7203 REC_VERSION = REC_VERSION + 1
7204 WHERE CO_ID = pionContractId
7205 AND SNCODE = xcrService.SNCODE
7206 AND PROFILE_ID = xcrService.PROFILE_ID
7207 AND CS_REQUEST = pionRequest;
7208
7209 ELSIF xcrService.STATUS = cosStatusDeactivate THEN -- erase service
7210 UPDATE PR_SERV_STATUS_HIST
7211 --SET VALID_FROM_DATE =SYSDATE
7212 SET VALID_FROM_DATE = piodEffectiveDate
7213 WHERE CURRENT OF locServices;
7214
7215 UPDATE PROFILE_SERVICE
7216 SET STATUS_HISTNO = xcrService.HISTNO
7217 WHERE CO_ID = pionContractId
7218 AND PROFILE_ID = xcrService.PROFILE_ID
7219 AND SNCODE = xcrService.SNCODE;
7220
7221 FOR xcrServicesExportCAP IN locServicesExportCAP (xcrService.SNCODE,xcrService.PROFILE_ID ) LOOP
7222 IF SQL%ROWCOUNT > 0 THEN
7223 IF xcrServicesExportCAP.DN_STATUS_REQU IN ('o') THEN
7224 RetentionDNofContract(pionContractId,xcrService.SNCODE,xcrService.PROFILE_ID,pionRequest);
7225
7226 UPDATE PROFILE_SERVICE
7227 SET DELETE_FLAG = 'X'
7228 WHERE CO_ID = pionContractId
7229 AND PROFILE_ID = xcrService.PROFILE_ID
7230 AND SNCODE = xcrService.SNCODE;
7231 END IF;
7232 END IF;
7233 END LOOP;
7234
7235 UPDATE CONTR_SERVICES_CAP
7236 SET PENDING_BCCODE = NULL,
7237 REC_VERSION = REC_VERSION + 1
7238 WHERE CO_ID = pionContractId
7239 AND SNCODE = xcrService.SNCODE
7240 AND PROFILE_ID = xcrService.PROFILE_ID
7241 AND CS_REQUEST = pionRequest;
7242
7243 UPDATE CONTR_SERVICES_PORT
7244 SET CSP_DEACTIVE_DATE = DECODE(CSP_DEACTIVE_DATE, NULL,
7245 piodEffectiveDate, CSP_DEACTIVE_DATE),
7246 CSP_STATUS = 'R',
7247 REC_VERSION = REC_VERSION + 1
7248 WHERE CO_ID = pionContractId
7249 AND SNCODE = xcrService.SNCODE
7250 AND PROFILE_ID = xcrService.PROFILE_ID
7251 AND CSP_STATUS IN ('A', 'D');
7252
7253 --- search for related VPN-Access services
7254 FOR loRec_Cur_locVPN_Access IN locVPN_Access(pionContractId,
7255 xcrService.SNCODE,pionRequest) LOOP
7256 --- found an related Access-Service, so update the date for the request
7257 UPDATE CONTR_SERVICES_CAP
7258 SET PENDING_BCCODE = NULL,
7259 CS_DEACTIV_DATE = piodEffectiveDate,
7260 REC_VERSION=REC_VERSION+1
7261 WHERE PUBLIC_NUMBER_DN_ID=loRec_Cur_locVPN_Access.DN_ID
7262 AND CS_REQUEST=pionRequest;
7263 END LOOP; --- of cursor locVPN_Access to search for linked VPN_Access Service
7264
7265 IF SQL%ROWCOUNT > 0 THEN
7266 -- duplicate last entry in CONTR_VAS for this service
7267 DuplicateContrVasEntry( pionContractId, xcrService.SNCODE,
7268 ---SQL%ROWCOUNT,xcrService.PROFILE_ID );
7269 -SQL%ROWCOUNT,xcrService.PROFILE_ID, pionRequest );
7270 END IF;
7271
7272 -- 00361954, MCH: replaced '=' by 'IN' in 'WHERE DN_ID =...'
7273 UPDATE DIRECTORY_NUMBER
7274 SET DN_STATUS = DN_STATUS_REQU,
7275 DN_STATUS_MOD_DATE = SYSDATE,
7276 DN_STATUS_REQU = NULL,
7277 DN_MODDATE = SYSDATE,
7278 REC_VERSION = REC_VERSION + 1
7279 WHERE DN_ID IN (SELECT DN_ID
7280 FROM CONTR_SERVICES_CAP
7281 WHERE CO_ID = pionContractId AND
7282 SNCODE = xcrService.SNCODE AND
7283 CS_REQUEST = pionRequest) AND
7284 DN_STATUS_REQU = 'o';
7285
7286 ELSE -- unkown status
7287 gosErrorText := 'Finish_ServiceControl: ' ||
7288 'Unkown Pending state (' ||
7289 xcrService.STATUS || ') ' ||
7290 'in CONTR_SERVICES';
7291 RAISE geoApplicationError;
7292 END IF;
7293 END LOOP; -- Services
7294
7295
7296 /*
7297 * No activation or deactivation? Now process all other actions.
7298 *
7299 * BLI:
7300 * The following code was originally inside previous loop, but it required
7301 * an entry with status 'P' in PR_SERV_STATUS_HIST. Such entries were not
7302 * created from CA (CAS ? Targys ?). So this entry should be optional.
7303 *
7304 * If the previous loop process any row, we can do these actions. Before this fix
7305 * the following code was inside previous loop in an 'ELSEIF' construct - if it is
7306 * executed, when (new) locServices returns no row, it should be compatible.
7307 */
7308 IF lobServicesFound = FALSE
7309 THEN
7310 -- loop over ALL services - not only services having REQUEST in PR_SERV_STATUS_HIST...
7311 FOR xcrService IN locAllServices
7312 LOOP
7313 IF pionActionId IN (11, 12, 23) THEN -- Parameter change
7314 UPDATE CONTR_SERVICES_CAP
7315 SET BCCODE = DECODE(PENDING_BCCODE, NULL, BCCODE, PENDING_BCCODE), -- OUL 272051 PENDING_BCCODE,
7316 PENDING_BCCODE = NULL,
7317 CS_ACTIV_DATE = DECODE( CS_ACTIV_DATE, NULL, piodActionDate, CS_ACTIV_DATE),
7318 REC_VERSION = REC_VERSION + 1
7319 WHERE CO_ID = pionContractId
7320 AND SNCODE = xcrService.SNCODE
7321 AND PROFILE_ID = xcrService.PROFILE_ID
7322 AND CS_REQUEST = pionRequest;
7323 -- correct counter of updated rows
7324 lonRowcount := lonRowCount+SQL%ROWCOUNT;
7325 Cug.Finish_Service_Request(pionRequest, pionContractId,
7326 xcrService.SNCODE, pionActionId,xcrService.PROFILE_ID);
7327 -- We don't know, if the CUG was changed.
7328 -- => Any problem should be raised within CUG.Finish_Service_Request()
7329 -- => Otherwise the CUG change request is processed successfully.
7330 IF pionActionId = 23 THEN
7331 lonRowcount := lonRowCount+1;
7332
7333 ELSIF pionActionId IN (11) THEN
7334 CHANGE_DOMAIN_STATUS(pionRequest ,pionContractId , cosStatusParameter, pionActionId );
7335 REMOVE_UNIQUE_VALUE(pionRequest ,pionContractId,cosStatusParameter, pionActionId );
7336
7337 END IF;
7338 ELSE
7339 lobDNumFound := FALSE;
7340 IF pionActionId IN (14001, 14002, 14003, 22) THEN -- deactivate port or directory number or CUG
7341 -- Start Feature 44216 MBE: Do RetentionDirectoryNumber in loop (always)
7342 -- fetch directory number information
7343 FOR xcrServicesCAP IN locServicesCAP (xcrService.SNCODE,xcrService.PROFILE_ID ) LOOP
7344 lobDNumFound := TRUE;
7345 RetentionDirectoryNumber( xcrServicesCAP.DN_ID, NULL,
7346 xcrServicesCAP.DN_BLOCK_ID, pionRequest);
7347 IF xcrServicesCAP.ADDITIONAL_FLAG = 'O' THEN -- this is a charging system numbering plan number, removed within the last phase of number plan change
7348 -- enter this row as predecessor of the new number and nullify additional flag
7349 UPDATE CONTR_SERVICES_CAP SET ADDITIONAL_FLAG=null, SEQNO_PRE= NVL(SEQNO_PRE, DECODE(ADDITIONAL_FLAG,'N',xcrServicesCAP.SEQNO,null))
7350 WHERE CO_ID=pionContractId AND SNCODE=xcrService.SNCODE AND PROFILE_ID=xcrService.PROFILE_ID;
7351 END IF;
7352 END LOOP;
7353
7354 IF lobDNumFound THEN
7355 UPDATE CONTR_SERVICES_CAP
7356 SET CS_DEACTIV_DATE = piodEffectiveDate,
7357 REC_VERSION = REC_VERSION + 1
7358 WHERE CO_ID = pionContractId
7359 AND SNCODE = xcrService.SNCODE
7360 AND PROFILE_ID = xcrService.PROFILE_ID
7361 AND CS_REQUEST = pionRequest;
7362 -- correct counter of updated rows
7363 lonRowcount := lonRowCount+SQL%ROWCOUNT;
7364 ELSE -- Dnum not found
7365 UPDATE CONTR_SERVICES_PORT
7366 SET CSP_DEACTIVE_DATE = piodEffectiveDate,
7367 CSP_STATUS = 'D',
7368 REC_VERSION = REC_VERSION + 1
7369 WHERE CO_ID = pionContractId
7370 AND SNCODE = xcrService.SNCODE
7371 AND PROFILE_ID = xcrService.PROFILE_ID
7372 AND CSP_REQUEST = pionRequest;
7373 -- correct counter of updated rows
7374 lonLastRowcount := SQL%ROWCOUNT;
7375 IF lonLastRowcount > 0 THEN
7376 -- correct counter of updated rows
7377 lonRowcount := lonRowCount+lonLastRowcount;
7378 -- duplicate last entry in CONTR_VAS for this service
7379 DuplicateContrVasEntry( pionContractId,
7380 xcrService.SNCODE, -SQL%ROWCOUNT,xcrService.PROFILE_ID,pionRequest );
7381 ELSE -- Port not found
7382 Cug.Finish_Service_Request(pionRequest, pionContractId,
7383 xcrService.SNCODE, pionActionId,xcrService.PROFILE_ID);
7384 -- We don't know, if the CUG was changed.
7385 -- => Any problem should be raised within CUG.Finish_Service_Request()
7386 -- => Otherwise the CUG change request is processed successfully.
7387 IF pionActionId = 22 THEN
7388 lonRowcount := lonRowCount+1;
7389 END IF;
7390 END IF;
7391 END IF; -- lobDNumFount
7392 ELSIF pionActionId IN (13001, 13002, 13003, 21) THEN -- activate port or directory number
7393 -- Start Feature 44216 MBE: Finish_BlockNumberSplitting in loop
7394 -- fetch directory number information
7395 FOR xcrServicesCAP IN locServicesCAP (xcrService.SNCODE,xcrService.PROFILE_ID) LOOP
7396 lobDNumFound := TRUE;
7397 IF xcrServicesCAP.DN_BLOCK_ID IS NOT NULL THEN
7398 Finish_BlockNumberSplitting( xcrServicesCAP.DN_ID, pionRequest);
7399 END IF;
7400
7401 END LOOP;
7402 -- END Feature 44216 MBE
7403 IF lobDNumFound THEN
7404 UPDATE CONTR_SERVICES_CAP
7405 SET CS_ACTIV_DATE = piodActionDate,
7406 BCCODE = DECODE(PENDING_BCCODE, NULL, BCCODE, PENDING_BCCODE), -- OUL 272051 PENDING_BCC,
7407 PENDING_BCCODE = NULL,
7408 REC_VERSION = REC_VERSION + 1
7409 WHERE CO_ID = pionContractId
7410 AND SNCODE = xcrService.SNCODE
7411 AND PROFILE_ID = xcrService.PROFILE_ID
7412 AND CS_REQUEST = pionRequest;
7413 lonRowcount := lonRowCount+SQL%ROWCOUNT;
7414
7415 ELSE -- Dnum not found
7416 lonPortsFound := 0;
7417 -- fetch port information
7418 FOR xcrServicesPort IN locServicesPort (xcrService.SNCODE,
7419 xcrService.PROFILE_ID ) LOOP
7420 IF xcrServicesPort.CSP_STATUS IS NULL THEN -- First activation
7421 UPDATE CONTR_SERVICES_PORT
7422 SET CSP_ACTIVE_DATE = piodActionDate,
7423 CSP_STATUS = 'A',
7424 REC_VERSION = REC_VERSION + 1
7425 WHERE CO_ID = pionContractId
7426 AND SNCODE = xcrService.SNCODE
7427 AND PROFILE_ID = xcrService.PROFILE_ID
7428 AND CSP_SEQNO = xcrServicesPort.CSP_SEQNO
7429 AND CSP_REQUEST = pionRequest;
7430 ELSE -- Reactivation
7431 DuplicateServPortEntry( pionContractId,
7432 pionRequest,
7433 xcrService.SNCODE,
7434 xcrServicesPort.CSP_SEQNO,xcrService.PROFILE_ID);
7435 END IF; -- CSP_STATUS check
7436 lonPortsFound := lonPortsFound + 1;
7437 END LOOP;
7438 IF lonPortsFound > 0 THEN
7439 -- correct counter of updated rows
7440 lonRowcount := lonRowCount+lonPortsFound;
7441 -- duplicate last entry in CONTR_VAS for this service
7442 DuplicateContrVasEntry( pionContractId,
7443 xcrService.SNCODE, +lonPortsFound ,xcrService.PROFILE_ID, pionRequest);
7444 ELSE
7445 Cug.Finish_Service_Request( pionRequest, pionContractId,
7446 xcrService.SNCODE, pionActionId,xcrService.PROFILE_ID);
7447 -- We don't know, if the CUG was changed.
7448 -- => Any problem should be raised within CUG.Finish_Service_Request()
7449 -- => Otherwise the CUG change request is processed successfully.
7450 IF pionActionId = 21 THEN
7451 lonRowcount := lonRowCount+1;
7452 END IF;
7453 END IF; -- lonPortsFound
7454 END IF; -- lobDNumFount
7455 END IF; -- ActionId IN (13001, 13002, 13003, 21)
7456 END IF; -- ActionId IN (11, 12, 23)
7457
7458 END LOOP; -- locAllServices
7459 -- There was ANY change
7460 IF lonRowCount != 0 THEN
7461 lobServicesFound := TRUE;
7462 END IF;
7463 END IF; -- lobServicesFound = FALSE
7464
7465 IF lobServicesFound = FALSE
7466 AND NOT (lonRowCount = 0 AND pionActionID IN (16,13003,14003,21,22,23)) /* PN00218997, Andreas Billo, 10-JAN-2002 */
7467 THEN
7468 gosErrorText := 'Finish_ServiceControl: ' ||
7469 'No services found for this contract. ' ||
7470 'May be this is not the latest request ' ||
7471 'or the pending state is NULL';
7472 RAISE geoApplicationError;
7473 END IF;
7474END Finish_ServiceControl;
7475/*
7476** =====================================================================
7477**
7478** Procedure: Finish_Deactivate
7479** Modified: Feature 52832 12-Nov-1999 Added a new parameter ActionId
7480** #UMTS# 82630
7481** =====================================================================
7482*/
7483PROCEDURE Finish_Deactivate (
7484 pionRequest IN CONTRACT_HISTORY.request%TYPE,
7485 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
7486 pionActionId IN MDSRRTAB.action_id%TYPE)
7487IS
7488-- Cursor to get the current pending status
7489 CURSOR locStatus IS
7490 SELECT CH_STATUS
7491 FROM CONTRACT_HISTORY
7492 WHERE CO_ID = pionContractId
7493 AND REQUEST = pionRequest
7494 AND CH_PENDING = cosMarkPending;
7495 -- Cursor for all assigned devices
7496 CURSOR locDevices IS
7497 SELECT PORT_ID,CD_PLCODE,CD_SM_NUM, DN_ID, CD_ID /* DN_ID, CD_ID new with F402782 */
7498 FROM CONTR_DEVICES
7499 WHERE CO_ID = pionContractId
7500 AND CD_PENDING_STATE = cosStatusDeactivate
7501 FOR UPDATE;
7502 -- feature 201959_plsql begin
7503 losPortOwner VARCHAR2(2);
7504 lonSccode INTEGER;
7505 lobSMDriven BOOLEAN;
7506 loiSmId INTEGER;
7507 -- 201959_plsql end
7508 -- Pending status from CONTRACT_HISTORY
7509 losStatus CONTRACT_HISTORY.ch_status%TYPE;
7510
7511 -- TRUE if entry in CONTRACT_HISTORY
7512 lobPendingExist BOOLEAN;
7513 /* 22-Feb-2001 HirschA, begin feature 84834 */
7514 CURSOR locContractLinkType IS
7515 SELECT CO_REL_TYPE
7516 FROM CONTRACT_ALL
7517 WHERE CO_ID = pionContractId;
7518 losCoLinkType CONTRACT_ALL.CO_REL_TYPE%TYPE;
7519 /* end feature 84834 */
7520 CURSOR locStatusHist IS
7521 SELECT SNCODE, PROFILE_ID, HISTNO, VALID_FROM_DATE
7522 FROM PR_SERV_STATUS_HIST
7523 WHERE CO_ID = pionContractId
7524 AND REQUEST_ID = pionRequest
7525 -- AVAVAV112233
7526 -- begin 00268950_plsql/d, AV
7527 AND VALID_FROM_DATE IS NULL
7528 -- end 00268950_plsql/d
7529 FOR UPDATE;
7530
7531 /*OUL 243952 begin*/
7532 -- avoid selecting the current entry, that entry has to be patched to desired state
7533 CURSOR locStatusPVASHist IS
7534 SELECT DISTINCT h.SNCODE, h.PROFILE_ID,p.STATUS_HISTNO
7535 FROM PR_SERV_STATUS_HIST h,PROFILE_SERVICE p
7536 WHERE h.CO_ID = pionContractId and p.co_id=h.co_id and p.SNCODE=h.SNCODE and p.PROFILE_ID= h.PROFILE_ID
7537 AND TRUNC(h.VALID_FROM_DATE,'DD') > TRUNC(SYSDATE,'DD');
7538
7539 lonPVasHistNO PR_SERV_STATUS_HIST.HISTNO%TYPE := 0;
7540 losPVasStatus PR_SERV_STATUS_HIST.STATUS%TYPE := '';
7541 /*OUL 243952 end*/
7542
7543 -- F83834 #AL# ENU S02 15-APR-2001 start
7544 lonMainCoId CONTRACT_ALL.CO_ID%TYPE;
7545 lonRelatedContracts NUMBER;
7546 -- F83834 #AL# ENU S02 15-APR-2001 end
7547 /* begin defect 203433 */
7548 piodEffectiveDate DATE;
7549
7550BEGIN
7551 piodEffectiveDate := GetEffectiveDate(pionRequest);
7552 /* end defect 203433 */
7553 DBMS_OUTPUT.put_line('--> Finish_Deactivate: Request: ' || pionRequest ||
7554 ' ContractId: ' || pionContractId );
7555 /*
7556 ** Get the status of the pending entry.
7557 ** If no pending entry exits raise an error!
7558 */
7559 OPEN locStatus;
7560 FETCH locStatus
7561 INTO losStatus;
7562 lobPendingExist := locStatus%FOUND;
7563 CLOSE locStatus;
7564 IF lobPendingExist = FALSE THEN
7565 gosErrorText := 'Finish_Deactivate: ' ||
7566 'No Pending entry in CONTRACT_HISTORY for Contract' ||
7567 pionContractId;
7568 RAISE geoApplicationError;
7569 END IF;
7570 /*
7571 ** Now we can finish the deactivation. For this
7572 ** we must decide if it is a 'suspension' or a
7573 ** 'deactivation'.
7574 */
7575 IF losStatus = cosStatusSuspension THEN
7576 FinishPendingContract(pionContractId,pionRequest);
7577
7578 FOR xcrProfileServices IN locStatusHist LOOP
7579 UPDATE PROFILE_SERVICE
7580 SET STATUS_HISTNO = xcrProfileServices.HISTNO
7581 WHERE CO_ID = pionContractId
7582 AND PROFILE_ID = xcrProfileServices.PROFILE_ID
7583 AND SNCODE = xcrProfileServices.SNCODE;
7584
7585 UPDATE PR_SERV_STATUS_HIST
7586 /* begin defect 203433 */
7587 --SET VALID_FROM_DATE = SYSDATE
7588 SET VALID_FROM_DATE = piodEffectiveDate
7589 /* end defect 203433 */
7590 WHERE CURRENT OF locStatusHist;
7591 END LOOP;
7592
7593 /*OUL 243952 begin*/
7594 FOR xcrProfilePVASServices IN locStatusPVASHist LOOP
7595 lonPVasHistNO := 0; losPVasStatus := '';
7596 -- delete all future dated status changes
7597 DELETE PR_SERV_STATUS_HIST
7598 WHERE CO_ID = pionContractId
7599 AND PROFILE_ID = xcrProfilePVASServices.PROFILE_ID
7600 AND SNCODE = xcrProfilePVASServices.SNCODE
7601 AND TRUNC(VALID_FROM_DATE,'DD') > DECODE(piodEffectiveDate, NULL, TRUNC(SYSDATE,'DD'),
7602 TRUNC(piodEffectiveDate,'DD'));
7603 -- now patch the last future dated status change to
7604 -- fetch max HISTNO
7605 SELECT HISTNO, STATUS
7606 INTO lonPVasHistNO, losPVasStatus
7607 FROM PR_SERV_STATUS_HIST
7608 WHERE CO_ID = pionContractId -- 273039/d
7609 AND PROFILE_ID = xcrProfilePVASServices.PROFILE_ID -- 273039/d
7610 AND SNCODE = xcrProfilePVASServices.SNCODE -- 273039/d
7611 AND HISTNO = (SELECT MAX(HISTNO) FROM PR_SERV_STATUS_HIST
7612 WHERE CO_ID = pionContractId
7613 AND PROFILE_ID = xcrProfilePVASServices.PROFILE_ID
7614 AND SNCODE = xcrProfilePVASServices.SNCODE);
7615 -- if status not 'S' (in this case already done by request id)
7616 -- then update PROFILE_SERVICE.STATUS_HISTNO
7617 IF LOWER(losPVasStatus) != cosStatusSuspension AND lonPVasHistNO > 0
7618 THEN
7619 UPDATE PROFILE_SERVICE
7620 SET STATUS_HISTNO = lonPVasHistNO
7621 WHERE CO_ID = pionContractId
7622 AND PROFILE_ID = xcrProfilePVASServices.PROFILE_ID
7623 AND SNCODE = xcrProfilePVASServices.SNCODE;
7624 END IF;
7625 END LOOP;
7626 /*OUL 243952 end*/
7627
7628 UPDATE CONTR_SERVICES_CAP
7629 SET PENDING_BCCODE = NULL,
7630 REC_VERSION = REC_VERSION + 1
7631 WHERE CO_ID = pionContractID
7632 AND PENDING_BCCODE IS NOT NULL;
7633 ELSIF losStatus = cosStatusDeactivate THEN
7634 -- 00341416_plsql even for takeover finish now pending contract, use valid from from request
7635 FinishPendingContract(pionContractId, pionRequest); -- OUL 250804 add pionRequest
7636
7637 FOR xcrProfileServices IN locStatusHist LOOP
7638 UPDATE PROFILE_SERVICE
7639 SET STATUS_HISTNO = xcrProfileServices.HISTNO
7640 WHERE CO_ID = pionContractId
7641 AND PROFILE_ID = xcrProfileServices.PROFILE_ID
7642 AND SNCODE = xcrProfileServices.SNCODE;
7643
7644 UPDATE PR_SERV_STATUS_HIST
7645 /* begin defect 203433 */
7646 --SET VALID_FROM_DATE = SYSDATE
7647 SET VALID_FROM_DATE = piodEffectiveDate
7648 /* end defect 203433 */
7649 WHERE CURRENT OF locStatusHist;
7650 END LOOP;
7651
7652 /*OUL 243952 begin*/
7653 FOR xcrProfilePVASServices IN locStatusPVASHist LOOP
7654 lonPVasHistNO := 0; losPVasStatus := '';
7655 -- delete all feature dated status changes
7656 DELETE PR_SERV_STATUS_HIST
7657 WHERE CO_ID = pionContractId
7658 AND PROFILE_ID = xcrProfilePVASServices.PROFILE_ID
7659 AND SNCODE = xcrProfilePVASServices.SNCODE
7660 AND HISTNO<> xcrProfilePVASServices.STATUS_HISTNO
7661 AND TRUNC(VALID_FROM_DATE,'DD') > DECODE(piodEffectiveDate, NULL, TRUNC(SYSDATE,'DD'),
7662 TRUNC(piodEffectiveDate,'DD'));
7663
7664 -- patch the last entry to deactive
7665 UPDATE PR_SERV_STATUS_HIST
7666 SET STATUS = 'D',VALID_FROM_DATE=piodEffectiveDate,ENTRY_DATE=SYSDATE, REQUEST_ID=pionRequest
7667 WHERE CO_ID = pionContractId
7668 AND PROFILE_ID = xcrProfilePVASServices.PROFILE_ID
7669 AND SNCODE = xcrProfilePVASServices.SNCODE
7670 AND HISTNO = xcrProfilePVASServices.STATUS_HISTNO;
7671 END LOOP;
7672 /*OUL 243952 end*/
7673
7674 /* begin defect 203433 */
7675 --RetentionDNofContract( pionContractId );
7676 RetentionDNofContract( pionContractId, NULL, NULL, pionRequest );
7677 /* end defect 203433 */
7678 -- Even if a Service was already deactivated we must perform a
7679 -- retention for the assigned directory number. During a deactivation
7680 -- of a single service no directory number retention is done,
7681 -- because it must be possible to reactive the service!
7682 -- feature 201959_plsql begin
7683 SELECT SCCODE INTO lonSccode FROM CONTRACT_ALL WHERE CO_ID = pionContractId;
7684 IF RequestMarketType(lonsccode) = conStorMedDriven THEN
7685 lobSMDriven := TRUE;
7686 END IF;
7687 -- 201959_plsql end
7688
7689 FOR xcrDevices IN locDevices LOOP
7690 /* F402782 - Begin */
7691 IF lobSMDriven = TRUE THEN
7692 IF ( xcrDevices.DN_ID IS NOT NULL) AND (xcrDevices.CD_ID != 0) THEN
7693 UPDATE DIRECTORY_NUMBER
7694 SET DN_STATUS = 'f'
7695 WHERE DN_ID = xcrDevices.DN_ID;
7696 END IF;
7697 END IF;
7698 /* F402782 - end */
7699
7700 UPDATE CONTR_DEVICES
7701 SET CD_PENDING_STATE = NULL,
7702 /* begin defect 203433 */
7703 --CD_DEACTIV_DATE = SYSDATE,
7704 /* Feature 402782: Delete reference to phantom MSISDN */
7705 DN_ID = NULL,
7706 CD_DEACTIV_DATE = piodEffectiveDate,
7707 REC_VERSION = REC_VERSION + 1
7708 WHERE CURRENT OF locDevices;
7709
7710 /* 22-Feb-2001 HirschA, begin feature 84834 */
7711 /*Alternate Line: Get contract type (Regular='', Main='M', AL='R') */
7712 OPEN locContractLinkType;
7713 FETCH locContractLinkType
7714 INTO losCoLinkType;
7715 CLOSE locContractLinkType;
7716 -- D00205334 ENU 08-JUN-2001 start
7717 -- IF losCoLinkType != 'R' -- process only regular and Main contracts
7718 IF losCoLinkType IS NULL OR losCoLinkType = 'M' THEN -- process only regular and Main contracts
7719 -- D00205334 ENU 08-JUN-2001 start
7720 /* end feature 84834 */
7721 -- no retention for takeover
7722 IF (pionActionId <> 59 AND pionActionId <> 15002) THEN
7723 IF xcrDevices.PORT_ID IS NOT NULL THEN
7724 /* begin defect 203433 */
7725 RetentionPort(xcrDevices.PORT_ID, NULL, pionRequest);
7726 /* end defect 203433 */
7727 ELSE
7728 /* begin defect 203433 */
7729 RetentionPortsOfContract(pionContractId, NULL, pionRequest);
7730 /* end defect 203433 */
7731 END IF;
7732 -- feature 201959_plsql begin
7733 IF xcrDevices.PORT_ID IS NOT NULL THEN
7734 SELECT PORT_OWNER INTO losPortOwner
7735 FROM MPDHLTAB HL, PORT P
7736 WHERE HL.HLCODE = P.HLCODE
7737 AND P.PORT_ID = xcrDevices.PORT_ID;
7738 END IF;
7739 -- IF NOT losPortOwner = 'SM' AND lobSMDriven -- PN 337157 oseboldf 09-Nov-2009
7740 IF (losPortOwner IS NULL OR losPortOwner != 'SM') AND lobSMDriven THEN
7741 SELECT SM_ID INTO loiSmId FROM PORT WHERE PORT_ID = xcrDevices.PORT_ID;
7742 /* begin defect 215073 */
7743 IF loiSmId IS NULL THEN
7744 SELECT sm_id INTO loiSmId FROM STORAGE_MEDIUM
7745 WHERE PLCODE = xcrDevices.CD_PLCODE
7746 AND SM_SERIALNUM = xcrDevices.CD_SM_NUM;
7747 END IF;
7748 /* end defect 215073 */
7749 /* begin defect 203433 */
7750 --RetentionStorageMedium(loiSmId);
7751 RetentionStorageMedium(loiSmId, NULL, pionRequest);
7752 /* end defect 203433 */
7753 END IF;
7754 END IF;
7755 -- 201959_plsql end
7756 -- F83834 #AL# ENU S02 15-APR-2001 start
7757 ELSE
7758 -- a related contract is deactivated
7759 -- get the main contract ID
7760 SELECT MAIN_CO_ID
7761 INTO lonMainCoId
7762 FROM CONTRACT_RELATION
7763 WHERE REL_CO_ID = pionContractId;
7764 -- remove the link
7765 DELETE FROM CONTRACT_RELATION
7766 WHERE REL_CO_ID = pionContractId;
7767 -- check how many related contracts remain
7768 SELECT COUNT(*)
7769 INTO lonRelatedContracts
7770 FROM CONTRACT_RELATION
7771 WHERE MAIN_CO_ID = lonMainCoId;
7772 IF lonRelatedContracts = 0 THEN
7773 -- modify contract type of main contract
7774 UPDATE CONTRACT_ALL
7775 SET CO_REL_TYPE = NULL,
7776 REC_VERSION = REC_VERSION + 1
7777 WHERE CO_ID = lonMainCoId;
7778 END IF;
7779 -- F83834 #AL# ENU S02 15-APR-2001 end
7780 END IF; -- 22-Feb-2001 HirschA feature 84834
7781 END LOOP; -- Devices
7782
7783 /* change status of contracted ports in the case of contract takeover, PN 394315/d */
7784 IF pionActionId = 59 THEN
7785 UPDATE CONTR_SERVICES_PORT
7786 SET CSP_DEACTIVE_DATE = DECODE(CSP_DEACTIVE_DATE, NULL, piodEffectiveDate, CSP_DEACTIVE_DATE),
7787 CSP_STATUS = 'R',
7788 REC_VERSION = REC_VERSION + 1
7789 WHERE CO_ID = pionContractId
7790 AND CSP_REQUEST = pionRequest;
7791 END IF;
7792
7793 Cug.Finish_Deactivate( pionRequest, pionContractId );
7794
7795 -- Feature 52832 Begin
7796 -- Update resource like lists domain status to deactivate
7797 IF pionActionId IN (2,5) THEN
7798 CHANGE_DOMAIN_STATUS(pionRequest ,pionContractId , cosStatusDeactivate, pionActionId );
7799 REMOVE_UNIQUE_VALUE(pionRequest ,pionContractId, cosStatusDeactivate, pionActionId );
7800 END IF;
7801 -- Feature 52832 End
7802 ELSE -- unkown status
7803 gosErrorText := 'Finish_Deactivate: ' ||
7804 'Unkown Pending state (' || losStatus || ') ' ||
7805 'in CONTRACT_HISTORY for Contract' ||
7806 pionContractId;
7807 RAISE geoApplicationError;
7808 END IF;
7809END Finish_Deactivate;
7810/*
7811** =====================================================================
7812**
7813** Procedure: Finish_Activate
7814** #UMTS# 82630
7815** =====================================================================
7816*/
7817PROCEDURE Finish_Activate (
7818 pionRequest IN CONTRACT_HISTORY.request%TYPE,
7819 pionActionId IN MDSRRTAB.action_id%TYPE,
7820 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
7821 pionReqMar IN NUMBER)
7822IS
7823 CURSOR locStatusHist IS
7824 SELECT SNCODE, PROFILE_ID, HISTNO, VALID_FROM_DATE, REQUEST_ID
7825 FROM PR_SERV_STATUS_HIST PSSH
7826 WHERE CO_ID = pionContractId
7827 AND (REQUEST_ID = pionRequest OR REQUEST_ID IS NULL)
7828 -- Begin defect 217426
7829 -- AND VALID_FROM_DATE IS NULL
7830 -- End defect 217426
7831 --AND STATUS = UPPER(cosStatusActivate) --defect 00240066 KW
7832 /*defect 232426/d KW Begin*/
7833 -- Defect 257677 CWLEE: Do not forget to check the user profiles
7834 AND HISTNO = (SELECT MAX(g.histno) FROM PR_SERV_STATUS_HIST g
7835 WHERE g.co_id= PSSH.co_id AND g.sncode=PSSH.sncode AND g.PROFILE_ID = PSSH.PROFILE_ID)
7836 /*defect 232426/d KW END*/
7837 FOR UPDATE;
7838
7839 -- FEATURE 240721
7840 CURSOR locAttribHist IS
7841 SELECT SNCODE,
7842 PROFILE_ID,
7843 SERVICE_ATTRIB_HISTNO,
7844 REQUEST_ID
7845 FROM PR_SERV_ATTRIB_HIST
7846 WHERE CO_ID = pionContractId
7847 AND REQUEST_ID = pionRequest
7848 FOR UPDATE;
7849
7850 CURSOR locOnhold IS
7851 SELECT CO_ID
7852 FROM CONTRACT_ALL
7853 WHERE CO_ID = pionContractId
7854 AND CH_STATUS = cosStatusOnHold;
7855 -- Note: REQUEST is NULL for onhold contract ->
7856 -- do not use REQUEST in the where clause
7857 lonCoID NUMBER; -- dummy variable for into clause
7858 lobFirstActivation BOOLEAN;
7859 /* begin defect 203433 */
7860 piodActionDate DATE;
7861 piodEffectiveDate DATE;
7862
7863 lodtMinimumContractTime Date;
7864
7865 lonCount INTEGER;
7866
7867BEGIN
7868 piodActionDate := GetActionDate(pionRequest);
7869 piodEffectiveDate := GetEffectiveDate(pionRequest);
7870 /* end defect 203433 */
7871 DBMS_OUTPUT.put_line('--> Finish_Activate: Request: ' || pionRequest ||
7872 ' ContractId: ' || pionContractId || ' MarketType: ' || pionReqMar);
7873
7874 /*
7875 ** If an entry in CONTRACT_HISTORY with status 'onhold'
7876 ** exists, this is the first activation, otherwise it is
7877 ** a reactivation.
7878 */
7879
7880 OPEN locOnHold;
7881 FETCH locOnHold
7882 INTO lonCoId;
7883 lobFirstActivation := locOnHold%FOUND;
7884 CLOSE locOnHold;
7885 IF lobFirstActivation THEN
7886 -- first activation
7887 FOR xcrProfileServices IN locStatusHist LOOP
7888 UPDATE PROFILE_SERVICE
7889 SET STATUS_HISTNO = xcrProfileServices.HISTNO
7890 WHERE CO_ID = pionContractId
7891 AND PROFILE_ID = xcrProfileServices.PROFILE_ID
7892 AND SNCODE = xcrProfileServices.SNCODE;
7893
7894 -- defect 00222869_PLSQL KW
7895 /*UPDATE PR_SERV_STATUS_HIST
7896 -- begin defect 203433
7897 --SET VALID_FROM_DATE = SYSDATE
7898 SET VALID_FROM_DATE = piodEffectiveDate
7899 -- end defect 203433 */
7900 IF xcrProfileServices.VALID_FROM_DATE IS NOT NULL THEN
7901 UPDATE PR_SERV_STATUS_HIST
7902 SET VALID_FROM_DATE = xcrProfileServices.VALID_FROM_DATE
7903 WHERE CURRENT OF locStatusHist;
7904 ELSE
7905 UPDATE PR_SERV_STATUS_HIST
7906 SET VALID_FROM_DATE = piodEffectiveDate
7907 WHERE CURRENT OF locStatusHist;
7908 END IF;
7909 -- end defect 00222869_PLSQL KW
7910 END LOOP;
7911
7912
7913 --PN 00252584/d remove fix 00222838:Khv
7914
7915 -- 00341416_plsql even for takeover finish now pending contract, use valid from from request
7916 FinishPendingContract(pionContractId,pionRequest); -- OUL 250804 add pionRequest
7917
7918 UPDATE CONTR_SERVICES_CAP
7919 /* begin defect 203433 */
7920 --SET CS_ACTIV_DATE = SYSDATE,
7921 /*SET CS_ACTIV_DATE = piodActionDate,*/ /*Defect 229253 vovkvodav : piodActionDate replaced with piodEffectiveDate*/
7922 SET CS_ACTIV_DATE = piodEffectiveDate,
7923 /* end defect 203433 */
7924 BCCODE = DECODE(PENDING_BCCODE, NULL, BCCODE, PENDING_BCCODE), -- OUL 272051 PENDING_BCCODE,
7925 PENDING_BCCODE = NULL,
7926 REC_VERSION = REC_VERSION + 1
7927 WHERE CO_ID = pionContractId
7928 AND CS_REQUEST = pionRequest
7929 AND CS_DEACTIV_DATE IS NULL;
7930 UPDATE CONTR_DEVICES
7931 SET CD_PENDING_STATE = NULL,
7932 /* begin defect 203433 */
7933 --CD_ACTIV_DATE = SYSDATE,
7934 CD_ACTIV_DATE = piodEffectiveDate,
7935 REC_VERSION = REC_VERSION + 1
7936 WHERE CO_ID = pionContractID
7937 AND ( (CD_PENDING_STATE = cosStatusActivate) OR
7938 (RUNNING_NUMBER > -1) ); -- F402782
7939
7940 /* Begin Defect 83127: the error handling removed
7941
7942 IF SQL%ROWCOUNT = 0 THEN
7943 gosErrorText := 'Contract ' || pionContractID ||
7944 ' has no pending entry with status ' ||
7945 cosStatusActivate || ' in CONTRACT_DEVICES';
7946 RAISE geoApplicationError;
7947 END IF;
7948 End defect 83127 */
7949
7950 -- only consider first activation
7951 -- skip activation due to contract take over
7952 IF pionActionId = 1
7953 THEN
7954 -- determine the minimum contract end date
7955 lodtMinimumContractTime := GetMinimumContractTime(pionContractID, piodEffectiveDate);
7956
7957 UPDATE CONTRACT_ALL
7958 SET EARLIEST_END_DATE = lodtMinimumContractTime
7959 WHERE CO_ID = pionContractID;
7960
7961 END IF;
7962
7963 UPDATE CONTRACT_ALL
7964 /* begin defect 203433 */
7965 --SET CO_ACTIVATED = SYSDATE,
7966 SET CO_ACTIVATED = piodEffectiveDate,
7967 /* end defect 203433 */
7968 CONTRACT_ID_LEC = PENDING_CONTRACT_ID_LEC,
7969 PENDING_CONTRACT_ID_LEC = NULL,
7970 CONTRACT_ID_LDC = PENDING_CONTRACT_ID_LDC,
7971 PENDING_CONTRACT_ID_LDC = NULL,
7972 REC_VERSION = REC_VERSION + 1
7973 WHERE CO_ID = pionContractID;
7974
7975 -- Feature 276992 ()
7976 UPDATE CONTRACT_ALL
7977 SET CHARGE_START_DATE = piodEffectiveDate
7978 WHERE CO_ID = pionContractID
7979 AND CONTRACT_TYPE_ID NOT IN (SELECT CT.CONTRACT_TYPE_ID FROM CONTRACT_TYPE CT WHERE CT.SHNAME ='NOPAS');
7980
7981 InsertRatePlanHist(pionContractID,pionRequest);/*Defect 229253 add pionRequest as parameter*/
7982
7983 IF pionActionId != 60 THEN --PN 00394315_plsql
7984 UPDATE CONTR_SERVICES_PORT
7985 /* begin defect 203433 */
7986 --SET CSP_ACTIVE_DATE = SYSDATE,
7987 SET CSP_ACTIVE_DATE = piodActionDate,
7988 /* end defect 203433 */
7989 CSP_STATUS = 'A',
7990 REC_VERSION = REC_VERSION + 1
7991 WHERE CO_ID = pionContractID;
7992
7993 IF SQL%ROWCOUNT > 0 THEN
7994 DECLARE
7995 CURSOR locPorts IS
7996 SELECT SNCODE, COUNT(*) CNT, PROFILE_ID
7997 FROM CONTR_SERVICES_PORT
7998 WHERE CO_ID = pionContractID
7999 GROUP BY SNCODE,PROFILE_ID;
8000 BEGIN
8001 FOR xcrPorts IN locPorts LOOP
8002 -- insert entry
8003 --Reddy -- PN #210350
8004 /* INSERT INTO CONTR_VAS( CO_ID, SNCODE, SEQNO, QUANTITY,
8005 VALIDFROM, PROFILE_ID )
8006 VALUES( pionContractId, xcrPorts.SNCODE, 1, xcrPorts.CNT, */
8007 /* begin defect 203433 */
8008 --SYSDATE, NULL,xcrPorts.PROFILE_ID);
8009 /*piodEffectiveDate, xcrPorts.PROFILE_ID);*/
8010 /* end defect 203433 */
8011 INSERT INTO CONTR_VAS( CO_ID, SNCODE, SEQNO, QUANTITY,
8012 VALIDFROM, PROFILE_ID )
8013 SELECT pionContractId, xcrPorts.SNCODE,
8014 NVL(MAX(SEQNO), 0)+1,xcrPorts.CNT, piodEffectiveDate, xcrPorts.PROFILE_ID
8015 FROM CONTR_VAS
8016 WHERE CO_ID = pionContractId
8017 AND SNCODE = xcrPorts.SNCODE
8018 AND PROFILE_ID = xcrPorts.PROFILE_ID;
8019 END LOOP;
8020 EXCEPTION
8021 WHEN OTHERS THEN
8022 RAISE_APPLICATION_ERROR(
8023 -20001,
8024 'Package Contract: Insert into CONTR_VAS failed. Error: ' ||
8025 SQLERRM);
8026 END;
8027 END IF;
8028 END IF;
8029
8030 Cug.Finish_Activate( pionRequest, pionContractId );
8031 Prm.Finish_Activate( pionRequest, pionContractId );
8032 -- Feature 52832 Begin
8033 -- update value generated from switch
8034 UPD_RESPONSE_VAL_FR_SWITCH (pionRequest, pionContractId );
8035 -- Feature 52832 End
8036 ELSE -- Reactivation
8037 DBMS_OUTPUT.put_line('reactivation');
8038
8039 FOR xcrProfileServices IN locStatusHist LOOP
8040 UPDATE PROFILE_SERVICE
8041 SET STATUS_HISTNO = xcrProfileServices.HISTNO
8042 WHERE CO_ID = pionContractId
8043 AND PROFILE_ID = xcrProfileServices.PROFILE_ID
8044 AND SNCODE = xcrProfileServices.SNCODE;
8045
8046 UPDATE PR_SERV_STATUS_HIST
8047 /* begin defect 203433 */
8048 --SET VALID_FROM_DATE = SYSDATE
8049 SET VALID_FROM_DATE = piodEffectiveDate
8050 /* end defect 203433 */
8051 WHERE CO_ID = pionContractId
8052 AND PROFILE_ID = xcrProfileServices.PROFILE_ID
8053 AND SNCODE = xcrProfileServices.SNCODE
8054 AND REQUEST_ID = xcrProfileServices.REQUEST_ID
8055 AND STATUS = 'A';--defect 00240066 KW - fix 240066 is removed with 243952
8056 END LOOP;
8057
8058 Cug.Finish_Activate(pionRequest, pionContractId); /*OUL PN 291179*/
8059 Prm.Finish_Activate(pionRequest, pionContractId);
8060
8061 UPDATE CONTR_SERVICES_CAP
8062 SET BCCODE = DECODE(PENDING_BCCODE, NULL, BCCODE, PENDING_BCCODE), -- OUL 272051 PENDING_BCCODE,
8063 PENDING_BCCODE = NULL,
8064 REC_VERSION = REC_VERSION + 1
8065 WHERE CO_ID = pionContractId
8066 AND CS_REQUEST = pionRequest;
8067
8068 FinishPendingContract(pionContractId,pionRequest);
8069
8070 UPDATE CONTR_DEVICES
8071 SET CD_PENDING_STATE = NULL,
8072 REC_VERSION = REC_VERSION + 1
8073 WHERE CO_ID = pionContractID
8074 AND CD_PENDING_STATE = cosStatusActivate;
8075
8076 -- begin lobemeier PN 245919/d
8077 /**
8078 ** This fix is a workaround for contract takover if the old contract was reactivated before
8079 ** The problem is that after takeover the new contract should inherit the complete history of contract status changes
8080 ** Because of it the cursor locOnhold cannot recognize initial activation
8081 ** Additional query of of MDSRRTAB.ACTION_ID is required
8082 **/
8083 -- 00341416_plsql USC contract status history is not copied with iXR3 and higher. Therefore reactivation is never done in case of an action 60.
8084 --IF (pionActionId = 60) THEN
8085 -- InsertRatePlanHist(pionContractID,pionRequest);
8086 -- /*PN 00252584:Khv */
8087 -- Prm.Finish_Activate( pionRequest, pionContractId );
8088 --END IF;
8089 -- end lobemeier PN 245919
8090
8091 -- Defect 42568/d MBE: do not use this CONTRACT_ID_LEC its not copied to PENDING_CONTRACT_ID_LEC
8092 /*
8093 UPDATE CONTRACT_ALL
8094 SET CONTRACT_ID_LEC = PENDING_CONTRACT_ID_LEC,
8095 PENDING_CONTRACT_ID_LEC = NULL,
8096 CONTRACT_ID_LDC = PENDING_CONTRACT_ID_LDC,
8097 PENDING_CONTRACT_ID_LDC = NULL,
8098 REC_VERSION = REC_VERSION + 1
8099 WHERE CO_ID = pionContractID;
8100 */
8101 END IF;
8102
8103 -- FEATURE 240721
8104 FOR xcrAttribHist IN locAttribHist LOOP
8105
8106 UPDATE PROFILE_SERVICE
8107 SET ATTRIB_HISTNO = xcrAttribHist.SERVICE_ATTRIB_HISTNO
8108 WHERE CO_ID = pionContractId
8109 AND PROFILE_ID = xcrAttribHist.PROFILE_ID
8110 AND SNCODE = xcrAttribHist.SNCODE;
8111
8112 UPDATE PR_SERV_ATTRIB_HIST
8113 SET VALID_FROM = piodEffectiveDate
8114 WHERE CO_ID = pionContractId
8115 AND PROFILE_ID = xcrAttribHist.PROFILE_ID
8116 AND SNCODE = xcrAttribHist.SNCODE
8117 AND REQUEST_ID = xcrAttribHist.REQUEST_ID;
8118
8119 END LOOP;
8120
8121
8122 IF pionActionId = 1 THEN
8123 --Set the promotion plan accordingly
8124 Finish_SetPromoPlanDate(pionRequest, pionContractId, pionReqMar);
8125 END IF;
8126
8127END Finish_Activate;
8128
8129--defect 00240066 KW
8130 /*
8131 ** =====================================================================
8132 **
8133 ** Procedure: Finish_Reactivate
8134 **
8135 ** =====================================================================
8136 */
8137
8138 --***************************************************************************
8139 --defect 00234740 KW
8140 /*
8141 PROCEDURE Finish_Reactivate (
8142 pionRequest IN CONTRACT_HISTORY.request%TYPE,
8143 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
8144 pionReqMar IN NUMBER )
8145 IS
8146
8147 CURSOR locServices_Sncode IS
8148 SELECT DISTINCT SNCODE
8149 FROM PR_SERV_STATUS_HIST
8150 WHERE CO_ID = pionContractId;
8151
8152 lonSncode PR_SERV_STATUS_HIST.SNCODE%TYPE;
8153
8154 CURSOR locPr_Serv IS
8155 SELECT STATUS FROM PR_SERV_STATUS_HIST
8156 WHERE CO_ID = pionContractId AND SNCODE = lonSncode
8157 AND STATUS NOT IN ( 'S' )
8158 AND VALID_FROM_DATE <
8159 (SELECT MAX(PS.VALID_FROM_DATE)
8160 FROM PR_SERV_STATUS_HIST PS
8161 WHERE PS.CO_ID = pionContractId AND PS.SNCODE = lonSncode )
8162 AND HISTNO =
8163 ( SELECT MAX(HISTNO) FROM PR_SERV_STATUS_HIST
8164 WHERE CO_ID = pionContractId AND SNCODE = lonSncode
8165 AND STATUS NOT IN ( 'S' )
8166 AND VALID_FROM_DATE < (SELECT MAX(VALID_FROM_DATE)
8167 FROM PR_SERV_STATUS_HIST WHERE CO_ID = pionContractId
8168 AND SNCODE = lonSncode ) ) ;
8169
8170 BEGIN
8171
8172 FOR xrcServices_Sncode IN locServices_Sncode LOOP
8173
8174 lonSncode := xrcServices_Sncode.SNCODE;
8175
8176 FOR xrcPr_Serv IN locPr_Serv LOOP
8177
8178 UPDATE PR_SERV_STATUS_HIST
8179 SET STATUS = xrcPr_Serv.STATUS
8180 WHERE CO_ID = pionContractId
8181 AND SNCODE = lonSncode
8182 AND HISTNO =
8183 (SELECT MAX(HISTNO) FROM PR_SERV_STATUS_HIST
8184 WHERE CO_ID = pionContractId
8185 AND SNCODE = lonSncode
8186 AND STATUS != 'S');
8187
8188 UPDATE PROFILE_SERVICE PS
8189 SET STATUS_HISTNO = (SELECT MAX(HISTNO) FROM PR_SERV_STATUS_HIST
8190 WHERE CO_ID = pionContractId
8191 AND SNCODE = lonSncode
8192 AND STATUS != 'S')
8193 WHERE PS.CO_ID = pionContractId
8194 AND PS.SNCODE = lonSncode;
8195 END LOOP;
8196 END LOOP;
8197
8198 END Finish_Reactivate;
8199 */
8200 --end defect 00234740 KW
8201 --***************************************************************************
8202
8203/*
8204** =====================================================================
8205**
8206** Function: CheckStatusToCancel
8207**
8208** Purpose: This funtions returns TRUE if the request has a status
8209** that the cancellation of this request is possible
8210**
8211** =====================================================================
8212*/
8213FUNCTION CheckStatusToCancel(
8214 pionRequest IN MDSRRTAB.request%TYPE,
8215 pionReqStatus IN MDSRRTAB.STATUS%TYPE,
8216 pionSwitchID IN MDSRRTAB.SWITCH_ID%TYPE)
8217RETURN NUMBER
8218IS
8219 losResponseRes GMD_RESPONSE.RESPONSE_RESULT%TYPE;
8220BEGIN
8221
8222 IF pionReqStatus IN ( GMD_REQUEST_PENDING,
8223 GMD_REQUEST_INSERTED,
8224 GMD_REQUEST_FAILED,
8225 GMD_REQUEST_QUEUED,
8226 GMD_REQUEST_BYPASSED,
8227 -- USC#00266989 added new status 16 for business partner agreements
8228 GMD_REQUEST_BYPASSED_WITH_RDR)
8229 THEN
8230 -- request is not yet processed by VMD
8231 RETURN conRequestCancelIsPossible;
8232 ELSIF pionReqStatus IN (GMD_REQUEST_ERROR, -- request failed
8233 GMD_REQUEST_FAILED_IN_GMD)
8234 THEN
8235 -- check if the positov response is exists
8236 -- if yes - requests is already processed by VMD
8237 -- and no cancel possible
8238 BEGIN
8239 SELECT GR1.RESPONSE_RESULT
8240 INTO losResponseRes
8241 FROM GMD_RESPONSE GR1
8242 WHERE GR1.REQUEST = pionRequest
8243 AND GR1.RESPONSE_SEQNO = ( SELECT MAX(GR2.RESPONSE_SEQNO)
8244 FROM GMD_RESPONSE GR2
8245 WHERE GR2.REQUEST = GR1.REQUEST);
8246 EXCEPTION
8247 WHEN NO_DATA_FOUND THEN
8248 -- no response is present, allow cancellation
8249 RETURN conRequestCancelIsPossible;
8250 END;
8251 IF (losResponseRes IN (GMD_RESPONSE_RESULT_SUCCESS,
8252 GMD_RESPONSE_RESULT_WARNING) AND pionSwitchID != 'BYPASS' )
8253 THEN
8254 RETURN conRequestCancelIsNotPossible;
8255 ELSE
8256 RETURN conRequestCancelIsPossible;
8257 END IF; --losResponseRes
8258
8259 ELSE
8260 RETURN conRequestCancelIsNotPossible;
8261 END IF;
8262END CheckStatusToCancel;
8263
8264/*
8265** =====================================================================
8266**
8267** Function: CheckActionToCancel
8268**
8269** Purpose: This funtions returns TRUE if the action of request
8270** is allowed to be cancel
8271** Remark: According to the FSP 251885 the cancellation is possible if
8272** the request has to be set to provisioning. The case that the
8273** request send nor to provisioning neither to rating does not
8274** make sence and not covered by this function.
8275**
8276** =====================================================================
8277*/
8278FUNCTION CheckActionToCancel(
8279 pionRequestID IN MDSRRTAB.REQUEST%TYPE,
8280 pionActionID IN MDSRRTAB.action_id%TYPE,
8281 piosProvFlag IN MDSRRTAB.PROVISIONING_FLAG%TYPE)
8282RETURN NUMBER
8283IS
8284 losProvFlag MDSRRTAB.PROVISIONING_FLAG%TYPE;
8285 lonResult INTEGER;
8286
8287 lonServInteractionForSPChange NUMBER := 0; -- OUL 344798
8288 losMoLevel GMD_ACTION.MO_LEVEL%TYPE := ''; -- OUL 272087
8289
8290 losChargingEngine VARCHAR2(5); /*PN 00396961*/
8291
8292BEGIN
8293
8294 lonResult := conRequestCancelIsPossible;
8295
8296 -- OUL 271400: add actions 54 and 52
8297 /*IF (pionActionID IN (18, 19, 20, 34, 36, 37, 38, 42, 43, 52, 54, 63, 20001, 20002))*/
8298 IF (pionActionID IN (34, 36, 37, 38, 42, 43, 52, 54, 63)) OR (pionActionID BETWEEN 26 AND 32)
8299 THEN
8300 lonResult := conRequestCancelIsNotPossible;
8301 /*PN 00396961*/
8302 ELSIF (pionActionID IN (18, 19, 20, 20001, 20002)) THEN
8303
8304 BEGIN
8305 SELECT ce.shdes INTO losChargingEngine FROM contract_all co, rateplan rp, charging_engine ce
8306 WHERE co.tmcode = rp.tmcode AND rp.charging_engine_code = ce.charging_engine_code and co.co_id IN
8307 (SELECT co_id FROM mdsrrtab WHERE request = pionRequestID);
8308
8309 EXCEPTION
8310 WHEN NO_DATA_FOUND THEN
8311 gosErrorText := SQLERRM;
8312 RAISE_APPLICATION_ERROR( -20001,
8313 'Package Contract.CheckActionToCancel: ' ||
8314 'Request: ' || pionRequestID ||' ' ||
8315 'No record found.' ||' ' ||
8316 gosErrorText );
8317 WHEN OTHERS THEN
8318 gosErrorText := SQLERRM;
8319 RAISE_APPLICATION_ERROR( -20001,
8320 'Package Contract.CheckActionToCancel: ' ||
8321 'Request: ' || pionRequestID ||' ' ||
8322 gosErrorText );
8323 END;
8324 IF losChargingEngine != 'CS' THEN
8325 lonResult := conRequestCancelIsNotPossible;
8326 END IF;
8327 /*PN 00396961*/
8328
8329 ELSIF (pionActionID = 39) THEN
8330 -- OUL 344798: replace app_modules by mpscftab record
8331 BEGIN
8332 SELECT CFVALUE
8333 INTO lonServInteractionForSPChange
8334 FROM MPSCFTAB
8335 WHERE CFCODE = 30005;
8336 EXCEPTION
8337 WHEN NO_DATA_FOUND THEN
8338 gosErrorText := SQLERRM;
8339 RAISE_APPLICATION_ERROR( -20001,
8340 'Package Contract.CheckActionToCancel: ' ||
8341 'Request: ' || pionRequestID ||' ' ||
8342 'No record found in MPSCFTAB for value 30005.' ||' ' ||
8343 gosErrorText );
8344 WHEN OTHERS THEN
8345 gosErrorText := SQLERRM;
8346 RAISE_APPLICATION_ERROR( -20001,
8347 'Package Contract.CheckActionToCancel: ' ||
8348 'Request: ' || pionRequestID ||' ' ||
8349 gosErrorText );
8350 END;
8351
8352 IF lonServInteractionForSPChange > 0
8353 THEN
8354 lonResult := conRequestCancelIsNotPossible;
8355 END IF;
8356 -- contract takover cannot be cancelled
8357 ELSIF (pionActionID = 59 OR pionActionID = 60 OR pionActionID = 15001 OR pionActionID = 15002) THEN
8358 lonResult := conRequestCancelIsNotPossible;
8359 ELSE
8360 -- begin AV 272087/d
8361 SELECT MO_LEVEL
8362 INTO losMoLevel
8363 FROM GMD_ACTION
8364 WHERE ACTION_ID = pionActionID;
8365
8366 IF losMoLevel = 'CUSTOMER' THEN
8367 lonResult := conRequestCancelIsNotPossible;
8368 END IF;
8369 -- end AV 272087/d
8370 END IF;
8371 RETURN lonResult;
8372END CheckActionToCancel;
8373
8374/*
8375** =====================================================================
8376**
8377** Function: CheckRequestHasChildren
8378**
8379** Purpose: This funtions returns TURE if the request does not have children
8380** or the cancellation of children is possible
8381** If the cnacellation of one of children is not possible -
8382** return FALSE.
8383** Check of status of child requests is not needed,
8384** because thea can not be processed early than parent
8385**
8386** =====================================================================
8387*/
8388FUNCTION CheckRequestHasChildren(
8389 pionRequest IN MDSRRTAB.request%TYPE)
8390RETURN NUMBER
8391IS
8392 -- get ALL chid requests
8393 CURSOR locChildrenReq IS
8394 SELECT REQUEST, ACTION_ID, PROVISIONING_FLAG, RATING_FLAG, SCCODE
8395 FROM MDSRRTAB
8396 START WITH REQUEST = pionRequest
8397 CONNECT BY PARENT_REQUEST = PRIOR REQUEST;
8398 lcrChildrenReq locChildrenReq%ROWTYPE;
8399 lonResult NUMBER := conRequestCancelIsPossible;
8400BEGIN
8401
8402 OPEN locChildrenReq;
8403 LOOP
8404 FETCH locChildrenReq INTO lcrChildrenReq;
8405 EXIT WHEN locChildrenReq%NOTFOUND;
8406 lonResult := CheckActionToCancel(pionRequest,
8407 lcrChildrenReq.ACTION_ID,
8408 lcrChildrenReq.PROVISIONING_FLAG
8409 -- lcrChildrenReq.RATING_FLAG,
8410 -- lcrChildrenReq.SCCODE
8411 );
8412 IF lonResult = conRequestCancelIsNotPossible THEN
8413 EXIT;
8414 END IF;
8415 END LOOP; --- of cursor
8416 CLOSE locChildrenReq;
8417 RETURN lonResult;
8418END CheckRequestHasChildren;
8419
8420-- begin OUL 341996
8421/*
8422** =====================================================================
8423**
8424** Function: CheckLinkedCRHRequest
8425**
8426** Purpose: This funtions returns TURE if the request does linked
8427** CRH request or CRH request can be cancelled
8428**
8429** =====================================================================
8430*/
8431FUNCTION CheckLinkedCRHRequest(pionRequest IN MDSRRTAB.request%TYPE)
8432RETURN NUMBER
8433IS
8434 lCrhRequest CRH_REQUEST.request_id%TYPE := 0;
8435 lCrhWorkerPid CRH_REQUEST.WORKER_PID%TYPE := 0;
8436 lCrhStatus CRH_REQUEST.STATUS%TYPE := 0;
8437 lonResult NUMBER := conRequestCancelIsPossible;
8438BEGIN
8439
8440 BEGIN
8441 SELECT REQUEST_ID, WORKER_PID, STATUS
8442 INTO lCrhRequest, lCrhWorkerPid, lCrhStatus
8443 FROM (
8444 SELECT REQUEST_ID, WORKER_PID, STATUS
8445 FROM CRH_REQUEST
8446 WHERE GMD_REQUEST_ID = pionRequest
8447 UNION
8448 SELECT REQUEST_ID, WORKER_PID, STATUS
8449 FROM CRH_REQUEST_HISTORY
8450 WHERE GMD_REQUEST_ID = pionRequest )
8451 ;
8452 EXCEPTION
8453 WHEN NO_DATA_FOUND THEN
8454 -- do nothing
8455 lCrhRequest := 0;
8456 END;
8457
8458 IF ( (lCrhRequest = 0) OR -- no request found
8459 (lCrhRequest > 0 AND lCrhWorkerPid = 0 AND lCrhStatus = 2) -- request found but not processed
8460 -- when request is in status 1 the deactivation request for GMD will be cancelled by CRH.
8461 -- so this case need not be covered.
8462 )
8463 THEN
8464 lonResult := conRequestCancelIsPossible;
8465 ELSE
8466 lonResult := cosReqIsLinked;
8467 END IF;
8468
8469 Return lonResult;
8470
8471END CheckLinkedCRHRequest;
8472-- begin OUL 341996
8473
8474/*------------------------- Public Modules -----------------------------*/
8475
8476/*
8477** =====================================================================
8478**
8479** Procedure: CheckRequestToCancel
8480**
8481** Purpose: This funtions returns TRUE if the request has a status
8482** that the cancellation of this request is possible
8483**
8484** =====================================================================
8485*/
8486PROCEDURE CheckRequestToCancel(
8487 pionRequest IN MDSRRTAB.request%TYPE,
8488 piosReturnCode OUT VARCHAR2,
8489 pionContractId OUT MDSRRTAB.CO_ID%TYPE)
8490IS
8491 lonActionId MDSRRTAB.ACTION_ID%TYPE;
8492 lonStatus MDSRRTAB.STATUS%TYPE;
8493 lonParentRequest MDSRRTAB.Parent_Request%TYPE;
8494 losProvFlag MDSRRTAB.PROVISIONING_FLAG%TYPE;
8495 losRatingFlag MDSRRTAB.RATING_FLAG%TYPE;
8496 lonSccode MDSRRTAB.SCCODE%TYPE;
8497 losSwitchID MDSRRTAB.SWITCH_ID%TYPE;
8498
8499 lonRes NUMBER := 0;
8500 str VARCHAR2(1000);
8501
8502 lonWorkerPid MDSRRTAB.WORKER_PID%TYPE; -- AV 283353/d
8503BEGIN
8504 pionContractId := 0;
8505 -- fetch request data
8506 SELECT SCCODE, ACTION_ID, STATUS, PARENT_REQUEST, PROVISIONING_FLAG, RATING_FLAG, WORKER_PID , SWITCH_ID
8507 INTO lonSccode, lonActionId, lonStatus, lonParentRequest, losProvFlag, losRatingFlag, lonWorkerPid, losSwitchID
8508 FROM MDSRRTAB WHERE REQUEST = pionRequest;
8509
8510 IF lonParentRequest > 0 THEN
8511 -- request has parent requests
8512 piosReturnCode := cosReqIsLinked;
8513 BEGIN
8514 SELECT CO_ID INTO pionContractId
8515 FROM MDSRRTAB
8516 WHERE PARENT_REQUEST IS NULL
8517 START WITH request = pionRequest
8518 CONNECT BY PRIOR PARENT_REQUEST = REQUEST;
8519 EXCEPTION
8520 WHEN NO_DATA_FOUND THEN
8521 pionContractId := 0;
8522 END;
8523
8524 ELSIF lonWorkerPid > 0 THEN -- AV 283353/d
8525 piosReturnCode := cosReqAlreadyProcessed;
8526
8527 ELSIF (lonStatus = 0 AND lonActionId = 2 AND lonWorkerPid = 0) THEN -- OUL PN 341996
8528 lonRes := CheckLinkedCRHRequest(pionRequest);
8529 IF(lonRes = conRequestCancelIsPossible)THEN
8530 piosReturnCode := cosReqCancelYes;
8531 ELSE
8532 piosReturnCode := cosReqChildCancelNo;
8533 END IF;
8534
8535 ELSE
8536 -- check status
8537 lonRes := CheckStatusToCancel(pionRequest,lonStatus,losSwitchID);
8538 IF lonRes = conRequestCancelIsPossible THEN
8539 -- check action
8540 lonRes := CheckActionToCancel( pionRequest,lonActionID, losProvFlag);
8541
8542 IF lonRes = conRequestCancelIsPossible THEN
8543 -- check children
8544 lonRes := CheckRequestHasChildren(pionRequest);
8545 IF lonRes = conRequestCancelIsPossible THEN
8546 piosReturnCode := cosReqCancelYes;
8547 ELSE
8548 piosReturnCode := cosReqChildCancelNo;
8549 END IF; -- check children
8550 ELSE
8551 piosReturnCode := cosReqIsRatingOnly;
8552 END IF; --check action
8553 ELSE
8554 piosReturnCode := cosReqStatusWrong;
8555 END IF; -- check status
8556 END IF;
8557EXCEPTION
8558 WHEN NO_DATA_FOUND THEN
8559 -- the request is still processed and moved into GMD_REQUEST_HISTORY
8560 piosReturnCode := cosReqAlreadyProcessed;
8561 WHEN OTHERS THEN
8562 gosErrorText := SQLERRM;
8563 RAISE_APPLICATION_ERROR( -20001,
8564 'Package Contract.CheckRequestToCancel: ' ||
8565 'Request: ' || pionRequest ||' ' ||
8566 gosErrorText );
8567END CheckRequestToCancel;
8568
8569/*
8570** =====================================================================
8571**
8572** Function: RequestMarketType
8573**
8574** Purpose: This funtions returns the market type of a market
8575**
8576** If the market is unkown NULL will be returned.
8577** =====================================================================
8578*/
8579FUNCTION RequestMarketType(
8580 pionSCCode IN MPDSCTAB.sccode%TYPE)
8581RETURN NUMBER IS
8582 CURSOR locMarket IS
8583 SELECT SCNETTYPE
8584 FROM MPDSCTAB
8585 WHERE SCCODE = pionSCCode;
8586 lcrMarket locMarket%ROWTYPE;
8587 lonResult NUMBER := NULL;
8588BEGIN
8589
8590 -- Begin PN00265252
8591 IF pionSCCode IS NOT NULL THEN
8592 OPEN locMarket;
8593 FETCH locMarket
8594 INTO lcrMarket;
8595 IF locMarket%FOUND THEN
8596 lonResult := GetIdOfMarketType( lcrMarket.SCNETTYPE);
8597 END IF;
8598 CLOSE locMarket;
8599 ELSE
8600 lonResult := GetIdOfMarketType( NULL );
8601 END IF;
8602 -- End PN00265252
8603
8604 RETURN lonResult;
8605
8606END RequestMarketType;
8607/*
8608** =====================================================================
8609**
8610** Procedure: RetentionAllowed
8611**
8612** Purpose: This procedure checks if retention
8613** is allowed for a specified resource
8614**
8615** Return: 0 - Retention not possible
8616** 1 - Retention possible
8617** =====================================================================
8618*/
8619PROCEDURE RetentionAllowed(
8620 pionResourceID IN INTEGER,
8621 pionResourceType IN INTEGER,
8622 poonReturnCode OUT INTEGER)
8623IS
8624 lonResult INTEGER := NULL;
8625BEGIN
8626 gosErrorText := NULL;
8627 IF pionResourceType = conResourceDirNum THEN
8628 lonResult := RetentionDirNumAllowed( pionResourceId);
8629 ELSIF pionResourceType = conResourcePort THEN
8630 lonResult := RetentionPortAllowed( pionResourceId);
8631 ELSIF pionResourceType = conResourceStorMed THEN
8632 lonResult := RetentionStorMedAllowed( pionResourceId);
8633 ELSE
8634 gosErrorText := 'unkown resource type';
8635 RAISE geoApplicationError;
8636 END IF;
8637 poonReturnCode := lonResult;
8638EXCEPTION
8639WHEN OTHERS THEN
8640 IF gosErrorText IS NULL THEN
8641 gosErrorText := SQLERRM;
8642 END IF;
8643 RAISE_APPLICATION_ERROR( -20001,
8644 'Package Contract.RetentionAllowed: ' ||
8645 'Resource ID: ' || pionResourceId || ' ' ||
8646 'Type: ' || pionResourceType || ' ' ||
8647 gosErrorText );
8648END RetentionAllowed;
8649
8650/*
8651** =====================================================================
8652**
8653** Procedure: Finish_ChangeMainFlag ANGER
8654** #UMTS# 82630
8655** =====================================================================
8656*/
8657PROCEDURE Finish_ChangeMainFlag (
8658 pionRequest IN PR_SERV_STATUS_HIST.REQUEST_ID%TYPE,
8659 pionContractId IN PR_SERV_STATUS_HIST.CO_ID%TYPE)
8660IS
8661 lodEffectiveDate DATE;
8662
8663 CURSOR locNewCSCRecords IS
8664 SELECT CO_ID, PROFILE_ID, SNCODE, SEQNO, SEQNO_PRE
8665 FROM CONTR_SERVICES_CAP
8666 WHERE CO_ID = pionContractId
8667 AND CS_REQUEST = pionRequest
8668 AND CS_ACTIV_DATE IS NULL;
8669BEGIN
8670
8671 lodEffectiveDate := GetEffectiveDate(pionRequest);
8672
8673 FOR xcrNewCSCRecords IN locNewCSCRecords LOOP
8674
8675 UPDATE CONTR_SERVICES_CAP
8676 SET CS_ACTIV_DATE = lodEffectiveDate
8677 WHERE CO_ID = xcrNewCSCRecords.CO_ID
8678 AND PROFILE_ID = xcrNewCSCRecords.PROFILE_ID
8679 AND SNCODE = xcrNewCSCRecords.SNCODE
8680 AND SEQNO = xcrNewCSCRecords.SEQNO;
8681
8682 UPDATE CONTR_SERVICES_CAP
8683 SET CS_DEACTIV_DATE = lodEffectiveDate
8684 WHERE CO_ID = xcrNewCSCRecords.CO_ID
8685 AND PROFILE_ID = xcrNewCSCRecords.PROFILE_ID
8686 AND SNCODE = xcrNewCSCRecords.SNCODE
8687 AND SEQNO = xcrNewCSCRecords.SEQNO_PRE;
8688
8689 END LOOP;
8690
8691END Finish_ChangeMainFlag;
8692/*
8693** =====================================================================
8694**
8695** Procedure: Cancel_ChangeMainFlag ANGER
8696** #UMTS# 82630
8697** =====================================================================
8698*/
8699PROCEDURE Cancel_ChangeMainFlag (
8700 pionRequest IN PR_SERV_STATUS_HIST.REQUEST_ID%TYPE,
8701 pionContractId IN PR_SERV_STATUS_HIST.CO_ID%TYPE)
8702IS
8703 BEGIN
8704 DELETE FROM CONTR_SERVICES_CAP
8705 WHERE CO_ID = pionContractId
8706 AND CS_Request = pionRequest
8707 AND CS_ACTIV_DATE IS NULL;
8708
8709 UPDATE CONTR_SERVICES_CAP
8710 SET CS_REQUEST = NULL
8711 WHERE CO_ID = pionContractId
8712 AND CS_Request = pionRequest;
8713END Cancel_ChangeMainFlag;
8714
8715
8716-- PN 296713, MCH
8717/*
8718** =====================================================================
8719**
8720** Procedure: MoveRequestIntoHistory
8721**
8722** Purpose: Move a request from MDSRRTAB to GMD_REQUEST_HISTORY
8723**
8724** =====================================================================
8725*/
8726PROCEDURE MoveRequestIntoHistory(
8727 pionRequest MDSRRTAB.REQUEST%TYPE)
8728IS
8729BEGIN
8730
8731 INSERT INTO GMD_REQUEST_HISTORY
8732 (
8733 REQUEST,
8734 PLCODE,
8735 STATUS,
8736 TS,
8737 USERID,
8738 CUSTOMER_ID,
8739 VMD_RETRY,
8740 ERROR_RETRY,
8741 CO_ID,
8742 INSERT_DATE,
8743 REQUEST_UPDATE,
8744 PRIORITY,
8745 ACTION_DATE,
8746 SWITCH_ID,
8747 SCCODE,
8748 WORKER_PID,
8749 ACTION_ID,
8750 DATA_1,
8751 DATA_2,
8752 DATA_3,
8753 ERROR_CODE,
8754 PARENT_REQUEST,
8755 PROVISIONING_FLAG,
8756 RATING_FLAG,
8757 IN_TRIGGER,
8758 FU_FLAG,
8759 GMDEXT_TASK,
8760 OFFLINE_CHARGING_FLAG,
8761 PRE_PROCESSING,
8762 POST_PROCESSING,
8763 EFFECTIVE_DATE,
8764 INSTANCE_ID,
8765 ACKNOWLEDGEMENT_CODE,
8766 TARGET,
8767 SUB_TARGET,
8768 SENDING_TIMESTAMP,
8769 RESPONSE_TIMESTAMP
8770 )
8771 SELECT
8772 REQUEST,
8773 PLCODE,
8774 9,
8775 TS,
8776 USERID,
8777 CUSTOMER_ID,
8778 VMD_RETRY,
8779 ERROR_RETRY,
8780 CO_ID,
8781 INSERT_DATE,
8782 'C',
8783 PRIORITY,
8784 ACTION_DATE,
8785 SWITCH_ID,
8786 SCCODE,
8787 WORKER_PID,
8788 ACTION_ID,
8789 DATA_1,
8790 DATA_2,
8791 DATA_3,
8792 ERROR_CODE,
8793 PARENT_REQUEST,
8794 PROVISIONING_FLAG,
8795 RATING_FLAG,
8796 IN_TRIGGER,
8797 FU_FLAG,
8798 GMDEXT_TASK,
8799 OFFLINE_CHARGING_FLAG,
8800 PRE_PROCESSING,
8801 POST_PROCESSING,
8802 EFFECTIVE_DATE,
8803 INSTANCE_ID,
8804 ACKNOWLEDGEMENT_CODE,
8805 TARGET,
8806 SUB_TARGET,
8807 SENDING_TIMESTAMP,
8808 RESPONSE_TIMESTAMP
8809 FROM MDSRRTAB WHERE REQUEST = pionRequest;
8810
8811 DELETE FROM MDSRRTAB WHERE REQUEST = pionRequest;
8812
8813END MoveRequestIntoHistory;
8814-- end 296713, MCH
8815
8816/*
8817** =====================================================================
8818**
8819** Procedure: Cancel_Request
8820**
8821** =====================================================================
8822*/
8823-- PN 00206577 ENU 04-SEP-2001 removed incorrect coding for AL.
8824-- During Cancel_request, CA cancels all linked requests in one transaction
8825-- before that happens, all requests are unlinked
8826-- thus, processing of AL requests is exactly like normal request processing
8827PROCEDURE Cancel_Request (
8828 pionRequest IN CONTRACT_HISTORY.request%TYPE,
8829 pionWorkerPid IN CRH_REQUEST.WORKER_PID%TYPE) -- OUL 341996
8830IS
8831
8832 CURSOR locCmd IS
8833 SELECT CO_ID,
8834 PLCODE,
8835 REQUEST_UPDATE,
8836 Contract.RequestMarketType(SCCODE),
8837 ACTION_ID,
8838 DATA_1,
8839 DATA_2,
8840 DATA_3, --KWA 00416372
8841 TRANSACTION_ID,
8842 USERID
8843 FROM MDSRRTAB
8844 WHERE REQUEST = pionRequest
8845 FOR UPDATE OF REQUEST_UPDATE;
8846
8847 lonContractId MDSRRTAB.CO_ID%TYPE;
8848 lonPlcode MDSRRTAB.PLCODE%TYPE;
8849 losUpdate MDSRRTAB.REQUEST_UPDATE%TYPE;
8850 lonReqMar NUMBER;
8851 lonActionId NUMBER;
8852 losData1 MDSRRTAB.DATA_1%TYPE;
8853 losData2 MDSRRTAB.DATA_2%TYPE;
8854 losData3 MDSRRTAB.DATA_3%TYPE; --KWA 00416372
8855 lobRequestExists BOOLEAN;
8856 lonTransactionId MDSRRTAB.TRANSACTION_ID%TYPE;
8857 losUserId MDSRRTAB.USERID%TYPE;
8858
8859 /* begin defect 264608 AV */
8860 lonSncode PROFILE_SERVICE.SNCODE%TYPE;
8861 lonProfileId PROFILE_SERVICE.PROFILE_ID%TYPE;
8862 lonLastAttribHistNo PROFILE_SERVICE.ATTRIB_HISTNO%TYPE;
8863
8864 CURSOR locGetServData IS
8865 SELECT SNCODE, PROFILE_ID
8866 FROM PR_SERV_ATTRIB_HIST
8867 WHERE REQUEST_ID=pionRequest;
8868
8869 CURSOR locGetLastAttrHistNo IS
8870 SELECT MAX(SERVICE_ATTRIB_HISTNO) FROM PR_SERV_ATTRIB_HIST
8871 WHERE CO_ID=lonContractId
8872 AND PROFILE_ID=lonProfileId
8873 AND SNCODE=lonSncode;
8874 /* end 264608 */
8875
8876 /* begin PN00280322_plsql */
8877 lonAttribHistNoToDelete PR_SERV_ATTRIB_HIST.SERVICE_ATTRIB_HISTNO%TYPE;
8878
8879 CURSOR locGetAttrHistNoToDelete IS
8880 SELECT SERVICE_ATTRIB_HISTNO FROM PR_SERV_ATTRIB_HIST
8881 WHERE CO_ID = lonContractId
8882 AND PROFILE_ID = lonProfileId
8883 AND SNCODE = lonSncode
8884 AND REQUEST_ID = pionRequest
8885 AND VALID_FROM IS NULL;
8886 /* end PN00280322_plsql */
8887
8888 -- PN 296713, MCH
8889 TYPE tRequests IS VARRAY (100) OF MDSRRTAB.REQUEST%TYPE NOT NULL; -- INDEX BY POSITIVEN;
8890 lotChildRequests tRequests := tRequests();
8891 lonChildRequest MDSRRTAB.REQUEST%TYPE;
8892 lonCount NUMBER := 0;
8893 -- end 296713, MCH
8894
8895BEGIN
8896
8897 gosErrorText := NULL;
8898 OPEN locCmd;
8899
8900 FETCH locCmd
8901 INTO lonContractId,
8902 lonPlcode,
8903 losUpdate,
8904 lonReqMar,
8905 lonActionId,
8906 losData1,
8907 losData2,
8908 losData3, --KWA 00416372
8909 lonTransactionId,
8910 losUserId;
8911
8912 lobRequestExists := locCmd%FOUND;
8913
8914 DBMS_OUTPUT.put_line('Cancel Request: ' || TO_CHAR(pionRequest) ||
8915 ' ContractId: ' || TO_CHAR(lonContractId) ||
8916 ' Plcode: ' || TO_CHAR(lonPlcode) ||
8917 ' Market: ' || lonReqMar ||
8918 ' Action: ' || lonActionId );
8919
8920 IF NOT lobRequestExists THEN
8921 gosErrorText := 'not found';
8922 RAISE geoApplicationError;
8923 END IF;
8924
8925 IF lonReqMar IS NULL THEN
8926 gosErrorText := 'Request ' || pionRequest || ' with unkown market';
8927 RAISE geoApplicationError;
8928 END IF;
8929
8930 -- PN 296713, MCH
8931 IF gobCancellingMainRequest THEN
8932 -- get ALL child requests to cancel them
8933 DECLARE
8934
8935 CURSOR locChild IS
8936 SELECT REQUEST
8937 FROM MDSRRTAB
8938 WHERE PARENT_REQUEST IS NOT NULL
8939 START WITH REQUEST = pionRequest
8940 CONNECT BY PRIOR REQUEST = PARENT_REQUEST;
8941
8942 BEGIN
8943
8944 FOR recChild IN locChild
8945 LOOP
8946 lonCount := lonCount + 1;
8947 lotChildRequests.EXTEND;
8948 lotChildRequests( lonCount ) := recChild.REQUEST;
8949 END LOOP;
8950 END;
8951 END IF;
8952 -- end 296713, MCH
8953
8954 -- Begin lobemeier defect 247526
8955 -- IF lonContractId IS NULL
8956 IF lonContractId IS NULL AND NOT (lonActionId BETWEEN 26 AND 32 OR lonActionId=62) THEN
8957 -- End lobemeier defect 247526
8958 gosErrorText := 'with no Contract';
8959 RAISE geoApplicationError;
8960 END IF;
8961
8962 -- KWA 00416372 this cancel will be prohibited for the deactive service, which was deactivate during service package change
8963 IF losData3 = 'CANCEL_PROHIBITED' AND (lonActionId = 9) THEN
8964 gosErrorText := 'cancel request is prohibited';
8965 RAISE geoApplicationError;
8966 END IF;
8967 -- KWA 00416372
8968
8969 IF losUpdate IS NULL THEN
8970 /*
8971 ** Now call the right Cancel_* procedure. If a wrong action identifier
8972 ** is detected raise an error.
8973 */
8974 IF lonActionId IN (1, 3) THEN
8975 Cancel_Activate( pionRequest, lonContractID );
8976
8977 -- FEATURE 240721
8978 IF lonActionId = 1 THEN
8979 -- USc#00256346 keep the first entry in CONTR_TARIFF_OPTIONS, otherwise the information is lost
8980 -- DoContrTariffOptions( pionRequest, lonContractId, 'D', FALSE );
8981 DoContrTariffOptions( pionRequest, lonContractId, 'R', FALSE );
8982 END IF;
8983
8984 ELSIF lonActionId IN (2, 4, 5) THEN
8985 Cancel_Deactivate( pionRequest, lonContractID,pionWorkerPid ); -- OUL 341996
8986 ELSIF lonActionId IN (13003, 14003) THEN
8987 IF (lonReqMar = conServiceDriven OR lonReqMar = conPortDriven)
8988 THEN
8989 Cancel_ServiceControl( pionRequest,
8990 lonContractID,
8991 lonActionId);
8992 ELSIF lonReqMar = conStorMedDriven
8993 THEN
8994 Cancel_ChangeSubscription( pionRequest,
8995 lonContractID,
8996 lonPlcode,
8997 lonReqMar,
8998 lonActionId,
8999 losData1,
9000 losData2);
9001 ELSE
9002 gosErrorText := 'unknown market type';
9003 RAISE geoApplicationError;
9004 END IF;
9005 ELSIF lonActionId IN (8, 9, 70, 10, 11, 12, 13001, 14001, 21, 22, 23, 24) THEN
9006 Cancel_ServiceControl( pionRequest,
9007 lonContractID,
9008 lonActionId); --losData2); defect 00214218 schachni
9009
9010 /*The special case to cancel of the changes for life cycle services - actio_id = 10 */
9011 IF lonActionId IN (10) THEN
9012 Cancel_ChangeExpiryDate(pionRequest, lonContractID);
9013 END IF;
9014
9015 -- begin USC#00260976 Action ID 16 allowed if not prevented from CheckActionToCancel stored procedure
9016 -- Feature 402782 , action ids 13003 and 14003 added
9017 ELSIF lonActionId IN (6001, 6002, 6003, 6004, 7, 16, 17, 39) THEN
9018 -- end USC#00260976
9019 -- begin lobemeier defect 245307 - Action ID 16 must not be propagated
9020 -- ELSIF lonActionId IN (6001, 6002, 6003, 6004, 7, 17, 20) THEN
9021 -- end lobemeier defect 245307
9022 Cancel_ChangeSubscription( pionRequest,
9023 lonContractID,
9024 lonPlcode,
9025 lonReqMar,
9026 lonActionId,
9027 losData1,
9028 losData2);
9029
9030 /* Feature 82630, #UMTS# -- 21.May.2001 -- BEGIN
9031 * User Profile Change request is removed */
9032 ELSIF lonActionId = 40 THEN
9033 Cancel_ChangeUserProfile( pionRequest,
9034 lonContractID,
9035 lonPlcode,
9036 lonReqMar,
9037 lonActionId,
9038 losData1,
9039 losData2);
9040 /* Feature 82630, #UMTS# -- 21.May.2001 -- END */
9041
9042 -- BEGIN 82630 #UMTS# ANGER: Main DN Flag Change request is removed
9043 ELSIF lonActionId = 41 THEN
9044 Cancel_ChangeMainFlag( pionRequest,
9045 lonContractID);
9046 -- END 82630 #UMTS# ANGER
9047
9048 -- FEATURE 240721
9049 ELSIF lonActionId = 35 THEN
9050 DoContrTariffOptions( pionRequest, lonContractId, 'D', TRUE );
9051
9052 -- FEATURE 276992 / PN 00293425 AV
9053 ELSIF lonActionId = 67 THEN
9054 Cancel_ChangeAdvanceAccCharge(pionRequest);
9055 -- FEATURE 276992 / PN 00293425 AV
9056
9057 -- FEATURE 283543 USC
9058 ELSIF lonActionId IN (68, 30004) THEN
9059 Cancel_ChangeIVRLanguage(lonContractID);
9060 -- FEATURE 283543 USC
9061
9062 -- FEATURE 287342 OH
9063 ELSIF lonActionId = 69 THEN
9064 Cancel_Rating_Option(pionRequest);
9065 -- FEATURE 287342 OH
9066
9067
9068 ELSIF lonActionId = 18 THEN
9069 Cancel_AddMicroCell( pionRequest, lonContractID);
9070 ELSIF lonActionId IN (20, 20001, 20002) THEN
9071 Cancel_ChangeMicroCell( pionRequest, lonContractID);
9072 ELSIF lonActionId = 19 THEN
9073 Cancel_DeleteMicroCell( pionRequest, lonContractID);
9074 ELSIF lonActionId = 30001 THEN
9075 Cancel_ChangeExpiryDate(pionRequest, lonContractID);
9076 ELSIF lonActionId = 30002 THEN
9077 Cancel_SetPromoPlanDate(pionRequest, lonContractID, lonReqMar);
9078
9079-- #####
9080
9081 ELSIF lonActionId NOT IN (18, 19, 34, 36, 37, 38, 42, 43, 44, 45, 62, 71, 20001, 20002, 30003, 30005, 30006, 30007, 30008, 30009, 30010, 30011) THEN
9082 -- Feature 83597 (SI)
9083 -- Action IDs refer only to rating, so nothing has to be done on database
9084 -- other Action IDs are not known and should lead to an error message
9085 gosErrorText := 'unknown action identifier ' || lonActionId;
9086 RAISE geoApplicationError;
9087 END IF;
9088
9089 -- process concurrent requests
9090 -- Feautre 276491
9091 CancelConcurrentRequest(pionRequest,lonContractId);
9092
9093 -- 00377727_E08_U09
9094 Cancel_ContractPamScheme (lonContractID , pionRequest, lonActionId);
9095
9096 -- FEATURE 240721
9097 -- BEGIN PN00280322_plsql
9098 IF lonActionId IN (16, 39, 44, 45) THEN
9099 -- END PN00280322_plsql
9100 /* begin defect 264608 AV */
9101 /* Get the SNCODE and PROFILE_ID of the affected services */
9102 OPEN locGetServData;
9103
9104 LOOP
9105 FETCH locGetServData INTO lonSncode,lonProfileId;
9106
9107 IF locGetServData%FOUND THEN
9108 -- BEGIN PN00280322_plsql
9109 OPEN locGetAttrHistNoToDelete;
9110 FETCH locGetAttrHistNoToDelete INTO lonAttribHistNoToDelete;
9111 CLOSE locGetAttrHistNoToDelete;
9112 -- END PN00280322_plsql
9113
9114 DELETE FROM PR_SERV_ATTRIB_HIST
9115 /* PN00280322_plsql WHERE CO_ID = lonContractId
9116 AND PROFILE_ID = lonProfileId
9117 AND SNCODE = lonSncode
9118 AND REQUEST_ID = pionRequest
9119 AND VALID_FROM IS NULL;*/
9120 WHERE SERVICE_ATTRIB_HISTNO=lonAttribHistNoToDelete;
9121
9122 /* After removing the entry from PR_SERV_ATTIB_HIST, PROFILE_SERVICE.ATTRIB_HISTNO should be updated */
9123
9124 OPEN locGetLastAttrHistNo;
9125 FETCH locGetLastAttrHistNo INTO lonLastAttribHistNo;
9126
9127 IF lonLastAttribHistNo IS NOT NULL THEN
9128 /* update with the previous attrib hist no */
9129 UPDATE PROFILE_SERVICE SET ATTRIB_HISTNO = lonLastAttribHistNo
9130 WHERE CO_ID = lonContractId
9131 AND PROFILE_ID = lonProfileId
9132 AND SNCODE = lonSncode
9133 AND ATTRIB_HISTNO=lonAttribHistNoToDelete;
9134
9135 ELSE
9136 /* no previous attrib hist no, update with null */
9137 UPDATE PROFILE_SERVICE SET ATTRIB_HISTNO = NULL
9138 WHERE CO_ID = lonContractId
9139 AND PROFILE_ID = lonProfileId
9140 AND SNCODE = lonSncode
9141 AND ATTRIB_HISTNO=lonAttribHistNoToDelete;
9142 END IF;
9143
9144 CLOSE locGetLastAttrHistNo;
9145
9146 ELSE
9147 EXIT;
9148 END IF;
9149
9150 END LOOP;
9151
9152 CLOSE locGetServData;
9153 /* end 264608 */
9154
9155 END IF;
9156
9157 UPDATE MDSRRTAB
9158 SET REQUEST_UPDATE = 'C'
9159 WHERE CURRENT OF locCmd;
9160
9161 ELSIF losUpdate = 'N' THEN -- no updates THEN
9162 UPDATE MDSRRTAB
9163 SET REQUEST_UPDATE = 'C'
9164 WHERE CURRENT OF locCmd;
9165
9166 ELSIF losUpdate = 'F' THEN
9167 gosErrorText := 'cancel not possible because request is ' ||
9168 'already finished';
9169 RAISE geoApplicationError;
9170 END IF; -- losUPDATE
9171
9172 CLOSE locCmd;
9173
9174 -- FEATURE 240721
9175 Lcm.NotifyFinishRequest ( pionRequest, 'G', 'F' );
9176
9177 IF lonTransactionId IS NOT NULL THEN
9178 CancelPendingScheduledJob(pionRequest, losUserId, lonContractId, lonTransactionId);
9179 END IF;
9180
9181 -- PN 296713, MCH
9182 -- cancel child requests
9183 IF lonCount > 0 THEN
9184 -- switch the cancelling-main-request mode off to process child requests
9185 gobCancellingMainRequest := FALSE;
9186
9187 FOR i IN 1 .. lonCount
9188 LOOP
9189 lonChildRequest := lotChildRequests( i );
9190 Cancel_Request( lonChildRequest,0 ); -- OUL 341996
9191 -- move the child request to the history table
9192 MoveRequestIntoHistory( lonChildRequest );
9193 END LOOP;
9194
9195 -- switch the cancelling-main-request mode on
9196 gobCancellingMainRequest := TRUE;
9197 END IF;
9198 -- end 296713, MCH
9199 RETURN;
9200
9201EXCEPTION
9202
9203 WHEN OTHERS THEN
9204
9205 -- PN 296713, MCH
9206 -- switch the cancelling-main-request mode on
9207 gobCancellingMainRequest := TRUE;
9208 -- end 296713, MCH
9209
9210 IF gosErrorText IS NULL THEN
9211 gosErrorText := SQLERRM;
9212 END IF;
9213
9214 IF lonContractId IS NOT NULL THEN
9215 gosErrorText := 'Contract: ' || lonContractId || ' ' || gosErrorText;
9216 END IF;
9217
9218 RAISE_APPLICATION_ERROR( -20001,
9219 'Package Contract.Cancel_Request: ' ||
9220 'Request: ' || pionRequest || ' ' ||
9221 gosErrorText );
9222
9223END Cancel_Request;
9224
9225/*
9226** =====================================================================
9227**
9228** Procedure: Finish_Request
9229**
9230** =====================================================================
9231*/
9232PROCEDURE Finish_Request (
9233 pionRequest IN CONTRACT_HISTORY.request%TYPE)
9234IS
9235 CURSOR locCmd IS
9236 SELECT CO_ID,
9237 PLCODE,
9238 REQUEST_UPDATE,
9239 Contract.RequestMarketType(SCCODE),
9240 ACTION_ID,
9241 DATA_1,
9242 DATA_2,
9243 TRANSACTION_ID
9244 --EFFECTIVE_DATE -- 204127 ENU 15-MAY-2001
9245 FROM MDSRRTAB
9246 WHERE REQUEST = pionRequest
9247 FOR UPDATE OF REQUEST_UPDATE;
9248 lonContractId MDSRRTAB.CO_ID%TYPE;
9249 lonPlcode MDSRRTAB.PLCODE%TYPE;
9250 losUpdate MDSRRTAB.REQUEST_UPDATE%TYPE;
9251 lonReqMar NUMBER;
9252 lonActionId MDSRRTAB.action_id%TYPE;
9253 losData1 MDSRRTAB.DATA_1%TYPE;
9254 losData2 MDSRRTAB.DATA_2%TYPE;
9255 lonTransactionId MDSRRTAB.TRANSACTION_ID%TYPE;
9256 lobRequestExists BOOLEAN;
9257 /* 19-Feb-2001 HirschA begin feature 84834 */
9258 lonCountAL NUMBER;
9259 losCoLinkType CONTRACT_ALL.CO_REL_TYPE%TYPE;
9260 lonFetchMainCoId CONTRACT_RELATION.MAIN_CO_ID%TYPE;
9261 -- lodEffectiveDate MDSRRTAB.EFFECTIVE_DATE%TYPE; -- 204127 ENU 15-MAY-2001
9262
9263 isContrTypeNoPas NUMBER; -- 358442
9264
9265 CURSOR locGetLinkedALContracts IS
9266 SELECT MAIN_CO_ID, REL_CO_ID, COR_ACTIVE_DATE
9267 FROM CONTRACT_RELATION
9268 WHERE (MAIN_CO_ID = lonContractId
9269 OR MAIN_CO_ID = (SELECT MAIN_CO_ID
9270 FROM CONTRACT_RELATION
9271 WHERE REL_CO_ID = lonContractId
9272 AND COR_DEACTIVE_DATE IS NULL))
9273 AND COR_DEACTIVE_DATE IS NULL;
9274 CURSOR locContractLinkType IS
9275 SELECT CO_REL_TYPE
9276 FROM CONTRACT_ALL
9277 WHERE CO_ID = lonContractId;
9278 /* end feature 84834 */
9279 -- F83834 #AL# ENU S03 16-MAY-2001 start
9280 CURSOR locContractsToDelete IS
9281 SELECT C.CO_ID, C.CUSTOMER_ID, M.SCNETTYPE, M.SCSLPREFIX, M.CO_ADDR_FLAG
9282 FROM CONTRACT_ALL C, CONTRACT_RELATION R, MPDSCTAB M
9283 WHERE C.CO_ID = R.REL_CO_ID
9284 AND M.SCCODE = C.SCCODE
9285 AND R.MAIN_CO_ID = lonContractId
9286 AND C.CH_STATUS = 'o';
9287 -- F83834 #AL# ENU S03 16-MAY-2001 end
9288 /* begin defect 203433 */
9289 piodEffectiveDate DATE;
9290
9291 CURSOR locPrSpcodeHist IS
9292 SELECT PROFILE_ID, CO_ID, SNCODE, HISTNO
9293 FROM PR_SERV_SPCODE_HIST
9294 WHERE CO_ID = lonContractId
9295 AND REQUEST_ID = pionRequest;
9296
9297 CURSOR locServAttrib IS
9298 SELECT SNCODE,
9299 PROFILE_ID,
9300 SERVICE_ATTRIB_HISTNO,
9301 REQUEST_ID
9302 FROM PR_SERV_ATTRIB_HIST
9303 WHERE CO_ID = lonContractId
9304 AND REQUEST_ID = pionRequest
9305 AND VALID_FROM IS NULL
9306 FOR UPDATE;
9307
9308BEGIN
9309 piodEffectiveDate := GetEffectiveDate( pionRequest );
9310 /* end defect 203433 */
9311 gosErrorText := NULL;
9312 /*
9313 ** Get the corresponding Contract Id and the 3 char command
9314 */
9315 OPEN locCmd;
9316 FETCH locCmd
9317 INTO lonContractId,
9318 lonPlcode,
9319 losUpdate,
9320 lonReqMar,
9321 lonActionId,
9322 losData1,
9323 losData2,
9324 lonTransactionId;
9325 --lodEffectiveDate; -- 204127 ENU 15-MAY-2001
9326 lobRequestExists := locCmd%FOUND;
9327 DBMS_OUTPUT.put_line('Finish Request: ' || TO_CHAR(pionRequest) ||
9328 ' ContractId: ' || TO_CHAR(lonContractId) ||
9329 ' Plcode: ' || TO_CHAR(lonPlcode) ||
9330 ' Market: ' || lonReqMar ||
9331 ' ActionId: ' || lonActionId );
9332
9333 IF NOT lobRequestExists THEN
9334 gosErrorText := 'not found';
9335 RAISE geoApplicationError;
9336 END IF;
9337 IF lonReqMar IS NULL THEN
9338 gosErrorText := 'Request ' || pionRequest || ' with unkown market';
9339 RAISE geoApplicationError;
9340 END IF;
9341 -- Begin lobemeier defect 247526
9342 -- IF lonContractId IS NULL
9343 IF lonContractId IS NULL AND NOT (lonActionId BETWEEN 26 AND 32 OR lonActionId=62) THEN
9344 -- End lobemeier defect 247526
9345 gosErrorText := 'Request ' || pionRequest || ' with no Contract';
9346 RAISE geoApplicationError;
9347 END IF;
9348 IF losUpdate IS NULL THEN
9349
9350 /* End defect 215748_plsql_1*/
9351 /* 19-Feb-2001 HirschA, begin feature 84834 */
9352 /*Alternate Line: Get contract type (Regular='', Main='M', AL='R') */
9353 OPEN locContractLinkType;
9354 FETCH locContractLinkType
9355 INTO losCoLinkType;
9356 CLOSE locContractLinkType;
9357 DBMS_OUTPUT.PUT_LINE(' Contract type : ' || losCoLinkType);
9358 /* end feature 84834 */
9359 /*
9360 ** Now call the right Finish_* procedure. If a wrong command
9361 ** is detected raise an error.
9362 */
9363 IF lonActionId IN (1, 3, 60,15001) THEN
9364 -- F83834 #AL# ENU 12-APR-2001 start
9365 IF lonActionId = 1 AND losCoLinkType = 'R' THEN -- action = activation AL related
9366 UPDATE CONTRACT_RELATION
9367 /* begin defect 203433 */
9368 --SET COR_ACTIVE_DATE = TRUNC( SYSDATE )
9369 --SET COR_ACTIVE_DATE = TRUNC( piodEffectiveDate ) PN 00252812/d:Khv remove TRUNC
9370 SET COR_ACTIVE_DATE = piodEffectiveDate
9371 WHERE REL_CO_ID = lonContractID;
9372 END IF;
9373 -- F83834 #AL# ENU 12-APR-2001 end
9374 Finish_Activate( pionRequest,lonActionId, lonContractID, lonReqMar );
9375
9376 -- FEATURE 240721
9377 IF lonActionId = 1 or lonActionId=60 or lonActionId=15001 THEN
9378 DoContrTariffOptions( pionRequest, lonContractId, 'U', FALSE );
9379 END IF;
9380
9381 ELSIF lonActionid IN (2, 4, 5, 59, 15002) THEN
9382 Finish_Deactivate( pionRequest, lonContractID, lonActionid );
9383 -- F83834 #AL# ENU S03 16-MAY-2001 start
9384 -- if it's an AL main contract deactivation, all onhold contracts must be deleted
9385 IF losCoLinkType = 'R' THEN
9386 -- loop through all onhold related contracts and delete them
9387 FOR xcrContractsToDelete IN locContractsToDelete LOOP
9388 Cust.HelpCancelContract(
9389 xcrContractsToDelete.CO_ID,
9390 xcrContractsToDelete.CUSTOMER_ID,
9391 xcrContractsToDelete.SCNETTYPE,
9392 xcrContractsToDelete.SCSLPREFIX,
9393 xcrContractsToDelete.CO_ADDR_FLAG,
9394 /* begin defect 203433 */
9395 pionRequest);
9396 /* end defect 203433 */
9397 END LOOP;
9398 END IF;
9399 -- F83834 #AL# ENU S03 16-MAY-2001 end
9400
9401 IF lonActionId IN (59, 15002) THEN
9402 Finish_ContractTakeover(pionRequest, lonContractId);
9403 END IF;
9404 ELSIF lonActionId IN (13003, 14003) THEN
9405 IF (lonReqMar = conServiceDriven OR lonReqMar = conPortDriven)
9406 THEN
9407 Finish_ServiceControl( pionRequest,
9408 lonContractID,
9409 lonReqMar,
9410 lonActionId,
9411 losData1 );
9412
9413 ELSIF lonReqMar = conStorMedDriven
9414 THEN
9415 Finish_ChangeSubscription( pionRequest,
9416 lonContractID,
9417 lonPlcode,
9418 lonReqMar,
9419 lonActionId,
9420 losData1,
9421 losData2);
9422 ELSE
9423 gosErrorText := 'unknown market type';
9424 RAISE geoApplicationError;
9425 END IF;
9426 ELSIF lonActionId IN (8, 9, 10, 11, 12, 13001, 14001,
9427 21, 22, 23, 24, 70) THEN
9428 -- Def 66199 MMA pass lonActionId instead of losData2
9429 /* Feature 52832 [Begin] Added new parameter losData1 */
9430 Finish_ServiceControl( pionRequest,
9431 lonContractID,
9432 lonReqMar,
9433 lonActionId,
9434 losData1 );
9435 /* Feature 52832 [ENd] */
9436 -- Feature 402782, action ids 13003 and 14003 added
9437 ELSIF lonActionId IN (6001, 6002, 6003, 6004, 7, 16, 17, 55, 39) THEN
9438 -- PN 00222864-2, 16-Apr-2002, Andreas Billo, for TM-SP chnage this branch must be executed too
9439 Finish_ChangeSubscription( pionRequest,
9440 lonContractID,
9441 lonPlcode,
9442 lonReqMar,
9443 lonActionId,
9444 losData1,
9445 losData2);
9446
9447 --Defect 219471:vov Finish_ServiceControl should be call only for action_id=16
9448 -- PN 00222864-2, 16-Apr-2002, Andreas Billo, for TM-SP chnage this branch must be executed too
9449 IF lonActionId IN (16, 55)
9450 THEN
9451 -- D218972, 11-JAN-2002, Reiner Vollhardt, added call of Finish_ServiceControl
9452 Finish_ServiceControl( pionRequest,
9453 lonContractID,
9454 lonReqMar,
9455 lonActionId,
9456 losData1 );
9457
9458 END IF;
9459
9460 ELSIF lonActionId = 39 THEN
9461 UPDATE PR_SERV_SPCODE_HIST
9462 SET VALID_FROM_DATE = piodEffectiveDate
9463 WHERE CO_ID = lonContractId
9464 AND REQUEST_ID = pionRequest
9465 AND VALID_FROM_DATE IS NULL;
9466
9467 FOR xcr IN locPrSpcodeHist LOOP
9468 UPDATE PROFILE_SERVICE
9469 SET SPCODE_HISTNO = xcr.HISTNO,
9470 REC_VERSION = REC_VERSION + 1
9471 WHERE PROFILE_ID = xcr.PROFILE_ID
9472 AND CO_ID = xcr.CO_ID
9473 AND SNCODE = xcr.SNCODE;
9474 END LOOP;
9475
9476
9477 /* Feature 82630, #UMTS# -- 21.May.2001 -- BEGIN
9478 Change use profile change request is finished */
9479 ELSIF lonActionId = 40 THEN
9480 Finish_ChangeUserProfile( pionRequest,
9481 lonContractID,
9482 lonPlcode,
9483 lonReqMar,
9484 lonActionId,
9485 losData1,
9486 losData2 );
9487 /* Feature 82630, #UMTS# -- 21.May.2001 -- END */
9488
9489 -- BEGIN 82630 #UMTS# ANGER Finish Change of MainDN Flag
9490 ELSIF lonActionId = 41 THEN
9491 Finish_ChangeMainFlag( pionRequest,
9492 lonContractID );
9493 -- END 82630 #UMTS# ANGER
9494
9495
9496 -- FEATURE 240721
9497 ELSIF lonActionId IN (44, 45) THEN
9498 FOR xcrServAttrib IN locServAttrib LOOP
9499 UPDATE PROFILE_SERVICE
9500 SET ATTRIB_HISTNO = xcrServAttrib.SERVICE_ATTRIB_HISTNO
9501 WHERE CO_ID = lonContractId
9502 AND PROFILE_ID = xcrServAttrib.PROFILE_ID
9503 AND SNCODE = xcrServAttrib.SNCODE;
9504
9505 UPDATE PR_SERV_ATTRIB_HIST
9506 SET VALID_FROM = piodEffectiveDate
9507 WHERE CO_ID = lonContractId
9508 AND PROFILE_ID = xcrServAttrib.PROFILE_ID
9509 AND SNCODE = xcrServAttrib.SNCODE
9510 AND REQUEST_ID = xcrServAttrib.REQUEST_ID;
9511 END LOOP;
9512
9513 -- FEATURE 240721
9514 ELSIF lonActionId = 35 THEN
9515 DoContrTariffOptions( pionRequest, lonContractID, 'U', TRUE );
9516 -- Feature 276992: Move from dummy customer to anonymous customer
9517 ELSIF lonActionId = 63 THEN
9518 Finish_ChangeLifeCycle(pionRequest,lonContractID);
9519 -- FEATURE 283543 USC
9520 -- FEATURE 276992 / PN 00293425 AV
9521 ELSIF lonActionId = 67 THEN
9522 Finish_ChangeAdvanceAccCharge(pionRequest);
9523 -- FEATURE 276992 / PN 00293425 AV
9524 -- FEATURE 283543 USC
9525 ELSIF lonActionId IN (68, 30004) THEN
9526 Finish_ChangeIVRLanguage(lonContractID);
9527 -- FEATURE 283543 USC
9528
9529 -- FEATURE 287342 OH
9530 ELSIF lonActionId = 69 THEN
9531 Finish_Rating_Option(pionRequest);
9532 -- FEATURE 287342 OH
9533
9534
9535 ELSIF lonActionId IN (18, 20, 20001, 20002) THEN
9536 Finish_ChangeMicroCell( pionRequest, lonContractID, lonActionId, losData1);
9537 ELSIF lonActionId = 19 THEN
9538 Finish_DeleteMicroCell( pionRequest, lonContractID);
9539 ELSIF lonActionId = 30001 THEN
9540 Finish_ChangeExpiryDate(pionRequest, lonContractID, lonReqMar);
9541 ELSIF lonActionId = 30002 THEN
9542 Finish_SetPromoPlanDate(pionRequest, lonContractID, lonReqMar);
9543
9544
9545 ELSIF lonActionId NOT IN (34, 35, 36, 37, 38, 42, 43, 52, 53, 54, 56, 57, 58, 61, 62, 71, 30003, 30005, 30006, 30007, 30008, 30009, 30010, 30011) THEN
9546 -- Feature 83597 (SI)
9547 -- Action IDs refer only to rating, so nothing has to be done on database
9548 -- other Action IDs are not known and should lead to an error message
9549 gosErrorText := 'unknown action identifier ' || lonActionId;
9550 RAISE geoApplicationError;
9551 END IF;
9552
9553 --defect 00240066 KW
9554 --defect 00234740 KW
9555 --IF lonActionId = 3 THEN
9556 -- Finish_Reactivate ( pionRequest, lonContractID, lonReqMar );
9557 --END IF;
9558 --end defect 00234740 KW
9559
9560 --
9561 -- process concurrent requests
9562 -- Feautre 276491
9563 Handleconcurrentrequest(pionRequest, lonContractID, lonActionId);
9564
9565
9566 -- 00377727_E08_U09
9567 Finish_ContractPamScheme (lonContractID , pionRequest, lonActionId);
9568
9569
9570 IF lonTransactionId IS NOT NULL THEN
9571 HandlePendingScheduledJob(lonContractID, lonTransactionId);
9572 END IF;
9573
9574
9575 UPDATE MDSRRTAB
9576 SET REQUEST_UPDATE = 'F'
9577 WHERE CURRENT OF locCmd;
9578 ELSIF losUpdate = 'N' THEN -- do no updates THEN
9579 UPDATE MDSRRTAB
9580 SET REQUEST_UPDATE = 'F'
9581 WHERE CURRENT OF locCmd;
9582 ELSIF losUpdate = 'C' THEN
9583 gosErrorText := 'finish not possible because request is ' ||
9584 'already cancelled';
9585 RAISE geoApplicationError;
9586 END IF; -- losUPDATE
9587 CLOSE locCmd;
9588
9589 -- FEATURE 240721
9590 Lcm.NotifyFinishRequest ( pionRequest, 'G', 'S' );
9591
9592 RETURN;
9593EXCEPTION
9594WHEN OTHERS THEN
9595 IF gosErrorText IS NULL THEN
9596 gosErrorText := SQLERRM;
9597 END IF;
9598 IF lonContractId IS NOT NULL THEN
9599 gosErrorText := 'Contract: ' || lonContractId || ' ' ||
9600 gosErrorText;
9601 END IF;
9602 RAISE_APPLICATION_ERROR( -20001,
9603 'Package Contract.Finish_Request: ' ||
9604 'Request: ' || pionRequest ||' ' ||
9605 gosErrorText );
9606END Finish_Request;
9607/*
9608** =====================================================================
9609**
9610** Procedure: CopyServices
9611**
9612** Internal procedure to copy services. The procedure
9613** handles tcurrently only one type:
9614**
9615** a) Copy services for a rateplan change
9616**
9617** Note: Till BSCS 4.0.1 CopyServices could also be used
9618** for a DN-Replace. This functionality is now removed.
9619** #UMTS# 82630 who calls this ? Comment out to compile
9620**
9621** This function is only called by CTH via tarrifs.ChangeRateplan
9622** =====================================================================
9623*/
9624PROCEDURE CopyServices (
9625 -- Contract ID
9626 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
9627 -- =================== Rateplan change =====================
9628 -- the new tariff model
9629 pionTmcode IN CONTRACT_ALL.tmcode%TYPE,
9630 -- size of the following arrays (sncode, new spcode)
9631 pionNumberOfServices IN NUMBER,
9632 -- List of services, where the spcode must be changed
9633 -- (old spcode is not necessary
9634 pianServices IN tanNumberArray,
9635 -- List of profiles to identify the services --> ANGER (New: different number of arguments)
9636 -- pianProfiles IN tanNumberArray,
9637 -- List of new service packages
9638 pianNewPackages IN tanNumberArray,
9639
9640 --** Following Retention modes are allowed:
9641 --** 'R': Reserve directory number
9642 --** 'F': Free directory number
9643 --** 'I': Ignore directory number
9644 --** 'N': do Not change the rateplan for this contract
9645
9646 piosRetentionMode IN VARCHAR2,
9647 -- =================== Output ==============================
9648
9649 --** Return how many services are copied. If a requirement
9650 --** of the caller is that at least one service must be copied
9651 --** the caller can create an error if 0 is returned
9652
9653 poonServicesCopied OUT NUMBER,
9654 --** Return 1 if the rateplan was changed successfully.
9655 --** If losRetentionMode is 'N' and a deactivated service with
9656 --** an assigned directory number is found, 0 is returned.
9657
9658 poonRateplanChanged OUT NUMBER)
9659IS
9660 -- local variables for SNCode and ProfileID --> ANGER
9661 -- Begin defect 213615
9662 -- lonSNCode PROFILE_SERVICE.SNCODE%TYPE;
9663 -- End defect 213615
9664 -- lonProfileID PROFILE_SERVICE.PROFILE_ID%TYPE;
9665
9666 /* -- Cursor for all assigned Services
9667 -- feat 55992 add PRM_VALUE_ID, remove CS_SPARAM1 and CS_PENDING_PARAM
9668 CURSOR locServices
9669 IS
9670 SELECT
9671 CO_ID,
9672 TMCODE,
9673 SPCODE,
9674 SNCODE,
9675 CS_SEQNO,
9676 CS_CHANNEL_NUM,
9677 CS_STAT_CHNG,
9678 CS_ON_CBB,
9679 CS_DATE_BILLED,
9680 CS_REQUEST,
9681 SN_CLASS,
9682 CS_OVW_SUBSCR,
9683 CS_SUBSCRIPT,
9684 CS_OVW_ACCESS,
9685 CS_OVW_ACC_PRD,
9686 CS_ACCESS,
9687 CS_PENDING_STATE,
9688 CS_CHANNEL_EXCL,
9689 CS_OVW_ACC_FIRST,
9690 SUBPAYER,
9691 USGPAYER,
9692 ACCPAYER,
9693 CS_ENTDATE,
9694 CS_SRV_TYPE,
9695 CS_ADV_CHARGE,
9696 CS_DIS_SUBSCR,
9697 CS_OVW_LAST,
9698 INSTALL_DATE,
9699 TRIAL_END_DATE,
9700 CS_ADV_CHARGE_END_DATE,
9701 PRM_VALUE_ID,
9702 CURRENCY,
9703 CS_ADV_CHARGE_CURRENCY
9704 FROM CONTR_SERVICES
9705 WHERE CO_ID = pionContractId
9706 AND CS_SEQNO = ( SELECT MAX(CS.CS_SEQNO)
9707 FROM CONTR_SERVICES CS
9708 WHERE CS.CO_ID = pionContractId)
9709 FOR UPDATE;*/
9710
9711 -- Cursor for entries in PR_SERV_SPCODE_HIST --> ANGER
9712 CURSOR locSPcodeHist IS
9713 SELECT CO_ID,
9714 PROFILE_ID,
9715 SNCODE,
9716 HISTNO,
9717 SPCODE,
9718 TRANSACTIONNO,
9719 VALID_FROM_DATE,
9720 ENTRY_DATE,
9721 REQUEST_ID
9722 FROM PR_SERV_SPCODE_HIST PSH
9723 WHERE CO_ID = pionContractId
9724 -- AND PROFILE_ID = lonProfileID
9725 -- Begin defect 213615
9726 -- AND SNCODE = lonSNCode
9727 -- End defect 213615
9728 AND HISTNO = (SELECT SPCODE_HISTNO
9729 FROM PROFILE_SERVICE PS
9730 WHERE PS.CO_ID = PSH.CO_ID
9731 AND PS.PROFILE_ID = PSH.PROFILE_ID
9732 AND PS.SNCODE = PSH.SNCODE)
9733 FOR UPDATE;
9734 -- Cursor for the assigned bearer capabilities
9735 /* CURSOR locBearer (pconCoID CONTR_SERVICES.CO_ID%TYPE,
9736 pconSncode CONTR_SERVICES.SNCODE%TYPE)
9737 IS
9738 SELECT DN_ID
9739 FROM CONTR_SERVICES_CAP
9740 WHERE CO_ID = pconCoID
9741 AND SNCODE = pconSncode
9742 AND CS_DEACTIV_DATE IS NULL
9743 AND DN_ID IS NOT NULL;*/
9744
9745 -- Cursor for the assigned directory number
9746 CURSOR locDirectoryNumber (pconDnId DIRECTORY_NUMBER.DN_ID%TYPE) IS
9747 SELECT DN_STATUS
9748 FROM DIRECTORY_NUMBER
9749 WHERE DN_ID = pconDnId
9750 FOR UPDATE;
9751 lobDoCopyServices BOOLEAN := TRUE;
9752 -- lonNewTmcode CONTR_SERVICES.TMCODE%TYPE; --> ANGER
9753 lonNewTmcode RATEPLAN_HIST.TMCODE%TYPE;
9754 -- lonNewSpcode CONTR_SERVICES.SPCODE%TYPE; --> ANGER
9755 lonNewSpcode PR_SERV_SPCODE_HIST.SPCODE%TYPE;
9756 -- losNewCSStatChng CONTR_SERVICES.CS_STAT_CHNG%TYPE; --> ANGER
9757 losNewStatusId VARCHAR2(7);
9758 -- used to fetch the next free history number in PR_SERV_SPCODE_HIST -->ANGER
9759 lonNewHistNo PR_SERV_SPCODE_HIST.HISTNO%TYPE;
9760 -- used to fetch the next free transaction number -->ANGER
9761 lonNewTransNo PR_SERV_SPCODE_HIST.TRANSACTIONNO%TYPE;
9762 -- If a service is copied (insert into CONTR_SERVICES) this
9763 -- variable is incremented. For an active or suspended
9764 -- contract at least one service must be copied.
9765 lonCountInserts NUMBER := 0;
9766 lcrDirectoryNumber locDirectoryNumber%ROWTYPE;
9767
9768 /*--** The following bool variable is set to TRUE if a deactivated
9769 --** ermes-services is not copied and for this service a channel
9770 --** is assigned. After the Services are copied the fields in
9771 --** PORT (PORT_CS_CHANNLE[_EXCL] must be recalculated.
9772 lobRecalcErmesPort BOOLEAN := FALSE;*/
9773 -- Feature 202820_1 Rate Plans: Most RatePlan changes will be provisioned. Exceptions
9774 -- are RatePlan changes that occur when the contract is onHold. Check the pending_tmcode
9775 -- to determine if the RatePlan change is provisioned.
9776 lonPendingTMCode CONTRACT_ALL.PENDING_TMCODE%TYPE;
9777BEGIN
9778 -- DBMS_OUTPUT.put_line('Enter CopyServices');
9779 IF pionTmcode IS NULL THEN
9780 RAISE_APPLICATION_ERROR( -20001,
9781 'Package Contract.CopyServices: ' ||
9782 'TMCODE is NULL');
9783 END IF;
9784 SAVEPOINT StartChange;
9785 poonRateplanChanged := 0;
9786
9787 -- Get the next free Transaction number --> ANGER
9788 -- PN 253215/d
9789 --SELECT PR_SERV_TRANS_NO_SEQ.NEXTVAL
9790 --INTO lonNewTransNo
9791 --FROM DUAL;
9792 Nextfree.GetValue('PR_SERV_TRANS_NO', lonNewTransNo);
9793
9794 -- Feature 202820_1 Rate Plans - Determine if RatePlan change is provisioned
9795 SELECT PENDING_TMCODE
9796 INTO lonPendingTMCode
9797 FROM CONTRACT_ALL
9798 WHERE CO_ID = pionContractId;
9799
9800 FOR xcrService IN locSPcodeHist LOOP
9801 EXIT WHEN locSPcodeHist%NOTFOUND;
9802
9803 -- DBMS_OUTPUT.put_line(' Service: ' || xcrService.SNCODE );
9804 EXIT WHEN NOT lobDoCopyServices;
9805
9806 -- Get the next free History number --> ANGER
9807
9808 -- lonProfileId := pianProfiles(lonCountInserts);
9809 -- Begin defect 213615
9810 -- lonSNCode := pianServices(lonCountInserts);
9811 -- End defect 213615
9812
9813 -- PN 253215/d
9814 --SELECT PR_SERV_SPCODE_HISTNO_SEQ.NEXTVAL
9815 --INTO lonNewHistNo
9816 --FROM DUAL;
9817 Nextfree.GetValue('PR_SERV_SPCODE_HISTNO', lonNewHistNo);
9818
9819 -- A Rateplan change must be performed
9820 lonNewTmcode := pionTmcode;
9821 lonNewSpcode := xcrService.SPCODE;
9822
9823 -- check if this service must be modified
9824 -- (new service package)
9825 FOR xonIdx IN 1 .. pionNumberOfServices LOOP
9826 BEGIN
9827 IF pianServices(xonIdx) = xcrService.SNCODE THEN
9828 lonNewSpcode := pianNewPackages(xonIdx);
9829 EXIT;
9830 END IF;
9831 EXCEPTION
9832 WHEN OTHERS THEN -- e.g. NO_DATA_FOUND
9833 gosErrorText := 'passed arrays are invalid: ' ||
9834 SQLCODE || '-' || SQLERRM;
9835 RAISE geoApplicationError;
9836 END;
9837 END LOOP; -- xonIdx (all entries in the arrays
9838
9839 /*--** The services must be duplicated and the new entry
9840 --** must be modified.
9841 --** (the case status=deactivate was changes with defect 30793,
9842 --** now the handling of these services is adapted to CA)
9843 --
9844 -- DBMS_OUTPUT.put_line(' update');
9845 --
9846 -- First the old entries in CONTR_SERVICES must
9847 -- be updated.
9848 --
9849 BEGIN
9850
9851 -- TODO: Do not delete the CS_PENDING* fields
9852 -- for a directory number replacement
9853
9854 IF xcrService.CS_STAT_CHNG IS NULL
9855 THEN
9856 UPDATE CONTR_SERVICES
9857 SET CS_PENDING_STATE = NULL,
9858 REC_VERSION = REC_VERSION + 1
9859 WHERE CURRENT OF locServices;
9860 ELSE
9861 UPDATE CONTR_SERVICES
9862 SET CS_STAT_CHNG = Contract.TMChange_CSStatChng(
9863 CS_STAT_CHNG,
9864 'old'),
9865 CS_PENDING_STATE = NULL,
9866 REC_VERSION = REC_VERSION + 1
9867 WHERE CURRENT OF locServices;
9868 END IF;
9869 EXCEPTION
9870 WHEN OTHERS
9871 THEN
9872 gosErrorText := 'Update (status change) of ' ||
9873 'CONTR_SERVICES failed. ' || SQLERRM;
9874 RAISE geoApplicationError;
9875 END; -- update of contr_services
9876 -- DBMS_OUTPUT.put_line(' insert');
9877
9878 -- Second we must copy the services
9879
9880 BEGIN
9881 losNewCSStatChng := TMChange_CSStatChng(xcrService.CS_STAT_CHNG,'new');
9882 INSERT INTO CONTR_SERVICES (
9883 CO_ID,
9884 TMCODE,
9885 SPCODE,
9886 SNCODE,
9887 CS_SEQNO,
9888 ------
9889 CS_CHANNEL_NUM,
9890 CS_STAT_CHNG,
9891 CS_ON_CBB,
9892 CS_DATE_BILLED,
9893 ------
9894 CS_REQUEST,
9895 SN_CLASS,
9896 CS_OVW_SUBSCR,
9897 CS_SUBSCRIPT,
9898 CS_OVW_ACCESS,
9899 ------
9900 CS_OVW_ACC_PRD,
9901 CS_ACCESS,
9902 CS_PENDING_STATE,
9903 CS_CHANNEL_EXCL,
9904 ------
9905 CS_OVW_ACC_FIRST,
9906 SUBPAYER,
9907 USGPAYER,
9908 ACCPAYER,
9909 CS_ENTDATE,
9910 ------
9911 CS_SRV_TYPE,
9912 CS_ADV_CHARGE,
9913 CS_DIS_SUBSCR,
9914 CS_OVW_LAST,
9915 INSTALL_DATE,
9916 ------
9917 TRIAL_END_DATE,
9918 CS_ADV_CHARGE_END_DATE,
9919 PRM_VALUE_ID,
9920 CURRENCY,
9921 CS_ADV_CHARGE_CURRENCY,
9922 ------
9923 REC_VERSION)
9924 VALUES (
9925 xcrService.CO_ID,
9926 lonNewTmcode,
9927 lonNewSpcode,
9928 xcrService.SNCODE,
9929 xcrService.CS_SEQNO + 1,
9930 ------
9931 xcrService.CS_CHANNEL_NUM,
9932 losNewCSStatChng,
9933 xcrService.CS_ON_CBB,
9934 xcrService.CS_DATE_BILLED,
9935 ------
9936 xcrService.CS_REQUEST,
9937 xcrService.SN_CLASS,
9938 xcrService.CS_OVW_SUBSCR,
9939 xcrService.CS_SUBSCRIPT,
9940 xcrService.CS_OVW_ACCESS,
9941 ------
9942 xcrService.CS_OVW_ACC_PRD,
9943 xcrService.CS_ACCESS,
9944 xcrService.CS_PENDING_STATE,
9945 xcrService.CS_CHANNEL_EXCL,
9946 ------
9947 xcrService.CS_OVW_ACC_FIRST,
9948 xcrService.SUBPAYER,
9949 xcrService.USGPAYER,
9950 xcrService.ACCPAYER,
9951 xcrService.CS_ENTDATE,
9952 ------
9953 xcrService.CS_SRV_TYPE,
9954 -- ISC defect 59013/d
9955 -- xcrService.CS_ADV_CHARGE,
9956 NULL,
9957 -- 59013/d
9958 xcrService.CS_DIS_SUBSCR,
9959 xcrService.CS_OVW_LAST,
9960 xcrService.INSTALL_DATE,
9961 ------
9962 xcrService.TRIAL_END_DATE,
9963 xcrService.CS_ADV_CHARGE_END_DATE,
9964 xcrService.PRM_VALUE_ID,
9965 -- ISC defect 71979
9966 xcrService.CURRENCY,
9967 -- KJB Defect 75916
9968 -- xcrService.CS_ADV_CHARGE_CURRENCY,
9969 NULL,
9970 -- 75916
9971 ------
9972 1);*/
9973 BEGIN
9974 /* Begin PN 231226 : RS
9975 INSERT INTO PR_SERV_SPCODE_HIST (
9976 CO_ID,
9977 PROFILE_ID,
9978 SNCODE,
9979 HISTNO,
9980 SPCODE,
9981 TRANSACTIONNO,
9982 VALID_FROM_DATE,
9983 ENTRY_DATE,
9984 REQUEST_ID)
9985 VALUES (
9986 xcrService.CO_ID,
9987 xcrService.PROFILE_ID,
9988 xcrService.SNCODE,
9989 lonNewHistNo,
9990 lonNewSpcode,
9991 lonNewTransNo,
9992 xcrService.VALID_FROM_DATE,
9993 xcrService.ENTRY_DATE,
9994 xcrService.REQUEST_ID); */
9995 INSERT INTO PR_SERV_SPCODE_HIST (
9996 CO_ID,
9997 PROFILE_ID,
9998 SNCODE,
9999 HISTNO,
10000 SPCODE,
10001 TRANSACTIONNO,
10002 VALID_FROM_DATE,
10003 ENTRY_DATE,
10004 REQUEST_ID,
10005 REC_VERSION)
10006 VALUES (
10007 xcrService.CO_ID,
10008 xcrService.PROFILE_ID,
10009 xcrService.SNCODE,
10010 lonNewHistNo,
10011 lonNewSpcode,
10012 lonNewTransNo,
10013 SYSDATE,
10014 SYSDATE,
10015 NULL,
10016 1);
10017 /* End PN 231226 : RS */
10018
10019 -- Feature 202820_1 Rate Plans: If the RatePlan change occurs when the contract is
10020 -- onHold, then no provisioning occurs and the change is immediate. The pending
10021 -- RatePlan changes are completed in the Finish_ChangeTM procedure.
10022 IF lonPendingTMCODE IS NULL THEN
10023 UPDATE PROFILE_SERVICE
10024 SET SPCODE_HISTNO = lonNewHistNo,
10025 REC_VERSION = REC_VERSION + 1
10026 WHERE CO_ID = xcrService.CO_ID
10027 AND PROFILE_ID = xcrService.PROFILE_ID
10028 AND SNCODE = xcrService.SNCODE;
10029 END IF;
10030 lonCountInserts := lonCountInserts + 1;
10031 EXCEPTION
10032 WHEN OTHERS THEN
10033 gosErrorText := 'Insert into PR_SERV_SPCODE_HIST failed. ' ||
10034 'sncode=' || xcrService.SNCODE || ' ' ||
10035 'profile=' || xcrService.PROFILE_ID || ' ' ||
10036 'spcode=' || lonNewSpcode || '. ' ||
10037 SQLERRM;
10038 RAISE geoApplicationError;
10039 END;
10040 END LOOP; -- xcrService
10041
10042 IF lobDoCopyServices THEN
10043 poonServicesCopied := lonCountInserts;
10044 poonRateplanChanged := 1;
10045 /*IF lobRecalcErmesPort = TRUE
10046 THEN
10047 Ermes.UpdateChannelsOfContract(pionContractId );
10048 END IF;*/
10049 ELSE
10050 ROLLBACK TO SAVEPOINT StartChange;
10051 poonServicesCopied := 0;
10052 poonRateplanChanged := 0;
10053 END IF; -- DoCopyServices
10054END CopyServices;
10055/*
10056** =====================================================================
10057**
10058** Procedure: CopyServicesTMChange
10059** #UMTS# 82630 who uses this??
10060** =====================================================================
10061*/
10062
10063PROCEDURE CopyServicesTMChange (
10064 -- Contract ID
10065 pionContractId IN CONTRACT_HISTORY.co_id%TYPE,
10066 -- the new tariff model
10067 pionNewTmcode IN CONTRACT_ALL.tmcode%TYPE,
10068 -- size of the following arrays (sncode, new spcode)
10069 pionNumberOfServices IN NUMBER,
10070 -- List of services
10071 pianServices IN tanNumberArray,
10072 -- List of profiles to identify the services --> ANGER (New: different number of arguments)
10073 -- pianProfiles IN tanNumberArray,
10074 -- List of new service packages
10075 pianNewPackages IN tanNumberArray,
10076
10077 -- Following Retention modes are allowed:
10078 -- 'R': Reserve directory number
10079 -- 'F': Free directory number
10080 -- 'I': Ignore directory number
10081 -- 'N': do Not change the rateplan for this contract
10082 --
10083 piosRetentionMode IN VARCHAR2,
10084 poonServicesCopied OUT NUMBER,
10085
10086 -- Return 1 if the rateplan was changed successfully.
10087 -- If losRetentionMode is 'N' and a deactivated service with
10088 -- an assigned directory number is found, 0 is returned.
10089 poonRateplanChanged OUT NUMBER)
10090IS
10091 lonRateplanChanged NUMBER;
10092 lonServicesCopied NUMBER;
10093BEGIN
10094 CopyServices(
10095 pionContractId,
10096 pionNewTmcode,
10097 pionNumberOfServices,
10098 pianServices,
10099 -- pianProfiles,
10100 pianNewPackages,
10101 piosRetentionMode,
10102 -- out
10103 lonServicesCopied,
10104 lonRateplanChanged
10105 );
10106 poonServicesCopied := lonServicesCopied;
10107 poonRateplanChanged := lonRateplanChanged;
10108END CopyServicesTMChange;
10109
10110
10111/*
10112** =====================================================================
10113**
10114** Procedure: InsertRateplanHist
10115**
10116** =====================================================================
10117*/
10118PROCEDURE InsertRateplanHist (
10119 -- Contract ID
10120pionContractId IN RATEPLAN_HIST.co_id%TYPE,
10121
10122pionRequest IN CONTRACT_HISTORY.request%TYPE) /*Defect 229253*/
10123IS
10124 -- used to fetch the next free sequence number in RATEPLAN_HIST
10125 lonNewSeqNo RATEPLAN_HIST.seqno%TYPE;
10126 -- used to fetch the new tariff model code in CONTRACT_ALL
10127 lonNewTMcode CONTRACT_ALL.tmcode%TYPE;
10128 -- Defect 222071 IAL Start: used to fetch the last status of contract in CONTRACT_ALL
10129 losCO_Status CONTRACT_ALL.CH_STATUS%TYPE;
10130 -- Defect 222071 IAL End
10131 -- Defect 229253 vovkodav
10132 lodTmcodeDate RATEPLAN_HIST.TMCODE_DATE%TYPE;
10133
10134 piodEffectiveDate DATE;
10135
10136 -- D236835 Uwe Meier 06.May.03
10137 loiCountTmcodeDate INTEGER;
10138
10139BEGIN
10140 /* Begin Defect 229253 vovkodav */
10141
10142 piodEffectiveDate := GetEffectiveDate( pionRequest );
10143
10144 IF piodEffectiveDate IS NOT NULL
10145 THEN
10146 lodTmcodeDate := piodEffectiveDate;
10147 ELSE
10148 lodTmcodeDate := SYSDATE;
10149 END IF;
10150 /* End Defect 229253 vovkodav */
10151 /*
10152 ** Get next free SeqNo in Rateplan History for the contract.
10153 */
10154 SELECT NVL(MAX(SEQNO), 0) + 1
10155 INTO lonNewSeqNo
10156 FROM RATEPLAN_HIST
10157 WHERE CO_ID = pionContractId;
10158
10159 /* begin D236835 Uwe Meier 30.04.03*/
10160 /* We shift the tmcode_date one second into the past.
10161 Otherwise, during a combined contract takeover and rateplan change with CAS,
10162 it is possible that there is a contract with two rateplans which are valid
10163 from exactly the same moment. Since the TEH does not take into account
10164 the sequence number but only the date, it is not determined which of both
10165 rateplans TEH will select. By shifting the old rateplan one second into
10166 the past, this problem is solved */
10167 IF lonNewSeqNo > 1
10168 THEN
10169 BEGIN
10170 SELECT COUNT(*)
10171 INTO loiCountTmcodeDate
10172 FROM RATEPLAN_HIST
10173 WHERE CO_ID = pionContractId
10174 AND TMCODE_DATE = lodTmcodeDate;
10175 EXCEPTION
10176 WHEN OTHERS THEN
10177 gosErrorText := 'InsertRateplanHist SELECT FROM RATEPLAN_HIST / CO_ID: ' || pionContractID;
10178 RAISE geoApplicationError;
10179 END;
10180
10181 IF loiCountTmcodeDate > 0
10182 THEN
10183 BEGIN
10184 UPDATE RATEPLAN_HIST
10185 SET TMCODE_DATE = TMCODE_DATE - 1/86400
10186 WHERE CO_ID = pionContractId
10187 AND TMCODE_DATE = lodTmcodeDate
10188 AND SEQNO = lonNewSeqNo -1;
10189 EXCEPTION
10190 WHEN OTHERS THEN
10191 gosErrorText := 'InsertRateplanHist UPDATE RATEPLAN_HIST SET TMCODE_DATE=TMCODE_DATE / CO_ID: ' || pionContractID;
10192 RAISE geoApplicationError;
10193 END;
10194 END IF;
10195 END IF;
10196 /* end D236835 */
10197
10198 /*
10199 ** Get new tariff model code for the contract and get the last Status for the contract.
10200 */
10201 SELECT TMCODE,CH_STATUS
10202 INTO lonNewTmcode,losCO_Status
10203 FROM CONTRACT_ALL
10204 WHERE CO_ID = pionContractId;
10205 /* Begin defect 85598*/
10206 /* PN 214455_1 - Each rateplan change is recorded. No reason to update the RATEPLAN_HIST for same day. */
10207 --UPDATE RATEPLAN_HIST
10208 -- SET TMCODE = lonNewTmcode
10209 -- WHERE CO_ID = pionContractId
10210 -- AND TMCODE_DATE = TRUNC(SYSDATE,'DD');
10211 --IF SQL%NOTFOUND THEN
10212 /* End defect 85598*/
10213 --Insert entry Feature 56396_ca MBE: insert trunc(sysdate,'DD') instead of sysdate
10214 BEGIN
10215
10216 -- Begin PN00265252
10217 --Insert entry if tmcode is set
10218 IF lonNewTmcode IS NOT NULL THEN
10219 -- End PN00265252
10220
10221 --Insert entry if status of the contract not "Onhold"
10222 IF losCO_Status != 'o'
10223 THEN
10224
10225
10226 -- Begin PN 00264424 AV
10227 IF (pionRequest IS NOT NULL AND pionRequest >0)
10228 THEN
10229 INSERT INTO RATEPLAN_HIST
10230 (co_id,
10231 seqno,
10232 tmcode,
10233 tmcode_date,
10234 userlastmod,
10235 rec_version,
10236 REQUEST_ID)
10237 SELECT
10238 pionContractId,
10239 lonNewSeqNo,
10240 lonNewTmcode,
10241 lodTmcodeDate,
10242 NVL(USERID,USER),
10243 1,
10244 pionRequest FROM MDSRRTAB WHERE REQUEST=pionRequest;
10245 ELSE
10246 -- if no request is generated for TM change (i.e. by CTH module)then RATEPLAN_HIST.REQUEST_ID is NULL
10247 INSERT INTO RATEPLAN_HIST
10248 (co_id,
10249 seqno,
10250 tmcode,
10251 tmcode_date,
10252 userlastmod,
10253 rec_version)
10254 VALUES
10255 (pionContractId,
10256 lonNewSeqNo,
10257 lonNewTmcode,
10258 lodTmcodeDate,
10259 'CTH',
10260 1);
10261 END IF;
10262 -- End PN 00264424 AV
10263
10264
10265 END IF; --/* To Defect 222071 IAL End*/
10266
10267 -- Begin PN00265252
10268 END IF;
10269 -- End PN00265252
10270
10271 EXCEPTION
10272 WHEN OTHERS THEN
10273 RAISE_APPLICATION_ERROR(
10274 -20001,
10275 'Package Contract: Insert into RATEPLAN_HIST failed. Error: ' ||
10276 SQLERRM);
10277 END;
10278 --END IF;
10279END InsertRateplanHist;
10280/* Feature 52832-Begin
10281*/
10282/*
10283** =====================================================================
10284**
10285** Procedure: UPD_RESPONSE_VAL_FR_SWITCH
10286**
10287** =====================================================================
10288*/
10289PROCEDURE UPD_RESPONSE_VAL_FR_SWITCH(
10290 -- Unique Request Id for this invocation
10291 pionRequest IN CONTRACT_HISTORY.request%TYPE,
10292 -- Contract ID
10293 pionContractId IN RATEPLAN_HIST.co_id%TYPE)
10294IS
10295 CURSOR locContr_Services IS
10296 SELECT DISTINCT PRM_VALUE_ID
10297 FROM PROFILE_SERVICE PS , PR_SERV_STATUS_HIST PSH
10298 WHERE PS.CO_ID = pionContractId
10299 AND PS.CO_ID = PSH.CO_ID
10300 AND PS.PROFILE_ID = PSH.PROFILE_ID
10301 AND PS.SNCODE = PSH.SNCODE
10302 AND PSH.REQUEST_ID=pionRequest;
10303 /* Start Defect 73569 : Added 1 parameter to cursor locGMD_response
10304 and an extra where condition PRM_VALUE_ID = pinPrmValueId */
10305 CURSOR locGMD_response (pinPrmValueId IN PROFILE_SERVICE.PRM_VALUE_ID%TYPE ) IS
10306 SELECT PRM_PARENT_ID,
10307 PRM_LEVEL,
10308 PRM_SEQNO,
10309 PRM_VALUE_SEQNO,
10310 PRM_SUBTYPE_ID,
10311 PRM_SIBLING_SEQNO,
10312 PRM_VALUES
10313 FROM GMD_DETAILED_RESPONSE
10314 WHERE REQUEST = pionRequest
10315 AND PRM_VALUE_ID = pinPrmValueId
10316 AND RESPONSE_PRM_IND = 'Y';
10317 /* End Defect 73569 */
10318 CURSOR locPrmValue (pinPrmValueId IN PROFILE_SERVICE.PRM_VALUE_ID%TYPE,
10319 pisPRM_SUBTYPE_ID IN GMD_DETAILED_RESPONSE.PRM_SUBTYPE_ID%TYPE,
10320 pisPRM_SIBLING_SEQNO IN GMD_DETAILED_RESPONSE.PRM_SIBLING_SEQNO%TYPE,
10321 pisPRM_SEQNO IN GMD_DETAILED_RESPONSE.PRM_SEQNO%TYPE,
10322 pisPRM_VALUE_SEQNO IN GMD_DETAILED_RESPONSE.PRM_VALUE_SEQNO%TYPE,
10323 pisPRM_PARENT_ID IN GMD_DETAILED_RESPONSE.PRM_PARENT_ID%TYPE,
10324 pisPRM_LEVEL IN GMD_DETAILED_RESPONSE.PRM_LEVEL%TYPE) IS
10325 SELECT PARAMETER_ID
10326 FROM PARAMETER_VALUE
10327 WHERE PRM_VALUE_ID = TO_NUMBER(pinPrmValueId)
10328 AND PRM_NO = TO_NUMBER(pisPRM_SUBTYPE_ID )
10329 AND SIBLING_SEQNO = TO_NUMBER(pisPRM_SIBLING_SEQNO)
10330 AND COMPLEX_SEQNO = TO_NUMBER(pisPRM_SEQNO)
10331 AND VALUE_SEQNO = TO_NUMBER(pisPRM_VALUE_SEQNO )
10332 AND PARENT_SEQNO = TO_NUMBER(pisPRM_PARENT_ID)
10333 AND COMPLEX_LEVEL = TO_NUMBER(pisPRM_LEVEL);
10334 lcrGMD_response locGMD_response%ROWTYPE;
10335 lonPRM_VALUE_ID PROFILE_SERVICE.PRM_VALUE_ID%TYPE;
10336 -- [start] Defect 70610
10337 lonSccode CONTRACT_ALL.SCCODE%TYPE;
10338 losDataTypeCode DATA_TYPE.DATA_TYPE_CODE%TYPE;
10339 lonParameterID PARAMETER_VALUE.PARAMETER_ID%TYPE;
10340 -- [end] Defect 70610
10341BEGIN
10342 -- [start ] defect 70610
10343 /* Get the market of the contract */
10344 SELECT SCCODE INTO lonSccode
10345 FROM CONTRACT_ALL WHERE CO_ID= pionContractId ;
10346 IF SQL%NOTFOUND THEN
10347 gosErrorText := ' Market Code missing for Contract Id ' || pionContractId ;
10348 RAISE geoApplicationError;
10349 ELSE
10350 IF pionRequest IS NOT NULL THEN
10351 -- get the parameter_value_id of contract and request
10352 OPEN locContr_Services ;
10353 LOOP
10354 FETCH locContr_Services INTO lonPRM_VALUE_ID;
10355 EXIT WHEN locContr_Services%NOTFOUND;
10356 -- Defect 73569 : Added the parameter to the cursor locGMD_response
10357 OPEN locGMD_response ( lonPRM_VALUE_ID );
10358 LOOP
10359 FETCH locGMD_response INTO lcrGMD_response;
10360 EXIT WHEN locGMD_response%NOTFOUND;
10361 IF locGMD_response%FOUND THEN
10362 OPEN locPrmValue (lonPRM_VALUE_ID, lcrGMD_response.PRM_SUBTYPE_ID,
10363 lcrGMD_response.PRM_SIBLING_SEQNO, lcrGMD_response.PRM_SEQNO,
10364 lcrGMD_response.PRM_VALUE_SEQNO, lcrGMD_response.PRM_PARENT_ID,
10365 lcrGMD_response.PRM_LEVEL);
10366 LOOP
10367 FETCH locPrmValue INTO lonParameterID;
10368 EXIT WHEN locPrmValue%NOTFOUND;
10369 SELECT D.DATA_TYPE_CODE INTO losDataTypeCode
10370 FROM PARAMETER_AREA A, DATA_TYPE D, MKT_PARAMETER M
10371 WHERE M.SCCODE = lonSccode
10372 AND M.PARAMETER_ID = lonParameterID
10373 AND M.PARAMETER_AREA_ID = A.PARAMETER_AREA_ID
10374 AND A.DATA_TYPE_ID = D.DATA_TYPE_ID;
10375 IF losDataTypeCode = 'STRG' THEN
10376 UPDATE PARAMETER_VALUE
10377 SET PRM_VALUE_STRING = lcrGMD_response.PRM_VALUES
10378 WHERE PRM_VALUE_ID = TO_NUMBER(lonPRM_VALUE_ID)
10379 AND PRM_NO = TO_NUMBER(lcrGMD_response.PRM_SUBTYPE_ID)
10380 AND SIBLING_SEQNO = TO_NUMBER(lcrGMD_response.PRM_SIBLING_SEQNO)
10381 AND COMPLEX_SEQNO = TO_NUMBER(lcrGMD_response.PRM_SEQNO)
10382 AND VALUE_SEQNO = TO_NUMBER(lcrGMD_response.PRM_VALUE_SEQNO)
10383 AND PARENT_SEQNO = TO_NUMBER(lcrGMD_response.PRM_PARENT_ID)
10384 AND COMPLEX_LEVEL = TO_NUMBER(lcrGMD_response.PRM_LEVEL)
10385 AND REQUEST_ID = pionRequest;
10386 ELSIF losDataTypeCode ='NUMB' THEN
10387 UPDATE PARAMETER_VALUE
10388 SET PRM_VALUE_NUMBER = TO_NUMBER( lcrGMD_response.PRM_VALUES)
10389 WHERE PRM_VALUE_ID = TO_NUMBER(lonPRM_VALUE_ID)
10390 AND PRM_NO = TO_NUMBER(lcrGMD_response.PRM_SUBTYPE_ID)
10391 AND SIBLING_SEQNO = TO_NUMBER(lcrGMD_response.PRM_SIBLING_SEQNO)
10392 AND COMPLEX_SEQNO = TO_NUMBER(lcrGMD_response.PRM_SEQNO)
10393 AND VALUE_SEQNO = TO_NUMBER(lcrGMD_response.PRM_VALUE_SEQNO)
10394 AND PARENT_SEQNO = TO_NUMBER(lcrGMD_response.PRM_PARENT_ID)
10395 AND COMPLEX_LEVEL = TO_NUMBER(lcrGMD_response.PRM_LEVEL)
10396 AND REQUEST_ID = pionRequest;
10397 ELSIF losDataTypeCode ='DATE' THEN
10398 UPDATE PARAMETER_VALUE
10399 SET PRM_VALUE_DATE = TO_DATE( lcrGMD_response.PRM_VALUES)
10400 WHERE PRM_VALUE_ID = TO_NUMBER(lonPRM_VALUE_ID)
10401 AND PRM_NO = TO_NUMBER(lcrGMD_response.PRM_SUBTYPE_ID)
10402 AND SIBLING_SEQNO = TO_NUMBER(lcrGMD_response.PRM_SIBLING_SEQNO)
10403 AND COMPLEX_SEQNO = TO_NUMBER(lcrGMD_response.PRM_SEQNO)
10404 AND VALUE_SEQNO = TO_NUMBER(lcrGMD_response.PRM_VALUE_SEQNO)
10405 AND PARENT_SEQNO = TO_NUMBER(lcrGMD_response.PRM_PARENT_ID)
10406 AND COMPLEX_LEVEL = TO_NUMBER(lcrGMD_response.PRM_LEVEL)
10407 AND REQUEST_ID = pionRequest;
10408 END IF;
10409 END LOOP;
10410 CLOSE locPrmValue;
10411 END IF;
10412 END LOOP;
10413 CLOSE locGMD_response;
10414 END LOOP;
10415 CLOSE locContr_Services;
10416 END IF; -- pionRequest is not null
10417 END IF; -- SQL%NOTFOUND
10418 -- [end ] defect 70610
10419EXCEPTION
10420WHEN OTHERS THEN
10421 IF gosErrorText IS NULL THEN
10422 gosErrorText := SQLERRM;
10423 END IF;
10424 RAISE_APPLICATION_ERROR(
10425 -20001, 'Package Contract: Update PARAMETER_VALUE failed. Error: Request ' || pionRequest || gosErrorText );
10426END UPD_RESPONSE_VAL_FR_SWITCH;
10427/*
10428** =====================================================================
10429**
10430** Procedure: REMOVE_UNIQUE_VALUE
10431** PN00353079: USC,22-10-2010: refactoring, simplify code base
10432** =====================================================================
10433*/
10434PROCEDURE REMOVE_UNIQUE_VALUE(
10435 -- Unique Request Id for this invocation
10436 pionRequest IN CONTRACT_HISTORY.request%TYPE,
10437 -- Contract ID
10438 pionContractId IN RATEPLAN_HIST.co_id%TYPE,
10439 -- Pending Request Status
10440 piosReqStatus IN PR_SERV_STATUS_HIST.STATUS%TYPE,
10441 -- Action ID
10442 pionActionId IN MDSRRTAB.action_id%TYPE )
10443IS
10444BEGIN
10445 -- if request id is not empy,
10446 IF pionRequest IS NOT NULL THEN
10447 -- get the parameter_value_id of contract and request
10448 -- Change Parameter Value
10449 IF piosReqStatus = cosStatusParameter THEN
10450 -- delete all entries marked as 'o' for the given contract regardless whether the belong to the current request or not. If they are in status 'o' they
10451 -- can be deleted. The following statement covers service parameter, BSG service parameter and CUG service parameter.
10452 -- Change of CUG Service Parameter
10453 BEGIN
10454 DELETE FROM MKT_PARAMETER_UNIQUE_STRVALUE
10455 WHERE (PARAMETER_ID,PRM_VALUE_ID,SCCODE) in (SELECT PARAMETER_ID,PRM_VALUE_ID,SCCODE FROM PARAMETER_VALUE WHERE CO_ID = pionContractId)
10456 AND PRM_STATUS = 'o';
10457 EXCEPTION
10458 WHEN OTHERS THEN
10459 gosErrorText := ' Delete of ' ||
10460 'MKT_PARAMETER_UNIQUE_STRVALUE failed. ' || SQLERRM;
10461 RAISE geoApplicationError;
10462 END;
10463 -- Deactivate Contract
10464 ELSIF piosReqStatus = cosStatusDeactivate THEN
10465 -- this is a contract deactivation, delete all entries, that belong to the contract from the MKT_PARAMETER_UNIQUE_STRVALUE.
10466 -- that covers normal service parameter, BSG service parameter and CUG service parameter.
10467 -- Delete
10468 BEGIN
10469 DELETE FROM MKT_PARAMETER_UNIQUE_STRVALUE
10470 WHERE (PARAMETER_ID,PRM_VALUE_ID,SCCODE) in (SELECT PARAMETER_ID,PRM_VALUE_ID,SCCODE FROM PARAMETER_VALUE WHERE CO_ID = pionContractId);
10471 EXCEPTION
10472 WHEN OTHERS THEN
10473 gosErrorText := ' Delete of ' ||
10474 'MKT_PARAMETER_UNIQUE_STRVALUE failed. ' || SQLERRM;
10475 RAISE geoApplicationError;
10476 END;
10477 END IF; -- IF piosReqStatus = cosStatusParameter
10478 END IF; -- IF pionRequest is not null THEN
10479EXCEPTION
10480WHEN OTHERS THEN
10481 IF gosErrorText IS NULL THEN
10482 gosErrorText := SQLERRM;
10483 END IF;
10484 RAISE_APPLICATION_ERROR( -20001, 'Package Contract.REMOVE_UNIQUE_VALUE( failed. Error: Request ' ||
10485 pionRequest || gosErrorText );
10486END REMOVE_UNIQUE_VALUE;
10487/*
10488** =====================================================================
10489**
10490** Procedure: CHANGE_DOMAIN_STATUS
10491** #UMTS# 82630
10492** =====================================================================
10493*/
10494PROCEDURE CHANGE_DOMAIN_STATUS(
10495 -- Unique Request Id for this invocation
10496 pionRequest IN CONTRACT_HISTORY.request%TYPE,
10497 -- Contract ID
10498 pionContractId IN RATEPLAN_HIST.co_id%TYPE,
10499 -- Pending Request Status
10500 piosReqStatus IN PR_SERV_STATUS_HIST.STATUS%TYPE,
10501 -- Action ID
10502 pionActionId IN MDSRRTAB.action_id%TYPE )
10503IS
10504 CURSOR losChgContr_Services IS
10505 SELECT DISTINCT PRM_VALUE_ID
10506 FROM PROFILE_SERVICE PS, PR_SERV_STATUS_HIST PSH
10507 WHERE PS.CO_ID = pionContractId
10508 AND PS.CO_ID = PSH.CO_ID
10509 AND PS.SNCODE = PSH.SNCODE
10510 AND PS.PROFILE_ID = PSH.PROFILE_ID
10511 AND PSH.REQUEST_ID=pionRequest;
10512
10513 CURSOR losDeactContr_Services IS
10514 SELECT DISTINCT PRM_VALUE_ID
10515 FROM PROFILE_SERVICE PS, PR_SERV_STATUS_HIST PSH
10516 WHERE PS.CO_ID = pionContractId
10517 AND PS.CO_ID = PSH.CO_ID
10518 AND PS.SNCODE = PSH.SNCODE
10519 AND PS.PROFILE_ID = PSH.PROFILE_ID
10520 AND PSH.REQUEST_ID=pionRequest;
10521
10522 CURSOR losChgContrServ_CUG IS
10523 SELECT DISTINCT INTRA_CUG_PRM_VALUE_ID
10524 FROM CONTR_SERVICES_CUG
10525 WHERE CO_ID = pionContractId
10526 AND CUG_REQUEST=pionRequest;
10527 CURSOR losDeactContrServ_CUG IS
10528 SELECT DISTINCT INTRA_CUG_PRM_VALUE_ID
10529 FROM CONTR_SERVICES_CUG
10530 WHERE CO_ID = pionContractId ;
10531 CURSOR losChgContrServ_BSG IS
10532 SELECT DISTINCT BSG_PRM_VALUE_ID
10533 FROM CONTR_SERVICES_BSG
10534 WHERE CO_ID = pionContractId
10535 AND BSG_REQUEST=pionRequest;
10536 CURSOR losDeactContrServ_BSG IS
10537 SELECT DISTINCT BSG_PRM_VALUE_ID
10538 FROM CONTR_SERVICES_BSG
10539 WHERE CO_ID = pionContractId ;
10540 -- change service parameter, therefore deactivate old value ie max 1
10541 CURSOR losParameterChg(lonPRMVALUEID IN PARAMETER_VALUE.PRM_VALUE_ID%TYPE) IS
10542 SELECT DISTINCT V.PARAMETER_ID , V.PRM_VALUE_NUMBER
10543 FROM PARAMETER_VALUE V,
10544 MKT_PARAMETER M,
10545 PARAMETER_AREA A,
10546 PARAMETER_TYPE T
10547 WHERE V.PRM_VALUE_ID = lonPRMVALUEID
10548 AND M.PARAMETER_ID = V.PARAMETER_ID
10549 AND M.PARAMETER_AREA_ID = A.PARAMETER_AREA_ID
10550 AND A.PARAMETER_TYPE_ID = T.PARAMETER_TYPE_ID
10551 AND T.PARAMETER_TYPE_CODE = 8192
10552 AND M.RESOURCE_LIKE = 'Y'
10553 AND V.PRM_VALUE_NUMBER IS NOT NULL
10554 AND V.DELETED_FLAG IS NULL
10555 AND V.PRM_SEQNO = (
10556 SELECT MAX(PRM_SEQNO)-1
10557 FROM PARAMETER_VALUE
10558 WHERE PRM_VALUE_ID = V.PRM_VALUE_ID
10559 AND PARAMETER_ID = V.PARAMETER_ID
10560 AND PRM_VALUE_NUMBER IS NOT NULL
10561 AND DELETED_FLAG IS NULL );
10562 CURSOR losParameterDeact(lonPRMVALUEID IN PARAMETER_VALUE.PRM_VALUE_ID%TYPE) IS
10563 SELECT DISTINCT V.PARAMETER_ID , V.PRM_VALUE_NUMBER
10564 FROM PARAMETER_VALUE V,
10565 MKT_PARAMETER M,
10566 PARAMETER_AREA A,
10567 PARAMETER_TYPE T,
10568 PROFILE_SERVICE C
10569 WHERE V.PRM_VALUE_ID = lonPRMVALUEID
10570 -- begin OUL defect 90409
10571 AND C.CO_ID = pionContractId
10572 -- end OUL defect 90409
10573 AND C.PRM_VALUE_ID = V.PRM_VALUE_ID
10574 AND M.PARAMETER_ID = V.PARAMETER_ID
10575 AND M.PARAMETER_AREA_ID = A.PARAMETER_AREA_ID
10576 AND A.PARAMETER_TYPE_ID = T.PARAMETER_TYPE_ID
10577 AND T.PARAMETER_TYPE_CODE = 8192
10578 AND M.RESOURCE_LIKE = 'Y'
10579 AND V.PRM_VALUE_NUMBER IS NOT NULL
10580 AND V.DELETED_FLAG IS NULL
10581 AND V.PRM_SEQNO IN (SELECT MAX(PRM_SEQNO)
10582 FROM PARAMETER_VALUE
10583 WHERE PRM_VALUE_ID = V.PRM_VALUE_ID
10584 AND PARAMETER_ID = V.PARAMETER_ID
10585 AND PRM_VALUE_NUMBER IS NOT NULL
10586 AND DELETED_FLAG IS NULL);
10587 lonPRM_VALUE_ID PROFILE_SERVICE.prm_value_id%TYPE;
10588 lonPRM_VALUE_ID_CUG CONTR_SERVICES_CUG.intra_cug_prm_value_id%TYPE;
10589 lonPRM_VALUE_ID_BSG CONTR_SERVICES_BSG.bsg_prm_value_id%TYPE;
10590 losStatusCriteria VARCHAR2(1);
10591 lonSccode CONTRACT_ALL.SCCODE%TYPE;
10592 lonParameterID MKT_PARAMETER.PARAMETER_ID%TYPE;
10593 lonValueSeqNo PARAMETER_VALUE.PRM_VALUE_NUMBER%TYPE;
10594 /* begin defect 203433 */
10595 piodEffectiveDate DATE;
10596BEGIN
10597 piodEffectiveDate := GetEffectiveDate( pionRequest );
10598 /* end defect 203433 */
10599 /* Get the market of the contract */
10600 SELECT SCCODE INTO lonSccode
10601 FROM CONTRACT_ALL WHERE CO_ID= pionContractId ;
10602 IF SQL%NOTFOUND THEN
10603 gosErrorText := ' Market Code missing for Contract Id ' || pionContractId ;
10604 RAISE geoApplicationError;
10605 ELSE
10606 IF pionRequest IS NOT NULL THEN
10607 -- Change of Parameter Value
10608 IF piosReqStatus = cosStatusParameter THEN
10609 -- Change of CUG Service Parameter
10610 OPEN losChgContrServ_CUG ;
10611 LOOP
10612 FETCH losChgContrServ_CUG INTO lonPRM_VALUE_ID_CUG;
10613 EXIT WHEN losChgContrServ_CUG%NOTFOUND;
10614 -- change service parameter, therefore deassign old value ie max 1
10615 OPEN losParameterChg ( lonPRM_VALUE_ID_CUG);
10616 LOOP
10617 FETCH losParameterChg INTO lonParameterID, lonValueSeqNo;
10618 EXIT WHEN losParameterChg%NOTFOUND;
10619 -- to deassign resource parameter where prm_status is 'a' to 'd' .
10620 UPDATE MKT_PARAMETER_RESOURCE
10621 SET PRM_STATUS = 'd',
10622 /* begin defect 203433 */
10623 --PRM_STATUS_MOD_DATE = SYSDATE,
10624 PRM_STATUS_MOD_DATE = piodEffectiveDate,
10625 /* end defect 203433 */
10626 REC_VERSION = REC_VERSION + 1
10627 WHERE SCCODE = lonSccode
10628 AND PARAMETER_ID = lonParameterID
10629 AND PRM_VALUE_SEQNO =lonValueSeqNo
10630 AND PRM_STATUS = 'l';
10631 END LOOP;
10632 CLOSE losParameterChg;
10633 END LOOP;
10634 CLOSE losChgContrServ_CUG ;
10635 -- Change of BSG Service Parameter
10636 OPEN losChgContrServ_BSG ;
10637 LOOP
10638 FETCH losChgContrServ_BSG INTO lonPRM_VALUE_ID_BSG;
10639 EXIT WHEN losChgContrServ_BSG%NOTFOUND;
10640 -- change service parameter, therefore deassign old value ie max 1
10641 OPEN losParameterChg ( lonPRM_VALUE_ID_BSG);
10642 LOOP
10643 FETCH losParameterChg INTO lonParameterID, lonValueSeqNo;
10644 EXIT WHEN losParameterChg%NOTFOUND;
10645 -- to deassign resource parameter where prm_status is 'a' to 'd' .
10646 UPDATE MKT_PARAMETER_RESOURCE
10647 SET PRM_STATUS = 'd',
10648 /* begin defect 203433 */
10649 --PRM_STATUS_MOD_DATE = SYSDATE,
10650 PRM_STATUS_MOD_DATE = piodEffectiveDate,
10651 /* end defect 203433 */
10652 REC_VERSION = REC_VERSION + 1
10653 WHERE SCCODE = lonSccode
10654 AND PARAMETER_ID = lonParameterID
10655 AND PRM_VALUE_SEQNO =lonValueSeqNo
10656 AND PRM_STATUS = 'l';
10657 END LOOP;
10658 CLOSE losParameterChg;
10659 END LOOP;
10660 CLOSE losChgContrServ_BSG ;
10661 -- Change Of Service Parameter
10662 OPEN losChgContr_Services;
10663 LOOP
10664 FETCH losChgContr_Services INTO lonPRM_VALUE_ID;
10665 EXIT WHEN losChgContr_Services%NOTFOUND;
10666 -- change service parameter, therefore deassigne old value ie max 1
10667 OPEN losParameterChg ( lonPRM_VALUE_ID);
10668 LOOP
10669 FETCH losParameterChg INTO lonParameterID, lonValueSeqNo;
10670 EXIT WHEN losParameterChg%NOTFOUND;
10671 -- to deassign resource parameter where prm_status is 'a' to 'd' .
10672 UPDATE MKT_PARAMETER_RESOURCE
10673 SET PRM_STATUS = 'd',
10674 /* begin defect 203433 */
10675 --PRM_STATUS_MOD_DATE = SYSDATE,
10676 PRM_STATUS_MOD_DATE = piodEffectiveDate,
10677 /* end defect 203433 */
10678 REC_VERSION = REC_VERSION + 1
10679 WHERE SCCODE = lonSccode
10680 AND PARAMETER_ID = lonParameterID
10681 AND PRM_VALUE_SEQNO =lonValueSeqNo
10682 AND PRM_STATUS = 'l';
10683 END LOOP;
10684 CLOSE losParameterChg;
10685 END LOOP;
10686 CLOSE losChgContr_Services;
10687 -- Deactivate Contract service parameters
10688 ELSIF piosReqStatus = cosStatusDeactivate THEN
10689 -- Deactivate CUG Contract
10690 OPEN losDeactContrServ_CUG ;
10691 LOOP
10692 FETCH losDeactContrServ_CUG INTO lonPRM_VALUE_ID_CUG;
10693 EXIT WHEN losDeactContrServ_CUG%NOTFOUND;
10694 -- erase service, therefore deassign domain value i.e max
10695 OPEN losParameterDeact(lonPRM_VALUE_ID_CUG);
10696 LOOP
10697 FETCH losParameterDeact INTO lonParameterID, lonValueSeqNo;
10698 EXIT WHEN losParameterDeact%NOTFOUND;
10699 -- to deassign resource parameter where prm_status is 'a' to 'd' .
10700 UPDATE MKT_PARAMETER_RESOURCE
10701 SET PRM_STATUS = 'd',
10702 /* begin defect 203433 */
10703 --PRM_STATUS_MOD_DATE = SYSDATE,
10704 PRM_STATUS_MOD_DATE = piodEffectiveDate,
10705 /* end defect 203433 */
10706 REC_VERSION = REC_VERSION + 1
10707 WHERE SCCODE = lonSccode
10708 AND PARAMETER_ID = lonParameterID
10709 AND PRM_VALUE_SEQNO =lonValueSeqNo
10710 AND PRM_STATUS = 'a';
10711 END LOOP;
10712 CLOSE losParameterDeact;
10713 END LOOP;
10714 CLOSE losDeactContrServ_CUG ;
10715 -- Deactivate BSG Contract
10716 OPEN losDeactContrServ_BSG ;
10717 LOOP
10718 FETCH losDeactContrServ_BSG INTO lonPRM_VALUE_ID_BSG;
10719 EXIT WHEN losDeactContrServ_BSG%NOTFOUND;
10720 -- erase service, therefore deassign domain value i.e max
10721 OPEN losParameterDeact(lonPRM_VALUE_ID_BSG);
10722 LOOP
10723 FETCH losParameterDeact INTO lonParameterID, lonValueSeqNo;
10724 EXIT WHEN losParameterDeact%NOTFOUND;
10725 -- to deassign resource parameter where prm_status is 'a' to 'd' .
10726 UPDATE MKT_PARAMETER_RESOURCE
10727 SET PRM_STATUS = 'd',
10728 /* begin defect 203433 */
10729 --PRM_STATUS_MOD_DATE = SYSDATE,
10730 PRM_STATUS_MOD_DATE = piodEffectiveDate,
10731 /* end defect 203433 */
10732 REC_VERSION = REC_VERSION + 1
10733 WHERE SCCODE = lonSccode
10734 AND PARAMETER_ID = lonParameterID
10735 AND PRM_VALUE_SEQNO =lonValueSeqNo
10736 AND PRM_STATUS = 'a';
10737 END LOOP;
10738 CLOSE losParameterDeact;
10739 END LOOP;
10740 CLOSE losDeactContrServ_BSG ;
10741 -- Deactivate Contract
10742 OPEN losDeactContr_Services;
10743 LOOP
10744 FETCH losDeactContr_Services INTO lonPRM_VALUE_ID;
10745 EXIT WHEN losDeactContr_Services%NOTFOUND;
10746 -- erase service, therefore deactivate domain value i.e max
10747 OPEN losParameterDeact(lonPRM_VALUE_ID);
10748 LOOP
10749 FETCH losParameterDeact INTO lonParameterID, lonValueSeqNo;
10750 EXIT WHEN losParameterDeact%NOTFOUND;
10751 -- to deassign resource parameter where prm_status is 'a' to 'd' .
10752 UPDATE MKT_PARAMETER_RESOURCE
10753 SET PRM_STATUS = 'd',
10754 /* begin defect 203433 */
10755 --PRM_STATUS_MOD_DATE = SYSDATE,
10756 PRM_STATUS_MOD_DATE = piodEffectiveDate,
10757 /* end defect 203433 */
10758 REC_VERSION = REC_VERSION + 1
10759 WHERE SCCODE = lonSccode
10760 AND PARAMETER_ID = lonParameterID
10761 AND PRM_VALUE_SEQNO =lonValueSeqNo
10762 AND PRM_STATUS = 'a';
10763 END LOOP;
10764 CLOSE losParameterDeact;
10765 END LOOP;
10766 CLOSE losDeactContr_Services;
10767 END IF; -- IF piosReqStatus = cosStatusParameter
10768 END IF; -- IF pionRequest is not null THEN
10769 END IF;-- IF SQL%NOTFOUND THEN
10770EXCEPTION
10771WHEN OTHERS THEN
10772 IF gosErrorText IS NULL THEN
10773 gosErrorText := SQLERRM;
10774 END IF;
10775 RAISE_APPLICATION_ERROR( -20001, 'Package Contract.CHANGE_DOMAIN_STATUS failed. Error: Request ' ||
10776 pionRequest || gosErrorText );
10777END CHANGE_DOMAIN_STATUS;
10778/* Feature 52832-End
10779*/
10780
10781
10782/*
10783** =====================================================================
10784**
10785** Procedure: GetPendingRequests
10786** #UMTS# 82630
10787** =====================================================================
10788*/
10789
10790PROCEDURE GetPendingRequests (
10791 pionContractID IN MDSRRTAB.CO_ID%TYPE,
10792 pionProfiles OUT tanProfileArray,
10793 pionServices OUT tanServiceArray,
10794 piosRequests OUT tasRequestArray,
10795 piosState OUT tasStateArray,
10796 pionNumRequests OUT NUMBER
10797)
10798IS
10799 CURSOR locRequest IS
10800 SELECT REQUEST, action_date, action_id
10801 FROM MDSRRTAB
10802 WHERE CO_ID = pionContractID
10803 AND REQUEST_UPDATE IS NULL;
10804
10805 lcrRequest locRequest%ROWTYPE;
10806--defect 00228856/d KW
10807/* CURSOR locSH IS
10808 SELECT DISTINCT SNCODE, PROFILE_ID, STATUS
10809 FROM PR_SERV_STATUS_HIST
10810 WHERE CO_ID = pionContractID
10811 AND REQUEST_ID = lcrRequest.REQUEST;
10812*/
10813
10814 CURSOR locSH IS
10815 SELECT DISTINCT PS.PROFILE_ID, PS.SNCODE, H.STATUS
10816 FROM PROFILE_SERVICE PS, PARAMETER_VALUE PV, PR_SERV_STATUS_HIST H
10817 WHERE PS.CO_ID = pionContractID
10818 AND PS.CO_ID = H.CO_ID
10819 AND PS.SNCODE = H.SNCODE
10820 AND PS.PROFILE_ID = H.PROFILE_ID
10821 AND PS.PRM_VALUE_ID = PV.PRM_VALUE_ID
10822 AND H.REQUEST_ID IS NOT NULL
10823 AND H.HISTNO =
10824 (SELECT MAX(HISTNO)
10825 FROM PR_SERV_STATUS_HIST
10826 WHERE CO_ID = pionContractID);
10827--end defect 00228856/d KW
10828
10829 CURSOR locCSC IS
10830 SELECT DISTINCT SNCODE, PROFILE_ID
10831 FROM CONTR_SERVICES_CAP
10832 WHERE CO_ID = pionContractID
10833 AND CS_REQUEST = lcrRequest.REQUEST;
10834
10835 lonCount NUMBER :=0;
10836BEGIN
10837 OPEN locRequest;
10838 LOOP
10839 FETCH locRequest
10840 INTO lcrRequest;
10841 EXIT WHEN locRequest%NOTFOUND;
10842
10843 IF lcrRequest.action_id IN (41,6001,13001) THEN --MainDNFlag, DNChange , Add DN
10844 FOR xcrCSC IN locCSC LOOP
10845 lonCount := lonCount + 1;
10846 pionServices(lonCount) := xcrCSC.SNCODE;
10847 pionProfiles(lonCount) := xcrCSC.PROFILE_ID;
10848 piosRequests(lonCount) := lcrRequest.Action_Date;
10849 piosState(lonCount) := 'p';
10850 END LOOP;
10851 ELSIF lcrRequest.action_id IN (1,2,3,4,5,8,9,11,16) THEN -- PN 209320 Include ActionID 16
10852 FOR xcrSH IN locSH LOOP
10853 lonCount := lonCount + 1;
10854 pionServices(lonCount) := xcrSH.SNCODE;
10855 pionProfiles(lonCount) := xcrSH.PROFILE_ID;
10856 piosRequests(lonCount) := lcrRequest.Action_Date;
10857 piosState(lonCount) := LOWER(xcrSH.STATUS);
10858 END LOOP;
10859 END IF;
10860 END LOOP;
10861 CLOSE locRequest;
10862 pionNumRequests := lonCount;
10863EXCEPTION
10864WHEN OTHERS THEN
10865 pionNumRequests := -1;
10866END GetPendingRequests;
10867
10868/*
10869 ** =====================================================================
10870 **
10871 ** Procedure: DoInitPrepayEDR
10872 **
10873 ** Purpose: Called by the EVH, this API handles the initial EDR event for
10874 ** a pre-activated prepaid contract
10875 **
10876 ** Defect 263086 CWLEE
10877 ** =====================================================================
10878 */
10879PROCEDURE DoInitPrepayEDR (
10880 -- Directory Number for initial EDR
10881 piosDNNum IN DIRECTORY_NUMBER.DN_NUM%TYPE,
10882 -- Directory Number Numbering Plan for initial EDR
10883 pionDNNumNP IN DIRECTORY_NUMBER.DIRNUM_NPCODE%TYPE,
10884 -- Port Number for initial EDR
10885 piosPortNum IN PORT.PORT_NUM%TYPE,
10886 -- Port Number Numbering Plan for initial EDR
10887 pionPortNP IN PORT.PORT_NPCODE%TYPE,
10888 -- StatusChangeDate for status change events (s,r,d) defaults to sysdate
10889 piodStatusChangeDate IN CONTRACT_HISTORY.ch_validfrom%TYPE
10890)
10891IS
10892
10893 lonContractId CONTRACT_ALL.CO_ID%TYPE;
10894
10895 BEGIN
10896 DBMS_OUTPUT.put_line('DoInitPrepayEDR: piosDNNum: ' || piosDNNum ||
10897 ' pionDNNumNP: ' || pionDNNumNP ||
10898 ' piosPortNum: ' || piosPortNum ||
10899 ' pionPortNP: ' || pionPortNP ||
10900 ' StatusChangeDate: ' || piodStatusChangeDate);
10901
10902 -- get preactivated prepaid contract
10903 IF piosDNNum IS NOT NULL AND pionDNNumNP IS NOT NULL
10904 THEN
10905 SELECT CSC.CO_ID
10906 INTO lonContractId
10907 FROM CONTR_SERVICES_CAP CSC, DIRECTORY_NUMBER DN
10908 WHERE DN.DN_NUM = piosDNNum
10909 AND DN.DIRNUM_NPCODE = pionDNNumNP
10910 AND DN.DN_ID = CSC.DN_ID
10911 AND CSC.CS_DEACTIV_DATE IS NULL;
10912 ELSIF piosPortNum IS NOT NULL AND pionPortNP IS NOT NULL
10913 THEN
10914 SELECT CD.CO_ID
10915 INTO lonContractId
10916 FROM CONTR_DEVICES CD, PORT P
10917 WHERE P.PORT_NUM = piosPortNum
10918 AND P.PORT_NPCODE = pionPortNP
10919 AND P.PORT_ID = CD.PORT_ID
10920 AND CD.CD_DEACTIV_DATE IS NULL;
10921 ELSE
10922 gosErrorText := 'No valid resources';
10923 RAISE geoApplicationError;
10924 END IF;
10925
10926 -- call DoPrepayEDR()
10927 DoPrepayEDR('i',lonContractId,piodStatusChangeDate);
10928
10929 EXCEPTION
10930 WHEN geoApplicationError THEN
10931 RAISE_APPLICATION_ERROR( -20001,'Package Contract.DoInitPrepayEDR: piosDNNum: ' || piosDNNum ||
10932 ' pionDNNumNP: ' || pionDNNumNP || ' piosPortNum: ' || piosPortNum ||
10933 ' pionPortNP: ' || pionPortNP || ' StatusChangeDate: ' || piodStatusChangeDate || gosErrorText );
10934
10935 WHEN NO_DATA_FOUND THEN
10936 gosErrorText := 'Contract not found.';
10937 RAISE_APPLICATION_ERROR( -20001,'Package Contract.DoInitPrepayEDR: piosDNNum: ' || piosDNNum ||
10938 ' pionDNNumNP: ' || pionDNNumNP || ' piosPortNum: ' || piosPortNum ||
10939 ' pionPortNP: ' || pionPortNP || ' StatusChangeDate: ' || piodStatusChangeDate || gosErrorText );
10940
10941 WHEN OTHERS THEN
10942 IF gosErrorText IS NULL THEN
10943 gosErrorText := SQLERRM;
10944 END IF;
10945 RAISE_APPLICATION_ERROR( -20002,'Package Contract.DoInitPrepayEDR: piosDNNum: ' || piosDNNum ||
10946 ' pionDNNumNP: ' || pionDNNumNP || ' piosPortNum: ' || piosPortNum ||
10947 ' pionPortNP: ' || pionPortNP || ' StatusChangeDate: ' || piodStatusChangeDate || gosErrorText );
10948
10949END DoInitPrepayEDR;
10950
10951
10952/*
10953** =====================================================================
10954**
10955** Function: calculateExpirationDate
10956**
10957** Purpose: This funtions returns the date plus n (days, months).
10958**
10959** Defect 263086 CWLEE
10960** =====================================================================
10961*/
10962FUNCTION calculateExpirationDate(
10963 piodtDate IN DATE,
10964 pionPeriod IN INTEGER,
10965 piosPeriodType IN CHAR )
10966RETURN DATE IS
10967
10968BEGIN
10969
10970 IF piosPeriodType = 'D'
10971 THEN
10972 RETURN piodtDate + pionPeriod;
10973 ELSIF piosPeriodType = 'M'
10974 THEN
10975 RETURN ADD_MONTHS(piodtDate,pionPeriod);
10976 END IF;
10977
10978END calculateExpirationDate;
10979
10980
10981/*
10982** =====================================================================
10983**
10984** Procedure: DoPrepayEDR
10985**
10986** Purpose: Called by the EVH, this API handles the initial EDR event for
10987** a pre-activated prepaid contract, and status change events for suspension,
10988** reactivation, deactivation of prepaid contracts.
10989** =====================================================================
10990*/
10991
10992PROCEDURE DoPrepayEDR (
10993 piosEventActionType IN CHAR,
10994 pionContractID IN CONTRACT_ALL.CO_ID%TYPE,
10995 piodStatusChangeDate IN CONTRACT_HISTORY.ch_validfrom%TYPE
10996)
10997IS
10998BEGIN
10999 -- no longer supported with first call activation feature 283543!! Waiting that EVH is removing reference
11000 DBMS_OUTPUT.put_line('DoPrepayEDR: EventActionType: ' || piosEventActionType ||
11001 ' ContractID: ' || pionContractID ||
11002 ' StatusChangeDate: ' || piodStatusChangeDate);
11003 RAISE_APPLICATION_ERROR( -20002,'Package Contract.DoPrepayEDR: EventActionType: ' || piosEventActionType ||
11004 ' ContractID: ' || pionContractID || ' StatusChangeDate: ' || piodStatusChangeDate || ' Procedure is no longer supported! It was obsolete with 283543 ');
11005END DoPrepayEDR;
11006
11007
11008/*
11009** =====================================================================
11010**
11011** Procedure: GetReqChildrenPreventingCancel
11012**
11013** Purpose: This procedure writes identifiers of all child requests which prevent
11014** the cancellation of the given parent request into a string.
11015**
11016** =====================================================================
11017*/
11018PROCEDURE GetReqChildrenPreventingCancel(
11019 pionRequest IN MDSRRTAB.request%TYPE,
11020 poosChildRequests OUT VARCHAR2)
11021IS
11022 lonResult NUMBER;
11023 -- get ALL child requests
11024 CURSOR locChildrenReq IS
11025 SELECT REQUEST, ACTION_ID, PROVISIONING_FLAG, RATING_FLAG, SCCODE
11026 FROM MDSRRTAB
11027 WHERE PARENT_REQUEST = pionRequest;
11028 lcrChildrenReq locChildrenReq%ROWTYPE;
11029BEGIN
11030
11031 OPEN locChildrenReq;
11032 LOOP
11033 FETCH locChildrenReq INTO lcrChildrenReq;
11034 EXIT WHEN locChildrenReq%NOTFOUND;
11035 lonResult := CheckActionToCancel(pionRequest,
11036 lcrChildrenReq.ACTION_ID,
11037 lcrChildrenReq.PROVISIONING_FLAG
11038 );
11039 IF lonResult = conRequestCancelIsNotPossible THEN
11040 poosChildRequests := poosChildRequests || ' ' || lcrChildrenReq.REQUEST;
11041 END IF;
11042 END LOOP; --- cursor
11043 CLOSE locChildrenReq;
11044END GetReqChildrenPreventingCancel;
11045
11046
11047-- 00377727_E08_U09
11048-- 00377727_E08_U16: Action Id 30006 added
11049
11050/*
11051** =====================================================================
11052**
11053** Function: Finish_ContractPamScheme
11054**
11055** Purpose: This funtion finishes request for table CONTRACT_PAM_SCHEME.
11056**
11057** =====================================================================
11058*/
11059PROCEDURE Finish_ContractPamScheme (
11060 pionContractId IN CONTRACT_PAM_SCHEME.CO_ID%TYPE,
11061 pionRequestId IN CONTRACT_PAM_SCHEME.REQUEST_ID%TYPE,
11062 pionActionId IN MDSRRTAB.ACTION_ID%TYPE )
11063IS
11064 liodEffectiveDate DATE;
11065BEGIN
11066
11067 IF pionActionId IN (1,3,8,9,11,16,39,60,15001,15002,30005,30006) THEN
11068 liodEffectiveDate := GetEffectiveDate(pionRequestId);
11069
11070 UPDATE CONTRACT_PAM_SCHEME
11071 SET REFERENCE_COUNTER = NULL,
11072 PENDING_REFERENCE_COUNTER = NULL,
11073 PAM_SCHEDULE_ID = NULL,
11074 PENDING_PAM_SCHEDULE_ID = NULL,
11075 PAM_CLASS_ID = NULL,
11076 PENDING_PAM_CLASS_ID = NULL
11077 WHERE CO_ID = pionContractId AND
11078 REQUEST_ID = pionRequestId AND
11079 PENDING_REFERENCE_COUNTER = 0;
11080
11081 UPDATE CONTRACT_PAM_SCHEME
11082 SET VALID_FROM_DATE = liodEffectiveDate,
11083 REFERENCE_COUNTER = PENDING_REFERENCE_COUNTER,
11084 PENDING_REFERENCE_COUNTER = NULL,
11085 PAM_SCHEDULE_ID = PENDING_PAM_SCHEDULE_ID,
11086 PENDING_PAM_SCHEDULE_ID = NULL,
11087 PAM_CLASS_ID = PENDING_PAM_CLASS_ID,
11088 PENDING_PAM_CLASS_ID = NULL,
11089 REC_VERSION = REC_VERSION + 1
11090 WHERE
11091 -- While contract takeover Service Class Change request (30005) is set in PAM schemes of the new contract.
11092 -- Contract Id cann't be use in this case. Request Id is enough to identify PAM schemes. (PN 00396904)
11093 -- CO_ID = pionContractId AND
11094 REQUEST_ID = pionRequestId;
11095
11096 END IF;
11097
11098 -- contract deactivation: remove all PAM schemes assinged to the contract
11099 IF pionActionId IN (2,5,59) THEN
11100
11101 DELETE FROM CONTRACT_PAM_SCHEME
11102 WHERE CO_ID = pionContractId;
11103
11104 END IF;
11105
11106END Finish_ContractPamScheme;
11107
11108
11109/*
11110** =====================================================================
11111**
11112** Function: Cancel_ContractPamScheme
11113**
11114** Purpose: This funtion cancels the request for table CONTRACT_PAM_SCHEME.
11115**
11116** =====================================================================
11117*/
11118PROCEDURE Cancel_ContractPamScheme (
11119 pionContractId IN CONTRACT_PAM_SCHEME.CO_ID%TYPE,
11120 pionRequestId IN CONTRACT_PAM_SCHEME.REQUEST_ID%TYPE,
11121 pionActionId IN MDSRRTAB.ACTION_ID%TYPE )
11122IS
11123BEGIN
11124
11125 IF pionActionId IN (1,2,3,5,8,9,11,16,39,59,60,15001,15002,30005,30006) THEN
11126 UPDATE CONTRACT_PAM_SCHEME
11127 SET PENDING_REFERENCE_COUNTER = NULL,
11128 PENDING_PAM_SCHEDULE_ID = NULL,
11129 PENDING_PAM_CLASS_ID = NULL
11130 WHERE CO_ID = pionContractId AND
11131 REQUEST_ID = pionRequestId;
11132 END IF;
11133
11134END Cancel_ContractPamScheme;
11135
11136
11137
11138
11139
11140
11141/*
11142** return the version control information
11143*/
11144FUNCTION PrintBodyVersion RETURN VARCHAR2
11145IS
11146BEGIN
11147 RETURN '%I%' || ' | ' || '%E%' || ' | ' || '%W%';
11148END PrintBodyVersion;
11149
11150END Contract;
11151/