diff --git a/htdocs/comm/propal.php b/htdocs/comm/propal.php index adb368af4c2..5d2da968f27 100644 --- a/htdocs/comm/propal.php +++ b/htdocs/comm/propal.php @@ -1559,13 +1559,17 @@ if ($id > 0 || ! empty($ref)) } // Send - if ($object->statut == 1 && $user->rights->propale->envoyer) + if ($object->statut == 1) { $propref = dol_sanitizeFileName($object->ref); $file = $conf->propale->dir_output . '/'.$propref.'/'.$propref.'.pdf'; if (file_exists($file)) { - print ''.$langs->trans('SendByMail').''; + if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->propale->propal_advance->send) + { + print ''.$langs->trans('SendByMail').''; + } + else print ''.$langs->trans('SendByMail').''; } } diff --git a/htdocs/commande/fiche.php b/htdocs/commande/fiche.php index b4e98cdcc30..c28a27c382f 100644 --- a/htdocs/commande/fiche.php +++ b/htdocs/commande/fiche.php @@ -1173,7 +1173,7 @@ if ($action == 'create' && $user->rights->commande->creer) $remise_percent = (!empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(!empty($soc->remise_percent)?$soc->remise_percent:0)); $remise_absolue = (!empty($objectsrc->remise_absolue)?$objectsrc->remise_absolue:(!empty($soc->remise_absolue)?$soc->remise_absolue:0)); $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:0; - + // Object source contacts list $srccontactslist = $objectsrc->liste_contact(-1,'external',1); } @@ -1447,7 +1447,7 @@ else $head = commande_prepare_head($object); dol_fiche_head($head, 'order', $langs->trans("CustomerOrder"), 0, 'order'); - + $formconfirm=''; /* @@ -1522,7 +1522,7 @@ else // Paiement incomplet. On demande si motif = escompte ou autre $formconfirm=$html->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id,$langs->trans('CloneOrder'),$langs->trans('ConfirmCloneOrder',$object->ref),'confirm_clone',$formquestion,'yes',1); } - + // Hook of thirdparty module if (empty($formconfirm) && ! empty($object->hooks)) { @@ -1531,7 +1531,7 @@ else if (empty($formconfirm)) $formconfirm = $module->formconfirm($action,$object,$lineid); } } - + // Print form confirm print $formconfirm; @@ -1741,7 +1741,7 @@ else $html->form_modes_reglement($_SERVER['PHP_SELF'].'?id='.$object->id,$object->mode_reglement_id,'none'); } print ''; - + // Availability print ''; print ''; + } + } - print "
'; @@ -1845,7 +1845,7 @@ else * Lines */ $result = $object->getLinesArray(); - + $numlines = count($object->lines); if ($conf->use_javascript_ajax && $object->statut == 0) @@ -1915,14 +1915,15 @@ else // Send if ($object->statut > 0) { - if ($user->rights->commande->envoyer) + $comref = dol_sanitizeFileName($object->ref); + $file = $conf->commande->dir_output . '/'.$comref.'/'.$comref.'.pdf'; + if (file_exists($file)) { - $comref = dol_sanitizeFileName($object->ref); - $file = $conf->commande->dir_output . '/'.$comref.'/'.$comref.'.pdf'; - if (file_exists($file)) + if ((empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->commande->order_advance->send)) { print ''.$langs->trans('SendByMail').''; } + else print ''.$langs->trans('SendByMail').''; } } @@ -1931,7 +1932,7 @@ else if ($conf->expedition->enabled) { $numshipping = $object->nb_expedition(); - + if ($object->statut > 0 && $object->statut < 3 && $object->getNbOfProductsLines() > 0) { if ($user->rights->expedition->creer) diff --git a/htdocs/compta/facture.php b/htdocs/compta/facture.php index 12a3739b88e..c2106eab306 100644 --- a/htdocs/compta/facture.php +++ b/htdocs/compta/facture.php @@ -75,7 +75,7 @@ $object=new Facture($db); // Instantiate hooks of thirdparty module if (is_array($conf->hooks_modules) && !empty($conf->hooks_modules)) { - $object->callHooks('objectcard'); + $object->callHooks('objectcard'); } @@ -87,72 +87,72 @@ if (is_array($conf->hooks_modules) && !empty($conf->hooks_modules)) // Hook of thirdparty module if (! empty($object->hooks)) { - foreach($object->hooks as $module) - { - $module->doActions($object); - $mesg = $module->error; - } + foreach($object->hooks as $module) + { + $module->doActions($object); + $mesg = $module->error; + } } // Action clone object if ($action == 'confirm_clone' && $confirm == 'yes') { - if (1==0 && empty($_REQUEST["clone_content"]) && empty($_REQUEST["clone_receivers"])) - { - $mesg='
'.$langs->trans("NoCloneOptionsSpecified").'
'; - } - else - { - $result=$object->createFromClone($id); - if ($result > 0) - { - header("Location: ".$_SERVER['PHP_SELF'].'?facid='.$result); - exit; - } - else - { - $mesg=$object->error; - $action=''; - } - } + if (1==0 && empty($_REQUEST["clone_content"]) && empty($_REQUEST["clone_receivers"])) + { + $mesg='
'.$langs->trans("NoCloneOptionsSpecified").'
'; + } + else + { + $result=$object->createFromClone($id); + if ($result > 0) + { + header("Location: ".$_SERVER['PHP_SELF'].'?facid='.$result); + exit; + } + else + { + $mesg=$object->error; + $action=''; + } + } } if ($action == 'reopen' && $user->rights->facture->creer) { - $result = $object->fetch($id); - if ($object->statut == 2 - || ($object->statut == 3 && $object->close_code != 'replaced')) - { - $result = $object->set_unpaid($user); - if ($result > 0) - { - Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$id); - exit; - } - else - { - $mesg='
'.$object->error.'
'; - } - } + $result = $object->fetch($id); + if ($object->statut == 2 + || ($object->statut == 3 && $object->close_code != 'replaced')) + { + $result = $object->set_unpaid($user); + if ($result > 0) + { + Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$id); + exit; + } + else + { + $mesg='
'.$object->error.'
'; + } + } } // Suppression de la facture if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->facture->supprimer) { - if ($user->rights->facture->supprimer) - { - $result = $object->fetch($id); - $result = $object->delete(); - if ($result > 0) - { - Header('Location: '.$_SERVER["PHP_SELF"]); - exit; - } - else - { - $mesg='
'.$object->error.'
'; - } - } + if ($user->rights->facture->supprimer) + { + $result = $object->fetch($id); + $result = $object->delete(); + if ($result > 0) + { + Header('Location: '.$_SERVER["PHP_SELF"]); + exit; + } + else + { + $mesg='
'.$object->error.'
'; + } + } } /* @@ -160,96 +160,96 @@ if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->facture-> */ if ($action == 'confirm_deleteline' && $confirm == 'yes') { - if ($user->rights->facture->creer) - { - $object->fetch($id); - $object->fetch_thirdparty(); + if ($user->rights->facture->creer) + { + $object->fetch($id); + $object->fetch_thirdparty(); - $result = $object->deleteline($_GET['lineid'], $user); - if ($result > 0) - { - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - $result=facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); - if ($result > 0) - { - Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$id); - exit; - } - } - else - { - $mesg='
'.$object->error.'
'; - $action=''; - } - } + $result = $object->deleteline($_GET['lineid'], $user); + if ($result > 0) + { + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + $result=facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); + if ($result > 0) + { + Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$id); + exit; + } + } + else + { + $mesg='
'.$object->error.'
'; + $action=''; + } + } } // Supprime affectation d'un avoir a la facture if ($action == 'unlinkdiscount') { - if ($user->rights->facture->creer) - { - $discount=new DiscountAbsolute($db); - $result=$discount->fetch($_GET["discountid"]); - $discount->unlink_invoice(); - } + if ($user->rights->facture->creer) + { + $discount=new DiscountAbsolute($db); + $result=$discount->fetch($_GET["discountid"]); + $discount->unlink_invoice(); + } } // Validation if ($action == 'valid') { - $object->fetch($id); + $object->fetch($id); - // On verifie signe facture - if ($object->type == 2) - { - // Si avoir, le signe doit etre negatif - if ($object->total_ht >= 0) - { - $mesg='
'.$langs->trans("ErrorInvoiceAvoirMustBeNegative").'
'; - $action=''; - } - } - else - { - // Si non avoir, le signe doit etre positif - if ($object->total_ht < 0) - { - $mesg='
'.$langs->trans("ErrorInvoiceOfThisTypeMustBePositive").'
'; - $action=''; - } - } + // On verifie signe facture + if ($object->type == 2) + { + // Si avoir, le signe doit etre negatif + if ($object->total_ht >= 0) + { + $mesg='
'.$langs->trans("ErrorInvoiceAvoirMustBeNegative").'
'; + $action=''; + } + } + else + { + // Si non avoir, le signe doit etre positif + if ($object->total_ht < 0) + { + $mesg='
'.$langs->trans("ErrorInvoiceOfThisTypeMustBePositive").'
'; + $action=''; + } + } } if ($action == 'classin') { - $object->fetch($id); - $object->setProject($_POST['projectid']); + $object->fetch($id); + $object->setProject($_POST['projectid']); } if ($action == 'setmode') { - $object->fetch($id); - $result=$object->mode_reglement($_POST['mode_reglement_id']); - if ($result < 0) dol_print_error($object->db,$object->error); + $object->fetch($id); + $result=$object->mode_reglement($_POST['mode_reglement_id']); + if ($result < 0) dol_print_error($object->db,$object->error); } if ($action == 'setinvoicedate') { - $object->fetch($id); - $object->date=dol_mktime(12,0,0,$_POST['invoicedatemonth'],$_POST['invoicedateday'],$_POST['invoicedateyear']); - if ($object->date_lim_reglement < $object->date) $object->date_lim_reglement=$object->date; - $result=$object->update($user); - if ($result < 0) dol_print_error($object->db,$object->error); + $object->fetch($id); + $object->date=dol_mktime(12,0,0,$_POST['invoicedatemonth'],$_POST['invoicedateday'],$_POST['invoicedateyear']); + if ($object->date_lim_reglement < $object->date) $object->date_lim_reglement=$object->date; + $result=$object->update($user); + if ($result < 0) dol_print_error($object->db,$object->error); } if ($action == 'setpaymentterm') @@ -262,243 +262,243 @@ if ($action == 'setpaymentterm') if ($action == 'setconditions') { - $object->fetch($id); - $result=$object->cond_reglement($_POST['cond_reglement_id']); - if ($result < 0) dol_print_error($object->db,$object->error); + $object->fetch($id); + $result=$object->cond_reglement($_POST['cond_reglement_id']); + if ($result < 0) dol_print_error($object->db,$object->error); } if ($action == 'setremisepercent' && $user->rights->facture->creer) { - $object->fetch($id); - $result = $object->set_remise($user, $_POST['remise_percent']); + $object->fetch($id); + $result = $object->set_remise($user, $_POST['remise_percent']); } if ($action == "setabsolutediscount" && $user->rights->facture->creer) { - // POST[remise_id] ou POST[remise_id_for_payment] - if (! empty($_POST["remise_id"])) - { - $ret=$object->fetch($id); - if ($ret > 0) - { - $result=$object->insert_discount($_POST["remise_id"]); - if ($result < 0) - { - $mesg='
'.$object->error.'
'; - } - } - else - { - dol_print_error($db,$object->error); - } - } - if (! empty($_POST["remise_id_for_payment"])) - { - require_once(DOL_DOCUMENT_ROOT.'/core/class/discount.class.php'); - $discount = new DiscountAbsolute($db); - $discount->fetch($_POST["remise_id_for_payment"]); + // POST[remise_id] ou POST[remise_id_for_payment] + if (! empty($_POST["remise_id"])) + { + $ret=$object->fetch($id); + if ($ret > 0) + { + $result=$object->insert_discount($_POST["remise_id"]); + if ($result < 0) + { + $mesg='
'.$object->error.'
'; + } + } + else + { + dol_print_error($db,$object->error); + } + } + if (! empty($_POST["remise_id_for_payment"])) + { + require_once(DOL_DOCUMENT_ROOT.'/core/class/discount.class.php'); + $discount = new DiscountAbsolute($db); + $discount->fetch($_POST["remise_id_for_payment"]); - $result=$discount->link_to_invoice(0,$id); - if ($result < 0) - { - $mesg='
'.$discount->error.'
'; - } - } + $result=$discount->link_to_invoice(0,$id); + if ($result < 0) + { + $mesg='
'.$discount->error.'
'; + } + } } if ($action == 'set_ref_client') { - $object->fetch($id); - $object->set_ref_client($_POST['ref_client']); + $object->fetch($id); + $object->set_ref_client($_POST['ref_client']); } // Classify to validated if ($action == 'confirm_valid' && $confirm == 'yes' && $user->rights->facture->valider) { - $object->fetch($id); - $object->fetch_thirdparty(); + $object->fetch($id); + $object->fetch_thirdparty(); - $result = $object->validate($user); - if ($result >= 0) - { - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); - } - else - { - $mesg='
'.$object->error.'
'; - } + $result = $object->validate($user); + if ($result >= 0) + { + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); + } + else + { + $mesg='
'.$object->error.'
'; + } } // Repasse la facture en mode brouillon (unvalidate) if ($action == 'modif' && $user->rights->facture->unvalidate) { - $object->fetch($id); - $object->fetch_thirdparty(); + $object->fetch($id); + $object->fetch_thirdparty(); - // On verifie si la facture a des paiements - $sql = 'SELECT pf.amount'; - $sql.= ' FROM '.MAIN_DB_PREFIX.'paiement_facture as pf'; - $sql.= ' WHERE pf.fk_facture = '.$object->id; + // On verifie si la facture a des paiements + $sql = 'SELECT pf.amount'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'paiement_facture as pf'; + $sql.= ' WHERE pf.fk_facture = '.$object->id; - $result = $db->query($sql); - if ($result) - { - $i = 0; - $num = $db->num_rows($result); + $result = $db->query($sql); + if ($result) + { + $i = 0; + $num = $db->num_rows($result); - while ($i < $num) - { - $objp = $db->fetch_object($result); - $totalpaye += $objp->amount; - $i++; - } - } - else - { - dol_print_error($db,''); - } + while ($i < $num) + { + $objp = $db->fetch_object($result); + $totalpaye += $objp->amount; + $i++; + } + } + else + { + dol_print_error($db,''); + } - $resteapayer = $object->total_ttc - $totalpaye; + $resteapayer = $object->total_ttc - $totalpaye; - // On verifie si les lignes de factures ont ete exportees en compta et/ou ventilees - $ventilExportCompta = $object->getVentilExportCompta(); + // On verifie si les lignes de factures ont ete exportees en compta et/ou ventilees + $ventilExportCompta = $object->getVentilExportCompta(); - // On verifie si aucun paiement n'a ete effectue - if ($resteapayer == $object->total_ttc && $object->paye == 0 && $ventilExportCompta == 0) - { - $object->set_draft($user); + // On verifie si aucun paiement n'a ete effectue + if ($resteapayer == $object->total_ttc && $object->paye == 0 && $ventilExportCompta == 0) + { + $object->set_draft($user); - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); - } + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); + } } // Classify "paid" if ($action == 'confirm_paid' && $confirm == 'yes' && $user->rights->facture->paiement) { - $object->fetch($id); - $result = $object->set_paid($user); + $object->fetch($id); + $result = $object->set_paid($user); } // Classif "paid partialy" if ($action == 'confirm_paid_partially' && $confirm == 'yes' && $user->rights->facture->paiement) { - $object->fetch($id); - $close_code=$_POST["close_code"]; - $close_note=$_POST["close_note"]; - if ($close_code) - { - $result = $object->set_paid($user,$close_code,$close_note); - } - else - { - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("Reason")).'
'; - } + $object->fetch($id); + $close_code=$_POST["close_code"]; + $close_note=$_POST["close_note"]; + if ($close_code) + { + $result = $object->set_paid($user,$close_code,$close_note); + } + else + { + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("Reason")).'
'; + } } // Classify "abandoned" if ($action == 'confirm_canceled' && $confirm == 'yes') { - $object->fetch($id); - $close_code=$_POST["close_code"]; - $close_note=$_POST["close_note"]; - if ($close_code) - { - $result = $object->set_canceled($user,$close_code,$close_note); - } - else - { - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("Reason")).'
'; - } + $object->fetch($id); + $close_code=$_POST["close_code"]; + $close_note=$_POST["close_note"]; + if ($close_code) + { + $result = $object->set_canceled($user,$close_code,$close_note); + } + else + { + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("Reason")).'
'; + } } // Convertir en reduc if ($action == 'confirm_converttoreduc' && $confirm == 'yes' && $user->rights->facture->creer) { - $db->begin(); + $db->begin(); - $object->fetch($id); - $object->fetch_thirdparty(); - $object->fetch_lines(); + $object->fetch($id); + $object->fetch_thirdparty(); + $object->fetch_lines(); - if (! $object->paye) // protection against multiple submit - { - // Boucle sur chaque taux de tva - $i=0; - foreach($object->lines as $line) - { - $amount_ht[$line->tva_tx]+=$line->total_ht; - $amount_tva[$line->tva_tx]+=$line->total_tva; - $amount_ttc[$line->tva_tx]+=$line->total_ttc; - $i++; - } + if (! $object->paye) // protection against multiple submit + { + // Boucle sur chaque taux de tva + $i=0; + foreach($object->lines as $line) + { + $amount_ht[$line->tva_tx]+=$line->total_ht; + $amount_tva[$line->tva_tx]+=$line->total_tva; + $amount_ttc[$line->tva_tx]+=$line->total_ttc; + $i++; + } - // Insert one discount by VAT rate category - $discount = new DiscountAbsolute($db); - if ($object->type == 2) $discount->description='(CREDIT_NOTE)'; - elseif ($object->type == 3) $discount->description='(DEPOSIT)'; - else { - $this->error="CantConvertToReducAnInvoiceOfThisType"; - return -1; - } - $discount->tva_tx=abs($object->total_ttc); - $discount->fk_soc=$object->socid; - $discount->fk_facture_source=$object->id; + // Insert one discount by VAT rate category + $discount = new DiscountAbsolute($db); + if ($object->type == 2) $discount->description='(CREDIT_NOTE)'; + elseif ($object->type == 3) $discount->description='(DEPOSIT)'; + else { + $this->error="CantConvertToReducAnInvoiceOfThisType"; + return -1; + } + $discount->tva_tx=abs($object->total_ttc); + $discount->fk_soc=$object->socid; + $discount->fk_facture_source=$object->id; - $error=0; - foreach($amount_ht as $tva_tx => $xxx) - { - $discount->amount_ht=abs($amount_ht[$tva_tx]); - $discount->amount_tva=abs($amount_tva[$tva_tx]); - $discount->amount_ttc=abs($amount_ttc[$tva_tx]); - $discount->tva_tx=abs($tva_tx); + $error=0; + foreach($amount_ht as $tva_tx => $xxx) + { + $discount->amount_ht=abs($amount_ht[$tva_tx]); + $discount->amount_tva=abs($amount_tva[$tva_tx]); + $discount->amount_ttc=abs($amount_ttc[$tva_tx]); + $discount->tva_tx=abs($tva_tx); - $result=$discount->create($user); - if ($result < 0) - { - $error++; - break; - } - } + $result=$discount->create($user); + if ($result < 0) + { + $error++; + break; + } + } - if (! $error) - { - // Classe facture - $result=$object->set_paid($user); - if ($result > 0) - { - //$mesg='OK'.$discount->id; - $db->commit(); - } - else - { - $mesg='
'.$object->error.'
'; - $db->rollback(); - } - } - else - { - $mesg='
'.$discount->error.'
'; - $db->rollback(); - } - } + if (! $error) + { + // Classe facture + $result=$object->set_paid($user); + if ($result > 0) + { + //$mesg='OK'.$discount->id; + $db->commit(); + } + else + { + $mesg='
'.$object->error.'
'; + $db->rollback(); + } + } + else + { + $mesg='
'.$discount->error.'
'; + $db->rollback(); + } + } } @@ -508,405 +508,405 @@ if ($action == 'confirm_converttoreduc' && $confirm == 'yes' && $user->rights->f */ if ($action == 'add' && $user->rights->facture->creer) { - $object->socid=GETPOST('socid'); + $object->socid=GETPOST('socid'); - $db->begin(); + $db->begin(); - // Replacement invoice - if ($_POST['type'] == 1) - { - $datefacture = dol_mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); - if (empty($datefacture)) - { - $error=1; - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("Date")).'
'; - } + // Replacement invoice + if ($_POST['type'] == 1) + { + $datefacture = dol_mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); + if (empty($datefacture)) + { + $error=1; + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("Date")).'
'; + } - if (! ($_POST['fac_replacement'] > 0)) - { - $error=1; - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("ReplaceInvoice")).'
'; - } + if (! ($_POST['fac_replacement'] > 0)) + { + $error=1; + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("ReplaceInvoice")).'
'; + } - if (! $error) - { - // This is a replacement invoice - $result=$object->fetch($_POST['fac_replacement']); - $object->fetch_thirdparty(); + if (! $error) + { + // This is a replacement invoice + $result=$object->fetch($_POST['fac_replacement']); + $object->fetch_thirdparty(); - $object->date = $datefacture; - $object->note_public = trim($_POST['note_public']); - $object->note = trim($_POST['note']); - $object->ref_client = $_POST['ref_client']; - $object->modelpdf = $_POST['model']; - $object->fk_project = $_POST['projectid']; - $object->cond_reglement_id = $_POST['cond_reglement_id']; - $object->mode_reglement_id = $_POST['mode_reglement_id']; - $object->remise_absolue = $_POST['remise_absolue']; - $object->remise_percent = $_POST['remise_percent']; + $object->date = $datefacture; + $object->note_public = trim($_POST['note_public']); + $object->note = trim($_POST['note']); + $object->ref_client = $_POST['ref_client']; + $object->modelpdf = $_POST['model']; + $object->fk_project = $_POST['projectid']; + $object->cond_reglement_id = $_POST['cond_reglement_id']; + $object->mode_reglement_id = $_POST['mode_reglement_id']; + $object->remise_absolue = $_POST['remise_absolue']; + $object->remise_percent = $_POST['remise_percent']; - // Proprietes particulieres a facture de remplacement - $object->fk_facture_source = $_POST['fac_replacement']; - $object->type = 1; + // Proprietes particulieres a facture de remplacement + $object->fk_facture_source = $_POST['fac_replacement']; + $object->type = 1; - $id=$object->createFromCurrent($user); - if ($id <= 0) $mesg=$object->error; - } - } + $id=$object->createFromCurrent($user); + if ($id <= 0) $mesg=$object->error; + } + } - // Credit note invoice - if ($_POST['type'] == 2) - { - if (! $_POST['fac_avoir'] > 0) - { - $error=1; - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("CorrectInvoice")).'
'; - } + // Credit note invoice + if ($_POST['type'] == 2) + { + if (! $_POST['fac_avoir'] > 0) + { + $error=1; + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("CorrectInvoice")).'
'; + } - $datefacture = dol_mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); - if (empty($datefacture)) - { - $error=1; - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("Date")).'
'; - } + $datefacture = dol_mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); + if (empty($datefacture)) + { + $error=1; + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("Date")).'
'; + } - if (! $error) - { - // Si facture avoir - $datefacture = dol_mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); + if (! $error) + { + // Si facture avoir + $datefacture = dol_mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); - //$result=$object->fetch($_POST['fac_avoir']); + //$result=$object->fetch($_POST['fac_avoir']); - $object->socid = $_POST['socid']; - $object->number = $_POST['facnumber']; - $object->date = $datefacture; - $object->note_public = trim($_POST['note_public']); - $object->note = trim($_POST['note']); - $object->ref_client = $_POST['ref_client']; - $object->modelpdf = $_POST['model']; - $object->fk_project = $_POST['projectid']; - $object->cond_reglement_id = 0; - $object->mode_reglement_id = $_POST['mode_reglement_id']; - $object->remise_absolue = $_POST['remise_absolue']; - $object->remise_percent = $_POST['remise_percent']; + $object->socid = $_POST['socid']; + $object->number = $_POST['facnumber']; + $object->date = $datefacture; + $object->note_public = trim($_POST['note_public']); + $object->note = trim($_POST['note']); + $object->ref_client = $_POST['ref_client']; + $object->modelpdf = $_POST['model']; + $object->fk_project = $_POST['projectid']; + $object->cond_reglement_id = 0; + $object->mode_reglement_id = $_POST['mode_reglement_id']; + $object->remise_absolue = $_POST['remise_absolue']; + $object->remise_percent = $_POST['remise_percent']; - // Proprietes particulieres a facture avoir - $object->fk_facture_source = $_POST['fac_avoir']; - $object->type = 2; + // Proprietes particulieres a facture avoir + $object->fk_facture_source = $_POST['fac_avoir']; + $object->type = 2; - $id = $object->create($user); + $id = $object->create($user); - // Add predefined lines - for ($i = 1; $i <= $NBLINES; $i++) - { - if ($_POST['idprod'.$i]) - { - $product=new Product($db); - $product->fetch($_POST['idprod'.$i]); - $startday=dol_mktime(12, 0 , 0, $_POST['date_start'.$i.'month'], $_POST['date_start'.$i.'day'], $_POST['date_start'.$i.'year']); - $endday=dol_mktime(12, 0 , 0, $_POST['date_end'.$i.'month'], $_POST['date_end'.$i.'day'], $_POST['date_end'.$i.'year']); - $result=$object->addline($id,$product->description,$product->price, $_POST['qty'.$i], $product->tva_tx, $product->localtax1_tx, $product->localtax2_tx, $_POST['idprod'.$i], $_POST['remise_percent'.$i], $startday, $endday, 0, 0, '', $product->price_base_type, $product->price_ttc, $product->type); - } - } - } - } + // Add predefined lines + for ($i = 1; $i <= $NBLINES; $i++) + { + if ($_POST['idprod'.$i]) + { + $product=new Product($db); + $product->fetch($_POST['idprod'.$i]); + $startday=dol_mktime(12, 0 , 0, $_POST['date_start'.$i.'month'], $_POST['date_start'.$i.'day'], $_POST['date_start'.$i.'year']); + $endday=dol_mktime(12, 0 , 0, $_POST['date_end'.$i.'month'], $_POST['date_end'.$i.'day'], $_POST['date_end'.$i.'year']); + $result=$object->addline($id,$product->description,$product->price, $_POST['qty'.$i], $product->tva_tx, $product->localtax1_tx, $product->localtax2_tx, $_POST['idprod'.$i], $_POST['remise_percent'.$i], $startday, $endday, 0, 0, '', $product->price_base_type, $product->price_ttc, $product->type); + } + } + } + } - // Standard invoice or Deposit invoice created from a Predefined invoice - if (($_POST['type'] == 0 || $_POST['type'] == 3) && $_POST['fac_rec'] > 0) - { - $datefacture = dol_mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); - if (empty($datefacture)) - { - $error=1; - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("Date")).'
'; - } + // Standard invoice or Deposit invoice created from a Predefined invoice + if (($_POST['type'] == 0 || $_POST['type'] == 3) && $_POST['fac_rec'] > 0) + { + $datefacture = dol_mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); + if (empty($datefacture)) + { + $error=1; + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("Date")).'
'; + } - if (! $error) - { - $object->socid = $_POST['socid']; - $object->type = $_POST['type']; - $object->number = $_POST['facnumber']; - $object->date = $datefacture; - $object->note_public = trim($_POST['note_public']); - $object->note = trim($_POST['note']); - $object->ref_client = $_POST['ref_client']; - $object->modelpdf = $_POST['model']; + if (! $error) + { + $object->socid = $_POST['socid']; + $object->type = $_POST['type']; + $object->number = $_POST['facnumber']; + $object->date = $datefacture; + $object->note_public = trim($_POST['note_public']); + $object->note = trim($_POST['note']); + $object->ref_client = $_POST['ref_client']; + $object->modelpdf = $_POST['model']; - // Source facture - $object->fac_rec = $_POST['fac_rec']; + // Source facture + $object->fac_rec = $_POST['fac_rec']; - $id = $object->create($user); - } - } + $id = $object->create($user); + } + } - // Standard or deposit or proforma invoice - if (($_POST['type'] == 0 || $_POST['type'] == 3 || $_POST['type'] == 4) && $_POST['fac_rec'] <= 0) - { - $datefacture = dol_mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); - if (empty($datefacture)) - { - $error=1; - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("Date")).'
'; - } + // Standard or deposit or proforma invoice + if (($_POST['type'] == 0 || $_POST['type'] == 3 || $_POST['type'] == 4) && $_POST['fac_rec'] <= 0) + { + $datefacture = dol_mktime(12, 0 , 0, $_POST['remonth'], $_POST['reday'], $_POST['reyear']); + if (empty($datefacture)) + { + $error=1; + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("Date")).'
'; + } - if (! $error) - { - // Si facture standard - $object->socid = $_POST['socid']; - $object->type = $_POST['type']; - $object->number = $_POST['facnumber']; - $object->date = $datefacture; - $object->note_public = trim($_POST['note_public']); - $object->note = trim($_POST['note']); - $object->ref_client = $_POST['ref_client']; - $object->modelpdf = $_POST['model']; - $object->fk_project = $_POST['projectid']; - $object->cond_reglement_id = ($_POST['type'] == 3?1:$_POST['cond_reglement_id']); - $object->mode_reglement_id = $_POST['mode_reglement_id']; - $object->amount = $_POST['amount']; - $object->remise_absolue = $_POST['remise_absolue']; - $object->remise_percent = $_POST['remise_percent']; + if (! $error) + { + // Si facture standard + $object->socid = $_POST['socid']; + $object->type = $_POST['type']; + $object->number = $_POST['facnumber']; + $object->date = $datefacture; + $object->note_public = trim($_POST['note_public']); + $object->note = trim($_POST['note']); + $object->ref_client = $_POST['ref_client']; + $object->modelpdf = $_POST['model']; + $object->fk_project = $_POST['projectid']; + $object->cond_reglement_id = ($_POST['type'] == 3?1:$_POST['cond_reglement_id']); + $object->mode_reglement_id = $_POST['mode_reglement_id']; + $object->amount = $_POST['amount']; + $object->remise_absolue = $_POST['remise_absolue']; + $object->remise_percent = $_POST['remise_percent']; - // If creation from another object of another module (Example: origin=propal, originid=1) - if ($_POST['origin'] && $_POST['originid']) - { - // Parse element/subelement (ex: project_task) - $element = $subelement = $_POST['origin']; - if (preg_match('/^([^_]+)_([^_]+)/i',$_POST['origin'],$regs)) - { - $element = $regs[1]; - $subelement = $regs[2]; - } + // If creation from another object of another module (Example: origin=propal, originid=1) + if ($_POST['origin'] && $_POST['originid']) + { + // Parse element/subelement (ex: project_task) + $element = $subelement = $_POST['origin']; + if (preg_match('/^([^_]+)_([^_]+)/i',$_POST['origin'],$regs)) + { + $element = $regs[1]; + $subelement = $regs[2]; + } - // For compatibility - if ($element == 'order') { $element = $subelement = 'commande'; } - if ($element == 'propal') { $element = 'comm/propal'; $subelement = 'propal'; } - if ($element == 'contract') { $element = $subelement = 'contrat'; } + // For compatibility + if ($element == 'order') { $element = $subelement = 'commande'; } + if ($element == 'propal') { $element = 'comm/propal'; $subelement = 'propal'; } + if ($element == 'contract') { $element = $subelement = 'contrat'; } - $object->origin = $_POST['origin']; - $object->origin_id = $_POST['originid']; + $object->origin = $_POST['origin']; + $object->origin_id = $_POST['originid']; - $id = $object->create($user); + $id = $object->create($user); - if ($id > 0) - { - dol_include_once('/'.$element.'/class/'.$subelement.'.class.php'); + if ($id > 0) + { + dol_include_once('/'.$element.'/class/'.$subelement.'.class.php'); - $classname = ucfirst($subelement); - $srcobject = new $classname($db); + $classname = ucfirst($subelement); + $srcobject = new $classname($db); - dol_syslog("Try to find source object origin=".$object->origin." originid=".$object->origin_id." to add lines"); - $result=$srcobject->fetch($object->origin_id); - if ($result > 0) - { - $lines = $srcobject->lines; - if (empty($lines) && method_exists($srcobject,'fetch_lines')) $lines = $srcobject->fetch_lines(); + dol_syslog("Try to find source object origin=".$object->origin." originid=".$object->origin_id." to add lines"); + $result=$srcobject->fetch($object->origin_id); + if ($result > 0) + { + $lines = $srcobject->lines; + if (empty($lines) && method_exists($srcobject,'fetch_lines')) $lines = $srcobject->fetch_lines(); - $fk_parent_line=0; - $num=sizeof($lines); + $fk_parent_line=0; + $num=sizeof($lines); - for ($i=0;$i<$num;$i++) - { - $desc=($lines[$i]->desc?$lines[$i]->desc:$lines[$i]->libelle); - $product_type=($lines[$i]->product_type?$lines[$i]->product_type:0); + for ($i=0;$i<$num;$i++) + { + $desc=($lines[$i]->desc?$lines[$i]->desc:$lines[$i]->libelle); + $product_type=($lines[$i]->product_type?$lines[$i]->product_type:0); - // Dates - // TODO mutualiser - $date_start=$lines[$i]->date_debut_prevue; - if ($lines[$i]->date_debut_reel) $date_start=$lines[$i]->date_debut_reel; - if ($lines[$i]->date_start) $date_start=$lines[$i]->date_start; - $date_end=$lines[$i]->date_fin_prevue; - if ($lines[$i]->date_fin_reel) $date_end=$lines[$i]->date_fin_reel; - if ($lines[$i]->date_end) $date_end=$lines[$i]->date_end; + // Dates + // TODO mutualiser + $date_start=$lines[$i]->date_debut_prevue; + if ($lines[$i]->date_debut_reel) $date_start=$lines[$i]->date_debut_reel; + if ($lines[$i]->date_start) $date_start=$lines[$i]->date_start; + $date_end=$lines[$i]->date_fin_prevue; + if ($lines[$i]->date_fin_reel) $date_end=$lines[$i]->date_fin_reel; + if ($lines[$i]->date_end) $date_end=$lines[$i]->date_end; - // Reset fk_parent_line for no child products and special product - if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) { - $fk_parent_line = 0; - } + // Reset fk_parent_line for no child products and special product + if (($lines[$i]->product_type != 9 && empty($lines[$i]->fk_parent_line)) || $lines[$i]->product_type == 9) { + $fk_parent_line = 0; + } - $result = $object->addline( - $id, - $desc, - $lines[$i]->subprice, - $lines[$i]->qty, - $lines[$i]->tva_tx, - $lines[$i]->localtax1_tx, - $lines[$i]->localtax2_tx, - $lines[$i]->fk_product, - $lines[$i]->remise_percent, - $date_start, - $date_end, - 0, - $lines[$i]->info_bits, - $lines[$i]->fk_remise_except, + $result = $object->addline( + $id, + $desc, + $lines[$i]->subprice, + $lines[$i]->qty, + $lines[$i]->tva_tx, + $lines[$i]->localtax1_tx, + $lines[$i]->localtax2_tx, + $lines[$i]->fk_product, + $lines[$i]->remise_percent, + $date_start, + $date_end, + 0, + $lines[$i]->info_bits, + $lines[$i]->fk_remise_except, 'HT', - 0, - $product_type, - $lines[$i]->rang, - $lines[$i]->special_code, - $object->origin, - $lines[$i]->rowid, - $fk_parent_line - ); + 0, + $product_type, + $lines[$i]->rang, + $lines[$i]->special_code, + $object->origin, + $lines[$i]->rowid, + $fk_parent_line + ); - if ($result < 0) - { - $error++; - break; - } + if ($result < 0) + { + $error++; + break; + } - // Defined the new fk_parent_line - if ($result > 0 && $lines[$i]->product_type == 9) { - $fk_parent_line = $result; - } - } + // Defined the new fk_parent_line + if ($result > 0 && $lines[$i]->product_type == 9) { + $fk_parent_line = $result; + } + } - // Hooks - if (! empty($object->hooks)) - { - foreach($object->hooks as $module) - { - $res = $module->createfrom($srcobject,$id,$object->element); - if ($res < 0) $error++; - } - } - } - else - { - $mesg=$srcobject->error; - $error++; - } - } - else - { - $mesg=$object->error; - $error++; - } - } - // If some invoice's lines already known - else - { - $id = $object->create($user); + // Hooks + if (! empty($object->hooks)) + { + foreach($object->hooks as $module) + { + $res = $module->createfrom($srcobject,$id,$object->element); + if ($res < 0) $error++; + } + } + } + else + { + $mesg=$srcobject->error; + $error++; + } + } + else + { + $mesg=$object->error; + $error++; + } + } + // If some invoice's lines already known + else + { + $id = $object->create($user); - for ($i = 1; $i <= $NBLINES; $i++) - { - if ($_POST['idprod'.$i]) - { - $product=new Product($db); - $product->fetch($_POST['idprod'.$i]); - $startday=dol_mktime(12, 0 , 0, $_POST['date_start'.$i.'month'], $_POST['date_start'.$i.'day'], $_POST['date_start'.$i.'year']); - $endday=dol_mktime(12, 0 , 0, $_POST['date_end'.$i.'month'], $_POST['date_end'.$i.'day'], $_POST['date_end'.$i.'year']); - $result=$object->addline($id,$product->description,$product->price, $_POST['qty'.$i], $product->tva_tx, $product->localtax1_tx, $product->localtax2_tx, $_POST['idprod'.$i], $_POST['remise_percent'.$i], $startday, $endday, 0, 0, '', $product->price_base_type, $product->price_ttc, $product->type); - } - } - } - } - } + for ($i = 1; $i <= $NBLINES; $i++) + { + if ($_POST['idprod'.$i]) + { + $product=new Product($db); + $product->fetch($_POST['idprod'.$i]); + $startday=dol_mktime(12, 0 , 0, $_POST['date_start'.$i.'month'], $_POST['date_start'.$i.'day'], $_POST['date_start'.$i.'year']); + $endday=dol_mktime(12, 0 , 0, $_POST['date_end'.$i.'month'], $_POST['date_end'.$i.'day'], $_POST['date_end'.$i.'year']); + $result=$object->addline($id,$product->description,$product->price, $_POST['qty'.$i], $product->tva_tx, $product->localtax1_tx, $product->localtax2_tx, $_POST['idprod'.$i], $_POST['remise_percent'.$i], $startday, $endday, 0, 0, '', $product->price_base_type, $product->price_ttc, $product->type); + } + } + } + } + } - // End of object creation, we show it - if ($id > 0 && ! $error) - { - $db->commit(); - Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$id); - exit; - } - else - { - $db->rollback(); - $_GET["action"]='create'; - $_GET["origin"]=$_POST["origin"]; - $_GET["originid"]=$_POST["originid"]; - if (! $mesg) $mesg='
'.$object->error.'
'; - } + // End of object creation, we show it + if ($id > 0 && ! $error) + { + $db->commit(); + Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$id); + exit; + } + else + { + $db->rollback(); + $_GET["action"]='create'; + $_GET["origin"]=$_POST["origin"]; + $_GET["originid"]=$_POST["originid"]; + if (! $mesg) $mesg='
'.$object->error.'
'; + } } // Add a new line if (($action == 'addline' || $action == 'addline_predef') && $user->rights->facture->creer) { - $result=0; + $result=0; - if (empty($_POST['idprod']) && $_POST["type"] < 0) - { - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Type")).'
'; - $result = -1 ; - } - if (empty($_POST['idprod']) && (! isset($_POST["np_price"]) || $_POST["np_price"]=='')) // Unit price can be 0 but not '' - { - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("UnitPriceHT")).'
'; - $result = -1 ; - } - if (empty($_POST['idprod']) && empty($_POST["np_desc"]) && empty($_POST["dp_desc"])) - { - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Description")).'
'; - $result = -1 ; - } - if (! isset($_POST['qty']) || $_POST['qty']=='') - { - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv('Qty')).'
'; - $result = -1 ; - } - if ($result >= 0 && ( ($_POST['np_price']!='' && ($_POST['np_desc'] || $_POST['dp_desc'])) || $_POST['idprod'] ) ) - { - $ret=$object->fetch($id); - if ($ret < 0) - { - dol_print_error($db,$object->error); - exit; - } - $ret=$object->fetch_thirdparty(); + if (empty($_POST['idprod']) && $_POST["type"] < 0) + { + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Type")).'
'; + $result = -1 ; + } + if (empty($_POST['idprod']) && (! isset($_POST["np_price"]) || $_POST["np_price"]=='')) // Unit price can be 0 but not '' + { + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("UnitPriceHT")).'
'; + $result = -1 ; + } + if (empty($_POST['idprod']) && empty($_POST["np_desc"]) && empty($_POST["dp_desc"])) + { + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Description")).'
'; + $result = -1 ; + } + if (! isset($_POST['qty']) || $_POST['qty']=='') + { + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv('Qty')).'
'; + $result = -1 ; + } + if ($result >= 0 && ( ($_POST['np_price']!='' && ($_POST['np_desc'] || $_POST['dp_desc'])) || $_POST['idprod'] ) ) + { + $ret=$object->fetch($id); + if ($ret < 0) + { + dol_print_error($db,$object->error); + exit; + } + $ret=$object->fetch_thirdparty(); - $suffixe = $_POST['idprod'] ? '_predef' : ''; - $date_start=dol_mktime($_POST['date_start'.$suffixe.'hour'],$_POST['date_start'.$suffixe.'min'],$_POST['date_start'.$suffixe.'sec'],$_POST['date_start'.$suffixe.'month'],$_POST['date_start'.$suffixe.'day'],$_POST['date_start'.$suffixe.'year']); - $date_end=dol_mktime($_POST['date_end'.$suffixe.'hour'],$_POST['date_end'.$suffixe.'min'],$_POST['date_end'.$suffixe.'sec'],$_POST['date_end'.$suffixe.'month'],$_POST['date_end'.$suffixe.'day'],$_POST['date_end'.$suffixe.'year']); + $suffixe = $_POST['idprod'] ? '_predef' : ''; + $date_start=dol_mktime($_POST['date_start'.$suffixe.'hour'],$_POST['date_start'.$suffixe.'min'],$_POST['date_start'.$suffixe.'sec'],$_POST['date_start'.$suffixe.'month'],$_POST['date_start'.$suffixe.'day'],$_POST['date_start'.$suffixe.'year']); + $date_end=dol_mktime($_POST['date_end'.$suffixe.'hour'],$_POST['date_end'.$suffixe.'min'],$_POST['date_end'.$suffixe.'sec'],$_POST['date_end'.$suffixe.'month'],$_POST['date_end'.$suffixe.'day'],$_POST['date_end'.$suffixe.'year']); - $price_base_type = 'HT'; + $price_base_type = 'HT'; - // Ecrase $pu par celui du produit - // Ecrase $desc par celui du produit - // Ecrase $txtva par celui du produit - // Ecrase $base_price_type par celui du produit - if ($_POST['idprod']) - { - $prod = new Product($db, $_POST['idprod']); - $prod->fetch($_POST['idprod']); + // Ecrase $pu par celui du produit + // Ecrase $desc par celui du produit + // Ecrase $txtva par celui du produit + // Ecrase $base_price_type par celui du produit + if ($_POST['idprod']) + { + $prod = new Product($db, $_POST['idprod']); + $prod->fetch($_POST['idprod']); - $tva_tx = get_default_tva($mysoc,$object->client,$prod->id); - $tva_npr = get_default_npr($mysoc,$object->client,$prod->id); + $tva_tx = get_default_tva($mysoc,$object->client,$prod->id); + $tva_npr = get_default_npr($mysoc,$object->client,$prod->id); - // We define price for product - if ($conf->global->PRODUIT_MULTIPRICES && $object->client->price_level) - { - $pu_ht = $prod->multiprices[$object->client->price_level]; - $pu_ttc = $prod->multiprices_ttc[$object->client->price_level]; - $price_min = $prod->multiprices_min[$object->client->price_level]; - $price_base_type = $prod->multiprices_base_type[$object->client->price_level]; - } - else - { - $pu_ht = $prod->price; - $pu_ttc = $prod->price_ttc; - $price_min = $prod->price_min; - $price_base_type = $prod->price_base_type; - } + // We define price for product + if ($conf->global->PRODUIT_MULTIPRICES && $object->client->price_level) + { + $pu_ht = $prod->multiprices[$object->client->price_level]; + $pu_ttc = $prod->multiprices_ttc[$object->client->price_level]; + $price_min = $prod->multiprices_min[$object->client->price_level]; + $price_base_type = $prod->multiprices_base_type[$object->client->price_level]; + } + else + { + $pu_ht = $prod->price; + $pu_ttc = $prod->price_ttc; + $price_min = $prod->price_min; + $price_base_type = $prod->price_base_type; + } - // On reevalue prix selon taux tva car taux tva transaction peut etre different - // de ceux du produit par defaut (par exemple si pays different entre vendeur et acheteur). - if ($tva_tx != $prod->tva_tx) - { - if ($price_base_type != 'HT') - { - $pu_ht = price2num($pu_ttc / (1 + ($tva_tx/100)), 'MU'); - } - else - { - $pu_ttc = price2num($pu_ht * (1 + ($tva_tx/100)), 'MU'); - } - } + // On reevalue prix selon taux tva car taux tva transaction peut etre different + // de ceux du produit par defaut (par exemple si pays different entre vendeur et acheteur). + if ($tva_tx != $prod->tva_tx) + { + if ($price_base_type != 'HT') + { + $pu_ht = price2num($pu_ttc / (1 + ($tva_tx/100)), 'MU'); + } + else + { + $pu_ttc = price2num($pu_ht * (1 + ($tva_tx/100)), 'MU'); + } + } - $desc = $prod->description; + $desc = $prod->description; $desc.= ($prod->description && $_POST['np_desc']) ? ((dol_textishtml($prod->description) || dol_textishtml($_POST['np_desc']))?"
\n":"\n") : ""; - $desc.= $_POST['np_desc']; + $desc.= $_POST['np_desc']; if (! empty($prod->customcode) || ! empty($prod->country_code)) { $tmptxt='('; @@ -916,174 +916,174 @@ if (($action == 'addline' || $action == 'addline_predef') && $user->rights->fact $tmptxt.=')'; $desc.= (dol_textishtml($desc)?"
\n":"\n").$tmptxt; } - $type = $prod->type; - } - else - { - $pu_ht=$_POST['np_price']; - $tva_tx=str_replace('*','',$_POST['np_tva_tx']); - $tva_npr=preg_match('/\*/',$_POST['np_tva_tx'])?1:0; - $desc=$_POST['dp_desc']; - $type=$_POST["type"]; - } + $type = $prod->type; + } + else + { + $pu_ht=$_POST['np_price']; + $tva_tx=str_replace('*','',$_POST['np_tva_tx']); + $tva_npr=preg_match('/\*/',$_POST['np_tva_tx'])?1:0; + $desc=$_POST['dp_desc']; + $type=$_POST["type"]; + } - $localtax1_tx=get_localtax($tva_tx,1,$object->client); - $localtax2_tx=get_localtax($tva_tx,2,$object->client); + $localtax1_tx=get_localtax($tva_tx,1,$object->client); + $localtax2_tx=get_localtax($tva_tx,2,$object->client); - $info_bits=0; - if ($tva_npr) $info_bits |= 0x01; + $info_bits=0; + if ($tva_npr) $info_bits |= 0x01; - if ($result >= 0) - { - if($price_min && (price2num($pu_ht)*(1-price2num($_POST['remise_percent'])/100) < price2num($price_min))) - { - $object->error = $langs->trans("CantBeLessThanMinPrice",price2num($price_min,'MU').' '.$langs->trans("Currency".$conf->monnaie)) ; - $result = -1 ; - } - else - { - // Insert line - $result = $object->addline( - $id, - $desc, - $pu_ht, - $_POST['qty'], - $tva_tx, - $localtax1_tx, - $localtax2_tx, - $_POST['idprod'], - $_POST['remise_percent'], - $date_start, - $date_end, - 0, - $info_bits, + if ($result >= 0) + { + if($price_min && (price2num($pu_ht)*(1-price2num($_POST['remise_percent'])/100) < price2num($price_min))) + { + $object->error = $langs->trans("CantBeLessThanMinPrice",price2num($price_min,'MU').' '.$langs->trans("Currency".$conf->monnaie)) ; + $result = -1 ; + } + else + { + // Insert line + $result = $object->addline( + $id, + $desc, + $pu_ht, + $_POST['qty'], + $tva_tx, + $localtax1_tx, + $localtax2_tx, + $_POST['idprod'], + $_POST['remise_percent'], + $date_start, + $date_end, + 0, + $info_bits, '', - $price_base_type, - $pu_ttc, - $type - ); - } - } - } + $price_base_type, + $pu_ttc, + $type + ); + } + } + } - if ($result > 0) - { - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); + if ($result > 0) + { + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); - unset($_POST['qty']); - unset($_POST['type']); - unset($_POST['idprod']); - unset($_POST['remmise_percent']); - unset($_POST['dp_desc']); - unset($_POST['np_desc']); - unset($_POST['np_price']); - unset($_POST['np_tva_tx']); - } - else - { - if (empty($mesg)) $mesg='
'.$object->error.'
'; - } + unset($_POST['qty']); + unset($_POST['type']); + unset($_POST['idprod']); + unset($_POST['remmise_percent']); + unset($_POST['dp_desc']); + unset($_POST['np_desc']); + unset($_POST['np_price']); + unset($_POST['np_tva_tx']); + } + else + { + if (empty($mesg)) $mesg='
'.$object->error.'
'; + } - $_POST["action"]=''; + $_POST["action"]=''; } if ($action == 'updateligne' && $user->rights->facture->creer && $_POST['save'] == $langs->trans('Save')) { - if (! $object->fetch($id) > 0) dol_print_error($db); - $object->fetch_thirdparty(); + if (! $object->fetch($id) > 0) dol_print_error($db); + $object->fetch_thirdparty(); - // Clean parameters - $date_start=''; - $date_end=''; - $date_start=dol_mktime($_POST['date_start'.$suffixe.'hour'],$_POST['date_start'.$suffixe.'min'],$_POST['date_start'.$suffixe.'sec'],$_POST['date_start'.$suffixe.'month'],$_POST['date_start'.$suffixe.'day'],$_POST['date_start'.$suffixe.'year']); - $date_end=dol_mktime($_POST['date_end'.$suffixe.'hour'],$_POST['date_end'.$suffixe.'min'],$_POST['date_end'.$suffixe.'sec'],$_POST['date_end'.$suffixe.'month'],$_POST['date_end'.$suffixe.'day'],$_POST['date_end'.$suffixe.'year']); - $description=dol_htmlcleanlastbr($_POST['desc']); + // Clean parameters + $date_start=''; + $date_end=''; + $date_start=dol_mktime($_POST['date_start'.$suffixe.'hour'],$_POST['date_start'.$suffixe.'min'],$_POST['date_start'.$suffixe.'sec'],$_POST['date_start'.$suffixe.'month'],$_POST['date_start'.$suffixe.'day'],$_POST['date_start'.$suffixe.'year']); + $date_end=dol_mktime($_POST['date_end'.$suffixe.'hour'],$_POST['date_end'.$suffixe.'min'],$_POST['date_end'.$suffixe.'sec'],$_POST['date_end'.$suffixe.'month'],$_POST['date_end'.$suffixe.'day'],$_POST['date_end'.$suffixe.'year']); + $description=dol_htmlcleanlastbr($_POST['desc']); $up_ht=GETPOST('pu')?GETPOST('pu'):GETPOST('subprice'); - // Define info_bits - $info_bits=0; - if (preg_match('/\*/',$_POST['tva_tx'])) $info_bits |= 0x01; + // Define info_bits + $info_bits=0; + if (preg_match('/\*/',$_POST['tva_tx'])) $info_bits |= 0x01; - // Define vat_rate - $vat_rate=$_POST['tva_tx']; - $vat_rate=str_replace('*','',$vat_rate); - $localtax1_rate=get_localtax($vat_rate,1,$object->client); - $localtax2_rate=get_localtax($vat_rate,2,$object->client); + // Define vat_rate + $vat_rate=$_POST['tva_tx']; + $vat_rate=str_replace('*','',$vat_rate); + $localtax1_rate=get_localtax($vat_rate,1,$object->client); + $localtax2_rate=get_localtax($vat_rate,2,$object->client); - // Check parameters - if (! GETPOST('productid') && GETPOST("type") < 0) - { - $mesg = '
'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Type")).'
'; - $result = -1 ; - } - // Check minimum price - if (GETPOST('productid')) - { - $productid = GETPOST('productid'); - $product = new Product($db); - $product->fetch($productid); - $type=$product->type; - $price_min = $product->price_min; - if ($conf->global->PRODUIT_MULTIPRICES && $object->client->price_level) $price_min = $product->multiprices_min[$object->client->price_level]; - } - if ($object->type!=2 && $price_min && GETPOST('productid') && (price2num($up_ht)*(1-price2num(GETPOST('remise_percent'))/100) < price2num($price_min))) - { - //print "CantBeLessThanMinPrice ".$up_ht." - ".GETPOST('remise_percent')." - ".$product->price_min; - $mesg = '
'.$langs->trans("CantBeLessThanMinPrice",price2num($price_min,'MU').' '.$langs->trans("Currency".$conf->monnaie)).'
'; - $result=-1; - } + // Check parameters + if (! GETPOST('productid') && GETPOST("type") < 0) + { + $mesg = '
'.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Type")).'
'; + $result = -1 ; + } + // Check minimum price + if (GETPOST('productid')) + { + $productid = GETPOST('productid'); + $product = new Product($db); + $product->fetch($productid); + $type=$product->type; + $price_min = $product->price_min; + if ($conf->global->PRODUIT_MULTIPRICES && $object->client->price_level) $price_min = $product->multiprices_min[$object->client->price_level]; + } + if ($object->type!=2 && $price_min && GETPOST('productid') && (price2num($up_ht)*(1-price2num(GETPOST('remise_percent'))/100) < price2num($price_min))) + { + //print "CantBeLessThanMinPrice ".$up_ht." - ".GETPOST('remise_percent')." - ".$product->price_min; + $mesg = '
'.$langs->trans("CantBeLessThanMinPrice",price2num($price_min,'MU').' '.$langs->trans("Currency".$conf->monnaie)).'
'; + $result=-1; + } - // Define params - if (GETPOST('productid')) $type=$product->type; - else $type=GETPOST("type"); + // Define params + if (GETPOST('productid')) $type=$product->type; + else $type=GETPOST("type"); - // Update line - if ($result >= 0) - { - $result = $object->updateline(GETPOST('lineid'), - $description, - $up_ht, - GETPOST('qty'), - GETPOST('remise_percent'), - $date_start, - $date_end, - $vat_rate, - $localtax1_rate, - $localtax2_rate, + // Update line + if ($result >= 0) + { + $result = $object->updateline(GETPOST('lineid'), + $description, + $up_ht, + GETPOST('qty'), + GETPOST('remise_percent'), + $date_start, + $date_end, + $vat_rate, + $localtax1_rate, + $localtax2_rate, 'HT', - $info_bits, - $type, - GETPOST('fk_parent_line') - ); + $info_bits, + $type, + GETPOST('fk_parent_line') + ); - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id'); - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); - } + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id'); + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); + } } if ($action == 'updateligne' && $user->rights->facture->creer && $_POST['cancel'] == $langs->trans('Cancel')) { - Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$id); // Pour reaffichage de la fiche en cours d'edition - exit; + Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$id); // Pour reaffichage de la fiche en cours d'edition + exit; } @@ -1093,46 +1093,46 @@ if ($action == 'updateligne' && $user->rights->facture->creer && $_POST['cancel' if ($action == 'up' && $user->rights->facture->creer) { - $object->fetch($id); - $object->fetch_thirdparty(); - $object->line_up($_GET['rowid']); + $object->fetch($id); + $object->fetch_thirdparty(); + $object->line_up($_GET['rowid']); - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); - Header ('Location: '.$_SERVER["PHP_SELF"].'?facid='.$object->id.'#'.$_GET['rowid']); - exit; + Header ('Location: '.$_SERVER["PHP_SELF"].'?facid='.$object->id.'#'.$_GET['rowid']); + exit; } if ($action == 'down' && $user->rights->facture->creer) { - $object->fetch($id); - $object->fetch_thirdparty(); - $object->line_down($_GET['rowid']); + $object->fetch($id); + $object->fetch_thirdparty(); + $object->line_down($_GET['rowid']); - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); - Header ('Location: '.$_SERVER["PHP_SELF"].'?facid='.$object->id.'#'.$_GET['rowid']); - exit; + Header ('Location: '.$_SERVER["PHP_SELF"].'?facid='.$object->id.'#'.$_GET['rowid']); + exit; } /* @@ -1140,16 +1140,16 @@ if ($action == 'down' && $user->rights->facture->creer) */ if ($_POST['addfile']) { - require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php"); + require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php"); - // Set tmp user directory TODO Use a dedicated directory for temp mails files - $vardir=$conf->user->dir_output."/".$user->id; - $upload_dir = $vardir.'/temp/'; + // Set tmp user directory TODO Use a dedicated directory for temp mails files + $vardir=$conf->user->dir_output."/".$user->id; + $upload_dir = $vardir.'/temp/'; - $mesg=dol_add_file_process($upload_dir,0,0); + $mesg=dol_add_file_process($upload_dir,0,0); - $_GET["action"]='presend'; - $_POST["action"]='presend'; + $_GET["action"]='presend'; + $_POST["action"]='presend'; } /* @@ -1157,16 +1157,16 @@ if ($_POST['addfile']) */ if (! empty($_POST['removedfile'])) { - require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php"); + require_once(DOL_DOCUMENT_ROOT."/lib/files.lib.php"); - // Set tmp user directory - $vardir=$conf->user->dir_output."/".$user->id; - $upload_dir = $vardir.'/temp/'; + // Set tmp user directory + $vardir=$conf->user->dir_output."/".$user->id; + $upload_dir = $vardir.'/temp/'; - $mesg=dol_remove_file_process($_POST['removedfile'],0); + $mesg=dol_remove_file_process($_POST['removedfile'],0); - $_GET["action"]='presend'; - $_POST["action"]='presend'; + $_GET["action"]='presend'; + $_POST["action"]='presend'; } /* @@ -1174,170 +1174,170 @@ if (! empty($_POST['removedfile'])) */ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_POST['removedfile'] && ! $_POST['cancel']) { - $langs->load('mails'); + $langs->load('mails'); - $actiontypecode='';$subject='';$actionmsg='';$actionmsg2=''; + $actiontypecode='';$subject='';$actionmsg='';$actionmsg2=''; - $result=$object->fetch($id); - $result=$object->fetch_thirdparty(); + $result=$object->fetch($id); + $result=$object->fetch_thirdparty(); - if ($result > 0) - { - $ref = dol_sanitizeFileName($object->ref); - $file = $conf->facture->dir_output . '/' . $ref . '/' . $ref . '.pdf'; + if ($result > 0) + { + $ref = dol_sanitizeFileName($object->ref); + $file = $conf->facture->dir_output . '/' . $ref . '/' . $ref . '.pdf'; - if (is_readable($file)) - { - if ($_POST['sendto']) - { - // Le destinataire a ete fourni via le champ libre - $sendto = $_POST['sendto']; - $sendtoid = 0; - } - elseif ($_POST['receiver']) - { - // Le destinataire a ete fourni via la liste deroulante - if ($_POST['receiver'] < 0) // Id du tiers - { - $sendto = $object->client->email; - $sendtoid = 0; - } - else // Id du contact - { - $sendto = $object->client->contact_get_property($_POST['receiver'],'email'); - $sendtoid = $_POST['receiver']; - } - } + if (is_readable($file)) + { + if ($_POST['sendto']) + { + // Le destinataire a ete fourni via le champ libre + $sendto = $_POST['sendto']; + $sendtoid = 0; + } + elseif ($_POST['receiver']) + { + // Le destinataire a ete fourni via la liste deroulante + if ($_POST['receiver'] < 0) // Id du tiers + { + $sendto = $object->client->email; + $sendtoid = 0; + } + else // Id du contact + { + $sendto = $object->client->contact_get_property($_POST['receiver'],'email'); + $sendtoid = $_POST['receiver']; + } + } - if (dol_strlen($sendto)) - { - $langs->load("commercial"); + if (dol_strlen($sendto)) + { + $langs->load("commercial"); - $from = $_POST['fromname'] . ' <' . $_POST['frommail'] .'>'; - $replyto = $_POST['replytoname']. ' <' . $_POST['replytomail'].'>'; - $message = $_POST['message']; - $sendtocc = $_POST['sendtocc']; - $deliveryreceipt = $_POST['deliveryreceipt']; + $from = $_POST['fromname'] . ' <' . $_POST['frommail'] .'>'; + $replyto = $_POST['replytoname']. ' <' . $_POST['replytomail'].'>'; + $message = $_POST['message']; + $sendtocc = $_POST['sendtocc']; + $deliveryreceipt = $_POST['deliveryreceipt']; - if ($action == 'send') - { - if (dol_strlen($_POST['subject'])) $subject = $_POST['subject']; - else $subject = $langs->transnoentities('Bill').' '.$object->ref; - $actiontypecode='AC_FAC'; - $actionmsg=$langs->transnoentities('MailSentBy').' '.$from.' '.$langs->transnoentities('To').' '.$sendto.".\n"; - if ($message) - { - $actionmsg.=$langs->transnoentities('MailTopic').": ".$subject."\n"; - $actionmsg.=$langs->transnoentities('TextUsedInTheMessageBody').":\n"; - $actionmsg.=$message; - } - //$actionmsg2=$langs->transnoentities('Action'.$actiontypecode); - } - if ($action == 'relance') - { - if (dol_strlen($_POST['subject'])) $subject = $_POST['subject']; - else $subject = $langs->transnoentities('Relance facture '.$object->ref); - $actiontypecode='AC_FAC'; - $actionmsg=$langs->transnoentities('MailSentBy').' '.$from.' '.$langs->transnoentities('To').' '.$sendto.".\n"; - if ($message) { - $actionmsg.=$langs->transnoentities('MailTopic').": ".$subject."\n"; - $actionmsg.=$langs->transnoentities('TextUsedInTheMessageBody').":\n"; - $actionmsg.=$message; - } - //$actionmsg2=$langs->transnoentities('Action'.$actiontypecode); - } + if ($action == 'send') + { + if (dol_strlen($_POST['subject'])) $subject = $_POST['subject']; + else $subject = $langs->transnoentities('Bill').' '.$object->ref; + $actiontypecode='AC_FAC'; + $actionmsg=$langs->transnoentities('MailSentBy').' '.$from.' '.$langs->transnoentities('To').' '.$sendto.".\n"; + if ($message) + { + $actionmsg.=$langs->transnoentities('MailTopic').": ".$subject."\n"; + $actionmsg.=$langs->transnoentities('TextUsedInTheMessageBody').":\n"; + $actionmsg.=$message; + } + //$actionmsg2=$langs->transnoentities('Action'.$actiontypecode); + } + if ($action == 'relance') + { + if (dol_strlen($_POST['subject'])) $subject = $_POST['subject']; + else $subject = $langs->transnoentities('Relance facture '.$object->ref); + $actiontypecode='AC_FAC'; + $actionmsg=$langs->transnoentities('MailSentBy').' '.$from.' '.$langs->transnoentities('To').' '.$sendto.".\n"; + if ($message) { + $actionmsg.=$langs->transnoentities('MailTopic').": ".$subject."\n"; + $actionmsg.=$langs->transnoentities('TextUsedInTheMessageBody').":\n"; + $actionmsg.=$message; + } + //$actionmsg2=$langs->transnoentities('Action'.$actiontypecode); + } - // Create form object - include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'); - $formmail = new FormMail($db); + // Create form object + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'); + $formmail = new FormMail($db); - $attachedfiles=$formmail->get_attached_files(); - $filepath = $attachedfiles['paths']; - $filename = $attachedfiles['names']; - $mimetype = $attachedfiles['mimes']; + $attachedfiles=$formmail->get_attached_files(); + $filepath = $attachedfiles['paths']; + $filename = $attachedfiles['names']; + $mimetype = $attachedfiles['mimes']; - // Send mail - require_once(DOL_DOCUMENT_ROOT.'/lib/CMailFile.class.php'); - $mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,'',$deliveryreceipt,-1); - if ($mailfile->error) - { - $mesg='
'.$mailfile->error.'
'; - } - else - { - $result=$mailfile->sendfile(); - if ($result) - { - $mesg=$langs->trans('MailSuccessfulySent',$from,$sendto); // Must not contain " + // Send mail + require_once(DOL_DOCUMENT_ROOT.'/lib/CMailFile.class.php'); + $mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,'',$deliveryreceipt,-1); + if ($mailfile->error) + { + $mesg='
'.$mailfile->error.'
'; + } + else + { + $result=$mailfile->sendfile(); + if ($result) + { + $mesg=$langs->trans('MailSuccessfulySent',$from,$sendto); // Must not contain " - $error=0; + $error=0; - // Initialisation donnees - $object->sendtoid=$sendtoid; - $object->actiontypecode=$actiontypecode; - $object->actionmsg = $actionmsg; // Long text - $object->actionmsg2= $actionmsg2; // Short text - $object->facid=$object->id; + // Initialisation donnees + $object->sendtoid=$sendtoid; + $object->actiontypecode=$actiontypecode; + $object->actionmsg = $actionmsg; // Long text + $object->actionmsg2= $actionmsg2; // Short text + $object->facid=$object->id; - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); - $interface=new Interfaces($db); - $result=$interface->run_triggers('BILL_SENTBYMAIL',$object,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($db); + $result=$interface->run_triggers('BILL_SENTBYMAIL',$object,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers - if ($error) - { - dol_print_error($db); - } - else - { - // Redirect here - // This avoid sending mail twice if going out and then back to page - $_SESSION['message'] = $mesg; - Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$object->id.'&mesg=1'); - exit; - } - } - else - { - $langs->load("other"); - $mesg='
'; - if ($mailfile->error) - { - $mesg.=$langs->trans('ErrorFailedToSendMail',$from,$sendto); - $mesg.='
'.$mailfile->error; - } - else - { - $mesg.='No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS'; - } - $mesg.='
'; - } - } - } - else - { - $langs->load("other"); - $mesg='
'.$langs->trans('ErrorMailRecipientIsEmpty').'
'; - dol_syslog('Recipient email is empty'); - } - } - else - { - $langs->load("other"); - $mesg='
'.$langs->trans('ErrorCantReadFile',$file).'
'; - dol_syslog('Failed to read file: '.$file); - } - } - else - { - $langs->load("other"); - $mesg='
'.$langs->trans('ErrorFailedToReadEntity',$langs->trans("Invoice")).'
'; - dol_syslog('Impossible de lire les donnees de la facture. Le fichier facture n\'a peut-etre pas ete genere.'); - } + if ($error) + { + dol_print_error($db); + } + else + { + // Redirect here + // This avoid sending mail twice if going out and then back to page + $_SESSION['message'] = $mesg; + Header('Location: '.$_SERVER["PHP_SELF"].'?facid='.$object->id.'&mesg=1'); + exit; + } + } + else + { + $langs->load("other"); + $mesg='
'; + if ($mailfile->error) + { + $mesg.=$langs->trans('ErrorFailedToSendMail',$from,$sendto); + $mesg.='
'.$mailfile->error; + } + else + { + $mesg.='No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS'; + } + $mesg.='
'; + } + } + } + else + { + $langs->load("other"); + $mesg='
'.$langs->trans('ErrorMailRecipientIsEmpty').'
'; + dol_syslog('Recipient email is empty'); + } + } + else + { + $langs->load("other"); + $mesg='
'.$langs->trans('ErrorCantReadFile',$file).'
'; + dol_syslog('Failed to read file: '.$file); + } + } + else + { + $langs->load("other"); + $mesg='
'.$langs->trans('ErrorFailedToReadEntity',$langs->trans("Invoice")).'
'; + dol_syslog('Impossible de lire les donnees de la facture. Le fichier facture n\'a peut-etre pas ete genere.'); + } - $action = 'presend'; + $action = 'presend'; } /* @@ -1345,35 +1345,35 @@ if (($action == 'send' || $action == 'relance') && ! $_POST['addfile'] && ! $_PO */ if (GETPOST('action') == 'builddoc') // En get ou en post { - $object->fetch($id); - $object->fetch_thirdparty(); + $object->fetch($id); + $object->fetch_thirdparty(); - if (GETPOST('model')) - { - $object->setDocModel($user, GETPOST('model')); - } + if (GETPOST('model')) + { + $object->setDocModel($user, GETPOST('model')); + } - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id'); - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - $result=facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); - if ($result <= 0) - { - dol_print_error($db,$result); - exit; - } - else - { - Header ('Location: '.$_SERVER["PHP_SELF"].'?facid='.$object->id.(empty($conf->global->MAIN_JUMP_TAG)?'':'#builddoc')); - exit; - } + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang=GETPOST('lang_id'); + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + $result=facture_pdf_create($db, $object, '', $object->modelpdf, $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); + if ($result <= 0) + { + dol_print_error($db,$result); + exit; + } + else + { + Header ('Location: '.$_SERVER["PHP_SELF"].'?facid='.$object->id.(empty($conf->global->MAIN_JUMP_TAG)?'':'#builddoc')); + exit; + } } @@ -1396,1126 +1396,1126 @@ $now=dol_now(); **********************************************************************/ if ($action == 'create') { - $facturestatic=new Facture($db); + $facturestatic=new Facture($db); - print_fiche_titre($langs->trans('NewBill')); + print_fiche_titre($langs->trans('NewBill')); - if ($mesg) print $mesg; + if ($mesg) print $mesg; - $soc = new Societe($db); + $soc = new Societe($db); if ($socid) $res=$soc->fetch($socid); - if (GETPOST('origin') && GETPOST('originid')) - { - // Parse element/subelement (ex: project_task) - $element = $subelement = GETPOST('origin'); - if (preg_match('/^([^_]+)_([^_]+)/i',GETPOST('origin'),$regs)) - { - $element = $regs[1]; - $subelement = $regs[2]; - } + if (GETPOST('origin') && GETPOST('originid')) + { + // Parse element/subelement (ex: project_task) + $element = $subelement = GETPOST('origin'); + if (preg_match('/^([^_]+)_([^_]+)/i',GETPOST('origin'),$regs)) + { + $element = $regs[1]; + $subelement = $regs[2]; + } - if ($element == 'project') - { + if ($element == 'project') + { $projectid=GETPOST('originid'); - } - else - { - // For compatibility - if ($element == 'order' || $element == 'commande') { $element = $subelement = 'commande'; } - if ($element == 'propal') { $element = 'comm/propal'; $subelement = 'propal'; } - if ($element == 'contract') { $element = $subelement = 'contrat'; } + } + else + { + // For compatibility + if ($element == 'order' || $element == 'commande') { $element = $subelement = 'commande'; } + if ($element == 'propal') { $element = 'comm/propal'; $subelement = 'propal'; } + if ($element == 'contract') { $element = $subelement = 'contrat'; } - dol_include_once('/'.$element.'/class/'.$subelement.'.class.php'); + dol_include_once('/'.$element.'/class/'.$subelement.'.class.php'); - $classname = ucfirst($subelement); - $objectsrc = new $classname($db); - $objectsrc->fetch(GETPOST('originid')); - if (empty($objectsrc->lines) && method_exists($objectsrc,'fetch_lines')) $objectsrc->fetch_lines(); - $objectsrc->fetch_thirdparty(); + $classname = ucfirst($subelement); + $objectsrc = new $classname($db); + $objectsrc->fetch(GETPOST('originid')); + if (empty($objectsrc->lines) && method_exists($objectsrc,'fetch_lines')) $objectsrc->fetch_lines(); + $objectsrc->fetch_thirdparty(); - $projectid = (!empty($objectsrc->fk_project)?$object->fk_project:''); - $ref_client = (!empty($objectsrc->ref_client)?$object->ref_client:''); + $projectid = (!empty($objectsrc->fk_project)?$object->fk_project:''); + $ref_client = (!empty($objectsrc->ref_client)?$object->ref_client:''); - $soc = $objectsrc->client; - $cond_reglement_id = (!empty($objectsrc->cond_reglement_id)?$objectsrc->cond_reglement_id:(!empty($soc->cond_reglement_id)?$soc->cond_reglement_id:1)); - $mode_reglement_id = (!empty($objectsrc->mode_reglement_id)?$objectsrc->mode_reglement_id:(!empty($soc->mode_reglement_id)?$soc->mode_reglement_id:0)); - $remise_percent = (!empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(!empty($soc->remise_percent)?$soc->remise_percent:0)); - $remise_absolue = (!empty($objectsrc->remise_absolue)?$objectsrc->remise_absolue:(!empty($soc->remise_absolue)?$soc->remise_absolue:0)); - $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:0; - } - } - else - { - $cond_reglement_id = $soc->cond_reglement_id; - $mode_reglement_id = $soc->mode_reglement_id; - $remise_percent = $soc->remise_percent; - $remise_absolue = 0; - $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:0; - } - $absolute_discount=$soc->getAvailableDiscounts(); + $soc = $objectsrc->client; + $cond_reglement_id = (!empty($objectsrc->cond_reglement_id)?$objectsrc->cond_reglement_id:(!empty($soc->cond_reglement_id)?$soc->cond_reglement_id:1)); + $mode_reglement_id = (!empty($objectsrc->mode_reglement_id)?$objectsrc->mode_reglement_id:(!empty($soc->mode_reglement_id)?$soc->mode_reglement_id:0)); + $remise_percent = (!empty($objectsrc->remise_percent)?$objectsrc->remise_percent:(!empty($soc->remise_percent)?$soc->remise_percent:0)); + $remise_absolue = (!empty($objectsrc->remise_absolue)?$objectsrc->remise_absolue:(!empty($soc->remise_absolue)?$soc->remise_absolue:0)); + $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:0; + } + } + else + { + $cond_reglement_id = $soc->cond_reglement_id; + $mode_reglement_id = $soc->mode_reglement_id; + $remise_percent = $soc->remise_percent; + $remise_absolue = 0; + $dateinvoice = empty($conf->global->MAIN_AUTOFILL_DATE)?-1:0; + } + $absolute_discount=$soc->getAvailableDiscounts(); - if ($conf->use_javascript_ajax) - { + if ($conf->use_javascript_ajax) + { print ajax_combobox('fac_replacement'); print ajax_combobox('fac_avoir'); - } + } - print '
'; - print ''; - print ''; - print '' ."\n"; - print ''; + print ''; + print ''; + print ''; + print '' ."\n"; + print ''; print ''; print ''; - print ''; + print '
'; - // Ref - print ''; + // Ref + print ''; - // Factures predefinies - if (empty($_GET['propalid']) && empty($_GET['commandeid']) && empty($_GET['contratid']) && empty($_GET['originid'])) - { - $sql = 'SELECT r.rowid, r.titre, r.total_ttc'; - $sql.= ' FROM '.MAIN_DB_PREFIX.'facture_rec as r'; - $sql.= ' WHERE r.fk_soc = '.$soc->id; + // Factures predefinies + if (empty($_GET['propalid']) && empty($_GET['commandeid']) && empty($_GET['contratid']) && empty($_GET['originid'])) + { + $sql = 'SELECT r.rowid, r.titre, r.total_ttc'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'facture_rec as r'; + $sql.= ' WHERE r.fk_soc = '.$soc->id; - $resql=$db->query($sql); - if ($resql) - { - $num = $db->num_rows($resql); - $i = 0; + $resql=$db->query($sql); + if ($resql) + { + $num = $db->num_rows($resql); + $i = 0; - if ($num > 0) - { - print ''; - } - $db->free($resql); - } - else - { - dol_print_error($db); - } - } + if ($num > 0) + { + print ''; + } + $db->free($resql); + } + else + { + dol_print_error($db); + } + } - // Tiers - print ''; - print ''."\n"; + // Tiers + print ''; + print ''."\n"; - // Type de facture - $facids=$facturestatic->list_replacable_invoices($soc->id); - if ($facids < 0) - { - dol_print_error($db,$facturestatic); - exit; - } - $options=""; - foreach ($facids as $facparam) - { - $options.=''; - } + // Type de facture + $facids=$facturestatic->list_replacable_invoices($soc->id); + if ($facids < 0) + { + dol_print_error($db,$facturestatic); + exit; + } + $options=""; + foreach ($facids as $facparam) + { + $options.=''; + } - $facids=$facturestatic->list_qualified_avoir_invoices($soc->id); - if ($facids < 0) - { - dol_print_error($db,$facturestatic); - exit; - } - $optionsav=""; - foreach ($facids as $key => $value) - { - $newinvoice=new Facture($db); - $newinvoice->fetch($key); - $optionsav.=''; - } + $facids=$facturestatic->list_qualified_avoir_invoices($soc->id); + if ($facids < 0) + { + dol_print_error($db,$facturestatic); + exit; + } + $optionsav=""; + foreach ($facids as $key => $value) + { + $newinvoice=new Facture($db); + $newinvoice->fetch($key); + $optionsav.=''; + } - print ''; - // Discounts for third party - print ''; + // Discounts for third party + print ''; - // Date invoice - print ''; + // Date invoice + print ''; - // Payment term - print ''; + // Payment term + print ''; - // Payment mode - print ''; + // Payment mode + print ''; - // Project - if ($conf->projet->enabled) - { - $langs->load('projects'); - print ''; - } + // Project + if ($conf->projet->enabled) + { + $langs->load('projects'); + print ''; + } - // Modele PDF - print ''; - print '"; + // Modele PDF + print ''; + print '"; - // Public note - print ''; - print ''; - print ''; + // Public note + print ''; + print ''; + print ''; - // Private note - if (! $user->societe_id) - { - print ''; - print ''; - print ''; - } + // Private note + if (! $user->societe_id) + { + print ''; + print ''; + print ''; + } - if (is_object($objectsrc)) - { - // TODO for compatibility - if ($_GET['origin'] == 'contrat') - { - // Calcul contrat->price (HT), contrat->total (TTC), contrat->tva - $objectsrc->remise_absolue=$remise_absolue; - $objectsrc->remise_percent=$remise_percent; - $objectsrc->update_price(1); - } + if (is_object($objectsrc)) + { + // TODO for compatibility + if ($_GET['origin'] == 'contrat') + { + // Calcul contrat->price (HT), contrat->total (TTC), contrat->tva + $objectsrc->remise_absolue=$remise_absolue; + $objectsrc->remise_percent=$remise_percent; + $objectsrc->update_price(1); + } - print "\n"; - print "\n"; - print ''."\n"; - print ''."\n"; - print ''."\n"; - print ''; - print ''; + print "\n"; + print "\n"; + print ''."\n"; + print ''."\n"; + print ''."\n"; + print ''; + print ''; $newclassname=$classname; if ($newclassname=='Propal') $newclassname='CommercialProposal'; - print ''; - print ''; - print '"; - if ($mysoc->pays_code=='ES') - { - if ($mysoc->localtax1_assuj=="1") //Localtax1 RE - { - print '"; - } + print ''; + print ''; + print '"; + if ($mysoc->pays_code=='ES') + { + if ($mysoc->localtax1_assuj=="1") //Localtax1 RE + { + print '"; + } - if ($mysoc->localtax2_assuj=="1") //Localtax2 IRPF - { - print '"; - } - } - print '"; - } - else - { - // Show deprecated optional form to add product line here - if ($conf->global->PRODUCT_SHOW_WHEN_CREATE) - { - print '"; + } + } + print '"; + } + else + { + // Show deprecated optional form to add product line here + if ($conf->global->PRODUCT_SHOW_WHEN_CREATE) + { + print ''; - } - } + print '
'.$langs->trans('Ref').''.$langs->trans('Draft').'
'.$langs->trans('Ref').''.$langs->trans('Draft').'
'.$langs->trans('CreateFromRepeatableInvoice').''; - print '
'.$langs->trans('CreateFromRepeatableInvoice').''; + print '
'.$langs->trans('Customer').''; - print $soc->getNomUrl(1); - print ''; - print '
'.$langs->trans('Customer').''; + print $soc->getNomUrl(1); + print ''; + print '
'.$langs->trans('Type').''; - print ''."\n"; + print ''; + print '
'.$langs->trans('Type').''; + print ''."\n"; - // Standard invoice - print ''."\n"; + // Standard invoice + print ''."\n"; - // Deposit - print ''."\n"; + // Deposit + print ''."\n"; - // Proforma - if ($conf->global->FACTURE_USE_PROFORMAT) - { - print ''."\n"; - } + // Proforma + if ($conf->global->FACTURE_USE_PROFORMAT) + { + print ''."\n"; + } - // Replacement - print ''."\n"; + // Replacement + print ''."\n"; - // Credit note - print ''."\n"; + // Credit note + print ''."\n"; - print '
'; - print ''; - print ''; - $desc=$html->textwithpicto($langs->trans("InvoiceStandardAsk"),$langs->transnoentities("InvoiceStandardDesc"),1); - print $desc; - print '
'; + print ''; + print ''; + $desc=$html->textwithpicto($langs->trans("InvoiceStandardAsk"),$langs->transnoentities("InvoiceStandardDesc"),1); + print $desc; + print '
'; - print ''; - print ''; - $desc=$html->textwithpicto($langs->trans("InvoiceDeposit"),$langs->transnoentities("InvoiceDepositDesc"),1); - print $desc; - print '
'; + print ''; + print ''; + $desc=$html->textwithpicto($langs->trans("InvoiceDeposit"),$langs->transnoentities("InvoiceDepositDesc"),1); + print $desc; + print '
'; - print ''; - print ''; - $desc=$html->textwithpicto($langs->trans("InvoiceProForma"),$langs->transnoentities("InvoiceProFormaDesc"),1); - print $desc; - print '
'; + print ''; + print ''; + $desc=$html->textwithpicto($langs->trans("InvoiceProForma"),$langs->transnoentities("InvoiceProFormaDesc"),1); + print $desc; + print '
'; - print ''; - print ''; - $text=$langs->trans("InvoiceReplacementAsk").' '; - $text.=''; - $desc=$html->textwithpicto($text,$langs->transnoentities("InvoiceReplacementDesc"),1); - print $desc; - print '
'; + print ''; + print ''; + $text=$langs->trans("InvoiceReplacementAsk").' '; + $text.=''; + $desc=$html->textwithpicto($text,$langs->transnoentities("InvoiceReplacementDesc"),1); + print $desc; + print '
'; - print ''; - print ''; - $text=$langs->transnoentities("InvoiceAvoirAsk").' '; - // $text.=''; - $text.=''; - $desc=$html->textwithpicto($text,$langs->transnoentities("InvoiceAvoirDesc"),1); - //.' ('.$langs->trans("FeatureNotYetAvailable").')',$langs->transnoentities("InvoiceAvoirDesc"),1); - print $desc; - print '
'; + print ''; + print ''; + $text=$langs->transnoentities("InvoiceAvoirAsk").' '; + // $text.=''; + $text.=''; + $desc=$html->textwithpicto($text,$langs->transnoentities("InvoiceAvoirDesc"),1); + //.' ('.$langs->trans("FeatureNotYetAvailable").')',$langs->transnoentities("InvoiceAvoirDesc"),1); + print $desc; + print '
'; - print '
'; + print '
'.$langs->trans('Discounts').''; - if ($soc->remise_client) print $langs->trans("CompanyHasRelativeDiscount",$soc->remise_client); - else print $langs->trans("CompanyHasNoRelativeDiscount"); - print '. '; - if ($absolute_discount) print $langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->trans("Currency".$conf->monnaie)); - else print $langs->trans("CompanyHasNoAbsoluteDiscount"); - print '.'; - print '
'.$langs->trans('Discounts').''; + if ($soc->remise_client) print $langs->trans("CompanyHasRelativeDiscount",$soc->remise_client); + else print $langs->trans("CompanyHasNoRelativeDiscount"); + print '. '; + if ($absolute_discount) print $langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->trans("Currency".$conf->monnaie)); + else print $langs->trans("CompanyHasNoAbsoluteDiscount"); + print '.'; + print '
'.$langs->trans('Date').''; - $html->select_date($dateinvoice,'','','','',"add",1,1); - print '
'.$langs->trans('Date').''; + $html->select_date($dateinvoice,'','','','',"add",1,1); + print '
'.$langs->trans('PaymentConditionsShort').''; - $html->select_conditions_paiements(isset($_POST['cond_reglement_id'])?$_POST['cond_reglement_id']:$cond_reglement_id,'cond_reglement_id'); - print '
'.$langs->trans('PaymentConditionsShort').''; + $html->select_conditions_paiements(isset($_POST['cond_reglement_id'])?$_POST['cond_reglement_id']:$cond_reglement_id,'cond_reglement_id'); + print '
'.$langs->trans('PaymentMode').''; - $html->select_types_paiements(isset($_POST['mode_reglement_id'])?$_POST['mode_reglement_id']:$mode_reglement_id,'mode_reglement_id'); - print '
'.$langs->trans('PaymentMode').''; + $html->select_types_paiements(isset($_POST['mode_reglement_id'])?$_POST['mode_reglement_id']:$mode_reglement_id,'mode_reglement_id'); + print '
'.$langs->trans('Project').''; - select_projects($soc->id, $projectid, 'projectid'); - print '
'.$langs->trans('Project').''; + select_projects($soc->id, $projectid, 'projectid'); + print '
'.$langs->trans('Model').''; - include_once(DOL_DOCUMENT_ROOT.'/includes/modules/facture/modules_facture.php'); - $model=new ModelePDFFactures(); - $liste=$model->liste_modeles($db); - print $html->selectarray('model',$liste,$conf->global->FACTURE_ADDON_PDF); - print "
'.$langs->trans('Model').''; + include_once(DOL_DOCUMENT_ROOT.'/includes/modules/facture/modules_facture.php'); + $model=new ModelePDFFactures(); + $liste=$model->liste_modeles($db); + print $html->selectarray('model',$liste,$conf->global->FACTURE_ADDON_PDF); + print "
'.$langs->trans('NotePublic').''; - print '
'.$langs->trans('NotePublic').''; + print '
'.$langs->trans('NotePrivate').''; - print '
'.$langs->trans('NotePrivate').''; + print '
'.$langs->trans($newclassname).''.$objectsrc->getNomUrl(1).'
'.$langs->trans('TotalHT').''.price($objectsrc->total_ht).'
'.$langs->trans('TotalVAT').''.price($objectsrc->total_tva)."
'.$langs->transcountry("AmountLT1",$mysoc->pays_code).''.price($objectsrc->total_localtax1)."
'.$langs->trans($newclassname).''.$objectsrc->getNomUrl(1).'
'.$langs->trans('TotalHT').''.price($objectsrc->total_ht).'
'.$langs->trans('TotalVAT').''.price($objectsrc->total_tva)."
'.$langs->transcountry("AmountLT1",$mysoc->pays_code).''.price($objectsrc->total_localtax1)."
'.$langs->transcountry("AmountLT2",$mysoc->pays_code).''.price($objectsrc->total_localtax2)."
'.$langs->trans('TotalTTC').''.price($objectsrc->total_ttc)."
'; + if ($mysoc->localtax2_assuj=="1") //Localtax2 IRPF + { + print '
'.$langs->transcountry("AmountLT2",$mysoc->pays_code).''.price($objectsrc->total_localtax2)."
'.$langs->trans('TotalTTC').''.price($objectsrc->total_ttc)."
'; - // Zone de choix des produits predefinis a la creation - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - if ($conf->service->enabled) - { - print ''; - } - print ''; - for ($i = 1 ; $i <= $NBLINES ; $i++) - { - print ''; - print ''; - print ''; - print ''; - print ''; - // Si le module service est actif, on propose des dates de debut et fin a la ligne - if ($conf->service->enabled) - { - print ''; - } - print "\n"; - } + // Zone de choix des produits predefinis a la creation + print '
'.$langs->trans('ProductsAndServices').''.$langs->trans('Qty').''.$langs->trans('ReductionShort').'     '.$langs->trans('ServiceLimitedDuration').'
'; - // multiprix - if($conf->global->PRODUIT_MULTIPRICES) - $html->select_produits('','idprod'.$i,'',$conf->product->limit_size,$soc->price_level); - else - $html->select_produits('','idprod'.$i,'',$conf->product->limit_size); - print '% '; - print ''; - print ''; - print '
'; - print $langs->trans('From').' '; - print ''; - print $html->select_date('','date_start'.$i,$usehm,$usehm,1,"add"); - print '
'; - print $langs->trans('to').' '; - print ''; - print $html->select_date('','date_end'.$i,$usehm,$usehm,1,"add"); - print '
'; - print '
'; + print ''; + print ''; + print ''; + print ''; + print ''; + if ($conf->service->enabled) + { + print ''; + } + print ''; + for ($i = 1 ; $i <= $NBLINES ; $i++) + { + print ''; + print ''; + print ''; + print ''; + print ''; + // Si le module service est actif, on propose des dates de debut et fin a la ligne + if ($conf->service->enabled) + { + print ''; + } + print "\n"; + } - print '
'.$langs->trans('ProductsAndServices').''.$langs->trans('Qty').''.$langs->trans('ReductionShort').'     '.$langs->trans('ServiceLimitedDuration').'
'; + // multiprix + if($conf->global->PRODUIT_MULTIPRICES) + $html->select_produits('','idprod'.$i,'',$conf->product->limit_size,$soc->price_level); + else + $html->select_produits('','idprod'.$i,'',$conf->product->limit_size); + print '% '; + print ''; + print ''; + print '
'; + print $langs->trans('From').' '; + print ''; + print $html->select_date('','date_start'.$i,$usehm,$usehm,1,"add"); + print '
'; + print $langs->trans('to').' '; + print ''; + print $html->select_date('','date_end'.$i,$usehm,$usehm,1,"add"); + print '
'; + print '
'; - print '
'; + print '
\n"; + print "\n"; // Button "Create Draft" - print '
'; + print '
'; - print "\n"; + print "\n"; - // Show origin lines - if (is_object($objectsrc)) - { - $title=$langs->trans('ProductsAndServices'); - print_titre($title); + // Show origin lines + if (is_object($objectsrc)) + { + $title=$langs->trans('ProductsAndServices'); + print_titre($title); - print ''; + print '
'; - $objectsrc->printOriginLinesList($object); + $objectsrc->printOriginLinesList($object); - print '
'; - } + print ''; + } } else { - /* - * Show object in view mode - */ - if ($id > 0 || ! empty($ref)) - { - if ($mesg) print $mesg.'
'; + /* + * Show object in view mode + */ + if ($id > 0 || ! empty($ref)) + { + if ($mesg) print $mesg.'
'; - $result=$object->fetch($id,$ref); - if ($result > 0) - { - if ($user->societe_id>0 && $user->societe_id!=$object->socid) accessforbidden('',0); + $result=$object->fetch($id,$ref); + if ($result > 0) + { + if ($user->societe_id>0 && $user->societe_id!=$object->socid) accessforbidden('',0); - $result=$object->fetch_thirdparty(); + $result=$object->fetch_thirdparty(); - $soc = new Societe($db, $object->socid); - $soc->fetch($object->socid); + $soc = new Societe($db, $object->socid); + $soc->fetch($object->socid); - $totalpaye = $object->getSommePaiement(); - $totalcreditnotes = $object->getSumCreditNotesUsed(); - $totaldeposits = $object->getSumDepositsUsed(); - //print "totalpaye=".$totalpaye." totalcreditnotes=".$totalcreditnotes." totaldeposts=".$totaldeposits; + $totalpaye = $object->getSommePaiement(); + $totalcreditnotes = $object->getSumCreditNotesUsed(); + $totaldeposits = $object->getSumDepositsUsed(); + //print "totalpaye=".$totalpaye." totalcreditnotes=".$totalcreditnotes." totaldeposts=".$totaldeposits; - // We can also use bcadd to avoid pb with floating points - // For example print 239.2 - 229.3 - 9.9; does not return 0. - //$resteapayer=bcadd($object->total_ttc,$totalpaye,$conf->global->MAIN_MAX_DECIMALS_TOT); - //$resteapayer=bcadd($resteapayer,$totalavoir,$conf->global->MAIN_MAX_DECIMALS_TOT); - $resteapayer = price2num($object->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits,'MT'); + // We can also use bcadd to avoid pb with floating points + // For example print 239.2 - 229.3 - 9.9; does not return 0. + //$resteapayer=bcadd($object->total_ttc,$totalpaye,$conf->global->MAIN_MAX_DECIMALS_TOT); + //$resteapayer=bcadd($resteapayer,$totalavoir,$conf->global->MAIN_MAX_DECIMALS_TOT); + $resteapayer = price2num($object->total_ttc - $totalpaye - $totalcreditnotes - $totaldeposits,'MT'); - if ($object->paye) $resteapayer=0; - $resteapayeraffiche=$resteapayer; + if ($object->paye) $resteapayer=0; + $resteapayeraffiche=$resteapayer; - $absolute_discount=$soc->getAvailableDiscounts('','fk_facture_source IS NULL'); - $absolute_creditnote=$soc->getAvailableDiscounts('','fk_facture_source IS NOT NULL'); - $absolute_discount=price2num($absolute_discount,'MT'); - $absolute_creditnote=price2num($absolute_creditnote,'MT'); + $absolute_discount=$soc->getAvailableDiscounts('','fk_facture_source IS NULL'); + $absolute_creditnote=$soc->getAvailableDiscounts('','fk_facture_source IS NOT NULL'); + $absolute_discount=price2num($absolute_discount,'MT'); + $absolute_creditnote=price2num($absolute_creditnote,'MT'); - $author = new User($db); - if ($object->user_author) - { - $author->fetch($object->user_author); - } + $author = new User($db); + if ($object->user_author) + { + $author->fetch($object->user_author); + } - $objectidnext=$object->getIdReplacingInvoice(); + $objectidnext=$object->getIdReplacingInvoice(); - $head = facture_prepare_head($object); + $head = facture_prepare_head($object); - dol_fiche_head($head, 'compta', $langs->trans('InvoiceCustomer'), 0, 'bill'); + dol_fiche_head($head, 'compta', $langs->trans('InvoiceCustomer'), 0, 'bill'); - $formconfirm=''; + $formconfirm=''; - // Confirmation de la conversion de l'avoir en reduc - if ($action == 'converttoreduc') - { - $text=$langs->trans('ConfirmConvertToReduc'); - $formconfirm=$html->formconfirm($_SERVER['PHP_SELF'].'?facid='.$object->id,$langs->trans('ConvertToReduc'),$text,'confirm_converttoreduc','',"yes",2); - } + // Confirmation de la conversion de l'avoir en reduc + if ($action == 'converttoreduc') + { + $text=$langs->trans('ConfirmConvertToReduc'); + $formconfirm=$html->formconfirm($_SERVER['PHP_SELF'].'?facid='.$object->id,$langs->trans('ConvertToReduc'),$text,'confirm_converttoreduc','',"yes",2); + } - // Confirmation to delete invoice - if ($action == 'delete') - { - $text=$langs->trans('ConfirmDeleteBill'); - $formconfirm=$html->formconfirm($_SERVER['PHP_SELF'].'?facid='.$object->id,$langs->trans('DeleteBill'),$text,'confirm_delete','',0,1); - } + // Confirmation to delete invoice + if ($action == 'delete') + { + $text=$langs->trans('ConfirmDeleteBill'); + $formconfirm=$html->formconfirm($_SERVER['PHP_SELF'].'?facid='.$object->id,$langs->trans('DeleteBill'),$text,'confirm_delete','',0,1); + } - // Confirmation de la validation - if ($action == 'valid') - { - // on verifie si l'objet est en numerotation provisoire - $objectref = substr($object->ref, 1, 4); - if ($objectref == 'PROV') - { - $savdate=$object->date; - if (! empty($conf->global->FAC_FORCE_DATE_VALIDATION)) - { - $object->date=gmmktime(); - $object->date_lim_reglement=$object->calculate_date_lim_reglement(); - } - $numref = $object->getNextNumRef($soc); - //$object->date=$savdate; - } - else - { - $numref = $object->ref; - } + // Confirmation de la validation + if ($action == 'valid') + { + // on verifie si l'objet est en numerotation provisoire + $objectref = substr($object->ref, 1, 4); + if ($objectref == 'PROV') + { + $savdate=$object->date; + if (! empty($conf->global->FAC_FORCE_DATE_VALIDATION)) + { + $object->date=gmmktime(); + $object->date_lim_reglement=$object->calculate_date_lim_reglement(); + } + $numref = $object->getNextNumRef($soc); + //$object->date=$savdate; + } + else + { + $numref = $object->ref; + } - $text=$langs->trans('ConfirmValidateBill',$numref); - if ($conf->notification->enabled) - { - require_once(DOL_DOCUMENT_ROOT ."/core/class/notify.class.php"); - $notify=new Notify($db); - $text.='
'; - $text.=$notify->confirmMessage('NOTIFY_VAL_FAC',$object->socid); - } + $text=$langs->trans('ConfirmValidateBill',$numref); + if ($conf->notification->enabled) + { + require_once(DOL_DOCUMENT_ROOT ."/core/class/notify.class.php"); + $notify=new Notify($db); + $text.='
'; + $text.=$notify->confirmMessage('NOTIFY_VAL_FAC',$object->socid); + } - $formconfirm=$html->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id,$langs->trans('ValidateBill'),$text,'confirm_valid','',"yes",($conf->notification->enabled?0:2)); - } + $formconfirm=$html->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id,$langs->trans('ValidateBill'),$text,'confirm_valid','',"yes",($conf->notification->enabled?0:2)); + } - // Confirmation du classement paye - if ($action == 'paid' && $resteapayer <= 0) - { - $formconfirm=$html->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id,$langs->trans('ClassifyPaid'),$langs->trans('ConfirmClassifyPaidBill',$object->ref),'confirm_paid','',"yes",1); - } - if ($action == 'paid' && $resteapayer > 0) - { - // Code - $i=0; - $close[$i]['code']='discount_vat';$i++; - $close[$i]['code']='badcustomer';$i++; - // Help - $i=0; - $close[$i]['label']=$langs->trans("HelpEscompte").'

'.$langs->trans("ConfirmClassifyPaidPartiallyReasonDiscountVatDesc");$i++; - $close[$i]['label']=$langs->trans("ConfirmClassifyPaidPartiallyReasonBadCustomerDesc");$i++; - // Texte - $i=0; - $close[$i]['reason']=$html->textwithpicto($langs->transnoentities("ConfirmClassifyPaidPartiallyReasonDiscountVat",$resteapayer,$langs->trans("Currency".$conf->monnaie)),$close[$i]['label'],1);$i++; - $close[$i]['reason']=$html->textwithpicto($langs->transnoentities("ConfirmClassifyPaidPartiallyReasonBadCustomer",$resteapayer,$langs->trans("Currency".$conf->monnaie)),$close[$i]['label'],1);$i++; - // arrayreasons[code]=reason - foreach($close as $key => $val) - { - $arrayreasons[$close[$key]['code']]=$close[$key]['reason']; - } + // Confirmation du classement paye + if ($action == 'paid' && $resteapayer <= 0) + { + $formconfirm=$html->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id,$langs->trans('ClassifyPaid'),$langs->trans('ConfirmClassifyPaidBill',$object->ref),'confirm_paid','',"yes",1); + } + if ($action == 'paid' && $resteapayer > 0) + { + // Code + $i=0; + $close[$i]['code']='discount_vat';$i++; + $close[$i]['code']='badcustomer';$i++; + // Help + $i=0; + $close[$i]['label']=$langs->trans("HelpEscompte").'

'.$langs->trans("ConfirmClassifyPaidPartiallyReasonDiscountVatDesc");$i++; + $close[$i]['label']=$langs->trans("ConfirmClassifyPaidPartiallyReasonBadCustomerDesc");$i++; + // Texte + $i=0; + $close[$i]['reason']=$html->textwithpicto($langs->transnoentities("ConfirmClassifyPaidPartiallyReasonDiscountVat",$resteapayer,$langs->trans("Currency".$conf->monnaie)),$close[$i]['label'],1);$i++; + $close[$i]['reason']=$html->textwithpicto($langs->transnoentities("ConfirmClassifyPaidPartiallyReasonBadCustomer",$resteapayer,$langs->trans("Currency".$conf->monnaie)),$close[$i]['label'],1);$i++; + // arrayreasons[code]=reason + foreach($close as $key => $val) + { + $arrayreasons[$close[$key]['code']]=$close[$key]['reason']; + } - // Cree un tableau formulaire - $formquestion=array( + // Cree un tableau formulaire + $formquestion=array( 'text' => $langs->trans("ConfirmClassifyPaidPartiallyQuestion"), - array('type' => 'radio', 'name' => 'close_code', 'label' => $langs->trans("Reason"), 'values' => $arrayreasons), - array('type' => 'text', 'name' => 'close_note', 'label' => $langs->trans("Comment"), 'value' => '', 'size' => '100') - ); - // Paiement incomplet. On demande si motif = escompte ou autre - $formconfirm=$html->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id,$langs->trans('ClassifyPaid'),$langs->trans('ConfirmClassifyPaidPartially',$object->ref),'confirm_paid_partially',$formquestion,"yes"); - } + array('type' => 'radio', 'name' => 'close_code', 'label' => $langs->trans("Reason"), 'values' => $arrayreasons), + array('type' => 'text', 'name' => 'close_note', 'label' => $langs->trans("Comment"), 'value' => '', 'size' => '100') + ); + // Paiement incomplet. On demande si motif = escompte ou autre + $formconfirm=$html->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id,$langs->trans('ClassifyPaid'),$langs->trans('ConfirmClassifyPaidPartially',$object->ref),'confirm_paid_partially',$formquestion,"yes"); + } - // Confirmation du classement abandonne - if ($action == 'canceled') - { - // S'il y a une facture de remplacement pas encore validee (etat brouillon), - // on ne permet pas de classer abandonner la facture. - if ($objectidnext) - { - $facturereplacement=new Facture($db); - $facturereplacement->fetch($objectidnext); - $statusreplacement=$facturereplacement->statut; - } - if ($objectidnext && $statusreplacement == 0) - { - print '
'.$langs->trans("ErrorCantCancelIfReplacementInvoiceNotValidated").'
'; - } - else - { - // Code - $close[1]['code']='badcustomer'; - $close[2]['code']='abandon'; - // Help - $close[1]['label']=$langs->trans("ConfirmClassifyPaidPartiallyReasonBadCustomerDesc"); - $close[2]['label']=$langs->trans("ConfirmClassifyAbandonReasonOtherDesc"); - // Texte - $close[1]['reason']=$html->textwithpicto($langs->transnoentities("ConfirmClassifyPaidPartiallyReasonBadCustomer",$object->ref),$close[1]['label'],1); - $close[2]['reason']=$html->textwithpicto($langs->transnoentities("ConfirmClassifyAbandonReasonOther"),$close[2]['label'],1); - // arrayreasons - $arrayreasons[$close[1]['code']]=$close[1]['reason']; - $arrayreasons[$close[2]['code']]=$close[2]['reason']; + // Confirmation du classement abandonne + if ($action == 'canceled') + { + // S'il y a une facture de remplacement pas encore validee (etat brouillon), + // on ne permet pas de classer abandonner la facture. + if ($objectidnext) + { + $facturereplacement=new Facture($db); + $facturereplacement->fetch($objectidnext); + $statusreplacement=$facturereplacement->statut; + } + if ($objectidnext && $statusreplacement == 0) + { + print '
'.$langs->trans("ErrorCantCancelIfReplacementInvoiceNotValidated").'
'; + } + else + { + // Code + $close[1]['code']='badcustomer'; + $close[2]['code']='abandon'; + // Help + $close[1]['label']=$langs->trans("ConfirmClassifyPaidPartiallyReasonBadCustomerDesc"); + $close[2]['label']=$langs->trans("ConfirmClassifyAbandonReasonOtherDesc"); + // Texte + $close[1]['reason']=$html->textwithpicto($langs->transnoentities("ConfirmClassifyPaidPartiallyReasonBadCustomer",$object->ref),$close[1]['label'],1); + $close[2]['reason']=$html->textwithpicto($langs->transnoentities("ConfirmClassifyAbandonReasonOther"),$close[2]['label'],1); + // arrayreasons + $arrayreasons[$close[1]['code']]=$close[1]['reason']; + $arrayreasons[$close[2]['code']]=$close[2]['reason']; - // Cree un tableau formulaire - $formquestion=array( + // Cree un tableau formulaire + $formquestion=array( 'text' => $langs->trans("ConfirmCancelBillQuestion"), - array('type' => 'radio', 'name' => 'close_code', 'label' => $langs->trans("Reason"), 'values' => $arrayreasons), - array('type' => 'text', 'name' => 'close_note', 'label' => $langs->trans("Comment"), 'value' => '', 'size' => '100') - ); + array('type' => 'radio', 'name' => 'close_code', 'label' => $langs->trans("Reason"), 'values' => $arrayreasons), + array('type' => 'text', 'name' => 'close_note', 'label' => $langs->trans("Comment"), 'value' => '', 'size' => '100') + ); - $formconfirm=$html->formconfirm($_SERVER['PHP_SELF'].'?facid='.$object->id,$langs->trans('CancelBill'),$langs->trans('ConfirmCancelBill',$object->ref),'confirm_canceled',$formquestion,"yes"); - } - } + $formconfirm=$html->formconfirm($_SERVER['PHP_SELF'].'?facid='.$object->id,$langs->trans('CancelBill'),$langs->trans('ConfirmCancelBill',$object->ref),'confirm_canceled',$formquestion,"yes"); + } + } - // Confirmation de la suppression d'une ligne produit - if ($action == 'ask_deleteline') - { - $formconfirm=$html->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id.'&lineid='.$lineid, $langs->trans('DeleteProductLine'), $langs->trans('ConfirmDeleteProductLine'), 'confirm_deleteline', '', 'no', 1); - } + // Confirmation de la suppression d'une ligne produit + if ($action == 'ask_deleteline') + { + $formconfirm=$html->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id.'&lineid='.$lineid, $langs->trans('DeleteProductLine'), $langs->trans('ConfirmDeleteProductLine'), 'confirm_deleteline', '', 'no', 1); + } - // Clone confirmation - if ($action == 'clone') - { - // Create an array for form - $formquestion=array( - //'text' => $langs->trans("ConfirmClone"), - //array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1) - ); - // Paiement incomplet. On demande si motif = escompte ou autre - $formconfirm=$html->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id,$langs->trans('CloneInvoice'),$langs->trans('ConfirmCloneInvoice',$object->ref),'confirm_clone',$formquestion,'yes',1); - } + // Clone confirmation + if ($action == 'clone') + { + // Create an array for form + $formquestion=array( + //'text' => $langs->trans("ConfirmClone"), + //array('type' => 'checkbox', 'name' => 'clone_content', 'label' => $langs->trans("CloneMainAttributes"), 'value' => 1) + ); + // Paiement incomplet. On demande si motif = escompte ou autre + $formconfirm=$html->formconfirm($_SERVER["PHP_SELF"].'?facid='.$object->id,$langs->trans('CloneInvoice'),$langs->trans('ConfirmCloneInvoice',$object->ref),'confirm_clone',$formquestion,'yes',1); + } - // Hook of thirdparty module - if (empty($formconfirm) && ! empty($object->hooks)) - { - foreach($object->hooks as $module) - { - if (empty($formconfirm)) $formconfirm = $module->formconfirm($action,$object,$lineid); - } - } + // Hook of thirdparty module + if (empty($formconfirm) && ! empty($object->hooks)) + { + foreach($object->hooks as $module) + { + if (empty($formconfirm)) $formconfirm = $module->formconfirm($action,$object,$lineid); + } + } - // Print form confirm - print $formconfirm; + // Print form confirm + print $formconfirm; - // Invoice content + // Invoice content - print ''; + print '
'; - // Ref - print ''; - print ''; + // Ref + print ''; + print ''; - // Third party - print ''; - print ''; - print ''; + // Third party + print ''; + print ''; + print ''; - // Type - print ''; + $facidavoir=$object->getListIdAvoirFromInvoice(); + if (sizeof($facidavoir) > 0) + { + print ' ('.$langs->transnoentities("InvoiceHasAvoir"); + $i=0; + foreach($facidavoir as $id) + { + if ($i==0) print ' '; + else print ','; + $facavoir=new Facture($db); + $facavoir->fetch($id); + print $facavoir->getNomUrl(1); + } + print ')'; + } + if ($objectidnext > 0) + { + $facthatreplace=new Facture($db); + $facthatreplace->fetch($objectidnext); + print ' ('.$langs->transnoentities("ReplacedByInvoice",$facthatreplace->getNomUrl(1)).')'; + } + print ''; - // Relative and absolute discounts + // Relative and absolute discounts $addabsolutediscount=' '.$langs->trans("AddGlobalDiscount").''; $addcreditnote=' '.$langs->trans("AddCreditNote").''; print ''; + + // Date invoice + print ''; - - // Date invoice - print ''; + if ($action == 'editinvoicedate') + { + $html->form_date($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->date,'invoicedate'); + } + else + { + print dol_print_date($object->date,'daytext'); + } + } + else + { + print dol_print_date($object->date,'daytext'); + } + print ''; - /* - * List of payments - */ + /* + * List of payments + */ - $nbrows=8; - if ($conf->projet->enabled) $nbrows++; + $nbrows=8; + if ($conf->projet->enabled) $nbrows++; - //Local taxes - if ($mysoc->pays_code=='ES') - { - if($mysoc->localtax1_assuj=="1") $nbrows++; - if($mysoc->localtax2_assuj=="1") $nbrows++; - } + //Local taxes + if ($mysoc->pays_code=='ES') + { + if($mysoc->localtax1_assuj=="1") $nbrows++; + if($mysoc->localtax2_assuj=="1") $nbrows++; + } - print '
'.$langs->trans('Ref').''; - $morehtmlref=''; - $discount=new DiscountAbsolute($db); - $result=$discount->fetch(0,$object->id); - if ($result > 0) - { - $morehtmlref=' ('.$langs->trans("CreditNoteConvertedIntoDiscount",$discount->getNomUrl(1,'discount')).')'; - } - if ($result < 0) - { - dol_print_error('',$discount->error); - } - print $html->showrefnav($object,'ref','',1,'facnumber','ref',$morehtmlref); - print '
'.$langs->trans('Ref').''; + $morehtmlref=''; + $discount=new DiscountAbsolute($db); + $result=$discount->fetch(0,$object->id); + if ($result > 0) + { + $morehtmlref=' ('.$langs->trans("CreditNoteConvertedIntoDiscount",$discount->getNomUrl(1,'discount')).')'; + } + if ($result < 0) + { + dol_print_error('',$discount->error); + } + print $html->showrefnav($object,'ref','',1,'facnumber','ref',$morehtmlref); + print '
'.$langs->trans('Company').''.$soc->getNomUrl(1,'compta'); - print '   ('.$langs->trans('OtherBills').')
'.$langs->trans('Company').''.$soc->getNomUrl(1,'compta'); + print '   ('.$langs->trans('OtherBills').')
'.$langs->trans('Type').''; - print $object->getLibType(); - if ($object->type == 1) - { - $facreplaced=new Facture($db); - $facreplaced->fetch($object->fk_facture_source); - print ' ('.$langs->transnoentities("ReplaceInvoice",$facreplaced->getNomUrl(1)).')'; - } - if ($object->type == 2) - { - $facusing=new Facture($db); - $facusing->fetch($object->fk_facture_source); - print ' ('.$langs->transnoentities("CorrectInvoice",$facusing->getNomUrl(1)).')'; - } + // Type + print '
'.$langs->trans('Type').''; + print $object->getLibType(); + if ($object->type == 1) + { + $facreplaced=new Facture($db); + $facreplaced->fetch($object->fk_facture_source); + print ' ('.$langs->transnoentities("ReplaceInvoice",$facreplaced->getNomUrl(1)).')'; + } + if ($object->type == 2) + { + $facusing=new Facture($db); + $facusing->fetch($object->fk_facture_source); + print ' ('.$langs->transnoentities("CorrectInvoice",$facusing->getNomUrl(1)).')'; + } - $facidavoir=$object->getListIdAvoirFromInvoice(); - if (sizeof($facidavoir) > 0) - { - print ' ('.$langs->transnoentities("InvoiceHasAvoir"); - $i=0; - foreach($facidavoir as $id) - { - if ($i==0) print ' '; - else print ','; - $facavoir=new Facture($db); - $facavoir->fetch($id); - print $facavoir->getNomUrl(1); - } - print ')'; - } - if ($objectidnext > 0) - { - $facthatreplace=new Facture($db); - $facthatreplace->fetch($objectidnext); - print ' ('.$langs->transnoentities("ReplacedByInvoice",$facthatreplace->getNomUrl(1)).')'; - } - print '
'.$langs->trans('Discounts'); - print ''; - if ($soc->remise_client) print $langs->trans("CompanyHasRelativeDiscount",$soc->remise_client); - else print $langs->trans("CompanyHasNoRelativeDiscount"); + print ''; + if ($soc->remise_client) print $langs->trans("CompanyHasRelativeDiscount",$soc->remise_client); + else print $langs->trans("CompanyHasNoRelativeDiscount"); - if ($absolute_discount > 0) - { + if ($absolute_discount > 0) + { print '. '; - if ($object->statut > 0 || $object->type == 2 || $object->type == 3) - { - if ($object->statut == 0) - { - print $langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->monnaie)); - print '. '; - } - else - { - if ($object->statut < 1 || $object->type == 2 || $object->type == 3) - { - $text=$langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->monnaie)); - print '
'.$text.'.
'; - } - else - { - $text=$langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->monnaie)); - $text2=$langs->trans("AbsoluteDiscountUse"); - print $html->textwithpicto($text,$text2); - } - } - } - else - { - // Remise dispo de type remise fixe (not credit note) - $filter='fk_facture_source IS NULL'; - print '
'; - $html->form_remise_dispo($_SERVER["PHP_SELF"].'?facid='.$object->id, 0, 'remise_id',$soc->id, $absolute_discount, $filter, $resteapayer, ' - '.$addabsolutediscount); - } - } - else - { - if ($absolute_creditnote > 0) // If not linke will be added later - { + if ($object->statut > 0 || $object->type == 2 || $object->type == 3) + { + if ($object->statut == 0) + { + print $langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->monnaie)); + print '. '; + } + else + { + if ($object->statut < 1 || $object->type == 2 || $object->type == 3) + { + $text=$langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->monnaie)); + print '
'.$text.'.
'; + } + else + { + $text=$langs->trans("CompanyHasAbsoluteDiscount",price($absolute_discount),$langs->transnoentities("Currency".$conf->monnaie)); + $text2=$langs->trans("AbsoluteDiscountUse"); + print $html->textwithpicto($text,$text2); + } + } + } + else + { + // Remise dispo de type remise fixe (not credit note) + $filter='fk_facture_source IS NULL'; + print '
'; + $html->form_remise_dispo($_SERVER["PHP_SELF"].'?facid='.$object->id, 0, 'remise_id',$soc->id, $absolute_discount, $filter, $resteapayer, ' - '.$addabsolutediscount); + } + } + else + { + if ($absolute_creditnote > 0) // If not linke will be added later + { if ($object->statut == 0 && $object->type != 2 && $object->type != 3) print ' - '.$addabsolutediscount.'
'; else print '.'; - } - else print '. '; - } - if ($absolute_creditnote > 0) - { - // If validated, we show link "add credit note to payment" - if ($object->statut != 1 || $object->type == 2 || $object->type == 3) - { - if ($object->statut == 0 && $object->type != 3) - { - $text=$langs->trans("CompanyHasCreditNote",price($absolute_creditnote),$langs->transnoentities("Currency".$conf->monnaie)); - print $html->textwithpicto($text,$langs->trans("CreditNoteDepositUse")); - } - else - { - print $langs->trans("CompanyHasCreditNote",price($absolute_creditnote),$langs->transnoentities("Currency".$conf->monnaie)).'.'; - } - } - else - { - // Remise dispo de type avoir - $filter='fk_facture_source IS NOT NULL'; - if (! $absolute_discount) print '
'; - $html->form_remise_dispo($_SERVER["PHP_SELF"].'?facid='.$object->id, 0, 'remise_id_for_payment', $soc->id, $absolute_creditnote, $filter, $resteapayer); - } - } - if (! $absolute_discount && ! $absolute_creditnote) - { - print $langs->trans("CompanyHasNoAbsoluteDiscount"); + } + else print '. '; + } + if ($absolute_creditnote > 0) + { + // If validated, we show link "add credit note to payment" + if ($object->statut != 1 || $object->type == 2 || $object->type == 3) + { + if ($object->statut == 0 && $object->type != 3) + { + $text=$langs->trans("CompanyHasCreditNote",price($absolute_creditnote),$langs->transnoentities("Currency".$conf->monnaie)); + print $html->textwithpicto($text,$langs->trans("CreditNoteDepositUse")); + } + else + { + print $langs->trans("CompanyHasCreditNote",price($absolute_creditnote),$langs->transnoentities("Currency".$conf->monnaie)).'.'; + } + } + else + { + // Remise dispo de type avoir + $filter='fk_facture_source IS NOT NULL'; + if (! $absolute_discount) print '
'; + $html->form_remise_dispo($_SERVER["PHP_SELF"].'?facid='.$object->id, 0, 'remise_id_for_payment', $soc->id, $absolute_creditnote, $filter, $resteapayer); + } + } + if (! $absolute_discount && ! $absolute_creditnote) + { + print $langs->trans("CompanyHasNoAbsoluteDiscount"); if ($object->statut == 0 && $object->type != 2 && $object->type != 3) print ' - '.$addabsolutediscount.'
'; else print '. '; - } + } /*if ($object->statut == 0 && $object->type != 2 && $object->type != 3) + { + if (! $absolute_discount && ! $absolute_creditnote) print '
'; + //print '   -   '; + print $addabsolutediscount; + //print '   -   '.$addcreditnote; // We disbale link to credit note + }*/ + print '
'; + print ''; + if ($object->type != 2 && $action != 'editinvoicedate' && $object->brouillon && $user->rights->facture->creer) print ''; + print '
'; + print $langs->trans('Date'); + print 'id.'">'.img_edit($langs->trans('SetDate'),1).'
'; + print '
'; + + if ($object->type != 2) { - if (! $absolute_discount && ! $absolute_creditnote) print '
'; - //print '   -   '; - print $addabsolutediscount; - //print '   -   '.$addcreditnote; // We disbale link to credit note - }*/ - print '
'; - print ''; - if ($object->type != 2 && $action != 'editinvoicedate' && $object->brouillon && $user->rights->facture->creer) print ''; - print '
'; - print $langs->trans('Date'); - print 'id.'">'.img_edit($langs->trans('SetDate'),1).'
'; - print '
'; - - if ($object->type != 2) - { - if ($action == 'editinvoicedate') - { - $html->form_date($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->date,'invoicedate'); - } - else - { - print dol_print_date($object->date,'daytext'); - } - } - else - { - print dol_print_date($object->date,'daytext'); - } - print ''; + print ''; - print ''; + print '
'; - // List of payments already done - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + // List of payments already done + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; - $var=true; + $var=true; - // Payments already done (from payment on this invoice) - $sql = 'SELECT p.datep as dp, p.num_paiement, p.rowid,'; - $sql.= ' c.code as payment_code, c.libelle as payment_label,'; - $sql.= ' pf.amount'; - $sql.= ' FROM '.MAIN_DB_PREFIX.'paiement as p, '.MAIN_DB_PREFIX.'c_paiement as c, '.MAIN_DB_PREFIX.'paiement_facture as pf'; - $sql.= ' WHERE pf.fk_facture = '.$object->id.' AND p.fk_paiement = c.id AND pf.fk_paiement = p.rowid'; - $sql.= ' ORDER BY dp, tms'; + // Payments already done (from payment on this invoice) + $sql = 'SELECT p.datep as dp, p.num_paiement, p.rowid,'; + $sql.= ' c.code as payment_code, c.libelle as payment_label,'; + $sql.= ' pf.amount'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'paiement as p, '.MAIN_DB_PREFIX.'c_paiement as c, '.MAIN_DB_PREFIX.'paiement_facture as pf'; + $sql.= ' WHERE pf.fk_facture = '.$object->id.' AND p.fk_paiement = c.id AND pf.fk_paiement = p.rowid'; + $sql.= ' ORDER BY dp, tms'; - $result = $db->query($sql); - if ($result) - { - $num = $db->num_rows($result); - $i = 0; + $result = $db->query($sql); + if ($result) + { + $num = $db->num_rows($result); + $i = 0; - if ($object->type != 2) - { - while ($i < $num) - { - $objp = $db->fetch_object($result); - $var=!$var; - print ''; - $label=($langs->trans("PaymentType".$objp->payment_code)!=("PaymentType".$objp->payment_code))?$langs->trans("PaymentType".$objp->payment_code):$objp->payment_label; - print ''; - print ''; - print ''; - print ''; - $i++; - } - } - $db->free($result); - } - else - { - dol_print_error($db); - } + if ($object->type != 2) + { + while ($i < $num) + { + $objp = $db->fetch_object($result); + $var=!$var; + print ''; + $label=($langs->trans("PaymentType".$objp->payment_code)!=("PaymentType".$objp->payment_code))?$langs->trans("PaymentType".$objp->payment_code):$objp->payment_label; + print ''; + print ''; + print ''; + print ''; + $i++; + } + } + $db->free($result); + } + else + { + dol_print_error($db); + } - if ($object->type != 2) - { - // Total already paid - print ''; + if ($object->type != 2) + { + // Total already paid + print ''; - $resteapayeraffiche=$resteapayer; + $resteapayeraffiche=$resteapayer; - // Loop on each credit note or deposit amount applied - $creditnoteamount=0; - $depositamount=0; - $sql = "SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,"; - $sql.= " re.description, re.fk_facture_source, re.fk_facture_source"; - $sql.= " FROM ".MAIN_DB_PREFIX ."societe_remise_except as re"; - $sql.= " WHERE fk_facture = ".$object->id; - $resql=$db->query($sql); - if ($resql) - { - $num = $db->num_rows($resql); - $i = 0; - $invoice=new Facture($db); - while ($i < $num) - { - $obj = $db->fetch_object($resql); - $invoice->fetch($obj->fk_facture_source); - print ''; - print ''; - print ''; - $i++; - if ($invoice->type == 2) $creditnoteamount += $obj->amount_ttc; - if ($invoice->type == 3) $depositamount += $obj->amount_ttc; - } - } - else - { - dol_print_error($db); - } + // Loop on each credit note or deposit amount applied + $creditnoteamount=0; + $depositamount=0; + $sql = "SELECT re.rowid, re.amount_ht, re.amount_tva, re.amount_ttc,"; + $sql.= " re.description, re.fk_facture_source, re.fk_facture_source"; + $sql.= " FROM ".MAIN_DB_PREFIX ."societe_remise_except as re"; + $sql.= " WHERE fk_facture = ".$object->id; + $resql=$db->query($sql); + if ($resql) + { + $num = $db->num_rows($resql); + $i = 0; + $invoice=new Facture($db); + while ($i < $num) + { + $obj = $db->fetch_object($resql); + $invoice->fetch($obj->fk_facture_source); + print ''; + print ''; + print ''; + $i++; + if ($invoice->type == 2) $creditnoteamount += $obj->amount_ttc; + if ($invoice->type == 3) $depositamount += $obj->amount_ttc; + } + } + else + { + dol_print_error($db); + } - // Paye partiellement 'escompte' - if (($object->statut == 2 || $object->statut == 3) && $object->close_code == 'discount_vat') - { - print ''; - $resteapayeraffiche=0; - } - // Paye partiellement ou Abandon 'badcustomer' - if (($object->statut == 2 || $object->statut == 3) && $object->close_code == 'badcustomer') - { - print ''; - //$resteapayeraffiche=0; - } - // Paye partiellement ou Abandon 'product_returned' - if (($object->statut == 2 || $object->statut == 3) && $object->close_code == 'product_returned') - { - print ''; - $resteapayeraffiche=0; - } - // Paye partiellement ou Abandon 'abandon' - if (($object->statut == 2 || $object->statut == 3) && $object->close_code == 'abandon') - { - print ''; - $resteapayeraffiche=0; - } + // Paye partiellement 'escompte' + if (($object->statut == 2 || $object->statut == 3) && $object->close_code == 'discount_vat') + { + print ''; + $resteapayeraffiche=0; + } + // Paye partiellement ou Abandon 'badcustomer' + if (($object->statut == 2 || $object->statut == 3) && $object->close_code == 'badcustomer') + { + print ''; + //$resteapayeraffiche=0; + } + // Paye partiellement ou Abandon 'product_returned' + if (($object->statut == 2 || $object->statut == 3) && $object->close_code == 'product_returned') + { + print ''; + $resteapayeraffiche=0; + } + // Paye partiellement ou Abandon 'abandon' + if (($object->statut == 2 || $object->statut == 3) && $object->close_code == 'abandon') + { + print ''; + $resteapayeraffiche=0; + } - // Billed - print ''; + // Billed + print ''; - // Remainder to pay - print ''; - print ''; - print ''; - } - else - { - // Sold credit note - print ''; - print ''; - } + // Remainder to pay + print ''; + print ''; + print ''; + } + else + { + // Sold credit note + print ''; + print ''; + } - print '
'.($object->type == 2 ? $langs->trans("PaymentsBack") : $langs->trans('Payments')).''.$langs->trans('Type').''.$langs->trans('Amount').' 
'.($object->type == 2 ? $langs->trans("PaymentsBack") : $langs->trans('Payments')).''.$langs->trans('Type').''.$langs->trans('Amount').' 
'; - print ''.img_object($langs->trans('ShowPayment'),'payment').' '; - print dol_print_date($db->jdate($objp->dp),'day').''.$label.' '.$objp->num_paiement.''.price($objp->amount).' 
'; + print ''.img_object($langs->trans('ShowPayment'),'payment').' '; + print dol_print_date($db->jdate($objp->dp),'day').''.$label.' '.$objp->num_paiement.''.price($objp->amount).' 
'; - if ($object->type != 3) print $langs->trans('AlreadyPaidNoCreditNotesNoDeposits'); - else print $langs->trans('AlreadyPaid'); - print ' :'.price($totalpaye).' 
'; + if ($object->type != 3) print $langs->trans('AlreadyPaidNoCreditNotesNoDeposits'); + else print $langs->trans('AlreadyPaid'); + print ' :'.price($totalpaye).' 
'; - if ($invoice->type == 2) print $langs->trans("CreditNote").' '; - if ($invoice->type == 3) print $langs->trans("Deposit").' '; - print $invoice->getNomUrl(0); - print ' :'.price($obj->amount_ttc).''; - print 'rowid.'">'.img_delete().''; - print '
'; + if ($invoice->type == 2) print $langs->trans("CreditNote").' '; + if ($invoice->type == 3) print $langs->trans("Deposit").' '; + print $invoice->getNomUrl(0); + print ' :'.price($obj->amount_ttc).''; + print 'rowid.'">'.img_delete().''; + print '
'; - print $html->textwithpicto($langs->trans("Escompte").':',$langs->trans("HelpEscompte"),-1); - print ''.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaye).' 
'; - print $html->textwithpicto($langs->trans("Abandoned").':',$langs->trans("HelpAbandonBadCustomer"),-1); - print ''.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaye).' 
'; - print $html->textwithpicto($langs->trans("ProductReturned").':',$langs->trans("HelpAbandonProductReturned"),-1); - print ''.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaye).' 
'; - $text=$langs->trans("HelpAbandonOther"); - if ($object->close_note) $text.='

'.$langs->trans("Reason").':'.$object->close_note; - print $html->textwithpicto($langs->trans("Abandoned").':',$text,-1); - print '
'.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaye).' 
'; + print $html->textwithpicto($langs->trans("Escompte").':',$langs->trans("HelpEscompte"),-1); + print ''.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaye).' 
'; + print $html->textwithpicto($langs->trans("Abandoned").':',$langs->trans("HelpAbandonBadCustomer"),-1); + print ''.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaye).' 
'; + print $html->textwithpicto($langs->trans("ProductReturned").':',$langs->trans("HelpAbandonProductReturned"),-1); + print ''.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaye).' 
'; + $text=$langs->trans("HelpAbandonOther"); + if ($object->close_note) $text.='

'.$langs->trans("Reason").':'.$object->close_note; + print $html->textwithpicto($langs->trans("Abandoned").':',$text,-1); + print '
'.price($object->total_ttc - $creditnoteamount - $depositamount - $totalpaye).' 
'.$langs->trans("Billed").' :'.price($object->total_ttc).' 
'.$langs->trans("Billed").' :'.price($object->total_ttc).' 
'; - if ($resteapayeraffiche >= 0) print $langs->trans('RemainderToPay'); - else print $langs->trans('ExcessReceived'); - print ' :'.price($resteapayeraffiche).' 
'.$langs->trans('TotalTTCToYourCredit').' :'.price(abs($object->total_ttc)).' 
'; + if ($resteapayeraffiche >= 0) print $langs->trans('RemainderToPay'); + else print $langs->trans('ExcessReceived'); + print ' :'.price($resteapayeraffiche).' 
'.$langs->trans('TotalTTCToYourCredit').' :'.price(abs($object->total_ttc)).' 
'; + print '
'; - print ''; + print ''; - // Date payment term - print ''; - print ''; - if ($object->type != 2 && $action != 'editpaymentterm' && $object->brouillon && $user->rights->facture->creer) print ''; - print '
'; - print $langs->trans('DateMaxPayment'); - print 'id.'">'.img_edit($langs->trans('SetDate'),1).'
'; - print ''; - if ($object->type != 2) - { - if ($action == 'editpaymentterm') - { - $html->form_date($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->date_lim_reglement,'paymentterm'); - } - else - { - print dol_print_date($object->date_lim_reglement,'daytext'); - if ($object->date_lim_reglement < ($now - $conf->facture->client->warning_delay) && ! $object->paye && $object->statut == 1 && ! $object->am) print img_warning($langs->trans('Late')); - } - } - else - { - print ' '; - } - print ''; + // Date payment term + print ''; + print ''; + if ($object->type != 2 && $action != 'editpaymentterm' && $object->brouillon && $user->rights->facture->creer) print ''; + print '
'; + print $langs->trans('DateMaxPayment'); + print 'id.'">'.img_edit($langs->trans('SetDate'),1).'
'; + print ''; + if ($object->type != 2) + { + if ($action == 'editpaymentterm') + { + $html->form_date($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->date_lim_reglement,'paymentterm'); + } + else + { + print dol_print_date($object->date_lim_reglement,'daytext'); + if ($object->date_lim_reglement < ($now - $conf->facture->client->warning_delay) && ! $object->paye && $object->statut == 1 && ! $object->am) print img_warning($langs->trans('Late')); + } + } + else + { + print ' '; + } + print ''; - // Conditions de reglement - print ''; - print ''; - if ($object->type != 2 && $action != 'editconditions' && $object->brouillon && $user->rights->facture->creer) print ''; - print '
'; - print $langs->trans('PaymentConditionsShort'); - print 'id.'">'.img_edit($langs->trans('SetConditions'),1).'
'; - print ''; - if ($object->type != 2) - { - if ($action == 'editconditions') - { - $html->form_conditions_reglement($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->cond_reglement_id,'cond_reglement_id'); - } - else - { - $html->form_conditions_reglement($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->cond_reglement_id,'none'); - } - } - else - { - print ' '; - } - print ''; + // Conditions de reglement + print ''; + print ''; + if ($object->type != 2 && $action != 'editconditions' && $object->brouillon && $user->rights->facture->creer) print ''; + print '
'; + print $langs->trans('PaymentConditionsShort'); + print 'id.'">'.img_edit($langs->trans('SetConditions'),1).'
'; + print ''; + if ($object->type != 2) + { + if ($action == 'editconditions') + { + $html->form_conditions_reglement($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->cond_reglement_id,'cond_reglement_id'); + } + else + { + $html->form_conditions_reglement($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->cond_reglement_id,'none'); + } + } + else + { + print ' '; + } + print ''; - // Mode de reglement - print ''; - print ''; - if ($action != 'editmode' && $object->brouillon && $user->rights->facture->creer) print ''; - print '
'; - print $langs->trans('PaymentMode'); - print 'id.'">'.img_edit($langs->trans('SetMode'),1).'
'; - print ''; - if ($action == 'editmode') - { - $html->form_modes_reglement($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->mode_reglement_id,'mode_reglement_id'); - } - else - { - $html->form_modes_reglement($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->mode_reglement_id,'none'); - } - print ''; + // Mode de reglement + print ''; + print ''; + if ($action != 'editmode' && $object->brouillon && $user->rights->facture->creer) print ''; + print '
'; + print $langs->trans('PaymentMode'); + print 'id.'">'.img_edit($langs->trans('SetMode'),1).'
'; + print ''; + if ($action == 'editmode') + { + $html->form_modes_reglement($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->mode_reglement_id,'mode_reglement_id'); + } + else + { + $html->form_modes_reglement($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->mode_reglement_id,'none'); + } + print ''; - // Montants - print ''.$langs->trans('AmountHT').''; - print ''.price($object->total_ht).''; - print ''.$langs->trans('Currency'.$conf->monnaie).''; - print ''.$langs->trans('AmountVAT').''.price($object->total_tva).''; - print ''.$langs->trans('Currency'.$conf->monnaie).''; + // Montants + print ''.$langs->trans('AmountHT').''; + print ''.price($object->total_ht).''; + print ''.$langs->trans('Currency'.$conf->monnaie).''; + print ''.$langs->trans('AmountVAT').''.price($object->total_tva).''; + print ''.$langs->trans('Currency'.$conf->monnaie).''; - // Amount Local Taxes - if ($mysoc->pays_code=='ES') - { - if ($mysoc->localtax1_assuj=="1") //Localtax1 RE - { - print ''.$langs->transcountry("AmountLT1",$mysoc->pays_code).''; - print ''.price($object->total_localtax1).''; - print ''.$langs->trans("Currency".$conf->monnaie).''; - } - if ($mysoc->localtax2_assuj=="1") //Localtax2 IRPF - { - print ''.$langs->transcountry("AmountLT2",$mysoc->pays_code).''; - print ''.price($object->total_localtax2).''; - print ''.$langs->trans("Currency".$conf->monnaie).''; - } - } + // Amount Local Taxes + if ($mysoc->pays_code=='ES') + { + if ($mysoc->localtax1_assuj=="1") //Localtax1 RE + { + print ''.$langs->transcountry("AmountLT1",$mysoc->pays_code).''; + print ''.price($object->total_localtax1).''; + print ''.$langs->trans("Currency".$conf->monnaie).''; + } + if ($mysoc->localtax2_assuj=="1") //Localtax2 IRPF + { + print ''.$langs->transcountry("AmountLT2",$mysoc->pays_code).''; + print ''.price($object->total_localtax2).''; + print ''.$langs->trans("Currency".$conf->monnaie).''; + } + } - print ''.$langs->trans('AmountTTC').''.price($object->total_ttc).''; - print ''.$langs->trans('Currency'.$conf->monnaie).''; + print ''.$langs->trans('AmountTTC').''.price($object->total_ttc).''; + print ''.$langs->trans('Currency'.$conf->monnaie).''; - // Statut - print ''.$langs->trans('Status').''; - print ''.($object->getLibStatut(4,$totalpaye)).''; + // Statut + print ''.$langs->trans('Status').''; + print ''.($object->getLibStatut(4,$totalpaye)).''; - // Project - if ($conf->projet->enabled) - { - $langs->load('projects'); - print ''; - print ''; + // Project + if ($conf->projet->enabled) + { + $langs->load('projects'); + print ''; + print ''; - print ''; - if ($action != 'classin') - { - print ''; - } - print '
'; - print $langs->trans('Project'); - print 'id.'">'; - print img_edit($langs->trans('SetProject'),1); - print '
'; + print ''; + if ($action != 'classin') + { + print ''; + } + print '
'; + print $langs->trans('Project'); + print 'id.'">'; + print img_edit($langs->trans('SetProject'),1); + print '
'; - print ''; - if ($action == 'classin') - { - $html->form_project($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->socid,$object->fk_project,'projectid'); - } - else - { - $html->form_project($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->socid,$object->fk_project,'none'); - } - print ''; - print ''; - } + print ''; + if ($action == 'classin') + { + $html->form_project($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->socid,$object->fk_project,'projectid'); + } + else + { + $html->form_project($_SERVER['PHP_SELF'].'?facid='.$object->id,$object->socid,$object->fk_project,'none'); + } + print ''; + print ''; + } - print '
'; + print '
'; - /* - * Lines - */ + /* + * Lines + */ $result = $object->getLinesArray(); if ($conf->use_javascript_ajax && $object->statut == 0) @@ -2523,473 +2523,481 @@ else include(DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php'); } - print ''; + print '
'; - // Show object lines - if (! empty($object->lines)) $object->printObjectLines($action,$mysoc,$soc,$lineid,1); + // Show object lines + if (! empty($object->lines)) $object->printObjectLines($action,$mysoc,$soc,$lineid,1); - /* - * Form to add new line - */ - if ($object->statut == 0 && $user->rights->facture->creer && $action <> 'valid' && $action <> 'editline') - { - $var=true; + /* + * Form to add new line + */ + if ($object->statut == 0 && $user->rights->facture->creer && $action <> 'valid' && $action <> 'editline') + { + $var=true; - $object->formAddFreeProduct(1,$mysoc,$soc); + $object->formAddFreeProduct(1,$mysoc,$soc); - // Add predefined products/services - if ($conf->product->enabled || $conf->service->enabled) - { - $var=!$var; - $object->formAddPredefinedProduct(1,$mysoc,$soc); - } + // Add predefined products/services + if ($conf->product->enabled || $conf->service->enabled) + { + $var=!$var; + $object->formAddPredefinedProduct(1,$mysoc,$soc); + } - // Hook of thirdparty module - if (! empty($object->hooks)) - { - foreach($object->hooks as $module) - { - $var=!$var; - $module->formAddObject($object); - } - } - } + // Hook of thirdparty module + if (! empty($object->hooks)) + { + foreach($object->hooks as $module) + { + $var=!$var; + $module->formAddObject($object); + } + } + } - print "
\n"; + print "\n"; - print "\n"; + print "\n"; - /* - * Boutons actions - */ + /* + * Boutons actions + */ - if ($action != 'prerelance' && $action != 'presend') - { - if ($user->societe_id == 0 && $action <> 'valid' && $action <> 'editline') - { - print '
'; + if ($action != 'prerelance' && $action != 'presend') + { + if ($user->societe_id == 0 && $action <> 'valid' && $action <> 'editline') + { + print '
'; - // Editer une facture deja validee, sans paiement effectue et pas exporte en compta - if ($object->statut == 1) - { - // On verifie si les lignes de factures ont ete exportees en compta et/ou ventilees - $ventilExportCompta = $object->getVentilExportCompta(); + // Editer une facture deja validee, sans paiement effectue et pas exporte en compta + if ($object->statut == 1) + { + // On verifie si les lignes de factures ont ete exportees en compta et/ou ventilees + $ventilExportCompta = $object->getVentilExportCompta(); - if ($resteapayer == $object->total_ttc && $object->paye == 0 && $ventilExportCompta == 0) - { - if (! $objectidnext) - { - if ($user->rights->facture->unvalidate) - { - print ''.$langs->trans('Modify').''; - } - else - { - print ''.$langs->trans('Modify').''; - } - } - else - { - print ''.$langs->trans('Modify').''; - } - } - } + if ($resteapayer == $object->total_ttc && $object->paye == 0 && $ventilExportCompta == 0) + { + if (! $objectidnext) + { + if ($user->rights->facture->unvalidate) + { + print ''.$langs->trans('Modify').''; + } + else + { + print ''.$langs->trans('Modify').''; + } + } + else + { + print ''.$langs->trans('Modify').''; + } + } + } - // Reopen a standard paid invoice - if (($object->type == 0 || $object->type == 1) && ($object->statut == 2 || $object->statut == 3)) // A paid invoice (partially or completely) - { - if (! $objectidnext && $object->close_code != 'replaced') // Not replaced by another invoice - { - print ''.$langs->trans('ReOpen').''; - } - else - { - print ''.$langs->trans('ReOpen').''; - } - } + // Reopen a standard paid invoice + if (($object->type == 0 || $object->type == 1) && ($object->statut == 2 || $object->statut == 3)) // A paid invoice (partially or completely) + { + if (! $objectidnext && $object->close_code != 'replaced') // Not replaced by another invoice + { + print ''.$langs->trans('ReOpen').''; + } + else + { + print ''.$langs->trans('ReOpen').''; + } + } - // Validate - if ($object->statut == 0 && sizeof($object->lines) > 0 && - ( - (($object->type == 0 || $object->type == 1 || $object->type == 3 || $object->type == 4) && $object->total_ttc >= 0) - || ($object->type == 2 && $object->total_ttc <= 0)) - ) - { - if ($user->rights->facture->valider) - { - print ''.$langs->trans('Validate').''; - } - } + // Validate + if ($object->statut == 0 && sizeof($object->lines) > 0 && + ( + (($object->type == 0 || $object->type == 1 || $object->type == 3 || $object->type == 4) && $object->total_ttc >= 0) + || ($object->type == 2 && $object->total_ttc <= 0)) + ) + { + if ($user->rights->facture->valider) + { + print ''.$langs->trans('Validate').''; + } + } - // Send by mail - if (($object->statut == 1 || $object->statut == 2) && $user->rights->facture->envoyer) - { - if ($objectidnext) - { - print ''.$langs->trans('SendByMail').''; - } - else - { - print ''.$langs->trans('SendByMail').''; - } - } + // Send by mail + if (($object->statut == 1 || $object->statut == 2)) + { + if ($objectidnext) + { + print ''.$langs->trans('SendByMail').''; + } + else + { + if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->facture->invoice_advance->send) + { + print ''.$langs->trans('SendByMail').''; + } + else print ''.$langs->trans('SendByMail').''; + } + } - if ($conf->global->FACTURE_SHOW_SEND_REMINDER) // For backward compatibility - { - if (($object->statut == 1 || $object->statut == 2) && $resteapayer > 0 && $user->rights->facture->envoyer) - { - if ($objectidnext) - { - print ''.$langs->trans('SendRemindByMail').''; - } - else - { - print ''.$langs->trans('SendRemindByMail').''; - } - } - } + if ($conf->global->FACTURE_SHOW_SEND_REMINDER) // For backward compatibility + { + if (($object->statut == 1 || $object->statut == 2) && $resteapayer > 0) + { + if ($objectidnext) + { + print ''.$langs->trans('SendRemindByMail').''; + } + else + { + if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->facture->invoice_advance->send) + { + print ''.$langs->trans('SendRemindByMail').''; + } + else print ''.$langs->trans('SendRemindByMail').''; + } + } + } - // Create payment - if ($object->type != 2 && $object->statut == 1 && $object->paye == 0 && $user->rights->facture->paiement) - { - if ($objectidnext) - { - print ''.$langs->trans('DoPayment').''; - } - else - { - if ($resteapayer == 0) - { - print ''.$langs->trans('DoPayment').''; - } - else - { - print ''.$langs->trans('DoPayment').''; - } - } - } + // Create payment + if ($object->type != 2 && $object->statut == 1 && $object->paye == 0 && $user->rights->facture->paiement) + { + if ($objectidnext) + { + print ''.$langs->trans('DoPayment').''; + } + else + { + if ($resteapayer == 0) + { + print ''.$langs->trans('DoPayment').''; + } + else + { + print ''.$langs->trans('DoPayment').''; + } + } + } - // Reverse back money or convert to reduction - if ($object->type == 2 || $object->type == 3) - { - // For credit note only - if ($object->type == 2 && $object->statut == 1 && $object->paye == 0 && $user->rights->facture->paiement) - { - print ''.$langs->trans('DoPaymentBack').''; - } - // For credit note - if ($object->type == 2 && $object->statut == 1 && $object->paye == 0 && $user->rights->facture->creer && $object->getSommePaiement() == 0) - { - print ''.$langs->trans('ConvertToReduc').''; - } - // For deposit invoice - if ($object->type == 3 && $object->statut == 1 && $resteapayer == 0 && $user->rights->facture->creer) - { - print ''.$langs->trans('ConvertToReduc').''; - } - } + // Reverse back money or convert to reduction + if ($object->type == 2 || $object->type == 3) + { + // For credit note only + if ($object->type == 2 && $object->statut == 1 && $object->paye == 0 && $user->rights->facture->paiement) + { + print ''.$langs->trans('DoPaymentBack').''; + } + // For credit note + if ($object->type == 2 && $object->statut == 1 && $object->paye == 0 && $user->rights->facture->creer && $object->getSommePaiement() == 0) + { + print ''.$langs->trans('ConvertToReduc').''; + } + // For deposit invoice + if ($object->type == 3 && $object->statut == 1 && $resteapayer == 0 && $user->rights->facture->creer) + { + print ''.$langs->trans('ConvertToReduc').''; + } + } - // Classify paid (if not deposit and not credit note. Such invoice are "converted") - if ($object->statut == 1 && $object->paye == 0 && $user->rights->facture->paiement && - (($object->type != 2 && $object->type != 3 && $resteapayer <= 0) || ($object->type == 2 && $resteapayer >= 0)) ) - { - print ''.$langs->trans('ClassifyPaid').''; - } + // Classify paid (if not deposit and not credit note. Such invoice are "converted") + if ($object->statut == 1 && $object->paye == 0 && $user->rights->facture->paiement && + (($object->type != 2 && $object->type != 3 && $resteapayer <= 0) || ($object->type == 2 && $resteapayer >= 0)) ) + { + print ''.$langs->trans('ClassifyPaid').''; + } - // Classify 'closed not completely paid' (possible si validee et pas encore classee payee) - if ($object->statut == 1 && $object->paye == 0 && $resteapayer > 0 - && $user->rights->facture->paiement) - { - if ($totalpaye > 0 || $totalcreditnotes > 0) - { - // If one payment or one credit note was linked to this invoice - print ''.$langs->trans('ClassifyPaidPartially').''; - } - else - { - if ($objectidnext) - { - print ''.$langs->trans('ClassifyCanceled').''; - } - else - { - print ''.$langs->trans('ClassifyCanceled').''; - } - } - } + // Classify 'closed not completely paid' (possible si validee et pas encore classee payee) + if ($object->statut == 1 && $object->paye == 0 && $resteapayer > 0 + && $user->rights->facture->paiement) + { + if ($totalpaye > 0 || $totalcreditnotes > 0) + { + // If one payment or one credit note was linked to this invoice + print ''.$langs->trans('ClassifyPaidPartially').''; + } + else + { + if ($objectidnext) + { + print ''.$langs->trans('ClassifyCanceled').''; + } + else + { + print ''.$langs->trans('ClassifyCanceled').''; + } + } + } - // Clone - if (($object->type == 0 || $object->type == 3 || $object->type == 4) && $user->rights->facture->creer) - { - print ''.$langs->trans("ToClone").''; - } + // Clone + if (($object->type == 0 || $object->type == 3 || $object->type == 4) && $user->rights->facture->creer) + { + print ''.$langs->trans("ToClone").''; + } - // Clone as predefined - if (($object->type == 0 || $object->type == 3 || $object->type == 4) && $object->statut == 0 && $user->rights->facture->creer) - { - if (! $objectidnext) - { - print ''.$langs->trans("ChangeIntoRepeatableInvoice").''; - } - } + // Clone as predefined + if (($object->type == 0 || $object->type == 3 || $object->type == 4) && $object->statut == 0 && $user->rights->facture->creer) + { + if (! $objectidnext) + { + print ''.$langs->trans("ChangeIntoRepeatableInvoice").''; + } + } - // Delete - if ($user->rights->facture->supprimer) - { - if (! $object->is_erasable()) - { - print ''.$langs->trans('Delete').''; - } - else if ($objectidnext) - { - print ''.$langs->trans('Delete').''; - } - elseif ($object->getSommePaiement()) - { - print ''.$langs->trans('Delete').''; - } - else - { - print ''.$langs->trans('Delete').''; - } - } - else - { - print ''.$langs->trans('Delete').''; - } + // Delete + if ($user->rights->facture->supprimer) + { + if (! $object->is_erasable()) + { + print ''.$langs->trans('Delete').''; + } + else if ($objectidnext) + { + print ''.$langs->trans('Delete').''; + } + elseif ($object->getSommePaiement()) + { + print ''.$langs->trans('Delete').''; + } + else + { + print ''.$langs->trans('Delete').''; + } + } + else + { + print ''.$langs->trans('Delete').''; + } - print '
'; - } - } + print '
'; + } + } - if ($action != 'prerelance' && $action != 'presend') - { - print '
'; - print ''; // ancre + if ($action != 'prerelance' && $action != 'presend') + { + print '
'; + print ''; // ancre - /* - * Documents generes - */ - $filename=dol_sanitizeFileName($object->ref); - $filedir=$conf->facture->dir_output . '/' . dol_sanitizeFileName($object->ref); - $urlsource=$_SERVER['PHP_SELF'].'?facid='.$object->id; - $genallowed=$user->rights->facture->creer; - $delallowed=$user->rights->facture->supprimer; + /* + * Documents generes + */ + $filename=dol_sanitizeFileName($object->ref); + $filedir=$conf->facture->dir_output . '/' . dol_sanitizeFileName($object->ref); + $urlsource=$_SERVER['PHP_SELF'].'?facid='.$object->id; + $genallowed=$user->rights->facture->creer; + $delallowed=$user->rights->facture->supprimer; - print '
'; - $somethingshown=$formfile->show_documents('facture',$filename,$filedir,$urlsource,$genallowed,$delallowed,$object->modelpdf,1,0,0,28,0,'','','',$soc->default_lang,$object->hooks); + print '
'; + $somethingshown=$formfile->show_documents('facture',$filename,$filedir,$urlsource,$genallowed,$delallowed,$object->modelpdf,1,0,0,28,0,'','','',$soc->default_lang,$object->hooks); - /* - * Linked object block - */ - $object->load_object_linked($object->id,$object->element); + /* + * Linked object block + */ + $object->load_object_linked($object->id,$object->element); - foreach($object->linked_object as $linked_object => $linked_objectid) - { - $element = $subelement = $linked_object; - if (preg_match('/^([^_]+)_([^_]+)/i',$linked_object,$regs)) - { - $element = $regs[1]; - $subelement = $regs[2]; - } - if($conf->$element->enabled && $element != $object->element) - { - $somethingshown=$object->showLinkedObjectBlock($linked_object,$linked_objectid,$somethingshown); - } - } + foreach($object->linked_object as $linked_object => $linked_objectid) + { + $element = $subelement = $linked_object; + if (preg_match('/^([^_]+)_([^_]+)/i',$linked_object,$regs)) + { + $element = $regs[1]; + $subelement = $regs[2]; + } + if($conf->$element->enabled && $element != $object->element) + { + $somethingshown=$object->showLinkedObjectBlock($linked_object,$linked_objectid,$somethingshown); + } + } - print '
'; + print ''; - print '
'; + print '
'; - // List of actions on element - include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'); - $formactions=new FormActions($db); - $somethingshown=$formactions->showactions($object,'invoice',$socid); + // List of actions on element + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php'); + $formactions=new FormActions($db); + $somethingshown=$formactions->showactions($object,'invoice',$socid); - print '
'; - } - else - { - /* - * Affiche formulaire mail - */ + print '
'; + } + else + { + /* + * Affiche formulaire mail + */ - // By default if $action=='presend' - $titreform='SendBillByMail'; - $topicmail='SendBillRef'; - $action='send'; - $modelmail='facture_send'; + // By default if $action=='presend' + $titreform='SendBillByMail'; + $topicmail='SendBillRef'; + $action='send'; + $modelmail='facture_send'; - if ($action == 'prerelance') // For backward compatibility - { - $titrefrom='SendReminderBillByMail'; - $topicmail='SendReminderBillRef'; - $action='relance'; - $modelmail='facture_relance'; - } + if ($action == 'prerelance') // For backward compatibility + { + $titrefrom='SendReminderBillByMail'; + $topicmail='SendReminderBillRef'; + $action='relance'; + $modelmail='facture_relance'; + } - $ref = dol_sanitizeFileName($object->ref); - $file = $conf->facture->dir_output . '/' . $ref . '/' . $ref . '.pdf'; + $ref = dol_sanitizeFileName($object->ref); + $file = $conf->facture->dir_output . '/' . $ref . '/' . $ref . '.pdf'; - // Construit PDF si non existant - if (! is_readable($file)) - { - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - $result=facture_pdf_create($db, $object, '', $_REQUEST['model'], $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); - if ($result <= 0) - { - dol_print_error($db,$result); - exit; - } - } + // Construit PDF si non existant + if (! is_readable($file)) + { + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$object->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + $result=facture_pdf_create($db, $object, '', $_REQUEST['model'], $outputlangs, GETPOST('hidedetails'), GETPOST('hidedesc'), GETPOST('hideref')); + if ($result <= 0) + { + dol_print_error($db,$result); + exit; + } + } - print '
'; - print_titre($langs->trans($titre)); + print '
'; + print_titre($langs->trans($titre)); - // Cree l'objet formulaire mail - include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'); - $formmail = new FormMail($db); - $formmail->fromtype = 'user'; - $formmail->fromid = $user->id; - $formmail->fromname = $user->getFullName($langs); - $formmail->frommail = $user->email; - $formmail->withfrom=1; - $formmail->withto=empty($_POST["sendto"])?1:$_POST["sendto"]; - $formmail->withtosocid=$soc->id; - $formmail->withtocc=1; - $formmail->withtoccsocid=0; - $formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC; - $formmail->withtocccsocid=0; - $formmail->withtopic=$langs->transnoentities($topicmail,'__FACREF__'); - $formmail->withfile=2; - $formmail->withbody=1; - $formmail->withdeliveryreceipt=1; - $formmail->withcancel=1; - // Tableau des substitutions - $formmail->substit['__FACREF__']=$object->ref; - // Tableau des parametres complementaires du post - $formmail->param['action']=$action; - $formmail->param['models']=$modelmail; - $formmail->param['facid']=$object->id; - $formmail->param['returnurl']=$_SERVER["PHP_SELF"].'?id='.$object->id; + // Cree l'objet formulaire mail + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'); + $formmail = new FormMail($db); + $formmail->fromtype = 'user'; + $formmail->fromid = $user->id; + $formmail->fromname = $user->getFullName($langs); + $formmail->frommail = $user->email; + $formmail->withfrom=1; + $formmail->withto=empty($_POST["sendto"])?1:$_POST["sendto"]; + $formmail->withtosocid=$soc->id; + $formmail->withtocc=1; + $formmail->withtoccsocid=0; + $formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC; + $formmail->withtocccsocid=0; + $formmail->withtopic=$langs->transnoentities($topicmail,'__FACREF__'); + $formmail->withfile=2; + $formmail->withbody=1; + $formmail->withdeliveryreceipt=1; + $formmail->withcancel=1; + // Tableau des substitutions + $formmail->substit['__FACREF__']=$object->ref; + // Tableau des parametres complementaires du post + $formmail->param['action']=$action; + $formmail->param['models']=$modelmail; + $formmail->param['facid']=$object->id; + $formmail->param['returnurl']=$_SERVER["PHP_SELF"].'?id='.$object->id; - // Init list of files - if (! empty($_REQUEST["mode"]) && $_REQUEST["mode"]=='init') - { - $formmail->clear_attached_files(); - $formmail->add_attached_files($file,dol_sanitizeFilename($ref.'.pdf'),'application/pdf'); - } + // Init list of files + if (! empty($_REQUEST["mode"]) && $_REQUEST["mode"]=='init') + { + $formmail->clear_attached_files(); + $formmail->add_attached_files($file,dol_sanitizeFilename($ref.'.pdf'),'application/pdf'); + } - $formmail->show_form(); + $formmail->show_form(); - print '
'; - } - } - else - { - dol_print_error($db,$object->error); - } - } - else - { - /*************************************************************************** - * * - * Mode Liste * - * * - ***************************************************************************/ - $now=dol_now(); + print '
'; + } + } + else + { + dol_print_error($db,$object->error); + } + } + else + { + /*************************************************************************** + * * + * Mode Liste * + * * + ***************************************************************************/ + $now=dol_now(); - $sortfield = GETPOST("sortfield",'alpha'); - $sortorder = GETPOST("sortorder",'alpha'); - $page = GETPOST("page",'int'); - if ($page == -1) { $page = 0; } - $offset = $conf->liste_limit * $page; - $pageprev = $page - 1; - $pagenext = $page + 1; + $sortfield = GETPOST("sortfield",'alpha'); + $sortorder = GETPOST("sortorder",'alpha'); + $page = GETPOST("page",'int'); + if ($page == -1) { $page = 0; } + $offset = $conf->liste_limit * $page; + $pageprev = $page - 1; + $pagenext = $page + 1; - $month =GETPOST('month','int'); - $year =GETPOST('year','int'); + $month =GETPOST('month','int'); + $year =GETPOST('year','int'); - $limit = $conf->liste_limit; - if (! $sortorder) $sortorder='DESC'; - if (! $sortfield) $sortfield='f.datef'; + $limit = $conf->liste_limit; + if (! $sortorder) $sortorder='DESC'; + if (! $sortfield) $sortfield='f.datef'; - $facturestatic=new Facture($db); + $facturestatic=new Facture($db); - if ($page == -1) $page = 0 ; + if ($page == -1) $page = 0 ; - $sql = 'SELECT '; - $sql.= ' f.rowid as facid, f.facnumber, f.type, f.increment, f.total, f.total_ttc,'; - $sql.= ' f.datef as df, f.date_lim_reglement as datelimite,'; - $sql.= ' f.paye as paye, f.fk_statut,'; - $sql.= ' s.nom, s.rowid as socid'; + $sql = 'SELECT '; + $sql.= ' f.rowid as facid, f.facnumber, f.type, f.increment, f.total, f.total_ttc,'; + $sql.= ' f.datef as df, f.date_lim_reglement as datelimite,'; + $sql.= ' f.paye as paye, f.fk_statut,'; + $sql.= ' s.nom, s.rowid as socid'; if (! $sall) $sql.= ' ,SUM(pf.amount) as am'; // To be able to sort on status - $sql.= ' FROM '.MAIN_DB_PREFIX.'societe as s'; - if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; - $sql.= ', '.MAIN_DB_PREFIX.'facture as f'; - if ($sall) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'facturedet as fd ON fd.fk_facture = f.rowid'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'societe as s'; + if (!$user->rights->societe->client->voir && !$socid) $sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc"; + $sql.= ', '.MAIN_DB_PREFIX.'facture as f'; + if ($sall) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'facturedet as fd ON fd.fk_facture = f.rowid'; if (! $sall) $sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'paiement_facture as pf ON pf.fk_facture = f.rowid'; - $sql.= ' WHERE f.fk_soc = s.rowid'; - $sql.= " AND f.entity = ".$conf->entity; - if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; - if ($socid) $sql.= ' AND s.rowid = '.$socid; - if ($_GET['filtre']) - { - $filtrearr = explode(',', $_GET['filtre']); - foreach ($filtrearr as $fil) - { - $filt = explode(':', $fil); - $sql .= ' AND ' . trim($filt[0]) . ' = ' . trim($filt[1]); - } - } - if ($_GET['search_ref']) - { - $sql.= ' AND f.facnumber LIKE \'%'.$db->escape(trim($_GET['search_ref'])).'%\''; - } - if ($_GET['search_societe']) - { - $sql.= ' AND s.nom LIKE \'%'.$db->escape(trim($_GET['search_societe'])).'%\''; - } - if ($_GET['search_montant_ht']) - { - $sql.= ' AND f.total = \''.$db->escape(trim($_GET['search_montant_ht'])).'\''; - } - if ($_GET['search_montant_ttc']) - { - $sql.= ' AND f.total_ttc = \''.$db->escape(trim($_GET['search_montant_ttc'])).'\''; - } - if ($month > 0) - { - if ($year > 0) - $sql.= " AND f.datef BETWEEN '".$db->idate(dol_get_first_day($year,$month,false))."' AND '".$db->idate(dol_get_last_day($year,$month,false))."'"; - else - $sql.= " AND date_format(f.datef, '%m') = '".$month."'"; - } - else if ($year > 0) - { - $sql.= " AND f.datef BETWEEN '".$db->idate(dol_get_first_day($year,1,false))."' AND '".$db->idate(dol_get_last_day($year,12,false))."'"; - } - if ($_POST['sf_ref']) - { - $sql.= ' AND f.facnumber LIKE \'%'.$db->escape(trim($_POST['sf_ref'])) . '%\''; - } - if ($sall) - { - $sql.= ' AND (s.nom LIKE \'%'.$db->escape($sall).'%\' OR f.facnumber LIKE \'%'.$db->escape($sall).'%\' OR f.note LIKE \'%'.$db->escape($sall).'%\' OR fd.description LIKE \'%'.$db->escape($sall).'%\')'; - } + $sql.= ' WHERE f.fk_soc = s.rowid'; + $sql.= " AND f.entity = ".$conf->entity; + if (!$user->rights->societe->client->voir && !$socid) $sql.= " AND s.rowid = sc.fk_soc AND sc.fk_user = " .$user->id; + if ($socid) $sql.= ' AND s.rowid = '.$socid; + if ($_GET['filtre']) + { + $filtrearr = explode(',', $_GET['filtre']); + foreach ($filtrearr as $fil) + { + $filt = explode(':', $fil); + $sql .= ' AND ' . trim($filt[0]) . ' = ' . trim($filt[1]); + } + } + if ($_GET['search_ref']) + { + $sql.= ' AND f.facnumber LIKE \'%'.$db->escape(trim($_GET['search_ref'])).'%\''; + } + if ($_GET['search_societe']) + { + $sql.= ' AND s.nom LIKE \'%'.$db->escape(trim($_GET['search_societe'])).'%\''; + } + if ($_GET['search_montant_ht']) + { + $sql.= ' AND f.total = \''.$db->escape(trim($_GET['search_montant_ht'])).'\''; + } + if ($_GET['search_montant_ttc']) + { + $sql.= ' AND f.total_ttc = \''.$db->escape(trim($_GET['search_montant_ttc'])).'\''; + } + if ($month > 0) + { + if ($year > 0) + $sql.= " AND f.datef BETWEEN '".$db->idate(dol_get_first_day($year,$month,false))."' AND '".$db->idate(dol_get_last_day($year,$month,false))."'"; + else + $sql.= " AND date_format(f.datef, '%m') = '".$month."'"; + } + else if ($year > 0) + { + $sql.= " AND f.datef BETWEEN '".$db->idate(dol_get_first_day($year,1,false))."' AND '".$db->idate(dol_get_last_day($year,12,false))."'"; + } + if ($_POST['sf_ref']) + { + $sql.= ' AND f.facnumber LIKE \'%'.$db->escape(trim($_POST['sf_ref'])) . '%\''; + } + if ($sall) + { + $sql.= ' AND (s.nom LIKE \'%'.$db->escape($sall).'%\' OR f.facnumber LIKE \'%'.$db->escape($sall).'%\' OR f.note LIKE \'%'.$db->escape($sall).'%\' OR fd.description LIKE \'%'.$db->escape($sall).'%\')'; + } if (! $sall) { $sql.= ' GROUP BY f.rowid, f.facnumber, f.type, f.increment, f.total, f.total_ttc,'; @@ -2997,169 +3005,169 @@ else $sql.= ' f.paye, f.fk_statut,'; $sql.= ' s.nom, s.rowid'; } - $sql.= ' ORDER BY '; - $listfield=explode(',',$sortfield); - foreach ($listfield as $key => $value) $sql.= $listfield[$key].' '.$sortorder.','; - $sql.= ' f.rowid DESC '; - $sql.= $db->plimit($limit+1,$offset); + $sql.= ' ORDER BY '; + $listfield=explode(',',$sortfield); + foreach ($listfield as $key => $value) $sql.= $listfield[$key].' '.$sortorder.','; + $sql.= ' f.rowid DESC '; + $sql.= $db->plimit($limit+1,$offset); //print $sql; - $resql = $db->query($sql); - if ($resql) - { - $num = $db->num_rows($resql); + $resql = $db->query($sql); + if ($resql) + { + $num = $db->num_rows($resql); - if ($socid) - { - $soc = new Societe($db); - $soc->fetch($socid); - } + if ($socid) + { + $soc = new Societe($db); + $soc->fetch($socid); + } - $param='&socid='.$socid; - if ($month) $param.='&month='.$month; - if ($year) $param.='&year=' .$year; + $param='&socid='.$socid; + if ($month) $param.='&month='.$month; + if ($year) $param.='&year=' .$year; - print_barre_liste($langs->trans('BillsCustomers').' '.($socid?' '.$soc->nom:''),$page,'facture.php',$param,$sortfield,$sortorder,'',$num); + print_barre_liste($langs->trans('BillsCustomers').' '.($socid?' '.$soc->nom:''),$page,'facture.php',$param,$sortfield,$sortorder,'',$num); - $i = 0; - print '
'."\n"; - print ''; - print ''; - print_liste_field_titre($langs->trans('Ref'),$_SERVER['PHP_SELF'],'f.facnumber','',$param,'',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('Date'),$_SERVER['PHP_SELF'],'f.datef','',$param,'align="center"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans("DateDue"),$_SERVER['PHP_SELF'],"f.date_lim_reglement","&socid=$socid","",'align="center"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('Company'),$_SERVER['PHP_SELF'],'s.nom','',$param,'',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('AmountHT'),$_SERVER['PHP_SELF'],'f.total','',$param,'align="right"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('AmountTTC'),$_SERVER['PHP_SELF'],'f.total_ttc','',$param,'align="right"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('Received'),$_SERVER['PHP_SELF'],'am','',$param,'align="right"',$sortfield,$sortorder); - print_liste_field_titre($langs->trans('Status'),$_SERVER['PHP_SELF'],'fk_statut,paye,am','',$param,'align="right"',$sortfield,$sortorder); - //print ''; - print ''; + $i = 0; + print ''."\n"; + print '
 
'; + print ''; + print_liste_field_titre($langs->trans('Ref'),$_SERVER['PHP_SELF'],'f.facnumber','',$param,'',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('Date'),$_SERVER['PHP_SELF'],'f.datef','',$param,'align="center"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans("DateDue"),$_SERVER['PHP_SELF'],"f.date_lim_reglement","&socid=$socid","",'align="center"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('Company'),$_SERVER['PHP_SELF'],'s.nom','',$param,'',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('AmountHT'),$_SERVER['PHP_SELF'],'f.total','',$param,'align="right"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('AmountTTC'),$_SERVER['PHP_SELF'],'f.total_ttc','',$param,'align="right"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('Received'),$_SERVER['PHP_SELF'],'am','',$param,'align="right"',$sortfield,$sortorder); + print_liste_field_titre($langs->trans('Status'),$_SERVER['PHP_SELF'],'fk_statut,paye,am','',$param,'align="right"',$sortfield,$sortorder); + //print ''; + print ''; - // Lignes des champs de filtre + // Lignes des champs de filtre - print ''; - print ''; - print ''; - print ''; - print ''; - print '\n"; + print ''; + print ''; + print ''; + print ''; + print ''; + print '\n"; - if ($num > 0) - { - $var=True; - $total=0; - $totalrecu=0; + if ($num > 0) + { + $var=True; + $total=0; + $totalrecu=0; - while ($i < min($num,$limit)) - { - $objp = $db->fetch_object($resql); - $var=!$var; + while ($i < min($num,$limit)) + { + $objp = $db->fetch_object($resql); + $var=!$var; - $datelimit=$db->jdate($objp->datelimite); + $datelimit=$db->jdate($objp->datelimite); - print ''; - print ''; + print ''; + print '
 
'; - print ''; - print ''; - print ''; - //print ' '.$langs->trans('Year').': '; - $syear = $year; - //if ($syear == '') $syear = date("Y"); - $html->select_year($syear,'year',1, 20, 5); - print ' '; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; - print ' '; - print ''; - print "
'; + print ''; + print ''; + print ''; + //print ' '.$langs->trans('Year').': '; + $syear = $year; + //if ($syear == '') $syear = date("Y"); + $html->select_year($syear,'year',1, 20, 5); + print ' '; + print ''; + print ''; + print ''; + print ''; + print ''; + print ''; + print ' '; + print ''; + print "
'; + print '
'; - $facturestatic->id=$objp->facid; - $facturestatic->ref=$objp->facnumber; - $facturestatic->type=$objp->type; - $paiement = $facturestatic->getSommePaiement(); + $facturestatic->id=$objp->facid; + $facturestatic->ref=$objp->facnumber; + $facturestatic->type=$objp->type; + $paiement = $facturestatic->getSommePaiement(); - print ''; + print '
'; - print ''; + print ''; - print ''; - print '
'; - print $facturestatic->getNomUrl(1); - print $objp->increment; - print ''; + print $facturestatic->getNomUrl(1); + print $objp->increment; + print ''; - $filename=dol_sanitizeFileName($objp->facnumber); - $filedir=$conf->facture->dir_output . '/' . dol_sanitizeFileName($objp->facnumber); - $urlsource=$_SERVER['PHP_SELF'].'?facid='.$objp->facid; - $formfile->show_documents('facture',$filename,$filedir,$urlsource,'','','',1,'',1); - print '
'; + print '
'; + $filename=dol_sanitizeFileName($objp->facnumber); + $filedir=$conf->facture->dir_output . '/' . dol_sanitizeFileName($objp->facnumber); + $urlsource=$_SERVER['PHP_SELF'].'?facid='.$objp->facid; + $formfile->show_documents('facture',$filename,$filedir,$urlsource,'','','',1,'',1); + print '
'; - print "\n"; + print "\n"; - // Date - print ''; - print dol_print_date($db->jdate($objp->df),'day'); - print ''; + // Date + print ''; + print dol_print_date($db->jdate($objp->df),'day'); + print ''; - // Date limit - print ''.dol_print_date($datelimit,'day'); - if ($datelimit < ($now - $conf->facture->client->warning_delay) && ! $objp->paye && $objp->fk_statut == 1 && ! $paiement) - { - print img_warning($langs->trans('Late')); - } - print ''; + // Date limit + print ''.dol_print_date($datelimit,'day'); + if ($datelimit < ($now - $conf->facture->client->warning_delay) && ! $objp->paye && $objp->fk_statut == 1 && ! $paiement) + { + print img_warning($langs->trans('Late')); + } + print ''; - print ''; - $thirdparty=new Societe($db); - $thirdparty->id=$objp->socid; + print ''; + $thirdparty=new Societe($db); + $thirdparty->id=$objp->socid; $thirdparty->nom=$objp->nom; print $thirdparty->getNomUrl(1,'customer'); - print ''; + print ''; - print ''.price($objp->total).''; + print ''.price($objp->total).''; - print ''.price($objp->total_ttc).''; + print ''.price($objp->total_ttc).''; - print ''.price($paiement).''; + print ''.price($paiement).''; - // Affiche statut de la facture - print ''; - print $facturestatic->LibStatut($objp->paye,$objp->fk_statut,5,$paiement,$objp->type); - print ""; - //print " "; - print "\n"; - $total+=$objp->total; - $total_ttc+=$objp->total_ttc; - $totalrecu+=$paiement; - $i++; - } + // Affiche statut de la facture + print ''; + print $facturestatic->LibStatut($objp->paye,$objp->fk_statut,5,$paiement,$objp->type); + print ""; + //print " "; + print "\n"; + $total+=$objp->total; + $total_ttc+=$objp->total_ttc; + $totalrecu+=$paiement; + $i++; + } - if (($offset + $num) <= $limit) - { - // Print total - print ''; - print ''.$langs->trans('Total').''; - print ''.price($total).''; - print ''.price($total_ttc).''; - print ''.price($totalrecu).''; - print ' '; - print ''; - } - } + if (($offset + $num) <= $limit) + { + // Print total + print ''; + print ''.$langs->trans('Total').''; + print ''.price($total).''; + print ''.price($total_ttc).''; + print ''.price($totalrecu).''; + print ' '; + print ''; + } + } - print "\n"; - print "
\n"; - $db->free($resql); - } - else - { - dol_print_error($db); - } - } + print "\n"; + print "\n"; + $db->free($resql); + } + else + { + dol_print_error($db); + } + } } $db->close(); diff --git a/htdocs/fichinter/fiche.php b/htdocs/fichinter/fiche.php index 9d505e363a4..fd862164514 100644 --- a/htdocs/fichinter/fiche.php +++ b/htdocs/fichinter/fiche.php @@ -33,12 +33,12 @@ require_once(DOL_DOCUMENT_ROOT."/lib/fichinter.lib.php"); require_once(DOL_DOCUMENT_ROOT."/lib/date.lib.php"); if ($conf->projet->enabled) { - require_once(DOL_DOCUMENT_ROOT."/lib/project.lib.php"); - require_once(DOL_DOCUMENT_ROOT."/projet/class/project.class.php"); + require_once(DOL_DOCUMENT_ROOT."/lib/project.lib.php"); + require_once(DOL_DOCUMENT_ROOT."/projet/class/project.class.php"); } if (! empty($conf->global->FICHEINTER_ADDON) && is_readable(DOL_DOCUMENT_ROOT ."/includes/modules/fichinter/mod_".$conf->global->FICHEINTER_ADDON.".php")) { - require_once(DOL_DOCUMENT_ROOT ."/includes/modules/fichinter/mod_".$conf->global->FICHEINTER_ADDON.".php"); + require_once(DOL_DOCUMENT_ROOT ."/includes/modules/fichinter/mod_".$conf->global->FICHEINTER_ADDON.".php"); } $langs->load("companies"); @@ -49,15 +49,17 @@ $fichinterid=0; $fichinter = new Fichinter($db); if ($_GET["id"] > 0 || ! empty($_GET["ref"])) { - $result=$fichinter->fetch($_GET["id"],$_GET["ref"]); - if (! $result > 0) - { - dol_print_error($db); - exit; - } - $fichinterid=$fichinter->id; + $result=$fichinter->fetch($_GET["id"],$_GET["ref"]); + if (! $result > 0) + { + dol_print_error($db); + exit; + } + $fichinterid=$fichinter->id; } +$mesg=GETPOST("msg"); + // Security check if ($user->societe_id) $socid=$user->societe_id; $result = restrictedArea($user, 'ficheinter', $fichinterid, 'fichinter'); @@ -70,115 +72,115 @@ $result = restrictedArea($user, 'ficheinter', $fichinterid, 'fichinter'); if ($_REQUEST["action"] != 'create' && $_REQUEST["action"] != 'add' && ! ($_REQUEST["id"] > 0) && empty($_REQUEST["ref"])) { - Header("Location: index.php"); - return; + Header("Location: index.php"); + return; } if ($_REQUEST['action'] == 'confirm_validate' && $_REQUEST['confirm'] == 'yes') { - $fichinter = new Fichinter($db); - $fichinter->fetch($_GET["id"]); - $fichinter->fetch_thirdparty(); + $fichinter = new Fichinter($db); + $fichinter->fetch($_GET["id"]); + $fichinter->fetch_thirdparty(); - $result = $fichinter->setValid($user, $conf->fichinter->outputdir); - if ($result >= 0) - { - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - $result=fichinter_create($db, $fichinter, $_REQUEST['model'], $outputlangs); - Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$fichinter->id); - exit; - } - else - { - $mesg='
'.$fichinter->error.'
'; - } + $result = $fichinter->setValid($user, $conf->fichinter->outputdir); + if ($result >= 0) + { + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + $result=fichinter_create($db, $fichinter, $_REQUEST['model'], $outputlangs); + Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$fichinter->id); + exit; + } + else + { + $mesg='
'.$fichinter->error.'
'; + } } if ($_REQUEST['action'] == 'confirm_modify' && $_REQUEST['confirm'] == 'yes') { - $fichinter = new Fichinter($db); - $fichinter->fetch($_GET["id"]); - $fichinter->fetch_thirdparty(); + $fichinter = new Fichinter($db); + $fichinter->fetch($_GET["id"]); + $fichinter->fetch_thirdparty(); - $result = $fichinter->setDraft($user); - if ($result >= 0) - { - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - $result=fichinter_create($db, $fichinter, (empty($_REQUEST['model'])?$fichinter->model:$_REQUEST['model']), $outputlangs); - Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$fichinter->id); - exit; - } - else - { - $mesg='
'.$fichinter->error.'
'; - } + $result = $fichinter->setDraft($user); + if ($result >= 0) + { + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + $result=fichinter_create($db, $fichinter, (empty($_REQUEST['model'])?$fichinter->model:$_REQUEST['model']), $outputlangs); + Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$fichinter->id); + exit; + } + else + { + $mesg='
'.$fichinter->error.'
'; + } } if ($_POST["action"] == 'add') { - $fichinter = new Fichinter($db); + $fichinter = new Fichinter($db); - $fichinter->socid = $_POST["socid"]; - $fichinter->duree = $_POST["duree"]; - $fichinter->fk_project = $_POST["projectid"]; - $fichinter->author = $user->id; - $fichinter->description = $_POST["description"]; - $fichinter->ref = $_POST["ref"]; - $fichinter->modelpdf = $_POST["model"]; + $fichinter->socid = $_POST["socid"]; + $fichinter->duree = $_POST["duree"]; + $fichinter->fk_project = $_POST["projectid"]; + $fichinter->author = $user->id; + $fichinter->description = $_POST["description"]; + $fichinter->ref = $_POST["ref"]; + $fichinter->modelpdf = $_POST["model"]; - if ($fichinter->socid > 0) - { - $result = $fichinter->create(); - if ($result > 0) - { - $_GET["id"]=$result; // Force raffraichissement sur fiche venant d'etre cree - $fichinterid=$result; - } - else - { - $langs->load("errors"); - $mesg='
'.$langs->trans($fichinter->error).'
'; - $_GET["action"] = 'create'; - $_GET["socid"] = $_POST["socid"]; - } - } - else - { - $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("ThirdParty")).'
'; - $_GET["action"] = 'create'; - } + if ($fichinter->socid > 0) + { + $result = $fichinter->create(); + if ($result > 0) + { + $_GET["id"]=$result; // Force raffraichissement sur fiche venant d'etre cree + $fichinterid=$result; + } + else + { + $langs->load("errors"); + $mesg='
'.$langs->trans($fichinter->error).'
'; + $_GET["action"] = 'create'; + $_GET["socid"] = $_POST["socid"]; + } + } + else + { + $mesg='
'.$langs->trans("ErrorFieldRequired",$langs->trans("ThirdParty")).'
'; + $_GET["action"] = 'create'; + } } if ($_POST["action"] == 'update') { - $fichinter = new Fichinter($db); + $fichinter = new Fichinter($db); - $fichinter->socid = $_POST["socid"]; - $fichinter->fk_project = $_POST["projectid"]; - $fichinter->author = $user->id; - $fichinter->description = $_POST["description"]; - $fichinter->ref = $_POST["ref"]; + $fichinter->socid = $_POST["socid"]; + $fichinter->fk_project = $_POST["projectid"]; + $fichinter->author = $user->id; + $fichinter->description = $_POST["description"]; + $fichinter->ref = $_POST["ref"]; - $fichinter->update($_POST["id"]); - $_GET["id"]=$_POST["id"]; // Force raffraichissement sur fiche venant d'etre creee + $fichinter->update($_POST["id"]); + $_GET["id"]=$_POST["id"]; // Force raffraichissement sur fiche venant d'etre creee } /* @@ -186,97 +188,97 @@ if ($_POST["action"] == 'update') */ if ($_REQUEST['action'] == 'builddoc') // En get ou en post { - $fichinter = new Fichinter($db); - $fichinter->fetch($_GET['id']); - $fichinter->fetch_thirdparty(); - $fichinter->fetch_lines(); + $fichinter = new Fichinter($db); + $fichinter->fetch($_GET['id']); + $fichinter->fetch_thirdparty(); + $fichinter->fetch_lines(); - if ($_REQUEST['model']) - { - $fichinter->setDocModel($user, $_REQUEST['model']); - } + if ($_REQUEST['model']) + { + $fichinter->setDocModel($user, $_REQUEST['model']); + } - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - $result=fichinter_create($db, $fichinter, $_REQUEST['model'], $outputlangs); - if ($result <= 0) - { - dol_print_error($db,$result); - exit; - } + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + $result=fichinter_create($db, $fichinter, $_REQUEST['model'], $outputlangs); + if ($result <= 0) + { + dol_print_error($db,$result); + exit; + } } // Set into a project if ($_POST['action'] == 'classin') { - $fichinter = new Fichinter($db); - $fichinter->fetch($_GET['id']); - $result=$fichinter->setProject($_POST['projectid']); - if ($result < 0) dol_print_error($db,$fichinter->error); + $fichinter = new Fichinter($db); + $fichinter->fetch($_GET['id']); + $result=$fichinter->setProject($_POST['projectid']); + if ($result < 0) dol_print_error($db,$fichinter->error); } if ($_REQUEST['action'] == 'confirm_delete' && $_REQUEST['confirm'] == 'yes') { - if ($user->rights->ficheinter->supprimer) - { - $fichinter = new Fichinter($db); - $fichinter->fetch($_GET['id']); - $fichinter->delete($user); - } - Header('Location: index.php?leftmenu=ficheinter'); - exit; + if ($user->rights->ficheinter->supprimer) + { + $fichinter = new Fichinter($db); + $fichinter->fetch($_GET['id']); + $fichinter->delete($user); + } + Header('Location: index.php?leftmenu=ficheinter'); + exit; } if ($_POST['action'] == 'setdescription') { - $fichinter = new Fichinter($db); - $fichinter->fetch($_GET['id']); - $result=$fichinter->set_description($user,$_POST['description']); - if ($result < 0) dol_print_error($db,$fichinter->error); + $fichinter = new Fichinter($db); + $fichinter->fetch($_GET['id']); + $result=$fichinter->set_description($user,$_POST['description']); + if ($result < 0) dol_print_error($db,$fichinter->error); } // Add line if ($_POST['action'] == "addline" && $user->rights->ficheinter->creer) { - if ($_POST['np_desc'] && ($_POST['durationhour'] || $_POST['durationmin'])) - { - $fichinter = new Fichinter($db); - $ret=$fichinter->fetch($_POST['fichinterid']); - $fichinter->fetch_thirdparty(); + if ($_POST['np_desc'] && ($_POST['durationhour'] || $_POST['durationmin'])) + { + $fichinter = new Fichinter($db); + $ret=$fichinter->fetch($_POST['fichinterid']); + $fichinter->fetch_thirdparty(); - $desc=$_POST['np_desc']; - $date_intervention = dol_mktime($_POST["dihour"], $_POST["dimin"], 0, $_POST["dimonth"], $_POST["diday"], $_POST["diyear"]); - $duration = ConvertTime2Seconds($_POST['durationhour'],$_POST['durationmin']); + $desc=$_POST['np_desc']; + $date_intervention = dol_mktime($_POST["dihour"], $_POST["dimin"], 0, $_POST["dimonth"], $_POST["diday"], $_POST["diyear"]); + $duration = ConvertTime2Seconds($_POST['durationhour'],$_POST['durationmin']); - $fichinter->addline( - $_POST['fichinterid'], - $desc, - $date_intervention, - $duration - ); + $fichinter->addline( + $_POST['fichinterid'], + $desc, + $date_intervention, + $duration + ); - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs); - Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$_POST['fichinterid']); - exit; - } + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs); + Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$_POST['fichinterid']); + exit; + } } /* @@ -284,57 +286,57 @@ if ($_POST['action'] == "addline" && $user->rights->ficheinter->creer) */ if ($_POST['action'] == 'updateligne' && $user->rights->ficheinter->creer && $_POST["save"] == $langs->trans("Save")) { - $fichinterline = new FichinterLigne($db); - if ($fichinterline->fetch($_POST['ligne']) <= 0) - { - dol_print_error($db); - exit; - } + $fichinterline = new FichinterLigne($db); + if ($fichinterline->fetch($_POST['ligne']) <= 0) + { + dol_print_error($db); + exit; + } - $fichinter = new Fichinter($db); - if ($fichinter->fetch($fichinterline->fk_fichinter) <= 0) - { - dol_print_error($db); - exit; - } - $fichinter->fetch_thirdparty(); + $fichinter = new Fichinter($db); + if ($fichinter->fetch($fichinterline->fk_fichinter) <= 0) + { + dol_print_error($db); + exit; + } + $fichinter->fetch_thirdparty(); - $desc=$_POST['np_desc']; - $date_intervention = dol_mktime($_POST["dihour"], $_POST["dimin"], 0, $_POST["dimonth"], $_POST["diday"], $_POST["diyear"]); - $duration = ConvertTime2Seconds($_POST['durationhour'],$_POST['durationmin']); + $desc=$_POST['np_desc']; + $date_intervention = dol_mktime($_POST["dihour"], $_POST["dimin"], 0, $_POST["dimonth"], $_POST["diday"], $_POST["diyear"]); + $duration = ConvertTime2Seconds($_POST['durationhour'],$_POST['durationmin']); - $fichinterline->datei=$date_intervention; - $fichinterline->desc=$desc; - $fichinterline->duration=$duration; - $result = $fichinterline->update(); - if ($result < 0) - { - dol_print_error($db); - exit; - } + $fichinterline->datei=$date_intervention; + $fichinterline->desc=$desc; + $fichinterline->duration=$duration; + $result = $fichinterline->update(); + if ($result < 0) + { + dol_print_error($db); + exit; + } - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs); + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs); - unset($_POST['dihour']); - unset($_POST['dimin']); - unset($_POST['dimonth']); - $dateintervention=''; - unset($_POST['np_desc']); - unset($_POST['durationhour']); - unset($_POST['durationmin']); + unset($_POST['dihour']); + unset($_POST['dimin']); + unset($_POST['dimonth']); + $dateintervention=''; + unset($_POST['np_desc']); + unset($_POST['durationhour']); + unset($_POST['durationmin']); - Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$_POST['fichinterid']); - exit; + Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$_POST['fichinterid']); + exit; } /* @@ -342,36 +344,36 @@ if ($_POST['action'] == 'updateligne' && $user->rights->ficheinter->creer && $_P */ if ($_REQUEST['action'] == 'confirm_deleteline' && $_REQUEST['confirm'] == 'yes') { - if ($user->rights->ficheinter->creer) - { - $fichinterline = new FichinterLigne($db); - if ($fichinterline->fetch($_GET['ligne']) <= 0) - { - dol_print_error($db); - exit; - } - $result=$fichinterline->deleteline(); - $fichinter = new Fichinter($db); - if ($fichinter->fetch($fichinterline->fk_fichinter) <= 0) - { - dol_print_error($db); - exit; - } + if ($user->rights->ficheinter->creer) + { + $fichinterline = new FichinterLigne($db); + if ($fichinterline->fetch($_GET['ligne']) <= 0) + { + dol_print_error($db); + exit; + } + $result=$fichinterline->deleteline(); + $fichinter = new Fichinter($db); + if ($fichinter->fetch($fichinterline->fk_fichinter) <= 0) + { + dol_print_error($db); + exit; + } - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs); - } - Header('Location: '.$_SERVER["PHP_SELF"].'?id='.$_GET['id']); - exit; + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs); + } + Header('Location: '.$_SERVER["PHP_SELF"].'?id='.$_GET['id']); + exit; } /* @@ -380,46 +382,199 @@ if ($_REQUEST['action'] == 'confirm_deleteline' && $_REQUEST['confirm'] == 'yes' if ($_GET['action'] == 'up' && $user->rights->ficheinter->creer) { - $fichinter = new Fichinter($db); - $fichinter->fetch($_GET['id']); - $fichinter->fetch_thirdparty(); - $fichinter->line_up($_GET['rowid']); + $fichinter = new Fichinter($db); + $fichinter->fetch($_GET['id']); + $fichinter->fetch_thirdparty(); + $fichinter->line_up($_GET['rowid']); - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs); - Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$_GET["id"].'#'.$_GET['rowid']); - exit; + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs); + Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$_GET["id"].'#'.$_GET['rowid']); + exit; } if ($_GET['action'] == 'down' && $user->rights->ficheinter->creer) { - $fichinter = new Fichinter($db); - $fichinter->fetch($_GET['id']); - $fichinter->fetch_thirdparty(); - $fichinter->line_down($_GET['rowid']); + $fichinter = new Fichinter($db); + $fichinter->fetch($_GET['id']); + $fichinter->fetch_thirdparty(); + $fichinter->line_down($_GET['rowid']); - // Define output language - $outputlangs = $langs; - $newlang=''; - if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; - if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; - if (! empty($newlang)) - { - $outputlangs = new Translate("",$conf); - $outputlangs->setDefaultLang($newlang); - } - fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs); - Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$_GET["id"].'#'.$_GET['rowid']); - exit; + // Define output language + $outputlangs = $langs; + $newlang=''; + if ($conf->global->MAIN_MULTILANGS && empty($newlang) && ! empty($_REQUEST['lang_id'])) $newlang=$_REQUEST['lang_id']; + if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang=$fichinter->client->default_lang; + if (! empty($newlang)) + { + $outputlangs = new Translate("",$conf); + $outputlangs->setDefaultLang($newlang); + } + fichinter_create($db, $fichinter, $fichinter->modelpdf, $outputlangs); + Header ('Location: '.$_SERVER["PHP_SELF"].'?id='.$_GET["id"].'#'.$_GET['rowid']); + exit; +} + +/* + * Send mail + */ +if ($_POST['action'] == 'send' && ! $_POST['cancel'] && (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->ficheinter->ficheinter_advance->send)) +{ + $langs->load('mails'); + + $fichinter = new Fichinter($db); + if ( $fichinter->fetch($_POST['fichinter_id']) ) + { + $ficheinterref = dol_sanitizeFileName($fichinter->ref); + $file = $conf->ficheinter->dir_output . '/' . $ficheinterref . '/' . $ficheinterref . '.pdf'; + + if (is_readable($file)) + { + $fichinter->fetch_thirdparty(); + + if ($_POST['sendto']) + { + // Le destinataire a ete fourni via le champ libre + $sendto = $_POST['sendto']; + $sendtoid = 0; + } + elseif ($_POST['receiver']) + { + // Le destinataire a ete fourni via la liste deroulante + if ($_POST['receiver'] < 0) // Id du tiers + { + $sendto = $fichinter->client->email; + $sendtoid = 0; + } + else // Id du contact + { + $sendto = $fichinter->client->contact_get_email($_POST['receiver']); + $sendtoid = $_POST['receiver']; + } + } + + if (strlen($sendto)) + { + $langs->load("commercial"); + + $from = $_POST['fromname'] . ' <' . $_POST['frommail'] .'>'; + $replyto = $_POST['replytoname']. ' <' . $_POST['replytomail'].'>'; + $message = $_POST['message']; + $sendtocc = $_POST['sendtocc']; + $deliveryreceipt = $_POST['deliveryreceipt']; + + if ($_POST['action'] == 'send') + { + if (strlen($_POST['subject'])) $subject = $_POST['subject']; + else $subject = $langs->transnoentities('Intervention').' '.$fichinter->ref; + $actiontypecode='AC_FICH'; + $actionmsg = $langs->transnoentities('MailSentBy').' '.$from.' '.$langs->transnoentities('To').' '.$sendto.".\n"; + if ($message) + { + $actionmsg.=$langs->transnoentities('MailTopic').": ".$subject."\n"; + $actionmsg.=$langs->transnoentities('TextUsedInTheMessageBody').":\n"; + $actionmsg.=$message; + } + $actionmsg2=$langs->transnoentities('Action'.$actiontypecode); + } + + // Create form object + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'); + $formmail = new FormMail($db); + + $attachedfiles=$formmail->get_attached_files(); + $filepath = $attachedfiles['paths']; + $filename = $attachedfiles['names']; + $mimetype = $attachedfiles['mimes']; + + // Envoi de la propal + require_once(DOL_DOCUMENT_ROOT.'/lib/CMailFile.class.php'); + $mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,'',$deliveryreceipt); + if ($mailfile->error) + { + $mesg='
'.$mailfile->error.'
'; + } + else + { + $result=$mailfile->sendfile(); + if ($result) + { + $mesg='
'.$langs->trans('MailSuccessfulySent',$from,$sendto).'.
'; + + $error=0; + + // Initialisation donnees + $fichinter->sendtoid=$sendtoid; + $fichinter->actiontypecode=$actiontypecode; + $fichinter->actionmsg = $actionmsg; + $fichinter->actionmsg2= $actionmsg2; + $fichinter->rowid=$fichinter->id; + + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/core/class/interfaces.class.php"); + $interface=new Interfaces($db); + $result=$interface->run_triggers('FICHINTER_SENTBYMAIL',$fichinter,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + + if ($error) + { + dol_print_error($db); + } + else + { + // Redirect here + // This avoid sending mail twice if going out and then back to page + Header('Location: '.$_SERVER["PHP_SELF"].'?id='.$fichinter->id.'&msg='.urlencode($mesg)); + exit; + } + } + else + { + $langs->load("other"); + $mesg='
'; + if ($mailfile->error) + { + $mesg.=$langs->trans('ErrorFailedToSendMail',$from,$sendto); + $mesg.='
'.$mailfile->error; + } + else + { + $mesg.='No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS'; + } + $mesg.='
'; + } + } + } + else + { + $langs->load("other"); + $mesg='
'.$langs->trans('ErrorMailRecipientIsEmpty').' !
'; + dol_syslog('Recipient email is empty'); + } + } + else + { + $langs->load("other"); + $mesg='
'.$langs->trans('ErrorCantReadFile',$file).'
'; + dol_syslog('Failed to read file: '.$file); + } + } + else + { + $langs->load("other"); + $mesg='
'.$langs->trans('ErrorFailedToReadEntity',$langs->trans("Intervention")).'
'; + dol_syslog('Impossible de lire les donnees de l\'intervention. Le fichier intervention n\'a peut-etre pas ete genere.'); + } } @@ -434,473 +589,541 @@ llxHeader(); if ($_GET["action"] == 'create') { - /* - * Mode creation - * Creation d'une nouvelle fiche d'intervention - */ + /* + * Mode creation + * Creation d'une nouvelle fiche d'intervention + */ - $societe=new Societe($db); - if ($_GET["socid"] > 0) - { - $societe->fetch($_GET["socid"]); - } + $societe=new Societe($db); + if ($_GET["socid"] > 0) + { + $societe->fetch($_GET["socid"]); + } - print_fiche_titre($langs->trans("AddIntervention")); + print_fiche_titre($langs->trans("AddIntervention")); - if ($mesg) print $mesg.'
'; + if ($mesg) print $mesg.'
'; - if (! $conf->global->FICHEINTER_ADDON) - { - dol_print_error($db,$langs->trans("Error")." ".$langs->trans("Error_FICHEINTER_ADDON_NotDefined")); - exit; - } + if (! $conf->global->FICHEINTER_ADDON) + { + dol_print_error($db,$langs->trans("Error")." ".$langs->trans("Error_FICHEINTER_ADDON_NotDefined")); + exit; + } - $ficheinter = new Fichinter($db); - $ficheinter->date = time(); - if ($fichinterid) $result=$ficheinter->fetch($fichinterid); + $ficheinter = new Fichinter($db); + $ficheinter->date = time(); + if ($fichinterid) $result=$ficheinter->fetch($fichinterid); - $obj = $conf->global->FICHEINTER_ADDON; - $obj = "mod_".$obj; + $obj = $conf->global->FICHEINTER_ADDON; + $obj = "mod_".$obj; - $modFicheinter = new $obj; - $numpr = $modFicheinter->getNextValue($societe,$ficheinter); + $modFicheinter = new $obj; + $numpr = $modFicheinter->getNextValue($societe,$ficheinter); - if ($_GET["socid"] > 0) - { - print '
'; - print ''; + if ($_GET["socid"] > 0) + { + print ''; + print ''; - print ''; + print '
'; - print ''; - print ''; + print ''; + print ''; - print ''; + print ''; - // Ref - print ''; - print ''."\n"; + // Ref + print ''; + print ''."\n"; - // Project - if ($conf->projet->enabled) - { - $langs->load("project"); + // Project + if ($conf->projet->enabled) + { + $langs->load("project"); - print ''; - } + print ''; + } - // Model - print ''; - print ''; - print '"; + // Model + print ''; + print ''; + print '"; - // Description (must be a textarea and not html must be allowed (used in list view) - print ''; - print ''; + // Description (must be a textarea and not html must be allowed (used in list view) + print ''; + print ''; - print '
'.$langs->trans("Company").''.$societe->getNomUrl(1).'
'.$langs->trans("Company").''.$societe->getNomUrl(1).'
'.$langs->trans("Ref").'
'.$langs->trans("Ref").'
'.$langs->trans("Project").''; - $numprojet=select_projects($societe->id,$_POST["projectid"],'projectid'); - if ($numprojet==0) - { - print '   '.$langs->trans("AddProject").''; - } - print '
'.$langs->trans("Project").''; + $numprojet=select_projects($societe->id,$_POST["projectid"],'projectid'); + if ($numprojet==0) + { + print '   '.$langs->trans("AddProject").''; + } + print '
'.$langs->trans("DefaultModel").''; - $model=new ModelePDFFicheinter(); - $liste=$model->liste_modeles($db); - print $html->selectarray('model',$liste,$conf->global->FICHEINTER_ADDON_PDF); - print "
'.$langs->trans("DefaultModel").''; + $model=new ModelePDFFicheinter(); + $liste=$model->liste_modeles($db); + print $html->selectarray('model',$liste,$conf->global->FICHEINTER_ADDON_PDF); + print "
'.$langs->trans("Description").''; - print ''; - print '
'.$langs->trans("Description").''; + print ''; + print '
'; + print ''; - print '

'; - print ''; - print '
'; + print '

'; + print ''; + print '
'; - print '
'; - } - else - { - print '
'; - print ''; - print ''; - print '
'.$langs->trans("Company").''; - $html->select_societes('','socid','',1,1); - print '
'; + print '
'; + } + else + { + print '
'; + print ''; + print ''; + print '
'.$langs->trans("Company").''; + $html->select_societes('','socid','',1,1); + print '
'; - print '
'; - print ''; - print ''; - print '
'; + print '
'; + print ''; + print ''; + print '
'; - print '
'; - } + print ''; + } } elseif ($fichinterid) { - /* - * Affichage en mode visu - */ - $fichinter->fetch_thirdparty(); + /* + * Affichage en mode visu + */ + $fichinter->fetch_thirdparty(); - $societe=new Societe($db); - $societe->fetch($fichinter->socid); + $societe=new Societe($db); + $societe->fetch($fichinter->socid); - if ($mesg) print $mesg."
"; + if ($mesg) dol_htmloutput_errors($mesg)."
"; - $head = fichinter_prepare_head($fichinter); + $head = fichinter_prepare_head($fichinter); - dol_fiche_head($head, 'card', $langs->trans("InterventionCard"), 0, 'intervention'); + dol_fiche_head($head, 'card', $langs->trans("InterventionCard"), 0, 'intervention'); - // Confirmation de la suppression de la fiche d'intervention - if ($_GET['action'] == 'delete') - { - $ret=$html->form_confirm($_SERVER["PHP_SELF"].'?id='.$fichinter->id, $langs->trans('DeleteIntervention'), $langs->trans('ConfirmDeleteIntervention'), 'confirm_delete','',0,1); - if ($ret == 'html') print '
'; - } + // Confirmation de la suppression de la fiche d'intervention + if ($_GET['action'] == 'delete') + { + $ret=$html->form_confirm($_SERVER["PHP_SELF"].'?id='.$fichinter->id, $langs->trans('DeleteIntervention'), $langs->trans('ConfirmDeleteIntervention'), 'confirm_delete','',0,1); + if ($ret == 'html') print '
'; + } - // Confirmation validation - if ($_GET['action'] == 'validate') - { - $ret=$html->form_confirm($_SERVER["PHP_SELF"].'?id='.$fichinter->id, $langs->trans('ValidateIntervention'), $langs->trans('ConfirmValidateIntervention'), 'confirm_validate','',0,1); - if ($ret == 'html') print '
'; - } + // Confirmation validation + if ($_GET['action'] == 'validate') + { + $ret=$html->form_confirm($_SERVER["PHP_SELF"].'?id='.$fichinter->id, $langs->trans('ValidateIntervention'), $langs->trans('ConfirmValidateIntervention'), 'confirm_validate','',0,1); + if ($ret == 'html') print '
'; + } - // Confirmation de la validation de la fiche d'intervention - if ($_GET['action'] == 'modify') - { - $ret=$html->form_confirm($_SERVER["PHP_SELF"].'?id='.$fichinter->id, $langs->trans('ModifyIntervention'), $langs->trans('ConfirmModifyIntervention'), 'confirm_modify','',0,1); - if ($ret == 'html') print '
'; - } + // Confirmation de la validation de la fiche d'intervention + if ($_GET['action'] == 'modify') + { + $ret=$html->form_confirm($_SERVER["PHP_SELF"].'?id='.$fichinter->id, $langs->trans('ModifyIntervention'), $langs->trans('ConfirmModifyIntervention'), 'confirm_modify','',0,1); + if ($ret == 'html') print '
'; + } - // Confirmation de la suppression d'une ligne d'intervention - if ($_GET['action'] == 'ask_deleteline') - { - $ret=$html->form_confirm($_SERVER["PHP_SELF"].'?id='.$fichinter->id.'&ligne='.$_GET["ligne"], $langs->trans('DeleteInterventionLine'), $langs->trans('ConfirmDeleteInterventionLine'), 'confirm_deleteline','',0,1); - if ($ret == 'html') print '
'; - } + // Confirmation de la suppression d'une ligne d'intervention + if ($_GET['action'] == 'ask_deleteline') + { + $ret=$html->form_confirm($_SERVER["PHP_SELF"].'?id='.$fichinter->id.'&ligne='.$_GET["ligne"], $langs->trans('DeleteInterventionLine'), $langs->trans('ConfirmDeleteInterventionLine'), 'confirm_deleteline','',0,1); + if ($ret == 'html') print '
'; + } - print ''; + print '
'; - // Ref - print ''; + // Ref + print ''; - // Third party - print ""; + // Third party + print ""; - // Duration - print ''; - //print $fichinter->duree.'-'.$conf->global->MAIN_DURATION_OF_WORKDAY; - print ''; - //print ''; - print ''; + // Duration + print ''; + //print $fichinter->duree.'-'.$conf->global->MAIN_DURATION_OF_WORKDAY; + print ''; + //print ''; + print ''; - // Description (must be a textarea and not html must be allowed (used in list view) - print ''; - print ''; + // Description (must be a textarea and not html must be allowed (used in list view) + print ''; + print ''; - // Project - if ($conf->projet->enabled) - { - $langs->load('projects'); - print ''; - print ''; + print ''; - print ''; - } + print '
'.$langs->trans("Ref").''; - print $html->showrefnav($fichinter,'ref','',1,'ref','ref'); - print '
'.$langs->trans("Ref").''; + print $html->showrefnav($fichinter,'ref','',1,'ref','ref'); + print '
".$langs->trans("Company")."".$fichinter->client->getNomUrl(1)."
".$langs->trans("Company")."".$fichinter->client->getNomUrl(1)."
'.$langs->trans("TotalDuration").''.ConvertSecondToTime($fichinter->duree,'all',$conf->global->MAIN_DURATION_OF_WORKDAY).''.ConvertSecondToTime(90000,'all',$conf->global->MAIN_DURATION_OF_WORKDAY).'
'.$langs->trans("TotalDuration").''.ConvertSecondToTime($fichinter->duree,'all',$conf->global->MAIN_DURATION_OF_WORKDAY).''.ConvertSecondToTime(90000,'all',$conf->global->MAIN_DURATION_OF_WORKDAY).'
'; - print ''; - if ($_GET['action'] != 'editdescription' && $fichinter->statut == 0) print ''; - print '
'; - print $langs->trans('Description'); - print 'id.'">'.img_edit($langs->trans('Modify'),1).'
'; - print '
'; - if ($_GET['action'] == 'editdescription') - { - print '
'; - print ''; - print ''; - print '
'; - print ''; - print '
'; - } - else - { - print nl2br($fichinter->description); - } - print '
'; + print ''; + if ($_GET['action'] != 'editdescription' && $fichinter->statut == 0) print ''; + print '
'; + print $langs->trans('Description'); + print 'id.'">'.img_edit($langs->trans('Modify'),1).'
'; + print '
'; + if ($_GET['action'] == 'editdescription') + { + print '
'; + print ''; + print ''; + print '
'; + print ''; + print '
'; + } + else + { + print nl2br($fichinter->description); + } + print '
'; + // Project + if ($conf->projet->enabled) + { + $langs->load('projects'); + print '
'; - print ''; - if ($_GET['action'] != 'classin') - { - print ''; - } - print '
'; - print $langs->trans('Project'); - print 'id.'">'; - print img_edit($langs->trans('SetProject'),1); - print '
'; - print '
'; - if ($_GET['action'] == 'classin') - { - $html->form_project($_SERVER['PHP_SELF'].'?id='.$fichinter->id, $fichinter->socid, $fichinter->fk_project,'projectid'); - } - else - { - $html->form_project($_SERVER['PHP_SELF'].'?id='.$fichinter->id, $fichinter->socid, $fichinter->fk_project,'none'); - } - print '
'; + if ($_GET['action'] != 'classin') + { + print ''; + } + print '
'; + print $langs->trans('Project'); + print 'id.'">'; + print img_edit($langs->trans('SetProject'),1); + print '
'; + print ''; + if ($_GET['action'] == 'classin') + { + $html->form_project($_SERVER['PHP_SELF'].'?id='.$fichinter->id, $fichinter->socid, $fichinter->fk_project,'projectid'); + } + else + { + $html->form_project($_SERVER['PHP_SELF'].'?id='.$fichinter->id, $fichinter->socid, $fichinter->fk_project,'none'); + } + print ''; + print ''; + } - // Statut - print ''.$langs->trans("Status").''.$fichinter->getLibStatut(4).''; + // Statut + print ''.$langs->trans("Status").''.$fichinter->getLibStatut(4).''; - print ""; + print ""; - /* - * Lignes d'intervention - */ - $sql = 'SELECT ft.rowid, ft.description, ft.fk_fichinter, ft.duree, ft.rang,'; - $sql.= ' ft.date as date_intervention'; - $sql.= ' FROM '.MAIN_DB_PREFIX.'fichinterdet as ft'; - $sql.= ' WHERE ft.fk_fichinter = '.$fichinterid; - $sql.= ' ORDER BY ft.rang ASC, ft.rowid'; + /* + * Lignes d'intervention + */ + $sql = 'SELECT ft.rowid, ft.description, ft.fk_fichinter, ft.duree, ft.rang,'; + $sql.= ' ft.date as date_intervention'; + $sql.= ' FROM '.MAIN_DB_PREFIX.'fichinterdet as ft'; + $sql.= ' WHERE ft.fk_fichinter = '.$fichinterid; + $sql.= ' ORDER BY ft.rang ASC, ft.rowid'; - $resql = $db->query($sql); - if ($resql) - { - $num = $db->num_rows($resql); - $i = 0; + $resql = $db->query($sql); + if ($resql) + { + $num = $db->num_rows($resql); + $i = 0; - if ($num) - { - print '
'; + if ($num) + { + print '
'; - print ''; - print ''; - print ''; - print ''; - print ''; - print "\n"; - } - $var=true; - while ($i < $num) - { - $objp = $db->fetch_object($resql); - $var=!$var; + print ''; + print ''; + print ''; + print ''; + print ''; + print "\n"; + } + $var=true; + while ($i < $num) + { + $objp = $db->fetch_object($resql); + $var=!$var; - // Ligne en mode visu - if ($_GET['action'] != 'editline' || $_GET['ligne'] != $objp->rowid) - { - print ''; - print ''; + print ''; + // Date + print ''; - // Duration - print ''; + // Duration + print ''; - print "\n"; + print "\n"; - // Icone d'edition et suppression - if ($fichinter->statut == 0 && $user->rights->ficheinter->creer) - { - print ''; - print ''; - if ($num > 1) - { - print ''; - } - } - else - { - print ''; - } + // Icone d'edition et suppression + if ($fichinter->statut == 0 && $user->rights->ficheinter->creer) + { + print ''; + print ''; + if ($num > 1) + { + print ''; + } + } + else + { + print ''; + } - print ''; - } + print ''; + } - // Ligne en mode update - if ($fichinter->statut == 0 && $_GET["action"] == 'editline' && $user->rights->ficheinter->creer && $_GET["ligne"] == $objp->rowid) - { - print 'rowid.'" method="post">'; - print ''; - print ''; - print ''; - print ''; - print ''; - print ''; + print ''; + // Editeur wysiwyg + require_once(DOL_DOCUMENT_ROOT."/lib/doleditor.class.php"); + $doleditor=new DolEditor('np_desc',$objp->description,'',164,'dolibarr_details','',false,true,$conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS,ROWS_2,70); + $doleditor->Create(); + print ''; - // Date d'intervention - print ''; + // Date d'intervention + print ''; - // Duration - print ''; + // Duration + print ''; - print ''; - print '' . "\n"; + print ''; + print '' . "\n"; - print "\n"; - } + print "\n"; + } - $i++; - } + $i++; + } - $db->free($resql); + $db->free($resql); - /* - * Ajouter une ligne - */ - if ($fichinter->statut == 0 && $user->rights->ficheinter->creer && $_GET["action"] <> 'editline') - { - if (! $num) print '
'.$langs->trans('Description').''.$langs->trans('Date').''.$langs->trans('Duration').' 
'.$langs->trans('Description').''.$langs->trans('Date').''.$langs->trans('Duration').' 
'; - print ''; // ancre pour retourner sur la ligne - print nl2br($objp->description); + // Ligne en mode visu + if ($_GET['action'] != 'editline' || $_GET['ligne'] != $objp->rowid) + { + print '
'; + print ''; // ancre pour retourner sur la ligne + print nl2br($objp->description); - // Date - print ''.dol_print_date($db->jdate($objp->date_intervention),'dayhour').''.dol_print_date($db->jdate($objp->date_intervention),'dayhour').''.ConvertSecondToTime($objp->duree).''.ConvertSecondToTime($objp->duree).''; - print 'rowid.'#'.$objp->rowid.'">'; - print img_edit(); - print ''; - print ''; - print 'rowid.'">'; - print img_delete(); - print ''; - if ($i > 0) - { - print 'rowid.'">'; - print img_up(); - print ''; - } - if ($i < $num-1) - { - print 'rowid.'">'; - print img_down(); - print ''; - } - print ' '; + print 'rowid.'#'.$objp->rowid.'">'; + print img_edit(); + print ''; + print ''; + print 'rowid.'">'; + print img_delete(); + print ''; + if ($i > 0) + { + print 'rowid.'">'; + print img_up(); + print ''; + } + if ($i < $num-1) + { + print 'rowid.'">'; + print img_down(); + print ''; + } + print ' 
'; - print ''; // ancre pour retourner sur la ligne + // Ligne en mode update + if ($fichinter->statut == 0 && $_GET["action"] == 'editline' && $user->rights->ficheinter->creer && $_GET["ligne"] == $objp->rowid) + { + print 'rowid.'" method="post">'; + print ''; + print ''; + print ''; + print ''; + print '
'; + print ''; // ancre pour retourner sur la ligne - // Editeur wysiwyg - require_once(DOL_DOCUMENT_ROOT."/lib/doleditor.class.php"); - $doleditor=new DolEditor('np_desc',$objp->description,'',164,'dolibarr_details','',false,true,$conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS,ROWS_2,70); - $doleditor->Create(); - print ''; - $html->select_date($db->jdate($objp->date_intervention),'di',1,1,0,"date_intervention"); - print ''; + $html->select_date($db->jdate($objp->date_intervention),'di',1,1,0,"date_intervention"); + print ''; - $html->select_duration('duration',$objp->duree); - print ''; + $html->select_duration('duration',$objp->duree); + print ''; - print '
'; + print '
'; + /* + * Ajouter une ligne + */ + if ($fichinter->statut == 0 && $user->rights->ficheinter->creer && $_GET["action"] <> 'editline') + { + if (! $num) print '
'; - print ''; - print ''; - print ''; - print ''; + print ''; + print ''; + print ''; + print ''; - print ''; - print "\n"; + print ''; + print "\n"; - // Ajout ligne d'intervention - print ''; - print ''; - print ''; - print ''; + // Ajout ligne d'intervention + print ''; + print ''; + print ''; + print ''; - $var=false; + $var=false; - print '\n"; - print ''; + print '\n"; + print ''; - // Date intervention - print ''; + // Date intervention + print ''; - // Duration - print ''; + // Duration + print ''; - print ''; - print ''; + print ''; + print ''; - print ''; + print ''; - if (! $num) print '
'; - print ''; // ancre - print $langs->trans('Description').''.$langs->trans('Date').''.$langs->trans('Duration').'
'; + print ''; // ancre + print $langs->trans('Description').''.$langs->trans('Date').''.$langs->trans('Duration').' 
 
'; - // editeur wysiwyg - require_once(DOL_DOCUMENT_ROOT."/lib/doleditor.class.php"); - $doleditor=new DolEditor('np_desc',$_POST["np_desc"],'',100,'dolibarr_details','',false,true,$conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS,ROWS_2,70); - $doleditor->Create(); - print '
'; + // editeur wysiwyg + require_once(DOL_DOCUMENT_ROOT."/lib/doleditor.class.php"); + $doleditor=new DolEditor('np_desc',$_POST["np_desc"],'',100,'dolibarr_details','',false,true,$conf->fckeditor->enabled && $conf->global->FCKEDITOR_ENABLE_DETAILS,ROWS_2,70); + $doleditor->Create(); + print ''; - $timearray=dol_getdate(mktime()); - $timewithnohour=dol_mktime(0,0,0,$timearray['mon'],$timearray['mday'],$timearray['year']); - $html->select_date($timewithnohour,'di',1,1,0,"addinter"); - print ''; + $timearray=dol_getdate(mktime()); + $timewithnohour=dol_mktime(0,0,0,$timearray['mon'],$timearray['mday'],$timearray['year']); + $html->select_date($timewithnohour,'di',1,1,0,"addinter"); + print ''; - $html->select_duration('duration',3600); - print ''; + $html->select_duration('duration',3600); + print '
'; - } + if (! $num) print ''; + } - if ($num) print ''; - } - else - { - dol_print_error($db); - } + if ($num) print ''; + } + else + { + dol_print_error($db); + } - print ''; - print "\n"; + print ''; + print "\n"; - /* - * Barre d'actions - */ - print '
'; + /* + * Barre d'actions + */ + print '
'; - if ($user->societe_id == 0) - { - if ($_GET['action'] != 'editdescription') - { - // Validate - if ($fichinter->statut == 0 && $user->rights->ficheinter->creer) - { - print ''.$langs->trans("Valid").''; - } + if ($user->societe_id == 0) + { + if ($_GET['action'] != 'editdescription') + { + // Validate + if ($fichinter->statut == 0 && $user->rights->ficheinter->creer) + { + print ''.$langs->trans("Valid").''; + } - // Modify - if ($fichinter->statut == 1 && $user->rights->ficheinter->creer) - { - print ''.$langs->trans("Modify").''; - } + // Modify + if ($fichinter->statut == 1 && $user->rights->ficheinter->creer) + { + print ''.$langs->trans("Modify").''; + } - // Delete - if (($fichinter->statut == 0 && $user->rights->ficheinter->creer) || $user->rights->ficheinter->supprimer) - { - print ''.$langs->trans('Delete').''; - } - } - } + // Send + if ($fichinter->statut == 1) + { + $ficheinterref = dol_sanitizeFileName($fichinter->ref); + $file = $conf->ficheinter->dir_output . '/'.$ficheinterref.'/'.$ficheinterref.'.pdf'; + if (file_exists($file)) + { + if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->ficheinter->ficheinter_advance->send) + { + print ''.$langs->trans('SendByMail').''; + } + else print ''.$langs->trans('SendByMail').''; + } + } - print '
'; + // Delete + if (($fichinter->statut == 0 && $user->rights->ficheinter->creer) || $user->rights->ficheinter->supprimer) + { + print ''.$langs->trans('Delete').''; + } + } + } - print '"; - print "
'; - /* - * Built documents - */ - $filename=dol_sanitizeFileName($fichinter->ref); - $filedir=$conf->ficheinter->dir_output . "/".$fichinter->ref; - $urlsource=$_SERVER["PHP_SELF"]."?id=".$fichinter->id; - $genallowed=$user->rights->ficheinter->creer; - $delallowed=$user->rights->ficheinter->supprimer; - $genallowed=1; - $delallowed=1; + print ''; - $var=true; - print "
\n"; - $somethingshown=$formfile->show_documents('ficheinter',$filename,$filedir,$urlsource,$genallowed,$delallowed,$fichinter->modelpdf,1,0,0,28,0,'','','',$societe->default_lang); + /* + * Action presend + */ + if ($_GET['action'] == 'presend') + { + $ref = dol_sanitizeFileName($fichinter->ref); + $file = $conf->ficheinter->dir_output . '/' . $ref . '/' . $ref . '.pdf'; - print "
"; - print " 
\n"; + print '
'; + print_titre($langs->trans('SendInterventionByMail')); + + // Create form object + include_once(DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php'); + $formmail = new FormMail($db); + $formmail->fromtype = 'user'; + $formmail->fromid = $user->id; + $formmail->fromname = $user->fullname; + $formmail->frommail = $user->email; + $formmail->withfrom=1; + $formmail->withto=empty($_POST["sendto"])?1:$_POST["sendto"]; + $formmail->withtosocid=$societe->id; + $formmail->withtocc=1; + $formmail->withtoccsocid=0; + $formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC; + $formmail->withtocccsocid=0; + $formmail->withtopic=$langs->trans('SendInterventionRef','__FICHREF__'); + $formmail->withfile=1; + $formmail->withbody=1; + $formmail->withdeliveryreceipt=1; + $formmail->withcancel=1; + + // Tableau des substitutions + $formmail->substit['__FICHREF__']=$fichinter->ref; + // Tableau des parametres complementaires + $formmail->param['action']='send'; + $formmail->param['models']='fichinter_send'; + $formmail->param['fichinter_id']=$fichinter->id; + $formmail->param['returnurl']=DOL_URL_ROOT.'/fichinter/fiche.php?id='.$fichinter->id; + + // Init list of files + if (! empty($_REQUEST["mode"]) && $_REQUEST["mode"]=='init') + { + $formmail->clear_attached_files(); + $formmail->add_attached_files($file,$fichinter->ref.'.pdf','application/pdf'); + } + + $formmail->show_form(); + + print '
'; + } + + + print '"; + print "
'; + /* + * Built documents + */ + $filename=dol_sanitizeFileName($fichinter->ref); + $filedir=$conf->ficheinter->dir_output . "/".$fichinter->ref; + $urlsource=$_SERVER["PHP_SELF"]."?id=".$fichinter->id; + $genallowed=$user->rights->ficheinter->creer; + $delallowed=$user->rights->ficheinter->supprimer; + $genallowed=1; + $delallowed=1; + + $var=true; + + print "
\n"; + $somethingshown=$formfile->show_documents('ficheinter',$filename,$filedir,$urlsource,$genallowed,$delallowed,$fichinter->modelpdf,1,0,0,28,0,'','','',$societe->default_lang); + + print "
"; + print " 
\n"; } diff --git a/htdocs/fourn/facture/fiche.php b/htdocs/fourn/facture/fiche.php index 86901f87d59..72fa990c967 100644 --- a/htdocs/fourn/facture/fiche.php +++ b/htdocs/fourn/facture/fiche.php @@ -1767,9 +1767,13 @@ else } // Send by mail - if (($fac->statut == 1 || $fac->statut == 2) && $user->rights->facture->envoyer) + if (($fac->statut == 1 || $fac->statut == 2)) { - print ''.$langs->trans('SendByMail').''; + if (empty($conf->global->MAIN_USE_ADVANCED_PERMS) || $user->rights->fournisseur->supplier_invoice_advance->send) + { + print ''.$langs->trans('SendByMail').''; + } + else print ''.$langs->trans('SendByMail').''; } diff --git a/htdocs/includes/modules/modCommande.class.php b/htdocs/includes/modules/modCommande.class.php index bd3a179c151..64a70c435f9 100644 --- a/htdocs/includes/modules/modCommande.class.php +++ b/htdocs/includes/modules/modCommande.class.php @@ -130,7 +130,8 @@ class modCommande extends DolibarrModules $this->rights[$r][1] = 'Envoyer les commandes clients'; $this->rights[$r][2] = 'd'; $this->rights[$r][3] = 0; - $this->rights[$r][4] = 'envoyer'; + $this->rights[$r][4] = 'order_advance'; + $this->rights[$r][5] = 'send'; $r++; $this->rights[$r][0] = 87; diff --git a/htdocs/includes/modules/modFacture.class.php b/htdocs/includes/modules/modFacture.class.php index 4081c84eddf..0281fcfc4f4 100644 --- a/htdocs/includes/modules/modFacture.class.php +++ b/htdocs/includes/modules/modFacture.class.php @@ -145,7 +145,8 @@ class modFacture extends DolibarrModules $this->rights[$r][1] = 'Envoyer les factures par mail'; $this->rights[$r][2] = 'a'; $this->rights[$r][3] = 0; - $this->rights[$r][4] = 'envoyer'; + $this->rights[$r][4] = 'invoice_advance'; + $this->rights[$r][5] = 'send'; $r++; $this->rights[$r][0] = 16; diff --git a/htdocs/includes/modules/modFicheinter.class.php b/htdocs/includes/modules/modFicheinter.class.php index 225561492fb..56f1bd1e659 100644 --- a/htdocs/includes/modules/modFicheinter.class.php +++ b/htdocs/includes/modules/modFicheinter.class.php @@ -129,7 +129,7 @@ class modFicheinter extends DolibarrModules $r++; $this->rights[$r][0] = 68; - $this->rights[$r][1] = 'Envoyer les fiches d\'intervention'; + $this->rights[$r][1] = 'Envoyer les fiches d\'intervention par courriel'; $this->rights[$r][2] = 'r'; $this->rights[$r][3] = 0; $this->rights[$r][4] = 'ficheinter_advance'; // Visible if option MAIN_USE_ADVANCED_PERMS is on diff --git a/htdocs/includes/modules/modFournisseur.class.php b/htdocs/includes/modules/modFournisseur.class.php index cf6739ce95c..0ec7274044b 100644 --- a/htdocs/includes/modules/modFournisseur.class.php +++ b/htdocs/includes/modules/modFournisseur.class.php @@ -215,8 +215,8 @@ class modFournisseur extends DolibarrModules $this->rights[$r][1] = 'Envoyer les factures par mail'; $this->rights[$r][2] = 'a'; $this->rights[$r][3] = 0; - $this->rights[$r][4] = 'facture'; - $this->rights[$r][5] = 'envoyer'; + $this->rights[$r][4] = 'supplier_invoice_advance'; + $this->rights[$r][5] = 'send'; $r++; $this->rights[$r][0] = 1236; diff --git a/htdocs/includes/modules/modPropale.class.php b/htdocs/includes/modules/modPropale.class.php index 1b95bb4f306..698982e0622 100644 --- a/htdocs/includes/modules/modPropale.class.php +++ b/htdocs/includes/modules/modPropale.class.php @@ -134,7 +134,8 @@ class modPropale extends DolibarrModules $this->rights[$r][1] = 'Envoyer les propositions commerciales aux clients'; // libelle de la permission $this->rights[$r][2] = 'd'; // type de la permission (deprecie a ce jour) $this->rights[$r][3] = 0; // La permission est-elle une permission par defaut - $this->rights[$r][4] = 'envoyer'; + $this->rights[$r][4] = 'propal_advance'; + $this->rights[$r][5] = 'send'; $r++; $this->rights[$r][0] = 26; // id de la permission