* Copyright (C) 2004-2008 Laurent Destailleur * Copyright (C) 2006 Andre Cianfarani * 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/contrat/fiche.php \ingroup contrat \brief Fiche contrat \version $Id$ */ require("./pre.inc.php"); require_once(DOL_DOCUMENT_ROOT.'/lib/contract.lib.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"); $langs->load("bills"); $langs->load("products"); // Security check if ($user->societe_id) $socid=$user->societe_id; $result=restrictedArea($user,'contrat',$contratid,'contrat'); /* * 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_closeline' && $_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; } } // Si ajout champ produit predefini if ($_POST["mode"]=='predefined') { $date_start=''; $date_end=''; if ($_POST["date_startmonth"] && $_POST["date_startday"] && $_POST["date_startyear"]) { $date_start=dolibarr_mktime(12, 0 , 0, $_POST["date_startmonth"], $_POST["date_startday"], $_POST["date_startyear"]); } if ($_POST["date_endmonth"] && $_POST["date_endday"] && $_POST["date_endyear"]) { $date_end=dolibarr_mktime(12, 0 , 0, $_POST["date_endmonth"], $_POST["date_endday"], $_POST["date_endyear"]); } } // Si ajout champ produit libre if ($_POST["mode"]=='libre') { $date_start_sl=''; $date_end_sl=''; if ($_POST["date_start_slmonth"] && $_POST["date_start_slday"] && $_POST["date_start_slyear"]) { $date_start_sl=dolibarr_mktime(12, 0 , 0, $_POST["date_start_slmonth"], $_POST["date_start_slday"], $_POST["date_start_slyear"]); } if ($_POST["date_end_slmonth"] && $_POST["date_end_slday"] && $_POST["date_end_slyear"]) { $date_end_sl=dolibarr_mktime(12, 0 , 0, $_POST["date_end_slmonth"], $_POST["date_end_slday"], $_POST["date_end_slyear"]); } } // Param si updateligne $date_start_update=''; $date_end_update=''; $date_start_real_update=''; $date_end_real_update=''; if ($_POST["date_start_updatemonth"] && $_POST["date_start_updateday"] && $_POST["date_start_updateyear"]) { $date_start_update=dolibarr_mktime(12, 0 , 0, $_POST["date_start_updatemonth"], $_POST["date_start_updateday"], $_POST["date_start_updateyear"]); } if ($_POST["date_end_updatemonth"] && $_POST["date_end_updateday"] && $_POST["date_end_updateyear"]) { $date_end_update=dolibarr_mktime(12, 0 , 0, $_POST["date_end_updatemonth"], $_POST["date_end_updateday"], $_POST["date_end_updateyear"]); } if ($_POST["date_start_real_updatemonth"] && $_POST["date_start_real_updateday"] && $_POST["date_start_real_updateyear"]) { $date_start_real_update=dolibarr_mktime(12, 0 , 0, $_POST["date_start_real_updatemonth"], $_POST["date_start_real_updateday"], $_POST["date_start_real_updateyear"]); } if ($_POST["date_end_real_updatemonth"] && $_POST["date_end_real_updateday"] && $_POST["date_end_real_updateyear"]) { $date_end_real_update=dolibarr_mktime(12, 0 , 0, $_POST["date_end_real_updatemonth"], $_POST["date_end_real_updateday"], $_POST["date_end_real_updateyear"]); } /* * Actions */ if ($_POST["action"] == 'add') { $datecontrat = dolibarr_mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); $contrat = new Contrat($db); $contrat->socid = $_POST["socid"]; $contrat->date_contrat = $datecontrat; $contrat->commercial_suivi_id = $_POST["commercial_suivi_id"]; $contrat->commercial_signature_id = $_POST["commercial_signature_id"]; $contrat->note = trim($_POST["note"]); $contrat->projetid = trim($_POST["projetid"]); $contrat->remise_percent = trim($_POST["remise_percent"]); $contrat->ref = trim($_POST["ref"]); $result = $contrat->create($user,$langs,$conf); if ($result > 0) { Header("Location: fiche.php?id=".$contrat->id); exit; } else { $mesg='
'.$contrat->error.'
'; } $_GET["socid"]=$_POST["socid"]; $_GET["action"]='create'; $action = ''; } if ($_POST["action"] == 'classin') { $contrat = new Contrat($db); $contrat->fetch($_GET["id"]); $contrat->setProject($_POST["projetid"]); } if ($_POST["action"] == 'addligne' && $user->rights->contrat->creer) { if ($_POST["pqty"] && (($_POST["pu"] != '' && $_POST["desc"]) || $_POST["p_idprod"])) { $contrat = new Contrat($db); $ret=$contrat->fetch($_GET["id"]); if ($ret < 0) { dolibarr_print_error($db,$commande->error); exit; } $ret=$contrat->fetch_client(); $date_start=''; $date_end=''; // Si ajout champ produit libre if ($_POST['mode'] == 'libre') { if ($_POST['date_start_slyear'] && $_POST['date_start_slmonth'] && $_POST['date_start_slday']) { $date_start=dolibarr_mktime(12,0,0,$_POST['date_start_slmonth'],$_POST['date_start_slday'],$_POST['date_start_slyear']); } if ($_POST['date_end_slyear'] && $_POST['date_end_slmonth'] && $_POST['date_end_slday']) { $date_end=dolibarr_mktime(12,0,0,$_POST['date_end_slmonth'],$_POST['date_end_slday'],$_POST['date_end_slyear']); } } // Si ajout champ produit pr�d�fini if ($_POST['mode'] == 'predefined') { if ($_POST['date_startyear'] && $_POST['date_startmonth'] && $_POST['date_startday']) { $date_start=dolibarr_mktime(12,0,0,$_POST['date_startmonth'],$_POST['date_startday'],$_POST['date_startyear']); } if ($_POST['date_endyear'] && $_POST['date_endmonth'] && $_POST['date_endday']) { $date_end=dolibarr_mktime(12,0,0,$_POST['date_endmonth'],$_POST['date_endday'],$_POST['date_endyear']); } } $price_base_type = 'HT'; // Ecrase $pu par celui du produit // Ecrase $desc par celui du produit // Ecrase $txtva par celui du produit // Ecrase $base_price_type par celui du produit if ($_POST['p_idprod']) { $prod = new Product($db, $_POST['p_idprod']); $prod->fetch($_POST['p_idprod']); $tva_tx = get_default_tva($mysoc,$contrat->client,$prod->tva_tx); $tva_npr = get_default_npr($mysoc,$contrat->client,$prod->tva_npr); // On defini prix unitaire if ($conf->global->PRODUIT_MULTIPRICES == 1) { $pu_ht = $prod->multiprices[$contrat->client->price_level]; $pu_ttc = $prod->multiprices_ttc[$contrat->client->price_level]; $price_base_type = $prod->multiprices_base_type[$contrat->client->price_level]; } else { $pu_ht = $prod->price; $pu_ttc = $prod->price_ttc; $price_base_type = $prod->price_base_type; } // On reevalue prix selon taux tva car taux tva transaction peut etre different // de ceux du produit par defaut (par exemple si pays different entre vendeur et acheteur). if ($tva_tx != $prod->tva_tx) { if ($price_base_type != 'HT') { $pu_ht = price2num($pu_ttc / (1 + ($tva_tx/100)), 'MU'); } else { $pu_ttc = price2num($pu_ht * (1 + ($tva_tx/100)), 'MU'); } } $desc = $prod->description; $desc.= $prod->description && $_POST['desc'] ? "\n" : ""; $desc.= $_POST['desc']; } else { $pu_ht=$_POST['pu']; $tva_tx=eregi_replace('\*','',$_POST['tva_tx']); $tva_npr=eregi('\*',$_POST['tva_tx'])?1:0; $desc=$_POST['desc']; } $info_bits=0; if ($tva_npr) $info_bits |= 0x01; // Insert line $result = $contrat->addline( $desc, $pu_ht, $_POST["pqty"], $tva_tx, $_POST["p_idprod"], $_POST["premise"], $date_start, $date_end, $price_base_type, $pu_ttc, $info_bits ); if ($result > 0) { /* if ($_REQUEST['lang_id']) { $outputlangs = new Translate("",$conf); $outputlangs->setDefaultLang($_REQUEST['lang_id']); } contrat_pdf_create($db, $contrat->id, $contrat->modelpdf, $outputlangs); */ } else { $mesg='
'.$contrat->error.'
'; } } } if ($_POST["action"] == 'updateligne' && $user->rights->contrat->creer && ! $_POST["cancel"]) { $contratline = new ContratLigne($db); if ($contratline->fetch($_POST["elrowid"])) { $db->begin(); if ($date_start_real_update == '') $date_start_real_update=$contratline->date_ouverture; if ($date_end_real_update == '') $date_end_real_update=$contratline->date_cloture; $contratline->description=$_POST["eldesc"]; $contratline->price_ht=$_POST["elprice"]; $contratline->subprice=$_POST["elprice"]; $contratline->qty=$_POST["elqty"]; $contratline->remise_percent=$_POST["elremise_percent"]; $contratline->date_ouverture_prevue=$date_start_update; $contratline->date_ouverture=$date_start_real_update; $contratline->date_fin_validite=$date_end_update; $contratline->date_cloture=$date_end_real_update; $contratline->tva_tx=$_POST["eltva_tx"]; $result=$contratline->update($user); if ($result > 0) { $db->commit(); } else { dolibarr_print_error($db,'Failed to update contrat_det'); $db->rollback(); } } else { dolibarr_print_error($db); } } if ($_GET["action"] == 'deleteline' && $user->rights->contrat->creer) { $contrat = new Contrat($db); $contrat->fetch($_GET["id"]); $result = $contrat->delete_line($_GET["lineid"]); if ($result >= 0) { Header("Location: fiche.php?id=".$contrat->id); exit; } else { $mesg=$contrat->error; } } if ($_POST["action"] == 'confirm_valid' && $_POST["confirm"] == 'yes' && $user->rights->contrat->creer) { $contrat = new Contrat($db); $contrat->fetch($_GET["id"]); $result = $contrat->validate($user,$langs,$conf); } if ($_POST["action"] == 'confirm_close' && $_POST["confirm"] == 'yes' && $user->rights->contrat->creer) { $contrat = new Contrat($db); $contrat->fetch($_GET["id"]); $result = $contrat->cloture($user,$langs,$conf); } if ($_POST["action"] == 'confirm_delete' && $_POST["confirm"] == 'yes') { if ($user->rights->contrat->supprimer) { $contrat = new Contrat($db); $contrat->id = $_GET["id"]; $result=$contrat->delete($user,$langs,$conf); if ($result >= 0) { Header("Location: index.php"); return; } else { $mesg='
'.$contrat->error.'
'; } } } llxHeader('',$langs->trans("ContractCard"),"Contrat"); $form = new Form($db); $html = new Form($db); $contratlignestatic=new ContratLigne($db); /********************************************************************* * * Mode creation * *********************************************************************/ if ($_GET["action"] == 'create') { dolibarr_fiche_head($head, $a, $langs->trans("AddContract")); if ($mesg) print $mesg; $new_contrat = new Contrat($db); $sql = "SELECT s.nom, s.prefix_comm, s.rowid"; $sql.= " FROM ".MAIN_DB_PREFIX."societe as s"; $sql.= " WHERE s.rowid = ".$_GET["socid"]; $resql=$db->query($sql); if ($resql) { $num = $db->num_rows($resql); if ($num) { $obj = $db->fetch_object($resql); $soc = new Societe($db); $soc->fetch($obj->rowid); print '
'; print ''; print ''."\n"; print ''; print ''; // Ref print ''; print ''; // Customer print ''; // Ligne info remises tiers print ''; // Commercial suivi print ''; // Commercial signature print ''; print '"; if ($conf->projet->enabled) { print '"; } print ''; if (! $user->societe_id) { print ''; } print ''; print "
'.$langs->trans("Ref").'
'.$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->getAvailableDiscounts(); print '. '; if ($absolute_discount) print $langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->trans("Currency".$conf->monnaie)); else print $langs->trans("CompanyHasNoAbsoluteDiscount"); print '.'; print '
'.$langs->trans("TypeContact_contrat_internal_SALESREPFOLL").''; print $form->select_users('','commercial_suivi_id',1,''); print '
'.$langs->trans("TypeContact_contrat_internal_SALESREPSIGN").''; print $form->select_users('','commercial_signature_id',1,''); print '
'.$langs->trans("Date").''; $form->select_date('','','','','',"contrat"); print "
'.$langs->trans("Project").''; $proj = new Project($db); $form->select_array("projetid",$proj->liste_array($soc->id),0,1); print "
'.$langs->trans("NotePublic").''; print '
'.$langs->trans("NotePrivate").''; print '
\n"; print "
\n"; if ($propalid) { /* * Produits */ print '
'; print_titre($langs->trans("Products")); print ''; print ''; print ''; 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($result); $i = 0; $var=True; while ($i < $num) { $objp = $db->fetch_object($result); $var=!$var; print "\n"; print ''; 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"; $sql.= " WHERE pt.fk_propal = $propalid AND pt.fk_product = 0"; $sql.= " ORDER BY pt.rowid ASC"; $result=$db->query($sql); if ($result) { $num = $db->num_rows($result); $i = 0; while ($i < $num) { $objp = $db->fetch_object($result); $var=!$var; print "\n"; print ''; print ''; print ''; print ''; print "\n"; $i++; } } else { dolibarr_print_error($db); } print '
'.$langs->trans("Ref").''.$langs->trans("Product").''.$langs->trans("Price").''.$langs->trans("Qty").''.$langs->trans("ReductionShort").'
[$objp->ref]'.$objp->product.'".price($objp->price).''.$objp->qty.''.$objp->remise_percent.'%
 '.$objp->product.''.price($objp->price).''.$objp->remise_percent.'%'.$objp->qty.'
'; } } } else { dolibarr_print_error($db); } print ''; } else /* *************************************************************************** */ /* */ /* Mode vue et edition */ /* */ /* *************************************************************************** */ { $id = $_GET["id"]; if ($id > 0) { $contrat = new Contrat($db); $result=$contrat->fetch($id); if ($result > 0) $result=$contrat->fetch_lignes(); if ($result < 0) { dolibarr_print_error($db,$contrat->error); exit; } if ($mesg) print $mesg; $nbofservices=sizeof($contrat->lignes); $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(); $head = contract_prepare_head($contrat); $hselected = 0; dolibarr_fiche_head($head, $hselected, $langs->trans("Contract")); /* * Confirmation de la suppression du contrat */ if ($_GET["action"] == 'delete') { $form->form_confirm("fiche.php?id=$id",$langs->trans("DeleteAContract"),$langs->trans("ConfirmDeleteAContract"),"confirm_delete"); print '
'; } /* * Confirmation de la validation */ if ($_GET["action"] == 'valid') { //$numfa = contrat_get_num($soc); $form->form_confirm("fiche.php?id=$id",$langs->trans("ValidateAContract"),$langs->trans("ConfirmValidateContract"),"confirm_valid"); print '
'; } /* * Confirmation de la fermeture */ if ($_GET["action"] == 'close') { $form->form_confirm("fiche.php?id=$id",$langs->trans("CloseAContract"),$langs->trans("ConfirmCloseContract"),"confirm_close"); print '
'; } /* * Contrat */ if ($contrat->brouillon && $user->rights->contrat->creer) { print '
'; print ''; } print ''; // Ref du contrat print '"; // Customer print ""; print ''; // Ligne info remises tiers print ''; // Statut contrat print '"; // Date print ''; print '\n"; // Projet if ($conf->projet->enabled) { $langs->load("projects"); print '"; } print "
'.$langs->trans("Ref").''; print $contrat->ref; print "
".$langs->trans("Customer")."'.$contrat->societe->getNomUrl(1).'
'.$langs->trans('Discount').''; if ($contrat->societe->remise_client) print $langs->trans("CompanyHasRelativeDiscount",$contrat->societe->remise_client); else print $langs->trans("CompanyHasNoRelativeDiscount"); $absolute_discount=$contrat->societe->getAvailableDiscounts(); print '. '; if ($absolute_discount) print $langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->trans("Currency".$conf->monnaie)); else print $langs->trans("CompanyHasNoAbsoluteDiscount"); print '.'; print '
'.$langs->trans("Status").''; if ($contrat->statut==0) print $contrat->getLibStatut(2); else print $contrat->getLibStatut(4); print "
'.$langs->trans("Date").''.dolibarr_print_date($contrat->date_contrat,"dayhour")."
'; print ''; if ($_GET["action"] != "classer" && $user->rights->projet->creer) print ''; print '
'; print $langs->trans("Project"); print ''.img_edit($langs->trans("SetProject")).'
'; print '
'; if ($_GET["action"] == "classer") { $form->form_project("fiche.php?id=$id",$contrat->socid,$contrat->fk_projet,"projetid"); } else { $form->form_project("fiche.php?id=$id",$contrat->socid,$contrat->fk_projet,"none"); } print "
"; if ($contrat->brouillon == 1 && $user->rights->contrat->creer) { print '
'; } echo '
'; $servicepos=(isset($_REQUEST["servicepos"])?$_REQUEST["servicepos"]:1); $colorb='333333'; /* * Lignes de contrats */ // Menu list of services print ''; // Array with (n*2)+1 lines $cursorline=1; while ($cursorline <= $nbofservices) { print ''; print ''; print ''; // End td if line is 1 print ''; print ''; $cursorline++; } print '
'; print $langs->trans("ServiceNb",$cursorline).''; // Area with common detail of line print ''; $sql = "SELECT cd.statut, cd.label as label_det, cd.fk_product, cd.description, cd.price_ht, cd.qty, cd.rowid,"; $sql.= " cd.tva_tx, cd.remise_percent, cd.info_bits, 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.rowid = ".$contrat->lignes[$cursorline-1]->id; $result = $db->query($sql); if ($result) { $total = 0; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print "\n"; $var=true; $objp = $db->fetch_object($result); $var=!$var; if ($_GET["action"] != 'editline' || $_GET["rowid"] != $objp->rowid) { print ''; // Libelle if ($objp->fk_product > 0) { print ''; } else { print "\n"; } // TVA print ''; // Prix print '\n"; // Quantite print ''; // Remise if ($objp->remise_percent > 0) { print '\n"; } else { print ''; } // Icon update et delete (statut contrat 0=brouillon,1=valid�,2=ferm�) print ''; print "\n"; // Dates de en service prevues et effectives if ($objp->subprice >= 0) { print ''; print ''; print ''; } } // Ligne en mode update else { print ""; print ''; print ''; // Ligne carac print ""; print ''; print ''; print ''; print ''; print ''; print ''; // Ligne dates prevues print ""; print ''; print ''; print "\n"; } $db->free($result); } else { dolibarr_print_error($db); } if ($contrat->statut > 0) { print ''; print ''; print "\n"; } print "
'.$langs->trans("Service").''.$langs->trans("VAT").''.$langs->trans("PriceUHT").''.$langs->trans("Qty").''.$langs->trans("ReductionShort").' 
'; print ''; print img_object($langs->trans("ShowService"),"service").' '.$objp->ref.''; print $objp->label?' - '.$objp->label:''; if ($objp->description) print '
'.nl2br($objp->description); print '
".nl2br($objp->description)."'.vatrate($objp->tva_tx,'%',$objp->info_bits).''.price($objp->subprice)."'.$objp->qty.''.$objp->remise_percent."% '; if ($contrat->statut != 2 && $user->rights->contrat->creer) { print ''; print img_edit(); print ''; } else { print ' '; } if ( ($contrat->statut == 0 || ($contrat->statut == 1 && $conf->global->CONTRAT_EDITWHENVALIDATED)) && $user->rights->contrat->creer) { print ' '; print ''; print img_delete(); print ''; } print '
'; // 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->services->inactifs->warning_delay) { print " ".img_warning($langs->trans("Late")); } } else print $langs->trans("Unknown"); print '
'; if ($objp->fk_product) { print ''; print img_object($langs->trans("ShowService"),"service").' '.$objp->ref.''; print $objp->label?' - '.$objp->label:''; print '
'; } else { print $objp->label?$objp->label.'
':''; } print '
'; print $form->select_tva("eltva_tx",$objp->tva_tx,$mysoc,$contrat->societe); print '%'; print '
'; print '
'; print $langs->trans("DateStartPlanned").' '; $form->select_date($objp->date_debut,"date_start_update",0,0,($objp->date_debut>0?0:1),"update"); print '   '.$langs->trans("DateEndPlanned").' '; $form->select_date($objp->date_fin,"date_end_update",0,0,($objp->date_fin>0?0:1),"update"); print '

"; /* * Confirmation de la validation activation */ if ($_REQUEST["action"] == 'active' && ! $_REQUEST["cancel"] && $user->rights->contrat->activer && $contrat->lignes[$cursorline-1]->id == $_GET["ligne"]) { //print '
'; $dateactstart = dolibarr_mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); $dateactend = dolibarr_mktime(12, 0 , 0, $_POST["endmonth"], $_POST["endday"], $_POST["endyear"]); $html->form_confirm($_SERVER["PHP_SELF"]."?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 ($_REQUEST["action"] == 'closeline' && ! $_REQUEST["cancel"] && $user->rights->contrat->activer && $contrat->lignes[$cursorline-1]->id == $_GET["ligne"]) { //print '
'; $dateactstart = dolibarr_mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); $dateactend = dolibarr_mktime(12, 0 , 0, $_POST["endmonth"], $_POST["endday"], $_POST["endyear"]); $html->form_confirm($_SERVER["PHP_SELF"]."?id=".$contrat->id."&ligne=".$_GET["ligne"]."&date=".$dateactstart."&dateend=".$dateactend,$langs->trans("CloseService"),$langs->trans("ConfirmCloseService",strftime("%A %d %B %Y", $dateactend)),"confirm_closeline"); print '
'; } // Area with activation info if ($contrat->statut > 0) { print ''; print ''; print ''; print ''; print "\n"; print ''; print ''; // Statut print ''; print ''; print '
'.$langs->trans("ServiceStatus").': '.$contrat->lignes[$cursorline-1]->getLibStatut(4).''; if ($user->societe_id == 0) { if ($contrat->statut > 0 && $_REQUEST["action"] != 'activateline' && $_REQUEST["action"] != 'unactivateline') { $action='activateline'; if ($objp->statut == 4) $action='unactivateline'; print ''; print img_edit(); print ''; } } print '
'; // Si pas encore active 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 active 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 desactive 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 ' '; print '
'; } if ($user->rights->contrat->activer && $_REQUEST["action"] == 'activateline' && $contrat->lignes[$cursorline-1]->id == $_GET["ligne"]) { /** * Activer la ligne de contrat */ print '
'; print ''; //print ''; // Definie date debut et fin par defaut $dateactstart = $objp->date_debut; if ($_POST["remonth"]) $dateactstart = dolibarr_mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); elseif (! $dateactstart) $dateactstart = time(); $dateactend = $objp->date_fin; if ($_POST["endmonth"]) $dateactend = dolibarr_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("Status").'
'.$langs->trans("DateServiceActivate").''; print $html->select_date($dateactstart,'','','','',"active"); print ''.$langs->trans("DateEndPlanned").''; print $html->select_date($dateactend,"end",'','','',"active"); print ''; print '
'; print ''; print '
'.$langs->trans("Comment").'
'; print '
'; } if ($user->rights->contrat->activer && $_REQUEST["action"] == 'unactivateline' && $contrat->lignes[$cursorline-1]->id == $_GET["ligne"]) { /** * Desactiver la ligne de contrat */ print '
'; print ''; // Definie date debut et fin par defaut $dateactstart = $objp->date_debut_reelle; if ($_POST["remonth"]) $dateactstart = dolibarr_mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); elseif (! $dateactstart) $dateactstart = time(); $dateactend = $objp->date_fin_reelle; if ($_POST["endmonth"]) $dateactend = dolibarr_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); } } $now=mktime(); if ($dateactend > $now) $dateactend=$now; print ''; print ''; print ''; print '
'; if ($objp->statut >= 4) { if ($objp->statut == 4) { print $langs->trans("DateEndReal").' '; $form->select_date($dateactend,"end",0,0,($objp->date_fin_reelle>0?0:1),"closeline"); } } print '
'; print ''; print '
'.$langs->trans("Comment").'
'; print '
'; } print '
 
'; /* * Ajouter une ligne produit/service */ if ($user->rights->contrat->creer && ($contrat->statut == 0 || ($contrat->statut == 1 && $conf->global->CONTRAT_EDITWHENVALIDATED)) ) { print '
'; print ''; // Array with (n*2)+1 lines print ""; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print "\n"; $var=false; // Service sur produit predefini print ''; print ''; print ''; print ''; print ""; print ''; print ''; print ''; print ''; print ''."\n"; print ""; print ''; print ''; print ''; $var=!$var; // Service libre print ''; print ''; print ''; print ''; print ""; print ''; print ''; print ''; print ''; print ''; print ''; print ''."\n"; print ""; print ''; print ''; print ''; print '
'.$langs->trans("Service").''.$langs->trans("VAT").''.$langs->trans("PriceUHT").''.$langs->trans("Qty").''.$langs->trans("ReductionShort").'  
'; // multiprix if($conf->global->PRODUIT_MULTIPRICES == 1) $form->select_produits('','p_idprod','',$conf->produit->limit_size,$contrat->societe->price_level); else $form->select_produits('','p_idprod','',$conf->produit->limit_size); if (! $conf->global->PRODUIT_USE_SEARCH_TO_SELECT) print '
'; print ''; print '
%
'; print $langs->trans("DateStartPlanned").' '; $form->select_date('',"date_start",0,0,1,"addligne"); print '   '.$langs->trans("DateEndPlanned").' '; $form->select_date('',"date_end",0,0,1,"addligne"); print '
'; $form->select_tva("tva_tx",$conf->defaulttx,$mysoc,$contrat->societe); print '%
'; print $langs->trans("DateStartPlanned").' '; $form->select_date('',"date_start_sl",0,0,1,"addligne_sl"); print '   '.$langs->trans("DateEndPlanned").' '; $form->select_date('',"date_end_sl",0,0,1,"addligne_sl"); print '
'; } //print ''; //print ''; print ''; /************************************************************* * Boutons Actions *************************************************************/ if ($user->societe_id == 0) { print '
'; if ($contrat->statut == 0 && $nbofservices) { if ($user->rights->contrat->creer) print ''.$langs->trans("Validate").''; else print ''.$langs->trans("Validate").''; } if ($contrat->statut > 0) { $langs->load("bills"); if ($user->rights->facture->creer) print ''.$langs->trans("CreateBill").''; else print ''.$langs->trans("CreateBill").''; } if ($contrat->nbofservicesclosed < $nbofservices) { //if (! $numactive) //{ print ''.$langs->trans("CloseAllContracts").''; //} //else //{ // print ''.$langs->trans("Close").''; //} } // On peut supprimer entite si // - Droit de creer + mode brouillon (erreur creation) // - Droit de supprimer if (($user->rights->contrat->creer && $contrat->statut == 0) || $user->rights->contrat->supprimer) { print ''.$langs->trans("Delete").''; } print "
"; print '
'; } } } $db->close(); llxFooter('$Date$ - $Revision$'); ?>