34 const STR_PATTERN=
"([\[\{]{1,2}[[:alnum:]]*%*(-[c,d,s,S]){0,1}[\]\}]{1,2})";
58 return array(
'desc'=>$p_label.
' Erreur Formule!',
66 $cond_anc=
"and ".transform_sql_filter_per($cond);
69 $cond=
"( j_date >= to_date('$p_start','DD.MM.YYYY') and j_date <= to_date('$p_end','DD.MM.YYYY'))";
70 $cond_anc=
"and ( oa_date >= to_date('$p_start','DD.MM.YYYY') and oa_date <= to_date('$p_end','DD.MM.YYYY'))";
74 if ( DEBUGNOALYSS > 1)
76 tracedebug(
"impress.debug.log",
"$p_formula ",
'parse_formula-71 $formula to parse' );
77 tracedebug(
"impress.debug.log",
"$p_label ",
'parse_formula-72 $p_label' );
78 tracedebug(
"impress.debug.log",
$p_start,
'parse_formula-73 $p_start' );
79 tracedebug(
"impress.debug.log",
$p_end,
'parse_formula-74 $p_end ' );
80 tracedebug(
"impress.debug.log", $p_type_date,
'parse_formula-75 $p_type_date' );
81 tracedebug(
"impress.debug.log", $p_sql,
'parse_formula-76 $p_sql' );
82 tracedebug(
"impress.debug.log", $cond ,
'parse_formula-77 $cond SQL accountancy' );
83 tracedebug(
"impress.debug.log", $cond_anc,
'parse_formula-78 $cond_anc SQL Analytic Acc' );
94 if ($p_type_date==0&&preg_match(
"/FROM=[0-9]+\.[0-9]+/", $p_formula, $afrom)==1)
96 $from=str_replace(
'FROM=',
'',$afrom[0]);
98 $cond_anc=
" and ".transform_sql_filter_per($cond);
100 $p_formula=substr_replace($p_formula,
"", strpos($p_formula,
"FROM"));
102 if ($p_type_date==1&&preg_match(
"/FROM=[0-9]+\.[0-9]+/", $p_formula, $afrom)==1)
105 $p_formula=substr_replace($p_formula,
"", strpos($p_formula,
"FROM"));
110 $p_formula=str_replace($x[0],
"(".
$amount.
")", $p_formula);
121 $p_formula=
"\$result=".$p_formula.
";";
124 }
catch(Exception
$e) {
125 return array(
"desc"=>
"erreur",
"montant"=>
'0');
127 while (preg_match(
"/\[([0-9]+)(-[Tt]*)\]/", trim($p_label),
$e)==1)
129 $nom=
"!!".$e[1].
"!!";
132 $nom=$p_cn->get_value(
"SELECT pcm_lib AS acct_name FROM tmp_pcmn WHERE pcm_val::text LIKE $1||'%' ORDER BY pcm_val ASC LIMIT 1",
137 $nom=strtoupper($nom);
139 $nom=strtolower($nom);
142 $p_label=str_replace(
$e[0], $nom, $p_label);
145 $aret=array(
'desc'=>$p_label,
172 $p_string=str_replace(
"round",
"", $p_string);
173 $p_string=str_replace(
"abs",
"", $p_string);
174 $p_string=str_replace(
"(",
"", $p_string);
175 $p_string=str_replace(
")",
"", $p_string);
177 $p_string=str_replace(
"?",
"+", $p_string);
178 $p_string=str_replace(
":",
"+", $p_string);
179 $p_string=str_replace(
">=",
"+", $p_string);
180 $p_string=str_replace(
"<=",
"+", $p_string);
181 $p_string=str_replace(
">",
"+", $p_string);
182 $p_string=str_replace(
"<",
"+", $p_string);
184 $p_string=str_replace(
" ",
"", $p_string);
185 $p_string=str_replace(
",",
"", $p_string);
187 $p_string=str_replace(
"-c",
"", $p_string);
188 $p_string=str_replace(
"-d",
"", $p_string);
189 $p_string=str_replace(
"-s",
"", $p_string);
190 $p_string=str_replace(
"-S",
"", $p_string);
192 $p_string=str_replace(
"-t",
"", $p_string);
195 $p_string=preg_replace(
"/\{\{[[:alnum:]]*\}\}/",
"", $p_string);
198 $p_string=preg_replace(
"/\{[[:alnum:]]*\}/",
"", $p_string);
201 $p_string=preg_replace(
"/FROM*=*[0-9]+/",
"", $p_string);
203 $p_string=preg_replace(
"/#.*/",
"", $p_string);
205 $p_string=preg_replace(
'/\$[a-z]*[A-Z]*[0-9]*[A-Z]*[a-z]*/',
"", $p_string);
206 $p_string=preg_replace(
'/=/',
"", $p_string);
209 $p_string=preg_replace(
"/\[[0-9]*[A-Z]*%*\]/",
"", $p_string);
211 $p_string=preg_replace(
"/\+|-|\/|\*/",
"", $p_string);
212 $p_string=preg_replace(
"/[0-9]*\.*[0-9]/",
"", $p_string);
238 for (
$i=0;
$i<count($aheader);
$i++)
240 $file_csv->add($aheader[
$i][
'title']);
252 if (
$e>count($aheader))
255 if (isset($aheader[
$e][
'type']))
257 switch ($aheader[
$e][
'type'])
260 $file_csv->add(
$value,
"number");
289 if (strpos($p_formula,
'-d')!=0)
293 elseif (strpos($p_formula,
'-c')!=0)
297 elseif (strpos($p_formula,
'-s')!=0)
301 elseif (strpos($p_formula,
'-S')!=0)
323 if ($p_from==
'00.0000')
325 $current_exercice=$p_cn->get_value(
'select p_exercice from parm_periode where p_id=$1',
328 throw new Execution(_(
'CP329'));
330 $first_day=$p_cn->get_value(
"select to_char(min(p_start),'DD.MM.YYYY') as p_start from parm_periode where p_exercice=$1",
332 $last_day=$p_cn->get_value(
"select to_char(p_end,'DD.MM.YYYY') from parm_periode where p_id=$1",[
$p_end]);
335 throw new Exception(
'Pas de limite à cette période', 1);
343 $pfrom=
$oPeriode->find_periode(
'01.'.$p_from);
346 catch (Exception $exp)
352 $first_day=$p_cn->get_value(
"select to_char(min(p_start),'DD.MM.YYYY') as p_start from parm_periode");
353 $last_day=$p_cn->get_value(
"select to_char(p_end,'DD.MM.YYYY') from parm_periode where p_id=$1",[
$p_end]);
356 throw new Exception(
'Pas de limite à cette période', 1);
371 static function compute_amount($p_cn, $p_expression, $p_cond_sql,$p_cond_anc_sql)
373 if ( DEBUGNOALYSS > 1)
375 tracedebug(
"impress.debug.log",
"$p_expression",
'$p_expression' );
376 tracedebug(
"impress.debug.log",
"$p_cond_sql",
'$p_cond_sql' );
380 $p_expression=str_replace(
"-d",
"", $p_expression);
381 $p_expression=str_replace(
"-c",
"", $p_expression);
382 $p_expression=str_replace(
"-s",
"", $p_expression);
383 $p_expression=str_replace(
"-S",
"", $p_expression);
385 if (preg_match(
"/\[.*\]/", $p_expression)) {
386 $p_expression=str_replace(
"[",
"", $p_expression);
387 $p_expression=str_replace(
"]",
"", $p_expression);
389 $detail=$P->get_solde_detail($p_cond_sql);
390 } elseif (preg_match(
"/\{\{.*\}\}/", $p_expression))
392 $p_expression=str_replace(
"{",
"", $p_expression);
393 $p_expression=str_replace(
"}",
"", $p_expression);
395 $anc_account->load_by_code($p_expression);
397 if ( DEBUGNOALYSS > 1)
399 tracedebug(
"impress.debug.log", $p_expression,
'code analytic account');
400 tracedebug(
"impress.debug.log", $p_cond_anc_sql,
'condition SQL ');
405 $detail=$anc_account->get_balance($p_cond_anc_sql);
407 } elseif (preg_match(
"/\{.*\}/", $p_expression))
410 $p_expression=str_replace(
"{",
"", $p_expression);
411 $p_expression=str_replace(
"}",
"", $p_expression);
413 if ( DEBUGNOALYSS > 1)
415 tracedebug(
"impress.debug.log",
"$p_expression",
'search_card qcode =');
417 $fiche->get_by_qcode(strtoupper(trim($p_expression)));
420 throw new \Exception (
"Impress::compute_amount383.".
421 " Unknown expression \$p_expression [$p_expression]".
422 " \$p_cond_sql $p_cond_sql");