Merge branch 'Dolibarr:develop' into fix_vat_report_by_month_and_rate_with_vat_src_code
This commit is contained in:
commit
1ed096316a
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -1,35 +0,0 @@
|
||||
---
|
||||
name: Bug report
|
||||
about: Create a report to help us fix something that is broken
|
||||
title: ''
|
||||
labels: Bug
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
# Instructions
|
||||
*This is a template to help you report good issues. You may use [Github Markdown](https://help.github.com/articles/getting-started-with-writing-and-formatting-on-github/) syntax to format your issue report.*
|
||||
*Please:*
|
||||
- *replace the bracket enclosed texts with meaningful information*
|
||||
- *remove any unused sub-section*
|
||||
|
||||
|
||||
# Bug
|
||||
[*Short description*]
|
||||
|
||||
## Environment
|
||||
- **Version**: [*Affected Dolibarr version(s)*]
|
||||
- **OS**: [*Server OS type and version*]
|
||||
- **Web server**: [*Webserver type and version*]
|
||||
- **PHP**: [*PHP version*]
|
||||
- **Database**: [*Database type and version*]
|
||||
- **URL(s)**: [*Affected URL(s)*]
|
||||
|
||||
## Expected and actual behavior
|
||||
[*Verbose description*]
|
||||
|
||||
## Steps to reproduce the behavior
|
||||
[*Verbose description*]
|
||||
|
||||
## [Attached files](https://help.github.com/articles/issue-attachments) (Screenshots, screencasts, dolibarr.log, debugging informations…)
|
||||
[*Files*]
|
||||
71
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
71
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@ -0,0 +1,71 @@
|
||||
name: Bug report
|
||||
description: Create a report to help us fix something that is broken
|
||||
labels: ["Bug"]
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
This is a template to help you report good issues. You may use [Github Markdown](https://help.github.com/articles/getting-started-with-writing-and-formatting-on-github/) syntax to format your issue report.
|
||||
|
||||
- type: textarea
|
||||
id: bug
|
||||
attributes:
|
||||
label: Bug
|
||||
description: Please give a short description of the bug
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: input
|
||||
id: environment-version
|
||||
attributes:
|
||||
label: Environment Version
|
||||
description: Affected Dolibarr version(s)
|
||||
|
||||
- type: input
|
||||
id: environment-os
|
||||
attributes:
|
||||
label: Environment OS
|
||||
description: Server OS type and version
|
||||
|
||||
- type: input
|
||||
id: environment-webserver
|
||||
attributes:
|
||||
label: Environment Web server
|
||||
description: Webserver type and version
|
||||
|
||||
- type: input
|
||||
id: environment-php
|
||||
attributes:
|
||||
label: Environment PHP
|
||||
description: PHP version
|
||||
|
||||
- type: input
|
||||
id: environment-database
|
||||
attributes:
|
||||
label: Environment Database
|
||||
description: Database type and version
|
||||
|
||||
- type: input
|
||||
id: environment-urls
|
||||
attributes:
|
||||
label: Environment URL(s)
|
||||
description: Affected URL(s)
|
||||
|
||||
- type: textarea
|
||||
id: expected-behaviour
|
||||
attributes:
|
||||
label: Expected and actual behavior
|
||||
description: Verbose description
|
||||
|
||||
- type: textarea
|
||||
id: reproduce
|
||||
attributes:
|
||||
label: Steps to reproduce the behavior
|
||||
description: Verbose description
|
||||
|
||||
- type: textarea
|
||||
id: files
|
||||
attributes:
|
||||
label: Attached files
|
||||
description: Screenshots, screencasts, dolibarr.log, debugging informations
|
||||
27
.github/ISSUE_TEMPLATE/feature_request.md
vendored
27
.github/ISSUE_TEMPLATE/feature_request.md
vendored
@ -1,27 +0,0 @@
|
||||
---
|
||||
name: Feature request
|
||||
about: Suggest a new idea for this project
|
||||
title: ''
|
||||
labels: Feature request
|
||||
assignees: ''
|
||||
|
||||
---
|
||||
|
||||
# Instructions
|
||||
*This is a template to help you report good issues. You may use [Github Markdown](https://help.github.com/articles/getting-started-with-writing-and-formatting-on-github/) syntax to format your issue report.*
|
||||
*Please:*
|
||||
- *replace the bracket enclosed texts with meaningful information*
|
||||
- *remove any unused sub-section*
|
||||
|
||||
|
||||
# Feature Request
|
||||
[*Short description*]
|
||||
|
||||
## Use case
|
||||
[*Verbose description*]
|
||||
|
||||
## Suggested implementation
|
||||
[*Verbose description*]
|
||||
|
||||
## Suggested steps
|
||||
[*List of tasks to achieve goal*]
|
||||
35
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
35
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@ -0,0 +1,35 @@
|
||||
name: Feature request
|
||||
description: Suggest a new idea for this project
|
||||
labels: ["Feature request"]
|
||||
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
This is a template to help you report good issues. You may use [Github Markdown](https://help.github.com/articles/getting-started-with-writing-and-formatting-on-github/) syntax to format your issue report.
|
||||
|
||||
- type: textarea
|
||||
id: feature-request
|
||||
attributes:
|
||||
label: Feature Request
|
||||
description: Short description
|
||||
validations:
|
||||
required: true
|
||||
|
||||
- type: textarea
|
||||
id: use-case
|
||||
attributes:
|
||||
label: Use case
|
||||
description: Verbose description
|
||||
|
||||
- type: textarea
|
||||
id: suggested-implementation
|
||||
attributes:
|
||||
label: Suggested implementation
|
||||
description: Verbose description
|
||||
|
||||
- type: textarea
|
||||
id: suggested-steps
|
||||
attributes:
|
||||
label: Suggested steps
|
||||
description: List of tasks to achieve goal
|
||||
@ -237,7 +237,7 @@ if ($action != 'export_csv') {
|
||||
print '<input type="hidden" name="page" value="'.$page.'">';
|
||||
|
||||
$parameters = array();
|
||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtonsList', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
if (empty($reshook)) {
|
||||
$button = '<input type="button" id="exportcsvbutton" name="exportcsvbutton" class="butAction" value="'.$langs->trans("Export").' ('.$conf->global->ACCOUNTING_EXPORT_FORMAT.')" />';
|
||||
|
||||
|
||||
@ -766,7 +766,7 @@ if (count($filter)) {
|
||||
}
|
||||
|
||||
$parameters = array();
|
||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtonsList', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
if (empty($reshook)) {
|
||||
// Button re-export
|
||||
if (!empty($conf->global->ACCOUNTING_REEXPORT)) {
|
||||
|
||||
@ -473,7 +473,7 @@ print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
||||
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
||||
|
||||
$parameters = array();
|
||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtonsList', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
if (empty($reshook)) {
|
||||
$newcardbutton = dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param);
|
||||
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly btnTitleSelected'));
|
||||
|
||||
@ -473,7 +473,7 @@ print '<input type="hidden" name="sortfield" value="'.$sortfield.'">';
|
||||
print '<input type="hidden" name="sortorder" value="'.$sortorder.'">';
|
||||
|
||||
$parameters = array();
|
||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtons', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
$reshook = $hookmanager->executeHooks('addMoreActionsButtonsList', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
if (empty($reshook)) {
|
||||
$newcardbutton = dolGetButtonTitle($langs->trans('ViewFlatList'), '', 'fa fa-list paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/list.php?'.$param);
|
||||
$newcardbutton .= dolGetButtonTitle($langs->trans('GroupByAccountAccounting'), '', 'fa fa-stream paddingleft imgforviewmode', DOL_URL_ROOT.'/accountancy/bookkeeping/listbyaccount.php?'.$param, '', 1, array('morecss' => 'marginleftonly'));
|
||||
|
||||
@ -41,6 +41,8 @@ $langs->loadLangs(array('admin', 'other', 'agenda', 'users'));
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$param = GETPOST('param', 'alpha');
|
||||
$cancel = GETPOST('cancel', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
|
||||
@ -36,6 +36,8 @@ $langs->loadLangs(array("admin", "other", "agenda"));
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$param = GETPOST('param', 'alpha');
|
||||
$cancel = GETPOST('cancel', 'alpha');
|
||||
$scandir = GETPOST('scandir', 'alpha');
|
||||
|
||||
@ -36,6 +36,7 @@ if (!$user->admin) {
|
||||
}
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
|
||||
/*
|
||||
|
||||
@ -36,6 +36,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'bom';
|
||||
|
||||
@ -46,6 +46,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'order';
|
||||
|
||||
@ -37,6 +37,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'contract';
|
||||
|
||||
@ -43,6 +43,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'alpha');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'delivery';
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
* Copyright (C) 2004-2018 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
|
||||
* Copyright (C) 2005-2017 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2010-2016 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2010-2022 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2011-2021 Philippe Grand <philippe.grand@atoo-net.com>
|
||||
* Copyright (C) 2011 Remy Younes <ryounes@gmail.com>
|
||||
* Copyright (C) 2012-2015 Marcos García <marcosgdf@gmail.com>
|
||||
@ -2408,6 +2408,31 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '')
|
||||
$fieldValue = '0';
|
||||
}
|
||||
}
|
||||
|
||||
// Labels Length
|
||||
$maxlength = '';
|
||||
if (in_array($fieldlist[$field], array('libelle', 'label'))) {
|
||||
switch ($tabname) {
|
||||
case MAIN_DB_PREFIX . 'c_accounting_category':
|
||||
case MAIN_DB_PREFIX . 'c_ecotaxe':
|
||||
case MAIN_DB_PREFIX . 'c_email_senderprofile':
|
||||
case MAIN_DB_PREFIX . 'c_forme_juridique':
|
||||
case MAIN_DB_PREFIX . 'c_holiday_types':
|
||||
case MAIN_DB_PREFIX . 'c_payment_term':
|
||||
case MAIN_DB_PREFIX . 'c_transport_mode':
|
||||
$maxlength = ' maxlength="255"';
|
||||
break;
|
||||
case MAIN_DB_PREFIX . 'c_email_templates':
|
||||
$maxlength = ' maxlength="180"';
|
||||
break;
|
||||
case MAIN_DB_PREFIX . 'c_socialnetworks':
|
||||
$maxlength = ' maxlength="150"';
|
||||
break;
|
||||
default:
|
||||
$maxlength = ' maxlength="128"';
|
||||
}
|
||||
}
|
||||
|
||||
print '<td class="'.$classtd.'">';
|
||||
$transfound = 0;
|
||||
$transkey = '';
|
||||
@ -2426,7 +2451,7 @@ function fieldList($fieldlist, $obj = '', $tabname = '', $context = '')
|
||||
}
|
||||
}
|
||||
if (!$transfound) {
|
||||
print '<input type="text" class="flat'.($class ? ' '.$class : '').'" value="'.dol_escape_htmltag($fieldValue).'" name="'.$fieldlist[$field].'">';
|
||||
print '<input type="text" class="flat'.($class ? ' '.$class : '').'"'.($maxlength ? ' '.$maxlength : '').' value="'.dol_escape_htmltag($fieldValue).'" name="'.$fieldlist[$field].'">';
|
||||
} else {
|
||||
print '<input type="hidden" name="'.$fieldlist[$field].'" value="'.$transkey.'">';
|
||||
}
|
||||
|
||||
@ -41,6 +41,8 @@ $backtopage = GETPOST('backtopage', 'alpha');
|
||||
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'myobject';
|
||||
|
||||
|
||||
@ -43,6 +43,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'shipping';
|
||||
|
||||
@ -43,6 +43,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'expensereport';
|
||||
|
||||
@ -42,6 +42,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'invoice';
|
||||
|
||||
@ -28,24 +28,93 @@
|
||||
*/
|
||||
|
||||
require '../main.inc.php';
|
||||
|
||||
// Libraries
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/pdf.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/invoice.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/compta/facture/class/facture.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/html.formsetup.class.php';
|
||||
|
||||
// Load translation files required by the page
|
||||
$langs->loadLangs(array('admin', 'errors', 'other', 'bills'));
|
||||
|
||||
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||
$hookmanager->initHooks(array('situationinvoicesetup', 'globalsetup'));
|
||||
|
||||
// Access control
|
||||
if (!$user->admin) {
|
||||
accessforbidden();
|
||||
}
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$backtopage = GETPOST('backtopage', 'alpha');
|
||||
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'invoice';
|
||||
|
||||
$form = new Form($db);
|
||||
$formSetup = new FormSetup($db);
|
||||
|
||||
|
||||
// Setup conf MYMODULE_MYPARAM4 : exemple of quick define write style
|
||||
$formSetup->newItem('INVOICE_USE_SITUATION')
|
||||
->setAsYesNo()
|
||||
->nameText = $langs->trans('UseSituationInvoices');
|
||||
|
||||
$item = $formSetup->newItem('INVOICE_USE_SITUATION_CREDIT_NOTE')
|
||||
->setAsYesNo()
|
||||
->nameText = $langs->trans('UseSituationInvoicesCreditNote');
|
||||
|
||||
//$item = $formSetup->newItem('INVOICE_USE_RETAINED_WARRANTY')
|
||||
// ->setAsYesNo()
|
||||
// ->nameText = $langs->trans('Retainedwarranty');
|
||||
|
||||
|
||||
$item = $formSetup->newItem('INVOICE_USE_RETAINED_WARRANTY');
|
||||
$item->nameText = $langs->trans('AllowedInvoiceForRetainedWarranty');
|
||||
|
||||
$arrayAvailableType = array(
|
||||
Facture::TYPE_SITUATION => $langs->trans("InvoiceSituation"),
|
||||
Facture::TYPE_STANDARD.'+'.Facture::TYPE_SITUATION => $langs->trans("InvoiceSituation").' + '.$langs->trans("InvoiceStandard"),
|
||||
);
|
||||
|
||||
if ($action == 'edit') {
|
||||
$item->fieldInputOverride = $form->selectarray('INVOICE_USE_RETAINED_WARRANTY', $arrayAvailableType, $conf->global->INVOICE_USE_RETAINED_WARRANTY, 1);
|
||||
} else {
|
||||
$item->fieldOutputOverride= isset($arrayAvailableType[$conf->global->INVOICE_USE_RETAINED_WARRANTY])?$arrayAvailableType[$conf->global->INVOICE_USE_RETAINED_WARRANTY]:'';
|
||||
}
|
||||
|
||||
//$item = $formSetup->newItem('INVOICE_RETAINED_WARRANTY_LIMITED_TO_SITUATION')->setAsYesNo();
|
||||
//$item->nameText = $langs->trans('RetainedwarrantyOnlyForSituation');
|
||||
|
||||
$formSetup->newItem('INVOICE_RETAINED_WARRANTY_LIMITED_TO_FINAL_SITUATION')
|
||||
->setAsYesNo()
|
||||
->nameText = $langs->trans('RetainedwarrantyOnlyForSituationFinal');
|
||||
|
||||
|
||||
$item = $formSetup->newItem('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT');
|
||||
$item->nameText = $langs->trans('RetainedwarrantyDefaultPercent');
|
||||
$item->fieldAttr = array(
|
||||
'type' => 'number',
|
||||
'step' => '0.01',
|
||||
'min' => 0,
|
||||
'max' => 100
|
||||
);
|
||||
|
||||
|
||||
// Conditions paiements
|
||||
$item = $formSetup->newItem('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID');
|
||||
$item->nameText = $langs->trans('PaymentConditionsShortRetainedWarranty');
|
||||
$form->load_cache_conditions_paiements();
|
||||
if (!empty($conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID) && isset($form->cache_conditions_paiements[$conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID]['label'])) {
|
||||
$item->fieldOutputOverride = $form->cache_conditions_paiements[$conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID]['label'];
|
||||
}
|
||||
$item->fieldInputOverride = $form->getSelectConditionsPaiements($conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID, 'INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID', -1, 1);
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
@ -67,7 +136,6 @@ llxHeader(
|
||||
'EN:Invoice_Configuration|FR:Configuration_module_facture|ES:ConfiguracionFactura'
|
||||
);
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
|
||||
$linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
|
||||
@ -84,170 +152,25 @@ print '<span class="opacitymedium">'.$langs->trans("InvoiceFirstSituationDesc").
|
||||
* Numbering module
|
||||
*/
|
||||
|
||||
print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
if ($action == 'edit') {
|
||||
print $formSetup->generateOutput(true);
|
||||
} else {
|
||||
print $formSetup->generateOutput();
|
||||
}
|
||||
|
||||
if (count($formSetup->items) > 0) {
|
||||
if ($action != 'edit') {
|
||||
print '<div class="tabsAction">';
|
||||
print '<a class="butAction" href="'.$_SERVER["PHP_SELF"].'?action=edit&token='.newToken().'">'.$langs->trans("Modify").'</a>';
|
||||
print '</div>';
|
||||
}
|
||||
} else {
|
||||
print '<br>'.$langs->trans("NothingToSetup");
|
||||
}
|
||||
|
||||
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 '<td>'.$langs->trans("Parameter").'</td>';
|
||||
print '<td align="center" width="60">'.$langs->trans("Value").'</td>';
|
||||
print '<td width="80"> </td>';
|
||||
print "</tr>\n";
|
||||
|
||||
_printOnOff('INVOICE_USE_SITUATION', $langs->trans('UseSituationInvoices'));
|
||||
_printOnOff('INVOICE_USE_SITUATION_CREDIT_NOTE', $langs->trans('UseSituationInvoicesCreditNote'));
|
||||
//_printOnOff('INVOICE_USE_RETAINED_WARRANTY', $langs->trans('Retainedwarranty'));
|
||||
|
||||
$confkey = 'INVOICE_USE_RETAINED_WARRANTY';
|
||||
|
||||
$arrayAvailableType = array(
|
||||
Facture::TYPE_SITUATION => $langs->trans("InvoiceSituation"),
|
||||
Facture::TYPE_STANDARD.'+'.Facture::TYPE_SITUATION => $langs->trans("InvoiceSituation").' + '.$langs->trans("InvoiceStandard"),
|
||||
);
|
||||
$selected = $conf->global->$confkey;
|
||||
$curentInput = (empty($inputCount) ? 1 : ($inputCount + 1));
|
||||
$formSelectInvoiceType = $form->selectarray('value'.$curentInput, $arrayAvailableType, $selected, 1);
|
||||
_printInputFormPart($confkey, $langs->trans('AllowedInvoiceForRetainedWarranty'), '', array(), $formSelectInvoiceType);
|
||||
|
||||
//_printOnOff('INVOICE_RETAINED_WARRANTY_LIMITED_TO_SITUATION', $langs->trans('RetainedwarrantyOnlyForSituation'));
|
||||
_printOnOff('INVOICE_RETAINED_WARRANTY_LIMITED_TO_FINAL_SITUATION', $langs->trans('RetainedwarrantyOnlyForSituationFinal'));
|
||||
|
||||
$metas = array(
|
||||
'type' => 'number',
|
||||
'step' => '0.01',
|
||||
'min' => 0,
|
||||
'max' => 100
|
||||
);
|
||||
_printInputFormPart('INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_PERCENT', $langs->trans('RetainedwarrantyDefaultPercent'), '', $metas);
|
||||
|
||||
// Conditions paiements
|
||||
$inputCount = empty($inputCount) ? 1 : ($inputCount + 1);
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans('PaymentConditionsShortRetainedWarranty').'</td>';
|
||||
print '<td class="center" width="20"> </td>';
|
||||
print '<td class="right" width="300">';
|
||||
print '<input type="hidden" name="param'.$inputCount.'" value="INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID">';
|
||||
$form->select_conditions_paiements($conf->global->INVOICE_SITUATION_DEFAULT_RETAINED_WARRANTY_COND_ID, 'value'.$inputCount, -1, 1);
|
||||
print '</td></tr>';
|
||||
|
||||
|
||||
print '</table>';
|
||||
print '</div>';
|
||||
|
||||
print '<br>';
|
||||
|
||||
_updateBtn();
|
||||
|
||||
print '</form>';
|
||||
|
||||
print dol_get_fiche_end();
|
||||
|
||||
// End of page
|
||||
llxFooter();
|
||||
$db->close();
|
||||
|
||||
/**
|
||||
* Print an update button
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function _updateBtn()
|
||||
{
|
||||
global $langs;
|
||||
print '<div class="center">';
|
||||
print '<input type="submit" class="button button-save" value="'.$langs->trans("Save").'">';
|
||||
print '</div>';
|
||||
}
|
||||
|
||||
/**
|
||||
* Print a On/Off button
|
||||
*
|
||||
* @param string $confkey the conf key
|
||||
* @param bool $title Title of conf
|
||||
* @param string $desc Description
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function _printOnOff($confkey, $title = false, $desc = '')
|
||||
{
|
||||
global $langs;
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.($title ? $title : $langs->trans($confkey));
|
||||
if (!empty($desc)) {
|
||||
print '<br><small>'.$langs->trans($desc).'</small>';
|
||||
}
|
||||
print '</td>';
|
||||
print '<td class="center" width="20"> </td>';
|
||||
print '<td class="right" width="300">';
|
||||
print ajax_constantonoff($confkey);
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Print a form part
|
||||
*
|
||||
* @param string $confkey the conf key
|
||||
* @param bool $title Title of conf
|
||||
* @param string $desc Description of
|
||||
* @param array $metas html meta
|
||||
* @param string $type type of input textarea or input
|
||||
* @param bool $help help description
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
function _printInputFormPart($confkey, $title = false, $desc = '', $metas = array(), $type = 'input', $help = false)
|
||||
{
|
||||
global $langs, $conf, $db, $inputCount;
|
||||
|
||||
$inputCount = empty($inputCount) ? 1 : ($inputCount + 1);
|
||||
$form = new Form($db);
|
||||
|
||||
$defaultMetas = array(
|
||||
'name' => 'value'.$inputCount
|
||||
);
|
||||
|
||||
if ($type != 'textarea') {
|
||||
$defaultMetas['type'] = 'text';
|
||||
$defaultMetas['value'] = $conf->global->{$confkey};
|
||||
}
|
||||
|
||||
|
||||
$metas = array_merge($defaultMetas, $metas);
|
||||
$metascompil = '';
|
||||
foreach ($metas as $key => $values) {
|
||||
$metascompil .= ' '.$key.'="'.$values.'" ';
|
||||
}
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>';
|
||||
|
||||
if (!empty($help)) {
|
||||
print $form->textwithtooltip(($title ? $title : $langs->trans($confkey)), $langs->trans($help), 2, 1, img_help(1, ''));
|
||||
} else {
|
||||
print $title ? $title : $langs->trans($confkey);
|
||||
}
|
||||
|
||||
if (!empty($desc)) {
|
||||
print '<br><small>'.$langs->trans($desc).'</small>';
|
||||
}
|
||||
|
||||
print '</td>';
|
||||
print '<td class="center" width="20"> </td>';
|
||||
print '<td class="right" width="300">';
|
||||
print '<input type="hidden" name="param'.$inputCount.'" value="'.$confkey.'">';
|
||||
print '<input type="hidden" name="action" value="setModuleOptions">';
|
||||
if ($type == 'textarea') {
|
||||
print '<textarea '.$metascompil.' >'.dol_htmlentities($conf->global->{$confkey}).'</textarea>';
|
||||
} elseif ($type == 'input') {
|
||||
print '<input '.$metascompil.' />';
|
||||
} else {
|
||||
// custom
|
||||
print $type;
|
||||
}
|
||||
print '</td></tr>';
|
||||
}
|
||||
|
||||
@ -43,6 +43,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'ficheinter';
|
||||
|
||||
@ -39,6 +39,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'contract';
|
||||
|
||||
@ -50,6 +50,8 @@ $backtopage = GETPOST('backtopage', 'alpha');
|
||||
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'myobject';
|
||||
|
||||
|
||||
@ -5,6 +5,7 @@
|
||||
* Copyright (C) 2016 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2021 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
* Copyright (C) 2021 Anthony Berton <bertonanthony@gmail.com>
|
||||
*
|
||||
* 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
|
||||
@ -199,6 +200,20 @@ if ($action == 'update') {
|
||||
} else {
|
||||
dolibarr_set_const($db, "THEME_ELDY_USE_CHECKED", $val, 'chaine', 0, '', $conf->entity);
|
||||
}
|
||||
|
||||
$val=(implode(',', (colorStringToArray(GETPOST('THEME_ELDY_BTNACTION'), array()))));
|
||||
if ($val == '') {
|
||||
dolibarr_del_const($db, 'THEME_ELDY_BTNACTION', $conf->entity);
|
||||
} else {
|
||||
dolibarr_set_const($db, 'THEME_ELDY_BTNACTION', $val, 'chaine', 0, '', $conf->entity);
|
||||
}
|
||||
|
||||
$val=(implode(',', (colorStringToArray(GETPOST('THEME_ELDY_TEXTBTNACTION'), array()))));
|
||||
if ($val == '') {
|
||||
dolibarr_del_const($db, 'THEME_ELDY_TEXTBTNACTION', $conf->entity);
|
||||
} else {
|
||||
dolibarr_set_const($db, 'THEME_ELDY_TEXTBTNACTION', $val, 'chaine', 0, '', $conf->entity);
|
||||
}
|
||||
}
|
||||
|
||||
if ($mode == 'dashboard') {
|
||||
|
||||
@ -41,6 +41,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
|
||||
/*
|
||||
* Actions
|
||||
|
||||
@ -37,8 +37,9 @@ $langs->loadLangs(array("admin", "knowledgemanagement"));
|
||||
// Parameters
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$backtopage = GETPOST('backtopage', 'alpha');
|
||||
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'knowledgemanagement';
|
||||
|
||||
@ -37,6 +37,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'mrp';
|
||||
|
||||
@ -43,6 +43,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'propal';
|
||||
|
||||
@ -36,6 +36,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'reception';
|
||||
|
||||
@ -43,6 +43,8 @@ if (!$user->admin) {
|
||||
|
||||
$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');
|
||||
|
||||
@ -37,6 +37,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scandir', 'alpha');
|
||||
$type = 'supplier_payment';
|
||||
|
||||
@ -38,6 +38,8 @@ if (!$user->admin) {
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scan_dir', 'alpha');
|
||||
$type = 'supplier_proposal';
|
||||
|
||||
@ -38,6 +38,8 @@ if (!$user->admin) {
|
||||
// Parameters
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$label = GETPOST('label', 'alpha');
|
||||
$scandir = GETPOST('scandir', 'alpha');
|
||||
$type = 'ticket';
|
||||
|
||||
@ -43,9 +43,11 @@ $extrafields = new ExtraFields($db);
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$backtopage = GETPOST('backtopage', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$label = GETPOST('label', 'alpha');
|
||||
|
||||
$scandir = GETPOST('scandir', 'alpha');
|
||||
$type = 'user';
|
||||
|
||||
|
||||
@ -42,6 +42,8 @@ $extrafields = new ExtraFields($db);
|
||||
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$value = GETPOST('value', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$type = 'group';
|
||||
|
||||
/*
|
||||
|
||||
@ -36,6 +36,7 @@ $langs->loadLangs(array("admin", "workstation"));
|
||||
// Parameters
|
||||
$action = GETPOST('action', 'aZ09');
|
||||
$backtopage = GETPOST('backtopage', 'alpha');
|
||||
$modulepart = GETPOST('modulepart', 'aZ09'); // Used by actions_setmoduleoptions.inc.php
|
||||
|
||||
$value = GETPOST('value', 'alpha');
|
||||
|
||||
|
||||
@ -354,8 +354,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
$formquestion = array();
|
||||
if (!empty($conf->bom->enabled)) {
|
||||
$langs->load("mrp");
|
||||
require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
|
||||
$formproduct = new FormProduct($db);
|
||||
$forcecombo = 0;
|
||||
if ($conf->browser->name == 'ie') {
|
||||
$forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy
|
||||
@ -384,8 +382,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
$formquestion = array();
|
||||
if (!empty($conf->bom->enabled)) {
|
||||
$langs->load("mrp");
|
||||
require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
|
||||
$formproduct = new FormProduct($db);
|
||||
$forcecombo = 0;
|
||||
if ($conf->browser->name == 'ie') {
|
||||
$forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy
|
||||
@ -415,7 +411,6 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
||||
if (!empty($conf->bom->enabled)) {
|
||||
$langs->load("mrp");
|
||||
require_once DOL_DOCUMENT_ROOT.'/product/class/html.formproduct.class.php';
|
||||
$formproduct = new FormProduct($db);
|
||||
$forcecombo = 0;
|
||||
if ($conf->browser->name == 'ie') {
|
||||
$forcecombo = 1; // There is a bug in IE10 that make combo inside popup crazy
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
<?php
|
||||
/* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
* Copyright (C) 2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2020 Thibault FOUCART <support@ptibogxiv.net>
|
||||
/* Copyright (C) 2015 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
* Copyright (C) 2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2020 Thibault FOUCART <support@ptibogxiv.net>
|
||||
* Copyright (C) 2022 ATM Consulting <contact@atm-consulting.fr>
|
||||
* Copyright (C) 2022 OpenDSI <support@open-dsi.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
|
||||
@ -274,14 +276,17 @@ class Proposals extends DolibarrApi
|
||||
/**
|
||||
* Get lines of a commercial proposal
|
||||
*
|
||||
* @param int $id Id of commercial proposal
|
||||
* @param int $id Id of commercial proposal
|
||||
* @param string $sqlfilters Other criteria to filter answers separated by a comma. d is the alias for proposal lines table, p is the alias for product table. "Syntax example "(p.ref:like:'SO-%') and (d.date_start:<:'20220101')"
|
||||
*
|
||||
* @url GET {id}/lines
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getLines($id)
|
||||
public function getLines($id, $sqlfilters = '')
|
||||
{
|
||||
$filters = "";
|
||||
|
||||
if (!DolibarrApiAccess::$user->rights->propal->lire) {
|
||||
throw new RestException(401);
|
||||
}
|
||||
@ -294,7 +299,16 @@ class Proposals extends DolibarrApi
|
||||
if (!DolibarrApi::_checkAccessToResource('propal', $this->propal->id)) {
|
||||
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
|
||||
}
|
||||
$this->propal->getLinesArray();
|
||||
|
||||
if (!empty($sqlfilters)) {
|
||||
if (!DolibarrApi::_checkFilters($sqlfilters)) {
|
||||
throw new RestException(503, 'Error when validating parameter sqlfilters '.$sqlfilters);
|
||||
}
|
||||
$regexstring = '\(([^:\'\(\)]+:[^:\'\(\)]+:[^:\(\)]+)\)';
|
||||
$filters = " AND (".preg_replace_callback('/'.$regexstring.'/', 'DolibarrApi::_forge_criteria_callback', $sqlfilters).")";
|
||||
}
|
||||
|
||||
$this->propal->getLinesArray($filters);
|
||||
$result = array();
|
||||
foreach ($this->propal->lines as $line) {
|
||||
array_push($result, $this->_cleanObjectDatas($line));
|
||||
@ -308,7 +322,7 @@ class Proposals extends DolibarrApi
|
||||
* @param int $id Id of commercial proposal to update
|
||||
* @param array $request_data Commercial proposal line data
|
||||
*
|
||||
* @url POST {id}/lines
|
||||
* @url POST {id}/line
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
@ -368,6 +382,84 @@ class Proposals extends DolibarrApi
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add lines to given commercial proposal
|
||||
*
|
||||
* @param int $id Id of commercial proposal to update
|
||||
* @param array $request_data Commercial proposal line data
|
||||
*
|
||||
* @url POST {id}/lines
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function postLines($id, $request_data = null)
|
||||
{
|
||||
if (!DolibarrApiAccess::$user->rights->propal->creer) {
|
||||
throw new RestException(401);
|
||||
}
|
||||
|
||||
$result = $this->propal->fetch($id);
|
||||
if (!$result) {
|
||||
throw new RestException(404, 'Commercial Proposal not found');
|
||||
}
|
||||
|
||||
if (!DolibarrApi::_checkAccessToResource('propal', $this->propal->id)) {
|
||||
throw new RestException(401, 'Access not allowed for login '.DolibarrApiAccess::$user->login);
|
||||
}
|
||||
|
||||
$errors = [];
|
||||
$this->db->begin();
|
||||
|
||||
foreach ($request_data as $TData) {
|
||||
if (empty($TData[0])) $TData = array($TData);
|
||||
|
||||
foreach ($TData as $lineData) {
|
||||
$line = (object) $lineData;
|
||||
|
||||
$updateRes = $this->propal->addline(
|
||||
$line->desc,
|
||||
$line->subprice,
|
||||
$line->qty,
|
||||
$line->tva_tx,
|
||||
$line->localtax1_tx,
|
||||
$line->localtax2_tx,
|
||||
$line->fk_product,
|
||||
$line->remise_percent,
|
||||
'HT',
|
||||
0,
|
||||
$line->info_bits,
|
||||
$line->product_type,
|
||||
$line->rang,
|
||||
$line->special_code,
|
||||
$line->fk_parent_line,
|
||||
$line->fk_fournprice,
|
||||
$line->pa_ht,
|
||||
$line->label,
|
||||
$line->date_start,
|
||||
$line->date_end,
|
||||
$line->array_options,
|
||||
$line->fk_unit,
|
||||
$line->origin,
|
||||
$line->origin_id,
|
||||
$line->multicurrency_subprice,
|
||||
$line->fk_remise_except
|
||||
);
|
||||
|
||||
if ($updateRes < 0) {
|
||||
$errors['lineLabel'] = $line->label;
|
||||
$errors['msg'] = $this->propal->errors;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (empty($errors)) {
|
||||
$this->db->commit();
|
||||
return count($request_data);
|
||||
} else {
|
||||
$this->db->rollback();
|
||||
throw new RestException(400, implode(", ", $errors));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Update a line of given commercial proposal
|
||||
*
|
||||
|
||||
@ -1,20 +1,22 @@
|
||||
<?php
|
||||
/* Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
|
||||
* Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005 Marc Barilley <marc@ocebo.com>
|
||||
* Copyright (C) 2005-2013 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
||||
* Copyright (C) 2008 Raphael Bertrand <raphael.bertrand@resultic.fr>
|
||||
* Copyright (C) 2010-2020 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2010-2017 Philippe Grand <philippe.grand@atoo-net.com>
|
||||
* Copyright (C) 2012-2014 Christophe Battarel <christophe.battarel@altairis.fr>
|
||||
* Copyright (C) 2012 Cedric Salvador <csalvador@gpcsolutions.fr>
|
||||
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||
* Copyright (C) 2014-2015 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2018-2021 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
||||
/* Copyright (C) 2002-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
* Copyright (C) 2004 Eric Seigne <eric.seigne@ryxeo.com>
|
||||
* Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
* Copyright (C) 2005 Marc Barilley <marc@ocebo.com>
|
||||
* Copyright (C) 2005-2013 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
||||
* Copyright (C) 2008 Raphael Bertrand <raphael.bertrand@resultic.fr>
|
||||
* Copyright (C) 2010-2020 Juanjo Menent <jmenent@2byte.es>
|
||||
* Copyright (C) 2010-2017 Philippe Grand <philippe.grand@atoo-net.com>
|
||||
* Copyright (C) 2012-2014 Christophe Battarel <christophe.battarel@altairis.fr>
|
||||
* Copyright (C) 2012 Cedric Salvador <csalvador@gpcsolutions.fr>
|
||||
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||
* Copyright (C) 2014-2015 Marcos García <marcosgdf@gmail.com>
|
||||
* Copyright (C) 2018 Nicolas ZABOURI <info@inovea-conseil.com>
|
||||
* Copyright (C) 2018-2021 Frédéric France <frederic.france@netlogic.fr>
|
||||
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2022 ATM Consulting <contact@atm-consulting.fr>
|
||||
* Copyright (C) 2022 OpenDSI <support@open-dsi.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
|
||||
@ -1714,12 +1716,13 @@ class Propal extends CommonObject
|
||||
/**
|
||||
* Load array lines
|
||||
*
|
||||
* @param int $only_product Return only physical products
|
||||
* @param int $loadalsotranslation Return translation for products
|
||||
* @param int $only_product Return only physical products
|
||||
* @param int $loadalsotranslation Return translation for products
|
||||
* @param string $filters Filter on other fields
|
||||
*
|
||||
* @return int <0 if KO, >0 if OK
|
||||
* @return int <0 if KO, >0 if OK
|
||||
*/
|
||||
public function fetch_lines($only_product = 0, $loadalsotranslation = 0)
|
||||
public function fetch_lines($only_product = 0, $loadalsotranslation = 0, $filters = '')
|
||||
{
|
||||
global $langs, $conf;
|
||||
// phpcs:enable
|
||||
@ -1738,6 +1741,9 @@ class Propal extends CommonObject
|
||||
if ($only_product) {
|
||||
$sql .= ' AND p.fk_product_type = 0';
|
||||
}
|
||||
if ($filters) {
|
||||
$sql .= $filters;
|
||||
}
|
||||
$sql .= ' ORDER by d.rang';
|
||||
|
||||
dol_syslog(get_class($this)."::fetch_lines", LOG_DEBUG);
|
||||
@ -3689,12 +3695,13 @@ class Propal extends CommonObject
|
||||
|
||||
/**
|
||||
* Retrieve an array of proposal lines
|
||||
* @param string $filters Filter on other fields
|
||||
*
|
||||
* @return int >0 if OK, <0 if KO
|
||||
*/
|
||||
public function getLinesArray()
|
||||
public function getLinesArray($filters = '')
|
||||
{
|
||||
return $this->fetch_lines();
|
||||
return $this->fetch_lines(0, 0, $filters);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@ -1339,14 +1339,15 @@ if ($resql) {
|
||||
$labeltoshow = $langs->trans($reg[1]);
|
||||
} else {
|
||||
if ($objp->label == '(payment_salary)') {
|
||||
$labeltoshow = dol_trunc($langs->trans("SalaryPayment", 40));
|
||||
$labeltoshow = $langs->trans("SalaryPayment");
|
||||
} else {
|
||||
$labeltoshow = dol_escape_htmltag($objp->label);
|
||||
$titletoshow = $objp->label;
|
||||
}
|
||||
}
|
||||
print '<td class="tdoverflowmax300"'.($titletoshow ? ' title="'.dol_escape_htmltag($titletoshow).'"' : '').'>';
|
||||
print $labeltoshow; // Already escaped
|
||||
|
||||
|
||||
print '<td class="tdoverflowmax250"'.($titletoshow ? ' title="'.dol_escape_htmltag($titletoshow).'"' : '').'>';
|
||||
|
||||
// Add info about links after description
|
||||
$cachebankaccount = array();
|
||||
@ -1355,70 +1356,70 @@ if ($resql) {
|
||||
if ($links[$key]['type'] == 'withdraw') {
|
||||
$banktransferstatic->id = $links[$key]['url_id'];
|
||||
$banktransferstatic->ref = $links[$key]['label'];
|
||||
print ' '.$banktransferstatic->getNomUrl(0);
|
||||
print $banktransferstatic->getNomUrl(0).' ';
|
||||
} elseif ($links[$key]['type'] == 'payment') {
|
||||
$paymentstatic->id = $links[$key]['url_id'];
|
||||
$paymentstatic->ref = $links[$key]['url_id']; // FIXME This is id, not ref of payment
|
||||
$paymentstatic->date = $db->jdate($objp->do);
|
||||
print ' '.$paymentstatic->getNomUrl(2);
|
||||
print $paymentstatic->getNomUrl(2).' ';
|
||||
} elseif ($links[$key]['type'] == 'payment_supplier') {
|
||||
$paymentsupplierstatic->id = $links[$key]['url_id'];
|
||||
$paymentsupplierstatic->ref = $links[$key]['url_id']; // FIXME This is id, not ref of payment
|
||||
print ' '.$paymentsupplierstatic->getNomUrl(2);
|
||||
print $paymentsupplierstatic->getNomUrl(2).' ';
|
||||
} elseif ($links[$key]['type'] == 'payment_sc') {
|
||||
$paymentscstatic->id = $links[$key]['url_id'];
|
||||
$paymentscstatic->ref = $links[$key]['url_id'];
|
||||
$paymentscstatic->label = $links[$key]['label'];
|
||||
print ' '.$paymentscstatic->getNomUrl(2);
|
||||
print $paymentscstatic->getNomUrl(2).' ';
|
||||
} elseif ($links[$key]['type'] == 'payment_vat') {
|
||||
$paymentvatstatic->id = $links[$key]['url_id'];
|
||||
$paymentvatstatic->ref = $links[$key]['url_id'];
|
||||
print ' '.$paymentvatstatic->getNomUrl(2);
|
||||
print $paymentvatstatic->getNomUrl(2).' ';
|
||||
} elseif ($links[$key]['type'] == 'payment_salary') {
|
||||
$paymentsalstatic->id = $links[$key]['url_id'];
|
||||
$paymentsalstatic->ref = $links[$key]['url_id'];
|
||||
$paymentsalstatic->label = $links[$key]['label'];
|
||||
print ' '.$paymentsalstatic->getNomUrl(2);
|
||||
print $paymentsalstatic->getNomUrl(2).' ';
|
||||
} elseif ($links[$key]['type'] == 'payment_loan') {
|
||||
print '<a href="'.DOL_URL_ROOT.'/loan/payment/card.php?id='.$links[$key]['url_id'].'">';
|
||||
print ' '.img_object($langs->trans('ShowPayment'), 'payment').' ';
|
||||
print '</a>';
|
||||
print '</a> ';
|
||||
} elseif ($links[$key]['type'] == 'payment_donation') {
|
||||
$paymentdonationstatic->id = $links[$key]['url_id'];
|
||||
$paymentdonationstatic->ref = $links[$key]['url_id'];
|
||||
print ' '.$paymentdonationstatic->getNomUrl(2);
|
||||
print $paymentdonationstatic->getNomUrl(2).' ';
|
||||
} elseif ($links[$key]['type'] == 'payment_expensereport') {
|
||||
$paymentexpensereportstatic->id = $links[$key]['url_id'];
|
||||
$paymentexpensereportstatic->ref = $links[$key]['url_id'];
|
||||
print ' '.$paymentexpensereportstatic->getNomUrl(2);
|
||||
print $paymentexpensereportstatic->getNomUrl(2).' ';
|
||||
} elseif ($links[$key]['type'] == 'payment_various') {
|
||||
$paymentvariousstatic->id = $links[$key]['url_id'];
|
||||
$paymentvariousstatic->ref = $links[$key]['url_id'];
|
||||
print ' '.$paymentvariousstatic->getNomUrl(2);
|
||||
print $paymentvariousstatic->getNomUrl(2).' ';
|
||||
} elseif ($links[$key]['type'] == 'banktransfert') {
|
||||
// Do not show link to transfer since there is no transfer card (avoid confusion). Can already be accessed from transaction detail.
|
||||
if ($objp->amount > 0) {
|
||||
$banklinestatic->fetch($links[$key]['url_id']);
|
||||
$bankstatic->id = $banklinestatic->fk_account;
|
||||
$bankstatic->label = $banklinestatic->bank_account_ref;
|
||||
print ' ('.$langs->trans("TransferFrom").' ';
|
||||
print $langs->trans("TransferFrom").' ';
|
||||
print $bankstatic->getNomUrl(1, 'transactions');
|
||||
print ' '.$langs->trans("toward").' ';
|
||||
$bankstatic->id = $objp->bankid;
|
||||
$bankstatic->label = $objp->bankref;
|
||||
print $bankstatic->getNomUrl(1, '');
|
||||
print ')';
|
||||
print ' - ';
|
||||
} else {
|
||||
$bankstatic->id = $objp->bankid;
|
||||
$bankstatic->label = $objp->bankref;
|
||||
print ' ('.$langs->trans("TransferFrom").' ';
|
||||
print $langs->trans("TransferFrom").' ';
|
||||
print $bankstatic->getNomUrl(1, '');
|
||||
print ' '.$langs->trans("toward").' ';
|
||||
$banklinestatic->fetch($links[$key]['url_id']);
|
||||
$bankstatic->id = $banklinestatic->fk_account;
|
||||
$bankstatic->label = $banklinestatic->bank_account_ref;
|
||||
print $bankstatic->getNomUrl(1, 'transactions');
|
||||
print ')';
|
||||
print ' - ';
|
||||
}
|
||||
//var_dump($links);
|
||||
} elseif ($links[$key]['type'] == 'company') {
|
||||
@ -1430,22 +1431,22 @@ if ($resql) {
|
||||
// Information is already shown using the payment_salary link. No need of this link.
|
||||
} else {
|
||||
// Show link with label $links[$key]['label']
|
||||
if (!empty($objp->label) && !empty($links[$key]['label'])) {
|
||||
print ' - ';
|
||||
}
|
||||
print '<a href="'.$links[$key]['url'].$links[$key]['url_id'].'">';
|
||||
if (preg_match('/^\((.*)\)$/i', $links[$key]['label'], $reg)) {
|
||||
// Label generique car entre parentheses. On l'affiche en le traduisant
|
||||
if ($reg[1] == 'paiement') {
|
||||
$reg[1] = 'Payment';
|
||||
}
|
||||
print ' '.$langs->trans($reg[1]);
|
||||
print $langs->trans($reg[1]);
|
||||
} else {
|
||||
print ' '.$links[$key]['label'];
|
||||
print $links[$key]['label'];
|
||||
}
|
||||
print '</a>';
|
||||
print '</a>'.($labeltoshow ? ' - ' : '');
|
||||
}
|
||||
}
|
||||
|
||||
print $labeltoshow; // Already escaped
|
||||
|
||||
print '</td>';
|
||||
if (!$i) {
|
||||
$totalarray['nbfield']++;
|
||||
@ -1488,7 +1489,7 @@ if ($resql) {
|
||||
|
||||
// Payment type
|
||||
if (!empty($arrayfields['type']['checked'])) {
|
||||
print '<td align="center" class="nowrap">';
|
||||
print '<td class="tdoverflowmax100 center">';
|
||||
$labeltype = ($langs->trans("PaymentTypeShort".$objp->fk_type) != "PaymentTypeShort".$objp->fk_type) ? $langs->trans("PaymentTypeShort".$objp->fk_type) : $langs->getLabelFromKey($db, $objp->fk_type, 'c_paiement', 'code', 'libelle', '', 1);
|
||||
if ($labeltype == 'SOLD') {
|
||||
print ' '; //$langs->trans("InitialBankBalance");
|
||||
@ -1514,9 +1515,9 @@ if ($resql) {
|
||||
print '<td class="tdoverflowmax150">';
|
||||
|
||||
$companylinked_id = 0;
|
||||
$userlinked_id = 0;
|
||||
$userlinked_id = 0;
|
||||
|
||||
//payment line type to define user display and user or company linked
|
||||
//payment line type to define user display and user or company linked
|
||||
foreach ($links as $key => $value) {
|
||||
if ($links[$key]['type'] == 'payment_sc') {
|
||||
$type_link = 'payment_sc';
|
||||
|
||||
@ -1354,6 +1354,7 @@ if ($action == 'create') {
|
||||
$dateexample = $object->date_when;
|
||||
}
|
||||
|
||||
// Help of substitution key
|
||||
$substitutionarray = getCommonSubstitutionArray($langs, 2, null, $object);
|
||||
|
||||
$substitutionarray['__INVOICE_PREVIOUS_MONTH__'] = $langs->trans("PreviousMonthOfInvoice").' ('.$langs->trans("Example").': '.dol_print_date(dol_time_plus_duree($dateexample, -1, 'm'), '%m').')';
|
||||
|
||||
@ -610,7 +610,7 @@ if (empty($reshook)) {
|
||||
// Check parameters
|
||||
|
||||
// Check for mandatory fields in thirdparty (defined into setup)
|
||||
$array_to_check = array('IDPROF1', 'IDPROF2', 'IDPROF3', 'IDPROF4', 'IDPROF5', 'IDPROF6', 'EMAIL');
|
||||
$array_to_check = array('IDPROF1', 'IDPROF2', 'IDPROF3', 'IDPROF4', 'IDPROF5', 'IDPROF6', 'EMAIL', 'ACCOUNTANCY_CODE_CUSTOMER');
|
||||
foreach ($array_to_check as $key) {
|
||||
$keymin = strtolower($key);
|
||||
$i = (int) preg_replace('/[^0-9]/', '', $key);
|
||||
@ -638,6 +638,14 @@ if (empty($reshook)) {
|
||||
setEventMessages($langs->trans("ErrorBadEMail", $object->thirdparty->email).' ('.$langs->trans("ForbiddenBySetupRules").')', null, 'errors');
|
||||
}
|
||||
}
|
||||
if ($key == 'ACCOUNTANCY_CODE_CUSTOMER') {
|
||||
// Check for mandatory
|
||||
if (!empty($conf->global->SOCIETE_ACCOUNTANCY_CODE_CUSTOMER_INVOICE_MANDATORY) && empty($object->thirdparty->code_compta)) {
|
||||
$langs->load("errors");
|
||||
$error++;
|
||||
setEventMessages($langs->trans("ErrorAccountancyCodeCustomerIsMandatory", $object->thirdparty->name).' ('.$langs->trans("ForbiddenBySetupRules").')', null, 'errors');
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -1622,7 +1622,7 @@ class Facture extends CommonInvoice
|
||||
if ($rowid) {
|
||||
$sql .= " WHERE f.rowid=".((int) $rowid);
|
||||
} else {
|
||||
$sql .= ' WHERE f.entity IN ('.getEntity('invoice').')'; // Dont't use entity if you use rowid
|
||||
$sql .= ' WHERE f.entity IN ('.getEntity('invoice').')'; // Don't use entity if you use rowid
|
||||
if ($ref) {
|
||||
$sql .= " AND f.ref='".$this->db->escape($ref)."'";
|
||||
}
|
||||
|
||||
@ -62,6 +62,9 @@ $label = GETPOST('label', 'alpha');
|
||||
$actioncode = GETPOST('actioncode');
|
||||
$fk_user = GETPOST('userid', 'int');
|
||||
|
||||
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||
$hookmanager->initHooks(array('taxcard', 'globalcard'));
|
||||
|
||||
// Initialize technical objects
|
||||
$object = new ChargeSociales($db);
|
||||
$extrafields = new ExtraFields($db);
|
||||
@ -97,7 +100,7 @@ $result = restrictedArea($user, 'tax', $object->id, 'chargesociales', 'charges')
|
||||
* Actions
|
||||
*/
|
||||
|
||||
$parameters = array();
|
||||
$parameters = array('socid' => $socid);
|
||||
$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');
|
||||
@ -446,6 +449,8 @@ if ($id > 0) {
|
||||
$object = new ChargeSociales($db);
|
||||
$result = $object->fetch($id);
|
||||
|
||||
$formconfirm = '';
|
||||
|
||||
if ($result > 0) {
|
||||
$head = tax_prepare_head($object);
|
||||
|
||||
@ -464,25 +469,36 @@ if ($id > 0) {
|
||||
$formquestion[] = array('type' => 'text', 'name' => 'amount', 'label' => $langs->trans("Amount"), 'value' => price($object->amount), 'morecss' => 'width100');
|
||||
}
|
||||
|
||||
print $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneTax', $object->ref), 'confirm_clone', $formquestion, 'yes', 1, 280);
|
||||
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"].'?id='.$object->id, $langs->trans('ToClone'), $langs->trans('ConfirmCloneTax', $object->ref), 'confirm_clone', $formquestion, 'yes', 1, 280);
|
||||
}
|
||||
|
||||
|
||||
if ($action == 'paid') {
|
||||
$text = $langs->trans('ConfirmPaySocialContribution');
|
||||
print $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans('PaySocialContribution'), $text, "confirm_paid", '', '', 2);
|
||||
$formconfirm = $form->formconfirm($_SERVER["PHP_SELF"]."?id=".$object->id, $langs->trans('PaySocialContribution'), $text, "confirm_paid", '', '', 2);
|
||||
}
|
||||
|
||||
// Confirmation of the removal of the Social Contribution
|
||||
if ($action == 'delete') {
|
||||
$text = $langs->trans('ConfirmDeleteSocialContribution');
|
||||
print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('DeleteSocialContribution'), $text, 'confirm_delete', '', '', 2);
|
||||
$formconfirm = $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id, $langs->trans('DeleteSocialContribution'), $text, 'confirm_delete', '', '', 2);
|
||||
}
|
||||
|
||||
if ($action == 'edit') {
|
||||
print "<form name=\"charge\" action=\"".$_SERVER["PHP_SELF"]."?id=$object->id&action=update\" method=\"post\">";
|
||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||
}
|
||||
// Call Hook formConfirm
|
||||
$parameters = array('formConfirm' => $formconfirm, 'lineid' => $lineid);
|
||||
$reshook = $hookmanager->executeHooks('formConfirm', $parameters, $object, $action); // Note that $action and $object may have been modified by hook
|
||||
if (empty($reshook)) {
|
||||
$formconfirm .= $hookmanager->resPrint;
|
||||
} elseif ($reshook > 0) {
|
||||
$formconfirm = $hookmanager->resPrint;
|
||||
}
|
||||
|
||||
// Print form confirm
|
||||
print $formconfirm;
|
||||
|
||||
print dol_get_fiche_head($head, 'card', $langs->trans("SocialContribution"), -1, 'bill');
|
||||
|
||||
|
||||
117
htdocs/contact/project.php
Normal file
117
htdocs/contact/project.php
Normal file
@ -0,0 +1,117 @@
|
||||
<?php
|
||||
/*
|
||||
* Copyright (C) 2021 VIAL--GOUTEYRON Quentin <quentin.vial-gouteyron@atm-consulting.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/contact/project.php
|
||||
* \ingroup contact
|
||||
* \brief Page of third party projects
|
||||
*/
|
||||
|
||||
require '../main.inc.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
|
||||
$langs->loadLangs(array("contacts", "companies", "projects"));
|
||||
|
||||
// Security check
|
||||
$id = GETPOST('id', 'int');
|
||||
$result = restrictedArea($user, 'contact', $id, 'socpeople&societe');
|
||||
|
||||
// Initialize technical object to manage hooks of page. Note that conf->hooks_modules contains array of hook context
|
||||
$hookmanager->initHooks(array('projectcontact'));
|
||||
|
||||
/*
|
||||
* 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');
|
||||
}
|
||||
|
||||
/*
|
||||
* View
|
||||
*/
|
||||
|
||||
$form = new Form($db);
|
||||
|
||||
if ($id) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/contact/class/contact.class.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/contact.lib.php';
|
||||
|
||||
$object = new Contact($db);
|
||||
|
||||
$result = $object->fetch($id);
|
||||
if (empty($object->thirdparty)) {
|
||||
$object->fetch_thirdparty();
|
||||
}
|
||||
$socid = $object->thirdparty->id;
|
||||
$title = $langs->trans("Projects");
|
||||
if (! empty($conf->global->MAIN_HTML_TITLE) && preg_match('/thirdpartynameonly/', $conf->global->MAIN_HTML_TITLE) && $object->name) {
|
||||
$title = $object->name." - ".$title;
|
||||
}
|
||||
llxHeader('', $title);
|
||||
|
||||
if (! empty($conf->notification->enabled)) {
|
||||
$langs->load("mails");
|
||||
}
|
||||
$head = contact_prepare_head($object);
|
||||
|
||||
print dol_get_fiche_head($head, 'project', $langs->trans("Contact"), -1, 'contact');
|
||||
|
||||
$linkback = '<a href="'.DOL_URL_ROOT.'/contact/list.php?restore_lastsearch_values=1">'.$langs->trans("BackToList").'</a>';
|
||||
|
||||
$morehtmlref = '<div class="refidno">';
|
||||
if (empty($conf->global->SOCIETE_DISABLE_CONTACTS) && !empty($socid)) {
|
||||
$object->thirdparty->fetch($socid);
|
||||
// Thirdparty
|
||||
$morehtmlref .= $langs->trans('ThirdParty').' : ';
|
||||
if ($object->thirdparty->id > 0) {
|
||||
$morehtmlref .= $object->thirdparty->getNomUrl(1, 'contact');
|
||||
} else {
|
||||
$morehtmlref .= $langs->trans("ContactNotLinkedToCompany");
|
||||
}
|
||||
}
|
||||
$morehtmlref .= '</div>';
|
||||
|
||||
dol_banner_tab($object, 'id', $linkback, ($user->socid ? 0 : 1), 'rowid', 'nom', $morehtmlref);
|
||||
|
||||
print '<div class="fichecenter">';
|
||||
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
print '<table class="border centpercent tableforfield">';
|
||||
|
||||
// Civility
|
||||
print '<tr><td class="titlefield">'.$langs->trans("UserTitle").'</td><td>';
|
||||
print $object->getCivilityLabel();
|
||||
print '</td></tr>';
|
||||
|
||||
print '</table>';
|
||||
|
||||
print '</div>';
|
||||
|
||||
print dol_get_fiche_end();
|
||||
print '<br>';
|
||||
|
||||
// Projects list
|
||||
$result = show_contacts_projects($conf, $langs, $db, $object, $_SERVER["PHP_SELF"].'?id='.$object->id, 1);
|
||||
}
|
||||
|
||||
// End of page
|
||||
llxFooter();
|
||||
$db->close();
|
||||
@ -163,7 +163,7 @@ class box_produits_alerte_stock extends ModeleBoxes
|
||||
);
|
||||
|
||||
$this->info_box_contents[$line][] = array(
|
||||
'td' => 'class="tdoverflowmax150 maxwidth150onsmartphone"',
|
||||
'td' => 'class="tdoverflowmax100 maxwidth150onsmartphone"',
|
||||
'text' => $objp->label,
|
||||
);
|
||||
|
||||
@ -186,18 +186,13 @@ class box_produits_alerte_stock extends ModeleBoxes
|
||||
}
|
||||
}
|
||||
|
||||
$this->info_box_contents[$line][] = array(
|
||||
/*$this->info_box_contents[$line][] = array(
|
||||
'td' => 'class="nowraponall right amount"',
|
||||
'text' => $price,
|
||||
);
|
||||
'text' => $price.' '.$price_base_type,
|
||||
);*/
|
||||
|
||||
$this->info_box_contents[$line][] = array(
|
||||
'td' => 'class="right"',
|
||||
'text' => $price_base_type,
|
||||
);
|
||||
|
||||
$this->info_box_contents[$line][] = array(
|
||||
'td' => 'class="center"',
|
||||
'td' => 'class="center nowraponall"',
|
||||
'text' => price2num($objp->total_stock, 'MS').' / '.$objp->seuil_stock_alerte,
|
||||
'text2'=>img_warning($langs->transnoentitiesnoconv("StockLowerThanLimit", $objp->seuil_stock_alerte)),
|
||||
);
|
||||
|
||||
@ -2269,7 +2269,12 @@ abstract class CommonObject
|
||||
*/
|
||||
public function setPaymentMethods($id)
|
||||
{
|
||||
global $user;
|
||||
|
||||
$error = 0; $notrigger = 0;
|
||||
|
||||
dol_syslog(get_class($this).'::setPaymentMethods('.$id.')');
|
||||
|
||||
if ($this->statut >= 0 || $this->element == 'societe') {
|
||||
// TODO uniformize field name
|
||||
$fieldname = 'fk_mode_reglement';
|
||||
@ -2296,6 +2301,15 @@ abstract class CommonObject
|
||||
if (get_class($this) == 'Fournisseur') {
|
||||
$this->mode_reglement_supplier_id = $id;
|
||||
}
|
||||
// Triggers
|
||||
if (!$error && !$notrigger) {
|
||||
// Call triggers
|
||||
$result = $this->call_trigger(strtoupper(get_class($this)).'_MODIFY', $user);
|
||||
if ($result < 0) {
|
||||
$error++;
|
||||
}
|
||||
// End call triggers
|
||||
}
|
||||
return 1;
|
||||
} else {
|
||||
dol_syslog(get_class($this).'::setPaymentMethods Error '.$this->db->error());
|
||||
|
||||
@ -1690,11 +1690,16 @@ class Form
|
||||
$out .= '<select class="flat'.($moreclass ? ' '.$moreclass : '').'" id="'.$htmlid.'" name="'.$htmlname.(($num || empty($disableifempty)) ? '' : ' disabled').($multiple ? '[]' : '').'" '.($multiple ? 'multiple' : '').' '.(!empty($moreparam) ? $moreparam : '').'>';
|
||||
}
|
||||
|
||||
if (($showempty == 1 || ($showempty == 3 && $num > 1)) && !$multiple) {
|
||||
$out .= '<option value="0"'.(in_array(0, $selected) ? ' selected' : '').'> </option>';
|
||||
}
|
||||
if ($showempty == 2) {
|
||||
$out .= '<option value="0"'.(in_array(0, $selected) ? ' selected' : '').'>-- '.$langs->trans("Internal").' --</option>';
|
||||
if ($showempty && ! is_numeric($showempty)) {
|
||||
$textforempty = $showempty;
|
||||
$out .= '<option class="optiongrey" value="-1"'.(in_array(-1, $selected) ? ' selected' : '').'>'.$textforempty.'</option>';
|
||||
} else {
|
||||
if (($showempty == 1 || ($showempty == 3 && $num > 1)) && ! $multiple) {
|
||||
$out .= '<option value="0"'.(in_array(0, $selected) ? ' selected' : '').'> </option>';
|
||||
}
|
||||
if ($showempty == 2) {
|
||||
$out .= '<option value="0"'.(in_array(0, $selected) ? ' selected' : '').'>-- '.$langs->trans("Internal").' --</option>';
|
||||
}
|
||||
}
|
||||
|
||||
$i = 0;
|
||||
@ -3896,7 +3901,7 @@ class Form
|
||||
|
||||
// phpcs:disable PEAR.NamingConventions.ValidFunctionName.ScopeNotCamelCaps
|
||||
/**
|
||||
* Return list of payment modes.
|
||||
* print list of payment modes.
|
||||
* Constant MAIN_DEFAULT_PAYMENT_TERM_ID can used to set default value but scope is all application, probably not what you want.
|
||||
* See instead to force the default value by the caller.
|
||||
*
|
||||
@ -3911,8 +3916,28 @@ class Form
|
||||
public function select_conditions_paiements($selected = 0, $htmlname = 'condid', $filtertype = -1, $addempty = 0, $noinfoadmin = 0, $morecss = '')
|
||||
{
|
||||
// phpcs:enable
|
||||
global $langs, $user, $conf;
|
||||
print $this->getSelectConditionsPaiements($selected, $htmlname, $filtertype, $addempty, $noinfoadmin, $morecss);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return list of payment modes.
|
||||
* Constant MAIN_DEFAULT_PAYMENT_TERM_ID can used to set default value but scope is all application, probably not what you want.
|
||||
* See instead to force the default value by the caller.
|
||||
*
|
||||
* @param int $selected Id of payment term to preselect by default
|
||||
* @param string $htmlname Nom de la zone select
|
||||
* @param int $filtertype Not used
|
||||
* @param int $addempty Add an empty entry
|
||||
* @param int $noinfoadmin 0=Add admin info, 1=Disable admin info
|
||||
* @param string $morecss Add more CSS on select tag
|
||||
* @return void
|
||||
*/
|
||||
public function getSelectConditionsPaiements($selected = 0, $htmlname = 'condid', $filtertype = -1, $addempty = 0, $noinfoadmin = 0, $morecss = '')
|
||||
{
|
||||
|
||||
global $langs, $user, $conf;
|
||||
$out = '';
|
||||
dol_syslog(__METHOD__." selected=".$selected.", htmlname=".$htmlname, LOG_DEBUG);
|
||||
|
||||
$this->load_cache_conditions_paiements();
|
||||
@ -3922,24 +3947,25 @@ class Form
|
||||
$selected = $conf->global->MAIN_DEFAULT_PAYMENT_TERM_ID;
|
||||
}
|
||||
|
||||
print '<select id="'.$htmlname.'" class="flat selectpaymentterms'.($morecss ? ' '.$morecss : '').'" name="'.$htmlname.'">';
|
||||
$out.= '<select id="'.$htmlname.'" class="flat selectpaymentterms'.($morecss ? ' '.$morecss : '').'" name="'.$htmlname.'">';
|
||||
if ($addempty) {
|
||||
print '<option value="0"> </option>';
|
||||
$out.= '<option value="0"> </option>';
|
||||
}
|
||||
foreach ($this->cache_conditions_paiements as $id => $arrayconditions) {
|
||||
if ($selected == $id) {
|
||||
print '<option value="'.$id.'" selected>';
|
||||
$out.= '<option value="'.$id.'" selected>';
|
||||
} else {
|
||||
print '<option value="'.$id.'">';
|
||||
$out.= '<option value="'.$id.'">';
|
||||
}
|
||||
print $arrayconditions['label'];
|
||||
print '</option>';
|
||||
$out.= $arrayconditions['label'];
|
||||
$out.= '</option>';
|
||||
}
|
||||
print '</select>';
|
||||
$out.= '</select>';
|
||||
if ($user->admin && empty($noinfoadmin)) {
|
||||
print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
|
||||
$out.= info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
|
||||
}
|
||||
print ajax_combobox($htmlname);
|
||||
$out.= ajax_combobox($htmlname);
|
||||
return $out;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -57,6 +57,40 @@ function contact_prepare_head(Contact $object)
|
||||
$head[$tab][2] = 'perso';
|
||||
$tab++;
|
||||
|
||||
if (!empty($conf->projet->enabled) && (!empty($user->rights->projet->lire))) {
|
||||
$nbProject = 0;
|
||||
// Enable caching of thirdrparty count projects
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/memory.lib.php';
|
||||
$cachekey = 'count_projects_contact_'.$object->id;
|
||||
$dataretrieved = dol_getcache($cachekey);
|
||||
|
||||
if (!is_null($dataretrieved)) {
|
||||
$nbProject = $dataretrieved;
|
||||
} else {
|
||||
$sql = 'SELECT COUNT(n.rowid) as nb';
|
||||
$sql .= ' FROM '.MAIN_DB_PREFIX.'projet as n';
|
||||
$sql .= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact as cc ON (n.rowid = cc.element_id)';
|
||||
$sql .= ' WHERE cc.fk_socpeople = '.((int) $object->id);
|
||||
$sql .= ' AND cc.fk_c_type_contact IN (SELECT rowid FROM '.MAIN_DB_PREFIX.'c_type_contact WHERE element="project" AND source="external")';
|
||||
$sql .= ' AND n.entity IN ('.getEntity('project').')';
|
||||
$resql = $db->query($sql);
|
||||
if ($resql) {
|
||||
$obj = $db->fetch_object($resql);
|
||||
$nbProject = $obj->nb;
|
||||
} else {
|
||||
dol_print_error($db);
|
||||
}
|
||||
dol_setcache($cachekey, $nbProject, 120); // If setting cache fails, this is not a problem, so we do not test result.
|
||||
}
|
||||
$head[$tab][0] = DOL_URL_ROOT.'/contact/project.php?id='.$object->id;
|
||||
$head[$tab][1] = $langs->trans("Projects");
|
||||
if ($nbProject > 0) {
|
||||
$head[$tab][1] .= '<span class="badge marginleftonlyshort">'.$nbProject.'</span>';
|
||||
}
|
||||
$head[$tab][2] = 'project';
|
||||
$tab++;
|
||||
}
|
||||
|
||||
// Related items
|
||||
if (!empty($conf->commande->enabled) || !empty($conf->propal->enabled) || !empty($conf->facture->enabled) || !empty($conf->ficheinter->enabled) || (!empty($conf->fournisseur->enabled) && empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)) || !empty($conf->supplier_order->enabled) || !empty($conf->supplier_invoice->enabled)) {
|
||||
$head[$tab][0] = DOL_URL_ROOT.'/contact/consumption.php?id='.$object->id;
|
||||
@ -117,3 +151,131 @@ function contact_prepare_head(Contact $object)
|
||||
|
||||
return $head;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show html area for list of projects
|
||||
*
|
||||
* @param Conf $conf Object conf
|
||||
* @param Translate $langs Object langs
|
||||
* @param DoliDB $db Database handler
|
||||
* @param Object $object Third party object
|
||||
* @param string $backtopage Url to go once contact is created
|
||||
* @param int $nocreatelink 1=Hide create project link
|
||||
* @param string $morehtmlright More html on right of title
|
||||
* @return int
|
||||
*/
|
||||
function show_contacts_projects($conf, $langs, $db, $object, $backtopage = '', $nocreatelink = 0, $morehtmlright = '')
|
||||
{
|
||||
global $user;
|
||||
|
||||
$i = -1;
|
||||
|
||||
if (!empty($conf->projet->enabled) && $user->rights->projet->lire) {
|
||||
$langs->load("projects");
|
||||
|
||||
$newcardbutton = '';
|
||||
if (!empty($conf->projet->enabled) && $user->rights->projet->creer && empty($nocreatelink)) {
|
||||
$newcardbutton .= dolGetButtonTitle($langs->trans('AddProject'), '', 'fa fa-plus-circle', DOL_URL_ROOT.'/projet/card.php?socid='.$object->id.'&action=create&backtopage='.urlencode($backtopage));
|
||||
}
|
||||
|
||||
print "\n";
|
||||
print load_fiche_titre($langs->trans("ProjectsHavingThisContact"), $newcardbutton.$morehtmlright, '');
|
||||
print '<div class="div-table-responsive">';
|
||||
print "\n".'<table class="noborder" width=100%>';
|
||||
|
||||
$sql = 'SELECT p.rowid as id, p.entity, p.title, p.ref, p.public, p.dateo as do, p.datee as de, p.fk_statut as status, p.fk_opp_status, p.opp_amount, p.opp_percent, p.tms as date_update, p.budget_amount';
|
||||
$sql .= ', cls.code as opp_status_code, ctc.libelle';
|
||||
$sql .= ' FROM '.MAIN_DB_PREFIX.'projet as p';
|
||||
$sql .= ' LEFT JOIN '.MAIN_DB_PREFIX.'c_lead_status as cls on p.fk_opp_status = cls.rowid';
|
||||
$sql .= ' INNER JOIN '.MAIN_DB_PREFIX.'element_contact as cc ON (p.rowid = cc.element_id)';
|
||||
$sql .= ' INNER JOIN '.MAIN_DB_PREFIX.'c_type_contact as ctc ON (ctc.rowid = cc.fk_c_type_contact)';
|
||||
$sql .= ' WHERE cc.fk_socpeople = '.((int) $object->id);
|
||||
$sql .= ' AND ctc.element="project" AND ctc.source="external"';
|
||||
$sql .= ' AND p.entity IN ('.getEntity('project').')';
|
||||
$sql .= ' ORDER BY p.dateo DESC';
|
||||
|
||||
$result = $db->query($sql);
|
||||
if ($result) {
|
||||
$num = $db->num_rows($result);
|
||||
|
||||
print '<tr class="liste_titre">';
|
||||
print '<td>'.$langs->trans("Ref").'</td>';
|
||||
print '<td>'.$langs->trans("Name").'</td>';
|
||||
print '<td>'.$langs->trans("ContactType").'</td>';
|
||||
print '<td class="center">'.$langs->trans("DateStart").'</td>';
|
||||
print '<td class="center">'.$langs->trans("DateEnd").'</td>';
|
||||
print '<td class="right">'.$langs->trans("OpportunityAmountShort").'</td>';
|
||||
print '<td class="center">'.$langs->trans("OpportunityStatusShort").'</td>';
|
||||
print '<td class="right">'.$langs->trans("OpportunityProbabilityShort").'</td>';
|
||||
print '<td class="right">'.$langs->trans("Status").'</td>';
|
||||
print '</tr>';
|
||||
|
||||
if ($num > 0) {
|
||||
require_once DOL_DOCUMENT_ROOT.'/projet/class/project.class.php';
|
||||
|
||||
$projecttmp = new Project($db);
|
||||
|
||||
$i = 0;
|
||||
|
||||
while ($i < $num) {
|
||||
$obj = $db->fetch_object($result);
|
||||
$projecttmp->fetch($obj->id);
|
||||
|
||||
// To verify role of users
|
||||
$userAccess = $projecttmp->restrictedProjectArea($user);
|
||||
|
||||
if ($user->rights->projet->lire && $userAccess > 0) {
|
||||
print '<tr class="oddeven">';
|
||||
|
||||
// Ref
|
||||
print '<td>';
|
||||
print $projecttmp->getNomUrl(1);
|
||||
print '</td>';
|
||||
|
||||
// Label
|
||||
print '<td>'.$obj->title.'</td>';
|
||||
print '<td>'.$obj->libelle.'</td>';
|
||||
// Date start
|
||||
print '<td class="center">'.dol_print_date($db->jdate($obj->do), "day").'</td>';
|
||||
// Date end
|
||||
print '<td class="center">'.dol_print_date($db->jdate($obj->de), "day").'</td>';
|
||||
// Opp amount
|
||||
print '<td class="right">';
|
||||
if ($obj->opp_status_code) {
|
||||
print price($obj->opp_amount, 1, '', 1, -1, -1, '');
|
||||
}
|
||||
print '</td>';
|
||||
// Opp status
|
||||
print '<td class="center">';
|
||||
if ($obj->opp_status_code) {
|
||||
print $langs->trans("OppStatus".$obj->opp_status_code);
|
||||
}
|
||||
print '</td>';
|
||||
// Opp percent
|
||||
print '<td class="right">';
|
||||
if ($obj->opp_percent) {
|
||||
print price($obj->opp_percent, 1, '', 1, 0).'%';
|
||||
}
|
||||
print '</td>';
|
||||
// Status
|
||||
print '<td class="right">'.$projecttmp->getLibStatut(5).'</td>';
|
||||
|
||||
print '</tr>';
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
} else {
|
||||
print '<tr class="oddeven"><td colspan="8"><span class="opacitymedium">'.$langs->trans("None").'</span></td></tr>';
|
||||
}
|
||||
$db->free($result);
|
||||
} else {
|
||||
dol_print_error($db);
|
||||
}
|
||||
print "</table>";
|
||||
print '</div>';
|
||||
|
||||
print "<br>\n";
|
||||
}
|
||||
|
||||
return $i;
|
||||
}
|
||||
|
||||
@ -783,7 +783,7 @@ function checkVal($out = '', $check = 'alphanohtml', $filter = null, $options =
|
||||
// keep lines feed
|
||||
}
|
||||
break;
|
||||
case 'alphawithlgt': // No " and no ../ but we keep balanced < > tags with no special chars inside. Can be used for email string like "Name <email>"
|
||||
case 'alphawithlgt': // No " and no ../ but we keep balanced < > tags with no special chars inside. Can be used for email string like "Name <email>". Less secured than 'alphanohtml'
|
||||
if (!is_array($out)) {
|
||||
$out = trim($out);
|
||||
do {
|
||||
@ -1666,7 +1666,11 @@ function dol_get_fiche_head($links = array(), $active = '', $title = '', $notab
|
||||
$limittitle = 30;
|
||||
$out .= '<a class="tabTitle">';
|
||||
if ($picto) {
|
||||
$out .= img_picto($title, ($pictoisfullpath ? '' : 'object_').$picto, '', $pictoisfullpath, 0, 0, '', 'imgTabTitle').' ';
|
||||
$noprefix = $pictoisfullpath;
|
||||
if (strpos($picto, 'fontawesome_') !== false) {
|
||||
$noprefix = 1;
|
||||
}
|
||||
$out .= img_picto($title, ($noprefix ? '' : 'object_').$picto, '', $pictoisfullpath, 0, 0, '', 'imgTabTitle').' ';
|
||||
}
|
||||
$out .= '<span class="tabTitleText">'.dol_escape_htmltag(dol_trunc($title, $limittitle)).'</span>';
|
||||
$out .= '</a>';
|
||||
@ -2021,10 +2025,14 @@ function dol_banner_tab($object, $paramid, $morehtml = '', $shownav = 1, $fieldi
|
||||
$width = 14;
|
||||
$cssclass = 'photorefcenter';
|
||||
$picto = $object->picto;
|
||||
$prefix = 'object_';
|
||||
if ($object->element == 'project' && !$object->public) {
|
||||
$picto = 'project'; // instead of projectpub
|
||||
}
|
||||
$nophoto = img_picto('No photo', 'object_'.$picto);
|
||||
if (strpos($picto, 'fontawesome_') !== false) {
|
||||
$prefix = '';
|
||||
}
|
||||
$nophoto = img_picto('No photo', $prefix.$picto);
|
||||
}
|
||||
$morehtmlleft .= '<!-- No photo to show -->';
|
||||
$morehtmlleft .= '<div class="floatleft inline-block valignmiddle divphotoref"><div class="photoref">';
|
||||
@ -3609,6 +3617,7 @@ function dol_trunc($string, $size = 40, $trunc = 'right', $stringencoding = 'UTF
|
||||
* Example: picto.png if picto.png is stored into htdocs/theme/mytheme/img
|
||||
* Example: picto.png@mymodule if picto.png is stored into htdocs/mymodule/img
|
||||
* Example: /mydir/mysubdir/picto.png if picto.png is stored into htdocs/mydir/mysubdir (pictoisfullpath must be set to 1)
|
||||
* Example: fontawesome_envelope-open-text_fas_red_1em if you want to use fontaweseome icons: fontawesome_<icon-name>_<style>_<color>_<size> (only icon-name is mandatory)
|
||||
* @param string $moreatt Add more attribute on img tag (For example 'class="pictofixedwidth"')
|
||||
* @param boolean|int $pictoisfullpath If true or 1, image path is a full path
|
||||
* @param int $srconly Return only content of the src attribute of img.
|
||||
@ -3640,6 +3649,40 @@ function img_picto($titlealt, $picto, $moreatt = '', $pictoisfullpath = false, $
|
||||
}
|
||||
} else {
|
||||
$pictowithouttext = preg_replace('/(\.png|\.gif|\.svg)$/', '', $picto);
|
||||
|
||||
if (strpos($pictowithouttext, 'fontawesome_') !== false) {
|
||||
$pictowithouttext = explode('_', $pictowithouttext);
|
||||
$marginleftonlyshort = 0;
|
||||
|
||||
$fakey = 'fa-'.$pictowithouttext[1];
|
||||
$fa = $pictowithouttext[2] ? $pictowithouttext[2] : 'fa';
|
||||
$facolor = $pictowithouttext[3] ? $pictowithouttext[3] : '';
|
||||
$fasize = $pictowithouttext[4] ? $pictowithouttext[4] : '';
|
||||
|
||||
// This snippet only needed since function img_edit accepts only one additional parameter: no separate one for css only.
|
||||
// class/style need to be extracted to avoid duplicate class/style validation errors when $moreatt is added to the end of the attributes.
|
||||
$morestyle = '';
|
||||
$reg = array();
|
||||
if (preg_match('/class="([^"]+)"/', $moreatt, $reg)) {
|
||||
$morecss .= ($morecss ? ' ' : '').$reg[1];
|
||||
$moreatt = str_replace('class="'.$reg[1].'"', '', $moreatt);
|
||||
}
|
||||
if (preg_match('/style="([^"]+)"/', $moreatt, $reg)) {
|
||||
$morestyle = $reg[1];
|
||||
$moreatt = str_replace('style="'.$reg[1].'"', '', $moreatt);
|
||||
}
|
||||
$moreatt = trim($moreatt);
|
||||
|
||||
$enabledisablehtml = '<span class="'.$fa.' '.$fakey.($marginleftonlyshort ? ($marginleftonlyshort == 1 ? ' marginleftonlyshort' : ' marginleftonly') : '');
|
||||
$enabledisablehtml .= ($morecss ? ' '.$morecss : '').'" style="'.($fasize ? ('font-size: '.$fasize.';') : '').($facolor ? (' color: '.$facolor.';') : '').($morestyle ? ' '.$morestyle : '').'"'.(($notitle || empty($titlealt)) ? '' : ' title="'.dol_escape_htmltag($titlealt).'"').($moreatt ? ' '.$moreatt : '').'>';
|
||||
/*if (!empty($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER)) {
|
||||
$enabledisablehtml .= $titlealt;
|
||||
}*/
|
||||
$enabledisablehtml .= '</span>';
|
||||
|
||||
return $enabledisablehtml;
|
||||
}
|
||||
|
||||
$pictowithouttext = str_replace('object_', '', $pictowithouttext);
|
||||
if (empty($srconly) && in_array($pictowithouttext, array(
|
||||
'1downarrow', '1uparrow', '1leftarrow', '1rightarrow', '1uparrow_selected', '1downarrow_selected', '1leftarrow_selected', '1rightarrow_selected',
|
||||
|
||||
@ -180,7 +180,7 @@ function delivery_prepare_head($object)
|
||||
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php';
|
||||
require_once DOL_DOCUMENT_ROOT.'/core/class/link.class.php';
|
||||
$upload_dir = $conf->commande->dir_output."/".dol_sanitizeFileName($tmpobject->ref);
|
||||
$upload_dir = $conf->expedition->dir_output."/sending/".dol_sanitizeFileName($object->ref);
|
||||
$nbFiles = count(dol_dir_list($upload_dir, 'files', 0, '', '(\.meta|_preview.*\.png)$'));
|
||||
$nbLinks = Link::count($db, $tmpobject->element, $tmpobject->id);
|
||||
$head[$h][0] = DOL_URL_ROOT.'/expedition/document.php?id='.$tmpobject->id;
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
* Copyright (C) 2010-2017 Regis Houssin <regis.houssin@inodbox.com>
|
||||
* Copyright (C) 2015 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
* Copyright (C) 2018 Ferran Marcet <fmarcet@2byte.es>
|
||||
* Copyright (C) 2021 Anthony Berton <bertonanthony@gmail.com>
|
||||
*
|
||||
* 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
|
||||
@ -859,15 +860,15 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false)
|
||||
// Use Checked
|
||||
if ($foruserprofile) {
|
||||
/* Must first change option to choose color of highlight instead of yes or no.
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("HighlightLinesOnMouseHover").'</td>';
|
||||
print '<td><input name="check_THEME_ELDY_USE_HOVER" disabled="disabled" type="checkbox" '.($conf->global->THEME_ELDY_USE_HOVER?" checked":"").'></td>';
|
||||
print '<td class="nowrap left" width="20%"><input name="check_MAIN_THEME"'.($edit?'':' disabled').' type="checkbox" '.($selected_theme?" checked":"").'> '.$langs->trans("UsePersonalValue").'</td>';
|
||||
print '<td><input name="check_THEME_ELDY_USE_HOVER"'.($edit?'':' disabled="disabled"').' type="checkbox" '.($hoverdisabled?"":" checked").'>';
|
||||
print ' ('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')';
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
*/
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("HighlightLinesOnMouseHover").'</td>';
|
||||
print '<td><input name="check_THEME_ELDY_USE_HOVER" disabled="disabled" type="checkbox" '.($conf->global->THEME_ELDY_USE_HOVER?" checked":"").'></td>';
|
||||
print '<td class="nowrap left" width="20%"><input name="check_MAIN_THEME"'.($edit?'':' disabled').' type="checkbox" '.($selected_theme?" checked":"").'> '.$langs->trans("UsePersonalValue").'</td>';
|
||||
print '<td><input name="check_THEME_ELDY_USE_HOVER"'.($edit?'':' disabled="disabled"').' type="checkbox" '.($hoverdisabled?"":" checked").'>';
|
||||
print ' ('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')';
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
*/
|
||||
} else {
|
||||
$default = (empty($colorbacklinepairchecked) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($colorbacklinepairchecked)));
|
||||
|
||||
@ -905,6 +906,98 @@ function showSkins($fuser, $edit = 0, $foruserprofile = false)
|
||||
print '</tr>';
|
||||
}
|
||||
|
||||
// Btn action
|
||||
if ($foruserprofile) {
|
||||
/*
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("TopMenuBackgroundColor").'</td>';
|
||||
print '<td>'.($conf->global->THEME_ELDY_TOPMENU_BACK1?$conf->global->THEME_ELDY_BTNACTION:$langs->trans("Default")).'</td>';
|
||||
print '<td class="nowrap left" width="20%"><input name="check_THEME_ELDY_BTNACTION" id="check_THEME_ELDY_BTNACTION" type="checkbox" '.(! empty($object->conf->THEME_ELDY_BTNACTION)?" checked":"");
|
||||
print (empty($dolibarr_main_demo) && $edit)?'':' disabled="disabled"'; // Disabled for demo
|
||||
print '> '.$langs->trans("UsePersonalValue").'</td>';
|
||||
print '<td>';
|
||||
if ($edit)
|
||||
{
|
||||
print $formother->selectColor(colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_BTNACTION,array()),''),'THEME_ELDY_BTNACTION','',1).' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
$color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_BTNACTION,array()),'');
|
||||
if ($color) print '<input type="text" class="colorthumb" disabled style="padding: 1px; margin-top: 0; margin-bottom: 0; background-color: #'.$color.'" value="'.$color.'">';
|
||||
else print '';
|
||||
}
|
||||
if ($edit) print '<br>('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')';
|
||||
print '</td>';*/
|
||||
} else {
|
||||
$default = (empty($butactionbg) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($butactionbg)));
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("BtnActionColor").'</td>';
|
||||
print '<td colspan="'.($colspan - 1).'">';
|
||||
if ($edit) {
|
||||
print $formother->selectColor(colorArrayToHex(colorStringToArray((!empty($conf->global->THEME_ELDY_BTNACTION) ? $conf->global->THEME_ELDY_BTNACTION : ''), array()), ''), 'THEME_ELDY_BTNACTION', '', 1, '', '', 'colorbtnaction').' ';
|
||||
} else {
|
||||
$color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_BTNACTION, array()), '');
|
||||
if ($color) {
|
||||
print '<input type="text" class="colorthumb" disabled="disabled" style="padding: 1px; margin-top: 0; margin-bottom: 0; background-color: #'.$color.'" value="'.$color.'">';
|
||||
} else {
|
||||
//print '<input type="text" class="colorthumb" disabled="disabled" style="padding: 1px; margin-top: 0; margin-bottom: 0; background-color: #'.$defaultcolor.'" value="'.$langs->trans("Default").'">';
|
||||
//print '<span style="color: #000078">'.$langs->trans("Default").'</span>';
|
||||
print $langs->trans("Default");
|
||||
}
|
||||
}
|
||||
print ' <span class="nowraponall opacitymedium">'.$langs->trans("Default").'</span>: <strong><span style="color: #'.$default.'">'.$default.'</span></strong> ';
|
||||
print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis"));
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
}
|
||||
|
||||
// Text btn action
|
||||
if ($foruserprofile) {
|
||||
/*
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("TopMenuBackgroundColor").'</td>';
|
||||
print '<td>'.($conf->global->THEME_ELDY_TOPMENU_BACK1?$conf->global->THEME_ELDY_TEXTBTNACTION:$langs->trans("Default")).'</td>';
|
||||
print '<td class="nowrap left" width="20%"><input name="check_THEME_ELDY_TEXTBTNACTION" id="check_THEME_ELDY_TEXTBTNACTION" type="checkbox" '.(! empty($object->conf->THEME_ELDY_TEXTBTNACTION)?" checked":"");
|
||||
print (empty($dolibarr_main_demo) && $edit)?'':' disabled="disabled"'; // Disabled for demo
|
||||
print '> '.$langs->trans("UsePersonalValue").'</td>';
|
||||
print '<td>';
|
||||
if ($edit)
|
||||
{
|
||||
print $formother->selectColor(colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TEXTBTNACTION,array()),''),'THEME_ELDY_TEXTBTNACTION','',1).' ';
|
||||
}
|
||||
else
|
||||
{
|
||||
$color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_BTNACTION,array()),'');
|
||||
if ($color) print '<input type="text" class="colorthumb" disabled style="padding: 1px; margin-top: 0; margin-bottom: 0; background-color: #'.$color.'" value="'.$color.'">';
|
||||
else print '';
|
||||
}
|
||||
if ($edit) print '<br>('.$langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis").')';
|
||||
print '</td>';*/
|
||||
} else {
|
||||
$default = (empty($textbutaction) ? $langs->trans("Unknown") : colorArrayToHex(colorStringToArray($textbutaction)));
|
||||
|
||||
print '<tr class="oddeven">';
|
||||
print '<td>'.$langs->trans("TextBtnActionColor").'</td>';
|
||||
print '<td colspan="'.($colspan - 1).'">';
|
||||
if ($edit) {
|
||||
print $formother->selectColor(colorArrayToHex(colorStringToArray((!empty($conf->global->THEME_ELDY_TEXTBTNACTION) ? $conf->global->THEME_ELDY_TEXTBTNACTION : ''), array()), ''), 'THEME_ELDY_TEXTBTNACTION', '', 1, '', '', 'colortextbtnaction').' ';
|
||||
} else {
|
||||
$color = colorArrayToHex(colorStringToArray($conf->global->THEME_ELDY_TEXTBTNACTION, array()), '');
|
||||
if ($color) {
|
||||
print '<input type="text" class="colorthumb" disabled="disabled" style="padding: 1px; margin-top: 0; margin-bottom: 0; background-color: #'.$color.'" value="'.$color.'">';
|
||||
} else {
|
||||
//print '<input type="text" class="colorthumb" disabled="disabled" style="padding: 1px; margin-top: 0; margin-bottom: 0; background-color: #'.$defaultcolor.'" value="'.$langs->trans("Default").'">';
|
||||
//print '<span style="color: #000078">'.$langs->trans("Default").'</span>';
|
||||
print $langs->trans("Default");
|
||||
}
|
||||
}
|
||||
print ' <span class="nowraponall opacitymedium">'.$langs->trans("Default").'</span>: <strong><span style="color: #000">'.$default.'</span></strong> ';
|
||||
print $form->textwithpicto('', $langs->trans("NotSupportedByAllThemes").', '.$langs->trans("PressF5AfterChangingThis"));
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
}
|
||||
|
||||
// Use MAIN_OPTIMIZEFORTEXTBROWSER
|
||||
if ($foruserprofile && !empty($fuser->conf->MAIN_OPTIMIZEFORTEXTBROWSER)) {
|
||||
//$default=yn($conf->global->MAIN_OPTIMIZEFORTEXTBROWSER);
|
||||
|
||||
@ -400,6 +400,20 @@ class doc_generic_invoice_odt extends ModelePDFFactures
|
||||
$tmparray = array_merge($substitutionarray, $array_object_from_properties, $array_user, $array_soc, $array_thirdparty, $array_objet, $array_propal, $array_other, $array_thirdparty_contact);
|
||||
complete_substitutions_array($tmparray, $outputlangs, $object);
|
||||
|
||||
// Complete also with substitution from keys directly found into template
|
||||
// TODO Search all tags {object_...:xxxx} into template then loop on this found tags to analyze them and the the corresponding
|
||||
// property of object and use the xxxx to know how to format it.
|
||||
// Before that, we hard code this substitution as if we have found them into the template.
|
||||
$tmparray['object_PREVIOUS_MONTH'] = dol_print_date(dol_time_plus_duree($this->date, -1, 'm'), '%m');
|
||||
$tmparray['object_MONTH'] = dol_print_date($this->date, '%m');
|
||||
$tmparray['object_NEXT_MONTH'] = dol_print_date(dol_time_plus_duree($this->date, 1, 'm'), '%m');
|
||||
$tmparray['object_PREVIOUS_MONTH_TEXT'] = dol_print_date(dol_time_plus_duree($this->date, -1, 'm'), '%B');
|
||||
$tmparray['object_MONTH_TEXT'] = dol_print_date($this->date, '%B');
|
||||
$tmparray['object_NEXT_MONTH_TEXT'] = dol_print_date(dol_time_plus_duree($this->date, 1, 'm'), '%B');
|
||||
$tmparray['object_PREVIOUS_YEAR'] = dol_print_date(dol_time_plus_duree($this->date, -1, 'y'), '%Y');
|
||||
$tmparray['object_YEAR'] = dol_print_date($this->date, '%Y');
|
||||
$tmparray['object_NEXT_YEAR'] = dol_print_date(dol_time_plus_duree($this->date, 1, 'y'), '%Y');
|
||||
|
||||
// Call the ODTSubstitution hook
|
||||
$parameters = array('odfHandler'=>&$odfHandler, 'file'=>$file, 'object'=>$object, 'outputlangs'=>$outputlangs, 'substitutionarray'=>&$tmparray);
|
||||
$reshook = $hookmanager->executeHooks('ODTSubstitution', $parameters, $this, $action); // Note that $action and $object may have been modified by some hooks
|
||||
|
||||
@ -235,19 +235,22 @@ class modStock extends DolibarrModules
|
||||
'p.rowid'=>"ProductId", 'p.ref'=>"Ref", 'p.fk_product_type'=>"Type", 'p.label'=>"Label", 'p.description'=>"Description", 'p.note'=>"Note",
|
||||
'p.price'=>"Price", 'p.tva_tx'=>'VAT', 'p.tosell'=>"OnSell", 'p.tobuy'=>'OnBuy', 'p.duration'=>"Duration",
|
||||
'p.datec'=>'DateCreation', 'p.tms'=>'DateModification', 'p.pmp'=>'PMPValue', 'p.cost_price'=>'CostPrice',
|
||||
'p.seuil_stock_alerte'=>'StockLimit',
|
||||
);
|
||||
$this->export_TypeFields_array[$r] = array(
|
||||
'e.rowid'=>'List:entrepot:ref::stock', 'e.ref'=>'Text', 'e.lieu'=>'Text', 'e.address'=>'Text', 'e.zip'=>'Text', 'e.town'=>'Text',
|
||||
'p.rowid'=>"List:product:label::product", 'p.ref'=>"Text", 'p.fk_product_type'=>"Text", 'p.label'=>"Text", 'p.description'=>"Text", 'p.note'=>"Text",
|
||||
'p.price'=>"Numeric", 'p.tva_tx'=>'Numeric', 'p.tosell'=>"Boolean", 'p.tobuy'=>"Boolean", 'p.duration'=>"Duree",
|
||||
'p.datec'=>'Date', 'p.tms'=>'Date', 'p.pmp'=>'Numeric', 'p.cost_price'=>'Numeric',
|
||||
'ps.reel'=>'Numeric'
|
||||
'ps.reel'=>'Numeric',
|
||||
'p.seuil_stock_alerte'=>'Numeric',
|
||||
);
|
||||
$this->export_entities_array[$r] = array(
|
||||
'p.rowid'=>"product", 'p.ref'=>"product", 'p.fk_product_type'=>"product", 'p.label'=>"product", 'p.description'=>"product", 'p.note'=>"product",
|
||||
'p.price'=>"product", 'p.tva_tx'=>'product', 'p.tosell'=>"product", 'p.tobuy'=>"product", 'p.duration'=>"product",
|
||||
'p.datec'=>'product', 'p.tms'=>'product', 'p.pmp'=>'product', 'p.cost_price'=>'product',
|
||||
'ps.reel'=>'stock'
|
||||
'ps.reel'=>'stock',
|
||||
'p.seuil_stock_alerte'=>'product',
|
||||
); // We define here only fields that use another icon that the one defined into export_icon
|
||||
$this->export_aggregate_array[$r] = array('ps.reel'=>'SUM'); // TODO Not used yet
|
||||
$this->export_dependencies_array[$r] = array('stock'=>array('p.rowid', 'e.rowid')); // We must keep this until the aggregate_array is used. To have a unique key, if we ask a field of a child, to avoid the DISTINCT to discard them.
|
||||
|
||||
@ -178,7 +178,10 @@ class doc_generic_proposal_odt extends ModelePDFPropales
|
||||
$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=proposals/'.urlencode(basename($file['name'])).'">'.img_picto('', 'listlight').'</a><br>';
|
||||
$texte .= '- '.$file['name'];
|
||||
$texte .= ' <a href="'.DOL_URL_ROOT.'/document.php?modulepart=doctemplates&file=proposals/'.urlencode(basename($file['name'])).'">'.img_picto('', 'listlight').'</a>';
|
||||
$texte .= ' <a class="reposition" href="'.$_SERVER["PHP_SELF"].'?modulepart=doctemplates&keyforuploaddir=PROPALE_ADDON_PDF_ODT_PATH&action=deletefile&token='.newToken().'&file='.urlencode(basename($file['name'])).'">'.img_picto('', 'delete').'</a>';
|
||||
$texte .= '<br>';
|
||||
}
|
||||
$texte .= '</div>';
|
||||
|
||||
|
||||
@ -124,27 +124,25 @@ if ($action == 'presend') {
|
||||
|
||||
if ($object->element === 'facture' && !empty($conf->global->INVOICE_EMAIL_SENDER)) {
|
||||
$formmail->frommail = $conf->global->INVOICE_EMAIL_SENDER;
|
||||
$formmail->fromname = '';
|
||||
$formmail->fromname = (!empty($conf->global->INVOICE_EMAIL_SENDER_NAME) ? $conf->global->INVOICE_EMAIL_SENDER_NAME : '');
|
||||
$formmail->fromtype = 'special';
|
||||
}
|
||||
if ($object->element === 'shipping' && !empty($conf->global->SHIPPING_EMAIL_SENDER)) {
|
||||
$formmail->frommail = $conf->global->SHIPPING_EMAIL_SENDER;
|
||||
$formmail->fromname = '';
|
||||
$formmail->fromname = (!empty($conf->global->SHIPPING_EMAIL_SENDER_NAME) ? $conf->global->SHIPPING_EMAIL_SENDER_NAME : '');
|
||||
$formmail->fromtype = 'special';
|
||||
}
|
||||
if ($object->element === 'commande' && !empty($conf->global->COMMANDE_EMAIL_SENDER)) {
|
||||
$formmail->frommail = $conf->global->COMMANDE_EMAIL_SENDER;
|
||||
$formmail->fromname = '';
|
||||
$formmail->fromname = (!empty($conf->global->COMMANDE_EMAIL_SENDER_NAME) ? $conf->global->COMMANDE_EMAIL_SENDER_NAME : '');
|
||||
$formmail->fromtype = 'special';
|
||||
}
|
||||
if ($object->element === 'order_supplier' && !empty($conf->global->ORDER_SUPPLIER_EMAIL_SENDER)) {
|
||||
$formmail->frommail = $conf->global->ORDER_SUPPLIER_EMAIL_SENDER;
|
||||
$formmail->fromname = '';
|
||||
$formmail->fromname = (!empty($conf->global->ORDER_SUPPLIER_EMAIL_SENDER_NAME) ? $conf->global->ORDER_SUPPLIER_EMAIL_SENDER_NAME : '');
|
||||
$formmail->fromtype = 'special';
|
||||
}
|
||||
|
||||
|
||||
|
||||
$formmail->trackid = $trackid;
|
||||
$formmail->withfrom = 1;
|
||||
|
||||
|
||||
@ -110,11 +110,9 @@ print '</table>';
|
||||
|
||||
// We close div and reopen for second column
|
||||
print '</div>';
|
||||
print '<div class="fichehalfright">';
|
||||
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
print '<table class="border centpercent tableforfield">';
|
||||
|
||||
$rightpart = '';
|
||||
$alreadyoutput = 1;
|
||||
foreach ($object->fields as $key => $val) {
|
||||
if ($alreadyoutput) {
|
||||
@ -139,38 +137,46 @@ foreach ($object->fields as $key => $val) {
|
||||
|
||||
$value = $object->$key;
|
||||
|
||||
print '<tr><td';
|
||||
print ' class="'.(empty($val['tdcss']) ? 'titlefield' : $val['tdcss']).' fieldname_'.$key;
|
||||
//if ($val['notnull'] > 0) print ' fieldrequired'; // No fieldrequired inthe view output
|
||||
$rightpart .= '<tr><td';
|
||||
$rightpart .= ' class="'.(empty($val['tdcss']) ? 'titlefield' : $val['tdcss']).' fieldname_'.$key;
|
||||
//if ($val['notnull'] > 0) $rightpart .= ' fieldrequired'; // No fieldrequired inthe view output
|
||||
if ($val['type'] == 'text' || $val['type'] == 'html') {
|
||||
print ' tdtop';
|
||||
$rightpart .= ' tdtop';
|
||||
}
|
||||
print '">';
|
||||
$rightpart.= '">';
|
||||
if (!empty($val['help'])) {
|
||||
print $form->textwithpicto($langs->trans($val['label']), $langs->trans($val['help']));
|
||||
$rightpart .= $form->textwithpicto($langs->trans($val['label']), $langs->trans($val['help']));
|
||||
} else {
|
||||
print $langs->trans($val['label']);
|
||||
$rightpart .= $langs->trans($val['label']);
|
||||
}
|
||||
print '</td>';
|
||||
print '<td class="valuefield fieldname_'.$key;
|
||||
$rightpart .= '</td>';
|
||||
$rightpart .= '<td class="valuefield fieldname_'.$key;
|
||||
if ($val['type'] == 'text') {
|
||||
print ' wordbreak';
|
||||
$rightpart .= ' wordbreak';
|
||||
}
|
||||
if (!empty($val['cssview'])) {
|
||||
print ' '.$val['cssview'];
|
||||
$rightpart .= ' '.$val['cssview'];
|
||||
}
|
||||
print '">';
|
||||
$rightpart .= '">';
|
||||
if (in_array($val['type'], array('text', 'html'))) {
|
||||
print '<div class="longmessagecut">';
|
||||
$rightpart .= '<div class="longmessagecut">';
|
||||
}
|
||||
print $object->showOutputField($val, $key, $value, '', '', '', 0);
|
||||
//print dol_escape_htmltag($object->$key, 1, 1);
|
||||
$rightpart .= $object->showOutputField($val, $key, $value, '', '', '', 0);
|
||||
//$rightpart .= dol_escape_htmltag($object->$key, 1, 1);
|
||||
if (in_array($val['type'], array('text', 'html'))) {
|
||||
print '</div>';
|
||||
$rightpart .= '</div>';
|
||||
}
|
||||
print '</td>';
|
||||
print '</tr>';
|
||||
$rightpart .= '</td>';
|
||||
$rightpart .= '</tr>';
|
||||
}
|
||||
|
||||
|
||||
print '<div class="fichehalfright">';
|
||||
print '<div class="underbanner clearboth"></div>';
|
||||
|
||||
print '<table class="border centpercent tableforfield">';
|
||||
|
||||
print $rightpart;
|
||||
|
||||
?>
|
||||
<!-- END PHP TEMPLATE commonfields_view.tpl.php -->
|
||||
|
||||
@ -101,7 +101,7 @@ if ($action == 'add') {
|
||||
$object->fk_incoterms = GETPOST('incoterm_id', 'int');
|
||||
|
||||
if (!$conf->expedition_bon->enabled && !empty($conf->stock->enabled)) {
|
||||
$expedition->entrepot_id = GETPOST('entrepot_id');
|
||||
$expedition->entrepot_id = GETPOST('entrepot_id', 'int');
|
||||
}
|
||||
|
||||
// We loop on each line of order to complete object delivery with qty to delivery
|
||||
@ -282,7 +282,7 @@ if ($action == 'create') { // Create. Seems to no be used
|
||||
print '<input type="hidden" name="id" value="'.$object->id.'">';
|
||||
print '<input type="hidden" name="ref" value="'.$object->ref.'">';
|
||||
|
||||
print dol_get_fiche_head($head, 'delivery', $langs->trans("Shipment"), -1, 'sending');
|
||||
print dol_get_fiche_head($head, 'delivery', $langs->trans("Shipment"), -1, 'dolly');
|
||||
|
||||
/*
|
||||
* Confirmation de la suppression
|
||||
|
||||
@ -635,7 +635,16 @@ class PaymentExpenseReport extends CommonObject
|
||||
if (empty($this->ref)) {
|
||||
$this->ref = $this->label;
|
||||
}
|
||||
$label = $langs->trans("ShowPayment").': '.$this->ref;
|
||||
$label = img_picto('', $this->picto).' <u class="paddingrightonly">'.$langs->trans("Payment").'</u>';
|
||||
if (isset($this->status)) {
|
||||
$label .= ' '.$this->getLibStatut(5);
|
||||
}
|
||||
if (!empty($this->ref)) {
|
||||
$label .= '<br><b>'.$langs->trans('Ref').':</b> '.$this->ref;
|
||||
}
|
||||
if (!empty($this->datep)) {
|
||||
$label .= '<br><b>'.$langs->trans('Date').':</b> '.dol_print_date($this->datep, 'dayhour');
|
||||
}
|
||||
|
||||
if (!empty($this->id)) {
|
||||
$link = '<a href="'.DOL_URL_ROOT.'/expensereport/payment/card.php?id='.$this->id.'" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">';
|
||||
|
||||
@ -109,7 +109,7 @@ class Position extends CommonObject
|
||||
'date_creation' => array('type'=>'datetime', 'label'=>'DateCreation', 'enabled'=>'1', 'position'=>500, 'notnull'=>1, 'visible'=>-2,),
|
||||
'tms' => array('type'=>'timestamp', 'label'=>'DateModification', 'enabled'=>'1', 'position'=>501, 'notnull'=>0, 'visible'=>-2,),
|
||||
'fk_contrat' => array('type'=>'integer:Contrat:contrat/class/contrat.class.php', 'label'=>'fk_contrat', 'enabled'=>'1', 'position'=>50, 'notnull'=>0, 'visible'=>0,),
|
||||
'fk_user' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Employee', 'enabled'=>'1', 'position'=>55, 'notnull'=>1, 'visible'=>1,),
|
||||
'fk_user' => array('type'=>'integer:User:user/class/user.class.php', 'label'=>'Employee', 'enabled'=>'1', 'position'=>55, 'notnull'=>0, 'visible'=>1,),
|
||||
'fk_job' => array('type'=>'integer:Job:/hrm/class/job.class.php', 'label'=>'Job', 'enabled'=>'1', 'position'=>56, 'notnull'=>1, 'visible'=>1,),
|
||||
'date_start' => array('type'=>'date', 'label'=>'DateStart', 'enabled'=>'1', 'position'=>51, 'notnull'=>1, 'visible'=>1,),
|
||||
'date_end' => array('type'=>'date', 'label'=>'DateEnd', 'enabled'=>'1', 'position'=>52, 'notnull'=>0, 'visible'=>1,),
|
||||
|
||||
@ -264,7 +264,7 @@ if (($id || $ref) && $action == 'edit') {
|
||||
if (is_array($SkilldetRecords) && count($SkilldetRecords) > 0) {
|
||||
print '<table>';
|
||||
foreach ($SkilldetRecords as $sk) {
|
||||
if ($sk->rank > $MaxNumberSkill) {
|
||||
if ($sk->rankorder > $MaxNumberSkill) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -291,7 +291,7 @@ if (($id || $ref) && $action == 'edit') {
|
||||
// if (!empty($val['help'])) {
|
||||
// print $form->textwithpicto($langs->trans($val['label']), $langs->trans($val['help']));
|
||||
// } else {
|
||||
print $langs->trans($val['label']).' '.$langs->trans('rank').' '.$sk->rank;
|
||||
print $langs->trans($val['label']).' '.$langs->trans('rank').' '.$sk->rankorder;
|
||||
// }
|
||||
print '</td>';
|
||||
print '<td class="valuefieldcreate">';
|
||||
@ -696,7 +696,7 @@ if ($action != "create" && $action != "edit") {
|
||||
break; // Should not happen
|
||||
}
|
||||
|
||||
if ($obj->rank > $MaxNumberSkill) {
|
||||
if ($obj->rankorder > $MaxNumberSkill) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@ -16,296 +16,292 @@ class SegmentException extends Exception
|
||||
*/
|
||||
class Segment implements IteratorAggregate, Countable
|
||||
{
|
||||
protected $xml;
|
||||
protected $xmlParsed = '';
|
||||
protected $name;
|
||||
protected $children = array();
|
||||
protected $vars = array();
|
||||
protected $xml;
|
||||
protected $xmlParsed = '';
|
||||
protected $name;
|
||||
protected $children = array();
|
||||
protected $vars = array();
|
||||
protected $images = array();
|
||||
protected $odf;
|
||||
protected $file;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $name name of the segment to construct
|
||||
* @param string $xml XML tree of the segment
|
||||
* @param string $odf odf
|
||||
*/
|
||||
public function __construct($name, $xml, $odf)
|
||||
{
|
||||
$this->name = (string) $name;
|
||||
$this->xml = (string) $xml;
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $name name of the segment to construct
|
||||
* @param string $xml XML tree of the segment
|
||||
* @param string $odf odf
|
||||
*/
|
||||
public function __construct($name, $xml, $odf)
|
||||
{
|
||||
$this->name = (string) $name;
|
||||
$this->xml = (string) $xml;
|
||||
$this->odf = $odf;
|
||||
$zipHandler = $this->odf->getConfig('ZIP_PROXY');
|
||||
$this->file = new $zipHandler($this->odf->getConfig('PATH_TO_TMP'));
|
||||
$this->_analyseChildren($this->xml);
|
||||
}
|
||||
/**
|
||||
* Returns the name of the segment
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
/**
|
||||
* Does the segment have children ?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function hasChildren()
|
||||
{
|
||||
return $this->getIterator()->hasChildren();
|
||||
}
|
||||
/**
|
||||
* Countable interface
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function count()
|
||||
{
|
||||
return count($this->children);
|
||||
}
|
||||
/**
|
||||
* IteratorAggregate interface
|
||||
*
|
||||
* @return Iterator
|
||||
*/
|
||||
public function getIterator()
|
||||
{
|
||||
return new RecursiveIteratorIterator(new SegmentIterator($this->children), 1);
|
||||
}
|
||||
/**
|
||||
* Replace variables of the template in the XML code
|
||||
* All the children are also called
|
||||
* Complete the current segment with new line
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function merge()
|
||||
{
|
||||
// To provide debug information on line number processed
|
||||
global $count;
|
||||
if (empty($count)) $count=1;
|
||||
else $count++;
|
||||
$zipHandler = $this->odf->getConfig('ZIP_PROXY');
|
||||
$this->file = new $zipHandler($this->odf->getConfig('PATH_TO_TMP'));
|
||||
$this->_analyseChildren($this->xml);
|
||||
}
|
||||
/**
|
||||
* Returns the name of the segment
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getName()
|
||||
{
|
||||
return $this->name;
|
||||
}
|
||||
/**
|
||||
* Does the segment have children ?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function hasChildren()
|
||||
{
|
||||
return $this->getIterator()->hasChildren();
|
||||
}
|
||||
/**
|
||||
* Countable interface
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function count()
|
||||
{
|
||||
return count($this->children);
|
||||
}
|
||||
/**
|
||||
* IteratorAggregate interface
|
||||
*
|
||||
* @return Iterator
|
||||
*/
|
||||
public function getIterator()
|
||||
{
|
||||
return new RecursiveIteratorIterator(new SegmentIterator($this->children), 1);
|
||||
}
|
||||
/**
|
||||
* Replace variables of the template in the XML code
|
||||
* All the children are also called
|
||||
* Complete the current segment with new line
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function merge()
|
||||
{
|
||||
// To provide debug information on line number processed
|
||||
global $count;
|
||||
if (empty($count)) $count=1;
|
||||
else $count++;
|
||||
|
||||
if (empty($this->savxml)) $this->savxml = $this->xml; // Sav content of line at first line merged, so we will reuse original for next steps
|
||||
$this->xml = $this->savxml;
|
||||
$tmpvars = $this->vars; // Store into $tmpvars so we won't modify this->vars when completing data with empty values
|
||||
if (empty($this->savxml)) $this->savxml = $this->xml; // Sav content of line at first line merged, so we will reuse original for next steps
|
||||
$this->xml = $this->savxml;
|
||||
$tmpvars = $this->vars; // Store into $tmpvars so we won't modify this->vars when completing data with empty values
|
||||
|
||||
// Search all tags fou into condition to complete $tmpvars, so we will proceed all tests even if not defined
|
||||
$reg='@\[!--\sIF\s([{}a-zA-Z0-9\.\,_]+)\s--\]@smU';
|
||||
preg_match_all($reg, $this->xml, $matches, PREG_SET_ORDER);
|
||||
//var_dump($tmpvars);exit;
|
||||
foreach($matches as $match) // For each match, if there is no entry into this->vars, we add it
|
||||
{
|
||||
if (! empty($match[1]) && ! isset($tmpvars[$match[1]]))
|
||||
{
|
||||
$tmpvars[$match[1]] = ''; // Not defined, so we set it to '', we just need entry into this->vars for next loop
|
||||
}
|
||||
}
|
||||
// Search all tags fou into condition to complete $tmpvars, so we will proceed all tests even if not defined
|
||||
$reg='@\[!--\sIF\s([{}a-zA-Z0-9\.\,_]+)\s--\]@smU';
|
||||
$matches = array();
|
||||
preg_match_all($reg, $this->xml, $matches, PREG_SET_ORDER);
|
||||
//var_dump($tmpvars);exit;
|
||||
foreach ($matches as $match) { // For each match, if there is no entry into this->vars, we add it
|
||||
if (! empty($match[1]) && ! isset($tmpvars[$match[1]])) {
|
||||
$tmpvars[$match[1]] = ''; // Not defined, so we set it to '', we just need entry into this->vars for next loop
|
||||
}
|
||||
}
|
||||
|
||||
// Conditionals substitution
|
||||
// Note: must be done before static substitution, else the variable will be replaced by its value and the conditional won't work anymore
|
||||
foreach($tmpvars as $key => $value)
|
||||
{
|
||||
// If value is true (not 0 nor false nor null nor empty string)
|
||||
if ($value)
|
||||
{
|
||||
// Remove the IF tag
|
||||
$this->xml = str_replace('[!-- IF '.$key.' --]', '', $this->xml);
|
||||
// Remove everything between the ELSE tag (if it exists) and the ENDIF tag
|
||||
$reg = '@(\[!--\sELSE\s' . $key . '\s--\](.*))?\[!--\sENDIF\s' . $key . '\s--\]@smU'; // U modifier = all quantifiers are non-greedy
|
||||
$this->xml = preg_replace($reg, '', $this->xml);
|
||||
}
|
||||
// Else the value is false, then two cases: no ELSE and we're done, or there is at least one place where there is an ELSE clause, then we replace it
|
||||
else
|
||||
{
|
||||
// Find all conditional blocks for this variable: from IF to ELSE and to ENDIF
|
||||
$reg = '@\[!--\sIF\s' . $key . '\s--\](.*)(\[!--\sELSE\s' . $key . '\s--\](.*))?\[!--\sENDIF\s' . $key . '\s--\]@smU'; // U modifier = all quantifiers are non-greedy
|
||||
preg_match_all($reg, $this->xml, $matches, PREG_SET_ORDER);
|
||||
foreach($matches as $match) { // For each match, if there is an ELSE clause, we replace the whole block by the value in the ELSE clause
|
||||
if (!empty($match[3])) $this->xml = str_replace($match[0], $match[3], $this->xml);
|
||||
}
|
||||
// Cleanup the other conditional blocks (all the others where there were no ELSE clause, we can just remove them altogether)
|
||||
$this->xml = preg_replace($reg, '', $this->xml);
|
||||
}
|
||||
}
|
||||
// Conditionals substitution
|
||||
// Note: must be done before static substitution, else the variable will be replaced by its value and the conditional won't work anymore
|
||||
foreach ($tmpvars as $key => $value) {
|
||||
// If value is true (not 0 nor false nor null nor empty string)
|
||||
if ($value) {
|
||||
// Remove the IF tag
|
||||
$this->xml = str_replace('[!-- IF '.$key.' --]', '', $this->xml);
|
||||
// Remove everything between the ELSE tag (if it exists) and the ENDIF tag
|
||||
$reg = '@(\[!--\sELSE\s' . $key . '\s--\](.*))?\[!--\sENDIF\s' . $key . '\s--\]@smU'; // U modifier = all quantifiers are non-greedy
|
||||
$this->xml = preg_replace($reg, '', $this->xml);
|
||||
}
|
||||
// Else the value is false, then two cases: no ELSE and we're done, or there is at least one place where there is an ELSE clause, then we replace it
|
||||
else {
|
||||
// Find all conditional blocks for this variable: from IF to ELSE and to ENDIF
|
||||
$reg = '@\[!--\sIF\s' . $key . '\s--\](.*)(\[!--\sELSE\s' . $key . '\s--\](.*))?\[!--\sENDIF\s' . $key . '\s--\]@smU'; // U modifier = all quantifiers are non-greedy
|
||||
preg_match_all($reg, $this->xml, $matches, PREG_SET_ORDER);
|
||||
foreach ($matches as $match) { // For each match, if there is an ELSE clause, we replace the whole block by the value in the ELSE clause
|
||||
if (!empty($match[3])) $this->xml = str_replace($match[0], $match[3], $this->xml);
|
||||
}
|
||||
// Cleanup the other conditional blocks (all the others where there were no ELSE clause, we can just remove them altogether)
|
||||
$this->xml = preg_replace($reg, '', $this->xml);
|
||||
}
|
||||
}
|
||||
|
||||
$this->xmlParsed .= str_replace(array_keys($tmpvars), array_values($tmpvars), $this->xml);
|
||||
if ($this->hasChildren()) {
|
||||
foreach ($this->children as $child) {
|
||||
$this->xmlParsed = str_replace($child->xml, ($child->xmlParsed=="")?$child->merge():$child->xmlParsed, $this->xmlParsed);
|
||||
$child->xmlParsed = '';
|
||||
}
|
||||
}
|
||||
$reg = "/\[!--\sBEGIN\s$this->name\s--\](.*)\[!--\sEND\s$this->name\s--\]/sm";
|
||||
$this->xmlParsed = preg_replace($reg, '$1', $this->xmlParsed);
|
||||
$this->xmlParsed .= str_replace(array_keys($tmpvars), array_values($tmpvars), $this->xml);
|
||||
if ($this->hasChildren()) {
|
||||
foreach ($this->children as $child) {
|
||||
$this->xmlParsed = str_replace($child->xml, ($child->xmlParsed=="")?$child->merge():$child->xmlParsed, $this->xmlParsed);
|
||||
$child->xmlParsed = '';
|
||||
}
|
||||
}
|
||||
$reg = "/\[!--\sBEGIN\s$this->name\s--\](.*)\[!--\sEND\s$this->name\s--\]/sm";
|
||||
$this->xmlParsed = preg_replace($reg, '$1', $this->xmlParsed);
|
||||
// Miguel Erill 09704/2017 - Add macro replacement to invoice lines
|
||||
$this->xmlParsed = $this->macroReplace($this->xmlParsed);
|
||||
$this->file->open($this->odf->getTmpfile());
|
||||
foreach ($this->images as $imageKey => $imageValue) {
|
||||
$this->xmlParsed = $this->macroReplace($this->xmlParsed);
|
||||
$this->file->open($this->odf->getTmpfile());
|
||||
foreach ($this->images as $imageKey => $imageValue) {
|
||||
if ($this->file->getFromName('Pictures/' . $imageValue) === false) {
|
||||
// Add the image inside the ODT document
|
||||
$this->file->addFile($imageKey, 'Pictures/' . $imageValue);
|
||||
// Add the image to the Manifest (which maintains a list of images, necessary to avoid "Corrupt ODT file. Repair?" when opening the file with LibreOffice)
|
||||
$this->odf->addImageToManifest($imageValue);
|
||||
}
|
||||
}
|
||||
$this->file->close();
|
||||
}
|
||||
$this->file->close();
|
||||
|
||||
return $this->xmlParsed;
|
||||
}
|
||||
return $this->xmlParsed;
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to replace macros for invoice short and long month, invoice year
|
||||
*
|
||||
* Substitution occur when the invoice is generated, not considering the invoice date
|
||||
* so do not (re)generate in a diferent date than the one that the invoice belongs to
|
||||
* Perhaps it would be better to use the invoice issued date but I still do not know
|
||||
* how to get it here
|
||||
*
|
||||
* Miguel Erill 09/04/2017
|
||||
*
|
||||
* @param string $value String to convert
|
||||
*/
|
||||
public function macroReplace($text)
|
||||
{
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||
global $langs;
|
||||
/**
|
||||
* Function to replace macros for invoice short and long month, invoice year
|
||||
*
|
||||
* Substitution occur when the invoice is generated, not considering the invoice date
|
||||
* so do not (re)generate in a diferent date than the one that the invoice belongs to
|
||||
* Perhaps it would be better to use the invoice issued date but I still do not know
|
||||
* how to get it here
|
||||
*
|
||||
* Miguel Erill 09/04/2017
|
||||
*
|
||||
* @param string $value String to convert
|
||||
*/
|
||||
public function macroReplace($text)
|
||||
{
|
||||
include_once DOL_DOCUMENT_ROOT.'/core/lib/date.lib.php';
|
||||
global $langs;
|
||||
|
||||
$hoy = dol_getdate(dol_now('tzuser'));
|
||||
$dateinonemontharray = dol_get_next_month($hoy['mon'], $hoy['year']);
|
||||
$nextMonth = $dateinonemontharray['month'];
|
||||
$hoy = dol_getdate(dol_now('tzuser'));
|
||||
$dateinonemontharray = dol_get_next_month($hoy['mon'], $hoy['year']);
|
||||
$nextMonth = $dateinonemontharray['month'];
|
||||
|
||||
$patterns=array( '/__CURRENTDAY__/u','/__CURENTWEEKDAY__/u',
|
||||
'/__CURRENTMONTH__/u','/__CURRENTMONTHLONG__/u',
|
||||
'/__NEXTMONTH__/u','/__NEXTMONTHLONG__/u',
|
||||
'/__CURRENTYEAR__/u','/__NEXTYEAR__/u' );
|
||||
$values=array( $hoy['mday'], $langs->transnoentitiesnoconv($hoy['weekday']),
|
||||
$hoy['mon'], $langs->transnoentitiesnoconv($hoy['month']),
|
||||
$nextMonth, monthArray($langs)[$nextMonth],
|
||||
$hoy['year'], $hoy['year']+1 );
|
||||
$patterns=array( '/__CURRENTDAY__/u','/__CURENTWEEKDAY__/u',
|
||||
'/__CURRENTMONTH__/u','/__CURRENTMONTHLONG__/u',
|
||||
'/__NEXTMONTH__/u','/__NEXTMONTHLONG__/u',
|
||||
'/__CURRENTYEAR__/u','/__NEXTYEAR__/u' );
|
||||
$values=array( $hoy['mday'], $langs->transnoentitiesnoconv($hoy['weekday']),
|
||||
$hoy['mon'], $langs->transnoentitiesnoconv($hoy['month']),
|
||||
$nextMonth, monthArray($langs)[$nextMonth],
|
||||
$hoy['year'], $hoy['year']+1 );
|
||||
|
||||
$text=preg_replace($patterns, $values, $text);
|
||||
$text=preg_replace($patterns, $values, $text);
|
||||
|
||||
return $text;
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Analyse the XML code in order to find children
|
||||
*
|
||||
* @param string $xml Xml
|
||||
* @return Segment
|
||||
*/
|
||||
protected function _analyseChildren($xml)
|
||||
{
|
||||
// $reg2 = "#\[!--\sBEGIN\s([\S]*)\s--\](?:<\/text:p>)?(.*)(?:<text:p\s.*>)?\[!--\sEND\s(\\1)\s--\]#sm";
|
||||
$reg2 = "#\[!--\sBEGIN\s([\S]*)\s--\](.*)\[!--\sEND\s(\\1)\s--\]#sm";
|
||||
preg_match_all($reg2, $xml, $matches);
|
||||
for ($i = 0, $size = count($matches[0]); $i < $size; $i++) {
|
||||
if ($matches[1][$i] != $this->name) {
|
||||
$this->children[$matches[1][$i]] = new self($matches[1][$i], $matches[0][$i], $this->odf);
|
||||
} else {
|
||||
$this->_analyseChildren($matches[2][$i]);
|
||||
}
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
/**
|
||||
* Analyse the XML code in order to find children
|
||||
*
|
||||
* @param string $xml Xml
|
||||
* @return Segment
|
||||
*/
|
||||
protected function _analyseChildren($xml)
|
||||
{
|
||||
// $reg2 = "#\[!--\sBEGIN\s([\S]*)\s--\](?:<\/text:p>)?(.*)(?:<text:p\s.*>)?\[!--\sEND\s(\\1)\s--\]#sm";
|
||||
$reg2 = "#\[!--\sBEGIN\s([\S]*)\s--\](.*)\[!--\sEND\s(\\1)\s--\]#sm";
|
||||
preg_match_all($reg2, $xml, $matches);
|
||||
for ($i = 0, $size = count($matches[0]); $i < $size; $i++) {
|
||||
if ($matches[1][$i] != $this->name) {
|
||||
$this->children[$matches[1][$i]] = new self($matches[1][$i], $matches[0][$i], $this->odf);
|
||||
} else {
|
||||
$this->_analyseChildren($matches[2][$i]);
|
||||
}
|
||||
}
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign a template variable to replace
|
||||
*
|
||||
* @param string $key Key
|
||||
* @param string $value Value
|
||||
* @param string $encode Encode
|
||||
* @param string $charset Charset
|
||||
* @throws SegmentException
|
||||
* @return Segment
|
||||
*/
|
||||
public function setVars($key, $value, $encode = true, $charset = 'ISO-8859')
|
||||
{
|
||||
if (strpos($this->xml, $this->odf->getConfig('DELIMITER_LEFT') . $key . $this->odf->getConfig('DELIMITER_RIGHT')) === false) {
|
||||
//throw new SegmentException("var $key not found in {$this->getName()}");
|
||||
}
|
||||
/**
|
||||
* Assign a template variable to replace
|
||||
*
|
||||
* @param string $key Key
|
||||
* @param string $value Value
|
||||
* @param string $encode Encode
|
||||
* @param string $charset Charset
|
||||
* @throws SegmentException
|
||||
* @return Segment
|
||||
*/
|
||||
public function setVars($key, $value, $encode = true, $charset = 'ISO-8859')
|
||||
{
|
||||
$tag = $this->odf->getConfig('DELIMITER_LEFT') . $key . $this->odf->getConfig('DELIMITER_RIGHT');
|
||||
|
||||
$tag = $this->odf->getConfig('DELIMITER_LEFT') . $key . $this->odf->getConfig('DELIMITER_RIGHT');
|
||||
if (strpos($this->xml, $tag) === false) {
|
||||
//throw new SegmentException("var $key not found in {$this->getName()}");
|
||||
}
|
||||
|
||||
$this->vars[$tag] = $this->odf->convertVarToOdf($value, $encode, $charset);
|
||||
|
||||
return $this;
|
||||
}
|
||||
/**
|
||||
* Assign a template variable as a picture
|
||||
*
|
||||
* @param string $key name of the variable within the template
|
||||
* @param string $value path to the picture
|
||||
* @throws OdfException
|
||||
* @return Segment
|
||||
*/
|
||||
public function setImage($key, $value)
|
||||
{
|
||||
$filename = strtok(strrchr($value, '/'), '/.');
|
||||
$file = substr(strrchr($value, '/'), 1);
|
||||
$size = @getimagesize($value);
|
||||
if ($size === false) {
|
||||
throw new OdfException("Invalid image");
|
||||
}
|
||||
// Set the width and height of the page
|
||||
list ($width, $height) = $size;
|
||||
$width *= Odf::PIXEL_TO_CM;
|
||||
$height *= Odf::PIXEL_TO_CM;
|
||||
// Fix local-aware issues (eg: 12,10 -> 12.10)
|
||||
$width = sprintf("%F", $width);
|
||||
$height = sprintf("%F", $height);
|
||||
|
||||
$xml = <<<IMG
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign a template variable as a picture
|
||||
*
|
||||
* @param string $key name of the variable within the template
|
||||
* @param string $value path to the picture
|
||||
* @throws OdfException
|
||||
* @return Segment
|
||||
*/
|
||||
public function setImage($key, $value)
|
||||
{
|
||||
$filename = strtok(strrchr($value, '/'), '/.');
|
||||
$file = substr(strrchr($value, '/'), 1);
|
||||
$size = @getimagesize($value);
|
||||
if ($size === false) {
|
||||
throw new OdfException("Invalid image");
|
||||
}
|
||||
// Set the width and height of the page
|
||||
list ($width, $height) = $size;
|
||||
$width *= Odf::PIXEL_TO_CM;
|
||||
$height *= Odf::PIXEL_TO_CM;
|
||||
// Fix local-aware issues (eg: 12,10 -> 12.10)
|
||||
$width = sprintf("%F", $width);
|
||||
$height = sprintf("%F", $height);
|
||||
|
||||
$xml = <<<IMG
|
||||
<draw:frame draw:style-name="fr1" draw:name="$filename" text:anchor-type="aschar" svg:width="{$width}cm" svg:height="{$height}cm" draw:z-index="3"><draw:image xlink:href="Pictures/$file" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/></draw:frame>
|
||||
IMG;
|
||||
$this->images[$value] = $file;
|
||||
$this->setVars($key, $xml, false);
|
||||
return $this;
|
||||
}
|
||||
/**
|
||||
* Shortcut to retrieve a child
|
||||
*
|
||||
* @param string $prop Prop
|
||||
* @return Segment
|
||||
* @throws SegmentException
|
||||
*/
|
||||
public function __get($prop)
|
||||
{
|
||||
if (array_key_exists($prop, $this->children)) {
|
||||
return $this->children[$prop];
|
||||
} else {
|
||||
throw new SegmentException('child ' . $prop . ' does not exist');
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Proxy for setVars
|
||||
*
|
||||
* @param string $meth Meth
|
||||
* @param array $args Args
|
||||
* @return Segment
|
||||
*/
|
||||
public function __call($meth, $args)
|
||||
{
|
||||
try {
|
||||
return $this->setVars($meth, $args[0]);
|
||||
} catch (SegmentException $e) {
|
||||
throw new SegmentException("method $meth nor var $meth exist");
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Returns the parsed XML
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getXmlParsed()
|
||||
{
|
||||
return $this->xmlParsed;
|
||||
}
|
||||
$this->images[$value] = $file;
|
||||
$this->setVars($key, $xml, false);
|
||||
return $this;
|
||||
}
|
||||
/**
|
||||
* Shortcut to retrieve a child
|
||||
*
|
||||
* @param string $prop Prop
|
||||
* @return Segment
|
||||
* @throws SegmentException
|
||||
*/
|
||||
public function __get($prop)
|
||||
{
|
||||
if (array_key_exists($prop, $this->children)) {
|
||||
return $this->children[$prop];
|
||||
} else {
|
||||
throw new SegmentException('child ' . $prop . ' does not exist');
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Proxy for setVars
|
||||
*
|
||||
* @param string $meth Meth
|
||||
* @param array $args Args
|
||||
* @return Segment
|
||||
*/
|
||||
public function __call($meth, $args)
|
||||
{
|
||||
try {
|
||||
return $this->setVars($meth, $args[0]);
|
||||
} catch (SegmentException $e) {
|
||||
throw new SegmentException("method $meth nor var $meth exist");
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Returns the parsed XML
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function getXmlParsed()
|
||||
{
|
||||
return $this->xmlParsed;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -122,7 +122,8 @@ class Odf
|
||||
}
|
||||
|
||||
/**
|
||||
* Assing a template variable
|
||||
* Assing a template variable into ->vars.
|
||||
* For example, key is {object_date} and value is '2021-01-01'
|
||||
*
|
||||
* @param string $key Name of the variable within the template
|
||||
* @param string $value Replacement value
|
||||
@ -134,6 +135,7 @@ class Odf
|
||||
public function setVars($key, $value, $encode = true, $charset = 'ISO-8859')
|
||||
{
|
||||
$tag = $this->config['DELIMITER_LEFT'] . $key . $this->config['DELIMITER_RIGHT'];
|
||||
|
||||
// TODO Warning string may be:
|
||||
// <text:span text:style-name="T13">{</text:span><text:span text:style-name="T12">aaa</text:span><text:span text:style-name="T13">}</text:span>
|
||||
// instead of {aaa} so we should enhance this function.
|
||||
|
||||
@ -9,6 +9,7 @@
|
||||
-- Copyright (C) 2013 Cedric Gross <c.gross@kreiz-it.fr>
|
||||
-- Copyright (C) 2014 Raphaël Doursenaud <rdoursenaud@gpcsolutions.fr>
|
||||
-- Copyright (C) 2015 Bahfir Abbes <bafbes@gmail.com>
|
||||
-- Copyright (C) 2022 Anthony Berton <anthony.berton@bb2a.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
|
||||
@ -39,6 +40,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_SENTBYMAIL','Mails sent from third party card','Executed when you send email from third party card','societe',1);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('COMPANY_DELETE','Third party deleted','Executed when you delete third party','societe',1);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_VALIDATE','Customer proposal validated','Executed when a commercial proposal is validated','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_MODIFY','Customer proposal modified','Executed when a customer proposal is modified','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_SENTBYMAIL','Commercial proposal sent by mail','Executed when a commercial proposal is sent by mail','propal',3);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_SIGNED','Customer proposal closed signed','Executed when a customer proposal is closed signed','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_CLOSE_REFUSED','Customer proposal closed refused','Executed when a customer proposal is closed refused','propal',2);
|
||||
@ -46,17 +48,20 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_DELETE','Customer proposal deleted','Executed when a customer proposal is deleted','propal',2);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_VALIDATE','Customer order validate','Executed when a customer order is validated','commande',4);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLOSE','Customer order classify delivered','Executed when a customer order is set delivered','commande',5);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_MODIFY','Customer order modified','Executed when a customer order is set modified','commande',5);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CLASSIFY_BILLED','Customer order classify billed','Executed when a customer order is set to billed','commande',5);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_CANCEL','Customer order canceled','Executed when a customer order is canceled','commande',5);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SENTBYMAIL','Customer order sent by mail','Executed when a customer order is sent by mail ','commande',5);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_DELETE','Customer order deleted','Executed when a customer order is deleted','commande',5);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_VALIDATE','Customer invoice validated','Executed when a customer invoice is approved','facture',6);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_MODIFY','Customer invoice modified','Executed when a customer invoice is modified','facture',7);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_PAYED','Customer invoice payed','Executed when a customer invoice is payed','facture',7);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_CANCEL','Customer invoice canceled','Executed when a customer invoice is conceled','facture',8);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SENTBYMAIL','Customer invoice sent by mail','Executed when a customer invoice is sent by mail','facture',9);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_UNVALIDATE','Customer invoice unvalidated','Executed when a customer invoice status set back to draft','facture',9);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_DELETE','Customer invoice deleted','Executed when a customer invoice is deleted','facture',9);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_VALIDATE','Price request validated','Executed when a commercial proposal is validated','proposal_supplier',10);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_MODIFY','Price request modified','Executed when a commercial proposal is modified','proposal_supplier',10);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_SENTBYMAIL','Price request sent by mail','Executed when a commercial proposal is sent by mail','proposal_supplier',10);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_CLOSE_SIGNED','Price request closed signed','Executed when a customer proposal is closed signed','proposal_supplier',10);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_CLOSE_REFUSED','Price request closed refused','Executed when a customer proposal is closed refused','proposal_supplier',10);
|
||||
@ -64,6 +69,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
||||
--insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_CREATE','Supplier order created','Executed when a supplier order is created','order_supplier',11);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_VALIDATE','Supplier order validated','Executed when a supplier order is validated','order_supplier',12);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_APPROVE','Supplier order request approved','Executed when a supplier order is approved','order_supplier',13);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_MODIFY','Supplier order request modified','Executed when a supplier order is modified','order_supplier',13);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_SUBMIT','Supplier order request submited','Executed when a supplier order is approved','order_supplier',13);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_RECEIVE','Supplier order request received','Executed when a supplier order is received','order_supplier',13);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_REFUSE','Supplier order request refused','Executed when a supplier order is refused','order_supplier',13);
|
||||
@ -72,20 +78,24 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_CLASSIFY_BILLED','Supplier order set billed','Executed when a supplier order is set as billed','order_supplier',14);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_DELETE','Supplier order deleted','Executed when a supplier order is deleted','order_supplier',14);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_VALIDATE','Supplier invoice validated','Executed when a supplier invoice is validated','invoice_supplier',15);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_MODIFY','Supplier invoice modified','Executed when a supplier invoice is modified','invoice_supplier',15);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_UNVALIDATE','Supplier invoice unvalidated','Executed when a supplier invoice status is set back to draft','invoice_supplier',15);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_PAYED','Supplier invoice payed','Executed when a supplier invoice is payed','invoice_supplier',16);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_SENTBYMAIL','Supplier invoice sent by mail','Executed when a supplier invoice is sent by mail','invoice_supplier',17);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_CANCELED','Supplier invoice cancelled','Executed when a supplier invoice is cancelled','invoice_supplier',17);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_DELETE','Supplier invoice deleted','Executed when a supplier invoice is deleted','invoice_supplier',17);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_VALIDATE','Contract validated','Executed when a contract is validated','contrat',18);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_MODIFY','Contract modified','Executed when a contract is modified','contrat',18);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_SENTBYMAIL','Contract sent by mail','Executed when a contract is sent by mail','contrat',18);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_DELETE','Contract deleted','Executed when a contract is deleted','contrat',18);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_VALIDATE','Shipping validated','Executed when a shipping is validated','shipping',20);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_MODIFY','Shipping modified','Executed when a shipping is modified','shipping',20);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_SENTBYMAIL','Shipping sent by mail','Executed when a shipping is sent by mail','shipping',21);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_DELETE','Shipping sent is deleted','Executed when a shipping is deleted','shipping',21);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECEPTION_VALIDATE','Reception validated','Executed when a reception is validated','reception',22);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECEPTION_SENTBYMAIL','Reception sent by mail','Executed when a reception is sent by mail','reception',22);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_VALIDATE','Member validated','Executed when a member is validated','member',22);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_MODIFY','Member modified','Executed when a member is modified','member',23);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SENTBYMAIL','Mails sent from member card','Executed when you send email from member card','member',23);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SUBSCRIPTION_CREATE','Member subscribtion recorded','Executed when a member subscribtion is deleted','member',24);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_SUBSCRIPTION_MODIFY','Member subscribtion modified','Executed when a member subscribtion is modified','member',24);
|
||||
@ -94,21 +104,27 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_DELETE','Member deleted','Executed when a member is deleted','member',26);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_EXCLUDE','Member excluded','Executed when a member is excluded','member',27);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_VALIDATE','Intervention validated','Executed when a intervention is validated','ficheinter',30);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_MODIFY','Intervention modify','Executed when a intervention is modify','ficheinter',30);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_CLASSIFY_BILLED','Intervention set billed','Executed when a intervention is set to billed (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',32);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_CLASSIFY_UNBILLED','Intervention set unbilled','Executed when a intervention is set to unbilled (when option FICHINTER_CLASSIFY_BILLED is set)','ficheinter',33);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_REOPEN','Intervention opened','Executed when a intervention is re-opened','ficheinter',34);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_SENTBYMAIL','Intervention sent by mail','Executed when a intervention is sent by mail','ficheinter',35);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_DELETE','Intervention is deleted','Executed when a intervention is deleted','ficheinter',35);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PRODUCT_CREATE','Product or service created','Executed when a product or sevice is created','product',40);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PRODUCT_MODIFY','Product or service modified','Executed when a product or sevice is modified','product',41);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PRODUCT_DELETE','Product or service deleted','Executed when a product or sevice is deleted','product',42);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_CREATE','Expense report created','Executed when an expense report is created','expensereport',201);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',202);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_MODIFY','Expense report modified','Executed when an expense report is modified','expensereport',202);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',203);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_PAID','Expense report billed','Executed when an expense report is set as billed','expensereport',204);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_DELETE','Expense report deleted','Executed when an expense report is deleted','expensereport',205);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_VALIDATE','Expense report validated','Executed when an expense report is validated','expensereport',211);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_MODIFY','Expense report modified','Executed when an expense report is modified','expensereport',212);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_APPROVE','Expense report approved','Executed when an expense report is approved','expensereport',212);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_CREATE','Project creation','Executed when a project is created','project',140);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_VALIDATE','Project validation','Executed when a project is validated','project',141);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_MODIFY','Project modified','Executed when a project is modified','project',142);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_DELETE','Project deleted','Executed when a project is deleted','project',143);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TICKET_CREATE','Ticket created','Executed when a ticket is created','ticket',161);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('TICKET_MODIFY','Ticket modified','Executed when a ticket is modified','ticket',163);
|
||||
@ -122,11 +138,7 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('USER_DELETE','User update','Executed when a user is deleted','user',303);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('USER_NEW_PASSWORD','User update','Executed when a user is change password','user',304);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('USER_ENABLEDISABLE','User update','Executed when a user is enable or disable','user',305);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PRODUCT_MODIFY','Product or service modified','Executed when a product or sevice is modified','product',41);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('MEMBER_MODIFY','Member modified','Executed when a member is modified','member',23);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_MODIFY','Intervention modified','Executed when a intervention is modified','ficheinter',19);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_CREATE','Project creation','Executed when a project is created','project',140);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROJECT_MODIFY','Project modified','Executed when a project is modified','project',142);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_VALIDATE','BOM validated','Executed when a BOM is validated','bom',650);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_UNVALIDATE','BOM unvalidated','Executed when a BOM is unvalidated','bom',651);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('BOM_CLOSE','BOM disabled','Executed when a BOM is disabled','bom',652);
|
||||
@ -140,7 +152,6 @@ insert into llx_c_action_trigger (code,label,description,elementtype,rang) value
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTACT_MODIFY','Contact address update','Executed when a contact is updated','contact',51);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTACT_SENTBYMAIL','Mails sent from third party card','Executed when you send email from contact address record','contact',52);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTACT_DELETE','Contact address deleted','Executed when a contact is deleted','contact',53);
|
||||
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTJOBPOSITION_CREATE','Job created','Executed when a job is created','recruitment',7500);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTJOBPOSITION_MODIFY','Job modified','Executed when a job is modified','recruitment',7502);
|
||||
insert into llx_c_action_trigger (code,label,description,elementtype,rang) values ('RECRUITMENTJOBPOSITION_SENTBYMAIL','Mails sent from job record','Executed when you send email from job record','recruitment',7504);
|
||||
|
||||
@ -484,9 +484,9 @@ ALTER TABLE llx_delivery DROP FOREIGN KEY fk_livraison_fk_user_author;
|
||||
ALTER TABLE llx_delivery DROP FOREIGN KEY fk_livraison_fk_user_valid;
|
||||
|
||||
-- add constraint
|
||||
ALTER TABLE llx_delivery ADD CONSTRAINT fk_delivery_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe (rowid);
|
||||
ALTER TABLE llx_delivery ADD CONSTRAINT fk_delivery_fk_user_author FOREIGN KEY (fk_user_author) REFERENCES llx_user (rowid);
|
||||
ALTER TABLE llx_delivery ADD CONSTRAINT fk_delivery_fk_user_valid FOREIGN KEY (fk_user_valid) REFERENCES llx_user (rowid);
|
||||
ALTER TABLE llx_delivery ADD CONSTRAINT fk_delivery_fk_soc FOREIGN KEY (fk_soc) REFERENCES llx_societe (rowid);
|
||||
ALTER TABLE llx_delivery ADD CONSTRAINT fk_delivery_fk_user_author FOREIGN KEY (fk_user_author) REFERENCES llx_user (rowid);
|
||||
ALTER TABLE llx_delivery ADD CONSTRAINT fk_delivery_fk_user_valid FOREIGN KEY (fk_user_valid) REFERENCES llx_user (rowid);
|
||||
|
||||
ALTER TABLE llx_deliverydet DROP FOREIGN KEY fk_livraisondet_fk_livraison;
|
||||
ALTER TABLE llx_deliverydet DROP INDEX idx_livraisondet_fk_expedition;
|
||||
|
||||
@ -292,7 +292,7 @@ CREATE TABLE llx_hrm_job_user(
|
||||
date_creation datetime NOT NULL,
|
||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
fk_contrat integer,
|
||||
fk_user integer NOT NULL,
|
||||
fk_user integer,
|
||||
fk_job integer NOT NULL,
|
||||
date_start date,
|
||||
date_end date,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
--
|
||||
-- Be carefull to requests order.
|
||||
-- This file must be loaded by calling /install/index.php page
|
||||
-- when current version is 14.0.0 or higher.
|
||||
-- when current version is 15.0.0 or higher.
|
||||
--
|
||||
-- To restrict request to Mysql version x.y minimum use -- VMYSQLx.y
|
||||
-- To restrict request to Pgsql version x.y minimum use -- VPGSQLx.y
|
||||
@ -32,6 +32,40 @@
|
||||
|
||||
-- Missing in v15 or lower
|
||||
|
||||
ALTER TABLE llx_c_availability MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_civility MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_country MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_currencies MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_effectif MODIFY COLUMN libelle varchar(128);
|
||||
ALTER TABLE llx_c_exp_tax_cat MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_hrm_department MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_hrm_function MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_input_reason MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_lead_status MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_paper_format MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_partnership_type MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_product_nature MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_productbatch_qcstatus MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_propalst MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_prospectcontactlevel MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_prospectlevel MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_recruitment_origin MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_shipment_package_type MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_type_container MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_type_fees MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_type_resource MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_units MODIFY COLUMN label varchar(128);
|
||||
ALTER TABLE llx_c_actioncomm MODIFY COLUMN libelle varchar(128);
|
||||
ALTER TABLE llx_c_barcode_type MODIFY COLUMN libelle varchar(128);
|
||||
ALTER TABLE llx_c_chargesociales MODIFY COLUMN libelle varchar(128);
|
||||
ALTER TABLE llx_c_input_method MODIFY COLUMN libelle varchar(128);
|
||||
ALTER TABLE llx_c_paiement MODIFY COLUMN libelle varchar(128);
|
||||
ALTER TABLE llx_c_shipment_mode MODIFY COLUMN libelle varchar(128);
|
||||
ALTER TABLE llx_c_stcomm MODIFY COLUMN libelle varchar(128);
|
||||
ALTER TABLE llx_c_stcommcontact MODIFY COLUMN libelle varchar(128);
|
||||
ALTER TABLE llx_c_type_contact MODIFY COLUMN libelle varchar(128);
|
||||
ALTER TABLE llx_c_typent MODIFY COLUMN libelle varchar(128);
|
||||
|
||||
UPDATE llx_rights_def SET perms = 'writeall' WHERE perms = 'writeall_advance' AND module = 'holiday';
|
||||
|
||||
|
||||
@ -39,3 +73,17 @@ UPDATE llx_rights_def SET perms = 'writeall' WHERE perms = 'writeall_advance' AN
|
||||
-- v16
|
||||
|
||||
ALTER TABLE llx_projet_task_time ADD COLUMN fk_product integer NULL;
|
||||
|
||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPAL_MODIFY','Customer proposal modified','Executed when a customer proposal is modified','propal',2);
|
||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_MODIFY','Customer order modified','Executed when a customer order is set modified','commande',5);
|
||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_MODIFY','Customer invoice modified','Executed when a customer invoice is modified','facture',7);
|
||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('PROPOSAL_SUPPLIER_MODIFY','Price request modified','Executed when a commercial proposal is modified','proposal_supplier',10);
|
||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('ORDER_SUPPLIER_MODIFY','Supplier order request modified','Executed when a supplier order is modified','order_supplier',13);
|
||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('BILL_SUPPLIER_MODIFY','Supplier invoice modified','Executed when a supplier invoice is modified','invoice_supplier',15);
|
||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('CONTRACT_MODIFY','Contract modified','Executed when a contract is modified','contrat',18);
|
||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('SHIPPING_MODIFY','Shipping modified','Executed when a shipping is modified','shipping',20);
|
||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('FICHINTER_MODIFY','Intervention modify','Executed when a intervention is modify','ficheinter',30);
|
||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('PRODUCT_MODIFY','Product or service modified','Executed when a product or sevice is modified','product',41);
|
||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('EXPENSE_REPORT_MODIFY','Expense report modified','Executed when an expense report is modified','expensereport',202);
|
||||
INSERT INTO llx_c_action_trigger (code,label,description,elementtype,rang) values ('HOLIDAY_MODIFY','Expense report modified','Executed when an expense report is modified','expensereport',212);
|
||||
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
-- Copyright (C) 2001-2002,2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2004-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2012 Florian Henry <florian.henry@open-concept.pro>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -23,7 +24,7 @@ create table llx_c_actioncomm
|
||||
id integer PRIMARY KEY,
|
||||
code varchar(50) NOT NULL,
|
||||
type varchar(50) DEFAULT 'system' NOT NULL,
|
||||
libelle varchar(48) NOT NULL,
|
||||
libelle varchar(128) NOT NULL,
|
||||
module varchar(50) DEFAULT NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
todo tinyint, -- deprecated
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2011 Philippe GRAND <philippe.grand@atoo-net.com>
|
||||
-- Copyright (C) 2020 Alexandre SPANGARO <aspangaro@open-dsi.fr>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -21,7 +22,7 @@ create table llx_c_availability
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
code varchar(30) NOT NULL,
|
||||
label varchar(60) NOT NULL,
|
||||
label varchar(128) NOT NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
position integer NOT NULL DEFAULT 0
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2007-2009 Regis Houssin <regis.houssin@inodbox.com>
|
||||
-- Copyright (C) 2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -22,7 +23,7 @@ create table llx_c_barcode_type
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
code varchar(16) NOT NULL,
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||
libelle varchar(50) NOT NULL,
|
||||
libelle varchar(128) NOT NULL,
|
||||
coder varchar(16) NOT NULL,
|
||||
example varchar(16) NOT NULL
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2001-2002,2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2004-2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -20,7 +21,7 @@
|
||||
create table llx_c_chargesociales
|
||||
(
|
||||
id integer AUTO_INCREMENT PRIMARY KEY,
|
||||
libelle varchar(80),
|
||||
libelle varchar(128),
|
||||
deductible smallint DEFAULT 0 NOT NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
code varchar(12) NOT NULL,
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
|
||||
-- Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -21,7 +22,7 @@ create table llx_c_civility
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY NOT NULL,
|
||||
code varchar(6) NOT NULL,
|
||||
label varchar(50),
|
||||
label varchar(128),
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
module varchar(32) NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
-- Copyright (C) 2001-2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2014 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -23,7 +24,7 @@ create table llx_c_country
|
||||
rowid integer PRIMARY KEY,
|
||||
code varchar(2) NOT NULL,
|
||||
code_iso varchar(3) ,
|
||||
label varchar(50) NOT NULL,
|
||||
label varchar(128) NOT NULL,
|
||||
eec integer ,
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
favorite tinyint DEFAULT 0 NOT NULL
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2005 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2012 Regis Houssin <regis.houssin@inodbox.com>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -20,7 +21,7 @@
|
||||
create table llx_c_currencies
|
||||
(
|
||||
code_iso varchar(3) PRIMARY KEY,
|
||||
label varchar(64) NOT NULL,
|
||||
label varchar(128) NOT NULL,
|
||||
unicode varchar(32) DEFAULT NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2001-2002,2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -21,7 +22,7 @@ create table llx_c_effectif
|
||||
(
|
||||
id integer PRIMARY KEY,
|
||||
code varchar(12) NOT NULL,
|
||||
libelle varchar(30),
|
||||
libelle varchar(128),
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
module varchar(32) NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
-- Copyright (C) 2012 Mikael Carlavan <mcarlavan@qis-network.com>
|
||||
-- Copyright (C) 2017 ATM Consulting <contact@atm-consulting.fr>
|
||||
-- Copyright (C) 2017 Pierre-Henry Favre <phf@atm-consulting.fr>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -20,7 +21,7 @@
|
||||
|
||||
CREATE TABLE IF NOT EXISTS llx_c_exp_tax_cat (
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
label varchar(48) NOT NULL,
|
||||
label varchar(128) NOT NULL,
|
||||
entity integer DEFAULT 1 NOT NULL,
|
||||
active integer DEFAULT 1 NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
--
|
||||
-- Copyright (C) 2013 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
-- Copyright (C) 2015 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -20,7 +21,7 @@ create table llx_c_hrm_department
|
||||
rowid integer PRIMARY KEY,
|
||||
pos tinyint DEFAULT 0 NOT NULL,
|
||||
code varchar(16) NOT NULL,
|
||||
label varchar(50),
|
||||
label varchar(128),
|
||||
active tinyint DEFAULT 1 NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
--
|
||||
-- Copyright (C) 2013 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
-- Copyright (C) 2015 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -20,7 +21,7 @@ create table llx_c_hrm_function
|
||||
rowid integer PRIMARY KEY,
|
||||
pos tinyint DEFAULT 0 NOT NULL,
|
||||
code varchar(16) NOT NULL,
|
||||
label varchar(50),
|
||||
label varchar(128),
|
||||
c_level tinyint DEFAULT 0 NOT NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2005-2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -21,7 +22,7 @@ create table llx_c_input_method
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
code varchar(30),
|
||||
libelle varchar(60),
|
||||
libelle varchar(128),
|
||||
active tinyint default 1 NOT NULL,
|
||||
module varchar(32) NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2004-2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2005-2009 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -23,7 +24,7 @@ create table llx_c_input_reason
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
code varchar(30),
|
||||
label varchar(60),
|
||||
label varchar(128),
|
||||
active tinyint default 1 NOT NULL,
|
||||
module varchar(32) NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
-- Manage Lead
|
||||
-- Copyright (C) 2014 Florian HENRY <florian.henry@open-concept.pro>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -18,7 +19,7 @@ create table llx_c_lead_status
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
code varchar(10),
|
||||
label varchar(50),
|
||||
label varchar(128),
|
||||
position integer,
|
||||
percent double(5,2),
|
||||
active tinyint DEFAULT 1 NOT NULL
|
||||
|
||||
@ -3,6 +3,7 @@
|
||||
-- Copyright (C) 2004-2014 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2014 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
-- Copyright (C) 2017 Regis Houssin <regis.houssin@inodbox.com>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -24,7 +25,7 @@ create table llx_c_paiement
|
||||
id integer AUTO_INCREMENT PRIMARY KEY,
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||
code varchar(6) NOT NULL,
|
||||
libelle varchar(62),
|
||||
libelle varchar(128),
|
||||
type smallint, -- 0: input money, 1: output money, 2: input and output, 3: other
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
accountancy_code varchar(32) NULL,
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2007 Regis Houssin <regis.houssin@inodbox.com>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -20,7 +21,7 @@ create table llx_c_paper_format
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
code varchar(16) NOT NULL,
|
||||
label varchar(50) NOT NULL,
|
||||
label varchar(128) NOT NULL,
|
||||
width float(6,2) DEFAULT 0, -- Largeur du papier
|
||||
height float(6,2) DEFAULT 0, -- Hauteur du papier
|
||||
unit varchar(5) NOT NULL, -- Mesure unit
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2021 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -29,7 +30,7 @@ create table llx_c_partnership_type
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
entity integer DEFAULT 1 NOT NULL,
|
||||
code varchar(32) NOT NULL,
|
||||
label varchar(64) NOT NULL,
|
||||
label varchar(128) NOT NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2020 Florian HENRY <florian.henry@scopen.fr>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -19,6 +21,6 @@
|
||||
CREATE TABLE llx_c_product_nature (
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
code tinyint NOT NULL,
|
||||
label varchar(100),
|
||||
label varchar(128),
|
||||
active tinyint DEFAULT 1 NOT NULL
|
||||
) ENGINE=innodb;
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2012-2017 Noé Cendrier <noe.cendrier@altairis.fr>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -21,6 +22,6 @@ CREATE TABLE llx_c_productbatch_qcstatus
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
entity integer NOT NULL DEFAULT 1,
|
||||
code varchar(16) NOT NULL,
|
||||
label varchar(50) NOT NULL,
|
||||
label varchar(128) NOT NULL,
|
||||
active integer DEFAULT 1 NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
-- ===================================================================
|
||||
-- Copyright (C) 2001-2002,2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -21,7 +22,7 @@ create table llx_c_propalst
|
||||
(
|
||||
id smallint PRIMARY KEY,
|
||||
code varchar(12) NOT NULL,
|
||||
label varchar(30),
|
||||
label varchar(128),
|
||||
active tinyint DEFAULT 1 NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
-- ===================================================================
|
||||
-- Copyright (C) 2020 Open-Dsi <support@open-dsi.fr>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -19,7 +20,7 @@
|
||||
create table llx_c_prospectcontactlevel
|
||||
(
|
||||
code varchar(12) PRIMARY KEY,
|
||||
label varchar(30),
|
||||
label varchar(128),
|
||||
sortorder smallint,
|
||||
active smallint DEFAULT 1 NOT NULL,
|
||||
module varchar(32) NULL
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
-- ===================================================================
|
||||
-- Copyright (C) 2008 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -19,7 +20,7 @@
|
||||
create table llx_c_prospectlevel
|
||||
(
|
||||
code varchar(12) PRIMARY KEY,
|
||||
label varchar(30),
|
||||
label varchar(128),
|
||||
sortorder smallint,
|
||||
active smallint DEFAULT 1 NOT NULL,
|
||||
module varchar(32) NULL
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2005-2016 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -28,6 +29,6 @@ create table llx_c_recruitment_origin
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
code varchar(32) NOT NULL,
|
||||
label varchar(64) NOT NULL,
|
||||
label varchar(128) NOT NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
-- ===================================================================
|
||||
-- Copyright (C) 2003 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -22,7 +23,7 @@ create table llx_c_shipment_mode
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||
tms timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
code varchar(30) NOT NULL,
|
||||
libelle varchar(50) NOT NULL,
|
||||
libelle varchar(128) NOT NULL,
|
||||
description text,
|
||||
tracking varchar(255) NULL,
|
||||
active tinyint DEFAULT 0,
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
create table llx_c_shipment_package_type
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
label varchar(50) NOT NULL, -- Short name
|
||||
label varchar(128) NOT NULL, -- Short name
|
||||
description varchar(255), -- Description
|
||||
active integer DEFAULT 1 NOT NULL, -- Active or not
|
||||
entity integer DEFAULT 1 NOT NULL -- Multi company id
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2001-2002,2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2004-2015 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -21,7 +22,7 @@ create table llx_c_stcomm
|
||||
(
|
||||
id integer PRIMARY KEY,
|
||||
code varchar(12) NOT NULL,
|
||||
libelle varchar(30),
|
||||
libelle varchar(128),
|
||||
picto varchar(128),
|
||||
active tinyint default 1 NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2020 Open-Dsi <support@open-dsi.fr>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -20,7 +21,7 @@ create table llx_c_stcommcontact
|
||||
(
|
||||
id integer PRIMARY KEY,
|
||||
code varchar(12) NOT NULL,
|
||||
libelle varchar(30),
|
||||
libelle varchar(128),
|
||||
picto varchar(128),
|
||||
active tinyint default 1 NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2005 Patrick Rouillon <patrick.rouillon.net>
|
||||
-- Copyright (C) 2005 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -32,7 +33,7 @@ create table llx_c_type_contact
|
||||
element varchar(30) NOT NULL,
|
||||
source varchar(8) DEFAULT 'external' NOT NULL,
|
||||
code varchar(32) NOT NULL,
|
||||
libelle varchar(64) NOT NULL,
|
||||
libelle varchar(128) NOT NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
module varchar(32) NULL,
|
||||
position integer NOT NULL DEFAULT 0
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2018 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@2byte.es>
|
||||
--
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or modify
|
||||
@ -30,7 +31,7 @@ create table llx_c_type_container
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
code varchar(32) NOT NULL,
|
||||
entity integer DEFAULT 1 NOT NULL, -- multi company id
|
||||
label varchar(64) NOT NULL,
|
||||
label varchar(128) NOT NULL,
|
||||
module varchar(32) NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
-- Copyright (C) 2001-2002,2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2014 Alexandre Spangaro <aspangaro@open-dsi.fr>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -23,7 +24,7 @@ create table llx_c_type_fees
|
||||
(
|
||||
id integer AUTO_INCREMENT PRIMARY KEY,
|
||||
code varchar(12) NOT NULL,
|
||||
label varchar(30),
|
||||
label varchar(128),
|
||||
type integer DEFAULT 0, -- 0=type product, 1=type service
|
||||
accountancy_code varchar(32) NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2014 Jean-François Ferry <jfefe@aternatik.fr>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@2byte.es>
|
||||
--
|
||||
--
|
||||
-- This program is free software; you can redistribute it and/or modify
|
||||
@ -29,6 +30,6 @@ create table llx_c_type_resource
|
||||
(
|
||||
rowid integer AUTO_INCREMENT PRIMARY KEY,
|
||||
code varchar(32) NOT NULL,
|
||||
label varchar(64) NOT NULL,
|
||||
label varchar(128) NOT NULL,
|
||||
active tinyint DEFAULT 1 NOT NULL
|
||||
)ENGINE=innodb;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
-- ========================================================================
|
||||
-- Copyright (C) 2001-2002,2004 Rodolphe Quiedeville <rodolphe@quiedeville.org>
|
||||
-- Copyright (C) 2004 Laurent Destailleur <eldy@users.sourceforge.net>
|
||||
-- Copyright (C) 2022 Juanjo Menent <jmenent@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
|
||||
@ -21,7 +22,7 @@ create table llx_c_typent
|
||||
(
|
||||
id integer PRIMARY KEY,
|
||||
code varchar(12) NOT NULL,
|
||||
libelle varchar(64),
|
||||
libelle varchar(128),
|
||||
fk_country integer NULL, -- Defined only to have specific list for countries that can't use generic list (like argentina that need type A or B)
|
||||
active tinyint DEFAULT 1 NOT NULL,
|
||||
module varchar(32) NULL,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user