diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php index 10c087af07d8f19dcfe846a2484e95dc6a8d1400..d9adb0ccc1ae064c91f1a5ae69bd71609ce2a3dc 100644 --- a/htdocs/fourn/class/fournisseur.commande.class.php +++ b/htdocs/fourn/class/fournisseur.commande.class.php @@ -4,6 +4,7 @@ * Copyright (C) 2005-2009 Regis Houssin <regis@dolibarr.fr> * Copyright (C) 2007 Franky Van Liedekerke <franky.van.liedekerke@telenet.be> * Copyright (C) 2010-2011 Juanjo Menent <jmenent@2byte.es> + * Copyright (C) 2010-2011 Philippe Grand <philippe.grand@atoo-net.com> * * 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 @@ -67,6 +68,8 @@ class CommandeFournisseur extends Commande var $note_public; var $model_pdf; var $fk_project; + var $cond_reglement_id; + var $cond_reglement_code; /** \brief Constructeur @@ -103,10 +106,12 @@ class CommandeFournisseur extends Commande $sql = "SELECT c.rowid, c.ref, c.date_creation, c.fk_soc, c.fk_user_author, c.fk_statut, c.amount_ht, c.total_ht, c.total_ttc, c.tva,"; $sql.= " c.localtax1, c.localtax2, "; - $sql.= " c.date_commande as date_commande, c.fk_projet as fk_project, c.remise_percent, c.source, c.fk_methode_commande,"; + $sql.= " c.date_commande as date_commande, c.fk_cond_reglement, c.fk_projet as fk_project, c.remise_percent, c.source, c.fk_methode_commande,"; $sql.= " c.note, c.note_public, c.model_pdf,"; - $sql.= " cm.libelle as methode_commande"; + $sql.= " cm.libelle as methode_commande,"; + $sql.= " cr.code as cond_reglement_code, cr.libelle as cond_reglement_libelle"; $sql.= " FROM ".MAIN_DB_PREFIX."commande_fournisseur as c"; + $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_payment_term as cr ON (c.fk_cond_reglement = cr.rowid)"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."c_input_method as cm ON cm.rowid = c.fk_methode_commande"; $sql.= " WHERE c.entity = ".$conf->entity; if ($ref) $sql.= " AND c.ref='".$ref."'"; @@ -139,6 +144,9 @@ class CommandeFournisseur extends Commande $this->source = $obj->source; $this->facturee = $obj->facture; $this->fk_project = $obj->fk_project; + $this->cond_reglement_id = $obj->fk_cond_reglement; + $this->cond_reglement_code = $obj->cond_reglement_code; + $this->cond_reglement = $obj->cond_reglement_libelle;; $this->note = $obj->note; $this->note_public = $obj->note_public; $this->modelpdf = $obj->model_pdf; @@ -1148,6 +1156,39 @@ class CommandeFournisseur extends Commande } } + /** + * \brief Change les conditions de reglement de la commande + * \param cond_reglement_id Id de la nouvelle condition de reglement + * \return int >0 si ok, <0 si ko + */ + function cond_reglement($cond_reglement_id) + { + dol_syslog('CommandeFournisseur::cond_reglement('.$cond_reglement_id.')'); + if ($this->statut >= 0) + { + $sql = 'UPDATE '.MAIN_DB_PREFIX.'commande_fournisseur'; + $sql .= ' SET fk_cond_reglement = '.$cond_reglement_id; + $sql .= ' WHERE rowid='.$this->id; + if ( $this->db->query($sql) ) + { + $this->cond_reglement_id = $cond_reglement_id; + return 1; + } + else + { + dol_syslog('CommandeFournisseur::cond_reglement Erreur '.$sql.' - '.$this->db->error(), LOG_ERR); + $this->error=$this->db->lasterror(); + return -1; + } + } + else + { + dol_syslog('CommandeFournisseur::cond_reglement, etat commande incompatible', LOG_ERR); + $this->error='Etat commande incompatible '.$this->statut; + return -2; + } + } + /** * Set a delivery in database for this supplier order * @param user User that input data diff --git a/htdocs/fourn/commande/fiche.php b/htdocs/fourn/commande/fiche.php index 6d555bc25939514d0bd67827a44ee3174b11373e..6cfa0d30767b6e6e49602241b9e5e6d141236885 100644 --- a/htdocs/fourn/commande/fiche.php +++ b/htdocs/fourn/commande/fiche.php @@ -4,6 +4,7 @@ * Copyright (C) 2005 Eric Seigne <eric.seigne@ryxeo.com> * Copyright (C) 2005-2010 Regis Houssin <regis@dolibarr.fr> * Copyright (C) 2010 Juanjo Menent <jmenent@2byte.es> + * Copyright (C) 2011 Philippe Grand <philippe.grand@atoo-net.com> * * 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 @@ -68,6 +69,1571 @@ $mesg=''; * Actions */ + // conditions de reglement +if ($action == 'setconditions' && $user->rights->fournisseur->commande->creer) +{ + $commande = new CommandeFournisseur($db); + $commande->fetch($id); + $result=$commande->cond_reglement($_POST['cond_reglement_id']); +} + +// Set project +if ($action == 'classin') +{ + $commande = new CommandeFournisseur($db); + $commande->fetch($id); + $commande->setProject($_POST["projectid"]); +} + +if ($action == 'setremisepercent' && $user->rights->fournisseur->commande->creer) +{ + $commande = new CommandeFournisseur($db); + $commande->fetch($id); + $result = $commande->set_remise($user, $_POST['remise_percent']); +} + +if ($action == 'reopen' && $user->rights->fournisseur->commande->approuver) +{ + $order = new CommandeFournisseur($db); + $result = $order->fetch($id); + if ($order->statut == 5 || $order->statut == 6 || $order->statut == 7 || $order->statut == 9) + { + if ($order->statut == 5) $newstatus=4; // Received->Received partially + if ($order->statut == 6) $newstatus=2; // Canceled->Approved + if ($order->statut == 7) $newstatus=3; // Canceled->Process running + if ($order->statut == 9) $newstatus=1; // Refused->Validated + + $result = $order->setStatus($user,$newstatus); + if ($result > 0) + { + Header('Location: '.$_SERVER["PHP_SELF"].'?id='.$_REQUEST['id']); + exit; + } + else + { + $mesg='<div class="error">'.$order->error.'</div>'; + } + } +} + +/* + * Add a line into product + */ +if ($action == 'addline' && $user->rights->fournisseur->commande->creer) +{ + if (($_POST['qty'] || $_POST['pqty']) && (($_POST['pu'] && ($_POST['np_desc'] || $_POST['dp_desc'])) || $_POST['idprodfournprice'])) + { + $commande = new CommandeFournisseur($db); + $ret=$commande->fetch($id); + if ($ret < 0) + { + dol_print_error($db,$commande->error); + exit; + } + + // Ecrase $pu par celui du produit + // Ecrase $desc par celui du produit + // Ecrase $txtva par celui du produit + if ($_POST["idprodfournprice"]) // >0 or -1 + { + $qty = $_POST['qty'] ? $_POST['qty'] : $_POST['pqty']; + + $product = new ProductFournisseur($db); + $idprod=$product->get_buyprice($_POST['idprodfournprice'], $qty); + + //$societe=''; + if ($commande->socid) + { + $societe=new Societe($db); + $societe->fetch($commande->socid); + } + + if ($idprod > 0) + { + $res=$product->fetch($idprod); + + // cas special pour lequel on a les meme reference que le fournisseur + // $label = '['.$nv_prod->ref.'] - '. $nv_prod->libelle; + $label = $product->libelle; + + $desc = $product->description; + $desc.= $product->description && $_POST['np_desc'] ? "\n" : ""; + $desc.= $_POST['np_desc']; + + $remise_percent = $_POST["remise_percent"] ? $_POST["remise_percent"] : $_POST["p_remise_percent"]; + + $tva_tx = get_default_tva($societe,$mysoc,$product->id); + $type = $product->type; + + // Local Taxes + $localtax1_tx= get_localtax($tva_tx, 1, $societe); + $localtax2_tx= get_localtax($tva_tx, 2, $societe); + + $result=$commande->addline( + $desc, + $pu, + $qty, + $tva_tx, + $localtax1_tx, + $localtax2_tx, + $product->id, + $_POST['idprodfournprice'], + $product->fourn_ref, + $remise_percent, + 'HT', + $type + ); + } + if ($idprod == -1) + { + // Quantity too low + $langs->load("errors"); + $mesg='<div class="error">'.$langs->trans("ErrorQtyTooLowForThisSupplier").'</div>'; + } + } + else + { + $type=$_POST["type"]; + $desc=$_POST['dp_desc']; + $tva_tx = price2num($_POST['tva_tx']); + + // Local Taxes + $localtax1_tx= get_localtax($tva_tx, 1, $societe); + $localtax2_tx= get_localtax($tva_tx, 2, $societe); + + if (! $_POST['dp_desc']) + { + $mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Label")).'</div>'; + } + else + { + if (!empty($_POST['pu'])) + { + $price_base_type = 'HT'; + $ht = price2num($_POST['pu']); + $result=$commande->addline($desc, $ht, $_POST['qty'], $tva_tx, $localtax1_tx, $localtax2_tx, 0, 0, '', $_POST['remise_percent'], $price_base_type, 0, $type); + } + else + { + $ttc = price2num($_POST['amountttc']); + $ht = $ttc / (1 + ($tauxtva / 100)); + $price_base_type = 'HT'; + $result=$commande->addline($desc, $ht, $_POST['qty'], $tva_tx, $localtax1_tx, $localtax2_tx, 0, 0, '', $_POST['remise_percent'], $price_base_type, $ttc, $type); + } + } + } + + //print "xx".$tva_tx; exit; + if ($result > 0) + { + $outputlangs = $langs; + if (! empty($_REQUEST['lang_id'])) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($_REQUEST['lang_id']); + } + supplier_order_pdf_create($db, $commande, $commande->modelpdf, $outputlangs); + + unset($_POST['qty']); + unset($_POST['type']); + unset($_POST['idprodfournprice']); + unset($_POST['remmise_percent']); + unset($_POST['dp_desc']); + unset($_POST['np_desc']); + unset($_POST['pu']); + unset($_POST['tva_tx']); + unset($localtax1_tx); + unset($localtax2_tx); + } + else if (empty($mesg)) + { + $mesg='<div class="error">'.$commande->error.'</div>'; + } + } +} + +/* + * Mise a jour d'une ligne dans la commande + */ +if ($action == 'updateligne' && $user->rights->fournisseur->commande->creer && $_POST['save'] == $langs->trans('Save')) +{ + $product=new Product($db); + if ($_POST["elrowid"]) + { + if ($product->fetch($_POST["elrowid"]) < 0) dol_print_error($db); + } + $commande = new CommandeFournisseur($db,"",$id); + if ($commande->fetch($id) < 0) dol_print_error($db); + + $societe=new Societe($db); + $societe->fetch($commande->socid); + + $localtax1_tx=get_localtax($_POST['tva_tx'],1,$societe); + $localtax2_tx=get_localtax($_POST['tva_tx'],2,$societe); + + $result = $commande->updateline($_POST['elrowid'], + $_POST['eldesc'], + $_POST['pu'], + $_POST['qty'], + $_POST['remise_percent'], + $_POST['tva_tx'], + $localtax1_tx, + $localtax2_tx, + 'HT', + 0, + isset($_POST["type"])?$_POST["type"]:$product->type + ); + + if ($result >= 0) + { + $outputlangs = $langs; + if (! empty($_REQUEST['lang_id'])) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($_REQUEST['lang_id']); + } + supplier_order_pdf_create($db, $commande, $commande->modelpdf, $outputlangs); + } + else + { + dol_print_error($db,$commande->error); + exit; + } +} + +if ($action == 'confirm_deleteproductline' && $_REQUEST['confirm'] == 'yes') +{ + if ($user->rights->fournisseur->commande->creer) + { + $commande = new CommandeFournisseur($db); + $commande->fetch($id); + $result = $commande->deleteline($_GET['lineid']); + + $outputlangs = $langs; + if (! empty($_REQUEST['lang_id'])) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($_REQUEST['lang_id']); + } + supplier_order_pdf_create($db, $commande, $commande->modelpdf, $outputlangs); + } +} + +if ($action == 'confirm_valid' && $_REQUEST['confirm'] == 'yes' && $user->rights->fournisseur->commande->valider) +{ + $commande = new CommandeFournisseur($db); + $commande->fetch($id); + + $commande->date_commande=dol_now(); + $result = $commande->valid($user); + if ($result >= 0) + { + $outputlangs = $langs; + if (! empty($_REQUEST['lang_id'])) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($_REQUEST['lang_id']); + } + supplier_order_pdf_create($db, $commande, $commande->modelpdf, $outputlangs); + } + else + { + $mesg=$commande->error; + } + + // If we have permission, we go directly on approved step + if ($user->rights->fournisseur->commande->approuver) + { + $action='confirm_approve'; + } +} + +if ($action == 'confirm_approve' && $_REQUEST["confirm"] == 'yes' && $user->rights->fournisseur->commande->approuver) +{ + $commande = new CommandeFournisseur($db); + $commande->fetch($id); + $result = $commande->approve($user); + if ($result > 0) + { + Header("Location: fiche.php?id=".$id); + exit; + } + else + { + $mesg=$commande->error; + } +} + +if ($action == 'confirm_refuse' && $_REQUEST['confirm'] == 'yes' && $user->rights->fournisseur->commande->approuver) +{ + $commande = new CommandeFournisseur($db); + $commande->fetch($id); + $result = $commande->refuse($user); + if ($result > 0) + { + Header("Location: fiche.php?id=".$id); + exit; + } + else + { + $mesg=$commande->error; + } +} + +if ($action == 'confirm_commande' && $_REQUEST['confirm'] == 'yes' && $user->rights->fournisseur->commande->commander) +{ + $commande = new CommandeFournisseur($db); + $commande->fetch($id); + $result = $commande->commande($user, $_REQUEST["datecommande"], $_REQUEST["methode"], $_REQUEST['comment']); + if ($result > 0) + { + Header("Location: fiche.php?id=".$id); + exit; + } + else + { + $mesg=$commande->error; + } +} + + +if ($action == 'confirm_delete' && $_REQUEST['confirm'] == 'yes' && $user->rights->fournisseur->commande->supprimer) +{ + $commande = new CommandeFournisseur($db); + $commande->fetch($id); + $result=$commande->delete($user); + if ($result > 0) + { + Header("Location: ".DOL_URL_ROOT.'/fourn/commande/liste.php'); + exit; + } + else + { + $mesg=$commande->error; + } +} + +// Receive +if ($_POST["action"] == 'livraison' && $user->rights->fournisseur->commande->receptionner) +{ + $commande = new CommandeFournisseur($db); + $commande->fetch($id); + + if ($_POST["type"]) + { + $date_liv = dol_mktime(0,0,0,$_POST["remonth"],$_POST["reday"],$_POST["reyear"]); + + $result = $commande->Livraison($user, $date_liv, $_POST["type"], $_POST["comment"]); + if ($result > 0) + { + Header("Location: fiche.php?id=".$id); + exit; + } + else if($result == -3) + { + $mesg='<div class="error">'.$langs->trans("NotAuthorized").'</div>'; + } + else + { + dol_print_error($db,$commande->error); + exit; + } + } + else + { + $mesg='<div class="error">'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("Delivery")).'</div>'; + } +} + +if ($action == 'confirm_cancel' && $_REQUEST["confirm"] == 'yes' && $user->rights->fournisseur->commande->commander) +{ + $commande = new CommandeFournisseur($db); + $commande->fetch($id); + $result = $commande->cancel($user); + if ($result > 0) + { + Header("Location: fiche.php?id=".$id); + exit; + } + else + { + $mesg=$commande->error; + } +} + +// Line ordering + +if ($_GET['action'] == 'up' && $user->rights->fournisseur->commande->creer) +{ + $commande = new CommandeFournisseur($db,'',$id); + $commande->fetch($id); + $commande->line_up($_GET['rowid']); + + $outputlangs = $langs; + if (! empty($_REQUEST['lang_id'])) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($_REQUEST['lang_id']); + } + supplier_order_pdf_create($db, $commande, $commande->modelpdf, $outputlangs); + Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$id.(empty($conf->global->MAIN_JUMP_TAG)?'':'#'.$_GET['rowid'])); + exit; +} + +if ($_GET['action'] == 'down' && $user->rights->fournisseur->commande->creer) +{ + $commande = new CommandeFournisseur($db,'',$id); + $commande->fetch($id); + $commande->line_down($_GET['rowid']); + + $outputlangs = $langs; + if (! empty($_REQUEST['lang_id'])) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($_REQUEST['lang_id']); + } + supplier_order_pdf_create($db, $commande, $commande->modelpdf, $outputlangs); + Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$id.(empty($conf->global->MAIN_JUMP_TAG)?'':'#'.$_GET['rowid'])); + exit; +} + + +if ($action == 'builddoc') // En get ou en post +{ + // Build document + + // Sauvegarde le dernier module choisi pour generer un document + $commande = new CommandeFournisseur($db); + $commande->fetch($_REQUEST['id']); + if ($_REQUEST['model']) + { + $commande->setDocModel($user, $_REQUEST['model']); + } + + $outputlangs = $langs; + if (! empty($_REQUEST['lang_id'])) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($_REQUEST['lang_id']); + } + $result=supplier_order_pdf_create($db, $commande,$commande->modelpdf,$outputlangs); + if ($result <= 0) + { + dol_print_error($db,$result); + exit; + } + else + { + Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$commande->id.(empty($conf->global->MAIN_JUMP_TAG)?'':'#builddoc')); + exit; + } +} + +// Delete file in doc form +if ($action=='remove_file') +{ + require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php"); + $commande = new CommandeFournisseur($db); + + if ($commande->fetch($id)) + { + $upload_dir = $conf->fournisseur->commande->dir_output . "/"; + $file = $upload_dir . '/' . $_GET['file']; + dol_delete_file($file); + $mesg = '<div class="ok">'.$langs->trans("FileWasRemoved").'</div>'; + } +} + + +/* + * Create an order + */ +if ($action == 'create') +{ + $fourn = new Fournisseur($db); + $result=$fourn->fetch($socid); + + $db->begin(); + + $orderid=$fourn->create_commande($user); + + if ($orderid > 0) + { + $idc = $fourn->single_open_commande; + + if ($comclientid != '') + { + $fourn->updateFromCommandeClient($user,$idc,$comclientid); + + } + + $id=$orderid; + $_GET['id']=$id; + $_REQUEST['id']=$id; + $db->commit(); + } + else + { + $db->rollback(); + $mesg=$fourn->error; + } +} + +/* + * Add file in email form + */ +if ($_POST['addfile']) +{ + require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php"); + + // Set tmp user directory TODO Use a dedicated directory for temp mails files + $vardir=$conf->user->dir_output."/".$user->id; + $upload_dir = $vardir.'/temp/'; + + $mesg=dol_add_file_process($upload_dir,0,0); + + $_GET["action"]='presend'; + $_POST["action"]='presend'; +} + +/* + * Remove file in email form + */ +if (! empty($_POST['removedfile'])) +{ + require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php"); + + // Set tmp user directory + $vardir=$conf->user->dir_output."/".$user->id; + $upload_dir = $vardir.'/temp/'; + + $mesg=dol_remove_file_process($_POST['removedfile'],0); + + $_GET["action"]='presend'; + $_POST["action"]='presend'; +} + +/* + * Send mail + */ +if ($_POST['action'] == 'send' && ! $_POST['addfile'] && ! $_POST['removedfile'] && ! $_POST['cancel']) +{ + $langs->load('mails'); + + $commande= new CommandeFournisseur($db); + $result=$commande->fetch($_POST['orderid']); + $result=$commande->fetch_thirdparty(); + + if ($result > 0) + { + $ref = dol_sanitizeFileName($commande->ref); + $file = $conf->fournisseur->commande->dir_output . '/' . $ref . '/' . $ref . '.pdf'; + + if (is_readable($file)) + { + if ($_POST['sendto']) + { + // Le destinataire a ete fourni via le champ libre + $sendto = $_POST['sendto']; + $sendtoid = 0; + } + elseif ($_POST['receiver']) + { + // Le destinataire a ete fourni via la liste deroulante + if ($_POST['receiver'] < 0) // Id du tiers + { + $sendto = $commande->client->email; + $sendtoid = 0; + } + else // Id du contact + { + $sendto = $commande->client->contact_get_property($_POST['receiver'],'email'); + $sendtoid = $_POST['receiver']; + } + } + + if (dol_strlen($sendto)) + { + $langs->load("commercial"); + + $from = $_POST['fromname'] . ' <' . $_POST['frommail'] .'>'; + $replyto = $_POST['replytoname']. ' <' . $_POST['replytomail'].'>'; + $message = $_POST['message']; + $sendtocc = $_POST['sendtocc']; + $deliveryreceipt = $_POST['deliveryreceipt']; + + if ($_POST['action'] == 'send') + { + if (dol_strlen($_POST['subject'])) $subject=$_POST['subject']; + else $subject = $langs->transnoentities('CustomerOrder').' '.$commande->ref; + $actiontypecode='AC_SUP_ORD'; + $actionmsg = $langs->transnoentities('MailSentBy').' '.$from.' '.$langs->transnoentities('To').' '.$sendto.".\n"; + if ($message) + { + $actionmsg.=$langs->transnoentities('MailTopic').": ".$subject."\n"; + $actionmsg.=$langs->transnoentities('TextUsedInTheMessageBody').":\n"; + $actionmsg.=$message; + } + $actionmsg2=$langs->transnoentities('Action'.$actiontypecode); + } + + // Create form object + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'); + $formmail = new FormMail($db); + + $attachedfiles=$formmail->get_attached_files(); + $filepath = $attachedfiles['paths']; + $filename = $attachedfiles['names']; + $mimetype = $attachedfiles['mimes']; + + // Send mail + require_once(DOL_DOCUMENT_ROOT.'/lib/CMailFile.class.php'); + $mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,'',$deliveryreceipt); + if ($mailfile->error) + { + $mesg='<div class="error">'.$mailfile->error.'</div>'; + } + else + { + $result=$mailfile->sendfile(); + if ($result) + { + $mesg=$langs->trans('MailSuccessfulySent',$from,$sendto); // Must not contain " + + $error=0; + + // Initialisation donnees + $commande->sendtoid=$sendtoid; + $commande->actiontypecode=$actiontypecode; + $commande->actionmsg = $actionmsg; + $commande->actionmsg2= $actionmsg2; + $commande->supplierorderrowid=$commande->id; + + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($db); + $result=$interface->run_triggers('ORDER_SUPPLIER_SENTBYMAIL',$commande,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + + if ($error) + { + dol_print_error($db); + } + else + { + // Redirect here + // This avoid sending mail twice if going out and then back to page + Header('Location: '.$_SERVER["PHP_SELF"].'?id='.$commande->id.'&mesg='.urlencode($mesg)); + exit; + } + } + else + { + $langs->load("other"); + $mesg='<div class="error">'; + if ($mailfile->error) + { + $mesg.=$langs->trans('ErrorFailedToSendMail',$from,$sendto); + $mesg.='<br>'.$mailfile->error; + } + else + { + $mesg.='No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS'; + } + $mesg.='</div>'; + } + } + } + else + { + $langs->load("other"); + $mesg='<div class="error">'.$langs->trans('ErrorMailRecipientIsEmpty').' !</div>'; + $_GET["action"]='presend'; + dol_syslog('Recipient email is empty'); + } + } + else + { + $langs->load("other"); + $mesg='<div class="error">'.$langs->trans('ErrorCantReadFile',$file).'</div>'; + dol_syslog('Failed to read file: '.$file); + } + } + else + { + $langs->load("other"); + $mesg='<div class="error">'.$langs->trans('ErrorFailedToReadEntity',$langs->trans("Invoice")).'</div>'; + dol_syslog('Impossible de lire les donnees de la facture. Le fichier facture n\'a peut-etre pas ete genere.'); + } +} + + +/* + * View + */ + +llxHeader('',$langs->trans("OrderCard"),"CommandeFournisseur"); + +$html = new Form($db); +$formfile = new FormFile($db); +$formorder = new FormOrder($db); +$productstatic = new Product($db); + + +/* *************************************************************************** */ +/* */ +/* Mode vue et edition */ +/* */ +/* *************************************************************************** */ + +$now=dol_now(); + +$id = $_REQUEST['id']; +$ref= $_REQUEST['ref']; + +if ($id > 0 || ! empty($ref)) +{ + //if ($mesg) print $mesg.'<br>'; + + $commande = new CommandeFournisseur($db); + + $result=$commande->fetch($id,$ref); + if ($result >= 0) + { + $soc = new Societe($db); + $soc->fetch($commande->socid); + + $author = new User($db); + $author->fetch($commande->user_author_id); + + $head = ordersupplier_prepare_head($commande); + + $title=$langs->trans("SupplierOrder"); + dol_fiche_head($head, 'card', $title, 0, 'order'); + + /* + * Confirmation de la suppression de la commande + */ + if ($_GET['action'] == 'delete') + { + $ret=$html->form_confirm($_SERVER["PHP_SELF"].'?id='.$id, $langs->trans('DeleteOrder'), $langs->trans('ConfirmDeleteOrder'), 'confirm_delete', '', 0, 2); + if ($ret == 'html') print '<br>'; + } + + /* + * Confirmation de la validation + */ + if ($_GET['action'] == 'valid') + { + $commande->date_commande=gmmktime(); + + // We check if number is temporary number + if (preg_match('/^[\(]?PROV/i',$commande->ref)) $newref = $commande->getNextNumRef($soc); + else $newref = $commande->ref; + + $text=$langs->trans('ConfirmValidateOrder',$newref); + if ($conf->notification->enabled) + { + require_once(DOL_DOCUMENT_ROOT ."/core/class/notify.class.php"); + $notify=new Notify($db); + $text.='<br>'; + $text.=$notify->confirmMessage(3,$commande->socid); + } + + $ret=$html->form_confirm($_SERVER["PHP_SELF"].'?id='.$id, $langs->trans('ValidateOrder'), $text, 'confirm_valid', '', 0, 1); + if ($ret == 'html') print '<br>'; + } + /* + * Confirmation de l'approbation + */ + if ($_GET['action'] == 'approve') + { + $ret=$html->form_confirm("fiche.php?id=$commande->id",$langs->trans("ApproveThisOrder"),$langs->trans("ConfirmApproveThisOrder",$commande->ref),"confirm_approve", '', 1, 1); + if ($ret == 'html') print '<br>'; + } + /* + * Confirmation de la desapprobation + */ + if ($_GET['action'] == 'refuse') + { + $ret=$html->form_confirm("fiche.php?id=$commande->id",$langs->trans("DenyingThisOrder"),$langs->trans("ConfirmDenyingThisOrder",$commande->ref),"confirm_refuse", '', 0, 1); + if ($ret == 'html') print '<br>'; + } + /* + * Confirmation de l'annulation + */ + if ($_GET['action'] == 'cancel') + { + $ret=$html->form_confirm("fiche.php?id=$commande->id",$langs->trans("Cancel"),$langs->trans("ConfirmCancelThisOrder",$commande->ref),"confirm_cancel", '', 0, 1); + if ($ret == 'html') print '<br>'; + } + + /* + * Confirmation de l'envoi de la commande + */ + if ($_GET["action"] == 'commande') + { + $date_com = dol_mktime(0,0,0,$_POST["remonth"],$_POST["reday"],$_POST["reyear"]); + $ret=$html->form_confirm("fiche.php?id=".$commande->id."&datecommande=".$date_com."&methode=".$_POST["methodecommande"]."&comment=".urlencode($_POST["comment"]), + $langs->trans("MakeOrder"),$langs->trans("ConfirmMakeOrder",dol_print_date($date_com,'day')),"confirm_commande",'',0,2); + if ($ret == 'html') print '<br>'; + } + + /* + * Confirmation de la suppression d'une ligne produit + */ + if ($_GET['action'] == 'delete_product_line') + { + $ret=$html->form_confirm($_SERVER["PHP_SELF"].'?id='.$commande->id.'&lineid='.$_GET["lineid"], $langs->trans('DeleteProductLine'), $langs->trans('ConfirmDeleteProductLine'), 'confirm_deleteproductline','',0,2); + if ($ret == 'html') print '<br>'; + } + + /* + * Commande + */ + $nbrow=8; + if ($conf->projet->enabled) $nbrow++; + + //Local taxes + if ($mysoc->pays_code=='ES') + { + if($mysoc->localtax1_assuj=="1") $nbrow++; + if($mysoc->localtax2_assuj=="1") $nbrow++; + } + + print '<table class="border" width="100%">'; + + // Ref + print '<tr><td width="20%">'.$langs->trans("Ref").'</td>'; + print '<td colspan="2">'; + print $html->showrefnav($commande,'ref','',1,'ref','ref'); + print '</td>'; + print '</tr>'; + + // Ref supplier +/* print '<tr><td>'.$langs->trans("RefSupplier")."</td>"; + print '<td colspan="2">'.$commande->ref_supplier.'</td>'; + print '</tr>'; +*/ + // Fournisseur + print '<tr><td>'.$langs->trans("Supplier")."</td>"; + print '<td colspan="2">'.$soc->getNomUrl(1,'supplier').'</td>'; + print '</tr>'; + + // Statut + print '<tr>'; + print '<td>'.$langs->trans("Status").'</td>'; + print '<td colspan="2">'; + print $commande->getLibStatut(4); + print "</td></tr>"; + + // Date + if ($commande->methode_commande_id > 0) + { + print '<tr><td>'.$langs->trans("Date").'</td><td colspan="2">'; + if ($commande->date_commande) + { + print dol_print_date($commande->date_commande,"dayhourtext")."\n"; + } + print "</td></tr>"; + + if ($commande->methode_commande) + { + print '<tr><td>'.$langs->trans("Method").'</td><td colspan="2">'.$commande->methode_commande.'</td></tr>'; + } + } + + // Author + print '<tr><td>'.$langs->trans("AuthorRequest").'</td>'; + print '<td colspan="2">'.$author->getNomUrl(1).'</td>'; + print '</tr>'; + + // Conditions de reglement par defaut + $langs->load('bills'); + $html = new Form($db); + print '<tr><td nowrap>'; + print '<table width="100%" class="nobordernopadding"><tr><td nowrap>'; + print $langs->trans('PaymentConditions'); + print '<td>'; + if ($_GET['action'] != 'editconditions') print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editconditions&id='.$commande->id.'">'.img_edit($langs->trans('SetConditions'),1).'</a></td>'; + print '</tr></table>'; + print '</td><td colspan="2">'; + if ($_GET['action'] == 'editconditions') + { + $html->form_conditions_reglement($_SERVER['PHP_SELF'].'?id='.$commande->id, $commande->cond_reglement_id,'cond_reglement_id'); + } + else + { + $html->form_conditions_reglement($_SERVER['PHP_SELF'].'?id='.$commande->id, $commande->cond_reglement_id,'none'); + } + print "</td>"; + print '</tr>'; + + // Project + if ($conf->projet->enabled) + { + $langs->load('projects'); + print '<tr><td height="10">'; + print '<table class="nobordernopadding" width="100%"><tr><td>'; + print $langs->trans('Project'); + print '</td>'; + if ($_GET['action'] != 'classer') print '<td align="right"><a href="'.$_SERVER['PHP_SELF'].'?action=classer&id='.$commande->id.'">'.img_edit($langs->trans('SetProject')).'</a></td>'; + print '</tr></table>'; + print '</td><td colspan="2">'; + //print "$commande->id, $commande->socid, $commande->fk_project"; + if ($_GET['action'] == 'classer') + { + $html->form_project($_SERVER['PHP_SELF'].'?id='.$commande->id, $commande->socid, $commande->fk_project, 'projectid'); + } + else + { + $html->form_project($_SERVER['PHP_SELF'].'?id='.$commande->id, $commande->socid, $commande->fk_project, 'none'); + } + print '</td>'; + print '</tr>'; + } + + // Ligne de 3 colonnes + print '<tr><td>'.$langs->trans("AmountHT").'</td>'; + print '<td align="right"><b>'.price($commande->total_ht).'</b></td>'; + print '<td>'.$langs->trans("Currency".$conf->monnaie).'</td></tr>'; + + print '<tr><td>'.$langs->trans("AmountVAT").'</td><td align="right">'.price($commande->total_tva).'</td>'; + print '<td>'.$langs->trans("Currency".$conf->monnaie).'</td></tr>'; + + // Amount Local Taxes + if ($mysoc->pays_code=='ES') + { + if ($mysoc->localtax1_assuj=="1") //Localtax1 RE + { + print '<tr><td>'.$langs->transcountry("AmountLT1",$mysoc->pays_code).'</td>'; + print '<td align="right">'.price($commande->total_localtax1).'</td>'; + print '<td>'.$langs->trans("Currency".$conf->monnaie).'</td></tr>'; + } + if ($mysoc->localtax2_assuj=="1") //Localtax2 IRPF + { + print '<tr><td>'.$langs->transcountry("AmountLT2",$mysoc->pays_code).'</td>'; + print '<td align="right">'.price($commande->total_localtax2).'</td>'; + print '<td>'.$langs->trans("Currency".$conf->monnaie).'</td></tr>'; + } + } + print '<tr><td>'.$langs->trans("AmountTTC").'</td><td align="right">'.price($commande->total_ttc).'</td>'; + print '<td>'.$langs->trans("Currency".$conf->monnaie).'</td></tr>'; + + print "</table>"; + + if ($mesg) print $mesg; + else print '<br>'; + + /* + * Lines + */ + print '<table class="noborder" width="100%">'; + + $num = sizeof($commande->lines); + $i = 0; $total = 0; + + if ($num) + { + print '<tr class="liste_titre">'; + print '<td>'.$langs->trans('Label').'</td>'; + print '<td align="right" width="50">'.$langs->trans('VAT').'</td>'; + print '<td align="right" width="80">'.$langs->trans('PriceUHT').'</td>'; + print '<td align="right" width="50">'.$langs->trans('Qty').'</td>'; + print '<td align="right" width="50">'.$langs->trans('ReductionShort').'</td>'; + print '<td align="right" width="50">'.$langs->trans('TotalHTShort').'</td>'; + print '<td width="48" colspan="3"> </td>'; + print "</tr>\n"; + } + $var=true; + while ($i < $num) + { + $line = $commande->lines[$i]; + $var=!$var; + + // Show product and description + $type=$line->product_type?$line->product_type:$line->fk_product_type; + // Try to enhance type detection using date_start and date_end for free lines where type + // was not saved. + if (! empty($line->date_start)) $type=1; + if (! empty($line->date_end)) $type=1; + + // Ligne en mode visu + if ($_GET['action'] != 'editline' || $_GET['rowid'] != $line->id) + { + print '<tr '.$bc[$var].'>'; + + // Show product and description + print '<td>'; + if ($line->fk_product > 0) + { + print '<a name="'.$line->id.'"></a>'; // ancre pour retourner sur la ligne + + $product_static=new ProductFournisseur($db); + $product_static->fetch($line->fk_product); + $text=$product_static->getNomUrl(1,'supplier'); + $text.= ' - '.$product_static->libelle; + $description=($conf->global->PRODUIT_DESC_IN_FORM?'':dol_htmlentitiesbr($line->description)); + print $html->textwithtooltip($text,$description,3,'','',$i); + + // Show range + print_date_range($line->date_start,$line->date_end); + + // Add description in form + if ($conf->global->PRODUIT_DESC_IN_FORM) print ($line->description && $line->description!=$product_static->libelle)?'<br>'.dol_htmlentitiesbr($line->description):''; + } + + // Description - Editor wysiwyg + if (! $line->fk_product) + { + if ($type==1) $text = img_object($langs->trans('Service'),'service'); + else $text = img_object($langs->trans('Product'),'product'); + print $text.' '.nl2br($line->description); + + // Show range + print_date_range($line->date_start,$line->date_end); + } + + print '</td>'; + + print '<td align="right" nowrap="nowrap">'.vatrate($line->tva_tx).'%</td>'; + + print '<td align="right" nowrap="nowrap">'.price($line->subprice)."</td>\n"; + + print '<td align="right" nowrap="nowrap">'.$line->qty.'</td>'; + + if ($line->remise_percent > 0) + { + print '<td align="right" nowrap="nowrap">'.dol_print_reduction($line->remise_percent,$langs)."</td>\n"; + } + else + { + print '<td> </td>'; + } + + print '<td align="right" nowrap="nowrap">'.price($line->total_ht).'</td>'; + if ($commande->statut == 0 && $user->rights->fournisseur->commande->creer) + { + print '<td align="center"><a href="'.$_SERVER["PHP_SELF"].'?id='.$commande->id.'&action=editline&rowid='.$line->id.'#'.$line->id.'">'; + print img_edit(); + print '</a></td>'; + + $actiondelete='delete_product_line'; + print '<td align="center"><a href="'.$_SERVER["PHP_SELF"].'?id='.$commande->id.'&action='.$actiondelete.'&lineid='.$line->id.'">'; + print img_delete(); + print '</a></td>'; + } + else + { + print '<td> </td><td> </td>'; + } + print "</tr>"; + } + + // Ligne en mode update + if ($_GET["action"] == 'editline' && $user->rights->fournisseur->commande->creer && ($_GET["rowid"] == $line->id)) + { + print "\n"; + print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$commande->id.'&etat=1&ligne_id='.$line->id.'" method="post">'; + print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + print '<input type="hidden" name="action" value="updateligne">'; + print '<input type="hidden" name="id" value="'.$commande->id.'">'; + print '<input type="hidden" name="elrowid" value="'.$_GET['rowid'].'">'; + print '<tr '.$bc[$var].'>'; + print '<td>'; + print '<a name="'.$line->id.'"></a>'; // ancre pour retourner sur la ligne + if (($conf->product->enabled || $conf->service->enabled) && $line->fk_product > 0) + { + $product_static=new ProductFournisseur($db); + $product_static->fetch($line->fk_product); + $text=$product_static->getNomUrl(1,'supplier'); + $text.= ' - '.$product_static->libelle; + $description=($conf->global->PRODUIT_DESC_IN_FORM?'':dol_htmlentitiesbr($line->description)); + print $html->textwithtooltip($text,$description,3,'','',$i); + + // Show range + print_date_range($line->date_start,$line->date_end); + print '<br>'; + } + else + { + print $html->select_type_of_lines($line->product_type,'type',1); + if ($conf->product->enabled && $conf->service->enabled) print '<br>'; + } + + // Description - Editor wysiwyg + require_once(DOL_DOCUMENT_ROOT."/lib/doleditor.class.php"); + $nbrows=ROWS_2; + if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT; + $doleditor=new DolEditor('eldesc',$line->description,'',200,'dolibarr_details','',false,true,$conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS,$nbrows,70); + $doleditor->Create(); + + print '</td>'; + print '<td>'; + $html->select_tva('tva_tx',$line->tva_tx); + print '</td>'; + print '<td align="right"><input size="5" type="text" name="pu" value="'.price($line->subprice).'"></td>'; + print '<td align="right"><input size="2" type="text" name="qty" value="'.$line->qty.'"></td>'; + print '<td align="right" nowrap="nowrap"><input size="1" type="text" name="remise_percent" value="'.$line->remise_percent.'">%</td>'; + print '<td align="center" colspan="4"><input type="submit" class="button" name="save" value="'.$langs->trans("Save").'">'; + print '<br><input type="submit" class="button" name="cancel" value="'.$langs->trans('Cancel').'"></td>'; + print '</tr>' . "\n"; + print "</form>\n"; + } + $i++; + } + + /* + * Form to add new line + */ + if ($commande->statut == 0 && $user->rights->fournisseur->commande->creer && $_GET["action"] <> 'editline') + { + print '<tr class="liste_titre">'; + print '<td>'; + print '<a name="add"></a>'; // ancre + print $langs->trans('AddNewLine').' - '.$langs->trans("FreeZone").'</td>'; + print '<td align="right">'.$langs->trans('VAT').'</td>'; + print '<td align="right">'.$langs->trans('PriceUHT').'</td>'; + print '<td align="right">'.$langs->trans('Qty').'</td>'; + print '<td align="right">'.$langs->trans('ReductionShort').'</td>'; + print '<td colspan="4"> </td>'; + print '</tr>'; + + // Add free products/services form + print '<form action="'.$_SERVER["PHP_SELF"].'?id='.$commande->id.'#add" method="post">'; + print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + print '<input type="hidden" name="action" value="addline">'; + print '<input type="hidden" name="id" value="'.$commande->id.'">'; + + $var=true; + print '<tr '.$bc[$var].'>'; + print '<td>'; + + $forceall=1; + print $html->select_type_of_lines(isset($_POST["type"])?$_POST["type"]:-1,'type',1,0,$forceall); + if ($forceall || ($conf->product->enabled && $conf->service->enabled) + || (empty($conf->product->enabled) && empty($conf->service->enabled))) print '<br>'; + + // Editor wysiwyg + require_once(DOL_DOCUMENT_ROOT."/lib/doleditor.class.php"); + $nbrows=ROWS_2; + if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT; + $doleditor=new DolEditor('dp_desc',$_POST["dp_desc"],'',100,'dolibarr_details','',false,true,$conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS,$nbrows,70); + $doleditor->Create(); + + print '</td>'; + print '<td align="center">'; + //if($soc->tva_assuj == "0") + //print '<input type="hidden" name="tva_tx" value="0">0'; + //else + print $html->select_tva('tva_tx',($_POST["tva_tx"]?$_POST["tva_tx"]:$conf->defaulttx),$soc,$mysoc); + print '</td>'; + print '<td align="right"><input type="text" name="pu" size="5" value="'.$_POST["pu"].'"></td>'; + print '<td align="right"><input type="text" name="qty" value="'.($_POST["qty"]?$_POST["qty"]:'1').'" size="2"></td>'; + print '<td align="right" nowrap="nowrap"><input type="text" name="remise_percent" size="1" value="'.($_POST["remise_percent"]?$_POST["remise_percent"]:$soc->remise_client).'">%</td>'; + print '<td align="center" colspan="4"><input type="submit" class="button" value="'.$langs->trans('Add').'"></td>'; + print '</tr>'; + + print '</form>'; + + // Ajout de produits/services predefinis + if ($conf->product->enabled || $conf->service->enabled) + { + print '<tr class="liste_titre">'; + print '<td colspan="3">'; + print $langs->trans("AddNewLine").' - '; + if ($conf->service->enabled) + { + print $langs->trans('RecordedProductsAndServices'); + } + else + { + print $langs->trans('RecordedProducts'); + } + print '</td>'; + print '<td align="right">'.$langs->trans('Qty').'</td>'; + print '<td align="right">'.$langs->trans('ReductionShort').'</td>'; + print '<td colspan="4"> </td>'; + print '</tr>'; + + print '<form id="addpredefinedproduct" action="'.$_SERVER["PHP_SELF"].'?id='.$commande->id.'#add" method="post">'; + print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + print '<input type="hidden" name="action" value="addline">'; + print '<input type="hidden" name="id" value="'.$commande->id.'">'; + + $var=!$var; + print '<tr '.$bc[$var].'>'; + print '<td colspan="3">'; + $html->select_produits_fournisseurs($commande->fourn_id,'','idprodfournprice','',$filtre); + + if (! $conf->global->PRODUIT_USE_SEARCH_TO_SELECT) print '<br>'; + + // Editor wysiwyg + require_once(DOL_DOCUMENT_ROOT."/lib/doleditor.class.php"); + $nbrows=ROWS_2; + if (! empty($conf->global->MAIN_INPUT_DESC_HEIGHT)) $nbrows=$conf->global->MAIN_INPUT_DESC_HEIGHT; + $doleditor=new DolEditor('np_desc',$_POST["np_desc"],'',100,'dolibarr_details','',false,true,$conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS,$nbrows,70); + $doleditor->Create(); + + print '</td>'; + print '<td align="right"><input type="text" size="2" name="pqty" value="'.($_POST["pqty"]?$_POST["pqty"]:'1').'"></td>'; + print '<td align="right" nowrap="nowrap"><input type="text" size="1" name="p_remise_percent" value="'.($_POST["p_remise_percent"]?$_POST["p_remise_percent"]:$soc->remise_client).'">%</td>'; + print '<td align="center" colspan="4"><input type="submit" class="button" value="'.$langs->trans('Add').'"></td>'; + print '</tr>'; + + print '</form>'; + } + } + print '</table>'; + print '</div>'; + + + if ($_GET['action'] != 'presend') + { + + /** + * Boutons actions + */ + if ($user->societe_id == 0 && $_GET['action'] != 'editline' && $_GET['action'] != 'delete') + { + print '<div class="tabsAction">'; + + // Validate + if ($commande->statut == 0 && $num > 0) + { + if ($user->rights->fournisseur->commande->valider) + { + print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$commande->id.'&action=valid"'; + print '>'.$langs->trans('Validate').'</a>'; + } + } + + // Approve + if ($commande->statut == 1) + { + if ($user->rights->fournisseur->commande->approuver) + { + print '<a class="butAction" href="fiche.php?id='.$commande->id.'&action=approve">'.$langs->trans("ApproveOrder").'</a>'; + print '<a class="butAction" href="fiche.php?id='.$commande->id.'&action=refuse">'.$langs->trans("RefuseOrder").'</a>'; + } + else + { + print '<a class="butActionRefused" href="#">'.$langs->trans("ApproveOrder").'</a>'; + print '<a class="butActionRefused" href="#">'.$langs->trans("RefuseOrder").'</a>'; + } + } + + // Send + if (in_array($commande->statut,array(2,3,4,5))) + { + if ($user->rights->fournisseur->commande->commander) + { + $comref = dol_sanitizeFileName($commande->ref); + $file = $conf->fournisseur->commande->dir_output . '/'.$comref.'/'.$comref.'.pdf'; + if (file_exists($file)) + { + print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$commande->id.'&action=presend&mode=init">'.$langs->trans('SendByMail').'</a>'; + } + } + } + + // Reopen + if ($commande->statut == 5 || $commande->statut == 6 || $commande->statut == 7 || $commande->statut == 9) + { + if ($user->rights->fournisseur->commande->commander) + { + print '<a class="butAction" href="fiche.php?id='.$commande->id.'&action=reopen">'.$langs->trans("ReOpen").'</a>'; + } + } + + // Create bill + if ($conf->fournisseur->enabled && $commande->statut >= 2) // 2 means accepted + { + if ($user->rights->fournisseur->facture->creer) + { + print '<a class="butAction" href="'.DOL_URL_ROOT.'/fourn/facture/fiche.php?action=create&origin='.$commande->element.'&originid='.$commande->id.'&socid='.$commande->socid.'">'.$langs->trans("CreateBill").'</a>'; + } + + //if ($user->rights->fournisseur->commande->creer && $object->statut > 2) + //{ + // print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=classifybilled">'.$langs->trans("ClassifyBilled").'</a>'; + //} + } + + // Cancel + if ($commande->statut == 2) + { + if ($user->rights->fournisseur->commande->commander) + { + print '<a class="butActionDelete" href="fiche.php?id='.$commande->id.'&action=cancel">'.$langs->trans("CancelOrder").'</a>'; + } + } + + // Delete + if ($user->rights->fournisseur->commande->supprimer) + { + print '<a class="butActionDelete" href="fiche.php?id='.$commande->id.'&action=delete">'.$langs->trans("Delete").'</a>'; + } + + + print "</div>"; + } + + + print '<table width="100%"><tr><td width="50%" valign="top">'; + print '<a name="builddoc"></a>'; // ancre + + /* + * Documents generes + */ + $comfournref = dol_sanitizeFileName($commande->ref); + $file = $conf->fournisseur->dir_output . '/commande/' . $comfournref . '/' . $comfournref . '.pdf'; + $relativepath = $comfournref.'/'.$comfournref.'.pdf'; + $filedir = $conf->fournisseur->dir_output . '/commande/' . $comfournref; + $urlsource=$_SERVER["PHP_SELF"]."?id=".$commande->id; + $genallowed=$user->rights->fournisseur->commande->creer; + $delallowed=$user->rights->fournisseur->commande->supprimer; + + $somethingshown=$formfile->show_documents('commande_fournisseur',$comfournref,$filedir,$urlsource,$genallowed,$delallowed,$commande->modelpdf); + + $object=$commande; + + /* + * Linked object block + */ + $object->load_object_linked($object->id,$object->element); + + foreach($object->linked_object as $linked_object => $linked_objectid) + { + $tmpmodule=$linked_object; + if ($linked_object == 'invoice_supplier') $tmpmodule='fournisseur'; + if ($linked_object == 'order_supplier') $tmpmodule='fournisseur'; + if($conf->$tmpmodule->enabled && $linked_object != $object->element) + { + $somethingshown=$object->showLinkedObjectBlock($linked_object,$linked_objectid,$somethingshown); + } + } + + + print '</td><td valign="top" width="50%">'; + + if ( $user->rights->fournisseur->commande->commander && $commande->statut == 2) + { + /** + * Commander (action=commande) + */ + print '<br>'; + print '<form name="commande" action="fiche.php?id='.$commande->id.'&action=commande" method="post">'; + print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + print '<input type="hidden" name="action" value="commande">'; + print '<table class="border" width="100%">'; + print '<tr class="liste_titre"><td colspan="2">'.$langs->trans("ToOrder").'</td></tr>'; + print '<tr><td>'.$langs->trans("OrderDate").'</td><td>'; + $date_com = dol_mktime(0,0,0,$_POST["remonth"],$_POST["reday"],$_POST["reyear"]); + print $html->select_date($date_com,'','','','',"commande"); + print '</td></tr>'; + + print '<tr><td>'.$langs->trans("OrderMode").'</td><td>'; + $formorder->select_methodes_commande($_POST["methodecommande"],"methodecommande",1); + print '</td></tr>'; + + print '<tr><td>'.$langs->trans("Comment").'</td><td><input size="40" type="text" name="comment" value="'.$_POST["comment"].'"></td></tr>'; + print '<tr><td align="center" colspan="2"><input type="submit" class="button" value="'.$langs->trans("ToOrder").'"></td></tr>'; + print '</table>'; + print '</form>'; + } + + if ( $user->rights->fournisseur->commande->receptionner && ($commande->statut == 3 ||$commande->statut == 4 )) + { + /** + * Receptionner (action=livraison) + */ + print '<br>'; + print '<form action="fiche.php?id='.$commande->id.'" method="post">'; + print '<input type="hidden" name="token" value="'.$_SESSION['newtoken'].'">'; + print '<input type="hidden" name="action" value="livraison">'; + print '<table class="border" width="100%">'; + print '<tr class="liste_titre"><td colspan="2">'.$langs->trans("Receive").'</td></tr>'; + print '<tr><td>'.$langs->trans("DeliveryDate").'</td><td>'; + print $html->select_date('','','','','',"commande"); + print "</td></tr>\n"; + + print "<tr><td>".$langs->trans("Delivery")."</td><td>\n"; + $liv = array(); + $liv[''] = ' '; + $liv['tot'] = $langs->trans("TotalWoman"); + $liv['par'] = $langs->trans("PartialWoman"); + $liv['nev'] = $langs->trans("NeverReceived"); + $liv['can'] = $langs->trans("Canceled"); + + print $html->selectarray("type",$liv); + + print '</td></tr>'; + print '<tr><td>'.$langs->trans("Comment").'</td><td><input size="40" type="text" name="comment"></td></tr>'; + print '<tr><td align="center" colspan="2"><input type="submit" class="button" value="'.$langs->trans("Receive").'"></td></tr>'; + print "</table>\n"; + print "</form>\n"; + } + + // List of actions on element + /* Hidden because" available into "Log" tab + print '<br>'; + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'); + $formactions=new FormActions($db); + $somethingshown=$formactions->showactions($commande,'order_supplier',$socid); + */ + + print '</td></tr></table>'; + } + + + + /* + * Action presend + * + */ + if ($_GET['action'] == 'presend') + { + $ref = dol_sanitizeFileName($commande->ref); + $file = $conf->fournisseur->commande->dir_output . '/' . $ref . '/' . $ref . '.pdf'; + + print '<br>'; + print_titre($langs->trans('SendOrderByMail')); + + // Cree l'objet formulaire mail + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'); + $formmail = new FormMail($db); + $formmail->fromtype = 'user'; + $formmail->fromid = $user->id; + $formmail->fromname = $user->getFullName($langs); + $formmail->frommail = $user->email; + $formmail->withfrom=1; + $formmail->withto=empty($_POST["sendto"])?1:$_POST["sendto"]; + $formmail->withtosocid=$soc->id; + $formmail->withtocc=1; + $formmail->withtoccsocid=0; + $formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC; + $formmail->withtocccsocid=0; + $formmail->withtopic=$langs->trans('SendOrderRef','__ORDERREF__'); + $formmail->withfile=2; + $formmail->withbody=1; + $formmail->withdeliveryreceipt=1; + $formmail->withcancel=1; + // Tableau des substitutions + $formmail->substit['__ORDERREF__']=$commande->ref; + // Tableau des parametres complementaires + $formmail->param['action']='send'; + $formmail->param['models']='order_supplier_send'; + $formmail->param['orderid']=$commande->id; + $formmail->param['returnurl']=$_SERVER["PHP_SELF"].'?id='.$commande->id; + + // Init list of files + if (! empty($_REQUEST["mode"]) && $_REQUEST["mode"]=='init') + { + $formmail->clear_attached_files(); + $formmail->add_attached_files($file,dol_sanitizeFilename($ref.'.pdf'),'application/pdf'); + } + + // Show form + $formmail->show_form(); + + print '<br>'; + } + + print '</td></tr></table>'; + + } + else + { + // Commande non trouvee + dol_print_error($db); + } +} + +$db->close(); + +llxFooter('$Date$ - $Revision$'); +?> +<?php +/* Copyright (C) 2004-2006 Rodolphe Quiedeville <rodolphe@quiedeville.org> + * Copyright (C) 2004-2010 Laurent Destailleur <eldy@users.sourceforge.net> + * Copyright (C) 2005 Eric Seigne <eric.seigne@ryxeo.com> + * Copyright (C) 2005-2010 Regis Houssin <regis@dolibarr.fr> + * Copyright (C) 2010 Juanjo Menent <jmenent@2byte.es> + * Copyright (C) 2011 Philippe Grand <philippe.grand@atoo-net.com> + * + * 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. + */ + +/** + * \file htdocs/fourn/commande/fiche.php + * \ingroup supplier, order + * \brief Card supplier order + * \version $Id$ + */ + +require("../../main.inc.php"); +require_once(DOL_DOCUMENT_ROOT."/core/class/html.formfile.class.php"); +require_once(DOL_DOCUMENT_ROOT."/core/class/html.formorder.class.php"); +require_once(DOL_DOCUMENT_ROOT.'/includes/modules/supplier_order/modules_commandefournisseur.php'); +require_once DOL_DOCUMENT_ROOT."/fourn/class/fournisseur.commande.class.php"; +require_once DOL_DOCUMENT_ROOT."/fourn/class/fournisseur.product.class.php"; +require_once DOL_DOCUMENT_ROOT."/product/class/product.class.php"; +require_once DOL_DOCUMENT_ROOT."/lib/fourn.lib.php"; +require_once(DOL_DOCUMENT_ROOT."/lib/functions2.lib.php"); +if ($conf->projet->enabled) require_once(DOL_DOCUMENT_ROOT.'/projet/class/project.class.php'); + +$langs->load('orders'); +$langs->load('sendings'); +$langs->load('companies'); +$langs->load('bills'); +$langs->load('propal'); +$langs->load('deliveries'); +$langs->load('products'); +$langs->load('stocks'); + +$comclientid = GETPOST("comid"); +$socid = GETPOST("socid"); +$action = GETPOST('action'); + + +// Security check +$id = GETPOST("id"); +if ($user->societe_id) $socid=$user->societe_id; +$result = restrictedArea($user, 'commande_fournisseur', $id,''); + +// Recuperation de l'id de projet +$projectid = 0; +if ($_GET["projectid"]) $projectid = $_GET["projectid"]; + +$mesg=''; + + +/* + * Actions + */ + + // conditions de reglement +if ($action == 'setconditions' && $user->rights->fournisseur->commande->creer) +{ + $commande = new CommandeFournisseur($db); + $commande->fetch($id); + $result=$commande->cond_reglement($_POST['cond_reglement_id']); +} + // Set project if ($action == 'classin') { @@ -940,6 +2506,27 @@ if ($id > 0 || ! empty($ref)) print '<td colspan="2">'.$author->getNomUrl(1).'</td>'; print '</tr>'; + // Conditions de reglement par defaut + $langs->load('bills'); + $html = new Form($db); + print '<tr><td nowrap>'; + print '<table width="100%" class="nobordernopadding"><tr><td nowrap>'; + print $langs->trans('PaymentConditions'); + print '<td>'; + if ($_GET['action'] != 'editconditions') print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=editconditions&id='.$commande->id.'">'.img_edit($langs->trans('SetConditions'),1).'</a></td>'; + print '</tr></table>'; + print '</td><td colspan="2">'; + if ($_GET['action'] == 'editconditions') + { + $html->form_conditions_reglement($_SERVER['PHP_SELF'].'?id='.$commande->id, $commande->cond_reglement_id,'cond_reglement_id'); + } + else + { + $html->form_conditions_reglement($_SERVER['PHP_SELF'].'?id='.$commande->id, $commande->cond_reglement_id,'none'); + } + print "</td>"; + print '</tr>'; + // Project if ($conf->projet->enabled) { diff --git a/htdocs/install/mysql/migration/3.0.0-3.1.0.sql b/htdocs/install/mysql/migration/3.0.0-3.1.0.sql index ac5adaf40a5a6ceda4c6985bb45d0f3eb3431adb..33725d3b0e24e0e43a3f5c65c37f3778b993e72d 100755 --- a/htdocs/install/mysql/migration/3.0.0-3.1.0.sql +++ b/htdocs/install/mysql/migration/3.0.0-3.1.0.sql @@ -16,6 +16,7 @@ ALTER TABLE llx_adherent MODIFY login varchar(50); ALTER TABLE llx_c_actioncomm ADD COLUMN position integer NOT NULL DEFAULT 0; ALTER TABLE llx_propal ADD COLUMN fk_demand_reason integer NULL DEFAULT 0; +ALTER TABLE llx_commande_fournisseur ADD COLUMN fk_cond_reglement integer NULL DEFAULT 0; ALTER TABLE llx_commande_fournisseur MODIFY model_pdf varchar(255); ALTER TABLE llx_commande MODIFY model_pdf varchar(255);