35require 
'../../main.inc.php';
 
   36require_once DOL_DOCUMENT_ROOT.
'/compta/facture/class/facture-rec.class.php';
 
   37require_once DOL_DOCUMENT_ROOT.
'/product/class/product.class.php';
 
   38require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formother.class.php';
 
   39if (isModEnabled(
'project')) {
 
   40  include_once DOL_DOCUMENT_ROOT.
'/projet/class/project.class.php';
 
   43require_once DOL_DOCUMENT_ROOT.
'/core/class/html.formprojet.class.php';
 
   44require_once DOL_DOCUMENT_ROOT.
'/core/class/doleditor.class.php';
 
   45require_once DOL_DOCUMENT_ROOT.
'/core/lib/invoice.lib.php';
 
   46require_once DOL_DOCUMENT_ROOT.
'/core/class/extrafields.class.php';
 
   49$langs->loadLangs(array(
'bills', 
'companies', 
'compta', 
'admin', 
'other', 
'products', 
'banks'));
 
   51$action     = 
GETPOST(
'action', 
'alpha');
 
   52$massaction = 
GETPOST(
'massaction', 
'alpha');
 
   53$show_files = 
GETPOST(
'show_files', 
'int');
 
   54$confirm    = 
GETPOST(
'confirm', 
'alpha');
 
   55$cancel     = 
GETPOST(
'cancel', 
'alpha');
 
   56$toselect   = 
GETPOST(
'toselect', 
'array');
 
   57$contextpage = 
GETPOST(
'contextpage', 
'aZ') ? 
GETPOST(
'contextpage', 
'aZ') : 
'invoicetemplatelist'; 
 
   61$lineid = 
GETPOST(
'lineid', 
'int');
 
   64  $socid = $user->socid;
 
   66$objecttype = 
'facture_rec';
 
   67if ($action == 
"create" || $action == 
"add") {
 
   70$projectid = 
GETPOST(
'projectid', 
'int');
 
   72$year_date_when = 
GETPOST(
'year_date_when');
 
   73$month_date_when = 
GETPOST(
'month_date_when');
 
   74$selectedLines = 
GETPOST(
'toselect', 
'array');
 
   76$limit = 
GETPOST(
'limit', 
'int') ? 
GETPOST(
'limit', 
'int') : $conf->liste_limit;
 
   77$sortfield = 
GETPOST(
'sortfield', 
'aZ09comma');
 
   78$sortorder = 
GETPOST(
'sortorder', 
'aZ09comma');
 
   79$page = GETPOSTISSET(
'pageplusone') ? (
GETPOST(
'pageplusone') - 1) : 
GETPOST(
"page", 
'int');
 
   80if (empty($page) || $page == -1) {
 
   83$offset = $limit * $page;
 
   88  $sortfield = 
'f.titre';
 
   94if (($id > 0 || $ref) && $action != 
'create' && $action != 
'add') {
 
   95  $ret = $object->fetch($id, $ref);
 
  105$hookmanager->initHooks(array(
'invoicereccard', 
'globalcard'));
 
  109$extrafields->fetch_name_optionals_label($object->table_element);
 
  111$search_array_options = $extrafields->getOptionalsFromPost($object->table_element, 
'', 
'search_');
 
  113$permissionnote = $user->hasRight(
'facture', 
'creer'); 
 
  114$permissiondellink = $user->hasRight(
'facture', 
'creer'); 
 
  115$permissiontoedit = $user->hasRight(
'facture', 
'creer'); 
 
  117$usercanread = $user->hasRight(
'facture', 
'lire');
 
  118$usercancreate = $user->hasRight(
'facture', 
'creer');
 
  119$usercanissuepayment = $user->hasRight(
'facture', 
'paiement');
 
  120$usercandelete = $user->hasRight(
'facture', 
'supprimer');
 
  121$usercanvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && $usercancreate) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($user->rights->facture->invoice_advance->validate)));
 
  122$usercansend = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->rights->facture->invoice_advance->send);
 
  123$usercanreopen = (!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') || $user->rights->facture->invoice_advance->reopen);
 
  124$usercanunvalidate = ((!
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($usercancreate)) || (
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && !empty($user->rights->facture->invoice_advance->unvalidate)));
 
  126$usercanproductignorepricemin = ((
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS') && empty($user->rights->produit->ignore_price_min_advance)) || !
getDolGlobalString(
'MAIN_USE_ADVANCED_PERMS'));
 
  127$usercancreatemargin = $user->hasRight(
"margins", 
"creer");
 
  128$usercanreadallmargin = $user->hasRight(
"margins", 
"liretous");
 
  129$usercancreatewithdrarequest = $user->hasRight(
"prelevement", 
"bons", 
"creer");
 
  135$result = 
restrictedArea($user, 
'facture', $object->id, $objecttype);
 
  142if (
GETPOST(
'cancel', 
'alpha')) {
 
  146if (!
GETPOST(
'confirmmassaction', 
'alpha') && $massaction != 
'presend' && $massaction != 
'confirm_presend') {
 
  150$parameters = array();
 
  151$reshook = $hookmanager->executeHooks(
'doActions', $parameters, $object, $action); 
 
  156if (empty($reshook)) {
 
  157  if (
GETPOST(
'cancel', 
'alpha')) {
 
  162  include DOL_DOCUMENT_ROOT.
'/core/actions_changeselectedfields.inc.php';
 
  165  include DOL_DOCUMENT_ROOT.
'/core/actions_setnotes.inc.php'; 
 
  167  include DOL_DOCUMENT_ROOT.
'/core/actions_dellink.inc.php'; 
 
  169  include DOL_DOCUMENT_ROOT.
'/core/actions_lineupdown.inc.php'; 
 
  180  if ($action == 
'add') {
 
  181    if (!
GETPOST(
'title', 
'alphanohtml')) {
 
  182      setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Title")), 
null, 
'errors');
 
  187    $frequency = 
GETPOST(
'frequency', 
'int');
 
  188    $reyear = 
GETPOST(
'reyear', 
'int');
 
  189    $remonth = 
GETPOST(
'remonth', 
'int');
 
  190    $reday = 
GETPOST(
'reday', 
'int');
 
  191    $rehour = 
GETPOST(
'rehour', 
'int');
 
  192    $remin = 
GETPOST(
'remin', 
'int');
 
  193    $nb_gen_max = 
GETPOST(
'nb_gen_max', 
'int');
 
  196    if (
GETPOST(
'frequency', 
'int')) {
 
  197      if (empty($reyear) || empty($remonth) || empty($reday)) {
 
  198        setEventMessages($langs->transnoentities(
"ErrorFieldRequired", $langs->trans(
"Date")), 
null, 
'errors');
 
  210      $object->subtype               = 
GETPOST(
'subtype');
 
  211      $object->title                 = 
GETPOST(
'title', 
'alphanohtml');
 
  212      $object->note_private          = 
GETPOST(
'note_private', 
'restricthtml');
 
  213      $object->note_public           = 
GETPOST(
'note_public', 
'restricthtml');
 
  214      $object->model_pdf             = 
GETPOST(
'modelpdf', 
'alphanohtml');
 
  215      $object->usenewprice           = 
GETPOST(
'usenewprice', 
'alphanohtml');
 
  217      $object->mode_reglement_id     = 
GETPOST(
'mode_reglement_id', 
'int');
 
  218      $object->cond_reglement_id     = 
GETPOST(
'cond_reglement_id', 
'int');
 
  220      $object->frequency             = $frequency;
 
  221      $object->unit_frequency        = 
GETPOST(
'unit_frequency', 
'alpha');
 
  222      $object->nb_gen_max            = $nb_gen_max;
 
  223      $object->auto_validate         = 
GETPOST(
'auto_validate', 
'int');
 
  224      $object->generate_pdf          = 
GETPOST(
'generate_pdf', 
'int');
 
  225      $object->fk_project            = $projectid;
 
  227      $date_next_execution = 
dol_mktime($rehour, $remin, 0, $remonth, $reday, $reyear);
 
  228      $object->date_when = $date_next_execution;
 
  230      $ret = $extrafields->setOptionalsFromPost(
null, $object);
 
  236      if (
GETPOST(
'facid', 
'int') > 0) {
 
  238        $srcObject->fetch(
GETPOST(
'facid', 
'int'));
 
  240        $srcObject->fetchObjectLinked();
 
  242        if (!empty($srcObject->linkedObjectsIds[
'contrat'])) {
 
  243          $contractidid = reset($srcObject->linkedObjectsIds[
'contrat']);
 
  245          $object->origin = 
'contrat';
 
  246          $object->origin_id = $contractidid;
 
  247          $object->linked_objects[$object->origin] = $object->origin_id;
 
  253      $oldinvoice = 
new Facture($db);
 
  254      $oldinvoice->fetch(
GETPOST(
'facid', 
'int'));
 
  256      $onlylines = 
GETPOST(
'toselect', 
'array');
 
  258      $result = $object->create($user, $oldinvoice->id, 0, $onlylines);
 
  260        $result = $oldinvoice->delete($user, 1);
 
  275        header(
"Location: ".$_SERVER[
'PHP_SELF'].
'?facid='.$object->id);
 
  286  if ($action == 
'confirm_delete' && $confirm == 
'yes' && $user->hasRight(
'facture', 
'supprimer')) {
 
  287    $object->delete($user);
 
  289    header(
"Location: ".DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php');
 
  295  if ($action == 
'setconditions' && $user->hasRight(
'facture', 
'creer')) {
 
  297    $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"PaymentTerm"));
 
  298    $result = $object->setPaymentTerms(
GETPOST(
'cond_reglement_id', 
'int'));
 
  299  } elseif ($action == 
'setmode' && $user->hasRight(
'facture', 
'creer')) {
 
  301    $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"PaymentMode"));
 
  302    $result = $object->setPaymentMethods(
GETPOST(
'mode_reglement_id', 
'int'));
 
  303  } elseif ($action == 
'classin' && $user->hasRight(
'facture', 
'creer')) {
 
  305    $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"Project"));
 
  306    $object->setProject(
GETPOST(
'projectid', 
'int'));
 
  307  } elseif ($action == 
'setref' && $user->hasRight(
'facture', 
'creer')) {
 
  309    $object->context[
'actionmsg'] = $langs->trans(
"FieldXModifiedFromYToZ", $langs->transnoentitiesnoconv(
"Title"), $object->title, $ref);
 
  310    $result = $object->setValueFrom(
'titre', $ref, 
'', 
null, 
'text', 
'', $user, 
'BILLREC_MODIFY');
 
  312      $object->title = $ref;
 
  313      $object->ref = $object->title;
 
  316      if ($object->error == 
'DB_ERROR_RECORD_ALREADY_EXISTS') {
 
  317        $langs->load(
"errors");
 
  318        setEventMessages($langs->trans(
'ErrorRefAlreadyExists', $ref), 
null, 
'errors');
 
  323  } elseif ($action == 
'setbankaccount' && $user->hasRight(
'facture', 
'creer')) {
 
  325    $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"Bank"));
 
  326    $result = $object->setBankAccount(
GETPOST(
'fk_account', 
'int'));
 
  327  } elseif ($action == 
'setfrequency' && $user->hasRight(
'facture', 
'creer')) {
 
  329    $object->context[
'actionmsg'] = $langs->trans(
"FieldXModified", $langs->transnoentitiesnoconv(
"Frequency"));
 
  330    $object->setFrequencyAndUnit(
GETPOST(
'frequency', 
'int'), 
GETPOST(
'unit_frequency', 
'alpha'));
 
  331  } elseif ($action == 
'setdate_when' && $user->hasRight(
'facture', 
'creer')) {
 
  335      $object->setNextDate($date);
 
  337  } elseif ($action == 
'setnb_gen_max' && $user->hasRight(
'facture', 
'creer')) {
 
  339    $object->setMaxPeriod(
GETPOST(
'nb_gen_max', 
'int'));
 
  340  } elseif ($action == 
'setauto_validate' && $user->hasRight(
'facture', 
'creer')) {
 
  342    $object->setAutoValidate(
GETPOST(
'auto_validate', 
'int'));
 
  343  } elseif ($action == 
'setgenerate_pdf' && $user->hasRight(
'facture', 
'creer')) {
 
  345    $object->setGeneratepdf(
GETPOST(
'generate_pdf', 
'int'));
 
  346  } elseif ($action == 
'setmodelpdf' && $user->hasRight(
'facture', 
'creer')) {
 
  348    $object->setModelpdf(
GETPOST(
'modelpdf', 
'alpha'));
 
  349  } elseif ($action == 
'disable' && $user->hasRight(
'facture', 
'creer')) {
 
  353    $object->context[
'actionmsg'] = $langs->trans(
"RecordDisabled");
 
  355    $res = $object->setValueFrom(
'suspended', 1, 
'', 
null, 
'text', 
'', $user, 
'BILLREC_MODIFY');
 
  366  } elseif ($action == 
'enable' && $user->hasRight(
'facture', 
'creer')) {
 
  370    $object->context[
'actionmsg'] = $langs->trans(
"RecordEnabled");
 
  372    $res = $object->setValueFrom(
'suspended', 0, 
'', 
null, 
'text', 
'', $user, 
'BILLREC_MODIFY');
 
  383  } elseif ($action == 
'setmulticurrencycode' && $usercancreate) {
 
  385    $result = $object->setMulticurrencyCode(
GETPOST(
'multicurrency_code', 
'alpha'));
 
  386  } elseif ($action == 
'setmulticurrencyrate' && $usercancreate) {
 
  388    $result = $object->setMulticurrencyRate(
price2num(
GETPOST(
'multicurrency_tx')), 
GETPOST(
'calculation_mode', 
'int'));
 
  392  if ($action == 
'confirm_deleteline' && $confirm == 
'yes' && $user->hasRight(
'facture', 
'creer')) {
 
  394    $object->fetch_thirdparty();
 
  403    if ($line->delete($user) > 0) {
 
  404      $result = $object->update_price(1);
 
  408        $object->fetch($object->id); 
 
  417  } elseif ($action == 
'update_extras') {
 
  418    $object->oldcopy = 
dol_clone($object, 2);
 
  421    $ret = $extrafields->setOptionalsFromPost(
null, $object, 
GETPOST(
'attribute', 
'restricthtml'));
 
  427      $result = $object->insertExtraFields(
'BILLREC_MODIFY');
 
  436  if ($action == 
'addline' && $user->hasRight(
'facture', 
'creer')) {
 
  437    $langs->load(
'errors');
 
  442    $product_desc = (GETPOSTISSET(
'dp_desc') ? 
GETPOST(
'dp_desc', 
'restricthtml') : 
'');
 
  445    $prod_entry_mode = 
GETPOST(
'prod_entry_mode', 
'alpha');
 
  446    if ($prod_entry_mode == 
'free') {
 
  449      $idprod = 
GETPOST(
'idprod', 
'int');
 
  452        setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"ProductOrService")), 
null, 
'errors');
 
  457    $tva_tx = (
GETPOST(
'tva_tx', 
'alpha') ? 
GETPOST(
'tva_tx', 
'alpha') : 0);
 
  461    if (empty($remise_percent)) {
 
  466    $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
 
  467    $array_options = $extrafields->getOptionalsFromPost($object->table_element_line, $predef);
 
  469    if (is_array($extralabelsline)) {
 
  471      foreach ($extralabelsline as $key => $value) {
 
  472        unset($_POST[
"options_".$key.$predef]);
 
  476    if ((empty($idprod) || $idprod < 0) && ($price_ht < 0) && ($qty < 0)) {
 
  477      setEventMessages($langs->trans(
'ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv(
'UnitPriceHT'), $langs->transnoentitiesnoconv(
'Qty')), 
null, 
'errors');
 
  480    if ($prod_entry_mode == 
'free' && (empty($idprod) || $idprod < 0) && 
GETPOST(
'type') < 0) {
 
  481      setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Type')), 
null, 
'errors');
 
  484    if ($prod_entry_mode == 
'free' && (empty($idprod) || $idprod < 0) && (!($price_ht >= 0) || $price_ht == 
'')) {  
 
  485      setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"UnitPriceHT")), 
null, 
'errors');
 
  489      setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Qty')), 
null, 
'errors');
 
  492    if ($prod_entry_mode == 
'free' && (empty($idprod) || $idprod < 0) && empty($product_desc)) {
 
  493      setEventMessages($langs->trans(
'ErrorFieldRequired', $langs->transnoentitiesnoconv(
'Description')), 
null, 
'errors');
 
  497      $langs->load(
"errors");
 
  498      setEventMessages($langs->trans(
'ErrorQtyForCustomerInvoiceCantBeNegative'), 
null, 
'errors');
 
  502    if (!$error && ($qty >= 0) && (!empty($product_desc) || (!empty($idprod) && $idprod > 0))) {
 
  503      $ret = $object->fetch($id);
 
  508      $ret = $object->fetch_thirdparty();
 
  513      $price_base_type = (
GETPOST(
'price_base_type', 
'alpha') ? 
GETPOST(
'price_base_type', 
'alpha') : 
'HT');
 
  524      if (!empty($idprod) && $idprod > 0) {
 
  526        $prod->fetch($idprod);
 
  528        $label = ((
GETPOST(
'product_label') && 
GETPOST(
'product_label') != $prod->label) ? 
GETPOST(
'product_label') : 
'');
 
  540        $datapriceofproduct = $prod->getSellPrice($mysoc, $object->thirdparty, $pqp);
 
  542        $pu_ht = $datapriceofproduct[
'pu_ht'];
 
  543        $pu_ttc = $datapriceofproduct[
'pu_ttc'];
 
  544        $price_min = $datapriceofproduct[
'price_min'];
 
  545        $price_base_type = empty($datapriceofproduct[
'price_base_type']) ? 
'HT' : $datapriceofproduct[
'price_base_type'];
 
  549        $tmpvat = (float) 
price2num(preg_replace(
'/\s*\(.*\)/', 
'', $tva_tx));
 
  550        $tmpprodvat = 
price2num(preg_replace(
'/\s*\(.*\)/', 
'', $prod->tva_tx));
 
  553        if (!empty($price_ht)) {
 
  555          $pu_ttc = 
price2num($pu_ht * (1 + ($tmpvat / 100)), 
'MU');
 
  556        } elseif ($tmpvat != $tmpprodvat) {
 
  559          if ($price_base_type != 
'HT') {
 
  560            $pu_ht = 
price2num($pu_ttc / (1 + ($tmpvat / 100)), 
'MU');
 
  562            $pu_ttc = 
price2num($pu_ht * (1 + ($tmpvat / 100)), 
'MU');
 
  570          $outputlangs = $langs;
 
  572          if (empty($newlang) && 
GETPOST(
'lang_id', 
'aZ09')) {
 
  573            $newlang = 
GETPOST(
'lang_id', 
'aZ09');
 
  575          if (empty($newlang)) {
 
  576            $newlang = $object->thirdparty->default_lang;
 
  578          if (!empty($newlang)) {
 
  580            $outputlangs->setDefaultLang($newlang);
 
  583          $desc = (!empty($prod->multilangs [$outputlangs->defaultlang] [
"description"])) ? $prod->multilangs [$outputlangs->defaultlang] [
"description"] : $prod->
description;
 
  585          $desc = $prod->description;
 
  591        if (!
getDolGlobalString(
'MAIN_PRODUCT_DISABLE_CUSTOMCOUNTRYCODE') && (!empty($prod->customcode) || !empty($prod->country_code))) {
 
  595            $outputlangs = $langs;
 
  597            if (empty($newlang) && 
GETPOST(
'lang_id', 
'alpha')) {
 
  598              $newlang = 
GETPOST(
'lang_id', 
'alpha');
 
  600            if (empty($newlang)) {
 
  601              $newlang = $object->thirdparty->default_lang;
 
  603            if (!empty($newlang)) {
 
  605              $outputlangs->setDefaultLang($newlang);
 
  606              $outputlangs->load(
'products');
 
  608            if (!empty($prod->customcode)) {
 
  609              $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CustomCode").
': '.$prod->customcode;
 
  611            if (!empty($prod->customcode) && !empty($prod->country_code)) {
 
  614            if (!empty($prod->country_code)) {
 
  615              $tmptxt .= $outputlangs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry($prod->country_code, 0, $db, $outputlangs, 0);
 
  618            if (!empty($prod->customcode)) {
 
  619              $tmptxt .= $langs->transnoentitiesnoconv(
"CustomCode").
': '.$prod->customcode;
 
  621            if (!empty($prod->customcode) && !empty($prod->country_code)) {
 
  624            if (!empty($prod->country_code)) {
 
  625              $tmptxt .= $langs->transnoentitiesnoconv(
"CountryOrigin").
': '.
getCountry($prod->country_code, 0, $db, $langs, 0);
 
  633        $fk_unit = $prod->fk_unit;
 
  637        $tva_npr = (preg_match(
'/\*/', $tva_tx) ? 1 : 0);
 
  638        $tva_tx = str_replace(
'*', 
'', $tva_tx);
 
  639        if (empty($tva_tx)) {
 
  642        $label = (
GETPOST(
'product_label') ? 
GETPOST(
'product_label') : 
'');
 
  643        $desc = $product_desc;
 
  645        $fk_unit = 
GETPOST(
'units', 
'alpha');
 
  648      $date_start_fill = 
GETPOST(
'date_start_fill', 
'int');
 
  649      $date_end_fill = 
GETPOST(
'date_end_fill', 
'int');
 
  656      $localtax1_tx = 
get_localtax($tva_tx, 1, $object->thirdparty, $mysoc, $tva_npr);
 
  657      $localtax2_tx = 
get_localtax($tva_tx, 2, $object->thirdparty, $mysoc, $tva_npr);
 
  664      $fk_parent_line = 
GETPOST(
'fk_parent_line', 
'int');
 
  666      if ($usercanproductignorepricemin && (!empty($price_min) && (
price2num($pu_ht) * (1 - 
price2num($remise_percent) / 100) < 
price2num($price_min)))) {
 
  667        $mesg = $langs->trans(
"CantBeLessThanMinPrice", 
price(
price2num($price_min, 
'MU'), 0, $langs, 0, 0, - 1, $conf->currency));
 
  671        $result = $object->addline($desc, $pu_ht, $qty, $tva_tx, $localtax1_tx, $localtax2_tx, $idprod, $remise_percent, $price_base_type, $info_bits, 
'', $pu_ttc, $type, -1, $special_code, $label, $fk_unit, 0, $date_start_fill, $date_end_fill, $fournprice, $buyingprice, $fk_parent_line);
 
  692          $object->fetch($object->id); 
 
  694          unset($_POST[
'prod_entry_mode']);
 
  696          unset($_POST[
'qty']);
 
  697          unset($_POST[
'type']);
 
  698          unset($_POST[
'remise_percent']);
 
  699          unset($_POST[
'price_ht']);
 
  700          unset($_POST[
'multicurrency_price_ht']);
 
  701          unset($_POST[
'price_ttc']);
 
  702          unset($_POST[
'tva_tx']);
 
  703          unset($_POST[
'product_ref']);
 
  704          unset($_POST[
'product_label']);
 
  705          unset($_POST[
'product_desc']);
 
  706          unset($_POST[
'fournprice']);
 
  707          unset($_POST[
'buying_price']);
 
  708          unset($_POST[
'np_marginRate']);
 
  709          unset($_POST[
'np_markRate']);
 
  710          unset($_POST[
'dp_desc']);
 
  711          unset($_POST[
'idprod']);
 
  712          unset($_POST[
'units']);
 
  714          unset($_POST[
'date_starthour']);
 
  715          unset($_POST[
'date_startmin']);
 
  716          unset($_POST[
'date_startsec']);
 
  717          unset($_POST[
'date_startday']);
 
  718          unset($_POST[
'date_startmonth']);
 
  719          unset($_POST[
'date_startyear']);
 
  720          unset($_POST[
'date_endhour']);
 
  721          unset($_POST[
'date_endmin']);
 
  722          unset($_POST[
'date_endsec']);
 
  723          unset($_POST[
'date_endday']);
 
  724          unset($_POST[
'date_endmonth']);
 
  725          unset($_POST[
'date_endyear']);
 
  727          unset($_POST[
'date_start_fill']);
 
  728          unset($_POST[
'date_end_fill']);
 
  730          unset($_POST[
'situations']);
 
  731          unset($_POST[
'progress']);
 
  739  } elseif ($action == 
'updateline' && $usercancreate && !
GETPOST(
'cancel', 
'alpha')) {
 
  740    if (!$object->fetch($id) > 0) {
 
  743    $object->fetch_thirdparty();
 
  758    if (preg_match(
'/\*/', $vat_rate)) {
 
  763    $vat_rate = str_replace(
'*', 
'', $vat_rate);
 
  764    $localtax1_rate = 
get_localtax($vat_rate, 1, $object->thirdparty);
 
  765    $localtax2_rate = 
get_localtax($vat_rate, 2, $object->thirdparty);
 
  772    $extralabelsline = $extrafields->fetch_name_optionals_label($object->table_element_line);
 
  773    $array_options = $extrafields->getOptionalsFromPost($object->table_element_line);
 
  776    if ($objectline->fetch(
GETPOST(
'lineid', 
'int'))) {
 
  777      $objectline->array_options = $array_options;
 
  778      $result = $objectline->insertExtraFields();
 
  784    $position = ($objectline->rang >= 0 ? $objectline->rang : 0);
 
  787    if (is_array($extralabelsline)) {
 
  789      foreach ($extralabelsline as $key => $value) {
 
  790        unset($_POST[
"options_".$key]);
 
  795    $special_code = 
GETPOST(
'special_code', 
'int');
 
  796    if ($special_code == 3) {
 
  813    if (empty($remise_percent)) {
 
  818    $productid = 
GETPOST(
'productid', 
'int');
 
  819    if (!empty($productid)) {
 
  821      $product->fetch($productid);
 
  823      $type = $product->type;
 
  825      $price_min = $product->price_min;
 
  826      if (
getDolGlobalString(
'PRODUIT_MULTIPRICES') && !empty($object->thirdparty->price_level)) {
 
  827        $price_min = $product->multiprices_min[$object->thirdparty->price_level];
 
  836        setEventMessages($langs->trans(
"CantBeLessThanMinPrice", 
price(
price2num($price_min, 
'MU'), 0, $langs, 0, 0, - 1, $conf->currency)), 
null, 
'errors');
 
  840      $type = 
GETPOST(
'type', 
'int');
 
  841      $label = (
GETPOST(
'product_label') ? 
GETPOST(
'product_label') : 
'');
 
  844      if (
GETPOST(
'type', 
'int') < 0) {
 
  845        setEventMessages($langs->trans(
"ErrorFieldRequired", $langs->transnoentitiesnoconv(
"Type")), 
null, 
'errors');
 
  850      $langs->load(
"errors");
 
  851      setEventMessages($langs->trans(
'ErrorQtyForCustomerInvoiceCantBeNegative'), 
null, 
'errors');
 
  855    $date_start_fill = 
GETPOST(
'date_start_fill', 
'int');
 
  856    $date_end_fill = 
GETPOST(
'date_end_fill', 
'int');
 
  857    $fk_parent_line = 
GETPOST(
'fk_parent_line', 
'int');
 
  861      $result = $object->updateline(
 
  907        $object->fetch($object->id); 
 
  909        unset($_POST[
'qty']);
 
  910        unset($_POST[
'type']);
 
  911        unset($_POST[
'productid']);
 
  912        unset($_POST[
'remise_percent']);
 
  913        unset($_POST[
'price_ht']);
 
  914        unset($_POST[
'multicurrency_price_ht']);
 
  915        unset($_POST[
'price_ttc']);
 
  916        unset($_POST[
'tva_tx']);
 
  917        unset($_POST[
'product_ref']);
 
  918        unset($_POST[
'product_label']);
 
  919        unset($_POST[
'product_desc']);
 
  920        unset($_POST[
'fournprice']);
 
  921        unset($_POST[
'buying_price']);
 
  922        unset($_POST[
'np_marginRate']);
 
  923        unset($_POST[
'np_markRate']);
 
  925        unset($_POST[
'dp_desc']);
 
  926        unset($_POST[
'idprod']);
 
  927        unset($_POST[
'units']);
 
  929        unset($_POST[
'date_starthour']);
 
  930        unset($_POST[
'date_startmin']);
 
  931        unset($_POST[
'date_startsec']);
 
  932        unset($_POST[
'date_startday']);
 
  933        unset($_POST[
'date_startmonth']);
 
  934        unset($_POST[
'date_startyear']);
 
  935        unset($_POST[
'date_endhour']);
 
  936        unset($_POST[
'date_endmin']);
 
  937        unset($_POST[
'date_endsec']);
 
  938        unset($_POST[
'date_endday']);
 
  939        unset($_POST[
'date_endmonth']);
 
  940        unset($_POST[
'date_endyear']);
 
  942        unset($_POST[
'situations']);
 
  943        unset($_POST[
'progress']);
 
  956$title = $object->ref.
" - ".$langs->trans(
'Card');
 
  961$form = 
new Form($db);
 
  963if (isModEnabled(
'project')) {
 
  966$companystatic = 
new Societe($db);
 
  976if ($action == 
'create') {
 
  977  print 
load_fiche_titre($langs->trans(
"CreateRepeatableInvoice"), 
'', 
'bill');
 
  980  $product_static = 
new Product($db);
 
  982  if ($object->fetch($id, $ref) > 0) {
 
  983    $result = $object->getLinesArray();
 
  985    print 
'<form action="'.$_SERVER[
"PHP_SELF"].
'" method="POST">';
 
  986    print 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
  987    print 
'<input type="hidden" name="action" value="add">';
 
  988    print 
'<input type="hidden" name="facid" value="'.$object->id.
'">';
 
  993    if (isModEnabled(
'project')) {
 
  996    if ($object->fk_account > 0) {
 
 1000    print 
'<table class="border centpercent">';
 
 1002    $object->fetch_thirdparty();
 
 1005    print 
'<tr><td class="titlefieldcreate fieldrequired">'.$langs->trans(
"Title").
'</td><td>';
 
 1006    print 
'<input class="flat quatrevingtpercent" type="text" name="title" value="'.dol_escape_htmltag(
GETPOST(
"title", 
'alphanohtml')).
'" autofocus>';
 
 1010    print 
'<tr><td class="titlefieldcreate">'.$langs->trans(
"Customer").
'</td><td>'.$object->thirdparty->getNomUrl(1, 
'customer').
'</td>';
 
 1015      print 
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
 
 1016      print $form->getSelectInvoiceSubtype(GETPOSTISSET(
'subtype') ? 
GETPOST(
'subtype') : $object->subtype, 
'subtype', 0, 0, 
'');
 
 1020    $note_public = GETPOSTISSET(
'note_public') ? 
GETPOST(
'note_public', 
'restricthtml') : $object->note_public;
 
 1021    $note_private = GETPOSTISSET(
'note_private') ? 
GETPOST(
'note_private', 
'restricthtml') : $object->note_private;
 
 1026    $substitutionarray[
'__INVOICE_PREVIOUS_MONTH__'] = $langs->trans(
"PreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($object->date, -1, 
'm'), 
'%m').
')';
 
 1027    $substitutionarray[
'__INVOICE_MONTH__'] = $langs->trans(
"MonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($object->date, 
'%m').
')';
 
 1028    $substitutionarray[
'__INVOICE_NEXT_MONTH__'] = $langs->trans(
"NextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($object->date, 1, 
'm'), 
'%m').
')';
 
 1029    $substitutionarray[
'__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans(
"TextPreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($object->date, -1, 
'm'), 
'%B').
')';
 
 1030    $substitutionarray[
'__INVOICE_MONTH_TEXT__'] = $langs->trans(
"TextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($object->date, 
'%B').
')';
 
 1031    $substitutionarray[
'__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans(
"TextNextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($object->date, 1, 
'm'), 
'%B').
')';
 
 1032    $substitutionarray[
'__INVOICE_PREVIOUS_YEAR__'] = $langs->trans(
"PreviousYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($object->date, -1, 
'y'), 
'%Y').
')';
 
 1033    $substitutionarray[
'__INVOICE_YEAR__'] = $langs->trans(
"YearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($object->date, 
'%Y').
')';
 
 1034    $substitutionarray[
'__INVOICE_NEXT_YEAR__'] = $langs->trans(
"NextYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($object->date, 1, 
'y'), 
'%Y').
')';
 
 1036    $substitutionarray[
'__INVOICE_DATE_NEXT_INVOICE_BEFORE_GEN__'] = $langs->trans(
"DateNextInvoiceBeforeGen").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($object->date, 1, 
'm'), 
'dayhour').
')';
 
 1037    $substitutionarray[
'__INVOICE_DATE_NEXT_INVOICE_AFTER_GEN__'] = $langs->trans(
"DateNextInvoiceAfterGen").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($object->date, 2, 
'm'), 
'dayhour').
')';
 
 1038    $substitutionarray[
'__INVOICE_COUNTER_CURRENT__'] = $langs->trans(
"Count");
 
 1039    $substitutionarray[
'__INVOICE_COUNTER_MAX__'] = $langs->trans(
"MaxPeriodNumber");
 
 1041    $htmltext = 
'<i>'.$langs->trans(
"FollowingConstantsWillBeSubstituted").
':<br>';
 
 1042    foreach ($substitutionarray as $key => $val) {
 
 1043      $htmltext .= $key.
' = '.$langs->trans($val).
'<br>';
 
 1045    $htmltext .= 
'</i>';
 
 1048    print 
"<tr><td>".$langs->trans(
"Author").
"</td><td>".$user->getFullName($langs).
"</td></tr>";
 
 1051    print 
"<tr><td>".$langs->trans(
"PaymentConditions").
"</td><td>";
 
 1052    print $form->getSelectConditionsPaiements(GETPOSTISSET(
'cond_reglement_id') ? 
GETPOST(
'cond_reglement_id', 
'int') : $object->cond_reglement_id, 
'cond_reglement_id', -1, 0, 0, 
'');
 
 1057    print 
"<tr><td>".$langs->trans(
"PaymentMode").
"</td><td>";
 
 1058    print 
img_picto(
'', 
'payment', 
'class="pictofixedwidth"');
 
 1059    print $form->select_types_paiements(GETPOSTISSET(
'mode_reglement_id') ? 
GETPOST(
'mode_reglement_id', 
'int') : $object->mode_reglement_id, 
'mode_reglement_id', 
'', 0, 1, 0, 0, 1, 
'', 1);
 
 1064    if ($object->fk_account > 0) {
 
 1065      print 
"<tr><td>".$langs->trans(
'BankAccount').
"</td><td>";
 
 1066      $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account, 
'none');
 
 1072    $draft->fetch(
GETPOST(
'facid', 
'int'));
 
 1075    $extralabels = $extrafields->fetch_name_optionals_label($draft->table_element);
 
 1076    if ($draft->fetch_optionals() > 0) {
 
 1077      $object->array_options = array_merge($object->array_options, $draft->array_options);
 
 1080    print $object->showOptionals($extrafields, 
'create', $parameters);
 
 1083    if (isModEnabled(
'project') && is_object($object->thirdparty) && $object->thirdparty->id > 0) {
 
 1084      $projectid = 
GETPOST(
'projectid') ? 
GETPOST(
'projectid') : $object->fk_project;
 
 1085      $langs->load(
'projects');
 
 1086      print 
'<tr><td>'.$langs->trans(
'Project').
'</td><td>';
 
 1087      print 
img_picto(
'', 
'project', 
'class="pictofixedwidth"');
 
 1088      $numprojet = $formproject->select_projects($object->thirdparty->id, $projectid, 
'projectid', 0, 0, 1, 0, 0, 0, 0, 
'', 0, 0, 
'');
 
 1089      print 
'   <a href="'.DOL_URL_ROOT.
'/projet/card.php?socid='.$object->thirdparty->id.
'&action=create&status=1&backtopage='.urlencode($_SERVER[
"PHP_SELF"].
'?action=create&socid='.$object->thirdparty->id.(!empty($id) ? 
'&id='.$id : 
'')).
'">'.
img_object($langs->trans(
"AddProject"), 
'add').
'</a>';
 
 1094    print 
"<tr><td>".$langs->trans(
'Model').
"</td><td>";
 
 1095    include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
 
 1097    print 
img_picto(
'', 
'generic', 
'class="pictofixedwidth"');
 
 1098    print $form->selectarray(
'modelpdf', $list, $conf->global->FACTURE_ADDON_PDF);
 
 1103    print 
'<td class="tdtop">';
 
 1104    print $form->textwithpicto($langs->trans(
'NotePublic'), $htmltext, 1, 
'help', 
'', 0, 2, 
'notepublic');
 
 1107    $doleditor = 
new DolEditor(
'note_public', $note_public, 
'', 80, 
'dolibarr_notes', 
'In', 0, 
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PUBLIC') ? 0 : 1, ROWS_3, 
'90%');
 
 1108    print $doleditor->Create(1);
 
 1111    if (empty($user->socid)) {
 
 1113      print 
'<td class="tdtop">';
 
 1114      print $form->textwithpicto($langs->trans(
'NotePrivate'), $htmltext, 1, 
'help', 
'', 0, 2, 
'noteprivate');
 
 1117      $doleditor = 
new DolEditor(
'note_private', $note_private, 
'', 80, 
'dolibarr_notes', 
'In', 0, 
false, !
getDolGlobalString(
'FCKEDITOR_ENABLE_NOTE_PRIVATE') ? 0 : 1, ROWS_3, 
'90%');
 
 1118      print $doleditor->Create(1);
 
 1128    $title = $langs->trans(
"Recurrence");
 
 1131    print 
'<span class="opacitymedium">'.$langs->trans(
"ToCreateARecurringInvoiceGeneAuto", $langs->transnoentitiesnoconv(
'Module2300Name')).
'</span><br><br>';
 
 1135    print 
'<table class="border centpercent">';
 
 1138    print 
'<tr><td class="titlefieldcreate">'.$form->textwithpicto($langs->trans(
"Frequency"), $langs->transnoentitiesnoconv(
'toolTipFrequency')).
"</td><td>";
 
 1139    print 
"<input type='text' name='frequency' value='".GETPOST(
'frequency', 
'int').
"' size='4' /> ";
 
 1140    print $form->selectarray(
'unit_frequency', array(
'd'=>$langs->trans(
'Day'), 
'm'=>$langs->trans(
'Month'), 
'y'=>$langs->trans(
'Year')), (
GETPOST(
'unit_frequency') ? 
GETPOST(
'unit_frequency') : 
'm'));
 
 1144    print 
"<tr><td>".$langs->trans(
'NextDateToExecution').
"</td><td>";
 
 1146    print $form->selectDate($date_next_execution, 
'', 1, 1, 
'', 
"add", 1, 1);
 
 1150    print 
"<tr><td>".$langs->trans(
"MaxPeriodNumber").
"</td><td>";
 
 1151    print 
'<input type="text" name="nb_gen_max" value="'.GETPOST(
'nb_gen_max').
'" size="5" />';
 
 1155    print 
"<tr><td>".$langs->trans(
"StatusOfAutoGeneratedInvoices").
"</td><td>";
 
 1156    $select = array(
'0'=>$langs->trans(
'BillStatusDraft'), 
'1'=>$langs->trans(
'BillStatusValidated'));
 
 1157    print $form->selectarray(
'auto_validate', $select, 
GETPOST(
'auto_validate'));
 
 1162      print 
"<tr><td>".$langs->trans(
"StatusOfGeneratedDocuments").
"</td><td>";
 
 1163      $select = array(
'0'=>$langs->trans(
'DoNotGenerateDoc'), 
'1'=>$langs->trans(
'AutoGenerateDoc'));
 
 1164      print $form->selectarray(
'generate_pdf', $select, 
GETPOST(
'generate_pdf'));
 
 1167      print 
'<input type="hidden" name="generate_pdf" value="1">';
 
 1175    $title = $langs->trans(
"ProductsAndServices");
 
 1176    if (!isModEnabled(
'service')) {
 
 1177      $title = $langs->trans(
"Products");
 
 1178    } elseif (!isModEnabled(
'product')) {
 
 1179      $title = $langs->trans(
"Services");
 
 1187    print 
'<div class="div-table-responsive-no-min">';
 
 1188    print 
'<table id="tablelines" class="noborder noshadow centpercent">';
 
 1191    if (!empty($object->lines)) {
 
 1192      $object->printOriginLinesList(
'', $selectedLines);
 
 1200    if (!empty($flag_price_may_change)) {
 
 1201      print 
'<tr><td colspan="3" class="left">';
 
 1202      print 
'<select name="usenewprice" class="flat">';
 
 1203      print 
'<option value="0">'.$langs->trans(
"AlwaysUseFixedPrice").
'</option>';
 
 1204      print 
'<option value="1" disabled>'.$langs->trans(
"AlwaysUseNewPrice").
'</option>';
 
 1210    print $form->buttonsSaveCancel(
"Create");
 
 1220  if ($object->id > 0) {
 
 1221    $object->fetch_thirdparty();
 
 1225    if ($action == 
'ask_deleteline') {
 
 1226      $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&lineid='.$lineid, $langs->trans(
'DeleteProductLine'), $langs->trans(
'ConfirmDeleteProductLine'), 
'confirm_deleteline', 
'', 
'no', 1);
 
 1229    if ($action == 
'delete') {
 
 1230      $formconfirm = $form->formconfirm($_SERVER[
"PHP_SELF"].
'?id='.$object->id, $langs->trans(
'DeleteRepeatableInvoice'), $langs->trans(
'ConfirmDeleteRepeatableInvoice'), 
'confirm_delete', 
'', 
'no', 1);
 
 1234    $parameters = array(
'formConfirm' => $formconfirm, 
'lineid' => $lineid);
 
 1235    $reshook = $hookmanager->executeHooks(
'formConfirm', $parameters, $object, $action); 
 
 1236    if (empty($reshook)) {
 
 1237      $formconfirm .= $hookmanager->resPrint;
 
 1238    } elseif ($reshook > 0) {
 
 1239      $formconfirm = $hookmanager->resPrint;
 
 1244    $author = 
new User($db);
 
 1245    $author->fetch($object->user_author);
 
 1249    print 
dol_get_fiche_head($head, 
'card', $langs->trans(
"RepeatableInvoice"), -1, 
'bill'); 
 
 1253    $linkback = 
'<a href="'.DOL_URL_ROOT.
'/compta/facture/invoicetemplate_list.php?restore_lastsearch_values=1'.(!empty($socid) ? 
'&socid='.$socid : 
'').
'">'.$langs->trans(
"BackToList").
'</a>';
 
 1256    if ($action != 
'editref') {
 
 1257      $morehtmlref .= $form->editfieldkey($object->ref, 
'ref', $object->ref, $object, $user->hasRight(
'facture', 
'creer'), 
'', 
'', 0, 2);
 
 1259      $morehtmlref .= $form->editfieldval(
'', 
'ref', $object->ref, $object, $user->hasRight(
'facture', 
'creer'), 
'string');
 
 1262    $morehtmlref .= 
'<div class="refidno">';
 
 1267    $morehtmlref .= $object->thirdparty->getNomUrl(1, 
'customer');
 
 1269    if (isModEnabled(
'project')) {
 
 1270      $langs->load(
"projects");
 
 1271      $morehtmlref .= 
'<br>';
 
 1272      if ($user->hasRight(
'facture', 
'creer')) {
 
 1273        $morehtmlref .= 
img_picto($langs->trans(
"Project"), 
'project', 
'class="pictofixedwidth"');
 
 1274        if ($action != 
'classify') {
 
 1275          $morehtmlref .= 
'<a class="editfielda" href="'.$_SERVER[
'PHP_SELF'].
'?action=classify&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->transnoentitiesnoconv(
'SetProject')).
'</a> ';
 
 1277        $morehtmlref .= $form->form_project($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->socid, $object->fk_project, ($action == 
'classify' ? 
'projectid' : 
'none'), 0, 0, 0, 1, 
'', 
'maxwidth300');
 
 1279        if (!empty($object->fk_project)) {
 
 1281          $proj->fetch($object->fk_project);
 
 1282          $morehtmlref .= 
' : '.$proj->getNomUrl(1);
 
 1284            $morehtmlref .= 
' - '.$proj->title;
 
 1291    $morehtmlref .= 
'</div>';
 
 1293    $morehtmlright = 
'';
 
 1295    dol_banner_tab($object, 
'ref', $linkback, 1, 
'title', 
'none', $morehtmlref, 
'', 0, 
'', $morehtmlright);
 
 1297    print 
'<div class="fichecenter">';
 
 1298    print 
'<div class="fichehalfleft">';
 
 1299    print 
'<div class="underbanner clearboth"></div>';
 
 1301    print 
'<table class="border centpercent tableforfield">';
 
 1305      print 
"<tr><td>".$langs->trans(
"InvoiceSubtype").
"</td><td>";
 
 1306      if ($object->subtype > 0) {
 
 1307        print $object->getSubtypeLabel(
'facture_rec');
 
 1313    print 
'<tr><td class="titlefield">'.$langs->trans(
"Author").
'</td><td>';
 
 1314    print $author->getNomUrl(-1);
 
 1318    print 
'<tr><td>'.$langs->trans(
"AmountHT").
'</td>';
 
 1319    print 
'<td>'.price($object->total_ht, 
'', $langs, 1, -1, -1, $conf->currency).
'</td>';
 
 1323    print 
'<tr><td>'.$langs->trans(
"AmountVAT").
'</td><td>'.
price($object->total_tva, 
'', $langs, 1, -1, -1, $conf->currency).
'</td>';
 
 1327    if (($mysoc->localtax1_assuj == 
"1" && $mysoc->useLocalTax(1)) || $object->total_localtax1 != 0) {  
 
 1328      print 
'<tr><td>'.$langs->transcountry(
"AmountLT1", $mysoc->country_code).
'</td>';
 
 1329      print 
'<td class="nowrap">'.price($object->total_localtax1, 1, 
'', 1, - 1, - 1, $conf->currency).
'</td></tr>';
 
 1331    if (($mysoc->localtax2_assuj == 
"1" && $mysoc->useLocalTax(2)) || $object->total_localtax2 != 0) {  
 
 1332      print 
'<tr><td>'.$langs->transcountry(
"AmountLT2", $mysoc->country_code).
'</td>';
 
 1333      print 
'<td class=nowrap">'.price($object->total_localtax2, 1, 
'', 1, - 1, - 1, $conf->currency).
'</td></tr>';
 
 1336    print 
'<tr><td>'.$langs->trans(
"AmountTTC").
'</td><td colspan="3">'.
price($object->total_ttc, 
'', $langs, 1, -1, -1, $conf->currency).
'</td>';
 
 1342    print 
'<table class="nobordernopadding centpercent"><tr><td>';
 
 1343    print $langs->trans(
'PaymentConditionsShort');
 
 1345    if ($action != 
'editconditions' && $user->hasRight(
'facture', 
'creer')) {
 
 1346      print 
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editconditions&token='.newToken().
'&facid='.$object->id.
'">'.
img_edit($langs->trans(
'SetConditions'), 1).
'</a></td>';
 
 1348    print 
'</tr></table>';
 
 1350    if ($action == 
'editconditions') {
 
 1351      $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?facid='.$object->id, $object->cond_reglement_id, 
'cond_reglement_id');
 
 1353      $form->form_conditions_reglement($_SERVER[
'PHP_SELF'].
'?facid='.$object->id, $object->cond_reglement_id, 
'none');
 
 1359    print 
'<table class="nobordernopadding" width="100%"><tr><td>';
 
 1360    print $langs->trans(
'PaymentMode');
 
 1362    if ($action != 
'editmode' && $user->hasRight(
'facture', 
'creer')) {
 
 1363      print 
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmode&token='.newToken().
'&facid='.$object->id.
'">'.
img_edit($langs->trans(
'SetMode'), 1).
'</a></td>';
 
 1365    print 
'</tr></table>';
 
 1367    if ($action == 
'editmode') {
 
 1368      $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?facid='.$object->id, $object->mode_reglement_id, 
'mode_reglement_id', 
'CRDT', 1, 1);
 
 1370      $form->form_modes_reglement($_SERVER[
'PHP_SELF'].
'?facid='.$object->id, $object->mode_reglement_id, 
'none');
 
 1375    if (isModEnabled(
'multicurrency')) {
 
 1379      print 
'<table class="nobordernopadding" width="100%"><tr><td>';
 
 1380      print $form->editfieldkey(
'Currency', 
'multicurrency_code', 
'', $object, 0);
 
 1382      if ($usercancreate && $action != 
'editmulticurrencycode' && $object->suspended == $object::STATUS_SUSPENDED) {
 
 1383        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>';
 
 1385      print 
'</tr></table>';
 
 1387      $htmlname = (($usercancreate && $action == 
'editmulticurrencycode') ? 
'multicurrency_code' : 
'none');
 
 1388      $form->form_multicurrency_code($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_code, $htmlname);
 
 1392      if ($object->multicurrency_code != $conf->currency || $object->multicurrency_tx != 1) {
 
 1395        print 
'<table class="nobordernopadding" width="100%"><tr><td>';
 
 1396        print $form->editfieldkey(
'CurrencyRate', 
'multicurrency_tx', 
'', $object, 0);
 
 1398        if ($usercancreate && $action != 
'editmulticurrencyrate' && $object->suspended == $object::STATUS_SUSPENDED && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
 
 1399          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>';
 
 1401        print 
'</tr></table>';
 
 1403        if ($action == 
'editmulticurrencyrate' || $action == 
'actualizemulticurrencyrate') {
 
 1404          if ($action == 
'actualizemulticurrencyrate') {
 
 1407          $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx, ($usercancreate ? 
'multicurrency_tx' : 
'none'), $object->multicurrency_code);
 
 1409          $form->form_multicurrency_rate($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->multicurrency_tx, 
'none', $object->multicurrency_code);
 
 1410          if ($object->statut == $object::STATUS_DRAFT && $object->multicurrency_code && $object->multicurrency_code != $conf->currency) {
 
 1411            print 
'<div class="inline-block">         ';
 
 1412            print 
'<a href="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.
'&action=actualizemulticurrencyrate">'.$langs->trans(
"ActualizeCurrency").
'</a>';
 
 1422    if (!empty($object->frequency) && !empty($object->date_when)) {
 
 1423      $dateexample = $object->date_when;
 
 1429    $substitutionarray[
'__INVOICE_PREVIOUS_MONTH__'] = $langs->trans(
"PreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1, 
'm'), 
'%m').
')';
 
 1430    $substitutionarray[
'__INVOICE_MONTH__'] = $langs->trans(
"MonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample, 
'%m').
')';
 
 1431    $substitutionarray[
'__INVOICE_NEXT_MONTH__'] = $langs->trans(
"NextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1, 
'm'), 
'%m').
')';
 
 1432    $substitutionarray[
'__INVOICE_PREVIOUS_MONTH_TEXT__'] = $langs->trans(
"TextPreviousMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1, 
'm'), 
'%B').
')';
 
 1433    $substitutionarray[
'__INVOICE_MONTH_TEXT__'] = $langs->trans(
"TextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample, 
'%B').
')';
 
 1434    $substitutionarray[
'__INVOICE_NEXT_MONTH_TEXT__'] = $langs->trans(
"TextNextMonthOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1, 
'm'), 
'%B').
')';
 
 1435    $substitutionarray[
'__INVOICE_PREVIOUS_YEAR__'] = $langs->trans(
"PreviousYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, -1, 
'y'), 
'%Y').
')';
 
 1436    $substitutionarray[
'__INVOICE_YEAR__'] = $langs->trans(
"YearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date($dateexample, 
'%Y').
')';
 
 1437    $substitutionarray[
'__INVOICE_NEXT_YEAR__'] = $langs->trans(
"NextYearOfInvoice").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree($dateexample, 1, 
'y'), 
'%Y').
')';
 
 1439    $substitutionarray[
'__INVOICE_DATE_NEXT_INVOICE_BEFORE_GEN__'] = $langs->trans(
"DateNextInvoiceBeforeGen").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(($object->date_when ? $object->date_when : 
dol_now()), 
'dayhour').
')';
 
 1440    $substitutionarray[
'__INVOICE_DATE_NEXT_INVOICE_AFTER_GEN__'] = $langs->trans(
"DateNextInvoiceAfterGen").
' ('.$langs->trans(
"Example").
': '.
dol_print_date(
dol_time_plus_duree(($object->date_when ? $object->date_when : 
dol_now()), $object->frequency, $object->unit_frequency), 
'dayhour').
')';
 
 1441    $substitutionarray[
'__INVOICE_COUNTER_CURRENT__'] = $object->nb_gen_done;
 
 1442    $substitutionarray[
'__INVOICE_COUNTER_MAX__'] = $object->nb_gen_max;
 
 1444    $htmltext = 
'<i>'.$langs->trans(
"FollowingConstantsWillBeSubstituted").
':<br>';
 
 1445    foreach ($substitutionarray as $key => $val) {
 
 1446      $htmltext .= $key.
' = '.$langs->trans($val).
'<br>';
 
 1448    $htmltext .= 
'</i>';
 
 1451    print 
'<tr><td class="nowrap">';
 
 1452    print 
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
 
 1453    print $langs->trans(
'BankAccount');
 
 1455    if (($action != 
'editbankaccount') && $user->hasRight(
'facture', 
'creer') && $object->statut == 
FactureRec::STATUS_DRAFT) {
 
 1456      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>';
 
 1458    print 
'</tr></table>';
 
 1460    if ($action == 
'editbankaccount') {
 
 1461      $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account, 
'fk_account', 1);
 
 1463      $form->formSelectAccount($_SERVER[
'PHP_SELF'].
'?id='.$object->id, $object->fk_account, 
'none');
 
 1469    include DOL_DOCUMENT_ROOT.
'/core/tpl/extrafields_view.tpl.php';
 
 1474    print $form->editfieldkey($form->textwithpicto($langs->trans(
'NotePublic'), $htmltext, 1, 
'help', 
'', 0, 2, 
'notepublic'), 
'note_public', $object->note_public, $object, $user->hasRight(
'facture', 
'creer'));
 
 1475    print 
'</td><td class="wordbreak">';
 
 1476    print $form->editfieldval($langs->trans(
"NotePublic"), 
'note_public', $object->note_public, $object, $user->hasRight(
'facture', 
'creer'), 
'textarea:'.ROWS_4.
':90%', 
'', 
null, 
null, 
'', 1);
 
 1482    print $form->editfieldkey($form->textwithpicto($langs->trans(
"NotePrivate"), $htmltext, 1, 
'help', 
'', 0, 2, 
'noteprivate'), 
'note_private', $object->note_private, $object, $user->hasRight(
'facture', 
'creer'));
 
 1483    print 
'</td><td class="wordbreak">';
 
 1484    print $form->editfieldval($langs->trans(
"NotePrivate"), 
'note_private', $object->note_private, $object, $user->hasRight(
'facture', 
'creer'), 
'textarea:'.ROWS_4.
':90%', 
'', 
null, 
null, 
'', 1);
 
 1489    print 
'<tr><td class="nowrap">';
 
 1490    print 
'<table width="100%" class="nobordernopadding"><tr><td class="nowrap">';
 
 1491    print $langs->trans(
'Model');
 
 1493    if (($action != 
'editmodelpdf') && $user->hasRight(
'facture', 
'creer') && $object->statut == 
FactureRec::STATUS_DRAFT) {
 
 1494      print 
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editmodelpdf&token='.newToken().
'&id='.$object->id.
'">'.
img_edit($langs->trans(
'SetModel'), 1).
'</a></td>';
 
 1496    print 
'</tr></table>';
 
 1498    if ($action == 
'editmodelpdf') {
 
 1499      include_once DOL_DOCUMENT_ROOT.
'/core/modules/facture/modules_facture.php';
 
 1502      foreach ($models as $k => $model) {
 
 1503        $list[] = str_replace(
':', 
'|', $k).
':'.$model;
 
 1505      $select = 
'select;'.implode(
',', $list);
 
 1506      print $form->editfieldval($langs->trans(
"Model"), 
'modelpdf', $object->model_pdf, $object, $user->hasRight(
'facture', 
'creer'), $select);
 
 1508      print $object->model_pdf;
 
 1520    print 
'<div class="fichehalfright">';
 
 1521    print 
'<div class="underbanner clearboth"></div>';
 
 1527    $title = $langs->trans(
"Recurrence");
 
 1529    print 
'<table class="border centpercent tableforfield">';
 
 1531    print 
'<tr><td colspan="2">'.img_picto(
'', 
'recurring', 
'class="pictofixedwidth"').$title.
'</td></tr>';
 
 1534    print 
'<tr><td style="width: 50%">';
 
 1535    print 
'<table class="nobordernopadding" width="100%"><tr><td>';
 
 1536    print $langs->trans(
'Frequency');
 
 1538    if ($action != 
'editfrequency' && $user->hasRight(
'facture', 
'creer')) {
 
 1539      print 
'<td class="right"><a class="editfielda" href="'.$_SERVER[
"PHP_SELF"].
'?action=editfrequency&token='.newToken().
'&facid='.$object->id.
'">'.
img_edit($langs->trans(
'Edit'), 1).
'</a></td>';
 
 1541    print 
'</tr></table>';
 
 1543    if ($action == 
'editfrequency') {
 
 1544      print 
'<form method="post" action="'.$_SERVER[
"PHP_SELF"].
'?facid='.$object->id.
'">';
 
 1545      print 
'<input type="hidden" name="action" value="setfrequency">';
 
 1546      print 
'<input type="hidden" name="token" value="'.newToken().
'">';
 
 1547      print 
'<table class="nobordernopadding">';
 
 1549      print 
"<input type='text' name='frequency' value='".$object->frequency.
"' size='5' /> ";
 
 1550      print $form->selectarray(
'unit_frequency', array(
'd'=>$langs->trans(
'Day'), 
'm'=>$langs->trans(
'Month'), 
'y'=>$langs->trans(
'Year')), ($object->unit_frequency ? $object->unit_frequency : 
'm'));
 
 1552      print 
'<td class="left"><input type="submit" class="button button-edit smallpaddingimp" value="'.$langs->trans(
"Modify").
'"></td>';
 
 1553      print 
'</tr></table></form>';
 
 1555      if ($object->frequency > 0) {
 
 1556        print $langs->trans(
'FrequencyPer_'.$object->unit_frequency, $object->frequency);
 
 1558        print 
'<span class="opacitymedium">'.$langs->trans(
"NotARecurringInvoiceTemplate").
'</span>';
 
 1565    if ($action == 
'date_when' || $object->frequency > 0) {
 
 1566      print $form->editfieldkey($langs->trans(
"NextDateToExecution"), 
'date_when', $object->date_when, $object, $user->hasRight(
'facture', 
'creer'), 
'day');
 
 1568      print $langs->trans(
"NextDateToExecution");
 
 1571    if ($action == 
'date_when' || $object->frequency > 0) {
 
 1572      print $form->editfieldval($langs->trans(
"NextDateToExecution"), 
'date_when', $object->date_when, $object, $user->hasRight(
'facture', 
'creer'), 
'day', $object->date_when, 
null, 
'', 
'', 0, 
'strikeIfMaxNbGenReached');
 
 1575    if (!$object->isMaxNbGenReached()) {
 
 1576      if (!$object->suspended && $action != 
'editdate_when' && $object->frequency > 0 && $object->date_when && $object->date_when < $now) {
 
 1580      print 
img_info($langs->trans(
"MaxNumberOfGenerationReached"));
 
 1587    if ($action == 
'nb_gen_max' || $object->frequency > 0) {
 
 1588      print $form->editfieldkey($langs->trans(
"MaxPeriodNumber"), 
'nb_gen_max', $object->nb_gen_max, $object, $user->hasRight(
'facture', 
'creer'));
 
 1590      print $langs->trans(
"MaxPeriodNumber");
 
 1593    if ($action == 
'nb_gen_max' || $object->frequency > 0) {
 
 1594      print $form->editfieldval($langs->trans(
"MaxPeriodNumber"), 
'nb_gen_max', $object->nb_gen_max ? $object->nb_gen_max : 
'', $object, $user->hasRight(
'facture', 
'creer'));
 
 1603    if ($action == 
'auto_validate' || $object->frequency > 0) {
 
 1604      print $form->editfieldkey($langs->trans(
"StatusOfAutoGeneratedInvoices"), 
'auto_validate', $object->auto_validate, $object, $user->hasRight(
'facture', 
'creer'));
 
 1606      print $langs->trans(
"StatusOfAutoGeneratedInvoices");
 
 1609    $select = 
'select;0:'.$langs->trans(
'BillStatusDraft').
',1:'.$langs->trans(
'BillStatusValidated');
 
 1610    if ($action == 
'auto_validate' || $object->frequency > 0) {
 
 1611      print $form->editfieldval($langs->trans(
"StatusOfAutoGeneratedInvoices"), 
'auto_validate', $object->auto_validate, $object, $user->hasRight(
'facture', 
'creer'), $select);
 
 1618      if ($action == 
'generate_pdf' || $object->frequency > 0) {
 
 1619        print $form->editfieldkey($langs->trans(
"StatusOfGeneratedDocuments"), 
'generate_pdf', $object->generate_pdf, $object, $user->hasRight(
'facture', 
'creer'));
 
 1621        print $langs->trans(
"StatusOfGeneratedDocuments");
 
 1625      $select = 
'select;0:'.$langs->trans(
'DoNotGenerateDoc').
',1:'.$langs->trans(
'AutogenerateDoc');
 
 1626      if ($action == 
'generate_pdf' || $object->frequency > 0) {
 
 1627        print $form->editfieldval($langs->trans(
"StatusOfGeneratedDocuments"), 
'generate_pdf', $object->generate_pdf, $object, $user->hasRight(
'facture', 
'creer'), $select);
 
 1632      print 
'<input type="hidden" name="generate_pdf" value="1">';
 
 1638    if ($object->frequency > 0) {
 
 1641      if (!isModEnabled(
'cron')) {
 
 1642        print 
info_admin($langs->trans(
"EnableAndSetupModuleCron", $langs->transnoentitiesnoconv(
"Module2300Name")));
 
 1645      print 
'<div class="underbanner clearboth"></div>';
 
 1646      print 
'<table class="border centpercent tableforfield">';
 
 1649      print 
'<tr><td style="width: 50%">'.$langs->trans(
"NbOfGenerationDone").
'</td>';
 
 1651      print $object->nb_gen_done ? $object->nb_gen_done : 
'0';
 
 1657      print $langs->trans(
"DateLastGeneration");
 
 1671    print 
'<div class="clearboth"></div><br>';
 
 1675    print 
'<form name="addproduct" id="addproduct" action="'.$_SERVER[
"PHP_SELF"].
'?id='.$object->id.(($action != 
'editline') ? 
'#add' : 
'#line_'.
GETPOST(
'lineid', 
'int')).
'" method="POST">';
 
 1676    print 
'<input type="hidden" name="token" value="' . newToken().
'">';
 
 1677    print 
'<input type="hidden" name="action" value="' . (($action != 
'editline') ? 
'addline' : 
'updateline').
'">';
 
 1678    print 
'<input type="hidden" name="mode" value="">';
 
 1679    print 
'<input type="hidden" name="id" value="' . $object->id.
'">';
 
 1680    print 
'<input type="hidden" name="page_y" value="">';
 
 1682    if (!empty($conf->use_javascript_ajax) && $object->statut == 0) {
 
 1683      include DOL_DOCUMENT_ROOT.
'/core/tpl/ajaxrow.tpl.php';
 
 1686    print 
'<div class="div-table-responsive-no-min">';
 
 1687    print 
'<table id="tablelines" class="noborder noshadow centpercent">';
 
 1689    if (!empty($object->lines)) {
 
 1690      $canchangeproduct = 1;
 
 1691      $object->printObjectLines($action, $mysoc, $object->thirdparty, $lineid, 0); 
 
 1695    if ($object->statut == $object::STATUS_DRAFT && $user->hasRight(
'facture', 
'creer') && $action != 
'valid' && $action != 
'editline') {
 
 1696      if ($action != 
'editline') {
 
 1699        $parameters = array();
 
 1700        $reshook = $hookmanager->executeHooks(
'formAddObjectLine', $parameters, $object, $action); 
 
 1704        if (empty($reshook)) {
 
 1705          $object->formAddObjectLine(0, $mysoc, $object->thirdparty);
 
 1721    print 
'<div class="tabsAction">';
 
 1723    $parameters = array();
 
 1724    $reshook = $hookmanager->executeHooks(
'addMoreActionsButtons', $parameters, $object, $action); 
 
 1725    if (empty($reshook)) {
 
 1728          'class' => 
'classfortooltip',
 
 1731      if (empty($object->suspended)) {
 
 1732        if ($user->hasRight(
'facture', 
'creer')) {
 
 1733          if (!empty($object->frequency) && $object->nb_gen_max > 0 && ($object->nb_gen_done >= $object->nb_gen_max)) {
 
 1734            print 
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' . 
dol_escape_htmltag($langs->trans(
"MaxGenerationReached")) . 
'">' . $langs->trans(
"CreateBill") . 
'</a></div>';
 
 1736            if (empty($object->frequency) || $object->date_when <= $nowlasthour) {
 
 1737              print 
'<div class="inline-block divButAction"><a class="butAction" href="' . DOL_URL_ROOT . 
'/compta/facture/card.php?action=create&socid=' . $object->thirdparty->id . 
'&fac_rec=' . $object->id . 
'">' . $langs->trans(
"CreateBill") . 
'</a></div>';
 
 1739              print 
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#" title="' . 
dol_escape_htmltag($langs->trans(
"DateIsNotEnough")) . 
'">' . $langs->trans(
"CreateBill") . 
'</a></div>';
 
 1743          print 
'<div class="inline-block divButAction"><a class="butActionRefused classfortooltip" href="#">' . $langs->trans(
"CreateBill") . 
'</a></div>';
 
 1747      if ($user->hasRight(
'facture', 
'creer')) {
 
 1748        if (empty($object->suspended)) {
 
 1749          print 
'<div class="inline-block divButAction"><a class="butActionDelete" href="'.$_SERVER[
"PHP_SELF"].
'?action=disable&id='.$object->id.
'&token='.newToken().
'">'.$langs->trans(
"Disable").
'</a></div>';
 
 1751          print 
'<div class="inline-block divButAction"><a class="butAction" href="'.$_SERVER[
"PHP_SELF"].
'?action=enable&id='.$object->id.
'&token='.newToken().
'">'.$langs->trans(
"Enable").
'</a></div>';
 
 1756      print 
dolGetButtonAction($langs->trans(
"Delete"), 
'', 
'delete', $_SERVER[
"PHP_SELF"] . 
'?id=' . $object->id . 
'&action=delete&token=' . newToken(), 
'delete', $user->hasRight(
'facture', 
'supprimer'));
 
 1762    print 
'<div class="fichecenter"><div class="fichehalfleft">';
 
 1763    print 
'<a name="builddoc"></a>'; 
 
 1767    $linktoelem = $form->showLinkToObjectBlock($object, 
null, array(
'invoice'));
 
 1769    $somethingshown = $form->showLinkedObjectBlock($object, $linktoelem);
 
 1773    print 
'<div class="fichehalfright">';
 
 1778    $morehtmlcenter = 
'';
 
 1781    include_once DOL_DOCUMENT_ROOT.
'/core/class/html.formactions.class.php';
 
 1783    $morehtmlcenter = 
'';
 
 1784    $somethingshown = 
$formactions->showactions($object, $object->element, (is_object($object->thirdparty) ? $object->thirdparty->id : 0), 1, 
'', $MAXEVENT, 
'', $morehtmlcenter);
 
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.
 
const STATUS_DRAFT
Draft status.
 
Class to manage a WYSIWYG editor.
 
Class to manage invoices.
 
const TYPE_REPLACEMENT
Replacement invoice.
 
const TYPE_STANDARD
Standard invoice.
 
Class to manage invoice lines of templates.
 
Class to manage invoice templates.
 
static liste_modeles($db, $maxfilenamelength=0)
Return list of active generation modules.
 
static getIdAndTxFromCode($dbs, $code, $date_document='')
Get id and rate of currency from code.
 
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.
 
getCountry($searchkey, $withcode='', $dbtouse=0, $outputlangs='', $entconv=1, $searchlabel='')
Return country label, code or id from an id, code or label.
 
dol_get_last_hour($date, $gm='tzserver')
Return GMT time for last hour of a given GMT date (it replaces hours, min and second part to 23:59:59...
 
dol_time_plus_duree($time, $duration_value, $duration_unit, $ruleforendofmonth=0)
Add a delay to a date.
 
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.
 
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...
 
img_object($titlealt, $picto, $moreatt='', $pictoisfullpath=false, $srconly=0, $notitle=0)
Show a picto called object_picto (generic function)
 
dol_get_fiche_end($notab=0)
Return tab footer of a card.
 
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)
 
dol_clone($object, $native=0)
Create a clone of instance of object (new instance with same value for each properties) With native =...
 
dolGetButtonAction($label, $text='', $actionType='default', $url='', $id='', $userRight=1, $params=array())
Function dolGetButtonAction.
 
dol_htmlcleanlastbr($stringtodecode)
This function remove all ending   and br at end.
 
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...
 
GETPOST($paramname, $check='alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
 
info_admin($text, $infoonimgalt=0, $nodiv=0, $admin='1', $morecss='hideonsmartphone', $textfordropdown='')
Show information for admin users or standard users.
 
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,...
 
getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $object=null, $include=null)
Return array of possible common substitutions.
 
getDolGlobalString($key, $default='')
Return dolibarr global constant string value.
 
img_edit($titlealt='default', $float=0, $other='')
Show logo editer/modifier fiche.
 
img_info($titlealt='default')
Show info logo.
 
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...
 
invoice_rec_prepare_head($object)
Return array head with list of tabs to view object informations.
 
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.