diff --git a/htdocs/compta/facture/card.php b/htdocs/compta/facture/card.php
index 94f817114aa..401a2fdd37a 100644
--- a/htdocs/compta/facture/card.php
+++ b/htdocs/compta/facture/card.php
@@ -971,6 +971,7 @@ if (empty($reshook))
elseif ($action == 'add' && $usercancreate)
{
if ($socid > 0) $object->socid = GETPOST('socid', 'int');
+ $selectedLines = GETPOST('toselect', 'array');
$db->begin();
@@ -1571,8 +1572,11 @@ if (empty($reshook))
$fk_parent_line = 0;
$num = count($lines);
+
for ($i = 0; $i < $num; $i++)
{
+ if (!in_array($lines[$i]->id, $selectedLines)) continue; // Skip unselected lines
+
// Don't add lines with qty 0 when coming from a shipment including all order lines
if ($srcobject->element == 'shipping' && $conf->global->SHIPMENT_GETS_ALL_ORDER_PRODUCTS && $lines[$i]->qty == 0) continue;
// Don't add closed lines when coming from a contract (Set constant to '0,5' to exclude also inactive lines)
@@ -3623,8 +3627,6 @@ if ($action == 'create')
print '';
print '';
- print "\n";
-
// Show origin lines
if (!empty($origin) && !empty($originid) && is_object($objectsrc)) {
print '
';
@@ -3634,12 +3636,12 @@ if ($action == 'create')
print '
';
- $objectsrc->printOriginLinesList();
+ $objectsrc->printOriginLinesList('', $selectedLines);
print '
';
}
- print '
';
+ print '';
} elseif ($id > 0 || !empty($ref))
{
/*
diff --git a/htdocs/core/actions_sendmails.inc.php b/htdocs/core/actions_sendmails.inc.php
index 196656b983f..f3c72257670 100644
--- a/htdocs/core/actions_sendmails.inc.php
+++ b/htdocs/core/actions_sendmails.inc.php
@@ -473,12 +473,16 @@ if (($action == 'send' || $action == 'relance') && !$_POST['addfile'] && !$_POST
} else {
$langs->load("other");
$mesg = '';
- if ($mailfile->error)
- {
+ if ($mailfile->error) {
$mesg .= $langs->transnoentities('ErrorFailedToSendMail', dol_escape_htmltag($from), dol_escape_htmltag($sendto));
$mesg .= '
'.$mailfile->error;
} else {
- $mesg .= 'No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS';
+ $mesg .= $langs->transnoentities('ErrorFailedToSendMail', dol_escape_htmltag($from), dol_escape_htmltag($sendto));;
+ if (!empty($conf->global->MAIN_DISABLE_ALL_MAILS)) {
+ $mesg .= '
Feature is disabled by option MAIN_DISABLE_ALL_MAILS';
+ } else {
+ $mesg .= '
Unkown Error, please refers to your administrator';
+ }
}
$mesg .= '
';
diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php
index c9f038722ba..dea2ce4865b 100644
--- a/htdocs/core/class/commonobject.class.php
+++ b/htdocs/core/class/commonobject.class.php
@@ -2785,9 +2785,9 @@ abstract class CommonObject
*/
public function line_max($fk_parent_line = 0)
{
- // phpcs:enable
- $positionfield = 'rang';
- if ($this->table_element == 'bom') $positionfield = 'position';
+ // phpcs:enable
+ $positionfield = 'rang';
+ if ($this->table_element == 'bom_bom') $positionfield = 'position';
// Search the last rang with fk_parent_line
if ($fk_parent_line)
diff --git a/htdocs/fourn/class/fournisseur.facture.class.php b/htdocs/fourn/class/fournisseur.facture.class.php
index d642e18ff67..d3780d412ea 100644
--- a/htdocs/fourn/class/fournisseur.facture.class.php
+++ b/htdocs/fourn/class/fournisseur.facture.class.php
@@ -2219,37 +2219,37 @@ class FactureFournisseur extends CommonInvoice
if ($user->socid) $sql .= ' AND ff.fk_soc = '.$user->socid;
if (!$user->rights->societe->client->voir && !$user->socid) $sql .= " AND ff.fk_soc = sc.fk_soc AND sc.fk_user = ".$user->id;
- $resql = $this->db->query($sql);
- if ($resql)
- {
- $langs->load("bills");
- $now = dol_now();
+ $resql = $this->db->query($sql);
+ if ($resql)
+ {
+ $langs->load("bills");
+ $now = dol_now();
- $response = new WorkboardResponse();
- $response->warning_delay = $conf->facture->fournisseur->warning_delay / 60 / 60 / 24;
- $response->label = $langs->trans("SupplierBillsToPay");
- $response->labelShort = $langs->trans("StatusToPay");
+ $response = new WorkboardResponse();
+ $response->warning_delay = $conf->facture->fournisseur->warning_delay / 60 / 60 / 24;
+ $response->label = $langs->trans("SupplierBillsToPay");
+ $response->labelShort = $langs->trans("StatusToPay");
- $response->url = DOL_URL_ROOT.'/fourn/facture/list.php?search_status=1&mainmenu=billing&leftmenu=suppliers_bills';
- $response->img = img_object($langs->trans("Bills"), "bill");
+ $response->url = DOL_URL_ROOT.'/fourn/facture/list.php?search_status=1&mainmenu=billing&leftmenu=suppliers_bills';
+ $response->img = img_object($langs->trans("Bills"), "bill");
- $facturestatic = new FactureFournisseur($this->db);
+ $facturestatic = new FactureFournisseur($this->db);
- while ($obj = $this->db->fetch_object($resql))
- {
- $response->nbtodo++;
+ while ($obj = $this->db->fetch_object($resql))
+ {
+ $response->nbtodo++;
- $facturestatic->date_echeance = $this->db->jdate($obj->datefin);
- $facturestatic->statut = $obj->fk_statut;
+ $facturestatic->date_echeance = $this->db->jdate($obj->datefin);
+ $facturestatic->statut = $obj->fk_statut;
- if ($facturestatic->hasDelay()) {
- $response->nbtodolate++;
+ if ($facturestatic->hasDelay()) {
+ $response->nbtodolate++;
$response->url_late = DOL_URL_ROOT.'/fourn/facture/list.php?option=late&mainmenu=billing&leftmenu=suppliers_bills';
- }
- }
- $this->db->free($resql);
- return $response;
- } else {
+ }
+ }
+ $this->db->free($resql);
+ return $response;
+ } else {
dol_print_error($this->db);
$this->error = $this->db->error();
return -1;
@@ -2406,7 +2406,7 @@ class FactureFournisseur extends CommonInvoice
return $numref;
} else {
$this->error = $obj->error;
- return false;
+ return -1;
}
}
diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php
index 542a4a09274..c304a4edce7 100644
--- a/htdocs/fourn/facture/card.php
+++ b/htdocs/fourn/facture/card.php
@@ -57,7 +57,7 @@ if (!empty($conf->variants->enabled)) {
if (!empty($conf->accounting->enabled)) require_once DOL_DOCUMENT_ROOT.'/accountancy/class/accountingjournal.class.php';
-$langs->loadLangs(array('bills', 'compta', 'suppliers', 'companies', 'products', 'banks'));
+$langs->loadLangs(array('bills', 'compta', 'suppliers', 'companies', 'products', 'banks', 'admin'));
if (!empty($conf->incoterm->enabled)) $langs->load('incoterm');
$id = (GETPOST('facid', 'int') ? GETPOST('facid', 'int') : GETPOST('id', 'int'));
@@ -2303,54 +2303,59 @@ if ($action == 'create')
// 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')
+ // We check if number is temporary number
+ if (preg_match('/^[\(]?PROV/i', $object->ref) || empty($object->ref)) // empty should not happened, but when it occurs, the test save life
{
- $savdate = $object->date;
$numref = $object->getNextNumRef($societe);
} else {
$numref = $object->ref;
}
- $text = $langs->trans('ConfirmValidateBill', $numref);
- /*if (! empty($conf->notification->enabled))
- {
- require_once DOL_DOCUMENT_ROOT .'/core/class/notify.class.php';
- $notify=new Notify($db);
- $text.='
';
- $text.=$notify->confirmMessage('BILL_SUPPLIER_VALIDATE',$object->socid, $object);
- }*/
- $formquestion = array();
-
- $qualified_for_stock_change = 0;
- if (empty($conf->global->STOCK_SUPPORTS_SERVICES))
+ if ($numref < 0)
{
- $qualified_for_stock_change = $object->hasProductsOrServices(2);
- } else {
- $qualified_for_stock_change = $object->hasProductsOrServices(1);
+ setEventMessages($object->error, $object->errors, 'errors');
+ $action = '';
}
-
- if (!empty($conf->stock->enabled) && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) && $qualified_for_stock_change)
+ else
{
- $langs->load("stocks");
- require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
- $formproduct = new FormProduct($db);
- $warehouse = new Entrepot($db);
- $warehouse_array = $warehouse->list_array();
- if (count($warehouse_array) == 1) {
- $label = $object->type == FactureFournisseur::TYPE_CREDIT_NOTE ? $langs->trans("WarehouseForStockDecrease", current($warehouse_array)) : $langs->trans("WarehouseForStockIncrease", current($warehouse_array));
- $value = '';
+ $text = $langs->trans('ConfirmValidateBill', $numref);
+ /*if (! empty($conf->notification->enabled))
+ {
+ require_once DOL_DOCUMENT_ROOT .'/core/class/notify.class.php';
+ $notify=new Notify($db);
+ $text.='
';
+ $text.=$notify->confirmMessage('BILL_SUPPLIER_VALIDATE',$object->socid, $object);
+ }*/
+ $formquestion = array();
+
+ $qualified_for_stock_change = 0;
+ if (empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
+ $qualified_for_stock_change = $object->hasProductsOrServices(2);
} else {
- $label = $object->type == FactureFournisseur::TYPE_CREDIT_NOTE ? $langs->trans("SelectWarehouseForStockDecrease") : $langs->trans("SelectWarehouseForStockIncrease");
- $value = $formproduct->selectWarehouses(GETPOST('idwarehouse') ?GETPOST('idwarehouse') : 'ifone', 'idwarehouse', '', 1);
+ $qualified_for_stock_change = $object->hasProductsOrServices(1);
}
- $formquestion = array(
- array('type' => 'other', 'name' => 'idwarehouse', 'label' => $label, 'value' => $value)
- );
- }
- $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ValidateBill'), $text, 'confirm_valid', $formquestion, 1, 1);
+ if (!empty($conf->stock->enabled) && !empty($conf->global->STOCK_CALCULATE_ON_SUPPLIER_BILL) && $qualified_for_stock_change)
+ {
+ $langs->load("stocks");
+ require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
+ $formproduct = new FormProduct($db);
+ $warehouse = new Entrepot($db);
+ $warehouse_array = $warehouse->list_array();
+ if (count($warehouse_array) == 1) {
+ $label = $object->type == FactureFournisseur::TYPE_CREDIT_NOTE ? $langs->trans("WarehouseForStockDecrease", current($warehouse_array)) : $langs->trans("WarehouseForStockIncrease", current($warehouse_array));
+ $value = '';
+ } else {
+ $label = $object->type == FactureFournisseur::TYPE_CREDIT_NOTE ? $langs->trans("SelectWarehouseForStockDecrease") : $langs->trans("SelectWarehouseForStockIncrease");
+ $value = $formproduct->selectWarehouses(GETPOST('idwarehouse') ?GETPOST('idwarehouse') : 'ifone', 'idwarehouse', '', 1);
+ }
+ $formquestion = array(
+ array('type' => 'other', 'name' => 'idwarehouse', 'label' => $label, 'value' => $value)
+ );
+ }
+
+ $formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ValidateBill'), $text, 'confirm_valid', $formquestion, 1, 1);
+ }
}
// Confirmation edit (back to draft)