diff --git a/include/ajax/ajax_admin.php b/include/ajax/ajax_admin.php index f37623921..8226cb02e 100644 --- a/include/ajax/ajax_admin.php +++ b/include/ajax/ajax_admin.php @@ -209,6 +209,13 @@ if (in_array($op, array('modele_drop', 'modele_modify', 'folder_modify', 'folder echo _('Description').' :
'; echo $wDesc->input('desc', $dos->get_parameter('desc')); echo '
'; + + echo _('Max. email / jour (-1 = illimité)') ; + $max_email_input=new INum('max_email'); + $max_email_input->value=$dos->get_parameter('max_email'); + $max_email_input->prec=0; + echo $max_email_input->input(); + echo '
'; echo HtmlInput::submit('upd', _('Modifie')); echo ''; $content=ob_get_clean(); diff --git a/include/class/class_dossier.php b/include/class/class_dossier.php index 6e5f7c6b1..9b9fd7890 100644 --- a/include/class/class_dossier.php +++ b/include/class/class_dossier.php @@ -43,7 +43,8 @@ class Dossier private static $variable=array("id"=>"dos_id", "name"=>"dos_name", - "desc"=>"dos_description"); + "desc"=>"dos_description", + "max_email"=>'dos_email'); function __construct($p_id) { @@ -176,7 +177,9 @@ class Dossier exit('gDossier Invalide : '.$id); } - /*!\brief return a string to put to gDossier into a GET */ + /*! + * \brief return a string to put to gDossier into a GET + */ static function get() { @@ -247,20 +250,21 @@ class Dossier array($this->dos_name, $this->dos_id))!=0) return; - $sql="update ac_dossier set dos_name=$1,dos_description=$2 ". - " where dos_id = $3"; + $sql="update ac_dossier set dos_name=$1,dos_description=$2 ,dos_email=$3". + " where dos_id = $4"; $res=$this->cn->exec_sql( $sql, array(trim($this->dos_name), - trim($this->dos_description), - $this->dos_id) + trim($this->dos_description), + $this->dos_email, + $this->dos_id) ); } public function load() { - $sql="select dos_name,dos_description from ac_dossier where dos_id=$1"; + $sql="select dos_name,dos_description,dos_email from ac_dossier where dos_id=$1"; $res=$this->cn->exec_sql( $sql, array($this->dos_id) diff --git a/include/constant.php b/include/constant.php index 24b0cf563..3bff1155f 100644 --- a/include/constant.php +++ b/include/constant.php @@ -106,7 +106,7 @@ if ( ! defined ("SYSINFO_DISPLAY")) { } define ("DBVERSION",125); define ("MONO_DATABASE",25); -define ("DBVERSIONREPO",16); +define ("DBVERSIONREPO",17); define ('NOTFOUND','--not found--'); define ("MAX_COMPTE",4); define ('MAX_ARTICLE',5); @@ -296,4 +296,9 @@ define ("SQL_LIST_UNPAID_INVOICE_DATE_LIMIT" ," where (jr_rapt is null or jr_rapt = '') and to_date(to_char(jr_ech,'DD.MM.YYYY'),'DD.MM.YYYY') < to_date(to_char(now(),'DD.MM.YYYY'),'DD.MM.YYYY') and jr_valid = true" ); -?> + +/** + * Exception + */ +// Limit email exceeds parameter +define ('EMAIL_LIMIT',1002); \ No newline at end of file diff --git a/include/dossier.inc.php b/include/dossier.inc.php index df28c4735..4cabf8535 100644 --- a/include/dossier.inc.php +++ b/include/dossier.inc.php @@ -38,8 +38,10 @@ if ( isset ($_POST['upd']) && isNumber($dossier_id) == 1 && $dossier_id != -1) $dos=new dossier($dossier_id); $name=HtmlInput::default_value_post('name', "--vide--"); $desc=HtmlInput::default_value_post('desc', "--vide--"); + $max_email=HtmlInput::default_value_post("max_email", -1); $dos->set_parameter('name',$name); $dos->set_parameter('desc',$desc); + $dos->set_parameter("max_email", $max_email); $dos->save(); } echo '
'; @@ -89,12 +91,13 @@ if ( isset ($_POST["DATABASE"]) ) * Insert new dossier with description */ $desc=HtmlInput::default_value_post("DESCRIPTION",""); + $max_email=HtmlInput::default_value_post("max_email", -1); try { $repo->start(); - $Res=$repo->exec_sql("insert into ac_dossier(dos_name,dos_description) - values ($1,$2)",array($dos,$desc)); + $Res=$repo->exec_sql("insert into ac_dossier(dos_name,dos_description,dos_email) + values ($1,$2)",array($dos,$desc,$max_email)); $l_id=$repo->get_current_seq('dossier_id'); $repo->commit(); } @@ -334,6 +337,18 @@ if ( $sa == 'list' ) + + + + + + prec=0; + echo $max_email_input->input(); + ?> + + diff --git a/include/lib/class_sendmail.php b/include/lib/class_sendmail.php index 40c8c3a24..ae8f29757 100644 --- a/include/lib/class_sendmail.php +++ b/include/lib/class_sendmail.php @@ -93,7 +93,7 @@ class Sendmail $name = $array[$i]; if (trim($this->$name) == "") { - throw new Exception($name ._(" est vide")); + throw new Exception( sprintf(_("%s est vide",$name))); } } } @@ -149,11 +149,95 @@ class Sendmail */ function send() { + if ( $this->can_send() == false ) throw new Exception(_('Email non envoyé'),EMAIL_LIMIT); //SEND Mail if (!mail($this->mailto, $this->subject, "", $this->content)) { throw new Exception('send failed'); } + // Increment email amount + $repo =new Database(); + $date=date('Ymd'); + $dossier=Dossier::id(); + $this->increment_mail($repo,$dossier,$date); + } + /** + * Check if email can be sent from a folder + * @return boolean + */ + function can_send() { + /** + * if send from a dossier , then check limit of this dossier + * otherwise send true + */ + $dossier=HtmlInput::default_value_request("gDossier", -1); + if ($dossier == -1 ) return true; + + /** + * Compare max value in repo + */ + $repo =new Database(); + $date=date('Ymd'); + // get max email + $max_email = $this->get_max_email($repo,$dossier); + // + // This folder cannot send email + if ($max_email == 0 ) return false; + // + // This folder has unlimited email + if ($max_email == -1 ) return true; + + // get email sent today from account_repository + $email_sent = $this->get_email_sent($repo,$dossier , $date); + // + if ( $email_sent >= $max_email) return false; + + return true; + } + /** + * return max email the folder can send + * @param $p_repo Database + * @param $p_dossier_id int + */ + function get_max_email(Database $p_repo,$p_dossier_id) + { + $max_email = $p_repo->get_value("select dos_email from ac_dossier where dos_id=$1", + array($p_dossier_id)); + return $max_email; + } + /** + * Return the amount of send emails for the date (YYYYMMDD) + * @param Database $p_repo + * @param $p_dossier_id int + * @param $p_date string YYYYMMDD + */ + function get_email_sent(Database $p_repo,$p_dossier_id,$p_date) + { + + $email_sent = $p_repo->get_value ('select de_sent_email from dossier_sent_email where dos_id = $1 and de_date=$2', + array($p_dossier_id,$p_date)); + return $email_sent; + + + } + /** + * Add $p_amount_email to email sent + * @param $p_repo Database + * @param $p_dossier int id of the folder (dossier.dos_id) + * @param $p_date string (YYYYMMDD) + */ + function increment_mail(Database $p_repo,$p_dossier,$p_date) + { + $email_sent = $this->get_email_sent($p_repo,$p_dossier,$p_date); + if ( $email_sent == 0 ){ + $p_repo->exec_sql("insert into public.dossier_sent_email(de_sent_email,dos_id,de_date) values($1,$2,$3)", + array(1,$p_dossier,$p_date)); + return; + } else { + // update + sp_emaoun_email + $p_repo->exec_sql("update dossier_sent_email set de_sent_email=de_sent_email+1 where dos_id=$1 and de_date=$2", + array($p_dossier,$p_date)); + } } } diff --git a/include/sql/patch/ac-upgrade16.sql b/include/sql/patch/ac-upgrade16.sql new file mode 100644 index 000000000..65933d5f0 --- /dev/null +++ b/include/sql/patch/ac-upgrade16.sql @@ -0,0 +1,20 @@ +begin; +ALTER TABLE public.ac_dossier ADD dos_email int4 NULL DEFAULT -1; +comment on column public.ac_dossier.dos_email is 'Max emails per day : 0 none , -1 unlimited or max value'; + +CREATE TABLE public.dossier_sent_email ( + id serial primary key, + de_date varchar(8) NOT NULL, + de_sent_email int4 NOT NULL, + dos_id int4 NOT NULL +); +comment on table public.dossier_sent_email is 'Count the sent email by folder'; +comment on column public.dossier_sent_email.id is 'primary key'; +comment on column public.dossier_sent_email.de_date is 'Date YYYYMMDD'; +comment on column public.dossier_sent_email.de_sent_email is 'Number of sent emails'; +comment on column public.dossier_sent_email.dos_id is 'Link to ac_dossier'; + +alter table public.dossier_sent_email add constraint de_ac_dossier_fk foreign key (dos_id) references ac_dossier (dos_id ) on update cascade on delete cascade; +alter table public.dossier_sent_email add constraint de_date_dos_id_ux unique (de_date,dos_id); +select upgrade_repo(17); +commit;