DBA Data[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;