Merge branch '3.9' of github.com:Dolibarr/dolibarr into 3.9_dolibarr
This commit is contained in:
commit
ef7a334414
55
ChangeLog
55
ChangeLog
@ -11,6 +11,61 @@ during migration.
|
|||||||
Upgrading to any other version or any other database system is abolutely required BEFORE trying
|
Upgrading to any other version or any other database system is abolutely required BEFORE trying
|
||||||
make a Dolibarr upgrade.
|
make a Dolibarr upgrade.
|
||||||
|
|
||||||
|
|
||||||
|
***** ChangeLog for 3.9.4 compared to 3.9.3 *****
|
||||||
|
FIX: #2853
|
||||||
|
FIX: #3128
|
||||||
|
FIX: #4447
|
||||||
|
FIX: #5128 if create method return duplicated code error not use GETPOST in order to get a new code
|
||||||
|
FIX: #5340
|
||||||
|
FIX: #5473
|
||||||
|
FIX: #5474 Country_id of "Don" object is still empty
|
||||||
|
FIX: #5534
|
||||||
|
FIX: #5535 bad dependency.
|
||||||
|
FIX: #5537 AJAX project search does not work properly
|
||||||
|
FIX: #5540 getFormMail is not registered as addReplace hook
|
||||||
|
FIX: #5544 Disabled Contact still appear in lists to send emails
|
||||||
|
FIX: #5549 getNomUrl tooltips show Order info even if user has no rights to read them
|
||||||
|
FIX: #5568
|
||||||
|
FIX: #5594
|
||||||
|
FIX: #5629 PgSQL Interger string stylish error
|
||||||
|
FIX: #5651
|
||||||
|
FIX: #5660
|
||||||
|
FIX: #5853 $conf->global->$calc==0 || $conf->global->$calc==1
|
||||||
|
FIX: #5907
|
||||||
|
FIX: #5966 Bug: getNomUrl tooltips show Proposal info even if user has no rights to read them
|
||||||
|
FIX: #6051
|
||||||
|
FIX: #6088
|
||||||
|
FIX: Can correct stock of lot using eatby or sell by date
|
||||||
|
FIX: Can make a movement on "out of sell" products
|
||||||
|
FIX: cannot update bank account on invoice if module order not activated
|
||||||
|
FIX: Can't create withdrawal document
|
||||||
|
FIX: delete contract extrafields on contract deletion
|
||||||
|
FIX: Direction of movement lost if an error occurs
|
||||||
|
FIX: Error when CATEGORIE_RECURSIV_ADD is enabled and new category is daughter of an already linked to object
|
||||||
|
FIX: export extrafields must not include separe type
|
||||||
|
FIX: External user must not be able to edit its discounts
|
||||||
|
FIX: Failed to export contact categories with contact extra fields
|
||||||
|
FIX: header title in commercial area
|
||||||
|
FIX: HT and TTC price should always be displayed together
|
||||||
|
FIX: incoterms
|
||||||
|
FIX: incoterms do not output into crabe invoice PDF
|
||||||
|
FIX: in PgSQL no quote "word style" is permitted around column name
|
||||||
|
FIX: Introduce hidden option MAIL_PREFIX_FOR_EMAIL_ID to solve pb of tracking email.
|
||||||
|
FIX: margin tab on customer card must filter on current entity invoices
|
||||||
|
FIX: missing column into SQL on thridparty list
|
||||||
|
FIX: only show projects of related third if external user
|
||||||
|
FIX: PgSQL Module Ressource list crash #5637
|
||||||
|
FIX: php Strict
|
||||||
|
FIX: Regression when deleting product
|
||||||
|
FIX: Security to restrict email sending was not efficient
|
||||||
|
FIX: tag for date rfc in odt substitution
|
||||||
|
FIX: Update intervention lline crash with PgSQL
|
||||||
|
FIX: update limit stock on product stock
|
||||||
|
FIX: vat dictionary should allow enter and edit multiple values for localtaxes, separated by: (ex -19:-15)
|
||||||
|
FIX: wrong test on dict.php
|
||||||
|
|
||||||
|
|
||||||
***** ChangeLog for 3.9.3 compared to 3.9.2 *****
|
***** ChangeLog for 3.9.3 compared to 3.9.2 *****
|
||||||
FIX: #4383 $userid not defined
|
FIX: #4383 $userid not defined
|
||||||
FIX: #4448 $filebonprev is not used, $this->filename now
|
FIX: #4448 $filebonprev is not used, $this->filename now
|
||||||
|
|||||||
@ -222,7 +222,13 @@ $dolibarr_main_prod='0';
|
|||||||
# $dolibarr_main_limit_users='0';
|
# $dolibarr_main_limit_users='0';
|
||||||
|
|
||||||
# dolibarr_mailing_limit_sendbyweb
|
# dolibarr_mailing_limit_sendbyweb
|
||||||
# Can set a limit for mailing send by web, can be used for a restricted mode.
|
# Can set a limit for mailing send by web. This overwrite database value. Can be used to restrict on OS level.
|
||||||
# Default value: 0 (use database value if exist)
|
# Default value: 0 (use database value if exist)
|
||||||
# Examples:
|
# Examples:
|
||||||
# $dolibarr_mailing_limit_sendbyweb='0';
|
# $dolibarr_mailing_limit_sendbyweb='0';
|
||||||
|
|
||||||
|
# dolibarr_mailing_limit_sendbycli
|
||||||
|
# Can set a limit for mailing send by cli. This overwrite database value. Can be used to restrict on OS level.
|
||||||
|
# Default value: 0 (use database value if exist)
|
||||||
|
# Examples:
|
||||||
|
# $dolibarr_mailing_limit_sendbycli='0';
|
||||||
|
|||||||
@ -1292,8 +1292,6 @@ if ($id)
|
|||||||
}
|
}
|
||||||
else if ($fieldlist[$field]=='taux') {
|
else if ($fieldlist[$field]=='taux') {
|
||||||
$valuetoshow = price($valuetoshow, 0, $langs, 0, 0);
|
$valuetoshow = price($valuetoshow, 0, $langs, 0, 0);
|
||||||
if ($obj->localtax1 == 0)
|
|
||||||
$valuetoshow = '';
|
|
||||||
$align="right";
|
$align="right";
|
||||||
}
|
}
|
||||||
else if (in_array($fieldlist[$field],array('recuperableonly')))
|
else if (in_array($fieldlist[$field],array('recuperableonly')))
|
||||||
|
|||||||
@ -90,7 +90,8 @@ $configfileparameters=array(
|
|||||||
'?dolibarr_font_DOL_DEFAULT_TTF_BOLD',
|
'?dolibarr_font_DOL_DEFAULT_TTF_BOLD',
|
||||||
'separator',
|
'separator',
|
||||||
'?dolibarr_mailing_limit_sendbyweb',
|
'?dolibarr_mailing_limit_sendbyweb',
|
||||||
'?dolibarr_strict_mode'
|
'?dolibarr_mailing_limit_sendbycli',
|
||||||
|
'?dolibarr_strict_mode'
|
||||||
);
|
);
|
||||||
$configfilelib=array(
|
$configfilelib=array(
|
||||||
// 'separator',
|
// 'separator',
|
||||||
|
|||||||
@ -284,7 +284,8 @@ $configfileparameters=array(
|
|||||||
'separator4' => '',
|
'separator4' => '',
|
||||||
'dolibarr_main_prod' => 'Production mode (Hide all error messages)',
|
'dolibarr_main_prod' => 'Production mode (Hide all error messages)',
|
||||||
'?dolibarr_mailing_limit_sendbyweb' => 'Limit nb of email sent by page',
|
'?dolibarr_mailing_limit_sendbyweb' => 'Limit nb of email sent by page',
|
||||||
'?dolibarr_strict_mode' => 'Strict mode is on/off',
|
'?dolibarr_mailing_limit_sendbycli' => 'Limit nb of email sent by cli',
|
||||||
|
'?dolibarr_strict_mode' => 'Strict mode is on/off',
|
||||||
'?dolibarr_pdf_force_fpdf' => 'Force fpdf usage to generate PDF'
|
'?dolibarr_pdf_force_fpdf' => 'Force fpdf usage to generate PDF'
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -928,7 +928,14 @@ if (count($listofextcals))
|
|||||||
// Complete $eventarray with events coming from external module
|
// Complete $eventarray with events coming from external module
|
||||||
$parameters=array(); $object=null;
|
$parameters=array(); $object=null;
|
||||||
$reshook=$hookmanager->executeHooks('getCalendarEvents',$parameters,$object,$action);
|
$reshook=$hookmanager->executeHooks('getCalendarEvents',$parameters,$object,$action);
|
||||||
if (! empty($hookmanager->resArray['eventarray'])) $eventarray=array_merge($eventarray, $hookmanager->resArray['eventarray']);
|
if (! empty($hookmanager->resArray['eventarray'])) {
|
||||||
|
foreach ($hookmanager->resArray['eventarray'] as $keyDate => $events) {
|
||||||
|
if (!isset($eventarray[$keyDate])) {
|
||||||
|
$eventarray[$keyDate]=array();
|
||||||
|
}
|
||||||
|
$eventarray[$keyDate]=array_merge($eventarray[$keyDate], $events);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -761,10 +761,12 @@ else
|
|||||||
$sendingmode=$conf->global->MAIN_MAIL_SENDMODE;
|
$sendingmode=$conf->global->MAIN_MAIL_SENDMODE;
|
||||||
if (empty($sendingmode)) $sendingmode='mail'; // If not defined, we use php mail function
|
if (empty($sendingmode)) $sendingmode='mail'; // If not defined, we use php mail function
|
||||||
|
|
||||||
|
// MAILING_NO_USING_PHPMAIL may be defined or not
|
||||||
|
// MAILING_LIMIT_SENDBYWEB is always defined to something != 0, MAILING_LIMIT_SENDBYCLI may be defined ot not.
|
||||||
if (! empty($conf->global->MAILING_NO_USING_PHPMAIL) && $sendingmode == 'mail')
|
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.
|
// 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.
|
// You ensure that every user is using its own SMTP server when using the mass emailing module.
|
||||||
$linktoadminemailbefore='<a href="'.DOL_URL_ROOT.'/admin/mails.php">';
|
$linktoadminemailbefore='<a href="'.DOL_URL_ROOT.'/admin/mails.php">';
|
||||||
$linktoadminemailend='</a>';
|
$linktoadminemailend='</a>';
|
||||||
setEventMessages($langs->trans("MailSendSetupIs", $listofmethods[$sendingmode]), null, 'warnings');
|
setEventMessages($langs->trans("MailSendSetupIs", $listofmethods[$sendingmode]), null, 'warnings');
|
||||||
@ -772,19 +774,27 @@ else
|
|||||||
if (! empty($conf->global->MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS)) setEventMessages($langs->trans("MailSendSetupIs3", $conf->global->MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS), null, 'warnings');
|
if (! empty($conf->global->MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS)) setEventMessages($langs->trans("MailSendSetupIs3", $conf->global->MAILING_SMTP_SETUP_EMAILS_FOR_QUESTIONS), null, 'warnings');
|
||||||
$_GET["action"]='';
|
$_GET["action"]='';
|
||||||
}
|
}
|
||||||
else if (empty($conf->global->MAILING_LIMIT_SENDBYWEB))
|
else if ($conf->global->MAILING_LIMIT_SENDBYWEB == '-1')
|
||||||
{
|
{
|
||||||
// Pour des raisons de securite, on ne permet pas cette fonction via l'IHM,
|
if (! empty($conf->global->MAILING_LIMIT_WARNING_PHPMAIL) && $sendingmode == 'mail') setEventMessages($conf->global->MAILING_LIMIT_WARNING_PHPMAIL, null, 'warnings');
|
||||||
// on affiche donc juste un message
|
if (! empty($conf->global->MAILING_LIMIT_WARNING_NOPHPMAIL) && $sendingmode != 'mail') setEventMessages($conf->global->MAILING_LIMIT_WARNING_NOPHPMAIL, null, 'warnings');
|
||||||
setEventMessages($langs->trans("MailingNeedCommand"), null, 'warnings');
|
|
||||||
|
// The feature is forbidden from GUI, we show just message to use from command line.
|
||||||
|
setEventMessages($langs->trans("MailingNeedCommand"), null, 'warnings');
|
||||||
setEventMessages('<textarea cols="60" rows="'.ROWS_1.'" wrap="soft">php ./scripts/emailings/mailing-send.php '.$object->id.'</textarea>', null, 'warnings');
|
setEventMessages('<textarea cols="60" rows="'.ROWS_1.'" wrap="soft">php ./scripts/emailings/mailing-send.php '.$object->id.'</textarea>', null, 'warnings');
|
||||||
setEventMessages($langs->trans("MailingNeedCommand2"), null, 'warnings');
|
if ($conf->file->mailing_limit_sendbyweb != '-1') // MAILING_LIMIT_SENDBYWEB was set to -1 in database, but it is allowed ot increase it.
|
||||||
|
{
|
||||||
|
setEventMessages($langs->trans("MailingNeedCommand2"), null, 'warnings'); // You can send online with constant...
|
||||||
|
}
|
||||||
$_GET["action"]='';
|
$_GET["action"]='';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$text='';
|
if (! empty($conf->global->MAILING_LIMIT_WARNING_PHPMAIL) && $sendingmode == 'mail') setEventMessages($conf->global->MAILING_LIMIT_WARNING_PHPMAIL, null, 'warnings');
|
||||||
if ($conf->file->mailing_limit_sendbyweb == 0)
|
if (! empty($conf->global->MAILING_LIMIT_WARNING_NOPHPMAIL) && $sendingmode != 'mail') setEventMessages($conf->global->MAILING_LIMIT_WARNING_NOPHPMAIL, null, 'warnings');
|
||||||
|
|
||||||
|
$text='';
|
||||||
|
if ($conf->global->MAILING_LIMIT_SENDBYCLI >= 0)
|
||||||
{
|
{
|
||||||
$text.=$langs->trans("MailingNeedCommand");
|
$text.=$langs->trans("MailingNeedCommand");
|
||||||
$text.='<br><textarea cols="60" rows="'.ROWS_2.'" wrap="soft">php ./scripts/emailings/mailing-send.php '.$object->id.' '.$user->login.'</textarea>';
|
$text.='<br><textarea cols="60" rows="'.ROWS_2.'" wrap="soft">php ./scripts/emailings/mailing-send.php '.$object->id.' '.$user->login.'</textarea>';
|
||||||
|
|||||||
@ -2734,20 +2734,33 @@ class Propal extends CommonObject
|
|||||||
*/
|
*/
|
||||||
function getNomUrl($withpicto=0,$option='', $get_params='')
|
function getNomUrl($withpicto=0,$option='', $get_params='')
|
||||||
{
|
{
|
||||||
global $langs, $conf;
|
global $langs, $conf, $user;
|
||||||
|
|
||||||
$result='';
|
$result='';
|
||||||
$label = '<u>' . $langs->trans("ShowPropal") . '</u>';
|
$label = '';
|
||||||
if (! empty($this->ref))
|
|
||||||
$label.= '<br><b>'.$langs->trans('Ref').':</b> '.$this->ref;
|
if ($user->rights->propal->lire) {
|
||||||
if (! empty($this->ref_client))
|
$label .= '<u>'.$langs->trans("ShowPropal").'</u>';
|
||||||
$label.= '<br><b>'.$langs->trans('RefCustomer').':</b> '.$this->ref_client;
|
if (!empty($this->ref)) {
|
||||||
if (! empty($this->total_ht))
|
$label .= '<br><b>'.$langs->trans('Ref').':</b> '.$this->ref;
|
||||||
$label.= '<br><b>' . $langs->trans('AmountHT') . ':</b> ' . price($this->total_ht, 0, $langs, 0, -1, -1, $conf->currency);
|
}
|
||||||
if (! empty($this->total_tva))
|
if (!empty($this->ref_client)) {
|
||||||
$label.= '<br><b>' . $langs->trans('VAT') . ':</b> ' . price($this->total_tva, 0, $langs, 0, -1, -1, $conf->currency);
|
$label .= '<br><b>'.$langs->trans('RefCustomer').':</b> '.$this->ref_client;
|
||||||
if (! empty($this->total_ttc))
|
}
|
||||||
$label.= '<br><b>' . $langs->trans('AmountTTC') . ':</b> ' . price($this->total_ttc, 0, $langs, 0, -1, -1, $conf->currency);
|
if (!empty($this->total_ht)) {
|
||||||
|
$label .= '<br><b>'.$langs->trans('AmountHT').':</b> '.price($this->total_ht, 0, $langs, 0, -1, -1,
|
||||||
|
$conf->currency);
|
||||||
|
}
|
||||||
|
if (!empty($this->total_tva)) {
|
||||||
|
$label .= '<br><b>'.$langs->trans('VAT').':</b> '.price($this->total_tva, 0, $langs, 0, -1, -1,
|
||||||
|
$conf->currency);
|
||||||
|
}
|
||||||
|
if (!empty($this->total_ttc)) {
|
||||||
|
$label .= '<br><b>'.$langs->trans('AmountTTC').':</b> '.price($this->total_ttc, 0, $langs, 0, -1, -1,
|
||||||
|
$conf->currency);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$linkclose = '" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">';
|
$linkclose = '" title="'.dol_escape_htmltag($label, 1).'" class="classfortooltip">';
|
||||||
if ($option == '') {
|
if ($option == '') {
|
||||||
$link = '<a href="'.DOL_URL_ROOT.'/comm/propal.php?id='.$this->id. $get_params .$linkclose;
|
$link = '<a href="'.DOL_URL_ROOT.'/comm/propal.php?id='.$this->id. $get_params .$linkclose;
|
||||||
|
|||||||
@ -109,7 +109,7 @@ if ($action == 'confirm_split' && GETPOST("confirm") == 'yes')
|
|||||||
$newdiscount2->amount_ttc=price2num($discount->amount_ttc-$newdiscount1->amount_ttc);
|
$newdiscount2->amount_ttc=price2num($discount->amount_ttc-$newdiscount1->amount_ttc);
|
||||||
$newdiscount1->amount_ht=price2num($newdiscount1->amount_ttc/(1+$newdiscount1->tva_tx/100),'MT');
|
$newdiscount1->amount_ht=price2num($newdiscount1->amount_ttc/(1+$newdiscount1->tva_tx/100),'MT');
|
||||||
$newdiscount2->amount_ht=price2num($newdiscount2->amount_ttc/(1+$newdiscount2->tva_tx/100),'MT');
|
$newdiscount2->amount_ht=price2num($newdiscount2->amount_ttc/(1+$newdiscount2->tva_tx/100),'MT');
|
||||||
$newdiscount1->amount_tva=price2num($newdiscount1->amount_ttc-$newdiscount2->amount_ht);
|
$newdiscount1->amount_tva=price2num($newdiscount1->amount_ttc-$newdiscount1->amount_ht);
|
||||||
$newdiscount2->amount_tva=price2num($newdiscount2->amount_ttc-$newdiscount2->amount_ht);
|
$newdiscount2->amount_tva=price2num($newdiscount2->amount_ttc-$newdiscount2->amount_ht);
|
||||||
|
|
||||||
$db->begin();
|
$db->begin();
|
||||||
|
|||||||
@ -275,6 +275,7 @@ if ($resql)
|
|||||||
if ($search_sale > 0) $param.='&search_sale='.$search_sale;
|
if ($search_sale > 0) $param.='&search_sale='.$search_sale;
|
||||||
if ($search_total_ht != '') $param.='&search_total_ht='.$search_total_ht;
|
if ($search_total_ht != '') $param.='&search_total_ht='.$search_total_ht;
|
||||||
if ($optioncss != '') $param.='&optioncss='.$optioncss;
|
if ($optioncss != '') $param.='&optioncss='.$optioncss;
|
||||||
|
if ($billed != '') $param.='&billed='.$billed;
|
||||||
|
|
||||||
$num = $db->num_rows($resql);
|
$num = $db->num_rows($resql);
|
||||||
print_barre_liste($title, $page,$_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,'',$num,$nbtotalofrecords,'title_commercial.png');
|
print_barre_liste($title, $page,$_SERVER["PHP_SELF"],$param,$sortfield,$sortorder,'',$num,$nbtotalofrecords,'title_commercial.png');
|
||||||
|
|||||||
@ -87,6 +87,17 @@ if ($action == 'delete')
|
|||||||
{
|
{
|
||||||
if (GETPOST('categid'))
|
if (GETPOST('categid'))
|
||||||
{
|
{
|
||||||
|
// Delete bank class
|
||||||
|
$sql = "DELETE FROM ".MAIN_DB_PREFIX."bank_class";
|
||||||
|
$sql.= " WHERE fk_categ = '".GETPOST('categid')."'";
|
||||||
|
|
||||||
|
$result = $db->query($sql);
|
||||||
|
if (!$result)
|
||||||
|
{
|
||||||
|
dol_print_error($db);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete bank categ
|
||||||
$sql = "DELETE FROM ".MAIN_DB_PREFIX."bank_categ";
|
$sql = "DELETE FROM ".MAIN_DB_PREFIX."bank_categ";
|
||||||
$sql.= " WHERE rowid = '".GETPOST('categid')."'";
|
$sql.= " WHERE rowid = '".GETPOST('categid')."'";
|
||||||
$sql.= " AND entity = ".$conf->entity;
|
$sql.= " AND entity = ".$conf->entity;
|
||||||
|
|||||||
@ -106,7 +106,7 @@ $fsearch.=' <input type="text" name="min" id="min" value="'.$min.'" size="6">';
|
|||||||
|
|
||||||
$calc=$conf->global->MAIN_INFO_LOCALTAX_CALC.$local;
|
$calc=$conf->global->MAIN_INFO_LOCALTAX_CALC.$local;
|
||||||
// Affiche en-tete du rapport
|
// Affiche en-tete du rapport
|
||||||
if ($conf->global->$calc==0 || $conf->global->$calc==1) // Calculate on invoice for goods and services
|
if ($calc==0 || $calc==1) // Calculate on invoice for goods and services
|
||||||
{
|
{
|
||||||
$nom=$langs->transcountry($local==1?"LT1ReportByCustomersInInputOutputMode":"LT2ReportByCustomersInInputOutputMode",$mysoc->country_code);
|
$nom=$langs->transcountry($local==1?"LT1ReportByCustomersInInputOutputMode":"LT2ReportByCustomersInInputOutputMode",$mysoc->country_code);
|
||||||
$calcmode=$calc==0?$langs->trans("CalcModeLT".$local):$langs->trans("CalcModeLT".$local."Rec");
|
$calcmode=$calc==0?$langs->trans("CalcModeLT".$local):$langs->trans("CalcModeLT".$local."Rec");
|
||||||
@ -124,7 +124,7 @@ if ($conf->global->$calc==0 || $conf->global->$calc==1) // Calculate on invoice
|
|||||||
$productsup=$langs->trans("Description");
|
$productsup=$langs->trans("Description");
|
||||||
$amountsup=$langs->trans("AmountHT");
|
$amountsup=$langs->trans("AmountHT");
|
||||||
}
|
}
|
||||||
if ($conf->global->$calc==2) // Invoice for goods, payment for services
|
if ($calc==2) // Invoice for goods, payment for services
|
||||||
{
|
{
|
||||||
$nom=$langs->transcountry($local==1?"LT1ReportByCustomersInInputOutputMode":"LT2ReportByCustomersInInputOutputMode",$mysoc->country_code);
|
$nom=$langs->transcountry($local==1?"LT1ReportByCustomersInInputOutputMode":"LT2ReportByCustomersInInputOutputMode",$mysoc->country_code);
|
||||||
$calcmode=$langs->trans("CalcModeLT2Debt");
|
$calcmode=$langs->trans("CalcModeLT2Debt");
|
||||||
@ -149,7 +149,7 @@ $vatcust=$langs->transcountry($local==1?"LT1":"LT2",$mysoc->country_code);
|
|||||||
$vatsup=$langs->transcountry($local==1?"LT1":"LT2",$mysoc->country_code);
|
$vatsup=$langs->transcountry($local==1?"LT1":"LT2",$mysoc->country_code);
|
||||||
|
|
||||||
// IRPF that the customer has retained me
|
// IRPF that the customer has retained me
|
||||||
if($conf->global->$calc ==0 || $conf->global->$calc == 2)
|
if($calc ==0 || $calc == 2)
|
||||||
{
|
{
|
||||||
print "<table class=\"noborder\" width=\"100%\">";
|
print "<table class=\"noborder\" width=\"100%\">";
|
||||||
print "<tr class=\"liste_titre\">";
|
print "<tr class=\"liste_titre\">";
|
||||||
@ -232,7 +232,7 @@ if($conf->global->$calc ==0 || $conf->global->$calc == 2)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IRPF I retained my supplier
|
// IRPF I retained my supplier
|
||||||
if($conf->global->$calc ==0 || $conf->global->$calc == 1){
|
if($calc ==0 || $calc == 1){
|
||||||
print "<table class=\"noborder\" width=\"100%\">";
|
print "<table class=\"noborder\" width=\"100%\">";
|
||||||
print "<tr class=\"liste_titre\">";
|
print "<tr class=\"liste_titre\">";
|
||||||
print '<td align="left">'.$langs->trans("Num")."</td>";
|
print '<td align="left">'.$langs->trans("Num")."</td>";
|
||||||
@ -309,7 +309,7 @@ if($conf->global->$calc ==0 || $conf->global->$calc == 1){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if($conf->global->$calc ==0){
|
if($calc ==0){
|
||||||
// Total to pay
|
// Total to pay
|
||||||
print '<br><br>';
|
print '<br><br>';
|
||||||
print '<table class="noborder" width="100%">';
|
print '<table class="noborder" width="100%">';
|
||||||
|
|||||||
@ -262,9 +262,15 @@ $dolibarr_main_db_prefix='';
|
|||||||
// $dolibarr_main_limit_users='0';
|
// $dolibarr_main_limit_users='0';
|
||||||
|
|
||||||
// dolibarr_mailing_limit_sendbyweb
|
// dolibarr_mailing_limit_sendbyweb
|
||||||
// Can set a limit for mailing send by web. Can be used for a restricted mode.
|
// Can set a limit for mailing send by web. This overwrite database value. Can be used to restrict on OS level.
|
||||||
// Default value: 0 (use database value if exist)
|
// Default value: '0' (no overwrite, use database value if exists)
|
||||||
// Examples:
|
// Examples: '-1' (sending by web is forbidden)
|
||||||
|
// $dolibarr_mailing_limit_sendbyweb='0';
|
||||||
|
|
||||||
|
// dolibarr_mailing_limit_sendbycli
|
||||||
|
// Can set a limit for mailing send by cli. This overwrite database value. Can be used to restrict on OS level.
|
||||||
|
// Default value: '0' (no overwrite, use database value if exists)
|
||||||
|
// Examples: '-1' (sending by cli is forbidden)
|
||||||
// $dolibarr_mailing_limit_sendbyweb='0';
|
// $dolibarr_mailing_limit_sendbyweb='0';
|
||||||
|
|
||||||
// dolibarr_strict_mode
|
// dolibarr_strict_mode
|
||||||
|
|||||||
@ -1134,6 +1134,16 @@ class Contrat extends CommonObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Removed extrafields
|
||||||
|
if (! $error) {
|
||||||
|
$result=$this->deleteExtraFields();
|
||||||
|
if ($result < 0)
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
dol_syslog(get_class($this)."::delete error -3 ".$this->error, LOG_ERR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (! $error)
|
if (! $error)
|
||||||
{
|
{
|
||||||
// We remove directory
|
// We remove directory
|
||||||
|
|||||||
@ -143,6 +143,8 @@ class CMailFile
|
|||||||
$this->msgishtml = $msgishtml;
|
$this->msgishtml = $msgishtml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (! empty($conf->global->MAIN_MAIL_FORCE_CONTENT_TYPE_TO_HTML)) $this->msgishtml=1; // To force to send everything with content type html.
|
||||||
|
|
||||||
// Detect images
|
// Detect images
|
||||||
if ($this->msgishtml)
|
if ($this->msgishtml)
|
||||||
{
|
{
|
||||||
@ -366,7 +368,7 @@ class CMailFile
|
|||||||
*/
|
*/
|
||||||
function sendfile()
|
function sendfile()
|
||||||
{
|
{
|
||||||
global $conf,$db;
|
global $conf,$db,$langs;
|
||||||
|
|
||||||
$errorlevel=error_reporting();
|
$errorlevel=error_reporting();
|
||||||
error_reporting($errorlevel ^ E_WARNING); // Desactive warnings
|
error_reporting($errorlevel ^ E_WARNING); // Desactive warnings
|
||||||
@ -389,6 +391,30 @@ class CMailFile
|
|||||||
return $reshook;
|
return $reshook;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check number of recipient is lower or equal than MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL
|
||||||
|
if (empty($conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL)) $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL=10;
|
||||||
|
$tmparray = explode(',', $this->addr_to);
|
||||||
|
if (count($tmparray) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL)
|
||||||
|
{
|
||||||
|
$this->error = 'Too much recipients in to:';
|
||||||
|
dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$tmparray = explode(',', $this->addr_cc);
|
||||||
|
if (count($tmparray) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL)
|
||||||
|
{
|
||||||
|
$this->error = 'Too much recipients in cc:';
|
||||||
|
dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$tmparray = explode(',', $this->addr_bcc);
|
||||||
|
if (count($tmparray) > $conf->global->MAIL_MAX_NB_OF_RECIPIENTS_IN_SAME_EMAIL)
|
||||||
|
{
|
||||||
|
$this->error = 'Too much recipients in bcc:';
|
||||||
|
dol_syslog("CMailFile::sendfile: mail end error=" . $this->error, LOG_WARNING);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Action according to choosed sending method
|
// Action according to choosed sending method
|
||||||
if ($conf->global->MAIN_MAIL_SENDMODE == 'mail')
|
if ($conf->global->MAIN_MAIL_SENDMODE == 'mail')
|
||||||
{
|
{
|
||||||
@ -417,8 +443,6 @@ class CMailFile
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
dol_syslog("CMailFile::sendfile: mail start HOST=".ini_get('SMTP').", PORT=".ini_get('smtp_port'), LOG_DEBUG);
|
|
||||||
|
|
||||||
$bounce = ''; // By default
|
$bounce = ''; // By default
|
||||||
if (! empty($conf->global->MAIN_MAIL_ALLOW_SENDMAIL_F))
|
if (! empty($conf->global->MAIN_MAIL_ALLOW_SENDMAIL_F))
|
||||||
{
|
{
|
||||||
@ -431,6 +455,7 @@ class CMailFile
|
|||||||
{
|
{
|
||||||
$bounce .= ($bounce?' ':'').'-ba';
|
$bounce .= ($bounce?' ':'').'-ba';
|
||||||
}
|
}
|
||||||
|
dol_syslog("CMailFile::sendfile: mail start HOST=".ini_get('SMTP').", PORT=".ini_get('smtp_port').", additionnal_parameters=".$bounce, LOG_DEBUG);
|
||||||
|
|
||||||
$this->message=stripslashes($this->message);
|
$this->message=stripslashes($this->message);
|
||||||
|
|
||||||
@ -449,7 +474,8 @@ class CMailFile
|
|||||||
{
|
{
|
||||||
$this->error.=" to HOST=".ini_get('SMTP').", PORT=".ini_get('smtp_port'); // This values are value used only for non linuxlike systems
|
$this->error.=" to HOST=".ini_get('SMTP').", PORT=".ini_get('smtp_port'); // This values are value used only for non linuxlike systems
|
||||||
}
|
}
|
||||||
$this->error.=".<br>Check your server logs and your firewalls setup";
|
$this->error.=".<br>";
|
||||||
|
$this->error.=$langs->trans("ErrorPhpMailDelivery");
|
||||||
dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERR);
|
dol_syslog("CMailFile::sendfile: mail end error=".$this->error, LOG_ERR);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -680,7 +706,7 @@ class CMailFile
|
|||||||
global $conf;
|
global $conf;
|
||||||
$out = "";
|
$out = "";
|
||||||
|
|
||||||
$host = dol_getprefix();
|
$host = dol_getprefix('email');
|
||||||
|
|
||||||
// Sender
|
// Sender
|
||||||
//$out.= "Sender: ".getValidAddress($this->addr_from,2)).$this->eol2;
|
//$out.= "Sender: ".getValidAddress($this->addr_from,2)).$this->eol2;
|
||||||
@ -798,8 +824,9 @@ class CMailFile
|
|||||||
$strContent = preg_replace("/\r\n/si", "\n", $strContent);
|
$strContent = preg_replace("/\r\n/si", "\n", $strContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
//$strContent = rtrim(chunk_split($strContent)); // Function chunck_split seems bugged
|
// Make RFC2045 Compliant, split lines
|
||||||
$strContent = rtrim(wordwrap($strContent));
|
//$strContent = rtrim(chunk_split($strContent)); // Function chunck_split seems ko if not used on a base64 content
|
||||||
|
$strContent = rtrim(wordwrap($strContent)); // TODO Using this method creates unexpected line break on text/plain content.
|
||||||
|
|
||||||
if ($this->msgishtml)
|
if ($this->msgishtml)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -108,7 +108,7 @@ class DolEditor
|
|||||||
// Dolibarr utilise toujours liens avec modulepart='fckeditor' quelque soit modulepart.
|
// Dolibarr utilise toujours liens avec modulepart='fckeditor' quelque soit modulepart.
|
||||||
// Ou se trouve donc cette valeur /viewimage.php?modulepart=fckeditor&file=' ?
|
// Ou se trouve donc cette valeur /viewimage.php?modulepart=fckeditor&file=' ?
|
||||||
$modulepart='fckeditor';
|
$modulepart='fckeditor';
|
||||||
$this->editor->Config['UserFilesPath'] = '/viewimage.php?modulepart='.$modulepart.'&file=';
|
$this->editor->Config['UserFilesPath'] = '/viewimage.php?modulepart='.$modulepart.'&entity='.$conf->entity.'&file=';
|
||||||
$this->editor->Config['UserFilesAbsolutePath'] = DOL_DATA_ROOT.'/'.$modulepart.'/' ;
|
$this->editor->Config['UserFilesAbsolutePath'] = DOL_DATA_ROOT.'/'.$modulepart.'/' ;
|
||||||
|
|
||||||
$this->editor->Config['LinkBrowser']=($uselocalbrowser?'true':'false');
|
$this->editor->Config['LinkBrowser']=($uselocalbrowser?'true':'false');
|
||||||
|
|||||||
@ -729,7 +729,7 @@ class ExtraFields
|
|||||||
}
|
}
|
||||||
elseif ($type == 'price')
|
elseif ($type == 'price')
|
||||||
{
|
{
|
||||||
$out='<input type="text" class="flat" name="'.$keysuffix.'options_'.$key.$keyprefix.'" size="6" value="'.price($value).'" '.($moreparam?$moreparam:'').'> '.$langs->getCurrencySymbol($conf->currency);
|
$out='<input type="text" class="flat" name="'.$keysuffix.'options_'.$key.$keyprefix.'" size="6" value="'.price2num($value).'" '.($moreparam?$moreparam:'').'> '.$langs->getCurrencySymbol($conf->currency);
|
||||||
}
|
}
|
||||||
elseif ($type == 'double')
|
elseif ($type == 'double')
|
||||||
{
|
{
|
||||||
|
|||||||
@ -135,13 +135,15 @@ class FormProjets
|
|||||||
// Search all projects
|
// Search all projects
|
||||||
$sql = 'SELECT p.rowid, p.ref, p.title, p.fk_soc, p.fk_statut, p.public';
|
$sql = 'SELECT p.rowid, p.ref, p.title, p.fk_soc, p.fk_statut, p.public';
|
||||||
$sql.= ' FROM '.MAIN_DB_PREFIX .'projet as p';
|
$sql.= ' FROM '.MAIN_DB_PREFIX .'projet as p';
|
||||||
$sql.= " WHERE p.entity = ".$conf->entity;
|
$sql.= " WHERE p.entity IN (".getEntity('project',1).")";
|
||||||
if ($projectsListId !== false) $sql.= " AND p.rowid IN (".$projectsListId.")";
|
if ($projectsListId !== false) $sql.= " AND p.rowid IN (".$projectsListId.")";
|
||||||
if ($socid == 0) $sql.= " AND (p.fk_soc=0 OR p.fk_soc IS NULL)";
|
if ($socid == 0) $sql.= " AND (p.fk_soc=0 OR p.fk_soc IS NULL)";
|
||||||
if ($socid > 0) $sql.= " AND (p.fk_soc=".$socid." OR p.fk_soc IS NULL)";
|
if ($socid > 0) $sql.= " AND (p.fk_soc=".$socid." OR p.fk_soc IS NULL)";
|
||||||
if (!empty($filterkey)) {
|
if (!empty($filterkey)) {
|
||||||
$sql .= " AND p.title LIKE '%".$this->db->escape($filterkey)."%'";
|
$sql .= ' AND (';
|
||||||
$sql .= " OR p.ref LIKE '%".$this->db->escape($filterkey)."%'";
|
$sql .= ' p.title LIKE "%'.$this->db->escape($filterkey).'%"';
|
||||||
|
$sql .= ' OR p.ref LIKE "%'.$this->db->escape($filterkey).'%"';
|
||||||
|
$sql .= ')';
|
||||||
}
|
}
|
||||||
$sql.= " ORDER BY p.ref ASC";
|
$sql.= " ORDER BY p.ref ASC";
|
||||||
|
|
||||||
|
|||||||
@ -1126,6 +1126,8 @@ class SMTPs
|
|||||||
$host=preg_replace('@tcp://@i','',$host); // Remove prefix
|
$host=preg_replace('@tcp://@i','',$host); // Remove prefix
|
||||||
$host=preg_replace('@ssl://@i','',$host); // Remove prefix
|
$host=preg_replace('@ssl://@i','',$host); // Remove prefix
|
||||||
|
|
||||||
|
$host=dol_getprefix('email').'-'.$host;
|
||||||
|
|
||||||
//NOTE: Message-ID should probably contain the username of the user who sent the msg
|
//NOTE: Message-ID should probably contain the username of the user who sent the msg
|
||||||
$_header .= 'Subject: ' . $this->getSubject() . "\r\n";
|
$_header .= 'Subject: ' . $this->getSubject() . "\r\n";
|
||||||
$_header .= 'Date: ' . date("r") . "\r\n";
|
$_header .= 'Date: ' . date("r") . "\r\n";
|
||||||
@ -1186,7 +1188,9 @@ class SMTPs
|
|||||||
// Make RFC821 Compliant, replace bare linefeeds
|
// Make RFC821 Compliant, replace bare linefeeds
|
||||||
$strContent = preg_replace("/(?<!\r)\n/si", "\r\n", $strContent);
|
$strContent = preg_replace("/(?<!\r)\n/si", "\r\n", $strContent);
|
||||||
|
|
||||||
$strContent = rtrim(wordwrap($strContent, 75, "\r\n"));
|
// Make RFC2045 Compliant
|
||||||
|
//$strContent = rtrim(chunk_split($strContent)); // Function chunck_split seems ko if not used on a base64 content
|
||||||
|
$strContent = rtrim(wordwrap($strContent, 75, "\r\n")); // TODO Using this method creates unexpected line break on text/plain content.
|
||||||
|
|
||||||
$this->_msgContent[$strType] = array();
|
$this->_msgContent[$strType] = array();
|
||||||
|
|
||||||
|
|||||||
@ -15,36 +15,38 @@ if ($resql) // This can fail when class is used on old database (during migra
|
|||||||
{
|
{
|
||||||
while ($obj=$this->db->fetch_object($resql))
|
while ($obj=$this->db->fetch_object($resql))
|
||||||
{
|
{
|
||||||
$fieldname=$keyforaliasextra.'.'.$obj->name;
|
if ($obj->type!='separate') {
|
||||||
$fieldlabel=ucfirst($obj->label);
|
$fieldname=$keyforaliasextra.'.'.$obj->name;
|
||||||
$typeFilter="Text";
|
$fieldlabel=ucfirst($obj->label);
|
||||||
switch($obj->type)
|
$typeFilter="Text";
|
||||||
{
|
switch($obj->type)
|
||||||
case 'int':
|
{
|
||||||
case 'double':
|
case 'int':
|
||||||
case 'price':
|
case 'double':
|
||||||
$typeFilter="Numeric";
|
case 'price':
|
||||||
break;
|
$typeFilter="Numeric";
|
||||||
case 'date':
|
break;
|
||||||
case 'datetime':
|
case 'date':
|
||||||
$typeFilter="Date";
|
case 'datetime':
|
||||||
break;
|
$typeFilter="Date";
|
||||||
case 'boolean':
|
break;
|
||||||
$typeFilter="Boolean";
|
case 'boolean':
|
||||||
break;
|
$typeFilter="Boolean";
|
||||||
case 'sellist':
|
break;
|
||||||
$tmp='';
|
case 'sellist':
|
||||||
$tmpparam=unserialize($obj->param); // $tmp ay be array 'options' => array 'c_currencies:code_iso:code_iso' => null
|
$tmp='';
|
||||||
if ($tmpparam['options'] && is_array($tmpparam['options'])) {
|
$tmpparam=unserialize($obj->param); // $tmp ay be array 'options' => array 'c_currencies:code_iso:code_iso' => null
|
||||||
$tmpkeys=array_keys($tmpparam['options']);
|
if ($tmpparam['options'] && is_array($tmpparam['options'])) {
|
||||||
$tmp=array_shift($tmpkeys);
|
$tmpkeys=array_keys($tmpparam['options']);
|
||||||
}
|
$tmp=array_shift($tmpkeys);
|
||||||
if (preg_match('/[a-z0-9_]+:[a-z0-9_]+:[a-z0-9_]+/', $tmp)) $typeFilter="List:".$tmp;
|
}
|
||||||
break;
|
if (preg_match('/[a-z0-9_]+:[a-z0-9_]+:[a-z0-9_]+/', $tmp)) $typeFilter="List:".$tmp;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$this->export_fields_array[$r][$fieldname]=$fieldlabel;
|
||||||
|
$this->export_TypeFields_array[$r][$fieldname]=$typeFilter;
|
||||||
|
$this->export_entities_array[$r][$fieldname]=$keyforelement;
|
||||||
}
|
}
|
||||||
$this->export_fields_array[$r][$fieldname]=$fieldlabel;
|
|
||||||
$this->export_TypeFields_array[$r][$fieldname]=$typeFilter;
|
|
||||||
$this->export_entities_array[$r][$fieldname]=$keyforelement;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// End add axtra fields
|
// End add axtra fields
|
||||||
|
|||||||
@ -44,7 +44,8 @@ $Config['Enabled'] = true ;
|
|||||||
|
|
||||||
|
|
||||||
// Path to user files relative to the document root.
|
// Path to user files relative to the document root.
|
||||||
$Config['UserFilesPath'] = DOL_URL_ROOT.'/viewimage.php?modulepart=fckeditor&file=' ;
|
$extEntity=(empty($entity) ? 1 : $entity); // For multicompany with external access
|
||||||
|
$Config['UserFilesPath'] = DOL_URL_ROOT.'/viewimage.php?modulepart=fckeditor&entity='.$extEntity.'&file=' ;
|
||||||
|
|
||||||
// Fill the following value it you prefer to specify the absolute path for the
|
// Fill the following value it you prefer to specify the absolute path for the
|
||||||
// user files directory. Useful if you are using a virtual directory, symbolic
|
// user files directory. Useful if you are using a virtual directory, symbolic
|
||||||
|
|||||||
@ -286,10 +286,20 @@ function GETPOST($paramname,$check='',$method=0,$filter=NULL,$options=NULL)
|
|||||||
* This prefix is unique for instance and avoid conflict between multi-instances,
|
* This prefix is unique for instance and avoid conflict between multi-instances,
|
||||||
* even when having two instances with one root dir or two instances in virtual servers
|
* even when having two instances with one root dir or two instances in virtual servers
|
||||||
*
|
*
|
||||||
|
* @param string $mode '' or 'email'
|
||||||
* @return string A calculated prefix
|
* @return string A calculated prefix
|
||||||
*/
|
*/
|
||||||
function dol_getprefix()
|
function dol_getprefix($mode='')
|
||||||
{
|
{
|
||||||
|
global $conf;
|
||||||
|
|
||||||
|
// If MAIL_PREFIX_FOR_EMAIL_ID is set and prefix is for email
|
||||||
|
if ($mode == 'email' && ! empty($conf->global->MAIL_PREFIX_FOR_EMAIL_ID))
|
||||||
|
{
|
||||||
|
if ($conf->global->MAIL_PREFIX_FOR_EMAIL_ID != 'SERVER_NAME') return $conf->global->MAIL_PREFIX_FOR_EMAIL_ID;
|
||||||
|
else if (isset($_SERVER["SERVER_NAME"])) return $_SERVER["SERVER_NAME"];
|
||||||
|
}
|
||||||
|
|
||||||
if (isset($_SERVER["SERVER_NAME"]) && isset($_SERVER["DOCUMENT_ROOT"]))
|
if (isset($_SERVER["SERVER_NAME"]) && isset($_SERVER["DOCUMENT_ROOT"]))
|
||||||
{
|
{
|
||||||
return dol_hash($_SERVER["SERVER_NAME"].$_SERVER["DOCUMENT_ROOT"].DOL_DOCUMENT_ROOT.DOL_URL_ROOT);
|
return dol_hash($_SERVER["SERVER_NAME"].$_SERVER["DOCUMENT_ROOT"].DOL_DOCUMENT_ROOT.DOL_URL_ROOT);
|
||||||
@ -3320,7 +3330,7 @@ function price2num($amount,$rounding='',$alreadysqlnb=0)
|
|||||||
* @param float $vatrate Vat rate. Can be '8.5' or '8.5 (VATCODEX)' for example
|
* @param float $vatrate Vat rate. Can be '8.5' or '8.5 (VATCODEX)' for example
|
||||||
* @param int $local Local tax to search and return (1 or 2 return only tax rate 1 or tax rate 2)
|
* @param int $local Local tax to search and return (1 or 2 return only tax rate 1 or tax rate 2)
|
||||||
* @param Societe $thirdparty_buyer Object of buying third party
|
* @param Societe $thirdparty_buyer Object of buying third party
|
||||||
* @param Societe $thirdparty_seller Object of selling third party
|
* @param Societe $thirdparty_seller Object of selling third party ($mysoc if not defined)
|
||||||
* @param int $vatnpr If vat rate is NPR or not
|
* @param int $vatnpr If vat rate is NPR or not
|
||||||
* @return mixed 0 if not found, localtax rate if found
|
* @return mixed 0 if not found, localtax rate if found
|
||||||
* @see get_default_tva
|
* @see get_default_tva
|
||||||
@ -3379,18 +3389,15 @@ function get_localtax($vatrate, $local, $thirdparty_buyer="", $thirdparty_seller
|
|||||||
if ($local == 1 && ! $thirdparty_seller->localtax1_assuj) return 0;
|
if ($local == 1 && ! $thirdparty_seller->localtax1_assuj) return 0;
|
||||||
if ($local == 2 && ! $thirdparty_seller->localtax2_assuj) return 0;
|
if ($local == 2 && ! $thirdparty_seller->localtax2_assuj) return 0;
|
||||||
}
|
}
|
||||||
//if ($local == 0 && ! $thirdparty_seller->localtax1_assuj && ! $thirdparty_seller->localtax2_assuj) return array('localtax1'=>0,'localtax2'=>0);
|
|
||||||
|
|
||||||
// Do not enabled this. We want localtax that match the vat rate.
|
// For some country MAIN_GET_LOCALTAXES_VALUES_FROM_THIRDPARTY is forced to on.
|
||||||
// If we forced a vat, we must also force local tax
|
if (in_array($mysoc->country_code, array('ES')))
|
||||||
/*
|
|
||||||
if (is_object($thirdparty_buyer))
|
|
||||||
{
|
{
|
||||||
if ($thirdparty_seller->country_code != $thirdparty_buyer->country_code) return 0;
|
$conf->global->MAIN_GET_LOCALTAXES_VALUES_FROM_THIRDPARTY = 1;
|
||||||
}*/
|
}
|
||||||
|
|
||||||
// Search local taxes
|
// Search local taxes
|
||||||
if ($mysoc->country_code == 'ES' || ! empty($conf->global->MAIN_GET_LOCALTAXES_VALUES_FROM_THIRDPARTY))
|
if (! empty($conf->global->MAIN_GET_LOCALTAXES_VALUES_FROM_THIRDPARTY))
|
||||||
{
|
{
|
||||||
if ($local==1)
|
if ($local==1)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -110,8 +110,8 @@ class pdf_einstein extends ModelePDFCommandes
|
|||||||
{
|
{
|
||||||
$this->posxtva=99;
|
$this->posxtva=99;
|
||||||
$this->posxup=114;
|
$this->posxup=114;
|
||||||
$this->posxqty=133;
|
$this->posxqty=130;
|
||||||
$this->posxunit=150;
|
$this->posxunit=147;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -120,8 +120,8 @@ class pdf_crabe extends ModelePDFFactures
|
|||||||
{
|
{
|
||||||
$this->posxtva=99;
|
$this->posxtva=99;
|
||||||
$this->posxup=114;
|
$this->posxup=114;
|
||||||
$this->posxqty=133;
|
$this->posxqty=130;
|
||||||
$this->posxunit=150;
|
$this->posxunit=147;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -252,7 +252,7 @@ class mod_codeproduct_elephant extends ModeleProductCode
|
|||||||
// Get Mask value
|
// Get Mask value
|
||||||
$mask = '';
|
$mask = '';
|
||||||
if ($type==0) $mask = empty($conf->global->PRODUCT_ELEPHANT_MASK_PRODUCT)?'':$conf->global->PRODUCT_ELEPHANT_MASK_PRODUCT;
|
if ($type==0) $mask = empty($conf->global->PRODUCT_ELEPHANT_MASK_PRODUCT)?'':$conf->global->PRODUCT_ELEPHANT_MASK_PRODUCT;
|
||||||
if ($type==1) $mask = empty($conf->global->PRODUCT_ELEPHANT_MASK_SSERVICE)?'':$conf->global->PRODUCT_ELEPHANT_MASK_SERVICE;
|
if ($type==1) $mask = empty($conf->global->PRODUCT_ELEPHANT_MASK_SERVICE)?'':$conf->global->PRODUCT_ELEPHANT_MASK_SERVICE;
|
||||||
if (! $mask)
|
if (! $mask)
|
||||||
{
|
{
|
||||||
$this->error='NotConfigured';
|
$this->error='NotConfigured';
|
||||||
|
|||||||
@ -108,8 +108,8 @@ class pdf_azur extends ModelePDFPropales
|
|||||||
{
|
{
|
||||||
$this->posxtva=99;
|
$this->posxtva=99;
|
||||||
$this->posxup=114;
|
$this->posxup=114;
|
||||||
$this->posxqty=133;
|
$this->posxqty=130;
|
||||||
$this->posxunit=150;
|
$this->posxunit=147;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@ -102,8 +102,8 @@ class pdf_canelle extends ModelePDFSuppliersInvoices
|
|||||||
if($conf->global->PRODUCT_USE_UNITS) {
|
if($conf->global->PRODUCT_USE_UNITS) {
|
||||||
$this->posxtva=99;
|
$this->posxtva=99;
|
||||||
$this->posxup=114;
|
$this->posxup=114;
|
||||||
$this->posxqty=133;
|
$this->posxqty=130;
|
||||||
$this->posxunit=150;
|
$this->posxunit=147;
|
||||||
}
|
}
|
||||||
//if (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) $this->posxtva=$this->posxup;
|
//if (! empty($conf->global->MAIN_GENERATE_DOCUMENTS_WITHOUT_VAT)) $this->posxtva=$this->posxup;
|
||||||
$this->posxpicture=$this->posxtva - (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH)?20:$conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH); // width of images
|
$this->posxpicture=$this->posxtva - (empty($conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH)?20:$conf->global->MAIN_DOCUMENTS_WITH_PICTURE_WIDTH); // width of images
|
||||||
|
|||||||
@ -111,8 +111,8 @@ class pdf_muscadet extends ModelePDFSuppliersOrders
|
|||||||
{
|
{
|
||||||
$this->posxtva=99;
|
$this->posxtva=99;
|
||||||
$this->posxup=114;
|
$this->posxup=114;
|
||||||
$this->posxqty=133;
|
$this->posxqty=130;
|
||||||
$this->posxunit=150;
|
$this->posxunit=147;
|
||||||
} else {
|
} else {
|
||||||
$this->posxtva=112;
|
$this->posxtva=112;
|
||||||
$this->posxup=126;
|
$this->posxup=126;
|
||||||
|
|||||||
@ -524,13 +524,14 @@ class PaymentExpenseReport extends CommonObject
|
|||||||
{
|
{
|
||||||
if ($mode == 'payment_expensereport')
|
if ($mode == 'payment_expensereport')
|
||||||
{
|
{
|
||||||
$euser = new User($this->db);
|
$er = new ExpenseReport($this->db);
|
||||||
$euser->fetch($key);
|
$er->fetch($key);
|
||||||
|
$er->fetch_user($er->fk_user_author);
|
||||||
$result=$acc->add_url_line(
|
$result=$acc->add_url_line(
|
||||||
$bank_line_id,
|
$bank_line_id,
|
||||||
$euser->id,
|
$er->user->id,
|
||||||
DOL_URL_ROOT.'/user/card.php?id=',
|
DOL_URL_ROOT.'/user/card.php?id=',
|
||||||
$euser->getFullName($langs),
|
$er->user->getFullName($langs),
|
||||||
'user'
|
'user'
|
||||||
);
|
);
|
||||||
if ($result <= 0)
|
if ($result <= 0)
|
||||||
|
|||||||
@ -1202,7 +1202,7 @@ class FichinterLigne extends CommonObjectLine
|
|||||||
// Mise a jour ligne en base
|
// Mise a jour ligne en base
|
||||||
$sql = "UPDATE ".MAIN_DB_PREFIX."fichinterdet SET";
|
$sql = "UPDATE ".MAIN_DB_PREFIX."fichinterdet SET";
|
||||||
$sql.= " description='".$this->db->escape($this->desc)."'";
|
$sql.= " description='".$this->db->escape($this->desc)."'";
|
||||||
$sql.= ",date=".$this->db->idate($this->datei);
|
$sql.= ",date='".$this->db->idate($this->datei)."'";
|
||||||
$sql.= ",duree=".$this->duration;
|
$sql.= ",duree=".$this->duration;
|
||||||
$sql.= ",rang='".$this->rang."'";
|
$sql.= ",rang='".$this->rang."'";
|
||||||
$sql.= " WHERE rowid = ".$this->rowid;
|
$sql.= " WHERE rowid = ".$this->rowid;
|
||||||
|
|||||||
@ -31,7 +31,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE','Dolibarr');
|
if (! defined('DOL_APPLICATION_TITLE')) define('DOL_APPLICATION_TITLE','Dolibarr');
|
||||||
if (! defined('DOL_VERSION')) define('DOL_VERSION','3.9.4');
|
if (! defined('DOL_VERSION')) define('DOL_VERSION','3.9.5');
|
||||||
|
|
||||||
if (! defined('EURO')) define('EURO',chr(128));
|
if (! defined('EURO')) define('EURO',chr(128));
|
||||||
|
|
||||||
@ -122,6 +122,7 @@ if (empty($dolibarr_main_db_encryption)) $dolibarr_main_db_encryption=0;
|
|||||||
if (empty($dolibarr_main_db_cryptkey)) $dolibarr_main_db_cryptkey='';
|
if (empty($dolibarr_main_db_cryptkey)) $dolibarr_main_db_cryptkey='';
|
||||||
if (empty($dolibarr_main_limit_users)) $dolibarr_main_limit_users=0;
|
if (empty($dolibarr_main_limit_users)) $dolibarr_main_limit_users=0;
|
||||||
if (empty($dolibarr_mailing_limit_sendbyweb)) $dolibarr_mailing_limit_sendbyweb=0;
|
if (empty($dolibarr_mailing_limit_sendbyweb)) $dolibarr_mailing_limit_sendbyweb=0;
|
||||||
|
if (empty($dolibarr_mailing_limit_sendbycli)) $dolibarr_mailing_limit_sendbycli=0;
|
||||||
if (empty($dolibarr_strict_mode)) $dolibarr_strict_mode=0; // For debug in php strict mode
|
if (empty($dolibarr_strict_mode)) $dolibarr_strict_mode=0; // For debug in php strict mode
|
||||||
// TODO Multicompany Remove this. Useless.
|
// TODO Multicompany Remove this. Useless.
|
||||||
if (empty($multicompany_transverse_mode)) $multicompany_transverse_mode=0;
|
if (empty($multicompany_transverse_mode)) $multicompany_transverse_mode=0;
|
||||||
|
|||||||
@ -22,7 +22,7 @@
|
|||||||
-- -- VMYSQL4.1 DELETE FROM llx_usergroup_user WHERE fk_usergroup NOT IN (SELECT rowid from llx_usergroup);
|
-- -- VMYSQL4.1 DELETE FROM llx_usergroup_user WHERE fk_usergroup NOT IN (SELECT rowid from llx_usergroup);
|
||||||
|
|
||||||
|
|
||||||
insert into llx_const (name, value, type, note, visible, entity) values ('MAIN_ENABLE_LOG_TO_HTML','0','chaine','If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL',1,0);
|
insert into llx_const (name, value, type, note, visible, entity) values (__ENCRYPT('MAIN_ENABLE_LOG_TO_HTML')__,__ENCRYPT('0')__,'chaine','If this option is set to 1, it is possible to see log output at end of HTML sources by adding paramater logtohtml=1 on URL',1,0);
|
||||||
|
|
||||||
|
|
||||||
-- Was done into a 3.8 fix, so we must do it also in 3.9
|
-- Was done into a 3.8 fix, so we must do it also in 3.9
|
||||||
@ -61,7 +61,7 @@ update llx_opensurvey_sondage set format = 'D' where format = 'D+';
|
|||||||
update llx_opensurvey_sondage set format = 'A' where format = 'A+';
|
update llx_opensurvey_sondage set format = 'A' where format = 'A+';
|
||||||
|
|
||||||
INSERT INTO llx_const (name, value, type, note, visible) values (__ENCRYPT('MAIN_DELAY_EXPENSEREPORTS_TO_PAY')__,__ENCRYPT('31')__,'chaine','Tolérance de retard avant alerte (en jours) sur les notes de frais impayées',0);
|
INSERT INTO llx_const (name, value, type, note, visible) values (__ENCRYPT('MAIN_DELAY_EXPENSEREPORTS_TO_PAY')__,__ENCRYPT('31')__,'chaine','Tolérance de retard avant alerte (en jours) sur les notes de frais impayées',0);
|
||||||
INSERT INTO llx_const (name, value, type, note, visible) values ('MAIN_SIZE_SHORTLISTE_LIMIT','4','chaine','Longueur maximum des listes courtes (fiche client)',0);
|
INSERT INTO llx_const (name, value, type, note, visible) values (__ENCRYPT('MAIN_SIZE_SHORTLISTE_LIMIT')__,__ENCRYPT('4')__,'chaine','Longueur maximum des listes courtes (fiche client)',0);
|
||||||
|
|
||||||
ALTER TABLE llx_accounting_system MODIFY COLUMN pcg_version varchar(32);
|
ALTER TABLE llx_accounting_system MODIFY COLUMN pcg_version varchar(32);
|
||||||
ALTER TABLE llx_accountingaccount MODIFY COLUMN fk_pcg_version varchar(32);
|
ALTER TABLE llx_accountingaccount MODIFY COLUMN fk_pcg_version varchar(32);
|
||||||
|
|||||||
@ -176,10 +176,11 @@ ErrorWarehouseRequiredIntoShipmentLine=Warehouse is required on the line to ship
|
|||||||
ErrorFileMustHaveFormat=File must have format %s
|
ErrorFileMustHaveFormat=File must have format %s
|
||||||
ErrorSupplierCountryIsNotDefined=Country for this supplier is not defined. Correct this first.
|
ErrorSupplierCountryIsNotDefined=Country for this supplier is not defined. Correct this first.
|
||||||
ErrorsThirdpartyMerge=Failed to merge the two records. Request canceled.
|
ErrorsThirdpartyMerge=Failed to merge the two records. Request canceled.
|
||||||
ErrorStockIsNotEnoughToAddProductOnOrder=Stock is not enougth for product %s to add it into a new order.
|
ErrorStockIsNotEnoughToAddProductOnOrder=Stock is not enough for product %s to add it into a new order.
|
||||||
ErrorStockIsNotEnoughToAddProductOnInvoice=Stock is not enougth for product %s to add it into a new invoice.
|
ErrorStockIsNotEnoughToAddProductOnInvoice=Stock is not enough for product %s to add it into a new invoice.
|
||||||
ErrorStockIsNotEnoughToAddProductOnShipment=Stock is not enougth for product %s to add it into a new shipment.
|
ErrorStockIsNotEnoughToAddProductOnShipment=Stock is not enough for product %s to add it into a new shipment.
|
||||||
ErrorStockIsNotEnoughToAddProductOnProposal=Stock is not enougth for product %s to add it into a new proposal.
|
ErrorStockIsNotEnoughToAddProductOnProposal=Stock is not enough for product %s to add it into a new proposal.
|
||||||
|
ErrorPhpMailDelivery=Check that you don't use a too high number of recipients and that your email content is not similar to a Spam. Ask also your administrator to check firewall and server logs files for a more complete information.
|
||||||
|
|
||||||
# Warnings
|
# Warnings
|
||||||
WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
|
WarningPasswordSetWithNoAccount=A password was set for this member. However, no user account was created. So this password is stored but can't be used to login to Dolibarr. It may be used by an external module/interface but if you don't need to define any login nor password for a member, you can disable option "Manage a login for each member" from Member module setup. If you need to manage a login but don't need any password, you can keep this field empty to avoid this warning. Note: Email can also be used as a login if the member is linked to a user.
|
||||||
|
|||||||
@ -42,7 +42,7 @@ MailingStatusSentPartialy=Sent partialy
|
|||||||
MailingStatusSentCompletely=Sent completely
|
MailingStatusSentCompletely=Sent completely
|
||||||
MailingStatusError=Error
|
MailingStatusError=Error
|
||||||
MailingStatusNotSent=Not sent
|
MailingStatusNotSent=Not sent
|
||||||
MailSuccessfulySent=Email successfully sent (from %s to %s)
|
MailSuccessfulySent=Email successfully accepted for delivery (from %s to %s)
|
||||||
MailingSuccessfullyValidated=EMailing successfully validated
|
MailingSuccessfullyValidated=EMailing successfully validated
|
||||||
MailUnsubcribe=Unsubscribe
|
MailUnsubcribe=Unsubscribe
|
||||||
Unsuscribe=Unsubscribe
|
Unsuscribe=Unsubscribe
|
||||||
@ -116,9 +116,9 @@ SearchAMailing=Search mailing
|
|||||||
SendMailing=Send emailing
|
SendMailing=Send emailing
|
||||||
SendMail=Send email
|
SendMail=Send email
|
||||||
SentBy=Sent by
|
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:
|
MailingNeedCommand=Sending an emailing can be performed from command line. 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.
|
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 ?
|
ConfirmSendingEmailing=If you want to send emailing directly from this screen, please confirm you are sure you want to send emailing now from your browser ?
|
||||||
LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, <b>%s</b> recipients at a time for each sending session.
|
LimitSendingEmailing=Note: Sending of emailings from web interface is done in several times for security and timeout reasons, <b>%s</b> recipients at a time for each sending session.
|
||||||
TargetsReset=Clear list
|
TargetsReset=Clear list
|
||||||
ToClearAllRecipientsClickHere=Click here to clear the recipient list for this emailing
|
ToClearAllRecipientsClickHere=Click here to clear the recipient list for this emailing
|
||||||
|
|||||||
@ -184,6 +184,12 @@ ProfId3FR=Id. prof. 3 (NAF-APE)
|
|||||||
ProfId4FR=Id. prof. 4 (RCS/RM)
|
ProfId4FR=Id. prof. 4 (RCS/RM)
|
||||||
ProfId5FR=-
|
ProfId5FR=-
|
||||||
ProfId6FR=-
|
ProfId6FR=-
|
||||||
|
ProfId1GA=Id. prof. 1 (NIF)
|
||||||
|
ProfId2GA=Id. prof. 2 (RCCM)
|
||||||
|
ProfId3GA=Id. prof. 3 (CAE)
|
||||||
|
ProfId4GA=Id. prof. 4
|
||||||
|
ProfId5GA=-
|
||||||
|
ProfId6GA=-
|
||||||
ProfId1GB=Numéro d'enregistrement
|
ProfId1GB=Numéro d'enregistrement
|
||||||
ProfId2GB=-
|
ProfId2GB=-
|
||||||
ProfId3GB=SIC
|
ProfId3GB=SIC
|
||||||
|
|||||||
@ -126,6 +126,7 @@ $sql.= ", ".MAIN_DB_PREFIX."facturedet as d";
|
|||||||
$sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
$sql.= ", ".MAIN_DB_PREFIX."societe_commerciaux as sc";
|
||||||
$sql.= ", ".MAIN_DB_PREFIX."user as u";
|
$sql.= ", ".MAIN_DB_PREFIX."user as u";
|
||||||
$sql.= " WHERE f.fk_soc = s.rowid";
|
$sql.= " WHERE f.fk_soc = s.rowid";
|
||||||
|
$sql.= " AND f.entity = ".$conf->entity;
|
||||||
$sql.= " AND sc.fk_soc = f.fk_soc";
|
$sql.= " AND sc.fk_soc = f.fk_soc";
|
||||||
$sql.= " AND (d.product_type = 0 OR d.product_type = 1)";
|
$sql.= " AND (d.product_type = 0 OR d.product_type = 1)";
|
||||||
if (! empty($conf->global->AGENT_CONTACT_TYPE))
|
if (! empty($conf->global->AGENT_CONTACT_TYPE))
|
||||||
|
|||||||
@ -61,6 +61,7 @@ if (defined('TEST_DB_FORCE_TYPE')) $conf->db->type=constant('TEST_DB_FORCE_TYPE'
|
|||||||
// Set properties specific to conf file
|
// Set properties specific to conf file
|
||||||
$conf->file->main_limit_users = $dolibarr_main_limit_users;
|
$conf->file->main_limit_users = $dolibarr_main_limit_users;
|
||||||
$conf->file->mailing_limit_sendbyweb = $dolibarr_mailing_limit_sendbyweb;
|
$conf->file->mailing_limit_sendbyweb = $dolibarr_mailing_limit_sendbyweb;
|
||||||
|
$conf->file->mailing_limit_sendbycli = $dolibarr_mailing_limit_sendbycli;
|
||||||
$conf->file->main_authentication = empty($dolibarr_main_authentication)?'':$dolibarr_main_authentication; // Identification mode
|
$conf->file->main_authentication = empty($dolibarr_main_authentication)?'':$dolibarr_main_authentication; // Identification mode
|
||||||
$conf->file->main_force_https = empty($dolibarr_main_force_https)?'':$dolibarr_main_force_https; // Force https
|
$conf->file->main_force_https = empty($dolibarr_main_force_https)?'':$dolibarr_main_force_https; // Force https
|
||||||
$conf->file->strict_mode = empty($dolibarr_strict_mode)?'':$dolibarr_strict_mode; // Force php strict mode (for debug)
|
$conf->file->strict_mode = empty($dolibarr_strict_mode)?'':$dolibarr_strict_mode; // Force php strict mode (for debug)
|
||||||
@ -188,6 +189,18 @@ if (! empty($conf->file->mailing_limit_sendbyweb))
|
|||||||
{
|
{
|
||||||
$conf->global->MAILING_LIMIT_SENDBYWEB = $conf->file->mailing_limit_sendbyweb;
|
$conf->global->MAILING_LIMIT_SENDBYWEB = $conf->file->mailing_limit_sendbyweb;
|
||||||
}
|
}
|
||||||
|
if (empty($conf->global->MAILING_LIMIT_SENDBYWEB))
|
||||||
|
{
|
||||||
|
$conf->global->MAILING_LIMIT_SENDBYWEB = 25;
|
||||||
|
}
|
||||||
|
if (! empty($conf->file->mailing_limit_sendbycli))
|
||||||
|
{
|
||||||
|
$conf->global->MAILING_LIMIT_SENDBYCLI = $conf->file->mailing_limit_sendbycli;
|
||||||
|
}
|
||||||
|
if (empty($conf->global->MAILING_LIMIT_SENDBYCLI))
|
||||||
|
{
|
||||||
|
$conf->global->MAILING_LIMIT_SENDBYCLI = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// If software has been locked. Only login $conf->global->MAIN_ONLY_LOGIN_ALLOWED is allowed.
|
// If software has been locked. Only login $conf->global->MAIN_ONLY_LOGIN_ALLOWED is allowed.
|
||||||
if (! empty($conf->global->MAIN_ONLY_LOGIN_ALLOWED))
|
if (! empty($conf->global->MAIN_ONLY_LOGIN_ALLOWED))
|
||||||
|
|||||||
@ -155,7 +155,6 @@ $genPriceOptions = function($level) use ($price_options) {
|
|||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
};
|
};
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<table class="noborder">
|
<table class="noborder">
|
||||||
@ -173,7 +172,8 @@ $genPriceOptions = function($level) use ($price_options) {
|
|||||||
<td class="fieldrequired" style="text-align: center"><?php
|
<td class="fieldrequired" style="text-align: center"><?php
|
||||||
echo $langs->trans('SellingPrice').' '.$i;
|
echo $langs->trans('SellingPrice').' '.$i;
|
||||||
// Label of price
|
// Label of price
|
||||||
if (! empty($conf->global->{"PRODUIT_MULTIPRICES_LABEL$i"})) {
|
$keyforlabel='PRODUIT_MULTIPRICES_LABEL'.$i;
|
||||||
|
if (! empty($conf->global->$keyforlabel)) {
|
||||||
print ' - '.$langs->trans($conf->global->$keyforlabel);
|
print ' - '.$langs->trans($conf->global->$keyforlabel);
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
* Copyright (C) 2014 Henry Florian <florian.henry@open-concept.pro>
|
* Copyright (C) 2014 Henry Florian <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2014-2016 Philippe Grand <philippe.grand@atoo-net.com>
|
* Copyright (C) 2014-2016 Philippe Grand <philippe.grand@atoo-net.com>
|
||||||
* Copyright (C) 2014 Ion agorria <ion@agorria.com>
|
* Copyright (C) 2014 Ion agorria <ion@agorria.com>
|
||||||
* Copyright (C) 2016 Ferran Marcet <fmarcet@2byte.es>
|
* Copyright (C) 2016-2017 Ferran Marcet <fmarcet@2byte.es>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -803,7 +803,7 @@ class Product extends CommonObject
|
|||||||
// End call triggers
|
// End call triggers
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! $error && (is_object($this->oldcopy) && $this->oldcopy->ref != $this->ref))
|
if (! $error && (is_object($this->oldcopy) && $this->oldcopy->ref !== $this->ref))
|
||||||
{
|
{
|
||||||
// We remove directory
|
// We remove directory
|
||||||
if ($conf->product->dir_output)
|
if ($conf->product->dir_output)
|
||||||
@ -908,6 +908,22 @@ class Product extends CommonObject
|
|||||||
// End call triggers
|
// End call triggers
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Delete from product_batch on product delete
|
||||||
|
if (! $error)
|
||||||
|
{
|
||||||
|
$sql = "DELETE FROM ".MAIN_DB_PREFIX.'product_batch';
|
||||||
|
$sql.= " WHERE fk_product_stock IN (";
|
||||||
|
$sql.= "SELECT rowid FROM ".MAIN_DB_PREFIX.'product_stock';
|
||||||
|
$sql.= " WHERE fk_product = ".$id.")";
|
||||||
|
dol_syslog(get_class($this).'::delete', LOG_DEBUG);
|
||||||
|
$result = $this->db->query($sql);
|
||||||
|
if (! $result)
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
$this->errors[] = $this->db->lasterror();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Delete all child tables
|
// Delete all child tables
|
||||||
if (! $error)
|
if (! $error)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
* Copyright (C) 2005-2015 Regis Houssin <regis.houssin@capnetworks.com>
|
* Copyright (C) 2005-2015 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
* Copyright (C) 2006 Andre Cianfarani <acianfa@free.fr>
|
||||||
* Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2014 Florian Henry <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2014 Juanjo Menent <jmenent@2byte.es>
|
* Copyright (C) 2014-2016 Juanjo Menent <jmenent@2byte.es>
|
||||||
* Copyright (C) 2014-2015 Philippe Grand <philippe.grand@atoo-net.com>
|
* Copyright (C) 2014-2015 Philippe Grand <philippe.grand@atoo-net.com>
|
||||||
* Copyright (C) 2014 Ion agorria <ion@agorria.com>
|
* Copyright (C) 2014 Ion agorria <ion@agorria.com>
|
||||||
* Copyright (C) 2015 Alexandre Spangaro <aspangaro.dolibarr@gmail.com>
|
* Copyright (C) 2015 Alexandre Spangaro <aspangaro.dolibarr@gmail.com>
|
||||||
@ -250,6 +250,13 @@ if (empty($reshook))
|
|||||||
$localtax2 = $obj->localtax2;
|
$localtax2 = $obj->localtax2;
|
||||||
$localtax1_type = $obj->localtax1_type;
|
$localtax1_type = $obj->localtax1_type;
|
||||||
$localtax2_type = $obj->localtax2_type;
|
$localtax2_type = $obj->localtax2_type;
|
||||||
|
|
||||||
|
// If spain, we don't use the localtax found into tax record in database with same code, but using the get_localtax rule
|
||||||
|
if (in_array($mysoc->country_code, array('ES')))
|
||||||
|
{
|
||||||
|
$localtax1 = get_localtax($tva_tx,1);
|
||||||
|
$localtax2 = get_localtax($tva_tx,2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$pricestoupdate[0] = array(
|
$pricestoupdate[0] = array(
|
||||||
@ -1269,14 +1276,14 @@ if ($result)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
print '<td align="right">' . ($objp->price_base_type != 'TTC' ? price($objp->price) : ''). "</td>";
|
print '<td align="right">' . price($objp->price). "</td>";
|
||||||
print '<td align="right">' . ($objp->price_base_type == 'TTC' ? price($objp->price_ttc) : '') . "</td>";
|
print '<td align="right">' . price($objp->price_ttc) . "</td>";
|
||||||
if (! empty($conf->dynamicprices->enabled)) { //Only if module is enabled
|
if (! empty($conf->dynamicprices->enabled)) { //Only if module is enabled
|
||||||
print '<td align="right"></td>';
|
print '<td align="right"></td>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
print '<td align="right">' . ($objp->price_base_type != 'TTC' ? price($objp->price_min) : '') . '</td>';
|
print '<td align="right">' . price($objp->price_min) . '</td>';
|
||||||
print '<td align="right">' . ($objp->price_base_type == 'TTC' ? price($objp->price_min_ttc) : '') . '</td>';
|
print '<td align="right">' . price($objp->price_min_ttc) . '</td>';
|
||||||
|
|
||||||
// User
|
// User
|
||||||
print '<td align="right"><a href="' . DOL_URL_ROOT . '/user/card.php?id=' . $objp->user_id . '">' . img_object($langs->trans("ShowUser"), 'user') . ' ' . $objp->login . '</a></td>';
|
print '<td align="right"><a href="' . DOL_URL_ROOT . '/user/card.php?id=' . $objp->user_id . '">' . img_object($langs->trans("ShowUser"), 'user') . ' ' . $objp->login . '</a></td>';
|
||||||
|
|||||||
@ -115,8 +115,8 @@ if ($action == "correct_stock")
|
|||||||
|
|
||||||
//$eatby=GETPOST('eatby');
|
//$eatby=GETPOST('eatby');
|
||||||
//$sellby=GETPOST('sellby');
|
//$sellby=GETPOST('sellby');
|
||||||
$eatby=dol_mktime(12, 0, 0, GETPOST('eatbymonth'), GETPOST('eatbyday'), GETPOST('eatbyyear'));
|
$eatby=dol_mktime(0, 0, 0, GETPOST('eatbymonth'), GETPOST('eatbyday'), GETPOST('eatbyyear'));
|
||||||
$sellby=dol_mktime(12, 0, 0, GETPOST('sellbymonth'), GETPOST('sellbyday'), GETPOST('sellbyyear'));
|
$sellby=dol_mktime(0, 0, 0, GETPOST('sellbymonth'), GETPOST('sellbyday'), GETPOST('sellbyyear'));
|
||||||
|
|
||||||
$result=$product->correct_stock_batch(
|
$result=$product->correct_stock_batch(
|
||||||
$user,
|
$user,
|
||||||
|
|||||||
@ -54,8 +54,8 @@ $stocklimit = GETPOST('seuil_stock_alerte');
|
|||||||
$desiredstock = GETPOST('desiredstock');
|
$desiredstock = GETPOST('desiredstock');
|
||||||
$cancel = GETPOST('cancel');
|
$cancel = GETPOST('cancel');
|
||||||
$fieldid = isset($_GET["ref"])?'ref':'rowid';
|
$fieldid = isset($_GET["ref"])?'ref':'rowid';
|
||||||
$d_eatby=dol_mktime(12, 0, 0, $_POST['eatbymonth'], $_POST['eatbyday'], $_POST['eatbyyear']);
|
$d_eatby=dol_mktime(0, 0, 0, $_POST['eatbymonth'], $_POST['eatbyday'], $_POST['eatbyyear']);
|
||||||
$d_sellby=dol_mktime(12, 0, 0, $_POST['sellbymonth'], $_POST['sellbyday'], $_POST['sellbyyear']);
|
$d_sellby=dol_mktime(0, 0, 0, $_POST['sellbymonth'], $_POST['sellbyday'], $_POST['sellbyyear']);
|
||||||
$pdluoid=GETPOST('pdluoid','int');
|
$pdluoid=GETPOST('pdluoid','int');
|
||||||
|
|
||||||
// Security check
|
// Security check
|
||||||
@ -352,8 +352,8 @@ if ($action == 'updateline' && GETPOST('save') == $langs->trans('Save'))
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$d_eatby=dol_mktime(12, 0, 0, $_POST['eatbymonth'], $_POST['eatbyday'], $_POST['eatbyyear']);
|
$d_eatby=dol_mktime(0, 0, 0, $_POST['eatbymonth'], $_POST['eatbyday'], $_POST['eatbyyear']);
|
||||||
$d_sellby=dol_mktime(12, 0, 0, $_POST['sellbymonth'], $_POST['sellbyday'], $_POST['sellbyyear']);
|
$d_sellby=dol_mktime(0, 0, 0, $_POST['sellbymonth'], $_POST['sellbyday'], $_POST['sellbyyear']);
|
||||||
$pdluo->batch=GETPOST("batch_number",'san_alpha');
|
$pdluo->batch=GETPOST("batch_number",'san_alpha');
|
||||||
$pdluo->eatby=$d_eatby;
|
$pdluo->eatby=$d_eatby;
|
||||||
$pdluo->sellby=$d_sellby;
|
$pdluo->sellby=$d_sellby;
|
||||||
|
|||||||
@ -4,6 +4,7 @@
|
|||||||
* Copyright (C) 2005-2010 Regis Houssin <regis.houssin@capnetworks.com>
|
* Copyright (C) 2005-2010 Regis Houssin <regis.houssin@capnetworks.com>
|
||||||
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
* Copyright (C) 2013 Florian Henry <florian.henry@open-concept.pro>
|
||||||
* Copyright (C) 2014-2015 Marcos García <marcosgdf@gmail.com>
|
* Copyright (C) 2014-2015 Marcos García <marcosgdf@gmail.com>
|
||||||
|
* Copyright (C) 2017 Ferran Marcet <fmarcet@2byte.es>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -279,7 +280,7 @@ class Project extends CommonObject
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! $error && (is_object($this->oldcopy) && $this->oldcopy->ref != $this->ref))
|
if (! $error && (is_object($this->oldcopy) && $this->oldcopy->ref !== $this->ref))
|
||||||
{
|
{
|
||||||
// We remove directory
|
// We remove directory
|
||||||
if ($conf->projet->dir_output)
|
if ($conf->projet->dir_output)
|
||||||
|
|||||||
@ -250,6 +250,7 @@ if ($type_element == 'supplier_invoice')
|
|||||||
$tables_from = MAIN_DB_PREFIX."facture_fourn as f,".MAIN_DB_PREFIX."facture_fourn_det as d";
|
$tables_from = MAIN_DB_PREFIX."facture_fourn as f,".MAIN_DB_PREFIX."facture_fourn_det as d";
|
||||||
$where = " WHERE f.fk_soc = s.rowid AND s.rowid = ".$socid;
|
$where = " WHERE f.fk_soc = s.rowid AND s.rowid = ".$socid;
|
||||||
$where.= " AND d.fk_facture_fourn = f.rowid";
|
$where.= " AND d.fk_facture_fourn = f.rowid";
|
||||||
|
$where.= " AND f.entity = ".$conf->entity;
|
||||||
$dateprint = 'f.datef';
|
$dateprint = 'f.datef';
|
||||||
$doc_number='f.ref';
|
$doc_number='f.ref';
|
||||||
$thirdTypeSelect='supplier';
|
$thirdTypeSelect='supplier';
|
||||||
@ -262,6 +263,7 @@ if ($type_element == 'supplier_order')
|
|||||||
$tables_from = MAIN_DB_PREFIX."commande_fournisseur as c,".MAIN_DB_PREFIX."commande_fournisseurdet as d";
|
$tables_from = MAIN_DB_PREFIX."commande_fournisseur as c,".MAIN_DB_PREFIX."commande_fournisseurdet as d";
|
||||||
$where = " WHERE c.fk_soc = s.rowid AND s.rowid = ".$socid;
|
$where = " WHERE c.fk_soc = s.rowid AND s.rowid = ".$socid;
|
||||||
$where.= " AND d.fk_commande = c.rowid";
|
$where.= " AND d.fk_commande = c.rowid";
|
||||||
|
$where.= " AND c.entity = ".$conf->entity;
|
||||||
$dateprint = 'c.date_valid';
|
$dateprint = 'c.date_valid';
|
||||||
$doc_number='c.ref';
|
$doc_number='c.ref';
|
||||||
$thirdTypeSelect='supplier';
|
$thirdTypeSelect='supplier';
|
||||||
@ -275,6 +277,7 @@ if ($type_element == 'contract')
|
|||||||
$tables_from = MAIN_DB_PREFIX."contrat as c,".MAIN_DB_PREFIX."contratdet as d";
|
$tables_from = MAIN_DB_PREFIX."contrat as c,".MAIN_DB_PREFIX."contratdet as d";
|
||||||
$where = " WHERE c.fk_soc = s.rowid AND s.rowid = ".$socid;
|
$where = " WHERE c.fk_soc = s.rowid AND s.rowid = ".$socid;
|
||||||
$where.= " AND d.fk_contrat = c.rowid";
|
$where.= " AND d.fk_contrat = c.rowid";
|
||||||
|
$where.= " AND c.entity = ".$conf->entity;
|
||||||
$dateprint = 'c.date_valid';
|
$dateprint = 'c.date_valid';
|
||||||
$doc_number='c.ref';
|
$doc_number='c.ref';
|
||||||
$thirdTypeSelect='customer';
|
$thirdTypeSelect='customer';
|
||||||
|
|||||||
@ -36,6 +36,12 @@ if (! defined('NOREQUIREAJAX')) define('NOREQUIREAJAX','1');
|
|||||||
if (! defined('NOREQUIREHOOK')) define('NOREQUIREHOOK','1'); // Disable "main.inc.php" hooks
|
if (! defined('NOREQUIREHOOK')) define('NOREQUIREHOOK','1'); // Disable "main.inc.php" hooks
|
||||||
// Pour autre que companylogo, on charge environnement + info issus de logon comme le user
|
// Pour autre que companylogo, on charge environnement + info issus de logon comme le user
|
||||||
if ((isset($_GET["modulepart"]) && $_GET["modulepart"] == 'companylogo') && ! defined("NOLOGIN")) define("NOLOGIN",'1');
|
if ((isset($_GET["modulepart"]) && $_GET["modulepart"] == 'companylogo') && ! defined("NOLOGIN")) define("NOLOGIN",'1');
|
||||||
|
if ((isset($_GET["modulepart"]) && $_GET["modulepart"] == 'fckeditor') && ! defined("NOLOGIN")) {
|
||||||
|
define("NOLOGIN",'1');
|
||||||
|
// For multicompany
|
||||||
|
$entity=(! empty($_GET['entity']) ? (int) $_GET['entity'] : (! empty($_POST['entity']) ? (int) $_POST['entity'] : 1));
|
||||||
|
if (is_numeric($entity)) define("DOLENTITY", $entity);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Header empty
|
* Header empty
|
||||||
|
|||||||
@ -61,6 +61,11 @@ $error=0;
|
|||||||
@set_time_limit(0);
|
@set_time_limit(0);
|
||||||
print "***** ".$script_file." (".$version.") pid=".dol_getmypid()." *****\n";
|
print "***** ".$script_file." (".$version.") pid=".dol_getmypid()." *****\n";
|
||||||
|
|
||||||
|
if ($conf->global->MAILING_LIMIT_SENDBYCLI == '-1')
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
$user = new User($db);
|
$user = new User($db);
|
||||||
// for signature, we use user send as parameter
|
// for signature, we use user send as parameter
|
||||||
if (! empty($login)) $user->fetch('',$login);
|
if (! empty($login)) $user->fetch('',$login);
|
||||||
@ -108,6 +113,10 @@ if ($resql)
|
|||||||
$sql2 = "SELECT mc.rowid, mc.lastname as lastname, mc.firstname as firstname, mc.email, mc.other, mc.source_url, mc.source_id, mc.source_type, mc.tag";
|
$sql2 = "SELECT mc.rowid, mc.lastname as lastname, mc.firstname as firstname, mc.email, mc.other, mc.source_url, mc.source_id, mc.source_type, mc.tag";
|
||||||
$sql2.= " FROM ".MAIN_DB_PREFIX."mailing_cibles as mc";
|
$sql2.= " FROM ".MAIN_DB_PREFIX."mailing_cibles as mc";
|
||||||
$sql2.= " WHERE mc.statut < 1 AND mc.fk_mailing = ".$id;
|
$sql2.= " WHERE mc.statut < 1 AND mc.fk_mailing = ".$id;
|
||||||
|
if ($conf->global->MAILING_LIMIT_SENDBYCLI > 0)
|
||||||
|
{
|
||||||
|
$sql2.= " LIMIT ".$conf->global->MAILING_LIMIT_SENDBYCLI;
|
||||||
|
}
|
||||||
|
|
||||||
$resql2=$db->query($sql2);
|
$resql2=$db->query($sql2);
|
||||||
if ($resql2)
|
if ($resql2)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user