[Home] [Help]
PACKAGE BODY: APPS.JL_BR_AR_PRINT_AMNT
Source
1 PACKAGE BODY JL_BR_AR_PRINT_AMNT AS
2 /* $Header: jlbrrpib.pls 115.6 2002/11/06 00:08:21 cleyvaol 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
74 Ext.txt_extencao := ms(Ext.posicao);
75 ELSE
76 Ext.txt_extencao := mi(Ext.posicao);
77 END IF;
78 RETURN Ext.BRANCO||Ext.txt_extencao;
79 EXCEPTION
80 WHEN OTHERS THEN
81 Erro ('Extencao',sqlerrm);
82 END Extencao;
83 -- ---------------------------------------------------------------
84 -- Function Centena
85 -- ---------------------------------------------------------------
86 FUNCTION Centena(pcentena IN VARCHAR2, pnivel IN NUMBER) RETURN VARCHAR2 IS
87 BEGIN
88 Ext.centena := (TRUNC(TO_NUMBER(pcentena)/100)*100);
89 Ext.dezena := (TRUNC((TO_NUMBER(pcentena) - Ext.centena)/10)*10);
90 Ext.unidade := (TO_NUMBER(pcentena) - (Ext.centena + Ext.dezena));
91 Ext.txt_separador := Ext.BRANCO;
92 Ext.txt_trabalho := Ext.BRANCO;
93 IF (Ext.centena + Ext.dezena + Ext.unidade) > 0 THEN
94
95 IF ((pnivel=Ext.nivel) AND (Ext.decimal=0)) THEN
96 IF Ext.nivel>1 THEN
97 Ext.txt_trabalho := Ext.E;
98 END IF;
99 ELSIF pnivel>1 THEN
100 Ext.txt_trabalho := Ext.VIRGULA;
101 END IF;
102
103 IF (Ext.centena <> 0) THEN
104 IF ((Ext.dezena + Ext.unidade) > 0) THEN
105 Ext.txt_trabalho := Ext.txt_trabalho||ex(Ext.centena);
106 /* acrescentada a condio ELSIF */
107 ELSIF (Ext.centena /100) > 1 THEN
108 Ext.txt_trabalho := Ext.txt_trabalho||ex(Ext.centena);
109 ELSE
110 Ext.txt_trabalho := Ext.txt_trabalho||Ext.CEM;
111 END IF;
112 Ext.txt_separador := Ext.E;
113 END IF;
114 IF (Ext.dezena + Ext.unidade) BETWEEN 1 AND 19 THEN
115 Ext.txt_trabalho := Ext.txt_trabalho|| Ext.txt_separador;
116 Ext.txt_trabalho := Ext.txt_trabalho|| ex(Ext.dezena+Ext.unidade);
117 ELSE
118 IF Ext.dezena <> 0 THEN
119 Ext.txt_trabalho := Ext.txt_trabalho || Ext.txt_separador;
120
121 Ext.txt_trabalho := Ext.txt_trabalho || ex(Ext.dezena);
122 Ext.txt_separador := Ext.E;
123 END IF;
124 END IF;
125 IF ((Ext.Unidade <> 0) AND ((Ext.dezena + Ext.unidade) NOT BETWEEN 1 AND 19)) THEN
126 Ext.txt_trabalho := Ext.txt_trabalho || Ext.txt_separador;
127 Ext.txt_trabalho := Ext.txt_trabalho || ex(Ext.unidade);
128 Ext.txt_separador := Ext.E;
129 END IF;
130 Ext.txt_trabalho := Ext.txt_trabalho|| Extencao(Ext.str_centena,pnivel);
131 ELSE
132 IF pnivel = Ext.nivel THEN
133 IF NOT Ext.Emil THEN
134 Ext.txt_trabalho := Ext.txt_trabalho || Ext.DE;
135 END IF;
136 IF Ext.Eplural THEN
137 Ext.txt_trabalho := Ext.txt_trabalho || Extencao(Ext.PLURAL,pnivel);
138 ELSE
139 Ext.txt_trabalho := Ext.txt_trabalho || Extencao(Ext.SINGULAR,pnivel);
140 END IF;
141 END IF;
142 END IF;
143 RETURN REPLACE(Ext.txt_trabalho,' ',Ext.BRANCO);
144 EXCEPTION
145 WHEN OTHERS THEN
146 Erro ('Centena',sqlerrm);
147 END Centena;
148 -- --------------------------------------------
149 -- INICIO DA ROTINA PRINCIPAL
150 -- --------------------------------------------
151 BEGIN
152 ex(1):='UM'; ex(11):='ONZE'; ex(10):='DEZ'; ex(100):='CENTO';
153 ex(2):='DOIS'; ex(12):='DOZE'; ex(20):='VINTE'; ex(200):='DUZENTOS';
154 ex(3):='TRES'; ex(13):='TREZE'; ex(30):='TRINTA'; ex(300):='TREZENTOS';
155 ex(4):='QUATRO';ex(14):='QUATORZE'; ex(40):='QUARENTA'; ex(400):='QUATROCENTOS';
156 ex(5):='CINCO'; ex(15):='QUINZE'; ex(50):='CINQUENTA';ex(500):='QUINHENTOS';
157 ex(6):='SEIS'; ex(16):='DEZESSEIS';ex(60):='SESSENTA'; ex(600):='SEISCENTOS';
158 ex(7):='SETE'; ex(17):='DEZESSETE';ex(70):='SETENTA'; ex(700):='SETECENTOS';
159 ex(8):='OITO'; ex(18):='DEZOITO'; ex(80):='OITENTA'; ex(800):='OITOCENTOS';
160 ex(9):='NOVE'; ex(19):='DEZENOVE'; ex(90):='NOVENTA'; ex(900):='NOVECENTOS';
161 mi(2):='MIL'; ms(2):='MIL';
162 mi(3):='MILHAO'; ms(3):='MILHOES';
163
164 mi(4):='BILHAO'; ms(4):='BILHOES';
165 mi(5):='TRILHAO'; ms(5):='TRILHOES';
166 mi(6):='QUATILHAO'; ms(6):='QUATILHOES';
167 mi(7):='QUINTILHAO'; ms(7):='QUINTILHOES';
168 mi(8):='SEXTILHAO'; ms(7):='SEXTILHOES';
169 mi_idx := 8;
170 -- -----------------------------------------
171 -- Define os tipos das moedas
172 -- -----------------------------------------
173 IF UPPER(X_Currency_Name) = 'REAL' THEN
174 mi(0):='CENTAVO'; ms(0):='CENTAVOS';
175 mi(1):='REAL'; ms(1):='REAIS';
176 ELSIF UPPER(X_Currency_Name) = 'DOLAR' THEN
177 mi(0):='CENTS'; ms(0):='CENTS';
178 mi(1):='DOLAR'; ms(1):='DOLARES';
179 ELSIF UPPER(X_Currency_Name) = 'YEN' THEN
180 mi(0):='CENTAVO'; ms(0):='CENTAVOS';
181 mi(1):='YEN'; ms(1):='YENS';
182 ELSE
183 mi(0):='????????'; ms(0):='????????';
184 mi(1):='????????'; ms(1):='????????';
185
186 END IF;
187 -- ---------------------------------------------------------------------
188 -- Inicializa as vari de processamento
189 -- ---------------------------------------------------------------------
190 Ext.inteiro := TRUNC(X_Invoice_Amount);
191 Ext.decimal := TRUNC((X_Invoice_Amount - TRUNC(X_Invoice_Amount)) * 100);
192 Ext.str_inteiro := LTRIM(TO_CHAR(Ext.inteiro));
193 Ext.nivel := CEIL(LENGTH(Ext.str_inteiro) / 3);
194 Ext.str_extracao := LPAD(Ext.str_inteiro,Ext.nivel * 3,Ext.ZERO);
195 Ext.txt_inteiro := Ext.BRANCO;
196 Ext.txt_decimal := Ext.BRANCO;
197 IF Ext.inteiro > 0 THEN
198 FOR pos IN 1..Ext.nivel LOOP
199 Ext.str_centena := SUBSTR(Ext.str_extracao,((pos * 3) - 3 + 1), 3);
200 Ext.txt_inteiro := Ext.txt_inteiro || Centena (Ext.str_centena,pos);
201 IF NOT Ext.Emil THEN
202 Ext.Emil := ((TO_NUMBER(Ext.str_centena) > 0) AND (pos=(Ext.nivel -1)));
203 END IF;
204 IF NOT Ext.Eplural THEN
205
206 IF pos <> Ext.nivel THEN
207 Ext.Eplural := (TO_NUMBER(Ext.str_centena) > 1);
208
209 ELSE
210
211 Ext.Eplural := (Ext.inteiro > 1);
212
213 END IF;
214
215 END IF;
216
217 END LOOP;
218 END IF;
219 IF Ext.decimal > 0 THEN
220 Ext.str_centena := LTRIM(TO_CHAR(Ext.decimal,'099'));
221 Ext.txt_decimal := Ext.BRANCO;
222 IF Ext.inteiro > 0 THEN
223 Ext.txt_decimal := Ext.E;
224 END IF;
225 Ext.txt_decimal := Ext.txt_decimal || Centena(Ext.str_centena,0);
226 Ext.txt_inteiro := Ext.txt_inteiro || Ext.BRANCO || LTRIM(Ext.txt_decimal);
227 END IF;
228 RETURN REPLACE(LTRIM(Ext.txt_inteiro),'',Ext.BRANCO);
229 EXCEPTION
230 WHEN OTHERS THEN
231 Erro('Extenso',sqlerrm);
232 END BR_CONVERT_AMOUNT;
233
234 END JL_BR_AR_PRINT_AMNT;