Merge remote-tracking branch 'upstream/develop' into develop
This commit is contained in:
commit
ffa88ad11f
10
.github/ISSUE_TEMPLATE/custom.md
vendored
Normal file
10
.github/ISSUE_TEMPLATE/custom.md
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
---
|
||||||
|
name: Custom issue template
|
||||||
|
about: Describe this issue template's purpose here.
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
27
ChangeLog
27
ChangeLog
@ -2,6 +2,33 @@
|
|||||||
English Dolibarr ChangeLog
|
English Dolibarr ChangeLog
|
||||||
--------------------------------------------------------------
|
--------------------------------------------------------------
|
||||||
|
|
||||||
|
***** ChangeLog for 10.0.5 compared to 10.0.4 *****
|
||||||
|
FIX: 10.0: add URL param "restore_last_search_values=1" to all backlinks pointing to lists
|
||||||
|
FIX: 10.0: do not display single-letter values (indicating duration unit without value) in product list
|
||||||
|
FIX: #12473
|
||||||
|
FIX: #12481 : fix ticket creation from thirdparty, mission $socid var
|
||||||
|
FIX: #12482
|
||||||
|
FIX: #12644
|
||||||
|
FIX: #12665 Mass invoice validation with stock management
|
||||||
|
FIX: #12688
|
||||||
|
FIX: #12745
|
||||||
|
FIX: add and modify category translate form with posted values on errors
|
||||||
|
FIX: add URL param "restore_last_search_values=1" to all backlinks that point to a list
|
||||||
|
FIX: CommandeFournisseurLigne update function must not be able to return other value than 1 if success
|
||||||
|
FIX: contact card state address selected after filling address
|
||||||
|
FIX: dol_string_nohtmltag when there is html with windows EOL "<br>\r\n"
|
||||||
|
FIX: filter language is an array
|
||||||
|
FIX: first col at wrong position in Export 2007 (new)
|
||||||
|
FIX: getrights() request
|
||||||
|
FIX: Invoice Situation integration into Margin
|
||||||
|
FIX: missing nl2br conversion
|
||||||
|
FIX: not fee in payout list
|
||||||
|
FIX: product_fourn_price_id was assigned too late for logPrice() function
|
||||||
|
FIX: Reduce number of request for list of products
|
||||||
|
FIX: set due date in object in create invoice
|
||||||
|
FIX: units traductions for selectUnits() function
|
||||||
|
FIX: when we need to bill several orders, order lines unit is not on bill lines
|
||||||
|
NEW: 9.0: allow users to use the mysqldump '--quick' option
|
||||||
|
|
||||||
***** ChangeLog for 12.0.0 compared to 11.0.0 *****
|
***** ChangeLog for 12.0.0 compared to 11.0.0 *****
|
||||||
For Users:
|
For Users:
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
# DOLIBARR ERP & CRM
|
# DOLIBARR ERP & CRM
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
Dolibarr ERP & CRM est un logiciel moderne pour gérer votre activité (société, association, auto-entrepreneurs, artisans).
|
Dolibarr ERP & CRM est un logiciel moderne pour gérer votre activité (société, association, auto-entrepreneurs, artisans).
|
||||||
Il est simple d'utilisation et modulaire, vous permettant de n'activez que les fonctions dont vous avez besoin (contacts, fournisseurs, factures, commandes, stocks, agenda, ...).
|
Il est simple d'utilisation et modulaire, vous permettant de n'activez que les fonctions dont vous avez besoin (contacts, fournisseurs, factures, commandes, stocks, agenda, ...).
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,7 @@
|
|||||||
# DOLIBARR ERP & CRM
|
# DOLIBARR ERP & CRM
|
||||||
|
|
||||||

|

|
||||||
|

|
||||||
|7|8|9|10|develop|
|
|
||||||
|----------|----------|----------|----------|----------|
|
|
||||||
||||||
|
|
||||||
|
|
||||||
Dolibarr ERP & CRM is a modern software package to manage your organization's activity (contacts, suppliers, invoices, orders, stocks, agenda…).
|
Dolibarr ERP & CRM is a modern software package to manage your organization's activity (contacts, suppliers, invoices, orders, stocks, agenda…).
|
||||||
|
|
||||||
|
|||||||
@ -308,7 +308,7 @@ if (!$user->rights->societe->client->voir && !$socid) $sql .= " AND (a.fk_soc IS
|
|||||||
if ($socid > 0) $sql .= " AND s.rowid = ".$socid;
|
if ($socid > 0) $sql .= " AND s.rowid = ".$socid;
|
||||||
// We must filter on assignement table
|
// We must filter on assignement table
|
||||||
if ($filtert > 0 || $usergroup > 0) $sql .= " AND ar.fk_actioncomm = a.id AND ar.element_type='user'";
|
if ($filtert > 0 || $usergroup > 0) $sql .= " AND ar.fk_actioncomm = a.id AND ar.element_type='user'";
|
||||||
if ($type) $sql .= " AND c.id = ".$type;
|
if ($type) $sql .= " AND c.id = ".(int) $type;
|
||||||
if ($status == '0') { $sql .= " AND a.percent = 0"; }
|
if ($status == '0') { $sql .= " AND a.percent = 0"; }
|
||||||
if ($status == '-1') { $sql .= " AND a.percent = -1"; } // Not applicable
|
if ($status == '-1') { $sql .= " AND a.percent = -1"; } // Not applicable
|
||||||
if ($status == '50') { $sql .= " AND (a.percent > 0 AND a.percent < 100)"; } // Running already started
|
if ($status == '50') { $sql .= " AND (a.percent > 0 AND a.percent < 100)"; } // Running already started
|
||||||
|
|||||||
@ -38,12 +38,15 @@ require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/account.class.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/compta/paiement/cheque/class/remisecheque.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/don/class/paymentdonation.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/loan/class/paymentloan.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/compta/bank/class/paymentvarious.class.php';
|
||||||
//show files
|
//show files
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions.lib.php';
|
||||||
|
|
||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array("banks", "categories", "companies", "bills", "trips"));
|
$langs->loadLangs(array("banks", "categories", "companies", "bills", "trips", "donations", "loan"));
|
||||||
|
|
||||||
$action = GETPOST('action', 'alpha');
|
$action = GETPOST('action', 'alpha');
|
||||||
$id = GETPOST('account', 'int');
|
$id = GETPOST('account', 'int');
|
||||||
@ -202,6 +205,9 @@ $paymentvatstatic = new TVA($db);
|
|||||||
$bankstatic = new Account($db);
|
$bankstatic = new Account($db);
|
||||||
$banklinestatic = new AccountLine($db);
|
$banklinestatic = new AccountLine($db);
|
||||||
$remisestatic = new RemiseCheque($db);
|
$remisestatic = new RemiseCheque($db);
|
||||||
|
$paymentdonationstatic=new PaymentDonation($db);
|
||||||
|
$paymentloanstatic=new PaymentLoan($db);
|
||||||
|
$paymentvariousstatic=new PaymentVarious($db);
|
||||||
|
|
||||||
// Must be before button action
|
// Must be before button action
|
||||||
$param = '';
|
$param = '';
|
||||||
@ -512,7 +518,28 @@ else
|
|||||||
print '</a>';
|
print '</a>';
|
||||||
$newline = 0;
|
$newline = 0;
|
||||||
}
|
}
|
||||||
elseif ($links[$key]['type'] == 'banktransfert') {
|
elseif ($links[$key]['type']=='payment_donation')
|
||||||
|
{
|
||||||
|
$paymentdonationstatic->id=$links[$key]['url_id'];
|
||||||
|
$paymentdonationstatic->ref=$langs->trans("Payment");
|
||||||
|
print ' '.$paymentdonationstatic->getNomUrl(1);
|
||||||
|
$newline = 0;
|
||||||
|
}
|
||||||
|
elseif ($links[$key]['type']=='payment_loan')
|
||||||
|
{
|
||||||
|
$paymentloanstatic->id=$links[$key]['url_id'];
|
||||||
|
$paymentloanstatic->ref=$langs->trans("Payment");
|
||||||
|
print ' '.$paymentloanstatic->getNomUrl(1);
|
||||||
|
$newline = 0;
|
||||||
|
}
|
||||||
|
elseif ($links[$key]['type']=='payment_various')
|
||||||
|
{
|
||||||
|
$paymentvariousstatic->id=$links[$key]['url_id'];
|
||||||
|
$paymentvariousstatic->ref=$langs->trans("Payment");
|
||||||
|
print ' '.$paymentvariousstatic->getNomUrl(1);
|
||||||
|
$newline = 0;
|
||||||
|
}
|
||||||
|
elseif ($links[$key]['type']=='banktransfert') {
|
||||||
// Do not show link to transfer since there is no transfer card (avoid confusion). Can already be accessed from transaction detail.
|
// Do not show link to transfer since there is no transfer card (avoid confusion). Can already be accessed from transaction detail.
|
||||||
if ($objp->amount > 0)
|
if ($objp->amount > 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -3747,18 +3747,24 @@ elseif ($id > 0 || !empty($ref))
|
|||||||
$i++;
|
$i++;
|
||||||
$close[$i]['code'] = 'badcustomer';
|
$close[$i]['code'] = 'badcustomer';
|
||||||
$i++;
|
$i++;
|
||||||
|
$close[$i]['code'] = 'other';
|
||||||
|
$i++;
|
||||||
// Help
|
// Help
|
||||||
$i = 0;
|
$i = 0;
|
||||||
$close[$i]['label'] = $langs->trans("HelpEscompte").'<br><br>'.$langs->trans("ConfirmClassifyPaidPartiallyReasonDiscountVatDesc");
|
$close[$i]['label'] = $langs->trans("HelpEscompte").'<br><br>'.$langs->trans("ConfirmClassifyPaidPartiallyReasonDiscountVatDesc");
|
||||||
$i++;
|
$i++;
|
||||||
$close[$i]['label'] = $langs->trans("ConfirmClassifyPaidPartiallyReasonBadCustomerDesc");
|
$close[$i]['label'] = $langs->trans("ConfirmClassifyPaidPartiallyReasonBadCustomerDesc");
|
||||||
$i++;
|
$i++;
|
||||||
|
$close[$i]['label'] = $langs->trans("Other");
|
||||||
|
$i++;
|
||||||
// Texte
|
// Texte
|
||||||
$i = 0;
|
$i = 0;
|
||||||
$close[$i]['reason'] = $form->textwithpicto($langs->transnoentities("ConfirmClassifyPaidPartiallyReasonDiscount", $resteapayer, $langs->trans("Currency".$conf->currency)), $close[$i]['label'], 1);
|
$close[$i]['reason'] = $form->textwithpicto($langs->transnoentities("ConfirmClassifyPaidPartiallyReasonDiscount", $resteapayer, $langs->trans("Currency".$conf->currency)), $close[$i]['label'], 1);
|
||||||
$i++;
|
$i++;
|
||||||
$close[$i]['reason'] = $form->textwithpicto($langs->transnoentities("ConfirmClassifyPaidPartiallyReasonBadCustomer", $resteapayer, $langs->trans("Currency".$conf->currency)), $close[$i]['label'], 1);
|
$close[$i]['reason'] = $form->textwithpicto($langs->transnoentities("ConfirmClassifyPaidPartiallyReasonBadCustomer", $resteapayer, $langs->trans("Currency".$conf->currency)), $close[$i]['label'], 1);
|
||||||
$i++;
|
$i++;
|
||||||
|
$close[$i]['reason'] = $form->textwithpicto($langs->transnoentities("Other"), $close[$i]['label'], 1);
|
||||||
|
$i++;
|
||||||
// arrayreasons[code]=reason
|
// arrayreasons[code]=reason
|
||||||
foreach ($close as $key => $val) {
|
foreach ($close as $key => $val) {
|
||||||
$arrayreasons[$close [$key]['code']] = $close[$key]['reason'];
|
$arrayreasons[$close [$key]['code']] = $close[$key]['reason'];
|
||||||
|
|||||||
@ -142,8 +142,8 @@ if ($action == 'update' && !empty($permissiontoadd))
|
|||||||
} else {
|
} else {
|
||||||
$value = '';
|
$value = '';
|
||||||
}
|
}
|
||||||
} elseif (in_array($object->fields[$key]['type'], array('price', 'real'))) {
|
} elseif (preg_match('/^(integer|price|real|double)/', $object->fields[$key]['type'])) {
|
||||||
$value = price2num(GETPOST($key));
|
$value = price2num(GETPOST($key, 'none')); // To fix decimal separator according to lang setup
|
||||||
} else {
|
} else {
|
||||||
$value = GETPOST($key, 'alpha');
|
$value = GETPOST($key, 'alpha');
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
/* Copyright (c) 2015 Laurent Destailleur <eldy@users.sourceforge.net>
|
/* Copyright (c) 2015-2019 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -100,7 +100,7 @@ class FormMargin
|
|||||||
|
|
||||||
$pv = $line->total_ht;
|
$pv = $line->total_ht;
|
||||||
$pa_ht = ($pv < 0 ? - $line->pa_ht : $line->pa_ht); // We choosed to have line->pa_ht always positive in database, so we guess the correct sign
|
$pa_ht = ($pv < 0 ? - $line->pa_ht : $line->pa_ht); // We choosed to have line->pa_ht always positive in database, so we guess the correct sign
|
||||||
if ($object->type == Facture::TYPE_SITUATION) {
|
if ($object->element == 'facture' && $object->type == $object::TYPE_SITUATION) {
|
||||||
$pa = $line->qty * $pa_ht * ($line->situation_percent / 100);
|
$pa = $line->qty * $pa_ht * ($line->situation_percent / 100);
|
||||||
} else {
|
} else {
|
||||||
$pa = $line->qty * $pa_ht;
|
$pa = $line->qty * $pa_ht;
|
||||||
|
|||||||
@ -208,7 +208,7 @@ class SupplierInvoices extends DolibarrApi
|
|||||||
foreach($request_data as $field => $value) {
|
foreach($request_data as $field => $value) {
|
||||||
$this->invoice->$field = $value;
|
$this->invoice->$field = $value;
|
||||||
}
|
}
|
||||||
if(! array_keys($request_data, 'date')) {
|
if(! array_key_exists('date', $request_data)) {
|
||||||
$this->invoice->date = dol_now();
|
$this->invoice->date = dol_now();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -124,10 +124,10 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
|||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_CLOSE','BOM disabled','Executed when a BOM is disabled','bom',652);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_CLOSE','BOM disabled','Executed when a BOM is disabled','bom',652);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_REOPEN','BOM reopen','Executed when a BOM is re-open','bom',653);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_REOPEN','BOM reopen','Executed when a BOM is re-open','bom',653);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_DELETE','BOM deleted','Executed when a BOM deleted','bom',654);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_DELETE','BOM deleted','Executed when a BOM deleted','bom',654);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_VALIDATE','MO validated','Executed when a MO is validated','bom',660);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MRP_MO_VALIDATE','MO validated','Executed when a MO is validated','bom',660);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_PRODUCED','MO produced','Executed when a MO is produced','bom',661);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MRP_MO_PRODUCED','MO produced','Executed when a MO is produced','bom',661);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_DELETE','MO deleted','Executed when a MO is deleted','bom',662);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MRP_MO_DELETE','MO deleted','Executed when a MO is deleted','bom',662);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_CANCEL','MO canceled','Executed when a MO is canceled','bom',663);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MRP_MO_CANCEL','MO canceled','Executed when a MO is canceled','bom',663);
|
||||||
-- actions not enabled by default : they are excluded when we enable the module Agenda (except TASK_...)
|
-- actions not enabled by default : they are excluded when we enable the module Agenda (except TASK_...)
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TASK_CREATE','Task created','Executed when a project task is created','project',150);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TASK_CREATE','Task created','Executed when a project task is created','project',150);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TASK_MODIFY','Task modified','Executed when a project task is modified','project',151);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TASK_MODIFY','Task modified','Executed when a project task is modified','project',151);
|
||||||
|
|||||||
@ -59,6 +59,8 @@ ALTER TABLE llx_emailcollector_emailcollectoraction ADD COLUMN position integer
|
|||||||
|
|
||||||
-- For v11
|
-- For v11
|
||||||
|
|
||||||
|
ALTER TABLE llx_product_price MODIFY COLUMN tva_tx double(6,3) DEFAULT 0 NOT NULL;
|
||||||
|
|
||||||
ALTER TABLE llx_facturedet MODIFY COLUMN situation_percent real DEFAULT 100;
|
ALTER TABLE llx_facturedet MODIFY COLUMN situation_percent real DEFAULT 100;
|
||||||
UPDATE llx_facturedet SET situation_percent = 100 WHERE situation_percent IS NULL AND fk_prev_id IS NULL;
|
UPDATE llx_facturedet SET situation_percent = 100 WHERE situation_percent IS NULL AND fk_prev_id IS NULL;
|
||||||
|
|
||||||
@ -520,10 +522,11 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
|||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_REOPEN','BOM reopen','Executed when a BOM is re-open','bom',653);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_REOPEN','BOM reopen','Executed when a BOM is re-open','bom',653);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_DELETE','BOM deleted','Executed when a BOM deleted','bom',654);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_DELETE','BOM deleted','Executed when a BOM deleted','bom',654);
|
||||||
|
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_VALIDATE','MO validated','Executed when a MO is validated','bom',660);
|
DELETE FROM llx_c_action_trigger where code LIKE 'MO_%';
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_PRODUCED','MO produced','Executed when a MO is produced','bom',661);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MRP_MO_VALIDATE','MO validated','Executed when a MO is validated','bom',660);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_DELETE','MO deleted','Executed when a MO is deleted','bom',662);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MRP_MO_PRODUCED','MO produced','Executed when a MO is produced','bom',661);
|
||||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MO_CANCEL','MO canceled','Executed when a MO is canceled','bom',663);
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MRP_MO_DELETE','MO deleted','Executed when a MO is deleted','bom',662);
|
||||||
|
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MRP_MO_CANCEL','MO canceled','Executed when a MO is canceled','bom',663);
|
||||||
|
|
||||||
ALTER TABLE llx_comment ADD COLUMN fk_user_modif integer DEFAULT NULL;
|
ALTER TABLE llx_comment ADD COLUMN fk_user_modif integer DEFAULT NULL;
|
||||||
|
|
||||||
|
|||||||
@ -35,7 +35,7 @@ create table llx_product_price
|
|||||||
price_min_ttc double(24,8) default NULL,
|
price_min_ttc double(24,8) default NULL,
|
||||||
price_base_type varchar(3) DEFAULT 'HT',
|
price_base_type varchar(3) DEFAULT 'HT',
|
||||||
default_vat_code varchar(10), -- Same code than into table llx_c_tva (but no constraints). Should be used in priority to find default vat, npr, localtaxes for product.
|
default_vat_code varchar(10), -- Same code than into table llx_c_tva (but no constraints). Should be used in priority to find default vat, npr, localtaxes for product.
|
||||||
tva_tx double(6,3) NOT NULL,
|
tva_tx double(6,3) DEFAULT 0 NOT NULL, -- Used only when option PRODUIT_MULTIPRICES_USE_VAT_PER_LEVEL is on (not supported)
|
||||||
recuperableonly integer NOT NULL DEFAULT '0',
|
recuperableonly integer NOT NULL DEFAULT '0',
|
||||||
localtax1_tx double(6,3) DEFAULT 0,
|
localtax1_tx double(6,3) DEFAULT 0,
|
||||||
localtax1_type varchar(10) NOT NULL DEFAULT '0',
|
localtax1_type varchar(10) NOT NULL DEFAULT '0',
|
||||||
|
|||||||
@ -110,9 +110,9 @@ BOM_UNVALIDATEInDolibarr=BOM unvalidated
|
|||||||
BOM_CLOSEInDolibarr=BOM disabled
|
BOM_CLOSEInDolibarr=BOM disabled
|
||||||
BOM_REOPENInDolibarr=BOM reopen
|
BOM_REOPENInDolibarr=BOM reopen
|
||||||
BOM_DELETEInDolibarr=BOM deleted
|
BOM_DELETEInDolibarr=BOM deleted
|
||||||
MO_VALIDATEInDolibarr=MO validated
|
MRP_MO_VALIDATEInDolibarr=MO validated
|
||||||
MO_PRODUCEDInDolibarr=MO produced
|
MRP_MO_PRODUCEDInDolibarr=MO produced
|
||||||
MO_DELETEInDolibarr=MO deleted
|
MRP_MO_DELETEInDolibarr=MO deleted
|
||||||
##### End agenda events #####
|
##### End agenda events #####
|
||||||
AgendaModelModule=Document templates for event
|
AgendaModelModule=Document templates for event
|
||||||
DateActionStart=Start date
|
DateActionStart=Start date
|
||||||
|
|||||||
@ -223,6 +223,7 @@ ErrorSearchCriteriaTooSmall=Search criteria too small.
|
|||||||
ErrorObjectMustHaveStatusActiveToBeDisabled=Objects must have status 'Active' to be disabled
|
ErrorObjectMustHaveStatusActiveToBeDisabled=Objects must have status 'Active' to be disabled
|
||||||
ErrorObjectMustHaveStatusDraftOrDisabledToBeActivated=Objects must have status 'Draft' or 'Disabled' to be enabled
|
ErrorObjectMustHaveStatusDraftOrDisabledToBeActivated=Objects must have status 'Draft' or 'Disabled' to be enabled
|
||||||
ErrorNoFieldWithAttributeShowoncombobox=No fields has property 'showoncombobox' into definition of object '%s'. No way to show the combolist.
|
ErrorNoFieldWithAttributeShowoncombobox=No fields has property 'showoncombobox' into definition of object '%s'. No way to show the combolist.
|
||||||
|
ErrorFieldRequiredForProduct=Field '%s' is required for product %s
|
||||||
# Warnings
|
# Warnings
|
||||||
WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup.
|
WarningParamUploadMaxFileSizeHigherThanPostMaxSize=Your PHP parameter upload_max_filesize (%s) is higher than PHP parameter post_max_size (%s). This is not a consistent setup.
|
||||||
WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
|
WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
|
||||||
|
|||||||
@ -741,7 +741,7 @@ NotSupported=Not supported
|
|||||||
RequiredField=Required field
|
RequiredField=Required field
|
||||||
Result=Result
|
Result=Result
|
||||||
ToTest=Test
|
ToTest=Test
|
||||||
ValidateBefore=Card must be validated before using this feature
|
ValidateBefore=Item must be validated before using this feature
|
||||||
Visibility=Visibility
|
Visibility=Visibility
|
||||||
Totalizable=Totalizable
|
Totalizable=Totalizable
|
||||||
TotalizableDesc=This field is totalizable in list
|
TotalizableDesc=This field is totalizable in list
|
||||||
@ -1012,3 +1012,4 @@ ContactDefault_propal=Proposal
|
|||||||
ContactDefault_supplier_proposal=Supplier Proposal
|
ContactDefault_supplier_proposal=Supplier Proposal
|
||||||
ContactDefault_ticketsup=Ticket
|
ContactDefault_ticketsup=Ticket
|
||||||
ContactAddedAutomatically=Contact added from contact thirdparty roles
|
ContactAddedAutomatically=Contact added from contact thirdparty roles
|
||||||
|
More=More
|
||||||
|
|||||||
@ -44,8 +44,8 @@ StatusMOProduced=Produced
|
|||||||
QtyFrozen=Frozen Qty
|
QtyFrozen=Frozen Qty
|
||||||
QuantityFrozen=Frozen Quantity
|
QuantityFrozen=Frozen Quantity
|
||||||
QuantityConsumedInvariable=When this flag is set, the quantity consumed is always the value defined and is not relative to the quantity produced.
|
QuantityConsumedInvariable=When this flag is set, the quantity consumed is always the value defined and is not relative to the quantity produced.
|
||||||
DisableStockChange=Disable stock change
|
DisableStockChange=Stock change disabled
|
||||||
DisableStockChangeHelp=When this flag is set, there is no stock change on this product, whatever is the quantity produced
|
DisableStockChangeHelp=When this flag is set, there is no stock change on this product, whatever is the quantity consumed
|
||||||
BomAndBomLines=Bills Of Material and lines
|
BomAndBomLines=Bills Of Material and lines
|
||||||
BOMLine=Line of BOM
|
BOMLine=Line of BOM
|
||||||
WarehouseForProduction=Warehouse for production
|
WarehouseForProduction=Warehouse for production
|
||||||
@ -58,4 +58,8 @@ ConsumeAndProduceAll=Consume and Produce All
|
|||||||
Manufactured=Manufactured
|
Manufactured=Manufactured
|
||||||
TheProductXIsAlreadyTheProductToProduce=The product to add is already the product to produce.
|
TheProductXIsAlreadyTheProductToProduce=The product to add is already the product to produce.
|
||||||
ForAQuantityOf1=For a quantity to produce of 1
|
ForAQuantityOf1=For a quantity to produce of 1
|
||||||
ConfirmValidateMo=Are you sure you want to validate this Manufacturing Order?
|
ConfirmValidateMo=Are you sure you want to validate this Manufacturing Order?
|
||||||
|
ConfirmProductionDesc=By clicking on '%s', you will validate the consumption and/or production for the quantities set. This will also update the stock and record stock movements.
|
||||||
|
ProductionForRefAndDate=Production %s - %s
|
||||||
|
AutoCloseMO=Close automatically the Manufacturing Order if quantities to consume and to produce are reached
|
||||||
|
NoStockChangeOnServices=No stock change on services
|
||||||
@ -56,7 +56,7 @@ Notify_BILL_SUPPLIER_PAYED=Vendor invoice paid
|
|||||||
Notify_BILL_SUPPLIER_SENTBYMAIL=Vendor invoice sent by mail
|
Notify_BILL_SUPPLIER_SENTBYMAIL=Vendor invoice sent by mail
|
||||||
Notify_BILL_SUPPLIER_CANCELED=Vendor invoice cancelled
|
Notify_BILL_SUPPLIER_CANCELED=Vendor invoice cancelled
|
||||||
Notify_CONTRACT_VALIDATE=Contract validated
|
Notify_CONTRACT_VALIDATE=Contract validated
|
||||||
Notify_FICHEINTER_VALIDATE=Intervention validated
|
Notify_FICHINTER_VALIDATE=Intervention validated
|
||||||
Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
|
Notify_FICHINTER_ADD_CONTACT=Added contact to Intervention
|
||||||
Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
|
Notify_FICHINTER_SENTBYMAIL=Intervention sent by mail
|
||||||
Notify_SHIPPING_VALIDATE=Shipping validated
|
Notify_SHIPPING_VALIDATE=Shipping validated
|
||||||
@ -272,4 +272,4 @@ WEBSITE_KEYWORDS=Keywords
|
|||||||
LinesToImport=Lines to import
|
LinesToImport=Lines to import
|
||||||
|
|
||||||
MemoryUsage=Memory usage
|
MemoryUsage=Memory usage
|
||||||
RequestDuration=Duration of request
|
RequestDuration=Duration of request
|
||||||
|
|||||||
@ -624,7 +624,7 @@ if ($id > 0)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
print '<td class="nowrap">';
|
print '<td class="nowrap">';
|
||||||
print $langs->trans("LoanAccountancyCapitalCode");
|
print $langs->trans("LoanAccountancyInsuranceCode");
|
||||||
print '</td><td>';
|
print '</td><td>';
|
||||||
|
|
||||||
if (!empty($conf->accounting->enabled))
|
if (!empty($conf->accounting->enabled))
|
||||||
|
|||||||
@ -505,7 +505,7 @@ class Mo extends CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Erase and update the line to produce
|
* Erase and update the line to produce.
|
||||||
*
|
*
|
||||||
* @param User $user User that modifies
|
* @param User $user User that modifies
|
||||||
* @return int <0 if KO, >0 if OK
|
* @return int <0 if KO, >0 if OK
|
||||||
@ -557,7 +557,11 @@ class Mo extends CommonObject
|
|||||||
$moline = new MoLine($this->db);
|
$moline = new MoLine($this->db);
|
||||||
|
|
||||||
$moline->fk_mo = $this->id;
|
$moline->fk_mo = $this->id;
|
||||||
$moline->qty = round($line->qty * $this->qty / $bom->efficiency, 2);
|
if ($line->qty_frozen) {
|
||||||
|
$moline->qty = $line->qty; // Qty to consume does not depends on quantity to produce
|
||||||
|
} else {
|
||||||
|
$moline->qty = round($line->qty * $this->qty / $bom->efficiency, 2);
|
||||||
|
}
|
||||||
if ($moline->qty <= 0) {
|
if ($moline->qty <= 0) {
|
||||||
$error++;
|
$error++;
|
||||||
$this->error = "BadValueForquantityToConsume";
|
$this->error = "BadValueForquantityToConsume";
|
||||||
@ -980,10 +984,16 @@ class Mo extends CommonObject
|
|||||||
global $langs;
|
global $langs;
|
||||||
//$langs->load("mrp");
|
//$langs->load("mrp");
|
||||||
$this->labelStatus[self::STATUS_DRAFT] = $langs->trans('Draft');
|
$this->labelStatus[self::STATUS_DRAFT] = $langs->trans('Draft');
|
||||||
$this->labelStatus[self::STATUS_VALIDATED] = $langs->trans('Validated');
|
$this->labelStatus[self::STATUS_VALIDATED] = $langs->trans('Validated').' ('.$langs->trans("ToProduce").')';
|
||||||
$this->labelStatus[self::STATUS_INPROGRESS] = $langs->trans('InProgress');
|
$this->labelStatus[self::STATUS_INPROGRESS] = $langs->trans('InProgress');
|
||||||
$this->labelStatus[self::STATUS_PRODUCED] = $langs->trans('StatusMOProduced');
|
$this->labelStatus[self::STATUS_PRODUCED] = $langs->trans('StatusMOProduced');
|
||||||
$this->labelStatus[self::STATUS_CANCELED] = $langs->trans('Canceled');
|
$this->labelStatus[self::STATUS_CANCELED] = $langs->trans('Canceled');
|
||||||
|
|
||||||
|
$this->labelStatusShort[self::STATUS_DRAFT] = $langs->trans('Draft');
|
||||||
|
$this->labelStatusShort[self::STATUS_VALIDATED] = $langs->trans('Validated');
|
||||||
|
$this->labelStatusShort[self::STATUS_INPROGRESS] = $langs->trans('InProgress');
|
||||||
|
$this->labelStatusShort[self::STATUS_PRODUCED] = $langs->trans('StatusMOProduced');
|
||||||
|
$this->labelStatusShort[self::STATUS_CANCELED] = $langs->trans('Canceled');
|
||||||
}
|
}
|
||||||
|
|
||||||
$statusType = 'status'.$status;
|
$statusType = 'status'.$status;
|
||||||
@ -992,7 +1002,7 @@ class Mo extends CommonObject
|
|||||||
if ($status == self::STATUS_PRODUCED) $statusType = 'status5';
|
if ($status == self::STATUS_PRODUCED) $statusType = 'status5';
|
||||||
if ($status == self::STATUS_CANCELED) $statusType = 'status6';
|
if ($status == self::STATUS_CANCELED) $statusType = 'status6';
|
||||||
|
|
||||||
return dolGetStatus($this->labelStatus[$status], $this->labelStatus[$status], '', $statusType, $mode);
|
return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1448,6 +1458,24 @@ class MoLine extends CommonObjectLine
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get list of lines linked to current line for a defined role
|
||||||
|
*
|
||||||
|
* @param string $role Get lines linked to current line with the selected role ('consumed', 'produced', ...)
|
||||||
|
* @return array Array of lines
|
||||||
|
*/
|
||||||
|
public function fetchLinesLinked($role) {
|
||||||
|
$array = array();
|
||||||
|
|
||||||
|
$sql = 'SELECT rowid, qty ';
|
||||||
|
$sql .= $this->getFieldList();
|
||||||
|
$sql .= ' FROM '.MAIN_DB_PREFIX.$this->table_element.' as t';
|
||||||
|
if (isset($this->ismultientitymanaged) && $this->ismultientitymanaged == 1) $sql .= ' WHERE t.entity IN ('.getEntity($this->table_element).')';
|
||||||
|
else $sql .= ' WHERE 1 = 1';
|
||||||
|
|
||||||
|
return $array;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update object into database
|
* Update object into database
|
||||||
*
|
*
|
||||||
|
|||||||
@ -117,8 +117,6 @@ $upload_dir = $conf->mrp->multidir_output[isset($object->entity) ? $object->enti
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
*
|
|
||||||
* Put here all code to do according to value of "action" parameter
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$parameters = array();
|
$parameters = array();
|
||||||
|
|||||||
@ -47,11 +47,13 @@ require '../main.inc.php';
|
|||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formcompany.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formfile.class.php';
|
||||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
|
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/product/class/product.class.php';
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
|
||||||
dol_include_once('/mrp/class/mo.class.php');
|
dol_include_once('/mrp/class/mo.class.php');
|
||||||
dol_include_once('/mrp/lib/mrp_mo.lib.php');
|
dol_include_once('/mrp/lib/mrp_mo.lib.php');
|
||||||
|
|
||||||
// Load translation files required by the page
|
// Load translation files required by the page
|
||||||
$langs->loadLangs(array("mrp", "other"));
|
$langs->loadLangs(array("mrp", "stocks", "other"));
|
||||||
|
|
||||||
// Get parameters
|
// Get parameters
|
||||||
$id = GETPOST('id', 'int');
|
$id = GETPOST('id', 'int');
|
||||||
@ -103,8 +105,6 @@ $permissiontoproduce = $permissiontoadd;
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Actions
|
* Actions
|
||||||
*
|
|
||||||
* Put here all code to do according to value of "action" parameter
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
$parameters = array();
|
$parameters = array();
|
||||||
@ -120,7 +120,7 @@ if (empty($reshook))
|
|||||||
if (empty($backtopage) || ($cancel && empty($id))) {
|
if (empty($backtopage) || ($cancel && empty($id))) {
|
||||||
//var_dump($backurlforlist);exit;
|
//var_dump($backurlforlist);exit;
|
||||||
if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) $backtopage = $backurlforlist;
|
if (empty($id) && (($action != 'add' && $action != 'create') || $cancel)) $backtopage = $backurlforlist;
|
||||||
else $backtopage = DOL_URL_ROOT.'/mrp/mo_card.php?id='.($id > 0 ? $id : '__ID__');
|
else $backtopage = DOL_URL_ROOT.'/mrp/mo_production.php?id='.($id > 0 ? $id : '__ID__');
|
||||||
}
|
}
|
||||||
$triggermodname = 'MRP_MO_MODIFY'; // Name of trigger action code to execute when we modify record
|
$triggermodname = 'MRP_MO_MODIFY'; // Name of trigger action code to execute when we modify record
|
||||||
|
|
||||||
@ -150,6 +150,89 @@ if (empty($reshook))
|
|||||||
{
|
{
|
||||||
$object->setProject(GETPOST('projectid', 'int'));
|
$object->setProject(GETPOST('projectid', 'int'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($action == 'confirm_consumeandproduceall') {
|
||||||
|
$db->begin();
|
||||||
|
|
||||||
|
// Process line to consume
|
||||||
|
foreach($object->lines as $line) {
|
||||||
|
if ($line->role == 'toconsume') {
|
||||||
|
$tmpproduct = new Product($db);
|
||||||
|
$tmpproduct->fetch($line->fk_product);
|
||||||
|
|
||||||
|
$i=1;
|
||||||
|
while (GETPOSTISSET('qty-'.$line->id.'-'.$i)) {
|
||||||
|
// Check warehouse is set if we should have to
|
||||||
|
if (GETPOST('idwarehouse-'.$line->id.'-'.$i)) {
|
||||||
|
if (! (GETPOST('idwarehouse-'.$line->id.'-'.$i) > 0)) {
|
||||||
|
$langs->load("errors");
|
||||||
|
setEventMessages($langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Warehouse"), $tmpproduct->ref), null, 'errors');
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
if ($tmpproduct->status_batch && (! GETPOST('batch-'.$line->id.'-'.$i))) {
|
||||||
|
$langs->load("errors");
|
||||||
|
setEventMessages($langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Batch"), $tmpproduct->ref), null, 'errors');
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process line to produce
|
||||||
|
foreach($object->lines as $line) {
|
||||||
|
if ($line->role == 'toproduce') {
|
||||||
|
$tmpproduct = new Product($db);
|
||||||
|
$tmpproduct->fetch($line->fk_product);
|
||||||
|
|
||||||
|
$i=1;
|
||||||
|
while (GETPOSTISSET('qtytoproduce-'.$line->id.'-'.$i)) {
|
||||||
|
// Check warehouse is set if we should have to
|
||||||
|
if (GETPOST('idwarehousetoproduce-'.$line->id.'-'.$i)) {
|
||||||
|
if (! (GETPOST('idwarehousetoproduce-'.$line->id.'-'.$i) > 0)) {
|
||||||
|
$langs->load("errors");
|
||||||
|
setEventMessages($langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Warehouse"), $tmpproduct->ref), null, 'errors');
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
if ($tmpproduct->status_batch && (! GETPOST('batchtoproduce-'.$line->id.'-'.$i))) {
|
||||||
|
$langs->load("errors");
|
||||||
|
setEventMessages($langs->trans("ErrorFieldRequiredForProduct", $langs->transnoentitiesnoconv("Batch"), $tmpproduct->ref), null, 'errors');
|
||||||
|
$error++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (! $error) {
|
||||||
|
// Update status of MO
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($error) {
|
||||||
|
$action = str_replace('confirm_', '', $action);
|
||||||
|
$db->rollback();
|
||||||
|
} else {
|
||||||
|
$db->commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -162,6 +245,7 @@ if (empty($reshook))
|
|||||||
$form = new Form($db);
|
$form = new Form($db);
|
||||||
$formfile = new FormFile($db);
|
$formfile = new FormFile($db);
|
||||||
$formproject = new FormProjets($db);
|
$formproject = new FormProjets($db);
|
||||||
|
$formproduct = new FormProduct($db);
|
||||||
|
|
||||||
llxHeader('', $langs->trans('Mo'), '');
|
llxHeader('', $langs->trans('Mo'), '');
|
||||||
|
|
||||||
@ -306,48 +390,86 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
|
|
||||||
dol_fiche_end();
|
dol_fiche_end();
|
||||||
|
|
||||||
print '<div class="tabsAction">';
|
|
||||||
|
|
||||||
$parameters = array();
|
if (! in_array($action, array('consume', 'produce', 'consumeandproduceall')))
|
||||||
// Note that $action and $object may be modified by hook
|
{
|
||||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action);
|
print '<div class="tabsAction">';
|
||||||
if (empty($reshook)) {
|
|
||||||
// Consume
|
|
||||||
|
|
||||||
if ($object->status == Mo::STATUS_VALIDATED || $object->status == Mo::STATUS_INPROGRESS) {
|
$parameters = array();
|
||||||
if ($permissiontoproduce) {
|
// Note that $action and $object may be modified by hook
|
||||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=consume">'.$langs->trans('Consume').'</a>';
|
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action);
|
||||||
|
if (empty($reshook)) {
|
||||||
|
// Consume
|
||||||
|
|
||||||
|
if ($object->status == Mo::STATUS_VALIDATED || $object->status == Mo::STATUS_INPROGRESS) {
|
||||||
|
if ($permissiontoproduce) {
|
||||||
|
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=consume">'.$langs->trans('Consume').'</a>';
|
||||||
|
} else {
|
||||||
|
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans('Consume').'</a>';
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans('Consume').'</a>';
|
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("ValidateBefore").'">'.$langs->trans('Consume').'</a>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Produce
|
||||||
|
if ($object->status == Mo::STATUS_VALIDATED || $object->status == Mo::STATUS_INPROGRESS) {
|
||||||
|
if ($permissiontoproduce) {
|
||||||
|
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=produce">'.$langs->trans('Produce').'</a>';
|
||||||
|
} else {
|
||||||
|
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans('Produce').'</a>';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("ValidateBefore").'">'.$langs->trans('Produce').'</a>';
|
||||||
|
}
|
||||||
|
|
||||||
|
// ConsumeAndProduceAll
|
||||||
|
if ($object->status == Mo::STATUS_VALIDATED || $object->status == Mo::STATUS_INPROGRESS) {
|
||||||
|
if ($permissiontoproduce) {
|
||||||
|
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=consumeandproduceall">'.$langs->trans('ConsumeAndProduceAll').'</a>';
|
||||||
|
} else {
|
||||||
|
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans('ConsumeAndProduceAll').'</a>';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("ValidateBefore").'">'.$langs->trans('ConsumeAndProduceAll').'</a>';
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("ValidateFirst").'">'.$langs->trans('Consume').'</a>';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Produce
|
print '</div>';
|
||||||
if ($object->status == Mo::STATUS_VALIDATED || $object->status == Mo::STATUS_INPROGRESS) {
|
|
||||||
if ($permissiontoproduce) {
|
|
||||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=produce">'.$langs->trans('Produce').'</a>';
|
|
||||||
} else {
|
|
||||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans('Produce').'</a>';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("ValidateFirst").'">'.$langs->trans('Produce').'</a>';
|
|
||||||
}
|
|
||||||
|
|
||||||
// ConsumeAndProduceAll
|
|
||||||
if ($object->status == Mo::STATUS_VALIDATED || $object->status == Mo::STATUS_INPROGRESS) {
|
|
||||||
if ($permissiontoproduce) {
|
|
||||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=consumeandproduceall">'.$langs->trans('ConsumeAndProduceAll').'</a>';
|
|
||||||
} else {
|
|
||||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("NotEnoughPermissions").'">'.$langs->trans('ConsumeAndProduceAll').'</a>';
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.$langs->trans("ValidateFirst").'">'.$langs->trans('ConsumeAndProduceAll').'</a>';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
print '</div>';
|
if (in_array($action, array('consume', 'produce', 'consumeandproduceall')))
|
||||||
|
{
|
||||||
|
print '<form method="POST" action="'.$_SERVER["PHP_SELF"].'">';
|
||||||
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
|
print '<input type="hidden" name="action" value="confirm_'.$action.'">';
|
||||||
|
print '<input type="hidden" name="backtopage" value="'.$backtopage.'">';
|
||||||
|
print '<input type="hidden" name="id" value="'.$id.'">';
|
||||||
|
|
||||||
|
if ($action == 'consume')
|
||||||
|
{
|
||||||
|
print $langs->trans("FeatureNotYetAvailable");
|
||||||
|
}
|
||||||
|
if ($action == 'produce')
|
||||||
|
{
|
||||||
|
print $langs->trans("FeatureNotYetAvailable");
|
||||||
|
}
|
||||||
|
if ($action == 'consumeandproduceall')
|
||||||
|
{
|
||||||
|
$defaultstockmovementlabel = $langs->trans("ProductionForRefAndDate", $object->ref, dol_print_date(dol_now(), 'standard'));
|
||||||
|
$defaultstockmovementcode = $object->ref.'_'.dol_print_date(dol_now(), 'dayhourlog');
|
||||||
|
|
||||||
|
print '<div class="center">';
|
||||||
|
print '<span class="opacitymedium hideonsmartphone">'.$langs->trans("ConfirmProductionDesc", $langs->transnoentitiesnoconv("Confirm")).'<br></span>';
|
||||||
|
print $langs->trans("MovementLabel").': <input type="text" class="minwidth300" name="label" value="'.$defaultstockmovementlabel.'"> ';
|
||||||
|
print $langs->trans("InventoryCode").': <input type="text" class="minwidth200" name="inventorycode" value="'.$defaultstockmovementcode.'"><br><br>';
|
||||||
|
print '<input type="checkbox" name="autoclose" value="1" checked="checked"> '.$langs->trans("AutoCloseMO").'<br>';
|
||||||
|
print '<input class="button" type="submit" value="'.$langs->trans("Confirm").'" name="confirm">';
|
||||||
|
print ' ';
|
||||||
|
print '<input class="button" type="submit" value="'.$langs->trans("Cancel").'" name="cancel">';
|
||||||
|
print '</div>';
|
||||||
|
print '<br>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -360,17 +482,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
//$result = $object->getLinesArray();
|
//$result = $object->getLinesArray();
|
||||||
$object->fetchLines();
|
$object->fetchLines();
|
||||||
|
|
||||||
print ' <form name="addproduct" id="addproduct" action="'.$_SERVER["PHP_SELF"].'?id='.$object->id.(($action != 'editline') ? '#addline' : '#line_'.GETPOST('lineid', 'int')).'" method="POST">
|
|
||||||
<input type="hidden" name="token" value="' . $_SESSION ['newtoken'].'">
|
|
||||||
<input type="hidden" name="action" value="' . (($action != 'editline') ? 'addline' : 'updateline').'">
|
|
||||||
<input type="hidden" name="mode" value="">
|
|
||||||
<input type="hidden" name="id" value="' . $object->id.'">
|
|
||||||
';
|
|
||||||
|
|
||||||
if (!empty($conf->use_javascript_ajax) && $object->status == 0) {
|
|
||||||
include DOL_DOCUMENT_ROOT.'/core/tpl/ajaxrow.tpl.php';
|
|
||||||
}
|
|
||||||
|
|
||||||
print '<div class="fichecenter">';
|
print '<div class="fichecenter">';
|
||||||
print '<div class="fichehalfleft">';
|
print '<div class="fichehalfleft">';
|
||||||
print '<div class="clearboth"></div>';
|
print '<div class="clearboth"></div>';
|
||||||
@ -384,27 +495,77 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
print '<td>'.$langs->trans("Product").'</td>';
|
print '<td>'.$langs->trans("Product").'</td>';
|
||||||
print '<td>'.$langs->trans("Qty").'</td>';
|
print '<td>'.$langs->trans("Qty").'</td>';
|
||||||
print '<td>'.$langs->trans("QtyAlreadyConsumed").'</td>';
|
print '<td>'.$langs->trans("QtyAlreadyConsumed").'</td>';
|
||||||
/*print '<td>'.$langs->trans("Date").'</td>';
|
print '<td></td>';
|
||||||
print '<td>'.$langs->trans("Batch").'</td>';*/
|
if ($conf->productbatch->enabled) {
|
||||||
|
print '<td>';
|
||||||
|
if ($action == 'consumeandproduceall') print $langs->trans("Batch");
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
if (!empty($object->lines))
|
if (!empty($object->lines))
|
||||||
{
|
{
|
||||||
foreach($object->lines as $line) {
|
foreach($object->lines as $line) {
|
||||||
if ($line->role == 'toconsume') {
|
if ($line->role == 'toconsume') {
|
||||||
print '<tr>';
|
|
||||||
$tmpproduct = new Product($db);
|
$tmpproduct = new Product($db);
|
||||||
$tmpproduct->fetch($line->fk_product);
|
$tmpproduct->fetch($line->fk_product);
|
||||||
print '<td>'.$tmpproduct->getNomUrl(1).'</td>';
|
|
||||||
print '<td>'.$line->qty.'</td>';
|
$arrayoflines = $line->fetchLinesLinked('consumed');
|
||||||
$alreadyconsumed = 0;
|
$alreadyconsumed = 0;
|
||||||
|
foreach($arrayoflines as $line2) {
|
||||||
|
$alreadyconsumed += $line2->qty;
|
||||||
|
}
|
||||||
|
|
||||||
|
print '<tr>';
|
||||||
|
print '<td>'.$tmpproduct->getNomUrl(1).'</td>';
|
||||||
|
print '<td>';
|
||||||
|
$help = '';
|
||||||
|
if ($line->qty_frozen) $help.=($help ? '<br>' : '').'<strong>'.$langs->trans("QuantityFrozen").'</strong>: '.yn(1).' ('.$langs->trans("QuantityConsumedInvariable").')';
|
||||||
|
if ($line->disable_stock_change) $help.=($help ? '<br>' : '').'<strong>'.$langs->trans("DisableStockChange").'</strong>: '.yn(1).' ('.(($tmpproduct->type == Product::TYPE_SERVICE && empty($conf->global->STOCK_SUPPORTS_SERVICES)) ? $langs->trans("NoStockChangeOnServices") : $langs->trans("DisableStockChangeHelp")).')';
|
||||||
|
if ($help) {
|
||||||
|
print $form->textwithpicto($line->qty, $help);
|
||||||
|
} else {
|
||||||
|
print $line->qty;
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
print '<td>'.$alreadyconsumed.'</td>';
|
print '<td>'.$alreadyconsumed.'</td>';
|
||||||
/*print '<td>'.'</td>';
|
print '<td></td>'; // Warehouse
|
||||||
print '<td>'.'</td>';*/
|
if ($conf->productbatch->enabled) {
|
||||||
|
print '<td></td>'; // Lot
|
||||||
|
}
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
// Show detailed of already consumed
|
// Show detailed of already consumed with js code to collapse
|
||||||
//$arrayoflines = $line->fetchLinesLinked('consumed');
|
//$arrayoflines = $line->fetchLinesLinked('consumed');
|
||||||
|
|
||||||
|
if ($action == 'consumeandproduceall') {
|
||||||
|
$i = 1;
|
||||||
|
print '<tr>';
|
||||||
|
print '<td>'.$langs->trans("ToConsume").'</td>';
|
||||||
|
print '<td><input type="text" class="width50" name="qty-'.$line->id.'-'.$i.'" value="'.(GETPOSTISSET('qty-'.$line->id.'-'.$i) ? GETPOST('qty-'.$line->id.'-'.$i) : max(0, $line->qty - $alreadyconsumed)).'"></td>';
|
||||||
|
print '<td></td>';
|
||||||
|
print '<td>';
|
||||||
|
if ($tmpproduct->type == Product::TYPE_PRODUCT || !empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
|
||||||
|
if (empty($line->disable_stock_change)) {
|
||||||
|
$preselected = (GETPOSTISSET('idwarehouse-'.$line->id.'-'.$i) ? GETPOST('idwarehouse-'.$line->id.'-'.$i) : 'ifone');
|
||||||
|
print $formproduct->selectWarehouses($preselected, 'idwarehouse-'.$line->id.'-'.$i, '', 1, 0, $line->fk_product, '', 1);
|
||||||
|
} else {
|
||||||
|
print '<span class="opacitymedium">'.$langs->trans("DisableStockChange").'</span>';
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
print '<span class="opacitymedium">'.$langs->trans("NoStockChangeOnServices").'</span>';
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
if ($conf->productbatch->enabled) {
|
||||||
|
print '<td>';
|
||||||
|
if ($tmpproduct->status_batch) {
|
||||||
|
$preselected = (GETPOSTISSET('batch-'.$line->id.'-'.$i) ? GETPOST('batch-'.$line->id.'-'.$i) : '');
|
||||||
|
print '<input type="text" class="width50" name="batch-'.$line->id.'-'.$i.'" value="'.$preselected.'">';
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
print '</tr>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -443,27 +604,58 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
print '<td>'.$langs->trans("Product").'</td>';
|
print '<td>'.$langs->trans("Product").'</td>';
|
||||||
print '<td>'.$langs->trans("Qty").'</td>';
|
print '<td>'.$langs->trans("Qty").'</td>';
|
||||||
print '<td>'.$langs->trans("QtyAlreadyProduced").'</td>';
|
print '<td>'.$langs->trans("QtyAlreadyProduced").'</td>';
|
||||||
/*print '<td>'.$langs->trans("Date").'</td>';
|
print '<td></td>';
|
||||||
print '<td>'.$langs->trans("Batch").'</td>';*/
|
if ($conf->productbatch->enabled) {
|
||||||
|
print '<td>';
|
||||||
|
if ($action == 'consumeandproduceall') print $langs->trans("Batch");
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
if (!empty($object->lines))
|
if (!empty($object->lines))
|
||||||
{
|
{
|
||||||
foreach($object->lines as $line) {
|
foreach($object->lines as $line) {
|
||||||
if ($line->role == 'toproduce') {
|
if ($line->role == 'toproduce') {
|
||||||
print '<tr>';
|
|
||||||
$tmpproduct = new Product($db);
|
$tmpproduct = new Product($db);
|
||||||
$tmpproduct->fetch($line->fk_product);
|
$tmpproduct->fetch($line->fk_product);
|
||||||
|
|
||||||
|
$arrayoflines = $line->fetchLinesLinked('produced');
|
||||||
|
$alreadyproduced = 0;
|
||||||
|
foreach($arrayoflines as $line2) {
|
||||||
|
$alreadyproduced += $line2->qty;
|
||||||
|
}
|
||||||
|
|
||||||
|
print '<tr>';
|
||||||
print '<td>'.$tmpproduct->getNomUrl(1).'</td>';
|
print '<td>'.$tmpproduct->getNomUrl(1).'</td>';
|
||||||
print '<td>'.$line->qty.'</td>';
|
print '<td>'.$line->qty.'</td>';
|
||||||
$alreadyconsumed = 0;
|
print '<td>'.$alreadyproduced.'</td>';
|
||||||
print '<td>'.$alreadyconsumed.'</td>';
|
print '<td></td>'; // Warehouse
|
||||||
/*print '<td>'.'</td>';
|
if ($conf->productbatch->enabled) {
|
||||||
print '<td>'.'</td>';*/
|
print '<td></td>'; // Lot
|
||||||
|
}
|
||||||
print '</tr>';
|
print '</tr>';
|
||||||
|
|
||||||
// Show detailed of already consumed
|
if ($action == 'consumeandproduceall') {
|
||||||
//$arrayoflines = $line->fetchLinesLinked('consumed');
|
print '<tr>';
|
||||||
|
print '<td>'.$langs->trans("ToProduce").'</td>';
|
||||||
|
print '<td><input type="text" class="width50" name="qtytoproduce-'.$line->id.'-'.$i.'" value="'.(GETPOSTISSET('qtytoproduce-'.$line->id.'-'.$i) ? GETPOST('qtytoproduce-'.$line->id.'-'.$i) : max(0, $line->qty - $alreadyproduced)).'"></td>';
|
||||||
|
print '<td></td>';
|
||||||
|
print '<td>';
|
||||||
|
if ($tmpproduct->type == Product::TYPE_PRODUCT || !empty($conf->global->STOCK_SUPPORTS_SERVICES)) {
|
||||||
|
$preselected = (GETPOSTISSET('idwarehousetoproduce-'.$line->id.'-'.$i) ? GETPOST('idwarehousetoproduce-'.$line->id.'-'.$i) : ($object->fk_warehouse > 0 ? $object->fk_warehouse : 'ifone'));
|
||||||
|
print $formproduct->selectWarehouses($preselected, 'idwarehousetoproduce-'.$line->id.'-'.$i, '', 1, 0, $line->fk_product, '', 1);
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
if ($conf->productbatch->enabled) {
|
||||||
|
print '<td>';
|
||||||
|
if ($tmpproduct->status_batch) {
|
||||||
|
$preselected = (GETPOSTISSET('batchtoproduce-'.$line->id.'-'.$i) ? GETPOST('batchtoproduce-'.$line->id.'-'.$i) : '');
|
||||||
|
print '<input type="text" class="width50" name="batchtoproduce-'.$line->id.'-'.$i.'" value="'.$preselected.'">';
|
||||||
|
}
|
||||||
|
print '</td>';
|
||||||
|
}
|
||||||
|
print '</tr>';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -473,66 +665,11 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
|
|
||||||
print '</div>';
|
print '</div>';
|
||||||
print '</div>';
|
print '</div>';
|
||||||
|
|
||||||
print "</form>\n";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (in_array($action, array('consume', 'produce', 'consumeandproduceall')))
|
||||||
// Buttons for actions
|
|
||||||
/*
|
|
||||||
if ($action != 'presend' && $action != 'editline') {
|
|
||||||
print '<div class="tabsAction">'."\n";
|
|
||||||
$parameters=array();
|
|
||||||
$reshook=$hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
|
||||||
if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
|
||||||
|
|
||||||
if (empty($reshook))
|
|
||||||
{
|
|
||||||
// Send
|
|
||||||
print '<a class="butAction" href="' . $_SERVER["PHP_SELF"] . '?id=' . $object->id . '&action=presend&mode=init#formmailbeforetitle">' . $langs->trans('SendMail') . '</a>'."\n";
|
|
||||||
|
|
||||||
// Modify
|
|
||||||
if (! empty($user->rights->mrp->write))
|
|
||||||
{
|
|
||||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=edit">'.$langs->trans("Modify").'</a>'."\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans("NotEnoughPermissions")).'">'.$langs->trans('Modify').'</a>'."\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clone
|
|
||||||
if (! empty($user->rights->mrp->write))
|
|
||||||
{
|
|
||||||
print '<div class="inline-block divButAction"><a class="butAction" href="' . $_SERVER['PHP_SELF'] . '?id=' . $object->id . '&socid=' . $object->socid . '&action=clone&object=order">' . $langs->trans("ToClone") . '</a></div>';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete (need delete permission, or if draft, just need create/modify permission)
|
|
||||||
if (! empty($user->rights->mrp->delete) || (! empty($object->fields['status']) && $object->status == $object::STATUS_DRAFT && ! empty($user->rights->mrp->write)))
|
|
||||||
{
|
|
||||||
print '<a class="butActionDelete" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=delete">'.$langs->trans('Delete').'</a>'."\n";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
print '<a class="butActionRefused classfortooltip" href="#" title="'.dol_escape_htmltag($langs->trans("NotEnoughPermissions")).'">'.$langs->trans('Delete').'</a>'."\n";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
print '</div>'."\n";
|
|
||||||
}*/
|
|
||||||
|
|
||||||
|
|
||||||
if ($action != 'presend')
|
|
||||||
{
|
{
|
||||||
print '<div class="fichecenter"><div class="fichehalfleft">';
|
print "</form>\n";
|
||||||
print '<a name="builddoc"></a>'; // ancre
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print '</div><div class="fichehalfright"><div class="ficheaddleft">';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
print '</div></div></div>';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -135,7 +135,7 @@ if ($action == 'convert')
|
|||||||
$newlevel=$level;
|
$newlevel=$level;
|
||||||
|
|
||||||
//print "$objectstatic->id $newprice, $price_base_type, $newvat, $newminprice, $newlevel, $newnpr<br>\n";
|
//print "$objectstatic->id $newprice, $price_base_type, $newvat, $newminprice, $newlevel, $newnpr<br>\n";
|
||||||
$retm=$objectstatic->updatePrice($newprice, $price_base_type, $user, $newvatratclean, $newminprice, $newlevel, $newnpr, 0, 0, $localtaxes_type, $newdefaultvatcode);
|
$retm=$objectstatic->updatePrice($newprice, $price_base_type, $user, $newvatrateclean, $newminprice, $newlevel, $newnpr, 0, 0, $localtaxes_type, $newdefaultvatcode);
|
||||||
if ($retm < 0)
|
if ($retm < 0)
|
||||||
{
|
{
|
||||||
$error++;
|
$error++;
|
||||||
|
|||||||
@ -1876,6 +1876,9 @@ class Product extends CommonObject
|
|||||||
if (empty($newminprice)) {
|
if (empty($newminprice)) {
|
||||||
$newminprice = 0;
|
$newminprice = 0;
|
||||||
}
|
}
|
||||||
|
if (empty($newminprice)) {
|
||||||
|
$newminprice=0;
|
||||||
|
}
|
||||||
|
|
||||||
// Check parameters
|
// Check parameters
|
||||||
if ($newvat == '') {
|
if ($newvat == '') {
|
||||||
@ -2677,7 +2680,7 @@ class Product extends CommonObject
|
|||||||
* Charge tableau des stats expedition client pour le produit/service
|
* Charge tableau des stats expedition client pour le produit/service
|
||||||
*
|
*
|
||||||
* @param int $socid Id societe pour filtrer sur une societe
|
* @param int $socid Id societe pour filtrer sur une societe
|
||||||
* @param string $filtrestatut Id statut pour filtrer sur un statut
|
* @param string $filtrestatut [=''] Ids order status separated by comma
|
||||||
* @param int $forVirtualStock Ignore rights filter for virtual stock calculation.
|
* @param int $forVirtualStock Ignore rights filter for virtual stock calculation.
|
||||||
* @param string $filterShipmentStatus [=''] Ids shipment status separated by comma
|
* @param string $filterShipmentStatus [=''] Ids shipment status separated by comma
|
||||||
* @return int <0 if KO, >0 if OK (Tableau des stats)
|
* @return int <0 if KO, >0 if OK (Tableau des stats)
|
||||||
|
|||||||
@ -265,32 +265,31 @@ if (empty($reshook))
|
|||||||
|
|
||||||
$extralabels = $extrafields->fetch_name_optionals_label("product_fournisseur_price");
|
$extralabels = $extrafields->fetch_name_optionals_label("product_fournisseur_price");
|
||||||
$extrafield_values = $extrafields->getOptionalsFromPost("product_fournisseur_price");
|
$extrafield_values = $extrafields->getOptionalsFromPost("product_fournisseur_price");
|
||||||
|
if (!empty($extrafield_values)) {
|
||||||
|
$resql = $db->query("SELECT fk_object FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields WHERE fk_object = " . $object->product_fourn_price_id);
|
||||||
|
// Insert a new extrafields row, if none exists
|
||||||
|
if ($db->num_rows($resql) != 1) {
|
||||||
|
$sql = "INSERT INTO " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields (fk_object, ";
|
||||||
|
foreach ($extrafield_values as $key => $value) {
|
||||||
|
$sql .= str_replace('options_', '', $key) . ', ';
|
||||||
|
}
|
||||||
|
$sql = substr($sql, 0, strlen($sql) - 2) . ") VALUES (" . $object->product_fourn_price_id . ", ";
|
||||||
|
foreach ($extrafield_values as $key => $value) {
|
||||||
|
$sql .= '"' . $value . '", ';
|
||||||
|
}
|
||||||
|
$sql = substr($sql, 0, strlen($sql) - 2) . ')';
|
||||||
|
} // else update the existing one
|
||||||
|
else {
|
||||||
|
$sql = "UPDATE " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields SET ";
|
||||||
|
foreach ($extrafield_values as $key => $value) {
|
||||||
|
$sql .= str_replace('options_', '', $key) . ' = "' . $value . '", ';
|
||||||
|
}
|
||||||
|
$sql = substr($sql, 0, strlen($sql) - 2) . ' WHERE fk_object = ' . $object->product_fourn_price_id;
|
||||||
|
}
|
||||||
|
|
||||||
$sql = "";
|
// Execute the sql command from above
|
||||||
$resql = $db->query("SELECT * FROM ".MAIN_DB_PREFIX."product_fournisseur_price_extrafields WHERE fk_object = ".$object->product_fourn_price_id);
|
$db->query($sql);
|
||||||
// Insert a new extrafields row, if none exists
|
}
|
||||||
if ($db->num_rows($resql) != 1) {
|
|
||||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."product_fournisseur_price_extrafields (fk_object, ";
|
|
||||||
foreach ($extrafield_values as $key => $value) {
|
|
||||||
$sql .= str_replace('options_', '', $key).', ';
|
|
||||||
}
|
|
||||||
$sql = substr($sql, 0, strlen($sql) - 2).") VALUES (".$object->product_fourn_price_id.", ";
|
|
||||||
foreach ($extrafield_values as $key => $value) {
|
|
||||||
$sql .= '"'.$value.'", ';
|
|
||||||
}
|
|
||||||
$sql = substr($sql, 0, strlen($sql) - 2).')';
|
|
||||||
}
|
|
||||||
// else update the existing one
|
|
||||||
else {
|
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."product_fournisseur_price_extrafields SET ";
|
|
||||||
foreach ($extrafield_values as $key => $value) {
|
|
||||||
$sql .= str_replace('options_', '', $key).' = "'.$value.'", ';
|
|
||||||
}
|
|
||||||
$sql = substr($sql, 0, strlen($sql) - 2).' WHERE fk_object = '.$object->product_fourn_price_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Execute the sql command from above
|
|
||||||
$db->query($sql);
|
|
||||||
|
|
||||||
$newprice = price2num(GETPOST("price", "alpha"));
|
$newprice = price2num(GETPOST("price", "alpha"));
|
||||||
|
|
||||||
@ -765,25 +764,36 @@ SCRIPT;
|
|||||||
print '</tr>';
|
print '</tr>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Extrafields
|
||||||
$extrafields->fetch_name_optionals_label("product_fournisseur_price");
|
$extrafields->fetch_name_optionals_label("product_fournisseur_price");
|
||||||
$extralabels = $extrafields->attributes["product_fournisseur_price"]['label'];
|
$extralabels = $extrafields->attributes["product_fournisseur_price"]['label'];
|
||||||
// Extrafields
|
$extrafield_values = $extrafields->getOptionalsFromPost("product_fournisseur_price");
|
||||||
$resql = $db->query("SELECT * FROM ".MAIN_DB_PREFIX."product_fournisseur_price_extrafields WHERE fk_object = ".$rowid);
|
|
||||||
if (!empty($extralabels)) {
|
if (!empty($extralabels)) {
|
||||||
if ($db->num_rows($resql) != 1) {
|
if (empty($rowid)) {
|
||||||
foreach ($extralabels as $key => $value) {
|
foreach ($extralabels as $key => $value) {
|
||||||
if (!empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && ($extrafields->attributes["product_fournisseur_price"]['list'][$key] == 1 || $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 3 || ($action == "update_price" && $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 4))) {
|
if (!empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && ($extrafields->attributes["product_fournisseur_price"]['list'][$key] == 1 || $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 3 || ($action == "update_price" && $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 4))) {
|
||||||
print '<tr><td'.($extrafields->attributes["product_fournisseur_price"]['required'][$key] ? ' class="fieldrequired"' : '').'>'.$langs->trans($value).'</td><td>'.$extrafields->showInputField($key, '', '', '', '', '', 0, 'product_fournisseur_price').'</td></tr>';
|
print '<tr><td'.($extrafields->attributes["product_fournisseur_price"]['required'][$key] ? ' class="fieldrequired"' : '').'>'.$langs->trans($value).'</td><td>'.$extrafields->showInputField($key, GETPOSTISSET('options_' . $key) ? $extrafield_values['options_' . $key] : '', '', '', '', '', 0, 'product_fournisseur_price').'</td></tr>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$resql = $db->fetch_object($resql);
|
$sql = "SELECT";
|
||||||
foreach ($extralabels as $key => $value) {
|
$sql .= " fk_object";
|
||||||
if (!empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && ($extrafields->attributes["product_fournisseur_price"]['list'][$key] == 1 || $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 3 || ($action == "update_price" && $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 4))) {
|
foreach ($extralabels as $key => $value) {
|
||||||
print '<tr><td'.($extrafields->attributes["product_fournisseur_price"]['required'][$key] ? ' class="fieldrequired"' : '').'>'.$langs->trans($value).'</td><td>'.$extrafields->showInputField($key, $resql->{$key}, '', '', '', '', 0, 'product_fournisseur_price').'</td></tr>';
|
$sql .= ", " . $key;
|
||||||
}
|
}
|
||||||
}
|
$sql .= " FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields";
|
||||||
}
|
$sql .= " WHERE fk_object = " . $rowid;
|
||||||
|
$resql = $db->query($sql);
|
||||||
|
if ($resql) {
|
||||||
|
$obj = $db->fetch_object($resql);
|
||||||
|
foreach ($extralabels as $key => $value) {
|
||||||
|
if (!empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && ($extrafields->attributes["product_fournisseur_price"]['list'][$key] == 1 || $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 3 || ($action == "update_price" && $extrafields->attributes["product_fournisseur_price"]['list'][$key] == 4))) {
|
||||||
|
print '<tr><td'.($extrafields->attributes["product_fournisseur_price"]['required'][$key] ? ' class="fieldrequired"' : '').'>'.$langs->trans($value).'</td><td>'.$extrafields->showInputField($key, GETPOSTISSET('options_' . $key) ? $extrafield_values['options_' . $key] : $obj->{$key}, '', '', '', '', 0, 'product_fournisseur_price').'</td></tr>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$db->free($resql);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_object($hookmanager))
|
if (is_object($hookmanager))
|
||||||
@ -1008,22 +1018,32 @@ SCRIPT;
|
|||||||
print '</td>';
|
print '</td>';
|
||||||
|
|
||||||
// Extrafields
|
// Extrafields
|
||||||
$resql = $db->query("SELECT * FROM ".MAIN_DB_PREFIX."product_fournisseur_price_extrafields WHERE fk_object = ".$productfourn->product_fourn_price_id);
|
|
||||||
if (!empty($extralabels)) {
|
if (!empty($extralabels)) {
|
||||||
if ($db->num_rows($resql) != 1) {
|
$sql = "SELECT";
|
||||||
foreach ($extralabels as $key => $value) {
|
$sql .= " fk_object";
|
||||||
if (!empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && $extrafields->attributes["product_fournisseur_price"]['list'][$key] != 3) {
|
foreach ($extralabels as $key => $value) {
|
||||||
print "<td></td>";
|
$sql .= ", " . $key;
|
||||||
}
|
}
|
||||||
}
|
$sql .= " FROM " . MAIN_DB_PREFIX . "product_fournisseur_price_extrafields";
|
||||||
} else {
|
$sql .= " WHERE fk_object = " . $productfourn->product_fourn_price_id;
|
||||||
$resql = $db->fetch_object($resql);
|
$resql = $db->query($sql);
|
||||||
foreach ($extralabels as $key => $value) {
|
if ($resql) {
|
||||||
if (!empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && $extrafields->attributes["product_fournisseur_price"]['list'][$key] != 3) {
|
if ($db->num_rows($resql) != 1) {
|
||||||
print '<td align="right">'.$extrafields->showOutputField($key, $resql->{$key})."</td>";
|
foreach ($extralabels as $key => $value) {
|
||||||
}
|
if (!empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && $extrafields->attributes["product_fournisseur_price"]['list'][$key] != 3) {
|
||||||
}
|
print "<td></td>";
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$obj = $db->fetch_object($resql);
|
||||||
|
foreach ($extralabels as $key => $value) {
|
||||||
|
if (!empty($extrafields->attributes["product_fournisseur_price"]['list'][$key]) && $extrafields->attributes["product_fournisseur_price"]['list'][$key] != 3) {
|
||||||
|
print '<td align="right">'.$extrafields->showOutputField($key, $obj->{$key})."</td>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$db->free($resql);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_object($hookmanager))
|
if (is_object($hookmanager))
|
||||||
|
|||||||
@ -122,7 +122,8 @@ $sql .= ' p.duration, p.tosell as statut, p.tobuy, p.seuil_stock_alerte, p.desir
|
|||||||
$sql .= ' SUM(s.reel) as stock_physique';
|
$sql .= ' SUM(s.reel) as stock_physique';
|
||||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) $sql .= ', u.short_label as unit_short';
|
if (!empty($conf->global->PRODUCT_USE_UNITS)) $sql .= ', u.short_label as unit_short';
|
||||||
$sql .= ' FROM '.MAIN_DB_PREFIX.'product as p';
|
$sql .= ' FROM '.MAIN_DB_PREFIX.'product as p';
|
||||||
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_stock as s on p.rowid = s.fk_product';
|
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'product_stock as s ON p.rowid = s.fk_product';
|
||||||
|
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'entrepot as e ON s.fk_entrepot = e.rowid AND e.entity IN ('.getEntity('entrepot').')';
|
||||||
if (!empty($conf->global->PRODUCT_USE_UNITS)) $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_units as u on p.fk_unit = u.rowid';
|
if (!empty($conf->global->PRODUCT_USE_UNITS)) $sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_units as u on p.fk_unit = u.rowid';
|
||||||
// We'll need this table joined to the select in order to filter by categ
|
// We'll need this table joined to the select in order to filter by categ
|
||||||
if ($search_categ) $sql .= ", ".MAIN_DB_PREFIX."categorie_product as cp";
|
if ($search_categ) $sql .= ", ".MAIN_DB_PREFIX."categorie_product as cp";
|
||||||
|
|||||||
@ -463,7 +463,7 @@ $listofreferent = array(
|
|||||||
'table'=>'projet_task',
|
'table'=>'projet_task',
|
||||||
'datefieldname'=>'task_date',
|
'datefieldname'=>'task_date',
|
||||||
'disableamount'=>0,
|
'disableamount'=>0,
|
||||||
'urlnew'=>DOL_URL_ROOT.'/projet/tasks/time.php?id='.$id,
|
'urlnew'=>DOL_URL_ROOT.'/projet/tasks/time.php?withproject=1&action=createtime&projectid='.$id,
|
||||||
'buttonnew'=>'AddTimeSpent',
|
'buttonnew'=>'AddTimeSpent',
|
||||||
'testnew'=>$user->rights->projet->creer,
|
'testnew'=>$user->rights->projet->creer,
|
||||||
'test'=>($conf->projet->enabled && $user->rights->projet->lire && empty($conf->global->PROJECT_HIDE_TASKS))),
|
'test'=>($conf->projet->enabled && $user->rights->projet->lire && empty($conf->global->PROJECT_HIDE_TASKS))),
|
||||||
@ -538,7 +538,7 @@ if ($action=="addelement")
|
|||||||
elseif ($action == "unlink")
|
elseif ($action == "unlink")
|
||||||
{
|
{
|
||||||
$tablename = GETPOST("tablename", "aZ09");
|
$tablename = GETPOST("tablename", "aZ09");
|
||||||
$projectField = GETPOST('projectfield', 'aZ09') ? GETPOST('projectfield', 'aZ09') : 'fk_projet';
|
$projectField = GETPOSTISSET('projectfield') ? GETPOST('projectfield', 'aZ09') : 'fk_projet';
|
||||||
$elementselectid = GETPOST("elementselect", "int");
|
$elementselectid = GETPOST("elementselect", "int");
|
||||||
|
|
||||||
$result = $object->remove_element($tablename, $elementselectid, $projectField);
|
$result = $object->remove_element($tablename, $elementselectid, $projectField);
|
||||||
|
|||||||
@ -44,7 +44,7 @@ if (! empty($conf->projet->enabled)) $langs->load("projects");
|
|||||||
$id = GETPOST("id", 'int');
|
$id = GETPOST("id", 'int');
|
||||||
$action = GETPOST('action', 'aZ09');
|
$action = GETPOST('action', 'aZ09');
|
||||||
$cancel = GETPOST('cancel', 'aZ09');
|
$cancel = GETPOST('cancel', 'aZ09');
|
||||||
$accountid = GETPOST("accountid", 'int');
|
$accountid = GETPOST('accountid', 'int') > 0 ? GETPOST('accountid', 'int') : 0;
|
||||||
$projectid = (GETPOST('projectid', 'int') ? GETPOST('projectid', 'int') : GETPOST('fk_project', 'int'));
|
$projectid = (GETPOST('projectid', 'int') ? GETPOST('projectid', 'int') : GETPOST('fk_project', 'int'));
|
||||||
|
|
||||||
$datep = dol_mktime(12, 0, 0, GETPOST("datepmonth", 'int'), GETPOST("datepday", 'int'), GETPOST("datepyear", 'int'));
|
$datep = dol_mktime(12, 0, 0, GETPOST("datepmonth", 'int'), GETPOST("datepday", 'int'), GETPOST("datepyear", 'int'));
|
||||||
|
|||||||
@ -58,6 +58,10 @@ class CompanyPaymentMode extends CommonObject
|
|||||||
public $picto = 'generic';
|
public $picto = 'generic';
|
||||||
|
|
||||||
|
|
||||||
|
const STATUS_ENABLED = 1;
|
||||||
|
const STATUS_CANCELED = 0;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 'type' if the field format.
|
* 'type' if the field format.
|
||||||
* 'label' the translation key.
|
* 'label' the translation key.
|
||||||
@ -477,9 +481,9 @@ class CompanyPaymentMode extends CommonObject
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retourne le libelle du status d'un user (actif, inactif)
|
* Return label of the status
|
||||||
*
|
*
|
||||||
* @param int $mode 0=libelle long, 1=libelle court, 2=Picto + Libelle court, 3=Picto, 4=Picto + Libelle long, 5=Libelle court + Picto
|
* @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
|
||||||
* @return string Label of status
|
* @return string Label of status
|
||||||
*/
|
*/
|
||||||
public function getLibStatut($mode = 0)
|
public function getLibStatut($mode = 0)
|
||||||
@ -495,47 +499,29 @@ class CompanyPaymentMode extends CommonObject
|
|||||||
* @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
|
* @param int $mode 0=long label, 1=short label, 2=Picto + short label, 3=Picto, 4=Picto + long label, 5=Short label + Picto, 6=Long label + Picto
|
||||||
* @return string Label of status
|
* @return string Label of status
|
||||||
*/
|
*/
|
||||||
public static function LibStatut($status, $mode = 0)
|
public function LibStatut($status, $mode = 0)
|
||||||
{
|
{
|
||||||
// phpcs:enable
|
// phpcs:enable
|
||||||
global $langs;
|
if (empty($this->labelStatus) || empty($this->labelStatusShort))
|
||||||
|
{
|
||||||
|
global $langs;
|
||||||
|
//$langs->load("mymodule");
|
||||||
|
$this->labelStatus[self::STATUS_ENABLED] = $langs->trans('Enabled');
|
||||||
|
$this->labelStatus[self::STATUS_CANCELED] = $langs->trans('Disabled');
|
||||||
|
$this->labelStatusShort[self::STATUS_ENABLED] = $langs->trans('Enabled');
|
||||||
|
$this->labelStatusShort[self::STATUS_CANCELED] = $langs->trans('Disabled');
|
||||||
|
}
|
||||||
|
|
||||||
if ($mode == 0 || $mode == 1)
|
$statusType = 'status5';
|
||||||
{
|
if ($status == self::STATUS_ENABLED) $statusType = 'status4';
|
||||||
if ($status == 1) return $langs->trans('Enabled');
|
|
||||||
elseif ($status == 0) return $langs->trans('Disabled');
|
return dolGetStatus($this->labelStatus[$status], $this->labelStatusShort[$status], '', $statusType, $mode);
|
||||||
}
|
|
||||||
elseif ($mode == 2)
|
|
||||||
{
|
|
||||||
if ($status == 1) return img_picto($langs->trans('Enabled'), 'statut4').' '.$langs->trans('Enabled');
|
|
||||||
elseif ($status == 0) return img_picto($langs->trans('Disabled'), 'statut5').' '.$langs->trans('Disabled');
|
|
||||||
}
|
|
||||||
elseif ($mode == 3)
|
|
||||||
{
|
|
||||||
if ($status == 1) return img_picto($langs->trans('Enabled'), 'statut4');
|
|
||||||
elseif ($status == 0) return img_picto($langs->trans('Disabled'), 'statut5');
|
|
||||||
}
|
|
||||||
elseif ($mode == 4)
|
|
||||||
{
|
|
||||||
if ($status == 1) return img_picto($langs->trans('Enabled'), 'statut4').' '.$langs->trans('Enabled');
|
|
||||||
elseif ($status == 0) return img_picto($langs->trans('Disabled'), 'statut5').' '.$langs->trans('Disabled');
|
|
||||||
}
|
|
||||||
elseif ($mode == 5)
|
|
||||||
{
|
|
||||||
if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'), 'statut4');
|
|
||||||
elseif ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'), 'statut5');
|
|
||||||
}
|
|
||||||
elseif ($mode == 6)
|
|
||||||
{
|
|
||||||
if ($status == 1) return $langs->trans('Enabled').' '.img_picto($langs->trans('Enabled'), 'statut4');
|
|
||||||
elseif ($status == 0) return $langs->trans('Disabled').' '.img_picto($langs->trans('Disabled'), 'statut5');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Charge les informations d'ordre info dans l'objet commande
|
* Load the info information in the object
|
||||||
*
|
*
|
||||||
* @param int $id Id of order
|
* @param int $id Id of object
|
||||||
* @return void
|
* @return void
|
||||||
*/
|
*/
|
||||||
public function info($id)
|
public function info($id)
|
||||||
|
|||||||
@ -1635,9 +1635,9 @@ if ($socid && $action == 'edit' && $user->rights->societe->creer)
|
|||||||
|
|
||||||
dol_banner_tab($object, 'socid', $linkback, ($user->socid ? 0 : 1), 'rowid', 'nom');
|
dol_banner_tab($object, 'socid', $linkback, ($user->socid ? 0 : 1), 'rowid', 'nom');
|
||||||
|
|
||||||
print '<div class="fichecenter">';
|
|
||||||
|
|
||||||
print '<div class="underbanner clearboth"></div>';
|
print '<div class="underbanner clearboth"></div>';
|
||||||
|
|
||||||
|
print '<div class="div-table-responsive-no-min">';
|
||||||
print '<table class="border centpercent">';
|
print '<table class="border centpercent">';
|
||||||
|
|
||||||
print '<tr><td class="titlefield fieldrequired">'.$langs->trans("LabelRIB").'</td>';
|
print '<tr><td class="titlefield fieldrequired">'.$langs->trans("LabelRIB").'</td>';
|
||||||
@ -1697,11 +1697,13 @@ if ($socid && $action == 'edit' && $user->rights->societe->creer)
|
|||||||
print "</textarea></td></tr>";
|
print "</textarea></td></tr>";
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
print '</div>';
|
||||||
|
|
||||||
if ($conf->prelevement->enabled)
|
if ($conf->prelevement->enabled)
|
||||||
{
|
{
|
||||||
print '<br>';
|
print '<br>';
|
||||||
|
|
||||||
|
print '<div class="div-table-responsive-no-min">';
|
||||||
print '<table class="border centpercent">';
|
print '<table class="border centpercent">';
|
||||||
|
|
||||||
if (empty($companybankaccount->rum)) $companybankaccount->rum = $prelevement->buildRumNumber($object->code_client, $companybankaccount->datec, $companybankaccount->id);
|
if (empty($companybankaccount->rum)) $companybankaccount->rum = $prelevement->buildRumNumber($object->code_client, $companybankaccount->datec, $companybankaccount->id);
|
||||||
@ -1719,9 +1721,9 @@ if ($socid && $action == 'edit' && $user->rights->societe->creer)
|
|||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
print '</div>';
|
||||||
}
|
}
|
||||||
|
|
||||||
print '</div>';
|
|
||||||
|
|
||||||
dol_fiche_end();
|
dol_fiche_end();
|
||||||
|
|
||||||
|
|||||||
@ -434,6 +434,7 @@ function New() {
|
|||||||
|
|
||||||
function Search2() {
|
function Search2() {
|
||||||
console.log("Search2 Call ajax search to replace products");
|
console.log("Search2 Call ajax search to replace products");
|
||||||
|
if(window.event.keyCode == 13) ClickProduct(0);
|
||||||
pageproducts=0;
|
pageproducts=0;
|
||||||
jQuery(".wrapper2 .catwatermark").hide();
|
jQuery(".wrapper2 .catwatermark").hide();
|
||||||
$.getJSON('<?php echo DOL_URL_ROOT ?>/takepos/ajax/ajax.php?action=search&term='+$('#search').val(), function(data) {
|
$.getJSON('<?php echo DOL_URL_ROOT ?>/takepos/ajax/ajax.php?action=search&term='+$('#search').val(), function(data) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user