[Home] [Help]
PACKAGE BODY: APPS.JL_BR_AR_PRINT_AMNT
Source
1 PACKAGE BODY JL_BR_AR_PRINT_AMNT AS
2 /* $Header: jlbrrpib.pls 120.3.12010000.2 2009/08/06 10:16:33 nivnaray ship $ */
3
4 FUNCTION BR_CONVERT_AMOUNT (X_Invoice_Amount IN NUMBER,
5 X_Currency_Name IN VARCHAR2)
6 RETURN VARCHAR2 IS
7 -- ---------------------------------------------------------------
8 -- Declaracao de Objetos do Programa
9 -- ---------------------------------------------------------------
10 TYPE recext IS RECORD
11 (
12 ZERO CHAR (001) := '0',
13 E CHAR (003) := ' E ',
14 DE CHAR (004) := ' DE ',
15 VIRGULA CHAR (002) := ', ',
16 BRANCO CHAR (001) := ' ',
17 CEM CHAR (003) := 'CEM',
18 INVALIDO CHAR (008) := '????????',
19 PLURAL CHAR (003) := '999',
20 SINGULAR CHAR (003) := '000',
21 inteiro NUMBER (038) := 0,
22 decimal NUMBER (038) := 0,
23 Eplural BOOLEAN := FALSE,
24 Emil BOOLEAN := FALSE,
25 txt_inteiro VARCHAR2 (250) := ' ',
26 txt_decimal VARCHAR2 (250) := NULL,
27 txt_trabalho VARCHAR2 (250) := ' ',
28 txt_separador VARCHAR2 (003) := ' ',
29 txt_extencao VARCHAR2 (250) := ' ',
30 texto VARCHAR2 (250) := ' ',
31 centena NUMBER (003) := 0,
32 dezena NUMBER (002) := 0,
33 unidade NUMBER (001) := 0,
34 nivel NUMBER (002) := 0,
35 posicao NUMBER (002) := 0,
36 str_centena VARCHAR2 (003) := NULL,
37 str_inteiro VARCHAR2 (038) := NULL,
38 str_extracao VARCHAR2 (038) := NULL
39 );
40 Ext recext;
41 TYPE typex IS TABLE OF VARCHAR2 (40) INDEX BY BINARY_INTEGER;
42 ex typex;
43 mi typex;
44 ms typex;
45 mi_idx INTEGER;
46
47 -- ---------------------------------------------------------------
48 -- Procedure de Erro
49 -- ---------------------------------------------------------------
50 PROCEDURE Erro (pfuncao IN VARCHAR2, ptexto IN VARCHAR2) IS
51 BEGIN
52 Ext.texto := pfuncao || Ext.BRANCO || ptexto;
53 -- DBMS_OUTPUT.PUT_LINE(Ext.inteiro);
54 -- DBMS_OUTPUT.PUT_LINE(Ext.texto);
55 RAISE_APPLICATION_ERROR(-20000,Ext.texto);
56 END Erro;
57 -- ---------------------------------------------------------------
58 -- Function Extencao
59 -- ---------------------------------------------------------------
60 FUNCTION Extencao (pcentena IN VARCHAR2, pnivel IN NUMBER) RETURN VARCHAR2 IS
61 BEGIN
62 Ext.txt_extencao := Ext.INVALIDO;
63 IF pnivel = 0 THEN
64 Ext.posicao := 0;
65 ELSIF pnivel <= mi_idx THEN
66 Ext.posicao := (Ext.nivel-(pnivel-1));
67 END IF;
68
69 IF TO_NUMBER(pcentena) > 1 THEN
70 Ext.txt_extencao := ms(Ext.posicao);
71
72 --ELSIF Ext.inteiro > 1 THEN
73 ELSIF (Ext.inteiro > 1 and NVL(trim(Ext.txt_trabalho),' ') <> 'UM') THEN --bug 8519062/8770930
74
75 Ext.txt_extencao := ms(Ext.posicao);
76 ELSE
77 Ext.txt_extencao := mi(Ext.posicao);
78 END IF;
79 RETURN Ext.BRANCO||Ext.txt_extencao;
80 EXCEPTION
81 WHEN OTHERS THEN
82 Erro ('Extencao',sqlerrm);
83 END Extencao;
84 -- ---------------------------------------------------------------
85 -- Function Centena
86 -- ---------------------------------------------------------------
87 FUNCTION Centena(pcentena IN VARCHAR2, pnivel IN NUMBER) RETURN VARCHAR2 IS
88 BEGIN
89 Ext.centena := (TRUNC(TO_NUMBER(pcentena)/100)*100);
90 Ext.dezena := (TRUNC((TO_NUMBER(pcentena) - Ext.centena)/10)*10);
91 Ext.unidade := (TO_NUMBER(pcentena) - (Ext.centena + Ext.dezena));
92 Ext.txt_separador := Ext.BRANCO;
93 Ext.txt_trabalho := Ext.BRANCO;
94 IF (Ext.centena + Ext.dezena + Ext.unidade) > 0 THEN
95
96 IF ((pnivel=Ext.nivel) AND (Ext.decimal=0)) THEN
97 IF Ext.nivel>1 THEN
98 Ext.txt_trabalho := Ext.E;
99 END IF;
100 ELSIF pnivel>1 THEN
101 Ext.txt_trabalho := Ext.VIRGULA;
102 END IF;
103
104 IF (Ext.centena <> 0) THEN
105 IF ((Ext.dezena + Ext.unidade) > 0) THEN
106 Ext.txt_trabalho := Ext.txt_trabalho||ex(Ext.centena);
107 /* acrescentada a condio ELSIF */
108 ELSIF (Ext.centena /100) > 1 THEN
109 Ext.txt_trabalho := Ext.txt_trabalho||ex(Ext.centena);
110 ELSE
111 Ext.txt_trabalho := Ext.txt_trabalho||Ext.CEM;
112 END IF;
113 Ext.txt_separador := Ext.E;
114 END IF;
115 IF (Ext.dezena + Ext.unidade) BETWEEN 1 AND 19 THEN
116 Ext.txt_trabalho := Ext.txt_trabalho|| Ext.txt_separador;
117 Ext.txt_trabalho := Ext.txt_trabalho|| ex(Ext.dezena+Ext.unidade);
118 ELSE
119 IF Ext.dezena <> 0 THEN
120 Ext.txt_trabalho := Ext.txt_trabalho || Ext.txt_separador;
121
122 Ext.txt_trabalho := Ext.txt_trabalho || ex(Ext.dezena);
123 Ext.txt_separador := Ext.E;
124 END IF;
125 END IF;
126 IF ((Ext.Unidade <> 0) AND ((Ext.dezena + Ext.unidade) NOT BETWEEN 1 AND 19)) THEN
127 Ext.txt_trabalho := Ext.txt_trabalho || Ext.txt_separador;
128 Ext.txt_trabalho := Ext.txt_trabalho || ex(Ext.unidade);
129 Ext.txt_separador := Ext.E;
130 END IF;
131 Ext.txt_trabalho := Ext.txt_trabalho|| Extencao(Ext.str_centena,pnivel);
132 ELSE
133 IF pnivel = Ext.nivel THEN
134 IF NOT Ext.Emil THEN
135 Ext.txt_trabalho := Ext.txt_trabalho || Ext.DE;
136 END IF;
137 IF Ext.Eplural THEN
138 Ext.txt_trabalho := Ext.txt_trabalho || Extencao(Ext.PLURAL,pnivel);
139 ELSE
140 Ext.txt_trabalho := Ext.txt_trabalho || Extencao(Ext.SINGULAR,pnivel);
141 END IF;
142 END IF;
143 END IF;
144 RETURN REPLACE(Ext.txt_trabalho,' ',Ext.BRANCO);
145 EXCEPTION
146 WHEN OTHERS THEN
147 Erro ('Centena',sqlerrm);
148 END Centena;
149 -- --------------------------------------------
150 -- INICIO DA ROTINA PRINCIPAL
151 -- --------------------------------------------
152 BEGIN
153 ex(1):='UM'; ex(11):='ONZE'; ex(10):='DEZ'; ex(100):='CENTO';
154 ex(2):='DOIS'; ex(12):='DOZE'; ex(20):='VINTE'; ex(200):='DUZENTOS';
155 ex(3):='TRES'; ex(13):='TREZE'; ex(30):='TRINTA'; ex(300):='TREZENTOS';
156 ex(4):='QUATRO';ex(14):='QUATORZE'; ex(40):='QUARENTA'; ex(400):='QUATROCENTOS';
157 ex(5):='CINCO'; ex(15):='QUINZE'; ex(50):='CINQUENTA';ex(500):='QUINHENTOS';
158 ex(6):='SEIS'; ex(16):='DEZESSEIS';ex(60):='SESSENTA'; ex(600):='SEISCENTOS';
159 ex(7):='SETE'; ex(17):='DEZESSETE';ex(70):='SETENTA'; ex(700):='SETECENTOS';
160 ex(8):='OITO'; ex(18):='DEZOITO'; ex(80):='OITENTA'; ex(800):='OITOCENTOS';
161 ex(9):='NOVE'; ex(19):='DEZENOVE'; ex(90):='NOVENTA'; ex(900):='NOVECENTOS';
162 mi(2):='MIL'; ms(2):='MIL';
163 mi(3):='MILHAO'; ms(3):='MILHOES';
164
165 mi(4):='BILHAO'; ms(4):='BILHOES';
166 mi(5):='TRILHAO'; ms(5):='TRILHOES';
167 mi(6):='QUATILHAO'; ms(6):='QUATILHOES';
168 mi(7):='QUINTILHAO'; ms(7):='QUINTILHOES';
169 mi(8):='SEXTILHAO'; ms(7):='SEXTILHOES';
170 mi_idx := 8;
171 -- -----------------------------------------
172 -- Define os tipos das moedas
173 -- -----------------------------------------
174 IF UPPER(X_Currency_Name) = 'REAL' THEN
175 mi(0):='CENTAVO'; ms(0):='CENTAVOS';
176 mi(1):='REAL'; ms(1):='REAIS';
177 ELSIF UPPER(X_Currency_Name) = 'DOLAR' THEN
178 mi(0):='CENTS'; ms(0):='CENTS';
179 mi(1):='DOLAR'; ms(1):='DOLARES';
180 ELSIF UPPER(X_Currency_Name) = 'YEN' THEN
181 mi(0):='CENTAVO'; ms(0):='CENTAVOS';
182 mi(1):='YEN'; ms(1):='YENS';
183 ELSE
184 mi(0):='????????'; ms(0):='????????';
185 mi(1):='????????'; ms(1):='????????';
186
187 END IF;
188 -- ---------------------------------------------------------------------
189 -- Inicializa as vari de processamento
190 -- ---------------------------------------------------------------------
191 Ext.inteiro := TRUNC(X_Invoice_Amount);
192 Ext.decimal := TRUNC((X_Invoice_Amount - TRUNC(X_Invoice_Amount)) * 100);
193 Ext.str_inteiro := LTRIM(TO_CHAR(Ext.inteiro));
194 Ext.nivel := CEIL(LENGTH(Ext.str_inteiro) / 3);
195 Ext.str_extracao := LPAD(Ext.str_inteiro,Ext.nivel * 3,Ext.ZERO);
196 Ext.txt_inteiro := Ext.BRANCO;
197 Ext.txt_decimal := Ext.BRANCO;
198 IF Ext.inteiro > 0 THEN
199 FOR pos IN 1..Ext.nivel LOOP
200 Ext.str_centena := SUBSTR(Ext.str_extracao,((pos * 3) - 3 + 1), 3);
201 Ext.txt_inteiro := Ext.txt_inteiro || Centena (Ext.str_centena,pos);
202 IF NOT Ext.Emil THEN
203 Ext.Emil := ((TO_NUMBER(Ext.str_centena) > 0) AND (pos=(Ext.nivel -1)));
204 END IF;
205 IF NOT Ext.Eplural THEN
206
207 IF pos <> Ext.nivel THEN
208 Ext.Eplural := (TO_NUMBER(Ext.str_centena) > 1);
209
210 ELSE
211
212 Ext.Eplural := (Ext.inteiro > 1);
213
214 END IF;
215
216 END IF;
217
218 END LOOP;
219 END IF;
220 IF Ext.decimal > 0 THEN
221 Ext.str_centena := LTRIM(TO_CHAR(Ext.decimal,'099'));
222 Ext.txt_decimal := Ext.BRANCO;
223 IF Ext.inteiro > 0 THEN
224 Ext.txt_decimal := Ext.E;
225 END IF;
226 Ext.txt_decimal := Ext.txt_decimal || Centena(Ext.str_centena,0);
227 Ext.txt_inteiro := Ext.txt_inteiro || Ext.BRANCO || LTRIM(Ext.txt_decimal);
228 END IF;
229 RETURN REPLACE(LTRIM(Ext.txt_inteiro),'',Ext.BRANCO);
230 EXCEPTION
231 WHEN OTHERS THEN
232 Erro('Extenso',sqlerrm);
233 END BR_CONVERT_AMOUNT;
234
235 END JL_BR_AR_PRINT_AMNT;