Merge branch 'develop' into keep_child_label_if_modified
This commit is contained in:
commit
a9b5feb680
@ -3,7 +3,7 @@ FROM php:7.2-apache
|
|||||||
ENV HOST_USER_ID 33
|
ENV HOST_USER_ID 33
|
||||||
ENV PHP_INI_DATE_TIMEZONE 'UTC'
|
ENV PHP_INI_DATE_TIMEZONE 'UTC'
|
||||||
|
|
||||||
RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libldap2-dev libzip-dev zlib1g-dev libicu-dev g++\
|
RUN apt-get update && apt-get install -y libpng16-16 libpng-dev libjpeg62-turbo libjpeg62-turbo-dev libldap2-dev zlib1g-dev libicu-dev g++\
|
||||||
&& rm -rf /var/lib/apt/lists/* \
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
&& docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
|
&& docker-php-ext-configure gd --with-png-dir=/usr --with-jpeg-dir=/usr \
|
||||||
&& docker-php-ext-install gd \
|
&& docker-php-ext-install gd \
|
||||||
@ -14,7 +14,7 @@ RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libldap2-dev lib
|
|||||||
&& docker-php-ext-install calendar \
|
&& docker-php-ext-install calendar \
|
||||||
&& docker-php-ext-configure intl \
|
&& docker-php-ext-configure intl \
|
||||||
&& docker-php-ext-install intl \
|
&& docker-php-ext-install intl \
|
||||||
&& apt-get autoremove --purge -y libjpeg-dev libldap2-dev zlib1g-dev libicu-dev g++
|
&& apt-get autoremove --purge -y libpng-dev libjpeg62-turbo-dev libldap2-dev zlib1g-dev libicu-dev g++
|
||||||
|
|
||||||
RUN mkdir /var/documents
|
RUN mkdir /var/documents
|
||||||
RUN chown www-data /var/documents
|
RUN chown www-data /var/documents
|
||||||
|
|||||||
@ -21,5 +21,12 @@ web:
|
|||||||
- ../../htdocs:/var/www/html
|
- ../../htdocs:/var/www/html
|
||||||
links:
|
links:
|
||||||
- mariadb
|
- mariadb
|
||||||
|
- mail
|
||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
|
|
||||||
|
mail:
|
||||||
|
image: maildev/maildev
|
||||||
|
ports:
|
||||||
|
- "8081:80"
|
||||||
|
- "25:25"
|
||||||
@ -523,7 +523,7 @@ if ($object->id > 0 && (empty($action) || ($action != 'edit' && $action != 'crea
|
|||||||
$keyforbreak = 'duration';
|
$keyforbreak = 'duration';
|
||||||
include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php';
|
include DOL_DOCUMENT_ROOT.'/core/tpl/commonfields_view.tpl.php';
|
||||||
|
|
||||||
print '<tr><td>'.$langs->trans("TotalCost").'</td><td>'.price($object->total_cost).'</td></tr>';
|
print '<tr><td>'.$form->textwithpicto($langs->trans("TotalCost"), $langs->trans("BOMTotalCost")).'</td><td>'.price($object->total_cost).'</td></tr>';
|
||||||
print '<tr><td>'.$langs->trans("UnitCost").'</td><td>'.price($object->unit_cost).'</td></tr>';
|
print '<tr><td>'.$langs->trans("UnitCost").'</td><td>'.price($object->unit_cost).'</td></tr>';
|
||||||
|
|
||||||
// Other attributes
|
// Other attributes
|
||||||
|
|||||||
@ -1013,11 +1013,20 @@ class BOM extends CommonObject
|
|||||||
$this->unit_cost = 0;
|
$this->unit_cost = 0;
|
||||||
$this->total_cost = 0;
|
$this->total_cost = 0;
|
||||||
|
|
||||||
|
require_once DOL_DOCUMENT_ROOT.'/fourn/class/fournisseur.product.class.php';
|
||||||
|
$productFournisseur = new ProductFournisseur($this->db);
|
||||||
|
|
||||||
foreach ($this->lines as &$line) {
|
foreach ($this->lines as &$line) {
|
||||||
$tmpproduct = new Product($this->db);
|
$tmpproduct = new Product($this->db);
|
||||||
$tmpproduct->fetch($line->fk_product);
|
$tmpproduct->fetch($line->fk_product);
|
||||||
|
$line->unit_cost = price2num((!empty($tmpproduct->cost_price)) ? $tmpproduct->cost_price : $tmpproduct->pmp);
|
||||||
|
if (empty($line->unit_cost)) {
|
||||||
|
if ($productFournisseur->find_min_price_product_fournisseur($line->fk_product) > 0)
|
||||||
|
{
|
||||||
|
$line->unit_cost = $productFournisseur->fourn_unitprice;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$line->unit_cost = (!empty($tmpproduct->cost_price)) ? $tmpproduct->cost_price : $tmpproduct->pmp; // TODO : add option to work with cost_price or pmp
|
|
||||||
$line->total_cost = price2num($line->qty * $line->unit_cost, 'MT');
|
$line->total_cost = price2num($line->qty * $line->unit_cost, 'MT');
|
||||||
$this->total_cost += $line->total_cost;
|
$this->total_cost += $line->total_cost;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2907,6 +2907,18 @@ if ($action == 'create')
|
|||||||
if (!empty($conf->multicurrency->enabled) && !empty($soc->multicurrency_code)) $currency_code = $soc->multicurrency_code;
|
if (!empty($conf->multicurrency->enabled) && !empty($soc->multicurrency_code)) $currency_code = $soc->multicurrency_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// when payment condition is empty (means not override by payment condition form a other object, like third-party), try to use default value
|
||||||
|
if(empty($cond_reglement_id))
|
||||||
|
{
|
||||||
|
$cond_reglement_id = GETPOST("cond_reglement_id");
|
||||||
|
}
|
||||||
|
|
||||||
|
// when payment mode is empty (means not override by payment mode form a other object, like third-party), try to use default value
|
||||||
|
if(empty($mode_reglement_id))
|
||||||
|
{
|
||||||
|
$mode_reglement_id = GETPOST("mode_reglement_id");
|
||||||
|
}
|
||||||
|
|
||||||
if (!empty($soc->id)) $absolute_discount = $soc->getAvailableDiscounts();
|
if (!empty($soc->id)) $absolute_discount = $soc->getAvailableDiscounts();
|
||||||
$note_public = $object->getDefaultCreateValueFor('note_public', ((!empty($origin) && !empty($originid) && is_object($objectsrc) && !empty($conf->global->FACTURE_REUSE_NOTES_ON_CREATE_FROM)) ? $objectsrc->note_public : null));
|
$note_public = $object->getDefaultCreateValueFor('note_public', ((!empty($origin) && !empty($originid) && is_object($objectsrc) && !empty($conf->global->FACTURE_REUSE_NOTES_ON_CREATE_FROM)) ? $objectsrc->note_public : null));
|
||||||
$note_private = $object->getDefaultCreateValueFor('note_private', ((!empty($origin) && !empty($originid) && is_object($objectsrc) && !empty($conf->global->FACTURE_REUSE_NOTES_ON_CREATE_FROM)) ? $objectsrc->note_private : null));
|
$note_private = $object->getDefaultCreateValueFor('note_private', ((!empty($origin) && !empty($originid) && is_object($objectsrc) && !empty($conf->global->FACTURE_REUSE_NOTES_ON_CREATE_FROM)) ? $objectsrc->note_private : null));
|
||||||
|
|||||||
@ -358,7 +358,6 @@ if (strlen($search_fax)) $sql .= natural_search('p.fax', $search_fax)
|
|||||||
if (!empty($conf->socialnetworks->enabled)) {
|
if (!empty($conf->socialnetworks->enabled)) {
|
||||||
foreach ($socialnetworks as $key => $value) {
|
foreach ($socialnetworks as $key => $value) {
|
||||||
if ($value['active'] && strlen($search_{$key})) {
|
if ($value['active'] && strlen($search_{$key})) {
|
||||||
//$sql.= natural_search("p.socialnetworks->'$.".$key."'", $search_{$key});
|
|
||||||
$sql .= ' AND p.socialnetworks LIKE \'%"'.$key.'":"'.$search_{$key}.'%\'';
|
$sql .= ' AND p.socialnetworks LIKE \'%"'.$key.'":"'.$search_{$key}.'%\'';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -43,7 +43,7 @@ $number = strlen($letters);
|
|||||||
$string = '';
|
$string = '';
|
||||||
for ($i = 0; $i < $length; $i++)
|
for ($i = 0; $i < $length; $i++)
|
||||||
{
|
{
|
||||||
$string .= $letters{mt_rand(0, $number - 1)};
|
$string .= $letters[mt_rand(0, $number - 1)];
|
||||||
}
|
}
|
||||||
//print $string;
|
//print $string;
|
||||||
|
|
||||||
|
|||||||
@ -1966,7 +1966,7 @@ class Lessc {
|
|||||||
$this->pushEnv();
|
$this->pushEnv();
|
||||||
$parser = new lessc_parser($this, __METHOD__);
|
$parser = new lessc_parser($this, __METHOD__);
|
||||||
foreach ($args as $name => $strValue) {
|
foreach ($args as $name => $strValue) {
|
||||||
if ($name{0} !== '@') {
|
if ($name[0] !== '@') {
|
||||||
$name = '@'.$name;
|
$name = '@'.$name;
|
||||||
}
|
}
|
||||||
$parser->count = 0;
|
$parser->count = 0;
|
||||||
@ -2638,7 +2638,7 @@ class lessc_parser {
|
|||||||
$hidden = true;
|
$hidden = true;
|
||||||
if (!isset($block->args)) {
|
if (!isset($block->args)) {
|
||||||
foreach ($block->tags as $tag) {
|
foreach ($block->tags as $tag) {
|
||||||
if (!is_string($tag) || $tag{0} != $this->lessc->mPrefix) {
|
if (!is_string($tag) || $tag[0] != $this->lessc->mPrefix) {
|
||||||
$hidden = false;
|
$hidden = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2692,7 +2692,7 @@ class lessc_parser {
|
|||||||
protected function fixTags($tags) {
|
protected function fixTags($tags) {
|
||||||
// move @ tags out of variable namespace
|
// move @ tags out of variable namespace
|
||||||
foreach ($tags as &$tag) {
|
foreach ($tags as &$tag) {
|
||||||
if ($tag{0} == $this->lessc->vPrefix)
|
if ($tag[0] == $this->lessc->vPrefix)
|
||||||
$tag[0] = $this->lessc->mPrefix;
|
$tag[0] = $this->lessc->mPrefix;
|
||||||
}
|
}
|
||||||
return $tags;
|
return $tags;
|
||||||
|
|||||||
@ -463,15 +463,15 @@ function getRandomPassword($generic = false, $replaceambiguouschars = null, $len
|
|||||||
{
|
{
|
||||||
$max = strlen($lowercase) - 1;
|
$max = strlen($lowercase) - 1;
|
||||||
for ($x = 0; $x < $nbofchar; $x++) {
|
for ($x = 0; $x < $nbofchar; $x++) {
|
||||||
$randomCode .= $lowercase{random_int(0, $max)};
|
$randomCode .= $lowercase[random_int(0, $max)];
|
||||||
}
|
}
|
||||||
$max = strlen($uppercase) - 1;
|
$max = strlen($uppercase) - 1;
|
||||||
for ($x = 0; $x < $nbofchar; $x++) {
|
for ($x = 0; $x < $nbofchar; $x++) {
|
||||||
$randomCode .= $uppercase{random_int(0, $max)};
|
$randomCode .= $uppercase[random_int(0, $max)];
|
||||||
}
|
}
|
||||||
$max = strlen($numbers) - 1;
|
$max = strlen($numbers) - 1;
|
||||||
for ($x = 0; $x < $nbofcharlast; $x++) {
|
for ($x = 0; $x < $nbofcharlast; $x++) {
|
||||||
$randomCode .= $numbers{random_int(0, $max)};
|
$randomCode .= $numbers[random_int(0, $max)];
|
||||||
}
|
}
|
||||||
|
|
||||||
$generated_password = str_shuffle($randomCode);
|
$generated_password = str_shuffle($randomCode);
|
||||||
@ -480,15 +480,15 @@ function getRandomPassword($generic = false, $replaceambiguouschars = null, $len
|
|||||||
{
|
{
|
||||||
$max = strlen($lowercase) - 1;
|
$max = strlen($lowercase) - 1;
|
||||||
for ($x = 0; $x < $nbofchar; $x++) {
|
for ($x = 0; $x < $nbofchar; $x++) {
|
||||||
$randomCode .= $lowercase{mt_rand(0, $max)};
|
$randomCode .= $lowercase[mt_rand(0, $max)];
|
||||||
}
|
}
|
||||||
$max = strlen($uppercase) - 1;
|
$max = strlen($uppercase) - 1;
|
||||||
for ($x = 0; $x < $nbofchar; $x++) {
|
for ($x = 0; $x < $nbofchar; $x++) {
|
||||||
$randomCode .= $uppercase{mt_rand(0, $max)};
|
$randomCode .= $uppercase[mt_rand(0, $max)];
|
||||||
}
|
}
|
||||||
$max = strlen($numbers) - 1;
|
$max = strlen($numbers) - 1;
|
||||||
for ($x = 0; $x < $nbofcharlast; $x++) {
|
for ($x = 0; $x < $nbofcharlast; $x++) {
|
||||||
$randomCode .= $numbers{mt_rand(0, $max)};
|
$randomCode .= $numbers[mt_rand(0, $max)];
|
||||||
}
|
}
|
||||||
|
|
||||||
$generated_password = str_shuffle($randomCode);
|
$generated_password = str_shuffle($randomCode);
|
||||||
@ -512,11 +512,11 @@ function getRandomPassword($generic = false, $replaceambiguouschars = null, $len
|
|||||||
$max = strlen($numbers) - 1;
|
$max = strlen($numbers) - 1;
|
||||||
if (function_exists('random_int')) // Cryptographic random
|
if (function_exists('random_int')) // Cryptographic random
|
||||||
{
|
{
|
||||||
$generated_password = str_replace($replaceambiguouschars, $numbers{random_int(0, $max)}, $generated_password);
|
$generated_password = str_replace($replaceambiguouschars, $numbers[random_int(0, $max)], $generated_password);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$generated_password = str_replace($replaceambiguouschars, $numbers{mt_rand(0, $max)}, $generated_password);
|
$generated_password = str_replace($replaceambiguouschars, $numbers[mt_rand(0, $max)], $generated_password);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -229,11 +229,11 @@ function dolSavePageContent($filetpl, Website $object, WebsitePage $objectpage)
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Save content of the index.php and wrapper.php page
|
* Save content of the index.php and/or wrapper.php page
|
||||||
*
|
*
|
||||||
* @param string $pathofwebsite Path of website root
|
* @param string $pathofwebsite Path of website root
|
||||||
* @param string $fileindex Full path of file index.php
|
* @param string $fileindex Full path of file index.php
|
||||||
* @param string $filetpl File tpl to index.php page redirect to
|
* @param string $filetpl File tpl the index.php page redirect to
|
||||||
* @param string $filewrapper Full path of file wrapper.php
|
* @param string $filewrapper Full path of file wrapper.php
|
||||||
* @return boolean True if OK
|
* @return boolean True if OK
|
||||||
*/
|
*/
|
||||||
@ -246,29 +246,39 @@ function dolSaveIndexPage($pathofwebsite, $fileindex, $filetpl, $filewrapper)
|
|||||||
|
|
||||||
dol_mkdir($pathofwebsite);
|
dol_mkdir($pathofwebsite);
|
||||||
|
|
||||||
dol_delete_file($fileindex);
|
if ($fileindex) {
|
||||||
$indexcontent = '<?php'."\n";
|
dol_delete_file($fileindex);
|
||||||
$indexcontent .= "// BEGIN PHP File generated to provide an index.php as Home Page or alias redirector - DO NOT MODIFY - It is just a generated wrapper.\n";
|
$indexcontent = '<?php'."\n";
|
||||||
$indexcontent .= '$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;'."\n";
|
$indexcontent .= "// BEGIN PHP File generated to provide an index.php as Home Page or alias redirector - DO NOT MODIFY - It is just a generated wrapper.\n";
|
||||||
$indexcontent .= "if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once './master.inc.php'; } // Load master if not already loaded\n";
|
$indexcontent .= '$websitekey=basename(__DIR__); if (empty($websitepagefile)) $websitepagefile=__FILE__;'."\n";
|
||||||
$indexcontent .= 'if (! empty($_GET[\'pageref\']) || ! empty($_GET[\'pagealiasalt\']) || ! empty($_GET[\'pageid\'])) {'."\n";
|
$indexcontent .= "if (! defined('USEDOLIBARRSERVER') && ! defined('USEDOLIBARREDITOR')) { require_once './master.inc.php'; } // Load master if not already loaded\n";
|
||||||
$indexcontent .= " require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';\n";
|
$indexcontent .= 'if (! empty($_GET[\'pageref\']) || ! empty($_GET[\'pagealiasalt\']) || ! empty($_GET[\'pageid\'])) {'."\n";
|
||||||
$indexcontent .= " require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';\n";
|
$indexcontent .= " require_once DOL_DOCUMENT_ROOT.'/core/lib/website.lib.php';\n";
|
||||||
$indexcontent .= ' redirectToContainer($_GET[\'pageref\'], $_GET[\'pagealiasalt\'], $_GET[\'pageid\']);'."\n";
|
$indexcontent .= " require_once DOL_DOCUMENT_ROOT.'/core/website.inc.php';\n";
|
||||||
$indexcontent .= "}\n";
|
$indexcontent .= ' redirectToContainer($_GET[\'pageref\'], $_GET[\'pagealiasalt\'], $_GET[\'pageid\']);'."\n";
|
||||||
$indexcontent .= "include_once './".basename($filetpl)."'\n";
|
$indexcontent .= "}\n";
|
||||||
$indexcontent .= '// END PHP ?>'."\n";
|
$indexcontent .= "include_once './".basename($filetpl)."'\n";
|
||||||
$result1 = file_put_contents($fileindex, $indexcontent);
|
$indexcontent .= '// END PHP ?>'."\n";
|
||||||
if (!empty($conf->global->MAIN_UMASK)) {
|
|
||||||
@chmod($fileindex, octdec($conf->global->MAIN_UMASK));
|
$result1 = file_put_contents($fileindex, $indexcontent);
|
||||||
|
if (!empty($conf->global->MAIN_UMASK)) {
|
||||||
|
@chmod($fileindex, octdec($conf->global->MAIN_UMASK));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$result1 = true;
|
||||||
}
|
}
|
||||||
dol_delete_file($filewrapper);
|
|
||||||
|
|
||||||
$wrappercontent = file_get_contents(DOL_DOCUMENT_ROOT.'/website/samples/wrapper.php');
|
if ($filewrapper) {
|
||||||
|
dol_delete_file($filewrapper);
|
||||||
|
$wrappercontent = file_get_contents(DOL_DOCUMENT_ROOT.'/website/samples/wrapper.php');
|
||||||
|
|
||||||
$result2 = file_put_contents($filewrapper, $wrappercontent);
|
$result2 = file_put_contents($filewrapper, $wrappercontent);
|
||||||
if (!empty($conf->global->MAIN_UMASK)) {
|
if (!empty($conf->global->MAIN_UMASK)) {
|
||||||
@chmod($filewrapper, octdec($conf->global->MAIN_UMASK));
|
@chmod($filewrapper, octdec($conf->global->MAIN_UMASK));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$result2 = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ($result1 && $result2);
|
return ($result1 && $result2);
|
||||||
|
|||||||
@ -334,9 +334,10 @@ function build_calfile($format, $title, $desc, $events_array, $outputfile)
|
|||||||
* @param string $outputfile Output file
|
* @param string $outputfile Output file
|
||||||
* @param string $filter (optional) Filter
|
* @param string $filter (optional) Filter
|
||||||
* @param string $url Url (If empty, forge URL for agenda RSS export)
|
* @param string $url Url (If empty, forge URL for agenda RSS export)
|
||||||
|
* @param string $langcode Language code to show in header
|
||||||
* @return int < 0 if ko, Nb of events in file if ok
|
* @return int < 0 if ko, Nb of events in file if ok
|
||||||
*/
|
*/
|
||||||
function build_rssfile($format, $title, $desc, $events_array, $outputfile, $filter = '', $url = '')
|
function build_rssfile($format, $title, $desc, $events_array, $outputfile, $filter = '', $url = '', $langcode = '')
|
||||||
{
|
{
|
||||||
global $user, $conf, $langs;
|
global $user, $conf, $langs;
|
||||||
global $dolibarr_main_url_root;
|
global $dolibarr_main_url_root;
|
||||||
@ -362,7 +363,9 @@ function build_rssfile($format, $title, $desc, $events_array, $outputfile, $filt
|
|||||||
fwrite($fichier, '<rss version="2.0">');
|
fwrite($fichier, '<rss version="2.0">');
|
||||||
fwrite($fichier, "\n");
|
fwrite($fichier, "\n");
|
||||||
|
|
||||||
fwrite($fichier, "<channel>\n<title>".$title."</title>\n");
|
fwrite($fichier, "<channel>\n");
|
||||||
|
fwrite($fichier, "<title>".$title."</title>\n");
|
||||||
|
if ($langcode) fwrite($fichier, "<language>".$langcode."</language>\n");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
fwrite($fichier, "<description><![CDATA[".$desc.".]]></description>"."\n".
|
fwrite($fichier, "<description><![CDATA[".$desc.".]]></description>"."\n".
|
||||||
|
|||||||
@ -1780,6 +1780,18 @@ if ($action == 'create')
|
|||||||
if (!empty($conf->multicurrency->enabled) && !empty($soc->multicurrency_code)) $currency_code = $soc->multicurrency_code;
|
if (!empty($conf->multicurrency->enabled) && !empty($soc->multicurrency_code)) $currency_code = $soc->multicurrency_code;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// when payment condition is empty (means not override by payment condition form a other object, like third-party), try to use default value
|
||||||
|
if(empty($cond_reglement_id))
|
||||||
|
{
|
||||||
|
$cond_reglement_id = GETPOST("cond_reglement_id");
|
||||||
|
}
|
||||||
|
|
||||||
|
// when payment mode is empty (means not override by payment condition form a other object, like third-party), try to use default value
|
||||||
|
if(empty($mode_reglement_id))
|
||||||
|
{
|
||||||
|
$mode_reglement_id = GETPOST("mode_reglement_id");
|
||||||
|
}
|
||||||
|
|
||||||
print '<form name="add" action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
print '<form name="add" action="'.$_SERVER["PHP_SELF"].'" method="post">';
|
||||||
print '<input type="hidden" name="token" value="'.newToken().'">';
|
print '<input type="hidden" name="token" value="'.newToken().'">';
|
||||||
print '<input type="hidden" name="action" value="add">';
|
print '<input type="hidden" name="action" value="add">';
|
||||||
|
|||||||
@ -74,3 +74,4 @@ ProductsToConsume=Products to consume
|
|||||||
ProductsToProduce=Products to produce
|
ProductsToProduce=Products to produce
|
||||||
UnitCost=Unit cost
|
UnitCost=Unit cost
|
||||||
TotalCost=Total cost
|
TotalCost=Total cost
|
||||||
|
BOMTotalCost=The cost to produce this BOM based on cost of each quantity and product to consume (use Cost price if defined, else Average Weighted Price if defined, else the Best purchase price)
|
||||||
@ -127,4 +127,6 @@ OtherLanguages=Other languages
|
|||||||
UseManifest=Provide a manifest.json file
|
UseManifest=Provide a manifest.json file
|
||||||
PublicAuthorAlias=Public author alias
|
PublicAuthorAlias=Public author alias
|
||||||
AvailableLanguagesAreDefinedIntoWebsiteProperties=Available languages are defined into website properties
|
AvailableLanguagesAreDefinedIntoWebsiteProperties=Available languages are defined into website properties
|
||||||
ReplacementDoneInXPages=Replacement done in %s pages or containers
|
ReplacementDoneInXPages=Replacement done in %s pages or containers
|
||||||
|
RSSFeed=RSS Feed
|
||||||
|
RSSFeedDesc=You can get a RSS feed of latest articles with type 'blogpost' using this URL
|
||||||
@ -326,16 +326,20 @@ class ProductCombination
|
|||||||
|
|
||||||
$child = new Product($this->db);
|
$child = new Product($this->db);
|
||||||
$child->fetch($this->fk_product_child);
|
$child->fetch($this->fk_product_child);
|
||||||
$child->price_autogen = $parent->price_autogen;
|
|
||||||
$child->weight = $parent->weight + $this->variation_weight;
|
$child->price_autogen = $parent->price_autogen;
|
||||||
$child->weight_units = $parent->weight_units;
|
$child->weight = $parent->weight;
|
||||||
|
if ($this->variation_weight) { // If we must add a delta on weight
|
||||||
|
$child->weight = ($child->weight ? $child->weight : 0) + $this->variation_weight;
|
||||||
|
}
|
||||||
|
$child->weight_units = $parent->weight_units;
|
||||||
|
|
||||||
// Don't update the child label if the user modified it.
|
// Don't update the child label if the user has already modified it.
|
||||||
if ($child->label == $parent->label) {
|
if ($child->label == $parent->label) {
|
||||||
// This will trigger only at variant creation time
|
// This will trigger only at variant creation time
|
||||||
$varlabel = $this->getCombinationLabel($this->fk_product_child);
|
$varlabel = $this->getCombinationLabel($this->fk_product_child);
|
||||||
$child->label = $parent->label.$varlabel;;
|
$child->label = $parent->label.$varlabel;;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($child->update($child->id, $user) > 0) {
|
if ($child->update($child->id, $user) > 0) {
|
||||||
$new_vat = $parent->tva_tx;
|
$new_vat = $parent->tva_tx;
|
||||||
|
|||||||
@ -197,6 +197,7 @@ $fileindex = $pathofwebsite.'/index.php';
|
|||||||
$filewrapper = $pathofwebsite.'/wrapper.php';
|
$filewrapper = $pathofwebsite.'/wrapper.php';
|
||||||
$filemanifestjson = $pathofwebsite.'/manifest.json.php';
|
$filemanifestjson = $pathofwebsite.'/manifest.json.php';
|
||||||
$filereadme = $pathofwebsite.'/README.md';
|
$filereadme = $pathofwebsite.'/README.md';
|
||||||
|
$filemaster = $pathofwebsite.'/master.inc.php';
|
||||||
|
|
||||||
// Define $urlwithroot
|
// Define $urlwithroot
|
||||||
$urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root));
|
$urlwithouturlroot = preg_replace('/'.preg_quote(DOL_URL_ROOT, '/').'$/i', '', trim($dolibarr_main_url_root));
|
||||||
@ -1189,8 +1190,6 @@ if ($action == 'updatecss')
|
|||||||
if (!$error)
|
if (!$error)
|
||||||
{
|
{
|
||||||
// Save master.inc.php file
|
// Save master.inc.php file
|
||||||
$filemaster = $pathofwebsite.'/master.inc.php';
|
|
||||||
|
|
||||||
dol_syslog("Save master file ".$filemaster);
|
dol_syslog("Save master file ".$filemaster);
|
||||||
|
|
||||||
dol_mkdir($pathofwebsite);
|
dol_mkdir($pathofwebsite);
|
||||||
@ -1384,6 +1383,10 @@ if ($action == 'updatecss')
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Save wrapper.php
|
||||||
|
$result = dolSaveIndexPage($pathofwebsite, '', '', $filewrapper);
|
||||||
|
|
||||||
|
|
||||||
// Message if no error
|
// Message if no error
|
||||||
if (!$error)
|
if (!$error)
|
||||||
{
|
{
|
||||||
@ -1727,8 +1730,8 @@ if (($action == 'updatesource' || $action == 'updatecontent' || $action == 'conf
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$fileindex = $pathofwebsitenew.'/index.php';
|
|
||||||
$filetpl = $pathofwebsitenew.'/page'.$resultpage->id.'.tpl.php';
|
$filetpl = $pathofwebsitenew.'/page'.$resultpage->id.'.tpl.php';
|
||||||
|
$fileindex = $pathofwebsitenew.'/index.php';
|
||||||
$filewrapper = $pathofwebsitenew.'/wrapper.php';
|
$filewrapper = $pathofwebsitenew.'/wrapper.php';
|
||||||
|
|
||||||
//var_dump($pathofwebsitenew);
|
//var_dump($pathofwebsitenew);
|
||||||
@ -2978,6 +2981,14 @@ if ($action == 'editcss')
|
|||||||
|
|
||||||
print '</td></tr>';
|
print '</td></tr>';
|
||||||
|
|
||||||
|
// RSS
|
||||||
|
print '<tr><td class="tdtop">';
|
||||||
|
$htmlhelp = $langs->trans('RSSFeedDesc');
|
||||||
|
print $form->textwithpicto($langs->trans('RSSFeed'), $htmlhelp, 1, 'help', '', 0, 2, '');
|
||||||
|
print '</td><td>';
|
||||||
|
print '/wrapper.php?rss=1[&l=XX][&limit=123]';
|
||||||
|
print '</td></tr>';
|
||||||
|
|
||||||
print '</table>';
|
print '</table>';
|
||||||
|
|
||||||
dol_fiche_end();
|
dol_fiche_end();
|
||||||
|
|||||||
@ -12,6 +12,8 @@ $hashp = GETPOST('hashp', 'aZ09');
|
|||||||
$modulepart = GETPOST('modulepart', 'aZ09');
|
$modulepart = GETPOST('modulepart', 'aZ09');
|
||||||
$entity = GETPOST('entity', 'int') ?GETPOST('entity', 'int') : $conf->entity;
|
$entity = GETPOST('entity', 'int') ?GETPOST('entity', 'int') : $conf->entity;
|
||||||
$original_file = GETPOST("file", "alpha");
|
$original_file = GETPOST("file", "alpha");
|
||||||
|
$l = GETPOST('l', 'aZ09');
|
||||||
|
$limit = GETPOST('limit', 'int');
|
||||||
|
|
||||||
// Parameters for RSS
|
// Parameters for RSS
|
||||||
$rss = GETPOST('rss', 'aZ09');
|
$rss = GETPOST('rss', 'aZ09');
|
||||||
@ -90,8 +92,8 @@ if ($rss) {
|
|||||||
$type = '';
|
$type = '';
|
||||||
$cachedelay = 0;
|
$cachedelay = 0;
|
||||||
$filename = $original_file;
|
$filename = $original_file;
|
||||||
$filters = array('type_container'=>'blogpost', 'lang'=>'en_US');
|
|
||||||
$dir_temp = $conf->website->dir_temp;
|
$dir_temp = $conf->website->dir_temp;
|
||||||
|
|
||||||
include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php';
|
include_once DOL_DOCUMENT_ROOT.'/website/class/website.class.php';
|
||||||
include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php';
|
include_once DOL_DOCUMENT_ROOT.'/website/class/websitepage.class.php';
|
||||||
$website = new Website($db);
|
$website = new Website($db);
|
||||||
@ -99,7 +101,10 @@ if ($rss) {
|
|||||||
|
|
||||||
$website->fetch('', $websitekey);
|
$website->fetch('', $websitekey);
|
||||||
|
|
||||||
$MAXNEWS = 20;
|
$filters = array('type_container'=>'blogpost');
|
||||||
|
if ($l) $filters['lang'] = $l;
|
||||||
|
|
||||||
|
$MAXNEWS = ($limit ? $limit : 20);
|
||||||
$arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', $MAXNEWS, 0, $filters);
|
$arrayofblogs = $websitepage->fetchAll($website->id, 'DESC', 'date_creation', $MAXNEWS, 0, $filters);
|
||||||
$eventarray = array();
|
$eventarray = array();
|
||||||
if (is_array($arrayofblogs)) {
|
if (is_array($arrayofblogs)) {
|
||||||
@ -151,7 +156,7 @@ if ($rss) {
|
|||||||
@chmod($outputfiletmp, octdec($conf->global->MAIN_UMASK));
|
@chmod($outputfiletmp, octdec($conf->global->MAIN_UMASK));
|
||||||
|
|
||||||
// Write file
|
// Write file
|
||||||
$result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1');
|
$result = build_rssfile($format, $title, $desc, $eventarray, $outputfiletmp, '', $website->virtualhost.'/wrapper.php?rss=1'.($l ? '&l='.$l : ''), $l);
|
||||||
|
|
||||||
if ($result >= 0)
|
if ($result >= 0)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user