diff --git a/html/admin/sql/patch/upgrade57.sql b/html/admin/sql/patch/upgrade57.sql
new file mode 100644
index 000000000..58ea47700
--- /dev/null
+++ b/html/admin/sql/patch/upgrade57.sql
@@ -0,0 +1,43 @@
+begin;
+DROP FUNCTION tva_insert (text,numeric,text,text);
+
+CREATE FUNCTION tva_insert(text, numeric, text, text) RETURNS integer
+ AS $_$
+declare
+l_tva_id integer;
+p_tva_label alias for $1;
+p_tva_rate alias for $2;
+p_tva_comment alias for $3;
+p_tva_poste alias for $4;
+debit text;
+credit text;
+nCount integer;
+begin
+if length(trim(p_tva_label)) = 0 then
+ return 3;
+end if;
+
+if length(trim(p_tva_poste)) != 0 then
+ if position (',' in p_tva_poste) = 0 then return 4; end if;
+ debit = split_part(p_tva_poste,',',1);
+ credit = split_part(p_tva_poste,',',2);
+ select count(*) into nCount from tmp_pcmn where pcm_val=debit::poste_comptable;
+ if nCount = 0 then return 4; end if;
+ select count(*) into nCount from tmp_pcmn where pcm_val=credit::poste_comptable;
+ if nCount = 0 then return 4; end if;
+
+end if;
+select into l_tva_id nextval('s_tva') ;
+insert into tva_rate(tva_id,tva_label,tva_rate,tva_comment,tva_poste)
+ values (l_tva_id,p_tva_label,p_tva_rate,p_tva_comment,p_tva_poste);
+return 0;
+end;
+$_$
+LANGUAGE plpgsql;
+
+
+
+update version set val=58;
+
+commit;
+
diff --git a/include/constant.php b/include/constant.php
index db40861cc..8cbe4b631 100644
--- a/include/constant.php
+++ b/include/constant.php
@@ -26,7 +26,7 @@
require_once ('config.inc.php');
require_once('constant.security.php');
-define ("DBVERSION",57);
+define ("DBVERSION",58);
define ("MAX_COMPTE",4);
define ('MAX_BUD_DETAIL',20);
diff --git a/sql/upgrade.sql b/sql/upgrade.sql
index 83ea54504..8344eabb3 100644
--- a/sql/upgrade.sql
+++ b/sql/upgrade.sql
@@ -1,26 +1,40 @@
begin;
-CREATE OR REPLACE FUNCTION create_missing_sequence()
- RETURNS integer AS
-$BODY$
-declare
-p_sequence text;
-nSeq integer;
-c1 cursor for select jrn_def_id from jrn_def;
-begin
- open c1;
- loop
- fetch c1 into nSeq;
- if not FOUND THEN
- close c1;
- return 0;
- end if;
- p_sequence:='s_jrn_pj'||nSeq::text;
- execute 'create sequence '||p_sequence;
- end loop;
-close c1;
-return 0;
+DROP FUNCTION tva_insert (text,numeric,text,text);
+CREATE FUNCTION tva_insert(text, numeric, text, text) RETURNS integer
+ AS $_$
+declare
+l_tva_id integer;
+p_tva_label alias for $1;
+p_tva_rate alias for $2;
+p_tva_comment alias for $3;
+p_tva_poste alias for $4;
+debit text;
+credit text;
+nCount integer;
+begin
+if length(trim(p_tva_label)) = 0 then
+ return 3;
+end if;
+
+if length(trim(p_tva_poste)) != 0 then
+ if position (',' in p_tva_poste) = 0 then return 4; end if;
+ debit = split_part(p_tva_poste,',',1);
+ credit = split_part(p_tva_poste,',',2);
+ select count(*) into nCount from tmp_pcmn where pcm_val=debit::poste_comptable;
+ if nCount = 0 then return 4; end if;
+ select count(*) into nCount from tmp_pcmn where pcm_val=credit::poste_comptable;
+ if nCount = 0 then return 4; end if;
+
+end if;
+select into l_tva_id nextval('s_tva') ;
+insert into tva_rate(tva_id,tva_label,tva_rate,tva_comment,tva_poste)
+ values (l_tva_id,p_tva_label,p_tva_rate,p_tva_comment,p_tva_poste);
+return 0;
end;
-$BODY$
- LANGUAGE 'plpgsql';
+$_$
+LANGUAGE plpgsql;
+
+
+
commit;