* Copyright (C) 2004-2006 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/contrat/ligne.php \ingroup contrat \brief Fiche contrat \version $Revision$ */ require("./pre.inc.php"); require_once(DOL_DOCUMENT_ROOT.'/lib/contract.lib.php'); require_once(DOL_DOCUMENT_ROOT."/product.class.php"); if ($conf->projet->enabled) require_once(DOL_DOCUMENT_ROOT."/project.class.php"); if ($conf->propal->enabled) require_once(DOL_DOCUMENT_ROOT."/propal.class.php"); if ($conf->contrat->enabled) require_once(DOL_DOCUMENT_ROOT."/contrat/contrat.class.php"); $langs->load("contracts"); $langs->load("orders"); $langs->load("companies"); $user->getrights('contrat'); if (!$user->rights->contrat->lire) accessforbidden(); /* * Sécurité accés client */ if ($user->societe_id > 0) { $action = ''; $socidp = $user->societe_id; } /* * Actions */ 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"], $_GET["dateend"]); if ($result > 0) { Header("Location: fiche.php?id=".$contrat->id); exit; } else { $mesg=$contrat->error; } } if ($_POST["action"] == 'confirm_close' && $_POST["confirm"] == 'yes' && $user->rights->contrat->activer) { $contrat = new Contrat($db); $contrat->fetch($_GET["id"]); $result = $contrat->close_line($user, $_GET["ligne"], $_GET["dateend"]); if ($result > 0) { Header("Location: fiche.php?id=".$contrat->id); exit; } else { $mesg=$contrat->error; } } llxHeader('',$langs->trans("ContractCard"),"Contrat"); $html = new Form($db); /* *************************************************************************** */ /* */ /* Mode vue et edition */ /* */ /* *************************************************************************** */ $id = $_GET["id"]; if ($id > 0) { $contrat = New Contrat($db); if ( $contrat->fetch($id) > 0) { $soc = new Societe($db); $soc->fetch($contrat->socidp); $author = new User($db); $author->id = $contrat->user_author_id; $author->fetch(); $head = contract_prepare_head($contrat); $h=sizeof($head); // On ajout onglet service $head[$h][0] = DOL_URL_ROOT.'/contrat/ligne.php?id='.$contrat->id."&ligne=".$_GET["ligne"]; $head[$h][1] = $langs->trans($langs->trans("EditServiceLine")); $hselected = $h; dolibarr_fiche_head($head, $hselected, $langs->trans("Contract")); /* * Confirmation de la validation activation */ if ($_GET["action"] == 'active' && $user->rights->contrat->activer) { $dateactstart = mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); $dateactend = mktime(12, 0 , 0, $_POST["endmonth"], $_POST["endday"], $_POST["endyear"]); $html->form_confirm("ligne.php?id=".$contrat->id."&ligne=".$_GET["ligne"]."&date=".$dateactstart."&dateend=".$dateactend,$langs->trans("ActivateService"),$langs->trans("ConfirmActivateService",strftime("%A %d %B %Y", $dateactstart)),"confirm_active"); print '
'; } /* * Confirmation de la validation fermeture */ if ($_GET["action"] == 'close' && $user->rights->contrat->activer) { $dateactstart = mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); $dateactend = mktime(12, 0 , 0, $_POST["endmonth"], $_POST["endday"], $_POST["endyear"]); $html->form_confirm("ligne.php?id=".$contrat->id."&ligne=".$_GET["ligne"]."&date=".$dateactstart."&dateend=".$dateactend,$langs->trans("CloseService"),$langs->trans("ConfirmCloseService",strftime("%A %d %B %Y", $dateactstart)),"confirm_close"); print '
'; } /* * Contrat */ print ''; // Reference du contrat print '"; // Customer print ""; print ''; // Ligne info remises tiers print ''; // Statut contrat print '"; // Date print ''; print '\n"; // Factures associées /* TODO */ // Projet if ($conf->projet->enabled) { $langs->load("projects"); print '"; } /* Fonction remplacé par les contacts de contrat // Commerciaux print ''; print ''; */ print "
'.$langs->trans("Ref").''; print $contrat->ref; print "
".$langs->trans("Customer")."'.$soc->getNomUrl(1).'
'.$langs->trans('Discount').''; if ($soc->remise_client) print $langs->trans("CompanyHasRelativeDiscount",$soc->remise_client); else print $langs->trans("CompanyHasNoRelativeDiscount"); $absolute_discount=$soc->getCurrentDiscount(); print '. '; if ($absolute_discount) print $langs->trans("CompanyHasAbsoluteDiscount",$absolute_discount,$langs->trans("Currency".$conf->monnaie)); else print $langs->trans("CompanyHasNoAbsoluteDiscount"); print '.'; print '
'.$langs->trans("Status").''; print $contrat->getLibStatut(2); print "
'.$langs->trans("Date").''.dolibarr_print_date($contrat->date_contrat,"%A %d %B %Y")."
'; print ''; if ($_GET["action"] != "classer") print ''; print '
'; print $langs->trans("Project"); print ''.img_edit($langs->trans("SetProject")).'
'; print '
'; if ($_GET["action"] == "classer") { $html->form_project($_SERVER["PHP_SELF"]."?id=$id&ligne=".$_GET["ligne"],$contrat->fk_soc,$contrat->fk_projet,"projetid"); } else { $html->form_project($_SERVER["PHP_SELF"]."?id=$id&ligne=".$_GET["ligne"],$contrat->fk_soc,$contrat->fk_projet,"none"); } print "
'.$langs->trans("SalesRepresentativeFollowUp").''.$commercial_suivi->fullname.''.$langs->trans("SalesRepresentativeSignature").''.$commercial_signature->fullname.'
"; /* * Lignes de contrats */ print '
'; $sql = "SELECT cd.statut, cd.label, cd.fk_product, cd.description, cd.price_ht, cd.qty, cd.rowid, cd.tva_tx, cd.remise_percent, cd.subprice,"; $sql.= " ".$db->pdate("cd.date_ouverture_prevue")." as date_debut, ".$db->pdate("cd.date_ouverture")." as date_debut_reelle,"; $sql.= " ".$db->pdate("cd.date_fin_validite")." as date_fin, ".$db->pdate("cd.date_cloture")." as date_fin_reelle,"; $sql.= " p.ref, p.label"; $sql.= " FROM ".MAIN_DB_PREFIX."contratdet as cd"; $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON cd.fk_product = p.rowid"; $sql.= " WHERE cd.fk_contrat = ".$id; $sql.= " AND cd.rowid = ".$_GET["ligne"]; $sql.= " ORDER BY cd.rowid"; $result = $db->query($sql); if ($result) { $num = $db->num_rows($result); $i = 0; $total = 0; if ($num) { print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print "\n"; } $var=true; while ($i < $num) { $objp = $db->fetch_object($result); $var=!$var; print "\n"; // Libelle if ($objp->fk_product > 0) { print ''; } else { print "\n"; } // TVA print ''; print '\n"; print ''; if ($objp->remise_percent > 0) { print '\n"; } else { print ''; } print ''; // Statut print ''; print "\n"; if ($objp->date_debut) $dateactstart=$objp->date_debut; if ($objp->date_fin) $dateactend=$objp->date_fin; // Dates de en service prévues et effectives print ''; print ''; print ''; $i++; } $db->free($result); } else { dolibarr_print_error($db); } print '
'.$langs->trans("Service").''.$langs->trans("VAT").''.$langs->trans("PriceUHT").''.$langs->trans("Qty").''.$langs->trans("ReductionShort").' '.$langs->trans("Status").'
'; print ''; print img_object($langs->trans("ShowService"),"service").' '.$objp->ref.''; print $objp->label?' - '.$objp->label:''; if ($objp->description) print '
'.stripslashes(nl2br($objp->description)); print '
".stripslashes(nl2br($objp->description))."'.$objp->tva_tx.'%'.price($objp->subprice)."'.$objp->qty.''.$objp->remise_percent."%  '.img_statut($objp->statut,$langs->trans("ServiceStatusInitial")).'
'; // Date prévues print $langs->trans("DateStartPlanned").': '; if ($objp->date_debut) { print dolibarr_print_date($objp->date_debut); // Warning si date prevu passée et pas en service if ($objp->statut == 0 && $objp->date_debut < time() - $conf->contrat->warning_delay) { print " ".img_warning($langs->trans("Late")); } } else print $langs->trans("Unknown"); print '  -  '; print $langs->trans("DateEndPlanned").': '; if ($objp->date_fin) { print dolibarr_print_date($objp->date_fin); if ($objp->statut == 4 && $objp->date_fin < time() - $conf->contrat->warning_delay) { print " ".img_warning($langs->trans("Late")); } } else print $langs->trans("Unknown"); print '
'; // Si pas encore activé if (! $objp->date_debut_reelle) { print $langs->trans("DateStartReal").': '; if ($objp->date_debut_reelle) print dolibarr_print_date($objp->date_debut_reelle); else print $langs->trans("ContractStatusNotRunning"); } // Si activé et en cours if ($objp->date_debut_reelle && ! $objp->date_fin_reelle) { print $langs->trans("DateStartReal").': '; print dolibarr_print_date($objp->date_debut_reelle); } // Si désactivé if ($objp->date_debut_reelle && $objp->date_fin_reelle) { print $langs->trans("DateStartReal").': '; print dolibarr_print_date($objp->date_debut_reelle); print '  -  '; print $langs->trans("DateEndReal").': '; print dolibarr_print_date($objp->date_fin_reelle); } print '
'; print ''; if ($user->rights->contrat->activer && $contrat->statut == 1 && $objp->statut <> 4) { /** * Activer la ligne de contrat */ $form = new Form($db); print '
'; print ''; print ''; // Definie date debut et fin par defaut if ($_POST["remonth"]) $dateactstart = mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); elseif (! $dateactstart) $dateactstart = time(); if ($_POST["endmonth"]) $dateactend = mktime(12, 0 , 0, $_POST["endmonth"], $_POST["endday"], $_POST["endyear"]); elseif (! $dateactend) { if ($objp->fk_product > 0) { $product=new Product($db); $product->fetch($objp->fk_product); $dateactend = dolibarr_time_plus_duree (time(), $product->duration_value, $product->duration_unit); } } print ''; print ''; print ''; print ''; print ''; print '
'.$langs->trans("ActivateService").'
'.$langs->trans("DateServiceActivate").''; print $form->select_date($dateactstart,'','','','',"active"); print ''.$langs->trans("DateEndPlanned").''; print $form->select_date($dateactend,"end",'','','',"active"); print '
'.$langs->trans("Comment").'
'; print '
'; } if ($user->rights->contrat->activer && $contrat->statut == 1 && $objp->statut == 4) { /** * Désactiver la ligne de contrat */ $form = new Form($db); print '
'; print ''; print ''; // Definie date debut et fin par defaut if ($_POST["remonth"]) $dateactstart = mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); elseif (! $dateactstart) $dateactstart = time(); if ($_POST["endmonth"]) $dateactend = mktime(12, 0 , 0, $_POST["endmonth"], $_POST["endday"], $_POST["endyear"]); elseif (! $dateactend) { if ($objp->fk_product > 0) { $product=new Product($db); $product->fetch($objp->fk_product); $dateactend = dolibarr_time_plus_duree (time(), $product->duration_value, $product->duration_unit); } } print ''; print ''; print ''; print '
'.$langs->trans("CloseService").'
'.$langs->trans("DateEndReal").''; print $form->select_date($dateactend,"end",'','','',"close"); print '
'.$langs->trans("Comment").'
'; print '
'; } } else { // Contrat non trouvé print "Contrat inexistant ou accés refusé"; } } $db->close(); llxFooter('$Date$ - $Revision$'); ?>