Merge branch 'develop' into patch-5
This commit is contained in:
commit
3692dcccfa
1
.gitignore
vendored
1
.gitignore
vendored
@ -57,3 +57,4 @@ yarn.lock
|
||||
package-lock.json
|
||||
|
||||
doc/install.lock
|
||||
/.asciidoctorconfig.adoc
|
||||
|
||||
@ -2088,7 +2088,7 @@ class BookKeeping extends CommonObject
|
||||
* FIXME: This function takes the parent of parent to get the root account !
|
||||
*
|
||||
* @param string $account Accounting account
|
||||
* @return array Array with root account information (max 2 upper level)
|
||||
* @return array|int Array with root account information (max 2 upper level), <0 if KO
|
||||
*/
|
||||
public function getRootAccount($account = null)
|
||||
{
|
||||
|
||||
@ -329,6 +329,7 @@ class Lettering extends BookKeeping
|
||||
// Update request
|
||||
|
||||
$now = dol_now();
|
||||
$affected_rows = 0;
|
||||
|
||||
if (!$error) {
|
||||
$sql = "UPDATE ".MAIN_DB_PREFIX."accounting_bookkeeping SET";
|
||||
@ -341,6 +342,8 @@ class Lettering extends BookKeeping
|
||||
if (!$resql) {
|
||||
$error++;
|
||||
$this->errors[] = "Error ".$this->db->lasterror();
|
||||
} else {
|
||||
$affected_rows = $this->db->affected_rows($resql);
|
||||
}
|
||||
}
|
||||
|
||||
@ -352,7 +355,7 @@ class Lettering extends BookKeeping
|
||||
}
|
||||
return -1 * $error;
|
||||
} else {
|
||||
return 1;
|
||||
return $affected_rows;
|
||||
}
|
||||
}
|
||||
|
||||
@ -387,7 +390,7 @@ class Lettering extends BookKeeping
|
||||
}
|
||||
return -1 * $error;
|
||||
} else {
|
||||
return 1;
|
||||
return $this->db->affected_rows($resql);
|
||||
}
|
||||
}
|
||||
|
||||
@ -482,7 +485,7 @@ class Lettering extends BookKeeping
|
||||
else $result = $this->updateLettering($bookkeeping_lines);
|
||||
if ($result < 0) {
|
||||
$group_error++;
|
||||
} else {
|
||||
} elseif ($result > 0) {
|
||||
$nb_lettering++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -805,6 +805,12 @@ if (!$error && $action == 'writebookkeeping') {
|
||||
require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php';
|
||||
$lettering_static = new Lettering($db);
|
||||
$nb_lettering = $lettering_static->bookkeepingLetteringAll(array($bookkeeping->id));
|
||||
|
||||
if ($nb_lettering < 0) {
|
||||
$error++;
|
||||
$errorforline++;
|
||||
setEventMessages($lettering_static->error, $lettering_static->errors, 'errors');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -381,6 +381,12 @@ if ($action == 'writebookkeeping') {
|
||||
require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php';
|
||||
$lettering_static = new Lettering($db);
|
||||
$nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id));
|
||||
|
||||
if ($nb_lettering < 0) {
|
||||
$error++;
|
||||
$errorforline++;
|
||||
setEventMessages($lettering_static->error, $lettering_static->errors, 'errors');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -463,7 +463,15 @@ if ($action == 'writebookkeeping') {
|
||||
if (getDolGlobalInt('ACCOUNTING_ENABLE_LETTERING') && getDolGlobalInt('ACCOUNTING_ENABLE_AUTOLETTERING')) {
|
||||
require_once DOL_DOCUMENT_ROOT . '/accountancy/class/lettering.class.php';
|
||||
$lettering_static = new Lettering($db);
|
||||
|
||||
$nb_lettering = $lettering_static->bookkeepingLettering(array($bookkeeping->id));
|
||||
|
||||
if ($nb_lettering < 0) {
|
||||
$error++;
|
||||
$errorforline++;
|
||||
$errorforinvoice[$key] = 'other';
|
||||
setEventMessages($lettering_static->error, $lettering_static->errors, 'errors');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -3303,11 +3303,11 @@ class Adherent extends CommonObject
|
||||
*/
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $selected;
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
|
||||
if (property_exists($this, 'photo') || !empty($this->photo)) {
|
||||
$return.= Form::showphoto('memberphoto', $this, 0, 60, 0, 'photokanban photoref photowithmargin photologintooltip', 'small', 0, 1);
|
||||
} else {
|
||||
@ -3316,6 +3316,7 @@ class Adherent extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'type')) {
|
||||
$return .= '<br><span class="info-box-label opacitymedium">'.$this->type.'</span>';
|
||||
}
|
||||
|
||||
@ -991,7 +991,10 @@ class AdherentType extends CommonObject
|
||||
*/
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs,$user;
|
||||
global $langs, $user;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -999,6 +1002,7 @@ class AdherentType extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if ($user->rights->adherent->configurer) {
|
||||
$return .= '<span class="right paddingleft"><a class="editfielda" href="'.$_SERVER["PHP_SELF"].'?action=edit&rowid='.$this->ref.'">'.img_edit().'</a></span>';
|
||||
} else {
|
||||
|
||||
@ -515,6 +515,8 @@ class Subscription extends CommonObject
|
||||
*/
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -523,6 +525,7 @@ class Subscription extends CommonObject
|
||||
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(property_exists($this, 'fk_adherent')? $this->fk_adherent: $this->ref ).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'dateh') || property_exists($this, 'datef')) {
|
||||
$return .= '<br><span class="info-box-status opacitymedium">'.dol_print_date($this->dateh, 'day').' - '.dol_print_date($this->datef, 'day').'</span>';
|
||||
}
|
||||
|
||||
@ -38,9 +38,11 @@ require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.facture.class.php';
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array("admin", "other", "orders"));
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
|
||||
$type = GETPOST('type', 'alpha');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
@ -98,7 +100,9 @@ if ($action == 'specimen') { // For invoices
|
||||
$facture->thirdparty = $specimenthirdparty; // Define who should has build the invoice (so the supplier)
|
||||
|
||||
// Search template files
|
||||
$file = ''; $classname = ''; $filefound = 0;
|
||||
$file = '';
|
||||
$classname = '';
|
||||
$filefound = 0;
|
||||
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
|
||||
foreach ($dirmodels as $reldir) {
|
||||
$file = dol_buildpath($reldir."core/modules/supplier_invoice/doc/pdf_".$modele.".modules.php", 0);
|
||||
@ -185,12 +189,12 @@ if ($action == 'set_SUPPLIER_INVOICE_FREE_TEXT') {
|
||||
* View
|
||||
*/
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
$dirmodels = array_merge(array('/'), (array) $conf->modules_parts['models']);
|
||||
|
||||
llxHeader("", "");
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
|
||||
print load_fiche_titre($langs->trans("SuppliersSetup"), $linkback, 'title_setup');
|
||||
|
||||
@ -205,6 +209,7 @@ print dol_get_fiche_head($head, 'invoice', $langs->trans("Suppliers"), -1, 'comp
|
||||
|
||||
print load_fiche_titre($langs->trans("SuppliersInvoiceNumberingModel"), '', '');
|
||||
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="noborder centpercent">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td width="100">'.$langs->trans("Name").'</td>';
|
||||
@ -244,7 +249,7 @@ foreach ($dirmodels as $reldir) {
|
||||
print $module->info();
|
||||
print '</td>';
|
||||
|
||||
// Show example of numbering model
|
||||
// Show example of numbering module
|
||||
print '<td class="nowrap">';
|
||||
$tmp = $module->getExample();
|
||||
if (preg_match('/^Error/', $tmp)) {
|
||||
@ -297,13 +302,13 @@ foreach ($dirmodels as $reldir) {
|
||||
}
|
||||
}
|
||||
|
||||
print '</table><br>';
|
||||
print '</table></div><br>';
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Modeles documents for supplier invoices
|
||||
* Documents models for supplier invoices
|
||||
*/
|
||||
|
||||
print load_fiche_titre($langs->trans("BillsPDFModules"), '', '');
|
||||
@ -329,6 +334,7 @@ if ($resql) {
|
||||
dol_print_error($db);
|
||||
}
|
||||
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="noborder centpercent">'."\n";
|
||||
print '<tr class="liste_titre">'."\n";
|
||||
print '<td width="100">'.$langs->trans("Name").'</td>'."\n";
|
||||
@ -380,7 +386,7 @@ foreach ($dirmodels as $reldir) {
|
||||
//if ($conf->global->INVOICE_SUPPLIER_ADDON_PDF != "$name")
|
||||
//{
|
||||
// Even if choice is the default value, we allow to disable it: For supplier invoice, we accept to have no doc generation at all
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=del&token='.newToken().'&value='.urlencode($name).'&scan_dir='.urlencode($module->scandir).'&label='.urlencode($module->name).'&type=invoice_supplier">';
|
||||
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=del&token='.newToken().'&value='.urlencode($name).'&scan_dir='.urlencode($module->scandir).'&label='.urlencode($module->name).'&type=invoice_supplier">';
|
||||
print img_picto($langs->trans("Enabled"), 'switch_on');
|
||||
print '</a>';
|
||||
/*}
|
||||
@ -391,7 +397,7 @@ foreach ($dirmodels as $reldir) {
|
||||
print "</td>";
|
||||
} else {
|
||||
print '<td class="center">'."\n";
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=set&token='.newToken().'&value='.urlencode($name).'&scan_dir='.urlencode($module->scandir).'&label='.urlencode($module->name).'&type=invoice_supplier">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
|
||||
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=set&token='.newToken().'&value='.urlencode($name).'&scan_dir='.urlencode($module->scandir).'&label='.urlencode($module->name).'&type=invoice_supplier">'.img_picto($langs->trans("Disabled"), 'switch_off').'</a>';
|
||||
print "</td>";
|
||||
}
|
||||
|
||||
@ -400,9 +406,9 @@ foreach ($dirmodels as $reldir) {
|
||||
if (getDolGlobalString("INVOICE_SUPPLIER_ADDON_PDF") == "$name") {
|
||||
//print img_picto($langs->trans("Default"),'on');
|
||||
// Even if choice is the default value, we allow to disable it: For supplier invoice, we accept to have no doc generation at all
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=unsetdoc&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier"" alt="'.$langs->trans("Disable").'">'.img_picto($langs->trans("Enabled"), 'on').'</a>';
|
||||
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=unsetdoc&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier"" alt="'.$langs->trans("Disable").'">'.img_picto($langs->trans("Enabled"), 'on').'</a>';
|
||||
} else {
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=setdoc&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier"" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
|
||||
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?action=setdoc&token='.newToken().'&value='.$name.'&scan_dir='.$module->scandir.'&label='.urlencode($module->name).'&type=invoice_supplier"" alt="'.$langs->trans("Default").'">'.img_picto($langs->trans("Disabled"), 'off').'</a>';
|
||||
}
|
||||
print '</td>';
|
||||
|
||||
@ -420,7 +426,7 @@ foreach ($dirmodels as $reldir) {
|
||||
print $form->textwithpicto('', $htmltooltip, 1, 0);
|
||||
print '</td>';
|
||||
print '<td class="center">';
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.$name.'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
|
||||
print '<a href="'.$_SERVER["PHP_SELF"].'?action=specimen&module='.urlencode($name).'">'.img_object($langs->trans("Preview"), 'pdf').'</a>';
|
||||
print '</td>';
|
||||
|
||||
print "</tr>\n";
|
||||
@ -432,7 +438,7 @@ foreach ($dirmodels as $reldir) {
|
||||
}
|
||||
}
|
||||
|
||||
print '</table><br>';
|
||||
print '</table></div><br>';
|
||||
|
||||
/*
|
||||
* Other options
|
||||
@ -443,6 +449,8 @@ print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
print '<input type="hidden" name="action" value="set_SUPPLIER_INVOICE_FREE_TEXT">';
|
||||
|
||||
print load_fiche_titre($langs->trans("OtherOptions"), '', '');
|
||||
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="noborder centpercent">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td>'.$langs->trans("Parameter").'</td>';
|
||||
@ -472,7 +480,7 @@ print '</td><td class="right">';
|
||||
print '<input type="submit" class="button button-edit" value="'.$langs->trans("Modify").'">';
|
||||
print "</td></tr>\n";
|
||||
|
||||
print '</table><br>';
|
||||
print '</table></div><br>';
|
||||
|
||||
print '</form>';
|
||||
|
||||
@ -482,6 +490,8 @@ print '</form>';
|
||||
*/
|
||||
|
||||
print load_fiche_titre($langs->trans("Notifications"), '', '');
|
||||
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="noborder centpercent">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td>'.$langs->trans("Parameter").'</td>';
|
||||
@ -495,6 +505,7 @@ print '</td><td class="right">';
|
||||
print "</td></tr>\n";
|
||||
|
||||
print '</table>';
|
||||
print '</div>';
|
||||
|
||||
// End of page
|
||||
llxFooter();
|
||||
|
||||
@ -38,25 +38,28 @@ require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.commande.class.php';
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array("admin", "other", "orders", "stocks"));
|
||||
|
||||
if (!$user->admin) {
|
||||
accessforbidden();
|
||||
}
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
|
||||
$type = GETPOST('type', 'alpha');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
|
||||
$specimenthirdparty = new Societe($db);
|
||||
$specimenthirdparty->initAsSpecimen();
|
||||
|
||||
$error = 0;
|
||||
|
||||
if (!$user->admin) {
|
||||
accessforbidden();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
*/
|
||||
* Actions
|
||||
*/
|
||||
|
||||
include DOL_DOCUMENT_ROOT.'/core/actions_setmoduleoptions.inc.php';
|
||||
|
||||
@ -77,7 +80,9 @@ if ($action == 'updateMask') {
|
||||
} else {
|
||||
setEventMessages($langs->trans("Error"), null, 'errors');
|
||||
}
|
||||
} elseif ($action == 'specimen') { // For orders
|
||||
}
|
||||
|
||||
if ($action == 'specimen') { // For orders
|
||||
$modele = GETPOST('module', 'alpha');
|
||||
|
||||
$commande = new CommandeFournisseur($db);
|
||||
@ -317,8 +322,8 @@ print '</table></div><br>';
|
||||
|
||||
|
||||
/*
|
||||
* Documents models for supplier orders
|
||||
*/
|
||||
* Documents models for supplier orders
|
||||
*/
|
||||
|
||||
print load_fiche_titre($langs->trans("OrdersModelModule"), '', '');
|
||||
|
||||
|
||||
@ -1567,6 +1567,9 @@ class BOM extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $db,$langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$prod = new Product($db);
|
||||
$prod->fetch($this->fk_product);
|
||||
|
||||
@ -1577,6 +1580,7 @@ class BOM extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : '').'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'fields') && !empty($this->fields['bomtype']['arrayofkeyval'])) {
|
||||
$return .= '<br><span class="info-box-label opacitymedium">'.$langs->trans("Type").' : </span>';
|
||||
if ($this->bomtype == 0) {
|
||||
|
||||
@ -73,17 +73,19 @@ $result = $object->fetch($id);
|
||||
$hookmanager->initHooks(array('ciblescard', 'globalcard'));
|
||||
|
||||
// Security check
|
||||
if (!$user->rights->mailing->lire || (empty($conf->global->EXTERNAL_USERS_ARE_AUTHORIZED) && $user->socid > 0)) {
|
||||
if (!$user->hasRight('mailing', 'lire') || (empty($conf->global->EXTERNAL_USERS_ARE_AUTHORIZED) && $user->socid > 0)) {
|
||||
accessforbidden();
|
||||
}
|
||||
//$result = restrictedArea($user, 'mailing');
|
||||
|
||||
$sqlmessage = '';
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
*/
|
||||
|
||||
if ($action == 'add') {
|
||||
if ($action == 'add' && $user->hasRight('mailing', 'creer')) { // Add recipients
|
||||
$module = GETPOST("module", 'alpha');
|
||||
$result = -1;
|
||||
|
||||
@ -103,6 +105,8 @@ if ($action == 'add') {
|
||||
$obj = new $classname($db);
|
||||
dol_syslog("Call add_to_target on class ".$classname);
|
||||
$result = $obj->add_to_target($id);
|
||||
|
||||
$sqlmessage = $obj->sql;
|
||||
}
|
||||
}
|
||||
if ($result > 0) {
|
||||
@ -117,7 +121,7 @@ if ($action == 'add') {
|
||||
}
|
||||
}
|
||||
|
||||
if (GETPOST('clearlist', 'int')) {
|
||||
if (GETPOST('clearlist', 'int') && $user->hasRight('mailing', 'creer')) {
|
||||
// Loading Class
|
||||
$obj = new MailingTargets($db);
|
||||
$obj->clear_target($id);
|
||||
@ -127,7 +131,7 @@ if (GETPOST('clearlist', 'int')) {
|
||||
*/
|
||||
}
|
||||
|
||||
if (GETPOST('exportcsv', 'int')) {
|
||||
if (GETPOST('exportcsv', 'int') && $user->hasRight('mailing', 'lire')) {
|
||||
$completefilename = 'targets_emailing'.$object->id.'_'.dol_print_date(dol_now(), 'dayhourlog').'.csv';
|
||||
header('Content-Type: text/csv');
|
||||
header('Content-Disposition: attachment;filename='.$completefilename);
|
||||
@ -166,7 +170,7 @@ if (GETPOST('exportcsv', 'int')) {
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($action == 'delete') {
|
||||
if ($action == 'delete' && $user->hasRight('mailing', 'creer')) {
|
||||
// Ici, rowid indique le destinataire et id le mailing
|
||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."mailing_cibles WHERE rowid = ".((int) $rowid);
|
||||
$resql = $db->query($sql);
|
||||
@ -454,7 +458,14 @@ if ($object->fetch($id) >= 0) {
|
||||
print '</div>'; // End table
|
||||
print '</div>';
|
||||
|
||||
print '<br><br>';
|
||||
print '<br>';
|
||||
|
||||
if ($sqlmessage && $user->admin) {
|
||||
print info_admin($langs->trans("SQLUsedForExport").':<br> '.$sqlmessage, 0, 0, 1, '', 'TechnicalInformation');
|
||||
print '<br>';
|
||||
}
|
||||
|
||||
print '<br>';
|
||||
}
|
||||
|
||||
// List of selected targets
|
||||
|
||||
256
htdocs/comm/propal/agenda.php
Normal file
256
htdocs/comm/propal/agenda.php
Normal file
@ -0,0 +1,256 @@
|
||||
<?php
|
||||
/* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) ---Put here your own copyright and developer email---
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/comm/propal/agenda.php
|
||||
* \ingroup propal
|
||||
* \brief Tab of events on Proposal
|
||||
*/
|
||||
require '../../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/propal.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array("propal", "other"));
|
||||
|
||||
// Get parameters
|
||||
$id = GETPOST('id', 'int');
|
||||
$ref = GETPOST('ref', 'alpha');
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$cancel = GETPOST('cancel', 'aZ09');
|
||||
$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search
|
||||
$backtopage = GETPOST('backtopage', 'alpha');
|
||||
|
||||
if (GETPOST('actioncode', 'array')) {
|
||||
$actioncode = GETPOST('actioncode', 'array', 3);
|
||||
if (!count($actioncode)) {
|
||||
$actioncode = '0';
|
||||
}
|
||||
} else {
|
||||
$actioncode = GETPOST("actioncode", "alpha", 3) ? GETPOST("actioncode", "alpha", 3) : (GETPOST("actioncode") == '0' ? '0' : getDolGlobalString('AGENDA_DEFAULT_FILTER_TYPE_FOR_OBJECT'));
|
||||
}
|
||||
$search_rowid = GETPOST('search_rowid');
|
||||
$search_agenda_label = GETPOST('search_agenda_label');
|
||||
|
||||
$limit = GETPOST('limit', 'int') ? GETPOST('limit', 'int') : $conf->liste_limit;
|
||||
$sortfield = GETPOST('sortfield', 'aZ09comma');
|
||||
$sortorder = GETPOST('sortorder', 'aZ09comma');
|
||||
$page = GETPOSTISSET('pageplusone') ? (GETPOST('pageplusone') - 1) : GETPOST("page", 'int');
|
||||
if (empty($page) || $page == -1) {
|
||||
$page = 0;
|
||||
} // If $page is not defined, or '' or -1
|
||||
$offset = $limit * $page;
|
||||
$pageprev = $page - 1;
|
||||
$pagenext = $page + 1;
|
||||
if (!$sortfield) {
|
||||
$sortfield = 'a.datep,a.id';
|
||||
}
|
||||
if (!$sortorder) {
|
||||
$sortorder = 'DESC,DESC';
|
||||
}
|
||||
|
||||
// Initialize technical objects
|
||||
$object = new Propal($db);
|
||||
$extrafields = new ExtraFields($db);
|
||||
$diroutputmassaction = $conf->propal->multidir_output[$conf->entity].'/temp/massgeneration/'.$user->id;
|
||||
$hookmanager->initHooks(array('myobjectagenda', 'globalcard')); // Note that conf->hooks_modules contains array
|
||||
// Fetch optionals attributes and labels
|
||||
$extrafields->fetch_name_optionals_label($object->table_element);
|
||||
|
||||
// Load object
|
||||
include DOL_DOCUMENT_ROOT.'/core/actions_fetchobject.inc.php'; // Must be include, not include_once // Must be include, not include_once. Include fetch and fetch_thirdparty but not fetch_optionals
|
||||
if ($id > 0 || !empty($ref)) {
|
||||
$upload_dir = $conf->propal->multidir_output[!empty($object->entity) ? $object->entity : $conf->entity]."/".$object->id;
|
||||
}
|
||||
|
||||
$permissiontoread = $user->hasRight("propal", "lire");
|
||||
$permissiontoadd = $user->hasRight("propal", "creer");
|
||||
|
||||
// Security check
|
||||
if (!empty($user->socid)) {
|
||||
$socid = $user->socid;
|
||||
}
|
||||
$isdraft = (($object->status == $object::STATUS_DRAFT) ? 1 : 0);
|
||||
restrictedArea($user, 'propal', $object->id, '', '', 'fk_soc', 'rowid', $isdraft);
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
*/
|
||||
|
||||
$parameters = array('id'=>$id);
|
||||
$reshook = $hookmanager->executeHooks('doActions', $parameters, $object, $action); // Note that $action and $object may have been modified by some hooks
|
||||
if ($reshook < 0) {
|
||||
setEventMessages($hookmanager->error, $hookmanager->errors, 'errors');
|
||||
}
|
||||
|
||||
if (empty($reshook)) {
|
||||
// Cancel
|
||||
if (GETPOST('cancel', 'alpha') && !empty($backtopage)) {
|
||||
header("Location: ".$backtopage);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Purge search criteria
|
||||
if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers
|
||||
$actioncode = '';
|
||||
$search_agenda_label = '';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
if ($object->id > 0) {
|
||||
$title = $langs->trans("Agenda");
|
||||
//if (!empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/',$conf->global->MAIN_HTML_TITLE) && $object->name) $title=$object->name." - ".$title;
|
||||
$help_url = 'EN:Module_Agenda_En|DE:Modul_Terminplanung';
|
||||
llxHeader('', $title, $help_url);
|
||||
|
||||
if (isModEnabled('notification')) {
|
||||
$langs->load("mails");
|
||||
}
|
||||
$head = propal_prepare_head($object);
|
||||
|
||||
|
||||
print dol_get_fiche_head($head, 'agenda', $langs->trans("Proposal"), -1, $object->picto);
|
||||
|
||||
// Object card
|
||||
// ------------------------------------------------------------
|
||||
$linkback = '<a href="'.dol_buildpath('/mymodule/myobject_list.php', 1).'?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
|
||||
|
||||
$morehtmlref = '<div class="refidno">';
|
||||
// Ref customer
|
||||
$morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
|
||||
$morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
|
||||
// Thirdparty
|
||||
$morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1);
|
||||
// Project
|
||||
if (isModEnabled('project')) {
|
||||
$langs->load("projects");
|
||||
$morehtmlref .= '<br>';
|
||||
if (0) {
|
||||
$morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
|
||||
if ($action != 'classify') {
|
||||
$morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
|
||||
}
|
||||
$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
|
||||
} else {
|
||||
if (!empty($object->fk_project)) {
|
||||
$proj = new Project($db);
|
||||
$proj->fetch($object->fk_project);
|
||||
$morehtmlref .= $proj->getNomUrl(1);
|
||||
if ($proj->title) {
|
||||
$morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$morehtmlref .= '</div>';
|
||||
|
||||
|
||||
dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
|
||||
|
||||
print '<div class="fichecenter">';
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
|
||||
$object->info($object->id);
|
||||
dol_print_object_info($object, 1);
|
||||
|
||||
print '</div>';
|
||||
|
||||
print dol_get_fiche_end();
|
||||
|
||||
|
||||
|
||||
// Actions buttons
|
||||
|
||||
$objthirdparty = $object;
|
||||
$objcon = new stdClass();
|
||||
|
||||
$out = '&origin='.urlencode($object->element.(property_exists($object, 'module') ? '@'.$object->module : '')).'&originid='.urlencode($object->id);
|
||||
$urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id;
|
||||
$out .= '&backtopage='.urlencode($urlbacktopage);
|
||||
$permok = $user->rights->agenda->myactions->create;
|
||||
if ((!empty($objthirdparty->id) || !empty($objcon->id)) && $permok) {
|
||||
//$out.='<a href="'.DOL_URL_ROOT.'/comm/action/card.php?action=create';
|
||||
if (get_class($objthirdparty) == 'Societe') {
|
||||
$out .= '&socid='.urlencode($objthirdparty->id);
|
||||
}
|
||||
$out .= (!empty($objcon->id) ? '&contactid='.urlencode($objcon->id) : '');
|
||||
//$out.=$langs->trans("AddAnAction").' ';
|
||||
//$out.=img_picto($langs->trans("AddAnAction"),'filenew');
|
||||
//$out.="</a>";
|
||||
}
|
||||
|
||||
$morehtmlright = '';
|
||||
|
||||
//$messagingUrl = DOL_URL_ROOT.'/societe/messaging.php?socid='.$object->id;
|
||||
//$morehtmlright .= dolGetButtonTitle($langs->trans('ShowAsConversation'), '', 'fa fa-comments imgforviewmode', $messagingUrl, '', 1);
|
||||
//$messagingUrl = DOL_URL_ROOT.'/societe/agenda.php?socid='.$object->id;
|
||||
//$morehtmlright .= dolGetButtonTitle($langs->trans('MessageListViewType'), '', 'fa fa-bars imgforviewmode', $messagingUrl, '', 2);
|
||||
|
||||
if (isModEnabled('agenda')) {
|
||||
if ($user->hasRight('agenda', 'myactions', 'create') || $user->hasRight('agenda', 'allactions', 'create')) {
|
||||
$morehtmlright .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out);
|
||||
} else {
|
||||
$morehtmlright .= dolGetButtonTitle($langs->trans('AddAction'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/comm/action/card.php?action=create'.$out, '', 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (isModEnabled('agenda') && (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) {
|
||||
print '<br>';
|
||||
|
||||
$param = '&id='.$object->id.(!empty($socid) ? '&socid='.$socid : '');
|
||||
if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
|
||||
$param .= '&contextpage='.urlencode($contextpage);
|
||||
}
|
||||
if ($limit > 0 && $limit != $conf->liste_limit) {
|
||||
$param .= '&limit='.urlencode($limit);
|
||||
}
|
||||
|
||||
// Try to know count of actioncomm from cache
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
|
||||
$cachekey = 'count_events_propal_'.$object->id;
|
||||
$nbEvent = dol_getcache($cachekey);
|
||||
|
||||
print_barre_liste($langs->trans("ActionsOnPropal").(is_numeric($nbEvent) ? '<span class="opacitymedium colorblack paddingleft">('.$nbEvent.')</span>': ''), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $morehtmlright, '', 0, 1, 1);
|
||||
//print_barre_liste($langs->trans("ActionsOnPropal"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $morehtmlright, '', 0, 1, 1);
|
||||
|
||||
// List of all actions
|
||||
$filters = array();
|
||||
$filters['search_agenda_label'] = $search_agenda_label;
|
||||
$filters['search_rowid'] = $search_rowid;
|
||||
|
||||
// TODO Replace this with same code than into list.php
|
||||
show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder, property_exists($object, 'module') ? $object->module : '');
|
||||
}
|
||||
}
|
||||
|
||||
// End of page
|
||||
llxFooter();
|
||||
$db->close();
|
||||
@ -3038,10 +3038,14 @@ if ($action == 'create') {
|
||||
|
||||
print '</div><div class="fichehalfright">';
|
||||
|
||||
$MAXEVENT = 10;
|
||||
|
||||
$morehtmlcenter = dolGetButtonTitle($langs->trans('SeeAll'), '', 'fa fa-bars imgforviewmode', DOL_URL_ROOT.'/comm/propal/agenda.php?id='.$object->id);
|
||||
|
||||
// List of actions on element
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formactions.class.php';
|
||||
$formactions = new FormActions($db);
|
||||
$somethingshown = $formactions->showactions($object, 'propal', $socid, 1);
|
||||
$somethingshown = $formactions->showactions($object, 'propal', $socid, 1, '', $MAXEVENT, '', $morehtmlcenter); // Show all action for thirdparty
|
||||
|
||||
print '</div></div>';
|
||||
}
|
||||
|
||||
@ -3964,6 +3964,9 @@ class Propal extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -3972,6 +3975,7 @@ class Propal extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'fk_project')) {
|
||||
$return .= '<span class="info-box-ref"> | '.$this->fk_project.'</span>';
|
||||
}
|
||||
|
||||
@ -246,7 +246,9 @@ class PropaleStats extends Stats
|
||||
global $user;
|
||||
|
||||
$sql = "SELECT product.ref, COUNT(product.ref) as nb, SUM(tl.".$this->field_line.") as total, AVG(tl.".$this->field_line.") as avg";
|
||||
$sql .= " FROM ".$this->from." INNER JOIN ".$this->from_line." ON p.rowid = tl.fk_propal INNER JOIN ".MAIN_DB_PREFIX."product as product ON tl.fk_product = product.rowid";
|
||||
$sql .= " FROM ".$this->from;
|
||||
$sql .= " INNER JOIN ".$this->from_line." ON p.rowid = tl.fk_propal";
|
||||
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."product as product ON tl.fk_product = product.rowid";
|
||||
if (empty($user->rights->societe->client->voir) && !$user->socid) {
|
||||
$sql .= " INNER JOIN ".MAIN_DB_PREFIX."societe_commerciaux as sc ON p.fk_soc = sc.fk_soc AND sc.fk_user = ".((int) $user->id);
|
||||
}
|
||||
|
||||
@ -1,126 +0,0 @@
|
||||
<?php
|
||||
/* Copyright (C) 2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004-2006 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005-2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2017 Ferran Marcet <fmarcet@2byte.es>
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/comm/propal/info.php
|
||||
* \ingroup propal
|
||||
* \brief Page d'affichage des infos d'une proposition commerciale
|
||||
*/
|
||||
|
||||
// Load Dolibarr environment
|
||||
require '../../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/functions2.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/comm/propal/class/propal.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/propal.lib.php';
|
||||
if (isModEnabled('project')) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
}
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array('propal', 'compta'));
|
||||
|
||||
$id = GETPOST('id', 'int');
|
||||
$ref = GETPOST('ref', 'alpha');
|
||||
$socid = GETPOST('socid', 'int');
|
||||
|
||||
$object = new Propal($db);
|
||||
if (!$object->fetch($id, $ref) > 0) {
|
||||
dol_print_error($db);
|
||||
exit;
|
||||
}
|
||||
|
||||
// Security check
|
||||
if (!empty($user->socid)) {
|
||||
$socid = $user->socid;
|
||||
$object->id = $user->socid;
|
||||
}
|
||||
restrictedArea($user, 'propal', $object->id);
|
||||
|
||||
$usercancreate = $user->hasRight("propal", "creer");
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
$title = $object->ref." - ".$langs->trans('Info');
|
||||
$help_url = 'EN:Commercial_Proposals|FR:Proposition_commerciale|ES:Presupuestos';
|
||||
llxHeader('', $title, $help_url);
|
||||
|
||||
$object->fetch_thirdparty();
|
||||
|
||||
$head = propal_prepare_head($object);
|
||||
print dol_get_fiche_head($head, 'info', $langs->trans('Proposal'), -1, 'propal');
|
||||
|
||||
$object->info($object->id);
|
||||
|
||||
|
||||
// Proposal card
|
||||
|
||||
$linkback = '<a href="'.DOL_URL_ROOT.'/comm/propal/list.php?restore_lastsearch_values=1'.(!empty($socid) ? '&socid='.$socid : '').'">'.$langs->trans("BackToList").'</a>';
|
||||
|
||||
|
||||
$morehtmlref = '<div class="refidno">';
|
||||
// Ref customer
|
||||
$morehtmlref .= $form->editfieldkey("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', 0, 1);
|
||||
$morehtmlref .= $form->editfieldval("RefCustomer", 'ref_client', $object->ref_client, $object, 0, 'string', '', null, null, '', 1);
|
||||
// Thirdparty
|
||||
$morehtmlref .= '<br>'.$object->thirdparty->getNomUrl(1);
|
||||
// Project
|
||||
if (isModEnabled('project')) {
|
||||
$langs->load("projects");
|
||||
$morehtmlref .= '<br>';
|
||||
if (0) {
|
||||
$morehtmlref .= img_picto($langs->trans("Project"), 'project', 'class="pictofixedwidth"');
|
||||
if ($action != 'classify') {
|
||||
$morehtmlref .= '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?action=classify&token='.newToken().'&id='.$object->id.'">'.img_edit($langs->transnoentitiesnoconv('SetProject')).'</a> ';
|
||||
}
|
||||
$morehtmlref .= $form->form_project($_SERVER['PHP_SELF'].'?id='.$object->id, $object->socid, $object->fk_project, ($action == 'classify' ? 'projectid' : 'none'), 0, 0, 0, 1, '', 'maxwidth300');
|
||||
} else {
|
||||
if (!empty($object->fk_project)) {
|
||||
$proj = new Project($db);
|
||||
$proj->fetch($object->fk_project);
|
||||
$morehtmlref .= $proj->getNomUrl(1);
|
||||
if ($proj->title) {
|
||||
$morehtmlref .= '<span class="opacitymedium"> - '.dol_escape_htmltag($proj->title).'</span>';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
$morehtmlref .= '</div>';
|
||||
|
||||
dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
|
||||
|
||||
print '<div class="fichecenter">';
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
|
||||
print '<br>';
|
||||
|
||||
dol_print_object_info($object);
|
||||
|
||||
print '</div>';
|
||||
|
||||
print dol_get_fiche_end();
|
||||
|
||||
// End of page
|
||||
llxFooter();
|
||||
$db->close();
|
||||
@ -712,6 +712,7 @@ class Orders extends DolibarrApi
|
||||
* @throws RestException 401
|
||||
* @throws RestException 404
|
||||
* @throws RestException 500 System error
|
||||
*
|
||||
*/
|
||||
public function validate($id, $idwarehouse = 0, $notrigger = 0)
|
||||
{
|
||||
|
||||
@ -2727,7 +2727,7 @@ class Commande extends CommonOrder
|
||||
* @param int $offset For pagination
|
||||
* @param string $sortfield Sort criteria
|
||||
* @param string $sortorder Sort order
|
||||
* @return int -1 if KO, array with result if OK
|
||||
* @return int|array -1 if KO, array with result if OK
|
||||
*/
|
||||
public function liste_array($shortlist = 0, $draft = 0, $excluser = '', $socid = 0, $limit = 0, $offset = 0, $sortfield = 'c.date_commande', $sortorder = 'DESC')
|
||||
{
|
||||
|
||||
@ -527,6 +527,14 @@ if ($action == 'create') {
|
||||
print '<td><input type="text" class="flat minwidth150" name="bank" value="'.(GETPOST('bank') ?GETPOST('bank', 'alpha') : $object->bank).'"></td>';
|
||||
print '</tr>';
|
||||
|
||||
// IBAN
|
||||
print '<tr><td>'.$langs->trans($ibankey).'</td>';
|
||||
print '<td><input maxlength="34" type="text" class="flat minwidth300" name="iban" value="'.(GETPOSTISSET('iban') ?GETPOST('iban', 'alpha') : $object->iban).'"></td></tr>';
|
||||
|
||||
// BIC
|
||||
print '<tr><td>'.$langs->trans($bickey).'</td>';
|
||||
print '<td><input maxlength="11" type="text" class="flat minwidth150" name="bic" value="'.(GETPOSTISSET('bic') ?GETPOST('bic', 'alpha') : $object->bic).'"></td></tr>';
|
||||
|
||||
// Show fields of bank account
|
||||
$sizecss = '';
|
||||
foreach ($object->getFieldsToShow() as $val) {
|
||||
@ -559,13 +567,6 @@ if ($action == 'create') {
|
||||
$bickey = "SWIFT";
|
||||
}
|
||||
|
||||
// IBAN
|
||||
print '<tr><td>'.$langs->trans($ibankey).'</td>';
|
||||
print '<td><input maxlength="34" type="text" class="flat minwidth300" name="iban" value="'.(GETPOSTISSET('iban') ?GETPOST('iban', 'alpha') : $object->iban).'"></td></tr>';
|
||||
|
||||
print '<tr><td>'.$langs->trans($bickey).'</td>';
|
||||
print '<td><input maxlength="11" type="text" class="flat minwidth150" name="bic" value="'.(GETPOSTISSET('bic') ?GETPOST('bic', 'alpha') : $object->bic).'"></td></tr>';
|
||||
|
||||
if (isModEnabled('paymentbybanktransfer')) {
|
||||
print '<tr><td>'.$form->textwithpicto($langs->trans("SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformation"), $langs->trans("SEPAXMLPlacePaymentTypeInformationInCreditTransfertransactionInformationHelp")).'</td>';
|
||||
print '<td><input type="checkbox" class="flat" name="pti_in_ctti"'. (empty(GETPOST('pti_in_ctti')) ? '' : ' checked ') . '>';
|
||||
@ -753,6 +754,38 @@ if ($action == 'create') {
|
||||
print '<tr class="liste_titre"><td class="titlefield">'.$langs->trans("BankName").'</td>';
|
||||
print '<td>'.$object->bank.'</td></tr>';
|
||||
|
||||
$ibankey = FormBank::getIBANLabel($object);
|
||||
$bickey = "BICNumber";
|
||||
if ($object->getCountryCode() == 'IN') {
|
||||
$bickey = "SWIFT";
|
||||
}
|
||||
|
||||
// IBAN
|
||||
print '<tr><td>'.$langs->trans($ibankey).'</td>';
|
||||
print '<td>'.getIbanHumanReadable($object).' ';
|
||||
if (!empty($object->iban)) {
|
||||
if (!checkIbanForAccount($object)) {
|
||||
print img_picto($langs->trans("IbanNotValid"), 'warning');
|
||||
} else {
|
||||
print img_picto($langs->trans("IbanValid"), 'info');
|
||||
}
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
// BIC
|
||||
print '<tr><td>'.$langs->trans($bickey).'</td>';
|
||||
print '<td>'.$object->bic.' ';
|
||||
if (!empty($object->bic)) {
|
||||
if (!checkSwiftForAccount($object)) {
|
||||
print img_picto($langs->trans("SwiftNotValid"), 'warning');
|
||||
} else {
|
||||
print img_picto($langs->trans("SwiftValid"), 'info');
|
||||
}
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
// TODO Add a link "Show more..." for all ohter informations.
|
||||
|
||||
// Show fields of bank account
|
||||
foreach ($object->getFieldsToShow() as $val) {
|
||||
$content = '';
|
||||
@ -771,34 +804,6 @@ if ($action == 'create') {
|
||||
print '</tr>';
|
||||
}
|
||||
|
||||
$ibankey = FormBank::getIBANLabel($object);
|
||||
$bickey = "BICNumber";
|
||||
if ($object->getCountryCode() == 'IN') {
|
||||
$bickey = "SWIFT";
|
||||
}
|
||||
|
||||
print '<tr><td>'.$langs->trans($ibankey).'</td>';
|
||||
print '<td>'.getIbanHumanReadable($object).' ';
|
||||
if (!empty($object->iban)) {
|
||||
if (!checkIbanForAccount($object)) {
|
||||
print img_picto($langs->trans("IbanNotValid"), 'warning');
|
||||
} else {
|
||||
print img_picto($langs->trans("IbanValid"), 'info');
|
||||
}
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
print '<tr><td>'.$langs->trans($bickey).'</td>';
|
||||
print '<td>'.$object->bic.' ';
|
||||
if (!empty($object->bic)) {
|
||||
if (!checkSwiftForAccount($object)) {
|
||||
print img_picto($langs->trans("SwiftNotValid"), 'warning');
|
||||
} else {
|
||||
print img_picto($langs->trans("SwiftValid"), 'info');
|
||||
}
|
||||
}
|
||||
print '</td></tr>';
|
||||
|
||||
if (isModEnabled('prelevement')) {
|
||||
print '<tr><td>'.$form->textwithpicto($langs->trans("ICS"), $langs->trans("ICS").' ('.$langs->trans("UsedFor", $langs->transnoentitiesnoconv("StandingOrder")).')').'</td>';
|
||||
print '<td>'.$object->ics.'</td>';
|
||||
@ -1080,6 +1085,20 @@ if ($action == 'create') {
|
||||
print '<td><input type="text" class="flat width300" name="bank" value="'.$object->bank.'"></td>';
|
||||
print '</tr>';
|
||||
|
||||
$ibankey = FormBank::getIBANLabel($object);
|
||||
$bickey = "BICNumber";
|
||||
if ($object->getCountryCode() == 'IN') {
|
||||
$bickey = "SWIFT";
|
||||
}
|
||||
|
||||
// IBAN
|
||||
print '<tr><td>'.$langs->trans($ibankey).'</td>';
|
||||
print '<td><input class="minwidth300 maxwidth200onsmartphone" maxlength="34" type="text" class="flat" name="iban" value="'.(GETPOSTISSET('iban') ? GETPOST('iban', 'alphanohtml') : $object->iban).'"></td></tr>';
|
||||
|
||||
// BIC
|
||||
print '<tr><td>'.$langs->trans($bickey).'</td>';
|
||||
print '<td><input class="minwidth150 maxwidth200onsmartphone" maxlength="11" type="text" class="flat" name="bic" value="'.(GETPOSTISSET('bic') ? GETPOST('bic', 'alphanohtml') : $object->bic).'"></td></tr>';
|
||||
|
||||
// Show fields of bank account
|
||||
foreach ($object->getFieldsToShow() as $val) {
|
||||
$content = '';
|
||||
@ -1106,19 +1125,6 @@ if ($action == 'create') {
|
||||
print '</tr>';
|
||||
}
|
||||
|
||||
$ibankey = FormBank::getIBANLabel($object);
|
||||
$bickey = "BICNumber";
|
||||
if ($object->getCountryCode() == 'IN') {
|
||||
$bickey = "SWIFT";
|
||||
}
|
||||
|
||||
// IBAN
|
||||
print '<tr><td>'.$langs->trans($ibankey).'</td>';
|
||||
print '<td><input class="minwidth300 maxwidth200onsmartphone" maxlength="34" type="text" class="flat" name="iban" value="'.(GETPOSTISSET('iban') ? GETPOST('iban', 'alphanohtml') : $object->iban).'"></td></tr>';
|
||||
|
||||
print '<tr><td>'.$langs->trans($bickey).'</td>';
|
||||
print '<td><input class="minwidth150 maxwidth200onsmartphone" maxlength="11" type="text" class="flat" name="bic" value="'.(GETPOSTISSET('bic') ? GETPOST('bic', 'alphanohtml') : $object->bic).'"></td></tr>';
|
||||
|
||||
if (isModEnabled('prelevement')) {
|
||||
print '<tr><td>'.$form->textwithpicto($langs->trans("ICS"), $langs->trans("ICS").' ('.$langs->trans("UsedFor", $langs->transnoentitiesnoconv("StandingOrder")).')').'</td>';
|
||||
print '<td><input class="minwidth150 maxwidth200onsmartphone" maxlength="32" type="text" class="flat" name="ics" value="'.(GETPOSTISSET('ics') ? GETPOST('ics', 'alphanohtml') : $object->ics).'"></td></tr>';
|
||||
|
||||
@ -30,6 +30,7 @@
|
||||
* \ingroup bank
|
||||
* \brief File of class to manage bank accounts
|
||||
*/
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobject.class.php';
|
||||
|
||||
|
||||
@ -1831,6 +1832,9 @@ class Account extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -1838,6 +1842,7 @@ class Account extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
|
||||
if (property_exists($this, 'type_lib')) {
|
||||
$return .= '<br><span class="info-box-label opacitymedium" title="'.$this->type_lib[$this->type].'">'.substr($this->type_lib[$this->type], 0, 24).'...</span>';
|
||||
@ -1857,6 +1862,8 @@ class Account extends CommonObject
|
||||
}
|
||||
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/commonobjectline.class.php';
|
||||
|
||||
/**
|
||||
* Class to manage bank transaction lines
|
||||
*/
|
||||
|
||||
@ -779,6 +779,9 @@ class PaymentVarious extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -786,6 +789,7 @@ class PaymentVarious extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'fk_bank')) {
|
||||
$return .= ' | <span class="info-box-status ">'.$this->fk_bank.'</span>';
|
||||
}
|
||||
|
||||
@ -480,6 +480,9 @@ class CashControl extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -488,6 +491,7 @@ class CashControl extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1, 1) : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'posmodule')) {
|
||||
$return .= '<br><span class="opacitymedium">'.substr($langs->trans("Module/Application"), 0, 12).'</span> : <span class="info-box-label">'.$this->posmodule.'</span>';
|
||||
}
|
||||
|
||||
@ -5811,6 +5811,8 @@ class Facture extends CommonInvoice
|
||||
*/
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -5819,6 +5821,7 @@ class Facture extends CommonInvoice
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'socid')) {
|
||||
$return .= '<br><span class="info-box-label">'.$this->socid.'</span>';
|
||||
}
|
||||
|
||||
@ -835,7 +835,7 @@ if ($object->id > 0) {
|
||||
|
||||
$sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande as date_demande,";
|
||||
$sql .= " pfd.date_traite as date_traite, pfd.amount, pfd.fk_prelevement_bons,";
|
||||
$sql .= " pb.ref, pb.date_trans, pb.method_trans, pb.credite, pb.date_credit, pb.datec, pb.statut as status,";
|
||||
$sql .= " pb.ref, pb.date_trans, pb.method_trans, pb.credite, pb.date_credit, pb.datec, pb.statut as status, pb.amount as pb_amount,";
|
||||
$sql .= " u.rowid as user_id, u.email, u.lastname, u.firstname, u.login, u.statut as user_status";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."prelevement_demande as pfd";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on pfd.fk_user_demande = u.rowid";
|
||||
@ -896,6 +896,7 @@ if ($object->id > 0) {
|
||||
$withdrawreceipt->date_creation = $db->jdate($obj->datec);
|
||||
$withdrawreceipt->statut = $obj->status;
|
||||
$withdrawreceipt->status = $obj->status;
|
||||
$withdrawreceipt->amount = $obj->pb_amount;
|
||||
//$withdrawreceipt->credite = $db->jdate($obj->credite);
|
||||
|
||||
print $withdrawreceipt->getNomUrl(1);
|
||||
@ -942,7 +943,7 @@ if ($object->id > 0) {
|
||||
// Past requests
|
||||
|
||||
$sql = "SELECT pfd.rowid, pfd.traite, pfd.date_demande, pfd.date_traite, pfd.fk_prelevement_bons, pfd.amount,";
|
||||
$sql .= " pb.ref, pb.date_trans, pb.method_trans, pb.credite, pb.date_credit, pb.datec, pb.statut as status, pb.fk_bank_account,";
|
||||
$sql .= " pb.ref, pb.date_trans, pb.method_trans, pb.credite, pb.date_credit, pb.datec, pb.statut as status, pb.fk_bank_account, pb.amount as pb_amount,";
|
||||
$sql .= " u.rowid as user_id, u.email, u.lastname, u.firstname, u.login, u.statut as user_status";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."prelevement_demande as pfd";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."user as u on pfd.fk_user_demande = u.rowid";
|
||||
@ -1003,6 +1004,7 @@ if ($object->id > 0) {
|
||||
$withdrawreceipt->statut = $obj->status;
|
||||
$withdrawreceipt->status = $obj->status;
|
||||
$withdrawreceipt->fk_bank_account = $obj->fk_bank_account;
|
||||
$withdrawreceipt->amount = $obj->pb_amount;
|
||||
//$withdrawreceipt->credite = $db->jdate($obj->credite);
|
||||
|
||||
print $withdrawreceipt->getNomUrl(1);
|
||||
|
||||
@ -640,6 +640,9 @@ class Localtax extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -647,6 +650,7 @@ class Localtax extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'label')) {
|
||||
$return .= ' | <span class="info-box-label">'.$this->label.'</span>';
|
||||
}
|
||||
|
||||
@ -42,6 +42,11 @@ $ref = GETPOST('ref', 'alpha');
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$confirm = GETPOST('confirm', 'alpha');
|
||||
|
||||
$type = GETPOST('type');
|
||||
if (empty($type)) {
|
||||
$type = 'CHQ';
|
||||
}
|
||||
|
||||
$object = new RemiseCheque($db);
|
||||
|
||||
$sortfield = GETPOST('sortfield', 'aZ09comma');
|
||||
@ -60,6 +65,7 @@ $limit = GETPOST('limit', 'int') ?GETPOST('limit', 'int') : $conf->liste_limit;
|
||||
$offset = $limit * $page;
|
||||
|
||||
$upload_dir = $conf->bank->multidir_output[$object->entity ? $object->entity : $conf->entity]."/checkdeposits";
|
||||
|
||||
// filter by dates from / to
|
||||
$search_date_start_day = GETPOST('search_date_start_day', 'int');
|
||||
$search_date_start_month = GETPOST('search_date_start_month', 'int');
|
||||
@ -84,6 +90,10 @@ $usercandelete = $user->rights->banque->cheque;
|
||||
|
||||
$permissiontodelete = $user->rights->banque->cheque;
|
||||
|
||||
// List of payment mode to support
|
||||
// Example: BANK_PAYMENT_MODES_FOR_DEPOSIT_MANAGEMENT = 'CHQ','TRA'
|
||||
$arrayofpaymentmodetomanage = explode(',', getDolGlobalString('BANK_PAYMENT_MODES_FOR_DEPOSIT_MANAGEMENT', 'CHQ'));
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
@ -132,8 +142,11 @@ if ($action == 'setref' && $user->rights->banque->cheque) {
|
||||
}
|
||||
|
||||
if ($action == 'create' && GETPOST("accountid", "int") > 0 && $user->rights->banque->cheque) {
|
||||
if (is_array(GETPOST('toRemise'))) {
|
||||
$result = $object->create($user, GETPOST("accountid", "int"), 0, GETPOST('toRemise'));
|
||||
if (GETPOSTISARRAY('toRemise')) {
|
||||
$object->type = $type;
|
||||
$arrayofid = GETPOST('toRemise', 'array:int');
|
||||
|
||||
$result = $object->create($user, GETPOST("accountid", "int"), 0, $arrayofid);
|
||||
if ($result > 0) {
|
||||
if ($object->statut == 1) { // If statut is validated, we build doc
|
||||
$object->fetch($object->id); // To force to reload all properties in correct property name
|
||||
@ -286,7 +299,16 @@ if (GETPOST('removefilter')) {
|
||||
$filteraccountid = 0;
|
||||
}
|
||||
|
||||
$title = $langs->trans("Cheques")." - ".$langs->trans("Card");
|
||||
if ($action == 'new') {
|
||||
$title = $langs->trans("NewChequeDeposit");
|
||||
} else {
|
||||
if ($type == 'CHQ') {
|
||||
$title = $langs->trans("Cheques");
|
||||
} else {
|
||||
$title = ($langs->trans("PaymentType".$type) != "PaymentType".$type ? $langs->trans("PaymentType".$type) : $langs->trans("PaymentMode").' '.$type);
|
||||
}
|
||||
}
|
||||
|
||||
$helpurl = "";
|
||||
llxHeader("", $title, $helpurl);
|
||||
|
||||
@ -302,7 +324,7 @@ if ($action == 'new') {
|
||||
$hselected = $h;
|
||||
$h++;
|
||||
|
||||
print load_fiche_titre($langs->trans("Cheques"), '', 'bank_account');
|
||||
print load_fiche_titre($title, '', 'bank_account');
|
||||
} else {
|
||||
$result = $object->fetch($id, $ref);
|
||||
if ($result < 0) {
|
||||
@ -357,7 +379,12 @@ if ($action == 'new') {
|
||||
|
||||
$now = dol_now();
|
||||
|
||||
print '<span class="opacitymedium">'.$langs->trans("SelectChequeTransactionAndGenerate").'</span><br><br>'."\n";
|
||||
$labeltype = ($langs->trans("PaymentType".$type) != "PaymentType".$type ? $langs->trans("PaymentType".$type) : $type);
|
||||
if ($type == 'CHQ') {
|
||||
print '<span class="opacitymedium">'.$langs->trans("SelectChequeTransactionAndGenerate").'</span><br><br>'."\n";
|
||||
} else {
|
||||
print '<span class="opacitymedium">'.$langs->trans("SelectPaymentTransactionAndGenerate", $labeltype).'</span><br><br>'."\n";
|
||||
}
|
||||
|
||||
print '<form class="nocellnopadd" action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
@ -366,9 +393,28 @@ if ($action == 'new') {
|
||||
print dol_get_fiche_head();
|
||||
|
||||
print '<table class="border centpercent">';
|
||||
//print '<tr><td width="30%">'.$langs->trans('Date').'</td><td width="70%">'.dol_print_date($now,'day').'</td></tr>';
|
||||
// Filter
|
||||
print '<tr><td class="titlefieldcreate">'.$langs->trans("DateChequeReceived").'</td><td>';
|
||||
|
||||
if (count($arrayofpaymentmodetomanage) > 1) {
|
||||
$arrayoflabels = array();
|
||||
foreach ($arrayofpaymentmodetomanage as $key => $val) {
|
||||
$labelval = ($langs->trans("PaymentType".$val) != "PaymentType".$val ? $langs->trans("PaymentType".$val) : $val);
|
||||
$arrayoflabels[$key] = $labelval;
|
||||
}
|
||||
// Type
|
||||
print '<tr><td>';
|
||||
print $langs->trans("Type");
|
||||
print '</td><td>';
|
||||
print $form->selectarray('type', $arrayoflabels, $type);
|
||||
print '</td></tr>';
|
||||
}
|
||||
// Date
|
||||
print '<tr><td class="titlefieldcreate">';
|
||||
if ($type == 'CHQ') {
|
||||
print $langs->trans("DateChequeReceived");
|
||||
} else {
|
||||
print $langs->trans("DatePaymentReceived");
|
||||
}
|
||||
print '</td><td>';
|
||||
// filter by dates from / to
|
||||
print '<div class="nowrap">';
|
||||
print $form->selectDate($search_date_start, 'search_date_start_', 0, 0, 1, '', 1, 1, 0, '', '', '', '', 1, '', $langs->trans('From'));
|
||||
@ -402,7 +448,7 @@ if ($action == 'new') {
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."paiement as p ON p.fk_bank = b.rowid";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."bank_account as ba ON (b.fk_account = ba.rowid)";
|
||||
$sql .= " WHERE b.fk_type = 'CHQ'";
|
||||
$sql .= " WHERE b.fk_type = '".$db->escape($type)."'";
|
||||
$sql .= " AND ba.entity IN (".getEntity('bank_account').")";
|
||||
$sql .= " AND b.fk_bordereau = 0";
|
||||
$sql .= " AND b.amount > 0";
|
||||
@ -437,7 +483,11 @@ if ($action == 'new') {
|
||||
}
|
||||
|
||||
if ($i == 0) {
|
||||
print '<div class="opacitymedium">'.$langs->trans("NoWaitingChecks").'</div><br>';
|
||||
if ($type == 'CHQ') {
|
||||
print '<div class="opacitymedium">'.$langs->trans("NoWaitingChecks").'</div><br>';
|
||||
} else {
|
||||
print '<div class="opacitymedium">'.$langs->trans("NoWaitingPaymentForDeposit", $labeltype).'</div><br>';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -459,9 +509,11 @@ if ($action == 'new') {
|
||||
';
|
||||
|
||||
$num = $db->num_rows($resql);
|
||||
|
||||
print '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
print '<input type="hidden" name="action" value="create">';
|
||||
print '<input type="hidden" name="type" value="'.$type.'">';
|
||||
print '<input type="hidden" name="accountid" value="'.$bid.'">';
|
||||
|
||||
$moreforfilter = '';
|
||||
@ -469,11 +521,17 @@ if ($action == 'new') {
|
||||
print '<table class="tagtable liste'.($moreforfilter ? " listwithfilterbefore" : "").'">'."\n";
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td>'.$langs->trans("DateChequeReceived").'</td>'."\n";
|
||||
print '<td>';
|
||||
if ($type == 'CHQ') {
|
||||
print $langs->trans("DateChequeReceived");
|
||||
} else {
|
||||
print $langs->trans("DatePaymentForDepositReceived", $type);
|
||||
}
|
||||
print '</td>'."\n";
|
||||
print '<td>'.$langs->trans("ChequeNumber")."</td>\n";
|
||||
print '<td>'.$langs->trans("CheckTransmitter")."</td>\n";
|
||||
print '<td>'.$langs->trans("Bank")."</td>\n";
|
||||
print '<td>'.$langs->trans("Amount")."</td>\n";
|
||||
print '<td class="right">'.$langs->trans("Amount")."</td>\n";
|
||||
print '<td class="center">'.$langs->trans("Payment")."</td>\n";
|
||||
print '<td class="center">'.$langs->trans("LineRecord")."</td>\n";
|
||||
print '<td class="center">'.$langs->trans("Select")."<br>";
|
||||
@ -541,7 +599,13 @@ if ($action == 'new') {
|
||||
$linkback = '<a href="'.DOL_URL_ROOT.'/compta/paiement/cheque/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
|
||||
|
||||
$morehtmlref = '';
|
||||
dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref);
|
||||
$morehtmlleft = '';
|
||||
$moreghtmlright = '';
|
||||
|
||||
$labelval = ($langs->trans("PaymentType".$object->type) != "PaymentType".$object->type ? $langs->trans("PaymentType".$object->type) : $object->type);
|
||||
$morehtmlref = '<br><div class="refidno">'.$langs->trans("Type").' : '.$labelval.'</div>';
|
||||
|
||||
dol_banner_tab($object, 'ref', $linkback, 1, 'ref', 'ref', $morehtmlref, '', 0, $morehtmlleft, '', 0, $moreghtmlright);
|
||||
|
||||
|
||||
print '<div class="fichecenter">';
|
||||
@ -632,7 +696,7 @@ if ($action == 'new') {
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."bank as b ON (b.fk_account = ba.rowid)";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."paiement as p ON p.fk_bank = b.rowid";
|
||||
$sql .= " WHERE ba.entity IN (".getEntity('bank_account').")";
|
||||
$sql .= " AND b.fk_type= 'CHQ'";
|
||||
$sql .= " AND b.fk_type= '".$db->escape($object->type)."'";
|
||||
$sql .= " AND b.fk_bordereau = ".((int) $object->id);
|
||||
$sql .= $db->order($sortfield, $sortorder);
|
||||
|
||||
@ -706,9 +770,9 @@ if ($action == 'new') {
|
||||
$i++;
|
||||
}
|
||||
} else {
|
||||
print '<td colspan="8" class="opacitymedium">';
|
||||
print '<td colspan="9"><span class="opacitymedium">';
|
||||
print $langs->trans("None");
|
||||
print '</td>';
|
||||
print '</span></td>';
|
||||
}
|
||||
|
||||
print "</table>";
|
||||
|
||||
@ -53,6 +53,8 @@ class RemiseCheque extends CommonObject
|
||||
//! Numero d'erreur Plage 1024-1279
|
||||
public $errno;
|
||||
|
||||
public $type = 'CHQ'; // 'CHQ', 'TRA', ...
|
||||
|
||||
public $amount;
|
||||
public $date_bordereau;
|
||||
public $account_id;
|
||||
@ -92,9 +94,9 @@ class RemiseCheque extends CommonObject
|
||||
{
|
||||
global $conf;
|
||||
|
||||
$sql = "SELECT bc.rowid, bc.datec, bc.fk_user_author, bc.fk_bank_account, bc.amount, bc.ref, bc.statut, bc.nbcheque, bc.ref_ext";
|
||||
$sql .= ", bc.date_bordereau as date_bordereau";
|
||||
$sql .= ", ba.label as account_label";
|
||||
$sql = "SELECT bc.rowid, bc.datec, bc.fk_user_author, bc.fk_bank_account, bc.amount, bc.ref, bc.statut, bc.nbcheque, bc.ref_ext,";
|
||||
$sql .= " bc.date_bordereau as date_bordereau, bc.type,";
|
||||
$sql .= " ba.label as account_label";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bordereau_cheque as bc";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."bank_account as ba ON bc.fk_bank_account = ba.rowid";
|
||||
$sql .= " WHERE bc.entity = ".$conf->entity;
|
||||
@ -118,6 +120,7 @@ class RemiseCheque extends CommonObject
|
||||
$this->nbcheque = $obj->nbcheque;
|
||||
$this->statut = $obj->statut;
|
||||
$this->ref_ext = $obj->ref_ext;
|
||||
$this->type = $obj->type;
|
||||
|
||||
if ($this->statut == 0) {
|
||||
$this->ref = "(PROV".$this->id.")";
|
||||
@ -154,6 +157,11 @@ class RemiseCheque extends CommonObject
|
||||
|
||||
dol_syslog("RemiseCheque::Create start", LOG_DEBUG);
|
||||
|
||||
// Clean parameters
|
||||
if (empty($this->type)) {
|
||||
$this->type = 'CHQ';
|
||||
}
|
||||
|
||||
$this->db->begin();
|
||||
|
||||
$sql = "INSERT INTO ".MAIN_DB_PREFIX."bordereau_cheque (";
|
||||
@ -167,6 +175,7 @@ class RemiseCheque extends CommonObject
|
||||
$sql .= ", entity";
|
||||
$sql .= ", nbcheque";
|
||||
$sql .= ", ref_ext";
|
||||
$sql .= ", type";
|
||||
$sql .= ") VALUES (";
|
||||
$sql .= "'".$this->db->idate($now)."'";
|
||||
$sql .= ", '".$this->db->idate($now)."'";
|
||||
@ -178,6 +187,7 @@ class RemiseCheque extends CommonObject
|
||||
$sql .= ", ".((int) $conf->entity);
|
||||
$sql .= ", 0";
|
||||
$sql .= ", ''";
|
||||
$sql .= ", '".$this->db->escape($this->type)."'";
|
||||
$sql .= ")";
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
@ -205,7 +215,7 @@ class RemiseCheque extends CommonObject
|
||||
if ($this->id > 0 && $this->errno == 0) {
|
||||
$sql = "SELECT b.rowid";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
|
||||
$sql .= " WHERE b.fk_type = 'CHQ'";
|
||||
$sql .= " WHERE b.fk_type = '".$this->db->escape($this->type)."'";
|
||||
$sql .= " AND b.amount > 0";
|
||||
$sql .= " AND b.fk_bordereau = 0";
|
||||
$sql .= " AND b.fk_account = ".((int) $account_id);
|
||||
@ -278,9 +288,9 @@ class RemiseCheque extends CommonObject
|
||||
}
|
||||
|
||||
/**
|
||||
* Supprime la remise en base
|
||||
* Delete deposit from database
|
||||
*
|
||||
* @param User $user Utilisateur qui effectue l'operation
|
||||
* @param User $user User that delete
|
||||
* @return int
|
||||
*/
|
||||
public function delete($user = '')
|
||||
@ -464,10 +474,11 @@ class RemiseCheque extends CommonObject
|
||||
/**
|
||||
* Load indicators for dashboard (this->nbtodo and this->nbtodolate)
|
||||
*
|
||||
* @param User $user Objet user
|
||||
* @param User $user Objet user
|
||||
* @param string $type Type of payment mode deposit ('CHQ', 'TRA', ...)
|
||||
* @return WorkboardResponse|int <0 if KO, WorkboardResponse if OK
|
||||
*/
|
||||
public function load_board($user)
|
||||
public function load_board($user, $type = 'CHQ')
|
||||
{
|
||||
// phpcs:enable
|
||||
global $conf, $langs;
|
||||
@ -481,7 +492,7 @@ class RemiseCheque extends CommonObject
|
||||
$sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
|
||||
$sql .= " WHERE b.fk_account = ba.rowid";
|
||||
$sql .= " AND ba.entity IN (".getEntity('bank_account').")";
|
||||
$sql .= " AND b.fk_type = 'CHQ'";
|
||||
$sql .= " AND b.fk_type = '".$this->db->escape($type)."'";
|
||||
$sql .= " AND b.fk_bordereau = 0";
|
||||
$sql .= " AND b.amount > 0";
|
||||
|
||||
@ -518,9 +529,10 @@ class RemiseCheque extends CommonObject
|
||||
/**
|
||||
* Charge indicateurs this->nb de tableau de bord
|
||||
*
|
||||
* @return int <0 if ko, >0 if ok
|
||||
* @param string $type Type of payment mode deposit ('CHQ', 'TRA', ...)
|
||||
* @return int <0 if ko, >0 if ok
|
||||
*/
|
||||
public function load_state_board()
|
||||
public function load_state_board($type = 'CHQ')
|
||||
{
|
||||
// phpcs:enable
|
||||
global $user;
|
||||
@ -534,7 +546,7 @@ class RemiseCheque extends CommonObject
|
||||
$sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
|
||||
$sql .= " WHERE b.fk_account = ba.rowid";
|
||||
$sql .= " AND ba.entity IN (".getEntity('bank_account').")";
|
||||
$sql .= " AND b.fk_type = 'CHQ'";
|
||||
$sql .= " AND b.fk_type = '".$this->db->escape($type)."'";
|
||||
$sql .= " AND b.amount > 0";
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
@ -615,7 +627,7 @@ class RemiseCheque extends CommonObject
|
||||
|
||||
// We save charset_output to restore it because write_file can change it if needed for
|
||||
// output format that does not support UTF8.
|
||||
$sav_charseSupprimert_output = $outputlangs->charset_output;
|
||||
$sav_charset_output = $outputlangs->charset_output;
|
||||
|
||||
$result = $docmodel->write_file($this, $conf->bank->dir_output.'/checkdeposits', $this->ref, $outputlangs);
|
||||
if ($result > 0) {
|
||||
@ -664,7 +676,7 @@ class RemiseCheque extends CommonObject
|
||||
$sql .= " SET amount = ".price2num($total);
|
||||
$sql .= ", nbcheque = ".((int) $nb);
|
||||
$sql .= " WHERE rowid = ".((int) $this->id);
|
||||
$sql .= " AND entity = ".$conf->entity;
|
||||
$sql .= " AND entity = ".((int) $conf->entity);
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if (!$resql) {
|
||||
@ -813,7 +825,7 @@ class RemiseCheque extends CommonObject
|
||||
|
||||
$sql = "SELECT MAX(rowid)";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bordereau_cheque";
|
||||
$sql .= " WHERE rowid < ".$this->id;
|
||||
$sql .= " WHERE rowid < ".((int) $this->id);
|
||||
$sql .= " AND entity = ".$conf->entity;
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
@ -825,7 +837,7 @@ class RemiseCheque extends CommonObject
|
||||
|
||||
$sql = "SELECT MIN(rowid)";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bordereau_cheque";
|
||||
$sql .= " WHERE rowid > ".$this->id;
|
||||
$sql .= " WHERE rowid > ".((int) $this->id);
|
||||
$sql .= " AND entity = ".$conf->entity;
|
||||
|
||||
$result = $this->db->query($sql);
|
||||
@ -1032,6 +1044,8 @@ class RemiseCheque extends CommonObject
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -1039,6 +1053,7 @@ class RemiseCheque extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
|
||||
if (property_exists($this, 'date_bordereau')) {
|
||||
$return .= '<br><span class="opacitymedium">'.$langs->trans("DateCreation").'</span> : <span class="info-box-label">'.dol_print_date($this->db->jdate($this->date_bordereau), 'day').'</span>';
|
||||
|
||||
@ -43,6 +43,10 @@ $result = restrictedArea($user, 'banque', '', '');
|
||||
|
||||
$usercancreate = $user->hasRight('banque', 'cheque');
|
||||
|
||||
// List of payment mode to support
|
||||
// Example: BANK_PAYMENT_MODES_FOR_DEPOSIT_MANAGEMENT = 'CHQ','TRA'
|
||||
$arrayofpaymentmodetomanage = explode(',', getDolGlobalString('BANK_PAYMENT_MODES_FOR_DEPOSIT_MANAGEMENT', 'CHQ'));
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
@ -55,47 +59,61 @@ $usercancreate = $user->hasRight('banque', 'cheque');
|
||||
* View
|
||||
*/
|
||||
|
||||
llxHeader('', $langs->trans("ChequesArea"));
|
||||
if (getDolGlobalString('BANK_PAYMENT_MODES_FOR_DEPOSIT_MANAGEMENT', 'CHQ') == 'CHQ') {
|
||||
$title = $langs->trans("ChequesArea");
|
||||
} else {
|
||||
$title = $langs->trans("DocumentsDepositArea");
|
||||
}
|
||||
|
||||
llxHeader('', $title);
|
||||
|
||||
$newcardbutton = '';
|
||||
if ($usercancreate) {
|
||||
$newcardbutton .= dolGetButtonTitle($langs->trans('NewDeposit'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/compta/paiement/cheque/card.php?action=new');
|
||||
}
|
||||
|
||||
print load_fiche_titre($langs->trans("ChequesArea"), $newcardbutton, $checkdepositstatic->picto);
|
||||
print load_fiche_titre($title, $newcardbutton, $checkdepositstatic->picto);
|
||||
|
||||
print '<div class="fichecenter"><div class="fichethirdleft">';
|
||||
|
||||
$sql = "SELECT count(b.rowid) as nb";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
|
||||
$sql .= " WHERE ba.rowid = b.fk_account";
|
||||
$sql .= " AND ba.entity IN (".getEntity('bank_account').")";
|
||||
$sql .= " AND b.fk_type = 'CHQ'";
|
||||
$sql .= " AND b.fk_bordereau = 0";
|
||||
$sql .= " AND b.amount > 0";
|
||||
|
||||
$resql = $db->query($sql);
|
||||
|
||||
print '<div class="div-table-responsive-no-min">';
|
||||
print '<table class="noborder centpercent">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<th colspan="2">'.$langs->trans("BankChecks")."</th>\n";
|
||||
print '<th colspan="2">'.$langs->trans("DocumentsForDeposit")."</th>\n";
|
||||
print "</tr>\n";
|
||||
|
||||
if ($resql) {
|
||||
$num = '';
|
||||
if ($obj = $db->fetch_object($resql)) {
|
||||
$num = $obj->nb;
|
||||
foreach ($arrayofpaymentmodetomanage as $val) {
|
||||
$sql = "SELECT count(b.rowid) as nb";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bank as b";
|
||||
$sql .= ", ".MAIN_DB_PREFIX."bank_account as ba";
|
||||
$sql .= " WHERE ba.rowid = b.fk_account";
|
||||
$sql .= " AND ba.entity IN (".getEntity('bank_account').")";
|
||||
$sql .= " AND b.fk_type = '".$db->escape($val)."'";
|
||||
$sql .= " AND b.fk_bordereau = 0";
|
||||
$sql .= " AND b.amount > 0";
|
||||
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$num = '';
|
||||
if ($obj = $db->fetch_object($resql)) {
|
||||
$num = $obj->nb;
|
||||
}
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>';
|
||||
if ($val == 'CHQ') {
|
||||
print $langs->trans("BankChecks");
|
||||
} else {
|
||||
print ($langs->trans("PaymentType".$val) != "PaymentType".$val ? $langs->trans("PaymentType".$val) : $langs->trans("PaymentMode").' '.$val);
|
||||
}
|
||||
print '</td>';
|
||||
print '<td class="right">';
|
||||
print '<a class="badge badge-info" href="'.DOL_URL_ROOT.'/compta/paiement/cheque/card.php?leftmenu=customers_bills_checks&action=new&type='.urlencode($val).'">'.dol_escape_htmltag($num).'</a>';
|
||||
print '</td></tr>';
|
||||
} else {
|
||||
dol_print_error($db);
|
||||
}
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("BankChecksToReceipt").'</td>';
|
||||
print '<td class="right">';
|
||||
print '<a class="badge badge-info" href="'.DOL_URL_ROOT.'/compta/paiement/cheque/card.php?leftmenu=customers_bills_checks&action=new">'.$num.'</a>';
|
||||
print '</td></tr>';
|
||||
} else {
|
||||
dol_print_error($db);
|
||||
}
|
||||
|
||||
print "</table></div>\n";
|
||||
|
||||
|
||||
@ -103,64 +121,79 @@ print '</div><div class="fichetwothirdright">';
|
||||
|
||||
$max = 10;
|
||||
|
||||
$sql = "SELECT bc.rowid, bc.date_bordereau as db, bc.amount, bc.ref as ref,";
|
||||
$sql .= " bc.statut, bc.nbcheque,";
|
||||
$sql .= " ba.ref as bref, ba.label, ba.rowid as bid, ba.number, ba.currency_code, ba.account_number, ba.fk_accountancy_journal,";
|
||||
$sql .= " aj.code";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bordereau_cheque as bc, ".MAIN_DB_PREFIX."bank_account as ba";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_journal as aj ON aj.rowid = ba.fk_accountancy_journal";
|
||||
$sql .= " WHERE ba.rowid = bc.fk_bank_account";
|
||||
$sql .= " AND bc.entity = ".$conf->entity;
|
||||
$sql .= " ORDER BY bc.date_bordereau DESC, rowid DESC";
|
||||
$sql .= $db->plimit($max);
|
||||
foreach ($arrayofpaymentmodetomanage as $val) {
|
||||
$sql = "SELECT bc.rowid, bc.date_bordereau as db, bc.amount, bc.ref as ref,";
|
||||
$sql .= " bc.statut, bc.nbcheque, bc.type,";
|
||||
$sql .= " ba.ref as bref, ba.label, ba.rowid as bid, ba.number, ba.currency_code, ba.account_number, ba.fk_accountancy_journal,";
|
||||
$sql .= " aj.code";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bordereau_cheque as bc, ".MAIN_DB_PREFIX."bank_account as ba";
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX."accounting_journal as aj ON aj.rowid = ba.fk_accountancy_journal";
|
||||
$sql .= " WHERE ba.rowid = bc.fk_bank_account";
|
||||
$sql .= " AND bc.entity = ".((int) $conf->entity);
|
||||
$sql .= " AND bc.type = '".$db->escape($val)."'";
|
||||
$sql .= " ORDER BY bc.date_bordereau DESC, rowid DESC";
|
||||
$sql .= $db->plimit($max);
|
||||
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
print '<div class="div-table-responsive-no-min">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
|
||||
print '<table class="noborder centpercent">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<th>'.$langs->trans("LastCheckReceiptShort", $max).'</th>';
|
||||
print '<th>'.$langs->trans("Date")."</th>";
|
||||
print '<th>'.$langs->trans("Account").'</th>';
|
||||
print '<th class="right">'.$langs->trans("NbOfCheques").'</th>';
|
||||
print '<th class="right">'.$langs->trans("Amount").'</th>';
|
||||
print '<th class="right">'.$langs->trans("Status").'</th>';
|
||||
print "</tr>\n";
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
print '<div class="div-table-responsive-no-min">'; // You can use div-table-responsive-no-min if you dont need reserved height for your table
|
||||
print '<table class="noborder centpercent">';
|
||||
print '<tr class="liste_titre">';
|
||||
print '<th>';
|
||||
if ($val == 'CHQ') {
|
||||
print $langs->trans("LastCheckReceiptShort", $max);
|
||||
} else {
|
||||
$labelpaymentmode = ($langs->trans("PaymentType".$val) != "PaymentType".$val ? $langs->trans("PaymentType".$val) : $val);
|
||||
print $langs->trans("LastPaymentForDepositShort", $max, $labelpaymentmode);
|
||||
}
|
||||
print '</th>';
|
||||
print '<th>'.$langs->trans("Date")."</th>";
|
||||
print '<th>'.$langs->trans("Account").'</th>';
|
||||
print '<th class="right">'.$langs->trans("NbOfCheques").'</th>';
|
||||
print '<th class="right">'.$langs->trans("Amount").'</th>';
|
||||
print '<th class="right">'.$langs->trans("Status").'</th>';
|
||||
print "</tr>\n";
|
||||
|
||||
while ($objp = $db->fetch_object($resql)) {
|
||||
$checkdepositstatic->id = $objp->rowid;
|
||||
$checkdepositstatic->ref = ($objp->ref ? $objp->ref : $objp->rowid);
|
||||
$checkdepositstatic->statut = $objp->statut;
|
||||
$i = 0;
|
||||
while ($objp = $db->fetch_object($resql)) {
|
||||
$i++;
|
||||
|
||||
$accountstatic->id = $objp->bid;
|
||||
$accountstatic->ref = $objp->bref;
|
||||
$accountstatic->label = $objp->label;
|
||||
$accountstatic->number = $objp->number;
|
||||
$accountstatic->currency_code = $objp->currency_code;
|
||||
$accountstatic->account_number = $objp->account_number;
|
||||
$accountstatic->accountancy_journal = $objp->code;
|
||||
$accountstatic->fk_accountancy_journal = $objp->fk_accountancy_journal;
|
||||
$checkdepositstatic->id = $objp->rowid;
|
||||
$checkdepositstatic->ref = ($objp->ref ? $objp->ref : $objp->rowid);
|
||||
$checkdepositstatic->statut = $objp->statut;
|
||||
|
||||
print '<tr class="oddeven">'."\n";
|
||||
$accountstatic->id = $objp->bid;
|
||||
$accountstatic->ref = $objp->bref;
|
||||
$accountstatic->label = $objp->label;
|
||||
$accountstatic->number = $objp->number;
|
||||
$accountstatic->currency_code = $objp->currency_code;
|
||||
$accountstatic->account_number = $objp->account_number;
|
||||
$accountstatic->accountancy_journal = $objp->code;
|
||||
$accountstatic->fk_accountancy_journal = $objp->fk_accountancy_journal;
|
||||
|
||||
print '<td class="nowraponall">'.$checkdepositstatic->getNomUrl(1).'</td>';
|
||||
print '<td>'.dol_print_date($db->jdate($objp->db), 'day').'</td>';
|
||||
print '<td class="nowraponall">'.$accountstatic->getNomUrl(1).'</td>';
|
||||
print '<td class="right">'.$objp->nbcheque.'</td>';
|
||||
print '<td class="right"><span class="amount">'.price($objp->amount).'</span></td>';
|
||||
print '<td class="right">'.$checkdepositstatic->LibStatut($objp->statut, 3).'</td>';
|
||||
print '<tr class="oddeven">'."\n";
|
||||
|
||||
print '</tr>';
|
||||
print '<td class="nowraponall">'.$checkdepositstatic->getNomUrl(1).'</td>';
|
||||
print '<td>'.dol_print_date($db->jdate($objp->db), 'day').'</td>';
|
||||
print '<td class="nowraponall">'.$accountstatic->getNomUrl(1).'</td>';
|
||||
print '<td class="right">'.$objp->nbcheque.'</td>';
|
||||
print '<td class="right"><span class="amount">'.price($objp->amount).'</span></td>';
|
||||
print '<td class="right">'.$checkdepositstatic->LibStatut($objp->statut, 3).'</td>';
|
||||
|
||||
print '</tr>';
|
||||
}
|
||||
if ($i == 0) {
|
||||
print '<tr><td colspan="6"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
|
||||
}
|
||||
print "</table>";
|
||||
print '</div>';
|
||||
|
||||
$db->free($resql);
|
||||
} else {
|
||||
dol_print_error($db);
|
||||
}
|
||||
print "</table>";
|
||||
print '</div>';
|
||||
|
||||
$db->free($resql);
|
||||
} else {
|
||||
dol_print_error($db);
|
||||
}
|
||||
|
||||
|
||||
print '</div></div>';
|
||||
|
||||
// End of page
|
||||
|
||||
@ -73,6 +73,16 @@ $formother = new FormOther($db);
|
||||
$checkdepositstatic = new RemiseCheque($db);
|
||||
$accountstatic = new Account($db);
|
||||
|
||||
// List of payment mode to support
|
||||
// Example: BANK_PAYMENT_MODES_FOR_DEPOSIT_MANAGEMENT = 'CHQ','TRA'
|
||||
$arrayofpaymentmodetomanage = explode(',', getDolGlobalString('BANK_PAYMENT_MODES_FOR_DEPOSIT_MANAGEMENT', 'CHQ'));
|
||||
|
||||
$arrayoflabels = array();
|
||||
foreach ($arrayofpaymentmodetomanage as $key => $val) {
|
||||
$labelval = ($langs->trans("PaymentType".$val) != "PaymentType".$val ? $langs->trans("PaymentType".$val) : $val);
|
||||
$arrayoflabels[$key] = $labelval;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
@ -93,10 +103,10 @@ if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x'
|
||||
* View
|
||||
*/
|
||||
|
||||
llxHeader('', $langs->trans("ChequesReceipts"));
|
||||
llxHeader('', $langs->trans("ChequeDeposits"));
|
||||
|
||||
$sql = "SELECT bc.rowid, bc.ref, bc.date_bordereau,";
|
||||
$sql .= " bc.nbcheque, bc.amount, bc.statut,";
|
||||
$sql .= " bc.nbcheque, bc.amount, bc.statut, bc.type,";
|
||||
$sql .= " ba.rowid as bid, ba.label";
|
||||
|
||||
$sqlfields = $sql; // $sql fields to remove for count total
|
||||
@ -104,7 +114,7 @@ $sqlfields = $sql; // $sql fields to remove for count total
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."bordereau_cheque as bc,";
|
||||
$sql .= " ".MAIN_DB_PREFIX."bank_account as ba";
|
||||
$sql .= " WHERE bc.fk_bank_account = ba.rowid";
|
||||
$sql .= " AND bc.entity = ".$conf->entity;
|
||||
$sql .= " AND bc.entity = ".((int) $conf->entity);
|
||||
|
||||
// Search criteria
|
||||
if ($search_ref) {
|
||||
@ -191,10 +201,13 @@ if ($resql) {
|
||||
|
||||
// Fields title search
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td class="liste_titre" align="left">';
|
||||
print '<td class="liste_titre">';
|
||||
print '<input class="flat" type="text" size="4" name="search_ref" value="'.$search_ref.'">';
|
||||
print '</td>';
|
||||
print '<td class="liste_titre" align="center">';
|
||||
// Type
|
||||
print '<td class="liste_titre">';
|
||||
print '</td>';
|
||||
print '<td class="liste_titre center">';
|
||||
if (!empty($conf->global->MAIN_LIST_FILTER_ON_DAY)) {
|
||||
print '<input class="flat" type="text" size="1" maxlength="2" name="day" value="'.$day.'">';
|
||||
}
|
||||
@ -217,6 +230,7 @@ if ($resql) {
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
print_liste_field_titre("Ref", $_SERVER["PHP_SELF"], "bc.ref", "", $param, "", $sortfield, $sortorder);
|
||||
print_liste_field_titre("Type", $_SERVER["PHP_SELF"], "bc.type", "", $param, "", $sortfield, $sortorder);
|
||||
print_liste_field_titre("DateCreation", $_SERVER["PHP_SELF"], "bc.date_bordereau", "", $param, 'align="center"', $sortfield, $sortorder);
|
||||
print_liste_field_titre("Account", $_SERVER["PHP_SELF"], "ba.label", "", $param, "", $sortfield, $sortorder);
|
||||
print_liste_field_titre("NbOfCheques", $_SERVER["PHP_SELF"], "bc.nbcheque", "", $param, 'class="right"', $sortfield, $sortorder);
|
||||
@ -236,6 +250,7 @@ if ($resql) {
|
||||
$checkdepositstatic->nbcheque = $objp->nbcheque;
|
||||
$checkdepositstatic->amount = $objp->amount;
|
||||
$checkdepositstatic->date_bordereau = $objp->date_bordereau;
|
||||
$checkdepositstatic->type = $objp->type;
|
||||
|
||||
$account = new Account($db);
|
||||
$account->fetch($objp->bid);
|
||||
@ -257,12 +272,15 @@ if ($resql) {
|
||||
|
||||
// Num ref cheque
|
||||
print '<td>';
|
||||
|
||||
print $checkdepositstatic->getNomUrl(1);
|
||||
print '</td>';
|
||||
|
||||
// Type
|
||||
$labelpaymentmode = ($langs->transnoentitiesnoconv("PaymentType".$checkdepositstatic->type) != "PaymentType".$checkdepositstatic->type ? $langs->transnoentitiesnoconv("PaymentType".$checkdepositstatic->type) : $checkdepositstatic->type);
|
||||
print '<td>'.dol_escape_htmltag($labelpaymentmode).'</td>';
|
||||
|
||||
// Date
|
||||
print '<td class="center">'.dol_print_date($db->jdate($objp->date_bordereau), 'day').'</td>'; // TODO Use date hour
|
||||
print '<td class="center">'.dol_print_date($db->jdate($objp->date_bordereau), 'dayhour', 'tzuser').'</td>';
|
||||
|
||||
// Bank
|
||||
print '<td>';
|
||||
|
||||
@ -426,6 +426,7 @@ class BonPrelevement extends CommonObject
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
/**
|
||||
* Set direct debit or credit transfer order to "paid" status.
|
||||
* Then create the payment for each invoice of the prelemevement_bon.
|
||||
*
|
||||
* @param User $user Id of user
|
||||
* @param int $date date of action
|
||||
@ -1317,6 +1318,9 @@ class BonPrelevement extends CommonObject
|
||||
$label = img_picto('', $this->picto).' <u>'.$langs->trans($labeltoshow).'</u> '.$this->getLibStatut(5);
|
||||
$label .= '<br>';
|
||||
$label .= '<b>'.$langs->trans('Ref').':</b> '.$this->ref;
|
||||
if (isset($this->amount)) {
|
||||
$label .= '<br><b>'.$langs->trans("Amount").":</b> ".price($this->amount);
|
||||
}
|
||||
if (isset($this->date_trans)) {
|
||||
$label .= '<br><b>'.$langs->trans("TransData").":</b> ".dol_print_date($this->date_trans, 'dayhour', 'tzuserrel');
|
||||
}
|
||||
@ -2524,6 +2528,8 @@ class BonPrelevement extends CommonObject
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -2531,6 +2537,7 @@ class BonPrelevement extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
|
||||
if (property_exists($this, 'date_echeance')) {
|
||||
$return .= '<br><span class="opacitymedium">'.$langs->trans("Date").'</span> : <span class="info-box-label">'.dol_print_date($this->db->jdate($this->date_echeance), 'day').'</span>';
|
||||
|
||||
@ -761,6 +761,8 @@ class ChargeSociales extends CommonObject
|
||||
{
|
||||
global $conf, $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -768,6 +770,7 @@ class ChargeSociales extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref valignmiddle">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(0) : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'label')) {
|
||||
$return .= ' <div class="inline-block opacitymedium valignmiddle tdoverflowmax100">'.$this->label.'</div>';
|
||||
}
|
||||
|
||||
@ -917,6 +917,9 @@ class Tva extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -925,6 +928,7 @@ class Tva extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'amount')) {
|
||||
$return .= ' | <span class="opacitymedium">'.$langs->trans("Amount").'</span> : <span class="info-box-label amount">'.price($this->amount).'</span>';
|
||||
}
|
||||
|
||||
@ -1868,7 +1868,7 @@ class Contact extends CommonObject
|
||||
* Updates all roles (default contact for companies) according to values inside the ->roles array.
|
||||
* This is called by update of contact.
|
||||
*
|
||||
* @return float|int
|
||||
* @return int
|
||||
* @see fetchRoles()
|
||||
*/
|
||||
public function updateRoles()
|
||||
@ -1878,7 +1878,7 @@ class Contact extends CommonObject
|
||||
$error = 0;
|
||||
|
||||
if (!isset($this->roles)) {
|
||||
return; // Avoid to loose roles when property not set
|
||||
return 0; // Avoid to loose roles when property not set
|
||||
}
|
||||
|
||||
$this->db->begin();
|
||||
@ -2177,6 +2177,9 @@ class Contact extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -2189,6 +2192,7 @@ class Contact extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<div class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</div>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
|
||||
if (property_exists($this, 'thirdparty') && is_object($this->thirdparty)) {
|
||||
$return .= '<div class="info-box-ref opacitymedium tdoverflowmax150">'.$this->thirdparty->getNomUrl(1).'</div>';
|
||||
|
||||
@ -64,7 +64,7 @@ if ($user->socid) {
|
||||
}
|
||||
$result = restrictedArea($user, 'contact', $contactid, '');
|
||||
|
||||
$sall = trim((GETPOST('search_all', 'alphanohtml') != '') ?GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml'));
|
||||
$search_all = trim((GETPOST('search_all', 'alphanohtml') != '') ?GETPOST('search_all', 'alphanohtml') : GETPOST('sall', 'alphanohtml'));
|
||||
$search_cti = preg_replace('/^0+/', '', preg_replace('/[^0-9]/', '', GETPOST('search_cti', 'alphanohtml'))); // Phone number without any special chars
|
||||
$search_phone = GETPOST("search_phone", 'alpha');
|
||||
|
||||
@ -297,7 +297,7 @@ if (empty($reshook)) {
|
||||
|
||||
// Purge search criteria
|
||||
if (GETPOST('button_removefilter_x', 'alpha') || GETPOST('button_removefilter.x', 'alpha') || GETPOST('button_removefilter', 'alpha')) { // All tests are required to be compatible with all browsers
|
||||
$sall = "";
|
||||
$search_all = "";
|
||||
$search_id = '';
|
||||
$search_firstlast_only = "";
|
||||
$search_lastname = "";
|
||||
@ -430,7 +430,6 @@ $sql = preg_replace('/,\s*$/', '', $sql);
|
||||
|
||||
$sqlfields = $sql; // $sql fields to remove for count total
|
||||
|
||||
// SQL Table Aliase
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."socpeople as p";
|
||||
if (isset($extrafields->attributes[$object->table_element]['label']) && is_array($extrafields->attributes[$object->table_element]['label']) && count($extrafields->attributes[$object->table_element]['label'])) {
|
||||
$sql .= " LEFT JOIN ".MAIN_DB_PREFIX.$object->table_element."_extrafields as ef on (p.rowid = ef.fk_object)";
|
||||
@ -569,8 +568,8 @@ if (!empty($searchCategorySupplierList)) {
|
||||
}
|
||||
}
|
||||
|
||||
if ($sall) {
|
||||
$sql .= natural_search(array_keys($fieldstosearchall), $sall);
|
||||
if ($search_all) {
|
||||
$sql .= natural_search(array_keys($fieldstosearchall), $search_all);
|
||||
}
|
||||
if (strlen($search_phone)) {
|
||||
$sql .= natural_search(array('p.phone', 'p.phone_perso', 'p.phone_mobile'), $search_phone);
|
||||
@ -725,7 +724,7 @@ if (!$resql) {
|
||||
$num = $db->num_rows($resql);
|
||||
|
||||
// Direct jump if only one record found
|
||||
if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && ($sall != '' || $search_cti != '') && !$page) {
|
||||
if ($num == 1 && !empty($conf->global->MAIN_SEARCH_DIRECT_OPEN_IF_ONLY_ONE) && ($search_all != '' || $search_cti != '') && !$page) {
|
||||
$obj = $db->fetch_object($resql);
|
||||
$id = $obj->rowid;
|
||||
header("Location: ".DOL_URL_ROOT.'/contact/card.php?id='.$id);
|
||||
@ -750,7 +749,7 @@ if (!empty($contextpage) && $contextpage != $_SERVER["PHP_SELF"]) {
|
||||
if ($limit > 0 && $limit != $conf->liste_limit) {
|
||||
$param .= '&limit='.((int) $limit);
|
||||
}
|
||||
$param .= '&begin='.urlencode($begin).'&userid='.urlencode($userid).'&contactname='.urlencode($sall);
|
||||
$param .= '&begin='.urlencode($begin).'&userid='.urlencode($userid).'&contactname='.urlencode($search_all);
|
||||
$param .= '&type='.urlencode($type).'&view='.urlencode($view);
|
||||
if (!empty($search_categ) && $search_categ != '-1') {
|
||||
$param .= '&search_categ='.urlencode($search_categ);
|
||||
@ -761,8 +760,8 @@ if (!empty($search_categ_thirdparty) && $search_categ_thirdparty != '-1') {
|
||||
if (!empty($search_categ_supplier) && $search_categ_supplier != '-1') {
|
||||
$param .= '&search_categ_supplier='.urlencode($search_categ_supplier);
|
||||
}
|
||||
if ($sall != '') {
|
||||
$param .= '&sall='.urlencode($sall);
|
||||
if ($search_all != '') {
|
||||
$param .= '&search_all='.urlencode($search_all);
|
||||
}
|
||||
if ($search_id > 0) {
|
||||
$param .= "&search_id=".urlencode($search_id);
|
||||
@ -886,14 +885,14 @@ $objecttmp = new Contact($db);
|
||||
$trackid = 'ctc'.$object->id;
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/massactions_pre.tpl.php';
|
||||
|
||||
if ($sall) {
|
||||
if ($search_all) {
|
||||
$setupstring = '';
|
||||
foreach ($fieldstosearchall as $key => $val) {
|
||||
$fieldstosearchall[$key] = $langs->trans($val);
|
||||
$setupstring .= $key."=".$val.";";
|
||||
}
|
||||
print '<!-- Search done like if CONTACT_QUICKSEARCH_ON_FIELDS = '.$setupstring.' -->'."\n";
|
||||
print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $sall).join(', ', $fieldstosearchall).'</div>';
|
||||
print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $search_all).join(', ', $fieldstosearchall).'</div>';
|
||||
}
|
||||
if ($search_firstlast_only) {
|
||||
print '<div class="divsearchfieldfilter">'.$langs->trans("FilterOnInto", $search_firstlast_only).$langs->trans("Lastname").", ".$langs->trans("Firstname").'</div>';
|
||||
@ -955,7 +954,7 @@ print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwit
|
||||
print '<tr class="liste_titre_filter">';
|
||||
// Action column
|
||||
if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
|
||||
print '<td class="liste_titre maxwidthsearch center">';
|
||||
print '<td class="liste_titre center maxwidthsearch">';
|
||||
$searchpicto = $form->showFilterButtons('left');
|
||||
print $searchpicto;
|
||||
print '</td>';
|
||||
@ -1234,28 +1233,28 @@ if (!empty($arrayfields['p.fk_stcommcontact']['checked'])) {
|
||||
// Extra fields
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_title.tpl.php';
|
||||
// Hook fields
|
||||
$parameters = array(
|
||||
'arrayfields'=>$arrayfields,
|
||||
'param'=>$param,
|
||||
'sortfield'=>$sortfield,
|
||||
'sortorder'=>$sortorder,
|
||||
);
|
||||
$parameters = array('arrayfields'=>$arrayfields, 'param'=>$param, 'sortfield'=>$sortfield, 'sortorder'=>$sortorder, 'totalarray'=>&$totalarray);
|
||||
$reshook = $hookmanager->executeHooks('printFieldListTitle', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
print $hookmanager->resPrint;
|
||||
if (!empty($arrayfields['p.datec']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['p.datec']['label'], $_SERVER["PHP_SELF"], "p.datec", "", $param, '', $sortfield, $sortorder, 'center nowrap ');
|
||||
$totalarray['nbfield']++;
|
||||
}
|
||||
if (!empty($arrayfields['p.tms']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['p.tms']['label'], $_SERVER["PHP_SELF"], "p.tms", "", $param, '', $sortfield, $sortorder, 'center nowrap ');
|
||||
$totalarray['nbfield']++;
|
||||
}
|
||||
if (!empty($arrayfields['p.statut']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['p.statut']['label'], $_SERVER["PHP_SELF"], "p.statut", "", $param, '', $sortfield, $sortorder, 'center ');
|
||||
$totalarray['nbfield']++;
|
||||
}
|
||||
if (!empty($arrayfields['p.import_key']['checked'])) {
|
||||
print_liste_field_titre($arrayfields['p.import_key']['label'], $_SERVER["PHP_SELF"], "p.import_key", "", $param, '', $sortfield, $sortorder, 'center ');
|
||||
$totalarray['nbfield']++;
|
||||
}
|
||||
if (empty($conf->global->MAIN_CHECKBOX_LEFT_COLUMN)) {
|
||||
print_liste_field_titre($selectedfields, $_SERVER["PHP_SELF"], "", '', '', '', $sortfield, $sortorder, 'center maxwidthsearch ');
|
||||
$totalarray['nbfield']++;
|
||||
}
|
||||
print "</tr>\n";
|
||||
|
||||
@ -1291,7 +1290,7 @@ while ($i < $imaxinloop) {
|
||||
$contactstatic->country_code = $obj->country_code;
|
||||
$contactstatic->photo = $obj->photo;
|
||||
$contactstatic->import_key = $obj->import_key;
|
||||
|
||||
$contactstatic->photo = $obj->photo;
|
||||
$contactstatic->fk_prospectlevel = $obj->fk_prospectlevel;
|
||||
|
||||
if ($mode == 'kanban') {
|
||||
@ -1299,7 +1298,13 @@ while ($i < $imaxinloop) {
|
||||
print '<tr><td colspan="'.$savnbfield.'">';
|
||||
print '<div class="box-flex-container kanban">';
|
||||
}
|
||||
$contactstatic->photo = $obj->photo;
|
||||
// Output Kanban
|
||||
if ($massactionbutton || $massaction) { // If we are in select mode (massactionbutton defined) or if we have already selected and sent an action ($massaction) defined
|
||||
$selected = 0;
|
||||
if (in_array($object->id, $arrayofselected)) {
|
||||
$selected = 1;
|
||||
}
|
||||
}
|
||||
if ($obj->socid > 0) {
|
||||
$contactstatic->fetch_thirdparty($obj->socid);
|
||||
}
|
||||
@ -1549,7 +1554,7 @@ while ($i < $imaxinloop) {
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_print_fields.tpl.php';
|
||||
|
||||
// Fields from hook
|
||||
$parameters = array('arrayfields'=>$arrayfields, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray);
|
||||
$parameters = array('arrayfields'=>$arrayfields, 'object'=>$object, 'obj'=>$obj, 'i'=>$i, 'totalarray'=>&$totalarray);
|
||||
$reshook = $hookmanager->executeHooks('printFieldListValue', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
print $hookmanager->resPrint;
|
||||
// Date creation
|
||||
@ -1606,7 +1611,7 @@ while ($i < $imaxinloop) {
|
||||
}
|
||||
}
|
||||
|
||||
print "</tr>\n";
|
||||
print '</tr>'."\n";
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
|
||||
@ -1535,12 +1535,12 @@ if ($action == 'create') {
|
||||
if ($nbofservices > 1 && $conf->browser->layout != 'phone' && !empty($user->rights->contrat->creer)) {
|
||||
print '<td width="30" class="linecolmove tdlineupdown center">';
|
||||
if ($cursorline > 1) {
|
||||
print '<a class="lineupdown" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=up&token='.newToken().'&rowid='.$objp->rowid.'">';
|
||||
print '<a class="lineupdown reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=up&token='.newToken().'&rowid='.$objp->rowid.'">';
|
||||
echo img_up('default', 0, 'imgupforline');
|
||||
print '</a>';
|
||||
}
|
||||
if ($cursorline < $nbofservices) {
|
||||
print '<a class="lineupdown" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=down&token='.newToken().'&rowid='.$objp->rowid.'">';
|
||||
print '<a class="lineupdown reposition" href="'.$_SERVER["PHP_SELF"].'?id='.$object->id.'&action=down&token='.newToken().'&rowid='.$objp->rowid.'">';
|
||||
echo img_down('default', 0, 'imgdownforline');
|
||||
print '</a>';
|
||||
}
|
||||
|
||||
@ -758,7 +758,7 @@ class Contrat extends CommonObject
|
||||
*
|
||||
* @param int $only_services 0=Default, 1=Force only services (depending on setup, we may also have physical products in a contract)
|
||||
* @param int $loadalsotranslation 0=Default, 1=Load also translations of product descriptions
|
||||
* @return ContratLigne[] Return array of contract lines
|
||||
* @return array|int Return array of contract lines
|
||||
*/
|
||||
public function fetch_lines($only_services = 0, $loadalsotranslation = 0)
|
||||
{
|
||||
@ -2829,6 +2829,9 @@ class Contrat extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -2837,6 +2840,7 @@ class Contrat extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'societe')) {
|
||||
$return .= '<br><span class="info-box-label ">'.$this->societe.'</span>';
|
||||
}
|
||||
|
||||
69
htdocs/core/ajax/ajaxinvoiceline.php
Normal file
69
htdocs/core/ajax/ajaxinvoiceline.php
Normal file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
/* Copyright (C) 2022 Florian HENRY <florian.henry@scopen.fr>
|
||||
*
|
||||
* 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
|
||||
* the Free Software Foundation; either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* \file htdocs/core/ajax/ajaxinvoiceline.php
|
||||
* \brief File to load contacts combobox
|
||||
*/
|
||||
|
||||
if (!defined('NOTOKENRENEWAL')) {
|
||||
define('NOTOKENRENEWAL', '1'); // Disables token renewal
|
||||
}
|
||||
if (!defined('NOREQUIREMENU')) {
|
||||
define('NOREQUIREMENU', '1');
|
||||
}
|
||||
if (!defined('NOREQUIREAJAX')) {
|
||||
define('NOREQUIREAJAX', '1');
|
||||
}
|
||||
|
||||
// Load Dolibarr environment
|
||||
require '../../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formprojet.class.php';
|
||||
|
||||
$invoice_id = GETPOST('id', 'int'); // id of thirdparty
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$htmlname = GETPOST('htmlname', 'alpha');
|
||||
|
||||
|
||||
|
||||
// Security check
|
||||
restrictedArea($user, 'facture', $invoice_id, '', '', 'fk_soc', 'rowid');
|
||||
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
top_httphead();
|
||||
|
||||
//print '<!-- Ajax page called with url '.dol_escape_htmltag($_SERVER["PHP_SELF"]).'?'.dol_escape_htmltag($_SERVER["QUERY_STRING"]).' -->'."\n";
|
||||
|
||||
// Load original field value
|
||||
if (!empty($invoice_id) && !empty($action) && !empty($htmlname)) {
|
||||
$formProject = new FormProjets($db);
|
||||
|
||||
$return = array();
|
||||
if (empty($showempty)) {
|
||||
$showempty = 0;
|
||||
}
|
||||
|
||||
$return['value'] = $formProject->selectInvoiceAndLine($invoice_id, 0, 'invoiceid', 'invoicelineid', 'maxwidth500', array(), 1);
|
||||
//$return['num'] = $form->num;
|
||||
//$return['error'] = $form->error;
|
||||
|
||||
echo json_encode($return);
|
||||
}
|
||||
@ -432,7 +432,7 @@ class ModeleBoxes // Can't be abtract as it is instantiated to build "empty" box
|
||||
while (($file = readdir($handle)) !== false) {
|
||||
$reg = array();
|
||||
if (is_readable($newdir.'/'.$file) && preg_match('/^(.+)\.php/', $file, $reg)) {
|
||||
if (preg_match('/\.back$/', $file)) {
|
||||
if (preg_match('/\.back$/', $file) || preg_match('/^(.+)\.disabled\.php/', $file)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@ -889,7 +889,7 @@ abstract class CommonInvoice extends CommonObject
|
||||
{
|
||||
global $conf, $mysoc, $user, $langs;
|
||||
|
||||
if ($type != 'bank-transfer' && empty($conf->global->STRIPE_SEPA_DIRECT_DEBIT)) {
|
||||
if ($type != 'bank-transfer' && $type != 'credit-transfer' && empty($conf->global->STRIPE_SEPA_DIRECT_DEBIT)) {
|
||||
return 0;
|
||||
}
|
||||
if ($type != 'direct-debit' && empty($conf->global->STRIPE_SEPA_CREDIT_TRANSFER)) {
|
||||
@ -916,10 +916,10 @@ abstract class CommonInvoice extends CommonObject
|
||||
$sql = "SELECT rowid, date_demande, amount, fk_facture, fk_facture_fourn, fk_prelevement_bons";
|
||||
$sql .= " FROM ".$this->db->prefix()."prelevement_demande";
|
||||
$sql .= " WHERE rowid = ".((int) $did);
|
||||
if ($type != 'direct-debit') {
|
||||
if ($type != 'bank-transfer' && $type != 'credit-transfer') {
|
||||
$sql .= " AND fk_facture = ".((int) $this->id); // Add a protection to not pay another invoice than current one
|
||||
}
|
||||
if ($type != 'credit-transfer') {
|
||||
if ($type != 'direct-debit') {
|
||||
$sql .= " AND fk_facture_fourn = ".((int) $this->id); // Add a protection to not pay another invoice than current one
|
||||
}
|
||||
$sql .= " AND traite = 0"; // Add a protection to not process twice
|
||||
|
||||
@ -44,6 +44,8 @@ abstract class CommonOrder extends CommonObject
|
||||
{
|
||||
global $langs, $conf;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<div class="info-box-icon bg-infobox-action">';
|
||||
@ -51,6 +53,7 @@ abstract class CommonOrder extends CommonObject
|
||||
$return .= '</div>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
|
||||
if (property_exists($this, 'thirdparty') && is_object($this->thirdparty)) {
|
||||
$return .= '<br><div class="info-box-ref opacitymedium tdoverflowmax150">'.$this->thirdparty->getNomUrl(1).'</div>';
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -46,9 +46,9 @@ class FormProjets
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
* Constructor
|
||||
*
|
||||
* @param DoliDB $db Database handler
|
||||
* @param DoliDB $db Database handler
|
||||
*/
|
||||
public function __construct($db)
|
||||
{
|
||||
@ -56,26 +56,27 @@ class FormProjets
|
||||
}
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
|
||||
/**
|
||||
* Output a combo list with projects qualified for a third party / user
|
||||
* Output a combo list with projects qualified for a third party / user
|
||||
*
|
||||
* @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id)
|
||||
* @param string|Project $selected Id of preselected project or Project (or ''). Note: If you know the ref, you can also provide it into $selected_input_value to save one request in some cases.
|
||||
* @param string $htmlname Name of HTML field
|
||||
* @param int $maxlength Maximum length of label
|
||||
* @param int $option_only Return only html options lines without the select tag
|
||||
* @param int $show_empty Add an empty line
|
||||
* @param int $discard_closed Discard closed projects (0=Keep, 1=hide completely, 2=Disable). Use a negative value to not show the "discarded" tooltip.
|
||||
* @param int $forcefocus Force focus on field (works with javascript only)
|
||||
* @param int $disabled Disabled
|
||||
* @param int $mode 0 for HTML mode and 1 for JSON mode
|
||||
* @param string $filterkey Key to filter on ref or title
|
||||
* @param int $nooutput No print output. Return it only.
|
||||
* @param int $forceaddid Force to add project id in list, event if not qualified
|
||||
* @param string $morecss More css
|
||||
* @param int $htmlid Html id to use instead of htmlname
|
||||
* @param string $morefilter More filters (Must be a sql sanitized string)
|
||||
* @return string Return html content
|
||||
* @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id)
|
||||
* @param string|Project $selected Id of preselected project or Project (or ''). Note: If you know the ref, you can also provide it into $selected_input_value to save one request in some cases.
|
||||
* @param string $htmlname Name of HTML field
|
||||
* @param int $maxlength Maximum length of label
|
||||
* @param int $option_only Return only html options lines without the select tag
|
||||
* @param int $show_empty Add an empty line
|
||||
* @param int $discard_closed Discard closed projects (0=Keep, 1=hide completely, 2=Disable). Use a negative value to not show the "discarded" tooltip.
|
||||
* @param int $forcefocus Force focus on field (works with javascript only)
|
||||
* @param int $disabled Disabled
|
||||
* @param int $mode 0 for HTML mode and 1 for JSON mode
|
||||
* @param string $filterkey Key to filter on ref or title
|
||||
* @param int $nooutput No print output. Return it only.
|
||||
* @param int $forceaddid Force to add project id in list, event if not qualified
|
||||
* @param string $morecss More css
|
||||
* @param int $htmlid Html id to use instead of htmlname
|
||||
* @param string $morefilter More filters (Must be a sql sanitized string)
|
||||
* @return string Return html content
|
||||
*/
|
||||
public function select_projects($socid = -1, $selected = '', $htmlname = 'projectid', $maxlength = 16, $option_only = 0, $show_empty = 1, $discard_closed = 0, $forcefocus = 0, $disabled = 0, $mode = 0, $filterkey = '', $nooutput = 0, $forceaddid = 0, $morecss = '', $htmlid = '', $morefilter = '')
|
||||
{
|
||||
@ -94,18 +95,18 @@ class FormProjets
|
||||
$placeholder = '';
|
||||
|
||||
if ($selected && empty($selected_input_value)) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
|
||||
$project = new Project($this->db);
|
||||
$project->fetch($selected);
|
||||
$selected_input_value = $project->ref;
|
||||
}
|
||||
$urloption = 'socid='.((int) $socid).'&htmlname='.urlencode($htmlname).'&discardclosed='.((int) $discard_closed);
|
||||
$urloption = 'socid=' . ((int) $socid) . '&htmlname=' . urlencode($htmlname) . '&discardclosed=' . ((int) $discard_closed);
|
||||
if ($morefilter == 'usage_organize_event=1') {
|
||||
$urloption .= '&usage_organize_event=1';
|
||||
}
|
||||
$out .= '<input type="text" class="minwidth200'.($morecss ? ' '.$morecss : '').'" name="search_'.$htmlname.'" id="search_'.$htmlname.'" value="'.$selected_input_value.'"'.$placeholder.' />';
|
||||
$out .= '<input type="text" class="minwidth200' . ($morecss ? ' ' . $morecss : '') . '" name="search_' . $htmlname . '" id="search_' . $htmlname . '" value="' . $selected_input_value . '"' . $placeholder . ' />';
|
||||
|
||||
$out .= ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT.'/projet/ajax/projects.php', $urloption, $conf->global->PROJECT_USE_SEARCH_TO_SELECT, 0, array());
|
||||
$out .= ajax_autocompleter($selected, $htmlname, DOL_URL_ROOT . '/projet/ajax/projects.php', $urloption, $conf->global->PROJECT_USE_SEARCH_TO_SELECT, 0, array());
|
||||
} else {
|
||||
$out .= $this->select_projects_list($socid, $selected, $htmlname, $maxlength, $option_only, $show_empty, abs($discard_closed), $forcefocus, $disabled, 0, $filterkey, 1, $forceaddid, $htmlid, $morecss, $morefilter);
|
||||
}
|
||||
@ -124,33 +125,34 @@ class FormProjets
|
||||
}
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
|
||||
/**
|
||||
* Returns an array with projects qualified for a third party
|
||||
*
|
||||
* @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id)
|
||||
* @param int $selected Id project preselected
|
||||
* @param string $htmlname Nom de la zone html
|
||||
* @param int $maxlength Maximum length of label
|
||||
* @param int $option_only Return only html options lines without the select tag
|
||||
* @param int $show_empty Add an empty line
|
||||
* @param int $discard_closed Discard closed projects (0=Keep,1=hide completely,2=Disable)
|
||||
* @param int $forcefocus Force focus on field (works with javascript only)
|
||||
* @param int $disabled Disabled
|
||||
* @param int $mode 0 for HTML mode and 1 for array return (to be used by json_encode for example)
|
||||
* @param string $filterkey Key to filter on title or ref
|
||||
* @param int $nooutput No print output. Return it only.
|
||||
* @param int $forceaddid Force to add project id in list, event if not qualified
|
||||
* @param int $htmlid Html id to use instead of htmlname
|
||||
* @param string $morecss More CSS
|
||||
* @param string $morefilter More filters (Must be a sql sanitized string)
|
||||
* @return int Nb of project if OK, <0 if KO
|
||||
* @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id)
|
||||
* @param int $selected Id project preselected
|
||||
* @param string $htmlname Nom de la zone html
|
||||
* @param int $maxlength Maximum length of label
|
||||
* @param int $option_only Return only html options lines without the select tag
|
||||
* @param int $show_empty Add an empty line
|
||||
* @param int $discard_closed Discard closed projects (0=Keep,1=hide completely,2=Disable)
|
||||
* @param int $forcefocus Force focus on field (works with javascript only)
|
||||
* @param int $disabled Disabled
|
||||
* @param int $mode 0 for HTML mode and 1 for array return (to be used by json_encode for example)
|
||||
* @param string $filterkey Key to filter on title or ref
|
||||
* @param int $nooutput No print output. Return it only.
|
||||
* @param int $forceaddid Force to add project id in list, event if not qualified
|
||||
* @param int $htmlid Html id to use instead of htmlname
|
||||
* @param string $morecss More CSS
|
||||
* @param string $morefilter More filters (Must be a sql sanitized string)
|
||||
* @return int Nb of project if OK, <0 if KO
|
||||
*/
|
||||
public function select_projects_list($socid = -1, $selected = '', $htmlname = 'projectid', $maxlength = 24, $option_only = 0, $show_empty = 1, $discard_closed = 0, $forcefocus = 0, $disabled = 0, $mode = 0, $filterkey = '', $nooutput = 0, $forceaddid = 0, $htmlid = '', $morecss = 'maxwidth500', $morefilter = '')
|
||||
{
|
||||
// phpcs:enable
|
||||
global $user, $conf, $langs;
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
|
||||
|
||||
if (empty($htmlid)) {
|
||||
$htmlid = $htmlname;
|
||||
@ -172,26 +174,26 @@ class FormProjets
|
||||
|
||||
// Search all projects
|
||||
$sql = "SELECT p.rowid, p.ref, p.title, p.fk_soc, p.fk_statut, p.public, s.nom as name, s.name_alias";
|
||||
$sql .= " FROM ".$this->db->prefix()."projet as p LEFT JOIN ".$this->db->prefix()."societe as s ON s.rowid = p.fk_soc";
|
||||
$sql .= " WHERE p.entity IN (".getEntity('project').")";
|
||||
$sql .= " FROM " . $this->db->prefix() . "projet as p LEFT JOIN " . $this->db->prefix() . "societe as s ON s.rowid = p.fk_soc";
|
||||
$sql .= " WHERE p.entity IN (" . getEntity('project') . ")";
|
||||
if ($projectsListId !== false) {
|
||||
$sql .= " AND p.rowid IN (".$this->db->sanitize($projectsListId).")";
|
||||
$sql .= " AND p.rowid IN (" . $this->db->sanitize($projectsListId) . ")";
|
||||
}
|
||||
if ($socid == 0) {
|
||||
$sql .= " AND (p.fk_soc=0 OR p.fk_soc IS NULL)";
|
||||
}
|
||||
if ($socid > 0) {
|
||||
if (empty($conf->global->PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY)) {
|
||||
$sql .= " AND (p.fk_soc=".((int) $socid)." OR p.fk_soc IS NULL)";
|
||||
$sql .= " AND (p.fk_soc=" . ((int) $socid) . " OR p.fk_soc IS NULL)";
|
||||
} elseif ($conf->global->PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY != 'all') { // PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY is 'all' or a list of ids separated by coma.
|
||||
$sql .= " AND (p.fk_soc IN (".$this->db->sanitize(((int) $socid).", ".$conf->global->PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY).") OR p.fk_soc IS NULL)";
|
||||
$sql .= " AND (p.fk_soc IN (" . $this->db->sanitize(((int) $socid) . ", " . $conf->global->PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY) . ") OR p.fk_soc IS NULL)";
|
||||
}
|
||||
}
|
||||
if (!empty($filterkey)) {
|
||||
$sql .= natural_search(array('p.title', 'p.ref'), $filterkey);
|
||||
}
|
||||
if ($morefilter) {
|
||||
$sql .= ' AND ('.$this->db->sanitize($morefilter, 0, 1).')';
|
||||
$sql .= ' AND (' . $this->db->sanitize($morefilter, 0, 1) . ')';
|
||||
}
|
||||
$sql .= " ORDER BY p.ref ASC";
|
||||
|
||||
@ -201,7 +203,7 @@ class FormProjets
|
||||
$morecss .= ' minwidth100';
|
||||
}
|
||||
if (empty($option_only)) {
|
||||
$out .= '<select class="flat'.($morecss ? ' '.$morecss : '').'"'.($disabled ? ' disabled="disabled"' : '').' id="'.$htmlid.'" name="'.$htmlname.'">';
|
||||
$out .= '<select class="flat' . ($morecss ? ' ' . $morecss : '') . '"' . ($disabled ? ' disabled="disabled"' : '') . ' id="' . $htmlid . '" name="' . $htmlname . '">';
|
||||
}
|
||||
if (!empty($show_empty)) {
|
||||
$out .= '<option value="0"> </option>';
|
||||
@ -223,37 +225,37 @@ class FormProjets
|
||||
$labeltoshow = dol_trunc($obj->ref, 18);
|
||||
//if ($obj->public) $labeltoshow.=' ('.$langs->trans("SharedProject").')';
|
||||
//else $labeltoshow.=' ('.$langs->trans("Private").')';
|
||||
$labeltoshow .= ', '.dol_trunc($obj->title, $maxlength);
|
||||
$labeltoshow .= ', ' . dol_trunc($obj->title, $maxlength);
|
||||
if ($obj->name) {
|
||||
$labeltoshow .= ' - '.$obj->name;
|
||||
$labeltoshow .= ' - ' . $obj->name;
|
||||
if ($obj->name_alias) {
|
||||
$labeltoshow .= ' ('.$obj->name_alias.')';
|
||||
$labeltoshow .= ' (' . $obj->name_alias . ')';
|
||||
}
|
||||
}
|
||||
|
||||
$disabled = 0;
|
||||
if ($obj->fk_statut == 0) {
|
||||
$disabled = 1;
|
||||
$labeltoshow .= ' - '.$langs->trans("Draft");
|
||||
$labeltoshow .= ' - ' . $langs->trans("Draft");
|
||||
} elseif ($obj->fk_statut == 2) {
|
||||
if ($discard_closed == 2) {
|
||||
$disabled = 1;
|
||||
}
|
||||
$labeltoshow .= ' - '.$langs->trans("Closed");
|
||||
$labeltoshow .= ' - ' . $langs->trans("Closed");
|
||||
} elseif (empty($conf->global->PROJECT_ALLOW_TO_LINK_FROM_OTHER_COMPANY) && $socid > 0 && (!empty($obj->fk_soc) && $obj->fk_soc != $socid)) {
|
||||
$disabled = 1;
|
||||
$labeltoshow .= ' - '.$langs->trans("LinkedToAnotherCompany");
|
||||
$labeltoshow .= ' - ' . $langs->trans("LinkedToAnotherCompany");
|
||||
}
|
||||
|
||||
if (!empty($selected) && $selected == $obj->rowid) {
|
||||
$out .= '<option value="'.$obj->rowid.'" selected';
|
||||
$out .= '<option value="' . $obj->rowid . '" selected';
|
||||
//if ($disabled) $out.=' disabled'; // with select2, field can't be preselected if disabled
|
||||
$out .= '>'.$labeltoshow.'</option>';
|
||||
$out .= '>' . $labeltoshow . '</option>';
|
||||
} else {
|
||||
if ($hideunselectables && $disabled && ($selected != $obj->rowid)) {
|
||||
$resultat = '';
|
||||
} else {
|
||||
$resultat = '<option value="'.$obj->rowid.'"';
|
||||
$resultat = '<option value="' . $obj->rowid . '"';
|
||||
if ($disabled) {
|
||||
$resultat .= ' disabled';
|
||||
}
|
||||
@ -270,7 +272,7 @@ class FormProjets
|
||||
'value' => $obj->ref,
|
||||
'ref' => $obj->ref,
|
||||
'labelx' => $labeltoshow,
|
||||
'label' => ($disabled ? '<span class="opacitymedium">'.$labeltoshow.'</span>' : $labeltoshow),
|
||||
'label' => ($disabled ? '<span class="opacitymedium">' . $labeltoshow . '</span>' : $labeltoshow),
|
||||
'disabled' => (bool) $disabled
|
||||
);
|
||||
}
|
||||
@ -288,7 +290,7 @@ class FormProjets
|
||||
|
||||
// Use select2 selector
|
||||
if (!empty($conf->use_javascript_ajax)) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
|
||||
include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
|
||||
$comboenhancement = ajax_combobox($htmlid, array(), 0, $forcefocus);
|
||||
$out .= $comboenhancement;
|
||||
$morecss .= ' minwidth100';
|
||||
@ -312,26 +314,26 @@ class FormProjets
|
||||
/**
|
||||
* Output a combo list with tasks qualified for a third party
|
||||
*
|
||||
* @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id)
|
||||
* @param int $selected Id task preselected
|
||||
* @param string $htmlname Name of HTML select
|
||||
* @param int $maxlength Maximum length of label
|
||||
* @param int $option_only Return only html options lines without the select tag
|
||||
* @param string $show_empty Add an empty line ('1' or string to show for empty line)
|
||||
* @param int $discard_closed Discard closed projects (0=Keep, 1=hide completely, 2=Disable)
|
||||
* @param int $forcefocus Force focus on field (works with javascript only)
|
||||
* @param int $disabled Disabled
|
||||
* @param string $morecss More css added to the select component
|
||||
* @param string $projectsListId ''=Automatic filter on project allowed. List of id=Filter on project ids.
|
||||
* @param string $showmore 'all' = Show project info, 'progress' = Show task progression, ''=Show nothing more
|
||||
* @param User $usertofilter User object to use for filtering
|
||||
* @return int Nbr of tasks if OK, <0 if KO
|
||||
* @param int $socid Id third party (-1=all, 0=only projects not linked to a third party, id=projects not linked or linked to third party id)
|
||||
* @param int $selected Id task preselected
|
||||
* @param string $htmlname Name of HTML select
|
||||
* @param int $maxlength Maximum length of label
|
||||
* @param int $option_only Return only html options lines without the select tag
|
||||
* @param string $show_empty Add an empty line ('1' or string to show for empty line)
|
||||
* @param int $discard_closed Discard closed projects (0=Keep, 1=hide completely, 2=Disable)
|
||||
* @param int $forcefocus Force focus on field (works with javascript only)
|
||||
* @param int $disabled Disabled
|
||||
* @param string $morecss More css added to the select component
|
||||
* @param string $projectsListId ''=Automatic filter on project allowed. List of id=Filter on project ids.
|
||||
* @param string $showmore 'all' = Show project info, 'progress' = Show task progression, ''=Show nothing more
|
||||
* @param User $usertofilter User object to use for filtering
|
||||
* @return int Nbr of tasks if OK, <0 if KO
|
||||
*/
|
||||
public function selectTasks($socid = -1, $selected = '', $htmlname = 'taskid', $maxlength = 24, $option_only = 0, $show_empty = '1', $discard_closed = 0, $forcefocus = 0, $disabled = 0, $morecss = 'maxwidth500', $projectsListId = '', $showmore = 'all', $usertofilter = null)
|
||||
{
|
||||
global $user, $conf, $langs;
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
|
||||
|
||||
if (is_null($usertofilter)) {
|
||||
$usertofilter = $user;
|
||||
@ -355,19 +357,19 @@ class FormProjets
|
||||
$sql = "SELECT t.rowid, t.ref as tref, t.label as tlabel, t.progress,";
|
||||
$sql .= " p.rowid as pid, p.ref, p.title, p.fk_soc, p.fk_statut, p.public, p.usage_task,";
|
||||
$sql .= " s.nom as name";
|
||||
$sql .= " FROM ".$this->db->prefix()."projet as p";
|
||||
$sql .= " LEFT JOIN ".$this->db->prefix()."societe as s ON s.rowid = p.fk_soc,";
|
||||
$sql .= " ".$this->db->prefix()."projet_task as t";
|
||||
$sql .= " WHERE p.entity IN (".getEntity('project').")";
|
||||
$sql .= " FROM " . $this->db->prefix() . "projet as p";
|
||||
$sql .= " LEFT JOIN " . $this->db->prefix() . "societe as s ON s.rowid = p.fk_soc,";
|
||||
$sql .= " " . $this->db->prefix() . "projet_task as t";
|
||||
$sql .= " WHERE p.entity IN (" . getEntity('project') . ")";
|
||||
$sql .= " AND t.fk_projet = p.rowid";
|
||||
if ($projectsListId) {
|
||||
$sql .= " AND p.rowid IN (".$this->db->sanitize($projectsListId).")";
|
||||
$sql .= " AND p.rowid IN (" . $this->db->sanitize($projectsListId) . ")";
|
||||
}
|
||||
if ($socid == 0) {
|
||||
$sql .= " AND (p.fk_soc=0 OR p.fk_soc IS NULL)";
|
||||
}
|
||||
if ($socid > 0) {
|
||||
$sql .= " AND (p.fk_soc=".((int) $socid)." OR p.fk_soc IS NULL)";
|
||||
$sql .= " AND (p.fk_soc=" . ((int) $socid) . " OR p.fk_soc IS NULL)";
|
||||
}
|
||||
$sql .= " ORDER BY p.ref, t.ref ASC";
|
||||
|
||||
@ -375,14 +377,14 @@ class FormProjets
|
||||
if ($resql) {
|
||||
// Use select2 selector
|
||||
if (empty($option_only) && !empty($conf->use_javascript_ajax)) {
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/ajax.lib.php';
|
||||
include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
|
||||
$comboenhancement = ajax_combobox($htmlname, '', 0, $forcefocus);
|
||||
$out .= $comboenhancement;
|
||||
$morecss .= ' minwidth200 maxwidth500';
|
||||
}
|
||||
|
||||
if (empty($option_only)) {
|
||||
$out .= '<select class="valignmiddle flat'.($morecss ? ' '.$morecss : '').'"'.($disabled ? ' disabled="disabled"' : '').' id="'.$htmlname.'" name="'.$htmlname.'">';
|
||||
$out .= '<select class="valignmiddle flat' . ($morecss ? ' ' . $morecss : '') . '"' . ($disabled ? ' disabled="disabled"' : '') . ' id="' . $htmlname . '" name="' . $htmlname . '">';
|
||||
}
|
||||
if (!empty($show_empty)) {
|
||||
$out .= '<option value="0" class="optiongrey">';
|
||||
@ -428,58 +430,58 @@ class FormProjets
|
||||
$labeltoshow .= dol_trunc($obj->ref, 18); // Project ref
|
||||
//if ($obj->public) $labeltoshow.=' ('.$langs->trans("SharedProject").')';
|
||||
//else $labeltoshow.=' ('.$langs->trans("Private").')';
|
||||
$labeltoshow .= ' '.dol_trunc($obj->title, $maxlength);
|
||||
$labeltoshow .= ' ' . dol_trunc($obj->title, $maxlength);
|
||||
$titletoshow = $labeltoshow;
|
||||
|
||||
if ($obj->name) {
|
||||
$labeltoshow .= ' ('.$obj->name.')';
|
||||
$titletoshow .= ' <span class="opacitymedium">('.$obj->name.')</span>';
|
||||
$labeltoshow .= ' (' . $obj->name . ')';
|
||||
$titletoshow .= ' <span class="opacitymedium">(' . $obj->name . ')</span>';
|
||||
}
|
||||
|
||||
$disabled = 0;
|
||||
if ($obj->fk_statut == Project::STATUS_DRAFT) {
|
||||
$disabled = 1;
|
||||
$labeltoshow .= ' - '.$langs->trans("Draft");
|
||||
$titletoshow .= ' - <span class="opacitymedium">'.$langs->trans("Draft").'</span>';
|
||||
$labeltoshow .= ' - ' . $langs->trans("Draft");
|
||||
$titletoshow .= ' - <span class="opacitymedium">' . $langs->trans("Draft") . '</span>';
|
||||
} elseif ($obj->fk_statut == Project::STATUS_CLOSED) {
|
||||
if ($discard_closed == 2) {
|
||||
$disabled = 1;
|
||||
}
|
||||
$labeltoshow .= ' - '.$langs->trans("Closed");
|
||||
$titletoshow .= ' - <span class="opacitymedium">'.$langs->trans("Closed").'</span>';
|
||||
$labeltoshow .= ' - ' . $langs->trans("Closed");
|
||||
$titletoshow .= ' - <span class="opacitymedium">' . $langs->trans("Closed") . '</span>';
|
||||
} elseif ($socid > 0 && (!empty($obj->fk_soc) && $obj->fk_soc != $socid)) {
|
||||
$disabled = 1;
|
||||
$labeltoshow .= ' - '.$langs->trans("LinkedToAnotherCompany");
|
||||
$titletoshow .= ' - <span class="opacitymedium">'.$langs->trans("LinkedToAnotherCompany").'</span>';
|
||||
$labeltoshow .= ' - ' . $langs->trans("LinkedToAnotherCompany");
|
||||
$titletoshow .= ' - <span class="opacitymedium">' . $langs->trans("LinkedToAnotherCompany") . '</span>';
|
||||
}
|
||||
$labeltoshow .= ' - ';
|
||||
$titletoshow .= ' - ';
|
||||
}
|
||||
|
||||
// Label for task
|
||||
$labeltoshow .= $obj->tref.' '.dol_trunc($obj->tlabel, $maxlength);
|
||||
$titletoshow .= $obj->tref.' '.dol_trunc($obj->tlabel, $maxlength);
|
||||
$labeltoshow .= $obj->tref . ' ' . dol_trunc($obj->tlabel, $maxlength);
|
||||
$titletoshow .= $obj->tref . ' ' . dol_trunc($obj->tlabel, $maxlength);
|
||||
if ($obj->usage_task && preg_match('/progress/', $showmore)) {
|
||||
$labeltoshow .= ' <span class="opacitymedium">('.$obj->progress.'%)</span>';
|
||||
$titletoshow .= ' <span class="opacitymedium">('.$obj->progress.'%)</span>';
|
||||
$labeltoshow .= ' <span class="opacitymedium">(' . $obj->progress . '%)</span>';
|
||||
$titletoshow .= ' <span class="opacitymedium">(' . $obj->progress . '%)</span>';
|
||||
}
|
||||
|
||||
if (!empty($selected) && $selected == $obj->rowid) {
|
||||
$out .= '<option value="'.$obj->rowid.'" selected';
|
||||
$out .= ' data-html="'.dol_escape_htmltag($titletoshow).'"';
|
||||
$out .= '<option value="' . $obj->rowid . '" selected';
|
||||
$out .= ' data-html="' . dol_escape_htmltag($titletoshow) . '"';
|
||||
//if ($disabled) $out.=' disabled'; // with select2, field can't be preselected if disabled
|
||||
$out .= '>'.$labeltoshow.'</option>';
|
||||
$out .= '>' . $labeltoshow . '</option>';
|
||||
} else {
|
||||
if ($hideunselectables && $disabled && ($selected != $obj->rowid)) {
|
||||
$resultat = '';
|
||||
} else {
|
||||
$resultat = '<option value="'.$obj->rowid.'"';
|
||||
$resultat = '<option value="' . $obj->rowid . '"';
|
||||
if ($disabled) {
|
||||
$resultat .= ' disabled';
|
||||
}
|
||||
//if ($obj->public) $labeltoshow.=' ('.$langs->trans("Public").')';
|
||||
//else $labeltoshow.=' ('.$langs->trans("Private").')';
|
||||
$resultat .= ' data-html="'.dol_escape_htmltag($titletoshow).'"';
|
||||
$resultat .= ' data-html="' . dol_escape_htmltag($titletoshow) . '"';
|
||||
$resultat .= '>';
|
||||
$resultat .= $labeltoshow;
|
||||
$resultat .= '</option>';
|
||||
@ -508,16 +510,17 @@ class FormProjets
|
||||
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
|
||||
/**
|
||||
* Build a HTML select list of element of same thirdparty to suggest to link them to project
|
||||
*
|
||||
* @param string $table_element Table of the element to update
|
||||
* @param string $socid If of thirdparty to use as filter or 'id1,id2,...'
|
||||
* @param string $morecss More CSS
|
||||
* @param int $limitonstatus Add filters to limit length of list to opened status (for example to avoid ERR_RESPONSE_HEADERS_TOO_BIG on project/element.php page). TODO To implement
|
||||
* @param string $projectkey Equivalent key to fk_projet for actual table_element
|
||||
* @param string $placeholder Placeholder
|
||||
* @return int|string The HTML select list of element or '' if nothing or -1 if KO
|
||||
* @param string $table_element Table of the element to update
|
||||
* @param string $socid If of thirdparty to use as filter or 'id1,id2,...'
|
||||
* @param string $morecss More CSS
|
||||
* @param int $limitonstatus Add filters to limit length of list to opened status (for example to avoid ERR_RESPONSE_HEADERS_TOO_BIG on project/element.php page). TODO To implement
|
||||
* @param string $projectkey Equivalent key to fk_projet for actual table_element
|
||||
* @param string $placeholder Placeholder
|
||||
* @return int|string The HTML select list of element or '' if nothing or -1 if KO
|
||||
*/
|
||||
public function select_element($table_element, $socid = 0, $morecss = '', $limitonstatus = -2, $projectkey = "fk_projet", $placeholder = '')
|
||||
{
|
||||
@ -530,15 +533,15 @@ class FormProjets
|
||||
|
||||
$linkedtothirdparty = false;
|
||||
if (!in_array($table_element, array(
|
||||
'don',
|
||||
'expensereport_det',
|
||||
'expensereport', 'loan',
|
||||
'stock_mouvement',
|
||||
'payment_salary',
|
||||
'payment_various',
|
||||
'salary',
|
||||
'chargesociales',
|
||||
'entrepot')
|
||||
'don',
|
||||
'expensereport_det',
|
||||
'expensereport', 'loan',
|
||||
'stock_mouvement',
|
||||
'payment_salary',
|
||||
'payment_various',
|
||||
'salary',
|
||||
'chargesociales',
|
||||
'entrepot')
|
||||
)) {
|
||||
$linkedtothirdparty = true;
|
||||
}
|
||||
@ -597,30 +600,30 @@ class FormProjets
|
||||
if ($linkedtothirdparty) {
|
||||
$sql .= ", s.nom as name";
|
||||
}
|
||||
$sql .= " FROM ".$this->db->prefix().$table_element." as t";
|
||||
$sql .= " FROM " . $this->db->prefix() . $table_element . " as t";
|
||||
if ($linkedtothirdparty) {
|
||||
$sql .= ", ".$this->db->prefix()."societe as s";
|
||||
$sql .= ", " . $this->db->prefix() . "societe as s";
|
||||
}
|
||||
$sql .= " WHERE ".$projectkey." is null";
|
||||
$sql .= " WHERE " . $projectkey . " is null";
|
||||
if (!empty($socid) && $linkedtothirdparty) {
|
||||
if (is_numeric($socid)) {
|
||||
$sql .= " AND t.fk_soc = ".((int) $socid);
|
||||
$sql .= " AND t.fk_soc = " . ((int) $socid);
|
||||
} else {
|
||||
$sql .= " AND t.fk_soc IN (".$this->db->sanitize($socid).")";
|
||||
$sql .= " AND t.fk_soc IN (" . $this->db->sanitize($socid) . ")";
|
||||
}
|
||||
}
|
||||
if (!in_array($table_element, array('expensereport_det', 'stock_mouvement'))) {
|
||||
$sql .= ' AND t.entity IN ('.getEntity('project').')';
|
||||
$sql .= ' AND t.entity IN (' . getEntity('project') . ')';
|
||||
}
|
||||
if ($linkedtothirdparty) {
|
||||
$sql .= " AND s.rowid = t.fk_soc";
|
||||
}
|
||||
if ($sqlfilter) {
|
||||
$sql .= " AND ".$sqlfilter;
|
||||
$sql .= " AND " . $sqlfilter;
|
||||
}
|
||||
$sql .= " ORDER BY ref DESC";
|
||||
|
||||
dol_syslog(get_class($this).'::select_element', LOG_DEBUG);
|
||||
dol_syslog(get_class($this) . '::select_element', LOG_DEBUG);
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql) {
|
||||
$num = $this->db->num_rows($resql);
|
||||
@ -628,18 +631,18 @@ class FormProjets
|
||||
$sellist = '';
|
||||
|
||||
if ($num > 0) {
|
||||
$sellist = '<select class="flat elementselect css'.$table_element.($morecss ? ' '.$morecss : '').'" name="elementselect">';
|
||||
$sellist .= '<option value="-1"'.($placeholder ? ' class="optiongrey"' : '').'>'.$placeholder.'</option>';
|
||||
$sellist = '<select class="flat elementselect css' . $table_element . ($morecss ? ' ' . $morecss : '') . '" name="elementselect">';
|
||||
$sellist .= '<option value="-1"' . ($placeholder ? ' class="optiongrey"' : '') . '>' . $placeholder . '</option>';
|
||||
while ($i < $num) {
|
||||
$obj = $this->db->fetch_object($resql);
|
||||
$ref = $obj->ref ? $obj->ref : $obj->rowid;
|
||||
if (!empty($obj->ref_supplier)) {
|
||||
$ref .= ' ('.$obj->ref_supplier.')';
|
||||
$ref .= ' (' . $obj->ref_supplier . ')';
|
||||
}
|
||||
if (!empty($obj->name)) {
|
||||
$ref .= ' - '.$obj->name;
|
||||
$ref .= ' - ' . $obj->name;
|
||||
}
|
||||
$sellist .= '<option value="'.$obj->rowid.'">'.$ref.'</option>';
|
||||
$sellist .= '<option value="' . $obj->rowid . '">' . $ref . '</option>';
|
||||
$i++;
|
||||
}
|
||||
$sellist .= '</select>';
|
||||
@ -657,7 +660,7 @@ class FormProjets
|
||||
dol_print_error($this->db);
|
||||
$this->error = $this->db->lasterror();
|
||||
$this->errors[] = $this->db->lasterror();
|
||||
dol_syslog(get_class($this)."::select_element ".$this->error, LOG_ERR);
|
||||
dol_syslog(get_class($this) . "::select_element " . $this->error, LOG_ERR);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@ -666,23 +669,23 @@ class FormProjets
|
||||
/**
|
||||
* Build a HTML select list of element of same thirdparty to suggest to link them to project
|
||||
*
|
||||
* @param string $htmlname HTML name
|
||||
* @param string $preselected Preselected (int or 'all' or 'none')
|
||||
* @param int $showempty Add an empty line
|
||||
* @param int $useshortlabel Use short label
|
||||
* @param int $showallnone Add choice "All" and "None"
|
||||
* @param int $showpercent Show default probability for status
|
||||
* @param string $morecss Add more css
|
||||
* @param int $noadmininfo 0=Add admin info, 1=Disable admin info
|
||||
* @param int $addcombojs 1=Add a js combo
|
||||
* @return int|string The HTML select list of element or '' if nothing or -1 if KO
|
||||
* @param string $htmlname HTML name
|
||||
* @param string $preselected Preselected (int or 'all' or 'none')
|
||||
* @param int $showempty Add an empty line
|
||||
* @param int $useshortlabel Use short label
|
||||
* @param int $showallnone Add choice "All" and "None"
|
||||
* @param int $showpercent Show default probability for status
|
||||
* @param string $morecss Add more css
|
||||
* @param int $noadmininfo 0=Add admin info, 1=Disable admin info
|
||||
* @param int $addcombojs 1=Add a js combo
|
||||
* @return int|string The HTML select list of element or '' if nothing or -1 if KO
|
||||
*/
|
||||
public function selectOpportunityStatus($htmlname, $preselected = '-1', $showempty = 1, $useshortlabel = 0, $showallnone = 0, $showpercent = 0, $morecss = '', $noadmininfo = 0, $addcombojs = 0)
|
||||
{
|
||||
global $conf, $langs, $user;
|
||||
|
||||
$sql = "SELECT rowid, code, label, percent";
|
||||
$sql .= " FROM ".$this->db->prefix().'c_lead_status';
|
||||
$sql .= " FROM " . $this->db->prefix() . 'c_lead_status';
|
||||
$sql .= " WHERE active = 1";
|
||||
$sql .= " ORDER BY position";
|
||||
|
||||
@ -691,31 +694,31 @@ class FormProjets
|
||||
$num = $this->db->num_rows($resql);
|
||||
$i = 0;
|
||||
if ($num > 0) {
|
||||
$sellist = '<select class="flat oppstatus'.($morecss ? ' '.$morecss : '').'" id="'.$htmlname.'" name="'.$htmlname.'">';
|
||||
$sellist = '<select class="flat oppstatus' . ($morecss ? ' ' . $morecss : '') . '" id="' . $htmlname . '" name="' . $htmlname . '">';
|
||||
if ($showempty) {
|
||||
// Without  , strange move of screen when switching value
|
||||
$sellist .= '<option value="-1"> </option>';
|
||||
}
|
||||
if ($showallnone) {
|
||||
$sellist .= '<option value="all"'.($preselected == 'all' ? ' selected="selected"' : '').'>-- '.$langs->trans("OnlyOpportunitiesShort").'</option>';
|
||||
$sellist .= '<option value="openedopp"'.($preselected == 'openedopp' ? ' selected="selected"' : '').'>-- '.$langs->trans("OpenedOpportunitiesShort").'</option>';
|
||||
$sellist .= '<option value="notopenedopp"'.($preselected == 'notopenedopp' ? ' selected="selected"' : '').'>-- '.$langs->trans("NotOpenedOpportunitiesShort").'</option>';
|
||||
$sellist .= '<option value="none"'.($preselected == 'none' ? ' selected="selected"' : '').'>-- '.$langs->trans("NotAnOpportunityShort").'</option>';
|
||||
$sellist .= '<option value="all"' . ($preselected == 'all' ? ' selected="selected"' : '') . '>-- ' . $langs->trans("OnlyOpportunitiesShort") . '</option>';
|
||||
$sellist .= '<option value="openedopp"' . ($preselected == 'openedopp' ? ' selected="selected"' : '') . '>-- ' . $langs->trans("OpenedOpportunitiesShort") . '</option>';
|
||||
$sellist .= '<option value="notopenedopp"' . ($preselected == 'notopenedopp' ? ' selected="selected"' : '') . '>-- ' . $langs->trans("NotOpenedOpportunitiesShort") . '</option>';
|
||||
$sellist .= '<option value="none"' . ($preselected == 'none' ? ' selected="selected"' : '') . '>-- ' . $langs->trans("NotAnOpportunityShort") . '</option>';
|
||||
}
|
||||
while ($i < $num) {
|
||||
$obj = $this->db->fetch_object($resql);
|
||||
|
||||
$sellist .= '<option value="'.$obj->rowid.'" defaultpercent="'.$obj->percent.'" elemcode="'.$obj->code.'"';
|
||||
$sellist .= '<option value="' . $obj->rowid . '" defaultpercent="' . $obj->percent . '" elemcode="' . $obj->code . '"';
|
||||
if ($obj->rowid == $preselected) {
|
||||
$sellist .= ' selected="selected"';
|
||||
}
|
||||
$sellist .= '>';
|
||||
if ($useshortlabel) {
|
||||
$finallabel = ($langs->transnoentitiesnoconv("OppStatus".$obj->code) != "OppStatus".$obj->code ? $langs->transnoentitiesnoconv("OppStatus".$obj->code) : $obj->label);
|
||||
$finallabel = ($langs->transnoentitiesnoconv("OppStatus" . $obj->code) != "OppStatus" . $obj->code ? $langs->transnoentitiesnoconv("OppStatus" . $obj->code) : $obj->label);
|
||||
} else {
|
||||
$finallabel = ($langs->transnoentitiesnoconv("OppStatus".$obj->code) != "OppStatus".$obj->code ? $langs->transnoentitiesnoconv("OppStatus".$obj->code) : $obj->label);
|
||||
$finallabel = ($langs->transnoentitiesnoconv("OppStatus" . $obj->code) != "OppStatus" . $obj->code ? $langs->transnoentitiesnoconv("OppStatus" . $obj->code) : $obj->label);
|
||||
if ($showpercent) {
|
||||
$finallabel .= ' ('.$obj->percent.'%)';
|
||||
$finallabel .= ' (' . $obj->percent . '%)';
|
||||
}
|
||||
}
|
||||
$sellist .= $finallabel;
|
||||
@ -744,8 +747,134 @@ class FormProjets
|
||||
} else {
|
||||
$this->error = $this->db->lasterror();
|
||||
$this->errors[] = $this->db->lasterror();
|
||||
dol_syslog(get_class($this)."::selectOpportunityStatus ".$this->error, LOG_ERR);
|
||||
dol_syslog(get_class($this) . "::selectOpportunityStatus " . $this->error, LOG_ERR);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Output a combo list with invoices and lines qualified for a project
|
||||
*
|
||||
* @param int $selectedInvoiceId Id invoice preselected
|
||||
* @param int $selectedLineId Id invoice line preselected
|
||||
* @param string $htmlNameInvoice Name of HTML select for Invoice
|
||||
* @param int $htmlNameInvoiceLine Name of HTML select for Invoice Line
|
||||
* @param string $morecss More css added to the select component
|
||||
* @param array $filters Array of filters
|
||||
* @param int $lineOnly return only option for line
|
||||
* @return string HTML Select
|
||||
*/
|
||||
public function selectInvoiceAndLine($selectedInvoiceId = 0, $selectedLineId = 0, $htmlNameInvoice = 'invoiceid', $htmlNameInvoiceLine = 'invoicelineid', $morecss = 'maxwidth500', $filters = array(), $lineOnly = 0)
|
||||
{
|
||||
global $user, $conf, $langs;
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT . '/projet/class/project.class.php';
|
||||
|
||||
$out = '';
|
||||
if (empty($lineOnly)) {
|
||||
// Search Invoice
|
||||
$sql = "SELECT f.rowid, f.ref as fref,";
|
||||
$sql .= ' s.nom as name';
|
||||
$sql .= ' FROM ' . $this->db->prefix() . 'projet as p';
|
||||
$sql .= ' INNER JOIN ' . $this->db->prefix() . 'societe as s ON s.rowid = p.fk_soc';
|
||||
$sql .= ' INNER JOIN ' . $this->db->prefix() . 'facture as f ON f.fk_projet = p.rowid';
|
||||
$sql .= " WHERE p.entity IN (" . getEntity('project') . ")";
|
||||
if (!empty($filters)) {
|
||||
foreach ($filters as $key => $value) {
|
||||
if ($key == 'p.rowid') {
|
||||
$sql .= " AND p.rowid=" . (int) $value;
|
||||
}
|
||||
if ($key == 'f.rowid') {
|
||||
$sql .= " AND f.rowid=" . (int) $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
$sql .= " ORDER BY p.ref, f.ref ASC";
|
||||
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql) {
|
||||
// Use select2 selector
|
||||
if (!empty($conf->use_javascript_ajax)) {
|
||||
include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
|
||||
$comboenhancement = ajax_combobox($htmlNameInvoice, array(array('method'=>'getLines', 'url'=>dol_buildpath('/core/ajax/ajaxinvoiceline.php', 1), 'htmlname'=>$htmlNameInvoiceLine)), 0, 0);
|
||||
$out .= $comboenhancement;
|
||||
$morecss = 'minwidth200imp maxwidth500';
|
||||
}
|
||||
|
||||
$out .= '<select class="valignmiddle flat' . ($morecss ? ' ' . $morecss : '') . '" id="' . $htmlNameInvoice . '" name="' . $htmlNameInvoice . '">';
|
||||
$num = $this->db->num_rows($resql);
|
||||
if ($num) {
|
||||
while ($obj = $this->db->fetch_object($resql)) {
|
||||
$labeltoshow = $obj->fref; // Invoice ref
|
||||
if ($obj->name) {
|
||||
$labeltoshow .= ' - ' . $obj->name;
|
||||
}
|
||||
|
||||
$out .= '<option value="' . $obj->rowid . '" ';
|
||||
if (!empty($selectedInvoiceId) && $selectedInvoiceId == $obj->rowid) {
|
||||
$out .= ' selected ';
|
||||
}
|
||||
$out .= '>' . $labeltoshow . '</option>';
|
||||
}
|
||||
}
|
||||
$out .= '</select>';
|
||||
} else {
|
||||
dol_print_error($this->db->lasterror);
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
// Search Invoice Line
|
||||
$sql = "SELECT fd.rowid, fd.label, fd.description";
|
||||
$sql .= ' FROM ' . $this->db->prefix() . 'projet as p';
|
||||
$sql .= ' INNER JOIN ' . $this->db->prefix() . 'societe as s ON s.rowid = p.fk_soc';
|
||||
$sql .= ' INNER JOIN ' . $this->db->prefix() . 'facture as f ON f.fk_projet = p.rowid';
|
||||
$sql .= ' INNER JOIN ' . $this->db->prefix() . 'facturedet as fd ON fd.fk_facture = f.rowid';
|
||||
$sql .= " WHERE p.entity IN (" . getEntity('project') . ")";
|
||||
if (!empty($filters)) {
|
||||
foreach ($filters as $key => $value) {
|
||||
if ($key == 'p.rowid') {
|
||||
$sql .= " AND p.rowid=" . (int) $value;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!empty($selectedInvoiceId)) {
|
||||
$sql .= " AND f.rowid=" . (int) $selectedInvoiceId;
|
||||
}
|
||||
$sql .= " ORDER BY p.ref, f.ref ASC";
|
||||
$resql = $this->db->query($sql);
|
||||
if ($resql) {
|
||||
// Use select2 selector
|
||||
if (empty($lineOnly)) {
|
||||
if (!empty($conf->use_javascript_ajax)) {
|
||||
include_once DOL_DOCUMENT_ROOT . '/core/lib/ajax.lib.php';
|
||||
$comboenhancement = ajax_combobox($htmlNameInvoiceLine, '', 0, 0);
|
||||
$out .= $comboenhancement;
|
||||
$morecss = 'minwidth200imp maxwidth500';
|
||||
}
|
||||
|
||||
$out .= '<select class="valignmiddle flat' . ($morecss ? ' ' . $morecss : '') . '" id="' . $htmlNameInvoiceLine . '" name="' . $htmlNameInvoiceLine . '">';
|
||||
}
|
||||
$num = $this->db->num_rows($resql);
|
||||
if ($num) {
|
||||
while ($obj = $this->db->fetch_object($resql)) {
|
||||
$labeltoshow .= $obj->description; // Invoice ref
|
||||
|
||||
$out .= '<option value="' . $obj->rowid . '" ';
|
||||
if (!empty($selectedLineId) && $selectedLineId == $obj->rowid) {
|
||||
$out .= ' selected ';
|
||||
}
|
||||
$out .= '>' . $labeltoshow . '</option>';
|
||||
}
|
||||
}
|
||||
if (empty($lineOnly)) {
|
||||
$out .= '</select>';
|
||||
}
|
||||
} else {
|
||||
dol_print_error($this->db->lasterror);
|
||||
return '';
|
||||
}
|
||||
|
||||
return $out;
|
||||
}
|
||||
}
|
||||
|
||||
@ -419,7 +419,7 @@ class FormTicket
|
||||
print $langs->trans('SubjectAnswerToTicket').' '.$this->topic_title;
|
||||
} else {
|
||||
if (isset($this->withreadid) && $this->withreadid > 0) {
|
||||
$subject = $langs->trans('SubjectAnswerToTicket').' '.$this->withreadid.' : '.$this->topic_title.'';
|
||||
$subject = $langs->trans('SubjectAnswerToTicket').' '.$this->withreadid.' : '.$this->topic_title;
|
||||
} else {
|
||||
$subject = GETPOST('subject', 'alpha');
|
||||
}
|
||||
|
||||
@ -1788,7 +1788,9 @@ function dolButtonToOpenUrlInDialogPopup($name, $label, $buttonstring, $url, $di
|
||||
if (empty($conf->use_javascript_ajax)) {
|
||||
$out .= ' href="'.DOL_URL_ROOT.$url.'" target="_blank"';
|
||||
} elseif ($jsonopen) {
|
||||
$out .= ' onclick="javascript:'.$jsonopen.'"';
|
||||
$out .= ' href="#" onclick="javascript:'.$jsonopen.'"';
|
||||
} else {
|
||||
$out .= ' href="#"';
|
||||
}
|
||||
$out .= '>'.$buttonstring.'</a>';
|
||||
|
||||
|
||||
@ -57,7 +57,7 @@ $shmoffset = 1000; // Max number of entries found into a language file. If too l
|
||||
|
||||
|
||||
/**
|
||||
* Save data into a memory area shared by all users, all sessions on server
|
||||
* Save data into a memory area shared by all users, all sessions on server. Note: MAIN_CACHE_COUNT must be set.
|
||||
*
|
||||
* @param string $memoryid Memory id of shared area
|
||||
* @param mixed $data Data to save. It must not be a null value.
|
||||
|
||||
@ -105,9 +105,39 @@ function propal_prepare_head($object)
|
||||
$head[$h][2] = 'document';
|
||||
$h++;
|
||||
|
||||
$head[$h][0] = DOL_URL_ROOT.'/comm/propal/info.php?id='.$object->id;
|
||||
$head[$h][1] = $langs->trans('Info');
|
||||
$head[$h][2] = 'info';
|
||||
|
||||
$head[$h][0] = DOL_URL_ROOT.'/comm/propal/agenda.php?id='.$object->id;
|
||||
$head[$h][1] = $langs->trans("Events");
|
||||
if (isModEnabled('agenda')&& (!empty($user->rights->agenda->myactions->read) || !empty($user->rights->agenda->allactions->read))) {
|
||||
$nbEvent = 0;
|
||||
// Enable caching of thirdparty count actioncomm
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
|
||||
$cachekey = 'count_events_propal_'.$object->id;
|
||||
$dataretrieved = dol_getcache($cachekey);
|
||||
if (!is_null($dataretrieved)) {
|
||||
$nbEvent = $dataretrieved;
|
||||
} else {
|
||||
$sql = "SELECT COUNT(id) as nb";
|
||||
$sql .= " FROM ".MAIN_DB_PREFIX."actioncomm";
|
||||
$sql .= " WHERE fk_element = ".((int) $object->id);
|
||||
$sql .= " AND elementtype = 'propal'";
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$obj = $db->fetch_object($resql);
|
||||
$nbEvent = $obj->nb;
|
||||
} else {
|
||||
dol_syslog('Failed to count actioncomm '.$db->lasterror(), LOG_ERR);
|
||||
}
|
||||
dol_setcache($cachekey, $nbEvent, 120); // If setting cache fails, this is not a problem, so we do not test result.
|
||||
}
|
||||
|
||||
$head[$h][1] .= '/';
|
||||
$head[$h][1] .= $langs->trans("Agenda");
|
||||
if ($nbEvent > 0) {
|
||||
$head[$h][1] .= '<span class="badge marginleftonlyshort">'.$nbEvent.'</span>';
|
||||
}
|
||||
}
|
||||
$head[$h][2] = 'agenda';
|
||||
$h++;
|
||||
|
||||
complete_head_from_modules($conf, $langs, $object, $head, $h, 'propal', 'add', 'external');
|
||||
|
||||
@ -444,7 +444,7 @@ function dolWebsiteIncrementCounter($websiteid, $websitepagetype, $websitepageid
|
||||
$sql .= " pageviews_total = pageviews_total + 1,";
|
||||
$sql .= " pageviews_month = pageviews_month + 1,";
|
||||
// if last access was done during previous month, we save pageview_month into pageviews_previous_month
|
||||
$sql .= " pageviews_previous_month = ".$db->ifsql("lastaccess < '".$db->idate(dol_mktime(0, 0, 0, $tmpnow['month'], 1, $tmpnow['year'], 'gmt', 0), 'gmt')."'", 'pageviews_month', 'pageviews_previous_month').",";
|
||||
$sql .= " pageviews_previous_month = ".$db->ifsql("lastaccess < '".$db->idate(dol_mktime(0, 0, 0, $tmpnow['mon'], 1, $tmpnow['year'], 'gmt', 0), 'gmt')."'", 'pageviews_month', 'pageviews_previous_month').",";
|
||||
$sql .= " lastaccess = '".$db->idate(dol_now('gmt'), 'gmt')."'";
|
||||
$sql .= " WHERE rowid = ".((int) $websiteid);
|
||||
$resql = $db->query($sql);
|
||||
|
||||
@ -504,7 +504,6 @@ class pdf_sepamandate extends ModeleBankAccountDoc
|
||||
}
|
||||
|
||||
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.PublicUnderscore
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
/**
|
||||
|
||||
@ -48,6 +48,11 @@ class MailingTargets // This can't be abstract as it is used for some method
|
||||
|
||||
public $tooltip = '';
|
||||
|
||||
/**
|
||||
* @var string The SQL string used to find the recipients
|
||||
*/
|
||||
public $sql;
|
||||
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
||||
@ -118,7 +118,7 @@ class modStripe extends DolibarrModules
|
||||
'url' => '',
|
||||
'langs' => 'stripe',
|
||||
'position' => 100,
|
||||
'enabled' => '$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',
|
||||
'enabled' => 'isModEnabled("stripe") && isModenabled("banque")',
|
||||
'perms' => '$user->rights->banque->lire',
|
||||
'target' => '',
|
||||
'user' => 0
|
||||
@ -132,7 +132,7 @@ class modStripe extends DolibarrModules
|
||||
'url' => '/stripe/charge.php',
|
||||
'langs' => 'stripe',
|
||||
'position' => 102,
|
||||
'enabled' => '$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',
|
||||
'enabled' => 'isModEnabled("stripe") && isModenabled("banque") && getDolGlobalInt("MAIN_FEATURES_LEVEL") >= 1',
|
||||
'perms' => '$user->rights->banque->lire',
|
||||
'target' => '',
|
||||
'user' => 0
|
||||
@ -146,7 +146,7 @@ class modStripe extends DolibarrModules
|
||||
'url' => '/stripe/transaction.php',
|
||||
'langs' => 'stripe',
|
||||
'position' => 102,
|
||||
'enabled' => '$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',
|
||||
'enabled' => 'isModEnabled("stripe") && isModenabled("banque") && getDolGlobalInt("MAIN_FEATURES_LEVEL") >= 2',
|
||||
'perms' => '$user->rights->banque->lire',
|
||||
'target' => '',
|
||||
'user' => 0
|
||||
@ -160,7 +160,7 @@ class modStripe extends DolibarrModules
|
||||
'url' => '/stripe/payout.php',
|
||||
'langs' => 'stripe',
|
||||
'position' => 103,
|
||||
'enabled' => '$conf->stripe->enabled && $conf->banque->enabled && $conf->global->MAIN_FEATURES_LEVEL >= 1',
|
||||
'enabled' => 'isModEnabled("stripe") && isModenabled("banque")',
|
||||
'perms' => '$user->rights->banque->lire',
|
||||
'target' => '',
|
||||
'user' => 0
|
||||
|
||||
@ -49,9 +49,9 @@ class doc_generic_supplier_invoice_odt extends ModelePDFSuppliersInvoices
|
||||
|
||||
/**
|
||||
* @var array Minimum version of PHP required by module.
|
||||
* e.g.: PHP ≥ 5.6 = array(5, 6)
|
||||
* e.g.: PHP ≥ 7.0 = array(7, 0)
|
||||
*/
|
||||
public $phpmin = array(5, 6);
|
||||
public $phpmin = array(7, 0);
|
||||
|
||||
/**
|
||||
* @var string Dolibarr version of the loaded document
|
||||
@ -122,9 +122,10 @@ class doc_generic_supplier_invoice_odt extends ModelePDFSuppliersInvoices
|
||||
$texte = $this->description.".<br>\n";
|
||||
$texte .= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST" enctype="multipart/form-data">';
|
||||
$texte .= '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
$texte .= '<input type="hidden" name="page_y" value="">';
|
||||
$texte .= '<input type="hidden" name="action" value="setModuleOptions">';
|
||||
$texte .= '<input type="hidden" name="param1" value="SUPPLIER_INVOICE_ADDON_PDF_ODT_PATH">';
|
||||
$texte .= '<table class="nobinvoicenopadding" width="100%">';
|
||||
$texte .= '<table class="nobordernopadding" width="100%">';
|
||||
|
||||
// List of directories area
|
||||
$texte .= '<tr><td>';
|
||||
@ -161,7 +162,7 @@ class doc_generic_supplier_invoice_odt extends ModelePDFSuppliersInvoices
|
||||
$texte .= $conf->global->SUPPLIER_INVOICE_ADDON_PDF_ODT_PATH;
|
||||
$texte .= '</textarea>';
|
||||
$texte .= '</div><div style="display: inline-block; vertical-align: middle;">';
|
||||
$texte .= '<input type="submit" class="button small" value="'.$langs->trans("Modify").'" name="Button">';
|
||||
$texte .= '<input type="submit" class="button small reposition" name="modify" value="'.$langs->trans("Modify").'">';
|
||||
$texte .= '<br></div></div>';
|
||||
|
||||
// Scan directories
|
||||
@ -178,7 +179,9 @@ class doc_generic_supplier_invoice_odt extends ModelePDFSuppliersInvoices
|
||||
$texte .= '<div id="div_'.get_class($this).'" class="hiddenx">';
|
||||
// Show list of found files
|
||||
foreach ($listoffiles as $file) {
|
||||
$texte .= '- '.$file['name'].' <a href="'.DOL_URL_ROOT.'/document.php?modulepart=doctemplates&file=supplier_invoices/'.urlencode(basename($file['name'])).'">'.img_picto('', 'listlight').'</a><br>';
|
||||
$texte .= '- '.$file['name'].' <a href="'.DOL_URL_ROOT.'/document.php?modulepart=doctemplates&file=supplier_invoices/'.urlencode(basename($file['name'])).'">'.img_picto('', 'listlight').'</a>';
|
||||
$texte .= ' <a class="reposition" href="'.$_SERVER["PHP_SELF"].'?modulepart=doctemplates&keyforuploaddir=SUPPLIER_INVOICE_ADDON_PDF_ODT_PATH&action=deletefile&token='.newToken().'&file='.urlencode(basename($file['name'])).'">'.img_picto('', 'delete').'</a>';
|
||||
$texte .= '<br>';
|
||||
}
|
||||
$texte .= '</div>';
|
||||
}
|
||||
@ -189,9 +192,10 @@ class doc_generic_supplier_invoice_odt extends ModelePDFSuppliersInvoices
|
||||
$texte .= '</div>';
|
||||
$texte .= '</td>';
|
||||
|
||||
|
||||
$texte .= '<td rowspan="2" class="tdtop hideonsmartphone">';
|
||||
$texte .= '<span class="opacitymedium">';
|
||||
$texte .= $langs->trans("ExampleOfDirectoriesForModelGen");
|
||||
$texte .= '</span>';
|
||||
$texte .= '</td>';
|
||||
$texte .= '</tr>';
|
||||
|
||||
|
||||
@ -119,7 +119,7 @@ class doc_generic_supplier_order_odt extends ModelePDFSuppliersOrders
|
||||
$form = new Form($this->db);
|
||||
|
||||
$texte = $this->description.".<br>\n";
|
||||
$texte .= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST">';
|
||||
$texte .= '<form action="'.$_SERVER["PHP_SELF"].'" method="POST" enctype="multipart/form-data">';
|
||||
$texte .= '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
$texte .= '<input type="hidden" name="page_y" value="">';
|
||||
$texte .= '<input type="hidden" name="action" value="setModuleOptions">';
|
||||
@ -181,7 +181,11 @@ class doc_generic_supplier_order_odt extends ModelePDFSuppliersOrders
|
||||
}
|
||||
$texte .= '</div>';
|
||||
}
|
||||
|
||||
// Add input to upload a new template file.
|
||||
$texte .= '<div>'.$langs->trans("UploadNewTemplate").' <input type="file" name="uploadfile">';
|
||||
$texte .= '<input type="hidden" value="SUPPLIER_ORDER_ADDON_PDF_ODT_PATH" name="keyforuploaddir">';
|
||||
$texte .= '<input type="submit" class="button small" value="'.dol_escape_htmltag($langs->trans("Upload")).'" name="upload">';
|
||||
$texte .= '</div>';
|
||||
$texte .= '</td>';
|
||||
|
||||
$texte .= '<td rowspan="2" class="tdtop hideonsmartphone">';
|
||||
|
||||
@ -83,7 +83,7 @@ class mod_supplier_proposal_saphir extends ModeleNumRefSupplierProposal
|
||||
$tooltip .= $langs->trans("GenericMaskCodes4a", $langs->transnoentities("CommRequest"), $langs->transnoentities("CommRequest"));
|
||||
$tooltip .= $langs->trans("GenericMaskCodes5");
|
||||
|
||||
$mask = dolGetGlobalString('SUPPLIER_PROPOSAL_SAPHIR_MASK');
|
||||
$mask = getDolGlobalString('SUPPLIER_PROPOSAL_SAPHIR_MASK');
|
||||
|
||||
// Parametrage du prefix
|
||||
$texte .= '<tr><td>'.$langs->trans("Mask").':</td>';
|
||||
|
||||
@ -146,7 +146,7 @@ if ($usemargins && isModEnabled('margin') && empty($user->socid)) {
|
||||
print '<a class="reposition" href="'.$_SERVER["PHP_SELF"].'?mode=marginforalllines&id='.$object->id.'">'.img_edit($langs->trans("UpdateForAllLines"), 0, 'class="clickmarginforalllines opacitymedium paddingleft cursorpointer"').'</a>';
|
||||
if (GETPOST('mode', 'aZ09') == 'marginforalllines') {
|
||||
print '<div class="classmarginforalllines inline-block nowraponall">';
|
||||
print '<input type="number" name="marginforalllines" min="0" max="999.9" value="20.0" step="0.1"><label>%</label>';
|
||||
print '<input type="number" name="marginforalllines" min="0" max="999.9" value="20.0" step="0.1" class="width50"><label>%</label>';
|
||||
print '<input class="inline-block button smallpaddingimp" type="submit" name="submitforallmargins" value="'.$langs->trans("Update").'">';
|
||||
print '</div>';
|
||||
}
|
||||
|
||||
@ -51,7 +51,7 @@ if (!is_object($website)) {
|
||||
$website->fetch(0, $websitekey);
|
||||
}
|
||||
// Define $websitepage if we have $websitepagefile defined
|
||||
if (!$pageid && !empty($websitepagefile)) {
|
||||
if (empty($pageid) && !empty($websitepagefile)) {
|
||||
$pageid = str_replace(array('.tpl.php', 'page'), array('', ''), basename($websitepagefile));
|
||||
if ($pageid == 'index.php') {
|
||||
$pageid = $website->fk_default_home;
|
||||
|
||||
@ -62,7 +62,7 @@ class DolRequestDataCollector extends RequestDataCollector
|
||||
/**
|
||||
* Return widget settings
|
||||
*
|
||||
* @return void
|
||||
* @return array
|
||||
*/
|
||||
public function getWidgets()
|
||||
{
|
||||
|
||||
@ -1154,6 +1154,8 @@ class Don extends CommonObject
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -1161,6 +1163,7 @@ class Don extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'date')) {
|
||||
$return .= ' | <span class="opacitymedium" >'.$langs->trans("Date").'</span> : <span class="info-box-label">'.dol_print_date($this->date).'</span>';
|
||||
}
|
||||
|
||||
@ -106,7 +106,7 @@ class ConferenceOrBooth extends ActionComm
|
||||
'id' => array('type'=>'integer', 'label'=>'TechnicalID', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>0, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'comment'=>"Id"),
|
||||
'ref' => array('type'=>'integer', 'label'=>'Ref', 'enabled'=>'1', 'position'=>1, 'notnull'=>1, 'visible'=>2, 'noteditable'=>'1', 'index'=>1, 'css'=>'left', 'csslist'=>'left', 'comment'=>"Id"),
|
||||
'label' => array('type'=>'varchar(255)', 'label'=>'Label', 'enabled'=>'1', 'position'=>30, 'notnull'=>1, 'visible'=>1, 'searchall'=>1, 'css'=>'minwidth300', 'csslist'=>'tdoverflowmax125', 'help'=>"OrganizationEvenLabelName", 'showoncombobox'=>'1', 'autofocusoncreate'=>1),
|
||||
'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php:1:(t.usage_organize_event:=:1)', 'label'=>'Project', 'enabled'=>"isModEnabled('project')", 'position'=>52, 'notnull'=>-1, 'visible'=>1, 'index'=>1, 'picto'=>'project', 'css'=>'tdoverflowmax150 maxwidth500', 'csslist'=>'width100'),
|
||||
'fk_project' => array('type'=>'integer:Project:projet/class/project.class.php:1:(t.usage_organize_event:=:1)', 'label'=>'Project', 'enabled'=>"isModEnabled('project')", 'position'=>52, 'notnull'=>-1, 'visible'=>1, 'index'=>1, 'picto'=>'project', 'css'=>'tdoverflowmax150 maxwidth500', 'csslist'=>'nowraponall'),
|
||||
'fk_soc' => array('type'=>'integer:Societe:societe/class/societe.class.php:1:((status:=:1) AND (entity:IN:__SHARED_ENTITIES__))', 'label'=>'ThirdParty', 'enabled'=>'$conf->societe->enabled', 'position'=>50, 'notnull'=>-1, 'visible'=>1, 'index'=>1, 'help'=>"OrganizationEventLinkToThirdParty", 'picto'=>'company', 'csslist'=>'tdoverflowmax125', 'css'=>'maxwidth500'),
|
||||
'note' => array('type'=>'html', 'label'=>'Description', 'enabled'=>'1', 'position'=>60, 'notnull'=>0, 'visible'=>3),
|
||||
'fk_action' => array('type'=>'sellist:c_actioncomm:libelle:id::module LIKE (\'%@eventorganization\')', 'label'=>'Format', 'enabled'=>'1', 'position'=>60, 'notnull'=>1, 'visible'=>1, 'css'=>'width100', 'csslist'=>'tdoverflowmax100'),
|
||||
|
||||
@ -921,9 +921,9 @@ while ($i < $imaxinloop) {
|
||||
}
|
||||
|
||||
if (in_array($val['type'], array('timestamp'))) {
|
||||
$cssforfield .= ($cssforfield ? ' ' : '').'nowrap';
|
||||
$cssforfield .= ($cssforfield ? ' ' : '').'nowraponall';
|
||||
} elseif ($key == 'ref') {
|
||||
$cssforfield .= ($cssforfield ? ' ' : '').'nowrap';
|
||||
$cssforfield .= ($cssforfield ? ' ' : '').'nowraponall';
|
||||
}
|
||||
|
||||
if (in_array($val['type'], array('double(24,8)', 'double(6,3)', 'integer', 'real', 'price')) && !in_array($key, array('rowid', 'ref', 'status')) && empty($val['arrayofkeyval'])) {
|
||||
|
||||
@ -2375,7 +2375,7 @@ class ExpenseReport extends CommonObject
|
||||
* Return list of people with permission to validate expense reports.
|
||||
* Search for permission "approve expense report"
|
||||
*
|
||||
* @return array Array of user ids
|
||||
* @return array|int Array of user ids, <0 if KO
|
||||
*/
|
||||
public function fetch_users_approver_expensereport()
|
||||
{
|
||||
@ -2772,7 +2772,10 @@ class ExpenseReport extends CommonObject
|
||||
*/
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs, $selected,$arrayofselected;
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -2780,9 +2783,6 @@ class ExpenseReport extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
|
||||
if (in_array($this->id, $arrayofselected)) {
|
||||
$selected = 1;
|
||||
}
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'fk_user_author') && !empty($this->id)) {
|
||||
$return .= '<br><span class="info-box-label">'.$this->fk_user_author.'</span>';
|
||||
|
||||
@ -724,6 +724,9 @@ class PaymentExpenseReport extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -731,6 +734,7 @@ class PaymentExpenseReport extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'datep')) {
|
||||
$return .= '<br><span class="opacitymedium">'.$langs->trans("Date").'</span> : <span class="info-box-label">'.dol_print_date($this->db->jdate($this->datep), 'dayhour').'</span>';
|
||||
}
|
||||
|
||||
@ -1488,6 +1488,9 @@ class Fichinter extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -1496,6 +1499,7 @@ class Fichinter extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'socid')) {
|
||||
$return .= '<br><span class="info-box-label">'.$this->socid.'</span>';
|
||||
}
|
||||
|
||||
@ -529,7 +529,7 @@ class CommandeFournisseur extends CommonOrder
|
||||
|
||||
$this->lines = array();
|
||||
|
||||
$sql = "SELECT l.rowid, l.ref as ref_supplier, l.fk_product, l.product_type, l.label, l.description, l.qty,";
|
||||
$sql = "SELECT l.rowid, l.fk_commande, l.ref as ref_supplier, l.fk_product, l.product_type, l.label, l.description, l.qty,";
|
||||
$sql .= " l.vat_src_code, l.tva_tx, l.remise_percent, l.subprice,";
|
||||
$sql .= " l.localtax1_tx, l. localtax2_tx, l.localtax1_type, l. localtax2_type, l.total_localtax1, l.total_localtax2,";
|
||||
$sql .= " l.total_ht, l.total_tva, l.total_ttc, l.special_code, l.fk_parent_line, l.rang,";
|
||||
@ -559,6 +559,7 @@ class CommandeFournisseur extends CommonOrder
|
||||
$line = new CommandeFournisseurLigne($this->db);
|
||||
|
||||
$line->id = $objp->rowid;
|
||||
$line->fk_commande = $objp->fk_commande;
|
||||
$line->desc = $objp->description;
|
||||
$line->description = $objp->description;
|
||||
$line->qty = $objp->qty;
|
||||
@ -3633,6 +3634,9 @@ class CommandeFournisseur extends CommonOrder
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -3641,6 +3645,7 @@ class CommandeFournisseur extends CommonOrder
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'socid') || property_exists($this, 'total_tva')) {
|
||||
$return .='<br><span class="info-box-label amount">'.$this->socid.'</span>';
|
||||
}
|
||||
|
||||
@ -3286,6 +3286,9 @@ class FactureFournisseur extends CommonInvoice
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -3293,6 +3296,7 @@ class FactureFournisseur extends CommonInvoice
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'socid')) {
|
||||
$return .= ' | <span class="info-box-label">'.$this->socid.'</span>';
|
||||
}
|
||||
@ -3307,7 +3311,8 @@ class FactureFournisseur extends CommonInvoice
|
||||
$return .= '<br><span class="opacitymedium">'.$langs->trans("AmountHT").'</span> : <span class="info-box-label amount">'.price($this->total_ht).'</span>';
|
||||
}
|
||||
if (method_exists($this, 'getLibStatut')) {
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3).'</div>';
|
||||
$alreadypaid = (empty($arraydata['alreadypaid']) ? 0 : $arraydata['alreadypaid']);
|
||||
$return .= '<br><div class="info-box-status margintoponly">'.$this->getLibStatut(3, $alreadypaid).'</div>';
|
||||
}
|
||||
$return .= '</div>';
|
||||
$return .= '</div>';
|
||||
|
||||
@ -2086,7 +2086,7 @@ if ($action == 'create') {
|
||||
}
|
||||
print '<tr><td class="titlefield">'.$langs->trans("Date").'</td><td>';
|
||||
print $object->date_commande ? dol_print_date($object->date_commande, $usehourmin ? 'dayhour' : 'day') : '';
|
||||
if ($object->hasDelay() && !empty($object->date_delivery) && !empty($object->date_commande)) {
|
||||
if ($object->hasDelay() && !empty($object->delivery_date) && !empty($object->date_commande)) {
|
||||
print ' '.img_picto($langs->trans("Late").' : '.$object->showDelay(), "warning");
|
||||
}
|
||||
print "</td></tr>";
|
||||
@ -2256,7 +2256,7 @@ if ($action == 'create') {
|
||||
$usehourmin = 1;
|
||||
}
|
||||
print $form->selectDate($object->delivery_date ? $object->delivery_date : -1, 'liv_', $usehourmin, $usehourmin, '', "setdate_livraison");
|
||||
print '<input type="submit" class="button button-edit" value="'.$langs->trans('Modify').'">';
|
||||
print '<input type="submit" class="button button-edit smallpaddingimp valign middle" value="'.$langs->trans('Modify').'">';
|
||||
print '</form>';
|
||||
} else {
|
||||
$usehourmin = 'day';
|
||||
@ -2264,7 +2264,7 @@ if ($action == 'create') {
|
||||
$usehourmin = 'dayhour';
|
||||
}
|
||||
print $object->delivery_date ? dol_print_date($object->delivery_date, $usehourmin) : ' ';
|
||||
if ($object->hasDelay() && !empty($object->delivery_date)) {
|
||||
if ($object->hasDelay() && !empty($object->delivery_date) && ($object->statut == $object::STATUS_ORDERSENT || $object->statut == $object::STATUS_RECEIVED_PARTIALLY)) {
|
||||
print ' '.img_picto($langs->trans("Late").' : '.$object->showDelay(), "warning");
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -2476,6 +2476,8 @@ class Holiday extends CommonObject
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -2483,6 +2485,7 @@ class Holiday extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.$arraydata['user']->getNomUrl(-1).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'fk_type')) {
|
||||
$return .= '<br><span class="opacitymedium">'.$langs->trans("Type").'</span> : ';
|
||||
$return .= '<span class="info_box-label maxwidth100">'.arraydata['labeltype'].'</span>';
|
||||
|
||||
@ -1066,6 +1066,9 @@ class Evaluation extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $selected, $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
|
||||
@ -1066,6 +1066,8 @@ class Job extends CommonObject
|
||||
{
|
||||
global $selected, $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
|
||||
@ -1129,6 +1129,9 @@ class Position extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $selected, $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
|
||||
@ -1125,6 +1125,8 @@ class Skill extends CommonObject
|
||||
{
|
||||
global $selected, $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
|
||||
@ -134,10 +134,10 @@ $object->fields = dol_sort_array($object->fields, 'position');
|
||||
$arrayfields = dol_sort_array($arrayfields, 'position');
|
||||
|
||||
// Permissions
|
||||
$permissiontoread = $user->hasRight('hrm', 'evaluation', 'read');
|
||||
$permissiontoread = $user->hasRight('hrm', 'evaluation', 'read');
|
||||
$permissiontoreadall = $user->hasRight('hrm', 'evaluation', 'readall');
|
||||
$permissiontoadd = $user->hasRight('hrm', 'evaluation', 'write');
|
||||
$permissiontodelete = $user->hasRight('hrm', 'evaluation', 'delete');
|
||||
$permissiontoadd = $user->hasRight('hrm', 'evaluation', 'write');
|
||||
$permissiontodelete = $user->hasRight('hrm', 'evaluation', 'delete');
|
||||
|
||||
// Security check
|
||||
if (!isModEnabled('hrm')) {
|
||||
|
||||
@ -32,8 +32,8 @@
|
||||
|
||||
-- Payment modes
|
||||
insert into llx_c_paiement (id,code,libelle,type,active) values ( 1, 'TIP', 'TIP', 2, 0);
|
||||
insert into llx_c_paiement (id,code,libelle,type,active) values ( 2, 'VIR', 'Transfer', 2, 1);
|
||||
insert into llx_c_paiement (id,code,libelle,type,active) values ( 3, 'PRE', 'Debit order', 2, 1);
|
||||
insert into llx_c_paiement (id,code,libelle,type,active) values ( 2, 'VIR', 'Credit Transfer', 2, 1);
|
||||
insert into llx_c_paiement (id,code,libelle,type,active) values ( 3, 'PRE', 'Direct Debit', 2, 1);
|
||||
insert into llx_c_paiement (id,code,libelle,type,active) values ( 4, 'LIQ', 'Cash', 2, 1);
|
||||
insert into llx_c_paiement (id,code,libelle,type,active) values ( 6, 'CB', 'Credit card', 2, 1);
|
||||
insert into llx_c_paiement (id,code,libelle,type,active) values ( 7, 'CHQ', 'Cheque', 2, 1);
|
||||
|
||||
@ -98,3 +98,5 @@ UPDATE llx_prelevement_demande SET type = 'ban' WHERE ext_payment_id IS NULL AND
|
||||
|
||||
ALTER TABLE llx_recruitment_recruitmentcandidature ADD COLUMN fk_user integer;
|
||||
|
||||
ALTER TABLE llx_bordereau_cheque ADD COLUMN type VARCHAR(6) DEFAULT 'CHQ';
|
||||
|
||||
|
||||
@ -26,6 +26,7 @@ create table llx_bordereau_cheque
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
ref varchar(30) NOT NULL, -- ref
|
||||
ref_ext varchar(255), -- ref_ext
|
||||
type varchar(6) DEFAULT 'CHQ', -- 'CHQ', 'TRA', ...
|
||||
datec datetime NOT NULL,
|
||||
date_bordereau date,
|
||||
amount double(24,8) NOT NULL,
|
||||
|
||||
@ -4222,12 +4222,12 @@ function migrate_delete_old_dir($db, $langs, $conf)
|
||||
* @param Conf $conf Object conf
|
||||
* @param array $listofmodule List of modules, like array('MODULE_KEY_NAME'=>', $reloadmode)
|
||||
* @param int $force 1=Reload module even if not already loaded
|
||||
* @return int <0 if KO, >0 if OK
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
function migrate_reload_modules($db, $langs, $conf, $listofmodule = array(), $force = 0)
|
||||
{
|
||||
if (count($listofmodule) == 0) {
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
dolibarr_install_syslog("upgrade2::migrate_reload_modules force=".$force.", listofmodule=".join(',', array_keys($listofmodule)));
|
||||
|
||||
@ -1125,7 +1125,10 @@ class KnowledgeRecord extends CommonObject
|
||||
*/
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs, $selected,$arrayofselected;
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -1133,9 +1136,6 @@ class KnowledgeRecord extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
|
||||
if (in_array($this->id, $arrayofselected)) {
|
||||
$selected = 1;
|
||||
}
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'lang') && !empty($this->lang)) {
|
||||
//$return .= '<br><span class="opacitymedium">'.$langs->trans("Language").'</span> : <span class="info-box-label" title="'.$langs->trans("Language_".$this->lang).'">'.$langs->trans("Language_".$this->lang, '', '', '', '', 12).'</span>';
|
||||
|
||||
@ -512,7 +512,7 @@ ClickToShowDescription=Click to show description
|
||||
DependsOn=This module needs the module(s)
|
||||
RequiredBy=This module is required by module(s)
|
||||
TheKeyIsTheNameOfHtmlField=This is the name of the HTML field. Technical knowledge is required to read the content of the HTML page to get the key name of a field.
|
||||
PageUrlForDefaultValues=You must enter the relative path of the page URL. If you include parameters in URL, the default values will be effective if all parameters are set to same value.
|
||||
PageUrlForDefaultValues=You must enter the relative path of the page URL. If you include parameters in URL, it will be effective if all parameters in browsed URL have the value defined here.
|
||||
PageUrlForDefaultValuesCreate=<br>Example:<br>For the form to create a new third party, it is <strong>%s</strong>.<br>For URL of external modules installed into custom directory, do not include the "custom/", so use path like <strong>mymodule/mypage.php</strong> and not custom/mymodule/mypage.php.<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
|
||||
PageUrlForDefaultValuesList=<br>Example:<br>For the page that lists third parties, it is <strong>%s</strong>.<br>For URL of external modules installed into custom directory, do not include the "custom/" so use a path like <strong>mymodule/mypagelist.php</strong> and not custom/mymodule/mypagelist.php.<br>If you want default value only if url has some parameter, you can use <strong>%s</strong>
|
||||
AlsoDefaultValuesAreEffectiveForActionCreate=Also note that overwritting default values for form creation works only for pages that were correctly designed (so with parameter action=create or presend...)
|
||||
|
||||
@ -120,6 +120,7 @@ ValidateCheckReceipt=Validate this check receipt?
|
||||
ConfirmValidateCheckReceipt=Are you sure that you want to submit this check receipt for validation? No changes will be possible once validated.
|
||||
DeleteCheckReceipt=Delete this check receipt?
|
||||
ConfirmDeleteCheckReceipt=Are you sure you want to delete this check receipt?
|
||||
DocumentsForDeposit=Documents to deposit at the bank
|
||||
BankChecks=Bank checks
|
||||
BankChecksToReceipt=Checks awaiting deposit
|
||||
BankChecksToReceiptShort=Checks awaiting deposit
|
||||
@ -145,6 +146,7 @@ BackToAccount=Back to account
|
||||
ShowAllAccounts=Show for all accounts
|
||||
FutureTransaction=Future transaction. Unable to reconcile.
|
||||
SelectChequeTransactionAndGenerate=Select/filter the checks which are to be included in the check deposit receipt. Then, click on "Create".
|
||||
SelectPaymentTransactionAndGenerate=Select/filter the documents which are to be included in the %s deposit receipt. Then, click on "Create".
|
||||
InputReceiptNumber=Choose the bank statement related with the conciliation. Use a sortable numeric value: YYYYMM or YYYYMMDD
|
||||
EventualyAddCategory=Eventually, specify a category in which to classify the records
|
||||
ToConciliate=To reconcile?
|
||||
|
||||
@ -509,13 +509,14 @@ UseLine=Apply
|
||||
UseDiscount=Use discount
|
||||
UseCredit=Use credit
|
||||
UseCreditNoteInInvoicePayment=Reduce amount to pay with this credit
|
||||
MenuChequeDeposits=Check Deposits
|
||||
MenuChequeDeposits=Deposits slips
|
||||
MenuCheques=Checks
|
||||
MenuChequesReceipts=Check receipts
|
||||
NewChequeDeposit=New deposit
|
||||
ChequesReceipts=Check receipts
|
||||
ChequesArea=Check deposits area
|
||||
ChequeDeposits=Check deposits
|
||||
MenuChequesReceipts=Deposit slips
|
||||
NewChequeDeposit=New deposit slip
|
||||
ChequesReceipts=Cheque deposit slips
|
||||
DocumentsDepositArea=Deposit slip area
|
||||
ChequesArea=Deposit slips area
|
||||
ChequeDeposits=Deposit slips
|
||||
Cheques=Checks
|
||||
DepositId=Id deposit
|
||||
NbCheque=Number of checks
|
||||
|
||||
@ -130,14 +130,17 @@ SalesTurnoverMinimum=Minimum turnover
|
||||
ByExpenseIncome=By expenses & incomes
|
||||
ByThirdParties=By third parties
|
||||
ByUserAuthorOfInvoice=By invoice author
|
||||
CheckReceipt=Check deposit
|
||||
CheckReceiptShort=Check deposit
|
||||
LastCheckReceiptShort=Latest %s check receipts
|
||||
CheckReceipt=Deposit slip
|
||||
CheckReceiptShort=Deposit slip
|
||||
LastCheckReceiptShort=Latest %s deposit slips
|
||||
LastPaymentForDepositShort=Latest %s %s deposit slips
|
||||
NewCheckReceipt=New discount
|
||||
NewCheckDeposit=New check deposit
|
||||
NewCheckDeposit=New deposit slip
|
||||
NewCheckDepositOn=Create receipt for deposit on account: %s
|
||||
NoWaitingChecks=No checks awaiting deposit.
|
||||
NoWaitingPaymentForDeposit=No %s payment awaiting deposit.
|
||||
DateChequeReceived=Check receiving date
|
||||
DatePaymentReceived=Date of document reception
|
||||
NbOfCheques=No. of checks
|
||||
PaySocialContribution=Pay a social/fiscal tax
|
||||
PayVAT=Pay a VAT declaration
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
ContractsArea=Contracts area
|
||||
ListOfContracts=List of contracts
|
||||
AllContracts=All contracts
|
||||
ContractCard=Contract card
|
||||
ContractCard=Contract
|
||||
ContractStatusNotRunning=Not running
|
||||
ContractStatusDraft=Draft
|
||||
ContractStatusValidated=Validated
|
||||
|
||||
@ -32,6 +32,7 @@ Language_en_AU=English (Australia)
|
||||
Language_en_CA=English (Canada)
|
||||
Language_en_GB=English (United Kingdom)
|
||||
Language_en_IN=English (India)
|
||||
Language_en_MY=English (Myanmar)
|
||||
Language_en_NZ=English (New Zealand)
|
||||
Language_en_SA=English (Saudi Arabia)
|
||||
Language_en_SG=English (Singapore)
|
||||
|
||||
@ -174,3 +174,6 @@ MenuDeletedSuccessfuly=Menu has been successfully deleted
|
||||
MenuAddedSuccessfuly=Menu has been successfully added
|
||||
MenuUpdatedSuccessfuly=Menu has been successfully updated
|
||||
ApiObjectDeleted=API for object %s has been successfully deleted
|
||||
CRUDRead=Read
|
||||
CRUDCreateWrite=Create or Update
|
||||
FailedToAddCodeIntoDescriptor=Failed to add code into descriptor. Check that the string comment "%s" is still present into the file.
|
||||
@ -733,6 +733,9 @@ class Loan extends CommonObject
|
||||
public function getKanbanView($option = '')
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -740,6 +743,7 @@ class Loan extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl(1) : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'capital')) {
|
||||
$return .= ' | <span class="opacitymedium">'.$langs->trans("Amount").'</span> : <span class="info-box-label amount">'.price($this->capital).'</span>';
|
||||
}
|
||||
|
||||
@ -401,27 +401,29 @@ if ($dirins && in_array($action, array('initapi', 'initphpunit', 'initpagecontac
|
||||
$modulename = ucfirst($module); // Force first letter in uppercase
|
||||
$objectname = $tabobj;
|
||||
$varnametoupdate = '';
|
||||
$dirins = $listofmodules[strtolower($module)]['moduledescriptorrootpath'];
|
||||
$destdir = $dirins.'/'.strtolower($module);
|
||||
|
||||
// Get list of existing objects
|
||||
$objects = array();
|
||||
$listofobject = dol_dir_list($destdir.'/class', 'files', 0, '\.class\.php$');
|
||||
foreach ($listofobject as $fileobj) {
|
||||
if (preg_match('/^api_/', $fileobj['name'])) {
|
||||
continue;
|
||||
}
|
||||
if (preg_match('/^actions_/', $fileobj['name'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$tmpcontent = file_get_contents($fileobj['fullname']);
|
||||
$reg = array();
|
||||
if (preg_match('/class\s+([^\s]*)\s+extends\s+CommonObject/ims', $tmpcontent, $reg)) {
|
||||
$objectnameloop = $reg[1];
|
||||
$objects[$fileobj['fullname']] = $objectnameloop;
|
||||
}
|
||||
}
|
||||
|
||||
if ($action == 'initapi') {
|
||||
$dirins = $listofmodules[strtolower($module)]['moduledescriptorrootpath'];
|
||||
$destdir = $dirins.'/'.strtolower($module);
|
||||
$listofobject = dol_dir_list($destdir.'/class', 'files', 0, '\.class\.php$');
|
||||
$objects = array();
|
||||
foreach ($listofobject as $fileobj) {
|
||||
if (preg_match('/^api_/', $fileobj['name'])) {
|
||||
continue;
|
||||
}
|
||||
if (preg_match('/^actions_/', $fileobj['name'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$tmpcontent = file_get_contents($fileobj['fullname']);
|
||||
$reg = array();
|
||||
if (preg_match('/class\s+([^\s]*)\s+extends\s+CommonObject/ims', $tmpcontent, $reg)) {
|
||||
$objectnameloop = $reg[1];
|
||||
$objects[] = $objectnameloop;
|
||||
}
|
||||
}
|
||||
if (file_exists($dirins.'/'.strtolower($module).'/class/api_'.strtolower($module).'.class.php')) {
|
||||
$result = dol_copy(DOL_DOCUMENT_ROOT.'/modulebuilder/template/class/api_mymodule.class.php', $dirins.'/'.strtolower($module).'/class/api_'.strtolower($module).'.class.php', 0, 1);
|
||||
}
|
||||
@ -482,6 +484,7 @@ if ($dirins && in_array($action, array('initapi', 'initphpunit', 'initpagecontac
|
||||
'MYOBJECT'=>strtoupper($objectname),
|
||||
'---Put here your own copyright and developer email---'=>dol_print_date($now, '%Y').' '.$user->getFullName($langs).($user->email ? ' <'.$user->email.'>' : '')
|
||||
);
|
||||
|
||||
if (count($objects) > 1) {
|
||||
$file = $destfile;
|
||||
$content = file($file);
|
||||
@ -913,10 +916,16 @@ if ($dirins && $action == 'addlanguage' && !empty($module)) {
|
||||
setEventMessages($langs->trans("ErrorFailToCopyFile", $srcfile, $destfile), null, 'errors');
|
||||
}
|
||||
} else {
|
||||
$srcfile = $diroflang.'/langs/en_US';
|
||||
$destfile = $diroflang.'/langs/'.$newlangcode;
|
||||
$srcdir = $diroflang.'/langs/en_US';
|
||||
$srcfile = $diroflang.'/langs/en_US/'.$modulelowercase.'.lang';
|
||||
$destdir = $diroflang.'/langs/'.$newlangcode;
|
||||
|
||||
$result = dolCopyDir($srcfile, $destfile, 0, 0);
|
||||
$arrayofreplacement = array();
|
||||
if (!dol_is_dir($srcfile) || !dol_is_file($srcfile)) {
|
||||
$srcdir = DOL_DOCUMENT_ROOT.'/modulebuilder/template/langs/en_US';
|
||||
$arrayofreplacement = array('mymodule'=>$modulelowercase);
|
||||
}
|
||||
$result = dolCopyDir($srcdir, $destdir, 0, 0, $arrayofreplacement);
|
||||
}
|
||||
} else {
|
||||
setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("Language")), null, 'errors');
|
||||
@ -924,19 +933,18 @@ if ($dirins && $action == 'addlanguage' && !empty($module)) {
|
||||
}
|
||||
|
||||
|
||||
// remove/delete File
|
||||
// Remove/delete File
|
||||
if ($dirins && $action == 'confirm_removefile' && !empty($module)) {
|
||||
$objectname = $tabobj;
|
||||
|
||||
$relativefilename = dol_sanitizePathName(GETPOST('file', 'restricthtml'));
|
||||
$file_api = $dirins."/".$relativefilename;
|
||||
|
||||
//check if have more than one object
|
||||
$dirins = $listofmodules[strtolower($module)]['moduledescriptorrootpath'];
|
||||
$destdir = $dirins.'/'.strtolower($module);
|
||||
$listofobject = dol_dir_list($destdir.'/class', 'files', 0, '\.class\.php$');
|
||||
$objects = array();
|
||||
|
||||
$relativefilename = dol_sanitizePathName(GETPOST('file', 'restricthtml'));
|
||||
|
||||
// Get list of existing objects
|
||||
// TODO ALI This part of code is common at several places and is autonomous. So replace it with $objects = dolGetListOfObjectclasses($destdir);
|
||||
$objects = array();
|
||||
$listofobject = dol_dir_list($destdir.'/class', 'files', 0, '\.class\.php$');
|
||||
foreach ($listofobject as $fileobj) {
|
||||
if (preg_match('/^api_/', $fileobj['name'])) {
|
||||
continue;
|
||||
@ -944,123 +952,66 @@ if ($dirins && $action == 'confirm_removefile' && !empty($module)) {
|
||||
if (preg_match('/^actions_/', $fileobj['name'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$tmpcontent = file_get_contents($fileobj['fullname']);
|
||||
$reg = array();
|
||||
if (preg_match('/class\s+([^\s]*)\s+extends\s+CommonObject/ims', $tmpcontent, $reg)) {
|
||||
$objectnameloop = $reg[1];
|
||||
$objects[] = $objectnameloop;
|
||||
$objects[$fileobj['fullname']] = $objectnameloop;
|
||||
}
|
||||
}
|
||||
|
||||
$existObj = 0;
|
||||
$file = file_get_contents($file_api);
|
||||
$objs = array();
|
||||
if (str_contains($file, $objectname)) {
|
||||
$existObj++;
|
||||
}
|
||||
if ($existObj && count($objects) > 1) {
|
||||
$begin = '/*CRUD FOR '.strtoupper($objectname).'*/';
|
||||
$end = '/*END CRUD FOR '.strtoupper($objectname).'*/';
|
||||
$varcomentedDel = "\t * @var ".$objectname." \$".strtolower($objectname)." {@type ".$objectname."}";
|
||||
$propsDel .= "\tpublic \$".strtolower($objectname).";";
|
||||
$constructObjDel .= "\t\t\$this->".strtolower($objectname)."= new ".$objectname."(\$this->db);";
|
||||
$content = file($file_api);
|
||||
// for delete property and the initialization from the construct
|
||||
foreach ($content as $lineNumber => &$lineContent) {
|
||||
if (strpos($lineContent, $varcomentedDel) !== false) {
|
||||
$lineContent = '';
|
||||
// Now we delete the file
|
||||
if ($relativefilename) {
|
||||
$dirnametodelete = dirname($relativefilename);
|
||||
$filetodelete = $dirins.'/'.$relativefilename;
|
||||
$dirtodelete = $dirins.'/'.$dirnametodelete;
|
||||
|
||||
$result = dol_delete_file($filetodelete);
|
||||
if (!$result) {
|
||||
setEventMessages($langs->trans("ErrorFailToDeleteFile", basename($filetodelete)), null, 'errors');
|
||||
} else {
|
||||
// If we delete a .sql file, we delete also the other .sql file
|
||||
if (preg_match('/\.sql$/', $relativefilename)) {
|
||||
if (preg_match('/\.key\.sql$/', $relativefilename)) {
|
||||
$relativefilename = preg_replace('/\.key\.sql$/', '.sql', $relativefilename);
|
||||
$filetodelete = $dirins.'/'.$relativefilename;
|
||||
$result = dol_delete_file($filetodelete);
|
||||
} elseif (preg_match('/\.sql$/', $relativefilename)) {
|
||||
$relativefilename = preg_replace('/\.sql$/', '.key.sql', $relativefilename);
|
||||
$filetodelete = $dirins.'/'.$relativefilename;
|
||||
$result = dol_delete_file($filetodelete);
|
||||
}
|
||||
}
|
||||
if (strpos($lineContent, $propsDel) !== false) {
|
||||
$lineContent = '';
|
||||
|
||||
if (dol_is_dir_empty($dirtodelete)) {
|
||||
dol_delete_dir($dirtodelete);
|
||||
}
|
||||
if (strpos($lineContent, $constructObjDel) !== false) {
|
||||
$lineContent = '';
|
||||
|
||||
// Update descriptor file to comment file
|
||||
if (in_array($tab, array('css', 'js'))) {
|
||||
$srcfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php';
|
||||
$arrayreplacement = array('/^\s*\''.preg_quote('/'.$relativefilename, '/').'\',*/m'=>' // \'/'.$relativefilename.'\',');
|
||||
dolReplaceInFile($srcfile, $arrayreplacement, '', 0, 0, 1);
|
||||
}
|
||||
}
|
||||
$allContent = implode("", $content);
|
||||
file_put_contents($file_api, $allContent);
|
||||
// for delete methods of object
|
||||
$handle = fopen($file_api, "r");
|
||||
$i = 1;
|
||||
$lines = array();
|
||||
while (($line = fgets($handle)) !== false) {
|
||||
//search line begin
|
||||
if (strpos($line, $begin) !== false) {
|
||||
$start_line = $i;
|
||||
// Copy lines until the end on array
|
||||
while (($line = fgets($handle)) !== false) {
|
||||
if (strpos($line, $end) !== false) {
|
||||
$end_line = $i;
|
||||
break;
|
||||
}
|
||||
$lines[] = $line;
|
||||
$i++;
|
||||
}
|
||||
break;
|
||||
|
||||
if (preg_match('/_extrafields/', $relativefilename)) {
|
||||
// Now we update the object file to set $isextrafieldmanaged to 0
|
||||
$srcfile = $dirins.'/'.strtolower($module).'/class/'.strtolower($objectname).'.class.php';
|
||||
$arrayreplacement = array('/\$isextrafieldmanaged = 1;/' => '$isextrafieldmanaged = 0;');
|
||||
dolReplaceInFile($srcfile, $arrayreplacement, '', 0, 0, 1);
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
$allContent = implode("", $lines);
|
||||
//var_dump($allContent);exit;
|
||||
$check = dolReplaceInFile($file_api, array($allContent => ''));
|
||||
if ($check) {
|
||||
dolReplaceInFile($file_api, array($begin => '', $end => ''));
|
||||
setEventMessages($langs->trans("ApiObjectDeleted", $langs->transnoentities($objectname)), null);
|
||||
}
|
||||
fclose($handle);
|
||||
}
|
||||
if (count($objects) == 1 && $existObj) {
|
||||
if ($relativefilename) {
|
||||
$dirnametodelete = dirname($relativefilename);
|
||||
$filetodelete = $dirins.'/'.$relativefilename;
|
||||
$dirtodelete = $dirins.'/'.$dirnametodelete;
|
||||
|
||||
$result = dol_delete_file($filetodelete);
|
||||
if (!$result) {
|
||||
setEventMessages($langs->trans("ErrorFailToDeleteFile", basename($filetodelete)), null, 'errors');
|
||||
} else {
|
||||
// If we delete a .sql file, we delete also the other .sql file
|
||||
if (preg_match('/\.sql$/', $relativefilename)) {
|
||||
if (preg_match('/\.key\.sql$/', $relativefilename)) {
|
||||
$relativefilename = preg_replace('/\.key\.sql$/', '.sql', $relativefilename);
|
||||
$filetodelete = $dirins.'/'.$relativefilename;
|
||||
$result = dol_delete_file($filetodelete);
|
||||
} elseif (preg_match('/\.sql$/', $relativefilename)) {
|
||||
$relativefilename = preg_replace('/\.sql$/', '.key.sql', $relativefilename);
|
||||
$filetodelete = $dirins.'/'.$relativefilename;
|
||||
$result = dol_delete_file($filetodelete);
|
||||
}
|
||||
}
|
||||
|
||||
if (dol_is_dir_empty($dirtodelete)) {
|
||||
dol_delete_dir($dirtodelete);
|
||||
}
|
||||
|
||||
// Update descriptor file to comment file
|
||||
if (in_array($tab, array('css', 'js'))) {
|
||||
$srcfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php';
|
||||
$arrayreplacement = array('/^\s*\''.preg_quote('/'.$relativefilename, '/').'\',*/m'=>' // \'/'.$relativefilename.'\',');
|
||||
dolReplaceInFile($srcfile, $arrayreplacement, '', 0, 0, 1);
|
||||
}
|
||||
|
||||
if (preg_match('/_extrafields/', $relativefilename)) {
|
||||
// Now we update the object file to set $isextrafieldmanaged to 0
|
||||
$srcfile = $dirins.'/'.strtolower($module).'/class/'.strtolower($objectname).'.class.php';
|
||||
$arrayreplacement = array('/\$isextrafieldmanaged = 1;/' => '$isextrafieldmanaged = 0;');
|
||||
dolReplaceInFile($srcfile, $arrayreplacement, '', 0, 0, 1);
|
||||
}
|
||||
|
||||
// Now we update the lib file to set $showtabofpagexxx to 0
|
||||
$varnametoupdate = '';
|
||||
$reg = array();
|
||||
if (preg_match('/_([a-z]+)\.php$/', $relativefilename, $reg)) {
|
||||
$varnametoupdate = 'showtabofpage'.$reg[1];
|
||||
}
|
||||
if ($varnametoupdate) {
|
||||
$srcfile = $dirins.'/'.strtolower($module).'/lib/'.strtolower($module).'_'.strtolower($objectname).'.lib.php';
|
||||
$arrayreplacement = array('/\$'.$varnametoupdate.' = 1;/' => '$'.$varnametoupdate.' = 0;');
|
||||
dolReplaceInFile($srcfile, $arrayreplacement, '', 0, 0, 1);
|
||||
}
|
||||
// Now we update the lib file to set $showtabofpagexxx to 0
|
||||
$varnametoupdate = '';
|
||||
$reg = array();
|
||||
if (preg_match('/_([a-z]+)\.php$/', $relativefilename, $reg)) {
|
||||
$varnametoupdate = 'showtabofpage'.$reg[1];
|
||||
}
|
||||
if ($varnametoupdate) {
|
||||
$srcfile = $dirins.'/'.strtolower($module).'/lib/'.strtolower($module).'_'.strtolower($objectname).'.lib.php';
|
||||
$arrayreplacement = array('/\$'.$varnametoupdate.' = 1;/' => '$'.$varnametoupdate.' = 0;');
|
||||
dolReplaceInFile($srcfile, $arrayreplacement, '', 0, 0, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1074,9 +1025,12 @@ if ($dirins && $action == 'initobject' && $module && $objectname) {
|
||||
dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", (int) $conf->global->MAIN_IHM_PARAMS_REV + 1, 'chaine', 0, '', $conf->entity);
|
||||
if ($result) {
|
||||
setEventMessages($result, null, 'errors');
|
||||
} else {
|
||||
/* FIX ALI header must be after action. Always add an exit after a header.
|
||||
header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
|
||||
*/
|
||||
setEventMessages($langs->trans('WarningModuleNeedRefrech', $langs->transnoentities($module)), null, 'warnings');
|
||||
}
|
||||
header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
|
||||
setEventMessages($langs->trans('WarningModuleNeedRefrech', $langs->transnoentities($module)), null, 'warnings');
|
||||
}
|
||||
|
||||
$objectname = ucfirst($objectname);
|
||||
@ -1539,31 +1493,43 @@ if ($dirins && $action == 'initobject' && $module && $objectname) {
|
||||
// Regenerate left menu entry in descriptor for $objectname
|
||||
$stringtoadd = "
|
||||
\$this->menu[\$r++]=array(
|
||||
// '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
|
||||
'fk_menu'=>'fk_mainmenu=mymodule',
|
||||
// This is a Left menu entry
|
||||
'type'=>'left',
|
||||
'titre'=>'List MyObject',
|
||||
'mainmenu'=>'mymodule',
|
||||
'leftmenu'=>'myobject',
|
||||
'leftmenu'=>'mymodule_myobject',
|
||||
'url'=>'/mymodule/myobject_list.php',
|
||||
// Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
|
||||
'langs'=>'mymodule@mymodule',
|
||||
'position'=>1100+\$r,
|
||||
// Define condition to show or hide menu entry. Use '\$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '\$leftmenu==\'system\'' to show if leftmenu system is selected.
|
||||
'enabled'=>'\$conf->mymodule->enabled',
|
||||
// Use 'perms'=>'\$user->rights->mymodule->level1->level2' if you want your menu with a permission rules
|
||||
'perms'=>'1',
|
||||
'target'=>'',
|
||||
// 0=Menu for internal users, 1=external users, 2=both
|
||||
'user'=>2,
|
||||
);
|
||||
\$this->menu[\$r++]=array(
|
||||
'fk_menu'=>'fk_mainmenu=mymodule,fk_leftmenu=myobject',
|
||||
// '' if this is a top menu. For left menu, use 'fk_mainmenu=xxx' or 'fk_mainmenu=xxx,fk_leftmenu=yyy' where xxx is mainmenucode and yyy is a leftmenucode
|
||||
'fk_menu'=>'fk_mainmenu=mymodule,fk_leftmenu=mymodule_myobject',
|
||||
// This is a Left menu entry
|
||||
'type'=>'left',
|
||||
'titre'=>'New MyObject',
|
||||
'mainmenu'=>'mymodule',
|
||||
'leftmenu'=>'myobject',
|
||||
'leftmenu'=>'mymodule_myobject',
|
||||
'url'=>'/mymodule/myobject_card.php?action=create',
|
||||
// Lang file to use (without .lang) by module. File must be in langs/code_CODE/ directory.
|
||||
'langs'=>'mymodule@mymodule',
|
||||
'position'=>1100+\$r,
|
||||
// Define condition to show or hide menu entry. Use '\$conf->mymodule->enabled' if entry must be visible if module is enabled. Use '\$leftmenu==\'system\'' to show if leftmenu system is selected.
|
||||
'enabled'=>'\$conf->mymodule->enabled',
|
||||
// Use 'perms'=>'\$user->rights->mymodule->level1->level2' if you want your menu with a permission rules
|
||||
'perms'=>'1',
|
||||
'target'=>'',
|
||||
// 0=Menu for internal users, 1=external users, 2=both
|
||||
'user'=>2
|
||||
);\n";
|
||||
$stringtoadd = preg_replace('/MyObject/', $objectname, $stringtoadd);
|
||||
@ -1572,13 +1538,14 @@ if ($dirins && $action == 'initobject' && $module && $objectname) {
|
||||
|
||||
$moduledescriptorfile = $destdir.'/core/modules/mod'.$module.'.class.php';
|
||||
}
|
||||
// TODO Allow a replace with regex using dolReplaceInFile with param arryreplacementisregex to 1
|
||||
// TODO Avoid duplicate addition
|
||||
|
||||
// load class and check if menu exist with same object name
|
||||
$pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath'];
|
||||
dol_include_once($pathtofile);
|
||||
$class = 'mod'.$module;
|
||||
// TODO Allow a replace with regex using dolReplaceInFile with param arryreplacementisregex to 1
|
||||
// TODO Avoid duplicate addition
|
||||
|
||||
// load class and check if menu exist with same object name
|
||||
$pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath'];
|
||||
dol_include_once($pathtofile);
|
||||
$class = 'mod'.$module;
|
||||
if (class_exists($class)) {
|
||||
try {
|
||||
$moduleobj = new $class($db);
|
||||
@ -1587,8 +1554,8 @@ if ($dirins && $action == 'initobject' && $module && $objectname) {
|
||||
dol_print_error($db, $e->getMessage());
|
||||
}
|
||||
}
|
||||
$menus = $moduleobj->menu;
|
||||
$counter = 0 ;
|
||||
$menus = $moduleobj->menu;
|
||||
$counter = 0 ;
|
||||
foreach ($menus as $menu) {
|
||||
if ($menu['leftmenu'] == strtolower($objectname)) {
|
||||
$counter++;
|
||||
@ -1597,8 +1564,9 @@ if ($dirins && $action == 'initobject' && $module && $objectname) {
|
||||
if (!$counter) {
|
||||
dolReplaceInFile($moduledescriptorfile, array('/* END MODULEBUILDER LEFTMENU MYOBJECT */' => '/*LEFTMENU '.strtoupper($objectname).'*/'.$stringtoadd."\n\t\t".'/*END LEFTMENU '.strtoupper($objectname).'*/'."\n\t\t".'/* END MODULEBUILDER LEFTMENU MYOBJECT */'));
|
||||
}
|
||||
// Add module descriptor to list of files to replace "MyObject' string with real name of object.
|
||||
$filetogenerate[] = 'core/modules/mod'.$module.'.class.php';
|
||||
|
||||
// Add module descriptor to list of files to replace "MyObject' string with real name of object.
|
||||
$filetogenerate[] = 'core/modules/mod'.$module.'.class.php';
|
||||
}
|
||||
|
||||
if (!$error) {
|
||||
@ -1940,9 +1908,13 @@ if ($dirins && $action == 'confirm_deleteobject' && $objectname) {
|
||||
dolibarr_set_const($db, "MAIN_IHM_PARAMS_REV", (int) $conf->global->MAIN_IHM_PARAMS_REV + 1, 'chaine', 0, '', $conf->entity);
|
||||
if ($result) {
|
||||
setEventMessages($result, null, 'errors');
|
||||
$error++;
|
||||
} else {
|
||||
/* TODO ALI Header redirect must be at end after actions. Also tab=pemrissions looks strange
|
||||
header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
|
||||
*/
|
||||
setEventMessages($langs->trans('WarningModuleNeedRefrech', $langs->transnoentities($module)), null, 'warnings');
|
||||
}
|
||||
header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
|
||||
setEventMessages($langs->trans('WarningModuleNeedRefrech', $langs->transnoentities($module)), null, 'warnings');
|
||||
}
|
||||
if (preg_match('/[^a-z0-9_]/i', $objectname)) {
|
||||
$error++;
|
||||
@ -2244,15 +2216,32 @@ if ($dirins && $action == 'addright' && !empty($module) && empty($cancel)) {
|
||||
\$r++;
|
||||
";
|
||||
$moduledescriptorfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php';
|
||||
|
||||
//var_dump($existRight.' '.$firstRight);exit;
|
||||
if (!$existRight) {
|
||||
dolReplaceInFile($moduledescriptorfile, array('/*END '.strtoupper($objectForPerms).'*/' => $rightToAdd.'/*END '.strtoupper($objectForPerms).'*/'));
|
||||
setEventMessages($langs->trans('PermissionAddedSuccesfuly'), null);
|
||||
}
|
||||
if ($firstRight>0) {
|
||||
dolReplaceInFile($moduledescriptorfile, array('/* END MODULEBUILDER PERMISSIONS */' => '/*'.strtoupper($objectForPerms).'*/'.$rightToAdd."/*END ".strtoupper($objectForPerms).'*/'."\n\t\t".'/* END MODULEBUILDER PERMISSIONS */'));
|
||||
setEventMessages($langs->trans('PermissionAddedSuccesfuly'), null);
|
||||
if ($firstRight > 0) {
|
||||
$filecontentbefore = file_get_contents($moduledescriptorfile);
|
||||
|
||||
$result = dolReplaceInFile($moduledescriptorfile, array('/* END MODULEBUILDER PERMISSIONS */' => '/*'.strtoupper($objectForPerms).'*/'.$rightToAdd."/*END ".strtoupper($objectForPerms).'*/'."\n\t\t".'/* END MODULEBUILDER PERMISSIONS */'));
|
||||
|
||||
$filecontentafter = file_get_contents($moduledescriptorfile);
|
||||
|
||||
if ($filecontentbefore != $filecontentafter) {
|
||||
setEventMessages($langs->trans('PermissionAddedSuccesfuly'), null);
|
||||
} else {
|
||||
setEventMessages($langs->trans('FailedToAddCodeIntoDescriptor', 'END MODULEBUILDER PERMISSIONS'), null, 'warnings');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
clearstatcache(true);
|
||||
if (function_exists('opcache_invalidate')) {
|
||||
opcache_reset(); // remove the include cache hell !
|
||||
}
|
||||
|
||||
header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
|
||||
exit;
|
||||
}
|
||||
@ -2336,6 +2325,7 @@ if ($dirins && GETPOST('action') == 'update_right' && GETPOST('modifyright')&& e
|
||||
}
|
||||
}
|
||||
|
||||
// TODO ALI Update of permission must be done by rewriting completely the permission section
|
||||
//prepare right want to delete
|
||||
$right = "
|
||||
\$this->rights[\$r][0] = \$this->numero . sprintf('%02d', \$r + 1);
|
||||
@ -2352,6 +2342,7 @@ if ($dirins && GETPOST('action') == 'update_right' && GETPOST('modifyright')&& e
|
||||
\$this->rights[\$r][5] = '$crud';
|
||||
\$r++;
|
||||
";
|
||||
|
||||
if (!$error) {
|
||||
if (isModEnabled(strtolower($module))) {
|
||||
$result = unActivateModule(strtolower($module));
|
||||
@ -2366,8 +2357,14 @@ if ($dirins && GETPOST('action') == 'update_right' && GETPOST('modifyright')&& e
|
||||
$moduledescriptorfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php';
|
||||
$check = dolReplaceInFile($moduledescriptorfile, array($right => $rightUpdated));
|
||||
|
||||
header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
|
||||
setEventMessages($langs->trans('PermissionUpdatedSuccesfuly'), null);
|
||||
|
||||
clearstatcache(true);
|
||||
if (function_exists('opcache_invalidate')) {
|
||||
opcache_reset(); // remove the include cache hell !
|
||||
}
|
||||
|
||||
header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
@ -2377,7 +2374,7 @@ if ($dirins && $action == 'confirm_deleteright' && !empty($module) && GETPOST('p
|
||||
// load class and check if right exist
|
||||
$pathtofile = $listofmodules[strtolower($module)]['moduledescriptorrelpath'];
|
||||
dol_include_once($pathtofile);
|
||||
$class = 'mod'.$module;
|
||||
$class = 'mod'.$module;
|
||||
if (class_exists($class)) {
|
||||
try {
|
||||
$moduleobj = new $class($db);
|
||||
@ -2387,14 +2384,14 @@ if ($dirins && $action == 'confirm_deleteright' && !empty($module) && GETPOST('p
|
||||
}
|
||||
}
|
||||
|
||||
$permissions = $moduleobj->rights;
|
||||
$key = (int) GETPOST('permskey', 'int')-1;
|
||||
//get permission want to delete from permissions array
|
||||
$x1 = $permissions[$key][1];
|
||||
$x2 = $permissions[$key][4];
|
||||
$x3 = $permissions[$key][5];
|
||||
//prepare right want to delete
|
||||
$rightTodelete = "
|
||||
$permissions = $moduleobj->rights;
|
||||
$key = (int) GETPOST('permskey', 'int')-1;
|
||||
//get permission want to delete from permissions array
|
||||
$x1 = $permissions[$key][1];
|
||||
$x2 = $permissions[$key][4];
|
||||
$x3 = $permissions[$key][5];
|
||||
//prepare right want to delete
|
||||
$rightTodelete = "
|
||||
\$this->rights[\$r][0] = \$this->numero . sprintf('%02d', \$r + 1);
|
||||
\$this->rights[\$r][1] = '$x1';
|
||||
\$this->rights[\$r][4] = '$x2';
|
||||
@ -2402,9 +2399,11 @@ if ($dirins && $action == 'confirm_deleteright' && !empty($module) && GETPOST('p
|
||||
\$r++;
|
||||
";
|
||||
|
||||
$moduledescriptorfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php';
|
||||
|
||||
// TODO ALI The delete must be done by rewriting all content between /* BEGIN MODULEBUILDER PERMISSIONS */ and /* END MODULEBUILDER PERMISSIONS */
|
||||
$check = dolReplaceInFile($moduledescriptorfile, array($rightTodelete => "\n\t\t"));
|
||||
|
||||
$moduledescriptorfile = $dirins.'/'.strtolower($module).'/core/modules/mod'.$module.'.class.php';
|
||||
$check = dolReplaceInFile($moduledescriptorfile, array($rightTodelete => "\n\t\t"));
|
||||
if ($check > 0) {
|
||||
//check if all permissions of object was deleted
|
||||
$permsForObj = array();
|
||||
@ -2424,13 +2423,20 @@ if ($dirins && $action == 'confirm_deleteright' && !empty($module) && GETPOST('p
|
||||
if ($result) {
|
||||
setEventMessages($result, null, 'errors');
|
||||
}
|
||||
header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
|
||||
setEventMessages($langs->trans('PermissionDeletedSuccesfuly'), null);
|
||||
setEventMessages($langs->trans('WarningModuleNeedRefrech', $langs->transnoentities($module)), null, 'warnings');
|
||||
|
||||
header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
|
||||
exit;
|
||||
} else {
|
||||
header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
|
||||
setEventMessages($langs->trans('PermissionDeletedSuccesfuly'), null);
|
||||
|
||||
clearstatcache(true);
|
||||
if (function_exists('opcache_invalidate')) {
|
||||
opcache_reset(); // remove the include cache hell !
|
||||
}
|
||||
|
||||
header("Location: ".DOL_URL_ROOT.'/modulebuilder/index.php?tab=permissions&module='.$module);
|
||||
exit;
|
||||
}
|
||||
}
|
||||
@ -2647,6 +2653,8 @@ if ($dirins && $action == 'addmenu' && empty($cancel)) {
|
||||
$dirins = $listofmodules[strtolower($module)]['moduledescriptorrootpath'];
|
||||
$destdir = $dirins.'/'.strtolower($module);
|
||||
$listofobject = dol_dir_list($destdir.'/class', 'files', 0, '\.class\.php$');
|
||||
|
||||
// Get list of existing objets
|
||||
$objects = array();
|
||||
foreach ($listofobject as $fileobj) {
|
||||
if (preg_match('/^api_/', $fileobj['name'])) {
|
||||
@ -2660,7 +2668,7 @@ if ($dirins && $action == 'addmenu' && empty($cancel)) {
|
||||
$reg = array();
|
||||
if (preg_match('/class\s+([^\s]*)\s+extends\s+CommonObject/ims', $tmpcontent, $reg)) {
|
||||
$objectnameloop = $reg[1];
|
||||
$objects[] = $objectnameloop;
|
||||
$objects[$fileobj['fullname']] = $objectnameloop;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3355,15 +3363,15 @@ if ($module == 'initmodule') {
|
||||
$pathtochangelog = $modulelowercase.'/ChangeLog.md';
|
||||
|
||||
if ($action != 'editfile' || empty($file)) {
|
||||
print dol_get_fiche_head($head2, $tab, '', -1, '', 0, '', '', $MAXTABFOROBJECT, 'formodulesuffix'); // Description - level 2
|
||||
$morehtmlright = '';
|
||||
if (realpath($dirread.'/'.$modulelowercase) != $dirread.'/'.$modulelowercase) {
|
||||
$morehtmlright = '<div style="padding: 12px 9px 12px">'.$form->textwithpicto('', '<span class="opacitymedium">'.$langs->trans("RealPathOfModule").' :</span> <strong class="wordbreak">'.realpath($dirread.'/'.$modulelowercase).'</strong>').'</div>';
|
||||
}
|
||||
|
||||
print dol_get_fiche_head($head2, $tab, '', -1, '', 0, $morehtmlright, '', $MAXTABFOROBJECT, 'formodulesuffix'); // Description - level 2
|
||||
|
||||
print '<span class="opacitymedium">'.$langs->trans("ModuleBuilderDesc".$tab).'</span>';
|
||||
$infoonmodulepath = '';
|
||||
if (realpath($dirread.'/'.$modulelowercase) != $dirread.'/'.$modulelowercase) {
|
||||
$infoonmodulepath = '<span class="opacitymedium">'.$langs->trans("RealPathOfModule").' :</span> <strong class="wordbreak">'.realpath($dirread.'/'.$modulelowercase).'</strong><br>';
|
||||
print ' '.$infoonmodulepath;
|
||||
}
|
||||
print '<br>';
|
||||
print '<br><br>';
|
||||
|
||||
print '<table>';
|
||||
|
||||
@ -3401,7 +3409,8 @@ if ($module == 'initmodule') {
|
||||
print '</td><td>';
|
||||
print $moduleobj->numero;
|
||||
print '<span class="opacitymedium">';
|
||||
print ' (<a href="'.DOL_URL_ROOT.'/admin/system/modules.php?mainmenu=home&leftmenu=admintools_info" target="_blank" rel="noopener noreferrer">'.$langs->trans("SeeIDsInUse").'</a>';
|
||||
print ' (';
|
||||
print dolButtonToOpenUrlInDialogPopup('popup_modules_id', $langs->transnoentitiesnoconv("SeeIDsInUse"), $langs->transnoentitiesnoconv("SeeIDsInUse"), '/admin/system/modules.php?mainmenu=home&leftmenu=admintools_info', '', '');
|
||||
print ' - <a href="https://wiki.dolibarr.org/index.php/List_of_modules_id" target="_blank" rel="noopener noreferrer external">'.$langs->trans("SeeReservedIDsRangeHere").'</a>)';
|
||||
print '</span>';
|
||||
print '</td></tr>';
|
||||
@ -3838,7 +3847,6 @@ if ($module == 'initmodule') {
|
||||
$urloflist = dol_buildpath('/'.$pathtolist, 1);
|
||||
$urlofcard = dol_buildpath('/'.$pathtocard, 1);
|
||||
|
||||
$file = file_get_contents($realpathtoapi);
|
||||
$objs = array();
|
||||
|
||||
print '<!-- section for object -->';
|
||||
@ -3860,15 +3868,20 @@ if ($module == 'initmodule') {
|
||||
// API file
|
||||
print '<br>';
|
||||
print '<span class="fa fa-file-o"></span> '.$langs->trans("ApiClassFile").' : <strong class="wordbreak">'.(dol_is_file($realpathtoapi) ? '' : '<strike><span class="opacitymedium">').preg_replace('/^'.strtolower($module).'\//', '', $pathtoapi).(dol_is_file($realpathtoapi)?'':'</span></strike>').'</strong>';
|
||||
if (dol_is_file($realpathtoapi) && preg_match('/var '.$tabobj.'\s+([^\s]*)\s/ims', $file, $objs)) {
|
||||
print ' <a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?tab='.urlencode($tab).'&tabobj='.$tabobj.'&module='.$module.($forceddirread ? '@'.$dirread : '').'&action=editfile&token='.newToken().'&format=php&file='.urlencode($pathtoapi).'">'.img_picto($langs->trans("Edit"), 'edit').'</a>';
|
||||
print ' ';
|
||||
print '<a class="reposition editfielda" href="'.$_SERVER['PHP_SELF'].'?tab='.urlencode($tab).'&tabobj='.$tabobj.'&module='.$module.($forceddirread ? '@'.$dirread : '').'&action=confirm_removefile&token='.newToken().'&file='.urlencode($pathtoapi).'">'.img_picto($langs->trans("Delete"), 'delete').'</a>';
|
||||
print ' ';
|
||||
if (empty($conf->global->$const_name)) { // If module is not activated
|
||||
print '<a href="#" class="classfortooltip" target="apiexplorer" title="'.$langs->trans("ModuleMustBeEnabled", $module).'"><strike>'.$langs->trans("ApiExplorer").'</strike></a>';
|
||||
if (dol_is_file($realpathtoapi)) {
|
||||
$file = file_get_contents($realpathtoapi);
|
||||
if (preg_match('/var '.$tabobj.'\s+([^\s]*)\s/ims', $file, $objs)) {
|
||||
print ' <a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?tab='.urlencode($tab).'&tabobj='.$tabobj.'&module='.$module.($forceddirread ? '@'.$dirread : '').'&action=editfile&token='.newToken().'&format=php&file='.urlencode($pathtoapi).'">'.img_picto($langs->trans("Edit"), 'edit').'</a>';
|
||||
print ' ';
|
||||
print '<a class="reposition editfielda" href="'.$_SERVER['PHP_SELF'].'?tab='.urlencode($tab).'&tabobj='.$tabobj.'&module='.$module.($forceddirread ? '@'.$dirread : '').'&action=confirm_removefile&token='.newToken().'&file='.urlencode($pathtoapi).'">'.img_picto($langs->trans("Delete"), 'delete').'</a>';
|
||||
print ' ';
|
||||
if (empty($conf->global->$const_name)) { // If module is not activated
|
||||
print '<a href="#" class="classfortooltip" target="apiexplorer" title="'.$langs->trans("ModuleMustBeEnabled", $module).'"><strike>'.$langs->trans("ApiExplorer").'</strike></a>';
|
||||
} else {
|
||||
print '<a href="'.DOL_URL_ROOT.'/api/index.php/explorer/" target="apiexplorer">'.$langs->trans("ApiExplorer").'</a>';
|
||||
}
|
||||
} else {
|
||||
print '<a href="'.DOL_URL_ROOT.'/api/index.php/explorer/" target="apiexplorer">'.$langs->trans("ApiExplorer").'</a>';
|
||||
print '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?tab='.urlencode($tab).'&tabobj='.$tabobj.'&module='.$module.($forceddirread ? '@'.$dirread : '').'&action=initapi&token='.newToken().'&format=php&file='.urlencode($pathtoapi).'">'.img_picto('AddAPIsForThisObject', 'generate', 'class="paddingleft"').'</a>';
|
||||
}
|
||||
} else {
|
||||
print '<a class="editfielda" href="'.$_SERVER['PHP_SELF'].'?tab='.urlencode($tab).'&tabobj='.$tabobj.'&module='.$module.($forceddirread ? '@'.$dirread : '').'&action=initapi&token='.newToken().'&format=php&file='.urlencode($pathtoapi).'">'.img_picto('Generate', 'generate', 'class="paddingleft"').'</a>';
|
||||
@ -4602,6 +4615,8 @@ if ($module == 'initmodule') {
|
||||
$dirins = $listofmodules[strtolower($module)]['moduledescriptorrootpath'];
|
||||
$destdir = $dirins.'/'.strtolower($module);
|
||||
$listofobject = dol_dir_list($destdir.'/class', 'files', 0, '\.class\.php$');
|
||||
|
||||
// Get list of existing objects
|
||||
$objects = array();
|
||||
foreach ($listofobject as $fileobj) {
|
||||
if (preg_match('/^api_/', $fileobj['name'])) {
|
||||
@ -4615,7 +4630,7 @@ if ($module == 'initmodule') {
|
||||
$reg = array();
|
||||
if (preg_match('/class\s+([^\s]*)\s+extends\s+CommonObject/ims', $tmpcontent, $reg)) {
|
||||
$objectnameloop = $reg[1];
|
||||
$objects[] = $objectnameloop;
|
||||
$objects[$fileobj['fullname']] = $objectnameloop;
|
||||
}
|
||||
}
|
||||
$menus = $moduleobj->menu;
|
||||
@ -4861,7 +4876,7 @@ if ($module == 'initmodule') {
|
||||
|
||||
$perms = $moduleobj->rights;
|
||||
|
||||
// Scan for object class files
|
||||
// Get list of existing objects
|
||||
$dir = $dirread.'/'.$modulelowercase.'/class';
|
||||
$listofobject = dol_dir_list($dir, 'files', 0, '\.class\.php$');
|
||||
$objects = array('myobject');
|
||||
@ -4869,12 +4884,13 @@ if ($module == 'initmodule') {
|
||||
foreach ($listofobject as $fileobj) {
|
||||
$tmpcontent = file_get_contents($fileobj['fullname']);
|
||||
if (preg_match('/class\s+([^\s]*)\s+extends\s+CommonObject/ims', $tmpcontent, $reg)) {
|
||||
$objects[] = $reg[1];
|
||||
$objects[$fileobj['fullname']] = $reg[1];
|
||||
}
|
||||
}
|
||||
|
||||
// declared select list for actions and labels permissions
|
||||
$crud = array('Read','Write','Delete');
|
||||
$labels = array("Read objects of $module","Create/Update objects of $module","Delete objects of $module");
|
||||
$crud = array('read'=>'CRUDRead', 'write'=>'CRUDCreateWrite', 'delete'=>'Delete');
|
||||
$labels = array("Read objects of ".$module, "Create/Update objects of ".$module, "Delete objects of ".$module);
|
||||
|
||||
$action = GETPOST('action', 'alpha');
|
||||
|
||||
@ -4919,18 +4935,18 @@ if ($module == 'initmodule') {
|
||||
print '<tr class="liste_titre">';
|
||||
print_liste_field_titre("ID", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder, "center");
|
||||
print_liste_field_titre("Label", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder, "center");
|
||||
print_liste_field_titre("Permission", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder, "center");
|
||||
print_liste_field_titre("Object", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder, "center");
|
||||
print_liste_field_titre("CRUD", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder, "center");
|
||||
print_liste_field_titre("", $_SERVER["PHP_SELF"], '', "", $param, '', $sortfield, $sortorder, "center");
|
||||
print "</tr>\n";
|
||||
|
||||
//form for add new right
|
||||
print '<tr>';
|
||||
print '<td><input type="text" readonly name="id" value="'.dol_escape_htmltag($moduleobj->numero.sprintf('%02d', $i + count($perms))).'"></td>';
|
||||
print '<tr class="small">';
|
||||
print '<td><input type="text" readonly name="id" class="width75" value="'.dol_escape_htmltag($moduleobj->numero.sprintf('%02d', $i + count($perms))).'"></td>';
|
||||
print '<td>';
|
||||
print '<select name="label" >';
|
||||
print '<option value=""></option>';
|
||||
for ($i = 0; $i<3; $i++) {
|
||||
for ($i = 0; $i < 3; $i++) {
|
||||
print '<option value="'.dol_escape_htmltag($labels[$i]).'">'.$labels[$i].'</option>';
|
||||
}
|
||||
print '</select></td>';
|
||||
@ -4946,8 +4962,8 @@ if ($module == 'initmodule') {
|
||||
|
||||
print '<td><select class="maxwidth" name="crud">';
|
||||
print '<option value=""></option>';
|
||||
for ($i = 0;$i<3;$i++) {
|
||||
print '<option value="'.$crud[$i].'">'.$langs->trans($crud[$i]).'</option>';
|
||||
foreach ($crud as $key => $val) {
|
||||
print '<option value="'.$key.'">'.$langs->trans($val).'</option>';
|
||||
}
|
||||
print '</td>';
|
||||
|
||||
@ -5016,7 +5032,7 @@ if ($module == 'initmodule') {
|
||||
print '<tr class="oddeven">';
|
||||
|
||||
print '<td>';
|
||||
print $perm[0];
|
||||
print dol_escape_htmltag($perm[0]);
|
||||
print '</td>';
|
||||
|
||||
print '<td>';
|
||||
@ -5024,7 +5040,7 @@ if ($module == 'initmodule') {
|
||||
print '</td>';
|
||||
|
||||
print '<td>';
|
||||
print $perm[4];
|
||||
print dol_escape_htmltag($perm[4]);
|
||||
print '</td>';
|
||||
|
||||
print '<td>';
|
||||
@ -5042,7 +5058,7 @@ if ($module == 'initmodule') {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
print '<tr><td colspan="4"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
|
||||
print '<tr><td colspan="5"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
|
||||
}
|
||||
|
||||
print '</table>';
|
||||
|
||||
@ -906,6 +906,9 @@ class MyObject extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $conf, $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -913,6 +916,7 @@ class MyObject extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref valignmiddle">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'label')) {
|
||||
$return .= ' <div class="inline-block opacitymedium valignmiddle tdoverflowmax100">'.$this->label.'</div>';
|
||||
}
|
||||
|
||||
@ -882,7 +882,7 @@ class pdf_standard_myobject extends ModelePDFMyObject
|
||||
* @param int $showaddress 0=no, 1=yes
|
||||
* @param Translate $outputlangs Object lang for output
|
||||
* @param Translate $outputlangsbis Object lang for output bis
|
||||
* @return void
|
||||
* @return float|int
|
||||
*/
|
||||
protected function _pagehead(&$pdf, $object, $showaddress, $outputlangs, $outputlangsbis = null)
|
||||
{
|
||||
|
||||
@ -49,6 +49,16 @@ __README__
|
||||
__DATA_SPECIFICATION__
|
||||
|
||||
|
||||
== MATRIX OF PERMISSIONS
|
||||
|
||||
__DATA_PERMISSIONS__
|
||||
|
||||
|
||||
== OTHER
|
||||
|
||||
__API_DOC__
|
||||
|
||||
|
||||
== CHANGELOG
|
||||
|
||||
//include::ChangeLog.md[]
|
||||
|
||||
@ -86,6 +86,7 @@ $id = GETPOST('id', 'int');
|
||||
$ref = GETPOST('ref', 'alpha');
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$cancel = GETPOST('cancel', 'aZ09');
|
||||
$contextpage = GETPOST('contextpage', 'aZ') ? GETPOST('contextpage', 'aZ') : str_replace('_', '', basename(dirname(__FILE__)).basename(__FILE__, '.php')); // To manage different context of search
|
||||
$backtopage = GETPOST('backtopage', 'alpha');
|
||||
|
||||
if (GETPOST('actioncode', 'array')) {
|
||||
@ -261,7 +262,7 @@ if ($object->id > 0) {
|
||||
$objthirdparty = $object;
|
||||
$objcon = new stdClass();
|
||||
|
||||
$out = '&origin='.urlencode($object->element.'@'.$object->module).'&originid='.urlencode($object->id);
|
||||
$out = '&origin='.urlencode($object->element.(property_exists($object, 'module') ? '@'.$object->module : '')).'&originid='.urlencode($object->id);
|
||||
$urlbacktopage = $_SERVER['PHP_SELF'].'?id='.$object->id;
|
||||
$out .= '&backtopage='.urlencode($urlbacktopage);
|
||||
$permok = $user->rights->agenda->myactions->create;
|
||||
@ -303,7 +304,13 @@ if ($object->id > 0) {
|
||||
$param .= '&limit='.urlencode($limit);
|
||||
}
|
||||
|
||||
//print load_fiche_titre($langs->trans("ActionsOnMyObject"), '', '');
|
||||
// Try to know count of actioncomm from cache
|
||||
/*require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
|
||||
$cachekey = 'count_events_myobject_'.$object->id;
|
||||
$nbEvent = dol_getcache($cachekey);
|
||||
|
||||
print_barre_liste($langs->trans("ActionsOnMyObject").(is_numeric($nbEvent) ? '<span class="opacitymedium colorblack paddingleft">('.$nbEvent.')</span>': ''), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $morehtmlright, '', 0, 1, 1);
|
||||
*/
|
||||
print_barre_liste($langs->trans("ActionsOnMyObject"), 0, $_SERVER["PHP_SELF"], '', $sortfield, $sortorder, '', 0, -1, '', 0, $morehtmlright, '', 0, 1, 1);
|
||||
|
||||
// List of all actions
|
||||
@ -312,7 +319,7 @@ if ($object->id > 0) {
|
||||
$filters['search_rowid'] = $search_rowid;
|
||||
|
||||
// TODO Replace this with same code than into list.php
|
||||
show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder, $object->module);
|
||||
show_actions_done($conf, $langs, $db, $object, null, 0, $actioncode, '', $filters, $sortfield, $sortorder, property_exists($object, 'module') ? $object->module : '');
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -269,9 +269,9 @@ $form = new Form($db);
|
||||
|
||||
$now = dol_now();
|
||||
|
||||
$title = $langs->trans("MyObjects");
|
||||
//$help_url = "EN:Module_MyObject|FR:Module_MyObject_FR|ES:Módulo_MyObject";
|
||||
$help_url = '';
|
||||
$title = $langs->trans("MyObjects");
|
||||
$morejs = array();
|
||||
$morecss = array();
|
||||
|
||||
@ -473,7 +473,7 @@ if ($optioncss != '') {
|
||||
include DOL_DOCUMENT_ROOT.'/core/tpl/extrafields_list_search_param.tpl.php';
|
||||
// Add $param from hooks
|
||||
$parameters = array();
|
||||
$reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object); // Note that $action and $object may have been modified by hook
|
||||
$reshook = $hookmanager->executeHooks('printFieldListSearchParam', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
$param .= $hookmanager->resPrint;
|
||||
|
||||
// List of mass actions available
|
||||
@ -565,7 +565,7 @@ print '<table class="tagtable nobottomiftotal liste'.($moreforfilter ? " listwit
|
||||
print '<tr class="liste_titre_filter">';
|
||||
// Action column
|
||||
if (getDolGlobalString('MAIN_CHECKBOX_LEFT_COLUMN')) {
|
||||
print '<td class="liste_titre maxwidthsearch center">';
|
||||
print '<td class="liste_titre center maxwidthsearch">';
|
||||
$searchpicto = $form->showFilterButtons('left');
|
||||
print $searchpicto;
|
||||
print '</td>';
|
||||
|
||||
@ -1646,6 +1646,9 @@ class Mo extends CommonObject
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $langs;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -1654,6 +1657,7 @@ class Mo extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'fk_bom')) {
|
||||
$return .= '<br><span class="info-box-label opacitymedium">'.$this->fk_bom.'</span>';
|
||||
}
|
||||
|
||||
@ -1334,7 +1334,8 @@ class Partnership extends CommonObject
|
||||
*/
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
global $conf, $langs;
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<span class="info-box-icon bg-infobox-action">';
|
||||
@ -1342,6 +1343,7 @@ class Partnership extends CommonObject
|
||||
$return .= '</span>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref valignmiddle">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'label')) {
|
||||
$return .= ' <div class="inline-block opacitymedium valignmiddle tdoverflowmax100">'.$this->label.'</div>';
|
||||
}
|
||||
|
||||
@ -6370,6 +6370,8 @@ class Product extends CommonObject
|
||||
{
|
||||
global $langs,$conf;
|
||||
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
$return .= '<div class="info-box-img">';
|
||||
@ -6388,6 +6390,7 @@ class Product extends CommonObject
|
||||
$return .= '</div>';
|
||||
$return .= '<div class="info-box-content">';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'label')) {
|
||||
$return .= '<br><span class="info-box-label opacitymedium">'.$this->label.'</span>';
|
||||
}
|
||||
|
||||
@ -431,7 +431,7 @@ class Productbatch extends CommonObject
|
||||
* @param int $fk_product_stock id product_stock for objet
|
||||
* @param int $with_qty 1 = doesn't return line with 0 quantity
|
||||
* @param int $fk_product If set to a product id, get eatby and sellby from table llx_product_lot
|
||||
* @return array <0 if KO, array of batch
|
||||
* @return array|int <0 if KO, array of batch
|
||||
*/
|
||||
public static function findAll($dbs, $fk_product_stock, $with_qty = 0, $fk_product = 0)
|
||||
{
|
||||
|
||||
@ -162,7 +162,7 @@ class PriceExpression
|
||||
/**
|
||||
* List all price expressions
|
||||
*
|
||||
* @return array Array of price expressions
|
||||
* @return array|int Array of price expressions, <0 if ko
|
||||
*/
|
||||
public function list_price_expression()
|
||||
{
|
||||
|
||||
@ -311,7 +311,7 @@ class PriceGlobalVariable
|
||||
/**
|
||||
* List all price global variables
|
||||
*
|
||||
* @return array Array of price global variables
|
||||
* @return array|int Array of price global variables, <0 if ko
|
||||
*/
|
||||
public function listGlobalVariables()
|
||||
{
|
||||
|
||||
@ -127,7 +127,7 @@ class Entrepot extends CommonObject
|
||||
'ref' =>array('type'=>'varchar(255)', 'label'=>'Ref', 'enabled'=>1, 'visible'=>1, 'showoncombobox'=>1, 'position'=>25, 'searchall'=>1),
|
||||
'description' =>array('type'=>'text', 'label'=>'Description', 'enabled'=>1, 'visible'=>-2, 'position'=>35, 'searchall'=>1),
|
||||
'lieu' =>array('type'=>'varchar(64)', 'label'=>'LocationSummary', 'enabled'=>1, 'visible'=>1, 'position'=>40, 'showoncombobox'=>2, 'searchall'=>1),
|
||||
'fk_parent' =>array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php:1:((status:=:1) AND (entity:IN:__SHARED_ENTITIES__))', 'label'=>'ParentWarehouse', 'enabled'=>1, 'visible'=>-2, 'position'=>41),
|
||||
'fk_parent' =>array('type'=>'integer:Entrepot:product/stock/class/entrepot.class.php:1:((statut:=:1) AND (entity:IN:__SHARED_ENTITIES__))', 'label'=>'ParentWarehouse', 'enabled'=>1, 'visible'=>-2, 'position'=>41),
|
||||
'fk_project' =>array('type'=>'integer:Project:projet/class/project.class.php:1:(fk_statut:=:1)', 'label'=>'Project', 'enabled'=>'$conf->project->enabled', 'visible'=>-1, 'position'=>25),
|
||||
'address' =>array('type'=>'varchar(255)', 'label'=>'Address', 'enabled'=>1, 'visible'=>-2, 'position'=>45, 'searchall'=>1),
|
||||
'zip' =>array('type'=>'varchar(10)', 'label'=>'Zip', 'enabled'=>1, 'visible'=>-2, 'position'=>50, 'searchall'=>1),
|
||||
@ -962,6 +962,7 @@ class Entrepot extends CommonObject
|
||||
*/
|
||||
public function getKanbanView($option = '', $arraydata = null)
|
||||
{
|
||||
$selected = (empty($arraydata['selected']) ? 0 : $arraydata['selected']);
|
||||
|
||||
$return = '<div class="box-flex-item box-flex-grow-zero">';
|
||||
$return .= '<div class="info-box info-box-sm">';
|
||||
@ -970,6 +971,7 @@ class Entrepot extends CommonObject
|
||||
$return .= '</div>';
|
||||
$return .= '<div class="info-box-content" >';
|
||||
$return .= '<span class="info-box-ref">'.(method_exists($this, 'getNomUrl') ? $this->getNomUrl() : $this->ref).'</span>';
|
||||
$return .= '<input id="cb'.$this->id.'" class="flat checkforselect fright" type="checkbox" name="toselect[]" value="'.$this->id.'"'.($selected ? ' checked="checked"' : '').'>';
|
||||
if (property_exists($this, 'lieu') && (!empty($this->lieu))) {
|
||||
$return .= '<br><span class="info-box-label opacitymedium">'.$this->lieu.'</span>';
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user