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 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;