diff --git a/ChangeLog b/ChangeLog index c567d47a9bc..ed4498c342a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -162,7 +162,8 @@ Dolibarr better: creation of a pdf or odt, hook "afterPDFCreation" or "afterODTCreation" must be used instead. - A lot of pages called fiche.php were renamed into card.php - A lot of pages called liste.php were renamed into list.php - +- If you used warehouse/stock module, recheck setup of stock increase/decrease rules of the + warehouse module and your Point Of Sale module if you use one. ***** ChangeLog for 3.6.2 compared to 3.6.1 ***** diff --git a/dev/detectduplicatelangkey.sh b/dev/detectduplicatelangkey.sh deleted file mode 100755 index 06d9cd8a69e..00000000000 --- a/dev/detectduplicatelangkey.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -# Helps find duplicate translation keys in language files -# -# Copyright (C) 2014 Raphaël Doursenaud - rdoursenaud@gpcsolutions.fr - -for file in `find . -type f` -do - dupes=$( - sed "s/^\s*//" "$file" | # Remove any leading whitespace - sed "s/\s*\=/=/" | # Remove any whitespace before = - grep -Po "(^.*?)=" | # Non greedeely match everything before = - sed "s/\=//" | # Remove trailing = so we get the key - sort | uniq -d # Find duplicates - ) - - if [ -n "$dupes" ] - then - echo "Duplicates found in $file" - echo "$dupes" - fi -done diff --git a/dev/fixnotabfiles.sh b/dev/detectnotabfiles.sh similarity index 91% rename from dev/fixnotabfiles.sh rename to dev/detectnotabfiles.sh index 3e5d28966c9..c89b999b03d 100755 --- a/dev/fixnotabfiles.sh +++ b/dev/detectnotabfiles.sh @@ -1,6 +1,6 @@ #!/bin/sh #------------------------------------------------------ -# Script to find files that are not Unix encoded +# Detect files that does not contains any tab inside # # Laurent Destailleur - eldy@users.sourceforge.net #------------------------------------------------------ diff --git a/dev/fixduplicatelangkey.sh b/dev/fixduplicatelangkey.sh new file mode 100755 index 00000000000..2d9cb7f7a85 --- /dev/null +++ b/dev/fixduplicatelangkey.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# Helps find duplicate translation keys in language files +# +# Copyright (C) 2014 Raphaël Doursenaud - rdoursenaud@gpcsolutions.fr + + +# Syntax +if [ "x$1" != "xlist" -a "x$1" != "xfix" ] +then + echo "Usage: detectduplicatelangkey.sh (list|fix)" +fi + + +if [ "x$1" = "xlist" ] +then + for file in `find htdocs/langs/en_US -name *.lang -type f` + do + dupes=$( + sed "s/^\s*//" "$file" | # Remove any leading whitespace + sed "s/\s*\=/=/" | # Remove any whitespace before = + grep -Po "(^.*?)=" | # Non greedeely match everything before = + sed "s/\=//" | # Remove trailing = so we get the key + sort | uniq -d # Find duplicates + ) + + if [ -n "$dupes" ] + then + echo "Duplicates found in $file" + echo "$dupes" + fi + done +fi + +# To convert +if [ "x$1" = "xfix" ] +then + echo Feature not implemented. Please fix files manually. +fi diff --git a/dev/optimize_images.sh b/dev/optimize_images.sh index 616eec75757..0d532d054ad 100755 --- a/dev/optimize_images.sh +++ b/dev/optimize_images.sh @@ -10,6 +10,7 @@ INPLACE='0' max_input_size=0 max_output_size=0 + usage() { cat </dev/null rm -fr $2.firstpass fi @@ -67,6 +69,25 @@ get_max_file_length() main() { + test=`type pngcrush >/dev/null 2>&1` + result=$? + if [ "x$result" == "x1" ]; then + echo "Tool pngcrush not found" && exit + fi + + test=`type optipng >/dev/null 2>&1` + result=$? + if [ "x$result" == "x1" ]; then + echo "Tool optipng not found" && exit + fi + + test=`type jpegtran >/dev/null 2>&1` + result=$? + if [ "x$result" == "x1" ]; then + echo "Tool jpegtran not found" && exit + fi + + # If $INPUT is empty, then we use current directory if [[ "$INPUT" == "" ]]; then INPUT=$(pwd) @@ -81,6 +102,8 @@ main() OUTPUT='/tmp/optimize' fi + echo "Mode is $INPLACE (1=Images are replaced, 0=New images are stored into $OUTPUT)" + # We create the output directory mkdir -p $OUTPUT @@ -96,6 +119,7 @@ main() # Search of all jpg/jpeg/png in $INPUT # We remove images from $OUTPUT if $OUTPUT is a subdirectory of $INPUT + echo "Scan $INPUT to find images" IMAGES=$(find $INPUT -regextype posix-extended -regex '.*\.(jpg|jpeg|png)' | grep -v $OUTPUT) if [ "$QUIET" == "0" ]; then @@ -103,6 +127,7 @@ main() echo fi for CURRENT_IMAGE in $IMAGES; do + echo "Process $CURRENT_IMAGE" filename=$(basename $CURRENT_IMAGE) if [ "$QUIET" == "0" ]; then printf '%s ' "$filename" @@ -155,6 +180,13 @@ SHORTOPTS="h,i:,o:,q,s,p" LONGOPTS="help,input:,output:,quiet,no-stats,inplace" ARGS=$(getopt -s bash --options $SHORTOPTS --longoptions $LONGOPTS --name $PROGNAME -- "$@") +# Syntax +if [ "x$1" != "xlist" -a "x$1" != "xfix" ] +then + echo "Usage: optimize_images.sh (list|fix) -i dirtoscan" + exit +fi + eval set -- "$ARGS" while true; do case $1 in @@ -191,5 +223,11 @@ while true; do shift done +# To convert +if [ "x$1" = "xlist" ] +then + INPLACE=0 +fi + main diff --git a/htdocs/admin/modules.php b/htdocs/admin/modules.php index fd3f74c06c2..9ce93a6bc26 100644 --- a/htdocs/admin/modules.php +++ b/htdocs/admin/modules.php @@ -534,7 +534,7 @@ dol_fiche_end(); // Show warning about external users -if ($mode != 'marketplace') print '
'.showModulesExludedForExternal($modules).'

'."\n"; +if ($mode != 'marketplace') print info_admin(showModulesExludedForExternal($modules))."\n"; llxFooter(); diff --git a/htdocs/admin/perms.php b/htdocs/admin/perms.php index 74a9b8c8434..907ed389b38 100644 --- a/htdocs/admin/perms.php +++ b/htdocs/admin/perms.php @@ -116,7 +116,7 @@ foreach ($modulesdir as $dir) $db->commit(); // Show warning about external users -print showModulesExludedForExternal($modules).'
'."\n"; +print info_admin(showModulesExludedForExternal($modules)).'
'."\n"; print "
\n"; diff --git a/htdocs/admin/stock.php b/htdocs/admin/stock.php index d0582a91630..a3109647939 100644 --- a/htdocs/admin/stock.php +++ b/htdocs/admin/stock.php @@ -193,6 +193,11 @@ if (! empty($conf->expedition->enabled)) print "\n\n\n"; } print ''; + +//if (! empty($conf->global->STOCK_CALCULATE_ON_VALIDATE_ORDER) || ! empty($conf->global->STOCK_CALCULATE_ON_SHIPMENT)) +//{ +print info_admin($langs->trans("IfYouUsePointOfSaleCheckModule")); +//} print '
'; // Title rule for stock increase diff --git a/htdocs/cashdesk/admin/cashdesk.php b/htdocs/cashdesk/admin/cashdesk.php index 18bb626507f..861267b94f3 100644 --- a/htdocs/cashdesk/admin/cashdesk.php +++ b/htdocs/cashdesk/admin/cashdesk.php @@ -50,14 +50,13 @@ if (GETPOST('action','alpha') == 'set') $db->begin(); if (GETPOST('socid','int') < 0) $_POST["socid"]=''; - /*if (GETPOST("CASHDESK_ID_BANKACCOUNT") < 0) $_POST["CASHDESK_ID_BANKACCOUNT"]=''; - if (GETPOST("CASHDESK_ID_WAREHOUSE") < 0) $_POST["CASHDESK_ID_WAREHOUSE"]='';*/ - $res = dolibarr_set_const($db,"CASHDESK_ID_THIRDPARTY",GETPOST('socid','int'),'chaine',0,'',$conf->entity); - $res = dolibarr_set_const($db,"CASHDESK_ID_BANKACCOUNT_CASH",GETPOST('CASHDESK_ID_BANKACCOUNT_CASH','alpha'),'chaine',0,'',$conf->entity); - $res = dolibarr_set_const($db,"CASHDESK_ID_BANKACCOUNT_CHEQUE",GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE','alpha'),'chaine',0,'',$conf->entity); - $res = dolibarr_set_const($db,"CASHDESK_ID_BANKACCOUNT_CB",GETPOST('CASHDESK_ID_BANKACCOUNT_CB','alpha'),'chaine',0,'',$conf->entity); - $res = dolibarr_set_const($db,"CASHDESK_ID_WAREHOUSE",GETPOST('CASHDESK_ID_WAREHOUSE','alpha'),'chaine',0,'',$conf->entity); + $res = dolibarr_set_const($db,"CASHDESK_ID_THIRDPARTY",(GETPOST('socid','int') > 0 ? GETPOST('socid','int') : ''),'chaine',0,'',$conf->entity); + $res = dolibarr_set_const($db,"CASHDESK_ID_BANKACCOUNT_CASH",(GETPOST('CASHDESK_ID_BANKACCOUNT_CASH','alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CASH','alpha') : ''),'chaine',0,'',$conf->entity); + $res = dolibarr_set_const($db,"CASHDESK_ID_BANKACCOUNT_CHEQUE",(GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE','alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CHEQUE','alpha') : ''),'chaine',0,'',$conf->entity); + $res = dolibarr_set_const($db,"CASHDESK_ID_BANKACCOUNT_CB",(GETPOST('CASHDESK_ID_BANKACCOUNT_CB','alpha') > 0 ? GETPOST('CASHDESK_ID_BANKACCOUNT_CB','alpha') : ''),'chaine',0,'',$conf->entity); + $res = dolibarr_set_const($db,"CASHDESK_ID_WAREHOUSE",(GETPOST('CASHDESK_ID_WAREHOUSE','alpha') > 0 ? GETPOST('CASHDESK_ID_WAREHOUSE','alpha') : ''),'chaine',0,'',$conf->entity); + $res = dolibarr_set_const($db,"CASHDESK_NO_DECREASE_STOCK",GETPOST('CASHDESK_NO_DECREASE_STOCK','alpha'),'chaine',0,'',$conf->entity); $res = dolibarr_set_const($db,"CASHDESK_SERVICES", GETPOST('CASHDESK_SERVICES','alpha'),'chaine',0,'',$conf->entity); dol_syslog("admin/cashdesk: level ".GETPOST('level','alpha')); @@ -129,9 +128,25 @@ if (! empty($conf->banque->enabled)) if (! empty($conf->stock->enabled)) { $var=!$var; - print ''.$langs->trans("CashDeskIdWareHouse").''; + print ''.$langs->trans("CashDeskDoNotDecreaseStock").''; // Force warehouse (this is not a default value) print ''; - print $formproduct->selectWarehouses($conf->global->CASHDESK_ID_WAREHOUSE,'CASHDESK_ID_WAREHOUSE','',1); + print $form->selectyesno('CASHDESK_NO_DECREASE_STOCK',$conf->global->CASHDESK_NO_DECREASE_STOCK,1); + print ''; + + $disabled=$conf->global->CASHDESK_NO_DECREASE_STOCK; + + $var=!$var; + print ''.$langs->trans("CashDeskIdWareHouse").''; // Force warehouse (this is not a default value) + print ''; + if (! $disabled) + { + print $formproduct->selectWarehouses($conf->global->CASHDESK_ID_WAREHOUSE,'CASHDESK_ID_WAREHOUSE','',1,$disabled); + print ' ('.$langs->trans("Create").')'; + } + else + { + print $langs->trans("StockDecreaseForPointOfSaleDisabled"); + } print ''; } diff --git a/htdocs/cashdesk/affContenu.php b/htdocs/cashdesk/affContenu.php index 9940e70cc93..6d8f5ca83ee 100644 --- a/htdocs/cashdesk/affContenu.php +++ b/htdocs/cashdesk/affContenu.php @@ -45,7 +45,17 @@ else -// Left area with selected articles (shopping cart) +$obj_facturation->calculTotaux(); // Redefine prix_total_ttc, prix_total_ht et montant_tva from $_SESSION['poscart'] + +$total_ttc = $obj_facturation->prixTotalTtc(); + +/*var_dump($obj_facturation); +var_dump($_SESSION['poscart']); +var_dump($total_ttc); +exit;*/ + + +// Left area with selected articles (area for article, amount and payments) print '
'; $page=GETPOST('menu','alpha'); @@ -72,13 +82,10 @@ print '
'; - // Right area with selected articles (shopping cart) print '
'; require ('tpl/liste_articles.tpl.php'); -$obj_facturation->prixTotalHt($lst_total_ht); -$obj_facturation->prixTotalTtc($lst_total_ttc); print '
'; diff --git a/htdocs/cashdesk/css/style.css b/htdocs/cashdesk/css/style.css index 0972527a73b..f62a9193830 100644 --- a/htdocs/cashdesk/css/style.css +++ b/htdocs/cashdesk/css/style.css @@ -222,6 +222,7 @@ p.titre { margin: 0 15px; padding: 0; max-width: 500px; + width: 100%; } .titre1 { @@ -308,7 +309,7 @@ p.titre { } .texte_ref { - width: 80px; + min-width: 150px; } .texte1,.texte1_off { @@ -321,8 +322,8 @@ p.titre { /* ------------------- */ .textarea_note { - width: 300px; - height: 150px; + width: 100%; + height: 50px; padding: 2px 2px; } @@ -362,7 +363,7 @@ p.titre { } .resume_label,.note_label { - width: 200px; + min-width: 200px; font-weight: bold; font-size: 1.1em; } diff --git a/htdocs/cashdesk/facturation_verif.php b/htdocs/cashdesk/facturation_verif.php index 42e1c00f651..8953f7b0ccc 100644 --- a/htdocs/cashdesk/facturation_verif.php +++ b/htdocs/cashdesk/facturation_verif.php @@ -137,16 +137,17 @@ switch ( $_GET['action'] ) case 'ajout_article': // We have clicked on button "Add product" - //var_dump($obj_facturation); + //var_dump('ajout_article'); //exit; - if (! empty($obj_facturation->id)) // A product has been selected and stored in session + if (! empty($obj_facturation->id)) // A product was previously selected and stored in session, so we can add it { $obj_facturation->qte($_POST['txtQte']); $obj_facturation->tva($_POST['selTva']); $obj_facturation->remisePercent($_POST['txtRemise']); - $obj_facturation->ajoutArticle(); - + $obj_facturation->ajoutArticle(); // This add an entry into $_SESSION['poscart'] + // We update prixTotalTtc + } $redirection = DOL_URL_ROOT.'/cashdesk/affIndex.php?menu=facturation'; @@ -160,7 +161,7 @@ switch ( $_GET['action'] ) } - +// We saved object obj_facturation $_SESSION['serObjFacturation'] = serialize($obj_facturation); header('Location: '.$redirection); diff --git a/htdocs/cashdesk/include/environnement.php b/htdocs/cashdesk/include/environnement.php index f0545181ff0..3e6a88f252a 100644 --- a/htdocs/cashdesk/include/environnement.php +++ b/htdocs/cashdesk/include/environnement.php @@ -32,6 +32,7 @@ $conf_db_base = $dolibarr_main_db_name; $conf_fksoc = (! empty($_SESSION["CASHDESK_ID_THIRDPARTY"]))?$_SESSION["CASHDESK_ID_THIRDPARTY"]:($conf->global->CASHDESK_ID_THIRDPARTY>0?$conf->global->CASHDESK_ID_THIRDPARTY:0); // Identifiant unique correspondant a l'entrepot a utiliser $conf_fkentrepot = (! empty($_SESSION["CASHDESK_ID_WAREHOUSE"]))?$_SESSION["CASHDESK_ID_WAREHOUSE"]:($conf->global->CASHDESK_ID_WAREHOUSE>0?$conf->global->CASHDESK_ID_WAREHOUSE:0); +if (! empty($conf->global->CASHDESK_NO_DECREASE_STOCK)) $conf_fkentrepot = 0; // If option to disable stock decrease is on, we set warehouse id to 0. // Identifiant unique correspondant au compte caisse / liquide $conf_fkaccount_cash = (! empty($_SESSION["CASHDESK_ID_BANKACCOUNT_CASH"]))?$_SESSION["CASHDESK_ID_BANKACCOUNT_CASH"]:($conf->global->CASHDESK_ID_BANKACCOUNT_CASH>0?$conf->global->CASHDESK_ID_BANKACCOUNT_CASH:0); diff --git a/htdocs/cashdesk/index.php b/htdocs/cashdesk/index.php index a2eb40f2932..fa1c6723d20 100644 --- a/htdocs/cashdesk/index.php +++ b/htdocs/cashdesk/index.php @@ -99,16 +99,15 @@ print $form->select_company(GETPOST('socid','int')?GETPOST('socid','int'):$conf- print ''; print "\n"; -if (! empty($conf->stock->enabled)) +if (! empty($conf->stock->enabled) && empty($conf->global->CASHDESK_NO_DECREASE_STOCK)) { $langs->load("stocks"); print ""; print ''.$langs->trans("Warehouse").''; print ''; $disabled=0; - if (! empty($conf->global->CASHDESK_ID_WAREHOUSE)) $disabled=1; // If a particular stock is defined, we disable choice - print $formproduct->selectWarehouses((GETPOST('warehouseid')?GETPOST('warehouseid'):(empty($conf->global->CASHDESK_ID_WAREHOUSE)?'ifone':$conf->global->CASHDESK_ID_WAREHOUSE)),'warehouseid','',!$disabled,$disabled); - //print ''; + if ($conf->global->CASHDESK_ID_WAREHOUSE > 0) $disabled=1; // If a particular stock is defined, we disable choice + print $formproduct->selectWarehouses((GETPOST('warehouseid')?GETPOST('warehouseid','int'):(empty($conf->global->CASHDESK_ID_WAREHOUSE)?'ifone':$conf->global->CASHDESK_ID_WAREHOUSE)),'warehouseid','',!$disabled,$disabled); print ''; print "\n"; } diff --git a/htdocs/cashdesk/index_verif.php b/htdocs/cashdesk/index_verif.php index c96b4f2b6f1..db80866a77f 100644 --- a/htdocs/cashdesk/index_verif.php +++ b/htdocs/cashdesk/index_verif.php @@ -36,11 +36,11 @@ $langs->load("cashdesk"); $username = GETPOST("txtUsername"); $password = GETPOST("pwdPassword"); -$thirdpartyid = (GETPOST('socid','int')!='')?GETPOST('socid','int'):$conf->global->CASHDESK_ID_THIRDPARTY; -$warehouseid = (GETPOST("warehouseid")!='')?GETPOST("warehouseid"):$conf->global->CASHDESK_ID_WAREHOUSE; -$bankid_cash = (GETPOST("CASHDESK_ID_BANKACCOUNT_CASH")!='')?GETPOST("CASHDESK_ID_BANKACCOUNT_CASH"):$conf->global->CASHDESK_ID_BANKACCOUNT_CASH; -$bankid_cheque = (GETPOST("CASHDESK_ID_BANKACCOUNT_CHEQUE")!='')?GETPOST("CASHDESK_ID_BANKACCOUNT_CHEQUE"):$conf->global->CASHDESK_ID_BANKACCOUNT_CHEQUE; -$bankid_cb = (GETPOST("CASHDESK_ID_BANKACCOUNT_CB")!='')?GETPOST("CASHDESK_ID_BANKACCOUNT_CB"):$conf->global->CASHDESK_ID_BANKACCOUNT_CB; +$thirdpartyid = (GETPOST('socid','int') > 0)?GETPOST('socid','int'):$conf->global->CASHDESK_ID_THIRDPARTY; +$warehouseid = (GETPOST("warehouseid") > 0)?GETPOST("warehouseid",'int'):$conf->global->CASHDESK_ID_WAREHOUSE; +$bankid_cash = (GETPOST("CASHDESK_ID_BANKACCOUNT_CASH") > 0)?GETPOST("CASHDESK_ID_BANKACCOUNT_CASH",'int'):$conf->global->CASHDESK_ID_BANKACCOUNT_CASH; +$bankid_cheque = (GETPOST("CASHDESK_ID_BANKACCOUNT_CHEQUE") > 0)?GETPOST("CASHDESK_ID_BANKACCOUNT_CHEQUE",'int'):$conf->global->CASHDESK_ID_BANKACCOUNT_CHEQUE; +$bankid_cb = (GETPOST("CASHDESK_ID_BANKACCOUNT_CB") > 0)?GETPOST("CASHDESK_ID_BANKACCOUNT_CB",'int'):$conf->global->CASHDESK_ID_BANKACCOUNT_CB; // Check username if (empty($username)) @@ -58,15 +58,15 @@ if (! ($thirdpartyid > 0)) } // If we setup stock module to ask movement on invoices, we must not allow access if required setup not finished. -if (! empty($conf->stock->enabled) && $conf->global->STOCK_CALCULATE_ON_BILL && ! ($warehouseid > 0)) +if (! empty($conf->stock->enabled) && empty($conf->global->CASHDESK_NO_DECREASE_STOCK) && ! ($warehouseid > 0)) { - $retour=$langs->trans("CashDeskSetupStock"); + $retour=$langs->trans("CashDeskYouDidNotDisableStockDecease"); header('Location: '.DOL_URL_ROOT.'/cashdesk/index.php?err='.urlencode($retour).'&user='.$username.'&socid='.$thirdpartyid.'&warehouseid='.$warehouseid.'&bankid_cash='.$bankid_cash.'&bankid_cheque='.$bankid_cheque.'&bankid_cb='.$bankid_cb); exit; } // If stock decrease on bill validation, check user has stock edit permissions -if (! empty($conf->stock->enabled) && $conf->global->STOCK_CALCULATE_ON_BILL && ! empty($username)) +if (! empty($conf->stock->enabled) && empty($conf->global->CASHDESK_NO_DECREASE_STOCK) && ! empty($username)) { $testuser=new User($db); $testuser->fetch(0,$username); @@ -117,8 +117,9 @@ if ( $retour >= 0 ) $_SESSION['uname'] = $username; $_SESSION['lastname'] = $tab['lastname']; $_SESSION['firstname'] = $tab['firstname']; - $_SESSION['CASHDESK_ID_THIRDPARTY'] = $thirdpartyid; - $_SESSION['CASHDESK_ID_WAREHOUSE'] = $warehouseid; + $_SESSION['CASHDESK_ID_THIRDPARTY'] = ($thirdpartyid > 0 ? $thirdpartyid : ''); + $_SESSION['CASHDESK_ID_WAREHOUSE'] = ($warehouseid > 0 ? $warehouseid : ''); + $_SESSION['CASHDESK_ID_BANKACCOUNT_CASH'] = ($bankid_cash > 0 ? $bankid_cash : ''); $_SESSION['CASHDESK_ID_BANKACCOUNT_CHEQUE'] = ($bankid_cheque > 0 ? $bankid_cheque : ''); $_SESSION['CASHDESK_ID_BANKACCOUNT_CB'] = ($bankid_cb > 0 ? $bankid_cb : ''); @@ -131,7 +132,6 @@ if ( $retour >= 0 ) { dol_print_error($db); } - } else { diff --git a/htdocs/cashdesk/tpl/facturation1.tpl.php b/htdocs/cashdesk/tpl/facturation1.tpl.php index f2258c6473e..47116705320 100644 --- a/htdocs/cashdesk/tpl/facturation1.tpl.php +++ b/htdocs/cashdesk/tpl/facturation1.tpl.php @@ -43,6 +43,7 @@ $langs->load("cashdesk"); @@ -147,7 +148,7 @@ $langs->load("cashdesk"); - +
diff --git a/htdocs/cashdesk/tpl/liste_articles.tpl.php b/htdocs/cashdesk/tpl/liste_articles.tpl.php index e640113e562..e4b6bc14436 100644 --- a/htdocs/cashdesk/tpl/liste_articles.tpl.php +++ b/htdocs/cashdesk/tpl/liste_articles.tpl.php @@ -67,8 +67,6 @@ else } } -$obj_facturation->calculTotaux(); -$total_ttc = $obj_facturation->prixTotalTtc(); echo ('

'.$langs->trans("Total").' : '.price(price2num($total_ttc, 'MT'),0,$langs,0,0,-1,$conf->currency).'

'."\n"); ?> diff --git a/htdocs/cashdesk/tpl/menu.tpl.php b/htdocs/cashdesk/tpl/menu.tpl.php index 4ee52ce0da6..ce38bb7d7e8 100644 --- a/htdocs/cashdesk/tpl/menu.tpl.php +++ b/htdocs/cashdesk/tpl/menu.tpl.php @@ -72,7 +72,7 @@ print $langs->trans("CashDeskThirdParty").': '.$companyLink.'
'; /*print $langs->trans("CashDeskBankCash").': '.$bankcashLink.'
'; print $langs->trans("CashDeskBankCB").': '.$bankcbLink.'
'; print $langs->trans("CashDeskBankCheque").': '.$bankchequeLink.'
';*/ -if (!empty($_SESSION["CASHDESK_ID_WAREHOUSE"]) && ! empty($conf->stock->enabled)) +if (!empty($_SESSION["CASHDESK_ID_WAREHOUSE"]) && ! empty($conf->stock->enabled) && empty($conf->global->CASHDESK_NO_DECREASE_STOCK)) { print $langs->trans("CashDeskWarehouse").': '.$warehouseLink; } diff --git a/htdocs/cashdesk/tpl/validation1.tpl.php b/htdocs/cashdesk/tpl/validation1.tpl.php index 15762ecf494..1aa1c0c4723 100644 --- a/htdocs/cashdesk/tpl/validation1.tpl.php +++ b/htdocs/cashdesk/tpl/validation1.tpl.php @@ -17,6 +17,7 @@ */ $langs->load("main"); +$langs->load("bills"); // Object $form must de defined @@ -111,8 +112,9 @@ $langs->load("main");

trans("Notes"); ?>

- " /> -

trans("RestartSelling"); ?>

+
diff --git a/htdocs/cashdesk/tpl/validation2.tpl.php b/htdocs/cashdesk/tpl/validation2.tpl.php index 9ebab951eb9..b00268d7b0a 100644 --- a/htdocs/cashdesk/tpl/validation2.tpl.php +++ b/htdocs/cashdesk/tpl/validation2.tpl.php @@ -18,10 +18,11 @@ */ $langs->load("main"); +$langs->load("bills"); ?> -

trans("SellFinished"); ?>

+

trans("SellFinished"); ?>


diff --git a/htdocs/cashdesk/validation_verif.php b/htdocs/cashdesk/validation_verif.php index 173c1894555..27ce3380dd4 100644 --- a/htdocs/cashdesk/validation_verif.php +++ b/htdocs/cashdesk/validation_verif.php @@ -218,7 +218,33 @@ switch ($action) $resultcreate=$invoice->create($user,0,dol_stringtotime($obj_facturation->paiementLe())); if ($resultcreate > 0) { - $resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), (isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0)); + $warehouseidtodecrease=(isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0); + if (! empty($conf->global->CASHDESK_NO_DECREASE_STOCK)) $warehouseidtodecrease=0; // If a particular stock is defined, we disable choice + + $resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), 0); + + if ($warehouseidtodecrease > 0) + { + // Decrease + require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php'; + $langs->load("agenda"); + // Loop on each line + $cpt=count($invoice->lines); + for ($i = 0; $i < $cpt; $i++) + { + if ($invoice->lines[$i]->fk_product > 0) + { + $mouvP = new MouvementStock($db); + $mouvP->origin = &$invoice; + // We decrease stock for product + if ($invoice->type == $invoice::TYPE_CREDIT_NOTE) $result=$mouvP->reception($user, $invoice->lines[$i]->fk_product, $warehouseidtodecrease, $invoice->lines[$i]->qty, $invoice->lines[$i]->subprice, $langs->trans("InvoiceValidatedInDolibarrFromPos",$invoice->newref)); + else $result=$mouvP->livraison($user, $invoice->lines[$i]->fk_product, $warehouseidtodecrease, $invoice->lines[$i]->qty, $invoice->lines[$i]->subprice, $langs->trans("InvoiceValidatedInDolibarrFromPos",$invoice->newref)); + if ($result < 0) { + $error++; + } + } + } + } } else { @@ -232,7 +258,33 @@ switch ($action) $resultcreate=$invoice->create($user,0,0); if ($resultcreate > 0) { - $resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), (isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0)); + $warehouseidtodecrease=(isset($_SESSION["CASHDESK_ID_WAREHOUSE"])?$_SESSION["CASHDESK_ID_WAREHOUSE"]:0); + if (! empty($conf->global->CASHDESK_NO_DECREASE_STOCK)) $warehouseidtodecrease=0; // If a particular stock is defined, we disable choice + + $resultvalid=$invoice->validate($user, $obj_facturation->numInvoice(), 0); + + if ($warehouseidtodecrease > 0) + { + // Decrease + require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php'; + $langs->load("agenda"); + // Loop on each line + $cpt=count($invoice->lines); + for ($i = 0; $i < $cpt; $i++) + { + if ($invoice->lines[$i]->fk_product > 0) + { + $mouvP = new MouvementStock($db); + $mouvP->origin = &$invoice; + // We decrease stock for product + if ($invoice->type == $invoice::TYPE_CREDIT_NOTE) $result=$mouvP->reception($user, $invoice->lines[$i]->fk_product, $warehouseidtodecrease, $invoice->lines[$i]->qty, $invoice->lines[$i]->subprice, $langs->trans("InvoiceValidatedInDolibarrFromPos",$invoice->newref)); + else $result=$mouvP->livraison($user, $invoice->lines[$i]->fk_product, $warehouseidtodecrease, $invoice->lines[$i]->qty, $invoice->lines[$i]->subprice, $langs->trans("InvoiceValidatedInDolibarrFromPos",$invoice->newref)); + if ($result < 0) { + $error++; + } + } + } + } $id = $invoice->id; diff --git a/htdocs/comm/mailing/card.php b/htdocs/comm/mailing/card.php index 15a74483411..ca4c27bfdbc 100644 --- a/htdocs/comm/mailing/card.php +++ b/htdocs/comm/mailing/card.php @@ -94,6 +94,13 @@ $object->substitutionarrayfortest=array( //,'__PERSONALIZED__' => 'TESTPersonalized' // Not used yet ); +// List of sending methods +$listofmethods=array(); +$listofmethods['mail']='PHP mail function'; +//$listofmethods['simplemail']='Simplemail class'; +$listofmethods['smtps']='SMTP/SMTPS socket library'; + + /* * Actions @@ -741,10 +748,21 @@ else { // Define message to recommand from command line - // Pour des raisons de securite, on ne permet pas cette fonction via l'IHM, - // on affiche donc juste un message + $sendingmode=$conf->global->MAIN_MAIL_SENDMODE; + if (empty($sendingmode)) $sendingmode='mail'; // If not defined, we use php mail function - if (empty($conf->global->MAILING_LIMIT_SENDBYWEB)) + if (! empty($conf->global->MAILING_NO_USING_PHPMAIL) && $sendingmode == 'mail') + { + // EMailing feature may be a spam problem, so when you host several users/instance, having this option may force each user to use their own SMTP agent. + // You ensure that every user is using its own SMTP server. + $linktoadminemailbefore=''; + $linktoadminemailend=''; + setEventMessage($langs->trans("MailSendSetupIs", $listofmethods[$sendingmode]), 'warnings'); + setEventMessage($langs->trans("MailSendSetupIs2", $linktoadminemailbefore, $linktoadminemailend, $langs->transnoentitiesnoconv("MAIN_MAIL_SENDMODE"), $listofmethods['smtps']), 'warnings'); + if (! empty($conf->global->MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS)) setEventMessage($langs->trans("MailSendSetupIs3", $conf->global->MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS), 'warnings'); + $_GET["action"]=''; + } + else if (empty($conf->global->MAILING_LIMIT_SENDBYWEB)) { // Pour des raisons de securite, on ne permet pas cette fonction via l'IHM, // on affiche donc juste un message @@ -764,7 +782,7 @@ else } $text.=$langs->trans('ConfirmSendingEmailing').'
'; $text.=$langs->trans('LimitSendingEmailing',$conf->global->MAILING_LIMIT_SENDBYWEB); - print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id,$langs->trans('SendMailing'),$text,'sendallconfirmed',$formquestion,'',1,260); + print $form->formconfirm($_SERVER['PHP_SELF'].'?id='.$object->id,$langs->trans('SendMailing'),$text,'sendallconfirmed',$formquestion,'',1,270); } } diff --git a/htdocs/comm/mailing/cibles.php b/htdocs/comm/mailing/cibles.php index 49d2f1befa2..75f2399017b 100644 --- a/htdocs/comm/mailing/cibles.php +++ b/htdocs/comm/mailing/cibles.php @@ -276,7 +276,8 @@ if ($object->fetch($id) >= 0) $obj = new $classname($db); - $qualified=1; + // Check dependencies + $qualified=(isset($obj->enabled)?$obj->enabled:1); foreach ($obj->require_module as $key) { if (! $conf->$key->enabled || (! $user->admin && $obj->require_admin)) diff --git a/htdocs/commande/card.php b/htdocs/commande/card.php index 56511f43c97..115b3248a05 100644 --- a/htdocs/commande/card.php +++ b/htdocs/commande/card.php @@ -1998,7 +1998,7 @@ if ($action == 'create' && $user->rights->commande->creer) { $rowspan ++; // Bank Account - if (! empty($conf->global->BANK_ASK_PAYMENT_BANK_DURING_ORDER) && ! empty($conf->banque->enabled)) + if (! empty($conf->global->BANK_ASK_PAYMENT_BANK_DURING_ORDER) && ! empty($conf->banque->enabled)) { print ''; print '
'; diff --git a/htdocs/compta/facture/class/facture.class.php b/htdocs/compta/facture/class/facture.class.php index a6877ad9ed8..b924b059bfd 100644 --- a/htdocs/compta/facture/class/facture.class.php +++ b/htdocs/compta/facture/class/facture.class.php @@ -1600,7 +1600,7 @@ class Facture extends CommonInvoice * * @param User $user Object user that validate * @param string $force_number Reference to force on invoice - * @param int $idwarehouse Id of warehouse to use for stock decrease + * @param int $idwarehouse Id of warehouse to use for stock decrease if option to decreasenon stock is on (0=no decrease) * @param int $notrigger 1=Does not execute triggers, 0= execuete triggers * @return int <0 if KO, >0 if OK */ @@ -1728,7 +1728,7 @@ class Facture extends CommonInvoice $result=$this->client->set_as_client(); // Si active on decremente le produit principal et ses composants a la validation de facture - if ($this->type != self::TYPE_DEPOSIT && $result >= 0 && ! empty($conf->stock->enabled) && ! empty($conf->global->STOCK_CALCULATE_ON_BILL)) + if ($this->type != self::TYPE_DEPOSIT && $result >= 0 && ! empty($conf->stock->enabled) && ! empty($conf->global->STOCK_CALCULATE_ON_BILL) && $idwarehouse > 0) { require_once DOL_DOCUMENT_ROOT.'/product/stock/class/mouvementstock.class.php'; $langs->load("agenda"); diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 87ee2f1a1d2..1b0438bdea1 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -3016,30 +3016,33 @@ abstract class CommonObject $marginInfo = $this->getMarginInfos($force_price); - print $langs->trans('ShowMarginInfos').' : '; - $hidemargininfos = $_COOKIE['DOLUSER_MARGININFO_HIDE_SHOW']; - print ''.img_picto($langs->trans("Disabled"),'switch_off').''; - print ''.img_picto($langs->trans("Enabled"),'switch_on').''; + if (! empty($conf->global->MARGIN_ADD_SHOWHIDE_BUTTON)) // FIXME Warning this feature rely on an external js file that may be removed. Using native js function document.cookie should be better + { + print $langs->trans('ShowMarginInfos').' : '; + $hidemargininfos = $_COOKIE['DOLUSER_MARGININFO_HIDE_SHOW']; + print ''.img_picto($langs->trans("Disabled"),'switch_off').''; + print ''.img_picto($langs->trans("Enabled"),'switch_on').''; - print ''; - if (!empty($hidemargininfos)) print ''; - - print ''; + print ''; + if (!empty($hidemargininfos)) print ''; + } + + print '
'; print ''; - print ''; - print ''; + print ''; + print ''; if ($conf->global->MARGIN_TYPE == "1") - print ''; + print ''; else - print ''; - print ''; + print ''; + print ''; if (! empty($conf->global->DISPLAY_MARGIN_RATES)) - print ''; + print ''; if (! empty($conf->global->DISPLAY_MARK_RATES)) - print ''; + print ''; print ''; if (! empty($conf->product->enabled)) diff --git a/htdocs/core/class/html.formadmin.class.php b/htdocs/core/class/html.formadmin.class.php index 042474781d7..30ecadedb55 100644 --- a/htdocs/core/class/html.formadmin.class.php +++ b/htdocs/core/class/html.formadmin.class.php @@ -53,9 +53,10 @@ class FormAdmin * @param array $filter Array of keys to exclude in list * @param int $showempty Add empty value * @param int $showwarning Show a warning if language is not complete + * @param int $disabled Disable edit of select * @return string Return HTML select string with list of languages */ - function select_language($selected='',$htmlname='lang_id',$showauto=0,$filter=0,$showempty=0,$showwarning=0) + function select_language($selected='',$htmlname='lang_id',$showauto=0,$filter=0,$showempty=0,$showwarning=0,$disabled=0) { global $langs; @@ -63,7 +64,7 @@ class FormAdmin $out=''; - $out.= ''; if ($showempty) { $out.= '
'.$langs->trans('Margins').''.$langs->trans('SellingPrice').''.$langs->trans('Margins').''.$langs->trans('SellingPrice').''.$langs->trans('BuyingPrice').''.$langs->trans('BuyingPrice').''.$langs->trans('CostPrice').''.$langs->trans('Margin').''.$langs->trans('CostPrice').''.$langs->trans('Margin').''.$langs->trans('MarginRate').''.$langs->trans('MarginRate').''.$langs->trans('MarkRate').''.$langs->trans('MarkRate').'
'; print ''; // PMP print ''; // Ditto : Show PMP from movement or from product + // Value purchase print ''; // Ditto : Show PMP from movement or from product // Sell price print ''; // Ditto : Show PMP from movement or from product + // Value sell print ''; // Ditto : Show PMP from movement or from product else print $langs->trans("Variable"); @@ -669,6 +671,7 @@ print ''; print ''; +// Value purchase print ''; @@ -676,6 +679,7 @@ print ''; +// Value to sell print ''; print ''; print ''; // Taille max des listes @@ -190,7 +190,7 @@ if ($action == 'edit') print ''; print ''; print ''; print ''; diff --git a/htdocs/user/perms.php b/htdocs/user/perms.php index f9dbb54f8f4..b63b3e65ffc 100644 --- a/htdocs/user/perms.php +++ b/htdocs/user/perms.php @@ -276,7 +276,7 @@ print '
'; diff --git a/htdocs/install/upgrade.php b/htdocs/install/upgrade.php old mode 100755 new mode 100644 diff --git a/htdocs/install/upgrade2.php b/htdocs/install/upgrade2.php old mode 100755 new mode 100644 diff --git a/htdocs/langs/en_US/admin.lang b/htdocs/langs/en_US/admin.lang index a524ff8a5fe..af61e62c31c 100644 --- a/htdocs/langs/en_US/admin.lang +++ b/htdocs/langs/en_US/admin.lang @@ -437,8 +437,8 @@ Module52Name=Stocks Module52Desc=Stock management (products) Module53Name=Services Module53Desc=Service management -Module54Name=Contracts -Module54Desc=Contract and service management +Module54Name=Contracts/Subscriptions +Module54Desc=Management of contracts (services or reccuring subscriptions) Module55Name=Barcodes Module55Desc=Barcode management Module56Name=Telephony @@ -475,8 +475,8 @@ Module320Name=RSS Feed Module320Desc=Add RSS feed inside Dolibarr screen pages Module330Name=Bookmarks Module330Desc=Bookmark management -Module400Name=Projects -Module400Desc=Project management inside other modules +Module400Name=Projects/Opportunity +Module400Desc=Management of projects or opportunity. You can then assign all other elements (invoice, order, proposal, intervention, ...) to this projects Module410Name=Webcalendar Module410Desc=Webcalendar integration Module500Name=Special expenses (tax, social contributions, dividends) @@ -606,11 +606,11 @@ Permission151=Read standing orders Permission152=Create/modify a standing orders request Permission153=Transmission standing orders receipts Permission154=Credit/refuse standing orders receipts -Permission161=Read contracts -Permission162=Create/modify contracts -Permission163=Activate a service of a contract -Permission164=Disable a service of a contract -Permission165=Delete contracts +Permission161=Read contracts/subscriptions +Permission162=Create/modify contracts/subscriptions +Permission163=Activate a service/subscription of a contract +Permission164=Disable a service/subscription of a contract +Permission165=Delete contracts/subscriptions Permission171=Read trips and expenses (own and his subordinates) Permission172=Create/modify trips and expenses Permission173=Delete trips and expenses @@ -672,7 +672,7 @@ Permission300=Read bar codes Permission301=Create/modify bar codes Permission302=Delete bar codes Permission311=Read services -Permission312=Assign service to contract +Permission312=Assign service/subscription to contract Permission331=Read bookmarks Permission332=Create/modify bookmarks Permission333=Delete bookmarks @@ -702,8 +702,8 @@ Permission701=Read donations Permission702=Create/modify donations Permission703=Delete donations Permission1001=Read stocks -Permission1002=Create/modify stocks -Permission1003=Delete stocks +Permission1002=Create/modify warehouses +Permission1003=Delete warehouses Permission1004=Read stock movements Permission1005=Create/modify stock movements Permission1101=Read delivery orders @@ -1039,7 +1039,6 @@ YesInSummer=Yes in summer OnlyFollowingModulesAreOpenedToExternalUsers=Note, only following modules are opened to external users (whatever are permission of such users): SuhosinSessionEncrypt=Session storage encrypted by Suhosin ConditionIsCurrently=Condition is currently %s -TestNotPossibleWithCurrentBrowsers=Automatic detection not possible YouUseBestDriver=You use driver %s that is best driver available currently. YouDoNotUseBestDriver=You use drive %s but driver %s is recommended. NbOfProductIsLowerThanNoPb=You have only %s products/services into database. This does not required any particular optimization. @@ -1161,7 +1160,7 @@ FicheinterNumberingModules=Intervention numbering models TemplatePDFInterventions=Intervention card documents models WatermarkOnDraftInterventionCards=Watermark on intervention card documents (none if empty) ##### Contracts ##### -ContractsSetup=Contracts module setup +ContractsSetup=Contracts/Subscriptions module setup ContractsNumberingModules=Contracts numbering modules TemplatePDFContracts=Contracts documents models FreeLegalTextOnContracts=Free text on contracts @@ -1416,8 +1415,9 @@ OSCommerceTestOk=Connection to server '%s' on database '%s' with user '%s' succe OSCommerceTestKo1=Connection to server '%s' succeed but database '%s' could not be reached. OSCommerceTestKo2=Connection to server '%s' with user '%s' failed. ##### Stock ##### -StockSetup=Configuration module stock -UserWarehouse=Use user personal stocks +StockSetup=Warehouse module setup +UserWarehouse=Use user personal warehouses +IfYouUsePointOfSaleCheckModule=If you use a Point of Sale module (POS module provided by default or another external module), this setup may be ignored by your Point Of Sale module. Most point of sales modules are designed to create immediatly an invoice and decrease stock by default whatever are options here. So, if you need or not to have a stock decrease when registering a sell from your Point Of Sale, check also your POS module set up. ##### Menu ##### MenuDeleted=Menu deleted TreeMenu=Tree menus @@ -1482,11 +1482,14 @@ ClickToDialDesc=This module allows to add an icon after phone numbers. A click o ##### Point Of Sales (CashDesk) ##### CashDesk=Point of sales CashDeskSetup=Point of sales module setup -CashDeskThirdPartyForSell=Generic third party to use for sells +CashDeskThirdPartyForSell=Default generic third party to use for sells CashDeskBankAccountForSell=Default account to use to receive cash payments CashDeskBankAccountForCheque= Default account to use to receive payments by cheque CashDeskBankAccountForCB= Default account to use to receive payments by credit cards -CashDeskIdWareHouse=Warehouse to use for sells +CashDeskDoNotDecreaseStock=Disable stock decrease when a sell is done from Point of Sale +CashDeskIdWareHouse=Force and restrict warehouse to use for stock decrease +StockDecreaseForPointOfSaleDisabled=Stock decrease from Point Of Sale disabled +CashDeskYouDidNotDisableStockDecease=You did not disable stock decrease when making a sell from Point Of Sale. So a warehouse is required. ##### Bookmark ##### BookmarkSetup=Bookmark module setup BookmarkDesc=This module allows you to manage bookmarks. You can also add shortcuts to any Dolibarr pages or externale web sites on your left menu. @@ -1544,7 +1547,6 @@ MAIN_APPLICATION_TITLE=Force visible name of application (warning: setting your NbMajMin=Minimum number of uppercase characters NbNumMin=Minimum number of numeric characters NbSpeMin=Minimum number of special characters -NbSpeMin=Minimum number of special characters NbIteConsecutive=Maximum number of repeating same characters NoAmbiCaracAutoGeneration=Do not use ambiguous characters ("1","l","i","|","0","O") for automatic generation SalariesSetup=Setup of module salaries diff --git a/htdocs/langs/en_US/agenda.lang b/htdocs/langs/en_US/agenda.lang index 45f5017671f..5781d5e3ac0 100644 --- a/htdocs/langs/en_US/agenda.lang +++ b/htdocs/langs/en_US/agenda.lang @@ -41,9 +41,10 @@ AutoActions= Automatic filling AgendaAutoActionDesc= Define here events for which you want Dolibarr to create automatically an event in agenda. If nothing is checked (by default), only manual actions will be included in agenda. AgendaSetupOtherDesc= This page provides options to allow export of your Dolibarr events into an external calendar (thunderbird, google calendar, ...) AgendaExtSitesDesc=This page allows to declare external sources of calendars to see their events into Dolibarr agenda. -ActionsEvents= Events for which Dolibarr will create an action in agenda automatically -PropalValidatedInDolibarr= Proposal %s validated -InvoiceValidatedInDolibarr= Invoice %s validated +ActionsEvents=Events for which Dolibarr will create an action in agenda automatically +PropalValidatedInDolibarr=Proposal %s validated +InvoiceValidatedInDolibarr=Invoice %s validated +InvoiceValidatedInDolibarrFromPos=Invoice %s validated from POS InvoiceBackToDraftInDolibarr=Invoice %s go back to draft status InvoiceDeleteDolibarr=Invoice %s deleted OrderValidatedInDolibarr= Order %s validated diff --git a/htdocs/langs/en_US/bills.lang b/htdocs/langs/en_US/bills.lang index 5c16e18e4cf..9429a682857 100644 --- a/htdocs/langs/en_US/bills.lang +++ b/htdocs/langs/en_US/bills.lang @@ -137,8 +137,6 @@ BillFrom=From BillTo=To ActionsOnBill=Actions on invoice NewBill=New invoice -Prélèvements=Standing order -Prélèvements=Standing orders LastBills=Last %s invoices LastCustomersBills=Last %s customers invoices LastSuppliersBills=Last %s suppliers invoices @@ -219,7 +217,6 @@ NoInvoice=No invoice ClassifyBill=Classify invoice SupplierBillsToPay=Suppliers invoices to pay CustomerBillsUnpaid=Unpaid customers invoices -DispenseMontantLettres=The bill drafted by mechanographical are exempt from the order in letters DispenseMontantLettres=The written invoices through mecanographic procedures are dispensed by the order in letters NonPercuRecuperable=Non-recoverable SetConditions=Set payment terms diff --git a/htdocs/langs/en_US/categories.lang b/htdocs/langs/en_US/categories.lang index 0fe3b72b81f..7a3c7f0c288 100644 --- a/htdocs/langs/en_US/categories.lang +++ b/htdocs/langs/en_US/categories.lang @@ -101,9 +101,6 @@ CatSupLinks=Links between suppliers and categories CatCusLinks=Links between customers/prospects and categories CatProdLinks=Links between products/services and categories CatMemberLinks=Links between members and categories -CatProdLinks=Products -CatCusLinks=Customer/Prospects -CatSupLinks=Suppliers DeleteFromCat=Remove from category DeletePicture=Picture delete ConfirmDeletePicture=Confirm picture deletion? diff --git a/htdocs/langs/en_US/contracts.lang b/htdocs/langs/en_US/contracts.lang index e06aadef531..511516dc755 100644 --- a/htdocs/langs/en_US/contracts.lang +++ b/htdocs/langs/en_US/contracts.lang @@ -1,7 +1,7 @@ # Dolibarr language file - Source file is en_US - contracts ContractsArea=Contracts area ListOfContracts=List of contracts -LastContracts=Last %s modified contracts +LastModifiedContracts=Last %s modified contracts AllContracts=All contracts ContractCard=Contract card ContractStatus=Contract status diff --git a/htdocs/langs/en_US/cron.lang b/htdocs/langs/en_US/cron.lang index 69cf8e0491c..5432c5b5b52 100644 --- a/htdocs/langs/en_US/cron.lang +++ b/htdocs/langs/en_US/cron.lang @@ -18,9 +18,8 @@ CronExplainHowToRunUnix=On Unix environment you should use crontab to run Comman CronExplainHowToRunWin=On Microsoft(tm) Windows environement you can use Scheduled task tools to run Command line each minutes # Menu CronJobs=Scheduled jobs -CronListActive= List of active jobs -CronListInactive= List of disabled jobs -CronListActive= List of scheduled jobs +CronListActive=List of active/scheduled jobs +CronListInactive=List of disabled jobs # Page list CronDateLastRun=Last run CronLastOutput=Last run output diff --git a/htdocs/langs/en_US/mails.lang b/htdocs/langs/en_US/mails.lang index 44027b4cc20..6fffc35bb08 100644 --- a/htdocs/langs/en_US/mails.lang +++ b/htdocs/langs/en_US/mails.lang @@ -115,7 +115,7 @@ SentBy=Sent by MailingNeedCommand=For security reason, sending an emailing is better when performed from command line. If you have one, ask your server administrator to launch the following command to send the emailing to all recipients: MailingNeedCommand2=You can however send them online by adding parameter MAILING_LIMIT_SENDBYWEB with value of max number of emails you want to send by session. For this, go on Home - Setup - Other. ConfirmSendingEmailing=If you can't or prefer sending them with your www browser, please confirm you are sure you want to send emailing now from your browser ? -LimitSendingEmailing=Note: On line sending of emailings are limited for security and timeout reasons to %s recipients by sending session. +LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, %s recipients at a time for each sending session. TargetsReset=Clear list ToClearAllRecipientsClickHere=Click here to clear the recipient list for this emailing ToAddRecipientsChooseHere=Add recipients by choosing from the lists @@ -136,3 +136,6 @@ SomeNotificationsWillBeSent=%s notifications will be sent by email AddNewNotification=Activate a new email notification target ListOfActiveNotifications=List all active email notification targets ListOfNotificationsDone=List all email notifications sent +MailSendSetupIs=Configuration of email sending has been setup to '%s'. This mode can't be used to send mass emailing. +MailSendSetupIs2=You must first go, with an admin account, into menu %sHome - Setup - EMails%s to change parameter '%s' to use mode '%s'. With this mode, you can enter setup of the SMTP server provided by your Internet Service Provider and use Mass emailing feature. +MailSendSetupIs3=If you have any questions on how to setup your SMTP server, you can ask to %s. diff --git a/htdocs/langs/en_US/orders.lang b/htdocs/langs/en_US/orders.lang index 76986b67621..3eab6893735 100644 --- a/htdocs/langs/en_US/orders.lang +++ b/htdocs/langs/en_US/orders.lang @@ -53,7 +53,7 @@ ShippingExist=A shipment exists DraftOrWaitingApproved=Draft or approved not yet ordered DraftOrWaitingShipped=Draft or validated not yet shipped MenuOrdersToBill=Orders delivered -MenuOrdersToBill2=Orders to bill +MenuOrdersToBill2=Billable orders SearchOrder=Search order SearchACustomerOrder=Search a customer order ShipProduct=Ship product @@ -154,7 +154,6 @@ OrderByPhone=Phone CreateInvoiceForThisCustomer=Bill orders NoOrdersToInvoice=No orders billable CloseProcessedOrdersAutomatically=Classify "Processed" all selected orders. -MenuOrdersToBill2=Billables orders OrderCreation=Order creation Ordered=Ordered OrderCreated=Your orders have been created diff --git a/htdocs/langs/en_US/resource.lang b/htdocs/langs/en_US/resource.lang index 3fbe6e4fb23..d64075dfbf5 100755 --- a/htdocs/langs/en_US/resource.lang +++ b/htdocs/langs/en_US/resource.lang @@ -16,11 +16,8 @@ ResourceType=Resource type ResourceFormLabel_description=Resource description ResourcesLinkedToElement=Resources linked to element -RessourceLineSuccessfullyUpdated=Resource successfully updated -RessourceLineSuccessfullyDeleted=Resource successfully deleted ShowResourcePlanning=Show resource planning -NoResourceInDatabase=No resource in database GotoDate=Go to date ResourceElementPage=Element resources diff --git a/htdocs/langs/en_US/users.lang b/htdocs/langs/en_US/users.lang index c13e3e767bb..9670d002be6 100644 --- a/htdocs/langs/en_US/users.lang +++ b/htdocs/langs/en_US/users.lang @@ -63,7 +63,6 @@ ShowGroup=Show group ShowUser=Show user NonAffectedUsers=Non assigned users UserModified=User modified successfully -GroupModified=Group modified successfully PhotoFile=Photo file UserWithDolibarrAccess=User with Dolibarr access ListOfUsersInGroup=List of users in this group diff --git a/htdocs/langs/en_US/withdrawals.lang b/htdocs/langs/en_US/withdrawals.lang index 35cfa23d9e2..fd4305bbd0b 100644 --- a/htdocs/langs/en_US/withdrawals.lang +++ b/htdocs/langs/en_US/withdrawals.lang @@ -41,14 +41,13 @@ TransMetod=Transmission method Send=Send Lines=Lines StandingOrderReject=Issue a rejection -InvoiceRefused=Invoice refused WithdrawalRefused=Withdrawal refused WithdrawalRefusedConfirm=Are you sure you want to enter a withdrawal rejection for society RefusedData=Date of rejection RefusedReason=Reason for rejection RefusedInvoicing=Billing the rejection NoInvoiceRefused=Do not charge the rejection -InvoiceRefused=Charge the rejection to customer +InvoiceRefused=Invoice refused (Charge the rejection to customer) Status=Status StatusUnknown=Unknown StatusWaiting=Waiting diff --git a/htdocs/main.inc.php b/htdocs/main.inc.php index d248a8c19ff..15f2281cc1f 100644 --- a/htdocs/main.inc.php +++ b/htdocs/main.inc.php @@ -1300,7 +1300,7 @@ function top_htmlhead($head, $title='', $disablejs=0, $disablehead=0, $arrayofjs function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $arrayofjs='', $arrayofcss='', $morequerystring='') { global $user, $conf, $langs, $db; - global $dolibarr_main_authentication; + global $dolibarr_main_authentication, $dolibarr_main_demo; global $hookmanager,$menumanager; // Instantiate hooks of thirdparty module @@ -1410,7 +1410,6 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a $logintext.='>'.$user->login.''; if ($user->societe_id) $logintext.=$companylink; $logintext.=''; - $loginhtmltext.=''.$langs->trans("User").''; $loginhtmltext.='
'.$langs->trans("Name").': '.$user->getFullName($langs); $loginhtmltext.='
'.$langs->trans("Login").': '.$user->login; @@ -1422,9 +1421,9 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a $loginhtmltext.='
'; $loginhtmltext.='
'.$langs->trans("Connection").''; if (! empty($conf->global->MAIN_MODULE_MULTICOMPANY)) $loginhtmltext.='
'.$langs->trans("ConnectedOnMultiCompany").': '.$conf->entity.' (user entity '.$user->entity.')'; + $loginhtmltext.='
'.$langs->trans("AuthenticationMode").': '.$_SESSION["dol_authmode"].(empty($dolibarr_main_demo)?'':' (demo)'); $loginhtmltext.='
'.$langs->trans("ConnectedSince").': '.dol_print_date($user->datelastlogin,"dayhour"); $loginhtmltext.='
'.$langs->trans("PreviousConnexion").': '.dol_print_date($user->datepreviouslogin,"dayhour"); - $loginhtmltext.='
'.$langs->trans("AuthenticationMode").': '.$_SESSION["dol_authmode"]; $loginhtmltext.='
'.$langs->trans("CurrentTheme").': '.$conf->theme; $loginhtmltext.='
'.$langs->trans("CurrentMenuManager").': '.$menumanager->name; $s=picto_from_langcode($langs->getDefaultLang()); diff --git a/htdocs/product/stock/card.php b/htdocs/product/stock/card.php index 74cb33e02e7..6fd6d834497 100644 --- a/htdocs/product/stock/card.php +++ b/htdocs/product/stock/card.php @@ -45,6 +45,8 @@ $id = GETPOST("id",'int'); if (! $sortfield) $sortfield="p.ref"; if (! $sortorder) $sortorder="DESC"; +$backtopage=GETPOST("backtopage"); + // Security check $result=restrictedArea($user,'stock'); @@ -71,16 +73,29 @@ if ($action == 'add' && $user->rights->stock->creer) $object->town = GETPOST("town"); $object->country_id = GETPOST("country_id"); - if (! empty($object->libelle)) { + if (! empty($object->libelle)) + { $id = $object->create($user); if ($id > 0) { - header("Location: card.php?id=".$id); - exit; + setEventMessage($langs->trans("RecordSaved")); + + if (! empty($backtopage)) + { + header("Location: ".$backtopage); + exit; + } + else + { + header("Location: card.php?id=".$id); + exit; + } + } + else + { + $action = 'create'; + setEventMessage($object->error, 'errors'); } - - $action = 'create'; - setEventMessage($object->error, 'errors'); } else { setEventMessage($langs->trans("ErrorWarehouseRefRequired"), 'errors'); @@ -164,7 +179,10 @@ if ($action == 'create') print "
\n"; print ''; print ''; - + print ''; + + dol_fiche_head(); + print ''; // Ref @@ -206,9 +224,9 @@ if ($action == 'create') print '
'; - print '
'; - print ''; - print '
'; + dol_fiche_end(); + + print '
'; print '
'; } diff --git a/htdocs/product/stock/product.php b/htdocs/product/stock/product.php index 7ccc75bc357..476c394ecc1 100644 --- a/htdocs/product/stock/product.php +++ b/htdocs/product/stock/product.php @@ -633,12 +633,14 @@ if ($resql) print '
'.$obj->reel.($obj->reel<0?' '.img_warning():'').''.(price2num($obj->pmp)?price2num($obj->pmp,'MU'):'').''.(price2num($obj->pmp)?price(price2num($obj->pmp*$obj->reel,'MT')):'').''; if (empty($conf->global->PRODUIT_MULTI_PRICES)) print price(price2num($product->price,'MU'),1); else print $langs->trans("Variable"); print ''; if (empty($conf->global->PRODUIT_MULTI_PRICES)) print price(price2num($product->price*$obj->reel,'MT'),1).''.$total.''; print ($totalwithpmp?price($totalvalue/$totalwithpmp):' '); print ''; print price(price2num($totalvalue,'MT'),1); print ''; if (empty($conf->global->PRODUIT_MULTI_PRICES)) print ($total?price($totalvaluesell/$total,1):' '); else print $langs->trans("Variable"); print ''; if (empty($conf->global->PRODUIT_MULTI_PRICES)) print price(price2num($totalvaluesell,'MT'),1); else print $langs->trans("Variable"); diff --git a/htdocs/theme/eldy/style.css.php b/htdocs/theme/eldy/style.css.php index 5ac8a76fb53..c4d933d4940 100644 --- a/htdocs/theme/eldy/style.css.php +++ b/htdocs/theme/eldy/style.css.php @@ -1958,6 +1958,10 @@ input.liste_titre { background: none; } +.margintable td { + border: 0px !important; +} + /* Disable shadows */ .noshadow { -moz-box-shadow: 0px 0px 0px #DDD !important; diff --git a/htdocs/user/param_ihm.php b/htdocs/user/param_ihm.php index 3bca4cbee47..860e74c5567 100644 --- a/htdocs/user/param_ihm.php +++ b/htdocs/user/param_ihm.php @@ -179,10 +179,10 @@ if ($action == 'edit') print ($conf->global->MAIN_LANG_DEFAULT=='auto'?$langs->trans("AutoDetectLang"):$langs->trans("Language_".$conf->global->MAIN_LANG_DEFAULT)); print 'conf->MAIN_LANG_DEFAULT)?" checked":""); - print ! empty($dolibarr_main_demo)?' disabled="disabled"':''; // Disabled for demo + print empty($dolibarr_main_demo)?'':' disabled="disabled"'; // Disabled for demo print '> '.$langs->trans("UsePersonalValue").''; - print $formadmin->select_language((! empty($fuser->conf->MAIN_LANG_DEFAULT)?$fuser->conf->MAIN_LANG_DEFAULT:''),'main_lang_default',1); + print $formadmin->select_language((! empty($fuser->conf->MAIN_LANG_DEFAULT)?$fuser->conf->MAIN_LANG_DEFAULT:''),'main_lang_default',1,null,0,0,(! empty($dolibarr_main_demo))); print '
'.$langs->trans("MaxSizeList").''.$conf->global->MAIN_SIZE_LISTE_LIMIT.'conf->MAIN_SIZE_LISTE_LIMIT)?" checked":""); - print ! empty($dolibarr_main_demo)?' disabled="disabled"':''; // Disabled for demo + print empty($dolibarr_main_demo)?'':' disabled="disabled"'; // Disabled for demo print '> '.$langs->trans("UsePersonalValue").'

'; if ($user->admin) print info_admin($langs->trans("WarningOnlyPermissionOfActivatedModules"), 0, 1).'
'; // Show warning about external users -if (empty($user->societe_id)) print showModulesExludedForExternal($modules).'

'."\n"; +if (empty($user->societe_id)) print info_admin(showModulesExludedForExternal($modules)).'

'."\n"; // For multicompany transversal mode // TODO Place a hook here diff --git a/test/phpunit/FunctionsLibTest.php b/test/phpunit/FunctionsLibTest.php index af5f3393672..0ace96c6719 100755 --- a/test/phpunit/FunctionsLibTest.php +++ b/test/phpunit/FunctionsLibTest.php @@ -824,32 +824,32 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase $this->assertEquals(dol_nl2br($string, 1, 1), "a
a"); } - /** - * testDolPrice2Num - * - * @return boolean - */ - public function testDolPrice2Num() + /** + * testDolPrice2Num + * + * @return boolean + */ + public function testDolPrice2Num() { - $this->assertEquals(1000, price2num('1 000.0')); - $this->assertEquals(1000, price2num('1 000','MT')); - $this->assertEquals(1000, price2num('1 000','MU')); + $this->assertEquals(1000, price2num('1 000.0')); + $this->assertEquals(1000, price2num('1 000','MT')); + $this->assertEquals(1000, price2num('1 000','MU')); $this->assertEquals(1000.123456, price2num('1 000.123456')); // Round down - $this->assertEquals(1000.12, price2num('1 000.123452','MT')); - $this->assertEquals(1000.12345, price2num('1 000.123452','MU'),"Test MU"); + $this->assertEquals(1000.12, price2num('1 000.123452','MT')); + $this->assertEquals(1000.12345, price2num('1 000.123452','MU'),"Test MU"); - // Round up - $this->assertEquals(1000.13, price2num('1 000.125456','MT')); - $this->assertEquals(1000.12546, price2num('1 000.125456','MU'),"Test MU"); + // Round up + $this->assertEquals(1000.13, price2num('1 000.125456','MT')); + $this->assertEquals(1000.12546, price2num('1 000.125456','MU'),"Test MU"); // Text can't be converted $this->assertEquals('12.4$',price2num('12.4$')); - $this->assertEquals('12r.4$',price2num('12r.4$')); + $this->assertEquals('12r.4$',price2num('12r.4$')); - return true; + return true; } }