60: BEGIN
61: /* Check if effectivity restrictions are globally enabled. */
62: /* TBD: add the site profile item ITG_ORG_EFFECTIVE ('Y'/'N'). */
63: IF NVL(UPPER(FND_PROFILE.VALUE('ITG_ORG_EFFECTIVE')), 'N') <> 'Y' THEN
64: ITG_Debug.msg('Effective: not profile enabled.');
65: RETURN TRUE;
66: END IF;
67:
68: /* Check if effectivity restrictions are enabled for this document type. */
71: l_found := orgind_csr%FOUND;
72: CLOSE orgind_csr;
73: IF NOT l_found THEN
74: /* No effectivity record means non-effectivity controlled. */
75: ITG_Debug.msg('Effective: non-effectivity controlled.');
76: RETURN TRUE;
77: END IF;
78:
79: /* Check the nitty-gritty itty-bitty effectivity. :) */
91: IF l_found THEN
92: IF l_orgeff.effectivity_enabled = FND_API.G_TRUE THEN
93: IF (l_orgeff.start_date IS NULL OR l_orgeff.start_date <= SYSDATE) AND
94: (l_orgeff.end_date IS NULL OR l_orgeff.end_date >= SYSDATE) THEN
95: ITG_Debug.msg('Effective: all tests passed.');
96: RETURN TRUE;
97: ELSE
98: ITG_Debug.msg('Not effective: date out of range');
99: END IF;
94: (l_orgeff.end_date IS NULL OR l_orgeff.end_date >= SYSDATE) THEN
95: ITG_Debug.msg('Effective: all tests passed.');
96: RETURN TRUE;
97: ELSE
98: ITG_Debug.msg('Not effective: date out of range');
99: END IF;
100: ELSE
101: ITG_Debug.msg('Not effective: not enabled');
102: END IF;
97: ELSE
98: ITG_Debug.msg('Not effective: date out of range');
99: END IF;
100: ELSE
101: ITG_Debug.msg('Not effective: not enabled');
102: END IF;
103: ELSE
104: ITG_Debug.msg('Not effective: no effectivity record.');
105: END IF;
100: ELSE
101: ITG_Debug.msg('Not effective: not enabled');
102: END IF;
103: ELSE
104: ITG_Debug.msg('Not effective: no effectivity record.');
105: END IF;
106: RETURN FALSE;
107: END Check_Effective;
108:
143: x_return_status := FND_API.G_RET_STS_SUCCESS;
144:
145: BEGIN
146: SAVEPOINT Update_Effectivity_PVT;
147: ITG_Debug.setup(
148: p_reset => TRUE,
149: p_pkg_name => G_PKG_NAME,
150: p_proc_name => l_api_name);
151: IF NOT FND_API.Compatible_API_Call(
155: IF FND_API.To_Boolean(p_init_msg_list) THEN
156: FND_MSG_PUB.Initialize;
157: END IF;
158:
159: ITG_Debug.msg('UE', 'Top of procedure.');
160: ITG_Debug.msg('UE', 'p_organization_id', p_organization_id);
161: ITG_Debug.msg('UE', 'p_cln_doc_type', p_cln_doc_type);
162: ITG_Debug.msg('UE', 'p_doc_direction', p_doc_direction);
163: ITG_Debug.msg('UE', 'p_start_date', p_start_date);
156: FND_MSG_PUB.Initialize;
157: END IF;
158:
159: ITG_Debug.msg('UE', 'Top of procedure.');
160: ITG_Debug.msg('UE', 'p_organization_id', p_organization_id);
161: ITG_Debug.msg('UE', 'p_cln_doc_type', p_cln_doc_type);
162: ITG_Debug.msg('UE', 'p_doc_direction', p_doc_direction);
163: ITG_Debug.msg('UE', 'p_start_date', p_start_date);
164: ITG_Debug.msg('UE', 'p_end_date', p_end_date);
157: END IF;
158:
159: ITG_Debug.msg('UE', 'Top of procedure.');
160: ITG_Debug.msg('UE', 'p_organization_id', p_organization_id);
161: ITG_Debug.msg('UE', 'p_cln_doc_type', p_cln_doc_type);
162: ITG_Debug.msg('UE', 'p_doc_direction', p_doc_direction);
163: ITG_Debug.msg('UE', 'p_start_date', p_start_date);
164: ITG_Debug.msg('UE', 'p_end_date', p_end_date);
165: ITG_Debug.msg('UE', 'p_effective', p_effective);
158:
159: ITG_Debug.msg('UE', 'Top of procedure.');
160: ITG_Debug.msg('UE', 'p_organization_id', p_organization_id);
161: ITG_Debug.msg('UE', 'p_cln_doc_type', p_cln_doc_type);
162: ITG_Debug.msg('UE', 'p_doc_direction', p_doc_direction);
163: ITG_Debug.msg('UE', 'p_start_date', p_start_date);
164: ITG_Debug.msg('UE', 'p_end_date', p_end_date);
165: ITG_Debug.msg('UE', 'p_effective', p_effective);
166:
159: ITG_Debug.msg('UE', 'Top of procedure.');
160: ITG_Debug.msg('UE', 'p_organization_id', p_organization_id);
161: ITG_Debug.msg('UE', 'p_cln_doc_type', p_cln_doc_type);
162: ITG_Debug.msg('UE', 'p_doc_direction', p_doc_direction);
163: ITG_Debug.msg('UE', 'p_start_date', p_start_date);
164: ITG_Debug.msg('UE', 'p_end_date', p_end_date);
165: ITG_Debug.msg('UE', 'p_effective', p_effective);
166:
167: IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
160: ITG_Debug.msg('UE', 'p_organization_id', p_organization_id);
161: ITG_Debug.msg('UE', 'p_cln_doc_type', p_cln_doc_type);
162: ITG_Debug.msg('UE', 'p_doc_direction', p_doc_direction);
163: ITG_Debug.msg('UE', 'p_start_date', p_start_date);
164: ITG_Debug.msg('UE', 'p_end_date', p_end_date);
165: ITG_Debug.msg('UE', 'p_effective', p_effective);
166:
167: IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
168: ITG_Debug.msg('UE', 'Validating input arguments.');
161: ITG_Debug.msg('UE', 'p_cln_doc_type', p_cln_doc_type);
162: ITG_Debug.msg('UE', 'p_doc_direction', p_doc_direction);
163: ITG_Debug.msg('UE', 'p_start_date', p_start_date);
164: ITG_Debug.msg('UE', 'p_end_date', p_end_date);
165: ITG_Debug.msg('UE', 'p_effective', p_effective);
166:
167: IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
168: ITG_Debug.msg('UE', 'Validating input arguments.');
169:
164: ITG_Debug.msg('UE', 'p_end_date', p_end_date);
165: ITG_Debug.msg('UE', 'p_effective', p_effective);
166:
167: IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
168: ITG_Debug.msg('UE', 'Validating input arguments.');
169:
170: IF p_cln_doc_type IS NULL THEN
171: l_count := 0;
172: ELSE
204: ELSE
205: l_flag := NULL;
206: END IF;
207:
208: ITG_Debug.msg('UE', 'Looking for existing effectivity row.');
209: OPEN existing_row_csr;
210: FETCH existing_row_csr INTO l_eff_id;
211: l_found := existing_row_csr%FOUND;
212: CLOSE existing_row_csr;
211: l_found := existing_row_csr%FOUND;
212: CLOSE existing_row_csr;
213:
214: IF l_found THEN
215: ITG_Debug.msg('UE', 'Updating existing effectivity row.');
216: DECLARE
217: BEGIN
218: UPDATE itg_org_effectivity
219: SET start_date = p_start_date,
229: p_organization_id, p_cln_doc_type, p_doc_direction, l_eff_id);
230: RAISE FND_API.G_EXC_ERROR;
231: END;
232: ELSE
233: ITG_Debug.msg('UE', 'Inserting new effectivity row.');
234: BEGIN
235: INSERT INTO itg_org_effectivity (
236: effectivity_id,
237: organization_id,
267: END;
268: END IF;
269:
270: IF FND_API.To_Boolean(p_commit) THEN
271: ITG_Debug.msg('UE', 'Committing work.');
272: COMMIT WORK;
273: END IF;
274: ITG_Debug.msg('UE', 'Done.');
275:
270: IF FND_API.To_Boolean(p_commit) THEN
271: ITG_Debug.msg('UE', 'Committing work.');
272: COMMIT WORK;
273: END IF;
274: ITG_Debug.msg('UE', 'Done.');
275:
276: EXCEPTION
277: WHEN FND_API.G_EXC_ERROR THEN
278: ROLLBACK TO Update_Effectivity_PVT;
276: EXCEPTION
277: WHEN FND_API.G_EXC_ERROR THEN
278: ROLLBACK TO Update_Effectivity_PVT;
279: x_return_status := FND_API.G_RET_STS_ERROR;
280: ITG_Debug.add_error;
281: ITG_Debug.msg('UE', 'EXCEPTION, checked error.', TRUE);
282:
283: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
284: ROLLBACK TO Update_Effectivity_PVT;
277: WHEN FND_API.G_EXC_ERROR THEN
278: ROLLBACK TO Update_Effectivity_PVT;
279: x_return_status := FND_API.G_RET_STS_ERROR;
280: ITG_Debug.add_error;
281: ITG_Debug.msg('UE', 'EXCEPTION, checked error.', TRUE);
282:
283: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
284: ROLLBACK TO Update_Effectivity_PVT;
285: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
282:
283: WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
284: ROLLBACK TO Update_Effectivity_PVT;
285: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
286: ITG_Debug.msg('UE', 'EXCEPTION, un-expected error.', TRUE);
287:
288: WHEN OTHERS THEN
289: ROLLBACK TO Update_Effectivity_PVT;
290: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
287:
288: WHEN OTHERS THEN
289: ROLLBACK TO Update_Effectivity_PVT;
290: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
291: ITG_Debug.add_exc_error(G_PKG_NAME, l_api_name);
292: ITG_Debug.msg('UE', 'EXCEPTION, other error.', TRUE);
293: END;
294:
295: FND_MSG_PUB.Count_And_Get(
288: WHEN OTHERS THEN
289: ROLLBACK TO Update_Effectivity_PVT;
290: x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
291: ITG_Debug.add_exc_error(G_PKG_NAME, l_api_name);
292: ITG_Debug.msg('UE', 'EXCEPTION, other error.', TRUE);
293: END;
294:
295: FND_MSG_PUB.Count_And_Get(
296: p_count => x_msg_count,