diff --git a/htdocs/contrat/contrat.class.php b/htdocs/contrat/contrat.class.php index 44e93427964..3549d127e9a 100644 --- a/htdocs/contrat/contrat.class.php +++ b/htdocs/contrat/contrat.class.php @@ -85,10 +85,10 @@ class Contrat $date_end = mktime(date("H",$date_start), date("i",$date_start), 0, $month, $day, $year); } - $sql = "UPDATE ".MAIN_DB_PREFIX."contrat SET enservice = 1"; + $sql = "UPDATE ".MAIN_DB_PREFIX."contrat SET statut = 1"; $sql .= " , mise_en_service = ".$this->db->idate($date_start).", fk_user_mise_en_service = ".$user->id; $sql .= " , fin_validite = ". $this->db->idate($date_end); - $sql .= " WHERE rowid = ".$this->id . " AND enservice = 0"; + $sql .= " WHERE rowid = ".$this->id . " AND statut = 0"; $result = $this->db->query($sql) ; if (!$result) @@ -96,6 +96,35 @@ class Contrat dolibarr_print_error($this->db); } } + + /* + * + * + * + */ + function active_line($user, $line_id, $date) + { + // statut actif : 4 + + $sql = "UPDATE ".MAIN_DB_PREFIX."contratdet SET statut = 4"; + $sql .= " , date_ouverture = '".$this->db->idate($date)."', fk_user_ouverture = ".$user->id; + $sql .= " WHERE rowid = ".$line_id . " AND (statut = 0 OR statut = 3) "; + + $result = $this->db->query($sql) ; + + if ($result) + { + return 0; + } + else + { + + print $sql; + return -1; + } + } + + /* * \brief Cloture un contrat @@ -104,9 +133,9 @@ class Contrat */ function cloture($user) { - $sql = "UPDATE ".MAIN_DB_PREFIX."contrat SET enservice = 2"; + $sql = "UPDATE ".MAIN_DB_PREFIX."contrat SET statut = 2"; $sql .= " , date_cloture = now(), fk_user_cloture = ".$user->id; - $sql .= " WHERE rowid = ".$this->id . " AND enservice = 1"; + $sql .= " WHERE rowid = ".$this->id . " AND statut = 1"; $result = $this->db->query($sql) ; } @@ -118,9 +147,9 @@ class Contrat */ function annule($user) { - $sql = "UPDATE ".MAIN_DB_PREFIX."contrat SET enservice = 0"; + $sql = "UPDATE ".MAIN_DB_PREFIX."contrat SET statut = 0"; $sql .= " , date_cloture = now(), fk_user_cloture = ".$user->id; - $sql .= " WHERE rowid = ".$this->id . " AND enservice = 1"; + $sql .= " WHERE rowid = ".$this->id . " AND statut = 1"; $result = $this->db->query($sql) ; } @@ -131,10 +160,10 @@ class Contrat */ function fetch ($id) { - $sql = "SELECT rowid, enservice, fk_soc, fk_product, ".$this->db->pdate("mise_en_service")." as datemise"; - $sql .= ", fk_user_mise_en_service, ".$this->db->pdate("date_cloture")." as datecloture"; - $sql .= ", ".$this->db->pdate("fin_validite")." as datefin"; - $sql .= ", fk_user_cloture, fk_facture, fk_facturedet"; + $sql = "SELECT rowid, statut, fk_soc, ".$this->db->pdate("mise_en_service")." as datemise"; + $sql .= ", fk_user_mise_en_service, ".$this->db->pdate("date_contrat")." as datecontrat"; + $sql .= " , fk_user_author"; + $sql .= ", fk_commercial_signature, fk_commercial_suivi "; $sql .= " FROM ".MAIN_DB_PREFIX."contrat WHERE rowid = $id"; $result = $this->db->query($sql) ; @@ -144,18 +173,21 @@ class Contrat $result = $this->db->fetch_array(); $this->id = $result["rowid"]; - $this->enservice = $result["enservice"]; + $this->statut = $result["statut"]; $this->factureid = $result["fk_facture"]; $this->facturedetid = $result["fk_facturedet"]; $this->mise_en_service = $result["datemise"]; $this->date_fin_validite = $result["datefin"]; - $this->date_cloture = $result["datecloture"]; + $this->date_contrat = $result["datecontrat"]; + + $this->user_author_id = $result["fk_user_author"]; + + $this->commercial_signature_id = $result["fk_commercial_signature"]; + $this->commercial_suivi_id = $result["fk_commercial_suivi"]; $this->user_service->id = $result["fk_user_mise_en_service"]; $this->user_cloture->id = $result["fk_user_cloture"]; - $this->product->fetch($result["fk_product"]); - $this->societe->fetch($result["fk_soc"]); $this->db->free(); @@ -168,6 +200,33 @@ class Contrat return $result; } + /* + * + * + * + */ + function create($user) + { + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."contrat (datec,fk_soc, fk_user_author, fk_commercial_signature, fk_commercial_suivi, date_contrat)"; + $sql .= " VALUES (now(),".$this->soc_id.",".$user->id.",".$this->commercial_id.",".$this->commercial_id; + $sql .= ",".$this->db->idate($this->date_contrat) .")"; + if ($this->db->query($sql)) + { + $this->id = $this->db->last_insert_id(); + $result = 0 ; + } + else + { + $result = 1; + dolibarr_syslog("Contrat::create_from_facture - 10"); + dolibarr_print_error($this->db,"Contrat::create_from_facture - 10"); + } + + return $result; + } + + /* * \brief Crée autant de contrats que de lignes de facture, pour une facture donnée * @@ -220,6 +279,88 @@ class Contrat return $result; } + /** + * Ajoute une ligne de commande + * + */ + function addline($desc, $pu, $qty, $txtva, $fk_product=0, $remise_percent=0) + { + $qty = ereg_replace(",",".",$qty); + $pu = ereg_replace(",",".",$pu); + + if (strlen(trim($desc))) + { + if (strlen(trim($qty))==0) + { + $qty=1; + } + + if ($fk_product > 0) + { + $prod = new Product($this->db, $fk_product); + if ($prod->fetch($fk_product) > 0) + { + $label = $prod->libelle; + $pu = $prod->price; + $txtva = $prod->tva_tx; + } + } + + + $remise = 0; + $price = round(ereg_replace(",",".",$pu), 2); + $subprice = $price; + if (trim(strlen($remise_percent)) > 0) + { + $remise = round(($pu * $remise_percent / 100), 2); + $price = $pu - $remise; + } + + /* + * Insertion dans la base + */ + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."contratdet "; + $sql .= "(fk_contrat,label,description,fk_product, price_ht,qty,tva_tx, remise_percent, subprice, remise)"; + $sql .= " VALUES ($this->id, '" . addslashes($label) . "','" . addslashes($desc) . "',$fk_product,".ereg_replace(",",".",$price).", '$qty', $txtva, $remise_percent,'".ereg_replace(",",".",$subprice)."','".ereg_replace(",",".", $remise)."') ;"; + + /* + * Retour + */ + + if ( $this->db->query( $sql) ) + { + //$this->update_price(); + return 0; + } + else + { + dolibarr_print_error($this->db); + return -1; + } + } + } + + /** + * Supprime une ligne du contrat + * + */ + function delete_line($idligne) + { + + $sql = "DELETE FROM ".MAIN_DB_PREFIX."contratdet WHERE rowid =".$idligne; + + if ($this->db->query($sql) ) + { + //$this->update_price(); + + return 0; + } + else + { + return 1; + } + } /** * \brief Retourne le libellé du statut du contrat diff --git a/htdocs/contrat/fiche.php b/htdocs/contrat/fiche.php index 25f316f86ea..ea8f887cb66 100644 --- a/htdocs/contrat/fiche.php +++ b/htdocs/contrat/fiche.php @@ -20,274 +20,716 @@ * $Source$ * */ - -/*! - \file htdocs/contrat/fiche.php - \ingroup contrat - \brief Fiche d'un contrat + +/*! \file htdocs/commande/fiche.php + \ingroup commande + \brief Fiche commande \version $Revision$ */ require("./pre.inc.php"); -require("./contrat.class.php"); -require("../facture.class.php"); -$langs->load("products"); -$langs->load("companies"); -$langs->load("bills"); $langs->load("contracts"); +$langs->load("orders"); +$langs->load("companies"); -llxHeader(); +$user->getrights('contrat'); -$id = $_GET["id"]; -$mesg = ''; +if (!$user->rights->contrat->lire) + accessforbidden(); + +require("../project.class.php"); +require("../propal.class.php"); +require_once (DOL_DOCUMENT_ROOT."/contrat/contrat.class.php"); /* * Sécurité accés client */ -if ($user->societe_id > 0) +if ($user->societe_id > 0) { - $action = ''; - $id = $user->societe_id; + $action = ''; + $socidp = $user->societe_id; +} +/* + * + */ +if ($_POST["action"] == 'add') +{ + $datecontrat = mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); + + $contrat = new Contrat($db); + + $contrat->soc_id = $_POST["soc_id"]; + $contrat->date_contrat = $datecontrat; + $contrat->commercial_id = $_POST["commercial"]; + $contrat->note = $_POST["note"]; + $contrat->projetid = $_POST["projetid"]; + $contrat->remise_percent = $_POST["remise_percent"]; + + /* + $contrat->add_product($_POST["idprod1"],$_POST["qty1"],$_POST["remise_percent1"]); + $contrat->add_product($_POST["idprod2"],$_POST["qty2"],$_POST["remise_percent2"]); + $contrat->add_product($_POST["idprod3"],$_POST["qty3"],$_POST["remise_percent3"]); + $contrat->add_product($_POST["idprod4"],$_POST["qty4"],$_POST["remise_percent4"]); + */ + $result = $contrat->create($user); + if ($result == 0) + { + Header("Location: fiche.php?id=".$contrat->id); + } + + $_GET["id"] = $contrat->id; + + $action = ''; +} +/* + * + */ +if ($_POST["action"] == 'classin') +{ + $commande = new Commande($db); + $commande->fetch($_GET["id"]); + $commande->classin($_POST["projetid"]); } +/* + * + */ -if ($_POST["action"] == 'miseenservice') +if ($_POST["action"] == 'addligne' && $user->rights->contrat->creer) { - $contrat = new Contrat($db); - $contrat->id = $id; - $contrat->fetch($id); - $contrat->mise_en_service($user, - mktime($_POST["date_starthour"], - $_POST["date_startmin"], - 0, - $_POST["date_startmonth"], - $_POST["date_startday"], - $_POST["date_startyear"]), - 0, - mktime($_POST["date_endhour"], - $_POST["date_endmin"], - 0, - $_POST["date_endmonth"], - $_POST["date_endday"], - $_POST["date_endyear"]) - ); + $result = 0; + $contrat = new Contrat($db); + $contrat->fetch($_GET["id"]); + + if ($_POST["p_idprod"] > 0) + { + $result = $contrat->addline($_POST["desc"], + $_POST["pu"], + $_POST["pqty"], + $_POST["tva_tx"], + $_POST["p_idprod"], + $_POST["premise"]); + } + + if ($result == 0) + { + Header("Location: fiche.php?id=".$contrat->id); + } } -if ($_GET["action"] == 'cloture') +if ($_POST["action"] == 'updateligne' && $user->rights->contrat->creer) { - $contrat = new Contrat($db); - $contrat->id = $id; - $contrat->cloture($user); + $contrat = new Contrat($db,"",$_GET["id"]); + if ($contrat->fetch($_GET["id"]) ) + { + $result = $contrat->update_line($_POST["elrowid"], + $_POST["eldesc"], + $_POST["elprice"], + $_POST["elqty"], + $_POST["elremise_percent"]); + } + else + { + print "Erreur"; + } } -if ($_GET["action"] == 'annule') +if ($_GET["action"] == 'deleteline' && $user->rights->contrat->creer) { - $contrat = new Contrat($db); - $contrat->id = $id; - $contrat->annule($user); + $contrat = new Contrat($db); + $contrat->fetch($_GET["id"]); + $result = $contrat->delete_line($_GET["lineid"]); + + if ($result == 0) + { + Header("Location: fiche.php?id=".$contrat->id); + } } +if ($_POST["action"] == 'confirm_valid' && $_POST["confirm"] == yes && $user->rights->contrat->valider) +{ + $contrat = new Contrat($db); + $contrat->fetch($_GET["id"]); + $soc = new Societe($db); + $soc->fetch($contrat->soc_id); + $result = $contrat->valid($user); +} + +if ($_POST["action"] == 'confirm_cancel' && $_POST["confirm"] == yes && $user->rights->contrat->valider) +{ + $contrat = new Contrat($db); + $contrat->fetch($_GET["id"]); + $result = $contrat->cancel($user); +} + +if ($_POST["action"] == 'confirm_delete' && $_POST["confirm"] == yes) +{ + if ($user->rights->commande->supprimer ) + { + $commande = new Commande($db); + $commande->id = $_GET["id"]; + $commande->delete(); + Header("Location: index.php"); + } +} + +/* + * + */ +if ($action == 'pdf') +{ + /* + * Generation de la commande + * définit dans /includes/modules/commande/modules_commande.php + */ + commande_pdf_create($db, $_GET["id"]); +} + +llxHeader('',$langs->trans("OrderCard"),"Commande"); + + $html = new Form($db); - -/* - * Fiche contract en mode visu/édition +/********************************************************************* * - */ -if ($id) + * Mode creation + * + * + * + ************************************************************************/ +if ($_GET["action"] == 'create') { - $contrat = new Contrat($db); - $result = $contrat->fetch($id); + dolibarr_fiche_head($head, $a, "Création d'un nouveau contrat"); - if ( $result ) + $new_contrat = new Contrat($db); + + $sql = "SELECT s.nom, s.prefix_comm, s.idp "; + $sql .= "FROM ".MAIN_DB_PREFIX."societe as s "; + $sql .= "WHERE s.idp = ".$_GET["socid"]; + + + if ( $db->query($sql) ) { - $date_start=''; - $date_end=''; + $num = $db->num_rows(); + if ($num) + { + $obj = $db->fetch_object(); - print $mesg; + $soc = new Societe($db); + $soc->fetch($obj->idp); + + print '
'; + print ''; + print '' ."\n"; + print ''; - /* - * Affichage onglets - */ - $h = 0; + print ''; + + print ''; - $hselected=$h; - $head[$h][0] = DOL_URL_ROOT.'/contrat/fiche.php?id='.$id; - $head[$h][1] = $langs->trans("CardContract").' : '.$contrat->id; - $h++; + print ''; + + print ""; - print '
'.$langs->trans("Customer").' :'.$obj->nom.'
'.$langs->trans("Commercial").''; + print '
Date :"; + + print_date_select(time()); + print "
'; - print ""; - print ''; - print ''; - if ($contrat->factureid) - { - print ''; + print ""; - $facture=new Facture($db); - $facture->fetch($contrat->factureid); - print ''; - print ''; - } - else - { - print ''; - } + /* + * + * + * Liste des elements + * + * + print ''; + print '\n"; + $sql = "SELECT p.rowid,p.label,p.ref,p.price FROM ".MAIN_DB_PREFIX."product as p "; + $sql .= " WHERE envente = 1"; + $sql .= " ORDER BY p.nbvente DESC LIMIT 20"; + if ( $db->query($sql) ) + { + $opt = ""; + if ($result) + { + $num = $db->num_rows(); $i = 0; + while ($i < $num) + { + $objp = $db->fetch_object(); + $opt .= "\n"; + $i++; + } + } + $db->free(); + } + else + { + print $db->error(); + } + + print '
'.$langs->trans("Service").''.($contrat->product->ref).' - '.($contrat->product->label_url).'
'.$langs->trans("Company").''.$contrat->societe->nom_url.'
Projet :"; + $proj = new Project($db); + $html->select_array("projetid",$proj->liste_array($soc->id),0,1); + print "
'.$langs->trans("Bill").''.$facture->ref.''.$langs->trans("BillStatus").''.$facture->get_libStatut().'
'.$langs->trans("Company").''.$contrat->societe->nom_url.'
'.$langs->trans("Services").'/'.$langs->trans("Products").'
'; - // Affiche statut contrat - $now=mktime(); - if ($contrat->enservice == 1) - { - if (! $contrat->date_fin_validite || $contrat->date_fin_validite >= $now) { - $class = 'normal'; - $statut=$langs->trans("ContractStatusRunning"); - } - else { - $class = 'error'; - $statut= $langs->trans("ContractStatusRunning").', '.img_warning().' '.$langs->trans("ContractStatusExpired"); - } - } - elseif($contrat->enservice == 2) - { - $class = 'normal'; - $statut= $langs->trans("ContractStatusClosed"); - } - else - { - $class = 'warning'; - $statut= ''.$langs->trans("ContractNotRunning").''; - } - print "
".$langs->trans("ContractStatus")."$statut
'; + print ''; + for ($i = 1 ; $i < 5 ; $i++) + { + print ''; + print ''; + print ''; + } + + print '
20 Produits les plus vendusQuan.Remise
%
'; + print ''; + */ + print 'Commentaires'; + print ''; - if ($_GET["request"] == 'miseenservice') - { - // Si contrat lié à une ligne de facture, on recherche date debut et fin de la ligne - if ($contrat->facturedetid) { - $facturedet = new FactureLigne($db); - $facturedet->fetch($contrat->facturedetid); - $date_start=$facturedet->date_start; - $date_end=$facturedet->date_end; - } + /* + * + */ + print ''; + print "
\n"; + print "\n"; - // Si date_start et date_end ne sont pas connues de la ligne de facture, on les - // definit à une valeur par défaut en fonction de la durée définie pour le service. - if (! $date_start) { $date_start=mktime(); } - if (! $date_end) { - if ($contrat->product->duration) - { - // Si duree du service connue - $duree_value = substr($contrat->product->duration,0,strlen($contrat->product->duration)-1); - $duree_unit = substr($contrat->product->duration,-1); + if ($propalid) + { + /* + * Produits + */ + print_titre("Produits"); + + print ''; + print ''; + print ''; + + $sql = "SELECT pt.rowid, p.label as product, p.ref, pt.price, pt.qty, p.rowid as prodid, pt.remise_percent"; + $sql .= " FROM ".MAIN_DB_PREFIX."propaldet as pt, ".MAIN_DB_PREFIX."product as p WHERE pt.fk_product = p.rowid AND pt.fk_propal = $propalid"; + $sql .= " ORDER BY pt.rowid ASC"; + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows(); + $i = 0; + $var=True; + while ($i < $num) + { + $objp = $db->fetch_object(); + $var=!$var; + print "\n"; + print ''; + print ""; + print ''; + print "\n"; + $i++; + } + } + $sql = "SELECT pt.rowid, pt.description as product, pt.price, pt.qty, pt.remise_percent"; + $sql .= " FROM ".MAIN_DB_PREFIX."propaldet as pt WHERE pt.fk_propal = $propalid AND pt.fk_product = 0"; + $sql .= " ORDER BY pt.rowid ASC"; + if ($db->query($sql)) + { + $num = $db->num_rows(); + $i = 0; + while ($i < $num) + { + $objp = $db->fetch_object(); + $var=!$var; + print "\n"; + print ''; + print ''; + print ''; + print "\n"; + $i++; + } + } + else + { + print $sql; + } - $month = date("m",$date_start); - $day = date("d",$date_start); - $year = date("Y",$date_start); - - switch($duree_unit) - { - case "d": - $day = $day + $duree_value; - break; - case "w": - $day = $day + ($duree_value * 7); - break; - case "m": - $month = $month + $duree_value; - break; - case "y": - $year = $year + $duree_value; - break; - } - $date_end = mktime(date("H",$date_start), date("i",$date_start), 0, $month, $day, $year); - } - } - - - print ''; - print ''; - - print ''; - - // Date de début de mise en service - print ''; - - // Date de fin prévue de mise en service - print ''; - - print ''; - print ''; - } - - if ($contrat->enservice > 0) - { - print ""; - $contrat->user_service->fetch(); - print ''; - - print ''; - $contrat->user_cloture->fetch(); - print ''; - } - - - print "
'.$langs->trans("Ref").'Produit'.$langs->trans("Price").'RemiseQté.
[$objp->ref]'.$objp->product.'".price($objp->price)."'.$objp->remise_percent.' %".$objp->qty."
 '.$objp->product.''.price($objp->price).''.$objp->remise_percent.' %".$objp->qty."
Durée standard pour ce service'; - print $contrat->product->duration; - print ''; - print '
Date de mise en service'; - print $html->select_date($date_start,'date_start',1,1); - print " "; - print '
Date de fin prévue'; - print $html->select_date($date_end,'date_end',1,1); - print " "; - print '
'; - print ''; - print '
Mis en service".dolibarr_print_date($contrat->mise_en_service,"%d %B %Y à %H:%M"); - print "'.$langs->trans("By").''.$contrat->user_service->fullname.'
Fin de validité'.dolibarr_print_date($contrat->date_fin_validite,"%d %B %Y à %H:%M"); - } - - if ($contrat->enservice == 2) - { - print '
'.$langs->trans("Closed").''.dolibarr_print_date($contrat->date_cloture,"%d %B %Y à %H:%M").''.$langs->trans("By").''.$contrat->user_cloture->fullname.'
"; - print '
'; - print ''; + print ''; + } + } + } + else + { + print $db->error() . "
$sql";; } +} +else +/* *************************************************************************** */ +/* */ +/* Mode vue et edition */ +/* */ +/* *************************************************************************** */ +{ + $id = $_GET["id"]; + if ($id > 0) + { + $contrat = New Contrat($db); + if ( $contrat->fetch($id) > 0) + { + $author = new User($db); + $author->id = $contrat->user_author_id; + $author->fetch(); + + $commercial_signature = new User($db); + $commercial_signature->id = $contrat->commercial_signature_id; + $commercial_signature->fetch(); + + $commercial_suivi = new User($db); + $commercial_suivi->id = $contrat->commercial_suivi_id; + $commercial_suivi->fetch(); + + $h = 0; + $head[$h][0] = DOL_URL_ROOT.'/contrat/fiche.php?id='.$contrat->id; + $head[$h][1] = $langs->trans("Contract"); + $hselected = $h; + $h++; + + + + dolibarr_fiche_head($head, $hselected, $contrat->societe->nom); + + /* + * Confirmation de la suppression de la contrat + * + */ + if ($_GET["action"] == 'delete') + { + $html->form_confirm("fiche.php?id=$id","Supprimer la contrat","Etes-vous sûr de vouloir supprimer cette contrat ?","confirm_delete"); + } + + /* + * Confirmation de la validation + * + */ + if ($_GET["action"] == 'valid') + { + //$numfa = contrat_get_num($soc); + $html->form_confirm("fiche.php?id=$id","Valider la contrat","Etes-vous sûr de vouloir valider cette contrat ?","confirm_valid"); + } + /* + * Confirmation de l'annulation + * + */ + if ($_GET["action"] == 'annuler') + { + $html->form_confirm("fiche.php?id=$id",$langs->trans("Cancel"),"Etes-vous sûr de vouloir annuler cette contrat ?","confirm_cancel"); + } + + /* + * Contrat + */ + if ($contrat->brouillon == 1 && $user->rights->contrat->creer) + { + print '
'; + print ''; + } + + print ''; + print ""; + print ''; + + print '"; + + print ''; + print "\n"; + + print '"; + + print ''; + print ''; + print "
".$langs->trans("Customer")."'; + print ''.$contrat->societe->nom.''; + print $contrat->statuts[$contrat->statut]; + print "
'.$langs->trans("Date").'".strftime("%A %d %B %Y",$contrat->date_contrat)."Projet'; + if ($contrat->projet_id > 0) + { + $projet = New Project($db); + $projet->fetch($contrat->projet_id); + print ''.$projet->title.''; + } + else + { + print 'Classer le contrat'; + } + print " 
'.$langs->trans("Commercial suivi").''.$commercial_suivi->fullname.''.$langs->trans("Commercial signature").''.$commercial_signature->fullname.'
"; + + if ($contrat->brouillon == 1 && $user->rights->contrat->creer) + { + print '
'; + } + + /* + * Lignes de contrats + * + */ + echo '
'; + + $sql = "SELECT l.statut, l.label, l.fk_product, l.description, l.price_ht, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice"; + $sql .= " FROM ".MAIN_DB_PREFIX."contratdet as l"; + $sql .= " WHERE l.fk_contrat = ".$id; + $sql .= " ORDER BY l.rowid"; + + $result = $db->query($sql); + + if ($result) + { + $num = $db->num_rows(); + $i = 0; $total = 0; + + if ($num) + { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + } + $var=True; + while ($i < $num) + { + $objp = $db->fetch_object(); + print "\n"; + if ($objp->fk_product > 0) + { + print ''; + } + else + { + print "\n"; + } + print ''; + print ''; + if ($objp->remise_percent > 0) + { + print '\n"; + } + else + { + print ''; + } + print '\n"; + if ($contrat->statut == 0 && $user->rights->contrat->creer) + { + print ''; + print ''; + } + else + { + print ''; + } + print "\n"; + + if ($_GET["action"] == 'editline' && $_GET["rowid"] == $objp->rowid) + { + print ""; + print ''; + print ''; + print ""; + print ''; + print ''; + print ''; + print ''; + print ''; + print '' . "\n"; + print "\n"; + } + $i++; + $var=!$var; + } + $db->free(); + } + else + { + print $db->error(); + } + + /* + * Ajouter une ligne produit/service + * + */ + if ($user->rights->contrat->creer) + { + $sql = "SELECT p.rowid,p.label,p.ref,p.price FROM ".MAIN_DB_PREFIX."product as p "; + $sql .= " WHERE p.envente = 1"; + $sql .= " ORDER BY p.nbvente DESC LIMIT 20"; + + if ( $db->query($sql) ) + { + $opt = ""; + + $num = $db->num_rows(); + $i = 0; + while ($i < $num) + { + $objp = $db->fetch_object(); + $opt .= "\n"; + $i++; + } + + $db->free(); + } + else + { + print $db->error(); + } + + print ''; + print ''; + + print ""; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''."\n"; + + + /* + print "".''; + print ''; + print ''; + print ''; + print ''; + + print ''; + */ + + $var=!$var; + print ""; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + print "".''; + + print ""; + } + print "
'.$langs->trans("Description").'TvaQuantitéRemiseP.U.  
'; + print '';; + print 'statut '; + print ''.stripslashes(nl2br($objp->label)).''; + + if ($objp->description) + { + + print '
'.stripslashes(nl2br($objp->description)); + } + + print '
".stripslashes(nl2br($objp->description))."'.$objp->tva_tx.' %'.$objp->qty.''.$objp->remise_percent." % '.price($objp->subprice)."'; + print img_edit(); + print ''; + print img_delete(); + print '  
 %
'.$langs->trans("Description").'TvaQuantitéRemiseP.U.  
'; + print $html->select_tva("tva_tx"); + print ' %
% 

"; + /* + * Fin Ajout ligne + * + */ + + print ''; + + if ($user->societe_id == 0 && $contrat->statut < 3) + { + print '
'; + + if ($contrat->statut == 0 && $user->rights->contrat->supprimer) + { + print 'Supprimer'; + } + + if ($contrat->statut > 0 && $contrat->statut < 3 && $user->rights->expedition->creer) + { + print 'Expédier'; + } + + + if ($contrat->statut == 0) + { + if ($user->rights->contrat->valider) + { + print 'Valider'; + } + } + + if ($contrat->statut == 1) + { + $nb_expedition = $contrat->nb_expedition(); + if ($user->rights->contrat->valider && $nb_expedition == 0) + { + print 'Annuler la contrat'; + } + } + + print "
"; + } + print "

\n"; + + + /* + * + * + */ + if ($_GET["action"] == 'classer') + { + print '

'; + print ''; + print ''; + print '"; + print '
Projet'; + + $proj = new Project($db); + $html->select_array("projetid",$proj->liste_array($contrat->soc_id)); + + print "
'; + } + /* + * + * + */ + } + else + { + /* Contrat non trouvée */ + print "Contrat inexistante ou accés refusé"; + } + } } -else -{ - dolibarr_print_error(0,"Contract id not provided"); - return; -} - - -/* ************************************************************************** */ -/* */ -/* Barre d'action */ -/* */ -/* ************************************************************************** */ - - -print '
'; - -if (! $contrat->enservice) -{ - if ($request != 'miseenservice') { - print 'Mettre en service...'; - } else { - print 'Ne pas mettre en service'; - } -} -elseif ($contrat->enservice == 1) -{ - print 'Mettre hors service'; - print ''.$langs->trans("Close").''; -} -print '
'; $db->close(); diff --git a/htdocs/contrat/index.php b/htdocs/contrat/index.php index 3f0bc0499ca..a4d3731807b 100644 --- a/htdocs/contrat/index.php +++ b/htdocs/contrat/index.php @@ -53,103 +53,46 @@ if ($user->societe_id > 0) $socid = $user->societe_id; } - -if ($page == -1) { $page = 0 ; } - -$limit = $conf->liste_limit; -$offset = $limit * $page ; - -if ($sortfield == "") -{ - $sortfield="c.tms"; -} - -if ($sortorder == "") -{ - $sortorder="DESC"; -} +print_barre_liste("Contrats", $page, "index.php", "&sref=$sref&snom=$snom", $sortfield, $sortorder,'',$num); -$sql = "SELECT c.rowid as cid, c.enservice, ".$db->pdate("c.fin_validite")." as fin_validite, c.fin_validite-sysdate() as delairestant, p.label, p.rowid as pid, s.nom, s.idp as sidp"; -$sql .= " FROM ".MAIN_DB_PREFIX."contrat as c, ".MAIN_DB_PREFIX."societe as s, ".MAIN_DB_PREFIX."product as p"; -$sql .= " WHERE c.fk_soc = s.idp AND c.fk_product = p.rowid"; -if ($socid > 0) -{ - $sql .= " AND s.idp = $socid"; -} -$sql .= " ORDER BY $sortfield $sortorder, delairestant"; -$sql .= $db->plimit($limit + 1 ,$offset); +print ''; +print '
Légende
'; +print 'statut Statut initial
'; +print 'statut A commander
'; +print 'statut Commandé chez le fournisseur
'; +print 'statut Activé chez le fournisseur
'; +print 'statut Activé chez le client
'; + +print '
'; + +$sql = "SELECT cd.rowid as cid, cd.statut, cd.label, cd.fk_contrat "; +$sql .= " FROM ".MAIN_DB_PREFIX."contratdet as cd"; +$sql .= " WHERE cd.statut IN (0,3)"; +$sql .= " ORDER BY cd.tms DESC"; if ( $db->query($sql) ) { $num = $db->num_rows(); $i = 0; - - print_barre_liste("Liste des contrats", $page, "index.php", "&sref=$sref&snom=$snom", $sortfield, $sortorder,'',$num); - print ''; - print ''; - print_liste_field_titre($langs->trans("Ref"),"index.php", "c.rowid","","","",$sortfield); - print_liste_field_titre($langs->trans("Label"),"index.php", "p.label","","","",$sortfield); - print_liste_field_titre($langs->trans("Company"),"index.php", "s.nom","","","",$sortfield); - print_liste_field_titre($langs->trans("Status"),"index.php", "c.enservice","","",'align="center"',$sortfield); - print_liste_field_titre("Date Fin","index.php", "c.fin_validite","","",'align="center"',$sortfield); - print ''; + print ''; print "\n"; - $now=mktime(); $var=True; - while ($i < min($num,$limit)) + while ($i < $num) { $obj = $db->fetch_object(); $var=!$var; print ""; - print "\n"; - print "\n"; - print "\n"; - // Affiche statut contrat - if ($obj->enservice == 1) - { - if (! $obj->fin_validite || $obj->fin_validite >= $now) { - $class = 'normal'; - $statut= $langs->trans("ContractStatusRunning"); - } - else { - $class = 'error'; - $statut= $langs->trans("ContractStatusRunning").', '.img_warning().' '.$langs->trans("ContractStatusExpired"); - } - } - elseif($obj->enservice == 2) - { - $class = "normal"; - $statut= $langs->trans("Closed"); - } - else - { - $class = "warning"; - $statut= $langs->trans("ContractStatusToRun"); - } - print ""; - - print "\n"; - - print ''; + print "\n"; + + print "\n"; $i++; @@ -164,6 +107,7 @@ else dolibarr_print_error($db); } +print '
'.$langs->trans("Action").'
Service
cid\">"; - print img_file(); - print " cid\">$obj->cidpid\">$obj->labelsidp\">$obj->nom"; - print "$statut"; - print ""; - if ($obj->enservice > 0) { - print dolibarr_print_date($obj->fin_validite); - } - else { - print " "; - } - print "'; - // \todo Créer action "Renouveler" - print '"; + print 'statut '; + print " fk_contrat\">$obj->label
'; $db->close(); diff --git a/htdocs/contrat/ligne.php b/htdocs/contrat/ligne.php new file mode 100644 index 00000000000..32ff3c75e30 --- /dev/null +++ b/htdocs/contrat/ligne.php @@ -0,0 +1,329 @@ + + * Copyright (C) 2004 Laurent Destailleur + * + * 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$ + * + */ + +/*! \file htdocs/commande/fiche.php + \ingroup commande + \brief Fiche commande + \version $Revision$ +*/ + +require("./pre.inc.php"); + +$langs->load("contracts"); +$langs->load("orders"); +$langs->load("companies"); + +$user->getrights('contrat'); + +if (!$user->rights->contrat->lire) + accessforbidden(); + +require("../project.class.php"); +require("../propal.class.php"); +require_once (DOL_DOCUMENT_ROOT."/contrat/contrat.class.php"); + +/* + * Sécurité accés client + */ +if ($user->societe_id > 0) +{ + $action = ''; + $socidp = $user->societe_id; +} +/* + * + */ +if ($_POST["action"] == 'add') +{ + $datecontrat = mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); + + $contrat = new Contrat($db); + + $contrat->soc_id = $_POST["soc_id"]; + $contrat->date_contrat = $datecontrat; + $contrat->commercial_id = $_POST["commercial"]; + $contrat->note = $_POST["note"]; + $contrat->projetid = $_POST["projetid"]; + $contrat->remise_percent = $_POST["remise_percent"]; + + /* + $contrat->add_product($_POST["idprod1"],$_POST["qty1"],$_POST["remise_percent1"]); + $contrat->add_product($_POST["idprod2"],$_POST["qty2"],$_POST["remise_percent2"]); + $contrat->add_product($_POST["idprod3"],$_POST["qty3"],$_POST["remise_percent3"]); + $contrat->add_product($_POST["idprod4"],$_POST["qty4"],$_POST["remise_percent4"]); + */ + $result = $contrat->create($user); + if ($result == 0) + { + Header("Location: fiche.php?id=".$contrat->id); + } + + $_GET["id"] = $contrat->id; + + $action = ''; +} +/* + * + */ +if ($_POST["action"] == 'confirm_active' && $_POST["confirm"] == 'yes' && $user->rights->contrat->activer) +{ + $contrat = new Contrat($db); + $contrat->fetch($_GET["id"]); + + $result = $contrat->active_line($user, $_GET["ligne"], $_GET["date"]); + + if ($result == 0) + { + Header("Location: fiche.php?id=".$contrat->id); + } + +} + + +llxHeader('',$langs->trans("Contract"),"Contrat"); + +$html = new Form($db); + +/* *************************************************************************** */ +/* */ +/* Mode vue et edition */ +/* */ +/* *************************************************************************** */ + + $id = $_GET["id"]; + if ($id > 0) + { + $contrat = New Contrat($db); + if ( $contrat->fetch($id) > 0) + { + + $author = new User($db); + $author->id = $contrat->user_author_id; + $author->fetch(); + + $commercial_signature = new User($db); + $commercial_signature->id = $contrat->commercial_signature_id; + $commercial_signature->fetch(); + + $commercial_suivi = new User($db); + $commercial_suivi->id = $contrat->commercial_suivi_id; + $commercial_suivi->fetch(); + + $h = 0; + $head[$h][0] = DOL_URL_ROOT.'/contrat/fiche.php?id='.$contrat->id; + $head[$h][1] = $langs->trans("Contract"); + $h++; + + $head[$h][0] = DOL_URL_ROOT.'/contrat/ligne.php?id='.$contrat->id; + $head[$h][1] = $langs->trans("Edition de la ligne"); + $hselected = $h; + + dolibarr_fiche_head($head, $hselected, $contrat->societe->nom); + + + + /* + * Contrat + */ + + + print ''; + print ""; + print ''; + + print '"; + + print ''; + print "\n"; + + print '"; + + print ''; + print ''; + print "
".$langs->trans("Customer")."'; + print ''.$contrat->societe->nom.''; + print $contrat->statuts[$contrat->statut]; + print "
'.$langs->trans("Date").'".strftime("%A %d %B %Y",$contrat->date_contrat)."Projet'; + if ($contrat->projet_id > 0) + { + $projet = New Project($db); + $projet->fetch($contrat->projet_id); + print ''.$projet->title.''; + } + else + { + print 'Classer le contrat'; + } + print " 
'.$langs->trans("Commercial suivi").''.$commercial_suivi->fullname.''.$langs->trans("Commercial signature").''.$commercial_signature->fullname.'
"; + + + + /* + * Confirmation de la validation + * + */ + if ($_GET["action"] == 'active' && $user->rights->contrat->activer) + { + print '
'; + $dateact = mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); + $html->form_confirm("ligne.php?id=".$contrat->id."&ligne=".$_GET["ligne"]."&date=".$dateact,"Activer le service","Etes-vous sûr de vouloir activer ce service en date du ".strftime("%A %d %B %Y", $dateact)." ?","confirm_active"); + } + + + + /* + * Lignes de contrats + * + */ + echo '
'; + + $sql = "SELECT l.statut, l.label, l.fk_product, l.description, l.price_ht, l.qty, l.rowid, l.tva_tx, l.remise_percent, l.subprice"; + $sql .= " FROM ".MAIN_DB_PREFIX."contratdet as l"; + $sql .= " WHERE l.fk_contrat = ".$id; + $sql .= " AND rowid = ".$_GET["ligne"]; + $sql .= " ORDER BY l.rowid"; + + $result = $db->query($sql); + + if ($result) + { + $num = $db->num_rows(); + $i = 0; $total = 0; + + if ($num) + { + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + } + $var=True; + while ($i < $num) + { + $objp = $db->fetch_object(); + print "\n"; + if ($objp->fk_product > 0) + { + print ''; + } + else + { + print "\n"; + } + print ''; + print ''; + if ($objp->remise_percent > 0) + { + print '\n"; + } + else + { + print ''; + } + print '\n"; + + print ''; + + print "\n"; + + + $i++; + $var=!$var; + } + $db->free(); + } + else + { + print $db->error(); + } + + + print ''; + + + print "

\n"; + + + + if ( $user->rights->contrat->activer && $contrat->statut == 0 && $objp->statut <> 4) + { + /** + * Activer la ligne de contrat + */ + $form = new Form($db); + + print '

'.$langs->trans("Description").'TvaQuantitéRemiseP.U.  
'; + print 'statut '; + print ''.stripslashes(nl2br($objp->label)).''; + + if ($objp->description) + { + print '
'.stripslashes(nl2br($objp->description)); + } + + print '
".stripslashes(nl2br($objp->description))."'.$objp->tva_tx.' %'.$objp->qty.''.$objp->remise_percent." % '.price($objp->subprice)."  
'; + + print '
'; + print ''; + print ''; + + print ''; + + print ''; + + print ''; + print '
Activer le service'; + print '
Date d\'activation'; + + if ($_POST["remonth"]) + { + $dateact = mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); + } + else + { + $dateact = time(); + } + + print $form->select_date($dateact); + print '
Intervenant'.$user->fullname.'
Commentaire
'; + + print '
'; + + print ' 
'; + } + } + else + { + /* Contrat non trouvée */ + print "Contrat inexistante ou accés refusé"; + } + } + +$db->close(); + +llxFooter("Dernière modification $Date$ révision $Revision$"); +?> diff --git a/htdocs/contrat/pre.inc.php b/htdocs/contrat/pre.inc.php index 9a6043026f7..373112f3da6 100644 --- a/htdocs/contrat/pre.inc.php +++ b/htdocs/contrat/pre.inc.php @@ -21,9 +21,6 @@ */ require("../main.inc.php"); -$types[0] = "produit"; -$types[1] = "service"; - function llxHeader($head = "", $urlp = "") { global $user, $conf; @@ -37,6 +34,7 @@ function llxHeader($head = "", $urlp = "") $menu = new Menu(); $menu->add(DOL_URL_ROOT."/contrat/index.php", "Contrats"); + $menu->add_submenu(DOL_URL_ROOT."/contrat/liste.php", "Liste"); $menu->add_submenu(DOL_URL_ROOT."/contrat/enservice.php", "En service"); left_menu($menu->liste); diff --git a/htdocs/contrat/statut0.png b/htdocs/contrat/statut0.png new file mode 100644 index 00000000000..7a8fb198368 Binary files /dev/null and b/htdocs/contrat/statut0.png differ diff --git a/htdocs/contrat/statut1.png b/htdocs/contrat/statut1.png new file mode 100644 index 00000000000..134f1b74b30 Binary files /dev/null and b/htdocs/contrat/statut1.png differ diff --git a/htdocs/contrat/statut2.png b/htdocs/contrat/statut2.png new file mode 100644 index 00000000000..67f0dd870d6 Binary files /dev/null and b/htdocs/contrat/statut2.png differ diff --git a/htdocs/contrat/statut3.png b/htdocs/contrat/statut3.png new file mode 100644 index 00000000000..ae1f93d3906 Binary files /dev/null and b/htdocs/contrat/statut3.png differ diff --git a/htdocs/contrat/statut4.png b/htdocs/contrat/statut4.png new file mode 100644 index 00000000000..15bb595ba2f Binary files /dev/null and b/htdocs/contrat/statut4.png differ