40require 
'../../main.inc.php';
 
   41require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
 
   42require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formfile.class.php';
 
   43require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formorder.class.php';
 
   44require_once DOL_DOCUMENT_ROOT.
'/core/lib/files.lib.php';
 
   45require_once DOL_DOCUMENT_ROOT.
'/core/lib/fourn.lib.php';
 
   46require_once DOL_DOCUMENT_ROOT.
'/core/lib/functions2.lib.php';
 
   47require_once DOL_DOCUMENT_ROOT.
'/core/modules/supplier_order/modules_commandefournisseur.php';
 
   48require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.commande.class.php';
 
   49require_once DOL_DOCUMENT_ROOT.
'/fourn/class/fournisseur.product.class.php';
 
   51if (isModEnabled(
'supplier_proposal')) {
 
   52  require_once DOL_DOCUMENT_ROOT.
'/supplier_proposal/class/supplier_proposal.class.php';
 
   54if (isModEnabled(
"product")) {
 
   55  require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
 
   57if (isModEnabled(
'project')) {
 
   58  require_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
 
   59  require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
 
   61require_once NUSOAP_PATH.
'/nusoap.php'; 
 
   63if (isModEnabled(
'variants')) {
 
   64  require_once DOL_DOCUMENT_ROOT.
'/variants/class/ProductCombination.class.php';
 
   69$langs->loadLangs(array(
'admin', 
'orders', 
'sendings', 
'companies', 
'bills', 
'propal', 
'receptions', 
'supplier_proposal', 
'deliveries', 
'products', 
'stocks', 
'productbatch'));
 
   70if (isModEnabled(
'incoterm')) {
 
   71  $langs->load(
'incoterm');
 
   78$action      = 
GETPOST(
'action', 
'alpha');
 
   79$confirm     = 
GETPOST(
'confirm', 
'alpha');
 
   80$contextpage = 
GETPOST(
'contextpage', 
'aZ') ? 
GETPOST(
'contextpage', 
'aZ') : 
'purchaseordercard'; 
 
   81$backtopage = 
GETPOST(
'backtopage', 
'alpha');
 
   82$backtopageforcancel = 
GETPOST(
'backtopageforcancel', 
'alpha');
 
   84$socid     = 
GETPOST(
'socid', 
'int');
 
   85$projectid = 
GETPOST(
'projectid', 
'int');
 
   86$cancel    = 
GETPOST(
'cancel', 
'alpha');
 
   87$lineid    = 
GETPOST(
'lineid', 
'int');
 
   88$origin    = 
GETPOST(
'origin', 
'alpha');
 
   97$datelivraison = 
dol_mktime(
GETPOST(
'liv_hour', 
'int'), 
GETPOST(
'liv_min', 
'int'), 
GETPOST(
'liv_sec', 
'int'), 
GETPOST(
'liv_month', 
'int'), 
GETPOST(
'liv_day', 
'int'), 
GETPOST(
'liv_year', 
'int'));
 
  101if (!empty($user->socid)) {
 
  102  $socid = $user->socid;
 
  106$hookmanager->initHooks(array(
'ordersuppliercard', 
'globalcard'));
 
  112$extrafields->fetch_name_optionals_label($object->table_element);
 
  115  $socid = $user->socid;
 
  119if ($id > 0 || !empty($ref)) {
 
  120  $ret = $object->fetch($id, $ref);
 
  124  $ret = $object->fetch_thirdparty();
 
  128} elseif (!empty($socid) && $socid > 0) {
 
  129  $object->socid = $socid;
 
  130  $ret = $object->fetch_thirdparty();
 
  137$isdraft = (isset($object->statut) && ($object->statut == $object::STATUS_DRAFT) ? 1 : 0);
 
  138$result = 
restrictedArea($user, 
'fournisseur', $object, 
'commande_fournisseur', 
'commande', 
'fk_soc', 
'rowid', $isdraft);
 
  141$usercanread  = ($user->hasRight(
"fournisseur", 
"commande", 
"lire") || $user->hasRight(
"supplier_order", 
"lire"));
 
  142$usercancreate  = ($user->hasRight(
"fournisseur", 
"commande", 
"creer") || $user->hasRight(
"supplier_order", 
"creer"));
 
  143$usercandelete  = (($user->hasRight(
"fournisseur", 
"commande", 
"supprimer") || $user->hasRight(
"supplier_order", 
"supprimer")) || ($usercancreate && isset($object->statut) && $object->statut == $object::STATUS_DRAFT));
 
  146$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $user->hasRight(
"fournisseur", 
"supplier_order_advance", 
"validate")));
 
  149$usercanapprove     = $user->hasRight(
"fournisseur", 
"commande", 
"approuver");
 
  150$usercanapprovesecond = $user->hasRight(
"fournisseur", 
"commande", 
"approve2");
 
  151$usercanorder     = $user->hasRight(
"fournisseur", 
"commande", 
"commander");
 
  152if (!isModEnabled(
'reception')) {
 
  153  $usercanreceive = $user->hasRight(
"fournisseur", 
"commande", 
"receptionner");
 
  155  $usercanreceive = $user->hasRight(
"reception", 
"creer");
 
  159$permissionnote   = $usercancreate; 
 
  160$permissiondellink  = $usercancreate; 
 
  161$permissiontoedit = $usercancreate; 
 
  162$permissiontoadd  = $usercancreate; 
 
  165$caneditproject = 
false;
 
  166if (isModEnabled(
'project')) {
 
  177$parameters = array(
'socid'=>$socid);
 
  178$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action); 
 
  183if (empty($reshook)) {
 
  184  $backurlforlist = DOL_URL_ROOT.
'/fourn/commande/list.php'.($socid > 0 ? 
'?socid='.((int) $socid) : 
'');
 
  186  if (empty($backtopage) || ($cancel && empty($id))) {
 
  187    if (empty($backtopage) || ($cancel && strpos($backtopage, 
'__ID__'))) {
 
  188      if (empty($id) && (($action != 
'add' && $action != 
'create') || $cancel)) {
 
  189        $backtopage = $backurlforlist;
 
  191        $backtopage = DOL_URL_ROOT.
'/fourn/commande/card.php?id='.((!empty($id) && $id > 0) ? $id : 
'__ID__');
 
  197    if (!empty($backtopageforcancel)) {
 
  198      header(
"Location: ".$backtopageforcancel);
 
  200    } elseif (!empty($backtopage)) {
 
  201      header(
"Location: ".$backtopage);
 
  207  include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php'; 
 
  209  include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php'; 
 
  211  include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php'; 
 
  213  if ($action == 
'setref_supplier' && $usercancreate) {
 
  214    $result = $object->setValueFrom(
'ref_supplier', 
GETPOST(
'ref_supplier', 
'alpha'), 
'', 
null, 
'text', 
'', $user, 
'ORDER_SUPPLIER_MODIFY');
 
  221  if ($action == 
'set_incoterms' && $usercancreate) {
 
  222    $result = $object->setIncoterms(
GETPOST(
'incoterm_id', 
'int'), 
GETPOST(
'location_incoterms', 
'alpha'));
 
  229  if ($action == 
'setconditions' && $usercancreate) {
 
  230    $result = $object->setPaymentTerms(
GETPOST(
'cond_reglement_id', 
'int'));
 
  237  if ($action == 
'setmode' && $usercancreate) {
 
  238    $result = $object->setPaymentMethods(
GETPOST(
'mode_reglement_id', 
'int'));
 
  242  } elseif ($action == 
'setmulticurrencycode' && $usercancreate) {
 
  244    $result = $object->setMulticurrencyCode(
GETPOST(
'multicurrency_code', 
'alpha'));
 
  245  } elseif ($action == 
'setmulticurrencyrate' && $usercancreate) {
 
  247    $result = $object->setMulticurrencyRate(
price2num(
GETPOST(
'multicurrency_tx')), 
GETPOST(
'calculation_mode', 
'int'));
 
  251  if ($action == 
'setbankaccount' && $usercancreate) {
 
  252    $result = $object->setBankAccount(
GETPOST(
'fk_account', 
'int'));
 
  259  if ($action == 
'setdate_livraison' && $usercancreate) {
 
  260    $result = $object->setDeliveryDate($user, $datelivraison);
 
  267  if ($action == 
'classin' && $usercancreate && $caneditproject) {
 
  268    $result = $object->setProject($projectid);
 
  276    $new_socid = 
GETPOST(
'new_socid', 
'int');
 
  277    if (!empty($new_socid) && $new_socid != $object->thirdparty->id) {
 
  281      $sql = 
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
 
  282      $sql .= 
' SET fk_soc = '.((int) $new_socid);
 
  283      $sql .= 
' WHERE fk_soc = '.((int) $object->thirdparty->id);
 
  284      $sql .= 
' AND rowid = '.((int) $object->id);
 
  286      $res = $db->query($sql);
 
  294        foreach ($object->lines as $l) {
 
  295          $sql = 
'SELECT price, unitprice, tva_tx, ref_fourn';
 
  296          $sql .= 
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
 
  297          $sql .= 
' WHERE fk_product = '.((int) $l->fk_product);
 
  298          $sql .= 
' AND fk_soc = '.((int) $new_socid);
 
  299          $sql .= 
' ORDER BY unitprice ASC';
 
  301          $resql = $db->query($sql);
 
  303            $num_row = $db->num_rows($resql);
 
  304            if (empty($num_row)) {
 
  310              $l->ref_supplier = 
'';
 
  314              $obj = $db->fetch_object($resql);
 
  315              $l->subprice = $obj->unitprice;
 
  316              $l->total_ht = $obj->price;
 
  317              $l->tva_tx = $obj->tva_tx;
 
  318              $l->total_tva = $l->total_ht * ($obj->tva_tx / 100);
 
  319              $l->total_ttc = $l->total_ht + $l->total_tva;
 
  320              $l->ref_supplier = $obj->ref_fourn;
 
  328        $object->update_price();
 
  331    header(
'Location: '.$_SERVER[
'PHP_SELF'].
'?id='.$object->id);
 
  335  if ($action == 
'setremisepercent' && $usercancreate) {
 
  342  if ($action == 
'reopen') {  
 
  343    if (in_array($object->statut, array(1, 2, 3, 4, 5, 6, 7, 9))) {
 
  344      if ($object->statut == 1) {
 
  346      } elseif ($object->statut == 2) {
 
  348      } elseif ($object->statut == 3) {
 
  350      } elseif ($object->statut == 4) {
 
  352      } elseif ($object->statut == 5) {
 
  358      } elseif ($object->statut == 6) {
 
  360      } elseif ($object->statut == 7) {
 
  362      } elseif ($object->statut == 9) {
 
  371      $result = $object->setStatus($user, $newstatus);
 
  374        $sql = 
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
 
  375        $sql .= 
' SET billed = 0';
 
  376        $sql .= 
' WHERE rowid = '.((int) $object->id);
 
  378        $resql = $db->query($sql);
 
  380        if ($newstatus == 0) {
 
  381          $sql = 
'UPDATE '.MAIN_DB_PREFIX.
'commande_fournisseur';
 
  382          $sql .= 
' SET fk_user_approve = null, fk_user_approve2 = null, date_approve = null, date_approve2 = null';
 
  383          $sql .= 
' WHERE rowid = '.((int) $object->id);
 
  385          $resql = $db->query($sql);
 
  390        header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
 
  403  if ($action == 
'classifybilled' && $usercancreate) {
 
  404    $ret = $object->classifyBilled($user);
 
  411  if ($action == 
'addline' && 
GETPOST(
'submitforalllines', 
'aZ09') && 
GETPOST(
'vatforalllines', 
'alpha') !== 
'' && $usercancreate) {
 
  413    $vat_rate = (
GETPOST(
'vatforalllines') ? 
GETPOST(
'vatforalllines') : 0);
 
  414    $vat_rate = str_replace(
'*', 
'', $vat_rate);
 
  415    $localtax1_rate = 
get_localtax($vat_rate, 1, $object->thirdparty, $mysoc);
 
  416    $localtax2_rate = 
get_localtax($vat_rate, 2, $object->thirdparty, $mysoc);
 
  417    foreach ($object->lines as $line) {
 
  418      $result = $object->updateline($line->id, $line->desc, $line->subprice, $line->qty, $line->remise_percent, $vat_rate, $localtax1_rate, $localtax2_rate, 
'HT', $line->info_bits, $line->product_type, 0, $line->date_start, $line->date_end, $line->array_options, $line->fk_unit, $line->multicurrency_subprice, $line->ref_supplier);
 
  420  } elseif ($action == 
'addline' && $usercancreate) {
 
  423    $langs->load(
'errors');
 
  428    $product_desc = (GETPOSTISSET(
'dp_desc') ? 
GETPOST(
'dp_desc', 
'restricthtml') : 
'');
 
  432    $prod_entry_mode = 
GETPOST(
'prod_entry_mode');
 
  433    if ($prod_entry_mode == 
'free') {
 
  436      $idprod = 
GETPOST(
'idprod', 
'int');
 
  447    $remise_percent = (GETPOSTISSET(
'remise_percent'.$predef) ? 
price2num(
GETPOST(
'remise_percent'.$predef, 
'alpha'), 
'', 2) : 0);
 
  448    if (empty($remise_percent)) {
 
  453    $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
 
  454    $array_options = $extrafields->getOptionalsFromPost($object->table_element_line, $predef);
 
  456    if (is_array($extralabelsline)) {
 
  458      foreach ($extralabelsline as $key => $value) {
 
  459        unset($_POST[
"options_".$key]);
 
  463    if ($prod_entry_mode == 
'free' && 
GETPOST(
'price_ht') < 0 && $qty < 0) {
 
  464      setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPrice'), $langs->transnoentitiesnoconv(
'Qty')), 
null, 
'errors');
 
  467    if ($prod_entry_mode == 
'free' && !
GETPOST(
'idprodfournprice') && 
GETPOST(
'type') < 0) {
 
  468      setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')), 
null, 
'errors');
 
  471    if ($prod_entry_mode == 
'free' && 
GETPOST(
'price_ht') === 
'' && 
GETPOST(
'price_ttc') === 
'' && $price_ht_devise === 
'') { 
 
  472      setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'UnitPrice')), 
null, 
'errors');
 
  475    if ($prod_entry_mode == 
'free' && !
GETPOST(
'dp_desc')) {
 
  476      setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')), 
null, 
'errors');
 
  479    if (
GETPOST(
'qty', 
'alpha') == 
'') {  
 
  480      setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')), 
null, 
'errors');
 
  484    if (!$error && isModEnabled(
'variants') && $prod_entry_mode != 
'free') {
 
  485      if ($combinations = 
GETPOST(
'combinations', 
'array')) {
 
  489        if ($res = $prodcomb->fetchByProductCombination2ValuePairs($idprod, $combinations)) {
 
  490          $idprod = $res->fk_product_child;
 
  492          setEventMessages($langs->trans(
'ErrorProductCombinationNotFound'), 
null, 
'errors');
 
  498    if ($prod_entry_mode != 
'free' && empty($error)) {  
 
  502      if (
GETPOST(
'idprodfournprice', 
'alpha') == -1 || 
GETPOST(
'idprodfournprice', 
'alpha') == 
'') {
 
  507      if (preg_match(
'/^idprod_([0-9]+)$/', 
GETPOST(
'idprodfournprice', 
'alpha'), $reg)) {
 
  509        $res = $productsupplier->fetch($idprod); 
 
  512        if (
getDolGlobalString(
'SUPPLIER_TAKE_FIRST_PRICE_IF_NO_PRICE_FOR_CURRENT_SUPPLIER')) {
 
  514          $productsupplier->get_buyprice(0, -1, $idprod, 
'none', $fksoctosearch); 
 
  515          if ($productsupplier->fourn_socid != $socid) {  
 
  516            $productsupplier->ref_supplier = 
'';
 
  519          $fksoctosearch = $object->thirdparty->id;
 
  520          $productsupplier->get_buyprice(0, -1, $idprod, 
'none', $fksoctosearch); 
 
  522      } elseif (
GETPOST(
'idprodfournprice', 
'alpha') > 0) {
 
  525        $idprod = $productsupplier->get_buyprice(
GETPOST(
'idprodfournprice', 
'alpha'), $qtytosearch);
 
  526        $res = $productsupplier->fetch($idprod);
 
  530        $label = $productsupplier->label;
 
  534          $outputlangs = $langs;
 
  536          if (empty($newlang) && 
GETPOST(
'lang_id', 
'aZ09')) {
 
  537            $newlang = 
GETPOST(
'lang_id', 
'aZ09');
 
  539          if (empty($newlang)) {
 
  540            $newlang = $object->thirdparty->default_lang;
 
  542          if (!empty($newlang)) {
 
  544            $outputlangs->setDefaultLang($newlang);
 
  546          $desc = (!empty($productsupplier->multilangs[$outputlangs->defaultlang][
"description"])) ? $productsupplier->multilangs[$outputlangs->defaultlang][
"description"] : $productsupplier->
description;
 
  548          $desc = $productsupplier->description;
 
  551        if (!empty($productsupplier->desc_supplier) && 
getDolGlobalString(
'PRODUIT_FOURN_TEXTS')) {
 
  552          $desc = $productsupplier->desc_supplier;
 
  556        if (trim($product_desc) == trim($desc) && 
getDolGlobalString(
'PRODUIT_AUTOFILL_DESC')) {
 
  561          $desc = $product_desc;
 
  563        if (!empty($product_desc) && trim($product_desc) != trim($desc)) {
 
  567        $ref_supplier = $productsupplier->ref_supplier;
 
  571        if (!GETPOSTISSET(
'tva_tx')) {  
 
  572          $tva_tx = 
get_default_tva($object->thirdparty, $mysoc, $productsupplier->id, 
GETPOST(
'idprodfournprice', 
'alpha'));
 
  573          $tva_npr = 
get_default_npr($object->thirdparty, $mysoc, $productsupplier->id, 
GETPOST(
'idprodfournprice', 
'alpha'));
 
  574          if (empty($tva_tx)) {
 
  579        $localtax1_tx = 
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty, $tva_npr);
 
  580        $localtax2_tx = 
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty, $tva_npr);
 
  582        $type = $productsupplier->type;
 
  583        if (
GETPOST(
'price_ht') != 
'' || 
GETPOST(
'multicurrency_price_ht') != 
'') {
 
  584          $price_base_type = 
'HT';
 
  586          $pu_devise = 
price2num($price_ht_devise, 
'CU');
 
  587        } elseif (
GETPOST(
'price_ttc') != 
'' || 
GETPOST(
'multicurrency_price_ttc') != 
'') {
 
  588          $price_base_type = 
'TTC';
 
  590          $pu_devise = 
price2num($price_ttc_devise, 
'CU');
 
  592          $price_base_type = ($productsupplier->fourn_price_base_type ? $productsupplier->fourn_price_base_type : 
'HT');
 
  593          if (empty($object->multicurrency_code) || ($productsupplier->fourn_multicurrency_code != $object->multicurrency_code)) {  
 
  594            $pu = $productsupplier->fourn_pu;
 
  597            $pu = $productsupplier->fourn_pu;
 
  598            $pu_devise = $productsupplier->fourn_multicurrency_unitprice;
 
  606        $result = $object->addline(
 
  608          ($price_base_type == 
'HT' ? $pu : 0),
 
  614          $productsupplier->product_fourn_price_id,
 
  618          ($price_base_type == 
'TTC' ? $pu : 0),
 
  625          $productsupplier->fk_unit,
 
  629          min($rank, count($object->lines) + 1)
 
  632      if ($idprod == -99 || $idprod == 0) {
 
  635        $langs->load(
"errors");
 
  636        setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")), 
null, 
'errors');
 
  641        $langs->load(
"errors");
 
  642        setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"), 
null, 
'errors');
 
  644    } elseif (empty($error)) { 
 
  645      $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
 
  646      $tva_tx = str_replace(
'*', 
'', $tva_tx);
 
  647      $label = (
GETPOST(
'product_label') ? 
GETPOST(
'product_label') : 
'');
 
  648      $desc = $product_desc;
 
  650      $ref_supplier = 
GETPOST(
'fourn_ref', 
'alpha');
 
  652      $fk_unit = 
GETPOST(
'units', 
'alpha');
 
  654      if (!preg_match(
'/\((.*)\)/', $tva_tx)) {
 
  659      $localtax1_tx = 
get_localtax($tva_tx, 1, $mysoc, $object->thirdparty);
 
  660      $localtax2_tx = 
get_localtax($tva_tx, 2, $mysoc, $object->thirdparty);
 
  662      if (
GETPOST(
'price_ht') != 
'' || 
GETPOST(
'multicurrency_price_ht') != 
'') {
 
  666        $pu_ht = 
price2num($pu_ttc / (1 + ($tva_tx / 100)), 
'MU'); 
 
  668      $price_base_type = 
'HT';
 
  669      $pu_ht_devise = 
price2num($price_ht_devise, 
'CU');
 
  671      $result = $object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, 0, 0, $ref_supplier, $remise_percent, $price_base_type, $pu_ttc, $type, 
'', 
'', $date_start, $date_end, $array_options, $fk_unit, $pu_ht_devise);
 
  675    if (!$error && $result > 0) {
 
  678      $ret = $object->fetch($object->id); 
 
  682        $outputlangs = $langs;
 
  685          $newlang = $object->thirdparty->default_lang;
 
  686          if (
GETPOST(
'lang_id', 
'aZ09')) {
 
  687            $newlang = 
GETPOST(
'lang_id', 
'aZ09');
 
  690        if (!empty($newlang)) {
 
  692          $outputlangs->setDefaultLang($newlang);
 
  694        $model = $object->model_pdf;
 
  695        $ret = $object->fetch($id); 
 
  697        $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
 
  703      unset($_POST [
'prod_entry_mode']);
 
  705      unset($_POST[
'qty']);
 
  706      unset($_POST[
'type']);
 
  707      unset($_POST[
'remise_percent']);
 
  709      unset($_POST[
'price_ht']);
 
  710      unset($_POST[
'multicurrency_price_ht']);
 
  711      unset($_POST[
'price_ttc']);
 
  712      unset($_POST[
'fourn_ref']);
 
  713      unset($_POST[
'tva_tx']);
 
  714      unset($_POST[
'label']);
 
  715      unset($localtax1_tx);
 
  716      unset($localtax2_tx);
 
  717      unset($_POST[
'np_marginRate']);
 
  718      unset($_POST[
'np_markRate']);
 
  719      unset($_POST[
'dp_desc']);
 
  720      unset($_POST[
'idprodfournprice']);
 
  721      unset($_POST[
'units']);
 
  723      unset($_POST[
'date_starthour']);
 
  724      unset($_POST[
'date_startmin']);
 
  725      unset($_POST[
'date_startsec']);
 
  726      unset($_POST[
'date_startday']);
 
  727      unset($_POST[
'date_startmonth']);
 
  728      unset($_POST[
'date_startyear']);
 
  729      unset($_POST[
'date_endhour']);
 
  730      unset($_POST[
'date_endmin']);
 
  731      unset($_POST[
'date_endsec']);
 
  732      unset($_POST[
'date_endday']);
 
  733      unset($_POST[
'date_endmonth']);
 
  734      unset($_POST[
'date_endyear']);
 
  746  if ($action == 
'updateline' && $usercancreate && !
GETPOST(
'cancel', 
'alpha')) {
 
  753      $res = $line->fetch($lineid);
 
  761      if ($line->fk_product > 0 && $productsupplier->get_buyprice(0, 
price2num(
GETPOST(
'qty', 
'int')), $line->fk_product, 
'none', 
GETPOST(
'socid', 
'int')) < 0) {
 
  762        setEventMessages($langs->trans(
"ErrorQtyTooLowForThisSupplier"), 
null, 
'warnings');
 
  771    if (preg_match(
'/\*/', $vat_rate)) {
 
  776    $vat_rate = str_replace(
'*', 
'', $vat_rate);
 
  777    $localtax1_rate = 
get_localtax($vat_rate, 1, $mysoc, $object->thirdparty);
 
  778    $localtax2_rate = 
get_localtax($vat_rate, 2, $mysoc, $object->thirdparty);
 
  780    if (
GETPOST(
'price_ht') != 
'') {
 
  781      $price_base_type = 
'HT';
 
  785      $vatratecleaned = $vat_rate;
 
  786      if (preg_match(
'/^(.*)\s*\((.*)\)$/', $vat_rate, $reg)) {      
 
  787        $vatratecleaned = trim($reg[1]);
 
  788        $vatratecode = $reg[2];
 
  792      $ht = (float) $ttc / (1 + ($vatratecleaned / 100));
 
  793      $price_base_type = 
'HT';
 
  799    $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
 
  800    $array_options = $extrafields->getOptionalsFromPost($object->table_element_line);
 
  802    if (is_array($extralabelsline)) {
 
  803      foreach ($extralabelsline as $key => $value) {
 
  804        unset($_POST[
"options_".$key]);
 
  808    $result = $object->updateline(
 
  810      GETPOST(
'product_desc', 
'restricthtml'),
 
  819      GETPOSTISSET(
"type") ? 
GETPOST(
"type") : $line->product_type,
 
  828    unset($_POST[
'qty']);
 
  829    unset($_POST[
'type']);
 
  830    unset($_POST[
'idprodfournprice']);
 
  831    unset($_POST[
'remmise_percent']);
 
  832    unset($_POST[
'dp_desc']);
 
  833    unset($_POST[
'np_desc']);
 
  835    unset($_POST[
'fourn_ref']);
 
  836    unset($_POST[
'tva_tx']);
 
  837    unset($_POST[
'date_start']);
 
  838    unset($_POST[
'date_end']);
 
  839    unset($_POST[
'units']);
 
  840    unset($localtax1_tx);
 
  841    unset($localtax2_tx);
 
  843    unset($_POST[
'date_starthour']);
 
  844    unset($_POST[
'date_startmin']);
 
  845    unset($_POST[
'date_startsec']);
 
  846    unset($_POST[
'date_startday']);
 
  847    unset($_POST[
'date_startmonth']);
 
  848    unset($_POST[
'date_startyear']);
 
  849    unset($_POST[
'date_endhour']);
 
  850    unset($_POST[
'date_endmin']);
 
  851    unset($_POST[
'date_endsec']);
 
  852    unset($_POST[
'date_endday']);
 
  853    unset($_POST[
'date_endmonth']);
 
  854    unset($_POST[
'date_endyear']);
 
  859        $outputlangs = $langs;
 
  862          $newlang = 
GETPOST(
'lang_id', 
'aZ09');
 
  865          $newlang = $object->thirdparty->default_lang;
 
  867        if (!empty($newlang)) {
 
  869          $outputlangs->setDefaultLang($newlang);
 
  871        $model = $object->model_pdf;
 
  872        $ret = $object->fetch($id); 
 
  874        $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
 
  889  if ($action == 
'confirm_deleteline' && $confirm == 
'yes' && $usercancreate) {
 
  892    $result = $object->deleteline($lineid);
 
  895      $object->line_order(
true);
 
  897      $outputlangs = $langs;
 
  900        $newlang = 
GETPOST(
'lang_id', 
'aZ09');
 
  903        $newlang = $object->thirdparty->default_lang;
 
  905      if (!empty($newlang)) {
 
  907        $outputlangs->setDefaultLang($newlang);
 
  910        $ret = $object->fetch($object->id); 
 
  911        $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
 
  933      header(
'Location: '.$_SERVER[
"PHP_SELF"].
'?id='.$object->id);
 
  941  if ($action == 
'confirm_valid' && $confirm == 
'yes' && $usercanvalidate) {
 
  944    $object->date_commande = 
dol_now();
 
  945    $result = $object->valid($user);
 
  949        $outputlangs = $langs;
 
  952          $newlang = 
GETPOST(
'lang_id', 
'aZ09');
 
  955          $newlang = $object->thirdparty->default_lang;
 
  957        if (!empty($newlang)) {
 
  959          $outputlangs->setDefaultLang($newlang);
 
  961        $model = $object->model_pdf;
 
  962        $ret = $object->fetch($id); 
 
  964        $result = $object->generateDocument($model, $outputlangs, $hidedetails, $hidedesc, $hideref);
 
  976    if (!$error && !
getDolGlobalString(
'SUPPLIER_ORDER_NO_DIRECT_APPROVE') && $usercanapprove && !(
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') && $object->hasProductsOrServices(1))) {
 
  977      $action = 
'confirm_approve'; 
 
  987  if (($action == 
'confirm_approve' || $action == 
'confirm_approve2') && $confirm == 
'yes' && $usercanapprove) {
 
  990    $idwarehouse = 
GETPOST(
'idwarehouse', 
'int');
 
  992    $qualified_for_stock_change = 0;
 
  994      $qualified_for_stock_change = $object->hasProductsOrServices(2);
 
  996      $qualified_for_stock_change = $object->hasProductsOrServices(1);
 
 1000    if (isModEnabled(
'stock') && 
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') && $qualified_for_stock_change) { 
 
 1001      if (!$idwarehouse || $idwarehouse == -1) {
 
 1003        setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
"Warehouse")), 
null, 
'errors');
 
 1009      $result = $object->approve($user, $idwarehouse, ($action == 
'confirm_approve2' ? 1 : 0));
 
 1012          $outputlangs = $langs;
 
 1015            $newlang = 
GETPOST(
'lang_id', 
'aZ09');
 
 1018            $newlang = $object->thirdparty->default_lang;
 
 1020          if (!empty($newlang)) {
 
 1021            $outputlangs = 
new Translate(
"", $conf);
 
 1022            $outputlangs->setDefaultLang($newlang);
 
 1024          $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
 
 1035      header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$object->id);
 
 1042  if ($action == 
'confirm_refuse' && $confirm == 
'yes' && $usercanapprove) {
 
 1044      $object->refuse_note = 
GETPOST(
'refuse_note');
 
 1046    $result = $object->refuse($user);
 
 1048      header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$object->id);
 
 1056  if ($action == 
'commande') {
 
 1057    $methodecommande = 
GETPOST(
'methodecommande', 
'int');
 
 1061    } elseif ($methodecommande <= 0) {
 
 1062      setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"OrderMode")), 
null, 
'errors');
 
 1063      $action = 
'createorder';
 
 1067  if ($action == 
'confirm_commande' && $confirm == 
'yes' && $usercanorder) {
 
 1070    $result = $object->commande($user, 
GETPOST(
"datecommande"), 
GETPOST(
"methode", 
'int'), 
GETPOST(
'comment', 
'alphanohtml'));
 
 1073        $outputlangs = $langs;
 
 1076          $newlang = 
GETPOST(
'lang_id', 
'aZ09');
 
 1079          $newlang = $object->thirdparty->default_lang;
 
 1081        if (!empty($newlang)) {
 
 1082          $outputlangs = 
new Translate(
"", $conf);
 
 1083          $outputlangs->setDefaultLang($newlang);
 
 1085        $object->generateDocument($object->model_pdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
 
 1096      header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$object->id);
 
 1104  if ($action == 
'confirm_delete' && $confirm == 
'yes' && $usercandelete) {
 
 1105    $result = $object->delete($user);
 
 1107      header(
"Location: ".DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1');
 
 1115  if ($action == 
'confirm_clone' && $confirm == 
'yes' && $usercancreate) {
 
 1116    if (1 == 0 && !
GETPOST(
'clone_content') && !
GETPOST(
'clone_receivers')) {
 
 1117      setEventMessages($langs->trans(
"NoCloneOptionsSpecified"), 
null, 
'errors');
 
 1119      if ($object->id > 0) {
 
 1120        $orig = clone $object;
 
 1122        $result = $object->createFromClone($user, $socid);
 
 1124          header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?id='.$result);
 
 1136  if ($action == 
'livraison' && $usercanreceive) {
 
 1145        $result = $object->Livraison($user, $date_liv, 
GETPOST(
"type"), 
GETPOST(
"comment")); 
 
 1147          $langs->load(
"deliveries");
 
 1150        } elseif ($result == -3) {
 
 1159        setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentities(
"Delivery")), 
null, 
'errors');
 
 1170  if ($action == 
'confirm_cancel' && $confirm == 
'yes' && $usercanorder) {
 
 1172      $object->cancel_note = 
GETPOST(
'cancel_note');
 
 1174    $result = $object->cancel($user);
 
 1176      header(
"Location: ".$_SERVER[
"PHP_SELF"].
"?id=".$object->id);
 
 1184  include DOL_DOCUMENT_ROOT.
'/core/actions_printing.inc.php';
 
 1187  $triggersendname = 
'ORDER_SUPPLIER_SENTBYMAIL';
 
 1188  $autocopy = 
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
 
 1189  $trackid = 
'sord'.$object->id;
 
 1190  include DOL_DOCUMENT_ROOT.
'/core/actions_sendmails.inc.php';
 
 1193  $upload_dir = $conf->fournisseur->commande->dir_output;
 
 1194  $permissiontoadd = $usercancreate;
 
 1195  include DOL_DOCUMENT_ROOT.
'/core/actions_builddoc.inc.php';
 
 1198  if ($action == 
'update_extras') {
 
 1199    $object->oldcopy = 
dol_clone($object, 2);
 
 1202    $ret = $extrafields->setOptionalsFromPost(
null, $object, 
GETPOST(
'attribute', 
'restricthtml'));
 
 1210        $result = $object->insertExtraFields(
'ORDER_SUPPLIER_MODIFY');
 
 1219      $action = 
'edit_extras';
 
 1226  if ($action == 
'add' && $usercancreate) {
 
 1228    $selectedLines = 
GETPOST(
'toselect', 
'array');
 
 1230      setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentities(
'Supplier')), 
null, 
'errors');
 
 1239      $object->ref_supplier   = 
GETPOST(
'refsupplier');
 
 1240      $object->socid          = $socid;
 
 1241      $object->cond_reglement_id = 
GETPOST(
'cond_reglement_id', 
'int');
 
 1242      $object->mode_reglement_id = 
GETPOST(
'mode_reglement_id', 
'int');
 
 1243      $object->fk_account        = 
GETPOST(
'fk_account', 
'int');
 
 1244      $object->note_private = 
GETPOST(
'note_private', 
'restricthtml');
 
 1245      $object->note_public    = 
GETPOST(
'note_public', 
'restricthtml');
 
 1246      $object->delivery_date = $datelivraison;
 
 1247      $object->fk_incoterms = 
GETPOST(
'incoterm_id', 
'int');
 
 1248      $object->location_incoterms = 
GETPOST(
'location_incoterms', 
'alpha');
 
 1249      $object->multicurrency_code = 
GETPOST(
'multicurrency_code', 
'alpha');
 
 1250      $object->multicurrency_tx = 
price2num(
GETPOST(
'originmulticurrency_tx', 
'alpha'));
 
 1251      $object->fk_project       = 
GETPOST(
'projectid', 
'int');
 
 1255        $ret = $extrafields->setOptionalsFromPost(
null, $object);
 
 1263        if (!empty($origin) && !empty($originid)) {
 
 1264          $element = $subelement = $origin;
 
 1265          $classname = ucfirst($subelement);
 
 1266          if ($origin == 
'propal' || $origin == 
'proposal') {
 
 1267            $element = 
'comm/propal';
 
 1268            $subelement = 
'propal';
 
 1269            $classname = 
'Propal';
 
 1271          if ($origin == 
'order' || $origin == 
'commande') {
 
 1272            $element = $subelement = 
'commande';
 
 1273            $classname = 
'Commande';
 
 1275          if ($origin == 
'supplier_proposal') {
 
 1276            $classname = 
'SupplierProposal';
 
 1277            $element = 
'supplier_proposal';
 
 1278            $subelement = 
'supplier_proposal';
 
 1281          $object->origin = $origin;
 
 1282          $object->origin_id = $originid;
 
 1285          $object->linked_objects [$object->origin] = $object->origin_id;
 
 1286          $other_linked_objects = 
GETPOST(
'other_linked_objects', 
'array');
 
 1287          if (!empty($other_linked_objects)) {
 
 1288            $object->linked_objects = array_merge($object->linked_objects, $other_linked_objects);
 
 1291          $id = $object->create($user);
 
 1295            $srcobject = 
new $classname($db);
 
 1297            dol_syslog(
"Try to find source object origin=".$object->origin.
" originid=".$object->origin_id.
" to add lines");
 
 1298            $result = $srcobject->fetch($object->origin_id);
 
 1300              $tmpdate = $srcobject->delivery_date;
 
 1301              $object->setDeliveryDate($user, $tmpdate);
 
 1302              $object->set_id_projet($user, $srcobject->fk_project);
 
 1304              $lines = $srcobject->lines;
 
 1305              if (empty($lines) && method_exists($srcobject, 
'fetch_lines')) {
 
 1306                $srcobject->fetch_lines();
 
 1307                $lines = $srcobject->lines;
 
 1310              $fk_parent_line = 0;
 
 1311              $num = count($lines);
 
 1313              for ($i = 0; $i < $num; $i++) {
 
 1314                if (empty($lines[$i]->subprice) || $lines[$i]->qty <= 0 || !in_array($lines[$i]->
id, $selectedLines)) {
 
 1318                $label = (!empty($lines[$i]->label) ? $lines[$i]->label : 
'');
 
 1319                $desc = (!empty($lines[$i]->desc) ? $lines[$i]->desc : $lines[$i]->product_desc);
 
 1320                $product_type = (!empty($lines[$i]->product_type) ? $lines[$i]->product_type : 0);
 
 1323                if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) {
 
 1324                  $fk_parent_line = 0;
 
 1328                if (method_exists($lines[$i], 
'fetch_optionals')) {               
 
 1329                  $lines[$i]->fetch_optionals();
 
 1330                  $array_option = $lines[$i]->array_options;
 
 1334                $product_fourn_price_id = 0;
 
 1335                if ($origin == 
"commande") {
 
 1337                  $result = $productsupplier->find_min_price_product_fournisseur($lines[$i]->fk_product, $lines[$i]->qty, $object->socid);
 
 1338                  $lines[$i]->subprice = 0;
 
 1340                    $ref_supplier = $productsupplier->ref_supplier;
 
 1341                    $product_fourn_price_id = $productsupplier->product_fourn_price_id;
 
 1343                    foreach ($srcobject->lines as $li) {
 
 1344                      $sql = 
'SELECT price, unitprice, tva_tx, remise_percent, entity, ref_fourn';
 
 1345                      $sql .= 
' FROM '.MAIN_DB_PREFIX.
'product_fournisseur_price';
 
 1346                      $sql .= 
' WHERE fk_product = '.((int) $li->fk_product);
 
 1347                      $sql .= 
' AND entity IN ('.getEntity(
'product_fournisseur_price').
')';
 
 1348                      $sql .= 
' AND fk_soc = '.((int) $object->socid);
 
 1349                      $sql .= 
' ORDER BY unitprice ASC';
 
 1351                      $resql = $db->query($sql);
 
 1353                        $num_row = $db->num_rows($resql);
 
 1354                        if (empty($num_row)) {
 
 1355                          $li->remise_percent = 0;
 
 1357                          $obj = $db->fetch_object($resql);
 
 1358                          $li->subprice = $obj->unitprice;
 
 1359                          $li->remise_percent = $obj->remise_percent;
 
 1368                  $ref_supplier = $lines[$i]->ref_fourn;
 
 1369                  $product_fourn_price_id = 0;
 
 1372                $tva_tx = $lines[$i]->tva_tx;
 
 1374                if ($origin == 
"commande") {
 
 1376                  $soc->fetch($socid);
 
 1377                  $tva_tx = 
get_default_tva($soc, $mysoc, $lines[$i]->fk_product, $product_fourn_price_id);
 
 1380                $result = $object->addline(
 
 1382                  $lines[$i]->subprice,
 
 1385                  $lines[$i]->localtax1_tx,
 
 1386                  $lines[$i]->localtax2_tx,
 
 1387                  $lines[$i]->fk_product > 0 ? $lines[$i]->fk_product : 0,
 
 1388                  $product_fourn_price_id,
 
 1390                  $lines[$i]->remise_percent,
 
 1393                  $lines[$i]->product_type,
 
 1399                  $lines[$i]->fk_unit,
 
 1402                  !empty($lines[$i]->id) ? $lines[$i]->id : $lines[$i]->
rowid,
 
 1404                  $lines[$i]->special_code
 
 1414                if ($result > 0 && $lines[$i]->product_type == 9) {
 
 1415                  $fk_parent_line = $result;
 
 1423              $parameters = array(
'objFrom' => $srcobject);
 
 1424              $reshook = $hookmanager->executeHooks(
'createFrom', $parameters, $object, $action); 
 
 1439          $id = $object->create($user);
 
 1448        $langs->load(
"errors");
 
 1451        $_GET[
'socid'] = $_POST[
'socid'];
 
 1454        header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".urlencode($id));
 
 1460  if ($action == 
'webservice' && 
GETPOST(
'mode', 
'alpha') == 
"send" && !
GETPOST(
'cancel', 
'alpha')) {
 
 1461    $ws_url         = $object->thirdparty->webservices_url;
 
 1462    $ws_key         = $object->thirdparty->webservices_key;
 
 1463    $ws_user        = 
GETPOST(
'ws_user', 
'alpha');
 
 1464    $ws_password    = 
GETPOST(
'ws_password', 
'alpha');
 
 1465    $ws_entity      = 
GETPOST(
'ws_entity', 
'int');
 
 1466    $ws_thirdparty  = 
GETPOST(
'ws_thirdparty', 
'int');
 
 1469    $ws_ns = 
'http://www.dolibarr.org/ns/';
 
 1470    $ws_authentication = array(
 
 1471      'dolibarrkey'=>$ws_key,
 
 1472      'sourceapplication'=>
'DolibarrWebServiceClient',
 
 1474      'password'=>$ws_password,
 
 1475      'entity'=>$ws_entity
 
 1479    if (empty($conf->syncsupplierwebservices->enabled)) {
 
 1480      setEventMessages($langs->trans(
"WarningModuleNotActive", $langs->transnoentities(
"Module2650Name")), 
null, 
'mesgs');
 
 1481    } elseif (empty($ws_url) || empty($ws_key)) {
 
 1482      setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"), 
null, 
'errors');
 
 1483    } elseif (empty($ws_user) || empty($ws_password) || empty($ws_thirdparty)) {
 
 1487      $soapclient_order = 
new nusoap_client($ws_url.
"/webservices/server_order.php");
 
 1488      $soapclient_order->soap_defencoding = 
'UTF-8';
 
 1489      $soapclient_order->decodeUTF8(
false);
 
 1492      $soapclient_product = 
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
 
 1493      $soapclient_product->soap_defencoding = 
'UTF-8';
 
 1494      $soapclient_product->decodeUTF8(
false);
 
 1497      $order_lines = array();
 
 1498      foreach ($object->lines as $line) {
 
 1499        $ws_parameters = array(
'authentication' => $ws_authentication, 
'id' => 
'', 
'ref' => $line->ref_supplier);
 
 1500        $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns, 
'');
 
 1502        if ($result_product[
"result"][
"result_code"] == 
"OK") {
 
 1503          $order_lines[] = array(
 
 1504            'desc'          => $line->product_desc,
 
 1505            'type'          => $line->product_type,
 
 1506            'product_id'    => $result_product[
"product"][
"id"],
 
 1507            'vat_rate'      => $line->tva_tx,
 
 1508            'qty'           => $line->qty,
 
 1509            'price'         => $line->price,
 
 1510            'unitprice'     => $line->subprice,
 
 1511            'total_net'     => $line->total_ht,
 
 1512            'total_vat'     => $line->total_tva,
 
 1513            'total'         => $line->total_ttc,
 
 1514            'date_start'    => $line->date_start,
 
 1515            'date_end'      => $line->date_end,
 
 1522        'thirdparty_id' => $ws_thirdparty,
 
 1524        'total_net'     => $object->total_ht,
 
 1525        'total_var'     => $object->total_tva,
 
 1526        'total'         => $object->total_ttc,
 
 1527        'lines'         => $order_lines
 
 1530      $ws_parameters = array(
'authentication'=>$ws_authentication, 
'order' => $order);
 
 1531      $result_order = $soapclient_order->call(
"createOrder", $ws_parameters, $ws_ns, 
'');
 
 1533      if (empty($result_order[
"result"][
"result_code"])) { 
 
 1534        setEventMessages($langs->trans(
"SOAPError").
" '".$soapclient_order->error_str.
"'", 
null, 
'errors');
 
 1535      } elseif ($result_order[
"result"][
"result_code"] != 
"OK") { 
 
 1536        setEventMessages($langs->trans(
"SOAPError").
" '".$result_order[
"result"][
"result_code"].
"' - '".$result_order[
"result"][
"result_label"].
"'", 
null, 
'errors');
 
 1538        setEventMessages($langs->trans(
"RemoteOrderRef").
" ".$result_order[
"ref"], 
null, 
'mesgs');
 
 1544    if ($action == 
'addcontact') {
 
 1545      if ($object->id > 0) {
 
 1548        $result = $object->add_contact($contactid, $typeid, 
GETPOST(
"source", 
'aZ09'));
 
 1552        header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$object->id);
 
 1555        if ($object->error == 
'DB_ERROR_RECORD_ALREADY_EXISTS') {
 
 1556          $langs->load(
"errors");
 
 1557          setEventMessages($langs->trans(
"ErrorThisContactIsAlreadyDefinedAsThisType"), 
null, 
'errors');
 
 1562    } elseif ($action == 
'swapstatut' && $object->id > 0) {
 
 1564      $result = $object->swapContactStatus(
GETPOST(
'ligne', 
'int'));
 
 1565    } elseif ($action == 
'deletecontact' && $object->id > 0) {
 
 1567      $result = $object->delete_contact(
GETPOST(
"lineid", 
'int'));
 
 1570        header(
"Location: ".$_SERVER[
'PHP_SELF'].
"?id=".$object->id);
 
 1584$form = 
new Form($db);
 
 1587$productstatic = 
new Product($db);
 
 1588if (isModEnabled(
'project')) {
 
 1592$title = $object->ref.
" - ".$langs->trans(
'Card');
 
 1593if ($action == 
'create') {
 
 1594  $title = $langs->trans(
"NewOrderSupplier");
 
 1596$help_url = 
'EN:Module_Suppliers_Orders|FR:CommandeFournisseur|ES:Módulo_Pedidos_a_proveedores';
 
 1601if ($action == 
'create') {
 
 1602  print 
load_fiche_titre($langs->trans(
'NewOrderSupplier'), 
'', 
'supplier_order');
 
 1606  $currency_code = $conf->currency;
 
 1611    $societe->fetch($socid);
 
 1614  if (!empty($origin) && !empty($originid)) {
 
 1616    $element = $subelement = $origin;
 
 1617    $classname = ucfirst($subelement);
 
 1619    if (preg_match(
'/^([^_]+)_([^_]+)/i', $origin, $regs)) {
 
 1620      $element = $regs[1];
 
 1621      $subelement = $regs[2];
 
 1624    if ($origin == 
'propal' || $origin == 
'proposal') {
 
 1625      $classname = 
'Propal';
 
 1626      $element = 
'comm/propal';
 
 1627      $subelement = 
'propal';
 
 1629    if ($origin == 
'order' || $origin == 
'commande') {
 
 1630      $classname = 
'Commande';
 
 1631      $element = $subelement = 
'commande';
 
 1633    if ($origin == 
'supplier_proposal') {
 
 1634      $classname = 
'SupplierProposal';
 
 1635      $element = 
'supplier_proposal';
 
 1636      $subelement = 
'supplier_proposal';
 
 1642    $objectsrc = 
new $classname($db);
 
 1643    $objectsrc->fetch($originid);
 
 1644    if (empty($objectsrc->lines) && method_exists($objectsrc, 
'fetch_lines')) {
 
 1645      $objectsrc->fetch_lines();
 
 1647    $objectsrc->fetch_thirdparty();
 
 1650    $objectsrc->fetch_optionals();
 
 1651    $object->array_options = $objectsrc->array_options;
 
 1653    $projectid = (!empty($objectsrc->fk_project) ? $objectsrc->fk_project : 
'');
 
 1654    $ref_client = (!empty($objectsrc->ref_client) ? $objectsrc->ref_client : 
'');
 
 1655    if ($origin == 
"commande") {
 
 1656      $cond_reglement_id = 0;
 
 1657      $mode_reglement_id = 0;
 
 1658      $delivery_date = 
'';
 
 1659      $objectsrc->note_private = 
'';
 
 1660      $objectsrc->note_public = 
'';
 
 1661      if ($societe = $object->thirdparty) {
 
 1662        $cond_reglement_id = $societe->cond_reglement_supplier_id;
 
 1663        $mode_reglement_id = $societe->mode_reglement_supplier_id;
 
 1664        if (isModEnabled(
"multicurrency")) {
 
 1665          $currency_code = $societe->multicurrency_code;
 
 1667            $currency_tx = $societe->multicurrency_tx;
 
 1672      $soc = $objectsrc->thirdparty;
 
 1674      $cond_reglement_id  = (!empty($objectsrc->cond_reglement_id) ? $objectsrc->cond_reglement_id : (!empty($soc->cond_reglement_id) ? $soc->cond_reglement_id : 0));
 
 1675      $mode_reglement_id  = (!empty($objectsrc->mode_reglement_id) ? $objectsrc->mode_reglement_id : (!empty($soc->mode_reglement_id) ? $soc->mode_reglement_id : 0));
 
 1676      $fk_account         = (!empty($objectsrc->fk_account) ? $objectsrc->fk_account : (!empty($soc->fk_account) ? $soc->fk_account : 0));
 
 1677      $availability_id  = (!empty($objectsrc->availability_id) ? $objectsrc->availability_id : (!empty($soc->availability_id) ? $soc->availability_id : 0));
 
 1678      $shipping_method_id = (!empty($objectsrc->shipping_method_id) ? $objectsrc->shipping_method_id : (!empty($soc->shipping_method_id) ? $soc->shipping_method_id : 0));
 
 1679      $demand_reason_id = (!empty($objectsrc->demand_reason_id) ? $objectsrc->demand_reason_id : (!empty($soc->demand_reason_id) ? $soc->demand_reason_id : 0));
 
 1684      $datedelivery = (!empty($objectsrc->delivery_date) ? $objectsrc->delivery_date : 
'');
 
 1686      if (isModEnabled(
"multicurrency")) {
 
 1687        if (!empty($objectsrc->multicurrency_code)) {
 
 1688          $currency_code = $objectsrc->multicurrency_code;
 
 1690        if (
getDolGlobalString(
'MULTICURRENCY_USE_ORIGIN_TX') && !empty($objectsrc->multicurrency_tx)) {
 
 1691          $currency_tx = $objectsrc->multicurrency_tx;
 
 1695      $note_private = $object->getDefaultCreateValueFor(
'note_private', (!empty($objectsrc->note_private) ? $objectsrc->note_private : null));
 
 1696      $note_public = $object->getDefaultCreateValueFor(
'note_public', (!empty($objectsrc->note_public) ? $objectsrc->note_public : null));
 
 1699      $srccontactslist = $objectsrc->liste_contact(-1, 
'external', 1);
 
 1702    $cond_reglement_id  = !empty($societe->cond_reglement_supplier_id) ? $societe->cond_reglement_supplier_id : 0;
 
 1703    $mode_reglement_id  = !empty($societe->mode_reglement_supplier_id) ? $societe->mode_reglement_supplier_id : 0;
 
 1705    if (isModEnabled(
"multicurrency") && !empty($societe->multicurrency_code)) {
 
 1706      $currency_code = $societe->multicurrency_code;
 
 1709    $note_private = $object->getDefaultCreateValueFor(
'note_private');
 
 1710    $note_public = $object->getDefaultCreateValueFor(
'note_public');
 
 1714  if (empty($cond_reglement_id) && 
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID')) {
 
 1715    $cond_reglement_id = $conf->global->SUPPLIER_ORDER_DEFAULT_PAYMENT_TERM_ID;
 
 1717  if (empty($mode_reglement_id) && 
getDolGlobalString(
'SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID')) {
 
 1718    $mode_reglement_id = $conf->global->SUPPLIER_ORDER_DEFAULT_PAYMENT_MODE_ID;
 
 1721  print 
'<form name="add" action="'.$_SERVER[
"PHP_SELF"].
'" method="post">';
 
 1722  print 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
 1723  print 
'<input type="hidden" name="action" value="add">';
 
 1724  print 
'<input type="hidden" name="remise_percent" value="'.(empty($soc->remise_supplier_percent) ? 
'' : $soc->remise_supplier_percent).
'">';
 
 1725  print 
'<input type="hidden" name="origin" value="'.$origin.
'">';
 
 1726  print 
'<input type="hidden" name="originid" value="'.$originid.
'">';
 
 1728    print 
'<input type="hidden" name="backtopage" value="'.$backtopage.
'">';
 
 1730  if ($backtopageforcancel) {
 
 1731    print 
'<input type="hidden" name="backtopageforcancel" value="'.$backtopageforcancel.
'">';
 
 1734  if (!empty($currency_tx)) {
 
 1735    print 
'<input type="hidden" name="originmulticurrency_tx" value="'.$currency_tx.
'">';
 
 1741  $parameters = array();
 
 1743  $reshook = $hookmanager->executeHooks(
'tabContentCreateSupplierOrder', $parameters, $object, $action);
 
 1744  if (empty($reshook)) {
 
 1745    print 
'<table class="border centpercent">';
 
 1748    print 
'<tr><td class="titlefieldcreate">'.$langs->trans(
'Ref').
'</td><td>'.$langs->trans(
'Draft').
'</td></tr>';
 
 1751    print 
'<tr><td class="fieldrequired">'.$langs->trans(
'Supplier').
'</td>';
 
 1754    if (!empty($societe->id) && $societe->id > 0) {
 
 1755      print $societe->getNomUrl(1, 
'supplier');
 
 1756      print 
'<input type="hidden" name="socid" value="'.$societe->id.
'">';
 
 1758      $filter = 
'((s.fournisseur:=:1) AND (s.status:=:1))';
 
 1759      print 
img_picto(
'', 
'company', 
'class="pictofixedwidth"').$form->select_company((empty($socid) ? 
'' : $socid), 
'socid', $filter, 
'SelectThirdParty', 1, 0, null, 0, 
'minwidth175 maxwidth500 widthcentpercentminusxx');
 
 1763        $(document).ready(function() { 
 1764          $("#socid").change(function() { 
 1765            console.log("We have changed the company - Reload page"); 
 1767            $("input[name=action]").val("create"); 
 1768            $("form[name=add]").submit(); 
 1773      print 
' <a href="'.DOL_URL_ROOT.
'/societe/card.php?action=create&client=0&fournisseur=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create').
'"><span class="fa fa-plus-circle valignmiddle paddingleft" title="'.$langs->trans(
"AddThirdParty").
'"></span></a>';
 
 1777    if (!empty($societe->id) && $societe->id > 0) {
 
 1779      print 
'<tr><td>'.$langs->trans(
'Discounts').
'</td><td>';
 
 1781      $absolute_discount = $societe->getAvailableDiscounts(
'', 
'', 0, 1);
 
 1783      $thirdparty = $societe;
 
 1785      $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?socid='.$thirdparty->id.
'&action='.$action.
'&origin='.
GETPOST(
'origin').
'&originid='.
GETPOST(
'originid'));
 
 1786      include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
 
 1792    print 
'<tr><td>'.$langs->trans(
'RefSupplier').
'</td><td><input name="refsupplier" type="text"></td>';
 
 1796    print 
'<tr><td class="nowrap">'.$langs->trans(
'PaymentConditionsShort').
'</td><td>';
 
 1797    print 
img_picto(
'', 
'payment', 
'class="pictofixedwidth"');
 
 1798    print $form->getSelectConditionsPaiements((GETPOSTISSET(
'cond_reglement_id') &&  
GETPOST(
'cond_reglement_id') != 0) ? 
GETPOST(
'cond_reglement_id') : $cond_reglement_id, 
'cond_reglement_id', -1, 1);
 
 1802    print 
'<tr><td>'.$langs->trans(
'PaymentMode').
'</td><td>';
 
 1803    print 
img_picto(
'', 
'bank', 
'class="pictofixedwidth"');
 
 1804    $form->select_types_paiements((GETPOSTISSET(
'mode_reglement_id') && 
GETPOST(
'mode_reglement_id') != 0) ? 
GETPOST(
'mode_reglement_id') : $mode_reglement_id, 
'mode_reglement_id');
 
 1809    print $langs->trans(
'DateDeliveryPlanned');
 
 1816    print 
img_picto(
'', 
'action', 
'class="pictofixedwidth"');
 
 1817    print $form->selectDate($datedelivery ?: -1, 
'liv_', $usehourmin, $usehourmin, 
'', 
"set");
 
 1821    if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER') && isModEnabled(
"banque")) {
 
 1822      $langs->load(
"bank");
 
 1823      print 
'<tr><td>'.$langs->trans(
'BankAccount').
'</td><td>';
 
 1824      print 
img_picto(
'', 
'bank_account', 
'class="pictofixedwidth"');
 
 1825      $form->select_comptes($fk_account, 
'fk_account', 0, 
'', 1);
 
 1830    if (isModEnabled(
'project')) {
 
 1833      $langs->load(
'projects');
 
 1834      print 
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
 
 1835      print 
img_picto(
'', 
'project', 
'class="pictofixedwidth"').$formproject->select_projects((!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ? $societe->id : -1), $projectid, 
'projectid', 0, 0, 1, 1, 0, 0, 0, 
'', 1, 0, 
'maxwidth500');
 
 1836      print 
'   <a href="'.DOL_URL_ROOT.
'/projet/card.php?action=create&status=1'.(!empty($societe->id) ? 
'&socid='.$societe->id : 
"").
'&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create'.(!empty($societe->id) ? 
'&socid='.$societe->id : 
"")).
'"><span class="fa fa-plus-circle valignmiddle" title="'.$langs->trans(
"AddProject").
'"></span></a>';
 
 1841    if (isModEnabled(
'incoterm')) {
 
 1842      $fkincoterms = (!empty($object->fk_incoterms) ? $object->fk_incoterms : ($socid > 0 ? $societe->fk_incoterms : 
''));
 
 1843      $locincoterms = (!empty($object->location_incoterms) ? $object->location_incoterms : ($socid > 0 ? $societe->location_incoterms : 
''));
 
 1845      print 
'<td><label for="incoterm_id">'.$form->textwithpicto($langs->trans(
"IncotermLabel"), $object->label_incoterms, 1).
'</label></td>';
 
 1846      print 
'<td class="maxwidthonsmartphone">';
 
 1847      print 
img_picto(
'', 
'incoterm', 
'class="pictofixedwidth"');
 
 1848      print $form->select_incoterms($fkincoterms, $locincoterms);
 
 1853    if (isModEnabled(
"multicurrency")) {
 
 1855      print 
'<td>'.$form->editfieldkey(
'Currency', 
'multicurrency_code', 
'', $object, 0).
'</td>';
 
 1856      print 
'<td class="maxwidthonsmartphone">';
 
 1857      print 
img_picto(
'', 
'currency', 
'class="pictofixedwidth"');
 
 1858      print $form->selectMultiCurrency($currency_code, 
'multicurrency_code');
 
 1862    print 
'<tr><td>'.$langs->trans(
'NotePublic').
'</td>';
 
 1864    $doleditor = 
new DolEditor(
'note_public', isset($note_public) ? $note_public : 
GETPOST(
'note_public', 
'restricthtml'), 
'', 80, 
'dolibarr_notes', 
'In', 0, false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3, 
'90%');
 
 1865    print $doleditor->Create(1);
 
 1870    print 
'<tr><td>'.$langs->trans(
'NotePrivate').
'</td>';
 
 1872    $doleditor = 
new DolEditor(
'note_private', isset($note_private) ? $note_private : 
GETPOST(
'note_private', 
'restricthtml'), 
'', 80, 
'dolibarr_notes', 
'In', 0, false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3, 
'90%');
 
 1873    print $doleditor->Create(1);
 
 1878    if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
 
 1879      print 
"\n<!-- ".$classname.
" info -->";
 
 1881      print 
'<input type="hidden" name="amount"         value="'.$objectsrc->total_ht.
'">'.
"\n";
 
 1882      print 
'<input type="hidden" name="total"          value="'.$objectsrc->total_ttc.
'">'.
"\n";
 
 1883      print 
'<input type="hidden" name="tva"            value="'.$objectsrc->total_tva.
'">'.
"\n";
 
 1884      print 
'<input type="hidden" name="origin"         value="'.$objectsrc->element.
'">';
 
 1885      print 
'<input type="hidden" name="originid"       value="'.$objectsrc->id.
'">';
 
 1887      $newclassname = $classname;
 
 1888      print 
'<tr><td>'.$langs->trans($newclassname).
'</td><td>'.$objectsrc->getNomUrl(1, 
'supplier').
'</td></tr>';
 
 1889      print 
'<tr><td>'.$langs->trans(
'AmountHT').
'</td><td>'.
price($objectsrc->total_ht).
'</td></tr>';
 
 1890      print 
'<tr><td>'.$langs->trans(
'AmountVAT').
'</td><td>'.
price($objectsrc->total_tva).
"</td></tr>";
 
 1891      if ($mysoc->localtax1_assuj == 
"1" || $objectsrc->total_localtax1 != 0) {     
 
 1892        print 
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax1).
"</td></tr>";
 
 1895      if ($mysoc->localtax2_assuj == 
"1" || $objectsrc->total_localtax2 != 0) {     
 
 1896        print 
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td><td>'.
price($objectsrc->total_localtax2).
"</td></tr>";
 
 1899      print 
'<tr><td>'.$langs->trans(
'AmountTTC').
'</td><td>'.
price($objectsrc->total_ttc).
"</td></tr>";
 
 1901      if (isModEnabled(
"multicurrency")) {
 
 1902        print 
'<tr><td>'.$langs->trans(
'MulticurrencyAmountHT').
'</td><td>'.
price($objectsrc->multicurrency_total_ht).
'</td></tr>';
 
 1903        print 
'<tr><td>'.$langs->trans(
'MulticurrencyAmountVAT').
'</td><td>'.
price($objectsrc->multicurrency_total_tva).
'</td></tr>';
 
 1904        print 
'<tr><td>'.$langs->trans(
'MulticurrencyAmountTTC').
'</td><td>'.
price($objectsrc->multicurrency_total_ttc).
'</td></tr>';
 
 1909    $parameters = array();
 
 1910    $reshook = $hookmanager->executeHooks(
'formObjectOptions', $parameters, $object, $action); 
 
 1911    print $hookmanager->resPrint;
 
 1913    if (empty($reshook)) {
 
 1914      print $object->showOptionals($extrafields, 
'create');
 
 1922  print $form->buttonsSaveCancel(
"CreateDraft");
 
 1925  if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
 
 1926    $title = $langs->trans(
'ProductsAndServices');
 
 1929    print 
'<div class="div-table-responsive-no-min">';
 
 1930    print 
'<table class="noborder centpercent">';
 
 1932    $selectedLines = array();
 
 1934    $objectsrc->printOriginLinesList(
'', $selectedLines);
 
 1940} elseif (!empty($object->id)) {
 
 1942  $result = $object->fetch($id, $ref);
 
 1943  $object->fetch_thirdparty();
 
 1945  $societe = $object->thirdparty;
 
 1947  $author = 
new User($db);
 
 1948  $author->fetch($object->user_author_id);
 
 1952  $title = $langs->trans(
"SupplierOrder");
 
 1959  if ($action == 
'delete') {
 
 1960    $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'DeleteOrder'), $langs->trans(
'ConfirmDeleteOrder'), 
'confirm_delete', 
'', 0, 2);
 
 1964  if ($action == 
'clone') {
 
 1965    $filter = 
'(s.fournisseur:=:1)';
 
 1967    $formquestion = array(
 
 1968      array(
'type' => 
'other', 
'name' => 
'socid', 
'label' => $langs->trans(
"SelectThirdParty"), 
'value' => $form->select_company(
GETPOST(
'socid', 
'int'), 
'socid', $filter))
 
 1971    $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ToClone'), $langs->trans(
'ConfirmCloneOrder', $object->ref), 
'confirm_clone', $formquestion, 
'yes', 1);
 
 1975  if ($action == 
'valid') {
 
 1976    $object->date_commande = 
dol_now();
 
 1979    if (preg_match(
'/^[\(]?PROV/i', $object->ref) || empty($object->ref)) { 
 
 1980      $newref = $object->getNextNumRef($object->thirdparty);
 
 1982      $newref = $object->ref;
 
 1989      $text = $langs->trans(
'ConfirmValidateOrder', $newref);
 
 1990      if (isModEnabled(
'notification')) {
 
 1991        require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
 
 1992        $notify = 
new Notify($db);
 
 1994        $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_VALIDATE', $object->socid, $object);
 
 1997      $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'ValidateOrder'), $text, 
'confirm_valid', 
'', 0, 1);
 
 2002  if ($action == 
'approve' || $action == 
'approve2') {
 
 2003    $qualified_for_stock_change = 0;
 
 2005      $qualified_for_stock_change = $object->hasProductsOrServices(2);
 
 2007      $qualified_for_stock_change = $object->hasProductsOrServices(1);
 
 2010    $formquestion = array();
 
 2011    if (isModEnabled(
'stock') && 
getDolGlobalString(
'STOCK_CALCULATE_ON_SUPPLIER_VALIDATE_ORDER') && $qualified_for_stock_change) {
 
 2012      $langs->load(
"stocks");
 
 2013      require_once DOL_DOCUMENT_ROOT.
'/product/class/html.formproduct.class.php';
 
 2016      if ($conf->browser->name == 
'ie') {
 
 2019      $formquestion = array(
 
 2023        array(
'type' => 
'other', 
'name' => 
'idwarehouse', 
'label' => $langs->trans(
"SelectWarehouseForStockIncrease"), 
'value' => $formproduct->selectWarehouses(
GETPOST(
'idwarehouse', 
'int'), 
'idwarehouse', 
'', 1, 0, 0, 
'', 0, $forcecombo))
 
 2026    $text = $langs->trans(
"ConfirmApproveThisOrder", $object->ref);
 
 2027    if (isModEnabled(
'notification')) {
 
 2028      require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
 
 2029      $notify = 
new Notify($db);
 
 2031      $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_APPROVE', $object->socid, $object);
 
 2034    $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".$object->id, $langs->trans(
"ApproveThisOrder"), $text, 
"confirm_".$action, $formquestion, 1, 1, 240);
 
 2038  if ($action == 
'refuse') {
 
 2039    $formquestion = array(
 
 2042        'name' => 
'refuse_note',
 
 2043        'label' => $langs->trans(
"Reason"),
 
 2045        'morecss' => 
'minwidth300' 
 2048    $formconfirm  = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"DenyingThisOrder"), $langs->trans(
"ConfirmDenyingThisOrder", $object->ref), 
"confirm_refuse", $formquestion, 0, 1);
 
 2052  if ($action == 
'cancel') {
 
 2053    $formquestion = array(
 
 2056        'name' => 
'cancel_note',
 
 2057        'label' => $langs->trans(
"Reason"),
 
 2059        'morecss' => 
'minwidth300' 
 2062    $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=$object->id", $langs->trans(
"Cancel"), $langs->trans(
"ConfirmCancelThisOrder", $object->ref), 
"confirm_cancel", $formquestion, 0, 1);
 
 2066  if ($action == 
'commande') {
 
 2068    if (!empty($conf->notification->enabled)) {
 
 2069      require_once DOL_DOCUMENT_ROOT.
'/core/class/notify.class.php';
 
 2070      $notify = 
new Notify($db);
 
 2072      $text .= $notify->confirmMessage(
'ORDER_SUPPLIER_SUBMIT', $object->socid, $object);
 
 2074    $formconfirm = $form->formconfirm($_SERVER[
'PHP_SELF'].
"?id=".$object->id.
"&datecommande=".$date_com.
"&methode=".
GETPOST(
"methodecommande").
"&comment=".urlencode(
GETPOST(
"comment")), $langs->trans(
"MakeOrder"), $langs->trans(
"ConfirmMakeOrder", 
dol_print_date($date_com, 
'day')), 
"confirm_commande", 
'', 0, 2);
 
 2078  if ($action == 
'ask_deleteline') {
 
 2079    $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'), 
'confirm_deleteline', 
'', 0, 1);
 
 2082  $parameters = array(
'formConfirm' => $formconfirm, 
'lineid'=>$lineid);
 
 2083  $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action); 
 
 2084  if (empty($reshook)) {
 
 2085    $formconfirm .= $hookmanager->resPrint;
 
 2086  } elseif ($reshook > 0) {
 
 2087    $formconfirm = $hookmanager->resPrint;
 
 2096  $linkback = 
'<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?restore_lastsearch_values=1'.(!empty($socid) ? 
'&socid='.$socid : 
'').
'">'.$langs->trans(
"BackToList").
'</a>';
 
 2098  $morehtmlref = 
'<div class="refidno">';
 
 2100  $morehtmlref .= $form->editfieldkey(
"RefSupplier", 
'ref_supplier', $object->ref_supplier, $object, $usercancreate, 
'string', 
'', 0, 1);
 
 2101  $morehtmlref .= $form->editfieldval(
"RefSupplier", 
'ref_supplier', $object->ref_supplier, $object, $usercancreate, 
'string'.(isset($conf->global->THIRDPARTY_REF_INPUT_SIZE) ? 
':' . 
getDolGlobalString(
'THIRDPARTY_REF_INPUT_SIZE') : 
''), 
'', null, null, 
'', 1);
 
 2103  $morehtmlref .= 
'<br>';
 
 2104  if (
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') && !empty($usercancreate) && $action == 
'edit_thirdparty') {
 
 2105    $morehtmlref .= 
'<form method="post" action="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'">';
 
 2106    $morehtmlref .= 
'<input type="hidden" name="action" value="set_thirdparty">';
 
 2107    $morehtmlref .= 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
 2108    $filter = 
'(s.fournisseur:=:1)';
 
 2109    $morehtmlref .= $form->select_company($object->thirdparty->id, 
'new_socid', $filter, 
'', 0, 0, array(), 0, 
'minwidth300');
 
 2110    $morehtmlref .= 
'<input type="submit" class="button valignmiddle" value="'.$langs->trans(
"Modify").
'">';
 
 2111    $morehtmlref .= 
'</form>';
 
 2113  if (!
getDolGlobalString(
'MAIN_CAN_EDIT_SUPPLIER_ON_SUPPLIER_ORDER') || $action != 
'edit_thirdparty') {
 
 2115      $morehtmlref .= 
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=edit_thirdparty&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetThirdParty')).
'</a>';
 
 2117    $morehtmlref .= $object->thirdparty->getNomUrl(1, 
'supplier');
 
 2119      $morehtmlref .= 
' (<a href="'.DOL_URL_ROOT.
'/fourn/commande/list.php?socid='.$object->thirdparty->id.
'&search_company='.urlencode($object->thirdparty->name).
'">'.$langs->trans(
"OtherOrders").
'</a>)';
 
 2124  if (isModEnabled(
'project')) {
 
 2125    $langs->load(
"projects");
 
 2126    $morehtmlref .= 
'<br>';
 
 2127    if ($permissiontoadd) {
 
 2128      $morehtmlref .= 
img_picto($langs->trans(
"Project"), 
'project', 
'class="pictofixedwidth"');
 
 2129      if ($action != 
'classify' && $caneditproject) {
 
 2130        $morehtmlref .= 
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
 
 2132      $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, (!
getDolGlobalString(
'PROJECT_CAN_ALWAYS_LINK_TO_ALL_SUPPLIERS') ? $object->socid : -1), $object->fk_project, ($action == 
'classify' ? 
'projectid' : 
'none'), 1, 0, 0, 1, 
'', 
'maxwidth300');
 
 2134      if (!empty($object->fk_project)) {
 
 2136        $proj->fetch($object->fk_project);
 
 2137        $morehtmlref .= $proj->getNomUrl(1);
 
 2139          $morehtmlref .= 
'<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).
'</span>';
 
 2144  $morehtmlref .= 
'</div>';
 
 2147  dol_banner_tab($object, 
'ref', $linkback, 1, 
'ref', 
'ref', $morehtmlref);
 
 2150  $parameters = array();
 
 2152  $reshook = $hookmanager->executeHooks(
'tabContentViewSupplierOrder', $parameters, $object, $action);
 
 2153  if (empty($reshook)) {
 
 2154    print 
'<div class="fichecenter">';
 
 2155    print 
'<div class="fichehalfleft">';
 
 2156    print 
'<div class="underbanner clearboth"></div>';
 
 2158    print 
'<table class="border tableforfield centpercent">';
 
 2161    if ($object->methode_commande_id > 0) {
 
 2166      print 
'<tr><td class="titlefield">'.$langs->trans(
"Date").
'</td><td>';
 
 2167      print $object->date_commande ? 
dol_print_date($object->date_commande, $usehourmin ? 
'dayhour' : 
'day') : 
'';
 
 2168      if ($object->hasDelay() && !empty($object->delivery_date) && !empty($object->date_commande)) {
 
 2169        print 
' '.img_picto($langs->trans(
"Late").
' : '.$object->showDelay(), 
"warning");
 
 2173      if ($object->methode_commande) {
 
 2174        print 
'<tr><td>'.$langs->trans(
"Method").
'</td><td>'.$object->getInputMethod().
'</td></tr>';
 
 2179    print 
'<tr><td class="titlefield">'.$langs->trans(
"AuthorRequest").
'</td>';
 
 2180    print 
'<td>'.$author->getNomUrl(-1, 
'', 0, 0, 0).
'</td>';
 
 2185      $filterabsolutediscount = 
"fk_invoice_supplier_source IS NULL"; 
 
 2186      $filtercreditnote = 
"fk_invoice_supplier_source IS NOT NULL"; 
 
 2188      $filterabsolutediscount = 
"fk_invoice_supplier_source IS NULL OR (description LIKE '(DEPOSIT)%' AND description NOT LIKE '(EXCESS PAID)%')";
 
 2189      $filtercreditnote = 
"fk_invoice_supplier_source IS NOT NULL AND (description NOT LIKE '(DEPOSIT)%' OR description LIKE '(EXCESS PAID)%')";
 
 2192    $absolute_discount = $societe->getAvailableDiscounts(
'', $filterabsolutediscount, 0, 1);
 
 2193    $absolute_creditnote = $societe->getAvailableDiscounts(
'', $filtercreditnote, 0, 1);
 
 2194    $absolute_discount = 
price2num($absolute_discount, 
'MT');
 
 2195    $absolute_creditnote = 
price2num($absolute_creditnote, 
'MT');
 
 2197    print 
'<tr><td class="titlefield">'.$langs->trans(
'Discounts').
'</td><td>';
 
 2199    $thirdparty = $societe;
 
 2201    $backtopage = urlencode($_SERVER[
"PHP_SELF"].
'?id='.$object->id);
 
 2202    include DOL_DOCUMENT_ROOT.
'/core/tpl/object_discounts.tpl.php';
 
 2207    $langs->load(
'bills');
 
 2208    print 
'<tr><td class="nowrap">';
 
 2209    print 
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
 
 2210    print $langs->trans(
'PaymentConditions');
 
 2212    if ($action != 
'editconditions') {
 
 2213      print 
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editconditions&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->trans(
'SetConditions'), 1).
'</a></td>';
 
 2215    print 
'</tr></table>';
 
 2217    if ($action == 
'editconditions') {
 
 2218      $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id, 
'cond_reglement_id');
 
 2220      $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->cond_reglement_id, 
'none');
 
 2226    $langs->load(
'bills');
 
 2227    print 
'<tr><td class="nowrap">';
 
 2228    print 
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
 
 2229    print $langs->trans(
'PaymentMode');
 
 2231    if ($action != 
'editmode') {
 
 2232      print 
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmode&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->trans(
'SetMode'), 1).
'</a></td>';
 
 2234    print 
'</tr></table>';
 
 2236    if ($action == 
'editmode') {
 
 2237      $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id, 
'mode_reglement_id', 
'DBIT', 1, 1);
 
 2239      $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->mode_reglement_id, 
'none');
 
 2244    if (isModEnabled(
"multicurrency")) {
 
 2248      print 
'<table class="nobordernopadding centpercent"><tr><td>';
 
 2249      print $form->editfieldkey(
'Currency', 
'multicurrency_code', 
'', $object, 0);
 
 2251      if ($action != 
'editmulticurrencycode' && $object->statut == $object::STATUS_DRAFT) {
 
 2252        print 
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencycode&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
 
 2254      print 
'</tr></table>';
 
 2256      if ($action == 
'editmulticurrencycode') {
 
 2257        $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code, 
'multicurrency_code');
 
 2259        $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code, 
'none');
 
 2264      if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
 
 2267        print 
'<table class="nobordernopadding centpercent"><tr>';
 
 2269        print $form->editfieldkey(
'CurrencyRate', 
'multicurrency_tx', 
'', $object, 0);
 
 2271        if ($action != 
'editmulticurrencyrate' && $object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
 
 2272          print 
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmulticurrencyrate&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetMultiCurrencyCode'), 1).
'</a></td>';
 
 2274        print 
'</tr></table>';
 
 2276        if ($action == 
'editmulticurrencyrate' || $action == 
'actualizemulticurrencyrate') {
 
 2277          if ($action == 
'actualizemulticurrencyrate') {
 
 2280          $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx, 
'multicurrency_tx', $object->multicurrency_code);
 
 2282          $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx, 
'none', $object->multicurrency_code);
 
 2283          if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
 
 2284            print 
'<div class="inline-block">         ';
 
 2285            print 
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=actualizemulticurrencyrate">'.$langs->trans(
"ActualizeCurrency").
'</a>';
 
 2294    if (
getDolGlobalString(
'BANK_ASK_PAYMENT_BANK_DURING_SUPPLIER_ORDER') && isModEnabled(
"banque")) {
 
 2295      print 
'<tr><td class="nowrap">';
 
 2296      print 
'<table class="nobordernopadding centpercent"><tr><td class="nowrap">';
 
 2297      print $langs->trans(
'BankAccount');
 
 2299      if ($action != 
'editbankaccount' && $usercancreate) {
 
 2300        print 
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editbankaccount&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->trans(
'SetBankAccount'), 1).
'</a></td>';
 
 2302      print 
'</tr></table>';
 
 2304      if ($action == 
'editbankaccount') {
 
 2305        $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account, 
'fk_account', 1);
 
 2307        $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account, 
'none');
 
 2315    print 
'<td>'.$langs->trans(
'NbDaysToDelivery').
' '.
img_picto($langs->trans(
'DescNbDaysToDelivery'), 
'info', 
'style="cursor:help"').
'</td>';
 
 2316    print 
'<td>'.$object->getMaxDeliveryTimeDay($langs).
'</td>';
 
 2321    print 
'<table class="nobordernopadding centpercent"><tr><td>';
 
 2322    print $langs->trans(
'DateDeliveryPlanned');
 
 2324    if ($action != 
'editdate_livraison') {
 
 2325      print 
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editdate_livraison&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->trans(
'SetDeliveryDate'), 1).
'</a></td>';
 
 2327    print 
'</tr></table>';
 
 2329    if ($action == 
'editdate_livraison') {
 
 2330      print 
'<form name="setdate_livraison" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post">';
 
 2331      print 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
 2332      print 
'<input type="hidden" name="action" value="setdate_livraison">';
 
 2337      print $form->selectDate($object->delivery_date ? $object->delivery_date : -1, 
'liv_', $usehourmin, $usehourmin, 
'', 
"setdate_livraison");
 
 2338      print 
'<input type="submit" class="button button-edit smallpaddingimp valign middle" value="'.$langs->trans(
'Modify').
'">';
 
 2341      $usehourmin = 
'day';
 
 2343        $usehourmin = 
'dayhour';
 
 2345      print $object->delivery_date ? 
dol_print_date($object->delivery_date, $usehourmin) : 
' ';
 
 2346      if ($object->hasDelay() && !empty($object->delivery_date) && ($object->statut == $object::STATUS_ORDERSENT || $object->statut == $object::STATUS_RECEIVED_PARTIALLY)) {
 
 2347        print 
' '.img_picto($langs->trans(
"Late").
' : '.$object->showDelay(), 
"warning");
 
 2353    if (isModEnabled(
'incoterm')) {
 
 2355      print 
'<table class="nobordernopadding centpercent"><tr><td>';
 
 2356      print $langs->trans(
'IncotermLabel');
 
 2357      print 
'<td><td class="right">';
 
 2358      if ($usercancreate) {
 
 2359        print 
'<a class="editfielda" href="'.DOL_URL_ROOT.
'/fourn/commande/card.php?id='.$object->id.
'&action=editincoterm&token='.newToken().
'">'.
img_edit().
'</a>';
 
 2363      print 
'</td></tr></table>';
 
 2366      if ($action != 
'editincoterm') {
 
 2367        print $form->textwithpicto(
dol_escape_htmltag($object->display_incoterms()), $object->label_incoterms, 1);
 
 2369        print $form->select_incoterms((!empty($object->fk_incoterms) ? $object->fk_incoterms : 
''), (!empty($object->location_incoterms) ? $object->location_incoterms : 
''), $_SERVER[
'PHP_SELF'].
'?id='.$object->id);
 
 2375    include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
 
 2380    print 
'<div class="fichehalfright">';
 
 2381    print 
'<div class="underbanner clearboth"></div>';
 
 2383    print 
'<table class="border tableforfield centpercent">';
 
 2387    print 
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountHT') . 
'</td>';
 
 2388    print 
'<td class="nowrap amountcard right">' . 
price($object->total_ht, 
'', $langs, 0, -1, -1, $conf->currency) . 
'</td>';
 
 2389    if (isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
 
 2391      print 
'<td class="nowrap amountcard right">' . 
price($object->multicurrency_total_ht, 
'', $langs, 0, -1, -1, $object->multicurrency_code) . 
'</td>';
 
 2397    print 
'<td class="titlefieldmiddle">' . $langs->trans(
'AmountVAT') . 
'</td>';
 
 2398    print 
'<td class="nowrap amountcard right">' . 
price($object->total_tva, 
'', $langs, 0, -1, -1, $conf->currency) . 
'</td>';
 
 2399    if (isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
 
 2401      print 
'<td class="nowrap amountcard right">' . 
price($object->multicurrency_total_tva, 
'', $langs, 0, -1, -1, $object->multicurrency_code) . 
'</td>';
 
 2406    if ($mysoc->localtax1_assuj == 
"1" || $object->total_localtax1 != 0) {
 
 2408      print 
'<td class="titlefieldmiddle">' . $langs->transcountry(
"AmountLT1", $mysoc->country_code) . 
'</td>';
 
 2409      print 
'<td class="nowrap amountcard right">' . 
price($object->total_localtax1, 
'', $langs, 0, -1, -1, $conf->currency) . 
'</td>';
 
 2410      if (isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
 
 2411        print 
'<td class="nowrap amountcard right">' . 
price($object->total_localtax1, 
'', $langs, 0, -1, -1, $object->multicurrency_code) . 
'</td>';
 
 2415      if ($mysoc->localtax2_assuj == 
"1" || $object->total_localtax2 != 0) {
 
 2417        print 
'<td>' . $langs->transcountry(
"AmountLT2", $mysoc->country_code) . 
'</td>';
 
 2418        print 
'<td class="nowrap amountcard right">' . 
price($object->total_localtax2, 
'', $langs, 0, -1, -1, $conf->currency) . 
'</td>';
 
 2419        if (isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
 
 2420          print 
'<td class="nowrap amountcard right">' . 
price($object->total_localtax2, 
'', $langs, 0, -1, -1, $object->multicurrency_code) . 
'</td>';
 
 2427    if (
getDolGlobalString(
'ORDER_MANAGE_MIN_AMOUNT') && $object->total_ht < $object->thirdparty->supplier_order_min_amount) {
 
 2428      $alert = 
' ' . 
img_warning($langs->trans(
'OrderMinAmount') . 
': ' . 
price($object->thirdparty->supplier_order_min_amount));
 
 2433    print 
'<td>' . $langs->trans(
'AmountTTC') . 
'</td>';
 
 2434    print 
'<td class="nowrap amountcard right">' . 
price($object->total_ttc, 
'', $langs, 0, -1, -1, $conf->currency) . $alert . 
'</td>';
 
 2435    if (isModEnabled(
"multicurrency") && ($object->multicurrency_code && $object->multicurrency_code != $conf->currency)) {
 
 2437      print 
'<td class="nowrap amountcard right">' . 
price($object->multicurrency_total_ttc, 
'', $langs, 0, -1, -1, $object->multicurrency_code) . 
'</td>';
 
 2452    print 
'<div class="clearboth"></div><br>';
 
 2455      $blocname = 
'contacts';
 
 2456      $title = $langs->trans(
'ContactsAddresses');
 
 2457      include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
 
 2461      $blocname = 
'notes';
 
 2462      $title = $langs->trans(
'Notes');
 
 2463      include DOL_DOCUMENT_ROOT.
'/core/tpl/bloc_showhide.tpl.php';
 
 2472    print 
' <form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.(($action != 
'editline') ? 
'' : 
'#line_'.
GETPOST(
'lineid', 
'int')).
'" method="POST"> 
 2473    <input type="hidden" name="token" value="'.newToken().
'"> 
 2474    <input type="hidden" name="action" value="' . (($action != 
'editline') ? 
'addline' : 
'updateline').
'"> 
 2475    <input type="hidden" name="mode" value=""> 
 2476    <input type="hidden" name="page_y" value=""> 
 2477    <input type="hidden" name="id" value="'.$object->id.
'"> 
 2478    <input type="hidden" name="socid" value="'.$societe->id.
'"> 
 2481    if (!empty($conf->use_javascript_ajax) && $object->statut == 0) {
 
 2482      include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
 
 2485    print 
'<div class="div-table-responsive-no-min">';
 
 2486    print 
'<table id="tablelines" class="noborder noshadow centpercent">';
 
 2489    global $forceall, $senderissupplier, $dateSelector, $inputalsopricewithtax;
 
 2492    $inputalsopricewithtax = 1;
 
 2493    $senderissupplier = 2; 
 
 2495      $senderissupplier = 1;
 
 2499    if (!empty($object->lines)) {
 
 2500      $object->printObjectLines($action, $object->thirdparty, $mysoc, $lineid, 1);
 
 2503    $num = count($object->lines);
 
 2507      if ($action != 
'editline') {
 
 2510        $parameters = array();
 
 2511        $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action); 
 
 2515        if (empty($reshook)) {
 
 2516          $object->formAddObjectLine(1, $societe, $mysoc);
 
 2531  if ($user->socid == 0 && $action != 
'delete') {
 
 2532    if ($action != 
'createorder' && $action != 
'presend' && $action != 
'editline') {
 
 2533      print 
'<div class="tabsAction">';
 
 2535      $parameters = array();
 
 2536      $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action); 
 
 2538      if (empty($reshook)) {
 
 2539        $object->fetchObjectLinked(); 
 
 2542        if ($object->statut == 0 && $num > 0) {
 
 2543          if ($usercanvalidate) {
 
 2544            $tmpbuttonlabel = $langs->trans(
'Validate');
 
 2546              $tmpbuttonlabel = $langs->trans(
"ValidateAndApprove");
 
 2549            print 
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=valid">';
 
 2550            print $tmpbuttonlabel;
 
 2562          if ($usercanorder) {
 
 2563            print 
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.newToken().
'">'.$langs->trans(
"Modify").
'</a>';
 
 2569          if ($usercanapprove) {
 
 2570            if (
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED') && $object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED && !empty($object->user_approve_id)) {
 
 2571              print 
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"FirstApprovalAlreadyDone")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
 
 2573              print 
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=approve">'.$langs->trans(
"ApproveOrder").
'</a>';
 
 2576            print 
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"ApproveOrder").
'</a>';
 
 2581        if (
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED') && $object->total_ht >= $conf->global->SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED) {
 
 2583            if ($usercanapprovesecond) {
 
 2584              if (!empty($object->user_approve_id2)) {
 
 2585                print 
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"SecondApprovalAlreadyDone")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
 
 2587                print 
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=approve2">'.$langs->trans(
"Approve2Order").
'</a>';
 
 2590              print 
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"Approve2Order").
'</a>';
 
 2597          if ($usercanapprove || $usercanapprovesecond) {
 
 2598            print 
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=refuse">'.$langs->trans(
"RefuseOrder").
'</a>';
 
 2600            print 
'<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$langs->trans(
"RefuseOrder").
'</a>';
 
 2605        if (empty($user->socid)) {
 
 2607            if ($usercanorder) {
 
 2608              print 
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=presend&mode=init#formmailbeforetitle">'.$langs->trans(
'SendMail').
'</a>';
 
 2616          if (!$buttonshown && $usercanapprove) {
 
 2618              || (
getDolGlobalString(
'SUPPLIER_ORDER_REOPEN_BY_APPROVER_ONLY') && $user->id == $object->user_approve_id)) {
 
 2619              print 
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
 
 2623          if (!$buttonshown && $usercanapprovesecond && 
getDolGlobalString(
'SUPPLIER_ORDER_3_STEPS_TO_BE_APPROVED')) {
 
 2625              || (
getDolGlobalString(
'SUPPLIER_ORDER_REOPEN_BY_APPROVER2_ONLY') && $user->id == $object->user_approve_id2)) {
 
 2626              print 
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.newToken().
'">'.$langs->trans(
"Disapprove").
'</a>';
 
 2630        if (in_array($object->statut, array(3, 4, 5, 6, 7, 9))) {
 
 2631          if ($usercanorder) {
 
 2632            print 
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=reopen&token='.newToken().
'">'.$langs->trans(
"ReOpen").
'</a>';
 
 2639          $labelofbutton = $langs->trans(
'ReceiveProducts');
 
 2640          if (isModEnabled(
'reception')) {
 
 2641            $labelofbutton = $langs->trans(
"CreateReception");
 
 2642            if (!empty($object->linkedObjects[
'reception'])) {
 
 2643              foreach ($object->linkedObjects[
'reception'] as $element) {
 
 2644                if ($element->statut >= 0) {
 
 2652          if (in_array($object->statut, array(3, 4, 5))) {
 
 2653            if (isModEnabled(
"supplier_order") && $usercanreceive) {
 
 2654              print 
'<div class="inline-block divButAction"><a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/commande/dispatch.php?id='.$object->id.
'">'.$labelofbutton.
'</a></div>';
 
 2656              print 
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans(
"NotAllowed")).
'">'.$labelofbutton.
'</a></div>';
 
 2662          if ($usercanorder) {
 
 2663            print 
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=createorder#makeorder">'.$langs->trans(
"MakeOrder").
'</a></div>';
 
 2665            print 
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">'.$langs->trans(
"MakeOrder").
'</a></div>';
 
 2671          if ($usercanreceive) {
 
 2672            print 
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&token='.newToken().
'&action=classifyreception#classifyreception">'.$langs->trans(
"ClassifyReception").
'</a></div>';
 
 2679        if (isModEnabled(
"supplier_invoice") && ($object->statut >= 2 && $object->statut != 7 && $object->billed != 1)) {  
 
 2680          if ($user->hasRight(
'fournisseur', 
'facture', 
'creer') || $user->hasRight(
"supplier_invoice", 
"creer")) {
 
 2681            print 
'<a class="butAction" href="'.DOL_URL_ROOT.
'/fourn/facture/card.php?action=create&origin='.$object->element.
'&originid='.$object->id.
'&socid='.$object->socid.
'">'.$langs->trans(
"SupplierOrderCreateBill").
'</a>';
 
 2687        if ($usercancreate && $object->statut >= 2 && $object->statut != 7 && $object->billed != 1) {  
 
 2688          if (!isModEnabled(
'facture')) {
 
 2689            print 
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=classifybilled&token='.newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
 
 2691            if (!empty($object->linkedObjectsIds[
'invoice_supplier'])) {
 
 2692              if ($user->hasRight(
'fournisseur', 
'facture', 
'creer') || $user->hasRight(
"supplier_invoice", 
"creer")) {
 
 2693                print 
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=classifybilled&token='.newToken().
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
 
 2696              print 
'<a class="butActionRefused" href="#" title="'.dol_escape_htmltag($langs->trans(
"NeedAtLeastOneInvoice")).
'">'.$langs->trans(
"ClassifyBilled").
'</a>';
 
 2702        if (!empty($conf->syncsupplierwebservices->enabled) && $object->statut >= 2) { 
 
 2703          print 
'<a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=webservice&token='.newToken().
'&mode=init">'.$langs->trans(
'CreateRemoteOrder').
'</a>';
 
 2707        if ($usercancreate) {
 
 2708          print 
'<a class="butAction" href="'.$_SERVER[
'PHP_SELF'].
'?id='.$object->id.
'&socid='.$object->socid.
'&action=clone&object=order">'.$langs->trans(
"ToClone").
'</a>';
 
 2713          if ($usercanorder) {
 
 2714            print 
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=cancel">'.$langs->trans(
"CancelOrder").
'</a>';
 
 2719        if (!empty($usercandelete)) {
 
 2720          if ($hasreception) {
 
 2721            print 
'<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans(
"ReceptionExist").
'">'.$langs->trans(
"Delete").
'</a>';
 
 2723            print 
'<a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=delete&token='.newToken().
'">'.$langs->trans(
"Delete").
'</a>';
 
 2733      print 
'<!-- form to record supplier order -->'.
"\n";
 
 2734      print 
'<form name="commande" id="makeorder" action="card.php?id='.$object->id.
'&action=commande" method="POST">';
 
 2736      print 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
 2737      print 
'<input type="hidden" name="action" value="commande">';
 
 2739      print 
'<table class="noborder centpercent">';
 
 2741      print 
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderDate").
'</td><td>';
 
 2742      $date_com = 
dol_mktime(
GETPOST(
'rehour', 
'int'), 
GETPOST(
'remin', 
'int'), 
GETPOST(
'resec', 
'int'), 
GETPOST(
'remonth', 
'int'), 
GETPOST(
'reday', 
'int'), 
GETPOST(
'reyear', 
'int'));
 
 2743      print $form->selectDate($date_com ?: 
'', 
'', 0, 0, 
'', 
"commande", 1, 1);
 
 2747      print 
'<tr><td class="fieldrequired">'.$langs->trans(
"OrderMode").
'</td><td>';
 
 2748      $formorder->selectInputMethod(
GETPOST(
'methodecommande'), 
"methodecommande", 1);
 
 2751      print 
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment" value="'.
GETPOST(
'comment').
'"></td></tr>';
 
 2753      print 
'<tr><td class="center" colspan="2">';
 
 2754      print 
'<input type="submit" name="makeorder" class="button" value="'.$langs->trans(
"ToOrder").
'">';
 
 2755      print 
'     ';
 
 2756      print 
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
 
 2765    if (
GETPOST(
'modelselected')) {
 
 2766      $action = 
'presend';
 
 2769    if ($action != 
'createorder' && $action != 
'presend') {
 
 2770      print 
'<div class="fichecenter"><div class="fichehalfleft">';
 
 2774      $file = $conf->fournisseur->dir_output.
'/commande/'.$objref.
'/'.$objref.
'.pdf';
 
 2775      $relativepath = $objref.
'/'.$objref.
'.pdf';
 
 2776      $filedir = $conf->fournisseur->dir_output.
'/commande/'.$objref;
 
 2777      $urlsource = $_SERVER[
"PHP_SELF"].
"?id=".$object->id;
 
 2778      $genallowed = $usercanread;
 
 2779      $delallowed = $usercancreate;
 
 2780      $modelpdf = (!empty($object->model_pdf) ? $object->model_pdf : (!
getDolGlobalString(
'COMMANDE_SUPPLIER_ADDON_PDF') ? 
'' : $conf->global->COMMANDE_SUPPLIER_ADDON_PDF));
 
 2782      print $formfile->showdocuments(
'commande_fournisseur', $objref, $filedir, $urlsource, $genallowed, $delallowed, $modelpdf, 1, 0, 0, 0, 0, 
'', 
'', 
'', $object->thirdparty->default_lang, 
'', $object);
 
 2783      $somethingshown = $formfile->numoffiles;
 
 2786      $linktoelem = $form->showLinkToObjectBlock($object, 
null, array(
'supplier_order', 
'order_supplier'));
 
 2787      $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
 
 2789      print 
'</div><div class="fichehalfright">';
 
 2791      if ($action == 
'classifyreception') {
 
 2794          print 
'<!-- form to record purchase order received -->'.
"\n";
 
 2795          print 
'<form id="classifyreception" action="card.php?id='.$object->id.
'" method="post">';
 
 2796          print 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
 2797          print 
'<input type="hidden" name="action" value="livraison">';
 
 2800          print 
'<table class="noborder centpercent">';
 
 2802          print 
'<tr><td>'.$langs->trans(
"DeliveryDate").
'</td><td>';
 
 2804          print $form->selectDate($datepreselected, 
'', 1, 1, 
'', 
"commande", 1, 1);
 
 2805          print 
"</td></tr>\n";
 
 2807          print 
'<tr><td class="fieldrequired">'.$langs->trans(
"Delivery").
"</td><td>\n";
 
 2809          $liv[
''] = 
' ';
 
 2810          $liv[
'tot'] = $langs->trans(
"CompleteOrNoMoreReceptionExpected");
 
 2811          $liv[
'par'] = $langs->trans(
"PartialWoman");
 
 2812          $liv[
'nev'] = $langs->trans(
"NeverReceived");
 
 2813          $liv[
'can'] = $langs->trans(
"Canceled");
 
 2815          print $form->selectarray(
"type", $liv);
 
 2818          print 
'<tr><td>'.$langs->trans(
"Comment").
'</td><td><input class="quatrevingtpercent" type="text" name="comment"></td></tr>';
 
 2819          print 
'<tr><td class="center" colspan="2">';
 
 2820          print 
'<input type="submit" name="receive" class="button" value="'.$langs->trans(
"Receive").
'">';
 
 2821          print 
'     ';
 
 2822          print 
'<input type="submit" name="cancel" class="button button-cancel" value="'.$langs->trans(
"Cancel").
'">';
 
 2831      include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
 
 2833      $somethingshown = 
$formactions->showactions($object, 
'order_supplier', $socid, 1, 
'listaction'.($genallowed ? 
'largetitle' : 
''));
 
 2835      print 
'</div></div>';
 
 2841    if ($action == 
'webservice' && 
GETPOST(
'mode', 
'alpha') != 
"send" && !
GETPOST(
'cancel', 
'alpha')) {
 
 2842      $mode        = 
GETPOST(
'mode', 
'alpha');
 
 2843      $ws_url      = $object->thirdparty->webservices_url;
 
 2844      $ws_key      = $object->thirdparty->webservices_key;
 
 2845      $ws_user     = 
GETPOST(
'ws_user', 
'alpha');
 
 2846      $ws_password = 
GETPOST(
'ws_password', 
'alpha');
 
 2849      $ws_ns = 
'http://www.dolibarr.org/ns/';
 
 2850      $ws_authentication = array(
 
 2851      'dolibarrkey'=>$ws_key,
 
 2852      'sourceapplication'=>
'DolibarrWebServiceClient',
 
 2854      'password'=>$ws_password,
 
 2861      if (empty($ws_url) || empty($ws_key)) {
 
 2862        setEventMessages($langs->trans(
"ErrorWebServicesFieldsRequired"), 
null, 
'errors');
 
 2864        $error_occurred = 
true; 
 
 2865      } elseif ($mode != 
"init" && (empty($ws_user) || empty($ws_password))) {
 
 2870      if ($mode == 
"init") {
 
 2872        print 
'<table class="border centpercent">';
 
 2873        print 
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post">';
 
 2874        print 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
 2875        print 
'<input type="hidden" name="action" value="webservice">';
 
 2876        print 
'<input type="hidden" name="mode" value="check">';
 
 2878        if ($error_occurred) {
 
 2879          print 
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
 
 2880          print 
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
 
 2883          print 
'<tr><td>'.$langs->trans(
"WebServiceURL").
'</td><td colspan="3">'.
dol_print_url($ws_url).
'</td></tr>';
 
 2885          print 
'<tr><td>'.$langs->trans(
"User").
'</td><td><input class="width100" type="text" name="ws_user"></td></tr>';
 
 2887          print 
'<tr><td>'.$langs->trans(
"Password").
'</td><td><input class="width100" type="text" name="ws_password"></td></tr>';
 
 2889          print 
'<tr><td class="center" colspan="2">';
 
 2890          print 
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"CreateRemoteOrder").
'">';
 
 2891          print 
'     ';
 
 2893          print 
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
 
 2900      } elseif ($mode == 
"check") {
 
 2902        $ws_thirdparty = 
'';
 
 2903        $error_occurred = 
false;
 
 2906        $soapclient_user = 
new nusoap_client($ws_url.
"/webservices/server_user.php");
 
 2907        $soapclient_user->soap_defencoding = 
'UTF-8';
 
 2908        $soapclient_user->decodeUTF8(
false);
 
 2911        $ws_parameters = array(
'authentication'=>$ws_authentication, 
'id' => 
'', 
'ref'=>$ws_user);
 
 2912        $result_user = $soapclient_user->call(
"getUser", $ws_parameters, $ws_ns, 
'');
 
 2913        $user_status_code = $result_user[
"result"][
"result_code"];
 
 2915        if ($user_status_code == 
"OK") {
 
 2917          $ws_entity = $result_user[
"user"][
"entity"];
 
 2918          $ws_authentication[
'entity'] = $ws_entity;
 
 2919          $ws_thirdparty = $result_user[
"user"][
"fk_thirdparty"];
 
 2920          if (empty($ws_thirdparty)) {
 
 2921            setEventMessages($langs->trans(
"RemoteUserMissingAssociatedSoc"), 
null, 
'errors');
 
 2922            $error_occurred = 
true;
 
 2925            $soapclient_product = 
new nusoap_client($ws_url.
"/webservices/server_productorservice.php");
 
 2926            $soapclient_product->soap_defencoding = 
'UTF-8';
 
 2927            $soapclient_product->decodeUTF8(
false);
 
 2931            foreach ($object->lines as $line) {
 
 2933              $ref_supplier = $line->ref_supplier;
 
 2934              $line_id = $i.
"º) ".$line->product_ref.
": ";
 
 2935              if (empty($ref_supplier)) {
 
 2938              $ws_parameters = array(
'authentication' => $ws_authentication, 
'id' => 
'', 
'ref' => $ref_supplier);
 
 2939              $result_product = $soapclient_product->call(
"getProductOrService", $ws_parameters, $ws_ns, 
'');
 
 2940              if (!$result_product) {
 
 2941                setEventMessages($line_id.$langs->trans(
"SOAPError").
" ".$soapclient_product->error_str.
" - ".$soapclient_product->response, 
null, 
'errors');
 
 2942                $error_occurred = 
true;
 
 2947              $status_code = $result_product[
"result"][
"result_code"];
 
 2948              if (empty($status_code)) { 
 
 2949                setEventMessages($langs->trans(
"SOAPError").
" '".$soapclient_order->error_str.
"'", 
null, 
'errors');
 
 2950              } elseif ($status_code != 
"OK") { 
 
 2951                if ($status_code == 
"NOT_FOUND") {
 
 2952                  setEventMessages($line_id.$langs->trans(
"SupplierMissingRef").
" '".$ref_supplier.
"'", 
null, 
'warnings');
 
 2954                  setEventMessages($line_id.$langs->trans(
"ResponseNonOK").
" '".$status_code.
"' - '".$result_product[
"result"][
"result_label"].
"'", 
null, 
'errors');
 
 2955                  $error_occurred = 
true;
 
 2962              $supplier_price = 
price($result_product[
"product"][
"price_net"]); 
 
 2963              $local_price = 
null; 
 
 2966              $product_fourn_list = $product_fourn->list_product_fournisseur_price($line->fk_product);
 
 2967              if (count($product_fourn_list) > 0) {
 
 2968                foreach ($product_fourn_list as $product_fourn_line) {
 
 2970                  if ($product_fourn_line->fourn_id == $object->socid && $product_fourn_line->fourn_ref == $ref_supplier) {
 
 2971                    $local_price = 
price($product_fourn_line->fourn_price);
 
 2976              if ($local_price != 
null && $local_price != $supplier_price) {
 
 2977                setEventMessages($line_id.$langs->trans(
"RemotePriceMismatch").
" ".$supplier_price.
" - ".$local_price, 
null, 
'warnings');
 
 2981              if (empty($result_product[
"product"][
"status_tosell"])) {
 
 2982                setEventMessages($line_id.$langs->trans(
"ProductStatusNotOnSellShort").
" '".$ref_supplier.
"'", 
null, 
'warnings');
 
 2986        } elseif ($user_status_code == 
"PERMISSION_DENIED") {
 
 2987          setEventMessages($langs->trans(
"RemoteUserNotPermission"), 
null, 
'errors');
 
 2988          $error_occurred = 
true;
 
 2989        } elseif ($user_status_code == 
"BAD_CREDENTIALS") {
 
 2990          setEventMessages($langs->trans(
"RemoteUserBadCredentials"), 
null, 
'errors');
 
 2991          $error_occurred = 
true;
 
 2993          setEventMessages($langs->trans(
"ResponseNonOK").
" '".$user_status_code.
"'", 
null, 
'errors');
 
 2994          $error_occurred = 
true;
 
 2998        print 
'<form action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'" method="post">';
 
 2999        print 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
 3000        print 
'<input type="hidden" name="action" value="webservice">';
 
 3001        print 
'<input type="hidden" name="mode" value="send">';
 
 3002        print 
'<input type="hidden" name="ws_user" value="'.$ws_user.
'">';
 
 3003        print 
'<input type="hidden" name="ws_password" value="'.$ws_password.
'">';
 
 3004        print 
'<input type="hidden" name="ws_entity" value="'.$ws_entity.
'">';
 
 3005        print 
'<input type="hidden" name="ws_thirdparty" value="'.$ws_thirdparty.
'">';
 
 3006        if ($error_occurred) {
 
 3007          print 
"<br>".$langs->trans(
"ErrorOccurredReviseAndRetry").
"<br>";
 
 3009          print 
'<input type="submit" class="button" id="ws_submit" name="ws_submit" value="'.$langs->trans(
"Confirm").
'">';
 
 3010          print 
'     ';
 
 3012        print 
'<input class="button button-cancel" type="submit" id="cancel" name="cancel" value="'.$langs->trans(
"Cancel").
'">';
 
 3018    $modelmail = 
'order_supplier_send';
 
 3019    $defaulttopic = 
'SendOrderRef';
 
 3020    $diroutput = $conf->fournisseur->commande->dir_output;
 
 3021    $autocopy = 
'MAIN_MAIL_AUTOCOPY_SUPPLIER_ORDER_TO';
 
 3022    $trackid = 
'sord'.$object->id;
 
 3024    include DOL_DOCUMENT_ROOT.
'/core/tpl/card_presend.tpl.php';
 
if(preg_match('/set_([a-z0-9_\-]+)/i', $action, $reg)) if(preg_match('/del_([a-z0-9_\-]+)/i', $action, $reg)) if($action=='set') elseif( $action=='specimen') elseif($action=='setmodel') elseif( $action=='del') elseif($action=='setdoc') $formactions
View.
 
if(!defined('NOREQUIRESOC')) if(!defined( 'NOREQUIRETRAN')) if(!defined('NOTOKENRENEWAL')) if(!defined( 'NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined( 'NOREQUIREAJAX')) llxHeader()
Empty header.
 
Class to manage predefined suppliers products.
 
const STATUS_RECEIVED_PARTIALLY
Received partially.
 
const STATUS_VALIDATED
Validated status.
 
const STATUS_RECEIVED_COMPLETELY
Received completely.
 
const STATUS_DRAFT
Draft status.
 
const STATUS_ACCEPTED
Accepted.
 
const STATUS_ORDERSENT
Order sent, shipment on process.
 
Class to manage line orders.
 
Class to manage a WYSIWYG editor.
 
static getIdAndTxFromCode($dbs, $code, $date_document='')
Get id and rate of currency from code.
 
Class to manage notifications.
 
Class ProductCombination Used to represent a product combination.
 
Class to manage predefined suppliers products.
 
Class to manage products or services.
 
Class to manage projects.
 
Class to manage third parties objects (customers, suppliers, prospects...)
 
Class to manage translations.
 
Class to manage Dolibarr users.
 
print $script_file $mode $langs defaultlang(is_numeric($duration_value) ? " delay=". $duration_value :"").(is_numeric($duration_value2) ? " after cd cd cd description as description
Only used if Module[ID]Desc translation string is not found.
 
ordersupplier_prepare_head(CommandeFournisseur $object)
Prepare array with list of tabs.
 
dol_banner_tab($object, $paramid, $morehtml='', $shownav=1, $fieldid='rowid', $fieldref='ref', $morehtmlref='', $moreparam='', $nodbprefix=0, $morehtmlleft='', $morehtmlstatus='', $onlybanner=0, $morehtmlright='')
Show tab footer of a card.
 
dol_mktime($hour, $minute, $second, $month, $day, $year, $gm='auto', $check=1)
Return a timestamp date built from detailed informations (by default a local PHP server timestamp) Re...
 
load_fiche_titre($titre, $morehtmlright='', $picto='generic', $pictoisfullpath=0, $id='', $morecssontable='', $morehtmlcenter='')
Load a title with picto.
 
img_warning($titlealt='default', $moreatt='', $morecss='pictowarning')
Show warning logo.
 
dol_get_fiche_head($links=array(), $active='', $title='', $notab=0, $picto='', $pictoisfullpath=0, $morehtmlright='', $morecss='', $limittoshow=0, $moretabssuffix='', $dragdropfile=0)
Show tabs of a record.
 
price2num($amount, $rounding='', $option=0)
Function that return a number with universal decimal format (decimal separator is '.
 
dol_print_error($db='', $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
 
dol_get_fiche_end($notab=0)
Return tab footer of a card.
 
dol_print_url($url, $target='_blank', $max=32, $withpicto=0, $morecss='')
Show Url link.
 
price($amount, $form=0, $outlangs='', $trunc=1, $rounding=-1, $forcerounding=-1, $currency_code='')
Function to format a value into an amount for visual output Function used into PDF and HTML pages.
 
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs='', $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
 
dol_now($mode='auto')
Return date for now.
 
getDolGlobalInt($key, $default=0)
Return a Dolibarr global constant int value.
 
img_picto($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0, $alt='', $morecss='', $marginleftonlyshort=2)
Show picto whatever it's its name (generic function)
 
if(!function_exists( 'dol_getprefix')) dol_include_once($relpath, $classname='')
Make an include_once using default root and alternate root if it fails.
 
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
 
get_default_npr(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that returns whether VAT must be recoverable collected VAT (e.g.: VAT NPR in France)
 
dol_concatdesc($text1, $text2, $forxml=false, $invert=false)
Concat 2 descriptions with a new line between them (second operand after first one with appropriate n...
 
dol_htmloutput_events($disabledoutputofmessages=0)
Print formated messages to output (Used to show messages on html output).
 
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
 
setEventMessages($mesg, $mesgs, $style='mesgs', $messagekey='', $noduplicate=0)
Set event messages in dol_events session object.
 
get_localtax($vatrate, $local, $thirdparty_buyer="", $thirdparty_seller="", $vatnpr=0)
Return localtax rate for a particular vat, when selling a product with vat $vatrate,...
 
dol_sanitizeFileName($str, $newstr='_', $unaccent=1)
Clean a string to use it as a file name.
 
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
 
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
 
get_default_tva(Societe $thirdparty_seller, Societe $thirdparty_buyer, $idprod=0, $idprodfournprice=0)
Function that return vat rate of a product line (according to seller, buyer and product vat rate) VAT...
 
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename='', $restricttologhandler='', $logcontext=null)
Write log message into outputs.
 
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags='', $escapeonlyhtmltags=0, $cleanalsojavascript=0)
Returns text escaped for inclusion in HTML alt or title or value tags, or into values of HTML input f...
 
publicphonebutton2 phonegreen basiclayout basiclayout TotalHT VATCode TotalVAT TotalLT1 TotalLT2 TotalTTC TotalHT clearboth nowraponall right right takeposterminal SELECT e rowid
 
restrictedArea(User $user, $features, $object=0, $tableandshare='', $feature2='', $dbt_keyfield='fk_soc', $dbt_select='rowid', $isdraft=0, $mode=0)
Check permissions of a user to show a page and an object.