You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

248 lines
13 KiB

return: 'numeric[]'
lang: plpgsql
parameters:
p0:
type: numeric
name: montant_fact
p1:
type: 'bigint[]'
name: oid_array
p2:
type: 'numeric[]'
name: montant_reglement_array
strict: STRICT
src: |
DECLARE
i integer;
i1 integer;
i2 integer;
i3 integer;
l integer;
n integer;
new_montant_fact numeric;
new_montant_reglement_array numeric[500][3];
signe_array_1 numeric[];
signe_array_2 numeric[];
signe_array_3 numeric[];
BEGIN
i = 1;
l = split_part(split_part(split_part(array_dims(oid_array),':',2),'[',1),']',1)::int;
FOR i IN 1..l LOOP
signe_array_1[i] = 1;
signe_array_2[i] = 1;
signe_array_3[i] = 1;
END LOOP;
FOR i1 IN 1..l LOOP
signe_array_1[l - i1 + 1] = 0 - signe_array_1[l - i1 + 1];
new_montant_fact = 0;
new_montant_reglement_array = array[array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0]];
n = 0;
FOR i IN 1..l LOOP
IF signe_array_1[i] * signe_array_2[i] * signe_array_3[i] <> 1 THEN
n = n + 1;
new_montant_reglement_array[n][1] = oid_array[i]::numeric;
new_montant_reglement_array[n][2] = montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END IF;
new_montant_fact = new_montant_fact + montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END LOOP;
IF new_montant_fact = montant_fact THEN
return new_montant_reglement_array;
END IF;
FOR i2 IN 1..l LOOP
signe_array_2[l - i2 + 1] = 0 - signe_array_2[l - i2 + 1];
new_montant_fact = 0;
new_montant_reglement_array = array[array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0]];
n = 0;
FOR i IN 1..l LOOP
IF signe_array_1[i] * signe_array_2[i] * signe_array_3[i] <> 1 THEN
n = n + 1;
new_montant_reglement_array[n][1] = oid_array[i]::numeric;
new_montant_reglement_array[n][2] = montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END IF;
new_montant_fact = new_montant_fact + montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END LOOP;
IF new_montant_fact = montant_fact THEN
return new_montant_reglement_array;
END IF;
FOR i3 IN 1..l LOOP
signe_array_2[l - i3 + 1] = 0 - signe_array_2[l - i3 + 1];
new_montant_fact = 0;
new_montant_reglement_array = array[array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0]];
n = 0;
FOR i IN 1..l LOOP
IF signe_array_1[i] * signe_array_2[i] * signe_array_3[i] <> 1 THEN
n = n + 1;
new_montant_reglement_array[n][1] = oid_array[i]::numeric;
new_montant_reglement_array[n][2] = montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END IF;
new_montant_fact = new_montant_fact + montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END LOOP;
IF new_montant_fact = montant_fact THEN
return new_montant_reglement_array;
END IF;
END LOOP;
END LOOP;
END LOOP;
FOR i IN 1..l LOOP
signe_array_1[i] = 1;
signe_array_2[i] = 1;
signe_array_3[i] = 1;
END LOOP;
FOR i1 IN 1..l LOOP
FOR i IN 1..l LOOP
signe_array_1[i] = 1;
END LOOP;
signe_array_1[l - i1 + 1] = 0;
new_montant_fact = 0;
new_montant_reglement_array = array[array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0]];
n = 0;
FOR i IN 1..l LOOP
IF signe_array_1[i] * signe_array_2[i] * signe_array_3[i] <> 1 THEN
n = n + 1;
new_montant_reglement_array[n][1] = oid_array[i]::numeric;
new_montant_reglement_array[n][2] = montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END IF;
new_montant_fact = new_montant_fact + montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END LOOP;
IF new_montant_fact = montant_fact THEN
return new_montant_reglement_array;
END IF;
FOR i2 IN 1..l LOOP
FOR i IN 1..l LOOP
signe_array_2[i] = 1;
END LOOP;
signe_array_2[l - i2 + 1] = 0;
new_montant_fact = 0;
new_montant_reglement_array = array[array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0]];
n = 0;
FOR i IN 1..l LOOP
IF signe_array_1[i] * signe_array_2[i] * signe_array_3[i] <> 1 THEN
n = n + 1;
new_montant_reglement_array[n][1] = oid_array[i]::numeric;
new_montant_reglement_array[n][2] = montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END IF;
new_montant_fact = new_montant_fact + montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END LOOP;
IF new_montant_fact = montant_fact THEN
return new_montant_reglement_array;
END IF;
FOR i3 IN 1..l LOOP
FOR i IN 1..l LOOP
signe_array_3[i] = 1;
END LOOP;
signe_array_3[l - i3 + 1] = 0;
new_montant_fact = 0;
new_montant_reglement_array = array[array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0]];
n = 0;
FOR i IN 1..l LOOP
IF signe_array_1[i] * signe_array_2[i] * signe_array_3[i] <> 1 THEN
n = n + 1;
new_montant_reglement_array[n][1] = oid_array[i]::numeric;
new_montant_reglement_array[n][2] = montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END IF;
new_montant_fact = new_montant_fact + montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END LOOP;
IF new_montant_fact = montant_fact THEN
return new_montant_reglement_array;
END IF;
END LOOP;
END LOOP;
END LOOP;
FOR i IN 1..l LOOP
signe_array_1[i] = 1;
signe_array_2[i] = 1;
signe_array_3[i] = 1;
END LOOP;
FOR i1 IN 1..l LOOP
signe_array_1[l - i1 + 1] = 0 - signe_array_1[l - i1 + 1];
new_montant_fact = 0;
new_montant_reglement_array = array[array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0]];
n = 0;
FOR i IN 1..l LOOP
IF signe_array_1[i] * signe_array_2[i] * signe_array_3[i] <> 1 THEN
n = n + 1;
new_montant_reglement_array[n][1] = oid_array[i]::numeric;
new_montant_reglement_array[n][2] = montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END IF;
new_montant_fact = new_montant_fact + montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END LOOP;
IF new_montant_fact = 0 THEN
return new_montant_reglement_array;
END IF;
FOR i2 IN 1..l LOOP
signe_array_2[l - i2 + 1] = 0 - signe_array_2[l - i2 + 1];
new_montant_fact = 0;
new_montant_reglement_array = array[array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0]];
n = 0;
FOR i IN 1..l LOOP
IF signe_array_1[i] * signe_array_2[i] * signe_array_3[i] <> 1 THEN
n = n + 1;
new_montant_reglement_array[n][1] = oid_array[i]::numeric;
new_montant_reglement_array[n][2] = montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END IF;
new_montant_fact = new_montant_fact + montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END LOOP;
IF new_montant_fact = 0 THEN
return new_montant_reglement_array;
END IF;
FOR i3 IN 1..l LOOP
signe_array_2[l - i3 + 1] = 0 - signe_array_2[l - i3 + 1];
new_montant_fact = 0;
new_montant_reglement_array = array[array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],array[0,0],
array[0,0]];
n = 0;
FOR i IN 1..l LOOP
IF signe_array_1[i] * signe_array_2[i] * signe_array_3[i] <> 1 THEN
n = n + 1;
new_montant_reglement_array[n][1] = oid_array[i]::numeric;
new_montant_reglement_array[n][2] = montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END IF;
new_montant_fact = new_montant_fact + montant_reglement_array[i] * signe_array_1[i] * signe_array_2[i] * signe_array_3[i];
END LOOP;
IF new_montant_fact = 0 THEN
return new_montant_reglement_array;
END IF;
END LOOP;
END LOOP;
END LOOP;
return null;
END;