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;