diff --git a/htdocs/telephonie/fournisseur/commande/commande.tableur.class.php b/htdocs/telephonie/fournisseur/commande/commande.tableur.class.php new file mode 100644 index 00000000000..e3593cf3a4a --- /dev/null +++ b/htdocs/telephonie/fournisseur/commande/commande.tableur.class.php @@ -0,0 +1,345 @@ + + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * $Id$ + * $Source$ + * + */ + +require_once DOL_DOCUMENT_ROOT."/includes/php_writeexcel/class.writeexcel_workbook.inc.php"; +require_once DOL_DOCUMENT_ROOT."/includes/php_writeexcel/class.writeexcel_worksheet.inc.php"; +require_once DOL_DOCUMENT_ROOT."/lib/dolibarrmail.class.php"; + +define ('COMMANDETABLEUR_NOEMAIL', -3); + +class CommandeMethodeTableur +{ + + function CommandeMethodeTableur ($DB, $USER=0, $fourn=0) + { + $this->nom = "Méthode Tableur joint"; + $this->db = $DB; + $this->user = $USER; + $this->fournisseur = $fourn; + } + + function info() + { + return "Envoi un fichier tableur contenant la liste des lignes à commander"; + } + + function Create() + { + + $this->date = time(); + + $this->datef = "commande-".strftime("%d%b%y-%HH%M", $this->date); + + $fname = DOL_DATA_ROOT ."/telephonie/ligne/commande/".$this->datef.".xls"; + + if (strlen(trim($this->fournisseur->email_commande)) == 0) + { + return -3; + } + + if (file_exists($fname)) + { + return 2; + } + else + { + $res = $this->CreateFile($fname); + $res = $res + $this->LogSql(); + $res = $res + $this->MailFile($fname); + + return $res; + } + } + /** + * + * + * + * + */ + function MailFile($filename) + { + $sql = "SELECT l.ligne"; + $sql .= " FROM ".MAIN_DB_PREFIX."telephonie_societe_ligne as l"; + $sql .= " WHERE l.statut = 2"; + + $result = $this->db->query($sql); + + if ($result) + { + $num = $this->db->num_rows(); + } + + $subject = "Commande de Lignes"; + + $sendto = $this->fournisseur->email_commande; + + $from = TELEPHONIE_LIGNE_COMMANDE_EMAIL_BCC; + + $message = "Bonjour,\n\nVeuillez trouver ci-joint notre dernière commande.\n\n"; + $message .= "Nous avons à ce jour $num ligne(s) commandée(s) pour lesquelles nous attendons la confirmation de présélection.\n\n\n"; + $message .= "\n\nCordialement,\n\n"; + + $message .= "-- \n"; + $message .= $this->user->fullname."\n"; + + + $mailfile = new DolibarrMail($subject, + $sendto, + $from, + $message); + + $mailfile->addr_bcc = TELEPHONIE_LIGNE_COMMANDE_EMAIL_BCC; + + $mailfile->PrepareFile(array($filename), + array("application/msexcel"), + array($this->datef.".xls")); + + if ( $mailfile->sendfile() ) + { + return 0; + } + + } + + function LogSql() + { + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."telephonie_commande"; + $sql .= " (datec, fk_user_creat, fk_fournisseur, filename)"; + $sql .= " VALUES (now(),".$this->user->id.",".$this->fournisseur->id.",'".$this->datef.".xls')"; + + $result = $this->db->query($sql); + + if ($result) + { + return 0; + } + + } + + + function CreateFile($fname) + { + + $ligne = new LigneTel($db); + + $workbook = &new writeexcel_workbook($fname); + + $worksheet = &$workbook->addworksheet(); + + $worksheet->write(0, 0, "Commande du ".strftime("%d %B %Y %HH%M", $this->date)); + + $worksheet->set_column('A:A', 20); + $worksheet->set_column('B:B', 40); + $worksheet->set_column('C:C', 15); + $worksheet->set_column('D:D', 9); + $worksheet->set_column('E:E', 16); + $worksheet->set_column('F:F', 18); + $worksheet->set_column('G:G', 20); + + $formatcc =& $workbook->addformat(); + $formatcc->set_align('center'); + $formatcc->set_align('vcenter'); + + $formatccb =& $workbook->addformat(); + $formatccb->set_align('center'); + $formatccb->set_align('vcenter'); + $formatccb->set_bold(); + + $formatccbr =& $workbook->addformat(); + $formatccbr->set_align('center'); + $formatccbr->set_align('vcenter'); + $formatccbr->set_color('red'); + $formatccbr->set_bold(); + + $formatc =& $workbook->addformat(); + $formatc->set_align('vcenter'); + + $formatcb =& $workbook->addformat(); + $formatcb->set_align('vcenter'); + $formatcb->set_bold(); + + $i = 0; + + $ligneids = array(); + + $sqlall = "SELECT s.nom, s.idp as socid, l.ligne, f.nom as fournisseur, l.statut, l.rowid"; + $sqlall .= " , comm.name, comm.firstname, l.remise"; + $sqlall .= " FROM ".MAIN_DB_PREFIX."societe as s"; + $sqlall .= " , ".MAIN_DB_PREFIX."telephonie_societe_ligne as l"; + $sqlall .= " , ".MAIN_DB_PREFIX."societe as r"; + $sqlall .= " , ".MAIN_DB_PREFIX."user as comm"; + $sqlall .= " , ".MAIN_DB_PREFIX."telephonie_fournisseur as f"; + $sqlall .= " WHERE l.fk_soc = s.idp AND l.fk_fournisseur = f.rowid"; + $sqlall .= " AND l.fk_soc_facture = r.idp "; + $sqlall .= " AND l.fk_commercial = comm.rowid "; + /* + * + */ + + $sql = $sqlall; + + $sql .= " AND l.statut in (1,4)"; + $sql .= " ORDER BY l.statut ASC"; + + $result = $this->db->query($sql); + + if ($result) + { + $num = $this->db->num_rows(); + + $worksheet->write(1, 0, "Clients", $formatc); + $worksheet->write(1, 1, "Adresses", $formatc); + $worksheet->write(1, 2, "CLI", $formatcc); + $worksheet->write(1, 3, "Préfixe", $formatcc); + $worksheet->write(1, 4, "Présélection", $formatcc); + $worksheet->write(1, 5, "Connexion", $formatcc); + $worksheet->write(1, 6, "Date de la demande", $formatcc); + + while ($i < $num) + { + $obj = $this->db->fetch_object(); + + if (strlen($obj->ligne)== 10) + { + + $j = $i + 2; + $k = $j + 1; + + $soc = new Societe($this->db); + $soc->fetch($obj->socid); + + $worksheet->write($j, 0, $obj->nom, $formatc); + $worksheet->write($j, 1, $soc->adresse. " " . $soc->cp . " " . $soc->ville, $formatc); + + $worksheet->write_string($j, 2, "$obj->ligne", $formatcc); + + $worksheet->write_string($j, 3, "Non", $formatcc); + $worksheet->write_string($j, 4, "Oui", $formatcc); + + if ($obj->statut == 1) + { + $worksheet->write($j, 5, "Ajouter", $formatccb); + $worksheet->write($j, 6, strftime("%d/%m/%y",$this->date), $formatcc); + } + elseif($obj->statut == 4) + { + $worksheet->write($j, 5, "A Résilier", $formatccbr); + $worksheet->write($j, 6, strftime("%d/%m/%y",$this->date), $formatcc); + } + else + { + $worksheet->write($j, 5, "", $formatccb); + $worksheet->write($j, 6, "", $formatccb); + } + + + array_push($ligneids, $obj->rowid); + } + $i++; + } + + $this->db->free(); + } + else + { + print $this->db->error() . ' ' . $sql; + } + + /* + * Archives + * Insertion des anciennes lignes dans le fichier Excell + */ + + $sql = $sqlall; + + $sql .= "AND l.statut > 0 AND l.statut <> 1 AND l.statut <> 4"; + $sql .= " ORDER BY l.statut ASC"; + + $result = $this->db->query($sql); + + if ($result) + { + $num = $this->db->num_rows(); + $i = 0; + while ($i < $num) + { + $obj = $this->db->fetch_object($i); + + $jj = $i + $j + 2; + $k = $jj + 1; + + $soc = new Societe($this->db); + $soc->fetch($obj->socid); + + $worksheet->write($jj, 0, $obj->nom, $formatc); + $worksheet->write($jj, 1, $soc->adresse. " " . $soc->cp . " " . $soc->ville, $formatc); + + $worksheet->write_string($jj, 2, "$obj->ligne", $formatcc); + + $worksheet->write_string($jj, 3, "Non", $formatcc); + $worksheet->write_string($jj, 4, "Oui", $formatcc); + + $worksheet->write($jj, 5, "", $formatccb); + $worksheet->write($jj, 6, "", $formatccb); + + array_push($ligneids, $obj->rowid); + + $i++; + } + + $this->db->free(); + } + else + { + print $this->db->error() . ' ' . $sql; + } + + + /* + * + * + */ + + foreach ($ligneids as $lid) + { + + $lint = new LigneTel($this->db); + $lint->fetch_by_id($lid); + if ($lint->statut == 1) + { + $lint->set_statut($this->user, 2); + } + if ($lint->statut == 4) + { + $lint->set_statut($this->user, 5); + } + } + + + $workbook->close(); + + + return 0; + + } +}