* Copyright (C) 2004-2012 Laurent Destailleur * Copyright (C) 2005-2012 Regis Houssin * Copyright (C) 2006 Andre Cianfarani * Copyright (C) 2010-2012 Juanjo Menent * * 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, see . */ /** * \file htdocs/contrat/fiche.php * \ingroup contrat * \brief Page of a contract */ require ("../main.inc.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/date.lib.php"); require_once(DOL_DOCUMENT_ROOT."/core/lib/price.lib.php"); require_once(DOL_DOCUMENT_ROOT.'/core/lib/contract.lib.php'); require_once(DOL_DOCUMENT_ROOT."/contrat/class/contrat.class.php"); require_once(DOL_DOCUMENT_ROOT."/core/modules/contract/modules_contract.php"); if ($conf->produit->enabled) require_once(DOL_DOCUMENT_ROOT."/product/class/product.class.php"); if ($conf->projet->enabled) require_once(DOL_DOCUMENT_ROOT."/projet/class/project.class.php"); if ($conf->propal->enabled) require_once(DOL_DOCUMENT_ROOT."/comm/propal/class/propal.class.php"); if ($conf->projet->enabled) require_once(DOL_DOCUMENT_ROOT."/core/lib/project.lib.php"); $langs->load("contracts"); $langs->load("orders"); $langs->load("companies"); $langs->load("bills"); $langs->load("products"); $action=GETPOST('action','alpha'); $confirm=GETPOST('confirm','alpha'); $socid = GETPOST('socid','int'); $id = GETPOST('id','int'); $ref=GETPOST('ref','alpha'); // Security check if ($user->societe_id) $socid=$user->societe_id; $result=restrictedArea($user,'contrat',$id); $usehm=$conf->global->MAIN_USE_HOURMIN_IN_DATE_RANGE; $object = new Contrat($db); /* * Actions */ if ($action == 'confirm_active' && $confirm == 'yes' && $user->rights->contrat->activer) { $object->fetch($id); $result = $object->active_line($user, $_GET["ligne"], $_GET["date"], $_GET["dateend"], $_GET["comment"]); if ($result > 0) { Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); exit; } else { $mesg=$object->error; } } else if ($action == 'confirm_closeline' && $confirm == 'yes' && $user->rights->contrat->activer) { $object->fetch($id); $result = $object->close_line($user, $_GET["ligne"], $_GET["dateend"], urldecode($_GET["comment"])); if ($result > 0) { Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); exit; } else { $mesg=$object->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=dol_mktime($_POST["date_starthour"], $_POST["date_startmin"], 0, $_POST["date_startmonth"], $_POST["date_startday"], $_POST["date_startyear"]); } if ($_POST["date_endmonth"] && $_POST["date_endday"] && $_POST["date_endyear"]) { $date_end=dol_mktime($_POST["date_endhour"], $_POST["date_endmin"], 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=dol_mktime($_POST["date_start_slhour"], $_POST["date_start_slmin"], 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=dol_mktime($_POST["date_end_slhour"], $_POST["date_end_slmin"], 0, $_POST["date_end_slmonth"], $_POST["date_end_slday"], $_POST["date_end_slyear"]); } } // Param dates $date_contrat=''; $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=dol_mktime($_POST["date_start_updatehour"], $_POST["date_start_updatemin"], 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=dol_mktime($_POST["date_end_updatehour"], $_POST["date_end_updatemin"], 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=dol_mktime($_POST["date_start_real_updatehour"], $_POST["date_start_real_updatemin"], 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=dol_mktime($_POST["date_end_real_updatehour"], $_POST["date_end_real_updatemin"], 0, $_POST["date_end_real_updatemonth"], $_POST["date_end_real_updateday"], $_POST["date_end_real_updateyear"]); } if ($_POST["remonth"] && $_POST["reday"] && $_POST["reyear"]) { $datecontrat = dol_mktime($_POST["rehour"], $_POST["remin"], 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); } if ($action == 'add' && $user->rights->contrat->creer) { $object->socid = $socid; $object->date_contrat = $datecontrat; $object->commercial_suivi_id = $_POST["commercial_suivi_id"]; $object->commercial_signature_id = $_POST["commercial_signature_id"]; $object->note = trim($_POST["note"]); $object->fk_project = trim($_POST["projectid"]); $object->remise_percent = trim($_POST["remise_percent"]); $object->ref = trim($_POST["ref"]); // Check if (empty($datecontrat)) { $error++; $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Date")).'
'; $action='create'; } if (! $error) { $result = $object->create($user,$langs,$conf); if ($result > 0) { Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); exit; } else { $mesg='
'.$object->error.'
'; } $action='create'; } } else if ($action == 'classin' && $user->rights->contrat->creer) { $object->fetch($id); $object->setProject($_POST["projectid"]); } else if ($action == 'addline' && $user->rights->contrat->creer) { if ($_POST["pqty"] && (($_POST["pu"] != '' && $_POST["desc"]) || $_POST["idprod"])) { $ret=$object->fetch($id); if ($ret < 0) { dol_print_error($db,$object->error); exit; } $ret=$object->fetch_thirdparty(); $date_start=''; $date_end=''; // Si ajout champ produit libre if ($_POST['mode'] == 'libre') { if ($_POST["date_start_slmonth"] && $_POST["date_start_slday"] && $_POST["date_start_slyear"]) { $date_start=dol_mktime($_POST["date_start_slhour"], $_POST["date_start_slmin"], 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=dol_mktime($_POST["date_end_slhour"], $_POST["date_end_slmin"], 0, $_POST["date_end_slmonth"], $_POST["date_end_slday"], $_POST["date_end_slyear"]); } } // Si ajout champ produit predefini if ($_POST['mode'] == 'predefined') { if ($_POST["date_startmonth"] && $_POST["date_startday"] && $_POST["date_startyear"]) { $date_start=dol_mktime($_POST["date_starthour"], $_POST["date_startmin"], 0, $_POST["date_startmonth"], $_POST["date_startday"], $_POST["date_startyear"]); } if ($_POST["date_endmonth"] && $_POST["date_endday"] && $_POST["date_endyear"]) { $date_end=dol_mktime($_POST["date_endhour"], $_POST["date_endmin"], 0, $_POST["date_endmonth"], $_POST["date_endday"], $_POST["date_endyear"]); } } // 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['idprod']) { $prod = new Product($db); $prod->fetch($_POST['idprod']); $tva_tx = get_default_tva($mysoc,$object->thirdparty,$prod->id); $tva_npr = get_default_npr($mysoc,$object->thirdparty,$prod->id); // On defini prix unitaire if ($conf->global->PRODUIT_MULTIPRICES && $object->thirdparty->price_level) { $pu_ht = $prod->multiprices[$object->thirdparty->price_level]; $pu_ttc = $prod->multiprices_ttc[$object->thirdparty->price_level]; $price_min = $prod->multiprices_min[$object->thirdparty->price_level]; $price_base_type = $prod->multiprices_base_type[$object->thirdparty->price_level]; } else { $pu_ht = $prod->price; $pu_ttc = $prod->price_ttc; $price_min = $prod->price_min; $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']; $price_base_type = 'HT'; $tva_tx=str_replace('*','',$_POST['tva_tx']); $tva_npr=preg_match('/\*/',$_POST['tva_tx'])?1:0; $desc=$_POST['desc']; } $localtax1_tx=get_localtax($tva_tx,1,$object->societe); $localtax2_tx=get_localtax($tva_tx,2,$object->societe); $info_bits=0; if ($tva_npr) $info_bits |= 0x01; if($price_min && (price2num($pu_ht)*(1-price2num($_POST['remise_percent'])/100) < price2num($price_min))) { $object->error = $langs->trans("CantBeLessThanMinPrice",price2num($price_min,'MU').' '.$langs->trans("Currency".$conf->currency)); $result = -1 ; } else { // Insert line $result = $object->addline( $desc, $pu_ht, $_POST["pqty"], $tva_tx, $localtax1_tx, $localtax2_tx, $_POST["idprod"], $_POST["premise"], $date_start, $date_end, $price_base_type, $pu_ttc, $info_bits ); } if ($result > 0) { /* // Define output language $outputlangs = $langs; $newlang=''; if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; if (! empty($newlang)) { $outputlangs = new Translate("",$conf); $outputlangs->setDefaultLang($newlang); } if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) { $ret=$object->fetch($id); // Reload to get new records contrat_pdf_create($db, $object->id, $object->modelpdf, $outputlangs); } */ } else { $mesg='
'.$object->error.'
'; } } } else if ($action == 'updateligne' && $user->rights->contrat->creer && ! $_POST["cancel"]) { $ret=$object->fetch($id); if ($ret < 0) { dol_print_error($db,$object->error); exit; } $object->fetch_thirdparty(); $objectline = new ContratLigne($db); if ($objectline->fetch($_POST["elrowid"])) { $db->begin(); if ($date_start_real_update == '') $date_start_real_update=$objectline->date_ouverture; if ($date_end_real_update == '') $date_end_real_update=$objectline->date_cloture; $localtax1_tx=get_localtax($_POST["eltva_tx"],1,$object->thirdparty); $localtax2_tx=get_localtax($_POST["eltva_tx"],2,$object->thirdparty); $objectline->description=$_POST["eldesc"]; $objectline->price_ht=$_POST["elprice"]; $objectline->subprice=$_POST["elprice"]; $objectline->qty=$_POST["elqty"]; $objectline->remise_percent=$_POST["elremise_percent"]; $objectline->tva_tx=$_POST["eltva_tx"]; $objectline->localtax1_tx=$localtax1_tx; $objectline->localtax2_tx=$localtax2_tx; $objectline->date_ouverture_prevue=$date_start_update; $objectline->date_ouverture=$date_start_real_update; $objectline->date_fin_validite=$date_end_update; $objectline->date_cloture=$date_end_real_update; $objectline->fk_user_cloture=$user->id; // TODO verifier price_min si fk_product et multiprix $result=$objectline->update($user); if ($result > 0) { $db->commit(); } else { dol_print_error($db,'Failed to update contrat_det'); $db->rollback(); } } else { dol_print_error($db); } } else if ($action == 'confirm_deleteline' && $confirm == 'yes' && $user->rights->contrat->creer) { $object->fetch($id); $result = $object->deleteline($_GET["lineid"],$user); if ($result >= 0) { Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); exit; } else { $mesg=$object->error; } } else if ($action == 'confirm_valid' && $confirm == 'yes' && $user->rights->contrat->creer) { $object->fetch($id); $result = $object->validate($user,$langs,$conf); } // Close all lines else if ($action == 'confirm_close' && $confirm == 'yes' && $user->rights->contrat->creer) { $object->fetch($id); $result = $object->cloture($user,$langs,$conf); } else if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->contrat->supprimer) { $object->fetch($id); $result=$object->delete($user,$langs,$conf); if ($result >= 0) { Header("Location: index.php"); return; } else { $mesg='
'.$object->error.'
'; } } else if ($action == 'confirm_move' && $confirm == 'yes' && $user->rights->contrat->creer) { if ($_POST['newcid'] > 0) { $contractline = new ContratLigne($db); $result=$contractline->fetch($_GET["lineid"]); $contractline->fk_contrat = $_POST["newcid"]; $result=$contractline->update($user,1); if ($result >= 0) { Header("Location: ".$_SERVER['PHP_SELF']."?id=".$id); return; } else { $mesg='
'.$object->error.'
'; } } else { $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->transnoentities("RefNewContract")).'
'; } } else if ($action == 'setnote_public' && $user->rights->contrat->creer) { $result=$object->update_note_public(dol_html_entity_decode(GETPOST('note_public'), ENT_QUOTES)); if ($result < 0) dol_print_error($db,$object->error); } else if ($action == 'setnote' && $user->rights->contrat->creer) { $result=$object->update_note(dol_html_entity_decode(GETPOST('note'), ENT_QUOTES)); if ($result < 0) dol_print_error($db,$object->error); } if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) { if ($action == 'addcontact' && $user->rights->contrat->creer) { $result = $object->fetch($id); if ($result > 0 && $id > 0) { $contactid = (GETPOST('userid') ? GETPOST('userid') : GETPOST('contactid')); $result = $result = $object->add_contact($contactid, $_POST["type"], $_POST["source"]); } if ($result >= 0) { Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); exit; } else { if ($object->error == 'DB_ERROR_RECORD_ALREADY_EXISTS') { $langs->load("errors"); $mesg = '
'.$langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType").'
'; } else { $mesg = '
'.$object->error.'
'; } } } // bascule du statut d'un contact else if ($action == 'swapstatut' && $user->rights->contrat->creer) { if ($object->fetch($id)) { $result=$object->swapContactStatus(GETPOST('ligne')); } else { dol_print_error($db); } } // Efface un contact else if ($action == 'deletecontact' && $user->rights->contrat->creer) { $object->fetch($id); $result = $object->delete_contact($_GET["lineid"]); if ($result >= 0) { Header("Location: ".$_SERVER['PHP_SELF']."?id=".$object->id); exit; } else { dol_print_error($db); } } } /* * View */ llxHeader('',$langs->trans("ContractCard"),"Contrat"); $form = new Form($db); $objectlignestatic=new ContratLigne($db); /********************************************************************* * * Mode creation * *********************************************************************/ if ($action == 'create') { dol_fiche_head($head, $a, $langs->trans("AddContract"), 0, 'contract'); dol_htmloutput_errors($mesg,''); $soc = new Societe($db); $soc->fetch($socid); $object->date_contrat = dol_now(); if ($contratid) $result=$object->fetch($contratid); $numct = $object->getNextNumRef($soc); print '
'; 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 "
'.$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->currency)); else print $langs->trans("CompanyHasNoAbsoluteDiscount"); print '.'; print '
'.$langs->trans("TypeContact_contrat_internal_SALESREPFOLL").''; print $form->select_users(GETPOST("commercial_suivi_id")?GETPOST("commercial_suivi_id"):$user->id,'commercial_suivi_id',1,''); print '
'.$langs->trans("TypeContact_contrat_internal_SALESREPSIGN").''; print $form->select_users(GETPOST("commercial_signature_id")?GETPOST("commercial_signature_id"):$user->id,'commercial_signature_id',1,''); print '
'.$langs->trans("Date").''; $form->select_date($datecontrat,'',0,0,'',"contrat"); print "
'.$langs->trans("Project").''; select_projects($soc->id,GETPOST("projectid"),"projectid"); print "
'.$langs->trans("NotePublic").''; print '
'.$langs->trans("NotePrivate").''; print '
\n"; print '
'; print "
\n"; dol_fiche_end(); } else /* *************************************************************************** */ /* */ /* Mode vue et edition */ /* */ /* *************************************************************************** */ { $now=dol_now(); if ($id > 0 || ! empty($ref)) { $result=$object->fetch($id,$ref); if ($result > 0) { $result=$object->fetch_lines(); } if ($result < 0) { dol_print_error($db,$object->error); exit; } dol_htmloutput_errors($mesg,''); $object->fetch_thirdparty(); $nbofservices=count($object->lines); $author = new User($db); $author->fetch($object->user_author_id); $commercial_signature = new User($db); $commercial_signature->fetch($object->commercial_signature_id); $commercial_suivi = new User($db); $commercial_suivi->fetch($object->commercial_suivi_id); $head = contract_prepare_head($object); $hselected = 0; dol_fiche_head($head, $hselected, $langs->trans("Contract"), 0, 'contract'); /* * Confirmation de la suppression du contrat */ if ($action == 'delete') { $ret=$form->form_confirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("DeleteAContract"),$langs->trans("ConfirmDeleteAContract"),"confirm_delete",'',0,1); if ($ret == 'html') print '
'; } /* * Confirmation de la validation */ if ($action == 'valid') { //$numfa = contrat_get_num($soc); $ret=$form->form_confirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("ValidateAContract"),$langs->trans("ConfirmValidateContract"),"confirm_valid",'',0,1); if ($ret == 'html') print '
'; } /* * Confirmation de la fermeture */ if ($action == 'close') { $ret=$form->form_confirm($_SERVER['PHP_SELF']."?id=".$object->id,$langs->trans("CloseAContract"),$langs->trans("ConfirmCloseContract"),"confirm_close",'',0,1); if ($ret == 'html') print '
'; } /* * Contrat */ if ($object->brouillon && $user->rights->contrat->creer) { print '
'; 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 $form->showrefnav($object,'ref','',1,'ref','ref',''); print "
".$langs->trans("Customer")."'.$object->thirdparty->getNomUrl(1).'
'.$langs->trans('Discount').''; if ($object->thirdparty->remise_client) print $langs->trans("CompanyHasRelativeDiscount",$object->thirdparty->remise_client); else print $langs->trans("CompanyHasNoRelativeDiscount"); $absolute_discount=$object->thirdparty->getAvailableDiscounts(); print '. '; if ($absolute_discount) print $langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->trans("Currency".$conf->currency)); else print $langs->trans("CompanyHasNoAbsoluteDiscount"); print '.'; print '
'.$langs->trans("Status").''; if ($object->statut==0) print $object->getLibStatut(2); else print $object->getLibStatut(4); print "
'.$langs->trans("Date").''.dol_print_date($object->date_contrat,"dayhour")."
'; print ''; if ($action != "classify" && $user->rights->projet->creer) print ''; print '
'; print $langs->trans("Project"); print 'id.'">'.img_edit($langs->trans("SetProject")).'
'; print '
'; if ($action == "classify") { $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id,$object->socid,$object->fk_project,"projectid"); } else { $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id,$object->socid,$object->fk_project,"none"); } print "
"; if ($object->brouillon == 1 && $user->rights->contrat->creer) { print '
'; } echo '
'; if (! empty($conf->global->MAIN_DISABLE_CONTACTS_TAB)) { require_once(DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php'); $formcompany= new FormCompany($db); $blocname = 'contacts'; $title = $langs->trans('ContactsAddresses'); include(DOL_DOCUMENT_ROOT.'/core/tpl/bloc_showhide.tpl.php'); } if (! empty($conf->global->MAIN_DISABLE_NOTES_TAB)) { $blocname = 'notes'; $title = $langs->trans('Notes'); include(DOL_DOCUMENT_ROOT.'/core/tpl/bloc_showhide.tpl.php'); } $servicepos=(isset($_REQUEST["servicepos"])?$_REQUEST["servicepos"]:1); $colorb='666666'; $arrayothercontracts=$object->getListOfContracts('others'); /* * Lines of contracts */ $productstatic=new Product($db); // TODO move css and DAO // Title line for service 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.rowid, cd.statut, cd.label as label_det, cd.fk_product, cd.description, cd.price_ht, cd.qty,"; $sql.= " cd.tva_tx, cd.remise_percent, cd.info_bits, cd.subprice,"; $sql.= " cd.date_ouverture_prevue as date_debut, cd.date_ouverture as date_debut_reelle,"; $sql.= " cd.date_fin_validite as date_fin, cd.date_cloture as date_fin_reelle,"; $sql.= " cd.commentaire as comment,"; $sql.= " p.rowid as pid, p.ref as pref, p.label as label, p.fk_product_type as ptype"; $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 = ".$object->lines[$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 ($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 move, update et delete (statut contrat 0=brouillon,1=valide,2=ferme) 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 ''; print ''; // Ligne carac print ""; print ''; print ''; print ''; print ''; print ''; print ''; // Ligne dates prevues print ""; print ''; print ''; print "\n"; } $db->free($result); } else { dol_print_error($db); } if ($object->statut > 0) { print ''; print ''; print "\n"; } print "
'.$langs->trans("Service").''.$langs->trans("VAT").''.$langs->trans("PriceUHT").''.$langs->trans("Qty").''.$langs->trans("ReductionShort").' 
'; $productstatic->id=$objp->fk_product; $productstatic->type=$objp->ptype; $productstatic->ref=$objp->pref; print $productstatic->getNomUrl(1,'',20); print $objp->label?' - '.dol_trunc($objp->label,16):''; if ($objp->description) print '
'.dol_nl2br($objp->description); print '
".nl2br($objp->description)."'.vatrate($objp->tva_tx,'%',$objp->info_bits).''.price($objp->subprice)."'.$objp->qty.''.$objp->remise_percent."% '; if ($user->rights->contrat->creer && count($arrayothercontracts) && ($object->statut >= 0)) { print ''; print img_picto($langs->trans("MoveToAnotherContract"),'uparrow'); print ''; } else { print ' '; } if ($user->rights->contrat->creer && ($object->statut >= 0)) { print ''; print img_edit(); print ''; } else { print ' '; } if ( $user->rights->contrat->creer && ($object->statut >= 0)) { print ' '; print ''; print img_delete(); print ''; } print '
'; // Date planned print $langs->trans("DateStartPlanned").': '; if ($objp->date_debut) { print dol_print_date($db->jdate($objp->date_debut)); // Warning si date prevu passee et pas en service if ($objp->statut == 0 && $db->jdate($objp->date_debut) < ($now - $conf->contrat->services->inactifs->warning_delay)) { print " ".img_warning($langs->trans("Late")); } } else print $langs->trans("Unknown"); print '  -  '; print $langs->trans("DateEndPlanned").': '; if ($objp->date_fin) { print dol_print_date($db->jdate($objp->date_fin)); if ($objp->statut == 4 && $db->jdate($objp->date_fin) < ($now - $conf->contrat->services->expires->warning_delay)) { print " ".img_warning($langs->trans("Late")); } } else print $langs->trans("Unknown"); print '
'; if ($objp->fk_product) { $productstatic->id=$objp->fk_product; $productstatic->type=$objp->ptype; $productstatic->ref=$objp->pref; print $productstatic->getNomUrl(1,'',20); print $objp->label?' - '.dol_trunc($objp->label,16):''; print '
'; } else { print $objp->label?$objp->label.'
':''; } print '
'; print $form->load_tva("eltva_tx",$objp->tva_tx,$mysoc,$object->thirdparty); print '%'; print '
'; print '
'; print $langs->trans("DateStartPlanned").' '; $form->select_date($db->jdate($objp->date_debut),"date_start_update",$usehm,$usehm,($db->jdate($objp->date_debut)>0?0:1),"update"); print '
'.$langs->trans("DateEndPlanned").' '; $form->select_date($db->jdate($objp->date_fin),"date_end_update",$usehm,$usehm,($db->jdate($objp->date_fin)>0?0:1),"update"); print '

"; /* * Confirmation to delete service line of contract */ if ($action == 'deleteline' && ! $_REQUEST["cancel"] && $user->rights->contrat->creer && $object->lines[$cursorline-1]->id == $_GET["rowid"]) { $ret=$form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&lineid=".$_GET["rowid"],$langs->trans("DeleteContractLine"),$langs->trans("ConfirmDeleteContractLine"),"confirm_deleteline",'',0,1); if ($ret == 'html') print '
'; } /* * Confirmation to move service toward another contract */ if ($action == 'move' && ! $_REQUEST["cancel"] && $user->rights->contrat->creer && $object->lines[$cursorline-1]->id == $_GET["rowid"]) { $arraycontractid=array(); foreach($arrayothercontracts as $contractcursor) { $arraycontractid[$contractcursor->id]=$contractcursor->ref; } //var_dump($arraycontractid); // Cree un tableau formulaire $formquestion=array( 'text' => $langs->trans("ConfirmMoveToAnotherContractQuestion"), array('type' => 'select', 'name' => 'newcid', 'values' => $arraycontractid)); $form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&lineid=".$_GET["rowid"],$langs->trans("MoveToAnotherContract"),$langs->trans("ConfirmMoveToAnotherContract"),"confirm_move",$formquestion); print '
'; } /* * Confirmation de la validation activation */ if ($action == 'active' && ! $_REQUEST["cancel"] && $user->rights->contrat->activer && $object->lines[$cursorline-1]->id == $_GET["ligne"]) { $dateactstart = dol_mktime(12, 0, 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); $dateactend = dol_mktime(12, 0, 0, $_POST["endmonth"], $_POST["endday"], $_POST["endyear"]); $comment = $_POST["comment"]; $form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&ligne=".$_GET["ligne"]."&date=".$dateactstart."&dateend=".$dateactend."&comment=".urlencode($comment),$langs->trans("ActivateService"),$langs->trans("ConfirmActivateService",dol_print_date($dateactstart,"%A %d %B %Y")),"confirm_active", '', 0, 1); print '
'; } /* * Confirmation de la validation fermeture */ if ($action == 'closeline' && ! $_REQUEST["cancel"] && $user->rights->contrat->activer && $object->lines[$cursorline-1]->id == $_GET["ligne"]) { $dateactstart = dol_mktime(12, 0, 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); $dateactend = dol_mktime(12, 0, 0, $_POST["endmonth"], $_POST["endday"], $_POST["endyear"]); $comment = $_POST["comment"]; $form->form_confirm($_SERVER["PHP_SELF"]."?id=".$object->id."&ligne=".$_GET["ligne"]."&date=".$dateactstart."&dateend=".$dateactend."&comment=".urlencode($comment), $langs->trans("CloseService"), $langs->trans("ConfirmCloseService",dol_print_date($dateactend,"%A %d %B %Y")), "confirm_closeline", '', 0, 1); print '
'; } // Area with status and activation info of line if ($object->statut > 0) { print ''; print ''; print ''; print ''; print "\n"; print ''; print ''; print ''; print ''; print '
'.$langs->trans("ServiceStatus").': '.$object->lines[$cursorline-1]->getLibStatut(4).''; if ($user->societe_id == 0) { if ($object->statut > 0 && $action != 'activateline' && $action != 'unactivateline') { $tmpaction='activateline'; if ($objp->statut == 4) $tmpaction='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 dol_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 dol_print_date($objp->date_debut_reelle); } // Si desactive if ($objp->date_debut_reelle && $objp->date_fin_reelle) { print $langs->trans("DateStartReal").': '; print dol_print_date($objp->date_debut_reelle); print '  -  '; print $langs->trans("DateEndReal").': '; print dol_print_date($objp->date_fin_reelle); } if (! empty($objp->comment)) print "
".$objp->comment; print '
 
'; } if ($user->rights->contrat->activer && $action == 'activateline' && $object->lines[$cursorline-1]->id == $_GET["ligne"]) { /** * Activer la ligne de contrat */ print '
'; print ''; print ''; //print ''; // Definie date debut et fin par defaut $dateactstart = $objp->date_debut; if ($_POST["remonth"]) $dateactstart = dol_mktime(12, 0, 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); elseif (! $dateactstart) $dateactstart = time(); $dateactend = $objp->date_fin; if ($_POST["endmonth"]) $dateactend = dol_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 = dol_time_plus_duree(time(), $product->duration_value, $product->duration_unit); } } print ''; print ''; print ''; print ''; print ''; print '
'.$langs->trans("Status").'
'.$langs->trans("DateServiceActivate").''; print $form->select_date($dateactstart,'',$usehm,$usehm,'',"active"); print ''.$langs->trans("DateEndPlanned").''; print $form->select_date($dateactend,"end",$usehm,$usehm,'',"active"); print ''; print '
'; print ''; print '
'.$langs->trans("Comment").'
'; print '
'; } if ($user->rights->contrat->activer && $action == 'unactivateline' && $object->lines[$cursorline-1]->id == $_GET["ligne"]) { /** * Desactiver la ligne de contrat */ print '
'; print ''; print ''; // Definie date debut et fin par defaut $dateactstart = $objp->date_debut_reelle; if ($_POST["remonth"]) $dateactstart = dol_mktime(12, 0, 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); elseif (! $dateactstart) $dateactstart = time(); $dateactend = $objp->date_fin_reelle; if ($_POST["endmonth"]) $dateactend = dol_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 = dol_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",$usehm,$usehm,($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 && ($object->statut >= 0)) { 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 ''; print ''."\n"; print ""; print ''; print ''; print ''; $var=!$var; // Service libre print ''; 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) $form->select_produits('','idprod',1,$conf->product->limit_size,$object->thirdparty->price_level); else $form->select_produits('','idprod',1,$conf->product->limit_size); print ''; print '%
'; print $langs->trans("DateStartPlanned").' '; $form->select_date('',"date_start",$usehm,$usehm,1,"addline"); print '   '.$langs->trans("DateEndPlanned").' '; $form->select_date('',"date_end",$usehm,$usehm,1,"addline"); print '
'; print $form->load_tva("tva_tx",-1,$mysoc,$object->thirdparty); print '%
'; print $langs->trans("DateStartPlanned").' '; $form->select_date('',"date_start_sl",$usehm,$usehm,1,"addline_sl"); print '   '.$langs->trans("DateEndPlanned").' '; $form->select_date('',"date_end_sl",$usehm,$usehm,1,"addline_sl"); print '
'; } //print ''; //print ''; print ''; /************************************************************* * Boutons Actions *************************************************************/ if ($user->societe_id == 0) { print '
'; if ($object->statut == 0 && $nbofservices) { if ($user->rights->contrat->creer) print ''.$langs->trans("Validate").''; else print ''.$langs->trans("Validate").''; } if ($conf->facture->enabled && $object->statut > 0) { $langs->load("bills"); if ($user->rights->facture->creer) print ''.$langs->trans("CreateBill").''; else print ''.$langs->trans("CreateBill").''; } if ($object->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 && $object->statut == 0) || $user->rights->contrat->supprimer) { print ''.$langs->trans("Delete").''; } print "
"; print '
'; } print '
'; /* * Linked object block */ $somethingshown=$object->showLinkedObjectBlock(); print ''; print '
'; } } llxFooter(); $db->close(); ?>