[ Index ] |
|
Code source de Dolibarr 2.0.1 |
1 <?php 2 /* Copyright (C) 2003-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org> 3 * Copyright (C) 2004-2005 Laurent Destailleur <eldy@users.sourceforge.net> 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 18 * 19 * $Id: fiche.php,v 1.71 2005/11/23 00:43:19 eldy Exp $ 20 * $Source: /cvsroot/dolibarr/dolibarr/htdocs/contrat/fiche.php,v $ 21 */ 22 23 /** 24 \file htdocs/contrat/fiche.php 25 \ingroup contrat 26 \brief Fiche contrat 27 \version $Revision: 1.71 $ 28 */ 29 30 require ("./pre.inc.php"); 31 if ($conf->projet->enabled) require_once(DOL_DOCUMENT_ROOT."/project.class.php"); 32 if ($conf->propal->enabled) require_once (DOL_DOCUMENT_ROOT."/propal.class.php"); 33 if ($conf->contrat->enabled) require_once (DOL_DOCUMENT_ROOT."/contrat/contrat.class.php"); 34 35 $langs->load("contracts"); 36 $langs->load("orders"); 37 $langs->load("companies"); 38 39 $user->getrights('contrat'); 40 41 if (! $user->rights->contrat->lire) 42 accessforbidden(); 43 44 // Param si create 45 $date_start=''; 46 $date_end=''; 47 if ($_POST["date_startmonth"] && $_POST["date_startday"] && $_POST["date_startyear"]) 48 { 49 $date_start=mktime(12, 0 , 0, $_POST["date_startmonth"], $_POST["date_startday"], $_POST["date_startyear"]); 50 } 51 if ($_POST["date_endmonth"] && $_POST["date_endday"] && $_POST["date_endyear"]) 52 { 53 $date_end=mktime(12, 0 , 0, $_POST["date_endmonth"], $_POST["date_endday"], $_POST["date_endyear"]); 54 } 55 // Param si updateligne 56 $date_start_update=''; 57 $date_end_update=''; 58 $date_start_real_update=''; 59 $date_end_real_update=''; 60 if ($_POST["date_start_updatemonth"] && $_POST["date_start_updateday"] && $_POST["date_start_updateyear"]) 61 { 62 $date_start_update=mktime(12, 0 , 0, $_POST["date_start_updatemonth"], $_POST["date_start_updateday"], $_POST["date_start_updateyear"]); 63 } 64 if ($_POST["date_end_updatemonth"] && $_POST["date_end_updateday"] && $_POST["date_end_updateyear"]) 65 { 66 $date_end_update=mktime(12, 0 , 0, $_POST["date_end_updatemonth"], $_POST["date_end_updateday"], $_POST["date_end_updateyear"]); 67 } 68 if ($_POST["date_start_real_updatemonth"] && $_POST["date_start_real_updateday"] && $_POST["date_start_real_updateyear"]) 69 { 70 $date_start_real_update=mktime(12, 0 , 0, $_POST["date_start_real_updatemonth"], $_POST["date_start_real_updateday"], $_POST["date_start_real_updateyear"]); 71 } 72 if ($_POST["date_end_real_updatemonth"] && $_POST["date_end_real_updateday"] && $_POST["date_end_real_updateyear"]) 73 { 74 $date_end_real_update=mktime(12, 0 , 0, $_POST["date_end_real_updatemonth"], $_POST["date_end_real_updateday"], $_POST["date_end_real_updateyear"]); 75 } 76 77 // Sécurité accés client 78 if ($user->societe_id > 0) 79 { 80 $action = ''; 81 $socidp = $user->societe_id; 82 } 83 84 85 /* 86 * Actions 87 */ 88 if ($_POST["action"] == 'add') 89 { 90 $datecontrat = mktime(12, 0 , 0, $_POST["remonth"], $_POST["reday"], $_POST["reyear"]); 91 92 $contrat = new Contrat($db); 93 94 $contrat->soc_id = $_POST["soc_id"]; 95 $contrat->date_contrat = $datecontrat; 96 97 $contrat->commercial_suivi_id = $_POST["commercial_suivi_id"]; 98 $contrat->commercial_signature_id = $_POST["commercial_signature_id"]; 99 100 $contrat->note = trim($_POST["note"]); 101 $contrat->projetid = trim($_POST["projetid"]); 102 $contrat->remise_percent = trim($_POST["remise_percent"]); 103 $contrat->ref = trim($_POST["ref"]); 104 105 $result = $contrat->create($user,$langs,$conf); 106 if ($result > 0) 107 { 108 Header("Location: fiche.php?id=".$contrat->id); 109 exit; 110 } 111 else { 112 $mesg='<div class="error">'.$contrat->error.'</div>'; 113 } 114 115 $_GET["socid"]=$_POST["soc_id"]; 116 $_GET["action"]='create'; 117 $action = ''; 118 } 119 120 if ($_POST["action"] == 'classin') 121 { 122 $contrat = new Contrat($db); 123 $contrat->fetch($_GET["id"]); 124 $contrat->classin($_POST["projetid"]); 125 } 126 127 if ($_POST["action"] == 'addligne' && $user->rights->contrat->creer) 128 { 129 if ($_POST["pqty"] && (($_POST["pu"] && $_POST["desc"]) || $_POST["p_idprod"])) 130 { 131 $result = 0; 132 $contrat = new Contrat($db); 133 $result=$contrat->fetch($_GET["id"]); 134 if (($_POST["p_idprod"] > 0 && $_POST["mode"]=='predefined') || ($_POST["mode"]=='libre')) 135 { 136 //print $_POST["desc"]." - ".$_POST["pu"]." - ".$_POST["pqty"]." - ".$_POST["tva_tx"]." - ".$_POST["p_idprod"]." - ".$_POST["premise"]; exit; 137 $result = $contrat->addline( 138 $_POST["desc"], 139 $_POST["pu"], 140 $_POST["pqty"], 141 $_POST["tva_tx"], 142 $_POST["p_idprod"], 143 $_POST["premise"], 144 $date_start, 145 $date_end 146 ); 147 } 148 149 if ($result >= 0) 150 { 151 Header("Location: fiche.php?id=".$contrat->id); 152 exit; 153 } 154 else 155 { 156 $mesg='<div class="error">'.$contrat->error.'</div>'; 157 } 158 } 159 } 160 161 if ($_POST["action"] == 'updateligne' && $user->rights->contrat->creer && $_POST["save"]) 162 { 163 $contrat = new Contrat($db,"",$_GET["id"]); 164 if ($contrat->fetch($_GET["id"])) 165 { 166 $result = $contrat->updateline($_POST["elrowid"], 167 $_POST["eldesc"], 168 $_POST["elprice"], 169 $_POST["elqty"], 170 $_POST["elremise_percent"], 171 $date_start_update, 172 $date_end_update, 173 $_POST["eltva_tx"], 174 $date_start_real_update, 175 $date_end_real_update 176 ); 177 178 if ($result > 0) 179 { 180 $db->commit(); 181 } 182 else 183 { 184 dolibarr_print_error($db,"result=$result"); 185 $db->rollback(); 186 } 187 } 188 else 189 { 190 dolibarr_print_error($db); 191 } 192 } 193 194 if ($_POST["action"] == 'updateligne' && $user->rights->contrat->creer && $_POST["cancel"]) 195 { 196 Header("Location: fiche.php?id=".$_GET["id"]); 197 } 198 199 if ($_GET["action"] == 'deleteline' && $user->rights->contrat->creer) 200 { 201 $contrat = new Contrat($db); 202 $contrat->fetch($_GET["id"]); 203 $result = $contrat->delete_line($_GET["lineid"]); 204 205 if ($result == 0) 206 { 207 Header("Location: fiche.php?id=".$contrat->id); 208 } 209 } 210 211 if ($_POST["action"] == 'confirm_valid' && $_POST["confirm"] == 'yes' && $user->rights->contrat->creer) 212 { 213 $contrat = new Contrat($db); 214 $contrat->fetch($_GET["id"]); 215 $result = $contrat->validate($user,$langs,$conf); 216 } 217 218 if ($_POST["action"] == 'confirm_close' && $_POST["confirm"] == 'yes' && $user->rights->contrat->creer) 219 { 220 $contrat = new Contrat($db); 221 $contrat->fetch($_GET["id"]); 222 $result = $contrat->cloture($user,$langs,$conf); 223 } 224 225 if ($_POST["action"] == 'confirm_delete' && $_POST["confirm"] == 'yes') 226 { 227 if ($user->rights->contrat->supprimer ) 228 { 229 $contrat = new Contrat($db); 230 $contrat->id = $_GET["id"]; 231 $contrat->delete($user,$langs,$conf); 232 Header("Location: index.php"); 233 return; 234 } 235 } 236 237 238 239 240 llxHeader('',$langs->trans("ContractCard"),"Contrat"); 241 242 $html = new Form($db); 243 244 245 /********************************************************************* 246 * 247 * Mode creation 248 * 249 *********************************************************************/ 250 if ($_GET["action"] == 'create') 251 { 252 dolibarr_fiche_head($head, $a, $langs->trans("AddContract")); 253 254 if ($mesg) print $mesg; 255 256 $new_contrat = new Contrat($db); 257 258 $sql = "SELECT s.nom, s.prefix_comm, s.idp "; 259 $sql .= "FROM ".MAIN_DB_PREFIX."societe as s "; 260 $sql .= "WHERE s.idp = ".$_GET["socid"]; 261 262 $resql=$db->query($sql); 263 if ($resql) 264 { 265 $num = $db->num_rows($resql); 266 if ($num) 267 { 268 $obj = $db->fetch_object($resql); 269 270 $soc = new Societe($db); 271 $soc->fetch($obj->idp); 272 273 print '<form action="fiche.php" method="post">'; 274 275 print '<input type="hidden" name="action" value="add">'; 276 print '<input type="hidden" name="soc_id" value="'.$soc->id.'">'."\n"; 277 print '<input type="hidden" name="remise_percent" value="0">'; 278 279 print '<table class="border" width="100%">'; 280 281 // Ref 282 print '<tr><td>'.$langs->trans("Ref").'</td>'; 283 print '<td><input type="text" maxlength="30" name="ref" size="20"></td></tr>'; 284 285 // Customer 286 print '<tr><td>'.$langs->trans("Customer").'</td><td><a href="'.DOL_URL_ROOT.'/comm/fiche.php?socid='.$soc->id.'">'.$obj->nom.'</a></td></tr>'; 287 288 // Commercial suivi 289 print '<tr><td width="20%" nowrap>'.$langs->trans("TypeContact_contrat_internal_SALESREPFOLL").'</td><td>'; 290 print '<select name="commercial_suivi_id">'; 291 print '<option value="-1"> </option>'; 292 293 $sql = "SELECT rowid, name, firstname FROM ".MAIN_DB_PREFIX."user"; 294 $sql.= " ORDER BY name "; 295 $resql=$db->query( $sql); 296 if ($resql) 297 { 298 $num = $db->num_rows($resql); 299 if ( $num > 0 ) 300 { 301 $i = 0; 302 while ($i < $num) 303 { 304 $row = $db->fetch_row($resql); 305 print '<option value="'.$row[0].'">'.$row[1] . " " . $row[2].'</option>'; 306 $i++; 307 } 308 } 309 $db->free($resql); 310 311 } 312 print '</select></td></tr>'; 313 314 // Commercial signature 315 print '<tr><td width="20%" nowrap>'.$langs->trans("TypeContact_contrat_internal_SALESREPSIGN").'</td><td>'; 316 print '<select name="commercial_signature_id">'; 317 print '<option value="-1"> </option>'; 318 $sql = "SELECT rowid, name, firstname FROM ".MAIN_DB_PREFIX."user"; 319 $sql.= " ORDER BY name"; 320 $resql=$db->query( $sql); 321 if ($resql) 322 { 323 $num = $db->num_rows($resql); 324 if ( $num > 0 ) 325 { 326 $i = 0; 327 while ($i < $num) 328 { 329 $row = $db->fetch_row($resql); 330 print '<option value="'.$row[0].'">'.$row[1] . " " . $row[2].'</option>'; 331 $i++; 332 } 333 } 334 $db->free($resql); 335 336 } 337 print '</select></td></tr>'; 338 339 print '<tr><td>'.$langs->trans("Date").'</td><td>'; 340 $html->select_date(); 341 print "</td></tr>"; 342 343 if ($conf->projet->enabled) 344 { 345 print '<tr><td>'.$langs->trans("Project").'</td><td>'; 346 $proj = new Project($db); 347 $html->select_array("projetid",$proj->liste_array($soc->id),0,1); 348 print "</td></tr>"; 349 } 350 351 print '<tr><td>'.$langs->trans("Comment").'</td><td valign="top">'; 352 print '<textarea name="note" wrap="soft" cols="70" rows="3"></textarea></td></tr>'; 353 354 print '<tr><td colspan="2" align="center"><input type="submit" class="button" value="'.$langs->trans("Create").'"></td></tr>'; 355 356 print "</table>\n"; 357 358 print "</form>\n"; 359 360 if ($propalid) 361 { 362 /* 363 * Produits 364 */ 365 print '<br>'; 366 print_titre($langs->trans("Products")); 367 368 print '<table class="noborder" width="100%">'; 369 print '<tr class="liste_titre"><td>'.$langs->trans("Ref").'</td><td>'.$langs->trans("Product").'</td>'; 370 print '<td align="right">'.$langs->trans("Price").'</td><td align="center">'.$langs->trans("Discount").'</td><td align="center">'.$langs->trans("Qty").'</td></tr>'; 371 372 $sql = "SELECT pt.rowid, p.label as product, p.ref, pt.price, pt.qty, p.rowid as prodid, pt.remise_percent"; 373 $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"; 374 $sql .= " ORDER BY pt.rowid ASC"; 375 $result = $db->query($sql); 376 if ($result) 377 { 378 $num = $db->num_rows($result); 379 $i = 0; 380 $var=True; 381 while ($i < $num) 382 { 383 $objp = $db->fetch_object($result); 384 $var=!$var; 385 print "<tr $bc[$var]><td>[$objp->ref]</td>\n"; 386 print '<td>'.$objp->product.'</td>'; 387 print "<td align=\"right\">".price($objp->price)."</td>"; 388 print '<td align="center">'.$objp->remise_percent.'%</td>'; 389 print "<td align=\"center\">".$objp->qty."</td></tr>\n"; 390 $i++; 391 } 392 } 393 $sql = "SELECT pt.rowid, pt.description as product, pt.price, pt.qty, pt.remise_percent"; 394 $sql.= " FROM ".MAIN_DB_PREFIX."propaldet as pt"; 395 $sql.= " WHERE pt.fk_propal = $propalid AND pt.fk_product = 0"; 396 $sql.= " ORDER BY pt.rowid ASC"; 397 $result=$db->query($sql); 398 if ($result) 399 { 400 $num = $db->num_rows($result); 401 $i = 0; 402 while ($i < $num) 403 { 404 $objp = $db->fetch_object($result); 405 $var=!$var; 406 print "<tr $bc[$var]><td> </td>\n"; 407 print '<td>'.$objp->product.'</td>'; 408 print '<td align="right">'.price($objp->price).'</td>'; 409 print '<td align="center">'.$objp->remise_percent.'%</td>'; 410 print "<td align=\"center\">".$objp->qty."</td></tr>\n"; 411 $i++; 412 } 413 } 414 else 415 { 416 dolibarr_print_error($db); 417 } 418 419 print '</table>'; 420 } 421 } 422 } 423 else 424 { 425 dolibarr_print_error($db); 426 } 427 428 print '</div>'; 429 } 430 else 431 /* *************************************************************************** */ 432 /* */ 433 /* Mode vue et edition */ 434 /* */ 435 /* *************************************************************************** */ 436 { 437 $id = $_GET["id"]; 438 if ($id > 0) 439 { 440 $contrat = New Contrat($db); 441 $result=$contrat->fetch($id); 442 if ($result < 0) 443 { 444 dolibarr_print_error($db,$contrat->error); 445 exit; 446 } 447 448 if ($mesg) print $mesg; 449 450 $author = new User($db); 451 $author->id = $contrat->user_author_id; 452 $author->fetch(); 453 454 $commercial_signature = new User($db); 455 $commercial_signature->id = $contrat->commercial_signature_id; 456 $commercial_signature->fetch(); 457 458 $commercial_suivi = new User($db); 459 $commercial_suivi->id = $contrat->commercial_suivi_id; 460 $commercial_suivi->fetch(); 461 462 $h = 0; 463 $head[$h][0] = DOL_URL_ROOT.'/contrat/fiche.php?id='.$contrat->id; 464 $head[$h][1] = $langs->trans("ContractCard"); 465 $hselected = $h; 466 $h++; 467 468 $head[$h][0] = DOL_URL_ROOT.'/contrat/contact.php?id='.$contrat->id; 469 $head[$h][1] = $langs->trans("ContractContacts"); 470 $h++; 471 472 $head[$h][0] = DOL_URL_ROOT.'/contrat/info.php?id='.$contrat->id; 473 $head[$h][1] = $langs->trans("Info"); 474 $h++; 475 476 dolibarr_fiche_head($head, $hselected, $langs->trans("Contract").': '.$contrat->id); 477 478 479 /* 480 * Confirmation de la suppression du contrat 481 */ 482 if ($_GET["action"] == 'delete') 483 { 484 $html->form_confirm("fiche.php?id=$id",$langs->trans("DeleteAContract"),$langs->trans("ConfirmDeleteAContract"),"confirm_delete"); 485 print '<br>'; 486 } 487 488 /* 489 * Confirmation de la validation 490 */ 491 if ($_GET["action"] == 'valid') 492 { 493 //$numfa = contrat_get_num($soc); 494 $html->form_confirm("fiche.php?id=$id",$langs->trans("ValidateAContract"),$langs->trans("ConfirmValidateContract"),"confirm_valid"); 495 print '<br>'; 496 } 497 498 /* 499 * Confirmation de la fermeture 500 */ 501 if ($_GET["action"] == 'close') 502 { 503 $html->form_confirm("fiche.php?id=$id",$langs->trans("CloseAContract"),$langs->trans("ConfirmCloseContract"),"confirm_close"); 504 print '<br>'; 505 } 506 507 /* 508 * Contrat 509 */ 510 if ($contrat->brouillon == 1 && $user->rights->contrat->creer) 511 { 512 print '<form action="fiche.php?id='.$id.'" method="post">'; 513 print '<input type="hidden" name="action" value="setremise">'; 514 } 515 516 print '<table class="border" width="100%">'; 517 518 // Ref du contrat 519 print '<tr><td width="25%">'.$langs->trans("Ref").'</td><td colspan="3">'; 520 print $contrat->ref; 521 print "</td></tr>"; 522 523 // Customer 524 print "<tr><td>".$langs->trans("Customer")."</td>"; 525 print '<td colspan="3">'; 526 print '<b><a href="'.DOL_URL_ROOT.'/comm/fiche.php?socid='.$contrat->societe->id.'">'.$contrat->societe->nom.'</a></b></td></tr>'; 527 528 // Statut contrat 529 print '<tr><td>'.$langs->trans("Status").'</td><td colspan="3">'; 530 print $contrat->statuts[$contrat->statut]; 531 print "</td></tr>"; 532 533 // Date 534 print '<tr><td>'.$langs->trans("Date").'</td>'; 535 print '<td colspan="3">'.dolibarr_print_date($contrat->date_contrat,"%A %d %B %Y")."</td></tr>\n"; 536 537 // Factures associées 538 /* 539 TODO 540 */ 541 542 // Projet 543 if ($conf->projet->enabled) 544 { 545 $langs->load("projects"); 546 print '<tr><td>'; 547 print '<table width="100%" class="nobordernopadding"><tr><td>'; 548 print $langs->trans("Project"); 549 print '</td>'; 550 if ($_GET["action"] != "classer") print '<td align="right"><a href="'.$_SERVER["PHP_SELF"].'?action=classer&id='.$id.'">'.img_edit($langs->trans("SetProject")).'</a></td>'; 551 print '</tr></table>'; 552 print '</td><td colspan="3">'; 553 if ($_GET["action"] == "classer") 554 { 555 $html->form_project("fiche.php?id=$id",$contrat->fk_soc,$contrat->fk_projet,"projetid"); 556 } 557 else 558 { 559 $html->form_project("fiche.php?id=$id",$contrat->fk_soc,$contrat->fk_projet,"none"); 560 } 561 print "</td></tr>"; 562 } 563 564 /* Remplacer par fonction des contacts de contrat 565 // Commerciaux 566 print '<tr><td width="25%">'.$langs->trans("SalesRepresentativeFollowUp").'</td><td>'.$commercial_suivi->fullname.'</td>'; 567 print '<td width="25%">'.$langs->trans("SalesRepresentativeSignature").'</td><td>'.$commercial_signature->fullname.'</td></tr>'; 568 */ 569 print "</table>"; 570 571 if ($contrat->brouillon == 1 && $user->rights->contrat->creer) 572 { 573 print '</form>'; 574 } 575 576 /* 577 * Lignes de contrats 578 */ 579 echo '<br><table class="noborder" width="100%">'; 580 581 $sql = "SELECT cd.statut, cd.label as label_det, cd.fk_product, cd.description, cd.price_ht, cd.qty, cd.rowid, cd.tva_tx, cd.remise_percent, cd.subprice,"; 582 $sql.= " ".$db->pdate("cd.date_ouverture_prevue")." as date_debut, ".$db->pdate("cd.date_ouverture")." as date_debut_reelle,"; 583 $sql.= " ".$db->pdate("cd.date_fin_validite")." as date_fin, ".$db->pdate("cd.date_cloture")." as date_fin_reelle,"; 584 $sql.= " p.ref, p.label"; 585 $sql.= " FROM ".MAIN_DB_PREFIX."contratdet as cd"; 586 $sql.= " LEFT JOIN ".MAIN_DB_PREFIX."product as p ON cd.fk_product = p.rowid"; 587 $sql.= " WHERE cd.fk_contrat = ".$id; 588 $sql.= " ORDER BY cd .rowid"; 589 590 $result = $db->query($sql); 591 if ($result) 592 { 593 $num = $db->num_rows($result); 594 $i = 0; $total = 0; 595 596 if ($num) 597 { 598 print '<tr class="liste_titre">'; 599 print '<td>'.$langs->trans("Service").'</td>'; 600 print '<td width="50" align="center">'.$langs->trans("VAT").'</td>'; 601 print '<td width="50" align="right">'.$langs->trans("PriceUHT").'</td>'; 602 print '<td width="30" align="center">'.$langs->trans("Qty").'</td>'; 603 print '<td width="50" align="right">'.$langs->trans("Discount").'</td>'; 604 print '<td width="30"> </td>'; 605 print '<td width="30" align="center">'.$langs->trans("Status").'</td>'; 606 print "</tr>\n"; 607 } 608 $var=true; 609 while ($i < $num) 610 { 611 $objp = $db->fetch_object($result); 612 613 $var=!$var; 614 615 if ($_GET["action"] != 'editline' || $_GET["rowid"] != $objp->rowid) 616 { 617 618 print '<tr '.$bc[$var].' valign="top">'; 619 // Libelle 620 if ($objp->fk_product > 0) 621 { 622 print '<td>'; 623 print '<a href="'.DOL_URL_ROOT.'/product/fiche.php?id='.$objp->fk_product.'">'; 624 print img_object($langs->trans("ShowService"),"service").' '.$objp->ref.'</a>'; 625 print $objp->label?' - '.$objp->label:''; 626 if ($objp->description) print '<br />'.stripslashes(nl2br($objp->description)); 627 print '</td>'; 628 } 629 else 630 { 631 print "<td>".stripslashes(nl2br($objp->description))."</td>\n"; 632 } 633 // TVA 634 print '<td align="center">'.$objp->tva_tx.'%</td>'; 635 // Prix 636 print '<td align="right">'.price($objp->subprice)."</td>\n"; 637 // Quantité 638 print '<td align="center">'.$objp->qty.'</td>'; 639 // Remise 640 if ($objp->remise_percent > 0) 641 { 642 print '<td align="right">'.$objp->remise_percent."%</td>\n"; 643 } 644 else 645 { 646 print '<td> </td>'; 647 } 648 // Icon update et delete (statut contrat 0=brouillon,1=validé,2=fermé) 649 print '<td align="center" nowrap>'; 650 if ($contrat->statut != 2 && $user->rights->contrat->creer) 651 { 652 print '<a href="fiche.php?id='.$id.'&action=editline&rowid='.$objp->rowid.'">'; 653 print img_edit(); 654 print '</a>'; 655 } 656 else { 657 print ' '; 658 } 659 if ($contrat->statut == 0 && $user->rights->contrat->creer) 660 { 661 print ' '; 662 print '<a href="fiche.php?id='.$id.'&action=deleteline&lineid='.$objp->rowid.'">'; 663 print img_delete(); 664 print '</a>'; 665 } 666 print '</td>'; 667 668 // Statut 669 print '<td align="center">'; 670 if ($contrat->statut > 0) print '<a href="'.DOL_URL_ROOT.'/contrat/ligne.php?id='.$contrat->id.'&ligne='.$objp->rowid.'">';; 671 print img_statut($objp->statut); 672 if ($contrat->statut > 0) print '</a>'; 673 print '</td>'; 674 675 print "</tr>\n"; 676 677 // Dates de en service prévues et effectives 678 679 print '<tr '.$bc[$var].'>'; 680 print '<td colspan="7">'; 681 682 // Date prévues 683 print $langs->trans("DateStartPlanned").': '; 684 if ($objp->date_debut) { 685 print dolibarr_print_date($objp->date_debut); 686 // Warning si date prevu passée et pas en service 687 if ($objp->statut == 0 && $objp->date_debut < time() - $conf->contrat->warning_delay) { print " ".img_warning($langs->trans("Late")); } 688 } 689 else print $langs->trans("Unknown"); 690 print ' - '; 691 print $langs->trans("DateEndPlanned").': '; 692 if ($objp->date_fin) { 693 print dolibarr_print_date($objp->date_fin); 694 if ($objp->statut == 4 && $objp->date_fin < time() - $conf->contrat->warning_delay) { print " ".img_warning($langs->trans("Late")); } 695 } 696 else print $langs->trans("Unknown"); 697 698 print '<br>'; 699 700 // Si pas encore activé 701 if (! $objp->date_debut_reelle) { 702 print $langs->trans("DateStartReal").': '; 703 if ($objp->date_debut_reelle) print dolibarr_print_date($objp->date_debut_reelle); 704 else print $langs->trans("ContractStatusNotRunning"); 705 } 706 // Si activé et en cours 707 if ($objp->date_debut_reelle && ! $objp->date_fin_reelle) { 708 print $langs->trans("DateStartReal").': '; 709 print dolibarr_print_date($objp->date_debut_reelle); 710 } 711 // Si désactivé 712 if ($objp->date_debut_reelle && $objp->date_fin_reelle) { 713 print $langs->trans("DateStartReal").': '; 714 print dolibarr_print_date($objp->date_debut_reelle); 715 print ' - '; 716 print $langs->trans("DateEndReal").': '; 717 print dolibarr_print_date($objp->date_fin_reelle); 718 } 719 print '</td>'; 720 print '</tr>'; 721 } 722 723 // Ligne en mode update 724 else 725 { 726 print "<form action=\"fiche.php?id=$id\" method=\"post\">"; 727 print '<input type="hidden" name="action" value="updateligne">'; 728 print '<input type="hidden" name="elrowid" value="'.$_GET["rowid"].'">'; 729 // Ligne carac 730 print "<tr $bc[$var]>"; 731 print '<td>'; 732 if ($objp->fk_product) 733 { 734 print '<a href="'.DOL_URL_ROOT.'/product/fiche.php?id='.$objp->fk_product.'">'; 735 print img_object($langs->trans("ShowService"),"service").' '.$objp->ref.'</a>'; 736 print $objp->label?' - '.$objp->label:''; 737 print '</br>'; 738 } 739 else 740 { 741 print $objp->label?$objp->label.'<br>':''; 742 } 743 print '<textarea name="eldesc" cols="70" rows="1">'.$objp->description.'</textarea></td>'; 744 print '<td align="right">'; 745 print $html->select_tva("eltva_tx",$objp->tva_tx,$mysoc,$contrat->societe); 746 print '</td>'; 747 print '<td align="right"><input size="6" type="text" name="elprice" value="'.price($objp->subprice).'"></td>'; 748 print '<td align="center"><input size="3" type="text" name="elqty" value="'.$objp->qty.'"></td>'; 749 print '<td align="right"><input size="1" type="text" name="elremise_percent" value="'.$objp->remise_percent.'">%</td>'; 750 print '<td align="center" colspan="3" rowspan="2" valign="middle"><input type="submit" class="button" name="save" value="'.$langs->trans("Modify").'">'; 751 print '<br><input type="submit" class="button" name="cancel" value="'.$langs->trans("Cancel").'">'; 752 print '</td>'; 753 // Ligne dates prévues 754 print "<tr $bc[$var]>"; 755 print '<td colspan="5">'; 756 print $langs->trans("DateStartPlanned").' '; 757 $html->select_date($objp->date_debut,"date_start_update",0,0,($objp->date_debut>0?0:1)); 758 print ' '.$langs->trans("DateEndPlanned").' '; 759 $html->select_date($objp->date_fin,"date_end_update",0,0,($objp->date_fin>0?0:1)); 760 if ($objp->statut >= 4) 761 { 762 print '<br>'; 763 print $langs->trans("DateStartReal").' '; 764 $html->select_date($objp->date_debut_reelle,"date_start_real_update",0,0,($objp->date_debut_reelle>0?0:1)); 765 print ' '; 766 if ($objp->statut == 5) 767 { 768 print $langs->trans("DateEndReal").' '; 769 $html->select_date($objp->date_fin_reelle,"date_end_real_update",0,0,($objp->date_fin_reelle>0?0:1)); 770 } 771 } 772 print '</td>'; 773 print '</tr>'; 774 775 print "</form>\n"; 776 } 777 $i++; 778 } 779 $db->free($result); 780 } 781 else 782 { 783 dolibarr_print_error($db); 784 } 785 786 787 /* 788 * Ajouter une ligne produit/service 789 */ 790 if ($user->rights->contrat->creer && $contrat->statut == 0) 791 { 792 print "<tr class=\"liste_titre\">"; 793 print '<td>'.$langs->trans("Service").'</td>'; 794 print '<td align="center">'.$langs->trans("VAT").'</td>'; 795 print '<td align="right">'.$langs->trans("PriceUHT").'</td>'; 796 print '<td align="center">'.$langs->trans("Qty").'</td>'; 797 print '<td align="right">'.$langs->trans("Discount").'</td>'; 798 print '<td> </td>'; 799 print '<td> </td>'; 800 print "</tr>\n"; 801 802 $var=false; 803 804 // Service sur produit prédéfini 805 print '<form action="fiche.php?id='.$id.'" method="post">'; 806 print '<input type="hidden" name="action" value="addligne">'; 807 print '<input type="hidden" name="mode" value="predefined">'; 808 print '<input type="hidden" name="id" value="'.$id.'">'; 809 810 print "<tr $bc[$var]>"; 811 print '<td colspan="3">'; 812 $html->select_produits('','p_idprod','',$conf->produit->limit_size); 813 print '<br>'; 814 print '<textarea name="desc" cols="70" rows="'.ROWS_2.'"></textarea>'; 815 print '</td>'; 816 817 print '<td align="center"><input type="text" class="flat" size="2" name="pqty" value="1"></td>'; 818 print '<td align="right" nowrap><input type="text" class="flat" size="1" name="premise" value="0">%</td>'; 819 print '<td align="center" colspan="2" rowspan="2"><input type="submit" class="button" value="'.$langs->trans("Add").'"></td>'; 820 print '</tr>'."\n"; 821 822 print "<tr $bc[$var]>"; 823 print '<td colspan="8">'; 824 print $langs->trans("DateStartPlanned").' '; 825 $html->select_date('',"date_start",0,0,1); 826 print ' '.$langs->trans("DateEndPlanned").' '; 827 $html->select_date('',"date_end",0,0,1); 828 print '</td>'; 829 print '</tr>'; 830 831 print '</form>'; 832 833 $var=!$var; 834 835 // Service libre 836 print '<form action="fiche.php?id='.$id.'" method="post">'; 837 print '<input type="hidden" name="action" value="addligne">'; 838 print '<input type="hidden" name="mode" value="libre">'; 839 print '<input type="hidden" name="id" value="'.$id.'">'; 840 841 print "<tr $bc[$var]>"; 842 print '<td><textarea name="desc" cols="70" rows="'.ROWS_2.'"></textarea></td>'; 843 844 print '<td>'; 845 $html->select_tva("tva_tx",$conf->defaulttx,$mysoc,$contrat->societe); 846 print '</td>'; 847 print '<td align="right"><input type="text" class="flat" size="4" name="pu" value=""></td>'; 848 print '<td align="center"><input type="text" class="flat" size="2" name="pqty" value="1"></td>'; 849 print '<td align="right" nowrap><input type="text" class="flat" size="1" name="premise" value="0">%</td>'; 850 print '<td align="center" rowspan="2" colspan="2"><input type="submit" class="button" value="'.$langs->trans("Add").'"></td>'; 851 852 print '</tr>'."\n"; 853 854 print "<tr $bc[$var]>"; 855 print '<td colspan="8">'; 856 print $langs->trans("DateStartPlanned").' '; 857 $html->select_date('',"date_start",0,0,1); 858 print ' '.$langs->trans("DateEndPlanned").' '; 859 $html->select_date('',"date_end",0,0,1); 860 print '</td>'; 861 print '</tr>'; 862 863 print '</form>'; 864 } 865 print "</table>"; 866 /* 867 * Fin Ajout ligne 868 */ 869 870 print '</div>'; 871 872 873 /************************************************************* 874 * Boutons Actions 875 *************************************************************/ 876 877 if ($user->societe_id == 0) 878 { 879 print '<div class="tabsAction">'; 880 881 if ($contrat->statut == 0 && $num) 882 { 883 print '<a class="butAction" href="fiche.php?id='.$id.'&action=valid">'.$langs->trans("Validate").'</a>'; 884 } 885 886 if ($contrat->statut > 0 && $user->rights->facture->creer) 887 { 888 $langs->load("bills"); 889 print '<a class="butAction" href="'.DOL_URL_ROOT.'/compta/facture.php?action=create&contratid='.$contrat->id.'&socidp='.$contrat->societe->id.'">'.$langs->trans("CreateBill").'</a>'; 890 } 891 892 $numclos=$contrat->array_detail(5); // Tableau des lignes au statut clos 893 if ($contrat->statut == 1 && $num == sizeof($numclos)) 894 { 895 print '<a class="butAction" href="fiche.php?id='.$id.'&action=close">'.$langs->trans("Close").'</a>'; 896 } 897 898 if ($contrat->statut == 0 && $user->rights->contrat->supprimer) 899 { 900 print '<a class="butActionDelete" href="fiche.php?id='.$id.'&action=delete">'.$langs->trans("Delete").'</a>'; 901 } 902 903 print "</div>"; 904 } 905 906 } 907 } 908 909 $db->close(); 910 911 llxFooter('$Date: 2005/11/23 00:43:19 $ - $Revision: 1.71 $'); 912 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Mon Nov 26 12:29:37 2007 | par Balluche grâce à PHPXref 0.7 |
![]() |